diff --git a/hardware/arduino/avr/libraries/WiFi/examples/WiFiTwitterClient/WiFiTwitterClient.ino b/hardware/arduino/avr/libraries/WiFi/examples/WiFiTwitterClient/WiFiTwitterClient.ino deleted file mode 100644 index d500cfb9b..000000000 --- a/hardware/arduino/avr/libraries/WiFi/examples/WiFiTwitterClient/WiFiTwitterClient.ino +++ /dev/null @@ -1,163 +0,0 @@ -/* - Wifi Twitter Client with Strings - - This sketch connects to Twitter using using an Arduino WiFi shield. - It parses the XML returned, and looks for this is a tweet - - This example is written for a network using WPA encryption. For - WEP or WPA, change the Wifi.begin() call accordingly. - - This example uses the String library, which is part of the Arduino core from - version 0019. - - Circuit: - * WiFi shield attached to pins 10, 11, 12, 13 - - created 23 apr 2012 - modified 31 May 2012 - by Tom Igoe - - This code is in the public domain. - - */ -#include -#include - -char ssid[] = "yourNetwork"; // your network SSID (name) -char pass[] = "password"; // your network password (use for WPA, or use as key for WEP) -int keyIndex = 0; // your network key Index number (needed only for WEP) - -int status = WL_IDLE_STATUS; // status of the wifi connection - -// initialize the library instance: -WiFiClient client; - -const unsigned long requestInterval = 30*1000; // delay between requests; 30 seconds - -// if you don't want to use DNS (and reduce your sketch size) -// use the numeric IP instead of the name for the server: -//IPAddress server(199,59,149,200); // numeric IP for api.twitter.com -char server[] = "api.twitter.com"; // name address for twitter API - -boolean requested; // whether you've made a request since connecting -unsigned long lastAttemptTime = 0; // last time you connected to the server, in milliseconds - -String currentLine = ""; // string to hold the text from server -String tweet = ""; // string to hold the tweet -boolean readingTweet = false; // if you're currently reading the tweet - -void setup() { - // reserve space for the strings: - currentLine.reserve(256); - tweet.reserve(150); - //Initialize serial and wait for port to open: - Serial.begin(9600); - while (!Serial) { - ; // wait for serial port to connect. Needed for Leonardo only - } - - // check for the presence of the shield: - if (WiFi.status() == WL_NO_SHIELD) { - Serial.println("WiFi shield not present"); - // don't continue: - while(true); - } - - // attempt to connect to Wifi network: - while ( status != WL_CONNECTED) { - Serial.print("Attempting to connect to SSID: "); - Serial.println(ssid); - // Connect to WPA/WPA2 network. Change this line if using open or WEP network: - status = WiFi.begin(ssid, pass); - - // wait 10 seconds for connection: - delay(10000); - } - // you're connected now, so print out the status: - printWifiStatus(); - connectToServer(); -} - -void loop() -{ - if (client.connected()) { - if (client.available()) { - // read incoming bytes: - char inChar = client.read(); - - // add incoming byte to end of line: - currentLine += inChar; - - // if you get a newline, clear the line: - if (inChar == '\n') { - currentLine = ""; - } - // if the current line ends with , it will - // be followed by the tweet: - if ( currentLine.endsWith("")) { - // tweet is beginning. Clear the tweet string: - readingTweet = true; - tweet = ""; - // break out of the loop so this character isn't added to the tweet: - return; - } - // if you're currently reading the bytes of a tweet, - // add them to the tweet String: - if (readingTweet) { - if (inChar != '<') { - tweet += inChar; - } - else { - // if you got a "<" character, - // you've reached the end of the tweet: - readingTweet = false; - Serial.println(tweet); - // close the connection to the server: - client.stop(); - } - } - } - } - else if (millis() - lastAttemptTime > requestInterval) { - // if you're not connected, and two minutes have passed since - // your last connection, then attempt to connect again: - connectToServer(); - } -} - -void connectToServer() { - // attempt to connect, and wait a millisecond: - Serial.println("connecting to server..."); - if (client.connect(server, 80)) { - Serial.println("making HTTP request..."); - // make HTTP GET request to twitter: - client.println("GET /1/statuses/user_timeline.xml?screen_name=arduino HTTP/1.1"); - client.println("Host: api.twitter.com"); - client.println("Connection: close"); - client.println(); - } - // note the time of this connect attempt: - lastAttemptTime = millis(); -} - - -void printWifiStatus() { - // print the SSID of the network you're attached to: - Serial.print("SSID: "); - Serial.println(WiFi.SSID()); - - // print your WiFi shield's IP address: - IPAddress ip = WiFi.localIP(); - Serial.print("IP Address: "); - Serial.println(ip); - - // print the received signal strength: - long rssi = WiFi.RSSI(); - Serial.print("signal strength (RSSI):"); - Serial.print(rssi); - Serial.println(" dBm"); -} - - - - diff --git a/hardware/arduino/avr/libraries/WiFi/utility/socket.c b/hardware/arduino/avr/libraries/WiFi/utility/socket.c deleted file mode 100644 index 665073b04..000000000 --- a/hardware/arduino/avr/libraries/WiFi/utility/socket.c +++ /dev/null @@ -1,20 +0,0 @@ -/* -* -@file socket.c -@brief define function of socket API -* -*/ -#include -#include "socket.h" - -SOCKET socket(uint8 protocol) {return 0;} // Opens a socket(TCP or UDP or IP_RAW mode) -void close(SOCKET s) {} // Close socket -uint8 connect(SOCKET s, uint8 * addr, uint16 port) {return 0;} // Establish TCP connection (Active connection) -void disconnect(SOCKET s) {} // disconnect the connection -uint8 listen(SOCKET s) { return 0;} // Establish TCP connection (Passive connection) -uint16 send(SOCKET s, const uint8 * buf, uint16 len) { return 0;} // Send data (TCP) -uint16 recv(SOCKET s, uint8 * buf, uint16 len) {return 0;} // Receive data (TCP) -uint16 sendto(SOCKET s, const uint8 * buf, uint16 len, uint8 * addr, uint16 port) {return 0;} // Send data (UDP/IP RAW) -uint16 recvfrom(SOCKET s, uint8 * buf, uint16 len, uint8 * addr, uint16 *port) {return 0;} // Receive data (UDP/IP RAW) - -uint16 igmpsend(SOCKET s, const uint8 * buf, uint16 len) {return 0;} diff --git a/hardware/arduino/sam/libraries/WiFi/WiFi.cpp b/hardware/arduino/sam/libraries/WiFi/WiFi.cpp deleted file mode 100644 index c0cb0016d..000000000 --- a/hardware/arduino/sam/libraries/WiFi/WiFi.cpp +++ /dev/null @@ -1,199 +0,0 @@ -#include "wifi_drv.h" -#include "WiFi.h" - -extern "C" { - #include "utility/wl_definitions.h" - #include "utility/wl_types.h" - #include "debug.h" -} - -// XXX: don't make assumptions about the value of MAX_SOCK_NUM. -int16_t WiFiClass::_state[MAX_SOCK_NUM] = { 0, 0, 0, 0 }; -uint16_t WiFiClass::_server_port[MAX_SOCK_NUM] = { 0, 0, 0, 0 }; - -WiFiClass::WiFiClass() -{ - // Driver initialization - init(); -} - -void WiFiClass::init() -{ - WiFiDrv::wifiDriverInit(); -} - -uint8_t WiFiClass::getSocket() -{ - for (uint8_t i = 0; i < MAX_SOCK_NUM; ++i) - { - if (WiFiClass::_server_port[i] == 0) - { - return i; - } - } - return NO_SOCKET_AVAIL; -} - -char* WiFiClass::firmwareVersion() -{ - return WiFiDrv::getFwVersion(); -} - -int WiFiClass::begin(char* ssid) -{ - uint8_t status = WL_IDLE_STATUS; - uint8_t attempts = WL_MAX_ATTEMPT_CONNECTION; - - if (WiFiDrv::wifiSetNetwork(ssid, strlen(ssid)) != WL_FAILURE) - { - do - { - delay(WL_DELAY_START_CONNECTION); - status = WiFiDrv::getConnectionStatus(); - } - while ((( status == WL_IDLE_STATUS)||(status == WL_SCAN_COMPLETED))&&(--attempts>0)); - }else - { - status = WL_CONNECT_FAILED; - } - return status; -} - -int WiFiClass::begin(char* ssid, uint8_t key_idx, const char *key) -{ - uint8_t status = WL_IDLE_STATUS; - uint8_t attempts = WL_MAX_ATTEMPT_CONNECTION; - - // set encryption key - if (WiFiDrv::wifiSetKey(ssid, strlen(ssid), key_idx, key, strlen(key)) != WL_FAILURE) - { - do - { - delay(WL_DELAY_START_CONNECTION); - status = WiFiDrv::getConnectionStatus(); - } - while ((( status == WL_IDLE_STATUS)||(status == WL_SCAN_COMPLETED))&&(--attempts>0)); - }else{ - status = WL_CONNECT_FAILED; - } - return status; -} - -int WiFiClass::begin(char* ssid, const char *passphrase) -{ - uint8_t status = WL_IDLE_STATUS; - uint8_t attempts = WL_MAX_ATTEMPT_CONNECTION; - - // set passphrase - if (WiFiDrv::wifiSetPassphrase(ssid, strlen(ssid), passphrase, strlen(passphrase))!= WL_FAILURE) - { - do - { - delay(WL_DELAY_START_CONNECTION); - status = WiFiDrv::getConnectionStatus(); - } - while ((( status == WL_IDLE_STATUS)||(status == WL_SCAN_COMPLETED))&&(--attempts>0)); - }else{ - status = WL_CONNECT_FAILED; - } - return status; -} - -int WiFiClass::disconnect() -{ - return WiFiDrv::disconnect(); -} - -uint8_t* WiFiClass::macAddress(uint8_t* mac) -{ - uint8_t* _mac = WiFiDrv::getMacAddress(); - memcpy(mac, _mac, WL_MAC_ADDR_LENGTH); - return mac; -} - -IPAddress WiFiClass::localIP() -{ - IPAddress ret; - WiFiDrv::getIpAddress(ret); - return ret; -} - -IPAddress WiFiClass::subnetMask() -{ - IPAddress ret; - WiFiDrv::getSubnetMask(ret); - return ret; -} - -IPAddress WiFiClass::gatewayIP() -{ - IPAddress ret; - WiFiDrv::getGatewayIP(ret); - return ret; -} - -char* WiFiClass::SSID() -{ - return WiFiDrv::getCurrentSSID(); -} - -uint8_t* WiFiClass::BSSID(uint8_t* bssid) -{ - uint8_t* _bssid = WiFiDrv::getCurrentBSSID(); - memcpy(bssid, _bssid, WL_MAC_ADDR_LENGTH); - return bssid; -} - -int32_t WiFiClass::RSSI() -{ - return WiFiDrv::getCurrentRSSI(); -} - -uint8_t WiFiClass::encryptionType() -{ - return WiFiDrv::getCurrentEncryptionType(); -} - - -int8_t WiFiClass::scanNetworks() -{ - uint8_t attempts = 10; - uint8_t numOfNetworks = 0; - - if (WiFiDrv::startScanNetworks() == WL_FAILURE) - return WL_FAILURE; - do - { - delay(2000); - numOfNetworks = WiFiDrv::getScanNetworks(); - } - while (( numOfNetworks == 0)&&(--attempts>0)); - return numOfNetworks; -} - -char* WiFiClass::SSID(uint8_t networkItem) -{ - return WiFiDrv::getSSIDNetoworks(networkItem); -} - -int32_t WiFiClass::RSSI(uint8_t networkItem) -{ - return WiFiDrv::getRSSINetoworks(networkItem); -} - -uint8_t WiFiClass::encryptionType(uint8_t networkItem) -{ - return WiFiDrv::getEncTypeNetowrks(networkItem); -} - -uint8_t WiFiClass::status() -{ - return WiFiDrv::getConnectionStatus(); -} - -int WiFiClass::hostByName(const char* aHostname, IPAddress& aResult) -{ - return WiFiDrv::getHostByName(aHostname, aResult); -} - -WiFiClass WiFi; diff --git a/hardware/arduino/sam/libraries/WiFi/WiFi.h b/hardware/arduino/sam/libraries/WiFi/WiFi.h deleted file mode 100644 index 9a86701a0..000000000 --- a/hardware/arduino/sam/libraries/WiFi/WiFi.h +++ /dev/null @@ -1,183 +0,0 @@ -#ifndef WiFi_h -#define WiFi_h - -#include - -extern "C" { - #include "utility/wl_definitions.h" - #include "utility/wl_types.h" -} - -#include "IPAddress.h" -#include "WiFiClient.h" -#include "WiFiServer.h" - -class WiFiClass -{ -private: - - static void init(); -public: - static int16_t _state[MAX_SOCK_NUM]; - static uint16_t _server_port[MAX_SOCK_NUM]; - - WiFiClass(); - - /* - * Get the first socket available - */ - static uint8_t getSocket(); - - /* - * Get firmware version - */ - static char* firmwareVersion(); - - - /* Start Wifi connection for OPEN networks - * - * param ssid: Pointer to the SSID string. - */ - int begin(char* ssid); - - /* Start Wifi connection with WEP encryption. - * Configure a key into the device. The key type (WEP-40, WEP-104) - * is determined by the size of the key (5 bytes for WEP-40, 13 bytes for WEP-104). - * - * param ssid: Pointer to the SSID string. - * param key_idx: The key index to set. Valid values are 0-3. - * param key: Key input buffer. - */ - int begin(char* ssid, uint8_t key_idx, const char* key); - - /* Start Wifi connection with passphrase - * the most secure supported mode will be automatically selected - * - * param ssid: Pointer to the SSID string. - * param passphrase: Passphrase. Valid characters in a passphrase - * must be between ASCII 32-126 (decimal). - */ - int begin(char* ssid, const char *passphrase); - - /* - * Disconnect from the network - * - * return: one value of wl_status_t enum - */ - int disconnect(void); - - /* - * Get the interface MAC address. - * - * return: pointer to uint8_t array with length WL_MAC_ADDR_LENGTH - */ - uint8_t* macAddress(uint8_t* mac); - - /* - * Get the interface IP address. - * - * return: Ip address value - */ - IPAddress localIP(); - - /* - * Get the interface subnet mask address. - * - * return: subnet mask address value - */ - IPAddress subnetMask(); - - /* - * Get the gateway ip address. - * - * return: gateway ip address value - */ - IPAddress gatewayIP(); - - /* - * Return the current SSID associated with the network - * - * return: ssid string - */ - char* SSID(); - - /* - * Return the current BSSID associated with the network. - * It is the MAC address of the Access Point - * - * return: pointer to uint8_t array with length WL_MAC_ADDR_LENGTH - */ - uint8_t* BSSID(uint8_t* bssid); - - /* - * Return the current RSSI /Received Signal Strength in dBm) - * associated with the network - * - * return: signed value - */ - int32_t RSSI(); - - /* - * Return the Encryption Type associated with the network - * - * return: one value of wl_enc_type enum - */ - uint8_t encryptionType(); - - /* - * Start scan WiFi networks available - * - * return: Number of discovered networks - */ - int8_t scanNetworks(); - - /* - * Return the SSID discovered during the network scan. - * - * param networkItem: specify from which network item want to get the information - * - * return: ssid string of the specified item on the networks scanned list - */ - char* SSID(uint8_t networkItem); - - /* - * Return the encryption type of the networks discovered during the scanNetworks - * - * param networkItem: specify from which network item want to get the information - * - * return: encryption type (enum wl_enc_type) of the specified item on the networks scanned list - */ - uint8_t encryptionType(uint8_t networkItem); - - /* - * Return the RSSI of the networks discovered during the scanNetworks - * - * param networkItem: specify from which network item want to get the information - * - * return: signed value of RSSI of the specified item on the networks scanned list - */ - int32_t RSSI(uint8_t networkItem); - - /* - * Return Connection status. - * - * return: one of the value defined in wl_status_t - */ - uint8_t status(); - - /* - * Resolve the given hostname to an IP address. - * param aHostname: Name to be resolved - * param aResult: IPAddress structure to store the returned IP address - * result: 1 if aIPAddrString was successfully converted to an IP address, - * else error code - */ - int hostByName(const char* aHostname, IPAddress& aResult); - - friend class WiFiClient; - friend class WiFiServer; -}; - -extern WiFiClass WiFi; - -#endif diff --git a/hardware/arduino/sam/libraries/WiFi/WiFiClient.h b/hardware/arduino/sam/libraries/WiFi/WiFiClient.h deleted file mode 100644 index 5a7f0f3b8..000000000 --- a/hardware/arduino/sam/libraries/WiFi/WiFiClient.h +++ /dev/null @@ -1,40 +0,0 @@ -#ifndef wificlient_h -#define wificlient_h -#include "Arduino.h" -#include "Print.h" -#include "Client.h" -#include "IPAddress.h" - -class WiFiClient : public Client { - -public: - WiFiClient(); - WiFiClient(uint8_t sock); - - uint8_t status(); - virtual int connect(IPAddress ip, uint16_t port); - virtual int connect(const char *host, uint16_t port); - virtual size_t write(uint8_t); - virtual size_t write(const uint8_t *buf, size_t size); - virtual int available(); - virtual int read(); - virtual int read(uint8_t *buf, size_t size); - virtual int peek(); - virtual void flush(); - virtual void stop(); - virtual uint8_t connected(); - virtual operator bool(); - - friend class WiFiServer; - - using Print::write; - -private: - static uint16_t _srcport; - uint8_t _sock; //not used - uint16_t _socket; - - uint8_t getFirstSocket(); -}; - -#endif diff --git a/hardware/arduino/sam/libraries/WiFi/WiFiServer.cpp b/hardware/arduino/sam/libraries/WiFi/WiFiServer.cpp deleted file mode 100644 index 77dbac0b9..000000000 --- a/hardware/arduino/sam/libraries/WiFi/WiFiServer.cpp +++ /dev/null @@ -1,88 +0,0 @@ -#include -#include "server_drv.h" - -extern "C" { - #include "utility/debug.h" -} - -#include "WiFi.h" -#include "WiFiClient.h" -#include "WiFiServer.h" - -WiFiServer::WiFiServer(uint16_t port) -{ - _port = port; -} - -void WiFiServer::begin() -{ - uint8_t _sock = WiFiClass::getSocket(); - if (_sock != NO_SOCKET_AVAIL) - { - ServerDrv::startServer(_port, _sock); - WiFiClass::_server_port[_sock] = _port; - } -} - -WiFiClient WiFiServer::available(byte* status) -{ - static int cycle_server_down = 0; - const int TH_SERVER_DOWN = 50; - - for (int sock = 0; sock < MAX_SOCK_NUM; sock++) - { - if (WiFiClass::_server_port[sock] == _port) - { - WiFiClient client(sock); - uint8_t _status = client.status(); - uint8_t _ser_status = this->status(); - - if (status != NULL) - *status = _status; - - //server not in listen state, restart it - if ((_ser_status == 0)&&(cycle_server_down++ > TH_SERVER_DOWN)) - { - ServerDrv::startServer(_port, sock); - cycle_server_down = 0; - } - - if (_status == ESTABLISHED) - { - return client; //TODO - } - } - } - - return WiFiClient(255); -} - -uint8_t WiFiServer::status() { - return ServerDrv::getServerState(0); -} - - -size_t WiFiServer::write(uint8_t b) -{ - return write(&b, 1); -} - -size_t WiFiServer::write(const uint8_t *buffer, size_t size) -{ - size_t n = 0; - - for (int sock = 0; sock < MAX_SOCK_NUM; sock++) - { - if (WiFiClass::_server_port[sock] != 0) - { - WiFiClient client(sock); - - if (WiFiClass::_server_port[sock] == _port && - client.status() == ESTABLISHED) - { - n+=client.write(buffer, size); - } - } - } - return n; -} diff --git a/hardware/arduino/sam/libraries/WiFi/WiFiServer.h b/hardware/arduino/sam/libraries/WiFi/WiFiServer.h deleted file mode 100644 index 68b574c29..000000000 --- a/hardware/arduino/sam/libraries/WiFi/WiFiServer.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef wifiserver_h -#define wifiserver_h - -extern "C" { - #include "utility/wl_definitions.h" -} - -#include "Server.h" - -class WiFiClient; - -class WiFiServer : public Server { -private: - uint16_t _port; - void* pcb; -public: - WiFiServer(uint16_t); - WiFiClient available(uint8_t* status = NULL); - void begin(); - virtual size_t write(uint8_t); - virtual size_t write(const uint8_t *buf, size_t size); - uint8_t status(); - - using Print::write; -}; - -#endif diff --git a/hardware/arduino/sam/libraries/WiFi/examples/ConnectNoEncryption/ConnectNoEncryption.ino b/hardware/arduino/sam/libraries/WiFi/examples/ConnectNoEncryption/ConnectNoEncryption.ino deleted file mode 100644 index 1437ff263..000000000 --- a/hardware/arduino/sam/libraries/WiFi/examples/ConnectNoEncryption/ConnectNoEncryption.ino +++ /dev/null @@ -1,123 +0,0 @@ -/* - - This example connects to an unencrypted Wifi network. - Then it prints the MAC address of the Wifi shield, - the IP address obtained, and other network details. - - Circuit: - * WiFi shield attached - - created 13 July 2010 - by dlf (Metodo2 srl) - modified 31 May 2012 - by Tom Igoe - */ - -#include -#include - -char ssid[] = "yourNetwork"; // the name of your network -int status = WL_IDLE_STATUS; // the Wifi radio's status - -void setup() { - //Initialize serial and wait for port to open: - Serial.begin(9600); - while (!Serial) { - ; // wait for serial port to connect. Needed for Leonardo only - } - - // check for the presence of the shield: - if (WiFi.status() == WL_NO_SHIELD) { - Serial.println("WiFi shield not present"); - // don't continue: - while(true); - } - - // attempt to connect to Wifi network: - while ( status != WL_CONNECTED) { - Serial.print("Attempting to connect to open SSID: "); - Serial.println(ssid); - status = WiFi.begin(ssid); - - // wait 10 seconds for connection: - delay(10000); - } - - // you're connected now, so print out the data: - Serial.print("You're connected to the network"); - printCurrentNet(); - printWifiData(); -} - -void loop() { - // check the network connection once every 10 seconds: - delay(10000); - printCurrentNet(); -} - -void printWifiData() { - // print your WiFi shield's IP address: - IPAddress ip = WiFi.localIP(); - Serial.print("IP Address: "); - Serial.println(ip); - Serial.println(ip); - - // print your MAC address: - byte mac[6]; - WiFi.macAddress(mac); - Serial.print("MAC address: "); - Serial.print(mac[5],HEX); - Serial.print(":"); - Serial.print(mac[4],HEX); - Serial.print(":"); - Serial.print(mac[3],HEX); - Serial.print(":"); - Serial.print(mac[2],HEX); - Serial.print(":"); - Serial.print(mac[1],HEX); - Serial.print(":"); - Serial.println(mac[0],HEX); - - // print your subnet mask: - IPAddress subnet = WiFi.subnetMask(); - Serial.print("NetMask: "); - Serial.println(subnet); - - // print your gateway address: - IPAddress gateway = WiFi.gatewayIP(); - Serial.print("Gateway: "); - Serial.println(gateway); -} - -void printCurrentNet() { - // print the SSID of the network you're attached to: - Serial.print("SSID: "); - Serial.println(WiFi.SSID()); - - // print the MAC address of the router you're attached to: - byte bssid[6]; - WiFi.BSSID(bssid); - Serial.print("BSSID: "); - Serial.print(bssid[5],HEX); - Serial.print(":"); - Serial.print(bssid[4],HEX); - Serial.print(":"); - Serial.print(bssid[3],HEX); - Serial.print(":"); - Serial.print(bssid[2],HEX); - Serial.print(":"); - Serial.print(bssid[1],HEX); - Serial.print(":"); - Serial.println(bssid[0],HEX); - - // print the received signal strength: - long rssi = WiFi.RSSI(); - Serial.print("signal strength (RSSI):"); - Serial.println(rssi); - - // print the encryption type: - byte encryption = WiFi.encryptionType(); - Serial.print("Encryption Type:"); - Serial.println(encryption,HEX); -} - diff --git a/hardware/arduino/sam/libraries/WiFi/examples/ConnectWithWEP/ConnectWithWEP.ino b/hardware/arduino/sam/libraries/WiFi/examples/ConnectWithWEP/ConnectWithWEP.ino deleted file mode 100644 index 184951241..000000000 --- a/hardware/arduino/sam/libraries/WiFi/examples/ConnectWithWEP/ConnectWithWEP.ino +++ /dev/null @@ -1,128 +0,0 @@ -/* - - This example connects to a WEP-encrypted Wifi network. - Then it prints the MAC address of the Wifi shield, - the IP address obtained, and other network details. - - If you use 40-bit WEP, you need a key that is 10 characters long, - and the characters must be hexadecimal (0-9 or A-F). - e.g. for 40-bit, ABBADEAF01 will work, but ABBADEAF won't work - (too short) and ABBAISDEAF won't work (I and S are not - hexadecimal characters). - - For 128-bit, you need a string that is 26 characters long. - D0D0DEADF00DABBADEAFBEADED will work because it's 26 characters, - all in the 0-9, A-F range. - - Circuit: - * WiFi shield attached - - created 13 July 2010 - by dlf (Metodo2 srl) - modified 31 May 2012 - by Tom Igoe - */ - -#include -#include - -char ssid[] = "yourNetwork"; // your network SSID (name) -char key[] = "D0D0DEADF00DABBADEAFBEADED"; // your network key -int keyIndex = 0; // your network key Index number -int status = WL_IDLE_STATUS; // the Wifi radio's status - -void setup() { - //Initialize serial and wait for port to open: - Serial.begin(9600); - while (!Serial) { - ; // wait for serial port to connect. Needed for Leonardo only - } - - // check for the presence of the shield: - if (WiFi.status() == WL_NO_SHIELD) { - Serial.println("WiFi shield not present"); - // don't continue: - while(true); - } - - // attempt to connect to Wifi network: - while ( status != WL_CONNECTED) { - Serial.print("Attempting to connect to WEP network, SSID: "); - Serial.println(ssid); - status = WiFi.begin(ssid, keyIndex, key); - - // wait 10 seconds for connection: - delay(10000); - } - - // once you are connected : - Serial.print("You're connected to the network"); - printCurrentNet(); - printWifiData(); -} - -void loop() { - // check the network connection once every 10 seconds: - delay(10000); - printCurrentNet(); -} - -void printWifiData() { - // print your WiFi shield's IP address: - IPAddress ip = WiFi.localIP(); - Serial.print("IP Address: "); - Serial.println(ip); - Serial.println(ip); - - // print your MAC address: - byte mac[6]; - WiFi.macAddress(mac); - Serial.print("MAC address: "); - Serial.print(mac[5],HEX); - Serial.print(":"); - Serial.print(mac[4],HEX); - Serial.print(":"); - Serial.print(mac[3],HEX); - Serial.print(":"); - Serial.print(mac[2],HEX); - Serial.print(":"); - Serial.print(mac[1],HEX); - Serial.print(":"); - Serial.println(mac[0],HEX); -} - -void printCurrentNet() { - // print the SSID of the network you're attached to: - Serial.print("SSID: "); - Serial.println(WiFi.SSID()); - - // print the MAC address of the router you're attached to: - byte bssid[6]; - WiFi.BSSID(bssid); - Serial.print("BSSID: "); - Serial.print(bssid[5],HEX); - Serial.print(":"); - Serial.print(bssid[4],HEX); - Serial.print(":"); - Serial.print(bssid[3],HEX); - Serial.print(":"); - Serial.print(bssid[2],HEX); - Serial.print(":"); - Serial.print(bssid[1],HEX); - Serial.print(":"); - Serial.println(bssid[0],HEX); - - // print the received signal strength: - long rssi = WiFi.RSSI(); - Serial.print("signal strength (RSSI):"); - Serial.println(rssi); - - // print the encryption type: - byte encryption = WiFi.encryptionType(); - Serial.print("Encryption Type:"); - Serial.println(encryption,HEX); - Serial.println(); -} - - - diff --git a/hardware/arduino/sam/libraries/WiFi/examples/ConnectWithWPA/ConnectWithWPA.ino b/hardware/arduino/sam/libraries/WiFi/examples/ConnectWithWPA/ConnectWithWPA.ino deleted file mode 100644 index 957bad4ed..000000000 --- a/hardware/arduino/sam/libraries/WiFi/examples/ConnectWithWPA/ConnectWithWPA.ino +++ /dev/null @@ -1,118 +0,0 @@ -/* - - This example connects to an unencrypted Wifi network. - Then it prints the MAC address of the Wifi shield, - the IP address obtained, and other network details. - - Circuit: - * WiFi shield attached - - created 13 July 2010 - by dlf (Metodo2 srl) - modified 31 May 2012 - by Tom Igoe - */ - -#include -#include - -char ssid[] = "yourNetwork"; // your network SSID (name) -char pass[] = "secretPassword"; // your network password -int status = WL_IDLE_STATUS; // the Wifi radio's status - -void setup() { - //Initialize serial and wait for port to open: - Serial.begin(9600); - while (!Serial) { - ; // wait for serial port to connect. Needed for Leonardo only - } - - // check for the presence of the shield: - if (WiFi.status() == WL_NO_SHIELD) { - Serial.println("WiFi shield not present"); - // don't continue: - while(true); - } - - // attempt to connect to Wifi network: - while ( status != WL_CONNECTED) { - Serial.print("Attempting to connect to WPA SSID: "); - Serial.println(ssid); - // Connect to WPA/WPA2 network: - status = WiFi.begin(ssid, pass); - - // wait 10 seconds for connection: - delay(10000); - } - - // you're connected now, so print out the data: - Serial.print("You're connected to the network"); - printCurrentNet(); - printWifiData(); - -} - -void loop() { - // check the network connection once every 10 seconds: - delay(10000); - printCurrentNet(); -} - -void printWifiData() { - // print your WiFi shield's IP address: - IPAddress ip = WiFi.localIP(); - Serial.print("IP Address: "); - Serial.println(ip); - Serial.println(ip); - - // print your MAC address: - byte mac[6]; - WiFi.macAddress(mac); - Serial.print("MAC address: "); - Serial.print(mac[5],HEX); - Serial.print(":"); - Serial.print(mac[4],HEX); - Serial.print(":"); - Serial.print(mac[3],HEX); - Serial.print(":"); - Serial.print(mac[2],HEX); - Serial.print(":"); - Serial.print(mac[1],HEX); - Serial.print(":"); - Serial.println(mac[0],HEX); - -} - -void printCurrentNet() { - // print the SSID of the network you're attached to: - Serial.print("SSID: "); - Serial.println(WiFi.SSID()); - - // print the MAC address of the router you're attached to: - byte bssid[6]; - WiFi.BSSID(bssid); - Serial.print("BSSID: "); - Serial.print(bssid[5],HEX); - Serial.print(":"); - Serial.print(bssid[4],HEX); - Serial.print(":"); - Serial.print(bssid[3],HEX); - Serial.print(":"); - Serial.print(bssid[2],HEX); - Serial.print(":"); - Serial.print(bssid[1],HEX); - Serial.print(":"); - Serial.println(bssid[0],HEX); - - // print the received signal strength: - long rssi = WiFi.RSSI(); - Serial.print("signal strength (RSSI):"); - Serial.println(rssi); - - // print the encryption type: - byte encryption = WiFi.encryptionType(); - Serial.print("Encryption Type:"); - Serial.println(encryption,HEX); - Serial.println(); -} - diff --git a/hardware/arduino/sam/libraries/WiFi/examples/ScanNetworks/ScanNetworks.ino b/hardware/arduino/sam/libraries/WiFi/examples/ScanNetworks/ScanNetworks.ino deleted file mode 100644 index bfbd727ac..000000000 --- a/hardware/arduino/sam/libraries/WiFi/examples/ScanNetworks/ScanNetworks.ino +++ /dev/null @@ -1,118 +0,0 @@ -/* - - This example prints the Wifi shield's MAC address, and - scans for available Wifi networks using the Wifi shield. - Every ten seconds, it scans again. It doesn't actually - connect to any network, so no encryption scheme is specified. - - Circuit: - * WiFi shield attached - - created 13 July 2010 - by dlf (Metodo2 srl) - modified 21 Junn 2012 - by Tom Igoe and Jaymes Dec - */ - -#include -#include - -void setup() { - //Initialize serial and wait for port to open: - Serial.begin(9600); - while (!Serial) { - ; // wait for serial port to connect. Needed for Leonardo only - } - - // check for the presence of the shield: - if (WiFi.status() == WL_NO_SHIELD) { - Serial.println("WiFi shield not present"); - // don't continue: - while(true); - } - - // Print WiFi MAC address: - printMacAddress(); - - // scan for existing networks: - Serial.println("Scanning available networks..."); - listNetworks(); -} - -void loop() { - delay(10000); - // scan for existing networks: - Serial.println("Scanning available networks..."); - listNetworks(); -} - -void printMacAddress() { - // the MAC address of your Wifi shield - byte mac[6]; - - // print your MAC address: - WiFi.macAddress(mac); - Serial.print("MAC: "); - Serial.print(mac[5],HEX); - Serial.print(":"); - Serial.print(mac[4],HEX); - Serial.print(":"); - Serial.print(mac[3],HEX); - Serial.print(":"); - Serial.print(mac[2],HEX); - Serial.print(":"); - Serial.print(mac[1],HEX); - Serial.print(":"); - Serial.println(mac[0],HEX); -} - -void listNetworks() { - // scan for nearby networks: - Serial.println("** Scan Networks **"); - int numSsid = WiFi.scanNetworks(); - if (numSsid == -1) - { - Serial.println("Couldn't get a wifi connection"); - while(true); - } - - // print the list of networks seen: - Serial.print("number of available networks:"); - Serial.println(numSsid); - - // print the network number and name for each network found: - for (int thisNet = 0; thisNet -#include - -char ssid[] = "yourNetwork"; // your network SSID (name) -char pass[] = "secretPassword"; // your network password -int keyIndex = 0; // your network key Index number (needed only for WEP) - -int status = WL_IDLE_STATUS; -WiFiServer server(80); - -void setup() { - Serial.begin(9600); // initialize serial communication - pinMode(9, OUTPUT); // set the LED pin mode - - // check for the presence of the shield: - if (WiFi.status() == WL_NO_SHIELD) { - Serial.println("WiFi shield not present"); - while(true); // don't continue - } - - // attempt to connect to Wifi network: - while ( status != WL_CONNECTED) { - Serial.print("Attempting to connect to Network named: "); - Serial.println(ssid); // print the network name (SSID); - - // Connect to WPA/WPA2 network. Change this line if using open or WEP network: - status = WiFi.begin(ssid, pass); - // wait 10 seconds for connection: - delay(10000); - } - server.begin(); // start the web server on port 80 - printWifiStatus(); // you're connected now, so print out the status -} - - -void loop() { - WiFiClient client = server.available(); // listen for incoming clients - - if (client) { // if you get a client, - Serial.println("new client"); // print a message out the serial port - String currentLine = ""; // make a String to hold incoming data from the client - while (client.connected()) { // loop while the client's connected - if (client.available()) { // if there's bytes to read from the client, - char c = client.read(); // read a byte, then - Serial.write(c); // print it out the serial monitor - if (c == '\n') { // if the byte is a newline character - - // if the current line is blank, you got two newline characters in a row. - // that's the end of the client HTTP request, so send a response: - if (currentLine.length() == 0) { - // HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK) - // and a content-type so the client knows what's coming, then a blank line: - client.println("HTTP/1.1 200 OK"); - client.println("Content-type:text/html"); - client.println(); - - // the content of the HTTP response follows the header: - client.print("Click here turn the LED on pin 9 on
"); - client.print("Click here turn the LED on pin 9 off
"); - - // The HTTP response ends with another blank line: - client.println(); - // break out of the while loop: - break; - } - else { // if you got a newline, then clear currentLine: - currentLine = ""; - } - } - else if (c != '\r') { // if you got anything else but a carriage return character, - currentLine += c; // add it to the end of the currentLine - } - - // Check to see if the client request was "GET /H" or "GET /L": - if (currentLine.endsWith("GET /H")) { - digitalWrite(9, HIGH); // GET /H turns the LED on - } - if (currentLine.endsWith("GET /L")) { - digitalWrite(9, LOW); // GET /L turns the LED off - } - } - } - // close the connection: - client.stop(); - Serial.println("client disonnected"); - } -} - -void printWifiStatus() { - // print the SSID of the network you're attached to: - Serial.print("SSID: "); - Serial.println(WiFi.SSID()); - - // print your WiFi shield's IP address: - IPAddress ip = WiFi.localIP(); - Serial.print("IP Address: "); - Serial.println(ip); - - // print the received signal strength: - long rssi = WiFi.RSSI(); - Serial.print("signal strength (RSSI):"); - Serial.print(rssi); - Serial.println(" dBm"); - // print where to go in a browser: - Serial.print("To see this page in action, open a browser to http://"); - Serial.println(ip); -} diff --git a/hardware/arduino/sam/libraries/WiFi/examples/WifiChatServer/WifiChatServer.ino b/hardware/arduino/sam/libraries/WiFi/examples/WifiChatServer/WifiChatServer.ino deleted file mode 100644 index e4b1d1a3b..000000000 --- a/hardware/arduino/sam/libraries/WiFi/examples/WifiChatServer/WifiChatServer.ino +++ /dev/null @@ -1,111 +0,0 @@ -/* - Chat Server - - A simple server that distributes any incoming messages to all - connected clients. To use telnet to your device's IP address and type. - You can see the client's input in the serial monitor as well. - - This example is written for a network using WPA encryption. For - WEP or WPA, change the Wifi.begin() call accordingly. - - - Circuit: - * WiFi shield attached - - created 18 Dec 2009 - by David A. Mellis - modified 31 May 2012 - by Tom Igoe - - */ - -#include -#include - -char ssid[] = "yourNetwork"; // your network SSID (name) -char pass[] = "secretPassword"; // your network password (use for WPA, or use as key for WEP) - -int keyIndex = 0; // your network key Index number (needed only for WEP) - -int status = WL_IDLE_STATUS; - -WiFiServer server(23); - -boolean alreadyConnected = false; // whether or not the client was connected previously - -void setup() { - //Initialize serial and wait for port to open: - Serial.begin(9600); - while (!Serial) { - ; // wait for serial port to connect. Needed for Leonardo only - } - - // check for the presence of the shield: - if (WiFi.status() == WL_NO_SHIELD) { - Serial.println("WiFi shield not present"); - // don't continue: - while(true); - } - - // attempt to connect to Wifi network: - while ( status != WL_CONNECTED) { - Serial.print("Attempting to connect to SSID: "); - Serial.println(ssid); - // Connect to WPA/WPA2 network. Change this line if using open or WEP network: - status = WiFi.begin(ssid, pass); - - // wait 10 seconds for connection: - delay(10000); - } - // start the server: - server.begin(); - // you're connected now, so print out the status: - printWifiStatus(); - } - - -void loop() { - // wait for a new client: - WiFiClient client = server.available(); - - - // when the client sends the first byte, say hello: - if (client) { - if (!alreadyConnected) { - // clead out the input buffer: - client.flush(); - Serial.println("We have a new client"); - client.println("Hello, client!"); - alreadyConnected = true; - } - - if (client.available() > 0) { - // read the bytes incoming from the client: - char thisChar = client.read(); - // echo the bytes back to the client: - server.write(thisChar); - // echo the bytes to the server as well: - Serial.write(thisChar); - } - } -} - - -void printWifiStatus() { - // print the SSID of the network you're attached to: - Serial.print("SSID: "); - Serial.println(WiFi.SSID()); - - // print your WiFi shield's IP address: - IPAddress ip = WiFi.localIP(); - Serial.print("IP Address: "); - Serial.println(ip); - - // print the received signal strength: - long rssi = WiFi.RSSI(); - Serial.print("signal strength (RSSI):"); - Serial.print(rssi); - Serial.println(" dBm"); -} - - diff --git a/hardware/arduino/sam/libraries/WiFi/examples/WifiPachubeClient/WifiPachubeClient.ino b/hardware/arduino/sam/libraries/WiFi/examples/WifiPachubeClient/WifiPachubeClient.ino deleted file mode 100644 index 307df3109..000000000 --- a/hardware/arduino/sam/libraries/WiFi/examples/WifiPachubeClient/WifiPachubeClient.ino +++ /dev/null @@ -1,191 +0,0 @@ -/* - Wifi Pachube sensor client - - This sketch connects an analog sensor to Pachube (http://www.pachube.com) - using an Arduino Wifi shield. - - This example is written for a network using WPA encryption. For - WEP or WPA, change the Wifi.begin() call accordingly. - - This example has been updated to use version 2.0 of the Pachube API. - To make it work, create a feed with a datastream, and give it the ID - sensor1. Or change the code below to match your feed. - - Circuit: - * Analog sensor attached to analog in 0 - * Wifi shield attached to pins 10, 11, 12, 13 - - created 13 Mar 2012 - modified 31 May 2012 - by Tom Igoe - modified 8 Sept 2012 - by Scott Fitzgerald - - This code is in the public domain. - - */ - -#include -#include - -#define APIKEY "YOUR API KEY GOES HERE" // replace your pachube api key here -#define FEEDID 00000 // replace your feed ID -#define USERAGENT "My Arduino Project" // user agent is the project name - -char ssid[] = "yourNetwork"; // your network SSID (name) -char pass[] = "secretPassword"; // your network password - -int status = WL_IDLE_STATUS; - -// initialize the library instance: -WiFiClient client; -// if you don't want to use DNS (and reduce your sketch size) -// use the numeric IP instead of the name for the server: -IPAddress server(216,52,233,121); // numeric IP for api.pachube.com -//char server[] = "api.pachube.com"; // name address for pachube API - -unsigned long lastConnectionTime = 0; // last time you connected to the server, in milliseconds -boolean lastConnected = false; // state of the connection last time through the main loop -const unsigned long postingInterval = 10*1000; //delay between updates to pachube.com - -void setup() { - //Initialize serial and wait for port to open: - Serial.begin(9600); - while (!Serial) { - ; // wait for serial port to connect. Needed for Leonardo only - } - - // check for the presence of the shield: - if (WiFi.status() == WL_NO_SHIELD) { - Serial.println("WiFi shield not present"); - // don't continue: - while(true); - } - - // attempt to connect to Wifi network: - while ( status != WL_CONNECTED) { - Serial.print("Attempting to connect to SSID: "); - Serial.println(ssid); - // Connect to WPA/WPA2 network. Change this line if using open or WEP network: - status = WiFi.begin(ssid, pass); - - // wait 10 seconds for connection: - delay(10000); - } - // you're connected now, so print out the status: - printWifiStatus(); -} - - -void loop() { - // read the analog sensor: - int sensorReading = analogRead(A0); - - // if there's incoming data from the net connection. - // send it out the serial port. This is for debugging - // purposes only: - while (client.available()) { - char c = client.read(); - Serial.print(c); - } - - // if there's no net connection, but there was one last time - // through the loop, then stop the client: - if (!client.connected() && lastConnected) { - Serial.println(); - Serial.println("disconnecting."); - client.stop(); - } - - // if you're not connected, and ten seconds have passed since - // your last connection, then connect again and send data: - if(!client.connected() && (millis() - lastConnectionTime > postingInterval)) { - sendData(sensorReading); - } - // store the state of the connection for next time through - // the loop: - lastConnected = client.connected(); -} - -// this method makes a HTTP connection to the server: -void sendData(int thisData) { - // if there's a successful connection: - if (client.connect(server, 80)) { - Serial.println("connecting..."); - // send the HTTP PUT request: - client.print("PUT /v2/feeds/"); - client.print(FEEDID); - client.println(".csv HTTP/1.1"); - client.println("Host: api.pachube.com"); - client.print("X-ApiKey: "); - client.println(APIKEY); - client.print("User-Agent: "); - client.println(USERAGENT); - client.print("Content-Length: "); - - // calculate the length of the sensor reading in bytes: - // 8 bytes for "sensor1," + number of digits of the data: - int thisLength = 8 + getLength(thisData); - client.println(thisLength); - - // last pieces of the HTTP PUT request: - client.println("Content-Type: text/csv"); - client.println("Connection: close"); - client.println(); - - // here's the actual content of the PUT request: - client.print("sensor1,"); - client.println(thisData); - - } - else { - // if you couldn't make a connection: - Serial.println("connection failed"); - Serial.println(); - Serial.println("disconnecting."); - client.stop(); - } - // note the time that the connection was made or attempted: - lastConnectionTime = millis(); -} - - -// This method calculates the number of digits in the -// sensor reading. Since each digit of the ASCII decimal -// representation is a byte, the number of digits equals -// the number of bytes: - -int getLength(int someValue) { - // there's at least one byte: - int digits = 1; - // continually divide the value by ten, - // adding one to the digit count for each - // time you divide, until you're at 0: - int dividend = someValue /10; - while (dividend > 0) { - dividend = dividend /10; - digits++; - } - // return the number of digits: - return digits; -} - -void printWifiStatus() { - // print the SSID of the network you're attached to: - Serial.print("SSID: "); - Serial.println(WiFi.SSID()); - - // print your WiFi shield's IP address: - IPAddress ip = WiFi.localIP(); - Serial.print("IP Address: "); - Serial.println(ip); - - // print the received signal strength: - long rssi = WiFi.RSSI(); - Serial.print("signal strength (RSSI):"); - Serial.print(rssi); - Serial.println(" dBm"); -} - - - diff --git a/hardware/arduino/sam/libraries/WiFi/examples/WifiPachubeClientString/WifiPachubeClientString.ino b/hardware/arduino/sam/libraries/WiFi/examples/WifiPachubeClientString/WifiPachubeClientString.ino deleted file mode 100644 index 243fe8383..000000000 --- a/hardware/arduino/sam/libraries/WiFi/examples/WifiPachubeClientString/WifiPachubeClientString.ino +++ /dev/null @@ -1,177 +0,0 @@ -/* - Wifi Pachube sensor client with Strings - - This sketch connects an analog sensor to Pachube (http://www.pachube.com) - using a Arduino Wifi shield. - - This example is written for a network using WPA encryption. For - WEP or WPA, change the Wifi.begin() call accordingly. - - This example has been updated to use version 2.0 of the pachube.com API. - To make it work, create a feed with a datastream, and give it the ID - sensor1. Or change the code below to match your feed. - - This example uses the String library, which is part of the Arduino core from - version 0019. - - Circuit: - * Analog sensor attached to analog in 0 - * Wifi shield attached to pins 10, 11, 12, 13 - - created 16 Mar 2012 - modified 31 May 2012 - by Tom Igoe - modified 8 Sept 2012 - by Scott Fitzgerald - - This code is in the public domain. - - */ - -#include -#include - -#define APIKEY "YOUR API KEY GOES HERE" // replace your pachube api key here -#define FEEDID 00000 // replace your feed ID -#define USERAGENT "My Arduino Project" // user agent is the project name - -char ssid[] = "yourNetwork"; // your network SSID (name) -char pass[] = "secretPassword"; // your network password - -int status = WL_IDLE_STATUS; - -// initialize the library instance: -WiFiClient client; - -// if you don't want to use DNS (and reduce your sketch size) -// use the numeric IP instead of the name for the server: -//IPAddress server(216,52,233,121); // numeric IP for api.pachube.com -char server[] = "api.pachube.com"; // name address for pachube API - -unsigned long lastConnectionTime = 0; // last time you connected to the server, in milliseconds -boolean lastConnected = false; // state of the connection last time through the main loop -const unsigned long postingInterval = 10*1000; //delay between updates to pachube.com - -void setup() { - //Initialize serial and wait for port to open: - Serial.begin(9600); - while (!Serial) { - ; // wait for serial port to connect. Needed for Leonardo only - } - - // check for the presence of the shield: - if (WiFi.status() == WL_NO_SHIELD) { - Serial.println("WiFi shield not present"); - // don't continue: - while(true); - } - - // attempt to connect to Wifi network: - while ( status != WL_CONNECTED) { - Serial.print("Attempting to connect to SSID: "); - Serial.println(ssid); - // Connect to WPA/WPA2 network. Change this line if using open or WEP network: - status = WiFi.begin(ssid, pass); - - // wait 10 seconds for connection: - delay(10000); - } - // you're connected now, so print out the status: - printWifiStatus(); -} - -void loop() { - // read the analog sensor: - int sensorReading = analogRead(A0); - // convert the data to a String to send it: - - String dataString = "sensor1,"; - dataString += sensorReading; - - // you can append multiple readings to this String if your - // pachube feed is set up to handle multiple values: - int otherSensorReading = analogRead(A1); - dataString += "\nsensor2,"; - dataString += otherSensorReading; - - // if there's incoming data from the net connection. - // send it out the serial port. This is for debugging - // purposes only: - while (client.available()) { - char c = client.read(); - Serial.print(c); - } - - // if there's no net connection, but there was one last time - // through the loop, then stop the client: - if (!client.connected() && lastConnected) { - Serial.println(); - Serial.println("disconnecting."); - client.stop(); - } - - // if you're not connected, and ten seconds have passed since - // your last connection, then connect again and send data: - if(!client.connected() && (millis() - lastConnectionTime > postingInterval)) { - sendData(dataString); - } - // store the state of the connection for next time through - // the loop: - lastConnected = client.connected(); -} - -// this method makes a HTTP connection to the server: -void sendData(String thisData) { - // if there's a successful connection: - if (client.connect(server, 80)) { - Serial.println("connecting..."); - // send the HTTP PUT request: - client.print("PUT /v2/feeds/"); - client.print(FEEDID); - client.println(".csv HTTP/1.1"); - client.println("Host: api.pachube.com"); - client.print("X-ApiKey: "); - client.println(APIKEY); - client.print("User-Agent: "); - client.println(USERAGENT); - client.print("Content-Length: "); - client.println(thisData.length()); - - // last pieces of the HTTP PUT request: - client.println("Content-Type: text/csv"); - client.println("Connection: close"); - client.println(); - - // here's the actual content of the PUT request: - client.println(thisData); - } - else { - // if you couldn't make a connection: - Serial.println("connection failed"); - Serial.println(); - Serial.println("disconnecting."); - client.stop(); - } - // note the time that the connection was made or attempted: - lastConnectionTime = millis(); -} - - -void printWifiStatus() { - // print the SSID of the network you're attached to: - Serial.print("SSID: "); - Serial.println(WiFi.SSID()); - - // print your WiFi shield's IP address: - IPAddress ip = WiFi.localIP(); - Serial.print("IP Address: "); - Serial.println(ip); - - // print the received signal strength: - long rssi = WiFi.RSSI(); - Serial.print("signal strength (RSSI):"); - Serial.print(rssi); - Serial.println(" dBm"); -} - - diff --git a/hardware/arduino/sam/libraries/WiFi/examples/WifiTwitterClient/WifiTwitterClient.ino b/hardware/arduino/sam/libraries/WiFi/examples/WifiTwitterClient/WifiTwitterClient.ino deleted file mode 100644 index 5ae339b03..000000000 --- a/hardware/arduino/sam/libraries/WiFi/examples/WifiTwitterClient/WifiTwitterClient.ino +++ /dev/null @@ -1,164 +0,0 @@ -/* - Wifi Twitter Client with Strings - - This sketch connects to Twitter using using an Arduino WiFi shield. - It parses the XML returned, and looks for this is a tweet - - This example is written for a network using WPA encryption. For - WEP or WPA, change the Wifi.begin() call accordingly. - - This example uses the String library, which is part of the Arduino core from - version 0019. - - Circuit: - * WiFi shield attached to pins 10, 11, 12, 13 - - created 23 apr 2012 - modified 31 May 2012 - by Tom Igoe - - This code is in the public domain. - - */ - -#include -#include - -char ssid[] = "yourNetwork"; // your network SSID (name) -char pass[] = "password"; // your network password (use for WPA, or use as key for WEP) -int keyIndex = 0; // your network key Index number (needed only for WEP) - -int status = WL_IDLE_STATUS; // status of the wifi connection - -// initialize the library instance: -WiFiClient client; - -const unsigned long requestInterval = 30*1000; // delay between requests; 30 seconds - -// if you don't want to use DNS (and reduce your sketch size) -// use the numeric IP instead of the name for the server: -//IPAddress server(199,59,149,200); // numeric IP for api.twitter.com -char server[] = "api.twitter.com"; // name address for twitter API - -boolean requested; // whether you've made a request since connecting -unsigned long lastAttemptTime = 0; // last time you connected to the server, in milliseconds - -String currentLine = ""; // string to hold the text from server -String tweet = ""; // string to hold the tweet -boolean readingTweet = false; // if you're currently reading the tweet - -void setup() { - // reserve space for the strings: - currentLine.reserve(256); - tweet.reserve(150); - //Initialize serial and wait for port to open: - Serial.begin(9600); - while (!Serial) { - ; // wait for serial port to connect. Needed for Leonardo only - } - - // check for the presence of the shield: - if (WiFi.status() == WL_NO_SHIELD) { - Serial.println("WiFi shield not present"); - // don't continue: - while(true); - } - - // attempt to connect to Wifi network: - while ( status != WL_CONNECTED) { - Serial.print("Attempting to connect to SSID: "); - Serial.println(ssid); - // Connect to WPA/WPA2 network. Change this line if using open or WEP network: - status = WiFi.begin(ssid, pass); - - // wait 10 seconds for connection: - delay(10000); - } - // you're connected now, so print out the status: - printWifiStatus(); - connectToServer(); -} - -void loop() -{ - if (client.connected()) { - if (client.available()) { - // read incoming bytes: - char inChar = client.read(); - - // add incoming byte to end of line: - currentLine += inChar; - - // if you get a newline, clear the line: - if (inChar == '\n') { - currentLine = ""; - } - // if the current line ends with , it will - // be followed by the tweet: - if ( currentLine.endsWith("")) { - // tweet is beginning. Clear the tweet string: - readingTweet = true; - tweet = ""; - // break out of the loop so this character isn't added to the tweet: - return; - } - // if you're currently reading the bytes of a tweet, - // add them to the tweet String: - if (readingTweet) { - if (inChar != '<') { - tweet += inChar; - } - else { - // if you got a "<" character, - // you've reached the end of the tweet: - readingTweet = false; - Serial.println(tweet); - // close the connection to the server: - client.stop(); - } - } - } - } - else if (millis() - lastAttemptTime > requestInterval) { - // if you're not connected, and two minutes have passed since - // your last connection, then attempt to connect again: - connectToServer(); - } -} - -void connectToServer() { - // attempt to connect, and wait a millisecond: - Serial.println("connecting to server..."); - if (client.connect(server, 80)) { - Serial.println("making HTTP request..."); - // make HTTP GET request to twitter: - client.println("GET /1/statuses/user_timeline.xml?screen_name=arduino HTTP/1.1"); - client.println("Host:api.twitter.com"); - client.println("Connection:close"); - client.println(); - } - // note the time of this connect attempt: - lastAttemptTime = millis(); -} - - -void printWifiStatus() { - // print the SSID of the network you're attached to: - Serial.print("SSID: "); - Serial.println(WiFi.SSID()); - - // print your WiFi shield's IP address: - IPAddress ip = WiFi.localIP(); - Serial.print("IP Address: "); - Serial.println(ip); - - // print the received signal strength: - long rssi = WiFi.RSSI(); - Serial.print("signal strength (RSSI):"); - Serial.print(rssi); - Serial.println(" dBm"); -} - - - - diff --git a/hardware/arduino/sam/libraries/WiFi/examples/WifiWebClient/WifiWebClient.ino b/hardware/arduino/sam/libraries/WiFi/examples/WifiWebClient/WifiWebClient.ino deleted file mode 100644 index 1989297ac..000000000 --- a/hardware/arduino/sam/libraries/WiFi/examples/WifiWebClient/WifiWebClient.ino +++ /dev/null @@ -1,120 +0,0 @@ - -/* - Web client - - This sketch connects to a website (http://www.google.com) - using a WiFi shield. - - This example is written for a network using WPA encryption. For - WEP or WPA, change the Wifi.begin() call accordingly. - - This example is written for a network using WPA encryption. For - WEP or WPA, change the Wifi.begin() call accordingly. - - Circuit: - * WiFi shield attached - - created 13 July 2010 - by dlf (Metodo2 srl) - modified 31 May 2012 - by Tom Igoe - */ - -#include -#include - -char ssid[] = "yourNetwork"; // your network SSID (name) -char pass[] = "secretPassword"; // your network password (use for WPA, or use as key for WEP) -int keyIndex = 0; // your network key Index number (needed only for WEP) - -int status = WL_IDLE_STATUS; -// if you don't want to use DNS (and reduce your sketch size) -// use the numeric IP instead of the name for the server: -IPAddress server(173,194,73,105); // numeric IP for Google (no DNS) -//char server[] = "www.google.com"; // name address for Google (using DNS) - -// Initialize the Ethernet client library -// with the IP address and port of the server -// that you want to connect to (port 80 is default for HTTP): -WiFiClient client; - -void setup() { - //Initialize serial and wait for port to open: - Serial.begin(9600); - while (!Serial) { - ; // wait for serial port to connect. Needed for Leonardo only - } - - // check for the presence of the shield: - if (WiFi.status() == WL_NO_SHIELD) { - Serial.println("WiFi shield not present"); - // don't continue: - while(true); - } - - // attempt to connect to Wifi network: - while ( status != WL_CONNECTED) { - Serial.print("Attempting to connect to SSID: "); - Serial.println(ssid); - // Connect to WPA/WPA2 network. Change this line if using open or WEP network: - status = WiFi.begin(ssid, pass); - - // wait 10 seconds for connection: - delay(10000); - } - Serial.println("Connected to wifi"); - printWifiStatus(); - - Serial.println("\nStarting connection to server..."); - // if you get a connection, report back via serial: - if (client.connect(server, 80)) { - Serial.println("connected to server"); - // Make a HTTP request: - client.println("GET /search?q=arduino HTTP/1.1"); - client.println("Host:www.google.com"); - client.println("Connection: close"); - client.println(); - } -} - -void loop() { - // if there are incoming bytes available - // from the server, read them and print them: - while (client.available()) { - char c = client.read(); - Serial.write(c); - } - - // if the server's disconnected, stop the client: - if (!client.connected()) { - Serial.println(); - Serial.println("disconnecting from server."); - client.stop(); - - // do nothing forevermore: - while(true); - } -} - - -void printWifiStatus() { - // print the SSID of the network you're attached to: - Serial.print("SSID: "); - Serial.println(WiFi.SSID()); - - // print your WiFi shield's IP address: - IPAddress ip = WiFi.localIP(); - Serial.print("IP Address: "); - Serial.println(ip); - - // print the received signal strength: - long rssi = WiFi.RSSI(); - Serial.print("signal strength (RSSI):"); - Serial.print(rssi); - Serial.println(" dBm"); -} - - - - - diff --git a/hardware/arduino/sam/libraries/WiFi/examples/WifiWebClientRepeating/WifiWebClientRepeating.ino b/hardware/arduino/sam/libraries/WiFi/examples/WifiWebClientRepeating/WifiWebClientRepeating.ino deleted file mode 100644 index 96eb6283d..000000000 --- a/hardware/arduino/sam/libraries/WiFi/examples/WifiWebClientRepeating/WifiWebClientRepeating.ino +++ /dev/null @@ -1,138 +0,0 @@ -/* - Repeating Wifi Web client - - This sketch connects to a a web server and makes a request - using an Arduino Wifi shield. - - Circuit: - * Wifi shield attached to pins 10, 11, 12, 13 - - created 23 April 2012 - modifide 31 May 2012 - by Tom Igoe - - http://arduino.cc/en/Tutorial/WifiWebClientRepeating - This code is in the public domain. - */ - -#include -#include - -char ssid[] = "yourNetwork"; // your network SSID (name) -char pass[] = "secretPassword"; // your network password -int keyIndex = 0; // your network key Index number (needed only for WEP) - -int status = WL_IDLE_STATUS; - -// Initialize the Wifi client library -WiFiClient client; - -// server address: -char server[] = "www.arduino.cc"; -//IPAddress server(64,131,82,241); - -unsigned long lastConnectionTime = 0; // last time you connected to the server, in milliseconds -boolean lastConnected = false; // state of the connection last time through the main loop -const unsigned long postingInterval = 10*1000; // delay between updates, in milliseconds - -void setup() { - //Initialize serial and wait for port to open: - Serial.begin(9600); - while (!Serial) { - ; // wait for serial port to connect. Needed for Leonardo only - } - - // check for the presence of the shield: - if (WiFi.status() == WL_NO_SHIELD) { - Serial.println("WiFi shield not present"); - // don't continue: - while(true); - } - - // attempt to connect to Wifi network: - while ( status != WL_CONNECTED) { - Serial.print("Attempting to connect to SSID: "); - Serial.println(ssid); - // Connect to WPA/WPA2 network. Change this line if using open or WEP network: - status = WiFi.begin(ssid, pass); - - // wait 10 seconds for connection: - delay(10000); - } - // you're connected now, so print out the status: - printWifiStatus(); -} - -void loop() { - // if there's incoming data from the net connection. - // send it out the serial port. This is for debugging - // purposes only: - while (client.available()) { - char c = client.read(); - Serial.write(c); - } - - // if there's no net connection, but there was one last time - // through the loop, then stop the client: - if (!client.connected() && lastConnected) { - Serial.println(); - Serial.println("disconnecting."); - client.stop(); - } - - // if you're not connected, and ten seconds have passed since - // your last connection, then connect again and send data: - if(!client.connected() && (millis() - lastConnectionTime > postingInterval)) { - httpRequest(); - } - // store the state of the connection for next time through - // the loop: - lastConnected = client.connected(); -} - -// this method makes a HTTP connection to the server: -void httpRequest() { - // if there's a successful connection: - if (client.connect(server, 80)) { - Serial.println("connecting..."); - // send the HTTP PUT request: - client.println("GET /latest.txt HTTP/1.1"); - client.println("Host: www.arduino.cc"); - client.println("User-Agent: arduino-ethernet"); - client.println("Connection: close"); - client.println(); - - // note the time that the connection was made: - lastConnectionTime = millis(); - } - else { - // if you couldn't make a connection: - Serial.println("connection failed"); - Serial.println("disconnecting."); - client.stop(); - } -} - - -void printWifiStatus() { - // print the SSID of the network you're attached to: - Serial.print("SSID: "); - Serial.println(WiFi.SSID()); - - // print your WiFi shield's IP address: - IPAddress ip = WiFi.localIP(); - Serial.print("IP Address: "); - Serial.println(ip); - - // print the received signal strength: - long rssi = WiFi.RSSI(); - Serial.print("signal strength (RSSI):"); - Serial.print(rssi); - Serial.println(" dBm"); -} - - - - - - diff --git a/hardware/arduino/sam/libraries/WiFi/examples/WifiWebServer/WifiWebServer.ino b/hardware/arduino/sam/libraries/WiFi/examples/WifiWebServer/WifiWebServer.ino deleted file mode 100644 index eaa99783e..000000000 --- a/hardware/arduino/sam/libraries/WiFi/examples/WifiWebServer/WifiWebServer.ino +++ /dev/null @@ -1,132 +0,0 @@ -/* - Web Server - - A simple web server that shows the value of the analog input pins. - using a WiFi shield. - - This example is written for a network using WPA encryption. For - WEP or WPA, change the Wifi.begin() call accordingly. - - Circuit: - * WiFi shield attached - * Analog inputs attached to pins A0 through A5 (optional) - - created 13 July 2010 - by dlf (Metodo2 srl) - modified 31 May 2012 - by Tom Igoe - */ - -#inlcude -#include - -char ssid[] = "yourNetwork"; // your network SSID (name) -char pass[] = "secretPassword"; // your network password -int keyIndex = 0; // your network key Index number (needed only for WEP) - -int status = WL_IDLE_STATUS; - -WiFiServer server(80); - -void setup() { - //Initialize serial and wait for port to open: - Serial.begin(9600); - while (!Serial) { - ; // wait for serial port to connect. Needed for Leonardo only - } - - // check for the presence of the shield: - if (WiFi.status() == WL_NO_SHIELD) { - Serial.println("WiFi shield not present"); - // don't continue: - while(true); - } - - // attempt to connect to Wifi network: - while ( status != WL_CONNECTED) { - Serial.print("Attempting to connect to SSID: "); - Serial.println(ssid); - // Connect to WPA/WPA2 network. Change this line if using open or WEP network: - status = WiFi.begin(ssid, pass); - - // wait 10 seconds for connection: - delay(10000); - } - server.begin(); - // you're connected now, so print out the status: - printWifiStatus(); -} - - -void loop() { - // listen for incoming clients - WiFiClient client = server.available(); - if (client) { - Serial.println("new client"); - // an http request ends with a blank line - boolean currentLineIsBlank = true; - while (client.connected()) { - if (client.available()) { - char c = client.read(); - Serial.write(c); - // if you've gotten to the end of the line (received a newline - // character) and the line is blank, the http request has ended, - // so you can send a reply - if (c == '\n' && currentLineIsBlank) { - // send a standard http response header - client.println("HTTP/1.1 200 OK"); - client.println("Content-Type: text/html"); - client.println("Connection: close"); - client.println(); - client.println(""); - client.println(""); - // add a meta refresh tag, so the browser pulls again every 5 seconds: - client.println(""); - // output the value of each analog input pin - for (int analogChannel = 0; analogChannel < 6; analogChannel++) { - int sensorReading = analogRead(analogChannel); - client.print("analog input "); - client.print(analogChannel); - client.print(" is "); - client.print(sensorReading); - client.println("
"); - } - client.println(""); - break; - } - if (c == '\n') { - // you're starting a new line - currentLineIsBlank = true; - } - else if (c != '\r') { - // you've gotten a character on the current line - currentLineIsBlank = false; - } - } - } - // give the web browser time to receive the data - delay(1); - // close the connection: - client.stop(); - Serial.println("client disonnected"); - } -} - - -void printWifiStatus() { - // print the SSID of the network you're attached to: - Serial.print("SSID: "); - Serial.println(WiFi.SSID()); - - // print your WiFi shield's IP address: - IPAddress ip = WiFi.localIP(); - Serial.print("IP Address: "); - Serial.println(ip); - - // print the received signal strength: - long rssi = WiFi.RSSI(); - Serial.print("signal strength (RSSI):"); - Serial.print(rssi); - Serial.println(" dBm"); -} - diff --git a/hardware/arduino/sam/libraries/WiFi/keywords.txt b/hardware/arduino/sam/libraries/WiFi/keywords.txt deleted file mode 100644 index 47704cd00..000000000 --- a/hardware/arduino/sam/libraries/WiFi/keywords.txt +++ /dev/null @@ -1,43 +0,0 @@ -####################################### -# Syntax Coloring Map For WiFi -####################################### - -####################################### -# Datatypes (KEYWORD1) -####################################### - -WiFi KEYWORD1 -Client KEYWORD1 -Server KEYWORD1 - -####################################### -# Methods and Functions (KEYWORD2) -####################################### - -status KEYWORD2 -connect KEYWORD2 -write KEYWORD2 -available KEYWORD2 -read KEYWORD2 -flush KEYWORD2 -stop KEYWORD2 -connected KEYWORD2 -begin KEYWORD2 -disconnect KEYWORD2 -macAddress KEYWORD2 -localIP KEYWORD2 -subnetMask KEYWORD2 -gatewayIP KEYWORD2 -SSID KEYWORD2 -BSSID KEYWORD2 -RSSI KEYWORD2 -encryptionType KEYWORD2 -getResult KEYWORD2 -getSocket KEYWORD2 -WiFiClient KEYWORD2 -WiFiServer KEYWORD2 - -####################################### -# Constants (LITERAL1) -####################################### - diff --git a/hardware/arduino/sam/libraries/WiFi/utility/debug.h b/hardware/arduino/sam/libraries/WiFi/utility/debug.h deleted file mode 100644 index 9f71055b2..000000000 --- a/hardware/arduino/sam/libraries/WiFi/utility/debug.h +++ /dev/null @@ -1,77 +0,0 @@ -//*********************************************/ -// -// File: debug.h -// -// Author: dlf (Metodo2 srl) -// -//********************************************/ - - -#ifndef Debug_H -#define Debug_H - -#include -#include - -#define PRINT_FILE_LINE() do { \ - Serial.print("[");Serial.print(__FILE__); \ - Serial.print("::");Serial.print(__LINE__);Serial.print("]");\ -}while (0); - -#ifdef _DEBUG_ - -#define INFO(format, args...) do { \ - char buf[250]; \ - sprintf(buf, format, args); \ - Serial.println(buf); \ -} while(0); - -#define INFO1(x) do { PRINT_FILE_LINE() Serial.print("-I-");\ - Serial.println(x); \ -}while (0); - - -#define INFO2(x,y) do { PRINT_FILE_LINE() Serial.print("-I-");\ - Serial.print(x,16);Serial.print(",");Serial.println(y,16); \ -}while (0); - - -#else -#define INFO1(x) do {} while(0); -#define INFO2(x,y) do {} while(0); -#define INFO(format, args...) do {} while(0); -#endif - -#if 0 -#define WARN(args) do { PRINT_FILE_LINE() \ - Serial.print("-W-"); Serial.println(args); \ -}while (0); -#else -#define WARN(args) do {} while (0); -#endif - -#if _DEBUG_SPI_ -#define DBG_PIN2 5 -#define DBG_PIN 4 - -#define START() digitalWrite(DBG_PIN2, HIGH); -#define END() digitalWrite(DBG_PIN2, LOW); -#define SET_TRIGGER() digitalWrite(DBG_PIN, HIGH); -#define RST_TRIGGER() digitalWrite(DBG_PIN, LOW); - -#define INIT_TRIGGER() pinMode(DBG_PIN, OUTPUT); \ - pinMode(DBG_PIN2, OUTPUT); \ - RST_TRIGGER() -#define TOGGLE_TRIGGER() SET_TRIGGER() \ - delayMicroseconds(2); \ - RST_TRIGGER() -#else -#define START() -#define END() -#define SET_TRIGGER() -#define RST_TRIGGER() -#define INIT_TRIGGER() -#define TOGGLE_TRIGGER() -#endif - -#endif diff --git a/hardware/arduino/sam/libraries/WiFi/utility/server_drv.cpp b/hardware/arduino/sam/libraries/WiFi/utility/server_drv.cpp deleted file mode 100644 index ce03604b4..000000000 --- a/hardware/arduino/sam/libraries/WiFi/utility/server_drv.cpp +++ /dev/null @@ -1,260 +0,0 @@ -//#define _DEBUG_ - -#include "server_drv.h" - -#include "Arduino.h" -#include "spi_drv.h" - -extern "C" { -#include "wl_types.h" -#include "debug.h" -} - - -// Start server TCP on port specified -void ServerDrv::startServer(uint16_t port, uint8_t sock) -{ - WAIT_FOR_SLAVE_SELECT(); - // Send Command - SpiDrv::sendCmd(START_SERVER_TCP_CMD, PARAM_NUMS_2); - SpiDrv::sendParam(port); - SpiDrv::sendParam(&sock, 1, LAST_PARAM); - - //Wait the reply elaboration - SpiDrv::waitForSlaveReady(); - - // Wait for reply - uint8_t _data = 0; - uint8_t _dataLen = 0; - if (!SpiDrv::waitResponseCmd(START_SERVER_TCP_CMD, PARAM_NUMS_1, &_data, &_dataLen)) - { - WARN("error waitResponse"); - } - SpiDrv::spiSlaveDeselect(); -} - -// Start server TCP on port specified -void ServerDrv::startClient(uint32_t ipAddress, uint16_t port, uint8_t sock) -{ - WAIT_FOR_SLAVE_SELECT(); - // Send Command - SpiDrv::sendCmd(START_CLIENT_TCP_CMD, PARAM_NUMS_3); - SpiDrv::sendParam((uint8_t*)&ipAddress, sizeof(ipAddress)); - SpiDrv::sendParam(port); - SpiDrv::sendParam(&sock, 1, LAST_PARAM); - - //Wait the reply elaboration - SpiDrv::waitForSlaveReady(); - - // Wait for reply - uint8_t _data = 0; - uint8_t _dataLen = 0; - if (!SpiDrv::waitResponseCmd(START_CLIENT_TCP_CMD, PARAM_NUMS_1, &_data, &_dataLen)) - { - WARN("error waitResponse"); - } - SpiDrv::spiSlaveDeselect(); -} - -// Start server TCP on port specified -void ServerDrv::stopClient(uint8_t sock) -{ - WAIT_FOR_SLAVE_SELECT(); - // Send Command - SpiDrv::sendCmd(STOP_CLIENT_TCP_CMD, PARAM_NUMS_1); - SpiDrv::sendParam(&sock, 1, LAST_PARAM); - - //Wait the reply elaboration - SpiDrv::waitForSlaveReady(); - - // Wait for reply - uint8_t _data = 0; - uint8_t _dataLen = 0; - if (!SpiDrv::waitResponseCmd(STOP_CLIENT_TCP_CMD, PARAM_NUMS_1, &_data, &_dataLen)) - { - WARN("error waitResponse"); - } - SpiDrv::spiSlaveDeselect(); -} - - -uint8_t ServerDrv::getServerState(uint8_t sock) -{ - WAIT_FOR_SLAVE_SELECT(); - // Send Command - SpiDrv::sendCmd(GET_STATE_TCP_CMD, PARAM_NUMS_1); - SpiDrv::sendParam(&sock, sizeof(sock), LAST_PARAM); - - //Wait the reply elaboration - SpiDrv::waitForSlaveReady(); - - // Wait for reply - uint8_t _data = 0; - uint8_t _dataLen = 0; - if (!SpiDrv::waitResponseCmd(GET_STATE_TCP_CMD, PARAM_NUMS_1, &_data, &_dataLen)) - { - WARN("error waitResponse"); - } - SpiDrv::spiSlaveDeselect(); - return _data; -} - -uint8_t ServerDrv::getClientState(uint8_t sock) -{ - WAIT_FOR_SLAVE_SELECT(); - // Send Command - SpiDrv::sendCmd(GET_CLIENT_STATE_TCP_CMD, PARAM_NUMS_1); - SpiDrv::sendParam(&sock, sizeof(sock), LAST_PARAM); - - //Wait the reply elaboration - SpiDrv::waitForSlaveReady(); - - // Wait for reply - uint8_t _data = 0; - uint8_t _dataLen = 0; - if (!SpiDrv::waitResponseCmd(GET_CLIENT_STATE_TCP_CMD, PARAM_NUMS_1, &_data, &_dataLen)) - { - WARN("error waitResponse"); - } - SpiDrv::spiSlaveDeselect(); - return _data; -} - -uint8_t ServerDrv::availData(uint8_t sock) -{ - WAIT_FOR_SLAVE_SELECT(); - // Send Command - SpiDrv::sendCmd(AVAIL_DATA_TCP_CMD, PARAM_NUMS_1); - SpiDrv::sendParam(&sock, sizeof(sock), LAST_PARAM); - - //Wait the reply elaboration - SpiDrv::waitForSlaveReady(); - - // Wait for reply - uint8_t _data = 0; - uint8_t _dataLen = 0; - if (!SpiDrv::waitResponseCmd(AVAIL_DATA_TCP_CMD, PARAM_NUMS_1, &_data, &_dataLen)) - { - WARN("error waitResponse"); - } - SpiDrv::spiSlaveDeselect(); - - if (_dataLen!=0) - { - return (_data == 1); - } - return false; -} - -bool ServerDrv::getData(uint8_t sock, uint8_t *data, uint8_t peek) -{ - WAIT_FOR_SLAVE_SELECT(); - // Send Command - SpiDrv::sendCmd(GET_DATA_TCP_CMD, PARAM_NUMS_2); - SpiDrv::sendParam(&sock, sizeof(sock)); - SpiDrv::sendParam(peek, LAST_PARAM); - - //Wait the reply elaboration - SpiDrv::waitForSlaveReady(); - - // Wait for reply - uint8_t _data = 0; - uint8_t _dataLen = 0; - if (!SpiDrv::waitResponseData8(GET_DATA_TCP_CMD, &_data, &_dataLen)) - { - WARN("error waitResponse"); - } - SpiDrv::spiSlaveDeselect(); - if (_dataLen!=0) - { - *data = _data; - return true; - } - return false; -} - -bool ServerDrv::getDataBuf(uint8_t sock, uint8_t *_data, uint16_t *_dataLen) -{ - WAIT_FOR_SLAVE_SELECT(); - // Send Command - SpiDrv::sendCmd(GET_DATABUF_TCP_CMD, PARAM_NUMS_1); - SpiDrv::sendBuffer(&sock, sizeof(sock), LAST_PARAM); - - //Wait the reply elaboration - SpiDrv::waitForSlaveReady(); - - // Wait for reply - if (!SpiDrv::waitResponseData16(GET_DATABUF_TCP_CMD, _data, _dataLen)) - { - WARN("error waitResponse"); - } - SpiDrv::spiSlaveDeselect(); - if (*_dataLen!=0) - { - return true; - } - return false; -} - - -bool ServerDrv::sendData(uint8_t sock, const uint8_t *data, uint16_t len) -{ - WAIT_FOR_SLAVE_SELECT(); - // Send Command - SpiDrv::sendCmd(SEND_DATA_TCP_CMD, PARAM_NUMS_2); - SpiDrv::sendBuffer(&sock, sizeof(sock)); - SpiDrv::sendBuffer((uint8_t *)data, len, LAST_PARAM); - - //Wait the reply elaboration - SpiDrv::waitForSlaveReady(); - - // Wait for reply - uint8_t _data = 0; - uint8_t _dataLen = 0; - if (!SpiDrv::waitResponseData8(SEND_DATA_TCP_CMD, &_data, &_dataLen)) - { - WARN("error waitResponse"); - } - SpiDrv::spiSlaveDeselect(); - if (_dataLen!=0) - { - return (_data == 1); - } - return false; -} - - -uint8_t ServerDrv::checkDataSent(uint8_t sock) -{ - const uint16_t TIMEOUT_DATA_SENT = 25; - uint16_t timeout = 0; - uint8_t _data = 0; - uint8_t _dataLen = 0; - - do { - WAIT_FOR_SLAVE_SELECT(); - // Send Command - SpiDrv::sendCmd(DATA_SENT_TCP_CMD, PARAM_NUMS_1); - SpiDrv::sendParam(&sock, sizeof(sock), LAST_PARAM); - - //Wait the reply elaboration - SpiDrv::waitForSlaveReady(); - - // Wait for reply - if (!SpiDrv::waitResponseCmd(DATA_SENT_TCP_CMD, PARAM_NUMS_1, &_data, &_dataLen)) - { - WARN("error waitResponse isDataSent"); - } - SpiDrv::spiSlaveDeselect(); - - if (_data) timeout = 0; - else{ - ++timeout; - delay(100); - } - - }while((_data==0)&&(timeout -#include "wifi_spi.h" - -class ServerDrv -{ -public: - // Start server TCP on port specified - static void startServer(uint16_t port, uint8_t sock); - - static void startClient(uint32_t ipAddress, uint16_t port, uint8_t sock); - - static void stopClient(uint8_t sock); - - static uint8_t getServerState(uint8_t sock); - - static uint8_t getClientState(uint8_t sock); - - static bool getData(uint8_t sock, uint8_t *data, uint8_t peek = 0); - - static bool getDataBuf(uint8_t sock, uint8_t *data, uint16_t *len); - - static bool sendData(uint8_t sock, const uint8_t *data, uint16_t len); - - static uint8_t availData(uint8_t sock); - - static uint8_t checkDataSent(uint8_t sock); -}; - -extern ServerDrv serverDrv; - -#endif diff --git a/hardware/arduino/sam/libraries/WiFi/utility/spi_drv.h b/hardware/arduino/sam/libraries/WiFi/utility/spi_drv.h deleted file mode 100644 index 5c2e7063f..000000000 --- a/hardware/arduino/sam/libraries/WiFi/utility/spi_drv.h +++ /dev/null @@ -1,83 +0,0 @@ -#ifndef SPI_Drv_h -#define SPI_Drv_h - -#include -#include "wifi_spi.h" - -#define SPI_START_CMD_DELAY 12 - -#define NO_LAST_PARAM 0 -#define LAST_PARAM 1 - -#define DUMMY_DATA 0xFF - -#define WAIT_FOR_SLAVE_SELECT() \ - SpiDrv::waitForSlaveReady(); \ - SpiDrv::spiSlaveSelect(); - - - -class SpiDrv -{ -private: - //static bool waitSlaveReady(); - static void waitForSlaveSign(); - static void getParam(uint8_t* param); -public: - - static void begin(); - - static void end(); - - static void spiDriverInit(); - - static void spiSlaveSelect(); - - static void spiSlaveDeselect(); - - static char spiTransfer(volatile char data); - - static void waitForSlaveReady(); - - //static int waitSpiChar(char waitChar, char* readChar); - - static int waitSpiChar(unsigned char waitChar); - - static int readAndCheckChar(char checkChar, char* readChar); - - static char readChar(); - - static int waitResponseParams(uint8_t cmd, uint8_t numParam, tParam* params); - - static int waitResponseCmd(uint8_t cmd, uint8_t numParam, uint8_t* param, uint8_t* param_len); - - static int waitResponseData8(uint8_t cmd, uint8_t* param, uint8_t* param_len); - - static int waitResponseData16(uint8_t cmd, uint8_t* param, uint16_t* param_len); - /* - static int waitResponse(uint8_t cmd, tParam* params, uint8_t* numParamRead, uint8_t maxNumParams); - - static int waitResponse(uint8_t cmd, uint8_t numParam, uint8_t* param, uint16_t* param_len); -*/ - static int waitResponse(uint8_t cmd, uint8_t* numParamRead, uint8_t** params, uint8_t maxNumParams); - - static void sendParam(uint8_t* param, uint8_t param_len, uint8_t lastParam = NO_LAST_PARAM); - - static void sendParamLen8(uint8_t param_len); - - static void sendParamLen16(uint16_t param_len); - - static uint8_t readParamLen8(uint8_t* param_len = NULL); - - static uint16_t readParamLen16(uint16_t* param_len = NULL); - - static void sendBuffer(uint8_t* param, uint16_t param_len, uint8_t lastParam = NO_LAST_PARAM); - - static void sendParam(uint16_t param, uint8_t lastParam = NO_LAST_PARAM); - - static void sendCmd(uint8_t cmd, uint8_t numParam); -}; - -extern SpiDrv spiDrv; - -#endif diff --git a/hardware/arduino/sam/libraries/WiFi/utility/wifi_drv.cpp b/hardware/arduino/sam/libraries/WiFi/utility/wifi_drv.cpp deleted file mode 100644 index 1ca169682..000000000 --- a/hardware/arduino/sam/libraries/WiFi/utility/wifi_drv.cpp +++ /dev/null @@ -1,491 +0,0 @@ -#include -#include -#include - -#include "Arduino.h" -#include "spi_drv.h" -#include "wifi_drv.h" - -#define _DEBUG_ - -extern "C" { -#include "wifi_spi.h" -#include "wl_types.h" -#include "debug.h" -} - -// Array of data to cache the information related to the networks discovered -char WiFiDrv::_networkSsid[][WL_SSID_MAX_LENGTH] = {{"1"},{"2"},{"3"},{"4"},{"5"}}; -int32_t WiFiDrv::_networkRssi[WL_NETWORKS_LIST_MAXNUM] = { 0 }; -uint8_t WiFiDrv::_networkEncr[WL_NETWORKS_LIST_MAXNUM] = { 0 }; - -// Cached values of retrieved data -char WiFiDrv::_ssid[] = {0}; -uint8_t WiFiDrv::_bssid[] = {0}; -uint8_t WiFiDrv::_mac[] = {0}; -uint8_t WiFiDrv::_localIp[] = {0}; -uint8_t WiFiDrv::_subnetMask[] = {0}; -uint8_t WiFiDrv::_gatewayIp[] = {0}; -// Firmware version -char WiFiDrv::fwVersion[] = {0}; - - -// Private Methods - -void WiFiDrv::getNetworkData(uint8_t *ip, uint8_t *mask, uint8_t *gwip) -{ - tParam params[PARAM_NUMS_3] = { {0, (char*)ip}, {0, (char*)mask}, {0, (char*)gwip}}; - - WAIT_FOR_SLAVE_SELECT(); - - // Send Command - SpiDrv::sendCmd(GET_IPADDR_CMD, PARAM_NUMS_1); - - uint8_t _dummy = DUMMY_DATA; - SpiDrv::sendParam(&_dummy, sizeof(_dummy), LAST_PARAM); - - //Wait the reply elaboration - SpiDrv::waitForSlaveReady(); - - // Wait for reply - SpiDrv::waitResponseParams(GET_IPADDR_CMD, PARAM_NUMS_3, params); - - SpiDrv::spiSlaveDeselect(); -} - -// Public Methods - - -void WiFiDrv::wifiDriverInit() -{ - SpiDrv::begin(); -} - -int8_t WiFiDrv::wifiSetNetwork(char* ssid, uint8_t ssid_len) -{ - WAIT_FOR_SLAVE_SELECT(); - // Send Command - SpiDrv::sendCmd(SET_NET_CMD, PARAM_NUMS_1); - SpiDrv::sendParam((uint8_t*)ssid, ssid_len, LAST_PARAM); - - //Wait the reply elaboration - SpiDrv::waitForSlaveReady(); - - // Wait for reply - uint8_t _data = 0; - uint8_t _dataLen = 0; - if (!SpiDrv::waitResponseCmd(SET_NET_CMD, PARAM_NUMS_1, &_data, &_dataLen)) - { - WARN("error waitResponse"); - _data = WL_FAILURE; - } - SpiDrv::spiSlaveDeselect(); - - return(_data == WIFI_SPI_ACK) ? WL_SUCCESS : WL_FAILURE; -} - -int8_t WiFiDrv::wifiSetPassphrase(char* ssid, uint8_t ssid_len, const char *passphrase, const uint8_t len) -{ - WAIT_FOR_SLAVE_SELECT(); - // Send Command - SpiDrv::sendCmd(SET_PASSPHRASE_CMD, PARAM_NUMS_2); - SpiDrv::sendParam((uint8_t*)ssid, ssid_len, NO_LAST_PARAM); - SpiDrv::sendParam((uint8_t*)passphrase, len, LAST_PARAM); - - //Wait the reply elaboration - SpiDrv::waitForSlaveReady(); - - // Wait for reply - uint8_t _data = 0; - uint8_t _dataLen = 0; - if (!SpiDrv::waitResponseCmd(SET_PASSPHRASE_CMD, PARAM_NUMS_1, &_data, &_dataLen)) - { - WARN("error waitResponse"); - _data = WL_FAILURE; - } - SpiDrv::spiSlaveDeselect(); - return _data; -} - - -int8_t WiFiDrv::wifiSetKey(char* ssid, uint8_t ssid_len, uint8_t key_idx, const void *key, const uint8_t len) -{ - WAIT_FOR_SLAVE_SELECT(); - // Send Command - SpiDrv::sendCmd(SET_KEY_CMD, PARAM_NUMS_3); - SpiDrv::sendParam((uint8_t*)ssid, ssid_len, NO_LAST_PARAM); - SpiDrv::sendParam(&key_idx, KEY_IDX_LEN, NO_LAST_PARAM); - SpiDrv::sendParam((uint8_t*)key, len, LAST_PARAM); - - //Wait the reply elaboration - SpiDrv::waitForSlaveReady(); - - // Wait for reply - uint8_t _data = 0; - uint8_t _dataLen = 0; - if (!SpiDrv::waitResponseCmd(SET_KEY_CMD, PARAM_NUMS_1, &_data, &_dataLen)) - { - WARN("error waitResponse"); - _data = WL_FAILURE; - } - SpiDrv::spiSlaveDeselect(); - return _data; -} - -int8_t WiFiDrv::disconnect() -{ - WAIT_FOR_SLAVE_SELECT(); - // Send Command - SpiDrv::sendCmd(DISCONNECT_CMD, PARAM_NUMS_1); - - uint8_t _dummy = DUMMY_DATA; - SpiDrv::sendParam(&_dummy, 1, LAST_PARAM); - - //Wait the reply elaboration - SpiDrv::waitForSlaveReady(); - - // Wait for reply - uint8_t _data = 0; - uint8_t _dataLen = 0; - int8_t result = SpiDrv::waitResponseCmd(DISCONNECT_CMD, PARAM_NUMS_1, &_data, &_dataLen); - - SpiDrv::spiSlaveDeselect(); - - return result; -} - -uint8_t WiFiDrv::getConnectionStatus() -{ - WAIT_FOR_SLAVE_SELECT(); - - // Send Command - SpiDrv::sendCmd(GET_CONN_STATUS_CMD, PARAM_NUMS_0); - - //Wait the reply elaboration - SpiDrv::waitForSlaveReady(); - - // Wait for reply - uint8_t _data = -1; - uint8_t _dataLen = 0; - SpiDrv::waitResponseCmd(GET_CONN_STATUS_CMD, PARAM_NUMS_1, &_data, &_dataLen); - - SpiDrv::spiSlaveDeselect(); - - return _data; -} - -uint8_t* WiFiDrv::getMacAddress() -{ - WAIT_FOR_SLAVE_SELECT(); - - // Send Command - SpiDrv::sendCmd(GET_MACADDR_CMD, PARAM_NUMS_1); - - uint8_t _dummy = DUMMY_DATA; - SpiDrv::sendParam(&_dummy, 1, LAST_PARAM); - - //Wait the reply elaboration - SpiDrv::waitForSlaveReady(); - - // Wait for reply - uint8_t _dataLen = 0; - SpiDrv::waitResponseCmd(GET_MACADDR_CMD, PARAM_NUMS_1, _mac, &_dataLen); - - SpiDrv::spiSlaveDeselect(); - - return _mac; -} - -void WiFiDrv::getIpAddress(IPAddress& ip) -{ - getNetworkData(_localIp, _subnetMask, _gatewayIp); - ip = _localIp; -} - - void WiFiDrv::getSubnetMask(IPAddress& mask) - { - getNetworkData(_localIp, _subnetMask, _gatewayIp); - mask = _subnetMask; - } - - void WiFiDrv::getGatewayIP(IPAddress& ip) - { - getNetworkData(_localIp, _subnetMask, _gatewayIp); - ip = _gatewayIp; - } - -char* WiFiDrv::getCurrentSSID() -{ - WAIT_FOR_SLAVE_SELECT(); - - // Send Command - SpiDrv::sendCmd(GET_CURR_SSID_CMD, PARAM_NUMS_1); - - uint8_t _dummy = DUMMY_DATA; - SpiDrv::sendParam(&_dummy, 1, LAST_PARAM); - - //Wait the reply elaboration - SpiDrv::waitForSlaveReady(); - - // Wait for reply - uint8_t _dataLen = 0; - SpiDrv::waitResponseCmd(GET_CURR_SSID_CMD, PARAM_NUMS_1, (uint8_t*)_ssid, &_dataLen); - - SpiDrv::spiSlaveDeselect(); - - return _ssid; -} - -uint8_t* WiFiDrv::getCurrentBSSID() -{ - WAIT_FOR_SLAVE_SELECT(); - - // Send Command - SpiDrv::sendCmd(GET_CURR_BSSID_CMD, PARAM_NUMS_1); - - uint8_t _dummy = DUMMY_DATA; - SpiDrv::sendParam(&_dummy, 1, LAST_PARAM); - - //Wait the reply elaboration - SpiDrv::waitForSlaveReady(); - - // Wait for reply - uint8_t _dataLen = 0; - SpiDrv::waitResponseCmd(GET_CURR_BSSID_CMD, PARAM_NUMS_1, _bssid, &_dataLen); - - SpiDrv::spiSlaveDeselect(); - - return _bssid; -} - -int32_t WiFiDrv::getCurrentRSSI() -{ - WAIT_FOR_SLAVE_SELECT(); - - // Send Command - SpiDrv::sendCmd(GET_CURR_RSSI_CMD, PARAM_NUMS_1); - - uint8_t _dummy = DUMMY_DATA; - SpiDrv::sendParam(&_dummy, 1, LAST_PARAM); - - //Wait the reply elaboration - SpiDrv::waitForSlaveReady(); - - // Wait for reply - uint8_t _dataLen = 0; - int32_t rssi = 0; - SpiDrv::waitResponseCmd(GET_CURR_RSSI_CMD, PARAM_NUMS_1, (uint8_t*)&rssi, &_dataLen); - - SpiDrv::spiSlaveDeselect(); - - return rssi; -} - -uint8_t WiFiDrv::getCurrentEncryptionType() -{ - WAIT_FOR_SLAVE_SELECT(); - - // Send Command - SpiDrv::sendCmd(GET_CURR_ENCT_CMD, PARAM_NUMS_1); - - uint8_t _dummy = DUMMY_DATA; - SpiDrv::sendParam(&_dummy, 1, LAST_PARAM); - - //Wait the reply elaboration - SpiDrv::waitForSlaveReady(); - - // Wait for reply - uint8_t dataLen = 0; - uint8_t encType = 0; - SpiDrv::waitResponseCmd(GET_CURR_ENCT_CMD, PARAM_NUMS_1, (uint8_t*)&encType, &dataLen); - - SpiDrv::spiSlaveDeselect(); - - return encType; -} - -int8_t WiFiDrv::startScanNetworks() -{ - WAIT_FOR_SLAVE_SELECT(); - - // Send Command - SpiDrv::sendCmd(START_SCAN_NETWORKS, PARAM_NUMS_0); - - //Wait the reply elaboration - SpiDrv::waitForSlaveReady(); - - // Wait for reply - uint8_t _data = 0; - uint8_t _dataLen = 0; - - if (!SpiDrv::waitResponseCmd(START_SCAN_NETWORKS, PARAM_NUMS_1, &_data, &_dataLen)) - { - WARN("error waitResponse"); - _data = WL_FAILURE; - } - - SpiDrv::spiSlaveDeselect(); - - return (_data == WL_FAILURE)? _data : WL_SUCCESS; -} - - -uint8_t WiFiDrv::getScanNetworks() -{ - WAIT_FOR_SLAVE_SELECT(); - - // Send Command - SpiDrv::sendCmd(SCAN_NETWORKS, PARAM_NUMS_0); - - //Wait the reply elaboration - SpiDrv::waitForSlaveReady(); - - // Wait for reply - uint8_t ssidListNum = 0; - SpiDrv::waitResponse(SCAN_NETWORKS, &ssidListNum, (uint8_t**)_networkSsid, WL_NETWORKS_LIST_MAXNUM); - - SpiDrv::spiSlaveDeselect(); - - return ssidListNum; -} - -char* WiFiDrv::getSSIDNetoworks(uint8_t networkItem) -{ - if (networkItem >= WL_NETWORKS_LIST_MAXNUM) - return NULL; - - return _networkSsid[networkItem]; -} - -uint8_t WiFiDrv::getEncTypeNetowrks(uint8_t networkItem) -{ - if (networkItem >= WL_NETWORKS_LIST_MAXNUM) - return NULL; - - WAIT_FOR_SLAVE_SELECT(); - - // Send Command - SpiDrv::sendCmd(GET_IDX_ENCT_CMD, PARAM_NUMS_1); - - SpiDrv::sendParam(&networkItem, 1, LAST_PARAM); - - //Wait the reply elaboration - SpiDrv::waitForSlaveReady(); - - // Wait for reply - uint8_t dataLen = 0; - uint8_t encType = 0; - SpiDrv::waitResponseCmd(GET_IDX_ENCT_CMD, PARAM_NUMS_1, (uint8_t*)&encType, &dataLen); - - SpiDrv::spiSlaveDeselect(); - - return encType; -} - -int32_t WiFiDrv::getRSSINetoworks(uint8_t networkItem) -{ - if (networkItem >= WL_NETWORKS_LIST_MAXNUM) - return NULL; - int32_t networkRssi = 0; - - WAIT_FOR_SLAVE_SELECT(); - - // Send Command - SpiDrv::sendCmd(GET_IDX_RSSI_CMD, PARAM_NUMS_1); - - SpiDrv::sendParam(&networkItem, 1, LAST_PARAM); - - //Wait the reply elaboration - SpiDrv::waitForSlaveReady(); - - // Wait for reply - uint8_t dataLen = 0; - SpiDrv::waitResponseCmd(GET_IDX_RSSI_CMD, PARAM_NUMS_1, (uint8_t*)&networkRssi, &dataLen); - - SpiDrv::spiSlaveDeselect(); - - return networkRssi; -} - -uint8_t WiFiDrv::reqHostByName(const char* aHostname) -{ - WAIT_FOR_SLAVE_SELECT(); - - // Send Command - SpiDrv::sendCmd(REQ_HOST_BY_NAME_CMD, PARAM_NUMS_1); - SpiDrv::sendParam((uint8_t*)aHostname, strlen(aHostname), LAST_PARAM); - - //Wait the reply elaboration - SpiDrv::waitForSlaveReady(); - - // Wait for reply - uint8_t _data = 0; - uint8_t _dataLen = 0; - uint8_t result = SpiDrv::waitResponseCmd(REQ_HOST_BY_NAME_CMD, PARAM_NUMS_1, &_data, &_dataLen); - - SpiDrv::spiSlaveDeselect(); - - return result; -} - -int WiFiDrv::getHostByName(IPAddress& aResult) -{ - uint8_t _ipAddr[WL_IPV4_LENGTH]; - IPAddress dummy(0xFF,0xFF,0xFF,0xFF); - int result = 0; - - WAIT_FOR_SLAVE_SELECT(); - // Send Command - SpiDrv::sendCmd(GET_HOST_BY_NAME_CMD, PARAM_NUMS_0); - - //Wait the reply elaboration - SpiDrv::waitForSlaveReady(); - - // Wait for reply - uint8_t _dataLen = 0; - if (!SpiDrv::waitResponseCmd(GET_HOST_BY_NAME_CMD, PARAM_NUMS_1, _ipAddr, &_dataLen)) - { - WARN("error waitResponse"); - }else{ - aResult = _ipAddr; - result = (aResult != dummy); - } - SpiDrv::spiSlaveDeselect(); - return result; -} - -int WiFiDrv::getHostByName(const char* aHostname, IPAddress& aResult) -{ - uint8_t retry = 10; - if (reqHostByName(aHostname)) - { - while(!getHostByName(aResult) && --retry > 0) - { - delay(1000); - } - }else{ - return 0; - } - return (retry>0); -} - -char* WiFiDrv::getFwVersion() -{ - WAIT_FOR_SLAVE_SELECT(); - // Send Command - SpiDrv::sendCmd(GET_FW_VERSION_CMD, PARAM_NUMS_0); - - //Wait the reply elaboration - SpiDrv::waitForSlaveReady(); - - // Wait for reply - uint8_t _dataLen = 0; - if (!SpiDrv::waitResponseCmd(GET_FW_VERSION_CMD, PARAM_NUMS_1, (uint8_t*)fwVersion, &_dataLen)) - { - WARN("error waitResponse"); - } - SpiDrv::spiSlaveDeselect(); - return fwVersion; -} - -WiFiDrv wiFiDrv; diff --git a/hardware/arduino/sam/libraries/WiFi/utility/wifi_drv.h b/hardware/arduino/sam/libraries/WiFi/utility/wifi_drv.h deleted file mode 100644 index c4f04dbe7..000000000 --- a/hardware/arduino/sam/libraries/WiFi/utility/wifi_drv.h +++ /dev/null @@ -1,219 +0,0 @@ -#ifndef WiFi_Drv_h -#define WiFi_Drv_h - -#include -#include "wifi_spi.h" -#include "IPAddress.h" - -// Key index length -#define KEY_IDX_LEN 1 -// 5 secs of delay to have the connection established -#define WL_DELAY_START_CONNECTION 5000 -// firmware version string length -#define WL_FW_VER_LENGTH 6 - -class WiFiDrv -{ -private: - // settings of requested network - static char _networkSsid[WL_NETWORKS_LIST_MAXNUM][WL_SSID_MAX_LENGTH]; - static int32_t _networkRssi[WL_NETWORKS_LIST_MAXNUM]; - static uint8_t _networkEncr[WL_NETWORKS_LIST_MAXNUM]; - - // firmware version string in the format a.b.c - static char fwVersion[WL_FW_VER_LENGTH]; - - // settings of current selected network - static char _ssid[WL_SSID_MAX_LENGTH]; - static uint8_t _bssid[WL_MAC_ADDR_LENGTH]; - static uint8_t _mac[WL_MAC_ADDR_LENGTH]; - static uint8_t _localIp[WL_IPV4_LENGTH]; - static uint8_t _subnetMask[WL_IPV4_LENGTH]; - static uint8_t _gatewayIp[WL_IPV4_LENGTH]; - - /* - * Get network Data information - */ - static void getNetworkData(uint8_t *ip, uint8_t *mask, uint8_t *gwip); - - static uint8_t reqHostByName(const char* aHostname); - - static int getHostByName(IPAddress& aResult); - -public: - - /* - * Driver initialization - */ - static void wifiDriverInit(); - - /* - * Set the desired network which the connection manager should try to - * connect to. - * - * The ssid of the desired network should be specified. - * - * param ssid: The ssid of the desired network. - * param ssid_len: Lenght of ssid string. - * return: WL_SUCCESS or WL_FAILURE - */ - static int8_t wifiSetNetwork(char* ssid, uint8_t ssid_len); - - /* Start Wifi connection with passphrase - * the most secure supported mode will be automatically selected - * - * param ssid: Pointer to the SSID string. - * param ssid_len: Lenght of ssid string. - * param passphrase: Passphrase. Valid characters in a passphrase - * must be between ASCII 32-126 (decimal). - * param len: Lenght of passphrase string. - * return: WL_SUCCESS or WL_FAILURE - */ - static int8_t wifiSetPassphrase(char* ssid, uint8_t ssid_len, const char *passphrase, const uint8_t len); - - /* Start Wifi connection with WEP encryption. - * Configure a key into the device. The key type (WEP-40, WEP-104) - * is determined by the size of the key (5 bytes for WEP-40, 13 bytes for WEP-104). - * - * param ssid: Pointer to the SSID string. - * param ssid_len: Lenght of ssid string. - * param key_idx: The key index to set. Valid values are 0-3. - * param key: Key input buffer. - * param len: Lenght of key string. - * return: WL_SUCCESS or WL_FAILURE - */ - static int8_t wifiSetKey(char* ssid, uint8_t ssid_len, uint8_t key_idx, const void *key, const uint8_t len); - - /* - * Disconnect from the network - * - * return: WL_SUCCESS or WL_FAILURE - */ - static int8_t disconnect(); - - /* - * Disconnect from the network - * - * return: one value of wl_status_t enum - */ - static uint8_t getConnectionStatus(); - - /* - * Get the interface MAC address. - * - * return: pointer to uint8_t array with length WL_MAC_ADDR_LENGTH - */ - static uint8_t* getMacAddress(); - - /* - * Get the interface IP address. - * - * return: copy the ip address value in IPAddress object - */ - static void getIpAddress(IPAddress& ip); - - /* - * Get the interface subnet mask address. - * - * return: copy the subnet mask address value in IPAddress object - */ - static void getSubnetMask(IPAddress& mask); - - /* - * Get the gateway ip address. - * - * return: copy the gateway ip address value in IPAddress object - */ - static void getGatewayIP(IPAddress& ip); - - /* - * Return the current SSID associated with the network - * - * return: ssid string - */ - static char* getCurrentSSID(); - - /* - * Return the current BSSID associated with the network. - * It is the MAC address of the Access Point - * - * return: pointer to uint8_t array with length WL_MAC_ADDR_LENGTH - */ - static uint8_t* getCurrentBSSID(); - - /* - * Return the current RSSI /Received Signal Strength in dBm) - * associated with the network - * - * return: signed value - */ - static int32_t getCurrentRSSI(); - - /* - * Return the Encryption Type associated with the network - * - * return: one value of wl_enc_type enum - */ - static uint8_t getCurrentEncryptionType(); - - /* - * Start scan WiFi networks available - * - * return: Number of discovered networks - */ - static int8_t startScanNetworks(); - - /* - * Get the networks available - * - * return: Number of discovered networks - */ - static uint8_t getScanNetworks(); - - /* - * Return the SSID discovered during the network scan. - * - * param networkItem: specify from which network item want to get the information - * - * return: ssid string of the specified item on the networks scanned list - */ - static char* getSSIDNetoworks(uint8_t networkItem); - - /* - * Return the RSSI of the networks discovered during the scanNetworks - * - * param networkItem: specify from which network item want to get the information - * - * return: signed value of RSSI of the specified item on the networks scanned list - */ - static int32_t getRSSINetoworks(uint8_t networkItem); - - /* - * Return the encryption type of the networks discovered during the scanNetworks - * - * param networkItem: specify from which network item want to get the information - * - * return: encryption type (enum wl_enc_type) of the specified item on the networks scanned list - */ - static uint8_t getEncTypeNetowrks(uint8_t networkItem); - - /* - * Resolve the given hostname to an IP address. - * param aHostname: Name to be resolved - * param aResult: IPAddress structure to store the returned IP address - * result: 1 if aIPAddrString was successfully converted to an IP address, - * else error code - */ - static int getHostByName(const char* aHostname, IPAddress& aResult); - - /* - * Get the firmware version - * result: version as string with this format a.b.c - */ - static char* getFwVersion(); - -}; - -extern WiFiDrv wiFiDrv; - -#endif diff --git a/hardware/arduino/sam/libraries/WiFi/utility/wl_types.h b/hardware/arduino/sam/libraries/WiFi/utility/wl_types.h deleted file mode 100644 index 82b309d7f..000000000 --- a/hardware/arduino/sam/libraries/WiFi/utility/wl_types.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - * wl_types.h - * - * Created on: Jul 30, 2010 - * Author: dlafauci - */ - - -#ifndef _WL_TYPES_H_ -#define _WL_TYPES_H_ - -#include - -typedef enum { - WL_FAILURE = -1, - WL_SUCCESS = 1, -} wl_error_code_t; - -/* Authentication modes */ -enum wl_auth_mode { - AUTH_MODE_INVALID, - AUTH_MODE_AUTO, - AUTH_MODE_OPEN_SYSTEM, - AUTH_MODE_SHARED_KEY, - AUTH_MODE_WPA, - AUTH_MODE_WPA2, - AUTH_MODE_WPA_PSK, - AUTH_MODE_WPA2_PSK -}; - -#endif //_WL_TYPES_H_ diff --git a/hardware/arduino/avr/libraries/WiFi/WiFiClient.cpp b/libraries/WiFi/arch/avr/WiFiClient.cpp old mode 100644 new mode 100755 similarity index 98% rename from hardware/arduino/avr/libraries/WiFi/WiFiClient.cpp rename to libraries/WiFi/arch/avr/WiFiClient.cpp index 0b4b6dc8a..cd996305c --- a/hardware/arduino/avr/libraries/WiFi/WiFiClient.cpp +++ b/libraries/WiFi/arch/avr/WiFiClient.cpp @@ -1,7 +1,7 @@ extern "C" { #include "utility/wl_definitions.h" #include "utility/wl_types.h" - #include "socket.h" + #include "utility/socket.h" #include "string.h" #include "utility/debug.h" } @@ -9,7 +9,7 @@ extern "C" { #include "WiFi.h" #include "WiFiClient.h" #include "WiFiServer.h" -#include "server_drv.h" +#include "utility/server_drv.h" uint16_t WiFiClient::_srcport = 1024; diff --git a/hardware/arduino/avr/libraries/WiFi/WiFiUdp.cpp b/libraries/WiFi/arch/avr/WiFiUdp.cpp similarity index 97% rename from hardware/arduino/avr/libraries/WiFi/WiFiUdp.cpp rename to libraries/WiFi/arch/avr/WiFiUdp.cpp index 7020df80b..d4d6795c7 100644 --- a/hardware/arduino/avr/libraries/WiFi/WiFiUdp.cpp +++ b/libraries/WiFi/arch/avr/WiFiUdp.cpp @@ -4,8 +4,8 @@ extern "C" { #include "utility/wifi_spi.h" } #include -#include "server_drv.h" -#include "wifi_drv.h" +#include "utility/server_drv.h" +#include "utility/wifi_drv.h" #include "WiFi.h" #include "WiFiUdp.h" diff --git a/hardware/arduino/avr/libraries/WiFi/utility/socket.h b/libraries/WiFi/arch/avr/utility/socket.h similarity index 94% rename from hardware/arduino/avr/libraries/WiFi/utility/socket.h rename to libraries/WiFi/arch/avr/utility/socket.h index 9b06d00d1..de3cc786a 100644 --- a/hardware/arduino/avr/libraries/WiFi/utility/socket.h +++ b/libraries/WiFi/arch/avr/utility/socket.h @@ -14,7 +14,7 @@ #define SOCK_NOT_AVAIL 255 -#include "wl_definitions.h" +#include "utility/wl_definitions.h" /** * The 8-bit signed data type. */ diff --git a/hardware/arduino/avr/libraries/WiFi/utility/spi_drv.cpp b/libraries/WiFi/arch/avr/utility/spi_drv.cpp similarity index 93% rename from hardware/arduino/avr/libraries/WiFi/utility/spi_drv.cpp rename to libraries/WiFi/arch/avr/utility/spi_drv.cpp index 12a320b0d..7f56fe867 100644 --- a/hardware/arduino/avr/libraries/WiFi/utility/spi_drv.cpp +++ b/libraries/WiFi/arch/avr/utility/spi_drv.cpp @@ -1,16 +1,17 @@ #include "Arduino.h" -#include "spi_drv.h" +#include +#include "utility/spi_drv.h" #include "pins_arduino.h" //#define _DEBUG_ extern "C" { -#include "debug.h" +#include "utility/debug.h" } #define DATAOUT 11 // MOSI #define DATAIN 12 // MISO #define SPICLOCK 13 // sck -#define SLAVESELECT 10 // ss +#define SLAVESELECT 10 // ss #define SLAVEREADY 7 // handshake pin #define WIFILED 9 // led on wifi shield @@ -20,15 +21,7 @@ extern "C" { void SpiDrv::begin() { - // Set direction register for SCK and MOSI pin. - // MISO pin automatically overrides to INPUT. - // When the SS pin is set as OUTPUT, it can be used as - // a general purpose output port (it doesn't influence - // SPI operations). - - pinMode(SCK, OUTPUT); - pinMode(MOSI, OUTPUT); - pinMode(SS, OUTPUT); + SPI.begin(); pinMode(SLAVESELECT, OUTPUT); pinMode(SLAVEREADY, INPUT); pinMode(WIFILED, OUTPUT); @@ -42,17 +35,10 @@ void SpiDrv::begin() #ifdef _DEBUG_ INIT_TRIGGER() #endif - - // Warning: if the SS pin ever becomes a LOW INPUT then SPI - // automatically switches to Slave, so the data direction of - // the SS pin MUST be kept as OUTPUT. - SPCR |= _BV(MSTR); - SPCR |= _BV(SPE); - //SPSR |= _BV(SPI2X); } void SpiDrv::end() { - SPCR &= ~_BV(SPE); + SPI.end(); } void SpiDrv::spiSlaveSelect() @@ -66,6 +52,7 @@ void SpiDrv::spiSlaveDeselect() digitalWrite(SLAVESELECT,HIGH); } +/* void delaySpi() { int i = 0; @@ -75,14 +62,11 @@ void delaySpi() int a =a+1; } } +*/ char SpiDrv::spiTransfer(volatile char data) { - SPDR = data; // Start the transmission - while (!(SPSR & (1<(1)); + return write(&b, 1); } size_t WiFiClient::write(const uint8_t *buf, size_t size) { @@ -130,13 +130,13 @@ void WiFiClient::stop() { return; ServerDrv::stopClient(_sock); + WiFiClass::_state[_sock] = NA_STATE; - unsigned long start = millis(); - + int count = 0; + // wait maximum 5 secs for the connection to close + while (status() != CLOSED && ++count < 50) + delay(100); - // wait a second for the connection to close - while (status() != CLOSED && millis() - start < 1000) - delay(1); _sock = 255; } @@ -150,7 +150,7 @@ uint8_t WiFiClient::connected() { return !(s == LISTEN || s == CLOSED || s == FIN_WAIT_1 || s == FIN_WAIT_2 || s == TIME_WAIT || s == SYN_SENT || s== SYN_RCVD || - (s == CLOSE_WAIT && !available())); + (s == CLOSE_WAIT)); } } @@ -170,7 +170,7 @@ WiFiClient::operator bool() { uint8_t WiFiClient::getFirstSocket() { for (int i = 0; i < MAX_SOCK_NUM; i++) { - if (WiFiClass::_state[i] == 0) + if (WiFiClass::_state[i] == NA_STATE) { return i; } diff --git a/libraries/WiFi/arch/sam/WiFiUdp.cpp b/libraries/WiFi/arch/sam/WiFiUdp.cpp new file mode 100644 index 000000000..19e087f4c --- /dev/null +++ b/libraries/WiFi/arch/sam/WiFiUdp.cpp @@ -0,0 +1,163 @@ + +extern "C" { + #include "utility/debug.h" + #include "utility/wifi_spi.h" +} +#include +#include "utility/server_drv.h" +#include "utility/wifi_drv.h" + +#include "WiFi.h" +#include "WiFiUdp.h" +#include "WiFiClient.h" +#include "WiFiServer.h" + + +/* Constructor */ +WiFiUDP::WiFiUDP() : _sock(NO_SOCKET_AVAIL) {} + +/* Start WiFiUDP socket, listening at local port PORT */ +uint8_t WiFiUDP::begin(uint16_t port) { + + uint8_t sock = WiFiClass::getSocket(); + if (sock != NO_SOCKET_AVAIL) + { + ServerDrv::startServer(port, sock, UDP_MODE); + WiFiClass::_server_port[sock] = port; + _sock = sock; + _port = port; + return 1; + } + return 0; + +} + +/* return number of bytes available in the current packet, + will return zero if parsePacket hasn't been called yet */ +int WiFiUDP::available() { + if (_sock != NO_SOCKET_AVAIL) + { + return ServerDrv::availData(_sock); + } + return 0; +} + +/* Release any resources being used by this WiFiUDP instance */ +void WiFiUDP::stop() +{ + if (_sock == NO_SOCKET_AVAIL) + return; + + ServerDrv::stopClient(_sock); + + _sock = NO_SOCKET_AVAIL; +} + +int WiFiUDP::beginPacket(const char *host, uint16_t port) +{ + // Look up the host first + int ret = 0; + IPAddress remote_addr; + if (WiFi.hostByName(host, remote_addr)) + { + return beginPacket(remote_addr, port); + } + return ret; +} + +int WiFiUDP::beginPacket(IPAddress ip, uint16_t port) +{ + if (_sock == NO_SOCKET_AVAIL) + _sock = WiFiClass::getSocket(); + if (_sock != NO_SOCKET_AVAIL) + { + ServerDrv::startClient(uint32_t(ip), port, _sock, UDP_MODE); + WiFiClass::_state[_sock] = _sock; + return 1; + } + return 0; +} + +int WiFiUDP::endPacket() +{ + return ServerDrv::sendUdpData(_sock); +} + +size_t WiFiUDP::write(uint8_t byte) +{ + return write(&byte, 1); +} + +size_t WiFiUDP::write(const uint8_t *buffer, size_t size) +{ + ServerDrv::insertDataBuf(_sock, buffer, size); + return size; +} + +int WiFiUDP::parsePacket() +{ + return available(); +} + +int WiFiUDP::read() +{ + uint8_t b; + if (available()) + { + ServerDrv::getData(_sock, &b); + return b; + }else{ + return -1; + } +} + +int WiFiUDP::read(unsigned char* buffer, size_t len) +{ + if (available()) + { + uint16_t size = 0; + if (!ServerDrv::getDataBuf(_sock, buffer, &size)) + return -1; + // TODO check if the buffer is too smal respect to buffer size + return size; + }else{ + return -1; + } +} + +int WiFiUDP::peek() +{ + uint8_t b; + if (!available()) + return -1; + + ServerDrv::getData(_sock, &b, 1); + return b; +} + +void WiFiUDP::flush() +{ + while (available()) + read(); +} + +IPAddress WiFiUDP::remoteIP() +{ + uint8_t _remoteIp[4] = {0}; + uint8_t _remotePort[2] = {0}; + + WiFiDrv::getRemoteData(_sock, _remoteIp, _remotePort); + IPAddress ip(_remoteIp); + return ip; +} + +uint16_t WiFiUDP::remotePort() +{ + uint8_t _remoteIp[4] = {0}; + uint8_t _remotePort[2] = {0}; + + WiFiDrv::getRemoteData(_sock, _remoteIp, _remotePort); + uint16_t port = (_remotePort[0]<<8)+_remotePort[1]; + return port; +} + diff --git a/hardware/arduino/sam/libraries/WiFi/utility/socket.h b/libraries/WiFi/arch/sam/utility/socket.h similarity index 93% rename from hardware/arduino/sam/libraries/WiFi/utility/socket.h rename to libraries/WiFi/arch/sam/utility/socket.h index cd7e1640a..c96262b20 100644 --- a/hardware/arduino/sam/libraries/WiFi/utility/socket.h +++ b/libraries/WiFi/arch/sam/utility/socket.h @@ -14,7 +14,7 @@ #define SOCK_NOT_AVAIL 255 -#include "wl_definitions.h" +#include "utility/wl_definitions.h" /** * The 8-bit signed data type. */ @@ -67,7 +67,7 @@ typedef volatile unsigned long vuint32; /* bsd */ typedef uint8 u_char; /**< 8-bit value */ -typedef uint16_t SOCKET; +typedef uint16_t SOCKET; //typedef uint16 u_short; /**< 16-bit value */ typedef uint16 u_int; /**< 16-bit value */ typedef uint32 u_long; /**< 32-bit value */ diff --git a/hardware/arduino/sam/libraries/WiFi/utility/spi_drv.cpp b/libraries/WiFi/arch/sam/utility/spi_drv.cpp similarity index 99% rename from hardware/arduino/sam/libraries/WiFi/utility/spi_drv.cpp rename to libraries/WiFi/arch/sam/utility/spi_drv.cpp index d41dd7b9c..53c93fb87 100644 --- a/hardware/arduino/sam/libraries/WiFi/utility/spi_drv.cpp +++ b/libraries/WiFi/arch/sam/utility/spi_drv.cpp @@ -1,11 +1,11 @@ #include "Arduino.h" #include -#include "spi_drv.h" +#include "utility/spi_drv.h" #include "pins_arduino.h" //#define _DEBUG_ extern "C" { -#include "debug.h" +#include "utility/debug.h" } #define DATAOUT 11 // MOSI diff --git a/hardware/arduino/sam/libraries/WiFi/utility/wifi_spi.h b/libraries/WiFi/arch/sam/utility/wifi_spi.h similarity index 88% rename from hardware/arduino/sam/libraries/WiFi/utility/wifi_spi.h rename to libraries/WiFi/arch/sam/utility/wifi_spi.h index bf479e2ec..b00dc10e3 100644 --- a/hardware/arduino/sam/libraries/WiFi/utility/wifi_spi.h +++ b/libraries/WiFi/arch/sam/utility/wifi_spi.h @@ -1,144 +1,154 @@ -#ifndef WiFi_Spi_h -#define WiFi_Spi_h - -#include "wl_definitions.h" - -#define CMD_FLAG 0 -#define REPLY_FLAG 1<<7 -#define DATA_FLAG 0x40 - -#define WIFI_SPI_ACK 1 -#define WIFI_SPI_ERR 0xFF - -#define TIMEOUT_CHAR 1000 - -//#define MAX_SOCK_NUM 4 /**< Maxmium number of socket */ -#define NO_SOCKET_AVAIL 255 - -#define START_CMD 0xE0 -#define END_CMD 0xEE -#define ERR_CMD 0xEF - -enum { - SET_NET_CMD = 0x10, - SET_PASSPHRASE_CMD = 0x11, - SET_KEY_CMD = 0x12, - TEST_CMD = 0x13, - - GET_CONN_STATUS_CMD = 0x20, - GET_IPADDR_CMD = 0x21, - GET_MACADDR_CMD = 0x22, - GET_CURR_SSID_CMD = 0x23, - GET_CURR_BSSID_CMD = 0x24, - GET_CURR_RSSI_CMD = 0x25, - GET_CURR_ENCT_CMD = 0x26, - SCAN_NETWORKS = 0x27, - START_SERVER_TCP_CMD= 0x28, - GET_STATE_TCP_CMD = 0x29, - DATA_SENT_TCP_CMD = 0x2A, - AVAIL_DATA_TCP_CMD = 0x2B, - GET_DATA_TCP_CMD = 0x2C, - START_CLIENT_TCP_CMD= 0x2D, - STOP_CLIENT_TCP_CMD = 0x2E, - GET_CLIENT_STATE_TCP_CMD= 0x2F, - DISCONNECT_CMD = 0x30, - GET_IDX_SSID_CMD = 0x31, - GET_IDX_RSSI_CMD = 0x32, - GET_IDX_ENCT_CMD = 0x33, - REQ_HOST_BY_NAME_CMD= 0x34, - GET_HOST_BY_NAME_CMD= 0x35, - START_SCAN_NETWORKS = 0x36, - GET_FW_VERSION_CMD = 0x37, - - // All command with DATA_FLAG 0x40 send a 16bit Len - - SEND_DATA_TCP_CMD = 0x44, - GET_DATABUF_TCP_CMD = 0x45, -}; - - -enum wl_tcp_state { - CLOSED = 0, - LISTEN = 1, - SYN_SENT = 2, - SYN_RCVD = 3, - ESTABLISHED = 4, - FIN_WAIT_1 = 5, - FIN_WAIT_2 = 6, - CLOSE_WAIT = 7, - CLOSING = 8, - LAST_ACK = 9, - TIME_WAIT = 10 -}; - - -enum numParams{ - PARAM_NUMS_0, - PARAM_NUMS_1, - PARAM_NUMS_2, - PARAM_NUMS_3, - PARAM_NUMS_4, - PARAM_NUMS_5, - MAX_PARAM_NUMS -}; - -#define MAX_PARAMS MAX_PARAM_NUMS-1 -#define PARAM_LEN_SIZE 1 - -typedef struct __attribute__((__packed__)) -{ - uint8_t paramLen; - char* param; -}tParam; - -typedef struct __attribute__((__packed__)) -{ - uint16_t dataLen; - char* data; -}tDataParam; - - -typedef struct __attribute__((__packed__)) -{ - unsigned char cmd; - unsigned char tcmd; - unsigned char nParam; - tParam params[MAX_PARAMS]; -}tSpiMsg; - -typedef struct __attribute__((__packed__)) -{ - unsigned char cmd; - unsigned char tcmd; - unsigned char nParam; - tDataParam params[MAX_PARAMS]; -}tSpiMsgData; - - -typedef struct __attribute__((__packed__)) -{ - unsigned char cmd; - unsigned char tcmd; - //unsigned char totLen; - unsigned char nParam; -}tSpiHdr; - -typedef struct __attribute__((__packed__)) -{ - uint8_t paramLen; - uint32_t param; -}tLongParam; - -typedef struct __attribute__((__packed__)) -{ - uint8_t paramLen; - uint16_t param; -}tIntParam; - -typedef struct __attribute__((__packed__)) -{ - uint8_t paramLen; - uint8_t param; -}tByteParam; - -#endif +#ifndef WiFi_Spi_h +#define WiFi_Spi_h + +#include +#include "utility/wl_definitions.h" + +#define CMD_FLAG 0 +#define REPLY_FLAG 1<<7 +#define DATA_FLAG 0x40 + +#define WIFI_SPI_ACK 1 +#define WIFI_SPI_ERR 0xFF + +#define TIMEOUT_CHAR 1000 + +//#define MAX_SOCK_NUM 4 /**< Maxmium number of socket */ +#define NO_SOCKET_AVAIL 255 + +#define START_CMD 0xE0 +#define END_CMD 0xEE +#define ERR_CMD 0xEF +#define CMD_POS 1 // Position of Command OpCode on SPI stream +#define PARAM_LEN_POS 2 // Position of Param len on SPI stream + + +enum { + SET_NET_CMD = 0x10, + SET_PASSPHRASE_CMD = 0x11, + SET_KEY_CMD = 0x12, + TEST_CMD = 0x13, + SET_IP_CONFIG_CMD = 0x14, + SET_DNS_CONFIG_CMD = 0x15, + + GET_CONN_STATUS_CMD = 0x20, + GET_IPADDR_CMD = 0x21, + GET_MACADDR_CMD = 0x22, + GET_CURR_SSID_CMD = 0x23, + GET_CURR_BSSID_CMD = 0x24, + GET_CURR_RSSI_CMD = 0x25, + GET_CURR_ENCT_CMD = 0x26, + SCAN_NETWORKS = 0x27, + START_SERVER_TCP_CMD= 0x28, + GET_STATE_TCP_CMD = 0x29, + DATA_SENT_TCP_CMD = 0x2A, + AVAIL_DATA_TCP_CMD = 0x2B, + GET_DATA_TCP_CMD = 0x2C, + START_CLIENT_TCP_CMD= 0x2D, + STOP_CLIENT_TCP_CMD = 0x2E, + GET_CLIENT_STATE_TCP_CMD= 0x2F, + DISCONNECT_CMD = 0x30, + GET_IDX_SSID_CMD = 0x31, + GET_IDX_RSSI_CMD = 0x32, + GET_IDX_ENCT_CMD = 0x33, + REQ_HOST_BY_NAME_CMD= 0x34, + GET_HOST_BY_NAME_CMD= 0x35, + START_SCAN_NETWORKS = 0x36, + GET_FW_VERSION_CMD = 0x37, + GET_TEST_CMD = 0x38, + SEND_DATA_UDP_CMD = 0x39, + GET_REMOTE_DATA_CMD = 0x3A, + + // All command with DATA_FLAG 0x40 send a 16bit Len + + SEND_DATA_TCP_CMD = 0x44, + GET_DATABUF_TCP_CMD = 0x45, + INSERT_DATABUF_CMD = 0x46, +}; + + +enum wl_tcp_state { + CLOSED = 0, + LISTEN = 1, + SYN_SENT = 2, + SYN_RCVD = 3, + ESTABLISHED = 4, + FIN_WAIT_1 = 5, + FIN_WAIT_2 = 6, + CLOSE_WAIT = 7, + CLOSING = 8, + LAST_ACK = 9, + TIME_WAIT = 10 +}; + + +enum numParams{ + PARAM_NUMS_0, + PARAM_NUMS_1, + PARAM_NUMS_2, + PARAM_NUMS_3, + PARAM_NUMS_4, + PARAM_NUMS_5, + MAX_PARAM_NUMS +}; + +#define MAX_PARAMS MAX_PARAM_NUMS-1 +#define PARAM_LEN_SIZE 1 + +typedef struct __attribute__((__packed__)) +{ + uint8_t paramLen; + char* param; +}tParam; + +typedef struct __attribute__((__packed__)) +{ + uint16_t dataLen; + char* data; +}tDataParam; + + +typedef struct __attribute__((__packed__)) +{ + unsigned char cmd; + unsigned char tcmd; + unsigned char nParam; + tParam params[MAX_PARAMS]; +}tSpiMsg; + +typedef struct __attribute__((__packed__)) +{ + unsigned char cmd; + unsigned char tcmd; + unsigned char nParam; + tDataParam params[MAX_PARAMS]; +}tSpiMsgData; + + +typedef struct __attribute__((__packed__)) +{ + unsigned char cmd; + unsigned char tcmd; + //unsigned char totLen; + unsigned char nParam; +}tSpiHdr; + +typedef struct __attribute__((__packed__)) +{ + uint8_t paramLen; + uint32_t param; +}tLongParam; + +typedef struct __attribute__((__packed__)) +{ + uint8_t paramLen; + uint16_t param; +}tIntParam; + +typedef struct __attribute__((__packed__)) +{ + uint8_t paramLen; + uint8_t param; +}tByteParam; + +#endif diff --git a/hardware/arduino/avr/libraries/WiFi/examples/ConnectNoEncryption/ConnectNoEncryption.ino b/libraries/WiFi/examples/ConnectNoEncryption/ConnectNoEncryption.ino similarity index 100% rename from hardware/arduino/avr/libraries/WiFi/examples/ConnectNoEncryption/ConnectNoEncryption.ino rename to libraries/WiFi/examples/ConnectNoEncryption/ConnectNoEncryption.ino diff --git a/hardware/arduino/avr/libraries/WiFi/examples/ConnectWithWEP/ConnectWithWEP.ino b/libraries/WiFi/examples/ConnectWithWEP/ConnectWithWEP.ino similarity index 100% rename from hardware/arduino/avr/libraries/WiFi/examples/ConnectWithWEP/ConnectWithWEP.ino rename to libraries/WiFi/examples/ConnectWithWEP/ConnectWithWEP.ino diff --git a/hardware/arduino/avr/libraries/WiFi/examples/ConnectWithWPA/ConnectWithWPA.ino b/libraries/WiFi/examples/ConnectWithWPA/ConnectWithWPA.ino similarity index 100% rename from hardware/arduino/avr/libraries/WiFi/examples/ConnectWithWPA/ConnectWithWPA.ino rename to libraries/WiFi/examples/ConnectWithWPA/ConnectWithWPA.ino diff --git a/hardware/arduino/avr/libraries/WiFi/examples/ScanNetworks/ScanNetworks.ino b/libraries/WiFi/examples/ScanNetworks/ScanNetworks.ino similarity index 100% rename from hardware/arduino/avr/libraries/WiFi/examples/ScanNetworks/ScanNetworks.ino rename to libraries/WiFi/examples/ScanNetworks/ScanNetworks.ino diff --git a/hardware/arduino/avr/libraries/WiFi/examples/SimpleWebServerWiFi/SimpleWebServerWiFi.ino b/libraries/WiFi/examples/SimpleWebServerWiFi/SimpleWebServerWiFi.ino similarity index 100% rename from hardware/arduino/avr/libraries/WiFi/examples/SimpleWebServerWiFi/SimpleWebServerWiFi.ino rename to libraries/WiFi/examples/SimpleWebServerWiFi/SimpleWebServerWiFi.ino diff --git a/hardware/arduino/avr/libraries/WiFi/examples/WiFiChatServer/WiFiChatServer.ino b/libraries/WiFi/examples/WiFiChatServer/WiFiChatServer.ino similarity index 100% rename from hardware/arduino/avr/libraries/WiFi/examples/WiFiChatServer/WiFiChatServer.ino rename to libraries/WiFi/examples/WiFiChatServer/WiFiChatServer.ino diff --git a/hardware/arduino/avr/libraries/WiFi/examples/WiFiPachubeClient/WiFiPachubeClient.ino b/libraries/WiFi/examples/WiFiPachubeClient/WiFiPachubeClient.ino similarity index 100% rename from hardware/arduino/avr/libraries/WiFi/examples/WiFiPachubeClient/WiFiPachubeClient.ino rename to libraries/WiFi/examples/WiFiPachubeClient/WiFiPachubeClient.ino diff --git a/hardware/arduino/avr/libraries/WiFi/examples/WiFiPachubeClientString/WiFiPachubeClientString.ino b/libraries/WiFi/examples/WiFiPachubeClientString/WiFiPachubeClientString.ino similarity index 100% rename from hardware/arduino/avr/libraries/WiFi/examples/WiFiPachubeClientString/WiFiPachubeClientString.ino rename to libraries/WiFi/examples/WiFiPachubeClientString/WiFiPachubeClientString.ino diff --git a/hardware/arduino/avr/libraries/WiFi/examples/WiFiUdpNtpClient/WiFiUdpNtpClient.ino b/libraries/WiFi/examples/WiFiUdpNtpClient/WiFiUdpNtpClient.ino similarity index 100% rename from hardware/arduino/avr/libraries/WiFi/examples/WiFiUdpNtpClient/WiFiUdpNtpClient.ino rename to libraries/WiFi/examples/WiFiUdpNtpClient/WiFiUdpNtpClient.ino diff --git a/hardware/arduino/avr/libraries/WiFi/examples/WiFiUdpSendReceiveString/WiFiUdpSendReceiveString.ino b/libraries/WiFi/examples/WiFiUdpSendReceiveString/WiFiUdpSendReceiveString.ino similarity index 100% rename from hardware/arduino/avr/libraries/WiFi/examples/WiFiUdpSendReceiveString/WiFiUdpSendReceiveString.ino rename to libraries/WiFi/examples/WiFiUdpSendReceiveString/WiFiUdpSendReceiveString.ino diff --git a/hardware/arduino/avr/libraries/WiFi/examples/WiFiWebClient/WiFiWebClient.ino b/libraries/WiFi/examples/WiFiWebClient/WiFiWebClient.ino similarity index 100% rename from hardware/arduino/avr/libraries/WiFi/examples/WiFiWebClient/WiFiWebClient.ino rename to libraries/WiFi/examples/WiFiWebClient/WiFiWebClient.ino diff --git a/hardware/arduino/avr/libraries/WiFi/examples/WiFiWebClientRepeating/WiFiWebClientRepeating.ino b/libraries/WiFi/examples/WiFiWebClientRepeating/WiFiWebClientRepeating.ino similarity index 100% rename from hardware/arduino/avr/libraries/WiFi/examples/WiFiWebClientRepeating/WiFiWebClientRepeating.ino rename to libraries/WiFi/examples/WiFiWebClientRepeating/WiFiWebClientRepeating.ino diff --git a/hardware/arduino/avr/libraries/WiFi/examples/WiFiWebServer/WiFiWebServer.ino b/libraries/WiFi/examples/WiFiWebServer/WiFiWebServer.ino similarity index 100% rename from hardware/arduino/avr/libraries/WiFi/examples/WiFiWebServer/WiFiWebServer.ino rename to libraries/WiFi/examples/WiFiWebServer/WiFiWebServer.ino diff --git a/libraries/WiFi/extras/binary/wifiHD.elf b/libraries/WiFi/extras/binary/wifiHD.elf new file mode 100644 index 000000000..d4a8bde55 Binary files /dev/null and b/libraries/WiFi/extras/binary/wifiHD.elf differ diff --git a/libraries/WiFi/extras/binary/wifiHD.hex b/libraries/WiFi/extras/binary/wifiHD.hex new file mode 100644 index 000000000..0122587ff --- /dev/null +++ b/libraries/WiFi/extras/binary/wifiHD.hex @@ -0,0 +1,16358 @@ +:0200000480007A +:10000000E08F100000000000000000000000000071 +:1000100000000000000000000000000000000000E0 +:1000200000000000000000000000000000000000D0 +:1000300000000000000000000000000000000000C0 +:1000400000000000000000000000000000000000B0 +:1000500000000000000000000000000000000000A0 +:100060000000000000000000000000000000000090 +:100070000000000000000000000000000000000080 +:100080000000000000000000000000000000000070 +:100090000000000000000000000000000000000060 +:1000A0000000000000000000000000000000000050 +:1000B0000000000000000000000000000000000040 +:1000C0000000000000000000000000000000000030 +:1000D0000000000000000000000000000000000020 +:1000E0000000000000000000000000000000000010 +:1000F0000000000000000000000000000000000000 +:1001000000000000000000000000000000000000EF +:1001100000000000000000000000000000000000DF +:1001200000000000000000000000000000000000CF +:1001300000000000000000000000000000000000BF +:1001400000000000000000000000000000000000AF +:10015000000000000000000000000000000000009F +:10016000000000000000000000000000000000008F +:10017000000000000000000000000000000000007F +:10018000000000000000000000000000000000006F +:10019000000000000000000000000000000000005F +:1001A000000000000000000000000000000000004F +:1001B000000000000000000000000000000000003F +:1001C000000000000000000000000000000000002F +:1001D000000000000000000000000000000000001F +:1001E000000000000000000000000000000000000F +:1001F00000000000000000000000000000000000FF +:1002000000000000000000000000000000000000EE +:1002100000000000000000000000000000000000DE +:1002200000000000000000000000000000000000CE +:1002300000000000000000000000000000000000BE +:1002400000000000000000000000000000000000AE +:10025000000000000000000000000000000000009E +:10026000000000000000000000000000000000008E +:10027000000000000000000000000000000000007E +:10028000000000000000000000000000000000006E +:10029000000000000000000000000000000000005E +:1002A000000000000000000000000000000000004E +:1002B000000000000000000000000000000000003E +:1002C000000000000000000000000000000000002E +:1002D000000000000000000000000000000000001E +:1002E000000000000000000000000000000000000E +:1002F00000000000000000000000000000000000FE +:1003000000000000000000000000000000000000ED +:1003100000000000000000000000000000000000DD +:1003200000000000000000000000000000000000CD +:1003300000000000000000000000000000000000BD +:1003400000000000000000000000000000000000AD +:10035000000000000000000000000000000000009D +:10036000000000000000000000000000000000008D +:10037000000000000000000000000000000000007D +:10038000000000000000000000000000000000006D +:10039000000000000000000000000000000000005D +:1003A000000000000000000000000000000000004D +:1003B000000000000000000000000000000000003D +:1003C000000000000000000000000000000000002D +:1003D000000000000000000000000000000000001D +:1003E000000000000000000000000000000000000D +:1003F00000000000000000000000000000000000FD +:1004000000000000000000000000000000000000EC +:1004100000000000000000000000000000000000DC +:1004200000000000000000000000000000000000CC +:1004300000000000000000000000000000000000BC +:1004400000000000000000000000000000000000AC +:10045000000000000000000000000000000000009C +:10046000000000000000000000000000000000008C +:10047000000000000000000000000000000000007C +:10048000000000000000000000000000000000006C +:10049000000000000000000000000000000000005C +:1004A000000000000000000000000000000000004C +:1004B000000000000000000000000000000000003C +:1004C000000000000000000000000000000000002C +:1004D000000000000000000000000000000000001C +:1004E000000000000000000000000000000000000C +:1004F00000000000000000000000000000000000FC +:1005000000000000000000000000000000000000EB +:1005100000000000000000000000000000000000DB +:1005200000000000000000000000000000000000CB +:1005300000000000000000000000000000000000BB +:1005400000000000000000000000000000000000AB +:10055000000000000000000000000000000000009B +:10056000000000000000000000000000000000008B +:10057000000000000000000000000000000000007B +:10058000000000000000000000000000000000006B +:10059000000000000000000000000000000000005B +:1005A000000000000000000000000000000000004B +:1005B000000000000000000000000000000000003B +:1005C000000000000000000000000000000000002B +:1005D000000000000000000000000000000000001B +:1005E000000000000000000000000000000000000B +:1005F00000000000000000000000000000000000FB +:1006000000000000000000000000000000000000EA +:1006100000000000000000000000000000000000DA +:1006200000000000000000000000000000000000CA +:1006300000000000000000000000000000000000BA +:1006400000000000000000000000000000000000AA +:10065000000000000000000000000000000000009A +:10066000000000000000000000000000000000008A +:10067000000000000000000000000000000000007A +:10068000000000000000000000000000000000006A +:10069000000000000000000000000000000000005A +:1006A000000000000000000000000000000000004A +:1006B000000000000000000000000000000000003A +:1006C000000000000000000000000000000000002A +:1006D000000000000000000000000000000000001A +:1006E000000000000000000000000000000000000A +:1006F00000000000000000000000000000000000FA +:1007000000000000000000000000000000000000E9 +:1007100000000000000000000000000000000000D9 +:1007200000000000000000000000000000000000C9 +:1007300000000000000000000000000000000000B9 +:1007400000000000000000000000000000000000A9 +:100750000000000000000000000000000000000099 +:100760000000000000000000000000000000000089 +:100770000000000000000000000000000000000079 +:100780000000000000000000000000000000000069 +:100790000000000000000000000000000000000059 +:1007A0000000000000000000000000000000000049 +:1007B0000000000000000000000000000000000039 +:1007C0000000000000000000000000000000000029 +:1007D0000000000000000000000000000000000019 +:1007E0000000000000000000000000000000000009 +:1007F00000000000000000000000000000000000F9 +:1008000000000000000000000000000000000000E8 +:1008100000000000000000000000000000000000D8 +:1008200000000000000000000000000000000000C8 +:1008300000000000000000000000000000000000B8 +:1008400000000000000000000000000000000000A8 +:100850000000000000000000000000000000000098 +:100860000000000000000000000000000000000088 +:100870000000000000000000000000000000000078 +:100880000000000000000000000000000000000068 +:100890000000000000000000000000000000000058 +:1008A0000000000000000000000000000000000048 +:1008B0000000000000000000000000000000000038 +:1008C0000000000000000000000000000000000028 +:1008D0000000000000000000000000000000000018 +:1008E0000000000000000000000000000000000008 +:1008F00000000000000000000000000000000000F8 +:1009000000000000000000000000000000000000E7 +:1009100000000000000000000000000000000000D7 +:1009200000000000000000000000000000000000C7 +:1009300000000000000000000000000000000000B7 +:1009400000000000000000000000000000000000A7 +:100950000000000000000000000000000000000097 +:100960000000000000000000000000000000000087 +:100970000000000000000000000000000000000077 +:100980000000000000000000000000000000000067 +:100990000000000000000000000000000000000057 +:1009A0000000000000000000000000000000000047 +:1009B0000000000000000000000000000000000037 +:1009C0000000000000000000000000000000000027 +:1009D0000000000000000000000000000000000017 +:1009E0000000000000000000000000000000000007 +:1009F00000000000000000000000000000000000F7 +:100A000000000000000000000000000000000000E6 +:100A100000000000000000000000000000000000D6 +:100A200000000000000000000000000000000000C6 +:100A300000000000000000000000000000000000B6 +:100A400000000000000000000000000000000000A6 +:100A50000000000000000000000000000000000096 +:100A60000000000000000000000000000000000086 +:100A70000000000000000000000000000000000076 +:100A80000000000000000000000000000000000066 +:100A90000000000000000000000000000000000056 +:100AA0000000000000000000000000000000000046 +:100AB0000000000000000000000000000000000036 +:100AC0000000000000000000000000000000000026 +:100AD0000000000000000000000000000000000016 +:100AE0000000000000000000000000000000000006 +:100AF00000000000000000000000000000000000F6 +:100B000000000000000000000000000000000000E5 +:100B100000000000000000000000000000000000D5 +:100B200000000000000000000000000000000000C5 +:100B300000000000000000000000000000000000B5 +:100B400000000000000000000000000000000000A5 +:100B50000000000000000000000000000000000095 +:100B60000000000000000000000000000000000085 +:100B70000000000000000000000000000000000075 +:100B80000000000000000000000000000000000065 +:100B90000000000000000000000000000000000055 +:100BA0000000000000000000000000000000000045 +:100BB0000000000000000000000000000000000035 +:100BC0000000000000000000000000000000000025 +:100BD0000000000000000000000000000000000015 +:100BE0000000000000000000000000000000000005 +:100BF00000000000000000000000000000000000F5 +:100C000000000000000000000000000000000000E4 +:100C100000000000000000000000000000000000D4 +:100C200000000000000000000000000000000000C4 +:100C300000000000000000000000000000000000B4 +:100C400000000000000000000000000000000000A4 +:100C50000000000000000000000000000000000094 +:100C60000000000000000000000000000000000084 +:100C70000000000000000000000000000000000074 +:100C80000000000000000000000000000000000064 +:100C90000000000000000000000000000000000054 +:100CA0000000000000000000000000000000000044 +:100CB0000000000000000000000000000000000034 +:100CC0000000000000000000000000000000000024 +:100CD0000000000000000000000000000000000014 +:100CE0000000000000000000000000000000000004 +:100CF00000000000000000000000000000000000F4 +:100D000000000000000000000000000000000000E3 +:100D100000000000000000000000000000000000D3 +:100D200000000000000000000000000000000000C3 +:100D300000000000000000000000000000000000B3 +:100D400000000000000000000000000000000000A3 +:100D50000000000000000000000000000000000093 +:100D60000000000000000000000000000000000083 +:100D70000000000000000000000000000000000073 +:100D80000000000000000000000000000000000063 +:100D90000000000000000000000000000000000053 +:100DA0000000000000000000000000000000000043 +:100DB0000000000000000000000000000000000033 +:100DC0000000000000000000000000000000000023 +:100DD0000000000000000000000000000000000013 +:100DE0000000000000000000000000000000000003 +:100DF00000000000000000000000000000000000F3 +:100E000000000000000000000000000000000000E2 +:100E100000000000000000000000000000000000D2 +:100E200000000000000000000000000000000000C2 +:100E300000000000000000000000000000000000B2 +:100E400000000000000000000000000000000000A2 +:100E50000000000000000000000000000000000092 +:100E60000000000000000000000000000000000082 +:100E70000000000000000000000000000000000072 +:100E80000000000000000000000000000000000062 +:100E90000000000000000000000000000000000052 +:100EA0000000000000000000000000000000000042 +:100EB0000000000000000000000000000000000032 +:100EC0000000000000000000000000000000000022 +:100ED0000000000000000000000000000000000012 +:100EE0000000000000000000000000000000000002 +:100EF00000000000000000000000000000000000F2 +:100F000000000000000000000000000000000000E1 +:100F100000000000000000000000000000000000D1 +:100F200000000000000000000000000000000000C1 +:100F300000000000000000000000000000000000B1 +:100F400000000000000000000000000000000000A1 +:100F50000000000000000000000000000000000091 +:100F60000000000000000000000000000000000081 +:100F70000000000000000000000000000000000071 +:100F80000000000000000000000000000000000061 +:100F90000000000000000000000000000000000051 +:100FA0000000000000000000000000000000000041 +:100FB0000000000000000000000000000000000031 +:100FC0000000000000000000000000000000000021 +:100FD0000000000000000000000000000000000011 +:100FE0000000000000000000000000000000000001 +:100FF00000000000000000000000000000000000F1 +:1010000000000000000000000000000000000000E0 +:1010100000000000000000000000000000000000D0 +:1010200000000000000000000000000000000000C0 +:1010300000000000000000000000000000000000B0 +:1010400000000000000000000000000000000000A0 +:101050000000000000000000000000000000000090 +:101060000000000000000000000000000000000080 +:101070000000000000000000000000000000000070 +:101080000000000000000000000000000000000060 +:101090000000000000000000000000000000000050 +:1010A0000000000000000000000000000000000040 +:1010B0000000000000000000000000000000000030 +:1010C0000000000000000000000000000000000020 +:1010D0000000000000000000000000000000000010 +:1010E0000000000000000000000000000000000000 +:1010F00000000000000000000000000000000000F0 +:1011000000000000000000000000000000000000DF +:1011100000000000000000000000000000000000CF +:1011200000000000000000000000000000000000BF +:1011300000000000000000000000000000000000AF +:10114000000000000000000000000000000000009F +:10115000000000000000000000000000000000008F +:10116000000000000000000000000000000000007F +:10117000000000000000000000000000000000006F +:10118000000000000000000000000000000000005F +:10119000000000000000000000000000000000004F +:1011A000000000000000000000000000000000003F +:1011B000000000000000000000000000000000002F +:1011C000000000000000000000000000000000001F +:1011D000000000000000000000000000000000000F +:1011E00000000000000000000000000000000000FF +:1011F00000000000000000000000000000000000EF +:1012000000000000000000000000000000000000DE +:1012100000000000000000000000000000000000CE +:1012200000000000000000000000000000000000BE +:1012300000000000000000000000000000000000AE +:10124000000000000000000000000000000000009E +:10125000000000000000000000000000000000008E +:10126000000000000000000000000000000000007E +:10127000000000000000000000000000000000006E +:10128000000000000000000000000000000000005E +:10129000000000000000000000000000000000004E +:1012A000000000000000000000000000000000003E +:1012B000000000000000000000000000000000002E +:1012C000000000000000000000000000000000001E +:1012D000000000000000000000000000000000000E +:1012E00000000000000000000000000000000000FE +:1012F00000000000000000000000000000000000EE +:1013000000000000000000000000000000000000DD +:1013100000000000000000000000000000000000CD +:1013200000000000000000000000000000000000BD +:1013300000000000000000000000000000000000AD +:10134000000000000000000000000000000000009D +:10135000000000000000000000000000000000008D +:10136000000000000000000000000000000000007D +:10137000000000000000000000000000000000006D +:10138000000000000000000000000000000000005D +:10139000000000000000000000000000000000004D +:1013A000000000000000000000000000000000003D +:1013B000000000000000000000000000000000002D +:1013C000000000000000000000000000000000001D +:1013D000000000000000000000000000000000000D +:1013E00000000000000000000000000000000000FD +:1013F00000000000000000000000000000000000ED +:1014000000000000000000000000000000000000DC +:1014100000000000000000000000000000000000CC +:1014200000000000000000000000000000000000BC +:1014300000000000000000000000000000000000AC +:10144000000000000000000000000000000000009C +:10145000000000000000000000000000000000008C +:10146000000000000000000000000000000000007C +:10147000000000000000000000000000000000006C +:10148000000000000000000000000000000000005C +:10149000000000000000000000000000000000004C +:1014A000000000000000000000000000000000003C +:1014B000000000000000000000000000000000002C +:1014C000000000000000000000000000000000001C +:1014D000000000000000000000000000000000000C +:1014E00000000000000000000000000000000000FC +:1014F00000000000000000000000000000000000EC +:1015000000000000000000000000000000000000DB +:1015100000000000000000000000000000000000CB +:1015200000000000000000000000000000000000BB +:1015300000000000000000000000000000000000AB +:10154000000000000000000000000000000000009B +:10155000000000000000000000000000000000008B +:10156000000000000000000000000000000000007B +:10157000000000000000000000000000000000006B +:10158000000000000000000000000000000000005B +:10159000000000000000000000000000000000004B +:1015A000000000000000000000000000000000003B +:1015B000000000000000000000000000000000002B +:1015C000000000000000000000000000000000001B +:1015D000000000000000000000000000000000000B +:1015E00000000000000000000000000000000000FB +:1015F00000000000000000000000000000000000EB +:1016000000000000000000000000000000000000DA +:1016100000000000000000000000000000000000CA +:1016200000000000000000000000000000000000BA +:1016300000000000000000000000000000000000AA +:10164000000000000000000000000000000000009A +:10165000000000000000000000000000000000008A +:10166000000000000000000000000000000000007A +:10167000000000000000000000000000000000006A +:10168000000000000000000000000000000000005A +:10169000000000000000000000000000000000004A +:1016A000000000000000000000000000000000003A +:1016B000000000000000000000000000000000002A +:1016C000000000000000000000000000000000001A +:1016D000000000000000000000000000000000000A +:1016E00000000000000000000000000000000000FA +:1016F00000000000000000000000000000000000EA +:1017000000000000000000000000000000000000D9 +:1017100000000000000000000000000000000000C9 +:1017200000000000000000000000000000000000B9 +:1017300000000000000000000000000000000000A9 +:101740000000000000000000000000000000000099 +:101750000000000000000000000000000000000089 +:101760000000000000000000000000000000000079 +:101770000000000000000000000000000000000069 +:101780000000000000000000000000000000000059 +:101790000000000000000000000000000000000049 +:1017A0000000000000000000000000000000000039 +:1017B0000000000000000000000000000000000029 +:1017C0000000000000000000000000000000000019 +:1017D0000000000000000000000000000000000009 +:1017E00000000000000000000000000000000000F9 +:1017F00000000000000000000000000000000000E9 +:1018000000000000000000000000000000000000D8 +:1018100000000000000000000000000000000000C8 +:1018200000000000000000000000000000000000B8 +:1018300000000000000000000000000000000000A8 +:101840000000000000000000000000000000000098 +:101850000000000000000000000000000000000088 +:101860000000000000000000000000000000000078 +:101870000000000000000000000000000000000068 +:101880000000000000000000000000000000000058 +:101890000000000000000000000000000000000048 +:1018A0000000000000000000000000000000000038 +:1018B0000000000000000000000000000000000028 +:1018C0000000000000000000000000000000000018 +:1018D0000000000000000000000000000000000008 +:1018E00000000000000000000000000000000000F8 +:1018F00000000000000000000000000000000000E8 +:1019000000000000000000000000000000000000D7 +:1019100000000000000000000000000000000000C7 +:1019200000000000000000000000000000000000B7 +:1019300000000000000000000000000000000000A7 +:101940000000000000000000000000000000000097 +:101950000000000000000000000000000000000087 +:101960000000000000000000000000000000000077 +:101970000000000000000000000000000000000067 +:101980000000000000000000000000000000000057 +:101990000000000000000000000000000000000047 +:1019A0000000000000000000000000000000000037 +:1019B0000000000000000000000000000000000027 +:1019C0000000000000000000000000000000000017 +:1019D0000000000000000000000000000000000007 +:1019E00000000000000000000000000000000000F7 +:1019F00000000000000000000000000000000000E7 +:101A000000000000000000000000000000000000D6 +:101A100000000000000000000000000000000000C6 +:101A200000000000000000000000000000000000B6 +:101A300000000000000000000000000000000000A6 +:101A40000000000000000000000000000000000096 +:101A50000000000000000000000000000000000086 +:101A60000000000000000000000000000000000076 +:101A70000000000000000000000000000000000066 +:101A80000000000000000000000000000000000056 +:101A90000000000000000000000000000000000046 +:101AA0000000000000000000000000000000000036 +:101AB0000000000000000000000000000000000026 +:101AC0000000000000000000000000000000000016 +:101AD0000000000000000000000000000000000006 +:101AE00000000000000000000000000000000000F6 +:101AF00000000000000000000000000000000000E6 +:101B000000000000000000000000000000000000D5 +:101B100000000000000000000000000000000000C5 +:101B200000000000000000000000000000000000B5 +:101B300000000000000000000000000000000000A5 +:101B40000000000000000000000000000000000095 +:101B50000000000000000000000000000000000085 +:101B60000000000000000000000000000000000075 +:101B70000000000000000000000000000000000065 +:101B80000000000000000000000000000000000055 +:101B90000000000000000000000000000000000045 +:101BA0000000000000000000000000000000000035 +:101BB0000000000000000000000000000000000025 +:101BC0000000000000000000000000000000000015 +:101BD0000000000000000000000000000000000005 +:101BE00000000000000000000000000000000000F5 +:101BF00000000000000000000000000000000000E5 +:101C000000000000000000000000000000000000D4 +:101C100000000000000000000000000000000000C4 +:101C200000000000000000000000000000000000B4 +:101C300000000000000000000000000000000000A4 +:101C40000000000000000000000000000000000094 +:101C50000000000000000000000000000000000084 +:101C60000000000000000000000000000000000074 +:101C70000000000000000000000000000000000064 +:101C80000000000000000000000000000000000054 +:101C90000000000000000000000000000000000044 +:101CA0000000000000000000000000000000000034 +:101CB0000000000000000000000000000000000024 +:101CC0000000000000000000000000000000000014 +:101CD0000000000000000000000000000000000004 +:101CE00000000000000000000000000000000000F4 +:101CF00000000000000000000000000000000000E4 +:101D000000000000000000000000000000000000D3 +:101D100000000000000000000000000000000000C3 +:101D200000000000000000000000000000000000B3 +:101D300000000000000000000000000000000000A3 +:101D40000000000000000000000000000000000093 +:101D50000000000000000000000000000000000083 +:101D60000000000000000000000000000000000073 +:101D70000000000000000000000000000000000063 +:101D80000000000000000000000000000000000053 +:101D90000000000000000000000000000000000043 +:101DA0000000000000000000000000000000000033 +:101DB0000000000000000000000000000000000023 +:101DC0000000000000000000000000000000000013 +:101DD0000000000000000000000000000000000003 +:101DE00000000000000000000000000000000000F3 +:101DF00000000000000000000000000000000000E3 +:101E000000000000000000000000000000000000D2 +:101E100000000000000000000000000000000000C2 +:101E200000000000000000000000000000000000B2 +:101E300000000000000000000000000000000000A2 +:101E40000000000000000000000000000000000092 +:101E50000000000000000000000000000000000082 +:101E60000000000000000000000000000000000072 +:101E70000000000000000000000000000000000062 +:101E80000000000000000000000000000000000052 +:101E90000000000000000000000000000000000042 +:101EA0000000000000000000000000000000000032 +:101EB0000000000000000000000000000000000022 +:101EC0000000000000000000000000000000000012 +:101ED0000000000000000000000000000000000002 +:101EE00000000000000000000000000000000000F2 +:101EF00000000000000000000000000000000000E2 +:101F000000000000000000000000000000000000D1 +:101F100000000000000000000000000000000000C1 +:101F200000000000000000000000000000000000B1 +:101F300000000000000000000000000000000000A1 +:101F40000000000000000000000000000000000091 +:101F50000000000000000000000000000000000081 +:101F60000000000000000000000000000000000071 +:101F70000000000000000000000000000000000061 +:101F80000000000000000000000000000000000051 +:101F90000000000000000000000000000000000041 +:101FA0000000000000000000000000000000000031 +:101FB0000000000000000000000000000000000021 +:101FC0000000000000000000000000000000000011 +:101FD0000000000000000000000000000000000001 +:101FE00000000000000000000000000000000000F1 +:101FF00000000000000000000000000000000000E1 +:08200000481F000080013E04AE +:102008003038F00C19005EBC5C7C4848F00C003994 +:10201800F00C093BB22A5EFC000011C0F80815015B +:102028003039F20C1800E08800035EFDF00B000B5D +:102038004828F00B032C5EFC00007B08580CC0D02D +:1020480048787829F00900293008720A143CC060E1 +:102058002FF82F895848CFA13FF85EF800007B0879 +:102068003038F00C18005EBCF60C001C30094838FB +:10207800F00C09295EFC000000007B085EFFD70316 +:10208800D4011988301EB6881998B6BEEA18FFFF21 +:10209800E818FF80B6AEB698580AC0301588C0A8B0 +:1020A80048981188F4081800C0303038C03848788B +:1020B80011B8B6C83EE8B6D83008B6E8302C306853 +:1020C800B208D802000016AB00000008D40130188E +:1020D800198EB68E199CB6A8EA1CFFFFE81CFF8073 +:1020E800B6B8B69C580AC0A0158CE06A00FFF00C80 +:1020F8001800F4081710F9B80001B6C83EE8B6D8B9 +:102108003008B6E8302C3068B208D802D421202D27 +:102118004AAA189E1698129674075807C071FACAE8 +:10212800FFF814F7F01F0026C4681989B6891999B1 +:10213800EA19FFFFE819FF80B6993039B0A9740988 +:102148007219F20C1618B0F9B0CCF9D9C108F3D944 +:10215800C208B0ECB0D9304BB0BB74097229F20C8C +:102168001618F169000CF16C0009F9D9C108F3D906 +:10217800C208F16C000BF16B0008F169000A7409E0 +:10218800300A7239F16A00133EEAF16A0012F20A63 +:102198001618F1690011F16A000EF16B000DF5D9FE +:1021A800C108F3D9C208F16A0010F169000F302C98 +:1021B8003138AC082FEDD8220000152C800020D42F +:1021C8003038F00C18005EBCF60C001B48F8F00B19 +:1021D800032858085E0C704958195E1C7029581954 +:1021E800C09148B8F00C003C9828B42878089508A5 +:1021F8005EFC71E85808F0091700F1F91001F1F8D0 +:10220800120A9509B4285EFC00007B08000011C082 +:10221800D4314BC8300A10941499910A1893301A83 +:102228004B984BA7910A3EE14B921296C0280A9907 +:10223800E0682710C0485808C5602018664AE21AA6 +:102248000201E04A0201CF81C4F8F2C5FFFFE20AA9 +:102258001800CEE10F9BF7DBC0C15825E0890005C7 +:102268003038300AC2E80FAA3038C148580BC0A02D +:10227800EE08070EEE08000CA96E2FE8199C1C0842 +:10228800C058F0CCFFFFEE080708201AF80800082D +:102298005C5A10395F9CEC0A18005F9EFDEC000C3C +:1022A800EC0C1800CE4110395F09F9DAC008EC0CC3 +:1022B80018005F0CF9E90009EC091800C020D83AA9 +:1022C800840C3009F20C1900CB34201D5C6A1ADB2F +:1022D8001AD849081ADA490C1AD51AD8F01F000F6B +:1022E8002FADCA6BDA3A662A68085C5A2FF8EE09ED +:1022F8000B0A8908E0480063FE9AFFA9305CD832CF +:10230800000014B0000011B8000014B8000016A2B4 +:102318008003792C80037AB0800094C4D431202DB6 +:102328004C68149570081896169712945808C0713E +:10233800FACAFFF814F8F01F0042CC38198830198F +:10234800B6881998B6A9EA18FFFFE818FF80B6986A +:102358004BC89088EDB80002C171189330023EE175 +:102368000788201D4B8C1AD8F01F00382FF22FED4C +:102378000788E2081800C0502FF3E0420400CF118C +:102388004B3CF01F00320DC83099F2081800E08865 +:1023980000114B09920A3009F20A1900E0840091F1 +:1023A8001AD84AD84ADC1AD8F01F00282FEDC88856 +:1023B800E0450032C290A3684A99E0450033C5D091 +:1023C800129B7209F2080309EECAFFFCF3360020DB +:1023D8003009AEB6C088760CF808030CF809070C6B +:1023E8002FF914CCEC091900CF7349A99289EDB9DA +:1023F8000004C5F149A97209F2080308499C1AD8D2 +:1024080049581AD8C538304BA368495A7409F20894 +:10241800030972C9AEBBF20B1618AEC9AEFBF7D9E9 +:10242800C108F3D9C208AEDBAEE948A99289EDB973 +:102438000004C1903046C3D80000152C800020D479 +:10244800000016A080037AF0800094C4800384D42E +:10245800000016A28003785880037AF8000015203F +:1024680080037B187409F208030870C8496C1AD8ED +:10247800304649681AD8C1A8301AAEBA720AF408A8 +:10248800030AF53A0038AECA491A948AEDBA00042C +:10249800C0303016C0E87209F2080308F138003875 +:1024A80048CC1AD8301648981AD8F01F000B2FEDD0 +:1024B8003EE80C07AEC83008AED82FB6A806302CB8 +:1024C8002FEDD83280037B2880037858000016A2AD +:1024D80080037B38800094C4D421204D4A981897F3 +:1024E800118A580AC0313FF6C0D84A7811BC118EFB +:1024F800119611A8B166EDEE1186EDE81086F9E6A1 +:1025080010064A289088EDB80002C0E14A08201D4C +:102518004A0C1ADA1AD61AD8505B5049F01F001E16 +:102528002FCD4009401B49D870085808C081FACA05 +:10253800FFF00E9C14F8F01F001AC2080F88B68826 +:102548000F98EA18FFFFE818FF80B6983018B6A869 +:102558003048B6B8F1D6C108B6E83EE8EC0A161815 +:10256800B6F6F7680008B6CA3008EDD6C208F768AC +:102578000009B6D63098302CB2082FCDD8220000EA +:102588000000152800007B28000016A28003782090 +:1025980080037B48800094C40000152C800020D460 +:1025A800D401580BC0313FF8C0C8178A17B917981B +:1025B800B168F1EA118817AAF1EA1088F3E810085F +:1025C800F00A161848E9B28AF5D8C208B2B8B29A21 +:1025D800F5D8C108B2AA48B99289EDB90002C0A1DC +:1025E800201D1AD848881ADC488C1AD8F01F000811 +:1025F8002FCD30194878B089D802000000007B2818 +:10260800000016A28003799C80037B74800094C428 +:1026180000001528D431204D4AE8189570081697FF +:1026280012965808C071FACAFFF014F8F01F002A71 +:10263800C4D84AA89088EDB80002C1711894300334 +:102648003EE20988201D4A6C1AD8F01F00262FF395 +:102658002FED0988E4081800C0502FF4E043040067 +:10266800CF114A1CF01F001F0B880BCCAE880B98AB +:10267800EA18FFFFE818FF80AE983004BA445014F7 +:102688003025FACAFFFCAEA5301BF01F0018304AEF +:10269800EF64000CEF6500084018F0091618AEF852 +:1026A800AEC99A49AEBAF5D8C108F1D8C208EF69DF +:1026B800000AAED8AEEA3EE8F3D9C108EF68000BCD +:1026C800EF69000930C8302CAC082FCDD832000093 +:1026D8000000152C800020D4000016A080037AF09A +:1026E800800094C4800384D4800021C8D40148A801 +:1026F8009088EDB80002C0E148887008201D1AD8FB +:10270800487811881AD84878487C1AD8F01F0007EA +:102718002FCDDA0A000016A200000008000016AB50 +:10272800800379E480037BA8800094C4D42148E620 +:10273800189E30076C0C580CC0A02FF72EC6E04727 +:102748000024CF91489CF01F000ADC2A4866EE0757 +:102758000027EC070027EF680010AECE8F0B8F2AFA +:102768008F39D822000011E080037BC4800094C414 +:10277800D4214C8618970C9A302830094C6B310CB0 +:10278800F01F00460C9A302830094C5B311CF01FB2 +:1027980000430C9A302830094C2B312CF01F003F95 +:1027A8000E990C9A30284C0B314CF01F003C0E99B6 +:1027B8000C9A30284BDB315CF01F00383018300998 +:1027C8004BBA4BCB320CF01F003530184BA73009F1 +:1027D8000E9B4BAA321CF01F00310E9B301830099B +:1027E8004B7A322CF01F002D4B6532390A9A0E9B1A +:1027F8003018129CF01F002932490A9A0E9B301893 +:10280800129CF01F002632590A9A0E9B3018129C0F +:10281800F01F00220A9A32690E9B3018129CF01F92 +:10282800001F0C9A302830094A7B336CF01F001BBC +:102838000E9B301830094A5A327CF01F00180C9A47 +:10284800302830094A2B330CF01F00144A1533394D +:102858000A9A0E9B3018129CF01F001033190A9A1E +:102868000E9B3018129CF01F000D0A9A33290E9BFC +:102878003018129CF01F00090C9A30283009496B57 +:10288800334CF01F00060E9B30183009493AC278C5 +:10289800800020D48000427C8000273480004118CA +:1028A8008000433080003FD080003EA88000208810 +:1028B800800026F48000208480002114800035ECFC +:1028C80080003514800034A480004B5480003740C9 +:1028D8008000232480003678800024E0335CF01FD9 +:1028E80000370C9A302830094B5B328CF01F0033CC +:1028F8000C9A302830094B3B32DCF01F00300C9A20 +:10290800302830094B0B32ECF01F002C0E9B30188E +:1029180030094AEA329CF01F00290E9B3018300912 +:102928004ABA32CCF01F00250E9B301830094A9A5B +:1029380032BCF01F00220C9A304830094A6B344CE4 +:10294800F01F001E0E9B301830094A4A32ACF01FA7 +:10295800001B0E9B301830094A1A345CF01F001710 +:102968000E9B3018300949FA32FCF01F00140E9BF8 +:102978003018300949CA337CF01F00100E9B3018FC +:10298800300949AA338CF01F000D0C9A30483009E1 +:10299800497B346CF01F00090C9A30283009495BD8 +:1029A800339CF01F00060E9B30183009492A33ACBF +:1029B800F01F0002D82200008000273480003D88E4 +:1029C80080003AC8800038B4800033FC800030D4DE +:1029D800800032848000375C800032088000300438 +:1029E8008000332880002F8C80002EC4800038841B +:1029F800800037CC8000261CD4013038580B5F1972 +:102A0800F00C18005F88F3E80008C060F40C0019A7 +:102A180048D8F009092B48D89088EDB80001C111B1 +:102A280048B848C9580AF20A1700F00A171048A807 +:102A38001ADA1ADB1ADC489C1AD8F01F00092FCDC5 +:102A4800D802000000007B08000016A280037BDC8F +:102A580080037BE4800378C080037BF0800094C40B +:102A6800D401580BF60A1700F7FA180BF01F0002EA +:102A7800D802000080002A00D401320A300B483CFA +:102A8800F01F0003D802000000007B088002E8BCA9 +:102A9800D421206D3087FAC6FFF00E9A4C6B18953A +:102AA8000C9CF01F0046304B0C9CF01F0045300872 +:102AB800FB68000DBA88FB680009FB68000BFB681F +:102AC800000CEE784240501830480E9BFB67000817 +:102AD800FB68000A300AFE7C2400F01F003A1897B1 +:102AE800C0F04B989088EDB80002C0814B78201D4B +:102AF8004B7C1AD8F01F00372FED301CC5A8E06AB0 +:102B0800F980EA1A03371A9BFE7C2400F01F003272 +:102B1800582CC0D14AC89008EE081900C0844AB899 +:102B2800201D4AEC1AD8F01F002B2FEDD303300AD2 +:102B3800E06B01204AACF01F002BD503E1B8000080 +:102B4800EE180001F5D8C201C020D303FE78240096 +:102B58003019705BF7D9D001915B705BF7D9D0C1A0 +:102B6800915B705BF7D9D081915B580AC020D5037F +:102B7800FE7C2400F01F001C0A9CF01F001C364A33 +:102B8800300B49BCF01F001BE06A0400300B49AC55 +:102B9800F01F0018E06A0400300B498CF01F001584 +:102BA800F01F0017497830079107F01F00170E9C97 +:102BB8002FADD822800382078002E7368000A280EA +:102BC8008000A618000016A2800379BC80037C0848 +:102BD800800094C48000A73C80037C2880002C10CF +:102BE8008000A3A08000A7EC80002778000014B81C +:102BF8008002E8BC00000DB8000009B880002A80F7 +:102C0800000000088000751CD401E1B80000EE182F +:102C18000001F5D8C201C020D303FE782400301982 +:102C2800706BF7D9D001916B706BF7D9D0C1916BEC +:102C3800706BF7D9D081916B580AC020D503FE7C00 +:102C480024007848EDB80000C0F1F01F0016C0C19C +:102C5800319CF01F0015495890092FF9B009301917 +:102C68004938B089C1B8E1B80000EE180001F5D8BC +:102C7800C201C020D303FE7824003019705BF7D955 +:102C8800D001915B705BF7D9D0C1915B705BF7D9CC +:102C9800D081915B580AC020D503D402D603000026 +:102CA800800022188000A2E6000014B40000151C61 +:102CB800D4313006189714931694950618983E093F +:102CC800C2C81095118A2FF8F20A1800C251580686 +:102CD800C21049E890093008F0091900C064089B3F +:102CE8000E9C5C7BF01F001A49A890093008F00977 +:102CF8001900C1040C070F98201D1AD849681AD466 +:102D08001AD690881AD84958495C1AD8F01F001565 +:102D18002FAD8706C1882FF60836CD4548D89009CB +:102D28003008F0091900C0353005C0D8201D48A862 +:102D38001AD690881AD8489848BC1AD83005F01F77 +:102D480000092FCD0A9CD832000016A680013DB498 +:102D5800000016A2000014B4800378D080037C48D9 +:102D6800800094C480037C6CD42118971696F01FB9 +:102D780000325F080E3C5F191895F1E91009C03060 +:102D88005808C5710B893E08F0091800C5210B9930 +:102D98003008F0091800C4D5E2190040C0E1EACAB9 +:102DA800FFFD0BAC1298C068158B2FF92FFB160A84 +:102DB80016081839CFA5C2384A089088EDB800021D +:102DC800C0D149F8201D49FC1AD8F01F001FF7D6BA +:102DD800C0100E9CF01F001D2FED3009EACAFFFD40 +:102DE8000BAC1298C0A81587159B2FF9F7E7108B25 +:102DF8002FEB160AF60800081839CF6510053EE9CA +:102E08000BB8F2081800C021DA2A4919920A3009C9 +:102E1800F20A1900C0E4201D1AD848E890881AD888 +:102E2800487848DC1AD8F01F0008300C2FCDD8227B +:102E3800D82A000080002CB8000016A080037974FE +:102E480080037C84800094C480013DB4000016A2F5 +:102E5800000014B480037C8CD4014918581CC0713C +:102E68003039334C9109F01F000FC0683049334C9A +:102E78009109F01F000D48D89088EDB80002C0D124 +:102E880048787008201D1AD848981AD8489848AC2D +:102E98001AD8F01F000A2FCDD80200000000000841 +:102EA8008000A2E68000A300000016A280037A3CFE +:102EB8008003821080037CB0800094C4D421FACDB2 +:102EC80001004AC81697700512965805C071FACACB +:102ED800FF0014F5F01F0028C4A81989301AB68914 +:102EE8001999B6AAEA19FFFFE819FF80B69919B926 +:102EF800F4091800C20119C53FF8F0051800C1B05F +:102F0800E06A00FF300B1A9CF01F001C1A9430086E +:102F1800C048E8080B082FF80A38CFC51A94AEB590 +:102F2800EEC8FFFCFA050009C038093A10CA123485 +:102F3800CFD1C15849256A0CF01F00120A98EECA71 +:102F4800FFFCEBDCC0083009AEB5C068700BF609B1 +:102F5800070B2FF914CBEA091900CF933EE80A07AB +:102F6800AEC83008AED82FB5302CAC052C0DD82201 +:102F78000000152C800020D48002E8BC0000011459 +:102F88008002EDD0D421202D49981697700E129604 +:102F9800580EC071FACAFFF814FEF01F0016C25886 +:102FA8001989B6891998EA18FFFFE818FF80B698BA +:102FB80030184915B6A86A0CF01F0010EEC9FFFCBE +:102FC8005C5C3008AEBCC0686A0AF408070A2FF8CF +:102FD80012CAF8081900CF933EE818072FBCAEC8EC +:102FE8003008AED8AC0C302C2FEDD8220000152CB0 +:102FF800800020D4000001148002EDD0D421202DBF +:103008004AE818967008169712955808C071FACAB7 +:10301800FFF814F8F01F002AC4D84AA811D4303891 +:10302800F0041800E08B0046FACAFFFC1A9B089CC3 +:10303800F01F00250D88C300AE880D98EA18FFFF21 +:10304800E818FF80AE983018AEA81BC8AEB89A280A +:10305800AEC83008C0B8F3D8C010400BF1DAB010D1 +:10306800EE09000AF6090709B4D9F0CAFFFF9A2940 +:10307800F2081900CF13F1D9C010EE0800083EEA93 +:10308800B0DA9AA82FA910073008AEE8AA09089C58 +:10309800F01F000EC0E8AE880D98EA18FFFFE81888 +:1030A800FF80AECCAE98AEAC3EE8AEB83048AA08C9 +:1030B800302C2FEDD82200000000152C800020D4E1 +:1030C80000000DB880006BF480006FBCD431202D57 +:1030D8004C5818967008169712955808C071BAE897 +:1030E800FACAFFFAF01F0041C728F8C8FFFDC3C09D +:1030F80011842FF4F0040004C37009893018F00912 +:103108001800C67109993EE8F0091800C6214B88D5 +:1031180090093008F0091900C5C44B681AD44B6CE3 +:103128001AD8F01F00362FEDC548099309A9F3E313 +:1031380010835C83C54809893018F0091800C1510B +:1031480009993EE8F0091800C1014A989009300829 +:10315800F0091900C0A44A781AD44A7C1AD8F01F7A +:1031680000272FEDC02830030DB43018F0041800E4 +:10317800C2D10DCC3038F00C1800E08B0028F5D304 +:10318800C008FACBFFF9F01F001E0D88C120AE88D9 +:103198000D98EA18FFFFE818FF80AEB4AE98AEA409 +:1031A8001BF8AEC83EE8AED83008AEE83068C0D8E4 +:1031B800AE880D98EA18FFFFE818FF80AE983EE841 +:1031C800AECCAEB8AEAC3048AA08302C2FEDD83211 +:1031D80009883029F2081800CA9030032FF8100423 +:1031E800CAB1CC3B0000152C800020D4000016A2E8 +:1031F8008003780C80037CBC800094C480006FE05E +:10320800D421202D49A81697700E1296580EC07119 +:10321800FACAFFF814FEF01F0017C2681989301A9D +:10322800B6891999B6AAEA19FFFFE819FF80B69975 +:1032380019B9F4091800C0D119C83039F2081800B2 +:10324800E08B000848C9F208033CF01F000CC028B6 +:10325800300C3018AEB83EE8AECCAED83008AEE888 +:10326800302C3068AC082FEDD82200000000152C57 +:10327800800020D400007B0880004D78D421202DC8 +:103288004A181697700E1296580EC071FACAFFF8AF +:1032980014FEF01F001EC3481989301AB6891999FF +:1032A800B6AAEA19FFFFE819FF80B69919B9F40917 +:1032B8001800C0B119CC3038F00C1800E08B0006AB +:1032C800F01F00135C8CC028300C3028AEB83EE8E4 +:1032D800AECCAEE85C7CF8081608AED83008AEF87C +:1032E8003078AC0848B89088EDB80002C08148A88A +:1032F8001ADC48AC1AD8F01F000A2FED302C2FED3D +:10330800D82200000000152C800020D480006D38E1 +:10331800000016A8800378A880037CD8800094C495 +:10332800D421202D4AA81697700512965805C07109 +:10333800FACAFFF814F5F01F0027C4781989301A63 +:10334800B6891999B6AAEA19FFFFE819FF80B69954 +:10335800303819B919C5F40918005F09F0051800C3 +:103368005F881268C19049C8F00503345804C060EA +:10337800089C301BF01F0019C10849989009E809FA +:103388001900C0A449781AD5497C1AD8F01F00172B +:10339800089C2FEDC028300C3018AEB83EE8AECCF3 +:1033A800AED83008AEE83068AC0849189088EDB857 +:1033B8000002C0A148B8201D1ADC48EC1AD51AD85A +:1033C800F01F000A2FCD302C2FEDD8220000152C2D +:1033D800800020D400007B0880004F1C000016A647 +:1033E8008003794080037CEC800094C4000016A818 +:1033F80080037D10D421202D4A181697700E12963E +:10340800580EC071FACAFFF814FEF01F001EC34818 +:103418001989301AB6891999B6AAEA19FFFFE81965 +:10342800FF80B69919B9F4091800C0F119C83039E4 +:10343800F2081800E08B000A4939F2080038300B0E +:10344800701CF01F0012C028300C3018AEB83EE8CF +:10345800AECCAED83008AEE83068AC0848C8908822 +:10346800EDB80002C08148B81ADC48BC1AD8F01F71 +:10347800000B2FED302C2FEDD82200000000152C6A +:10348800800020D400007B0880004F1C000016A894 +:1034980080037A6480037D28800094C4D40149584D +:1034A8009088EDB80002C08149381ADC493C1AD826 +:1034B800F01F00132FED49383009118AF20A18005D +:1034C800C021DC0AB089F01F0010581CC1004898C0 +:1034D80090093008F0091900C025DA0A48681ADC92 +:1034E80048AC1AD8F01F0006301C2FEDD802000097 +:1034F800000016A28003798480037D38800094C47C +:10350800000016AA80019EF880037D54D421202D46 +:103518004B281496700E16971295580EC071FACA59 +:10352800FFF814FEF01F002EC5681989B68919988E +:10353800EA18FFFFE818FF803014B698B6A4F01F09 +:103548000029C3E0E0460025C260E0460026C3200B +:10355800EEC9FFFCE0460024C0F0129AF9380020BA +:103568003009AEB8C058F809070B2FF914CBF00989 +:103578001900CFA3C28830682DACAEB8306A3008C5 +:10358800198B12CB2FF8201C5C88F4081900CF91F6 +:103598003068C19878C8F0091618AEF93049AEC835 +:1035A800AEB9F3D8C108F1D8C208AED9AEE83048F0 +:1035B800C0A8AEB4F9380038AEC83018C048AEB4A8 +:1035C800AECC18983EE91007AEC93009AED92FB86D +:1035D800302CAA082FEDD8220000152C800020D40A +:1035E8008001997CD421202D49F8189670081697E7 +:1035F80012955808C041FACAFFF8C1881988B688D8 +:103608001998EA18FFFFE818FF803019B698306853 +:10361800B6A9B6B81A9CF01F0015581CC0B00A9974 +:103628000E9B0C9CFACAFFF8300814F8F01F001023 +:10363800C1881BD8AEC81BC8AED81BB8AEE81BA83B +:10364800AEF81B98EF6800081B88EF6800093EE891 +:10365800EF68000A3008EF68000B302C30B8AA0871 +:103668002FEDD8220000152C80019128800020D44D +:10367800D421FACD010016961A971A9C173AF01F12 +:103688000025FAC9FF000D88F20800083009F16921 +:10369800FF004A189088EDB80002C08149F81AD78F +:1036A80049FC1AD8F01F001F2FED300849E749FAE6 +:1036B800AE88AE98AEA8AEB8B488109949CA0E9B29 +:1036C8001A9C1A96F01F001B5C5CC040E06C00FF5F +:1036D800C1E849189088EDB80002C1510F8A0FB9A6 +:1036E8000F98B168F1EA11880FAAF1EA1088F3E897 +:1036F8001008201D1AD848981AD648FC1AD8F01F66 +:1037080000092FCD30194898301CB0892C0DD822CB +:103718008002E736000016A280037A7C80037D646D +:10372800800094C400007B2800001528800025A88C +:103738008000C4C080037D84D401F01F0006E068C7 +:1037480000FF581CF00C1710F9BC0001D80200004B +:10375800800199CCD42118971696335CF01F001677 +:103768005827C1F10D980D89F1E910893018F00931 +:103778001900C1710DA80DBA0DC9303BF608180023 +:10378800E0880004300CC04848CBF608033CA96A1E +:10379800ECCBFFFB120A5C7AF01F00091897C028CF +:1037A8003FF7335CF01F0007E06C00FF5817F9BCC7 +:1037B8000001D8228000A30000007B08800053C0CD +:1037C8008000A2E6D421202D581CC4211789F809AD +:1037D8001800C3E1F6C8FFFE1796C170118AF20AF5 +:1037E8001800C131119A3EE9F20A1800C0E149B93E +:1037F800920A3009F20A1900C0841AD84988499CEB +:103808001AD8F01F00192FED3008FACAFFF8300B4C +:1038180014E80C9CF01F00159A3A18973038F006F7 +:103828001800E0880004300CC0484918F006033C32 +:103838005C7A0E9BF01F000F18950C9CF01F000E71 +:103848000E9CF01F000E5815C0310A9CC038E06C61 +:1038580000FF2FEDD8220000000016A28003795C3B +:1038680080037CBC800094C4800072DC00007B086C +:103878008000514080006E188002E28CD401582CE0 +:10388800C13117981789F1E910893018F009190022 +:10389800C0B117C817BA17ACA96A2FBBF00A000A3B +:1038A8005C7AF01F0002DA0A80007380D421581C69 +:1038B800C391580BC0311697C1E81788F80818004B +:1038C800C3411797C33817893018F0091800C13158 +:1038D80017993EE8F0091800C0E1497890093008C6 +:1038E800F0091900C08449581ADB495C1AD8F01F3E +:1038F80000152FED49089088EDB80002C08148F8FE +:103908001AD7491C1AD8F01F000F2FED3038F007CE +:103918001800E08B000848D8F007033CF01F000CA3 +:10392800DA2AE06C00FFD82230072FF8100BCCC140 +:10393800CE2B0000000016A2800379F880037CBC1F +:10394800800094C480037DA800007B088000599CF7 +:10395800D421202D4B981896169414971295908878 +:10396800EDB80002C1314B694B685805F2081700E1 +:10397800201D1AD816985C781ADA1AD84B281ADC3F +:103988004B2C1AD8F01F00322FAD3038F007180032 +:10399800E0880005E06C00FFC8584AE8F0070338E3 +:1039A80050085808C1504A59920A3009F20A1900B9 +:1039B800C0841AD84A484A8C1AD8F01F00252FED1F +:1039C800400CF01F002630094A28F00709391A9CD4 +:1039D800E06A04005016300B1ADC14981AD75C748D +:1039E8001ADB16991AD5089C1ADA169A1AD6F01FF5 +:1039F800001C49282FAD580CC3819088EDB80002EF +:103A0800C1511AD71AD41AD6403850461AD848D8AD +:103A180048B95805F2051700F005171048A81AD537 +:103A2800490C1AD8F01F000A2FAD0E9C400BF01F4E +:103A3800000E301CC3780000000016A280037DC869 +:103A480080037DC4800379C480037DCC800094C446 +:103A580000007B0880037DF88000599C80005D642D +:103A680080037E2480002A689088EDB80002C15146 +:103A78001AD71AD41AD6403850461AD848B848C95E +:103A88005805F2051700F005171048A81AD548ACD4 +:103A98001AD8F01F000A2FAD300948983FFCF007EC +:103AA80009392FEDD822000080037DC480037DC82A +:103AB800800379C480037E50800094C400007B0892 +:103AC800D431584CE081008E580BC2A01785F805F8 +:103AD8001800E081008A179817A7B167EFE81187E7 +:103AE80017B8EFE8108717C8F1E71007C7E80B8980 +:103AF8003018F0091800C7E10B993EE8F0091800E2 +:103B0800C7914C2890093008F0091900C7344C08AF +:103B18001AD54C0C1AD8F01F00402FEDC6B81697CE +:103B28003006C1F80B960BA8F1E610865C86C688AD +:103B380007893018F0091800C72107993EE8F009ED +:103B48001800C6D14B1890093008F0091900C6743E +:103B58004AF81AD34AFC1AD8F01F002F2FEDC5F8DF +:103B68003005C1B80795C61809893018F00918003A +:103B7800C61109993EE8F0091800C5C14A389009EC +:103B88003008F0091900C5644A181AD44A1C1AD812 +:103B9800F01F00212FEDC4E83003C1A80993C50820 +:103BA80009893018F0091800C13109993EE8F0096F +:103BB8001800C0E1495890093008F0091900C0847C +:103BC80049381AD4493C1AD8F01F00132FED06992A +:103BD8000A9AF7D6C0100E9CF01F0010581CC0306F +:103BE800E06C00FFD83230072FF5F6050005C80154 +:103BF800C98B0B833028F0031800C95030062FF307 +:103C0800EA030003C961CADB000016A280037A98A0 +:103C180080037CBC800094C4800039580784301825 +:103C2800F0041800CA0030052FF4E6040004C9D1D6 +:103C3800CB4B09883019F2081800CB1030032FF845 +:103C48001004CAF1CC5B0000D421202D3038169620 +:103C58001494F00B1800E08B0072300750074BA843 +:103C68001188EE081800C0B04B889008EE081900BB +:103C7800C654201D4B684B7C1AD8C0F84B69138971 +:103C8800F0091800C0E14B589008EE081900C56407 +:103C9800201D4AF84B2C1AD8F01F00322FEDC4E82B +:103CA8001A9AE0690400501712981ADAEBDCC0106F +:103CB8001ADB0E9A1AD70E9B1AD40A9C1AD93019F5 +:103CC8001AD7F01F00294A182FAD580CC1B1908897 +:103CD800EDB80002C1114A584A595804F2041700B5 +:103CE800F004171049A81AD64A2C1AD51AD41AD88B +:103CF800F01F001C2FCD0C9C400BF01F001F301C28 +:103D0800C1F89008EE081900C11449884989580477 +:103D1800F2041700F004171048D81AD6497C1AD5AF +:103D28001AD41AD8F01F000F2FCDA17630092FF61C +:103D380049383FFCF0060929C038E06C00FF2FED38 +:103D4800D822000000007B07000016A280037A102A +:103D580080037E80000016AB000016A680037EA0BC +:103D6800800094C480005D6480037DC480037DC8A6 +:103D780080037EB880002A6880037EDC00007B0810 +:103D8800D421583CC661580BC24017843028F0042F +:103D98001800C621179717A8F1E710875C87C5D8C0 +:103DA80009893018F0091800C5D109993EE8F009C9 +:103DB8001800C5814B6890093008F0091900C5241E +:103DC8004B481AD44B4C1AD8F01F00342FEDC4A816 +:103DD80016973006C1B80996C4B80B893018F0098F +:103DE8001800C4B10B993EE8F0091800C4614A886C +:103DF80090093008F0091900C4044A681AD54A6CB9 +:103E08001AD8F01F00262FEDC3883004C1A80B94E0 +:103E1800C3A80B893018F0091800C1310B993EE886 +:103E2800F0091800C0E149A890093008F009190004 +:103E3800C08449881AD5498C1AD8F01F00182FED6C +:103E48000E9C089A0C9B5C7CF01F0015581CC03017 +:103E5800E06C00FFD82230072FF4F6040004CA11E2 +:103E6800CB9B09853018F0051800CB6030062FF57C +:103E7800E8050005CB31CCAB0B883019F2081800E7 +:103E8800CC7030042FF81005CC51CDBB000016A221 +:103E98008003791480037CBC800094C480003C506B +:103EA800D431204D1495740A501A18961788301971 +:103EB800F2081800C771F6C7FFFE1794C1700F8982 +:103EC800F0091800C1310F993EE8F0091800C0E167 +:103ED8004B7890093008F0091900C0844B581AD75C +:103EE8004B5C1AD8F01F00352FED4B189088EDB8B1 +:103EF8000002C0A14AF81AD44B1C1AD61AD51AD8EF +:103F0800F01F002E2FCD3028F0041800E08B004B56 +:103F18003006304030114A624A63C3E80F88E0082F +:103F28001800C4010F990FA8B168F1E911880FB9F9 +:103F3800F1E910880FC92FB7F3E810085807C170C6 +:103F48000F89E2091800C1310F993EEAF4091800F7 +:103F5800C0E18409300AF4091900C0941AD7496CE1 +:103F68001AD35028F01F00152FED400850388489C7 +:103F7800EDB90002C0A11AD84029492C1AD91AD67D +:103F88001AD3F01F000E2FCDF9D6C008FACBFFF4D4 +:103F98002FF6F01F000D0836CC253008301CAAC8B3 +:103FA800C038E06C00FF2FCDD8320000000016A208 +:103FB80080037A4C80037CBC800094C480037F0813 +:103FC80080037F308000C19CD431203D3019149487 +:103FD800189674051788F2081800E0810085F6C75E +:103FE800FFFE1792C1700F89F0091800C1310F99AF +:103FF8003EE8F0091800C0E14BD890093008F009F4 +:104008001900C0844BB81AD74BBC1AD8F01F003B14 +:104018002FED4B789088EDB80002C0A14B581AD20A +:104028004B7C1AD61AD41AD8F01F00342FCD30384A +:10403800F0021800E08B005830064AD04AD1FAC383 +:10404800FFF8C4B80F88304AF4081800C4C10F99A3 +:104058000FA8B168F1E911880FB9F1E910880FC903 +:104068002FB7F3E810085807C1800F89301AF409F0 +:104078001800C1310F993EEAF4091800C0E180091F +:10408800300AF4091900C0941AD749BC1AD150282B +:10409800F01F001A2FED400850288089EDB9000262 +:1040A800C0911AD8497C1AD51AD61AD1F01F001314 +:1040B8002FCD5816C0805826C0B0069B0A9CF01F0A +:1040C8000012C0A8069B0A9CF01F0010C058069B4F +:1040D8000A9CF01F000F2FF60436CB553008301C11 +:1040E800A8C8C038E06C00FF2FDDD832000016A247 +:1040F800800378F080037CBC800094C480037F0830 +:1041080080037F308000CBC88000CA748000CA92C8 +:10411800D421FACD00884C6816979088EDB8000233 +:10412800C0B14C48201D1ADC1AD84C384C3C1AD85F +:10413800F01F00432FCD344A300BFAC6FFFC0C9C0D +:10414800F01F0040306AE06B00FFFACCFFDBF01F85 +:10415800003D0F8A31F8F00A1800E08B008930889A +:10416800EECBFFFFFB68003C0C9CF01F00370F896B +:10417800FB6900244AE89088EDB80002C0A14AE82B +:10418800201D4B2C1AD91AD61AD8F01F002D2FCD66 +:104198000F882FF8FAC6FFB810070C9C0E9B173A29 +:1041A800F01F002BFAC9FF780F88F20800083009C1 +:1041B800F169FFC049E89088EDB80002C0B10F88E6 +:1041C800201D1AD849C81AD64A2C1AD8F01F001C24 +:1041D8002FCD0F8A3018FAC7FFFC3089FACBFFB809 +:1041E8000E9CF01F001D581CC0C0491890093008CB +:1041F800F0091900C3C44908498C1AD81AD8C0E86C +:10420800497CF01F000F0E9C300BF01F001618970A +:10421800581CC080201D1ADC493CF01F00092FEDF6 +:10422800C268492CF01F00060E9CC238000016A276 +:1042380080037A248003787080037F50800094C4C0 +:104248008002E8BC8002E73680037CB08002EE0C76 +:1042580080037F648001908480037F7880037FA03F +:10426800800099A880037FB880037FC0E06C00FFBE +:104278002DEDD822D42120AD4A461697178A31F859 +:10428800F00A1800E08B002FFAC5FFF92FFB0A9CF3 +:10429800F01F001F0F88FAC9FFD8FB680027100914 +:1042A8003008F368FFDF8C88EDB80002C0814998B8 +:1042B8001AD5499C1AD8F01F00192FED300BFACCEB +:1042C800FFF9F01F00171897581CC1B048F890095B +:1042D8003008F0091900C1541ADC48E8491C1AD8FA +:1042E800C0D88C093008F0091900C0353FF7C098CC +:1042F800201D488848CC1AD83FF7F01F00082FED3A +:104308000E9C2F6DD8220000000016A28002E7360E +:10431800800378E080037B18800094C4800099A80B +:1043280080037D5480037FC4D431216D4D281697B6 +:104338009088EDB80002C0B14D08201D1ADC1AD8CB +:104348004CF84D0C1AD8F01F00502FCD321AFAC66F +:10435800FFFD300B0C9CF01F004D0F8A31F8F00A5E +:104368001800E08B0085EECBFFFF0C9CF01F004887 +:104378000F88FB6800234C089088EDB80002C081C4 +:104388004BF81AD64C3C1AD8F01F003F2FED0F8679 +:104398002FF6EE060006FAC7FFAC0C9B0E9C173AE8 +:1043A800F01F003D0D88FAC9FFA8F20800080E9C0E +:1043B8003003F163FFFCF01F00393038EFDCC00830 +:1043C8000D89F00718005FB53018F00918005F185C +:1043D80010450A94E6051800C4A1ECCBFFFDFAC30A +:1043E800FFDC2FE6069C0D8AF01F002B0D88FAC90A +:1043F800FFA8F2080008069BF165FFCCFAC5FFC0CC +:104408000A9CF01F002730D81896F00C18005F1986 +:104418003058F00C18005F18F3E80008E808180096 +:10442800C261FAC4FFB2306AE06B00FF089CF01F5B +:1044380000170C9B08990A9A0E9CF01F001A0E9CF4 +:10444800F01F0019300BFACCFFFDF01F0018581CA4 +:10445800C100489890093008F0091900C0844888BC +:104468001ADC493C1AD8F01F00082FEDE06C00FF59 +:104478002EADD832000016A280037888800379AC6C +:1044880080037F50800094C48002E8BC8002E73635 +:1044980080037FE48002EE0C8002DC2C80009868A8 +:1044A8008001927080019258800099A880037D5401 +:1044B800D401319CF01F0010E06B00EFFE7C280057 +:1044C800F01F000E581CC060FE7C2800F01F000C76 +:1044D800CFC0319CF01F000B48B890093008F00994 +:1044E8001900C0844898201D489C1AD8F01F00095C +:1044F8002FEDD8028000A3008000A7FA8000A7F261 +:104508008000A2E6000016A28003790880037FF0ED +:10451800800094C4D431202D3008FAC7FFF81696CD +:10452800189514930EE81694098B0A9C2FF4F01F23 +:104538000009581CC0B00E9B0A9CF01F0007089881 +:104548000C18E6081900CF13300C2FEDD8320000F4 +:104558008000A7FA8000A816D421202D30081496D0 +:10456800F80C002C129AFAC9FFF812E84A88F00CE5 +:10457800002C169578280C9B0A9C5D184A583049DF +:10458800319C9109F01F00249ABA0C9BFE7C2400F0 +:10459800F01F00221897319CF01F00214A189088BC +:1045A800EDB80002C0414A0CF01F002049D890889D +:1045B800EDB80002C0D149E8201D49EC1AD8F01F17 +:1045C800001B49D80A9C908BF01F001C2FED4958FE +:1045D8009088EDB80002C041499CF01F00144918AA +:1045E8009088EDB80002C0C14918201D491C1AD88E +:1045F800F01F000E9AFB0C9CF01F00102FED9A394B +:1046080049080E9CB0092FEDD8220000000011E0E7 +:10461800000011B88000A3008000451C8000A2E6BD +:10462800000016A080038008800094C480037800EE +:1046380080037C84000011BE80013DB48003800C9F +:10464800000011BCD431202D4BC43048E8C3FFF022 +:10465800BAF81897199616910C90F8C2FFFD2FC456 +:104668003005E21000400988EC081800C4B107883A +:104678003029F2081800C1F10A9C4B08EA05002508 +:10468800029AF00500240E9BE8C5FFF46839F01F74 +:10469800002CC030301CC4E868086A0A049B0FACC0 +:1046A8005D18BAFCE216004030181BF9F009180032 +:1046B800C3C1C3D85800E00A1700F9BA0100E8F8E6 +:1046C800FFFC049B0FAC5D18BAFC30190788F20890 +:1046D8001800C0B10A9C4998EA050025029AF0051D +:1046E80000250E9B6A39C0A83049F2081800C0A1FD +:1046F800029A0E9B0A9CFAC9FFF9F01F0011C170BB +:10470800C1882FF52EC42EC3E0450024CAD148D84D +:1047180090093008F0091900C08448B81AD648BC76 +:104728001AD8F01F000B2FED302CC048304CC02891 +:10473800300C2FEDD8320000000011E080004560F9 +:10474800000016A28003789880038010800094C42B +:10475800D421202D4BD8910C30094BD8118AF20A5C +:104768001800E08000DAB08930085018E1B800007D +:10477800EE180001F5D8C201C020D303FE7824004A +:104788003019706BF7D9D001916B706BF7D9D0C124 +:10479800916B706BF7D9D081916B580AC020D50303 +:1047A8004AC7FACAFFFC6E0B4ABCF01F002C1896C9 +:1047B800C6E04AB8303A6E09910A401B4A98161961 +:1047C800B009E06A03FFF4091900E0880005E06910 +:1047D8000400B0094A064A37EC0B000B4A2C8E8AB3 +:1047E800F01F002230084A2BAC8849FCF01F00213A +:1047F800584CC2204A089088EDB80002C0C149F858 +:10480800201D49FC1AD8F01F001F8E8B496CF01F21 +:10481800001E2FED49889088EDB80002C0D1497874 +:10482800201D497C1AD8F01F00174988490C908B25 +:10483800F01F00152FED4879300893084899B20801 +:1048480048799308C46800000000152C0000151C66 +:10485800000014B0000014B880002D70000011B8DA +:10486800000011BE00000DB88002E736000009B84C +:104878008000464C000016A0800379D880037C8411 +:10488800800094C480013DB4000011BCF01F0024D6 +:104898004A489008EC081900C0A44A3890881AD8E9 +:1048A8004A284A3C1AD8F01F00232FED4A289009BD +:1048B8003008F0091900C0644A084A1C909BF01F90 +:1048C80000214A19300893084A09B20849C9B28830 +:1048D800E06B0120FE7C0D80F01F001DE1B8000098 +:1048E800EE180001F5D8C201C020D303FE782400D9 +:1048F8003019705BF7D9D001915B705BF7D9D0C1E3 +:10490800915B705BF7D9D081915B580AC020D503C1 +:10491800319CF01F00102FEDD8220000800044B811 +:10492800000016A2000014B4800379D88003802CFC +:10493800800094C4000016A6000014B0000014B84B +:1049480080013DB4000011B8000011BE8000A20033 +:104958008000A300D431207D4B6730054B664B782F +:104968001188EA081800EC081710EE0817004B4CDD +:104978001AD8F01F00344B481188EA081800EC07D1 +:1049880017104B2C50074B2230074B23F01F002DDC +:104998000E942FED4B01CBD86A005800E08000B28E +:1049A80080286009201D1AD95028F01F002C602A81 +:1049B8002FFD580AE60A1700E20A171040185C781B +:1049C80060491AD84A681ADC1ADA4A6A5809F40996 +:1049D8001700F00917104A4C1AD91AD01AD61AD744 +:1049E800F01F001860482F8D5808C431E0C9FFBC7B +:1049F800720A580AC0E0744B201D49CC1ADB1ADA37 +:104A08001AD850595048F01F000F2FCD40084019B0 +:104A18002FF82FC95848CED161585808C610704988 +:104A2800493C1AD91AD8F01F00072FEDC598000085 +:104A3800800380548003805C000016AB8003806094 +:104A4800800094C400007B078003807400007B080A +:104A580080037BE480037BDC800096A880037DC410 +:104A680080037DC880038088800380B8800380D05D +:104A780061E85808C350F11900127008201D1AD8AF +:104A8800507850395028F01F002761EA2FFDF53B78 +:104A9800001040291AD940281AD81ADC4A2C1ADBE7 +:104AA8001ADA50B8F01F0021FACAFFE00C9B5084B4 +:104AB800FB5400240E9CF01F001E2FBD40305050A8 +:104AC8001AD0FB1800145028F01F00162FFD4018AC +:104AD8001AD81AD01ADC497CF01F00142FCD0E9C6E +:104AE800F01F001549594968580CF2081710201D85 +:104AF800494C1AD8F01F000D493CF01F000C2FED4F +:104B08002FF62FC55826FE91FF492FF75847C0505A +:104B1800E40700353006C41BF01F000C2FADD83257 +:104B2800800096A8800380E8800094C4800021C893 +:104B380080038114800070788003812C8003812891 +:104B480080038130800381408000D680D431204D9D +:104B58004BE812911896169711895809C1A119881E +:104B6800B6881998EA18FFFFE818FF80B6C9B69802 +:104B7800B6A93EE8B6B83048A2084B589088EDB8B8 +:104B88000002E08100E7201D4B284B3C1AD8C228C0 +:104B9800FACCFFF4F01F0031403366105800C1E131 +:104BA8000D88AE880D98EA18FFFFE818FF80AEA0C0 +:104BB800AE9830093EE8AEC9AEB83048A2084A48B7 +:104BC8009088EDB80002E08100C5201D4A184A4CC3 +:104BD8001AD8F01F00242FEDCBC858B0F9B0020A3C +:104BE80030044A12C0786408F004032C2FF4F01F34 +:104BF800001F641849C51034CF736A0C3004F01FC5 +:104C0800001B8B14661B580BC460A36B301CF01F71 +:104C180000188B0CC3A1497CC1486608F002030B3D +:104C28006A080408501B5008F01F00134008910C34 +:104C3800401B6A082FF4F002030C580CC20148FC10 +:104C4800F01F0008C2880000000016AA000016A283 +:104C58008003783C8003816080018F048003817C1D +:104C6800800094C4000015208002E28C8002DC3CA5 +:104C7800800381988002E2A4800381C0344AF01F37 +:104C880000376A182FF88B18E8021502344C66189A +:104C98001034CC430D88AE880D98EA18FFFFE81849 +:104CA800FF803005AE98AEA030364AD20A984AD96D +:104CB8000E93640AEA0B1502F40B030AF537002079 +:104CC800F4070B08ECCCFFFF2FF7E60C000C5C5741 +:104CD800300AE6060B07C0886404E80B0304E80AF8 +:104CE80007042FFA18C40E9EEE0A1900CF630E9A15 +:104CF8002FFAF4060006928A5C56EDBA0002C1D17A +:104D0800640A202DF40B0304503950281A9C306A89 +:104D1800E8CBFFDFF01F001168CA1ADAE93A003859 +:104D28001ADA491A1AD7491C1AD41AD51ADAF01FEE +:104D380000102F8D400840192FF50035CBB53EE8FF +:104D4800E6060B08069730080C07AE982FF6A20661 +:104D5800302C2FCDD83200008002E7360000152015 +:104D6800000016A28003783C800381E4800094C48C +:104D780048781188580CC0215EFF5C68100C300818 +:104D8800F9390015F00918005F1C5EFC00001530A9 +:104D9800D4211897580CC2A04968F129000030089E +:104DA800F2CA0004F00900065836F5D8E9062FF8CB +:104DB800EE06002C791C163CC17148F89088EDB8B5 +:104DC8000001C0A148D81ADB48DC1AD61AD71AD86D +:104DD800F01F000C2FCDF9D6C00830082F06EE06BC +:104DE80000278F18D8225848CDE1E06C00FFD82260 +:104DF80000001530000016A2800382688003830437 +:104E0800800094C4D42118971695580CC2B04978DC +:104E1800F12900003008F2CB0004F00900065836EA +:104E2800F7D8E9062FF8EE06002A751A580AC03096 +:104E38000A3AC16148E89088EDB80001C0A148D895 +:104E48001AD548DC1AD61AD71AD8F01F000C2FCD5D +:104E5800EE060027F9D6C008EF450044D822584886 +:104E6800CDD1E06C00FFD82200001530000016A25A +:104E780080038CF080038304800094C4D4211897A5 +:104E8800580CC2A049E8F12A00003008F4CC00040C +:104E9800F00A00065836F9D8E9062FF8EE06002978 +:104EA80073195809C170580BC0F049689088EDB85B +:104EB8000001C0A149481AD9494C1AD61AD71AD89C +:104EC800F01F00132FCDEE06002748D8B0866F1CC0 +:104ED800D8225848CDE1580BC10048A8900930089D +:104EE800F0091900C0A448881AD748AC1AD8F01F8E +:104EF8000008300C2FEDD822D82A00000000153009 +:104F0800000016A280038CB880038304800094C438 +:104F180080038324D4214CB816951188189730063D +:104F2800EC081800E08000B6300BF01F004718941A +:104F38005807E0800097580C5F19EC0518005F08C7 +:104F4800F3E81008EC081800E080008C4BF8908813 +:104F5800EDB80002C3314BE811894BE89088EDB8F1 +:104F68000001C2C15C69EE09002871185808C041E7 +:104F7800109E1096C098EE09000AF53E0015F2CA78 +:104F8800FFF8EE0A03266F5A201D580AF40C170082 +:104F9800F5FC10045808F00B1700F1FB10041ADE9A +:104FA8001AD61ADC1ADA1ADB1AD84AB81AD74ABC3F +:104FB8001AD91AD8F01F002A2F6D5805C3D068488F +:104FC80058485F1958085F181268C3304A08118991 +:104FD8004A089088EDB80001C2C15C69EE09002852 +:104FE80071185808C04110951096C098EE09000A2B +:104FF800F5350015F2CAFFF8EE0A03266F5A201D90 +:10500800580AF40C1700F5FC10045808F00B1700A8 +:10501800F1FB10041AD51AD61ADC1ADA1ADB1AD8D8 +:1050280048D81AD748DC1AD91AD8F01F000D2F6DA6 +:10503800E93C0013D8226F58F13C0013D822000035 +:10504800000016AB80004E84000016A80000153042 +:10505800000016A28003828C80038348800094C4D9 +:1050680048D890093008F0091900C1345807EE08EB +:105078001700EE041700EFF810151AD848781AD45C +:10508800487C1AD71AD8F01F0007300C2FCDD82229 +:10509800D82A0000000016A88003828C8003838C25 +:1050A800800094C4D421580CC25049D8F12900007A +:1050B8003008F2CA0004F00900075837F5D8E907A4 +:1050C8002FF8F807002E7D1E163EC12149589088FA +:1050D800EDB80001C0A149481ADB1AD71ADC493CCF +:1050E8001AD8F01F00132FCD0E9C5C5CD8225848AC +:1050F800CE31490890093008F0091900C045E06C24 +:1051080000FFD8224888201D1ADB1ADC48AC1AD8C0 +:10511800F01F0007E06C00FF2FCDD82200001530EB +:10512800000016A6800382BC80038304800094C418 +:10513800000016A2800383C0D421580C5F18580BB6 +:105148005F1918961695F3E800081494C590580A44 +:10515800C5704AC89088EDB80001C0C114985C7841 +:10516800201D1AD84A881ADB4A8C1AD8F01F002842 +:105178002FCD4A889088EDB80001C0D14A28201D5B +:105188004A5C1AD8F01F0022089B0A9C5C7BF01F1F +:1051980000232FED300A5C74149C089BF01F00203C +:1051A8001897C0E149789008F8081900C29449682E +:1051B8001AD649CC1AD8F01F00162FEDC1C8089A84 +:1051C8000A9B781CF01F00180E9B6DECF01F00174F +:1051D8005C5CC12048B890093008F0091900C08407 +:1051E80048981AD6492C1AD8F01F00092FED0E9CA2 +:1051F800F01F0010DC2A0E9CF01F000EDA2ADC2AB1 +:10520800000016A280038CE4800383E8800094C425 +:10521800000016A080037C8480013DB48000D31870 +:10522800800383FC8002E7368001153880038428D8 +:105238008000D13CD421149518971696580CC0417B +:10524800E06C00F6D822F01F00163FF8E9DCC00831 +:10525800F0041800C041E06C00FFD822491890887B +:10526800EDB80001C0E16C48201D1AD848E85C651B +:1052780048EC1AD51AD61AD71AD8F01F000D2FAD38 +:105288006C4858485F0948B8B0893008EE040004F3 +:10529800E9680068F01F00088F7CD82A800050ACAD +:1052A800000016A280038D1080038450800094C4EF +:1052B80000007B0780009504D43118971695F01FDD +:1052C80000353FF8EDDCC008F0061800C5E0EE0632 +:1052D80000083009F1690015ECC8FFF8EE0803244E +:1052E8005804C5304AC89088EDB80001C0A14AB832 +:1052F800201D4ABC1AD41AD41AD8F01F002A2FCD60 +:10530800EB1800726EF91238F20817B00838F0047A +:1053180017804A589088EDB80001C051F01F00234B +:105328004A38910CECC8FFEA3019EE08032B089AAA +:105338000A9C5C7AF01F001FE7DCC008C19049A8EE +:105348009088EDB80001C0F16A48201DF3D3B00879 +:105358001AD91AD41AD849181AD5497C1AD8F01F5C +:1053680000112FAD0C073008EF680015C10830197F +:10537800ECC8FFF8EE060006ED690015EE080329F3 +:105388000819EE080929C038E06300FF069CD832E6 +:10539800800050AC000016A680038C7880038474CB +:1053A800800094C4000016A2800095040000153403 +:1053B800800109C08003848CD43116941493189703 +:1053C800580CC1014AB89008F8081900E08400D3C5 +:1053D8004A98201D4A9C1AD8F01F00293FFC2FED3F +:1053E800D832300BF01F0027189B18960E9CF01F20 +:1053F80000263FF8EBDCC008F0051800E08000BB91 +:105408004A289088EDB80001C0E1F1D3C010201DF2 +:105418001AD849981AD449EC1AD61AD71AD8F01FAC +:1054280000182FAD49B89088EDB80001C0D14928BF +:10543800201D499C1AD8F01F0012F7D3C010089CF1 +:10544800F01F00162FED49189088EDB80001C4B17F +:105458004938118948789088EDB80001C4415C69E1 +:10546800EE09002871185808C1C11092109EC21880 +:10547800000016A280038D20800384C0800094C49D +:1054880080004E84800050AC000016A6800384D8AB +:10549800000016A080037C8480013DB40000153014 +:1054A800EE09000AF5320015F2CAFFF8EE0A032EDB +:1054B8006F5A201D580AF40C1700F5FC1004580800 +:1054C800F00B1700F1FB10041AD21ADE1ADC1ADAF4 +:1054D8001ADB1AD84A881AD74A8C1AD91AD8F01F50 +:1054E80000282F6D5806C46058045F183009F2036D +:1054F80019005F1AF5E80008F2081800C3B0EAC8F6 +:10550800FFEAEE08032C580CC3506C4858785F0B20 +:1055180058485F0AF7EA100AF20A1800C0515828DA +:10552800C0305838C2715C73089B069AF01F00158A +:10553800EAC9FFEA300AEE090328F0030B0A4928F2 +:105548009088EDB80001C0A1EE0903281AD848A830 +:1055580048EC1AD8F01F000A2FED48DB0C9C2F8569 +:10556800EE050923F01F000B0C9B0E9CF01F000A90 +:10557800DA3ADC3A80038D2080038348800094C4A3 +:105588008002E736000016A6800384FC800055A040 +:105598008000D662800052C0D431149518971696B0 +:1055A800580CC041E06C00F6D832F01F001D3FF8DF +:1055B800E9DCC008F0041800C041E06C00FFD832F4 +:1055C8003009EE040008F16900683019F169001526 +:1055D80049489088EDB80001C171E8C8FFF8EE08A5 +:1055E8000323F01F00114918201D1AD37008F8086A +:1055F80001081AD848E85C7548EC1AD51AD61AD8A2 +:10560800F01F000D2FAD2F84EE04032C580CC06042 +:105618000C9B0E9CF01F0009300CD832800050AC57 +:10562800000016A2800095040000153480038D50F8 +:1056380080038508800094C4800052C0D421189744 +:10564800580CC1C0F01F000E18965BFCC060EF3B01 +:10565800000B5C5CF01F000B48B89088EDB80001A7 +:10566800C0A148A8201D48AC1AD61AD71AD8F01FCE +:1056780000092FCD30094888B089D82280002044FD +:1056880080002068000016A280038D3C80038538C6 +:10569800800094C400007B07D4314898189711897A +:1056A80048889088EDB80001C3015C69F8090028B2 +:1056B80071185808C08110951096C0D80000153090 +:1056C800000016A2F809000AF5350015F2CAFFF81D +:1056D800F80A03266F5A201D580AF40C1700F5FC27 +:1056E80010045808F00B1700F1FB10041AD51AD64D +:1056F8001ADC1ADA1ADB1AD84C281AD74C2C1AD901 +:105708001AD8F01F00422F6D0E9C3005F01F004084 +:10571800EEC6FFBC0A924BF34BA45C5CF01F003E44 +:105728006C08300B2FF5109C5808C1D0F01F003BB7 +:105738006C0C300BF01F003A6C0C300BF01F00396A +:105748006C0C300BF01F00388688EDB80001C0B132 +:10575800201D1AD26C0870484B4C1AD81AD4F01F66 +:10576800002B2FCD2FC65845CDC16F5C580CC1D02A +:10577800300BF01F002A300B6F5CF01F002D6F5CA0 +:10578800F01F002C4A385C5C9088EDB80001C0D14D +:10579800201D5C6C1ADC6F5870481AD849984A6CFE +:1057A8001AD8F01F001A2FCD6FEC580CC060F01FEC +:1057B80000236FECF01F00224A28F1260000495808 +:1057C8009088EDB80001C0E1ECC8FFEAEE080328B4 +:1057D800201D1AD848B81AD649BC1AD8F01F000B91 +:1057E8002FCD2EA6EE06032C580CC060F01F001714 +:1057F8003008EE0609280E9CF01F0014D83200006D +:1058080080038CC880038348800094C480002044AF +:10581800000016A280006F288000D6588000D6624B +:105828008000D65C8000D668800385608000D66ED4 +:105838008000E50480038588800111C88001122852 +:1058480000001530800385B08002E28CD4211897BF +:10585800580CE080007EF01F00413FF8EDDCC008E6 +:10586800F0061800C750EE0600287114089CF01FB7 +:10587800003CEBDCC008C0D10A9B089CF01F003933 +:105888000A9B089CF01F00380A9B089CF01F0037F1 +:105898004B789088EDB80001C0D1F1D5B0081AD87E +:1058A80068481AD84B381AD44B3C1AD8F01F003322 +:1058B8002FCD4AF43FF8F0051800C1718809300867 +:1058C800F0091900C0D4EE0600287118201D1AD856 +:1058D8004AB81AD64ABC1AD8F01F00282FCD0C0790 +:1058E8003018EF68006CC368EE0600083009F169EB +:1058F800006CEE0600280E9C711BF01F00238888A0 +:10590800EDB80001C0E1ECC8FFEAEE080328201D4D +:105918001AD849B81AD649DC1AD8F01F00182FCD62 +:105928002EA6EE06032C580CC060F01F0019300894 +:10593800EE06092848E89088EDB80001C0B149088A +:10594800201D494C1AD8F01F000D2FEDC038E06516 +:1059580000FF0A9CD8220000800050AC8000E504BB +:105968008000D6588000D6628000D65C000016A25F +:1059780080038D2C800385CC800094C480038CD850 +:10598800800385F880004D98800385B08002E28C02 +:1059980080038624D4211897580CC0E14BE890085E +:1059A800F8081900C7744BD8201D4BDC1AD8F01F13 +:1059B800003D2FEDD82278264BB85806C121F12595 +:1059C8000000F01F003A0E9CEF34000BF01F003867 +:1059D800089B5C5CF01F00370A07EF660068D82256 +:1059E80011894AD89088EDB80001C2C15C69F809EC +:1059F800002871185808C04110951096C098F809E9 +:105A0800000AF5350015F2CAFFF8F80A03266F5A9E +:105A1800201D580AF40C1700F5FC10045808F00B68 +:105A28001700F1FB10041AD51AD61ADC1ADA1ADB99 +:105A38001AD849A81AD74A0C1AD91AD8F01F001927 +:105A48002F6D4998F1260000ECC5FFF0EE05002502 +:105A58006A1C580CC1F078485898C1C05808C1A0B1 +:105A6800F01F001648C85C5C9088EDB80001C0C102 +:105A7800201D5C6C1ADC6A181AD84888490C1AD898 +:105A8800F01F00082FCDEE0600260E9C6D1BF01FA0 +:105A9800000DD822000016A2800382988003864455 +:105AA800800094C400001530800056A08000204477 +:105AB800800020688003834880010CEC8003865CAA +:105AC80080005854D4214B0818979009169630082E +:105AD800F0091900C0F44AD8F12800001AD8F1DBFF +:105AE800B0081AD84AA81ADC4AAC1AD8F01F002AFB +:105AF8002FCD4AA811893008F0091800C0414A8CF6 +:105B0800F01F00253FB8F0061800C3C15807C110A0 +:105B180049E830091188F2081800C0B53039F20890 +:105B28001800E08900075C68EE080028711BC0288F +:105B3800300B0E9CF01F001B49389088EDB800010F +:105B4800C1114928F1280000201DF0C9FFEAEE091B +:105B580003291AD91AD848E8493C1AD8F01F000E68 +:105B68002FCD48A6ED2800002EA8EE08032C580CCF +:105B7800C090F01F000EED28000030092EA8EE0896 +:105B88000929D822000016A200001530800382A837 +:105B980080038680800094C4000016AB800386B41E +:105BA80080004D98800385B08002E28CD42118973C +:105BB8001696580CC4E04A8890093008F009190074 +:105BC800C0C4F1DBB0081ADC1AD84A481ADC4A4CBF +:105BD8001AD8F01F00242FCD4A3811893008F0094F +:105BE8001800C0414A1CF01F001F3FB8F0061800FB +:105BF800C301499890093008F0091900C084497810 +:105C08001AD749BC1AD8F01F00172FED0E9CF01FA9 +:105C180000194998F126000048F89088EDB800016D +:105C2800C0E1ECC8FFEAEE080328201D1AD848B8DE +:105C38001AD6492C1AD8F01F000B2FCD2EA6EE0627 +:105C4800032C580CC060F01F000E3008EE0609281F +:105C5800D8220000000016A2800382D0800386C8E4 +:105C6800800094C4000016AB800386B4800386F8D5 +:105C78008000564400001530800385B08002E28C15 +:105C8800D4311897149678CC94CAF80A000A8FCAA7 +:105C98001093169512946E385808C1504A5CF01F3C +:105CA8000026EF18001A3509F0090D083008F00928 +:105CB8001900C0414A1CF01F0020EF08001A2FF8F5 +:105CC800EF58001A49E89088EDB80001C171202DFD +:105CD800304A1A9C089BF01F001BF01F001BEF386E +:105CE8000014F3D3C01050091ADC1AD849781AD610 +:105CF800497C1AD8F01F00102FAD0A9AEF3B001408 +:105D08000C9CF01F001409890998B168F1E9118801 +:105D180009A9F1E9108809BBEF3C0014F5D3C010BC +:105D2800104BF01F000D0C9CF01F000CD832000027 +:105D380080037FB4800094C4800384D4000016A23A +:105D48008002E736800096A88003827C800387184B +:105D580080007130800020088000D13CD431204D73 +:105D6800502C503BFAC4FFCC10916800681268238D +:105D780068386846129568545819E088000E4B58E0 +:105D880090093008F0091900E08402B0201D4B2862 +:105D98004B2C1AD8C2F85801C0C14AE89008E2084A +:105DA8001900E08402A3201D4AB84ADC1AD8C22888 +:105DB8005802C0C14A789008E4081900E0840296A5 +:105DC800201D4A584A7C1AD8C158501A500837CB57 +:105DD800301CF01F0025401A18974008C10149D807 +:105DE8009008F8081900E0840281201D49A849FCA0 +:105DF8001AD8F01F001F2FEDE08F0278402999383C +:105E0800B829300840395C729900B831992599DA77 +:105E180099E999F29943F9480050F9480044F9483A +:105E28000048F948004C5803E080008C3058F95875 +:105E38000074F01F0010EF4C00784865580CC1D171 +:105E48008A08F8081900E084020C1AD748A8C8582C +:105E5800000016A280038CA880038744800387640F +:105E6800800387848002DC3C800387A8800094C478 +:105E780080011200800382F88A88EDB80001C131E0 +:105E88006E08201D8EA51AD8F01F00366FE8500541 +:105E98001ADC1AD84B481AD84B484B5C1AD8F01F52 +:105EA80000352FAD6E258EAA6FEC5805C1210E9BCB +:105EB800F01F00315C5CC2504B089008EA081900DA +:105EC800E08401CF1AD74A984ADC1AD8E08F0175C6 +:105ED8004ACBF01F002DF5DCC008C0E04A789009D5 +:105EE8003008F0091900E08401BC201D5C6A49F8FB +:105EF8001ADA1AD7C499EF3C0014149BF01F002338 +:105F08006FEC0E9A4A2BF01F002349C8908CE21CB4 +:105F18000002E08001A76FE8F11900141AD970197E +:105F28001AD9F11900121AD970081AD848E81AD8DB +:105F380048E8499C1AD8F01F000F2FADE08F018F59 +:105F4800F01F00161892C2F148C89008F808190006 +:105F5800E08401871AD749281AD8492CC2D90000E9 +:105F6800800096A88003825C800382F88003880CF6 +:105F7800800094C480011320000016A280038824A6 +:105F88008003B409800112608000200880005C88CA +:105F9800800111F8800388848000E34080038C6CC2 +:105FA800800387E04B880E9BB083F01F0038EF63B7 +:105FB800006FEF63006CEF63006DEF63006E6E2897 +:105FC8004B355808E08100BD049B0E9CF01F003142 +:105FD800E7DCB0086EFCF01F0030E6C8FFEAEE0808 +:105FE800092C8A88EDB80001C0A14AC8201D1ADC16 +:105FF8004ABC1AD31AD8F01F002B2FCD2EA34A451E +:10600800EE0303285808C0B18A09F0091900E08492 +:1060180001281AD74A184A4C1AD8CCE84A3B049C9B +:10602800F01F00234A3B049CF01F00234A3B049CBA +:10603800F01F0023304A4A3B049CF01F00234A38D3 +:106048003009B0898A88EDB80001C0C1EE03032881 +:10605800201D1AD849181AD249DC1AD8F01F001185 +:106068002FCD4898118948A89088EDB80001C5310E +:106078005C69EE09002871185808C2B11093109590 +:10608800C3080000000015308000D658000016A292 +:1060980080004E0C8002E2A480038C6C800388A8E8 +:1060A800800094C4800388C480005BB48000D668F4 +:1060B800800069888000D65C800055A08000D66288 +:1060C800800067B48000D67200007B07800388F4E4 +:1060D800EE09000AF5330015F2CAFFF8EE0A0325A7 +:1060E800201D5808F00B1700F1FB10046F5A580ACE +:1060F800F40C1700F5FC10041AD31AD51ADC1ADAB6 +:106108001ADB1AD84B681AD74B6C1AD91AD8F01F51 +:1061180000362F6D049C4B598EAA0E9BF01F00343D +:106128005C5CE080009F4B3890093008F00919004A +:10613800E08400971AD74AA84AFC1AD8C3D88A8894 +:10614800EDB80001C0F1301B0E9CF01F002C6F58F9 +:106158001ADC1AD84A281AD74A9C1AD8F01F0022E3 +:106168002FCD8EAA4A7B049CF01F00275C5CC120BF +:106178004A0890093008F0091900C724201D5C6CF2 +:1061880049781ADC1AD71AD84A0CF01F00172FCDF5 +:10619800C678049CE06B00FFF01F001DEF4C005414 +:1061A8004945580CC0D18A08F8081900C5941AD76F +:1061B80048B8498C1AD8F01F000C2FEDC5188A88EA +:1061C8004959E21800021389C4505C69EE09002895 +:1061D80071185808C2211095109BC27880038C6CE6 +:1061E80080038348800094C48000523C8000E350C0 +:1061F800000016A28003891080004E84800389382D +:106208008003B4098000D7708003884C8000DC04C8 +:106218008003896400001530EE09000AF535001581 +:10622800F2CAFFF8EE0A032B7843201D5808F00A3B +:106238001700F1FA10041AD51ADB1AD31ADC1ADA85 +:106248001AD84AC81AD74ACC1AD91AD8F01F002B1C +:106258002F6D4ABB6F5CF01F002B300CC0283FFC31 +:106268004A95580CC0E08A093008F0091900C3A4FF +:106278004A68201D4A6C1AD8F01F00202FEDC32849 +:106288008A88EDB80001C2914A284A396E204A31FD +:106298005800F2001700F00017108E226E484A09C5 +:1062A8006EF35808F20117108E355818C0316FEC8C +:1062B800C058301B0E9CF01F001B49481AD05C7256 +:1062C8001AD15C751AD21AD31AD51ADC496C1AD7A6 +:1062D8001AD8F01F000A2F8D8907EF660014300CBA +:1062E800C0580E9CF01F00113FFC2FCDD832000083 +:1062F80080038C6C80038348800094C480006434DD +:106308008000D66E000016A280038CA880038988BE +:1063180080037BDC80037BE480037DC880037DC42D +:1063280080004E84800389A8800056A0D431203D87 +:10633800300730194B38E06504001892169191091E +:10634800E06007D00A9350070E964AF4C22826CC7C +:1063580058ACE08B001F4ADEFC0C032F3016C198A6 +:106368003006C178680CF01F002AE7DCB010C118AD +:1063780030185008C0E8680CF01F0025EBDCB0109E +:10638800C0883017C068680CF01F0021E1DCB0102D +:106398004A0A029B049CF01F00205BFCCD91580622 +:1063A800C161498870080438C0A4E208032BFACCFC +:1063B800FFF8F01F001A402B580BC0A14988201D78 +:1063C800498C1AD8F01F00182FEDC198300B502BAC +:1063D800F1D5C0100C99FAC5FFFC300650161AD535 +:1063E8001AD6402E5C731ADEF9D0C0101AD70C9A50 +:1063F8001AD31ADB0C9BF01F000D2FAD2FDDD83AF6 +:1064080000007AB800007AC0800382208002DC2C69 +:10641800800389E08002E278800098FC0000000C8C +:10642800800389EC800094C480005D64D4211897AF +:106438001696580CC041E06C00F6D8224C1890888B +:10644800EDB80001C0A14C08201D1ADB1ADC4BFC7A +:106458001AD8F01F003F2FCD4BA89088EDB8000147 +:10646800C0F16C481AD8ED1800241AD8ED18001C91 +:106478001AD84B584B7C1AD8F01F00352FCD0C9BDF +:106488000E9CF01F0035EDDCB008ECC8FFEAEE0802 +:1064980003285808C0804B18201D4B1C1AD8F01F21 +:1064A800002C2FED6EFCF01F002FECC8FFEAEE0861 +:1064B800092C4A489088EDB80001C0A14A28201D3F +:1064C8001ADC4A9C1AD61AD8F01F00212FCDECC826 +:1064D800FFEAEE0803285808C10149A99209F00902 +:1064E8001900C08449881AD74A0C1AD8F01F001816 +:1064F8002FEDE06C00FFD8220E9B2F06EE0600263B +:106508006C1CF01F001B49BB6C1CF01F001B49BB17 +:106518006C1CF01F001B6C1C304A49ABF01F001AA2 +:106528000E9CF01F001A583CE08B00075C5C300A98 +:106538000E9BF01F0017F01F00178F7CD82A000051 +:10654800000016A2800382E8800389F0800094C4CA +:1065580080038A1480004E0C80038A3880039DC013 +:106568008002E2A4800388A8800388C48000D658EB +:10657800800069888000D65C80005ACC8000D6688C +:106588008000659C8000D6728000204480002A002C +:1065980080009504D43118971695580CC041E06CCA +:1065A80000F6D832F01F00473FF8EDDCC008F006CF +:1065B8001800C041E06C00FFD832ECC8FFF8EE08C4 +:1065C80003285808EFD6E108F1F91868F7B901FF70 +:1065D800F1F91E68EE0600083049F1380068F20843 +:1065E8001800E088001E4B89920A3009F20A190047 +:1065F800C0A41AD84B581AD74B5C1AD51AD8F01F12 +:1066080000352FCD0C070A9C3006301BEF6600685A +:10661800F01F0031E06C00FBEF66006CD8325805C3 +:10662800C1504AE89088EDB80001C101EAF800A815 +:106638001AD8EAF8009C1AD8EB3800AD1AD84A38AC +:106648004A7C1AD8F01F00232FCDECC8FFF8EE08BB +:1066580003245804C1D049C89088EDB80001C1810D +:10666800EE060008301BF1330068F132006C0E9C16 +:10667800F01F001C4958201D1AD41AD21AD31AD751 +:106688001AD51ADC498C1AD8F01F00122F8D0A9BD4 +:106698000E9CF01F0016EE0600033002E738006C6F +:1066A800E4081800C7100A9CF01F00113FF8E9DC45 +:1066B800C008F0041800C1D13018E768006CC4A8FD +:1066C800800050AC000016A280038C8C80038A4C9A +:1066D800800094C48000E124000016A880038A7C0E +:1066E80080004E8480038AB0800052C08000E50498 +:1066F800EE060028E762006C711B0E9CF01F002359 +:106708004A389088EDB80001C0E1ECC8FFEAEE080D +:106718000328201D1AD849F81AD649FC1AD8F01FA0 +:10672800001F2FCDECC3FFEAEE03032C580CC0600A +:10673800F01F001B3008EE03092849589088EDB86F +:106748000001C0814938201D496C1AD8F01F001378 +:106758002FED48F89088EDB80001C1610E9C301B00 +:106768000C07EF37006CF01F001048A81AD65C64BD +:106778001AD41AD71ADC48DC1AD51AD8F01F000721 +:10678800300C2FADD832D83A80004D98000016A2B0 +:1067980080038C8C800385B0800094C48002E28CD6 +:1067A8008003862480004E8480038AF0D4311897B1 +:1067B8001695580CC041E06C00F6D832F01F003E28 +:1067C8003FF8EDDCC008F0061800C041E06C00FF9F +:1067D800D8324BA89088EDB80001C1A1EE06000898 +:1067E800F1340068F133006C4B58301B11820E9C59 +:1067F800F01F00344B48201D1AD21AD31AD41AD7C6 +:106808001AD51ADC4B1C1AD8F01F00312F8DEE0652 +:1068180000083009F13A006CF20A1800C060F1393A +:1068280000682FF9F1690068EE060008F134006885 +:106838003088F0041800E08800224A68900930087F +:10684800F0091900C104301B0E9CF01F001E49E816 +:10685800201D1AD41AD71ADC49FC1AD51AD8F01FE9 +:10686800001C2FAD30080C070A9CEF680068301B2D +:10687800F01F001AE06C00FBD83249181189300863 +:10688800F0091800C0500A9B0E9CF01F0015EE0678 +:1068980000043008E939006CF0091800C6100A9C99 +:1068A800F01F00103FF8F00C1800C1D13018E9684B +:1068B800006CC3E8800050AC000016A800007B07FD +:1068C80080004E848003824C80038B2C800094C40B +:1068D800000016A280038B6C8000E124800052C067 +:1068E8008000E5040E9CF01F001F49F89088EDB861 +:1068F8000001C0E1ECC8FFEAEE080328201D1AD801 +:1069080049A81AD649AC1AD8F01F001A2FCDECC4E2 +:10691800FFEAEE04032C580CC060F01F0017300883 +:10692800EE040928EE0600083009F169006C48E811 +:106938009088EDB80001C1410E9C301BEE060006A0 +:10694800ED37006CF01F000D48881AD71ADC48CCC8 +:106958001AD51AD8F01F0007300C2FCDD832D83AE4 +:1069680080005644000016A28003824C800385B044 +:10697800800094C48002E28C80004E8480038B984F +:10698800D4311294580A5F1830091497F204180089 +:106998005F0318961695E7E80008F2081800C55036 +:1069A800335CF01F00406CC98EC8F20800088DC81F +:1069B8006C385808C0614BC89088EDB80001C231E6 +:1069C8004BA89088EDB80001C0918EC81AD84B88A2 +:1069D8004B8C1AD8F01F00382FED4B889088EDB8F3 +:1069E8000001C0C14B28201D4B5C1AD8F01F003293 +:1069F8008ECB6E1CF01F00332FEDED08001A2FF818 +:106A0800ED58001A0A9AED3B00140E9CF01F002E58 +:106A18004A689088EDB80001C1218EC8201D1AD897 +:106A28001ADCED38001430091AD91AD71AD51AD831 +:106A380049F84A6C1AD8F01F00202F8D0E9CF01FC1 +:106A48000024335CF01F002358075F081063C160FF +:106A580049689088EDB80001C0C1201D1AD5ED38ED +:106A680000141AD8492849CC1AD8F01F00132FCD82 +:106A78000A9B0C9CF01F0019C1385804C11048B873 +:106A880090093008F0091900C0B44898201D5C64CA +:106A98001AD7493C1AD41AD8F01F00072FCDD83A74 +:106AA8008000A300000016A6000016A280038C98A0 +:106AB80080038BC8800094C4000016A080037C84E7 +:106AC80080013DB48000713080038BD88000D13CB8 +:106AD8008000A2E680038C108000585480038C3C10 +:106AE800D42148C8189716969088EDB80001C0A11F +:106AF8004898201D1ADB1ADC488C1AD8F01F0008A9 +:106B08002FCDF7D6C0100E9CF01F0006D82200002B +:106B1800000016A280038D0480038C50800094C46A +:106B28008000D984D4213007C1B80C9C0E9B2FF665 +:106B3800F01F000D1895C0F078485808C0C1F01F24 +:106B4800000B0A9CEB35000BF01F00090A9B5C5CEC +:106B5800F01F00085846CEA12FF75827C03030063E +:106B6800CE5BD82280002024800056A080002044DC +:106B780080002068D4214978F00C07085808C071B3 +:106B88004959F20C070AF00A1800C1F04929F20C19 +:106B9800070AF4081800C1904909F80C001CF0080D +:106BA8000017A567EE0C0027120748D99289EDB99E +:106BB8000004C0C11AD848B81ADA48BC1AD71AD87B +:106BC800F01F000A2FCDC02830070E9CD8220000E5 +:106BD8000000153C0000153800007B2C000016A6AC +:106BE8008003901080038DE0800094C4D421169710 +:106BF8001496F01F0005C0609828AC087808301C6F +:106C08008F08D82280006B7CD43149B849B91092DA +:106C1800F00C0708F20C070718961AD7498C1AD8EF +:106C2800EC060014F01F001749732FEDA36431E53B +:106C3800EE070018A568E8080008E60800087009CB +:106C48005809C0C090BA90AB1ADB1AD9702848FC12 +:106C58001AD81ADAF01F000B2FCD2FF7E406070811 +:106C68005C57EE051800F9B70000EE081800CE11C1 +:106C7800D8320000000015380000153C80038DF460 +:106C8800800094C400007B2C80038E0CD431201D1E +:106C98004A181896F00C07073005F80C001849F048 +:106CA800A36849F149F231E349F4EE070019A569EF +:106CB800F0090009E0090009720A580AC1D0923B9C +:106CC800922A8289F40B010CE2190010F8050005DC +:106CD8005C855809C1105C7B5C7AF3D5C010201D17 +:106CE800492C1AD91ADB1ADA1AD61AD25068F01FA8 +:106CF80000102FAD40082FF7E80607095C57EE0390 +:106D08001800F9B70000EE091800CD010A9C2FFD04 +:106D1800D83200000000153C00007B2C000016A6AD +:106D280080038DA00000153880038E28800094C44D +:106D3800D421F01F000B48B8EFDCB0109088EDB8F4 +:106D48000004C0A10E985C781AD84878487C1AD8F4 +:106D5800F01F00072FED0E9CD822000080006C94D5 +:106D6800000016A680038D7080038E4C800094C4AA +:106D7800D4214A181897169631D9F20C1800E088D1 +:106D8800000F90093008F0091900C33449B81ADC1B +:106D980049BC1AD8F01F001B2FEDD822F60B001A99 +:106DA8009088F80C0019E2180010A569F20A002969 +:106DB800495AF40903055808C0A04908201D1ADCDF +:106DC800492C1AD51AD8F01F000F2FCD0A9CF01F96 +:106DD80000103008EC060016EE07001748A9A56752 +:106DE800EE060026F20600068D288D08AC28AC3881 +:106DF800D8220000000016A280038DD080038E6880 +:106E0800800094C400007B2C80038E888002E28C72 +:106E1800D4314948F80C00121896F00C0707A36201 +:106E2800491331E44915EE070018A568E40800087D +:106E3800E60803085808C0500E9C0C9BF01F000C75 +:106E48002FF7EA0607085C57EE041800F9B70000A8 +:106E5800EE081800CE914839300CF2060B08D832EB +:106E68000000153C00007B2C0000153880006D7870 +:106E7800D4211897580CC0E14A189008F80819004E +:106E8800C3C44A08201D4A0C1AD8F01F00202FED51 +:106E9800D82249FAF40B070CF8CEFFFFF80C001CB7 +:106EA800A56CF40B0B0E3008F60B0019F809002935 +:106EB800498CF809000993289308B228B23831E9B7 +:106EC800F20E1800C031F40B0B0848D89088EDB8C2 +:106ED8000004C10148E8F00B07081AD848E8F00B8D +:106EE80007081AD848781AD748CC1AD8F01F0007CC +:106EF8002FCD0E9CF01F000AD8220000000016A219 +:106F080080038D8480038E98800094C40000153C13 +:106F180000007B2C0000153880038DE08002E28C95 +:106F2800D42118970E9CF01F0005C060780C0E9BAA +:106F3800F01F0003CF8BD82280006B7C80006E7816 +:106F4800D421496818971696149512949088EDB82C +:106F58000001C0C14928201D1AD91ADA1ADB1ADC27 +:106F6800490C1AD8F01F00102FAD301B0A9CF01FD7 +:106F7800000FC080301B0A9CF01F000C784858088E +:106F8800C0510C9B0E9CF01F000A5804C0500A9B6D +:106F9800089CF01F0008D822000016A280038D600C +:106FA80080038EAC800094C48000202480006AE8AE +:106FB80080006E78D4211897F01F00061898C02119 +:106FC800D8220E9A782C700990ABF01F0003DA2AA9 +:106FD80080006B7C80006F48D42116961494189515 +:106FE800F01F001E1897C021D8229838982B7809CE +:106FF800F6081900C2B2F5D8C0105804C050F20AF9 +:107008000708AC88C068F20A0709AC892FF8B838B5 +:1070180049389088EDB80004C0D10D881AD86E0898 +:107028001AD88EB81AD848F848FC1AD8F01F000F9A +:107038002FCD8E3B8E28F6081900C0710A9A5C7B0A +:107048006E2C6E09F01F000ADA2A0A9A5C7B782CEB +:10705800F01F0007D82A000080006B7C000016A6ED +:1070680080038D9080038ED4800094C480006F4884 +:10707800D4211897F01F00231896C021D8224A2837 +:107088009088EDB80004C0D178081AD898A81AD802 +:107098008CB81AD849D849EC1AD8F01F001E2FCD41 +:1070A8008C398C28F0091900C020DA2A49A8908860 +:1070B800EDB80004C1614998201DF0070709498807 +:1070C8001AD9F00707081AD8F20818005F191AD950 +:1070D8006C081AD848D8493C1AD8F01F000E2FADB2 +:1070E8006C2C6C090E9A8CABF01F000F48C8F00787 +:1070F800070948A8F0070708F00918005F1CD822FC +:1071080080006B7C000016A680038DBC80038EE88F +:10711800800094C4000016A2000015380000153C39 +:1071280080038F0080006F48D43118951697149308 +:10713800580CC0311894CBD8F60B001A4A58F00BEB +:107148000708F0080019A569F20A00294A2AF40973 +:1071580003095809C1604A1A940B300AF40B190044 +:10716800C0A4201D1AD849E81AD949EC1AD8F01F2A +:10717800001E2FCD49780E9BF007070CF01F001B4F +:10718800301B8ACCF01F001A18961894E0800092E1 +:10719800189B30098ACA0A9CF01F00168A485C8C22 +:1071A800F00C1900C2C048D9920A3009F20A190035 +:1071B800C0B45C781AD848A81AD648FC1AD51AD888 +:1071C800F01F00092FCD0C9C3004F01F000CC718CD +:1071D8000000153800007B2C000016A280039004E4 +:1071E80080038F2C800094C480006D788002DC3C82 +:1071F8008000CEC480038F548002E28C4AE9F207F3 +:10720800070AF4CBFFFFF40A001AA56AEE07001874 +:10721800F2070B0BF40800284A8AF4080008300A21 +:107228009123B02C9106B03A31E8F00B1800C03128 +:10723800F2070B0A4A084A29F0070708F207070964 +:10724800F0091800C1C149F9920A3009F20A190077 +:10725800C0A4201D1AD81AD849B849CC1AD8F01F8A +:10726800001C2FCD4948F00707095809F9BA01FF52 +:10727800F3DAE109F9B9001DF0070B0949189088FC +:10728800EDB80004C1618AC848DAF407070A201D6E +:107298000D891ADA488AF407070A1ADA1AD91AD8A5 +:1072A80048981AD648BC1AD71AD8F01F00092F8D4B +:1072B800089CD8320000153800007B2C0000153CD3 +:1072C800000016A28003900480038F90800094C46D +:1072D80080038FBCD431203D1690502A1895F01F9A +:1072E8000021301BE5DCB010F9D2C010F01F001EE1 +:1072F8001896C2C049D8EA050019F0050707A3691E +:10730800189431E849A1189349ABEE070016A56611 +:10731800F2060006F60600066C0B580BC0B0089C77 +:107328008CAA50095018F01F00148CAA4018140495 +:1073380040092FF7E205070A5C57EE081800F9B76D +:107348000000EE0A1800CE110696402A5800E1F611 +:107358001A00580AF5F21C000C9C2FDDD8320000E8 +:1073680080006C948002DC3C0000153C000015385D +:1073780000007B2C8002E736D431303818971693FA +:107388001494F00C1800E088001B48989009300805 +:10739800F0091900C0353005CA2848681ADC3005DC +:1073A8001AD8485CF01F00052FEDC998000016A2F6 +:1073B80080038DB080038FE0800094C4F80C001A1D +:1073C8004C88F00C0708F0080019A569F20A002992 +:1073D8004C5AF40903095809C1604C4A940B300A05 +:1073E800F40B1900C0A4201D1AD84C181AD94C1C2B +:1073F8001AD8F01F00412FCD4BA80E9BF007070CA1 +:10740800F01F003E0892301B5C72049CF01F003C89 +:1074180018961895C640049A069BF01F003AEE0786 +:1074280000184B03E6070702E4020012A562E4080D +:1074380000224AD83001F0020002300B8506A4244D +:10744800A4310E9CF01F0030852CE60707082FF8A2 +:10745800E6070B0831E9F2081800C031E6070B010E +:107468004A084AA9F0070708F2070709F0091800AF +:10747800C1C149E9920A3009F20A1900C0A4201DC5 +:107488001AD81AD849A84A2C1AD8F01F001B2FCD91 +:107498004948F00707095809F9BA01FFF3DAE10981 +:1074A800F9B9001DF0070B0949089088EDB80004E8 +:1074B800C1610D884959F2070709201D1AD9489951 +:1074C800F20707091AD91AD848985C74491C1AD4C3 +:1074D8001AD61AD71AD8F01F00082F8D0A9CD8324E +:1074E8000000153800007B2C000016A280038DB028 +:1074F80080038F2C800094C480006D788002DC3C6F +:107508008002E736800020240000153C80038F901D +:1075180080038FBCD401E06A05A0300B482CF01F13 +:107528000003D80200007B2C8002E8BCD421202D67 +:10753800FE782800501C500B3FF7109E301CC308E3 +:10754800300B7049EDB90001CFD17049EDB9000990 +:10755800CFD140195809C0B01396F2C5FFFE138960 +:107568005015EDE91089F7D9D010C038F7D7D010E9 +:10757800913B7049EDB90000CFD17C2B40095C8B61 +:107588005809C080B29BF7DBC108B28B40092FE9CC +:107598005009F80A1900E0880006202A5C8A580A6F +:1075A800CD01FE78280070482FEDD822580CC06015 +:1075B800FE782800300A7019C058FE78280030FA82 +:1075C8007019F3DAD20491195EFC202D3008E069B5 +:1075D80013885018F8090249C058401A2FF82FFA92 +:1075E800501A1238CFB12FED5EFCD703D401303CCE +:1075F800F01F0005C060303CF01F0004F01F0004BD +:10760800D402D6038000A3708000A38880014014B0 +:10761800D401580CC060300B303CF01F0004D80275 +:10762800303CF01F0003D8028000A31A8000A35C3E +:10763800D401202D3008B888303CF01F0022303C9F +:10764800F01F0021309CF01F001F307CF01F001D30 +:107658003008501840192FF950192FF8E04861A840 +:10766800CFA1309CF01F00193008501840192FF98D +:1076780050192FF8E05886A0CFA1307CF01F0013D6 +:10768800340B300A492CF01F0013FE782800302AEA +:1076980070C9F3DAD108308A91C970C9F3DAD08495 +:1076A800301A91C970C9F3DAD06191C970C9F3DA97 +:1076B800D001303C91C9F01F00082FEDD80A000016 +:1076C8008000A2A88000A2BE8000A2E6800075F417 +:1076D8008000A3A08000A388D42120AD4C68E3B823 +:1076E8000001D5533017FE6810007109F3D7D20294 +:1076F800303AF1490040E06B1B00EA1B00B7FE7C02 +:107708000C00F01F003E310A201D30081ADA0E99CD +:10771800109B308AFE7C0C00F01F003930080E994F +:107728000E9A109BFE7C0C00F01F0036300BFE7C7E +:107738000C00F01F0035FE7C0C00F01F0034300CEC +:107748001ADC18981899189A1ADC189BFE7C0C00F9 +:10775800F01F002F0E9CF01F002F302BFE7C0C001A +:10776800F01F002DF01F002DD503304AFAC7FFD0B7 +:107778004ABB0E9CF01F002B302B0E9CF01F002ADA +:10778800FAC8FFDC4A99722C109B912CE06AF980A8 +:10779800EA1A0337F2E40000FE7C1800F0E5000066 +:1077A800F01F0023308A4A3B0E9CF01F001E310A4E +:1077B800FAC6FFEC300B0C9CF01F001F3018304B42 +:1077C800FB68002149DCF01F00180C9BFE7C280098 +:1077D800F01F001B3009FE7C2800129B129AF01F34 +:1077E80000190E9C0E96304BF01F000F2FCDFAC7D4 +:1077F800FFD8C2D8800376008000A5088000A4B016 +:107808008000A4CE8000A4E68000A4F48000A470C8 +:107818008000A2228000A4FE8000A3D080039038BC +:107828008002E7368000A2808003901C8000AA1C9A +:10783800800390308002E8BC800390288000A66214 +:107848008000A69C0D8C2FE6F01F000F0E36CFB1DE +:10785800FACBFFFCFE7C2800F01F000C3009FE7CF0 +:107868002800129A129BF01F000AFE7C2800F01FC5 +:107878000009302CF01F0008FE7C2800F01F0005CE +:107888002F6DD8228000A2BE8000A6628000A69C30 +:107898008000A7EC8000A2E6D42130A81896F00C4E +:1078A8001800C0C1E067271020175BF7C13030DB34 +:1078B800FE7C1800F01F0008CF81E0672710201712 +:1078C8005BF7C0800C9BFE7C1800F01F0003CF8183 +:1078D800D822DC2A8000A9AED401178A17B91798D4 +:1078E800B168F1EA118817AAF1EA1088F3E81008DC +:1078F8001AD81ADC483CF01F00042FEDD80200000B +:1079080080039064800094C4D421202D4AB811D9F2 +:10791800BAD97009500911C8BAC81A961895169498 +:10792800581CE08900064A6CF01F0026C448761CE3 +:10793800F01F0025201DEFDCC0084A4C1AD7F01FA5 +:1079480000212FED5825C2A0682CF01F001F201D14 +:10795800EDDCC00849EC1AD6F01F001A30182FEDDC +:10796800F0061800C111305A49AB0E9CF01F001ADE +:1079780030AA49AB0E9CF01F00180E9C308A498B28 +:10798800F01F0015C1883028F0061800C141300AE0 +:107998000E9C149BF01F0013C0E83038F007180045 +:1079A800E08B000A300B0E9CF01F000F1A9B306A08 +:1079B800F01F000E2FEDD82A800396B88003909808 +:1079C800800094C48002DC2C800390C4800390D093 +:1079D800800390E480007380800390EC800390F82B +:1079E800800072DC8000202480005140D421189649 +:1079F8001695582CC45176174B3B0E9CF01F00333C +:107A08001896C1014B2CF01F00334B38FE798000CB +:107A1800B0094B28B0064B28B0064B28B006E08FBB +:107A280001C44B1B0E9CF01F0029C1D14AA89088A5 +:107A3800201D4AEC1AD8F01F00274A8890884ACCA3 +:107A48005008F01F00244A6890884AAC5008F01F7C +:107A580000214A4890884A8C5008F01F001E2FEDDC +:107A6800E08F01A30E9C4A5BF01F0018C0C14A4C6E +:107A7800F01F0018E06900FF4978E08F0195582C45 +:107A8800E089000749FCF01F0013E08F018E762C77 +:107A9800F01F001D18975836E08101876A1649BB08 +:107AA8000C9CF01F000AC53148B85807E08A000846 +:107AB8009009A1A9B0095817C2A1C3089009A1C982 +:107AC800B009C2C8800391048002ECC88003910801 +:107AD800800094C4000016A2000016A6000016A09C +:107AE800000016A8800391148003911C8003913430 +:107AF8008003914C800391648003E18C8003917C26 +:107B0800800391888002DC2C800392144B799208C0 +:107B1800A1A8B2085827C071C0D84B499208A1C87B +:107B2800B208C0884B299208A1A8B2085837C0717A +:107B3800C0A84AF99208A1C8B208C0584AD9920800 +:107B4800A1A8CAC84AB99208A1C8CA884AAB0C9C5D +:107B5800F01F002AC2F14AA85807E08A00089009D5 +:107B6800A3A9B0095817C061C0C89009A3C9B00932 +:107B7800C08849E99208A3A8B2085827C071C0D89C +:107B880049A99208A3C8B208C08849999208A3A82D +:107B9800B2085837C071C0A849599208A3C8B2089A +:107BA800C05849499208A3A8C79849299208A3C868 +:107BB800C758494B0C9CF01F0011C3E149085807EE +:107BC800E08A00089009A1B9B0095817C061C1B886 +:107BD8009009A1D9B009C17848499208A1B8B2085A +:107BE8005827C161C1C80000000016A6000016A0F1 +:107BF800000016A88003921C8002ECC8000016A2A0 +:107C0800800392204B699208A1D8B208C0884B59CA +:107C18009208A1B8B2085837C071C0A84B19920889 +:107C2800A1D8B208C0584B099208A1B8C3784AE94C +:107C38009208A1D8C3384ADB0C9CF01F002DC30161 +:107C48004AC85807E08A00089009A3B9B00958172C +:107C5800C061C0C89009A3D9B009C0884A09920870 +:107C6800A3B8B2085827C071C0D849D99208A3D878 +:107C7800B208C08849B99208A3B8B2085837C07189 +:107C8800C0A849899208A3D8B208C058496992087F +:107C9800A3B8C04849499208A3D8B208C858496B44 +:107CA8000C9CF01F0013C3D149285807E08A00082C +:107CB8009009A5A9B0095817C061C0C89009A5C9FD +:107CC800B009C08848699208A5A8B2085827C151C8 +:107CD800C1B848399208A5C8B208C168000016A6FC +:107CE800000016A0000016A8800392248002ECC8A9 +:107CF800000016A2800392284AC99208A5A8B208D3 +:107D08005837C071C0A84A999208A5C8B208C05887 +:107D18004A799208A5A8CC2B4A599208A5C8CBEB5A +:107D28000C9C4A4BF01F0024C3F14A485807E08ACC +:107D3800000B9009EA19FFFFE8198000B0095817ED +:107D4800C071C1089009F3D9C00FB009C0B849C9BA +:107D58009208EA18FFFFE8188000B2085827C08187 +:107D6800C11849789009F3D9C00FB009C0B848F9CB +:107D78009208EA18FFFFE8188000B2085837C08157 +:107D8800C0E848A89009F3D9C00FB009C08848894D +:107D98009208EA18FFFFE8188000C80B48489009C5 +:107DA800F3D9C00FB009D82A000016A0000016A801 +:107DB800800392308002ECC8000016A2000016A6CC +:107DC800D421582CC2717617495B0E9CF01F001500 +:107DD800C1211897494CF01F0015201D494C1AD78E +:107DE800F01F00120E9C2FF7F01F00122FED5847BE +:107DF800CF51C1380E9CF01F0010201DEFDCC008C9 +:107E080048BC1AD7F01F00090E9CF01F000A2FED7E +:107E1800C04848ACF01F0005D82A000080039238FB +:107E28008002ECC88003923C800094C4800390C414 +:107E380080006C108002DC2C80039250D421207DBD +:107E4800306A18951696FAC7FFEAE06B00FF0E9C99 +:107E5800F01F00385825C1B16C1C4B7BF01F003750 +:107E68001896C4B14B6CF01F00370E9B0C9CF01F8A +:107E780000360E9B301CF01F00340E9B0A9CF01F2E +:107E880000320E9B303CF01F0030C5085825E08AB0 +:107E980000356C1CF01F002D6C2B1897500B169C8E +:107EA800F01F002B58DC5F04585C5F08E9E81008F5 +:107EB800ECC5FFFC109418963008FACCFFF8400B7C +:107EC800F0041800C0500C9AF01F0022C238F01FAE +:107ED800002258375F98580C5F091896F3E8100885 +:107EE800E8081800C0A15807C085C0916A08118920 +:107EF8003308F0091800C030498CC098585C5F18E6 +:107F080058DC5F19F3E80008C050495CF01F000D09 +:107F1800C0D85C570C9BFAC9FFEAFACAFFF80E9C56 +:107F2800F01F00100E9CF01F00102F9DD82A000093 +:107F38008002E8BC800392808002ECC880039288AB +:107F4800800094C48001921C8002DC2C8002EDD059 +:107F58008002EE0C800098688003929C800392DC7B +:107F68008001927080019258D421204D4ABC149609 +:107F7800F01F002B1A9CF01F002B581CC0504AAC55 +:107F8800F01F0027C0A81A9CF01F0028201D1ADC2B +:107F98004A7CF01F00232FEDF01F002618974A6C2B +:107FA800F01F001F5807C0514A4CF01F001DC04861 +:107FB8000E9CF01F00234A376E0CF01F0023C1F0FF +:107FC8006E087018201D1AD8F01F0020500C4A0C9B +:107FD800F01F00136E0870285008F01F001C500C8A +:107FE80049CCF01F000F6E0870385008F01F0017BA +:107FF800500C499CF01F000A2FEDC048497CF01F27 +:108008000008497CF01F00060DC93018F009180057 +:10801800C2A1494CC298000080039314800094C404 +:10802800800191288003932C8000967080039348E8 +:108038008001997C80039358800393A880009784DB +:10804800000080D08000CAE4800096A8800393686E +:10805800800393788003938880039398800393B078 +:10806800800393B8493CF01F0014FACCFFF4300B9E +:10807800F01F0012301B4037FACCFFF8F01F000F3A +:10808800201D1AD750574047F01F000D500C48DCF0 +:10809800F01F000950075047F01F0009500C48AC6A +:1080A800F01F0005F01F0009300C2FED2FCDD8224E +:1080B800800393C4800094C48000C1EC800096A81B +:1080C800800393D080039DC08000495CD421202D7B +:1080D8001695584CE089000649ECF01F001FC3684C +:1080E800FACCFFFC761BF01F001D6A2C4014F01F11 +:1080F800001C18976A3CF01F001A18966A4CF01F6B +:108108000018501418951ADC496C1AD61AD71AD4C4 +:10811800F01F0011089CF3D5C008F5D6C0080E9BC7 +:108128005C7BF01F00112FCD5BFCC10148F8900962 +:108138003008F0091900C0A448D81AD548DC1AD666 +:108148001AD71AD8F01F00042FCD2FEDD82A000017 +:10815800800393DC800094C4800098FC8002DC2CAF +:108168008003941480003958000016A280039054AC +:1081780080039448D4211695583CE089000649CCE0 +:10818800F01F001CC338761CF01F001B18976A2CC0 +:10819800F01F001918966A3CF01F00174978201D37 +:1081A80018941AD649651AD7580CF0051710495C67 +:1081B8001AD5F01F0010089AF7D6C0085C5A0E9C12 +:1081C8005C7CF01F00112FCD5BFCC10148F89009C1 +:1081D8003008F0091900C0A448D81AD648DC1AD7C4 +:1081E8001AD51AD8F01F00032FCDD82A80039488F7 +:1081F800800094C48002DC2C80037DC480037DC889 +:10820800800394B880003C50000016A28003969C1E +:10821800800394DCD421206D1697582CE089000641 +:108228004A4CF01F0025C438761CF01F00246E2B22 +:10823800F8C700011A9CF01F0022304A1A9BFAC6A0 +:10824800FFEC0C9CF01F001F201D40681AD8F01F7F +:10825800001E1ADC49DC1AD7F01F00170C9B0E9C75 +:108268005C5CF01F001BFACCFFE0300BF01F00191C +:10827800301B4087FACCFFE4F01F00162FDD505763 +:108288001AD74056F01F00101AD71ADC492C50870D +:10829800F01F00092FDD50461AD6F01F000B1AD622 +:1082A8001ADC48EC5076F01F00042FCD2FADD82AE9 +:1082B80080039510800094C48002DC2C800098FC18 +:1082C8008002E736800096A8800395388000C19C1C +:1082D8008000C1EC8003955480039564D421FACDC5 +:1082E8000108581CE0890006491CF01F0012C1D87B +:1082F800F6C9FFFCF8CA0001FAC7FFFCE06B0100F1 +:108308000E9CF01F000DC110300948CAFACBFEFCC4 +:108318000E9CF01F000B5C5CC0814418489C1AD866 +:108328001AD7F01F00042FED2BEDD82A800395747F +:10833800800094C480009710800078E08000C4C05A +:1083480080039064D43121AD18961695582CE08995 +:1083580000064A1CF01F0021C3B8FAC7FFFC344AC4 +:10836800300B0E9CF01F001E306AE06B00FFFACC49 +:10837800FFDBF01F001BFAC4FFB8EAC9FFFCECCA18 +:108388000002320B089CF01F00171893C210189AAD +:10839800089B0E9CF01F00143088FB6300242016F5 +:1083A800EA060326FB68003C0C9CF01F00100C9B9F +:1083B800189A30180E9C3089F01F000D581CC08088 +:1083C80048C8201D48CC1AD8F01F00042FED2E6D88 +:1083D800D83A000080039590800094C48002E8BCDD +:1083E800800097108002E7368002EDD080019084EB +:1083F80080039048800395B4D42121AD1696582C5B +:10840800C05049BCF01F001BC308FAC7FFFC344A20 +:10841800300B0E9CF01F0018306AE06B00FFFACC9E +:10842800FFDBF01F0015ECC9FFFC301AFAC6FFB8D5 +:10843800320B0C9CF01F00111895C170189A0C9BF8 +:108448000E9CF01F000F3088FB6500240E9CFB6813 +:10845800003CF01F000C581CC08048B8201D48BCC8 +:108468001AD8F01F00042FED2E6DD82A800395D45A +:10847800800094C48002E8BC800097108002E73630 +:1084880080018FF8800396AC800395ECD431204DA1 +:108498001493189516947406582CC091761C304A7B +:1084A8004A7BF01F0028C0513018C458584CC0806F +:1084B8004A5CF01F00264A6CF01F0024C3D8761BC4 +:1084C8001A9CF01F00240A9A1A9BFACCFFF4F01F9A +:1084D80000224A289088EDB80002C0B1201D40480B +:1084E8001AD849F81AD649FC1AD8F01F00182FCD07 +:1084F800FAC7FFF40C9C0E9BF01F001B682B1A9CFC +:10850800F01F0014304A1A9B0E9CF01F00130E9B9C +:108518000C9CF01F0016683B1A9CF01F000E304A96 +:108528001A9B0E9CF01F000C0E9B0C9CF01F001059 +:108538001A953008A6C82FCDD83A0000800392803B +:108548008002EDE680039610800094C48003964074 +:10855800800098FC8002E736000016A28003903C59 +:10856800800396688000CBC88000CA928000CA74D5 +:10857800D421212D581CE0890006491CF01F001148 +:10858800C1C8F6C9FFFCF8CA0001FAC7FFD8320B08 +:108598000E9CF01F000D1896C1000E9B189AFAC782 +:1085A800FFF90E9CF01F0009300BFB6600270E9C9C +:1085B800F01F0007F01F00072EEDD82A80039684CD +:1085C800800094C4800097108002E736800099A844 +:1085D8008000998CD401F01F0003F01F0003D80A13 +:1085E80080019EF880009820D40148BE1898300970 +:1085F8007C0C580CC0A1F2090019487EFC0900291E +:10860800932A9318930BD8022FF92F4E58F9CF11AC +:10861800DC0A000000001544D401484CF01F000497 +:1086280030194848B089D802800396C0800094C4A5 +:10863800000015F8D4314B68169570065806C050DE +:108648005816E08100BAC938580CE08000B5F01F10 +:1086580000314B18910C1897580CE08000AD19891F +:10866800EC091800C0415805C460C4284AB44AC37C +:108678008906C188EC060018E60800287012049CD8 +:108688005802C0E0F01F002718910E9CF01F00252B +:108698000E9BE20C0D4A049CF01F0023C3102FF61A +:1086A8008906680649D258E6FE98FFE658F6C28160 +:1086B8005805C210049749DCF01F001D3008498690 +:1086C8008508C128F0080018EC0800287009580926 +:1086D800C0807018201D497C1AD8F01F00152FED96 +:1086E8006E082FF88F086E0858E8FE98FFED492CA1 +:1086F800F01F000F4888700CF01F0010C5C80E9CB2 +:1087080048FB49074906F01F0011C2C8000016407F +:108718008002ED8400001644000015400000154456 +:108728008002EDD08002EDE6800396C8800094C4F4 +:10873800800396E0800396C48002E28C80039364F1 +:10874800000015FC000016008002EEB86E08EC0868 +:10875800092C2FF88F085908C070498B300CF01F6E +:108768000018580CCF41301949689109496949786E +:108778007008F0080018F20800284959702A720C8D +:108788007008494B5D18581CC1705805C040492CE9 +:10879800F01F001248E83007340A0E9B910748DCA6 +:1087A800F01F000F48F8700CF01F000F4858301CDD +:1087B8009107D832D83ADA3A800393648002EEB847 +:1087C800000016400000154400001540000015FC8C +:1087D80000001600800396C4800094C48002E8BCA0 +:1087E800000016448002E28CD421202D1897FACB81 +:1087F800FFFCFE7C1800F01F0012583CC080584C4B +:10880800C081E0690100FE7818009109301CC15848 +:10881800401C58DCC03130ACC0B8588CC081F01F47 +:108828000009320CF01F00071BFCC0285C5CF01F1D +:1088380000054018300CAE882FEDD8228000A9C260 +:10884800800078A0D431202D30A1FAC0FFF930D2B1 +:10885800308349B749B630043005009CF01F001A30 +:10886800C2A11BF8E20818005F0AE40818005F09B3 +:10887800124AF80A1800C0904929491A1298740B2C +:10888800950CF20B0B0CC188E6081800C0916E0815 +:108898002018F00C17708F0CEC0C0B04C0686E09D4 +:1088A800EC090B082FF98F096E08E0480050CD61DC +:1088B8008F05CD4B3008109C2FEDD832000016489C +:1088C8000000164C800087F0D401F01F0004301B14 +:1088D800F01F0003D80200008000884C8000863C0E +:1088E800D4314974169714951293580BC0B1680C7B +:1088F800580CC0311896C2181696F01F0012890736 +:10890800C1C868085808C0C1E06C0200F01F000E1A +:10891800890CC061189648DCF01F000DC0E80A9C5D +:10892800E066020048650C33E60617806A0B0C9A6D +:10893800F01F00086A088F080C9CD8320000169CAB +:108948008002E28C8002E2A4800396E8800094C44E +:10895800800090B4D401F01F0002D80A800091086A +:10896800D4213008FAC4FFEC19C9F0091800F9B885 +:108978000100E9F81A01E9F81A02E9F81A004A1898 +:108988001AD84A1818971AD8089B3008E8C9FFF867 +:10899800E8CAFFFC780CF01F001D8F0C2FED580C57 +:1089A800C021DC2AF01F001A300949AA301BE06CEC +:1089B8001388F01F00193009498A301BE06C00FA4F +:1089C800F01F00153009496A301BE06C01F4F01FF4 +:1089D80000123009493A301BE06CEA60F01F000EC3 +:1089E8003009491A301BE06C03E8F01F000B30090E +:1089F80048EA301BE06C03E8F01F0007DA2A0000A1 +:108A08008001365C80013C948000CCA88000CAB00C +:108A180080008A708000956C80008A6480008A5883 +:108A280080008A4C80008A4080008A34D401F01F7C +:108A38000002D8028000C664D401F01F0002D802E8 +:108A480080012984D401F01F0002D8028000B8B048 +:108A5800D401F01F0002D8028000C074D401F01FB6 +:108A68000002D8028000E68CD401F01F0002D80270 +:108A78008001326430194828B0895EFC000016AACB +:108A8800D401319CF01F0003319CF01F0003D80271 +:108A98008000A2D28000A2E6D421204D3FF819C957 +:108AA8001897F0091800F9B80001EFF80E0430081B +:108AB800201D1AD850581AD81AD850685058F01F84 +:108AC800001C49CB6E0CF01F001C0E9949BA49CB0B +:108AD80049CCF01F001D2FCD581CC08049B8201D5F +:108AE80049BC1AD8F01F001B2FEDF01F001BF01F08 +:108AF800001B0E9CF01F001AC0F049A8900930080E +:108B0800F0091900C0F44988201D498C1AD8F01FB3 +:108B180000112FEDC07830194958319CB089F01FE9 +:108B280000153018EF6800082FCDD822800089681A +:108B380080008C5C8000CAEE80008B7C80008BDC1F +:108B480080008A7C80009A188003973C80039DC02F +:108B5800800094C48000998C80019EF880002A9837 +:108B6800000016A28003972880039758000016A4D7 +:108B78008000A300D4211897333CF01F000F300663 +:108B88000FD8EC081800C0C048CCF01F000D6E0CC0 +:108B9800F01F000C6E0CF01F000CAED6C07848BC5D +:108BA800F01F00076E0CF01F000A3FFCF01F0009C1 +:108BB800D82200008000A2E680039774800094C445 +:108BC8008000B1D88000AE50800397908000CABC66 +:108BD80080002E60D42116971896333CF01F00149D +:108BE8000C9CF01F0014201D1ADC493CF01F0013D8 +:108BF80030182FED0FC6F0061800C121490CF01FE0 +:108C0800000F6E0CF01F000F48F849095C5CF20C6D +:108C18001700F00C1710F01F0009AED6C0486E0CF4 +:108C2800F01F000BF01F000BD82200008000A300EB +:108C3800800096E48003979C800094C4800397B8D2 +:108C48008000B950800397D080037FC08000CB8814 +:108C58008000C690D42149471896F01F0014189533 +:108C6800C110301CF01F00126C18201D1AD8F01FFC +:108C78000011500C490CF01F001130182FEDAE8870 +:108C8800D822AE8CF01F000E48E89008EA081900B8 +:108C9800C08448D8201D48DC1AD8F01F00082FEDE2 +:108CA800D8220000000016AB8000CAE480002E60C5 +:108CB800800096A8800397D8800094C480006B2C0D +:108CC800000016A28003995C800397E8D4211897C6 +:108CD800F01F0027300A4A7B4A7CF01F0028300A20 +:108CE8004A7B4A8CF01F00254A7B300A4A7CF01FD9 +:108CF80000230E9A4A6B4A7CF01F0020300A4A6B08 +:108D08004A6CF01F001E4A6B300A4A6CF01F001BA9 +:108D18000E9A4A5B4A5CF01F0019300A4A4B4A5CBB +:108D2800F01F0016300A4A4B4A4CF01F0014300A54 +:108D38004A3B4A4CF01F0011300A4A3B4A3CF01F9C +:108D4800000F300A4A2B4A3CF01F000C300A4A2B0D +:108D58004A2CF01F000A300A4A1B4A2CF01F000751 +:108D6800300A4A1B4A1CF01F0005D82280008620C2 +:108D7800800085DC80039804800085F08000857879 +:108D88008003980C80007E448003981480007F70D4 +:108D98008003981C800079F48003982480007DC8A3 +:108DA8008003982C80008494800398348000633476 +:108DB800800398408000834C80039848800084009A +:108DC80080039850800082E4800398588000821CB9 +:108DD800800398608000817C80039868800080D43C +:108DE800800398748000791080039880D4211897A4 +:108DF800F01F000BF01F000BF01F000BF01F000B03 +:108E08006E0CF01F000B48B811893008F0091800E3 +:108E1800C0406E0CF01F0008D82200008000951496 +:108E2800800088D080009504800193A080013BBC1D +:108E3800000016A480004758D421202D3029EE7850 +:108E48000000F1D9D1A23019F1D9D0033007501858 +:108E58000E9B5007337CF01F000F1A9BFE7C3800D6 +:108E6800F01F000D0E9BE06A01A4FE7C3800F01F85 +:108E7800000B0E9BE06A0348FE7C3800F01F0008D8 +:108E88000E9BFE7C3800F01F00072FEDD822000053 +:108E98008000A2308000A8388000A8F08000A926B1 +:108EA8008000A8D4D401333CF01F0009334CF01FD4 +:108EB8000008335CF01F0006333CF01F0006334CFB +:108EC800F01F0004335CF01F0003D8028000A2A842 +:108ED8008000A2E6D421202DF01F0034F01F0034BA +:108EE800F01F0034F01F0034E06C1B00EA1C00B7D0 +:108EF800F01F00324B28201D4B2C1AD8F01F0032CF +:108F080030CB301CF01F00312FED1897580CC08162 +:108F18004AF8201D4AFC1AD8F01F002B2FED344BBD +:108F2800301CF01F002A8F0CC0814A98201D4A9CD3 +:108F38001AD8F01F00252FED3FF80E9CAEC8F01F81 +:108F48000026300B169CF01F0025F01F0025F01F8F +:108F58000025C0804A48201D49EC1AD8F01F001A85 +:108F68002FEDFACAFFFC0E9B4A0CF01F0021581C7B +:108F7800C0C1401A49FB0E9CF01F001F581CC0516D +:108F88000E9CF01F001ECFDB58CCC04058DCC061DF +:108F9800C03849BCC04849BCC02849BCF01F000AB9 +:108FA800F01F001ACFEB000080008A88800076E06E +:108FB80080008EAC80008E408000AAE88003970C69 +:108FC80080039888800094C48002DC3C800398A8C1 +:108FD80080039DC080008CD4800095C88000C8E4C0 +:108FE8008000895C800398B8800088E880013E880A +:108FF80080008AA0800193BC80008DF4800398E4EF +:109008008003990C8003993080009514D4314A1458 +:1090180058095F081296189716951493A888E06067 +:109028000100E06100FFC2E88920A868E203190096 +:10903800E069FFFFE7D9E828E9F88A02E06901005A +:1090480088E8F2080108682989151039E9F8BA0290 +:10905800EE021608049CF01F0010301CF01F000FD1 +:10906800F01F000F5806C090049CF01F000E301C23 +:10907800F01F000DF01F000D6828101310071005D1 +:109088005C83F1D7C0085803CD01069CD832000094 +:10909800000016AC8000A0408000A19880009ED4FB +:1090A80080009F5C8000A17080009E94D4013009EC +:1090B8005C7AF01F0002D80280009014D40148584E +:1090C80090E9701B120C702AF01F0003D8020000F0 +:1090D800000016AC8002E736D4014888189B118A34 +:1090E8003009F20A1800C07090E9701C120B702A3F +:1090F800F01F0003D8020000000016AC8002E7361B +:10910800D421208D48D8F0E60008FAE70008F0EAF4 +:109118000000FAC8FFF0FAEB0000F0E70008F0EBF7 +:109128000000E06CF980EA1C0337F01F0005300CE2 +:109138002FCD2FCDD82200008003996C8000A1C0CC +:10914800D401FAC9FFFCF01F0002D80280031C1CDE +:10915800D401F01F0002D8028002EE88D401F01F6B +:109168000002D8028002ECACD401F01F0002D80241 +:109178008002F0ECD401F01F0002D8028002E71050 +:10918800D401F01F0002D8028002EE2CD401F01F97 +:109198000002D8028002ED84D401F01F0002D80238 +:1091A8008002ECC8D401F01F0002D8028002EE0C45 +:1091B800D401F01F0002D8028002EDD0D401F01FC4 +:1091C8000002D8028002E87ED401F01F0002D80213 +:1091D8008002E8BCD401F01F0002D8028002E73602 +:1091E800D401F01F0002D8028002E28CD401F01FE3 +:1091F8000002D8028002E8D0D401F01F0002D80291 +:109208008002E2A4D401580CC0707808B08B7808AA +:109218002FF89908D802F9DBC008F01F0002D8021D +:10922800800078A0D431189616971495580AE08AC9 +:1092380000153008109AC0282FF8EE08070BF40B19 +:109248001800CFB10A38F9B50400EBD8E515EDB927 +:109258000001C0313303C0283203E9D9C001C090EE +:109268003004C1082FF42015069B0C9CF01F000D3C +:109278005805FE99FFF9C0682FF42FF70C9CF01FD2 +:1092880000090F8B580BCF91C0782FF42015069B3F +:109298000C9CF01F00045805FE99FFF9089CD83271 +:1092A8008000920CD431204DFAC4FFCC109368177B +:1092B800189568041698580BC0B13308BADB08999A +:1092C800069ABAC8FACBFFFCF01F001FC3985809CA +:1092D8005F1B58AA5F09F7E90009C0605808C04435 +:1092E8005C383016C0283006EECB003A3009FAC791 +:1092F800FFF00EF9C0B8F00A0D00029912985898BC +:10930800F1DBE9082D080EF800985808CF515806E7 +:10931800C1005803C0B0EDB40001C08132DB0A9C23 +:109328002013F01F000A3016C04832D830060EF855 +:109338000899069A0E9B0A9CF01F00030C0C2FCD6F +:10934800D83200008000922C8000920CD431203D4D +:109358003007500A18951696325432D3330230919A +:109368003730C978E8081800E081008E2FF60D889C +:109378005808E0800093E8081800E0800085E608B7 +:109388001800F9B90100F7B600FFF9B90001C038B3 +:109398002FF6A1B90D88E4081800CFB03008C048EE +:1093A800F80E00182FF60D8AF008002EF4CC0030C5 +:1093B800F4CB0030E20B1800FE98FFF4E00A180026 +:1093C800C0A1109A4008110B50084B98580BF00B8D +:1093D8001700C548364BF60A1800C0A1361B400ACC +:1093E8001ADB1AD93019740B2FCA502AC358370BF5 +:1093F800F60A1800C121361A40091ADAF2CAFFFC27 +:10940800501A308A1ADA720B3009310A0A9CF01F96 +:1094180000292FED1807C3C8378BF60A1800C0417A +:10942800400A361BC078358BF60A1800C091400AEE +:10943800341B1ADB1AD9740B2FCA502ACE6B375B30 +:10944800F60A1800C0B1361B400A1ADB1AD93009CF +:10945800740B2FCA502A30AACDAB363BF60A180037 +:10946800C171109A4008700B2FC8FB6B0008500898 +:10947800FACBFFF83008FB6800090A9CF01F000EC1 +:109488001807C0682FF70D8B0A9CF01F000C2FF6E9 +:109498000D885808FE91FF685805EBF81000F9B9D7 +:1094A8000100F1F91E000E9C2FDDD8328003997C53 +:1094B800800092AC8000922C8000920CD401189B02 +:1094C800FACAFFFC300CF01F0002D8028000935447 +:1094D800D40148A972082FF89308F2F800CC58086C +:1094E800C040F2FC00D45D18FE780D003019918957 +:1094F8007078D402D6030000000001184838F0F94B +:1095080000D0700CB33C5EFC00000118D431495601 +:1095180030020C9730152F46EEC1FF2C0E930E9497 +:109528000D88E4081800C18166086E291039E08B9F +:1095380000146C185808C0306C2C5D180D98EA0897 +:109548001800E9F80000EFF90001F3D8E008EFF897 +:109558000A02EDF51E002EC62EC70236CE21D832DD +:1095680000000118D431300E189830A5494C1C96CB +:109578002FCCFCC3FFFF1897F9340008EC0418003F +:10958800C071FDD3C0082ECCEA0E1800CF311C9C48 +:1095980048B530030A96FC0E002EEAF500D0F00517 +:1095A8000D048F040D08EF630008EC0E0026080870 +:1095B800EF6B00098F188D498D3AD83200000118D9 +:1095C800D421300A16971896328B495CF01F001583 +:1095D800300AFE7C0D00149BF01F00134935FE7CF9 +:1095E8000D00EAFB00D0F60B1073A19BF01F0010D2 +:1095F800FE7C0D00F01F000FFE7C0D00F01F000E1A +:10960800EAC9FF2CEB4600CCEB4700D430182F45B5 +:10961800AA882EC51235CFD1D8220000800094D850 +:109628008000A3A08000A594000001188000A580F8 +:109638008000A57A8000A562D401306AF01F00027C +:109648005F0CD8028002E710D401F93A0020F738FD +:109658000020F4081800C020D80AF01F00035F0C8F +:10966800D80200008002E710D42119D919881AD924 +:1096780019C91AD919B91AD919A91AD91999486732 +:109688001AD9486A1AD8312B0E9CF01F00050E9C77 +:109698002FADD822000016E0800399848002EC40A8 +:1096A800D4214058F5D8C008F00916181ADAF5D8A8 +:1096B800C108F1D8C2081ADA48671AD8486A1AD90C +:1096C800310B0E9CF01F00050E9C2FCDD8220000F8 +:1096D800000016F4800399A48002EC40D421488746 +:1096E8001896321A300B0E9CF01F00060C9BED3AB0 +:1096F80000200E9CF01F00040E9CD822000016BC0F +:109708008002E8BC8002E736D431300318971696F9 +:109718001491129218950694C1D805002FF4009C54 +:10972800F01F0012F80300030C33E0880009201D25 +:1097380048FC1AD6F01F000F2FEDC108201DEE05BA +:10974800010B1AD00A9C0C0B48BAF01F000C2FED25 +:1097580018050234CE350E35C021D83A30080AF83B +:10976800EA07010CD83200008002EDD0800399B4DA +:10977800800094C4800399CC8002EC40D4211897CF +:109788002DFCF01F001B201D1ADC49ACF01F001A2D +:109798000E9CF01F001A500C499CF01F00176EC851 +:1097A800498C5008F01F00146EF82FED5818C0416E +:1097B800495CF01F0011EF3800383049F2081800F2 +:1097C800C0E03059F2081800C0603029F2081800CB +:1097D800C091C03848DCC04848DCC02848DCF01FCD +:1097E800000648DCF01F0004D822000080009670B4 +:1097F800800399CC800094C4800096E4800399D0BB +:10980800800399D8800399E8800399F480039A0823 +:1098180080039A1C800384D4D421202DFACCFFFC29 +:10982800F01F000C401870185808C04148ACF01FD1 +:10983800000B3007C0887008F007032CF01F0008E1 +:109848002FF75C57401870191237CF632FEDD822C5 +:1098580080018F0480039A40800094C4800097841C +:10986800D431202D300818921696BAE8169CF01FAD +:10987800001DEDBC0000C04149BCF01F001C3007B2 +:109888002FF649B30E94FAC5FFFCC208660BF6081A +:109898000709E2190044C210E04700405F9C0D8AA6 +:1098A800F60A0709E21900445F09F9E91009E8090D +:1098B8001800C131BADABAC8310A300B0A9C2FE64F +:1098C800F01F000CE4070B0C2FF7ED38FFFF5808CA +:1098D800CDE10E9C5C5CC028300C2FEDD832000026 +:1098E8008002EDD080039A50800094C40000049C4C +:1098F8008002F0ECD421204D1A981AD8FAC8FFF843 +:109908001AD8FAC8FFF01AD8FAC8FFE818971AD870 +:10991800169C49BBF01F001B2FCD584CC221403864 +:10992800E04800FFE08B001E402B580BC1A5E04B20 +:1099380000FFE089001740195809C135E04900FFC8 +:10994800E0890010400A580AC0C5E04A00FFE089D3 +:109958000009B16BF7E811881448F1E91088C028AC +:109968003008F0091618AEB8AE890E9CF3D8C208B4 +:10997800F1D8C108AE99AEA82FCDD82280039A603D +:109988008002EBF4486870085808F9BC00FFF9B980 +:109998000101F1F91E10F9BC01015EFC0000170479 +:1099A800D4214988169770085808C021DC2A580C19 +:1099B800C080189B321AF0CCFFEFF01F0013C0389C +:1099C800F16C003148F85807C080700C0E9B306A63 +:1099D8002CECF01F000DC088700C306A2CECE06B8A +:1099E80000FFF01F000A48787008F139003130088C +:1099F800F0091800C021DA2AF01F0005DA2A000051 +:109A0800000017048002E7368002E8BC80019EF857 +:109A1800D4314A241896169714951292680358035D +:109A2800C3B1338B301CF01F001E890C189BC0B1CA +:109A380049C89088EDB80003C2F1201D49A849BC67 +:109A48001AD8C10849ACF01F001B49691891581C65 +:109A5800C0E09288EDB80003C1F1201D4928496C87 +:109A68001AD8F01F00163FFC2FEDD8326808913243 +:109A7800F16300109106911791259288EDB80003C3 +:109A8800C020D8324888201D48DC1AD8F01F000BA7 +:109A9800029C2FEDD832DC3A000017048002DC3C2F +:109AA800000016A280039A8080039AE080009AC87A +:109AB80080018F2480039AF8800094C480039B203F +:109AC800D431202D1697581CC290C083582CC670CC +:109AD8004A78583CE08101A8C998F01F00264A48F6 +:109AE80018969088EDB80003C0A1F01F00234A38EB +:109AF8001ADC4A3C1AD8F01F00232FED333CF01F24 +:109B08000022334CF01F00216E185808E08001979E +:109B18006E3B0C9C5D18E08F019249589088EDB817 +:109B28000003C08149A8201D49AC1AD8F01F0015B0 +:109B38002FED334CF01F0014333CF01F0014EF39A5 +:109B480000103008F0091800E0800179F01F0012B9 +:109B5800581CE080017448689088EDB80003E081E3 +:109B6800016E201D48A848DC1AD8C659000016A264 +:109B78008001997C800096E480039AC880039B3812 +:109B8800800094C48000A3008000A2E680039CE8C3 +:109B980080039B5480019EF880039B784B589088E3 +:109BA800EDB80003C0814B48201D4B4C1AD8F01F5C +:109BB80000342FED4AF89088EDB80003C0814B18A7 +:109BC800201D4B1C1AD8F01F002E2FED333CF01F20 +:109BD800002F6E285808C0306E3C5D18EF39001011 +:109BE8003008F0091800E080012AF01F0029581CED +:109BF800E080012549F89088EDB80003E081011F55 +:109C0800201D4A084A3C1AD8C1699088EDB800035B +:109C1800C0814A18201D4A1C1AD8F01F00192FEDC0 +:109C28006E085808C0306E3C5D18EF3900103008D7 +:109C3800F0091800E0800103EF390031F00918003D +:109C4800E08000FDF01F00161894FACCFFFCF01F0E +:109C58000015581CC591401870185808C550300593 +:109C6800EEC1FFEFEEC3FFCE0A960A92C488000049 +:109C7800000016A280039ABC80039BAC800094C4A9 +:109C880080039A9880039BC48000A2E680019EF816 +:109C980080039BE880039AA880039C1C8001997C20 +:109CA80080018F04EF390031E4091800C080700882 +:109CB800029CF005032BF01F0041C1F0306A4C0BE9 +:109CC800069CF01F0040C0A040187008069CF005D4 +:109CD800032B2DFBF01F003CC1005806C0A0401804 +:109CE8006CC97008F005032870C81039E0890006AF +:109CF80040187008F00503262FF55C5540187019B8 +:109D08001235CD13C02830060C34C0415804E08108 +:109D1800009658065F1858045F19F1E90009C20057 +:109D2800089B0C9CF01F0025C1D068C8FE58FFC0D6 +:109D3800E08400856CCAF0C9FFF71439E084007F1D +:109D48004A299289EDB90003C0D1201D1ADA1AD820 +:109D580049F84A0C1AD8F01F00202FCDC0385808EF +:109D6800C0C0202DECCBFFDF306A1A9CF01F001B0F +:109D7800F01F001B2FEDC17849489088EDB800030B +:109D8800C0C1EECCFFEFF01F001749181ADC496C70 +:109D98001AD8F01F00112FEDEECCFFEFEF3B00318A +:109DA800F01F0012588CC060589CC2F0581CC21199 +:109DB800C458F01F000FC4288000965080039C38B8 +:109DC8008002EDE680009640000016A280039A8C7F +:109DD80080039C40800094C48002E73680019DDCAB +:109DE800800096E480039C6880019EA0800199CC45 +:109DF80049489088EDB80003C0814938201D493C86 +:109E08001AD8F01F00132FEDF01F0012581CC16064 +:109E180048C89088EDB80003C111201D48A848EC37 +:109E28001AD8C0989088EDB80003C081201D48B8A2 +:109E380048BC1AD8F01F00062FED2FEDD8320000CD +:109E4800000016A280039A8C80039C94800094C41E +:109E580080019EF880039CB080039ABC80039CCC50 +:109E6800D4012FEC580BC080F7DCC008FE7C28001A +:109E7800F01F0005D802F7DCC008FE7C2800F01FA0 +:109E88000003D8028000A6C68000A716D42148C7C0 +:109E9800C098300BFE7C2800F01F000A6E082FF8CF +:109EA8008F086E0CF7DCC008CF51F9DCC288F01FB0 +:109EB800000630194858B089D82200000000170859 +:109EC8008000A7FA80009E680000170CD40148683B +:109ED800300B700CF9DCC288F01F000430094848C8 +:109EE800B089D8020000170880009E680000170C8F +:109EF800D421202D4948301B700CF9DCC288F01F92 +:109F08000013E06B00D7FE7C2800F01F0011FAC791 +:109F1800FFFAE06B00FFFE7C2800F01F000D0E9B8F +:109F2800FE7C2800F01F000B9AB8EDB80007CF217F +:109F38004858300B700CF9DCC288F01F00042FED74 +:109F4800D82200000000170880009E688000A7FA49 +:109F58008000A816D421202D49B8A96C910C49B8C5 +:109F680011893008F0091800C030F01F00193009B5 +:109F780049684957B0896E0C301BF9DCC288F01F5C +:109F88000015E06B0082FE7C2800F01F00136E08AD +:109F9800F3D8C008FAC7FFF8F7D8C10CFE7C280030 +:109FA800F3EB109B0EDBB18BF01F000B0FABFE7CAD +:109FB8002800F01F00090FBBFE7C2800F01F0006D8 +:109FC8002FEDDA2A000017080000170C80009EF811 +:109FD80080009E688000A7FAD42149381897118913 +:109FE8003008F0091800C0604908700CA98CF01FEF +:109FF8000010EEC6FF000F3BFE7C2800F01F000D8E +:10A008000C37CFA14898300B700CF8CCFF00910C9E +:10A01800F9DCC288F01F000830194838301CB089B4 +:10A02800D82200000000170C0000170880009F5C71 +:10A038008000A7FA80009E68D421202D4A78A96C58 +:10A04800910C4A7811893008F0091800C030F01FC7 +:10A05800002530094A284A17B0896E0C301BF9DCF4 +:10A06800C288F01F0021E06B00D2FE7C2800F01FA0 +:10A07800001F6E08F3D8C008FAC7FFF8F7D8C10C5C +:10A08800FE7C2800F3EB109B0EDBB18BF01F001752 +:10A098000FABFE7C2800F01F00150FBBFE7C2800CC +:10A0A800F01F0012E06B00FFFE7C2800F01F000F7D +:10A0B800E06B00FFFE7C2800F01F000CE06B00FF47 +:10A0C800FE7C2800F01F0009E06B00FFFE7C2800E2 +:10A0D800F01F00062FEDDA2A000017080000170C01 +:10A0E80080009EF880009E688000A7FAD421202D69 +:10A0F800498818973009118AF20A1800C070B08987 +:10A108004958700CA98CF01F0015FAC5FFFAEEC665 +:10A11800FF00E06B00FFFE7C2800F01F00110A9B87 +:10A12800FE7C2800F01F000F9A380EC80C37CF218C +:10A138004898300B700CF8CCFF00910CF9DCC28801 +:10A14800F01F000930194838301CB0892FEDD8228B +:10A158000000170C000017088000A0408000A7FA34 +:10A168008000A81680009E68D4211897C088F01F28 +:10A178000006486CF01F000620175C87483C58070B +:10A18800CF71DA2A800090C40000171080009FE089 +:10A19800D4211897C088F01F0006486CF01F0006ED +:10A1A80020175C87483C5807CF71DA2A8000A0F452 +:10A1B80000001710800090E0D4213027FAC4FFEC8B +:10A1C8001896A887C0C80C9A089BFE7C2800F01F28 +:10A1D8000009C020D82A09882FF8A8880988EE081D +:10A1E8001800FE98FFF230094838301CB089D82290 +:10A1F8008000A73C0000170CE1B80000EE18000131 +:10A20800F1D8C201C020D3033019F20B094B994B86 +:10A21800783958085E0CD5035EFCFE681400700996 +:10A22800F3DCD0C191095EFCF8081605A968E0289E +:10A23800F000581BC0D0C063582BC0F0583BC12059 +:10A248005EFF3019F20C0949916991A9C108F60C11 +:10A25800094B915B91ABC0B83019F20C094991696F +:10A26800C0583019F20C0949915991993019F20CDA +:10A27800094C912C5EFDD703D4213007189616940B +:10A288000E95C0880D9B0D8C2FF72FE6F01F00044C +:10A2980018450837CF830A9CD82200008000A230D6 +:10A2A8003018F00C0948A59CA96CE02CF000F9487E +:10A2B800004899185EFC3018F00C0948A59CA96C58 +:10A2C800E02CF000F94800745EFC3018F00C0948E6 +:10A2D800A59CA96CE02CF000F94800785EFC3018C9 +:10A2E800F00C0948A59CA96CE02CF000F948005432 +:10A2F800F948004499185EFC3018F00C0948A59CF0 +:10A30800A96CE02CF000F9480058F9480044991865 +:10A318005EFC301AF8081605F40C0949A968E0280B +:10A32800F000F14900C4143BC080C043582BC0F171 +:10A33800C098F14900A8C038F14900A4F14900B813 +:10A34800C078F14900A8F14900B4C0285EFAF14983 +:10A3580000945EFD3018F00C0948A59CA96CE02C0F +:10A36800F000F94800985EFCF8081605A968E0288E +:10A37800F000F0F800D0F00C0A4CF9DCC0015EFCEB +:10A388003018F00C0948A59CA96CE02CF000F9489D +:10A3980000D85EFCC008D703F3DBC0054898A59B2E +:10A3A800F00B00387018F009092C4878F5DAC0026B +:10A3B800F00A0329FE780800F00B09295EFC00006A +:10A3C80080039CFC8003773CD42148F8E3B8000163 +:10A3D80048E848F9700E48FC3008FE7B0800C0E8E1 +:10A3E8007216EC0A00262FFA8D0C0E3ACFA3F60847 +:10A3F800092E2F892FF85948C0407207300ACF6BB1 +:10A40800D8220000800376008003773C80039CFC00 +:10A418008000A39CE0680083FE790800F00C010C22 +:10A42800F20C0328F0CAFFC0F20A032C580C5E0C89 +:10A438004869F80C1200F2080038F80C111F70185F +:10A44800F00C032C5EFC000080039CFC78C83019DB +:10A45800F1D9D10399C85EFC78C83019F1D9D00177 +:10A46800F1DBD20399C85EFCD421FAC4FFEC68176B +:10A47800680EEFD7C003FDDEC0013004E9D7D00372 +:10A48800E9DED0E1E9D7D103E9DED1E1E9DAD203A7 +:10A49800E9DBD2E1E9D8D303E9D9D3E199147958B2 +:10A4A800EDB80005CFD1D822D4213007405E2F8BDC +:10A4B800EFD8D021EFD9D104EFDAD204EFDED306FA +:10A4C800F80B0927D822F5E910192F8BF3E8102883 +:10A4D800F80B0329F3D8D043F80B09295EFC2F8B1E +:10A4E800F80B0328A1A8F80B09285EFC7958EDB8E9 +:10A4F8000000CFD15EFC7808F1DBD00299085EFC41 +:10A50800EC5BBB9FE08B0004304BC138E068C6BFF2 +:10A51800EA18002D103BE08B0004305BC0A8E0680F +:10A528001200EA18007A103BF9BB0306F9BB0207D0 +:10A5380078A8F1DBD00399A878A8F1DAD10399A813 +:10A548007808A3A899087958EDB80007CFD17808FA +:10A558003019F1D9D00299085EFC7808EDB80004EA +:10A56800CFD07808A1A899087808EDB80004CFD012 +:10A578005EFC301899485EFC7808EDB80004CFD02E +:10A58800992B7808EDB80004CFD05EFCD42130F8C0 +:10A5980014951697F00A18005FBA30181896F00B41 +:10A5A80018005FB9F5E91009C020D82AF00B180087 +:10A5B800C0A1FE7C0C00F01F0015300BFE7C0C00C7 +:10A5C800F01F00136C08EDB80004CFD0A377B1A733 +:10A5D800EFE510878D076C08EDB80004CFD06C0844 +:10A5E800E2180010CFD18D186C08EDB80004CFD058 +:10A5F8006C08EDB80004CFD03FF88D286C08EDB892 +:10A608000004CFD0DA2A00008000A4548000A4609F +:10A618003038F00A18005FB93078F00B18005F88FE +:10A62800F3E81008C1913108F00B1800E08B001511 +:10A63800E06800809908208BF4081601F5DAC0015B +:10A64800F1EB104B580AF9BA0100F9BA0002F7EA1F +:10A65800100A99CA5EFD302C5EFCD4013019189896 +:10A66800F73B000DF20B1800E0880004302CD802EC +:10A67800300AE06900809909301E7019149CF3DED5 +:10A68800D001F3DBD081F3DAD0E130FAF3DAD20487 +:10A698009119D802D4013018F00B18005FBEF00AE7 +:10A6A80018005FB81C48C030302CD8027818F1DB8D +:10A6B800D021F1DAD041F1D9D3089918D80A7819FC +:10A6C8001898EA19000F9919781CE21C0004C100B7 +:10A6D80030E9F20B1800E08B001A7019B16B300CDE +:10A6E800EA1BFFF0E81BFFFF126B911B5EFC303981 +:10A6F800F20B1800E08B000B70192F0B301AF40BBB +:10A70800094B5CDB126B911B5EFC302C5EFCE06835 +:10A718002710C0585808C0215EFF20187849EDB9A5 +:10A728000009CF917818EA18000F9918FC18010051 +:10A7380099085EFDD4313036F737000CEC07180065 +:10A74800E08B0050F733000B301EFC031800E08B41 +:10A758000049F73800083079F2081800E08800420C +:10A768003109F2081800E08B003D7619F205160150 +:10A77800F4050005EA090D04E8C90001E04900FEF6 +:10A78800E08B0030F0CA00080E923008EC1200018D +:10A79800A197F1D7D001F1D2D021F1D3D061F1DA6C +:10A7A800D084F73A0009F1D4D1081789F1DAD20830 +:10A7B800F73A000AF1DAD308FC091800C0C0C093C0 +:10A7C800302AF4091800C090EC091800C0A1C0781C +:10A7D80099C8C06899D8C04899E8C02899F8D83A63 +:10A7E800302CD832301899085EFC784CF9DCC0213E +:10A7F8005EFCE0682710C0585808C0215EFF20188A +:10A808007849EDB90001CF915C7B993B5EFDE0682A +:10A818002710C0585808C0215EFF20187849E2194F +:10A828000201E0490201CF717828300CB6085EFCBD +:10A8380076095829E08800035EFE7618A769109B00 +:10A84800E61BC000120CF3D8C003AFB91649109B21 +:10A85800E61B30001649109BE61B0C001649109B9E +:10A86800E61B03001649109BE61B00C01649109B07 +:10A87800E61B00301649109BE61B000C1649109B7E +:10A88800E61B00031649109BE21B60001649109B4B +:10A89800E21B10001649109BE21B0C001649109B86 +:10A8A800E21B03002FCC1649109BE21B0080109A74 +:10A8B8001649E21A0008109BE2180030E21B00401B +:10A8C8001649F3E81008144899085EFDF6081506BD +:10A8D800582BF9BC0BFFF9D8E80CF9B80805F9F8BA +:10A8E8008A00F9BC08005EFC582BE08800035EFE75 +:10A8F800F6081506F80800082FC87008EDB8000F0C +:10A90800C0C1A76BF3DAC010160C2ECC7808E0187B +:10A918000000F3E810089908F9DAC0105EFC582B1B +:10A92800E08800035EFEA76B160C7818EDB8000FE0 +:10A93800C0A12E4CF3DAC0107808E0180000F3E844 +:10A9480010089908F9DAC0105EFCD401F60E150457 +:10A958001C3AF9BE0210F9BE0308FC0B024BF608BC +:10A968001601F00A003AF40B0D0AF4091603F2C8AE +:10A978000001E048FFFEE0880003DA0A7818E86B77 +:10A988000000E418FFF7E018FECF590EF60E171076 +:10A99800F9BE0000FDE810089918F5DAC003F3EADB +:10A9A80011099989D80A7858EDB80001C030302CBF +:10A9B8005EFCF7DBC009997B5EFD7858E21800E081 +:10A9C800C030304C5EFC7859EDB90000F9BC010389 +:10A9D800F9F90006F00C1700E06A01FFF3DAE02845 +:10A9E800F7F80A005EFCE1B80000EE180001F1D8A3 +:10A9F800C201C020D3033FF9993978595808C020BB +:10AA0800D50330089918999899A8EA68610C9908AB +:10AA18005EFCD703D421201D500A16961897F01F04 +:10AA2800002F400A5806C5500DC83049F2081800D2 +:10AA3800E08800503095EA081800E08B004B0DD9EB +:10AA48003078F0091800E08B00458C39E068010186 +:10AA5800F0091900E08B003EED3900083038F009A4 +:10AA68001800E08B00376C0B0E9CF01F001D581C63 +:10AA7800C3000DC8EA081800C0416E18B1B8C05824 +:10AA880020586E19F3E810688F186E19ED3A00080F +:10AA98000DD8A978F1EA10E812488F18302A8C38B6 +:10AAA800F3D8C010F4081900E08800086E18ADB893 +:10AAB8008F1820298FA9C0586E18F1E910C98F196D +:10AAC8006E18E018FFF08F18300C35088F08C02872 +:10AAD800301C2FFDD82200008000A9EE8000A9526A +:10AAE8004828910C5EFC0000000018E8D431189842 +:10AAF800783E580EC620F90600105806C5E0300901 +:10AB08003FF3129A3344C1780E91E8071800C0A1A8 +:10AB1800F2CAFFFEF4C9FFFF5C7A5C89FC0A070AE7 +:10AB2800C0A8F6071800C4A05C75FC050709E4096D +:10AB380000095C89EC091900C0F2F2C5FFFFF9D9D8 +:10AB4800C0105C85FC0C000CEAC2FFFF19870E914F +:10AB5800E6071800CDA1580AC3003019F20A1800F8 +:10AB6800C0617028E06900802948C0C87028302971 +:10AB7800F20A1800C0412D483409C0482D48E06940 +:10AB880000C0300C3FF7C0D8F60A1800C1705C7ED0 +:10AB9800F00E070CEC0C000C5C8CF20C1900C0D207 +:10ABA800F8CEFFFF5C7C5C8EF00C000CFCC6FFFF4F +:10ABB800198AEE0A1800CE91300CD832D401F9085F +:10ABC800001CF3D8C010F2CEFFFE140EE04E004475 +:10ABD800E088000F48F8201D1AD8E06804E31AD866 +:10ABE80048D848EC1AD8F01F000E2FCDC008786E50 +:10ABF800FC090009F36B00F02FF8786BF3D8C0104C +:10AC0800F6090009F36A00F02FF8F958001CD80279 +:10AC180080039DC480039E0880039D9C800094C48B +:10AC2800D4013439F908001CF2081900E088000F33 +:10AC380048C8201D1AD8E06804EE1AD848A848BCAD +:10AC48001AD8F01F000B2FCDC008786AF3D8C010AF +:10AC5800F4090009F36B00F02FF8F958001CD8022A +:10AC680080039DC480039E5080039D9C800094C4F3 +:10AC7800D401580CC0E14B18201D1AD8E068062BE7 +:10AC88001AD84AF84AFC1AD8F01F002F2FCDC0084E +:10AC9800786A580AC0E14A98201D1AD8E068062C3C +:10ACA8001AD84AA84A7C1AD8F01F00272FCDC00806 +:10ACB800F908001C3439F2081900E088000F49F837 +:10ACC800201D1AD8E068062D1AD84A1849DC1AD867 +:10ACD800F01F001D2FCDC008F7D8C010160A3FFB83 +:10ACE800F56B00F02FF8129B5C88300AF958001CAD +:10ACF800C1584928201D1AD8E06806321AD8494890 +:10AD0800490C1AD8F01F00102FCDC008F1DEB01082 +:10AD1800786EFC090009F36A00F0F0CEFFFFF3D863 +:10AD2800C010F6081900FE98FFF3F958001CF3D973 +:10AD3800C002CE01D802000080039DC480039E8C0F +:10AD480080039D9C800094C480039EB080039EDC99 +:10AD5800D401F908001CF3D8C010F2CAFFFEE04A7B +:10AD68000044E088000F4918201D1AD8E06804F54F +:10AD78001AD848F848FC1AD8F01F000F2FCDC00881 +:10AD8800786AF4090009F5DBC108F36A00F02FF8C6 +:10AD9800786AF3D8C010F4090009F36B00F02FF8B3 +:10ADA800F958001CD802000080039DC480039F1C32 +:10ADB80080039D9C800094C4D401F908001CF3D83A +:10ADC800C010F2CAFFFCE04A0044E088000F49B80E +:10ADD800201D1AD8E06804FD1AD84998499C1AD849 +:10ADE800F01F00192FCDC008786AF4090009F60A87 +:10ADF8001618F36A00F0786A2FF8F3D8C010F4092F +:10AE08000009F5DBC208F36A00F0786A2FF8F3D876 +:10AE1800C010F4090009F5DBC108F36A00F02FF847 +:10AE2800786AF3D8C010F4090009F36B00F02FF822 +:10AE3800F958001CD802000080039DC480039F605D +:10AE480080039D9C800094C4D421F9380035A3D890 +:10AE5800F9680035189678A75807C2406E1C580C38 +:10AE6800C050F01F001130088F186E285808C09184 +:10AE78006E355805C061EF090010EA091900C0E0F5 +:10AE880048A8201D1AD8E06804C51AD84888489CE4 +:10AE98001AD8F01F00092FCDC0080E9CF01F00071C +:10AEA8008DA5D8228001122880039DC480039FA00D +:10AEB80080039D9C800094C48002E28CD421189762 +:10AEC800782C580CC050F01F000830088F286E3CB2 +:10AED800580CC070F01F00043008EF5800108F386D +:10AEE800D82200008002E28CD4211896580CC0E1C8 +:10AEF8004AE8201D1AD8E06805D11AD84AC84ADCA1 +:10AF08001AD8F01F002D2FCDC00878A75807C0E128 +:10AF18004A68201D1AD8E06805D31AD84A784A5CCE +:10AF28001AD8F01F00252FCDC0086E585808C0E069 +:10AF380049E8201D1AD8E06805D41AD84A0849DC1F +:10AF48001AD8F01F001D2FCDC0086E655805C0E047 +:10AF58004968201D1AD8E06805D51AD84998495C6F +:10AF68001AD8F01F00152FCDC0080A9AE06B0134DB +:10AF78000A9CF01F00158F5CC041E06C00FFD822CE +:10AF88009859E0680133F0091900E08B00214878EE +:10AF9800201D1AD8E06805DD1AD848C8485C1AD8B8 +:10AFA800F01F00052FCDC00880039DC480039FB407 +:10AFB80080039D9C800094C480039FD880039FFCDD +:10AFC8008003A0288000D3188003A054EF38001312 +:10AFD800EA081800C0514D3870092FF991097818FE +:10AFE800301B8F684CF9720A8F0AB09BB08B306B9C +:10AFF800B0ABF40B1618B0CBF7DAC2083009B0FAC8 +:10B00800B0DBF5DAC108305BB0B9F1690008F16965 +:10B018000009F169000AF169000BF169000CF16996 +:10B02800000DF169000EF169000FB0EAEF3A001265 +:10B03800F60A18005F0C30ABF60A18005F0BF9EB44 +:10B04800100BF20B1800C0513049F20A1800C0D199 +:10B058000DC9F169000C0DD9F169000D0DE9F1690F +:10B06800000E0DF9F169000F3009ECCAFFD1F16942 +:10B078000010F1690011F1690012F1690013F1691A +:10B088000014F1690015F1690016F1690017F169FA +:10B098000018F1690019F169001AF169001BF0CB79 +:10B0A800FFE4ED35002E3106EA091900F9BC02006B +:10B0B800F5FC380016CC2FF92FFA5C89EC09190039 +:10B0C800CF413009F0CAFFD4129C340B14CC2FF9AD +:10B0D8005C89F6091900CFB13009F0CAFF94129CB7 +:10B0E800E06B008014CC2FF95C89F6091900CFB108 +:10B0F8003639F16900EFF16900EC3829F16900EDA2 +:10B108003539F16900EE344A3009F0C8FF10EF59BB +:10B11800001C10C92FF95C89F4091900CFB1D82A8D +:10B12800000001F0D421580CC0E14A28201D1AD88B +:10B13800E06806141AD84A084A0C1AD8F01F0020EA +:10B148002FCDC00878A75807C0E149A8201D1AD8F4 +:10B15800E06806161AD849B8498C1AD8F01F0018A2 +:10B168002FCDC0086E5C580CC0E14928201D1AD8A4 +:10B17800E06806171AD84948490C1AD8F01F001079 +:10B188002FCDC0086E685808C0E148A8201D1AD8FD +:10B19800E06806181AD848D8488C1AD8F01F000852 +:10B1A8002FCDC008F01F000A30088F688F58D822AA +:10B1B80080039DC48003A09880039D9C800094C454 +:10B1C8008003A0BC8003A0E08003A10C8000D13CD8 +:10B1D800D42130D878A7EF390012F0091800EFF819 +:10B1E8001E12F9B80100EFF81E13300818968FE800 +:10B1F8008F988FB88FA88FD88FC8EF48004CEF482A +:10B208000048EF480044F01F0029EBDCC008C201E9 +:10B21800301A335B0E9CF01F0026307B0E9CF01F0B +:10B2280000250E9CF01F00246E5CEF0B001CF6CB73 +:10B23800FF105C7BF01F00210C983439EECAFFDC4C +:10B248006E5B6E1CF01F001E0C9CF01F001EEF387A +:10B2580000132FF85C58EF6800133099F2081800B3 +:10B26800E0880005E0692710C058E06903E8F009A4 +:10B2780002495C79E06801F4F2C9FE0DF2080C0895 +:10B288000C9CEF58001EF01F00100C9C48FBF01F90 +:10B2980000100C9C48DBF01F000F0C9C48BBF01FF3 +:10B2A800000E0A9CD82200008000AEF08000ABC4DB +:10B2B8008000AC288000AC788000D2108001139008 +:10B2C8008000B12C8000CABC8003B4098000CBC8C0 +:10B2D8008000CA748000CA92D421305878A7EF3908 +:10B2E8000012F0091800EFF81E12F9B80100EFF883 +:10B2F8001E131896F01F0026EBDCC008C2A1301AF6 +:10B30800335B0E9CF01F0023303B0E9CF01F002285 +:10B31800302A339B0E9CF01F001FED1B002C0E9C47 +:10B32800F01F001E0E9CF01F001E6E5CEF0B001C31 +:10B33800F6CBFF105C7BF01F001B0C983439EECA6B +:10B34800FFDC6E5B6E1CF01F00180C9CF01F0017D2 +:10B35800EF3800132FF85C58EF6800133099F208A3 +:10B368001800E0880005E0694E20C058E06907D061 +:10B37800F00902495C790A9CF2C9FE0DE06801F403 +:10B38800F2080C08EF58001ED82200008000AEF02A +:10B398008000ABC48000AC288000AD588000AC7839 +:10B3A8008000D210800113908000B12CD42118960F +:10B3B800580CC0E14AF8201D1AD8E06802F51AD8DE +:10B3C8004AD84AEC1AD8F01F002E2FCDC00878A70B +:10B3D8005807C4E0EF3900123088F0091800C4811A +:10B3E80017B8178A1799B169F3EA118917AAF3EA06 +:10B3F8001089F1E910096EA81039C3A130C8EF68A7 +:10B4080000123008EF680013F01F001E5C5CC28158 +:10B41800301A335B0E9CF01F001C304B0E9CF01F43 +:10B42800001B304A332B0E9CF01F00176EAB0E9C8E +:10B43800F01F00170E9CF01F00176E5CEF0B001C2E +:10B44800F6CBFF105C7BF01F00140C983439493A96 +:10B458006E5B6E1CF01F00120C9CF01F0012EF3880 +:10B4680000132FF8EF6800133148EF58001ED82258 +:10B4780080039DC48003A13880039D9C800094C4F0 +:10B488008000AEF08000ABC48000AC288000ADC066 +:10B498008000AC788000D2108003B405800113903E +:10B4A8008000B12CD421303878A7EF390012F00988 +:10B4B8001800EFF81E12F9B80100EFF81E131896DD +:10B4C800F01F002AEBDCC008C321301A335B0E9C46 +:10B4D800F01F0027303B0E9CF01F0026302A339BBC +:10B4E8000E9CF01F0023E06B02400E9CF01F002210 +:10B4F800304A332B0E9CF01F001E6EAB0E9CF01FC3 +:10B50800001F0E9CF01F001E6E5CEF0B001CF6CB9C +:10B51800FF105C7BF01F001B0C98343949AA6E5B46 +:10B528006E1CF01F001A0C9CF01F0019EF38001356 +:10B538002FF85C58EF6800133099F2081800E0887B +:10B548000005E0692710C058E06903E8F0090249DE +:10B558005C790A9CF2C9FE0DE06801F4F2080C0857 +:10B56800EF58001ED82200008000AEF08000ABC467 +:10B578008000AC288000AD588000ADC08000AC7859 +:10B588008000D2108003B405800113908000B12C94 +:10B59800D4214BD811B9118B119A11A8B16AF5EBC6 +:10B5A800118AF5E81088F3E8100878A78FA8EF3912 +:10B5B80000123068F0091800EFF81E12F9B80100FF +:10B5C800EFF81E131896F01F0031EBDCC008C3E13A +:10B5D800301A335B0E9CF01F002E301B0E9CF01FA0 +:10B5E800002D302A339B0E9CF01F0029ED1B002CE8 +:10B5F8000E9CF01F0029304A337B0E9CF01F00245C +:10B60800301B0E9CF01F0023303B0E9CF01F0021C6 +:10B6180031CB0E9CF01F001F306B0E9CF01F001DDD +:10B628000E9CF01F001E6E5CEF0B001CF6CBFF108B +:10B638005C7BF01F001B0C98343949AA6E5B6E1CAA +:10B64800F01F00190C9CF01F0019EF3800132FF899 +:10B658005C58EF6800133059F2081800E0880005BC +:10B66800FE79EA60C058E06903E8F20809495C79A4 +:10B678000A9CF2C9FE0DE06801F4F2080C08EF58C4 +:10B68800001ED8228003B4098000AEF08000ABC44D +:10B698008000AC288000AD588000AC788000D210C3 +:10B6A8008003B405800113908000B12CD421301898 +:10B6B80078A7EF390012F0091800EFF81E12F9B850 +:10B6C8000100EFF81E131896F01F0039EBDCC008D4 +:10B6D800C501301A335B0E9CF01F0036303B0E9CC0 +:10B6E800F01F0035302A339B0E9CF01F0032ED1BF3 +:10B6F800002C0E9CF01F0031304A332B0E9CF01F9B +:10B70800002D6EAB0E9CF01F002E304A336B0E9C42 +:10B71800F01F00286E9B0E9CF01F0029304A337BD7 +:10B728000E9CF01F0024301B0E9CF01F0023303BA2 +:10B738000E9CF01F002131CB0E9CF01F001F306BB8 +:10B748000E9CF01F001D0E9CF01F001E6E5CEF0B80 +:10B75800001CF6CBFF105C7BF01F001B0C983439E3 +:10B7680049AA6E5B6E1CF01F001A0C9CF01F001992 +:10B77800EF3800132FF85C58EF6800133059F208BF +:10B788001800E0880005FE79EA60C058E06903E81F +:10B79800F20809495C790A9CF2C9FE0DE06801F4D7 +:10B7A800F2080C08EF58001ED82200008000AEF006 +:10B7B8008000ABC48000AC288000AD588000ADC0CC +:10B7C8008000AC788000D2108003B405800113900B +:10B7D8008000B12CD421304878A7EF390012F00945 +:10B7E8001800EFF81E12F9B80100EFF81E131896AA +:10B7F800F01F0025EBDCC008C291301A335B0E9CA9 +:10B80800F01F0022303B0E9CF01F0021302A339B92 +:10B818000E9CF01F001EED1B002C0E9CF01F001D3F +:10B828000E9CF01F001D6E5CEF0B001CF6CBFF108A +:10B838005C7BF01F001A0C983439499A6E5B6E1CB9 +:10B84800F01F00180C9CF01F0018EF3800132FF899 +:10B858005C58EF6800133099F2081800E08800057A +:10B86800E0692710C058E06903E8F00902495C79EB +:10B878000A9CF2C9FE0DE06801F4F2080C08EF58C2 +:10B88800001ED8228000AEF08000ABC48000AC2837 +:10B898008000AD588000AC788000D2108003B405D9 +:10B8A800800113908000B12CD4314A5830167007AB +:10B8B80030A20C9330043055C3E86EA85808C3A0D2 +:10B8C800F1090022F2CA0001F15A0022EC0919001C +:10B8D800C151F1380012E40818005F0AE6081800A0 +:10B8E8005F09F5E91009E8091800C041EA081800DD +:10B8F800C2110E9CF01F0013C1D8F1090020F2CA32 +:10B908000001F15A0020EC091900C141F138001278 +:10B91800E40818005F0AE60818005F09F5E910094D +:10B92800E8091800C041EA081800C0410E9CF01F41 +:10B9380000066E075807CC21D8320000000080CCE2 +:10B948008000B7DC8000B2E0D4211896580CC0E122 +:10B958004C08201D1AD8E068024E1AD84BE84BFC58 +:10B968001AD8F01F003F2FCDC008F9380035A3D8EA +:10B97800F968003578A7F909002CE068023FF0095A +:10B988001900E088008B5807C091350CF01F00356E +:10B998001897E08000838DACC2E86E1C580CC0304C +:10B9A800F01F00316E585808C0E04AA8201D1AD868 +:10B9B800E068026C1AD84AD84A8C1AD8F01F0028B6 +:10B9C8002FCDC0086E285808C0916E385808C0613D +:10B9D800EF090010F0091900C0E049E8201D1AD845 +:10B9E800E068026E1AD84A2849CC1AD8F01F001C01 +:10B9F8002FCDC008350A300B0E9CF01F001EF01F1B +:10BA0800001E8F1C1895C0610E9CF01F001C8DA590 +:10BA1800C178344A49ABF01F001B499B343A6E1C6D +:10BA2800F01F00190C9A499B6E1CF01F00190C9C02 +:10BA3800F01F00185C5CC0700C9CF01F0017E06CD5 +:10BA480000FFD822ED380035A3B8ED680035D822BC +:10BA580080039DC48003A13880039D9C800094C40A +:10BA68008002E2A4800112288003A14880039FA0DD +:10BA78008002E8BC800112008002E28C8003B409D5 +:10BA880080011260800113208000BBBC800111F886 +:10BA98008000B5988000AE50E06C00FFD82200000E +:10BAA800D421202D1896580CC0E14BA8201D1AD877 +:10BAB800E06803781AD84B884B8C1AD8F01F0038E6 +:10BAC8002FCDC00878A75807C0E14B28201D1AD8E9 +:10BAD800E068037A1AD84B384B0C1AD8F01F00309C +:10BAE8002FCDC0086F295BF9C1102E2933C8E06A31 +:10BAF800FFFFF2080D081438F40817B0EF580020BB +:10BB08005808F9B80001EFF80C106F395BF9C1104B +:10BB18002E2933C8E06AFFFFF2080D081438F4082C +:10BB280017B0EF5800225808F9B80001EFF80C11C7 +:10BB38006EB850185808C041FC18FF0050186EC85D +:10BB480050085808C0716EA84019F3E80008A1A869 +:10BB58005008EECBFFD80C9CF01F0013FACBFFFC6B +:10BB68000C9CF01F00121A9B0C9CF01F00110C9CDF +:10BB7800F01F0010EF39001230A8F0091800EFF894 +:10BB88001E12F9B80100EFF81E132FEDD82200009D +:10BB980080039DC48003A16080039D9C800094C4A1 +:10BBA8008003A17C8000CBC88000CA928000CA7440 +:10BBB8008000CB88D43178A71896149574186E290C +:10BBC8005809C0916E395809C061EF0B0010F20B8B +:10BBD8001900C0E04BE8201D1AD8E06805651AD89E +:10BBE8004BC84BDC1AD8F01F003D2FCDC0088A5B2C +:10BBF80032BAF40B1900E088020F118B302AF40BCB +:10BC08001800E0810209F93C002EECCBFFD1F0CA04 +:10BC1800FFE4C0982FF917345C59153EFC0418004E +:10BC2800E08101FAF8091800CF6311FA11CB11D994 +:10BC380011E8B169F3EB1189F3E810896E08F5E9A9 +:10BC480010091039E08101E80E9CF01F00258A4C8C +:10BC5800E06800F0F00C1900E088000FF8CC00F064 +:10BC6800EF5C00105C7CF01F001F8F3CC051EF5C44 +:10BC78000010E08F01D1E06C00F0F01F001A8F2C4B +:10BC88001894C0C16E3C580CE08001C6F01F001625 +:10BC9800EF5400108F34E08F01BF189B3009E06A21 +:10BCA80000F00A9CF01F0011E06800F0F00C190089 +:10BCB800C2004878201D1AD8E068052E1AD848C84E +:10BCC800485C1AD8F01F00052FCDC00880039DC41A +:10BCD80080039FA080039D9C800094C48000AEC414 +:10BCE8008002E2A48002E28C8000CEC48003A1948A +:10BCF8006E3B580BE08001B2E06900F0EF1A0010CB +:10BD08000A9CF01F0036EF080010F8081900E080C0 +:10BD180001A54B38201D1AD8E06805351AD84B18EC +:10BD28004B1C1AD8F01F00312FCDC00819A8305A63 +:10BD3800F4081800E0810100EF3800123019F20809 +:10BD48001800E08100EC30086CA4333B89D889B82E +:10BD580089C8089CF01F0026C0F0F8C8FFFC19AB82 +:10BD6800119919BA1188B16AF5EB118AF5E81088AA +:10BD78001248E948004433AB089CF01F001DC0E09E +:10BD8800F8C8FFFC19AB119919BA1188B16AF5EB1B +:10BD9800118AF5E810881248C0386918A198E9484E +:10BDA800004833BB089CF01F0012C0E0F8C8FFFC35 +:10BDB80019AB119919BA1188B16AF5EB118AF5E82E +:10BDC80010881248C0286918E948004C6828F0C94A +:10BDD800FFF0C0F11298C1C88000CEC480039DC492 +:10BDE8008003A1C880039D9C800094C48000AAF4AD +:10BDF800F1390013F13B0010F13A0011F13800124B +:10BE0800B16AF5EB118AF5E81088F3E8100889A8FB +:10BE1800301B089CF01F0084C0E0F8C8FFFC19AB79 +:10BE2800119919BA1188B16AF5EB118AF5E81088E9 +:10BE3800124889B8303B089CF01F007BC0E0F8C866 +:10BE4800FFFC19AB119919BA1188B16AF5EB118A7F +:10BE5800F5E81088124889C831CB089CF01F007299 +:10BE6800C0E0F8C8FFFC19AB119919BA1188B16A7A +:10BE7800F5EB118AF5E81088124889D8306B089CD0 +:10BE8800F01F00691892C2E01998A38889E8582819 +:10BE9800F9B80B02E9F8BA0E3003C1D8E608150262 +:10BEA800E6C9FFF22FE8E8090029E4080008113E76 +:10BEB800113AB16AF5EE118A118EF5EE108A1191D8 +:10BEC800069CF5E11001F2CBFFFC93112FF3F01F54 +:10BED80000575C5368E81033CE23069C4D4BF01F87 +:10BEE80000536CA43008E93A00123089EF58001E5C +:10BEF800F20A1800E9F91E12E9F81E130C9C300A20 +:10BF0800E8CBFFD8F01F004BE93800132FF8E96899 +:10BF180000133018E958001EC7E820383029F20805 +:10BF28001800E08B007930080C9CEF58001EF01FB9 +:10BF38000042C7183069F2081800C3513019EF38A9 +:10BF48000012F20818005F0B3039F20818005F0978 +:10BF5800F7E91009C0813049F2081800C040F40818 +:10BF68001800C5916CA40C9C3003EF53001EF01F01 +:10BF780000330C9C4AEBF01F00320C9C4ACBF01F9C +:10BF880000310C9C4AABF01F0030E939001230C870 +:10BF98000C9CF0091800E9F31E13E9F81E12F01FB3 +:10BFA800002BC398302AF4081800C351EF38001248 +:10BFB800F2081800C30130086CA4EF58001E336B58 +:10BFC800089CF01F0019C270F8C8FFFC19AB119942 +:10BFD80019BA1188B16AF5EB118AF5E81088124888 +:10BFE80089986828F0C9FFF0C0311298C108F13962 +:10BFF8000013F13B0010F13A0011F1380012B16A58 +:10C00800F5EB118AF5E81088F3E8100889A80C9C6C +:10C01800F01F000F0E9CF01F000F0A9CF01F000E6F +:10C02800D83200008000AAF48000C19C8003B409C3 +:10C038008001384C8000BAA88000CABC8000CBC8F8 +:10C048008000CA748000CA928000B5988000B6B497 +:10C058008000AEC48000D13C335B0E9CF01F00030F +:10C06800FE91FE66CD8B00008000AAF4D4314C18F6 +:10C07800301370073002069430813050C7686EA6BE +:10C088005806C720ED05001EE6051900E0880006E1 +:10C098002015ED55001EC688E6051900C651ED3875 +:10C0A8000012306AED52001EF40818005F0A30C909 +:10C0B800F20818005F09F5E91009300AF4091800B8 +:10C0C800C501E8081800C0B1ED380013E0081800F1 +:10C0D800E08B00360E9CF01F0028C468E2081800A8 +:10C0E800C191ED380013E8081800E08B0010300A01 +:10C0F800ECCBFFD80E9CF01F0021ED380013ED5556 +:10C10800001E2FF8ED680013C2F80E9CF01F001CEB +:10C11800C2B8E0081800C0510E9CF01F001AC248AF +:10C128003049F2081800C0F1ED380013E208180091 +:10C13800E08B00060E9CF01F0014C1680E9CF01FD7 +:10C148000013C0F83039F2081800C0E1ED380013C8 +:10C15800E8081800E08B00060E9CF01F000DC04890 +:10C168000E9CF01F000C6E075807C8A1D8320000BB +:10C17800000080CC8000B6B48001384C8000BAA89A +:10C188008000B2E08000B7DC8000B1D88000B4AC99 +:10C198008000B598D4013019F20C1800E08B001D0E +:10C1A800580B5F1A48D9720958095F19F5E900094F +:10C1B800C13017B9178E179A17A8B16AF5EE118A08 +:10C1C800F5E81088F3E81008C0704858304AF00CB9 +:10C1D800002CF01F0004D80200001D5800001D505C +:10C1E8008002E736D42130181897F00B1800E08B3E +:10C1F80000074868304AF00B002BC038304A484BDB +:10C20800F01F00040E9CD82200001D508003B409C2 +:10C218008002E736D4313013189516911492E60C43 +:10C228001800E088000F4BB8201D1AD8E0680246B5 +:10C238001AD84B984B9C1AD8F01F00392FCDC0083C +:10C248004B89F20C0028F20C072B11BA119911A88E +:10C25800B169F3EB1189F3E81088F5E81008C0E13B +:10C268004AC8201D1AD8E06802471AD84AE84ABCCA +:10C278001AD8F01F002B2FCDC008300AE06B011030 +:10C28800149CF01F002A1897C041E06600FFC758A9 +:10C2980078045804C0E049F8201D1AD8E068024D17 +:10C2A8001AD84A3849DC1AD8F01F001D2FCDC0080B +:10C2B800781630CA089B0C9CF01F001EECC9FFF4CE +:10C2C800AC92ACD3E5D2C110ACA3ACC42011AC8203 +:10C2D80032EC2FF1F2C8FFFF300AC05810CBF5D26C +:10C2E800C0082FF1038BF4C2FFFFE80B18005F139F +:10C2F800F80B18005F16E7E60006E8061800CEF10E +:10C30800B28A0389E8091800C1601099CE3B000081 +:10C318008003A1E48003A22880039D9C800094C42C +:10C3280000001D508003A2408000D3188003A2643F +:10C338008002E8BCF0CBFFFB10C9B089B0A9301966 +:10C34800B099B0B96E180E9C101B5C7BF01F000CE6 +:10C3580048C848D6F0050025335A6C0C0A9BF01FD4 +:10C36800000B6C0C0A9A33590E9BF01F0009EDDC88 +:10C37800C0080E9CF01F00070C9CD8328000D21019 +:10C3880000001D5000001D5880011320800114F08A +:10C398008000D13CD421189A303CF80A1800E08873 +:10C3A800000F4BE8201D1AD8E068028A1AD84BC83B +:10C3B8004BCC1AD8F01F003C2FCDC0084BB8E06713 +:10C3C8000118F4070247F007000730180F8B169979 +:10C3D800F00B1800C0A0C603302BF6091800C0F0F7 +:10C3E800F8091800C4C1C4383008AEABAEB8AE986E +:10C3F800EECBFFF43028300CAE88C3680FA92019A3 +:10C408005C59AEA9C4910FBB2FFB5C5BAEBB0F9C04 +:10C41800304EFC0B1800C251F20C1800C1214A4AD8 +:10C4280015FB15CE15DC15EAB16CF9EE118CF9EA9D +:10C43800108AF7EA100AC050AEB9AEA8AE98D82252 +:10C44800EEF801105808C070EEFA0114300BEECC6B +:10C45800FFF45D183008AE883008EF480110D82284 +:10C46800AEABEECBFFF4F01F0013D8226E282018D5 +:10C478008F28C121EF480110AE88D8224878201DA6 +:10C488001AD8E06802C61AD848B8486C1AD8F01FFB +:10C4980000062FCDC008D8228003A1E48003A28023 +:10C4A80080039D9C800094C4000018F000001D507B +:10C4B8008000C21C8003A29CD431580B5F081292E2 +:10C4C80016974BB914967209189558095F04F1E448 +:10C4D8001004E08100B6580CE08000B31989E8091F +:10C4E8001800E08000AEF01F0033E04C00FFE08B46 +:10C4F80000A84B1B0A9CF01F0031C08137F8AEA47E +:10C50800AE88AE9C3018AEB8D8320A9CF01F002C0A +:10C51800F8081618AE88F1DCC208AEBCAE98F1DC9B +:10C52800C108AEA85BFCE081008F4A63300430305C +:10C5380006910788E0081800C171E80400280A9CE1 +:10C54800F00B1503101B2FFBE20B003B2FCBF01F4A +:10C55800001BC0A1E0680118B13449A8F004000428 +:10C56800E8F8010CC0782FF4E6C3FEE85844CE2161 +:10C578003FF8F0091618AE89F3D8C208AEB8AE99DC +:10C58800F3D8C108AEA95BF8C5E1300748E848DB35 +:10C59800118A0E9C0E9930313043F2C0FFFF178488 +:10C5A80016985804C1211297C358000000001D585E +:10C5B8008002EDD08003A2BC8002ECC880011E106E +:10C5C800000018F0000018ECE2041800C0C117C8F9 +:10C5D800F4080104F40801081838E08A0005F9D4C1 +:10C5E800C0081297F3D0C008F6CBFEE8E609180099 +:10C5F800CD513039F2071800E08B0027494BE0682D +:10C608000118EE080248F6080008118BF20B180012 +:10C61800C1B1F4C9FFFFB0CAF1460110301AF142A6 +:10C628000114B08AF0CCFFF448A80A9BB089F01F27 +:10C63800000A0E9CF01F0009E06C00F2D832E06C92 +:10C6480000F7D832D83AE06C00FFD832000018F072 +:10C65800000018EC8002ED708000C39CD40148985B +:10C6680070085808C0D0300CF01F0007301CF01FAD +:10C678000006302CF01F0004303CF01F0003D802E5 +:10C6880000001D588000C39CD421494C4946F01F26 +:10C6980000156C0518975805C1E1F01F00138D0CA3 +:10C6A800C1A0492B0A9AF01F00120A9A491B6C0C68 +:10C6B800F01F00116C085808C0E05807C0C0EE0908 +:10C6C800161848E8B0B7B089F3D7C208EFD7C10841 +:10C6D800B099B0A7D82200008003A2C800001D5856 +:10C6E80080011E10800112008003B40980011260CD +:10C6F8008000C704800111F800001D50D431E068A3 +:10C7080002001496944AF00A1900E08B00E331986D +:10C71800F00A1900E08800DE4DF75C7A30090E9BBC +:10C728000C9CF01F005E8C48F8081900E08100D2CC +:10C738000F993038F0091800E08B00CCE06501183B +:10C74800AB394D75120530290B8AF20A1800E081C1 +:10C7580000C1AA880FBAF5DAC004AADA0FD80FCB3D +:10C76800F1EB108B0FF80FEC5C8BF1EC108C3009AF +:10C778005C8C0FA8F2081800E084009DF20A1800EB +:10C788005F18301AF40B18005F1AF5E81008F20861 +:10C798001800E0810090EAC4FFF42F4708980F8939 +:10C7A800129AE21A00C0E04A00C0C1502FF7C098A0 +:10C7B800F3DBC0082FF7118BF40B1800C7B12FF863 +:10C7C800F2CB00010F8A5809CF41F20A1800C03095 +:10C7D8002FF8CE6B4B0B30082F4B1739129AE21AF1 +:10C7E80000C0E04A00C0C060120B1789F0091800A9 +:10C7F800CF51F1DCC0082FBB300E301A3047C58846 +:10C808001739129CE21C00C0E04C00C0C060120B3B +:10C818001789FC091800CF512FFB17CC17D9B1691C +:10C82800F3EC118917ECF7330008F3EC108917A221 +:10C8380017FC1781F9E91009F73C0009F9E3108C96 +:10C8480017B35C8CE7E2108317925C83E5E11082F2 +:10C85800F4021900C281F4031900C251EE0C190048 +:10C86800C2218B29E8593A80E0880005E8783A80A7 +:10C878008B28EAC7FEF42F6B304A0E9CF01F000984 +:10C88800EAF801105808C250EAFA01140E9B089CF5 +:10C898005D18C1F800001D5C8000CEC4000018F0CF +:10C8A8008002E7365C7C20182F6C5C58180B5808FF +:10C8B800CA81EAF801105808C070EAFA0114300B6E +:10C8C800EACCFFF45D183008AA883008EB4801105C +:10C8D8000C9CF01F0002D8328000D13CD401F01F1C +:10C8E8000003F01F0003D8028000C8F88000C6903B +:10C8F800D42149A949ABF2CCFEC4F2C8FF54300A8E +:10C90800F2C9FF50910A930AB22A172EF14EFFFC82 +:10C918002F092F081838CF71492949382FD9149C65 +:10C92800E019FFFCF0C6FFDC48D7490E910CEE0A6F +:10C938000405189BC098700493042FFB9109FC0A06 +:10C9480005045C8B0809EA0B1900CF632FC82FEA8E +:10C958000C38CED1D8220000000080D48003A2D8A1 +:10C9680000001F5C000072E88003A394D401580BF8 +:10C97800C200F1DBC002C0E048F8201D1AD8E06808 +:10C98800016B1AD848D848EC1AD8F01F000E2FCDE2 +:10C99800C00848D8F00C03299709F00C092B48B8AF +:10C9A800A56CF00C000CF8CCFF54780820189908F6 +:10C9B800D80200008003A2EC8003A33080039D9C72 +:10C9C800800094C4000072E8000080D4D421189834 +:10C9D800588CE088000F49F8201D1AD8E068013DFE +:10C9E8001AD849D849DC1AD8F01F001D2FCDC00825 +:10C9F80049CE49D9FC0C032CF0CAFFF5580CC230BB +:10CA0800A56AF00B15047807F20B000BFC08092740 +:10CA1800F6CBFF5414097608720A2FF8103AF3F887 +:10CA28003A009708F1DCC002C13048A8201D1AD886 +:10CA3800E068014F1AD848D8488C1AD8F01F000867 +:10CA48002FCDC008A56A140992282FF8B228D82239 +:10CA58008003A2EC8003A35080039D9C800094C4B3 +:10CA6800000072E8000080D48003A370580BC0C097 +:10CA780017B8178A179917ABB169F3EA1189F3EB5D +:10CA8800108BF1EB100B993B5EFC580BC0C017B82C +:10CA9800178A179917ABB169F3EA1189F3EB108B71 +:10CAA800F1EB100B992B5EFC4828910C5EFC000002 +:10CAB800000080D0D4211897F9380035EDB800006F +:10CAC800C0D1A1C8F968003578885808C0205D1819 +:10CAD8006E785808C0300E9C5D18D822F93C003595 +:10CAE800F9DCC0015EFC580CF9FB1A075EFCD703A1 +:10CAF800D421300A18971696302C96CBF01F001ABE +:10CB08001895C041E06600FFC2B80C9BF01F0017E3 +:10CB1800EDDCC008C0500A9CF01F0015C2180A9826 +:10CB280070095809C0301298CFCB6EF95809C15016 +:10CB38006F095809C0E148F8201D1AD8E068025367 +:10CB48001AD848D848DC1AD8F01F000D2FCDC008D5 +:10CB58009305EF480040C048EF4800408FF50C9C13 +:10CB6800D82200008000D3188000CF988000D13CE4 +:10CB78008003A3A88003A44480039D9C800094C4E0 +:10CB8800D4211897F9380035EDB80000C170A1A874 +:10CB9800F968003578885808C0205D186E785808FC +:10CBA800C0300E9C5D18EF380035EDB80005C06147 +:10CBB8000E9CEECBFFFCF01F0002D8228001370C40 +:10CBC800D42117881799B169F3E8118917A8F3E8F0 +:10CBD800108917B81697F1E91009189678181039BE +:10CBE800C27049A8700CC0A8780978356C1810393B +:10CBF800C041301BF01F00160A9C580CCF614958E1 +:10CC08007008C14870095809C1006C1A1439C0D19C +:10CC18000F8A0F99B169F3EA11890FAAF3EA10890B +:10CC28000FBAF5E91009910970385808CEC10F8A72 +:10CC38000FB90F98B168F1EA11880FAAF1EA1088C4 +:10CC4800F3E810088D18D8220000820C8000E12437 +:10CC580000008214D421149712961895F01F001022 +:10CC68005807C0C00FB80F8A0F990FA7B169F3EA28 +:10CC78001189F3E71087F1E710078B275806C0C022 +:10CC88000DB80D8A0D990DA6B169F3EA1189F3E67D +:10CC98001086F1E610068B36D82200008000CBC83B +:10CCA800D4213006999899169926993699A6997695 +:10CCB800998699F6F94600404908FAC4FFEC681EBF +:10CCC8006804F96600351185F96500382FF5B085D7 +:10CCD8001897994EF01F000A0E9C5D145C5C4898EA +:10CCE800580CEC071710F1F90000EFF90A00F1F7FA +:10CCF8000A000E9CD82200000000730C8000CC5C57 +:10CD0800000080CC1898300CC0482FFC70085C5C80 +:10CD18005808CFC15EFC580CF9F81207F9B901019F +:10CD2800F1D9E108F9F81C075EFCD703D401580CC7 +:10CD38005F08580B5F09F3E81008C1304978201DD7 +:10CD48001AD8E068028F1AD84958496C1AD8F01FC7 +:10CD580000162FCDC008964AF4080008B848129C5F +:10CD6800984878095809CF819859F0091900C0E006 +:10CD780048A8201D1AD8E06802971AD848B8489CD5 +:10CD88001AD8F01F00092FCDC0089649990BF20850 +:10CD98000008B848D80200008003A4708003A4B437 +:10CDA80080039D9C800094C48003A4ECD421169732 +:10CDB800F01F00065807EFF81207F9B90101F1D979 +:10CDC800E108EFF81C07D8228000CD34D421580C94 +:10CDD800C0E14B58201D1AD8E06801B01AD84B386A +:10CDE8004B3C1AD8F01F00332FCDC008580BC03168 +:10CDF800169CD8223008F00B1900C154F60911000E +:10CE080098585C89F2081900C0F24A78201D1AD88F +:10CE1800E06801B71AD84A884A5C1AD8F01F00257A +:10CE28002FCDC0081699F93E000C300A3037F40EA1 +:10CE380019005F08EE0E19005F061497104678185F +:10CE4800F4061800C0A0F00B01099919F8CAFFF000 +:10CE58001439C2029918DA2A201E3017EE0E19006A +:10CE6800E08B000CF40B1900C1D4985AF20A19008F +:10CE7800C19316189918C0E848B8201D1AD8E06858 +:10CE880001E61AD848D848AC1AD8F01F000A2FCDA6 +:10CE9800C00898581608B8589848F00B000BB84BBB +:10CEA800D82ADA2A8003A47080039EA480039D9C5C +:10CEB800800094C48003A51C8003A53CD43116913E +:10CEC8001497580CC0E14AD8201D1AD8E068033ED0 +:10CED8001AD84AB84ABC1AD8F01F002B2FCDC00860 +:10CEE800580BC070300518960A920A930A90C388A6 +:10CEF8004A28201D1AD8E068033F1AD84A384A1C25 +:10CF08001AD8F01F00212FCDC0085809C0A08C588E +:10CF1800F208010AF0091900C043F3DAB010C1F8A9 +:10CF2800F1D9C0108C54E8090109EE091900EE097D +:10CF380017B06C1BE9D9B010F9D5C010100BE20C72 +:10CF4800000C089A5C7AF01F0012E8030003081727 +:10CF5800E80500055C835C855C8730096C0658062B +:10CF68005F1AE40719005F18F5E80008E0081800E0 +:10CF7800CCD1069CD83200008003A4708003A5B0F1 +:10CF880080039D9C800094C48003A5D08002E7366E +:10CF9800D431580C5F08580B5F0918961697F3E8B8 +:10CFA8001008C06198499648F0091900C0E24C7809 +:10CFB800201D1AD8E06802FE1AD84C584C5C1AD8C2 +:10CFC800F01F00452FCDC00830050A945806C0E16F +:10CFD8004BE8201D1AD8E06803031AD84BF84BDC3D +:10CFE8001AD8F01F003D2FCDC0088C5808995C79DD +:10CFF8008E53F5D8C010F7D3C010121AF3D5C0104D +:10D00800F6090109123AE7D5E413E8091750F1D9EE +:10D01800E51308985C786C1C100CF1D5C0105C8383 +:10D028006E1BF5D3C010100BF01F002DE604000492 +:10D038008C585C84F0041900E088000F4A38201DE1 +:10D048001AD8E068030F1AD84A684A2C1AD8F01F71 +:10D0580000222FCDC008F0041900EDF60000F9B445 +:10D068000000E60500058E585C85F0051900E0888B +:10D07800000F4968201D1AD8E06803151AD849A876 +:10D08800494C1AD8F01F00142FCDC008F00519001C +:10D09800EFF72000F9B502005807C2908E598E4864 +:10D0A800F0091900C2416E085808C2104878201DBE +:10D0B8001AD8E068031F1AD848C8486C1AD8F01F55 +:10D0C80000062FCDC00800008003A4708003A5F4DB +:10D0D80080039D9C800094C48003A6248002E736C8 +:10D0E8008003A6348003A64C8003A6685806C16056 +:10D0F8008C598C48F0091900C1116C085808C0E017 +:10D108004898201D1AD8E06803241AD84878488C13 +:10D118001AD8F01F00082FCDC0085807FE91FF58F5 +:10D128000E9CD8328003A4708003A66880039D9C5F +:10D13800800094C4D421189B580CC0E14AB8201D23 +:10D148001AD8E068021C1AD84A984AAC1AD8F01FB4 +:10D15800002A2FCDC008F939000C3038F009180022 +:10D16800E088000F4A18201D1AD8E06802281AD84B +:10D178004A284A0C1AD8F01F00202FCDC0083007C3 +:10D18800303530169679F2C800015C885809C0E13C +:10D198004968201D1AD8E06802351AD84988495CC0 +:10D1A8001AD8F01F00152FCDC008B6785808C1B19D +:10D1B800F738000C169CF0C900017604EA0819003B +:10D1C800C031308CC068EC091900E08B0006307C57 +:10D1D800F01F000CC038F01F000C2FF7089B5C579D +:10D1E8005804CD110E9CD8228003A47080039EA4FD +:10D1F80080039D9C800094C48003A6948003A6AC01 +:10D208008000C9748002E28CD421580CC0E14B988C +:10D21800201D1AD8E068015F1AD84B784B7C1AD8C1 +:10D22800F01F00372FCDC0083019F938000CF2086C +:10D2380018005F1A3039F20818005F19F5E900097B +:10D24800C1405808C1203029F2081800C0E04A98A7 +:10D25800201D1AD8E06801631AD84AA84A7C1AD84F +:10D26800F01F00272FCDC0089848F00B1900C3F213 +:10D27800F3D8C0101897F1DBB0105C7B121BC27892 +:10D28800E04BFFFEE08A000F49A8201D1AD8E0688D +:10D2980001771AD849C8499C1AD8F01F00192FCD10 +:10D2A800C0088E481608AE486E075807C0E14918EE +:10D2B800201D1AD8E068017B1AD8494848FC1AD8BA +:10D2C800F01F000F2FCDC008F1DAB0108E59F00909 +:10D2D800010AF2081900FE9BFFD5AE48AE586E0C45 +:10D2E800580CC030F01F000A30088F08D822000000 +:10D2F8008003A4708003A70080039D9C800094C4D1 +:10D308008003A7188003A7348003A7488000D13C76 +:10D31800D431202D16971495581CC0B0C083582CB2 +:10D32800C040583CC0B1C1783004C0583144C0280E +:10D3380030042EC42E445C84C0F84C08201D1AD832 +:10D34800E06800D11AD84BE84BEC1AD8F01F003E21 +:10D358002FCDC00830045825E08B00065815E08210 +:10D3680000DDCBF85835E08100E6308CF01F00373F +:10D378001896E08000F25C740E99E8C8FFFD5C79AD +:10D38800E018FFFCB847E06A02443000F4080108DE +:10D39800F8040004F0090D472ED4E014FFFCAC5744 +:10D3A8009914F965000C99005C77F8C3FDAC0E047C +:10D3B8000833C0E24A18201D1AD8E06800EB1AD8D2 +:10D3C8004A384A0C1AD8F01F00202FCDC008580838 +:10D3D800E089000F4998201D1AD8E06800ED1AD896 +:10D3E80049C8498C1AD8F01F00182FCDC008F20779 +:10D3F800010700980A9918943015E0610243B8753E +:10D40800E0620244C6A850195008308CF01F000F83 +:10D418000E9B189A5C8BF4CEFFF0F6011900F60CFF +:10D428001720E40C173040194008580AC1610C9CB9 +:10D438001496F01F0009C9088003A4708003A76030 +:10D4480080039D9C800094C48000C9D48003A77C7D +:10D458008003A7B08000D13C9508890AF569000CC3 +:10D46800F560000DE047FFFFC0E14BD8201D1AD83A +:10D47800E06801071AD84BB84BBC1AD8F01F003B1C +:10D488002FCDC008951EB45CB44BFDDEC002C0E0D1 +:10D498004B38201D1AD8E068010D1AD84B484B2C80 +:10D4A8001AD8F01F00322FCDC0085C7C8CDB18170F +:10D4B80014946C1CF80B000B1633C0E24A88201D2C +:10D4C8001AD8E06801101AD84AA84A7C1AD8F01F5E +:10D4D80000272FCDC008B4755807FE99FF96C3786A +:10D4E8000E985C782FD8E018FFFC5C74E8CCFFED50 +:10D4F800E01CFFFC100CF01F00201896C2D030086A +:10D50800F8040004AC572ED4B847E014FFFCF968BF +:10D51800000C99149908C1B8307CF01F00181896AF +:10D52800C1B03008AC57F965000CB847990899188C +:10D53800C0E848B8201D1AD8E068013D1AD8490843 +:10D54800489C1AD8F01F00092FCDC0083018AC78B5 +:10D558003008ED68000D0C9C2FEDD8328003A470C4 +:10D568008003A7E480039D9C800094C48003A7F8EF +:10D578008003A77C8002E2A48000C9D48003A82885 +:10D58800D43149B8781918951094300CF2C2FFF4C8 +:10D59800F3310009700718961893C1E8EF380010A6 +:10D5A8000238C1716E585808C1400A9A0E9B6E6CB9 +:10D5B80004995D18C0E05806C0410C95301CC0A8FD +:10D5C8006E388D3868088F388907301C3005C028B8 +:10D5D800300C0E966E37E60C18005F0858075F1976 +:10D5E800F3E80008E6081800CDA1D832000073104F +:10D5F800E06C00FB5EFCD421E067040078A8F90B1E +:10D60800002C78C9F5DBC010F90E003C100AEE0EAC +:10D618001900E0880005E06E0400C0285C7EF4096B +:10D628000107EE0E010EC076F95B002E78CCF40CE3 +:10D63800010CD822F009010A580AE08A00063008CD +:10D64800F958002ED82AF2080108F958002ED82ACD +:10D65800996B5EFCF94B008C5EFCF94B00885EFC14 +:10D66800F94B00985EFC998B5EFCF96A0039F94B1E +:10D6780000945EFC5EFC5EFC48A87008C028703808 +:10D688005808CFE148887008C02870385808CFE19A +:10D6980048687008C02870385808CFE15EFC000060 +:10D6A8000000820C0000821400008220D4014A6825 +:10D6B8007008C30870495809C0E14A48201D1AD8A3 +:10D6C800E06805AC1AD84A284A2C1AD8F01F00225C +:10D6D8002FCDC0085819C0E149C8201D1AD8E068E4 +:10D6E80005AD1AD849D849BC1AD8F01F001B2FCD50 +:10D6F800C00858A9C0E14958201D1AD8E06805AEED +:10D708001AD84978493C1AD8F01F00132FCDC00801 +:10D7180070385808CD0149387008C128704958A98F +:10D72800C0E048A8201D1AD8E06805B11AD848E812 +:10D73800488C1AD8F01F00082FCDC0087038580838 +:10D74800CEE1DA0A0000820C8003A8688003A8AC46 +:10D7580080039D9C800094C48003A8D88003A904FA +:10D76800000082208003A934D43118961497784891 +:10D778005808C0E04C48201D1AD8E068011A1AD889 +:10D788004C284C3C1AD8F01F00432FCDC008580A2B +:10D79800C3514C19720C4C19720A4C19109E9207FD +:10D7A8004C08E069100070052FF70A985C87EE0EA8 +:10D7B8001900F2071790C088F104001C0E93EE04BC +:10D7C8001900CF3070385808CF811898C088F104F4 +:10D7D800001C0E93EE041900CE8070385808CF81D3 +:10D7E8001498C088F104001C0E93EE041900CDD0E3 +:10D7F80070385808CF814AA8B0074A887008C1F81D +:10D80800F109001C0E93EE091900C181700A580A2B +:10D81800E0800099580BE0800096178C1799B16941 +:10D82800F3EC118917ACF3EC108917BCF9E910096E +:10D83800E0800089123AE080008670385808CE11DE +:10D8480049887008C1A8F109001CEE091900C141F6 +:10D85800700A580AC770580BC750178C1799B169C6 +:10D86800F3EC118917ACF3EC108917BCF9E910092E +:10D87800C690123AC67070385808CE6148A870052C +:10D888000A98C2D88003A8688003A96080039D9C79 +:10D89800800094C40000822000008214000001F877 +:10D8A8000000820C0000821CF109001C0E93EE0996 +:10D8B8001900C141700A580AC450580BC430178C5B +:10D8C8001799B169F3EC118917ACF3EC108917BCFF +:10D8D800F9E91009C370123AC35070385808CE518C +:10D8E80049A87008C158F109001CEE091900C0F1D7 +:10D8F800178A1799B169F3EA118917AAF3EA108907 +:10D9080017BAF5E91009700A123AC1C070385808F8 +:10D91800CEB1580BC11017891798B168F1E9118871 +:10D9280017A9F1E9108817B9F3E81008C050304A70 +:10D938000C9CF01F00078D354868ED57001C9106B8 +:10D94800D83AE06C00F5D832000082208002E73631 +:10D958000000821CD4211897169CF01F0008C0B044 +:10D96800F908002C5808C0702288EE081900F00742 +:10D9780017305C870E9CD82280012228D421F90810 +:10D98800002C1897F3D8C010E06CFFFFF5DBC0102F +:10D99800F8090109123AE08A000F4948201D1AD8EF +:10D9A800E06801BD1AD84928492C1AD8F01F00127E +:10D9B8002FCDC008100BE0680800EF5B002CF00BBF +:10D9C8001900EFF8BC160E9CF01F000CE04C01FF8C +:10D9D800E08A000AEF380026A1B80E9CEF680026FE +:10D9E800F01F0007D82200008003A8688003A988D8 +:10D9F80080039D9C800094C48000D5FE80010CECBF +:10DA0800D4211896304CF01F000A1897C0E0ECE8B3 +:10DA18000000F8E90000ECE80008F8E900086C48A4 +:10DA28009948781CF01F00030E9CD8228000C9D4A6 +:10DA38008000CD1ED4211896580CC0311897C0B854 +:10DA4800781C580CC030F01F000518970C9B304C00 +:10DA5800F01F00030E9CD8228000D13C8000C974BE +:10DA6800D42130071896C0880C9C6C06F01F00055E +:10DA7800F80700075C575806CF810E9CD822000093 +:10DA88008000DA3CD4217848189758A85F1A5808BB +:10DA98005F19F5E90009C2005818C1E0F8FC0084D4 +:10DAA800580CC060F01F000D3008EF4800843FF8A4 +:10DAB800EEFC0080EF58003AF01F000930066FECCA +:10DAC800EF460080F01F00066FFCF01F0005EF46D0 +:10DAD800007CEF460078D8228000D13C8000DA68CC +:10DAE800D421169778081638C04176389908C11895 +:10DAF8004B899308C0A870390E39C0614B599308F7 +:10DB08006E399139C06812985808CF614B1993083B +:10DB180030060E9C8F36F01F00306E4858A85F19EB +:10DB280058185F181268EC081800C0C0EF380026B3 +:10DB3800EDB80000C071A1B80E9CEF680026F01F78 +:10DB480000276E485818C3206FE85808C0E04A48B4 +:10DB5800201D1AD8E06804F91AD84A284A2C1AD87D +:10DB6800F01F00222FCDC0086FF85808C0E049C840 +:10DB7800201D1AD8E06804FA1AD849D849AC1AD82E +:10DB8800F01F001A2FCDC008EEF800805808C0E03A +:10DB98004938201D1AD8E06804FC1AD84958492C7D +:10DBA8001AD8F01F00122FCDC00830088F48F01F78 +:10DBB8000012C0E148A8201D1AD8E06805021AD84A +:10DBC80048E8489C1AD8F01F00092FCDC008D82271 +:10DBD800000082188000DA8C80010CEC8003A868B1 +:10DBE8008003A9AC80039D9C800094C48003A9C4D1 +:10DBF8008003A9E08000D6B48003A9F8D42118973F +:10DC080078485808C0E04A68201D1AD8E0680175AD +:10DC18001AD84A484A4C1AD8F01F00242FCDC008F9 +:10DC2800303CF01F00231896C380EF08001CF958F9 +:10DC3800001C6E6899688E48A1B8B8483018994891 +:10DC4800EF38000BF968000BEF38000AF968000A92 +:10DC58006E089908497972080E38C0316E38C108C3 +:10DC680049599308C0A870390E39C06149299308E9 +:10DC78006E399139C06812985808CF6148E99308FD +:10DC880030080E9B8F38302CF01F000C48C948D83C +:10DC98008D8970098D3991060C9CD8228003A8685B +:10DCA8008003AA1880039D9C800094C48000C9D476 +:10DCB8000000821C000082188000C9748000D5F81A +:10DCC80000008214D431204D4B583005700910964D +:10DCD8002FF90A9491090A934B2830627007E08F54 +:10DCE800019E6E485808C0E14AF8201D1AD8E0681D +:10DCF80002571AD84AD84AEC1AD8F01F002E2FCD4E +:10DD0800C0085818C0E14A88201D1AD8E06802588F +:10DD18001AD84A984A6C1AD8F01F00262FCDC00886 +:10DD280058A8C0E14A08201D1AD8E06802591AD834 +:10DD38004A2849FC1AD8F01F001F2FCDC0085828C0 +:10DD4800C071EF38004EE4081800E0800081EF3819 +:10DD5800004E30CAF4081800C7A0EF3800AC10997C +:10DD6800E8081800C300EEF900A82FF9EF4900A849 +:10DD7800493A100AF53AFFFF1439C6B33009EF499A +:10DD880000A8E4081800F9B90801F1D9E808EFF883 +:10DD98008EAC0E9CF01F000BC5C80000000082105E +:10DDA8000000820C8003A8688003AA3C80039D9C25 +:10DDB800800094C48003AA688003AA948003AC38C6 +:10DDC80080010A20EF08003AE6081900F9B90401B1 +:10DDD800F1D9E408EFF84C1D6FF85808C3A0EF0913 +:10DDE800003AEF08004CF0091900C3356E4858286E +:10DDF800C100EF09004AEF0800484CD1A3581208A7 +:10DE0800EF39004EE2090709F0090948EF58004CBC +:10DE1800EF080060EF090056F0091900F00917B083 +:10DE2800EF08003CF3D9C02FEF590058F00A15014C +:10DE3800F0091900EFFA3C2CEF08003CEF53003AC8 +:10DE4800EF5800560E9CF01F003BC0383018C02811 +:10DE580030086E495869C0B16C0B6EDAF60A010ACF +:10DE6800E04A0028E08800042FF85C588ECAEDBA12 +:10DE78000003C39158495F0A58795F091449E809B2 +:10DE88001800C3106C0AEEFC00A0EEF100A4F80123 +:10DE980002416ED9EEFB009CF4090109E20B000E69 +:10DEA800E06A01F4FC0A0D00FAE100080039E08894 +:10DEB80000062FF830115C58C178EF3100ADE20C44 +:10DEC800034BF60A0D0A1439E088000E50180E9C10 +:10DED800F01F0019EF3900AD30012FF9EF6900ADDF +:10DEE8004018C0283001EEFC0080580CC1106ED9D3 +:10DEF8006C0A121AEF09004CF2091006123AC08394 +:10DF08005018F01F000E30004018EF4000806E4996 +:10DF18005839C1516C0A6ED9F4090109E049002841 +:10DF2800E08800182FF85C58C14800008003A85802 +:10DF3800800110608001109C8000DA685899C091B7 +:10DF48006C0A6ED9F4090109E04900F0E08B00047D +:10DF58005808C4900E9CF01F00434C385805C14027 +:10DF680070081037C0E14C18201D1AD8E06802E488 +:10DF78001AD84BF84BFC1AD8F01F003F2FCDC00819 +:10DF88006E388B38C13870090E39C0E04B78201DC7 +:10DF98001AD8E06802E81AD84B884B6C1AD8F01FD8 +:10DFA80000362FCDC0086E399109EEF80098580850 +:10DFB800C0403FBB6E6C5D185801C0F0EF180024DC +:10DFC800201DEEC9FFFC1AD80E9AEF18001C6EAB84 +:10DFD8006F7CF01F002B2FED0E9B302C6E37F01F3F +:10DFE8000029C1C8EF3900382FF9EF690038EF3A36 +:10DFF8000039F20A1800E08B0010EF680038EEF8DC +:10E0080000945808C0600E9B6E6C5D185C5CC04143 +:10E018000E9CF01F001D0E956E375807FE91FE638B +:10E0280049A849B410957006C6086C4858A8C0E0BD +:10E0380048E8201D1AD8E068030C1AD8495848DC6B +:10E048001AD8F01F000D2FCDC00868096CD8F20847 +:10E058000108E04800F0E08B004C0C976C36C4587F +:10E068008000DA8C0000820C8003A8688003AAC4B0 +:10E0780080039D9C800094C48003AAF08001023430 +:10E088008000C97480010CEC00008220000082101E +:10E098008003AB1C6A081036C0E149A8201D1AD8B5 +:10E0A800E068031B1AD84988498C1AD8F01F001851 +:10E0B8002FCDC0086C388F38C1386A080C38C0E0DA +:10E0C8004908201D1AD8E068031F1AD8491848FCC7 +:10E0D8001AD8F01F000F2FCDC0086C388B080C9B86 +:10E0E800302C6C36F01F000C5806CA01C0780C9C06 +:10E0F800F01F000A5807CCF1CE1B2FCDD8320000F4 +:10E108008003A8688003AB4C80039D9C800094C466 +:10E118008003AB748000C9748000DA8CD431202D60 +:10E1280018951691784858A8C0A1189B4A2CF01F3A +:10E1380000230A9B302CF01F0022C3B8780850082F +:10E148007818F903001C5018F9020024797778A68A +:10E15800F8F400987860189B49ACF01F00186BFC25 +:10E16800580CC030F01F00186BEC580CC030F01F72 +:10E178000016EAFC0080580CC030F01F00130A9B00 +:10E18800302CF01F000F5804C040009C3FBB5D14AA +:10E198005801C0F0201D5C72F1D3C0101AD20C9B3C +:10E1A800FAC9FFF4FACAFFF80E9CF01F00082FED19 +:10E1B8002FEDD832000082208000DAE88000C97490 +:10E1C8000000820C8000DA6880010234D42118969D +:10E1D800302CF01F00511897C5114D084D0A189999 +:10E1E8007008740BC0A870DAF60A010A123AF4092A +:10E1F8001720F00C172070385808CF61580CC04011 +:10E20800301BF01F0048302CF01F00431897C30143 +:10E218004C584C3A18997008740E37FBC178F13A8B +:10E228000014EC0A1800E08B000DF60A1800E08BC9 +:10E23800000970D7FC0701071237C033109CC0389B +:10E24800169A12977038149B0E995808CE91580C4C +:10E25800C040301BF01F0033302CF01F002F1897E0 +:10E26800C5704B28F10900D42019F15900D44AF897 +:10E27800F10900D42019F15900D4E06A00B0300B3C +:10E288000E9CF01F002B3408EF6800143FF8EF686D +:10E29800000B4A384A7A70097408F2080008950891 +:10E2A800EF48006CEF480068EF48005CEF4800500A +:10E2B8003008EF6800ADEF680038E0680800EF58F4 +:10E2C800002EEF58002C3068EF58004AEF58004CE9 +:10E2D800E0681000EF580072E0680200EF58003C58 +:10E2E8003FF8EF58003A3018EF5800564928EF48E1 +:10E2F800008CE068DD00EA18006DEF48009CE078CB +:10E3080024F88FD9EF4800A03098EF4800A40E9C5D +:10E31800D82200008000C9D40000822000008210AA +:10E328008000E1240000820C000080D48002E8BC58 +:10E33800000001F48000E5ECD401340CF01F000269 +:10E34800D80200008000E1D4D431189714961293B3 +:10E35800169578445804C0E04C98201D1AD8E068F7 +:10E36800020A1AD84C784C8C1AD8F01F00482FCDC6 +:10E37800C008580BC041E06600F7CB78304A140C4F +:10E38800F01F0043EF560024EF08001CE8081900AE +:10E39800C34110944BF84C0970064C08720B700C72 +:10E3A8004BF9E06A100092082FF80C995C88F00489 +:10E3B8001900F4081790C078F30E001CF00E19002D +:10E3C800CF4072395809CF911899C078F30E001CC4 +:10E3D800F00E1900CEA072395809CF911699C0785D +:10E3E800F30E001CF00E1900CE0072395809CF91B7 +:10E3F8004AB9B208EF58001C4AA84AB9700A72080C +:10E40800F40800089308EF48005CF0C90001E068D0 +:10E418000800EF580060EF58002CEF58002E300825 +:10E428008FC88FA8E0680200EF49006CEF490050E0 +:10E43800EF58003C0A9BE06C0200F01F001C5C8C4B +:10E44800F808100AEF5800583018EF430090EF58BA +:10E458000056EF5C003C30288F48495972080E3846 +:10E46800C0316E38C2C849399308C26870390E394C +:10E47800C221490993086E399139C2288003A868D6 +:10E488008003AB9C80039D9C800094C48002E73687 +:10E498000000820C0000821400008220000001F8B5 +:10E4A80000008210000001F48000D95C0000821C8A +:10E4B8000000821812985808CDA148D9930848D866 +:10E4C80070098F3991073019201D30081AD9109A10 +:10E4D8003029109B0E9CF01F00082FEDEDDCC008C2 +:10E4E800C0410E9CF01F00050C9CD8320000821819 +:10E4F8000000820C8001035080010CECD421189795 +:10E5080078465826C390E08B00075806C0C05816B6 +:10E51800C071C2785846C370C3635876C3C030060A +:10E528000C97C4184A8972081838C0317838C1085D +:10E538004A699308C0A870390E39C0614A399308EE +:10E548006E399139C06812985808CF6149F9930813 +:10E5580030080E9B8F38302C1097F01F001DC0A874 +:10E56800189B49CCF01F001C0E9B303CF01F001874 +:10E5780030070E96C188189B498CF01F00170E9B18 +:10E588000C9CCF5B301BF01F0016EDDCC008C0B13F +:10E598003058C088301BF01F0012EDDCC008C031B5 +:10E5A80030988F4858075F193008F00618005F0A3E +:10E5B800F5E90009F0091800C0400E9CF01F000999 +:10E5C8000C9CD8220000821C000082188000C974AC +:10E5D800000082148000DAE80000820C80010A0042 +:10E5E80080010CECD421169C1497580AC08094CB57 +:10E5F800F01F00070E9CF01F0007D82A5809C030EA +:10E60800149CD822F01F00045C5CD8228000D984B6 +:10E618008000D13C8000E504D42149887007C2A855 +:10E62800EEFB0084580BC140169AEEF8008C58088F +:10E63800C06030090E9B6E6C5D18C078169A1099F0 +:10E648000E9B109CF01F000E5C5CEFFC0A21EF385B +:10E658000026EDB80000C0D1A1B80E9CEF680026D6 +:10E66800F01F0008EF380026E018FFFCEF680026CE +:10E678006E375807CD61D8220000820C8000E5EC87 +:10E6880080010CECD401F01F0007487913882FF89B +:10E698005C58B288EDB80000C031F01F0004D80201 +:10E6A8008000E620000073148000DCCCD4314A6876 +:10E6B80070063058ED3E000C2EC6A58EF00E1900DF +:10E6C800E0880040205E3008A36E30175C8E302151 +:10E6D8003042E7DEC010E06401FFE0650200C2E8F6 +:10E6E800F5D8C010EC0A070BEE0B1800C080C293D7 +:10E6F800EC0A0009E20B1800C1B1C0382FF8C1D8E4 +:10E70800139BE40B1800C1D12FDA063AC1A413BA3F +:10E718002FC813A95C88F5E910895C89F2CA000141 +:10E72800E80A1900EA0917B0F959003CC0781399AA +:10E738005809C070F20800085C88FC081900CD135D +:10E74800D832000000007318D4217848189616971C +:10E75800F138000DEDB80000C1C1169C3007F01F5C +:10E768000020C368F138000DEDB80000C0E16C4826 +:10E77800F13A000CF139000DF3EA1089A1A9F16909 +:10E78800000DA989F169000C6E07F01F0016C0285A +:10E7980049555807C1D06E4811C411DBB16BF7E475 +:10E7A800118B11E48EEEF7E4108B6A0A8CE911F4F0 +:10E7B8000E9CE9EB100B16191409F20E010ECD3759 +:10E7C800C098141B6C1CAC6B5C7BF01F00088D0799 +:10E7D800D8225809FE99FFF7CFBB00008000DA68FD +:10E7E8008000DA3C0000731C8000D210D4314C58F1 +:10E7F80018971188EDB80004E081020C79994C282B +:10E80800F90C006070086FAAF208010BC186103974 +:10E81800C0614BE87008F4080108C1164BB87008CD +:10E82800103AC2914BA87008F139000FF138000E68 +:10E83800F3E81088F8081900E088001E4B487009B2 +:10E84800F338000FF339000EF1E910884AE972092C +:10E858005C88EF490064EF5800604AC97209EF49C3 +:10E8680000685808C080EF3900AC3008F00918007B +:10E87800EFF81EAC4A586F497008F009010B580BA5 +:10E88800E089004C3006EF5600704A2B960BEC0BD3 +:10E898001900C3215C7CEF160060F80A000A6FAC0F +:10E8A800EC0C000C143CC281EF0A003AF60A19007D +:10E8B800C2351039C211EF3800542FF85C58EF6890 +:10E8C80000543039F2081800E088000FEF090056AC +:10E8D800EF08003C12085C88F2081900E088014A39 +:10E8E800EF580056C469F2081800E08101430E9CF5 +:10E8F800F01F0009C3E93008EF680054C3A90000FD +:10E90800000073280000731C0000732400007318B3 +:10E91800000073208001016A5CD91009E08600D1EB +:10E928006F7912185808E08900CCEF380026EDB846 +:10E938000002C081A3C8EF680026EF080058EF580E +:10E948000056300A4D39EF6A004E720BEF6A0054D8 +:10E9580072096F48EF490050F6080108EF09007284 +:10E96800EF580070F2080008EF09004AEF580072EB +:10E97800EF080048A358F2080008EF58004C6E480A +:10E988005838E0880066EF080056EF090058F0098B +:10E998001900E0880006EF09003C1009C0A8EF192B +:10E9A800003CB339F7D8C010F20B0C0AF408000980 +:10E9B8005C89F0091900E088004CEF590056C488BA +:10E9C8006C08EF030074EF48007C6C1CF01F0032E9 +:10E9D800F8031900C0E24B18201D1AD8E06803B3E9 +:10E9E8001AD84AF84AFC1AD8F01F002F2FCDC008B1 +:10E9F800EF0800705808C09020186C49F339000DD2 +:10EA0800EDB90000EFF80C38EF0300746C1CF01F30 +:10EA1800002218130C9CEF530074F01F0024EF0819 +:10EA28000074EA081900C1606FF85808C1316FE82E +:10EA38005808C1014998201D1AD8E06803BF1AD8A0 +:10EA480049B8498C1AD8F01F00182FCDC0084914AE +:10EA580030056FF65806C2D06C4811CBF139000D5D +:10EA6800F3D9C0025F1A11D9B169F3EB118911EB1F +:10EA7800F3EB108911F81248680912188CE9F409A7 +:10EA8800000912085808FE9AFF9DE08F045F0000F5 +:10EA9800000073248000CD0C8003AC608003ACA818 +:10EAA80080039D9C800094C48000DA3C8003ACD035 +:10EAB8003FF8EF58003A3008EF680038C5A830082A +:10EAC800EF580070C5686C08EF030074EF480078D1 +:10EAD8006C1CF01F0021F8031900C0E249F8201D42 +:10EAE8001AD8E06803E01AD849D849EC1AD8F01FB8 +:10EAF800001E2FCDC008EF0800705808C0902018DD +:10EB08006C49F339000DEDB90000EFF80C38EF034C +:10EB180000746C1CF01F001018130C9CEF53007449 +:10EB2800F01F0012EF080074EA081900C2406FF8DD +:10EB38005808C2116FE85808C1E14888201D1AD842 +:10EB4800E06803EA1AD848A8486C1AD8F01F0006EB +:10EB58002FCDC0088000CD0C8003AC608003ACA82A +:10EB680080039D9C800094C48000DA3C8003ACD074 +:10EB78004C5430056FE65806C2106C4811CCF13978 +:10EB8800000D11DAF3D9C002B16AF5EC118A11EC63 +:10EB980011F858095F1B6809F5EC108AF1EA100AA8 +:10EBA8008CE8F20A010AF6080008F4080108C066B1 +:10EBB8006F7810195809FE9AFF886F085808C29094 +:10EBC8004B196F1A7209F4090109C2374AFB760B0F +:10EBD800EF0A0048F6080108F40B140316185C88BD +:10EBE800F00A000A5C8AEF09004AF40B14035C4837 +:10EBF800EF5A0048F20A14021419F2080008F6083D +:10EC08000009EF58004AEF59004C3008EF4800401F +:10EC180049F84A09900A6EA8580AE0800381720BE5 +:10EC2800F60911FF1009E08600B15C7AF0C9FFFF10 +:10EC38001619F20A010A580AE08900A849697216E9 +:10EC48005806C0E14958201D1AD8E06804461AD869 +:10EC58004938494C1AD8F01F00142FCDC008F00BC2 +:10EC6800010BE04B7FFEE08A002348C8201D1AD81C +:10EC7800E06804471AD848D848AC1AD8F01F000AE8 +:10EC88002FCDC008000073240000821000007320FC +:10EC98000000731C000073348003AC608003ACF088 +:10ECA80080039D9C800094C48003AD008CD81638E6 +:10ECB800C3148C48F3D8C0101639C0E44AB8201DD4 +:10ECC8001AD8E06804491AD84A984AAC1AD8F01FEA +:10ECD800002A2FCDC0081618300A5C88C058AC48E6 +:10ECE800AC5A121B6C068CD91639CFA55C3B0C9C10 +:10ECF8005C8BF01F0022C21049C8201D1AD8E0689A +:10ED080004561AD849E849BC1AD8F01F001B2FCD61 +:10ED1800C0085C3B0C9C5C8BF01F0018C0E04938B5 +:10ED2800201D1AD8E068045B1AD84958491C1AD81B +:10ED3800F01F00112FCDC0086C1A4929932A492ABF +:10ED48006EA8740B926C9508F80B000A101AB26A38 +:10ED5800F00A16187249B2F8B2CAF5D8C208F1D842 +:10ED6800C108B2DAB2E8C1B88003AC608003AD1064 +:10ED780080039D9C800094C48000CDD48003AD2086 +:10ED8800000073340000731C101BC097EF38002676 +:10ED9800A1B80E9CEF680026F01F00424C256EA912 +:10EDA8006A08F009010AE08602B7F0CAFFFFEF1B04 +:10EDB800002C121A161A580AE08902AE1039E0819E +:10EDC80001F54BA8906A7048F139000DF3D9C002DB +:10EDD8005F19F40900094B6AB409EF0A002CF20A1A +:10EDE8001900C462F13A000CF139000DF3EA1089F8 +:10EDF8005C89EDB90000C081E219FFFEF169000DE0 +:10EE0800A989F169000C4A98EF0A002CB06A704988 +:10EE1800F339000DEDB90001C031201AB06A4A3645 +:10EE28008CEB6C1CF01F00238C696C48F138000DCA +:10EE3800F1D8C0025F18F208000849D9B20849A9F8 +:10EE480072095C78EF1A002C12086EA9F4090009FF +:10EE58001238C0E04988201D1AD8E068048B1AD8F7 +:10EE68004968497C1AD8F01F00172FCDC008EEF664 +:10EE780000805806E08000BE48C46848F138000D9C +:10EE8800EDB80000C080C4B8109C7008EF4800803E +:10EE9800F01F000DEEF800805808CF71CAA80000D6 +:10EEA80080010CEC0000731C000073340000732018 +:10EEB8008000D2108003AC608003AD3480039D9C39 +:10EEC800800094C48000DA3CF138000DEDB80000F1 +:10EED800C1F16848F139000DF13A000CF3EA108AE3 +:10EEE8005C8A1499A1A95C79F20B1608EDBA0001A5 +:10EEF800C0F0F169000DF16B000C68488869F138C1 +:10EF0800000DF1D8C0025F18F2080008A6086C05C9 +:10EF18000A96F01F00455805C041C6984C324C432C +:10EF28006C4811C5868A11D9B169F3E5118911E5D3 +:10EF38008CEBF3E510890C9C11F5EBE91009F40949 +:10EF48000109640A1409F20B010BCBF7E08F0201E7 +:10EF58004B89EEF80080704811FB11C511DC11E8EF +:10EF6800B16CF9E5118CF9E81088F7E81008F00A97 +:10EF7800010A5C8AB26A7248F138000DEDB80001E6 +:10EF8800C031201AB26A4AB58AEB6A1CF01F002AFF +:10EF98008A696A48F138000DF1D8C0025F18F20892 +:10EFA80000084A39B2085C784A097209F009000A6F +:10EFB800EEF80080704811FB11CC11D911E8B16945 +:10EFC800F3EC1189F3E81089F7E91009123AC0E067 +:10EFD80049A8201D1AD8E06804C31AD84988499C52 +:10EFE8001AD8F01F00192FCDC0080C95EF450080E6 +:10EFF80048F848E9908A7209F40900098FA990082D +:10F00800EF09002CF0091900C22248C8201D1AD89F +:10F01800E06804CD1AD848D848AC1AD8F01F000ABE +:10F028002FCDC0088000DA3C0000731C000073205C +:10F03800000073348000D2108003AC608003AD6C94 +:10F0480080039D9C800094C48003ADA810190E9C79 +:10F05800EF59002CF01F004A4CA8300A7019924B47 +:10F06800F40B1900C0504C8A9509300991194C5875 +:10F078007048F138000DEDB80000C5B14C3913885F +:10F08800A5B8B288C56881098CEAF13B000DF7DBA9 +:10F09800C0025F1BF60A000A14098FA9EF0A002CA8 +:10F0A800F138000D8C69F1D8C002F7D9C0105808A2 +:10F0B8005F1EF9DAC010FC0B000B163CC0E44B488D +:10F0C800201D1AD8E06804F21AD84B284B2C1AD8FD +:10F0D800F01F00322FCDC008F409010958085F1845 +:10F0E800F20801080E9CEF58002CF01F00256C1B3D +:10F0F8009648E2081900C090680C580CC040F01FF0 +:10F108000028C028890B8D126C48F138000DEDB825 +:10F118000000C0810B88A5B8AA886E485848EFF34C +:10F128000A046C080C9CEF480080F01F001EC07891 +:10F1380049D030014944300249453073EEF6008029 +:10F148005806C1006C4811CB11D9B169F3EB11898C +:10F1580011EB6EAAF3EB108911FBF7E910091439CA +:10F16800C930EF380026EDB80000C041A1C80E9C98 +:10F17800CE68A1A8EF680026D83200008000D5FE2E +:10F18800000073340000732C000073298003AC6006 +:10F198008003ADC880039D9C800094C48000CD345A +:10F1A8008000DA3C0000731C0E9CF01F0040EEF655 +:10F1B80000805806C0714BECF01F003EEF4C0080F9 +:10F1C800D8326A093005F2CCFFFF6C4811CB11DA4E +:10F1D800B16AF5EB118A11EBF5EB108A11FBF7EA2E +:10F1E800100A1439C1214B2C8C689869F009190050 +:10F1F800E08800B4F01F002FE08000B05805EBFC59 +:10F208001A00EFFC0A20C0D85805C0D1F20A010B39 +:10F21800C4574A7CF01F0027E08000A0EF4C008014 +:10F228000C9BC3986A4B17F417C217D317EBB1633B +:10F23800E7E21183E7EB108BE9EB100B5CDB120BB9 +:10F24800C2D6F80A010B580BE0890029498CF01F37 +:10F2580000191897E08000826A4811F911CA11DB79 +:10F2680011E8B16BF7EA118BF7E8108B4928F3EB3B +:10F27800100B70088AE9101916095809E08A000964 +:10F28800F00B010B6A1CAA6B5C7BF01F000C8B0750 +:10F298000C9B0E9CF01F000AD8326C0B0C95580B77 +:10F2A800C1001696C93B000080010BF000007334C2 +:10F2B8008000DA080000731C8000D2108000E7503C +:10F2C80014195809E08A004AF138000DEDB8000019 +:10F2D800C4404A3CF01F00238D0CC3F06C4811F960 +:10F2E80011CA11DB11E8B16BF7EA118BF7E8108B43 +:10F2F80049D8F3EB100B70088CE910191609580956 +:10F30800E08A002CF00B010B6C1CAC6B5C7BF01FD3 +:10F318000017D8320E9CF01F0016D832720BF60870 +:10F328000109C0A62FFBEF19002CF60801081218D6 +:10F338005808E08A00130E9CEF380026A1B8EF6841 +:10F348000026F01F000CD8323008FE9FFBB4580985 +:10F35800FE99FE00FE9FFE4BD83200000000733479 +:10F368008000DA080000731C8000D21080010BF0C6 +:10F3780080010CECD4314B86ED0800922FF87819F7 +:10F388004B65ED5800928B091388F1D8C004F20838 +:10F39800002818971693109C4B148908F01F003109 +:10F3A8006A080E9C118BF7DBC004A36B5C3BF01F53 +:10F3B800002EC0718E493138F0091900E08B000B1E +:10F3C8004A580E9CF109009A2FF9F159009AE08FDA +:10F3D80003026A0C069B2F0CF01F0024C0B16A0AB6 +:10F3E800FC19E000F5380010B968E618F00012388A +:10F3F800C0A149980E9CF10900A02FF9F15900A06D +:10F40800E08F02E9F4CBFFF48EC830692F0A0E9C16 +:10F41800F01F00175C8CC080ED0800980E9C2FF838 +:10F42800ED580098C11868080E9CF13B000CA58B9C +:10F43800F60B10FCF01F000CC1C0ED08009A0E9CE2 +:10F448002FF8ED58009AED0800962FF8ED58009621 +:10F45800E08F02C6000080D40000733000007318EB +:10F468008000D67C8000CDD48001255880011E2CD8 +:10F47800680811CA11D9B169F3EA118911EAF3EAE6 +:10F48800108911FAF5E91009F20A1618B0CAF5D967 +:10F49800C208B0F9B0DAF5D9C108B0EA4B28910929 +:10F4A8006808F1390008F13A0009B16AF5E9118AEA +:10F4B800F139000AF5E9108AF139000BF3EA100A6C +:10F4C800F4091618F1690008F3DAC208F16A000BAA +:10F4D800F1690009F3DAC108F169000A4A386804D9 +:10F4E800910AE938000DF5D8C002F1D8C0064A0BD8 +:10F4F800B6884A086A09580A5F1A8E4514055C8559 +:10F50800B00549D87006CA586C485808C0E149B8CF +:10F51800201D1AD8E06800B71AD84998499C1AD80B +:10F52800F01F00192FCDC00858A8C0E14938201D88 +:10F538001AD8E06800B81AD84948492C1AD8F01FD8 +:10F5480000122FCDC0085818C24148C8201D1AD82B +:10F55800E06800B91AD848E848AC1AD8F01F000A81 +:10F568002FCDC0080000731C00007324000073280E +:10F57800000073200000820C8003AC608003ADF0B3 +:10F5880080039D9C800094C48003AE188003AE4421 +:10F59800098A0998F1EA1088ED0A0024F00A19008E +:10F5A800C56109AA09B8F1EA1088ED0A001CF00A39 +:10F5B8001900C4D1F33A000CF338000DB168F1EA30 +:10F5C8001188F33A000EF1EA1088F33A000FF5E8D3 +:10F5D80010086C1A103AC3B1F33A0010F33800114E +:10F5E800B168F1EA1188F33A0012F1EA1088F33AA7 +:10F5F8000013F5E810086C0A103AC2916C380C3800 +:10F60800C0E14CA8201D1AD8E06800C21AD84C885E +:10F618004C8C1AD8F01F00482FCDC008580CC06079 +:10F6280099384C6870098D3991066C380C38E0812E +:10F6380001A14BE8201D1AD8E06800C81AD84C0868 +:10F648004BCC1AD8F01F003C2FCDC0080C9C6C3650 +:10F658005806FE91FF5BE08F05296C4858A8C0E06A +:10F668004B28201D1AD8E06800D21AD84B584B1CDA +:10F678001AD8F01F00312FCDC008098B0998ED0A60 +:10F688000024F1EB1088F00A1900C77109AC09BB16 +:10F69800ED08001CF7EC108BF6081900C6E1F33CE6 +:10F6A800000CF33B000DB16BF7EC118BF33C000E33 +:10F6B800F7EC108BF33C000FF9EB100B6C1C163CAD +:10F6C800C5C1F33C0010F33B0011B16BF7EC118B93 +:10F6D800F33C0012F7EC108BF33C0013F9EB100B22 +:10F6E8006C0C163CC4A1498B178CEDBC0002E08061 +:10F6F800013AEDBC0001C2D1494B6CAC760BF60C5B +:10F70800010CC2D6ED14002C081C580CE089002806 +:10F718005C7A201D5C751ADA48DCEA0B000B5C7811 +:10F72800F2CAFFF0780CC7688003AC608003AE6C47 +:10F7380080039D9C800094C40000820C8003AE98D6 +:10F748008003AEC4000073280000731C00007324FB +:10F75800EDBC0000C0414CC870088DD84CB8900969 +:10F768003008F0091900E08000FEED3800260C9CF6 +:10F77800A1B8ED680026CF486C365806FE91FF6F99 +:10F788004C3870050C98CF286A0A580AC130F33CE7 +:10F798000010F33B0011B16BF7EC118BF33C001236 +:10F7A800F7EC108BF33C0013F9EB100B163AE081E1 +:10F7B80000DC09AB09BAF5EB108AEB0B001CF40B63 +:10F7C8001900E08100D25808C0706A3991394B0895 +:10F7D80070098B3991054AF81188EDB80004C1F118 +:10F7E8004AD8700913AB139A13B8201D1389F1EB8B +:10F7F8001088F5E910894A5B1AD9968C4A794A8BA0 +:10F808007209760BF2CAFFF0F80B000B4A5C780C11 +:10F818002FFC2F49F01F00242FEDCA48EDB8000136 +:10F82800E08100A1EB3C0014F01F00201896C08175 +:10F8380049F8F109009C2FF9F159009CC938497819 +:10F848007008F0C9FFF0C0311298C108F1390013EF +:10F85800F13B0010F13A0011F1380012B16AF5EBF2 +:10F86800118AF5E81088F3E810088D08EB08001CE9 +:10F87800ED58001C48987008F0C9FFF4C1A112980F +:10F88800C27800000000821000007320000082147B +:10F898000000732800007318000073300000731C08 +:10F8A80000007324800102348000E1D4000080D479 +:10F8B800F139000FF13B000CF13A000DF138000E60 +:10F8C800B16AF5EB118AF5E81088F3E810088D188D +:10F8D8004C587008118B1199F3EB1089ED590024DD +:10F8E80030398D494C197209F2CBFFFF8DCB8DABA6 +:10F8F800F13B000FF138000EF7E81088ED5800587A +:10F90800ED5800608A48E2180199AC486A684B8A49 +:10F918002019740C8D688D3C6A889506ED49006441 +:10F928008D880C9CF01F0033ECCBFFFCED1C003CD9 +:10F93800F01F00313019ED5C003C201D30081AD949 +:10F94800109A3129109B0C9CF01F002C2FED5C5C49 +:10F95800C0600C9C300BF01F002AC0480C9CF01FA4 +:10F9680000290E9CC3C80A986A355805FE91FF0EF7 +:10F9780049D56A08F13C000DF9DCC006F01F0022E9 +:10F988005806E08003504A188E4A6A09911791492F +:10F99800B06A30096E1A9109912A49D8910949D853 +:10F9A800B089ECFA0084580AC3C0ECF8008C5808F7 +:10F9B800C0500C9B6C6C5D18C06810990C9B109C17 +:10F9C800F01F00155C5CC041ED4C0084C2A80E9C81 +:10F9D8004928F10900962FF9F1590096F01F0010F7 +:10F9E800D8320000000073180000731C0000820C5D +:10F9F8008000E6B48000D95C800103508000E124D7 +:10FA080080010CEC8000D67E000073340000732C5B +:10FA1800000073298000E5EC000080D48000D13C10 +:10FA28004A9891064A981188EDB80002C3216C489B +:10FA38005828C0814A6870096D781039E081026BD6 +:10FA4800C1D84A49720A6CA9F4090109E08602631F +:10FA5800ED1A002C14195809E089025DE08F032182 +:10FA680049D8201D1AD8E06802271AD849B849CCC5 +:10FA78001AD8F01F001C2FCDC00849B91388A3B8A5 +:10FA8800B288ED380026A1C8ED680026E08F024351 +:10FA9800EDB80001C0616C4820285818E08B00A21E +:10FAA800492870088DD830080C9CED6800ADF01F0F +:10FAB80000106C4820285878E08B022D48D9F208AD +:10FAC800032F000000008224000073280000732424 +:10FAD8000000731C8003AC608003AEF480039D9C1F +:10FAE800800094C400007329000082108000E6B4EE +:10FAF8008003AC404CF811891298E218001259287A +:10FB0800C7A14CD8700A6DF8704811FB11C711DCF9 +:10FB180011E8B16CF9E7118CF9E81088F7E81008DA +:10FB28002FF8103AC681ED0800722FF8ED580072D0 +:10FB38004C287008ED4A0050F0CA00012FF88DC813 +:10FB48008DA84BF87008F139000FF138000EF3E872 +:10FB58001088ED5800603048ED4A00648D48EC0884 +:10FB6800000BED1C003CF01F00375C8CF808100AF5 +:10FB7800ED5C003CED580058ED0900563018F009CE +:10FB88001900C021A17CED5C0056ED0800745808EE +:10FB9800C0E14AD8201D1AD8E06802591AD84AB8D4 +:10FBA8004ABC1AD8F01F002B2FCDC00820186DFCB6 +:10FBB800ED5800747808ED48007C5808F9B800FF43 +:10FBC800F9B80100EDF81E4EED58003AF01F00227A +:10FBD800ECF800905808C050300A0C9B6C6C5D180B +:10FBE800ED380026A1B80C9CED680026F01F001B1C +:10FBF800E08F0191EDB90004E081018D4908700999 +:10FC080013AB139A13B8201D1389F1EB1088F5E98B +:10FC18001089493B1AD9968C4929488B7209760B69 +:10FC2800F2CAFFF0F80B000B483C780CC7980000AC +:10FC380000007328000073240000731C0000731870 +:10FC48008000D95C8003AC608003AF1480039D9C66 +:10FC5800800094C48000DA3C80010CEC0000732022 +:10FC6800000073304C281188EDB80004C5E14C1829 +:10FC7800700C6D485CD81808C3D66D78F808010870 +:10FC88005808E089003830488D486C885808C0E129 +:10FC98004B98201D1AD8E068027E1AD84B784B8CF6 +:10FCA8001AD8F01F00382FCDC008300A0C9B6C6C96 +:10FCB8005D185C5CC0700C9C301BF01F0033E08F3B +:10FCC80001A7ED0700560C9CF01F0030ED080070EE +:10FCD8005808F9B901FFF1D9E108EDF81C383019D5 +:10FCE800ED08003CF2071900C021A178ED58005634 +:10FCF800C2E84A78700913AB139A13B81389F1EB69 +:10FD08001088F5E910894A3B201D1AD94A29968797 +:10FD180072094A2BF2CAFFF0760BEE0B000B2F4943 +:10FD2800F01F001F2FEDCF68EDB80001E08100F350 +:10FD380049A870096CA820181039E08100EC0C9CC7 +:10FD4800F01F0018CE780C9CF01F0010496811882D +:10FD5800EDB80005E08100DFED380026A1B80C9C65 +:10FD6800ED680026F01F00113078CC1800007328C9 +:10FD7800000073248003AC608003AF2C80039D9C3B +:10FD8800800094C48000E1248000E7F40000731828 +:10FD980000007320000073300000731C80010234DF +:10FDA800800101000000732980010CEC0C9CF01FFD +:10FDB800003E4BE84BE91188E2180020C2D01388B6 +:10FDC800EDB80004C1F14BB870096D781039C1A1C4 +:10FDD800ED380026A1B80C9CED680026F01F00360F +:10FDE8000C9CF01F00364B6972080C38C5604B59E3 +:10FDF8009308C05870390C39C69012985808CFB17A +:10FE0800C6D8ED380026A1B80C9CED680026F01F76 +:10FE1800002A3088C6C81388EDB80004E081007B4A +:10FE28004A4870096D781039C7513068C6080C9C6B +:10FE3800F01F001D49D81188EDB80005C6B1ED388E +:10FE48000026A1B80C9CED680026F01F001B0C9C36 +:10FE5800F01F001A49A972080C38C1F04999930893 +:10FE6800C05870390C39C32012985808CFB1C368EC +:10FE78000C9CF01F000D48E81188EDB80004C4A1DF +:10FE880048C870096D781039C4510C9CF01F000BDC +:10FE980048B972080C38C0316C38C21848999308B0 +:10FEA800C1B800008000E7F400007329000073283F +:10FEB8000000732480010CEC8000DA8C0000820CB6 +:10FEC8000000821870390C39C0614C0993086C39EC +:10FED8009139C06812985808CF614BC99308300807 +:10FEE8008D384BB870098D39910630A88D48C128D6 +:10FEF8000C9CF01F00384B881188EDB80004C0A195 +:10FF08004B6870096D781039C0514B591388A5A8F2 +:10FF1800B2884B381188EDB80003C091ECF800980E +:10FF28005808C0803FAB6C6C5D18C048EDB8000441 +:10FF3800C0A10C9B4ABCF01F002C0C9B302CF01F5E +:10FF4800002BC658ED0A0070580AC090ECF80088DB +:10FF58005808C0505C7A0C9B6C6C5D184A48700855 +:10FF68005808C24049C91389EDB90003F1F9080DD1 +:10FF7800F9BA0001F3DAE039F1F90E0D49CAECF8E3 +:10FF8800008C5808C070740A30090C9B6C6C5D18A2 +:10FF9800C0781099740A0C9B109CF01F00165C5CCA +:10FFA800C05049387008ED48008448D81188EDB829 +:10FFB8000005C271ECF8008C5808C1D030090C9BC0 +:10FFC800129A6C6C5D18C1D800008218000082205B +:10FFD8008000E7F4000073280000732400007329F0 +:10FFE8000000820C8000DAE88000C9740000732CDD +:08FFF8008000E5EC10990C9B60 +:02000004800179 +:10000000109A109CF01F002E30094AE80C9C9109B0 +:10001000F01F002D30064AB891064AC76E1C580CD6 +:10002000C330F01F002B8F16C2F86A0BF738000D93 +:10003000EDB80002C2604A78F10C00A02FFCF15C20 +:1000400000A0F10C00962FFCF15C0096179C17A6FF +:1000500017B8178BF9EB108B201D49F972091ADBC1 +:1000600049EB968CF2CAFFF0F1E6108849CB2F4994 +:10007000760BF80B000B49BC780CF01F001B2FED22 +:100080000E9CF01F0013F01F0019C1714988201D3C +:100090001AD8E06801771AD84968497C1AD8F01F45 +:1000A00000172FCDC0085808FE90FCE0FE9FFCEB27 +:1000B00049387006FE9FFB67D83200008000E5ECEF +:1000C0000000822480010CEC000073348000D13CDD +:1000D000000080D400007330000073200000731C07 +:1000E00000007324800102348000D6B48003AC6029 +:1000F0008003AF4080039D9C800094C40000822058 +:10010000D42179F95809C3107208F8CEFF88F9484C +:10011000007C79E8C038109E70085808C1C0704B48 +:1001200017F617C417D5B165EBE41185724A17EBC2 +:1001300015F7EBEB108B15C5EDEB100B15D615EA8B +:10014000B166EDE51186EDEA108AEFEA100AF60ACB +:10015000010ACE2693089D093008F9480040F93875 +:10016000004E2FF8F968004ED822D42179F95809A9 +:10017000C600F9380026EDB80002C5B07208F8CE06 +:10018000FF88F948007C79E8C038109E700858084C +:10019000C1C0704B17F617C417D5B165EBE41185D4 +:1001A000724A17EB15F7EBEB108B15C5EDEB100B47 +:1001B00015D615EAB166EDE51186EDEA108AEFEA8B +:1001C000100AF60A010ACE26930830089D09F9485C +:1001D0000040F938004E2FF8F9090056F968004E32 +:1001E000F5D9C02FF9080060F7D8C02FF009190021 +:1001F000F60817B0F4081780F9580058F908003CC1 +:10020000F00915015C78A178F91A0058103AF9F94B +:100210005C2CF9380026A3A8F909003CF9680026EF +:10022000F20815011009F90800581009F95900568B +:10023000D822D703D43118941693149112921096A1 +:100240004097300A314B301CF01F00391895C6D04A +:1002500098593138F0091900E08B000F4B58201DD8 +:100260001AD8E068031F1AD84B384B4C1AD8F01F25 +:1002700000342FCDC0080E9878175C78AEB8A988E6 +:10028000AEA8E0685014EF68000DA988EF68000C74 +:10029000E8081618AEC8F1D4C208AED8E608161899 +:1002A000EF680008F1D3C208F3D6C010EF68000968 +:1002B000AE993088A9893006AEF4EF63000BAE89A1 +:1002C000EF66000FEF660012EF660013EF66001096 +:1002D000EF660011EF68000E3069049A029BE9D4C2 +:1002E000C108E7D3C108AEE4EF63000A98C8F01F65 +:1002F00000155C7CEF6C0011A98CEF6C0010201DC8 +:10030000491C30671AD70C98F9070090049A2FF708 +:10031000029BE06900FFF95700900A9CF01F000B58 +:100320000A9CF01F000B2FEDD83200008000D3187C +:100330008003AF5C8003AFA480039D9C800094C4C5 +:1003400080011E2C000080D4800122948000D13CCA +:10035000D43120BD14915098414A505A12961897A2 +:100360003009F20119005F08F20A18005F0AF1EA89 +:10037000000AF20A1800C110F3D6C002C0E14C789E +:10038000201D1AD8E06800AD1AD84C584C5C1AD819 +:10039000F01F00452FCDC008580B5F195089126817 +:1003A000C0E04BE8201D1AD8E06800AF1AD84BF81F +:1003B0004BCC1AD8F01F003C2FCDC008EF080072BC +:1003C000E2081900C0B2EF380026EA18FFFFE8186B +:1003D000FF80EF680026E08F02E34058F3D8C001A9 +:1003E000E2180002F9B8010CF009002950296FB099 +:1003F000EF02007431F8F0021900E08800144AC8D6 +:10040000F109009C2FF9F159009CE06C00FFEF38D6 +:100410000026EA18FFFFE818FF80EF680026E08F4B +:1004200002C36FF85802C2605808C1404028A38830 +:100430002FB8AD685C883003503B50A8F7D1B0109E +:10044000409A504BF5DAC001069406980695506A1A +:10045000C3796FE85808CEB14908201D1AD8E06862 +:1004600000D01AD8493848FC1AD8F01F000F2FCDF9 +:10047000C0085808C0416FE85808CD904878201D42 +:100480001AD8E06800D31AD848B8486C1AD8F01FB8 +:1004900000062FCDC00800008003AF5C8003AFD4FE +:1004A00080039D9C800094C48003B028000080D409 +:1004B0008003B0688003B0A450195008EF03003CDB +:1004C000304CF01F0042401918954008E080023C73 +:1004D000300B990B991B5809C0301894C118580853 +:1004E000C0E14BB8201D1AD8E06800EF1AD84B982D +:1004F0004B9C1AD8F01F00392FCDC008910C5C73AB +:10050000402A4069E60A010840435C73E6080D434F +:100510005C835809C3904028300AE608000B149CFD +:100520005C7BF01F002F8B1CE080020EF5D3C01007 +:10053000402B98D9F40B00081039C0E44A48201D1C +:100540001AD8E06800FF1AD84A684A3C1AD8F01F47 +:1005500000232FCDC008501AF01F0023401A18980E +:1005600040895809C0A0402B6A195008721C160C0B +:10057000403BF01F001E4008F00200026A185C8237 +:1005800070188B28C3D8406A402B149CF01F0014AD +:100590008B1CE08001D9F01F0014407AF8020002A1 +:1005A0005C82580AC2D0F7D3C010301A303CF01F1A +:1005B000000C189B6A1C580BC1C1F01F000D40694C +:1005C0008B19E08F01C100008000C9D48003AF5CAB +:1005D0008003B0D880039D9C800094C48000D31811 +:1005E0008003B0E88000CD0C8002E7368000D13C6B +:1005F000403897182FF28B285C82F01F003F320B97 +:10060000F6021900E08B01A0AA63314B6A1CF01FAF +:10061000003BC0904BA8F10900A42FF9F15900A4A8 +:10062000E08F0192EF39001C6A1870188B48B0896E +:10063000EF39001DB099EF3900246A48B0A9EF39AD +:100640000025B0B9E00916186A48B0C9F3D0C2084D +:10065000B0F0B0D9F3D0C108B0E96A48F16C00132A +:10066000F16C00126A48F13A000CF139000DF3EA1E +:100670001089E019FFC0EDE910095C79F169000DFE +:10068000A989F169000C405AEB6A000E404806182F +:100690005C88F3D3C0105048403B6A48120B503B73 +:1006A00040AA1200F139000DF3D9C006F5E910098E +:1006B0005C79F169000DA989F169000C0A98300A8A +:1006C000404BF40B19005F1B507B169A58045F09CE +:1006D000300B124AF60A1800FE91FEF0F5D2B01067 +:1006E000503A6FE05800E08000C260085808C0909F +:1006F0001090CFCB8000CD348000CDD4000080D4CA +:1007000080EA6048F139000DF3D9C0025F1B140B79 +:10071000E08000C45809E08100C1F7D6C0025F0C38 +:10072000301BF60618005F0BF9EB100BF20B1800EC +:10073000E08000B488EBEF19003C140B123BE08919 +:1007400000ADE13B000EE939000EF20B1800E0812C +:1007500000A5684911FE13FB504B11CC11DBB16BA6 +:10076000F7EC118B11ECF7EC108BFDEB100B160A6C +:1007700013CB13D8B168F1EB118813EB4049F1EBBF +:100780001088F3E81008103AE08100884028681CBF +:10079000F00B11EC5C8BF01F0037C0E04B68201DA4 +:1007A0001AD8E06801691AD84B484B5C1AD8F01F78 +:1007B00000352FCDC0086818905AF80A1900C0A15A +:1007C00070098919910C4032109C20125C82F01F34 +:1007D000002EF1D6C001681BC220580BC05188689A +:1007E000F6081900C0E04A48201D1AD8E0680177D1 +:1007F0001AD84A684A2C1AD8F01F00222FCDC008F8 +:100800006048F13A000CF139000DF3EA1089A1A912 +:10081000F169000DA989F169000CC1E8580BC050BD +:100820009659F0091900C0E14938201D1AD8E0682E +:10083000017A1AD84968492C1AD8F01F00122FCD16 +:10084000C008601CF01F001380698868F208000867 +:10085000A068680881080835E0051700E1F3020682 +:10086000089B304CF01F000CC198EF440078C16821 +:100870008000CDD48003AF5C8003B11C80039D9CBD +:10088000800094C48000D13C8003B1308003B1501B +:100890008000CD348000C97481040C98EDB600014D +:1008A000C040EDB60000C0312FF15C81EDD6C00133 +:1008B000EFF81826F9B90120F1D9E138EFF81E2632 +:1008C0006FB9F1D1C010F2080008EF520074EF4880 +:1008D000006CEF0800720218EF5800725802C14015 +:1008E0006FF85808C1116FE85808C0E14AF8201D98 +:1008F0001AD8E06801A11AD84AD84AEC1AD8F01FD1 +:10090000002E2FCDC00858055F193008F0031900DC +:100910005F1AF5E90009F0091800C4406A48580850 +:10092000C410409CE21C0002C3D1F13A000CF13922 +:10093000000DF3EA1089A3B9F169000DA989F169E5 +:10094000000CC318EF380026EA18FFFFE818FF80F4 +:10095000EF6800264998F109009C2FF9F159009C95 +:100960005804C040089CF01F0016EF0900743008BE +:10097000F0091900C1406FF85808C1116FE8580814 +:10098000C0E148A8201D1AD8E06801B41AD84888E8 +:10099000488C1AD8F01F00082FCDC008E06C00FF6B +:1009A000C028300C2F5DD8328003AF5C8003B16467 +:1009B00080039D9C800094C4000080D48000DA688D +:1009C000D421784E1298587E5F07584E5F09EFE9A0 +:1009D0001009C081582EC060583EC040E06C00F83D +:1009E000D822580AC031149CD822201D30095C7AC4 +:1009F0001AD9F01F00032FED5C5CD8228001035050 +:100A0000D4013008201D109A16991AD8149B30185A +:100A1000F01F00032FED5C5CD80200008001035042 +:100A2000D431189679F45804C05179E45804E08020 +:100A300000CE6848F133000DE7D3C001C06088697B +:100A40003008F00919005F03300A5C53301C14337E +:100A5000F9BB0114F9BB0015F01F005D1895E0808B +:100A600000B698593138F0091900E08B000F4D9805 +:100A7000201D1AD8E068040F1AD84D784D7C1AD87A +:100A8000F01F00572FCDC008684811FA11CB11D9BB +:100A900011E8B169F3EB1189F3E81089ED38001C16 +:100AA0007817F5E91009AE88EF3A000CED38001D13 +:100AB000AE98EF38000DF1EA1088ED3A0024AEAAA6 +:100AC000ED3B0025AEBBF20B1618AEF9AECBF7D955 +:100AD000C208F3D9C108AEDBAEE9ED390028EF69F1 +:100AE0000008ED390029EF690009ED39002AEF69A6 +:100AF000000AED39002BE018FFC0EF69000BA5A834 +:100B00005C88F5D8C010EF6A000DF40B1608EF6B87 +:100B1000000CED39002EEF69000EF1D8C006300947 +:100B2000E8185000ED3A002F5C78EF6A000FEF688C +:100B3000000DEF690011EF690012EF690013EF6912 +:100B40000010A988EF68000CED19002E6CA8F208BF +:100B500000088DC85803C110EF39000CEF38000DA4 +:100B6000F1E91088E018FFC0E8180011EF68000DE7 +:100B7000A988EF68000CC068682811897818F169A5 +:100B80000014ECC4FFFC8AC83069089A0C9B0A9CCC +:100B9000F01F00145C7CEF6C0011A98C4929EF6CEC +:100BA0000010F30C00902FFCF35C0090306C201DC3 +:100BB000ED39000B089A1ADC0C9B30080A9CF01FD8 +:100BC000000B0A9CF01F000A2FEDD8328000D318CA +:100BD0008003AF5C8003AFA480039D9C800094C41D +:100BE00080011E2C000080D4800122948000D13C22 +:100BF000D431300A1895314B301CF01F003918934E +:100C0000C041E06C00FED832EB380026EB39001C06 +:100C1000E018FFFCEB6800266B787817AE89EB399B +:100C2000001DAE99EB390024F00B1618AEA9F3D8CD +:100C3000C208EB3A0025AEF8F1D8C108AECBAEBA87 +:100C4000AED9AEE86AA8F0091618EF690008F3D823 +:100C5000C208E06A5010EF690009F3D8C1083004F7 +:100C6000EF68000BEF69000AF40B1608EB19002E71 +:100C7000EF6B000CEF6A000DEF69000FEF640012DC +:100C8000EF640013EF640010EF640011F20A16081D +:100C9000F2080008EF6A000E8BC8EAC6FFFC0A9B48 +:100CA0000C9A98C83069F01F000F5C7CEF6C001143 +:100CB000A98CEF6C0010306CEB38000AEB39000B9C +:100CC000201D0C9A1ADC0A9B069CF01F0007069C4C +:100CD000F01F0006089C2FEDD83200008000D318CA +:100CE00080011E2C800122948000D13CD431202D23 +:100CF0004AE8189770081838E08001A3F9080056F0 +:100D0000F9090060F0091900F20817805C785008B2 +:100D100079E6F9380026E2180002C1E05806C170F1 +:100D20008CEB6C48794911CCF609010911DBB16BE8 +:100D3000F7EC118B11FA11E8F7E81088400BF5E891 +:100D40001008F20800081638E08800070E9CF01F13 +:100D500000185C5CC7696FF55805C0B1EEC9FF8427 +:100D6000EEC2FFFC5019300349214930C2B9109539 +:100D70006A085808CFD1CF3BF13C000CF139000D87 +:100D8000F3EC108C5C8CEDBC0002C1F148B8201D66 +:100D90001AD8E06802471AD8489848AC1AD8F01F09 +:100DA000000A2FCDC00800000000822480010BF053 +:100DB000000080D4000082108003AF5C8003B18407 +:100DC00080039D9C800094C46FF95809C150EF3B8B +:100DD00000261699E2190044C0F16FE95809E08035 +:100DE0000133720E580EC081926EEF09003CF20E74 +:100DF0001900E08301296C09EF4900786E495829F0 +:100E0000C0E0A5AC5C7CF16C000DA98CF16C000C11 +:100E1000EF390026E019FFFCEF6900266EA9F20AFF +:100E20001618F16A0008F5D9C208F16A0009F5D967 +:100E3000C108F169000BF16A000AEF1A002EF16A8D +:100E4000000FF40B1608F16B000EF40900098FC9AE +:100E5000ED39000EEDB90000C061E06B0200EA1B45 +:100E60000204915BEF08003A3FF9F2081900F9B863 +:100E70000000EFF80C1D6E085808C071049CF01FAC +:100E80000075C45078188F086F085808C121600990 +:100E90006C48EF49004011F911CB11DA11E8B16A41 +:100EA000F5EB118AF5E81088F3E81008EF480044E4 +:100EB0006C1C6C4478199848985A9914E8090109EF +:100EC000121A1218B85AB84830695C78049A0E9B06 +:100ED000E9630010E9630011F01F005F30695C7C7A +:100EE000E96C0011A98CE96C0010E30800902FF860 +:100EF000201DE35800901AD9049AEF38000AEF3900 +:100F0000000B0E9B6C1CF01F00552FED6C4811FA66 +:100F1000F139000DF3D9C0025F1B11CC8CE9F60941 +:100F2000000911DB11E8B16BF7EC118BF7E81088C1 +:100F3000F5E810086F7AF2080008101AC037EF4879 +:100F4000005C5809C3B08D036FF85808C041EF46E4 +:100F5000007CC3286C4A15FE15C46A4915DBB16BC9 +:100F6000F7E4118B15E4F7E4108BFDEB100B13CEB7 +:100F700013FC13DAB16AF5EE118A13EEF5EE108A5E +:100F8000144CF60C010CC177401AC058109A700826 +:100F90005808C0E0704913C413FC13DEB16EFDE4C1 +:100FA000118E13E4FDE4108E1C4C161CCF068D0828 +:100FB0009506C0788B060C95C0480C9CF01F002845 +:100FC0006FE65806C3706C4811CC6F4A8CEB11D990 +:100FD000141BB169F3EC118911ECF3EC108911FCCD +:100FE000F9E91009F6090009400B1639FE98FEC60A +:100FF000EF3900AC3008F0091800C1C18CEB6C4827 +:10100000F60A010A11F911CC11DB11E8B16BF7EC0A +:10101000118BF7E81088F3E81008100AEF18006049 +:10102000103AF9B80B00EFF8BA2AF9B80B01EFF84B +:10103000BEACEF380026F1D8C007EF680026300CB0 +:101040002FEDD832E21B00A0FE91FED7CD2B000081 +:101050008001222880011E2C800122948000DA3C2D +:10106000D401189879FA580AC170149B7609580966 +:10107000C030129BCFCB71EC970CF1490040F14985 +:10108000007CF139004E2FF9F14A0078109CF1698B +:10109000004EF01F0002D80280010CECD431300A5F +:1010A0001896314B301CF01F00401895C7B0985966 +:1010B0003138F0091900E08B000F4BC8201D1AD8F9 +:1010C000E06803C91AD84BA84BAC1AD8F01F003AF5 +:1010D0002FCDC008ED39001C78176D78AE89ED3939 +:1010E000001DAE99ED3900242018AEA9F00B16189A +:1010F000ED3A0025F3D8C208AEF8F1D8C108AECB5E +:10110000AEBAAED9AEE86CA8F0091618EF690008BF +:10111000F3D8C208E06A5010EF690009F3D8C1089B +:101120003004EF68000BEF69000AF40B1608ED19A4 +:10113000002EEF6B000CEF6A000DEF69000FEF64FB +:101140000012EF640013EF640010EF640011F20A64 +:101150001608F2080008EF6A000E8DC8ECC3FFFC09 +:1011600098C83069069A0C9BF01F00145C7CEF6CE9 +:101170000011A98C4929EF6C0010F30C00902FFC92 +:10118000F35C0090306C201DED39000B08981ADCE0 +:10119000069A0C9B0A9CF01F000B0A9CF01F000A89 +:1011A0002FEDD8328000D3188003AF5C8003AFA44A +:1011B00080039D9C800094C480011E2C000080D47C +:1011C000800122948000D13CF9390010A3C948A8BD +:1011D000F969001011BA118B119911A8B169F3EBDB +:1011E0001189F3E81088F5E8100899183008F958C3 +:1011F00000145EFC8003B409997A996B5EFCD703F6 +:10120000D421301CF01F00071897C080320A300B21 +:10121000F01F00053FF8EF68000B0E9CD82200007D +:101220008000C9D48002E8BCD40148C9189B720868 +:101230001838C0D178389308C0C870395809C060D0 +:101240001639F7F90003F1F90A0370385808CF612D +:10125000301CF01F0003D802000082288000C974EF +:10126000D4214AB83009700E1C98C148103CC111F5 +:101270005809C0E04A78201D1AD8E06802541AD8EC +:101280004A584A6C1AD8F01F00262FCDC0083019D2 +:1012900070385808CEC1580BC0C017B817861797BA +:1012A00017ABB167EFE61187EFEB108BF1EB100B8B +:1012B000990B580AC2211C98E06A1000E0667FFF73 +:1012C0003007C0C8F10B0012F40B1900C061F6CA58 +:1012D000FFFF1C985C8AC0287038EC0A19005F1563 +:1012E00058085F1BEBEB000BEE0B1800CEC1580843 +:1012F000C040E06C00F5D822F95A00125809C0200D +:10130000D82A993E4828910C129CD82200008228A5 +:101310008003B19C8003B1E080039D9C800094C455 +:10132000D4213008169614951897F9090012F0097F +:101330001900C071300A189BF01F00145C5CC231A8 +:101340005806C0C00DB80D8A0D990DA6B169F3EA13 +:101350001189F3E61086F1E61006EF380010A3A815 +:101360008F16EF680010EF55001448987008109C15 +:10137000C0581837C021D82A783C580CCFB18F38C4 +:1013800048389107D82200008001126000008228AE +:10139000D43112971093169414911895F9090012EC +:1013A0003008F0091900C091300A189BF01F004561 +:1013B000E5DCC008E0810084308B089CF01F00420F +:1013C000C0310896C0E8300A308B301CF01F003F57 +:1013D0001896C041E06200FFC728089BF01F003C40 +:1013E0008C593078F0091900E08B000F4B98201DC4 +:1013F0001AD8E06801C51AD84B784B8C1AD8F01F60 +:1014000000382FCDC008EB3900120E986C175C78AD +:10141000AE893009EB3A0013AEB8AE9AA988AEF99E +:10142000AEE9AEA86A085808C041E6C2FFFCC10890 +:1014300066191238C0C00836C041E06200F7C3F830 +:101440000C9CE06200F7F01F0027C3980A928CC83A +:10145000F0091608AED8AEC9EB390010EDB900009E +:10146000C1403119029A049B0C9CF01F001F5C8C38 +:10147000F1DCC010AEF8A988AEE8580CF9B800FF4E +:10148000EFF80E07EFF80E0631181AD3049BEB396C +:10149000000B029A1AD80C9CEB38000AF01F0013BC +:1014A0002FEDE5DCC0080836C0400C9CF01F000D95 +:1014B00048F8F10900782FF9F1590078049CD832E6 +:1014C000800112608000CDD48000D3188000CDB49C +:1014D0008003B19C8003B1EC80039D9C800094C488 +:1014E0008000D13C80011E2C80012064000080D44B +:1014F000D421202D1897501B149C500A1296F01FCF +:10150000000C401B1898400AC0A148A8E06C00FCE1 +:10151000F10900862FF9F1590086C078F3D6C01082 +:101520000E9CF01F00055C5C2FEDD8228001222864 +:10153000000080D480011390D401F8CAFFFCF9198F +:101540000014F01F00035C5CD8020000800114F05E +:10155000D431203D4D98F109007A2FF9F159007AE4 +:10156000781716910F8818955C8898CAF3D8C0042C +:101570002FE9A369123AC0A5F1D8C004F00B1502F7 +:101580005C3BF01F004F1894C0904CC80A9CF109B6 +:1015900000822FF9F1590082C1D96A12EECCFFF016 +:1015A000029B502CF01F004705980583F1E3108340 +:1015B00005B805AE1896F1EE108E5C835C8E34484B +:1015C000F00E1900C2413438F0031900E081008B9D +:1015D00062A85808E080008770145804E0800083F7 +:1015E00068185808E0800092EF3A000CEF39000DBF +:1015F000B169F3EA1189EF3A000EF3EA1089EF3A84 +:10160000000FF5E910091238C6D1C7F84AE8089961 +:10161000700A089B1498500AC618F10C0012FC0CB2 +:101620001900C5A15806C041700C580CC1B0EF306C +:101630000010EF3C0011B16CF9E0118CEF3000129A +:10164000F9E0108CEF300013F60618005F1AE1EC99 +:10165000100C700018305F0CF5EC100CF60C180034 +:10166000C3B05804E08100D6F13C0010E21C000435 +:10167000F0041700CCE8701C580CC150EF3A000C75 +:10168000EF30000DB160E1EA11805010401AEF30E8 +:10169000000EF5E010805010EF30000F401A14409B +:1016A000003CC1A1400A10945809C0F0703893382A +:1016B000893A48589104C148000080D48000CDD4B4 +:1016C00080012558000082284C88F109008E2FF9EE +:1016D000F159008EC058109970385808C9F1580453 +:1016E000C141EF3A0010EF380011B168F1EA1188FA +:1016F000EF3A00126219F1EA1088EF3A0013F5E8A8 +:1017000010081039C6D1300405F805E9F1E9108850 +:10171000C130402A8AC83119EECBFFF40A9CF01F71 +:1017200000345C8CC0904B180A9CF10900802FF9A2 +:10173000F1590080C4F83F8B0A9CF01F002EC0E0D6 +:101740004AD8201D1AD8E06801141AD84AB84ACCE1 +:101750001AD8F01F002C2FCDC0085804C0D06866DE +:101760005806C3E0089BF1D3C010EEC9FFF40A9AF3 +:10177000687C5D16C5585806C261EF380010FC1928 +:10178000E000B968E618F0001238C1D00F8B0A9C4F +:10179000F7DBC0042FEBA36BF01F00166A180E389E +:1017A000C0E04958201D1AD8E068012F1AD84968AE +:1017B000493C1AD8F01F00132FCDC008303B0A9CBB +:1017C000F01F001248980A9CF10900882FF9F1597E +:1017D0000088F109007E2FF9F159007EC0280A9C8B +:1017E000F01F000BC1D80000000080D480011E2C27 +:1017F0008000CDD48003B19C8003B11C80039D9CEC +:10180000800094C48003B21C800118FC8000D13C8D +:10181000F10C0014E60C1900FE91FF5FC2DB2FDD16 +:10182000D8320000D431189316921494324B300AF7 +:10183000301CF01F00241897C43098593238F00932 +:101840001900E08B000F4A08201D1AD8E068012E0D +:101850001AD849E849EC1AD8F01F001E2FCDC0084D +:101860007816661531CAAC94AC823004ACC4ACD4E2 +:10187000ACE4ACF4661B781C2F8CF01F00170C9C9A +:10188000ACA4ACB48EDBF01F00155C7CACBCA98CA6 +:10189000ACAC201D492C30161AD60898F906006009 +:1018A000EACAFFF4E06900FF089B2FF6F9560060D2 +:1018B0000E9CF01F000C0E9CF01F000B2FEDD83279 +:1018C0008000D3188003B2308003B27880039D9CDF +:1018D000800094C48002E73680011F4A000080D453 +:1018E000800122948000D13CD401F5DBC00830BBDC +:1018F000F01F0002D802000080011824D401F5DB9B +:10190000C008303BF01F0002D802000080011824FC +:10191000D4314C62E50800622FF81694E558006255 +:10192000781618970D85EBD5C004A365EA0311005E +:101930005C83069BF01F003EE08101788E493038C1 +:10194000F0091900E08801726E1811893088F009D9 +:101950001800E081015DED380010ED310011B1613A +:10196000E3E81181ED380012E3E81081ED3800134F +:10197000089BF1E11001ECCCFFF0F01F002EC071CC +:10198000E611F000FC18E0001031C0914A780E9C7E +:10199000F10900742FF9F1590074C4498E49307867 +:1019A000F0091900E08801420E9CF01F00235C8CB6 +:1019B000C0A00E9CF01F0021E50800682FF8E55834 +:1019C0000068D832330B0E9CF01F0019C6E00A9B4A +:1019D0000E9CF01F0017189AC0E04998201D1AD8D5 +:1019E000E06800981AD84978497C1AD8F01F001787 +:1019F0002FCDC0088ECB302CF01F00151892E08040 +:101A0000011F98D9EAC8FFF81039C25248C8201DF2 +:101A10001AD8E06800A21AD848E848BC1AD8F01FC3 +:101A2000000B2FCDC0080000000080D48000CDD472 +:101A30008001255880011FAC8000D13C8003B2306A +:101A40008003B2A480039D9C800094C48000D318BE +:101A50008003B2D80E9BF01F00445C5CC0E04C38A1 +:101A6000201D1AD8E06800A51AD84C184C1C1AD8AA +:101A7000F01F00412FCDC008069B6416049CF01F88 +:101A8000003FC0E04B98201D1AD8E06800AB1AD880 +:101A90004BB84B8C1AD8F01F00382FCDC0080E9CC5 +:101AA0000497F01F0038C1383D0B0E9CF01F003327 +:101AB000C0E04AE8201D1AD8E06800B51AD84B08E3 +:101AC0004ACC1AD8F01F002C2FCDC008ED3A000CDC +:101AD000ED39000DB169F3EA1189ED3A000EED3BE5 +:101AE0000010F3EA1089ED3A000FF5E91009ED3A1C +:101AF0000011B16AF5EB118AED3B0012F5EB108A8B +:101B0000ED3B0013F7EA100AF40B16186E18ED6A95 +:101B1000000FED6B000CF7DAC208F5DAC108ED6AC8 +:101B2000000EF20A1618ED690013ED6A0010ED6B55 +:101B3000000DF5D9C208F3D9C108ED6A0011ED69AD +:101B40000012300911AAB08911B9F3EA1089FE7A9E +:101B5000F7FE5C89F4091900E0880016F2C9F7FF66 +:101B6000C14800008000CF988003B2308003B310DA +:101B700080039D9C800094C48000CDD48003B33842 +:101B80008000D13CF2C9F8005C79B0B9A989B0A94C +:101B9000ED380009E818FF00ED680009A988ED6834 +:101BA00000083008314BED68000BED68000A0C9C12 +:101BB000F01F00284A885C7CED6C000BA98CED6C52 +:101BC000000AF10900602FF90A9BF15900600E9C90 +:101BD000F01F00221898C0E04A18201D1AD8E068AB +:101BE00000D71AD849F84A0C1AD8F01F00202FCD78 +:101BF000C00830191AD4189A1AD9ECCBFFF4E0694E +:101C000000FF0E9CF01F001A2FEDC0B8E508007011 +:101C10002FF8E5580070E50800662FF8E5580066D3 +:101C20000E9CF01F0014D8320E9CF01F001248A822 +:101C3000F109006A2FF9F159006AD8320E9CF01FA1 +:101C4000000D4858F10900742FF9F1590074D83289 +:101C500080011F4A000080D48000CDD48003B230C0 +:101C60008003B36C80039D9C800094C48001206439 +:101C70008000D13CD431205D30951988FAC9FFF03D +:101C8000FACEFFFC5009330231033056F0C9003060 +:101C9000EA091800E08B00BAE4081800C03030A749 +:101CA000C1582FFC35891988F20818005F0A378956 +:101CB000F20818005F09F5E91009F9B70008F7BC48 +:101CC00001FFF9B70110F9F81800F8CAFFFF300951 +:101CD0003191F2070244F0C000301004F4CC00014E +:101CE000EA001800E08B0005E8C90030C1E80E9456 +:101CF000E6071800C1D1F0C400615C54EC04180080 +:101D0000E088000EF0C00041EC001800E08B0011EC +:101D1000E2041800E0880004341CC028361C2F6838 +:101D2000F00C010CF9E9104915882FFACD3B32EA85 +:101D3000F4081800C0814008103EC6701CA92FFC92 +:101D40001988CA5B5808C28030CAF40818005F1CA2 +:101D5000320AF40818005F1A146C300AF40C1800E8 +:101D6000C1B030DCF80818005F1730ACF808180074 +:101D70005F1CEFEC000CF40C1800C0E030BC309796 +:101D8000F80818005F1CEE0818005F18F9E8000852 +:101D9000F4081800C3A1FAC8FFFC101EA34E2FFEC2 +:101DA000582EC0B0E0890005580EC2F0C298583EC7 +:101DB000C0F0584EC251C168E064FFFFEA1400FF52 +:101DC0000839E08B00234018F3E81189C198E049F5 +:101DD000FFFFE08B001B4018402AB968F1EA1108A8 +:101DE000C0D8E04900FFE08B0011402A4018B968D4 +:101DF000F1EA1108403AF1EA1088F1E91009580BAC +:101E0000F7F91A00301CC028300C2FBDD832D70388 +:101E1000D401202DFACBFFFCF01F0004F9BC00FF19 +:101E2000FBFC10012FEDD80280011C74D431202D51 +:101E3000300630110C9EC4A898557812E7D5B01022 +:101E4000049430075008C0B8E92800000990202306 +:101E5000E1E810805C835C702FE40007E203190066 +:101E6000FE9BFFF40A944008E214FFFEE7D5C00190 +:101E700008023000E0031900C0400584A964080787 +:101E8000E9D7C010B187E80700070E94E0140000FE +:101E9000C060E9D7C010B187E80700075C77EBD5D1 +:101EA000C001EE0E000EEFDEC010B18EEE0E000E81 +:101EB0005805C0B0EFDEC108EC061101A96E5C56F2 +:101EC000FDDEC010EFEE100E780C580CCB615806FA +:101ED000C080F9DEC108A96EFDDEC010F9EE100E5B +:101EE00017B715BC17851796B166EDE5118617ABC8 +:101EF0001585EDEB108B5C781596EFEB100B15AAA2 +:101F0000EFDBC010B166B18BEDE511860E0BEDEA8B +:101F1000108AF9EA100AF40C1610F5DAC010F60A65 +:101F2000000A180AF4090009F2080008F00E000E71 +:101F3000F1DEC010B18EF00E000EF9DEC010B18ED1 +:101F40001C0C5CDC5C8C2FEDD832D4213008189945 +:101F5000F5DBB010301EC0B8F32600001397202A1E +:101F6000EFE610875C8A5C772FE90E08FC0A1900FF +:101F7000FE9BFFF41699E219FFFE120CEDBB000068 +:101F8000C0411989A9691208F3D8C010B188F208B4 +:101F900000081099E0190000C060F3D8C010B188A3 +:101FA000F20800085CD8F9D8B010D822D431300A31 +:101FB000301414981495C488985B7816EFDBB01031 +:101FC0000C9E3009C0B8FD2200001D932027E7E2D7 +:101FD00010835C875C732FEE06090E93E8071900E7 +:101FE000FE9BFFF3169EE21EFFFE1C06FDDBC001FA +:101FF000EA0E1900C0400D8EA96E1C09FDD9C01053 +:10200000B189FC090009129EE01E0000C060FDD9E4 +:10201000C010B189FC0900095C79F7DBC001F20846 +:102020000008F3D8C010B188F2080008580BC0B0FF +:10203000F3D8C108F40A1101A9685C5AF1D8C0109C +:10204000F3E81008780C580CCB81580AC080F3D8FC +:10205000C108A968F1D8C010F3E810085CD8F9D815 +:10206000B010D832D431201DFAC4FFD8169712937D +:102070001092681518966801580AE0800091500A7D +:10208000314BF01F0055400AC0A04D48E06C00FEE7 +:10209000F109005C2FF9F159005CCC286C148C59C3 +:1020A0003138F0091900E08B000F4CD8201D1AD8E8 +:1020B000E068022C1AD84CB84CBC1AD8F01F004B60 +:1020C0002FCDC0085C53E3E310815C71E961000926 +:1020D000A981E9610008158B1598B168F1EB1188A9 +:1020E00015ABF1EB108815BBF7E81008F00B1618CC +:1020F000E9680013E96B0010F7D8C208F1D8C108ED +:10210000E96B0011E9680012E81245005C72A892C0 +:10211000E4031608A883ED380008A8A8ED380009E4 +:102120004B39A8FCA8B8A8EC9208F7D8C010A8DBD7 +:10213000A98BA8CB2FF8B2085807C0D00F8B0FB9C6 +:102140000F98B168F1EB11880FABF1EB1088F3E851 +:102150001008C051EAC8FFFCEBF81001F00916188E +:10216000E968000FE969000CF3D8C208F1D8C1088A +:10217000E969000DE968000E3008E968000BE968BC +:10218000000A500A314B089CF01F001A5C7CE96C75 +:10219000000BA98CE96C000A400AC038781A2F0A93 +:1021A00048E8F10900482FF9F1590048158B1599B5 +:1021B000B169F3EB118915AB6A18F3EB108915BB04 +:1021C000F7E910091039C1910C9B0A9CF01F000A15 +:1021D000C26800008000CDD4000080D48003B3909A +:1021E0008003B3D880039D9C800094C40000734892 +:1021F00080011F4A8000CAF8EB08002C5808C0B0C4 +:102200008C49F0091900E08800070A9B0C9CF01F1C +:102210000006C0580C9B0A9C6A585D185C5C2FFD38 +:10222000D8320000800125A0D42149781896700783 +:10223000C1680E9CF01F0015C1100D8B0D98B16880 +:10224000F1EB11880DAB6E1AF1EB10886E290DBB06 +:10225000F7E8100814581268C1306E075807CEA16D +:1022600048B66C0C580CC040F01F0008C08148985C +:10227000F10900562FF9F1590056C0286C070E9C41 +:10228000D8220000000080CC8000CAE4000080D08A +:10229000000080D4D421204D1897503B149C502A24 +:1022A000501950084096F01F000D403B402A40193D +:1022B0004008C0A148A8E06C00FCF10900562FF9C5 +:1022C000F1590056C0881ADC0E9C1AD6F01F000582 +:1022D0002FED5C5C2FCDD82280012228000080D415 +:1022E00080012064D4314C05EB08004A2FF87817A0 +:1022F000EB58004A0F980F831694F1E31083189659 +:10230000E609160C3048F0091900C090F01F00379C +:10231000EB08005C2FF8EB58005CC2980FB8E7D3CD +:10232000C1040FA2A363F1E2108298585C82E60810 +:102330001900C0539848E4081900C0B20C9CF01F63 +:10234000002B4A98F10900522FF9F1590052C86840 +:10235000069B0E9CF01F00265C8CC0F00C9CF01FAE +:102360000023EB0800502FF8EB580050EB08004E0C +:102370002FF8EB58004ECD48F7D2C0100C9CEEC0A1 +:10238000FFF0F01F001C0895301249B10A9CF01FA5 +:10239000001BC1D0EAC8FFFCC1A06A185808C17070 +:1023A000EF3A0010EF390011B169F3EA1189EF3A01 +:1023B0000012F3EA1089EF3A0013F5E91009103919 +:1023C000C2A00A9B009CF01F000EC2515802E3F508 +:1023D0001000EBF5000030020835EBF50000580561 +:1023E000CD61C9F8000080D48000D13C80011F4A33 +:1023F0008000D210000080CC8000CAE48001255803 +:10240000EE03000307B807A9F1E910893448F00981 +:102410001900C2A0EF39000CEF38000DB168F1E9E6 +:102420001188EF39000EF1E91088EF39000FF3E859 +:102430001008C1B0089BEECCFFF4F01F003DC0A116 +:10244000EF38000CFC19E000B968E618F00012380B +:10245000C0C10C9CF01F00374B78F109004E2FF9DA +:10246000F159004EC5D808955805C0510C9CF01F75 +:102470000031C5680FE90FF8F1E91088F1D8C00EF6 +:10248000C0700C9CF01F002D1896C4A078174AC885 +:1024900091044AC8089B91070C9CF01F002BC3B104 +:1024A000EF3800095868C0B05918C0405818C11119 +:1024B000C0B8089B0C9CF01F0025C2D8089B0C9C40 +:1024C000F01F0023C288089B0C9CF01F0022C2381A +:1024D000089BEECCFFF0F01F0016C0F1EF380010A3 +:1024E000FC19E000B968E618F0001238C0608D17DA +:1024F000302B0C9CF01F00180C9CF01F000E48E8BD +:10250000F10900582FF9F1590058F109004E2FF93F +:10251000F159004E48A93008930848A99308D83AC1 +:10252000EF3800095918FE91FF77C6BB8001255886 +:102530008000D13C000080D4800129BC0000822CA6 +:10254000000082308000D588800115508000F37C27 +:1025500080011910800118FC19B9198A1998B168FD +:10256000F1EA118819AAF1EA1088F3E81008F0C915 +:1025700000015BD9E08800035EFFF7390035EDB953 +:102580000001C0E1761A1438C0B07629105A126AD8 +:10259000C0715CD9F3E8000812385F0C5EFC5EFD88 +:1025A000D431209D503B506A781B403AF519002CDD +:1025B000F2C80013502B5078214917EA17F8F1EAB6 +:1025C00010885C88109BF1D8C00DE21B2000984356 +:1025D000505B2143308B5018F20B0C0A1897F3DA3A +:1025E000B0105C8312985049A37830025C88314067 +:1025F0005088C938401B405AF1DBC00D14485008C0 +:10260000E3D3B010F1D3C01040791039E08900064F +:10261000400B4081ADBB500B300A314B302CF01FCA +:1026200000421894C3708E58313AF4081900E08BB8 +:10263000000F4BE8201D1AD8E06802C31AD84BC817 +:102640004BCC1AD8F01F003C2FCDC008314A402B8C +:10265000781CF01F003A6E19F1D0C010F208000883 +:102660006816EBD1B0108F188E58F0000100AE50F4 +:10267000C2188E52EA021900EA0217205C82C19049 +:10268000302A300B303CF01F0028C071089CF01F2E +:10269000002CE06C00FFC4586E18B842B852189B6A +:1026A00099180415089C5C85F01F00265805C02069 +:1026B0006E075805CDF1ED65000B40085C78ACF86D +:1026C000A988ACE8E2C8FFEC5C78ACB8A988314BCB +:1026D000ACA8ED65000A0C9CF01F001B5C7CED6C47 +:1026E000000BA98CED6C000A4039406A7258089BB7 +:1026F000129C5D18495BF70800302FF8089CF758CA +:102700000030F01F000F40180213404AE1D2B01011 +:1027100014085C835C8850185803FE91FF6D069C7A +:102720002F7DD8328000D3188003B4108003B45CAE +:1027300080039D9C800094C48002E7368000D13CD9 +:102740008000CD3480011F4A000080D4D40148F8B5 +:1027500070091839C04178099109C128580BC0E1A6 +:1027600048B8201D1AD8E06801341AD8489848ACF7 +:102770001AD8F01F000A2FCDC00878089708189BB8 +:10278000305CF01F0007D8020000734C8003B410C7 +:102790008003B47C80039D9C800094C48000C97435 +:1027A000D43118971696183BC0E14BC8201D1AD893 +:1027B000E06800A41AD84BA84BAC1AD8F01F003A16 +:1027C0002FCDC008580BC11076081838C0E04B3820 +:1027D000201D1AD8E06800A61AD84B484B1C1AD8FE +:1027E000F01F00312FCDC0086E156A1811CA11D91B +:1027F000F3EA1089C0303004C1D8118A1199109CB5 +:10280000B169F3EA118911AA11B8F3EA10891248E3 +:10281000314A8F18EECBFFF8F01F0025301B0A9CC1 +:10282000F01F00240A9CF01F002418940A9CF01F3B +:1028300000236E15C1486A1811B9118A119311A8A5 +:10284000B163E7EA1183E7E81083F3E31003F01FB5 +:10285000001A18040A9C0695F01F00180A9C5805D7 +:10286000CEB10C9B0E9CF01F001649689009F5D95B +:10287000C010083AC0E44898201D1AD8E06800C784 +:102880001AD84918487C1AD8F01F00072FCDC00865 +:102890000819089CB009D8328003B4108003B4989A +:1028A00080039D9C800094C48003B4A48002E7361A +:1028B000800118E88000CD0C8000D13C8001274CBD +:1028C000000073508003B4B8D431300618971692C4 +:1028D0004AB30C94300566080A9B0A9CC3E8EF3A99 +:1028E000000CEF39000DB169F3EA1189EF3A000EDF +:1028F000F3EA1089EF3A000FF5E91009705A123A1D +:10290000C1B1EF3A0010EF390011B169F3EA118952 +:10291000EF3A0012F3EA1089EF3A0013F5E91009D3 +:10292000706A123AC0910FCA0FD9F3EA1089906AFF +:10293000F20A1900C0D02FF5580CC090F13A001FD0 +:10294000F939001FF20A1800E08B0003109C70098F +:102950005809F00B171012985808CC21580CC04099 +:10296000F01F0008180658155F9804365F59F3E801 +:102970000008E8081800CAF10C9CD8320000734C1B +:10298000800127A0D42148C83007700CC108F9384D +:10299000001F7806F0C900015808C050F969001FEF +:1029A0001897C0480E9BF01F00050C9C580CCF01D7 +:1029B000D82200000000734C800127A0D431201DD4 +:1029C0004CD8F10900322FF9F159003278161895D8 +:1029D0000D835C83F3D3C004A3695949C080F10916 +:1029E00000442FF9F1590044E08F02570DF80DE132 +:1029F000F1E110810DB80DA24C07F1E21082F01F39 +:102A000000408E885C815C821894F808000858A801 +:102A1000E08A000D189B0C9CF01F003AC5708E8850 +:102A2000E808000858A8E08900524B783009700780 +:102A30005009C3D8ED39000CED38000DB168F1E94B +:102A40001188ED39000EF1E91088ED39000FF3E837 +:102A500010086E591039C291ED390010ED3800118F +:102A6000B168F1E91188ED390012F1E91088ED390A +:102A70000013F3E810086E691039C1710DC90DD843 +:102A8000F1E910888E69F0091900C0F149A8F1092F +:102A900000462FF9F15900460DE90DF8F1E91088CB +:102AA000F1D8C00DC360C3F850076E075807CC318A +:102AB000E08F021E089B0C9CF01F0012083CC065B2 +:102AC000305CF01F00121897C09148B8F109003C23 +:102AD0002FF9F159003CE08F01E0320A300B0E9CD7 +:102AE000F01F000B30394888EF69001F70098F090B +:102AF0009107C138000080D4000073508000CD0CD5 +:102B0000800128C80000734C8000C9D48002E8BC52 +:102B10008EF8F1D8C00DC070314A0C9BEECCFFF896 +:102B2000F01F004F4CF89009F20400045C84B004DC +:102B30000DE8A598EDB80000C120EF38001EE3D1E4 +:102B4000C00DE7D3C004A371E60310FCE20200024B +:102B5000A1A80602EF68001EEF52001C6A1811BB04 +:102B6000300A11AEF7EE108E118BB09AB0AAB0BA3F +:102B7000B08A1499F5DBC00411FBF40A10FC11ECC7 +:102B8000F7EC108CF9DCB00DA37CF7DCC010B0DBE7 +:102B9000A98B180EB0CB140E10935C8E3016F5DE98 +:102BA000C010B0FAA98AB0EA6E11029BC548761A25 +:102BB00015C015D2E5E010825C82E40C1900C292C7 +:102BC000F6021618B0BBB082E5DBC208F7DBC1081D +:102BD000B092B0AB5809E080008213E213FBF7E239 +:102BE000108BF60C1900E08300FF15DB15CAF7EA1D +:102BF000108AF40E1900E08B00F7EA0A1618B2B535 +:102C0000B28AF5D5C208EBD5C108B29AB2A5C6788A +:102C1000E40C1900E08000E815E015FBF7E0108BEC +:102C2000F60C1900E08300E05809C09013FB13E98B +:102C3000F7E91089E4091900F9B601001582159B1E +:102C40001499B16BF7E2118B15A215BAF7E2108B4C +:102C5000F5EB100B580BCAC1C52900008002E736FE +:102C60000000735013EB13FA11CCF5EB108A11DB53 +:102C7000F7EC108BF60A1900E088000F4BC8201DF6 +:102C80001AD8E068018E1AD84BA84BBC1AD8F01F8E +:102C9000003B2FCDC008EA0B1618B28BF7D5C2083F +:102CA000B2B5B29BEBD5C108B2A511CB11D9F3EBEC +:102CB0001089F20A1900F9B60100C1185801C0E0E4 +:102CC0004AB8201D1AD8E06801971AD84AC84AACF9 +:102CD0001AD8F01F002A2FCDC0088F15EF39001E1B +:102CE000EDB90000E08100E45806E08000E16E19D3 +:102CF000721A15CB15D9F3EB1089E08100D9118B2D +:102D000011951099B165EBEB118511AB11B8EBEB97 +:102D10001085F1E51005C1A807F86A1907EB13CC77 +:102D2000F1EB108B13D8F1EC1088F00B1900E08157 +:102D300000BF13881395B165EBE8118513A81293B2 +:102D4000EBE8108513B8F1E510055805CE61123A8D +:102D5000C1A14878201D1AD8E06801B91AD848984E +:102D6000485C1AD8F01F00052FCDC0088003B410AE +:102D70008003B4D480039D9C800094C48003B4F489 +:102D80008003B52C138A1398B168F1EA118813AA4D +:102D9000F1EA108813BAF5E81008C0E04C68201D6D +:102DA0001AD8E06801BB1AD84C484C5C1AD8F01FFE +:102DB00000452FCDC00813F813E9F1E91088EF0999 +:102DC000001C5C88F0091900C1704BB8201D1AD88E +:102DD000E06801BD1AD84BC84B9C1AD8F01F0039C7 +:102DE0002FCDC0080A9CF01F00394B9818143006EC +:102DF000B0040A9CC5982EC8EF58001C6E187016B7 +:102E00000D880D94B164E9E811840DA8E9E81084F7 +:102E10000DB8314AF1E41004EECBFFF80C9CF01F22 +:102E2000002DEF38001CACA8EF38001D0C9CED65A0 +:102E3000000BACB8ACE5ACF5ED65000A314BF01F0A +:102E400000265C7CED6C000BA98CED6C000A6E1604 +:102E5000C1586815089C3ECBF01F0020089B0C9CB5 +:102E6000F01F001F0B890BB80B94B164E9E91184C2 +:102E70000BA9E9E91084F1E410045804CEB10E9CCA +:102E8000400BF01F00180C9C49178E05F01F000F17 +:102E90001815AE05C0D849480A9CF109003630061D +:102EA0002FF9F1590036F01F0011C02830060C9C94 +:102EB0002FFDD8328003B4108003B53C80039D9C65 +:102EC000800094C48003B5608000CD0C0000735076 +:102ED0008002E73680011F4A8000CDD48000CD34C7 +:102EE0008001274C000080D48000D13C305CF01F72 +:102EF00000061897FE91FDF3FE9FFDDE5809FE9136 +:102F0000FEB3CDDA8000C9D4D4211898F937002E49 +:102F1000761E306CF8071800C0E04948201D1AD80A +:102F2000E06801B41AD84928492C1AD8F01F0012B9 +:102F30002FCDC008306C201C5C5CF20C0706FC0C2A +:102F40000007EF66000EF40C0706EF660014580C3D +:102F5000CF313089FD6C001BFD69001A109C706830 +:102F60005D185C5CD82200008003B5948003B5DC5A +:102F700080039D9C800094C4D4211897580CC0E114 +:102F800049D8201D1AD8E06800941AD849B849CC0D +:102F90001AD8F01F001C2FCDC00878185808C0E1BF +:102FA0004958201D1AD8E06800951AD84968494C3C +:102FB0001AD8F01F00142FCDC0086E186E06109C92 +:102FC0005808C0E148C8201D1AD8E06800991AD8EE +:102FD00048E848BC1AD8F01F000B2FCDC008F01FDE +:102FE000000C0E9B306C0C97F01F000A5806CE6147 +:102FF000D82200008003B5948003B62080039D9CF6 +:10300000800094C48003B62C8003B63C8000D13C81 +:103010008000C974D431201D500B1897580CC0C0C3 +:103020004D084D19118CF80815031818F2080028DE +:1030300070495829C0D030AA30094CBE129C1C924D +:10304000129B2ECE1298149314911490C1980F8A4B +:103050000F99B169F3EA11890FAA7018F3EA108980 +:103060000FBAF5E910091039CE714C08F109002E9C +:103070002FF9F159002ECE480C990A9C089B30A6D6 +:10308000EC031800C0A1FCF6FFFC5806C0611296C4 +:10309000189516941093C498FCF6FFFC5816C2417C +:1030A0005807C0F00F860F95B165EBE611850FA6A6 +:1030B000EBE610850FB6EDE5100564160C35C26021 +:1030C00064051D865805C080F2061800C2B3189525 +:1030D0001694109AC2A80C94F6061800C2331296E1 +:1030E00018951090C2285826C1D15807C1300F86B4 +:1030F0000F95B165EBE611850FA6EBE610850FB6CF +:10310000EDE5100564160C35C0514969109CB28874 +:10311000C9781D85F8051800C053129616941091B1 +:10312000C0481296189516942FF82E4E5C582E42D1 +:1031300030A9F2081800CA11F2031800C061400655 +:10314000EDB60000E081007B4005E2150002E08161 +:1031500000763098F0031800E089000A5C53C498A8 +:103160000000735200007354000080D430A8F001B6 +:103170001800C180E7D1C0084B38E60915030619CD +:10318000F00903285808C2304B08201D1AD8E068FF +:1031900001761AD84AE84AFC1AD8F01F002F2FCD22 +:1031A000C008F0001800C040E7D0C008C108E20A1B +:1031B0001800C4404A48E7DAC008E60615030616B8 +:1031C000F00600266C0CF01F00258D053098F003EA +:1031D0001800E088000F49D8201D1AD8E068018C3B +:1031E0001AD849F849BC1AD8F01F001B2FCDC008C7 +:1031F0004959E6081503300A0618F2080028F0C9F4 +:10320000FFF0930A5807C0D00F8B0FBA0F99B1691E +:10321000F3EB11890FABF3EB1089F5E91009911964 +:103220004899E60815030618F20800282F08300907 +:10323000069CB0C948B8B083C038E06C00FF2FFDD1 +:10324000D8320000000073548003B5948003B64C5C +:1032500080039D9C800094C480012F788003B66415 +:1032600000007352D431494730050E963EF42EC704 +:10327000ECC3FED40F882FF85C58AE88EEF9FFFC43 +:103280005829C061E8081800E08B0009C0F85819F7 +:10329000C0D1F2081800E088000A6C0C580CC0403D +:1032A000F01F00068D05EF45FFFC2E472E46063722 +:1032B000CE21D8320000735480012F78D431306889 +:1032C0001293189616951497F939002EF0091800E4 +:1032D000C0E04B78201D1AD8E06801DA1AD84B58A4 +:1032E0004B5C1AD8F01F00352FCDC008580BC5C055 +:1032F00017891798B168F1E9118817A9F1E91088C1 +:1033000017B9F3E81008C500189B0A9CF01F002CA1 +:103310001894C4A10B88FC19E000B968E618F00005 +:103320001238C420069B0A9CF01F00265C5CE80C47 +:103330001800C3C55C6C4A49F8081503302AF00C24 +:10334000010CF20C00289166F0C9FFF0930A0FDA25 +:10335000F16A000D0FCAF16A000C0FBAF16A000B96 +:103360000FAAF16A000A0F9A1095F16A0009ECC3DE +:10337000FFD10F8AB2C4F16A0008C0F87009701456 +:103380008B09F01F00120E99069A089B0C9CF01FE7 +:103390000010089CF01F000F6A08306C109B580842 +:1033A000CEE1109CD832E06C00F6D8328003B594A0 +:1033B0008003B67880039D9C800094C480012558CA +:1033C00080013014000073548000C97480012F08FC +:1033D0008000D13CD421189E580CC0E14958201DD2 +:1033E0001AD8E068024A1AD84938494C1AD8F01F4E +:1033F00000142FCDC008761AF4C8FFE4F137000F8F +:10340000F136000CF139000DF138000E782BB1695E +:10341000F3E61189F3E810897818EFE910091059DB +:103420001669C061F4CBFFD82ECAF01F0006D8225F +:103430008003B5948003A13880039D9C800094C4D0 +:10344000800132BCD431202D189616911495580C59 +:10345000C0E14CA8201D1AD8E068027F1AD84C8819 +:103460004C8C1AD8F01F00482FCDC00894593378DF +:10347000F0091900E08B000A4C48149CF109002265 +:103480002FF9F1590022C3087414E8C7FFE40F981C +:103490000F89F1E910893018F0091900C1E10FD83E +:1034A0000FC9F1E91089E0680604F0091900C1515B +:1034B0000FB80FA9F1E91089E0680800F0091900B8 +:1034C000C0C1E938001BE939001AF1E91089E06848 +:1034D0000806F0091900C0E04AC80A9CF109002852 +:1034E0002FF9F1590028F109001E2FF9F159001E9A +:1034F000CA184A68F109001A2FF9E8C3FFD6F15932 +:10350000001AFAC2FFFC304A069B049CF01F002000 +:10351000EF380018EF390019B169F3E81189EF3875 +:10352000001AF3E81089EF38001BF1E910096C1854 +:103530005808C0C01039C0A1049B3019E8CAFFDC8C +:103540000C9CF01F00143018C0A83009EECAFFF818 +:10355000FACBFFFC0C9CF01F000F30080FEA0FF9AC +:10356000F3EA1089301AF4091900C1503028F00923 +:103570001900C591C52800008003B5948003A138C7 +:1035800080039D9C800094C4000080D48002E736B4 +:10359000800132BC5808C4D03008AEE83028304A28 +:1035A000AEF8EECBFFF2EECCFFE8F01F0025304A7C +:1035B000069CEC0A000BF01F0022ED39002E30684B +:1035C000F0091800C0E049F8201D1AD8E06802D9B7 +:1035D0001AD849D849DC1AD8F01F001D2FCDC008D1 +:1035E000306820185C58EE080009F33B0008F36BC4 +:1035F0000012E808000AF56B000EE208070BF36BF7 +:103600000008E2080709F56900145808CEB10C9CBF +:103610006C680A9B5D18C0D80C9CFACBFFFCF01FAD +:10362000000DC07848C8F109002C2FF9F159002C81 +:103630000A9CF01F000A2FEDD83200008002E73606 +:103640008003B5948003B5DC80039D9C800094C406 +:103650008000B3B4000080D48000D13CD42178191C +:10366000F338001BF339001A1697F1E91088189601 +:10367000E0690800F2081900C070E0690806F20865 +:103680001900C231C1C8189B0E9CF01F00173E4B99 +:103690000C9CF01F0016C0E04958201D1AD8E068A5 +:1036A00004A41AD84938494C1AD8F01F00142FCD59 +:1036B000C0080E9B0C9CF01F0012C148189A169C63 +:1036C0002D1BF01F0010C0E848F8F10900282FF961 +:1036D000F1590028F109001E2FF9F159001EF01FC1 +:1036E000000BD82A800133D48000CDD48003B59458 +:1036F0008003B36C80039D9C800094C4800122E40D +:1037000080013444000080D48000D13CD431300AA0 +:1037100018941691303C338BF01F0042E8C8FFD15B +:103720001895580CC0A14C08E06700FFF10900246F +:103730002FF9F1590024C738985A3379F20A190041 +:10374000E08B000F4B98201D1AD8E06804311AD87E +:103750004B784B8C1AD8F01F00382FCDC008300999 +:103760007813E6C7FFE4AEE93019AEF93069E93AFB +:10377000002EF20A1800C0E04AC8201D1AD8E068DE +:1037800004391AD84AD84ABC1AD8F01F002B2FCDBA +:10379000C00830664AAB4ABA20165C56F006070CE1 +:1037A000EE060009F36C0008F606070CF36C001235 +:1037B000F406070CE6060009F36C000EF006070C91 +:1037C000F36C00145806CE913042EECCFFF2E802C2 +:1037D000000B049AF01F001C049A029BEECCFFE839 +:1037E000F01F00193069AED2AEC9AEB6AE863088D1 +:1037F000301AAEA8AE9AE769001BE768001A089C69 +:1038000068680A9B5D184888F10900182FF9EFDCF9 +:10381000C008F15900180A9CF01F000C0E9CD83209 +:103820008000D318000080D48003B5948003B6A034 +:1038300080039D9C800094C48003B5DC8003B71690 +:103840008003B58D8002E7368000D13CD4211694E8 +:103850001896189B1497089CF01F00541895E08147 +:1038600000DF09890998B168F1E9118809A9F1E92E +:10387000108809B9FC1AE000F3E810081099E6195D +:10388000F0001439E08000CC5808E08000C9301BFB +:10389000089CF01F00475C5CEA0C1800C0545807F5 +:1038A000E08100CBCC184C39EBDCB008EA081503FA +:1038B0000A18F20800282F0870095809F9B9000100 +:1038C000F1F90A004BB9EA0815030A18F2080028B2 +:1038D0007048F0C900015819E088000F4B68201D9E +:1038E0001AD8E06803A51AD84B484B5C1AD8F01FC9 +:1038F00000352FCDC00858185F0858075F09F3E856 +:103900001008C041E06400FFC078089B0C9CF01FC9 +:10391000002EE9DCC0085807E08000854A5AEA0911 +:1039200015030A19A369F409000870485828C0B1A2 +:103930002F890E9BF40900090C9CECCAFFD1F01FE3 +:103940000023C6B85818C6E110990E98905B904AAB +:10395000F40B1900C111700A580AC0E04968201D13 +:103960001AD8E06803C41AD84998495C1AD8F01FDD +:1039700000152FCDC008F13A000CF20A1800C05112 +:1039800070085808CE41C51890CB300A303CF01F63 +:1039900000111896C4F00E9BF01F000F5C5CC1F084 +:1039A0000C9CF01F000EC468800125588001301463 +:1039B000000073548003B5948003B6D480039D9CAB +:1039C000800094C48001370C80012F088003B6FC6E +:1039D0008000D3188000CF988000D13C306CF01F5D +:1039E000001AC170300899169908EA081503F00505 +:1039F00001054968F00500256A045804C07008985C +:103A000068045804CFD1910CC0288B0C089CD82294 +:103A10000C9CF01F000F089C5C5CD822E06C00F648 +:103A2000D822089C5C5CD8220E960E9CF01F0009E0 +:103A3000CD6B089C5C5C4888F10900242FF9F15992 +:103A40000024D8228000C9D4000073548000D13CE7 +:103A50008000CD1E000080D4D421202D169618970A +:103A6000149531CB0C9CF01F0027C0804A68E06C95 +:103A700000FE90592FF9B059C4180E9B0A9CF01FF4 +:103A80000023C3410B890B98B168F1E911880BA998 +:103A9000F1E910880BB9FC1AE000F3E8100810995E +:103AA000E619F0001439C0F13019BAA935E9BAC9DC +:103AB000F3D8C207BAF8BAD9A988BABCBAE8FAC921 +:103AC000FFFEC1586E1912586E291268C0906E38E8 +:103AD0005808C041E06C00FCC118EEC5FFF40C9A18 +:103AE0000A9B0E9CF01F000AC08848A90C9B0E9CE4 +:103AF000EECAFFD1F01F00085C5C2FEDD822000059 +:103B00008000CDD4000080D4800125588001384C3D +:103B10008003B58D80012F0878983019B0895EFC3C +:103B2000D4217897EF380024EF390025F0091800E8 +:103B3000C021D82AEE080028201D701630086C1904 +:103B40008CCA8CDB20EA1AD620EBF2CCFFF2F01FF5 +:103B500000182FED587CC0F0581CC0310C95C138AE +:103B6000EF3800242FF8F1D8C0030C9CEF68002434 +:103B7000F01F0010E06C00F4D8228ADB6A1CF01FF2 +:103B8000000E6A055805CFA1EF3800242FF8F1D8B0 +:103B9000C0030C9CEF680024F01F00064878E06C1E +:103BA00000F290092FF9B009D82200008001933467 +:103BB0008000D13C80013F7C000080D4D421204D86 +:103BC0001896F01F002D5806C5306C955805C50095 +:103BD0000B885808C4D0E0680600300ABA68E06B69 +:103BE0000600303CF01F00251897C3F03008FACBD0 +:103BF000FFF4AA88781CF01F00229A6B580BC35060 +:103C00005C7BFAC8FFF2FAC9FFFCFACAFFF86E1C27 +:103C1000F01F001C586CC2606E18402B101B40181F +:103C20005C5B0E9C100B5C7BF01F001749789019B1 +:103C30002FF9B0196E19F338001BF339001AF1E9A6 +:103C40001088E0690800F2081900C060E069080601 +:103C5000F2081900C0716C480C9B0E9C5D185C5CEE +:103C6000C0400E9CF01F000A0C9CF01F000A2FCDD4 +:103C7000D822000080013FA08000D31880013F5867 +:103C8000800192DC8000D210000080D48000D13C02 +:103C900080013B20D4211897580CC0E149B8201D61 +:103CA0001AD8E06801491AD8499849AC1AD8F01FC7 +:103CB000001A2FCDC008499899983778F9680036CE +:103CC00036C8F9680037496899584968189B996857 +:103CD000495CF01F0016496CF01F00163628EF688B +:103CE00000353068EECCFFD1EF68002EF01F0012D7 +:103CF000581CC040E06C00F4D822E06805DC300CB1 +:103D0000EF58002CD82200008003B71C8003A13894 +:103D100080039D9C800094C40000746C80013A581C +:103D200080013D5880013B1880013E6880013D388C +:103D300080018F4480019128D40116985C7A189BE9 +:103D40002F29109C5C79F01F00045C7CF9BC00FFFB +:103D5000D80200008000CEC4D42131B918977898D9 +:103D6000965AF20A1900E08B0005E06C00F4D822A4 +:103D7000F1390025F13C0024F2CAFFFFF5DAC00357 +:103D8000183AC041E06C00F2D822F16A0025F0092F +:103D90000028169C911B3F26F01F00050E9CF01F6B +:103DA0000005EC0C1800CFB0D82A00008000CD1E12 +:103DB00080013B20D42130061897E9DBC01030A5E4 +:103DC000C138EE060708201D48BC1AD8F01F000BAA +:103DD0002FED5806C080EC050C085809C041488CEE +:103DE000F01F00062FF60836CED5486CF01F0003F2 +:103DF000D822000080037AF0800094C48003B76862 +:103E0000800384D448CD48D0E3B00001D55348C0E6 +:103E100048C10230C06248C2A505A1240230CFD3F8 +:103E200048A048B10230C06230023003A122023003 +:103E3000CFE3488F000100008003760000000008F7 +:103E4000000009B88003F480000009B800008CC8A5 +:103E500080008EDCD4013018F96800087808580812 +:103E6000C030781C5D18D802D4014869930C931BAC +:103E7000F33800085808C040129CF01F0003DA0A0B +:103E80000000749880013E54D421201D1895169688 +:103E90001494300B30CA49DCF01F001D300B49DC94 +:103EA000F01F001D300B49DCF01F001D497B49DC71 +:103EB000F01F001D1897581CC0400E9C2FFDD822E3 +:103EC000F01F001A1897581CCF910C9B0A9C49862A +:103ED0008D07F01F00181897581CC04030088D0837 +:103EE000CEDB30088D08F01F00141897581CCE61E7 +:103EF000FACBFFFD302CF01F0011F9B701FFFBF8E2 +:103F00000803E9F80A00CDAB00007498800091D056 +:103F100080013F8C80018F3080013F3C80019F6099 +:103F200080013E54800144588001440C0000749488 +:103F300080018F488001443080014110D401169CDB +:103F4000580BC041F01F0004D802300B301CF01F8A +:103F50000002D80280014110D4014879F3380008EA +:103F60005808C021DC0A3008F3680008F01F00037D +:103F7000DA0A00000000749880014284D4015C7B5E +:103F8000F01F0002DA0A00008001433CD401169CB5 +:103F9000F7DAC010F01F0002D80200008001433C95 +:103FA000EBCD40C0203DF01F00164969F3380008F2 +:103FB0005808C04072085808C0402FDDE3CD80C0CB +:103FC000E0680100FAC6FFF4E06C01000CE8F01FA5 +:103FD000000E0C9B1897F01F000D9A5B580BC0A0A9 +:103FE0005C7BFAC8FFF81A99FACAFFFC0E9CF01F16 +:103FF00000080E9CF01F0007CE1B0000800140A4AB +:10400000000074988000920080013F58800192DC8B +:10401000800091E8D40148583019701CF1690009FA +:10402000700A5D1AD8020000000074A8EBCD40CCE5 +:10403000206D49A6FAC7FFF46C2E8F2EECE200002B +:10404000EEE3000016961093FACEFFF0580CC22053 +:104050007C08FC1C8000F1EC100BF4081509BBB8BF +:10406000F1E611C812481648301C9D08F01F000CDC +:104070000E9C30CA1A9BF01F000BFB38000AA68862 +:10408000FB39000B300CA699F01F00052FADE3CDD6 +:1040900080CC7C0BCE3B00008003B774800075B4ED +:1040A00080007534EBCD4080201D4987EF38000833 +:1040B000EDB80000C071EF3900093008F0091800B0 +:1040C000C0402FFDE3CD808030091A98129B129CCE +:1040D000305AF01F000F3FF91B88F2081800CF205C +:1040E0001B98EDB80001CEE13008301C109B302940 +:1040F000E06A00F0F01F000630186E1CEF6800093F +:104100006E095D19CDFB0000000074A88001402CF1 +:10411000EBCD40C0201D301AF40C1800C1B0C08394 +:104120003028F00C1800C2602FFDE3CFC0C01A97F2 +:10413000300630091A98E06A00F1129B301CF01F1B +:1041400000161B98EC081800CF51300C2FFDE3CD62 +:1041500080C018961A9730191A98E06A00F1300B4F +:10416000129CF01F000D1B98EC081800CF51300C6A +:10417000CEEB48A8F1390008F9D9C001F7FA1E00C2 +:10418000F9BC0100F9B8005AF7F80E002FFDE3CD95 +:1041900080C000008001402C000074A8EBCD406876 +:1041A00048F516961893AA4B301CF01F000E0A9C77 +:1041B000310A300BF01F000C069BF5D6C010300CF6 +:1041C000F01F0009304A300B488CF01F0007300CFC +:1041D000F01F00040C9CE3CD80680000000002107A +:1041E000800075B4800075348003B780EBCD40400B +:1041F00020ED30083009FAE90018FAE90000FAE980 +:104200000008FAE9001049BBFAC6FFD4762A8D2AC5 +:10421000F6E80000301CECE90000F01F0017320A3D +:10422000300B1A9CF01F00150C9C30CAFACBFFE033 +:10423000F01F0012300CF01F00103019FB38002A5C +:10424000F2081800C0503FFC2F2DE3CD804048C835 +:10425000F1390008F9D9C001CF8030083039304A2F +:10426000109B301CF01F00072F2DE3CF8040000073 +:104270008003B784800075B480007534000074A892 +:104280008001402CD42130094A881695F169000933 +:104290001896320BF01F00268C085CC82FE8F7D860 +:1042A000B010AA0BEFDCB010F6C90007E06805F902 +:1042B000F0091900E08B00300D890D98F208180004 +:1042C000C220F6071900C182E0640200F9D7C010CD +:1042D0005C7B181BEC0C000CE04B0200E80B17B0E9 +:1042E0005C7BF01F00138A0B0E0CEFDCB010EE0BA2 +:1042F0001900FE9BFFED48F83009118AF20A1800F8 +:10430000C0D1D8220DA8F2081800CDC10DB8F2080E +:104310001800CD813008AA08D822F5DBC010486CFF +:104320000C9BF01F0006D822000074A88001419C5D +:10433000000074A48003B76C8001447CD4314A38F7 +:1043400018921695118A3009F20A1800C3615805AF +:10435000C33049F83004F0C0FFF4E0610200C22825 +:10436000E06602000C970C93301CA006F01F0019A9 +:10437000300B497C314AF01F0018E404000C0E9AFF +:10438000300BF01F0015304A300B494CF01F001263 +:10439000300CF01F0010EA0601080604EBD8B0103C +:1043A000C0B0E2051900FE9BFFDDEDD5B010EFD6E1 +:1043B000C0100E93CDABD832F5DBC010189B488CE3 +:1043C000F01F0008CC5B0000000074A4000001FC9A +:1043D000800075B4800075348003B7808003B770A7 +:1043E0008001447CD401201D3009301C1A98E06AF9 +:1043F00000F5129BF01F0004314CF01F00042FFD4C +:10440000D80200008001402C800075D2D401F01F3A +:104410000007F01F0007C03030CCD802F01F0003A7 +:10442000F01F0003CFA1DA0A800143E4800141ECD0 +:10443000D401314CF01F0006F01F0006C03030CC14 +:10444000D802301CF01F0004DA0A0000800075D288 +:10445000800141EC80007618D4014878910C911BC2 +:10446000F0CCFFF8F01F0005F9BC010CF9BC00010D +:10447000D8020000000074A8800076385EFCD703E4 +:10448000EBCD40F849C56A096A181039C2F08B0CA7 +:10449000EAC7FFF0EAC6FFF4EEC30010EAC4FF70FB +:1044A0000F89EDB90000C091EDB90001C0616C0940 +:1044B0006A081039E08800082F072F060837CF1147 +:1044C000E3CD80F86E19300B169C5D190F883FDA2A +:1044D000F1EA0009EDB80002C0716609EEF8FFF8D4 +:1044E00012088D08CEABAE89CE8B5809CD118B1C2E +:1044F0008B0CCCFB000074B8EBCD408048CE1897F5 +:10450000300AFCCBFFF0F408150417892F88FC084B +:10451000000CEDB90000C0512FFA2F0B588ACF4183 +:104520003018F96800088F0AE3CF9080000074B853 +:104530002FFC4849A56C18091388A1D8B2885EFCE5 +:10454000000074B82FFC4848A56C30091808B089E1 +:104550005EFC0000000074B8EBCD40E0189E14979C +:104560001295587BE08B002C496AF6C8FFFFA568BE +:10457000F408000C1989EDB90001C1F0F608150422 +:104580001296F4080008A1B6F60915012FF9F409EE +:10459000093E740AB8869157FC0A000A913A5805F8 +:1045A000F9BC0001F9B90104EDD9E138F9F81E00B0 +:1045B000F9BC0101E3CD80E0E3CF80E0E3CFC0E0D0 +:1045C000000074B848387019700C121C5EFC0000B2 +:1045D000000074B85EFC300899085EFC1899780CED +:1045E000580CF9B80001F3F80A005EFC300899088D +:1045F0005EFC300899085EFC5EFC5EFC5EFC5EFCC6 +:10460000D401580BC110F80B000B300A487E7C090E +:10461000F40900092FDAF208141FB98810091019DB +:1046200018C9163CCF51D802000074B85EFD5EFF79 +:104630005EFF5EFF5EFF3FDC5EFC78082FF89908A6 +:104640005EFCD401780820189908C020D80A5D1BA8 +:10465000DA0A301899085EFCD401F01F0002D80273 +:1046600080016D6CEBCD406048784889F5DBC01067 +:104670001895189B7006720C5D160A9CF01F0004BA +:10468000E3CF906000007540000074B4800091E8B2 +:10469000D401E06A0088300B485CF01F0006F01F70 +:1046A00000064868300C9118910CD802000074B8CC +:1046B000800091D0800146C000008B545EFCD7037F +:1046C000D401F01F0011F01F0011301B4909169C86 +:1046D000490AF01F00114919491A301B303CF01FDC +:1046E000000EF01F0010300A301BE06C00F0F01FCD +:1046F000000EF01F000E300A302C149BF01F000C2F +:10470000D80A0000800148C0800147888003B79024 +:10471000800146BC800148548003B794800157A4AF +:104720008001499C800147E0800149F480014730C5 +:104730004828F00C092B5EFC00007548EBCD40E0EA +:104740004905189716966A085808C0205D1848E869 +:10475000F007032C580CC061C088F0061800C09008 +:104760002F8C19885808CFA16A085808C080C00843 +:1047700078193028F0091800FE9BFFF8E3CD80E09F +:1047800000007544000075485EFCD703EBCD40FC8B +:104790004935189630120A94EAC3FFF46A0858089B +:1047A000C0D068385808C19030185806CF805816C5 +:1047B000C0305808CF40E3CD80FC48976E28701970 +:1047C000703C700B5D196E2870296E188F29103996 +:1047D000EFF20A003008CEAB0697CF1B000084B47E +:1047E000EBCD40C018961497580BC24049789009F9 +:1047F000F6091900E088001BF60B00184949F20879 +:10480000002C781A74085808C171741E7428103E60 +:10481000C1507C283009951895099D369D07FD6B80 +:10482000001078089D18E3CD80C0307B305CF01F0D +:104830000009E3CD80C0741ECEDB306B305CF01F0E +:104840000005E3CD80C00000000002200000755C80 +:104850008001473CEBCD408049281497129E581B9D +:104860005F8A9009F80919005FB81468C130F80C24 +:10487000001AF60B0019F4CCFFFF48BB48B8F60A43 +:10488000002AF0090029952EF60C09299507E3CD99 +:104890008080302B305CF01F0006E3CD808000006C +:1048A000000002200000755C000084B48001473CD9 +:1048B000D401307B305CF01F0002D8028001473CFD +:1048C000EBCD404030084AB9B2884ABA940858083B +:1048D000C4D04AA95C784AABF00800184A9EA36885 +:1048E000300C2F88F6CAFFF4F20800082F89930CC9 +:1048F000F34AFFFCF34EFFF82F491039CF91F6CE63 +:10490000FFE84A1A49EB301C970C972A971A14981B +:10491000F4C9FED42EC8F148FFF41238CFC1F54ACD +:1049200001342F4BF4CAFEC01C3BCEF1E06A00807C +:10493000300B496CF01F00164948F0C9FF902F0852 +:10494000F148FFFC491A1238CFB130064918F54634 +:10495000007C910A9116310A0C9B48FCF01F000C58 +:1049600048E80C9C9106E3CD8040485BCC9B00005E +:1049700000007598000002200000755C000084B4FF +:10498000800148B0000082340000759C800091D006 +:1049900000007630000076200000761C4848485918 +:1049A000485A91099119913A912A5EFC000002241B +:1049B000800149D4800149EC48484859485A911926 +:1049C0009109913A912A5EFC00000224800149D4A9 +:1049D000800149EC48494858311AEA1A4000143C11 +:1049E0005E085E19800149D480014A0C481C5EFCB7 +:1049F000800149ECD4013019300A303BFC1C4000E6 +:104A0000F01F0002D8020000800186C8EBCD408074 +:104A10004B373099EA194000123CC310E088001F60 +:104A200030B9EA194000123CC2A0C4233139EA1956 +:104A30004000123CC500E069078AEA198000123C78 +:104A4000C241761CF01F0027300A4A77149B314C74 +:104A5000F01F00260E9CE3CD80803019EA1940003B +:104A6000123CC320E08800153079EA194000123C5E +:104A7000C0603089EA194000123CC0713019300A18 +:104A8000303BF01F001B49B70E9CE3CD8080FC1922 +:104A90004000123CCFA130194978300AF149004456 +:104AA000304C149BF01F00110E9CE3CD8080301918 +:104AB000300A303B30ACEA1C4000F01F000D48D7F4 +:104AC0000E9CE3CD8080302B300CF01F000C0E9C30 +:104AD000E3CD808048470E9CE3CD808080014A0C66 +:104AE0008001DA2C800149D480014658800186C8B3 +:104AF000800152F0000087F480018390D401201DD2 +:104B00001A9CF01F0008C07040085818E088000682 +:104B1000F01F00052FFDD802F01F00042FFDD80262 +:104B200080015F4480015EDC80015EB4EBCD40F823 +:104B3000201DFEF805EA189716951496103AC3A0A2 +:104B4000FEF805E0103AC610FEF805DC103AC06029 +:104B50000C970E9C2FFDE3CD80F8E068018CEA18DD +:104B60008000103CE08000F7E068078AEA188000C7 +:104B7000103CE08000ADE0680186EA188000103C3F +:104B8000CE8176170E9CF01F0169F01F0169C0915C +:104B9000FEF805A0EEEA0000F0EB00006E29912976 +:104BA0000C97FEFA0592300BFEFC0590F01F016495 +:104BB000CD1BF01F015F1894C4D1E0680184EA188E +:104BC00080001037E0800185E08B00D2E0680107AB +:104BD000EA1880001037E08001A0E0680183EA183D +:104BE00080001037CB616A170E9CF01F0156E080E1 +:104BF0000230FEF905523048F34800440E9B334C16 +:104C00000C97F01F0152CA6BFEF4053CE0680112DC +:104C1000EA188000E8F300F8103CC540E08B006320 +:104C2000E0680107EA188000103CE08000F7E068C7 +:104C3000010DEA188000103CE080010DE0680105DC +:104C4000EA188000103CC851761C1497F01F0140F0 +:104C5000C81BFEF304F2E0680188EA188000E6F45D +:104C600000F81037E08001B0E08B00ABE068018312 +:104C7000EA1880001037E080018BE0680184EA18B0 +:104C800080001037E080016EE0680107EA188000BC +:104C90001037FE91FF5F6A18303CF13B000BF01FAC +:104CA000012D3019300A303B30CCEA1C4000F01F97 +:104CB000012A300AFEF70470149B301CF01F0127F4 +:104CC000C49B761C1497F01F0126C44B6A1CF01F6E +:104CD0000125300AFEF70490149B314CF01F011F90 +:104CE000C39BE068018AEA188000103CE08000CB9A +:104CF000E068078AEA188000103CCE90E068011551 +:104D0000EA188000103CFE91FF2576150A9CF01FE2 +:104D100001170BC93048F0091800E08001BBE08B97 +:104D2000019B3008F0091800E08001BF6738301996 +:104D300011EAF20A1800E08001DD0A9CF01F010C64 +:104D4000FE90FF08300A0C97305C149BF01F0103A3 +:104D5000C01B76170E9CF01F0107F01F00F5C4F171 +:104D60000E9B33DC0C97F01F00F9CF4AE068018AF4 +:104D7000EA1880001037E08000BDE068078AEA1872 +:104D800080001037E0800099E0680188EA18800010 +:104D90001037FE91FEDF6A170E9CF01F00F7C0A0CF +:104DA000F01F00F63069FEF8039EFEF60376F14927 +:104DB00000440E9B336C0C97F01F00E4CCBAE06803 +:104DC000018EEA1880001037E08000B7E068078A9B +:104DD000EA1880001037FE90FF7BE068018AEA182D +:104DE00080001037FE91FEB66A160C9CF01F00E49E +:104DF0001897E0800114FEF7032ACACA3099FEF81A +:104E000003460C97F1490044FEFA032C300BFEFCDC +:104E10000372F01F00CBC9EA76150A9CF01F00DA76 +:104E2000302B169CF01F00D9FEF702FCF01F00C0CB +:104E30001896E08100DD0A9B337CF01F00C40C9AB9 +:104E40003019303B30ECEA1C4000F01F00C3FE9FDD +:104E5000FE8276160C9CF01F00CE302B304CFEF7F5 +:104E600002C6F01F00CAF01F00B2E08000EC30194B +:104E7000300A303B310CEA1C4000F01F00B7FE9FA7 +:104E8000FE6A76150A9CF01F00BE1897E08000BAF3 +:104E9000300A302C149BF01F00B13078E9480044F0 +:104EA000F01F00A3FE91FE560A9B0C9733BCF01F27 +:104EB00000A7FE9FFE506A1CF01F00AA089AFEF78A +:104EC00002A6089B314CF01F00A5FE9FFE446A1706 +:104ED0000E9CF01F00B0C060FEF9026C3058F34821 +:104EE00000440E9B335C0C97F01F0098FE9FFE332E +:104EF0006A170E9CF01F00A2C0803069FEF80248BD +:104F0000FEF60220F14900440E9B33BC0C97F01FC3 +:104F1000008FFE9FFE206A1B337CF01F008C089AD6 +:104F2000FEF702043019303B30ECEA1C4000F01F61 +:104F3000008AFE9FFE106938301911EAF20A180043 +:104F4000FE90FE086A1CF01F0094FE91FE03189A62 +:104F5000189BFEF70246301CF01F0080FE9FFDFBF1 +:104F60006A150A9CF01F008B1897E08000874F2A73 +:104F7000300BFEFC022AF01F00721897E08000AE92 +:104F800030580C97E7480044FE9FFDE56A150A9CDF +:104F9000F01F006C1897E08000956938301911EA0D +:104FA000F20A1800FE91FDD64E3A300B4FDCF01F8E +:104FB00000641897E08000A930480C97E748004447 +:104FC000FE9FFDC96A160C9CF01F006B1897C2600B +:104FD000F01F006A30684D37E7480044FE9FFDBB74 +:104FE000EACBFFFC301A30DCF01F005C3019300ACD +:104FF000303B30CCEA1C4000F01F0057FE9FFDAB59 +:10500000F01F004BFE90FF4E0E9A3019303B30CC13 +:10501000EA1C4000F01F0050C44B303B30CCEA1C6F +:10502000400030190E9AF01F004C0DEB304CF01F71 +:1050300000490E9A0E9B301C4BB7F01F0048FE9F94 +:10504000FD8A0C9B33ACF01F0041FE9FFD844D3662 +:10505000FE9FFDD63068F0091800FE98FE693828DA +:10506000F0091800FE91FD76300A0C97325C149B13 +:10507000F01F003AFE9FFD6F189A303B30CCEA1CBF +:1050800040003019F01F0034EB3B000D303CCD0BDD +:105090003008FACBFFFC0C9716F8301A30ECF01FF2 +:1050A000002FFE9FFD580A9CF01F003FFE90FD520E +:1050B000300A0C97306C149BF01F0028FE9FFD4BAC +:1050C0000BCB302CF01F00230E9A0E9B301C4B375D +:1050D000F01F0022FE9FFD3F189A303B30CCEA1CA7 +:1050E00040003019F01F001CEB3B000D301CCA0BB8 +:1050F00048D7F01F000FFE91FF750A9B338CF01FFD +:105100000013FE9FFD28189A303B30CCEA1C40006B +:105110003019F01F00110BCB301CC8AB800152F0CE +:10512000800151A8800156388001D9AC800185E406 +:105130000000763880018E9C8001E03C8001EF20E9 +:105140008001E88C000087F480016D6C8001E2D45E +:1051500080018390800186C8800146588001E00864 +:105160008001DA2C800149D48001E2FC80016D4A83 +:105170008001D9C88001E4D080014AFC8001E4307C +:105180008001E0D48001D9FC800183A08001D9E8AE +:105190008001E81C8001E3DC80014A0C8001E7B853 +:1051A0008001E58880016D48EBCD40C04C96189792 +:1051B0003138EA184000103CE0800087E088002485 +:1051C000E068010DEA188000103CC150E088004002 +:1051D000E0680115EA188000103CC0D0E068018A40 +:1051E000EA188000103CC070E0680112EA188000E4 +:1051F000103CC3910E9C4B7AF01F003718960C9C04 +:10520000E3CD80C03018EA184000103CC510E0889B +:10521000002E30D8EA184000103CC1003108EA18CE +:105220004000103CC3F030C8EA184000103CC1B147 +:10523000301C302BF01F00290E9C3019300A303BF7 +:10524000F01F00274A760C9CE3CD80C0E068010582 +:10525000EA188000103CCCF0E0680107EA188000F2 +:10526000103CCC900C9CE3CD80C0E04C008ACC304C +:10527000FC184000103CCF71307949B8300AF14930 +:105280000044149B302CF01F0019300A30FC149B92 +:10529000F01F0016302B300CF01F00100C9CE3CDDB +:1052A00080C0303C302BF01F000D0E9CCC7B48E9B9 +:1052B0007298ABC8300A9398149B303CF01F000BD7 +:1052C0000C9CE3CD80C048A60C9CE3CD80C00000C0 +:1052D000800151A880014B2C800183A0800186C8E9 +:1052E00080015638000087F480014658800149D477 +:1052F000D421FACD00E4FEF602E21898FEF502E0B1 +:10530000ECF700F83109EA194000123CE08000D5C2 +:10531000E08B003630A9EA194000123CE08000C260 +:10532000E088005330C9EA194000123CE08000A830 +:10533000C6A330D9EA194000123CE080011930F9C7 +:10534000EA194000123CC3D1FEFA0298300BFEFC71 +:105350000296F01F00A61896C341189BFEFA02841D +:10536000FEFC028CF01F00A1304C301BF01F00A18E +:105370000C9A0C9B301CF01F00A0C238E06901841D +:10538000EA198000123CE0880011E0690188EA19FE +:105390008000123CC100E08B00A5E0690186EA199B +:1053A0008000123CC0E1C078E0690183EA19800006 +:1053B000123CC363109CFEFA0226F01F0090189561 +:1053C0000A9C2C7DD8223079EA194000123CC7C0D3 +:1053D000E08800973089EA194000123CE08000CF55 +:1053E0003099EA194000123CCEC14FEA300BFEFC66 +:1053F000020EF01F007E1894E08000CF3048ED4888 +:105400000044CDFB4F7A300B4FECF01F0078CD916C +:10541000189A189B4FC5301CF01F0077CD2BE06900 +:105420000107EA198000123CCC60E0690115EA1915 +:105430008000123CC1203139EA194000123CCC11E5 +:10544000300A301C149BF01F006C300A304C149B47 +:105450004EE5F01F0069CB5B6F38301911EAF20A94 +:105460001800C72076160C9CF01F00690C9CF01FDA +:1054700000694E98580CF0051710CA3B303B3019A4 +:10548000300AF01F0066302B303CF01F005A300A03 +:10549000301C149BF01F00584E150A9C2C7DD822FE +:1054A0004D0A300B4DFCF01F00511897C3B0305817 +:1054B000ED480044C86B303B3019300AF01F0057EC +:1054C000302B304CCE3B6C9BE21B0040C2414C5A0F +:1054D0004D5CF01F0046C9D03028ED480044C71B82 +:1054E000E069018AEA198000123CFE90FF65E069DC +:1054F000018EEA198000123CFE91FF64C5CBFC19B5 +:105500004000123CFE91FF5E300A149B149CF01F79 +:10551000003AC57B300A4BC5149B301CF01F003687 +:10552000C50B30481A9BBAE8336CF01F00400E9A46 +:105530003019303B30ECEA1C4000F01F00384B893A +:105540004BB89119C3EB76170E9CF01F00310FC9B1 +:105550003068F0091800FE9BFF354B15F01F003531 +:10556000C2A10E9B338CF01F0031C2BB4AC530195B +:10557000300A303BF01F0029C24B49AA300B4AAC1D +:10558000F01F001ACAA1304849F5BAC81A9B334C1B +:10559000F01F0026C16B306AEECBFFE2FACCFFFCB5 +:1055A000F01F002530481A9BBA68335CF01F001FBB +:1055B000089ACBFB3019300A303B30CCEA1C400053 +:1055C000F01F00160FCB305CF01F000A300A301CB1 +:1055D000149BF01F0009CF5A000087F4800152F09D +:1055E00080018E9C8001E7548001EF208001E03C27 +:1055F000800183908001465880014B2C8001E58812 +:105600008001DA5480014A0C800149D48001E2FC17 +:1056100080016D48800151A8800186C880015638FC +:105620008001E7B88001EA8C80016D6C00000224E3 +:10563000800185E48002E736EBCD40804C9731084D +:10564000EA184000103CC6F0E088001DE068018CBC +:10565000EA188000103CC3B0E088002EE068019397 +:10566000EA188000103CC440E0680194EA18800009 +:10567000103CC2714BC7761CF01F003C0E9CE3CD62 +:10568000808030C8EA184000103CC400E088001D4B +:1056900030D8EA184000103CC21030E8EA18400048 +:1056A000103CC0F14B2A300B4B2CF01F00330E9CEA +:1056B000E3CD8080E0680186EA188000103CC0706D +:1056C0000E9CE3CD8080E04C008ACFB14A5AF01F97 +:1056D000002B18970E9CE3CD8080F01F00294A4ACA +:1056E000300B4A8CF01F00240E9CE3CD8080761C8A +:1056F000F01F0025F01F0025C0514A5B33CCF01F7E +:10570000002549970E9CE3CD80804A39731858983C +:10571000CD803098496AF3480044300B49FCF01FB3 +:105720000016CCFB49C973185888CCB03088F348B0 +:105730000044F2F900F87338301911EAF20A18003F +:10574000C0A03019300A303B30DCEA1C4000F01FAA +:105750000014CB7B486A300B492CF01F0007CB1B91 +:105760008001563880014A0C8001DA4680018E9C07 +:105770008001E03C8001EF2080014B2C80015E34F1 +:105780008001DA448001DA48800185E4000076383F +:1057900080016D6C000087F48001E0D4800186C830 +:1057A0008001E094EBCD40F84A37189416956E18B6 +:1057B0006E090E930E96C118300B301CEA1C400087 +:1057C0005D19300B6C39FC1C40005D196C388D285C +:1057D0006E186E091238C2001039C190300B301C9F +:1057E000EA1C40005D19300B6E19FC1C40005D196D +:1057F0006E188F086E296E381039CDF10A9B089CFF +:105800005D19873C6629123CCF71CE3B0A9B089CF0 +:105810005D198F1CCF0B5805C0706A085818C060FE +:105820000A9CF01F0006E3CD80F8EACCFFFCF01FD5 +:105830000004CF7B00000224800091E88001D3A8FF +:105840004878F14C00F8580CF9F81004F9B9010146 +:10585000F1D9E108F9F81A045EFC0000000087F4B1 +:10586000EBCD40C04948FAC6FFF4F0F700F4580702 +:10587000C051C1E8F8C70008C1B0EECAFFDC740827 +:10588000204D502815C9FB69000C15D8FB68000D88 +:105890006C0850080DC9BAC90DD8BAD8F01F000756 +:1058A0002FCD580CC0516E2C580CCE5118970E9C11 +:1058B000E3CD80C0000087F480018898D40149D9E5 +:1058C000F2F800F41838C0B078285808C2B0784808 +:1058D000201899482F8CF01F0018D802580CF9F89E +:1058E0001004F9BA01FFF1DAE108F9F81A043008F6 +:1058F000F34800F448FA78285808C180F0C9000835 +:10590000F54900F4CE8072482FF89348F4F900F47A +:105910005809CE10724820182F8C9348F01F0006AB +:10592000D80278385808CD41D802F54800F4CD3B6C +:10593000000087F48001F2A0D4014989F2F800F058 +:105940001838C0A078085808C240784820189948EC +:10595000F01F0013D802580CF9F81004F9BA01FF2F +:10596000F1DAE108F9F81A043008F34800F0780A8F +:10597000F34A00F0580ACED074482FF89548487979 +:10598000F2F900F05809CE50724820189348CE1B07 +:1059900078185808CDB1CDFB000087F48001F2A043 +:1059A000EBCD40801897580AC2C07858F608010815 +:1059B0001438E08800274948F0FB00F8580BC190E4 +:1059C000F8CAFFDC15D8204DFB68000D740950297A +:1059D00015C8F6CAFFDCFB68000C7408500815C92E +:1059E000BAC915D8BAD8F01F00092FCD580CC091EC +:1059F0000E9CF01F00070E9CF01F0006E3CF908066 +:105A0000E3CF8080000087F48001889880015938B6 +:105A1000800158BCD4214A141895E8F700F05807C3 +:105A2000C27079383006704AC02810976F387049B4 +:105A30001439E08A00086E080E965808CF710E9649 +:105A400010970A37C0D06A085808C0B00A9CF01FE7 +:105A500000145806C1300A9B0C9CF01F0012D8227B +:105A60006A185808CF416A482FF88B48CF3BE94C59 +:105A700000F078482FF89948D8220A9B0E9CF01F16 +:105A800000090E9CE94500F0F01F00050E9B0A9CE2 +:105A9000F01F0004D8220000000087F48001F2A06B +:105AA0008001F28CEBCD40C04A48FAC7FFF4F0F613 +:105AB00000F05806C051C3D86C065806C3A06D3814 +:105AC000707C2F4CF8E80000212DFAE90024F8EA58 +:105AD0000008FAEB002CF8E80010FAE90034F8EAC4 +:105AE0000018FAEB003CF9380020FB680044F93953 +:105AF0000021FB690045EEE80000FAE90000EEEA4B +:105B00000008FAEB0008EEE80010FAE90010EEEAEF +:105B10000018FAEB0018EF380020FB680020EF397E +:105B20000021FB690021F01F00062EED580CCC501F +:105B30000C9CE3CD80C00000000087F48001891038 +:105B4000EBCD40E0205D7608502817C9FB69000CBA +:105B500017D81697FB68000DF8CBFFE2306A18964D +:105B60001A9CF01F0034F01F00342FCD580CC05188 +:105B7000300C2FFDE3CD80E06E7C2F4CF8E8000068 +:105B8000212DFAE90024F8EA0008FAEB002CF8E8E5 +:105B90000010FAE90034F8EA0018FAEB003CF93892 +:105BA0000020FB680044F9390021FB6900456D388D +:105BB000707C2F4CF8E80000FAE90000F8EA0008D1 +:105BC000FAEB0008F8E80010FAE90010F8EA00180B +:105BD000FAEB0018F9380020FB680020F9390021A1 +:105BE000FB690021F01F00152EED580CCC20320B64 +:105BF000300CF01F00131895CBC0189A0E99491B52 +:105C0000F01F00110BF93008F0091800EDF800132F +:105C1000F1F90807EBF90E07FACCFFFC6D3818D83C +:105C20001A9CED45004CF01F0009301CCA3B0000D7 +:105C30008002E73680018898800189108001D8DCD5 +:105C40008001D3EC8001AD408001D3A8EBCD40C0F2 +:105C500049C649D86C09700A1439C05530070E9CE2 +:105C6000E3CD80C0350CF01F00191897CF906C0859 +:105C70002FF8350A8D08300BF01F0015320B300C51 +:105C8000F01F0014EF4C004C1898C16030084929EF +:105C90008F680E9CF30A017C8F28EF5A001CEF6876 +:105CA000002A8FF88F488F58EF4800408F188F08D0 +:105CB0008F38E3CD80C00E9C1097F01F0008CD0BED +:105CC000000076440000025880009200800091D0CD +:105CD0008001D8DC00000260800091E8EBCD4080BC +:105CE000189778485808E08A0004E3CD8080793816 +:105CF0005808C0402B4CF01F000648697208201855 +:105D00000E9C9308F01F0004E3CD80808001D3A88F +:105D100000007644800091E8D4014899F2FC00F834 +:105D2000580CC0A07848201899483008F34800F86B +:105D3000F01F0004D802F34C00F8D802000087F4EA +:105D400080015CDCEBCD40F84B131894E6F700F8CB +:105D50005807C060189B0E9CF01F002EC1D1E6F7BB +:105D600000F05807C4203006C1285806C0706F38AC +:105D70006D39704A7248103AC064E6F800F80E387F +:105D8000EE0617106E070E955807C0900E9C089BE4 +:105D9000F01F0020CEB00E9CE3CD80F8F01F001E57 +:105DA00058065F18580C5F0918971069EA0918001F +:105DB000C201089B306AEECCFFDCF01F0018089B84 +:105DC000306AEECCFFE2F01F00156F3A0899149C80 +:105DD000493BF01F001430080E9C8F088F18F01FED +:105DE00000120E9CE3CD80F8F01F000B1897CE2B0D +:105DF0000C9CF01F000E0C9CF01F000D0C9CF01F63 +:105E0000000DF01F00051897CD51CC6B000087F4F2 +:105E100080015B4080015C4C800091DC8001D3EC10 +:105E20008001AD4080015A1480015938800158BC6E +:105E300080015CDCEBCD40E04905EAF700F458074F +:105E4000C0D1C158F0C600080E9CF01F000D0E9C7A +:105E5000F01F000C5806C0B00C976E285808CF31C0 +:105E60000E9CF01F00070E9CF01F00063008EB4848 +:105E700000F4E3CD80E00000000087F4800158BC0E +:105E800080015CDC580CC04078185B98C110489ABF +:105E900074991298EDB90001F9BC0101F9BB001029 +:105EA000F3DBE038F5F80A09F9BC00015EFC5EFDA1 +:105EB000000087F4489A7498109CF0091604E21CBC +:105EC0000002F9BB0110F1DBE138F5F81A09F9B865 +:105ED0000101F3D8E12C5EFC000087F4489A749825 +:105EE000109CF0091604E21C0002F9BB01EFF1DB83 +:105EF000E128F5F81A09F9B80101F3D8E12C5EFCA4 +:105F0000000087F448887099129CA589E21C000261 +:105F1000F9BA0101F3DAE148F9B90101F1D9E12C4B +:105F20005EFC0000000087F418994868709CE21C31 +:105F30000002F1F8103FF3F81A00F9BC01015EFC11 +:105F4000000087F418994868709CE21C0002F1F880 +:105F50001041F3F81A00F9BC01015EFC000087F45F +:105F600018984859729CE21C0002F3F81A41F9BCD7 +:105F700001015EFC000087F44839300C7298A7C814 +:105F800093985EFC000087F44839300C7298A5D8CD +:105F900093985EFC000087F4D401E06A0100300BA6 +:105FA000482CF01F0003DA0A00007648800091D0E8 +:105FB000EBCD40C04A0A18967498109CE21C00026F +:105FC000C1D0F4F700F85807C1801099E2190020F9 +:105FD000C270A5C8A7A8F4FB00BC95983009497AFF +:105FE000E06CEA60F01F00163008F0061800C100EF +:105FF0003018F0061800C040301CE3CD80C0311CC2 +:10600000EECBFFE2306AF01F000FE3CF90C0312CDF +:10601000EECBFFE2306AF01F000BE3CF90C0A5B8D3 +:10602000F4FB00B89598E06CEA60487AF01F000431 +:10603000CDCB0000000087F480015F7880014558D7 +:106040008001465880015F88D401F01F0002D80209 +:1060500080018040D40148687098E2180002C03185 +:10606000109CD802F01F0003D8020000000087F443 +:10607000800183FCD40148687098E2180002C031A6 +:10608000109CD802F01F0003D8020000000087F423 +:10609000800183D8D431FACD0188E06A0168300BE1 +:1060A0001A9CF01F002CFAC6FE541A901A9CF01F7E +:1060B000002A581CC03029EDD832FAC5FFF8401824 +:1060C000F0081016EA0800081035C4120A97FAC43E +:1060D000FE98ECC1FFF8C09840182EA7F0081016E3 +:1060E000EA0800081037C3326C08204D50280DC94B +:1060F000FB69000C0DD80E9BFB68000D306A1A9CE2 +:10610000F01F0016F01F00162FCD580CCE60EECBFE +:10611000FFFA310AFACCFE88F01F0010E2E8000016 +:10612000310AE8E90000089BE2E20008FACCFE88A8 +:10613000E8E30008F01F000BCD01189B316A0E9CAC +:10614000F01F0004009CF01F0008CB6B29EDD83A2B +:10615000800091D0800160748002E73680018898C9 +:106160008000917C80016054D431FACD018CE06ACA +:106170000168300BFACCFFFCF01F0050FAC5FE504E +:10618000FACCFFFCF01F004E581CC03029DDD8327D +:10619000402858F8E088007FF0081016FAC1FFF494 +:1061A000E20800081031E0820087E06801685018BA +:1061B000EACBFFF8FAC6FFF002973004FAC0FE946B +:1061C000500BC0C85804C36040282EA7F008101612 +:1061D0002EA6E20800081037C4926A08204D502805 +:1061E0000BC9FB69000C0BD80E9BFB68000D306AD5 +:1061F0001A9CF01F0034F01F00342FCD580CCE3005 +:10620000ECCBFFFE310AFACCFE84F01F002E400BCF +:10621000F6E80000310AE0E90000FACCFE84F6E27C +:106220000008009BE0E30008F01F0028CB005804A2 +:10623000CCC10F89E8091800CC810F98F20818002A +:10624000CC410FA9F0091800CC010FB8F2081800D2 +:10625000CBC10D89F0091800CB810FD8F2081800C6 +:10626000F9B40100EE041700CB0B5804C2400A9B9E +:10627000306A089CF01F0013EACBFFF8310AE8CC23 +:10628000FFFAF01F0010FACCFFFCF01F001129DD0F +:10629000D832F00A1110FAC1FFF4F40A1016E2081D +:1062A000000C300BF01F00053108E0690168502830 +:1062B0005019C7FB3FDCC6BB800091D080016074E1 +:1062C0008002E736800188988000917C80016054CC +:1062D000EBCD40C0208DBACBBA8A189B4968709C20 +:1062E000E21C0002C06118970E9C2F8DE3CD80C088 +:1062F0003008FAC6FFF8504850281A99FACAFFFC2D +:106300000C9CF01F000EC111189740285808C0407F +:106310000C9CF01F000B404C580CCE70F01F000975 +:106320000E9C2F8DE3CD80C00C9CF01F0007581CE5 +:106330005F07CECB000087F48001E1308001D3A855 +:10634000800091E880018E9CEBCD40C0201D491754 +:1063500018966E9CE21C0002C0412FFDE3CD80C068 +:106360001A9CF01F000DEF4600FCEEF801105808D3 +:10637000C051301C2FFDE3CD80C0EECCFEECEF3AD7 +:10638000011BEF3B011AF01F0005301CCF4B000032 +:10639000000087F4800177A4800162D0EBCD4080BB +:1063A000201DBA8C48C76E98EDB80001C0402FFD83 +:1063B000E3CF808030181A99300A308B487CF01F68 +:1063C0000008581CCF511B88EF4801202FFDE3CD5A +:1063D00080800000000087F48003B7A08001776C04 +:1063E000D401201D48B91898729CE21C0002C0E03C +:1063F000300AF368004C308BFAC9FFFC486C12F885 +:106400003018F01F0006581C5F0C2FFDD80200004A +:10641000000087F48003B7A88001776CD401203D89 +:10642000BA8C496A749CE21C0002C0312FDDD8028C +:106430001B8B3038F00B1800E089001DE06832003B +:10644000EA18312EE069352EEA19312EFAE90004F6 +:10645000F4F800F8F3DBB008300A5808F1F91A0F25 +:10646000308B30181A99FACCFFFCF01F0005581C2D +:10647000CDE03FECCDCB0000000087F48001776CCD +:10648000D421206D4A0618976C98EDB80001C040E1 +:10649000300C2FADD822584C5FB8E04C00FF5F198C +:1064A0001268C0303FECCF6B300814995028169A10 +:1064B0005008189B1A951A9CF01F0014CEA01A9C25 +:1064C000F01F0013400818945808C0401A9CF01F91 +:1064D0000011402C580CC030F01F000F5814CD9103 +:1064E0006C98EDB80007C0C15837E08B000AEE0881 +:1064F000150648A9300A1009089C930ACCBB301C29 +:10650000CC9B0000000087F48001E1A480018E9CF8 +:106510008001D3A8800091E800007648EBCD40C010 +:10652000202D496718966E98E2180002C2103FF8B5 +:10653000FACAFFFEBAF8BAA8BAB8BAC8BAD8BAE85E +:10654000300BF01F000F6E98EDB80007C0E1583611 +:10655000E08B000CEC081506300A48A9301C100925 +:10656000930A2FEDE3CD80C02FEDE3CF90C0109CB8 +:106570002FEDE3CD80C00000000087F4800164802F +:1065800000007648EBCD40C0202D49F66C9CE21C03 +:106590000002C2703FF8BAF8BAA8BAB8BAC8BAD8F6 +:1065A000BAE8ECFB00F8580BC260F6CCFFE2303AD8 +:1065B000300BF01F0016FAC7FFFE301CF01F00144E +:1065C000303B0E9A300CF01F00136C99300B129870 +:1065D000ED4B0110A3D88D98EDB90007C050301CC9 +:1065E0002FEDE3CD80C0E06A010048BCF01F000B36 +:1065F000301CCF7BFAC7FFFE303A0E9CF01F000321 +:10660000CDDB0000000087F4800162D08001651CB2 +:106610008001648000007648800091D0D43120DD74 +:10662000FB690010FB68000CFAC9FFA8FEF7023CEA +:1066300018956E981696149272307201E218000244 +:1066400072147223C041300C2F3DD832E04B002031 +:10665000E08800043FFCCF9B584CE08B002158DBC6 +:106660005FBA301BFB380010F60818005F09126A89 +:10667000C030580CC1413078FACCFFD4FB680033ED +:10668000F01F007B3008303C50785058F01F0079E4 +:1066900058D6C070E08B00315856C0303FECCD5B0F +:1066A00030683019FB680033EF49011CFACCFFCD8C +:1066B000F01F0071501C1AD31AD41AD1FB38001CD9 +:1066C00004991AD80C9AFB380043FACCFFDC0A9BD9 +:1066D000F01F006A2FCD580CC1B140585808C05067 +:1066E000FACCFFECF01F0066407C580CCAD0F01FBB +:1066F0000065300CCAAB5906C6C0E0460020CCF19C +:1067000030283029FB680033EF49011CCD0BFACC4F +:10671000FFECF01F005D500C40585808C050FACCF8 +:10672000FFECF01F0057407C580CC030F01F0055A4 +:1067300040085818C8915800EFF81009F9B9010835 +:10674000F1D9E138EFF81A093009FB380010F208E6 +:106750001800C051F9D5B008F01F004C6E98EDB884 +:106760000001C0514C18F0F800FC501840185808AF +:10677000C080FB3A0010FB3B000C089CF01F00445B +:10678000306A089BEECCFEECF01F0042301AFACBC8 +:10679000FFF4EECCFEE6F01F003FEECCFEE5301A33 +:1067A000FACBFFF0F01F003B3018EF480110FB68F8 +:1067B00000326E9C4AD7EDBC0001C120EDBC000741 +:1067C000C061FB38000C50285845C1E1301CC3DBC8 +:1067D00030483039FB680033EF49011CC68B300864 +:1067E0004ADB1099109A109CF01F002CC3401ADC51 +:1067F0003018FAC9FFCA300A308B4A9CF01F0029B2 +:106800006E9C2FFDCDCBEA0915064A780C9AF0094B +:106810000007049BEF650026EF560024EECCFFFC3A +:10682000F01F001C089BEF610036306AEECCFFD8E9 +:10683000F01F00185803C110069B308AEECCFFD21F +:10684000F01F001440288FF0EF68003830188F08D0 +:10685000109CCFBA6E9CCB3B069B308AEECCFFD20D +:10686000F01F0012CF0B0000000087F4800177A416 +:106870008001EF6C80017BD88001E2148001D3A8F5 +:10688000800091E880018E9C8001641C800162D0B0 +:10689000800091DC80015E8480016AF48003B798F7 +:1068A0008001773000007648800091D0EBCD40C069 +:1068B000300749A60E98A7682FF7EC08000B76085A +:1068C0005808C0F10E985847CF714957EF3C004C1B +:1068D000F01F0014EEFC0100F01F0013E3CF90C086 +:1068E00076F8F6C9FFD2F73C00261AD8F6C8FFD8CA +:1068F0001AD91AD8F7390036F6CAFFFC1AD9F73870 +:106900000038F7390027F71B0024F01F00082FCDAF +:10691000581CCD90E3CF80C000007648000087F47B +:10692000800163E0800163488001661C7808301CA8 +:10693000F80A094C201C106C5EFCD70348787008DC +:106940005808C0901838C041C078103CC05070B88A +:106950005808CFC15EFD5EFF0000778C189A48F89A +:10696000709CE21C00025E0C70A8EDB80000C03004 +:10697000305C5EFC48AC780B583BE089000D300978 +:106980004888F00B003891189109950BF6C8FFFF65 +:1069900099085EFF3FDC5EFC000087F4000077880A +:1069A0000000776848D972A8EDB80000C1313008FE +:1069B000780A99D848ABF60A003A741999E974181C +:1069C000F8C9FFCC910C7808301CF60800389119F2 +:1069D0005EFC305C5EFC0000000087F4000077681D +:1069E000EBCD40C0189778B95809C18078C893C8D2 +:1069F0006EC891096E3C580CC050F01F000B300857 +:106A00008F3833CA6EA635AB0E9CF01F00080C9B66 +:106A10000E9CF01F0007E3CF80C078C94858911939 +:106A200078B9CE7B800091E8800091D0800183B05E +:106A30000000778CEBCD40801897580CC180789877 +:106A40005D1848F972095809C051C11872B958093E +:106A5000C0E01237CFC16E785808C0B06E3C580CF9 +:106A6000C060F01F000830088F588F38E3CF908047 +:106A70000E9C301BF01F0004E3CF90800000778C49 +:106A8000800091E8800169E0EBCD4080496972A8FF +:106A9000EDB80000C040305CE3CD8080493870091B +:106AA0001839E08A001E4928F00C00376E09580991 +:106AB000C15072DA580AF3F8000EEFF80A01F3FA3F +:106AC000000DF3F8100EF5F81A0E72E8129C910AF8 +:106AD000F01F00086E095809CED1E3CF90803FCC5B +:106AE000E3CD8080000087F400007788000077689D +:106AF00080016A34EBCD40F81897169614951294DD +:106B0000109333CCF01F000CC1403008990799B89E +:106B10009938995899889996994599649973487ABA +:106B2000301899A8741999C9930CF8C8FFD495180E +:106B3000E3CD80F8800092000000778CD401202DF6 +:106B4000500A48C972A8EDB80000C040305C2FED73 +:106B5000D80248981A99F00B032A3048FA08000B1B +:106B6000F01F0006581CF9BC0001F9BC01FECF0B58 +:106B7000000087F4000077488001F1D8EBCD40C0D9 +:106B8000201D4AC618976CA8EDB80000C441580CE7 +:106B9000C3F0789B580BC3C0780A580AC3954A695A +:106BA000F20A033850085808C061C1A870D85008CC +:106BB0005808C1601037CFB1F40815036EDA580ACF +:106BC000F3D8E009EFF8000EF3F80A01EFF8100E21 +:106BD000F5F81A0E400870DA70E9930A6E9B3F9838 +:106BE0008F18580BC0300E9C5D1B6E8B581BC0500D +:106BF000582BC150580BC0516E2A1A9CF01F000F21 +:106C00000E9C301BF01F000E2FFDE3CF90C02FFD18 +:106C1000E3CF90C0305C2FFDE3CD80C0ECF801B82D +:106C20000E38CEF130094838F14901B8CEAB00003A +:106C3000000087F40000776880016B3C800169E008 +:106C4000D40148C9169E72A8F1D8C001C031305C89 +:106C5000D8024898304A76A9F00C032C1ADAF6C804 +:106C6000FFF833CAF01F00052FFD581C5F0CD80237 +:106C7000000087F4000077488001F164D431204D92 +:106C800030084931189650285018FAC5FFF4FAC256 +:106C9000FFF802901A93FAC4FFFCC098E006032A9A +:106CA000F01F000C0E9B401CF01F000B3049049B92 +:106CB0000A9AE206032CF01F0009304818970A9937 +:106CC0001A9B089C5817CEB02FCDD83200007748B9 +:106CD0008001F1D880016B7C8001F0B4EBCD40E005 +:106CE000201D49356AA8A1A8300A49298BA8149704 +:106CF000930A14984906EC08002C2FF748FA303B09 +:106D0000F01F000F581CC0F10E985887CF5148D87B +:106D1000300991189109301B1A9CF01F000B2FFDB0 +:106D2000E3CD80E06AA8A1C88BA8CF2B000087F430 +:106D300000007788000077488001692C8001F05CB2 +:106D40000000778C8001695C5EFD5EFFEBCD4080CA +:106D5000189778785808C030788C5D180E9CF01F12 +:106D60000003E3CD80800000800091E8D4314B1017 +:106D70001895169260095809C58030047258721926 +:106D80000A38F7B400FF5809CFA10891E80C1502A2 +:106D9000F01F00291893C46060075807C2303006FE +:106DA000C0486E175807C1E06E580A38CFB10E9C24 +:106DB000F01F0022E60609276E485808C0F06E1939 +:106DC0005809EFF80002E1F80A01EFF90001EFF8C5 +:106DD0001002F3F81A026E2891092FF66E17580761 +:106DE000CE415804C1A006953006C0380836C154BB +:106DF0006A07049C6E686E8B5D18491B0E9CF01F21 +:106E000000112FF62FC56E485808CF100E9C48CBA6 +:106E1000F01F000C0836CED5069CF01F000B029C1C +:106E2000D8321891029CD83212941291CB0B0000E8 +:106E300000007794800092008001463A80016D4CFA +:106E400080014642800091E8EBCD4080324CF01F3B +:106E500000081897C080324A300BF01F00060E9CC5 +:106E6000F01F00050E9CE3CD8080000080009200A2 +:106E7000800091D080014652EBCD40FC18961695CB +:106E80001494129310924077F01F000AC100995693 +:106E900099359964998799739942487A3008991875 +:106EA00074199929930CF8C8FFFC9518E3CD80FC60 +:106EB00080016E4800007794D431FACEFFDC189739 +:106EC00016901491129310927C157C04580CC26099 +:106ED00078095809C26049A66C085808C051C09882 +:106EE00070185808C0601039CFC13018109CD832C3 +:106EF000F01F0014C13099509931996399859972A6 +:106F00009944300899186C199929930CF8C8FFFC1A +:106F10008D188F0C3018109CD8323008109CD83245 +:106F200008981AD50499069A029B009CF01F000647 +:106F30002FFD580C5F188F0CCDAB0000000077942C +:106F400080016E4880016E78EBCD40404856ECCC15 +:106F5000FFF8F01F000530088D168D08E3CD804046 +:106F600000007794800145D6EBCD40807847785A71 +:106F70006E18103AE0880004E3CF8080783B6E0CF6 +:106F8000F01F000B6E285808C0406E1B6E0C5D1879 +:106F90006E3CE04C002BC050300A149BF01F0005E3 +:106FA0000E9CF01F0005E3CF90800000800091DC74 +:106FB00080014658800091E8EBCD40C0203D30086C +:106FC00018979928990814961A9C308AF01F001176 +:106FD000FACBFFF80E9CF01F00102FED580CC101EA +:106FE0006E085808C0400E9CF01F000C6E2C580C08 +:106FF000C040F01F000B300C2FFDE3CD80C05806C1 +:10700000FBF81000EDF81A002FFDE3CF90C0000050 +:107010008002E7368001DE6C8001D3A8800091E811 +:10702000EBCD40C0189778185B98C0C0783B580BE0 +:10703000C17078465806C04078685908C050E3CF00 +:1070400090C0E3CF80C0785A590AE08800153FF815 +:107050008D28ECCCFFF4F01F000CE3CF90C0784CEF +:10706000580CCEE06E685908CEB12F4CF01F0006C8 +:10707000E3CF90C06C0CF01F00056E5830198D18CE +:107080008D29CE8B8001A25C800091DCEBCD40E0AD +:10709000201D1697E04C0081E0800088E08A0027E0 +:1070A000E04C0083C2F0C2B4760A1A9C300BF01F89 +:1070B0000064E08A004F585CC490314CF01F0061BE +:1070C0004008913C4009723A580AC7A06E0830093E +:1070D000990899399919EF380008992840083149D9 +:1070E000301A91594008911AC1D8584CC4A0E04CAC +:1070F0000080C330300C2FFDE3CD80E0E04C0085F4 +:10710000CFA16E0A300B1A9CF01F004DE08A0022BE +:10711000585CC1C0EF3900084008300A9119400896 +:10712000915A301B400CF01F0048581CCE41400CB7 +:10713000F01F0046C0B0400B76785808C070300C85 +:10714000F01F0043581C5F0CCD7B2FFDE3CF90E078 +:107150003FEC2FFDE3CD80E07645760A1A9C300B9C +:10716000F01F0037FE9AFFF6585CCF005805C49117 +:1071700040089135400993550FCA4008911ACD2B0C +:107180007626760A1A9C300BF01F002DFE9AFFE23D +:10719000585CCDC05806C1914008301A913640095C +:1071A00093564008911ACBEB760A1A9C300BF01FCD +:1071B0000024FE9AFFCF585CCC900FC9CAEB3FD891 +:1071C00093184009935ACAEBECC5FFED0A9CF01FD7 +:1071D000001D4008913C1899400A743B580BC2406E +:1071E0006E080C9A93089336EECBFFF430162F0CF2 +:1071F0009316F01F00184008915540099316C92BAB +:1072000040060A9CF01F000F8D3C4009723C580C50 +:10721000C1000A9A6E5BF01F000F400891550FC91C +:1072200040089119C7FB3FD895184009935BC7AB3D +:107230003FD893184009935CC75B000080016B3C0A +:1072400080009200800169A48001693C80016C404B +:10725000800091DCEBCD40FC4C151696189476021C +:107260006A095909E088001B4BE7C15878BA580AE7 +:10727000F9F8000CEFF80A01F9F8100CF5F81A0CFF +:10728000201978C8910A8B09F01F00376A0959093B +:10729000E08800056E0C580CCEA16C2338086C36C3 +:1072A000ECCCFFCCF0041800C260F01F003018973F +:1072B000C2F0B8C464080C9A990899A6069B2CCC15 +:1072C0008F9CF01F002B3808F0041800C2303818CB +:1072D000F0041800C2B04A3B30088FB8761A8FCA43 +:1072E0009507EEC9FFD46A0897192FF8301C8B0850 +:1072F000E3CD80FC64495809CD90ECC8FFC9E01883 +:10730000FFFCF009000CF01F00191897CD31E3CDF8 +:1073100080FC318A049BEECCFFF4F01F00156E7ADE +:107320008F2A580AC1018F8ACD7BEEC6FFF4318ABD +:10733000300B0C9CF01F000F049B0C9C308AF01F3C +:10734000000CCCAB6EA82FD8E018FFFC6E9C100C84 +:107350008F8C645BF01F0006CBFB0000000077A061 +:1073600000000234800091E880009200800091DCEF +:10737000800091D0D421207D1297FACEFFD04B29E6 +:1073800018947298EDB80001C040300C2F9DD8229F +:10739000FCE800003006BB295C7A50265046FAC54E +:1073A000FFF8FAC9FFE00A9CF01F00282FED580CE7 +:1073B000C2D05807C0B08F368F5640680E9B0C9CC9 +:1073C0008F28F01F0023581CC2E11A9CF01F0021D7 +:1073D0005BBCC29040076E4C580CC070F01F001E82 +:1073E00030088F388F4840075807C0401A9CF01F5C +:1073F000001B402C580CC030F01F00175804FBF83D +:107400001006E9F81A002F9DDA2A40085808C040F3 +:107410001A9CF01F0012402C580CCB80F01F000E5D +:107420002F9DD82A40085808C0401A9CF01F000B16 +:10743000402C580CC0313FDCCAABF01F00073FDCCA +:10744000CA6B0000000087F48001DF7480016C408B +:1074500080018E9C800091E88001D3A8EBCD40E0B4 +:10746000208D149616951897308A300BF01F001354 +:1074700059F6E08800052F8DE3CF80E00A9B0C9A37 +:107480001A9CF01F000FFAC9FFE030080C09FACC73 +:107490000001F368FFE0F8C6FFFF300B30AA0C9C38 +:1074A000F01F000832EB0ECC0C9CF01F0007CF4100 +:1074B0002F8DE3CF90E00000800091D0800091DC20 +:1074C0008000917080009164D43120AD189E109599 +:1074D00014974C781292709CE21C0002C0511896CE +:1074E0000C9C2F6DD832169AFAC6FFE41C9B0C9C9C +:1074F000F01F00400C9BFAC3FFFCFACAFFDC069C9D +:10750000F01F003D1896581CCEC15807C2F10E91CD +:107510000E90069CF01F0039401818945808C0407F +:10752000069CF01F0037403C580CC030F01F00355F +:107530005BB4C4D05807C170E06B0BB8E0CCFFF46B +:10754000F01F00315BDCC3A0582CC07060285BF8D2 +:10755000C04060188508CC5B029C301B3006F01FD1 +:10756000002BCBFB40988B08CBCB3FF8310C8B0822 +:10757000F01F002718941890C280F8C8FFF4500834 +:10758000109CF01F00248907640930088919089AA3 +:1075900031094A1B109CF01F00211891C20040982D +:1075A000189B9928300CF01F001E581CCB300C9BE8 +:1075B000029C3FD6F01F001BC94B029C301BF01FE2 +:1075C000001340988B08C8DB3FD6C8BB5807CFD004 +:1075D000029C301B3FD6F01F000DC83B400CF01F33 +:1075E0000012089C3FD6F01F0007C7BB000087F4BD +:1075F0008001745C80016FB880018E9C8001D3A8EB +:10760000800091E88001A22880016B7C80009200BC +:107610008001A28C8001702080016AF480016C409E +:10762000800169E08001A27CEBCD40E0209D49F81B +:1076300018991495709CE21C0002C06118960C9C6D +:107640002F7DE3CD80E0169AFAC6FFE8129B0C9CD2 +:10765000F01F00170C9B1A97FACAFFE01A9CF01F44 +:1076600000151896581CCEC11A9CF01F0013400834 +:1076700018965808C0401A9CF01F0010402C580C57 +:10768000C030F01F000F5BB6C0313FD6CD9B300C31 +:107690008B3C8B5C40880A9B8B28F01F000A581C8F +:1076A000CCF03FD6CCDB0000000087F48001745C96 +:1076B00080016FB880018E9C8001D3A8800091E882 +:1076C00080016C40EBCD40FC1895169414921293F7 +:1076D00010974076310CF01F0012C1D099369905F1 +:1076E00099149927189A3008310948EB109CF01F1B +:1076F000000E1896C100069B049C0C9AF01F000B0C +:107700001897581CC0500C9C301BF01F00090E9C91 +:10771000E3CD80FC30070E9CE3CD80FC800092001E +:1077200080016F6880016AF480017628800169E039 +:10773000EBCD406E202D4086129310951491169A31 +:10774000189B1A9CF01F0008069B0C99FAE2000097 +:107750000A9ABB23029CF01F00052FED2FEDE3CD0D +:10776000806E00008001745C80017374EBCD406812 +:10777000202D129310961495169A189B1A9CF01FA0 +:107780000008FAE800000C9ABB29069B0A9C300905 +:10779000F01F00042FED2FEDE3CD80688001745CB5 +:1077A00080017374EBCD40401896303CF01F00040C +:1077B0007848301C8D08E3CD804000008001EF6CDC +:1077C000EBCD406048A618952F060C9CF01F0009D1 +:1077D000303CF01F0009310AF8CBFF8C0A9CF01FE7 +:1077E00000070C9CF01F0006E3CF9060000087F4B8 +:1077F000800145F88001EF6C800091DC800145FA42 +:10780000D42149461894ECC5FFF00A9CF01F0012E1 +:10781000ECF700F85807C0C06F38707B2F4B322A46 +:10782000089CF01F000E0A9CF01F000DDA2A303C65 +:10783000F01F000CC060F9380088EE081800C06026 +:10784000ECCCFFF0F01F0006D82AF8CBFF78CE8BE7 +:10785000000087F4800145F88002E736800145FA90 +:107860008001EF6CEBCD40E049061895ECC7FFF0C6 +:107870000E9CF01F000F303CF01F000EECF600F8DD +:107880005806C0C0ECCBFFE2306A0A9CF01F000A29 +:107890000E9CF01F000AE3CF90E00E9CF01F000743 +:1078A0000C9CE3CD80E00000000087F4800145F8E7 +:1078B0008001EF6C8002E736800145FAEBCD404055 +:1078C000209DE04B0020E08B001CBABB580BC1B1DF +:1078D0003FF8BAA849162F060C9CF01F0011303C47 +:1078E000F01F0010322AFACBFFFEF8CCFF78F01F11 +:1078F000000E0C9CF01F000D2F7DE3CF90402F7DDC +:10790000E3CFC0403008169ABAA8189BFACCFFFC07 +:10791000F01F0007CE0B0000000087F4800145FC3B +:107920008001EF6C8002E736800145FE800091DC2B +:10793000EBCD40E01895303CF01F000B1897C110BC +:1079400048A62F060C9CF01F000A0A9B306AEECC5A +:10795000FF56F01F00080C9CF01F0007E3CF90E0DB +:10796000E3CD80E08001EF6C000087F4800145FCEE +:10797000800091DC800145FED401F01F0002D80296 +:1079800080017930EBCD40EC202D18961697586B7E +:10799000C0503FFC2FEDE3CD80ECFACCFFF8E06364 +:1079A000312EEA13322EE0623100EA12312EB92371 +:1079B00016980C99300A308B1A9CF01F0010301C5E +:1079C000F01F000F48F81893F0C5FFF00A9CF01F55 +:1079D000000E5803C0C00E9A0C9B069CF01F000BB3 +:1079E0000A9CF01F000B2FEDE3CF90EC0A9CF01FD8 +:1079F0000008069CCD0B00008001776C8001EF6CC5 +:107A0000000087F4800145FC800091DC800145FE88 +:107A1000EBCD40E01897303CF01F0018EEC8000195 +:107A200018955818E0880004E3CF80E058175F09E4 +:107A300049366D1858385F0AF5E90009C0E1582742 +:107A40005F08F5E80008C030E3CF90E0F01F000DBC +:107A5000C0A18B47E3CF90E0F01F000B6D185838A2 +:107A60005F0ACEEB303CF01F000578485818CF2055 +:107A7000F01F0005CEFB00008001EF6C000087F4D2 +:107A800080017BC88001F340EBCD40F81696189337 +:107A900076085858E08A002A49A83064F0C5FFF0FB +:107AA00097040A9CF01F0018301CF01F001818974C +:107AB000C160202D189B089A1A9CF01F0015F01F1A +:107AC00000152FED580CC1616C0A0E9B069CF01F2F +:107AD00000120A9CF01F0011E3CF90F80A9CF01FDF +:107AE000000F0E9CE3CD80F830683FFC9708E3CD93 +:107AF00080F80A9CF01F00093FBCE3CD80F800002D +:107B0000000087F4800145F88001EF6C8002E736C1 +:107B1000800188B0800091DC800145FA0050F200BD +:107B2000000FAC003008F9480320F94803245EFC3C +:107B3000EBCD40C016971496F8FE0320FCCBFFFF58 +:107B4000F60A141FE069851FEA1951EBF60904488B +:107B5000A5591419F8FA0324F2091064121B143BF6 +:107B6000C0B0F94B0320F80E0927FCC8FF9CF808A9 +:107B70000926E3CF90C0E3CF80C0D401189EF8FC63 +:107B80000324FCF803201838C1F0F8C8FF9CFC0C53 +:107B9000032CFC08032930089709E069851FEA19BE +:107BA00051EBFCFB0324FC0B09282FFBF6090448CE +:107BB000F60A141FA5591419F2091064F6090109EF +:107BC000FD490324D802D80A4838F0F900F85809CA +:107BD0005F1C5EFC000087F43018198CF00C180054 +:107BE0005F0A3058F00C18005F09124AC0F1306883 +:107BF000F00C1800C0B03028F00C1800C080584CB1 +:107C0000F9BC0003F9BC01005EFC5EFF302C5EFC99 +:107C100048C8F0F800FC5818C0D0C0635828C0D03D +:107C20005838C0505EFF580C5F0C5EFC583C5F8CAF +:107C30005EFC581C5F8C5EFC582C5F8C5EFC000068 +:107C4000000087F4EBCD40C01897169E740A580ABE +:107C5000C0D0753A580AC0A0747A580AC0704FF85C +:107C6000F0F901045889E0880004E3CF80C04FC8D0 +:107C7000F009032F94D8EDB80004CF813008301CF0 +:107C80009D08E3CD80C0F53900C83FF8F009180021 +:107C9000CED0F51B00D2580BCE90F51C00D030266C +:107CA000F4FA00D8F40C002811B9EC091800E080AF +:107CB00000BFF8C8FFFF3009F40800280C9CF0CA88 +:107CC000FFFDC07815882FCAF8081800E08000B0C2 +:107CD0002FF91639CF85CCABF53900C83FF8F0093C +:107CE0001800CC40F51B00D2580BCC00F51C00D07E +:107CF0003016F4FA00D8F40C002811B9EC09180079 +:107D0000E08000A4F8C8FFFF3009F40800280C9CAC +:107D1000F0CAFFFDC07815882FCAF8081800E08067 +:107D200000952FF91639CF85CA1BF53900A43FF805 +:107D3000F0091800C9B0F51B00B2580BC970F51C4A +:107D400000B03026F4FA00B8F40C002811B9EC09A0 +:107D50001800C660F8C8FFFF3009F40800280C9C22 +:107D6000F0CAFFFDC06815882FCAF8081800C58042 +:107D70002FF91639CF95C7ABF53900A43FF8F009B4 +:107D80001800FE90FF74F51B00B2580BFE90FF6FB9 +:107D9000F51C00B03026F4FA00B8F40C002811B934 +:107DA000EC091800C3D0F8C8FFFF3009F408002818 +:107DB0000C9CF0CAFFFDC06815882FCAF80818008F +:107DC000C2F02FF91639CF95C51BF53900A43FF83D +:107DD000F0091800FE90FF4BF51B00B2580BFE9007 +:107DE000FF46F51C00B03016F4FA00B8F40C002879 +:107DF00011B9EC091800C220F8C8FFFF3009F408D7 +:107E000000280C9CF0CAFFFDC06815882FCAF8082E +:107E10001800C1402FF9123BFE99FFF9C27B3028B0 +:107E2000AE8830199D09129CE3CD80C03028AE8801 +:107E30003029301C9D09E3CD80C03018AE88301940 +:107E40009D09129CE3CD80C03018AE883029301CCB +:107E50009D09E3CD80C00000000087F48003B7B027 +:107E60003028F00C1800C390E088001B3048F00C5C +:107E70001800C3503058F00C1800C21030093028D8 +:107E8000F00B1800C160F00B1800E08B001B3018DD +:107E9000F00B1800C100300812385F5C5EFC30182F +:107EA000F00C1800CEC130193028F00B1800CEC1EC +:107EB0003038C02830181039CF045EFE3029CE0B80 +:107EC0003048F00B1800C0703058F00B1800CE414D +:107ED0003028CF2B3048CF0B3039CD2B3049CD0B4C +:107EE000D431307977387075B8891894581AC0D061 +:107EF000C043582AC4C0D83A7738707A94D9EDB9BB +:107F00000004E0800087DA3AEB3900A43FF8F0097A +:107F10001800CF20EB0800B03009F2081900CF405C +:107F2000149112923006307B30533060C1A8E007C4 +:107F30001800C2B03028F0071800C7A03048EE087B +:107F40001800F9BC0003F9BC0100F01F003CE9F780 +:107F50001E002FF6EB1800B00C38FE9AFFD6098BE6 +:107F6000EAF800B8F006002811B70E9CF01F0034A4 +:107F7000FE9AFFF1E20718005F08E60718005F09A4 +:107F80001248E4081800CD40301CCE0BEB3900C875 +:107F90003FF8F0091800CB00EB0800D03009F208D8 +:107FA0001900CB2012913006307B301230533060F4 +:107FB000C1A8E0071800C2B03028F0071800C3A01D +:107FC0003048EE081800F9BC0003F9BC0100F01FAE +:107FD000001BE9F71E002FF6EB1800D00C38FE9AB4 +:107FE000FF94098BEAF800D8F006002811B70E9C20 +:107FF000F01F0013FE9AFFF1E40718005F08E60780 +:1080000018005F091248E2081800CD40301CCE0B62 +:10801000307B305CF01F000AFE9AFF77301CF01FA7 +:108020000007FE90FF723058301CA888D832302CE0 +:10803000C8DB302CCCDB000080017C1080017E602E +:108040003008484A48499508951893085EFC000096 +:10805000000089EC00008C5CEBCD4080189E198BF1 +:10806000580BC130300A3017149CFC0A00092FFA53 +:1080700013982018EE080948F9E81008F9D8B0104C +:10808000163ACF45E3CD8080169CE3CD80807938C9 +:10809000707A3308F53900C8F0091800C0205EFD79 +:1080A000F51800D4E218000C5848C0E0E08A000837 +:1080B0005888C08058C8CF41310C5EFC5808CF01A9 +:1080C0005EFF304C5EFC302C5EFCD703EBCD40E015 +:1080D00030081896109A169C8D084927760E301590 +:1080E000109BC0A8F80A00082FFA11C9EE0B070868 +:1080F000A7D91039C0A01C3ACF652FFB58DBE08B05 +:10810000000E300A780ECF8B6C08EA0B0949124832 +:108110008D082FFB58DBFE98FFF6E3CF90E00000C0 +:108120008003B7F4EBCD40C030069906149EF8C723 +:10813000FFFC1799EC091800C0E00C9AF60A000839 +:1081400011A90EC978082FF899082FFA1798143832 +:10815000FE99FFF61D993008F0091800C0F0300BA9 +:10816000FC0B000811A9EE0B0B0978082FF89908F1 +:108170002FFB1D981638FE99FFF5E3CF90C0EBCD8D +:1081800040F816941897780B68065806E08A002C79 +:10819000F6C8FFFCE8C5FFFCF8080003300E2FCC42 +:1081A000EA0E070A580BE08A00130FC81458F1D8DA +:1081B000C007C1503009C078F80907081458F1D831 +:1081C000C007C0D02FF9123BFE99FFF8597BE08B16 +:1081D000000706CA6E0B2FFB8F0B68062FFE1C369E +:1081E000FE99FFE0E3CF90F8EBCD40FE1894169295 +:1081F0001497780676055805E08A0025ECC8FFFC40 +:10820000F6C3FFFCF8080001300EF4CCFFFCE60ECC +:10821000070A6E0B580BE08A00120FC81458F1D8E9 +:10822000C007C1203009C078F80907081458F1D8F0 +:10823000C007C0A02FF91639CF852FFE1C35FE9937 +:10824000FFE8E3CF90FE5976FE9BFFF902CA68066D +:108250002FF689062FFE64051C35FE99FFDACF2B19 +:10826000D42178045804E08A0027F8C7FFFC493875 +:108270000F8B700C11C6580CE08A0017F0C5FFFC7C +:10828000300EEDEB2008F1D8C007C0F00A9A300993 +:10829000C0782FFA15881658F1D8C007C0602FF99A +:1082A000123CFE99FFF8D82A2FFE2FF7083EC03463 +:1082B0000F8BCE8BDA2A00000000023CD4211897E5 +:1082C00076055805E08A0026F6C6FFFCF8CEFFFCCE +:1082D000300B1694C0482FFB0A3BC1B4EC0B070AC5 +:1082E000E80A1800CF946E0C580CE08A00120FC8F0 +:1082F0001458F1D8C007CF003009C078FC0907082E +:108300001458F1D8C007CE802FF91839CF85D82A54 +:10831000DA2A3248F00C1800C110E08800113488C5 +:10832000F00C1800C0B0E08800183608F00C1800F7 +:10833000C05036C8F00C1800C0E15EFF3128F00CC8 +:108340001800CFC03188F00C1800CF8030C8F00C76 +:108350001800CF405EFD3308F00C1800CFC1CEEB03 +:10836000EBCD40E078055805E08A0010F8C6FFFC28 +:108370003007C0380A37C0940D8C2FF72FF6F01F46 +:108380000004CF90E3CF90E0E3CF80E08001831240 +:108390004838F14B01DCF14C01D85EFC000087F459 +:1083A0004838F14B01ECF14C01E85EFC000087F429 +:1083B000EBCD40801697581BC050582BC080E3CFA0 +:1083C0008080F01F00050E9CE3CD8080F01F00022E +:1083D000E3CF9080800091E8D401580CC070486BC6 +:1083E000760AE04A0168E0880003D80AF01F00031B +:1083F000DA0A0000000089EC800091DCD401580CFE +:10840000C0A078185908E08B0007780AE04A016894 +:10841000E0880003D80A189B482CF01F0003DA0AF2 +:10842000000089EC800091DCEBCD4040350A1896C5 +:10843000F01F000330088D48E3CD8040800091DCC0 +:10844000D401306AF01F0002D8020000800091DCE5 +:10845000D401300CF01F0002DA0A000080016C7CAD +:10846000D421201D189414971296169A1095189BD3 +:108470001A9CF01F001CE08A0032585CC27058063B +:108480005F1858075F191268C241300840099338D5 +:10849000400A95584008301B9115400CF01F0012FF +:1084A000581CC100400C78785808C090189B089C54 +:1084B000F01F000E581CC0A03FDCC098301BF01FFE +:1084C000000C400C78785808CF21301C2FFDD822A2 +:1084D0004008913740099356CDEB3FEC2FFDD82251 +:1084E00080016B3C800169A480016C40800169E0DF +:1084F000EBCD40C018971696303CF01F00283DD8B1 +:108500003079AE88AE9935083F29300BAEB8AEC988 +:1085100030283019AED8EF6B0008AEABAEEBAEF939 +:1085200058065F1AF8F900BC58095F181468F60875 +:108530001800C310F8F800D05818F9B80008EFF880 +:108540000E08F8F800CC5818EFF80808F9B900043C +:10855000F1D9E038EFF80E08F8F800C85818EFF82D +:108560000808F9B90002F1D9E038EFF80E08F8F878 +:1085700000C45818EFF80808F9B90001F1D9E0383B +:10858000EFF80E08F8F900D4EF380008F1E91048C8 +:10859000EF680008E3CD80C08001EF6CEBCD404078 +:1085A0001896303C5C76F01F000E5876E088000488 +:1085B000E3CF804048B8F006032FF90C00C6E3CDA6 +:1085C0008040F90C00CAE3CD8040F90C00CEE3CD29 +:1085D0008040F90C00D2E3CD804000008001EF6CB8 +:1085E0008003B7D4D40130DCF01F0002784CD802ED +:1085F0008001EF6CEBCD40FC207D31CA1893300B2D +:108600001A9C1A92F01F001266045804E08A00189F +:10861000E6C6FFFC30070D852FF72FF60A9CF01FEA +:10862000000DC0A14008FACAFFE4F0C9FFFF100A1C +:108630005009F565FFE80E34FE99FFEF1A9B069C82 +:1086400031CAF01F00052F9DE3CD80FC800091D042 +:1086500080018312800091DCEBCD40E0207D300B67 +:10866000189731CA1A9CF01F00171A956E0B580BF9 +:10867000E08A0024300AFAC6FFFCEEC9FFFC0C9C1D +:10868000149EC0582FF9143BE08A000D2FFA13886E +:10869000FC081800CF8418C82FF96E0B143BFE9904 +:1086A000FFF7F80601061A9B50060E9C31CAF01F10 +:1086B00000062F9DE3CD80E0FAC6FFFC0C9CCF2B7B +:1086C000800091D0800091DCD421129618971695E5 +:1086D0001494580CC1205809C111314CF01F0009E5 +:1086E000C0C09907B8C599249936487A7419994930 +:1086F000930CF8C8FFF49518D822F01F0004D82274 +:1087000080009200000077A4800147E0EBCD40C0DC +:108710001896580CC110308CF01F000C1897C090A0 +:108720000C9CF01F000B8F1C1898C0A030188F08ED +:108730000E9CE3CD80C018970E9CE3CD80C00E9CAC +:108740001097F01F0004CF5B800092008001D920B9 +:10875000800091E8EBCD40C049566C075807C180B6 +:108760006E395809EFF80004EDF80A01EFF810042B +:10877000F3F81A046E4891096E2A0FCB6E0CF01FA5 +:10878000000D0E9CF01F000C6C075807CEA148B8D6 +:10879000F0C7FFEC0E9CF01F000AC071302CF01FD8 +:1087A00000090E9CF01F0008E3CD80C0000077A4F4 +:1087B000800147E0800091E8000087F4800145DCFB +:1087C0008001478C800145ECD4014848300991185C +:1087D0009109F01F0003D802000077A4800187549C +:1087E000EBCD40FE4A0618976C0816951494201895 +:1087F000E0480167E0880004E3CFC0FE580A5F1933 +:108800006C1A300B580A5F181268F6081800CF501F +:10881000183A5FB858FC5F891268F6081800CED085 +:1088200016910C92C0B82FF7641958F75F8A0E3969 +:108830005FB81468E2081800CE00EE031016306A24 +:10884000E6CCFFF80A9BEC0C000CF01F0008CEC130 +:10885000485B089C060B310A2F2BF01F00050E9C6D +:10886000E3CD80FE000089EC8000917C800091DCEB +:10887000EBCD40E018951697300C18960E9A0A9B8F +:108880002F07F01F0005C0452FF62FFCCF8B0C9C47 +:10889000E3CD80E0800187E0D401306AFACCFFFCB0 +:1088A000FACBFFF4F01F00025F0CD8028000917C2D +:1088B000EBCD4068205D3FF8FACAFFDC15D9FB68B4 +:1088C0000013FB68000EFB68000FFB680010FB68DC +:1088D0000011FB680012FAC6FFF8ACD974088D08C5 +:1088E00015C9FAC3FFFEACC93065FACBFFF20A9A8C +:1088F000069CF01F00060A9A069B0C9CF01F0004C1 +:108900005F0C2FBDE3CD80688002E7368000917C4C +:10891000D401FACBFFFCF73900241788F0091800BE +:10892000C020D80AF73A00251798F4081800CFA1FC +:10893000F6CCFFFE2DABF01F00035F0CD802000049 +:108940008000917CEBCD4040211D303CF01F001E8B +:10895000322A1896FACBFFB4FA0A000CF01F001B5B +:10896000ECC6FF78ECE80000FAE90000ECEA000849 +:10897000FAEB0008ECE80010FAE90010ECEA001845 +:10898000FAEB0018ED380020FB680020ED390021DB +:10899000FB690021FB3A00221B88F4081800C05034 +:1089A000300C2EFDE3CD80401B9AFB380023F408E9 +:1089B0001800CF71FACBFFFEFACCFFDCF01F0004E9 +:1089C0005F0CCF0B8001EF6C8002E7368000917C5A +:1089D000EBCD40E0203D4B571896EF3900943FF81F +:1089E000F0091800C3507938707C2F4CF8E800006B +:1089F000209DFAE90000F8EA0008FAEB0008F8E820 +:108A00000010FAE90010F8EA0018FAEB0018F9383B +:108A10000020FB680020F9390021FB690021F01FCC +:108A200000242F7D580CC0412FDDE3CD80E0202DA8 +:108A3000EEC7FF4A306A0E9B1A9CF01F001EF01F03 +:108A4000001E2FED580CC1C02FDDE3CF90E0F8CB16 +:108A5000FFE2306A1A9CF01F0017EECBFF4AFAC6FD +:108A6000FFFA306A0C9CF01F00130C9B1A9C306AB2 +:108A70001A95F01F00125F0C2FDDE3CD80E0ECCBE8 +:108A8000FFE2FAC5FFFA306A0A9CF01F000A0E9B4B +:108A9000306A1A9CF01F00071A9B0A9C306A1A96CB +:108AA000F01F00065F0CCC1B0000026080018944AF +:108AB0008002E736800188B08000917CD401201DBF +:108AC000500C580CC0401A9CF01F00022FFDD80219 +:108AD0008001D3A8D401201D500C580CC0401A9C12 +:108AE000F01F00022FFDD8028001D3A8EBCD40C0BB +:108AF000E06B00E41896300CF01F000A1897C0E0F5 +:108B0000E06A00E40C9BF01F0008ECC9FFF8EECA15 +:108B1000FFF8486B0E9CF01F00060E9CE3CD80C052 +:108B20008001D8DC800091DC8001D3EC8001ACA80E +:108B3000EBCD40C0E06B00EC1896300CF01F000A43 +:108B40001897C0E0E06A00EC0C9BF01F0008ECC92D +:108B5000FFF0EECAFFF0486B0E9CF01F00060E9C63 +:108B6000E3CD80C08001D8DC800091DC8001D3ECB3 +:108B70008001ACA8EBCD40FE129210914A88F0F92A +:108B800000F818933DD8733C316916977874AE8815 +:108B9000AE9930083509AEA8AEB93F283019301665 +:108BA00014954A0B303AAEC8AED9AE36EECCFFF8CB +:108BB000F01F001D069CEF65000BAE76AE66308B95 +:108BC000F01F001A8F5CC290303A496BF01F0016FC +:108BD0006E58B0B28EE86E5C303AF808002C491B33 +:108BE000F01F00116E598EE8F2080028B0B1E919A3 +:108BF00000B0E91800B21208E93900A5A3682F08EF +:108C00001039C030E3CF90FE0F9830092FE8EF59AC +:108C10000010AE98E3CF90FEE3CD80FE000087F415 +:108C200080017B1C800091DC8001D3ECD431201DBD +:108C3000314E1697330BAE9EAE8B1090FACBFFD809 +:108C40007618500818921493129176055805E08A08 +:108C50000006EA0815042EA8AE983016303AAE1673 +:108C600049E4EECCFFFCE8CBFFFCF01F001D049CA8 +:108C7000AEF3AE56AE46AE75EA0B15042F8BF01F61 +:108C800000198F4CC280303AE8CBFFFCF01F001473 +:108C90006E48B0B18EC86E4CE8CBFFFCF808002CD3 +:108CA000303AF01F000F6E498EC8F2080028B0B0AD +:108CB0003289AE695805E08A000D6E488EC98EDC97 +:108CC000EA0A1504120C400BF00C002CF01F0004F3 +:108CD0002FFDDA3A2FFDD83280017B1C800091DC19 +:108CE0008001D3ECEBCD40E0201D500B1897580CC1 +:108CF000C070169A4C4C0E9BF01F0044C6404C4668 +:108D000030080DA9F0091800C050301C2FFDE3CD2C +:108D100080E0ECCCFFE4F01F003FCF815807C2F0A9 +:108D2000301CF01F003DC3304B751A9B4B6CF01F7D +:108D3000003B1897C320F01F003A3018ED4C00CCD0 +:108D4000ACA80E9C3005400BED5500D04B07F01F32 +:108D500000351896581CC3F1EECCFFE4F01F00322A +:108D60004B28F1090142EA091900CD006E98EDB8CF +:108D7000000ECCC0F01F002E0C9CCC9B4A25EAF9BB +:108D80000320EAF803241039CCC1CD0BECCCFFE46E +:108D9000F01F0025301CCBBBECF801245818C04054 +:108DA000301CF01F0024ECCCFFE4F01F001FEAF998 +:108DB0000324EAF803201238CA90301CF01F001672 +:108DC000301CCA5B492AF50B00D2F80B1900C0A071 +:108DD0003FBCC9DBEECCFFE4AEA5F01F00133FBCE7 +:108DE000C96B3018F55800D24909F3080142F6085A +:108DF0001900CEF07498EDB8000ECEB0F01F000C44 +:108E00003FBCC85B000084CC80017B30000087F44D +:108E1000800145DC80019F3080017B7A800145C460 +:108E200080014664800145EC000002608001FBFC8B +:108E30008001A128EBCD40C01897F01F0015C1B0EC +:108E40006E4849468D186E598D2930096E2C8F2930 +:108E50006E486E3BE2180080F9B80001EDF80E0292 +:108E6000F01F000D1897581CC0803008300CACA8BB +:108E7000E3CD80C0E3CF90C0F01F00083008ED4C78 +:108E800000CCED5800D00E9CE3CD80C08001C6A080 +:108E9000000087F480014664800145C4EBCD40802A +:108EA000491A18977498EDB80001C111F4F801241B +:108EB0005818C0A07848951878599529F01F000BCC +:108EC000C091E3CD8080109CE3CD80803FBCE3CD9A +:108ED000808030086E2C6E3B8F28F01F0005E3CD9C +:108EE00080800000000087F48001C6A080018CE42F +:108EF000106104000000000040200700FFFFFFFF9A +:108F0000000000004869F2F802045828C0205EFE04 +:108F1000580CCFE0F2C8FFF099085EFF000077AC74 +:108F20005EFDD7034828912C913B5EFF000077AC93 +:108F300048384849910C930B5EFC000000007540D6 +:108F4000000074B45EFCD703D431202D500C3008DF +:108F5000FAC1FFF81690109402D84A424A43E269D7 +:108F60005A4C089A0819029B009C40085D181895F5 +:108F70005804C0B1584CF80A1780F9BA0B0449DB01 +:108F8000401CF01F001DC2E140165805C1000A97A1 +:108F90005907EE0A1780F9BA0B100C9B1417140628 +:108FA00064085C7A660C5D185807CF310A04E24405 +:108FB0005A4BFE98FFD65875E088000D4018EACC51 +:108FC000000848CBF00C000C2F8B308AF01F000AF1 +:108FD000C0913009009C129A129B40085D182FED39 +:108FE000DA3A30DC2FEDD83200007540000074B45E +:108FF00080018EF08000917CEBCD40FC49F8189404 +:10900000F0C3FDDCF0C7FFBC3072C0B8321A089B59 +:109010000A9CF01F001B1896C1D02C470637C16070 +:10902000EEC5002C5804CF316E08109C5808CF6054 +:10903000F01F00148F04EF44FFF86E185808CEE1BB +:109040008F248F322C470637CEC15804C0D0E3CFCF +:10905000C0FC6ABC580CC080F01F000A8B968BB60F +:109060006AC85808C030E3CF90FC8BD8301C3078E9 +:109070008BE8E3CD80FC0000000077AC8000917CA1 +:10908000800091E8EBCD40FE109114961895169251 +:109090001293F4C80008E0480037E08B00185859D4 +:1090A000C18049D8F0C4FE08F0C7FFE86EB8580880 +:1090B000C1300E9C321A0A9BF01F0018C1D02C47F9 +:1090C0000837CF51307CE3CD80FE30ACE3CD80FE5D +:1090D000129CE3CD80FEECCBFFFF049CF01F001040 +:1090E0000A9B8FBC8F968FD18FE30E9C321AF01F94 +:1090F000000DE3CF90FE6EBCF01F000B049CECCB88 +:10910000FFFFF01F00078FE38FBC8F968FD1E3CF57 +:1091100090FE0000000077AC8000917C8000918878 +:10912000800091DC800091E8D401487BF6F80204CD +:109130005828C020DC0AF6CBFE04306AF01F00037A +:10914000DA0A0000000077AC800091DCEBCD40FE35 +:10915000209D580B5F09580A5F08169314941069F4 +:10916000C341580BC4514A9264585808C2E03005B4 +:10917000FAC1FFFD0A970A9CC0D8ED3A0020FB38DF +:109180000023F4081800C2E00E9C64580E38E088F2 +:10919000001E64482FF7F00C03265803CEF1306A06 +:1091A000089B5804C0A0202D1A9CF01F0019F01F26 +:1091B00000192FED580CC0E05805C0506AC96CC8A2 +:1091C0001238CE350C95CE1B30050A9C2F7DE3CD91 +:1091D00080FE306A089BECCCFFDFF01F000FCD5102 +:1091E000CECB029B0C9CF01F000CCCF1CD9B189BAE +:1091F000069AFACCFFFDF01F0009FB6300234832FA +:1092000064585808CB51CE1B000077AC8002E7367B +:10921000800188B08000917C800091DCEBCD4060C3 +:10922000306A202D169618951A9CF01F0009F01F21 +:1092300000090C9A5F0B0A9CF01F00072FED581CC9 +:10924000F9BC0001F9BC01FFE3CD80608002E73684 +:10925000800188B080016480D4015C6CF01F000440 +:10926000581CF9BC0001F9BC01FFD8028001641C44 +:10927000EBCD406E202D1293189116921495300B61 +:10928000308A1A9CF01F0012306A069B1A96202D15 +:109290001A9CF01F0010F01F001030085F091AD848 +:1092A0000A9A1AD6049B1AD3029C1AD83038F01F97 +:1092B000000B2FAD5BFCC070581CF9BC01FF2FEDFB +:1092C000E3CD806E304C2FEDE3CD806E800091D0E9 +:1092D0008002E736800188B08001661CEBCD406ECD +:1092E00010911892169314951296F01F00113008E1 +:1092F0000C991AD80A9A1AD1069B049CF01F000DEB +:109300002FED583CE0890007582CC085306CE3CD28 +:10931000806E584CC070E3CFC06E5BECC050581CE0 +:10932000CFB1E3CF906E30BCE3CD806E8001A1DC85 +:109330008001F7D8EBCD4040201D10964978F0FE13 +:109340000204582EC0503FFC2FFDE3CD804030EE8C +:10935000FAC8FFFC10DE300E1A985C761ADE1AD6B8 +:10936000F01F000F2FEDFE5CFC17E0890010FE5C83 +:10937000FC16C114FE5CFB4FC070FE5CFBB4C0B0B9 +:10938000FE5CFAECCE11307CCE0B5BECC040581C7E +:10939000CDB1CDBB30BCCD9B000077AC8001F54496 +:1093A000D4014858F0F902045809C030F01F0003F6 +:1093B000D8020000000077AC80014480EBCD40E88B +:1093C0004D56189514971693E06A0218300B0C9CB2 +:1093D000F01F00524D288D05700C8D133005A36CC5 +:1093E000ED450204F01F004F8D4CC031E3CFC0E8C3 +:1093F0000A9CF01F004D581CCFA11AD5F1D7C00808 +:109400000A990A9A310B320CF01F00482FFD581CA4 +:10941000CEE1F01F0047581CCEA11AD50A980A9930 +:109420004C4A0A9B302CF01F00442FFD580CCDF005 +:1094300030670A981AD70A994BEA0A9B322CF01F18 +:10944000003E2FFD580CCD3030780A991AD84B9A2F +:109450000A980A9B323CF01F00382FFD580CCC7044 +:109460001AD50E9C0A980A994B2A0A9BF01F0032C3 +:109470002FFD580CCBC030270A981AD70A994ADA20 +:109480000A9B304CF01F002C2FFD580CCB001AD734 +:109490000A984A8A0A990A9B305CF01F00272FFD20 +:1094A000580CCA50301C0A981ADC0A994A1A0A9BAE +:1094B000F01F00212FFD580CC9A030390A981AD985 +:1094C00049CA0A990A9B31CCF01F001B2FFD580C8A +:1094D000C8E0F01F001A581CC8A1F01F0019581C42 +:1094E000FE91FF860A980C9730490C9A495B0A9CBA +:1094F000F01F0015FE90FF7C189A308B493CF01F3E +:109500000014581CFE91FF74ED4C0204EF45020C50 +:10951000E3CD80E8000077AC800091D000000258D5 +:1095200080009200800200AC8002067C8001FFB4C3 +:109530008001984C80016E788001FD8C8001A00034 +:109540008001955080016AF48003B8048001762878 +:10955000EBCD40E078185B98C031E3CFC0E078569F +:109560005866CFC1783B0C9A4985EAC7FE040E9C29 +:10957000F01F0017303A497B0E9CF01F0017C131D5 +:10958000F01F00163026EB460204F01F00150C9C5D +:10959000F01F00146A195809C14048C8700C5D19C1 +:1095A000E3CF80E037A83C49EB6801FC30E80C9B36 +:1095B0000E9CEB6901FDEB6801FEF01F000BCE1B5A +:1095C000129CE3CD80E00000000077AC800091DCCD +:1095D0008003B80C8000917C8001FD8080020290A5 +:1095E0008002023480017984EBCD40FC7875580B01 +:1095F000F9B80100F7F81A001693EB3900C83FF8E4 +:10960000F0091800C250EB0900D03008F009190029 +:10961000C4D0307430073022EE061502EAF800D8C4 +:109620000C082FF711BC089BF01F0027E08A0009E7 +:10963000EAF800D80C0811B45803E7F21A00EB1846 +:1096400000D00E38FE99FFEA089CE3CD80FCEB3891 +:1096500000A4F2081800C250EB0900B03008F0096D +:109660001900C240307430073012EE061502EAF8D5 +:1096700000B80C082FF711BC089BF01F0013E08AFC +:109680000009EAF800B80C0811B45803E7F21A0010 +:10969000EB1800B00E38FE99FFEA089CE3CD80FC81 +:1096A000787992D8EDB80004C040307CE3CD80FCDE +:1096B000307B305CF01F0004FE9AFFF9305CE3CD94 +:1096C00080FC000080017E60D431201D4D876E58E3 +:1096D0005808C0E030060C996E48F009032CF01FC2 +:1096E00000552FF66E580C990C38FE9BFFF730068C +:1096F0001A9B8F560C9CF01F00501A94400C580C6B +:10970000C0312FFDD832A36CF01F004C1890CFA0B1 +:10971000400A0C9BA36AF01F004A40085808E08AE0 +:1097200000260C950096C0782FF52FC640080A3801 +:10973000E08A001D350CF01F00418D0CCF614009FF +:109740005809E08A000F009530062FF66A0C580C75 +:10975000C040F01F003840092FC50C39FE99FFF7B3 +:10976000009CF01F00342FFDD8321A9B009CF01F84 +:1097700000324B4972084009F0090D488F585808CB +:10978000CE00300408930891A363E003000264084C +:109790006E467135344CF01F0029F9410040060631 +:1097A0008D0C6A796E48F2CBFFF2F0030306F33AB0 +:1097B000000D0C9CF01F00246A78F139000D306A0E +:1097C000ED690020ECCCFFDF640B2E2BF01F001E98 +:1097D000029B0A9CF01F001DED6C00386A498DC980 +:1097E0006A585808F9B805008DD86A79F338005ED0 +:1097F000ED6800276A7992C88DA80BF9ED59002C05 +:1098000030290BEAF20A1800E2081710F9B8000133 +:109810008DF830286E49F20309062FF4F00A18007B +:1098200008936E580838FE9BFFB1C8AB000077ACB8 +:10983000800091E88002105880009200800091D052 +:1098400000000258800091DC800195E8EBCD40C01B +:10985000201D1696582BC680E0880013586BC590C3 +:10986000587BC2D0583BC4804C076E295809C05061 +:109870004BE80C9C703B5D192FFDE3CD80C0580B6D +:10988000C0F14BA7EEF902085819C6C0EEF8020C59 +:109890003019A1D8EF690210EF48020CCE7B581B9B +:1098A000CE414B273008EEF9020C4B1AA3A9EF6802 +:1098B0000210A1D9B488EF49020CCD8B4ACA3008F6 +:1098C0001589F0091800C4C14A87EEF8020CEDB8FA +:1098D0000001CD31EF380210F2081800CCE1F01F82 +:1098E0000025F01F0025EEF8020C3016E018FFF9F5 +:1098F000EF48020CCBBBF01F002049C7EEF9020C69 +:10990000EDB90004CBA11298A5C8EF48020CCAEB30 +:1099100049673019EEF8020CEF690210A1D8300641 +:10992000EF48020CCA3B4917EEF8020CA3C81A9C78 +:10993000EF48020CF01F001140085828C050F01FDB +:10994000000DF01F000D300A4898B08AEF39021060 +:10995000F4091800C9204858F16A0210C87BB4887D +:10996000C8CB4838B089C89B000077AC000079C4E8 +:1099700080021298800196C8800177A4D401201D2E +:1099800048F9F2F802045828C0302FFDD80AF339FC +:1099900002103008F0091800C0711A9CF01F00096D +:1099A00040085828CF31F01F0008CF00F8CAFFE266 +:1099B000300B169CF01F00052FFDD802000077AC7D +:1099C000800177A4800210FC8001914CEBCD408097 +:1099D000201D4967EEF802045828C0503FFC2FFDB7 +:1099E000E3CD8080F01F0012C051302C2FFDE3CD5D +:1099F0008080EEF9020CEDB90002CF10EDB9000144 +:109A0000C031309CCEDB1A9CF01F000A4008580879 +:109A1000CED0F01F0009581CCE21EEF8020CA3A8EE +:109A2000EF48020CCDDB0000000077AC800210FC98 +:109A3000800211088001F370EBCD40C020AD189872 +:109A40001697580BC07076DC581CC0402F6DE3CDC4 +:109A500080C0109BF13A0020FAC6FFFE0C9CF01F5C +:109A6000001B0C9B209D322A1A9CF01F0019F01F2E +:109A700000192F7D580CCEB0793CFACBFFDCF01FDB +:109A8000001640985818C150C0923058F808180075 +:109A9000F9BC0003F9BC0102CDAB5828C030301C22 +:109AA000CD6B5807C0D06EC85808C0A0305CCCFB46 +:109AB0005807C0806EC85808C050304CCC8B307CE2 +:109AC000CC6B306CCC4B00008002113C8002E7363E +:109AD0008001F2BC800195E8D43120EDFEF3029CB8 +:109AE000FAC1FFA4E6F8020C18971694E2180006D3 +:109AF000C040309C2F2DD832F01F00A1C040308CC8 +:109B00002F2DD832E74C02085807C130BA8CF5D453 +:109B1000C008FAC6FFFEBA9A0E9B0C9CF01F009973 +:109B20000C9C1B9BF01F0098581CC0802F2DDC3A0A +:109B3000BA97BA87FAC6FFFECF4B029CF01F00937C +:109B40001892581CCF41029A089B0E9CF01F00905F +:109B50001890C580E6C7FFE8E6C6FE08EF3A002089 +:109B6000E1380020F4081800E08000A02C470C37F2 +:109B7000CF6130070E950E9B009CF01F0086E136EA +:109B800000381897CD40585CE08000C2E08B00B9E7 +:109B9000583CE08000B4584CC020300CF01F007ED0 +:109BA0003048F0061800E08000A83054E80618009D +:109BB000E08000983028F0061800E080009A300C11 +:109BC000F01F0076E8061800E080008F300CF01FD0 +:109BD00000745837E08B007960F85818C710301CB3 +:109BE000F01F0070300B4F0CF01F0070CA00F01F08 +:109BF0000070581CC9C1E6F8020CA1B8E748020C75 +:109C0000C7ABFAC5FFCE306A029B0A9CF01F005D0D +:109C1000FAC6FFDE0C9CF01F00673FF81AD00C9BC1 +:109C20001AD2310A1AD8204D1A9CF01F00630A9BE1 +:109C3000202D306A1A9CF01F00600499209DE6CC0C +:109C4000FDECFB380069FAEA0048FAE20050FB68D4 +:109C50000021FAEB0000FB380068FAEA0058FAE34A +:109C60000008FAE20060FAEB0010FAE30018FB6863 +:109C70000020303A0098129B4C03F01F00502EED4C +:109C80001895581CFE91FF54009BE6FC0214F01F2F +:109C9000004C5BBCC620580CC3E1189BE6FC0214C8 +:109CA000F01F00483FFCC27B0E9C009BF01F00464B +:109CB000FE91FF5E6EB55805EA071700C5DB302C34 +:109CC000F01F0038C90B5805FE90FF320A9AE13B9D +:109CD0000020009CF01F003D3018E7480208C7DB59 +:109CE000301CF01F002E301CF01F002DC73B302C05 +:109CF000F01F002AC6CB303CCFCB301CC50B586CB4 +:109D0000C080587CFE91FF4B308CC49B307CC47B60 +:109D1000305CC45B344CF01F002E089A18960E9BE2 +:109D2000F01F0018029B306AED640020ECCCFFDFCE +:109D3000F01F001400991AD60A984A6A009B31CC89 +:109D4000F01F00252FFD580CC0E0E6F8020C0A9C1D +:109D5000A1B8E748020CCCFA009BE6FC0214F01F05 +:109D60000019CC8A189BE6FC0214F01F00160C9C0C +:109D7000F01F001A3FFCCBFA000077AC800210FC09 +:109D8000800091DC800178BC800179788001914C61 +:109D900080019A3880015F60800163488001639C84 +:109DA00080017A1080018F208001FD408001F3A0A6 +:109DB000800177C08002E73680020BFC80020A70C7 +:109DC00080020B408000917C800214708000920021 +:109DD00080019E0080016E78800091E8D401202DE2 +:109DE000FACAFFF415D8BAD87409500915C8300B4F +:109DF000BAC8169CF01F00022FEDD80280019AD835 +:109E0000EBCD40E049F51697EAFC0214300BF01F49 +:109E1000001EF01F001EEEC6FFDFEF3B00200C9A75 +:109E20000E9CF01F001BC150EAF8020CA1D8202D97 +:109E30000C9BEB48020C306A1A9CEF360020F01F96 +:109E400000150C9B0E9CF01F00142FED581CC060D9 +:109E5000EAF8020CEDB80001C0600E9CF01F000F84 +:109E6000E3CD80E0301B300CF01F000D302B300CA8 +:109E7000F01F000B0E9CF01F0009E3CD80E00000F6 +:109E8000000077AC80020B40800196C88001914CA5 +:109E90008002E73680019AD8800091E88001984CD2 +:109EA000EBCD40E0202D18951697580CC0513FFC83 +:109EB0002FEDE3CD80E0580BCFB0E04B0020FE9BB0 +:109EC000FFF8FAC6FFFE306AE06B00FF0C9CF01F43 +:109ED0000008306A202D0C9B1A9CF01F00060E9B78 +:109EE0000A9CF01F00052FEDCE4B0000800091D0A2 +:109EF0008002E73680019AD8EBCD408048B7EEF873 +:109F000002045828C030E3CFC080F01F0009581C5D +:109F1000F9BC0109EFF80083F9B90010F1D9E03874 +:109F2000EFF80A83E3CD8080000077AC80020A84DA +:109F3000D40148B9F338000A104CF36C000A7218C7 +:109F40005808C0B05828C0803028726C9318301B55 +:109F500072595D19D80AD80ADA0A0000000079C8D7 +:109F60004828916B915C5EFC000079C8EBCD40C045 +:109F7000203D5CBBBA89502B109714965CC85C8856 +:109F80005807C0513FFC2FDDE3CD80C05C784959B4 +:109F90005018B28C3048FAC9FFF8300A306B492C9F +:109FA000F01F0012581CCEF11B89491A1898B48969 +:109FB000306B1A99300A48FCF01F000C581CCE3147 +:109FC00048D8300AB007306B304848CCFA0800094E +:109FD000F01F0006581CCD7148989146CD5B0000DB +:109FE00000007A288003B8108001776C0000025CC2 +:109FF0008003B8180000025E8003B820000079C812 +:10A00000EBCD40C030074A161AD78D078D17ED6784 +:10A010000008ED670009ED67000A8D378D470E983F +:10A020000E9949BA0E9B302CF01F001A2FFD580CC8 +:10A03000C0413FFCE3CD80C01AD70E980E99496A03 +:10A040000E9B304CF01F00132FFD580CCF301AD749 +:10A050000E980E99491A0E9B32ECF01F000E2FFD40 +:10A06000580CCE8031483019E06A138830AB0E9C12 +:10A07000F01F000B581CCDE10E9BECCCFFF4F01F41 +:10A080000009581CCD71CD7B000079C88001A0F07B +:10A0900080016E788001A1A08001A0A480019F6C46 +:10A0A000800144F8D401F01F000E48EA74085838C3 +:10A0B000C12030289508F539000A3008F009180049 +:10A0C000C020D8023018300B9518487C487AF01F11 +:10A0D0000008D80230089508D80200008001DA365E +:10A0E000000079C88001DA5880018E348001EF20A9 +:10A0F000EBCD408048973018EF6800086E4958094A +:10A10000C0A0308CF01F00066E4C3009485A6E3BE0 +:10A11000F01F0005E3CD8080000079C880019F30EA +:10A120008001A1CC80014558D4014989F80C11FF68 +:10A13000F338000A106CF36C000AC1E1F33800092F +:10A14000F8081800C19072185808C161F338000867 +:10A15000F8081800C06072085808C0F05818C0C04D +:10A160003018300B931848AA48ACF01F000B300B86 +:10A17000331CF01F000AD802301B485A930B488C3E +:10A18000F01F0005D8020000000079C880018E345D +:10A190008001DA588001EF2080016D6C8001DA8443 +:10A1A000EBCD404048766C3CF01F0007308CF01F30 +:10A1B000000730083009ED6800088D09E3CD8040C4 +:10A1C000000079C8800145308001A128D401308C7D +:10A1D000F01F0002D80A00008001A128EBCD4080CA +:10A1E00048E76E185828C030E3CD80806E58300B99 +:10A1F0006E6C5D18300B8F1B4899F2FA0324F2F84D +:10A2000003201438C040169CF01F0006300B332C7E +:10A21000F01F0005E3CD8080000079C8000084CCE9 +:10A2200080018CE480016D6CEBCD40C018971696D0 +:10A23000F01F0009C0C06E0C581CC0700C9B0E9C17 +:10A24000F01F0006CF91302CE3CD80C03FDCE3CD82 +:10A2500080C000008001462C80014636EBCD404096 +:10A26000301818969908F01F00040C9CF01F00038A +:10A27000E3CD80408001463280014634D401580C41 +:10A28000C030F01F0002D80280014630D4013008EF +:10A290009908F01F0002D8028001462ED401189EB2 +:10A2A000580AC0C196199688F9D9C010103CC165EA +:10A2B000F2C8FFFF973AB618D802581AC06096192C +:10A2C000F2C8FFFFB618D802969996881039C0F4E4 +:10A2D0007648F0090709B889CF3B1D897648F00C0C +:10A2E0000B099619F2C8FFFFB618D8023008973844 +:10A2F000B8889619F2C8FFFFB618D802EBCD408097 +:10A300001897580AC1D1961C9689FDDCC010FCC86C +:10A31000FFFF1238F7FA4A03F7F85004F1DEE508B8 +:10A32000EFF95801F1F95E00EFFA5800F1FA5E0119 +:10A33000F7FC5201F8C8FFFEB618E3CD8080581A2A +:10A34000C070961CF8C8FFFEB618E3CD8080969AC0 +:10A350009689F4C8FFFF1238C09476481408119902 +:10A36000B889118AB89A961CCEEB30089738B8088D +:10A37000961CF8C8FFFEB618E3CD8080EBCD408078 +:10A38000189E169C580AC0F1961B9889EFDBC010E6 +:10A39000EEC8FFFD1238C205F6C8FFFC993AB8189E +:10A3A000E3CD8080581AC070981BF6C8FFFCB8181F +:10A3B000E3CD8080969B9889F6C8FFFD1238C1C412 +:10A3C000784A160A15B8BC8815A9BC991598BCA876 +:10A3D0001589BCB9CEAB1DB8784A0E0AB4881DA940 +:10A3E000B4991D98B4A81D89B4B9981BF6C8FFFC90 +:10A3F000B818E3CD8080300899389D08981BF6C8BE +:10A40000FFFCB818E3CD8080EBCD4068189316951B +:10A410001496F01F000C0C9A0A9BE6CCFFFFF01F6D +:10A4200000090C9A0A9BE6CCFFFEF01F00060C9A6E +:10A430000A9BE6CCFFFDF01F0003E3CD806800001F +:10A440008001A29CD4211697189596141496F01F9B +:10A4500000080C9A0E9BEACCFFFEF01F00060BC80A +:10A460005808F1D4E108EFF81C01D8228001A2FCC1 +:10A470008001A408EBCD4068189316951496F01F40 +:10A4800000060C9A0A9BE6CCFFFCF01F0003E3CD0C +:10A49000806800008001A37CEBCD4068189316957E +:10A4A0001496F01F00090C9A0A9BE6CCFFFCF01FE3 +:10A4B00000070C9A0A9BE6CCFFFAF01F0004E3CDDC +:10A4C000806800008001A37C8001A2FCEBCD406885 +:10A4D000189316951496F01F000F0C9A0A9BE6CC61 +:10A4E000FFFCF01F000D0C9A0A9BE6CCFFFBF01F4F +:10A4F000000A0C9A0A9BE6CCFFFAF01F00070C9AA0 +:10A500000A9BE6CCFFF9F01F0004E3CD8068000051 +:10A510008001A37C8001A29CEBCD40681893169526 +:10A520001496F01F000C0C9A0A9BE6CCFFFCF01F5F +:10A53000000A0C9A0A9BE6CCFFFAF01F00080C9A5E +:10A540000A9BE6CCFFF9F01F0005E3CD8068000010 +:10A550008001A37C8001A2FC8001A29CEBCD40681D +:10A56000189316951496F01F00150C9A0A9BE6CCCA +:10A57000FFFCF01F00120C9A0A9BE6CCFFF8F01FBC +:10A5800000100C9A0A9BE6CCFFF6F01F000D0C9A07 +:10A590000A9BE6CCFFF4F01F00090C9A0A9BE6CC5C +:10A5A000FFF0F01F00070C9A0A9BE6CCFFEEF01FAD +:10A5B0000004E3CD806800008001A37C8001A2FC40 +:10A5C000EBCD4068189316951496F01F00090C9A6D +:10A5D0000A9BE6CCFFFCF01F00060C9A0A9BE6CC17 +:10A5E000FFF8F01F0003E3CD806800008001A37C2A +:10A5F000EBCD4068189316951496F01F00060C9A40 +:10A600000A9BE6CCFFFCF01F0003E3CD806800004E +:10A610008001A37CEBCD4068189316951496F01F2B +:10A62000000C0C9A0A9BE6CCFFFCF01F00090C9A68 +:10A630000A9BE6CCFFF8F01F00060C9A0A9BE6CCBA +:10A64000FFF4F01F0003E3CD806800008001A37CCD +:10A65000EBCD4068189316951496F01F00330C9AB2 +:10A660000A9BE6CCFFFCF01F00300C9A0A9BE6CC5C +:10A67000FFF8F01F002D0C9A0A9BE6CCFFF4F01FA8 +:10A68000002B0C9A0A9BE6CCFFF2F01F00280C9AD4 +:10A690000A9BE6CCFFF0F01F00250C9A0A9BE6CC43 +:10A6A000FFEEF01F00220C9A0A9BE6CCFFECF01F95 +:10A6B000001F0C9A0A9BE6CCFFEAF01F001C0C9AC4 +:10A6C0000A9BE6CCFFE8F01F00190C9A0A9BE6CC27 +:10A6D000FFE6F01F00160C9A0A9BE6CCFFE4F01F81 +:10A6E00000130C9A0A9BE6CCFFE2F01F00110C9AB3 +:10A6F0000A9BE6CCFFE1F01F000E0C9A0A9BE6CC09 +:10A70000FFE0F01F00090C9A0A9BE6CCFFDCF01F6B +:10A7100000060C9A0A9BE6CCFFD8F01F0005E3CD9B +:10A72000806800008001A37C8001A2FC8001A29CC3 +:10A73000EBCD4068189316951496F01F00120C9AF2 +:10A740000A9BE6CCFFFCF01F00100C9A0A9BE6CC9B +:10A75000FFFBF01F000D0C9A0A9BE6CCFFFAF01FDE +:10A76000000A0C9A0A9BE6CCFFF9F01F00070C9A2E +:10A770000A9BE6CCFFF8F01F0004E3CD80680000E0 +:10A780008001A37C8001A29CEBCD406818931695B4 +:10A790001496F01F00060C9A0A9BE6CCFFFCF01FF3 +:10A7A0000003E3CD806800008001A37CEBCD40680E +:10A7B000189316951496F01F00060C9A0A9BE6CC87 +:10A7C000FFFCF01F0003E3CD806800008001A37C44 +:10A7D000EBCD4068189316951496F01F00060C9A5E +:10A7E0000A9BE6CCFFFCF01F0003E3CD806800006D +:10A7F0008001A37CEBCD4068189316951496F01F4A +:10A8000000060C9A0A9BE6CCFFFCF01F0003E3CD88 +:10A81000806800008001A37CEBCD406818931695FA +:10A820001496F01F00060C9A0A9BE6CCFFFCF01F62 +:10A830000003E3CD806800008001A37CEBCD40687D +:10A84000189316951496F01F00060C9A0A9BE6CCF6 +:10A85000FFFCF01F0003E3CD806800008001A37CB3 +:10A86000EBCD4068189316951496F01F00060C9ACD +:10A870000A9BE6CCFFFCF01F0003E3CD80680000DC +:10A880008001A37CEBCD4068189316951496F01FB9 +:10A8900000060C9A0A9BE6CCFFFCF01F0003E3CDF8 +:10A8A000806800008001A37CEBCD4068189316956A +:10A8B0001496F01F00060C9A0A9BE6CCFFFCF01FD2 +:10A8C0000004E3CD806800008001A37C8001A650D5 +:10A8D000EBCD4068189316951496F01F00060C9A5D +:10A8E0000A9BE6CCFFFCF01F0003E3CD806800006C +:10A8F0008001A37CEBCD4068189316951496F01F49 +:10A9000000090C9A0A9BE6CCFFFCF01F00060C9A8B +:10A910000A9BE6CCFFF8F01F0003E3CD806800003F +:10A920008001A37CEBCD4068189316951496F01F18 +:10A9300000060C9A0A9BE6CCFFFCF01F0003E3CD57 +:10A94000806800008001A37CEBCD406818931695C9 +:10A950001496F01F00090C9A0A9BE6CCFFFCF01F2E +:10A9600000060C9A0A9BE6CCFFF8F01F0003E3CD2B +:10A97000806800008001A37CEBCD40681893169599 +:10A980001496F01F00090C9A0A9BE6CCFFFCF01FFE +:10A9900000060C9A0A9BE6CCFFF8F01F0003E3CDFB +:10A9A000806800008001A37CEBCD40681893169569 +:10A9B0001496F01F00060C9A0A9BE6CCFFFCF01FD1 +:10A9C0000003E3CD806800008001A37CEBCD4068EC +:10A9D000189316951496F01F00090C9A0A9BE6CC62 +:10A9E000FFFCF01F00060C9A0A9BE6CCFFF8F01F54 +:10A9F0000003E3CD806800008001A37CEBCD4068BC +:10AA0000189316951496F01F00060C9A0A9BE6CC34 +:10AA1000FFFCF01F0003E3CD806800008001A37CF1 +:10AA2000EBCD4068189316951496F01F00090C9A08 +:10AA30000A9BE6CCFFFCF01F00060C9A0A9BE6CCB2 +:10AA4000FFF8F01F0003E3CD806800008001A37CC5 +:10AA5000EBCD4068189316951496F01F00090C9AD8 +:10AA60000A9BE6CCFFFCF01F00060C9A0A9BE6CC82 +:10AA7000FFF8F01F0003E3CD806800008001A37C95 +:10AA8000EBCD4068189316951496F01F00060C9AAB +:10AA90000A9BE6CCFFFCF01F0003E3CD80680000BA +:10AAA0008001A37CEBCD4068189316951496F01F97 +:10AAB00000060C9A0A9BE6CCFFFCF01F0003E3CDD6 +:10AAC000806800008001A37CEBCD40681893169548 +:10AAD0001496F01F00060C9A0A9BE6CCFFFCF01FB0 +:10AAE0000003E3CD806800008001A37CEBCD4068CB +:10AAF000189316951496F01F00060C9A0A9BE6CC44 +:10AB0000FFFCF01F0004E3CD806800008001A37CFF +:10AB10008001A29CEBCD4068189316951496F01F07 +:10AB200000060C9A0A9BE6CCFFFCF01F0004E3CD64 +:10AB3000806800008001A37C8001D434EBCD4068A4 +:10AB4000189316951496F01F00330C9A0A9BE6CCC6 +:10AB5000FFDEF01F00310C9A0A9BE6CCFFD4F01FF9 +:10AB6000002F0C9A0A9BE6CCFFC2F01F002D0C9A16 +:10AB70000A9BE6CCFFBFF01F002B0C9A0A9BE6CC89 +:10AB8000FFBCF01F00290C9A0A9BE6CCFFB0F01F17 +:10AB900000270C9A0A9BE6CCFFACF01F00250C9A0C +:10ABA0000A9BE6CCFFA4F01F00230C9A0A9BE6CC7C +:10ABB000FF9CF01F00210C9A0A9BE6CCFF98F01F27 +:10ABC000001F0C9A0A9BE6CCFF8CF01F001D0C9A0C +:10ABD0000A9BE6CCFF72F01F001B0C9A0A9BE6CC86 +:10ABE000FF68F01F00190C9A0A9BE6CCFF44F01F87 +:10ABF00000170C9A0A9BE6CCFF50F01F00150C9A28 +:10AC00000A9BE6CCFF30F01F0013E3CD8068000004 +:10AC10008001D3448001D2DC8001D2748001CAF863 +:10AC20008001C9D88001D8608001CA688001CA9CAF +:10AC30008001CA0C8001C9A48001D4348001CDB444 +:10AC40008001CE848001D5588001D6B08001D4E443 +:10AC50008001CFFCEBCD4068189316951496F01F39 +:10AC6000000F0C9A0A9BE6CCFFFCF01F000D0C9A1B +:10AC70000A9BE6CCFFFAF01F000B0C9A0A9BE6CC6D +:10AC8000FFF9F01F00080C9A0A9BE6CCFFF8F01FB2 +:10AC90000006E3CD806800008001A37C8001A2FC57 +:10ACA0008001A29C8001AB3CEBCD406C14951296C8 +:10ACB00018921693E06A00DC129B0A9CF01F001A9F +:10ACC000ECC9FF98EACAFF98069B049CF01F001786 +:10ACD000ECC9FFBCEACAFFBC069B049CF01F001431 +:10ACE000ECC9FF68EACAFF68069B049CF01F0011CC +:10ACF000ECC9FF50EACAFF50069B049CF01F000EEF +:10AD0000ECC9FF44EACAFF44069B049CF01F000BF9 +:10AD1000ECC9FF30EACAFF30069B049CF01F000814 +:10AD2000E3CD806C8002E7368001D1588001D24C9F +:10AD30008001D1E88001D1C08001D21C8001CF9C6C +:10AD4000EBCD40EC1296F2E80000F4E90000ECE8EC +:10AD50000008F4E90008ECE20010F4E30010ECE86D +:10AD6000001814971695F4E90018E06B00E85D15DB +:10AD70008F7CC0D030CA6C7BF01F00066E7A6C7975 +:10AD8000149C0A9B2F492F4AF01F0003E3CD80EC4F +:10AD9000800091DC8001ACA8EBCD40C014971696E2 +:10ADA00074385808C160949E948AF60E00081438CE +:10ADB000F5DEE916F9B80900EFF89A03580CC090CF +:10ADC0005809C0C1189B0C9A6E4C1C0CF01F000A4D +:10ADD0008E180C08AE18E3CD80C05819CFA16E4B69 +:10ADE0000C9A1C0BF01F00048E180C08AE18E3CD53 +:10ADF00080C00000800091DCEBCD40E016971496F7 +:10AE00001895581AC0B0F01F000C0C99189B0E9A98 +:10AE10000A9CF01F000AE3CD80E09698968614996C +:10AE20001016169A0C9BF01F00053008EA060B0856 +:10AE3000E3CD80E0800091B88001AD98EBCD406813 +:10AE4000189316951496F01F00060C9A0A9BE6CCF0 +:10AE5000FFFCF01F0004E3CD806800008001A37CAC +:10AE60008001ADF8EBCD4068189316951496F01F4D +:10AE700000060C9A0A9BE6CCFFFCF01F0004E3CD11 +:10AE8000806800008001A37C8001ADF8EBCD4068B4 +:10AE9000189316951496F01F000F0C9A0A9BE6CC97 +:10AEA000FFFCF01F000C0C9A0A9BE6CCFFF8F01F89 +:10AEB00000090C9A0A9BE6CCFFF4F01F00060C99DF +:10AEC0000A9AE6CCFFF0320BF01F0003E3CD806856 +:10AED0008001A37C8001AD98EBCD40681893169556 +:10AEE0001496F01F000C0C9A0A9BE6CCFFFCF01F96 +:10AEF00000090C9A0A9BE6CCFFF8F01F00060C999B +:10AF00000A9AE6CCFFF4320BF01F0003E3CD806811 +:10AF10008001A37C8001AD98EBCD40681893169515 +:10AF20001496F01F000C0C9A0A9BE6CCFFFCF01F55 +:10AF300000090C9A0A9BE6CCFFF8F01F00070C9959 +:10AF40000A9AE6CCFFF7303BF01F0004E3CD80689F +:10AF50008001A37C8001A29C8001AD98EBCD40686C +:10AF6000189316951496F01F00180C9A0A9BE6CCBD +:10AF7000FFFCF01F00150C9A0A9BE6CCFFF8F01FAF +:10AF800000120C9A0A9BE6CCFFF4F01F000F0C9AFB +:10AF90000A9BE6CCFFF0F01F000C0C9A0A9BE6CC53 +:10AFA000FFECF01F000A0C9A0A9BE6CCFFEAF01FA8 +:10AFB00000080C990A9AE6CCFFE9303BF01F000527 +:10AFC000E3CD80688001A37C8001A2FC8001A29C6B +:10AFD0008001AD98EBCD4068189316951496F01F3C +:10AFE00000280C9A0A9BE6CCFFFCF01F00250C9A67 +:10AFF0000A9BE6CCFFF8F01F00220C9A0A9BE6CCD5 +:10B00000FFF4F01F00200C9A0A9BE6CCFFF2F01F21 +:10B01000001E0C9A0A9BE6CCFFF1F01F001B0C9A55 +:10B020000A9BE6CCFFF0F01F00180C9A0A9BE6CCB6 +:10B03000FFEFF01F00150C9A0A9BE6CCFFEEF01F05 +:10B0400000120C990A9AE6CCFFED306BF01F000F4E +:10B050000C9A0A9BE6CCFFE7F01F000B0C9A0A9BA8 +:10B06000E6CCFFE6F01F00080C990A9AE6CCFFE553 +:10B07000320BF01F0006E3CD806800008001A37C46 +:10B080008001A2FC8001A29C8001AD98EBCD4068BC +:10B09000189316951496F01F00150C9A0A9BE6CC8F +:10B0A000FFFCF01F00120C9A0A9BE6CCFFF8F01F81 +:10B0B000000F0C9A0A9BE6CCFFF4F01F000C0C9AD0 +:10B0C0000A9BE6CCFFF0F01F000A0C9A0A9BE6CC24 +:10B0D000FFEEF01F00080C990A9AE6CCFFED303B1A +:10B0E000F01F0005E3CD80688001A37C8001A2FCF5 +:10B0F0008001A29C8001AD98EBCD40681893169515 +:10B100001496F01F00120C9A0A9BE6CCFFFCF01F6D +:10B1100000100C9A0A9BE6CCFFFBF01F000D0C9967 +:10B120000A9AE6CCFFFA302BF01F000A0C9A0A9B11 +:10B13000E6CCFFF8F01F00050C9A0A9BE6CCFFF462 +:10B14000F01F0002E3CD80688001A37C8001A29CF7 +:10B150008001AD98EBCD4068189316951496F01FBA +:10B1600000120C9A0A9BE6CCFFFCF01F00100C9A10 +:10B170000A9BE6CCFFFBF01F000D0C990A9AE6CC67 +:10B18000FFFA302BF01F000A0C9A0A9BE6CCFFF85E +:10B19000F01F00050C9A0A9BE6CCFFF4F01F00029A +:10B1A000E3CD80688001A37C8001A29C8001AD98E2 +:10B1B000EBCD4068189316951496F01F000C0C9A6E +:10B1C0000A9BE6CCFFFCF01F000A0C9A0A9BE6CC17 +:10B1D000FFFBF01F00070C990A9AE6CCFFFA302B10 +:10B1E000F01F0004E3CD80688001A37C8001A29C55 +:10B1F0008001AD98EBCD4068189316951496F01F1A +:10B2000000090C9A0A9BE6CCFFFCF01F00070C9982 +:10B210000A9AE6CCFFFB303BF01F0004E3CD8068C8 +:10B220008001A37C8001A29C8001AD98EBCD406899 +:10B23000189316951496F01F00090C9A0A9BE6CCF9 +:10B24000FFFCF01F00070C990A9AE6CCFFFB303B8D +:10B25000F01F0004E3CD80688001A37C8001A29CE4 +:10B260008001AD98EBCD4068189316951496F01FA9 +:10B2700000090C9A0A9BE6CCFFFCF01F00070C9912 +:10B280000A9AE6CCFFFB303BF01F0004E3CD806858 +:10B290008001A37C8001A29C8001AD98EBCD406829 +:10B2A000189316951496F01F000C0C9A0A9BE6CC86 +:10B2B000FFFCF01F00090C9A0A9BE6CCFFF8F01F78 +:10B2C00000070C990A9AE6CCFFF7303BF01F000408 +:10B2D000E3CD80688001A37C8001A29C8001AD98B1 +:10B2E000EBCD4068189316951496F01F000C0C9A3D +:10B2F0000A9BE6CCFFFCF01F00090C9A0A9BE6CCE7 +:10B30000FFF8F01F00070C990A9AE6CCFFF7303BD4 +:10B31000F01F0004E3CD80688001A37C8001A29C23 +:10B320008001AD98EBCD4068189316951496F01FE8 +:10B33000000C0C9A0A9BE6CCFFFCF01F00090C9A4B +:10B340000A9BE6CCFFF8F01F00070C990A9AE6CC9E +:10B35000FFF7303BF01F0004E3CD80688001A37C41 +:10B360008001A29C8001AD98EBCD406818931695A2 +:10B370001496F01F000C0C9A0A9BE6CCFFFCF01F01 +:10B3800000090C9A0A9BE6CCFFF8F01F00070C9905 +:10B390000A9AE6CCFFF7303BF01F0004E3CD80684B +:10B3A0008001A37C8001A29C8001AD98EBCD406818 +:10B3B000189316951496F01F00090C9A0A9BE6CC78 +:10B3C000FFFCF01F00070C990A9AE6CCFFFB303B0C +:10B3D000F01F0004E3CD80688001A37C8001A29C63 +:10B3E0008001AD98EBCD4068169514961893F01F28 +:10B3F00000220C990A9AE6CCFFFC308BF01F001F4C +:10B400000C9A0A9BE6CCFFF4F01F001B0C9A0A9BD7 +:10B41000E6CCFFF0F01F00180C9A0A9BE6CCFFEC7C +:10B42000F01F00150C9A0A9BE6CCFFE8F01F0012F3 +:10B430000C9A0A9BE6CCFFE4F01F000F0C9A0A9BC3 +:10B44000E6CCFFE0F01F000E0C9A0A9BE6CCFFDE74 +:10B45000F01F000B0C9A0A9BE6CCFFDCF01F0008E3 +:10B460000C990A9AE6CCFFDA302BF01F0004E3CDEA +:10B47000806800008001A37C8001AD988001A2FC5F +:10B48000EBCD4068189316951496F01F00090C9A9E +:10B490000A9BE6CCFFFCF01F00070C990A9AE6CC49 +:10B4A000FFFB303BF01F0004E3CD80688001A37CEC +:10B4B0008001A29C8001AD98EBCD40681695149652 +:10B4C0001893F01F00060C990A9AE6CCFFFC308B0B +:10B4D000F01F0003E3CD80688001A37C8001AD985C +:10B4E000EBCD4068189316951496F01F00090C9A3E +:10B4F0000A9BE6CCFFFCF01F00070C990A9AE6CCE9 +:10B50000FFFB303BF01F0004E3CD80688001A37C8B +:10B510008001A29C8001AD98EBCD406818931695F0 +:10B520001496F01F00100C9A0A9BE6CCFFFCF01F4B +:10B53000000E0C990A9AE6CCFFFB306BF01F000B53 +:10B540000A9AE6CCFFF50C99306BF01F00080C9AB4 +:10B550000A9BE6CCFFEFF01F0004E3CD80680000FB +:10B560008001A37C8001A29C8001AD98EBCD406856 +:10B57000169514961893F01F000C0C990A9AE6CCB5 +:10B58000FFFC306BF01F00090C9A0A9BE6CCFFF61B +:10B59000F01F00070C9A0A9BE6CCFFF5F01F000491 +:10B5A000E3CD80688001A37C8001AD988001A29CDE +:10B5B000EBCD4068169514961893F01F000D0C996A +:10B5C0000A9AE6CCFFFC306BF01F000A0A9AE6CC20 +:10B5D000FFF60C99302BF01F00070C9A0A9BE6CC63 +:10B5E000FFF4F01F0005E3CD806800008001A37C1C +:10B5F0008001AD988001AB3CEBCD40681695149668 +:10B600001893F01F000D0C990A9AE6CCFFFC306BE2 +:10B61000F01F000A0A9AE6CCFFF60C99302BF01FB7 +:10B6200000070C9A0A9BE6CCFFF4F01F0005E3CD5F +:10B63000806800008001A37C8001AD988001AB3C54 +:10B64000EBCD4068169514961893F01F00100C99D6 +:10B650000A9AE6CCFFFC306BF01F000D0C9A0A9B97 +:10B66000E6CCFFF6F01F000B0C9A0A9BE6CCFFF429 +:10B67000F01F00080C990A9AE6CCFFF2302BF01F5D +:10B680000004E3CD806800008001A37C8001AD98B8 +:10B690008001A2FCEBCD4068169514961893F01F1C +:10B6A000000A0C990A9AE6CCFFFC306BF01F0007E9 +:10B6B0000C990A9AE6CCFFF6302BF01F0004E3CD7C +:10B6C000806800008001A37C8001AD98EBCD4068CC +:10B6D000169514961893F01F000A0C990A9AE6CC56 +:10B6E000FFFC306BF01F00070C990A9AE6CCFFF6BE +:10B6F000302BF01F0004E3CD806800008001A37CA4 +:10B700008001AD98EBCD4068189316951496F01F04 +:10B7100000220C9A0A9BE6CCFFFCF01F00200C9A3A +:10B720000A9BE6CCFFFAF01F001D0C9A0A9BE6CCA0 +:10B73000FFF8F01F001A0C990A9AE6CCFFF6306B5E +:10B74000F01F00170C9A0A9BE6CCFFF0F01F0015C3 +:10B750000C9A0A9BE6CCFFEFF01F00120C990A9A94 +:10B76000E6CCFFEE302BF01F000E0C9A0A9BE6CCC5 +:10B77000FFECF01F00090C9A0A9BE6CCFFE8F01FD3 +:10B7800000060C9A0A9BE6CCFFE4F01F0007E3CD0D +:10B79000806800008001A37C8001A2FC8001AD983C +:10B7A0008001A29C8001AB3CEBCD406816951496BD +:10B7B0001893F01F000C0C990A9AE6CCFFFC306B32 +:10B7C000F01F00090C9A0A9BE6CCFFF6F01F000759 +:10B7D0000C9A0A9BE6CCFFF5F01F0004E3CD8068CD +:10B7E0008001A37C8001AD988001A29CEBCD4068D4 +:10B7F000169514961893F01F000C0C990A9AE6CC33 +:10B80000FFFC306BF01F00090C9A0A9BE6CCFFF698 +:10B81000F01F00070C9A0A9BE6CCFFF5F01F00040E +:10B82000E3CD80688001A37C8001AD988001A29C5B +:10B83000EBCD4068189316951496F01F00120C9AE1 +:10B840000A9BE6CCFFFCF01F00100C9A0A9BE6CC8A +:10B85000FFFAF01F000D0C9A0A9BE6CCFFF8F01FD0 +:10B86000000A0A9AE6CCFFF60C99306BF01F00072D +:10B870000C9A0A9BE6CCFFF0F01F0005E3CD806830 +:10B880008001A37C8001A2FC8001AD988001AB3CCB +:10B89000EBCD4068189316951496F01F00100C9A83 +:10B8A0000A9BE6CCFFFCF01F000E0C9A0A9BE6CC2C +:10B8B000FFFAF01F000B0C990A9AE6CCFFF8306BE8 +:10B8C000F01F00080C990A9AE6CCFFF2302BF01F0B +:10B8D0000005E3CD806800008001A37C8001A2FC0C +:10B8E0008001AD98EBCD4068189316951496F01F23 +:10B8F00000090C9A0A9BE6CCFFFFF01F00060C998A +:10B900000A9AE6CCFFFE302BF01F0003E3CD8068DF +:10B910008001A29C8001AD98EBCD406816951496ED +:10B920001893F01F00130C990A9AE6CCFFFF306BB6 +:10B93000F01F00100C9A0A9BE6CCFFF9F01F000CD8 +:10B940000C9A0A9BE6CCFFF8F01F00090A9AE6CC95 +:10B95000FFF70C99306BF01F00070C9A0A9BE6CC9E +:10B96000FFF1F01F0003E3CD806800008001A29C7E +:10B970008001AD98EBCD4068189316951496F01F92 +:10B9800000060C9A0A9BE6CCFFFCF01F0004E3CDF6 +:10B99000806800008001A37C8001B918EBCD40686D +:10B9A0001696149518931499169A306BF01F000888 +:10B9B0000A9A0C9BE6CCFFFAF01F00060A9A0C9B31 +:10B9C000E6CCFFF9F01F0003E3CD80688001AD985D +:10B9D0008001A29CEBCD4068189316951496F01F39 +:10B9E00000060C9A0A9BE6CCFFFCF01F0004E3CD96 +:10B9F000806800008001A37C8001B99CEBCD406889 +:10BA0000189316951496F01F00090C9A0A9BE6CC21 +:10BA1000FFFFF01F00060C990A9AE6CCFFFE306B80 +:10BA2000F01F0003E3CD80688001A29C8001AD98E7 +:10BA3000EBCD4068189316951496F01F00060C9AEB +:10BA40000A9BE6CCFFFCF01F0004E3CD80680000F9 +:10BA50008001A37C8001B9FCD4011499169A308B23 +:10BA6000F01F0002D80200008001AD98EBCD4068C5 +:10BA7000169514961893F01F00090A9AE6CCFFFC5D +:10BA80000C99306BF01F00060C9A0A9BE6CCFFF66F +:10BA9000F01F0004E3CD80688001A37C8001AD9895 +:10BAA0008001A2FCEBCD4068189316951496F01F08 +:10BAB00000090C9A0A9BE6CCFFFCF01F00070C99CA +:10BAC0000A9AE6CCFFFB303BF01F0004E3CD806810 +:10BAD0008001A37C8001A29C8001AD98D4011499BF +:10BAE000169A320BF01F0002D80200008001AD98B8 +:10BAF000EBCD4068189316951496F01F00180C9A19 +:10BB00000A9BE6CCFFE0F01F00160C9A0A9BE6CCDD +:10BB1000FFDEF01F00140C9A0A9BE6CCFFDDF01F3D +:10BB200000110C990A9AE6CCFFDC306BF01F000E76 +:10BB30000C9A0A9BE6CCFFD6F01F000C0C9A0A9BCD +:10BB4000E6CCFFCEF01F00070C9A0A9BE6CCFFCD97 +:10BB5000F01F0004E3CD80688001BADC8001A2FC04 +:10BB60008001A29C8001AD988001BA58EBCD40685D +:10BB7000189316951496F01F00060C9A0A9BE6CCB3 +:10BB8000FFFCF01F0004E3CD806800008001A37C6F +:10BB90008001BAF0D4011499169A303BF01F0002CC +:10BBA000D80200008001AD98EBCD40E018971695C3 +:10BBB0001496F01F000D6E1C580CC0800C990A9A48 +:10BBC0006E0BF01F000AE3CD80E05816C0918A99F1 +:10BBD0006A4812088F186E098A181208AA18E3CD4D +:10BBE00080E000008001A37C8001AD98EBCD40682F +:10BBF000189316951496F01F00060C9A0A9BE6CC33 +:10BC0000FFFCF01F0004E3CD806800008001A37CEE +:10BC10008001BBA8EBCD4068189316951496F01FD1 +:10BC200000100C9A0A9BE6CCFFFCF01F000E0C994A +:10BC30000A9AE6CCFFFB303BF01F000B0A9AE6CCD9 +:10BC4000FFF80C99308BF01F00080C9A0A9BE6CC89 +:10BC5000FFF0F01F0006E3CD806800008001A37CA8 +:10BC60008001A29C8001AD988001BBA8EBCD40680B +:10BC7000169514961893F01F00090A9AE6CCFFFC5B +:10BC80000C99308BF01F00060C9A0A9BE6CCFFF44F +:10BC9000F01F0004E3CD80688001A37C8001AD9893 +:10BCA0008001BBA8EBCD40801697189B580AC0F1C5 +:10BCB0008E1C8E89FDDCC010FCC8FFF91238C285CD +:10BCC000F8C8FFF88F3AAE18E3CD8080581AC070DC +:10BCD0008E1CF8C8FFF8AE18E3CD80808E9A8E894E +:10BCE000F4C8FFF91238C2C46E48140811F9B889B3 +:10BCF00011EAB89A11D9B8A911CAB8BA11B9B8C914 +:10BD000011AAB8DA1199B8E9118AB8FACE2B17F846 +:10BD10006E4A1C0AB48817E9B49917D8B4A817C991 +:10BD2000B4B917B8B4C817A9B4D91798B4E8178923 +:10BD3000B4F98E1CF8C8FFF8AE18E3CD8080300B44 +:10BD4000308A8F3BF01F00028E1CCC4B800091D0BC +:10BD5000EBCD4068189316951496F01F000C0C9AC2 +:10BD60000A9BE6CCFFF8F01F000A0C9A0A9BE6CC6F +:10BD7000FFF6F01F00070C9A0A9BE6CCFFF4F01FB9 +:10BD80000005E3CD806800008001BCA48001A2FC16 +:10BD90008001AB3CEBCD40F8206D169714961499BA +:10BDA0001895169A306BF01F002D0C9A0E9BEACC5A +:10BDB000FFFAF01F002B0C9A0E9BEACCFFF9F01F44 +:10BDC00000280C9A0E9BEACCFFF8F01F00260C9A74 +:10BDD0000E9BEACCFFF0F01F00240C9A0E9BEACCDD +:10BDE000FFECF01F0021318A0E9B1A9CF01F001FF0 +:10BDF000EAC3FFE81A940C9A1A9B069CF01F001ADB +:10BE00005816C1801A9B0C9A6A7CF01F00199A98E8 +:10BE10008E992048F00901098B690C9A069C0E9BAB +:10BE2000F01F00116A698E181208AE182FADE3CD0D +:10BE300080F86A698E182FC81208E06B00E8BA080B +:10BE40006E5CF01F000C8B7CCF20505C1A9B0C9A10 +:10BE5000F01F0007CE3B00008001AD988001A29C3E +:10BE60008001BCA48001A37C800091DC8001BD50D6 +:10BE70008001D3ECEBCD4068189316951496F01F13 +:10BE800000120C9A0A9BE6CCFFFCF01F00100C9AE3 +:10BE90000A9BE6CCFFFAF01F000D0C9A0A9BE6CC39 +:10BEA000FFF8F01F00090C9A0A9BE6CCFFF4F01F84 +:10BEB00000060C9A0A9BE6CCFFF0F01F0005E3CDCC +:10BEC000806800008001A37C8001A2FC8001BD94F9 +:10BED000EBCD40E0189716951496F01F000B0C9AC6 +:10BEE0000A9BEECCFFFCF01F00090FD93008F009C7 +:10BEF0001800C0700C9A0A9BEECCFFF8F01F0004EB +:10BF0000E3CD80E08001A37C8001B8E48001BD9492 +:10BF1000EBCD4060202D301A18951696FACCFFFE16 +:10BF2000F01F00089A181BF92FE8F0090109AC0965 +:10BF30001BCA8B5A1BD88B482FEDE3CD80600000C5 +:10BF40008001A444EBCD40E07808975818971696E6 +:10BF50007859E049003FE0880004E3CF80E0FEF834 +:10BF6000029AF009032F78455815E0800127E04533 +:10BF70000080CF41780C301AF01F00A1E3CF90E091 +:10BF800078485808C391780C301AF01F009EE3CF10 +:10BF900090E07848F0C90005E049008FFE9BFFDF84 +:10BFA000FEF80264F009032F7848E0480081E08041 +:10BFB000010CE08A002BE0480083E0800118E08556 +:10BFC0000110E0480085CCA1780C301AF01F008FDA +:10BFD000E3CF90E0780C301AF01F008DE3CF90E0B3 +:10BFE0007848F0C90001E049009BFE9BFFB8FEF8CD +:10BFF0000222F009032FE0480081CB01780C301AAF +:10C00000F01F0085E3CF90E05848E08000E4E0486E +:10C010000080CA41781A300B780CF01F00806E0C3B +:10C020000C9B301AF01F007EE3CF90E0780C301AA2 +:10C03000F01F007CE3CF90E0780C301AF01F007AFC +:10C04000E3CF90E0780C301AF01F0078E3CF90E057 +:10C05000780C301AF01F0076E3CF90E0780C301A9D +:10C06000F01F0074E3CF90E0780C301AF01F0072DC +:10C07000E3CF90E0780C301AF01F0070E3CF90E02F +:10C08000780C301AF01F006EE3CF90E0780C301A75 +:10C09000F01F006CE3CF90E0780C301AF01F006ABC +:10C0A000E3CF90E0780C301AF01F0068E3CF90E007 +:10C0B000780C301AF01F0066E3CF90E0780C301A4D +:10C0C000F01F0064E3CF90E0780C301AF01F00629C +:10C0D000E3CF90E0780C301AF01F0060E3CF90E0DF +:10C0E000780C301AF01F005EE3CF90E0780C301A25 +:10C0F000F01F005CE3CF90E0780C301AF01F005A7C +:10C10000E3CF90E0780C301AF01F0058E3CF90E0B6 +:10C11000780C301AF01F0056E3CF90E0780C301AFC +:10C12000F01F0054E3CF90E0780C301AF01F00525B +:10C13000E3CF90E0780C301AF01F0050E3CF90E08E +:10C14000780C301AF01F004EE3CF90E0780C301AD4 +:10C15000F01F004CE3CF90E0780C301AF01F004A3B +:10C16000E3CF90E0780C301AF01F0048E3CF90E066 +:10C17000780C301AF01F0046E3CF90E0780C301AAC +:10C18000F01F0044E3CF90E0780C301AF01F00421B +:10C19000E3CF90E0780C301AF01F0040E3CF90E03E +:10C1A000780C301AF01F003EE3CF90E0780C301A84 +:10C1B000F01F003CE3CF90E0780C0A9AF01F003AA1 +:10C1C0000A9CE3CD80E0780C301AF01F0038E3CFF2 +:10C1D00090E0780C301AF01F0036E3CF90E0780C36 +:10C1E000301AF01F0034E3CF90E0780C301AF01FC3 +:10C1F0000032E3CF90E000008003B8288001AAEC71 +:10C200008001A4988003B9288001B3248001A37C15 +:10C210008003BB688001A4CC800091D08001BC1455 +:10C220008001BAA48001A4748001BA6C8001AC546E +:10C230008001AA808001AE8C8001AAC88001AAA4D6 +:10C240008001AA208001AF5C8001A9CC8001A9787F +:10C250008001A9488001A8F48001A8D08001A884A9 +:10C260008001A8608001B1548001B1B08001B1F4B7 +:10C270008001A8188001AA508001B0F88001A83C74 +:10C280008001A7F48001B4E08001B56C8001B5B0F5 +:10C290008001B5F88001B6408001BED08001B5189C +:10C2A0008001B9748001AE3C8001B3AC8001A6145A +:10C2B0008001B3688001B2E0EBCD40C012971499C1 +:10C2C0008E96109A582CC280E08A0008584CC360A1 +:10C2D000587CC190E3CF80C0580CC0A0581CCFB18F +:10C2E00058EBFE9BFFF9FEF80312F00B032F580BDF +:10C2F000CF21129C0E9BF01F00C28E98F006010CFD +:10C30000E3CD80C0202BE04B007FFE9BFFE5FEF8D5 +:10C3100002F2F00B032F582BE080015DE089001A38 +:10C32000580BC260581BCD71129C0E9BF01F00B6BB +:10C330008E98F006010CE3CD80C0580BCCC1129C46 +:10C340000E9BF01F00B28E98F006010CE3CD80C06A +:10C35000584BC170E0850148585BCBD1129C0E9BB5 +:10C36000F01F00AB8E98F006010CE3CD80C0129C4C +:10C370000E9BF01F00A88E98F006010CE3CD80C044 +:10C38000129C0E9BF01F00A48E98F006010CE3CDCA +:10C3900080C0129C0E9BF01F00A18E98F006010C2D +:10C3A000E3CD80C0129C0E9BF01F009D8E98F0067E +:10C3B000010CE3CD80C0129C0E9BF01F009A8E985A +:10C3C000F006010CE3CD80C0129C0E9BF01F00967E +:10C3D0008E98F006010CE3CD80C0129C0E9BF01FDE +:10C3E00000938E98F006010CE3CD80C0129C0E9B4A +:10C3F000F01F008F8E98F006010CE3CD80C0129CD8 +:10C400000E9BF01F008C8E98F006010CE3CD80C0CF +:10C41000129C0E9BF01F00888E98F006010CE3CD55 +:10C4200080C0129C0E9BF01F00858E98F006010CB8 +:10C43000E3CD80C0129C0E9BF01F00818E98F00609 +:10C44000010CE3CD80C0129C0E9BF01F007E8E98E5 +:10C45000F006010CE3CD80C0129C0E9BF01F007A09 +:10C460008E98F006010CE3CD80C0129C0E9BF01F4D +:10C4700000778E98F006010CE3CD80C0129C0E9BD5 +:10C48000F01F00738E98F006010CE3CD80C0129C63 +:10C490000E9BF01F00708E98F006010CE3CD80C05B +:10C4A000129C0E9BF01F006C8E98F006010CE3CDE1 +:10C4B00080C0129C0E9BF01F00698E98F006010C44 +:10C4C000E3CD80C0129C0E9BF01F00658E98F00695 +:10C4D000010CE3CD80C0129C0E9BF01F00628E9871 +:10C4E000F006010CE3CD80C0129C0E9BF01F005E95 +:10C4F0008E98F006010CE3CD80C0129C0E9BF01FBD +:10C50000005B8E98F006010CE3CD80C0129C0E9B60 +:10C51000F01F00578E98F006010CE3CD80C0129CEE +:10C520000E9BF01F00548E98F006010CE3CD80C0E6 +:10C53000129C0E9BF01F00508E98F006010CE3CD6C +:10C5400080C0129C0E9BF01F004D8E98F006010CCF +:10C55000E3CD80C0129C0E9BF01F00498E98F00620 +:10C56000010CE3CD80C0129C0E9BF01F00468E98FC +:10C57000F006010CE3CD80C0129C0E9BF01F004220 +:10C580008E98F006010CE3CD80C0129C0E9BF01F2C +:10C59000003F8E98F006010CE3CD80C0129C0E9BEC +:10C5A000F01F003B8E98F006010CE3CD80C0129C7A +:10C5B0000E9BF01F00388E98F006010CE3CD80C072 +:10C5C000129C0E9BF01F00348E98F006010CE3CDF8 +:10C5D00080C0129C0E9BF01F00318E98F006010C5B +:10C5E000E3CD80C0129C0E9BF01F002D8E98F006AC +:10C5F000010CE3CD80C000008003BDD88001A49869 +:10C600008003BE148001BC6C8001AE648001A5C0B3 +:10C610008001B4B88001A5F08001B8308001B29CDF +:10C620008001B6948001B6CC8001B9D48001BA30C3 +:10C630008001BB6C8001B7048001B7EC8001BA6C4B +:10C640008001B8908001BE748001A5188001A55CAE +:10C650008001B7A88001A7308001A7888001AE8C37 +:10C660008001AED88001A7D08001AB148001AF1843 +:10C670008001A9FC8001A9A88001AFD48001A92470 +:10C680008001B08C8001A8A88001B22C8001A7ACE9 +:10C690008001B2648001BBEC8001B4808001B3E40E +:10C6A000EBCD40FE208D306A18977853784578019D +:10C6B000FAC2FFE6300B049CF01F00384B88F139BA +:10C6C000010BE06AFFFFFB69001E300B1A9CF01F94 +:10C6D0000035302A1A9B049CF01F0033029A302840 +:10C6E0001A990A9B069CF01F00319A194B08F9D938 +:10C6F000C0101188103CF9B60200F1DCE318E06AC2 +:10C7000000FFF1DAE326EDD9E309FBF93C01F9D6A4 +:10C71000E30C1A944A78118A580AC060F4C80001E0 +:10C72000F9E80008C2918F3CF01F00238F2CC31042 +:10C730006E3A300BF01F0019FB66001F6E2BFB6377 +:10C74000001CFB65001D8E78F5D8C01020281A9CAF +:10C75000FB58001AF01F0013049C1A9B300AF01FAC +:10C7600000121A99029A0A9B069C3008F01F000FCB +:10C770002F8DE3CF90FE9A18F4C90001F9E9000962 +:10C78000F40901095C591208120CBA181206CCCB34 +:10C790002F8DE3CD80FE0000800091D0000087F453 +:10C7A0008001C7B88001A4448001C2B8000079E5C7 +:10C7B000000079E48000920030083019B838B818C9 +:10C7C000B828B80A3008994B993999285EFCD703E4 +:10C7D000EBCD4068189316951496F01F00090C9A3B +:10C7E0000A9BE6CCFFFFF01F00060C9A0A9BE6CCE2 +:10C7F000FFFEF01F0004E3CD806800008001A29CD2 +:10C800008001A2FCEBCD40681696149518931499FC +:10C81000169A303BF01F00050A9A0C9BE6CCFFFDF0 +:10C82000F01F0003E3CD80688001AD988001A29CD9 +:10C83000EBCD40681696149518931499169A303BD0 +:10C84000F01F00050A9A0C9BE6CCFFFDF01F0003C9 +:10C85000E3CD80688001AD988001A29CD431FACEEE +:10C86000FFDC189616971494129210907C157C0198 +:10C87000581AC2D0C153582AC1300D893FF8F00967 +:10C880001800C2100D98E2081900E08B0005E008BE +:10C890001900C6E23FF83009AC88AC99D83A8E1836 +:10C8A000AE383FF80D89F0091800C0D00C9C089AEA +:10C8B0000E9BF01F0034089A0E9BECCCFFFFF01F7C +:10C8C0000031CDCB3008300CAC98D83296285808BF +:10C8D000C4C0B618AE3830088B08AC983FFAAC8AA2 +:10C8E0008E198E08F2081900FE98FFEE1494ECC31E +:10C8F000FFFFC1D8E8081800EDF41E000D9A8E184D +:10C900008E89F408000B5C781019123AE089002631 +:10C91000AE1B6A082FF88B080D89E8091800CB3187 +:10C920008E198E08F2081900FE98FFCEAE39301A23 +:10C930000E9B0C9CF01F0013301A0E9B069CF01FE0 +:10C9400000110D88E4081800CD618E888E990D9A2B +:10C950001218103AE08A000E3FF83009AC88AC9902 +:10C960008E182028AE08C8AB9618B628CB4BDA3AFA +:10C970006A0A6E293018F00A094810498F29C7EB56 +:10C980008001A29CEBCD4040201D1A9E9AF65C7857 +:10C990001ADE1AD6F01F00032FED2FFDE3CD8040E5 +:10C9A0008001C85CEBCD40E0302818951AD8169667 +:10C9B00014973069F01F00072FFD580CC0700E9AB5 +:10C9C0000C9BEACCFFFEF01F0004E3CD80E00000EA +:10C9D0008001C9848001A2FCEBCD40E0301818959D +:10C9E0001AD81696149732A9F01F00072FFD580C7D +:10C9F000C0700E9A0C9BEACCFFFEF01F0004E3CD42 +:10CA000080E000008001C9848001A29CEBCD40E061 +:10CA1000305818951AD8169614973029F01F001020 +:10CA20002FFD580CC190EACCFFFE0E9A0C9BF01F14 +:10CA3000000D0E9A0C9BEACCFFFCF01F000B0E9A27 +:10CA40000C9BEACCFFFBF01F00080E9A0C9BEACC73 +:10CA5000FFFAF01F0005E3CD80E000008001C984EB +:10CA60008001A2FC8001A29CEBCD40E0301818951B +:10CA70001AD8169614973039F01F00072FFD580C5E +:10CA8000C0700E9A0C9BEACCFFFEF01F0004E3CDB1 +:10CA900080E000008001C9848001A29CEBCD40E0D1 +:10CAA000306818951AD8169614973049F01F001060 +:10CAB0002FFD580CC190EACCFFFE0E9A0C9BF01F84 +:10CAC000000D0E9A0C9BEACCFFFDF01F000A0E9A97 +:10CAD0000C9BEACCFFFCF01F00080E9A0C9BEACCE2 +:10CAE000FFFAF01F0005E3CD80E000008001C9845B +:10CAF0008001A29C8001A2FCEBCD40E0301818958B +:10CB00001AD81696149730A9F01F00072FFD580C5D +:10CB1000C0700E9A0C9BEACCFFFEF01F0004E3CD20 +:10CB200080E000008001C9848001A29CD43120BD36 +:10CB30005019500818961697581AC390C272E06898 +:10CB400000FDE06900DD1AD8300A3018F01F005CE3 +:10CB50002FFD580CC1E0300A0E9BECCCFFFEF01FFD +:10CB60000059300A0E9BECCCFFFDF01F0056300A36 +:10CB70000E9BECCCFFFCF01F0053ECCCFFFB0E9B9C +:10CB8000300AF01F0050301CC048582AC040301CEA +:10CB90002F5DD83219893FF8F0091800E080008B2A +:10CBA0009618301C2FA8B6182F5DD832761850581A +:10CBB000B1485038760A504AF6E80008F8C2FFFE3D +:10CBC000FAE90018F8C3FFFDF6EA0010F8C9FFFB08 +:10CBD000FAEB0020F8C4FFFC50293FF5FAC0FFD85B +:10CBE000E06100FDC0680D998E382FE81208AE286C +:10CBF0001AD030181AD1E06900DD109A0E9B0C9CF7 +:10CC0000F01F00312FED580CC4105805FBF5500AE9 +:10CC1000FBF8400AF9B90401F1D9E408EBD8E405BE +:10CC2000301A0E9B049CF01F0027301A0E9B069CA6 +:10CC3000F01F0024301A0E9B089CF01F00220DA844 +:10CC40003009F2081800CD010DB83509F2081800B6 +:10CC5000CCB10DC83F29F2081800CC61301A0E9BE8 +:10CC6000402CF01F00180DD84019F2081800CBC155 +:10CC70004038301CAE28F80509496E2812488F2824 +:10CC800040095809C8509305C84B4038FB58001458 +:10CC9000FAE80020EEE90010FAEA0010EEEB0000DE +:10CCA000FAE80018EEE90008AC9C3FF8AC882F5D6C +:10CCB000D8323008B898300CC6CB00008001C98447 +:10CCC0008001A29C8001C85CD431207D1895169704 +:10CCD00014961293581AC110C0B2300830290C9A19 +:10CCE0000E9B0A9CF01F0032C5712F9DD832582A26 +:10CCF000CF50301C2F9DD83276185018760AF0008D +:10CD00001410500A1A91F6E80008F8C4FFFAFAE97C +:10CD100000083FF6F6EA0010FAC2FFE8FAEB00104E +:10CD2000C1A85806FBF65006FBF84006F9B9040105 +:10CD3000F1D9E408EDD8E406301A0E9B089CF01FE8 +:10CD4000001D0BE8E6081800C1D00B998E382FE8BB +:10CD50001208AE2804983029301A0E9B0A9CF01F46 +:10CD60000014CE01BA20E2E80010EEE90010E2E87B +:10CD70000000EEE90000E2EA0008EEEB00082F9D5B +:10CD8000D83230186E29F006094AAE201449109C9A +:10CD90008F292F9DD8320B982FF8EACCFFFA0C9AE6 +:10CDA0000E9BAA98F01F0003301CCA5B8001CB2C9D +:10CDB0008001A29CEBCD40EC206D301918971693A2 +:10CDC0001495F01F002DC0412FADE3CD80ECEECCCB +:10CDD000FFF90A9A069BF01F00290A9A069BEECCDF +:10CDE000FFF8F01F00260A9A069BEECCFFF7F01F13 +:10CDF00000230A9A069BEECCFFF6F01F00210A9A48 +:10CE0000069BEECCFFF2F01F001E0A9A069BEECCAA +:10CE1000FFEEF01F001B0A9A069BEECCFFEAF01F04 +:10CE2000001858055F0858255F091248CCE06608CD +:10CE30005008661886160A9A5018EBD8B010BA1522 +:10CE4000E6E80008FAE900082026E6E20010E068BB +:10CE500000FD0A16AE961A9BFAE300100E9C1AD833 +:10CE6000E06900DD3018F01F00072FFD2FADE3CD86 +:10CE700080EC00008001CCC88001A29C8001C7D05A +:10CE80008001C984EBCD40EC206D18971693149562 +:10CE9000582AC18119893FF8F0091800F9F91801D9 +:10CEA000F7F81201F9BA0102F1DAE108F1D9E10863 +:10CEB000F7F81C01F9B80000F9F80E012FADE3CD29 +:10CEC00080EC3009F01F0019CFA0EECCFFF90A9AD0 +:10CED000069BF01F00170A9A069BEECCFFF8F01F86 +:10CEE00000145805CEC166085008661886160A9ABE +:10CEF0005018EBD8B010BA15E6E80008FAE90008B7 +:10CF00002026E6E20010E06800FD0A16AE961A9BA5 +:10CF1000FAE300100E9C1AD8E06900DD3018F01F0B +:10CF200000052FFDCCCB00008001CCC88001A29C65 +:10CF30008001C984D42112951497580A5F095805B5 +:10CF40005F08169A1248C2510B986E29F0C4FFFE72 +:10CF5000F2C800015BD8E08B0015129C089B5D1A9B +:10CF600018965806C0C06E086E192FF80809089A5E +:10CF70000A9B8F088F190C9CF01F00080C9CD8226C +:10CF8000089B5D1A300818968F2C8F188F08CEAB2F +:10CF900030060C9CD8220000800091DCEBCD40FCD8 +:10CFA00012951494580A5F0958055F0818921248A0 +:10CFB0001693C191300995296A085808E08A00162D +:10CFC00012966A270E99089A069B049CF01F000B84 +:10CFD0002FF6EEF7FFF86A085807F7B701F80C3894 +:10CFE000FE99FFF2E3CD80FCEAE80000F4E90000DE +:10CFF0006A2A892AE3CD80FC8001CF34EBCD40FC46 +:10D0000018931695581AC2C0C053582AC5E0E3CDEC +:10D0100080FC782778085808FE9AFFFB7819580991 +:10D02000FE9AFFF79698300612087649F208000437 +:10D030000F9A0E9B2FEA1414089CF01F00332FF652 +:10D04000EEF7FFF866085807F7B701F80C38FE99B5 +:10D05000FFF166198A181208AA18E3CD80FC9628F9 +:10D060005808C3C0B618F9D8B010AA3C300830121E +:10D0700087088718872810948A1C8A0E189AFC0C37 +:10D080001900C212F7DAC0106A46EC0B00081199B9 +:10D09000F2C7FFFE5827C250F1DEC0101618103735 +:10D0A000E0890020E40409496A2B2FF4F3EB00081F +:10D0B000C1C0F4070008AA18F9D8B010189AFC0CDF +:10D0C0001900CE13E3CD80FC781C580CFE9AFFA10A +:10D0D00096181808B618E3CD80FC961CB62CCC6BBD +:10D0E000AA0CFDDCB010CCBBF3EB1008069A8A99B1 +:10D0F0008B28EC090009485B6A5CF01F00058A1A5E +:10D100008A0ECD8B800091DC8001D3EC8001CF347E +:10D11000EBCD40F83FF510941697149340661388B2 +:10D12000EA081800C05130070E9CE3CD80F858047F +:10D130005F1858065F991268CF700C9B5D1718979F +:10D14000C0600C9A089BF01F0004CEFBA685A69C2D +:10D15000CECB0000800091DCEBCD40C0129EF2E807 +:10D160000000F4E9000014977C2A8F2A18961D8984 +:10D17000169C3FF8F0091800C1401D993058F0097D +:10D180001800E088000F2039E06A5556EA1A555514 +:10D19000F20B141FF20A04481619F2090019C028EC +:10D1A00030091AD9189B1C990C9C7C280E9AF01FE8 +:10D1B00000042FFD8F2CE3CD80C000008001D11032 +:10D1C000EBCD406CF2E20000F4E3000072289528F9 +:10D1D0001495722813961AD6F01F00032FFD8B2C7E +:10D1E000E3CD806C8001D110EBCD406FF2E2000006 +:10D1F000F4E30000F2E00008F4E10008F2E20010BD +:10D20000F4E300101495725813961AD6F01F000319 +:10D210002FFD8B5CE3CD806F8001D110EBCD406F93 +:10D22000F2E20000F4E30000F2E00008F4E100089C +:10D23000724895481495724813961AD6F01F000349 +:10D240002FFD8B4CE3CD806F8001D110EBCD406C76 +:10D25000F2E20000F4E30000722895281495722889 +:10D2600013961AD6F01F00032FFD8B2CE3CD806C94 +:10D270008001D110D421310418971AD41696149530 +:10D2800030183329F01F00142FFD580CC0B058057A +:10D29000C0E18C986C4C0F9A100CEECBFFFEF01F87 +:10D2A000000F0F998C181208AC18D8225815CFA16E +:10D2B0000F9AE80A1800E08800073FF83009AE88A6 +:10D2C000AE99CF0B8C986C4BEECCFFFE100BF01F81 +:10D2D0000003CE8B8001C984800091DCD4213018FA +:10D2E000189716961495308410991AD4F01F0014CC +:10D2F0002FFD580CC0B05805C0E18C986C4C0F9AAB +:10D30000100CEECBFFFEF01F000F0F998C181208C7 +:10D31000AC18D8225815CFA10F9AE80A1800E08857 +:10D3200000073FF83009AE88AE99CF0B8C986C4B54 +:10D33000EECCFFFE100BF01F0003CE8B8001C984E2 +:10D34000800091DCEBCD40E0320930081AD9189505 +:10D35000169714961099F01F00132FFD580CC0F06B +:10D360005806C0F18E986E4C0B9A100CEACBFFFE5B +:10D37000F01F000D0B998E181208AE18E3CD80E057 +:10D380005816CF918E986E4B0B9A100BEACCFFFE7D +:10D39000F01F00050B998E181208AE18CF0B000075 +:10D3A0008001C984800091ACD421201D7809189691 +:10D3B000F2C800015BD8E08B0014F2C80008C0E09E +:10D3C0001A943005C0280E98500870079105680C13 +:10D3D000F01F00068D055807CF712FFDD8223008A9 +:10D3E00099082FFDD8220000800091E8EBCD40C0C5 +:10D3F00018971696F6CCFFF8F01F000DC130EEF826 +:10D40000FFF8EEC900089908F8C7FFF8930C9916C1 +:10D410000C9AE06B00FF0E9CF01F00060E9CE3CD03 +:10D4200080C018970E9CE3CD80C000008000920061 +:10D43000800091D0EBCD40FC32E818931AD81692B8 +:10D44000149430683079F01F00232FFD580CC03140 +:10D45000E3CD80FC089A049BE6CCFFFEF01F001E83 +:10D4600007993058F0091800E088001F2039E06A59 +:10D470005556EA1A5555F20B141FF20A0448F20BDE +:10D4800001055814C18030060C972FF6662C0899B8 +:10D490000E0C049A2FD7303BF01F00100C35FE996C +:10D4A000FFF6E3CD80FC5814F9B80000E7F80A0253 +:10D4B000E3CD80FCEA050017645C0E9BF01F0008BA +:10D4C000872CCC700E9A300BF01F0006CDDB0000CD +:10D4D0008001C9848001BB948001AD988001D3ECA8 +:10D4E000800091D0D421189616951497582AC161BE +:10D4F00019893FF8F0091800F9F91801F7F8120135 +:10D50000F9BA0102F1DAE108F1D9E108F7F81C01F2 +:10D51000F9B80000F9F80E01D82230083049F01FA0 +:10D52000000CC0C00D98F0C400045817C0800E99BC +:10D530000A9A089B6C2CF01F0007D822089B6A5C93 +:10D54000F01F00058D2CCF41CF9B00008001CB2C1C +:10D550008001AD988001D3ECEBCD40FC206D189498 +:10D5600016951493582AC18119893FF8F0091800BB +:10D57000F9F91801F7F81201F9BA0102F1DAE10834 +:10D58000F1D9E108F7F81C01F9B80000F9F80E012B +:10D590002FADE3CD80FC30083019F01F0040CF9054 +:10D5A0006A1E501E6A0A500AEAE80008FAE90008F2 +:10D5B000EAEA0010FAEB0010EDDEB0105813C600D6 +:10D5C000E8C7FFFA0999ECC8FFFE12080E9CE5D8DF +:10D5D000B010069A0A9BF01F00328A18E40819005E +:10D5E000CD82069A0A9BE8CCFFF8F01F002E8A181D +:10D5F000E4081900CCE2E8CCFFF4069A0A9BF01F7D +:10D600000028685C88693008F0091900C0E01896A5 +:10D6100030070C9C2FF7069A0A9BF01F00222FC69A +:10D6200088E80E38FE99FFF78A18E4081900CB1233 +:10D63000069AE8CCFFF20A9BF01F0019685888E9A7 +:10D64000887AF009002C3008F00A1900C0E018961A +:10D6500030070C9C2FF7069A0A9BF01F00132FC669 +:10D6600088F80E38FE99FFF78A18E4081900C912E5 +:10D67000069A0A9BE8CCFFF0F01F0009C8ABE8C788 +:10D68000FFFA30EA300B0E9CF01F0008099B6A5C21 +:10D69000F01F0007895CC97B8001CB2C8001A2FCB4 +:10D6A0008001C8308001C804800091D08001D3EC93 +:10D6B000EBCD40FC206D189416951493582AC18127 +:10D6C00019893FF8F0091800F9F91801F7F8120163 +:10D6D000F9BA0102F1DAE108F1D9E108F7F81C0121 +:10D6E000F9B80000F9F80E012FADE3CD80FCE06839 +:10D6F00000FF33091AD83008F01F00532FFD580CD3 +:10D70000CF406A1E501E6A0A500AEAE80008FAE989 +:10D710000008EAEA0010FAEB0010EDDEB010581332 +:10D72000E0800085E8C7FFFE0999ECC8FFFE1208FB +:10D730000E9CE5D8B010069A0A9BF01F00448A1888 +:10D74000E4081900CD22069A0A9BE8CCFFFCF01FE2 +:10D7500000408A18E4081900CC82E8CCFFF8069A49 +:10D760000A9BF01F003A684C88493008F0091900FC +:10D77000C0E0189630070C9C2FF7069A0A9BF01F02 +:10D7800000342FC688C80E38FE99FFF78A18E408BF +:10D790001900CAB2069AE8CCFFF60A9BF01F002BCC +:10D7A000684888C9885AF009002C3008F00A190026 +:10D7B000C0E0189630070C9C2FF7069A0A9BF01FC2 +:10D7C00000252FC688D80E38FE99FFF78A18E4087E +:10D7D0001900C8B2069A0A9BE8CCFFF4F01F001BA0 +:10D7E0008A18E4081900C812069AE8CCFFF20A9BCE +:10D7F000F01F001688C988D81208684A8879F4088A +:10D80000002C3008F0091900FE90FF7018963007C0 +:10D810000C9C2FF706990A9A310BF01F000F2F0668 +:10D8200088F80E38FE99FFF6C60BE8C7FFFE30EA0F +:10D83000300B0E9CF01F0009099B6A5CF01F00086A +:10D84000894CC73B8001C9848001A2FC8001C8309B +:10D850008001C8048001AD98800091D08001D3EC94 +:10D86000EBCD40E0E06800FE18971AD816951496A4 +:10D8700030483059F01F00162FFD580CC031E3CD51 +:10D8800080E0EECCFFFE0C9A0A9BF01F00120C9A6F +:10D890000A9BEECCFFFDF01F000F0C9A0A9BEECC0A +:10D8A000FFFCF01F000C5816C0A00F9B0C990A9AA1 +:10D8B0006E2C203BF01F0008E3CD80E00F9B6A5CDC +:10D8C000203BF01F00068F2CCF11CDAB8001C98407 +:10D8D0008001A29C8001AD988001D3ECEBCD40E0AB +:10D8E00018951696F6CCFFF8F01F000CC12099167B +:10D8F00030089908F8C7FFF80C9A5805EBF71A0595 +:10D90000E06B00FF0E9CF01F00060E9CE3CD80E054 +:10D9100018970E9CE3CD80E080009200800091D0AB +:10D92000EBCD40C0201DF8C60008300C6C1BF01F6A +:10D930000014C1A0500C3007C1286C1B400CF01F14 +:10D9400000111897C1406C1AECCBFFF8EF4AFFFCAE +:10D950000E9CF01F000D6C065806C0505807CEE113 +:10D960004007CF2B400C2FFDE3CD80C01A9CF01F49 +:10D9700000070E9C2FFDE3CD80C000008001D8DCA5 +:10D980008001D3EC800091DC8001D3A8D401E06851 +:10D990000081301999489959189A7408129C11CE2F +:10D9A000F20E18005F089708D802D703486830398C +:10D9B000F0FA00F830089569985BF00B19005F0CDD +:10D9C0005EFC0000000087F419C8300A4869F2F9CB +:10D9D00000F8F4081800F9BC0001F9BC0100F3FCE0 +:10D9E0001A065EFC000087F448483009F0FA00F897 +:10D9F000301C95695EFC0000000087F448B8985A16 +:10DA0000F0FB00F83178F00A1900E08B000B3018B9 +:10DA1000F00A0948E4180080E01803FEC0205EFF09 +:10DA20003008301C97685EFC000087F478185808AE +:10DA30005F0C5EFC5EFF19C830192018F208180050 +:10DA40005FBC5EFC5EFD5EFD19C93008F009180080 +:10DA50005F0C5EFC5EFD5EFFEBCD4080308B189767 +:10DA6000991B300CF01F00078F0CC0803078E069E4 +:10DA700000818F588F49E3CF9080E3CD80800000F4 +:10DA80008001D8DCEBCD40C018971696308B991BDF +:10DA9000300CF01F00108F0CC160301830298F58E7 +:10DAA0008F4948D8B826118948C8B8E948C71189AC +:10DAB000B8F96EB899086EBC580CC0752FFC8FBCB5 +:10DAC000E3CF90C0E3CD80C0F01F0006CF9B0000E5 +:10DAD0008001D8DC00007A280000025C000087F496 +:10DAE00080018450EBCD40FE1897FACCFFE01694ED +:10DAF000781330CB14928F1B129178061095300C4E +:10DB0000F01F00118F0CC1A0307830498F588F4919 +:10DB10009905B8E6B8F1F9630008B8C4B8D248B8B6 +:10DB200048B9B084B28248B76EB899086EBC580C38 +:10DB3000C0752FFC8FBCE3CF90FEE3CD80FEF01FBD +:10DB40000006CF9B8001D8DC000079E5000079E475 +:10DB5000000087F480018450EBCD40FC1897FACC8C +:10DB6000FFE4314B781414938F1B129278061095B2 +:10DB7000300CF01F00158F0CC2003018F3D4C01009 +:10DB80008F488F589913B8429935F9560010F954B7 +:10DB9000001248E7F1D6C0100A481248F9B800FF51 +:10DBA000F9B80100B8586EB999096EBC580CC07527 +:10DBB0002FFC8FBCE3CF90FCE3CD80FCF01F000472 +:10DBC000CF9B00008001D8DC000087F480018450E6 +:10DBD000D401780A3009740B15F8129C129AF01FC0 +:10DBE0000002DA0A80018460D401780A3009740BDB +:10DBF000F538000B129C129AF01F0002DA0A00009E +:10DC000080018460D401780A3009740BF538000B68 +:10DC1000129C129AF01F0002DA0A00008001846050 +:10DC2000D401780A3009740BF538000B129C129A53 +:10DC3000F01F0002DA0A000080018460D401780A33 +:10DC40003009740BF538000B129C129AF01F000279 +:10DC5000DA0A000080018460D401780A3009740B6C +:10DC6000F538000B129C129AF01F0002DA0A00002D +:10DC700080018460D401780A3009740B15F8129C75 +:10DC8000129AF01F0002DA0A80018460EBCD40F89E +:10DC900030C618979916169414930C9B300CF01FED +:10DCA00000108F0C1895C160307831690C9A8F582C +:10DCB000089B8F49F01F000B48B66CB88B086CBCF2 +:10DCC000580CC0A52FFC8DBC301C6A088708E3CD1A +:10DCD00080F8E3CD80F8F01F0005CF6B8001D8DC21 +:10DCE000800091DC000087F480018450EBCD40F887 +:10DCF000308618979916169414930C9B300CF01FCD +:10DD000000108F0C1895C160307831490C9A8F58EB +:10DD1000089B8F49F01F000B48B66CB88B086CBC91 +:10DD2000580CC0A52FFC8DBC301C6A088708E3CDB9 +:10DD300080F8E3CD80F8F01F0005CF6B8001D8DCC0 +:10DD4000800091DC000087F480018450EBCD40F826 +:10DD500033C618979916169414930C9B300CF01F29 +:10DD600000108F0C1895C160307831390C9A8F589B +:10DD7000089B8F49F01F000B48B66CB88B086CBC31 +:10DD8000580CC0A52FFC8DBC301C6A088708E3CD59 +:10DD900080F8E3CD80F8F01F0005CF6B8001D8DC60 +:10DDA000800091DC000087F480018450EBCD40F8C6 +:10DDB000318618979916169414930C9B300CF01F0B +:10DDC00000108F0C1895C160307831190C9A8F585B +:10DDD000089B8F49F01F000B48B66CB88B086CBCD1 +:10DDE000580CC0A52FFC8DBC301C6A088708E3CDF9 +:10DDF00080F8E3CD80F8F01F0005CF6B8001D8DC00 +:10DE0000800091DC000087F480018450EBCD40F865 +:10DE1000330618979916169414930C9B300CF01F28 +:10DE200000108F0C1895C160307831090C9A8F580A +:10DE3000089B8F49F01F000B48B66CB88B086CBC70 +:10DE4000580CC0A52FFC8DBC301C6A088708E3CD98 +:10DE500080F8E3CD80F8F01F0005CF6B8001D8DC9F +:10DE6000800091DC000087F480018450D421189751 +:10DE7000169530CB991B300CF01F00128F0C1896A2 +:10DE8000FAC4FFEC580CC190302830098F588F49E4 +:10DE900048D76EB899086EBC580CC1052FFC8FBCD2 +:10DEA0005805EDF81000EBF81A00089BECCCFFFCCD +:10DEB000308AF01F0006DA2AD822F01F0005CF0BA7 +:10DEC0008001D8DC000087F4800091DC8001845060 +:10DED000EBCD40E018961695310B991B300CF01FD6 +:10DEE00000108D0C1897C1503078317A0A998D58EE +:10DEF0008D4A48CBF8CAFFFCF01F000B48B56AB842 +:10DF00008F086ABC580CC0752FFC8BBCE3CF90E027 +:10DF1000E3CD80E0F01F0006CF9B00008001D8DC3D +:10DF20008001D3EC8001D158000087F48001845037 +:10DF3000EBCD408078076E285808C0B0300C189A96 +:10DF40005C586E0B3109300CF01F0009E3CF908054 +:10DF5000310CF01F00086E189908EF390016991956 +:10DF60006E3899286E4999396E28CEAB800184604D +:10DF700080009200EBCD40FC189716931495314B1E +:10DF80001294991B300CF01F001C8F0C1896FAC2CB +:10DF9000FFE4580CC200302830198F588F495805BB +:10DFA000C1C18D455C7549576EB88D086EBC580C63 +:10DFB000C1F52FFC8FBC5804EDF81000E9F81A00E9 +:10DFC000049B308AECCCFFFCF01F000D301C8D351B +:10DFD000E3CD80FCE3CF80FC5C750A9CF01F000958 +:10DFE0008D4CCF90069B0A9AF01F0005CDDBF01FE9 +:10DFF0000006CE1B8001D8DC000087F4800091DC95 +:10E000008000920080018450EBCD40801897F93C4D +:10E01000000BF01F00084888F0F900F85809C0709C +:10E02000EECBFFFC310A313CF01F0004E3CF9080BF +:10E0300080015FB0000087F480014658D42130C8C9 +:10E040001896109B4904300CE8F500F88D18F01F65 +:10E05000000F8D0C1897C120301830D98D582FCC57 +:10E06000EACBFFE28D49F01F000A68B88F0868BC50 +:10E07000580CC0552FFC89BCDA2AD822F01F0005A5 +:10E08000CFBB0000000087F48001D8DC8001844011 +:10E0900080018450D42130CB1897991B300CF01F8D +:10E0A000000B8F0C1894C1004898301530868F559E +:10E0B0008F462FCCF0FB00F82E2BF01F00060A9C99 +:10E0C000E966000AD822D8228001D8DC000087F453 +:10E0D00080018440EBCD40E030CB1896991B300C8A +:10E0E000F01F00108D0C1897C1703018305948E59A +:10E0F0008D588D492FCCEAFB00F82E2BF01F000B1A +:10E100003028AE586AB98F096ABC580CC0752FFC0C +:10E110008BBCE3CF90E0E3CD80E0F01F0005CF9B08 +:10E120008001D8DC000087F48001844080018450A5 +:10E13000EBCD40FC30C518969915169414931292A5 +:10E140000A9B300CF01F00138D0C1897C1D03018AB +:10E150008D458D580A9A300BF01F000FEECCFFFC56 +:10E16000089BF01F000E078848D6EF68000A058953 +:10E17000EF69000B6CB88F086CBC580CC0752FFC95 +:10E180008DBCE3CF90FCE3CD80FCF01F0006CF9B5D +:10E190008001D8DC800091D080018440000087F4A9 +:10E1A00080018450EBCD40FC30C51896991516942B +:10E1B000149312920A9B300CF01F00128D0C1897CA +:10E1C000C1B0301830B98D588D490A9A300BF01F04 +:10E1D000000E306AAEC4AED3049BEE0A000CF01FF2 +:10E1E000000B48B66CB88F086CBC580CC0752FFC7F +:10E1F0008DBCE3CF90FCE3CD80FCF01F0006CF9BED +:10E200008001D8DC800091D0800091DC000087F490 +:10E2100080018450D431203D502B5018FACEFFD0CD +:10E2200033857C3499157C181896149312917C00D0 +:10E2300050087C220A9B300CF01F00228D0C18978E +:10E24000C370301830A98D580A9A8D49300BF01FD1 +:10E25000001E069A029BEECCFFFCF01F001CEF5341 +:10E2600000244028049BEF680026EF600027306AF6 +:10E27000EECCFFD8F01F00155804C1C0089B308AAF +:10E28000EECCFFD2F01F00114008EF6800364018B6 +:10E2900048F6EF6800376CB88F086CBC580CC05556 +:10E2A0002FFC8DBC2FDDDA3AF01F000ACFBB2FDD2B +:10E2B000D832089B308AEECCFFD2F01F0003CE5B31 +:10E2C0008001D8DC800091D0800091DC000087F4D0 +:10E2D00080018450D4012FCC7808202D500819C912 +:10E2E000BAC919D8BAD8F01F00052FED580CF9B8E3 +:10E2F000010DF9F81A06DA0A80015860D40148D8ED +:10E30000F8CBFFF5F0F900F8733C7808204D502861 +:10E3100019C9FB69000C19D8306AFB68000D1A9CFA +:10E32000F01F0005F01F00052FCD580C5F1CD80210 +:10E33000000087F48002E73680018898EBCD40FE2C +:10E340003007FAC5FFE0189116924A134A1466087E +:10E350000E38E08A00216A08204D50280BC9FB695D +:10E36000000C0BD8EE061504FB68000DE806000A49 +:10E3700015D8BAD87409500915C8BAC8F01F0016C4 +:10E380002FCD580CC0A12FF75907CE2118970E9CFE +:10E39000E3CD80FEEE061504E80600060A9B0C9C01 +:10E3A000F01F000EF3D2C001EE081501AC692FF882 +:10E3B000E808093166090E39FE99FFEBEEC9FFFF47 +:10E3C00048380E9C9109E3CD80FE000000008C5C73 +:10E3D00000008B5C8001889880018440EBCD4080F8 +:10E3E000300819C9F0091800C10048E8F0F700F832 +:10E3F0005807C130F01F000C0E9CF01F000C0E9C43 +:10E40000F01F000BE3CF8080486830A9F0FA00F8D5 +:10E41000301C9569E3CD80800E9CE3CD80800000A8 +:10E42000000087F480015D188001593880015CDCB0 +:10E43000EBCD40E01896F01F00224A2A0DE9F4F7D0 +:10E4400000F85809C1103018F0091800C32030280E +:10E45000F0091800C31030488F687498300CABC8AE +:10E460009598E3CD80E06F3930D8322A8F68496CB7 +:10E47000727B2F4BF01F00156F3C3FF8787BF7390C +:10E4800000C8F0091800C130202DF71600D47845D7 +:10E49000306AEECBFFE21A9CF01F000C0C9B0A9C2A +:10E4A000F01F000B301C2FEDE3CD80E0E3CF90E0B8 +:10E4B00030088F68CD3B30588F68CD0B8001F00459 +:10E4C000000087F400008C608002E7368001E33CA6 +:10E4D000EBCD40E01896F01F00284A8A0DE9F4F7CA +:10E4E00000F85809C1503018F0091800C3603028EE +:10E4F000F0091800C3906F0830492FF88F69EF4872 +:10E5000000407498300CABC89598E3CD80E06F392B +:10E5100030D8322A8F6849AC727B2F4BF01F00191C +:10E520006F3C3FF8787BF73900C8F0091800C1301C +:10E53000202DF71600D47845306AEECBFFE21A9C06 +:10E54000F01F00100C9B0A9CF01F000F301C2FEDD9 +:10E55000E3CD80E0E3CF90E06F0830092FF88F69BA +:10E56000EF480040CCFB6F0830592FF88F69EF4817 +:10E570000040CC8B8001F004000087F400008C6028 +:10E580008002E7368001E33CD421310B1896991BB9 +:10E59000300CF01F00198D0C1897C28030183049CC +:10E5A0008D588D494955302CEAF400F8F01F0014BD +:10E5B000E8CBFFE21896EECCFFF8F01F00126C38A3 +:10E5C000AE38EAF901045819C0D03008AE2830B886 +:10E5D00089686AB98F096ABC580CC0952FFC8BBC3E +:10E5E000DA2AEAF8011C5818CF20D82AF01F0006B2 +:10E5F000CF7B00008001D8DC000087F48001EF6C45 +:10E600008001844080018450EBCD40F81897169427 +:10E6100030CCF01F0046303CF01F00441895302CE1 +:10E62000F01F0042E06A00EC1896E06B00FF0E9CC1 +:10E63000F01F003FE8CBFFE2EECCFFF6F01F003DFD +:10E640006C384BD9AE289208AE483DD86939727BF8 +:10E65000F73A009AF00A1800C480F73900803DD8D4 +:10E66000F0091800C52030050A93F01F00349838CF +:10E67000AE381896F93900A83FF8F0091800C09094 +:10E68000F8C9FF58EECAFF584ADB0E9CF01F002D58 +:10E69000ED3900CC3FF8F0091800C1900E9CECC990 +:10E6A000FF34EECAFF344A6BF01F0027089CF01FAE +:10E6B0000027583CE089000C4A587099ABC99199E1 +:10E6C0003FFA301CEF6A009EE3CD80F85805CF502A +:10E6D000EECCFF62069BF01F001F49D9301C7298D8 +:10E6E000ABA89398E3CD80F8F73900A03008F00983 +:10E6F0001800CB41EAF900B85819CB01F72800A25D +:10E700001295F003161FCB2BF73900863018F0094D +:10E710001800CAA1EAFC00B8581CCA61F728008892 +:10E720001895F003161FCA2B8001EF6C800091D062 +:10E73000800184400000025E8001EFF88001D3EC8C +:10E740008001D1E88001D21C8001808E000087F416 +:10E75000800184F0D421E06800EC1897109B4924D4 +:10E76000300CE8F500F88F18F01F00108F0C189689 +:10E77000C090301830798F588F490A9BF01F000CD9 +:10E78000C021D82A0C9CF01F000B30C88B6868B9D8 +:10E790008D0968BC580CC0452FFC89BCDA2AF01FD3 +:10E7A0000006CFCB000087F48001D8DC8001E608AA +:10E7B0008001F03080018450D421E06800EC18978B +:10E7C000109B4924300CE8F500F88F18F01F00105A +:10E7D0008F0C1896C090301830698F588F490A9B5B +:10E7E000F01F000CC021D82A0C9CF01F000B30C871 +:10E7F0008B6868B98D0968BC580CC0452FFC89BC72 +:10E80000DA2AF01F0006CFCB000087F48001D8DCA5 +:10E810008001E6088001F03080018450EBCD40405B +:10E82000201D18961A9CF01F001849888C69F0FB6F +:10E8300000F85809C1203018F0091900C0B030287C +:10E84000F0091900C170770830492FF89769F74827 +:10E8500000402FFDE3CF80407738301911EA301C9B +:10E86000F20A1800F9B8000CF7F80A062FFDE3CDFC +:10E870008040770830592FF89769F74800402FFDFE +:10E88000E3CF8040800177A4000087F4D401496879 +:10E8900019C9F0FA00F85809C1803028F0091800A9 +:10E8A000C1803048F0091800C0503018F009180035 +:10E8B000C180750830492FF89569F548004019CB9B +:10E8C000302CF01F000AD80A3088301C9568D80216 +:10E8D000750830592FF89569F548004019CBCF1BC2 +:10E8E000301BCEFB000087F480018390D431215D82 +:10E8F000303C169614911290F01F00584D83F8C4C6 +:10E90000FFB0189531CA089B069CF01F0056C0A1A5 +:10E910006D3830AA707BE6CCFFE42D2BF01F005140 +:10E92000C7B06D38FAC7FFC8707B0E9CF6CAFFC827 +:10E930002D2BF01F004D089B0E9CF01F004CC0417A +:10E94000300C2EBDD83231CA0E9BFA0A0002049C4C +:10E95000F01F0047049CF01F004730080E9A500833 +:10E960001A97089B1A9CF01F00446D38707930E8A4 +:10E97000F33A005EF00A1800C670EB3A0074580AC9 +:10E98000CE006D387079EB380075F33B005EF60809 +:10E990001800C0F0EACCFF8A3009C0581938F608D0 +:10E9A0001800C0502FF9123AFE99FFFA123ACC9093 +:10E9B000049CF01F0032CC50049B1A9CF01F0030C6 +:10E9C0001A9B029CF01F002F049B009CF01F002D3F +:10E9D000089B31CA4A2CF01F00266D3830AA707B84 +:10E9E000E6CCFFE42D2BF01F00226D38312A707B1E +:10E9F000E6CCFFDA2C8BF01F001E029B304AE6CCDF +:10EA0000FFC8F01F001B009BE6CCFFC4304AF01F7C +:10EA10000018301CC97B6D38312A707BE6CCFFDAD8 +:10EA20002C8BF01F0010FE91FF7E304AE6CBFFC812 +:10EA3000029CF01F000FE6CBFFC4009C304AF01F81 +:10EA4000000C301CC7FB049CF01F000FFE90FF7AE7 +:10EA50001A9CF01F000EC92B8001EF6C000079E8B2 +:10EA60008000917C80018124800182BC800091DC47 +:10EA700080018658800181E8800182608001817E6A +:10EA8000800180CC80018360800185F4EBCD40FC67 +:10EA9000FACD0110300733095407FEF3022EE6F8D1 +:10EAA00000F854281896129B0E9C8D19F01F0088B0 +:10EAB0008D0C1895E080008A3018303C8D588D4CB4 +:10EAC000F01F0084FACBFEFC1894FACAFEF8FACCC8 +:10EAD000FEF2F01F0081442871390E9CE06B00ECBF +:10EAE0007277F01F007BC710540CE0680420B83820 +:10EAF000442B7738707992D9EDB90000C6B0EDB9E2 +:10EB00000001C06144099238A1B8B238442BE8F83A +:10EB100000B85808C0C07738707A94D9EDB90009A8 +:10EB2000C06144099238A9B8B238442BFAC2FEF148 +:10EB3000441A049CF01F006944185818E08000A58E +:10EB4000C6823079FB38010FF2081800C050440922 +:10EB50009238A5A8B238440CF01F0061049CF01F45 +:10EB600000614428E74C0100EACAFFF071390A9CB1 +:10EB70004DDBF01F005E6858AA286869AA394D3C31 +:10EB800069B85808C440442B773870793078F33A24 +:10EB90000074F00A1800C240EAC9FFF4EACAFFF89C +:10EBA000300CF01F0053581CC53030063018E748B1 +:10EBB000004444095809C0A0FACCFF00F01F004DE2 +:10EBC0000C9C2BCDE3CD80FC30060C9C2BCDE3CDF3 +:10EBD00080FC44099238A1A8B238442BC99BF8F8AC +:10EBE00001AC5808C050F8CCFE54F01F004230CBA6 +:10EBF000300CF01F0037E74C01AC189AC080442855 +:10EC0000713B76794B8B28C9F01F003B442BCC5BC2 +:10EC10005828CA51442C1A9B2E2CF01F00381A96E3 +:10EC20001AD61ADC442BFB380116FB390117EF3AD0 +:10EC300000CF169CF6CBFF34F01F003144283289F8 +:10EC4000F15900D8442CF01F00262FEDC88BE8F8AE +:10EC500000B85808C2916AB93FF8F368009A3028A2 +:10EC60003039E7480044442891694426F01F0025C4 +:10EC7000ED4C004466B88B0866BC580CC2352FFCBE +:10EC800087BC3016C94B440BEF3A00AF169CFB38DB +:10EC9000010EFB39010FF6CBFF58F01F001B440C8F +:10ECA000F01F000FC5CB44287139727A94D8EDB8A3 +:10ECB0000001CD21189B6ABCF8CCFF66F01F001341 +:10ECC000CCFBF01F0013CDDB000087F48001D8DC03 +:10ECD0008001EF6C80017C4480017EE08001F03097 +:10ECE00080017BD88001D3EC8001AD408001E8EC4D +:10ECF0008001D3A88001D1588001887080018C2CBC +:10ED0000800145C480018B74800184F080018450AF +:10ED1000D431203D189616971493303CF01F0070A4 +:10ED2000301831798D588D4930086C068F0858039A +:10ED3000EDF81805E7F81A0018950DC40898A7D83B +:10ED4000C0505898C0302FDDD83A0DD93018F0098E +:10ED50001800C1003008F0041800F9B80500EFF8F9 +:10ED60005A00F9BC0501F9BC0401EFFC4A002FDD93 +:10ED7000D832303CF01F005A6C98F93A0074F13BDD +:10ED8000005E580ACE80F9380075F6081800C0A059 +:10ED900028AC30092FF91439CDE41938F00B1800DC +:10EDA000CFA1ECC0FFF8009CF01F004E1891CD30B1 +:10EDB0006BB85808C090793870793078F33A00749D +:10EDC000F00A1800C6E0FACCFFF8F01F0047581C04 +:10EDD000C0A0F01F0046029B835C350A31DCF01FA7 +:10EDE0000044CB9B40285818CF51FACCFFFCF01FB1 +:10EDF0000041581CCEF1401820785818FE9BFFEBBC +:10EE00004BD8F0F900F85809CE501A9CF01F003B7F +:10EE1000581CCE01400820285818FE9BFFDC6C9E31 +:10EE20002F4EFCE80000212DFAE90024FCE8000840 +:10EE3000FAE9002CFCE20010FAE30034FCE80018C8 +:10EE4000FAE9003CFD3C0020FB6C0044FD38002149 +:10EE5000322AFB6800454AAB1A9CF01F002AF01FBB +:10EE6000002A2EED580CCB606C9A3FF8F53900C89B +:10EE7000F0091800CAF06008F51B00D4202D6C6C56 +:10EE8000500801C9BAC901D8BAD8F01F0020A56C32 +:10EE900049FB310A180B315CF01F00152FEDC9AB8F +:10EEA0004955EAF801AC5808C050EACCFE54F01FAE +:10EEB000001930CB300CF01F0018EB4C01AC189A45 +:10EEC00048D5580CFE90FF816338494B707928C9AA +:10EED000F01F00136A98ABB88B98C76B8001EF6C7A +:10EEE00080015D44800177A4800145C480014658BB +:10EEF00080015F44000087F480015F2800008C607F +:10EF00008002E736800189108001E33C00008B5CC1 +:10EF10008001D3A88001D8DC8001D3EC8001D158D6 +:10EF2000EBCD40E0206D300818991495502850081A +:10EF30001A9C1A965D191897C10140085808C040DC +:10EF40001A9CF01F0009402C580CC030F01F00071D +:10EF50000E9C2FADE3CD80E01A9C5D15581C5F0719 +:10EF6000CEDB00008001D3A8800091E858DCE08867 +:10EF700000035EFD49B8F00C032F49B8F0CCFFF454 +:10EF80005EFC4998F0CCFFE45EFC4978F0CCFFD4FD +:10EF90005EFC4958F0CCFFCC5EFC4938F0CCFFC495 +:10EFA0005EFC4918F0CCFF305EFC48F8F0CCFF1C4A +:10EFB0005EFC48D8F0CCFEF45EFC48B8F0CCFEBC59 +:10EFC0005EFC4898F0CCFE945EFC487C5EFC486891 +:10EFD000F0CCFFFC5EFC4848F0CCFE785EFC000004 +:10EFE0008003C01400000260483930089318930869 +:10EFF0005EFC000000008C844828700C5EFC000061 +:10F0000000008C84EBCD40C0487618976C1C580CDF +:10F01000C030F01F00060E9CF01F00058D1CE3CDD4 +:10F0200080C0000000008C8480018AD480018AECBA +:10F03000EBCD40C0487618976C0C580CC030F01FD0 +:10F0400000060E9CF01F00058D0CE3CD80C0000073 +:10F0500000008C8480018ABC80018B30D4211894FC +:10F060001696149530CCF01F00121897C1D03018A6 +:10F0700099069915F0060946EC0C1502F01F000CD4 +:10F080008F2CC0F05806E08A000B3009129A6E28C7 +:10F09000F009092A2FF91236FE99FFFB8907DA2AAF +:10F0A0000E9CF01F00043FDCD8220000800092007C +:10F0B000800091E8D4311893169214901291580C54 +:10F0C000C36078093018760CF0090945580CC390D4 +:10F0D000189468160A36C1A468075807C0606E48BD +:10F0E0000238C1B03FCCD832662CF8060327580747 +:10F0F000CF71ECC8FFFFF808002CC0582FF8190793 +:10F100005807CEE110960A38CFA5089CF01F0013CF +:10F1100030083FEC8508D832029A009C6E3BF01F05 +:10F120000010301C89166E088908D832760C580CED +:10F13000C040F01F000ADA3A66093018F0090945A4 +:10F14000308CF01F00081894C060850C30089918A6 +:10F150009908CC0BD8320000800091E8800091DC47 +:10F1600080009200D431109412907818409618952F +:10F17000169214910C9B780A089C5D181893318C98 +:10F18000F01F00131897C1F00C9CF01F00118F3C6A +:10F19000C170089B0C9AF01F000F30088F468F1229 +:10F1A0008F218F508F086A29F203002C78085808A5 +:10F1B000C0C0109970085808CFD19307DA3A0E9C56 +:10F1C000F01F00053FDCD8329907DA3A8000920040 +:10F1D000800091DC800091E8D431203D501C500B20 +:10F1E000149112921090580AC4307418009B740A3B +:10F1F000129C5D18A36C502C6228F00C0307580772 +:10F20000C3706E450A990035C3610E940E93C09881 +:10F210006E075807C2D008936E490A39C2C10E94CE +:10F220006E3B0A9A049CF01F00181896CF214019D3 +:10F230006E18930840086E2991098F1C8F2C6E3C24 +:10F24000F01F00128F468F3640296228F009000C0B +:10F2500078090E39EFF80000F9F80A00EFF810000D +:10F26000E7F81A000E9CF01F00092FDDDA3A3FEC98 +:10F270002FDDD8326E385808CFB00039CF903FCC50 +:10F280002FDDD8328000917C800091E8163C5E0C26 +:10F290007808971C990B97085808F1FB1A015EFC37 +:10F2A00078195809F9F81000F3F81A007808580886 +:10F2B000F1F91A013008990899185EFCD40149380F +:10F2C000FACEFFFC709CE21C0002C1D0209DFD3AEA +:10F2D0000021FB6A0021FCE80000FAE90000FCEADA +:10F2E0000008FAEB0008FCE80010FAE90010FCEA5C +:10F2F0000018FAEB0018FD380020FB680020F01F12 +:10F3000000042F7DD8020000000087F480015AA479 +:10F31000D4014898709CE21C0002C0C0300930CC77 +:10F32000EA1C4000303B129AF01F0004F01F00045A +:10F33000301CD802000087F4800186C88001875401 +:10F34000D4014898709CE21C0002C0C0300930DC37 +:10F35000EA1C4000303B129AF01F0004F01F00042A +:10F36000301CD802000087F4800186C880018754D1 +:10F37000D4014898709CE21C0002C0C03009310CD6 +:10F38000EA1C4000303B129AF01F0004F01F0004FA +:10F39000301CD802000087F4800186C880018754A1 +:10F3A000EBCD4080495818977098E2180002C04190 +:10F3B000109CE3CD8080F01F00126F38302911EAD5 +:10F3C000F20A1800C0D03009303B129A307CEA1C97 +:10F3D0004000F01F000CF01F000CE3CF90806E681F +:10F3E0005898CF213009303B129A30BCEA1C4000BB +:10F3F000F01F0004CF1B0000000087F4800158407C +:10F40000800186C88001875458DBE08A0012F939F0 +:10F41000000C3078F0091800E08B000C595BE08A92 +:10F420000008F939000E3AA8F0091800C0D05EFDB6 +:10F430003888F0091800CFC1F939000D38E8F00913 +:10F4400018005F0C5EFCF938000FF2081800CF01BD +:10F45000F93900103038F0091800CEA1F93900113F +:10F460003008F0091800CE41F93A0012F20A1800EB +:10F47000CDF1F9380013F4081800CDA1F9390014C2 +:10F480003888F0091800CD41F939001538E8F0093D +:10F4900018005F0C5EFCD7033019482891095EFC08 +:10F4A00000007A38EBCD40C0208D48D730088E0957 +:10F4B000F0091900C101E06AFFFF300B1A9CF01F30 +:10F4C00000091A9B302AFACCFFE8F01F00079A18AF +:10F4D0001A96AE088E0C2F8DE3CD80C000007A2ADC +:10F4E0008001C7B88001A498D401F01F00054858D6 +:10F4F000F139010B120C5C8CD80200008001F4A4DD +:10F50000000087F4EBCD4060208D306AFAC5FFE63D +:10F51000300B0A9CF01F00091A9CE06AFFFF300BB9 +:10F52000F01F00070A9C1A9B302AF01F00061A964B +:10F530009A1C2F8DE3CD8060800091D08001C7B8E8 +:10F540008001A444D43120DDFEF60234FACEFFA8B7 +:10F55000189516916C9C1494129310907C177C0251 +:10F56000E21C0002C0312F3DD832FEF802167009AD +:10F570005809C041FE7CFBB4CF7BECF8012458183D +:10F58000C041FE7CFC17CF0BECC9FFE85019129C60 +:10F59000F01F007D581CE08000E30D890D98F009F4 +:10F5A0001800E08200E6302CF01F0078E08000D2E6 +:10F5B0006CB850282FF88DB85807FBF91002EFF9F6 +:10F5C0001A00F01F0073C0E0029B0A9CF01F00713C +:10F5D000E08000C96C98EDB80006C0414E88402913 +:10F5E00091D9F01F006D6008EFDCB010F3D7C010A8 +:10F5F00050091039E08B006C0D882FF8AC880D99FC +:10F60000F0091800C061300A320C149BF01F00632F +:10F61000E8C800020E08FB58002EED38010B30043C +:10F62000FB680032400A300BFB640030FB640031A1 +:10F63000FB640033069CF01F005A069BFAC7FFF4D8 +:10F64000400A0E9CF01F0057300A0E9BFACCFFD2E6 +:10F65000F01F0055ED38010BF9D2C003BA78F01F46 +:10F660000053300CFB520028FB5C002AE041003EB6 +:10F67000E0880008EB39000C3888F0091800C2D087 +:10F680004028300A50980E9BFACCFFDCF01F00484F +:10F690004009ECCCFFE88109F01F0046F01F00464E +:10F6A0003008ED4C00CCED5800D04C49F30A014233 +:10F6B000F00A1900C0604B297298EDB8000EC031F5 +:10F6C000301CC52BF01F003E301CC4EBECCCFFE817 +:10F6D000F01F00383FFCC48BEB39000D38E8F0090F +:10F6E0001800CCF1EB39000E3018F0091800CC915D +:10F6F000EB39000F3038F0091800CC313028EB3BE3 +:10F700000012F00B18005F1A3FE8F00B18005F19A9 +:10F71000126AE80A1800CB51EB380013E218001DFA +:10F720005818CAF1EB380014E21800C85888CA917A +:10F73000189A31F9EA090708F4081800CA212FF9C4 +:10F74000E049003FCF81E0680400FB58002AC99BD4 +:10F75000401CF01F0018FE7CFAECC06BFE7CFC160F +:10F76000C03BECCCFFE8F01F00133FECCFDA401CAD +:10F77000F01F0010FE7CFB4FCF7A0000000087F4E2 +:10F7800000007A38800145DC80019F3080015F04F1 +:10F790008001F4088001F4E880014658800091D08F +:10F7A0008001C7B88001A4448001859C8001A49891 +:10F7B000800145EC800145C4000002608001FBFC33 +:10F7C000D401302CF01F0003300948389109D802C9 +:10F7D0008001A12800007A38D431FACD01385009CF +:10F7E000FACEFEA416971896FEFB031C14947C1305 +:10F7F0007C00F6F801245818C460FEFA030A749CD1 +:10F80000E21C0002C05118970E9C2B2DD832E068E4 +:10F8100000F8FAC5FEFCF5D7C0100C9B0A9C548872 +:10F82000549654A730025472F01F00B8FAC1FEE497 +:10F830000A9B029CF01F00B644C95879E08B00284F +:10F840003018F0090948E2180085C2104488FAC946 +:10F85000FFF45012502854D944D80A9B5478029C83 +:10F86000F01F00ACC1C1302744D95809CCE0FAC818 +:10F87000FFF41039CCA0FACCFECCF01F00A70E9CF0 +:10F880002B2DD83230270E9C2B2DD832448B300CA8 +:10F89000F01F00A2E08000B354DCCDFB44C9E04976 +:10F8A000003FE088000B300744B8EDB80007E08067 +:10F8B000009EF01F009BCD9BFEF80268F009032F0D +:10F8C000ECCAFFFC1588EC08000889080DD81589DA +:10F8D000400BEE0901093067F208010A970A44B8A3 +:10F8E000CE5B44B8F0C90001E0490097E088008988 +:10F8F000447CF01F008D44C8189A300944BC303B4A +:10F90000BFBCF9E8108CF01F0089F01F0085301B88 +:10F91000300CF01F008744B83027CC8B44B8E04847 +:10F920000082C090E08900A9E0480080C040E04823 +:10F930000081CEE10E9B0C9CF01F007ECE9B44B854 +:10F94000E0480082E08000C4E08900915978E080BE +:10F9500000C4E0480081CCD1029CF01F0077CD8B21 +:10F9600044B85808C7E144D65803EDF81000E7F84A +:10F970001A008C28A008FB1A0106445814088908AC +:10F98000FB190104F20A0105400A30EB95056807EE +:10F990000E9CF01F006AE08000AE4DB9F2F801D075 +:10F9A0005808E080009E0A9B0E9C5D18E08000993C +:10F9B00030270DE84D4BF768007B44B8C77B44B84F +:10F9C0005818CB90E0480080CA31CB5B447B44BCE4 +:10F9D000F01F005B44BCF8C800805818FE9BFF99DC +:10F9E000029B5C5CF01F0057C93B30084C69300B30 +:10F9F000B2A8169CF01F0054C5DB3FD7C06B4D3832 +:10FA0000F009032F029CF01F0052C82B029CF01F2C +:10FA10000051C7EB029CF01F0050C7AB029CF01FC7 +:10FA2000004FC76B029CF01F004EC72B029CF01FBB +:10FA3000004DC6EBF01F004C4B3AF54C00D4C68B82 +:10FA4000029CF01F004AC64B029CF01F0049C60BE7 +:10FA5000029CF01F0048C5CB447CF01F0047C58BBB +:10FA6000E0480081C1403027C21BF0C8008F5828F1 +:10FA7000FE9BFF40C4DBE0480084FE90FF5DFE95E6 +:10FA8000FF5BE0480085FE91FF44C55B49E91388B0 +:10FA900020185C58B28844D7C29049BB7698E218C7 +:10FAA0000040C20076D96E081039E088002944B8B9 +:10FAB000A7D854B85803F9B70003EFF81000E7F8D7 +:10FAC0001A00F9B70103FBF8104BCF0A447B32EC64 +:10FAD000F01F002AC1DB029CF01F0029C19B3047A8 +:10FAE000C69B0FD8F768007ACE3B302CF01F00255C +:10FAF000CD5BF01F0025CF403FE7C5CBF01F0023B3 +:10FB0000CD7B0000000087F48001C7B88001BF10E2 +:10FB10008001BF448001D3A88001D8DC80018754D4 +:10FB20008003C04C8001870C800186C880016A88F0 +:10FB3000800237E8800208948001F4088001708C0C +:10FB40008001725480018CE48003C14C8002084023 +:10FB50008002085880020864800208708002087CD5 +:10FB600080020888800145C48002084C8002083465 +:10FB7000800209B48001DA3480016D6C8002094092 +:10FB80008001A12880015F048001F310EBCD406863 +:10FB90003006493C1AD61AD649250C9899064929A7 +:10FBA000492A302B0A9CF01F001249231AD60C98C0 +:10FBB0001AD60699490A303BEACCFFFCF01F000C2C +:10FBC0000C981AD606991AD6EACCFFF848BA305BD8 +:10FBD000F01F0007301C2FADE3CD806800007A389D +:10FBE00000007A2C8001F4988003C3AC80016EB8C9 +:10FBF0008001F7C08003C3C48003C3E05EFCD70369 +:10FC0000EBCD40E0203D1897580CC1F07938707A60 +:10FC100094D9EDB90001C1D04C166C785828C15068 +:10FC20000E9CF01F0040C110ED3900943FF8F00920 +:10FC30001800C1405017FACAFFFC1A9BFACCFFF615 +:10FC4000F01F0039581CC180301C2FDDE3CD80E04F +:10FC50004B366C785818CE51CF8B202D306A1A9CB9 +:10FC60004AFBF6CBFF4AF01F0031F01F00312FEDA9 +:10FC7000580CCEB1CE0BFAC5FFF5400A401B0A9CCA +:10FC8000F01F002C581CCE113079FB38000BF20805 +:10FC90001800C35140187139727A94D8EDB8000435 +:10FCA000CD404A5AF4F801045818C3206DE85808AA +:10FCB000C1D1ED3B008049AA580BC2806F387079E2 +:10FCC000F5380081F33C005EF8081800C1F0F4CA72 +:10FCD000FF7E3009C0581538F8081800C0402FF9C9 +:10FCE0001639CFA516395F0CCB1B48D973F85808C5 +:10FCF000CE10F4F801AC5808CDD1CA7B0A9CF01F95 +:10FD0000000FF01F000FCA10CCDB3009CECB3059EA +:10FD1000FB38000BF2081800C981CC9B0000026080 +:10FD2000800189D080017C448002E736800188B060 +:10FD300080017EE0000087F480017BD880017C1088 +:10FD4000EBCD40E048D818961695F0F700F058072C +:10FD5000C0E00E9CF01F000AC0715806C0A00E9CA7 +:10FD60000A9B5D16C0606E075807CF41E3CF80E065 +:10FD70000E9CE3CD80E00000000087F48001FC00D1 +:10FD8000D401F01F0002D80280021500EBCD40F82C +:10FD9000204DE0683100EA18312EE069312EEA1971 +:10FDA000322E306CFAE90000F01F00631894E080F6 +:10FDB00000B9303CF01F00611896301CF01F005F46 +:10FDC000306A202D189B18951A9CF01F005DF01FBB +:10FDD000005D2FED580CE080008732B80A9C1AD8DD +:10FDE000308930084D8A306BF01F00582FFD1A9370 +:10FDF000ECFC00D8F01F0056ECFC00DCF01F0055B6 +:10FE0000ECFC00E4F01F0054ECFC00E8F01F005391 +:10FE1000ECFC00ECF01F0052ECFC00F0F01F005175 +:10FE2000ED3C00B7F01F00506DC85808F9B801014B +:10FE3000EDF81A1BED3C006FF01F004CECFC012CA0 +:10FE4000F01F004BF01F004BF01F004BF01F004B4A +:10FE5000F01F004BECF800F85808C6616D084C978D +:10FE6000EF4800D8ECFC0130F01F0047300830A903 +:10FE700032B54C6A1AD5E06B0080EECCFED8F01F8C +:10FE80000033EEC6FE58304A300B0C9CF01F004089 +:10FE900030081AD530594BFA0C9C304BF01F002B10 +:10FEA0004BD82FEDF10A01423009F20A1900C26065 +:10FEB0006E99EDB9000EC201A7B930688F9950381C +:10FEC0001A9CFAC8FFF8FAC9FFF4089A308BF01FA1 +:10FED00000331897581CC140089CF01F00312FCDEB +:10FEE000E3CF80F8189A0A991A933068308B1A9CDD +:10FEF000F01F002CC7EBF01F002C6E99CDEB089C77 +:10FF0000F01F00273009303B129A311CEA1C4000D8 +:10FF1000F01F0026F01F00260E9C2FCDE3CD80F8A9 +:10FF20002FCDE3CD80F8300A301B149CF01F002148 +:10FF3000C96B0000800092008001EF6C8002E73600 +:10FF4000800188B08003B804800176C480020594E3 +:10FF500080020538800204DC8002048080020424D0 +:10FF6000800203C8800202F880020374800202D477 +:10FF70008002078C800168AC8002017080020EFC58 +:10FF8000000087F48002031C8003C400800091D02D +:10FF90008003C40C00000260800174C8800091E8F6 +:10FFA0008001776C8001FBFC800186C8800187544A +:10FFB00080020B34EBCD406830094AF63068ACA9BA +:10FFC000AC893129314AAC988D99300530130A9BA0 +:10FFD000ED4500ECED4500E88DA58DC5ED550040E3 +:10FFE000ED550042ED55004EED4500D88DB3ECCCFB +:10FFF000FEF0F01F0022ED450124F01F0021ED5519 +:02000004800278 +:1000000000D0ED4C00CCED5500D249ECF01F001EA5 +:10001000F01F001EED4501B8F01F001DF01F001D70 +:10002000F01F001D0A9BECCCFF48F01F001C0A9B30 +:10003000ECCCFF44F01F0019069BECCCFF40F01FF6 +:100040000017069BECCCFF3CF01F0014ED4300446E +:10005000F01F0013F01F001330DCF01F0013F93CF9 +:10006000000FF01F0012F01F0006ED4C01CC069CA3 +:10007000E3CD8068000087F4800091D0800145C402 +:10008000000084CC80017B24800237D080016CDCAE +:100090008001FB8C8001EFE8800144F8800187C873 +:1000A000800205EC8001EF6C800202B8EBCD40606D +:1000B000E06A01F8300B49D518960A9CF01F001C25 +:1000C000F01F001C0C9CF01F001CEACCFFF4F01F7A +:1000D000001BEACCFFE0F01F0019EACCFFF0F01F94 +:1000E0000017EACCFFECF01F0016EACCFFE8F01F87 +:1000F0000014EACCFFE4F01F0012300930DC1AD9FA +:100100001298129A129BF01F000FF01F000FF01FA1 +:10011000000FF01F000FF01F000FF01F000F301C2A +:100120002FFDE3CD80600000000087F4800091D0B7 +:1001300080016F4880021124800145D6800145F27C +:100140008002067C80014690800149B88001804091 +:1001500080015F98800201584848300A4849911848 +:10016000910A930A5EFC000000007A3C00007A4489 +:10017000D421219D4A846808F3D8C001FB6900633B +:10018000E2180002C14030183005FB6800634A3CA9 +:10019000F01F00233018189BFAC9FF9D300A49FC54 +:1001A000F01F0020581CC2802E7DD8225809C1C0E3 +:1001B000109549D870065806CEB0EA050019FA091C +:1001C00000170C9B0E9C306A2FA72FF5F01F00170D +:1001D0006C265806CDD05905CF516808F1D8C0011A +:1001E000F0051700CD5B306AE06B00FF1A9C3015FC +:1001F000F01F000FCDFB48FCF01F0009EA050018B6 +:10020000189BA1781A99300A48ACF01F00062E7D81 +:10021000D822000000007A448003C414800091B802 +:100220008001776C00007A3C800091DC800091D0E6 +:100230008003C41CD40148697208104C930CEDBCB7 +:100240000002C021DA0AF01F0003D80200007A443D +:1002500080020170EBCD408048C76E095809C1305B +:10026000722A580AF3F80003EFF80A01F3F81003B2 +:10027000F5F81A037238129C910AF01F00056E09F6 +:100280005809CEF1E3CF908000007A3C800091E8DD +:10029000D401F01F0007581CC020D802485972082A +:1002A000EDB80002CFB0F01F0004D8028002025463 +:1002B00000007A4480020170F8C900013058F0094A +:1002C0001800E08B00054838B09C5EFF3FCC5EFC18 +:1002D000000087F4D401201DFAC9FFFC12DC1A9932 +:1002E0003048300A307B483CF01F00032FFDD80215 +:1002F0008003C43C8001776CD401201D3018BA8C77 +:100300001A99300A306B484CF01F0004581C5F0CDF +:100310002FFDD8028003C45C8001776CEBCD406870 +:10032000201D48F61893FAC5FFFC2F060AFC0C9C0A +:10033000F01F000C303CF01F000CF94301300C9C06 +:10034000F01F000A0A993018300A307B488CF01FE1 +:100350000009581C5F0C2FFDE3CD8068000087F476 +:10036000800145FC8001EF6C800145FE8003C46C78 +:100370008001776CEBCD4040201D48E6BA8C2F06FB +:100380000C9CF01F000D303CF01F000C1B88F9483E +:10039000006C0C9CF01F000A30181A99300A309B30 +:1003A000488CF01F0009581C5F0C2FFDE3CD8040E6 +:1003B000000087F4800145FC8001EF6C800145FE60 +:1003C0008003C4748001776CEBCD4068201D1898C1 +:1003D0005CB81895FAC3FFFC48D606D82F060C9CCB +:1003E000F01F000C303CF01F000CF94500F00C9C95 +:1003F000F01F000A1A993048300A309B488CF01FD1 +:100400000009581C5F0C2FFDE3CD8068000087F4C5 +:10041000800145FC8001EF6C800145FE8003C480B3 +:100420008001776CEBCD4068201D18985CB818955A +:10043000FAC3FFFC48D606D82F060C9CF01F000C10 +:10044000303CF01F000CF94500EC0C9CF01F000A3A +:100450001A993048300A309B488CF01F0009581C0C +:100460005F0C2FFDE3CD8068000087F4800145FC20 +:100470008001EF6C800145FE8003C48C8001776CA5 +:10048000EBCD4068201D18985CB81895FAC3FFFCA6 +:1004900048D606D82F060C9CF01F000C303CF01FED +:1004A000000CF94500E80C9CF01F000A1A9930482E +:1004B000300A309B488CF01F0009581C5F0C2FFD40 +:1004C000E3CD8068000087F4800145FC8001EF6C7B +:1004D000800145FE8003C4988001776CEBCD4068B5 +:1004E000201D18985CB81895FAC3FFFC48D606D8AA +:1004F0002F060C9CF01F000C303CF01F000CF9453F +:1005000000E40C9CF01F000A1A993048300A309B16 +:10051000488CF01F0009581C5F0C2FFDE3CD80684C +:10052000000087F4800145FC8001EF6C800145FEEE +:100530008003C4A48001776CEBCD4068201D18981F +:100540005CB81895FAC3FFFC48D606D82F060C9C59 +:10055000F01F000C303CF01F000CF94500DC0C9C37 +:10056000F01F000A1A993048300A309B488CF01F5F +:100570000009581C5F0C2FFDE3CD8068000087F454 +:10058000800145FC8001EF6C800145FE8003C4B012 +:100590008001776CEBCD4060201D48F5BABC2F057B +:1005A0000A9CF01F000E303CF01F000DFAC6FFFC45 +:1005B0000D78F94800D80A9CF01F000A0C993018F1 +:1005C000300A306B488CF01F0009581C5F0C2FFD5F +:1005D000E3CD8060000087F4800145FC8001EF6C72 +:1005E000800145FE8003C4BC8001776CEBCD40C028 +:1005F000206D49EC3008F939010DF93B010850082C +:1006000050281AD9F93A010C1ADAFAC7FFF8F93961 +:10061000010AF93A01090E9CF01F00152FED580C44 +:10062000C10140085808C0401A9CF01F0012402C1D +:10063000580CC040F01F0010300C2FADE3CD80C02F +:100640001A9CF01F000E400818965808C0401A9CCB +:10065000F01F0008402C580CC030F01F000758163F +:100660005F0C2FADE3CD80C0000087F48001DAE499 +:100670008001D3A8800091E880018E9CD4214C0792 +:10068000405EEF6C0108EF6B0109EF6E010D1495F0 +:100690001294109A3019F2081800C120EEF801B037 +:1006A0005808C3D05828C4C04B5CEF3B01B5338811 +:1006B000F00B1800C5403398F00B1800C440EF6AE7 +:1006C000010CF01F0030EDDCB010F01F002F0C0CFF +:1006D0005C5C5805C1E11895F01F002A1815EF65FC +:1006E000010AF01F0029EDDCB010F01F00260C0CF1 +:1006F0005C5C5804C3F11894F01F00221814EF64D6 +:10070000010B6E98EDB80001C031F01F0020DA2A0D +:10071000EA0C1800FE98FFE23FCCD822EF3901B571 +:100720003348F0091800CC11EF3901B63418F0093C +:100730001800FE98FFC630E8EF68010CCC3BEF696B +:10074000010CCC0BEF3901B63408F0091800FE9803 +:10075000FFB8301948A8F169010CCB4BF93901B643 +:100760003408F0091800FE98FFA835A8F968010CB4 +:10077000CA9BE80C1800FE9BFFD1CBFB000087F45E +:100780008001F4A48001F504800205ECEBCD40E08B +:10079000303CF01F002330CB18954A26300CF01F58 +:1007A0000022ED4C01AC1897C360303BF01F001FD6 +:1007B0008F2CECF901AC72275807C2903078300BBF +:1007C000B2883068ECFA01ACB498ECF901ACB2AB89 +:1007D000ECF801ACB0BBECF901ACB2CBECF801AC7D +:1007E000EB390075702AB489ECF801ACEB39007470 +:1007F000702AB499ECF801ACEAFB00847029B2AB22 +:10080000ECFC01ACF01F000AE3CF90E0ECCCFE540E +:10081000F01F00080E9CE3CD80E000008001EF6C2B +:10082000000087F48001D8DC8001D3EC800208D47A +:100830008001D3A8D401F01F0002DA0A8001DA5641 +:10084000D401F01F0002DA0A8001DF30D401F01F6A +:100850000002DA0A8001DBE8D401F01F0002DA0AA4 +:100860008001DC04D401F01F0002DA0A8001DC20E0 +:10087000D401F01F0002DA0A8001DC3CD401F01F31 +:100880000002DA0A8001DC58D401F01F0002DA0A03 +:100890008001DC74D401201D1A9BF01F000CC09055 +:1008A00040085808C06048AA7499EDB90000C030EB +:1008B0002FFDDA0A1298A1C831CC9598300A149B02 +:1008C000F01F00042FFDDA0A8001D98C000087F4A4 +:1008D00080014658EBCD40C0206D4958189B709C54 +:1008E000E21C0002C06118970E9C2FADE3CD80C0C2 +:1008F00030081A96502850081A9CF01F000EC1119B +:10090000189740085808C0401A9CF01F000B402C54 +:10091000580CCEB0F01F00090E9C2FADE3CD80C067 +:100920001A9C3017F01F0006CEDB0000000087F491 +:100930008001DED08001D3A8800091E880018E9CE8 +:10094000EBCD4080201D300A1A9BF01F0017C0F02D +:1009500040085808C0F149576E99EDB9000BC071B5 +:10096000EEF801A84917F1D8C001C1212FFDE3CF4E +:10097000908048E76E99EDB90000CF01A1C9300A17 +:100980008F9931CC149BF01F000A6E99CE7BEEFC40 +:1009900001ACF01F00086E98301CABD88F982FFD6B +:1009A000E3CD80808001ED10000087F4800146587F +:1009B000800208D4D401F01F0002DA0A8001DBD0E3 +:1009C000EBCD40FC206D4A5318951097169266980F +:1009D0001496109C1294E21C0002C2D05BF5C30175 +:1009E000303CF01F001F300BF3D7C010F5D4C010FF +:1009F0001AD90C981ADAF3D2C010504B502BFAC601 +:100A0000FFF8F93B00F70A9A0C9CF01F00162FED37 +:100A1000580CC1B1189740085808C0401A9CF01FE4 +:100A20000012402C580CC030F01F00100E9C2FAD4F +:100A3000E3CD80FC18970E9C2FADE3CD80FCEDB884 +:100A40000000CCF13FB7CF3B6698A1A81A9C8798CD +:100A50003017F01F0007CE0B000087F48001EF6C09 +:100A60008001DB588001D3A8800091E880018E9C32 +:100A7000D40130085C7B1099109AF01F0002D80254 +:100A8000800209C0D4013008364B1099109A109C8E +:100A9000F01F0002D8020000800209C0EBCD40E048 +:100AA00020AD3006507CFB6B00201497500650267A +:100AB0001A95FACAFFDCFACBFFE81A9CF01F00195E +:100AC000C111189640085808C0401A9CF01F001623 +:100AD000402C580CC030F01F00150C9C2F6DE3CD3E +:100AE00080E05807C09040980E9B0C9C8F28F01F08 +:100AF0000010581CC0611A9C3016F01F000ECE3B2F +:100B000040085808C0401A9CF01F0007402C580CA1 +:100B1000C0313FD6CE3BF01F00053FD6CDFB0000D5 +:100B20008001DC8C8001D3A8800091E880016C40BA +:100B300080018E9CD401F01F0002D80280020A9C22 +:100B4000EBCD40E0209D3018189A1697F00C09481C +:100B50004A5B7609F1E9000CC06118970E9C2F7D65 +:100B6000E3CD80E0F00811FF12683006507A970854 +:100B7000500650261A95FACAFFE0FACBFFE81A9CF5 +:100B8000F01F001AC1E05807C09040880E9B0C9CD3 +:100B90008F28F01F0017581CC1611A9C3017F01FD6 +:100BA000001540085808C0401A9CF01F0013402C44 +:100BB000580CCD50F01F00110E9C2F7DE3CD80E02E +:100BC0001897CF0B40085808C0401A9CF01F000A25 +:100BD000402C580CC0313FD7CC2BF01F00083FD71A +:100BE000CBEB000000007A4C8001DCEC80016C4013 +:100BF00080018E9C8001D3A8800091E8EBCD40F865 +:100C0000216DFAC6FF901897FB69000EFB68000F74 +:100C1000FB6B0010FB6A00116CF46D036D15ECCCDE +:100C2000FFD4F01F0038306ABA6CECCBFFDCFACC92 +:100C3000FFEDF01F00350D88FB6800190D99ECCB16 +:100C4000FFFEFB69001A320AFACCFFE5F01F002E06 +:100C50004AEE30097C0B301CF809094AF5EB000814 +:100C6000C0902FF95899CF9130060C9C2EADE3CD52 +:100C700080F8F7EA10089D085BF9CF705024FB63F9 +:100C8000001250195807EFF91A003006FAC7FFC4CE +:100C900050F65116FACAFFAC1A9B0E9CF01F001CAE +:100CA000C111189640F85808C0400E9CF01F00195A +:100CB000411C580CCDB0F01F00180C9C2EADE3CD9C +:100CC00080F85805C09041580A9B0C9C8B28F01F57 +:100CD0000013581CC0610E9C3016F01F0011CE3B53 +:100CE00040F85808C0400E9CF01F000A411C580CE8 +:100CF000C0313FD6CBBBF01F00083FD6CB7B0000F6 +:100D000080018058800091DC00007A4C8001DD4C2D +:100D10008001D3A8800091E880016C4080018E9C06 +:100D2000D42120DD4B0510946A0E4126F1DEC0016E +:100D3000C0B0EDBE0001C411EDBE0002C411300709 +:100D40000E9C2F3DD82210973018FB6B002A508A3A +:100D50005077FDE8100850998B08FB540028580C78 +:100D6000F9F71A001A953007FACAFFD05007502732 +:100D7000FACBFFE81A9CF01F001DC101189740082C +:100D80005808C0401A9CF01F001A402C580CCD90F7 +:100D9000F01F00180E9C2F3DD8225806C09040C866 +:100DA0000C9B0E9C8D28F01F0014581CC0C11A9C6F +:100DB0003017F01F0012CE4B30173028CC7B302775 +:100DC0003048CC4B40085808C0401A9CF01F00081F +:100DD000402C580CC0313FD7CB4BF01F00063FD7FB +:100DE000CB0B000000007A488001DDAC8001D3A865 +:100DF000800091E880016C4080018E9CEBCD40E04A +:100E0000207D300616975006189B50261A95FACA70 +:100E1000FFE81A9CF01F001AC111189640085808E4 +:100E2000C0401A9CF01F0017402C580CC030F01F17 +:100E300000160C9C2F9DE3CD80E05807C1904068C0 +:100E40000E9B0C9C8F28F01F0011581CC1104008ED +:100E50005808C0401A9CF01F000B402C580CC0D002 +:100E6000F01F000930060C9C2F9DE3CD80E01A9CFA +:100E70003016F01F0007CD3B1896CDCB8001DE0C5D +:100E80008001D3A8800091E880016C4080018E9C95 +:100E9000D40120CDFB5A0012FB590014FACAFFCC32 +:100EA000502874197408FB590016501874397428A6 +:100EB000FB59001AFB580018745974485039FB58F4 +:100EC000001C74797468FB590020FB58001E74994B +:100ED000748850A95098300974A8FB6C0022FB5B01 +:100EE0000010FB68002C74BBFB6900231A9CF01FE8 +:100EF00000032F4DD802000080020DFCEBCD40EE28 +:100F000020CD3FF94CC850A950B94CC93005303CF0 +:100F100091059305F01F004A322A18961A971A9CD9 +:100F20000A9BF01F0048FAC3FFDE306AE06B00FF47 +:100F3000069CF01F00441AD5ED38004F1AD86D28D2 +:100F40001AD86D191AD9ED1800361AD8ED190032D1 +:100F50001AD96CE81AD8ED19002E1AD9ED18002A02 +:100F60001AD8ED1900261AD9ED1800221AD86C6982 +:100F700030BB1AD9301C6D08ED1900FEED3A001F88 +:100F8000F01F0031ECFB01282F4DF6C80001581866 +:100F9000E0880045ED3100F7ECCAFF8C30153006D3 +:100FA0001AD61AD540D81AD8F4E80000206D069B4E +:100FB000FAE900081A9CF4E20008306AFAE300102B +:100FC000F01F0022EF380021209DFB680021EEE891 +:100FD0000000FAE90000EEE20008FAE30008EEE89B +:100FE0000010FAE90010EEE20018FAE30018EF38FA +:100FF0000020029BFB6800200A990C98FACCFF9015 +:10100000303AF01F00130C9A2EED0C9B40ACF01FF1 +:1010100000110A9C2F4DE3CD80EE1AD50A98FACC28 +:10102000FFD05C5B0A99FE7AFF6AF01F000B2FFD70 +:10103000CB2B000000007A4C00007A488001EF6C56 +:10104000800091D080020E908002E73680020BFC77 +:1010500080020A9C80020D20D431202D500B189163 +:101060004A1776026E9CE21C0002C350304C5011AD +:101070005801E2021700F01F001DEEF700F0189073 +:101080005807C2D030043013C0A82FF45802C1B1A1 +:101090005801F9B301FF5805C1100A9760B66E05F3 +:1010A000F01F00130C9A189B0E9CF01F0012CEE04C +:1010B0000E9CF01F00115805CF114008069C9104AA +:1010C0002FEDD83240182012110C0E9B5018F01F33 +:1010D000000BCE2B1893069C2FEDD8320E943013B4 +:1010E000CEDB0000000087F48001EF6C800145C476 +:1010F000800159A080015CDC800184284828F0FC34 +:1011000000F85EFC000087F4486871195879F9B856 +:101110000001F9F80A00F9B80100F9F81A005EFFB9 +:10112000000087F44828F14C007C5EFC000087F446 +:101130004828F14C01D05EFF000087F4EBCD40C0A1 +:1011400018971496E04A0020E088000830083FF91C +:10115000B898B889E3CF80C02FECF01F00043008A6 +:10116000AE96AE88E3CF90C0800091DCEBCD40FC22 +:10117000206D18941695F01F00431897C1A0F939F7 +:1011800000CC3FF8F0091800C3910896EF3900A889 +:101190003FF8F0091800C5414BB8F0F700F85807C0 +:1011A000C0A1EC040104301C8B042FADE3CD80FC06 +:1011B0000896CF3BE06AFFFF300B1A9CF01F00330C +:1011C0006F38302A707C1A9B2F4CF01F00311A9216 +:1011D0006A0A9A93063AC0442FADE3CFC0FC0C9B39 +:1011E0001A9C5C7AF01F00296F380606707C1A9BE7 +:1011F0002F4C300AF01F0026CD5BE06AFFFF300B5A +:101200001A9CF01F0022302AEEC2FF341A9B049C65 +:10121000F01F00201A966A0A9A93063ACDE55C7A86 +:10122000089B1A9CF01F00191A9B049C300AF01F9F +:1012300000196A08E803000606188B08CA8BE06AE2 +:10124000FFFF300B1A9CF01F0011302AEEC7FF5829 +:101250001A9B0E9CF01F00101A926A0A9A93063A83 +:10126000CBC50C9B5C7A1A9CF01F00081A9B0E9C45 +:10127000300AF01F00096A08060606188B08C8DB4A +:101280008001EFF8000087F48001C7B88001D344E3 +:101290008001D6B08001D558D401F01F0002D802D9 +:1012A00080015D18EBCD40F8FACD00803225149313 +:1012B00018941297BA85FAC6FFFF0C9CF01F001B0A +:1012C000300806063019AC85AC981A951A9A498BE5 +:1012D000089CF01F0018C0503FFC2E0DE3CD80F895 +:1012E0000E9CF01F0015E04C0040C1701AD7493A1F +:1012F000E06B00800A9CF01F00120A9A3019491B0B +:10130000089CF01F000C2FFD1897580CCE61089C0C +:10131000F01F000D0E9CCE2B0E9A089C3019489B96 +:10132000F01F0004CDB0CD9B800091DC8003C4FC95 +:1013300080023BB8800091B8800399D0800091482A +:101340008003C50480024328D421210D300B4B6655 +:10135000169CF01F00368D0CC2B078075807C2A04B +:101360006F985808C2704B283014EF4400641A95E7 +:10137000340B1AD84AFA0A9CF01F002F08990A9ACF +:101380004AEB0E9CF01F002E2FFD580CC2506C082B +:10139000700CF01F002C6C09300893086C08700961 +:1013A0004A98722A910A6C09300893486C0C2F0DE8 +:1013B000D822F01F00261897CF70F01F00254A583A +:1013C0004A59118A4A5B0E9CF01F0025C2056E29FE +:1013D00049D89109CE9B08994A2A4A3B0E9CF01F96 +:1013E0000018C1C14A18340B1AD8492A0A9CF01FA8 +:1013F000001208990A9A49EB0E9CF01F00112FFD6C +:10140000580CC0C13088EF480054CC9B0E9CF01F94 +:10141000000D6C0930089308CC7B0E9CF01F00096E +:10142000CB7B000000008C8C80023B4C8003C50805 +:10143000800399D0800091488003C4FC80023BB8AF +:1014400080024190000003FC80024F4080023B225A +:10145000000004000000042800000404800212A41C +:101460008003C5108003C5148003C5188003C538E8 +:10147000D421169849871495189B109A49740E9C8C +:10148000A888F01F00170A9B30064965EF66002008 +:10149000341A0A9CF01F001449484959EB66004071 +:1014A000700B720CF01F00131896C0C0F01F0012D2 +:1014B0000A99098A0E9B0C9CF01F00106D185808A1 +:1014C000C021D822ECCAFFDC0A9C3209341BF01F71 +:1014D000000CD8220000040400000400800091DC0D +:1014E00000000428800091AC000003FC00008C8CFC +:1014F00080023B0680023B22800212A480023A68EE +:10150000D421210D328A300B1A9CF01F00301A9C16 +:1015100030073014504750544AD5F01F002E8B0C22 +:101520001A96C4A0FAC6FFD8318A0E9B0C9CF01FF5 +:1015300000274A984A990C9B50E850A96A0CF01F62 +:1015400000281896C3B04A7CF01F00274A761AD7A5 +:10155000304B1AD70E984A694A6AEC0B000CF01F00 +:1015600000260E981AD74A591AD74A5A302B0C9C83 +:10157000F01F00210E981AD74A291AD74A2A311B80 +:10158000ECCCFFF8F01F001C0E981AD749F91AD7B7 +:1015900049FA312BECCCFFF4F01F00170E982F8D79 +:1015A000ECCCFFF01AD749B91AD749BA315BF01F12 +:1015B0000012089C2FED2F0DD8226A0CF01F001787 +:1015C0000C9C8B06CF9B0000800091D000007A50CD +:1015D00080022B4C8003C5448003C54C80022C0440 +:1015E000800216FC8002113000007A5480021670CE +:1015F0008003C55480016EB8800217408003C3ACDD +:10160000800216C48003C5708002168C8003C58CCE +:101610008002161C8003C5A480022AF8EBCD40C0CE +:1016200021AD189798E8EDB80000C181368A300BDB +:101630001A9CF01F000C306A0E9B1A9CF01F000AC7 +:101640006E2830195C3850395028488870091A962D +:101650001A9A720C306BF01F00062E6DE3CD80C01D +:10166000800091D0800091DC00007A508002792CBB +:10167000D40148587009300A720C301BF01F000367 +:10168000D802000000007A508002792CEBCD404057 +:1016900021AD368A300B1A9CF01F000830084889AB +:1016A000500872081A961A9A700C302BF01F000519 +:1016B0002E6DE3CD80400000800091D000007A5074 +:1016C0008002792CEBCD404021AD368A300B1A9C3C +:1016D000F01F000830184889500872081A961A9AA4 +:1016E000700C302BF01F00052E6DE3CD8040000004 +:1016F000800091D000007A508002792CD401487883 +:10170000700EF6C9000E189AF8CBFFFA2F2A7C0C3F +:10171000F01F0003DA0A000000007A50800224E083 +:10172000D401580CC051304CF01F0004D802304C8A +:10173000F01F0003D80200008001A12880019F3023 +:10174000EBCD40E0FACD0170FACCFE98F01F001905 +:10175000581CC22145A85818E088001FE068010005 +:10176000FACBFE901A9C16D8F01F00131A95189603 +:10177000FAC7FF00368A300B0E9CF01F0010581677 +:10178000C11048F870090E9A720C300BF01F000D52 +:101790002A4DE3CD80E0300CF01F000B2A4DE3CD45 +:1017A00080E045B85808FE9AFFEE540D5418CEABB1 +:1017B00080015F448002116C800091D000007A505B +:1017C0008002792C80021720000000000000000039 +:1017D000EBCD40C0F8F800D418971696F0F80088C2 +:1017E000F8FA00E85808C040F8FC00C45D185876C4 +:1017F000C1A058065F0858365F091248C11030185A +:10180000EF4800ECEEF900D473985808C050300B44 +:10181000EEFC00C45D18EF4600E8E3CD80C05846FA +:10182000CEF0CFABEEF800EC5808CF603008301B9C +:10183000EF4800ECEF4B00F0EEF800D47198580838 +:10184000CE81CEABD401F01F0002D802800217D0A7 +:10185000F8FC00E85EFCD401F8F800D471A8580840 +:10186000C050F8FC00C45D18D802109CD802D40106 +:10187000F8F800D471185808C050F8FC00C45D187E +:10188000D802DC0AD401F8F800D471285808C050F6 +:10189000F8FC00C45D18D802DC0AD703EBCD408009 +:1018A0003008F8F90108F94801085809C031C08822 +:1018B0000E997207129CF01F00045807CFA1E3CDC8 +:1018C00080800000800091E8D401F8FC00DCF01F6B +:1018D0000002D8028002B4A4D401F8FC0090F01FEA +:1018E0000002D80280023B8CD401F8FC0090F01F6B +:1018F0000002D80280023C84EBCD40C01696F8F777 +:1019000001085807C051C0B86E075807C080EECC18 +:10191000FFFC306A0C9BF01F0004CF710E9CE3CDDE +:1019200080C000008000917CD4011699F8F801185D +:101930005808C0A1F8F800D470285808C0C0F8FCB6 +:1019400000C45D18D802F8CBFF64306A129CF01F07 +:101950000003D80ADC0A0000800091DCEBCD40F8DF +:1019600020AD1897F8F801185808C06030070E9C91 +:101970002F6DE3CD80F8F8F800D470385808CF7098 +:10198000F8FC00C41A9B1A935D181895CF05EEF861 +:1019900001185808C431EEF800D470285808CE70E9 +:1019A000FAC4FFE0EEFC00C4089B5D18CE05EEFC17 +:1019B000009078465806C301EEF800D45808C2C01B +:1019C000700C49BBF01F001BEFFC0024F9B60001AE +:1019D000EFFC102478075807C111CCAB5806C0B0F3 +:1019E0006E885808CC50EECBFFE8306A089CF01F98 +:1019F0000012CBE06E075807CBB0EEF80194580800 +:101A0000CFA16E581035CEB16E4B0A9A1A9CF01FBA +:101A1000000ACE70CE4B3006CDEBFAC4FFE0306A40 +:101A2000EECBFF64089CF01F0005CC2B8003C65C46 +:101A3000800091A08000917C800091DCD401F01F97 +:101A40000002D8028002195CD42120AD3008FB5876 +:101A50000024508816961897F6F801845818C0404C +:101A60003FFC2F6DD82277185808CFB0F8F500B892 +:101A70005885C2205905CF512DCB0A9A1A9CF01FC8 +:101A800000171A940A9A303BEEFE00D47C5858088E +:101A9000CE801ADA1AD43009EF490104EEFC00C4F2 +:101AA00030681AD8FACAFFD430181ADA48CA7C56F5 +:101AB0005D162FCDCD7B2DCB318A1A9CF01F0007F0 +:101AC0000A9AECCBFFCCFACCFFE8F01F00041A9482 +:101AD000320A302BCDAB0000800091DC80039C38B3 +:101AE000D42118951696F01F000F1897C05078381B +:101AF0002FF89938D82A310CF01F000B1894C0F039 +:101B00000C9B306A2FCCF01F000930188938EAF995 +:101B100001088909EB4401080E9CD822DC2A000048 +:101B2000800218F880028F24800091DCEBCD40FC0D +:101B3000EDD9C010407218941693ECCCFFFC1495AC +:101B4000910CF01F00161897C190E8F800907039BA +:101B5000EC081608B893B889B8B6B8A85805C100FB +:101B60000C9A0A9BF8C6FFFC0C9CF01F000D0E9C03 +:101B70005802E5F61A00E3CD80FCE3CD80FC0C9A18 +:101B80000A9BF8C6FFFC0C9CF01F00060E9C580236 +:101B9000E5F61A00E3CD80FC80009200800091DC25 +:101BA000800091D0D401401E5C791ADEF01F000243 +:101BB0002FFDD80280021B2CEBCD40F8203DF8F819 +:101BC00000BC1493129458485F0A58285F0918976C +:101BD00016961449C0603FF70E9C2FDDE3CD80F8C8 +:101BE000F8FC00DCF01F002BC0305816CF50EEC5BB +:101BF000FF64306A4A8B0A9CF01F0028C0D1EEF8BF +:101C000000D470285808C060EEFC00C41A9B5D1810 +:101C1000C370EEC5FF043008F7D6C0081AD8F3D455 +:101C2000C010FAC8FFF4069A0E9CF01F001D2FFD8D +:101C30001896580CCD1040296E2C580CC1001298E3 +:101C40000A9B0C99E06A888EF01F001618970C9C6E +:101C5000F01F00150E9C2FDDE3CD80F8EEF800D4C8 +:101C600071845804C0B01298EEFC00C40A9B0C9911 +:101C7000E06A888E5D141897CEBB3FF7CE9B306A22 +:101C8000485B1A9CF01F0005CC501A95CC5B0000F5 +:101C900080028F78800217C88000917C80021B2C04 +:101CA00080028154800091E8EBCD40C0189EEFDAAD +:101CB000C010782C580CC0600E9AF01F0009E3CDBC +:101CC00080C0FCFA00D475865806C0700E9AFCFCE1 +:101CD00000C45D16E3CD80C0E3CFC0C08002815454 +:101CE000D421497A1894301BF01F0016300A089B43 +:101CF000495CE8C5FF64F01F0015E8F701085807C4 +:101D0000C1C03006C0680E966E0C580CC1601897A2 +:101D1000306A0A9BEECCFFFCF01F000DCF51580635 +:101D2000EFF80000E9F80A42EFF81000EDF81A00A9 +:101D30000E9CF01F0008D822D82200008003C66441 +:101D400080023A1A80023058800274008000917C30 +:101D5000800091E8D401F01F0002D80280021CE04C +:101D6000EBCD408048FA1897301BF01F000FEEF8BB +:101D700000BC5818C0F00E9B300A48CCF01F000C75 +:101D80000E9CF01F000C0E9C307BF01F000BE3CD6F +:101D900080800E9C305BF01F0008E3CD8080000047 +:101DA0008003C68880023A1A8002360080027400DE +:101DB00080021CE0800217D0EBCD4040486A1896A4 +:101DC000301BF01F00060C9B300A485CF01F00051A +:101DD000E3CD80408003C6A880023A1A8002360014 +:101DE00080027400EBCD40F81894F8FC00CC580C3D +:101DF000C360E8F800D05808E08A00321897E8C3BA +:101E0000FF643005C0A8580AC200EEC7FF64E8F8B6 +:101E100000D00A38E08A00242FF5E8F600B0306AD6 +:101E2000069B0E9CF01F0015CF115806C0E06C5A9F +:101E30006EA81438CE91EECCFFFA6C4BF01F000F59 +:101E4000C0406C5A580ACE215807C0906F5AEECB4A +:101E5000FFD4E8FC00DCF01F000AC0403FFCE3CDEB +:101E600080F8EECBFFA8E8FC00DCEEFA0080F01F63 +:101E70000005CF60CF4B00008000917C8002B58CC4 +:101E80008002B52CD4211895E06C009CF01F001B3B +:101E90001897C310EAF401185804C2A1EAF800D454 +:101EA00070C85808C250189B301AEAFC00C45D186C +:101EB0001898C1E50E9C3016E06B009CF0060D46AC +:101EC000EC0B024BF01F000E58065F09580C5F1810 +:101ED0001248E8081800F8071710EAFC00CCF01FB9 +:101EE0000009089CEB4600D0EB4700CCD8220E9CA2 +:101EF000F01F0004DC2A000080009200800091F4B2 +:101F0000800091E8EBCD40801897F01F0008C031A9 +:101F1000E3CD80800E9CF01F0006C0550E9CF01F84 +:101F20000003CF7BE3CFC08080021DE480021E84CB +:101F3000EBCD40FE208D18961697149512921091B5 +:101F4000580BC580F6FB0080580BC0E16F5B580B47 +:101F5000C3210C9CFEFA02E4303BF01F00B93FFCA9 +:101F60002F8DE3CD80FE7568EDB80001CF011A9A80 +:101F7000EECCFFA8F01F00B3CEA16B484029126839 +:101F8000CE606B3840191268CE206B584039126809 +:101F9000CDE0FEFA02B2301B0C9CF01F00A9EEC48B +:101FA000FFD4302A303BECFC00DCF01F00A8089C7A +:101FB0006F5AC4386B68EDB80000CCC1EEC4FFD4D2 +:101FC0001A9A089CF01F009FCC516B484029126858 +:101FD000CC106B3840191268CBD06B58403912685E +:101FE000CB90FEFA026A301B0C9CF01F0095301A51 +:101FF000CDAB7568E21800021A93F9B40102F9B486 +:102000000001F8FC00DC1A9BF01F0092C1F05BECB1 +:10201000C4001A9C320A300BF01F008F6B48502806 +:102020006B3950196B585038089A303BECFC00DC87 +:10203000F01F0086300C189A189BECFC00DCF01F97 +:102040000087C3602F8DE3CFC0FE402A6B49F3EABF +:102050000008C0D0401A6B39F3EA0008C110403ABA +:102060006B59F3EA0008C1B04004CDFB1AD9302BFC +:102070001ADA0C9C4FAAF01F00722FEDCCBB1AD9B4 +:10208000302B1ADA0C9C4F7AF01F006D2FEDCC2B01 +:102090004F5A302B0C9CF01F006ACBCB1AD9302B37 +:1020A0001ADA0C9C4F1AF01F00662FEDCB3B580735 +:1020B000EE0B1700F60A1700F9B80158EFD8E10B3C +:1020C000EFFA1020ECFC00DCF01F0069CBC16B487C +:1020D0004029F1E90009EDB90004C5D0EDB90003CC +:1020E000C750EDB90002E081009430484E1AED4827 +:1020F00000B8301B0C9CF01F00526B384019F1E9FE +:102100000009EDB90004C500EDB90003C7513088DE +:102110004D9AED4800B4301B0C9CF01F00496B58E1 +:102120004039F1E90009EDB90000E080007FEDB928 +:102130000001C55130284D1AED4800BC301B0C9CE5 +:10214000F01F003FECFA00BC306BECFC00DCF01F31 +:10215000003FECFA00B4304BECFC00DCF01F003B1D +:10216000ECFA00B8305BECFC00DCF01F0038029A9F +:10217000049BECFC00DCF01F00421894FE91FF640D +:102180006B57E2170002C191ECFC00DCF01F003D30 +:102190000E9CCE7A31084BCAED4800B8301B0C9C1F +:1021A000F01F0027CABB31084B8AED4800B4301B32 +:1021B0000C9CF01F0023CB4BECFC00DCEACBFFDCDB +:1021C000320AF01F0033089CCCCA30884B1AED4805 +:1021D00000B8301B0C9CF01F001AC90BEDB90004AD +:1021E000FE91FF3231084ACAED4800BC301B0C9CFE +:1021F000F01F0013CA8BEDB90000FE91FF25301BC4 +:102200004A6AED4B00B40C9CF01F000DC89BEDB961 +:102210000001FE91FF1930284A1AED4800B8301B22 +:102220000C9CF01F0007C6AB301B49EAED4B00BC0D +:102230000C9CF01F0003C87B8003C8EC80023A1A94 +:102240008002BD688003C6C08002B4D48003C6E0AB +:102250008002C04C800091D08002B58C8003C734CE +:102260008003C7788003C7008003C7BC8002B52CF9 +:102270008003C8288003C86C8003C8B08002B64CB5 +:102280008002B9EC8003C8008003C8588002B91CE2 +:102290008003C8148003C8CC8003C8808003C84072 +:1022A0008003C894EBCD40C07758EDB80003F9B86F +:1022B0000008F9F80A2FF9B80104F9F81A2F18974D +:1022C000300A1696F8FC00DC149BF01F0025300A3B +:1022D000EEFC00DC149BF01F0023300AEEFC00DC57 +:1022E000149BF01F002130183009ECCBFECCEF48D6 +:1022F00000B8EF4800B4EF4900C02FF976085858ED +:10230000E08B00225808C2512FCB5849CF71EEFA0A +:1023100000BC306BEEFC00DCF01F0014EEFA00B4E1 +:10232000304BEEFC00DCF01F0011EEFA00B8305B21 +:10233000EEFC00DCF01F000DEEFC00DCF01F000CDA +:10234000E3CD80C03048EF4800B8EF4800B4CE0B72 +:102350003028EF4800B8EF4800B4CDAB8002B58C10 +:102360008002B52C8002B5EC8002B4D480028F804C +:10237000EBCD40E0205D1897F8F600B0F8F800BC0F +:102380005828C57059085F0958485F081248C2901C +:10239000302BEEFC00E0F01F002F314A300B1A9C6E +:1023A000F01F002D1A95EEFA00BC588AC200EEF814 +:1023B00000905808C03070785028149958895F18D8 +:1023C00058195F191069ECF8017CEEFC00E01A9ACC +:1023D0000C9B50495038F01F00212FBDE3CD80E009 +:1023E000300BEEFC00E0F01F001BCD8B30085018C6 +:1023F000301B500BECF900F0F3EB0008FBFB1A016B +:10240000EDB90001C120EEF800905808C1F0EEFCD3 +:1024100000D4580CCD10780C491BF01F0012FBFCA7 +:102420000A01EEFA00BCCC4B4018A1B85018CECB34 +:10243000300BF8FC00E0F01F000C300BEEFC00E06D +:10244000F01F000AEEF800BCC9EB3089CB8B00000E +:1024500080026178800091D08002581C8003C65CA5 +:10246000800091A0800261A48002618CEBCD40E0ED +:10247000189716951496F8F800905808C0D0704830 +:102480005808C0A1F8FC00D4580CC060780C48EB88 +:10249000F01F000EC1501AD648DA1AD5301B0E9C18 +:1024A000F01F000C300A0E9B48BCF01F000C0E9968 +:1024B0000C9B0A9C3008488AF01F00092FEDE3CDE1 +:1024C00080E000008003C65C800091A08003C960AA +:1024D00080023A1A800230588002740080027474BC +:1024E000D4211295169614941897F8F900BC5849FF +:1024F000C1C0F8FA00F4580AC10158895F08581998 +:102500005F0B104BF40B1800F9BB000AF9BB014636 +:10251000F01F0019EEFA00F4F4C8FFFFEF4800F4D2 +:10252000EEF900945809C020D822306A0C9BEECCFA +:10253000FF04F01F0012EEF800BC5828C111EEF89D +:1025400000D471585808C040EEFC00C45D180A99C8 +:10255000089A0C9BEEFC00DCF01F0009D8220A99B7 +:10256000089A0C9BEEFC00E0F01F0006FE99FFDECF +:10257000CE7B00008002246C800091DC8002C3CC02 +:10258000800261FCEBCD406C1ADA18951ADB1692CA +:102590001493301B48AAF01F000B48B6300A0A9B60 +:1025A0000C9CF01F000A0A990C9A069B049C3008A8 +:1025B000F01F00072FEDE3CD806C00008003C99071 +:1025C00080023A1A8002360080027400800274741D +:1025D000D401F01F0002D80280022584EBCD40C058 +:1025E000189E1497109CFCF800BC5888C240580BE9 +:1025F000C1A0FCCAFF64FCF600D46C585808C19016 +:102600001ADC16981AD9300BFCFC00C41ADBFD4BFF +:102610000104490E0E991ADE301B6C565D162FCD43 +:10262000E3CD80C0FCF600D448BA6C585808CE916F +:10263000E3CFC0C0585CF9B80002F9B80104580BE8 +:10264000C040FD4800B4CD6BFD4800B8482ACD4BD2 +:1026500080037E2080039C38EBCD40F8FACEFFE863 +:1026600018967C35F8F400D47C037C17685C7C2ECB +:10267000580CC0F01AD51ADE300E1AD71AD3ED4E08 +:102680000104ECFC00C468565D162FCDE3CD80F844 +:10269000E3CFC0F8D42118951694F8F70104580731 +:1026A000C020D822F8F900D472585808C4C01AD7EC +:1026B000F94701041AD70E981AD74B6A1AD70E9BFE +:1026C0007256F8FC00C40E995D16EAF900D42FCDBD +:1026D00072585808C3801AD7EB4701041AD70E98CE +:1026E0001AD74ACA1AD70E9B7256EAFC00C4301990 +:1026F0005D16EAF900D42FCD72585808C2401AD797 +:10270000EB4701041AD70E981AD74A2A1AD70E9BFC +:102710007256EAFC00C430295D16EAF900D42FCDC8 +:1027200072585808C1001AD7EB4701041AD70E98FF +:102730001AD7498A1AD70E9B7256EAFC00C4303960 +:102740005D162FCD5804C200EAFA00D47458580818 +:10275000C12030091AD91AD9EB4901041AD91298A3 +:102760001AD9129B7456EAFC00C4089A5D16EAFA5C +:1027700000D42FCD75A85808C070089B3019300AB6 +:10278000EAFC00C45D183018EB480104D8220000B0 +:1027900080039C38D421204DF8F900D41897169561 +:1027A00073885808C2C11094F8C6FFEAC1C8EEFC8D +:1027B00000C45D1B1AD4189B0E984C19E06A888ED1 +:1027C0000C9CF01F00408F2C2FFD580CC111580598 +:1027D000C140189B305CF01F003CEEF900D47388B8 +:1027E0005808C0D1737B580BCE31169CCE4BEECB24 +:1027F000FFF0F01F0036C1302FCDDC2A7378580867 +:10280000C0B0EEFC00C45D18C070189B306AEECCFE +:10281000FFF0F01F002F6E2C580CCEA1EF39007A7C +:102820003008F0091800C3A1EEF800D47048580829 +:10283000C100301BEEFC00C45D18C0B4EEF800D43B +:1028400071485808C0601A9BEEFC00C45D18C214A1 +:10285000300B0E9CF01F001FEEF800D47099580941 +:10286000C070300BEEFC00C45D19EEF800D470A807 +:102870005808C050301BEEFC00C45D183018EF48FB +:1028800000C84959300C72082FF893082FCDD82270 +:102890004038F1D8C002CDD0CB0B300848891AD8C7 +:1028A000E06A888E0E98EECBFFF0EECCFF86F01F2C +:1028B00000058F3C2FFD580CCB81C9FB800224E022 +:1028C0008002819C80028F1C800281E4800091DC68 +:1028D0008002269400007A6CEBCD40E018971695A4 +:1028E000300BF01F001DEEC6FF64306A49BB0C9C24 +:1028F000F01F001BC2E0EEF801185808C1F00C9B55 +:102900000E9CF01F00183006EEFC00DC0C9BEF461E +:1029100000B0F01F00150C9A0C9BEEFC00E0F01FBD +:1029200000130C9BEEFC00E0F01F00110C9BEEFC72 +:1029300000E0F01F0010E3CD80E0EEF800D470D886 +:102940005808CDE00A9A0C9BEEFC00C45D18CD8BB4 +:102950001896CD6B800217D0800217C88000917C3A +:10296000800226948002B9D48002581C800261E85B +:10297000800261D4D401F01F0002D802800228D85E +:10298000EBCD40C01897F8F800C45808C230303B6F +:10299000F01F003DEEF800D470495809C070300BAC +:1029A000EEFC00C45D19EEF800D470A95809C0709F +:1029B000300BEEFC00C45D19EEF800D47098580896 +:1029C000C050300BEEFC00C45D18300B0E9CF01FA5 +:1029D000002F6E2C3006F01F002E8F266E3C580CF8 +:1029E000C040F01F002B8F36EEF800E45808F9B80D +:1029F0000100EFF81A39EEFC0090580CC060F01F8F +:102A000000253008EF480090EEFC008CF01F0022FB +:102A10003006EEFC00DC0C9BEF46008CF01F001F24 +:102A2000EEFC00E0F01F001EEEFC00DCEF4600E0D4 +:102A3000F01F001CEEFC00DCF01F001BEEFC00DCB5 +:102A4000F01F001A0E9CEF4600DCF01F0019EEFC90 +:102A500000CCF01F00110E9CEF4600D0EF4600CCDA +:102A6000F01F00140E9CF01F0014EEFC00C4580C64 +:102A7000C070EEF800D470785808C0205D18E3CD1F +:102A800080C00000800228D88002269480028174D1 +:102A9000800242B4800091E88002B4CC800256ECFF +:102AA00080029438800294088002C0788002189CCA +:102AB00080021DB880021CE0EBCD4080169778099B +:102AC0001639C0F1761899080E9CF01F000A0E9C6A +:102AD000F01F0009E3CF808072180E38C060109993 +:102AE0005809CFB1E3CFC0806E189318CEEB000029 +:102AF00080022980800091E8EBCD40801897580C27 +:102B0000C051C1980E9CF01F000D6E0B580BCFB139 +:102B1000F01F000BF01F000B6E4C580CC060F01F34 +:102B2000000A6E4CF01F00096E8CF01F00080E9C0E +:102B3000F01F0006E3CD808080022AB88002724C2C +:102B40008002728480028F20800091E8EBCD40C02B +:102B50001897580CC05130060C9CE3CD80C0F01F74 +:102B60000021CFA1334CF01F00201896CF606E08D3 +:102B70006E19991899296E286E89993899996E3C21 +:102B8000580CC040F01F00198D4C6E7C580CC04092 +:102B9000F01F00168D8C6E498D59495891096E5A57 +:102BA0008D6A4948910A49486E698D7991090C9C52 +:102BB000F01F0012C11130196C988DB95808EDF949 +:102BC0001A0C6C285808CC906C185808CC606C4CC7 +:102BD000F01F000BCC200C9C3006F01F000ACBDB52 +:102BE0008002720880028F24800091940000046C9F +:102BF00000007AA400007AA0800275F880028F1E7F +:102C000080022AF8D431204D580C5F08580B5F0918 +:102C1000189316971248C05030050A9C2FCDD83211 +:102C2000E06C011CF01F00C01895CF803018F948E7 +:102C3000010CFEF102F66E22620B580BC100580225 +:102C4000E0800144E2C4FFFC3006760B049CF01FD8 +:102C500000B8C0C02FF6090B580BCF810A9CF01F9B +:102C600000B50A9CF01F00B4CD8BE2060328EB48A8 +:102C700000D46E0C580CE0800122F01F00B0EB4C29 +:102C8000008CF01F00AFEB4C0090CE906E185808EF +:102C9000C0A0785CF01F00A86E1CEAF60090F01F40 +:102CA00000A78D5C6E385808C0C0EAF8009070BC70 +:102CB000F01F00A16E3CEAF60090F01F00A08DBC52 +:102CC000EAF800905808CCB06E4C580CCC80F01F3D +:102CD000009DE04C0063FE9BFFC3EAC1FFEA364A59 +:102CE0006E4B029CF01F00986E5C580CE08100F95E +:102CF0006620340CF01F008C1897CB10FEF8024CA5 +:102D00008F78FEF8024AFEF9024A8F98FEF80248D0 +:102D10008F058F458F658F898FC83006FEF4023C82 +:102D20008F168FA4FEF202388FB2EAF900907288F3 +:102D30008FD8EAF9009072988FE8EAF9009072A8AB +:102D40008FF8F01F0088EB4C00E0E08000C20C9B85 +:102D5000F01F00850C9BEAFC00E0F01F0084EAF8FD +:102D600000D470685808E08000A7029B0A9C5D1898 +:102D7000EB4C00C4FE90FF74EAF8009070BBEAF8D8 +:102D800000D470895809C0605D19FE95FF69EAF8A2 +:102D900000D471685808C0F0EAFC00C45D181897A8 +:102DA000C0A0029BF01F0062C0600E9B364A029CCE +:102DB000F01F006534CCF01F005CFE90FF514EC840 +:102DC0004EC9991899294EC84EC9993899494EC883 +:102DD0004EC9995899694EC84EC9997899894EC873 +:102DE0004EC9999899A94EC84EC999B899D94EC853 +:102DF0004EC999C899E94EC84EC9F9440040F942F4 +:102E00000044990599F8F9490048F01F0069EB4C16 +:102E100000DCFE90FF25EB39007A3008F00918003D +:102E2000C5C1300A029BF01F0063EAF80090EAFC7B +:102E300000DC707BF01F0060EAFB00E0EAFC00DCD5 +:102E4000F01F005EEAFA009074C85808C60174D8F2 +:102E50005808C52174EA580AC080302BEAFC00DC0F +:102E6000F01F0057FE91FEFC009B0A9CF01F0055CE +:102E7000FE95FEF6EACBFFF0EAFC00DCF01F005204 +:102E80003FF8EB4800E4EAF900D473485808C0D092 +:102E90001A9BEAFC00C45D18C0814038EDB80002FE +:102EA000C0413018EB4801188B0366088B18870562 +:102EB000FE9FFEB5EB4800C4CD2A6E3B6E1CF01F92 +:102EC0000043EB4C0090CFDAF94B00D4CD3A0E9C86 +:102ED000F01F0019FE9FFEC4EACAFF86CA4BF01F0E +:102EE000001958FCFE9BFEBC6E5B310AEACCFF86E3 +:102EF000F01F0015CFEA109A301BEAFC00DCF01F2F +:102F00000030FE91FEADEAFA0090CA5B109A300BD9 +:102F1000EAFC00DCF01F002AFE91FEA2EAFA009013 +:102F2000C97B000080028F2400000470800091A003 +:102F300080022980800091E88000919480021348EB +:102F4000800091B8800091AC80021D60800225DC79 +:102F500080021BB8800218C8800218E8800218D8C6 +:102F60008002609C800261E8800261D48002184483 +:102F700080021850800225D0800229748002304CD3 +:102F8000800226588002360080021A3C80021928EE +:102F900080021CA880021F0480021BA480021D5412 +:102FA0008002186E80021884800218568002C0DCED +:102FB0008002B4C08002B4B88002B4CC8002B4D421 +:102FC000800227948002B90480023B4CEBCD40E0A4 +:102FD000306A18971695F8C6FF64497B0C9CF01F61 +:102FE0000017C270EEF801185808C1800C9B0E9CA7 +:102FF000F01F00130E9CF01F00133006EEFC00DCE7 +:103000000C9BEF4600B0F01F00100C9A0C9BEEFCDE +:1030100000E0F01F000EE3CD80E0EEF800D470E891 +:103020005808CE500A9A0C9BEEFC00C45D18CDFBEC +:103030001896CDDB800217C88000917C8002269410 +:10304000800276648002B9D48002581CD401F01F3B +:103050000002D80280022FCCEBCD40C0499BF8C7BC +:10306000FF641896306A0E9CF01F0017EDFB189C49 +:10307000E06800A2EDD8E007EDFB08A20FD81AD84F +:103080000FC91AD90FB81AD80FA91AD90F9848FA28 +:103090001AD80C9C1ADB302BF01F000D0E9B0C9CD9 +:1030A000F01F000CECFC00DCF01F000B303B0C9C14 +:1030B000F01F000A30182FADED4800A8E3CD80C006 +:1030C000800217C88000917C8003C9B880023A1A38 +:1030D00080021AE08002BA1C80022FCCD431FACDD3 +:1030E00000D03007F94700A8189516941491580B92 +:1030F000E0800217F6F60084E8CCFFFA76ABF01F0A +:10310000012A1AD61ADC09D81AD809C91AD909B855 +:103110001AD809A91AD909981AD809890A9C1AD95A +:10312000FEFA0488302BF01F01220E9B306A2F8D8F +:10313000EACCFF64F01F011F306A089BEACCFF5EF7 +:10314000F01F011D0A9CF01F011D300AEAFC00DC83 +:10315000149BF01F011B635AEDBA0003C061E2F833 +:1031600001745808E08100B1301063795809C0E05B +:10317000E1D9C0011298EDB90001E08000A4EDB9D9 +:103180000002F9B80004E1D8E030EAF800D4710890 +:103190005808C060009BEAFC00C45D18635A5804DC +:1031A000C07069585808C5A0F1DAC002C6E114978A +:1031B000E2170013C5B1029B0A9CF01F0102FAC876 +:1031C000FF9453375028089B0A9CF01F00FFEAF831 +:1031D00000B45828E08001BAE089007F5818E080E8 +:1031E000017130285038EAF800B85828C7F058283C +:1031F000E08900805818E080016230285048EAF9E0 +:1032000000BC58495F0B58895F08F7E81008C78071 +:10321000E2C9FECCE2C8FF0C16963007EC1600019E +:103220005019500812931092505766095809E081BE +:1032300001122FF72FC32F025847CF81EAF900BCA4 +:103240005889C671E2F800F04059F1D8C002F3E89D +:103250001008E08101311096C5F8E8F800805808A0 +:10326000CA70F1DAC002CA40C1083509FAC8FF3095 +:1032700010D9029AFAC9FF94300B50290A9CF01F0A +:1032800000D3CA202CCDD832E2F801485808E0819A +:10329000010FEAF900B0089A300BEAFC00DCF01FDD +:1032A00000CCE080017A3509FAC8FF3010D9029AC3 +:1032B000FAC9FF94089B50290A9CF01F00C4C8401B +:1032C000CE2BA1B0C5DBE2F801785808F9B00004B4 +:1032D000F9B00105C4BB5848C8605908C831303935 +:1032E0005039EAF800B85828C83130195049C88B0D +:1032F0005848C8505908C82130395049C81B3008AF +:103300005058E2C8FECC30165018E2C8FF0C5008E6 +:103310005909E080011FEAF800D470A85808C0508D +:103320000C9BEAFC00C45D18303B0A9CF01F00A90E +:10333000354AFAC7FFE8300B0E9CF01F009E580478 +:10334000E0800126E8F8008450645098E8C8FFFA4D +:10335000507868A95089E2FA0184581AE080009EEA +:103360004029403850A950C84049433850D950B836 +:10337000EAF800BC5848E08000E7E0890088581867 +:10338000E08000A43018510A4014400350E850F087 +:10339000FACAFFAC0899069BFACCFF9C7208580841 +:1033A000C040F54BFFF0720814A82FC92F0B183A34 +:1033B000CF61E2F801445198EAF601185806E0801E +:1033C0000089FEFA0212302B0A9CF01F0079301996 +:1033D000EAF800BC5908E080008F5809E0800098A6 +:1033E000305B300A0A9CF01F007D40585808C1C06D +:1033F000EAF800D471485808C170FACBFF44EAFCDF +:1034000000C45D18C1114328EDB80001C0D1189760 +:103410004F30189268095809E08100A12FF72FC496 +:103420002F035847CF81EAF800B05808C070103118 +:10343000C050EAFC00E0F01F006BEAFC00DC029BDD +:10344000EB4100B0F01F00680A9CF01F00682CCD13 +:10345000D832EAFB00D4E2FA014476585808C13069 +:103460001AD91AD23009EB4901041AD94DC90E3ABA +:103470005F081AD94DEA76560E99301BEAFC00C453 +:103480005D162FCD30165056CD5A5888C2005908B7 +:10349000FE91FF7A3048C78BE2F901A45809FE9AE1 +:1034A000FF6140985808FBF90A09C5BB6368F1D869 +:1034B000C021CF0A50375047C2FB30085048CA0AD3 +:1034C00030085038FE9FFE913008C5EB3038C5CB30 +:1034D000EAF800D470F85808FE90FF750E9BEAFCDD +:1034E00000C45D18FE95FF6F0C99EAF800BC5908FE +:1034F000FE91FF75029B0A9CF01F003E0A9CF01F84 +:10350000003E307B0A9CF01F0033C70BEAF80090A6 +:1035100070495819F9BB000AF9BB013CC63B745B02 +:10352000744CF01F00214B5A1ADC302B0A9CF01F00 +:103530000020306A089BEACCFF5EF01F001E2FFDC2 +:10354000FE9FFE023028C20B30195039FE9FFE4DFF +:10355000029B0A9CF01F0027CDFAEAFB00D4E2FA96 +:10356000014476585808FE90FF5B1AD91AD3EB42F3 +:1035700001041AD20E3A5F081AD00E99765649CA3B +:10358000301BEAFC00C45D162FCDC49B6248507806 +:1035900062595089CE1A301BEAFC00E0F01F001877 +:1035A000FE9FFE8380023A1C8003C9F880023A1A0B +:1035B000800091D0800091DC80021DB88002B5ECC3 +:1035C000800222A48002269480021F308002938011 +:1035D000800217D08003CA6C8002246C80037E2096 +:1035E000800257488002B9D48002237080039C383F +:1035F00080021A4880021CE08003CA488002559667 +:10360000EBCD40C021AD1897F8F800AC5808C68142 +:10361000F8F6010CEEFB009076095809C061C8F875 +:1036200072095809E080008CF2F801945808CF9193 +:103630003008EF48010C76495809C670EEFC00D4FA +:10364000580CC0E04DAB780CF01F005AEFF8002486 +:10365000F1FC0A04EEFB009076485808C560EEF8CD +:1036600000E85818E088008D760AEEF800C858186F +:10367000C3F0580AC090103AC041C3981438C370C0 +:10368000740A580ACFC15826C04076485828C690B8 +:10369000580AEFFA1A32F9B80001EFF80A32EEF9D7 +:1036A00001105809C04176485818C710EEF80118A3 +:1036B0005808C4F1580AF40B1700F60A1700F5FB76 +:1036C0001004F5FA1005EEF800D470B85808C410CC +:1036D000EEFC00C45D18C3D12E6DE3CD80C0F8F6BA +:1036E000010C5806C9812E6DE3CD80C0740A580ABA +:1036F000CCB0F4F801945808CFA175885808CC4193 +:1037000076485828CF41CC0B0E9CF01F002BCE5092 +:10371000EEF800B05808EFFC0A2C0E9CF01F0027B2 +:10372000300B1A9C368AF01F00261A961A9A0E9CA5 +:10373000300BF01F00242E6DE3CD80C05806FE91A3 +:10374000FF790E9C301BF01F00202E6DE3CD80C052 +:103750000E9C300A30ABF01F001D2E6DE3CD80C0F3 +:10376000580AC1D074085808EFFA1A32F9B80001A3 +:10377000EFF80A320E9C300BF01F0015CAEB302B0D +:103780000E9CF01F0011EEFB0090C6FBEF480110ED +:10379000129A0E9C303BF01F000BC9FB30180E9C98 +:1037A000EF4800C8149BF01F0009C97B8003C65C6A +:1037B000800091A08002195C80022370800091D06B +:1037C0008002792C800217D080022584800230DCB0 +:1037D0004848300A48499118910A930A5EFF000050 +:1037E00000007A7000007A78EBCD40681695189347 +:1037F000F6CCFFEDF01F0022314A1896300BF01F77 +:1038000000210A9A8D15ECCCFFF0069BF01F001EDC +:1038100049EAF5090042AC09F50800422FF8F558CD +:10382000004249B530088D286A198D3993062F86D4 +:103830008B1649866C08F0C9FFFF8D095909E0888D +:1038400000180A936A0C782A580AF9F80003E7F876 +:103850000A01F9F81003F5F81A0320197838910ACB +:103860008D09F01F000D6C095909FE9BFFED300A10 +:10387000326C149BF01F0009E3CF90688000920027 +:10388000800091D0800091DC000087F400007A7005 +:1038900000007A78800091E880014658EBCD40E046 +:1038A00030961697305E300B33A51989F2C8003078 +:1038B000EC081800E08B0019F2CA0030580AC2C5A3 +:1038C0001999F2C80030EC081800E08B0017F2C814 +:1038D00000305808C215F1EA1048EE0B0B08585B8F +:1038E000C291E3CF80E0F2C80061FC081800E08BD1 +:1038F000000EF2CA0057CE3BF2C80061FC08180067 +:10390000E08B000DF2C80057CE5BF2C80041FC0806 +:103910001800E088000DE3CFC0E0F2C80041FC08C9 +:103920001800FE9BFFFAF2C80037CD4BF2CA0037F1 +:10393000CC6B19A8EA081800CEF12FFB586BCD20EC +:103940002FDCCB4BEBCD40E016961497580AC4C041 +:10395000300B3095305EC1B8F2CA0030580AC365EA +:103960001999F2C80030EA081800E08B0021F2C86B +:1039700000305808C2B5F1EA10485808C275EC0B7F +:103980000B082FFB1637E08800302FEC1989F2C89E +:103990000030EA081800FE98FFE1F2C80061FC0858 +:1039A0001800E08B000EF2CA0057CD9BF2C80061F0 +:1039B000FC081800E08B000DF2C80057CDBBF2C820 +:1039C0000041FC081800E088000DE3CFC0E0F2C819 +:1039D0000041FC081800FE9BFFFAF2C80037CCAB90 +:1039E000F2CA0037CBCBE3CF80E0F6CA00015E6CB1 +:1039F000F80A000913882FF85C58B2885E1CF6C8D4 +:103A00000002100CC08819882FF85C58B888201C58 +:103A100058085E1C201ACF875EFC5EFCEBCD40C0D0 +:103A200049071696189BE0460020F9B60B200E9C1D +:103A30000C9AF01F000D3008EE060B080F8858088E +:103A4000C0D00E9C35E935FA2208F2081800F9FAC0 +:103A5000BE002FFC19885808CF81482CE3CD80C0C8 +:103A600000007A7C800091DCEBCD40FE189114922E +:103A7000169C1293580BC2A0E20B00045809C20016 +:103A800002973006C0881835E08A001418070C33F6 +:103A9000E0880018E4060708E80701051AD80E9C1C +:103AA00048CA0A9B2FF6F01F000C2FFD580CCEC4FD +:103AB0003008EE01010CE968FFFFE3CD80FE0297BC +:103AC0003008EE01010CE968FFFFE3CD80FE000045 +:103AD0008003DA3080009148580CC140F8FC00D0D7 +:103AE000580CC1002FCCF8F8FFFC5808C0417809E9 +:103AF0005809C0901638C0302F8CCF6B7808143816 +:103B0000CFC15EFF5EF9780C580C5E0C7828163831 +:103B1000C0515EFC782816385E0C780C580CCFB17A +:103B20005EFC30383189F94800F0F9480058F9480E +:103B3000005431E8F949004CF94800503FF9E06879 +:103B40000576F949017CF948019C5EFCEBCD40E02B +:103B500018961695344CF01F000C1897C1103018A9 +:103B60009978993899485806C0500C9CF01F000766 +:103B70008F5C5805C0500A9CF01F00048FBC0E9C3F +:103B8000E3CD80E080028F2480009194EBCD40C093 +:103B9000169679075807C051C0C86E375807C090AD +:103BA0006E0C0C9BF01F0004CF910E9CE3CD80C0E7 +:103BB000E3CF80C0800091A0EBCD40FC1695189417 +:103BC000580C5F0B58055F081493104B1292C040BD +:103BD0003FFCE3CD80FC580ACFC048E73006C06800 +:103BE0002FF62E07E0460038CF406E0B0A9CF01FE0 +:103BF000000ACF710699049A089B0E9C6E185D18F6 +:103C0000F9BC01FFF9BC0000E0460038CE31CE1B04 +:103C10008003CC00800091A0EBCD40801897580C19 +:103C2000C0A0780CF01F00056E1CF01F00040E9C55 +:103C3000F01F0002E3CD8080800091E8D421189429 +:103C4000169579075807C1A03006C0680E966E3CDD +:103C5000580CC14018970A9B6E0CF01F0009CF71D9 +:103C60005806EFF81003EDF81A03EFF80003E9F82F +:103C70000A100E9CF01F0003D82ADC2A800091A0B5 +:103C800080023C18EBCD406016961895760BF01F1D +:103C900000056B088D38EB460040E3CD80600000E6 +:103CA00080023C3CD431202D500B129CF01F003C74 +:103CB0001890C730198A580AC670300118965011EA +:103CC000320230930294C0382FF60D8AE40A1800AD +:103CD0005F08E60A18005F091248E8081800CF518B +:103CE000580AC2C00D87E40718005F18E6071800DD +:103CF0005F191268E8081800C4505807C4300C95C2 +:103D0000C0385807C0D02FF50B87E40718005F189C +:103D1000E60718005F191268E8081800CF31AA8476 +:103D20004A0B0C9CF01F0020C171A1A15807C06074 +:103D3000EAC6FFFF0D8A580ACCA1009CF01F001BA9 +:103D40005801C2404008F141005C40195809C25175 +:103D5000129C2FEDD832496B0C9CF01F0013C03120 +:103D6000A1B1CE5B0C9C493BF01F000FF9B80004D9 +:103D7000E3D8E031FBF91001F7B901FFFBF91A01B3 +:103D8000CD6B0C95CCDBF01F0009300840093FFCDF +:103D9000F348005C2FEDD8322FEDDC3A800091948F +:103DA0008003D304800091A0800091E88003D30CAD +:103DB0008003D314EBCD40FE169CF01F00451891F4 +:103DC000C6B0198A580AC7A0189630023203309438 +:103DD000E80A18005F08E60A18005F091049300871 +:103DE000F0091800C0E0109B2FF60D8AE60A1800B3 +:103DF0005F08E80A18005F091248F6081800CF515A +:103E0000580AC4500D87E80718005F18E607180025 +:103E10005F1910693008F0091800C3705807C350C3 +:103E2000109A0C95C0385807C0D02FF50B87E607BD +:103E300018005F18E80718005F191268F4081800E6 +:103E4000CF3130084A3BAA880C9CF01F0023C0F1F8 +:103E5000A5A25807C060EAC6FFFF0D8A580ACB9199 +:103E6000029CF01F001E049CE3CD80FE49CB0C9CFD +:103E7000F01F0019C031A3B2CEDB49AB0C9CF01F80 +:103E80000016C0E1A3A2CE6B0C95CDCB029CF01F17 +:103E900000135802CE913FF2049CE3CD80FE492BE3 +:103EA0000C9CF01F000DC031A1B2CD4B0C9C48FB07 +:103EB000F01F0009C071A1A2CCDBF01F00083FF287 +:103EC000CD3B029C3FF2F01F0005CCEB80009194AB +:103ED00080039A74800091A0800091E880039A6C1E +:103EE0008003D31C8003D3248003C8E4EBCD40803F +:103EF0001697149C129BF01F00085BFCC031E3CFA7 +:103F0000C0801898E018FFE1CFB1EF4C0050109C32 +:103F1000E3CD808080023DB4EBCD40801697149CA9 +:103F2000129BF01F00085BFCC031E3CFC0801898E3 +:103F3000E018FFE6CFB1EF4C004C109CE3CD808041 +:103F400080023DB4D431201D500B129CF01F00485C +:103F50001891E080007F198A580AC6B0300218967E +:103F6000049032033094E80A18005F08E60A18004B +:103F70005F0910493008F0091800C0E0109B2FF6C7 +:103F80000D8AE60A18005F08E80A18005F0912485F +:103F9000F6081800CF51580AC2F00D87E80718003C +:103FA0005F18E60718005F1910693008F00918005B +:103FB000C3E05807C3C0109A0C95C0385807C0D04A +:103FC0002FF50B87E60718005F18E80718005F1940 +:103FD0001268F4081800CF3130084A6BAA880C9C8C +:103FE000F01F0025C161A1B25807C060EAC6FFFFFB +:103FF0000D8A580ACB91029CF01F00205802C1B0D4 +:104000004009F34200545800C241009C2FFDD832B1 +:1040100049BB0C9CF01F0018C031A1A2CE6B499B7C +:104020000C9CF01F0015C0E1A3B2CDFB0C95CD5B3D +:10403000F01F0012300840093FFCF34800542FFDE8 +:10404000D832491B0C9CF01F000CC051A3A2CCDB42 +:104050002FFDDC3A0C9C48DBF01F0007F9B800107C +:10406000E5D8E032F7B001FFCC0B0000800091945E +:104070008003C8C4800091A0800091E88003D32C05 +:104080008003D3348003C8E48003C8E0D431202DFA +:10409000500B129CF01F00391890C6D0198A580A8C +:1040A000C610300118955011320230930294C03876 +:1040B0002FF50B8AE40A18005F08E60A18005F096A +:1040C0001248E8081800CF51580AC2C00B87E4070D +:1040D00018005F18E60718005F191268E808180052 +:1040E000C3F05807C3D00A96C0385807C0D02FF67F +:1040F0000D87E40718005F18E60718005F191268BB +:10410000E8081800CF31AC8449DB0A9CF01F001D81 +:10411000C171A1A15807C060ECC5FFFF0B8A580A06 +:10412000CCA1009CF01F00185801C1E04008F141EB +:10413000005840195809C1F1129C2FEDD832493B63 +:104140000A9CF01F0010C031A1B1CE5B0A9C490B44 +:10415000F01F000CCFA040192FF95019CDCB0A96B3 +:10416000CD3BF01F0009300840093FFCF3480058E0 +:104170002FEDD8322FEDDC3A800091948003D340AC +:10418000800091A0800091E88003D3448003D3484D +:10419000EBCD40401896784CF01F00466D2CF01F78 +:1041A0000045ECFC00D0F01F00436DACF01F004157 +:1041B0006DCCF01F00406DECF01F003EECFC008069 +:1041C000F01F003CECFC0088F01F003AECFC009073 +:1041D000F01F0038ECFC0094F01F0036ECFC009857 +:1041E000F01F0034ECFC009CF01F0032ECFC00A03F +:1041F000F01F0030ECFC00A4F01F002EECFC00A827 +:10420000F01F002CECFC00ACF01F002AECFC00B00E +:10421000F01F0028ECFC00B4F01F0026ECFC00B8F6 +:10422000F01F0024ECFC00BCF01F0022ECFC00C0DE +:10423000F01F0020ECFC00C4F01F001EECFC00C8C6 +:10424000F01F001CECFC00CCF01F001AECFC00D4AA +:10425000F01F0018ECFC00D8F01F0016ECFC00DC8E +:10426000F01F0014ECFC00E0F01F0012ECFC00E872 +:10427000F01F0010ECFC00ECF01F000EECFC0150F5 +:10428000F01F000CECFC016CF01F000AECFC01803C +:10429000F01F0008ECFC018CF01F0006ECFC01A0F4 +:1042A000F01F00040C9CF01F0003E3CD80400000D1 +:1042B000800091E8EBCD40C0189678085808C031CE +:1042C000C0880E987007109CF01F00155807CFA1EA +:1042D0006D085808C031C0880E987037109CF01FC8 +:1042E00000115807CFA16C5CF01F000F6C6CF01F21 +:1042F000000E6C8CF01F000C6C9CF01F000B6CAC63 +:10430000F01F00096CBCF01F00086C1CF01F0006B9 +:104310000C9CF01F0005E3CD80C00000800241909E +:1043200080023C18800091E8EBCD4040320818969E +:104330001AD8E0691000F8C8FFDC785A784B792C5D +:10434000F01F000430182FFDED480044E3CD8040FD +:104350008002B254D421F60815011695F0C6FFFF6D +:1043600018940C9CF01F00061897C0600A99089AD0 +:104370000C9BF01F00040E9CD822000080028F24AA +:1043800080023A68EBCD40E016951896F6CCFFFD1A +:10439000F01F00091897C0C00C9B0A9A322618C655 +:1043A000F01F0006EE0500093008B296B2A80E9C78 +:1043B000E3CD80E080009200800091DCD401580CB5 +:1043C000C1D0580BC160198835E92208F2081800DD +:1043D000E08B0013129A3009C088F80907082208F8 +:1043E000F4081800E08B00092FF9123BFE9BFFF741 +:1043F000F01F0003D802F01F0003D802800243849C +:1044000080024354D4011698F6FC0140580CC06059 +:10441000189BF0CCFEDCF01F0002D802800243BCE7 +:10442000D4011698F6FC013C580CC060189BF0CCE7 +:10443000FEECF01F0002D802800243BCD4011698A3 +:10444000F6FC0138580CC060189BF0CCFEFCF01F45 +:104450000002D802800243BCD4011698F6FC013455 +:10446000580CC060189BF0CCFF0CF01F0002D80263 +:10447000800243BCEBCD40F831EC1694F01F0028CD +:104480001896C3906979F8C3FFE2EDB90000C360E4 +:104490001897EDB90001C1614A294A380C37F20872 +:1044A0001710E60701051AD84A0A0A9B0E9CF01F4E +:1044B00000202FFD580CC1C51835E08A001A1807D6 +:1044C0006979EDB90002C171496949780C37F20880 +:1044D00017100E9C1AD8E6070107496A0E9BF01FB9 +:1044E00000142FFD580CC0451837E089000530082E +:1044F000E768FFFF0C9CE3CD80F848B848EA1AD87B +:1045000031EBF01F000B2FFD580CCF2559DCFE9925 +:10451000FFF0EC0C00076979CBDB000080028F24F0 +:104520008003936480037E208003D35880009148E9 +:104530008003D3648003D350EBCD40F81894332C20 +:10454000F01F003E1896C650F8C3FFCEEDB400042D +:10455000C6301897EDB40003C1514B994B980C37F6 +:10456000F2081710E60701051AD84B7A0A9B0E9C31 +:10457000F01F00362FFD580CC4951835E08A00470F +:104580001807EDB40002C1514AD94AE80C37F208C5 +:104590001710E60701051AD84ADA0A9B0E9CF01F8D +:1045A000002B2FFD580CC3251835E08A0030180762 +:1045B000EDB40001C1514A294A280C37F2081710FE +:1045C000E60701051AD84A3A0A9B0E9CF01F001F05 +:1045D0002FFD580CC1B51835E08A00191807EDB445 +:1045E0000000C171496949780C37F20817100E9C18 +:1045F0001AD8E6070107498A0E9BF01F00142FFD09 +:10460000580CC0451837E08900053008E768FFFFFF +:104610000C9CE3CD80F848B8490A1AD8332BF01F18 +:10462000000B2FFD580CCF25E04C0031FE99FFEF19 +:10463000EC0C0007C90B000080028F2480039364F8 +:1046400080037E208003D374800091488003D37C54 +:104650008003D3888003D3908003D36CD401774C3C +:10466000F01F0002D802000080024538D401773CD8 +:10467000F01F0002D802000080024538EBCD40F860 +:10468000332C1693F01F00401896C6906759F8C453 +:10469000FFCEEDB90001C6601897EDB90000C16109 +:1046A0004BA94BB80C37F2081710E80701051AD8C8 +:1046B0004B8A0A9B0E9CF01F00382FFD580CC4C576 +:1046C0001835E08A004A18076759EDB90003C1613F +:1046D0004AE94AF80C37F2081710E80701051AD81A +:1046E0004AEA0A9B0E9CF01F002C2FFD580CC34574 +:1046F0001835E08A003218076759EDB90002C16128 +:104700004A294A380C37F2081710E80701051AD869 +:104710004A3A0A9B0E9CF01F00202FFD580CC1C581 +:104720001835E08A001A18076759EDB90004C171FD +:10473000496949780C37F20817100E9C1AD8E80717 +:104740000107498A0E9BF01F00142FFD580CC0452D +:104750001837E08900053008E968FFFF0C9CE3CDBD +:1047600080F848B8490A1AD8332BF01F000B2FFDE8 +:10477000580CCF25E04C0031FE99FFEFEC0C000700 +:104780006759C8CB80028F248003936480037E2006 +:104790008003D3A4800091488003D3B08003D390DA +:1047A0008003D3BC8003D398EBCD40C030AC1696C9 +:1047B000F01F00181897C1806D69EDB90000C17035 +:1047C000189A301BEDB90001C0F149384939580B2E +:1047D000F0091700149C1AD9EECBFFF6141B490AF6 +:1047E000F01F00102FFD0E9CE3CD80C048B848EAB2 +:1047F0001AD830ABF01F000B2FFD580CCF55589C2A +:10480000FE99FFF3EE0C000A6D69300BCDCB000072 +:1048100080028F248003936480037E208003D3D0A2 +:10482000800091488003D3C8EBCD40C01697768CAA +:10483000580CC05118960C9CE3CD80C0314CF01F31 +:1048400000101896CF90EF38001DEF3A00181AD8D4 +:10485000EF39001C1AD9EF38001B1AD8EF39001AAB +:104860001AD9EF380019314B1AD81ADA485AF01F02 +:10487000000630082FADED680013CDEB80009200EC +:104880008003DA4880009148EBCD40E078351696F9 +:10489000314CF01F000A1897C0C0EC050308488A85 +:1048A0001AD8314BF01F000730082FFDEF680013B6 +:1048B0000E9CE3CD80E00000800092008003DD6864 +:1048C00080009148EBCD40801697772C580CC09013 +:1048D000F01F0009189B6F2CF01F0008E3CD8080AB +:1048E000771C580CC060F6CCFFDC320BF01F0004C4 +:1048F000E3CD8080800091B88002438480024354DD +:10490000EBCD40807838F60800076E085808C0C024 +:10491000784C580CC0C0F60C030C189B109CF01F70 +:104920000007E3CD8080109CE3CD8080109CF01FB9 +:1049300000046E08CF3B0000800243BC800091B8A9 +:10494000EBCD40F83228169418961989F009180012 +:10495000C0A0F01F001BEBDCC001C19030070E9C13 +:10496000E3CD80F8F8C7FFFF322B0E9CF01F001537 +:10497000CF6019985808CF31B8880E9CF01F0010EE +:10498000890C0E9CF01F00101897CEABF80316018F +:10499000E6CCFFFFF01F000D1897CE200C9C069A66 +:1049A0000E9BF01F000BC051EE030B0C8903CD8B47 +:1049B0000E9C0A97F01F0007CD3B0000800091B8C5 +:1049C00080009158800091948000920080023944C8 +:1049D000800091E8D421205D18951094129C1696C1 +:1049E000F01F000F1897C1906C0A590AE08B001451 +:1049F000189B0A9CF01F000B0E9CF01F000B48BA7E +:104A00001AD4314BFACCFFFCF01F0009300C2FFDFB +:104A10002FBDD822F01F00042FBDDC2A80024940A0 +:104A2000800091DC800091E88003D3D88000914819 +:104A3000D4013038F6CCFEDCF6CBFEC0F01F00020D +:104A4000D8020000800249D4D4013028F6CCFEEC14 +:104A5000F6CBFEC4F01F0002D8020000800249D449 +:104A6000D4013018F6CCFEFCF6CBFEC8F01F0002D5 +:104A7000D8020000800249D4D4013008F6CCFF0CE3 +:104A8000F6CBFECCF01F0002D8020000800249D411 +:104A9000EBCD40F8201D18971693129C1A9BF01F1F +:104AA00000171895C2306E595809C0504008103987 +:104AB000E08B00206E695809C04040081039C133AE +:104AC0006E366E44E60600066C0CF01F000D8D0578 +:104AD0006E4C580CC0504008300CE60409082FFDFD +:104AE000E3CD80F80A9CF01F00062FFDE3CFC0F84D +:104AF000F01F00033FFCCF4B80024940800091E84B +:104B0000EBCD40FEF6F700D05807C0510E94089C3C +:104B1000E3CD80FE364CF01F00191894CF90EEC6FE +:104B2000FFFCF8C3FF9C189749514962ECFCFFFC5D +:104B3000580CC2116C0B580BC1A02F86F01F00122D +:104B4000CF600837E2081700E40817101ADCE60700 +:104B500001051AD80E9C48DA0A9BF01F000D2FEDB4 +:104B60001807580CC0451835FE99FFE23008E76871 +:104B7000FFFFCCEB6C0BCE2B80028F2480037E20BA +:104B800080039364800271BC8003D3E48000914869 +:104B9000D431205D500B129CF01F0056502CE08049 +:104BA000008E198A580AE080009B3009402650196F +:104BB000503912905049320230931294C0382FF677 +:104BC0000D8AE40A18005F08E60A18005F09124817 +:104BD000E8081800CF51580AC4E00D87E407180010 +:104BE0005F18E60718005F191268E8081800C64049 +:104BF0005807C6200C95C0385807C0D02FF50B8732 +:104C0000E40718005F18E60718005F191268E80843 +:104C10001800CF31AA842FF0403CE00B1503F01FA1 +:104C200000361891C4E040490C9CE20900060C9B38 +:104C3000F01F00328D1C6C085808C141580CC1018E +:104C400040182FF850185807C15040482F88504836 +:104C5000EAC6FFFF0D8A580AC3C05031CB3B591C2E +:104C6000C2404009F2F801782FF8F348017858075C +:104C7000CED15031E0C8FFFFF0071503402CF01FE4 +:104C800000200E9B403CF01F001CC2E0F8000039E1 +:104C90003008931893084008F14C00D04019580987 +:104CA000C0D1129C2FBDD8324009F2F801742FF800 +:104CB000F3480174CC9B0C95CAEB3FFC2FBDD83256 +:104CC000403CF01F000F402CF01F000D2FBDDC3AC0 +:104CD000E0C8FFFF5031F0071503CD1B501A308795 +:104CE000503A1490CCCB403CF01F00053FFCCE7BEB +:104CF00080009194800091F48002720C800091E811 +:104D0000D4213228129716951389F0091800C0A0F3 +:104D1000320A2DCB0E9CF01F00271896C2F03FFCE4 +:104D2000D822EEC6FFFF322B0C9CF01F0023C3C01D +:104D3000F8060107EEC80008E0480037FE9BFFF1C7 +:104D40006B2C580CC060F01F001D0E3CC2606B2C19 +:104D50003004EB440044F01F001AEECCFFFFF01FBC +:104D60000019EB4C0048CDC00C9B0E9AF01F0016AA +:104D70006B28089CF0070B04D822EF390040F80993 +:104D80001800CCE16B2CF01F000E3018EB460048E9 +:104D90000C9CEB480044D8220E9A0C9B6B2CF01F05 +:104DA000000BCD61CBEB0C9CF01F00041897CC3BA3 +:104DB0008002394480009158800091B8800091E8C9 +:104DC00080009200800091DC8000917CEBCD4080DF +:104DD0001697129C2E8BF01F0006F9BC01FFF9B844 +:104DE0000001EFF80A08E3CD808000008002389CC3 +:104DF000EBCD40C018976E38129CF00B000630AA1D +:104E0000300BF01F000C8D0C18996E585808C030EC +:104E1000103CC0956E6C580CC0401839E0890007F2 +:104E2000E3CF80C08D08E3CFC0C08D0CE3CFC0C0FE +:104E300080009170D42116941895782B580BE08A35 +:104E400000557817683E6E0C78381C38C410EECACE +:104E5000FFFC3009C058150C78381C38C3902FF966 +:104E60001639CFA52FFB0E9CA36BF01F00241896BC +:104E7000C3506A2C580CE08A003B6C08683E7039BD +:104E80001C39C355ECC8FFFC300AC0A81097700845 +:104E9000F40B15027039EEC8FFFC1C39C2052FFA5D +:104EA000143CFE99FFF5F4C8FFFFEC0A002BA36841 +:104EB0001697F80A010AEC08000CA36AF01F00100C +:104EC0008F048B166A28300C2FF88B28D82218985C +:104ED000781C580CCFD19114D822DC2AF4C8FFFFDB +:104EE000EC0B000BA368CE6B7817CBDB0C97300A6A +:104EF00030480C9BCDFB0000800091F4800091C4F1 +:104F0000D4211895781CF01F000D300C8B1C8B2CB5 +:104F10006A075807C0F0189618948F140E9B0A9CC5 +:104F2000F01F00076E07F9B605FF5807CF710C9CFC +:104F3000D8220E96CFDB0000800091E880024E342C +:104F4000D421189578095809C1E03FFAC028109972 +:104F50007228F4080C4A72085808CFA1F4C4FFFF65 +:104F60001296E06C01A8F01F000A1897C0A09924BF +:104F70005806EDFC1A00EBFC0A000A9CF01F000525 +:104F80000E9CD82212961294CEDB000080028F2451 +:104F900080024F005EFD5EFD5EFD5EFD5EFD5EFD1E +:104FA000D401584BC0E0E0880007586BC0A0587B84 +:104FB000C040D802580BC091300CF01F0005D80239 +:104FC000301CF01F0003D802D80200008002172016 +:104FD000D401581BC070300A323C149BF01F0005EE +:104FE000D80A300A322C149BF01F0002D80A0000A5 +:104FF00080014658EBCD40FE201D1094129216956C +:10500000F01F0057E8C8FFF25C7C4D69F00C000609 +:10501000F33A0109580AC060EC0A0D085809E0810A +:10502000008F3003500CE6060001029CF01F004E7A +:105030000A9B1897306A400CEE0C000CF01F004BD6 +:10504000400C306A4CAB140CEE0C000CF01F004707 +:10505000400C302A4C7B2F4CEE0C000CF01F004310 +:10506000400C089A049B2F2CEE0C000CF01F003F04 +:10507000FAC8FFFC3005114A0E991AD5EE0A000C49 +:105080001AD5EC0A010A30EBF01F003B2FED581C3B +:10509000C5914009EC090108E048003EE08B001092 +:1050A0008E085CC806085CC8AED3029B0E9CAE0896 +:1050B000F01F0032300C2FFDE3CD80FEEE09000E14 +:1050C0003888FD39000CF0091800CEB1FD39000D0B +:1050D00038E8F0091800CE51FD38000EF808180025 +:1050E000CE01FD39000F3038F0091800CDA130286D +:1050F000FD3A0012F00A18005F1B3FE8F00A1800A2 +:105100005F19126BEA0B1800CCC1FD380013E218CE +:10511000001D5818CC61FD380014E21800C85888EA +:10512000CC01FCCAFFC1FCC9FFE1C0482FF914390A +:10513000C0E01388F6081800CFA0CB3BF4090103A8 +:10514000C72B0E9CF01F000E3FFCCB6B0FC92FA985 +:10515000EE0900091388A3A8B288CA3B8001F4E8CD +:10516000000087F480009200800091DC00007AA8A3 +:105170008003D6548001F54480014664800091E8A4 +:10518000D401201D3068FACBFFFC16D81A9B486C5E +:10519000F01F00064848581CF00C1700F9BC01002D +:1051A0002FFDD80200007AA880017A88EBCD40401C +:1051B000310A1696300B0C9CF01F000630F930783F +:1051C0008D198D09300C30398D288D39E3CD804013 +:1051D000800091D0D401F01F0002D80A80016048FD +:1051E000EBCD4068206DFAC3FFEE1496069C306A42 +:1051F000F01F0010FAC5FFFE0C9B310A0A9CF01F3D +:10520000000D0A9B204D310A1A9CF01F000B069BD3 +:10521000202D306A1A9CF01F0008F01F00082FADE7 +:10522000581CF9BC01FFF9BC00002FADE3CD80682C +:10523000800091DC8002E73680016094EBCD40680D +:10524000206DFAC3FFEE1496069C306AF01F001022 +:10525000FAC5FFFE0C9B310A0A9CF01F000D0A9B49 +:10526000204D310A1A9CF01F000B069B202D306A3E +:105270001A9CF01F0008F01F00082FAD581CF9BC45 +:1052800001FFF9BC00002FADE3CD8068800091DC08 +:105290008002E73680016168D401F01F0005581CC8 +:1052A000F9BC01FFF9BC0000D80200008001F370D6 +:1052B000D401F01F0005581CF9BC01FFF9BC000027 +:1052C000D80200008001F310D401169CF01F0004E6 +:1052D000581CF9BC01FFF9BC0000D802800163E052 +:1052E000D431207DFACEFFC050287C027C387C1758 +:1052F00050087C2E501E16901894149B1293580A36 +:10530000C5C0FAC5FFEA306A0A9CF01F0031202DA3 +:10531000306A0A9B1A9CF01F002FF01F002F5802C2 +:105320005F1858075F1918912FED1268C181300678 +:105330005800C26168193018F0030948F00811FFDD +:10534000F1E9000C891C580CC365BFBC891CF01F17 +:10535000002318975817C2F02F9DDC3A5887FE9B00 +:10536000FFFDFAC6FFF2308A300B0C9CF01F001CC8 +:105370000E9A049B0C9CF01F00165800CDC04028CC +:1053800058015F091AD8069C1AD630381AD530163B +:10539000404A403B1AD6F01F00136819EC03094835 +:1053A0001248F1D8C01F189789180C9CF01F000EE6 +:1053B0002FCDCD1B2F9DD83AFAC5FFEA306AE06B9E +:1053C00000FF0A9CF01F0006CA3B0000800091DC31 +:1053D0008002E736800188B080016584800091D02A +:1053E0008001661C8001639CEBCD40C01896308C18 +:1053F000F01F00091897C0C0300899069918F01FCF +:105400000007301CF01F00060E9CE3CD80C0E3CDEA +:1054100080C0000080028F248001604880017A10E3 +:10542000EBCD4080209D1697FACCFFFEF01F0009BF +:10543000581CC0402F7DE3CFC0800E9C1BBAFACB16 +:10544000FFFCF01F00051BBC2F7DE3CD808000001A +:1054500080017800800091DCEBCD4080202D580B3E +:10546000C120FAC7FFFE306A0E9CF01F000C0E9C94 +:10547000F01F000B581CF9BC01FFF9BC00002FED18 +:10548000E3CD8080FAC7FFFE306AE06B00FF0E9C20 +:10549000F01F0004CEDB0000800091DC8001793039 +:1054A000800091D0EBCD4040485B1896F01F00057E +:1054B0000C9CF01F0005E3CD8040000080039C3869 +:1054C00080025458800091E8EBCD40C0202DFAC7EF +:1054D000FFFE16960E9CF01F0008581CC0402FEDD2 +:1054E000E3CFC0C00E9B0C9C306AF01F00042FED70 +:1054F000E3CF80C080017864800091DCEBCD40C0B8 +:1055000018977939580BC0305839C0E03018EF4837 +:1055100000BC3038EF48004C1039C0808F2830086C +:105520008F58E3CD80C0F949004C6F682FF8EEFA30 +:10553000010CEF4800586FA830098F288F59301B95 +:10554000746C7486487A5D16EEF80094EEF900905B +:105550002FF82FF9EF480094EF490090E3CD80C079 +:1055600080037E20580C5E0C580BF9FB4A19580A30 +:10557000F9FA4A225809F9F94A1A5808F9F84A1B5F +:105580005EFC580CF9F81024F9B90101F1D9E108D1 +:10559000F9F81A245EFC580C5E0C580BF9B801019E +:1055A000F9F81A45F9FB0A455EFCD703EBCD40C07C +:1055B0001897580CC04079385858C030E3CD80C097 +:1055C000F8F8010C3009706C7086488A301B5D1643 +:1055D000EEF80094EEF900902FF82FF9EF480094C0 +:1055E000EF490090E3CD80C080037E20580CF9FC89 +:1055F00010315EFC580CC0B0F8F800D45808C070E8 +:10560000F8F800D89708F8FC00D45EFC300897083A +:105610005EF8D703580CC040588BE08800035EFD4D +:1056200048D8F00B032FF8FC00E05EFCF8FC00DC2F +:105630005EFC78BC5EFCF8FC00805EFC79FC5EFCE5 +:10564000F8FC00845EFC784C5EFC797C5EFC786C37 +:105650005EFC00008003D6FC580C5E0C588B5EBCD0 +:1056600048E8F00B032FF94A00E05EFCF94A00DC41 +:105670005EFC99BA5EFCF94A00805EFCF94A007C47 +:105680005EFCF94A00845EFC994A5EFCF94A005CC3 +:105690005EFC996A5EFC00008003D720580CC05065 +:1056A000580BC031783C5EFC5EFD580C5E0C580B0C +:1056B000F9FA0A035EFCD401580CC0A0F8FC010CF6 +:1056C000580CC06078A85808C030780C5D18D80213 +:1056D000D401580CC021D80AF8FC010C580CCFC0DA +:1056E00078B85808CF90780C5D18D802EBCD408080 +:1056F0001897580CC1E0189A300B48FCF01F000FA7 +:105700000E9A300B48ECF01F000DEEFC00C0F01FAD +:10571000000DEEFC00CCF01F000CEEFC00D4F01FDE +:10572000000AEEFC010CF01F00080E9CF01F0006A2 +:10573000E3CD80808002608C800274008002602053 +:10574000800270E0800091E8D401580CC050F8FC51 +:1057500000C0F01F0002D80280026410D401580C6F +:10576000C050F8FC00C0F01F0002D802800264287C +:10577000D401189A580CC0A030583019F8FC00C059 +:10578000F548004C95C9F01F0002D802800263BAA8 +:10579000EBCD40801897580BC04079E85888C0403E +:1057A0003018EF4800BC30193088EF490044EF480A +:1057B00000788F99EEFC00C0F01F0004F9B80100DA +:1057C000EFF81A39E3CD8080800263B2EBCD40E080 +:1057D000201D189716951496580CC0513FFC2FFDAC +:1057E000E3CD80E0F8FC00C0F01F000ACF801A9BD8 +:1057F000EEFC00C0F01F0008189BCF10400C0C3CC2 +:10580000CEF30C9A0A9CF01F0005300CCE9B0000D2 +:10581000800263B2800263CE800091DCEBCD40C099 +:1058200018971496580CC1F0F94B00C4580AC1B02F +:1058300074087419F94800F8F94900FC7428F9480B +:105840000100F8FC00C0580CC0E0742BF01F0007EA +:105850006C3BEEFC00C0F01F00066C4BEEFC00C081 +:10586000F01F0004E3CD80C0800263A6800263AC19 +:1058700080026408D431FACD00A81897F8F600CC5D +:105880005806C0F0F8F800F85808C0B00DA80DB9D7 +:10589000F3E81089F8F800D02FC91039E088000427 +:1058A0002D6DD832ECC4FFFC0999500909A0F01FF6 +:1058B000006FFAC1FFF8340A029B0E9CF01F006CC7 +:1058C0001895CEF5590CE0800090580CCEA132020C +:1058D0005012EEF800E45808C7D1E8C5FFE4FAC357 +:1058E000FF68310A0A9B069CF01F0062310A300BE8 +:1058F0000A9CF01F00610DAA0DB9049BF3EA108900 +:10590000FACCFFD8EEFA00CC0A982FC9F01F005B42 +:10591000310A0A9B069CF01F005AC7614009E1E961 +:1059200010880DB9EBD8B0100DA8F3E81089320833 +:10593000F2CE002CF00519005FB9E04E00205F9A0E +:10594000124AF80A1800CAD15C751C35C630580EC8 +:10595000CA81FAC3FF88029B0A9A069CF01F004581 +:105960003018308AEF4800E4E8CBFFFDEECCFF189A +:10597000F01F0040EEFC010C78965806C0D0E93AC2 +:10598000001B0A98149B0699780CE21B0080F5DA3C +:10599000C0025D16C865E939001B3008F00918001F +:1059A000C5753018EF48011CEEF901185809C0718F +:1059B000EEF800FCEDB80000FE90FF7430188FD8B0 +:1059C000EEFC010C78785808FE90FF6C780C5D189E +:1059D000C68B308AE8CBFFFDEECCFF18F01F002805 +:1059E000FE94FF60C7BB189A029B0E9CF01F00201C +:1059F000FE91FF580A9A029BFACCFFD80A92F01F38 +:105A0000001D5015C67B069B0A9C310AF01F001929 +:105A1000C48BFAC6FFB8E8CBFFF50C9C310AF01F27 +:105A20000015049A029BFACCFFA8F01F0012FAC3DB +:105A3000FF880A9AE8CBFFD4069CF01F000E40199D +:105A40000C9A2F090A9B069CF01F000EC8AB301859 +:105A5000EF480118EEF9011C5809CB11EEF800FCD3 +:105A6000EDB80001CAC1C1DB8002575C800257CC8F +:105A7000800091DC800091D080028EF88000917CC3 +:105A800080029C38D431201D3003189730140695BD +:105A900030213040EF4500BC6F4A580AE08000C911 +:105AA0006F585808E08100C56E7C580CE08100C238 +:105AB0006EB85808E08000BE6F385828EFF41A2FEF +:105AC000EEF8010CEF41004C3009706C7086FEFA64 +:105AD000051E029B5D16EF4400548FC5EEF800983A +:105AE000EEF900902FF82FF9EF480098EF49009059 +:105AF0006E7C580CC0516EB85808E08100EC6FC83D +:105B0000EF4400705818EFF41A2F6FD85808E0814E +:105B100000F8580CE08100A76EE85808E08100A367 +:105B20006FE8F0C900015879E08B000EFEF804C45C +:105B3000F009032FEF4400BCEF410078EF4500402F +:105B4000EF4400C8EEFC00C0F01F012BE08000B560 +:105B5000EF4400BC2FF3E0430064C9D10E9A300B30 +:105B6000FEFC0498F01F012630090E98FEFA048C02 +:105B7000129B129CF01F0123EEF9010C72285808A9 +:105B8000C0E0EEF801105808C0A058185F0B3008AC +:105B90000E9CEF480110723A72285D182FFDD83222 +:105BA000EEF80088EF4400BCEF4000788F55EF45D9 +:105BB000007CEF4500C88F08CC6B6E585808E08118 +:105BC00000DF6E4B580BE08100D06E085808C161B1 +:105BD0003078EF4400BCEF480078EF440048CB3BFE +:105BE000EEF900845809E08101846FF85808E081DB +:105BF000015C6E4B580BE08100B86E685808CA30E3 +:105C00000E9CF01F0101C9FB6E485808E08100A9F5 +:105C10006E585808E08100B06E685808C9406F0897 +:105C20005808C910300B0E9CF01F00F7C8CB6E7CD3 +:105C30006EA95809C2F16F885808C2C06F38EF4585 +:105C400000605818EFF41A2FEF44004CEF4500584D +:105C5000EF4500548FC58FE4EF450118EF45011C57 +:105C6000C49B6FE8EEFC00CC5818EFF41A2FEF44F9 +:105C70000078F01F00E6EEFC00D4EF4500CCF01FEA +:105C800000E3EEFC00C0EF4500D4F01F00E18FE51B +:105C9000C5AB580CCD416EB85808CD105829C3B0CB +:105CA0005819C4706F3820185878FE9BFF26FEF9EB +:105CB0000362F208032FEEF800BC5808FE91FF4C77 +:105CC000C5CB6E585808E08100FE6ED85808E080B9 +:105CD00000FE6FC95819FE90FF1A5829FE91FF1E49 +:105CE0006FD85808FE90FF1A0E9CEF490070EF44E1 +:105CF00000BCF01F00C96E7CEF450074C0BB0E9C59 +:105D0000EF4400BCEF410070F01F00C36E7CEF4514 +:105D10000074C00B6F885828CC606F388FC45898B7 +:105D2000EFF41A2FEF4100603098EF48004CCE4A54 +:105D30006F885818CB806F3858A8EFF91A2FEEF9F2 +:105D4000010C30A88FC5EF440060EF48004CFEFA0C +:105D5000029E7286726C302B0A995D16CC0A6F080F +:105D60005808FE90FF573068EF4400BC8FF4EF48AE +:105D70000078CE9A6F085808FE90FF503038EF44F4 +:105D800000BC8F05EF440080EF480078CDCA6E69F3 +:105D90005809C0A06ED85808E0810117EEF800F845 +:105DA0005808E08100FC6E485808E08100EB6E88DE +:105DB0005808C0506ED85808E08000E46F28580892 +:105DC000C050300B0E9CF01F00956E7CC93A6F7866 +:105DD0005808C8018F88EF4400BCEF40004CEF48E2 +:105DE0000058EF4800448FF8EF4800488F98EF4480 +:105DF0000040C82A6E1B580BCE606E585808FE90A3 +:105E0000FF6A3089EF4400BCEF49004CEF44005C6E +:105E1000C73A6E2B580BC2716F696FB81039CD330A +:105E20006ED85808C2003058EF4400BCEF48004C10 +:105E30008FC4EF440110FE9FFE60580AFE91FF4B95 +:105E4000EF4A011CEF4400BCEF44004CEF4A0060F5 +:105E5000EF4A0058EF4A00548FCA8FE4EF4A011806 +:105E6000FE9FFE4B6E685808C7B16E485808C78140 +:105E70006E585808CC71580BFE91FF2D6F696FB8A2 +:105E80001039FE93FF286ED85808FE91FF24307811 +:105E90008FCBEF48004CEF4400BC6F98EF410110EE +:105EA0008F18FE9FFE2AEEF80088EF4900C8EF44E5 +:105EB00000BCEF4000788F59EF49007C8F08FE9FAF +:105EC000FE436ED85808E081008AEF4400BCEF44DE +:105ED000004CEF450060EF450058EF4500548FC57A +:105EE0008FE4EF450118EF45011CFE9FFE06305977 +:105EF000EF4400BCEF4900781A9BEEFC00C0F01F95 +:105F000000481892C290EEF8010C4009189A708669 +:105F1000706C300B5D16049CF01F003CEEF800C85E +:105F20005808EFF81028F9B90101F1D9E108EFF8A4 +:105F30001A28EFF80029F9B90001F1D9E008EFF8C3 +:105F40000A29EEF90090EEF8009C2FF92FF8EF499E +:105F50000090EF48009CEF450084FE9FFDF5EF4464 +:105F600000BCEF40004CEF450058EF4500448FF572 +:105F7000EF4500488F958F85EF440040FE9FFDBDA3 +:105F80003078EF4400BCEF48004C8FC56F98EF416C +:105F900001108F186E7CFE9FFDAEEEF800FC5808D5 +:105FA000FE91FF038FD4EEFC010C78785808C040B6 +:105FB000780C5D186E695809FE90FEF76ED8580887 +:105FC000FE90FEF36E7C3059EF4400BCEF49004C6C +:105FD0008FC4EF440110FE9FFD8E3088EF4400BC5B +:105FE000EF48004CEF44005CFE9FFD8780037E205D +:105FF0008003D744800268308002608C8002740085 +:106000008002747480025790800091E88002653CA1 +:106010008003D76480025874800254FC800263E6D7 +:10602000EBCD408076085808F9B901FFF1D9E108B5 +:10603000F7F81A0076185808F9B901FFF1D9E10804 +:10604000F7F81A0176285808F9B901FFF1D9E108E3 +:10605000F7F81A0276385808F9B901FFF1D9E108C2 +:10606000F7F81A03169718991698486A300B301CDF +:10607000F01F00050E9CF01F0005E3CD808000009E +:10608000800260208002747480025A84D401169CBD +:10609000F01F0002D802000080025A84D421203D63 +:1060A0001895E06C0120F01F00221897C38031E89A +:1060B0003039F9480088F948006833C8F949006C5C +:1060C000F9480064F945010C300430CA99A4089BD2 +:1060D0001A9CF01F00186AF850286ADA500A6AE819 +:1060E0005018EEF8010C1A99704A493B0E9CF01FAB +:1060F0000013EF4C00C01A961898C14030160E9C41 +:106100008F76F01F000F0E9C8F74F01F000D0E98FD +:1061100008990C9C48BA089BF01F000B0E9C2FDDC1 +:10612000D8220E9C1097F01F0009CF9B80028F246D +:10613000800091D0000004788002711C80025A8493 +:106140008002602080027474800091E8D401580CB1 +:10615000C090F8F800D45808C050F8F800805808EB +:10616000C020D8023018F94800809958F01F00026A +:10617000D802000080025A84D401580CC04099AB68 +:10618000F01F0002D802000080025A84D401580C8B +:10619000C060F94B00E0994BF01F0002D8020000EC +:1061A00080025A84EBCD40801897580CC090996BB0 +:1061B000F94B00DC580BC0610E9CF01F0005E3CDCD +:1061C0008080F8FC00C0F01F0003CF7B80025A845F +:1061D000800263BAD401580CC04099DBF01F000262 +:1061E000D802000080025A84D401580CC04099BBE8 +:1061F000F01F0002D802000080025A84EBCD40E07C +:10620000189714951296580CC3A0F8F8008C2FF824 +:10621000F948008C5839E08B0009F8F800A82FF8ED +:10622000F94800A8E3CF80E01588306AF94800B04B +:10623000F8CCFF4CF01F0042ECCA00040BA90BB8CD +:10624000F1E910861436E08B00130B99300CF80935 +:106250001800C4603038F0091800C130EEF800A80A +:10626000301C2FF8EF4800A8E3CD80E0EEF800AC3A +:10627000300C2FF8EF4800ACE3CD80E0E3CF80E0B6 +:10628000E046002BE088004C3FE80BCBF00B1800F9 +:106290005F0A3028F00B18005F09124AF80A18004C +:1062A000CEE13018F00B1800C3A1EEFC00CCF01FBB +:1062B00000252FC60C9CF01F0024EF4C00CCC2F030 +:1062C0000C9A0A9BF01F001E0E9CEF4600D0301661 +:1062D000EF460074F01F001D0C9CE3CD80E0EEF84B +:1062E00001145808C100300830398FC8EF48011434 +:1062F0008F29EF49004CEEFC010C78C85808C030DB +:10630000780C5D18EEFC00D4F01F000E0C9CEF46DC +:1063100000D8F01F000DEF4C00D4C031E3CF90E067 +:10632000EACBFFFCEEFA00D8F01F00050E9C3016F9 +:106330008F56F01F00060C9CE3CD80E0800091DCBE +:10634000800091E88000920080025A84EBCD40806A +:10635000189779685808C0B079BB580BC08070494D +:106360005D193008EF480058EF48006CE3CD80809D +:10637000EBCD40C01897580BC04078085878C04003 +:106380003018EF48006030786FA68F086F9C6C293A +:10639000300A305B5D196FA86F9C7029301A304B42 +:1063A0005D19E3CD80C0F94B00745EFCF94B00B081 +:1063B0005EFC580CF9FC10135EFC580CF9B8010196 +:1063C000F9F81A06F9B9010BF9F91A005EFC580C34 +:1063D000C08079485808C05079589708794C5EFCBD +:1063E000300897085EF8580CC0C0791A580AC09057 +:1063F000792897083009F9490048F94900445EFABC +:106400003008109A97085EFAF94B00C45EFCD70377 +:10641000D401580CC040483BF01F0003D8020000D4 +:106420008003D7B08002634CEBCD40801897580CA6 +:10643000C0F079A8300B7019799C5D19C0916E6815 +:106440005808C0606E2820385818E0880004E3CD52 +:1064500080806F485808F9B80101EFF81A136FA847 +:106460006F9C7029301A300B5D19EEFC00A4483A7D +:10647000302BF01F0003CECB8003D7BC80023A1A2A +:10648000EBCD40801897580BC040780858B8C040F2 +:106490003018EF4800606F4930B88F085809F9B8D4 +:1064A0000101EFF81A136FA86F9C7029301A300B96 +:1064B0005D196FA86F9C7029300A305B5D196FA859 +:1064C0006F9C301A7029304B5D19EEFC00A4484ACD +:1064D000302BF01F0004E3CD808000008003D81C27 +:1064E00080023A1AEBCD40C01897580BC04078088C +:1064F00058C8C0403018EF48006030C86FA68F08F9 +:106500006F9C6C29301A302B5D196FA86F9C702915 +:10651000300A305B5D196FA86F9C301A7029304BC0 +:106520005D19EEFC00A4484A302BF01F0004E3CDB7 +:1065300080C000008003D86080023A1AEBCD406032 +:106540001896784CF01F000B30056D1C8D45F01F20 +:1065500000096D4CED450044F01F00066DA8ED45A7 +:1065600000500A9A6D9C70290A9B5D19E3CD8060EA +:10657000800091E8EBCD40E01897580BC4F0780804 +:106580005808C4C130088F086FD95809C0B06F6867 +:106590005808C08070985808C0506FBB0E9C5D189A +:1065A000C4114A4B0E9CF01F00246FA83006301512 +:1065B0008F16EF4500408F268F666EFA70490C9B50 +:1065C0006F9C5D196FA80C9A70290C9B6F9C5D19CC +:1065D0006FA80C9A7029302B6F9C5D196F4CF01FBF +:1065E00000176FA80A9BEF460050EF46004C0C9A2C +:1065F00070296F9C5D193FF80C9A8F386FA5303B5E +:106600006F9C6A295D196FA80C9A7029304B6F9C9A +:106610005D19EF4600C0E3CD80E03018EF48006020 +:10662000CB2B6F686FBB70A90E9C5D19CBFB000074 +:106630008003D8948002634C800091E8EBCD40E069 +:10664000205D1897580BC04078085858C040301843 +:10665000EF48006030588F086F695809C4406FA830 +:10666000FACBFFF070596F9C5D19310A300B189509 +:106670001A9CF01F00256F1C6EE850086E295019F7 +:106680006E6850286F095039F01F002030086F6B7A +:10669000EF48005CEF480044EEC8FFB81A9A0A9928 +:1066A0001AD80E9C405876566FBB5D16EF4C0044CE +:1066B00040188FE82FFD5808C1616F785808C13124 +:1066C00040188F2840298F694038EF4800406F6894 +:1066D00070695809C08070785808C0506FBB0E9C14 +:1066E0005D19C0412FBDE3CD80E06F4CF01F000766 +:1066F0006F68EECAFFAC70796FBB0E9C5D19EF4CF2 +:106700000050CF1B800091D0800091E8EBCD4080FD +:106710001897580BC04078085868C0403018EF48A8 +:10672000006030686E4C8F08F01F001A6F18580810 +:10673000C2E0EEF800B05808C2216EA86F2C8F3866 +:10674000F01F00158F4CC0706F2A6F1BF01F0013D5 +:106750006F288F586FA8301A7029303B6F9C5D19D5 +:106760006FA86F9C7029300A305B5D196FA86F9C11 +:1067700070496EFA300B5D19E3CD8080310AEECBA3 +:10678000FF7CEECCFF6CF01F0005CD8B8F48CE9BBD +:10679000800091E880009200800091DCEBCD40FC0D +:1067A000201D79A81897169214931294799C700959 +:1067B0005D191896C2F06F685808C23070C8580842 +:1067C000C2000E9C1A9A6FBB5D181895C1A0400CB0 +:1067D0002FBC870CF01F0015C1D03028B892B888A4 +:1067E00030188699B8B9A9891897B8A9B8C80A9B6A +:1067F000400A2FBCF01F000E0E9C2FFDE3CD80FC45 +:106800005804C0416DCC580CC0A16DB86DA5580599 +:10681000C0A130070E9C2FFDE3CD80FC6DD81895EC +:106820005008CD6B5008CD4B80009200800091DC69 +:10683000D431209D3004F8C9FF7CF8C8FF6C18974C +:1068400050195008F8C0FFB808956FA8EF450060D0 +:10685000301B70196F9C5D19C0706FA8306B701978 +:106860006F9C5D19C2F16FA8306B70196F9C5D1938 +:10687000C140EEF800C45808C101EEF800C0E0487D +:106880000032E08A0025E0480033E080011C6F8878 +:106890005808C1003014CDAB6E085818F9B8010182 +:1068A000EFF81A18EF4500C030188F086F885808A5 +:1068B000CF216F7C580CE80C1700F9BC01012F7D2B +:1068C000D832301B0E9CF01F01EECE2B6E0958A95A +:1068D000FE9BFFDFFEF807ACF009032F30183029CC +:1068E000EF4800608F09CD4B300B0E9CF01F01E686 +:1068F000CCFB6E196EB81039C760300B0E9CF01FC0 +:1069000001E2CC6B6EA96E381039E0800137300B94 +:106910006E8E580EC1B06E685808C1806EAA6E396E +:10692000123AE08000BBEEF800B05808C0F0F2C8A0 +:10693000FFFFF1D8C008103AE08000B0F2C8FFFEB7 +:10694000F1D8C008103AE08000A96E2C582CC20083 +:106950006E985808E08001236E685828E080011F77 +:106960006EAA6E39123AE0800146EEF800B058087F +:10697000C0F0F2C8FFFFF1D8C008103AE080013B38 +:10698000F2C8FFFEF1D8C008103AE08001346E78FA +:1069900058085F1A3008F5EB0009F0091800E0818B +:1069A000010FEC1B0001F5EB0008F2081800E08075 +:1069B00001056EBB1699582BE080012A6E16580609 +:1069C000C071581BE080021B582BE08101630C3B17 +:1069D000E080014F0C995919C0F1580EC0416FE881 +:1069E0005808C0A0300B0E9CF01F01A8C51B6EEB11 +:1069F000580BFE90FF7C300B0E9CF01F01A5C48B42 +:106A00006FA8305B70196F9C5D19C7016FA8307B50 +:106A100070196F9C5D19C0506E685808FE91FF395F +:106A20006FA8300B70396F9C5D19C0516E68582883 +:106A3000FE90FF2F6FA8308B70196F9C5D19FE912F +:106A4000FF286FA8189B70396F9C5D19C0516E6844 +:106A50005828FE91FF1E6FA8307B70196F9C5D193E +:106A6000C0806E285828C0506E685808FE90FF11EC +:106A70006E185918E080025C5998FE91FF0AEEF8F2 +:106A800000805808FE90FF056E685808FE90FF01D0 +:106A90006E285848FE91FEFD300B0E9CF01F017DC4 +:106AA000CF7A6FA8306B70196F9C5D19FE90FEF164 +:106AB000EEFB00C4580BFE91FEEC0E9CF01F017023 +:106AC000CE7A3328EEFC00A4FEFA05CC1AD8302B7F +:106AD000F01F0172EEF800C0301B16080E9CEF4844 +:106AE00000C0F01F016F2FFDCD3A6FAA3038FACBEE +:106AF000FFE08F0830136F9CEF43006074595D19FD +:106B00008F95507C8F85EF4500788F758FA58FB559 +:106B10008FC58FD55F0A408B1896583B5F88104A07 +:106B2000EA0A1800C23119A919B8F1E910885068A9 +:106B3000103BC1C319988FA8EEF900B05809C09056 +:106B4000069C4019FACAFFE8FACBFFE4F01F015592 +:106B50000D893028F0091800E080011CE08B008DC1 +:106B60003018F0091800E0800123EEF800C02FF87B +:106B7000EF4800C0FE9FFE8D6E785808FE90FEC95B +:106B8000EEF800B05808C080310A400B401CF01FDE +:106B90000146FE91FEBE301BCBCA580EFE90FEF998 +:106BA0006E685808FE91FEF56E185918FE91FEDACF +:106BB000583CFE91FED7CECA6E19C0EB301830A9F2 +:106BC000EF4800608F096F1CF01F01386E485808AD +:106BD000C1A06E5CF01F0136EF4C0044FE90FE59E0 +:106BE0006E5A6E4BF01F01336E58EF480048FE9FFF +:106BF000FE50300B0E9CF01F012AFE9FFE4A30090A +:106C000050494048EF480044FE9FFE436F08580833 +:106C1000FE90FED6301830996FAA8F09EF480060B9 +:106C20007458FACBFFE86F9C5D1819A919B818962B +:106C3000F1E910885848E08B01476F1CF01F011BD9 +:106C4000305CEF450044EF4C00486EA6F01F011881 +:106C5000E08001853029B896B889EF18004AB8C994 +:106C6000B8B8A988B8A8EF4C0044FE9FFE12584C53 +:106C7000FE90FEB3CB8A3038F0091800E08000DCCB +:106C80003048F0091800FE91FF7230188F98C6EB5B +:106C900030181693EF48006030496FA8E04B00FEB3 +:106CA000EFF3000D8F096EC670096F9C5D19069A8F +:106CB0000C9BF01F0101E08100C36F1CF01F00FB63 +:106CC0006FA8EF4500446EA270096F9C5D19503C9F +:106CD000FACCFFE8F01F00F91893C9206EB8E0481D +:106CE00000FEE08101516FA8406670096F9C5D193C +:106CF00030C8505CA376EF480048ECCCFFECF01FA6 +:106D000000EC1891E080012E3FE9B892B8C9302913 +:106D1000B889F8C8FFFBB0A5B085B095F8C9FFF8F1 +:106D20003038B285B295B2A5B2B8504CF8C2FFF473 +:106D30000A96C298661A6ED81438C210405CF01FCA +:106D400000DE049AE4CBFFFC580CC1903FE814C865 +:106D50008689B4896608A988B4986609B4A907C861 +:106D6000B68886A9B6996618A988B6A86619B6B96C +:106D7000F6C2FFFC60082FF62F88810866F35803DF +:106D8000E0800099660B6EC81638CD50661ACD7B30 +:106D90006E185918FE91FEEB40685848FE98FEE7C1 +:106DA0003018EF4800780DC98FB9CE0A406A584AAA +:106DB000FE98FEDD30188F780DC98FB9E04900FECE +:106DC000FE91FED558BAFE98FED2ECC9FFFB139C8B +:106DD000138A13A8F1EA1108F1EC1088ECCBFFF844 +:106DE0008FC817AC17B81789179AF1E91188F1EA1B +:106DF0001108F1EC10888FD8CB9A6FA83089EF4B2F +:106E000000608F09FACBFFE0705A6F9C5D1AFEFAA2 +:106E100002AE302BEEFC00A4F01F00A06F1CF01F90 +:106E200000A30C99EF460044009A6EAB0E9CF01F35 +:106E300000A5C1AB30188F88FE9FFE990C9C069B65 +:106E4000F01F00A1FE90FF3B6FD85808C0906F6AFA +:106E5000580AC06074096EC81039E0800086FEFBD5 +:106E6000026A0E9C3006F01F009A6EB88F186F6C85 +:106E7000580CE08000CD5806C54078B86FBB0E9C1A +:106E80005D18EF4C006C6FB65806E08000CA6F6A60 +:106E90006ECB30188F287429FEFA02381AD91AD30B +:106EA0001ADB302BEEFC00A4F01F007C2FDDFE9FD0 +:106EB000FCF05806C4206F285C78A2B8A988A2A864 +:106EC000FE9FFEA1F0CC0004F0C20005F01F007888 +:106ED0001893FE90FEB45802C120ECCCFFFB300AA0 +:106EE00035DB1938F0C90021F6091800F9B80B5F35 +:106EF000E60A0B082FFA1432FE9BFFF53008E60273 +:106F00000B084F581AD34F5A1AD8302BEEFC00A456 +:106F1000F01F0062069CF01F00652FEDFE9FFE8FA4 +:106F200078380E9C5D18EF4C006CCAEB6FF858086F +:106F3000FE90FCAFFE9FFDAA04983FE910C9B0A6E1 +:106F4000B086B096E4C9FFFCB2B6B286B296B2A6DD +:106F50006F282F88EF480048CB0B0A9CFE9FFE85C8 +:106F60005045FE9FFE5074181033FE91FF7A7499BD +:106F70005809FE90FF766FBB0E9C5D19FE90FF7165 +:106F80003016C74B3058406CEF4800482FACF01F0C +:106F900000481896FE90FE35B89230283039B888EF +:106FA000B8C9504CF8C2FFFB50250A91C1A8661A17 +:106FB0006EB8103AC130403CF01F003FC0F0660888 +:106FC0005808C5A040285808C0913FE904C93018A6 +:106FD000502860082FF12FF8810866F35803C0602D +:106FE000660B580BCE50661ACE7B5801EFF8101284 +:106FF000E5F10E00EFF80012F7B800FFEFF80A1203 +:107000005C78ACB8A988ACA8FE9FFDFD069B6ECC51 +:10701000F01F002DEF4C0058FE90FE51C2DB6FA810 +:107020006F9C70095D196F6870291AD91AD36EC8E0 +:1070300018921AD8302B4AAAEEFC00A4F01F0017B1 +:10704000EF4600588F268F1658025F1B6EB92FDD52 +:1070500058D95F081668EC081800FE90FE30E4F876 +:1070600001605808FE91FC15E4F801685808FE908C +:10707000FE26FE9FFC0E661804C8CACB800265740B +:107080008003D7848002670C8002663C80026370B4 +:10709000800264808003D8A080023A1A800264E4EF +:1070A00080028D9C8000917C800091E8800092009D +:1070B000800091DC80023AD8800271E48003D8F02D +:1070C0008002679C800271908003D9248002634C07 +:1070D0008003D9708003D8D08003D3E48003D930F3 +:1070E000EBCD40801897580CC0E0488BF01F00088B +:1070F0000E9CF01F0008EEFC00ACF01F00070E9C79 +:10710000F01F0006E3CD80808003D9AC8002634C81 +:107110008002653C8002D298800091E8EBCD40F877 +:10712000203D1896169414931295E06C00C8F01F39 +:1071300000151897C1C033C8F946006499F8F9449E +:107140000068F94300A430CA300B1A9CF01F000EEF +:107150006A2850286A0950096A181A9C5018F01FAA +:10716000000BEF4C00AC1A961898C0500E9C2FDD07 +:10717000E3CD80F80E9C1097F01F0005CF8B000028 +:1071800080028F24800091D08002D2C4800091E8D8 +:10719000189948A8700C580CC051C0D878FC580CED +:1071A000C0A078081238CFB1781816385E0C78FC79 +:1071B000580CCF815EFD000000007AB01899489805 +:1071C000700C580CC051C0C878FC580CC09078089E +:1071D0001238CFB178181638CF81782C5EFC5EFD5E +:1071E00000007AB0189B4888700C580CC0A0189901 +:1071F000300A2FFA72F95809CFD1149897085EFC1B +:107200001898CFDB00007AB05EFDD703EBCD40E0ED +:1072100048D81896169570075807C051C0E86EF701 +:107220005807C0B06E2C0C9BF01F0008CF916E0861 +:107230008B086E1CE3CD80E030088B08109CE3CDFA +:1072400080E0000000007AB0800091A0EBCD40C04B +:1072500048B70E966E095809C0B072F88D08129C96 +:1072600072D85808C0705D186E095809CF71E3CD07 +:1072700080C0129CF01F0003CEEB000000007AB02B +:10728000800091E8EBCD40C048D66C485808C0312A +:10729000C0880E987057109CF01F000A5807CFA1A5 +:1072A0006C6CF01F000930086C3C8D68F01F000505 +:1072B0006C8CF01F0004E3CD80C0000000008C90B7 +:1072C000800091E880014544EBCD40F8495718967D +:1072D000169314946E2B12952FFB6E3CA56BF01F2A +:1072E0000012C1D06E28A568F80809066E29A569A4 +:1072F000F8090009932593146E2AF4081504F80878 +:10730000000891336E188F3C2FFA1036EFF69A0171 +:107310008F2A3018300C8FC8E3CD80F8E3CFC0F847 +:1073200000008C90800091F4EBCD404CE0634DD395 +:10733000EA1310621896F01F000DF8030648A7899B +:10734000E06A03E8F20A0248F8080109121CF20A8E +:10735000024AF80304428D1ABF5CA743E60C010CF5 +:107360008D0CE3CD804C0000800145C4EBCD408006 +:10737000202D4A076E495809C2C06E581039C29074 +:107380001A9CF01F001D6E484009700A1439C2444F +:107390007018401BF40901091618C276F00B141F6F +:1073A000E06A03E8F20A024AE0694DD3EA19106282 +:1073B000F0090448A7491619F20A000C580CE08A93 +:1073C000000E300948DA6E6BF01F000D6E488F58C2 +:1073D0002FEDE3CD80801439C030301CCF3B7018C6 +:1073E000401B103BCFB4CD7B2019F028BDC0CD7B16 +:1073F00000008C9080027328800275188001455827 +:10740000D43149A0189516931492604C580CC2B010 +:1074100030060C940C91785778480A38C09018962A +:107420000E9C5807CF91F01F0012089CD8325BF3D6 +:107430005F0A782906395F081448E2081800CF006F +:107440005BF25F0A783904395F081448E2081800D3 +:10745000CE705806E1F70A04EDF71A052FF4F01F75 +:107460000005CDFB1894CE0B00008C908002736C4D +:10747000800091E8EBCD40FC18961695149212947A +:107480001093318CF01F00211897C3A0F01F00202B +:107490006E0A6E1B0C0AEA0B000B8F0A8F1BEE5B49 +:1074A000423FE08A000B2FFAEE3B42408F0A8F1BCF +:1074B000EE5B423FFE99FFF98F248F338F423008F5 +:1074C0008F58494C78495809C1D072081438E0895E +:1074D000001A2F0CC0A8F2CCFFEC72595809C0A0BA +:1074E00072081438E0890007103ACF617218103B17 +:1074F000CF348F599907F01F0008E3CF80FCE3CF0A +:10750000C0FC2F0CCF7B000080009200800273280B +:1075100000008C908002736CEBCD40E0202D49661A +:107520001A9CF01F00166C475807C1F040096E08FE +:107530001238E089001B3005C05840096E08103928 +:10754000C1451039C0516E1940181238C0E56E5847 +:107550008D558D486E3B6E486E2C5D180E9CF01F4D +:1075600000086C475807CEA1F01F00062FEDE3CFAF +:1075700080E0000000008C9080027328800091E879 +:107580008002736CEBCD408049A76E3E580EC2B0AE +:107590006E2A580AC280E08A002B7C081838C27014 +:1075A000FCC9FFF0300BC05872082F091838C050C2 +:1075B0002FFB163AFE99FFFA143BC170201A163AB7 +:1075C000C0F0161AF60C1504A56AFC0C000C2FFB73 +:1075D000A56BFC0B000BF01F00086E2A201A301858 +:1075E0008F2A8FC8E3CD8080E3CD8080300BCE7BA7 +:1075F00000008C90800091C4EBCD406048861895C7 +:10760000334A300B0C9CF01F0007ECCCFFE88D05D3 +:10761000301BF01F0005E3CF8060000000008C905D +:10762000800091D0800144F80050F2010100000078 +:107630000000000000000000F6F800DC5808C05010 +:10764000F8F800F85808C0205EFDF6FB00D0580B93 +:10765000CFC076085808C04176185808CF602F8BE5 +:10766000CF9BD703EBCD4080300B1897F01F001352 +:10767000306A300BEECCFF64F01F0011306A300B23 +:10768000EECCFF5EF01F000E300BEEFC00E0F01FB2 +:10769000000D300BEEFC00E0F01F000BEEF800BC1C +:1076A0005828C030E3CD8080EEFC00E0300BF01FA6 +:1076B0000007E3CD80800000800217D0800091D0C9 +:1076C000800261E8800261D4800261A4EBCD408039 +:1076D0001897F8F800945808C160300BF94B0094E3 +:1076E000F8F800D470985808C040F8FC00C45D1841 +:1076F000486A302B0E9CF01F0006300A0E9C149B2B +:10770000F01F0004E3CD80808003D9D480023A1AB0 +:1077100080022584D431209D500C761558155F9831 +:107720007607169058075F1910693008F00918009D +:10773000E08000B8EEC4FFFF0989F2C6FFFE0C35F9 +:10774000E08500B010923DD33301C168E208180013 +:10775000C2800C0758155F9958075F181268E40833 +:107760001800E080009EEEC4FFFF0989F2C6FFFE0C +:107770000A36E08900960C150F88E6081800CE71CD +:10778000305AF4091800FE98FFE6EECCFFFE306A8E +:107790004DFBF01F0060C0B00F88E2081800CDA1BB +:1077A00009883019F2081800FE98FFD540080E9B92 +:1077B0000C9AF0FC00DCF01F00581897C711400A23 +:1077C000FACBFFFCF4FC00DCF01F0054C21540793A +:1077D0005809C1E040685808E0890007C19840682E +:1077E0001037C1644079EE0B1504F20B000B400911 +:1077F0003008F2FC00DC2FF71099109AF01F0048B7 +:10780000CEF14008301BF0FC00E0F01F004660465F +:10781000605558065F1958155F981069C760ECC429 +:10782000FFFF0989F2C7FFFE0E35C6F53003069249 +:107830000691C1A85802C0610D88330AF4081800E7 +:10784000C3A00E060E1558065F1858155F991268EA +:10785000E2081800C3F0ECC4FFFF0989F2C7FFFE7D +:107860000A37E08900385803CE610D883DDAF40804 +:107870001800CE113058F0091800FE98FFDD306A6C +:107880004A3BECCCFFFEF01F0023CD5140090E9A7D +:107890000C9BF2FC00DC3013F01F0023CCCB600704 +:1078A0005807CB604009300AF2FC00DC149BF01F43 +:1078B000001ACAEB09883019F2081800FE98FFC3B5 +:1078C00040080E9A0C9BF0FC00DC3012F01F0017F1 +:1078D000CB9B5803C0F05802C0B160485808C08024 +:1078E0004008049AF0FC00DC049BF01F00102F7D80 +:1078F000D83260465806CF004009300AF2FC00DC5E +:10790000149BF01F0009CE8B3002CF5B80027628DB +:107910008000917C8002B5EC8002C04C8002938094 +:10792000800255968002B58C8002B52CD431FACDF8 +:10793000009018911497586BE08B00C4FEF807482C +:10794000F00B032F580AC0A0F8F800907009739A42 +:10795000580AC0410E9BF01F01CD304B029CF01F16 +:1079600001CCE2F801185808E0810312FAC7FF942D +:10797000E2F800D470285808C4C00E9BE2FC00C492 +:107980005D18C475E2C6FF64306A0C9B0E9CF01F44 +:1079900001C1C3F0FB3800711AD8FB3900741AD941 +:1079A000FB3800771AD8FB39007A1AD9FB38007DEA +:1079B0001AD8FB390080FEFA06DE1AD9301B029C69 +:1079C000F01F01B6306A0E9B0C9CF01F01B5306AA7 +:1079D000300BE2CCFF5EF01F01B3E2FA00BC2FAD2A +:1079E000584A5F08590A5F091248C081588AE080E6 +:1079F000030C0E9B029CF01F01ACE2F80090704952 +:107A00005819E08102D5E2F800B05808E08002D0B1 +:107A1000FB3800711AD8FB3900741AD9FB3800778B +:107A20001AD8FB39007A1AD9FB38007D1AD8FB39ED +:107A30000080302B1AD9FEFA0672029CF01F0197C3 +:107A4000E2FB00B02FAD580BC040029CF01F019824 +:107A50000E9BE2FC00DCF01F0197622CF01F0196E8 +:107A6000300BE2FC00E0F01F0195300BE2FC00E07F +:107A7000F01F0193E2F800BC5828C061300BE2FC13 +:107A800000E0F01F0190301BE2FC00E0F01F018BD2 +:107A9000300BE34B00F4E2F900BC59095F0A584986 +:107AA0005F081448F6081800E0800216029CF01FD8 +:107AB0000186307B029CF01F0176029CF01F01833F +:107AC0002DCDD832580ACFD0149B7439F8FC00DC85 +:107AD000742AF01F017F2DCDD832F8FB00BC590B62 +:107AE000CF00F8F800E85858E08002355838E08BAD +:107AF0000234E2C7FF64306AFEFB05D80E9C2F8B70 +:107B0000F01F0164EE0B1710E06800A2E3D8E00B51 +:107B1000029CF01F0171E2FC00DCF01F0170FEFA14 +:107B200005BE302B029CF01F015DE2FA00BC584AF2 +:107B30005F08590A5F091248C0B1588AE08002976D +:107B400030080E9BE3480104029CF01F0157029C81 +:107B5000F01F01642DCDD832FEFA058C303BF01FAA +:107B6000014F5807E08002806E0858085F1B169A84 +:107B7000E2FC00DC301BF01F015DFACCFF94F01F2B +:107B8000015CE2F800985808E08001D541B9F2089C +:107B90000108E048003CE08A01A6E34900982DCDA9 +:107BA000D832F01F0154E08501EBE2F900907248F1 +:107BB0005828C870E2F800AC5808C831E2FA00CC86 +:107BC0001094500AE2F000D072285808E08A00A908 +:107BD000300850187218401AF00A032850585800FC +:107BE000E08A0097400530020A96C11808973003D2 +:107BF00030142FF2ECC6FF6404305F983009E9E8D6 +:107C00000008F2081800E08000970E940C9B029C7C +:107C10000C93F01F0139C05078385818FE99FFE8CE +:107C20006D585808C051ECF800805808CE004059F3 +:107C30005809CDD0ECC8FFFAECCAFFA8ECC9FFD4B4 +:107C40005048502A50394057C0486E175807CCF05A +:107C5000EEF801945808CFA16CAA6E58103ACF6183 +:107C60006E4B404CF01F010BCF116E885808E0811D +:107C700000E16F6AEDBA0001C061ECFB0080580BB7 +:107C8000E08100E3F1DAC001300AF4081800CDE029 +:107C90006D5B580BCDB0FACAFF94403CF01F011742 +:107CA000CD516F6841B91268CD106F3841C9126863 +:107CB000CCD06F4841D91268CC906F5841E9126816 +:107CC000CC5058065F04C96B149BF01F00F02DCDFB +:107CD000D832149B2EACF01F010A1896FE91FEF2CA +:107CE0006F9B580BE080012A581BFE91FEEBE34B83 +:107CF00000D8029CF01F00FB622CF01F01028326BB +:107D0000CE0A5803E08100BF0E94E2F900904018BB +:107D10002FF850187228401A103AFE95FF5DE2F8CD +:107D200001085808E0800121029CF01F00F7E2F9E9 +:107D30000090C4BB5804CE600E923006C108049770 +:107D4000089930032FF6EAC5FF640C305F98F3E81A +:107D500000083009F2081800CD500E920A9B029CD0 +:107D60000A93F01F00E5C05078385818FE99FFE9D3 +:107D700040585808CE50EACAFFFA4057506AC078B7 +:107D80006AA8103AC5006E175807CDA0EEF8019406 +:107D90005808CFA16E5A580ACF416E885808C1E1E1 +:107DA0006F5BEDBB0002C040EDBB0003CED1F1DB49 +:107DB000C002C0806B585808CE71EAF8008058089D +:107DC000CE31EEF8014C5808C110EB190088EDB91E +:107DD0000001CDA058055F09CB6B306AEECBFFE800 +:107DE0000A9CF01F00ACCD01CDCB1099EEC8FECCA3 +:107DF0002FF9700A580AC2612FC85849CFA1EDBBAC +:107E00000003C071EEF800F0F1D8C002F9BA010128 +:107E1000EB190088EDB90004C030580A5F0A580A0F +:107E2000CB30CD6B6E4B406CF01F009ACAD1CB6B40 +:107E3000306AEECBFFE80C9CF01F0096FE91FF0726 +:107E4000C19B301ACDDBFACAFF94402CF01F00AB67 +:107E5000C0306F6AC18B6F6A41B8F5E80008FE90C8 +:107E6000FF136F3841C91268FE90FF0E6F4841D969 +:107E70001268FE90FF096F5841E91268FE90FF04F6 +:107E8000C21BE2F800A85808C131306AE2CBFF6497 +:107E9000069CF01F0080C170E2F800E85838C081ED +:107EA000306AE2CBFF5E069CF01F007AC0C00E9BDA +:107EB000029CF01F007FE08100B50E9A069B029C99 +:107EC000F01F0092009A400BE2FC00DCF01F0090D3 +:107ED000FE9FFDF8169A029C30ABF01F008EFE9FAD +:107EE000FDEE3017FEFA0230303B029CE34700946F +:107EF000F01F006AE06B2710300CF01F0088E2F8DA +:107F000000D470985808C0500E9BE2FC00C45D1865 +:107F100030EB029CF01F0082300A029BFEFC020440 +:107F2000F01F0081300802994FEA109B33CCF01FFC +:107F3000007F41B9FE9FFE33E2F800D85808FE905A +:107F4000FDC1E34B00D8029C301BF01F0079FE9F5F +:107F5000FDB9582BC780E07A86A0300B029CF01F39 +:107F60000075FE9FFDC8305BE2F801105818C7206D +:107F7000029C300AF01F006FFE9FFDA4E2F9009002 +:107F800072485828FE90FD9E301BCEFBFAC7FF9426 +:107F9000E2C6FF64306A0C9B0E9CF01F0041E2F8C1 +:107FA00001185808FE91FCF8FE9FFCE4029CF01FAB +:107FB00000621896C230F8FB0194580BC1F1795851 +:107FC000E2180013C351189B029CF01F005CE2F8FA +:107FD00000B05808C0701036C050E2FC00E0F01F3E +:107FE0000058E2FC00DC0C9BE34600B0F01F00559B +:107FF000029CF01F0055FE9FFD0D029C303BF01FC0 +:108000000053FE9FFD5FE2F800B05808FE90FCF3BD +:10801000F0F800F0F1D8C002FE91FCEDFE9FFCEFFD +:10802000029C300A30ABF01F0043FE9FFD4B350928 +:10803000FAC8FF70189A10D9029CFAC9FFE4F01F21 +:108040000044CC6B4C3AF01F0015E2F800E8FE9FAC +:10805000FD4F72485818F9B80002E3F80A44F9BB1A +:108060000000C87B0E9BFE9FFD84E2F800B058081C +:10807000FE90FD68F0F800F0F1D8C002FE91FD62BC +:10808000FE9FFD678003D9B880027714800217D065 +:108090008000917C8003D9F880023A1A800091DC3C +:1080A000800091D0800226948003DA3880027638EE +:1080B0008002BA4C80028172800261E8800261D441 +:1080C000800261A480021CE080021DB88002979C9F +:1080D0008002762880021AE08002BA1C8003DAA8A7 +:1080E000800276648003DAE48002D19C80028F549F +:1080F00080021E84800218F88002BD68800091A072 +:10810000800281748002189C800230DC800298A476 +:108110008002246C8003DB0480028F1C800228D83C +:10812000800276CC800274008002747480022794EE +:10813000800225848002195C800222A480025748B4 +:108140008002B9D48002237080022FCC80021F30BD +:108150008003DA68580C5E0E5E1DD401201D3008C5 +:10816000767C3009BA881A9A7668129B5D182FFDC2 +:10817000D8025EFCEBCD40801897580CC090789CDC +:10818000580CC035F01F00040E9CF01F0004E3CD16 +:108190008080000080027584800091E8EBCD40F87B +:1081A0001896129510944063328CF01F000B1897AC +:1081B000C0F00C9B311AF01F00093FFC8F658F74D3 +:1081C0008F838F9C30090E9A485BF01F00060E9C2F +:1081D000E3CD80F880028F24800091AC8002815A28 +:1081E000800272C8D4011698306AF8CBFFEF109C59 +:1081F000F01F0002D80A0000800091DCD431213D3C +:1082000076FE511E760A503A761950497628505813 +:10821000763E506E764A507A7669508976785098D4 +:10822000768E50AE769A50BA76B950D976C850E864 +:1082300076DE189850FEF8C9FFF876EA510A7654AF +:1082400076AB500C5019E02BA44F50CB110EF8CB4D +:10825000FFF45008512E403A700340487205502BED +:10826000E069A478EA19D76AFC0900091409760ABA +:10827000E06BB756EA1BE8C7F40B000B100BF5E5F3 +:108280002008066814581009E06870DBEA182420FA +:10829000EBE3200AF20E1507FDE9139E060EFDEA38 +:1082A000000A0A5A1005140BFDE32008F606150C07 +:1082B000EDEB13461C06EDE800080658405AE0694D +:1082C000CEEEEA19C1BD14051005EDEE2008EA0B4B +:1082D0001511F7E512FB0C0BF7E800081C58120308 +:1082E0004069120310034078E6051516E0690FAFE8 +:1082F000EA19F57CEBE312A5F00900091605F7E68B +:108300002008EBE800080C581C091009EBEB2008CA +:10831000F2031507E7E913930A03E7E80008165884 +:10832000E06AC62AEA1A4787E80A000A0C0A100A15 +:10833000E7E52008F402150CE5EA13420602E5E839 +:1083400000080A58408EE0694613EA19A830FC0973 +:10835000000916091009E5E32008F2061511EDE9F8 +:1083600012F60406EDE800080658409AE06B950105 +:10837000EA1BFD46F40B000B0A0B100B40A840C98A +:10838000F60E1516FE395BB1FDEB12AEE06A98D819 +:10839000EA1A69800C0E40BBF00A000AEDE22008E0 +:1083A000FDE80008045840C1060A50C9100AE069F7 +:1083B000F7AFEA198B44FDE62008F6090009F40B33 +:1083C0001507F7EA139B1C0BF7E800080C58F7EEAB +:1083D000200A0C0104091009F206150CEDE91346F8 +:1083E0001606EDEB2008EDEA000A1C5A1401E2051E +:1083F0001511EBE112F50C05EBE80008165840DA10 +:10840000E069D7BEEA19895CF40900091C09100962 +:1084100040E8F20E1516E06A1122EA1A6B90FDE9A7 +:1084200012AEF00A000A0A0EEBE62008160AFDE872 +:10843000000840FB0C58E0697193EA19FD98100A96 +:10844000F6090009FDE52008F40B1507F7EA139B70 +:108450001C0BF7E800080A580C0910094108F2063D +:10846000150CE06A438EEA1AA679EDE91346F00A84 +:10847000000A1606F7EE2008EDE800081C580A0A64 +:10848000100A4118F4051511E0690821EA1949B4E8 +:10849000EBEA12F5F00900090C05EDEB2008EBE81A +:1084A000000816581C091009F2031516E7E912A373 +:1084B0000A03E7E520080C680A58404EE06A256286 +:1084C000EA1AF61EFC0A000A160A408B100A40D867 +:1084D000F40E1505E069B340EA19C040FDEA13BE89 +:1084E000F6090009060E403B0C09E0665A51EA16EF +:1084F000265EF0060006FDE320080A68065810090B +:10850000E062C7AAEA12E9B6F6020002F20B150908 +:10851000F7E9137B41191C0BF7EE200806681C587D +:108520000A0606021006E063E681EA13D8A1F20308 +:108530000003EC09150EF3E613291609F3EB2008E6 +:108540001C68165840CA10024078E065105DEA15B4 +:10855000D62FE0611453EA110244E8050005F40146 +:1085600000011C051601E40A1514E06EFBC8EA1EA2 +:10857000E7D3F5E212CAF00E000E120AF5E9200860 +:10858000166840BB125812031005E066CDE6EA16E5 +:1085900021E1F6060006EA0B1505F7E513BB140BFF +:1085A000F7EA2008126841091458E06507D6EA1571 +:1085B000C3371001F2050005E2091509F3E113794B +:1085C0001609F3EB20081468165810034068140EBF +:1085D0001606E60A150EE0620D87EA12F4D5F5E3F9 +:1085E000132AF0020002120AF5E92008166840ABCF +:1085F00012581205100EE06314EDEA13455AF60303 +:108600000003FC0B1514F7EE12CB140BF7EA20084D +:10861000126840F91458E061E905EA11A9E310066F +:10862000F2010001EC091505F3E613B91609F3EBA5 +:10863000200814681658100540581402E066A3F884 +:10864000EA16FCEFEA0A1509F0060006F5E5137ACA +:10865000120AF5E9200816681258409E1002160307 +:10866000E40B150EF7E2132B140BF7EA200812683F +:108670001458E06502D9EA15676F1003FC05000580 +:10868000E60E1514FDE312CE160EFDEB200814685D +:1086900016581201100140A840E91406E060F68166 +:1086A000EA108771E20A1505F0000000F5E113BA3F +:1086B0001C0AF5EE200816681C58E0624C8AEA1283 +:1086C0008D2A1006F2020002EC091509F3E613796F +:1086D0001409F3EA20081C681458160540DB10053D +:1086E0004108E434C6BEE0616122EA116D9DE80AEA +:1086F0000007F6010001E066380CEA16FDE5F00619 +:108700000006EA08150EF1E513281208F1E9200B1E +:10871000F7EA000A125A1C021402407A404E120074 +:108720001001E063CFA9EA134BDEF4030003E40A6F +:108730001514F5E212CA100AF5EB200BF5E8200833 +:10874000EE0B000BF6091504F3EB13C914091258CC +:1087500014061000F3EA200AE065EA44EA15A4BE14 +:10876000E008150BFC050005F1E01358120512088E +:10877000105A10031401F1E92009E20B1510F7E17A +:10878000130B100B1659F7E820081206EC0E1517FC +:10879000FDE6129E160E1C5810054098FDEB200AAF +:1087A000EA061504E0694B60EA19F6BBEDE513C66D +:1087B000F00900091C0616090C5AEDEE20081403F6 +:1087C00040CBE605150BEBE313550C050A58E06AA0 +:1087D000BC70EA1ABEBF1009F60A000AEBE62008D0 +:1087E000F20B1510F7E9130B0A0B16581C0A100AA6 +:1087F00040F8F40E1517E0697EC6EA19289BFDEAD9 +:10880000129EF0090009160EF7E520081C580C0905 +:1088100010094038F2061504E06A27FAEA1AEAA1BC +:10882000EDE913C6F00A000A1C06FDEB20080C58FF +:108830000A0A100A4068F405150BE0693085EA1948 +:10884000D4EFEBEA1355F00900090C05EDEE200812 +:1088500016090A58408B1009E06A1D05EA1A0488B7 +:10886000EBE62008F60A000AF20B1510F7E9130BE5 +:108870000A0B16581C0A100A40B8F40E1517E069C6 +:10888000D039EA19D9D4FDEA129EF0090009160E72 +:10889000F7E520081C580C09100940E8F2061504F9 +:1088A000E06A99E5EA1AE6DBEDE913C6F00A000A88 +:1088B0001C06FDEB20080C580A0A100A4118F405A2 +:1088C000150BE0697CF8EA191FA2EBEA1355F009D1 +:1088D00000090C05EDEE200816090A58405B100946 +:1088E000E06A5665EA1AC4ACEBE62008F60A000A0C +:1088F000F20B15101C0AF7E9130BE0692244EA1980 +:10890000F4290A0B1658100A4032F40E15171202F9 +:10891000FDEA129EEA0811FF160E409AFDE81008C3 +:10892000E069FF97EA19432A1658F40900090A0971 +:108930000C0241061002F60811FFE40A1506F5E2E2 +:1089400013AA1C0AF5E810081C58F2080005E06993 +:1089500023A7EA19AB941206FC0811FFEC0B000BDD +:10896000EA06150AEDE513661406EDE8100814583A +:10897000F6080008E069A039EA19FC93F00B150F1E +:10898000FA243942F7E8131BE80900050C0BEA0E3C +:10899000000EF40811FFF7E810080C58E06959C3FD +:1089A000EA19655BFC08000540E2EA0E15151202A3 +:1089B000FDE512BEEC0811FF160EFDE81008165872 +:1089C000E40A000AE069CC92EA198F0CF40800026C +:1089D0004068F00900090C09E40A1506F60811FFC1 +:1089E000F5E213AA1C0AF5E810081C58F208000268 +:1089F000E069F47DEA19FFEF40C1FC0811FF1201A4 +:108A0000E406150AE20B000BE0695DD1EA198584E2 +:108A1000EDE213661406EDE8100814584045F60818 +:108A200000011205E20B150FEA0E000EF7E1131B11 +:108A3000F40811FF0C0BE0697E4FEA196FA8F7E804 +:108A4000100840A30C581203E60A000AFC080005AF +:108A5000EC0811FFEA0E1515FDE512BE160EFDE835 +:108A600010081658F4080003411AF60811FFE069CF +:108A7000E6E0EA19FE2CF4090009E60A15060C09DD +:108A8000F5E313AA1C0AF5E810081C58F2080003C5 +:108A90004088E0694314EA19A301F00900091609A6 +:108AA000FC0811FF40FBE605150AEBE3136514050E +:108AB000EBE810081458F2080008E06911A1EA195F +:108AC0004E08F6090009F20E000EF006150FE069D7 +:108AD0007E82EA19F753EDE81316F40811FF0A062F +:108AE000EDE810080A58FC080001407E120EEA0862 +:108AF00011FFFC0A000AE20E1515FDE112BE0C0E74 +:108B0000FDE810080C58F40800094128F20A15067F +:108B1000F5E913AA1C0AF4080009E068F235EA181E +:108B2000BD3A990940D91009EC0811FFF205000B74 +:108B3000F5E8100840091C58720CF6080001E069BD +:108B4000D2BBEA192AD740581208E20B150AF006E0 +:108B50000009F7E1136BFC0811FF140BF7E810088C +:108B60001458F208000640B8E069D391EA19EB8680 +:108B7000F0090009F20E0008F40A11FF400EEC099A +:108B8000150FF3E613191609F20C000CF3EA100A9C +:108B9000165AF00A0006EC081515F1E612B8100C8A +:108BA0009D0C401A7408120895084028700916098F +:108BB00091092EDDD832D703EBCD40E03809764855 +:108BC000F1D8C066F608000AF56900181895F00A91 +:108BD000113F1697F6080008F0CCFFE7587AE08BB3 +:108BE0000056300BF01F002DEEC6FFE8EECCFFA8BC +:108BF0000C9B1798178917BAF3E8108917A8F1EAA0 +:108C00001088F3E8110916A9183BCF410C9B0E9C64 +:108C1000F01F0023338A300B0C9CF01F00200C9BAC +:108C2000ECCCFFC81798178917BAF3E8108917A872 +:108C3000F1EA1088F3E8110916A9183BCF416E48F4 +:108C40006E590C9B0E9CEF480050EF490054F01FEA +:108C500000140E9BEECCFFF01798178917BAF3E8B3 +:108C6000108917A8F1EA1088F3E8110916A9183B32 +:108C7000CF410E9B0A9C310AF01F000A0E9C304A1D +:108C8000300BF01F0006E3CD80E0208A300BEEC6EB +:108C9000FFE8F01F0002CC4B800091D0800281FCE5 +:108CA000800091DCEBCD40FC1493784AF40300384B +:108CB000103AF9F98005F9F9B005F7B90BFFF9F9A0 +:108CC000BA059948E608161DF20800089958189444 +:108CD0001692F1DAC066C381F8C5FFE8E043003FB1 +:108CE000E088002C3006EAC7FFC0E406000B340A17 +:108CF0000A9CF01F00290A9B1798178917BAF3E8F6 +:108D0000108917A8F1EA1088F3E8110916A90E3B9B +:108D1000CF410A9B089CF01F00212C06E6060108A3 +:108D2000E048003FFE9BFFE3E6C80040E7D8C006EE +:108D3000E018FFC02C081002069A049B0A9CF01F42 +:108D40000016E3CD80FCF00711402E88100C0E3386 +:108D5000C1D30E9AF01F0010E8C5FFE8E8CCFFA8C9 +:108D60000A9B1798178917BAF3E8108917A8F1EA30 +:108D70001088F3E8110916A9183BCF410E130E0213 +:108D80000A9B089CF01F0005CAAB069AF01F000260 +:108D9000E3CD80FC800091DC800281FCEBCD40FCC7 +:108DA000216DE0682301EA186745E06EAB89EA1E91 +:108DB000EFCD30075008501EE068DCFEEA1898BA84 +:108DC000E06E5476EA1E1032504750575028503EFD +:108DD00018931292580CC140149416951A962FF7B6 +:108DE000090A0B0B1A9CF01F00080E33FE9BFFF9BB +:108DF0001A9B049CF01F00052EADE3CD80FC1A9653 +:108E0000CF8B000080028CA480028BB8D431FACDC5 +:108E10000088501C500B14931292109142B0585A73 +:108E2000E08B0056E04B0040E08B0054FAC4FFF8A2 +:108E3000340A300B089CF01F002E400A401B089C8F +:108E40000896F01F002CFAC5FFB808970D88EC189B +:108E500000360CC80A36CFB1340851845128580363 +:108E6000C110FACCFF9CFACBFFB4300AE60E150213 +:108E7000E40A030818A8E20A030916A92FCA1C3A33 +:108E8000CF81E6CCFFFF00990A9AFAC3FFA0069BA8 +:108E9000F01F0019340A300B089CF01F0015400A1F +:108EA000401B089CF01F00130F88EC18005C0EC8D4 +:108EB0000C37CFB1310C3408513C5184519000999A +:108EC0000A9A069B5128302CF01F000B2DEDD8324A +:108ED000FAC6FF881A9A0C99FACBFFFC301CF01FD7 +:108EE0000006310850165008CA2B0000800091D0AF +:108EF000800091DC80028D9CD401202D501A5009F5 +:108F0000301A1AD8FAC9FFF8FAC8FFFCF01F00039C +:108F10002FFD2FEDD802000080028E0C5EFC5EFE5D +:108F20005EFCD703EBCD40C01896F01F00061897E3 +:108F3000C0500C9A300BF01F00040E9CE3CD80C093 +:108F400080009200800091D0D401F01F0002D80A66 +:108F500080014600D401F8CBFFFCF01F0002D80AC4 +:108F6000800145D4780C580C5E0C3008F948004C50 +:108F7000780C580CCFC15EFC580CF9FC10435EFC19 +:108F8000580CF9B80100F9F81A435EFCEBCD40E04B +:108F9000189716961495314CF01F0005F9F71A032F +:108FA000F9F61A04F9F51A02E3CD80E080028F2465 +:108FB000EBCD40E01696149578075807C160580627 +:108FC000C080306A0C9BEECCFFC0F01F000AC0A12D +:108FD0005805C0B0EECCFFFC310A0A9BF01F00051B +:108FE000C0406E075807CEC10E9CE3CD80E0000064 +:108FF0008000917CEBCD4040781820181696991887 +:10900000784B78390C9C5D190C9CF01F0003E3CD64 +:1090100080400000800091E8EBCD4080202D300A98 +:109020001897189B49BCF01F001C300A0E9B49BCC6 +:10903000F01F00196E085808C2201A9CF01F001873 +:109040006E08400A70EC0E993008141C109BF8084A +:109050000C4C490A2FFCF01F00136E2BF6FA010C82 +:10906000580AC1006E08400A712C0E99141C300871 +:1090700048AAF8080C4C109BF01F000A2FEDE3CD16 +:109080008080F6CBFEB80E9CF01F0007CF80CEBBD1 +:10909000800290E4800274008002913080028F543C +:1090A0008002747480028FB0EBCD40C01896580CCB +:1090B000C1407809300899085809C031C0880E9914 +:1090C0007207129CF01F00065807CFA10C9CF01FDE +:1090D00000050C9CF01F0002E3CD80C0800091E8E9 +:1090E00080029018EBCD4080202D18971A9CF01F1D +:1090F000000E6E0A580AC0C1C1087408149B8F087C +:10910000300A0E9CF01F00096E0A580AC06074E90C +:1091100040081039FE9AFFF30E9CF01F00052FED5A +:10912000E3CD808080028F5480028FF480029018FB +:10913000D4013008782AF548010C7829F2FC0104A2 +:10914000F01F0002D8020000800255ACD43120CDBF +:109150001096782814941293E04A00205FBAF0F930 +:109160000160189758295F18169241511448C05051 +:1091700030060C9C2F4DD832354CF01F00621890F1 +:10918000CF80089A049B2ECCF01F005F81D4FAC9CF +:10919000FFE450965083FAC5FFF84DC81AD5303A0F +:1091A000089B049C4DA65086F01F005AE0C8FFFCA7 +:1091B0000A9B5018310A109CF01F0053FACCFFD4C0 +:1091C000F01F0055E0C8FFC0502840BC6E29F2F8DF +:1091D0000150F808000881E86E2AF4FB0150F4F908 +:1091E0000154E06A851FEA1A51EBB739F20A0648C2 +:1091F000301AA599180981FAE1490048306A402CD3 +:10920000069BF01F0041E141004C2FFD6E06580601 +:10921000C2903005C0680C956C0C580CC58018962F +:10922000ECCBFFC0306A069CF01F003CCF516CD8DD +:109230000838C5505805EDF80000EFF80A00EDF8C1 +:109240001000EBF81A006E29F2F8010C0C38F9B88E +:109250000000F3F80A430C9B301A0E9CF01F0030FC +:109260006E066E1859F8E08A00155806C3200C9A4D +:1092700015088F086E28F0F90128ECCBFFC0720C9E +:1092800072F85D180C9B300A0E9CF01F00256E06CC +:109290005806C1F060EA6CE8103AC074C1A872E8E0 +:1092A0001438E089000612966C095809CF9181099B +:1092B0008D006E2C6E18400A401B2FF88F18F8F99D +:1092C00001280096720C72E85D18C54B6E06CCAB97 +:1092D00081068F000E9CF01F0013CECB089A049BD2 +:1092E000ECCCFFECF01F000DCA61310A400BECCC56 +:1092F000FFFCF01F000AC9F1009CF01F000BC3AB7C +:1093000080028F24800091DC8003DB248003DB9CBF +:109310008002B14480028F548000917C80028FF4DF +:1093200080029018800091E8EBCD4080189E78076D +:10933000580BC06116970E9CE3CD80806E075807CE +:10934000CFB06F381638CFB11AD814997C286EDA9E +:10935000F0C8FEC8EECBFFEC1C9CF01F00092FFDEF +:10936000580CF8071700EFF8100EF9F81A0EF80766 +:109370001710F9B80101F9F81A14CDEB8002914CDD +:10938000EBCD40FC1897300CEF4C010C1496129268 +:109390001094EEF50108580BC080169A189B0A9C91 +:1093A000F01F0016EF4C010C58065F13EEFC010C89 +:1093B000580C5F09F3E30008C16158045F18F3E833 +:1093C0000008C0A05803C0800C9A049B0A9CF01FA0 +:1093D000000CEF4C010C580CF9BC00FFF9BC01006B +:1093E000E3CD80FC300A0C9B0A9CF01F00045F094F +:1093F000EF4C010CCE3B000080028FB0800293281E +:109400000000000000000000EBCD4080580CC100BF +:10941000F8F901103008F94801105809C031C08826 +:109420000E997207129CF01F00045807CFA1E3CDDC +:1094300080800000800091E8EBCD40C01897580C68 +:10944000C250F8F801245808C210189B300A491C71 +:10945000F01F0011EEFC0124F01F00103006306AEE +:109460000C9BEF460124EECCFEE4F01F000DEEFC59 +:109470000114F01F000CEF460114EEFC0118580C0B +:10948000C050F01F0008EF460118E3CD80C0000077 +:109490008002996880027400800256EC800091D0AE +:1094A00080028174EBCD40F8205D189716951494D6 +:1094B000F8F601245806C0503FFC2FBDE3CD80F8DC +:1094C000F8FA012817D81AD817C91AD917B81AD80C +:1094D00017A91AD917981AD81789301B1AD9740CDA +:1094E0004C6AF01F0047EEC3FEC81AD60E984C59BE +:1094F000E06A88C7069BEEFC0140F01F0043EF4C7A +:1095000001142F9D580CC6F0EEFC0144580CC0E02D +:109510001AD6069B0E984BB9E06A88C7F01F003A2E +:10952000EF4C01182FFD580CC5E0340CF01F00372C +:109530001896C5B0EEF8012870099909EEF80128CF +:109540003019700A4B2899199928994A99374B185C +:10955000EEF9012C998899599967EEF8012871095B +:1095600099A9EEF80128711999B9F01F002BEF4C59 +:109570000124C3D0314A300B1A9CF01F0028EEF9A9 +:1095800001305804E9F8105FFBF81A03300650293F +:109590001A9A089B50165006EEFC0124F01F00207A +:1095A000306830593FFAEEFC0124149BF01F001D77 +:1095B000306A0A9BEECCFEE4F01F001B301BEEFC71 +:1095C0000124F01F001A301BEEFC0124F01F0018CC +:1095D0000C980E99497A0C9BEEFC0158F01F00166E +:1095E0000C9CC6CB3FECC6AB3FCCC68B0C9CF01F93 +:1095F00000133FDCC63B00008003DBA880023A1A60 +:1096000080029AF08002819C80028F2480029A243A +:10961000800299C48002609C800091D08002581C16 +:1096200080025564800091DC800261D4800261E890 +:109630008002996880027474800091E8EBCD40FC50 +:109640001897F8F801105808C6F0F8F801284CAA45 +:10965000700C301BF01F0049EEF801245808C0A020 +:10966000EEF801284C6A700C301BF01F0044E3CD6B +:1096700080FCEEF801605828CF41EEF80128700C0C +:1096800070295D19587CCED1EEF8016C5818CE9136 +:10969000EEF501105805C410EEC2FEB8EAC3FFFC97 +:1096A000300A069BEEFC0108F01F0036306A189461 +:1096B000069B049CF01F0034C0605804C3706948C6 +:1096C0005808C341EB3800091AD8EB3800081AD8FB +:1096D0000BF81AD80BE8EEF601281AD80BD91AD9CC +:1096E0000BC84AAA1AD8301B6C0CF01F00242FADEF +:1096F0005804C090EEF90128E8CAFFFC069B720CE2 +:1097000072E85D186A080A9CEF480110F01F0020FB +:10971000EEF501105805CC31EEF8012849DA700C4D +:10972000301BF01F0016E3CD80FCEB3800091AD87F +:10973000EB380008EEF601281AD80BF81AD80BE817 +:109740001AD80BD91AD90BC8493A1AD8301B6C0C45 +:10975000F01F000A6A08069BEEFA0134EF48011078 +:109760000E9CF01F000E0A9CF01F00092FADE3CDE8 +:1097700080FC00008003DBEC80023A1A8003DC14DA +:1097800080028FB08000917C8003DCA0800091E893 +:109790008003DCFC8003DC4C800294A4EBCD40F819 +:1097A0001695189414931297F8FB0134580BC05077 +:1097B000F6F801485808C5D15807C4C0E8F60110AA +:1097C0005806C4A03007C0680C976C0C580CC440F5 +:1097D0001896306A0A9BECCCFFFCF01F002CCF518E +:1097E0005807EDF81000EFF81A00EDF80000E9F85E +:1097F0000A44E04303E7E08A003BE8FA0110580A14 +:10980000C4006C3B74381638C065C3B8723816385B +:10981000C054129A74095809CFA18D0995061AD31C +:109820000BD80B8CE8F601281AD80BC91AD90BB83B +:109830001AD80BA91AD90B98495A1AD8301B1ADC16 +:109840006C0CF01F0014089CF01F00132F9DE3CD3B +:1098500080F8E3CD80F8310CF01F00101896C0F0AE +:10986000306A0A9BECCCFFFCF01F000D8D33CC6BF3 +:109870000A9AF8FC0108F01F000BC9FBE3CD80F841 +:109880008D0AE9460110CCCB8000917C8003DD2459 +:1098900080023A1A8002963C80028F24800091DC7C +:1098A00080029328EBCD40F8208D169414971895DC +:1098B000F8F801345808C470F01F0027EEC6000104 +:1098C000C426E068009C1A93EC080248E8080007E8 +:1098D000EAC4FEB8C0682016EEC7009C5806C3351F +:1098E000EAF901346EAA7258103ACF61724BEECC8D +:1098F000FFFAF01F001ACF01306A089B0E9CF01F80 +:109900000017CEA0EEFB0080580BCE601A9AEECC6A +:10991000FFA8F01F0013CE01189A0E9BEAFC010865 +:10992000F01F0010C13079485808CD604048EDB8AC +:109930000000CD213019E06A03E80E9B0A9CF01F5D +:10994000000ACCAB2F8DE3CD80F84048F3D8C0019E +:10995000CF3B0000800294088000917C8002BD68AB +:1099600080028FB08002979CEBCD4060F9380121D6 +:10997000F8F501281AD8F93901201AD9F938011F48 +:109980001AD8F939011E1AD9F938011D1AD8F9392E +:10999000011C489A1AD9302B18966A0CF01F000740 +:1099A0000C9CF01F00070C9CF01F00062FADE3CDB0 +:1099B000806000008003DD6C80023A1A80029438D7 +:1099C0008002963CEBCD40E0201D1897F8F801147A +:1099D0005808C0613FF60C9C2FFDE3CD80E0F8F8FD +:1099E0000128300C5C791ADC5C5B700C70D6FAC80C +:1099F000FFFC5D162FFD1895580CCED01899400825 +:109A0000E06A88C7EECBFEE4EEFC0114F01F000410 +:109A100018960A9CF01F0003CDFB000080028154C1 +:109A2000800091E8EBCD40E0208D14971896580BFC +:109A3000C2614A781AD8EEF60128EF3801211AD807 +:109A4000EF3901201AD9EF38011F1AD8EF39011E5A +:109A50001AD9EF38011D1AD8EF39011C49DA1AD981 +:109A6000302B6C0CF01F001C0E9CF01F001C0E9C79 +:109A7000F01F001B2F9D2F8DE3CD80E01A95320A39 +:109A80001A9BF01F0018C1211A9B320AEEF801340C +:109A90008F8A1AD8EEC9FEE4EEC8FEC8EEFC0108B3 +:109AA000F01F001149182FFDCC6B0C9C310A1A9B3A +:109AB000F01F000CC090EEF8012848DA700C302B33 +:109AC000F01F0005CB7B1A9B310ACE1B8003AD2C07 +:109AD0008003DE1880023A1A800294388002963C95 +:109AE000800257CC8002914C8003DDB48003DDCC32 +:109AF000EBCD40F81897169514931294F8F80124BA +:109B00005808C090F8C6FEE4306A48BB0C9CF01FB1 +:109B1000000BC031E3CD80F80C9C306A0A9BF01F2B +:109B20000007CF910899069A0A9BEEFC0124F01FCA +:109B30000004CF1B800294008000917C800261FCB5 +:109B4000EBCD40F8FACD01001293109418961697B9 +:109B5000149530081A99F2080B082FF8E048010014 +:109B6000CFB1300E1A9C1C9BEC0B0709198AFC0A1A +:109B700000081208FAC9FF00FDD8C0081C09F33814 +:109B8000FF0018C8F36AFF002FFBFAC8FF000E3B66 +:109B9000F9BB0200103CCE915805C4C0300E1C9792 +:109BA0001C9CF8C8FFFFFACAFF00F9D8C008180AC1 +:109BB000F53BFF00F60E0008FAC9FF00FDD8C0080B +:109BC0001C09F338FF00F568FF00F36BFF002FF767 +:109BD0000E35FE9BFFE85804C2A006963007F8C871 +:109BE000FFFFFACAFF00F9D8C008180AF539FF00CC +:109BF000F20E0008FACBFF00FDD8C0081C0BF738A6 +:109C0000FF00F568FF00F769FF00F538FF00100955 +:109C1000F3D9C008FACAFF00120A0D89F538FF000F +:109C200012580CC82FF70E34FE9BFFDB2C0DE3CD32 +:109C300080F80A9E0A9CCD0BD401129E16981899A2 +:109C40001C9B149C300AF01F0002D80280029B402B +:109C500000000000D431FACD0180340AFAC4FEC0FD +:109C6000510C089CF01F04BF688A516A689950A97A +:109C700068A8509868B65086684568216830416683 +:109C800050E5685250D2686A50CA687950B968087D +:109C90005158E3E8200868D50C580A586812F00AB1 +:109CA000150150F2F5E813FA517A68E868F640E5D4 +:109CB00040A9105940980C580A5802580059F00A07 +:109CC00015010459F5E813FAF20215014178E5E9A6 +:109CD00013F2519A518240C54089105968C80458FE +:109CE00040E20A58045840D6F00A15010C59F5E82C +:109CF00013FA005951AA419840B640D5416240CA72 +:109D0000F2071501EFE913F768D9105968E80E5802 +:109D1000045814580C590A59F0051501F20615019A +:109D2000EBE813F5EDE913F640B851C551B641A281 +:109D300068F940AA416504591459105941780C58E2 +:109D400040960C580A58F2021501F00A1501E5E98F +:109D500013F2F5E813FA41C851EA51D2408640A502 +:109D6000409A418910594198045868C204581458BF +:109D70000C590A59F0051501F2061501EBE813F527 +:109D8000EDE913F6408851F6520541E268DA68C5FC +:109D9000EFE220091459105941A80C5868E60C58F4 +:109DA0000A58F2021501F00A1501E5E913F2F5E887 +:109DB00013FA52124208522A41B968F668D568EA85 +:109DC000105941C804584172045814580C590A5982 +:109DD000F0051501F2061501EBE813F5EDE913F6B0 +:109DE0005245523668F84222418A417541D9045998 +:109DF0001459105941E80C5841960C580A58F2026F +:109E00001501F00A1501E5E913F2F5E813FA4248E5 +:109E1000418641A5525241F9105942080E59045841 +:109E20000C5941920A580458526AF20A1501F5E990 +:109E300013FAF0091501F3E813F9426841B641C578 +:109E400041A2527A52894219105942280C59145889 +:109E50000E590A580458F20A1501F5E913FAF009E7 +:109E60001501529AF3E813F9428852A941D641B537 +:109E700041E2423910594248145841CA0458145812 +:109E80000C5941FA0A59F0051501F2061501EBE8E3 +:109E900013F5EDE913F641D852C542A241E552B699 +:109EA00042590459145942CA105942680C58420682 +:109EB0000C580A5841F6F20E1501F0021501FDE9A1 +:109EC00013FEE5E813F2421942781458420A42257B +:109ED000125842890C581C59F00615010A59EDE830 +:109EE00013F61459F20A1501F5E913FA0C951493B7 +:109EF000423952E652FA4216424A52D24298045825 +:109F0000125842A90C580A5942261459F00A150150 +:109F1000F5E813FA0C59530A1496F2081501425A3F +:109F2000F1E913F84239109C531842B806581458F6 +:109F3000426A125842C90C591459424A1459F00A3B +:109F40001501F5E813FAF2081501F1E913F8109B71 +:109F500053384278FDEC20091059425810595019D5 +:109F60004289E5EA200812584269125840195008FF +:109F70004018A178F1E913F8400953484008A17846 +:109F8000F1E913F853584298EBEB20091059427845 +:109F9000105942A850194349E7E92009105942884D +:109FA000105940185009532A4019A179F3E813F9C0 +:109FB000400853694009A179F3E813F953794358EC +:109FC000EDE8200942B810594298105942C850197A +:109FD0004369F9E92009105942A81059401850095D +:109FE0004019A179F3E813F9400853894009A17990 +:109FF000F3E813F943785399F5E8200942B81C595E +:10A00000105950194389F7E92009129842C9045898 +:10A010001258401950084018A178F1E913F8400986 +:10A0200053A84008A178F1E913F8434953B843987D +:10A0300010590A591C59501943A94358125840192C +:10A04000065804584012A172E5E913F253C2F00217 +:10A050001501E5E813F243B84369105943780C59E8 +:10A060000A5943C50A581858065853D2F202150126 +:10A07000E5E913F2F0091501F3E813F943D853F9B0 +:10A08000438910594398145904580C5916581858B4 +:10A0900053E243F54342F20C1501F0061501F9E9CC +:10A0A00013FCEDE813F643A943B80A5918580459AC +:10A0B0001459435A145816585406436A4402F20677 +:10A0C0001501F0051501EDE913F6EBE813F543482A +:10A0D00054255416435543C904591459105943D8AB +:10A0E000F20215010C58E5E913F2437654320C588C +:10A0F0000A58F00A1501F5E813FA544A890A442966 +:10A1000043864365437A43E8125843F90C5804598F +:10A110000A584392F0061501EDE813F654568916D5 +:10A1200004591459F2051501EBE913F55465892515 +:10A13000444243AA4389F9E2200814581258F00215 +:10A140001501E5E813F25472439544090C5943B6DE +:10A1500089320C590A59F20A1501F5E913FA548AA1 +:10A16000894A43C6446943A5441812580C580A58F2 +:10A17000F0061501EDE813F6549643BA4429045944 +:10A1800043D2895604591459F2051501EBE913F528 +:10A1900054A58965448243EA43C944380458145895 +:10A1A0001258F0021501E5E813F254B243D54449C0 +:10A1B0000C5943F689720C5944080A59446A045AE6 +:10A1C000105A0C5AF2061501EDE913F654C6447BF9 +:10A1D00089860C5BF4061501EDEA13F654E6441586 +:10A1E00044A243E9445889A60A5B045818581258F7 +:10A1F000F0051501EBE813F554D58995185BF602C7 +:10A200001501E5EB13F254F289B2444A4489449BA8 +:10A210000A590C5B4405442644A804581458F3E634 +:10A22000200A0C580A5A5028E0657999EA155A8292 +:10A23000504A410644325116441AEE050009F7E22D +:10A2400020081458E062EBA1EA126ED95038507918 +:10A25000040E0C99506EE068BCDCEA188F1B0C9A57 +:10A26000100C2F8A505C512A1306511941087403AF +:10A27000720C2F485138410A2F0A514A700A41483E +:10A28000700941580A08F0090009EC081505F1E6C3 +:10A2900013B8F2080008F5E3200918691459F00909 +:10A2A000000740F80A08F00A0009F80B151EF7EC41 +:10A2B000122BF7E320080C680658F2080008EE0994 +:10A2C0001505F3E713B9EC0A151EF009000EF5E6C3 +:10A2D000122AFC091505F7EA2008F3EE13B9EFE896 +:10A2E000000816580A01EE0C151E0601F9E7122C9B +:10A2F0001001F9EA200812011C68E209150514583A +:10A30000F3E113B90A001600100040E812000A0831 +:10A31000F00A0009FC0B151EF7EE122BF7EC2008D3 +:10A3200002681858F2080008E0091505F3E013B9AF +:10A33000F009000640D80A08F00C0009E20A151ED0 +:10A34000F5E1122AF5EB200800681658F20800081B +:10A35000EC091505F3E613B9F009000E40C80A0828 +:10A36000F00B0009E00C151EF9E0122CF9EA2008A8 +:10A370000C681458F2080008FC091505F3EE13B92F +:10A38000F009000340B80A08F00A0009EC0B151E9A +:10A39000F7E6122BF7EC20081C681858F2080008A2 +:10A3A000E6091505F3E313B9F009000641680A0848 +:10A3B000F00C0009FC0A151EF5EE122AF5EB200838 +:10A3C00006681658F2080008EC091505F3E613B9FB +:10A3D000F009000E40A90A091609E60C151EF9E35A +:10A3E000122CF9EA20080C681458F2080008FC093D +:10A3F0001505F3EE13B9F009000340980A08F00AB6 +:10A400000009EC0B151EF7E6122BF7EC20081C6870 +:10A410001858F2080008E6091505F3E313B9F00926 +:10A42000000640890A091809FC0A151EF5EE122AD1 +:10A43000F5EB200806681658F2080008EC09150527 +:10A44000F3E613B9F009000E68C80A08F00B00091A +:10A45000E60C151EF9E3122CF9EA20080C681458D2 +:10A46000F2080008FC091505F3EE13B9F009000124 +:10A4700068D90A091409EC0B151EF7E6122BF7EC44 +:10A4800020081C681858F2080006E2091505F3E1D7 +:10A4900013B968E8EC0900030A08F00C0009FC0A8B +:10A4A000151EF5EE122AF5EB200802681658F20880 +:10A4B0000008E6091505F3E313B9F009000E68F981 +:10A4C0000A091609E20C151EF9E1122CF9EA200816 +:10A4D00006681458F208000BFC091505F3EE13B9D1 +:10A4E0004178F60900000A08F00A0009E606151E80 +:10A4F000EDE31226EDEC20081C681858F208000A5B +:10A50000E0091505F3E013B9F409000341890A09CC +:10A510001809FC0A151EF5EE122AF5E62008006857 +:10A520000C58F208000CE6091505F3E313B941983D +:10A53000F80900010A08F0060009E00B151EF7E013 +:10A54000122BF7EA200806681458F2080008E209FE +:10A550001505F3E113B94077F009000E1407FC0963 +:10A560001505E60A151EF3EE13B9F5E3122AF5EB0D +:10A57000200802681658EE080008F009000341A8F8 +:10A580000408F00B0009E20C151EF9E1122CF9EA9F +:10A5900020081C58F2080008E6091505F3E313B972 +:10A5A000F009000541B904091409FC0B151EF7EE6A +:10A5B000122BF7EC20080658F2080008EA091505E6 +:10A5C000F3E513B9F009000641C80408F00C0009CE +:10A5D000E60A151EF5E3122AF5EB20080A58F208E0 +:10A5E0000008EC091505F3E613B9F009000E41D98E +:10A5F00004091609EA0C151EF9E5122CF9EA2008DF +:10A600000C58F2080008FC091505F3EE13B9F0091F +:10A61000000541E80408F00A0009EC0B151EF7E6F6 +:10A62000122BF7EC20081C58F2080008EA0915055F +:10A63000F3E513B9F009000641F904091809FC0A09 +:10A64000151EF5EE122AF5EB20080A58F20800084C +:10A65000EC091505F3E613B9F009000E42080408E9 +:10A66000F00B0009EA0C151EF9E5122CF9EA200896 +:10A670000C58F2080008FC091505F3EE13B9F009AF +:10A680000005421904091409EC0B151EF7E6122BFC +:10A69000F7EC20081C58F2080008EA091505F3E554 +:10A6A00013B9F009000642280408F00C0009FC0A5E +:10A6B000151EF5EE122AF5EB20080A58F2080008DC +:10A6C000EC091505F3E613B9F009000E4239040947 +:10A6D0001609EA0C151EF9E5122CF9EA20080C58A7 +:10A6E000F2080008FC091505F3EE13B9F00900059E +:10A6F00042480408F00A0009EC0B151EF7E6122B7D +:10A70000F7EC20081C58F2080008EA091505F3E5E3 +:10A7100013B9F0090006425904091809FC0A151E6C +:10A72000F5EE122AF5EB20080A58F2080008EC09A9 +:10A730001505F3E613B9F009000E42680408F00BA2 +:10A740000009EA0C151EF9E5122CF9EA20080C584C +:10A75000F2080008FC091505F3EE13B9F00900032F +:10A76000427904091409EC0B151EF7E6122BF7ECDD +:10A7700020081C58F2080008E6091505F3E313B990 +:10A78000F0090005428904091809FC0A151EF5EEB6 +:10A79000122AF5EB20080658F2080008EA09150508 +:10A7A000F3E513B9F009000E429904091609E60C05 +:10A7B000151EF9E3122CF9EA20080A58F208000BDA +:10A7C000FC091505F3EE13B9F609000042A90409C6 +:10A7D0001409EA06151EEDE51226EDEC20081C58BA +:10A7E000F208000AE0091505F3E013B9F4090003C3 +:10A7F00042B9FC0A151E0409F5EE122A1809F5E6FD +:10A80000200800584065F208000C1405E6091505FB +:10A81000E00B151EF3E313B9F7E0122BF809000162 +:10A82000F7EA200AE2081505065AF1E113B842C911 +:10A8300004090C091409E60A151EF208000EF5E3D6 +:10A84000122AF5EB20080258EA080008E066BCDC92 +:10A85000EA168F1BFC091505F3EE13B9F009000089 +:10A8600042D80C08E20C151EF00B0002F9E1122C84 +:10A87000FDEC0008FDEC100914691049E00815050D +:10A88000F1E013B8E4090009F208000242E80C08FC +:10A89000FC0B151EF00A0005F7EE122BE1EB000889 +:10A8A000E1EB100918691049E4081505EA090009E7 +:10A8B000F1E213B8E00A151EF2080005F5E0122ACD +:10A8C00042F9E5EA00080C09F20C0003E5EA100978 +:10A8D00016691049EA081505F1E513B8E6090009FB +:10A8E000F208000343080C08E40C151EF00B0006E8 +:10A8F000F9E2122CEBEC0008EBEC1009146910499A +:10A90000E6081505EC090009F1E313B8EA0B151E7A +:10A91000F2080006F7E5122B4319E065BCDCEA15E6 +:10A920008F1BE7EB00080A09F20A000AE7EB10099F +:10A9300018691049EC081505F1E613B8F409000987 +:10A94000F208000243280A08E60A151EF00C000C63 +:10A95000F5E3122AEDEA0008EDEA1009166910493C +:10A96000E4081505F8090009F1E213B8EC0C151E0E +:10A97000F208000EF9E6122C4339E5EC00080A094A +:10A98000F20B000BE5EC100914691049FC081505E1 +:10A99000120BF1EE13B84349F6080005E40B151E3F +:10A9A000F7E2122BE062BCDCEA128F1BFDEB000821 +:10A9B0000409F20A000AFDEB100918691049EA08B7 +:10A9C0001505F1E513B8F4090009F208000643582B +:10A9D0000408FC0A151EF00C000CF5EE122AEBEA36 +:10A9E0000008EBEA100916691049EC081505F8098A +:10A9F0000009F1E613B8EA0C151EF208000EF9E59D +:10AA0000122C4369EDEC00080409F20B000BEDEC8D +:10AA1000100914691049FC081505F1EE13B8F60980 +:10AA20000009F208000543780408EC0B151EF00A33 +:10AA3000000AF7E6122BFDEB0008FDEB1009186980 +:10AA40001049EA081505F4090009F1E513B8FC0AF4 +:10AA5000151EF2080006F5EE122A4389EBEA0008FB +:10AA60000409F20C000CEBEA100916691049EC0815 +:10AA70001505F1E613B8F8090009F208000E43982D +:10AA80000408EA0C151EF00B000BF9E5122CEDEC96 +:10AA90000008EDEC100914691049FC081505F609C9 +:10AAA0000009F1EE13B8EC0B151EF2080005F7E6ED +:10AAB000122B43A9FDEB00080409F20A000AFDEB82 +:10AAC000100918691049EA081505F1E513B8F409E9 +:10AAD0000009F208000643B80408FC0A151EF00C31 +:10AAE000000CF5EE122AEBEA0008EBEA10091669F1 +:10AAF0001049EC081505F8090009F1E613B8EA0C4D +:10AB0000151EF208000EF9E5122C43C9EDEC000801 +:10AB10000409F20B000BEDEC100914691049FC0854 +:10AB20001505F1EE13B8F6090009F208000343D841 +:10AB30000408EC0B151EF00A000AF7E6122BFDEBD9 +:10AB40000008FDEB100918691049F4090009E6082E +:10AB50001505F1E313B8F208000543E90409FC0AFE +:10AB6000151EF20C000CF5EE122AE7EA0008E7EADF +:10AB7000100916691049F8090009EA081505F1E5F8 +:10AB800013B8F208000E43F90409E60C151EF20B87 +:10AB9000000BF9E3122CEBEC0008EBEC1009146944 +:10ABA00010494057FC0815051407F1EE13B8F609D3 +:10ABB000000AEA0B151EF7E5122BFDEB0009F4085D +:10ABC0000003FDEB1008E60A15051868F5E313BA53 +:10ABD0001248EE080009F20A00054409E06AC1D6ED +:10ABE000EA1ACA6214091809FC06151EEDEE1226AF +:10ABF000EDEB20080658F2080008EA091505F3E510 +:10AC000013B9F009000A4419E068C1D6EA18CA620B +:10AC100010091609E60C151EF9E3122CF9E62008B6 +:10AC20000A58F2080008F4091505F3EA13B9EA0B0B +:10AC3000151EF0090003F7E5122B4429E065C1D683 +:10AC4000EA15CA620A090C09F7EC20081458F20840 +:10AC50000008E6091505F3E313B9F009000EFC0935 +:10AC60001505F3EE13B9F406151EEDEA1226443A63 +:10AC7000EDEB20080A0A0658180A100A120A44497D +:10AC80000A091609E60C151EF9E3122CF9E620084C +:10AC90001C58F2080008F4091505F3EA13B9FC057D +:10ACA000151EF0090003EBEE1225E6091505EBEC85 +:10ACB0002008F3E313B91458E062C1D6EA12CA625D +:10ACC000445B040B0C0BF406151E100BEDEA122668 +:10ACD000120BEDE52008F60915050658F3EB13B93C +:10ACE000446A040A180A100A4478F409000E040899 +:10ACF000F0050009E60A151EF5E3122AF5E620081C +:10AD00001658F2080008FC091505F3EE13B9F0090E +:10AD10000005448904090C09F60C151EF9EB122CE8 +:10AD2000F9EA20081C58F2080008EA091505F3E5BD +:10AD300013B9F009000344980408F00A0009FC0B59 +:10AD4000151EF7EE122BF7EC20080A58F20800083F +:10AD5000E6091505F3E313B9F009000E44A9040947 +:10AD60001809EA06151EEDE51226EDEB2008065837 +:10AD7000F2080008FC091505F3EE13B9F009000507 +:10AD8000EA091505F3E513B944BAE60C151E040AE1 +:10AD9000F9E3122C160AF9E620081C58100A120AC8 +:10ADA00044C904090C09FC0B151EF7EE122BF7EC35 +:10ADB00020080A58F2080002F4091505F3EA13B94D +:10ADC00044D8E409000EE069C1D6EA19CA62120843 +:10ADD000EA06151EF00C0009EDE51226EDEB200841 +:10ADE0001458F2080008FC091505F3EE13B9F00930 +:10ADF000000CE068C1D6EA18CA62F405151EF8090D +:10AE00001505EBEA1225F3EC13B944EA100AEBE658 +:10AE10002008160A1C58100AFC02151EF40900012D +:10AE2000E5EE1222E06AC1D6EA1ACA62E5E5200818 +:10AE3000E20915051858F3E113B944FB140B404A15 +:10AE40000C0BA17A100B44B8F609000E4049F5E945 +:10AE500013FA14584459F1E9200B4438E069C1D67B +:10AE6000EA19CA6289CAF7E820074108F806151EE0 +:10AE7000120AEDEC1226700CEDE22008120C0258BA +:10AE8000FC091505F3EE13B90A0AE203151E100AB0 +:10AE9000E7E11223120AE7E62008E069C1D6EA19C1 +:10AEA000CA621C5840354030A170E1E513F0E0095A +:10AEB000000BF4091505040BF3EA13B9100B402835 +:10AEC0004021120BE065C1D6EA15CA62A171E3E820 +:10AED00013F1E2050008F0060009FC02151EE5EE7C +:10AEE0001222E5E320081458F2080008F6091505B7 +:10AEF000F3EB13B9F406151EF009000EEDEA122665 +:10AF0000EE051501410AEBE713F5EDE220080A0C06 +:10AF10001658060CFC091505100CF3EE13B9120CAB +:10AF2000950C411972081C089308F609151E412A50 +:10AF3000F3EB1229740812089508413870090C09BE +:10AF4000910989D089E189F541466C080408089C7B +:10AF50008D08340A300BF01F00042A0DD83200008F +:10AF6000800091DC800091D0EBCD40F878581494AB +:10AF7000A37AF40800099959123AF9F98006F9F907 +:10AF8000B006F7B90BFFF9F9BA06FDD8C066E808B4 +:10AF9000161DF2080008996818951693E80E000926 +:10AFA000E049003FE08B000F3006FCCCFFE4E606F2 +:10AFB000000BEA0C000CE806010AF01F0014E3CDB8 +:10AFC00080F8FC061140FCCCFFE40C9AEA0C000C63 +:10AFD000F01F000EEACBFFE40A9CF01F000DECC846 +:10AFE000FFC11034E088000FE60600070E9B0A9CA4 +:10AFF0002C07F01F00072C06ECC8FFC11034FE9B85 +:10B00000FFF7300ECD3B0000800091DC80029C54A5 +:10B01000D421202D16961895300B1A94583BF9B868 +:10B020000B14F9B80818F60911FFEC08030AF3D954 +:10B03000C002A379F4090A4AE80B0B0A2FFB588BCC +:10B04000CEE1301A49EBC038301A49EB0C9CF01FA6 +:10B05000001E6C58E21801F8E04801C0CF61308A48 +:10B060001A9B0C9CF01F00183007EE081602EE0920 +:10B0700011FFEC08032AF3D9C002A379F4090A4AA4 +:10B08000EA070B0A2FF75947CF11300B340AECCCE3 +:10B09000FFE4F01F000E0E9A300B0C9CF01F000B0B +:10B0A000ECCCFFEC308A300BF01F00081A9C308A81 +:10B0B000300BF01F00062FEDD82200008003DE5871 +:10B0C00080029C508002AF68800091D0EBCD40FCA4 +:10B0D000217DE0682301EA186745E06EAB89EA1E2E +:10B0E000EFCD5008E068DCFEEA1898BA3007501E31 +:10B0F0005028E06E5476EA1E1032E068E1F0EA185B +:10B10000C3D250675057503E504818931292580C73 +:10B11000C140149416951A962FF7090A0B0B1A9C26 +:10B12000F01F00070E33FE9BFFF91A9B049CF01FD3 +:10B1300000052E9DE3CD80FC1A96CF8B8002AF6870 +:10B140008002B010D431FACD008C501C500B1493F7 +:10B150001292109142C0585AE08B0056E04B0040CA +:10B16000E08B0054FAC4FFF8340A300B089CF01F3F +:10B17000002E400A401B089C0896F01F002CFAC5C0 +:10B18000FFB808970D88EC1800360CC80A36CFB106 +:10B190003408518451285803C110FACCFF9CFACBD3 +:10B1A000FFB4300AE60E1502E40A030818A8E20A02 +:10B1B000030916A92FCA1C3ACF81E6CCFFFF0099DC +:10B1C0000A9AFAC3FFA0069BF01F0019340A300B3D +:10B1D000089CF01F0015400A401B089CF01F00133C +:10B1E0000F88EC18005C0EC80C37CFB1314C340816 +:10B1F000513C5184519000990A9A069B5128302C59 +:10B20000F01F000B2DDDD832FAC6FF881A9A0C9970 +:10B21000FACBFFFC301CF01F0006314850165008D6 +:10B22000CA2B0000800091D0800091DC8002B0CC5D +:10B23000D401202D501A5009301A1AD8FAC9FFF833 +:10B24000FAC8FFFCF01F00032FFD2FEDD80200000D +:10B250008002B144D43121AD5009502B501A1892BC +:10B2600042395809C6D0504850593008FAC7FFAC87 +:10B270005038FAC3FFD4FAC0FFC0FAC4FFE8049CF8 +:10B28000F01F003140382FF850381AD34038518819 +:10B2900040285168FAC8FF98519830484046517884 +:10B2A000B986FB380013FAC9FFA0FB68006B189B36 +:10B2B0000E98FB66006840454046302A1891B185DB +:10B2C000049CFB650069A986FB66006AF01F001FED +:10B2D000314A069B009CF01F001E2FFD40085818A5 +:10B2E000E08A001C301608983149069A029B049C9B +:10B2F000F01F0018314A089B069CF01F0015009AA9 +:10B30000089B17381589125814C80E3ACFB12FF67A +:10B3100040080C38FE99FFE940560C985946F9B69A +:10B320000B140C180C9A5058009B404CF01F00084E +:10B3300040585808C05040480C085048CA1B2E6D51 +:10B34000D8320000800091B88002B144800091DCC6 +:10B350008002B230D43120EDFACEFFA4109530082F +:10B3600018927C14149716911296FB680036FB68AD +:10B3700000377C00149CF01F00275804C3003018CD +:10B38000FAC9FFC9508850685097FAC8FFCA505C84 +:10B3900050B6507550A950C85934E0880023300782 +:10B3A000FAC3FFECFAC6FFDCC088FB680036E8078A +:10B3B00001055935E088001CE00700080C991AD8EF +:10B3C0002EC70698304A029B049CF01F00132FFDE5 +:10B3D000FB3800362FF80E34FE9BFFE92F2DD832B4 +:10B3E00008953007FAC3FFECFAC6FFDC0C99069803 +:10B3F0001A96049C1AD6029B304AF01F00070A9A3C +:10B400000C9BE007000CF01F00052FFD2F2DD832FC +:10B41000800091B88002B144800091DC00000000FF +:10B4200000000000EBCD4080129E1097584CC26087 +:10B43000E08A0013588CC140590CC101590B5F18A8 +:10B4400058FA5FA91248C0A130689D083039300C05 +:10B450008F09E3CD8080582CC1E0E3CFC080E04B62 +:10B4600000205F1859FA5FA91248CF8130689D0803 +:10B470003029300C8F09E3CD808058DB5F1858CA23 +:10B480005FA91248CEB130099D093018129C8F086F +:10B49000E3CD8080585B5F18584A5FA91248CF40BF +:10B4A000E3CFC080580C5E0CF8F8010C5808F9B8CE +:10B4B0000100F9F81A435EFC580CF9FB1A4C5EFCCB +:10B4C000580CF9FA1A51F9FB1A505EFC580CF9FBAA +:10B4D0001A415EFC580CC080586BE08800035EFD8A +:10B4E0004928F00B032F5EFEF94A016C5EFDF94A14 +:10B4F00001685EFDF94A01645EFDF94A01605EFD86 +:10B50000580ACF20F94A01585EFDF4C80001E0480E +:10B510000063FE9BFFEAF94A01545EFD580ACE40E3 +:10B52000F94A01505EFD00008003DE5CEBCD40E097 +:10B53000189716951496580CC130F8FC0180F01F2E +:10B54000001158055F0858065F091248C0B030085E +:10B55000EF480188EF480180109CE3CD80E0E3CF05 +:10B56000C0E00C9CF01F0008EF4C0180CF900A9BBC +:10B570000C9AF01F0006300CEF460188E3CD80E006 +:10B58000800091E880009200800091DCEBCD40E0EB +:10B59000189716951496580CC130F8FC017CF01FD2 +:10B5A000001158055F0858065F091248C0B03008FE +:10B5B000EF480184EF48017C109CE3CD80E0E3CFAD +:10B5C000C0E00C9CF01F0008EF4C017CCF900A9B60 +:10B5D0000C9AF01F0006300CEF460184E3CD80E0AA +:10B5E000800091E880009200800091DCEBCD40E08B +:10B5F000189716951496580CC130F8FC0174F01F7A +:10B60000001158055F0858065F091248C0B030089D +:10B61000EF480178EF480174109CE3CD80E0E3CF60 +:10B62000C0E00C9CF01F0008EF4C0174CF900A9B07 +:10B630000C9AF01F0006300CEF460178E3CD80E055 +:10B64000800091E880009200800091DCEBCD40FE0C +:10B65000189716961493580CC031E3CFC0FE7409A6 +:10B66000F8F801605828C5E0F8F1016CF8F50168B8 +:10B67000F8F201645979FE98FFF23DD8304AB68855 +:10B68000ECCCFFFEFEFB0238F01F008E30083019B4 +:10B69000ACF8ACE9ECC4FFF85905E08000A158858E +:10B6A000E08000AA5845E08100BC0A9AFEFB02181F +:10B6B000089CF01F00843018A8C8E8C9FFFB3008B8 +:10B6C000B288E8C5FFFA5902E08000905882E08114 +:10B6D000009F304A4FDB0A9CF01F007A3018AAC83E +:10B6E000EAC9FFFB3008B2882FA55811E080008A14 +:10B6F0005821E08100A5304A4F5B0A9CF01F007181 +:10B70000EAC9FFFCEC0811FE1208AC98F206010C25 +:10B71000CA56870CEEF501745805E08000C1E3CFEE +:10B7200080FEF8F8010CF8F2016C5808F9B801280D +:10B73000F9B80016F8FA0168F8F401641039C8E3A2 +:10B7400033083009B688B6B93018B6A8F6C5FFFC7C +:10B75000590AC6F0588AE0800082584AE081009772 +:10B760004DCB0A9CF01F00573018AAC8EAC9FFFB4E +:10B770003008B2882FA55904C6B05884E081007EF5 +:10B78000304A4D5B0A9CF01F004F3018AAC8EAC926 +:10B79000FFFB3008B2882FA55812C661304A4CFB17 +:10B7A0000A9CF01F0048EAC8FFFC300AB08AB09A31 +:10B7B000EAC9FFFAEEF8010C5808CA503018B288EE +:10B7C000EAC9FFF9EACCFFF8B28A310AEEFB010CB4 +:10B7D0002FCBF01F003CEAC9FFE8C95B304A4C0B95 +:10B7E000089CF01F0038C68B304A4BDB0A9CF01FC8 +:10B7F0000035C75B304A4B5B089CF01F0032C5CB5D +:10B80000304A4B8B0A9CF01F002FC7BB5812FE9189 +:10B81000FF26304A4B4B0A9CF01F002AC60B5825C6 +:10B82000FE91FF1D304A4B1B089CF01F0026C44BA5 +:10B83000304A4AFB0A9CF01F0023C97B5901FE9144 +:10B84000FF0E304A4ABB0A9CF01F001EC5AB304AAF +:10B850004A7B0A9CF01F001BC99B304A49EB0A9C9B +:10B86000F01F0018C82B5822FE91FEF9304A4A2BCF +:10B870000A9CF01F0014C98B5814FE91FEF0304A48 +:10B8800049EB0A9CF01F000FC81B582AFE91FEE7E7 +:10B89000304A49BB0A9CF01F000BC67BF01F001901 +:10B8A000EF4C0174FE90FEDB0C9B660AF01F000556 +:10B8B00066080A9CEF480178E3CD80FE8003DE989D +:10B8C000800091DC8003DEA08003DE8C8003DE7CC0 +:10B8D0008003DE888003DE808003E1EC8003E1E406 +:10B8E0008003DE9C8003DEA48003DE948003DEB44C +:10B8F0008003DEB08003E1E88003DEA88003DE84FD +:10B9000080009200D401580CC060F8CCFEC8306AA8 +:10B91000F01F0002D8020000800091DCD4011898CA +:10B92000580CC040918AF01F0002D802800091DCC0 +:10B93000EBCD40F8208D189416971493F6C6FFF0BF +:10B94000F8F501685885C2E0E8F801645818C1604C +:10B950006EC8E8F901286E0B1AD81AD66E2849CAA3 +:10B960001AD81AD3720C72666E186E395D162FCD06 +:10B97000580CC1552F8DE3CF80F86EC9E8FA012825 +:10B980006E0B1AD91AD66E291AD91AD3740C74668A +:10B990006E3948FA5D162FCD580CCED42F8DE3CFDB +:10B9A000C0F80C9B310A1A9CF01F000A0A9AEECBD1 +:10B9B000FFD8FACCFFF0F01F00070A9AEECBFFE0A9 +:10B9C000FACCFFE81A96F01F0003CBFB80039C38EB +:10B9D000800091DCD401580CC070F94B0134F8FCA4 +:10B9E0000108F01F0002D80280028F64D401580CB5 +:10B9F000C110F8F8010C5808C08070DAF0CBFFECE9 +:10BA0000998AF01F0005D802320A109B998AF01F0C +:10BA10000003D802800091DC800091D0EBCD408003 +:10BA20001897F01F000AEEF801287029700C5D19B4 +:10BA3000585CEFF80057F9B90001F1D9E008EFF8C8 +:10BA40000A57E3CD8080000080029438EBCD40C0DF +:10BA500018971696580CC190306AF8CCFEB8F01FB3 +:10BA6000000F308A300BEECCFF10F01F000D3008B5 +:10BA700030190C9BEF4800F8EF4900EC306AEECC2F +:10BA8000FEE4F01F0008C030E3CD80C00E9CF01F24 +:10BA90000006E3CD80C00000800091DC800091D0E2 +:10BAA0008000917C80029438EBCD40C016971496AC +:10BAB000F6F8010C1838C0D0768A78D8103AC03021 +:10BAC000E3CD80C0F8CBFFEC0E9CF01F000ECF91B1 +:10BAD0003008EF48010C5806CF41320A0C9B0E9CEF +:10BAE000F01F0009EEF90128301B720C72485D1836 +:10BAF000EEF801280C9A700C70390C9B5D19CE1B66 +:10BB00008000917C800091D0D431189716941493C2 +:10BB1000300B324A069CEE040005F01F0052EEC6C0 +:10BB2000FFFF0C35E0880034E8C800013DD2EE0884 +:10BB30000004C0D8E4091800C2B01499F2C8FFFE8E +:10BB40001007EEC6FFFF0C35E08800220F89E409DC +:10BB50001800C4B10837C1B00D8A580AC180F4C8B2 +:10BB6000FFFEEE0800081035C4733308F009180012 +:10BB7000CE2187270D882FE887380D89F2C8FFFE70 +:10BB80001007EEC6FFFF0C35FE9BFFE2D83A580ABD +:10BB9000CFE03058F00A1800E08B003FEEC8FFFB02 +:10BBA0001035E08B002B14993061E2091800FE98E3 +:10BBB000FFC7EEC0FFFE304A4ABB009CF01F002BBF +:10BBC000C3900D89E2091800FE98FFBA009C304A24 +:10BBD0004A7BF01F0026C071EEC9FFFA87790D88F5 +:10BBE000204887880D89CABB0D8AF4C8FFFEEE087D +:10BBF00000081035CBB2DC3A14993138F00A18003D +:10BC0000FE98FFD4304A49BBEECCFFFEF01F001770 +:10BC1000C1900D89CCAB304A497BEECCFFFEF01FC2 +:10BC20000013C0610FE93018F0091800C1000D8A37 +:10BC3000CB6BEEC9FFFA87590D88204887680D89BC +:10BC4000C7EBEEC8FFFA87480D89C79B0FF8F808C5 +:10BC50001800CEE187070D882FE887180D89C6FBED +:10BC6000800091D08003DE788000917C8003DEAC80 +:10BC70008003DE908003DE98EBCD4080304A189739 +:10BC8000496BF01F0017C031E3CF9080304A495B09 +:10BC90000E9CF01F0013C041302CE3CD8080304A51 +:10BCA000491B0E9CF01F000EC041308CE3CD8080FC +:10BCB000304A48EB0E9CF01F000AC041310CE3CD26 +:10BCC00080800E9C304A48ABF01F0005F9BC000490 +:10BCD000F9BC0100E3CD80808003DEA88000917C68 +:10BCE0008003DE848003DE808003DEB48003DE8890 +:10BCF000EBCD4080304A1897496BF01F0017C031D8 +:10BD0000E3CF9080304A495B0E9CF01F0013C04186 +:10BD1000302CE3CD8080304A491B0E9CF01F000E72 +:10BD2000C041308CE3CD8080304A48EB0E9CF01F40 +:10BD3000000AC041310CE3CD80800E9C304A48ABF4 +:10BD4000F01F0005F9BC0004F9BC0100E3CD8080C0 +:10BD50008003DEA48000917C8003DE948003DE8C6F +:10BD60008003E1E48003DEA0EBCD40FC189416963E +:10BD70001497580BC160198B3308F00B1800C1D011 +:10BD80003008301595789548956895589505308810 +:10BD90009535952895185876E08B009BE3CFC0FC2D +:10BDA000301830898F7B8F4B8F6B8F5B9538950860 +:10BDB00095299519E3CFC0FC300531099545956566 +:10BDC000955595759529951930289508301A8F3A0B +:10BDD0005836FE98FFE51988F6081800CE01199923 +:10BDE000ECC800021039CDB119B919A8F1E91088D1 +:10BDF000F4081900CD4120465836E08A01112FC4BD +:10BE0000089CF01F008A8F2C20465816E08A010BF0 +:10BE10008F15E8CCFFFC19991988F1E91082CBF055 +:10BE2000ECC30002E40815021033CB95F8C4FFFE02 +:10BE300030056E16089CF01F007D0C4C8F1C2FC423 +:10BE400020432FF50A32FE99FFF65813E08A00E5E9 +:10BE5000300A8F3A09990988F1E91082CA00202333 +:10BE6000E40815021033C9B5E8C6FFFE14956E3418 +:10BE7000304A4EFB0C9CF01F006FE08100C430186C +:10BE800008488F382FC620432FF50A32FE99FFF15C +:10BE90005813E08A00940D990D88F1E910888F48B5 +:10BEA000E6CB0002581BE08A008AECCCFFFE199812 +:10BEB0001989F3E810898F59F6C80002A56912386C +:10BEC000C7F5F8C8FFFE300C8F68E3CD80FC1989F8 +:10BED0003DD8F0091800FE91FF631999ECC80002E3 +:10BEE0001039FE91FF5D304A4D3B2FECF01F0051A1 +:10BEF0001893FE91FF5509F909E8F1E91088EA085D +:10BF00001900FE91FF4DECCA0008583AE08A005E25 +:10BF1000E8CCFFF8F01F00498F2CECCA000C0A3A5D +:10BF2000E08A00578F13E8CCFFF419991988F1E9DA +:10BF30001082FE90FF35F4C30002E40815021033AE +:10BF4000FE95FF2EF8C4FFFE30056E16089CF01F0C +:10BF5000003B0C4C8F1C2FC420432FF50A32FE9956 +:10BF6000FFF65813E08A0042300A8F3A099909888F +:10BF7000F1E91082FE90FF142023E408150210332B +:10BF8000FE95FF0EE8C6FFFE14956E340C9C304AF9 +:10BF90004ABBF01F0028C211301808488F382FC63E +:10BFA00020432FF50A32FE99FFF25813E08A00145D +:10BFB0000D880D99F1E910888F48E3CF80FC300897 +:10BFC0008F58109CE3CD80FC580AFE99FEE9581A60 +:10BFD000FE90FEE6E3CF80FC304A49AB0C9CF01F9C +:10BFE0000015C0613028CDAB5813CF51CD8A0C9CC1 +:10BFF000304A495BF01F000FF9B80010F9B8010092 +:10C00000CCDB0C9C304A491BF01F000AF9B8000237 +:10C01000F9B80100C36B5813CD11CC1A5806FE991C +:10C02000FEBF5816CCB1CBBA8002BC788003E1ECDD +:10C030008000917C8003DE988002BCF08003DE9C4F +:10C040008003DE7C8003DEB08003E1E8D401580C7D +:10C05000C021DC0AF8F801745808CFC0169AF8FB22 +:10C060000178109CF01F0004F9BC01FEF9BC00002F +:10C07000D80200008002BD68EBCD40801897580CB4 +:10C08000C1D0F8FC0108F01F000F300A0E9B48ECED +:10C09000F01F000EEEFC0174F01F000DEEFC017CA1 +:10C0A000F01F000BEEFC0180F01F0009EEFC0128E0 +:10C0B000F01F00070E9CF01F0006E3CD80800000FB +:10C0C000800290A88002C0D080027400800091E8B5 +:10C0D000D401F01F0002D8028002963CEBCD40C094 +:10C0E0001896E06C018CF01F00131897C19030185F +:10C0F000E069A8C0F94800ECF9490150346833C937 +:10C10000F9480154F9460128F9490158189A189B31 +:10C11000489CF01F000AEF4C01081898C0400E9C84 +:10C12000E3CD80C00E9C1097F01F0005CF9B000050 +:10C1300080028F248002BAA880028F8C800091E850 +:10C14000EBCD4060149E1DD81896158CECF5012897 +:10C150001AD81DC91AD91DB81AD81DA91AD91D98DF +:10C1600048CA1AD81ADC1ADB303B6A0CF01F000AE6 +:10C17000ECF90128311B720C72585D18ECF901289A +:10C18000300A720C7238149B5D182F9DE3CD8060CD +:10C190008003DF4880023A1AEBCD40C0205D109743 +:10C1A000581BC130582BC0402FBDE3CD80C0310B90 +:10C1B0001A98F01F00091A961A9B0E9C310AF01F5C +:10C1C00000072FBDE3CD80C0310BF01F00052FBD50 +:10C1D000E3CD80C08002B230800091DC80028EF816 +:10C1E000D431201DFACEFFD81894500B149012961B +:10C1F00010917C237C077C12306A49AB129CF01FA3 +:10C20000001AC1D05803C0800698009B400C0499C6 +:10C210000E9AF01F00160C9BE8F501280498F5D142 +:10C22000C0100E996A0C6AA65D16E8FC0104F01FA6 +:10C2300000100E9CF01F000F2FFDD832E8C5FEB88D +:10C24000306A488B0A9CF01F0008CDD1E8F801281D +:10C250000A9B700C70995D19EA061740CD4B0000DF +:10C260008002B41C8000917C8002C19880025582BB +:10C27000800091E8EBCD40E0189716961495F8F8F9 +:10C2800001685848E0800081E08A00495888C780EA +:10C290005908C4F04C19EEF801645848C480584855 +:10C2A000E089004A5818C6605828C6604BB81AD9A9 +:10C2B0001AD8EEFA01280DD81AD80DC91AD90DB816 +:10C2C0001AD80DA91AD90D981AD80D89302B1AD958 +:10C2D000740C4B3AF01F0033EEF801282F8D700BD1 +:10C2E000707C300AF01F0030EEF90128720C72C821 +:10C2F0005D18EEF90128307B720C72185D18580534 +:10C30000C201EEFC010C580CC07079485808F9B80D +:10C310000100F9F81A14E3CD80E05818C33058280A +:10C32000CBA14A29EEF801645848CBA14A08CC0BAE +:10C330004A09CB2B5888C2205908CB9149D8CB8BBE +:10C34000EEF801280C9B700C71263019303A5D16FE +:10C35000301BEEFC0104F01F0018EEF8016C5828A9 +:10C36000C15030080E99495A109B301CF01F001420 +:10C37000CC9B4948C9DB48D8C9BB4938C99B492926 +:10C38000C8BB4909C89B48A9C87B301BEEFC010407 +:10C39000F01F000ECE7B00008003C6288003DF74F0 +:10C3A00080023A1A800274008003DF088003DF10E5 +:10C3B00080039A74800261D48002C0D080027474B9 +:10C3C0008003C8E480039A6C800261A4D431FACD62 +:10C3D00000DC1897169314951296E0490062E08BE2 +:10C3E000000630060C9C2C9DD832129CF01F034492 +:10C3F0001892E08000D60C9A0A9BF01F034205A910 +:10C4000005B8F1E910880599F5D8B0103038F00971 +:10C410001800C0603006049CF01F033BCE4BECC8F4 +:10C420000004EBDAC01030090A385F3AE045005EDC +:10C430005F88F5E8100CF20C1800CED13FE8E4C19B +:10C44000FFFC038AF00A18005F1B3028F00A18006E +:10C450005F19F7E90004F8041800CDD1EEFC0104DF +:10C46000F01F032A039903A8F1E91088EDD8B01052 +:10C47000FDD6C003506E1C9930182019F009190020 +:10C48000E08800043FF6CC8BEEF8016459085F0A9F +:10C490003028F00E19005F19126AE80A1800C080EF +:10C4A000EEF801685908CEF0EDB60003CEC0EEF804 +:10C4B00000F85808E08100ABE1D6C0100098E218FF +:10C4C0002080CE10009AE21A0800502ACDC12FC554 +:10C4D00000995055E21901005039C641405AE339DC +:10C4E000005DE338005E263AF1E91088F7D8B01015 +:10C4F000E9DBC010083AE0830598EEF9016058299D +:10C50000E0800550EDB00003E0810333E21000301D +:10C51000CBA140395809E08001CAEEF90128305B0F +:10C52000720C72185D18039903A8F1E91088E339B9 +:10C53000005DEBD8B010E33B005EFACAFF50F7E9AC +:10C54000108BE2CCFFA1F01F02F243185808C04044 +:10C55000EDB5000CC231EEC3FEB8EEF60134EEF8D4 +:10C56000017C5808E08004E742C95809E08004C80B +:10C57000EEFB017C580BC79042DAEEF80184103ACA +:10C58000C70042FE42EC1ADE14981ADC069A0E9C92 +:10C59000FEFB0B80F01F02E02FED3016C3DB3FF6F1 +:10C5A000C22BE2C6FFB3FAC4FF84310A0C9B089C7D +:10C5B000F01F02D440685C785048EEF800A8580894 +:10C5C000C301EEF800A45808FE90FF5E310A300B5C +:10C5D0000C9CF01F02D2049A404BEECCFFDC0C986E +:10C5E0004059F01F02CF0C9B089C310AF01F02CD6E +:10C5F000FE91FF4A308AE2CBFFFBEECCFF10F01F2A +:10C6000002C13018EF4800F8C6AB308AEECBFF10FD +:10C61000E2CCFFFBF01F02C3FE99FF503FF6CFCAEA +:10C62000402B310A0C9CF01F02BD049A404B0C9821 +:10C630004059EEC5FF9C0A9CF01F02B9310A0C9BC1 +:10C64000089CF01F02B8CBE13018EF4C00A80A9B01 +:10C65000EF4800A4340AEECCFFDCF01F02AACCBBEA +:10C66000129CF01F02B0C10142EC580CC160EEFBFD +:10C670000180580BC12042FEEEF80188103EC090A8 +:10C6800042C942DAC81B42FE42C942EC42DAC7CB79 +:10C690001C9AF01F02A4CF81EEF801605818E080C8 +:10C6A00000E6320AE2CBFFF3EECCFF34F01F029D2E +:10C6B000FE91FF7503B903C8F1E91088F3D8B010F3 +:10C6C000EEF801645888E08000CC5908E08000CA88 +:10C6D000EEF80128FAC9FF2C1AD970D6700C35F97A +:10C6E000FAC8FF24300A303B5D162FFD1896580C0F +:10C6F000FE90FF55EEF80160E06900FE5828F20850 +:10C700001710435AB48840680A99E2190200F1E907 +:10C7100010094358E8190108F20B1608B09B435A58 +:10C72000B4A9EEF801605828E0810093300843591D +:10C73000B2B8435AB4C8435C308AE2CBFFFB2FBC8B +:10C74000F01F02704358300AF16A005D4359F36AE2 +:10C75000005E4358406A2B381AD84379E068888EC7 +:10C760001AD9EECBFFDC1AD606990E9CF01F026E8A +:10C770003018EF4800EC5C752FDDEDB50006C0F118 +:10C78000FEFA09A8F4E80000FAE9007CEEF801647A +:10C790005888E08003F65908E08003D90A90E21037 +:10C7A0000200C0E0EEFA01283019740C069B7528CF +:10C7B000129A5D18301BEEFC0104F01F025DEEF8CA +:10C7C0000128306B700C70195D1943165806FE90E5 +:10C7D000FEE64328FAC4FF84F0C50002334A300B5A +:10C7E000089CF01F024EE0450020FE9BFED80D88FD +:10C7F000F1D8C00252280D89F3D9C041C050EEF8DB +:10C80000016458185F095209ECCBFFFE0A9AFACC72 +:10C81000FF74F01F023C0A9A52B50898FAC9FF7CCF +:10C820000A9BEEFC0168F01F0243FE91FEB8E2CACB +:10C83000FFC3089B0E9CF01F0240FE91FEB0009AC1 +:10C84000069B0E9C3016F01F023DFE9FFDE6435CEA +:10C85000302AE2CBFFFD2FDCF01F022AC6DB3208B4 +:10C86000F0091900FE91FE9BC34B42EB580BFE9062 +:10C87000FF1A58065F1AEEF9018058095F0814681C +:10C88000FE90FF116D68EDB80001FE91FF0C42F8BB +:10C89000069A1AD80E9C1ADBFEFB08A442F842E95D +:10C8A000F01F021D2FEDFE9FFE7AEEF90128720C9B +:10C8B00072885D18FE90FE73EEF80128305B700CF4 +:10C8C00070195D19403BFAC6FF50324A0C9CF01FAC +:10C8D0000213EEF801605828C0C1E338005DE33B65 +:10C8E000005E0C9AF7E8108BE2CCFFA1F01F020863 +:10C8F00043065806C0E0EEFC010C580CE08003D162 +:10C90000F8CBFFFC310A0C9CF01F0206E08003C04C +:10C910003005EEF8016C5818E08000D45805C0606E +:10C92000EEFB016C581BE080029BEEF800EC58080F +:10C93000E08102B5EEC8FF545008EECAFEB8EEC959 +:10C94000FF9CE2C8FFF3508AEEC6FEC850A950987B +:10C95000306A6E85408B0C9CF01F01F2E08500FB75 +:10C96000306A408BFAC0FFD0009CF01F01E60C9BA0 +:10C97000306AFACCFFCAF01F01E3320A409B400C38 +:10C98000F01F01E8E08500D0320A409BFACCFFC4DA +:10C99000F01F01DC320A400BFACCFFA4F01F01D9D2 +:10C9A000340E1ADE40BE00991ADE34C80A9BFEFA25 +:10C9B00007920E9CF01F01E4EEC5FF6CFAC3FF7CEA +:10C9C0000A9B308A069CF01F01CF0A9CEEC6FF64CA +:10C9D000308A0C9BF01F01CB069B0C9C308AF01F09 +:10C9E00001C93018EF4800A82FEDEEF50178EEF000 +:10C9F00001745800FE90FDD3EEFA0128FAC8FF2812 +:10CA0000E9D5B0101AD8E8C9FFA1740C74D6FAC8D9 +:10CA1000FF285C79300A303B5D162FFD1893580CC7 +:10CA2000FE90FDBDEEF80160E06900FE5828F208B6 +:10CA30001710436AB48843683019B0994066436858 +:10CA40005C760C9AA3BAB0AAEEF901605829C631F7 +:10CA500030084369B2B8436AB4C8436CE2CBFFFB09 +:10CA6000308A2FBCF01F01A74368F3D4C108F169D5 +:10CA7000005D43680A9AF165005E009B436C2A1CC6 +:10CA8000F01F01A0400B436C320A2F3CF01F019DA8 +:10CA9000408940AB43682B381AD8436C0C9A1ADC97 +:10CAA000E068888E1AD30E9CF01F019F40CBEECC1D +:10CAB000FF34320A3016F01F01932FDDFE9FFCADCC +:10CAC000EEFC0104580CFE90FF2B320A0E9BF01F67 +:10CAD000019FC361320A8F8AEEF8013406991AD891 +:10CAE0000E9BEEC8FEC8EEFC0108F01F0199580627 +:10CAF0005F1AEEF9010C2FFD58095F081468FE90CB +:10CB0000FF0F0C9A069BEEFC0108F01F0192FE91AC +:10CB1000FF0EC05B436C302AE2CBFFFD2FDCF01F21 +:10CB20000179C9CB400B320AFACCFFC4F01F017562 +:10CB3000320A409BFACCFFA4F01F0172C32B310ACA +:10CB40000E9BEEFC0104F01F0181E08101B4310A6B +:10CB5000CC3B0C9BFAC0FFD0306A009CF01F0169EF +:10CB6000306A408BFACCFFCAF01F0166C07B009B85 +:10CB7000E21B2000FE91FD13403A580AFE90FD0F83 +:10CB8000334AFAC0FFD0009CF01F0164EEF901287F +:10CB90007228720C5D1850BC039903A8F1E9108843 +:10CBA000E339005DE7D8B010E338005EF1E91088A2 +:10CBB000EEF90160F7D8B0105829E080011303B9ED +:10CBC00003C8F1E910895189EBDBC0100A34E08316 +:10CBD00000CB3028406EF00E1900E08001D80A9694 +:10CBE000129B0098FAC9FFC80C9AEEFC0168F01F6E +:10CBF0000151E08100B9F5D3C010F1DAC082501ABA +:10CC000050F830194068F2081900E08000C7302859 +:10CC1000406EF00E1900E08000A4401AF1DAC0C1A5 +:10CC2000C050EEF8016458185F0850D8EEF801289B +:10CC3000306B700C70195D19009BE2CAFFC30E9C2B +:10CC4000F01F013D1895FE91FCAAEEF80128FAC9E3 +:10CC5000FF2C0A9A1AD9303B700C70D635F9FAC8F5 +:10CC6000FF245D162FFD1894580CFE90FC98EEF8EA +:10CC70000160E06900FE5828F20817104066435A28 +:10CC80005C76B488E21300304358E8130300E7E60B +:10CC9000100CF80B1608B09B4359B2ACEEF80160CB +:10CCA0005828E08102234358B0B54359B2C5435CCC +:10CCB000E2CBFFFB308A2FBCF01F01124358300A31 +:10CCC000F16A005D4359F36A005E43582B381AD865 +:10CCD00043790C9A1AD9EEC6FEB81AD40C99E068BA +:10CCE000888EEECBFFDC0E9CF01F010F2FDD40B9CC +:10CCF0005879E08101F1EEF801685848E08001E6DA +:10CD0000E08901DC5818E080014B5828E08001469A +:10CD1000FEF804441AD8EEFA0128EF38014D1AD86B +:10CD2000EF39014C1AD9EF38014B1AD8EF39014AC3 +:10CD30001AD9EF3801491AD8EF390148302B1AD9DE +:10CD4000740CFEFA0416F01F0106EEF80128307B81 +:10CD5000700C701930165D192F9DFE9FFB5EF1D58A +:10CD6000C003C0A0EEF80128306B700C70193016AB +:10CD70005D19FE9FFB52E0460020FE9BFFF5EC0B89 +:10CD80001603FAC9FFC0E2CAFFA1EECCFFCCF01F28 +:10CD900000F5FE90FF44CE7B310AE2CBFFD3FAC40C +:10CDA000FF84089CF01F00D7310AEECBFFCCFACCF1 +:10CDB000FF74F01F00D4E0450020FE9BFFD5FAC6AB +:10CDC000FFC00A9AE2CBFFA10C9CF01F00CE0A988C +:10CDD0000C99089CE06A0100320BF01F00E3C1EBE4 +:10CDE0005C7BFACAFF50E2CCFFA1F01F00C94318D8 +:10CDF0005808CB90F3D3C0105019EDB9000CCB31CB +:10CE000043282028FAC9FFC8109A5188149B00981B +:10CE1000EEFC0168F01F00C7CA61431B1788F1D8F8 +:10CE2000C00250F81789F3D9C041C050EEF8016430 +:10CE300058185F0950D94328F0CA0002E04A002080 +:10CE4000FE9BFF922FEBFACCFFC0F01F00AEEEF975 +:10CE50000128306B720C72185D18CEFAEEF80128BA +:10CE600030091AD9129A700C70D6FAC8FF285D16CC +:10CE70002FFD1893580CFE90FB92EEF5012818999F +:10CE8000EECBFEB84358E06A888E6A0C6AA65D163F +:10CE9000069CF01F009DFE9FFB82EECEFF54320BDE +:10CEA000500E1C9CF01F00B1C1F1EF4C00ECFE9F36 +:10CEB000FD46EEF80128FEFA02B6700C303BF01F7A +:10CEC00000A8EEF80128FEFA02AA700C303BF01F11 +:10CED00000A4EEF8010C5808FE90FB613008EF4802 +:10CEE000010CFE9FFD1FEEF80128FEFA028A700C6D +:10CEF000303B3016F01F009AFE9FFA8F42EC580C20 +:10CF0000FE91FBB7EEF8017C5808C061EEF8018095 +:10CF10005808FE90FBC342F830091AD8069A1AD96D +:10CF20000E9C42F8FEFB0254F01F007B2FEDFE9F8B +:10CF3000FB36EEF801805808FE91FB18EEF9012847 +:10CF4000720C72B85D18FE9FFB111099303BEEF821 +:10CF500001605828C180E2CCFFC31AD9EEC8FFBCDB +:10CF6000EEFA012830691AD830181AD930091ADCBB +:10CF7000740C7466069A5D162FCDFE9FFC11302B43 +:10CF80003209CE6BFACCFF84CE9B5875FE98FEEC2E +:10CF9000EAC60008FE9FFE264F98CBDA4F98CBBA20 +:10CFA000EDB0000CFE91FAB0EEF800A45808FE9027 +:10CFB000FA6B3018406EF00E1900C490406AF20A05 +:10CFC0001900FE91FAA1F1D4C003FE91FA5DF6C8F2 +:10CFD00000085C88109550785C750A9CF01F00482A +:10CFE0001896FE90FA51E2C4FFA11899089AEA0B2C +:10CFF0001603EECCFFCCF01F005BC2310A9A0C9BEB +:10D00000089CF01F00400C9CF01F003F4078EA098C +:10D0100016085C58E369005DE368005E5C59F1E95D +:10D020001084FE9FFA711ADA1AD4EEF801284D6ABC +:10D03000700C302B3FF6F01F004A2FEDFE9FF9EDEC +:10D040000C9C3FF6F01F0030FE9FF9E7FAC6FF8404 +:10D05000310AE2CBFFD30C9CF01F002A310AEECB41 +:10D06000FFCCFACCFF74F01F00270898E2C9FFA19B +:10D070000C9CE06A0100320BF01F003BE339005DBD +:10D08000E338005EF1E91084FE9FFA3E0E9CF01F2B +:10D09000003FEEFC0104F01F003EFE9FFC480C9A8E +:10D0A000069BEEFC0108F01F002BEF4C010CFE91DB +:10D0B000FC293015FE9FFC2F5888C0A05908FE910E +:10D0C000FE294B48FE9FFE284B38FE9FFE254B381D +:10D0D000FE9FFE22401A0C9BE21A02000E9C3016A4 +:10D0E000F01F0016FE9FF999435C302AE2CBFFFD4A +:10D0F0002FDCF01F0004FE9FFDDC0000800092008A +:10D10000800091DC800091E88002575C8002BB08BF +:10D110008003E0488002C140800091D08002C19825 +:10D120008000917C8002C1E08003E1DC800261D458 +:10D130008002B4248002B9308002C2748003E0848B +:10D140008003E1788002B354800257CC8002914C76 +:10D1500080028FB08003C6288003E19080023A1AD3 +:10D160008002D8A080029B4080028F488003E0F0BC +:10D170008003E1308003E14C8003E0048003DF089A +:10D180008003C8E48003DFC88002B9EC80025770D6 +:10D1900080039A748003DF1080039A6CD431204D91 +:10D1A0001894F8F80128E8F9016416955909F9B3BB +:10D1B0000002F9B301011492700C1A9070991A9B35 +:10D1C0005D19C635E8F80128FAC9FFF8300A1AD9FE +:10D1D000303B700C70D635F9FAC8FFF05D162FFDA4 +:10D1E0001891580CC520E8F80160E06900FE402A5B +:10D1F0005828F2081710B4880697E8F800A4ABB7CF +:10D200005808C050E0680900E7E810075805E068D2 +:10D210000400EFD8E1375802F9B80108EFD8E13738 +:10D220004028F3D7C108B09940283006B0A740295C +:10D23000B2B64028308AB0C6E8C5FF04402C0A9B2D +:10D240002FBCF01F00130A9C308BF01F00124028E7 +:10D25000F166005D4029F366005E0E99E219010057 +:10D26000FBF81002F9BA014DF1DAE1091AD9404888 +:10D2700000991AD8069A1AD1089CE068888EE8CBE3 +:10D28000FFDCF01F00052FDD2FCDD832800091DCB0 +:10D29000800239EA8002C1E0EBCD40804879720813 +:10D2A000201893081897C031F01F00050E9CF01F3E +:10D2B0000005E3CD8080000000007AB48002D2F83F +:10D2C000800091E8EBCD40C048976E065806C041FB +:10D2D000F01F0008C0916E082FF8304C8F08F01F27 +:10D2E0000006E3CD80C00C9CE3CD80C000007AB482 +:10D2F0008002D30480028F24D401F01F0002D802E0 +:10D300008002D996D401F01F0002D8028002D9947D +:10D31000D4211789179A17B8F1E9118817A9F1EAEA +:10D320001108F1E91088990817CA17D8B168F1EA0D +:10D33000118817EA17F91258F1EA10889918F73A84 +:10D340000008F739000BF7380009B168F1EA1188D5 +:10D35000F73A000A1258F1EA10889928189EF73A0D +:10D36000000CF738000DF739000FF8C5FFE4B1687D +:10D37000F73C000EF1EA11883007125849B4F1EC7D +:10D38000108C49B69D3CC038149C2F05E80707084F +:10D390002F0EFCF9FFF0F3E82189EC0C0F88E2185E +:10D3A000FF001059EC0C0F98E61800FF1059EC0C18 +:10D3B0000FB8F1D8C1081059FCF8FFF4EC0C0FAB12 +:10D3C000A96BE61BFF0016599D091059FCF8FFF8E0 +:10D3D0009D1910599D29FCF8FFFCF3E8200A8B0ADF +:10D3E0002FF758A7CD21D8228003E2F08003E6FC76 +:10D3F000EBCD40FE1892F01F002F0493E4CBFF60AA +:10D40000E4C4FFFCE4C5FF5CE4C6FFF8E4C7FF58D2 +:10D41000E4CEFFF4E4CCFF54E4C1FFB06609760823 +:10D4200087089709680A6A0889088B0A6E086C09D8 +:10D430008D088F097C0A78089D08990A2F03210B13 +:10D440002F0421052F0621072F0E210C023BCE7140 +:10D45000E4C4FFF030134985498608972F046E0A0B +:10D46000EC0A0F98EA080F9EEC0A0F88EA080F9C56 +:10D47000EC0A0FB8EA080F9BEC0A0FA8F809150888 +:10D48000FC0A1510F3EC1389F5EE130A1659EA0895 +:10D490000F9BF6081518F1EB1288105914590EA9B4 +:10D4A0000E34CDE12FF358A3CD91E3CD80FE0000E3 +:10D4B0008002D3108003E2FC8003E6FCD431209D7F +:10D4C000F736000E505A178A780917B8F1EA118812 +:10D4D000179A1258F1EA210817AEF1EE208E506E1D +:10D4E000781817CA17F9105917D8F3EA2189F3E801 +:10D4F000210917EEF3EE208E507E7828F7390008C8 +:10D50000F73A000B105AF7380009F5E9218AF73984 +:10D51000000AF5E8210AF5E920827839F73A000C8B +:10D52000F738000FFEF7034412581894F1EA2188E7 +:10D53000F739000DF8CAFF60F1E92108500AF1E659 +:10D5400020800E91E0081618406AEE080326F3DAF0 +:10D55000C008F1D2C208EE090329EE080328504999 +:10D560005038407AEE0A0F9950296878684B105667 +:10D570004068EE000FACEE080FBA4079165AEE097B +:10D580000F8BF6081508F1EB1388F8091518105AD7 +:10D59000F3EC1289EE020F9C125AF8081510F1EC08 +:10D5A0001308F5E82008685E68654079EE090FBB4E +:10D5B00050884068EE020F8C1C5BEE080FAEF80836 +:10D5C0001508F1EC1388EE000F9A105BFC09151892 +:10D5D000F4081510F3EE1289F1EA1308125B407992 +:10D5E000F7E82003EE000F8BF6081508F1EB13881F +:10D5F000EE020FBCEE090FAE0A5CFC091518105CB8 +:10D60000F3EE12894068125CEE080F9B404A4048D6 +:10D61000F6091510A968F3EB1309F1EA1388F9E983 +:10D620002000105640394038B968F1E912882E04BC +:10D63000105640294028B169400AF3E81309EDE982 +:10D6400020021434C770E4081618408AF3DAC008C0 +:10D65000E208032EE2090326F1D0C208E2030F9983 +:10D66000E20803255019E2020FACE2030F8B6809B0 +:10D67000F6081508F1EB1388E20A0FBA125AF809F6 +:10D680001518105AF3EC1289E2000F9C125AF80890 +:10D690001510F1EC1308F5E82008E2030FBB506801 +:10D6A00040886819E2000F8AE2080FAC125BF408A8 +:10D6B0001508F8091518F1EA1388F3EC1289E2004D +:10D6C0000FBAE2020F9C105BF8081510125BF1EC28 +:10D6D0001308F7E8200850786829E2030FAC125AC3 +:10D6E000F8091518F3EC1289E2020F8BF6081508F9 +:10D6F000F1EB1388105A125A4089E2090F9B6839DE +:10D70000F6081510F1EB1308125EF5E82002EC099B +:10D710001508EA081518F3E61389F1E51288125E78 +:10D720004019105EB1694018F3E81309FDE92000C3 +:10D73000C0AB4089F1D3C1084CDBFDD9C008F60865 +:10D740000706E40A1618EBD0C208F60A0709F60520 +:10D750000708F60E070CF9E9118CF3D3C008F9E8B5 +:10D76000110C4088B988F608070AF6090708F3D2B1 +:10D77000C208F1EA1188F609070AF3D0C108680E59 +:10D78000F1EA1108F609070AF1EA10881C58F009B5 +:10D790001618405AB4B8B4894059F00A1610A9882E +:10D7A000B29AB2A8E6091618F609070AF3D0C0081B +:10D7B000F6090708F1EA1188408AF3DAC208F60987 +:10D7C000070AF3D2C108F1EA1108F609070A40591D +:10D7D000681EF1EA10881C58B2F8F0091618405A71 +:10D7E000B4C94059F00A1610A988B2DAB2E8E009C3 +:10D7F0001618F609070AF3D2C008F6090708F3D38A +:10D80000C208F1EA1188F609070AF1EA1108408A0C +:10D81000F3DAC108F609070A4059682EF1EA1088C0 +:10D820001C58F368000BF0091618405AF5690008F7 +:10D830004059F00A1610A988F36A0009F368000A33 +:10D840006839405AF9E6108C125CF8081618F80985 +:10D850001610F56C000FF568000CA98CF569000D29 +:10D86000F56C000E2F7DD8328003E2FC8003E1F0DE +:10D87000EBCD40C01897590BC030E3CF80C0E06CAF +:10D8800000B0F01F00061896CF900E9BF01F00040A +:10D890000C9CE3CD80C00000800092008002D3F099 +:10D8A000D431209D129714961895500B308A0C9BFA +:10D8B000FAC2FFE4049CF01F0034ECCBFFF8400AEE +:10D8C0000E9CA37AF01F00300A9C310BF01F002F32 +:10D8D0001893C57040082018EE08003840095028F9 +:10D8E0005C39400A5C59F40A00285019E9D8C0088C +:10D8F0003050FAC7FFF4FAC1FFEC40095809E08A3A +:10D90000002940251296308A049B0E9CF01F001EB1 +:10D91000FB390013E806000812580A9BFB68001345 +:10D92000308A029CF01F00180E9A0E9B069CF01F76 +:10D930000018308A0E9B049CF01F001320160A9CCE +:10D94000308A2085029BF01F00105806FE99FFDDEB +:10D95000401A2010E80A0008E9D8C0085BF0CCE1C2 +:10D96000069CF01F000C049C3A691988F208180004 +:10D97000C0812FFCFAC8FFDC103CCF812F7DD83A44 +:10D980002F7DDC3A800091DC8002D8708002D4BC0C +:10D99000800091E85EFD5EFCD4311A97202D109E28 +:10D9A000129514965809C4911638E0880057F0086B +:10D9B0001200C0D0F608094BF0091120FC08094EEE +:10D9C000F4090A49F4080946F3EB100BFC0516109C +:10D9D000F9DEC010F6050D0AEC0816101499F1EBEB +:10D9E0001108B93A103AE088000C20191C08103EC2 +:10D9F000E08B0007103AF7B90B01F1DEEB08F00AF3 +:10DA0000010BEDD6C010F6050D0AEDEB11061498CA +:10DA1000F40C024C0C3CE088000A20181C060C3E5A +:10DA2000E08B00050C3CF7B80B01F1E9110B300C51 +:10DA3000169A189B2FEDD8321639E08B0051F20C54 +:10DA40001200C53114385F8916355F381049F8095E +:10DA50001800C450301BC4585808C0513019F2087F +:10DA60000D08109EFC081200E08100911C1BFC05B3 +:10DA70001610F3DEC010301CF6050D0AEC08161067 +:10DA8000F4090243F1EB1108149B1033E088000CF9 +:10DA9000201B1C08103EE08B00071033F7BB0B0166 +:10DAA000F1DEEB08F0030103EDD6C010E6050D0230 +:10DAB000EDE311060498E40902490C39E088000AF4 +:10DAC00020181C060C3EE08B00050C39F7B80B0142 +:10DAD000F1EB110B169A189B2FEDD832300B169CD8 +:10DAE000169A189B2FEDD832F20C0945F80E11202A +:10DAF000F00C0943F40E0A46F00E0A48F60E0A4EE0 +:10DB00000A48F0011610FC010D04EEE5FFF8F60CD2 +:10DB10000949EBD8C010EDE910090896F20E16106D +:10DB2000EEF4FFF8EC05024BFDE4110E1C3BE0881F +:10DB300000072016100E1C38E088006D161EF3D961 +:10DB4000C010FC010D00F3E11109009BE005024E3D +:10DB5000123EE0880007201B10091238E0880055AB +:10DB6000F7E6110B1C19F60306420639C0935F094C +:10DB7000F40C094C043C5F38F3E80008C020201B7B +:10DB8000300C169A189B2FEDD832F6080949FC087C +:10DB9000094EF0011120FC051610F4010A42F601AD +:10DBA0000A411242E2050D00F3DEC010E406161031 +:10DBB0000093EDE11106E009024C0C3CE0880007FF +:10DBC00020131C060C3EE088002CEC0C0101F7D25F +:10DBD000C010E2050D00F7E1110B009CE0090241C5 +:10DBE0001631E088000C201C1C0B163EE08B000751 +:10DBF0001631F7BC0B01F7DEEB0BF4080946021BEC +:10DC0000F9E3110CC3AB123EF3D8EB09F7BB0B01E0 +:10DC1000CA8B1C3BF7B60B01FDD8EB0EC90B0C3CB5 +:10DC2000F7B30B01EDDEEB06CD1BD703D40130AA11 +:10DC3000300BF01F0002D8028002F0ECD4014848FB +:10DC4000169A189B700CF01F0003D802000005986C +:10DC50008002DC54D421F40B024BF01F00151897FE +:10DC6000C230F8FAFFFCE01AFFFC204AE04A002428 +:10DC7000E08B00181898593AE088000F300910A975 +:10DC800010A959BAE088000910A910A9E04A002497 +:10DC9000C03110A910A9300910A991199109C048E3 +:10DCA000300BF01F00040E9CD82200008002E2BC62 +:10DCB0008002E8BCD421300EF6C80001F60614013B +:10DCC000F808002818991897C07870046E050EA4FB +:10DCD00091052FFE20480C3ECF95F40B000B1897B2 +:10DCE000F6C80001300EF8080028A15BC078700566 +:10DCF0006E060EA591062FFE2048163ECF95F4C85D +:10DD00000001A15AF808002C3008C078780E720B78 +:10DD100012AE990B2FF8204C1438CF95D822D70388 +:10DD2000D431205D502C503816971496580C5F0B48 +:10DD300058075F0C1295F9EB100B40E33008F00B1D +:10DD40001800E081028058095F09580A5F08F3E86B +:10DD50000008F6081800E08102764BE4402B6808C2 +:10DD60001638E0840270EE08032C580CE080026B39 +:10DD70004B9BF01F003AC06168082FF88908E08FBC +:10DD8000026268085808C05130184B598908930836 +:10DD90005806C14032D90D88F20818005F0232B926 +:10DDA000F20818005F08E5E81008C0805802F9B2D0 +:10DDB0000101F9B200022FF6C0884AACF01F002A18 +:10DDC000F9B20102F9B200004A5870085818C61199 +:10DDD0005812C2B049F95822C4A0129872043001F6 +:10DDE00032DB32BA7009F2C0FFFFEE09032C580C87 +:10DDF000E080023B1989F6091800C0805803E080D2 +:10DE00000225F4091800E081022150015014492B29 +:10DE1000F01F0012C411EE04002C029B301A2FF4E4 +:10DE2000F01F0012E08F022148A87009EE090328B4 +:10DE30005808C2F0118A32DBF60A1800C2A0580353 +:10DE4000E080020832BBF60A1800E0810203C21823 +:10DE500000007AB88003EC008002ECC800007ABCB5 +:10DE60008003EC04800326948002DCB47208EE0880 +:10DE700003285808C0E0118832D9F2081800C09071 +:10DE80005803E08001E032B9F2081800E08101DBBC +:10DE90003009500950195805E08000A44BE4680887 +:10DEA000302AEE08032C4BDBF01F003DC0D0580396 +:10DEB000E08000986808EE080328118932B8F0095C +:10DEC0001800E081008F4B7468085818E081008AC0 +:10DED0004B187008302AEE08032C4B0BF01F003053 +:10DEE000F9B80002E9F80A004AB468084AD1EE0815 +:10DEF000032C620833DB100CF01F002B1893C0E1D9 +:10DF00006808EE08032CF01F002968096208EE0972 +:10DF10000323F80801081803C08868086209EE089E +:10DF20000328F8080108121850430A910C933FF493 +:10DF300030001096C4784989720849A9EE08032C6C +:10DF400072080C9A100CF01F0016C3A1620CF01F8F +:10DF500000171836C051069600944043C3C85BF4BE +:10DF6000C2E0493870085808C7C062081AD848A8E3 +:10DF700070096E08EE090329A564EA04030A1ADA97 +:10DF80001AD91AD848B8700848BB702CF01F000B7B +:10DF90002FCDC67800007AB88003EC008002E7102D +:10DFA00000007ABC8002ECAC8002EDD0000004A43A +:10DFB000000005988003EC1480031FE800942FF004 +:10DFC0002F01620B580BCB81069640435BF4C031A6 +:10DFD0000898C0A8E8081504EA0800087018C048A6 +:10DFE0003FF83003109458065F19F3E403F9C03189 +:10DFF0003006C5484BE162084BE3EE08032966088A +:10E000000C9CF208070BF01F003C1896C2D14BB8CD +:10E0100070085808C11062096608EE090329F20861 +:10E0200007081AD86E081AD84B5870084B5B702C2A +:10E03000F01F00352FED4AF8700B2FFB910B4AC9EA +:10E04000720AEE0A032CF80B070C300BF60C1800C2 +:10E05000F7BA00FFF3FA0A00F9B90001F1F90A0072 +:10E0600033F8109CC818199833A9F2081800C0306A +:10E070003008C08819A9F0091800F9B80002F9B8E9 +:10E08000010149CA49A97209EE09032974030D8ADD +:10E090002FF3F203000349D9930A5818C1505828A6 +:10E0A000C0405808C6C0C208078933D8F009180014 +:10E0B000F7B300FF4968078A3009F20A1800C10166 +:10E0C00030069106C718078933D8F0091800F7B34E +:10E0D00000FF30080789F0091800C1B048C8910353 +:10E0E0003019484891093006C5F8000000007AB898 +:10E0F00000007ABC8002ECAC000004A4000005988B +:10E100008003EC5080031FE8000004A000007AC0E8 +:10E110004C08402B70082FF81638C2954BE8700851 +:10E120005808C1C06E084BD71AD86E084BCB702C5C +:10E13000F01F003C2FFD5BF4C0906E08A5644BAB54 +:10E14000EA0403091AD9702CC0686E080D894B7B4C +:10E150001AD9702CF01F00332FFD4AE933A8720A38 +:10E16000109C2FFA930A4B299308C6D84B19EE0836 +:10E17000032A3018930A10964AF9C1584AE95BF409 +:10E18000C0D1720A2FFA930A4A2B760BEE0B032B9F +:10E19000F60A070AF00A1800C03130189308300850 +:10E1A0004A49109693085802C1B140094A285809B3 +:10E1B0005F19700858185F08F3E80008E4081800B1 +:10E1C000C0F04018ECCAFFFFEE08002C400BF01F17 +:10E1D000001B40182FF8F006000648E8C0A8496860 +:10E1E00070085818C07148B870092FF9F206000677 +:10E1F00091065BF4C240403B580BF7F41A00A5644B +:10E2000008056A3C6A285808C1E0910C300CC1B876 +:10E2100000007AB8000004A4000005988003EC70A8 +:10E2200080031FE88003EC948003EC9C000004A0B2 +:10E2300000007AC000007ABC8002DCB448C8700CD0 +:10E24000C0283FFC2FBDD83291002FF1FE9FFDCC9E +:10E25000488B97084888F2CAFFFF3019910A129C30 +:10E2600048389109CF0B48489104CECB000004A058 +:10E2700000007AC000007AB8D40130091AD9129887 +:10E28000F01F00022FFDD8028002DD20D401484893 +:10E29000189B700CF01F0003D802000000000598C6 +:10E2A0008003217CD4014848189B700CF01F0003A8 +:10E2B000D8020000000005988002E2BCD431F6C705 +:10E2C000FFF518955967F9B70810F9B80BF8EFD8AA +:10E2D000EB2716375F38F1E713F8C05030C899388C +:10E2E000E08F01F4F01F0050E04701F7E08B001CC5 +:10E2F000EE0316034CD8F003003870361036C061B8 +:10E30000ECC8FFF870361036C0C06C18E018FFFC7F +:10E310006C3AEC0800090A9C6C289528913AC4785C +:10E320002FE3C4D8EE081609C041EE031603C278E5 +:10E330005848E08B0006EE0316062C83C2085948A5 +:10E34000E08B0005F0C3FFA5C1A8E0480054E08BB6 +:10E350000006EE03160C2923C128E0480154E08B87 +:10E360000006EE03160F2893C0A8EE031612E0482D +:10E370000554E088000437E3C02828434ABAF40370 +:10E38000003A7436C1986C19E019FFFCF207010BD2 +:10E3900058FBE08A00042013C1186C38580BC0B534 +:10E3A0006C2AEC0900090A9C912A95387218A1A8D8 +:10E3B0009318CBD810961436CE712FF349BAF4CCFB +:10E3C000FFF878261836C6F06C19E019FFFCF20742 +:10E3D000010858F8E0890091993C992C5808C055DB +:10E3E000EC0900090A9CCE3BE04901FFE08B0013D9 +:10E3F000A399F4090038702B8D388D2B9736912610 +:10E40000A3497418301BF6090949F1E91009951957 +:10E41000C4A8F20816095848E08B000AF20A16064A +:10E420002C8AC2488002E8CA0000059C5948E08B4B +:10E430000005F0CAFFA5C1A8E0480054E08B000623 +:10E44000F20A160C292AC128E0480154E08B000684 +:10E45000F20A160F289AC0A8F20A1612E0480554CC +:10E46000E088000437EAC028284A4C8BF60A0034BA +:10E4700068280838C0E17619A34A301EFC0A094A08 +:10E48000F3EA100A1099971AC0A870280838C060DB +:10E49000701AE01AFFFC1439CF9370398D398D282A +:10E4A00091369326E6081402301B4B84F608094B7C +:10E4B0006818103BE08B006EF7E80009C0B1E0136C +:10E4C000FFFCA17B2FC3C0382FC3A17BF7E8000955 +:10E4D000CFC0E803003E06921C916236C2E86C1A77 +:10E4E000E01AFFFCF407010858F8E08A00156C3ABE +:10E4F0006C299529933A0E99EC070007A1A9993741 +:10E5000099278D19EE0809088F2C8F3CA1A80A9C29 +:10E510008F18C0D86C395808C0F5EC0A000A741876 +:10E52000A1A80A9C95186C2893289139F01F00180F +:10E53000ECCCFFF8D83212960236CD212FF2F1D270 +:10E54000C002C0302F81CCAB1C98F3D3C002C08175 +:10E550006819F60811FFF3E800088918C078F0C9B7 +:10E560000008201370081238CF10A17B6818103BE8 +:10E57000E08B0010580BC0D00493C0382FC3A17B90 +:10E58000F7E80009CA71CFBB0000059C8002E8CC07 +:10E5900068236612E012FFFC0E325F39E4070108BF +:10E5A00058F85FAAF5E91009E08000A24C887001D4 +:10E5B0004C882F0170080E015BF8C0402811E01153 +:10E5C000FF80029B0A9CF01F004418965BFCC6E08B +:10E5D000E6020008103CC0320833C6814BFA7409C9 +:10E5E000E209000995091036C0A1F5D6C007C0712F +:10E5F000E20200026828A1A29112C4C84B5A740B0F +:10E600005BFBC0319506C068EC0900094B3A101954 +:10E610009509F1D6C003F00911085808F20817103F +:10E62000EDD8E1062808EC0100010A9CE3D1C007FF +:10E63000F0010101029BF01F00284A885BFCEC0CF2 +:10E640001700F9B1000070090C1C8926020C120198 +:10E65000A1AC91018D1C0833C1D058F2E08B0005AC +:10E6600030188D18C238305920C2E012FFF8E60287 +:10E670000008912991196618F1D8C001E5E8100841 +:10E68000871858F2E0880007E6CBFFF80A9CF01FD5 +:10E6900000144949720A491870081438F3F8BA008E +:10E6A0004919720A1438F3F8BA0068287018E0188B +:10E6B000FFFC0E385F390E1858F85FAAF5E910090B +:10E6C000C1600A9CF01F0009D83A000000007ACC13 +:10E6D000000009A88002EBC800007AD08003217CEA +:10E6E00000007AC800007AC48002E8CC6826A1A89D +:10E6F0000E99A1A98D19EC0700070A9C89278F188C +:10E70000F01F0003ECCCFFF8D83200008002E8CC08 +:10E71000D4013008C0D8F808070EF6080709201AF7 +:10E720002FF8F20E1800C040FC09010CD802580A5C +:10E73000CF31149CD802588AC2F5F9EB1009E219BE +:10E740000003E0810097E04A0020C3B4F4081402FB +:10E75000F0091108FE09002F7669996976599959CF +:10E7600076499949763999397629992976199919E5 +:10E7700076099909F608002BF8080028E01A00032A +:10E78000F40A1104FE0A002F17A9B0A91799B0992D +:10E790001789B0895EFCF40A1109FE0A002F17F9E7 +:10E7A000B8F917E9B8E917D9B8D917C9B8C917B965 +:10E7B000B8B917A9B8A91799B8991789B8895EFC8B +:10E7C000EBCD40C01899220AB707B326B707B32686 +:10E7D000B707B326B707B326220ACF742F0AC0653E +:10E7E000B707B326B707B326210A5C3AFE0A003FF3 +:10E7F000D703D703F736000EF366000EF736000D89 +:10E80000F366000DF736000CF366000CF736000BCC +:10E81000F366000BF736000AF366000AF7360009C4 +:10E82000F3660009F7360008F3660008F7360007BC +:10E83000F3660007F7360006F3660006F7360005B4 +:10E84000F3660005F7360004F3660004F7360003AC +:10E85000F3660003F7360002F3660002F7360001A4 +:10E86000F3660001F7360000F3660000E3CD80C0D8 +:10E87000201AF60A0709F80A0B09CFB15EFCD40189 +:10E88000183BC192F60A0009123CC152F80A000B6B +:10E890003008C068F208070E201AF6080B0E201880 +:10E8A000580ACF91D802F6080709201AF8080B0970 +:10E8B0002FF8C0283008580ACF71D8021898C038ED +:10E8C00010CB201A580ACFD15EFC5EFC5EFCD70349 +:10E8D000D4014848169A189B700CF01F0003D80208 +:10E8E000000005988002E8E8D431201D16941892A3 +:10E8F000149B5804C051F01F005B1895C5B9500A0D +:10E90000F01F0059400BE8C10008F6C6FFF5621C75 +:10E910005966F9B60810F9B80BF8EDD8EB2616369B +:10E920005F38F1E613F8C05030C830058538C42987 +:10E930001890E010FFFC0C30E08401124CB8E200AB +:10E94000000970250A39C090721AA1CAF20A000A99 +:10E95000741AEDBA0000C220721AE01AFFFCF4002B +:10E9600000030A39C131ECC7FFF00E33C195E2064E +:10E9700000090C13A1A393139129049C6218089514 +:10E98000F1D8C00110468316C1390C33C0957228E6 +:10E990000297723993289139CE48300A1499EDBC08 +:10E9A0000000E080009D6207E20701076E1CE01C8A +:10E9B000FFFC5809C5E0F80000030A39C4811403BC +:10E9C000ECC9FFF01233C5556E3A6E299529933A7A +:10E9D000EEC5FFF8E0CA0004E04A0024E08B002501 +:10E9E0000A99593AE088001A09098B0909098F39EF +:10E9F000EEC9FFF059BAE0880011090B930B090921 +:10EA00008F59EEC9FFE8E04A0024C071090A930A51 +:10EA1000EEC9FFE0090A8F7A090A12AA680A930A66 +:10EA2000681A931AC0785008089B0A9CF01F0010BF +:10EA30004008EE0600090C13A1A393139129049C2E +:10EA40006E18F1D8C00110468F16CB2814030C3372 +:10EA5000C10572287239932891396E286E39C0F831 +:10EA60008002E2BC8002E8CA0000059C8002E87EC9 +:10EA7000F80000030C33C3356E396E2893289139A2 +:10EA8000E0CA0004EECCFFF8E04A0024E08B00244A +:10EA9000593AE088001A0908990809088F38EECC1D +:10EAA000FFF059BAE08800110908990809088F5841 +:10EAB000EECCFFE8E04A0024C07109089908EECCCA +:10EAC000FFE009088F78090818A8680899086818ED +:10EAD0009918C478089BF01F0039C438049CF01FB3 +:10EAE00000381895C3A06218F8C90008A1C8E20848 +:10EAF00000081039C07172130297E013FFFC000385 +:10EB0000C308E0CA0004E04A0024E08B0020089912 +:10EB10001898593AE0880014130B10AB130B10AB84 +:10EB200059BAE088000D130B10AB130B10ABE04A81 +:10EB30000024C051130A10AA130A10AA130A10AA1B +:10EB4000720A910A72199119C048089BF01F001BA4 +:10EB5000089B049CF01F001B049CC2A80093029712 +:10EB6000E60601096E1858F9E0880016F1D8C001D0 +:10EB7000EDE810088F181298A1A8EE06000BF60910 +:10EB8000000997187218A1A82F8B9318049CF01FE6 +:10EB9000000DC0B8F1D8C001E7E810088F18EE03E7 +:10EBA00000036618A1A88718049CEEC5FFF8F01FA3 +:10EBB00000060A9C2FFDD8328002E87E8002E2BC6B +:10EBC0008003217C8002E8CCD42130081897487655 +:10EBD000169C8D08F01F00065BFCC0516C0858089D +:10EBE000EFF81A03D822000000008CC48002F1E87C +:10EBF0005EFDD703D421217DE06802041697BA6830 +:10EC0000504C500CF01F000B3008512850D848A829 +:10EC100050983FF8BA784898505C501CFAC9FF9059 +:10EC20000E9A700C1A9BF01F00062E9DD822000031 +:10EC30008002EDD08002EBF00000059880030C4CC0 +:10EC4000D421217D4988FAC9FF9016977006580B88 +:10EC5000C064E068008B3FFC8D38C228580BF60872 +:10EC600017005807F9BB01FFEFDBE10850585028A7 +:10EC7000E0680208BA683FF8504C500CBA781A9B0A +:10EC80000C9CF01F000A5BFCC044E068008B8D38D0 +:10EC90005807F9B90100FBF81000F1F91E002E9D8C +:10ECA000D8220000000005988002F5685C5BC0284F +:10ECB0002FFC19885808C050F6081800CFA15EFC38 +:10ECC000580B5E0C5E1DD703F9EB100AE21A000325 +:10ECD000C341780A76095CEAC170123AC151781AC8 +:10ECE00076195CEAC110123AC0F1782A76295CEAFA +:10ECF000C0B0123AC091783A76395CEAC0502F0C15 +:10ED00002F0B123ACE70F9DAC308F7D9C3085E0C9C +:10ED1000161C5E1CF9DAC208F7D9C2085E0C161C74 +:10ED20005E1CF9DAC108F7D9C1085E0C161C5E1C1E +:10ED30005C5A5C59121A5EFA178A1989580A5E09D8 +:10ED400014195E19179A1999580A5E0914195E194F +:10ED500017AA19A9580A5E0914195E1917BA19B920 +:10ED6000580A5E0914195E192FCB2FCCCE6B000008 +:10ED70003008F6080709F8080B092FF85809CFA141 +:10ED80005EFCD703D4014848189B700CF01F0003A9 +:10ED9000D8020000000005988002ED9CD42118974D +:10EDA0001696169CF01F0008F8C5FFFF0E9C0A9BE4 +:10EDB000F01F00061897C0500A9A0C9BF01F000421 +:10EDC0000E9CD8228002EDD08002E2BC8002E736A1 +:10EDD00030091898C0282FF8118AF20A1800CFC1FC +:10EDE000F00C010C5EFC580AC0815EFA580AC0B0F3 +:10EDF0005808C0902FFC2FFB201A19881789F0099A +:10EE00001800CF50198C1788101C5EFC3008103A7F +:10EE10005E0CF6080709F8080B092FF85809CF818E +:10EE2000103A5E0CF8080B092FF8CFBBD401484804 +:10EE3000169A189B700CF01F0003D802000005986A +:10EE40008002EE44D421300816951696C0282FF67D +:10EE5000580AC060201A0D89F0091800CF910A16CF +:10EE6000ECCBFFFFF01F00071897C0800A9B0C9A9D +:10EE7000F01F00053008EE060B080E9CD82200009B +:10EE80008002E2BC8002E736D42118981696580B0F +:10EE9000C0C03007C0481897F8C8FFFF109C0C9BF3 +:10EEA000F01F0005CF91C048F01F000318970E9C7B +:10EEB000D82200008002ECACD421201D4A351897DE +:10EEC0006A04E8F600E85806C351500B350CF01FF1 +:10EED00000206A08E94C00E8F0F900E89326930660 +:10EEE0009316F0F900E893469336F0F900E893663C +:10EEF0009356F0F900E893B693A6F0F900E893D69C +:10EF000093C6F0F900E893F693E6F0F900E8F346CB +:10EF10000044F3460040F0F900E8F346004CF346A5 +:10EF20000048F0F900E8F366001CF0F800E8400B38 +:10EF30009196486870080E9CF0FA00E83019F01FAE +:10EF400000052FFDD8220000000005988002E2A4F1 +:10EF50008002EF54D421580CC041740C580CC2905C +:10EF600018981697113EC0A80C3EC0815809C030B1 +:10EF7000109CCF7B9508B889D8220F365806CF5100 +:10EF8000580EC051950E1C9CD822129810991697B5 +:10EF9000133E0F361C36C0A1580EFC091700F9BBF2 +:10EFA0000100F1FB1E009509D8225806CF31CEEBA7 +:10EFB000D822D703D431203D4CC8502C700116986C +:10EFC000113EE20E0706E2160008CFB1E04E002D1A +:10EFD000C041113E3016C058E04E002BC021113EFA +:10EFE00058095F0C59095F053007F9E51005EE0572 +:10EFF0001800C1E0E04E0030C131118535843783FF +:10F00000E80518005F04E60518005F05E9E510054E +:10F01000EE051800C050119E31092FE8C098580C19 +:10F02000C070E04E0030F9B90008F9B9010AE06C8F +:10F03000FFFFEA1C7FFF3007FC1580000E930E36A1 +:10F04000F80517000E9CEA090D0408925005E20E1F +:10F050000704E1D4C001F9B00137F9B000575010EE +:10F06000FCC500300890E2100004C0814010E9D4D3 +:10F07000C002FC0001055804C1C01235C1A4043C03 +:10F080005FBEFDE713FEE60E1800C101043C5F0EF3 +:10F0900040070E355F97EFEE000EE60E1800C061D8 +:10F0A000B33C3017EA0C000CC0283FF7113ECD0BE3 +:10F0B0005BF7C0E1E069FFFFEA197FFFFC1C8000FD +:10F0C00040205806F20C170032298139C0485806F2 +:10F0D000FBBC0100580AC0705807F9B901FFF1D90B +:10F0E000E10B950B2FDDD8320000049CD401485869 +:10F0F0001499169A189B700CF01F0003D802000098 +:10F10000000005988002EFB43028D6733FFC358BA1 +:10F11000580C5E4C482A950B5EFC000000008CC425 +:10F120003058D6733FFC358B580C5E4C482A950BF3 +:10F130005EFC000000008CC43038D6733FFC358B79 +:10F14000580C5E4C482A950B5EFC000000008CC4F5 +:10F150003048D6733FFC358B580C5E4C482A950BD3 +:10F160005EFC000000008CC430B8D6733FFC358BC9 +:10F17000580C5E4C482A950B5EFC000000008CC4C5 +:10F180003098D6733FFC358B580C5E4C482A950B53 +:10F190005EFC000000008CC4D421210D16971A9B40 +:10F1A000F01F0011C0343FFCC1C84008AE08401831 +:10F1B000AE1840288F184038AE484048AE584058E6 +:10F1C000AE684068AE7840888F4840A88FB840C885 +:10F1D0008FC840D88F5840E8300C8F7840F88F980F +:10F1E0002F0DD8228002F180D40148C87009580937 +:10F1F000C03148B99109489948AA7208F00C000C2E +:10F20000143CE08B0004930CC068F01F000730C86A +:10F2100099083FF8109CD80200007AF800008CC8CA +:10F220000000F00080031D20D431208DFAC4FFBC03 +:10F23000504B682E505812967C0B7005506E580B30 +:10F24000F40B17006803681140493008C2C92FFB4E +:10F25000325C178AF80A18005F1EF00A18005F1C5B +:10F26000FDEC000CF00C1800CF31580AE0800129A9 +:10F27000300C3FFA1890503A18941892F80C003C51 +:10F280001697507C4CDC0F3AF80A070E407C1C0C99 +:10F290004CBEFC0C070E201E500E4CAEFC0C070C96 +:10F2A000507C400C587CE08B00F84C7EFC0C032F0B +:10F2B000368BF60A1800E08000F0371BF60A1800BB +:10F2C000C07034CBF60A1800C051A3B4CE58A5B410 +:10F2D000CE380F8B36CAF40B1800C051A5B4EECB54 +:10F2E000FFFFCDB8A5A4CD88EBD5C005367CF80AC4 +:10F2F0001800E08B0027365BF60A1800C48234FB46 +:10F30000F60A1800C480E08B000C345BF60A180083 +:10F31000C3E0347BF60A1800C3A0344BC088358B99 +:10F32000F60A1800C2C0E08B0007355BF60A180029 +:10F33000C351C318363BF60A1800C2F0364BC0E87A +:10F34000370BF60A1800C250E08B000D36EBF60AB8 +:10F350001800C1F0E08B0014369BF60A1800C1E1DA +:10F36000C0E8375BF60A1800C0A0378BF60A180011 +:10F37000C060373BF60A1800C111C0B8EDB40004F4 +:10F38000C0A0EDB40005C0913020C0883040C068F6 +:10F390003030C0483010C0283000403B5BFBC040DC +:10F3A000E20B0920C7985860E08B00776C0AEACC22 +:10F3B000FFFF486EFC00032F8003EE088003ED641E +:10F3C0008003ECF88003ECAC8003ECCCF4CBFFF8CA +:10F3D0008D0BF4EA0000E605083AC0F8F4CBFFFC18 +:10F3E0008D0B740AE605093AC088F4CBFFF88D0B43 +:10F3F000F4EA0000E605083A0E9B1895C4E8620A94 +:10F400005BFAC0B150195028E06A0080300B029CB2 +:10F41000F01F004D40284019E4CC00010E9B503CE9 +:10F42000F20C0C49C3A8620A5BFAC0B1501950280B +:10F43000E06A0080300B029CF01F00434028401916 +:10F440002012300A0E9BE202092AF2020C49C2582D +:10F4500016976C0AF4CBFFFC8D0B740A0E9BE60525 +:10F46000093A2FF5C1A8F4C20030C068E4020022B6 +:10F470002FF7F40200120F8A580AC0E0230A589AA4 +:10F48000FE98FFF6C0982FF70F8A580AC050230A3B +:10F49000589AFE98FFFA0E9B407C30BAF40C180084 +:10F4A000FE91FEEE4042178C0A325F4AF00C1800C3 +:10F4B0005F1CF9EA000AF00A1800FE91FECB300842 +:10F4C000404E178AE2050021F00A1800FC091710C7 +:10F4D000E6050038069EC2A8620A583AC1E0E089F3 +:10F4E0000007581AC1A0582AC181C058585AC0C034 +:10F4F000C0B5C1386C0AF4CCFFF88D0CF4E2000002 +:10F50000F0E30000C1086C0AF4CCFFF88D0CF4E2C3 +:10F510000000F0E30000C0786C0AF4CCFFFC8D0C16 +:10F52000740A910A2FF52F882FC11235FE9AFFD643 +:10F530001C934052406E85059D0B404BE60B003CF2 +:10F540002F8DD8328002E8BCD42114977428580833 +:10F55000C0419518109CD822F01F000330088F1866 +:10F560008F28D82280032320D431FACD068850A9D1 +:10F57000169014971893580CC06078685808C031DA +:10F58000F01F004E4CE81030C0316600C0A84CD8C7 +:10F590001030C0316610C0584CB81030E7F000028F +:10F5A0008068EDB80003C04160485808C071009BF6 +:10F5B000069CF01F0046E0810B4080681099E2191C +:10F5C000001A58A9C3D18079300AF4091900C385FB +:10F5D000A1D8FB5805B86088FB4805CC60A8FB485B +:10F5E00005D4FAC8FFD4FB4805BCFB4805ACE0686D +:10F5F0000400FB4805C0FB4805B43008FB5905BAB8 +:10F600000E9A40A9FAC7FA54FB4805C4069C0E9B03 +:10F61000F01F002F506CC0950E9B069CF01F002D14 +:10F62000406EF9BE01FF506EFB0805B8EDB800064C +:10F63000E0810B058068A7A8A068E08F0B00300868 +:10F64000FAC4F9F85098FB480678409CFB480674C9 +:10F65000FB48067CFB48068050573FF8FB44067089 +:10F66000FB48052C506C1896069150204055C02838 +:10F670002FF50B88300B325AF60818005F19F40882 +:10F6800018005F181268F6081800CF314059EA09CF +:10F690000107C2E0FAF806780E088909FB480678E7 +:10F6A0008917FAF806742FF8FB4806745878E08931 +:10F6B00000132F84C1A8000080031F388003EF2CA3 +:10F6C0008003EF4C8003EF6C80031C388002F568E8 +:10F6D00080031D2CFACAF990402B029CF01F00A158 +:10F6E000E0810AA6FAC4F9F840680E0850680B8851 +:10F6F0003007EE081800E0800A8AEAC2FFFF3003F4 +:10F700005052FB6706873FFE50745043503E0690B0 +:10F71000508506920C944057C0683FFC0A97503CB5 +:10F72000C02830000F38C0281292E0480063E08003 +:10F7300001CCE0890045E0480039E0890026E04836 +:10F740000031E0840198E048002BE0800101E0896D +:10F75000000FE0480023E080008EE048002AE080AF +:10F76000008CE0480020E0810897C7B8E048002EF0 +:10F77000E08000F1E0480030E080017BE048002DAF +:10F78000E081088ACE28505750420897408540743F +:10F790001092E048004FE0800439E0890008E0481A +:10F7A0000044E081087DE08F01DEE0480055E08004 +:10F7B00005DFE0480058E0810873C428E048006F86 +:10F7C000C430E089001FE0480069C450E089000AA5 +:10F7D000E0480064C400E0480068E081085DC63984 +:10F7E000E048006CE0800163505750420897408524 +:10F7F00040741092E048006EE0810852E08F02ED04 +:10F80000E0480073E0800553E089000BE048007099 +:10F81000E08004F9E0480071E081083EC5295057B6 +:10F8200050420897408540741092E0480075E0808F +:10F8300005A0E0480078E0810833E08F06964CABE5 +:10F84000509BE08F06945057408508975042407473 +:10F85000E08F03DD50574085089750424074C83907 +:10F86000FB380687300AF4081800FE91FF5D320865 +:10F87000C6E8A1A3C58B0F89F2C800305898E08B69 +:10F88000001EEEC8FFFF300B2309F60B002BF20B16 +:10F89000001B1139F2CA0030589AFE98FFF7E04970 +:10F8A0000024FE91FF40E04B0020E08909C1201BAD +:10F8B000FAF90680123BC095C108FAF90680ECCA35 +:10F8C000FFFF1236C1F5C268FAC9F9781097F20B3A +:10F8D000003BF6F2FDA4C358FAC7F9841AD7109773 +:10F8E000FAC2FAD01AD2FAC8FBCC029C1AD8FAC8CB +:10F8F000F974FAC9FFCC40BAF01F001C2FDD780262 +:10F90000C208FACEF9781496FC040038F0F2FDA48F +:10F91000C18840A859F9E0890011F0CBFFFC50AB39 +:10F920007002FACCF978F8090038F142FDA42FF9F9 +:10F930001496FB490680C058700214962FC850A830 +:10F940005802FE94FEF15C32A3A3CEDAFB68068770 +:10F95000CEAA0F38E048002AC0A03009C7D800005E +:10F960008002F5488003EDD08002F2280F88F0C9AC +:10F9700000305899E08B001EEEC5FFFF300B2308C6 +:10F98000F60B002BF00B001B0B38F0C90030589918 +:10F99000FE98FFF7E0480024FE91FEC5E04B0020F2 +:10F9A000E0890946201BFAF80680103BC095C10883 +:10F9B000FAF90680ECCAFFFF1236C1F5C288FACA0E +:10F9C000F978F40B003BF6FBFDA4503BC3C8FAC921 +:10F9D000F9841AD9FAC8FAD01AD8FAC8FBCC029C12 +:10F9E0001AD8FAC8F974FAC9FFCC40BAF01F027AE3 +:10F9F0002FDD780C503CC278FACEF9780E95FC04D5 +:10FA000000381496F0F8FDA45038C1D840A859F930 +:10FA1000E0890014F0CBFFFC700850AB5038FACCF2 +:10FA2000F978403BF8090038F14BFDA42FF90E9509 +:10FA3000FB4906801496C07870090E952FC850397E +:10FA4000149650A840385808FE95FE690A97C6BA21 +:10FA5000F40B00190F38F209002BF0CA0030589A45 +:10FA6000FE98FFF83FFEF20E0C495039C5FAA7B3D5 +:10FA7000C5AA30092308F2090029F00900190F3836 +:10FA8000F0CA0030589AFE98FFF7E0480024FE9133 +:10FA9000FE4DE0490020E08908CBF2C4000130109F +:10FAA000FE9FFE42A7A3FE9FFE3F0F89F0091800AC +:10FAB000C0512FF7A5B3FE9FFE37A5A3FE9FFE34CE +:10FAC000A5B3FE9FFE3150575042089740854074C1 +:10FAD0000C99FAF806805800C1D01037C064FACCEF +:10FAE000F978F8070037C1D8FAC8F9841AD8FAC8E3 +:10FAF000FAD01AD8FAC8FBCC1AD8FAC8F974FAC9DD +:10FB0000FFCC0A9A0E9B029CF01F02332FDD19B81E +:10FB1000C2282FF61039C084FACBF978F6070037DF +:10FB2000EF38FDA7C18840A959F8E0890012F2CA50 +:10FB3000FFFC50AA7209FAC2F978E408003A2FF8DB +:10FB4000F549FDA4FB480680F1D9C008C04813B8A8 +:10FB50002FC950A9300EFB680648FB6E0687E08F60 +:10FB600006A7A5A30C92EDB30005C4D1FAF8068050 +:10FB70005800C1E01037C064FACCF978F8070037B4 +:10FB8000C1F8FAC8F9841AD8FAC8FAD00A9A1AD869 +:10FB9000FAC8FBCC1AD8FAC9FFCCFAC8F9740E9B84 +:10FBA000029CF01F020D2FDD781A7809C288ECC282 +:10FBB000FFFF1036C0A4FACBF978F6070037EEFA4B +:10FBC000FDA8EEF9FDA4C1B840A959F8E0890013D9 +:10FBD000F2CAFFF850AAFAC6F978721AEC08003B8C +:10FBE0007209F74AFDA8F749FDA42FF8FB480680E3 +:10FBF000C068F2C8FFF8721A50A87209049650093A +:10FC0000501ACD58EDB30004C441FAF806805800EC +:10FC1000C1D01037C064FACEF978FC070037C1E8CC +:10FC2000FAC8F9841AD8FAC8FAD00A9A1AD8FAC8BF +:10FC3000FBCC0E9B1AD8029CFAC8F974FAC9FFCC07 +:10FC4000F01F01E52FDD780AC218ECC2FFFF103665 +:10FC5000C084FACCF978F8070037EEFAFDA4C16841 +:10FC600040A959F8E0890010F2CAFFFC50AAFACB6B +:10FC7000F978720AF6080039F34AFDA42FF8FB4818 +:10FC80000680C048720A2FC950A90496501AC8D8D5 +:10FC9000EDB30006C481FAF806805800C1D01037D1 +:10FCA000C064FAC8F978F0070037C1E8FAC8F984E7 +:10FCB0001AD8FAC8FAD01AD8FAC8FBCC1AD8FAC897 +:10FCC000F974FAC9FFCC0A9A0E9B029CF01F01C27C +:10FCD0002FDD9818C238ECC2FFFF1036C084FAC678 +:10FCE000F978EC070037EF08FDA6C18840A959F85C +:10FCF000E0890012F2CAFFFC50AA7209FACEF97824 +:10FD0000FC08003A2FF8F549FDA4FB480680F1D91C +:10FD1000B010C04892182FC950A950180496BF5867 +:10FD20005008C458FAF806805800C1D01037C06493 +:10FD3000FACBF978F6070037C1E8FAC8F9841AD87F +:10FD4000FAC8FAD00A9A1AD8FAC8FBCC0E9B1AD86D +:10FD5000029CFAC8F974FAC9FFCCF01F019F2FDD8D +:10FD6000780AC218ECC2FFFF1036C084FACAF978CC +:10FD7000F4070037EEFAFDA4C16840A959F8E089FC +:10FD80000010F2CAFFFC50AAFAC6F978720AEC0811 +:10FD90000039F34AFDA42FF8FB480680C048720AD8 +:10FDA0002FC950A90496501ABF5A500AFAEA000007 +:10FDB000580A5C2BC0E43008FAEA00003009F00A67 +:10FDC000010AF20B014B32D8FAEB0000FB68068700 +:10FDD0003010E08F04E30C99EDB30005C471FAF81C +:10FDE00006805800C1D01037C064FACAF978F40709 +:10FDF0000037C1D8FAC8F9841AD8FAC8FAD00A9AD2 +:10FE00001AD8FAC8FBCC0E9B1AD8029CFAC8F9740F +:10FE1000FAC9FFCCF01F01702FDD780AC2082FF657 +:10FE20001039C084FAC9F978F2070037EEFAFDA458 +:10FE3000C16840A959F8E0890010F2CAFFFC50AA35 +:10FE4000FAC3F978720AE6080039F34AFDA42FF8DC +:10FE5000FB480680C048720A2FC950A94062049826 +:10FE60009512BF589508FE9FFC03EDB30004C441F2 +:10FE7000FAF806805800C1D01037C064FACEF9787D +:10FE8000FC070037C1D8FAC8F9841AD8FAC8FAD0E2 +:10FE90000A9A1AD8FAC8FBCC0E9B1AD8029CFAC848 +:10FEA000F974FAC9FFCCF01F014C2FDD780AC208A3 +:10FEB0002FF61039C084FACCF978F8070037EEFA3B +:10FEC000FDA4C16840A959F8E0890010F2CAFFFCFE +:10FED00050AAFACBF978720AF6080039F34AFDA461 +:10FEE0002FF8FB480680C048720A2FC950A9406904 +:10FEF0009509FE9FFBBDE2130040C440FAF806805E +:10FF00005800C1D01037C064FAC8F978F00700373C +:10FF1000C1D8FAC8F9841AD8FAC8FAD00A9A1AD8F5 +:10FF2000FAC8FBCC0E9B1AD8029CFAC8F974FAC91D +:10FF3000FFCCF01F01292FDD780AC2082FF61039F7 +:10FF4000C084FAC3F978E6070037EEFAFDA4C16869 +:10FF500040A959F8E0890010F2CAFFFC50AAFAC281 +:10FF6000F978720AE4080039F34AFDA42FF8FB4837 +:10FF70000680C048720A2FC950A9406EB40EFE9F79 +:10FF8000FB77FAF806805800C1D01037C064FACC6D +:10FF9000F978F8070037C1D8FAC8F9841AD8FAC82E +:10FFA000FAD00A9A1AD8FAC8FBCC0E9B1AD8029C2F +:10FFB000FAC8F974FAC9FFCCF01F01072FDD780ADF +:10FFC000C2082FF61039C084FACBF978F60700374B +:10FFD000EEFAFDA4C16840A959F8E0890010F2CA00 +:10FFE000FFFC50AAFAC3F978720AE6080039F34A0E +:10FFF000FDA42FF8FB480680C048720A2FC950A9FB +:02000004800377 +:1000000040629502FE9FFB34A5A30C99EDB3000559 +:10001000C571FAF806805800C2601037C0A4FACE45 +:10002000F978FC070037EEEAFDA4FAEB0000C1887E +:10003000FAC8F9841AD8FAC8FAD01AD8FAC8FBCC88 +:100040001AD8FAC8F974FAC9FFCC0A9A0E9B029C16 +:10005000F01F00E12FDDF8E80000FAE900003000B1 +:10006000E08F03992FF61039C0B4FAC8F978F00779 +:100070000037EEEAFDA4FAEB0000E08F038C40A904 +:1000800059F8E0890016F2CAFFF850AAF2EA000017 +:10009000FAEB0000FACAF978F4080039FAEA00002D +:1000A000F2EBFDA42FF8FB480680E08F0374F2EA20 +:1000B00000002F89FAEB000050A9E08F036CEDB32C +:1000C0000004C141FAF806805800C0801037C60409 +:1000D000FACAF978F4070037C7782FF61039C774D1 +:1000E000FAC9F978F2070037C6F8EDB30006C45133 +:1000F000FAF806805800C1D01037C064FACCF978FD +:10010000F8070037C1D8FAC8F9841AD8FAC8FAD063 +:100110001AD8FAC8FBCC1AD8FAC8F974FAC9FFCCB5 +:100120000A9A0E9B029CF01F00AC2FDD9818C22883 +:100130002FF61039C084FACBF978F6070037EF08AC +:10014000FDA6C18840A959F8E0890012F2CAFFFC57 +:1001500050AA7209FAC2F978E408003A2FF8F54972 +:10016000FDA4FB480680F1D9B010C04892182FC9F1 +:1001700050A95C785018C418FAF806805800C1D00D +:100180001037C064FACCF978F8070037C1D8FAC83C +:10019000F9841AD8FAC8FAD00A9A1AD8FAC8FBCC45 +:1001A0000E9B1AD8029CFAC8F974FAC9FFCCF01F4A +:1001B000008A2FDD780AC2082FF61039C084FACBE6 +:1001C000F978F6070037EEFAFDA4C16840A959F89E +:1001D000E0890010F2CAFFFC50AAFAC2F978720A4C +:1001E000E4080039F34AFDA42FF8FB480680C04814 +:1001F000720A2FC950A9501A300E500E1C90E08F71 +:1002000002CA505750420897408540740C99FAF83A +:1002100006805800C1D01037C064FACCF978F807CE +:100220000037C1D8FAC8F9841AD8FAC8FAD01AD84F +:10023000FAC8FBCC1AD8FAC9FFCCFAC8F9740A9AE2 +:100240000E9B029CF01F00642FDD7809C2182FF668 +:100250001039C084FACBF978F6070037EEF9FDA41F +:10026000C17840A959F8E0890010F2CAFFFC50AAF1 +:10027000FAC2F9787209E408003AF549FDA42FF8AA +:10028000FB480680C058F2C8FFFC50A8720933082A +:10029000300EFB6806844D1C37885019A1B3FB68EB +:1002A0000685500E509CE08F02755057300B50421F +:1002B000FB6B06870897408540740C99FAF8068016 +:1002C0005800C1D01037C064FACAF978F407003773 +:1002D000C1D8FAC8F9841AD8FAC8FAD01AD8FAC814 +:1002E000FBCC0E9B1AD80A9AFAC8F974FAC9FFCC4B +:1002F000029CF01F00392FDD7807C2082FF6103955 +:10030000C084FAC9F978F2070037EEF7FDA4C16896 +:1003100040A959F8E0890010F2CAFFFC50AA720700 +:10032000FAC2F978E4080039F347FDA42FF8FB4836 +:100330000680C04872072FC950A9403E580EC1051B +:100340001C9A300B0E9CF01F0026E08002B6F807C6 +:100350000105403C1835E08902B0E08F02AF0E9CE9 +:100360003000F01F00201895E08F02A9A5A30C997A +:10037000EDB30005C581FAF806805800C2001037B9 +:10038000C064FACBF978F6070037C208FAC8F984D6 +:100390001AD8FAC8FAD00A9A1AD80E9BFAC8FBCC17 +:1003A000029C1AD8FAC8F974FAC9FFCCF01F000AE7 +:1003B0002FDDF8EA0000FAEB0000C3282FF6103911 +:1003C000C124FACAF978F4070037EEE8FDA4FAE987 +:1003D0000000C2688002F2288003EDE4800328A4B4 +:1003E0008002EDD040A959F8E0890015F2CAFFF863 +:1003F00050AAF2EA0000FAEB0000FACAF978F40811 +:100400000039FAEA0000F2EBFDA42FF8FB48068061 +:10041000C078F2EA00002F89FAEB000050A93010F2 +:10042000E08F01B9EDB30004C141FAF8068058002D +:10043000C0801037C604FACAF978F4070037C778C5 +:100440002FF61039C774FAC9F978F2070037C6F8E1 +:10045000EDB30006C451FAF806805800C1D0103739 +:10046000C064FACCF978F8070037C1D8FAC8F98423 +:100470001AD8FAC8FAD01AD8FAC8FBCC1AD8FAC8CF +:10048000F974FAC9FFCC0A9A0E9B029CF01F0086F1 +:100490002FDD9818C2282FF61039C084FACBF978CE +:1004A000F6070037EF08FDA6C18840A959F8E08992 +:1004B0000012F2CAFFFC50AA7209FAC2F978E408E5 +:1004C000003A2FF8F549FDA4FB480680F1D9B01099 +:1004D000C04892182FC950A95C785018C418FAF86F +:1004E00006805800C1D01037C064FACCF978F807FC +:1004F0000037C1D8FAC8F9841AD8FAC8FAD00A9ACB +:100500001AD8FAC8FBCC0E9B1AD8029CFAC8F97408 +:10051000FAC9FFCCF01F00642FDD780AC2082FF65D +:100520001039C084FACBF978F6070037EEFAFDA44B +:10053000C16840A959F8E0890010F2CAFFFC50AA2E +:10054000FAC2F978720AE4080039F34AFDA42FF8D8 +:10055000FB480680C048720A2FC950A9501A300EB5 +:100560003010500EC1794D1C509CEDB30005C541B3 +:10057000FAF806805800C2201037C0A4FACBF978E8 +:10058000F6070037EEE8FDA4FAE90000CF28FAC824 +:10059000F9841AD8FAC8FAD00A9A1AD80E9BFAC85F +:1005A000FBCC029C1AD8FAC8F974FAC9FFCCF01F28 +:1005B000003E2FDDF8EA0000C0C8ECCAFFFF10368D +:1005C000C0B4FAC9F9781496F2070037EEEAFDA430 +:1005D000FAEB0000CCE840A959F8E0890016F2E6F1 +:1005E0000000F2CBFFF8FAE7000050ABFAC6F9784A +:1005F000EC080039FAE60000F2E7FDA42FF81496A3 +:10060000FB480680CB68F2E600002F89FAE700007D +:1006100050A91496CAE8EDB30004C161FAF8068047 +:100620005800C0801037C6A4FACEF978FC0700370E +:10063000C838ECCAFFFF1036E0840082FACCF978A3 +:10064000F8070037C788EDB30006C4D1FAF8068072 +:100650005800C1D01037C064FACCF978F8070037D9 +:10066000C1F8FAC8F9841AD8FAC8FAD01AD8FAC860 +:10067000FBCC1AD8FAC8F974FAC9FFCC0A9A0E9BB7 +:10068000029CF01F00092FDD9818C2A8ECCAFFFFDA +:100690001036C0D4FACBF9781496F6070037EF0875 +:1006A000FDA6C1E88002F2288003EDE440A959F8D4 +:1006B000E0890013F2CBFFFC50AB7209FAC6F9785F +:1006C000EC08003B2FF8F749FDA4FB480680149680 +:1006D000F1D9B010C058921814962FC950A95C785F +:1006E0005018C458FAF806805800C1D01037C064BA +:1006F000FACCF978F8070037C1F8FAC8F9841AD8A3 +:10070000FAC8FAD00E9B1AD8FAC8FBCC0A9A1AD8A3 +:10071000029CFAC8F974FAC9FFCCF01F00C42FDD9F +:10072000780BC248ECCAFFFF1036C094FACBF978B8 +:10073000F60700371496EEFBFDA4C18840A959F8CE +:10074000E0890011F2CBFFFC50ABFAC6F978720BCE +:10075000EC080039F34BFDA42FF81496FB480680F3 +:10076000C058720B14962FC950A9501B300E500E52 +:100770004008401C300B18485F18E7E80008F608EE +:100780001800C0703308FB620685A1B3FB680684BD +:100790003020300AFB6A068740395809C025A7D3A4 +:1007A0004038401758085F194008FAC5F9900E48BC +:1007B00030025F18F3E81008E4081800C5E03018AC +:1007C000F0001800C0603028F0001800C051C3E8E5 +:1007D0000A970690C2C80A97FAE80000F5D8C00345 +:1007E0002D0A0EFAF00B1603F20C1603F7E911DBD3 +:1007F0001899169858085C29CF21FAE90000EDB342 +:100800000000C4613309F20A1800C4200EF9C408BC +:10081000F01F008730A82D0A3009AE8AFAEA0000DE +:10082000F01F008416991498FAE90000EECC00013C +:1008300030A83009FAEA00001897589A5C2BFE9B02 +:10084000FFE91BF800932D08C2080A97FAE8000098 +:10085000F5D8C004409EFC0A070A0EFAF20B1604F3 +:10086000F00A1604F5E911CA1699149858085C297B +:10087000CF01FAE90000C0C85800C091EDB30000F4 +:10088000C061FAC7F9913308AE88C0280A970E15DF +:100890004030C14850425057407410925802E08096 +:1008A00001B6300CFB620648FB6C06873015300041 +:1008B000FAC7F9B8C03840353000069A0699E21AEE +:1008C0000002E2190084508A5079EA000C42FB3899 +:1008D0000687300BF6081800F7B201FF580AF7B286 +:1008E00001FE5809C4514048041850385808E0899E +:1008F000001DC3E8FB4C06784CFE310C890E891CA8 +:10090000FB4B0674587BE08900042F84C0B8FACAF8 +:10091000F990402B029CF01F0049E0810189FAC444 +:10092000F9F8403B210B503BFAF90678FAF80674C7 +:10093000F2CCFFF0F0CBFFFF4BFA403E590EFE9990 +:10094000FFDB1C09890AFB490678891EFB4B0674EC +:10095000587BE08900042F84C0B8FACAF990402B74 +:10096000029CF01F0036E0810163FAC4F9F8FB38FD +:100970000687300CF8081800C1F0FAF80678FAC9B2 +:10098000F9792FF88909FB4806783019FAF80674C6 +:1009900089192FF8FB4806745878E08900042F84E1 +:1009A000C0B8FACAF990402B029CF01F0024E081E5 +:1009B000013FFAC4F9F8408B580BC1F0FAF80678F9 +:1009C000FAC9F97C2FE88909FB4806783029FAF83A +:1009D000067489192FF8FB4806745878E0890004DA +:1009E0002F84C0B8FACAF990402B029CF01F001364 +:1009F000E081011EFAC4F9F8407AE04A0080C5118E +:100A00004049041950395809E0890029C4A848C848 +:100A1000310EFB4C06788908891EFB4B0674587B07 +:100A2000E08900102F84C1788002F228800373408F +:100A30008002D9988003EDF88002F5488003ECE845 +:100A4000FACAF990402B029CF01F0052E08100F09E +:100A5000FAC4F9F8403C210C503CFAF90678FAF84F +:100A60000674F2CCFFF0F0CBFFFF4CBA403E590EBB +:100A7000FE99FFCF1C09890AFB490678891EFB4BAA +:100A80000674587BE08900042F84C0B8FACAF99034 +:100A9000402B029CF01F003FE08100CAFAC4F9F825 +:100AA0000A105800E089001BC3B8FB4C0678310AD5 +:100AB0004B9C891A890CFB4B0674587BE089000417 +:100AC0002F84C0B8FACAF990402B029CF01F003165 +:100AD000E08100AEFAC4F9F82100FAF90678FAF8D4 +:100AE0000674F2CCFFF0F0CBFFFF4ABA5900FE9932 +:100AF000FFDE0009890AFB4906788910FB4B067462 +:100B0000587BE08900042F84C0B8FACAF990402BC2 +:100B1000029CF01F0020E081008BFAC4F9F8FAF87B +:100B2000067889158907F0050005FAF80674FB4573 +:100B300006782FF8FB4806745878E08900042F8463 +:100B4000C0A8FACAF990402B029CF01F0012C6F10F +:100B5000FAC4F9F8E2130004C41040470417580718 +:100B6000E089001CC3B8FB4C067889058913FB4B50 +:100B70000674587BE08900042F84C098009A402BAB +:100B8000029CF01F0004C531FAC4F9F82107C0988F +:100B90008002F5488003ECE84AB53103FAC0F990C9 +:100BA000FAF90678FAF80674F2CCFFF0F0CBFFFF02 +:100BB0004A5A5907FE99FFD90E09890A8917FB4934 +:100BC0000678FB4B0674587BE08A0009FACAF99054 +:100BD000402B029CF01F001DC2A140684049E4095F +:100BE0000C4204085068FAF806785808C080FACA1F +:100BF000F990402B029CF01F0015C1913003FAC4FC +:100C0000F9F8FB430674FE9FF53302934020FAF88F +:100C100006785808C080029CFACAF990009BF01F21 +:100C2000000BC0613008FB480674C0284020806873 +:100C3000EDB80006C0313FF25062406CFE3DF978DD +:100C4000D83200008003EDF88002F548D431FACDA7 +:100C500001E03007503C16961295507A5087505755 +:100C60000E930E905047407E1D8957795809E080B9 +:100C700007A22FFE4D5C507E780C502CF809070817 +:100C8000E2180008C1B06C185808E08900070C9BF6 +:100C9000403CF01F004FCE816C084CCBF0C9FFFFE9 +:100CA000760A1188F4080708EDB80003CDD16C1856 +:100CB0008D0920182FF08D18CE7BE0490025E081AA +:100CC000008906941091109236CA344C358E407BC0 +:100CD0001739507B364BF6091800E08000BBE08BDB +:100CE0000042F8091800E08000B4E08B0021339B3B +:100CF000F6091800E08B01D2330BF6091800E082E8 +:100D00000094325BF6091800C640E08B000B5809CE +:100D1000E080074F324BF6091800E08101BFC8A8F8 +:100D200032ABF6091800E08101B9C6D8FC091800F9 +:100D3000E08000A4E08B000C34CBF6091800C7005B +:100D400034FAF4091800E08101A9C8C835BAF409D9 +:100D50001800E0800098363AF4091800E081019EFE +:100D6000C9E836FBF6091800C7E0E08B0017369B90 +:100D7000F6091800C720E08B0008368BF60918002A +:100D8000E081018CC4F8F4091800C3F036EAF409D4 +:100D90001800E0810183C8D8373AF4091800C1303F +:100DA000E08B0008370AF4091800E0810177C7A832 +:100DB000375AF4091800C5C0378AF4091800E081D1 +:100DC000016DC5B83029C7590000049C800328BCB8 +:100DD0006C185808E08900080C9B403CF01F006428 +:100DE000E08106E0407A6C08F539FFFF118AF20ACB +:100DF0001800E08106E02FF82FF08D086C182018FD +:100E00008D18C32BA5A1C64B407B1789F409180088 +:100E1000C0512FFBA1B1507BC5BBA1A1C59BA1B106 +:100E2000C57BA3A1C55BE4020022A17223021202CA +:100E3000C4FBE0420020E08B0007E4C4000130184E +:100E40003002C46B3168403A9538E08F06ABA1A1FF +:100E50004C8930AE5089C2B84C6C300B508C505B12 +:100E6000C279A1A14C4A3089508A5059C2194C2EDE +:100E700030AC508E505CC1C94BFBA9B1508B310ACC +:100E8000C169301950085019407BFACCFFD4F01FCB +:100E9000003BA7A1507C40194008C0B9A7A1300968 +:100EA000C0894B59E81102205089310E505EC009AB +:100EB000EDB10004FE90FED9EDB10002C441580826 +:100EC000C2500E34C064FACCFE20F8040024C2786C +:100ED000FACAFED40A99F407002A0E98130B14AB31 +:100EE0002FF81034CFC4EEC9FFFFEE0811FFF0C792 +:100EF000FFFF2FE808080807EA080025F2070007A7 +:100F0000FAC8FED4F0040324C1C8E6C8FFFF0E33BC +:100F1000C094FACBFE201093F6040024E8F4FF4CB2 +:100F2000C1086A042FC559F7E089000B1093FACA6B +:100F3000FE20F40700282FF7F144FF4CC02810933F +:100F4000A800C92AEDB10000C1A15808E0800088BE +:100F50000E34C635FACAFED40A99F407002A0E9850 +:100F6000130B14AB2FF81034CFC4C678800328BC01 +:100F70008002EFB480032E6C800329ECE2110002A2 +:100F8000C4805808C2500E34C064FACCFE20F80465 +:100F90000024C278FACAFED40A99F407002A0E98EF +:100FA000130B14AB2FF81034CFC4EEC9FFFFEE08BB +:100FB00011FFF0C7FFFF2FE808080807EA0800251F +:100FC000F2070007FAC8FED4F0040324C1C8E6C83B +:100FD000FFFF0E33C094FACBFE201093F6040024DA +:100FE000E8F4FF4CC1086A042FC559F7E089000BEB +:100FF0001093FACAFE20F40700282FF7F144FF4CA3 +:10100000C0281093E008141F89108908FE9FFE2D48 +:101010005808C2500E34C064FAC9FE20F2040024FD +:10102000C278FACAFED40A99F407002A0E98130B64 +:1010300014AB2FF81034CFC4EEC9FFFFEE0811FF38 +:10104000F0C7FFFF2FE808080807EA080025F207A5 +:101050000007FAC8FED4F0040324C1C8E6C8FFFFA5 +:101060000E33C094FAC2FE201093E4040024E8F486 +:10107000FF4CC1086A042FC559F7E089000B109393 +:10108000FACEFE20FC0700282FF7F144FF4CC028C1 +:1010900010938900FE9FFDE9402CF8090709EDB97E +:1010A0000000C021A1A14C7B30AA508B505A30398E +:1010B0006C1A580AE089000C501950080C9B403CEF +:1010C000F01F004140194008E081056CEDB10006B9 +:1010D000C151C1F86C1A201A8D1A580AE08A00040E +:1010E0008D0CC0B8501950080C9B403CF01F0036C6 +:1010F00040194008E08105562FF06C0A4B3EF4CCB5 +:10110000FFFF7C0B158AF60A070AEDBA0003CE3002 +:101110005829E08001C05839E080031D5819E0804B +:10112000011B029CE21C0010502C5802F9B2000175 +:10113000E3D1C001E080009B580CC0303001C4985E +:101140005808C2500E34C064FACBFE20F6040024C6 +:10115000C278FACAFED40A99F407002A0E98130B33 +:1011600014AB2FF81034CFC4EEC9FFFFEE0811FF07 +:10117000F0C7FFFF2FE808080807EA080025F20774 +:101180000007FAC8FED4F0040324C228E6C8FFFF13 +:101190000E33C094FACAFE201093F4040024E8F43D +:1011A000FF4CC1686A042FC559F7E08900111093FC +:1011B000FAC9FE20F20700282FF7F144FF4CC0883F +:1011C0008002EFB4800328BC0000049C10930891B7 +:1011D00030044D5E7C081034E08004E46C08118912 +:1011E000FAC8FE200808F169FFCC6C1820188D1889 +:1011F0006C082FF8308A8D08300BFACCFE2CF01FCB +:10120000004B2FF4FAC8FE2C0899FACAFE54029B30 +:10121000403CF01F00475BFCE08004C4580CC061F8 +:10122000402C580CC051830CC0385BECC0B0080097 +:10123000402B2012580BF9B40100F7B100FCFBF46D +:1012400000026C185808E089000B0C9B403CF01F12 +:101250000039C0505804C050E08F04A45802CBA1FC +:10126000402A580AFE91FD01C718402E580EC1A011 +:101270006C186C090438C0F4100910128D091001A3 +:101280000C9B403CF01F002BCF405801E08101E651 +:10129000E08F0488040904188D098D180401E08F7B +:1012A00001DD5808C2500E34C064FACCFE20F804A8 +:1012B0000024C278FACAFED40A99F407002A0E98CC +:1012C000130B14AB2FF81034CFC4EEC9FFFFEE0898 +:1012D00011FFF0C7FFFF2FE808080807EA080025FC +:1012E000F2070007FAC8FED4F0040324C258E6C887 +:1012F000FFFF0E33C094FACBFE201093F6040024B7 +:10130000E8F4FF4CC1986A042FC559F7E08900142E +:101310001093FACAFE20F40700282FF7F144FF4C7F +:10132000C0B80000000009AC8002E8BC800328407F +:10133000800328BC1093049A089C0C99301BF01F62 +:1013400000C9E080042FF800000040492FF95049FF +:10135000FE9FFC8B5802F9B200FFEDB10004C261A0 +:1013600030040891C1286C188D0920188D182FF4AD +:101370000832E080008D5808E08900080C9B403C52 +:10138000F01F00B9E08100846C08FACEFE20F0C99D +:10139000FFFF1188FC080008F138FE4CE208180035 +:1013A000CE315804C741E08F04065808C2500E34AD +:1013B000C064FACCFE20F8040024C278FACAFED435 +:1013C0000A99F407002A0E98130B14AB2FF8103467 +:1013D000CFC4EEC9FFFFEE0811FFF0C7FFFF2FE8F3 +:1013E00008080807EA080025F2070007FAC8FED433 +:1013F000F0040324C1C8E6C8FFFF0E33C094FACB43 +:10140000FE201093F6040024E8F4FF4CC1086A049F +:101410002FC559F7E089000B1093FACAFE20F40794 +:1014200000282FF7F144FF4CC02810930891300892 +:10143000C1886C1A201A8D1A133A02CA8D095802F3 +:10144000C1D06C195809E089000D50080C9B403C34 +:10145000F01F00854008C0500831C101E08F03A291 +:101460006C0AFACEFE2014992012158AFC0A000A92 +:10147000F53AFE4CF00A1800CDD1E2040104E080F8 +:10148000039A404C2FFC504C3008A2880800FE9F65 +:10149000FBEC029BE21B0010502B5802F9B200FF3C +:1014A000E3D1C001E08000BC580BC050FACAFE2452 +:1014B000506AC4385808C2500E34C064FAC9FE20BD +:1014C000F2040024C278FACAFED40A99F407002A6A +:1014D0000E98130B14AB2FF81034CFC4EEC9FFFFD6 +:1014E000EE0811FFF0C7FFFF2FE808080807EA0819 +:1014F0000025F2070007FAC8FED4F0040324C1C88F +:10150000E6C8FFFF0E33C094FACEFE201093FC0411 +:101510000024E8F4FF4CC1086A042FC559F7E0899C +:10152000000B1093FACCFE20F80700282FF7F144A7 +:10153000FF4CC0281093506430014CC4C598680813 +:101540001031E080032FFAC8FE200208F169FFCCB9 +:101550006C1820188D186C082FF8308A8D08300B05 +:10156000FACCFE2CF01F00422FF1FAC8FE2C029993 +:10157000FACAFE54406B403CF01F003E5BFCE0802A +:101580000311580CC041406B970CC0385BECC23063 +:10159000406A740CF01F0038C100FAC4FE20020437 +:1015A0002354C088098B201120140C9A403CF01F52 +:1015B00000335801CF81C2C80200402920125809C7 +:1015C000F8011710FBF80006F7B800FCFBF80A0654 +:1015D000FBF100026C185808E089000B0C9B403CA2 +:1015E000F01F0021C0505801E08102DCC1186C08D6 +:1015F00058025F1A11894A2E300C7C08F00907083E +:10160000EC180008F5E80238F8081800C991402BDA +:10161000580BFE91FB2A406A950BC98A402E580E42 +:10162000C300C1086C188D0A20188D182FF10232E2 +:10163000C1405808E08900070C9B403CF01F000A9D +:10164000C0C16C0848ECF0CAFFFF78091188F208A5 +:101650000708EDB80003CE710200FE9FFB060000F4 +:10166000800320B8800328BC000009AC8002E8BCDD +:10167000800328408003274880032FF40000049C47 +:101680005808C2500E34C064FACBFE20F604002481 +:10169000C278FACAFED40A99F407002A0E98130BEE +:1016A00014AB2FF81034CFC4EEC9FFFFEE0811FFC2 +:1016B000F0C7FFFF2FE808080807EA080025F2072F +:1016C0000007FAC8FED4F0040324C1C8E6C8FFFF2F +:1016D0000E33C094FACAFE201093F4040024E8F4F8 +:1016E000FF4CC1086A042FC559F7E089000B10931D +:1016F000FAC9FE20F20700282FF7F144FF4CC0285A +:1017000010930891C1286C1920198D19113902C93B +:101710008D085802C1506C185808E08900070C9BCE +:10172000403CF01F0059C0C16C094D8E12987C0AD4 +:1017300013892012F4090709EDB90003CE51404C7A +:101740002FFC504C08103008E2000000A288FE9FD9 +:10175000FA8CE4C90001E0490026E08B0005300B5B +:10176000506BC058E4CA00273272506A3009FACE72 +:10177000FE54509950A7E8110D80502E35894057DE +:101780006C0A339C158AF80A1800E08B0015338B1D +:10179000F60A1800C4E2330BF60A1800C270E08B98 +:1017A000004532BBF60A1800C51032DBF60A1800F5 +:1017B000C7C1C4C8F20A1800C4E0E08B000AF4CB29 +:1017C0000041305EFC0B1800E08B0070C398361CA3 +:1017D000F80A1800C6A3366BF60A1800E088003134 +:1017E000378EFC0A1800C611C368029BEDB1000BCE +:1017F000C3C15807E06B0200E3DBE031F9B7000832 +:10180000EDB1000AC041E011FA7FC2F8409B406C84 +:101810002FFB580CF7BC0101FBFC1A06F7B201FFC5 +:10182000E011FC7F509BC248499EFC070417C0B8DA +:10183000497CF80704175887E0890006C36858A751 +:10184000E08A0034E011F47FC108EDB10007C2D195 +:10185000A7D1C0B8029BE21B0600E04B0200C251B8 +:10186000A9D13107E8110500402B16CA502B6C1A7C +:10187000201A8D1A580AE08A000D6C0A2FFA8D0A78 +:10188000C1180000800328BC0000049C8003EF08FE +:10189000501950080C9B403CF01F00BD40194008F7 +:1018A000C0412012FE91FF6E505740A7EDB10008D5 +:1018B000C161FAC9FE54402A123AE088000B40295F +:1018C0000C9A137B403C50085029F01F00B240088E +:1018D000FAC9FE5440221232E080016D029AE21AE7 +:1018E0000010E081014B402EBC8A50084059FACBD1 +:1018F000FE54403C40825D1202994008E2190020EB +:10190000C2A05808C1400E34C064FACEFE20FC04C8 +:101910000024C1D9FACAFED40A99F407002A0E9805 +:10192000130B14AB2FF81034CFC4CF68E6C8FFFFF9 +:101930000E33C064FACBFE20F6040024C0796A049A +:101940002FC559F7E08901151093FACAFE20F40754 +:101950000028C0A9EDB10002C4415808C2500E349D +:10196000C064FAC9FE20F2040024C278FACAFED488 +:101970000A99F407002A0E98130B14AB2FF81034B1 +:10198000CFC4EEC9FFFFEE0811FFF0C7FFFF2FE83D +:1019900008080807EA080025F2070007FAC8FED47D +:1019A000F0040324C1C8E6C8FFFF0E33C094FAC296 +:1019B000FE201093E4040024E8F4FF4CC1086A04FC +:1019C0002FC559F7E089000B1093FACEFE20FC07D3 +:1019D00000282FF7F144FF4CC0281093A80CCCA886 +:1019E000F5D1C001C2A05808C1400E34C064FACB82 +:1019F000FE20F6040024CAB8FACAFED40A99F407F5 +:101A0000002A0E98130B14AB2FF81034CFC4C8481B +:101A1000E6C8FFFF0E33C064FACAFE20F4040024B7 +:101A2000C9586A042FC559F7E08900A31093FAC971 +:101A3000FE20F2070028C988E2110002C5904D6916 +:101A400040821232C091FACBFE544059403C5008BB +:101A5000F01F0052C088FACBFE544059403C500859 +:101A6000F01F004F40085808C2500E34C064FACE30 +:101A7000FE20FC040024C278FACCFED40A99F807B0 +:101A8000002C0E98130E18AE2FF81034CFC4EEC9E8 +:101A9000FFFFEE0811FFF0C7FFFF2FE80808080757 +:101AA000EA080025F2070007FAC8FED4F004032470 +:101AB000C1C8E6C8FFFF0E33C094FACCFE201093D5 +:101AC000F8040024E8F4FF4CC1086A042FC559F754 +:101AD000E089000B1093FAC9FE20F20700282FF7C7 +:101AE000F144FF4CC0281093891A890BC438580858 +:101AF000C2500E34C064FAC8FE20F0040024C2783C +:101B0000FACAFED40A99F407002A0E98130B14ABF4 +:101B10002FF81034CFC4EEC9FFFFEE0811FFF0C755 +:101B2000FFFF2FE808080807EA080025F20700076A +:101B3000FAC8FED4F0040324C1C8E6C8FFFF0E3380 +:101B4000C094FAC2FE20E40400241093E8F4FF4C91 +:101B5000C1086A042FC559F7E089000B1093FACE2B +:101B6000FE20FC070028F144FF4C2FF7C0281093FB +:101B7000890C404C2FFC504CFAC8FE54409B10106E +:101B8000402A1600F4000000FE9FF86F800328BC76 +:101B900080032FF480032E6C80032CE480032B340D +:101BA00040495809C0508C68EDB80006C0313FF874 +:101BB0005048404C288DD832D421217D1497189656 +:101BC000129A5807C064E068008B99383FFCC2281D +:101BD0005807EE0C1700F9B901FFEFD9E10C109985 +:101BE000E0680208BA683FF8504B505C500B502C2C +:101BF000BA781A9B0C9CF01F00095BFCC044E0689B +:101C0000008B8D385807F9B90100FBF81000F1F985 +:101C10001E002E9DD82200008002F568D401129883 +:101C20001499169A189B483C780CF01F0003D802B0 +:101C30000000059880031BB8D4214B3818961697DE +:101C4000700C580CC06078685808C031F01F002F25 +:101C50004AF81037C0514AC870087007C0E84AD81F +:101C60001037C0514A8870087017C0784AA81037DA +:101C7000C0414A58700870278E68EDB80003C1E073 +:101C8000EDB80004C3E1EDB80002C1516EDB580BA2 +:101C9000C0A0EEC8FFBC103BC0400C9CF01F001F52 +:101CA00030088FD88E68E018FFDBAE6830088F18D8 +:101CB0006E488F088E68A3B8AE686E485808C0B1E9 +:101CC0008E68E2180280E0480200C0500C9C0E9B17 +:101CD000F01F00138E69F1D9C001C07030088F2841 +:101CE0006E585C388F68C068EDB90001EFF81005D8 +:101CF0008F286E485808C0618E68EDB80007C02173 +:101D0000DC2AD82A0000059880031F388003EF2CB6 +:101D10008003EF4C8003EF6C8003217C8003276CF1 +:101D20004828700C2F4C5EFC00000598D4211697B3 +:101D3000189676485808C7D0580CC060786858087C +:101D4000C031F01F003D4BD81037C0316C07C0A820 +:101D50004BB81037C0316C17C0584BA81037EDF78F +:101D600000028E6A1498EDBA0003C420ABBAAE6AC2 +:101D70006E185808E08900066F085808E08A005A73 +:101D80006EB85808C560E21A1000C0306F55C0F830 +:101D900030196E8B0C9C5D1818955BFCC0816C38FB +:101DA00059D8C4708E68A7A8AE68D8228E68EDB8DE +:101DB0000002C0916E1810156ED85808EFF8101078 +:101DC000EBD8E1156EB80C9C30090A9A6E8B5D1841 +:101DD0008E680A3CC261ABD8300C6E49AE688F1C6D +:101DE0008F09EDB8000CC251EF450054D8226E4562 +:101DF0005805C1F06E04F5DAC0028F05F9B801008C +:101E0000EFF800050A148F28C11808990A9A6EA8DD +:101E10006E8B0C9C5D181814580CE08900078E68B6 +:101E2000A7A83FFCAE68D82218055804FE99FFEF1A +:101E3000D82A000080031F388003EF2C8003EF4C6A +:101E40008003EF6CD401189B580CC0714868487B24 +:101E5000700CF01F0007D8024868700CF01F0003D8 +:101E6000D80200008003ECA880031D2C800325E825 +:101E7000000005985EFC5EFCD401483BF01F0003A7 +:101E8000D80200008003629080032640D42116957A +:101E9000F606105CECCBFFF4F01F00071897C0901B +:101EA0009915300B2F4C0C9A8F2C8F0BF01F0003C1 +:101EB0000E9CD8228002E2BC8002E8BCD42149C832 +:101EC000189670076E685808C0410E9CF01F0019E4 +:101ED000EEC7FF2830056E2C6E18C0689869EA09B5 +:101EE0001900C1202A4C2018CFA76E085808C071CD +:101EF000304B0C9CF01F00108F0CC0306E07CECB07 +:101F000030C88D38D8223008F948004C99089928F3 +:101F1000991899489958996899D899E8F9480048C2 +:101F20003FF8B8783018B868D82200008003ECA8D1 +:101F300080031F3880031E8CD421189678675807B9 +:101F4000C4714A48301599A8F94700D8F94700DC10 +:101F5000F94700E09965F01F00208D0C0C9CF01FE4 +:101F6000001E8D1C0C9CF01F001C6C093048930750 +:101F7000B268931793276C18B27793479357936778 +:101F80009389910791179127494E495B939E93AB93 +:101F9000494A495493BA93C43099B069B07591C411 +:101FA0009147915791679188919E91AB91BA8D2CF1 +:101FB00031289907B868991799273028B87899C4B3 +:101FC0009967999E99AB99BA99479957998CD82254 +:101FD00080031E7880031EBC80032B1080032AD848 +:101FE00080032AAC80032A9CD4014858169AFAC967 +:101FF000FFFC189B700CF01F0003D802000005982E +:1020000080033424D43114901291169310971895AC +:10201000F20A02425802C0310491C418580CC06040 +:1020200078685808C031F01F001F49F81037C031D8 +:102030006A07C0A849D81037C0316A17C05849C8C4 +:102040001037EBF700026E185808C03430088F18AC +:102050000496C148F01F00176E08080308160E9B6F +:10206000F00400040A9C8F04F01F0013C070E40603 +:102070000109F2000D081091C1286E146E08069C2B +:10208000089A109B0836FE9BFFE70C9AF01F000988 +:102090006E080C088F086E180C188F18029CD83226 +:1020A00080031F388003EF2C8003EF4C8003EF6C1C +:1020B0008002E736800328BCD40112981499169A3E +:1020C000189B483C780CF01F0003D80200000598CC +:1020D00080032004D42116951897F01F00234A345A +:1020E00068287016E016FFFCECC8FF91F0050105AA +:1020F000E015FF80EAC50080E045007FE08A00230C +:10210000300B0E9CF01F001A68280C08103CC1A16F +:10211000EA0B11000E9CF01F00165BFCC171300B26 +:102120000E9CF01F00136828F808010958F9E08A8E +:10213000000AA1A9911948F8700948F8F80901099D +:1021400091090E9CF01F000DD82A68280A16A1A636 +:102150009116489870090A190E9C9109F01F000702 +:10216000DA2A00008002E8CA0000059C8002EBC861 +:10217000000009A800007AD08002E8CCD42116968D +:102180001897580BE08000CAF01F004E20864CEADA +:102190006C18742EF9D8C001A1C8EC080009721B94 +:1021A000E01BFFFC1C39C1D1F6080008580CC081A7 +:1021B0006C09121612086C3B6C299729933B1099F5 +:1021C0009526A1A98D194C1972091238C0634C08C3 +:1021D0000E9C700BF01F003F0E9CF01F003FD8229A +:1021E000931B580CC030300CC1086C0EF4C5FFF8BE +:1021F0001C161C086C2E0A3EF9BC0001EDF51003FC +:10220000EBFE1A02FDF51A03F20B000E7C1EEDBE6A +:102210000000C1301608580CC0C14ABE722B2F8E68 +:102220001C3BC071973697268D2B8D3B301CC058B8 +:10223000722B7239932B97391099EC080908A1A9D0 +:102240008D19580CC671E04801FFE08B0013A3986C +:10225000F4080039722B8D398D2B97369326A348BD +:102260007419301BF6080948F3E810089518C528BA +:10227000F00916095849E08B0006F00B16062C8B66 +:10228000C2D85949E08B0005F2CBFFA5C278E049DE +:102290000054E08B0006F00B160C292BC1F8E04926 +:1022A0000154E08B0006F00B160F289BC178F00B51 +:1022B0001612E0490554E088001137EBC0F8000021 +:1022C0008002E8CA0000059C000009A400007ACC46 +:1022D000800320D48002E8CC284BF40B003C782902 +:1022E0001839C0E17418A34B301CF80B094BF1EB03 +:1022F000100B1298951BC0A872291839C060721A69 +:10230000E01AFFFC1438CF9372388D388D2993363C +:1023100091260E9CF01F0002D82200008002E8CC1B +:10232000D431203D14941895169774285808E080ED +:10233000014A9668EDB80003C04176485808C0C10C +:102340000E9B0A9CF01F00A1C0708E68A7A8AE6803 +:1023500030988B38C3598E6368000696E2160002E7 +:10236000C2103003E06204000696C04860036016A5 +:102370002F805806CFC0E0460400EC091780E4091E +:1023800017B0069A6EA86E8B0A9C5D181816580C2A +:10239000E08A0114682818188928E08001141803BD +:1023A000CE9BE7D3C001C07050060C930C91501522 +:1023B0000892CA0806960891C048600360162F80EC +:1023C0005806CFC08E686E241099E2190200C570BD +:1023D0000836C4531099E2190480C4106E4B6E097C +:1023E000161950096E59109CF209001A3028F40889 +:1023F0000C08FAE9000410944009E21C04002FF9CB +:102400000C091238F2041730580CC110089B0A9CB2 +:10241000F01F006F1892C150400A6E4BF01F006D04 +:102420008E68E018FB7FA7B8AE68C0E8089A0A9CDF +:10243000F01F00691892C0816E4B0A9CF01F006764 +:1024400030C88B38CBA8400A4009E80A010AE409E1 +:1024500000088F548F2A8F088F420C940836EC04A2 +:102460001730069B089A6E0CF01F005D6E08080876 +:102470008F086E2808180C948F28C30808365FBA96 +:102480006E0C6E48103C5FB8F5E80008F2081800C2 +:10249000C0E0069B089AF01F00526E0808080E9BC9 +:1024A0008F080A9CF01F004FC190C8786E591236F1 +:1024B000C0A36EA8069A6E8B0A9C5D181894E089DA +:1024C000000EC7B80C9A069BF01F00456E080C085A +:1024D0000C948F086E280C188F28622808188328FF +:1024E000C71008160803C6DB6003601130082F8090 +:1024F00050085801CFA0400A580AC181029A30AB57 +:10250000069CF01F0039F9B80101F9D8E106EDD3B6 +:10251000E116F9B90101FBF91A00F9B80001E3D895 +:10252000E006F9B80001FBF80A000236EC04178057 +:10253000E20417B06E596E25F20500050A345F9A61 +:102540006E0C6E48103C5FB8F5E80008300AF408DD +:102550001800C0E0069B0A9AF01F00216E080A08C6 +:102560000E9B8F08401CF01F001FC180C2681234F0 +:10257000C0A56EA8069A6E8B401C5D181895E08960 +:10258000000EC1B8089A069BF01F00156E080808D7 +:1025900008958F086E2808188F280A16C0710E9BA0 +:1025A000401CF01F0010C091500664280A188528AE +:1025B000C0900A110A03C9EB8E68A7A8AE683FFC59 +:1025C000C028300C2FDDD83280031C388002E2BCDA +:1025D0008002E7368002E8E88003217C8002E87E02 +:1025E00080031D2C800328A4D43130051893169045 +:1025F0000A91F01F00123FF2E6C7FF28C1786E264D +:102600006E142F46C0D88C08E2081900C0808C18C0 +:10261000E4081900C040069C5D1018452A462014A5 +:10262000ECCB000C5804CF046E075807CE91F01F76 +:1026300000040A9CD832000080031E7480031E76BA +:10264000D43130051691F8C7FF280A92F01F001008 +:102650003FF3C1686E266E142F46C0C88C08E4088C +:102660001900C0708C18E6081900C0305D111845BB +:102670002A462014ECCC000C5804CF146E075807DF +:10268000CEA1F01F00040A9CD832000080031E7403 +:1026900080031E76D401201D4848189B1A9A700C9E +:1026A000F01F00032FFDD80200000598800326B01C +:1026B000D431169414921895F01F00204A08700720 +:1026C0005807C050300633DA0C98C0780A9CF01FC7 +:1026D000001D0E9CD8322FF6E8060709F0091800F5 +:1026E0005F1BF40918005F191669F0091800CF4143 +:1026F000C1A8029C0C9A089BF01F0013C1216E0117 +:102700000C010388E6081800C0C148D870080A9C6C +:102710001017A3478507F01F000BE2CCFFFFD8324C +:102720002FC7C02833D36E015801CE410A9CF01F39 +:102730000005029CD8320000800361BC000009B093 +:10274000800361BE8002EDE6E04C00FFE0880003FC +:102750005EFD48487008F00C070CE21C00085EFCA7 +:102760000000049C481C5EFC8003EF8CD42120FDFB +:10277000966816971896E2180002C3C1967BF00B74 +:102780001900C0551A9AF01F002AC0F48E650A98E5 +:10279000ABB8E2150080AE683004E0680400F9B51B +:1027A0000140F0051700C1B84018E218F000E048F9 +:1027B00020005F04E0488000C0D16EB949D81039CC +:1027C000C0918E68E0650400ABA8EF450050AE688C +:1027D000C0688E68E0650400ABB8AE680A9B0C9CCC +:1027E000F01F00158E68C0D1EDB80009C1E0A1B896 +:1027F000AE68EEC8FFB98F488F0830188F58C1589F +:10280000A7B88F4CAE688F5548C88F0C8DA8580458 +:10281000C0C08E7CF01F000AEFF81206F9B9010162 +:10282000F1D9E138EFF81C062F1DD822800362A8E9 +:1028300080032AAC8002E2BC80031E788002F1682B +:10284000D42118971096580AC041149B3019486A31 +:10285000F01F00065BFCC06130088D08E068008A4C +:102860008F38D82280037E208003286C201D5809D1 +:102870005F09580BFA0B1700580A5F18F3E80008B5 +:102880003009F2081800C0303FECC0B8580AC03117 +:10289000149CC078158997091589F00918005F1CE8 +:1028A0002FFD5EFCF7DBC008C068201A19881638B7 +:1028B0005E0C2FFC580ACFA15EFAD703D4211697DD +:1028C0001896580CC06078685808C031F01F00385E +:1028D0004B881037C0316C07C0A84B781037C03117 +:1028E0006C17C0584B581037EDF7000230088F189E +:1028F0008E68EDB80005C590EDB80002C1A0EDB836 +:102900000004C060A7A8AE6830988D38C4D8EDB870 +:102910000003C0B10E9B0C9CF01F0029C4618E689F +:102920008F6CA3D88F2CAE688E68A3A8AE68C14800 +:102930006EDB580BC110EEC8FFBC103BC0400C9CB6 +:10294000F01F0020300C6F088FDC8F185808C04033 +:102950006EF88F08D8226E485808C0510E9B0C9C08 +:10296000F01F00198E68F1D8C002C0604978498B09 +:10297000700CF01F00186E4A6E980C9C8F0A6E59EE +:102980006E8B5D188E688F1CADD8AE68580CE08ACF +:102990000003D82A580CC041A5B8AE68C058A7A8F3 +:1029A000AE6830088F18DC2ADC2A000080031F384C +:1029B0008003EF2C8003EF4C8003EF6C80031D2C11 +:1029C0008003217C8003276C8003ECA8800329D43A +:1029D00080032640D4019868E21800095898C02066 +:1029E000D80AF01F0002D80280031E44D431189E7A +:1029F0001738E048005EC030300AC0381738301A47 +:102A00003009FC090B0A2FF9E0490100CFB1580841 +:102A1000C041F6CC0001D832149632D4EC16000135 +:102A2000300735D5C0381498129BFC080B06F6C940 +:102A3000FFFF178A129CE80A1800C090EA0A1800E3 +:102A4000C1E0EE0A1800CF01169CD832138C103C5E +:102A50005F53E04C005D5F0AE7EA100AEE0A1800D7 +:102A6000C03032D8CE2BF0CAFFFFFC0A000A14C6D1 +:102A70002FF81838CFD52FEB2FE9CDCBD8321498BB +:102A8000F5DBC01FF00C1100104CFC187FF0F5ECCA +:102A900013FCF00C010CBF9C5EFCD703D401967BA9 +:102AA000F01F0002D8020000800353E0D4211697E3 +:102AB000967BF01F00098E681099ADC95BFCEFF999 +:102AC0000C06EFFC1A15E0691000F1D9E138EFF8B7 +:102AD0001C06D822800362D4D421966816971495D8 +:102AE0001294E21801001896C0603029300A967BD3 +:102AF000F01F00068E68ADC808990A9A8E7B0C9C60 +:102B0000AE68F01F0003D822800362D4800353B460 +:102B1000D4211697967BF01F0007C0656F581808E0 +:102B2000EF480054D8228E68ADC8AE68D8220000A5 +:102B30008003694CD431208D4DB8500B7008507C07 +:102B4000502A1295501816970F36401AF4060704AB +:102B5000E2140008CFA1E046002DC0410F3630142A +:102B6000C058E046002BC0210F3658055F085905B4 +:102B70005F0A3009F1EA100AF20A1800C1D0E046F3 +:102B80000030C1210F8A358B378CF60A18005F0B95 +:102B9000F80A18005F0A144BF20B1800C0500F9689 +:102BA00031052FE7C0985808C070E0460030F9B5ED +:102BB0000008F9B5010A5804C0713FF0E061FFFF59 +:102BC000EA117FFFC0483000FC118000EA03141FA7 +:102BD0000A980699009A029BF01F00340699505AF1 +:102BE0000A98009A029BF01F0032069C14981699CE +:102BF000300A30003001149E109212934019F206F0 +:102C0000070BF3DBC001F9B90137F9B90057506977 +:102C1000ECC80030EDBB0002C0804069F7DBC002A9 +:102C2000EC090108580BC2D00A38C2B40430E601DE +:102C300013005FB9F3EA13FAFC0A1800C1F104307B +:102C4000E60113005F09405A14385F9AF5E900095C +:102C5000FC091800C131E005064AEA010249504862 +:102C6000F8000349BF58F20B000B5038FAE0000C93 +:102C70001400E20B0041301AC0283FFA0F36CBFB9C +:102C80005BFAC1715804C0713FF0E061FFFFEA11C7 +:102C90007FFFC0483000FC11800032284079933813 +:102CA000C10800000000049C800373408002D99892 +:102CB0005804C07030083009F0000100F2010141F1 +:102CC00040285808C0B0580AF9B801FFEFD8E10A07 +:102CD000FBFA1A00402940089308009A029B2F8DA6 +:102CE000D8320000D431209D4DE816927008508CE7 +:102CF000505A1295504816970F36404EFC0607035F +:102D0000E2130008CFA1E046002DC0410F3630137A +:102D1000C058E046002BC0210F3658055F08590502 +:102D20005F0A3009F1EA100AF20A1800C1D0E04641 +:102D30000030C1210F8A358B378CF60A18005F0BE3 +:102D4000F80A18005F0A144BF20B1800C0500F96D7 +:102D500031052FE7C0985808C070E0460030F9B53B +:102D60000008F9B5010AEA04141F0A9808993FFA05 +:102D70003FFBF01F003D0899502B503A0A983FFA4C +:102D80003FFBF01F003A300B300830094041E206AB +:102D9000070EE1DEC001ECCC00305800F9B101377C +:102DA000F9B100571C90E2100004C061EC01010C65 +:102DB000FDDEC002C3700A3CC354FAE000080038CC +:102DC000E20913005FBE3000FDEB13FBE00B1800BF +:102DD000C261FAE00008143C5F9E0038E20913006B +:102DE0005F0B3000FDEB000BE00B1800C181F0051C +:102DF0000640EA09024BFAE10000E808034BF6013D +:102E00000001507C5001BF5CFAE00000506C301BA8 +:102E1000FAE800180008F2010049C0283FFB0F360D +:102E2000CB6B5BFBC071322840803FF981383FF8A3 +:102E3000C0985803C07030043005E8080108EA095A +:102E40000149405E580EC080580BF9BA01FFEFDA15 +:102E5000E102405A9502109A129B2F7DD832000051 +:102E60000000049C8002D99880037340D431203D37 +:102E70004C48502C70011698113EE20E0705E215E1 +:102E80000008CFB1E04E002DC041113E3015C058B2 +:102E9000E04E002BC021113E58095F0C59095F0616 +:102EA0003007F9E61006EE061800C1E0E04E0030EB +:102EB000C131118635843783E80618005F04E606C1 +:102EC00018005F06E9E61006EE061800C050119ED5 +:102ED00031092FE8C098580CC070E04E0030F9B9A5 +:102EE0000008F9B9010A3FF3E6090D023007500363 +:102EF0000E9C0E93E20E0704E1D4C001F9B0013735 +:102F0000F9B000575010FCC600300890E2100004E1 +:102F1000C0814010E9D4C002FC0001065804C1C0C1 +:102F20001236C1A4043C5FBEFDE713FEE60E180096 +:102F3000C101043C5F0E40070E365F97EFEE000EB6 +:102F4000E60E1800C061B33C3017EC0C000CC02832 +:102F50003FF7113ECD0B5BF7C061322940200E9C3C +:102F60008139C0485805FBBC0100580AC070580799 +:102F7000F9B901FFF1D9E10B950B2FDDD832000033 +:102F80000000049CD421169776DBEEC8FFBC103BF2 +:102F9000C171E06B0400F01F0015C250E06804002E +:102FA0008FDC8FE8EF380046F8CCFC03B8A8EF3888 +:102FB0000045B898EF380044B8888F0CC1386EE5EA +:102FC000EA041501089AF01F000A1896C0C00A9A70 +:102FD000189BF80500050A9CF01F00068FE48F057A +:102FE0008FD6D82ADC2A00008002E2BC8002E8E802 +:102FF0008002E736D4211697149618955BFBC650CD +:10300000580CC06078685808C031F01F00314B1868 +:103010001036C0316A06C0A84AF81036C0316A16A8 +:10302000C0584AE81036EBF600028C68A5D8AC68A8 +:10303000EDB80002C140EDB80004C461EDB8000372 +:10304000C0B10C9B0A9CF01F0026C3E18C688D6CFC +:10305000A3D88D2CAC688C68A3A8AC680E946CD8EF +:103060005C545808C1006C196CE81039C0650A9CA2 +:103070000C9BF01F001CC2816C0820188D08B084C6 +:103080000897C0C86C495809C0C06C081238E0885D +:10309000000911770837C0518D086C182FF8C12826 +:1030A0006C18ED4800406C088DF8ECC8FFBC8DD85A +:1030B00030388DE8ECC8FFBAED6400468D080897FB +:1030C00030188D18C0283FF70E9CD82280031F3877 +:1030D0008003EF2C8003EF4C8003EF6C80031D2CEA +:1030E00080032F84D431208DFAC4FFBC504B682E4E +:1030F000505812967C0B7005506E580BF40B17004D +:103100006803681140493008C2C92FFB325C178A36 +:10311000F80A18005F1EF00A18005F1CFDEC000C96 +:10312000F00C1800CF31580AE0800129300C3FFA2A +:103130001890503A18941892F80C003C1697507C4E +:103140004CDC0F3AF80A070E407C1C0C4CBEFC0C01 +:10315000070E201E500E4CAEFC0C070C507C400C91 +:10316000587CE08B00F84C7EFC0C032F368BF60A63 +:103170001800E08000F0371BF60A1800C07034CB4E +:10318000F60A1800C051A3B4CE58A5B4CE380F8BA0 +:1031900036CAF40B1800C051A5B4EECBFFFFCDB872 +:1031A000A5A4CD88EBD5C005367CF80A1800E08BC5 +:1031B0000027365BF60A1800C48234FBF60A1800B2 +:1031C000C480E08B000C345BF60A1800C3E0347B4B +:1031D000F60A1800C3A0344BC088358BF60A1800D5 +:1031E000C2C0E08B0007355BF60A1800C351C31854 +:1031F000363BF60A1800C2F0364BC0E8370BF60A29 +:103200001800C250E08B000D36EBF60A1800C1F032 +:10321000E08B0014369BF60A1800C1E1C0E8375B6A +:10322000F60A1800C0A0378BF60A1800C060373BBA +:10323000F60A1800C111C0B8EDB40004C0A0EDB486 +:103240000005C0913020C0883040C0683030C04890 +:103250003010C0283000403B5BFBC040E20B09202F +:10326000C7985860E08B00776C0AEACCFFFF486E85 +:10327000FC00032F8003F2708003F1D48003F16817 +:103280008003EFC88003EFE8F4CBFFF88D0BF4EA7E +:103290000000E605083AC0F8F4CBFFFC8D0B740A79 +:1032A000E605093AC088F4CBFFF88D0BF4EA00007C +:1032B000E605083A0E9B1895C4E8620A5BFAC0B1AD +:1032C00050195028E06A0080300B029CF01F004D1E +:1032D00040284019E4CC00010E9B503CF20C0C49F4 +:1032E000C3A8620A5BFAC0B150195028E06A008096 +:1032F000300B029CF01F0043402840192012300A76 +:103300000E9BE202092AF2020C49C25816976C0A77 +:10331000F4CBFFFC8D0B740A0E9BE605093A2FF5E2 +:10332000C1A8F4C20030C068E40200222FF7F40202 +:1033300000120F8A580AC0E0230A589AFE98FFF636 +:10334000C0982FF70F8A580AC050230A589AFE983F +:10335000FFFA0E9B407C30BAF40C1800FE91FEEE92 +:103360004042178C0A325F4AF00C18005F1CF9EAE1 +:10337000000AF00A1800FE91FECB3008404E178A72 +:10338000E2050021F00A1800FC091710E6050038D4 +:10339000069EC2A8620A583AC1E0E0890007581A9E +:1033A000C1A0582AC181C058585AC0C0C0B5C13840 +:1033B0006C0AF4CCFFF88D0CF4E20000F0E300009E +:1033C000C1086C0AF4CCFFF88D0CF4E20000F0E3C5 +:1033D0000000C0786C0AF4CCFFFC8D0C740A910AD2 +:1033E0002FF52F882FC11235FE9AFFD61C9340521D +:1033F000406E85059D0B404BE60B003C2F8DD8326F +:103400008002E8BCD421149774285808C04195184C +:10341000109CD822F01F000330088F188F28D82264 +:1034200080032320D431FACD06BC5109169114979C +:103430001895F01F0056780C50CC5805C0706A687B +:103440005808C0410A9CF01F00524D281031C0316D +:103450006A01C0A84D081031C0316A11C0584CF83B +:103460001031EBF100028268EDB80003C041624800 +:103470005808C071029B0A9CF01F0049E0810F941C +:1034800082681099E219001A58A9C3D18279300ACA +:10349000F4091900C385A1D8FB5805D06288FB4800 +:1034A00005E462A8FB4805ECFAC8FFBCFB4805D45C +:1034B000FB4805C4E0680400FB4805D8FB4805CC80 +:1034C0003008FB5905D20E9A4109FAC7FA3CFB486D +:1034D00005DC0A9C0E9BF01F003350BCC0950E9B70 +:1034E0000A9CF01F003140BEF9BE01FF50BEFB0830 +:1034F00005D0EDB80006E0810F598268A7A8A26840 +:10350000E08F0F543008FB4806B4FB480690FB4898 +:10351000068CFB4806B03008300950A75078FAC432 +:10352000F9E03FF85059FB440688FB480544129CDB +:10353000506950D950E950B9129740A2325A300818 +:10354000C0282FF20589F00918005F1BF409180044 +:103550005F19F3EB000BF00B1800CF4140ABE40B0D +:103560000106C300FAF806900C08890BFB48069088 +:103570008916FAF8068C2FF8FB48068C5878E089F3 +:1035800000152F84C1C800008003276480031F3802 +:103590008003EF2C8003EF4C8003EF6C80031C381A +:1035A0008003342480031D2CFACAF978029B0A9CFC +:1035B000F01F0071E0810EF4FAC4F9E040BA0C0A81 +:1035C00050BA05893008F0091800E0800ED930099A +:1035D000FB6806BB0E96E4C8FFFF3FFE50945041C7 +:1035E0000E940491508950A8502E50391293129085 +:1035F00010970A92C0783FFC0A97502CC038300BC5 +:10360000503B0F38C0281290F0C90020E049005804 +:10361000E08B0A4A4D9AF409032F50A750800C976B +:103620000495089602924D6940941090404150D9FB +:10363000E08F08AA3008FB3906BBF0091800CE213C +:103640003208C6E8A1A3CDEB0F89F2C80030589824 +:10365000E08B001DEEC8FFFF300B2309F60B002B9B +:10366000F20B001B1139F2CA0030589AFE98FFF78E +:10367000E0490024CC51E04B0020E0890E90201B53 +:10368000FAF906B4123BC095C108FAF906B4ECCABF +:10369000FFFF1236C1F5C268FACEF9441097FC0B51 +:1036A000003BF6F0FD88C3581097FAC8F9501AD8B5 +:1036B000FAC8FAB81AD8FAC8FBB4029A1AD8049C05 +:1036C000FAC8F940FAC9FFB4F01F002E2FDD7800C8 +:1036D000C208FACCF9441496F8040038F0F0FD88DA +:1036E000C188410859F9E0890011F0CBFFFC510B6A +:1036F0007000FACBF944F6090038F140FD882FF943 +:103700001496FB4906B4C058700014962FC851088F +:103710005800FE94FF785C30A3A3C74B32B8FB6817 +:1037200006BBC70B0F38E048002AC0303009C80874 +:103730000F88F0C900305899E08B0026EEC5FFFFD6 +:10374000300B2308F60B002BF00B001B0B38F0C9D5 +:1037500000305899FE98FFF7E0480024FE91FF5191 +:10376000E04B0020E0890E1B201BFAF806B4103B4A +:10377000C115C188800334048003F0048003EDD0B8 +:10378000800330E4FAFA06B4ECC9FFFF1436C1F541 +:10379000C288FACAF944F40B003BF6FBFD88502BB3 +:1037A000C3C8FAC8F9501AD8FAC8FAB81AD8FAC869 +:1037B000FBB4029A1AD8049CFAC8F940FAC9FFB4BB +:1037C000F01F017B2FDD780C502CC27812960E95DD +:1037D000FAC9F944F2040038F0F8FD885028C1D83D +:1037E000410859FAE0890014F0CBFFFC7008510B36 +:1037F0005028FAC6F944402EEC0A0038F14EFD88F4 +:103800002FFA0E95FB4A06B41296C078700C0E95EE +:103810002FC8502C12965108402B580BFE95FEEDE8 +:103820000A97CF0AF20900290F38F4090019F0CAE3 +:103830000030589AFE98FFF83FFAF20A0C495029D6 +:10384000CE4AA7B3CDFA30092308F2090029F009BE +:1038500000190F38F0CA0030589AFE98FFF7E04878 +:103860000024FE91FED2E0490020E0890D98F2C4C8 +:10387000000130195039CC6AA3B3CC4AA7A3CC2A93 +:103880000F8836CEFC081800C0412FF7A5B3CBAA8D +:10389000A5A3CB8AA5B3CB6A50A750800C971090F4 +:1038A00008960495409402920E994041FAF806B4A5 +:1038B000403C580CC1D01036C064FACBF944F6062F +:1038C0000036C1D8FAC8F9501AD8FAC8FAB81AD8C6 +:1038D000FAC8FBB41AD8FAC8F940FAC9FFB4049A76 +:1038E0000C9B0A9CF01F01322FDD19B8C2282FF75C +:1038F0001039C084FACAF944F4060036ED38FD8B5D +:10390000C188410959F8E0890012F2CAFFFC510A46 +:103910007209FAC6F944EC08003A2FF8F549FD8817 +:10392000FB4806B4F1D9C008C04813B82FC95109E3 +:10393000FB680660300E30083012FB6806BB502E64 +:10394000E08F08C450A750800C9704950896029207 +:10395000409410904041A5A3C0A850A750800C9758 +:10396000049508960292409410904041EDB30005F2 +:10397000C511FAF806B4403C580CC1E01036C064DA +:10398000FACBF944F6060036C208FAC8F9501AD83C +:10399000FAC8FAB80C9B1AD8FAC8FBB41AD8FAC9F4 +:1039A000FFB4FAC8F940049A0A9CF01F01012FDD08 +:1039B000781B7809C2B8EECAFFFF1037C0B4FAC945 +:1039C000F9441497F2060036ECFBFD8CECF9FD8807 +:1039D000C1D8410959F8E0890014F2CBFFF8510B26 +:1039E000FAC6F944721BEC08003C7209F94BFD8CD5 +:1039F000F949FD882FF81497FB4806B4C078F2C83F +:103A0000FFF8721B1497510872091698FAE9000022 +:103A1000CAE8EDB30004C171FAF806B4403E580E8E +:103A2000C0801036C694FACCF944F8060036C8288F +:103A3000EECAFFFF1037E0840081FACBF944F606A6 +:103A40000036C778EDB30006C4B1FAF806B4403CBE +:103A5000580CC1D01036C064FACBF944F6060036D3 +:103A6000C1F8FAC8F9501AD8FAC8FAB81AD8FAC878 +:103A7000FBB41AD8FAC8F940FAC9FFB4049A0C9BEF +:103A80000A9CF01F00CB2FDD9818C268EECAFFFF1A +:103A90001037C094FAC9F9441497F2060036ED08BD +:103AA000FD8AC1A8410959F8E0890013F2CBFFFC57 +:103AB000510B7209FAC6F944EC08003B2FF8F7499C +:103AC000FD88FB4806B41497F1D9B010C05892187D +:103AD00014972FC951095018BF585008C488FAF8D4 +:103AE00006B4403C580CC1D01036C064FACBF9443F +:103AF000F6060036C1F8FAC8F9501AD8FAC8FAB86A +:103B00000C9B1AD8FAC8FBB4049A1AD80A9CFAC8B3 +:103B1000F940FAC9FFB4F01F00A62FDD780BC248A8 +:103B2000EECAFFFF1037C094FAC9F944F206003616 +:103B30001497ECFBFD88C188410959F8E089001110 +:103B4000F2CBFFFC510BFAC6F944720BEC080039BA +:103B5000F34BFD882FF81497FB4806B4C058720B3E +:103B600014972FC95109501BBF5B500BFAEA000094 +:103B7000580A5C2BC0E43008FAEA00003009F00A69 +:103B8000010AF20B014B32D8FAEB0000FB6806BBCE +:103B90003018E08F071150A750800C9704950896B5 +:103BA00002924094109040410E99EDB30003C4116D +:103BB000FAF806B4403A580AC1901036C645FAC819 +:103BC000F9501AD8FAC8FAB81AD8FAC8FBB40C9B3C +:103BD0001AD8049AFAC8F940FAC9FFB40A9CF01F2F +:103BE00000742FDD78165076C4882FF71039C0C4C2 +:103BF000FACEF944FC060036ECFCFD8C507CECF669 +:103C0000FD885056C668410959F8E0890010F2CA8B +:103C1000FFF8721B510A7209FACAF944507B5059D5 +:103C2000F4080039405B407AC47872185078C4C8F0 +:103C3000FAF806B4403E580EC2301036C094FACCA2 +:103C4000F944F8060036ECFBFD8C507BCD9BFAC89E +:103C5000F9501AD8FAC8FAB8049A1AD8FAC8FBB4B4 +:103C60000C9B1AD80A9CFAC8F940FAC9FFB4F01F95 +:103C700000502FDD781A507A780C505CC2A82FF7CC +:103C80001039C094FAC9F944F2060036ECF8FD8CFC +:103C90005078CB6B410959F8E0890015F2CAFFF85A +:103CA00072167209510A5059FACEF9445076FC083E +:103CB0000039405B0C9AF2EBFD882FF8FB4806B404 +:103CC000C088721C507CF2C8FFF851087209505924 +:103CD000405B407AF01F00371896C1503008300919 +:103CE000405B407AF01F0034C04032D8FB6806BB0E +:103CF0004B284B36A7D3E0400047F00617A03032E0 +:103D0000E08F06E7405B407AF01F002EC0C05026CF +:103D10004AD84AE6A7D3E0400047F00617A0303261 +:103D2000E08F06DD402A5BFAC04130695029C11896 +:103D3000E04000475F09E04000675F08F3E81008D3 +:103D4000F8081800C06040285808F9B80001502849 +:103D500040784059FAE90694A9A3FAF8069458085D +:103D6000C065405E300C506E509CC078405B32DACB +:103D7000EE1B8000509A506BE04000465F09E04027 +:103D800000665F08F3E810085048C0404022303910 +:103D9000C228E04000455F09E04000655F084046FA +:103DA0001049EC091800C1314022C148800330E4B9 +:103DB0008003697880036FC08003F2408003F2447F +:103DC00080032A7E8003F2488003F24C402EFCC21E +:103DD000FFFF3029FAC8F95C1AD8FAC8F9541AD882 +:103DE000FAC8F94C0A9C1AD80498409B40AAF01FC4 +:103DF00001E0E04000475F19E04000675F18189657 +:103E00002FDDF3E80008C041EDB30000C301EC0270 +:103E1000000C503C404B580BC1500D893308F00941 +:103E20001800C0B130083009406B407AF01F01D152 +:103E3000FBB20001FBF20BAB403AFAF806AC100AF9 +:103E4000503A406B30083009407AF01F01CAC090E8 +:103E50004039FB4906A4C05810C9FB4806A4C02835 +:103E60003309FAF806A4403E1C38CF73E0400047FF +:103E70005F09E04000675F08F3E81008FAF906A45C +:103E80000C1950695808C0B0FAF806AC5BD8C05598 +:103E9000402C1838E08A006A2020C058E0400065B5 +:103EA000E0890046FAFB06ACFB60069C201BFB4B3E +:103EB00006ACC0475C3B32D8C02832B8FB68069DD0 +:103EC000589BE08A001DFAC9FA3530AA12980E9C58 +:103ED0000C92F60A0C060E9B2D0B10FB0C9B5896B1 +:103EE000FE99FFF92D0B1897049610FBFACAF96298 +:103EF000C038113B14CB1238CFD3C0982D0B3308E8 +:103F0000FB6B069FFB68069EFACAF960FAC8F96463 +:103F1000F408010850E81092406B1602581BE08923 +:103F20000005EDB30000C3512FF2C338E040006636 +:103F3000C1C1FAF206AC5802E08A000C402A580AC5 +:103F4000C041EDB30000C2512FF240291202C0B8A7 +:103F500040285808C061EDB30000C0303012C1984D +:103F600040222FE23660C158FAF206AC406E1C3295 +:103F7000C065EDB30000F7B200FFC0A8E40811026D +:103F8000406C5802F00217A0F9B20901180236700D +:103F9000409B580BE080059D32D8FB6806BBE08F44 +:103FA000059C50A704950C970292089640414094B6 +:103FB0000E99EDB30005C481FAF806B4403E580EE0 +:103FC000C1D01036C064FACCF944F8060036C1D826 +:103FD000FAC8F9501AD8FAC8FAB8049A1AD8FAC81E +:103FE000FBB40C9B1AD80A9CFAC8F940FAC9FFB472 +:103FF000F01F01612FDD780AC2082FF71039C08445 +:10400000FACBF944F6060036ECFAFD88C16841099E +:1040100059F8E0890010F2CAFFFC510AFAC6F944C7 +:10402000720AEC080039F34AFD882FF8FB4806B401 +:10403000C048720A2FC9510940BE1C98951EBF582E +:104040009508FE9FFA7CEDB30004C480E2130040A3 +:10405000C450FAF806B4403C580CC1D01036C064C5 +:10406000FACBF944F6060036C1D8FAC8F9501AD886 +:10407000FAC8FAB8049A1AD8FAC8FBB40C9B1AD832 +:104080000A9CFAC8F940FAC9FFB4F01F013B2FDDC2 +:10409000780AC2082FF71039C084FACAF944F40626 +:1040A0000036ECFAFD88C168410959F8E089001032 +:1040B000F2CAFFFC510AFAC6F944720AEC08003948 +:1040C000F34AFD882FF8FB4806B4C048720A2FC98E +:1040D000510940BEB40EFE9FFA32FAF806B4403CD5 +:1040E000580CC1D01036C064FACBF944F60600363D +:1040F000C1D8FAC8F9501AD8FAC8FAB8049A1AD826 +:10410000FAC8FBB40C9B1AD80A9CFAC8F940FAC941 +:10411000FFB4F01F01192FDD780AC2082FF71039FC +:10412000C084FACAF944F4060036ECFAFD88C16886 +:10413000410959F8E0890010F2CAFFFC510AFAC699 +:10414000F944720AEC080039F34AFD882FF8FB485D +:1041500006B4C048720A2FC9510940BE950EFE9F91 +:10416000F9EE50A750800C9704950896029240945F +:1041700010904041A5A3C0A850A750800C9704956B +:1041800008960292409410904041EDB30005C5D1CD +:10419000FAF806B4403C580CC2601036C0A4FACB02 +:1041A000F944F6060036ECE8FD88FAE90000C1881B +:1041B000FAC8F9501AD8FAC8FAB8049A1AD80C9B57 +:1041C000FAC8FBB40A9C1AD8FAC8F940FAC9FFB475 +:1041D000F01F00E92FDDF8EA0000FAEB00003008DC +:1041E000E08F03E7EECAFFFF1037C0B4FAC9F94405 +:1041F0001497F2060036ECEAFD88FAEB0000C1885D +:10420000410959F8E0890018F2E60000F2CBFFF806 +:10421000FAE70000510BFAC6F944EC080039FAE657 +:104220000000F2E7FD882FF81497FB4806B44038E9 +:10423000E08F03BFF2E600004038FAE700002F8964 +:1042400014975109E08F03B5EDB30004C161FAF88A +:1042500006B4403E580EC0801036C674FACCF944FD +:10426000F8060036C808EECAFFFF1037C7F4FACBCD +:10427000F944F6060036C768EDB30006C4A1FAF8A3 +:1042800006B4403C580CC1D01036C064FACBF94497 +:10429000F6060036C1F8FAC8F9501AD8FAC8FAB8C2 +:1042A0001AD8FAC8FBB41AD8FAC8F940FAC9FFB448 +:1042B000049A0C9B0A9CF01F00B02FDD9818C2686E +:1042C000EECAFFFF1037C094FAC9F9441497F206FA +:1042D0000036ED08FD8AC1A8410959F8E0890013AC +:1042E000F2CBFFFC510B7209FAC6F944EC08003B13 +:1042F0002FF8F749FD88FB4806B41497F1D9B010A0 +:10430000C058921814972FC951095C785018C46886 +:10431000FAF806B4403C580CC1D01036C064FACB51 +:10432000F944F6060036C1F8FAC8F9501AD8FAC8A6 +:10433000FAB80C9B1AD8FAC8FBB4049A1AD80A9C8B +:10434000FAC8F940FAC9FFB4F01F008B2FDD780BD3 +:10435000C248EECAFFFF1037C094FAC9F944F2060A +:1043600000361497ECFBFD88C188410959F8E089B3 +:104370000011F2CBFFFC510BFAC6F944720BEC08AA +:104380000039F34BFD882FF81497FB4806B4C0584A +:10439000720B14972FC95109501B300E500E1C98E8 +:1043A000E08F030750A750800C970495089602925F +:1043B000409440410E99FAF806B4403C580CC1D0E4 +:1043C0001036C064FACBF944F6060036C1D8FAC8F4 +:1043D000F9501AD8FAC8FAB81AD8FAC8FBB41AD8D9 +:1043E000FAC9FFB4FAC8F940049A0C9B0A9CF01F62 +:1043F00000622FDD7809C2182FF71039C084FACA7D +:10440000F944F4060036ECF9FD88C178410959F801 +:10441000E0890010F2CAFFFC510AFAC6F944720999 +:10442000EC08003AF549FD882FF8FB4806B4C0585F +:10443000F2C8FFFC510872093308FB6806B83788D8 +:10444000300EFB6806B94CDC5019A1B3500E50DC9D +:1044500030283780E08F02AD50A750801090300890 +:10446000FB6806BB0C970495089602924094404165 +:104470000E99FAF806B4403B580BC1D01036C06410 +:10448000FACAF944F4060036C1D8FAC8F9501AD865 +:10449000FAC8FAB81AD8FAC8FBB40C9B1AD8049A0E +:1044A000FAC8F940FAC9FFB40A9CF01F00332FDDA7 +:1044B0007806C2082FF71039C084FAC9F944F20609 +:1044C0000036ECF6FD88C168410959F8E089001012 +:1044D000F2CAFFFC510A7206FACEF944FC08003910 +:1044E000F346FD882FF8FB4806B4C04872062FC972 +:1044F0005109402C580CC105189A300B0C9CF01F28 +:104500000020E08002E9F8060102402B1632E08923 +:1045100002E3E08F02DE300A0C9C502AF01F0019E3 +:104520001892E08F02DC50A750800C9704950896F3 +:104530000292409410904041A5A3C0A850A750807B +:104540000C97049508960292409410904041EDB368 +:104550000005C611FAF806B440395809C2C0103631 +:10456000C124FAC8F944F0060036C2E88003552C8D +:1045700080036F32800330E48003EDE4800328A4DD +:104580008002EDD0FAC8F9501AD8FAC8FAB81AD889 +:10459000FAC8FBB41AD8FAC8F940FAC9FFB4049AA9 +:1045A0000C9B0A9CF01F00C82FDDF8E80000FAE918 +:1045B0000000C2E8EECAFFFF1037C0B4FAC8F944E1 +:1045C0001497F0060036ECEAFD88FAEB0000C2080A +:1045D000410959F8E0890016F2E60000F2CBFFF835 +:1045E000FAE70000510BFAC6F944EC080039FAE684 +:1045F0000000F2E7FD882FF81497FB4806B4C08846 +:10460000F2E600002F89FAE70000510914973018EC +:10461000E08F01CFEDB30004C161FAF806B4403E6B +:10462000580EC0801036C674FACCF944F80600362D +:10463000C808EECAFFFF1037C7F4FACBF944F606F4 +:104640000036C768EDB30006C4A1FAF806B4403CD2 +:10465000580CC1D01036C064FACBF944F6060036C7 +:10466000C1F8FAC8F9501AD8FAC8FAB81AD8FAC86C +:10467000FBB41AD8FAC8F940FAC9FFB4049A0C9BE3 +:104680000A9CF01F00912FDD9818C268EECAFFFF48 +:104690001037C094FAC9F9441497F2060036ED08B1 +:1046A000FD8AC1A8410959F8E0890013F2CBFFFC4B +:1046B000510B7209FAC6F944EC08003B2FF8F74990 +:1046C000FD88FB4806B41497F1D9B010C058921871 +:1046D00014972FC951095C785018C468FAF806B4C9 +:1046E000403C580CC1D01036C064FACBF944F606F1 +:1046F0000036C1F8FAC8F9501AD8FAC8FAB80C9BB3 +:104700001AD8FAC8FBB4049A1AD80A9CFAC8F94015 +:10471000FAC9FFB4F01F006C2FDD780BC248EECA57 +:10472000FFFF1037C094FAC9F944F2060036149717 +:10473000ECFBFD88C188410959F8E0890011F2CBF2 +:10474000FFFC510BFAC6F944720BEC080039F34B2D +:10475000FD882FF81497FB4806B4C058720B1497C5 +:104760002FC95109501B300E3018500EC21950A7D6 +:1047700050800C970495089602924D4C40941090EE +:10478000404150DCEDB30005C551FAF806B4403B9A +:10479000580BC2201036C0A4FACAF944F4060036F9 +:1047A000ECE8FD88FAE90000CF58FAC8F9501AD8A9 +:1047B000FAC8FAB8049A1AD80C9BFAC8FBB40A9C37 +:1047C0001AD8FAC8F940FAC9FFB4F01F003F2FDD2C +:1047D000F8EA0000C0C8EECAFFFF1037C0B4FAC93B +:1047E000F9441497F2060036ECEAFD88FAEB000073 +:1047F000CD18410959F8E0890016F2E60000F2CB25 +:10480000FFF8FAE70000510BFAC6F944EC0800394A +:10481000FAE60000F2E7FD882FF81497FB4806B48B +:10482000CB98F2E600002F89FAE7000051091497AF +:10483000CB18EDB30004C171FAF806B4403E580E2F +:10484000C0801036C6C4FACCF944F8060036C85801 +:10485000EECAFFFF1037E0840084FACBF944F60675 +:104860000036C7A8EDB30006C4E1FAF806B4403C30 +:10487000580CC1D01036C064FACBF944F6060036A5 +:10488000C1F8FAC8F9501AD8FAC8FAB81AD8FAC84A +:10489000FBB41AD8FAC8F940FAC9FFB4049A0C9BC1 +:1048A0000A9CF01F00092FDD9818C2A8EECAFFFF6E +:1048B0001037C0D4FAC9F9441497F2060036ED084F +:1048C000FD8AC1E8800330E48003EDE4410959F832 +:1048D000E0890013F2CBFFFC510B7209FAC6F944D0 +:1048E000EC08003B2FF8F749FD88FB4806B4149705 +:1048F000F1D9B010C058921814972FC951095C789B +:104900005018C468FAF806B4403C580CC1D01036B0 +:10491000C064FACBF944F6060036C1F8FAC8F9507B +:104920001AD8FAC8FAB80C9B1AD8FAC8FBB4049A79 +:104930001AD80A9CFAC8F940FAC9FFB4F01F00C996 +:104940002FDD780BC248EECAFFFF1037C094FAC9BA +:10495000F944F20600361497ECFBFD88C188410942 +:1049600059F8E0890011F2CBFFFC510BFAC6F9446B +:10497000720BEC080039F34BFD882FF81497FB48B5 +:1049800006B4C058720B14972FC95109501B300E32 +:10499000500E4008401C18485F18E7E80008C07037 +:1049A0003308FB6006B9A1B3FB6806B830283009AC +:1049B000FB6906BB402B580BC025A7D3402A4009F2 +:1049C000580A5F1A4016FAC2F9780C495F19F5E9DE +:1049D0001009C5C03019F2081800C0603029F2086B +:1049E0001800C041C3C80496C3080496FAE8000042 +:1049F000F5D8C0032D0A0CFAF00B1603F20C1603BF +:104A0000F7E911DB1899169858085C29CF21FAE9C3 +:104A10000000EDB30000C4513309F20A1800C410BD +:104A20000CF9C3F8FAEA000030A83009F01F008E34 +:104A300030A82D0A3009AC8AFAEA0000F01F008B7A +:104A400016991498FAE900002016FAEA0000589A1C +:104A50005C2BFE9BFFE91BF82D08C2080496FAE8C0 +:104A60000000F5D8C00440DEFC0A070A0CFAF20B7D +:104A70001604F00A1604F5E911CA16991498580894 +:104A80005C29CF01FAE90000C0C85808C091EDB315 +:104A90000000C061FAC6F9793308AC88C0280496D2 +:104AA0000C12C1C850A7508040940C9710900495E8 +:104AB00040415808E0800464FB680660300C300810 +:104AC0003012FB6806BB502CFAC6F9A0C078300B38 +:104AD000502BC0484022300A502A4029E4090C4992 +:104AE000FB3806BB5039069E3009E21E0002F20870 +:104AF0001800FBF81003F7B801FFFBF81A03069B38 +:104B0000580EFBFC1003F7BC01FEFBFC1A03E21B72 +:104B1000008450FE509BC451408A4039121A504ABA +:104B2000580AE089001FC3D82F092FF84D0E310C09 +:104B3000FB490690890E891CFB48068C5878E08951 +:104B400000042F84C0B8FACAF978029B0A9CF01FAF +:104B50000049E0810425FAC4F9E0404B210B504B99 +:104B6000FAF90690FAF8068C4C1A404E590EFE9946 +:104B7000FFDD1C092FF8890AFB490690891EFB48B6 +:104B8000068C5878E08900042F84C0B8FACAF978F6 +:104B9000029B0A9CF01F0037E0810402FAC4F9E08E +:104BA0003009FB3806BBF2081800C1F0FAF806908D +:104BB000FAC9F9452FF88909FB4806903019FAF827 +:104BC000068C89192FF8FB48068C5878E089000478 +:104BD0002F84C0B8FACAF978029B0A9CF01F0025FE +:104BE000E08103DEFAC4F9E040FC580CC1F0FAF8A9 +:104BF0000690FAC9F9482FE88909FB480690302940 +:104C0000FAF8068C89192FF8FB48068C5878E08949 +:104C100000042F84C0B8FACAF978029B0A9CF01FDE +:104C20000015E08103BDFAC4F9E0409BE04B008031 +:104C3000C511408A4039121A504A580AE089002B9F +:104C4000C4982F092FF848CE310CFB490690890EE5 +:104C5000891CFB48068C5878E08900102F84C178A5 +:104C6000800330E4800373408002D9988003F250BF +:104C7000800334048003F260FACAF978029B0A9C2C +:104C8000F01F004CE081038CFAC4F9E0404B210B8B +:104C9000504BFAF90690FAF8068C4C7A404E590EB1 +:104CA000FE99FFD11C092FF8890AFB490690891E3D +:104CB000FB48068C5878E08900042F84C0B8FACAF3 +:104CC000F978029B0A9CF01F003BE0810369FAC45B +:104CD000F9E0402C041C502C580CE089001FC3D86C +:104CE0002F092FF84B4B310AFB490690890B891A83 +:104CF000FB48068C5878E08900042F84C0B8FACAB3 +:104D0000F978029B0A9CF01F002BE0810349FAC44A +:104D1000F9E0402921095029FAF90690FAF8068CA1 +:104D20004A5A402E590EFE99FFDD1C092FF8890AB8 +:104D3000FB490690891EFB48068C5878E0890004E0 +:104D40002F84C0B8FACAF978029B0A9CF01F001998 +:104D5000E0810326FAC4F9E0EDB30008C0B0FAF828 +:104D6000069089128906F0020002FB420690E08F4D +:104D700001DBE0400065E08A01DD30083009405B7E +:104D8000407AF01F000EC7E0FAF8069048C92FF8E5 +:104D90008909FB4806903019FAF8068C89192FF812 +:104DA000FB48068C5878E089000D2F84C14800002C +:104DB000800334048003F26080036F328003A6C056 +:104DC000FACAF978029B0A9CF01F0078E08102E899 +:104DD000FAC4F9E0FAF806AC406C1838C055EDB3E7 +:104DE0000000E081026DFAF806902FF840CBFB48F6 +:104DF00006903019FAF8068C890B2FF88919FB48B0 +:104E0000068C5878E08900042F84C0B8FACAF97873 +:104E1000029B0A9CF01F0065E08102C2FAC4F9E01F +:104E2000406620165806E089001DE08F02492F09D0 +:104E30002FF8FB49069089028910FB48068C5878A8 +:104E4000E08900042F84C0B8FACAF978029B0A9C52 +:104E5000F01F0056E08102A4FAC4F9E02106C03830 +:104E60004D323100FAF90690FAF8068C4D0A5906CF +:104E7000FE99FFDF0C09890AFB4906902FF8891675 +:104E8000C559FAFA06AC580AE0890096FAF8069075 +:104E90004C892FF88909FB4806903019FAF8068CDE +:104EA00089192FF8FB48068C5878E08900042F8474 +:104EB000C0B8FACAF978029B0A9CF01F003CE08156 +:104EC000026FFAC4F9E0FAF806AC5808C081406AEB +:104ED000580AC051EDB30000E08101F240C9FAF870 +:104EE00006902FF88909FB4806903019FAF8068CCD +:104EF00089192FF8FB48068C5878E08900042F8424 +:104F0000C0B8FACAF978029B0A9CF01F0028E08119 +:104F10000247FAC4F9E0FAF206AC5C325802E089C2 +:104F2000001DC3B82F092FF8310EFB4906908900E8 +:104F3000891EFB48068C5878E08900042F84C0B88D +:104F4000FACAF978029B0A9CF01F0018E081022837 +:104F5000FAC4F9E02102C0284950FAF90690FAF89B +:104F6000068C493A5902FE99FFDF04092FF8890A95 +:104F7000FB4906908912FB48068C5878E0890004AA +:104F80002F84C0B8FACAF978029B0A9CF01F000768 +:104F9000E0810206FAC4F9E0406CFAF8069089064E +:104FA000891C1808CBE80000800334048003F260F9 +:104FB0008003A6C0FAF90690FAF8068C406B163A00 +:104FC000C6D516092FF88906FB490690891BFB48B0 +:104FD000068C5878E08900042F84C0B8FACAF978A2 +:104FE000029B0A9CF01F006FE08101DAFAC4F9E02D +:104FF000FAF606AC406A14165806E089001CC3B8DD +:105000002F092FF8FB49069089028910FB48068C6E +:105010005878E08900042F84C0B8FACAF978029B56 +:105020000A9CF01F0060E08101BBFAC4F9E0210690 +:10503000C0384DD23100FAF90690FAF8068C4DAA24 +:105040005906FE99FFDF0C092FF8890AFB490690E3 +:105050008916FB48068C5878E08900042F84C0B874 +:10506000FACAF978029B0A9CF01F004EE081019871 +:10507000FAC4F9E0EDB30000E081012240C9FAF87A +:1050800006902FF88909FB4806903019FAF8068C2B +:1050900089192FF8FB48068CC04914092FF8FB49E1 +:1050A00006908906891AFB48068C5878E089000426 +:1050B0002F84C0B8FACAF978029B0A9CF01F003905 +:1050C000E081016EFAC4F9E040C88908FAF8069058 +:1050D0002FF83019FB4806908919FAF8068C2FF83A +:1050E000FB48068CFAF206AC5878E08900042F845D +:1050F000C0B8FACAF978029B0A9CF01F002AE08126 +:10510000014FFAC4F9E00406FAF806AC8906FAF988 +:1051100006904066406E1016F208010889161C08B9 +:10512000FB480690FAF8068C2FF8FB48068CCB98C3 +:10513000406C581CE0890006EDB30000E081008758 +:10514000FAF806902FF83019FB4806908906FAF80D +:10515000068C89192FF8FB48068C5878E0890004E2 +:105160002F84C0B8FACAF978029B0A9CF01F000D80 +:10517000E0810116FAC4F9E0FAF806902FF840CB66 +:10518000FB4806903019FAF8068C890B2FF889191C +:10519000FB48068C5878E08900092F84C10800007C +:1051A000800334048003F260FACAF978029B0A9CF7 +:1051B000F01F006FE08100F4FAC4F9E03008300914 +:1051C000405B407AF01F006B40682018580CC0D13B +:1051D0002FF689188906FAF606901006FAF8068C5A +:1051E000FB4606902FF8C2F810965808E089001C7C +:1051F000C4982F092FF8FB49069089028910FB48B3 +:10520000068C5878E08900042F84C0B8FACAF9786F +:10521000029B0A9CF01F0056E08100C2FAC4F9E02C +:105220002106C0384D423100FAF90690FAF8068C92 +:105230004D1A5906FE99FFDF0C09890AFB490690B1 +:105240002FF88916FB48068CC0E8FAF806902FF86C +:105250003019FB4806908906FAF8068C89192FF850 +:10526000FB48068C5878E08900042F84C0B8FACA3D +:10527000F978029B0A9CF01F003EE0810091FAC47D +:10528000F9E040EAFAF806901408FAC9F964FB4814 +:105290000690891AFAF8068C89092FF8FB48068CC3 +:1052A0005878E08900042F84C0A8FACAF978029BD4 +:1052B0000A9CF01F002FC731FAC4F9E0E213000482 +:1052C000C3D04086403912165806E089001AC368D8 +:1052D0002F092FF8FB49069089038912FB48068C99 +:1052E0005878E08900042F84C098009A029B0A9C99 +:1052F000F01F001FC541FAC4F9E02106C05849F368 +:105300003102FAC0F978FAF90690FAF8068C49BA2F +:105310005906FE99FFDF0C092FF8890A8916FB4907 +:105320000690FB48068C5878E08A0009FACAF9789A +:10533000029B0A9CF01F000EC32140BC4036408EE9 +:10534000EC0E0C48100C50BCFAF806905808C080BF +:10535000FACAF978029B0A9CF01F0005C201300BC3 +:10536000FAC4F9E0FB4B068CFE9FF0E9800334049D +:1053700080036F328003F2608003F250FAF80690E7 +:105380005808C0800A9CFACAF978029BF01F0009ED +:10539000C0613008FB48068CC02840418268EDB8E7 +:1053A0000006C0313FFA50BA40BCFE3DF944D83245 +:1053B00080033404D42116981897109C3008149B4D +:1053C0004866129A8D08F01F00065BFCC0516C08FD +:1053D0005808EFF81A03D82200008CC48002F1505C +:1053E000D421300818974876169C8D08F01F0006C7 +:1053F0005BFCC0516C085808EFF81A03D822000073 +:1054000000008CC48002F108D431202D1897784810 +:1054100076460C38C034300CC858ECC2FFFCF6C3DA +:10542000FFECF6020329F802032C2FF92016F809E5 +:105430000D08F6020022EEC4FFEC10955808C410C7 +:105440003009069A08981291500B700EB18E501EBA +:10545000150EFC001610FDDEC010EA0E0341FDD152 +:10546000C010B181401BEA000240E2000000E3D01E +:10547000C010021B501B700BE3DBC0100209F20EC0 +:10548000010EB01EFC091410401EFC090009B009F1 +:10549000E00116102FC8B149043AFE98FFD8400B1E +:1054A000580CC0F1ECC8FFFBEE080028C0282016FD +:1054B00020480838E088000570095809CF908F46C9 +:1054C0000E9CF01F001AC2D52FF508983009070B63 +:1054D000F60A1610700CF7DBC010F80E1610141E2A +:1054E000F5DCC010161A120AB01AB14AFC0A0009FB +:1054F000B0092FC8B1490433FE98FFEBECC8FFFB9D +:10550000EE0803295809C0D1EE080028C02820164B +:1055100020480838E088000570095809CF908F4668 +:105520000A9C2FEDD8320000800363EED43121AD08 +:10553000FAC4FF7418971695682C50C96816680944 +:1055400050E81494512CFAE5000851596E9558050D +:10555000C091310CF01F004799358F9C9915992502 +:1055600099056E9972085808C0F0721A911A301A8B +:105570007219F4090949109B91290E9CF01F003EF5 +:105580006E9830099109402810945808C064F1D8E9 +:10559000C01F50283018C02830088D08FC1C7FF030 +:1055A00040260C98E6187FF01838C1C1E068270F34 +:1055B000415B9708403A580AC061EDD6C014C0312B +:1055C0004AECC0284AEC41295809E08005DEF8C8B9 +:1055D000FFFD3009118AF20A1800C190F8C8FFF8DF +:1055E000C168FAEA00083008FAEB003C3009F01F05 +:1055F0000025C1103018415A950841294A285809F8 +:10560000C041109CE08F05C1109C2FF841258B08EC +:10561000E08F05BBFAC8FF9CFAC9FFA0FAEA003C7C +:105620000E9CEBD6C28BF01F001918935805C0D002 +:10563000FAEA003C3004F1DBC014EAC503FF109B1A +:105640005174EA1B3FF0C3284188419C100CF8C5F7 +:10565000FBCEE0450020E08A001BF8CCFBEE403B8F +:10566000EA081140F60C0A4CEC0809460C4CC148FB +:105670008002E2A4800364208003F3708003F37C43 +:1056800080036F328003A6C0800364D0EA0C11202F +:10569000403AF40C094CF01F006BFC18FE10301956 +:1056A000EAC50433F00B000B51793008FC193FF8C0 +:1056B000F01F0065E0684361EA18636FE06987A73F +:1056C000EA193FD2F01F0061E068C8B3EA188B60A6 +:1056D000E0698A28EA193FC6F01F005D0A9C149011 +:1056E0001691F01F005CE06879FBEA18509FE069B2 +:1056F0004413EA193FD3F01F005514981699009AE5 +:10570000029BF01F005314901691F01F00533008B5 +:1057100018963009009A029BF01F0050C0C00C9CE4 +:10572000F01F004C14981699009A029BF01F004C31 +:10573000F7B600015966E088000530185148C128C5 +:105740004C88FAEA003CF0060238F01F0044F9B435 +:105750000000FBF40A14F7B60101F9BC0100FBFCE0 +:105760001A14419020100A10C04650403000C04822 +:10577000300B5C30504BEC0211005806FBFA400431 +:10578000F5D6E40AFBFA4A04FBF64A11F9B2040022 +:10579000E1D6E510F9B90500FBF95A1140C858984F +:1057A000E08B00205858F9B40A01FBF5900CF7B5CE +:1057B0000904FBF59A0CF9B4090040CC583CC2D05E +:1057C000E0890005582CC101C18840CB584BC0600E +:1057D000585BC0A1301A50DAC228301950D9C0F82D +:1057E0003008301450C83FF5301C300B509550DC59 +:1057F0000A91312850EBC208300A50DA40E95809C2 +:10580000E089000730185098109150E8C15840E5E1 +:1058100050950A910A98C108300C50DC40EBEC0B13 +:10582000000B509B16982FF85808E089000510913E +:105830003018C028109130096E9A95193049C178F6 +:1058400080036E4A80036B7C800369A480036D181B +:1058500080036E5280036E2480036FC080036F321A +:105860008003F38C6A1AA1792FFA8B1A6E95F2CA0B +:10587000FFEC103AFE98FFF86A1B0E9CF01F0053D5 +:1058800058E15F888B0CF1E400046E987008508832 +:10589000E08001985806E08A0040F3D6C0044CC866 +:1058A000F0090234FAE50018EC041404EDB4000425 +:1058B000C0303025C0F84C78F0E80020FAEA003C0F +:1058C000E9D4C004F01F0044303514981699FAE961 +:1058D00000084C0C50A30C931896C0F8FAEA001874 +:1058E000EDB40000C081ECE800002FF5F01F003B94 +:1058F000FAEB0018A1542F865804CF11FAE80018CB +:10590000FAEA00080696F01F003440A3149816998E +:10591000FAE90008C2D8EC081100C0313025C2886D +:105920004ACCF0041404501CF1D8C0044A89FAEAA5 +:10593000003CF2080238F01F0029401C506330255B +:105940000C93FAEB00081896C0F8FAEA0008EDB4D8 +:105950000000C081ECE800002FF5F01F0020FAEBFA +:105960000008A1542F865804CF1106964063414A7F +:10597000580AC370FAE8000858015F94FAE9001861 +:105980003008FC193FF0FAEA0018F01F0015F9BCC6 +:105990000000F9BC0101E9EC000CC2304098580845 +:1059A000E08A010C3008FC194024ECC40001FAEA3A +:1059B00000182FF55064F01F0009409414981699B0 +:1059C000FAE90008C1080000800364588003F38CE2 +:1059D0008003F45480037028800369A480036FC09F +:1059E000506602940A9CF01F0069FAE80008F01F54 +:1059F00000683008FC19401CF01F006614981699C6 +:105A0000FAE90028FC18FCC040A5100550A5580470 +:105A1000C211FAEA00083008FC194014F01F005EB9 +:105A200040BCFAEB000814981699189A0A9BF01FCC +:105A3000005BE08102740A9840B9EE188000FAEA2F +:105A40000008109512980A99F01F0054E081025E38 +:105A5000CB484D39E8C8000140D55805C4F0300C9A +:105A6000F2080238513C300AFC1B3FE0F01F004DA9 +:105A7000FAE800284085F01F0048FAEB0028FAEA0F +:105A80000008F01F0049516CF01F0040149816994F +:105A9000FAEA0008F01F0040FAEB000841682D0800 +:105AA0000AC841392FF95139FAE80028F01F003BA4 +:105AB000E081035AFAE80008300AFC1B3FF0F01FAF +:105AC0000036FAE80028F01F0035FAEA002830080E +:105AD000FC194024E08100E8413C083CC6E4F01F8A +:105AE000002C3008FAEB0028FC194024FAEA0008E0 +:105AF000F01F0027FAEB0008CC3B40850805F208B0 +:105B0000023A5135FAE800284085F01F0021FAEBEF +:105B10000028FAEA0008F01F0024516CF01F001B57 +:105B200014981699FAEA0008F01F001BFAEB000817 +:105B300041682D080AC8413C1835C3713008FC196A +:105B40003FE0FAEA0028F01F00134085FAE8000859 +:105B50000805F01F0012E08100A7FAE80028300ACB +:105B6000FC1B3FE0F01F000C14981699FAEA00089D +:105B7000F01F000AC22033090A98117AF20A1800AD +:105B8000E08102F21095CF9B80036E52800369A4DE +:105B900080036D1880036B7C80036FC08003F38CDF +:105BA0008003702880036E243008FC194024F01F05 +:105BB0000056FAEB0008CAEBFAEA003CFAEB0008E0 +:105BC00058E65FAB418A3008F40911FFF7E903F9A1 +:105BD000F0091800E080008140EA58015FA9F3EA6B +:105BE00003F94CAAF4060234FAE50010F009180093 +:105BF000C1405801E081018A3008FC194014089A1C +:105C00000A9BF01F0041FAE80008F01F0041E08104 +:105C1000017D0292E08F018540853014FAE8001082 +:105C2000FAEA0008F01F003BF01F003B1892F01F3B +:105C3000003BFAE80010F01F003414981699FAEAB5 +:105C40000008F01F0037FAEB0008E4C8FFD00AC8CC +:105C5000FC19402430080234C331FAE80008F01F70 +:105C600000311691149014980299FAEA0010F01F6E +:105C7000002EC1A1FAE80010009A029BF01F002B31 +:105C8000E0800271E5D2C001C0F1E08F026C408A71 +:105C90001438C0301095C098330840892FF6B28868 +:105CA0004088C088406633990A98117AF20A180031 +:105CB000CEF0506611892FF9B089E08F0255F01FA0 +:105CC00000122FF4FAEB000830083009F01F00171B +:105CD000CA60E08F024840D85808C0510498009527 +:105CE00040D4C4A840C55815E08900224174580426 +:105CF000C040F4C9FBCDC0484199F209113604985F +:105D00000095C2F8800369A48003F38C80036F5868 +:105D10008003702880036E2480036E5280036B7CA6 +:105D200080036D1880036FC080036F32E2C80001EA +:105D30005801E0051740E2091740E1D1E515F9B92E +:105D400005001032E5D8E418F1D2E518E5D8E502EF +:105D5000FBFC5011F9D8E50CFBFC5A11F9B8050011 +:105D6000404B120B5008504B1200301B0E9CF01F82 +:105D7000010840081894404A58055F99580A5F9AEC +:105D8000F5E90009C080404CF8050D49121C1210BD +:105D9000504C12155802E08A002740DB580BC1D046 +:105DA0005808E08A0017109A5008089B0E9CF01FB4 +:105DB00000F9069A189B18940E9CF01F00F718998A +:105DC000069B50190E9CF01F00F5401940081293D5 +:105DD000E408010AC080C028049A069B0E9CF01FAC +:105DE00000ED1893301B0E9CF01F00E9411A189229 +:105DF000580AE08A0007189B0E9CF01F00E61892D4 +:105E000040C95819E089001440385808C101402998 +:105E1000F1D9C014C0C11298E6187FF0C080404C80 +:105E2000301B2FFC2FF0504C506BC038300A506A9A +:105E300041195809C031301CC09864482FC8E40883 +:105E4000032CF01F00D7F80C1120404BF80B000872 +:105E5000F1D8C005C0C0F00811205848E08A0006FB +:105E60002048100B504BC0785848C070404A2E480C +:105E7000100A504A100010055800E08A0008069BDE +:105E8000009A0E9CF01F00C7189340495809E08AF9 +:105E90000008049B129A0E9CF01F00C21892414801 +:105EA0005808C1B0049B069CF01F00BFC164069B4C +:105EB000300930AA0E9CF01F00BD2016189340DC5C +:105EC000580CC0314091C098089B4091300930AACD +:105ED0000E9CF01F00B6189458015FA940CB582BB8 +:105EE0005F98F3E80008C2505801C111049B029961 +:105EF000305A0E9CF01F00AD1892189B069CF01FA4 +:105F000000AAE089000FC0383002049440EA30094A +:105F10005CDA4085506A5049C0F9089240660494A2 +:105F20002FF65066331840850AC830085048C049DB +:105F300040DC580CE08000B55805E08A0008089B5A +:105F40000A9A0E9CF01F00971894406B580BC031B2 +:105F5000089CC138681B0E9CF01F0095684A189574 +:105F6000E8CBFFF42FEA2F4CA36AF01F00920A9BA4 +:105F7000301A0E9CF01F008B5044403A3019F5DA6D +:105F8000C001189450DA40855099502650E1049B86 +:105F9000069CF01F0089404BF8C0FFD0069CF01F04 +:105FA0000082089A506C049B0E9CF01F008418918C +:105FB00078385808C0303016C068189B069CF01F0F +:105FC000007A18960E9C029BF01F007440CCEDECFA +:105FD0001008C0D140DB580BC0A14026E04000397A +:105FE000C300406A580AE0890024C2F84069580991 +:105FF000C085129840CC1848C1D140DB580BC1A1D4 +:106000000C9940265809E08A0021069B301A0E9C04 +:10601000F01F0064049B1893F01F0063E0890006E2 +:10602000C141EDB00000C111E0400039C0A02FF027 +:10603000C0C85806E08A000C4026E0400039C04144 +:1060400033980AC8C6782FF00AC0C7580AC0409AC9 +:1060500040E9123AC430069B300930AA0E9CF01F6A +:106060000053404818930838C091109B300930AA5B +:106070000E9CF01F004E504CC0E8404B300930AA37 +:106080000E9CF01F004A089B504C300930AA0E9C11 +:10609000F01F00461894409C2FFC509CC79B301862 +:1060A0000690408508930C941096049B009CF01F6A +:1060B00000422D0C0ACC0236C0A4009B300930AA45 +:1060C0000E9C2FF6F01F00391890CF0B0896300B5E +:1060D0000694504B00931890C0284026069B301A17 +:1060E0000E9CF01F0030049B1893F01F002FE089D6 +:1060F0000012C1B1E1D0C001C0D1C17840891238CD +:10610000C0301095C0882FF650663318408CB88880 +:10611000C138339A0A981179F4091800CF002FF981 +:10612000B089C0981095C02833090A98117AF20AEC +:106130001800CF905066049B0E9CF01F0018580466 +:10614000C120404B083B5F19580B5F18F3E800086B +:10615000C0400E9CF01F0011089B0E9CF01F000F0A +:10616000C02850660E9C069BF01F000C3008AA88C1 +:106170004068415A2FF841299508408C5809FBF88E +:106180001012F1F51A002E6DD8320000800368005D +:10619000800368A0800366F88003642080036300A6 +:1061A00080036664800363EE80036818800364588C +:1061B0008002E736800354088003658C5EFC5EFC39 +:1061C000D42118961697580BC0311695C508F01FA4 +:1061D00000295806C0706C685808C0410C9CF01F1C +:1061E00000264A681037C0316C07C0A84A481037EB +:1061F000C0316C17C0584A381037EDF700028E696D +:106200003008F0091900C051F01F001F3005C2F816 +:106210000E9B0C9CF01F001D6EC818955808C0609E +:106220006E8B0C9C5D18F9B505FF8E68EDB8000704 +:10623000C0516E4B0C9CF01F00166EDB580BC0A0BB +:10624000EEC8FFBC103BC0400C9CF01F0011300892 +:106250008FD86F2B580BC0700C9CF01F000D3008AE +:10626000EF4800483008AE68F01F00070A9CD822AB +:1062700080031E7480031F388003EF2C8003EF4CD3 +:106280008003EF6C80031E7680031D2C8003217C2D +:10629000D4014848189B700CF01F0003D80200007E +:1062A00000000598800361C0D42116981897109CAF +:1062B00030084876149B8D08F01F00065BFCC05127 +:1062C0006C085808EFF81A03D822000000008CC4AC +:1062D0008002F198D42116981897109C3008149BCE +:1062E0004866129A8D08F01F00065BFCC0516C08CE +:1062F0005808EFF81A03D82200008CC48002F1205D +:106300001898E01C0000F0091510580CF20817004E +:10631000F9BC0010F9BC0100109AF0091508E61A42 +:10632000FF00F7BC00F8F2081700109AF0091504F6 +:10633000E61AF000F7BC00FCF2081700109AF0090A +:106340001502E61AC000F7BC00FEF2081700580854 +:106350005E5CEDB8001EF9BC0120F7BC00FF5EFCDE +:1063600018997808F9D8C003C150EDB80000C021D1 +:106370005EFD109BF00A1601E21B0002A388580B79 +:10638000F3FA1A00F9BC0101F3F80A00F9BC0002A3 +:106390005EFCF5D8C010F00B1610580AF60817006E +:1063A000F9BC0010F7D8C008F00A1608580BF7BC63 +:1063B00000F8F4081700F7D8C004F00A1604580BC8 +:1063C000F7BC00FCF4081700F7D8C002F00A160268 +:1063D000580BF7BC00FEF4081700EDB80000C060D1 +:1063E000A198C031320C5EFC2FFC93085EFCD401F6 +:1063F00018987649784C121CC1312FB9A369120B39 +:10640000F00900092EC8134E174A143EC060F9BCAB +:1064100003FFF9BC0201D8021039FE9BFFF6D80237 +:10642000D4211897169578965806C091310CF01F14 +:10643000000A99368F9C9916992699065805C0909E +:106440006A196E987038F009032A8B0AF009092539 +:10645000D82200008002E2A4D421189716967895DD +:106460005805C091310CF01F001999358F9C991572 +:10647000992599056E956A385808C0B1310A304B94 +:106480000E9CF01F00138B3C6E98703C580CC1B0F2 +:106490006E987038F0060028700C580CC0407809CF +:1064A0009109C0E80E9C30170E9BEE060947EECA14 +:1064B000FFFBA36AF01F0006C060991699273008F9 +:1064C00099389948D82200008002E2A48002DC5466 +:1064D000D431202D1693129610951492301BF01F74 +:1064E0000029F3D3C0145009F1D3C01FF0011614D2 +:1064F000FC1A0010F3DAE139FBF91A00189458027B +:10650000C1E0FACCFFF818D2F01F001F4018C0D02D +:106510004009F80A1120F20A094AF5E810088958DA +:10652000F20C0A495009C028895840085808F9B3A4 +:106530000102F9B3000189688943C0981A9CF01FD1 +:106540000012301340082E0C894389585801C0901E +:10655000E2C1043318018D01F80C11358B0CC0D841 +:10656000E6C8FFFCF8CC0432A5738D0CE808032CB8 +:10657000F01F000618138B03089C2FEDD832000083 +:10658000800364588003636080036300D4317448DF +:106590007645169714961015C1312FB8EECEFFEC44 +:1065A000A368F408000BEE080008114A1749123AD4 +:1065B000C030C0E2C0781C38FE9BFFF9C4A8580563 +:1065C000C0640E9830150C971096C02830056E1BCD +:1065D000F01F00246E496C4499352FB4F2C5FFFBBF +:1065E000EC040024EE0500252EC62EC7F8C8FFECEB +:1065F000300A0F0E0D0BFC021610F6031610FDDE0E +:10660000C010E4030103F7DBC010FC0B010BF60A1A +:10661000000AB01AB14AE60A000AB00A2FC8B14A05 +:106620000836CE83C0D80F0BF60E1610F7DBC0105D +:10663000160AB01AB14A1C0AB00A2FC8B14A0A3762 +:10664000CF33C0282019114A580ACFD09949D832DF +:10665000300BF01F00043018994830089958D83290 +:1066600080036458D43116977646F40214052FF649 +:10667000149318940406761B6E28C0382FFBA1785B +:106680001036FE99FFFD089CF01F001A300918957E +:10669000F8C8FFEC129AC03810AA2FF90439CFD5E8 +:1066A0006E4BE7D3C0052FBBEEC9FFECEE0B002B02 +:1066B0005803C130E60C1120300A7202E40309428B +:1066C000044A10AA130AF40C0A4A1639CF73910A25 +:1066D000580AC0702FF6C058130A10AA1639CFD323 +:1066E000089C20160E9B8B46F01F00030A9CD83294 +:1066F0008003645880036420D431202D7649744887 +:10670000169614951039EC081750EA061750F00544 +:1067100017506C2876437442761BE4030007103749 +:10672000F7BB09FFF01F0036EEC4FFFBF8C9FFEC12 +:10673000F8040024300A1298C02810AA0838CFE3C1 +:106740002FB32FB2EC030023EA020022ECCBFFECC4 +:106750005012EACAFFECC44894955805C20012983A +:106760001696300E50090D02E400161070017009E3 +:10677000B181E5D2C010E0050341AB32E1D9C010D0 +:106780000002E40E000EB01EB18E1C01B001E20E3C +:1067900016102FC80636CE834009910E94865806EF +:1067A000C1D072021298169E3005B0121D0190825F +:1067B000E1D1C010AD30E0020002E4050005B005F3 +:1067C000B185B1812FC8AD319092E20200020A0278 +:1067D000E4051610063ECEA391022FCA2FC9401819 +:1067E000103ACBB3C02820175807E08A00050948A3 +:1067F0005808CFA099472FEDD83200008003645885 +:10680000D4211697301BF01F00043019995799496D +:10681000D822000080036458D431300812951697AE +:1068200018967644F6C9FFEC720BF60C1610F7DBDF +:10683000C010F40C024CF40B0345F7D5C010B18521 +:106840001805EA0C1510F80B000B12AB2FF8B185E8 +:106850000838CEB55805C1D06E281034C1456E1B1E +:106860000C9C2FFBF01F000C6E4AEECBFFF418932C +:106870002FEA2F4CA36AF01F00090E9B0C9CF01FFF +:1068800000080697E8C8FFFF2FB48F48EE040925DB +:106890000E9CD832800364588002E736800364205F +:1068A000D431149618971694F1DAC002C0902018CB +:1068B0004A19F208032A3009F01F00201894A34651 +:1068C000C3706E955805C091310CF01F001D9935AD +:1068D0008F9C9915992599056E9366255805C0D109 +:1068E000E06B02710E9CF01F0017872C3008189582 +:1068F0009908C038069C1895EDB60000C0C1089BE9 +:106900000A9A0E9CF01F0010089B18930E9C069488 +:10691000F01F000EA156C0C06A035803CEC10A9AE8 +:106920000A9B0E9CF01F00088B0C9903CE5B089C01 +:10693000D83200008003F380800368188002E2A44C +:1069400080036800800366F880036420D4211698D1 +:106950001897109C3008149B4866129A8D08F01FF7 +:1069600000065BFCC0516C085808EFF81A03D822E7 +:1069700000008CC48002F1381498FC197FF0F5DB1C +:10698000C01FF00B1100F7E81008F5E813F8F20843 +:106990000108F00C1100F9E81008F00C141F2FFC8E +:1069A0005EFCD703F5EB101CE08000DCD421F7E996 +:1069B000200EEFDBC28B3015C430AB6BF7EA136BE4 +:1069C000AB6AF7D5D3C2EDD9C28BC5C0A1785CF94B +:1069D000F3D5D2ABE04707FFC770E04607FFC740DB +:1069E000EE06000CE02C03FEF6080644F40907440A +:1069F000F4080646F609064A0807F405004A5C0B47 +:106A0000EDBB0014C050A1775CFA5CFB201C580C55 +:106A1000E08A006FE04C07FFE084009CF7DCD28B3B +:106A2000EDEA11F6EFE61217EE178000F1B7042039 +:106A30000E0A5C0BEDBE001FEFBB001FD822E41B4B +:106A4000000FF40C1200F6061200F7BC03E1F80682 +:106A50001730F7B60201E0460020C0D4EC0C11203C +:106A6000F606094BF40C0A4C184BF406094A20B6FA +:106A70000C17CAABF406094BC640300A20B60C17F7 +:106A8000CA3BE419000FF00C1200F2051200F7BC2B +:106A900003EAF8051730F7B5020AE0450020C0D434 +:106AA000EA0C1120F2050949F00C0A4C1849F005CE +:106AB000094820250A16C8FBF0050949C4203008FA +:106AC00020250A16C88BE419000FE41B000F144B95 +:106AD0001049E04707FFC091580BC381E04607FF0C +:106AE000C3815809C360C3285809C330C2F85C3C4D +:106AF0002FFCF1BC04C0E04C0020C114F8081120A8 +:106B00000E46EE0C0A47F40809491247F40C0A4AEB +:106B1000F6080949124AF60C0A4BC83BF80811203E +:106B2000F9B90000C030F60809490E46EDEA101622 +:106B3000F40C0A4AF3EA1007F60C0A4A300BC71B9A +:106B40001C9BE61B8000300AD8223FFB3FFAD8226C +:106B5000F06B0000EDBE001FEFBB001F300AD82213 +:106B6000F7E9200BE61B8000F9D9C28BE04C07FF48 +:106B70005E1C3FFA3FFB5EFCEE198000F7E9200C3B +:106B8000E08600CAEBCD40E0169CE61C8000BFDB2F +:106B9000BFD9103AF20B1300C0921697129B0E99B0 +:106BA0001497109A0E98EE1C8000F6071614AB7B13 +:106BB000F7EA135BAB7ABFBBF2061614C440AB799D +:106BC000F3E81359AB78BFB9E04707FFC4F00E26CE +:106BD000C120EC051120E0460020C7C2F005094E97 +:106BE000F2050945F0060A48F2060A490A48580E15 +:106BF0005F1E1C48101AF609014BF6061200C0E091 +:106C0000C783EC0E1120F606094BF40E0A4E1C4BFE +:106C1000F406094A0C17E08A0039F4091515AB9AF5 +:106C2000F5EB115AAB9BF7D7D28B184BFC178000B2 +:106C3000EDBA0000F7B701FF0E395F29120A5C0BAD +:106C4000E3CD80E0AB79F3E81359AB78F3E8100EAD +:106C5000F9B60101EE0E1100F9B70001EFBB001FFC +:106C6000F7EA100EF9B70000CB0BBFDBF7EA100E06 +:106C7000C081E04607FFC050F9E7114BE3CD80E04B +:106C80003FFA3FFBE3CD80E05C372FF7F1B704C05C +:106C9000E0470020C114EE081120F40809495F16EE +:106CA000F4070A4A0C4AF6080949F5E9100AF407FC +:106CB0000A4B3007CB3BEE081140F608094914494E +:106CC0005F16F6070A4A0C4A300B3007CA7BE3CD41 +:106CD00080E0F1B604C0F00E1700C040F205094E86 +:106CE000104EF2060A483009580E5F1E1C48C83B79 +:106CF000F4061200F9B70300F9B60300F9BC03006B +:106D0000F7B602E0F406094B300A0C17FE9AFFBEF4 +:106D1000C85B0000EE198000F7E9200CFE96FF2EFC +:106D2000EBCD40E0169CE61C8000BFDBBFD9123BD8 +:106D3000C0721697129B0E991497109A0E98300EE7 +:106D4000EFDBC28BF7DBC014B5ABEDD9C28BC5F05E +:106D5000F3D9C014B5A9E04707FFC2500E26C0F012 +:106D6000EC051120E0460020C352F005094EF20563 +:106D70000945F0060A48F2060A490A48100AF609C7 +:106D8000004BEDBB0015C340F7D7D28B184BF9DA97 +:106D9000C001184EEE1E8000F1BE04201C0A5C0BE0 +:106DA000E3CD80E0B5CBF7EA100EC101E04607FF66 +:106DB000C030E3CD80E0B5C9F3E8100EC071300AF1 +:106DC000FC1B7FF0184BE3CD80E03FFA3FFBE3CDA7 +:106DD00080E0F1B604C0F00E1700C060F205094E65 +:106DE00058085F18104EF2060A483009CC8BFDEEA9 +:106DF000101EA19B5D0A5D0E2FF7E04707FFF9BA51 +:106E00000000F9BB0000F9BE0000CBFB30165807AC +:106E1000CA31B5CB100AF609004B184BE3CD80E020 +:106E2000580B5E6DF60C1501B59CE02C03FF5E3D22 +:106E3000F80C111F1699AB7BBFBBF7EA135BF60C7E +:106E40000A4BA1795E2B5C3B5EFBF8CB0000300C5B +:106E5000C038189B5C4B300A5E0BD401E069041EFD +:106E6000F6081200C170C0C3F00E1120F608094BDD +:106E7000F40E0A4E1C4BF408094A1019C0B8F40865 +:106E80001200F9B80300F7B802E0F408094B300A21 +:106E900010195809E08900305C392FF9E0490036B3 +:106EA000C043300B300AC2682F69F2081120E04954 +:106EB0000020C0B2F408094EF6080948F4090A4A4D +:106EC000F6090A4B104BC088F608094E144E169A64 +:106ED000300BF4090A4AEDBA0000C0921C7EC04192 +:106EE000EDBA0001C0422FFAF7BB02FF5CFC5D0B5C +:106EF0005D0AD802E06803FFEDBA000BF7B800FFA7 +:106F0000100A5C0BF7B903FEE04907FFC055300AD1 +:106F1000FC1BFFE0C0C8EDBB001FF7B90101AB9A35 +:106F2000F5EB115AA17BAB9BF7E9115BA17C5D0BE3 +:106F3000D802103AF20B1300C080A17BA179144B48 +:106F4000124B104B5E0F5EFDA17BFC1CFFE0580A4C +:106F5000F80B13005E8F5EFD1ADE1AD7A17B5F3C33 +:106F6000A1795F375CFCFC1EFFE0580AFC0B1300A4 +:106F7000E08B001D5808FC091300E08B0018580B2B +:106F8000F5BA0000C1501B071B0E583CC0A0581C8E +:106F9000C0335E0F5E1D103AF20B13005E2F5E3D94 +:106FA0001438F60913005E2F5E3D1B07D80A5817E8 +:106FB0005F0C5809F5B800001B071B0E5E0F5EFC46 +:106FC0001ADE1AD7A17B5F3CA1795F375CFCFC1EFF +:106FD000FFE0580AFC0B1300E08B001D5808FC0969 +:106FE0001300E08B0018580BF5BA0000C1501B07C6 +:106FF0001B0E583CC0A0581CC0335E0D5E1F103ADB +:10700000F20B13005E2D5E3F1438F60913005E2D5F +:107010005E3F1B07D80A58175F1C5809F5B80000D7 +:107020001B071B0E5E0D5EFCEBCD40FFF7E9200E4B +:10703000F6071614A97BF7EA137BA97ABDBBE41BFC +:107040003FFFABD7E08000CCE04707FFE08400B50E +:10705000F2061614A979F3E81379A978BDB9E419F1 +:107060003FFFABD6E08000E2E04607FFE08400B2DD +:107070000C17FE37FC01FC1C8000F8031601E9D94F +:10708000C3625CD4E7D4D382E6090644F80501253F +:10709000E6050644EA031502E6090644F80501255B +:1070A000E6050644EA031502E6090644F80501254B +:1070B000E6050644EA031502E6080640E40907402F +:1070C000E609064402045C05A365EBE413E5A3644A +:1070D0005C34F8050145E6040640E4050740E60592 +:1070E000064402045C05EA031502E7E413E3E80240 +:1070F0001502E6080640E4090740E60906440204D2 +:107100005C05A365EBE413E5A3645C34F805014575 +:10711000E6040640E4050740E605064402045C0573 +:10712000EA031502E7E413E3E8021502E60A064063 +:10713000E40B0740E60B064202025C03EDB3001CC1 +:10714000C090A1725CF32017A39AF5EB11DAA39B10 +:10715000C058A58AF5EB11CAA58B5807E08A008BA9 +:10716000E012FF00E8120080E6080640E40907404C +:10717000E4080644E60906480005F00100485C09F9 +:10718000F9D2C10158045C25F4081300F609130074 +:107190005F36F8061700E40A1608F5E3118AE60BD5 +:1071A0001608F7D7D28BEDBE001FEFBB001F0C0AED +:1071B0005C0BE3CD80FFE41B000F144BE08100A7C4 +:1071C000F2061614ABD6E04607FFE08100A4C9E83A +:1071D000E419000F1049E081009AC928A37BF7EA5F +:1071E00013DBA37AF5EB1004E08000A0F604120094 +:1071F000C170C0C3E8051120F604094BF4050A4527 +:107200000A4BF404094A0817C0B8F4041200F9B490 +:107210000300F7B402E0F404094B300A0817A38A0C +:10722000F5EB11EAA38BC11BA379F3E813D9A3787B +:10723000F3E81004C6F0F2041200C170C0C3E80500 +:107240001120F2040949F0050A450A49F0040948E9 +:107250000816C0B8F0041200F9B40300F7B402E055 +:10726000F004094930080816A388F1E911E8A38958 +:10727000CFCA5C372FF7F1B704C0E0470020C154F4 +:10728000EE061120E4070A42E606094C1842E6071A +:107290000A43F4060941F4070A4AF606094C184A5B +:1072A000F6070A4B3000C158EE061120F9B0000075 +:1072B000F9BC0000C050F4060940F606094CE60788 +:1072C0000A423003F4070A411841F6070A4A300B14 +:1072D000E012FF00E8120080E6080646E4090746CF +:1072E000E4080644E60906480C05F00700485C0976 +:1072F0003007F9D2C1010034E2051300C46B1C9BB6 +:10730000E61B8000300AE3CD80FF3FFB300AE3CD6F +:1073100080FFF5EB1004C0901C9BE61B8000EA1B6D +:107320007FF0300AE3CD80FFF1E91015CEF0E9D906 +:10733000C28BE04407FFCE41F1E910C5CE10CE6B01 +:10734000D4311A97202D109C1295149E16931696E0 +:107350005809C4411638E088005AF0081200C0D01D +:10736000F6080946F808094CF00B1120F408094EFC +:10737000F40B0A4BF7E61006F80A1610EBDCC01007 +:10738000EC0A0D02FC091610EA02024BF3E31109A4 +:10739000123BE08800091809123CE08B0005123B03 +:1073A000F3DCEB09F20B010BFDDEC010F60A0D0A4F +:1073B000FDEB110EEA0A024A1C3AE0880009180E99 +:1073C0001C3CE08B00051C3AFDDCEB0EFC0A010ABC +:1073D000300BF4080A4A2FEDD8321639FE9BFFFD18 +:1073E000F2091200C46114385F8B06355F3AF7EA80 +:1073F000100AF20A1800C060FC08010AE6050146FE +:10740000149E0C9B1C9A2FEDD8325808C05130198D +:10741000F2080D08109CF8081200E0810084EC0CC2 +:10742000010BF8031610EBDCC010F6030D0AFC0983 +:107430001610EA0A024AF3EB1109123AE088000931 +:107440001809123CE08B0005123AF3DCEB09141921 +:10745000FDDEC010F2030D02FDE3110EEA02024A46 +:107460001C3AFE98FFB5180E1C3CFE9BFFB1CACB20 +:10747000F20E1120EA090945F609094BE60E0A4306 +:10748000F0090941F4090942F00E0A48F40E0A4ACB +:107490000A48164AF0061610F9D8C010E6060D0480 +:1074A000F4031610089BE7E51103E80C02450635C6 +:1074B000E0880007201B10030638E0880072F5DA28 +:1074C000C0100A13E6060D04F5E51106E80C024C9F +:1074D000089A0C3CE0880007201A10060C38E08857 +:1074E000005AF5EB110B1816F601064A149C1636D5 +:1074F000C0735F0514325F3AEBEA000AC060F8011E +:107500000104F608014B089CE40C010AEC0B01464F +:10751000EC090A4BF4090A4AEC0E09460C4A2FED15 +:10752000D832F0011120F4010A4BF808094CEC089C +:107530000949EC010A41F7E91009F8031610EBDCE0 +:10754000C010E2030D00F20B1610EA00024EF7E144 +:10755000110B163EE0880006180B163CE088002749 +:10756000F60E0101F3D9C010E2030D00F3E1110999 +:10757000EA00024B123BE08800091809123CE08B3C +:107580000005123BF3DCEB09F20B010BF408094E8A +:10759000C4DB0C3CF7BA0B01EDD8EB06CA3B063551 +:1075A000F7BB0B01E7D8EB03C8BB163EF7DCEB0BD0 +:0275B000CD8B81 +:10760000C0080000C0080000C0080000C00800005A +:10761000C0080000C0080000C0080000C00800004A +:10762000C0080000C0080000C0080000C00800003A +:10763000C0080000C0080000C0080000C00800002A +:10764000C0080000C00800000000000000000000AA +:10765000C008000000000000000000000000000062 +:10766000C008000000000000000000000000000052 +:10767000C008000000000000000000000000000042 +:1076800000000000000000000000000000000000FA +:1076900000000000000000000000000000000000EA +:1076A00000000000000000000000000000000000DA +:1076B00000000000000000000000000000000000CA +:1076C00000000000000000000000000000000000BA +:1076D00000000000000000000000000000000000AA +:1076E000000000000000000000000000000000009A +:1076F000000000000000000000000000000000008A +:10770000C0080000300CF01F0012580CF80F1710C2 +:10771000D603301CF01F000E580CF80F1710D603BC +:10772000302CF01F000B580CF80F1710D603303C0C +:10773000F01F0007580CF80F1710D60300000104C3 +:107740004000011280000120C000012E8000A41C16 +:107750000000000000000000000000000000000029 +:107760000000000000000000000000000000000019 +:107770000000000000000000000000000000000009 +:1077800000000000000000000000000000000000F9 +:1077900000000000000000000000000000000000E9 +:1077A00000000000000000000000000000000000D9 +:1077B00000000000000000000000000000000000C9 +:1077C00000000000000000000000000000000000B9 +:1077D00000000000000000000000000000000000A9 +:1077E0000000000000000000000000000000000099 +:1077F0000000000000000000000000000000000089 +:1078000073656E645265706C790000006765745F23 +:10781000646174615F7463705F636D645F63620071 +:107820006765745F7265706C795F686F73745F62AF +:10783000795F6E616D655F63620000006765745F0C +:107840007265706C795F7363616E5F6E6574776F7C +:10785000726B735F636200006765745F7265706C62 +:10786000795F6964785F6E65745F63620000000031 +:107870007365745F706173737068726173655F6361 +:107880006D645F63620000007365745F6B65795FB0 +:10789000636D645F6362000063616C6C5F7265704E +:1078A0006C795F6362000000617661696C5F64619E +:1078B00074615F7463705F636D645F636200000096 +:1078C0007365744D6170536F636B4D6F6465000039 +:1078D0006765745374617274436D6453657100001D +:1078E0007365745F6E65745F636D645F63620000EF +:1078F0007365745F69705F636F6E6669675F636D00 +:10790000645F63620000000073656E644572726FAD +:107910007200000073746172745F736572766572D1 +:107920005F7463705F636D645F6362007370695F4F +:10793000736C61766552656365697665496E74003E +:107940006765745F636C69656E745F737461746599 +:107950005F7463705F636D645F63620073656E6420 +:107960005F646174615F7564705F636D645F6362BF +:1079700000000000636865636B4D7367466F726D4E +:107980006174000073746172745F7363616E5F6E23 +:1079900065745F636D645F6362000000666F756E9F +:1079A00064486F737442794E616D65007365745FEE +:1079B0006B65795F636D645F63620000696E697413 +:1079C0005370690073746172745F636C69656E747F +:1079D0005F746370000000007370695F706F6C6C9F +:1079E000000000006765745F726573756C745F6397 +:1079F0006D645F636200000073746F705F636C6935 +:107A0000656E745F7463705F636D645F63620000D2 +:107A100073746172745F7365727665725F7463709C +:107A2000000000007365745F706173737068726149 +:107A300073655F636D645F63620000007365745F0C +:107A4000726573756C745F636D6400007365745F59 +:107A5000646E735F636F6E6669675F636D645F63B7 +:107A6000620000006765745F73746174655F7463BE +:107A7000705F636D645F6362000000007265715F38 +:107A80007265706C795F686F73745F62795F6E6145 +:107A90006D655F636200000073746172745F636C94 +:107AA00069656E745F7463705F636D645F636200C9 +:107AB000572D5B25735D2057726F6E67207465725A +:107AC0006D696E6174696F6E20696E6465783A25C0 +:107AD00064206E506172616D3A2564206964783A61 +:107AE00025642031366269743A25640A000000007A +:107AF0003078257820000000572D5B25735D2049E4 +:107B00006E646578206F7574206F662072616E6791 +:107B1000653A2025640A00005B25735D20535349B4 +:107B2000443A25730A0000005B25735D20525353CD +:107B3000493A25640A0000005B25735D20454E43E9 +:107B4000543A25640A0000005B25735D205365618B +:107B5000726368696E6720666F7220486F73743A4B +:107B60002069703D3078257820666F756E643D25FC +:107B7000640A00005B25735D20666F756E64486F54 +:107B8000737442794E616D653A20466F756E64205C +:107B9000486F73743A206E616D653D25732069707E +:107BA0003D307825780A00005B25735D20696653B7 +:107BB00074617475733A256420726573756C743AD8 +:107BC00025640A004C69737420436F6D6D616E64A7 +:107BD000732066756C6C210A000000005245434515 +:107BE000495645005452414E534D4954000000003F +:107BF0005B25735D204D6170205B25642C20257012 +:107C00002C2025735D0A00005B25735D20535049CD +:107C100020696E697469616C697A6174696F6E203C +:107C20006661696C65642100572D5B25735D204595 +:107C300072726F7220636F6E6669677572696E67C4 +:107C4000205350490A000000572D5B25735D202505 +:107C5000645D20446973616C6C2E2025642F25645B +:107C600020636D643A25640A00000000572D5B25EF +:107C7000735D2025645D20446973616C6C2E202542 +:107C8000640A00005B25735D3A200000572D5B25D8 +:107C9000735D2025645D204E6F7420666F756E6481 +:107CA00020656E6420636D643A20307825780A0080 +:107CB0005B25735D2025732025640A00572D5B2505 +:107CC000735D20456E64206F6620636D6420706173 +:107CD00072616D73000000005B25735D2064617448 +:107CE00061417661696C3A25640A0000572D5B2575 +:107CF000735D2054544350206E6F7420666F756E10 +:107D00006420666F7220736F636B3A25640A00000B +:107D10005B25735D20736F636B3A25642073746118 +:107D200074653A25640A00005B25735D20737461F5 +:107D300074653A25640A00005B25735D2053746105 +:107D40007274204E6574776F726B205363616E207E +:107D500025640A00572D5B25735D206572723D25F1 +:107D6000640A00005B25735D204C6F6F6B696E6762 +:107D700020666F7220486F73743A206E616D653DA6 +:107D800025730A005B25735D20466F756E6420487D +:107D90006F73743A206E616D653D25732069703D87 +:107DA000307825780A0000005B25735D2053746FDE +:107DB0007020636C69656E7420736F636B3A256421 +:107DC0000A00000055445000544350005B25735D89 +:107DD00020416464723A307825782C20706F727478 +:107DE0003A25642C20736F636B3A25642C207072E3 +:107DF0006F743A25730A0000572D5B25735D205080 +:107E0000726576696F757320636C69656E74202581 +:107E100070206E6F742073746F7070656420210A17 +:107E2000000000005B25735D205374617274204371 +:107E30006C69656E74202573202570205B30782571 +:107E4000782C2025642C2025645D204F4B210A00CE +:107E50005B25735D20537461727420436C69656E99 +:107E600074202573202570205B307825782C202500 +:107E7000642C2025645D204641494C4544210A007C +:107E8000572D5B25735D205374696C6C20636F6E96 +:107E90006E65637465642E2E2E776169740A000026 +:107EA000572D5B25735D20494620646F776E2E2E1B +:107EB0002E776169740A00005B25735D205374613D +:107EC000727420536572766572202573205B256479 +:107ED0002C2025645D204F4B210A0000572D5B2587 +:107EE000735D2053746172742053657276657220DD +:107EF0002573205B25642C2025645D204641494C78 +:107F00004544210A000000005B25735D2025702098 +:107F10006E756D506172616D3D2564207061726D8A +:107F200073546F4368616E67653D25640A00000005 +:107F30005B25735D2025645D206E69663A2570209F +:107F40006C7769705F616464723D307825780A00EF +:107F50005B25735D20257320706172616D733D2513 +:107F6000640A00005B25735D20506173733A20251D +:107F7000732025640A000000572D5B25735D2025C2 +:107F800073203A204661696C656420746F206164D7 +:107F90006420706173737068726173650A00000019 +:107FA000436F6E6E65637420746F206E6574776FB7 +:107FB000726B2E2E2E0000006572723D25640A0041 +:107FC0004F4B0A00572D5B25735D205353494420C6 +:107FD0006C656E206F7574206F662072616E6765C8 +:107FE000000000005B25735D2025730A000000007F +:107FF000572D5B25735D2053656E642053504920D7 +:108000006572726F72210A003D3D3E003C3D3D00AD +:10801000572D5B25735D20556E6B6E6F776E2063F9 +:108020006D6420307825780A00000000572D5B250C +:10803000735D2025645D20436865636B20666F7205 +:108040006D6174206D7367206661696C6564210AD7 +:1080500000000000444F574E000000005550000043 +:1080600049462020207374617475733A2025730A81 +:1080700000000000434F4E4E207374617475733AD4 +:108080002025730A00000000536F636B6574206E37 +:108090002E3A256428256429205B307825785D20D8 +:1080A000257320257320616464723A257320706FF4 +:1080B00072743A25640A00005B2564207470637052 +:1080C0002D25705D2D5374617475733A25640A0013 +:1080D0005B746C63702D25705D2D537461747573C2 +:1080E0003A25640A000000005B757063702D2570EE +:1080F0005D20666C6167733A3078257820206C6F5C +:1081000063616C3A25735B307825785D2D25640AB0 +:108110000000000072656D6F74653A257328307831 +:108120002578292D25640A004E4F0000594553003B +:108130004461746120617661696C3A25730A0000BC +:108140002D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D5F +:108150002D2D2D2D2D2D2D2D2D2D2D2D2D2D0A009F +:108160005B25735D205363616E206E6F7420636FB7 +:108170006D706C65746564210A0000005B25735D99 +:10818000204E6574776F726B73206E6F7420666F0C +:10819000756E64210A000000636F756C64206E6F59 +:1081A0007420616C6C6F6361746520616C6C206716 +:1081B0007569206E65742061727261790A00000031 +:1081C000636F756C64206E6F7420616C6C6F63619B +:1081D000746520616C6C20677569206E6574730A24 +:1081E000000000005B25735D202564202D20257391 +:1081F000205B25645D2D202564202D202564202D05 +:1082000020307825780A000D000B000C000A0000D1 +:108210007365745F726573756C745F636D64000081 +:108220008000636C800063988000637E80006398A8 +:108230008000638E80006398800063648000639890 +:10824000800063688000638A800063786174637073 +:108250005F706F6C6C5F636F6E6E00007564705F53 +:10826000737461727400000072656D6F76654E659F +:1082700077436C69656E74436F6E6E0061756470F0 +:108280005F726563765F6362000000006765745328 +:1082900074617465546370006172645F7463705FCD +:1082A00073746F7000000000617463705F636F6EC1 +:1082B0006E5F6572725F6362000000006765744EF6 +:1082C0006577436C69656E74436F6E6E4964000038 +:1082D000617463705F636F6E6E5F636C695F65721C +:1082E000725F636200000000617463705F616363CA +:1082F0006570745F636200007564705F73746172AF +:10830000740000005B25735D20747463703A2570FF +:108310002069643D25642C20747063623D25700AD9 +:1083200000000000572D5B25735D204E6F205661C5 +:108330006C696420636C69656E7420666F7220746A +:108340007463703A25700A005B25735D2025645DB7 +:1083500020747463703A257020747063623A2570DB +:108360002073746174653A2564206C7063623A25E9 +:10837000702073746174653A2564206C6566743A84 +:1083800025642073656E743A25640A00572D5B25B9 +:10839000735D20544350206E6F7420696E69746958 +:1083A000616C697A656420747463703A2570207416 +:1083B0007063623A2570206C7063623A25700A001F +:1083C000572D5B25735D204E6F2056616C696420CC +:1083D000496420666F7220747463703A257020704F +:1083E00063623A25700A00005B25735D2062756642 +:1083F0003A2570206C656E3A25640A00572D5B257E +:10840000735D2054544350205B25705D3A20636FA8 +:10841000756C64206E6F7420616C6C6F6361746541 +:1084200020706275660A0000572D5B25735D20542D +:10843000544350205B25705D3A207564705F73650E +:108440006E642829206661696C65640A000000007A +:108450005B25735D2054544350205B25702D25709F +:108460005D3A20636F6E6E65637420256420256419 +:108470000A0000005B25735D206C6566743D256411 +:10848000206C656E3A25640A000000005B25735D70 +:10849000207463705F7772697465206661696C65CA +:1084A000642025702073746174653A2564206C65BE +:1084B0006E3A2564206572723A25640A0000000055 +:1084C000572D5B25735D2074746370203D3D204EF5 +:1084D000554C4C210A0000005B25735D20747463C9 +:1084E000703A2570207063623A2570206275663A92 +:1084F0002570206C656E3A25640A00005B25735D6B +:1085000020272573270A00005B25735D20506163D7 +:108510006B65742073656E74207063623A257020F9 +:108520006C656E3A2564206475723A2564206C652A +:1085300066743A25640A00005B25735D2054544339 +:1085400050205B25705D3A20636C65616E536F63EC +:108550006B53746174655F63622025640A000000D8 +:108560005B25735D20436C6F73696E672074706365 +:10857000623A2073746174653A30782578206572A8 +:10858000723A25640A0000005B25735D20436C6F1E +:1085900073696E67206C7063623A207374617465EE +:1085A0003A30782578206572723A25640A00000016 +:1085B0005B25735D2046726565696E672070617921 +:1085C0006C6F61642025642D25700A005B25735D46 +:1085D00020436C6F73696E6720747063625B2570F3 +:1085E0005D3A2073746174653A307825782065723D +:1085F000723A25640A000000572D5B25735D204305 +:10860000616E6E6F7420636C6F73652069643A25C8 +:10861000642D2570207075742070656E64696E67B6 +:108620000A0000005B25735D202D2D2D2D2D2D2D95 +:108630002D2D2D2D2D2D2D2D2D2D2D2D2D2D2D0A8D +:1086400000000000572D5B25735D2074746370205B +:108650003D204E554C4C210A000000005B25735D07 +:1086600020666C75736820646174613A207470636D +:10867000623A2570206572723A25640A0000000093 +:10868000572D5B25735D2054544350205B25705D4E +:108690003A20636F6E6E656374696F6E20657272E7 +:1086A0006F723A202564206375727249643A2564BA +:1086B0000A00000041626F727420636F6E6E656322 +:1086C00074696F6E0A000000572D5B25735D20549E +:1086D000544350205B25705D3A20636F6E6E656376 +:1086E00074696F6E206572726F723A202564206122 +:1086F00072673A25700A0000572D5B25735D205480 +:10870000544350205B25705D3A2066726565206D8C +:10871000656D6F72790A00005B25735D20554450CA +:1087200020496E7365727420257020736F636B3AF5 +:10873000256420616464723A257320706F72743A04 +:1087400025640A00572D5B25735D20545443502047 +:108750005B2D5D3A20696E76616C6964206D6F6493 +:10876000650A0000572D5B25735D2054544350204B +:108770005B2D5D3A20696E76616C6964206E62756E +:10878000660A0000572D5B25735D2054544350202A +:108790005B2D5D3A20696E76616C69642062756656 +:1087A0006C656E0A00000000572D5B25735D205438 +:1087B000544350205B2D5D3A20636F756C64206ECE +:1087C0006F7420616C6C6F63617465206D656D6F93 +:1087D000727920666F7220747463700A0000000062 +:1087E000572D5B25735D2054544350205B25705DED +:1087F0003A20636F756C64206E6F7420616C6C6FCF +:1088000063617465207063620A0000005B25735D1C +:108810002025732C20757063623A25702025733AE9 +:1088200025640A00572D5B25735D20545443502066 +:108830005B25705D3A2075647020636F6E6E6563B2 +:1088400074206661696C65640A000000572D5B2521 +:10885000735D2054544350205B25705D3A2062695B +:108860006E64206661696C6564206572723D256482 +:1088700020506F727420616C726561647920757329 +:1088800065640A005B25735D2025732C206C6F6383 +:108890003A307825782D25642072656D3A30782538 +:1088A000782D25640A0000005B25735D20416C6C07 +:1088B0006F63207061796C6F61642025642D257071 +:1088C0000A000000572D5B25735D2054544350204F +:1088D0005B25705D3A20636F756C64206E6F742049 +:1088E000616C6C6F63617465207061796C6F616439 +:1088F0000A0000005B25735D205B747063625D2D70 +:108900002570207061796C6F61643A25700A0000EF +:10891000572D5B25735D2054544350205B25705DBB +:108920003A2074637020636F6E6E656374206661B5 +:10893000696C65640A0000005B25735D2042454652 +:108940004F52452042494E4420747463703A25705A +:10895000206C7063623A2570207063623A25700A59 +:1089600000000000572D5B25735D205454435020B8 +:108970005B25705D3A206C697374656E2066616971 +:108980006C65640A00000000572D5B25735D205361 +:108990007461727420736572766572204641494C29 +:1089A0004544210A000000005B25735D20545443B8 +:1089B00050205B25702D25705D3A206E6275663DF6 +:1089C00025642C206275666C656E3D25642C2070D4 +:1089D0006F72743D2564202825732F2573290A00A2 +:1089E0007574726C3A6E3A703A7600002573000026 +:1089F0005B25735D2041524420544350205B257019 +:108A00005D3A20616363657074206E6577205B2535 +:108A1000705D0A005B25735D206C6F63616C3A25A5 +:108A2000642072656D6F74653A2564207374617497 +:108A3000653A25640A0000007061796C6F616420FA +:108A40006E6F74206672656564210000572D5B258A +:108A5000735D2041524420544350205B25705D20BB +:108A60006172673D257020726574726965733D257A +:108A7000642061626F72740A000000005B25735D00 +:108A8000206B656570416C697665436E743A256448 +:108A9000206B6565705F69646C653A25642070655C +:108AA00072736973745F636E743A25640A00000020 +:108AB0005B25735D2041524420544350205B257058 +:108AC0002D25705D206172673D257020726574727E +:108AD0006965733D25642070656E642E636C6F73E9 +:108AE000653A2564206C656E3A25640A0000000032 +:108AF0005B25735D2041524420544350205B257018 +:108B00002D25705D2074727920746F20636C6F73F3 +:108B1000652070656E64696E673A256420657272BF +:108B20003A25642069643A25640A00005B25735D78 +:108B30002041524420544350205B25702D25705D08 +:108B4000206172673D257020726574726965733D9E +:108B500025642070656E642E636C6F73653A2564BE +:108B600020636F6E6E3A25640A000000572D5B2566 +:108B7000735D2041524420544350205B25702D25C5 +:108B8000705D206172673D25702072657472696541 +:108B9000733D25640A0000005B25735D204152444B +:108BA00020544350205B25702D25705D2074727910 +:108BB00020746F20636C6F73652070656E64696EDE +:108BC000673A25640A0000005B25735D206C656EC2 +:108BD0003A25640A000000005B25735D20736F6313 +:108BE0006B3A2564207063623A2570207062756666 +:108BF0003A2570206572723A256420627566537456 +:108C00006F72653A2570206C656E3A25640A000023 +:108C10005B25735D20617463705F726563765F636B +:108C20006220703D4E554C4C206F6E20736F636B0D +:108C30003A2564207063623A25700A00572D5B253F +:108C4000735D206572723D256420703D25700A00B9 +:108C50005B25735D205265636569766564202570C8 +:108C6000206C656E3A25640A000000006174637030 +:108C70005F737461727400007463705F73656E6417 +:108C80005F646174615F70636200000061746370AF +:108C90005F706F6C6C000000617463705F7265637D +:108CA000765F6362000000006172645F7463705FEE +:108CB000737461727400000067657446697273743E +:108CC000436C69656E7400006172645F7463705F09 +:108CD00064657374726F7900636C6F73655F636F43 +:108CE0006E6E000073656E6455647044617461005B +:108CF000696E736572744E6577436C69656E744313 +:108D00006F6E6E0061636B5F726563766564000011 +:108D10007463705F636F6E6E6563745F636200009F +:108D200073656E645463704461746100636C6F7347 +:108D3000655F636F6E6E5F7063620000636C656198 +:108D40006E536F636B53746174655F636200000000 +:108D50007463705F646174615F73656E74000000BA +:108D600061636B416E6446726565446174610000C5 +:108D7000676574417661696C5463704461746142E3 +:108D80007974650066726565744461746100000001 +:108D9000676574546370446174614279746500005E +:108DA00063616C634D657267654C656E0000000021 +:108DB000696E73657274427566000000697341766E +:108DC00061696C5463704461746142797465000038 +:108DD00066726565744461746149647800000000DE +:108DE0005B25735D202570205B25642C25645D0A5E +:108DF00000000000686561644275663D256420746A +:108E000061696C4275663D25640A000025645D2039 +:108E10007063623A2570204275663A202570204CB6 +:108E2000656E3A25640A00005B25735D20205B2592 +:108E3000645D3A206C656E3A2564206964783A2551 +:108E40006420746F743A25640A0000005B25735D2A +:108E500020417661696C61626C6564206461746153 +:108E60003A2025640A000000572D5B25735D2069B8 +:108E70006478427566206F7574206F662072616E2B +:108E800067653A2025640A005B25735D2025702004 +:108E90006964783A25640A00572D5B25735D20428A +:108EA0007566203D3D204E554C4C21005B25735D81 +:108EB0002041636B207063623A2570206C656E3AC6 +:108EC000256420736F636B3A256420646174613A92 +:108ED00025700A005B25735D206765743A25642060 +:108EE00025702025640A00005B25735D206368659A +:108EF000636B3A25642025642025700A0000000079 +:108F00005B25735D2046726565202570206F74684F +:108F1000657220627566202564207461696C3A254B +:108F20006420686561643A25640A0000572D5B255A +:108F3000735D204F76657277726974696E6720621F +:108F40007566666572202570206964783A2564210B +:108F50000A000000572D5B25735D20706275665F07 +:108F6000636F70795F7061727469616C20666169AA +:108F70006C65643A207372633A25702C20647374B4 +:108F80003A25702C206C656E3A25640A00000000BA +:108F9000572D5B25735D2041766F696420746F20C7 +:108FA0004F76657277726974652064617461205BC5 +:108FB00025642D25645D210A000000005B25735D9A +:108FC00020496E736572745B25645D3A2025703AA2 +:108FD00025642D2564205B25642C25645D0A000032 +:108FE000572D5B25735D20536F636B206F75742065 +:108FF0006F662072616E67653A20736F636B3D2503 +:1090000064000000696E736572745F70427566007B +:109010006765745F70427566000000000000E10043 +:1090200008040000000000000F01110110011301ED +:109030000E01110110010F0106000500636D645F50 +:109040007365745F69700000636D645F736574704D +:1090500061737300636D645F7374617274436C69F0 +:1090600000000000466F756E6420486F73743A20EC +:109070006E616D653D25732069703D307825780AF5 +:109080000000000075736167653A206474203C310C +:109090007C303E0A0000000075736167653A2073FA +:1090A000656E64556470205B736F636B5D0A097352 +:1090B0006F636B3A20736F636B6574204E756D62DE +:1090C00065720A00536F636B65743A2025640A0069 +:1090D0005061747465726E547970653A2025640A23 +:1090E0000000000050726F766100000031323334AE +:1090F000353637383930000046696E65546573740B +:10910000000000006F6666004465627567204F4688 +:10911000460A00007072696E740000004465627552 +:10912000672009656E61626C65643A203078257845 +:109130000A000000566572626F736520656E616299 +:109140006C65643A20307825780A000044756D70AB +:109150002009656E61626C65643A20307825780A72 +:1091600000000000504F6F6C6C2009656E61626CEE +:1091700065643A20307825780A00000044656275FD +:1091800067204F4E0A00000075736167653A2064DE +:1091900065627567203C73656374696F6E3E203C41 +:1091A0006C6576656C3E0A0973656374696F6E3A27 +:1091B00020696E69742C20636D2C207370692C20DB +:1091C000746370202C207574696C2C207761726E2A +:1091D0000A096C6576656C20203A203020286F667D +:1091E00066292C203120286F6E292C2032202876E9 +:1091F0006572626F7365290A096F723A206465624D +:109200007567207072696E742F6F6E2F6F66660AB5 +:1092100000000000696E697400000000737069004E +:1092200074637000636D00007574696C0000000069 +:109230007761726E00000000616C6C0044756D70A7 +:1092400020416C6C20427566666572730A000000EE +:1092500075736167653A2064756D7050627566203C +:109260005B736F636B5D0A09736F636B3A20736F97 +:10927000636B6574204E756D6265720A00000000B4 +:109280006E6F6E650000000044656C6574696E6702 +:1092900020574550206B6579730A0000757361672C +:1092A000653A207365746B6579203C6B65795F69FD +:1092B00064782028302D33293E203C6B6579206965 +:1092C0006E206865783E0A09206F723A20736574D3 +:1092D0006B6579206E6F6E650A000000205745505F +:1092E000206B6579206D75737420626520313020A4 +:1092F000285745502D343029206F722032362028CF +:109300005745502D31303429206469676974730AD8 +:1093100000000000776C5F61706920766572736988 +:109320006F6E2076322E372E300A00006661696C2F +:10933000656420746F20676574206D6163206164CB +:1093400064726573730A0000687720616464723A1E +:109350002025730A000000006C696E6B2073746135 +:109360007475733A20000000697020616464723A79 +:10937000202573202D2000006E65746D61736B3A9B +:10938000202573202D200000676174657761793A8C +:109390002025730A00000000697020696E746572F0 +:1093A0006661636520697320646F776E0A00000050 +:1093B00064686370203A2000656E61626C65640ABF +:1093C0000000000064697361626C65640A0000005B +:1093D000444E533A202573202D2000007573616799 +:1093E000653A207374617274436C69203C697061E2 +:1093F0006464723E203C706F72743E203C736F63F5 +:109400006B3E203C7463702830292F7564702831BE +:10941000293E0A00537461727420636C69656E742E +:10942000206F6E206164647220307825782C207063 +:109430006F727420256420736F636B202564206D28 +:109440006F64652025640A00572D5B25735D2053EA +:109450007461727420636C69656E74206F6E207025 +:109460006F727420256420736F636B2025642070F5 +:10947000726F74202564206D6F646520256420461A +:1094800041494C45440A000075736167653A207391 +:1094900074617274537276203C706F72743E203C1B +:1094A000736F636B3E203C7463702830292F7564A2 +:1094B000702831293E0A00005374617274202573AC +:1094C00020736572766572206F6E20706F727420E3 +:1094D000256420736F636B2025640A00572D5B257C +:1094E000735D2053746172742025732073657276E6 +:1094F0006572206F6E20706F727420256420736F08 +:10950000636B202564204641494C45440A00000015 +:1095100075736167653A20736574646E73205B319F +:109520002D325D206161612E6262622E6363632E63 +:109530006464640A0000000053657420444E5320A4 +:1095400073657276657220256420746F2025730A16 +:10955000000000003D3D3E20444E53313A2025732B +:109560000A0000003D3D3E20444E53323A20257310 +:109570000A00000075736167653A20676574486F7B +:109580007374203C686F73746E616D653E0A0000F1 +:1095900075736167653A207770617373203C7373EC +:1095A00069643E203C706173737068726173653EDC +:1095B0000A0000002573203A204661696C6564202A +:1095C000746F20616464207061737370687261737A +:1095D000650A000075736167653A20647061737392 +:1095E000203C737369643E0A000000002573203A32 +:1095F000204661696C656420746F2064656C6574D5 +:109600006520706173737068726173650A00000091 +:1096100075736167653A206970636F6E666967206C +:109620003C69703E203C6E65746D61736B3E203CFE +:10963000676174657761792D69703E0A00000000EA +:1096400020206F72203A206970636F6E6669672010 +:109650006E6F6E652028746F20656E61626C652088 +:1096600044484350290A00005B25735D206E6966FB +:109670003A2570206C7769705F616464723D307860 +:1096800025780A0075736167653A20636F6E6E65B1 +:109690006374203C737369643E0A0000636D645F09 +:1096A000737461727453727600000000636D645FBE +:1096B00064656C70617373004D494D4C4644000005 +:1096C0000A24200024200000617661696C61626CCC +:1096D0006520636F6D6D616E64733A0A000000006F +:1096E000202025730A000000636F756C64206E6F84 +:1096F0007420616C6C6F63617465206669726D774C +:10970000617265206275666665720A00547565202F +:109710004D61722032362032323A30393A353420B7 +:109720003230313300000000776C5F696E69745F1E +:10973000636F6D706C6574655F6362006661696C10 +:10974000656420746F20696E697420776C20636F84 +:109750006E6E206D67720000572D5B25735D205380 +:109760007069206E6F7420696E697469616C697AC2 +:1097700065640A006C696E6B20646F776E2C2072D2 +:10978000656C6561736520646863700A00000000A1 +:109790006C696E6B20646F776E0A00006C696E6B8B +:1097A0002075702C20636F6E6E6563746564207421 +:1097B0006F20222573220A007265717565737469C2 +:1097C0006E672064686370202E2E2E20000000003B +:1097D0004641494C45440A00626F756E6420746FBF +:1097E0002025730A00000000572D5B25735D20497A +:1097F0006E74657266616365206E6F74207570218A +:109800000A0000007363616E00000000636F6E6EFB +:10981000656374007365746B6579000073746174BB +:1098200075730000646562756700000064756D7093 +:10983000427566006970636F6E66696700000000BC +:10984000747463700000000077706173730000002F +:109850006470617373000000676574486F7374000F +:10986000736574444E53000073746172745372765E +:10987000000000007374617274436C6900000000A2 +:1098800073656E645564700041726475696E6F2013 +:109890005769666920537461727475702E2E2E207C +:1098A0005B25735D0A0000006F7574206F66206D84 +:1098B000656D6F72790000006661696C6564207483 +:1098C0006F207072657061726520666F72206669C4 +:1098D000726D7761726520646F776E6C6F61640A78 +:1098E00000000000436F756C64206E6F7420646527 +:1098F0007465637420776C206465766963652C20D9 +:1099000061626F7274696E670A000000496E766169 +:109910006C6964206669726D776172652064617438 +:10992000612C2061626F7274696E670A000000002A +:109930004661696C656420746F2073746172742071 +:10994000776C20696E697469616C697A6174696F9A +:109950006E0A0000312E312E3000000069705F73F6 +:1099600074617475735F63620000000002000000A0 +:1099700000B71B000800000100010000286E756C94 +:109980006C290000253032782D253032782D253095 +:1099900032782D253032782D253032782D25303211 +:1099A00078000000256C752E256C752E256C752EA3 +:1099B000256C75007373696420746F6F206C6F6E13 +:1099C0006720286D6178202564290A00257320000E +:1099D00022257322000000002052535349202564A1 +:1099E0002064426D200000002041642D486F6320F8 +:1099F00000000000202857455020656E6372797082 +:109A000074696F6E290000002028544B495020656E +:109A10006E6372797074696F6E2900002028434369 +:109A20004D5020656E6372797074696F6E29000005 +:109A3000202020002530325820000000256300003F +:109A40006E6F206E65747320666F756E640A000019 +:109A5000496E76616C6964206C656E6774680A0093 +:109A600025642E25642E25642E256400544B495010 +:109A70000000000043434D500000000057455000D7 +:109A8000776C5F636D5F696E6974000073656C6508 +:109A900063745F6E65740000776C5F636F6E6E5FFA +:109AA0006C6F73745F636200776C5F7363616E5F8A +:109AB000636F6D706C6574655F636200776C5F6582 +:109AC00076656E745F636200776C5F6D6564696173 +:109AD0005F636F6E6E65637465645F636200000050 +:109AE0005B25735D20434D3A206F7574206F6620AF +:109AF0006D656D6F72790A005B25735D20434D3A89 +:109B000020636F756C64206E6F7420726567697373 +:109B1000746572206576656E742063620A000000C9 +:109B20005B25735D20434D3A20696E697469616CF1 +:109B3000697A65640A0000005B25735D20434D3A35 +:109B400020636F6E6E656374656420746F20257387 +:109B50000A0000005B25735D20434D3A20636F6E61 +:109B60006E656374206661696C65642C2073636143 +:109B70006E6E696E670A00005B25735D20434D3A87 +:109B800020636F756C64206E6F74207374617274DF +:109B9000207363616E20616674657220636F6E6E00 +:109BA000656374206661696C210A00005B25735D42 +:109BB00020434D3A20646973636F6E6E656374650C +:109BC000640A00005B25735D20434D3A20636F6E8D +:109BD0006E656374696F6E206C6F73742C20736391 +:109BE000616E6E696E670A005B25735D20434D3AB6 +:109BF00020636F756C64206E6F742073746172746F +:109C0000207363616E20616674657220636F6E6E8F +:109C1000656374206C6F7374210A00005B25735DAB +:109C200020434D3A207363616E20636F6D706C65E5 +:109C30007465640A00000000FFFFFFFFFFFF0000E3 +:109C40005B25735D20434D3A20526F616D696E67ED +:109C50002066726F6D207273736920256420746FA3 +:109C60002025640A000000005B25735D20434D3A07 +:109C7000204E6F2063616E64696461746520666F55 +:109C8000756E6420666F7220737369642022257379 +:109C9000220A00005B25735D20434D3A206661690E +:109CA0006C656420746F20636F6E6E6563740A0068 +:109CB0005B25735D20434D3A206661696C656420C5 +:109CC000746F207363616E0A000000005B25735D92 +:109CD00020434D3A20756E68616E646C6564206542 +:109CE00076656E740A000000776C5F636F6E6E5F5E +:109CF0006661696C7572655F636200000000000157 +:109D0000000018500000000B00001854000000096B +:109D1000000018800000000F000018A400000001DF +:109D2000000018E000000001000018E4000000013D +:109D300000001810000000010000181400000001CD +:109D400000001818000000010000181C00000001AD +:109D5000000018200000000100001824000000018D +:109D600000001828000000010000182C000000036B +:109D700000001830000000010000183C0000000145 +:109D8000000018400000000100001844000000011D +:109D900000001848000000010000184C4173736572 +:109DA0007274696F6E2022257322206661696C656A +:109DB00064206174206C696E6520256420696E20C2 +:109DC00025730A002E2E2F7372632F534F4654575C +:109DD0004152455F4652414D45574F524B2F5345D7 +:109DE0005256494345532F4C5749502F6C77697051 +:109DF0002D312E332E322F7372632F636F72652FC6 +:109E0000646863702E630000646863705F6F7074D1 +:109E1000696F6E3A20646863702D3E6F7074696F6D +:109E20006E735F6F75745F6C656E202B2032202B14 +:109E3000206F7074696F6E5F6C656E203C3D2044CE +:109E40004843505F4F5054494F4E535F4C454E006E +:109E5000646863705F6F7074696F6E5F6279746558 +:109E60003A20646863702D3E6F7074696F6E735F23 +:109E70006F75745F6C656E203C20444843505F4FA3 +:109E80005054494F4E535F4C454E00006468637018 +:109E90005F6F7074696F6E5F747261696C65723A3E +:109EA000206468637020213D204E554C4C0000001A +:109EB000646863705F6F7074696F6E5F74726169FC +:109EC0006C65723A20646863702D3E6D73675F6FD6 +:109ED000757420213D204E554C4C0A006468637017 +:109EE0005F6F7074696F6E5F747261696C65723AEE +:109EF00020646863702D3E6F7074696F6E735F6F5E +:109F000075745F6C656E203C20444843505F4F5031 +:109F100054494F4E535F4C454E0A000064686370CD +:109F20005F6F7074696F6E5F73686F72743A2064EC +:109F30006863702D3E6F7074696F6E735F6F7574B8 +:109F40005F6C656E202B2032203C3D2044484350FE +:109F50005F4F5054494F4E535F4C454E0000000038 +:109F6000646863705F6F7074696F6E5F6C6F6E674B +:109F70003A20646863702D3E6F7074696F6E735F12 +:109F80006F75745F6C656E202B2034203C3D20443F +:109F90004843505F4F5054494F4E535F4C454E001D +:109FA0007265706C79207761736E277420667265B4 +:109FB00065640000646863705F6372656174655F07 +:109FC000726571756573743A206E657469662021D7 +:109FD0003D204E554C4C0000646863705F637265B1 +:109FE0006174655F726571756573743A2064686346 +:109FF0007020213D204E554C4C0000006468637079 +:10A000005F6372656174655F726571756573743ADB +:10A0100020646863702D3E705F6F7574203D3D2035 +:10A020004E554C4C00000000646863705F637265BD +:10A030006174655F726571756573743A20646863F5 +:10A04000702D3E6D73675F6F7574203D3D204E55DA +:10A050004C4C0000646863705F6372656174655F97 +:10A06000726571756573743A20636865636B2074FB +:10A07000686174206669727374207062756620630B +:10A08000616E20686F6C64207374727563742064F1 +:10A090006863705F6D736700646863705F64656CAC +:10A0A0006574655F726571756573743A206E657469 +:10A0B000696620213D204E554C4C00006468637059 +:10A0C0005F64656C6574655F726571756573743A1C +:10A0D000206468637020213D204E554C4C000000E8 +:10A0E000646863705F64656C6574655F72657175E3 +:10A0F0006573743A20646863702D3E705F6F757489 +:10A1000020213D204E554C4C0000000064686370D7 +:10A110005F64656C6574655F726571756573743ACB +:10A1200020646863702D3E6D73675F6F75742021C6 +:10A130003D204E554C4C00006E6574696620213DF3 +:10A14000204E554C4C0000007062756620705F6FA9 +:10A150007574207761736E2774206672656564007C +:10A16000646863705F62696E643A206E65746966E4 +:10A1700020213D204E554C4C000000006468637067 +:10A180005F62696E643A206468637020213D204EEE +:10A19000554C4C00726574203D3D2073697A656FA3 +:10A1A000662873747275637420646863705F6D737E +:10A1B0006729202D20444843505F4F5054494F4E4B +:10A1C000535F4C454E000000726574203D3D206495 +:10A1D0006863702D3E6F7074696F6E735F696E5F38 +:10A1E0006C656E002E2E2F7372632F534F4654579B +:10A1F0004152455F4652414D45574F524B2F5345B3 +:10A200005256494345532F4C5749502F6C7769702C +:10A210002D312E332E322F7372632F636F72652FA1 +:10A22000646E732E63000000646E73207365727633 +:10A230006572206F7574206F66206172726179009B +:10A24000646E732073657276657220686173206E28 +:10A250006F20495020616464726573732073657464 +:10A260000000000070627566206D75737420626571 +:10A2700020696E206F6E652070696563650000005F +:10A28000617272617920696E646578206F757420DF +:10A290006F6620626F756E6473000000756E6B6E82 +:10A2A0006F776E20646E735F7461626C6520656E9B +:10A2B0007472792073746174653A00006C6F636125 +:10A2C0006C686F73740000003230382E36372E32CF +:10A2D00032322E3232320000000400040004000248 +:10A2E000002000050002001E002000002E2E2F730B +:10A2F00072632F534F4654574152455F4652414D6A +:10A3000045574F524B2F53455256494345532F4CB7 +:10A310005749502F6C7769702D312E332E322F73A1 +:10A3200072632F636F72652F6D656D702E63000011 +:10A330006D656D705F667265653A206D656D207044 +:10A34000726F7065726C7920616C69676E6564000C +:10A350006D656D705F6D616C6C6F633A20747970C0 +:10A3600065203C204D454D505F4D41580000000098 +:10A370006D656D705F6D616C6C6F633A206D656DBE +:10A38000702070726F7065726C7920616C69676E95 +:10A3900065640000001C002000B0002400140020B0 +:10A3A00000080010025400002E2E2F7372632F53EA +:10A3B0004F4654574152455F4652414D45574F52C3 +:10A3C0004B2F53455256494345532F4C5749502F15 +:10A3D0006C7769702D312E332E322F7372632F6399 +:10A3E0006F72652F6E657469662E6300626F6775A4 +:10A3F0007320706275663A206C656E20213D207472 +:10A400006F745F6C656E20627574206E6578742061 +:10A410003D3D204E554C4C210000000073686F7587 +:10A420006C64206E6F74206265206E756C6C207396 +:10A43000696E636520666972737420213D206C61CA +:10A4400073742100696620666972737420213D204F +:10A450004E554C4C2C206C617374206D75737420B8 +:10A46000616C736F20626520213D204E554C4C007D +:10A470002E2E2F7372632F534F4654574152455F10 +:10A480004652414D45574F524B2F53455256494323 +:10A4900045532F4C5749502F6C7769702D312E330F +:10A4A0002E322F7372632F636F72652F7062756621 +:10A4B0002E630000286820213D204E554C4C292059 +:10A4C000262620287420213D204E554C4C2920283A +:10A4D00070726F6772616D6D65722076696F6C6105 +:10A4E000746573204150492900000000702D3E74AE +:10A4F0006F745F6C656E203D3D20702D3E6C656E07 +:10A5000020286F66206C6173742070627566206904 +:10A510006E20636861696E2900000000696E6372D5 +:10A52000656D656E745F6D61676E697475646520D5 +:10A530003C3D20702D3E6C656E0000006261642021 +:10A5400070627566207479706500000070627566CF +:10A550005F74616B653A20696E76616C6964206234 +:10A5600075660000706275665F74616B653A20699C +:10A570006E76616C6964206461746170747200004D +:10A58000706275665F74616B653A20696E76616CA6 +:10A590006964207062756600646964206E6F74205F +:10A5A000636F707920616C6C2064617461000000DD +:10A5B000706275665F636F70795F706172746961F4 +:10A5C0006C3A20696E76616C696420627566000081 +:10A5D000706275665F636F70795F706172746961D4 +:10A5E0006C3A20696E76616C696420646174617094 +:10A5F00074720000706275665F636F70793A2074E0 +:10A600006172676574206E6F742062696720656E81 +:10A610006F75676820746F20686F6C6420736F7546 +:10A6200072636500705F746F20213D204E554C4C65 +:10A63000000000006F66667365745F746F203C3DB8 +:10A6400020705F746F2D3E6C656E00006F666673E0 +:10A6500065745F66726F6D203C3D20705F66726F3F +:10A660006D2D3E6C656E0000706275665F636F7085 +:10A6700079282920646F6573206E6F7420616C6C7B +:10A680006F77207061636B65742071756575657394 +:10A69000210A0000706275665F667265653A207314 +:10A6A000616E6520747970650000000070627566E7 +:10A6B0005F667265653A20702D3E726566203E20A9 +:10A6C00030000000702D3E746F745F6C656E203D2D +:10A6D0003D20702D3E6C656E202B20712D3E746FD9 +:10A6E000745F6C656E000000702D3E746F745F6C5B +:10A6F000656E203D3D20702D3E6C656E00000000B3 +:10A70000706275665F7265616C6C6F633A20702071 +:10A71000213D204E554C4C00706275665F7265613C +:10A720006C6C6F633A2073616E6520702D3E747996 +:10A730007065000067726F77203C206D61785F75EF +:10A7400031365F7400000000706275665F7265618B +:10A750006C6C6F633A207120213D204E554C4C00AB +:10A76000706275665F616C6C6F633A206261642031 +:10A7700070627566206C617965720000636865635C +:10A780006B20702D3E7061796C6F6164202B20709E +:10A790002D3E6C656E20646F6573206E6F74206F44 +:10A7A000766572666C6F77207062756600000000D7 +:10A7B000504255465F504F4F4C5F42554653495AA1 +:10A7C00045206D75737420626520626967676572E4 +:10A7D000207468616E204D454D5F414C49474E4D98 +:10A7E000454E540072656D5F6C656E203C206D6156 +:10A7F000785F7531365F7400706275665F616C6C8E +:10A800006F633A207062756620712D3E7061796CBD +:10A810006F61642070726F7065726C7920616C6911 +:10A82000676E656400000000706275665F616C6C45 +:10A830006F633A206572726F6E656F7573207479FD +:10A8400070650000706275665F636F707920666185 +:10A85000696C656400000000010203040506070737 +:10A8600007070707070000002E2E2F7372632F5370 +:10A870004F4654574152455F4652414D45574F52FE +:10A880004B2F53455256494345532F4C5749502F50 +:10A890006C7769702D312E332E322F7372632F63D4 +:10A8A0006F72652F7463702E630000007463705FB5 +:10A8B000706362735F73616E653A20616374697679 +:10A8C00065207063622D3E737461746520213D20A4 +:10A8D000434C4F53454400007463705F7063627370 +:10A8E0005F73616E653A2061637469766520706399 +:10A8F000622D3E737461746520213D204C49535490 +:10A90000454E00007463705F706362735F73616EC5 +:10A91000653A20616374697665207063622D3E73C9 +:10A920007461746520213D2054494D452D5741499E +:10A93000540000007463705F706362735F73616ED4 +:10A94000653A207477207063622D3E73746174657C +:10A95000203D3D2054494D452D57414954000000AC +:10A960007463705F62696E643A2063616E206F6E1B +:10A970006C792062696E6420696E207374617465FD +:10A9800020434C4F534544007463705F7265637697 +:10A9900065643A206C656E20776F756C6420777201 +:10A9A0006170207263765F776E640A00756E7365FE +:10A9B0006E74207365676D656E7473206C65616B72 +:10A9C000696E6700756E61636B6564207365676DA2 +:10A9D000656E7473206C65616B696E6700000000C2 +:10A9E0006F6F736571207365676D656E7473206C2E +:10A9F00065616B696E6700007463705F7063625FAE +:10AA000072656D6F76653A207463705F7063627310 +:10AA10005F73616E652829007463705F6C6973747D +:10AA2000656E3A2070636220616C726561647920A2 +:10AA3000636F6E6E65637465640000007463705FBD +:10AA4000736C6F77746D723A2061637469766520F8 +:10AA50007063622D3E737461746520213D20434C08 +:10AA60004F5345440A0000007463705F736C6F7746 +:10AA7000746D723A20616374697665207063622D2B +:10AA80003E737461746520213D204C495354454EFA +:10AA90000A0000007463705F736C6F77746D723AB4 +:10AAA00020616374697665207063622D3E73746102 +:10AAB000746520213D2054494D452D574149540A84 +:10AAC000000000007463705F736C6F77746D723A8E +:10AAD000206D6964646C652074637020213D20746E +:10AAE00063705F6163746976655F706362730000B1 +:10AAF0007463705F736C6F77746D723A20666972FD +:10AB0000737420706362203D3D207463705F6163E5 +:10AB1000746976655F706362730000007463705FD0 +:10AB2000736C6F77746D723A2054494D452D5741BF +:10AB30004954207063622D3E7374617465203D3DFD +:10AB40002054494D452D5741495400007463705FAE +:10AB5000736C6F77746D723A206D6964646C6520F4 +:10AB600074637020213D207463705F74775F70633D +:10AB7000627300007463705F736C6F77746D723A08 +:10AB800020666972737420706362203D3D20746397 +:10AB9000705F74775F706362730000007463705F4E +:10ABA000636F6E6E6563743A2063616E206F6E6CC6 +:10ABB0007920636F6E6E65637465642066726F6D75 +:10ABC00020737461746520434C4F5345440000006A +:10ABD00053594E5F53454E540000000053594E5F89 +:10ABE000524356440000000045535441424C4953DF +:10ABF0004845440046494E5F574149545F31000083 +:10AC000046494E5F574149545F320000434C4F5311 +:10AC1000455F574149540000434C4F53494E47004C +:10AC20004C4153545F41434B0000000054494D4593 +:10AC30005F5741495400000003060C18306078004B +:10AC40008000FAFC8000FC6C8000FD4E8000FDB4AA +:10AC50008000FE368000FD4E8000FE788000FEF809 +:10AC60002E2E2F7372632F534F4654574152455F18 +:10AC70004652414D45574F524B2F5345525649432B +:10AC800045532F4C5749502F6C7769702D312E3317 +:10AC90002E322F7372632F636F72652F7463705F30 +:10ACA000696E2E63000000007063622D3E736E6457 +:10ACB0005F71756575656C656E203E3D20706275CF +:10ACC000665F636C656E286E6578742D3E70290032 +:10ACD0007463705F726563656976653A2076616C4E +:10ACE0006964207175657565206C656E67746800B0 +:10ACF000696E7365672E7020213D204E554C4C00C7 +:10AD0000696E73616E65206F6666736574210000FD +:10AD10007062756620746F6F2073686F72742100A3 +:10AD2000706275665F686561646572206661696CF2 +:10AD3000656400007463705F726563656976653A87 +:10AD4000207365676D656E74206E6F742074726910 +:10AD50006D6D656420636F72726563746C792074C5 +:10AD60006F207263765F776E640A00007463705FB1 +:10AD7000726563656976653A207365676D656E74A3 +:10AD8000206E6F74207472696D6D656420636F72DC +:10AD9000726563746C7920746F206F6F73657120B6 +:10ADA00071756575650A00007463705F726563652F +:10ADB0006976653A207463706C656E203E2072631C +:10ADC000765F776E640A00007463705F7265636516 +:10ADD0006976653A206F6F736571207463706C6576 +:10ADE0006E203E207263765F776E640A000000007A +:10ADF0007463705F696E7075743A2061637469760C +:10AE000065207063622D3E737461746520213D205E +:10AE1000434C4F53454400007463705F696E707516 +:10AE2000743A20616374697665207063622D3E73A5 +:10AE30007461746520213D2054494D452D57414989 +:10AE4000540000007463705F696E7075743A20611D +:10AE50006374697665207063622D3E7374617465F6 +:10AE600020213D204C495354454E00007463705FCF +:10AE7000696E7075743A207063622D3E6E657874E9 +:10AE800020213D2070636220286265666F72652014 +:10AE900063616368652900007463705F696E707533 +:10AEA000743A207063622D3E6E65787420213D20D7 +:10AEB00070636220286166746572206361636865EF +:10AEC000290000007463705F696E7075743A2054D5 +:10AED000494D452D57414954207063622D3E73748E +:10AEE000617465203D3D2054494D452D57414954DD +:10AEF000000000007463705F696E7075743A2070B2 +:10AF000063622D3E737461746520213D20434C4F74 +:10AF1000534544007063622D3E736E645F717565C6 +:10AF200075656C656E203E20300000007063622DF8 +:10AF30003E61636365707420213D204E554C4C008A +:10AF40007463705F696E7075743A207463705F70BB +:10AF50006362735F73616E65282900002E2E2F7364 +:10AF600072632F534F4654574152455F4652414DED +:10AF700045574F524B2F53455256494345532F4C3B +:10AF80005749502F6C7769702D312E332E322F7325 +:10AF900072632F636F72652F7463705F6F75742EA9 +:10AFA00063000000636865636B20746861742066E9 +:10AFB0006972737420706275662063616E20686FB9 +:10AFC0006C6420737472756374207463705F68645A +:10AFD000720000007463705F656E71756575653A27 +:10AFE000207061636B6574206E65656473207061A9 +:10AFF000796C6F61642C206F7074696F6E732C2094 +:10B000006F722053594E2F46494E202870726F6739 +:10B0100072616D6D65722076696F6C617465732005 +:10B0200041504929000000007463705F656E7175BE +:10B030006575653A206C656E20213D2030207C7C52 +:10B0400020617267203D3D204E554C4C2028707287 +:10B050006F6772616D6D65722076696F6C61746582 +:10B0600073204150492900007463705F656E7175EB +:10B070006575653A207062756673206F6E20717514 +:10B08000657565203D3E206174206C656173742098 +:10B090006F6E65207175657565206E6F6E2D656DBF +:10B0A000707479007463705F656E71756575653A6B +:10B0B000206E6F207062756673206F6E20717565EB +:10B0C0007565203D3E20626F7468207175657565F9 +:10B0D0007320656D707479007573656720213D205C +:10B0E0004E554C4C00000000636865636B2074682B +:10B0F0006174206669727374207062756620636182 +:10B100006E20686F6C642074686520636F6D706C6E +:10B11000657465207365676C656E000070627566A6 +:10B120005F686561646572206661696C65640A00C8 +:10B1300046494E20656E71756575656420746F674C +:10B140006574686572207769746820646174610051 +:10B150007A65726F2D6C656E6774682070627566B3 +:10B16000000000007463705F656E71756575653A07 +:10B170002076616C6964207175657565206C656EFB +:10B1800067746800525354206E6F74206578706540 +:10B190006374656420686572652100002E2E2F732C +:10B1A00072632F534F4654574152455F4652414DAB +:10B1B00045574F524B2F53455256494345532F4CF9 +:10B1C0005749502F6C7769702D312E332E322F73E3 +:10B1D00072632F636F72652F7564702E63000000B9 +:10B1E000726562696E64203D3D203000636865636E +:10B1F0006B20746861742066697273742070627564 +:10B20000662063616E20686F6C642073747275636E +:10B2100074207564705F686472000000702D3E7069 +:10B2200061796C6F6164203D3D20697068647200D3 +:10B230002E2E2F7372632F534F4654574152455F42 +:10B240004652414D45574F524B2F53455256494355 +:10B2500045532F4C5749502F6C7769702D312E3341 +:10B260002E322F7372632F636F72652F697076347D +:10B270002F69636D702E6300636865636B2074686B +:10B2800061742066697273742070627566206361F0 +:10B290006E20686F6C642069636D70206D657373D8 +:10B2A0006167650069636D705F696E7075743A20DF +:10B2B0006D6F76696E6720702D3E7061796C6F617D +:10B2C0006420746F2069702068656164657220660F +:10B2D00061696C65640A0000636865636B2074686B +:10B2E0006174206669727374207062756620636190 +:10B2F0006E20686F6C642073747275637420746858 +:10B30000652049434D502068656164657200000006 +:10B3100069636D705F696E7075743A20636F7079E0 +:10B32000696E6720746F206E657720706275662085 +:10B330006661696C65640A0069636D705F696E704F +:10B3400075743A20726573746F72696E67206F72DC +:10B350006967696E616C20702D3E7061796C6F61F8 +:10B3600064206661696C65640A00000043616E27B1 +:10B3700074206D6F7665206F7665722068656164F4 +:10B38000657220696E207061636B65740000000057 +:10B390002E2E2F7372632F534F4654574152455FE1 +:10B3A0004652414D45574F524B2F534552564943F4 +:10B3B00045532F4C5749502F6C7769702D312E33E0 +:10B3C0002E322F7372632F636F72652F697076341C +:10B3D0002F69702E63000000636865636B207468DA +:10B3E000617420666972737420706275662063618F +:10B3F0006E20686F6C64207374727563742069705A +:10B400005F68647200FFFFFFFF00000000000000A3 +:10B410002E2E2F7372632F534F4654574152455F60 +:10B420004652414D45574F524B2F53455256494373 +:10B4300045532F4C5749502F6C7769702D312E335F +:10B440002E322F7372632F636F72652F697076349B +:10B450002F69705F667261672E630000746869739C +:10B46000206E656564732061207062756620696E68 +:10B47000206F6E65207069656365210073616E6978 +:10B48000747920636865636B206C696E6B656420FA +:10B490006C697374000000007072657620213D2095 +:10B4A00069707200707265762D3E6E657874203D0D +:10B4B0003D2069707200000069705F72656173738E +:10B4C0005F70627566636F756E74203E3D20636CBD +:10B4D000656E0000636865636B20667261676D6509 +:10B4E0006E747320646F6E2774206F7665726C6162 +:10B4F000700000006E6F2070726576696F75732042 +:10B50000667261676D656E742C2074686973206D56 +:10B51000757374206265207468652066697273743F +:10B5200020667261676D656E7421000073616E69DB +:10B53000747920636865636B0000000076616C6954 +:10B54000646174655F646174616772616D3A6E65B0 +:10B5500078745F70627566213D4E554C4C0000005A +:10B5600076616C69646174655F646174616772615E +:10B570006D3A646174616772616D20656E64213D2E +:10B58000646174616772616D206C656E00FFFFFF1E +:10B59000FFFFFF002E2E2F7372632F534F46545719 +:10B5A0004152455F4652414D45574F524B2F5345EF +:10B5B0005256494345532F4C5749502F6C77697069 +:10B5C0002D312E332E322F7372632F6E65746966A0 +:10B5D0002F6574686172702E630000006E65746977 +:10B5E000662D3E6877616464725F6C656E206D7570 +:10B5F0007374206265207468652073616D652061D5 +:10B6000073204554484152505F4857414444525F6B +:10B610004C454E20666F722065746861727021001F +:10B620007120213D204E554C4C000000712D3E7084 +:10B6300020213D204E554C4C00000000722D3E70E4 +:10B6400020213D204E554C4C000000006172705F7F +:10B650007461626C655B695D2E71203D3D204E55C5 +:10B660004C4C000069203C204152505F5441424CF8 +:10B67000455F53495A4500006E657469662D3E6802 +:10B6800077616464725F6C656E203D3D204554486F +:10B690004152505F4857414444525F4C454E000070 +:10B6A000636865636B207468617420666972737483 +:10B6B00020706275662063616E20686F6C64207311 +:10B6C0007472756374206574686172705F68647207 +:10B6D000000000006172705F7461626C655B695D9F +:10B6E0002E7374617465203D3D2050454E44494E93 +:10B6F00047206F7220535441424C45006E6F2070BA +:10B7000061636B65742071756575657320616C6C20 +:10B710006F77656421000000000000002E2E2F735B +:10B7200072632F534F4654574152455F4652414D25 +:10B7300045574F524B2F53455256494345532F4C73 +:10B740005749502F6C7769702D706F72742D312EA0 +:10B75000332E322F48442F69662F6E657469662F29 +:10B76000776C69662E6300000A09000052580000D9 +:10B7700054580000FFFFFF740000000001FFFFFFAE +:10B780000000FFFFFFFFFF400000000001FFFFFF80 +:10B7900041505000484D4700312E352E312E370094 +:10B7A000312E352E312E3100312E352E312E3400F2 +:10B7B00080017C7C80017C7480017C7C80017C6ABF +:10B7C00080017DCA80017D7880017D2A80017CD83E +:10B7D00080017C86800185D2800185CA800185CA6E +:10B7E000800185D2800185C2800185C2800185BA31 +:10B7F000800185BA02040B0C121618242C30424822 +:10B80000606C0000322E312E312E310078C40E00D3 +:10B81000352E332E31000000352E332E350000003A +:10B82000352E332E340000008001BF808001BF928E +:10B830008001BFA88001BF5A8001BF668001BFD4CC +:10B840008001BF5A8001BFE08001BF5A8001BF5A0A +:10B850008001BF5A8001BF5A8001BF5A8001BF5A80 +:10B860008001BF5A8001BF5A8001BF5A8001BF5A70 +:10B870008001BF5A8001BF5A8001BF5A8001BF5A60 +:10B880008001BF5A8001BF5A8001BF5A8001BF5A50 +:10B890008001BF5A8001BF5A8001BF5A8001BF5A40 +:10B8A0008001BF5A8001BF5A8001BF5A8001BF5A30 +:10B8B0008001BF5A8001BF5A8001BF5A8001BF5A20 +:10B8C0008001BF5A8001BF5A8001BF5A8001BF5A10 +:10B8D0008001BF5A8001BF5A8001BF5A8001BF5A00 +:10B8E0008001BF5A8001BF5A8001BF5A8001BF5AF0 +:10B8F0008001BF5A8001BF5A8001BF5A8001BF5AE0 +:10B900008001BF5A8001BF5A8001BF5A8001BF5ACF +:10B910008001BF5A8001BF5A8001BF5A8001BF5ABF +:10B920008001BF5A8001BF7C8001C0448001BF5AA2 +:10B930008001C0448001BF5A8001C17C8001BF5A90 +:10B940008001C1708001BF5A8001C1648001BF5A6B +:10B950008001BF5A8001BF5A8001BF5A8001C1AC2B +:10B960008001BF5A8001BF5A8001C1A08001BF5A27 +:10B970008001C1948001BF5A8001BF5A8001BF5A23 +:10B980008001BF5A8001BF5A8001BF5A8001BF5A4F +:10B990008001BF5A8001BF5A8001BF5A8001BF5A3F +:10B9A0008001BF5A8001BF5A8001BF5A8001BF5A2F +:10B9B0008001BF5A8001BF5A8001BF5A8001BF5A1F +:10B9C0008001BF5A8001BF5A8001BF5A8001BF5A0F +:10B9D0008001BF5A8001BF5A8001BF5A8001BF5AFF +:10B9E0008001BF5A8001BF5A8001BF5A8001BF5AEF +:10B9F0008001BF5A8001BF5A8001BF5A8001BF5ADF +:10BA00008001BF5A8001BF5A8001BF5A8001BF5ACE +:10BA10008001BF5A8001BF5A8001BF5A8001BF5ABE +:10BA20008001BF5A8001BF5A8001BF5A8001BF5AAE +:10BA30008001BF5A8001BF5A8001BF5A8001BF5A9E +:10BA40008001BF5A8001BF5A8001BF5A8001BF5A8E +:10BA50008001BF5A8001BF5A8001BF5A8001BF5A7E +:10BA60008001BF5A8001BF5A8001BF5A8001BF5A6E +:10BA70008001BF5A8001BF5A8001BF5A8001BF5A5E +:10BA80008001BF5A8001BF5A8001BF5A8001BF5A4E +:10BA90008001BF5A8001BF5A8001BF5A8001BF5A3E +:10BAA0008001BF5A8001BF5A8001BF5A8001BF5A2E +:10BAB0008001BF5A8001BF5A8001BF5A8001BF5A1E +:10BAC0008001BF5A8001BF5A8001BF5A8001BF5A0E +:10BAD0008001BF5A8001BF5A8001BF5A8001BF5AFE +:10BAE0008001BF5A8001BF5A8001BF5A8001BF5AEE +:10BAF0008001BF5A8001BF5A8001BF5A8001BF5ADE +:10BB00008001BF5A8001BF5A8001BF5A8001BF5ACD +:10BB10008001BF5A8001C02C8001C1588001C02C17 +:10BB20008001C02C8001C1888001BF5A8001C044BF +:10BB30008001BF5A8001C0508001BF5A8001C050AF +:10BB40008001BF5A8001C02C8001BF5A8001C02CE7 +:10BB50008001C0388001C0388001C0388001BF5AE0 +:10BB60008001C02C8001C02C8001C14C8001BF5AD3 +:10BB70008001BF5A8001C1408001BF5A8001BF5A75 +:10BB80008001BF5A8001BF5A8001BF5A8001BF5A4D +:10BB90008001BF5A8001BF5A8001BF5A8001BF5A3D +:10BBA0008001C1348001BF5A8001BF5A8001BF5A51 +:10BBB0008001BF5A8001BF5A8001BF5A8001BF5A1D +:10BBC0008001C1288001BF5A8001BF5A8001BF5A3D +:10BBD0008001BF5A8001BF5A8001BF5A8001BF5AFD +:10BBE0008001BF5A8001BF5A8001BF5A8001BF5AED +:10BBF0008001BF5A8001BF5A8001BF5A8001BF5ADD +:10BC00008001BF5A8001BF5A8001BF5A8001BF5ACC +:10BC10008001BF5A8001BF5A8001BF5A8001BF5ABC +:10BC20008001BF5A8001BF5A8001BF5A8001BF5AAC +:10BC30008001BF5A8001BF5A8001BF5A8001BF5A9C +:10BC40008001BF5A8001BF5A8001BF5A8001BF5A8C +:10BC50008001BF5A8001BF5A8001BF5A8001BF5A7C +:10BC60008001BF5A8001BF5A8001BF5A8001BF5A6C +:10BC70008001BF5A8001BF5A8001BF5A8001BF5A5C +:10BC80008001BF5A8001BF5A8001BF5A8001BF5A4C +:10BC90008001BF5A8001BF5A8001BF5A8001BF5A3C +:10BCA0008001BF5A8001BF5A8001BF5A8001BF5A2C +:10BCB0008001BF5A8001BF5A8001BF5A8001BF5A1C +:10BCC0008001BF5A8001BF5A8001BF5A8001BF5A0C +:10BCD0008001BF5A8001BF5A8001BF5A8001BF5AFC +:10BCE0008001BF5A8001BF5A8001BF5A8001BF5AEC +:10BCF0008001BF5A8001BF5A8001BF5A8001BF5ADC +:10BD00008001BF5A8001BF5A8001BF5A8001BF5ACB +:10BD10008001BF5A8001BF5A8001BF5A8001BF5ABB +:10BD20008001BF5A8001BF5A8001BF5A8001BF5AAB +:10BD30008001BF5A8001BF5A8001BF5A8001BF5A9B +:10BD40008001BF5A8001BF5A8001BF5A8001BF5A8B +:10BD50008001BF5A8001BF5A8001BF5A8001BF5A7B +:10BD60008001BF5A8001BF5A8001BF5A8001C11CA7 +:10BD70008001C1108001BF5A8001C1048001BF5AF7 +:10BD80008001BF5A8001BF5A8001C0F88001C0EC19 +:10BD90008001BF5A8001BF5A8001C0E08001BF5AB4 +:10BDA0008001BF5A8001C0D48001C0C88001C0BCDE +:10BDB0008001C0B08001C0A48001C0988001C08C07 +:10BDC0008001BF5A8001C0808001C0748001BF5AC9 +:10BDD0008001C0688001C05C8001C48E8001C47C89 +:10BDE0008001C46A8001C4588001C4468001C43403 +:10BDF0008001C3928001C3928001C4228001C410DB +:10BE00008001C3FE8001C3EC8001C3DA8001C3C896 +:10BE10008001C3B68001C3A48001C3A48001C4A073 +:10BE20008001C2D48001C2D48001C2D48001C5C0C7 +:10BE30008001C5AE8001C59C8001C2D48001C2D4FE +:10BE40008001C58A8001C2D48001C2D48001C57836 +:10BE50008001C5668001C5548001C5428001C5309E +:10BE60008001C51E8001C50C8001C4FA8001C4E8B0 +:10BE70008001C2D48001C4D68001C4C48001C2D470 +:10BE80008001C2D48001C2D48001C2D48001C2D456 +:10BE90008001C2D48001C2D48001C2D48001C2D446 +:10BEA0008001C2D48001C2D48001C2D48001C2D436 +:10BEB0008001C2D48001C2D48001C2D48001C2D426 +:10BEC0008001C2D48001C2D48001C2D48001C2D416 +:10BED0008001C2D48001C2D48001C2D48001C2D406 +:10BEE0008001C2D48001C2D48001C2D48001C2D4F6 +:10BEF0008001C2D48001C2D48001C2D48001C2D4E6 +:10BF00008001C2D48001C2D48001C2D48001C2D4D5 +:10BF10008001C2D48001C2D48001C2D48001C2D4C5 +:10BF20008001C2D48001C2D48001C2D48001C2D4B5 +:10BF30008001C2D48001C2D48001C2D48001C2D4A5 +:10BF40008001C2D48001C2D48001C2D48001C2D495 +:10BF50008001C2D48001C2D48001C2D48001C2D485 +:10BF60008001C2D48001C2D48001C2D48001C2D475 +:10BF70008001C2D48001C2D48001C2D48001C2D465 +:10BF80008001C2D48001C2D48001C2D48001C2D455 +:10BF90008001C2D48001C2D48001C2D48001C2D445 +:10BFA0008001C2D48001C2D48001C2D48001C2D435 +:10BFB0008001C2D48001C2D48001C2D48001C2D425 +:10BFC0008001C2D48001C2D48001C2D48001C2D415 +:10BFD0008001C2D48001C2D48001C2D48001C2D405 +:10BFE0008001C2D48001C2D48001C2D48001C2D4F5 +:10BFF0008001C2D48001C2D48001C2D48001C2D4E5 +:10C000008001C2D48001C2D48001C2D48001C2D4D4 +:10C010008001C4B28001EFCA8001EFCE8001EF7AC7 +:10C020008001EF7A8001EF828001EF8A8001EF9238 +:10C030008001EF9A8001EFA28001EFAA8001EFB2A8 +:10C040008001EFBA8001EFC28001EFD68001F96074 +:10C050008001F93E8001F9CC8001F8A68001F9BE8B +:10C060008001F91C8001F8A68001F8E28001F8A6A1 +:10C070008001F8A68001F8A68001F8A68001F8A644 +:10C080008001F8A68001F8A68001F8A68001F8A634 +:10C090008001F8A68001F8A68001F8A68001F8A624 +:10C0A0008001F8A68001F8A68001F8A68001F8A614 +:10C0B0008001F8A68001F8A68001F8A68001F8A604 +:10C0C0008001F8A68001F8A68001F8A68001F8A6F4 +:10C0D0008001F8A68001F8A68001F8A68001F8A6E4 +:10C0E0008001F8A68001F8A68001F8A68001F8A6D4 +:10C0F0008001F8A68001F8A68001F8A68001F8A6C4 +:10C100008001F8A68001F8A68001F8A68001F8A6B3 +:10C110008001F8A68001F8A68001F8A68001F8A6A3 +:10C120008001F8A68001F8A68001F8A68001F8A693 +:10C130008001F8A68001F8A68001F8A68001F8A683 +:10C140008001F8A68001F8A68001F8C08001FA58A5 +:10C150008001F8F08001F8F08001F90E8001F8F01C +:10C160008001F8F08001F8F08001F8F08001F8F02B +:10C170008001F8F08001F8F08001F8F08001F8F01B +:10C180008001F8F08001F90E8001F8F08001F8F0EC +:10C190008001F8F08001F8F08001F8F08001F8F0FB +:10C1A0008001F8F08001FA488001F8F08001F8F091 +:10C1B0008001F8F08001F8F08001F8F08001F8F0DB +:10C1C0008001F8F08001F8F08001F8F08001F8F0CB +:10C1D0008001F8F08001F8F08001F8F08001F8F0BB +:10C1E0008001F8F08001F8F08001F8F08001F8F0AB +:10C1F0008001F8F08001F8F08001F8F08001F8F09B +:10C200008001F8F08001F8F08001F8F08001F8F08A +:10C210008001F8F08001F8F08001F8F08001F8F07A +:10C220008001F8F08001F8F08001F8F08001F8F06A +:10C230008001F8F08001F8F08001F8F08001F8F05A +:10C240008001F8F08001F8F08001F8F08001F8F04A +:10C250008001F8F08001F8F08001F8F08001F8F03A +:10C260008001F8F08001F8F08001F8F08001F8F02A +:10C270008001F8F08001F8F08001F8F08001F8F01A +:10C280008001F8F08001F8F08001F8F08001F8F00A +:10C290008001F8F08001F8F08001F8F08001F8F0FA +:10C2A0008001F8F08001F8F08001F8F08001F8F0EA +:10C2B0008001F8F08001F8F08001F8F08001F8F0DA +:10C2C0008001F8F08001F8F08001F8F08001F8F0CA +:10C2D0008001F8F08001F8F08001F8F08001F8F0BA +:10C2E0008001F8F08001F8F08001F8F08001F8F0AA +:10C2F0008001F8F08001F8F08001F8F08001F8F09A +:10C300008001F8F08001F8F08001F8F08001F8F089 +:10C310008001F8F08001F8F08001F8F08001F8F079 +:10C320008001F8F08001F8F08001F8F08001F8F069 +:10C330008001F8F08001F8F08001F8F08001F8F059 +:10C340008001F8F08001F8F08001F8F08001F8F049 +:10C350008001F90E8001FA348001F8F08001F90EB5 +:10C360008001F8F08001F8F08001F8F08001F8F029 +:10C370008001F8F08001F8F08001F8F08001F90EFA +:10C380008001F8F08001F8F08001FA2C8001FA2495 +:10C390008001FA1C8001FA148001FA0C8001FA0471 +:10C3A0008001FA408001F8F08001FA5057455F495A +:10C3B0004E445F38303231315F434F4E4E45435427 +:10C3C0004544000057455F494E445F3830323131B3 +:10C3D0005F444953434F4E4E454354494E47000036 +:10C3E00057455F494E445F38303231315F494253DF +:10C3F000535F444953434F4E4E4543544544000018 +:10C40000332E312E322E312E34000000352E3233B1 +:10C4100000000000352E32322E320000352E32322E +:10C420002E310000352E322E39000000352E3138E5 +:10C430002E310000352E31382E320000352E3232AA +:10C440002E340000352E32342E320000352E323498 +:10C450002E310000352E31312E310000352E322E96 +:10C4600032000000352E31362E320000352E3136A6 +:10C470002E310000312E312E312E323200000000DC +:10C48000352E322E31392E3500000000352E322E59 +:10C4900031392E3400000000352E322E31392E3342 +:10C4A00000000000352E322E31392E3200000000FF +:10C4B000352E322E31392E3100000000352E322E2D +:10C4C00031000000352E31312E320000352E313151 +:10C4D0002E330000352E31312E340000352E31310F +:10C4E0002E350000352E31312E360000352E3131FB +:10C4F0002E380000352E31312E37000073736964F9 +:10C500000000000070736B004A756E6B41500000B4 +:10C5100057534300656170005746412D53696D7054 +:10C520006C65436F6E6669672D456E726F6C6C65E6 +:10C53000652D312D300000006964656E7469747971 +:10C54000000000006E7277696669000064656661CC +:10C55000756C740057455F494E445F383032313155 +:10C560005F444953434F4E4E4543544544000000F9 +:10C5700057455F494E445F50414952574953455FC3 +:10C580004D49435F4552524F5200000057455F49A5 +:10C590004E445F47524F55505F4D49435F4552529D +:10C5A0004F52000057455F494E445F43414E444956 +:10C5B000444154455F4C495354000000494E4143A7 +:10C5C0005449564500000000444953434F4E4E45E0 +:10C5D00043544544000000005343414E4E494E47EA +:10C5E000000000004153534F43494154494E470016 +:10C5F0004153534F43494154454400003457415936 +:10C600005F48414E445348414B45000047524F5507 +:10C61000505F48414E445348414B4500434F4D50B5 +:10C620004C45544544000000554E4B4E4F574E006C +:10C630004354524C2D4556454E542D5445524D4968 +:10C640004E4154494E47202D207369676E616C201E +:10C650002564207265636569766564007769726533 +:10C660006400000043616E63656C6C696E672061F5 +:10C67000757468656E7469636174696F6E2074693E +:10C680006D656F75740000005750413A2045415068 +:10C690004F4C2070726F63657373696E6720636FB0 +:10C6A0006D706C657465000043616E63656C6C69E8 +:10C6B0006E67207363616E207265717565737400B7 +:10C6C00052534E3A207573696E672049454545209F +:10C6D0003830322E3131692F44392E3000000000BD +:10C6E0005750413A207573696E672049454545208A +:10C6F0003830322E3131692F44332E3000000000A3 +:10C700005750413A204661696C656420746F20700F +:10C7100061727365205750412049452066726F6DE4 +:10C72000206173736F63696174696F6E20696E66EF +:10C730006F0000005750413A2044726976657220BC +:10C74000757365642064697361626C6564206772E7 +:10C750006F75702063697068657220307825782065 +:10C76000286D61736B203078257829202D20726523 +:10C770006A656374000000005750413A20447269B2 +:10C7800076657220757365642064697361626C6597 +:10C790006420706169727769736520636970686588 +:10C7A00072203078257820286D61736B20307825D1 +:10C7B0007829202D2072656A656374005750413ACC +:10C7C00020447269766572207573656420646973AC +:10C7D00061626C6564206B6579206D616E6167656F +:10C7E0006D656E74203078257820286D61736B201C +:10C7F0003078257829202D2072656A6563740000E1 +:10C800005750413A207573696E672047544B204357 +:10C81000434D50005750413A207573696E67204769 +:10C82000544B20544B4950005750413A207573697E +:10C830006E672047544B205745503130340000007C +:10C840005750413A207573696E672047544B205703 +:10C8500045503430000000005750413A207573694C +:10C860006E672050544B2043434D50005750413A7F +:10C87000207573696E672050544B20544B4950000B +:10C880005750413A207573696E672050544B204EC3 +:10C890004F4E45005750413A207573696E67204BE3 +:10C8A00045595F4D474D54203830322E31580000E5 +:10C8B0005750413A207573696E67204B45595F4D5B +:10C8C000474D54205750412D50534B005750413A3B +:10C8D000207573696E67204B45595F4D474D542055 +:10C8E0005750412D4E4F4E45000000005750413AE1 +:10C8F000204661696C656420746F2073656C6563A4 +:10C9000074205750412F52534E0000004661696C0D +:10C91000656420746F20706172736520746865208F +:10C92000636F6E66696775726174696F6E206669A0 +:10C930006C652027257327202D2065786974696E22 +:10C94000670000005265636F6E6669677572617497 +:10C95000696F6E20636F6D706C65746564000000B4 +:10C9600053657474696E672061757468656E746967 +:10C97000636174696F6E2074696D656F75743A20B8 +:10C98000256420736563202564207573656300004A +:10C9900053657474696E67207363616E207265718C +:10C9A000756573743A2025642073656320256420BF +:10C9B000757365630000000041757468656E746985 +:10C9C000636174696F6E20776974682025303278EE +:10C9D0003A253032783A253032783A253032783A72 +:10C9E000253032783A253032782074696D656420BC +:10C9F0006F75742E00000000547279696E672074A0 +:10CA00006F206173736F63696174652077697468FF +:10CA100020253032783A253032783A253032783A4B +:10CA2000253032783A253032783A2530327820284D +:10CA3000535349443D2725732720667265713D2570 +:10CA400064204D487A290000547279696E67207419 +:10CA50006F206173736F63696174652077697468AF +:10CA60002053534944202725732700004173736FD7 +:10CA700063696174696F6E20726571756573742086 +:10CA8000746F2074686520647269766572206661CF +:10CA9000696C6564000000007770615F7375707089 +:10CAA0006C6963616E742076302E352E31300A4306 +:10CAB0006F7079726967687420286329203230307A +:10CAC000332D323030382C204A6F756E69204D611D +:10CAD0006C696E656E203C6A4077312E66693E2037 +:10CAE000616E6420636F6E7472696275746F7273C5 +:10CAF00000000000546869732070726F6772616D86 +:10CB0000206973206672656520736F667477617241 +:10CB1000652E20596F752063616E2064697374728D +:10CB2000696275746520697420616E642F6F72206C +:10CB30006D6F646966792069740A756E6465722028 +:10CB4000746865207465726D73206F662074686503 +:10CB500020474E552047656E6572616C20507562A6 +:10CB60006C6963204C6963656E73652076657273CA +:10CB7000696F6E20322E0A0A416C7465726E6174A0 +:10CB80006976656C792C207468697320736F66749C +:10CB900077617265206D61792062652064697374C4 +:10CBA0007269627574656420756E6465722074685C +:10CBB00065207465726D73206F66207468650A4223 +:10CBC0005344206C6963656E73652E205365652040 +:10CBD000524541444D4520616E6420434F505949B0 +:10CBE0004E4720666F72206D6F72652064657461B8 +:10CBF000696C732E0A0000002530325800000000D6 +:10CC00008003C4FC80024A908002490000000010AA +:10CC100000000014000000000000002000000000E0 +:10CC20008003D3EC80024DF0800248880000006051 +:10CC300000000000000000000000000100000000F3 +:10CC40008003D3F880024DCC800248280000000009 +:10CC500000000000000000000000000000000000D4 +:10CC60008003C50480024D00800248C4000000001B +:10CC700000000000000000000000000000000001B3 +:10CC80008003D4008002408C800247A8000000008E +:10CC90000000000000000000000000000000000094 +:10CCA0008003D40880023F448002467C00000000DC +:10CCB0000000000000000000000000000000000074 +:10CCC0008003D41480023F188002466C00000000EC +:10CCD0000000000000000000000000000000000054 +:10CCE0008003D42080023EEC8002465C00000000FD +:10CCF0000000000000000000000000000000000034 +:10CD00008003D42880023CA4800244740000000008 +:10CD10000000000000000000000000000000000013 +:10CD20008003C51480024B9080024B00000000007D +:10CD300000000000000000000000000000000000F3 +:10CD40008003C53880024A908002490000000068D4 +:10CD50000000006C00000000000000000000000067 +:10CD60008003D43480024A908002490000000070A1 +:10CD7000000000740000000000000000000000003F +:10CD80008003D44880024A90800249000000007865 +:10CD90000000007C000000100000002000000001E6 +:10CDA0008003D45080024A90800249000000008035 +:10CDB00000000084000000000000000000000000EF +:10CDC0008003D45480024A90800249000000008809 +:10CDD0000000008C000000000000000000000001C6 +:10CDE0008003D46080024A908002490000000090D5 +:10CDF0000000000000000000000000000000000033 +:10CE00008003D46880024A908002490000000094A8 +:10CE10000000000000000000000000000000000012 +:10CE20008003D47080024A9080024900000000987C +:10CE300000000000000000000000000000000000F2 +:10CE40008003D47C80024A90800249000000009C4C +:10CE500000000000000000000000000000000000D2 +:10CE60008003D48880024A9080024900000000A01C +:10CE700000000000000000000000000000000001B1 +:10CE80008003D49C80024A9080024900000000A4E4 +:10CE90000000000000000000000000000000000092 +:10CEA0008003D4A480024A9080024900000000A8B8 +:10CEB0000000000000000000000000000000000072 +:10CEC0008003D4B480024A9080024900000000AC84 +:10CED0000000000000000000000000000000000052 +:10CEE0008003D4C880024A9080024900000000B04C +:10CEF0000000000000000000000000000000000032 +:10CF00008003D4D480024A9080024900000000B41B +:10CF10000000000000000000000000000000000011 +:10CF20008003D4E080024A9080024900000000B8EB +:10CF300000000000000000000000000000000000F1 +:10CF40008003D4F080024A9080024900000000BCB7 +:10CF500000000000000000000000000000000000D1 +:10CF60008003D50080024A9080024900000000C082 +:10CF700000000000000000000000000000000001B0 +:10CF80008003D51480024A9080024900000000C44A +:10CF90000000000000000000000000000000000091 +:10CFA0008003D52080024A9080024900000000C81A +:10CFB0000000000000000000000000000000000071 +:10CFC0008003D53080024A9080024900000000CCE6 +:10CFD0000000000000000000000000000000000051 +:10CFE0008003D54480024A9080024900000000D4AA +:10CFF0000000000000000000000000000000000031 +:10D000008003D54C80024A9080024900000000D87D +:10D010000000000000000000000000000000000010 +:10D020008003D55480024A9080024900000000DC51 +:10D0300000000000000000000000000000000000F0 +:10D040008003D55C80024A9080024900000000E025 +:10D0500000000000000000000000000000000001CF +:10D060008003D56080024A9080024900000000E8F9 +:10D0700000000000000000000000000000000000B0 +:10D080008003D56C80024A9080024900000000ECC9 +:10D090000000000000000000000000000000000090 +:10D0A0008003D65C80024DF080024888000000E4D6 +:10D0B0000000000000000000000000000000000070 +:10D0C0008003D57480024DF080024888000000F093 +:10D0D0000000000000000000000000000000000050 +:10D0E0008003D58080024A78800244580000000006 +:10D0F000000000000000000000000000000000012F +:10D100008003D58C80024A608002443C000000000D +:10D11000000000000000000000000000000000010E +:10D120008003D59880024A48800244200000000015 +:10D1300000000000000000000000000000000001EE +:10D140008003D5A480024A3080024404000000001D +:10D1500000000000000000000000000000000001CE +:10D160008003D5B080024DF0800248880000014461 +:10D1700000000000000000000000000000000000AF +:10D180008003D5C080024DF0800248880000000C6A +:10D19000000000000000000000000000000000008F +:10D1A0008003D5CC80024DF0800248880000017CCD +:10D1B000000000000000000000000000000000006F +:10D1C0008003D5DC80024A90800249000000018083 +:10D1D000000000000000000000000000000000004F +:10D1E0008003D5E880024DF0800248880000019C51 +:10D1F000000000000000000000000000000000002F +:10D200008003D5F880024DF0800248880000018438 +:10D21000000000000000000000000001000000000D +:10D220008003D60080024DF0800248880000006430 +:10D2300000000000000000000000000200000000EC +:10D240008003D60880024DF0800248880000014823 +:10D2500000000000000000000000000100000000CD +:10D260008003D62080024DF080024888000001949F +:10D2700000000000000000000000000100000000AD +:10D280008003D62C80024A9080024900000001A051 +:10D29000000000000000000000000000000000008E +:10D2A0008003D63480024DF0800248880000019847 +:10D2B000000000000000000000000001000000006D +:10D2C0008003D63C80024DF0800248880000014C6B +:10D2D000000000000000000000000001000000004D +:10D2E0008003D64880024DF080024888000001A4E7 +:10D2F00000000000000000000000271000000000F7 +:10D300002A0000004F50454E000000005348415293 +:10D31000454400004C454150000000005745503145 +:10D320003034000057455034300000005750412D34 +:10D3300045415000494545453830323158000000DC +:10D340005750410052534E005750413200000000E8 +:10D3500025734F50454E00002573534841524544B4 +:10D360000000000025734C454150000025734343E5 +:10D370004D5000002573544B49500000257357450C +:10D3800050313034000000002573574550343000D0 +:10D3900025734E4F4E45000025735750412D505375 +:10D3A0004B00000025735750412D454150000000AF +:10D3B000257349454545383032315800257357505B +:10D3C000412D4E4F4E45000025735750410000003F +:10D3D000257352534E0000007765705F6B657925A9 +:10D3E0006400000025732573000000007363616E04 +:10D3F0005F73736964000000627373696400000006 +:10D4000070726F746F0000006B65795F6D676D748B +:10D4100000000000706169727769736500000000A8 +:10D4200067726F7570000000617574685F616C678A +:10D4300000000000616E6F6E796D6F75735F6964D7 +:10D44000656E74697479000065617070736B0000BB +:10D450006E61690070617373776F72640000000021 +:10D4600063615F636572740063615F70617468001B +:10D47000636C69656E745F6365727400707269765F +:10D480006174655F6B657900707269766174655F60 +:10D490006B65795F706173737764000064685F66C1 +:10D4A000696C65007375626A6563745F6D6174634E +:10D4B00068000000616C747375626A6563745F6D07 +:10D4C000617463680000000063615F6365727432B9 +:10D4D0000000000063615F7061746832000000004A +:10D4E000636C69656E745F6365727432000000007E +:10D4F000707269766174655F6B6579320000000057 +:10D50000707269766174655F6B6579325F706173A3 +:10D510007377640064685F66696C653200000000C0 +:10D520007375626A6563745F6D617463683200006D +:10D53000616C747375626A6563745F6D617463684E +:10D5400032000000706861736531000070686173BB +:10D5500065320000706373630000000070696E0044 +:10D56000656E67696E655F69640000006B65795F71 +:10D57000696400006561706F6C5F666C6167730061 +:10D580007765705F6B657930000000007765705FCC +:10D590006B657931000000007765705F6B657932EB +:10D5A000000000007765705F6B6579330000000054 +:10D5B0007765705F74785F6B6579696478000000E7 +:10D5C0007072696F72697479000000006561705F44 +:10D5D000776F726B61726F756E6400007061635F6C +:10D5E00066696C6500000000667261676D656E7447 +:10D5F0005F73697A650000006D6F6465000000006C +:10D600007573655F7770730070726F6163746976AC +:10D61000655F6B65795F63616368696E67000000D1 +:10D6200064697361626C65640000000069645F7323 +:10D6300074720000706565726B6579006D6978655C +:10D64000645F63656C6C00006672657175656E631E +:10D6500079000000888E000077696669656E6769E9 +:10D660006E65000057694669456E67696E65000022 +:10D670008003D6588003D664800254C880025420A8 +:10D6800080024F98800252E0800253E8800254A446 +:10D690000000000080024F9A800252C880024F941E +:10D6A00080024F96800252B08002529880024F9CB6 +:10D6B00080024F9E8002523C800251E0800251D491 +:10D6C000800251AC00000000000000008002518088 +:10D6D00080024FF480024FD00000000000000000E4 +:10D6E000000000000000000000000000000000003A +:10D6F000000000000000000080024FA08002564E93 +:10D700008002564A80025646800256408002563CAD +:10D7100080025636800256328002562C80025626EF +:10D72000800256928002568C800256888002568271 +:10D730008002567C80025676800256728002566CB9 +:10D740008002566680025B3480025C0880025BE0E7 +:10D7500080025BBA80025BA080025B3480025B3493 +:10D7600080025B3480025DC280025E3A80025E12FB +:10D7700080025D8E80025CC280025AF680025DF4F7 +:10D7800080025DCE800268DC80026AA280026A00AC +:10D7900080026904800268F2800269EE800268DC1F +:10D7A000800268DC800268E8800268E8800268E83D +:10D7B000696E76616C696461746500004354524C13 +:10D7C0002D4556454E542D4541502D535543434507 +:10D7D0005353204541502061757468656E746963C8 +:10D7E0006174696F6E20636F6D706C657465642021 +:10D7F0007375636365737366756C6C7920286261F9 +:10D80000736564206F6E206C6F776572206C617930 +:10D810006572207375636365737329004354524CBA +:10D820002D4556454E542D4541502D5355434345A6 +:10D830005353204541502061757468656E74696367 +:10D840006174696F6E20636F6D706C6574656420C0 +:10D850007375636365737366756C6C7900000000A3 +:10D860004354524C2D4556454E542D4541502D465E +:10D8700041494C55524520454150206175746865B9 +:10D880006E7469636174696F6E206661696C65644A +:10D8900000000000494E495449414C495A45000096 +:10D8A0004541503A206D6F7265207468616E202585 +:10D8B000642061757468656E7469636174696F6E04 +:10D8C00020726F756E6473202D2061626F72740018 +:10D8D0004354524C2D4556454E542D4541502D4EE6 +:10D8E0004F54494649434154494F4E2000000000DF +:10D8F0004354524C2D4556454E542D4541502D53C1 +:10D900005441525445442045415020617574686526 +:10D910006E7469636174696F6E207374617274658B +:10D92000640000004745545F4D4554484F44000093 +:10D930004541503A204661696C656420746F2069E6 +:10D940006E697469616C697A6520454150206D6526 +:10D9500074686F643A2076656E646F722025752056 +:10D960006D6574686F642025752028257329000073 +:10D970004354524C2D4556454E542D4541502D4D46 +:10D980004554484F44204541502076656E646F727F +:10D99000202575206D6574686F6420257520282505 +:10D9A00073292073656C656374656400454150207C +:10D9B0006465696E697400008002794480027ADAD5 +:10D9C00080027B5880027BA280027CC880027CD2CD +:10D9D00080027AC45750413A20544B495020636F1B +:10D9E000756E7465726D656173757265732073749D +:10D9F0006F707065640000004173736F63696174D8 +:10DA0000656420746F2061206E6577204253533A1D +:10DA10002042535349443D253032783A25303278FC +:10DA20003A253032783A253032783A253032783A11 +:10DA300025303278000000004173736F63696174B0 +:10DA40006564207769746820253032783A25303251 +:10DA5000783A253032783A253032783A25303278A3 +:10DA60003A253032780000005750413A20342D5783 +:10DA700061792048616E647368616B6520666169D5 +:10DA80006C6564202D207072652D73686172656409 +:10DA9000206B6579206D617920626520696E636F06 +:10DAA00072726563740000004354524C2D45564514 +:10DAB0004E542D444953434F4E4E45435445442004 +:10DAC0002D20446973636F6E6E656374206576659F +:10DAD0006E74202D2072656D6F7665206B6579738D +:10DAE000000000004D69636861656C204D4943206A +:10DAF0006661696C757265206465746563746564DC +:10DB000000000000544B495020636F756E746572BD +:10DB10006D65617375726573207374617274656489 +:10DB200000000000000000080000000600000006E1 +:10DB3000496E646578202F204141202F20504D4BA5 +:10DB40004944202F2065787069726174696F6E2076 +:10DB500028696E207365636F6E647329202F206FB0 +:10DB600070706F7274756E69737469630A00000077 +:10DB7000256420253032783A253032783A25303203 +:10DB8000783A253032783A253032783A2530327872 +:10DB9000200000002025642025640A00504D4B2001 +:10DBA0004E616D650000000052534E3A207374615F +:10DBB0007274696E67207072652D61757468656E28 +:10DBC0007469636174696F6E2077697468202530A9 +:10DBD00032783A253032783A253032783A25303268 +:10DBE000783A253032783A253032780052534E3A1E +:10DBF0002070726F63657373696E6720504D4B536D +:10DC0000412063616E646964617465206C6973743A +:10DC10000000000052534E3A206E6F7420696E204F +:10DC20007375697461626C652073746174652066D4 +:10DC30006F72206E6577207072652D6175746865EE +:10DC40006E7469636174696F6E00000052534E3ADE +:10DC500020504D4B53412063616E6469646174656B +:10DC600020253032783A253032783A253032783AE9 +:10DC7000253032783A253032783A253032782073A0 +:10DC8000656C656374656420666F72207072652DC3 +:10DC900061757468656E7469636174696F6E0000A4 +:10DCA00052534E3A20504D4B53412063616E64698C +:10DCB0006461746520253032783A253032783A250F +:10DCC0003032783A253032783A253032783A253079 +:10DCD000327820646F6573206E6F74206E656564A2 +:10DCE000207072652D61757468656E746963617406 +:10DCF000696F6E20616E796D6F72650052534E3A96 +:10DD0000206E6F206D6F72652070656E64696E673E +:10DD100020504D4B53412063616E646964617465AA +:10DD20007300000052534E3A2061646465642050D1 +:10DD30004D4B53412063616368652063616E646984 +:10DD40006461746520253032783A253032783A257E +:10DD50003032783A253032783A253032783A2530E8 +:10DD60003278207072696F202564000052534E3A59 +:10DD7000207072652D61757468656E746963617475 +:10DD8000696F6E207769746820253032783A2530C3 +:10DD900032783A253032783A253032783A253032A6 +:10DDA000783A253032782074696D6564206F757417 +:10DDB00000000000636F6D706C657465642073759E +:10DDC000636365737366756C6C79000052534E3AE9 +:10DDD000206661696C656420746F20676574206DCE +:10DDE00061737465722073657373696F6E206B6500 +:10DDF000792066726F6D207072652D617574682070 +:10DE00004541504F4C207374617465206D616368A7 +:10DE1000696E65730000000052534E3A20707265BF +:10DE20002D61757468656E7469636174696F6E20C5 +:10DE30007769746820253032783A253032783A256F +:10DE40003032783A253032783A253032783A2530F7 +:10DE50003278202573000000800000008002B51C8D +:10DE60008002B50A8002B5008002B4FA8002B4F4E0 +:10DE70008002B4EE8002B4E8000FAC010050F20260 +:10DE8000000FAC02000FAC01000FAC050050F20215 +:10DE9000000FAC040050F2010050F2010050F201FA +:10DEA0000050F2050050F200000FAC00000FAC0370 +:10DEB0000050F200000FAC0449454545203830328F +:10DEC0002E315820286E6F20575041290000000045 +:10DED0005750412F49454545203830322E31582F73 +:10DEE00045415000575041322F4945454520383073 +:10DEF000322E31582F45415000000000575041321A +:10DF00002D50534B000000005745502D3430000079 +:10DF10005745502D313034007061697277697365EF +:10DF20005F6369706865723D25730A67726F75700B +:10DF30005F6369706865723D25730A6B65795F6D13 +:10DF4000676D743D25730A005750413A20257320B0 +:10DF5000287372633D253032783A253032783A257D +:10DF60003032783A253032783A253032783A2530D6 +:10DF7000327829005750413A204B6579206E656709 +:10DF80006F74696174696F6E20636F6D706C657416 +:10DF90006564207769746820253032783A253032FC +:10DFA000783A253032783A253032783A253032784E +:10DFB0003A25303278205B50544B3D25732047542E +:10DFC0004B3D25735D0000005750413A20496E7665 +:10DFD000616C6964204541504F4C2D4B657920663A +:10DFE00072616D65202D206B65795F6461746120BD +:10DFF0006F766572666C6F7720282564203E202539 +:10E000006C752900494520696E20332F34206D73CB +:10E010006720646F6573206E6F74206D6174636830 +:10E02000207769746820494520696E2042656163E4 +:10E030006F6E2F50726F62655265737020286E6F1D +:10E040002049453F29000000494520696E20332FB3 +:10E0500034206D736720646F6573206E6F74206D5C +:10E0600061746368207769746820494520696E206F +:10E07000426561636F6E2F50726F62655265737097 +:10E0800000000000506F737369626C6520646F77E5 +:10E090006E67726164652061747461636B2064658E +:10E0A000746563746564202D2052534E207761732C +:10E0B00020656E61626C656420616E642052534E0F +:10E0C0002049452077617320696E206D7367203386 +:10E0D0002F342C20627574206E6F7420696E20427C +:10E0E0006561636F6E2F50726F6265526573700069 +:10E0F0005750413A204661696C656420746F20670F +:10E100006574206D61737465722073657373696FD4 +:10E110006E206B65792066726F6D204541504F4CC3 +:10E12000207374617465206D616368696E65730046 +:10E130005750413A204B65792068616E647368617D +:10E140006B652061626F7274656400005750413ADC +:10E15000204661696C656420746F20676574207265 +:10E16000616E646F6D206461746120666F7220530C +:10E170004E6F6E6365000000506169727769736568 +:10E18000206B657920657870616E73696F6E000031 +:10E190005750413A2047726F75702072656B6579F0 +:10E1A000696E6720636F6D706C6574656420776954 +:10E1B000746820253032783A253032783A2530326A +:10E1C000783A253032783A253032783A253032782C +:10E1D000205B47544B3D25735D00000000000000AC +:10E1E000000000000050F204000FAC02000FAC0170 +:10E1F00052096AD53036A538BF40A39E81F3D7FBBC +:10E200007CE339829B2FFF87348E4344C4DEE9CB05 +:10E21000547B9432A6C2233DEE4C950B42FAC34E7A +:10E22000082EA16628D924B2765BA2496D8BD12530 +:10E2300072F8F66486689816D4A45CCC5D65B692D4 +:10E240006C704850FDEDB9DA5E154657A78D9D8478 +:10E2500090D8AB008CBCD30AF7E45805B8B3450698 +:10E26000D02C1E8FCA3F0F02C1AFBD0301138A6BB2 +:10E270003A9111414F67DCEA97F2CFCEF0B4E673E2 +:10E2800096AC7422E7AD3585E2F937E81C75DF6E90 +:10E2900047F11A711D29C5896FB7620EAA18BE1BF6 +:10E2A000FC563E4BC6D279209ADBC0FE78CD5AF49C +:10E2B0001FDDA8338807C731B11210592780EC5FE2 +:10E2C00060517FA919B54A0D2DE57A9F93C99CEF3E +:10E2D000A0E03B4DAE2AF5B0C8EBBB3C835399613F +:10E2E000172B047EBA77D626E169146355210C7D7D +:10E2F00001020408102040801B36000051F4A75092 +:10E300007E4165531A17A4C33A275E963BAB6BCB8D +:10E310001F9D45F1ACFA58AB4BE303932030FA55FF +:10E32000AD766DF688CC7691F5024C254FE5D7FC9D +:10E33000C52ACBD726354480B562A38FDEB15A49B2 +:10E3400025BA1B6745EA0E985DFEC0E1C32F750232 +:10E35000814CF0128D4697A36BD3F9C6038F5FE70C +:10E3600015929C95BF6D7AEB955259DAD4BE832DE8 +:10E37000587421D349E069298EC9C84475C2896A95 +:10E38000F48E797899583E6B27B971DDBEE14FB6AE +:10E39000F088AD17C920AC667DCE3AB463DF4A1869 +:10E3A000E51A31829751336062537F45B16477E05B +:10E3B000BB6BAE84FE81A01CF9082B947048685892 +:10E3C0008F45FD1994DE6C87527BF8B7AB73D3236E +:10E3D000724B02E2E31F8F576655AB2AB2EB280758 +:10E3E0002FB5C20386C57B9AD33708A5302887F29C +:10E3F00023BFA5B202036ABAED16825C8ACF1C2B3A +:10E40000A779B492F307F2F04E69E2A165DAF4CD90 +:10E410000605BED5D134621FC4A6FE8A342E539D94 +:10E42000A2F355A0058AE132A4F6EB750B83EC3913 +:10E430004060EFAA5E719F06BD6E10513E218AF9C1 +:10E4400096DD063DDD3E05AE4DE6BD4691548DB5EB +:10E4500071C45D050406D46F605015FF1998FB2444 +:10E46000D6BDE997894043CC67D99E77B0E842BDD5 +:10E4700007898B88E7195B3879C8EEDBA17C0A47EE +:10E480007C420FE9F8841EC90000000009808683E1 +:10E49000322BED481E1170AC6C5A724EFD0EFFFB14 +:10E4A0000F8538563DAED51E362D39270A0FD96453 +:10E4B000685CA6219B5B54D124362E3A0C0A67B1C6 +:10E4C0009357E70FB4EE96D21B9B919E80C0C54F29 +:10E4D00061DC20A25A774B691C121A16E293BA0A21 +:10E4E000C0A02AE53C22E043121B171D0E090D0BAC +:10E4F000F28BC7AD2DB6A8B9141EA9C857F119855E +:10E50000AF75074CEE99DDBBA37F60FDF701269F39 +:10E510005C72F5BC44663BC55BFB7E348B4329765D +:10E52000CB23C6DCB6EDFC68B8E4F163D731DCCAB6 +:10E53000426385101397224084C61120854A247DAA +:10E54000D2BB3DF8AEF93211C729A16D1D9E2F4BEC +:10E55000DCB230F30D8652EC77C1E3D02BB3166CEE +:10E56000A970B999119448FA47E96422A8FC8CC4AF +:10E57000A0F03F1A567D2CD8223390EF87494EC722 +:10E58000D938D1C18CCAA2FE98D40B36A6F581CF5A +:10E59000A57ADE28DAB78E263FADBFA42C3A9DE4DB +:10E5A0005078920D6A5FCC9B547E4662F68D13C202 +:10E5B00090D8B8E82E39F75E82C3AFF59F5D80BE74 +:10E5C00069D0937C6FD52DA9CF2512B3C8AC993BE8 +:10E5D00010187DA7E89C636EDB3BBB7BCD267809DA +:10E5E0006E5918F4EC9AB701834F9AA8E6956E65B8 +:10E5F000AAFFE67E21BCCF08EF15E8E6BAE79BD973 +:10E600004A6F36CEEA9F09D429B07CD631A4B2AF86 +:10E610002A3F2331C6A5943035A266C0744EBC375C +:10E62000FC82CAA6E090D0B033A7D815F104984A6E +:10E6300041ECDAF77FCD500E1791F62F764DD68D3F +:10E6400043EFB04DCCAA4D54E49604DF9ED1B5E320 +:10E650004C6A881BC12C1FB84665517F9D5EEA0439 +:10E66000018C355DFA877473FB0B412EB3671D5A1D +:10E6700092DBD252E91056336DD647139AD7618C8C +:10E6800037A10C7A59F8148EEB133C89CEA927EEEA +:10E69000B761C935E11CE5ED7A47B13C9CD2DF5941 +:10E6A00055F2733F1814CE7973C737BF53F7CDEACD +:10E6B0005FFDAA5BDF3D6F147844DB86CAAFF38150 +:10E6C000B968C43E3824342CC2A3405F161DC372FF +:10E6D000BCE2250C283C498BFF0D954139A80171FE +:10E6E000080CB3DED8B4E49C6456C1907BCB846143 +:10E6F000D532B670486C5C74D0B85742C66363A517 +:10E70000F87C7C84EE777799F67B7B8DFFF2F20DB7 +:10E71000D66B6BBDDE6F6FB191C5C55460303050A4 +:10E7200002010103CE6767A9562B2B7DE7FEFE1978 +:10E73000B5D7D7624DABABE6EC76769A8FCACA45B1 +:10E740001F82829D89C9C940FA7D7D87EFFAFA153B +:10E75000B25959EB8E4747C9FBF0F00B41ADADEC18 +:10E76000B3D4D4675FA2A2FD45AFAFEA239C9CBFA0 +:10E7700053A4A4F7E47272969BC0C05B75B7B7C28E +:10E78000E1FDFD1C3D9393AE4C26266A6C36365A4D +:10E790007E3F3F41F5F7F70283CCCC4F6834345CC1 +:10E7A00051A5A5F4D1E5E534F9F1F108E2717193D1 +:10E7B000ABD8D873623131532A15153F0804040CC5 +:10E7C00095C7C752462323659DC3C35E30181828DA +:10E7D000379696A10A05050F2F9A9AB50E070709D5 +:10E7E000241212361B80809BDFE2E23DCDEBEB264C +:10E7F0004E2727697FB2B2CDEA75759F1209091BB2 +:10E800001D83839E582C2C74341A1A2E361B1B2DF4 +:10E81000DC6E6EB2B45A5AEE5BA0A0FBA45252F664 +:10E82000763B3B4DB7D6D6617DB3B3CE5229297B1B +:10E83000DDE3E33E5E2F2F7113848497A65353F5D7 +:10E84000B9D1D16800000000C1EDED2C402020605E +:10E85000E3FCFC1F79B1B1C8B65B5BEDD46A6ABE5C +:10E860008DCBCB4667BEBED97239394B944A4ADE4E +:10E87000984C4CD4B05858E885CFCF4ABBD0D06B19 +:10E88000C5EFEF2A4FAAAAE5EDFBFB16864343C569 +:10E890009A4D4DD766333355118585948A4545CFBA +:10E8A000E9F9F91004020206FE7F7F81A05050F0C2 +:10E8B000783C3C44259F9FBA4BA8A8E3A25151F352 +:10E8C0005DA3A3FE804040C0058F8F8A3F9292AD2A +:10E8D000219D9DBC70383848F1F5F50463BCBCDF60 +:10E8E00077B6B6C1AFDADA75422121632010103055 +:10E8F000E5FFFF1AFDF3F30EBFD2D26D81CDCD4CF3 +:10E90000180C0C1426131335C3ECEC2FBE5F5FE11B +:10E91000359797A2884444CC2E17173993C4C4570F +:10E9200055A7A7F2FC7E7E827A3D3D47C86464AC61 +:10E93000BA5D5DE73219192BE6737395C06060A06C +:10E94000198181989E4F4FD1A3DCDC7F442222663F +:10E95000542A2A7E3B9090AB0B8888838C4646CA0B +:10E96000C7EEEE296BB8B8D32814143CA7DEDE79C5 +:10E97000BC5E5EE2160B0B1DADDBDB76DBE0E03B45 +:10E9800064323256743A3A4E140A0A1E924949DBEE +:10E990000C06060A4824246CB85C5CE49FC2C25D85 +:10E9A000BDD3D36E43ACACEFC46262A6399191A8DB +:10E9B000319595A4D3E4E437F279798BD5E7E73242 +:10E9C0008BC8C8436E373759DA6D6DB7018D8D8CA2 +:10E9D000B1D5D5649C4E4ED249A9A9E0D86C6CB48F +:10E9E000AC5656FAF3F4F407CFEAEA25CA6565AFE8 +:10E9F000F47A7A8E47AEAEE9100808186FBABAD525 +:10EA0000F07878884A25256F5C2E2E72381C1C24DD +:10EA100057A6A6F173B4B4C797C6C651CBE8E8238E +:10EA2000A1DDDD7CE874749C3E1F1F21964B4BDDFD +:10EA300061BDBDDC0D8B8B860F8A8A85E07070907E +:10EA40007C3E3E4271B5B5C4CC6666AA904848D8B3 +:10EA500006030305F7F6F6011C0E0E12C26161A350 +:10EA60006A35355FAE5757F969B9B9D017868691BF +:10EA700099C1C1583A1D1D27279E9EB9D9E1E13899 +:10EA8000EBF8F8132B9898B322111133D26969BBB4 +:10EA9000A9D9D970078E8E89339494A72D9B9BB6E4 +:10EAA0003C1E1E2215878792C9E9E92087CECE49F0 +:10EAB000AA5555FF50282878A5DFDF7A038C8C8F64 +:10EAC00059A1A1F8098989801A0D0D1765BFBFDA10 +:10EAD000D7E6E631844242C6D06868B8824141C375 +:10EAE000299999B05A2D2D771E0F0F117BB0B0CBFD +:10EAF000A85454FC6DBBBBD62C16163A002020201F +:10EB000020202020202028282828282020202020DD +:10EB100020202020202020202020202020881010AD +:10EB20001010101010101010101010101004040409 +:10EB300004040404040404101010101010104141C7 +:10EB400041414141010101010101010101010101B5 +:10EB500001010101010101011010101010104242C9 +:10EB60004242424202020202020202020202020285 +:10EB70000202020202020202101010102000000025 +:10EB80000000000000000000000000000000000085 +:10EB90000000000000000000000000000000000075 +:10EBA0000000000000000000000000000000000065 +:10EBB0000000000000000000000000000000000055 +:10EBC0000000000000000000000000000000000045 +:10EBD0000000000000000000000000000000000035 +:10EBE0000000000000000000000000000000000025 +:10EBF0000000000000000000000000000000000015 +:10EC00002D2D0000504F5349584C595F434F5252DD +:10EC10004543540025733A206F7074696F6E20600D +:10EC200025732720697320616D626967756F75733D +:10EC30002028636F756C6420626520602D2D25731C +:10EC400027206F7220602D2D257327290A000000D0 +:10EC500025733A20696E76616C6964206F707469FF +:10EC60006F6E202D2D20602D2563270A00000000E7 +:10EC700025733A20617267756D656E7420726571D7 +:10EC8000756972656420666F72206F7074696F6E4B +:10EC9000206000002D2D2573270A00002D256327F5 +:10ECA0000A00000043000000000004A88002F4668F +:10ECB0008002F4888002F2B08002F2E88002F4520E +:10ECC0008002F4508002F3FE8002F4268002F3DC1E +:10ECD0008002F3DC8002F3CC8002F3DC8002F3EAF2 +:10ECE0008002F3EA8002F3DC3030303030303030F4 +:10ECF000303030303030303001020B040B0506016B +:10ED00000B01020B040B0506010B0B0B03040B0597 +:10ED10000B0B0B0B0B0B040B050B0B0B0B0B0B0B50 +:10ED20000B0B0B0B0B05080B040B0B070B0B0B0949 +:10ED30000B040B050B0B0B0B0A0B040B0B0B0B0B38 +:10ED40000B0B0B040B0B0B0B0B0B0B030B0B0B0B22 +:10ED50000B0B0B0B080B0B0B0B0B0B00000000003D +:10ED6000000000000001000304000000000001009A +:10ED7000030400000000000007030400000000007E +:10ED80000000030400000000000000000400000078 +:10ED90000000020003040000000000010005060559 +:10EDA0000000000001000506000000000000000354 +:10EDB0000400000000000008000000000000000047 +:10EDC000080000000000000000000000000000003B +:10EDD0003031323334353637383941424344454691 +:10EDE0000000000030313233343536373839616253 +:10EDF0006364656600000000202020202020202081 +:10EE000020202020202020200808080808080808C2 +:10EE10000808080808080808080808080808080872 +:10EE2000080808080808080807080807020808076B +:10EE30000808060708070508000101010101010192 +:10EE40000101080808080808080408040404040468 +:10EE50000808080803080804080808040804080843 +:10EE6000040808080808080808040804040404043E +:10EE70000304030803080404040308040304080843 +:10EE8000040803080808080808080808080808080B +:10EE900008080808080808080808080808080808F2 +:10EEA00008080808080808080808080808080808E2 +:10EEB00008080808080808080808080808080808D2 +:10EEC00008080808080808080808080808080808C2 +:10EED00008080808080808080808080808080808B2 +:10EEE00008080808080808080808080808080808A2 +:10EEF0000808080808080808080808080808080892 +:10EF00000808080808080808000A000100020003B1 +:10EF1000000400050006000700080009000A000BB5 +:10EF2000000C000D000E000F00100000000000009B +:10EF300000000000000000000000000000000000D1 +:10EF400000000000000000000000000000000000C1 +:10EF500000000000000000000000000000000000B1 +:10EF600000000000000000000000000000000000A1 +:10EF70000000000000000000000000000000000091 +:10EF800000000000000000000000000080037FB4CB +:10EF900080037E2080037E2080037E2080037E20ED +:10EFA00080037E2080037E2080037E2080037E20DD +:10EFB00080037E20FFFFFFFFFFFFFFFF49534F2D20 +:10EFC000383835392D310000800333228003334433 +:10EFD0008003316C800331A48003330E8003330C33 +:10EFE000800332BA800332E2800332988003329881 +:10EFF0008003328880033298800332A6800332A6D1 +:10F00000800332988003363480034AA480034AA4E4 +:10F010008003364480034AA480034AA480034AA4A0 +:10F0200080034AA480034AA480034AA4800336488C +:10F030008003371C80034AA48003371880033724D9 +:10F0400080034AA480033842800338468003384650 +:10F0500080033846800338468003384680033846AC +:10F0600080033846800338468003384680034AA42C +:10F0700080034AA480034AA480034AA480034AA4CC +:10F0800080034AA480034AA480034AA480034AA4BC +:10F0900080034AA48003394480033B9680034AA43A +:10F0A00080033B9680034AA480034AA480034AA4B9 +:10F0B00080034AA48003387880034AA480034AA4CA +:10F0C0008003416280034AA480034AA480034AA4C7 +:10F0D00080034AA480034AA48003452680034AA4EF +:10F0E00080034AA48003361A80034AA480034AA4FA +:10F0F00080034AA480034AA480034AA480034AA44C +:10F1000080034AA480034AA480034AA480034AA43B +:10F11000800338988003395A80033B9680033B96DE +:10F1200080033B968003387C8003395A80034AA4CD +:10F1300080034AA48003388080034AA480033FA24E +:10F1400080034178800343A48003389480034AA459 +:10F150008003445880034AA48003453C80034AA4AA +:10F1600080034AA48003476E01020B040B050601CD +:10F170000B01020B040B0506010B0B0B03040B0523 +:10F180000B0B0B0B0B0B040B050B0B0B0B0B0B0BDC +:10F190000B0B0B0B0B05080B040B0B070B0B0B09D5 +:10F1A0000B040B050B0B0B0B0A0B040B0B0B0B0BC4 +:10F1B0000B0B0B040B0B0B0B0B0B0B030B0B0B0BAE +:10F1C0000B0B0B0B080B0B0B0B0B0B0000000000C9 +:10F1D0000000000000010003040000000000010026 +:10F1E000030400000000000007030400000000000A +:10F1F0000000030400000000000000000400000004 +:10F2000000000200030400000000000100050605E4 +:10F2100000000000010005060000000000000003DF +:10F2200004000000000000080000000000000000D2 +:10F2300008000000000000000000000000000000C6 +:10F24000494E4600696E66004E414E006E616E008A +:10F2500020202020202020202020202020202020AE +:10F26000303030303030303030303030303030309E +:10F27000080808080808080808080808080808080E +:10F2800008080808080808080808080808080808FE +:10F2900007080807020808070808060708070508FE +:10F2A0000001010101010101010108080808080825 +:10F2B00008040804040404040808080803080804EF +:10F2C00008080804080408080408080808080808CA +:10F2D00008040804040404040304030803080404E1 +:10F2E00004030804030408080408030808080808BD +:10F2F000080808080808080808080808080808088E +:10F30000080808080808080808080808080808087D +:10F31000080808080808080808080808080808086D +:10F32000080808080808080808080808080808085D +:10F33000080808080808080808080808080808084D +:10F34000080808080808080808080808080808083D +:10F35000080808080808080808080808080808082D +:10F36000080808080808080808080808080808081D +:10F37000496E66696E697479000000004E614E0046 +:10F3800000000005000000190000007D3FF00000B3 +:10F390000000000040240000000000004059000070 +:10F3A00000000000408F40000000000040C38800C3 +:10F3B0000000000040F86A0000000000412E848038 +:10F3C00000000000416312D0000000004197D78484 +:10F3D0000000000041CDCD65000000004202A05FAA +:10F3E0002000000042374876E8000000426D1A9481 +:10F3F000A200000042A2309CE540000042D6BCC4FE +:10F400001E900000430C6BF5263400004341C37985 +:10F4100037E080004376345785D8A00043ABC16DF8 +:10F42000674EC80043E158E460913D004415AF1DAC +:10F4300078B58C40444B1AE4D6E2EF504480F0CFCC +:10F44000064DD59244B52D02C7E14AF644EA784309 +:10F4500079D99DB44341C37937E080004693B8B56C +:10F46000B5056E174D384F03E93FF9F55A827748D5 +:0CF47000F9301D3275154FDD7F73BF3C75 +:10F480000000000455736167653A2074746370204E +:10F490002D742F2D72205B2D6F7074696F6E735DEC +:10F4A00020686F73740A20202020202020202D6CDB +:10F4B0002020202020206C656E677468206F6620F5 +:10F4C00062756673207772697474656E20746F203C +:10F4D0006E6574776F726B202864656661756C74F5 +:10F4E0002031303234290A20202020202020202DD5 +:10F4F0006E2020202020206E756D626572206F6660 +:10F500002062756673207772697474656E20746FFB +:10F51000206E6574776F726B202864656661756C08 +:10F52000742031303234290A20202020202020204D +:10F530002D70202020202020706F7274206E756D39 +:10F5400062657220746F2073656E6420746F20286A +:10F5500064656661756C742032303030290A202071 +:10F560002020202020202D752020202020207564A0 +:10F57000700A20202020202020202D7620202020EE +:10F580002020766572626F73650A000080039954CB +:10F59000000000000000000000000000000000006B +:10F5A000000000000000000000000000000000005B +:10F5B000000000000000000000000000000000004B +:10F5C000000000000000000000000000000000003B +:10F5D000000000000000000000000000000000002B +:10F5E000000000000000000000000000000000001B +:10F5F000000000000000000000000000000000000B +:10F6000000000000000000000000000000000000FA +:10F6100000000000000000000000000000000000EA +:10F6200000000000000000000000000000000000DA +:10F6300000000000000000000000000000000000CA +:10F6400000000000000000000000000000000000BA +:10F6500000000000000000000000000000000000AA +:10F660000000000400000000ABCD00000000196E97 +:10F6700010000000FFFFFFFFFFFFFFFFFF7590007E +:10F68000000001FFFFFFFFFEFFFFFFFFFF751000FF +:10F69000000001FFFFFFFFFE00050000800149ECB4 +:10F6A000800149EC800149EC800149EC0000000038 +:10F6B000000002340000000C02040B0C1216182487 +:10F6C0003048606C000000000000000000000000F6 +:10F6D00000000010010000146D3E86B0FFFFFFFF28 +:10F6E000FFFF0000000003E800000001000000012F +:10F6F00000000320000000010000000000000008DE +:10F70000000000020000006400000000000000058E +:10F710000000000F000000050000000F000013882B +:10F7200000001388000007D00000138800003E800E +:10F73000000000020000000C02040B0C121618243A +:10F740003048606C00000000000000000000000075 +:10F7500000000000000000000D0102030405060780 +:10F7600008090A0B0C0D000000000011FF0000004A +:10F770000000000000000000000000000000000089 +:10F780000000000000000000000000000000FFFF7B +:10F79000FFFFFFFF00000001000000030000000168 +:10F7A0000000000100000000000000010000000156 +:10F7B0000000000100000001000000000000000146 +:10F7C0000000000A00000005000000000000000525 +:10F7D00000000000FFFFFFFF00000001000000002C +:10F7E00000000002FF000000000000000000000018 +:10F7F0000000000000000000000000000000000009 +:10F80000000000000000FFFFFFFFFFFF00000001FD +:10F810000000000300000000000007D000000064AA +:10F8200003010100060200000000000C82848B8CA2 +:10F83000129618243048606C0000000000000000A0 +:10F8400000000000000000000000000100000001B6 +:10F85000000000010014000000000014000007D0A8 +:10F860000000000000000001000000000000000691 +:10F8700000000001FFFFFFFF0A00000064756D6DCE +:10F88000795F7373696400000000000000000000ED +:10F890000000000000000000000000000000000068 +:10F8A000303030313032303330343035303630373C +:10F8B0003038303930613062306330643065306602 +:10F8C0003130313131323133313431353136313714 +:10F8D00031383139316131623163316431653166DA +:10F8E00000000000000000028003D670000000004D +:10F8F000800255EC80025614800256588002569CB5 +:10F90000800256AA800255F4800256B6800256D074 +:10F910008002614C8003EAFD0000003F000000010E +:10F920008003EF2C8003EF4C8003EF6C000000009D +:10F9300000000000000000000000000000000000C7 +:10F940008003ECA4000000000000000000000000A4 +:10F9500000000000000000000000000000000000A7 +:10F960000000000000000000000000000000000097 +:10F970000000000000000000000000000000000087 +:10F980000000000000000000000000000000000077 +:10F990000000000000000000000000000000000067 +:10F9A0000000000000000000000000000000000057 +:10F9B0000000000000000000000000000000000047 +:10F9C0000000000000000000000000000000000037 +:10F9D0000000000000000000000000000000000027 +:10F9E0000000000000000000000000000000000017 +:10F9F0000000000000000000000000000000000007 +:10FA000000000000000000000000000000000000F6 +:10FA1000000004A800000000000000000000059C99 +:10FA20000000059C000005A4000005A4000005AC32 +:10FA3000000005AC000005B4000005B4000005BCE2 +:10FA4000000005BC000005C4000005C4000005CC92 +:10FA5000000005CC000005D4000005D4000005DC42 +:10FA6000000005DC000005E4000005E4000005ECF2 +:10FA7000000005EC000005F4000005F4000005FCA2 +:10FA8000000005FC00000604000006040000060C4F +:10FA90000000060C00000614000006140000061CFE +:10FAA0000000061C00000624000006240000062CAE +:10FAB0000000062C00000634000006340000063C5E +:10FAC0000000063C00000644000006440000064C0E +:10FAD0000000064C00000654000006540000065CBE +:10FAE0000000065C00000664000006640000066C6E +:10FAF0000000066C00000674000006740000067C1E +:10FB00000000067C00000684000006840000068CCD +:10FB10000000068C00000694000006940000069C7D +:10FB20000000069C000006A4000006A4000006AC2D +:10FB3000000006AC000006B4000006B4000006BCDD +:10FB4000000006BC000006C4000006C4000006CC8D +:10FB5000000006CC000006D4000006D4000006DC3D +:10FB6000000006DC000006E4000006E4000006ECED +:10FB7000000006EC000006F4000006F4000006FC9D +:10FB8000000006FC00000704000007040000070C4A +:10FB90000000070C00000714000007140000071CF9 +:10FBA0000000071C00000724000007240000072CA9 +:10FBB0000000072C00000734000007340000073C59 +:10FBC0000000073C00000744000007440000074C09 +:10FBD0000000074C00000754000007540000075CB9 +:10FBE0000000075C00000764000007640000076C69 +:10FBF0000000076C00000774000007740000077C19 +:10FC00000000077C00000784000007840000078CC8 +:10FC10000000078C00000794000007940000079C78 +:10FC20000000079C000007A4000007A4000007AC28 +:10FC3000000007AC000007B4000007B4000007BCD8 +:10FC4000000007BC000007C4000007C4000007CC88 +:10FC5000000007CC000007D4000007D4000007DC38 +:10FC6000000007DC000007E4000007E4000007ECE8 +:10FC7000000007EC000007F4000007F4000007FC98 +:10FC8000000007FC00000804000008040000080C45 +:10FC90000000080C00000814000008140000081CF4 +:10FCA0000000081C00000824000008240000082CA4 +:10FCB0000000082C00000834000008340000083C54 +:10FCC0000000083C00000844000008440000084C04 +:10FCD0000000084C00000854000008540000085CB4 +:10FCE0000000085C00000864000008640000086C64 +:10FCF0000000086C00000874000008740000087C14 +:10FD00000000087C00000884000008840000088CC3 +:10FD10000000088C00000894000008940000089C73 +:10FD20000000089C000008A4000008A4000008AC23 +:10FD3000000008AC000008B4000008B4000008BCD3 +:10FD4000000008BC000008C4000008C4000008CC83 +:10FD5000000008CC000008D4000008D4000008DC33 +:10FD6000000008DC000008E4000008E4000008ECE3 +:10FD7000000008EC000008F4000008F4000008FC93 +:10FD8000000008FC00000904000009040000090C40 +:10FD90000000090C00000914000009140000091CEF +:10FDA0000000091C00000924000009240000092C9F +:10FDB0000000092C00000934000009340000093C4F +:10FDC0000000093C00000944000009440000094CFF +:10FDD0000000094C00000954000009540000095CAF +:10FDE0000000095C00000964000009640000096C5F +:10FDF0000000096C00000974000009740000097C0F +:10FE00000000097C00000984000009840000098CBE +:10FE10000000098C00000994000009940002000011 +:0CFE2000FFFFFFFF0000000100007AFC63 +:040000058000000077 +:00000001FF diff --git a/libraries/WiFi/extras/binary/wifiHD_2_1.elf b/libraries/WiFi/extras/binary/wifiHD_2_1.elf new file mode 100644 index 000000000..9217d48ae Binary files /dev/null and b/libraries/WiFi/extras/binary/wifiHD_2_1.elf differ diff --git a/libraries/WiFi/extras/binary/wifi_dnld.elf b/libraries/WiFi/extras/binary/wifi_dnld.elf new file mode 100644 index 000000000..11ec3ddc7 Binary files /dev/null and b/libraries/WiFi/extras/binary/wifi_dnld.elf differ diff --git a/libraries/WiFi/extras/binary/wifi_dnld.hex b/libraries/WiFi/extras/binary/wifi_dnld.hex new file mode 100644 index 000000000..bf2c05cf6 --- /dev/null +++ b/libraries/WiFi/extras/binary/wifi_dnld.hex @@ -0,0 +1,10470 @@ +:0200000480007A +:10000000E08F100000000000000000000000000071 +:1000100000000000000000000000000000000000E0 +:1000200000000000000000000000000000000000D0 +:1000300000000000000000000000000000000000C0 +:1000400000000000000000000000000000000000B0 +:1000500000000000000000000000000000000000A0 +:100060000000000000000000000000000000000090 +:100070000000000000000000000000000000000080 +:100080000000000000000000000000000000000070 +:100090000000000000000000000000000000000060 +:1000A0000000000000000000000000000000000050 +:1000B0000000000000000000000000000000000040 +:1000C0000000000000000000000000000000000030 +:1000D0000000000000000000000000000000000020 +:1000E0000000000000000000000000000000000010 +:1000F0000000000000000000000000000000000000 +:1001000000000000000000000000000000000000EF +:1001100000000000000000000000000000000000DF +:1001200000000000000000000000000000000000CF +:1001300000000000000000000000000000000000BF +:1001400000000000000000000000000000000000AF +:10015000000000000000000000000000000000009F +:10016000000000000000000000000000000000008F +:10017000000000000000000000000000000000007F +:10018000000000000000000000000000000000006F +:10019000000000000000000000000000000000005F +:1001A000000000000000000000000000000000004F +:1001B000000000000000000000000000000000003F +:1001C000000000000000000000000000000000002F +:1001D000000000000000000000000000000000001F +:1001E000000000000000000000000000000000000F +:1001F00000000000000000000000000000000000FF +:1002000000000000000000000000000000000000EE +:1002100000000000000000000000000000000000DE +:1002200000000000000000000000000000000000CE +:1002300000000000000000000000000000000000BE +:1002400000000000000000000000000000000000AE +:10025000000000000000000000000000000000009E +:10026000000000000000000000000000000000008E +:10027000000000000000000000000000000000007E +:10028000000000000000000000000000000000006E +:10029000000000000000000000000000000000005E +:1002A000000000000000000000000000000000004E +:1002B000000000000000000000000000000000003E +:1002C000000000000000000000000000000000002E +:1002D000000000000000000000000000000000001E +:1002E000000000000000000000000000000000000E +:1002F00000000000000000000000000000000000FE +:1003000000000000000000000000000000000000ED +:1003100000000000000000000000000000000000DD +:1003200000000000000000000000000000000000CD +:1003300000000000000000000000000000000000BD +:1003400000000000000000000000000000000000AD +:10035000000000000000000000000000000000009D +:10036000000000000000000000000000000000008D +:10037000000000000000000000000000000000007D +:10038000000000000000000000000000000000006D +:10039000000000000000000000000000000000005D +:1003A000000000000000000000000000000000004D +:1003B000000000000000000000000000000000003D +:1003C000000000000000000000000000000000002D +:1003D000000000000000000000000000000000001D +:1003E000000000000000000000000000000000000D +:1003F00000000000000000000000000000000000FD +:1004000000000000000000000000000000000000EC +:1004100000000000000000000000000000000000DC +:1004200000000000000000000000000000000000CC +:1004300000000000000000000000000000000000BC +:1004400000000000000000000000000000000000AC +:10045000000000000000000000000000000000009C +:10046000000000000000000000000000000000008C +:10047000000000000000000000000000000000007C +:10048000000000000000000000000000000000006C +:10049000000000000000000000000000000000005C +:1004A000000000000000000000000000000000004C +:1004B000000000000000000000000000000000003C +:1004C000000000000000000000000000000000002C +:1004D000000000000000000000000000000000001C +:1004E000000000000000000000000000000000000C +:1004F00000000000000000000000000000000000FC +:1005000000000000000000000000000000000000EB +:1005100000000000000000000000000000000000DB +:1005200000000000000000000000000000000000CB +:1005300000000000000000000000000000000000BB +:1005400000000000000000000000000000000000AB +:10055000000000000000000000000000000000009B +:10056000000000000000000000000000000000008B +:10057000000000000000000000000000000000007B +:10058000000000000000000000000000000000006B +:10059000000000000000000000000000000000005B +:1005A000000000000000000000000000000000004B +:1005B000000000000000000000000000000000003B +:1005C000000000000000000000000000000000002B +:1005D000000000000000000000000000000000001B +:1005E000000000000000000000000000000000000B +:1005F00000000000000000000000000000000000FB +:1006000000000000000000000000000000000000EA +:1006100000000000000000000000000000000000DA +:1006200000000000000000000000000000000000CA +:1006300000000000000000000000000000000000BA +:1006400000000000000000000000000000000000AA +:10065000000000000000000000000000000000009A +:10066000000000000000000000000000000000008A +:10067000000000000000000000000000000000007A +:10068000000000000000000000000000000000006A +:10069000000000000000000000000000000000005A +:1006A000000000000000000000000000000000004A +:1006B000000000000000000000000000000000003A +:1006C000000000000000000000000000000000002A +:1006D000000000000000000000000000000000001A +:1006E000000000000000000000000000000000000A +:1006F00000000000000000000000000000000000FA +:1007000000000000000000000000000000000000E9 +:1007100000000000000000000000000000000000D9 +:1007200000000000000000000000000000000000C9 +:1007300000000000000000000000000000000000B9 +:1007400000000000000000000000000000000000A9 +:100750000000000000000000000000000000000099 +:100760000000000000000000000000000000000089 +:100770000000000000000000000000000000000079 +:100780000000000000000000000000000000000069 +:100790000000000000000000000000000000000059 +:1007A0000000000000000000000000000000000049 +:1007B0000000000000000000000000000000000039 +:1007C0000000000000000000000000000000000029 +:1007D0000000000000000000000000000000000019 +:1007E0000000000000000000000000000000000009 +:1007F00000000000000000000000000000000000F9 +:1008000000000000000000000000000000000000E8 +:1008100000000000000000000000000000000000D8 +:1008200000000000000000000000000000000000C8 +:1008300000000000000000000000000000000000B8 +:1008400000000000000000000000000000000000A8 +:100850000000000000000000000000000000000098 +:100860000000000000000000000000000000000088 +:100870000000000000000000000000000000000078 +:100880000000000000000000000000000000000068 +:100890000000000000000000000000000000000058 +:1008A0000000000000000000000000000000000048 +:1008B0000000000000000000000000000000000038 +:1008C0000000000000000000000000000000000028 +:1008D0000000000000000000000000000000000018 +:1008E0000000000000000000000000000000000008 +:1008F00000000000000000000000000000000000F8 +:1009000000000000000000000000000000000000E7 +:1009100000000000000000000000000000000000D7 +:1009200000000000000000000000000000000000C7 +:1009300000000000000000000000000000000000B7 +:1009400000000000000000000000000000000000A7 +:100950000000000000000000000000000000000097 +:100960000000000000000000000000000000000087 +:100970000000000000000000000000000000000077 +:100980000000000000000000000000000000000067 +:100990000000000000000000000000000000000057 +:1009A0000000000000000000000000000000000047 +:1009B0000000000000000000000000000000000037 +:1009C0000000000000000000000000000000000027 +:1009D0000000000000000000000000000000000017 +:1009E0000000000000000000000000000000000007 +:1009F00000000000000000000000000000000000F7 +:100A000000000000000000000000000000000000E6 +:100A100000000000000000000000000000000000D6 +:100A200000000000000000000000000000000000C6 +:100A300000000000000000000000000000000000B6 +:100A400000000000000000000000000000000000A6 +:100A50000000000000000000000000000000000096 +:100A60000000000000000000000000000000000086 +:100A70000000000000000000000000000000000076 +:100A80000000000000000000000000000000000066 +:100A90000000000000000000000000000000000056 +:100AA0000000000000000000000000000000000046 +:100AB0000000000000000000000000000000000036 +:100AC0000000000000000000000000000000000026 +:100AD0000000000000000000000000000000000016 +:100AE0000000000000000000000000000000000006 +:100AF00000000000000000000000000000000000F6 +:100B000000000000000000000000000000000000E5 +:100B100000000000000000000000000000000000D5 +:100B200000000000000000000000000000000000C5 +:100B300000000000000000000000000000000000B5 +:100B400000000000000000000000000000000000A5 +:100B50000000000000000000000000000000000095 +:100B60000000000000000000000000000000000085 +:100B70000000000000000000000000000000000075 +:100B80000000000000000000000000000000000065 +:100B90000000000000000000000000000000000055 +:100BA0000000000000000000000000000000000045 +:100BB0000000000000000000000000000000000035 +:100BC0000000000000000000000000000000000025 +:100BD0000000000000000000000000000000000015 +:100BE0000000000000000000000000000000000005 +:100BF00000000000000000000000000000000000F5 +:100C000000000000000000000000000000000000E4 +:100C100000000000000000000000000000000000D4 +:100C200000000000000000000000000000000000C4 +:100C300000000000000000000000000000000000B4 +:100C400000000000000000000000000000000000A4 +:100C50000000000000000000000000000000000094 +:100C60000000000000000000000000000000000084 +:100C70000000000000000000000000000000000074 +:100C80000000000000000000000000000000000064 +:100C90000000000000000000000000000000000054 +:100CA0000000000000000000000000000000000044 +:100CB0000000000000000000000000000000000034 +:100CC0000000000000000000000000000000000024 +:100CD0000000000000000000000000000000000014 +:100CE0000000000000000000000000000000000004 +:100CF00000000000000000000000000000000000F4 +:100D000000000000000000000000000000000000E3 +:100D100000000000000000000000000000000000D3 +:100D200000000000000000000000000000000000C3 +:100D300000000000000000000000000000000000B3 +:100D400000000000000000000000000000000000A3 +:100D50000000000000000000000000000000000093 +:100D60000000000000000000000000000000000083 +:100D70000000000000000000000000000000000073 +:100D80000000000000000000000000000000000063 +:100D90000000000000000000000000000000000053 +:100DA0000000000000000000000000000000000043 +:100DB0000000000000000000000000000000000033 +:100DC0000000000000000000000000000000000023 +:100DD0000000000000000000000000000000000013 +:100DE0000000000000000000000000000000000003 +:100DF00000000000000000000000000000000000F3 +:100E000000000000000000000000000000000000E2 +:100E100000000000000000000000000000000000D2 +:100E200000000000000000000000000000000000C2 +:100E300000000000000000000000000000000000B2 +:100E400000000000000000000000000000000000A2 +:100E50000000000000000000000000000000000092 +:100E60000000000000000000000000000000000082 +:100E70000000000000000000000000000000000072 +:100E80000000000000000000000000000000000062 +:100E90000000000000000000000000000000000052 +:100EA0000000000000000000000000000000000042 +:100EB0000000000000000000000000000000000032 +:100EC0000000000000000000000000000000000022 +:100ED0000000000000000000000000000000000012 +:100EE0000000000000000000000000000000000002 +:100EF00000000000000000000000000000000000F2 +:100F000000000000000000000000000000000000E1 +:100F100000000000000000000000000000000000D1 +:100F200000000000000000000000000000000000C1 +:100F300000000000000000000000000000000000B1 +:100F400000000000000000000000000000000000A1 +:100F50000000000000000000000000000000000091 +:100F60000000000000000000000000000000000081 +:100F70000000000000000000000000000000000071 +:100F80000000000000000000000000000000000061 +:100F90000000000000000000000000000000000051 +:100FA0000000000000000000000000000000000041 +:100FB0000000000000000000000000000000000031 +:100FC0000000000000000000000000000000000021 +:100FD0000000000000000000000000000000000011 +:100FE0000000000000000000000000000000000001 +:100FF00000000000000000000000000000000000F1 +:1010000000000000000000000000000000000000E0 +:1010100000000000000000000000000000000000D0 +:1010200000000000000000000000000000000000C0 +:1010300000000000000000000000000000000000B0 +:1010400000000000000000000000000000000000A0 +:101050000000000000000000000000000000000090 +:101060000000000000000000000000000000000080 +:101070000000000000000000000000000000000070 +:101080000000000000000000000000000000000060 +:101090000000000000000000000000000000000050 +:1010A0000000000000000000000000000000000040 +:1010B0000000000000000000000000000000000030 +:1010C0000000000000000000000000000000000020 +:1010D0000000000000000000000000000000000010 +:1010E0000000000000000000000000000000000000 +:1010F00000000000000000000000000000000000F0 +:1011000000000000000000000000000000000000DF +:1011100000000000000000000000000000000000CF +:1011200000000000000000000000000000000000BF +:1011300000000000000000000000000000000000AF +:10114000000000000000000000000000000000009F +:10115000000000000000000000000000000000008F +:10116000000000000000000000000000000000007F +:10117000000000000000000000000000000000006F +:10118000000000000000000000000000000000005F +:10119000000000000000000000000000000000004F +:1011A000000000000000000000000000000000003F +:1011B000000000000000000000000000000000002F +:1011C000000000000000000000000000000000001F +:1011D000000000000000000000000000000000000F +:1011E00000000000000000000000000000000000FF +:1011F00000000000000000000000000000000000EF +:1012000000000000000000000000000000000000DE +:1012100000000000000000000000000000000000CE +:1012200000000000000000000000000000000000BE +:1012300000000000000000000000000000000000AE +:10124000000000000000000000000000000000009E +:10125000000000000000000000000000000000008E +:10126000000000000000000000000000000000007E +:10127000000000000000000000000000000000006E +:10128000000000000000000000000000000000005E +:10129000000000000000000000000000000000004E +:1012A000000000000000000000000000000000003E +:1012B000000000000000000000000000000000002E +:1012C000000000000000000000000000000000001E +:1012D000000000000000000000000000000000000E +:1012E00000000000000000000000000000000000FE +:1012F00000000000000000000000000000000000EE +:1013000000000000000000000000000000000000DD +:1013100000000000000000000000000000000000CD +:1013200000000000000000000000000000000000BD +:1013300000000000000000000000000000000000AD +:10134000000000000000000000000000000000009D +:10135000000000000000000000000000000000008D +:10136000000000000000000000000000000000007D +:10137000000000000000000000000000000000006D +:10138000000000000000000000000000000000005D +:10139000000000000000000000000000000000004D +:1013A000000000000000000000000000000000003D +:1013B000000000000000000000000000000000002D +:1013C000000000000000000000000000000000001D +:1013D000000000000000000000000000000000000D +:1013E00000000000000000000000000000000000FD +:1013F00000000000000000000000000000000000ED +:1014000000000000000000000000000000000000DC +:1014100000000000000000000000000000000000CC +:1014200000000000000000000000000000000000BC +:1014300000000000000000000000000000000000AC +:10144000000000000000000000000000000000009C +:10145000000000000000000000000000000000008C +:10146000000000000000000000000000000000007C +:10147000000000000000000000000000000000006C +:10148000000000000000000000000000000000005C +:10149000000000000000000000000000000000004C +:1014A000000000000000000000000000000000003C +:1014B000000000000000000000000000000000002C +:1014C000000000000000000000000000000000001C +:1014D000000000000000000000000000000000000C +:1014E00000000000000000000000000000000000FC +:1014F00000000000000000000000000000000000EC +:1015000000000000000000000000000000000000DB +:1015100000000000000000000000000000000000CB +:1015200000000000000000000000000000000000BB +:1015300000000000000000000000000000000000AB +:10154000000000000000000000000000000000009B +:10155000000000000000000000000000000000008B +:10156000000000000000000000000000000000007B +:10157000000000000000000000000000000000006B +:10158000000000000000000000000000000000005B +:10159000000000000000000000000000000000004B +:1015A000000000000000000000000000000000003B +:1015B000000000000000000000000000000000002B +:1015C000000000000000000000000000000000001B +:1015D000000000000000000000000000000000000B +:1015E00000000000000000000000000000000000FB +:1015F00000000000000000000000000000000000EB +:1016000000000000000000000000000000000000DA +:1016100000000000000000000000000000000000CA +:1016200000000000000000000000000000000000BA +:1016300000000000000000000000000000000000AA +:10164000000000000000000000000000000000009A +:10165000000000000000000000000000000000008A +:10166000000000000000000000000000000000007A +:10167000000000000000000000000000000000006A +:10168000000000000000000000000000000000005A +:10169000000000000000000000000000000000004A +:1016A000000000000000000000000000000000003A +:1016B000000000000000000000000000000000002A +:1016C000000000000000000000000000000000001A +:1016D000000000000000000000000000000000000A +:1016E00000000000000000000000000000000000FA +:1016F00000000000000000000000000000000000EA +:1017000000000000000000000000000000000000D9 +:1017100000000000000000000000000000000000C9 +:1017200000000000000000000000000000000000B9 +:1017300000000000000000000000000000000000A9 +:101740000000000000000000000000000000000099 +:101750000000000000000000000000000000000089 +:101760000000000000000000000000000000000079 +:101770000000000000000000000000000000000069 +:101780000000000000000000000000000000000059 +:101790000000000000000000000000000000000049 +:1017A0000000000000000000000000000000000039 +:1017B0000000000000000000000000000000000029 +:1017C0000000000000000000000000000000000019 +:1017D0000000000000000000000000000000000009 +:1017E00000000000000000000000000000000000F9 +:1017F00000000000000000000000000000000000E9 +:1018000000000000000000000000000000000000D8 +:1018100000000000000000000000000000000000C8 +:1018200000000000000000000000000000000000B8 +:1018300000000000000000000000000000000000A8 +:101840000000000000000000000000000000000098 +:101850000000000000000000000000000000000088 +:101860000000000000000000000000000000000078 +:101870000000000000000000000000000000000068 +:101880000000000000000000000000000000000058 +:101890000000000000000000000000000000000048 +:1018A0000000000000000000000000000000000038 +:1018B0000000000000000000000000000000000028 +:1018C0000000000000000000000000000000000018 +:1018D0000000000000000000000000000000000008 +:1018E00000000000000000000000000000000000F8 +:1018F00000000000000000000000000000000000E8 +:1019000000000000000000000000000000000000D7 +:1019100000000000000000000000000000000000C7 +:1019200000000000000000000000000000000000B7 +:1019300000000000000000000000000000000000A7 +:101940000000000000000000000000000000000097 +:101950000000000000000000000000000000000087 +:101960000000000000000000000000000000000077 +:101970000000000000000000000000000000000067 +:101980000000000000000000000000000000000057 +:101990000000000000000000000000000000000047 +:1019A0000000000000000000000000000000000037 +:1019B0000000000000000000000000000000000027 +:1019C0000000000000000000000000000000000017 +:1019D0000000000000000000000000000000000007 +:1019E00000000000000000000000000000000000F7 +:1019F00000000000000000000000000000000000E7 +:101A000000000000000000000000000000000000D6 +:101A100000000000000000000000000000000000C6 +:101A200000000000000000000000000000000000B6 +:101A300000000000000000000000000000000000A6 +:101A40000000000000000000000000000000000096 +:101A50000000000000000000000000000000000086 +:101A60000000000000000000000000000000000076 +:101A70000000000000000000000000000000000066 +:101A80000000000000000000000000000000000056 +:101A90000000000000000000000000000000000046 +:101AA0000000000000000000000000000000000036 +:101AB0000000000000000000000000000000000026 +:101AC0000000000000000000000000000000000016 +:101AD0000000000000000000000000000000000006 +:101AE00000000000000000000000000000000000F6 +:101AF00000000000000000000000000000000000E6 +:101B000000000000000000000000000000000000D5 +:101B100000000000000000000000000000000000C5 +:101B200000000000000000000000000000000000B5 +:101B300000000000000000000000000000000000A5 +:101B40000000000000000000000000000000000095 +:101B50000000000000000000000000000000000085 +:101B60000000000000000000000000000000000075 +:101B70000000000000000000000000000000000065 +:101B80000000000000000000000000000000000055 +:101B90000000000000000000000000000000000045 +:101BA0000000000000000000000000000000000035 +:101BB0000000000000000000000000000000000025 +:101BC0000000000000000000000000000000000015 +:101BD0000000000000000000000000000000000005 +:101BE00000000000000000000000000000000000F5 +:101BF00000000000000000000000000000000000E5 +:101C000000000000000000000000000000000000D4 +:101C100000000000000000000000000000000000C4 +:101C200000000000000000000000000000000000B4 +:101C300000000000000000000000000000000000A4 +:101C40000000000000000000000000000000000094 +:101C50000000000000000000000000000000000084 +:101C60000000000000000000000000000000000074 +:101C70000000000000000000000000000000000064 +:101C80000000000000000000000000000000000054 +:101C90000000000000000000000000000000000044 +:101CA0000000000000000000000000000000000034 +:101CB0000000000000000000000000000000000024 +:101CC0000000000000000000000000000000000014 +:101CD0000000000000000000000000000000000004 +:101CE00000000000000000000000000000000000F4 +:101CF00000000000000000000000000000000000E4 +:101D000000000000000000000000000000000000D3 +:101D100000000000000000000000000000000000C3 +:101D200000000000000000000000000000000000B3 +:101D300000000000000000000000000000000000A3 +:101D40000000000000000000000000000000000093 +:101D50000000000000000000000000000000000083 +:101D60000000000000000000000000000000000073 +:101D70000000000000000000000000000000000063 +:101D80000000000000000000000000000000000053 +:101D90000000000000000000000000000000000043 +:101DA0000000000000000000000000000000000033 +:101DB0000000000000000000000000000000000023 +:101DC0000000000000000000000000000000000013 +:101DD0000000000000000000000000000000000003 +:101DE00000000000000000000000000000000000F3 +:101DF00000000000000000000000000000000000E3 +:101E000000000000000000000000000000000000D2 +:101E100000000000000000000000000000000000C2 +:101E200000000000000000000000000000000000B2 +:101E300000000000000000000000000000000000A2 +:101E40000000000000000000000000000000000092 +:101E50000000000000000000000000000000000082 +:101E60000000000000000000000000000000000072 +:101E70000000000000000000000000000000000062 +:101E80000000000000000000000000000000000052 +:101E90000000000000000000000000000000000042 +:101EA0000000000000000000000000000000000032 +:101EB0000000000000000000000000000000000022 +:101EC0000000000000000000000000000000000012 +:101ED0000000000000000000000000000000000002 +:101EE00000000000000000000000000000000000F2 +:101EF00000000000000000000000000000000000E2 +:101F000000000000000000000000000000000000D1 +:101F100000000000000000000000000000000000C1 +:101F200000000000000000000000000000000000B1 +:101F300000000000000000000000000000000000A1 +:101F40000000000000000000000000000000000091 +:101F50000000000000000000000000000000000081 +:101F60000000000000000000000000000000000071 +:101F70000000000000000000000000000000000061 +:101F80000000000000000000000000000000000051 +:101F90000000000000000000000000000000000041 +:101FA0000000000000000000000000000000000031 +:101FB0000000000000000000000000000000000021 +:101FC0000000000000000000000000000000000011 +:101FD0000000000000000000000000000000000001 +:101FE00000000000000000000000000000000000F1 +:101FF00000000000000000000000000000000000E1 +:08200000481F0000800026309B +:10200800D40148D8E3B80001D553FE6A100030194E +:102018007508F1D9D202F5480040F01F0008F01FFA +:102028000008D503E06CF980EA1C0337F01F0005AF +:10203800D8020000800032008000259880002B68BC +:10204800800026D4EBCD40FC169518961492129B6E +:10205800580AE08A003B0B893008F0091800C520AF +:102068003009129A2FF9EA090708F4081800CFB1C5 +:102078001232E08900493002EDBB0001C26133032E +:10208800EDBB0000C2613004C0A85806C3806C09CB +:10209800B28C6C082FF88D082FF52FF40B8C580C88 +:1020A800CF515802E08A000F04975806C2406C09C5 +:1020B800B2836C082FF88D0820175807FE99FFF790 +:1020C8000404089CE3CD80FC3203EDBB0000CDC0C6 +:1020D8005802FE9AFFDA04975806C1706C09B28359 +:1020E8006C082FF88D0820175807FE99FFF70494FD +:1020F8003002CD5B069CF01F0007CDFBF01F0005EA +:10210800CCCB30091212CB9B069CF01F0002CECB21 +:1021180080002680EBCD40FC203DFACEFFD81497F6 +:102128007C037C1A10941892169E580BC4405809C8 +:102138005F1858A75F091268C34130063008FB686A +:10214800000B580EC430F4CC003AFAC9FFF5FC076E +:102158000D0A16985898F1DCE9082D0812F8149E13 +:10216800580ACF6112955806C0C10C970699089A6B +:102178000A9B049CF01F001A0E0C2FDDE3CD80FC97 +:102188005804C140EDB30001C1115802C230640ABD +:1021980032D9B48964082FF8850820143017CE7B0B +:1021A800580BCCC45C3E3016CCAB129532D83007F5 +:1021B8000AF8CDDB109A3308BA9B0699BA881A9B9D +:1021C800F01F00072FDDE3CD80FCFAC9FFF512955B +:1021D800CCBB32DCF01F0003CE1B00008000204C7B +:1021E80080002680D431201D189516971496178CD8 +:1021F800580CE08000B43004325132D033033092AE +:10220800E20C1800C1705805C6E06A09B28C6A0869 +:102218002FF88B082FF42FF70F8C580CCF21580567 +:10222800EBF91000F9B80100F3F81E00089C2FFD27 +:10223800D8322FF70F8A580ACF30E20A1800C500A3 +:10224800E00A1800F9BC0100F7B700FFF9BC00016B +:10225800EFFA0800C0482FF7A1BC0F8AE60A180059 +:10226800CFB0F4C80030E4081800E08B0063300BEE +:10227800F60B0028F40800182FF7F0CB00300F8A6F +:10228800F4C80030E4081800FE98FFF43738F00A64 +:102298001800C2C03648F00A1800C3403708F00AD0 +:1022A8001800C3E03788F00A1800C4503588F00ACF +:1022B8001800C4903758F00A1800C4803638F00A5D +:1022C8001800CAA16C08BA8830081899169ABA98E2 +:1022D8001A9B0A9C2FC6F01F00231804C9DB325C26 +:1022E8005805C941F01F0020C96B0D081899169AA6 +:1022F8000A9C49EB5808F00B1710F01F001A180435 +:10230800C8BB361916981AD930AA1ADC30196C0BC2 +:102318000A9C2FC6F01F00162FED1804C7DB3619CC +:10232800308A1AD916981ADA30096C0B310ACF1B81 +:10233800300BCADB169836191AD9310A1ADC30095B +:102348006C0BCE7B16983419CF8B361916981AD980 +:1023580030AA1ADC30096C0BCDCB1894C61B0000D0 +:102368008000204C80002680800034008000211CE2 +:10237800D401189BFACAFFFC300CF01F0002D802E7 +:10238800800021ECEBCD40E014951696A98CF01F47 +:1023980000095805C0A03007F01F0007EC070B0C18 +:1023A8002FF70E35FE9BFFFAF01F0004E3CD80E007 +:1023B80080002E7C80002F3080002D14EBCD40E073 +:1023C80014951696A98CF01F00095805C0A030076F +:1023D800EC07070C2FF7F01F00060E35FE9BFFFADF +:1023E800F01F0004E3CD80E080002D9C80002E20AB +:1023F80080002CC8EBCD4040204D49BCF8E80008CF +:10240800FAE90008F8EA0000498CFAEB0000304BC2 +:10241800F01F00171A9BFE7C2800F01F00163009D9 +:10242800FE7C2800129A129BF01F0013FE7C2800E5 +:10243800F01F0012302CF01F00121A96204DECE805 +:102448000008FAE90008ECEA0000E06CF980EA1CF0 +:102458000337FAEB0000F01F000B2FCD2FCDE3CD93 +:1024680080400000800034088000341880002C4030 +:1024780080002874800028B480002A2480002C70F2 +:1024880080002FF8EBCD40F8F01F0033F01F003329 +:102498004B3CF01F0034F01F00343018F00C1800CB +:1024A800C5204B2CF01F002FE06701004B0C3006B5 +:1024B800F01F002C4AF40E95C088E2675A4C0C179E +:1024C800E0470100EA0717B0E806000B0C9C0E9ADB +:1024D8000E06F01F0029E2465A4BFE98FFF0E0670F +:1024E80001004A6C3006F01F001F4A550E930E9AE1 +:1024F8004A3B0C9CF01F0023E80600093008EA0854 +:10250800070B138AF40B1800C1312FF82FF9103775 +:10251800FE9BFFF70E06E2465A4BE08B0019E26776 +:102528005A4C0C17E0470100E60717B0CE1BEC0821 +:1025380000081ADA494C1ADB1AD8F01F000A2FDDF6 +:10254800E3CF80F8491CF01F0007CAFB490CF01FB5 +:102558000005CF7B80002008800023FC80028E6C61 +:102568008000237880002FA480028E8480028E8CC5 +:1025780080003420800023C480028EAC0000000854 +:102588008000238C80028EC880028E7C80028EF4AC +:10259800EBCD4040303AE06B1B00EA1B00B7FE7CF5 +:1025A8000C00F01F001A30083019109B308AFE7C8E +:1025B8000C0031061AD6F01F001630083019109B8F +:1025C800129AFE7C0C00F01F0013300BFE7C0C00EE +:1025D800F01F0011FE7C0C00F01F00103009FE7C7B +:1025E8000C001AD9129B1AD91298129AF01F000CD3 +:1025F800301CF01F000C302BFE7C0C00F01F000A72 +:102608002FDDE3CD8040000080002B0C80002AB035 +:1026180080002AD280002AEA80002AF880002A6AEC +:1026280080002C8A80002B0248CD48D0E3B00001FE +:10263800D55348C048C10230C06248C2A505A1248C +:102648000230CFD348A048B10230C0623002300314 +:10265800A1220230CFE3488F000100008000320041 +:10266800000000080000000880028FC00000000879 +:10267800000001E88000248CD401189BFE7C18001F +:10268800F01F0002D802000080002742EBCD404036 +:10269800203D30083049FB680008BA383088500CB3 +:1026A8001696BAC8302BBAD9486CF01F00070C9A96 +:1026B8001A9BFE7C1800F01F00052FDDE3CD80403B +:1026C80080028F1C80002C40800027ACD401189B0E +:1026D800E06CE100F01F0002D802000080002694A0 +:1026E800D401F6081503A56B143BF9BE0810F00BCE +:1026F80017B0F9BE0B08F6091601F20A0039F20BF9 +:102708000D08109AF00B1603F6C80001E048FFFE0A +:10271800E08B00147818E8690000E418FFF7E01867 +:10272800FECF590EF9B9000010499919F1DAC00322 +:10273800F7E811089988D80ADA0A58ABC0F0E069B6 +:10274800270F7858EDB80001C051F1DBC00999781E +:102758005EFD5809C1002019CF5BE069270F785842 +:10276800EDB80001C04130D89978CEAB5809C030D7 +:102778002019CF6B5EFEE1B80000EDB80010C0E094 +:10278800D3033FF899387858D503300899189998A1 +:1027980099A8EA69610C99095EFC3FF8993878585C +:1027A800CF5BD703D421169714951896F01F002EE7 +:1027B8005807C2000FC93048F0091800E088001B0C +:1027C8003094E8091800E08B00160FD93078F0092A +:1027D8001800E08B00108E39E0680101F00919003B +:1027E800E08B0009EF3900083038F0091800E0885C +:1027F8000003DA2A0A9A6E0B0C9CF01F001C581C66 +:10280800CF900FC9E8091800C2906C182059F1E957 +:1028180010688D18EF3900086C1A0FD8A978F1E9FB +:1028280010E814488D1830288E39F0091900E0880E +:1028380000106C18ADB88D188EB920298DA96C18A8 +:10284800E018FFF08D183509300C8D09D8226C1866 +:102858005C79F1E910C88D18CF3B6C18B1B88D18A8 +:10286800CDAB00008000277E800026E8D401301818 +:10287800F739000DF0091800E0880005302E1C9C7F +:10288800D802E068008030199908300A7818F73BB8 +:10289800000D149EF1D9D00130F9F1DBD081F1DAC5 +:1028A800D0E1F1D9D20499181C9CD802EBCD408014 +:1028B8003018149E1297F00A18005FBAF00B18002F +:1028C8005FB91449C0B17818F1DBD021F1DED041ED +:1028D800F1D7D3089918E3CF8080302CE3CD8080DE +:1028E800D4017818189EEA18000F9918781CE21C71 +:1028F8000004C08030E8F00B1800E0880013302C8A +:10290800D8023038F00B1800FE9BFFFB7C1AF6C883 +:10291800FFF03019F20809495CD914699D19D802E9 +:102928007C19F6081510300CEA18FFF0E818FFFFBC +:1029380012689D18D802E0692710C0485809C0E0FD +:1029480020197848EDB80009CFA17818EA18000FC7 +:102958009918FC19010099095EFD5EFFEBCD40FC5A +:1029680030321893F73C000CE40C1800E08B000997 +:10297800F735000B3014E8051800E0880005302C06 +:10298800E3CD80FCF73E00083078F00E1800FE9882 +:10299800FFF83108F00E1800FE9BFFF37618F009D7 +:1029A8001601F4090009F2080D06ECCA0001E04A14 +:1029B80000FEFE9BFFE65806CE35FCC90008F80865 +:1029C8001601300AEC1C0001F5D8D001178EF5DC91 +:1029D800D021F7380009F5D5D061F5D9D084F73979 +:1029E800000AF5D6D108F5D8D208F5D9D308E80EEB +:1029F8001800C0F0C0B33028F00E1800C0D0E40EA4 +:102A08001800CBE187FAE3CF80FC87CAE3CF80FCCC +:102A180087DAE3CF80FC87EAE3CF80FC3018990897 +:102A28005EFCE0692710C0485809C0A02019784802 +:102A3800EDB80001CFA1F1DBC01099385EFD5EFF53 +:102A4800E0692710C0485809C0C020197848E21822 +:102A58000201E0480201CF817828300CB6085EFCFC +:102A68005EFFEBCD40E0FAC5FFF018976A166A0ED4 +:102A7800EDD6C003FDDEC001300CF9D6D003F9DE77 +:102A8800D0E1F9D6D103F9DED1E1F9DAD203F9DBE5 +:102A9800D2E1F9D8D303F9D9D3E18F1C6F58EDB837 +:102AA8000005CFD1E3CD80E0EBCD4040300E40268D +:102AB8002F8BFDD8D021FDD9D104FDDAD204FDD663 +:102AC800D306F80B092EE3CD80402F8BF5E91019BA +:102AD800F3E81029F80B0328F1D9D043F80B09289B +:102AE8005EFC2F8BF80B0328A1A8F80B09285EFCC5 +:102AF8007958EDB80000CFD15EFC7808F1DBD00240 +:102B080099085EFCEC5BBB9FE08B0018304B78A803 +:102B1800F1DBD00399A878A9F3DAD10399A9780849 +:102B2800A3A899087958EDB80007CFD178083019CB +:102B3800F1D9D00299085EFCE068C6BFEA18002DFA +:102B4800103BE088000CE0681200EA18007A103B9D +:102B5800F9BB0306F9BB0207CDBB305BCD9BC008B0 +:102B6800EBCD40C048E8E3B8000148E9300C7206F4 +:102B780048DE48E9FE770800720B580BC070721ADD +:102B8800300814AE2FF81638CFD3EE0C09262F894B +:102B98002FFC594CCF21E3CD80C0000080003200CB +:102BA8008000333C80002B6680028F20E068008321 +:102BB800FE790800F00C010CF20C032AF4C8FFC0DF +:102BC800F208032C580C5E0CF80812004859F0085B +:102BD800111FF20A0039721AF408032C5EFC000077 +:102BE80080028F20F8081605F0091508E029F00082 +:102BF800581BC150C0823018F00C094C936C93AC30 +:102C0800932C5EFD582BC110583BC0205EFF301836 +:102C1800F00C094C935C939C932C5EFDF60C094CCC +:102C2800935C93AC932C5EFD3018F00C094C936CBC +:102C3800939C932C5EFDD703D42118961694580BB9 +:102C4800C0F030050A970D9B0D8C2FF72FE6F01F6B +:102C5800000618450E34FE9BFFF80A9CD8221695EC +:102C6800CFDB000080002BEC3018F00C0948A59C45 +:102C7800A96CE02CF000F9480054F9480044991870 +:102C88005EFCFE6914007208F1DCD0C193085EFC9A +:102C9800D401580BC091F8CBFFFEFE7C28005C5B8A +:102CA800F01F0006D802F8CBFFFEFE7C28005C5B14 +:102CB800F01F0003D80200008000293E800028E8A9 +:102CC800EBCD408048E76E0CF1DCC008C0D0300B7B +:102CD800FE7C2800F01F000B6E08F0CCFFFF8F0C65 +:102CE800F1DCC008CF51F9DCC288300BF01F0006B8 +:102CF80030194868B089E3CD80800000000001E009 +:102D080080002A2A80002C98000001E4D401486839 +:102D1800300B700CF9DCC288F01F000430094848F9 +:102D2800B089D802000001E080002C98000001E47E +:102D3800EBCD40C0201D301B49366C0CF9DCC28835 +:102D4800F01F0012E06B00D7FE7C2800F01F001077 +:102D5800FAC7FFFEE06B00FFFE7C2800F01F000CA6 +:102D68000E9BFE7C2800F01F000B9A98EDB8000718 +:102D7800CF216C0C300BF9DCC288F01F00042FFD4A +:102D8800E3CD80C0000001E080002C9880002A2A52 +:102D980080002A48EBCD40C0201D49B6A96C8D0C97 +:102DA80049A730080F89F0091800C030F01F001833 +:102DB80030086C0CAE88F9DCC288301BF01F001597 +:102DC800E06B0082FE7C2800F01F00136C08F7D827 +:102DD800C008F1D8C10CFAC6FFFCF7E8109BFE7CCE +:102DE80028000CDBB18BF01F000C0DABFE7C28001B +:102DF800F01F00090DBBFE7C2800F01F00072FFD07 +:102E0800E3CF90C0000001E0000001E480002D380D +:102E180080002C9880002A2AEBCD40E049151896AE +:102E28000B893008F0091800C16148F70C9BFE7C3B +:102E38002800F01F000E6E08F0CCFFFF8F0CF7DCA7 +:102E4800C008C071F9DCC288F01F00093018AA88D0 +:102E5800E3CF90E048476E0CA98CF01F0006CE7BAC +:102E6800000001E4000001E080002A2A80002C987C +:102E780080002D9CEBCD40C0201D4A76A96C8D0C9E +:102E88004A6730080F89F0091800C030F01F002485 +:102E980030086C0CAE88F9DCC288301BF01F0021AA +:102EA800E06B00D2FE7C2800F01F001F6C08F7D8EA +:102EB800C008F1D8C10CFAC6FFFCF7E8109BFE7CED +:102EC80028000CDBB18BF01F00180DABFE7C28002E +:102ED800F01F00150DBBFE7C2800F01F0013E06BEF +:102EE80000FFFE7C2800F01F0010E06B00FFFE7C56 +:102EF8002800F01F000DE06B00FFFE7C2800F01F8B +:102F0800000AE06B00FFFE7C2800F01F00072FFD81 +:102F1800E3CF90C0000001E0000001E480002D38FC +:102F280080002C9880002A2AEBCD40C0201D4966DD +:102F380030090D88F2081800C1F14947E06B00FF1D +:102F4800FE7C2800F01F0012FACBFFFEFE7C280052 +:102F5800F01F00106E08F0CCFFFF8F0CF7DCC008E4 +:102F6800C071F9DCC288F01F000C3018AC881BBC9B +:102F78002FFDE3CD80C04857AC896E0CA98CF01F9B +:102F88000007CDDB000001E4000001E080002A2AF0 +:102F980080002A4880002C9880002E7CEBCD404091 +:102FA800201D3008FAC6FFFC301B0CE8300CF01F5F +:102FB800000EE06B00D7FE7C2800F01F000CE06BD1 +:102FC80000FFFE7C2800F01F00090C9BFE7C2800F7 +:102FD800F01F0007300B169CF01F00032FFDE3CFF6 +:102FE8009040000080002C9880002A2A80002A48FF +:102FF800EBCD40E03028FAC7FFF01896AE88109560 +:10300800C028AE880C9A0E9BFE7C2800F01F000892 +:10301800C0C10F882FF85C58EA081800FE98FFF323 +:103028004848B08CE3CF90E0E3CF80E0800029648B +:04303800000001E4AF +:10320000C0080000C0080000C0080000C00800009E +:10321000C0080000C0080000C0080000C00800008E +:10322000C0080000C0080000C0080000C00800007E +:10323000C0080000C0080000C0080000C00800006E +:10324000C0080000C00800000000000000000000EE +:10325000C0080000000000000000000000000000A6 +:10326000C008000000000000000000000000000096 +:10327000C008000000000000000000000000000086 +:10328000000000000000000000000000000000003E +:10329000000000000000000000000000000000002E +:1032A000000000000000000000000000000000001E +:1032B000000000000000000000000000000000000E +:1032C00000000000000000000000000000000000FE +:1032D00000000000000000000000000000000000EE +:1032E00000000000000000000000000000000000DE +:1032F00000000000000000000000000000000000CE +:10330000C0080000300CF01F0012580CF80F171006 +:10331000D603301CF01F000E580CF80F1710D60300 +:10332000302CF01F000B580CF80F1710D603303C50 +:10333000F01F0007580CF80F1710D6030000010407 +:103340004000011280000120C000012E80002BB43B +:10335000000000000000000000000000000000006D +:10336000000000000000000000000000000000005D +:10337000000000000000000000000000000000004D +:10338000000000000000000000000000000000003D +:10339000000000000000000000000000000000002D +:1033A000000000000000000000000000000000001D +:1033B000000000000000000000000000000000000D +:1033C00000000000000000000000000000000000FD +:1033D00000000000000000000000000000000000ED +:1033E00000000000000000000000000000000000DD +:1033F00000000000000000000000000000000000CD +:10340000286E756C6C2900000200000000B71B00DC +:1034100008000001000100000F011101100113015B +:103420001061040000000000300000001061040082 +:103430003861040000000000020000002061040068 +:10344000306104000000000004000000306104004E +:1034500000000000000000000000000010610400F7 +:103460003C0000000000EEEEEEEE18F09FE518F0D4 +:103470009FE518F09FE518F09FE50000A0E118F027 +:103480009FE518F09FE544000000B4080000B40870 +:103490000000B4080000B408000000000000E408C8 +:1034A00000003C003C00000000090000000000009B +:1034B00000000FE11F00C0E3130080E3C00080E3C1 +:1034C00000F02FE11CF09FE53D0200EB5A0200EBFB +:1034D0008D0200EB01008FE210FF2FE141F0DEFBD7 +:1034E00001F0DCFD3C0078000000FEE700005C001D +:1034F00000007847C046010000EA7847C046170040 +:1035000000EA8C119FE5002091E500300FE1841165 +:103510009FE5FD20A1E880019FE580219FE5012036 +:1035200042E00D0040E03C00B4000000020050E129 +:10353000280000AA68019FE50D0050E1020000BAD2 +:10354000042010E4042081E4FAFFFFEA58119FE50B +:1035500058019FE5000081E53C119FE550019FE582 +:10356000000081E51EFF2FE13C00F0000000481143 +:103570009FE5000091E524119FE5000081E52C11F5 +:103580009FE538019FE5000081E51EFF2FE17402F1 +:1035900000EB10019FE528119FE5042091E4042031 +:1035A00000E404219FE5020051E13C002C010000F1 +:1035B000FAFFFF1AF0109FE5FD20B1E803F02FE1BC +:1035C000E0109FE5002081E5E8109FE5F4209FE5ED +:1035D000002081E5021080E2000020E0010040E2CE +:1035E00011FF2FE101008FE210FF2FE13C00680185 +:1035F000000001F09CF87847000001008FE210FF06 +:103600002FE101F094F87847000003002DE9001045 +:103610000FE1001080E5B8109FE5041080E5001070 +:10362000A0E1100080E2FC1FA0E80020A0E13C0027 +:10363000A40100000130A0E10300BDE8080083E51B +:103640000C1083E5D300A0E300F021E10060A2E8C4 +:1036500000104FE1041082E4D200A0E300F021E169 +:103660000060A2E800104FE1041082E4D100A0E362 +:103670003C00E001000000F021E1007FA2E8001022 +:103680004FE1041082E4D700A0E300F021E10060E4 +:10369000A2E800104FE1041082E4DB00A0E300F098 +:1036A00021E10060A2E800104FE1001082E5000077 +:1036B00093E53C001C02000000F02FE11EFF2FE10B +:1036C000200000000403000020EE0100D8030000E9 +:1036D0000000000018F09FE5100100000803000042 +:1036E000EEEEEEEE2403000020020000B0B5041C54 +:1036F000631C0B4D3C005802000001D16C6910E0C6 +:1037000000F06CFB0948FFF70CFFEC60084A5168B9 +:1037100050688842FCD00220287001218A2001F0E4 +:1037200012F8201CB0BD3000070051020000000359 +:103730000700B0B5051C3C0094020000002400F016 +:1037400050FB1448FFF7F0FE13491448C1600121F3 +:10375000134A490391601349CA7808239A43CA70EF +:10376000CA7804231A43CA706B1C0DD00E4B5A68DA +:1037700059689142FCD0BE213C00D0020000197370 +:10378000197A112291431972197AC907FCD40221BE +:103790000170FFF7D0FE201CB0BD91020000FFFFBA +:1037A000FF003000070000100700000007000003C2 +:1037B000070000000000000000003C000C030000B7 +:1037C00000000000000000000000000000000000F9 +:1037D00000000000000000000000000000000000E9 +:1037E00000000000000000000000000000000000D9 +:1037F0000000000000000000000000003C00480342 +:1038000000000000000000000000000000000000B8 +:1038100000000000000000000000000000000000A8 +:103820000000000000000000000000000000000098 +:1038300000000000000000000000000000003C004C +:1038400084030000000000000000000000000000F1 +:103850000000000000000000000000000000000068 +:103860000000000000000000000000000000000058 +:103870000000000000000000000000000000000048 +:103880003C00C00300000000000000000000000039 +:1038900000000000000000000000000000000047E1 +:1038A000084710471847204728473047384710B582 +:1038B000041C101C00F023F903C410BC08BC1847FA +:1038C00000003C00FC03000010B4042A0ED3031CCB +:1038D0000B439B070AD108C810C9A34202D1043A7E +:1038E000042AF8D2A34201D004380439002A02D1B4 +:1038F000002010BC7047D30701D5013205E00378E2 +:103900000C7801313C00380400000130A34207D19B +:1039100003780C7801310130A34201D1023AF1D190 +:10392000181BE9E70000784700000020A0E304002E +:1039300051E30800003A03C010E20D00000A04C081 +:103940006CE202005CE33C00740400000120C0E46F +:103950000120C0A40120C0C40C1041E0060000EA10 +:1039600081CFB0E10120C0240120C0240120C04447 +:103970001EFF2FE1784700000020A0E300402DE962 +:103980000230A0E102C0A0E13C00B004000002E06F +:10399000A0E1201051E20C50A0280C50A0282010CB +:1039A0005122FBFFFF2A011EB0E10C50A0280C00A1 +:1039B000A0480040BDE80111B0E1042080241EFFB2 +:1039C0002F010120C0440120C0443C00EC04000051 +:1039D000400411E30120C0141EFF2FE178470000CE +:1039E000030052E33E00009A03C010E20800000A00 +:1039F0000130D1E402005CE30C2082E001C0D194EC +:103A00000130C0E40130D134042042E23C002805FA +:103A1000000001C0C0940130C034033011E21E0028 +:103A2000000A042052E22F00003A03C031E70200EE +:103A300053E30800000A0F00008A2C34A0E104C000 +:103A4000B1E5042052E20C3C83E1043080E43C0008 +:103A500064050000F9FFFF2A011081E2230000EA5B +:103A60002C38A0E104C0B1E5042052E20C3883E117 +:103A7000043080E4F9FFFF2A021081E21B0000EA13 +:103A80002C3CA0E104C0B1E5042052E20C3483E1F7 +:103A90003C00A0050000043080E4F9FFFF2A031079 +:103AA00081E2130000EA7847000010402DE9202051 +:103AB00052E20500003A1850B1281850A0281850BA +:103AC000B1281850A02820205222F9FFFF2A02CE48 +:103AD000B0E13C00DC0500001850B1281850A028C7 +:103AE0001800B1481800A0481040BDE802CFB0E16E +:103AF00004309124043080241EFF2F01822FB0E176 +:103B00000120D1440130D12401C0D1240120C0447E +:103B10000130C0243C001806000001C0C0241EFF74 +:103B20002FE178470000FF3001E20210A0E10324FA +:103B300083E1022882E188FFFFEA784700008024C1 +:103B400010E200006042413032E000106122A1C169 +:103B500070E02000003A3C005406000021C470E0F0 +:103B60000F00003A0004A0E1FF2482E321C270E0CC +:103B70001700003A21C470E00900003A0004A0E1F7 +:103B8000FF2882E321C470E00004A021FF2C8223DF +:103B900021C270E00E00003A3C009006000000C018 +:103BA00070E28300002A2004A021A1C370E08013EA +:103BB00041200220A2E021C370E000134120022036 +:103BC000A2E0A1C270E0801241200220A2E021C246 +:103BD00070E0001241200220A2E03C00CC06000070 +:103BE000A1C170E0801141200220A2E021C170E05B +:103BF000001141200220A2E0A1C070E0801041200D +:103C00000220A2E001C070E0001041200220B2E0DA +:103C1000E5FFFF2AC30F32E0A30F80E03C00080756 +:103C20000000001061221EFF2FE1784700000020F5 +:103C3000A0E3A1C170E02000003A21C470E00F00B1 +:103C4000003A0004A0E1FF2482E321C270E01700E3 +:103C5000003A21C470E00900003A0004A0E13C00F1 +:103C600044070000FF2882E321C470E00004A02183 +:103C7000FF2C822321C270E00E00003A00C070E2E7 +:103C80005000002A2004A021A1C370E0801341202D +:103C90000220A2E021C370E0001341200220A2E034 +:103CA0003C0080070000A1C270E080124120022089 +:103CB000A2E021C270E0001241200220A2E0A1C1D6 +:103CC00070E0801141200220A2E021C170E00011CB +:103CD00041200220A2E0A1C070E08010412002201B +:103CE000A2E03C00BC07000001C070E000104120D1 +:103CF0000220B2E0E5FFFF2A0200A0E11EFF2FE153 +:103D0000784700000A1040E2200140E0200280E0F5 +:103D1000200480E0200880E0A001A0E1002180E0F4 +:103D2000821051E03C00F8070000010080520A10A8 +:103D300081421EFF2FE130B4441C810708D0017876 +:103D40000130002902D1001B30BC70478107F6D139 +:103D50000B4AD50102C88B1A8B432B40FAD0001BAB +:103D60000A0601D103383C0034080000EFE70A04DA +:103D7000120E01D10238EAE70902090EE7D1013833 +:103D8000E5E7000001010101F0B4031C041C0C4331 +:103D9000A4070CD1104DEF0102E00431043A10C326 +:103DA000042A04D30C68661B3C0070080000A6437C +:103DB0003E40F5D0002A07D00C7801311C70013349 +:103DC000002C03D0013AF7D1F0BC7047012AFBD98F +:103DD000511E00221A7001330139FBD1F4E70101B1 +:103DE0000101784700000200A0E33C00AC0800009D +:103DF0000210A0E32EFEFFEA1F402DE900000FE1B4 +:103E0000C00080E300F02FE18100A0E30210A0E3F6 +:103E100001208FE212FF2FE100F0E6FC784700005E +:103E20001F40BDE8FEFFFFEA1F502DE93C00E808F7 +:103E3000000001008FE210FF2FE100F040FB784707 +:103E400000001F50BDE804F05EE21F502DE90100A4 +:103E50008FE210FF2FE100F018FB784700001F50A1 +:103E6000BDE804F05EE200BD01B500A000473C00E3 +:103E70002409000000300FE1C030C3E303F021E16A +:103E800001008FE210FF2FE101BD01B500A0004746 +:103E900000300FE1C03083E303F021E101008FE245 +:103EA00010FF2FE101BD000018009FE5041090E411 +:103EB0003C0060090000000051E30200000A0420F9 +:103EC00090E4002081E5F9FFFFEA0EF0A0E17C0913 +:103ED0000000000000004400000044000000D8037F +:103EE0000000D8030000D80300000000000000001C +:103EF00000003C009C090000440000004400000059 +:103F0000440000000080010000800100108E0100CC +:103F1000108E010088F8010001000000001004006C +:103F2000C433040000000400000000000E50A0E1B3 +:103F300058409FE53C00D8090000040094E40100CB +:103F400050E305F0A001041094E4042094E403007D +:103F500000EB040094E4041094E4070000EBF5FF88 +:103F6000FFEA010050E10EF0A001020051E104302F +:103F70009014043081143C00140A0000FBFFFF1A67 +:103F80000EF0A0E114209FE5002092E5010050E131 +:103F900004208014FCFFFF1A0EF0A0E1800900004D +:103FA000CC0900000008000020E60100130000001A +:103FB0005356435F000400003C00500A000020EE0E +:103FC0000100120000004952515F0002000020F27F +:103FD0000100110000004649515F8000000020F4FC +:103FE0000100170000004142545F00000000A0F4EF +:103FF00001001B000000554E445F3C008C0A00008D +:1040000000000000A0F401001F0000005553525FA3 +:10401000010000000E50A0E100600FE18C409FE520 +:10402000041094E4010051E30900000A040094E440 +:10403000011080E00310C1E3042094E43C00C80AAE +:104040000000C02082E302F02FE104D041E204200E +:1040500094E4130000EBF2FFFFEA06F02FE105F015 +:10406000A0E10E50A0E100600FE144409FE5041084 +:1040700094E4010051E30800000A040094E43C00C9 +:10408000040B0000011080E00310C1E3042094E45D +:10409000C02082E302F02FE104D041E2042094E446 +:1040A000F3FFFFEA06F02FE105F0A0E1010050E187 +:1040B00004208014FCFFFF1A0EF0A0E13C0A00006F +:1040C0003C00400B00000160C046C046C04670473F +:1040D0000000101E10EE020011E3FCFFFF1A100E8C +:1040E00001EE101E10EE020011E3FCFFFF1A1EFF8E +:1040F0002FE1101E10EE010011E30300000A101E54 +:1041000011EE3C007C0B0000001080E50100A0E3F4 +:104110001EFF2FE1000020E01EFF2FE18D46974695 +:104120007847C04678FDFFEA10B5041C032801D982 +:1041300000F0ACFB0C484068002800D003240B487A +:10414000016809483C00B80B00001230002905D076 +:1041500006216143405CC300181804E00621614356 +:10416000405C142358430A300006000E10BDD47A78 +:104170000100A869010080B5094A0949032000F03F +:10418000F2F9084908203C00F40B00000860486080 +:1041900007491D2001F0B2FC06491E2001F0AEFCCB +:1041A00080BD0000006C01003127000000100700F6 +:1041B0002925000031250000054980B508208860C8 +:1041C0001D2001F0BFFC1E203C00300C000001F05F +:1041D000BCFC80BD000000100700021C081CD12A96 +:1041E00080B501D105F019FC80BD034980B50020E0 +:1041F0000880052005F0D5FB80BDB074010080B5B6 +:10420000542801D106F0CDF880BD3C006C0C0000B4 +:10421000B0B5104D021C0124012A0D48296806D0B2 +:10422000C42A03D16A68002A05D0AC60B0BD0EF084 +:1042300089FB6C6008E00022AA606C600EF082FBD3 +:104240000021042012F0C8FC06F0D8F83C00A80CAD +:104250000000B0BD0000C4600100BC740100054A4C +:104260005169081A116909681031814201D85061F9 +:104270007047002070478C6E010001494968401A60 +:1042800070478C6E010001484069704700003C0097 +:10429000E40C00008C6E0100024A5169081850615C +:1042A000704700008C6E01000E490F4810B51922AE +:1042B000920141608918C1600B4900220C310160F4 +:1042C0000A49826009680123DB03C918084C41616F +:1042D0003C00200D00002168002902D0074901613F +:1042E00001E000F00CF8226010BD44DC01008C6E8F +:1042F0000100C809000034580100C4090000014849 +:10430000024908617047C80900008C6E0100082846 +:1043100005D23C005C0D0000034B8000195002499F +:1043200020310A5070470000646D010070B5061C12 +:104330000D480D1C0068141C002803D1201C00F03F +:1043400009FC70BD280601D500F022FE221C291CA4 +:10435000301C08F03C00980D0000DDFD011C0348F6 +:1043600054304369321CFFF71BFB70BD0000506DD9 +:104370000100F8B5061C0D481F1C0068151C0C1C1C +:10438000002802D1281C00F0E8FB200601D500F02F +:1043900002FE2A1C211C3C00D40D0000301C08F039 +:1043A000BDFD011C0348543043693A1CFFF7FBFA7A +:1043B000F8BD0000506D0100F8B5F1284ED12A4833 +:1043C00069468269FFF7EEFA274900265439C86822 +:1043D0008B68C2000130D5183C00100E0000072881 +:1043E000C86000D1CE6022486C680068002803D005 +:1043F0000021201C08F03BFB6E6025682089A9780D +:104400000239401AE978401A2081A8782818023821 +:1044100020606E782878082817D23C004C0E0000E7 +:10442000300607D5271C201C00F07AFC041C381C21 +:1044300000F09CFB28780F49403980000A58002A78 +:1044400004D0311C201CFFF7B3FA08E0052100E07E +:104450000421062000F010FA201C00F03C00880E19 +:10446000000087FB300601D500F0A1FDF8BD012159 +:10447000062000F004FAF9E70000A46D0100CC5C0E +:104480000100F8B51A4D194F01245435291C032099 +:104490007C60174B184A05F0F4FB002802D03C0062 +:1044A000C40E0000002038601FE03C600721281C7B +:1044B000EA69FFF783FA382000F080FC0024B86036 +:1044C000B868E60035186846022100F075FB2860E0 +:1044D000281C00F0A5FDB868815906485430026ACE +:1044E0003C00000F0000FFF76CFA0134072CEADBF8 +:1044F0000020F8603861F8BD0000506D0100819A1D +:104500000000619A0000054880B50068002805D0C9 +:1045100003485430426A0021FFF753FA80BD506DC2 +:1045200001003C003C0F00007047000070B50A4ECF +:10453000094D084C083EA169002907D03068416048 +:10454000007B81006958FFF73EFAF4E70349022037 +:10455000087070BD00100700E07E01000002070037 +:1045600070B50A4E3C00780F0000094D084C083E1B +:10457000E169002907D070684160007B81006958BB +:10458000FFF724FAF4E703490220087070BD001019 +:104590000700E07E010000020700B0B5094D041CD1 +:1045A000281C202240303C00B40F00000549FFF7D2 +:1045B0009FFAE068E86020692861A06AA8626068E4 +:1045C0006860B0BD7052010000100700F8B500240B +:1045D0000023202801DB012407E0084E8000355825 +:1045E000074FBD4200D02B1C3C00F00F00003150A3 +:1045F0001360002C03D0211C822000F052F9201CF3 +:10460000F8BDE07E010075750000B0B50B4D041CCF +:10461000286800280FD0201C12F0B7FD00280AD00F +:10462000217A287A0A070007000F3C002C100000AE +:10463000120F9042297201D00120B0BD0020B0BD00 +:1046400070780100F0B5424E051C306885B0002836 +:1046500063D000240020002D06D06978182903D1EA +:10466000E979012900D10120002845D03C006810DB +:1046700000000020B07281004A19937A5906890F10 +:10468000DB0604D5B37A01278F403B43B372D27A5D +:1046900013091207120F934205D301228A401443D3 +:1046A00001AA8900505001300428E4DBB07A3C00B4 +:1046B000A4100000204001070DD5410709D5C1070E +:1046C00005D5810701D5002405E0029902E0019992 +:1046D00000E003990491410709D5C10705D5810779 +:1046E00001D5002403E0029900E001990391C1077C +:1046F0003C00E010000005D5810701D5002401E051 +:1047000002990191800701D5002422E00F2C20D1CD +:10471000706800280BD0049A02AB00920ACB019A71 +:10472000281C0BF08AFB0020706010E017E0307A44 +:10473000297A3C001C11000000070907090F000F2F +:10474000884207D0049A02AB00920ACB019A281C37 +:104750000BF076FB287A307201200F2C00D000205D +:1047600005B0F0BD0120FBE7707801000D4A70B57F +:10477000116800203C005811000000290ED0117A69 +:1047800009060BD5537A947A032101252A1C8A4005 +:104790001E1C164003D0224001D1012070BDFF3104 +:1047A00009060916F2D570BD00007078010010B539 +:1047B000084C206800283C009411000004D0606878 +:1047C000002801D10BF0C0FB00200021002207C40B +:1047D0000C3C0120606010BD70780100014901208F +:1047E0000860704770780100F8B50E4D041C002079 +:1047F0006872201C12F0DEFC3C00D0110000002882 +:1048000012D00020032101220F1A161C237ABE4069 +:10481000334004D06B7A161C864033436B720130F0 +:104820000006000E0328EFD9F8BD70780100920051 +:1048300051188A7A1207120F02703C000C12000005 +:10484000CA7A1207120F4270CA7A12098270097B63 +:1048500081807047034A0F21527A0120914300D092 +:10486000002070477078010040070549400F054A55 +:104870000956527A01200A4000D100203C0048121B +:104880000000704700005E46010070780100124A87 +:1048900070B5537A947AFF20032101252A1C8A409F +:1048A0001E1C164014D0224012D10806000E07D05C +:1048B000012807D0022807D0032807D107203C0091 +:1048C0008412000070BD032070BD012070BD052062 +:1048D00070BDFF2070BDFF3109060916E1D570BD1E +:1048E00070780100F8B5041C13480D1C816800297C +:1048F00005D0017B002901D104734573F8BD0F4E2B +:104900003C00C0120000311C20318A7900AB1A70C3 +:10491000C97959704268002A07D020022843011C37 +:104920000020FFF77EF8002804D12A1C211C00205B +:1049300011F00FF800AB1888F084E2E70000885A05 +:1049400001003C00FC1200000010070080B50121AE +:104950008120FFF7CDFF80BD0149012088607047AD +:10496000885A0100054980B500208860087B00282E +:1049700002D0497BFFF7BCFF80BD0000885A0100D0 +:10498000024A011C3C003813000050685160704717 +:104990000000885A010010B50C1C07F064FA04618D +:1049A000002010BD0000FFB50E1C1F1C382081B078 +:1049B00000F03DFA1D49041C4869002801D14C61F2 +:1049C00000E0046030013C0074130000009000041B +:1049D000000C00F015FA051C0099FFF78BF8002079 +:1049E000731E04E001014A1910326A5001309842E6 +:1049F000F8D300012D503821201CFFF77BF8A5606B +:104A00006560E6850C2060863C00B0130000AF2096 +:104A10008001E0610E20E086002020600198E060C7 +:104A2000386860610399044808600448386005B03C +:104A30000020F0BD0000FC5A0100DD150100FD164C +:104A40000100021C081CF02A80B53C00EC13000099 +:104A500004D0F12A07D106F009FB80BD07F00CFA5B +:104A60000DF0A8FA80BD01210220FFF74DFF80BDA7 +:104A70000149002048617047FC5A0100002802D01B +:104A8000002900D0C1607047F8B5171C3C002814FD +:104A900000000E1C051C1C1C1C3007F0C8F8016926 +:104AA000426980688919891A814206D2231C3A1CFE +:104AB000311C281C00F005F8F8BD0020386020608B +:104AC000FAE7FFB585B0059801270E1C1C303C00A5 +:104AD0006414000007F0AEF8041C808804300390D2 +:104AE0002C48049080790290A069B04217D2351A00 +:104AF00011E00398FFF716FC002806D101218E2053 +:104B0000FFF708FF0025002705E02168016020600D +:104B10003C00A0140000A0690130A061013DEBD26F +:104B2000002F35D0A069801BA06120698019206109 +:104B30006169401AE168884203D907218E20FFF796 +:104B4000ECFE25682F1C701E019500E03F680138BF +:104B5000FCD23C00DC140000386820600298049904 +:104B600088712E682C60321D0092291C2031012290 +:104B7000281D059B08F07AFCBD4201D0351CF0E7EA +:104B800000203861019807990430086008980437BC +:104B9000076009B03C0018150000F0BD02980499A8 +:104BA0008871F9E700002010070038B5041C151CB7 +:104BB00000200C6009E0E268201C0092A38A2168B2 +:104BC000A26908F056FC201CE468002CF3D1286090 +:104BD00038BD80B50CE03C0054150000C2688A4224 +:104BE00008D10021C160002803D106218E20FFF7E3 +:104BF0009DFE80BD101C0028F7D0EFE710B5041C07 +:104C00000CD0A069002806D12069002803D006F046 +:104C1000F7FD00202061201C3C009015000006F0EC +:104C2000F2FD10BD000010B5002809D0C46803E0F3 +:104C3000FFF7E7FF201CF9E7002CF9D1FFF7E1FFB0 +:104C400010BD011C002004E00A89C9681018000486 +:104C5000000C0029F8D1704700003C00CC15000082 +:104C600000E0081CC1680029FBD17047F8B5061C9C +:104C70000C1C1C2000F068FA051C002E01D1002C31 +:104C800002D1301C012103E0201C00F05DFA00215C +:104C9000002200920A1C011C231C281C3C00081640 +:104CA000000008F0F2FB281CF8BDB0B503329208F2 +:104CB00092001404240C09191D1CC9180904090CBC +:104CC000FFF7D7FF018902681219091B491B02600F +:104CD0000181B0BD0000F8B50A4CA021201C3C00A9 +:104CE00044160000FEF72AFF0020261CA036074DC0 +:104CF00007E00C21414349190EC9271D0EC7203476 +:104D00000130A642F5D1F8BDD05C0100C83F0100DA +:104D1000F7B5C468061C0025002C82B023D020897A +:104D20003C0080160000904220D3E168871A019170 +:104D30000021E16003990020FFF7A1FF051C2089F5 +:104D4000C01B20812A680399301C00F016F82089C6 +:104D5000C01920810199201CFFF7B1FE211C281CDD +:104D6000FFF73C00BC160000ADFE291C301CFFF70D +:104D7000A9FE0120002D00D1002005B0F0BD0000EB +:104D8000F7B5041C0E1C002001E0201C0C1CE1687F +:104D90000029FAD12789B7420AD3B81B0004000CB6 +:104DA000208121683C00F816000009180298321C86 +:104DB000FEF7FBFEFEBDF11B0D042D0C002819D0E3 +:104DC0000189A94216D3491B0904090C0181006815 +:104DD000411802982A1CFEF7E8FE21680298721B0F +:104DE0004019FEF7E2FE3C00341700002089C01B8A +:104DF00020812068C0192060DFE703218E20FFF7A3 +:104E0000ADFDDAE7F8B5041C002613E02189002087 +:104E1000FFF73EFF051C228921680068FEF7C8FEE7 +:104E2000002E01D12E1C03E03C0070170000291C4D +:104E3000381CFFF750FEE4682F1C002CE9D1301C11 +:104E4000F8BDB0B5041C0089401A050420682D0C7B +:104E50004018291CFFF71FFF2189491B2181E168A8 +:104E6000C160E060B0BD10B503303C00AC1700007D +:104E7000094A810810683D24084B6401890009181B +:104E80001B19994201D8116010BD0F218020FFF736 +:104E90006BFD002010BD0000B4CF010014C801005C +:104EA00010B511F061FF041C03D10D213C00E8177F +:104EB00000008020FFF75BFD201C10BD0000B0B596 +:104EC000011F0B680D480022834204D001321030CC +:104ED000032AF9D301E0032A06D30924211C8020E8 +:104EE000FFF745FD201CB0BD054B00249A793C001E +:104EF0002418000085680D6081609A71F5E7000054 +:104F00002057010020100700B0B50021104A0023EF +:104F1000D468844204D201331032032BF8D301E069 +:104F2000032B01D304210EE00A4CA37990680028DA +:104F30003C006018000002D1A371032106E005685F +:104F40009560A371002901D104C0B0BD8020FFF796 +:104F500014FD0020B0BD2057010020100700A03034 +:104F6000008A4007400F08280FD201A31B5C5B009A +:104F70009F443C009C18000005030305070709092E +:104F800001207047002070470220704703207047BF +:104F900004207047B0B5104D6869002807D00E494D +:104FA00000222C3103C90143032006F0CFFF0B4C34 +:104FB000002203CC3C00D8180000083C0143032029 +:104FC00006F0AFFF03CC084307494A6802434A6032 +:104FD0008A681043886001206861B0BD0000647376 +:104FE0000100B058010010000700B0B50C1C0FF014 +:104FF000A8FA054DE86A3C0014190000002806D103 +:10500000002C04D0201C0FF0B7FD01202870B0BD8B +:10501000F46E0100054980B5886A002804DA002092 +:10502000886201210DF042FD80BD0000AC7E0100D0 +:10503000F8B51E4D041C00203C00501900006862A9 +:10504000A8701C480078C00722D5B82003591A4818 +:1050500000780E2809D10A1C803206D0184E0D2087 +:10506000325C8A4201DD0138FAD1591E0B061B0E53 +:10507000AB70AB620E280BD208E03C008C1900002C +:105080006218B032127B824202D8581AA86202E03B +:1050900001390029F4DA0EF035F9009000AB1878E8 +:1050A0005978814200D95878ED30E8700121201CF0 +:1050B0000DF002FDF8BD0000AC7E01003C00C819F7 +:1050C00000001D75010011670100C75201000E4963 +:1050D00010B508698B68C200D4186268002A0FD125 +:1050E00001300861072801D100200861201C00F070 +:1050F00024F8054821685430026AFEF7ECFC3C00B5 +:10510000041A000010BD06210620FFF74BFC10BD5D +:10511000506D010008490979C907084A08D400E020 +:10512000081CC1680029FBD101890431018100E01C +:105130000020D0627047000060800700046C01000E +:105140003C00401A000010B5041C19218901002000 +:10515000FFF7C5FD011C60602068FFF7E0FC606898 +:1051600021680830086010BD00000A2801DA042018 +:1051700004E0502801DA052000E00720044A1178F5 +:1051800038233C007C1A0000C000184099430843B3 +:105190001070704788000700B0B5051C07484068CC +:1051A00008E00169A94204D1446805F0C7FD201C4C +:1051B00000E040680028F4D1B0BD0000587501003F +:1051C000F8B500253C00B81A000006F084FD114F28 +:1051D000041CBE792068002807D1A0880430FFF79E +:1051E000F2F8002806D101210FE001682160A169D1 +:1051F0000139A16110C0051C20690130206161697D +:10520000401AE16888423C00F41A000003D90721E3 +:105210008E20FFF7D3FBBE71281CF8BD20100700BD +:10522000B0B509F0BBFF2F4C0028207403D001213A +:1052300001200AF071FC2B4D1435286800284DD050 +:1052400001210F2011F082FD3C00301B0000288955 +:1052500008F0FBFF011C01220F2011F040FDE07857 +:105260000125022836D10AF0C6F800280AD00BF032 +:1052700092FB1E490968401811F05FF8002801D11F +:1052800002202FE0E078022824D13C006C1B0000B3 +:1052900060702570606801281CD015481038817B2B +:1052A000002904D185730F20134910F001FC08F088 +:1052B0004FFE002807D00E4801219838006901F000 +:1052C000B7FD002805D001200EF00CFD3C00A81B06 +:1052D000000001200EF01DFCB0BD05F0DCFEB0BDED +:1052E000E078002801D12570F7E7032000E00420D2 +:1052F0000DF08DFAB0BD846601006C570100E90322 +:10530000010070B5041C002100200A4D00E03C00A3 +:10531000E41B00000131CB005A191679012E02D08E +:105320005279A24202D00B29F4D370BD0B29FCD2D2 +:10533000C80001215A192858117170BD3858010050 +:10534000054880B5007F2423044958434018006A6B +:105350003C00201C0000FEF7DAFB80BD0000D47981 +:1053600001009446010080B504F037FF002011F0E1 +:1053700084FC002080BDB0B5054C051C206BE16AA3 +:1053800002F0E3FD291CA06A02F011FBB0BDA46C81 +:1053900001003C005C1C0000B0B5031C081C141C80 +:1053A000002B0C4D09D06969890001310A04120CE7 +:1053B0002280291CFEF73EFC0AE0011C281C2288E2 +:1053C000FEF738FC2088012802D98008013868617E +:1053D0000120B0BD3C00981C0000206E0100F1B51A +:1053E00000980026C168086809891C2934D3C1883F +:1053F000FF23013399422FD10188C91A2CD141884A +:10540000082929D10179062926D14179042923D1F6 +:1054100000250024071C3C00D41C000018370BE0BA +:10542000A000411804310422381CFEF78BFB002831 +:1054300001D1012504E001340A494869A042EFD8AE +:105440000849087800280AD0012801D0022806D18E +:10545000002D04D10098C0683C00101D0000FFF72B +:1054600042FC0126301CF8BD0000206E01000148FE +:10547000406870470000206E01000249486001202A +:10548000486170470000206E010070B5041C0126C1 +:1054900003F0EFFA251C103500283C004C1D0000DD +:1054A00004D00020207703F0F1FB07E003F038FD83 +:1054B000002809D00120207703F0CEFC011C062231 +:1054C000281CFEF7C3FB02E0022020770026301CD8 +:1054D00070BD00000348807AC00703493C00881D66 +:1054E0000000C00F88627047000040900700A46C65 +:1054F00001000149012088627047A46C0100064840 +:10550000807AC107064AC90F91622021800700D422 +:105510000021A032117070470000409007003C004D +:10552000C41D0000A46C0100074A1268074B9B6968 +:105530001A4001D0012200E000220A600121002A65 +:1055400000D000210160704710000700A46C01002A +:10555000012202600A607047B0B50D1C011C583171 +:105560003C00001E0000041C0622281DFEF777FBED +:10557000211C5E310622281C0A30FEF770FB211C1C +:1055800064310622281C1030FEF769FBB0BDFEB561 +:1055900000251D72171C0E1CB26D0021921950328D +:1055A000D27A3C003C1E00001C1C5A720078321C4F +:1055B0008032C007C017013001900898029200287D +:1055C00001D1307F2BE037480068002800DD011C46 +:1055D0000198002802D00898012810D1029A906BF7 +:1055E000002806D03C00781E0000884201D9451AE8 +:1055F000013D7019B03003E0B56D013D70195030B8 +:10560000007B0FE0029A106A002807D0884201D977 +:10561000451A013D7019A030007903E0BD69013DD4 +:105620007819007FA0723C00B41E00000EF00CF848 +:105630000E2811D1A07A08F067FF00280CD07868F6 +:10564000002805D11B480025007808F04BFF02E038 +:10565000451E7819007AA072029A5069002817D066 +:105660000898012814D0A07A3C00F01E000008F031 +:105670004EFF00280FD00198002807D0022020728A +:10568000706C80194030C079607204E07D68013D23 +:105690007819007AA072029AA07A916908F051FFF5 +:1056A0002060029A607A916908F03C002C1F00008B +:1056B0004BFF6060A07AE0722573FEBDD47E0100CE +:1056C000905701000006000E002A8CB501D08A22F6 +:1056D00000E0882200AB1A800CF0C2F80190684606 +:1056E0000BF0BCFA8CBD0000011C08483C00681F90 +:1056F000000080B50068002809D049680220002910 +:1057000000D101200106090E002006F0D8FF80BD5F +:105710000000206701001CB50190041C443001AA60 +:10572000694611F0B8FD00280BD0A06900213C00AB +:10573000A41F0000C207D20F0220FFF7C9FF0021FB +:10574000201C0FF0D9FE1CBD04219820FFF772F930 +:10575000F9E700008CB500AB84211980054B021CD1 +:10576000181C998A0CF08EF8019068460BF07CFAB0 +:105770003C00E01F00008CBD0000707C0100704701 +:105780000000064980B5C96814234031897A044A6B +:105790005943891880000858FEF7E9F980BD707CEC +:1057A00001005447010080B50020FFF7D6FF80BDFF +:1057B00000003C001C20000080B512481149808A7E +:1057C0000A8B00210028C2B00CD1012A05D0022A80 +:1057D00015D000AB5A800E2207E0022200AB5A809F +:1057E000998004E000AB5A800D2200AB9A8000AB98 +:1057F0001880FF203C00582000009871D97168463D +:1058000000F0D1F942B080BD0000707C010010B5FD +:1058100009F05FFC002005F02AF9034CE08A05F04E +:1058200036F9201C0FF0B3FE10BD707C01001CB5D2 +:1058300009F04FFC07203C009420000000AB074C0F +:105840001880E18A201C0CF00BF8019068460BF0E0 +:1058500017FA201C0FF09EFE1CBD0000707C01009A +:1058600080B502219820FFF7F1F880BD10B5154CE6 +:10587000C2B0A08A002803D03C00D020000001283C +:105880001ED1022000E00120E168403188722069C9 +:1058900008F023FD021C0C4818388088E1680FF0DE +:1058A000A4FEA08A00AB18800120588000209880B8 +:1058B000FF219971D871684600F03C000C2100006E +:1058C0007BF942B010BD03219820FFF7C5F8F8E737 +:1058D000707C01007047000080B503480FF060FE47 +:1058E000002005F0CDF880BD707C010080B5024835 +:1058F0000FF056FE80BD0000707C01003C00482186 +:10590000000080B502219820FFF7A9F880BD80B57E +:105910000320FFF734FF80BD0000F0B5214E0027C3 +:10592000B18A301C002504240029008BC3B01ED18D +:10593000012807D0311C498B022812D100293C00D4 +:105940008421000007D1002405E000240125022065 +:1059500000ABD8801F810FF07FFF002C10D1F168C1 +:105960000520403188720EE000291AD100ABD880A2 +:105970000E2002E000ABD8800D2000AB188107E0BC +:105980003C00C0210000301C0FF013FE201CFFF76C +:10599000FCFE002D08D0B08A00AB9880FF209872E2 +:1059A000DF7201A800F011F943B0F0BD0000707C77 +:1059B000010010B5002005F06CF8044CE08A05F0F9 +:1059C00078F83C00FC2100000FF04CFF201C0FF089 +:1059D000F3FD10BD707C010080B50420FFF7D8FEF8 +:1059E00001480FF0E9FD80BD707C010080B5022008 +:1059F000FFF7CEFE012005F05FF802480FF0DCFD56 +:105A000080BD00003C0038220000707C010080B5A1 +:105A10000320FFF7C0FE80BD0000B0B51D4DC2B031 +:105A2000288B00ABFF21588099710021D971AA8A77 +:105A30000024012A18D12A1C528B02280FD1002AD7 +:105A400016D1032058803C007422000099802C1C41 +:105A5000FF22981DE969FEF73BF9E1680420403117 +:105A6000887210E0002A06D101240E2001E00124F2 +:105A70000D2000AB9880281C0FF0A4FD0420FFF738 +:105A80008DFE002C05D0A88A3C00B022000000AB9F +:105A90001880684600F0A5F842B0B0BD0000707CE8 +:105AA000010010B5002005F000F8034CE08A05F075 +:105AB0000CF8201C0FF089FD10BD707C010080B532 +:105AC0000420FFF76EFE01480FF03C00EC220000BE +:105AD0007FFD80BD707C010080B50220FFF764FE71 +:105AE000012004F0F5FF02480FF072FD80BD0000B8 +:105AF000707C010080B50320FFF756FE80BD0000DA +:105B0000B0B5194D0424A98A281C028B3C00282317 +:105B10000000C2B0012914D1408B042A0BD1002807 +:105B200000D100240FF0ADFE002C19D1E96805204A +:105B30004031887217E0002810D100AB5A800E2047 +:105B400002E000AB5A800D2000AB988019803C0029 +:105B500064230000FF2098710020D871684600F08F +:105B600049F842B0B0BD281C0FF038FD201CFFF7EB +:105B700021FEF6E7707C010010B5002004F09EFFC6 +:105B8000034CE08A04F0AAFF201C0FF027FD10BD93 +:105B90003C00A0230000707C010080B50420FFF7CA +:105BA0000CFE01480FF01DFD80BD707C010080B52A +:105BB0000220FFF702FE012004F093FF02480FF0DD +:105BC00010FD80BD0000707C0100B0B50A4D011CC5 +:105BD00044313C00DC230000041C0622281CFEF794 +:105BE00089F8EC60206903F097F8011C0622A818D8 +:105BF000FEF780F80420FFF7F7FDB0BD707C0100D0 +:105C000090B5041C808893B0002806D01549062260 +:105C1000488018313C0018240000881FFEF76DF8FA +:105C200068460CF014F82088012808D16088032801 +:105C300005D1A088002802D106200CA90870A079FF +:105C40000621FF2804D0E079002801D0011C08318A +:105C50000B2008AA50723C0054240000201C08F0BD +:105C60003BFF039068460BF031F813B090BD000085 +:105C7000587C0100074B1A78824201D0002907D0D6 +:105C8000FF201870044801880122520391430180CB +:105C9000704700004C7B01003C00902400003280E3 +:105CA000070010B5041C0C2307495843401800791D +:105CB0000AF04FF901200349A04008390A7810433F +:105CC000087010BD0000747A0100034A00211154CD +:105CD000800030321058017070473C00CC24000026 +:105CE000E07A010010B5041C052801D3FEF712FF6D +:105CF000201CFFF7EDFF0021201C0EF089FB10BDDA +:105D0000054980B58860087F242304495843085812 +:105D1000FDF76CFF80BD0000D47901003C00082530 +:105D200000009446010080B501219120FEF7C7FED6 +:105D300080BD024A11688143116070470000786E8F +:105D4000010080B5FEF7E9FE80BD80B5FEF7E5FEF7 +:105D500080BD80B500F031FA80BD034980B53C00BC +:105D6000442500000420886000F0D0F980BD0000C8 +:105D70000030070080B500F099FA80BD80B500F0D2 +:105D800099FB80BD38B5202815D20D4C221C20323D +:105D9000957900AB1D70D2795A700A4B82009950E8 +:105DA0003C008025000001218140084801604268D4 +:105DB0001143416000AB1888E08438BD0121FF2009 +:105DC000FEF783FEF9E70010070030740100004081 +:105DD0000700202809D20549064B82009950054A40 +:105DE00051683C00BC250000012383409943516069 +:105DF00070470000A97500003074010000400700E2 +:105E0000024A11680843106070470000786E010074 +:105E10000B48016803221204114301600168072244 +:105E2000120691433C00F825000001225206891811 +:105E300001600168120C11430160016852081143AE +:105E400001607047000080000700FEB51C4E051C75 +:105E5000B08AF26812D00124002909D1116D02AA7A +:105E600001ABFEF7F8FE3C00342600000298002843 +:105E700001D000240BE001AA02A9281CFEF770FF44 +:105E800005E0116D02AA002401ABFEF701FF0E49E7 +:105E9000081C2030827900AB1A70C07958703068C5 +:105EA000002802D1029830603C007026000002E019 +:105EB00002987268D060019800AB70601888C8843E +:105EC000F068C06CF060201CFEBD247E0100001054 +:105ED0000700F8B5041C54271D4E00203060706088 +:105EE00067433804151C000CB1823C00AC2600004E +:105EF000FFF796F8082130610026174A14E0031CCA +:105F0000243342610361C661018308330360B12316 +:105F10004360031C6433C3600C230381031C5433AC +:105F20004C3028C0013C181C002CE8D13C00E8266D +:105F30000000094E07223069D243C1195050021C9B +:105F4000103280398A63F060B06000210020FFF7D2 +:105F500088FF3069F060B060F8BD247E01009100D8 +:105F600005000148406A70470000E87D01003C00E0 +:105F7000242700000148008870470000FC6B0100E6 +:105F8000064980B508880130088005490820086066 +:105F900004498869886100F021F880BDFC6B01002C +:105FA0000010070000300700034A0120121D06CA36 +:105FB0003C0060270000914200D100207047E87D3E +:105FC0000100064800B5C07C002803D1FFF7EFFFB1 +:105FD000002801D0012000BD002000BD0000A080ED +:105FE000070010B5041C800702D506F03EFD03E053 +:105FF000E0073C009C27000001D506F0E3FD6007A8 +:1060000001D5FEF7ABFD10BD024A011C10681160FE +:1060100070470000E87D010038B5204D2C1C20346D +:10602000A07900AB1870E0795870FEF727FA00AB42 +:106030001888E8843C00D82700001A488178082294 +:1060400091438170817811438170174841688022A3 +:1060500091434160016811430160002001306428D0 +:10606000FCD3A0790F4D00AB1870E079104C58703C +:10607000201C103000F03C0014280000DFFB002042 +:10608000C043A061FFF79CFF002809D00A490869B6 +:106090000130086100203C318968486306F0EEFC5D +:1060A00000AB1888E88438BD001007000000070026 +:1060B000F4000700003007003C0050280000E87D95 +:1060C00001000A4880B5006A002801D0FEF7C1F936 +:1060D000074807493C30806810304861012008615A +:1060E0000549086880229043086080BD0000E87D73 +:1060F000010000300700F40007003C008C2800007D +:1061000080B50CF0CBFE06F0BFFC80BD0149C86233 +:1061100070470000E87D0100024A916A08439062DE +:1061200070470000E87D01001823064958434018D5 +:106130000021027903681A70013108303C00C82838 +:1061400000000329F8D370470000285201000349DA +:10615000002800D0011C024881627047000085754C +:106160000000046C0100F8B5FFF733FF284F00284A +:1061700004D0FFF7C8FF386A01303862F86A3C0083 +:1061800004290000002802D0018904390181386BFC +:106190000025002808D00B203D6310F0E5FA1E49C9 +:1061A000086821229043086038783C211B4A41430B +:1061B0008C18FF22796A3A7000290CD0B969013134 +:1061C0003C0040290000B9617D62BD68002D04D00B +:1061D000636B7A6B0021FDF747FDF8BD042803D3FC +:1061E00001218420FEF7A1FC3869261C01303861AA +:1061F00020363078022803D00C218420FEF795FC4D +:1062000035703C007C290000A1690029E8D0636B4F +:10621000303420780C1C00217A6BFDF727FDDFE776 +:10622000046C0100F400070018DB010010B50B4CF2 +:10623000606A00280ED00A4800F012FB002060625D +:10624000A468002C3C00B829000005D07E23DB4365 +:1062500000220121FDF70DFD10BDE0690130E06174 +:1062600010BD046C010000300700094841683F225E +:10627000120491430D2212048918416041680122E1 +:106280005202914341603C00F429000003488178A8 +:1062900081708178817070478000070000000700DE +:1062A000F0B50125082400200E4A0F4900263C23A2 +:1062B0004343D1529B185D719B605E611C82C02775 +:1062C000DF602027FE549E613C00302A000030270A +:1062D000FE54074F3F182037013005289F63E9D34C +:1062E0000548FF3201329062F0BD18DB0100BEBAF2 +:1062F000000030800700066C0100014948607047CB +:106300000000046C01000549085C3C006C2A000098 +:10631000054949684018C006C00E0449203048723B +:1063200070470000A0570100046C010000800700C6 +:1063300080B515218420FEF707FC80BDF8B54348E1 +:1063400084680334424D04E0201C10F03C00A82A6D +:106350000000B9F8002871D12869C007F7D53E4878 +:1063600028603E4A141C2034207900903C233C498C +:10637000584345182879FFF7CCFF281C3A490830C4 +:1063800048600126081C0660686A00280DD03C00A1 +:10639000E42A0000A96A926A354B9F68D71B1A68E5 +:1063A000511879188A425A6800D800E0013206C0B4 +:1063B000E86AFEF787FF2D49E86A4860301C0E60E6 +:1063C00066791FE02B484661047F2949201C50391B +:1063D0003C00202B0000896AFDF75AFC009884429B +:1063E00010D03C202249604340188769002F09D013 +:1063F0000021203001707E23DB4302210022201C7B +:10640000FDF74CFC0120A0408643002EDDD1E96958 +:1064100000293C005C2B000003D03020405DFDF7DC +:106420003AFC164C503C606A002803D00A218420B4 +:10643000FEF796FB20352878012803D00B21842015 +:10644000FEF78EFB02202870E068013000E007E0D4 +:10645000E06000983C00982B00002070009860706D +:106460000A4800686063F8BD0000000107000040B2 +:106470000700010000013080070018DB0100003038 +:106480000700546C010000A00700786E01003C2258 +:106490003C234A4309493C00D42B0000B0B55418B2 +:1064A00058434518211C3822281CFDF7E5FCA06B39 +:1064B0000078A96B0870002020342070B0BD000067 +:1064C00018DB01003C230749584310B54418203419 +:1064D0002078022803D10D213C00102C00008420DC +:1064E000FEF747FB0020207010BD18DB0100FFB550 +:1064F0003C2048431A4981B04418261C2036307885 +:10650000151C0F9F022803D104218420FEF731FBC4 +:106510000120307025710B9930223C004C2C00007A +:1065200061800A99E1620D99A1610C99E1610E996E +:106530006162A762019911557E21C9436163049983 +:10654000002900D10020061C281C08F08BF8002828 +:1065500001D0022000E00020A16B30433C00882CD9 +:106560000000087005B0F0BD000018DB010080B528 +:1065700014218420FEF703FB80BD0148407870475A +:106580000000046C010002480069C007C00F70479A +:10659000000000400700011C3C23044A59433C0012 +:1065A000C42C00008918203109780120002900D06E +:1065B0000020704718DB01000848406A00280AD113 +:1065C000074A002120239B5C022B04D001313C327E +:1065D0000529F7D37047012070470000046C0100C3 +:1065E0003C00002D000018DB0100F8B50E1C041C57 +:1065F000171CFEF782FE201C114C606001202060F9 +:10660000104D686901306861686A002803D007216D +:106610008420FEF7BAFAA068400703D5062184203B +:10662000FEF73C003C2D0000B3FA08480069002842 +:1066300003DAAA218420FEF7ABFA02206862AE607A +:106640002F70F8BD00300700046C01000040070007 +:10665000044A518010710348034908304860012002 +:10666000086070473C00782D00003C6C0100003051 +:1066700007000021002305E002894360C06851182B +:106680000904090C0028F7D104310804000C7047F4 +:106690000000024A516B0843506370470000046CCD +:1066A000010038B50A4C3C00B42D0000221C2032F9 +:1066B000957900AB1D70D2795A7003684068064A1C +:1066C0005065054813655030816000AB1888E08440 +:1066D00038BD000000100700046C010098B50D4C97 +:1066E000201C2030817900AB3C00F02D0000197097 +:1066F000C07958700A4800F0ECF809490020486257 +:10670000FFF769FF002803D012218420FEF749FA21 +:1067100000AB1888E08498BD00000010070000302E +:106720000700046C01000348017A3C002C2E000095 +:10673000FE2291430A310172704700000080070079 +:1067400090B50E4C85B0A078022814D10320A0701B +:106750000B4900200022049202900391E18801225B +:1067600001920091617820782269E3683C00682EEC +:10677000000008F094FD044809F07FF905B090BDD1 +:106780000000B4790100ADB6000071B60000B0B5EC +:106790000C4DAC790C490978002903D001290ED0A1 +:1067A000022908D1C288002A09D0012381683C004F +:1067B000A42E000002200FF0C1F803E00221862081 +:1067C000FEF7F8F9AC71B0BD20100700A079010008 +:1067D00080B5026807494A600379CA78CB700079AE +:1067E000904206D003481430008907F027FE06F0D7 +:1067F0003C00E02E0000ABFA80BD8466010070B55D +:10680000164C154DA0780026983D012803D1286923 +:1068100008F0FBFCA6706068012803D000212869FD +:1068200000F0FFFB0E4829690CF031FA01200CF052 +:10683000E4F83C001C2F0000E078012802D0012081 +:10684000607000E06670064814304168012906D186 +:106850000660416F002902D00020FDF74CFA70BDA0 +:10686000846601003463010030B500220023012555 +:106870002C1C94403C00582F0000044001D0CA5406 +:10688000013301320E2AF6DB181C30BD0000FFB5C3 +:1068900001270026051C022081B00090002D18D091 +:1068A0002878FF2815D0002410E0281980780A994C +:1068B000002901D001063C00942F000008D507F004 +:1068C000E9FE0E2803D0012181400E4300E000279D +:1068D00001346878A042EBDC0098029D01380090FA +:1068E000DFD10398311C814302D003980640002772 +:1068F0000498066005B0381C3C00D02F0000F0BDA5 +:10690000000002210160642101E0013902D0026827 +:106910009207FAD40120002900D10020704710B559 +:106920000020C443054B022201015A50C9188C6053 +:1069300001300828F8DB10BD00003C000C300000DE +:1069400000300700F0B5051C6035C76A041C287BC1 +:10695000002F8BB015D0082815D202A31B5C5B005A +:106960009F4400000704040709090C0C01260021BC +:1069700009E0002606E00226022104E03C0048303F +:1069800000000326032101E0042601218C22125974 +:1069900007912649069004910020039005970892DC +:1069A000E0692269211C7031019121490090700039 +:1069B0004018603002920388591C01801E483C0038 +:1069C000843000000288A1680AA809F0E1FF606035 +:1069D000E87AA16AC9070007000EC90D0843616A79 +:1069E0002269C907890D01430120002A00D1002036 +:1069F00080030843216AC9030843082108430A9910 +:106A00003C00C03000000880201CFEF798FE206982 +:106A1000002804D1201C0AF082F90BB0F0BD807967 +:106A2000062801D9FEF70FF9206906498079800010 +:106A30000958201CFDF774F9EFE7792F0100C469AC +:106A400001003C00FC3000000861010074570100A7 +:106A500010B5041C58308AB00EF07CFE221C803227 +:106A60005168002901D0117A07E0002804D080691C +:106A7000800701D5032100E00121D2680791224956 +:106A8000002008923C003831000004910022059259 +:106A900006900390E06922690090211C70311C4827 +:106AA000019102920389591C01811A480288A16848 +:106AB00009A809F076FF60606B20005DA16A226979 +:106AC000C9070007000E3C0074310000C90D0143E6 +:106AD0000120002A00D10020800308430999088082 +:106AE000201CFEF735FE2069002804D1201C0AF086 +:106AF0001FF90AB010BD8079062801D9FEF7ACF85D +:106B000020690749807980003C00B03100000958B5 +:106B1000201CFDF711F9EFE70000BD2F0100246AEA +:106B2000010008610100745701003EB5051C0069B1 +:106B3000042107F0D2FA002809D042780232011C61 +:106B40006846FDF788F9E86A6C463C00EC310000C5 +:106B5000029000E00024281C143002F003FB0028FF +:106B600004D0211C281C05F0A5FE3EBD002CFCD045 +:106B70000249201C4969FDF7E2F8F6E7447D01006F +:106B800070B51E1C18235843064B049D3C00283248 +:106B900000001950C418002060616260A660E560C2 +:106BA0000FF0B9FD206170BD0000B87D0100024A00 +:106BB000011C9069916170470000447D010001480B +:106BC000406B70470000447D01000449044B3C00C9 +:106BD00064320000CA6809695C3B5B68C91A4143BA +:106BE00050187047A07D01000148007870470000F0 +:106BF0007869010080B506220149FDF735F980BDAD +:106C0000FE670100F0B589B00093164F131C0E1CEF +:106C10003C00A0320000041C3A1C01F062FF01A9F4 +:106C200006A8A26802F00BF901AA06A9381C636A3B +:106C300002F081FC051C012814D10C48FC21C8512C +:106C4000381C02F00CF80321301C07F052FA00281F +:106C500007D03C00DC320000807800F033FC201CC0 +:106C600010300EF047FD00E00025281C09B0F0BDF3 +:106C7000F4670100C138000010B5074C0648062231 +:106C8000211D0838FDF7F6F801F0FCFF00F042FC8A +:106C9000201C02F03C001833000027FC10BDF467F4 +:106CA00001000849C96800290AD0064A0132517812 +:106CB00012784843002A01D108187047101870470D +:106CC000013070470000447D0100044B0549002855 +:106CD0005A6900D0011C3C0054330000101C59615B +:106CE00070470000447D0100B9750000074900208D +:106CF0000A78022A09D10A7C002A05D1CA68002A2A +:106D000003D04969002900D001207047786901004B +:106D10000C4A80B5012151603C009033000009F01D +:106D20006AF809481C308169002907D00023836173 +:106D300000220021002000F0D2F880BD00220021B6 +:106D4000034800F05CF980BD00005C69010051352A +:106D50000000B0B50C1C012816D13C00CC3300005B +:106D60000E4D022C09D100F02BFA00280ED06869D4 +:106D700000280BD1211C13200CE0032CFAD100F0C9 +:106D8000F9F9002802D0287C0028F3D0B0BD211CDE +:106D90000006000E04F062FCB0BD00003C000834A8 +:106DA000000078690100B0B50C4C002525746561C0 +:106DB000E56000F03CFA00F034FA07481C38056141 +:106DC00009F033FF2078002802D104F06EFAB0BD3C +:106DD0000228FCD104F0A5FBB0BD786901003C009D +:106DE000443400000C4880B50178002912D0C068F6 +:106DF00000280FD108481C38406900280AD10748EC +:106E00000068002806D000220721102010F0A0F909 +:106E100002F02CFC80BD000078690100D4670100FD +:106E20003C0080340000F8B51D4E1C4D041CF06879 +:106E300002271C3D002807D0E868002804D0FDF791 +:106E4000C2FE002800D0BC43002C14D03770F0687C +:106E5000144F002810D0E00717D4FDF7B4FE002827 +:106E600013D03C00BC3400007069002806D1E868EB +:106E7000002801D0FDF71AFF0DF00AFAF8BD686985 +:106E8000002805D109480068002801D0012C04D150 +:106E9000391C201C0EF052FDF0E704F01DFB02F03F +:106EA000EBFBEBE73C00F83400007869010050C3CD +:106EB0000000D467010005484169002904D0406AF8 +:106EC000002801D001207047002070470000786939 +:106ED000010010B5041C0649002048600860886065 +:106EE00008F09BFF07213C00343500001220227976 +:106EF00010F03AF910BD00005C6901000149012061 +:106F000008607047E8670100F8B5071C0E1C08F020 +:106F1000A3FA134D041C6868002817D0002F02D074 +:106F2000A868032813D300203C0070350000A86037 +:106F30006860211C0F200EF0F0FE2868002803D0A6 +:106F4000002C06D1012002E0012C02D10020FFF725 +:106F5000FAFEF8BD721C0021044800F068F8A86829 +:106F60000130A860F5E75C6901003C00AC35000029 +:106F7000513500000A4980B5CA68002A0BD0426822 +:106F8000002A09D000224A6202680A6202680721C8 +:106F9000172010F0EFF880BD0120486280BD00008E +:106FA0007869010070B5144D846CE9683C00E835DF +:106FB0000000002917D04030EC614078002801D152 +:106FC00001206862286A0E4E001BB0420CD208F005 +:106FD0003AFE296A401AB04203D202220721132046 +:106FE00009E004F0B6FA70BD0748A9680BF03C0050 +:106FF00024360000BDFE221C0721162010F0C0F828 +:1070000070BD000078690100A086010034630100B2 +:107010000A4980B500208861086900280CD007481B +:107020001C300078002807D001F0D2FF022803D1DD +:107030003C006036000000F012F900F0BCF880BDA2 +:1070400000005C690100F0B5061C0C1C151C91B019 +:1070500001A84021FCF70DFF00216846FDF7A7FFBE +:10706000049001A806220849FCF731FF062202A875 +:1070700002303C009C3600000649FCF72BFF00ABB9 +:10708000DC760C95311C01A807F04EF811B0F0BD6C +:1070900012610100F8670100031C081C191C114B48 +:1070A00080B506D0042111800422191CFCF712FFC0 +:1070B00016E004223C00D8360000011C181CFCF726 +:1070C0000CFF09481038006900280CD007480C3024 +:1070D0000078002807D001F084FF022803D100F0D7 +:1070E000C4F800F06EF8012080BD6C690100F8B5AD +:1070F000041C0F1C00253C0014370000002601F082 +:1071000073FF02282FD11949012F086807D1021CEB +:1071100022400AD120430860A04206D104E00028A2 +:1071200003D0A043086000D10125486800281AD187 +:10713000002D17D0012048603C0050370000381C5B +:1071400008F089FE0B481C308169002907D0002314 +:107150008361002200210020FFF7F1FE06E00022FB +:1071600000210448FFF77BFF00E00126301CF8BD3A +:1071700000005C690100513500003C008C370000C4 +:10718000031C081C191C124B80B506D00421118069 +:107190000422191CFCF7AAFE18E00422011C181C8A +:1071A000FCF7A4FE0A481030C16800290ED0007810 +:1071B00000280BD001F01EFF022807D13C00C83781 +:1071C000000000F064F800F02EF8002801D109F06A +:1071D0007AFD012080BD6869010010B50A4C206964 +:1071E000002809D0A169002906D17D21C9004143A9 +:1071F000032207200FF0E1FE2169012000293C0055 +:107200000438000000D1002010BD00005C690100BE +:1072100010B5054C002803D0FDF79AFCE06010BDC6 +:1072200001200021E16010BD786901000A480A4987 +:1072300010B5C0681C39C968002803D0002901D0E6 +:107240003C0040380000012400E00024002C03D062 +:10725000022207200FF0B7FE201C10BD0000786945 +:10726000010010B5094C0020216900290CD0064905 +:107270001C310978002907D000F009F80120A0612D +:1072800020693C007C3800007D23DB00584310BDA2 +:107290005C69010080B5032107200FF0D1FE80BD9D +:1072A00080B5022107200FF0CBFE80BD064880B5D7 +:1072B0000078002801D0FDF729FD002207211120C8 +:1072C0000FF07CFF3C00B838000080BD00007869FA +:1072D000010010B5041C101C064A516100F0A3F80F +:1072E0001020002C00D11120002207210FF069FF8F +:1072F00010BD5C6901000149486270470000447D8F +:10730000010010B5094C3C00F4380000E069002889 +:107310000CD1E0620120E0610BF008FD0BF074FE7F +:10732000012000F0B5F80FF04DFA606310BD0000C9 +:10733000447D0100054980B50020C861886300F0E4 +:1073400089F800F001F902F03C003039000091FBAF +:1073500080BD447D010010B5012838D10806000E1B +:10736000052832D11D4C2078012809D002281BD0D5 +:1073700003282AD102F07DFB00F06FF8012010E015 +:107380001748216B0BF01BFD0BF03C006C39000023 +:1073900041FE15480069032801D3C00703D5012128 +:1073A000206B07F019FF022000F078F810BD0F489D +:1073B000006820640A485C30C16802698918C160AD +:1073C00003F0CCFC032000F069F801203C00A83950 +:1073D0000000E06210BD092100E008210920FDF74E +:1073E00076FC10BD0000447D010034630100F468A8 +:1073F0000100786E0100B0B50F4C2078651E0128A1 +:107400000FD10020FFF7A1FC0C49098849083C0076 +:10741000E4390000401A0FF019F9002804D0287848 +:10742000012807D0022805D02078002804D1287828 +:10743000032801D10120B0BD0020B0BD457D010071 +:10744000F46701000149C86470470000447D0100F1 +:107450003C00203A00000449054A8968126D012069 +:10746000914200D3002070470000F4680100447D81 +:10747000010010B5064C206B07F0F9FEA06B002848 +:1074800003D10348216B0BF092FC10BD0000447D3A +:1074900001003C005C3A00003463010004480078BD +:1074A000022801D0032801D1012070470020704735 +:1074B000447D0100F8B5071CFFF7D0FF061C012F23 +:1074C000264D1FD0022F45D0032F12D12448254B23 +:1074D00000696A693C00983A000041085A43234B0E +:1074E000D4188C4200D90C1C002E05D01E495B39E3 +:1074F0000978002900D1041C0522211C09200FF065 +:1075000080FD184A5C3A1770F8BDFFF7D6FB0028DB +:1075100002D0286900283C00D43A00000ED004F0C4 +:10752000CFFB134B6969114A59435C3AD26B8918F6 +:10753000884201D9441A04E0002402E004F0AEFDC0 +:10754000041C002EDBD009485B3800780128D6D116 +:10755000084B9C4202D958423C00103B00002418C2 +:10756000D0E70024CEE704F0AEFBCAE70000F468E1 +:107570000100A07D0100983A00008813000080B54A +:10758000052109200FF07DFD02490020087080BD13 +:107590000000447D010070B5061C3C004C3B00001F +:1075A0000DF0BCFAFFF7CEFE094C0A48216B0BF038 +:1075B00021FC012501213006000EA56307F03AFEEB +:1075C000054829020958002900D1056170BD000055 +:1075D000447D010034630100F46701003C00883BF6 +:1075E0000000024A116C0843106470470000447D9B +:1075F000010080B5FFF7BFFE0BF0A1FB80BD024A82 +:10760000011C1069116170470000447D0100F3B551 +:10761000061C002089B0F84C0890E26908253C005F +:10762000C43B0000002A03D006A907A8FCF706FC0B +:10763000301CF34E0027203682286FD015DC01283D +:1076400018D080286BD1EE4D803DA868012867D105 +:1076500068680FF01BF8002863D1012101200DF0AC +:107660003C00003C00009DF808F0DBFD0BB0F0BDD5 +:1076700083286DD0842855D1E7E00A980A2804D2DF +:1076800003A31B181B5A5B009F44F6E00000EE00AA +:107690000B00F700F700F700F7002F0088008B00C1 +:1076A000AD003C003C3C000000F056FE002817D026 +:1076B000D64A803AD16A0698814216D0062100281F +:1076C00000D107210D062D0E00280ED0CF4A012033 +:1076D000803A50650FF0A0F8CC4A803A506604E03A +:1076E000002116203C00783C00000FF0DCFC012556 +:1076F000022005902EE2C6488038406D00282ED02A +:10770000C6492069C44D40180EF0C1FF002812D0B0 +:107710000FF085F8C14949424018BD4920618039C0 +:10772000486E40190EF03C00B43C0000BBFF00283E +:1077300011D00AE0F7E017E2B2E0B0E0B649206904 +:107740008039496E401AA84205DBB349B54D8039EE +:107750004F6503F027FB0622291C16200FF072FC50 +:1077600047E095E000F0FEFD3C00F03C0000002802 +:1077700042D1AA4DC43DEF6008F019FD03F015FB9E +:10778000A86A002802D0FFF74CFFAF62A4488038F7 +:1077900000680021FFF7F9FC08F03FF909211620E5 +:1077A0000FF087FC0022162183203C002C3D0000B6 +:1077B0000FF040FDFFF786FC21E000F01BFE1EE00D +:1077C00006F054FA974D803DA96F401A0490069830 +:1077D000002801D0AF6502E0A86D002808D19148CB +:1077E000C4380078800703D5924847603C00683D64 +:1077F000000000F002FE0498FF382338142802D25B +:107800000120E86353E0EF6351E0874AB57A803A9C +:10781000002D4CD00DF071FF00F0ADFD071C82482B +:107820008038406FFF305F300EF03DFF021C3C009F +:10783000A43D00007E488038406D00281AD100F039 +:10784000F1FD002816D1042D02D1002F12D11BE02A +:10785000002F06D0022D14D079484068002809D0A6 +:1078600012E0002A10D14B21C90001230922162061 +:107870003C00E03D00000FF0D6FC6E4A7348803AB1 +:1078800011680BF0D8FA18E00121002001E0012175 +:10789000012000F02AFE10E0674A6C49803A906EA1 +:1078A00040189066012508958BE104216CE1614A3E +:1078B00066483C001C3E0000803A11680BF0AAFAB2 +:1078C00088E1AF60A86FE8676348016DA967079A10 +:1078D0001420002A00D1002008181230A866707801 +:1078E000B0703078707002203070A069FCF7C2FA76 +:1078F000EF64A86F3C00583E0000E96F594B401AF6 +:10790000984212D2686D069988420ED030780228CB +:107910000BD80EF09CFFA96F0822401A5249091A91 +:107920003B1C16200FF085FC00E0AF6501200590A0 +:107930000890434802253C00943E0000C438C168CA +:10794000002972D10121C1604948006B00286CD028 +:1079500008F066FC69E03C480022019280388068AB +:10796000012804D1384880388760012048E13A482E +:10797000012343603448C4383C00D03E0000007806 +:1079800000280AD100F025FE002806D0FF21913101 +:107990000123092216200FF052FC2C498039486F30 +:1079A000896F421A039206F076F928498039896F67 +:1079B000039A401A0290372000013C000C3F00005F +:1079C000101A50280DD223488038406D002804D169 +:1079D0000298FF385538142801D2012200E0002215 +:1079E0000192039A0120FF3A0B3A502A00D300205B +:1079F000049000280AD017488038C06F3C00483FE8 +:107A00000000081A9B21C900401A142801D2012243 +:107A100000E000220092002A11D00F4D0120803D8D +:107A200068650EF020FF68660125012116200FF021 +:107A30005EFB002116200FF05AFB00E0BAE03C008C +:107A4000843F0000F07902283CD8054A803A516C06 +:107A5000002937D1136C111C002B33D116E0000024 +:107A6000246D010050C30000C05C15007099140023 +:107A7000B057010034630100E204000000900700E9 +:107A80003C00C03F0000530700001E020000C85722 +:107A900001004A6D002A02D0B27A022A15D1009A5A +:107AA000002A03D0CA6D0132CA6500E0CF65019A91 +:107AB000002A0BD08A6FCB6FD21A5A4B9A4202D24D +:107AC0008A6D3C00FC3F0000013200E001228A6523 +:107AD00000E08F650499002901D102280BD9544A8E +:107AE00002281ED9D06F616888421AD1916F081A96 +:107AF0005049884215DD4E4B986FE168401A7D2150 +:107B0000C90088423C00384000000BDD6169401A22 +:107B1000002804DD021140111018401801E0801007 +:107B200008186061586FE0600398FF382338142804 +:107B300009D20298FF382338142804D23E4A906FA5 +:107B40005064906A90643C00744000000EF09AFE0D +:107B50003A49496C401A3B49884201D937494F6438 +:107B6000394903984018142807D23449C86B0028B3 +:107B700003D0886F0864886A88640EF083FE2F49FA +:107B8000096C401A314988423C00B040000001D9DC +:107B90002C48076404200590082116200FF0B9FA3C +:107BA0002848406D002802D00499002908D02949AE +:107BB000002800D129493B1C062216200FF057FB54 +:107BC000022D09D0062D0AD0072D3C00EC40000004 +:107BD00013D107E001211620FDF7D6F81EE01A4A5E +:107BE00057639763184A0698D06207991163536BDD +:107BF00018435063906B084390630598002805D0A4 +:107C000005980CF05FFA05980CF0D2F93C00284179 +:107C10000000082D05D00D4844388570281C03F05D +:107C2000DCFD1149E069884200D161E5089800282F +:107C3000FBD0B07A0228F8D1012116200FF06FFA9C +:107C400002200DF0E8FE53E50000530700003C0061 +:107C500064410000A46C010020A10700204E000038 +:107C60003FFBFFFFA086010050C30000C05C150071 +:107C7000F11D00007047000070470000F8B5214872 +:107C80000068214D6969084001D1012700E0002703 +:107C90003C00A04100001D4D0126696A002900D06A +:107CA00000261B4D1A482C1CA030027A281C40309C +:107CB00080341023B74210D10125C580002900D09F +:107CC00000231A43111C017301200EF088FE0820C6 +:107CD00020703C00DC41000000221621802013E0CF +:107CE0001127C7802E1C0B4D002900D100231A43F9 +:107CF000111C017301200EF075FE08202070306DFC +:107D000000221621686782200FF0D0FAF8BD00002B +:107D1000100007003C0018420000A46C0100009015 +:107D20000700B0B50F4D041CAA7A0121081C002AD7 +:107D300000D00020002C00D0002188420AD0002C66 +:107D400004D100F042FB00F0D6FA03E000F0D9FACB +:107D500000F009F8A87A3C00544200000249E439D6 +:107D60004871AC72B0BD0000446D010080B53EF0BA +:107D700055F802490120087080BD0000687E0100AE +:107D8000F3B501208DB00F1C012408900EF092FD78 +:107D9000061C00F0B5FA09903C009042000000F08B +:107DA00080FB0790FEF73FFA051C00210C9108F0BC +:107DB000F0FB002801D1012000E000200A90FEF72E +:107DC00012FD05F0E0FE0B90002D23D0288841071E +:107DD00020D4291D04910A3500063C00CC42000045 +:107DE000800E01212028039500D000210D1C04984D +:107DF00006F038FD0C90049806F010FD002808D01D +:107E0000039801F087FA002803D0002D01D101204A +:107E100000E000200C9901430C91FCF73C00084362 +:107E2000000023FF00282FD007F099FF051C07F062 +:107E3000B2FF0490FFF7F3F80C990143002D06D030 +:107E40000498F04A301A904201D2012000E000204C +:107E500008430C900B980A9B1843011C0B913C00A3 +:107E60004443000005F0CEFE00281AD1002D06D0B4 +:107E70000498E749301A884201D2012000E000202E +:107E80000C990843051C00F01FFB284303E000F099 +:107E90001BFB0C9908430C9000F0D4FB0B99014399 +:107EA0003C00804300000B91DC49C868002801D0E9 +:107EB0000138C86008F0E7FB069008F090FD311A21 +:107EC00005910699D648814208D8002F08D1059916 +:107ED0004008814204D90699814201D900248BE0EF +:107EE000D0483C00BC4300000599D04D814226D2C9 +:107EF000E879102806D2002F21D1CC48A038806A1A +:107F000000281CD109F062FF0490002802D1002053 +:107F1000C34913E009F010FE002803D0C448C0692B +:107F20000028F4D03C00F84300000498052803D052 +:107F3000C148006A002865D1BB49486A002823D09F +:107F40000138486200F087FF002811D0BB4805992E +:107F500081420DD201F09BF804300DF0EEFC403070 +:107F6000C17A01294ED03C0034440000807A0028B8 +:107F700001D0052849D301F0DFF8022810D0002FE6 +:107F800002D10698002840D10020089082E1AA483A +:107F9000A038C068002838D0A8488069486234E01A +:107FA0000AA903C9084345D03C0070440000A34817 +:107FB0002978A038022940D8406D00280AD09F486F +:107FC000A2492038C06840180EF0C7FB002801D035 +:107FD000012100E00021964A906A002802DA640834 +:107FE00064002AE0002909D1954B3C00AC44000014 +:107FF000A03B5B6D002B02D005280DDB01E00728BC +:108000000ADB0120C043906264088E4964000020AE +:10801000A039886514E0D1E0394311D18949A039EC +:10802000CB6D002B02D1896D012909D93C00E844B0 +:108030000000079B002B01D1072801DB64086400C6 +:1080400001309062BDE07D4988690490002088611C +:108050000C9800282CD007F066FC002802D00220E3 +:10806000044325E07A48C06A002804D177483C00E0 +:1080700024450000A038C06800281CD104980028BE +:108080000DD12878102802D3E878022802D928795F +:10809000102804D304246B4901228A6194E06C48BF +:1080A000A038406D002871D005F0A2FD00286DD0E9 +:1080B0003C00604500006408640088E0FFF75BFA5C +:1080C00000281AD068480078022801D1002F14D166 +:1080D0000020FEF770FE301A0490FFF76CFA0028BB +:1080E00007D0FFF71EFA002803D05D4904988842A4 +:1080F0004FD33C009C45000005F06CFD00284BD19F +:1081000053490878032808D188680122D207301A19 +:10811000904241D201220A7057E054480078022868 +:1081200001D1002F51D14A4988685149801B8842AA +:1081300007D901203C00D8450000FEF742FE7D2112 +:1081400009014018444988604A480078022804D14F +:10815000079B002B01D1012000E00020474B47493D +:10816000584340183C498968891B884230D9079B8D +:108170000020039300F03C001446000079FF0290B9 +:10818000FFF7D8F9049001F057F80499029A514387 +:108190004843019000F0DCFF411C01980122484354 +:1081A000111C00E01BE0314B5B6A834200D30021CD +:1081B000039B0122002B00D03C005046000000220F +:1081C0002C4B51439B6A0122834200D30022500072 +:1081D000081803D023490320087003E00998C068F9 +:1081E000062808D90224089800286ED01D490020CE +:1081F000C8614861A5E01A4948693C008C46000006 +:1082000000280AD1002F05D001224A61C8698018D0 +:10821000C8610AE00020C86103E0002F05D10020FA +:1082200048610D98002800D1C8680020089008789F +:1082300001282FD002284BD1002F08D13C00C8467E +:108240000000E878002802D12878102843D2287945 +:10825000102840D248680A69301A904267D3012238 +:108260000A7038E00000E204000010270000687E79 +:108270000100A086010088130000446D01003C004D +:1082800004470000C857010050C30000983A00009E +:10829000C0570100400D0300C4090000B20C0000EB +:1082A00000200B9A0A9BC0431A4337D0002F35D1C8 +:1082B000079B002B08D06A78022A2FD92A78102A27 +:1082C0003C00404700002CD22A79102A29D2254BA5 +:1082D0001A6C002A06D09A6A9F6CBA4202D11F20FB +:1082E0001FE02EE0204B5A6C002A03D01F4FB31A18 +:1082F000BB4216D31C4B002A05D09A6A9F6CBA4227 +:1083000001D13C007C4700000F200DE0079A002AB5 +:1083100004D0EA79202A01D1002005E0EA79102A68 +:1083200001D3032000E09A6A124A126802400BD17E +:1083300001200890022008700F4808614E6064E731 +:10834000FFE701203C00B8470000089060E70C49B7 +:10835000886A002801DA013002E0002801DD0020EF +:108360008862002008620899200408430FB0F0BD1D +:108370000000A46C010071020000082007005307F0 +:108380000000687E01003C00F447000070470000D8 +:1083900000487047507E010080B53DF07FFD0249E6 +:1083A0000120087080BD00003C7E0100F8B50D1C66 +:1083B0000EF0C8FA2649041C886A264E002801D00F +:1083C000042003E0706A00283C003048000001D01F +:1083D000013870620027002D02D0B761F7610AE012 +:1083E000B0691C490130B061496D002903D00328F0 +:1083F00001D90120F061B460F168009108F0F7FC48 +:10840000F0600099884202D030623C006C48000065 +:1084100034610BE000F090F8002801D0114800E032 +:1084200011483169611A814200D937620B4A0C4800 +:10843000D16C2030002901D00A2103E0017A002903 +:1084400001D0FF310172002D03D1017A3C00A84810 +:108450000000002900D0916A007A002800D1176539 +:10846000F8BDA46C01003C7E0100A60E0000A861CE +:10847000000070470000064980B58968002907D0D0 +:108480000521002800D104210806000E03F03C005D +:10849000E448000005FA80BD606C010007480068F0 +:1084A00007494A69104001D0012000E00020496AD4 +:1084B000884201D10120704700207047100007005A +:1084C000A46C010070B50EF049FA021C00F03AF8F5 +:1084D0003C0020490000104900280ED0081CA031A3 +:1084E0000E780E4B102E01D3806F03E049781029CF +:1084F0000ED3C06FC018841A0AE0081C803045698A +:1085000008498D4201D90C1C05E0C068101A2C1ACC +:10851000002C3C005C49000000DA6419201C70BD8E +:10852000A46C0100A60E000050C3000080B505F049 +:10853000B7FB002802D007F01FFF80BD034800787A +:108540000028FAD007F070FB80BD0000606C0100CD +:10855000034901203C00984900004969032900D8DB +:10856000002070470000606C0100B0B50A4D002487 +:108570002878012803D005F06AFB0406240EFEF7D4 +:10858000D2FC0002204302D1686A002801D10120F8 +:10859000B0BD0020B0BD3C00D4490000606C0100BB +:1085A0000121012800D000210148416270470000EC +:1085B000606C0100154810B504681548006A002871 +:1085C00014D0FFF7CBFF00280ED111481149C43059 +:1085D0004069884208D2CC083C00104A0000A04202 +:1085E00005D3FFF77EFFA04201DA0C4C01E0FF2427 +:1085F00091347D200001844204D900221621832079 +:108600000EF0BDFE01230922211C16200EF0A7FE4C +:1086100010BDB0570100606C01003C004C4A0000E6 +:10862000C05D00001027000070B5051C0E1C00F096 +:1086300043F800280FD0084C2078C00703D405F079 +:10864000ABF909F031FE002D05D02078800702D467 +:10865000301C02F0FDFE70BD606C01003C00884AD9 +:108660000000B0B5002818D01148814215D210483A +:108670000C1C0D1807F0DFFA81000918A14201D285 +:10868000400003E041000918A14201D2241A06E08B +:108690004100A14203D24008F8E7064D074C3C00D8 +:1086A000C44A00000EF072F90019291C07F0DCFA28 +:1086B000B0BD000080B92A00530700004C1D000027 +:1086C00088130000B0B505F0FDFA002813D1FEF7BD +:1086D000B5FE0A4C0A4D0028606300D028600EF0F9 +:1086E0003C00004B000055F9216A002904D1E169E2 +:1086F000401A2968884201D90120B0BD0020B0BDD0 +:108700000000606C0100B057010080B5FFF7DDFF8D +:10871000002805D005F0B7FA002801D1012080BD5E +:1087200000203C003C4B000080BD000010B50A4C0E +:108730000021A268002A03D0A16002F083F910BDD5 +:108740006160011C002204200EF036FD0348216800 +:108750000AF008FC10BD0000BC740100C4600100F8 +:1087600070B5051C3C00784B000001D1FCF7C1FB43 +:10877000204CE06A002815D01F4BA0695843C60B57 +:1087800020884643F0008019E660FBF71CFEA842F3 +:1087900005D8301CFBF717FE8019A84202D2002032 +:1087A000E06020E0E5603C00B44B0000002D1DD0EF +:1087B0002688A0697043C103281CFBF7A5FD6061F2 +:1087C0000D48321C291C3030FBF70AFC0C4B606949 +:1087D0005843C00B606201F0B7FDA062E06800285A +:1087E00004D02069A168FBF73C00F04B0000F4FBCB +:1087F00070BD0548A168FBF7EFFB70BD0000C874B1 +:10880000010040420F00C0C62D0088130000F1B5E2 +:108810003E4800AB8178C0783E4F0A07040758787D +:108820003B49120F085C1439240F3C002C4C00000B +:10883000801878600130B8601878354D085C0019F0 +:10884000B8610130F861EB7833481E09334B1838B2 +:1088500081785E43AB781D09C8236B43002908D19A +:108860002B4D2D783D60C5607D25ED003C00684CAA +:1088700000005D1B2C4B07E0274D6D783D60C56007 +:108880004B252D015D1B284BF618022000F057F8F0 +:10889000281AF8602248221C18388178032000F03A +:1088A0004EF8301A3862396800AB79615A783C006A +:1088B000A44C00005623F9685A43891AF960C8315C +:1088C00039611849183989780029B96911D100AB83 +:1088D0001A78134B143B9A5C531C59430A2359438F +:1088E000144B591A51430A235943401A386212490A +:1088F0003C00E04C000010E000AB1A780A4B143B3F +:108900009A5C531C59430A2359430D4B591A51433E +:108910000A235943401A0B49386240187862F8BD5F +:1089200000000C5A0100665A010094780100A086EC +:1089300001003C001C4D000000487100B0D68C00C6 +:1089400088100000803801005812000070110100EA +:1089500030B5194B0228DD6806D1002904D12B1C43 +:108960000C339C1A64235C43022809D1012907D1E6 +:1089700064237D243C00584D0000E4006B431C1927 +:10898000A0235343E41A0A235A43032809D1002998 +:1089900007D11323FF24E4006B431B199B1A1C1CF3 +:1089A0005C43032808D1012906D10E2005496843FC +:1089B0004018801A041C3C00944D00004443201CC5 +:1089C00030BD00007C7801008408000010B5074C21 +:1089D0000C2360780549143158434018406801F071 +:1089E0004FFC0021607802F04BFF10BD4C7B010072 +:1089F0000C48F8B540780C233C00D04D00000A49E3 +:108A0000584314314418261D60CE301C0BF00BFD6A +:108A10000027412047550548291C02F0F0FE281C7C +:108A200001F031FC0434C0C4F8BD4C7B010055801A +:108A30000000B0B50A4D4C2128783C000C4E0000D7 +:108A4000094A41438C1822680121FBF7E1FA287892 +:108A500001F0FAFB3C23E056411E012007F034FBF5 +:108A6000B0BD00003C7C010058E301000C23074925 +:108A70005843401880B54068416B00293C00484E7F +:108A8000000002D00BF0FBFD80BD0BF02CFD80BD83 +:108A90000000607B010038220A4B4243D2180029B3 +:108AA00080B504D0022907D10BF0FBFC80BDD26A4F +:108AB0000121FBF7B0FA80BD03218620FCF73C00C2 +:108AC000844E00000FFA80BDD4E40100B0B5040666 +:108AD000240E0C200E49604340184568A86B0028FE +:108AE00003D10021201CFDF7E1FA201C07F0F2FF62 +:108AF000002808D0281C6030C179012903D9FF3132 +:108B00003C00C04E0000C171FF3181710121201C69 +:108B100002F0C5FEB0BD607B010070B50006000E1E +:108B2000051C4C230A49584344183C20005DFF3083 +:108B300006063616281C01F090FB0021281C22682E +:108B4000FBF73C00FC4E00006FFA311C002007F0E0 +:108B5000C7FA70BD58E301000C220F4B4243D218F4 +:108B600010B5546800290DD002290FD12C20005DCA +:108B7000002803D007210C20FCF7BAF9201C0BF0C9 +:108B8000BBFC10BD3C00384F0000002102F08DFE00 +:108B900010BD04210C20FCF7AEF910BD0000607B75 +:108BA000010080B5002907D00C230549584340181F +:108BB00040680BF04AFC80BD012102F076FE80BDCA +:108BC0000000607B01003C00744F000010B5041CE5 +:108BD000002905D002291AD1201C0BF0EBFC10BD96 +:108BE0000D4804700D4807F007F90D48018801226F +:108BF0001203114301804C200A4960434018403061 +:108C00000078FDF75DFD201C3C00B04F00000AF02D +:108C1000D4F810BD03218620FCF773F910BD3C7C0D +:108C20000100054E00003280070058E30100FFB547 +:108C3000051C012083B001900C205D4A6843861812 +:108C40000127002974680ED002293C00EC4F000077 +:108C50006AD12C20005D002803D006210C20FCF7EF +:108C600053F9201C0BF020FD07B0F0BD524814381A +:108C70004570A06B002807D0504807F07FF801210D +:108C8000281CFDF725FA1CE04D4807F03C00285051 +:108C9000000077F84A48143805704B4801880122D3 +:108CA0005203114301804020005DFDF712FDB068C2 +:108CB000002809D1281C07F064FFB060002803D108 +:108CC00009210C20FCF723F90598002803D03C006B +:108CD00064500000E06C0130E0640EE06720005D4D +:108CE000002807D1E06C002804D139480238C06A56 +:108CF000A06409E0206D002801D0002704E0281CB2 +:108D000007F000FF0028E5D105982065201C2030E1 +:108D10003C00A0500000626A0290817B281C07F092 +:108D200078FF002F19D0201C6030C1794A1CC27115 +:108D30008079814202D2012001E040E000200190D0 +:108D400000280AD025480078800706D500F00DFBE2 +:108D5000011C3C00DC500000201C0BF015FD0190B4 +:108D6000019800280FD00298007B022803D1201C14 +:108D700004F0D0FE84E7012800D07EE7211C301CDF +:108D800004F0E2FE7CE7251C6035E879FF30A8712D +:108D9000687A06F03C00185100009DFC0DF047FE7B +:108DA000071C05F012FF3F180298817B20690430F0 +:108DB00000F035FA616A05F0EAFE39186B7A3088FE +:108DC0008031094A0DF091FE5DE703210C20FCF78C +:108DD000AAF858E700003C0054510000607B0100F5 +:108DE000A54D0000C94D0000328007001D7501002F +:108DF0008D4E0000FFB581B01F1C051C141C101CFB +:108E00000A9E00F0F5FC291C1031201D0622FBF7FC +:108E1000B7F9A88E2080E88E3C0090510000608059 +:108E20000299201C00F007F9FF34013466602760C6 +:108E300005B0F0BD0000F8B50F1C1E1C051C141C6D +:108E4000101C00F0D8FCA888391C2080288960807C +:108E5000201C00F0F0F8FF3401343C00CC5100003D +:108E60006660F8BD70B5041CC0680568201C14302D +:108E7000061C00F00FFB002816D0012202212069F9 +:108E800005F0F8FA002801D0FBF724FF00220221A8 +:108E9000206905F0EFFA002806D0FBF73C000852E5 +:108EA000000001FF002802D0301C0BF07CFB688919 +:108EB0008007C00F03F0A7F818230449584340184F +:108EC000C168002902D0201CFBF7D4F870BD94675C +:108ED0000100F8B5041C101C0D1C191CFF223C00DD +:108EE000445200000027FF2D25D0002905D04B88D3 +:108EF000002B02D000F050FC15E00021104E4B007A +:108F00009E190223F65E864201DD0A1C04E001314F +:108F10000906090E2629F1D3094E500080194E2367 +:108F20003C0080520000C05E272A07D20649203943 +:108F300049574731401A2060012702E07E20C04394 +:108F40002060381CF8BDFA470100B0B50C1C7E212A +:108F5000051C0020C943002C0FD0101C05F06BFD30 +:108F600000283C00BC52000002D0211CC93901E09D +:108F7000211C86390220C043FBF7B4F9011C0120F3 +:108F80002960B0BD98B5141C00220092221CFDF788 +:108F900043FE98BD054980B5086005490120C861B8 +:108FA000012100203C00F852000003F01CFE80BDAF +:108FB000000020670100AC7C010080B5002100208A +:108FC00003F011FE06F00DFB02490020086080BD91 +:108FD000000020670100034901200969002900D130 +:108FE0000020704700003C0034530000106701006F +:108FF00003480069002801D040697047002070478D +:109000001067010070B5161C0D1C041C002801D04F +:10901000012C07D100F036FA002805D013F0CAF968 +:10902000002801D1012070BD3C00705300000120D8 +:10903000002C00D000200A4C043461C4103C00F025 +:1090400024FA002802D000F0C6F901E000F0E5F8AB +:10905000C030C36B221D07CAFBF720F8002070BD8B +:109060000000D4670100F8B50D1C3C00AC530000B3 +:109070000021041C281C05F0E3F9231CFF332133D5 +:10908000FF27002805D02222011C181CFBF796F8A8 +:1090900000E01F700321281C05F0D2F9261CFF36C2 +:1090A0004136002805D00322011CB01C3C00E853C7 +:1090B0000000FBF786F800E0B7700121281C05F0DE +:1090C000C2F9002807D0011C201CFF300A224630BC +:1090D000FBF777F800E077713221281C05F0B3F92F +:1090E000002807D0011C201CFF30122250303C0009 +:1090F00024540000FBF768F800E0F7730621281CF1 +:1091000005F0A4F9002807D0011C201CFF30042220 +:109110006330FBF759F8F8BDFF346134A770FAE704 +:10912000084980B50968002801D107480168081C72 +:109130003C006054000005D103219020FBF71DFF87 +:10914000002080BD01F0D7FB80BD1C6701002067B7 +:10915000010080B5FFF7E7FF80BDF0B5002484462D +:1091600000200BE08740174007D014230B4D4343EA +:109170005B193C009C5400001B7C65462B55013458 +:10918000013001273B1C0E2800D300230E883D1C14 +:10919000A64200DC00252B40E7D10C80F0BD00008A +:1091A0007440010078B5041C01202070082000AB39 +:1091B0000D1C18803C00D8540000161CA01C6946E9 +:1091C000FFF7D1FF00AB0022D243198882406170C3 +:1091D00032202870102018803240A81C6946FFF702 +:1091E000C2FF00AB1888687078BD80B502F035FF0B +:1091F0000021002800D03C00145500000169081C23 +:1092000080BD00000549002801D0C86800E0086959 +:10921000002801D00430704700207047106701001B +:1092200003480069002801D00430704700207047CF +:1092300010670100024800693C00505500000028FA +:10924000FFD1704700001067010010B5054C206980 +:10925000002803D104219020FBF79BFE206910BD5C +:1092600000001067010010B5041C00F040F9002850 +:1092700001D0002010BD201C00F03C008C550000E7 +:1092800057F9002801D0012010BD022010BD0000B8 +:1092900070B50F4E041C30680D1C002807D0211C2F +:1092A000043005F0C1FB002801D030680BE0094A0A +:1092B0001068002809D0211C141C04303C00C8553B +:1092C000000005F0B4FB002802D020689C3000E0CC +:1092D0000348405D70BD206701001C670100CC475A +:1092E0000100044900200969002902D0FF31013141 +:1092F000886970470000106701000148007A3C004F +:109300000456000070470000AC7C0100FEB5061C4E +:1093100000201F1C141C0029029019D0012926D0FE +:10932000022947D12648007805F0A0FBA0720AF078 +:109330004FFC0E2809D1A07A05F0AAFB002804D022 +:109340003C00405600002048007805F092FBA072D7 +:10935000002020722FE01D4D2868002801D1FBF766 +:1093600052FE00972A68231C1832111C301CFCF78F +:10937000DEFB26E0301C0CF0CAFB051C02D0A868FE +:1093800000283C007C56000008D1134800680028E3 +:1093900001D1FBF73BFE104800681830021C0E4854 +:1093A00000970168231C1831301CFCF7C3FB002D0B +:1093B0000AD040352888800606D40020206003E0CB +:1093C000012190203C00B8560000FBF7F4FD029804 +:1093D000FEBDB069010090570100206701001C67C5 +:1093E000010080B5002002F04AFE1823054A5843C8 +:1093F000801840690121002800D04178081C80BDF8 +:109400000000946701003C00F4560000024908691E +:10941000002800D1C8687047106701000348C06881 +:10942000002801D004307047002070471067010009 +:1094300010B5054CE068002803D105219020FBF70A +:10944000BDFDE06810BD00003C0030570000106713 +:109450000100F8B50D1C002A03D01149124F0E78F7 +:1094600001E0114F0C26082E01D2341C00E0082424 +:10947000012101704470391C221C0230FAF7CBFE26 +:10948000321B002A07DD322028703C006C57000098 +:109490003919A81C6A70FAF7C1FEF8BDFF202870C0 +:1094A00000206870F9E70000A4690100B0690100BC +:1094B000905701000149486270470000946701001D +:1094C000034980B508600121012003F03C00A85742 +:1094D0000000C5FB80BD1C67010080B50021012094 +:1094E00003F0BDFB06F0B9F802490020086080BD1A +:1094F00000001C67010003490120C968002900D150 +:10950000002070470000106701000348C0683C005D +:10951000E4570000002801D04069704700207047E0 +:109520001067010080B50221012003F09BFB80BD84 +:10953000054A80B512690021002A03D0111D05F0EB +:1095400091FA011C081C80BD10670100064A80B515 +:109550003C002058000012690021002A05D0111C8F +:10956000FF31213105F08BFA011C081C80BD10670A +:109570000100054A80B5D2680021002A03D0111DE0 +:1095800005F073FA011C081C80BD10670100064A33 +:1095900080B53C005C580000D2680021002A05D04C +:1095A000111CFF31213105F06DFA011C081C80BD32 +:1095B00010670100FFB50D1C1F1C87B0109E002412 +:1095C00002F072FD1823134958430858002819D097 +:1095D000041C331C3C00985800003A1C281C0999B4 +:1095E000FAF79FFD041C14D0182000AB1880AA685D +:1095F00001A86946FFF7E7FD6A4601A9002007F0C8 +:1096000044FE002805D10A2100E00F219020FBF73D +:10961000EAFC201C0BB03C00D4580000F0BD000058 +:109620009467010010B5002402F044FD1823054999 +:10963000584340188068002802D0FAF771FD0124D1 +:10964000201C10BD9467010080B5024B00F04EF85D +:1096500080BD0000106701003C001059000080B57B +:10966000024B00F046F880BD000011670100F8B51C +:109670000E1C151C00281C4910D048681C4A288064 +:10968000002007E00B181C7A142363439B181B7CF3 +:10969000335401302B888342F4DC3C004C590000E9 +:1096A00024E000200F1C002408600FE0305D05F06E +:1096B00007FA0E2801D10020F8BD391908720122DD +:1096C000396882401143081C386001342888A04260 +:1096D000ECDC28887860FFF7B7FE00283C0088594A +:1096E000000006D00169002903D07F21C9430BF097 +:1096F00052FB0120E3E72C7D01007440010010B50E +:109700001C1C00280BD020780E2805D214230C4AEC +:1097100058438018007C00E0002008700EE03C00F8 +:10972000C4590000087805F0D1F92070FFF792FEC7 +:10973000002806D00169002903D07F21C9430BF01E +:109740002DFB012010BD00007440010080B52720D2 +:10975000C04309F031FC80BD80B52720C04309F02B +:109760003C00005A000039FC80BD80B5282009F07B +:1097700042FC80BD000080B5282009F04AFC80BD75 +:109780000000B0B5012828D1012901D0FBF76BFCFE +:10979000FFF7E9FD02281AD107F013FC124C2169EA +:1097A00088423C003C5A000015D007F00DFC2061B7 +:1097B00020687D24E40044430DF0AEF9051C07F059 +:1097C0000BFC281A844200D9241A0122211C0A20E9 +:1097D0000DF0B2FDB0BD002109200CF075FCB0BD4C +:1097E00007210A203C00785A0000FBF714FCB0BDAA +:1097F0000000D46701007D20024900010860704725 +:109800000000D467010010B5816D041CFF304630A4 +:109810000CF0D1FC201CFF305030A16D0CF0CBFCC3 +:1098200010BDB0B5041C3C00B45A00000D1C02F081 +:1098300059FC201C02F056FC1823044958434018D8 +:109840001822291CFAF770FDB0BD000094670100D2 +:1098500010B5041C09F0BCFB201C09F0C7FB10BDAF +:1098600010B5041C09F0D0FB3C00F05A0000201C8D +:1098700009F0DBFB10BD70B50C78061C48884D78EC +:10988000E200801AE900401A011C414312312420F1 +:10989000FAF791FD211C6143C9004018291C694356 +:1098A000C90042180C4988790C4B3C002C5B000025 +:1098B00053430C4A1360537B34021460527B88710B +:1098C00001335810084B801A0121490258430028DF +:1098D00000DA494208188012213870BD20100700B4 +:1098E000EC04000000A00700030300003C00685BDC +:1098F000000010B5041C06210430FAF770FCFF20AC +:109900002130FF210155201CFF3041308170417111 +:10991000C173FF2063300155002020616061FF3476 +:109920000134A060E06010BD000070B5061C3C0072 +:10993000A45B0000081C58609A601C1C1E60151C6B +:109940009B8AE28A311C02F0A1FC281AE06070BDFB +:1099500070B5041C081C111C1E1C0025EB43221CA6 +:1099600018320BF0F7FB221CFF325032111C0A395F +:109970003C00E05B00000123201C00F0C6F80C282E +:1099800010D00125201C0BF0ACFA201C00F019F8B7 +:10999000201C00F00AF8201C00F029F8311C201CC3 +:1099A0000BF017FA281C70BD0000FF211D3109586B +:1099B00080303C001C5C00008907002901DA01218D +:1099C00000E00021C1627047011C803100220A635F +:1099D000074A1268002A09D04288920606D5FF304D +:1099E0000130C069400701D40120086370470000BE +:1099F000AC6901003C00585C000080B5011C4A883D +:109A00000020520505D5FF310131C969490700D44D +:109A1000012006F0ECFB80BD0000F8B5051C98683D +:109A2000171C0E1C1C1C002802D1201C0CF031F845 +:109A3000AB69391C301C3C00945C0000A2680BF040 +:109A400095FBF8BDF8B5161C0D1C1F1C002402F078 +:109A500061FB18230649584340184368002B05D082 +:109A60003A1C311C281CFAF78EFB0124201CF8BD7F +:109A70009467010080B507F03C00D05C0000C5FA97 +:109A8000094908610868002802D17D2000010860AA +:109A900008687D21C9004143002301220A200DF0FE +:109AA0004EFD80BD0000D467010080B501210A2071 +:109AB0000DF097FC80BDF8B50E1C3C000C5D00005D +:109AC0005168141C1268A5680B1C751B5719974226 +:109AD00000D20131426800258A4202DD0125626020 +:109AE00005E09A4203D10168B94200D90125002D51 +:109AF00009D001682160A660A38AE28A3C00485D23 +:109B00000000606802F0D7FB301AE060281CF8BD46 +:109B1000000080B502F007FB1823034958434018A2 +:109B20001821FAF798FB80BD000094670100FEB58C +:109B3000041C081C111C1E1C0C25012200923C0058 +:109B4000845D0000A26902ABFDF7F0F8002845D063 +:109B500002982721021C0A4001D1084302902149A2 +:109B6000A069084006D00298014003D14921C900EC +:109B700008430290A06D0299884230D0002E2DD06B +:109B80003C00C05D00004021201C5830FAF769FB02 +:109B9000029800250026371CA06519E0C00711D5E2 +:109BA000F019001970300571281C04F0D4FF00284A +:109BB00004D0A01980300572013603E0E01960304E +:109BC00005703C00FC5D0000013701352D06029850 +:109BD0002D0E4008029002980028E2D18420065100 +:109BE000F0192067E765002500E00B25281CFEBD65 +:109BF000D83A000038B5051C081C111C0024E243AB +:109C00006B46FFF73C00385E00004FFA002805D095 +:109C1000A86900990140814200D10124201C38BD6F +:109C200000007CB5056A8669041CC068FBF7B7FBB9 +:109C3000E169FBF7DAFA201CE2694030C18B128936 +:109C40008918C18306493C00745E000001940091AC +:109C50002869331C82880168E068C06800F0F2F966 +:109C60007CBD0000915E0000B0B5D1685569C86840 +:109C7000141C144B0CE002689A4207D1C268CA60F7 +:109C80000021C1600160FBF73C00B05E000073FB87 +:109C900003E0011CC0680028F0D1E068C068E860FB +:109CA000E068C560201C4030C18B2A898918C183B7 +:109CB0002068002802D0FFF7BAFFB0BD044804F0C6 +:109CC0004EF9006A07F077FAB0BD3C00EC5E000088 +:109CD000A07E0100A06A0100F1B582B00298066979 +:109CE000011C083660314568019182E01021002096 +:109CF0002F69FBF763FB6861018908390904090CC6 +:109D000001816869006840180821FBF73C00285F62 +:109D1000000057FBE86168697188006820220180B3 +:109D2000716841600199497B89011143C17000212B +:109D300081702820FBF775FC3988041CC181A86B51 +:109D4000002803D1012080020843E08106223C0064 +:109D5000645F0000391D201C1030FAF7C5FA391C69 +:109D60000A310622201C16300090FAF7BDFA391C81 +:109D700010310622201C1C30FAF7B6FAE189254A78 +:109D80005C201140012292031143405BE1810F21CD +:109D90003C00A05F000008406084201C2030162199 +:109DA000817100212170E96B002907D02969098B95 +:109DB0000907090F2170A184182181710622601CF6 +:109DC0000099FAF794FA7068000EE071706800026A +:109DD000000E3C00DC5F0000207270680004000E82 +:109DE00060727068A0727088000AE07270882073D8 +:109DF000708801300004000C708002D1706801305E +:109E00007060AC61029828622D68002D00D079E75F +:109E1000029804493C00186000004268044804F0BD +:109E200074F8FEBD00008FC7FFFF3DDA0000A06A96 +:109E30000100B0B5074D2878032808D000242C7005 +:109E40006968002903D00120FAF7C8F96C60B0BD39 +:109E500000009C7301003C0054600000F8B52B4BDF +:109E6000D86A002850D02A48011CFF310131CA6845 +:109E70000132CA601A6C002A02D14A6901324A6171 +:109E80000A6901320A61DA68002A04D01F4A0132E5 +:109E90001278002A02D18A693C00906000000132E9 +:109EA0008A610025071D18261A4A6E43743290599C +:109EB000002829D0B4186069002825D160680028DE +:109EC00002D00168002905D1A16800291CD00968C9 +:109ED000002919D0002805D0E1683C00CC600000C2 +:109EE0000131E1600068814211D3A068002806D0EA +:109EF0002169006808180CF0A3FD002807D0064A65 +:109F00000120606174329159381CFAF770F90135FB +:109F1000022DCBDBF8BD0000447D01003C00086150 +:109F20000000F4670100F8B50F1C0025041C002890 +:109F300025D0201C04F003FE002806D0FFF7FFF810 +:109F4000041CFFF750FB061C07E0201CFFF791FBE9 +:109F5000061C201CFFF76FFB041C002E06D03C00E3 +:109F600044610000FFF74CFB002802D001250120CE +:109F700007E0002C06D0FFF7EFF8002802D00125FB +:109F800000203860281CF8BDB0B5C568041C0DF071 +:109F90008FFC207EC10708D5E168A94205D9226956 +:109FA0003C0080610000914202D3E18A0131E182EC +:109FB000810708D5E168A94205D22269914202D8F9 +:109FC000E18A0131E182400706D5E06821698842D3 +:109FD00002D1E08A0130E082E08AA18A88420DD372 +:109FE000607E3C00BC61000002280BD02068E16864 +:109FF000042207F065FB607E002803D1206808F08A +:10A00000ABFFB0BD0020E082B0BD000070B5061C03 +:10A010000C232049584345180020A860301C06F046 +:10A0200091FE041C3C00F8610000686033D0012000 +:10A03000A8702C20005D022803D1201C03F045FEEF +:10A0400010E0616B00290AD0012804D1211C281CD2 +:10A0500003F055FE06E0201C0AF00DFC02E0201C77 +:10A060000AF03DFB0D483C003462000014384168A2 +:10A07000002910D0201C4030028B1207920F012AB9 +:10A0800009D0808B32020009000410438122024370 +:10A090000C200DF0B7F90CF0A5FD606470BD000058 +:10A0A000607B0100FFB5081C3C0070620000111CC1 +:10A0B0000C32202414430C4A83B00CAE526860CE9C +:10A0C00094700024D47093630D234027BB52946195 +:10A0D000148401220292321C00900191231C291C3D +:10A0E000039800F066F907B0F0BD3C00AC620000D8 +:10A0F000A07E0100F8B5041C0027114E1DE0E068A9 +:10A10000002870680CD1808800070DD101210C480F +:10A11000FBF784F9C460E86070688188013102E06F +:10A120008188228989188180E068391C3C00E862B6 +:10A130000000002801D17168C96D251C6160041CF4 +:10A14000002CDFD1F8BDA07E0100064910B549689A +:10A15000002305E08A88048912198A804360C06858 +:10A160000028F7D110BDA07E010010B509493C00C0 +:10A1700024630000002449680AE08A880389D21811 +:10A180008A80C368221C002B00D1CA6D4260181C53 +:10A190000028F2D110BD0000A07E0100011C134870 +:10A1A00010B54068002309E082880C89121982806A +:10A1B0003C00606300004B60CA68002A00D1416621 +:10A1C000C9680029F3D1011C68318164C364436507 +:10A1D00082880823111C08318907890F591A5023D6 +:10A1E000195251188180011C406E4831C16010BD68 +:10A1F00000003C009C630000A07E010010B50749F0 +:10A2000000244B6806E0C268211C002A00D1D96DE9 +:10A210004160101C0028F6D110BD0000A07E010096 +:10A2200070470000FEB5061C0C480C1C40688021DD +:10A23000817000213C00D8630000C170151C4022D1 +:10A2400081631152816101840020042202920090F6 +:10A250000191291C201C1A1C331C00F0BCF8FEBD07 +:10A260000000A07E010070B5061C1748807802210E +:10A27000164A884390703C0014640000101C8078DB +:10A280000843111C887013480024C4707020FBF729 +:10A29000D9F9114D70216860FAF734F83007000FD2 +:10A2A00069689030C8650D4868220880081C28300D +:10A2B00089604861082008823C0050640000081C46 +:10A2C00038304863203848645A20505406480831D2 +:10A2D0004164446570BD0000070058000700A07E7F +:10A2E0000100DEC00000003007000A4B10B5586DB9 +:10A2F0000A490022496800244A623C008C6400003C +:10A300005C654B6E002B01D0DA604A668B6D002BCA +:10A3100003D00A6E0021F9F79CFF10BD0030070042 +:10A32000A07E0100094910B508880130088001208D +:10A33000074980020860074CA26D002A3C00C864EF +:10A34000000005D00521D1200DF06FF90120A06596 +:10A3500010BDB07401000010070000300700FFB509 +:10A3600083B00CAE86468C460E4A43CE0FAD0F1C12 +:10A3700052680C3730CD9770D37096630D263C0031 +:10A38000046500004027BE52059E9661138400229A +:10A3900002922A1C00900191211C6046734600F035 +:10A3A00029F807B0F0BD0000A07E0100FFB5101C29 +:10A3B0001A1C0C1C191C6023FF3213430C4A83B077 +:10A3C0003C00406500000CAE526860CE93700023E4 +:10A3D000D37093634027BB5293611384032202928C +:10A3E0000191291C321C0090201C039B00F005F8F1 +:10A3F00007B0F0BD0000A07E0100F8B5051C1148B3 +:10A400001C1C3C007C650000089B079F4068DE0028 +:10A4100081650266002181800D488159201CF9F771 +:10A4200022FF0B4830184168281CF9F71CFF074928 +:10A4300006984968002C88620F8600D12C1C0548BC +:10A440004C6245653C00B86500000121016501646E +:10A45000F8BDA07E01009052010000300700FFB55A +:10A4600083B00DAE60CE0C9F081C111CD219FF32B8 +:10A47000402414430B4A526894700024D4709363B0 +:10A4800040239F5294613C00F46500001484022232 +:10A490000292321C00900191231C291C0398FFF7A3 +:10A4A000B5FF07B0F0BD0000A07E01004C210D4AB1 +:10A4B000414310B58C180C490978884207D105F042 +:10A4C000C7FD0A48018801223C00306600001203E3 +:10A4D00091430180201C30300C23C156407B8142C7 +:10A4E00002DD208D0CF0E5FB10BD58E301003C7C43 +:10A4F000010032800700011C603180B5CA798B7978 +:10A500009A4207D9487A0C2307493C006C66000040 +:10A510005843085A0CF0D0FB80BD2030007B012846 +:10A52000FAD1487A05F040FD80BD0000607B010053 +:10A5300010B5041C1C21F9F703FF0348A080E0803C +:10A5400020816081A08110BDFFFF00003C00A86653 +:10A550000000FFB5041C002083B00D1C062C0290E7 +:10A5600038D21F4AFF26C10089188978A14203D139 +:10A57000C0008018467804E0013000060016062866 +:10A58000F1DBFF2E24D00193201C0DF0E8F93C00F4 +:10A59000E4660000002805D02421281C01AB02AA93 +:10A5A000FAF730FE1049F00030390F58310609161D +:10A5B000281C059A019BF9F76EFE061C10D1201C81 +:10A5C0000DF0D0F900280BD0281C6969FAF712FEAB +:10A5D0003C00206700000298686104E0062C01D36B +:10A5E000072600E00826301C07B0F0BD0000CC5A5A +:10A5F000010010B50C1C09F086F8002802D0201CC0 +:10A6000009F0B5F810BDFEB5134D041CAE69002E5F +:10A610001CD03C005C670000104F30377868604306 +:10A62000011C2888F9F7D2FF39686143411801A855 +:10A63000321CF9F737FE0298296A401828620BD4B9 +:10A64000E969884208D9A969401A2862019801304D +:10A6500001E000203C009867000002900190019802 +:10A66000FEBDC8740100F8B5002828D00024144DA0 +:10A6700000E0013461000919491949780029F8D12D +:10A6800063001B1903330722694603F0D4FB002C37 +:10A690000FD0002000993C00D46700000AE042007F +:10A6A0001218AE5C531852195E71567801309E71C3 +:10A6B0009278DA71A042F2DB00980322023003495B +:10A6C000F9F77EFEF8BD0000EB620100E8620100D0 +:10A6D000B0B5051C081CFAF73C00106800009DFF8F +:10A6E000041C281CFAF7D9FE211CFAF7FCFD201CDB +:10A6F000B0BDF3B544480C1C007881B0012872D17C +:10A70000FAF782F8414DE86A41490860E86B486011 +:10A710004048FAF7A6F9E86A00283C004C680000B7 +:10A72000FCDA221C0F2001990AF0A4F8384D022708 +:10A730002F63384A64260020AA21083213180130FA +:10A740000004000C64281974F8D3168100205060AE +:10A75000101C103010600025171CD2603C00886867 +:10A76000000008E0281CF9F7A2FF413178190135F3 +:10A770002D042D0C0174B542F4D3264D6F630120D6 +:10A780002863244DE86A0028FBDA0B223B1C244E88 +:10A7900003E00132642A00D10022101C0C213C008D +:10A7A000C46800000139755C1F183F7CBD42F3D1BD +:10A7B000013800D563200029F4D1184E501CF16BEC +:10A7C0001A4A101C0138FDD1F06B884201D0011CDF +:10A7D000F7E702273763164D9021281CF9F7CEFDC5 +:10A7E0003C0000690000281C28302860281C10301C +:10A7F0002F81E860281C20302861042100E00CE053 +:10A800002983E861ED62756301203063221C892091 +:10A8100001990AF038F800202863FEBD00000857AF +:10A8200001003C003C69000000300700108E010070 +:10A8300074FF010009570100204E0000E4FE0100F2 +:10A8400080B513281ED0F02816D109F0B5F90028DC +:10A8500013D10DF0BFFA11F00DFC00220421C42029 +:10A860000CF01CFF3C0078690000094800210078CA +:10A8700005F03FFD05F093F807490120086080BD11 +:10A88000011C0120FAF787FC80BD00F032F880BD82 +:10A8900000006A5701003CD90100B0B50CF0FFF987 +:10A8A0000B49022448603C00B46900000A48046176 +:10A8B0000120772109030861084D6868800702D4E8 +:10A8C00068682043686009F0C7F96868A043686059 +:10A8D0000020B0BDE060010000300700000107006B +:10A8E00080B50123032200213C00F0690000022012 +:10A8F0003CF0F1FA002801D0FAF781FC80BD1CB5CC +:10A90000FCF7F5FAFAF719FE01F003F90024211C0F +:10A91000684601F0E2FB00AB1878012803D002285A +:10A9200001D0032801D10CF0B2FC3C002C6A0000DD +:10A93000013424062416062CECDBFAF709F9FAF7A1 +:10A94000E7FCFAF733FAFAF76DFAFBF7DFFF05F0E9 +:10A950004DFB06F081FC0BF07DF907F029FC114856 +:10A960001021016009010160C90201603C00686AB0 +:10A97000000089000160202101600421016008219C +:10A98000016040210160802101608900016049006F +:10A9900001604900016049000160C9030160890B41 +:10A9A0000160F9F741FF1CBD0000001007003C00EA +:10A9B000A46A000080B53BF04FF83BF07DF9FAF750 +:10A9C0004BF980BDF8B5002500240022002871D085 +:10A9D000434FB9680B1ABB60F868391C0130F86046 +:10A9E000896A002B1EDC0224002906DAFB699842E2 +:10A9F0003C00E06A000006DD3B69984209DD07E0A3 +:10AA0000BB69984201DC012403E07B69984200DDC8 +:10AA10000324786A002808D000207862032C01D132 +:10AA2000022402E0022C00D101242E48012C0079DE +:10AA300018D13C001C6B0000BB78994215DA3B78BA +:10AA40007B7039700131B96201D50131B962B96ADF +:10AA50000125994203D1042804D2013000E00020EE +:10AA600038710122002933DA27E0032C35D1002682 +:10AA7000002807D03C00586B00001E498140386A0E +:10AA800008180CF05CF800282CD01B480078400710 +:10AA900005D5F8683969884201DB0323FE56B86A98 +:10AAA000B04212DD01217962397801257970387060 +:10AAB0000138B86288423C00946B000001D000214C +:10AAC000397100280CDA0720387100E012E007E045 +:10AAD0003879002809D0FF30387106E0002A02D00A +:10AAE0000CF0F8F83862002C04D0FEF797FD291C12 +:10AAF00008F0FCFBF8BD00003C00D06B0000AC7E11 +:10AB0000010050C300001D75010080B510680028C9 +:10AB100002D000F00AF880BD0348C069806808F0E0 +:10AB2000B2F980BD0000846A010010B5041CC06841 +:10AB3000C068002801D1FAF77AFB3C000C6C0000D9 +:10AB4000E068E169C068231C014AFFF7D7FB10BD2C +:10AB5000DD6B0000B0B5051C0C210020FAF7D6FC17 +:10AB6000041C006800214160016029880181698816 +:10AB70004181291CFF312131201C03F03C00486C2D +:10AB8000000077F9291CFF314631201C03F071F9D0 +:10AB9000291CFF315031201C03F06BF9291CFF31B7 +:10ABA0004331201C03F065F9291CFF316331201C5F +:10ABB00003F05FF904480068002802D0201C3C0024 +:10ABC000846C0000FFF78EFD201CB0BDE462010024 +:10ABD000F8B5051C0C1C04D105211820FAF702FB5E +:10ABE0004DE0291C12310622601CF9F725FC221CBD +:10ABF00030320026002100201670344B1B5C2F8A57 +:10AC00003C00C06C0000DF40FF0707D51778013318 +:10AC100001371770671830377B70013101300E280B +:10AC2000EEDBA87B6072107800282BD02A481E210A +:10AC3000095C271C1037217201686181C189217765 +:10AC400081893C00FC6C00007973C18AA181018B71 +:10AC5000E181428A211C60314A80828A8A801F49B0 +:10AC60002C31097A002909D002290AD10122626215 +:10AC70006272428BA281808BE08103E001216662D7 +:10AC800000E000213C00386D0000E87B084001D165 +:10AC90000020F8BDA868431C09D0221C1232009283 +:10ACA000931D0232211C01F09CFAA06200E0A66212 +:10ACB000687B291C1D3120740B4820222062201C37 +:10ACC0004230BE73F9F73C00746D0000C1FB4034A4 +:10ACD0002670687E0449607068682C3148600120E5 +:10ACE000DAE7000090580100C86E010091020100EF +:10ACF00070B5161C0D1C041C002806D00C20FAF799 +:10AD000047FD30C0083806723C00B06D000070BDD1 +:10AD1000002070BD0000011C054880B5006801D00E +:10AD2000012100E00021FCF7A0FC80BD00000C79AF +:10AD3000010070B50E1C041C002801D1FAF78FFA2F +:10AD4000064D2868002801D0FAF73C00EC6D0000A1 +:10AD500089FA04482E60C4600121017070BD0000B2 +:10AD6000A87E01003000070010B5074C20680028BD +:10AD700001D1FAF777FA054800692168F9F7DFFA97 +:10AD80000020206010BD0000A87E01003C00286E5D +:10AD900000003000070001200549C00680B50860AA +:10ADA0000022032154200CF0B8FC80BD00000010EC +:10ADB000070080B500220421C4200CF0AEFC80BD49 +:10ADC0000000044880B500880249FFF7B8FF3C0046 +:10ADD000646E000080BD0000754B0000C874010067 +:10ADE000F8B5061C31480025C0680C1C002830D07E +:10ADF0002E482F4F0430007838762C4804304078A5 +:10AE00003881002A0BD0F9F7A5FA1F20B876201C4C +:10AE10003C00A06E0000F9F7F6F925480430807870 +:10AE2000B87643E02548224984424D6902D26C43FA +:10AE3000E40B0FE01F48211C806A0090F9F723FC07 +:10AE40000099021C4A43A11A1A4A6943526AC90B63 +:10AE500050433C00DC6E00004418022C01D8002056 +:10AE6000F8BDF9F77DFA1F20B876201CF9F7AEF986 +:10AE7000041C114804308078B8760F4F7D6AAC42CC +:10AE800004D2201CFFF722FC051C12E0211C281C08 +:10AE9000F9F7FCFB3C00186F0000061C6843201A01 +:10AEA000FFF717FC051C002404E0786AFFF711FC8B +:10AEB00045190134B442F8D3281CD4E70000C87403 +:10AEC000010030000700C0C62D00011C7D2080B5A8 +:10AED000C000F9F772FB3C00546F00000249886122 +:10AEE0004008C86180BD0000C874010010B5064C60 +:10AEF000211C00200BF042FA211C00200BF00AFA62 +:10AF000000F068FE10BD0000856F000030B50F4DE9 +:10AF10002A78042A19D8002A3C00906F000017D024 +:10AF2000002107E04B005B185C190123E4568442C2 +:10AF300002DA01318A42F5DC8A4200D10139480047 +:10AF4000401840198178024A343A1170C078507024 +:10AF500030BD0075010030B5111C3C00CC6F000005 +:10AF6000383185B09162082111860023141C011C20 +:10AF70005363C068154D0BE00268AA4206D1C2684F +:10AF8000CA60C3600360FAF7D1FA03E0011CC0682D +:10AF90000028F1D1221C4032082120683C000870B2 +:10AFA0000000FAF764FB0B49201C4830029004941F +:10AFB0000391E069828801686E2001920091221C51 +:10AFC0005632035D211C28312068FFF758FA05B07E +:10AFD00030BDA07E0100D57000001CB507493C00C3 +:10AFE00044700000021C01900091C069131C848809 +:10AFF000016810684833221CFFF708F91CBD0000E7 +:10B00000C96F000010B5141C184803F089F8A0425D +:10B0100001D0FAF745F90422201C4030A16AF9F763 +:10B020003C0080700000BDF9002802D101202062A0 +:10B0300005E0002020628420005D002803D1201C50 +:10B0400009F023FB05E02068FAF779FA201CFAF7EB +:10B05000A4FBE0698079062806D1206A0649002809 +:10B0600003D03C00BC70000008690130086110BDCD +:10B0700048690130486110BDA06A010028610100E3 +:10B080001CB5141C154803F051F8A04201D0FAF782 +:10B090000DF9201C4F300279417900AB12021143A7 +:10B0A000C27812043C00F870000011438278120646 +:10B0B0001143009101784078090208439880201CD0 +:10B0C000694606F03CF9002803D1201C09F0E3FA98 +:10B0D0001CBD2068FAF739FA201CFAF764FBF7E781 +:10B0E0000000A06A01003C0034710000BCB51F4D97 +:10B0F000141C281CDC3003F01FF8A04201D0FAF722 +:10B10000DBF8A06C00AB027881781202114302795F +:10B110001204114342791206114300918179C079DA +:10B12000000208439880201C3C00707100006946B2 +:10B1300006F00BF9002817D001280ED1ED6C002D78 +:10B140000BD08020025DE06C0121002800D100219D +:10B1500060686B460A30F9F723F92068FAF7FBF9C3 +:10B16000201CFAF726FBBCBD201C3C00AC71000083 +:10B1700000F08EFEFAE70000C4690100BCB5041CB3 +:10B18000406A0025002803D06068008B05072D0F5A +:10B19000221C403208212068FAF77EFAA168019546 +:10B1A0000091211C221C6032206850313C00E87163 +:10B1B00000000D1CE36809F0E2FFE069806B0028E5 +:10B1C00003D1FEF7E8FA002801D0182000E0102093 +:10B1D000064901940091E169082309680A18211CB5 +:10B1E0002831281CFFF787F9BCBD357100003C00F1 +:10B1F0002472000010B5101C3830906204201086B4 +:10B20000002050631068141C40320421FAF74AFAF7 +:10B21000231C211C2831024A2068FFF7BDF810BD0D +:10B22000657000000EB5C369021C9888054902923A +:10B230003C0060720000019100901B6810689169E9 +:10B240000322FFF7AEF90EBD0000257200000EB517 +:10B25000021C0649102000900292131C01911068F4 +:10B26000002270330021FFF79CF90EBD000025720B +:10B2700000003C009C72000010B5031C002100205F +:10B28000084C00E00131CA00A2589A4202D00B29B2 +:10B29000F8D310BD0B29FCD2C90009190020087190 +:10B2A000012010BD385801008CB500AB86211980F3 +:10B2B000011C04483C00D872000006F0EEFE01902C +:10B2C000684606F0FAF88CBD0000707C010010B5ED +:10B2D000041C0D480D4994B00480062218310C302E +:10B2E000F9F7FBF801A807F0A2F80C2009A94872A9 +:10B2F00000AB1C8002213C0014730000684603F080 +:10B30000DBFF049001A806F0D1F814B010BD0000D6 +:10B31000587C010080B504F045FE05F053FA80BD6D +:10B3200010B5194CE068002806D0611C0878002888 +:10B3300003D14878FF3008703C005073000010BD06 +:10B34000FF300006000E0870A1680029F7D0002821 +:10B35000F5D10E4854308178002903D1C178FF31EE +:10B36000817010BDFF310906090E8170F9D1A16904 +:10B370000029F6D0808803F0D0FB3C008C730000DD +:10B38000044A011C5C320C3205CA801AA269F9F722 +:10B390001FF810BD447D0100F0B5041C4068002575 +:10B3A0000179002285B0C907CB1769490133896A41 +:10B3B000102905D36649C039086B01303C00C873B9 +:10B3C000000008638EE021680E68F678B706FF0F6C +:10B3D000B609002B049706D063691F1C1B6A5037FF +:10B3E0009F4200D10125002D02D063691B6A04E051 +:10B3F0003C23594F7343DB190433E3619F883C00BE +:10B4000004740000002F70D09B79022B6ED0042BA7 +:10B4100017D0062B69D10868A06108890438088113 +:10B4200020680168043101604E4900295DD0049F05 +:10B43000BA425AD14948221C1C3002F065FE05B0C0 +:10B440003C0040740000F0BD0968251CCA794035F5 +:10B45000261CEA738B79221C503213704B796036AC +:10B4600053700B7993704B78D37009781171002168 +:10B4700029721621B173616A002906D0018B090770 +:10B48000090F3C007C7400002972B1811821B1734E +:10B49000011C0A31201C06224930F9F733F8606894 +:10B4A00014220188E982011D201C5830F9F72AF87E +:10B4B000E88A30490840012189030843E8827089FD +:10B4C0000F2108403C00B874000070812068018999 +:10B4D00008390181206801680831016008210020D5 +:10B4E000FAF783F8051C026820680821FAF7FBF8D0 +:10B4F0002068FAF774F82149C5602FE030E0FFE7D3 +:10B50000216860680A683C00F47400008023A2642B +:10B510001E55E564557913792D025B1995792D0433 +:10B520005B19D5792D065B19957812781202AA1845 +:10B5300015040A892D0C083A0A8121680A68083224 +:10B540000A60E169021C0A323C003075000001A863 +:10B5500009680BF03EF9E0692B1C0168201C703073 +:10B5600001AA0BF086F9094901226DE72068FAF774 +:10B5700022F8201CFAF74DF970E7846A010068612F +:10B580000100557200008FC7FFFF3C006C75000082 +:10B59000417000007972000080B502218220F9F725 +:10B5A00093FE80BD704700007047000070470000A8 +:10B5B00070470000704700007047000070470000AF +:10B5C00080B5C068F9F7FAFF012080BD3C00A8757E +:10B5D000000080B50021FF20F9F779FE80BD70479B +:10B5E000000070470000012070477047000070475E +:10B5F0000000704700007047000080B506219920C8 +:10B60000F9F765FE80BDB0B500250129124C3C005C +:10B61000E47500000FD10AF00FFC00281DD06178FE +:10B620003C235943091904310162611C416284625F +:10B63000041C503406E000290FD13C2050432570F3 +:10B6400004190434002C08D02068002802D02021DE +:10B650003C0020760000F8F718FFA5800720A071B5 +:10B66000B0BD6861010070B5041C002101F041FC0F +:10B670006068002801D0216801602068002801D09E +:10B6800061684160124E7068A04201D160687060CC +:10B69000E0683C005C76000000280BD0002506E046 +:10B6A000E068E900411814200BF0E2FF0135308812 +:10B6B0008542F5DB0621201C4430F8F7E9FE206BBB +:10B6C000002801D0F9F786FFE069002801D0FAF7D9 +:10B6D000AFF870BD3C009876000058750100F0B5D9 +:10B6E0001D4F059D3F6801261C1C331C002F00D0F8 +:10B6F0002B1C1D062D0E002906D011780E23164F87 +:10B700000918097A6B4310E02178002913D0FF3122 +:10B710000DE0012901D93C00D476000001311170FF +:10B7200011780E230F4F490811700918097A6B43DD +:10B73000DB19595C21702178002902D11178002988 +:10B74000EAD10948C068002805D02178301C0029BA +:10B7500000D10020F0BD01203C0010770000F0BDBA +:10B76000000018670100246701005C670100AC7CE1 +:10B77000010084460020F0B5002909D011781A4E46 +:10B78000B170194EB178717031700121316127E0CB +:10B79000164E0123F15663465F683C004C7700006B +:10B7A0000023F6560125CC0FB74200D90025002C06 +:10B7B00001D0002DE8D10E4F3B69002B03D0002DA6 +:10B7C00001D1167002E01C4301D111700120012447 +:10B7D000002B00D000243C61002C02D03C00887774 +:10B7E0000000711C397001E0FF3179700028D5D05C +:10B7F0000120F0BD0000AC7C010090B50A4C002097 +:10B8000093B0206103906846002108F084FD207AFF +:10B81000022801D1E06B00E0206CE06101203C00D7 +:10B82000C477000008F08AFD13B090BDF46E0100EB +:10B83000F7B5051C88880C1C82B01F4F002800D16A +:10B8400000270498002801D1F9F78AFD1B483B1C0A +:10B850000068211C0268281C0092049AFEF73CF83C +:10B860003C0000780000061C22D00321049802F05E +:10B87000B8FF00281BD08078012103F0E4FFA088E6 +:10B88000A18E484300040F49000C088003F081F9A1 +:10B890000122002D00D10022011C0E200BF0C9FE58 +:10B8A000002F3C003C78000008D10021281C02F049 +:10B8B000BDFC03E00026281C00F00AF8301C05B08F +:10B8C000F0BD0000C1A10000E4650100A87C0100FA +:10B8D00010B5041CFEF738F80121002C00D100211E +:10B8E0000E200BF03C0078780000DDFE10BDF8B5AE +:10B8F000071C0BF094FAFDF7BCFE002602281E4D33 +:10B9000001D02E70F8BDFDF73EF8041CF9F759FC84 +:10B91000002814D0FDF777F8002810D002F0F9FBCA +:10B92000002801D000243C00B478000000E0154C51 +:10B93000331C211C072216200BF066FF687880213B +:10B940000843687002F00AFC0028DED128788007DE +:10B95000DBD4FDF723F9002805D12878C00702D5EC +:10B96000FDF742F8D1E702F03C00F0780000CDFB93 +:10B970000028CDD02878022108432870211C381CCB +:10B98000FDF7C1F8C4E7606C01007102000010B55A +:10B99000124C01202070FEF7F0F90121A068FBF79E +:10B9A000F4FEA06803F087FF0D483C002C790000EE +:10B9B000A16807F023FDFBF755FFE06800280DD0D4 +:10B9C000094906200AF024FD084905200AF020FD57 +:10B9D000FBF76EFF002801D005F0F8FC10BD000059 +:10B9E0007869010034630100E13500003C006879AA +:10B9F0000000B1350000F0B5244D234C687C203C9C +:10BA00009BB0002808D0022803D820890138208163 +:10BA100037E000276F7434E01C4E68221436311C66 +:10BA20000C3101A8F8F709FE1848338901213C00C0 +:10BA3000A479000044300A1C002B007B00D1021CBA +:10BA40001206120E0DAF3A709446AA7B931930334A +:10BA50005B7B7B70EA7301321206120E0027824272 +:10BA6000AA7301D3AF7304E06246012A01D1776063 +:10BA70003C00E079000000E071600648074A803829 +:10BA800081674267682201A9F8F7DDFD278108F088 +:10BA900012FD1BB0F0BD84660100E92E0000F1B577 +:10BAA00086B006990020886106988468808D656854 +:10BAB00001283C001C7A00004CD9354949680591A1 +:10BAC000002947D00022002100230390281C96461D +:10BAD000944606680496F2788026B2433F2A2ED810 +:10BAE000D706FF0E0126BE40371C049E5209B678C9 +:10BAF0007600B2183C00587A0000264E92001C36A0 +:10BB0000B2583A401ED003E002900289C068511832 +:10BB10000028F9D10598814214D870460130864634 +:10BB2000002B04D06046D86001986246D06003982C +:10BB30000138039006D03C00947A0000231C24684E +:10BB40006068029A01909446C9E77046012807D9B7 +:10BB50002A1C00213F2001F051FF051C0698856139 +:10BB6000281C01F0B3FF0E480068002807D02868A1 +:10BB7000018840790231091A3C00D07A0000281C63 +:10BB800001F0E5FCA2680698C06806990B69291CBB +:10BB9000F8F77CFC034908690130086107B0F0BD83 +:10BBA0000000FC5A0100CC5C010010B5094A80007D +:10BBB0001258D006C00E0130074B3C000C7B000031 +:10BBC0001C68002CFCDB5A602022121A914019607C +:10BBD00019680029FCDB10BDE86001003020070077 +:10BBE000B0B5124C00252570A168114807F032FC51 +:10BBF0006561FBF7A3FEE06800280DD03C00487BA0 +:10BC00000000FBF7A4FE012107200BF070FD0A499C +:10BC100006200AF04CFC094905200AF048FCA068FF +:10BC200003F067FE0021A068FBF7CDFD05F0ABFB3C +:10BC3000B0BD7869010034630100E13500003C00CB +:10BC4000847B0000B135000010B50F4C207C00282B +:10BC500019D16069002816D1E068002806D00A488A +:10BC60001C38C068002801D005F0CEFB0121072058 +:10BC70000BF040FDA06803F03FFE0448A16807F008 +:10BC80003C00C07B0000DBFB0120207010BD786908 +:10BC900001003463010070B50E4C0122A368E56811 +:10BCA000268A5D1BB54201D1002206E025680133DA +:10BCB0002E68A3602660043503C5002A04D1012143 +:10BCC0009D203C00FC7B0000F9F752FB70BD03494E +:10BCD0000220086070BD000044E30100402007001E +:10BCE00080B502F0B9F880BD80B502212D20F9F7AA +:10BCF0003FFB002080BD000080B502212A20F9F71B +:10BD000037FB00203C00387C000080BD000080B57F +:10BD100001212B20F9F72FFB022080BD00000149F3 +:10BD20000120086170477C780100F8B5061C0C23DF +:10BD30000F1C1749584345186C68301C0BF03FFE28 +:10BD4000002F09D1301C3C00747C000003F0EEFE93 +:10BD5000412007551148211CFFF7A6FFF8BD4120DF +:10BD60000755A06B002803D0201C00F0DFF9F5E791 +:10BD7000201C00F0DBF9AC68002C02D00020A86089 +:10BD8000EDE7301C05F034F93C00B07C0000041CE9 +:10BD9000E8D108210C20F9F7F4FAE3E70000607B12 +:10BDA000010055800000074A80B55070516012783C +:10BDB000064B80005201D218101840380268081C47 +:10BDC000F8F77BFB80BD786901003C00EC7C00004B +:10BDD000FC420100B0B50A49041CC870084DE435A6 +:10BDE000A87A0871082C01D3F9F7FCFAA87A05495A +:10BDF00040014018A1004058F8F760FBB0BD0000BA +:10BE0000606C01008043010080B500283C00287D63 +:10BE1000000001D009F01DF980BDB0B5051C0C1C57 +:10BE200000200860686809F036FB6C60B0BD10B592 +:10BE3000041C09F034FB2168002900D1646010BDA6 +:10BE400000000021016040607047F8B546683C0082 +:10BE5000647D0000041C406A351C0A35002804D0AB +:10BE6000201CF9F789FD071C00E00427291C6069E4 +:10BE700000F0F6FC79000F18BA88F18A051C8A4296 +:10BE800005D13088000502D504F0BEFB3CE02868EF +:10BE90003C00A07D000000280FD001328A4204D16E +:10BEA000F9F70FFC2168C1600BE0F9F7F0FBF08AAD +:10BEB000000704D00021296029E0080727D1206865 +:10BEC0002860F08AB8801348016801310160318828 +:10BED00049053C00DC7D000018D429682160002160 +:10BEE0002960E16900290DD0897902290AD1082148 +:10BEF0002186211C3831A162221CDC30084902F065 +:10BF000081F9F8BD201C00F05FF8FAE7201CF9F772 +:10BF1000EFFCF6E73C00187E00002068F9F7BDFB57 +:10BF2000F7E7C4690100B9710000F8B50F1C097882 +:10BF30000124C90721D502F08CFF002801D000247C +:10BF40001BE00E4E756E002D17D0346E0622311C8C +:10BF5000381CF8F7D4FA3C00547E0000002805D1C4 +:10BF60000120002C00D00020041C03E0013D063617 +:10BF7000002DEED1002C03D1024EB06E0130B06620 +:10BF8000201CF8BD1079010030B5051C00200649C1 +:10BF900000221C23CC56AC423C00907E000001D114 +:10BFA000081C30BD01324831012AF5D330BDCC6DBB +:10BFB000010010B5084C00221C235343E358834270 +:10BFC00004D11C20504300190A6010BD01320E2A12 +:10BFD000F2D3002010BDDC7101003C00CC7E0000DB +:10BFE000F0B5416895B0071C90371391041CF878A0 +:10BFF000251C8035C6072879F60F4A4902284DD1FD +:10C000000A6D002A4AD04868013048600AF058FF9B +:10C0100044490861486113990979C9073C00087FC0 +:10C02000000001D441498861206806220690A16879 +:10C0300003A8F8F7EEFA062204A80230E168F8F740 +:10C04000E8FA07A806222169F8F7E3FAB87808ABFE +:10C05000002198700C96636A201CA0300A1C3C00DA +:10C06000447F0000002B02D0028A5207520F08AB17 +:10C07000DA7000AB998413990988C90BD984696B6C +:10C0800010AB1091A96B1191808B29491881096D12 +:10C0900003A8F8F732FA2979686B0BF04DFD29797E +:10C0A0003C00807F0000A86B0BF067FD3DE000289E +:10C0B00038D1486D1490002834D0206806220390AF +:10C0C000A1686846F8F7ABFA062268468018E1686E +:10C0D000F8F7A5FA05A806222169F8F7A0FA0021C9 +:10C0E00004913C00BC7F0000B97808A810AB017235 +:10C0F0000896E9680B9169794172686B0E90A86B9C +:10C100001090288DD880688D1881E1690CA80029CD +:10C1100004D089790170206A0D9001E00721017037 +:10C12000684614993C00F87F0000F8F7EFF902E048 +:10C130002068F9F7CAFA201CF9F7F5FB15B0F0BD35 +:10C140000000C4690100B0B5041CC0680622018962 +:10C150000C3101810568211C0C3D0560A818F8F719 +:10C1600064FA0622A1183C0034800000281CF8F76D +:10C170005FFAA08F0009E062206303480169201C78 +:10C18000F8F7C7F9B0BD00007C790100F8B5061CCE +:10C190006036051C707A0C23254958434418A86B57 +:10C1A0000027002806D0A0783C00708000000128FD +:10C1B00003D1A770707A0AF0B6FD2A1C0C218020EA +:10C1C0000BF095FBA86B002833D0A07802280BD089 +:10C1D000042822D1A7702F1C4037787802280CD170 +:10C1E000707A0AF0A0FD18E003203C00AC8000004B +:10C1F000A0701249002014390969F8F790F90FE08E +:10C200002C1C07E078784121221C08550C21802045 +:10C210000BF070FB6034607A04F020FF041CF1D155 +:10C22000707A4035A98B0002090909043C00E880B6 +:10C2300000000843812101430C200BF0A0FAF8BD57 +:10C240000000607B0100F8B51C49051C886A0130BC +:10C250008862281C0BF07DFD041C11D02B1C2033A0 +:10C260001E1C5A79201CB4301979144FFDF73C007C +:10C270002481000089F8AA7A201CB830B179FDF732 +:10C28000B9F8002F04D101212868FAF76DFAF8BD3A +:10C290006068BC21C08A085328680021FAF764FA54 +:10C2A000002809D00649C86A0130C862002CEED0C7 +:10C2B0003C0060810000201CF9F747FBEAE7201CE6 +:10C2C000F8F73CF9E6E7C4690100A1FF0000F8B502 +:10C2D000164C051F0022211CA03103E02868A04253 +:10C2E00009D02034A142F9D1002A04D102218E20A4 +:10C2F000F9F73C009C81000083F8F8BD0D4FBE7932 +:10C30000606901306061F8F797FDA84207D1A08805 +:10C310000430F8F797FDE0690130E06105E020683E +:10C3200028602560A0690130A061BE71E5E70000CA +:10C33000D05C01003C00D8810000201007000029DB +:10C3400001DB062901DB02207047064BC9005A5C5D +:10C35000C91802704A7842708A78827049684160D0 +:10C36000002070470000CC5A0100B0B50D1C041C21 +:10C37000052801D3F9F73C001482000075F8104835 +:10C380004068002800D00324102D00D30F2506207C +:10C390000B496043123140184178807849190906E9 +:10C3A000090E884200D2011C01208840054901384D +:10C3B000096808400004000C3C005082000002F0B4 +:10C3C00044FEB0BD0000D47A010008200700B0B5DB +:10C3D000041C0D1C09F0CFFD002803D1201C09F01E +:10C3E00082FD0561B0BD80B50AF097FD034A0C32AD +:10C3F00006CA8918081A80BD00003C008C82000023 +:10C40000A07D010070B50B4C049E64680DE065686A +:10C41000854209D1207A0870E068106020691860B0 +:10C42000207D3080012070BD2468002CEFD10020D9 +:10C4300070BD0000A46E010010B5041C3C00C88251 +:10C4400000002030817B20690430FDF764F9011C75 +:10C450006220025B636A4034207802F0CEFD10BD9A +:10C4600000000B4910B508888A690A2350435843D5 +:10C470000ED0084A53899488D2881B1952043C0074 +:10C4800004830000520C9A18C96806324A430A21F4 +:10C490005143F8F7FDF910BDC874010030000700E2 +:10C4A00010B5431C01D1104810BD0F4A0E4B943AF1 +:10C4B0001268443B1B7A10E0546884420CD1002976 +:10C4C0003C00408300000FD1022B03D1D47B022C0F +:10C4D0000AD204E0002B05D1D47BE40704D412680F +:10C4E000002AECD1002010BD101C10BD0000386FD8 +:10C4F0000100011C0120012900D00020704700B577 +:10C50000021C3C007C830000FDF7CEF8002808D018 +:10C51000101CFFF7F1FF1823034958434018006926 +:10C5200000BD002000BD00009467010080B5002818 +:10C5300000D10848074900685031097A002902D023 +:10C54000022904D13C00B883000000E0012100F082 +:10C5500006F880BD002080BD0000A46E0100124AD4 +:10C56000124B127A2C3B002A03D15A68002A18D1A8 +:10C5700004E0022A02D19A68002A12D100207047F2 +:10C58000C27B8A4201D03C00F4830000032A0AD116 +:10C59000827E012A07D1027F01321206120E027733 +:10C5A000C37E9A42EED200680028ECD170470000AA +:10C5B000F46E0100F7B58446002001270024002511 +:10C5C00088B007E06246525D3C0030840000002ADB +:10C5D00005D0AB006E46F25001358D42F5D3002DEB +:10C5E00000D00120002828D00027164C6E4622E0FB +:10C5F000201C00F030F8012801D0072806D10021C6 +:10C60000201C00F034F8316888423C006C84000043 +:10C6100001D2022714E02068C9000C18083C201C35 +:10C6200000F01CF8072807D10120012D00D00020C0 +:10C630002468002800D10834013D0436002DDAD1E9 +:10C640000A9804600BB0381CF0BD00003C00A884C0 +:10C650000000205201000068002901D08002800AF9 +:10C66000704710B540688000440F082C03D30221A6 +:10C670008720F8F7ECFE201C10BD002902D00068CE +:10C68000800D704740688005800D704700003C00B9 +:10C69000E484000010B540684001440F052C03D32A +:10C6A00005218720F8F7D6FE201C10BDF8B5051C23 +:10C6B000880A00901C488E05C069B60D171C1C1C0A +:10C6C000002805D1184881698D421DD0856111E08F +:10C6D0003C0020850000FDF7E8F8154909780E298F +:10C6E00007D1002805D0114950310623C956F9F762 +:10C6F00006FA0E490020C8618D61291C201CF8F73C +:10C70000E2F87943201CF8F7DEF808484161201C64 +:10C7100000993C005C850000F8F7D8F805484069AE +:10C720000A18A24201D2401801E04018001B800202 +:10C730008019F8BDAC7C010011670100F8B50F1C31 +:10C74000061C141C1D1C07F0A1FC0E2809D1201C7E +:10C7500002F0FCFB3C0098850000002804D008484B +:10C76000007802F0E4FB041C0121002EAC7200D022 +:10C77000391C201C02F007FC2860002028726C7213 +:10C78000F8BD90570100031C0A4810B50024021C94 +:10C79000A03203E081883C00D4850000994209D290 +:10C7A00020308242F9D1002C04D102218E20F8F7EA +:10C7B0005DFE002010BD0000D05C0100FFB5061C2E +:10C7C000002081B010601F1C0125141C301CFFF7D5 +:10C7D0006DFF052812D202A33C00108600001B5CEE +:10C7E0005B009F440000030303030800391C301C56 +:10C7F000FFF755FF03E00298F8F7EBF801302060EF +:10C8000004E005218720F8F734FE00252068802801 +:10C8100004D906218720F8F72CFE3C004C86000046 +:10C820000025281C05B0F0BD70B5174C606C0028C1 +:10C8300001D001201DE0164E144D3188A06C002857 +:10C8400008D02878814205D9F8F74CF80138FAF772 +:10C8500051FE0EE0E06C00280AD000203C008886E3 +:10C860000000FAF74AFE29783288914204D99042B2 +:10C8700002D9101C00E0081CFAF7DFFDE16B441A36 +:10C880000AF081FB201A00D5002070BD0000447D15 +:10C890000100F8600100FC600100FFB5274E3C007C +:10C8A000C4860000041CB0790F1C151C81B00090D8 +:10C8B0000AF06CFBC11923480768002F05D10A2133 +:10C8C0008020F8F7DFFD05B0F0BD1E4840688446C3 +:10C8D000002801D100220EE082680368AB4207D134 +:10C8E0003C00008700000379A34204D10B21802083 +:10C8F000F8F7CBFD23E0C0680028F1D1134BF868AE +:10C9000018603D603C71B96004988D1A38616046CA +:10C91000002305E08468A41AAC4203DA031CC06853 +:10C9200000283C003C870000F7D1F860002B08D1BC +:10C9300007483B1C47600848064A00880AF08AFB03 +:10C9400000E0DF600098B071C3E70000201007002E +:10C950007C5D0100213801002C740100F3B583B027 +:10C96000041C09D03C0078870000201C049909F0C1 +:10C970008EFB002803D0201C303005B0F0BD0AF03B +:10C980000EFB1E4A0026049F019600900292029C14 +:10C990000025391C201C143002F0C5FA002801D0F3 +:10C9A000261C03E001353C00B48700001C34042D34 +:10C9B000F2D3002E22D10198134F013001900228AA +:10C9C000E8D30121C906029A00201369009CE31AEA +:10C9D0008B4201DD191C161C01301C320428F4D3D3 +:10C9E0003068002801D0F8F73C00F0870000D3FE43 +:10C9F000301CFDF74AFF301C143006220499F7F76B +:10CA00007AFE009C301C3461BDE7306A010034427C +:10CA10000100094910B54C6903E0E168814203D087 +:10CA20002468002CF9D101E0002C3C002C88000087 +:10CA300003D102210220F8F737FD201C10BD0000B1 +:10CA4000FC5A010010B5C30706D5084B5C690C43BE +:10CA50005C611C7E14431C76800706D5044843693C +:10CA600019434161017E1143017610BD3C00688885 +:10CA70000000FC5701001858010070B50D1C041C83 +:10CA8000161C00F008F8A007C0170130321C291C42 +:10CA900000F021F870BD10B5C30706D5084B5C69DE +:10CAA0008C435C611C7E94431C76800706D53C0059 +:10CAB000A4880000044843698B434361017E91438D +:10CAC000017610BDFC570100185801000322111F08 +:10CAD00080B5012000F002F880BD000030B5151CC3 +:10CAE0000C1C002887B002D01C22224901E02249F8 +:10CAF0003C00E08800001C226846F7F764FE0599B8 +:10CB000000AB1A7E8C43201C9543029A291C0240DC +:10CB10000292019A02400192009A02400092039A06 +:10CB200002400392987C08409874587C08405874DE +:10CB3000187C3C001C89000008401874D87C084010 +:10CB4000D87402991048416101AA06CA91438161D3 +:10CB50008168019A114381608168009A91438160E4 +:10CB600000AA06CA11434268114341604168039A12 +:10CB7000914341603C005889000004A80BF001F883 +:10CB800007B030BD0000FC5701001858010010002C +:10CB9000070010B5041C011C012008F0E0F9002C6E +:10CBA00002D003F01CFF10BDFEF7D1FC10BDF0B5A4 +:10CBB0000C1C010E01233C00948900001B06090691 +:10CBC00099429FB028D11749084000211A2800D364 +:10CBD0000221002919D1C500134F10A8EE19B288FF +:10CBE0002168F7F79DFD201CF8F7EAFD7A5901A9A5 +:10CBF00010A8F7F707FD00283C00D089000005D0F9 +:10CC0000109801A90190B07900F09DF81FB0F0BD17 +:10CC10002A20F8F75EFC201CF8F7D5FDF6E7032183 +:10CC20002A20F8F756FCF1E700007FFFFF002445BB +:10CC3000010010B50C1C802802D03C000C8A0000BA +:10CC4000812808D103E0201C00F006F910BD201C4B +:10CC5000F8F7BCFD10BD03212C20F8F73DFCF6E7EA +:10CC6000F0B50C1C00218BB00A91010E01231B06AC +:10CC7000090699422AD118490840061C3C00488AF6 +:10CC80000000062E01D3072124E02089F8F7F1FEE9 +:10CC900022892168051CF7F74CFD201CF8F799FD47 +:10CCA000F4000F4E281C0AAA69463359F7F7B4FC62 +:10CCB000002801D0012807D12868694600903C006F +:10CCC000848A0000A01900790A9A00F009F9281C4A +:10CCD000F8F7B0FE0BB0F0BD01212B20F8F702FCF5 +:10CCE000F8E700007FFFFF00284601000A1C010E44 +:10CCF00001231B060906994280B508D05B009942C2 +:10CD00003C00C08A00000BD10006000E111C00F090 +:10CD10000EF980BD05490140101C05F0A2F980BD47 +:10CD200001212D20F8F7E1FB80BD7FFFFF0080B5DA +:10CD3000011C0F2000F013F880BD80B5011C0420F9 +:10CD400000F03C00FC8A00000DF880BD80B5011C9D +:10CD5000172000F007F880BD80B5011C012000F00D +:10CD600001F880BDF8B5041C061C802084430F1C0C +:10CD7000192C01D3F8F7EAFB0848045D211C0020B8 +:10CD8000F8F750FD3C00388B0000051C221C391CB4 +:10CD90000068F7F7DAFC2A1C311C0720F8F711F9B4 +:10CDA000F8BDF4450100F8B50D1C161C041C1F1C31 +:10CDB00008210020F8F739FD142201680E4B724358 +:10CDC000D2180C71127C3C00748B00004A710D600B +:10CDD0000B4A8F7112687F2A03D95205520E8023A5 +:10CDE0001A43CA71074A0023516801315160021C7D +:10CDF00081210020F8F708F9F8BD00007440010017 +:10CE0000FC5A0100806E01003C00B08B0000B0B500 +:10CE1000041C08210020F8F70EFD218BE27D051C83 +:10CE200009055207520F490C006811438180A17D0A +:10CE300014230E4A59438918097CC171E16A0160C3 +:10CE4000E168281CF8F717FC0A483C00EC8B00004E +:10CE50000068002801D0F7F7F1FB07490431886822 +:10CE60000130886000212A1C0020236BF8F7D2F8DB +:10CE70000120B0BD744001007C6E01000148806853 +:10CE800070470000806E010010B5041C3C00288C27 +:10CE9000000092B0016868460822F7F762FC00AB18 +:10CEA00098884007400FD87798884004000D188470 +:10CEB000D888588400980D900594208908382081DE +:10CEC000059801680831016000200A900C903C0030 +:10CED000648C00000021112009F078FB0549064A06 +:10CEE000086801300860022102A801F0CDFC12B0F0 +:10CEF00010BD0000806E0100558B0000021C012057 +:10CF00000006084380B52B210AF08AFD80BD000091 +:10CF10003C00A08C0000F7B5041C061C8020844354 +:10CF2000171C062C01D3F8F726FB0B48055D291CBE +:10CF30000020F8F78CFC041C006801992A1CF7F704 +:10CF400016FC391C201CF8F7A2FB221C311C002304 +:10CF500002203C00DC8C0000F8F768F8FEBD000001 +:10CF6000204601000A1C011C80B500230120F8F7AF +:10CF70005DF880BDFFB59FB01F1C051C0A301E90D8 +:10CF80001CAA1DA90AF000FF002871D0002F09D0AB +:10CF90000A2100203C00188D0000F8F75EFC0668AE +:10CFA000041C301DFAF7AFFA05E004210020F8F761 +:10CFB00054FC0668041C28893649012208807080C8 +:10CFC000E88814A9308019A8FCF7F5FCFCF7FFFBF2 +:10CFD000011CFF3121313C00548D0000201C01F068 +:10CFE000EFF819A9201C01F0EBF814A9201C01F09E +:10CFF000E7F8201C2099FDF74BFD0022022101F0EB +:10D0000033FD061C1C9900208861301CF8F71CFABF +:10D01000002E0BD0307A00283C00908D000002D00A +:10D020004021084330721C980222816911438161BA +:10D0300004E01C9902228869904388611DAA06CAEF +:10D0400001A805F058FB09A8002F02D00222427265 +:10D0500001E000214172049401A83C00CC8D000045 +:10D0600004F07AFB01211C9808F0C8FF002F04D0BF +:10D070001C980122816911438161A8881C9C01F0E0 +:10D080009FFE021C211C00E004E00748408809F0D4 +:10D090001FF804E03A1C00210520F9F73C00088E37 +:10D0A00000009BF8002023B0F0BDFC600100987CDC +:10D0B0000100F8B5041CC0680568A01D01F095FFCB +:10D0C000002845D0211C1431201C6A460AF055FE68 +:10D0D00000283DD0FCF77DFA002839D100983C00AB +:10D0E000448E00004B21095C012934D1042609F04B +:10D0F00019F9688800281BD1A8880321890388436F +:10D1000015490026088001220221206901F0B8FC9F +:10D11000041C14D000988069800710D5F8F79AF99C +:10D120003C00808E0000201CF8F7DDF8002809D1B3 +:10D13000F8F77FF901260098022281699143816105 +:10D14000002101E00098022108F061FF0098806949 +:10D15000A988C207D20F301CF9F745F8F8BDFA606C +:10D1600001003C00BC8E00001CB5046900230022B5 +:10D17000002C13D14B24245C022C03D1022905D0AE +:10D18000012203E0022901D101220123002A05D056 +:10D19000009004200193694609F036FA1CBD000096 +:10D1A000B0B5041C3C00F88E0000F2210F200C4D9D +:10D1B0000AF099FB287808280BD201A31B5C5B00BE +:10D1C0009F440703030808080808002C01D105F054 +:10D1D000BCFBB0BD012CFCD1FF2007F038FAB0BD7C +:10D1E0000000746601003C00348F00008CB5054AD5 +:10D1F00000AB1172009019716946082009F00AFA13 +:10D200008CBD0000AC7C0100F3B5041CC06806278F +:10D2100085B0066809F026FF984948632069032114 +:10D2200001F008FC964D00283C00708F00004DD0A6 +:10D230009549403109798078814247D1012120699F +:10D2400001F0FBFB02902069322101F0F6FB019016 +:10D25000021C8D480299FCF746FF002836D00023B7 +:10D260008A480299019AFCF7E4FE3C00AC8F00006A +:10D270000B282ED1864A51887089414003910B1C9E +:10D2800084490B4025D150800399171C00290BD0ED +:10D290000399480502D5381CFCF740FE039988061F +:10D2A00002D5381CFCF724FE2A2120693C00E88FB7 +:10D2B000000001F0C8FB00280DD08078E9698142A8 +:10D2C00009D0E861381CFCF716FE381CFCF707FE95 +:10D2D000381CFCF726FE0027201C20300490407AE2 +:10D2E000082871D10AF0D1FC0020686100233C00BD +:10D2F000249000002B61A86866490130A86030893D +:10D300005C31888201F07AFD62495C310861226AF1 +:10D3100004981821007A01F033FEE16A4018039066 +:10D320005C48006A00280DD0002F0BD1594801231A +:10D330003C00609000005C3001681B0700223068F0 +:10D3400009F049FF002800D105270021A06B0AF051 +:10D35000CEFC0021206C0AF0E8FC4F4B03CE039A70 +:10D360005C33FCF788FD00204C4E0521B06320693A +:10D3700001F03C009C9000006FFB011C01D1F060AB +:10D380001CE00120F0608878454A01321070C878AE +:10D390005070474A1070306900280AD04A780879DE +:10D3A000053109F0DDFA3169F7F785F9F0680028F1 +:10D3B00004D03B4A3C00D89000000132107800288D +:10D3C00008D10020A861716A002903D0201C143004 +:10D3D000F7F774F9344A5C321069316A411800E099 +:10D3E00020E00A23D0680A2209F0FBFE002807D0BB +:10D3F0002D4A316A5C323C0014910000D068401A1A +:10D400001169401A7060294A5C32D0683062F06954 +:10D41000002804D0FAF700FD0120FAF7A1FCFAF782 +:10D4200081FC2748006803F007F90698002803D11B +:10D430001E4E0023B36016E03C00509100001C4ECD +:10D440000120B060069801684068B06519487165B0 +:10D450005430C088002809D0B169002906D001F0F5 +:10D46000DCFC011CE06AB269F7F72FF9002F15D137 +:10D4700012480169002908D101213C008C9100006B +:10D4800001612A68002A03D000210020F7F720F963 +:10D4900009490023CB622B616B6106F0B5F807B038 +:10D4A000F0BD6B680648002BF9D0021D111C381C1A +:10D4B000F7F70FF9F3E70000447D01003C00C89145 +:10D4C0000000F4680100F467010003080000F86040 +:10D4D0000100C467010008B5F8F72FFD009000AB0C +:10D4E000188800280CD005F050FF00AB5988188828 +:10D4F00005F06DF9FEF797F80320FBF70EF83C00F6 +:10D500000492000008BD0120FFF7B2FB002008F0E4 +:10D510008DFEF7E7F8B54F498C68206A00680578FA +:10D52000FCF768FA002812D02A07920F0121012A7D +:10D5300000D00021002903D02906090F0B2906D1AC +:10D540003C00409200002A21095D08189030007BC1 +:10D55000F9F70DFC414F3C3FB86B796BF7F7C0F81A +:10D56000A06C0026C660606B800804D0B8690130EA +:10D57000B86106F0DCF9394D28698005800F08D1C3 +:10D5800078693C007C920000042101307861606B76 +:10D590004008400008436063B86A002803D0606B0D +:10D5A000082108436063201C203000903968F7F799 +:10D5B0009AF80320000228602B498868A063C86895 +:10D5C000E06308793C00B8920000C006C00E251C3C +:10D5D000403528714879687123483C384662009884 +:10D5E000807A01F05EFD00210028214A01D01178E7 +:10D5F00003E09378DB0700D55178A971002804D0A7 +:10D600001B49143108683C00F4920000206400E0DB +:10D610006E80B86AC00702D5FF202871AE71E6613E +:10D62000B8680130B8607968884203D00B21852042 +:10D63000F7F7C4FF0D498868C06C8860FB6A002B4F +:10D640000CD00E4AD47B002B3C003093000002DD4E +:10D650007F2C05D201E0002C02D0D47BE318D373D9 +:10D66000FE62C968884203D105218520F7F7A9FF2A +:10D67000F8BD247E010000400700A0800700E8807C +:10D68000070040000700FEB5304C3C006C930000E2 +:10D69000A06B216BF7F733F82D493C318E68708B06 +:10D6A000062804D2E0690130E0610E203085284967 +:10D6B0003C310D68002D03D103218520F7F784FF4D +:10D6C000244845613562318DEF6804393C00A893E8 +:10D6D00000000C0401210291240C002101911D483D +:10D6E0003C30808AA04203D32C81EE6000240BE002 +:10D6F000002F04D103218520F7F769FF04E03D1CCA +:10D70000201A0404FF68240C0298002804D03C006E +:10D71000E493000012490120086100200290019862 +:10D7200001300190002CDDD10C480C4C3C300760DE +:10D7300001983065B564306A0068606260680130E5 +:10D740006060A1680131884203D00A218520F7F783 +:10D750003C002094000041FF04480068A062FEBD28 +:10D760000000E87D010000300700786E0100B0B5D0 +:10D77000051C01210F200AF0F8F8F2210F200AF011 +:10D78000F4F80C480C4C0068143C00280CD0E078ED +:10D7900001283C005C94000009D00122291C0F20C4 +:10D7A0000AF0ACF86078022806D0012003E0607827 +:10D7B000022801D000206070B0BD00009866010012 +:10D7C0000222002880B500D1032203490E200AF06E +:10D7D0009BF800203C009894000080BD000050C3DE +:10D7E0000000F8B50023002200282ED00689046826 +:10D7F000751E2D04B61AF6072D0CF60FB4460EE072 +:10D80000A75CA618023300977778A7540232120457 +:10D81000009F120C00293C00D4940000777001DDB9 +:10D820008B4215DAAA42EED3C068002810D00289D4 +:10D83000002AF9D06246002A0BD00268665D17788C +:10D8400002336755167001220029D2DD8B42D0DBEE +:10D85000F8BD0022CDE700003C0010950000B0B5F7 +:10D86000041C0D1C0120F8F75EFB0D490028C8615F +:10D8700014D062684260A27C0272A268C260E26850 +:10D880000261228A02750A1D0A621268002AFFD10B +:10D89000026048600020A86001203C004C95000018 +:10D8A000B0BD0120FAE70000A46E0100B0B5041C71 +:10D8B00040680D1C431C02D1211C094808E00020CF +:10D8C000F8F734FB064994390861002803D0211C7D +:10D8D00000F048FE00E00120A86001203C0088958F +:10D8E0000000B0BD0000386F010080B50121972015 +:10D8F000F7F785FE002080BD000038B50A1C143201 +:10D900000092131F051C083A0C1C16314068FEF7E4 +:10D910006CFE002801D0002000E0012069683C0076 +:10D92000C4950000A0606160012038BD10B50C1CDA +:10D93000017A00290FD0012909D0022903D1002141 +:10D9400000200AF073FC00202071012010BD416806 +:10D9500001200AF06BFC00F00DF9F4E780B50449F2 +:10D960003C000096000048680138486001D107F08B +:10D970006EFB002080BDAC790100B0B5051C0C1C0D +:10D9800000F04FFEA060686860600120B0BDB0B5D7 +:10D99000051C0C1C00F06FFEA06068686060012030 +:10D9A000B0BD3C003C960000081C00210022002372 +:10D9B0000EC008C001207047F8B50F1C041C207968 +:10D9C000202801D2202020716679002E02D12579ED +:10D9D00000220DE02579291C301CF7F74FF80029AB +:10D9E00001D1321C3C007896000004E0704380199D +:10D9F00005062D0E321CE079291C00F0F2F9207A80 +:10DA00002F49C007C00F08602E480078C00743D5D3 +:10DA1000A1792C4AC80748D42C4E16608B072B4896 +:10DA200008D5CC0801233C00B4960000A340036055 +:10DA3000490704D52849116001E0402101601368BD +:10DA4000264AB34210D1546801680C4354601468EC +:10DA50000C4001D0516100E0916154680C43546066 +:10DA600094682143916013E03C00F0960000547CE0 +:10DA700001680C435474147C0C4003D0147C0C4398 +:10DA8000147402E0147C8C431474547C0C4354745E +:10DA9000947C21439174B34205D100220168032094 +:10DAA000FFF78DF809E0006800213C002C9700008A +:10DAB0000206120E0320FFF785F801E00B48106004 +:10DAC000002038717D71F7F7E9FD0120F8BD0000F5 +:10DAD000CC5C0100040007005C5B0100B99B000006 +:10DAE000585B0100959B0000100007003C00689700 +:10DAF0000000559B0000B0B50D1C04300024FEF75B +:10DB0000D6FA01206C60B0BD0000F0B5077A43681A +:10DB1000041C0E480E1C00680125011C9BB006E089 +:10DB20004A689A4202D18F76002502E009683C00DB +:10DB3000A49700000029F6D1002D05D1217A0129F2 +:10DB400002D101A9F8F7A8F86068043621C61BB015 +:10DB50000120F0BDA46E010010B50C1C08F0AEFC55 +:10DB60006060012010BD000010B50C1C07F084FAA5 +:10DB70003C00E097000004F054FF002060600120AA +:10DB800010BD0020C043486001207047000010B560 +:10DB90000C1C0079FAF707F8002801D0002000E0FB +:10DBA00002206060012010BD00001CB5064C2068FA +:10DBB00000283C001C98000007D009F0C5FA01902D +:10DBC000206841686846F6F7D6FD1CBDAC790100B7 +:10DBD0000149086070470000AC7901000EB5064BA2 +:10DBE0001B68002B06D00290009101926846D9680C +:10DBF000F6F7C1FD3C00589800000EBD0000AC795E +:10DC000001001CB5041C07F04CFA064841680131BC +:10DC10004160009400210191006801686846F6F7B0 +:10DC2000ADFD1CBD0000AC79010080B5F8F7A3F88C +:10DC300080BD80B5021C3C00949800008021032028 +:10DC400000F05CF8011C034800224369F6F79BFDD5 +:10DC500080BD0000A46D0100F8B50C1C1349051C23 +:10DC60000868161C0130086000202061221C103258 +:10DC7000281D0021071C00923C00D098000003F0F2 +:10DC8000DEFE20712069002810D00104090C00205C +:10DC9000F7F779FE3060291D03C9A060E1603068A4 +:10DCA0000168009A381C03F0CAFE20710120F8BDFB +:10DCB00000001075010080B5021C3C000C990000AA +:10DCC0000821042009F04EFF032080BD10B5074A4B +:10DCD0000C1C516801315160011C1031C2680430C4 +:10DCE00003F0F0FE2071002010BD0000107501004F +:10DCF000044980B581610821021C03203C00489939 +:10DD0000000009F032FF032080BD95D80000F7B570 +:10DD1000071C161C0621002082B0F7F73AFE051CEE +:10DD200020480078062800D928812C680020A77098 +:10DD30000399E170311C03E00A8910180F1C3C00A4 +:10DD400084990000C9680029F9D16B4601AA211DF8 +:10DD500000F034F800AB187860711878002817D0FC +:10DD600011484068002808D019780020F7F714FE01 +:10DD7000011C381CF7F730FD0AE03868002802D192 +:10DD80003C00C09900003F600120B86100AB1978E9 +:10DD900038894018388100AB9888311C02382080BF +:10DDA000281CF7F71CFD281C05B0F0BD0000C85C5E +:10DDB000010001794279008889180239401A7047B8 +:10DDC00000003C00FC99000070B5084D2C78AD783F +:10DDD0002018061C002D03D070190138013DA843FE +:10DDE0001080801B18700C7070BD0000C85C0100B2 +:10DDF000B0B504680C4A218852780231914211D2A0 +:10DE0000551AF7F73C00389A0000C9FD016800294F +:10DE100002D10060012181610189491901812088B5 +:10DE200040192080607940196071B0BD0000C85C65 +:10DE3000010080B500220621F12009F0A2FE80BD7C +:10DE40000000031C02483C00749A000003704170FB +:10DE500082707047C85C0100B0B5081C0968151CC9 +:10DE60008C78F7F785FD0449A0000958002902D0F5 +:10DE7000281CF6F79EFCB0BD846D0100FEB5041CA5 +:10DE8000C07AA17AC607F60F3C00B09A0000321C97 +:10DE9000201D01F03CF86069254FC10737D5B869EE +:10DEA000002801D0F6F787FC2068056828888007DD +:10DEB00034D101AA02A9281C01F00BFC281C01F096 +:10DEC00012FC0078C0070AD460693C00EC9A00009C +:10DED000800726D4331C291CA27A20697D69F6F7B5 +:10DEE00072FC1EE000AB187A002803D0012806D08F +:10DEF000022816D1281C796AF6F761FC11E000AB04 +:10DF000018790E2801D00F280BD1281C3C00289B23 +:10DF10000000396AF6F756FC06E00007800F03D1CF +:10DF20002069F969F6F74EFC786B2121013078639E +:10DF3000221C802009F031FEFEBD287A01000B4929 +:10DF400018B50878C00711D50A4A101C20303C00CB +:10DF5000649B0000847900AB1C70C079587008780D +:10DF600040231843087005480078087000AB1888F3 +:10DF7000D08418BD0400070000100700E060010015 +:10DF800070470000054910B58879054B1A7C054C8F +:10DF90003C00A09B0000246862401A74887110BD88 +:10DFA00000002010070010000700585B0100044922 +:10DFB0000A6804480068024001D0886170474861DF +:10DFC000704710000700585B0100021C012000068A +:10DFD00008433C00DC9B000080B52A2109F0E6FDE7 +:10DFE00080BD000010B5041C002903D0812907D191 +:10DFF000812000E08020221C2C2109F0D7FD10BDDB +:10E0000002212C20F7F74CFB201CF7F7C3FC10BDB6 +:10E0100080B5B4B03C00189C0000012806D08228CE +:10E020001CD11AA807F035FC34B080BD812913D16A +:10E030000D480C4A816900685032814202D0D16A91 +:10E04000012902D01178022902D107F00AF9EBE781 +:10E050006946F7F75AFE3C00549C0000E7E70121AF +:10E0600000E002211820F7F721FBE0E7A46E010091 +:10E07000B0B5041C0068174D9AB0686308F03EFA0A +:10E0800020791449134A50392C3A02280AD1906851 +:10E090008002A861C868E8613C00909C00000220F2 +:10E0A000287207F0E4F81AB0B0BD031C0020002B62 +:10E0B0000BD152689202AA610A1C8968E961287230 +:10E0C00010686946F7F727FEEDE7A861012028727E +:10E0D0002870002006F07DFAE5E73C00CC9C0000AB +:10E0E000F46E0100704700007047000080B5012108 +:10E0F0000720F7F7E1FA80BD70470000F8B500246B +:10E10000194A0026D56811680435081C916002E0A0 +:10E11000011C4019086053688342F9D83C00089DEF +:10E12000000001341032032C0E60EED3F6F7F1FF3D +:10E1300010481049124C0860104900200122192390 +:10E140005B010C2543431B1945434A511F1C6D18A5 +:10E15000AB606B6000251E1C14369E60331C3C00B7 +:10E16000449D00000135272DF8DB013003289F6016 +:10E17000E8DBF8BD2057010014C80100B4CF01004E +:10E1800018D90100B8CF0100B0B5074C251CC03527 +:10E19000286B1E2100F0F2F9A26B201CDC30296BE9 +:10E1A0003C00809D000000F0B6F9B0BD0000C469DD +:10E1B00001000020102210B50A4905E00C2343435A +:10E1C0005C180C34CC5001300F28F7D30C23584383 +:10E1D0000950044841600160028200218160C160F1 +:10E1E00010BD3C00BC9D000084E2010044E301003E +:10E1F00010B5084CA06A002803D10748F9F7E8FEDB +:10E20000A0620448443000680121F9F795FC60627F +:10E2100010BD0000606C0100CD260100FFB50D1C93 +:10E22000041C1E1C3C00F89D000081B00A9F1C21AC +:10E23000F6F74DFB0398A061256025612681A68233 +:10E24000E76005B0F0BD70B50D1CA421041C0830BA +:10E25000F6F73DFB201C44300622291CF6F765FB2F +:10E2600018483C23411C3C00349E00006162417808 +:10E2700059430918897A062901D1A06202E0211CBC +:10E280004D31A16241783C235943081804300F49AD +:10E2900020620B88002B15D0AC20005D0B4A183291 +:10E2A00000028018B030E0603C00709E00008D6875 +:10E2B000002008E0E268C1005450E668820052196C +:10E2C00071184A6001309842F4DB70BD000068614B +:10E2D0000100587501001FB5041C6034617A031CED +:10E2E000806A084A0291019003923C00AC9E0000B3 +:10E2F000E279181C20300092447B827B5E20C15A58 +:10E3000018690430231C02F07FFE1FBD394E000047 +:10E31000B0B50B1C01886920C05C86B00E4A049120 +:10E32000039005920D4D596A9A6A2D683C00E89E4B +:10E3300000000124002D00D0041C0A48005D01915A +:10E3400002920090181C2030447B827B5E20C15AD0 +:10E3500018690430231C02F0A4FE06B0B0BD514F72 +:10E360000000186701000A61010001898A1C3C0055 +:10E37000249F000002810268023A0260080A090232 +:10E38000084310807047000070B5051C08780E1C0B +:10E39000FF2814D0717802310020F7F745FB041CE8 +:10E3A00002890068311CF6F7CFFA002D06D0281C30 +:10E3B0003C00609F0000F7F734FB211CF7F757FA89 +:10E3C00000E0251C281C70BD0000FFB50F1C1E1CA2 +:10E3D000041C981C0104090C002081B0F7F727FBEE +:10E3E000051C0068002C386003990170386846707D +:10E3F00006D03C009C9F0000201CF7F715FB291C51 +:10E40000F7F738FA00E02C1C201C05B0F0BD000026 +:10E4100070B51048046804600F4920200860A0050A +:10E420000E4E02D5706AF6F705FAE00102D5306E9D +:10E43000F6F700FA3C00D89F00000A480440002587 +:10E4400007E0E00703D5A8003058F6F7F6F90135E4 +:10E450006408002CF5D170BD0000004007000010DA +:10E46000070030740100FFFDFFFE80B5072180200A +:10E47000F7F749F980BD3C0014A00000F8B5144B33 +:10E4800082009C58CA060127391CD20E9140114ABD +:10E490001160114E4000851915E06060207BC100BD +:10E4A000891910310A780D239A430A70391C81406A +:10E4B00031730749000108313C0050A000004018AA +:10E4C000084A416842608068F6F7BEF9287B002858 +:10E4D000E6D1F8BD0000A473010000100700006041 +:10E4E0000700D175000003490120097A002900D1F5 +:10E4F000002070470000047A01003C008CA000005E +:10E5000003490120897A002900D1002070470000CA +:10E51000147A0100B0B50024FAF776FC002814D074 +:10E52000012408F07DFE0A4D0A4B00215A18A03242 +:10E530001278102A06D38A00D218926F3C00C8A025 +:10E540000000821AAA4200D2002401310329F0D32C +:10E55000201CB0BD00008B080000A46C0100014825 +:10E56000C068704700007869010070B50D1C041C7C +:10E57000161CFDF72EFE0020E0602661A5603C0021 +:10E5800004A1000070BD0000F8B5171C0E1C041C8F +:10E59000002801D0002E01D1F7F7F2F8A06807F0AB +:10E5A00049F9051C01D1F7F7EBF8291C6E60AF6043 +:10E5B000201CFDF7FDFDE068411CE160002803D14F +:10E5C0003C0040A100000548216905F02CF92068B5 +:10E5D000A84202D1381CF6F748F9F8BD0000C46023 +:10E5E00001000022013910B505E00C2353431C182B +:10E5F0000C34C45001328A42F7D300210C235A4311 +:10E6000081503C007CA1000010BD0000B0B5041C8E +:10E6100001D1F7F7BBF8201CFDF7DAFD011C856876 +:10E62000A06807F009F9E0680138E06003D1064806 +:10E63000216905F0E7F82168002903D08868496856 +:10E64000F6F711F93C00B8A10000281CB0BDC46069 +:10E650000100012100288CB500D100210E2009F015 +:10E6600032FA832000AB1880002004F00CF80190EF +:10E67000684603F07AF98CBD000080B508F0DFFD34 +:10E6800006490A8906493C00F4A10000096E411AB6 +:10E690000B0C5918891A0904090C401A80BD000096 +:10E6A00000900700A46C010070B5041C887E0D1C4E +:10E6B000202803D903211820F7F740F800262676F2 +:10E6C000A87E291C1B3160763C0030A20000201C73 +:10E6D0001D30AA7EF6F75FF96868291C6060A8689B +:10E6E0001331A060A87B06222073E87B6073287C2E +:10E6F000A073687CE073A8892082A87CE0762677E6 +:10E70000201C1230A676F6F746F93C006CA20000F9 +:10E710006068431C1DD0114D6D61286800281AD017 +:10E72000227B011C0B7B9A4201D3206014E00B1C5E +:10E73000096800290BD00E7BB24208D20B68002B6F +:10E74000F0D01E7BB242EDD323600C603C00A8A247 +:10E75000000001E021601C60002070BD26602C607C +:10E76000FAE7A46E0100134AB0B5516801240029EC +:10E770001ED0131DD1611362436804E0106200686B +:10E78000D061002814D0D06945689D42F6D13C0084 +:10E79000E4A20000106A814204D15160D06900688F +:10E7A000086002E0D16909680160D069FCF7CEFF1A +:10E7B000002800D00024201CB0BD0000A46E010081 +:10E7C000B0B5174D01242968002927D06D61296152 +:10E7D0003C0020A30000436804E0686100682861F1 +:10E7E00000281DD0286942689A42F6D1AA692B698F +:10E7F0009A4200D1A9616A69914203D129600068F7 +:10E80000086006E0006810602868002801D107F061 +:10E81000CCFE3C005CA300002869FCF79DFF0028AB +:10E8200002D0002400E00124201CB0BDA46E010031 +:10E83000B0B5051C0748446807E0211C4431281C7A +:10E8400000F0D6FC002802D16468002CF5D1201C11 +:10E85000B0BD00003C0098A300005875010070B5E1 +:10E860000D1C141C00280B4E08D0706E0623584354 +:10E870000204120C311C281C228007E0218806208B +:10E88000F6F7A7F970662288291C301CF6F795F870 +:10E89000012070BD00003C00D4A3000010790100ED +:10E8A00080B5032803D8044AC000115080BD01215F +:10E8B0002620F6F75BFF80BD7C790100B0B5051C12 +:10E8C000C0680189392939D30468A079882835D1ED +:10E8D000E0798E2832D1207A3C0010A40000012873 +:10E8E0002FD1607A03282CD1207B022801D0FE286A +:10E8F00027D1607B1D210840012822D1A07BC8219F +:10E90000084008281DD1A81DFBF7E1F9002818D000 +:10E910001920215C002914D101303C004CA40000D6 +:10E920003928F9DB688B04210843688303F0D6FE9D +:10E93000002809D1002300222620044909F092F979 +:10E940000348006801F084F9B0BD000050C3000026 +:10E950000C790100B0B5084CA36801333C0088A4D1 +:10E960000000A3600C1C09D02568002D03D0237A79 +:10E970006168F5F7A3FF201CF7F7A9F9B0BD9479FA +:10E98000010070B5041CC06801890568082953D3CB +:10E990000622281C5549F5F79EFF002837D13C0078 +:10E9A000C4A40000E988524E043E812924D1E568C0 +:10E9B0002968087A4A7A000280180004000C420B89 +:10E9C0000005000DE27520834B8900204200B25AF9 +:10E9D0009A4206D128890C38020A00021043488165 +:10E9E0003C0000A5000002E001300228F1D3E068FD +:10E9F00001890A390181E06801680A311CE00022BE +:10EA000000204300F35A8B4201D1012202E0013081 +:10EA10000228F6D3002A11D107E036490622063132 +:10EA2000281C3C003CA50000F5F75EFF002808D13B +:10EA3000E068018906390181E068016806310160FA +:10EA400010E0E068FFF7E2FC0CE002310181E068D1 +:10EA5000016802390160E06800890238020A000298 +:10EA6000104308803C0078A50000E0680325028977 +:10EA70000168244E022A10D90988082905D0C1232B +:10EA8000DB00994203D1012502E0002500E00225C8 +:10EA9000E9007158002900D10225F7F704F8E900D0 +:10EAA0008919898888423C00B4A5000000D9032553 +:10EAB000A11D201CFDF734FC002800D10325022DE8 +:10EAC00005D0032D07D1E068F6F7E2FF70BD201CEA +:10EAD000FDF71CFD70BDE068018902390181E06825 +:10EAE000016802310160E8003C00F0A500003158E7 +:10EAF000201CF5F7F1FE0028EFD1E0680189023112 +:10EB00000181E068016802390160E3E700006A46BC +:10EB100001007C79010070B50E1C041C151CF7F770 +:10EB20008CFB00282AD01B4908683C002CA600005A +:10EB300001300860002E0AD0012E0BD0022E0FD11A +:10EB4000201C04F0CDF8201CFFF7D6FE0CE00821B5 +:10EB5000E06802E0C121E068C90004F035F903E093 +:10EB600002212620F6F720FEE27DE16A3C0068A63D +:10EB70000000281CFCF795FB206300202062A062A7 +:10EB8000201C00F06CFE70BDE068F6F78AFF002DD7 +:10EB9000F9D0E37D00220120E16AF5F7A7FE70BD00 +:10EBA00000009479010080B5012804D105483C009B +:10EBB000A4A60000006801F009F980BD0321262009 +:10EBC000F6F7F8FD80BD00000C790100F8B5061CD1 +:10EBD00080790024C0072DD5F0680068417A11299A +:10EBE00028D1C1880A0A09021143C90422D1017837 +:10EBF0003C00E0A60000114F0907890E0818418863 +:10EC00000A0A090211430D042D0C432D396801D164 +:10EC1000CA070ED4442D06D1C90704D5243000F00C +:10EC200022FB002805D00648854206D138688007B7 +:10EC300003D53C001CA700000124F068F6F73AFF5A +:10EC4000201CF8BD7C5A01006C07000080B500282C +:10EC500007D00021262008F07BFF0248006801F061 +:10EC6000BBF880BD0C79010010B5041C094A081CD2 +:10EC7000516801313C0058A7000051600021216219 +:10EC8000A162E27DE16AFCF718FB2063201CF7F724 +:10EC9000E6FA201C00F0EFFD10BD947901000CB5E0 +:10ECA000021C081C0021019100926A4601A900F093 +:10ECB00002F80CBD00003C0094A7000070B513687A +:10ECC000002B1ED000260B68002B02D113681B6896 +:10ECD0000B6013681C681B89E51808E05C781C1938 +:10ECE00002340C601C78844201D1181C70BD0B6882 +:10ECF000AB42F3D31368DB683C00D0A7000013607D +:10ED00000E601368002BE1D1002070BD000070B5CB +:10ED1000031C20D018681E89051C16E00478DD2C21 +:10ED200010D18478002C0DD1C478502C0AD10479EC +:10ED3000F22C07D144798C4204D13C000CA800008D +:10ED400002290CD18479944209D0447820180230E9 +:10ED5000441BB442E5DBDB68002BDED1002070BD34 +:10ED6000044980B50A780A20002A00D0486A00F0D9 +:10ED7000D1F880BD1C750100B0B5174C3C0048A807 +:10ED800000002068002829D0164DE869002825D108 +:10ED900001F03FFA002821D1FFF741FC00281DD1E6 +:10EDA0002068A969401808F0D6F9002816D002F0AA +:10EDB00006FD2168401808F0CEF900280ED03C006E +:10EDC00084A800000120E86100222521802008F0AD +:10EDD0008FFF0648296A04F083FD0121286A00F0AC +:10EDE00089FFB0BDE85901001C75010034630100C2 +:10EDF00070B5051C0024FAF70BFF184E716A401815 +:10EE00003C00C0A8000000F08EF800280BD104F0F0 +:10EE1000FEFB0021252008F0B0FE0322291C281C3F +:10EE200000F0AFF818E0706A441E00F07CF800288B +:10EE300012D10C48316A04F056FD0121306A00F00D +:10EE40005CFF3C00FCA800000020FAF70DFE06F075 +:10EE500003F8002300222520054908F03FFF201C6D +:10EE600007F0FCFA70BD00001C750100346301005E +:10EE70001027000080B5012807D080280DD100227E +:10EE8000002108483C0038A90000F8F79AFE80BD30 +:10EE9000012902D106490020C86104F0BEFB80BDF3 +:10EEA00005212520F6F7A7FC80BD61A900001C758F +:10EEB00001000021002880B501D1034841680122EA +:10EEC000252008F02CFE3C0074A9000080BD000045 +:10EED000E85901000249C8680138486270470000DB +:10EEE0001C75010038B5031C081C191C114B06D0F9 +:10EEF000012111800A1C191CF5F7AAFD17E00D4D20 +:10EF0000011C2C781288181C3C00B0A90000F5F7F1 +:10EF1000A2FD287884420DD000236B61002803D025 +:10EF2000002007F0A4FA05E0002200210020009252 +:10EF3000F8F723FC012038BD00001C75010070B5F6 +:10EF4000041C012608F0E1F9051C3C00ECA90000B6 +:10EF50000020FAF78BFD444302F040FC02F03EFC37 +:10EF6000011C231C0022281C08F07CFA002813D165 +:10EF70000A48231C00228169281C08F073FA002823 +:10EF80000AD1F8F719FC011C231C00223C0028AA16 +:10EF90000000281C08F069FA002800D10026301C67 +:10EFA00070BD1C75010070B50D1C041C161C07F00B +:10EFB00076F900280DD0FAF752FE002809D0FF306C +:10EFC00001304368002B04D0221C291C301C3C005B +:10EFD00064AA0000F5F7BBFC70BD000080B50121FC +:10EFE0001D2008F0DFFD074A0748116901605169DB +:10EFF00041600649496881600021C16003F074FCEA +:10F0000080BD00002861010048750100905C01008E +:10F010003C00A0AA000070B5041C406B002835D04D +:10F020001D4D00262878002824D04120005D0028AE +:10F0300003D108F076F9A8611BE0696901316961C3 +:10F04000A868002808D0814206D12069011C10312F +:10F0500004303C00DCAA00008222FFF7ADFF6868A4 +:10F0600000280AD06969814207D12069011C10314A +:10F0700004300222FFF7A0FF6E6168780521084086 +:10F0800008D0074800780E2803D36034E079FBF7F6 +:10F09000CFFF70BD3C0018AB00000348066070BD98 +:10F0A00000001C75010010670100D47E0100800281 +:10F0B0007047142330B5094D4B435B195B68082436 +:10F0C000002B00D1022438235A43054B8900D21863 +:10F0D000515A026809193C0054AB0000511A0160F2 +:10F0E00030BD0000744001008C410100F8B5071CE0 +:10F0F0002C48141C2C4A484386468018800D8446B0 +:10F100002B482A4A06261D1C48434A430E2F40D24C +:10F1100001A3DB5D5B009F443C0090AB0000060850 +:10F120000A0F14181D202724272B2F31C8001FE099 +:10F1300088001DE0214970464018000D18E01F4A64 +:10F140008018800D401821E01E481018000D1DE0A9 +:10F150001D4970464018400D0AE03C00CCAB000051 +:10F160001B49401801E01B481018400D11E01A49D6 +:10F17000401805E060462080002016E0174810186F +:10F18000800D06E0164902E016484843164940182B +:10F19000C00D03308008800020802E803C0008AC29 +:10F1A0000000F8BDFF21FF20F6F749FB002020807A +:10F1B0002880F6E70000D1451700FFFF3F00E33845 +:10F1C0000E0055551500FFFF0F00A9AA2A01701C5B +:10F1D0003700FFFF1F00CBCC4C00701C47003C00E9 +:10F1E00044AC0000A9AA7A00701C6700A9AABA0062 +:10F1F00084F61200EC25B4000449002801D009224D +:10F2000000E014224A80486070470000A4690100B1 +:10F2100080B50622F5F740FC80BD0000BCB5151C8A +:10F220003C0080AC0000041C04310904090C01AA54 +:10F230006B46FFF76AFF3820064968434018A10073 +:10F24000405A00AB99884018198840180004000CF7 +:10F25000BCBD8C410100BCB5041C151C01AA6B4649 +:10F26000FFF73C00BCAC000053FF38200549684361 +:10F270004018A100405A00AB998840180004000CC7 +:10F28000BCBD00008C41010080B500280FD00029D2 +:10F290000DD002780B789A4209D1FF2A05D0427826 +:10F2A0000232F5F73C00F8AC000081FB002801D1E8 +:10F2B000012080BD002080BD000080B506220449E9 +:10F2C000F5F775FB002801D1012080BD002080BD2D +:10F2D00000005E400100011C49780120002900D097 +:10F2E0000020704700003C0034AD000080B50622CD +:10F2F000F5F760FB002801D1012080BD002080BD12 +:10F3000080B5FFF7C7FF80BD80B506220449F5F739 +:10F3100051FB002801D1012080BD002080BD0000EC +:10F3200012610100011C80203C0070AD000081438F +:10F330008A080E201C2A10B506D2034C5200A35C8A +:10F340008B4201D11019407810BDFC4101001423FB +:10F350000249584340184068704774400100202219 +:10F36000011C80B50248F5F752FD3C00ACAD000031 +:10F3700080BD0000486101000806000E022801D18E +:10F38000002070470120704700290CD00749096808 +:10F39000002908D01423064958434018C0680028A3 +:10F3A00001D0012070470020704700003C00E8AD0C +:10F3B0000000AC6901007440010010B5041C062275 +:10F3C000011C0448F5F77DFB0622211C0348F5F7D4 +:10F3D00078FB10BD00001261010040800700002989 +:10F3E00001D10020704738235A43074BD2183C0004 +:10F3F00024AE00008300D25A14235843054BC01892 +:10F4000040881018081A0A380004000C70470000E1 +:10F410008C41010074400100F8B5071C081C161C43 +:10F420001C1C191C00F05AF8051C1435221C311C38 +:10F430003C0060AE0000381CFFF70BFF28180004EA +:10F44000000CF8BD000000B500F04BF80A300004D5 +:10F45000000C00BD0000F8B5071C081C161C1C1C85 +:10F46000191C00F03EF845001E35221C311C381CCA +:10F47000FFF73C009CAE0000EFFE28180004000CD3 +:10F48000F8BD0000FFB50F1C81B00AA9141C1E1C9A +:10F4900003C900F029F8051C1E35211C301C00F0A2 +:10F4A00023F82D18221C391C0198FFF7D5FE2818C7 +:10F4B0000004000C3C00D8AE000005B0F0BD0A49C5 +:10F4C00080B50988092904D0142907D101018000D9 +:10F4D00000E0C10008180004000C80BDFF21FF20DF +:10F4E000F6F7D1F9002080BD0000A669010038239D +:10F4F0005943064A14233C0014AF000089188200C7 +:10F50000895A054A58438018408808180004000C9E +:10F51000704700008C41010074400100024803491B +:10F5200000684000085A7047A86901005440010073 +:10F530000A20704710B5041C3C0050AF0000FDF7D6 +:10F5400062FF201C10BDB0B5041CC0680568A01D7A +:10F55000FFF7F5FE002818D0211C1431201C08F0FC +:10F56000E2FD002811D0298809482022818269887B +:10F570000183A98806354183C5613C008CAF00003A +:10F580003021095D1154616B41620120F7F728F8C1 +:10F59000201CB0BD707C010070B5041CC068211C2B +:10F5A00014310568201C08F0C1FD002808D0054E64 +:10F5B000F06802F0CFFD2888F08203203C00C8AF3D +:10F5C0000000F7F710F8201C70BD707C01003EB5FC +:10F5D000041CC0680568A01DFFF7B7FE002821D0F5 +:10F5E000211C1431201C02AA08F077FD002819D034 +:10F5F00002984B21095C002910D0012914D03C004D +:10F6000004B0000002290CD129880D2000AB18801D +:10F61000201C03F051F80190684602F05DFAF6F7FD +:10F62000B5F80021029806F09FFE201C3EBD07F0B1 +:10F6300029F8029800218069C207D20F0420F6F74A +:10F640003C0040B000007FFFEEE710B5041CFDF762 +:10F65000E6FE201C10BD3EB5051C00F040FE002853 +:10F6600015D1281C1430FAF7CEFB00280FD0052145 +:10F670002869FFF786FB041C09D00522211C684677 +:10F68000F5F73C007CB000003DFA05340294684672 +:10F6900003F01AFB2A1C0D218F2008F08FFB00209D +:10F6A0003EBD000010B5041CFAF798F8201C05F0C8 +:10F6B000E5F8201C10BD0000B0B5041C0069002155 +:10F6C00094B0FFF73C00B8B0000061FB6946FBF75F +:10F6D00026F800281ED00098FAF729FA011C01A884 +:10F6E00002F0D7F90098FAF7D2F90490052009AD95 +:10F6F000687202A8211C06220230F5F706FA0120E2 +:10F700000890216A0A903C00F4B00000282009917A +:10F71000005D287201A800F069F8201C14B0B0BD8B +:10F72000FFB5161C1F1C81B00A9D4C20F6F790FBFC +:10F73000041C143006220299F5F7EAF9201C06226F +:10F740000199F5F7E5F928203C0030B100000021CF +:10F750000655E1602762002D01D08E2000E08D204B +:10F76000221C0D2108F033FB05B0F0BD0000B0B540 +:10F77000051C4C20F6F76FFB041C4C22291CF5F7E6 +:10F7800026FA2920405D0D282CD23C006CB10000E7 +:10F7900001A31B5C5B009F44281A281E060A282828 +:10F7A0000E2822121600221C0D218C201AE0221C89 +:10F7B0000D21832016E0221C0D21842012E0221C42 +:10F7C0000D2185200EE0221C0D2186203C00A8B1D1 +:10F7D00000000AE0221C0D21872006E0221C0D21DA +:10F7E000892002E0221C0D218B2008F0F6FAB0BD22 +:10F7F000E868F6F7E6F9201CF6F711FBB0BDFEB598 +:10F80000051C9020F6F72DFB041C9021F5F73C0019 +:10F81000E4B100005BF9374E0127F069042803D9F1 +:10F82000706B013070634DE03348B16B04F0D0F879 +:10F8300001202062A87E211C803102910870221CC8 +:10F840006032019200202F1C20379072787A2B1C96 +:10F850003C0020B200001433D072E868AA1DA060FA +:10F86000E86B48604420405D0872291C201C05F0AC +:10F87000AAFC686A00280AD1019A201C937A02998E +:10F88000221C703258300978FAF7DBF906E03A7A30 +:10F89000231C3C005CB20000E869296A7033FDF764 +:10F8A0008DF93020405D184907280BD15820005DA4 +:10F8B000C007C0170130E06100202061201CF7F76D +:10F8C0003FFF18E00122201C05F0ACFF071C12D0FE +:10F8D00003F006FF3C0098B20000F36D002B06D049 +:10F8E00060682030827B616B381CF5F799F8E86816 +:10F8F000F6F773F9201CF6F79EFAFEBDF0690130A9 +:10F90000F061FAE70000C4690100346301000531C9 +:10F91000000070B5061C3C00D4B200000D1C0904A8 +:10F92000090C0020F6F77CF9041C2A1C311C006825 +:10F93000F5F706F9201C70BD4088704703781B0757 +:10F940009B0F0B70007800091070704704307047EF +:10F9500004307047D42101703C0010B30000002136 +:10F96000417070470000C421017000214170704750 +:10F970000000B4210170002141707047000001496E +:10F98000486570470000C469010001490865704777 +:10F990000000C4690100014988653C004CB30000C7 +:10F9A00070470000C4690100F8B55F4F051CB868D6 +:10F9B0000130B86007F024FD38619020F6F766FA50 +:10F9C000041C9021F5F794F8286B271C6063688B62 +:10F9D0008037261CC007C00F2062688B3C0088B3AC +:10F9E0000000603602214007C00F2063688B80074B +:10F9F000C00FF860287F3870B172002808D1F9F77D +:10FA0000C8FF002802D00120606201E00120A0624E +:10FA1000F868002803D00021022006F0CCFF3C004B +:10FA2000C4B300002B1C1033AA1D291C201C05F098 +:10FA3000DFFBA86A00280CD13978022907D0221CE4 +:10FA40007032201C5830B37AFAF710F908E001261A +:10FA50005EE0AA7D231C286A696A7033FDF7C0F84E +:10FA60003C0000B40000E96800200989002900D1A9 +:10FA70000420F0723878012814D10027009000206B +:10FA800006E02969012903D1A969012789071AD547 +:10FA900006F079FC0028F4D1012F14D10098012838 +:10FAA00011D13C003CB4000008E0201C583006F0A6 +:10FAB000E1FC00280AD08069800707D5F07A082188 +:10FAC0000843F0720120E062E87D3073E868A060CE +:10FAD000E06A002812D01A4FF86B00280ED0307B55 +:10FAE000F5F7DEFE3C0078B40000002809D0211CA8 +:10FAF000381C4030FCF755FC1448B96B03F089FF03 +:10FB0000F8BD104F1248B96B03F083FF0022201C90 +:10FB1000104905F0A2FE061C03D1386A0130386294 +:10FB2000EEE7201CF6F73C00B4B400009FF9E8684B +:10FB3000F6F76EF803F0F2FD0448836D002BE2D077 +:10FB40000022301C296BF4F786FFDCE7C469010052 +:10FB5000C4600100346301001130000010B50A20B8 +:10FB600007F0FEFC07F05EFC3C00F0B400000B491F +:10FB700044180CE0201C07F090FB002807D0F7F792 +:10FB800034F9002803D012218620F5F7CAFEF7F7D2 +:10FB90002CF90028EED101F080FD10BD0000409C42 +:10FBA000000010B50C1C011C174A3C002CB50000CD +:10FBB0000129506904D080291DD0812921D11CE060 +:10FBC0009178012915D102219170141C011C104853 +:10FBD00003F028FF0121606900F02EF9606901F04F +:10FBE0005FFC2070A088A16900230A4A3C0068B528 +:10FBF000000007F07EFC10BD222106E001F01DFC94 +:10FC0000201C00F04AF810BD1C212020F5F78FFEC3 +:10FC100010BDB4790100346301003D2E000070B5C1 +:10FC20001C4CA078002832D0052830D060693C00F8 +:10FC3000A4B5000000F0EAF8184EB579A0780128C4 +:10FC40000BD002280ED0032810D0042817D1421F51 +:10FC50008021202008F008F80EE00021202008F084 +:10FC600031F80CE0A08807F01DFC05E0207800F0DA +:10FC70003C00E0B5000039FA002000F0C4FD6069E6 +:10FC800001F0E1FB0520A070B571606900F061F939 +:10FC900000222021812008F0D6F870BD0000B47940 +:10FCA000010020100700B0B50D4D041CA8780028F5 +:10FCB00014D03C001CB60000686900F00BF90A483B +:10FCC000696903F0A7FEA88807F09EFB002C02D00C +:10FCD000687800F079FF0020A870A968201CF4F76C +:10FCE000CAFEB0BDB479010034630100064B80B593 +:10FCF000997803293C0058B6000006D10421997078 +:10FD00002021021C802008F0A4F880BD0000B479F6 +:10FD1000010010B50C4CA17803290FD11030FAF76F +:10FD2000DEF8002809D0207800F0E5F9002000F086 +:10FD300070FD002105483C0094B60000FCF79CFAD9 +:10FD400010BD1B212020F5F701FE10BDB479010084 +:10FD500051B60000094980B58978032909D100F01E +:10FD6000CDF9002000F058FD01210548FCF784FA88 +:10FD700080BD17212020F5F73C00D0B60000E9FD3A +:10FD800080BDB479010051B6000070B5104C1D1C47 +:10FD9000A378061C0498002B18D10123A3702261BC +:10FDA000E6606170A060A561002007F0ACFAA08059 +:10FDB000301CF7F73CFBE08007F03C000CB700007C +:10FDC0004FFBC721C900281A411A0022202007F042 +:10FDD00057FF70BDB4790100B0B5041C0D1C00F0D4 +:10FDE00009F8201C00F024F8002D01D0FFF7D4FE04 +:10FDF000B0BD0000B0B50C4C051CA0683C0048B775 +:10FE0000000000280FD10A48017E022211406160E3 +:10FE1000017E11430176072003F049FC206003F0C6 +:10FE200098FF03F0EEFFA0682843A060B0BD407CBF +:10FE300001000C8007000A4938B50A1C20323C003A +:10FE400084B70000947900AB1C70D279074C5A70CB +:10FE5000E268002A02D1064D01236B701043E06076 +:10FE600000AB1888C88438BD00100700407C010032 +:10FE700000500700B0B5051C002901D000F028F89B +:10FE80003C00C0B70000064C60782169084303D1EC +:10FE900001210E2006F0C5FD206928432061B0BD78 +:10FEA000000018630100B0B50A4C051C226900204F +:10FEB000002A0CD1002900D004E06078002802D18B +:10FEC00004F03C00FCB7000069FB6070281C06F0E1 +:10FED000EFFC0120B0BD00001863010010B5084C14 +:10FEE000607800280AD006F0E3FC002060702069EA +:10FEF000002803D001210E2006F096FD10BD000061 +:10FF0000186301003C0038B80000094980B50B694E +:10FF1000834204D14A78002A01D1012200E0002264 +:10FF200083430B61002A03D000210E2006F07FFDE1 +:10FF300080BD1863010080B50120F6F756FE80BD34 +:10FF4000000010B5041C3C0074B8000000F004F878 +:10FF5000201C00F01FF810BDB0B50C4D041CA868A3 +:10FF6000A0420FD10720296808F08CFB68680222A4 +:10FF700007490028087E01D0104300E0904308762E +:10FF800004F0C4F8A868A0433C00B0B80000A86022 +:10FF9000B0BD407C01000C8007000A4938B50A1C3E +:10FFA0002032947900AB1C70D279074C5A70E26809 +:10FFB000824202D1064D00236B708243E26000ABA7 +:10FFC0001888C88438BD001007003C00ECB8000059 +:10FFD000407C010000500700B0B5051C0A4C002110 +:10FFE0006069FFF711FF042001F046F901F088FB7A +:10FFF00000220421042001F08BF8281C01F04AFAA9 +:02000004800179 +:100000006069FFF7A7FFB0BD407C01003C0028B944 +:10001000000080B501F077FA80BDB0B50D4D01212B +:100020002869FFF7F4FEFFF72AFE00F02CFB00F032 +:1000300084FA002400220421201C01F06CF8013411 +:100040002406240E042CF5D32869FFF786FF3C0014 +:1000500064B90000B0BD0000407C0100F8B5051C8B +:100060000E1C074C171C01212069FFF7D3FE3A1C18 +:10007000311C281C01F052F82069FFF771FFF8BD10 +:10008000407C0100FFB589B0061C16981D1C002895 +:100090003C00A0B9000001D02948149028680088CD +:1000A0000006800E202801D0142817D10AAA18248F +:1000B000182105CAFFF777F9071C281C0189A142FE +:1000C00002DD006801190BE0C068641A0028F5D150 +:1000D0000F213C00DCB900008620F5F761FC00210F +:1000E00001E00021002718480890807907900C2033 +:1000F000164A704380180479049112991598149A3D +:1001000001910390059700950AAB0292211C301CC7 +:100110000CCBF7F73C0018BA000003F90125B540F5 +:100120000C4E083E3078284006D0201C00F0C9FD57 +:100130003078A843307003E0201C139900F043FF8F +:1001400007A903C988710DB0F0BD952400002010E7 +:100150000700747A01003C0054BA0000B0B5041CDA +:100160000C230949584340180079051C00F092FE01 +:10017000281CF7F7C7F80120034AA040083A117875 +:1001800081431170B0BD0000747A010010B5054CB8 +:100190002078002803D11A213C0090BA0000862064 +:1001A000F5F707FC207810BD000018630100014836 +:1001B0004078704700002C63010080B5F6F7D1FE4F +:1001C00000F01BF980BDFEB50168051C0C680E1C13 +:1001D0002178880771D16869C2073C00CCBA000059 +:1001E0006ED580076DD5E87AC20708070909029124 +:1001F0004549800FD20F00284F6805D0012809D04B +:10020000022821D003285BD1FF23201CA97AF4F710 +:1002100074FC55E002980B280AD00C283C0008BB5F +:1002200000000FD00D284ED1394FF868F4F761FC6B +:100230000020C0435AE0354FA97ABB68201CF4F770 +:100240005BFC40E0324F3869F4F753FC3BE000219F +:10025000019102990020FF23090701D401203C00ED +:1002600044BB000013E03189192901D3267E07E041 +:10027000152904D31826711A49190E7B00E00026AF +:10028000B10602D4012073075B0F01210191002800 +:1002900003D0A97A201CF4F736FC0199012915D165 +:1002A0003C0080BB0000F006C60F20881B4FE48A8C +:1002B000F96B0005C00F00291AD04B1C18D0002E76 +:1002C0000AD0002808D03888844213D002980C281D +:1002D00001E01DE012E00DD0081C01F076F90028C5 +:1002E00003D13C00BCBB000000F0A6FAF4F70AFC06 +:1002F0000020C043F863002E0DD03C800020F8633E +:1003000009E020880006800E202804D1044F201C1C +:10031000B96AF4F7F8FB291C0248FBF7EFFFFEBDB2 +:10032000287A01003C00F8BB0000A59A00000348B1 +:1003300080B50078002100F0FCFB80BD0000186350 +:100340000100044B054900281A6800D0011C101C4C +:10035000196070470000D4790100957500000548C8 +:1003600080B5007F24233C0034BC0000044958437E +:100370004018C069F4F7CCFB80BD0000D4790100BF +:1003800094460100021C064880B581628260007FAD +:1003900024230449584340188069F4F7B9FB80BD11 +:1003A000D4790100944601003C0070BC000080B587 +:1003B000002000F03CFB002000F06DFA00F065FA30 +:1003C0000449C86A0130C862081F008807F0C1F8F4 +:1003D00080BDD4790100064880B500210177C16A4B +:1003E0000131C1620438008807F03C00ACBC000059 +:1003F000B3F803F0D1F980BDD479010080B505F0E0 +:10040000E9FA80BD80B5002803D1012004F022FA6A +:1004100080BD012003F0E6FB80BD00000349012000 +:100420004978002900D00020704700003C00E8BC5B +:1004300000002C63010070B5134D2878002820D1EE +:1004400001212E1C7068FFF712FD0021072006F025 +:100450002AFB0D480024047104F0EDF806F0D5F9EC +:10046000012028700A4804604460F6F74CFD3C0007 +:1004700024BD0000F7F75EF8FFF7A2FF00F0A8FD2B +:100480000548716803F020FB012070BD2C6301005A +:100490005000070080000700C4600100B0B51E4C8A +:1004A0002078012835D1251C69681C4803F020FB01 +:1004B0003C0060BD000004F0F0F81A4801684908EB +:1004C00049000160016801221143016000F02BFE28 +:1004D00000F01BFC06F099F8F6F729FEF6F72DFC64 +:1004E00000202070FFF783FF00F08BFD0F4881781C +:1004F00008223C009CBD000091438170817811432B +:1005000081700C49102008716868FFF75FFDF7F7EC +:1005100039F8F6F74DFD0121072006F0CDFA01204C +:10052000B0BD00002C630100C4600100F0000700B2 +:10053000000007003C00D8BD000050000700034940 +:100540000120897A012900D0002070470000147A28 +:100550000100B0B5154D041C287A002820D1F9F708 +:1005600000FC02281CD101202872E868002810D065 +:100570002068296808603C0014BE000069680D48C6 +:1005800003F0C2FA01216868FFF7C8FC00222420AA +:10059000616807F0CFFBB0BD002028722168012000 +:1005A000F4F7CFFAB0BD00202168F4F7CAFAB0BD65 +:1005B000047A0100346301003C0050BE000004488E +:1005C00080B5007A012802D1002002F0F0FE80BD43 +:1005D0000000047A010080B5012807D0802809D1E5 +:1005E0000748007A002804D0012000E0002002F033 +:1005F000DEFE80BD0E212420F5F73C008CBE0000FD +:100600000BFA80BD047A0100F8B53A4E051CB07AA9 +:10061000002869D1F9F7AEFB022865D13648006899 +:10062000002861D03548716803F074FA01217068C0 +:10063000FFF77AFC6C20F5F7B9FC041C3C00C8BE3F +:1006400000006C21F4F7E7FA30682C220460296876 +:1006500081606968C160002111548162A968002924 +:1006600002D0E968016105E006F05DFF69684018A5 +:10067000316808617068FFF714FD692108553C0076 +:1006800004BF00000020F9F709FB01273B1C061CF2 +:10069000221C24320021F9F779FB1C480321008831 +:1006A00089030843211C40310091488318481021D8 +:1006B00060601848A060A76367630020F5F74CFBF3 +:1006C0003C0040BF0000E06002890099CA830768CF +:1006D000311C381D2761FEF78EFE381C0A300F4989 +:1006E000FEF789FEA4203880002004F0DEFB002203 +:1006F0001F20696807F02DFBF8BDFFE7002029687F +:10070000F4F73C007CBF00002EFAF8E7147A0100F1 +:10071000805A010034630100FA60010099EC000086 +:1007200015ED000012610100064880B5817A0029AC +:1007300007D0006804222030017B1143017302F0CE +:100740006BFD80BD3C00B8BF0000147A010010B5FD +:10075000044CA07A012803D106F0F1FE21688861DB +:1007600010BD147A0100031C081C1F4970B50A68EB +:10077000012B1CD0802B05D0832B30D1887A002808 +:1007800014D029E053693C00F4BF0000002B0ED0C8 +:100790009469D5692E1B0C695D1B361BB610A41914 +:1007A0000C61CC682D1BAD106419CC60936102F014 +:1007B00081FD70BD022812D1906A0C1C0028F8D06F +:1007C00007F00EFAA07A01283C0030C00000F3D1F7 +:1007D0002068816A0029EFD12030017B0822114373 +:1007E000017370BD02F021FD70BD0E211F20F5F7D1 +:1007F00028F970BD0000147A010002490C3103C9C8 +:10080000401870470000147A01003C006CC00000E2 +:10081000054880B5006804222030017B1143017334 +:1008200007F0E4F980BD0000147A010070B5164CA1 +:100830000E1CA17A00291CD02168086107F032FA49 +:10084000002817D020680025056200223C00A8C0BF +:10085000000083211F2007F094FA6068FFF703FC73 +:10086000216804222031087B2B1C90430873311C23 +:1008700000221F2007F061FB70BD20680822203095 +:10088000017B1143017302F0D6FC70BD00003C00F7 +:10089000E4C00000147A010080B500F077FC00F09D +:1008A0006FFC00F029FF00F05DFA00F0C5F800F0E1 +:1008B00085FF80BD80B5FAF785FA80BD0148C06824 +:1008C00070470000287A01000349002800D0011C6D +:1008D0003C0020C100000248C160704700008175E3 +:1008E0000000287A010001480249C86070478175FC +:1008F0000000287A01000149886170470000287AC9 +:1009000001000149002088617047287A01000349ED +:1009100000283C005CC1000000D0011C0248C161FD +:100920007047000089750000287A010003490028FB +:1009300000D0011C02488162704700008D750000E4 +:10094000287A01000349002800D0011C02480162F6 +:10095000704700003C0098C1000091750000287AA3 +:1009600001000349002800D0011C024801617047C2 +:10097000000099750000287A0100014802490861C9 +:10098000704781750000287A0100021C081C802A2B +:1009900080B502D100F03C00D4C1000007F880BD52 +:1009A0001E212120F5F762F880BD0000B0B5104D82 +:1009B000041CA86B0130A863696B091A281C006B22 +:1009C0000C2903D90021FFF791FA03E0082901D18E +:1009D000FFF732FB201C00F03C0010C200004DF974 +:1009E0006069400701D503F00CFC201CE96AF4F7AC +:1009F000DBF8B0BD0000287A01000349002800D0D0 +:100A0000011C0248416270470000B5750000287A59 +:100A1000010003490120096C00293C004CC2000080 +:100A200000D1002070470000287A010010B5074C63 +:100A3000E16B002901D1E06304E0814202D0002093 +:100A4000C043F8E706F09CFD206410BD287A010041 +:100A50000148006C70470000287A01003C0088C201 +:100A60000000054980B5002048638863FF210931F3 +:100A700015221020F6F7FBF980BD287A0100034902 +:100A8000002800D0011C0248816070470000C17539 +:100A90000000287A01000349002800D0011C3C0016 +:100AA000C4C200000248C16270470000C575000062 +:100AB000287A0100044B054900285A6800D0011C1F +:100AC000101C596070470000287A0100C9750000A9 +:100AD0000349002800D0011C024841617047000012 +:100AE0003C0000C30000CD750000287A01000F4BC8 +:100AF00010B5D968002919D00E4C0021CA0012196E +:100B0000403AD26B824202DA01310329F6D3481C03 +:100B10001A780006000E904208D018700806000EE1 +:100B2000041C3C003CC30000F6F7BAFA201C03F09A +:100B30001BFD10BD186301003C42010010B5144CB0 +:100B4000E168002922D02178124BCA00D218403A1D +:100B5000D36B834202DA481C20700BE0926B824216 +:100B600014DDFF313C0078C300000806000E207041 +:100B700003D119218620F4F78EFF2078FF3000067C +:100B8000000EF6F790FA2078FF300006000E03F012 +:100B9000EEFC10BD0000186301003C420100094852 +:100BA0000021018141813C00B4C300008181C181E9 +:100BB000074A02800123DB0243808280C2804176A3 +:100BC00031218176012101767047000030800700D5 +:100BD000FFFF000080B50120F6F7F8F80120F6F7D6 +:100BE000DBFC0120F6F75AFA3C00F0C300000120BC +:100BF00000F0F1FD0120F7F7C6FB80BD000010B545 +:100C0000114C002907D1002802D10120E06006E044 +:100C10000021E16003E0012907D1002801D0207004 +:100C200003E018218620F4F73CFF3C002CC40000B0 +:100C30002078FF300006000EF6F73EFA2078FF30ED +:100C40000006000E03F09CFC10BD000018630100BC +:100C5000054980B50968884205D0FEF7FFFB00F022 +:100C600087FAFFF72BFC80BDA86901003C0068C42F +:100C7000000001494870704700002C6301000149E1 +:100C8000C860704700004C7B0100034901200978CF +:100C9000002900D00020704700002C630100044AA6 +:100CA000002802D0906901309061D06940183C0062 +:100CB000A4C40000D0617047905C0100FEB5041C24 +:100CC00000680568281CFEF727FF071C6069154EA1 +:100CD000C007C00F21D001AA02A9281CFEF712FFED +:100CE0003878C0070CD46069800708D500AB187A43 +:100CF0003C00E0C40000002801D0022802D1706A44 +:100D000001307062FEBD00AB187A002801D00228C5 +:100D1000F8D1706A01307062B06A0130B062F1E7F8 +:100D2000F06A0130F062EDE70000905C01000249DA +:100D300048693C001CC50000013048617047000054 +:100D4000905C01007047000070470000011C4031BA +:100D500010B50A8B1207920F012A33D04A781A492C +:100D6000041C6034002A0B6A22D1E279012A02D9DC +:100D7000CC6801343C0058C50000CC60022A02D97E +:100D80000C6901340C610C6801340C60446B002C5C +:100D900003D00469247CE40702D54C6801344C601C +:100DA000806B002802D0086B01300863002A0CD049 +:100DB0009818013808E03C0094C50000012A01D0D1 +:100DC000022A02D1886801308860E0791818086228 +:100DD00010BD0000905C01007047000001490A202E +:100DE00008817047C47A0100F0B5324F041C78784E +:100DF00085B0C007C00F03903C00D0C50000B87894 +:100E000002900120A0400490391C88702C48008872 +:100E100006F00BFC0190FEF7AEFC0430294EA50055 +:100E200071590979884206D0FEF7A5FC7159043042 +:100E3000087101207870002078703C000CC600001A +:100E400021480121204E3038015571590320087086 +:100E500006F0C6FB061CFEF791FC36180E3609E0BC +:100E6000301C06F0F5FA002804D023218620F4F780 +:100E700033FE03E0F6F734FB0028F1D03C0048C60F +:100E80000000124813493C3800780872201CF4F71F +:100E9000A2FA0E4E715908710398002801D0012161 +:100EA000797009480088019906F0BDFB0298B87076 +:100EB000094949790498884203D0242186203C00BE +:100EC00084C60000F4F70EFE05B0F0BD0050070028 +:100ED000D0790100107B010080800700508007005E +:100EE000B0B50D1C041C052801D3F4F729FE052D0F +:100EF00001D3F4F725FE0B4AA8001158A0001058A2 +:100F00003C00C0C600000EC90EC0062106220648DD +:100F100069432A380918624310180622F3F70FFFB5 +:100F200002483038415D0155B0BD107B0100B0B5BD +:100F3000041C0E480D1C80780121A140084003D0FC +:100F400001213C00FCC600008620F4F7D1FD0621FB +:100F50000622094869430918624310180622F3F76C +:100F6000F1FE201CF4F740FA034AA1002A3251583E +:100F70000871B0BD00500700E67A0100034980B552 +:100F8000002048603C0038C7000007F032F980BDFF +:100F90000000D47A010010B5041C052801D3F4F731 +:100FA000D8FD0749087A074A107001200872FEF739 +:100FB000F4FB044A0430A1003C325158087110BDC2 +:100FC0000000808007003C0074C70000D47A010054 +:100FD000034980B50120486007F00EF980BD00008C +:100FE000D47A010010B5041C052801D3F4F7B4FD30 +:100FF000201CF5F78FFE0021201CFBF731FD01219D +:10100000002800D0011C09043C00B0C70000090CF6 +:10101000201C04F022FA10BD000006490120054BF7 +:10102000886000203C33002182009A581170013002 +:101030000528F9DB7047D47A01000F4938B5002044 +:1010400088600E48011C20318A793C00ECC7000002 +:1010500000AB1A70C9790A4C094D59700C343C35F3 +:1010600000210322635C002B02D08B00EB581A7026 +:1010700001310529F6DB00AB1988C18438BD0000B9 +:10108000D47A010000100700FFB5144F3C0028C8B7 +:101090000000041CBE790D1C81B00F2000F0B9F8CF +:1010A0002A1C104D0090211C281CF4F7DEFC211C8A +:1010B000A81D039AF4F7D9FC211C281C0C30049AB3 +:1010C000F4F7D3FC211C281C12300A9AF4F73C00D8 +:1010D00064C80000CDFC07F09BF8009800F076F89B +:1010E000BE7105B0F0BD000020100700E67A0100D7 +:1010F00010B50020F6F726F80749887800090001A6 +:1011000088700024201CF5F711FE01342406240EFB +:101110003C00A0C80000042CF7D310BD0000005014 +:10112000070080B502F0E3FB034881780F221143EA +:10113000817080BD000000500700F8B50D1C041C34 +:10114000052801D3F4F717FDA600002D114F07D194 +:10115000B8593C00DCC80000816800290ED14078F5 +:1011600000280BD002E0FF352D062D0E291C201C77 +:10117000FBF788FC011C201C04F07EF906490120C5 +:101180003039085504483C388068002802D1B959E4 +:10119000032008703C0018C90000F8BD0000107B57 +:1011A000010080B504F0CDF980BD10B5041C052800 +:1011B00001D3F4F7E6FC201CF5F7C1FD0020054A39 +:1011C000A10051588860044988780122A240104348 +:1011D000887010BD00003C0054C90000107B010065 +:1011E00000500700024A9178084390707047000051 +:1011F00000500700F8B50C4FBE790F2000F018F82A +:10120000051C0024201CF4F70DF9084AA1005158D0 +:10121000087101342406240E3C0090C90000042CFF +:10122000F3D3281CFFF7E1FFBE71F8BD00002010CA +:101230000700107B0100B0B508498D788A78054019 +:1012400082438A7006F0F9F9041C0A34201C06F067 +:1012500034F90028FAD0281CB0BD3C00CCC90000ED +:101260000050070001490A2008817047387B0100BF +:10127000F8B510480426041CE034051C383D00274E +:10128000201C1C30E460A06127610B48A682E0614D +:101290002762A7620620A084201CFEF73C0008CA33 +:1012A000000087FC201C0C30F6F7B7F90549383CE4 +:1012B000AC420880E7D1F8BD0000D4E4010012611F +:1012C0000100487B0100F7B5051C0C230F1C1249D7 +:1012D00058434418208806F0EAF9A07801283C0019 +:1012E00044CA00001AD16668022F05D15C20805BD9 +:1012F00002990009884211D1281CFEF7FBFF301C1F +:10130000F9F7FAFD0420A070391C281CFBF7F4F84B +:10131000034AE8003C32115801311150FEBD000073 +:101320003C0080CA0000607B01000120064A0021C9 +:101330000C234B439B189B78002B00D000200131DD +:101340000429F5DB7047607B010070B5041CFFF7D2 +:10135000EAFC002803D120210C20F4F7F6FB261C20 +:1013600060363C00BCCA00000021F171E164606B92 +:10137000251C4035002831D0FFF704F90122120363 +:1013800000282069018801D0914300E011430180C9 +:10139000206901220088D2022883201C583001884D +:1013A000914301803C00F8CA0000A36B5208002B57 +:1013B00010D091430180288B0007800F012815D0A1 +:1013C0002E20015D20690430F8F741FD616AFEF7C7 +:1013D000A8F904E011430180201CFBF7CCFB6883D3 +:1013E00004E0206941803C0034CB0000A88B2169D7 +:1013F000C882E068F6F720F93080606D002804D0DC +:1014000000220321707AFEF70DFF201C00F0B6F9D0 +:10141000707A06F045F870BDB0B5002406F022F9E8 +:10142000094A00210C234B433C0070CB00009D185F +:101430006B685B6CAD78C31A012D02D1A34200DD4D +:101440001C1C01310529F0D3201CB0BD0000607BBD +:101450000100B0B5041C06F0A8FE0C20084960434A +:101460004518288806F035F968683C00ACCB0000C8 +:10147000002806D02030007B012802D1201CFFF775 +:10148000A3FAB0BD607B0100FFB585B00FAE60CEA2 +:1014900038201E497043171C4418FFF77FF80122BB +:1014A0001203002803D02088904320803C00E8CB22 +:1014B000000002E02188114321801198391CE0626C +:1014C0000598F8F7D0FC011C2B1C381C069AFEF777 +:1014D00020F960800622201D0F49F3F772FC231CBF +:1014E0000898303318700E980C49587065633C00AA +:1014F00024CC0000002002900122049209480391AC +:101500005A780188019200911978243B301C626B53 +:10151000FEF7A8FE09B0F0BDD4E40100126101009D +:101520005D4E0000487B0100FFB587B0109812AFF8 +:101530003C0060CC00008C46A2CF4C23304C6B4367 +:101540001C19161C159A2785271C303706970597F6 +:1015500000233B73059F78731198271C60646160BA +:10156000226040373E70614661870798311CF8F76A +:1015700080FC3C009CCC00000599C8730A987870E8 +:10158000301CFEF773F8002801D0012000E0002095 +:10159000410002200140119A0120002A00D10020C0 +:1015A00008433872201C2E300799FDF7CFFF281C06 +:1015B00004F0AEF83C00D8CC0000FEF7FEFF4C2251 +:1015C000124B6A43D218012109032A32002804D0A1 +:1015D000101C12888A43028002E0108808431080A1 +:1015E0000B490020039106990290002204920848BA +:1015F0000A7B4188231C3C0014CD0000019200911D +:1016000079780833281C6268FEF738FE0BB0F0BD0D +:1016100058E30100754F00003C7C0100B0B50C1C84 +:10162000012827D0802830D1E06C002808D069201C +:10163000005D1849C00040183C0050CD0000043047 +:10164000016801310160201CFFF7E9FB134D503D9B +:10165000E868002805D02E20005DFEF710F802F0A3 +:1016600042FE201C6168F3F72FFB403460780028AD +:1016700002D106F012F8A860B0BD3C008CCD00008D +:101680002006000E8128FAD1220C2004000E02212F +:10169000FEF7E6FDB0BD0A210C20F4F77DFAB0BDDF +:1016A0009C7B0100F8B5184E184F051C3479B879A9 +:1016B0000090201CF5F77CFF002806D03C00C8CD28 +:1016C0000000124838384068854201D1002D03D10E +:1016D00010218620F4F763FA0D490020383948605C +:1016E0000421201CFFF759FC0421201CF5F7EBFE18 +:1016F0000C21064A6143303A89180C7104203C00E1 +:1017000004CE000030710098B8710F20FFF7A6FDDD +:10171000F8BD0000A47A010020100700F8B5041CF1 +:101720000F20FFF7C1FDF5F73BFF0125002800D092 +:101730000025164EB079164F00903879042801D153 +:101740003C0040CE0000002C03D111218620F4F78C +:101750002CFA1048290638384460090E0C1C042065 +:10176000FFF721FC0321201CFFF741FC211C042072 +:10177000F5F7AFFE0C21074A69430420303A891877 +:1017800008713C007CCE00003C710098B071201CB8 +:10179000FFF750FD0420F8BD20100700A47A0100D7 +:1017A0000C2302495843401880687047747A01003E +:1017B0006030C1798079814201D9012070470020D1 +:1017C000704700003C00B8CE0000014880687047B8 +:1017D00000004C7B010038B56921095C1823104AD0 +:1017E000594389188A6801328A604B69D21ACB68DA +:1017F000934200D2CA6000220B4C0260221C2032AD +:10180000957900AB1D703C00F4CE0000D2795A707F +:101810000A68002A01D1486000E0106000AB08604F +:101820001888E08438BD0000C47B01000010070068 +:1018300018230A495843411808690130086148686B +:10184000002809D0486901303C0030CF00004861D1 +:10185000486802684A60002A00D10A607047002088 +:101860007047C47B0100F8B5124E104D0F4C0A278B +:10187000211C0020E0602A31221C1832A160626124 +:1018800027820C4AE061A26160623C006CCF0000DC +:1018900006202084081CFEF7D7F9201C0830F5F735 +:1018A00001FF4C3CAC427080E5D1FF203070F8BDA8 +:1018B00088E401000CE301003C7C0100126101009E +:1018C000F8B5041C0B480E1C171C44703C00A8CF34 +:1018D000000005F000FF051C391C301CFDF7ABFFB4 +:1018E0000C21054A28180A30614308325050034839 +:1018F000891800688860F8BD00006C7A0100786E75 +:10190000010070B50B4E051C7078FF280FD03C000D +:10191000E4CF00000C23084C58430834205805F04D +:101920001DFE002806D170780C23584300198168E9 +:101930002943816070BD00006C7A010080B53021C0 +:101940000148F3F743FA80BDECE5010010B505F05E +:101950003C0020D00000C5FE0A4944180CE0201CC1 +:1019600005F0F7FD002807D0F5F751FE002803D059 +:1019700013218620F4F731F9F5F749FE0028EED15E +:1019800010BDB0360000FFB58BB0199B0D1C041CB8 +:101990001A203C005CD00000002B169900D11820C2 +:1019A00001901498002827D0FF20199B0130002BAC +:1019B00001D1182300E01A230433824204D3D01A41 +:1019C000400840000004000C0D906A480088C21ACC +:1019D0001204120C3C0098D000000492002908D098 +:1019E0008979664A4900515A049A511A0A04120C1C +:1019F0000492049A824205D90020049002E06048D3 +:101A000004900D9001980104090C0A910020F4F74C +:101A100084FA009000683C00D4D0000000260690B4 +:101A20002060002005900E9800240005000C09900D +:101A30001A980D9F4007400F089007940395002DBA +:101A40000DD02889B84204D836183F1A07D0ED685F +:101A5000F5E73904090C281C3C0010D10000F4F70C +:101A600038FBEFE7002E02D10799002971D1271C1E +:101A70006C20F4F788FB0799041C002920D10794F7 +:101A80000020A0611898271C606017982437A06078 +:101A90000698206115980FC80FC73C004CD1000074 +:101AA00014985C2160630998085319986921E063D0 +:101AB0001B9808551C9860651998002823D0089831 +:101AC000069908831FE06C22201C0799F3F71AFA85 +:101AD0003C60019862213018C85315983C0088D1A9 +:101AE00000004021807AC8550020B86306980A9902 +:101AF000F4F71FFAF8600299F4F73BF9201C403024 +:101B0000818B059A1207120F1143818303985E217E +:101B100002900198224A30180853126801213C00B3 +:101B2000C4D10000081C002A00D01B980006049AAB +:101B3000000E964203D92C2211551B4904E0159939 +:101B40002C22097A11551949085C662108551C9800 +:101B5000002801D01F200855002D03D0E86803900D +:101B60003C0000D20000002000E009E0E860059899 +:101B7000002601300004000C0D9F0590039D6DE7C9 +:101B80000098E0600299F4F7FAF800202060012143 +:101B9000A1636034608007980FB0F0BD000006615B +:101BA00001003C003CD200005C4301003809000009 +:101BB000186701000E6101000A6101000148006818 +:101BC00070470000C46A01000249091D03C940189A +:101BD00070470000C46901000148006970470000B7 +:101BE000C46901003C0078D2000001484069704798 +:101BF0000000C46901000148806970470000C469A1 +:101C0000010070B50D4E0020351C4035F0630DE02D +:101C1000A068F4F77AF9B36D002B04D000220120FC +:101C2000616BF3F795F83C00B4D20000201CF4F788 +:101C30009DFA281CFAF742FD041CECD170BD00008F +:101C4000C4690100F8B51A4F0026F86B00282CD0A3 +:101C5000381C403000901DE01648B96B02F05CF86B +:101C60000022201C144903F03C00F0D200007BFF4E +:101C7000051C04D1386A0130386201360DE0A068D5 +:101C8000F4F749F9BB6D002B04D00022281C616BCE +:101C9000F3F764F8201CF4F76CFA0098FAF711FDDA +:101CA000041CDCD10748B96B02F03C002CD30000C7 +:101CB00025F80020F863301CF8BD0000C46901005D +:101CC0003463010011300000C460010001490120AB +:101CD000C8637047C469010080B50020054A00212F +:101CE0001C2343439B1801300428D9663C0068D369 +:101CF0000000F8DBFCF7FDFC80BDC4690100014970 +:101D0000C86470470000C4690100014988647047D5 +:101D10000000C4690100B0B5041C0D1C211C028E1A +:101D2000806A4031F3F72FF8002816D102213C00D9 +:101D3000A4D30000201CF4F76FFAE269C000101869 +:101D4000828BAB889A4204D182692B689A4208D26E +:101D500001E09A4205D2002118300CCD0CC000E001 +:101D60000121081CB0BD0000F8B5061C002744681E +:101D70003C00E0D300000FE00949486A01304862A6 +:101D8000A069002802D0F4F700FAA761266225684E +:101D9000201CFFF752FB2C1C002CEDD1F8BDC469B0 +:101DA00001000330074A8108136850681B688900E6 +:101DB00009183C001CD400008B4201D3516000E0A4 +:101DC00000209060704700008C6E010070B5124ECC +:101DD0008038C50070590C1C002804D101210D2049 +:101DE000F3F72EFF0DE02069002805D1A81981889E +:101DF000E06801F03C0058D4000047FA20617159B6 +:101E0000201CF2F7BBFF041C002C07D0E068002860 +:101E100001D0F4F792F8201CF4F7BDF970BD5442DC +:101E2000010070B5041C0D1C0E490622F3F735F8AD +:101E30000026E66166623C0094D400000720302151 +:101E40000855E663281CF8F76BF8A076201C1430C0 +:101E50000622291CF3F724F80622291CA018F3F700 +:101E60001FF8266170BD00001261010080B5FDF70A +:101E700085FE80BD014948603C00D0D40000704719 +:101E80000000E4650100024980B54968F2F77CFF73 +:101E900080BDE465010080B5F4F7E5F9074907481E +:101EA0000EC90EC018380068002802D002F0B7FA38 +:101EB00080BD02F09EFA80BD00003C000CD5000001 +:101EC000B058010090730100054980B58968002071 +:101ED000002900D103200006000EFAF7E3FB80BDC5 +:101EE000606C010080B5034806220349F2F7DEFF6B +:101EF00080BD000040800700126101003C0048D511 +:101F00000000B0B5041C0C4D0B1C211C00200C3D26 +:101F10000029094C05D02878211C1080021C181CAF +:101F200007E011880E2907D80A06120E191C201C7A +:101F30002A70F2F7BEFF0120B0BDB06901003C007D +:101F400084D5000010B500200A4A012111600A4C16 +:101F50000AE0021C016A5032914205D061783C23AC +:101F6000594309190431016204F0BAFB0028F0D189 +:101F700010BD0000DC62010068610100044880B50A +:101F80003C00C0D500000068002803D0011C1020D0 +:101F900004F0C7FE80BD286101000322111F80B537 +:101FA0000020FBF776F980BD000080B50BF0B9FA90 +:101FB00080BDFFB583B0161C002101911F1C0821B4 +:101FC00002AA3C00FCD50000FAF70EFF041C2AD13F +:101FD00002984168490001D4092424E0FAF752FF2D +:101FE0003860029841684902CD0F291CFAF744FF76 +:101FF000011C306038680006000E00F01BF8002855 +:1020000001D10A243C0038D600000FE03168029864 +:102010002B1C01AAFAF7D7FF002806D00198002848 +:1020200004D004990968814200D2032401980499DC +:10203000086007B0201CF0BD000070B5051C0E1C28 +:10204000012400F084FF3C0074D60000002808D072 +:10205000032D01D0042D04D10320C003864200D3F8 +:102060000024201C70BD00007CB5151C061C0C1C37 +:10207000291C6A4601ABFFF7A5FF002802D1002CFE +:1020800001D103207CBD17483C00B0D6000000AB56 +:1020900006601879072821D202A31B5C5B009F44CD +:1020A00000001D040406101713000420EDE72A1C8D +:1020B000211C0120009BF2F781FE002812D106208E +:1020C000E3E72A68009905E000983C00ECD60000A0 +:1020D0004278811C01E02A686946201CF2F7FEFE66 +:1020E00003E004218720F3F7CFFD0020D0E70000B4 +:1020F000F86B0100F7B586B00E1C082105AA0698FA +:10210000FAF77EFE041C45D1059841683C0028D7AB +:10211000000002904902C90F002504950391089F11 +:10212000FAF7D5FE019002A903C9FAF7C6FE019994 +:10213000052914D202A35B5C5B009F4400000E03E0 +:10214000060C030087420ED807E087420BD83C00FC +:1021500064D700000125C01B049007E0874205D129 +:10216000012503E005218720F3F794FD002D01D11F +:10217000032415E005984168002969DA3A4A06996E +:102180001160FAF791FE071C05980399FAF786FE8D +:102190003C00A0D70000051C011C381CFFF75FFFA6 +:1021A000002801D10A245EE0072F57D202A3DB5D8D +:1021B0005B009F440000530404062E504800042492 +:1021C00051E00498002801D1002714E0089908186C +:1021D00000043C00DCD70000000CF4F72BF8071CCF +:1021E000311C089AF2F786FE089804993818F2F71D +:1021F0002FFE089804993E1C40180890311C0020BE +:1022000008AAF2F7ECFD002800D10524002F2DD0FC +:10221000381CF3F73C0018D80000EDFF29E00399C3 +:10222000002904D0059840688702BF0A00E0002713 +:10223000311C281C089AF2F760FE0499002903D08B +:1022400008982818F2F707FE002F12D0F2F7CCFDFD +:102250000FE0311CA81C3C0054D80000089AF2F78B +:102260004FFE0898687007E0FFE7072404E00824A1 +:1022700003218720F3F71AFD201C09B0F0BD0000F0 +:10228000F86B01009EB51C1C00AB19720092002275 +:1022900001946946FBF708FA3C0090D800009EBD07 +:1022A00000008FB5029200220090019003916946D0 +:1022B0000420FBF7FCF98FBD0000B0B50C1C012811 +:1022C0000AD0032819D004282CD1606801F035FC0D +:1022D000011C83200CCC22E01C203C00CCD8000048 +:1022E00014496043401814494518281CF8F746FC67 +:1022F000A968002903D0221C082005F071FEB0BD9A +:10230000208CC82801D3042004E0652801D30220D2 +:1023100000E001202084201C03F0DCFA3C0008D9F6 +:1023200000002268E368011C8220FFF7B4FFB0BD03 +:10233000A0210820F3F7C3FCB0BDDC71010064EEFE +:10234000FFFF0348044A81685161C068906170478B +:102350000000F4680100C07101000349044A3C0018 +:1023600044D90000086B90608868D0607047000016 +:10237000905C0100C071010000B5FFF7F1FFFFF7AD +:10238000E3FF00BDB0B50D1C002814D00B490C4C68 +:1023900088686269C968801AA269891A401804D0DD +:1023A0003C0080D9000064235943F2F7C4FE206149 +:1023B000FFF7CDFF206928600120B0BD0020B0BD2F +:1023C0000000F4680100C0710100B0B50D1C0028C8 +:1023D00017D00C490D4C086BA2688968801AE26816 +:1023E000891A3C00BCD90000401807D022889042CE +:1023F00004D964235943F2F7A1FE6060FFF7B6FFEA +:10240000606828600120B0BD0020B0BD905C010074 +:10241000C07101007CB51068002802D000F024F8DB +:102420007CBD0F483C00F8D90000C0698468E068B2 +:10243000256AA669F3F7E3FDE169F3F706FD201CC1 +:10244000E2694030C18B12898918C1830749019420 +:1024500000912869331C82880168E068C068F8F739 +:102460001EFCE0E700003C0034DA0000846A010052 +:10247000915E0000F0B58569066A041CC06885B0ED +:10248000C068002801D1F3F757FC0A49029504946B +:102490000391306982880168262001920091435D92 +:1024A000E068E1692A1C0E323C0070DA0000C06866 +:1024B000F8F737FD05B0F0BD0000E9D9000010B510 +:1024C000141C0548FCF77BFBA068F3F79EFDE16850 +:1024D000C160201CF5F7BBFA10BDA06A01007CB5F5 +:1024E000041C6030027BA16900913C00ACDA000062 +:1024F0000192221C211C3831A06848320D1C6369EE +:1025000003F07AFB08210020F3F788FDE0602669DC +:10251000B16B002901D0102300E018230549019474 +:1025200000913168CA180823011C281C3C00E8DA15 +:102530000000F8F720FD7CBD000081DA0000F0B556 +:102540004668171C041C0121301C9BB0FAF70DFCD7 +:102550000025002803D013490A7A012A01D1012558 +:102560001CE088624E612089C861608900283C00B7 +:1025700024DB000003D000200884488404E0E068E5 +:102580000884208A4884608A8884086B002803D1E4 +:1025900001A803F077FC04E001200861002002F0AC +:1025A00039FB3D711BB00120F0BD0000F46E01004D +:1025B0003C0060DB000010B5041CF7F7E8FB0028C6 +:1025C00011D14B20005D01280DD1201C04F085FAAB +:1025D0000021201C04F0F3F8A0690021C207D20FEB +:1025E0000420F4F7D8F910BD000038B5041C04F03D +:1025F00036F93C009CDB0000002803D04030807A94 +:10260000002825D10C2029210855211C0622A018BC +:10261000F2F7A0FC201C06220E49F2F79BFC0120D9 +:10262000E06160620720302108550025E56306203F +:1026300000AB18803C00D8DB0000E068002801D027 +:10264000F3F7DBFC02216846FDF773FBE060201C1A +:10265000FFF769FCE560201C38BD12610100FEB582 +:10266000051C0E1C152000AB98801421171C00209F +:10267000F3F7E3FC02903C0014DC0000046806223F +:10268000311C601D2571F2F76BFC0622391C201CE1 +:102690000B30F2F765FC01A8FFF752FCFEBD00000D +:1026A00080B50023FBF75CF880BD000070B5051C09 +:1026B00008350F4E291C041C3C0050DC000006228B +:1026C000301CF2F750FCA088B082281C05F0A1FF56 +:1026D00000280BD0E0883061281C04F0CCF8A188D9 +:1026E000403041800020F4F7B8F902E00420F4F70C +:1026F000A0F9002070BD707C01003C008CDC000063 +:1027000080B50020FBF7F8FB80BD000070B5041C0D +:102710000430051CFDF732F8002809D00020F7F737 +:1027200037FC002804D00622011C281CF2F71EFCEE +:102730000A4E0622291C301CF2F718FC3C00C8DCAB +:1027400000006089F082281C05F069FF002803D092 +:102750000220F4F788F902E00520F9F7F4FA0020E6 +:1027600070BD707C010010B5041C007904281CD2D7 +:102770006079012801D0032804D1002201213C0006 +:1027800004DD0000A01DF9F769FC6079002804D180 +:1027900022790021F9F762FC0AE0032808D100241D +:1027A000221C00210020F9F759FC0134042CF7DB2E +:1027B000012010BDF0B597B0171C051C0430041C97 +:1027C0003C0040DD000015AA16A905F0E2FE002835 +:1027D0002ED015984B21095C002923D0012902D065 +:1027E00002291FD101E004F090F9AD7A1348169E3A +:1027F00005800622211C0830F2F7C1FB221C311C87 +:1028000002A83C007CDD000000F074FB0A200AA94D +:10281000487200AB9D80022101A8FDF79FFA059048 +:1028200002A8FFF795FBF3F7F7F90021159803F0DD +:10283000E1FF002000E00120387117B00120F0BD59 +:10284000987C01003C00B8DD000080B50120FBF75A +:1028500062FB80BD0000B0B5041C807D151C0A1C05 +:10286000C007C0170130211CF9F7FBFC002803D179 +:10287000042028710120B0BD206AF7F776FE606A57 +:10288000F7F77BFE206A3C00F4DD0000FEF788FAD3 +:102890000020B0BD10B5141CC27981798088F7F78B +:1028A000A1FA2071012010BD80B50123FAF770FF55 +:1028B00080BD0000F0B5041C081C00210F2891B059 +:1028C00000D30221002941D13C0030DE0000C000CD +:1028D000244F1090C619B288216802A8F2F75BFB5A +:1028E0002189B088091A002907DD09042268090C2A +:1028F0001018F3F7C0FB051C00E00025B07980211B +:10290000884317497831095C00203C006CDE0000E8 +:10291000F3F7B4FB071C00681349019010980B589B +:10292000019A291C02A8F2F7ACFA0090281CF3F7D0 +:1029300073FB201CF3F782FB0098002808D0029854 +:1029400001990860B079391CFAF720FF3C00A8DE35 +:10295000000011B0F0BD381CF3F761FBF9E72D2042 +:10296000F3F7F5F9201CF3F76CFBF2E700002444C1 +:10297000010070B5051C2035061CA879042848D232 +:10298000E979012913D1301C283003F092FF3C0073 +:10299000E4DE000000283FD0011C8C310165A979DC +:1029A0004C22041C11548118416250340462E11E0F +:1029B00081620BE000292FD13C2218494243541870 +:1029C000174A04341268002A00D14870002C23D022 +:1029D0003C0020DF0000351C3035E879012801D0AB +:1029E000052801D10620E8712022311D2068F2F768 +:1029F000DEFAB08CA080E879A071A8790025A063E8 +:102A0000012060810020E0602E36E80000191830B7 +:102A100008223C005CDF0000311CF2F7CBFA0135E4 +:102A2000042DF5D3012070BD68610100DC62010056 +:102A300010B5041CC07A012801D0032807D1201D3D +:102A400003F040FF002802D0A17A40304173E07AC1 +:102A5000002801D03C0098DF0000032802D1A07AB2 +:102A600002490870012010BD00006861010070B5C6 +:102A70000E1C0321041C301CFCF7E1FB002801D0D4 +:102A8000857800E000250B48321C00680368207C34 +:102A90008007C00F211C3C00D4DF0000F7F762FE66 +:102AA000002805D00121281CFDF7FEFB002000E0D6 +:102AB000082003F0C5FF002070BD0000E4650100A0 +:102AC00080B5426800880121490608432D2105F0A0 +:102AD000D3FB80BD034901203C0010E00000497891 +:102AE000022900D0002070470000846601008CB5E8 +:102AF00001281FD100290DD001290BD0022901D0B6 +:102B0000032916D10020F9F714FC932000AB18809C +:102B1000002008E0012900D000203C004CE000002B +:102B2000F9F70AFC832000AB1880022000F0CCF8F3 +:102B300001906846FFF73AFA8CBD01210E20F3F7A9 +:102B40001BF9F9E7FFB5171C1E1C1421002083B0E8 +:102B5000F3F7ACFA051C0468122000AB3C0088E0D7 +:102B6000000098800622601D0399F2F732FA0020D7 +:102B7000207127730499201CE172311C06220D304C +:102B8000F2F727FA029501A8FFF713FA07B0F0BD94 +:102B90000000F8B5061C0F1C0C210020F3F73C00C8 +:102BA000C4E0000089FA0568041C281D0622311CB7 +:102BB000F2F712FA6F81201CF8BD0000B0B5041CBA +:102BC0000D1C08210020F3F777FA01688C718D80C5 +:102BD000B0BD0000F7B50E1C1021171C0020F3F744 +:102BE0003C0000E100006BFA0468051C201D062271 +:102BF0000099F2F7F4F96681A781281CFEBDF3B5B0 +:102C00000C1C0821002085B0F3F759FA061C076850 +:102C1000E068002802D00599012904D1059838718F +:102C200000203C003CE10000787156E0036801217F +:102C3000039320690290FCF717FB051C02983221D0 +:102C4000FCF712FB0022D243011C281C04ABF7F74F +:102C5000B9F8002804D1301CF3F702FA00263CE052 +:102C6000002D05D03C0078E100006878093807287D +:102C700001D8322028701C210020F3F726FA019099 +:102C80000568011C301CF3F740F9E068F3F70BFA14 +:102C9000A861E1680198F3F738F90020E060059831 +:102CA0008021084338713C00B4E100000120211C60 +:102CB00014317871281C0622F2F79AF9029A292019 +:102CC0000092005D0121E26A082800D00021281C42 +:102CD000039B02F09DFFA06B2861206C68617F3030 +:102CE00001D10F206861301C3C00F0E1000007B00A +:102CF000F0BD10B5041C08210020F3F7ECF90168C1 +:102D00000C7110BD00000148006870470000286188 +:102D100001000149086070470000E4650100021CE1 +:102D200001200006084380B52D213C002CE2000064 +:102D300005F0C0FA80BD000080B5012807D0F12859 +:102D400025D0F32827D1022002F0BCF980BD00294C +:102D50001AD0012903D0F229F8D188211CE01048AB +:102D60000178002905D140780128EFD13C0068E2C4 +:102D7000000000F016FA80BD0B4814300089FCF703 +:102D80005AFC011C01220F2005F09FF980BD04F0C0 +:102D900052FA80BD0020FAF732FE80BD02210F20DA +:102DA000F3F705F880BD84660100014800783C0017 +:102DB000A4E2000070470000746601000149002091 +:102DC00048607047EC650100F8B50E1C134D011CFE +:102DD000141C6822281C1F1C0C30F2F771F90F49D3 +:102DE0000020AC394860012129601921192C6E6737 +:102DF0003C00E0E2000000D3211C2981094914397C +:102E000088738F74C878012808D001210F2005F03D +:102E10009CF91920FCF715FCFBF799F80120F8BD87 +:102E200000009866010080B5012802D100F02FF85B +:102E300080BD3C001CE3000001211D20F2F7C0FF13 +:102E400080BD00007047000001200749000580B5E3 +:102E5000886000228021162005F04CF904F034FD32 +:102E60000249086180BD000000100700246D0100C8 +:102E7000064A80B53C0058E30000D16A814207D180 +:102E8000107F2423044958434018C068F2F735F8EE +:102E900080BDD4790100944601001D481CB500781E +:102EA00000282DD01C480068002829D01A4A1A4B47 +:102EB000043211681C693C0094E30000A14222D155 +:102EC00051685B6999421FD1164949689368C91ACC +:102ED000814219D2D06814490130D0600968884213 +:102EE0000CD90622FF216846F2F72EF9F3F7ACFC65 +:102EF000011C0023002268463C00D0E3000002F0E1 +:102F0000CEF901221D200A4905F0F7F81CBDF7F79C +:102F100088F904228118081CFCF727FBF6E71C75CA +:102F200001004475010028610100905C0100F05926 +:102F30000100A086010080B501683C000CE400009F +:102F4000002915D10079022812D1081CF7F780F862 +:102F500000280DD003F0F2FC0830418F002907D182 +:102F60008069002804D08079062801D1FCF718FB7D +:102F700080BD000001490020886270473C0048E4A1 +:102F8000000078690100B0B5054D041CA91DFFF7CC +:102F900014F80622291CA018F2F74BF8B0BD707C7B +:102FA0000100B0B5041C151CFFF707F80622291C08 +:102FB000A018F2F73EF8B0BD000080B50A303C0022 +:102FC00084E40000F7F7BCF90123002803D005488A +:102FD0000078012804D100220021002003F0C6FD62 +:102FE00080BD0000A079010080B5002300220021EF +:102FF000002003F0BBFD80BDB0B5054DAC790A1CC7 +:103000003C00C0E40000011C0123012003F0B1FDDD +:10301000AC71B0BD000020100700F8B5061C0C1CF8 +:10302000880702D5F6F747FA10E060070ED5174F6C +:10303000A320C05D154D102800D3154D04F059FC98 +:10304000B96F3C00FCE40000401A291A0120F6F791 +:10305000C1FAE0071149C00F48600CD00D4C443C48 +:10306000207803280FD1002E06D0F6F7F9F9011CBD +:103070000120F6F7AFFAF8BD09490120F6F7AAFAE0 +:10308000012020703C0038E50000F7E70121301CEA +:10309000F6F789FAF2E7A60E0000A46C0100C40955 +:1030A0000000B057010040420F0080B5062804DB45 +:1030B0000521FF20F2F79FFE80BD034AC00011509A +:1030C0000121801801713C0074E5000080BD000002 +:1030D0009C5A01000148806870470000D0600100E0 +:1030E000B0B5084C251D281C216800F0F1FE002811 +:1030F00003D101210448F2F7CFFA281C216800F01F +:10310000FBFEB0BDC06001003C00B0E500002C102B +:103110000700B0B5104D0C1CA868002802D104F0BF +:10312000F4FB2860201C04F038FB0121032003F08D +:10313000C4FE04F0F0FBA86800280BD104F0E5FB06 +:103140002968001B401A696840183C00ECE5000043 +:103150004108401828600120A860B0BDD06001007F +:10316000F8B51F4E0024B068002802D104F0D0FB4F +:10317000706005F061F804F08FFB051CF9F766FE3E +:103180003168184A41181268E80B002A3C0028E60A +:10319000000000D1A80A401885421FD9144F2D1AEB +:1031A000381C2030817900AB1970C079587005F057 +:1031B0006EF8002803D102218F20F2F728FE291C87 +:1031C0000C48F268F8F709FC002804D0011C3C0008 +:1031D00064E60000281CFFF7A5FF012400AB188857 +:1031E000F88405F047F8201CF8BD0000D06001000D +:1031F000F474010000100700891301000149012047 +:10320000C8607047D0600100064880B5006801289A +:103210003C00A0E6000007D10448AC38016903482F +:1032200000F079FEF3F72BFA80BD98660100346355 +:10323000010080B542788168007903F0DEFF002844 +:1032400001D1F5F7B6F980BD00001FB504F069FBA8 +:10325000F6F73C00DCE6000091FF164C022803D193 +:10326000FFF7DCFD042802D3002020701FBDFBF710 +:10327000F7FC0028FAD1606A0028F7D02078800790 +:10328000F4D40921162004F093FF012020700B4C88 +:10329000094902903C0018E700000194009104F0F5 +:1032A00046FB001903906846FDF7B5FB0022162186 +:1032B000842005F03EF8DCE70000606C010061ED61 +:1032C000000040420F00234870B580789CB0012870 +:1032D0003ED1204C09A83C0054E70000803C611C12 +:1032E000FEF792FE042011AD6872A06F19A9189024 +:1032F0007C20005D012608711D20005D002806D09D +:1033000010961296FCF7F6FA2872207A1190F3F7CD +:10331000CDFF6A21085340343C0090E700000022B2 +:1033200001A906A8F6F7CDFF211C0020FBF7CBFB77 +:1033300006A9FBF7C8FB01A9FBF7C5FB0A49096809 +:10334000002907D0331C0A226946FBF7DAFB009AF2 +:10335000072191700C9009A8FEF73C00CCE7000013 +:103360007BFE1CB070BD000084660100E4620100B9 +:10337000F8B5041CC068FF22016812020E1C087B0D +:10338000497B090211400843051C311C0622A01884 +:10339000F1F77CFE0622B118201CF1F73C0008E88A +:1033A000000077FE280A290208430004032149028D +:1033B000000C884208D2E06801890E390181E0687A +:1033C00001680E310160F8BD0026201C103003F0AA +:1033D000E8FA218B002905D1E17D00290BD03C00C2 +:1033E00044E800008069800708D4E068012601896C +:1033F00002390181E0680168023106E0E068018974 +:1034000006390181E0680168063101601449002035 +:103410000B1F42009A5AAA4202D11149063102E01A +:103420003C0080E8000001300228F5D3E068062265 +:103430000068F1F734FE012ECBD1812000AB18805B +:10344000E17D208B49030843310308430004000C4D +:10345000010A000208435880E06819880068C180AA +:1034600059883C00BCE800000181B5E76A460100CC +:10347000B0B50D1C01890622083101810468044998 +:10348000083C0460201CF1F70DFEE580B0BD000093 +:103490006A460100F8B5002901D0002801D10020BA +:1034A000F8BD09043C00F8E80000090CF2F743FFFE +:1034B000061C051C002720E02C892968022C01D25B +:1034C000022001E048780230844202DD241A091803 +:1034D000F4E7844210D0011B0A040104090C120C09 +:1034E000281CF2F79EFE3C0034E90000002806D1BB +:1034F000E868F2F72DFEEF602889001B2881ED684F +:10350000002DDCD1301CD1E7F8B58568041C80693A +:103510002E1C00280DD07168F2F7F6FDA069F2F7B5 +:1035200017FE06E00021C1603C0070E90000F16078 +:10353000A08D36680138A085F0680028F5D1306884 +:10354000A060A08D01380004000CA08502D0201CD2 +:10355000F9F739F82A4F2A480068002803D00621D5 +:103560006868FAF77CFD686800683C00ACE9000018 +:10357000817800292BD1C178002930D1218E0139E1 +:103580002186FBF715F8A16A081AA062E169884252 +:1035900003D904210220F2F767FCB86800281ED086 +:1035A0001A49208E49680C22521A90423C00E8E9E0 +:1035B000000008D319239B01AF2292015943A06A4E +:1035C000511A88420ED200210C2003F0ACFC0020DE +:1035D000B86007E0012905D1C078172802D1A08E74 +:1035E0000138A0862A1D06CAE0686369F1F73C002D +:1035F00024EA0000DCFCB54201D02D68B4E7A08DC0 +:10360000002803D10548B96900F09EFCF8BD000010 +:10361000FC5A0100CC5C010018570100C460010095 +:103620008907074BCA0F80B5197C002906D0814352 +:103630003C0060EA0000197403D10721152004F052 +:10364000A2FE80BD00007869010080B5011C012048 +:10365000FFF7E9FF80BD80B5011C0220FFF7E3FF03 +:1036600080BDB0B51B4C6068FCF72FFF20680025BB +:1036700040683C009CEA0000002803D0FDF718FCDD +:10368000206845606068FCF7C5FE1448616800F07A +:1036900061FCA07A012805D0022803D020680068C8 +:1036A00000F0DEF801211F2004F0B2FD00211F20F0 +:1036B00004F0AEFD3C00D8EA000002211F2004F017 +:1036C000AAFDA57221682C20405C8968F1F776FC80 +:1036D0006068FCF7E4FE20680562B0BD0000147A63 +:1036E00001003463010004490A68C868926A002A2C +:1036F00001D0096908183C0014EB00007047000075 +:10370000147A0100B0B5134C051CA07A01380228C8 +:1037100019D801211F2004F081FD2068FC23011C21 +:103720002030027B1A400273002D0FD001231A4370 +:103730000273A07A032807D13C0050EB000001205F +:1037400001F0E7FD002801D1FFF797FFB0BD4B6204 +:10375000B0BD022111430173F6E7147A010010B5E0 +:10376000041C0A30F6F743FE00280CD022880A49D0 +:103770000B7A9004C00F002B06D13C008CEB0000AC +:103780001206920E202A00D10120C86010BD002828 +:10379000FCD100222421802004F004FE10BD000092 +:1037A000047A010080B5021C1F21802004F0FAFD7C +:1037B00080BD0000F8B51D4E041C30683C00C8EB0D +:1037C00000001D1C4768201CF1F70AFCFBF787FA74 +:1037D000002804D0281CF2F72AFB002828D12088D2 +:1037E000400525D430680068FEF759F9002803D158 +:1037F000FDF789FAF1F7EDFB3068002540683C00E1 +:1038000004EC0000002803D0FDF764FB306845603D +:1038100020880009000703D104F0C8F86188451822 +:1038200030684561816A0131816220888004C10F5E +:103830000248F8F7CDFFF8BD147A0100B1EB0000A3 +:103840003C0040EC0000B0B50E4C051C6068FCF775 +:10385000F6FD0C48616800F092FB0021242004F082 +:10386000ECFC0022D2438021242004F0B8FC00208C +:10387000E0602072206801682806000EF1F7B0FBB6 +:10388000B0BD3C007CEC0000047A01003463010010 +:1038900010B5041CC068F2F785FC201CF2F7B0FDDF +:1038A00010BD000070B51C4E051CB07A2C1C4034B5 +:1038B000022826D1A08B3189884222D13068416A02 +:1038C000002908D03C00B8EC00002030007BC00785 +:1038D00004D5012001F02FFD002818D160780028C0 +:1038E00009D1306802232030027B0D495208520072 +:1038F0001A43027301E0FF21F53101221F2004F079 +:103900006EFC0320B0723C00F4EC000002E0281CC6 +:10391000FFF7C4FF6078002803D1291C012003F0C1 +:1039200029FB70BD147A010050C30000B0B5041C1F +:103930006034E0790E4D00280AD10220A872286870 +:103940004068002804D10B483C0030ED0000FDF732 +:10395000D0FA2968486004F038F82968C861FFF790 +:10396000E0FE29680969081A03F06FFF002801D0FA +:10397000E079A071B0BD147A0100C1EB0000F8B588 +:10398000041C002604F021F8051C3C006CED00002E +:10399000224800270770A10704D0E107C90F016280 +:1039A000C5610126416B002934D1002E32D0061C9E +:1039B000F9F744FF316B1A4B411AA20712D5DA68A6 +:1039C000002A08DD91421A6802DA14093C00A8EDC9 +:1039D0000000A21806E01409121B03E00A4302D1FA +:1039E0001A6852001A60B7630AE0B26B0132B26320 +:1039F000022A1A6801DD940800E01409121B1A60FB +:103A0000D9603063F56218680849884201D93C00E2 +:103A1000E4ED0000196003E0642801D2642018601E +:103A2000F5F7FCFDF8BD0000606C0100B057010027 +:103A300020A10700FEB5041C0020504D0021686144 +:103A40002069FBF7B3FC071C20690321FBF7AEFCE0 +:103A50003C0020EE0000002803D0807829788842BE +:103A600063D1474D201C1430391C061C2A7802F003 +:103A70005AFA002859D1E068056841480195583044 +:103A80000290FBF76AFF3E4D193500280BD0281C29 +:103A9000FBF73C005CEE000055FF00281ED1311CF6 +:103AA000281CFBF765FF002842D017E0281CFBF715 +:103AB00049FF002806D0391C0298FBF763FF002855 +:103AC00036D00BE0391C0298FBF75CFF00282FD0A2 +:103AD000311C281C3C0098EE0000FBF74CFF00282E +:103AE00029D0301CF6F7ADFC294A1832117C002988 +:103AF00004D0516A002901D000281CD1906A002806 +:103B00003BD01378019D01216D8901202B409B073B +:103B100011D0A36B1E4E3C00D4EE00001D1C7F355F +:103B20009836002D14D0558A002D08D15569AB4226 +:103B30000FDA0020174D01236B610AE029E0F578C8 +:103B4000022D06D1144F55693F68ED19AB4200DADA +:103B50000020236C1D1C7F353C0010EF000010D0AE +:103B6000558A002D03D19569AB420AD208E0F57859 +:103B7000022D06D10B4E95693668AD19AB4200D2C5 +:103B80000021084308D0106A002801D0F1F74BFA51 +:103B90000021201C01F0B9F9FEBD3C004CEF0000F3 +:103BA000EC650100C4670100CC6701003EB5056A01 +:103BB000041CC068F2F734FBE169F2F757FA201CE5 +:103BC0004030C18B0431C1832B6910499879062894 +:103BD0000AD1988801910294009060693C0088EFB6 +:103BE00000001B680168E0680322C0680AE0022840 +:103BF0000BD11020009001910294E068A369C06885 +:103C000000220021F7F70FFB3EBDF2F7A6F9FBE714 +:103C10000000BDEF000080B5D1685069C9683C0064 +:103C2000C4EF0000C160D168C860111C4031CB8B6B +:103C300000891818C8831068002802D0FFF7BCFF5D +:103C400080BD0348FBF7CCF8006AFEF7F5F980BDAC +:103C5000A06A0100F8B5061C0A2430070109A00774 +:103C60003C0000F0000001430F1C0A4D2F6004F0DF +:103C7000FAFEAD682801000FB04205D0013CF4D235 +:103C800001219B20F2F741F92802000A082E01D1F8 +:103C900031050843F8BD600007000122D20580B558 +:103CA00000213C003CF00000042004F0DDFC0F206B +:103CB000FFF7D6FF0F2109040840000C80BD00006B +:103CC00080B50548FDF74AF90448FDF77BF804483C +:103CD000FDF76CF880BD000089340100ED24000080 +:103CE000111C00003C0078F0000080B50248F3F79A +:103CF0002AFC80BD0000D124000080B5F2F753F902 +:103D000080BD80B50021002001F051FE032002F0AB +:103D100046FF80BD0000064880B5C169002906D174 +:103D2000016A002903D13C00B4F00000816B034814 +:103D300000F05EF980BD0000C46901003463010039 +:103D400010B5044C206AFCF7B3FB0348216A00F06D +:103D50004FF910BD1C75010034630100B0B50D4C66 +:103D6000207C002802D001213C00F0F00000FDF78B +:103D700086F900252570A068012803D10020A560E0 +:103D800001F08FF8A078012805D103489838006920 +:103D9000FCF7EFFBA570B0BD00008466010080B5A4 +:103DA0000021012001F009FE80BD3C002CF1000043 +:103DB00038B569460025F8F7B7FE041C01D101208B +:103DC00038BDA068002804D00099A131082004F073 +:103DD00073FA1C21201CF1F7A3F9281CF0E700005E +:103DE000FEB5071C4C233949584344183C0068F180 +:103DF0000000251C4035287A37494876211C30318F +:103E000002910C23C856421C0A73497B884246DA49 +:103E10003248007880073ED500200190F6F7AFFACF +:103E200000282ED0AC210958002901D0E4303C00F4 +:103E3000A4F1000000E0CC30061C4068002825D02A +:103E40000299087B012811D1201C2E302978F6F721 +:103E5000EDF9716803E07218127A824203D9FF31DA +:103E60000906090EF7D1A97001200190231C3E33E9 +:103E70003C00E0F100001A1D301C00970199F8F792 +:103E800058FA002811D0A8788019007A00E00020A4 +:103E9000687068780121FBF7E0FD6060381C01F074 +:103EA00014FE381C01F0A5FBFEBD0299087BFF3013 +:103EB00048733C001CF20000381CFCF719FC03F0AE +:103EC000C3FD061CFBF78EFE41007618687861681A +:103ED000FBF76AFE3118208D3B1C054A03F012FEE9 +:103EE000E5E7000058E30100308007001D75010080 +:103EF000D54E00003C0058F20000031C044880B579 +:103F000002792030034900F030F880BD0000AC7C1D +:103F10000100C4670100031C044880B5C278383032 +:103F2000034900F022F880BD0000AC7C0100C867A6 +:103F30000100031C04483C0094F2000080B5827923 +:103F40005030034900F014F880BD0000AC7C010043 +:103F5000CC670100031C044880B5427968300349EE +:103F600000F006F880BD0000AC7C0100D0670100C5 +:103F700010B5002484800B603C00D0F20000191CB6 +:103F8000514301601906091610220630F1F79FF916 +:103F900010BDB0B5064D0024AC60EC60EC612C6245 +:103FA00002F0F1FC00F00DF8EC622C70B0BD447D25 +:103FB000010080B580210148F1F73C000CF30000BE +:103FC000C7F880BD04660100F8B5074F002400263D +:103FD00018206043C519EE6003F042FD103501342E +:103FE000022C41C5F4DBF8BDB87D0100002303605D +:103FF000044B002900D1191C4160002A3C0048F301 +:10400000000000D11A1C82607047BD75000010B519 +:10401000074C206801302060202803D958215820FF +:10402000F1F79DFF216801200139884010BD605BD8 +:104030000100B0B50D1C041C2168002000293C00C3 +:1040400084F300000AD0A943216007D1A068F1F7EA +:1040500023F8002802D1216829432160B0BD000067 +:10406000B0B50D1C041C2168002029432160A94221 +:1040700007D16068F1F710F8002802D12168A94340 +:104080003C00C0F300002160B0BD1A4BB0B59A6A85 +:1040900000280BD0002A07DBB8242458013CA41ABE +:1040A0000019B030007B02E00E2000E00D205D6AB8 +:1040B000124C002D01D0207800E0205CFF24A834B1 +:1040C000C4403C00FCF300009C60F524C4409C61AB +:1040D000FD24C440DC61FF242934C4405C61FF241A +:1040E0005334C44000200C3311C3002905D0002AEA +:1040F00003DC0221504200F065FBB0BDAC7E010044 +:10410000B85201003C0038F4000010B5134C1348BD +:10411000211CFF3169310EC90EC0211CFF31242240 +:1041200075310F48F1F751F8211CFF313C229931CC +:104130000D48F1F7A6F8FCF7A2FF211CFF31102271 +:10414000D5310948F1F73C0074F4000041F8211C16 +:10415000FF312822E5310748F1F796F810BD00003D +:1041600040630100008007000C80070030800700DA +:1041700080800700A0800700F8B5002859D004F01F +:104180004BF9F8F7B3FB00223C00B0F4000001212A +:10419000132004F07CF92A492948496C0160002168 +:1041A0002948C9434160264C1434616C8160A16C7C +:1041B000C1600020254D022601016E500A194F19D9 +:1041C000503204370ECA013008283C00ECF40000DD +:1041D0000EC7F4DB1422211CCC311E48F1F75AF82B +:1041E0001D4881780909090181700021C170417061 +:1041F000211CE0310A78027049784170211CE831B5 +:1042000030220830F1F746F8211CFF313C0028F538 +:104210000000502219311248F1F73FF88320800046 +:10422000142221181048F1F738F811204001842297 +:1042300021180D48F1F731F8FFF773FF201CF1F753 +:1042400028FDF8BDFFF76DFFFBE7082007003C00E5 +:1042500064F500002C6301004020070000300700D7 +:104260000040070000500700006007001000070032 +:1042700000900700F8B5051C1848C068002825D034 +:10428000164E013674783078271A7919201CF1F708 +:104290003C00A0F500004BF80090291C201CF1F711 +:1042A000B2F8C119201CF1F742F8601A3070701E84 +:1042B000806800280DD05336F4780099201CF1F75F +:1042C000A2F8B178611A4118201CF1F79CF8601A25 +:1042D000B0703C00DCF5000003485C300169C26846 +:1042E00069435118C160F8BD447D0100B0B50C4D63 +:1042F000E868296940187D2109014418201C03F051 +:104300000BFB00280AD003F0CFFB011B2869F1F753 +:104310007DF801303C0018F600000004000CFFF7A7 +:10432000B2FFB0BD0000A07D010070B5104C606808 +:104330008025A84360602068284320600D4E301C13 +:104340001030F3F7C8FC002803D107218520F1F7CE +:104350002AFE084800213C0054F6000080684163B2 +:10436000C06C10307061012030612068A84320606B +:1043700070BD0000F400070000300700247E01003B +:10438000011C0020052980B509D202A35B5C5B00FB +:104390009F440000030303033C0090F60000030069 +:1043A000FFF7CFFC80BD0122920280B500210720DB +:1043B00004F0ABF980BD80B540220021002004F05C +:1043C000A4F903220021002004F09FF980BD70B5FC +:1043D0000E1C051C141C08280ED13C00CCF6000055 +:1043E00000F000FC0E2801D1142000E01020E103B1 +:1043F00000D50138C0060A49C00E887108E0092DB1 +:1044000006D1A00401D5002000E00120F3F7B0F9A7 +:104410003440211C321C281C04F07AF93C0008F7B7 +:10442000000070BD00000080070070B50024132953 +:1044300011D8002801D1084E0825012801D1074EC6 +:10444000092500F078FA002805D0021C311C281C30 +:10445000FFF7C3FF0124201C70BDF8FF07003C00DC +:1044600044F70000FFFF00000122D20280B50021C6 +:10447000072004F053F980BD0F22120407214904DC +:1044800080B5092004F04AF980BD000080B5002104 +:10449000042004F01BFC4021002004F017FC044918 +:1044A0003C0080F700000020886002480969203045 +:1044B000FFF709FE80BD64730100B0B560210020E4 +:1044C00004F007FC114D002400220420295D04F0B3 +:1044D00028F90C2003F09BFB01342406240E052C44 +:1044E000F2D33C00BCF700000F2200210A2004F0A8 +:1044F0001BF96121002004F0EFFB064901208860D0 +:10450000044809692030FFF7CDFDFF202D30B0BDF4 +:10451000A858010064730100F8B5061C1248C67063 +:104520000120FFF73C00F8F70000FDFB0127BF0268 +:10453000041CB843011C012004F0D1FB0320FFF749 +:10454000F2FB051CB843011C032004F0C8FB301C1F +:1045500000F09FF900F057F8211C012004F0BFFB88 +:10456000291C032004F03C0034F80000BBFB0020B1 +:10457000F8BD00006473010080B5002240210020D6 +:1045800004F0D8F880BD000070B5051C0124092096 +:10459000FFF7CCFB0F210904884303218904E204BF +:1045A000052D124E20D202A33C0070F800005B5D86 +:1045B0005B009F44000006090C100300032109045E +:1045C0000CE00121090409E00121490406E0F36837 +:1045D000042B05D902E0F368042B01D8014301E064 +:1045E0001043011C092004F080FB3C00ACF80000E3 +:1045F000201C70BD0024FBE7647301000121C90584 +:10460000002880B502D00A1C002100E0002204200E +:1046100004F096F880BD0000F0B591B0002640216E +:1046200001A8F0F7DDFD2A4FB87901223C00E8F837 +:104630000000520300900021062004F084F860215D +:10464000002004F058FB6121002004F054FB0820F6 +:1046500003F0EFFA00240F20FFF771FB4005050F70 +:10466000A80001A9095801AA013101340C2C3C0011 +:1046700024F900001150F1D30020810001AA515803 +:10468000B14201D90E1C051C01301028F5D30620BB +:10469000FFF758FB0F2149028843690208430121B3 +:1046A00049030143062004F029FB0D488468643463 +:1046B0003C0060F9000008E0201C03F05AF90028D3 +:1046C00003D001219520F1F798FC0F20FFF73DFB67 +:1046D0000004F1D5872003F0B2FA0098B87111B048 +:1046E000F0BD201007000001070010B5174C6169EC +:1046F00000293C009CF9000004D00A21132003F09B +:1047000047FE10BD011C1248012900780CD0112968 +:10471000F7D1052803D101211320F1F771FC20788E +:104720000728EED102210AE0052807D006280AD082 +:104730000728F7D03C00D8F900000828E4D1002071 +:1047400005E001211320F1F75EFC10BD012002F00D +:104750006CFD10BD00007C7801000D4980B5097822 +:10476000032901D100280BD0072901D1002807D047 +:10477000022901D100283C0014FA000003D10529C8 +:1047800009D1002807D00020FCF728FD00221321C2 +:10479000112003F0C1FE80BD7C78010080B50622A7 +:1047A0000821002003F0DEFF80BD0000074880B52F +:1047B0004069002801D1F1F73C0050FA000033FFB6 +:1047C0000549054A0868506148689061012080BD2C +:1047D000000064730100B058010010000700074892 +:1047E00080B54069002801D1F1F71DFF0549054A50 +:1047F000086890614868506101203C008CFA000014 +:1048000080BD000064730100B05801001000070073 +:1048100011B500AB597814480123C056002209187D +:104820000B061B161321132B02DD00AB597007E09A +:10483000002B02DA00AB5A7002E01C1C3C00C8FAE4 +:10484000000000AB5C7000AB1B7818180006001667 +:10485000132802DD00AB197006E0002802DA00AB75 +:104860001A7001E000AB1870009818BD0000647366 +:10487000010038B50C1C154900AB496813253C00F4 +:1048800004FB00000091597809185970197808182C +:10489000187019881048022CC18001D0002C0BD14F +:1048A00000AB1878132800D91D7000AB19780020D0 +:1048B000FFF7EEFD022C01D0012C09D100AB587896 +:1048C0003C0040FB0000132800D95D7000AB597814 +:1048D0000120FFF7E0FD38BD000064730100A0581F +:1048E000010070470000B0B5041C0E28134D04D021 +:1048F0001249A00000194D3945180620FFF73DFA6E +:104900000F493C007CFB0000E02209191039C97BEB +:104910009043490111400143062004F00DFA291C7F +:104920000520094A03F030FF08481F2200191038FB +:10493000C07BC104D204082003F026FFB0BD0000F4 +:10494000B40900003C00B8FB000014450100FF0F53 +:104950000000C05801007047000080B506490028DB +:1049600001D1086880BD012801D1486880BDF1F7F8 +:1049700090FB002080BD7C730100014840687047B7 +:104980000000A05801003C00F4FB00000448012393 +:104990000449C056C95640180004000C7047000076 +:1049A000A0580100A258010001484068704700006B +:1049B00064730100F8B5051C0E1C00F055F9041CC9 +:1049C00000F058F900282CD03C0030FC0000B30067 +:1049D000601E002D1C4E19491A4A06D10B250E2CBB +:1049E00000D1194AD258085608E0012D1CD19A1856 +:1049F0000436081808250E23126DC056071C4743BD +:104A0000FB00DF19124B3F2158433C006CFC0000B7 +:104A1000114BA9400C1C3818C0181440EC40C011B0 +:104A200060431B0AC018801203D1012004E000205B +:104A3000F8BD3F2800DD3F203060A84008408A4391 +:104A40001043F5E7CC590100DC5801003C00A8FCFC +:104A500000007C7301007C5901000606000026005E +:104A60000200034808B5C08800AB1880009808BD54 +:104A70000000A0580100B0B50B4D094C0E206C6031 +:104A8000FFF78DF90949021CC8600106090E3C00B8 +:104A9000E4FC0000133A022A02D91738042800D88F +:104AA0000021081C6C60B0BD041802006000070003 +:104AB000647301000A4898B502781321142A00D3C0 +:104AC00001704278142A00D34170064C6068FFF7E9 +:104AD0003C0020FD0000BDFE009000AB1888E08087 +:104AE00000F075FF98BDA4580100A05801000348CC +:104AF00080B541780120FFF7E6FC80BD0000A65894 +:104B00000100034880B501780020FFF7DCFC80BD80 +:104B100000003C005CFD0000A6580100B0B5054D4A +:104B20000024201CFFF744F90134102C01C5F8D3F0 +:104B3000B0BD0000D4440100044980B58870044928 +:104B400080000958072004F00FF980BD647301004C +:104B5000D05801003C0098FD0000B0B53F24021C75 +:104B6000002A01D108200B23012A01D109200823A2 +:104B7000251C9D40002900D101213F2900D9211C7D +:104B800099400A1C291CFFF77CFCB0BD000091B5C0 +:104B9000124900AB1A783C00D4FD00000878114C93 +:104BA00080180006000E207049785A788918090686 +:104BB000090E13221328617000D92270132900D91D +:104BC0006270084908480639C98881802178002028 +:104BD000FFF782FC617801203C0010FE0000FFF727 +:104BE0007EFC98BD0000A4580100A6580100647323 +:104BF000010070B51D4D041C28780E1C032803D13C +:104C000002211120F1F735FA201C00F04EF800289F +:104C100025D0287801280AD168683C004CFE0000A5 +:104C2000002807D00121112003F0EEFB0120696864 +:104C3000F0F7BDFA6C706E60201CFFF7C1FC041C1D +:104C400000F0D4FE002C02D06868002802D1F6F7EC +:104C5000D9F870BD012028700122211C3C0088FE7B +:104C60000000112003F09FFB70BD02211120F1F71D +:104C700006FA70BD00009C73010080B5012805D1C3 +:104C8000002904D0012901D1F6F7BFF880BD0549FC +:104C90000878032802D00020087080BD03213C0062 +:104CA000C4FE00001120F1F7EDF980BD9C730100F6 +:104CB00001484078704700009C730100011C0139D5 +:104CC00001200E2900D300207047000010B5134CBE +:104CD000207801280ED1606800280DD00121112014 +:104CE0003C0000FF000003F098FB01206168F0F732 +:104CF00067FA00206060207001E003280ED00021D8 +:104D0000112003F08AFBFFF724FCFFF7C0FB0549E5 +:104D1000087B40084000087303202070012010BD6C +:104D200000003C003CFF00009C730100880007006D +:104D300010B50D4C2078032813D1002020700B48AB +:104D4000017B012211430173FFF770FCFFF718FC90 +:104D5000002806D002212170011C0022112003F03E +:104D60002BFB01203C0078FF000010BD00009C736D +:104D700001008800070080B50549002804D0002004 +:104D8000086003F05AFA80BD0120086080BD805A97 +:104D90000100FEB5051C8035041CA8682979066849 +:104DA000201CA03002293C00B4FF00001CD169790E +:104DB000082901D00C2917D101216162A96809686D +:104DC000098B0182A9690191008AC00605D5606836 +:104DD0000088400501D4012000E000200290052059 +:104DE00001A902F0B7F902E03C00F0FF0000002149 +:104DF00061620182A9681A230A89676A181C002F58 +:104E000000D11820101A0881A8680168626A002A77 +:104E100000D11823C9180160A86841C43088083C33 +:104E2000400403D5201CF7F7BCF93C002C0001001E +:104E3000FEBD0021E1613079C00703D4201CF7F7E3 +:104E400091FEF5E7201CF7F743FFF1E7F7B5051CE6 +:104E50000A30061CF5F7A4FA144F041C3988F2F73F +:104E600083FE328878680280728802303C006800D5 +:104E700001000280B18841806988029A201CFAF7FB +:104E8000CEFE0B4D08356880FBF72BFE0121090390 +:104E90000028288801D0884300E00843288004487F +:104EA000002200211430F2F732FE201CFCF73C00F7 +:104EB000A400010085FAFEBD247B010010B5134C4F +:104EC0001149201CFF3069300EC90EC0201CFF3074 +:104ED000242275300E49F0F717FA201CFF303C22CF +:104EE00099300C49F0F76CFA201CFF301022D530B5 +:104EF0003C00E00001000949F0F709FA201CFF30EE +:104F00002822E5300749F0F75EFA10BD0000008066 +:104F10000700406301000C8007003080070080809C +:104F20000700A0800700B0B500283FD021484168A5 +:104F3000214C3C001C0101006160C168E160016915 +:104F40002161806AA0621E491C48096814384164C6 +:104F50001C48251C3C350FC80FC5201C80224C3036 +:104F60001949F0F733FA1422201CCC301749F0F716 +:104F70002DFA38223C0058010100201CE030154970 +:104F8000F0F727FA201CFF30502219301349F0F7B0 +:104F900020FA83208000142220181049F0F719FA13 +:104FA00011204001842220180E49F0F712FAFFF771 +:104FB0008EFFF8F794FB3C0094010100B0BDFFF7B1 +:104FC00089FFB0BD00100700406301000820070002 +:104FD0004020070000300700004007000050070095 +:104FE0000060070010000700009007000C4980B522 +:104FF000012048600A4814383C00D00101000078C4 +:10500000012804D008489438406F002803D00020BD +:1050100000F01FF880BD08680028FBD00348F2F7B5 +:105020007AFE80BD000098660100FFFF000080B599 +:10503000002809D1F2210F2003F03C000C020100EE +:1050400013FA00220F21F12003F0CCFA80BD0120D9 +:10505000F8F76AFE80BD000010B5041C032000F0C4 +:10506000C9F900210F2003F0FFF9FFF765F80B499C +:1050700000204874FBF7E6FA094800683C00480243 +:105080000100002803DC02214042FFF752FC0448E3 +:1050900014300068002802D0201CF2F742FE10BD38 +:1050A000000084660100D47E0100064980B50978BD +:1050B000042905D0052903D0062901D007293C0081 +:1050C0008402010001D1FEF7BDFD80BD74660100C0 +:1050D00010B5094CE06800280BD107482C38008A2D +:1050E000C00704D5002101206268F9F7C9FA012040 +:1050F000E060012010BD0000F46E01008CB5021CC0 +:105100003C00C0020100081C111CFDF728FF0190A3 +:10511000002805D0172000AB18806846FDF7FFF87F +:105120008CBDF1B52E4CAEB0002525632069012859 +:1051300003D101A801F0A1F84EE00126284F267006 +:10514000503F3C00FC020100B869F8F74FF82549D0 +:105150002C3900281DD0E06A01281AD1088A0F1CBA +:10516000800704D5002102206268F9F78FFA388A97 +:10517000000707D5E068012804D1002108206268F3 +:10518000F9F784FA3C00380301000022182182203C +:10519000266303F036FA25E0088A0E1C800704D542 +:1051A000002102206268F9F774FA308A000707D5F7 +:1051B000E068012804D1002108206268F9F769FA43 +:1051C000308A400704D53C0074030100002200210E +:1051D0000420F9F761FA2E98012804D01E950921C0 +:1051E0001BA8FFF797FFE562BD61E5602FB0F0BD3A +:1051F000F46E010080B50720FEF7A0FE00210F200D +:1052000003F044F90C4801783C00B0030100002988 +:105210000FD00221017088380078002804D0074997 +:105220001031487C01304874F2220F20054903F008 +:10523000FCF800220F21F32003F0E9F980BD746629 +:10524000010080841E0010B5041C3C00EC0301002A +:10525000F2210F2003F020F9012C0AD10848084957 +:1052600000681439002805D0C878022802D1F7F761 +:10527000AFFA10BD002048700520FEF765FE10BD96 +:1052800098660100F8B5284E3021351C3C002804F2 +:10529000010060352889895D884203D10020FFF72D +:1052A000F6FEF8BD341C70340121217041188019BC +:1052B0003030298140781D4F183F3870002808D0C1 +:1052C0000021FBF7C2F9002807D12078FFF73C0046 +:1052D000640401009BFFE7E701210F20F0F71AFFAC +:1052E00014480121803081703869FBF755FA20732A +:1052F00000210F2003F0D6F8707A01280ED10E4855 +:105300000068002804D0387802F0DAFA002805D0C6 +:105310003C00A0040100307F60730320207071897D +:1053200005E005202070A888FAF73BFB011C00224D +:105330000F2003F086F8BAE7000004660100E4627B +:10534000010070B5041C02F06CFC364B191CA03136 +:105350000A783C00DC040100102A02D20A79102AE3 +:1053600001D3012500E00025304ECA798036012C9A +:1053700012D00025022C2ED0042C3CD15C6B002CCA +:1053800039D19C6F001B2A4CA04234D9B268986A6C +:10539000824231D03C00180501004D7234E0B06803 +:1053A0009C6A0222A04221D1586B00281ED1002DF8 +:1053B0001CD1487A192820D03468986F6400001BEB +:1053C00074680019FF301C4C3930A04216D248795D +:1053D0008C79001930283C005405010011D31022AB +:1053E0000FE05C6B012C06D1B0689A6A904200D144 +:1053F0004D72002205E09C6F001B124CA04200D3AE +:10540000202206E04A7A192A01D201324A72202269 +:10541000B06030689B6F98423C009005010004D159 +:10542000002A00D148794A7106E0102A04D370603E +:10543000336048798871F6E7CA7170BD0000A46CCA +:105440000100A304000071020000350C00000548B3 +:1054500080B5817B002905D000213C00CC050100EE +:10546000817303490F2001F00FFF80BD74660100B6 +:10547000E9030100F8B5041C02F0E2FB051C384EFC +:10548000201C3749341CA0341022443901282CD068 +:1054900004284ED1371C743609CE26783C00080605 +:1054A0000100C01A202E04D1304EB04201D900268E +:1054B0004E613E1C3F6C002F48D1776C002F45D1C8 +:1054C000B76A002F3DD0776B002F3AD0274FB842F4 +:1054D00037D26078102806D3F06F181A244B3C009E +:1054E00044060100984201D2E270F5664869062838 +:1054F0002FD201302CE02078202801D106234B61E7 +:1055000002232371B36A002B19D04969032916D9E4 +:10551000716B736D594012D0E178102910D3617806 +:105520003C0080060100331C10290CD3D96F691A86 +:10553000134DA94207D2586C002802D0986C00285D +:1055400000D12271F8BD0228FCD12270FAE7486927 +:10555000002801D0013848610A49F06E401802F075 +:10556000B0FA3C00BC0601000028EED00120E0703B +:1055700006482818F066E8E7A46C0100E204000081 +:105580001A06000053070000002D3101005A620284 +:1055900080B541680979C90713D5C16900290DD0C3 +:1055A000897902293C00F80601000AD10821018608 +:1055B000011C38318162021C06480449F9F7FDFCE0 +:1055C00080BDF7F7DCFB80BDF7F723FB80BDB97129 +:1055D0000000A06A010010B50024002803D002F0EA +:1055E000E8FE002817D03C00340701000C4C0120D5 +:1055F000A0722068002141620A490268C9786032BD +:105600009171218901312181006840308183FBF74C +:1056100031FC20680068FCF7A1F90124201C10BDB2 +:10562000147A01000E6101003C00700701007FB593 +:10563000061C1E481D1C438802881C21002090B0B7 +:10564000F0F745FF03900468FF2101312180082015 +:1056500060800620207104206071C001002D00D1FF +:10566000081CE08001A80230311C3C00AC0701009E +:10567000051CFAF75FFA10496846FAF75BFA201C36 +:1056800008306946FAF756FA291C201C1230FAF73E +:1056900051FA10AB9888002201212083D8886083BA +:1056A0001889E081588920826846F9F73C00E807AC +:1056B000010017FF14B070BD0000146E01001261EC +:1056C0000100B0B5041C1848251C0078603580071F +:1056D000002808DAE879002805D0F4F770FF011CEB +:1056E000201C00F078F929882E20005DF2F73C009C +:1056F000240801009FFAE87900280BD1201C4030D3 +:10570000018B22691180418B22695180808B216934 +:10571000C88207E0012805D1206901220188D20250 +:10572000114301806A7AE0680249F2F753FAB0BD8A +:105730003C00600801001D750100D14F000090B5CC +:10574000041C38230C495843431885B000200A49EB +:105750000290181C012203910949049230304278CA +:1057600009880192009101785A6B0C33201CFBF7D9 +:105770007CF83C009C08010005B090BDD4E4010019 +:105780005D4E0000487B010090B585B0031C0020F1 +:1057900002900A49181C0022049260300391C279D9 +:1057A0000188019200915A6ADC682033997B407A23 +:1057B000231CFBF73C00D80801005DF805B090BD44 +:1057C00000000D4F0000074980B5886A002808D105 +:1057D00001208862F0F7AFFC011C03480022F2F7B9 +:1057E000B8FE80BD00007869010041E40000F0B51A +:1057F0009BB0002820D03C0014090100011C08A81F +:10580000FCF7B2FD01201190032010AD2872042096 +:10581000687205A800226946F4F700FF00240026FC +:1058200005A90020F9F7FCFA6946F9F7F9FA0B9097 +:1058300008A8FCF7BBFD01343C0050090100022C14 +:105840002E72F0DB1BB0F0BD000090B5041C4C23A1 +:105850000C495843431885B000200A4902900022A1 +:1058600004923C200391C25C084841880192412087 +:105870000091C15C5A680833201C3C008C0901006F +:10588000FBF702F805B090BD58E30100754F00002A +:105890003C7C0100F8B50E1C224C3821171C051C5D +:1058A000201CEFF775FD231C2533211C243110200B +:1058B0006A46F9F71DF800AB188807213C00C809B3 +:1058C00001001A4A02382084201C20308170C570E3 +:1058D000111C0673477334312163303262630179DE +:1058E000251C103521812060E5601888401A20832E +:1058F000201C28302061201CF9F711F80D483C00CD +:10590000040A01000068002807D00621201CF8F7CF +:1059100047FD1021281CF8F743FD084802210162C9 +:1059200044620121016206480068EFF7D5FCF8BD2A +:105930008C8E0100E4FE0100CC5C01000030070009 +:105940003C00400A01005C5B0100F0B5061C4036DB +:10595000318B041C251C0807800F6035012885B099 +:105960003BD0E879002805D120690180B08B2169FE +:10597000C88207E0012805D1206901220188D202EE +:1059800011433C007C0A0100018020480078800718 +:1059900026D5E879002823D0A06B00281CD0F4F786 +:1059A0002FFE002809D0B8210958002905D0302140 +:1059B000095DB4300818077A00E000270121381C7F +:1059C000FAF786F93C00B80A010004902069043017 +:1059D000391CF4F76CFD0499FAF7D3F902E0201CA6 +:1059E000F7F7F9FB7083708B216900224880094921 +:1059F0000A48049203910290EA7929880192009161 +:105A0000626AE36820343C00F40A0100A17B687AF2 +:105A1000FAF74CFF05B0F0BD1D750100D14F000035 +:105A2000DD2F0100FEB5041C261C012020360029B4 +:105A300002902ED05820005B0007800F012801D172 +:105A4000CC3100E0B43148683C00300B01000D1C43 +:105A5000002824D0201C6030C2790121012A00D006 +:105A60000021271C626D3037002A04D03A1C281C04 +:105A7000F6F7E7FD07E0427A231C683300923A1CF0 +:105A8000281CF6F79AFD029038783C006C0B010058 +:105A90004019007A0121B073FAF726F901E00020DD +:105AA000B0736062B07B0D2801D9F0F7BBFB0298A0 +:105AB000FEBD0000FFB5041C8030251C5E3500785B +:105AC000AE1DAF1F002883B012D1F4F73C00A80B25 +:105AD0000100C7FB002807D006980599029004989A +:105AE0000190A66167610DE00498069902900598FF +:105AF0000190666105E004A903C90290069801902F +:105B00006761A5610622381CEFF78BFC06223C007A +:105B1000E40B0100281C0299EFF786FC0622301CDA +:105B20000199EFF781FC07B0F0BD0000B0B50D1C86 +:105B3000041C052801D3F0F77BFB0249A00008589C +:105B40008560B0BD107B0100F8B5FFF759F9051C61 +:105B50003C00200C0100FEF7E8FF041C281CFFF7A6 +:105B600058F9002842D0691E214D4A00204B1C3DA7 +:105B7000AE5C985C3040D6180123F6565219D256C6 +:105B8000964201DD151C00E0351C184B2A3B595686 +:105B900051183C005C0C0100B14200DB311C0E1CB2 +:105BA000002826D0FEF7BEFF009000AB18781249FF +:105BB0000023C95600AB1522101A5B78001B401851 +:105BC000D21A121B51180022854202DB00AB1A7058 +:105BD00002E0401B3C00980C010000AB18708E42A4 +:105BE00002DB00AB5A7002E0881B00AB58700098D3 +:105BF000FFF78DF801F0FFF8F8BDE6780100657356 +:105C0000010070B5084E064D00240620604380193F +:105C10000622291CEFF73C00D40C010011FC0134D2 +:105C2000052CF5DB70BD00004E470100E67A01004F +:105C3000034880B501680348FEF742FB80BD0000C1 +:105C4000A8790100C4600100034880B501680348D9 +:105C5000FEF74AFB80BD00003C00100D0100A87952 +:105C60000100C460010010B500280AD0064CA169EB +:105C7000002901D1002000E00968F7F738FBA06196 +:105C800010BD002010BDA46E0100F3B5374883B0ED +:105C9000029080790E1C002701903C004C0D010001 +:105CA0003448354A016A039C031C1B69A14201D098 +:105CB000936100E0536131498A6896423FD02D4894 +:105CC0008E60C1680024251C00292D4809D0002EB3 +:105CD0000BD028480124C06A240300283C00880D0A +:105CE000010006D0012704E0002E01D0051CF9E7D1 +:105CF000041C002F06D0FBF71EFB1F48016822483A +:105D0000FEF7FBFA201C28430ED02A1C211C012080 +:105D100002F021FE2A1C211C022002F01CFE3C0085 +:105D2000C40D01002A1C211C032002F017FE002FC5 +:105D300006D1134801681648FEF7CEFAFAF742FD7D +:105D4000039C002C01D101F0E1FF01A903C9887176 +:105D500001F0DCFF0A4C0A4B443CA1692269083B74 +:105D60003C00000E0100411A002A03D01A685118A5 +:105D7000196002E05A6851185960A061266105B0A7 +:105D8000F0BD20100700A46C010010000700B05700 +:105D9000010000106000847301001CB54C23084909 +:105DA00058433C003C0E01004418201C4030417810 +:105DB0006268009101923F210B5D618F0078626CF7 +:105DC000FAF728F8A0851CBD58E30100B0B5164DC0 +:105DD000A969002925D02C1C3034207A002820D035 +:105DE000002381223C00780E0100182002F089FC7B +:105DF000207AFF300006000E207212D10C482821B4 +:105E00002C38095C2172297A002901D1006A00E04E +:105E1000406AA9698002814203D24900814201D2CD +:105E2000A961B0BDA8613C00B40E0100B0BD01F095 +:105E30001DF9B0BDF46E01007FB5051C04206B4652 +:105E40001B180290002628186A4602A9FCF78AFB54 +:105E5000002806D100AB1879042808D01879032847 +:105E600005D000AB187910213C00F00E010008436A +:105E700004B070BD03A9E868F6F7D3FF002805D089 +:105E80000398202108430006000EF1E703A9002033 +:105E9000F6F7C7FF041C01D10220E9E7E86800AB70 +:105EA0002060009860601879A0763C002C0F0100FB +:105EB000A88C6076E8692061688CA082288C2076A6 +:105EC00069690948814200D9081CA060201C02F0C1 +:105ED000A1FDA168002904D0039AA132082002F094 +:105EE00037FB301CC7E70000A08601003C00680FAC +:105EF0000100FEB5061C40780124062850D3C11EBF +:105F00000320EFF75EFB00900E2849D800200AE03E +:105F10004100091889194A798979511801390E29DE +:105F200000D90024013000998842F1DB002C3C00AC +:105F3000A40F010037D00322B11C1B48EFF7A4FACD +:105F40001A4C1C21201CEFF74DFA002528E06900AF +:105F5000491902918A1953791548435493790F18B6 +:105F60007B70D379BB700723D2560192445C0FE05B +:105F70003C00E00F0100201CFEF77BFF002807D04B +:105F80000C4A600080180121103881730199C17397 +:105F900001342406240E07480299405C79784018A1 +:105FA000A042E8D8013500988542D3DBFEBDE86207 +:105FB00001003C001C100100E6780100EB620100CA +:105FC00001680F2901DD0F2101600168002901DA54 +:105FD0000021016070470000F8B5041C1E48221D16 +:105FE00005680092161C231C0F1CCC332A1C201C95 +:105FF0007030A16D3C005810010000F03EF9009691 +:10600000A16D27200140231CE433201C2A1C5C3096 +:1060100000F033F9134800780E2801D2012585409D +:106020001148A1690078294000070BD4480703D51F +:10603000080701D504203C00941001008143880624 +:1060400003D5480601D520208143231CB4332A1CE4 +:10605000201C3030009600F013F9391C201CF0F79A +:1060600047FCF8BD2C7D0100106701001D75010083 +:10607000B0B5F2F727FCFEF73C00D010010009F99B +:106080000F48002545700E480D4C00885B34A082F7 +:10609000F9F723FD2061A08A002804D00121890599 +:1060A000EFF70DFBE18205480138456001F055FE30 +:1060B000021C231C00210020F4F73C000C110100FD +:1060C00049FDB0BD457D0100F467010070B5161CA7 +:1060D0005A89041C04989207920F00250029A27186 +:1060E00009D00521F9F724FB002801D0C07800E091 +:1060F0000120E07100E0E571E560A6603C00481118 +:10610000010070BD0000FEB5051C0E229C30164932 +:10611000EFF7CFF9291C281C8030883100242F1C70 +:106120006037029101902006000E061CF9F70DFE63 +:10613000002803D001984268029901E0EA6D3C0012 +:1061400084110100391C002A0DD0002003E00B5CF3 +:10615000B34202D801309042F9DB08181038C07BF6 +:1061600029199031087301340E2CDFD3FEBD0000D5 +:10617000CC470100FFB581B0141C101C06220D1C79 +:106180003C00C0110100191C0B9E0A9FEFF797F904 +:106190000622391CA018EFF792F9E6602C60102057 +:1061A00028816E600198E86005B0F0BD000070B510 +:1061B000041C002020615820005D0E1C151CC00727 +:1061C000C0173C00FC1101000130E061216B002987 +:1061D00036D11E490968294332D0A168898A00292D +:1061E0002ED000280BD0201C583000F0F3FD0028E2 +:1061F0001BD0816A026A406A0978007806E0144A76 +:106200003C2311783C0038120100507843439A181F +:106210000432002D03D1022901D0032902D16D21BE +:1062200022610855206900280DD08188002901D1FC +:10623000012070BD8079022805D1221C074907483A +:10624000F8F74BFF02E03C0074120100201CEFF74E +:10625000B5F8002070BD00002861010068610100F0 +:10626000A1DA0000A06A010010B500210020F9F7B2 +:1062700039FEC400F9F754FE2418F9F747FE08491F +:1062800020180988084C40183C00B012010006494B +:10629000098840186061F9F746FE054909884018E9 +:1062A0004000A06110BD0261010004610100D479C9 +:1062B0000100A66901001140081C10B51C1C191C26 +:1062C00008311860F1F731FE60603C00EC1201000B +:1062D00010BD0000F8B5061C22480F1C4168914211 +:1062E00003D000218160C1604260C46815E02820AD +:1062F0001D4960434018051C0622311CEFF770F859 +:10630000002807D1A81D391CF9F710FD3C002813FF +:106310000100002801D00120F8BD01342407240F1A +:10632000124880688442E5D1104C2823A0680F4DA4 +:10633000584340190622311CEFF7D3F8A0682823F0 +:106340005843401906302222391CEFF7CAF83C00A6 +:1063500064130100A06801300007000FA060E1682D +:10636000814203D101310807000FE0600020D6E729 +:10637000EC650100A0F4010010B50021032000F03D +:10638000E5FF054CA068002804D101F007FD616815 +:106390003C00A0130100401A606010BD0000D060F6 +:1063A000010002680A6001607047011C0068002853 +:1063B00001D002680A6070470000FEB5141C1D1C65 +:1063C0000022D24301ABF3F782FF01980026284058 +:1063D00001903C00DC1301000025002720601EE036 +:1063E0000121B9400A1C024018D0884301903906A7 +:1063F000090E7019001902910177081CF9F7C6FC03 +:10640000002806D0301C0019013602993030017086 +:1064100004E0281C3C001814010001350299001901 +:106420000172013701980028DDD17019A061656003 +:10643000E662FEBD0000B0B5144D041C287A0128A8 +:1064400002D10420F6F7ADF9211CA86AF5F721FC6A +:10645000002803D104203C0054140100F6F7A4F9ED +:10646000B0BD02202870288C002800D06081688C84 +:10647000002800D0A081A88C002800D0E081E86925 +:1064800001230204120C201C0249FCF719FFB0BDC5 +:10649000F46E0100A17700003C0090140100F8B5F3 +:1064A000194E051CB069002800D13068FFF73BFC8D +:1064B000154F041C503700280BD06068291C7860E9 +:1064C00001203863201CF5F7EAFB002804D10020E6 +:1064D000F8BD0023FB62FAE700233C00CC14010066 +:1064E0002377F86A002801D10120F862387A012860 +:1064F00007D0F86906490204120C281CFCF7E6FED6 +:1065000001E0FB62B3610120E5E70000A46E010039 +:10651000DD02010070B50D1C041C161C3C000815A2 +:106520000100042C1BD21048834207D258000F49A7 +:10653000EFF7FBF8FF30000A013800E000201F35BC +:10654000EA066107090ED20E11437207520D11437C +:106550000006000A0843064AA100505070BD3C00E6 +:106560004415010001218D20EFF7ACFE70BD000045 +:10657000409C000000803801E8600100094A80006A +:106580001058400940010722024307480368002BC6 +:10659000FCDB42600906016001680029FCDB082081 +:1065A0003C008015010070470000E86001003020C9 +:1065B0000700B0B5041C0D1C0749A00008580028AE +:1065C00003D102218D20EFF780FE291C201CF6F755 +:1065D000A8FAB0BD0000E8600100B0B5041C0D1CB5 +:1065E00007493C00BC150100A0000858002803D151 +:1065F00002218D20EFF76CFE291C201CFFF7C4FF41 +:10660000B0BD0000E8600100F8B50D1C161CF7F7DE +:1066100017F9041C2868404F817800293BD1C178C4 +:10662000002958D13C00F8150100F8F7F8F9228E3E +:10663000618E8A4204D0A16A0918E069814210D9AA +:106640003849321C486B01304863206A01302062AF +:10665000386801303860E0686369291CEEF7D8FEBD +:10666000F8BD013212043C0034160100120C2286DF +:10667000A162B868002834D12C480C2300681B1A8A +:106680009A4207D219239B01AF2292015843101A54 +:10669000814226D30120B86001210C2000F07AFE4F +:1066A0001FE001291DD1C0783C0070160100172899 +:1066B0001AD1A08EE18E884214D3E968096809795D +:1066C00009060FD5606A321C01306062E0686369B8 +:1066D000291CEEF7A3FEE868016808310B2000F0E2 +:1066E0005CFEC3E70130A086A08D3C00AC16010023 +:1066F000E18D884204D103210220EFF7F5FDB8E7D0 +:1067000060684560866000686060F8680130F86025 +:10671000A08D411CA1850028ABD10848B969FDF7BF +:1067200061FE221C0221F12002F064F83C00E81610 +:106730000100A1E70000FC5A0100905C010018571D +:106740000100C460010080B5021C0221F02002F0AB +:1067500054F880BD0000002803D102484178C907E1 +:10676000FCD5704700000400070080B500063C001F +:106770002417010001D1F1F771FE80BD80B5F4F757 +:10678000E5FA80BD80B5F6F7EBF880BD0149002041 +:10679000087470477869010080B5C00703D50249C5 +:1067A000012000F01DFC80BD50C300000006000E5B +:1067B0003C0060170100012880B502D1F6F7E1F92D +:1067C00080BD0028FCD1F1F74CFE80BD000080B5F3 +:1067D000F6F7D7F980BD034980B500200874F6F7B5 +:1067E000FEF980BD00007869010080B50006000E4A +:1067F000F1F73C009C17010071FE80BD10B5012827 +:1068000008D0022803D0032801D0EFF7A7FDF6F740 +:10681000E9F910BD01F0F8FA041CFAF75DFD241A3D +:10682000FAF73EFD084900280BD0486A002808D036 +:10683000064884423C00D817010005D2011B012202 +:10684000072001F0F4FEE5E700204861E2E77869FF +:10685000010050C30000094980B5486900280CD0E8 +:10686000086ACA69801A002807DD002048610121F2 +:10687000072001F010FF3C0014180100F6F7B8F9EA +:1068800080BD00007869010080B500F0E7FB80BDA5 +:1068900080B500F03FFC0020F7F7D4FC80BD00007D +:1068A00080B500F037FCFDF76FFCF5F773FD30F0B5 +:1068B00047FB80BD044880B53C0050180100C16A08 +:1068C000006BF2F7DEFF0120F7F789F880BDA46CBA +:1068D000010010B5F3F741F80D4C002804D0012059 +:1068E000E064F7F7B2FC10BD01210120F3F7E9F8ED +:1068F000FDF74DFC606D002803D03C008C180100B2 +:10690000F3F782F8002801D0F5F74AFD0120F2F7ED +:10691000C1FC10BDA46C0100044880B5C16A006BC5 +:10692000F2F7B2FF0120F7F75DF880BDA46C01001B +:1069300080B500F0F5FBF5F733FDFCF73C00C81817 +:10694000010031FDF9F7CBFF0420F2F7A6FC80BD72 +:106950000000034880B5C16A006BF2F798FF80BD64 +:106960000000A46C010080B500F0DDFB0020F7F70B +:106970003CF830F0EEFA80BD000080B500213C000C +:10698000041901000120FFF719FA0120F2F788FC31 +:1069900080BD000080B500F0C9FBFCF707FD0121B8 +:1069A0000120FFF70BFA0420F2F77AFC80BD00000B +:1069B00080B500220021002000F08AFB80BD00008D +:1069C0003C0040190100034880B5826A012104207F +:1069D00000F081FB80BDD479010080B50022002148 +:1069E000032000F078FB80BD0000034880B5826A78 +:1069F0000121042000F06FFB80BDD479010080B537 +:106A000000223C007C1901000021032000F066FBFD +:106A100080BD0000064880B5816842690069511850 +:106A2000814203D90121012000F058FB80BD000004 +:106A3000D4790100064880B58288816800695118C0 +:106A4000814203D93C00B81901000121022000F065 +:106A500048FB80BD0000D479010010B5084C207BB4 +:106A6000216AF9F79CFAA1694218A0682169801887 +:106A7000884203D90121022000F033FB10BDD479F4 +:106A8000010080B500223C00F41901000021002023 +:106A900000F02AFB80BD00000006000E012880B532 +:106AA00002D1F6F78FF880BD0028FCD1F1F7FAFC8F +:106AB00080BD000080B5F6F785F880BD80B5000682 +:106AC000000EF1F729FD80BD3C00301A0100B0B581 +:106AD00002250228104C0BD1FBF747FC002801D1FE +:106AE000FEF74FFF2570A1680C48FDF7A8FCB0BD6C +:106AF00003280DD108487D231C380069DB0058436A +:106B0000191C40184108022000F03C006C1A0100DA +:106B100091FA2570B0BDF8F731F9B0BD7869010080 +:106B20003463010010B5054CE068002801D1EFF78F +:106B300039FC0220207000F0AFFA10BD7869010026 +:106B4000034880B5826A0121042000F03C00A81AA5 +:106B50000100D3FA80BDD479010080B50022002164 +:106B6000032000F0CAFA80BD000080B50022002199 +:106B7000002000F0C2FA80BD0000034880B54269E1 +:106B80000121012000F0B9FA80BDD47901003C0058 +:106B9000E41A0100064880B58288002A02D001214B +:106BA000022002E000220021002000F0A9FA80BDAE +:106BB000D479010010B5064C207B216AF9F7FEF963 +:106BC000A16942180121022000F09AFA10BD0000CC +:106BD0003C00201B0100D479010080B50022002177 +:106BE000002000F090FA80BD000038B5FAF741FEB1 +:106BF0000020F0F780F8009000AB1C885D88F8F763 +:106C00003CF9002C02D0FDF79EFA02E00120F6F7D5 +:106C10000AFF3C005C1B0100291C201CFCF7B8FC8F +:106C2000002C02D0F5F7E0FB02E0002000F0DCF9D8 +:106C30000320002C00D102200006000EF2F74EFBCC +:106C400038BD0000034880B5826A0121042000F0AD +:106C50005DFA80BD3C00981B0100D479010080B52D +:106C600030F09BF980BD80B500220021032000F0A8 +:106C700050FA80BD0000034880B54269012101201F +:106C800000F047FA80BDD4790100044880B58288BD +:106C9000002A03D001213C00D41B0100022000F097 +:106CA0003BFA80BDD479010010B5064C207B216AE7 +:106CB000F9F790F9A16942180121022000F02CFA9D +:106CC00010BD0000D479010080B5FCF793FB0121D1 +:106CD0000120FFF797F804203C00101C0100F2F798 +:106CE00006FB80BD000080B52FF06BFB00280AD0AA +:106CF0000120F2F7FCFAFAF72AFC002802D104205E +:106D0000F6F75DF880BD03211620EFF732FB80BD5A +:106D10000000024880B50068EEF73C004C1C010002 +:106D2000C5FB80BDD4790100034880B542690121CB +:106D3000012000F0F7F980BDD479010080B530F072 +:106D400035F980BDB0B5184CAA20005D042819D1D2 +:106D50000125E562256301F093F8A0663C00881CDC +:106D6000010001F0FCFDF2F72EFE00280ED00220FB +:106D7000F2F7C3FAA56001F086F864306060FAF7B4 +:106D80008AFD01210120FFF746F8B0BD0120F2F78E +:106D9000B4FA0020A06000210120FFF73CF83C007D +:106DA000C41C0100F2F766FE0028F1D0FAF776FD68 +:106DB000B0BD0000A46C010080B50020EFF7D6FE46 +:106DC00080BD000080B50120EFF7D0FE80BD00003F +:106DD000AC21095C024A09028918C0318160704700 +:106DE0003C00001D01007075010080B5012804D130 +:106DF00003C90968EEF764FB80BD01211420EFF799 +:106E0000C4FA80BD0000002802D1024840687047E3 +:106E10004068704700005875010010B50024F8F76D +:106E20001CFB3C003C1D0100002804D04030807A4F +:106E3000052800D10124201C10BD000004480021B9 +:106E4000406801E0016340680028FBD17047000002 +:106E500058750100B0B5041C0D1CF7F7A5F84034B7 +:106E6000E572B0BD3C00781D0100F8B5071CF8F7CD +:106E7000FAFA041C04D005211420EFF78CFA28E05C +:106E80000025144928024618301C443006221249B5 +:106E9000EEF72DFB002802D1AC208555341C0135BE +:106EA000032DEED3002C3C00B41D010014D0391C7E +:106EB000201CF8F72BF80949002020601839486891 +:106EC0006060002800D004604C60CA68002A03D0CB +:106ED0000121201CEEF7FEFA201CF8BD70750100A0 +:106EE0005846010080B5F8F73C00F01D0100C1FADA +:106EF000002804D106211420EFF753FA80BDF5F7DE +:106F000016FC80BD000080B5F8F7B3FA80BD10B55F +:106F1000094C2188022903D11420EFF742FA04E03A +:106F2000A3688A009850481C20803C002C1E010059 +:106F3000208801380004000C10BD000058750100C5 +:106F40000B1C111C084A80B51288904206D2DA68E0 +:106F5000C0001218142001F0BBFB80BD03211420D7 +:106F6000EFF722FA80BD0000587501003C00681E52 +:106F70000100084A80B51288904206D2C968C00054 +:106F80000918142001F0DBFB80BD04211420EFF769 +:106F90000EFA80BD0000587501000149C8607047B5 +:106FA00000005875010080B506224430EEF73C0021 +:106FB000A41E0100ABFA002801D1012080BD0020F1 +:106FC00080BD00001CB5144C2069002823D0207817 +:106FD0000A2801D000F0FCF8002060610F484079D9 +:106FE000A070002801D0012815D1FDF7EDFE019019 +:106FF0003C00E01E0100FDF782FE009000AB187916 +:107000001978401A187158795978401A58710198AE +:10701000F2F789FE0520207000F0BFF91CBD7C78D6 +:1070200001000C5A010008B5044A009014320020F7 +:10703000024B3C001C1F01000249F1F77DF908BD1D +:107040002C750100B1A80000B0B5002806D00128B9 +:1070500006D0022807D10C4C012507E00B4C04E0B8 +:107060000A4C2A3C01E0084CB634002500F02CFF05 +:107070000749896E3C00581F01000919091AA142ED +:1070800000D900212A1C162001F031FBB0BD71028D +:1070900000000C050000A46C01008CB500AB8E2133 +:1070A0001980FCF738F901906846FBF7A6FA8CBD09 +:1070B0000000BFB5134A3C00941F010001910D1C54 +:1070C000117C8843041C2143081C1074A0070BD5B5 +:1070D0000E4800900120029000F0FCFE0C49401880 +:1070E00003906846F9F76AFFE0070CD5F1F72CFD2D +:1070F000002803D0074885423C00D01F010000D281 +:107100000190064800906846F9F709FFBFBD78690D +:10711000010081EA000010270000A086010075EA46 +:10712000000010B50A4C606900280ED10120606192 +:10713000A1680748FDF7CBF900213C000C200100B5 +:10714000A068F9F7D1FB01220720044901F0D8FA21 +:1071500010BD00007869010034630100983A000016 +:1071600010B50C1C111C064A002B107003D000280F +:1071700002D1F9F7F5FD10BD201CF9F73C004820BD +:10718000010001FE10BDA0790100B0B50A4C051C3C +:10719000E36A201F0133E3620088002906D0A1685A +:1071A00089182161054A00F0FCFE01E000F0CFFEE5 +:1071B0002577B0BD0000D479010055E300003C0004 +:1071C00084200100011C034880B54088FFF7ECFED5 +:1071D00080BD0000987C0100034880B5C168183864 +:1071E0008088FFF7E1FE80BD707C010080B5002142 +:1071F000162001F0BFFA0121162001F0BBFA80BD74 +:107200003C00C020010010B50B4C20780A2810D09B +:10721000012060610A21132001F0AFFA0A2060709A +:107220002070FDF73CFB0120FDF7E9FB0020FAF799 +:10723000C4F910BD00007C78010010B50C4C002092 +:107240000B493C00FC2001002063E062503988615A +:107250002070084838210C38007A08558121182000 +:1072600001F08EFA2069012802D10020F5F73EFBDB +:1072700010BD0000F46E0100B0B51C4C00252C229E +:10728000011D201C3C00382101009AB0EEF739FAAC +:1072900018492C31081C007A8A69002A13D1022867 +:1072A00003D1A068002820D004E000281DD1606828 +:1072B00000281AD0800288610E4869462438006888 +:1072C000EFF7CBFB11E03C00742101000022022803 +:1072D00003D1A068002809D104E0002808D1606823 +:1072E000002803D18A61FFF7B1FF01E080028861C5 +:1072F000281C1AB0B0BD0000C86E0100F8B50C49DA +:10730000022048600B4900053C00B02101000860E4 +:107310000B4FB868F9687C68451A2E1C04E0A06819 +:107320006168EEF709F92468013DF8D27C60F868DD +:107330008019F860F8BD402007000010070044E302 +:107340000100F8B51F4E041C30693C00EC2101001F +:107350000121F9F799FA1D49600040181038817B26 +:107360001B4A5172C07B10741A4F1B4D0E2C0AD150 +:1073700001220221082001F0F3FB0320FF2141310B +:107380003986142108E00222012108203C0028222D +:10739000010001F0E8FB1249022039861021A97191 +:1073A000E8711048114A00191038C07B002803D03A +:1073B00001215173107301E0002050730021201C43 +:1073C000FDF7E5FD3069F9F708FBF8BD00003C006A +:1073D00064220100407C0100764601000C80070019 +:1073E0003080070000800700FF0100005C570100AB +:1073F000D080070010B5154C144A217800201832AF +:1074000005291DD006291BD0072901D0082906D13E +:107410003C00A022010091680520102900DB062015 +:1074200020700120A178002861700BD00020FAF7AD +:10743000DCF800216078F4F73CFA0A221E211320C0 +:1074400001F07FF910BDD16907201029E8DB082081 +:10745000E6E73C00DC2201007C780100B0B50D1CA1 +:10746000011C041C44310020F6F740FA3034002D92 +:1074700007D00EC80EC408C8103808C4F4F7C4F901 +:10748000B0BD1ECC1EC0B0BDF8B5081C111CF4F771 +:1074900087FA084C3C00182301000025084E084FCD +:1074A00006E0306B002803D035632068EEF755F80E +:1074B00038680028F5D0F8BD00005C5B0100E4FEF0 +:1074C0000100845A010080B50006000E00F007F8A4 +:1074D00080BD80B50A1C3C0054230100232101F02B +:1074E0002BFA80BDB0B50D1C041C122803D301215A +:1074F0002320EEF79BFF0649A000085804E012C8BD +:10750000281CEEF72EF8201C0028F8D1B0BD000092 +:10751000685B0100F8B50E1C3C00902301000025BB +:10752000041C122803D301212320EEF782FF134805 +:10753000A700C45908E02068B04203D103212320EA +:10754000EEF777FF251C6468002CF4D10C4A043A4E +:107550001068002801D0416811603C00CC23010074 +:10756000002804D102212320EEF766FFF8BD002198 +:1075700041600660002D01D06860F7E70149C851FD +:10758000F4E70000685B010070B50E1C051C0024C8 +:10759000122803D301212320EEF74EFF3C000824DC +:1075A00001000D4BAA00985804E00168B14204D0D4 +:1075B000041C40680028F8D170BD0028FCD0002CC5 +:1075C000416801D1995000E061600021034A0160E7 +:1075D000043A11684160106070BD685B01003C00B6 +:1075E00044240100F3B581B0002817D00178FF29A9 +:1075F00014D04578441902348027013C2678013D97 +:10760000BE43301CF8F782FC012181400298014002 +:1076100002D03E43301C2070002DEED1FEBD000094 +:107620003C0080240100104B10B55968411A0F2905 +:107630000DDC0E22D243914209DB1A1C926800290C +:1076400001DD002A03DA00290DDA002A0BDC0433FD +:1076500003C3FDF710FD041CFDF713FD002802D045 +:10766000201C3C00BC240100FFF792FE10BD00006E +:1076700018630100F8B5644C071C6078A178884253 +:107680000FD1081CFDF7CEF8E060042060700A22DC +:107690001E21132001F070F800216078F4F724F91E +:1076A000F8BD04283C00F82401006ED1584EFDF7C7 +:1076B000BCF800907178041C0020052921D201A398 +:1076C0005B5C5B009F440B0F141A02005148514948 +:1076D000604341187D20C000EEF787F811E0872055 +:1076E00060434D4902E03C003425010045204D49EE +:1076F0006043401808E04C48CD2109016043401A1E +:1077000002E0462060438238060648480721007997 +:107710003616081A001900906846FEF75FFD381CFF +:10772000FDF72EFB0099424A3C00702501004900FC +:10773000515A48433949041C8878002801D001284F +:107740001ED13549002803D13A480578042002E0CB +:10775000384845780C203049C968491B0818009002 +:107760006846FEF73EFD009833493C00AC25010019 +:1077700040002031085A2A494443C868A84201D928 +:10778000012500E000252E4821184000EEF7A2F860 +:10779000041C002D03D0FDF7C3FA02E03DE0FDF725 +:1077A000F3FA002F02D125480E3801E03C00E8250D +:1077B000010023480A380168611ACB1C01DB032948 +:1077C00000DD04600168A14201D2013104E0A14260 +:1077D00003D9002901D0013901600168381CFDF787 +:1077E000C0FB104C0A2060700A221320A1683C00E4 +:1077F0002426010000F0D2FF606800F0F7FA0028AC +:1078000000D15FE700F0BAFB1149002340180E4990 +:1078100060601E39C856B042F3D00E70311C002093 +:10782000FFF784FE4EE7FFF715FE4BE77C7801007B +:107830003C006026010060D7FFFF608F0100540B01 +:107840000000C90900008EFEFFFF0C5A0100125A09 +:10785000010020A1070040420F0030B50C4BFE2470 +:107860001B880440C0075D076D0FDB08C00F9C42FA +:107870000BD83C009C260100A218043A9A4207D378 +:107880001A1B895C0122AA40114001D00221084341 +:1078900030BD0000FA60010080B5002803D0011C53 +:1078A0001420F5F7FFFA80BDB0B5041CF7F708FD0A +:1078B000134D00283C00D82601001DD1A00716D585 +:1078C00002208443114801222A624068002813D014 +:1078D000F2F751F900280FD10B48E430807A0128E3 +:1078E00000D00022111C0120F2F7A5F904E000F0FD +:1078F0004EFBE861F2F73C00142701006BF9A96A1E +:10790000002902D0201CEDF75CFEB0BD606C0100C8 +:10791000B05701002048B0B58168012904D1007832 +:10792000002801D1FDF772FD1B4D803D2C1C7034E9 +:1079300020780338052818D23C005027010001A305 +:107940001B5C5B009F44041527272700FBF7F1FF12 +:10795000607B011CFF3161730028F7D10420207087 +:10796000A889F8F7DAF9011C00220F2000F025FFA2 +:10797000B0BDEFF7CEFF6A21495B3C008C270100C8 +:1079800088420BD0E889F8F7CBF9011C00230022CC +:107990000F2000F0F7FF07202070B0BDFDF73AFE82 +:1079A000B0BD000084660100F0B585B0041C038002 +:1079B000180C60800D1C5178107809023C00C82713 +:1079C00001004840A080D178907809024840E080CA +:1079D0005179107909024840208168461A491422D9 +:1079E000EDF7E3FE00230020D907C90F8C464200C3 +:1079F0005607760F6146891949006E5C49193C00AB +:107A00000428010049786F4609024E4081007958E8 +:107A10000F4F4900615A01304E403106360A760058 +:107A2000C90D795AF61901277F02F6193688714077 +:107A3000A65A8919A1520528DCDB2089C018013318 +:107A40003C0040280100082B2081D2DB05B0F0BDAE +:107A50000000D8560100D8520100F0B5051C0C1CDE +:107A60001E1C002089B04100535A013006AF7B52E2 +:107A70000528F8DB108900AB3A498019588468461C +:107A800018223C007C280100EDF798FE0020410000 +:107A90000A195278635C6F46120253408200BA584A +:107AA00006AF5200BA5A314F013053401A061B0A32 +:107AB0005B00D20DBA5ADB1901277F02DB191B8844 +:107AC0005A4006AB3C00B82801005B5AD21806ABFE +:107AD0005A520628DEDB617B207B00AB090248405E +:107AE000598C48404108C0034840198B40181883FE +:107AF000E17BA07B09024840198B48404108C00344 +:107B00004840598B40183C00F4280100588302205B +:107B1000410006AA8A18203AD28B01305308D203BA +:107B20005A4006AB5B5AD21806AB5A520628EFDB16 +:107B3000300A28707004400E202108436870AE702F +:107B40006178207800AB09023C00302901004840F0 +:107B5000598C4840C005000EE8700020410006AA7C +:107B6000535A4A190130137106AB595A090A517117 +:107B70000628F3DB09B0F0BD0000EC560100D85236 +:107B80000100F0B54668051C60303C006C2901001E +:107B900085B0049060E068680C2107690020EEF76A +:107BA0002DFE7061018904390904090C0181706995 +:107BB000006840180421EEF721FEF0617069202171 +:107BC000046804980422407B800108433C00A829F3 +:107BD0000100E07028694089A07028694089000A86 +:107BE000207029690C31A018EDF79BFD2078202129 +:107BF0004006400E0843607028690A300188013150 +:107C00000904090C018004D128690C3001683C008A +:107C1000E4290100013101603562617920790902AE +:107C20004018A17909044018E17909064318009326 +:107C3000A0782178090240180404240C1020EEF7E3 +:107C400013FFB06128693A1C0168009B01A80A3241 +:107C50003C00202A0100FFF7C8FE2869231C0168A8 +:107C6000B06901AAFFF711FF3668002E9CD10349C5 +:107C700004486A68F7F763FB05B0F0BD0000FD6BD0 +:107C80000000A06A0100013807494000095C002992 +:107C900006D03C005C2A010004491C39085C00281D +:107CA00001D001207047002070470000E6780100F5 +:107CB000FEB5051C002002901348171C00680C1C20 +:107CC0008678301CFDF728FA002801D10298FEBD05 +:107CD000002D08D13C00982A0100206800AB1871E3 +:107CE00060685871A068987103203880291C301C86 +:107CF00001AA00F00EF8002DECD000AB197921603C +:107D0000597961609979A1600C213980E2E7F86BBB +:107D10000100F8B5151C3C00D42A0100421E0138B0 +:107D200047003F181F483E18002906D001240322AF +:107D3000311C281CEDF704FD32E06878012400288E +:107D400005D02978081801380E2800D90024002C05 +:107D500026D0002A07D12A213C00102B010012480E +:107D6000EDF79FFC1C211148EDF79BFC0F48032207 +:107D7000291C301CEDF7E7FC0C487178C05DB27827 +:107D800000290ED0002A0CD001224318084D06E02D +:107D90004100491910398A73B7783C004C2B010017 +:107DA0000130CF738342F6D8FEF760F8201CF8BD8F +:107DB000EB620100CA78010070B5051C1C48002365 +:107DC000C056431C32D1A87AF8F70CF900260028D7 +:107DD000184C08D0E869E16B00290BD13C00882BD6 +:107DE000010066630121E163A66306E0A869E16B17 +:107DF000002902D06663A663E663A16B0131A1632B +:107E0000820301D50E4A1043E26B002A00D04042A3 +:107E1000626B1018606308290BD1002801DD3C005B +:107E2000C42B0100012003E0002803DA0020C04336 +:107E3000EFF762FE6663A66370BD0000F46B01009D +:107E4000846A01000000FEFF0C21054A41438918A5 +:107E500080B58978002901D1F3F7F2FA80BD0000DE +:107E60003C00002C0100607B010080B5011C00205B +:107E7000F7F703FA80BD80B5011C0120F7F7FDF983 +:107E800080BD02498968401AC00F70470000000198 +:107E9000070002498968081AC017013070470001BD +:107EA00007003C003C2C010005494A6801231A43A5 +:107EB0004A608A681018886048689843486070472C +:107EC0000001070010B5154B00210A019A58002A3D +:107ED00017D101240A019C50D21810730023537348 +:107EE000022301283C00782C01000E4A05D1C8006D +:107EF0008018103002789A4304E0C80080181030CF +:107F000002781A43027002E001310829E0DB0829F7 +:107F100004D101219920EEF7FEFA03490804000C70 +:107F200010BDAC7301003C00B42C010000600700E0 +:107F3000FFFF0000F7B5194F194E0C1CC100C919FD +:107F4000B268103181B0013A4A600B781D1C0D22D5 +:107F500093430B70012282403A73124B0001039A43 +:107F6000C0188260104A101C3C00F02C0100203028 +:107F7000877900AB1F70C0795870B0680330002358 +:107F8000261A01D5041C01234C600D70002B04D06F +:107F9000201CFFF78AFF0028FAD000AB1888D08495 +:107FA000FFBD00600700000107003C002C2D010010 +:107FB000AC7301000010070030B50020C0430B4C2B +:107FC000094B0022D10009190D7CED0707D549693D +:107FD0009D68491B00D50021814200D2081C013256 +:107FE000082AEFDB30BD0000000107003C00682DCF +:107FF000010000600700B0B508280BD2084D04014D +:108000002959002904D000F04AF800202851B0BDB9 +:10801000022100E003219920EEF789FAB0BDAC738C +:108020000100034900014018417B082211433C0034 +:10803000A42D010041737047AC73010001488068B2 +:10804000704700000001070070B50B4E094D00227B +:10805000D0008419207CC00707D56069FFF726FF90 +:10806000002802D0A868323060610132082AEFDBB4 +:108070003C00E02D010070BD000000010700006021 +:108080000700024AC00080180174704700000060B9 +:1080900007000449C0004118087C0823021C9A43C9 +:1080A0000A74704700000060070070B5082817D2F6 +:1080B0000E493C001C2E01008A680E4D013AC10099 +:1080C00049194A610C4B9A7910310C780D26B4434A +:1080D0000C700121814029739A71094A07490001F6 +:1080E0008018416070BD05219920EEF729FA70BD16 +:1080F000000107003C00582E01000060070020101E +:108100000700D1750000AC730100F8B59E461A4B0C +:1081100094469B681A4CC2001219013B5361151C0E +:10812000184CA6792A1C103213780D27BB43137004 +:108130000127124B87403C00942E01001F73A6714B +:10814000124E0001801963464360734683601378C2 +:10815000407BA679012718433843143500AB1E70C5 +:10816000E4795C70064B9B680333CC1A00D5191C6C +:108170002960107000AB18883C00D02E0100034C21 +:10818000203CE084F8BD00010700006007002010DB +:108190000700AC73010000B5011CFFF75EFF421839 +:1081A000101CFFF792FE0028FAD000BD0000891ACB +:1081B000401A9918884201D801203C000C2F010078 +:1081C0007047002070470000F8B50F1C041C002801 +:1081D00001D1EEF7EFF9211C0120FFF719FA412038 +:1081E000005D002801D1002504E0022801D1052509 +:1081F00000E00125E068EEF729FBA66B3C00482F64 +:108200000100002E10D0002F06D02F20025D206A22 +:10821000416B281CEDF744FAA069002801D0EEF765 +:1082200046FC206AEEF743FC201CEEF740FC301CB5 +:10823000F8BDB0B5041CC06B002809D020693C0013 +:10824000842F0100008BEEF755F9002803D0211C84 +:108250000620FFF7E3F9084D201CA96DFFF7BAFFD0 +:10826000002807D0E8680130E860286A01382862F1 +:10827000FCF778F8B0BD0000C469010010B5064CE9 +:108280003C00C02F0100E16DFFF7A7FF002804D0DC +:10829000E0690138E061FCF768F810BD0000C469CE +:1082A00001000C230C495843401810B54468A168DC +:1082B000002902D0201CEDF7F3F9E06B002808D06C +:1082C00020693C00FC2F0100008BEEF719F9002813 +:1082D00002D0201CF9F726F910BD0000607B0100D8 +:1082E000F8B522494868800006D40120400708609C +:1082F0004A69920000D448601D4F787EC306012071 +:10830000021CDB0E3C00383001009A400A6079699B +:108310008C688C602107890F09D0210704D50B21B7 +:108320009E20EEF728F900E078640C208443124880 +:108330003D68065D6C682C3406E0A0680068A060AB +:10834000E968281CEDF73C0074300100B2F9013EE9 +:10835000F6D2A068806800280DD0408900280AD095 +:10836000786C002807D178698068800703D10C21D8 +:108370009E20EEF703F9F8BD00100700CC6D010058 +:10838000B4440100094980B53C00B0300100087ECA +:10839000C206D20E01209040074A106000200A69F0 +:1083A000C04390600868243106C90369EDF786F977 +:1083B00080BDCC6D010000100700F8B54468061CB4 +:1083C0002C3420680D1C806800903C00EC300100CB +:1083D000002800D0C5602068006820604068002840 +:1083E00003D00A219E20EEF7CFF820684560281CB4 +:1083F00002E000224260081CC1680029F9D17168BE +:1084000060270B1C40339C469B78CA7E3C00283179 +:1084100001005B011207120F3B401A438B8FFF27AD +:108420003F041B043B401A4390231A4342606346B7 +:108430009A780132D207D20F9A70896BC160216895 +:1084400088600098002801D00098C5600A4F3C0061 +:1084500064310100BD79A06900280CD00022A2611E +:1084600074686069EFF72EFFE06A616940684860F0 +:10847000616901200860BD71F8BD0000201007008F +:10848000FEB544680F1C01942C34201C123002905D +:108490003C00A03101002CE00C20EEF700FB051C95 +:1084A000606800281DD10298002100900020EEF79E +:1084B0000EFA061C00980421EEF709FA011C019837 +:1084C000C07E0007000FD03070600198C07E0007AA +:1084D000000F3C00DC310100F0304860301CEEF74A +:1084E00019F96560E66001E0206805606068286051 +:1084F000256000206860A860381CFF300006000E70 +:10850000391C071C0029CAD16068A060FEBD0000AC +:10851000FFB5051C3C0018320100081C002681B084 +:10852000F4F72FFE041C02D06068FF2801D1062654 +:1085300028E0211C20310A78012A01D1032621E0FC +:10854000012725600F7011C51D48083D686103981B +:108550006A46E86004983C005432010028611A48D9 +:10856000A8611A48E8611A4828621A486862207EA1 +:10857000A168EDF7B3FE002806D1607EE1686A4687 +:10858000EDF7ACFE002807D00426311C9E20EEF744 +:108590000DF8301C05B0F0BD3C00903201006A4679 +:1085A0000F491D20EDF79DFE01210D48490701608F +:1085B000227E3B1CD206D20E93404360627ED206DE +:1085C000D20E974047604160E6E731330100D9326F +:1085D000010091310100DD3001003C00CC3201008E +:1085E000FD320100713301000010070042682C3297 +:1085F000506843680B6081684B890B818368002158 +:10860000D9604160816000685060002070470000C0 +:1086100070B54268FF269187106B0C043C0008334C +:108620000100051C3604344043685968B1432143B6 +:1086300059600068A842F7D1106B516940684860E2 +:1086400051690120086070BD0000B0B54368081C86 +:1086500059629A6200250AE04581C4682A1C3C00E0 +:1086600044330100002C03D19A7E1207120F1032FE +:108670004260201C0028F2D118694160196901206C +:10868000086002480068EDF737F8B0BD5C5B010098 +:1086900001200549400780B58860044801680D2025 +:1086A0003C0080330100FEF7E6FF80BD00000010B3 +:1086B0000700C4600100F8B50E4F0C4E002448209E +:1086C0006043C5194821281CEDF77BF81C20604346 +:1086D0008119281D1C22EDF7FEF81C23E8560549D8 +:1086E000FBF73C00BC330100CDF80134012CE9D389 +:1086F000F8BD0000B8440100CC6D01001532010046 +:10870000FFB5051C0A30061C81B0F2F7DDF8184FE2 +:10871000041C3988EFF7BCFC3288786802807288C4 +:10872000023002803C00F8330100B188124E4180D3 +:10873000288808364005002805DA6988039A201C35 +:10874000F7F701FD00E000207080F8F75EFC0121E2 +:1087500009030028308801D0884300E008433080B6 +:108760000548002200213C00343401001430EFF7AA +:1087700065FC201CF9F774F805B0F0BDB07A010073 +:1087800010B50E4C6068F8F795F92068006A00286B +:1087900013D1F8F7BFFC002808D021680120086237 +:1087A0001F210022832000F03C00703401009FF95B +:1087B00002E06068F8F721FAFFF797FC216808618A +:1087C00010BD147A0100FEB51B4E0F1C1D1C141C9D +:1087D000B060081CF7F72BFFB08034733562381C8B +:1087E00001AA02A9F7F725FF00AB3C00AC34010059 +:1087F000187A012818D118790B2808D1307F242342 +:108800000F49584340188068ECF788FFFEBD00AB65 +:1088100018790A2808D1F7F739FD071C291C201CF4 +:10882000F7F716FD3818B080307F24233C00E83479 +:1088300001000449584340184068ECF772FFE8E72C +:108840000000D479010094460100B0B5FFF753FC55 +:10885000041CFBF7FCFA0C4D29680969091B0C1A6A +:1088600002211F2000F08BF8142C06DD02223C00B0 +:1088700024350100211C1F2000F050F80120B0BD5C +:1088800029680120896A0029F9D00020B0BD0000C4 +:10889000147A0100F8B51A4D071CAE790121194C64 +:1088A00000202268002A14D1AE71A268D06806CADE +:1088B0003C0060350100ECF73CFFAE790021134A23 +:1088C000506901305061A0688068A0606268904281 +:1088D00006D10120206003E001300C340328E3DBE3 +:1088E000002F08D100290AD00A484068002806D085 +:1088F000FAF73C009C350100F5FF03E0012F03D09F +:10890000002901D1AE71CEE7AE71F8BD201007008D +:1089100018D90100A8600100705D010080B5012335 +:10892000F5F77CF880BD000080B50023F5F776F8F8 +:1089300080BD00003C00D8350100F8B5134B002481 +:108940001B8898421BD2114BC000C01845680668AE +:108950002868002817D10E4FA8684368B34209D190 +:10896000C3688B4206D10368934201D0531C01D1E6 +:108970000124476080683C00143601006B68834224 +:10898000EED103E001218020EDF740FE201CF8BD70 +:1089900056570100845D010029E30000F8B5174F28 +:1089A0000A1CBE79164D00236C6807E021689142CD +:1089B00002D12179814204D03C0050360100231CB1 +:1089C000E468002CF5D117E0002C15D0002B0DD158 +:1089D000E3680D486B600088002B02D1FFF7D1FBE4 +:1089E00006E00A4A9968FFF7F6FB01E0E068D86004 +:1089F0002868E0602C6002E001213C008C36010018 +:108A0000FFF7A4FFBE71F8BD201007007C5D0100D8 +:108A10002C7401002138010070B5094EB579F9F7C1 +:108A2000AFFE041C09D0201CEDF70CFB05498A6839 +:108A300080188860086801300860B5713C00C8364D +:108A40000100201C70BD20100700A860010009482B +:108A500080B54068021C0BE00169002907D0824202 +:108A600004D0816805480088FFF7E5FA80BDC0683A +:108A70000028F1D180BD7C5D01002C7401003C0018 +:108A800004370100054880B54268002A04D0044834 +:108A900000889168FFF7D2FA80BD00007C5D01007C +:108AA0002C74010005480168002904D0C068002822 +:108AB00001D00120704700207047000018D9010044 +:108AC0003C004037010080B5F6F7D1FA80BD131C99 +:108AD0000D4AB0B5128890420FD203290DD20A4A2E +:108AE000C00014580A4DAC4207D113500C2359430F +:108AF000084BC91880184160B0BD02218020EDF7F5 +:108B000094FD3C007C370100B0BD000056570100C9 +:108B1000845D010009A0000018D90100F8B50F1C00 +:108B20001E1C151C041C111CFFF74AFF331C2A1CB9 +:108B3000391C201CF4F78AFFF8BD0000F7B59446F5 +:108B4000FF2921D03C00B837010015480088814238 +:108B500021D2144A154EC8008518B4796868026895 +:108B6000002A03D1031D0CCB9A4211D043689A68A6 +:108B700042600E4A176901371761B4710022026022 +:108B80000098D86060463C00F43701001860197402 +:108B900028685860FEBDB471062100E007218020DE +:108BA000EDF74CFDF6E7000056570100845D01002B +:108BB00020100700A8600100B0B5144D6C68002CAF +:108BC00001D0844204D00C213C00303801008020C8 +:108BD000EDF737FDB0BDFFF7B8FAA168401A0D49AF +:108BE000884203DA10218020EDF72BFD21792268DD +:108BF0000120FFF7ACFFE3686B60002B05D007484E +:108C0000064A00889968FFF7FEFA3C006C380100BC +:108C10002868E0602C60B0BD7C5D010018FCFFFF9F +:108C2000213801002C740100B0B5154C0820211C1E +:108C300080310870134A4104116013480068134DD5 +:108C40006B69184001D1102000E000203C00A838DA +:108C50000100A8235B5D1843231C40331873516047 +:108C600020788008800020700020FFF712FBFFF7BB +:108C700072FA643028660138A06120780321084325 +:108C80002070B0BD000000900700001007003C00FD +:108C9000E438010010000700A46C010038B50A4C4C +:108CA000211C20318A7900AB1A70C979074D59709F +:108CB0006978884203D1F8F713FCFF20687000AB95 +:108CC0001888E08438BD0000001007004C7B0100CC +:108CD0003C0020390100F8B50B1C061C041D7F3335 +:108CE00014D033685D18356023881F180623FF569B +:108CF000EB1B336023881818817120880130000431 +:108D0000000C2080904201D300202080101C31688C +:108D1000ECF73C005C3901006DFEF8BD0E490A7CA1 +:108D200083781A430A74427883789A430B7C93437E +:108D30000B748A7C43781A438A748A7C03789A433A +:108D40008A74027843781A434B7C1A434A744A7CEB +:108D5000C07882433C00983901004A747047100083 +:108D60000700B0B5064D00242006000EEDF7F7F819 +:108D7000A100695808710134042CF5DBB0BD107BEB +:108D800001000B480C497D234269DB00002AC86BB7 +:108D900007D0C0181A013C00D43901009042C863C2 +:108DA00001D90748C8637047FF38F538C86398424F +:108DB000F9D2CB6370470000F4680100447D0100E4 +:108DC0007017000070B50D1C041C161CFBF7F6FA9A +:108DD000B0432843011C201C3C00103A010000F065 +:108DE000CCFA70BD000080B50B4A002909D00229D9 +:108DF0000FD1011C0848D2783830FFF778FF0649B8 +:108E000006E0011C044812792030FFF770FF034987 +:108E1000086080BD0000AC7C01003C004C3A0100C1 +:108E2000C8670100C467010080B50B4A002909D05A +:108E300002290FD1011C084852796830FFF75AFF08 +:108E4000064906E0011C044892795030FFF752FFB2 +:108E50000349086080BD0000AC7C01003C00883AFA +:108E60000100D0670100CC67010008B50421009122 +:108E7000817E4368032906D1011C0C3101206A461A +:108E8000ECF79AFC08BD1968C160FBE7000010B55B +:108E9000031C0020084C0021CA00121992783C00E3 +:108EA000C43A01009A4203D1C8000019406810BDBD +:108EB0000131090609160629F1DB10BDCC5A010063 +:108EC000F8B50F1C161C0025FEF78EF9041C0AD0FD +:108ED0004A20005D052806D1381CF1F781FE0028E4 +:108EE0003C00003B010001D001253460281CF8BD86 +:108EF000000070B50D1C161C0024FEF778F9002840 +:108F00000BD04A21095C052907D10169002904D148 +:108F10003060F1F704FD01242860201C70BDF8B515 +:108F2000061C3C003C3B010000250C1C081CF1F712 +:108F30005DFE002801D0002105E0201CF1F774FE41 +:108F4000002814D00121301CF4F780FB0090002889 +:108F50000DD0084F01250622311C381CECF7C2FC4D +:108F60000622211C3C00783B0100B818ECF7BDFC40 +:108F70000098F860281CF8BD0000707C01000021FA +:108F8000002806D04278072A03D1C079012800D1F1 +:108F90000121081C7047F8B5051C0027164EF1F793 +:108FA00028FE002807D03C00B43B0100F1F7C0FBCD +:108FB000002810D10024F1F7BBFC06E0F1F702FE17 +:108FC000002808D00124F1F799FD011C0622301C6D +:108FD000ECF78EFC0127002F0DD0211C281CF4F784 +:108FE0003BFB011C054806223C00F03B0100063813 +:108FF000C160291CECF77FFC0120F8BD0020FCE7D4 +:109000000000767C0100F0B5071C006802210468AE +:10901000786987B00140002500290591744E12D06F +:1090200022880121130502D4C0073C002C3C01001A +:10903000C11701316F480029006801D0013004E0F8 +:109040001106890E2D2901D1033030602088800758 +:1090500067D17869C00764D503AA04A9201CF7F773 +:109060004BFB00AB187C002807D0187C3C00683C08 +:109070000100022858D1187B4007400F042853D81C +:1090800020790599C007C01701300290002902D14C +:109090000298002848D10599002904D020880005AD +:1090A00001D400203060C020EDF7CBFD051C3C0052 +:1090B000A43C0100201C0A300690FEF7ADF8061C07 +:1090C000281C08302388021D111DDB0506D5069BD0 +:1090D0000360201C10301060201D0EE0231D136063 +:1090E0002288920505D5221C10320260069B0B6077 +:1090F0003C00E03C010004E0069B0360201C1030B3 +:1091000008602869F1F743FC002808D0012812D034 +:10911000022858D100AB187C002854D112E000ABD3 +:10912000187C02280BD1002E4DD04B20805D0228E8 +:1091300049D13C001C3D010007E063E000AB187C16 +:10914000002802D1381CFEF71BFF2088410430485C +:1091500011D5002E52D000AB197C002926D00299DF +:10916000002902D0B06A007800E0007801281DD004 +:10917000032843D13C00583D01001AE000AB197CA4 +:10918000022916D1197B042913D0197B0C2910D080 +:109190002249096800290CD0002E0AD00299002922 +:1091A00002D0B06A007800E00078012829D00328B6 +:1091B00027D02822391C3C00943D0100281C88300F +:1091C000ECF70AFC00AB197C281C80300171197B7C +:1091D00041716C606E611BE00599002914D0114843 +:1091E000846C002C10D00022002E04D04036B07ABF +:1091F000052800D1012200923C00D03D0100F87A00 +:10920000BA7A2969C307DB0F0698ECF700FB281C24 +:10921000EDF707FD0025281C07B0F0BD0000C46A6B +:1092200001006861010028610100C469010080B586 +:109230000220FFF770F880BD00003C000C3E0100EA +:10924000B0B51D4D012817D0A22806D0A32803D100 +:1092500001211520FFF708FCB0BD002901D11748F6 +:1092600002E07D20C000484300230122011C286049 +:109270001520FFF7A7FCB0BD012904D03C00483EF3 +:1092800001000229FAD100F02AF8B0BD6C68F5F7A8 +:10929000DEFCFEF7A8FF6860002C09D029680A23CD +:1092A0005943001B884203D901211520EDF717FA15 +:1092B000012215202968FFF7A6FBB0BD00003C0085 +:1092C000843E0100047901000087930301200449D2 +:1092D000400380B5086003211520EDF703FA80BD37 +:1092E00000100700074880B5BE210173017A1022E3 +:1092F000114301720023022215200349FFF768FC85 +:109300003C00C03E010080BD000000030700809FBC +:10931000D50080B5002803D00A1C1521A22002E048 +:1093200000221521A320FFF766FC80BD000010B5C8 +:1093300000F019F80A48BE210173037A1022934302 +:1093400001243C00FC3E0100234303720173017AB7 +:109350009143202211430172022215200249FFF796 +:109360005BFB10BD00030700809FD50080B5022184 +:109370001520FFF785FB0448BE210173017A1122F5 +:10938000914301723C00383F010080BD00000003A2 +:109390000700F8B5061C051C60360027446822E06B +:1093A00008210020EDF741FB6061018904390904BF +:1093B000090C01816069006840180421EDF735FB54 +:1093C000E0616069717B3C00743F010000688901C5 +:1093D000C17029690C310322ECF7BAFA28690C3004 +:1093E0000168013101602562A7612468002CDAD18F +:1093F000024903486A68F6F7B3F8F8BDFD6B000050 +:10940000A06A010080B500073C00B03F01000009E0 +:109410000902090A084302490860FFF720FF80BDDE +:1094200000006000070008001400C8000000E80306 +:10943000000010001400C8000000E80300001C0039 +:109440001400C8000000E80300003C00EC3F0100ED +:109450002401070032000000E8030000400601007C +:109460000600000007000000416E62697E64616FC3 +:109470006F00000052656C6561736520365F375F71 +:109480003135204275696C6420323A353C00284001 +:1094900001003239382053657020303420323030AA +:1094A000392031373A31333A3230202848573D3469 +:1094B0003A332C4254434F455829000000003200F3 +:1094C0001C00102030405060FFFFFFFFFFFF3C00FA +:1094D00064400100000000000100000001000000E5 +:1094E00000000000E8037000000000000100000020 +:1094F0000000000002000000D0073800000000005B +:109500000100000001000000040000007C151500AF +:109510003C00A0400100000000000100000001002C +:1095200000000B00000070171E0001000000010089 +:109530000000000000000C000000282316000100BD +:109540000000010000000000000012000000F82AE6 +:109550000B003C00DC4001000000000001000000A6 +:109560000100000016000000E02E120001000000C3 +:1095700001000000000000001800000050460E002E +:1095800001000000010000000000000024000000B5 +:10959000F05508003C0018410100010000000000E7 +:1095A0000000010000002C000000C05D0E00010062 +:1095B0000000010000000000000030000000E88012 +:1095C0000400010000000000000001000000420053 +:1095D0000000A08C0A003C00544101000100000082 +:1095E00001000000000000004800000080BB0A00ED +:1095F0000100000001000000000000006000000009 +:10960000F0D20A000100000001000000000000008C +:109610006C000000C00090003C0090410100C000C0 +:109620009000C00090001400100014001000C00052 +:1096300090001400100014001000C00090001400EE +:109640001000C0009000140010001400100014005E +:109650001000C0009000600048003C00CC410100B8 +:109660006000480014001000140010006000480062 +:1096700014001000140010006000480014001000D6 +:1096800060004800140010001400100014001000C6 +:10969000020004010B020C03120416053C000842F0 +:1096A00001001806000E000E2407000E2C083009D9 +:1096B000000E000E000E420A000E480B000E000EB7 +:1096C000000E000E000E600C000E000E6C0D00006F +:1096D00000000000000000000080C0FFFFFF3C0011 +:1096E00044420100B6FFFFFFD3FFFFFFC9FFFFFFAA +:1096F000FFFFFF7F000000000000000000000000EE +:1097000000000000000000000000000051B0000058 +:109710000C00000051B000000C00000059AF000028 +:109720003C008042010000000000A5AF00000000E6 +:1097300000004DAF00000600000000000000000027 +:10974000000045B00000060000000000000000001E +:109750000000D5AF000000000000ADB00000000028 +:1097600000003C00BC42010095DB0000000000004E +:1097700095DB00000000000099B000000C00000024 +:1097800000000000000000000000000000000000D9 +:1097900000000000000000000000000000000000C9 +:1097A000000000003C00F8420100000000002D17FE +:1097B00001003517010021170100D99C000049174D +:1097C00001003D170100D19C0000D19C00001D1A32 +:1097D0000100D19C0000011A0100311A0100251A74 +:1097E00001003D1701003C0034430100811A0100D3 +:1097F000D19C000079170100D99C00005D17010081 +:10980000A11701009517010081170100211801001F +:10981000F5170100000008000C000000100008000F +:1098200008000000010000003C007043010002003D +:109830000000040000000800000010000000191CD7 +:1098400001008941000089410000854100008541F7 +:1098500000008541000085410000894100008541EC +:10986000000085410000351B01003C00AC430100B5 +:109870009D1B0100011C010089410000894100007D +:109880008941000085410000651801002918010088 +:1098900039180100BD180100894100004D18010070 +:1098A000A518010085410000011901003C00E843B2 +:1098B0000100D9180100ED180100151901008941B6 +:1098C0000000894100008941000085410000894174 +:1098D000000089410000691C010089410000711CE1 +:1098E00001008941000089410000FDDB00003C00CF +:1098F000244401001D7C000000008000F5DA000017 +:1099000014008100FDDD000008008200C5DD0000BC +:109910003800830045DC00001000840099DC000062 +:109920000C00860039DC00001000880011DE000009 +:109930003C006044010010008A0035DD00000C008E +:109940008C00ADDF00001C008E00C9DE0000380076 +:109950008F00EDDC00003800900075DF00000C0087 +:1099600091008DDC00000C009300B9DD00000C00BC +:1099700094003C009C44010000080808100C0C0CEA +:10998000080C080C080C0808080814080814003013 +:109990000001010200000000AD300100153001009F +:1099A00020300700303007000607020300000000E7 +:1099B000000000003C00D8440100FFFFFF00FFFF53 +:1099C000FF00FFFFFF000000000080C90200943F7D +:1099D0000300E08B5A00053A8500C8F20600F84CF7 +:1099E000560020A73D00B74A0000B74A000000001B +:1099F0000000000000003C001445010001010102CC +:109A00000202030303040404050600002D7C000089 +:109A10000000FF00FD9500000800FF00ED9700002A +:109A200008008200CD9500000C0083004D960000D8 +:109A30000C0085002D7C00003C005045010000001A +:109A4000FF002D7C00000000FF002D7C00000000C6 +:109A5000FF003D9600000C008900D9970000080027 +:109A60008A00919500000800FF002D7C0000000096 +:109A7000FF002D7C00000000FF003C008C45010031 +:109A8000F997000008008D002D7C00000000FF0009 +:109A90002D7C00000000FF00C997000030009000FE +:109AA0001195000018009100159600000800920022 +:109AB000599500003C009300299600003C00C845E1 +:109AC000010008009400A19500000800950081970E +:109AD00000000C0096006D97000010009800000038 +:109AE00000000000FF00000000000000FF00000870 +:109AF00008080808000000100800000800103C00DA +:109B000004460100080C0C0C0C1C0C0C0800000096 +:109B10000D8B0000F58A0000E98A0000018B00002F +:109B200014080C0C100C0000B1980000800000001C +:109B300019990000810000003D7C000080000000B9 +:109B40003C00404601003D99000082000000099958 +:109B50000000830000003D7C000085000000000044 +:109B6000000000000102020104040808813780F3AC +:109B7000AAAA03000000AAAA030000F86DA96DA913 +:109B80006EA93C007C4601006EA86EA86EA86FA767 +:109B90006FA76FA76FA66FA670A670A570A4000030 +:109BA000B51B0100C91B0100E11B0100E59C000081 +:109BB000A51B0100E59C0000891B0100D59C00004D +:109BC000D59C00003C00B8460100D11A0100E51AFE +:109BD0000100051B0100251B0100B11A0100E59CD5 +:109BE00000009D1A0100D59C0000C11A01008919CE +:109BF0000100A9190100C9190100F1190100791921 +:109C00000100E59C00003C00F446010065190100DC +:109C1000D59C0000D59C0000D59C0000D59C000080 +:109C2000D59C0000D59C0000D59C0000551C01006F +:109C3000451C0100451C0100D59C0000D59C00007E +:109C4000D59C0000D59C00003C0030470100D59C0D +:109C5000000055190100E59C00004119010031196F +:109C60000100D59C000002050A00000002040A0061 +:109C70000000C5200000212100002521000039211D +:109C8000000049210000552100003C006C47010004 +:109C900061210000ED2100000D22000021220000C2 +:109CA0003D22000049220000C5220000E122000000 +:109CB000F5220000E91F0000E91F0000E91F000075 +:109CC000E91F0000E91F0000112300003C00A84725 +:109CD00001001D23000089230000A5230000B923F3 +:109CE0000000112000001D2000006D2000008D20CC +:109CF0000000B92000000001020303050606080960 +:109D000008090909C480CA8080808080D0803C0016 +:109D1000E4470100D6D9DCDFE2808080E5E880807E +:109D20008080EBEEF1F4F7FAFD0001000200030081 +:109D30000400050006000700080009000A000B00E7 +:109D40000C000E00100011001300160018001B007C +:109D50003C00204801001E00220026002B0030009D +:109D600036003C0044004C0055005F006B0078005A +:109D700086009700A900BE00D500EF00FF7F0C0011 +:109D8000060002000000FEFFFCFFFBFFFAFFF9FFE8 +:109D9000F8FF3C005C480100F7FFF6FFF5FFF4FF19 +:109DA000F3FFF2FFF1FFF0FFEFFFEEFFEDFFECFF3F +:109DB000EBFFEAFFE9FFE8FFE7FFE6FFE5FFE4FF6F +:109DC000E3FFE2FFE1FFE0FFDFFFDEFFDDFFDCFF9F +:109DD000DCFF00003C00984801000000000000008B +:109DE0000000B17C4100115A40E2B27C4100055AAA +:109DF00040E2AF7C4100F95940E2B07C4100ED59AE +:109E000040E2246701000E0000E35C6701000E00E1 +:109E100000E30A6101003C00D4480100010000E3B6 +:109E20000E610100010000E3326701000E0000E353 +:109E30006A6701000E0000E30B610100010000E30E +:109E40000F610100010000E3406701000E0000E324 +:109E5000786701000E0000E33C00104901000C612E +:109E60000100010000E310610100010000E34E6702 +:109E700001000E0000E3866701000E0000E30D61A3 +:109E80000100010000E311610100010000E3C0488E +:109E900001000400000AE04801003C004C490100B8 +:109EA0000400000A004901000400000A20490100E2 +:109EB0000400000A18670100040000E2287501018F +:109EC0007DA940E22C750100040000E2207501002C +:109ED000040000E244750100040000E23C008849EF +:109EE0000100F0590100040000E200000000000041 +:109EF00000000000000000000000247501000400C4 +:109F000000E2B87C0100040000E28DA9000001001D +:109F100000DA1D750100010000E2C46701003C0089 +:109F2000C4490100040000E200000000000000003D +:109F3000215900000E0000D9C8670100040000E2AA +:109F4000CC670100040000E2D0670100040000E2D9 +:109F500065D90000040000DAA5D90000040000DA89 +:109F60003C00004A010001590000010000DA32679C +:109F700001000E0000E36A6701000E0000E31159C2 +:109F80000000010000DA0000000000000000B048FE +:109F900001000200000AA04801000200000A404936 +:109FA00001003C003C4A01000500000A684901002C +:109FB0000900000A6C570100040000E2386101004A +:109FC000040000E20000000000000000AC6E010090 +:109FD000040000E2B06E0100040000E270570100CE +:109FE000040000E23C00784A0100E8590100080042 +:109FF00000E3DC5801144DFD40E32C59011439FDF8 +:10A0000040E3C05801000E0000E300000000000023 +:10A0100000000000000000000000647341003D2EBD +:10A0200044E27C5901143C00B44A01009D2F44E3F2 +:10A030005C5701000E0000E2792E0400010000DBF5 +:10A04000A0580100020000E3A2580100020000E352 +:10A05000A05701000E0000E3D1880100010000DAE2 +:10A060001D890100040000DA3C00F04A01009588D7 +:10A070000100040000DB312F04000E0000D9C52EC2 +:10A0800004000E0000D9686C010115D540E2C057EC +:10A090000100080000E3C8570100340000E39C6C95 +:10A0A0000100080000E3B05801033C002C4B010004 +:10A0B000E9D440E2BC580100040000E29DA3000086 +:10A0C000600000D970790100040000E27879010095 +:10A0D000040000E27C5A0100040000E25D1C000064 +:10A0E000110000D9246E0100040000E23C00684B1E +:10A0F000010018580105D5D540E3FC5701001400B4 +:10A1000000E3048E0103E5D540E3005B0100040099 +:10A1100000E2185B0100400000E2D4670100040087 +:10A1200000E28D370000040000DBBD3600003C007B +:10A13000A44B0100040000DBFC600100020000E20F +:10A14000907D0100040000E270690100040000E25B +:10A150000000000000000000B04901001A00000AE1 +:10A16000904B01000600000AA458810005FD40E361 +:10A170003C00E04B0100804A01000C00000A0C5A30 +:10A180008101252D44E3E04A01000300000A186321 +:10A190004100FDBB40E208570100010000E29C487D +:10A1A0000100040000E20000000000000000F84A86 +:10A1B00001003C001C4C01000200000ACC740100AC +:10A1C000030000E365734100A92E44E2F659010142 +:10A1D000D12C44E3084B01000400000A07000000F2 +:10A1E0000100006A284B01000200000A887D01007E +:10A1F000040000E23C00584C010000750104656F4A +:10A2000040E3BC7801000E0000E3384B010004007D +:10A21000000A0457010004000062584B01000200CC +:10A22000000A804B01000200000A684B0100030095 +:10A23000000A8C7D01003C00944C0100040000E207 +:10A24000392D0400040000DB947D0100040000E2CD +:10A2500000000000000000000000000000000000FE +:10A260000000000000000000104001000000006439 +:10A27000A84C01000400000A3C00D04C0100000082 +:10A28000000000000000C84C01000100000AD04C92 +:10A2900001000200000A0000000000000000E77A50 +:10A2A0000100010000E2E87A0100010000E2000084 +:10A2B000000000000000ED7A01003C000C4D0100A0 +:10A2C000010000E2EE7A0100010000E2000000005F +:10A2D00000000000F37A0100010000E2F47A0100BE +:10A2E000010000E20000000000000000F97A010017 +:10A2F000010000E2FA7A0100010000E23C00484D52 +:10A300000100E84C01000300000A004D01000300B9 +:10A31000000A184D01000300000A304D010003003F +:10A32000000A905C0100040000E2945C010004005B +:10A3300000E2985C0100040000E29C5C01003C002B +:10A34000844D0100040000E2A05C0100040000E272 +:10A35000A45C0100040000E2A85C0100040000E22B +:10A36000AC5C0100040000E2B05C0100040000E20B +:10A37000B45C0100040000E2B85C0100040000E2EB +:10A380003C00C04D0100BC5C0100040000E2C05C68 +:10A390000100040000E2C45C0100040000E2905CE3 +:10A3A0000100380000E3684D01000E00000AD84D9E +:10A3B0000100020000FA1261810131D540E306611B +:10A3C00001003C00FC4D0100020000E20B610100B5 +:10A3D000010000E30F610100010000E308610100DA +:10A3E000020000E2507B0100040000E200000000D7 +:10A3F00000000000384E01000E0000649C5701016F +:10A40000918841E33C00384E01006E41676FE26580 +:10A4100060696F20414200000000F04D010009001A +:10A42000000A484E01000100000AE84D0100010049 +:10A43000000A0000000000000000484D0100040078 +:10A44000000A286101013C00744E0100BDD540E2C4 +:10A450006961410085D540E230610100040000E2FD +:10A4600034610100040000E23C610100040000E2EC +:10A4700034610100040000E244610100040000E2D4 +:10A48000000000000400006A3C00B04E0100704E65 +:10A4900001000800000A18610100020000E21C61CE +:10A4A0000100040000E220610100020000E22461DA +:10A4B0000100040000E2B84E01000200000AC84E8C +:10A4C00001000200000AD84E01003C00EC4E0100E1 +:10A4D0000200000A96480100060000E3E062010065 +:10A4E000040000E2000000000400006A9B7D0100FF +:10A4F000010000629C7D010002000062607C01009E +:10A50000040000E2010000000400006A3C00284F43 +:10A5100001002D6301000100006200000000000046 +:10A520000000000000000000000049D500000E00FF +:10A5300000D9F467010002000062467D01000100BD +:10A5400000629C7C0100040000E2987C01003C0059 +:10A55000644F010002000062A07C0100060000625E +:10A56000587C010002000062647C01000600006269 +:10A570005A7C0100020000626A7C01000600006251 +:10A58000010000000400006AE4620100040000E22F +:10A590003C00A04F0100E8620100030000E200005F +:10A5A00000000400006A000000000400006A0100CE +:10A5B00000000400006A000000000400006A0000BF +:10A5C00000000400006A000000000400006A0000AF +:10A5D00000003C00DC4F01000400006A00000000A5 +:10A5E0000400006A000000000400006A000000008F +:10A5F0000400006A000000000400006A000000007F +:10A600000400006A000000000400006A000000006E +:10A610000400006A3C001850010000000000040023 +:10A62000006A000000000400006A0000000004004E +:10A63000006A000000000400006A0000000004003E +:10A64000006AF04E01002A00000A01000000040028 +:10A65000006A752A01003C00545001000C0000DB28 +:10A66000020000000400006A752A01000C0000DBF3 +:10A67000030000000400006A752A01000C0000DBE2 +:10A68000040000000400006A752A01000C0000DBD1 +:10A69000050000000400006A3C0090500100752A8B +:10A6A00001000C0000DB060000000400006A752AAF +:10A6B00001000C0000DB070000000400006A752A9E +:10A6C00001000C0000DB080000000400006A752A8D +:10A6D00001000C0000DB090000003C00CC50010030 +:10A6E0000400006A752A01000C0000DB0A0000006B +:10A6F0000400006A752A01000C0000DB0B0000005A +:10A700000400006A752A01000C0000DB0C00000048 +:10A710000400006A752A01000C0000DB3C000851AF +:10A7200001000D0000000400006A752A01000C0001 +:10A7300000DB0E0000000400006A752A01000C0016 +:10A7400000DB485001000200000A585001000200DE +:10A75000000A685001000200000A785001003C0025 +:10A76000445101000200000A885001000200000A62 +:10A77000985001000200000AA85001000200000ADF +:10A78000B85001000200000AC85001000200000A8F +:10A79000D85001000200000AE85001000200000A3F +:10A7A0003C0080510100F85001000200000A0851ED +:10A7B00001000200000A185101000200000A405086 +:10A7C00001000100000AE84E01000100000A00003B +:10A7D0000000000000000000000000000000B04E7B +:10A7E00001003C00BC5101000100000A0000000013 +:10A7F00000000000285101000E00000A00000000C7 +:10A800000000000000000000000000000000000048 +:10A810000000000000000000000000000000000038 +:10A82000000000003C00F8510100985101000C00AC +:10A83000000A504E01000400000AE04C0100010033 +:10A84000000A0000000000000000C04B01001D00D5 +:10A85000000AF85101000500000A248007000000EA +:10A8600000001D8007003C00345201000800000079 +:10A870002A8007005C00000024800700020000001E +:10A880001D800700200000002A8007006A000000E9 +:10A8900024800700020000001D8007002000000047 +:10A8A0002A8007006A0000003C007052010000018D +:10A8B00002030405060708090A0B0C0D0E0F101100 +:10A8C00012131415161718191A1B1C1D1E1F0163CD +:10A8D0000000A1630000C5630000B1620000C56311 +:10A8E0000000216300004D6300003C00AC520100F9 +:10A8F000A163000001630000A163000006050505D7 +:10A9000005050505050505050505030506070809EF +:10A910000A0A0C0D0E0F0F1011000000A5C684F8D6 +:10A9200099EE8DF60DFFBDD6B1DE54913C00E85294 +:10A93000010050600302A9CE7D5619E762B5E64DCD +:10A940009AEC458F9D1F408987FA15EFEBB2C98EAF +:10A950000BFBEC4167B3FD5FEA45BF23F75396E479 +:10A960005B9BC2751CE1AE3D6A4C5A6C417E3C005B +:10A970002453010002F54F835C68F45134D108F987 +:10A9800093E273AB53623F2A0C08529565465E9D75 +:10A990002830A1370F0AB52F090E36249B1B3DDF47 +:10A9A00026CD694ECD7F9FEA1B129E1D74582E3412 +:10A9B0003C00605301002D36B2DCEEB4FB5BF6A424 +:10A9C0004D7661B7CE7D7B523EDD715E9713F5A665 +:10A9D00068B900002CC160401FE3C879EDB6BED451 +:10A9E000468DD9674B72DE94D498E8B04A856BBB2C +:10A9F0002AC53C009C530100E54F16EDC586D79A49 +:10AA000055669411CF8A10E9060481FEF0A04478BF +:10AA1000BA25E34BF3A2FE5DC0808A05AD3FBC21A1 +:10AA2000487004F1DF63C17775AF634230201AE5E7 +:10AA30000EFD6DBF3C00D85301004C811418352623 +:10AA40002FC3E1BEA235CC88392E5793F25582FC34 +:10AA5000477AACC8E7BA2B3295E6A0C09819D19EC8 +:10AA60007FA366447E54AB3B830BCA8C29C7D36B50 +:10AA70003C2879A7E2BC3C00145401001D1676ADB9 +:10AA80003BDB56644E741E14DB920A0C6C48E4B82F +:10AA90005D9F6EBDEF43A6C4A839A43137D38BF2B6 +:10AAA00032D5438B596EB7DA8C0164B1D29CE04940 +:10AAB000B4D8FAAC07F325CF3C0050540100AFCA1C +:10AAC0008EF4E9471810D56F88F06F4A725C24380D +:10AAD000F157C773519723CB7CA19CE8213EDD96AB +:10AAE000DC61860D850F90E0427CC471AACCD890C1 +:10AAF000050601F7121CA3C25F6A3C008C540100DA +:10AB0000F9AED06991175899273AB92738D913EB7C +:10AB1000B32B3322BBD270A98907A733B62D223CB1 +:10AB2000921520C94987FFAA78507AA58F03F85952 +:10AB30008009171ADA6531D7C684B8D03C00C854EA +:10AB40000100C382B029775A111ECB7BFCA8D66DB9 +:10AB50003A2CC6A5F884EE99F68DFF0DD6BDDEB170 +:10AB6000915460500203CEA9567DE719B5624DE6B7 +:10AB7000EC9A8F451F9D8940FA87EF15B2EB3C0098 +:10AB8000045501008EC9FB0B41ECB3675FFD45EA3C +:10AB900023BF53F7E4969B5B75C2E11C3DAE4C6A44 +:10ABA0006C5A7E41F502834F685C51F4D134F90848 +:10ABB000E293AB7362532A3F080C955246659D5E43 +:10ABC0003C0040550100302837A10A0F2FB50E096F +:10ABD00024361B9BDF3DCD264E697FCDEA9F121B9D +:10ABE0001D9E5874342E362DDCB2B4EE5BFBA4F6F9 +:10ABF000764DB7617DCE527BDD3E5E711397A6F533 +:10AC0000B9683C007C5501000000C12C4060E31F86 +:10AC100079C8B6EDD4BE8D4667D9724B94DE98D410 +:10AC2000B0E8854ABB6BC52A4FE5ED1686C59AD7B5 +:10AC3000665511948ACFE9100406FE81A0F078448D +:10AC400025BA4BE33C00B8550100A2F35DFE80C07D +:10AC5000058A3FAD21BC7048F10463DF77C1AF7551 +:10AC600042632030E51AFD0EBF6D814C1814263565 +:10AC7000C32FBEE135A288CC2E39935755F2FC8202 +:10AC80007A47C8ACBAE73C00F4550100322BE69590 +:10AC9000C0A019989ED1A37F4466547E3BAB0B8322 +:10ACA0008CCAC7296BD3283CA779BCE2161DAD76A8 +:10ACB000DB3B6456744E141E92DB0C0A486CB8E4FD +:10ACC0009F5DBD6E43EFC4A63C003056010039A81D +:10ACD00031A4D337F28BD5328B436E59DAB7018C5E +:10ACE000B1649CD249E0D8B4ACFAF307CF25CAAF1F +:10ACF000F48E47E910186FD5F0884A6F5C723824DB +:10AD000057F173C79751CB23A17C3C006C560100CF +:10AD1000E89C3E2196DD61DC0D860F85E0907C424B +:10AD200071C4CCAA90D80605F7011C12C2A36A5FB1 +:10AD3000AEF969D0179199583A2727B9D938EB134A +:10AD40002BB32233D2BBA970078933A73C00A85686 +:10AD500001002DB63C221592C9208749AAFF5078E0 +:10AD6000A57A038F59F809801A1765DAD73184C696 +:10AD7000D0B882C329B05A771E117BCBA8FC6DD600 +:10AD80002C3A0400000000000000010000003C001C +:10AD9000E45601000200000003000000050000006E +:10ADA000000000000100000002000000030000009D +:10ADB00004000000010000000172657145727252CA +:10ADC0006561736F6E000000010000000500000067 +:10ADD0003C0020570100C48E0100249A01000000AD +:10ADE000000030000000249A0100A4B2010000001D +:10ADF00000006C000000A4B2010014C801000000B3 +:10AE00000000C00000001020304050BB30000100A6 +:10AE100000003C005C5701001416181A1C1E20226A +:10AE20002426282A2B2C01007017000001000000A6 +:10AE30000D250000413F0100652901000D2500009E +:10AE4000F55E0000413F0100413F010002040B0C90 +:10AE5000121618243C00985701003048606C01001D +:10AE60000000101010101010101010101010101002 +:10AE700000006400000001000000FFFFFFFF010070 +:10AE80000000000210121100000118000000020072 +:10AE90000000010000003C00D45701000000000049 +:10AEA000000000000200000004000000000000009C +:10AEB00000000000E093040040420F00000000008A +:10AEC0000100000000800000DF40CFFD0040830053 +:10AED00000000000010200003C00105801000000CA +:10AEE0000000000000000000000040008081000021 +:10AEF0008000BFFF7F7E0102000000000000000014 +:10AF0000000001000000786F010000000000B86F31 +:10AF1000010000000000F86F01003C004C580100E7 +:10AF2000000000003870010000000000787001008F +:10AF300000000000B870010000000000F87001007F +:10AF4000000000003871010000000000787101006D +:10AF50000001000090710100000100003C008858D1 +:10AF60000100A87101000001000000050A01060BA4 +:10AF700002070C03080D040900000303010100048B +:10AF800000040406161E1F0000000000000100005F +:10AF900080000000000000FFFFFF181818183C0098 +:10AFA000C458010018181818181818181818000094 +:10AFB000618B4A00618F4A00618B4A0005E3C00043 +:10AFC00005CBC00005BBC00085BAC00085A2C0008B +:10AFD0008592C000858AC000857AC0004589C0007E +:10AFE0003C00005901004571C0004569C000456141 +:10AFF000C0004559C0004551C0004549C000454109 +:10B00000C0004539C0004531C0004529C000452178 +:10B01000C000602D0600602D0600602D0600602D2A +:10B0200006003C003C590100602D06006028060027 +:10B030005026060050210600501F0600501C060036 +:10B04000501A06005018060050160600501406004C +:10B050005012060050100600500E0600500C06005C +:10B06000500A06003C00785901002B0B06001D75A4 +:10B07000C0001D75C0001D75C0001D75C0001D7588 +:10B08000C0001D75C0001D6DC000DD5BC000DD4B44 +:10B09000C000DD43C000DD3BC000DD33C000DD2B60 +:10B0A000C000DD23C0003C00B4590100DD1BC0001E +:10B0B000DD13C000DD13C000DD13C000DD13C000D0 +:10B0C000DD13C000050505040403030202010100AD +:10B0D000000005050504040303020201010000004D +:10B0E00000000000881300003C00F0590100070038 +:10B0F000000080005B004002E0FDF200B8FCA4010B +:10B1000000000F0000000F000000030B9F5F07010D +:10B110002A04210417040E040404FB03F103E803CA +:10B12000C903AA038A036B034C033C002C5A010099 +:10B130002D030E03EE02EC02010316032B03400362 +:10B1400055036A037F039403A903BE03D303E803F3 +:10B15000BE0394036A030002040607090A0B0C0DE0 +:10B160001010101010101010101000033C00685A3E +:10B17000010005080B0E1010101010101010101008 +:10B18000101010100000010000000100000000007D +:10B1900000000000000000000000000000000000AF +:10B1A00000000000000000000000000000003C0063 +:10B1B000A45A010000000000000000000000000090 +:10B1C000000000000000000000000000000000007F +:10B1D000000000000000000000000000000000006F +:10B1E000000000000000000000000000000000005F +:10B1F0003C00E05A010000000000000000000000D8 +:10B20000000000000000000000000000000000003E +:10B21000000000000000000000000000000000002E +:10B22000000000000000000000000000000000001E +:10B2300000003C001C5B010000000000000000005A +:10B2400000000000000000000000000000000000FE +:10B2500000000000000000000000000000000000EE +:10B2600000000000000000000000000000000000DE +:10B27000000000003C00585B0100000000000000DE +:10B2800000000000000000000000000000000000BE +:10B2900000000000000000000000000000000000AE +:10B2A000000000000000000000000000000000009E +:10B2B0000000000000003C00945B01000000000062 +:10B2C000000000000000000000000000000000007E +:10B2D000000000000000000000000000000000006E +:10B2E000000000000000000000000000000000005E +:10B2F00000000000000000003C00D05B01000000E6 +:10B30000000000000000000000000000000000003D +:10B31000000000000000000000000000000000002D +:10B32000000000000000000000000000000000001D +:10B33000000000000000000000003C000C5C010068 +:10B3400000000000000000000000000000000000FD +:10B3500000000000000000000000000000000000ED +:10B3600000000000000000000000000000000000DD +:10B370000000000000000000000000003C00485CED +:10B3800001000000000000000000000000000000BC +:10B3900000000000000000000000000000000000AD +:10B3A000000000000000000000000000000000009D +:10B3B00000000000000000000000000000003C0051 +:10B3C000845C01000000000000000000000000009C +:10B3D000000000000000000000000000000000006D +:10B3E000000000000000000000000000000000005D +:10B3F000000000000000000000000000000000004D +:10B400003C00C05C010000000000000000000000E3 +:10B41000000000000000000000000000000000002C +:10B42000000000000000000000000000000000001C +:10B43000000000000000000000000000000000000C +:10B4400000003C00FC5C0100000000000000000067 +:10B4500000000000000000000000000000000000EC +:10B4600000000000000000000000000000000000DC +:10B4700000000000000000000000000000000000CC +:10B48000000000003C00385D0100000000000000EA +:10B4900000000000000000000000000000000000AC +:10B4A000000000000000000000000000000000009C +:10B4B000000000000000000000000000000000008C +:10B4C0000000000000003C00745D0100000000006E +:10B4D000000000000000000000000000000000006C +:10B4E000000000000000000000000000000000005C +:10B4F000000000000000000000000000000000004C +:10B5000000000000000000003C00B05D01000000F1 +:10B51000000000000000000000000000000000002B +:10B52000000000000000000000000000000000001B +:10B53000000000000000000000000000000000000B +:10B54000000000000000000000003C00EC5D010075 +:10B5500000000000000000000000000000000000EB +:10B5600000000000000000000000000000000000DB +:10B5700000000000000000000000000000000000CB +:10B580000000000000000000000000003C00285EF9 +:10B5900001000000000000000000000000000000AA +:10B5A000000000000000000000000000000000009B +:10B5B000000000000000000000000000000000008B +:10B5C00000000000000000000000000000003C003F +:10B5D000645E0100000000000000000000000000A8 +:10B5E000000000000000000000000000000000005B +:10B5F000000000000000000000000000000000004B +:10B60000000000000000000000000000000000003A +:10B610003C00A05E010000000000000000000000EF +:10B62000000000000000000000000000000000001A +:10B63000000000000000000000000000000000000A +:10B6400000000000000000000000000000000000FA +:10B6500000003C00DC5E0100000000000000000073 +:10B6600000000000000000000000000000000000DA +:10B6700000000000000000000000000000000000CA +:10B6800000000000000000000000000000000000BA +:10B69000000000003C00185F0100000000000000F6 +:10B6A000000000000000000000000000000000009A +:10B6B000000000000000000000000000000000008A +:10B6C000000000000000000000000000000000007A +:10B6D0000000000000003C00545F0100000000007A +:10B6E000000000000000000000000000000000005A +:10B6F000000000000000000000000000000000004A +:10B700000000000000000000000000000000000039 +:10B7100000000000000000003C00905F01000000FD +:10B720000000000000000000000000000000000019 +:10B730000000000000000000000000000000000009 +:10B7400000000000000000000000000000000000F9 +:10B75000000000000000000000003C00CC5F010081 +:10B7600000000000000000000000000000000000D9 +:10B7700000000000000000000000000000000000C9 +:10B7800000000000000000000000000000000000B9 +:10B790000000000000000000000000003C00086005 +:10B7A0000100000000000000000000000000000098 +:10B7B0000000000000000000000000000000000089 +:10B7C0000000000000000000000000000000000079 +:10B7D00000000000000000000000000000003C002D +:10B7E00044600100000000000000000000000000B4 +:10B7F0000000000000000000000000000000000049 +:10B800000000000000000000000000000000000038 +:10B810000000000000000000000000000000000028 +:10B820003C008060010000000000000000000000FB +:10B830000000000000000000000000000000000008 +:10B8400000000000000000000000000000000000F8 +:10B8500000000000000000000000000000000000E8 +:10B8600000003C00BC60010000000000000000007F +:10B8700000000000000000000000000000000000C8 +:10B8800000000000000000000000000000000000B8 +:10B8900000000000000000000000000000000000A8 +:10B8A000000000003C00F860010000000000000003 +:10B8B0000000000000000000000000000000000088 +:10B8C0000000000000000000000000000000000078 +:10B8D0000000000000000000000000000000000068 +:10B8E0000000000000003C00346101000000000086 +:10B8F0000000000000000000000000000000000048 +:10B900000000000000000000000000000000000037 +:10B910000000000000000000000000000000000027 +:10B9200000000000000000003C0070610100000009 +:10B930000000000000000000000000000000000007 +:10B9400000000000000000000000000000000000F7 +:10B9500000000000000000000000000000000000E7 +:10B96000000000000000000000003C00AC6101008D +:10B9700000000000000000000000000000000000C7 +:10B9800000000000000000000000000000000000B7 +:10B9900000000000000000000000000000000000A7 +:10B9A0000000000000000000000000003C00E86112 +:10B9B0000100000000000000000000000000000086 +:10B9C0000000000000000000000000000000000077 +:10B9D0000000000000000000000000000000000067 +:10B9E00000000000000000000000000000003C001B +:10B9F00024620100000000000000000000000000C0 +:10BA00000000000000000000000000000000000036 +:10BA10000000000000000000000000000000000026 +:10BA20000000000000000000000000000000000016 +:10BA30003C00606201000000000000000000000007 +:10BA400000000000000000000000000000000000F6 +:10BA500000000000000000000000000000000000E6 +:10BA600000000000000000000000000000000000D6 +:10BA700000003C009C62010000000000000000008B +:10BA800000000000000000000000000000000000B6 +:10BA900000000000000000000000000000000000A6 +:10BAA0000000000000000000000000000000000096 +:10BAB000000000003C00D86201000000000000000F +:10BAC0000000000000000000000000000000000076 +:10BAD0000000000000000000000000000000000066 +:10BAE0000000000000000000000000000000000056 +:10BAF0000000000000003C00146301000000000092 +:10BB00000000000000000000000000000000000035 +:10BB10000000000000000000000000000000000025 +:10BB20000000000000000000000000000000000015 +:10BB300000000000000000003C0050630100000015 +:10BB400000000000000000000000000000000000F5 +:10BB500000000000000000000000000000000000E5 +:10BB600000000000000000000000000000000000D5 +:10BB7000000000000000000000003C008C63010099 +:10BB800000000000000000000000000000000000B5 +:10BB900000000000000000000000000000000000A5 +:10BBA0000000000000000000000000000000000095 +:10BBB0000000000000000000000000003C00C8631E +:10BBC0000100000000000000000000000000000074 +:10BBD0000000000000000000000000000000000065 +:10BBE0000000000000000000000000000000000055 +:10BBF00000000000000000000000000000003C0009 +:10BC000004640100000000000000000000000000CB +:10BC10000000000000000000000000000000000024 +:10BC20000000000000000000000000000000000014 +:10BC30000000000000000000000000000000000004 +:10BC40003C00406401000000000000000000000013 +:10BC500000000000000000000000000000000000E4 +:10BC600000000000000000000000000000000000D4 +:10BC700000000000000000000000000000000000C4 +:10BC800000003C007C640100000000000000000097 +:10BC900000000000000000000000000000000000A4 +:10BCA0000000000000000000000000000000000094 +:10BCB0000000000000000000000000000000000084 +:10BCC000000000003C00B86401000000000000001B +:10BCD0000000000000000000000000000000000064 +:10BCE0000000000000000000000000000000000054 +:10BCF0000000000000000000000000000000000044 +:10BD00000000000000003C00F4640100000000009E +:10BD10000000000000000000000000000000000023 +:10BD20000000000000000000000000000000000013 +:10BD30000000000000000000000000000000000003 +:10BD400000000000000000003C0030650100000021 +:10BD500000000000000000000000000000000000E3 +:10BD600000000000000000000000000000000000D3 +:10BD700000000000000000000000000000000000C3 +:10BD8000000000000000000000003C006C650100A5 +:10BD900000000000000000000000000000000000A3 +:10BDA0000000000000000000000000000000000093 +:10BDB0000000000000000000000000000000000083 +:10BDC0000000000000000000000000003C00A8652A +:10BDD0000100000000000000000000000000000062 +:10BDE0000000000000000000000000000000000053 +:10BDF0000000000000000000000000000000000043 +:10BE000000000000000000000000000000003C00F6 +:10BE1000E4650100000000000000000000000000D8 +:10BE20000000000000000000000000000000000012 +:10BE30000000000000000000000000000000000002 +:10BE400000000000000000000000000000000000F2 +:10BE50003C0020660100000000000000000000001F +:10BE600000000000000000000000000000000000D2 +:10BE700000000000000000000000000000000000C2 +:10BE800000000000000000000000000000000000B2 +:10BE900000003C005C6601000000000000000000A3 +:10BEA0000000000000000000000000000000000092 +:10BEB0000000000000000000000000000000000082 +:10BEC0000000000000000000000000000000000072 +:10BED000000000003C009866010000000000000027 +:10BEE0000000000000000000000000000000000052 +:10BEF0000000000000000000000000000000000042 +:10BF00000000000000000000000000000000000031 +:10BF10000000000000003C00D466010000000000AA +:10BF20000000000000000000000000000000000011 +:10BF30000000000000000000000000000000000001 +:10BF400000000000000000000000000000000000F1 +:10BF500000000000000000003C001067010000002D +:10BF600000000000000000000000000000000000D1 +:10BF700000000000000000000000000000000000C1 +:10BF800000000000000000000000000000000000B1 +:10BF9000000000000000000000003C004C670100B1 +:10BFA0000000000000000000000000000000000091 +:10BFB0000000000000000000000000000000000081 +:10BFC0000000000000000000000000000000000071 +:10BFD0000000000000000000000000003C00886736 +:10BFE0000100000000000000000000000000000050 +:10BFF0000000000000000000000000000000000041 +:10C000000000000000000000000000000000000030 +:10C0100000000000000000000000000000003C00E4 +:10C02000C4670100000000000000000000000000E4 +:10C030000000000000000000000000000000000000 +:10C0400000000000000000000000000000000000F0 +:10C0500000000000000000000000000000000000E0 +:10C060003C0000680100000000000000000000002B +:10C0700000000000000000000000000000000000C0 +:10C0800000000000000000000000000000000000B0 +:10C0900000000000000000000000000000000000A0 +:10C0A00000003C003C6801000000000000000000AF +:10C0B0000000000000000000000000000000000080 +:10C0C0000000000000000000000000000000000070 +:10C0D0000000000000000000000000000000000060 +:10C0E000000000003C007868010000000000000033 +:10C0F0000000000000000000000000000000000040 +:10C10000000000000000000000000000000000002F +:10C11000000000000000000000000000000000001F +:10C120000000000000003C00B468010000000000B6 +:10C1300000000000000000000000000000000000FF +:10C1400000000000000000000000000000000000EF +:10C1500000000000000000000000000000000000DF +:10C1600000000000000000003C00F068010000003A +:10C1700000000000000000000000000000000000BF +:10C1800000000000000000000000000000000000AF +:10C19000000000000000000000000000000000009F +:10C1A000000000000000000000003C002C690100BD +:10C1B000000000000000000000000000000000007F +:10C1C000000000000000000000000000000000006F +:10C1D000000000000000000000000000000000005F +:10C1E0000000000000000000000000003C00686942 +:10C1F000010000000000000000000000000000003E +:10C20000000000000000000000000000000000002E +:10C21000000000000000000000000000000000001E +:10C2200000000000000000000000000000003C00D2 +:10C23000A4690100000000000000000000000000F0 +:10C2400000000000000000000000000000000000EE +:10C2500000000000000000000000000000000000DE +:10C2600000000000000000000000000000000000CE +:10C270003C00E06901000000000000000000000038 +:10C2800000000000000000000000000000000000AE +:10C29000000000000000000000000000000000009E +:10C2A000000000000000000000000000000000008E +:10C2B00000003C001C6A01000000000000000000BB +:10C2C000000000000000000000000000000000006E +:10C2D000000000000000000000000000000000005E +:10C2E000000000000000000000000000000000004E +:10C2F000000000003C00586A01000000000000003F +:10C30000000000000000000000000000000000002D +:10C31000000000000000000000000000000000001D +:10C32000000000000000000000000000000000000D +:10C330000000000000003C00946A010000000000C2 +:10C3400000000000000000000000000000000000ED +:10C3500000000000000000000000000000000000DD +:10C3600000000000000000000000000000000000CD +:10C3700000000000000000003C00D06A0100000046 +:10C3800000000000000000000000000000000000AD +:10C39000000000000000000000000000000000009D +:10C3A000000000000000000000000000000000008D +:10C3B000000000000000000000003C000C6B0100C9 +:10C3C000000000000000000000000000000000006D +:10C3D000000000000000000000000000000000005D +:10C3E000000000000000000000000000000000004D +:10C3F0000000000000000000000000003C00486B4E +:10C40000010000000000000000000000000000002B +:10C41000000000000000000000000000000000001C +:10C42000000000000000000000000000000000000C +:10C4300000000000000000000000000000003C00C0 +:10C44000846B0100000000000000000000000000FC +:10C4500000000000000000000000000000000000DC +:10C4600000000000000000000000000000000000CC +:10C4700000000000000000000000000000000000BC +:10C480003C00C06B01000000000000000000000044 +:10C49000000000000000000000000000000000009C +:10C4A000000000000000000000000000000000008C +:10C4B000000000000000000000000000000000007C +:10C4C00000003C00FC6B01000000000000000000C8 +:10C4D000000000000000000000000000000000005C +:10C4E000000000000000000000000000000000004C +:10C4F000000000000000000000000000000000003C +:10C50000000000003C00386C01000000000000004A +:10C51000000000000000000000000000000000001B +:10C52000000000000000000000000000000000000B +:10C5300000000000000000000000000000000000FB +:10C540000000000000003C00746C010000000000CE +:10C5500000000000000000000000000000000000DB +:10C5600000000000000000000000000000000000CB +:10C5700000000000000000000000000000000000BB +:10C5800000000000000000003C00B06C0100000052 +:10C59000000000000000000000000000000000009B +:10C5A000000000000000000000000000000000008B +:10C5B000000000000000000000000000000000007B +:10C5C000000000000000000000003C00EC6C0100D6 +:10C5D000000000000000000000000000000000005B +:10C5E000000000000000000000000000000000004B +:10C5F000000000000000000000000000000000003B +:10C600000000000000000000000000003C00286D59 +:10C610000100000000000000000000000000000019 +:10C62000000000000000000000000000000000000A +:10C6300000000000000000000000000000000000FA +:10C6400000000000000000000000000000003C00AE +:10C65000646D010000000000000000000000000008 +:10C6600000000000000000000000000000000000CA +:10C6700000000000000000000000000000000000BA +:10C6800000000000000000000000000000000000AA +:10C690003C00A06D01000000000000000000000050 +:10C6A000000000000000000000000000000000008A +:10C6B000000000000000000000000000000000007A +:10C6C000000000000000000000000000000000006A +:10C6D00000003C00DC6D01000000000000000000D4 +:10C6E000000000000000000000000000000000004A +:10C6F000000000000000000000000000000000003A +:10C700000000000000000000000000000000000029 +:10C71000000000003C00186E010000000000000056 +:10C720000000000000000000000000000000000009 +:10C7300000000000000000000000000000000000F9 +:10C7400000000000000000000000000000000000E9 +:10C750000000000000003C00546E010000000000DA +:10C7600000000000000000000000000000000000C9 +:10C7700000000000000000000000000000000000B9 +:10C7800000000000000000000000000000000000A9 +:10C7900000000000000000003C00906E010000005E +:10C7A0000000000000000000000000000000000089 +:10C7B0000000000000000000000000000000000079 +:10C7C0000000000000000000000000000000000069 +:10C7D000000000000000000000003C00CC6E0100E2 +:10C7E0000000000000000000000000000000000049 +:10C7F0000000000000000000000000000000000039 +:10C800000000000000000000000000000000000028 +:10C810000000000000000000000000003C00086F65 +:10C820000100000000000000000000000000000007 +:10C8300000000000000000000000000000000000F8 +:10C8400000000000000000000000000000000000E8 +:10C8500000000000000000000000000000003C009C +:10C86000446F010000000000000000000000000014 +:10C8700000000000000000000000000000000000B8 +:10C8800000000000000000000000000000000000A8 +:10C890000000000000000000000000000000000098 +:10C8A0003C00806F0100000000000000000000005C +:10C8B0000000000000000000000000000000000078 +:10C8C0000000000000000000000000000000000068 +:10C8D0000000000000000000000000000000000058 +:10C8E00000003C00BC6F01000000000000000000E0 +:10C8F0000000000000000000000000000000000038 +:10C900000000000000000000000000000000000027 +:10C910000000000000000000000000000000000017 +:10C92000000000003C00F86F010000000000000063 +:10C9300000000000000000000000000000000000F7 +:10C9400000000000000000000000000000000000E7 +:10C9500000000000000000000000000000000000D7 +:10C960000000000000003C003470010000000000E6 +:10C9700000000000000000000000000000000000B7 +:10C9800000000000000000000000000000000000A7 +:10C990000000000000000000000000000000000097 +:10C9A00000000000000000003C007070010000006A +:10C9B0000000000000000000000000000000000077 +:10C9C0000000000000000000000000000000000067 +:10C9D0000000000000000000000000000000000057 +:10C9E000000000000000000000003C00AC700100EE +:10C9F0000000000000000000000000000000000037 +:10CA00000000000000000000000000000000000026 +:10CA10000000000000000000000000000000000016 +:10CA20000000000000000000000000003C00E87072 +:10CA300001000000000000000000000000000000F5 +:10CA400000000000000000000000000000000000E6 +:10CA500000000000000000000000000000000000D6 +:10CA600000000000000000000000000000003C008A +:10CA70002471010000000000000000000000000020 +:10CA800000000000000000000000000000000000A6 +:10CA90000000000000000000000000000000000096 +:10CAA0000000000000000000000000000000000086 +:10CAB0003C00607101000000000000000000000068 +:10CAC0000000000000000000000000000000000066 +:10CAD0000000000000000000000000000000000056 +:10CAE0000000000000000000000000000000000046 +:10CAF00000003C009C7101000000000000000000EC +:10CB00000000000000000000000000000000000025 +:10CB10000000000000000000000000000000000015 +:10CB20000000000000000000000000000000000005 +:10CB3000000000003C00D87101000000000000006F +:10CB400000000000000000000000000000000000E5 +:10CB500000000000000000000000000000000000D5 +:10CB600000000000000000000000000000000000C5 +:10CB70000000000000003C001472010000000000F2 +:10CB800000000000000000000000000000000000A5 +:10CB90000000000000000000000000000000000095 +:10CBA0000000000000000000000000000000000085 +:10CBB00000000000000000003C0050720100000076 +:10CBC0000000000000000000000000000000000065 +:10CBD0000000000000000000000000000000000055 +:10CBE0000000000000000000000000000000000045 +:10CBF000000000000000000000003C008C720100FA +:10CC00000000000000000000000000000000000024 +:10CC10000000000000000000000000000000000014 +:10CC20000000000000000000000000000000000004 +:10CC30000000000000000000000000003C00C8727E +:10CC400001000000000000000000000000000000E3 +:10CC500000000000000000000000000000000000D4 +:10CC600000000000000000000000000000000000C4 +:10CC700000000000000000000000000000003C0078 +:10CC8000047301000000000000000000000000002C +:10CC90000000000000000000000000000000000094 +:10CCA0000000000000000000000000000000000084 +:10CCB0000000000000000000000000000000000074 +:10CCC0003C00407301000000000000000000000074 +:10CCD0000000000000000000000000000000000054 +:10CCE0000000000000000000000000000000000044 +:10CCF0000000000000000000000000000000000034 +:10CD000000003C007C7301000000000000000000F7 +:10CD10000000000000000000000000000000000013 +:10CD20000000000000000000000000000000000003 +:10CD300000000000000000000000000000000000F3 +:10CD4000000000003C00B87301000000000000007B +:10CD500000000000000000000000000000000000D3 +:10CD600000000000000000000000000000000000C3 +:10CD700000000000000000000000000000000000B3 +:10CD80000000000000003C00F473010000000000FF +:10CD90000000000000000000000000000000000093 +:10CDA0000000000000000000000000000000000083 +:10CDB0000000000000000000000000000000000073 +:10CDC00000000000000000003C0030740100000082 +:10CDD0000000000000000000000000000000000053 +:10CDE0000000000000000000000000000000000043 +:10CDF0000000000000000000000000000000000033 +:10CE0000000000000000000000003C006C74010005 +:10CE10000000000000000000000000000000000012 +:10CE20000000000000000000000000000000000002 +:10CE300000000000000000000000000000000000F2 +:10CE40000000000000000000000000003C00A8748A +:10CE500001000000000000000000000000000000D1 +:10CE600000000000000000000000000000000000C2 +:10CE700000000000000000000000000000000000B2 +:10CE800000000000000000000000000000003C0066 +:10CE9000E474010000000000000000000000000039 +:10CEA0000000000000000000000000000000000082 +:10CEB0000000000000000000000000000000000072 +:10CEC0000000000000000000000000000000000062 +:10CED0003C00207501000000000000000000000080 +:10CEE0000000000000000000000000000000000042 +:10CEF0000000000000000000000000000000000032 +:10CF00000000000000000000000000000000000021 +:10CF100000003C005C750100000000000000000003 +:10CF20000000000000000000000000000000000001 +:10CF300000000000000000000000000000000000F1 +:10CF400000000000000000000000000000000000E1 +:10CF5000000000003C009875010000000000000087 +:10CF600000000000000000000000000000000000C1 +:10CF700000000000000000000000000000000000B1 +:10CF800000000000000000000000000000000000A1 +:10CF90000000000000003C00D4750100000000000B +:10CFA0000000000000000000000000000000000081 +:10CFB0000000000000000000000000000000000071 +:10CFC0000000000000000000000000000000000061 +:10CFD00000000000000000003C001076010000008E +:10CFE0000000000000000000000000000000000041 +:10CFF0000000000000000000000000000000000031 +:10D000000000000000000000000000000000000020 +:10D01000000000000000000000003C004C76010011 +:10D020000000000000000000000000000000000000 +:10D0300000000000000000000000000000000000F0 +:10D0400000000000000000000000000000000000E0 +:10D050000000000000000000000000003C00887696 +:10D0600001000000000000000000000000000000BF +:10D0700000000000000000000000000000000000B0 +:10D0800000000000000000000000000000000000A0 +:10D0900000000000000000000000000000003C0054 +:10D0A000C476010000000000000000000000000045 +:10D0B0000000000000000000000000000000000070 +:10D0C0000000000000000000000000000000000060 +:10D0D0000000000000000000000000000000000050 +:10D0E0003C0000770100000000000000000000008C +:10D0F0000000000000000000000000000000000030 +:10D10000000000000000000000000000000000001F +:10D11000000000000000000000000000000000000F +:10D1200000003C003C77010000000000000000000F +:10D1300000000000000000000000000000000000EF +:10D1400000000000000000000000000000000000DF +:10D1500000000000000000000000000000000000CF +:10D16000000000003C007877010000000000000093 +:10D1700000000000000000000000000000000000AF +:10D18000000000000000000000000000000000009F +:10D19000000000000000000000000000000000008F +:10D1A0000000000000003C00B47701000000000017 +:10D1B000000000000000000000000000000000006F +:10D1C000000000000000000000000000000000005F +:10D1D000000000000000000000000000000000004F +:10D1E00000000000000000003C00F077010000009B +:10D1F000000000000000000000000000000000002F +:10D20000000000000000000000000000000000001E +:10D21000000000000000000000000000000000000E +:10D22000000000000000000000003C002C7801001D +:10D2300000000000000000000000000000000000EE +:10D2400000000000000000000000000000000000DE +:10D2500000000000000000000000000000000000CE +:10D260000000000000000000000000003C006878A2 +:10D2700001000000000000000000000000000000AD +:10D28000000000000000000000000000000000009E +:10D29000000000000000000000000000000000008E +:10D2A00000000000000000000000000000003C0042 +:10D2B000A478010000000000000000000000000051 +:10D2C000000000000000000000000000000000005E +:10D2D000000000000000000000000000000000004E +:10D2E000000000000000000000000000000000003E +:10D2F0003C00E07801000000000000000000000099 +:10D30000000000000000000000000000000000001D +:10D31000000000000000000000000000000000000D +:10D3200000000000000000000000000000000000FD +:10D3300000003C001C79010000000000000000001B +:10D3400000000000000000000000000000000000DD +:10D3500000000000000000000000000000000000CD +:10D3600000000000000000000000000000000000BD +:10D37000000000003C00587901000000000000009F +:10D38000000000000000000000000000000000009D +:10D39000000000000000000000000000000000008D +:10D3A000000000000000000000000000000000007D +:10D3B0000000000000003C00947901000000000023 +:10D3C000000000000000000000000000000000005D +:10D3D000000000000000000000000000000000004D +:10D3E000000000000000000000000000000000003D +:10D3F00000000000000000003C00D07901000000A7 +:10D40000000000000000000000000000000000001C +:10D41000000000000000000000000000000000000C +:10D4200000000000000000000000000000000000FC +:10D43000000000000000000000003C000C7A010029 +:10D4400000000000000000000000000000000000DC +:10D4500000000000000000000000000000000000CC +:10D4600000000000000000000000000000000000BC +:10D470000000000000000000000000003C00487AAE +:10D48000010000000000000000000000000000009B +:10D49000000000000000000000000000000000008C +:10D4A000000000000000000000000000000000007C +:10D4B00000000000000000000000000000003C0030 +:10D4C000847A01000000000000000000000000005D +:10D4D000000000000000000000000000000000004C +:10D4E000000000000000000000000000000000003C +:10D4F000000000000000000000000000000000002C +:10D500003C00C07A010000000000000000000000A4 +:10D51000000000000000000000000000000000000B +:10D5200000000000000000000000000000000000FB +:10D5300000000000000000000000000000000000EB +:10D5400000003C00FC7A0100000000000000000028 +:10D5500000000000000000000000000000000000CB +:10D5600000000000000000000000000000000000BB +:10D5700000000000000000000000000000000000AB +:10D58000000000003C00387B0100000000000000AB +:10D59000000000000000000000000000000000008B +:10D5A000000000000000000000000000000000007B +:10D5B000000000000000000000000000000000006B +:10D5C0000000000000003C00747B0100000000002F +:10D5D000000000000000000000000000000000004B +:10D5E000000000000000000000000000000000003B +:10D5F000000000000000000000000000000000002B +:10D6000000000000000000003C00B07B01000000B2 +:10D61000000000000000000000000000000000000A +:10D6200000000000000000000000000000000000FA +:10D6300000000000000000000000000000000000EA +:10D64000000000000000000000003C00EC7B010036 +:10D6500000000000000000000000000000000000CA +:10D6600000000000000000000000000000000000BA +:10D6700000000000000000000000000000000000AA +:10D680000000000000000000000000003C00287CBA +:10D690000100000000000000000000000000000089 +:10D6A000000000000000000000000000000000007A +:10D6B000000000000000000000000000000000006A +:10D6C00000000000000000000000000000003C001E +:10D6D000647C010000000000000000000000000069 +:10D6E000000000000000000000000000000000003A +:10D6F000000000000000000000000000000000002A +:10D700000000000000000000000000000000000019 +:10D710003C00A07C010000000000000000000000B0 +:10D7200000000000000000000000000000000000F9 +:10D7300000000000000000000000000000000000E9 +:10D7400000000000000000000000000000000000D9 +:10D7500000003C00DC7C0100000000000000000034 +:10D7600000000000000000000000000000000000B9 +:10D7700000000000000000000000000000000000A9 +:10D780000000000000000000000000000000000099 +:10D79000000000003C00187D0100000000000000B7 +:10D7A0000000000000000000000000000000000079 +:10D7B0000000000000000000000000000000000069 +:10D7C0000000000000000000000000000000000059 +:10D7D0000000000000003C00547D0100000000003B +:10D7E0000000000000000000000000000000000039 +:10D7F0000000000000000000000000000000000029 +:10D800000000000000000000000000000000000018 +:10D8100000000000000000003C00907D01000000BE +:10D8200000000000000000000000000000000000F8 +:10D8300000000000000000000000000000000000E8 +:10D8400000000000000000000000000000000000D8 +:10D85000000000000000000000003C00CC7D010042 +:10D8600000000000000000000000000000000000B8 +:10D8700000000000000000000000000000000000A8 +:10D880000000000000000000000000000000000098 +:10D890000000000000000000000000003C00087EC6 +:10D8A0000100000000000000000000000000000077 +:10D8B0000000000000000000000000000000000068 +:10D8C0000000000000000000000000000000000058 +:10D8D00000000000000000000000000000003C000C +:10D8E000447E010000000000000000000000000075 +:10D8F0000000000000000000000000000000000028 +:10D900000000000000000000000000000000000017 +:10D910000000000000000000000000000000000007 +:10D920003C00807E010000000000000000000000BC +:10D9300000000000000000000000000000000000E7 +:10D9400000000000000000000000000000000000D7 +:10D9500000000000000000000000000000000000C7 +:10D9600000003C00BC7E0100000000000000000040 +:10D9700000000000000000000000000000000000A7 +:10D980000000000000000000000000000000000097 +:10D990000000000000000000000000000000000087 +:10D9A000000000003C00F87E0100000000000000C4 +:10D9B0000000000000000000000000000000000067 +:10D9C0000000000000000000000000000000000057 +:10D9D0000000000000000000000000000000000047 +:10D9E0000000000000003C00347F01000000000047 +:10D9F0000000000000000000000000000000000027 +:10DA00000000000000000000000000000000000016 +:10DA10000000000000000000000000000000000006 +:10DA200000000000000000003C00707F01000000CA +:10DA300000000000000000000000000000000000E6 +:10DA400000000000000000000000000000000000D6 +:10DA500000000000000000000000000000000000C6 +:10DA6000000000000000000000003C00AC7F01004E +:10DA700000000000000000000000000000000000A6 +:10DA80000000000000000000000000000000000096 +:10DA90000000000000000000000000000000000086 +:10DAA0000000000000000000000000003C00E87FD3 +:10DAB0000100000000000000000000000000000065 +:10DAC0000000000000000000000070B50125074EB6 +:10DAD000AD0375610A20FAF76CFF30688003C40F4C +:10DAE000B5610A20FAF765FF201C70BD00003C00FC +:10DAF000248001001000070070B501256D04002886 +:10DB0000104C01D0656100E0A56160682843606049 +:10DB1000A0682843A0600A20FAF74EFF0126B6034A +:10DB200066610A20FAF748FFA6610120FAF744FF70 +:10DB30003C0060800100A068A843A06060682843A2 +:10DB400060600A20FAF73BFF70BD1000070070B557 +:10DB50000125104C6D046561606828436060A06811 +:10DB60002843A060EE08A6610A20FAF728FF666144 +:10DB70000A203C009C800100FAF724FFA5610A20DE +:10DB8000FAF720FFA6610A20FAF71CFFA068A84355 +:10DB9000A06060682843606070BD0000100007004E +:10DBA00070B501250E4C6D04A56160682843606066 +:10DBB000A06828433C00D8800100A060EE086661A0 +:10DBC0000A20FAF702FF65610A20FAF7FEFEA66155 +:10DBD0000A20FAF7FAFEA068A843A060606828430C +:10DBE000606070BD00001000070070B5051C0024C7 +:10DBF0008026281C30403C0014810100FFF788FF7C +:10DC00006806050E0134082CF6DBFFF76DFF70BDCA +:10DC100080B5021C0B218020FBF73EFB80BD00007D +:10DC2000F8B512480025071CFF37061D0137281CD0 +:10DC3000F9F7EAFD041C17D03C005081010020696F +:10DC4000002804D0E06A002803D00020E062251CF0 +:10DC5000F0E77B68002B05D0321C211C44310120E9 +:10DC6000E8F734F9201C4430F9F737FEE2E7F8BD55 +:10DC7000000020F70100114870B53C008C810100C4 +:10DC80000068FF281DD1FF203230FAF7A7FE0E4DA5 +:10DC90006C680E48FAF7A2FE6868241A012000F0AA +:10DCA00095FD6E680948FAF799FE6868211C0A39E3 +:10DCB000301A884202D30A34A04202D93C00C881FB +:10DCC0000100002000F085FD70BDF4740100000328 +:10DCD00007009303000070B500F04DF80120EDF748 +:10DCE00034F9114D182168600020E9F7F2F9286035 +:10DCF00004688020208000260622FF21201D3C0091 +:10DD0000048201006680E8F70BFA201C0A300949FA +:10DD1000F2F72EFD201C10300749F2F729FDE682AC +:10DD200003CDE9F7F9F8024901201439886070BD84 +:10DD300090D901001261010024F701007047000032 +:10DD40003C004082010010B5064C00220220E16830 +:10DD5000F0F711FB6078022801D100F01AF910BD2C +:10DD6000000040D9010080B5A120FFF750FF80BD21 +:10DD7000000040000E21084080B5A030FFF747FFAB +:10DD800080BD3C007C82010010B5054C2068002855 +:10DD900004D0E9F787F900202060606010BD000022 +:10DDA00090D9010010B5074C0121074A21610220DA +:10DDB0001070616100F0D6FC00F0C8FB201CEDF78C +:10DDC0009FFA10BD3C00B882010020F701007CD909 +:10DDD000010070B5021C081C0225002A134E14D045 +:10DDE00000F011FC3078012108433070307828436E +:10DDF000307000207D214901B279920700D50134AD +:10DE000001308842F8DB3C00F4820100201C70BD28 +:10DE10003078A843307030784008400030700549B1 +:10DE200048680122120490434860012070BD000040 +:10DE3000880007006C000700FFB509AE002060CE27 +:10DE4000286000239C4630603C0030830100694616 +:10DE500001AA17E0DB070ED5124B1C56631C0AD033 +:10DE600001272B68A7403B432B601368DB0702D5D3 +:10DE700033683B4333600B685B080B6013685B08D7 +:10DE8000136001300B68002B01D03C006C83010053 +:10DE90002228E2D3634601332020022B9C4602A9AC +:10DEA00003AAF2DBFFBD0000B48D0100B0B5041C75 +:10DEB0000D1C1E2100220320054BF9F7B3F8211C8D +:10DEC0000320F9F7F5F8291C0320F9F73C00A88393 +:10DED0000100F1F8B0BD80380100B0B51C4C1C4DFC +:10DEE0002178022909D0032919D004291FD0052936 +:10DEF00023D1002000F017FB23E0686114481C3098 +:10DF0000C16802698918C16000F02FFBE0683C001D +:10DF1000E48301000138E06016D13220E060FFF7B1 +:10DF2000A3FE11E0002000F001FB00F02DFC012019 +:10DF3000207009E0002000F0F9FAFFF745FF03E048 +:10DF400005210B20E8F746FF68696168E7F7DDFF08 +:10DF50003C0020840100B0BD00007CD9010020F706 +:10DF60000100F7B5041C171CFFF721FE200AFFF77C +:10DF700018FF2006000EFFF762FEFFF718FEA12033 +:10DF8000FFF75DFE002516E0002000244006060E87 +:10DF9000FFF73C005C840100D1FD0006000E304319 +:10DFA0000134082CF5DB291C019A0135BD4250547F +:10DFB00001DA002000E00120FFF7D4FDBD42E6DBDE +:10DFC000FFF71EFEFEBD000080B5FFF719FE092118 +:10DFD000890300223C00988401000220F0F7E9F94F +:10DFE00080BD0921890380B500220220F0F7C9F91C +:10DFF000012109488903816142680A4342608268BD +:10E000001143816001214904816182688A438260F1 +:10E010004268114341603C00D484010080BD00008F +:10E0200010000700F0B5041CC0687B4E056830780E +:10E0300085B0012801D0022872D100212069F2F7B1 +:10E0400041F97649F2F724FC002869D0201C2030E1 +:10E05000417A082902D1724A3C0010850100002152 +:10E060005161007A226A1821F2F7C9FBE16A371C74 +:10E0700040186C49029030780E1CFF360A1D01369C +:10E080000128049207D0654A02991C32281CEDF73A +:10E09000E2FB00286BD0322120693C004C85010056 +:10E0A000F2F716F9019020690121F2F711F9011C2C +:10E0B0005E480123019AEDF707FC002804D15B4874 +:10E0C000EDF792FA0021B96056481C308168EAF7F2 +:10E0D00019FC201C143003900499F2F73C00888549 +:10E0E0000100D5FB002805D10022BA6004980399ED +:10E0F000F2F76BFB4F4928890988884203D0002238 +:10E100004C49BA60088003212069F2F7E4F800283E +:10E1100010D04649827820310B7994469A423C00CF +:10E12000C485010009D00022BA6062460A71807875 +:10E130000121F3F705F900E077E006212069F2F705 +:10E14000CDF8002808D081783A4840308288914242 +:10E1500002D00022BA6081802A212069F2F7BEF83D +:10E160003C000086010000280DD08078F169334A18 +:10E17000814208D00021B960F061101CEDF709FB65 +:10E180002F48EDF7FAFA38783B1C012817D1022006 +:10E1900018702A4F01233B61274B03CD1C33083DE8 +:10E1A000029A3C003C860100EDF7B0FA381CEDF70E +:10E1B000D7F83268002A03D000210120E7F7C4FE17 +:10E1C00000F0F4F9201CF9F7D5FB071C11D1201C35 +:10E1D000F9F788FB071C2ED001233B616889402199 +:10E1E000C85373683C0078860100002B04D0211CC2 +:10E1F0000020049AE7F7ACFE0123FB62206932217C +:10E20000F2F775F8051C20690121F2F770F80E4E3F +:10E21000011C2A1C301CEDF7C0FB00280ED1322156 +:10E220002069F2F764F83C00B4860100051C2069FF +:10E230000121F2F75FF8011C3B1C2A1C301CEDF792 +:10E24000D7FA05B0F0BD00007CD9010040F801000C +:10E2500020F70100021C081C802A80B506D0812A04 +:10E2600003D004210B20E8F73C00F0860100D9FD23 +:10E2700080BDFFF75CFE80BD000003488178FF2968 +:10E2800001D0007970470020704780F8010030B558 +:10E2900089B000930E4D131C041C2A1CECF725FDBD +:10E2A00001A906A8A268ECF7CEFE3C002C8701006D +:10E2B00001AA06A9281C636AEDF744FA041C012888 +:10E2C00004D1281CEDF72CF800F04AF8201C09B006 +:10E2D00030BD000020F7010080B5EDF72BF800F00D +:10E2E0007DF80248EDF702FA80BD00003C00688727 +:10E2F000010020F7010080B500280BD10648EDF79A +:10E30000F8F900F06EF80120EDF7EBFA034903206D +:10E31000F9F735FE80BD20F701006D870100B0B52B +:10E32000104D041C131C2A1C88B0ECF702FD3C00A5 +:10E33000A4870100211C0A310622281DE7F7A4FE4C +:10E34000694605A86269ECF787FE281CECF7EEFF2A +:10E350007F23DB43281C6A4605A9EDF7F9F900F095 +:10E360001DF808B0B0BD000020F701000A4880B5D4 +:10E370003C00E08701000178002906D0022901D085 +:10E38000052907D10321017080BD0121017000F032 +:10E390002EFA80BD03210B20E8F74FFD80BD7CD90C +:10E3A0000100094980B50878002806D0022801D06C +:10E3B00005283C001C88010005D10420087080BDA0 +:10E3C000FFF738FD80BD02210B20E8F739FD80BD45 +:10E3D0007CD9010080B502210B20044AFAF782FFA4 +:10E3E000F6F786FD0249086180BD0000DD86010068 +:10E3F0007CD901003C00588801000C4880B50178A8 +:10E4000006290ED202A35B5C5B009F44000006035A +:10E4100007070706002000F0C2F880BD0521017043 +:10E4200080BD04210B20E8F70EFD80BD00007CD9E3 +:10E430000100704700003C009488010010B50D4BAE +:10E44000041C181C1030002C08D0DB885B045B0C0B +:10E450000B80807B48800420108008E0DA8801244B +:10E46000E40322400C882243DA804988817301202A +:10E4700010BD0000300007003C00D088010070B5DE +:10E48000104E021C0023F056002A02D0087001240E +:10E4900015E00023CD56854201D1012070BD281C16 +:10E4A00000F05FF9041C0AD00748357000680028A6 +:10E4B00003D000210A20F9F728FD3C000C89010057 +:10E4C00000F016FA201C70BDF46B01003CD901006D +:10E4D000031C081C002B80B506D0042111800422E7 +:10E4E0000449E7F7E3FD02E0006800F0CFF90120FE +:10E4F00080BD0000F474010010B5FFF73C004889AE +:10E50000010097FBFFF789FC041CFFF7B8FBFFF73E +:10E5100084FC002C02D1012800D110BD002010BDC8 +:10E520000000F8B5204F041C78780E1C02282ED06D +:10E530001E4AF968916114231D49584340183C0054 +:10E5400084890100417BB878F8F714FE00F08AF95D +:10E55000002504E00021B878F8F70CFE0135787842 +:10E560001423144958434018807AA842F2DC00254D +:10E5700008E00021B878F8F7FDFD0F48006820702A +:10E580003C00C089010001340135B542F4DB094A81 +:10E59000F86850617878022806D1B868321C211CCE +:10E5A0000004000CFFF725FDB8688019B860F8BDBD +:10E5B000000040D9010010000700648D01003020E8 +:10E5C00007003C00FC89010070B5061C0C4D0024BE +:10E5D0002C70FFF739FC0A4818211C30AC60E7F7B3 +:10E5E00043FD08484461F9F763F9002E06D1064857 +:10E5F0002969F6F7A7FC0020ECF7B0FE70BD00001B +:10E600007CD901003C00388A010020F70100346306 +:10E61000010030B5124C85B0206800281CD00F488E +:10E6200014388068002801D1FFF7C1FB206800235F +:10E63000006801AA04300121ECF7D1FD0849084A1D +:10E6400008310C3100923C00748A010003C900AB10 +:10E650004518997B019A20682B1CF2F72BFE05B018 +:10E6600030BD000090D901002981010010B5134C84 +:10E67000142360705843124BC1188A88E2801858DE +:10E68000E060087AA070FF283C00B08A010012D038 +:10E69000002208210D4BF8F722FD00220220E1683C +:10E6A000EFF7BDFE0A49E06848614A6802434A60E4 +:10E6B0008A68104388606078022801D1FFF7DFFC88 +:10E6C00010BD40D90100648D01003C00EC8A0100BE +:10E6D000B80B000010000700FE300006000E0621F7 +:10E6E000154B4143585C82061448920E4271C9187A +:10E6F0004A78D206D20E027142780C231A43427035 +:10E7000042788B78920892009B079B0F3C00288BE5 +:10E7100001001A4342700278C0239A4340320270CB +:10E72000027838231A4302700278C97804239A4386 +:10E730008900194011430170012070470000D88DF5 +:10E740000100880007008FB50020029003903C0074 +:10E75000648B0100074802AA03A900910192438932 +:10E76000028903C8FFF7D4FB03980299FFF704FC62 +:10E770008FBD0000048E010008494A78002A03D1A9 +:10E78000888000208860704714235A43044BD218B5 +:10E790003C00A08B0100D2884243C88842438A6073 +:10E7A000704740D90100648D0100F8B5254E041C66 +:10E7B000307A400840003072B07A0020B0720127F1 +:10E7C000012C204D01D0FC4213D1307B38433073F3 +:10E7D00000223C00DC8B0100211C0020FFF76EFBB7 +:10E7E000631C01D13F21E973B17AA0221143B172B8 +:10E7F000317A39433172F8BD307B400840003073C4 +:10E800000122211C0120FFF759FB01200021E9739F +:10E81000B17A02223C00188C01001143B172B17A26 +:10E8200004221143B172B17A30221143B172317AAC +:10E830003943317208494A6880239A434A600A681A +:10E840001A430A60317B39433173D7E700008800EF +:10E850000700400007003C00548C01006C000700DA +:10E86000B0B50E4D0E482969F6F79EFB0D48ECF742 +:10E8700093FD0D48094C00881C34A082F1F75AFF23 +:10E880002061FAF797F8021C231C00210020ECF706 +:10E890008BFF3220E860FFF73C00908C0100A5FA66 +:10E8A000B0BD7CD9010034630100DD84010020F794 +:10E8B0000100B0B50A4D687800280ED0142308492D +:10E8C00058434018447A06E0A868E0400106090E63 +:10E8D000A878F8F776FC083CF6D53C00CC8C010013 +:10E8E000B0BD000040D90100648D0100011C144836 +:10E8F000B0B501601348027F02239A430277027F7A +:10E90000012422430277104D00290CD0012200215E +:10E910000320EFF79FFD0D49487CA0433C00088D84 +:10E9200001004874687A20436872B0BD017F2143BA +:10E930000177687A400840006872012200210320B4 +:10E94000EFF7B1FDB0BDF47401003000070088009E +:10E9500007001000070010B5074C211C00203C00E8 +:10E96000448D0100F9F756FB05480023C0560128E5 +:10E9700003DD211C0020F9F719FB10BD651A00000A +:10E98000F46B01000000020008010100021804FFFE +:10E9900082E8D78000000000008000000001000134 +:10E9A0003C00808D010000180006020305010100F3 +:10E9B00000000000000080000100FF1000FFFFFFCA +:10E9C000FFFFFF0000000000020020000100021015 +:10E9D0000006020305010100000004050607080CFB +:10E9E0000D0E3C00BC8D0100FF1415161718191BE5 +:10E9F0001C1DFF1A1113120F10FF0200FF01030963 +:10EA00000A0B0000300D02000000280E0300000079 +:10EA10001E0C00000000300D020100001E0C000161 +:10EA20000000230D3C00F88D0100020100001D0DC7 +:10EA3000020100000000FFFEFB6D000080000200EC +:10EA400000000000000000000000000000000000C6 +:10EA500000000000000000000000000000000000B6 +:10EA60000000000000003C00348E010000000000A7 +:10EA70000000000000000000000000000000000096 +:10EA80000000000000000000000000000000000086 +:10EA90000000000000000000000000000000000076 +:10EAA00000000000000000003C00708E010000002B +:10EAB0000000000000000000000000000000000056 +:10EAC0000000000000000000000000000000000046 +:10EAD0000000000000000000000000000000000036 +:10EAE000000000000000000000003C00AC8E0100AF +:10EAF0000000000000000000000000000000000016 +:10EB00000000000000000000000000000000000005 +:10EB100000000000000000000000000000000000F5 +:10EB20000000000000000000000000003C00E88E33 +:10EB300001000000000000000000000000000000D4 +:10EB400000000000000000000000000000000000C5 +:10EB500000000000000000000000000000000000B5 +:10EB600000000000000000000000000000003C0069 +:10EB7000248F0100000000000000000000000000E1 +:10EB80000000000000000000000000000000000085 +:10EB90000000000000000000000000000000000075 +:10EBA0000000000000000000000000000000000065 +:10EBB0003C00608F01000000000000000000000029 +:10EBC0000000000000000000000000000000000045 +:10EBD0000000000000000000000000000000000035 +:10EBE0000000000000000000000000000000000025 +:10EBF00000003C009C8F01000000000000000000AD +:10EC00000000000000000000000000000000000004 +:10EC100000000000000000000000000000000000F4 +:10EC200000000000000000000000000000000000E4 +:10EC3000000000003C00D88F010000000000000030 +:10EC400000000000000000000000000000000000C4 +:10EC500000000000000000000000000000000000B4 +:10EC600000000000000000000000000000000000A4 +:10EC70000000000000003C001490010000000000B3 +:10EC80000000000000000000000000000000000084 +:10EC90000000000000000000000000000000000074 +:10ECA0000000000000000000000000000000000064 +:10ECB00000000000000000003C0050900100000037 +:10ECC0000000000000000000000000000000000044 +:10ECD0000000000000000000000000000000000034 +:10ECE0000000000000000000000000000000000024 +:10ECF000000000000000000000003C008C900100BB +:10ED00000000000000000000000000000000000003 +:10ED100000000000000000000000000000000000F3 +:10ED200000000000000000000000000000000000E3 +:10ED30000000000000000000000000003C00C8903F +:10ED400001000000000000000000000000000000C2 +:10ED500000000000000000000000000000000000B3 +:10ED600000000000000000000000000000000000A3 +:10ED700000000000000000000000000000003C0057 +:10ED800004910100000000000000000000000000ED +:10ED90000000000000000000000000000000000073 +:10EDA0000000000000000000000000000000000063 +:10EDB0000000000000000000000000000000000053 +:10EDC0003C00409101000000000000000000000035 +:10EDD0000000000000000000000000000000000033 +:10EDE0000000000000000000000000000000000023 +:10EDF0000000000000000000000000000000000013 +:10EE000000003C007C9101000000000000000000B8 +:10EE100000000000000000000000000000000000F2 +:10EE200000000000000000000000000000000000E2 +:10EE300000000000000000000000000000000000D2 +:10EE4000000000003C00B89101000000000000003C +:10EE500000000000000000000000000000000000B2 +:10EE600000000000000000000000000000000000A2 +:10EE70000000000000000000000000000000000092 +:10EE80000000000000003C00F491010000000000C0 +:10EE90000000000000000000000000000000000072 +:10EEA0000000000000000000000000000000000062 +:10EEB0000000000000000000000000000000000052 +:10EEC00000000000000000003C0030920100000043 +:10EED0000000000000000000000000000000000032 +:10EEE0000000000000000000000000000000000022 +:10EEF0000000000000000000000000000000000012 +:10EF0000000000000000000000003C006C920100C6 +:10EF100000000000000000000000000000000000F1 +:10EF200000000000000000000000000000000000E1 +:10EF300000000000000000000000000000000000D1 +:10EF40000000000000000000000000003C00A8924B +:10EF500001000000000000000000000000000000B0 +:10EF600000000000000000000000000000000000A1 +:10EF70000000000000000000000000000000000091 +:10EF800000000000000000000000000000003C0045 +:10EF9000E4920100000000000000000000000000FA +:10EFA0000000000000000000000000000000000061 +:10EFB0000000000000000000000000000000000051 +:10EFC0000000000000000000000000000000000041 +:10EFD0003C00209301000000000000000000000041 +:10EFE0000000000000000000000000000000000021 +:10EFF0000000000000000000000000000000000011 +:10F000000000000000000000000000000000000000 +:10F0100000003C005C9301000000000000000000C4 +:10F0200000000000000000000000000000000000E0 +:10F0300000000000000000000000000000000000D0 +:10F0400000000000000000000000000000000000C0 +:10F05000000000003C009893010000000000000048 +:10F0600000000000000000000000000000000000A0 +:10F070000000000000000000000000000000000090 +:10F080000000000000000000000000000000000080 +:10F090000000000000003C00D493010000000000CC +:10F0A0000000000000000000000000000000000060 +:10F0B0000000000000000000000000000000000050 +:10F0C0000000000000000000000000000000000040 +:10F0D00000000000000000003C001094010000004F +:10F0E0000000000000000000000000000000000020 +:10F0F0000000000000000000000000000000000010 +:10F1000000000000000000000000000000000000FF +:10F11000000000000000000000003C004C940100D2 +:10F1200000000000000000000000000000000000DF +:10F1300000000000000000000000000000000000CF +:10F1400000000000000000000000000000000000BF +:10F150000000000000000000000000003C00889457 +:10F16000010000000000000000000000000000009E +:10F17000000000000000000000000000000000008F +:10F18000000000000000000000000000000000007F +:10F1900000000000000000000000000000003C0033 +:10F1A000C494010000000000000000000000000006 +:10F1B000000000000000000000000000000000004F +:10F1C000000000000000000000000000000000003F +:10F1D000000000000000000000000000000000002F +:10F1E0003C0000950100000000000000000000004D +:10F1F000000000000000000000000000000000000F +:10F2000000000000000000000000000000000000FE +:10F2100000000000000000000000000000000000EE +:10F2200000003C003C9501000000000000000000D0 +:10F2300000000000000000000000000000000000CE +:10F2400000000000000000000000000000000000BE +:10F2500000000000000000000000000000000000AE +:10F26000000000003C007895010000000000000054 +:10F27000000000000000000000000000000000008E +:10F28000000000000000000000000000000000007E +:10F29000000000000000000000000000000000006E +:10F2A0000000000000003C00B495010000000000D8 +:10F2B000000000000000000000000000000000004E +:10F2C000000000000000000000000000000000003E +:10F2D000000000000000000000000000000000002E +:10F2E00000000000000000003C00F095010000005C +:10F2F000000000000000000000000000000000000E +:10F3000000000000000000000000000000000000FD +:10F3100000000000000000000000000000000000ED +:10F32000000000000000000000003C002C960100DE +:10F3300000000000000000000000000000000000CD +:10F3400000000000000000000000000000000000BD +:10F3500000000000000000000000000000000000AD +:10F360000000000000000000000000003C00689663 +:10F37000010000000000000000000000000000008C +:10F38000000000000000000000000000000000007D +:10F39000000000000000000000000000000000006D +:10F3A00000000000000000000000000000003C0021 +:10F3B000A496010000000000000000000000000012 +:10F3C000000000000000000000000000000000003D +:10F3D000000000000000000000000000000000002D +:10F3E000000000000000000000000000000000001D +:10F3F0003C00E0960100000000000000000000005A +:10F4000000000000000000000000000000000000FC +:10F4100000000000000000000000000000000000EC +:10F4200000000000000000000000000000000000DC +:10F4300000003C001C9701000000000000000000DC +:10F4400000000000000000000000000000000000BC +:10F4500000000000000000000000000000000000AC +:10F46000000000000000000000000000000000009C +:10F47000000000003C005897010000000000000060 +:10F48000000000000000000000000000000000007C +:10F49000000000000000000000000000000000006C +:10F4A000000000000000000000000000000000005C +:10F4B0000000000000003C009497010000000000E4 +:10F4C000000000000000000000000000000000003C +:10F4D000000000000000000000000000000000002C +:10F4E000000000000000000000000000000000001C +:10F4F00000000000000000003C00D0970100000068 +:10F5000000000000000000000000000000000000FB +:10F5100000000000000000000000000000000000EB +:10F5200000000000000000000000000000000000DB +:10F53000000000000000000000003C000C980100EA +:10F5400000000000000000000000000000000000BB +:10F5500000000000000000000000000000000000AB +:10F56000000000000000000000000000000000009B +:10F570000000000000000000000000003C0048986F +:10F58000010000000000000000000000000000007A +:10F59000000000000000000000000000000000006B +:10F5A000000000000000000000000000000000005B +:10F5B00000000000000000000000000000003C000F +:10F5C000849801000000000000000000000000001E +:10F5D000000000000000000000000000000000002B +:10F5E000000000000000000000000000000000001B +:10F5F000000000000000000000000000000000000B +:10F600003C00C09801000000000000000000000065 +:10F6100000000000000000000000000000000000EA +:10F6200000000000000000000000000000000000DA +:10F6300000000000000000000000000000000000CA +:10F6400000003C00FC9801000000000000000000E9 +:10F6500000000000000000000000000000000000AA +:10F66000000000000000000000000000000000009A +:10F67000000000000000000000000000000000008A +:10F68000000000003C00389901000000000000006C +:10F69000000000000000000000000000000000006A +:10F6A000000000000000000000000000000000005A +:10F6B000000000000000000000000000000000004A +:10F6C0000000000000003C007499010000000000F0 +:10F6D000000000000000000000000000000000002A +:10F6E000000000000000000000000000000000001A +:10F6F000000000000000000000000000000000000A +:10F7000000000000000000003C00B0990100000073 +:10F7100000000000000000000000000000000000E9 +:10F7200000000000000000000000000000000000D9 +:10F7300000000000000000000000000000000000C9 +:10F74000000000000000000000003C00EC990100F7 +:10F7500000000000000000000000000000000000A9 +:10F760000000000000000000000000000000000099 +:10F770000000000000000000000000000000000089 +:10F780000000000000000000000000003C00289A7B +:10F790000100000000000000000000000000000068 +:10F7A0000000000000000000000000000000000059 +:10F7B0000000000000000000000000000000000049 +:10F7C00000000000000000000000000000003C00FD +:10F7D000649A01000000000000000000000000002A +:10F7E0000000000000000000000000000000000019 +:10F7F0000000000000000000000000000000000009 +:10F8000000000000000000000000000000000000F8 +:10F810003C00A09A01000000000000000000000071 +:10F8200000000000000000000000000000000000D8 +:10F8300000000000000000000000000000000000C8 +:10F8400000000000000000000000000000000000B8 +:10F8500000003C00DC9A01000000000000000000F5 +:10F860000000000000000000000000000000000098 +:10F870000000000000000000000000000000000088 +:10F880000000000000000000000000000000000078 +:10F89000000000003C00189B010000000000000078 +:10F8A0000000000000000000000000000000000058 +:10F8B0000000000000000000000000000000000048 +:10F8C0000000000000000000000000000000000038 +:10F8D0000000000000003C00549B010000000000FC +:10F8E0000000000000000000000000000000000018 +:10F8F0000000000000000000000000000000000008 +:10F9000000000000000000000000000000000000F7 +:10F9100000000000000000003C00909B010000007F +:10F9200000000000000000000000000000000000D7 +:10F9300000000000000000000000000000000000C7 +:10F9400000000000000000000000000000000000B7 +:10F95000000000000000000000003C00CC9B010003 +:10F960000000000000000000000000000000000097 +:10F970000000000000000000000000000000000087 +:10F980000000000000000000000000000000000077 +:10F990000000000000000000000000003C00089C87 +:10F9A0000100000000000000000000000000000056 +:10F9B0000000000000000000000000000000000047 +:10F9C0000000000000000000000000000000000037 +:10F9D00000000000000000000000000000003C00EB +:10F9E000449C010000000000000000000000000036 +:10F9F0000000000000000000000000000000000007 +:10FA000000000000000000000000000000000000F6 +:10FA100000000000000000000000000000000000E6 +:10FA20003C00809C0100000000000000000000007D +:10FA300000000000000000000000000000000000C6 +:10FA400000000000000000000000000000000000B6 +:10FA500000000000000000000000000000000000A6 +:10FA600000003C00BC9C0100000000000000000001 +:10FA70000000000000000000000000000000000086 +:10FA80000000000000000000000000000000000076 +:10FA90000000000000000000000000000000000066 +:10FAA000000000003C00F89C010000000000000085 +:10FAB0000000000000000000000000000000000046 +:10FAC0000000000000000000000000000000000036 +:10FAD0000000000000000000000000000000000026 +:10FAE0000000000000003C00349D01000000000008 +:10FAF0000000000000000000000000000000000006 +:10FB000000000000000000000000000000000000F5 +:10FB100000000000000000000000000000000000E5 +:10FB200000000000000000003C00709D010000008B +:10FB300000000000000000000000000000000000C5 +:10FB400000000000000000000000000000000000B5 +:10FB500000000000000000000000000000000000A5 +:10FB6000000000000000000000003C00AC9D01000F +:10FB70000000000000000000000000000000000085 +:10FB80000000000000000000000000000000000075 +:10FB90000000000000000000000000000000000065 +:10FBA0000000000000000000000000003C00E89D94 +:10FBB0000100000000000000000000000000000044 +:10FBC0000000000000000000000000000000000035 +:10FBD0000000000000000000000000000000000025 +:10FBE00000000000000000000000000000003C00D9 +:10FBF000249E010000000000000000000000000042 +:10FC000000000000000000000000000000000000F4 +:10FC100000000000000000000000000000000000E4 +:10FC200000000000000000000000000000000000D4 +:10FC30003C00609E01000000000000000000000089 +:10FC400000000000000000000000000000000000B4 +:10FC500000000000000000000000000000000000A4 +:10FC60000000000000000000000000000000000094 +:10FC700000003C009C9E010000000000000000000D +:10FC80000000000000000000000000000000000074 +:10FC90000000000000000000000000000000000064 +:10FCA0000000000000000000000000000000000054 +:10FCB000000000003C00D89E010000000000000091 +:10FCC0000000000000000000000000000000000034 +:10FCD0000000000000000000000000000000000024 +:10FCE0000000000000000000000000000000000014 +:10FCF0000000000000003C00149F01000000000014 +:10FD000000000000000000000000000000000000F3 +:10FD100000000000000000000000000000000000E3 +:10FD200000000000000000000000000000000000D3 +:10FD300000000000000000003C00509F0100000097 +:10FD400000000000000000000000000000000000B3 +:10FD500000000000000000000000000000000000A3 +:10FD60000000000000000000000000000000000093 +:10FD7000000000000000000000003C008C9F01001B +:10FD80000000000000000000000000000000000073 +:10FD90000000000000000000000000000000000063 +:10FDA0000000000000000000000000000000000053 +:10FDB0000000000000000000000000003C00C89FA0 +:10FDC0000100000000000000000000000000000032 +:10FDD0000000000000000000000000000000000023 +:10FDE0000000000000000000000000000000000013 +:10FDF00000000000000000000000000000003C00C7 +:10FE000004A001000000000000000000000000004D +:10FE100000000000000000000000000000000000E2 +:10FE200000000000000000000000000000000000D2 +:10FE300000000000000000000000000000000000C2 +:10FE40003C0040A001000000000000000000000095 +:10FE500000000000000000000000000000000000A2 +:10FE60000000000000000000000000000000000092 +:10FE70000000000000000000000000000000000082 +:10FE800000003C007CA00100000000000000000019 +:10FE90000000000000000000000000000000000062 +:10FEA0000000000000000000000000000000000052 +:10FEB0000000000000000000000000000000000042 +:10FEC000000000003C00B8A001000000000000009D +:10FED0000000000000000000000000000000000022 +:10FEE0000000000000000000000000000000000012 +:10FEF0000000000000000000000000000000000002 +:10FF00000000000000003C00F4A001000000000020 +:10FF100000000000000000000000000000000000E1 +:10FF200000000000000000000000000000000000D1 +:10FF300000000000000000000000000000000000C1 +:10FF400000000000000000003C0030A101000000A3 +:10FF500000000000000000000000000000000000A1 +:10FF60000000000000000000000000000000000091 +:10FF70000000000000000000000000000000000081 +:10FF8000000000000000000000003C006CA1010027 +:10FF90000000000000000000000000000000000061 +:10FFA0000000000000000000000000000000000051 +:10FFB0000000000000000000000000000000000041 +:10FFC0000000000000000000000000003C00A8A1AC +:10FFD0000100000000000000000000000000000020 +:10FFE0000000000000000000000000000000000011 +:10FFF0000000000000000000000000000000000001 +:02000004800278 +:1000000000000000000000000000000000003C00B4 +:10001000E4A101000000000000000000000000005A +:1000200000000000000000000000000000000000D0 +:1000300000000000000000000000000000000000C0 +:1000400000000000000000000000000000000000B0 +:100050003C0020A2010000000000000000000000A1 +:100060000000000000000000000000000000000090 +:100070000000000000000000000000000000000080 +:100080000000000000000000000000000000000070 +:1000900000003C005CA20100000000000000000025 +:1000A0000000000000000000000000000000000050 +:1000B0000000000000000000000000000000000040 +:1000C0000000000000000000000000000000000030 +:1000D000000000003C0098A20100000000000000A9 +:1000E0000000000000000000000000000000000010 +:1000F0000000000000000000000000000000000000 +:1001000000000000000000000000000000000000EF +:100110000000000000003C00D4A20100000000002C +:1001200000000000000000000000000000000000CF +:1001300000000000000000000000000000000000BF +:1001400000000000000000000000000000000000AF +:1001500000000000000000003C0010A301000000AF +:10016000000000000000000000000000000000008F +:10017000000000000000000000000000000000007F +:10018000000000000000000000000000000000006F +:10019000000000000000000000003C004CA3010033 +:1001A000000000000000000000000000000000004F +:1001B000000000000000000000000000000000003F +:1001C000000000000000000000000000000000002F +:1001D0000000000000000000000000003C0088A3B8 +:1001E000010000000000000000000000000000000E +:1001F00000000000000000000000000000000000FF +:1002000000000000000000000000000000000000EE +:1002100000000000000000000000000000003C00A2 +:10022000C4A3010000000000000000000000000066 +:1002300000000000000000000000000000000000BE +:1002400000000000000000000000000000000000AE +:10025000000000000000000000000000000000009E +:100260003C0000A4010000000000000000000000AD +:10027000000000000000000000000000000000007E +:10028000000000000000000000000000000000006E +:10029000000000000000000000000000000000005E +:1002A00000003C003CA40100000000000000000031 +:1002B000000000000000000000000000000000003E +:1002C000000000000000000000000000000000002E +:1002D000000000000000000000000000000000001E +:1002E000000000003C0078A40100000000000000B5 +:1002F00000000000000000000000000000000000FE +:1003000000000000000000000000000000000000ED +:1003100000000000000000000000000000000000DD +:100320000000000000003C00B4A401000000000038 +:1003300000000000000000000000000000000000BD +:1003400000000000000000000000000000000000AD +:10035000000000000000000000000000000000009D +:1003600000000000000000003C00F0A401000000BC +:10037000000000000000000000000000000000007D +:10038000000000000000000000000000000000006D +:10039000000000000000000000000000000000005D +:1003A000000000000000000000003C002CA501003F +:1003B000000000000000000000000000000000003D +:1003C000000000000000000000000000000000002D +:1003D000000000000000000000000000000000001D +:1003E0000000000000000000000000003C0068A5C4 +:1003F00001000000000000000000000000000000FC +:1004000000000000000000000000000000000000EC +:1004100000000000000000000000000000000000DC +:1004200000000000000000000000000000003C0090 +:10043000A4A5010000000000000000000000000072 +:1004400000000000000000000000000000000000AC +:10045000000000000000000000000000000000009C +:10046000000000000000000000000000000000008C +:100470003C00E0A5010000000000000000000000BA +:10048000000000000000000000000000000000006C +:10049000000000000000000000000000000000005C +:1004A000000000000000000000000000000000004C +:1004B00000003C001CA6010000000000000000003D +:1004C000000000000000000000000000000000002C +:1004D000000000000000000000000000000000001C +:1004E000000000000000000000000000000000000C +:1004F000000000003C0058A60100000000000000C1 +:1005000000000000000000000000000000000000EB +:1005100000000000000000000000000000000000DB +:1005200000000000000000000000000000000000CB +:100530000000000000003C0094A601000000000044 +:1005400000000000000000000000000000000000AB +:10055000000000000000000000000000000000009B +:10056000000000000000000000000000000000008B +:1005700000000000000000003C00D0A601000000C8 +:10058000000000000000000000000000000000006B +:10059000000000000000000000000000000000005B +:1005A000000000000000000000000000000000004B +:1005B000000000000000000000003C000CA701004B +:1005C000000000000000000000000000000000002B +:1005D000000000000000000000000000000000001B +:1005E000000000000000000000000000000000000B +:1005F0000000000000000000000000003C0048A7D0 +:1006000001000000000000000000000000000000E9 +:1006100000000000000000000000000000000000DA +:1006200000000000000000000000000000000000CA +:1006300000000000000000000000000000003C007E +:1006400084A701000000000000000000000000007E +:10065000000000000000000000000000000000009A +:10066000000000000000000000000000000000008A +:10067000000000000000000000000000000000007A +:100680003C00C0A7010000000000000000000000C6 +:10069000000000000000000000000000000000005A +:1006A000000000000000000000000000000000004A +:1006B000000000000000000000000000000000003A +:1006C00000003C00FCA7010000000000000000004A +:1006D000000000000000000000000000000000001A +:1006E000000000000000000000000000000000000A +:1006F00000000000000000000000000000000000FA +:10070000000000003C0038A80100000000000000CC +:1007100000000000000000000000000000000000D9 +:1007200000000000000000000000000000000000C9 +:1007300000000000000000000000000000000000B9 +:100740000000000000003C0074A801000000000050 +:100750000000000000000000000000000000000099 +:100760000000000000000000000000000000000089 +:100770000000000000000000000000000000000079 +:1007800000000000000000003C00B0A801000000D4 +:100790000000000000000000000000000000000059 +:1007A0000000000000000000000000000000000049 +:1007B0000000000000000000000000000000000039 +:1007C000000000000000000000003C00ECA8010058 +:1007D0000000000000000000000000000000000019 +:1007E0000000000000000000000000000000000009 +:1007F00000000000000000000000000000000000F9 +:100800000000000000000000000000003C0028A9DB +:1008100001000000000000000000000000000000D7 +:1008200000000000000000000000000000000000C8 +:1008300000000000000000000000000000000000B8 +:1008400000000000000000000000000000003C006C +:1008500064A901000000000000000000000000008A +:100860000000000000000000000000000000000088 +:100870000000000000000000000000000000000078 +:100880000000000000000000000000000000000068 +:100890003C00A0A9010000000000000000000000D2 +:1008A0000000000000000000000000000000000048 +:1008B0000000000000000000000000000000000038 +:1008C0000000000000000000000000000000000028 +:1008D00000003C00DCA90100000000000000000056 +:1008E0000000000000000000000000000000000008 +:1008F00000000000000000000000000000000000F8 +:1009000000000000000000000000000000000000E7 +:10091000000000003C0018AA0100000000000000D8 +:1009200000000000000000000000000000000000C7 +:1009300000000000000000000000000000000000B7 +:1009400000000000000000000000000000000000A7 +:100950000000000000003C0054AA0100000000005C +:100960000000000000000000000000000000000087 +:100970000000000000000000000000000000000077 +:100980000000000000000000000000000000000067 +:1009900000000000000000003C0090AA01000000E0 +:1009A0000000000000000000000000000000000047 +:1009B0000000000000000000000000000000000037 +:1009C0000000000000000000000000000000000027 +:1009D000000000000000000000003C00CCAA010064 +:1009E0000000000000000000000000000000000007 +:1009F00000000000000000000000000000000000F7 +:100A000000000000000000000000000000000000E6 +:100A10000000000000000000000000003C0008ABE7 +:100A200001000000000000000000000000000000C5 +:100A300000000000000000000000000000000000B6 +:100A400000000000000000000000000000000000A6 +:100A500000000000000000000000000000003C005A +:100A600044AB010000000000000000000000000096 +:100A70000000000000000000000000000000000076 +:100A80000000000000000000000000000000000066 +:100A90000000000000000000000000000000000056 +:100AA0003C0080AB010000000000000000000000DE +:100AB0000000000000000000000000000000000036 +:100AC0000000000000000000000000000000000026 +:100AD0000000000000000000000000000000000016 +:100AE00000003C00BCAB0100000000000000000062 +:100AF00000000000000000000000000000000000F6 +:100B000000000000000000000000000000000000E5 +:100B100000000000000000000000000000000000D5 +:100B2000000000003C00F8AB0100000000000000E5 +:100B300000000000000000000000000000000000B5 +:100B400000000000000000000000000000000000A5 +:100B50000000000000000000000000000000000095 +:100B60000000000000003C0034AC01000000000068 +:100B70000000000000000000000000000000000075 +:100B80000000000000000000000000000000000065 +:100B90000000000000000000000000000000000055 +:100BA00000000000000000003C0070AC01000000EC +:100BB0000000000000000000000000000000000035 +:100BC0000000000000000000000000000000000025 +:100BD0000000000000000000000000000000000015 +:100BE000000000000000000000003C00ACAC010070 +:100BF00000000000000000000000000000000000F5 +:100C000000000000000000000000000000000000E4 +:100C100000000000000000000000000000000000D4 +:100C20000000000000000000000000003C00E8ACF4 +:100C300001000000000000000000000000000000B3 +:100C400000000000000000000000000000000000A4 +:100C50000000000000000000000000000000000094 +:100C600000000000000000000000000000003C0048 +:100C700024AD0100000000000000000000000000A2 +:100C80000000000000000000000000000000000064 +:100C90000000000000000000000000000000000054 +:100CA0000000000000000000000000000000000044 +:100CB0003C0060AD010000000000000000000000EA +:100CC0000000000000000000000000000000000024 +:100CD0000000000000000000000000000000000014 +:100CE0000000000000000000000000000000000004 +:100CF00000003C009CAD010000000000000000006E +:100D000000000000000000000000000000000000E3 +:100D100000000000000000000000000000000000D3 +:100D200000000000000000000000000000000000C3 +:100D3000000000003C00D8AD0100000000000000F1 +:100D400000000000000000000000000000000000A3 +:100D50000000000000000000000000000000000093 +:100D60000000000000000000000000000000000083 +:100D70000000000000003C0014AE01000000000074 +:100D80000000000000000000000000000000000063 +:100D90000000000000000000000000000000000053 +:100DA0000000000000000000000000000000000043 +:100DB00000000000000000003C0050AE01000000F8 +:100DC0000000000000000000000000000000000023 +:100DD0000000000000000000000000000000000013 +:100DE0000000000000000000000000000000000003 +:100DF000000000000000000000003C008CAE01007C +:100E000000000000000000000000000000000000E2 +:100E100000000000000000000000000000000000D2 +:100E200000000000000000000000000000000000C2 +:100E30000000000000000000000000003C00C8AE00 +:100E400001000000000000000000000000000000A1 +:100E50000000000000000000000000000000000092 +:100E60000000000000000000000000000000000082 +:100E700000000000000000000000000000003C0036 +:100E800004AF0100000000000000000000000000AE +:100E90000000000000000000000000000000000052 +:100EA0000000000000000000000000000000000042 +:100EB0000000000000000000000000000000000032 +:100EC0003C0040AF010000000000000000000000F6 +:100ED0000000000000000000000000000000000012 +:100EE0000000000000000000000000000000000002 +:100EF00000000000000000000000000000000000F2 +:100F000000003C007CAF0100000000000000000079 +:100F100000000000000000000000000000000000D1 +:100F200000000000000000000000000000000000C1 +:100F300000000000000000000000000000000000B1 +:100F4000000000003C00B8AF0100000000000000FD +:100F50000000000000000000000000000000000091 +:100F60000000000000000000000000000000000081 +:100F70000000000000000000000000000000000071 +:100F80000000000000003C00F4AF01000000000081 +:100F90000000000000000000000000000000000051 +:100FA0000000000000000000000000000000000041 +:100FB0000000000000000000000000000000000031 +:100FC00000000000000000003C0030B00100000004 +:100FD0000000000000000000000000000000000011 +:100FE0000000000000000000000000000000000001 +:100FF00000000000000000000000000000000000F1 +:10100000000000000000000000003C006CB0010087 +:1010100000000000000000000000000000000000D0 +:1010200000000000000000000000000000000000C0 +:1010300000000000000000000000000000000000B0 +:101040000000000000000000000000003C00A8B00C +:10105000010000000000000000000000000000008F +:101060000000000000000000000000000000000080 +:101070000000000000000000000000000000000070 +:1010800000000000000000000000000000003C0024 +:10109000E4B00100000000000000000000000000BB +:1010A0000000000000000000000000000000000040 +:1010B0000000000000000000000000000000000030 +:1010C0000000000000000000000000000000000020 +:1010D0003C0020B101000000000000000000000002 +:1010E0000000000000000000000000000000000000 +:1010F00000000000000000000000000000000000F0 +:1011000000000000000000000000000000000000DF +:1011100000003C005CB10100000000000000000085 +:1011200000000000000000000000000000000000BF +:1011300000000000000000000000000000000000AF +:10114000000000000000000000000000000000009F +:10115000000000003C0098B1010000000000000009 +:10116000000000000000000000000000000000007F +:10117000000000000000000000000000000000006F +:10118000000000000000000000000000000000005F +:101190000000000000003C00D4B10100000000008D +:1011A000000000000000000000000000000000003F +:1011B000000000000000000000000000000000002F +:1011C000000000000000000000000000000000001F +:1011D00000000000000000003C0010B20100000010 +:1011E00000000000000000000000000000000000FF +:1011F00000000000000000000000000000000000EF +:1012000000000000000000000000000000000000DE +:10121000000000000000000000003C004CB2010093 +:1012200000000000000000000000000000000000BE +:1012300000000000000000000000000000000000AE +:10124000000000000000000000000000000000009E +:101250000000000000000000000000003C0088B218 +:10126000010000000000000000000000000000007D +:10127000000000000000000000000000000000006E +:10128000000000000000000000000000000000005E +:1012900000000000000000000000000000003C0012 +:1012A000C4B20100000000000000000000000000C7 +:1012B000000000000000000000000000000000002E +:1012C000000000000000000000000000000000001E +:1012D000000000000000000000000000000000000E +:1012E0003C0000B30100000000000000000000000E +:1012F00000000000000000000000000000000000EE +:1013000000000000000000000000000000000000DD +:1013100000000000000000000000000000000000CD +:1013200000003C003CB30100000000000000000091 +:1013300000000000000000000000000000000000AD +:10134000000000000000000000000000000000009D +:10135000000000000000000000000000000000008D +:10136000000000003C0078B3010000000000000015 +:10137000000000000000000000000000000000006D +:10138000000000000000000000000000000000005D +:10139000000000000000000000000000000000004D +:1013A0000000000000003C00B4B301000000000099 +:1013B000000000000000000000000000000000002D +:1013C000000000000000000000000000000000001D +:1013D000000000000000000000000000000000000D +:1013E00000000000000000003C00F0B3010000001D +:1013F00000000000000000000000000000000000ED +:1014000000000000000000000000000000000000DC +:1014100000000000000000000000000000000000CC +:10142000000000000000000000003C002CB401009F +:1014300000000000000000000000000000000000AC +:10144000000000000000000000000000000000009C +:10145000000000000000000000000000000000008C +:101460000000000000000000000000003C0068B424 +:10147000010000000000000000000000000000006B +:10148000000000000000000000000000000000005C +:10149000000000000000000000000000000000004C +:1014A00000000000000000000000000000003C0000 +:1014B000A4B40100000000000000000000000000D3 +:1014C000000000000000000000000000000000001C +:1014D000000000000000000000000000000000000C +:1014E00000000000000000000000000000000000FC +:1014F0003C00E0B40100000000000000000000001B +:1015000000000000000000000000000000000000DB +:1015100000000000000000000000000000000000CB +:1015200000000000000000000000000000000000BB +:1015300000003C001CB5010000000000000000009D +:10154000000000000000000000000000000000009B +:10155000000000000000000000000000000000008B +:10156000000000000000000000000000000000007B +:10157000000000003C0058B5010000000000000021 +:10158000000000000000000000000000000000005B +:10159000000000000000000000000000000000004B +:1015A000000000000000000000000000000000003B +:1015B0000000000000003C0094B5010000000000A5 +:1015C000000000000000000000000000000000001B +:1015D000000000000000000000000000000000000B +:1015E00000000000000000000000000000000000FB +:1015F00000000000000000003C00D0B50100000029 +:1016000000000000000000000000000000000000DA +:1016100000000000000000000000000000000000CA +:1016200000000000000000000000000000000000BA +:10163000000000000000000000003C000CB60100AB +:10164000000000000000000000000000000000009A +:10165000000000000000000000000000000000008A +:10166000000000000000000000000000000000007A +:101670000000000000000000000000003C0048B630 +:101680000100000000000000000000000000000059 +:10169000000000000000000000000000000000004A +:1016A000000000000000000000000000000000003A +:1016B00000000000000000000000000000003C00EE +:1016C00084B60100000000000000000000000000DF +:1016D000000000000000000000000000000000000A +:1016E00000000000000000000000000000000000FA +:1016F00000000000000000000000000000000000EA +:101700003C00C0B601000000000000000000000026 +:1017100000000000000000000000000000000000C9 +:1017200000000000000000000000000000000000B9 +:1017300000000000000000000000000000000000A9 +:1017400000003C00FCB601000000000000000000AA +:101750000000000000000000000000000000000089 +:101760000000000000000000000000000000000079 +:101770000000000000000000000000000000000069 +:10178000000000003C0038B701000000000000002D +:101790000000000000000000000000000000000049 +:1017A0000000000000000000000000000000000039 +:1017B0000000000000000000000000000000000029 +:1017C0000000000000003C0074B7010000000000B1 +:1017D0000000000000000000000000000000000009 +:1017E00000000000000000000000000000000000F9 +:1017F00000000000000000000000000000000000E9 +:1018000000000000000000003C00B0B70100000034 +:1018100000000000000000000000000000000000C8 +:1018200000000000000000000000000000000000B8 +:1018300000000000000000000000000000000000A8 +:10184000000000000000000000003C00ECB70100B8 +:101850000000000000000000000000000000000088 +:101860000000000000000000000000000000000078 +:101870000000000000000000000000000000000068 +:101880000000000000000000000000003C0028B83C +:101890000100000000000000000000000000000047 +:1018A0000000000000000000000000000000000038 +:1018B0000000000000000000000000000000000028 +:1018C00000000000000000000000000000003C00DC +:1018D00064B80100000000000000000000000000EB +:1018E00000000000000000000000000000000000F8 +:1018F00000000000000000000000000000000000E8 +:1019000000000000000000000000000000000000D7 +:101910003C00A0B801000000000000000000000032 +:1019200000000000000000000000000000000000B7 +:1019300000000000000000000000000000000000A7 +:101940000000000000000000000000000000000097 +:1019500000003C00DCB801000000000000000000B6 +:101960000000000000000000000000000000000077 +:101970000000000000000000000000000000000067 +:101980000000000000000000000000000000000057 +:10199000000000003C0018B9010000000000000039 +:1019A0000000000000000000000000000000000037 +:1019B0000000000000000000000000000000000027 +:1019C0000000000000000000000000000000000017 +:1019D0000000000000003C0054B9010000000000BD +:1019E00000000000000000000000000000000000F7 +:1019F00000000000000000000000000000000000E7 +:101A000000000000000000000000000000000000D6 +:101A100000000000000000003C0090B90100000040 +:101A200000000000000000000000000000000000B6 +:101A300000000000000000000000000000000000A6 +:101A40000000000000000000000000000000000096 +:101A5000000000000000000000003C00CCB90100C4 +:101A60000000000000000000000000000000000076 +:101A70000000000000000000000000000000000066 +:101A80000000000000000000000000000000000056 +:101A90000000000000000000000000003C0008BA48 +:101AA0000100000000000000000000000000000035 +:101AB0000000000000000000000000000000000026 +:101AC0000000000000000000000000000000000016 +:101AD00000000000000000000000000000003C00CA +:101AE00044BA0100000000000000000000000000F7 +:101AF00000000000000000000000000000000000E6 +:101B000000000000000000000000000000000000D5 +:101B100000000000000000000000000000000000C5 +:101B20003C0080BA0100000000000000000000003E +:101B300000000000000000000000000000000000A5 +:101B40000000000000000000000000000000000095 +:101B50000000000000000000000000000000000085 +:101B600000003C00BCBA01000000000000000000C2 +:101B70000000000000000000000000000000000065 +:101B80000000000000000000000000000000000055 +:101B90000000000000000000000000000000000045 +:101BA000000000003C00F8BA010000000000000046 +:101BB0000000000000000000000000000000000025 +:101BC0000000000000000000000000000000000015 +:101BD0000000000000000000000000000000000005 +:101BE0000000000000003C0034BB010000000000C9 +:101BF00000000000000000000000000000000000E5 +:101C000000000000000000000000000000000000D4 +:101C100000000000000000000000000000000000C4 +:101C200000000000000000003C0070BB010000004C +:101C300000000000000000000000000000000000A4 +:101C40000000000000000000000000000000000094 +:101C50000000000000000000000000000000000084 +:101C6000000000000000000000003C00ACBB0100D0 +:101C70000000000000000000000000000000000064 +:101C80000000000000000000000000000000000054 +:101C90000000000000000000000000000000000044 +:101CA0000000000000000000000000003C00E8BB55 +:101CB0000100000000000000000000000000000023 +:101CC0000000000000000000000000000000000014 +:101CD0000000000000000000000000000000000004 +:101CE00000000000000000000000000000003C00B8 +:101CF00024BC010000000000000000000000000003 +:101D000000000000000000000000000000000000D3 +:101D100000000000000000000000000000000000C3 +:101D200000000000000000000000000000000000B3 +:101D30003C0060BC0100000000000000000000004A +:101D40000000000000000000000000000000000093 +:101D50000000000000000000000000000000000083 +:101D60000000000000000000000000000000000073 +:101D700000003C009CBC01000000000000000000CE +:101D80000000000000000000000000000000000053 +:101D90000000000000000000000000000000000043 +:101DA0000000000000000000000000000000000033 +:101DB000000000003C00D8BC010000000000000052 +:101DC0000000000000000000000000000000000013 +:101DD0000000000000000000000000000000000003 +:101DE00000000000000000000000000000000000F3 +:101DF0000000000000003C0014BD010000000000D5 +:101E000000000000000000000000000000000000D2 +:101E100000000000000000000000000000000000C2 +:101E200000000000000000000000000000000000B2 +:101E300000000000000000003C0050BD0100000058 +:101E40000000000000000000000000000000000092 +:101E50000000000000000000000000000000000082 +:101E60000000000000000000000000000000000072 +:101E7000000000000000000000003C008CBD0100DC +:101E80000000000000000000000000000000000052 +:101E90000000000000000000000000000000000042 +:101EA0000000000000000000000000000000000032 +:101EB0000000000000000000000000003C00C8BD61 +:101EC0000100000000000000000000000000000011 +:101ED0000000000000000000000000000000000002 +:101EE00000000000000000000000000000000000F2 +:101EF00000000000000000000000000000003C00A6 +:101F000004BE01000000000000000000000000000E +:101F100000000000000000000000000000000000C1 +:101F200000000000000000000000000000000000B1 +:101F300000000000000000000000000000000000A1 +:101F40003C0040BE01000000000000000000000056 +:101F50000000000000000000000000000000000081 +:101F60000000000000000000000000000000000071 +:101F70000000000000000000000000000000000061 +:101F800000003C007CBE01000000000000000000DA +:101F90000000000000000000000000000000000041 +:101FA0000000000000000000000000000000000031 +:101FB0000000000000000000000000000000000021 +:101FC000000000003C00B8BE01000000000000005E +:101FD0000000000000000000000000000000000001 +:101FE00000000000000000000000000000000000F1 +:101FF00000000000000000000000000000000000E1 +:102000000000000000003C00F4BE010000000000E1 +:1020100000000000000000000000000000000000C0 +:1020200000000000000000000000000000000000B0 +:1020300000000000000000000000000000000000A0 +:1020400000000000000000003C0030BF0100000064 +:102050000000000000000000000000000000000080 +:102060000000000000000000000000000000000070 +:102070000000000000000000000000000000000060 +:10208000000000000000000000003C006CBF0100E8 +:102090000000000000000000000000000000000040 +:1020A0000000000000000000000000000000000030 +:1020B0000000000000000000000000000000000020 +:1020C0000000000000000000000000003C00A8BF6D +:1020D00001000000000000000000000000000000FF +:1020E00000000000000000000000000000000000F0 +:1020F00000000000000000000000000000000000E0 +:1021000000000000000000000000000000003C0093 +:10211000E4BF01000000000000000000000000001B +:1021200000000000000000000000000000000000AF +:10213000000000000000000000000000000000009F +:10214000000000000000000000000000000000008F +:102150003C0020C001000000000000000000000062 +:10216000000000000000000000000000000000006F +:10217000000000000000000000000000000000005F +:10218000000000000000000000000000000000004F +:1021900000003C005CC001000000000000000000E6 +:1021A000000000000000000000000000000000002F +:1021B000000000000000000000000000000000001F +:1021C000000000000000000000000000000000000F +:1021D000000000003C0098C001000000000000006A +:1021E00000000000000000000000000000000000EF +:1021F00000000000000000000000000000000000DF +:1022000000000000000000000000000000000000CE +:102210000000000000003C00D4C0010000000000ED +:1022200000000000000000000000000000000000AE +:10223000000000000000000000000000000000009E +:10224000000000000000000000000000000000008E +:1022500000000000000000003C0010C10100000070 +:10226000000000000000000000000000000000006E +:10227000000000000000000000000000000000005E +:10228000000000000000000000000000000000004E +:10229000000000000000000000003C004CC10100F4 +:1022A000000000000000000000000000000000002E +:1022B000000000000000000000000000000000001E +:1022C000000000000000000000000000000000000E +:1022D0000000000000000000000000003C0088C179 +:1022E00001000000000000000000000000000000ED +:1022F00000000000000000000000000000000000DE +:1023000000000000000000000000000000000000CD +:1023100000000000000000000000000000003C0081 +:10232000C4C1010000000000000000000000000027 +:10233000000000000000000000000000000000009D +:10234000000000000000000000000000000000008D +:10235000000000000000000000000000000000007D +:102360003C0000C20100000000000000000000006E +:10237000000000000000000000000000000000005D +:10238000000000000000000000000000000000004D +:10239000000000000000000000000000000000003D +:1023A00000003C003CC201000000000000000000F2 +:1023B000000000000000000000000000000000001D +:1023C000000000000000000000000000000000000D +:1023D00000000000000000000000000000000000FD +:1023E000000000003C0078C2010000000000000076 +:1023F00000000000000000000000000000000000DD +:1024000000000000000000000000000000000000CC +:1024100000000000000000000000000000000000BC +:102420000000000000003C00B4C2010000000000F9 +:10243000000000000000000000000000000000009C +:10244000000000000000000000000000000000008C +:10245000000000000000000000000000000000007C +:1024600000000000000000003C00F0C2010000007D +:10247000000000000000000000000000000000005C +:10248000000000000000000000000000000000004C +:10249000000000000000000000000000000000003C +:1024A000000000000000000000003C002CC3010000 +:1024B000000000000000000000000000000000001C +:1024C000000000000000000000000000000000000C +:1024D00000000000000000000000000000000000FC +:1024E0000000000000000000000000003C0068C385 +:1024F00001000000000000000000000000000000DB +:1025000000000000000000000000000000000000CB +:1025100000000000000000000000000000000000BB +:1025200000000000000000000000000000003C006F +:10253000A4C3010000000000000000000000000033 +:10254000000000000000000000000000000000008B +:10255000000000000000000000000000000000007B +:10256000000000000000000000000000000000006B +:102570003C00E0C30100000000000000000000007B +:10258000000000000000000000000000000000004B +:10259000000000000000000000000000000000003B +:1025A000000000000000000000000000000000002B +:1025B00000003C001CC401000000000000000000FE +:1025C000000000000000000000000000000000000B +:1025D00000000000000000000000000000000000FB +:1025E00000000000000000000000000000000000EB +:1025F000000000003C0058C4010000000000000082 +:1026000000000000000000000000000000000000CA +:1026100000000000000000000000000000000000BA +:1026200000000000000000000000000000000000AA +:102630000000000000003C0094C401000000000005 +:10264000000000000000000000000000000000008A +:10265000000000000000000000000000000000007A +:10266000000000000000000000000000000000006A +:1026700000000000000000003C00D0C40100000089 +:10268000000000000000000000000000000000004A +:10269000000000000000000000000000000000003A +:1026A000000000000000000000000000000000002A +:1026B000000000000000000000003C000CC501000C +:1026C000000000000000000000000000000000000A +:1026D00000000000000000000000000000000000FA +:1026E00000000000000000000000000000000000EA +:1026F0000000000000000000000000003C0048C591 +:1027000001000000000000000000000000000000C8 +:1027100000000000000000000000000000000000B9 +:1027200000000000000000000000000000000000A9 +:1027300000000000000000000000000000003C005D +:1027400084C501000000000000000000000000003F +:102750000000000000000000000000000000000079 +:102760000000000000000000000000000000000069 +:102770000000000000000000000000000000000059 +:102780003C00C0C501000000000000000000000087 +:102790000000000000000000000000000000000039 +:1027A0000000000000000000000000000000000029 +:1027B0000000000000000000000000000000000019 +:1027C00000003C00FCC5010000000000000000000B +:1027D00000000000000000000000000000000000F9 +:1027E00000000000000000000000000000000000E9 +:1027F00000000000000000000000000000000000D9 +:10280000000000003C0038C601000000000000008D +:1028100000000000000000000000000000000000B8 +:1028200000000000000000000000000000000000A8 +:102830000000000000000000000000000000000098 +:102840000000000000003C0074C601000000000011 +:102850000000000000000000000000000000000078 +:102860000000000000000000000000000000000068 +:102870000000000000000000000000000000000058 +:1028800000000000000000003C00B0C60100000095 +:102890000000000000000000000000000000000038 +:1028A0000000000000000000000000000000000028 +:1028B0000000000000000000000000000000000018 +:1028C000000000000000000000003C00ECC6010019 +:1028D00000000000000000000000000000000000F8 +:1028E00000000000000000000000000000000000E8 +:1028F00000000000000000000000000000000000D8 +:102900000000000000000000000000003C0028C79C +:1029100001000000000000000000000000000000B6 +:1029200000000000000000000000000000000000A7 +:102930000000000000000000000000000000000097 +:1029400000000000000000000000000000003C004B +:1029500064C701000000000000000000000000004B +:102960000000000000000000000000000000000067 +:102970000000000000000000000000000000000057 +:102980000000000000000000000000000000000047 +:102990003C00A0C701000000000000000000000093 +:1029A0000000000000000000000000000000000027 +:1029B0000000000000000000000000000000000017 +:1029C0000000000000000000000000000000000007 +:1029D00000003C00DCC70100000000000000000017 +:1029E00000000000000000000000000000000000E7 +:1029F00000000000000000000000000000000000D7 +:102A000000000000000000000000000000000000C6 +:102A1000000000003C0018C8010000000000000099 +:102A200000000000000000000000000000000000A6 +:102A30000000000000000000000000000000000096 +:102A40000000000000000000000000000000000086 +:102A50000000000000003C0054C80100000000001D +:102A60000000000000000000000000000000000066 +:102A70000000000000000000000000000000000056 +:102A80000000000000000000000000000000000046 +:102A900000000000000000003C0090C801000000A1 +:102AA0000000000000000000000000000000000026 +:102AB0000000000000000000000000000000000016 +:102AC0000000000000000000000000000000000006 +:102AD000000000000000000000003C00CCC8010025 +:102AE00000000000000000000000000000000000E6 +:102AF00000000000000000000000000000000000D6 +:102B000000000000000000000000000000000000C5 +:102B10000000000000000000000000003C0008C9A8 +:102B200001000000000000000000000000000000A4 +:102B30000000000000000000000000000000000095 +:102B40000000000000000000000000000000000085 +:102B500000000000000000000000000000003C0039 +:102B600044C9010000000000000000000000000057 +:102B70000000000000000000000000000000000055 +:102B80000000000000000000000000000000000045 +:102B90000000000000000000000000000000000035 +:102BA0003C0080C90100000000000000000000009F +:102BB0000000000000000000000000000000000015 +:102BC0000000000000000000000000000000000005 +:102BD00000000000000000000000000000000000F5 +:102BE00000003C00BCC90100000000000000000023 +:102BF00000000000000000000000000000000000D5 +:102C000000000000000000000000000000000000C4 +:102C100000000000000000000000000000000000B4 +:102C2000000000003C00F8C90100000000000000A6 +:102C30000000000000000000000000000000000094 +:102C40000000000000000000000000000000000084 +:102C50000000000000000000000000000000000074 +:102C60000000000000003C0034CA01000000000029 +:102C70000000000000000000000000000000000054 +:102C80000000000000000000000000000000000044 +:102C90000000000000000000000000000000000034 +:102CA00000000000000000003C0070CA01000000AD +:102CB0000000000000000000000000000000000014 +:102CC0000000000000000000000000000000000004 +:102CD00000000000000000000000000000000000F4 +:102CE000000000000000000000003C00ACCA010031 +:102CF00000000000000000000000000000000000D4 +:102D000000000000000000000000000000000000C3 +:102D100000000000000000000000000000000000B3 +:102D20000000000000000000000000003C00E8CAB5 +:102D30000100000000000000000000000000000092 +:102D40000000000000000000000000000000000083 +:102D50000000000000000000000000000000000073 +:102D600000000000000000000000000000003C0027 +:102D700024CB010000000000000000000000000063 +:102D80000000000000000000000000000000000043 +:102D90000000000000000000000000000000000033 +:102DA0000000000000000000000000000000000023 +:102DB0003C0060CB010000000000000000000000AB +:102DC0000000000000000000000000000000000003 +:102DD00000000000000000000000000000000000F3 +:102DE00000000000000000000000000000000000E3 +:102DF00000003C009CCB010000000000000000002F +:102E000000000000000000000000000000000000C2 +:102E100000000000000000000000000000000000B2 +:102E200000000000000000000000000000000000A2 +:102E3000000000003C00D8CB0100000000000000B2 +:102E40000000000000000000000000000000000082 +:102E50000000000000000000000000000000000072 +:102E60000000000000000000000000000000000062 +:102E70000000000000003C0014CC01000000000035 +:102E80000000000000000000000000000000000042 +:102E90000000000000000000000000000000000032 +:102EA0000000000000000000000000000000000022 +:102EB00000000000000000003C0050CC01000000B9 +:102EC0000000000000000000000000000000000002 +:102ED00000000000000000000000000000000000F2 +:102EE00000000000000000000000000000000000E2 +:102EF000000000000000000000003C008CCC01003D +:102F000000000000000000000000000000000000C1 +:102F100000000000000000000000000000000000B1 +:102F200000000000000000000000000000000000A1 +:102F30000000000000000000000000003C00C8CCC1 +:102F40000100000000000000000000000000000080 +:102F50000000000000000000000000000000000071 +:102F60000000000000000000000000000000000061 +:102F700000000000000000000000000000003C0015 +:102F800004CD01000000000000000000000000006F +:102F90000000000000000000000000000000000031 +:102FA0000000000000000000000000000000000021 +:102FB0000000000000000000000000000000000011 +:102FC0003C0040CD010000000000000000000000B7 +:102FD00000000000000000000000000000000000F1 +:102FE00000000000000000000000000000000000E1 +:102FF00000000000000000000000000000000000D1 +:1030000000003C007CCD010000000000000000003A +:1030100000000000000000000000000000000000B0 +:1030200000000000000000000000000000000000A0 +:103030000000000000000000000000000000000090 +:10304000000000003C00B8CD0100000000000000BE +:103050000000000000000000000000000000000070 +:103060000000000000000000000000000000000060 +:103070000000000000000000000000000000000050 +:103080000000000000003C00F4CD01000000000042 +:103090000000000000000000000000000000000030 +:1030A0000000000000000000000000000000000020 +:1030B0000000000000000000000000000000000010 +:1030C00000000000000000003C0030CE01000000C5 +:1030D00000000000000000000000000000000000F0 +:1030E00000000000000000000000000000000000E0 +:1030F00000000000000000000000000000000000D0 +:10310000000000000000000000003C006CCE010048 +:1031100000000000000000000000000000000000AF +:10312000000000000000000000000000000000009F +:10313000000000000000000000000000000000008F +:103140000000000000000000000000003C00A8CECD +:10315000010000000000000000000000000000006E +:10316000000000000000000000000000000000005F +:10317000000000000000000000000000000000004F +:1031800000000000000000000000000000003C0003 +:10319000E4CE01000000000000000000000000007C +:1031A000000000000000000000000000000000001F +:1031B000000000000000000000000000000000000F +:1031C00000000000000000000000000000000000FF +:1031D0003C0020CF010000000000000000000000C3 +:1031E00000000000000000000000000000000000DF +:1031F00000000000000000000000000000000000CF +:1032000000000000000000000000000000000000BE +:1032100000003C005CCF0100000000000000000046 +:10322000000000000000000000000000000000009E +:10323000000000000000000000000000000000008E +:10324000000000000000000000000000000000007E +:10325000000000003C0098CF0100000000000000CA +:10326000000000000000000000000000000000005E +:10327000000000000000000000000000000000004E +:10328000000000000000000000000000000000003E +:103290000000000000003C00D4CF0100000000004E +:1032A000000000000000000000000000000000001E +:1032B000000000000000000000000000000000000E +:1032C00000000000000000000000000000000000FE +:1032D00000000000000000003C0010D001000000D1 +:1032E00000000000000000000000000000000000DE +:1032F00000000000000000000000000000000000CE +:1033000000000000000000000000000000000000BD +:10331000000000000000000000003C004CD0010054 +:10332000000000000000000000000000000000009D +:10333000000000000000000000000000000000008D +:10334000000000000000000000000000000000007D +:103350000000000000000000000000003C0088D0D9 +:10336000010000000000000000000000000000005C +:10337000000000000000000000000000000000004D +:10338000000000000000000000000000000000003D +:1033900000000000000000000000000000003C00F1 +:1033A000C4D0010000000000000000000000000088 +:1033B000000000000000000000000000000000000D +:1033C00000000000000000000000000000000000FD +:1033D00000000000000000000000000000000000ED +:1033E0003C0000D1010000000000000000000000CF +:1033F00000000000000000000000000000000000CD +:1034000000000000000000000000000000000000BC +:1034100000000000000000000000000000000000AC +:1034200000003C003CD10100000000000000000052 +:10343000000000000000000000000000000000008C +:10344000000000000000000000000000000000007C +:10345000000000000000000000000000000000006C +:10346000000000003C0078D10100000000000000D6 +:10347000000000000000000000000000000000004C +:10348000000000000000000000000000000000003C +:10349000000000000000000000000000000000002C +:1034A0000000000000003C00B4D10100000000005A +:1034B000000000000000000000000000000000000C +:1034C00000000000000000000000000000000000FC +:1034D00000000000000000000000000000000000EC +:1034E00000000000000000003C00F0D101000000DE +:1034F00000000000000000000000000000000000CC +:1035000000000000000000000000000000000000BB +:1035100000000000000000000000000000000000AB +:10352000000000000000000000003C002CD2010060 +:10353000000000000000000000000000000000008B +:10354000000000000000000000000000000000007B +:10355000000000000000000000000000000000006B +:103560000000000000000000000000003C0068D2E5 +:10357000010000000000000000000000000000004A +:10358000000000000000000000000000000000003B +:10359000000000000000000000000000000000002B +:1035A00000000000000000000000000000003C00DF +:1035B000A4D2010000000000000000000000000094 +:1035C00000000000000000000000000000000000FB +:1035D00000000000000000000000000000000000EB +:1035E00000000000000000000000000000000000DB +:1035F0003C00E0D2010000000000000000000000DC +:1036000000000000000000000000000000000000BA +:1036100000000000000000000000000000000000AA +:10362000000000000000000000000000000000009A +:1036300000003C001CD3010000000000000000005E +:10364000000000000000000000000000000000007A +:10365000000000000000000000000000000000006A +:10366000000000000000000000000000000000005A +:10367000000000003C0058D30100000000000000E2 +:10368000000000000000000000000000000000003A +:10369000000000000000000000000000000000002A +:1036A000000000000000000000000000000000001A +:1036B0000000000000003C0094D301000000000066 +:1036C00000000000000000000000000000000000FA +:1036D00000000000000000000000000000000000EA +:1036E00000000000000000000000000000000000DA +:1036F00000000000000000003C00D0D301000000EA +:1037000000000000000000000000000000000000B9 +:1037100000000000000000000000000000000000A9 +:103720000000000000000000000000000000000099 +:10373000000000000000000000003C000CD401006C +:103740000000000000000000000000000000000079 +:103750000000000000000000000000000000000069 +:103760000000000000000000000000000000000059 +:103770000000000000000000000000003C0048D4F1 +:103780000100000000000000000000000000000038 +:103790000000000000000000000000000000000029 +:1037A0000000000000000000000000000000000019 +:1037B00000000000000000000000000000003C00CD +:1037C00084D40100000000000000000000000000A0 +:1037D00000000000000000000000000000000000E9 +:1037E00000000000000000000000000000000000D9 +:1037F00000000000000000000000000000000000C9 +:103800003C00C0D4010000000000000000000000E7 +:1038100000000000000000000000000000000000A8 +:103820000000000000000000000000000000000098 +:103830000000000000000000000000000000000088 +:1038400000003C00FCD4010000000000000000006B +:103850000000000000000000000000000000000068 +:103860000000000000000000000000000000000058 +:103870000000000000000000000000000000000048 +:10388000000000003C0038D50100000000000000EE +:103890000000000000000000000000000000000028 +:1038A0000000000000000000000000000000000018 +:1038B0000000000000000000000000000000000008 +:1038C0000000000000003C0074D501000000000072 +:1038D00000000000000000000000000000000000E8 +:1038E00000000000000000000000000000000000D8 +:1038F00000000000000000000000000000000000C8 +:1039000000000000000000003C00B0D501000000F5 +:1039100000000000000000000000000000000000A7 +:103920000000000000000000000000000000000097 +:103930000000000000000000000000000000000087 +:10394000000000000000000000003C00ECD5010079 +:103950000000000000000000000000000000000067 +:103960000000000000000000000000000000000057 +:103970000000000000000000000000000000000047 +:103980000000000000000000000000003C0028D6FD +:103990000100000000000000000000000000000026 +:1039A0000000000000000000000000000000000017 +:1039B0000000000000000000000000000000000007 +:1039C00000000000000000000000000000003C00BB +:1039D00064D60100000000000000000000000000AC +:1039E00000000000000000000000000000000000D7 +:1039F00000000000000000000000000000000000C7 +:103A000000000000000000000000000000000000B6 +:103A10003C00A0D6010000000000000000000000F3 +:103A20000000000000000000000000000000000096 +:103A30000000000000000000000000000000000086 +:103A40000000000000000000000000000000000076 +:103A500000003C00DCD60100000000000000000077 +:103A60000000000000000000000000000000000056 +:103A70000000000000000000000000000000000046 +:103A80000000000000000000000000000000000036 +:103A9000000000003C0018D70100000000000000FA +:103AA0000000000000000000000000000000000016 +:103AB0000000000000000000000000000000000006 +:103AC00000000000000000000000000000000000F6 +:103AD0000000000000003C0054D70100000000007E +:103AE00000000000000000000000000000000000D6 +:103AF00000000000000000000000000000000000C6 +:103B000000000000000000000000000000000000B5 +:103B100000000000000000003C0090D70100000001 +:103B20000000000000000000000000000000000095 +:103B30000000000000000000000000000000000085 +:103B40000000000000000000000000000000000075 +:103B5000000000000000000000003C00CCD7010085 +:103B60000000000000000000000000000000000055 +:103B70000000000000000000000000000000000045 +:103B80000000000000000000000000000000000035 +:103B90000000000000000000000000003C0008D809 +:103BA0000100000000000000000000000000000014 +:103BB0000000000000000000000000000000000005 +:103BC00000000000000000000000000000000000F5 +:103BD00000000000000000000000000000003C00A9 +:103BE00044D80100000000000000000000000000B8 +:103BF00000000000000000000000000000000000C5 +:103C000000000000000000000000000000000000B4 +:103C100000000000000000000000000000000000A4 +:103C20003C0080D8010000000000000000000000FF +:103C30000000000000000000000000000000000084 +:103C40000000000000000000000000000000000074 +:103C50000000000000000000000000000000000064 +:103C600000003C00BCD80100000000000000000083 +:103C70000000000000000000000000000000000044 +:103C80000000000000000000000000000000000034 +:103C90000000000000000000000000000000000024 +:103CA000000000003C00F8D8010000000000000007 +:103CB0000000000000000000000000000000000004 +:103CC00000000000000000000000000000000000F4 +:103CD00000000000000000000000000000000000E4 +:103CE0000000000000003C0034D90100000000008A +:103CF00000000000000000000000000000000000C4 +:103D000000000000000000000000000000000000B3 +:103D100000000000000000000000000000000000A3 +:103D200000000000000000003C0070D9010000000D +:103D30000000000000000000000000000000000083 +:103D40000000000000000000000000000000000073 +:103D50000000000000000000000000000000000063 +:103D6000000000000000000000003C00ACD9010091 +:103D70000000000000000000000000000000000043 +:103D80000000000000000000000000000000000033 +:103D90000000000000000000000000000000000023 +:103DA0000000000000000000000000003C00E8D916 +:103DB0000100000000000000000000000000000002 +:103DC00000000000000000000000000000000000F3 +:103DD00000000000000000000000000000000000E3 +:103DE00000000000000000000000000000003C0097 +:103DF00024DA0100000000000000000000000000C4 +:103E000000000000000000000000000000000000B2 +:103E100000000000000000000000000000000000A2 +:103E20000000000000000000000000000000000092 +:103E30003C0060DA0100000000000000000000000B +:103E40000000000000000000000000000000000072 +:103E50000000000000000000000000000000000062 +:103E60000000000000000000000000000000000052 +:103E700000003C009CDA010000000000000000008F +:103E80000000000000000000000000000000000032 +:103E90000000000000000000000000000000000022 +:103EA0000000000000000000000000000000000012 +:103EB000000000003C00D8DA010000000000000013 +:103EC00000000000000000000000000000000000F2 +:103ED00000000000000000000000000000000000E2 +:103EE00000000000000000000000000000000000D2 +:103EF0000000000000003C0014DB01000000000096 +:103F000000000000000000000000000000000000B1 +:103F100000000000000000000000000000000000A1 +:103F20000000000000000000000000000000000091 +:103F300000000000000000003C0050DB0100000019 +:103F40000000000000000000000000000000000071 +:103F50000000000000000000000000000000000061 +:103F60000000000000000000000000000000000051 +:103F7000000000000000000000003C008CDB01009D +:103F80000000000000000000000000000000000031 +:103F90000000000000000000000000000000000021 +:103FA0000000000000000000000000000000000011 +:103FB0000000000000000000000000003C00C8DB22 +:103FC00001000000000000000000000000000000F0 +:103FD00000000000000000000000000000000000E1 +:103FE00000000000000000000000000000000000D1 +:103FF00000000000000000000000000000003C0085 +:1040000004DC0100000000000000000000000000CF +:1040100000000000000000000000000000000000A0 +:104020000000000000000000000000000000000090 +:104030000000000000000000000000000000000080 +:104040003C0040DC01000000000000000000000017 +:104050000000000000000000000000000000000060 +:104060000000000000000000000000000000000050 +:104070000000000000000000000000000000000040 +:1040800000003C007CDC010000000000000000009B +:104090000000000000000000000000000000000020 +:1040A0000000000000000000000000000000000010 +:1040B0000000000000000000000000000000000000 +:1040C000000000003C00B8DC01000000000000001F +:1040D00000000000000000000000000000000000E0 +:1040E00000000000000000000000000000000000D0 +:1040F00000000000000000000000000000000000C0 +:104100000000000000003C00F4DC010000000000A2 +:10411000000000000000000000000000000000009F +:10412000000000000000000000000000000000008F +:10413000000000000000000000000000000000007F +:1041400000000000000000003C0030DD0100000025 +:10415000000000000000000000000000000000005F +:10416000000000000000000000000000000000004F +:10417000000000000000000000000000000000003F +:10418000000000000000000000003C006CDD0100A9 +:10419000000000000000000000000000000000001F +:1041A000000000000000000000000000000000000F +:1041B00000000000000000000000000000000000FF +:1041C0000000000000000000000000003C00A8DD2E +:1041D00001000000000000000000000000000000DE +:1041E00000000000000000000000000000000000CF +:1041F00000000000000000000000000000000000BF +:1042000000000000000000000000000000003C0072 +:10421000E4DD0100000000000000000000000000DC +:10422000000000000000000000000000000000008E +:10423000000000000000000000000000000000007E +:10424000000000000000000000000000000000006E +:104250003C0020DE01000000000000000000000023 +:10426000000000000000000000000000000000004E +:10427000000000000000000000000000000000003E +:10428000000000000000000000000000000000002E +:1042900000003C005CDE01000000000000000000A7 +:1042A000000000000000000000000000000000000E +:1042B00000000000000000000000000000000000FE +:1042C00000000000000000000000000000000000EE +:1042D000000000003C0098DE01000000000000002B +:1042E00000000000000000000000000000000000CE +:1042F00000000000000000000000000000000000BE +:1043000000000000000000000000000000000000AD +:104310000000000000003C00D4DE010000000000AE +:10432000000000000000000000000000000000008D +:10433000000000000000000000000000000000007D +:10434000000000000000000000000000000000006D +:1043500000000000000000003C0010DF0100000031 +:10436000000000000000000000000000000000004D +:10437000000000000000000000000000000000003D +:10438000000000000000000000000000000000002D +:10439000000000000000000000003C004CDF0100B5 +:1043A000000000000000000000000000000000000D +:1043B00000000000000000000000000000000000FD +:1043C00000000000000000000000000000000000ED +:1043D0000000000000000000000000003C0088DF3A +:1043E00001000000000000000000000000000000CC +:1043F00000000000000000000000000000000000BD +:1044000000000000000000000000000000000000AC +:1044100000000000000000000000000000003C0060 +:10442000C4DF0100000000000000000000000000E8 +:10443000000000000000000000000000000000007C +:10444000000000000000000000000000000000006C +:10445000000000000000000000000000000000005C +:104460003C0000E00100000000000000000000002F +:10447000000000000000000000000000000000003C +:10448000000000000000000000000000000000002C +:10449000000000000000000000000000000000001C +:1044A00000003C003CE001000000000000000000B3 +:1044B00000000000000000000000000000000000FC +:1044C00000000000000000000000000000000000EC +:1044D00000000000000000000000000000000000DC +:1044E000000000003C0078E0010000000000000037 +:1044F00000000000000000000000000000000000BC +:1045000000000000000000000000000000000000AB +:10451000000000000000000000000000000000009B +:104520000000000000003C00B4E0010000000000BA +:10453000000000000000000000000000000000007B +:10454000000000000000000000000000000000006B +:10455000000000000000000000000000000000005B +:1045600000000000000000003C00F0E0010000003E +:10457000000000000000000000000000000000003B +:10458000000000000000000000000000000000002B +:10459000000000000000000000000000000000001B +:1045A000000000000000000000003C002CE10100C1 +:1045B00000000000000000000000000000000000FB +:1045C00000000000000000000000000000000000EB +:1045D00000000000000000000000000000000000DB +:1045E0000000000000000000000000003C0068E146 +:1045F00001000000000000000000000000000000BA +:1046000000000000000000000000000000000000AA +:10461000000000000000000000000000000000009A +:1046200000000000000000000000000000003C004E +:10463000A4E10100000000000000000000000000F4 +:10464000000000000000000000000000000000006A +:10465000000000000000000000000000000000005A +:10466000000000000000000000000000000000004A +:104670003C00E0E10100000000000000000000003C +:10468000000000000000000000000000000000002A +:10469000000000000000000000000000000000001A +:1046A000000000000000000000000000000000000A +:1046B00000003C001CE201000000000000000000BF +:1046C00000000000000000000000000000000000EA +:1046D00000000000000000000000000000000000DA +:1046E00000000000000000000000000000000000CA +:1046F000000000003C0058E2010000000000000043 +:1047000000000000000000000000000000000000A9 +:104710000000000000000000000000000000000099 +:104720000000000000000000000000000000000089 +:104730000000000000003C0094E2010000000000C6 +:104740000000000000000000000000000000000069 +:104750000000000000000000000000000000000059 +:104760000000000000000000000000000000000049 +:1047700000000000000000003C00D0E2010000004A +:104780000000000000000000000000000000000029 +:104790000000000000000000000000000000000019 +:1047A0000000000000000000000000000000000009 +:1047B000000000000000000000003C000CE30100CD +:1047C00000000000000000000000000000000000E9 +:1047D00000000000000000000000000000000000D9 +:1047E00000000000000000000000000000000000C9 +:1047F0000000000000000000000000003C0048E352 +:1048000001000000000000000000000000000000A7 +:104810000000000000000000000000000000000098 +:104820000000000000000000000000000000000088 +:1048300000000000000000000000000000003C003C +:1048400084E3010000000000000000000000000000 +:104850000000000000000000000000000000000058 +:104860000000000000000000000000000000000048 +:104870000000000000000000000000000000000038 +:104880003C00C0E301000000000000000000000048 +:104890000000000000000000000000000000000018 +:1048A0000000000000000000000000000000000008 +:1048B00000000000000000000000000000000000F8 +:1048C00000003C00FCE301000000000000000000CC +:1048D00000000000000000000000000000000000D8 +:1048E00000000000000000000000000000000000C8 +:1048F00000000000000000000000000000000000B8 +:10490000000000003C0038E401000000000000004E +:104910000000000000000000000000000000000097 +:104920000000000000000000000000000000000087 +:104930000000000000000000000000000000000077 +:104940000000000000003C0074E4010000000000D2 +:104950000000000000000000000000000000000057 +:104960000000000000000000000000000000000047 +:104970000000000000000000000000000000000037 +:1049800000000000000000003C00B0E40100000056 +:104990000000000000000000000000000000000017 +:1049A0000000000000000000000000000000000007 +:1049B00000000000000000000000000000000000F7 +:1049C000000000000000000000003C00ECE40100DA +:1049D00000000000000000000000000000000000D7 +:1049E00000000000000000000000000000000000C7 +:1049F00000000000000000000000000000000000B7 +:104A00000000000000000000000000003C0028E55D +:104A10000100000000000000000000000000000095 +:104A20000000000000000000000000000000000086 +:104A30000000000000000000000000000000000076 +:104A400000000000000000000000000000003C002A +:104A500064E501000000000000000000000000000C +:104A60000000000000000000000000000000000046 +:104A70000000000000000000000000000000000036 +:104A80000000000000000000000000000000000026 +:104A90003C00A0E501000000000000000000000054 +:104AA0000000000000000000000000000000000006 +:104AB00000000000000000000000000000000000F6 +:104AC00000000000000000000000000000000000E6 +:104AD00000003C00DCE501000000000000000000D8 +:104AE00000000000000000000000000000000000C6 +:104AF00000000000000000000000000000000000B6 +:104B000000000000000000000000000000000000A5 +:104B1000000000003C0018E601000000000000005A +:104B20000000000000000000000000000000000085 +:104B30000000000000000000000000000000000075 +:104B40000000000000000000000000000000000065 +:104B50000000000000003C0054E6010000000000DE +:104B60000000000000000000000000000000000045 +:104B70000000000000000000000000000000000035 +:104B80000000000000000000000000000000000025 +:104B900000000000000000003C0090E60100000062 +:104BA0000000000000000000000000000000000005 +:104BB00000000000000000000000000000000000F5 +:104BC00000000000000000000000000000000000E5 +:104BD000000000000000000000003C00CCE60100E6 +:104BE00000000000000000000000000000000000C5 +:104BF00000000000000000000000000000000000B5 +:104C000000000000000000000000000000000000A4 +:104C10000000000000000000000000003C0008E769 +:104C20000100000000000000000000000000000083 +:104C30000000000000000000000000000000000074 +:104C40000000000000000000000000000000000064 +:104C500000000000000000000000000000003C0018 +:104C600044E7010000000000000000000000000018 +:104C70000000000000000000000000000000000034 +:104C80000000000000000000000000000000000024 +:104C90000000000000000000000000000000000014 +:104CA0003C0080E701000000000000000000000060 +:104CB00000000000000000000000000000000000F4 +:104CC00000000000000000000000000000000000E4 +:104CD00000000000000000000000000000000000D4 +:104CE00000003C00BCE701000000000000000000E4 +:104CF00000000000000000000000000000000000B4 +:104D000000000000000000000000000000000000A3 +:104D10000000000000000000000000000000000093 +:104D2000000000003C00F8E7010000000000000067 +:104D30000000000000000000000000000000000073 +:104D40000000000000000000000000000000000063 +:104D50000000000000000000000000000000000053 +:104D60000000000000003C0034E8010000000000EA +:104D70000000000000000000000000000000000033 +:104D80000000000000000000000000000000000023 +:104D90000000000000000000000000000000000013 +:104DA00000000000000000003C0070E8010000006E +:104DB00000000000000000000000000000000000F3 +:104DC00000000000000000000000000000000000E3 +:104DD00000000000000000000000000000000000D3 +:104DE000000000000000000000003C00ACE80100F2 +:104DF00000000000000000000000000000000000B3 +:104E000000000000000000000000000000000000A2 +:104E10000000000000000000000000000000000092 +:104E20000000000000000000000000003C00E8E876 +:104E30000100000000000000000000000000000071 +:104E40000000000000000000000000000000000062 +:104E50000000000000000000000000000000000052 +:104E600000000000000000000000000000003C0006 +:104E700024E9010000000000000000000000000024 +:104E80000000000000000000000000000000000022 +:104E90000000000000000000000000000000000012 +:104EA0000000000000000000000000000000000002 +:104EB0003C0060E90100000000000000000000006C +:104EC00000000000000000000000000000000000E2 +:104ED00000000000000000000000000000000000D2 +:104EE00000000000000000000000000000000000C2 +:104EF00000003C009CE901000000000000000000F0 +:104F000000000000000000000000000000000000A1 +:104F10000000000000000000000000000000000091 +:104F20000000000000000000000000000000000081 +:104F3000000000003C00D8E9010000000000000073 +:104F40000000000000000000000000000000000061 +:104F50000000000000000000000000000000000051 +:104F60000000000000000000000000000000000041 +:104F70000000000000003C0014EA010000000000F6 +:104F80000000000000000000000000000000000021 +:104F90000000000000000000000000000000000011 +:104FA0000000000000000000000000000000000001 +:104FB00000000000000000003C0050EA010000007A +:104FC00000000000000000000000000000000000E1 +:104FD00000000000000000000000000000000000D1 +:104FE00000000000000000000000000000000000C1 +:104FF000000000000000000000003C008CEA0100FE +:1050000000000000000000000000000000000000A0 +:105010000000000000000000000000000000000090 +:105020000000000000000000000000000000000080 +:105030000000000000000000000000003C00C8EA82 +:10504000010000000000000000000000000000005F +:105050000000000000000000000000000000000050 +:105060000000000000000000000000000000000040 +:1050700000000000000000000000000000003C00F4 +:1050800004EB010000000000000000000000000030 +:105090000000000000000000000000000000000010 +:1050A0000000000000000000000000000000000000 +:1050B00000000000000000000000000000000000F0 +:1050C0003C0040EB01000000000000000000000078 +:1050D00000000000000000000000000000000000D0 +:1050E00000000000000000000000000000000000C0 +:1050F00000000000000000000000000000000000B0 +:1051000000003C007CEB01000000000000000000FB +:10511000000000000000000000000000000000008F +:10512000000000000000000000000000000000007F +:10513000000000000000000000000000000000006F +:10514000000000003C00B8EB01000000000000007F +:10515000000000000000000000000000000000004F +:10516000000000000000000000000000000000003F +:10517000000000000000000000000000000000002F +:105180000000000000003C00F4EB01000000000003 +:10519000000000000000000000000000000000000F +:1051A00000000000000000000000000000000000FF +:1051B00000000000000000000000000000000000EF +:1051C00000000000000000003C0030EC0100000086 +:1051D00000000000000000000000000000000000CF +:1051E00000000000000000000000000000000000BF +:1051F00000000000000000000000000000000000AF +:10520000000000000000000000003C006CEC010009 +:10521000000000000000000000000000000000008E +:10522000000000000000000000000000000000007E +:10523000000000000000000000000000000000006E +:105240000000000000000000000000003C00A8EC8E +:10525000010000000000000000000000000000004D +:10526000000000000000000000000000000000003E +:10527000000000000000000000000000000000002E +:1052800000000000000000000000000000003C00E2 +:10529000E4EC01000000000000000000000000003D +:1052A00000000000000000000000000000000000FE +:1052B00000000000000000000000000000000000EE +:1052C00000000000000000000000000000000000DE +:1052D0003C0020ED01000000000000000000000084 +:1052E00000000000000000000000000000000000BE +:1052F00000000000000000000000000000000000AE +:10530000000000000000000000000000000000009D +:1053100000003C005CED0100000000000000000007 +:10532000000000000000000000000000000000007D +:10533000000000000000000000000000000000006D +:10534000000000000000000000000000000000005D +:10535000000000003C0098ED01000000000000008B +:10536000000000000000000000000000000000003D +:10537000000000000000000000000000000000002D +:10538000000000000000000000000000000000001D +:105390000000000000003C00D4ED0100000000000F +:1053A00000000000000000000000000000000000FD +:1053B00000000000000000000000000000000000ED +:1053C00000000000000000000000000000000000DD +:1053D00000000000000000003C0010EE0100000092 +:1053E00000000000000000000000000000000000BD +:1053F00000000000000000000000000000000000AD +:10540000000000000000000000000000000000009C +:10541000000000000000000000003C004CEE010015 +:10542000000000000000000000000000000000007C +:10543000000000000000000000000000000000006C +:10544000000000000000000000000000000000005C +:105450000000000000000000000000003C0088EE9A +:10546000010000000000000000000000000000003B +:10547000000000000000000000000000000000002C +:10548000000000000000000000000000000000001C +:1054900000000000000000000000000000003C00D0 +:1054A000C4EE010000000000000000000000000049 +:1054B00000000000000000000000000000000000EC +:1054C00000000000000000000000000000000000DC +:1054D00000000000000000000000000000000000CC +:1054E0003C0000EF01000000000000000000000090 +:1054F00000000000000000000000000000000000AC +:10550000000000000000000000000000000000009B +:10551000000000000000000000000000000000008B +:1055200000003C003CEF0100000000000000000013 +:10553000000000000000000000000000000000006B +:10554000000000000000000000000000000000005B +:10555000000000000000000000000000000000004B +:10556000000000003C0078EF010000000000000097 +:10557000000000000000000000000000000000002B +:10558000000000000000000000000000000000001B +:10559000000000000000000000000000000000000B +:1055A0000000000000003C00B4EF0100000000001B +:1055B00000000000000000000000000000000000EB +:1055C00000000000000000000000000000000000DB +:1055D00000000000000000000000000000000000CB +:1055E00000000000000000003C00F0EF010000009F +:1055F00000000000000000000000000000000000AB +:10560000000000000000000000000000000000009A +:10561000000000000000000000000000000000008A +:10562000000000000000000000003C002CF0010021 +:10563000000000000000000000000000000000006A +:10564000000000000000000000000000000000005A +:10565000000000000000000000000000000000004A +:105660000000000000000000000000003C0068F0A6 +:105670000100000000000000000000000000000029 +:10568000000000000000000000000000000000001A +:10569000000000000000000000000000000000000A +:1056A00000000000000000000000000000003C00BE +:1056B000A4F0010000000000000000000000000055 +:1056C00000000000000000000000000000000000DA +:1056D00000000000000000000000000000000000CA +:1056E00000000000000000000000000000000000BA +:1056F0003C00E0F00100000000000000000000009D +:105700000000000000000000000000000000000099 +:105710000000000000000000000000000000000089 +:105720000000000000000000000000000000000079 +:1057300000003C001CF1010000000000000000001F +:105740000000000000000000000000000000000059 +:105750000000000000000000000000000000000049 +:105760000000000000000000000000000000000039 +:10577000000000003C0058F10100000000000000A3 +:105780000000000000000000000000000000000019 +:105790000000000000000000000000000000000009 +:1057A00000000000000000000000000000000000F9 +:1057B0000000000000003C0094F101000000000027 +:1057C00000000000000000000000000000000000D9 +:1057D00000000000000000000000000000000000C9 +:1057E00000000000000000000000000000000000B9 +:1057F00000000000000000003C00D0F101000000AB +:105800000000000000000000000000000000000098 +:105810000000000000000000000000000000000088 +:105820000000000000000000000000000000000078 +:10583000000000000000000000003C000CF201002D +:105840000000000000000000000000000000000058 +:105850000000000000000000000000000000000048 +:105860000000000000000000000000000000000038 +:105870000000000000000000000000003C0048F2B2 +:105880000100000000000000000000000000000017 +:105890000000000000000000000000000000000008 +:1058A00000000000000000000000000000000000F8 +:1058B00000000000000000000000000000003C00AC +:1058C00084F2010000000000000000000000000061 +:1058D00000000000000000000000000000000000C8 +:1058E00000000000000000000000000000000000B8 +:1058F00000000000000000000000000000000000A8 +:105900003C00C0F2010000000000000000000000A8 +:105910000000000000000000000000000000000087 +:105920000000000000000000000000000000000077 +:105930000000000000000000000000000000000067 +:1059400000003C00FCF2010000000000000000002C +:105950000000000000000000000000000000000047 +:105960000000000000000000000000000000000037 +:105970000000000000000000000000000000000027 +:10598000000000003C0038F30100000000000000AF +:105990000000000000000000000000000000000007 +:1059A00000000000000000000000000000000000F7 +:1059B00000000000000000000000000000000000E7 +:1059C0000000000000003C0074F301000000000033 +:1059D00000000000000000000000000000000000C7 +:1059E00000000000000000000000000000000000B7 +:1059F00000000000000000000000000000000000A7 +:105A000000000000000000003C00B0F301000000B6 +:105A10000000000000000000000000000000000086 +:105A20000000000000000000000000000000000076 +:105A30000000000000000000000000000000000066 +:105A4000000000000000000000003C00ECF301003A +:105A50000000000000000000000000000000000046 +:105A60000000000000000000000000000000000036 +:105A70000000000000000000000000000000000026 +:105A80000000000000000000000000003C0028F4BE +:105A90000100000000000000000000000000000005 +:105AA00000000000000000000000000000000000F6 +:105AB00000000000000000000000000000000000E6 +:105AC00000000000000000000000000000003C009A +:105AD00064F401000000000000000000000000006D +:105AE00000000000000000000000000000000000B6 +:105AF00000000000000000000000000000000000A6 +:105B00000000000000000000000000000000000095 +:105B10003C00A0F4010000000000000000000000B4 +:105B20000000000000000000000000000000000075 +:105B30000000000000000000000000000000000065 +:105B40000000000000000000000000000000000055 +:105B500000003C00DCF40100000000000000000038 +:105B60000000000000000000000000000000000035 +:105B70000000000000000000000000000000000025 +:105B80000000000000000000000000000000000015 +:105B9000000000003C0018F50100000000000000BB +:105BA00000000000000000000000000000000000F5 +:105BB00000000000000000000000000000000000E5 +:105BC00000000000000000000000000000000000D5 +:105BD0000000000000003C0054F50100000000003F +:105BE00000000000000000000000000000000000B5 +:105BF00000000000000000000000000000000000A5 +:105C00000000000000000000000000000000000094 +:105C100000000000000000003C0090F501000000C2 +:105C20000000000000000000000000000000000074 +:105C30000000000000000000000000000000000064 +:105C40000000000000000000000000000000000054 +:105C5000000000000000000000003C00CCF5010046 +:105C60000000000000000000000000000000000034 +:105C70000000000000000000000000000000000024 +:105C80000000000000000000000000000000000014 +:105C90000000000000000000000000003C0008F6CA +:105CA00001000000000000000000000000000000F3 +:105CB00000000000000000000000000000000000E4 +:105CC00000000000000000000000000000000000D4 +:105CD00000000000000000000000000000003C0088 +:105CE00044F6010000000000000000000000000079 +:105CF00000000000000000000000000000000000A4 +:105D00000000000000000000000000000000000093 +:105D10000000000000000000000000000000000083 +:105D20003C0080F6010000000000000000000000C0 +:105D30000000000000000000000000000000000063 +:105D40000000000000000000000000000000000053 +:105D50000000000000000000000000000000000043 +:105D600000003C00BCF60100000000000000000044 +:105D70000000000000000000000000000000000023 +:105D80000000000000000000000000000000000013 +:105D90000000000000000000000000000000000003 +:105DA000000000003C00F8F60100000000000000C8 +:105DB00000000000000000000000000000000000E3 +:105DC00000000000000000000000000000000000D3 +:105DD00000000000000000000000000000000000C3 +:105DE0000000000000003C0034F70100000000004B +:105DF00000000000000000000000000000000000A3 +:105E00000000000000000000000000000000000092 +:105E10000000000000000000000000000000000082 +:105E200000000000000000003C0070F701000000CE +:105E30000000000000000000000000000000000062 +:105E40000000000000000000000000000000000052 +:105E50000000000000000000000000000000000042 +:105E6000000000000000000000003C00ACF7010052 +:105E70000000000000000000000000000000000022 +:105E80000000000000000000000000000000000012 +:105E90000000000000000000000000000000000002 +:105EA0000000000000000000000000003C00E8F7D7 +:105EB00001000000000000000000000000000000E1 +:105EC00000000000000000000000000000000000D2 +:105ED00000000000000000000000000000000000C2 +:105EE00000000000000000000000000000003C0076 +:105EF00024F8010000000000000000000000000085 +:105F00000000000000000000000000000000000091 +:105F10000000000000000000000000000000000081 +:105F20000000000000000000000000000000000071 +:105F30003C0060F8010000000000000000000000CC +:105F40000000000000000000000000000000000051 +:105F50000000000000000000000000000000000041 +:105F60000000000000000000000000000000000031 +:105F700000003C009CF80100000000000000000050 +:105F80000000000000000000000000000000000011 +:105F90000000000000000000000000000000000001 +:105FA00000000000000000000000000000000000F1 +:105FB000000000003C00D8F80100000000000000D4 +:105FC00000000000000000000000000000000000D1 +:105FD00000000000000000000000000000000000C1 +:105FE00000000000000000000000000000000000B1 +:105FF0000000000000003C0014F901000000000057 +:106000000000000000000000000000000000000090 +:106010000000000000000000000000000000000080 +:106020000000000000000000000000000000000070 +:1060300000000000000000003C0050F901000000DA +:106040000000000000000000000000000000000050 +:106050000000000000000000000000000000000040 +:106060000000000000000000000000000000000030 +:10607000000000000000000000003C008CF901005E +:106080000000000000000000000000000000000010 +:106090000000000000000000000000000000000000 +:1060A00000000000000000000000000000000000F0 +:1060B0000000000000000000000000003C00C8F9E3 +:1060C00001000000000000000000000000000000CF +:1060D00000000000000000000000000000000000C0 +:1060E00000000000000000000000000000000000B0 +:1060F00000000000000000000000000000003C0064 +:1061000004FA010000000000000000000000000090 +:10611000000000000000000000000000000000007F +:10612000000000000000000000000000000000006F +:10613000000000000000000000000000000000005F +:106140003C0040FA010000000000000000000000D8 +:10615000000000000000000000000000000000003F +:10616000000000000000000000000000000000002F +:10617000000000000000000000000000000000001F +:1061800000003C007CFA010000000000000000005C +:1061900000000000000000000000000000000000FF +:1061A00000000000000000000000000000000000EF +:1061B00000000000000000000000000000000000DF +:1061C000000000003C00B8FA0100000000000000E0 +:1061D00000000000000000000000000000000000BF +:1061E00000000000000000000000000000000000AF +:1061F000000000000000000000000000000000009F +:106200000000000000003C00F4FA01000000000063 +:10621000000000000000000000000000000000007E +:10622000000000000000000000000000000000006E +:10623000000000000000000000000000000000005E +:1062400000000000000000003C0030FB01000000E6 +:10625000000000000000000000000000000000003E +:10626000000000000000000000000000000000002E +:10627000000000000000000000000000000000001E +:10628000000000000000000000003C006CFB01006A +:1062900000000000000000000000000000000000FE +:1062A00000000000000000000000000000000000EE +:1062B00000000000000000000000000000000000DE +:1062C0000000000000000000000000003C00A8FBEF +:1062D00001000000000000000000000000000000BD +:1062E00000000000000000000000000000000000AE +:1062F000000000000000000000000000000000009E +:1063000000000000000000000000000000003C0051 +:10631000E4FB01000000000000000000000000009D +:10632000000000000000000000000000000000006D +:10633000000000000000000000000000000000005D +:10634000000000000000000000000000000000004D +:106350003C0020FC010000000000000000000000E4 +:10636000000000000000000000000000000000002D +:10637000000000000000000000000000000000001D +:10638000000000000000000000000000000000000D +:1063900000003C005CFC0100000000000000000068 +:1063A00000000000000000000000000000000000ED +:1063B00000000000000000000000000000000000DD +:1063C00000000000000000000000000000000000CD +:1063D000000000003C0098FC0100000000000000EC +:1063E00000000000000000000000000000000000AD +:1063F000000000000000000000000000000000009D +:10640000000000000000000000000000000000008C +:106410000000000000003C00D4FC0100000000006F +:10642000000000000000000000000000000000006C +:10643000000000000000000000000000000000005C +:10644000000000000000000000000000000000004C +:1064500000000000000000003C0010FD01000000F2 +:10646000000000000000000000000000000000002C +:10647000000000000000000000000000000000001C +:10648000000000000000000000000000000000000C +:10649000000000000000000000003C004CFD010076 +:1064A00000000000000000000000000000000000EC +:1064B00000000000000000000000000000000000DC +:1064C00000000000000000000000000000000000CC +:1064D0000000000000000000000000003C0088FDFB +:1064E00001000000000000000000000000000000AB +:1064F000000000000000000000000000000000009C +:10650000000000000000000000000000000000008B +:1065100000000000000000000000000000003C003F +:10652000C4FD0100000000000000000000000000A9 +:10653000000000000000000000000000000000005B +:10654000000000000000000000000000000000004B +:10655000000000000000000000000000000000003B +:106560003C0000FE010000000000000000000000F0 +:10657000000000000000000000000000000000001B +:10658000000000000000000000000000000000000B +:1065900000000000000000000000000000000000FB +:1065A00000003C003CFE0100000000000000000074 +:1065B00000000000000000000000000000000000DB +:1065C00000000000000000000000000000000000CB +:1065D00000000000000000000000000000000000BB +:1065E000000000003C0078FE0100000000000000F8 +:1065F000000000000000000000000000000000009B +:10660000000000000000000000000000000000008A +:10661000000000000000000000000000000000007A +:106620000000000000003C00B4FE0100000000007B +:10663000000000000000000000000000000000005A +:10664000000000000000000000000000000000004A +:10665000000000000000000000000000000000003A +:1066600000000000000000003C00F0FE01000000FF +:10667000000000000000000000000000000000001A +:10668000000000000000000000000000000000000A +:1066900000000000000000000000000000000000FA +:1066A000000000000000000000003C002CFF010082 +:1066B00000000000000000000000000000000000DA +:1066C00000000000000000000000000000000000CA +:1066D00000000000000000000000000000000000BA +:1066E0000000000000000000000000000C0068FF37 +:1066F00001000000000000000000000000003C005D +:106700000010040070B52B4806218175C175017E0B +:10671000490849000176017E02229143017626490B +:106720000B785B085B000B7004238B700C234376A3 +:10673000202303751A244475242484761024C476F7 +:106740003C003C1004002A254D70057A3026B543E4 +:1067500020350572857A6D086D008572857A9543BE +:106760008572857A042635438572857A08263543F5 +:106770008572857AA5438572057B2C430473047B5F +:106780001C433C00781004000473047B40252C4318 +:106790000473847A23438372837AAB438372037BCB +:1067A00080242343037308789043087008780122FB +:1067B00010430870087804229043087070BD0000F0 +:1067C0000C8007003C00B4100400808007000149E1 +:1067D00004204873704740800700034980B50020BB +:1067E000088000F00AFB80BD0000FC6B01007047D0 +:1067F000000080B500F067FB80BD80B50A49182015 +:10680000C1F73BFA09493C00F01004000220C1F72F +:1068100037FA08491F20C1F733FA07491C20C1F78E +:106820002FFA06490320C1F72BFA80BD992A0000F0 +:1068300041250000552500005D2500003925000098 +:1068400080B5BFF791FD80BD3C002C11040080B5E0 +:10685000054A05490A20BFF74EFF0120044980027E +:106860000860486080BDB4740100B164000000108D +:10687000070080B500F091FE80BD80B5054A05494E +:106880001B20BFF738FF012004493C0068110400B9 +:10689000C0060860486080BDB87401002D6E00001D +:1068A0000010070080B5044800F080FE0349002076 +:1068B0004860886080BD0000414B0000BC7401004E +:1068C00080B5C5F7D5FECEF7D9F803493C00A41131 +:1068D0000400086003490A20D1F7EFF880BDBC74BA +:1068E0000100496E000080B5012220210620C8F772 +:1068F00056FCBFF770FE03490020086020210248C3 +:10690000BFF763F980BDCC5C0100646D01003C0001 +:10691000E0110400084880B50068002805D006484A +:106920005430426A0021BFF7F3F8044A04490320B7 +:10693000BFF7ACFD80BD0000506D010089980000DC +:106940009198000080B500F003F800F019F880BDC0 +:106950003C001C12040010B5094C6021201CBFF73C +:106960003AF90020C043A0602060FF200230E0849C +:106970002022201C40300249BFF75BF910BD0010F7 +:1069800007007052010000200A49C0438860094B8B +:106990000A493C0058120400002082000130000621 +:1069A000000E20289950F8D30649044A081C1030DC +:1069B000083A03C27047000000100700E07E0100A3 +:1069C0007575000000A00700044800210022002384 +:1069D0000EC00C383C009412040001214160704745 +:1069E0000000707801007047000003480021002279 +:1069F00000230EC008C070470000885A01000449F7 +:106A000080B500204861024840211C30BFF7E9F8FA +:106A100080BDFC5A01003C00D012040080B5CEF7C6 +:106A20003FF80349886103490320D1F755F880BD39 +:106A3000FC5A01000D17010080B5C0F7A5F980BD13 +:106A4000FEB56C4900200090C8786B4C6B4F430733 +:106A5000C006C017DB0EE3583C000C1304000130E5 +:106A600038623B61081C8078664E03224107A036DD +:106A70000296490F3172890061583C1C6161019195 +:106A8000C006C00F7862201C002787610020211CEF +:106A9000C86159485949007809793C0048130400F5 +:106AA0005A4C4E07760F711C8C46B1008E465649E3 +:106AB0008031002824D0524F01287F781AD0022834 +:106AC00071D14F48002F0CD0012F6CD140794D4D22 +:106AD0004007400F8200AA584B4D01303C00841300 +:106AE0000400EA61A07304224B48484DC8614A483B +:106AF000002F00D04A482F1C11E04248002F55D1EA +:106B00000770022747703F484078002810D00128BE +:106B100001D002284AD13F483D4FC8613F483C0060 +:106B2000C013040088613A4970460858351CB861A2 +:106B30006046607304E03C48022288613B48C861BB +:106B40000020324906E00E18B6787607760F042E3C +:106B50002FD801309042F6D3C8792E4FC007C00F0E +:106B60003C00FC130400F86033484168194341605D +:106B7000816819438160019AB9698C461143FA69A9 +:106B8000866811438E4386604668314341600199AF +:106B90000B43181C614608431043011C00220220CD +:106BA000C7F73C003814040003FA1E4E403E7078CC +:106BB000C008C00028437070701C017800E029E014 +:106BC0000825A94301700120C043B08000210120A5 +:106BD000CFF76CFC301C8030817809090901817085 +:106BE0000F2101703C0074140400164A69041160FE +:106BF0005160029E1021327A7B6A002B00D1002165 +:106C000011432173817829438170E0780121084381 +:106C1000E070D2F7F2F9012000900098FEBDC05755 +:106C200001006C4301003C00B0140400A46C01009E +:106C300040900700C91D0000811D0000A51D000037 +:106C4000991D0000F11D0000100007000010070052 +:106C50000349002088620870487008710862704714 +:106C6000AC7E010080B501213C00EC140400002042 +:106C7000CDF769FF80BDB0B50F48C0F718FC0E4DC9 +:106C8000032028700D490D480C3948600D480A4C06 +:106C9000886040211834201CBEF7C1FFFF216868BE +:106CA000090608432060FF2106223C002815040045 +:106CB000201DBFF779F80120E060B0BDC0A8130A1D +:106CC000206E0100C0A81301FFFFFF0080B502493C +:106CD0000120C8F745FF80BD9D1C000098B50C4CF5 +:106CE00000206060E0600B4B0B4982003C006415A3 +:106CF0000400013020289950FADB6A460949052032 +:106D0000BFF72FFD0020C043206006492020086007 +:106D1000486098BD00000040070030740100A9756C +:106D20000000B59F000000100700054900203C004E +:106D3000A0150400086005488178282291438170DD +:106D40008178114381707047786E01000000070060 +:106D500070470000414810B50068022188433F4950 +:106D60000860081C0068022108433C4908603C4850 +:106D70003C00DC1504004068802188433A494860A3 +:106D8000081C006880210843374908603748017AA9 +:106D9000012421430172017A022211430172017A16 +:106DA000042291430172017A082211430172017B8E +:106DB00021433C00181604000173017B0222114399 +:106DC0000173017B042211430173017B08221143EB +:106DD00001732E214173817B3822914328318173C5 +:106DE00020214174817BC908C900033181732221AC +:106DF000C17320493C0054160400097A41721E49AF +:106E0000497A01743C220277011C10314A735023E5 +:106E10008B735A23CB730D23011C20310B70174B3E +:106E200043840E234B7000214182302101700521E3 +:106E30004170042141713C00901604008471C471BA +:106E40000C210171F82141800F49CA728A72032214 +:106E50000A7209224A7208220A73027A40231A43EC +:106E600002724C73FFF7A2FC0848017821430170BD +:106E700010BD0000F00007003C00CC160400F40038 +:106E800007000C800700764601002409000080807E +:106E90000700A080070080B518210948BEF7D7FE7B +:106EA000084800213C3841608160C1600161416156 +:106EB000816101210162FFF75CFF3C0008170400BB +:106EC000C0F76CFF80BD0000247E0100B0B52148F2 +:106ED000006840081F4940000860081C0068012144 +:106EE00008431C4908601C4A1079012108431071AD +:106EF000107902218843107100F06CF83C004417AF +:106F00000400107A012108431072107AFE21884390 +:106F10000A301072282090725A20D072114D14201D +:106F200028772C1C1034A0731620A8751820E8753B +:106F3000FFF7A1FC0C486886E07B4006400E3C0051 +:106F4000801704000E210843E073E07B8021084392 +:106F5000E07307484179042211434171B0BD00003C +:106F6000F00007000080070030800700FF010000EC +:106F70005000070080B5FFF7AFFF00201449C04361 +:106F80003C00BC1704008860C1F70BF913490020CE +:106F90004862C860486108618861C8610F4B086237 +:106FA0000F4A086338331A8001225A710B4A403263 +:106FB000D0601360082313815060094A8A62FF225F +:106FC0000A703C00F81704004870054800210022B0 +:106FD000503000230EC0C1F7FFF880BD003007001D +:106FE000046C0100BEBA0000857500000348102142 +:106FF00081710221C1713021417270470080070008 +:10700000704700003C003418040000B5C1F7DBFBFA +:1070100000BD7047000080B5CDF787FD014988604D +:1070200080BD50D9010080B506210548BEF7FDFDA1 +:10703000044900200439086000F067F800F003F804 +:1070400080BDEC6701003C007018040010B5074CCF +:107050002C21201CBEF710FE0120207003490020C7 +:107060001C39C8600861886110BD000078690100A2 +:1070700080B5CDF75DFD0949886009490820D0F742 +:1070800073FD08490920D0F73C00AC1804006FFDDF +:1070900007491120D0F76BFD0648C2F774F980BD8F +:1070A00000007869010021350000A1380000453456 +:1070B0000000BD26010080B586B00F48C4F745F931 +:1070C00000F045F8FFF7D7FFFFF73C00E818040091 +:1070D000ABFF0C490320D0F74DFD0B4869460090EB +:1070E0000020019009480490094802900948039043 +:1070F000094805900020C4F7CFF806B080BD000015 +:10710000F467010045350000953200003C00241969 +:107110000400A07D0100FD320000CD310000457D5E +:10712000010010B5CDF7D5FC0948094C302160614C +:1071300008487430BEF7A9FD0020A062064920610E +:10714000E1636064A06414212165606210BD3C00AD +:1071500060190400B9750000447D0100701700003B +:1071600080B502210920044AD1F7E8FECDF7ECFCF6 +:107170000249086380BD000039390000447D0100E8 +:1071800080B5AC210348BEF783FD00F051F800F054 +:107190003C009C19040049F880BDA46C010008B5AE +:1071A00000F04DF800F045F800211620184AD1F7FC +:1071B000C8FE174A0421101C403001700021817064 +:1071C0001121C18014490181101C8030C17808222E +:1071D00091433C00D8190400C170C1781143C170BB +:1071E0006A460F491420BFF7F5FA0E490720D0F779 +:1071F000CDFC0D490F20D0F7C9FCCDF7ABFC0B49F6 +:1072000008600A4844388068002802D00020C6F789 +:107210006FF908BD3C00141A0400B53B0000009053 +:107220000700E7FD00008D410000CD480000D9496E +:107230000000A46C010080B500F06FFC80BD7047B9 +:10724000000080B500F061FC80BD70470000B0B563 +:1072500030210C48BEF73C00501A040025FD0B4CB1 +:1072600000250A48843C3822032170386560BEF747 +:10727000DDFD0648382201213838BEF7D7FD0E2043 +:10728000A5606070207000F01DF8B0BD946701002B +:10729000044900B5012048603C008C1A0400886055 +:1072A000C860C3F7F8FF00BD0000D467010080B5D7 +:1072B00002210A20024AD1F750FE80BD00001D5A6B +:1072C000000080B500F005F880BD80B500F0FDFB42 +:1072D00080BD80B502490420D0F73C00C81A0400E4 +:1072E00061FC80BD651F000000211748C94380B5BF +:1072F000164B0170181C102220300271002210332E +:107300009A73427904231A434271427918239A43AB +:1073100008324271081CD7F759F800283C00041BBA +:10732000040003D101219A20BFF7CBFB502009496B +:1073300050220A60C8608860486008610120486186 +:107340000020D7F7D8F80449FF20086080BDF46B0F +:1073500001003000070004020700F47401003C0043 +:10736000401B040080B5D7F7FBF880BD10B5FFF7D0 +:10737000ABFBBFF7DDFB8148CDF798FA0024231C57 +:1073800004220421002001F039FA002801D0BFF7BF +:10739000C9FB231C0022FF21002001F02FFA002846 +:1073A0003C007C1B040001D0BFF7BFFB231C002264 +:1073B000FF21002001F025FA002801D0BFF7B5FB1E +:1073C000C4F727FF704884706F497F2088706E492A +:1073D0000C60032008606B4844706C480480694866 +:1073E000C0783C00B81B0400082108436749C870F6 +:1073F000081CC078042108436449C87001F07EFA73 +:10740000FFF77EFFFFF72CFE01F046FBFFF718FBAE +:1074100001F052FAFFF782FB5F48C16810229143E6 +:10742000C16001693C00F41B04005D4A1143016125 +:107430000169D20A91430161C1685A4A1143C1608E +:10744000816A594A1143816200F077F901F01FF80F +:1074500000F093FA01F099FB00F0F1FF00F099FCC5 +:1074600000F0DDFC00F03C00301C040083FCFFF762 +:10747000B3FC01F031FA01F071FAFFF787FAFFF778 +:107480009BFA012101204B4AD1F77CFD012102200A +:10749000494AD1F777FD02210320484AD1F772FD0E +:1074A00002210420464AD1F73C006C1C04006DFD0B +:1074B00002210520454AD1F768FD02210620434AF2 +:1074C000D1F763FD01210720424AD1F75EFD022179 +:1074D0001720404AD1F759FD022108203F4AD1F731 +:1074E00054FDFFF7C8FD3D4804603C00A81C0400A3 +:1074F0004460FFF717FAFFF709FAFFF74FFC00F0B7 +:1075000043F9FFF733FAFFF7FBFA01F085F801F0D2 +:10751000EBF901F023FA01F071F900F0E3FFFFF756 +:107520006FFA00F0AFF900F0BDF900F03C00E41C88 +:107530000400ADFC00F09BFEFFF7CDFAFFF7ABFEB9 +:1075400000F0C3F9FFF7ABFD00F08DFF00F021FF65 +:1075500000F065F900F097F900F0FDFE00F0E5FE9F +:1075600000F03FF900F073F9FFF737FE00F03C0040 +:10757000201D040021F900F073FBFFF7E5FB00F08C +:10758000D3FBFFF7A9FE00F0BBFB00F009FF00F002 +:10759000DBF91848C9F756F81748C9F72BF8002245 +:1075A0000121F020D1F72EFD002010BDA9690000B7 +:1075B0003C005C1D040000000700F00007002C00E8 +:1075C0000700001007003C000800C03F7438FCDFD3 +:1075D0007F3855690000E5130000610C00006D0C58 +:1075E00000003D0C0000F10D0000C53300003D0F10 +:1075F00000003C00981D0400ADD80000800007008A +:10760000505701000440010080B501F0A9F900F0D5 +:10761000C9F8FFF7C5FE01F003FB01F093FAFFF78D +:10762000CBF92C48FFF7E8F900F0AAF800F058FF72 +:10763000FFF734FD3C00D41D0400FFF7F2FBFFF719 +:107640007AFAFFF700FA00F034F900F03CF901F0A3 +:10765000E2F8FFF77AF9FFF772F9FFF79AF901F00C +:1076600066F901F08EF901F0E0F800F006FF00F095 +:10767000F0FB00F046FB3C00101E040000F0BCFFD5 +:1076800000F0E4FC00F020FEFFF740FAFFF746FEB2 +:10769000FFF756FD00F02CF900F0FAFE00F08AFE2C +:1076A00000F0D4F800F0B4F800F078FE00F04EFEE0 +:1076B00000F0DEF8FFF7ACFD3C004C1E040000F0CB +:1076C0008CF800F0F8FAFFF776FBFFF720FE01F0E8 +:1076D000A6FA00F048FB00F07CFE00F05CF9BEF773 +:1076E00057FD002080BD803801000149002008605E +:1076F0007047A87E010010B5041C3C00881E0400E1 +:1077000001D1BFF739FA0F487D21C900846001809B +:107710000D490161802141800021C16001620B4857 +:1077200041801421818007214181064A4623043289 +:107730000524137054700A21917081763C00C41E98 +:1077400004000376048110BD0000C87401000087A6 +:10775000930330000700094880B50169426911436D +:107760008269C0691143014300220320C6F7BFFCB0 +:10777000CCF71BFA0020C2F792F980BD00003C0054 +:10778000001F0400A46C0100054880B50021816041 +:107790000221C16003394160C7F73AFF80BD000094 +:1077A0004020070008B56A4604491520BFF754F881 +:1077B0000120034940050860486008BDA52101007B +:1077C0003C003C1F04000010070070470000064802 +:1077D00080B58068C001800F05D10322C143C6F780 +:1077E000BAFCD6F700FE80BD00001000070070470D +:1077F000000080B502212A20064AD1F7EAFB0022C8 +:1078000007203C00781F04000449BEF7EDFE044841 +:10781000C7F758FC80BD00008D890000D59B000093 +:107820001046010002480021002200230EC07047CC +:10783000806E010080B502212C20064AD1F7CCFBD6 +:10784000002200203C00B41F04000449BEF7CFFE14 +:1078500004490220C8F70BFA80BD058A0000E99BA5 +:107860000000B18B000002480021002200230EC05E +:1078700070471075010080B502212B20044AD1F712 +:10788000AEFB002202203C00F01F04000249BEF7BC +:10789000B1FE80BD2D8A00008D8C00007047000075 +:1078A00080B502212D20074AD1F79CFB0022012040 +:1078B0000549BEF79FFE0548CBF756FA0448CCF7BA +:1078C000F7F880BDAD8A00003C002C20040021E2C6 +:1078D0000000F9DF00002044010070470000024969 +:1078E00000200860012048607047AC79010080B535 +:1078F00002490D20D0F79BF980BD619800007047C8 +:10790000000080B5CDF777F903493C0068200400FA +:107910000860011C0248CDF797F980BDA8790100E5 +:10792000C460010080B500F029F880BD80B586B044 +:107930000C48C3F76DFDD6F7D3FB0B480D490090FB +:107940000A48049101900A48694602903C00A4202C +:1079500004000020039005900120C3F700FD0749B3 +:107960000320D0F76AF906B080BD20F70100118727 +:107970000100958701005587010098D901006D87A6 +:10798000010080B50120D6F790FC034900203C009F +:10799000E02004000860486002481439486080BD57 +:1079A00090D901003D82010070B50026094C094DB7 +:1079B0002660666044215035281CA661BEF7C8F9D0 +:1079C0001420E060E8632820E861A06028642E703D +:1079D0003C001C21040070BD0000A46E010080B5B5 +:1079E00002211820044AD1F70CFB03490820D0F7E4 +:1079F0002AF980BD0000159C0000699C0000FEB5BE +:107A0000264D2878C0070CD425490020087028701E +:107A100024483C00582104008178490849008170BD +:107A200081780122114381700024FF261F4F013607 +:107A3000211C01A8C6F732F800AB187901281FD025 +:107A4000022819D003281ED1B8680021B043B860BD +:107A5000786830433C009421040078603A683240F2 +:107A6000A02005E03B683340934201D0012101E0B2 +:107A70000138F7D27868B0437860002903D001A8B4 +:107A800000F027FF02E001A800F045FF01342406C2 +:107A90002416062CCFDB3C00D0210400044902222E +:107AA0000878104308702870FEBD0000040007002D +:107AB000E06001000000070010000700B0B50020E2 +:107AC00015231449012542008D54521801300E2807 +:107AD0005370F8D30F481C223C000C2204001C38C1 +:107AE000BEF773F90D480E212A38BEF71CF90B4971 +:107AF000002008600B4C2A21201CBEF714F92570C9 +:107B00000E2060701720A070074853210170452196 +:107B1000417020218170B0BD00003C00482204006B +:107B2000E6780100E4620100EB620100E862010016 +:107B30000C490D48002241600C4981600C49C1602C +:107B40000C4901610C4941610C498261C1610C49D8 +:107B500001620C4941620C4981620C493C0084225B +:107B60000400C162C26370470000C9750000287A32 +:107B70000100C17500008175000099750000CD7588 +:107B800000008975000091750000B57500008D75C5 +:107B90000000C5750000B0B50E480E4908603C00F5 +:107BA000C02204000831C0F743FE0C49002548609C +:107BB0000B480A4C05600B48803C05601020207182 +:107BC000E070A07160712720C043C3F7F7FB282045 +:107BD000C3F7FCFB2572B0BDFF3F00002C7D010008 +:107BE0003C00FC2204001C6701002067010080B5F6 +:107BF0002C210148BEF7C7F880BD3C7E010080B54E +:107C000038210148BEF7BFF880BD687E010080B50D +:107C100002210E20024AD1F70CFA80BD000021E0BB +:107C200000003C003823040070470000F0B585B028 +:107C3000002700AB2F4E1F8100250024281CD6F7FB +:107C4000A1FB022D03D1D6F7F5FA00280CD00124B0 +:107C5000012D03D1072000AB187101E000AB1F71AB +:107C600000AB18793C0074230400D6F708FC002C04 +:107C700039D0082103A8D6F7F2FA00AB187BFE280A +:107C800031D1587B01282AD1022102A8D6F7E7FA80 +:107C900000AB1889002826D018891849884222D0BC +:107CA00019890020BFF73C00B023040013F9041C1D +:107CB000006900AB1989D6F7D5FA206800AB1A899C +:107CC000011C0831083ACBF7A1F9002806D0022898 +:107CD00004D0022194203760BEF762FF201CBFF75A +:107CE000C7F8D4E7012194203C00EC230400BEF740 +:107CF0005AFFD5F726FF01352D062D0E042DA5D3ED +:107D000005B0F0BD000058570100FFFF00000A4811 +:107D10000021021C183280B5094B02E0016083800B +:107D200008308242FAD104486C213C002824040027 +:107D30006C38BEF737F804490220C7F7D1FF80BD81 +:107D40007C790100FC0500009D75000080B50221D2 +:107D500026200D4AD1F77CF90C48C8F773FF0C4870 +:107D6000C8F776FF0B491020CFF794FF3C0064243E +:107D700004000A490C20CFF790FF09490020C7F7FB +:107D8000B2FFCCF76EFF0749086080BD00009DA6DA +:107D90000000A9A4000081A4000031A70000B96D73 +:107DA0000000BDA600000C790100024908783C00E3 +:107DB000A0240400400840000870704758000700E5 +:107DC0000021084880B541618161017041704160C6 +:107DD00081601422C26001614262C161FFF704F850 +:107DE00080BD00001C75010080B502211D20044AE1 +:107DF0003C00DC240400D1F734F903490820CFF714 +:107E000052FF80BD000011E3000009E4000080B5CE +:107E1000012125200A4AD1F724F9CCF728FF084987 +:107E2000086208490120CFF73EFF07490220CFF73B +:107E30003AFF3C0018250400FEF7E6FF0548C1F7AD +:107E4000E1F980BD29A900001C750100A1AA00006C +:107E50002D19000045A8000010B5064C0C22227018 +:107E6000A0180549BDF7D8FF0020C8F785FB012001 +:107E7000A06010BD3C0054250400A4690100905787 +:107E80000100B0B51F4C00256580012020700A203C +:107E9000A0809020E08030202081902060813020E0 +:107EA000A0811748042207211230BEF74CF814486D +:107EB0000422052116303C0090250400BEF746F848 +:107EC0001248114AE08120827032157055700020EE +:107ED0003C23410143438918F4319B1801300428A5 +:107EE0005960F5DB084806221A300949BDF79AFFA8 +:107EF0000748054C0C300FC83C00CC25040020344A +:107F00000FC42021201CBDF762FFB0BD0000F86047 +:107F100001002C090000584001007047000007488C +:107F200010B50068002808D00648BEF79CFE041C67 +:107F3000FFF79DFE201CBEF796FE3C0008260400BD +:107F400010BD000058570100B5AD0000044980B5D0 +:107F50000020887002212020024AD1F791F880BDCC +:107F6000B479010025B5000080B5CCF78FFE01493A +:107F7000486180BDB479010080B518213C004426D9 +:107F800004001448BDF729FF1448012101700021A5 +:107F9000C1604170016100F002F900F0AAF800F040 +:107FA0001EF800F0BAF900F0CCF900F020F900F06A +:107FB00064F900F0CEF900F0FCF800F082F93C0022 +:107FC0008026040000F028F800F06EF800F04AF86F +:107FD000FFF7C2FF00F072F980BD0000407C010095 +:107FE00018630100B0B5084C0025084825772060CB +:107FF000CEF7F0FD0020E562D0F7D0FA211F08800F +:108000003C00BC260400D0F76CFBB0BD0000D47966 +:1080100001009575000080B5CCF7C1FC80BD054915 +:1080200080B500200870487003480449034A0830AE +:10803000CCF727FE80BD2C630100EDBC00004DBDD8 +:1080400000003C00F826040080B5CCF72BFE054963 +:108050004860011C0448CCF74BFE04490320CFF7CD +:108060003DFE80BD2C630100C4600100C1BC000066 +:1080700004480021002200230EC008C00249103825 +:10808000016070473C0034270400047A01001CE6BC +:10809000010080B5CCF709FE0549054A4860022178 +:1080A0002420D0F7FCFF0348C9F76BFD80BD047A9C +:1080B000010069BE000071EB000010B5044C1421F2 +:1080C000201CBDF796FE3C0070270400024820608B +:1080D00010BD0000147A0100ECE5010080B5CCF77A +:1080E000E7FD0749074A486002211F20D0F7DAFF61 +:1080F00005490120086005490C20CFF7F5FD80BD3A +:10810000147A0100D5BF00003C00AC270400805A5F +:10811000010085FF000080B5FFF74FFD0121212000 +:10812000024AD0F7C2FF80BD0000C9C1000080B57F +:10813000CCF7C1FD02490863C9F757FD80BD287A15 +:10814000010010B5CCF7B7FD164C3C00E827040041 +:108150002061CCF7B3FD60611448154908601649E9 +:1081600014480860CCF7AAFD1449086000F034F800 +:10817000FFF7E0FFFFF75EFF00F004F900F08EF874 +:10818000FFF76EFFFFF7B0FFFFF78CFF3C002428DE +:108190000400FFF704FF00F0AAF80A48BFF7BDFF8C +:1081A000C9F7BBFD09490020CFF7A7FD10BD407CF2 +:1081B00001007DB70000187E0100BDB800001C7EE4 +:1081C0000100207E0100B9BA0000812401003C00BA +:1081D0006028040080B538210148BDF719FE80BD34 +:1081E000905C010070470000B0B50C4C0B4D0020B6 +:1081F0000C3460602560E0600A202081281CC8F7EC +:108200003FFD281CC8F73AFD083D68600448C9F7DF +:108210003C009C2804001BFD201CC0F76EFA28803F +:10822000B0BDB87A0100D5330100F8B51F4E1D4C22 +:1082300000200C2141438200013009190831000659 +:10824000000E0428B150F4D318480C383061CEF732 +:10825000F4F93C00D8280400144CA078000900016F +:10826000A0700027E77067700024A50070590770A0 +:10827000201CBEF753F9715908710021201CCEF75C +:108280007DF901342406240E042CEED3074C20780B +:10829000000900013C00142904000A3020702078F5 +:1082A000F021884330302070A0780F210843A0705F +:1082B000F8BD00500700107B010080B5CCF79FFB94 +:1082C00080BDB0B50C4C0B4D00200C3460602560B7 +:1082D000E0600A2020813C0050290400281CC8F7D7 +:1082E000E1FC281CC8F7D4FC083D6860201CC0F7DE +:1082F0000DFA28800248C9F79BFCB0BD2C7B010019 +:108300004900010080B5CAF72FF880BD7047000012 +:10831000B0B5124D3C21281C3C008C290400BDF74F +:1083200086FD0F4828213C30BDF781FD0D48002116 +:1083300014380161C160FF21017041700A490A4A85 +:10834000416001210C20D0F7C8FE2C1C30340C3DBC +:108350000020D0F74AF920800C3C3C00C8290400DA +:10836000AC42F8D1B0BD0000607B010020A1070045 +:1083700035CD0000084900200C22424352181071EC +:1083800001300528F8DB04480021083801704160FD +:10839000FF21417070470000747A01003C00042AFC +:1083A000040080B578210148BDF747FD80BDC47B3E +:1083B000010080B5CAF797FA80BD7047000010B57C +:1083C0000B4CFF210531201CBDF737FD0948F0217A +:1083D0000851201C4030C5F78EF96C2106483C003E +:1083E000402A0400BDF72CFD0448C0216C30BDF7C5 +:1083F00027FD10BDC4690100B0D90100C86A0100A1 +:10840000B0B50B4D00241C20604340196C30C3F7FD +:108410000FFE0134042CF6DBCCF76EFCA863C7F723 +:108420003C007C2A040075F90448C9F71CFC034889 +:10843000CFF703FAB0BDC4690100FD800000E1225E +:10844000010010B5054C00202080034806210830AB +:10845000BDF7D5FC1420606010BD987C010010B5FC +:10846000084C3C00B82A04000020208060800648A8 +:1084700006210C30BDF7C6FC034806211230BDF7BB +:10848000C1FC1420A06010BD587C010070470000A2 +:1084900080B502210D20054AD0F72EFE0448C8F70A +:1084A0001FFC04483C00F42A0400CAF744FC80BDC9 +:1084B000000031D4000051B1000009B100000849AA +:1084C00080B500200860FFF7D0FFFFF7C0FFFFF77F +:1084D00004FC00F04AF8FFF70AFC00F03CF880BD0D +:1084E0000000E46501003C00302B040080B500F082 +:1084F00029F800F01BF800F051F800F031F880BDC9 +:10850000704700007047000080B5FF2189310248A4 +:10851000BDF7A2FC80BD0000DC71010080B50249FE +:108520000820CFF711FC80BD3C006C2B040059D90A +:10853000000080B50348CFF74CF90249488080BD60 +:1085400000008D1F0000987C010080B50348CFF724 +:1085500040F90249888080BD0000D5230000587C86 +:1085600001007047000080B502483C00A82B0400C1 +:10857000CAF7E4FB80BD000071E0000080B5CCF7D5 +:10858000A5FB02210F20064AD0F7C2FD14210548A1 +:10859000BDF768FC034878211430BDF763FC80BD4B +:1085A00035E200008466010080B5CCF73C00E42B86 +:1085B0000400B7FB0549086105490E20CFF7CDFB44 +:1085C00004490820CFF7C9FB80BDEC65010001021A +:1085D0000100C12E0000014900200870704740D9F9 +:1085E00001007047000001490020087070473C00FE +:1085F000202C0400A079010080B50748C8F7F2FFDD +:10860000064948600648C0F707FB0648C0F786FBE6 +:108610000548C9F7A3FA80BDA9E40000A0790100CC +:10862000B9E40000852E000081E40000074880B511 +:108630003C005C2C04000021002200230EC008C076 +:108640001038C821016000210C38024ACCF761FBC8 +:1086500080BDD0600100FDE5000080B5CCF767FB70 +:1086600004490860011C02480430CCF786FB80BD39 +:1086700000003C00982C0400C0600100094880B54F +:108680000A21017041700849084A81600021C160D7 +:10869000527982700161416128211830BDF7EEFBEB +:1086A00080BD00007C780100A08601000C5A01000A +:1086B000F8B50F493C00D42C04000F480D884F88B2 +:1086C00006790024301B684368230C49584341183D +:1086D0007D20C000BDF70FFD6100094AA64250523F +:1086E00000D13D1C01342406240E102CEAD3054988 +:1086F00001200861F8BD3C00102D0400F65901006E +:108700000C5A010034440F00125A01007C78010019 +:1087100080B500F0E7FA02490120086180BD000041 +:108720007C78010010B5041C081C0F494979002908 +:1087300001D10E4B00E00E4B3C004C2D0400002CF0 +:1087400007D0042111800A1C0124191CBDF7CDFBA0 +:108750000AE00124011C181C1288BDF7C6FB00F0BA +:10876000C4FA054901200861201C10BD00000C5A04 +:108770000100FE590100FA5901003C00882D040057 +:108780007C7801000D488CB5C18800AB0C4A9980FB +:1087900001890420D980188002211320D0F7D0FC51 +:1087A00000F0A6FA074901200861FFF78DFF6A462D +:1087B00001A90020FFF7BCFF8CBD00003C00C42DC8 +:1087C0000400F459010095F900007C780100F8B527 +:1087D000134E0125B5700520F070114910480EC9DF +:1087E0002C300EC0002070610F480F49104F00243C +:1087F0004860A0003958201CD1F7D7F801343C005C +:10880000002E0400102CF7D3064C0B4A2034201CF9 +:108810000A49B560CCF792FACCF79EFA3061206035 +:10882000F8BD000064730100B05801000418020094 +:1088300060000700D444010045FA000071FA00000E +:108840003C003C2E04000C4930B50023CC560B4BA9 +:108850000020F0251A5C1107090F09190F2901DD05 +:108860000F2102E0002900DA00212A405118195492 +:1088700001300E28EEDB30BD000064730100C058EB +:1088800001003C00782E0400B0B50D1C002808D073 +:10889000012414800520CCF7B5F88003C00F2870A0 +:1088A00007E028780122410452040520D0F7AEFDEC +:1088B0000124201CB0BD000098B5054C6068CCF7C1 +:1088C000F5FD00903C00B42E040000AB1888E08059 +:1088D000CEF7FBFF98BDA058010038B5031C081C5B +:1088E0000024002B174D07D00E2111800A1C0124F3 +:1088F000291CBDF70CFB22E01188042917D1011CAB +:1089000068461288BDF73C00F02E040003FB009877 +:10891000002801DB323000E032380090011C642076 +:10892000BDF798FB0106091600900E22281CBDF722 +:1089300085FB06E00E2905D10A1C011C281CBDF789 +:10894000E9FA0124201C38BD3C002C2F0400DA5920 +:10895000010038B5031C081C0024002B174D07D05C +:108960000E2111800A1C0124291CBDF7D6FA22E031 +:108970001188042917D1011C68461288BDF7CDFA69 +:108980000098002801DB323000E03C00682F040032 +:1089900032380090011C6420BDF762FB0106091605 +:1089A00000900E22281CBDF74FFB06E00E2905D1D2 +:1089B0000A1C011C281CBDF7B3FA0124201C38BD79 +:1089C000CC590100034880B5017800203C00A42F59 +:1089D0000400CCF7B4FB80BD0000A658010070472E +:1089E00000000249032008700020487070479C7303 +:1089F000010080B502211120024AD0F7BCFB80BDE6 +:108A00000000A1FE0000F0B50B4F1C1C00233C0031 +:108A1000E02F0400FD562B1C062D01D10120F0BDD6 +:108A2000064E051CD80034363554801941708270CA +:108A30004460581C38700020F0BD0000985A0100B6 +:108A400010B5041C0C4800F021F96078FF2804D010 +:108A50003C001C3004000123E056062100F0CDF854 +:108A6000084A012110780843074908702023184359 +:108A70000870802318431070087010BD0000919B8F +:108A80000000E06001000400070010B50A49041C62 +:108A900008783C005830040040084000087008493D +:108AA0000870084800F0F8F86078FF2804D0012327 +:108AB000E056052100F0A4F810BD0000E0600100C0 +:108AC00004000700919B00000348002100220023BE +:108AD0000EC008C03C009430040070470000E860FD +:108AE00001007047000010B5074C00206060208036 +:108AF000E06002211420044AD0F749FB02481030FC +:108B0000A06010BD000058750100051D01007047F0 +:108B1000000010B548213C00D03004000A48BDF7E1 +:108B2000E3F9094CE0214834201CBDF7DDF90020B1 +:108B3000C10009190A1C083201301B284A60F7D30A +:108B400001480438046010BD685B010080B5022153 +:108B50002320024AD0F71EFB3C000C31040080BDEC +:108B600000004523010080B5FFF76BF880BD70471A +:108B70000000F8B501201D49C00748601D49FF20CD +:108B800008731C4E10203060050135601B4C80219D +:108B9000201CBDF7ACF90021194A3C004831040003 +:108BA000154F00200B011B195A60CB00DB191874FC +:108BB00001310829F6DB0F4CFA212180124961802E +:108BC000A0606A4611490420BDF730FF6A4610498B +:108BD0000820BDF72BFF1020706075603C008431C9 +:108BE000040060680221084360600B49064A081CC3 +:108BF0001030083A03C2F8BD000000010700006011 +:108C0000070000100700AC730100D1750000204E72 +:108C10000000052C0100112C010000A007003C0001 +:108C2000C031040070B50E1C0024C4F75BFE0028A0 +:108C30003BD04568FF2D38D00C2E28D201A39B5D78 +:108C40005B009F440507090B0D101316181B1E210E +:108C5000182420E030241EE060241CE0C0241AE028 +:108C60003C00FC310400FF24813417E00924A401F6 +:108C700014E00924E40111E00F4C0FE00924240260 +:108C80000CE00924640209E00324E40206E009245C +:108C9000A40203E009219E20BEF739F86000001904 +:108CA00040083C0038320400054980044018054A59 +:108CB000A900891848606420604370BDDC0700008B +:108CC0008038010004000700024980B50860D0F731 +:108CD00097F880BD5C5B0100F8B50026174C174B78 +:108CE000194926703C0074320400002014330D88AA +:108CF000154E154A04E0C100CF187A605E5001306D +:108D0000A842F8DBC6F72BFDFF21114DA531281C29 +:108D1000BDF7FFF80021281C021C1432C260101C91 +:108D200001311429F8DB3C00B03204000026C66093 +:108D300005480C3060C009481821BDF7EDF8012046 +:108D4000043441C40020F8BD705D010009A000009A +:108D500030D9010056570100045F0100A8600100EE +:108D600080B50020CFF7B6FC3C00EC32040001498E +:108D7000088080BD00002C7401001148F8B54179CD +:108D8000002902D105780F4E01E045780F4E0223ED +:108D9000F75E0024601B784364230C495843411854 +:108DA0007D20C000BDF7F5F961003C0028330400C8 +:108DB000094AAC42505201D10023F75E0134240627 +:108DC000240E102CE9D3F8BD0C5A0100FE59010005 +:108DD000FA59010034440F00325A010038B5104CE2 +:108DE000BE252573207A1821884320723C00643305 +:108DF00004006A460D490D20BDF733FE01200B49E2 +:108E000040030860486025732D20C003206025734F +:108E1000207A102108432072064806490860002085 +:108E2000486038BD0000000307008D3E01002400AB +:108E3000A0330400001007000087930304790100A9 +:108E400080B502211520024AD0F7C8F980BD000084 +:108E50000D3E010070470000040000600400440063 +:108E60000000040040200700FFFFFFFF4D656D6F0D +:108E7000727920636865636B2E2E2E00204F4B0A9B +:108E800000000000204641494C0A000057726974F6 +:108E9000696E67206669726D7761726520646174BE +:108EA0006120746F20666C6173680A005665726990 +:108EB0006679696E67206669726D77617265206494 +:108EC0006174610A00000000566572696679206667 +:108ED00061696C6564206174206279746520256421 +:108EE0002C2030782530327820213D2030782530F4 +:108EF00032780A004669726D776172652073756316 +:108F00006365737366756C6C792073746F726564D6 +:108F100020696E20666C617368210A0005000600F6 +:108F200000000001000001480000000B0000014C9F +:108F300000000009000001780000000F0000019C03 +:108F400000000001000001D800000001000001DC69 +:108F50000000000100000108000000010000010CF9 +:108F600000000001000001100000000100000114D9 +:108F70000000000100000118000000010000011CB9 +:108F80000000000100000120000000010000012499 +:108F9000000000030000012800000001000001346F +:108FA0000000000100000138000000010000013C49 +:108FB0000000000100000140000000010000014429 +:040000058000000077 +:00000001FF diff --git a/libraries/WiFi/extras/binary/wifi_dnld_2_1.elf b/libraries/WiFi/extras/binary/wifi_dnld_2_1.elf new file mode 100644 index 000000000..7ccbf4d3d Binary files /dev/null and b/libraries/WiFi/extras/binary/wifi_dnld_2_1.elf differ diff --git a/libraries/WiFi/extras/scripts/ArduinoWifiShield_upgrade.sh b/libraries/WiFi/extras/scripts/ArduinoWifiShield_upgrade.sh new file mode 100755 index 000000000..b767d769b --- /dev/null +++ b/libraries/WiFi/extras/scripts/ArduinoWifiShield_upgrade.sh @@ -0,0 +1,121 @@ +#!/bin/sh + +#WIFI_FW_PATH="/hardware/arduino/firmwares/wifishield/binary" +WIFI_FW_PATH="/libraries/WiFi/extras/binary" +AVR_TOOLS_PATH="/hardware/tools/avr/bin" + +TARGET_MICRO="at32uc3a1256" + + +progname=$0 + +usage () { +cat <&2 + usage + exit 1 + ;; + :) + echo "Option -$OPTARG requires an argument." >&2 + exit 1 + ;; + esac + done +else + echo "Please retry running the script as root.\n" +fi + +shift $(($OPTIND - 1)) diff --git a/libraries/WiFi/extras/wifiHD/.cproject b/libraries/WiFi/extras/wifiHD/.cproject new file mode 100644 index 000000000..fa7fcdd69 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/.cproject @@ -0,0 +1,4045 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libraries/WiFi/extras/wifiHD/.project b/libraries/WiFi/extras/wifiHD/.project new file mode 100644 index 000000000..c284bab1b --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/.project @@ -0,0 +1,77 @@ + + + wifiHD + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + ?name? + + + + org.eclipse.cdt.make.core.append_environment + true + + + org.eclipse.cdt.make.core.buildArguments + + + + org.eclipse.cdt.make.core.buildCommand + make + + + org.eclipse.cdt.make.core.buildLocation + ${workspace_loc:/wifiHD/Debug} + + + org.eclipse.cdt.make.core.contents + org.eclipse.cdt.make.core.activeConfigSettings + + + org.eclipse.cdt.make.core.enableAutoBuild + false + + + org.eclipse.cdt.make.core.enableCleanBuild + true + + + org.eclipse.cdt.make.core.enableFullBuild + true + + + org.eclipse.cdt.make.core.stopOnError + true + + + org.eclipse.cdt.make.core.useDefaultBuildCmd + true + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + + + + + + com.atmel.avr32.core.nature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + UC3 Software Framework + 2 + framework:/com.atmel.avr32.sf.uc3 + + + diff --git a/libraries/WiFi/extras/wifiHD/Release/wifiHD.elf b/libraries/WiFi/extras/wifiHD/Release/wifiHD.elf new file mode 100644 index 000000000..d4a8bde55 Binary files /dev/null and b/libraries/WiFi/extras/wifiHD/Release/wifiHD.elf differ diff --git a/libraries/WiFi/extras/wifiHD/Release/wifiHD.hex b/libraries/WiFi/extras/wifiHD/Release/wifiHD.hex new file mode 100644 index 000000000..0122587ff --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/Release/wifiHD.hex @@ -0,0 +1,16358 @@ +:0200000480007A +:10000000E08F100000000000000000000000000071 +:1000100000000000000000000000000000000000E0 +:1000200000000000000000000000000000000000D0 +:1000300000000000000000000000000000000000C0 +:1000400000000000000000000000000000000000B0 +:1000500000000000000000000000000000000000A0 +:100060000000000000000000000000000000000090 +:100070000000000000000000000000000000000080 +:100080000000000000000000000000000000000070 +:100090000000000000000000000000000000000060 +:1000A0000000000000000000000000000000000050 +:1000B0000000000000000000000000000000000040 +:1000C0000000000000000000000000000000000030 +:1000D0000000000000000000000000000000000020 +:1000E0000000000000000000000000000000000010 +:1000F0000000000000000000000000000000000000 +:1001000000000000000000000000000000000000EF +:1001100000000000000000000000000000000000DF +:1001200000000000000000000000000000000000CF +:1001300000000000000000000000000000000000BF +:1001400000000000000000000000000000000000AF +:10015000000000000000000000000000000000009F +:10016000000000000000000000000000000000008F +:10017000000000000000000000000000000000007F +:10018000000000000000000000000000000000006F +:10019000000000000000000000000000000000005F +:1001A000000000000000000000000000000000004F +:1001B000000000000000000000000000000000003F +:1001C000000000000000000000000000000000002F +:1001D000000000000000000000000000000000001F +:1001E000000000000000000000000000000000000F +:1001F00000000000000000000000000000000000FF +:1002000000000000000000000000000000000000EE +:1002100000000000000000000000000000000000DE +:1002200000000000000000000000000000000000CE +:1002300000000000000000000000000000000000BE +:1002400000000000000000000000000000000000AE +:10025000000000000000000000000000000000009E +:10026000000000000000000000000000000000008E +:10027000000000000000000000000000000000007E +:10028000000000000000000000000000000000006E +:10029000000000000000000000000000000000005E +:1002A000000000000000000000000000000000004E +:1002B000000000000000000000000000000000003E +:1002C000000000000000000000000000000000002E +:1002D000000000000000000000000000000000001E +:1002E000000000000000000000000000000000000E +:1002F00000000000000000000000000000000000FE +:1003000000000000000000000000000000000000ED +:1003100000000000000000000000000000000000DD +:1003200000000000000000000000000000000000CD +:1003300000000000000000000000000000000000BD +:1003400000000000000000000000000000000000AD +:10035000000000000000000000000000000000009D +:10036000000000000000000000000000000000008D +:10037000000000000000000000000000000000007D +:10038000000000000000000000000000000000006D +:10039000000000000000000000000000000000005D +:1003A000000000000000000000000000000000004D +:1003B000000000000000000000000000000000003D +:1003C000000000000000000000000000000000002D +:1003D000000000000000000000000000000000001D +:1003E000000000000000000000000000000000000D +:1003F00000000000000000000000000000000000FD +:1004000000000000000000000000000000000000EC +:1004100000000000000000000000000000000000DC +:1004200000000000000000000000000000000000CC +:1004300000000000000000000000000000000000BC +:1004400000000000000000000000000000000000AC +:10045000000000000000000000000000000000009C +:10046000000000000000000000000000000000008C +:10047000000000000000000000000000000000007C +:10048000000000000000000000000000000000006C +:10049000000000000000000000000000000000005C +:1004A000000000000000000000000000000000004C +:1004B000000000000000000000000000000000003C +:1004C000000000000000000000000000000000002C +:1004D000000000000000000000000000000000001C +:1004E000000000000000000000000000000000000C +:1004F00000000000000000000000000000000000FC +:1005000000000000000000000000000000000000EB +:1005100000000000000000000000000000000000DB +:1005200000000000000000000000000000000000CB +:1005300000000000000000000000000000000000BB +:1005400000000000000000000000000000000000AB +:10055000000000000000000000000000000000009B +:10056000000000000000000000000000000000008B +:10057000000000000000000000000000000000007B +:10058000000000000000000000000000000000006B +:10059000000000000000000000000000000000005B +:1005A000000000000000000000000000000000004B +:1005B000000000000000000000000000000000003B +:1005C000000000000000000000000000000000002B +:1005D000000000000000000000000000000000001B +:1005E000000000000000000000000000000000000B +:1005F00000000000000000000000000000000000FB +:1006000000000000000000000000000000000000EA +:1006100000000000000000000000000000000000DA +:1006200000000000000000000000000000000000CA +:1006300000000000000000000000000000000000BA +:1006400000000000000000000000000000000000AA +:10065000000000000000000000000000000000009A +:10066000000000000000000000000000000000008A +:10067000000000000000000000000000000000007A +:10068000000000000000000000000000000000006A +:10069000000000000000000000000000000000005A +:1006A000000000000000000000000000000000004A +:1006B000000000000000000000000000000000003A +:1006C000000000000000000000000000000000002A +:1006D000000000000000000000000000000000001A +:1006E000000000000000000000000000000000000A +:1006F00000000000000000000000000000000000FA +:1007000000000000000000000000000000000000E9 +:1007100000000000000000000000000000000000D9 +:1007200000000000000000000000000000000000C9 +:1007300000000000000000000000000000000000B9 +:1007400000000000000000000000000000000000A9 +:100750000000000000000000000000000000000099 +:100760000000000000000000000000000000000089 +:100770000000000000000000000000000000000079 +:100780000000000000000000000000000000000069 +:100790000000000000000000000000000000000059 +:1007A0000000000000000000000000000000000049 +:1007B0000000000000000000000000000000000039 +:1007C0000000000000000000000000000000000029 +:1007D0000000000000000000000000000000000019 +:1007E0000000000000000000000000000000000009 +:1007F00000000000000000000000000000000000F9 +:1008000000000000000000000000000000000000E8 +:1008100000000000000000000000000000000000D8 +:1008200000000000000000000000000000000000C8 +:1008300000000000000000000000000000000000B8 +:1008400000000000000000000000000000000000A8 +:100850000000000000000000000000000000000098 +:100860000000000000000000000000000000000088 +:100870000000000000000000000000000000000078 +:100880000000000000000000000000000000000068 +:100890000000000000000000000000000000000058 +:1008A0000000000000000000000000000000000048 +:1008B0000000000000000000000000000000000038 +:1008C0000000000000000000000000000000000028 +:1008D0000000000000000000000000000000000018 +:1008E0000000000000000000000000000000000008 +:1008F00000000000000000000000000000000000F8 +:1009000000000000000000000000000000000000E7 +:1009100000000000000000000000000000000000D7 +:1009200000000000000000000000000000000000C7 +:1009300000000000000000000000000000000000B7 +:1009400000000000000000000000000000000000A7 +:100950000000000000000000000000000000000097 +:100960000000000000000000000000000000000087 +:100970000000000000000000000000000000000077 +:100980000000000000000000000000000000000067 +:100990000000000000000000000000000000000057 +:1009A0000000000000000000000000000000000047 +:1009B0000000000000000000000000000000000037 +:1009C0000000000000000000000000000000000027 +:1009D0000000000000000000000000000000000017 +:1009E0000000000000000000000000000000000007 +:1009F00000000000000000000000000000000000F7 +:100A000000000000000000000000000000000000E6 +:100A100000000000000000000000000000000000D6 +:100A200000000000000000000000000000000000C6 +:100A300000000000000000000000000000000000B6 +:100A400000000000000000000000000000000000A6 +:100A50000000000000000000000000000000000096 +:100A60000000000000000000000000000000000086 +:100A70000000000000000000000000000000000076 +:100A80000000000000000000000000000000000066 +:100A90000000000000000000000000000000000056 +:100AA0000000000000000000000000000000000046 +:100AB0000000000000000000000000000000000036 +:100AC0000000000000000000000000000000000026 +:100AD0000000000000000000000000000000000016 +:100AE0000000000000000000000000000000000006 +:100AF00000000000000000000000000000000000F6 +:100B000000000000000000000000000000000000E5 +:100B100000000000000000000000000000000000D5 +:100B200000000000000000000000000000000000C5 +:100B300000000000000000000000000000000000B5 +:100B400000000000000000000000000000000000A5 +:100B50000000000000000000000000000000000095 +:100B60000000000000000000000000000000000085 +:100B70000000000000000000000000000000000075 +:100B80000000000000000000000000000000000065 +:100B90000000000000000000000000000000000055 +:100BA0000000000000000000000000000000000045 +:100BB0000000000000000000000000000000000035 +:100BC0000000000000000000000000000000000025 +:100BD0000000000000000000000000000000000015 +:100BE0000000000000000000000000000000000005 +:100BF00000000000000000000000000000000000F5 +:100C000000000000000000000000000000000000E4 +:100C100000000000000000000000000000000000D4 +:100C200000000000000000000000000000000000C4 +:100C300000000000000000000000000000000000B4 +:100C400000000000000000000000000000000000A4 +:100C50000000000000000000000000000000000094 +:100C60000000000000000000000000000000000084 +:100C70000000000000000000000000000000000074 +:100C80000000000000000000000000000000000064 +:100C90000000000000000000000000000000000054 +:100CA0000000000000000000000000000000000044 +:100CB0000000000000000000000000000000000034 +:100CC0000000000000000000000000000000000024 +:100CD0000000000000000000000000000000000014 +:100CE0000000000000000000000000000000000004 +:100CF00000000000000000000000000000000000F4 +:100D000000000000000000000000000000000000E3 +:100D100000000000000000000000000000000000D3 +:100D200000000000000000000000000000000000C3 +:100D300000000000000000000000000000000000B3 +:100D400000000000000000000000000000000000A3 +:100D50000000000000000000000000000000000093 +:100D60000000000000000000000000000000000083 +:100D70000000000000000000000000000000000073 +:100D80000000000000000000000000000000000063 +:100D90000000000000000000000000000000000053 +:100DA0000000000000000000000000000000000043 +:100DB0000000000000000000000000000000000033 +:100DC0000000000000000000000000000000000023 +:100DD0000000000000000000000000000000000013 +:100DE0000000000000000000000000000000000003 +:100DF00000000000000000000000000000000000F3 +:100E000000000000000000000000000000000000E2 +:100E100000000000000000000000000000000000D2 +:100E200000000000000000000000000000000000C2 +:100E300000000000000000000000000000000000B2 +:100E400000000000000000000000000000000000A2 +:100E50000000000000000000000000000000000092 +:100E60000000000000000000000000000000000082 +:100E70000000000000000000000000000000000072 +:100E80000000000000000000000000000000000062 +:100E90000000000000000000000000000000000052 +:100EA0000000000000000000000000000000000042 +:100EB0000000000000000000000000000000000032 +:100EC0000000000000000000000000000000000022 +:100ED0000000000000000000000000000000000012 +:100EE0000000000000000000000000000000000002 +:100EF00000000000000000000000000000000000F2 +:100F000000000000000000000000000000000000E1 +:100F100000000000000000000000000000000000D1 +:100F200000000000000000000000000000000000C1 +:100F300000000000000000000000000000000000B1 +:100F400000000000000000000000000000000000A1 +:100F50000000000000000000000000000000000091 +:100F60000000000000000000000000000000000081 +:100F70000000000000000000000000000000000071 +:100F80000000000000000000000000000000000061 +:100F90000000000000000000000000000000000051 +:100FA0000000000000000000000000000000000041 +:100FB0000000000000000000000000000000000031 +:100FC0000000000000000000000000000000000021 +:100FD0000000000000000000000000000000000011 +:100FE0000000000000000000000000000000000001 +:100FF00000000000000000000000000000000000F1 +:1010000000000000000000000000000000000000E0 +:1010100000000000000000000000000000000000D0 +:1010200000000000000000000000000000000000C0 +:1010300000000000000000000000000000000000B0 +:1010400000000000000000000000000000000000A0 +:101050000000000000000000000000000000000090 +:101060000000000000000000000000000000000080 +:101070000000000000000000000000000000000070 +:101080000000000000000000000000000000000060 +:101090000000000000000000000000000000000050 +:1010A0000000000000000000000000000000000040 +:1010B0000000000000000000000000000000000030 +:1010C0000000000000000000000000000000000020 +:1010D0000000000000000000000000000000000010 +:1010E0000000000000000000000000000000000000 +:1010F00000000000000000000000000000000000F0 +:1011000000000000000000000000000000000000DF +:1011100000000000000000000000000000000000CF +:1011200000000000000000000000000000000000BF +:1011300000000000000000000000000000000000AF +:10114000000000000000000000000000000000009F +:10115000000000000000000000000000000000008F +:10116000000000000000000000000000000000007F +:10117000000000000000000000000000000000006F +:10118000000000000000000000000000000000005F +:10119000000000000000000000000000000000004F +:1011A000000000000000000000000000000000003F +:1011B000000000000000000000000000000000002F +:1011C000000000000000000000000000000000001F +:1011D000000000000000000000000000000000000F +:1011E00000000000000000000000000000000000FF +:1011F00000000000000000000000000000000000EF +:1012000000000000000000000000000000000000DE +:1012100000000000000000000000000000000000CE +:1012200000000000000000000000000000000000BE +:1012300000000000000000000000000000000000AE +:10124000000000000000000000000000000000009E +:10125000000000000000000000000000000000008E +:10126000000000000000000000000000000000007E +:10127000000000000000000000000000000000006E +:10128000000000000000000000000000000000005E +:10129000000000000000000000000000000000004E +:1012A000000000000000000000000000000000003E +:1012B000000000000000000000000000000000002E +:1012C000000000000000000000000000000000001E +:1012D000000000000000000000000000000000000E +:1012E00000000000000000000000000000000000FE +:1012F00000000000000000000000000000000000EE +:1013000000000000000000000000000000000000DD +:1013100000000000000000000000000000000000CD +:1013200000000000000000000000000000000000BD +:1013300000000000000000000000000000000000AD +:10134000000000000000000000000000000000009D +:10135000000000000000000000000000000000008D +:10136000000000000000000000000000000000007D +:10137000000000000000000000000000000000006D +:10138000000000000000000000000000000000005D +:10139000000000000000000000000000000000004D +:1013A000000000000000000000000000000000003D +:1013B000000000000000000000000000000000002D +:1013C000000000000000000000000000000000001D +:1013D000000000000000000000000000000000000D +:1013E00000000000000000000000000000000000FD +:1013F00000000000000000000000000000000000ED +:1014000000000000000000000000000000000000DC +:1014100000000000000000000000000000000000CC +:1014200000000000000000000000000000000000BC +:1014300000000000000000000000000000000000AC +:10144000000000000000000000000000000000009C +:10145000000000000000000000000000000000008C +:10146000000000000000000000000000000000007C +:10147000000000000000000000000000000000006C +:10148000000000000000000000000000000000005C +:10149000000000000000000000000000000000004C +:1014A000000000000000000000000000000000003C +:1014B000000000000000000000000000000000002C +:1014C000000000000000000000000000000000001C +:1014D000000000000000000000000000000000000C +:1014E00000000000000000000000000000000000FC +:1014F00000000000000000000000000000000000EC +:1015000000000000000000000000000000000000DB +:1015100000000000000000000000000000000000CB +:1015200000000000000000000000000000000000BB +:1015300000000000000000000000000000000000AB +:10154000000000000000000000000000000000009B +:10155000000000000000000000000000000000008B +:10156000000000000000000000000000000000007B +:10157000000000000000000000000000000000006B +:10158000000000000000000000000000000000005B +:10159000000000000000000000000000000000004B +:1015A000000000000000000000000000000000003B +:1015B000000000000000000000000000000000002B +:1015C000000000000000000000000000000000001B +:1015D000000000000000000000000000000000000B +:1015E00000000000000000000000000000000000FB +:1015F00000000000000000000000000000000000EB +:1016000000000000000000000000000000000000DA +:1016100000000000000000000000000000000000CA +:1016200000000000000000000000000000000000BA +:1016300000000000000000000000000000000000AA +:10164000000000000000000000000000000000009A +:10165000000000000000000000000000000000008A +:10166000000000000000000000000000000000007A +:10167000000000000000000000000000000000006A +:10168000000000000000000000000000000000005A +:10169000000000000000000000000000000000004A +:1016A000000000000000000000000000000000003A +:1016B000000000000000000000000000000000002A +:1016C000000000000000000000000000000000001A +:1016D000000000000000000000000000000000000A +:1016E00000000000000000000000000000000000FA +:1016F00000000000000000000000000000000000EA +:1017000000000000000000000000000000000000D9 +:1017100000000000000000000000000000000000C9 +:1017200000000000000000000000000000000000B9 +:1017300000000000000000000000000000000000A9 +:101740000000000000000000000000000000000099 +:101750000000000000000000000000000000000089 +:101760000000000000000000000000000000000079 +:101770000000000000000000000000000000000069 +:101780000000000000000000000000000000000059 +:101790000000000000000000000000000000000049 +:1017A0000000000000000000000000000000000039 +:1017B0000000000000000000000000000000000029 +:1017C0000000000000000000000000000000000019 +:1017D0000000000000000000000000000000000009 +:1017E00000000000000000000000000000000000F9 +:1017F00000000000000000000000000000000000E9 +:1018000000000000000000000000000000000000D8 +:1018100000000000000000000000000000000000C8 +:1018200000000000000000000000000000000000B8 +:1018300000000000000000000000000000000000A8 +:101840000000000000000000000000000000000098 +:101850000000000000000000000000000000000088 +:101860000000000000000000000000000000000078 +:101870000000000000000000000000000000000068 +:101880000000000000000000000000000000000058 +:101890000000000000000000000000000000000048 +:1018A0000000000000000000000000000000000038 +:1018B0000000000000000000000000000000000028 +:1018C0000000000000000000000000000000000018 +:1018D0000000000000000000000000000000000008 +:1018E00000000000000000000000000000000000F8 +:1018F00000000000000000000000000000000000E8 +:1019000000000000000000000000000000000000D7 +:1019100000000000000000000000000000000000C7 +:1019200000000000000000000000000000000000B7 +:1019300000000000000000000000000000000000A7 +:101940000000000000000000000000000000000097 +:101950000000000000000000000000000000000087 +:101960000000000000000000000000000000000077 +:101970000000000000000000000000000000000067 +:101980000000000000000000000000000000000057 +:101990000000000000000000000000000000000047 +:1019A0000000000000000000000000000000000037 +:1019B0000000000000000000000000000000000027 +:1019C0000000000000000000000000000000000017 +:1019D0000000000000000000000000000000000007 +:1019E00000000000000000000000000000000000F7 +:1019F00000000000000000000000000000000000E7 +:101A000000000000000000000000000000000000D6 +:101A100000000000000000000000000000000000C6 +:101A200000000000000000000000000000000000B6 +:101A300000000000000000000000000000000000A6 +:101A40000000000000000000000000000000000096 +:101A50000000000000000000000000000000000086 +:101A60000000000000000000000000000000000076 +:101A70000000000000000000000000000000000066 +:101A80000000000000000000000000000000000056 +:101A90000000000000000000000000000000000046 +:101AA0000000000000000000000000000000000036 +:101AB0000000000000000000000000000000000026 +:101AC0000000000000000000000000000000000016 +:101AD0000000000000000000000000000000000006 +:101AE00000000000000000000000000000000000F6 +:101AF00000000000000000000000000000000000E6 +:101B000000000000000000000000000000000000D5 +:101B100000000000000000000000000000000000C5 +:101B200000000000000000000000000000000000B5 +:101B300000000000000000000000000000000000A5 +:101B40000000000000000000000000000000000095 +:101B50000000000000000000000000000000000085 +:101B60000000000000000000000000000000000075 +:101B70000000000000000000000000000000000065 +:101B80000000000000000000000000000000000055 +:101B90000000000000000000000000000000000045 +:101BA0000000000000000000000000000000000035 +:101BB0000000000000000000000000000000000025 +:101BC0000000000000000000000000000000000015 +:101BD0000000000000000000000000000000000005 +:101BE00000000000000000000000000000000000F5 +:101BF00000000000000000000000000000000000E5 +:101C000000000000000000000000000000000000D4 +:101C100000000000000000000000000000000000C4 +:101C200000000000000000000000000000000000B4 +:101C300000000000000000000000000000000000A4 +:101C40000000000000000000000000000000000094 +:101C50000000000000000000000000000000000084 +:101C60000000000000000000000000000000000074 +:101C70000000000000000000000000000000000064 +:101C80000000000000000000000000000000000054 +:101C90000000000000000000000000000000000044 +:101CA0000000000000000000000000000000000034 +:101CB0000000000000000000000000000000000024 +:101CC0000000000000000000000000000000000014 +:101CD0000000000000000000000000000000000004 +:101CE00000000000000000000000000000000000F4 +:101CF00000000000000000000000000000000000E4 +:101D000000000000000000000000000000000000D3 +:101D100000000000000000000000000000000000C3 +:101D200000000000000000000000000000000000B3 +:101D300000000000000000000000000000000000A3 +:101D40000000000000000000000000000000000093 +:101D50000000000000000000000000000000000083 +:101D60000000000000000000000000000000000073 +:101D70000000000000000000000000000000000063 +:101D80000000000000000000000000000000000053 +:101D90000000000000000000000000000000000043 +:101DA0000000000000000000000000000000000033 +:101DB0000000000000000000000000000000000023 +:101DC0000000000000000000000000000000000013 +:101DD0000000000000000000000000000000000003 +:101DE00000000000000000000000000000000000F3 +:101DF00000000000000000000000000000000000E3 +:101E000000000000000000000000000000000000D2 +:101E100000000000000000000000000000000000C2 +:101E200000000000000000000000000000000000B2 +:101E300000000000000000000000000000000000A2 +:101E40000000000000000000000000000000000092 +:101E50000000000000000000000000000000000082 +:101E60000000000000000000000000000000000072 +:101E70000000000000000000000000000000000062 +:101E80000000000000000000000000000000000052 +:101E90000000000000000000000000000000000042 +:101EA0000000000000000000000000000000000032 +:101EB0000000000000000000000000000000000022 +:101EC0000000000000000000000000000000000012 +:101ED0000000000000000000000000000000000002 +:101EE00000000000000000000000000000000000F2 +:101EF00000000000000000000000000000000000E2 +:101F000000000000000000000000000000000000D1 +:101F100000000000000000000000000000000000C1 +:101F200000000000000000000000000000000000B1 +:101F300000000000000000000000000000000000A1 +:101F40000000000000000000000000000000000091 +:101F50000000000000000000000000000000000081 +:101F60000000000000000000000000000000000071 +:101F70000000000000000000000000000000000061 +:101F80000000000000000000000000000000000051 +:101F90000000000000000000000000000000000041 +:101FA0000000000000000000000000000000000031 +:101FB0000000000000000000000000000000000021 +:101FC0000000000000000000000000000000000011 +:101FD0000000000000000000000000000000000001 +:101FE00000000000000000000000000000000000F1 +:101FF00000000000000000000000000000000000E1 +:08200000481F000080013E04AE +:102008003038F00C19005EBC5C7C4848F00C003994 +:10201800F00C093BB22A5EFC000011C0F80815015B +:102028003039F20C1800E08800035EFDF00B000B5D +:102038004828F00B032C5EFC00007B08580CC0D02D +:1020480048787829F00900293008720A143CC060E1 +:102058002FF82F895848CFA13FF85EF800007B0879 +:102068003038F00C18005EBCF60C001C30094838FB +:10207800F00C09295EFC000000007B085EFFD70316 +:10208800D4011988301EB6881998B6BEEA18FFFF21 +:10209800E818FF80B6AEB698580AC0301588C0A8B0 +:1020A80048981188F4081800C0303038C03848788B +:1020B80011B8B6C83EE8B6D83008B6E8302C306853 +:1020C800B208D802000016AB00000008D40130188E +:1020D800198EB68E199CB6A8EA1CFFFFE81CFF8073 +:1020E800B6B8B69C580AC0A0158CE06A00FFF00C80 +:1020F8001800F4081710F9B80001B6C83EE8B6D8B9 +:102108003008B6E8302C3068B208D802D421202D27 +:102118004AAA189E1698129674075807C071FACAE8 +:10212800FFF814F7F01F0026C4681989B6891999B1 +:10213800EA19FFFFE819FF80B6993039B0A9740988 +:102148007219F20C1618B0F9B0CCF9D9C108F3D944 +:10215800C208B0ECB0D9304BB0BB74097229F20C8C +:102168001618F169000CF16C0009F9D9C108F3D906 +:10217800C208F16C000BF16B0008F169000A7409E0 +:10218800300A7239F16A00133EEAF16A0012F20A63 +:102198001618F1690011F16A000EF16B000DF5D9FE +:1021A800C108F3D9C208F16A0010F169000F302C98 +:1021B8003138AC082FEDD8220000152C800020D42F +:1021C8003038F00C18005EBCF60C001B48F8F00B19 +:1021D800032858085E0C704958195E1C7029581954 +:1021E800C09148B8F00C003C9828B42878089508A5 +:1021F8005EFC71E85808F0091700F1F91001F1F8D0 +:10220800120A9509B4285EFC00007B08000011C082 +:10221800D4314BC8300A10941499910A1893301A83 +:102228004B984BA7910A3EE14B921296C0280A9907 +:10223800E0682710C0485808C5602018664AE21AA6 +:102248000201E04A0201CF81C4F8F2C5FFFFE20AA9 +:102258001800CEE10F9BF7DBC0C15825E0890005C7 +:102268003038300AC2E80FAA3038C148580BC0A02D +:10227800EE08070EEE08000CA96E2FE8199C1C0842 +:10228800C058F0CCFFFFEE080708201AF80800082D +:102298005C5A10395F9CEC0A18005F9EFDEC000C3C +:1022A800EC0C1800CE4110395F09F9DAC008EC0CC3 +:1022B80018005F0CF9E90009EC091800C020D83AA9 +:1022C800840C3009F20C1900CB34201D5C6A1ADB2F +:1022D8001AD849081ADA490C1AD51AD8F01F000F6B +:1022E8002FADCA6BDA3A662A68085C5A2FF8EE09ED +:1022F8000B0A8908E0480063FE9AFFA9305CD832CF +:10230800000014B0000011B8000014B8000016A2B4 +:102318008003792C80037AB0800094C4D431202DB6 +:102328004C68149570081896169712945808C0713E +:10233800FACAFFF814F8F01F0042CC38198830198F +:10234800B6881998B6A9EA18FFFFE818FF80B6986A +:102358004BC89088EDB80002C171189330023EE175 +:102368000788201D4B8C1AD8F01F00382FF22FED4C +:102378000788E2081800C0502FF3E0420400CF118C +:102388004B3CF01F00320DC83099F2081800E08865 +:1023980000114B09920A3009F20A1900E0840091F1 +:1023A8001AD84AD84ADC1AD8F01F00282FEDC88856 +:1023B800E0450032C290A3684A99E0450033C5D091 +:1023C800129B7209F2080309EECAFFFCF3360020DB +:1023D8003009AEB6C088760CF808030CF809070C6B +:1023E8002FF914CCEC091900CF7349A99289EDB9DA +:1023F8000004C5F149A97209F2080308499C1AD8D2 +:1024080049581AD8C538304BA368495A7409F20894 +:10241800030972C9AEBBF20B1618AEC9AEFBF7D9E9 +:10242800C108F3D9C208AEDBAEE948A99289EDB973 +:102438000004C1903046C3D80000152C800020D479 +:10244800000016A080037AF0800094C4800384D42E +:10245800000016A28003785880037AF8000015203F +:1024680080037B187409F208030870C8496C1AD8ED +:10247800304649681AD8C1A8301AAEBA720AF408A8 +:10248800030AF53A0038AECA491A948AEDBA00042C +:10249800C0303016C0E87209F2080308F138003875 +:1024A80048CC1AD8301648981AD8F01F000B2FEDD0 +:1024B8003EE80C07AEC83008AED82FB6A806302CB8 +:1024C8002FEDD83280037B2880037858000016A2AD +:1024D80080037B38800094C4D421204D4A981897F3 +:1024E800118A580AC0313FF6C0D84A7811BC118EFB +:1024F800119611A8B166EDEE1186EDE81086F9E6A1 +:1025080010064A289088EDB80002C0E14A08201D4C +:102518004A0C1ADA1AD61AD8505B5049F01F001E16 +:102528002FCD4009401B49D870085808C081FACA05 +:10253800FFF00E9C14F8F01F001AC2080F88B68826 +:102548000F98EA18FFFFE818FF80B6983018B6A869 +:102558003048B6B8F1D6C108B6E83EE8EC0A161815 +:10256800B6F6F7680008B6CA3008EDD6C208F768AC +:102578000009B6D63098302CB2082FCDD8220000EA +:102588000000152800007B28000016A28003782090 +:1025980080037B48800094C40000152C800020D460 +:1025A800D401580BC0313FF8C0C8178A17B917981B +:1025B800B168F1EA118817AAF1EA1088F3E810085F +:1025C800F00A161848E9B28AF5D8C208B2B8B29A21 +:1025D800F5D8C108B2AA48B99289EDB90002C0A1DC +:1025E800201D1AD848881ADC488C1AD8F01F000811 +:1025F8002FCD30194878B089D802000000007B2818 +:10260800000016A28003799C80037B74800094C428 +:1026180000001528D431204D4AE8189570081697FF +:1026280012965808C071FACAFFF014F8F01F002A71 +:10263800C4D84AA89088EDB80002C1711894300334 +:102648003EE20988201D4A6C1AD8F01F00262FF395 +:102658002FED0988E4081800C0502FF4E043040067 +:10266800CF114A1CF01F001F0B880BCCAE880B98AB +:10267800EA18FFFFE818FF80AE983004BA445014F7 +:102688003025FACAFFFCAEA5301BF01F0018304AEF +:10269800EF64000CEF6500084018F0091618AEF852 +:1026A800AEC99A49AEBAF5D8C108F1D8C208EF69DF +:1026B800000AAED8AEEA3EE8F3D9C108EF68000BCD +:1026C800EF69000930C8302CAC082FCDD832000093 +:1026D8000000152C800020D4000016A080037AF09A +:1026E800800094C4800384D4800021C8D40148A801 +:1026F8009088EDB80002C0E148887008201D1AD8FB +:10270800487811881AD84878487C1AD8F01F0007EA +:102718002FCDDA0A000016A200000008000016AB50 +:10272800800379E480037BA8800094C4D42148E620 +:10273800189E30076C0C580CC0A02FF72EC6E04727 +:102748000024CF91489CF01F000ADC2A4866EE0757 +:102758000027EC070027EF680010AECE8F0B8F2AFA +:102768008F39D822000011E080037BC4800094C414 +:10277800D4214C8618970C9A302830094C6B310CB0 +:10278800F01F00460C9A302830094C5B311CF01FB2 +:1027980000430C9A302830094C2B312CF01F003F95 +:1027A8000E990C9A30284C0B314CF01F003C0E99B6 +:1027B8000C9A30284BDB315CF01F00383018300998 +:1027C8004BBA4BCB320CF01F003530184BA73009F1 +:1027D8000E9B4BAA321CF01F00310E9B301830099B +:1027E8004B7A322CF01F002D4B6532390A9A0E9B1A +:1027F8003018129CF01F002932490A9A0E9B301893 +:10280800129CF01F002632590A9A0E9B3018129C0F +:10281800F01F00220A9A32690E9B3018129CF01F92 +:10282800001F0C9A302830094A7B336CF01F001BBC +:102838000E9B301830094A5A327CF01F00180C9A47 +:10284800302830094A2B330CF01F00144A1533394D +:102858000A9A0E9B3018129CF01F001033190A9A1E +:102868000E9B3018129CF01F000D0A9A33290E9BFC +:102878003018129CF01F00090C9A30283009496B57 +:10288800334CF01F00060E9B30183009493AC278C5 +:10289800800020D48000427C8000273480004118CA +:1028A8008000433080003FD080003EA88000208810 +:1028B800800026F48000208480002114800035ECFC +:1028C80080003514800034A480004B5480003740C9 +:1028D8008000232480003678800024E0335CF01FD9 +:1028E80000370C9A302830094B5B328CF01F0033CC +:1028F8000C9A302830094B3B32DCF01F00300C9A20 +:10290800302830094B0B32ECF01F002C0E9B30188E +:1029180030094AEA329CF01F00290E9B3018300912 +:102928004ABA32CCF01F00250E9B301830094A9A5B +:1029380032BCF01F00220C9A304830094A6B344CE4 +:10294800F01F001E0E9B301830094A4A32ACF01FA7 +:10295800001B0E9B301830094A1A345CF01F001710 +:102968000E9B3018300949FA32FCF01F00140E9BF8 +:102978003018300949CA337CF01F00100E9B3018FC +:10298800300949AA338CF01F000D0C9A30483009E1 +:10299800497B346CF01F00090C9A30283009495BD8 +:1029A800339CF01F00060E9B30183009492A33ACBF +:1029B800F01F0002D82200008000273480003D88E4 +:1029C80080003AC8800038B4800033FC800030D4DE +:1029D800800032848000375C800032088000300438 +:1029E8008000332880002F8C80002EC4800038841B +:1029F800800037CC8000261CD4013038580B5F1972 +:102A0800F00C18005F88F3E80008C060F40C0019A7 +:102A180048D8F009092B48D89088EDB80001C111B1 +:102A280048B848C9580AF20A1700F00A171048A807 +:102A38001ADA1ADB1ADC489C1AD8F01F00092FCDC5 +:102A4800D802000000007B08000016A280037BDC8F +:102A580080037BE4800378C080037BF0800094C40B +:102A6800D401580BF60A1700F7FA180BF01F0002EA +:102A7800D802000080002A00D401320A300B483CFA +:102A8800F01F0003D802000000007B088002E8BCA9 +:102A9800D421206D3087FAC6FFF00E9A4C6B18953A +:102AA8000C9CF01F0046304B0C9CF01F0045300872 +:102AB800FB68000DBA88FB680009FB68000BFB681F +:102AC800000CEE784240501830480E9BFB67000817 +:102AD800FB68000A300AFE7C2400F01F003A1897B1 +:102AE800C0F04B989088EDB80002C0814B78201D4B +:102AF8004B7C1AD8F01F00372FED301CC5A8E06AB0 +:102B0800F980EA1A03371A9BFE7C2400F01F003272 +:102B1800582CC0D14AC89008EE081900C0844AB899 +:102B2800201D4AEC1AD8F01F002B2FEDD303300AD2 +:102B3800E06B01204AACF01F002BD503E1B8000080 +:102B4800EE180001F5D8C201C020D303FE78240096 +:102B58003019705BF7D9D001915B705BF7D9D0C1A0 +:102B6800915B705BF7D9D081915B580AC020D5037F +:102B7800FE7C2400F01F001C0A9CF01F001C364A33 +:102B8800300B49BCF01F001BE06A0400300B49AC55 +:102B9800F01F0018E06A0400300B498CF01F001584 +:102BA800F01F0017497830079107F01F00170E9C97 +:102BB8002FADD822800382078002E7368000A280EA +:102BC8008000A618000016A2800379BC80037C0848 +:102BD800800094C48000A73C80037C2880002C10CF +:102BE8008000A3A08000A7EC80002778000014B81C +:102BF8008002E8BC00000DB8000009B880002A80F7 +:102C0800000000088000751CD401E1B80000EE182F +:102C18000001F5D8C201C020D303FE782400301982 +:102C2800706BF7D9D001916B706BF7D9D0C1916BEC +:102C3800706BF7D9D081916B580AC020D503FE7C00 +:102C480024007848EDB80000C0F1F01F0016C0C19C +:102C5800319CF01F0015495890092FF9B009301917 +:102C68004938B089C1B8E1B80000EE180001F5D8BC +:102C7800C201C020D303FE7824003019705BF7D955 +:102C8800D001915B705BF7D9D0C1915B705BF7D9CC +:102C9800D081915B580AC020D503D402D603000026 +:102CA800800022188000A2E6000014B40000151C61 +:102CB800D4313006189714931694950618983E093F +:102CC800C2C81095118A2FF8F20A1800C251580686 +:102CD800C21049E890093008F0091900C064089B3F +:102CE8000E9C5C7BF01F001A49A890093008F00977 +:102CF8001900C1040C070F98201D1AD849681AD466 +:102D08001AD690881AD84958495C1AD8F01F001565 +:102D18002FAD8706C1882FF60836CD4548D89009CB +:102D28003008F0091900C0353005C0D8201D48A862 +:102D38001AD690881AD8489848BC1AD83005F01F77 +:102D480000092FCD0A9CD832000016A680013DB498 +:102D5800000016A2000014B4800378D080037C48D9 +:102D6800800094C480037C6CD42118971696F01FB9 +:102D780000325F080E3C5F191895F1E91009C03060 +:102D88005808C5710B893E08F0091800C5210B9930 +:102D98003008F0091800C4D5E2190040C0E1EACAB9 +:102DA800FFFD0BAC1298C068158B2FF92FFB160A84 +:102DB80016081839CFA5C2384A089088EDB800021D +:102DC800C0D149F8201D49FC1AD8F01F001FF7D6BA +:102DD800C0100E9CF01F001D2FED3009EACAFFFD40 +:102DE8000BAC1298C0A81587159B2FF9F7E7108B25 +:102DF8002FEB160AF60800081839CF6510053EE9CA +:102E08000BB8F2081800C021DA2A4919920A3009C9 +:102E1800F20A1900C0E4201D1AD848E890881AD888 +:102E2800487848DC1AD8F01F0008300C2FCDD8227B +:102E3800D82A000080002CB8000016A080037974FE +:102E480080037C84800094C480013DB4000016A2F5 +:102E5800000014B480037C8CD4014918581CC0713C +:102E68003039334C9109F01F000FC0683049334C9A +:102E78009109F01F000D48D89088EDB80002C0D124 +:102E880048787008201D1AD848981AD8489848AC2D +:102E98001AD8F01F000A2FCDD80200000000000841 +:102EA8008000A2E68000A300000016A280037A3CFE +:102EB8008003821080037CB0800094C4D421FACDB2 +:102EC80001004AC81697700512965805C071FACACB +:102ED800FF0014F5F01F0028C4A81989301AB68914 +:102EE8001999B6AAEA19FFFFE819FF80B69919B926 +:102EF800F4091800C20119C53FF8F0051800C1B05F +:102F0800E06A00FF300B1A9CF01F001C1A9430086E +:102F1800C048E8080B082FF80A38CFC51A94AEB590 +:102F2800EEC8FFFCFA050009C038093A10CA123485 +:102F3800CFD1C15849256A0CF01F00120A98EECA71 +:102F4800FFFCEBDCC0083009AEB5C068700BF609B1 +:102F5800070B2FF914CBEA091900CF933EE80A07AB +:102F6800AEC83008AED82FB5302CAC052C0DD82201 +:102F78000000152C800020D48002E8BC0000011459 +:102F88008002EDD0D421202D49981697700E129604 +:102F9800580EC071FACAFFF814FEF01F0016C25886 +:102FA8001989B6891998EA18FFFFE818FF80B698BA +:102FB80030184915B6A86A0CF01F0010EEC9FFFCBE +:102FC8005C5C3008AEBCC0686A0AF408070A2FF8CF +:102FD80012CAF8081900CF933EE818072FBCAEC8EC +:102FE8003008AED8AC0C302C2FEDD8220000152CB0 +:102FF800800020D4000001148002EDD0D421202DBF +:103008004AE818967008169712955808C071FACAB7 +:10301800FFF814F8F01F002AC4D84AA811D4303891 +:10302800F0041800E08B0046FACAFFFC1A9B089CC3 +:10303800F01F00250D88C300AE880D98EA18FFFF21 +:10304800E818FF80AE983018AEA81BC8AEB89A280A +:10305800AEC83008C0B8F3D8C010400BF1DAB010D1 +:10306800EE09000AF6090709B4D9F0CAFFFF9A2940 +:10307800F2081900CF13F1D9C010EE0800083EEA93 +:10308800B0DA9AA82FA910073008AEE8AA09089C58 +:10309800F01F000EC0E8AE880D98EA18FFFFE81888 +:1030A800FF80AECCAE98AEAC3EE8AEB83048AA08C9 +:1030B800302C2FEDD82200000000152C800020D4E1 +:1030C80000000DB880006BF480006FBCD431202D57 +:1030D8004C5818967008169712955808C071BAE897 +:1030E800FACAFFFAF01F0041C728F8C8FFFDC3C09D +:1030F80011842FF4F0040004C37009893018F00912 +:103108001800C67109993EE8F0091800C6214B88D5 +:1031180090093008F0091900C5C44B681AD44B6CE3 +:103128001AD8F01F00362FEDC548099309A9F3E313 +:1031380010835C83C54809893018F0091800C1510B +:1031480009993EE8F0091800C1014A989009300829 +:10315800F0091900C0A44A781AD44A7C1AD8F01F7A +:1031680000272FEDC02830030DB43018F0041800E4 +:10317800C2D10DCC3038F00C1800E08B0028F5D304 +:10318800C008FACBFFF9F01F001E0D88C120AE88D9 +:103198000D98EA18FFFFE818FF80AEB4AE98AEA409 +:1031A8001BF8AEC83EE8AED83008AEE83068C0D8E4 +:1031B800AE880D98EA18FFFFE818FF80AE983EE841 +:1031C800AECCAEB8AEAC3048AA08302C2FEDD83211 +:1031D80009883029F2081800CA9030032FF8100423 +:1031E800CAB1CC3B0000152C800020D4000016A2E8 +:1031F8008003780C80037CBC800094C480006FE05E +:10320800D421202D49A81697700E1296580EC07119 +:10321800FACAFFF814FEF01F0017C2681989301A9D +:10322800B6891999B6AAEA19FFFFE819FF80B69975 +:1032380019B9F4091800C0D119C83039F2081800B2 +:10324800E08B000848C9F208033CF01F000CC028B6 +:10325800300C3018AEB83EE8AECCAED83008AEE888 +:10326800302C3068AC082FEDD82200000000152C57 +:10327800800020D400007B0880004D78D421202DC8 +:103288004A181697700E1296580EC071FACAFFF8AF +:1032980014FEF01F001EC3481989301AB6891999FF +:1032A800B6AAEA19FFFFE819FF80B69919B9F40917 +:1032B8001800C0B119CC3038F00C1800E08B0006AB +:1032C800F01F00135C8CC028300C3028AEB83EE8E4 +:1032D800AECCAEE85C7CF8081608AED83008AEF87C +:1032E8003078AC0848B89088EDB80002C08148A88A +:1032F8001ADC48AC1AD8F01F000A2FED302C2FED3D +:10330800D82200000000152C800020D480006D38E1 +:10331800000016A8800378A880037CD8800094C495 +:10332800D421202D4AA81697700512965805C07109 +:10333800FACAFFF814F5F01F0027C4781989301A63 +:10334800B6891999B6AAEA19FFFFE819FF80B69954 +:10335800303819B919C5F40918005F09F0051800C3 +:103368005F881268C19049C8F00503345804C060EA +:10337800089C301BF01F0019C10849989009E809FA +:103388001900C0A449781AD5497C1AD8F01F00172B +:10339800089C2FEDC028300C3018AEB83EE8AECCF3 +:1033A800AED83008AEE83068AC0849189088EDB857 +:1033B8000002C0A148B8201D1ADC48EC1AD51AD85A +:1033C800F01F000A2FCD302C2FEDD8220000152C2D +:1033D800800020D400007B0880004F1C000016A647 +:1033E8008003794080037CEC800094C4000016A818 +:1033F80080037D10D421202D4A181697700E12963E +:10340800580EC071FACAFFF814FEF01F001EC34818 +:103418001989301AB6891999B6AAEA19FFFFE81965 +:10342800FF80B69919B9F4091800C0F119C83039E4 +:10343800F2081800E08B000A4939F2080038300B0E +:10344800701CF01F0012C028300C3018AEB83EE8CF +:10345800AECCAED83008AEE83068AC0848C8908822 +:10346800EDB80002C08148B81ADC48BC1AD8F01F71 +:10347800000B2FED302C2FEDD82200000000152C6A +:10348800800020D400007B0880004F1C000016A894 +:1034980080037A6480037D28800094C4D40149584D +:1034A8009088EDB80002C08149381ADC493C1AD826 +:1034B800F01F00132FED49383009118AF20A18005D +:1034C800C021DC0AB089F01F0010581CC1004898C0 +:1034D80090093008F0091900C025DA0A48681ADC92 +:1034E80048AC1AD8F01F0006301C2FEDD802000097 +:1034F800000016A28003798480037D38800094C47C +:10350800000016AA80019EF880037D54D421202D46 +:103518004B281496700E16971295580EC071FACA59 +:10352800FFF814FEF01F002EC5681989B68919988E +:10353800EA18FFFFE818FF803014B698B6A4F01F09 +:103548000029C3E0E0460025C260E0460026C3200B +:10355800EEC9FFFCE0460024C0F0129AF9380020BA +:103568003009AEB8C058F809070B2FF914CBF00989 +:103578001900CFA3C28830682DACAEB8306A3008C5 +:10358800198B12CB2FF8201C5C88F4081900CF91F6 +:103598003068C19878C8F0091618AEF93049AEC835 +:1035A800AEB9F3D8C108F1D8C208AED9AEE83048F0 +:1035B800C0A8AEB4F9380038AEC83018C048AEB4A8 +:1035C800AECC18983EE91007AEC93009AED92FB86D +:1035D800302CAA082FEDD8220000152C800020D40A +:1035E8008001997CD421202D49F8189670081697E7 +:1035F80012955808C041FACAFFF8C1881988B688D8 +:103608001998EA18FFFFE818FF803019B698306853 +:10361800B6A9B6B81A9CF01F0015581CC0B00A9974 +:103628000E9B0C9CFACAFFF8300814F8F01F001023 +:10363800C1881BD8AEC81BC8AED81BB8AEE81BA83B +:10364800AEF81B98EF6800081B88EF6800093EE891 +:10365800EF68000A3008EF68000B302C30B8AA0871 +:103668002FEDD8220000152C80019128800020D44D +:10367800D421FACD010016961A971A9C173AF01F12 +:103688000025FAC9FF000D88F20800083009F16921 +:10369800FF004A189088EDB80002C08149F81AD78F +:1036A80049FC1AD8F01F001F2FED300849E749FAE6 +:1036B800AE88AE98AEA8AEB8B488109949CA0E9B29 +:1036C8001A9C1A96F01F001B5C5CC040E06C00FF5F +:1036D800C1E849189088EDB80002C1510F8A0FB9A6 +:1036E8000F98B168F1EA11880FAAF1EA1088F3E897 +:1036F8001008201D1AD848981AD648FC1AD8F01F66 +:1037080000092FCD30194898301CB0892C0DD822CB +:103718008002E736000016A280037A7C80037D646D +:10372800800094C400007B2800001528800025A88C +:103738008000C4C080037D84D401F01F0006E068C7 +:1037480000FF581CF00C1710F9BC0001D80200004B +:10375800800199CCD42118971696335CF01F001677 +:103768005827C1F10D980D89F1E910893018F00931 +:103778001900C1710DA80DBA0DC9303BF608180023 +:10378800E0880004300CC04848CBF608033CA96A1E +:10379800ECCBFFFB120A5C7AF01F00091897C028CF +:1037A8003FF7335CF01F0007E06C00FF5817F9BCC7 +:1037B8000001D8228000A30000007B08800053C0CD +:1037C8008000A2E6D421202D581CC4211789F809AD +:1037D8001800C3E1F6C8FFFE1796C170118AF20AF5 +:1037E8001800C131119A3EE9F20A1800C0E149B93E +:1037F800920A3009F20A1900C0841AD84988499CEB +:103808001AD8F01F00192FED3008FACAFFF8300B4C +:1038180014E80C9CF01F00159A3A18973038F006F7 +:103828001800E0880004300CC0484918F006033C32 +:103838005C7A0E9BF01F000F18950C9CF01F000E71 +:103848000E9CF01F000E5815C0310A9CC038E06C61 +:1038580000FF2FEDD8220000000016A28003795C3B +:1038680080037CBC800094C4800072DC00007B086C +:103878008000514080006E188002E28CD401582CE0 +:10388800C13117981789F1E910893018F009190022 +:10389800C0B117C817BA17ACA96A2FBBF00A000A3B +:1038A8005C7AF01F0002DA0A80007380D421581C69 +:1038B800C391580BC0311697C1E81788F80818004B +:1038C800C3411797C33817893018F0091800C13158 +:1038D80017993EE8F0091800C0E1497890093008C6 +:1038E800F0091900C08449581ADB495C1AD8F01F3E +:1038F80000152FED49089088EDB80002C08148F8FE +:103908001AD7491C1AD8F01F000F2FED3038F007CE +:103918001800E08B000848D8F007033CF01F000CA3 +:10392800DA2AE06C00FFD82230072FF8100BCCC140 +:10393800CE2B0000000016A2800379F880037CBC1F +:10394800800094C480037DA800007B088000599CF7 +:10395800D421202D4B981896169414971295908878 +:10396800EDB80002C1314B694B685805F2081700E1 +:10397800201D1AD816985C781ADA1AD84B281ADC3F +:103988004B2C1AD8F01F00322FAD3038F007180032 +:10399800E0880005E06C00FFC8584AE8F0070338E3 +:1039A80050085808C1504A59920A3009F20A1900B9 +:1039B800C0841AD84A484A8C1AD8F01F00252FED1F +:1039C800400CF01F002630094A28F00709391A9CD4 +:1039D800E06A04005016300B1ADC14981AD75C748D +:1039E8001ADB16991AD5089C1ADA169A1AD6F01FF5 +:1039F800001C49282FAD580CC3819088EDB80002EF +:103A0800C1511AD71AD41AD6403850461AD848D8AD +:103A180048B95805F2051700F005171048A81AD537 +:103A2800490C1AD8F01F000A2FAD0E9C400BF01F4E +:103A3800000E301CC3780000000016A280037DC869 +:103A480080037DC4800379C480037DCC800094C446 +:103A580000007B0880037DF88000599C80005D642D +:103A680080037E2480002A689088EDB80002C15146 +:103A78001AD71AD41AD6403850461AD848B848C95E +:103A88005805F2051700F005171048A81AD548ACD4 +:103A98001AD8F01F000A2FAD300948983FFCF007EC +:103AA80009392FEDD822000080037DC480037DC82A +:103AB800800379C480037E50800094C400007B0892 +:103AC800D431584CE081008E580BC2A01785F805F8 +:103AD8001800E081008A179817A7B167EFE81187E7 +:103AE80017B8EFE8108717C8F1E71007C7E80B8980 +:103AF8003018F0091800C7E10B993EE8F0091800E2 +:103B0800C7914C2890093008F0091900C7344C08AF +:103B18001AD54C0C1AD8F01F00402FEDC6B81697CE +:103B28003006C1F80B960BA8F1E610865C86C688AD +:103B380007893018F0091800C72107993EE8F009ED +:103B48001800C6D14B1890093008F0091900C6743E +:103B58004AF81AD34AFC1AD8F01F002F2FEDC5F8DF +:103B68003005C1B80795C61809893018F00918003A +:103B7800C61109993EE8F0091800C5C14A389009EC +:103B88003008F0091900C5644A181AD44A1C1AD812 +:103B9800F01F00212FEDC4E83003C1A80993C50820 +:103BA80009893018F0091800C13109993EE8F0096F +:103BB8001800C0E1495890093008F0091900C0847C +:103BC80049381AD4493C1AD8F01F00132FED06992A +:103BD8000A9AF7D6C0100E9CF01F0010581CC0306F +:103BE800E06C00FFD83230072FF5F6050005C80154 +:103BF800C98B0B833028F0031800C95030062FF307 +:103C0800EA030003C961CADB000016A280037A98A0 +:103C180080037CBC800094C4800039580784301825 +:103C2800F0041800CA0030052FF4E6040004C9D1D6 +:103C3800CB4B09883019F2081800CB1030032FF845 +:103C48001004CAF1CC5B0000D421202D3038169620 +:103C58001494F00B1800E08B0072300750074BA843 +:103C68001188EE081800C0B04B889008EE081900BB +:103C7800C654201D4B684B7C1AD8C0F84B69138971 +:103C8800F0091800C0E14B589008EE081900C56407 +:103C9800201D4AF84B2C1AD8F01F00322FEDC4E82B +:103CA8001A9AE0690400501712981ADAEBDCC0106F +:103CB8001ADB0E9A1AD70E9B1AD40A9C1AD93019F5 +:103CC8001AD7F01F00294A182FAD580CC1B1908897 +:103CD800EDB80002C1114A584A595804F2041700B5 +:103CE800F004171049A81AD64A2C1AD51AD41AD88B +:103CF800F01F001C2FCD0C9C400BF01F001F301C28 +:103D0800C1F89008EE081900C11449884989580477 +:103D1800F2041700F004171048D81AD6497C1AD5AF +:103D28001AD41AD8F01F000F2FCDA17630092FF61C +:103D380049383FFCF0060929C038E06C00FF2FED38 +:103D4800D822000000007B07000016A280037A102A +:103D580080037E80000016AB000016A680037EA0BC +:103D6800800094C480005D6480037DC480037DC8A6 +:103D780080037EB880002A6880037EDC00007B0810 +:103D8800D421583CC661580BC24017843028F0042F +:103D98001800C621179717A8F1E710875C87C5D8C0 +:103DA80009893018F0091800C5D109993EE8F009C9 +:103DB8001800C5814B6890093008F0091900C5241E +:103DC8004B481AD44B4C1AD8F01F00342FEDC4A816 +:103DD80016973006C1B80996C4B80B893018F0098F +:103DE8001800C4B10B993EE8F0091800C4614A886C +:103DF80090093008F0091900C4044A681AD54A6CB9 +:103E08001AD8F01F00262FEDC3883004C1A80B94E0 +:103E1800C3A80B893018F0091800C1310B993EE886 +:103E2800F0091800C0E149A890093008F009190004 +:103E3800C08449881AD5498C1AD8F01F00182FED6C +:103E48000E9C089A0C9B5C7CF01F0015581CC03017 +:103E5800E06C00FFD82230072FF4F6040004CA11E2 +:103E6800CB9B09853018F0051800CB6030062FF57C +:103E7800E8050005CB31CCAB0B883019F2081800E7 +:103E8800CC7030042FF81005CC51CDBB000016A221 +:103E98008003791480037CBC800094C480003C506B +:103EA800D431204D1495740A501A18961788301971 +:103EB800F2081800C771F6C7FFFE1794C1700F8982 +:103EC800F0091800C1310F993EE8F0091800C0E167 +:103ED8004B7890093008F0091900C0844B581AD75C +:103EE8004B5C1AD8F01F00352FED4B189088EDB8B1 +:103EF8000002C0A14AF81AD44B1C1AD61AD51AD8EF +:103F0800F01F002E2FCD3028F0041800E08B004B56 +:103F18003006304030114A624A63C3E80F88E0082F +:103F28001800C4010F990FA8B168F1E911880FB9F9 +:103F3800F1E910880FC92FB7F3E810085807C170C6 +:103F48000F89E2091800C1310F993EEAF4091800F7 +:103F5800C0E18409300AF4091900C0941AD7496CE1 +:103F68001AD35028F01F00152FED400850388489C7 +:103F7800EDB90002C0A11AD84029492C1AD91AD67D +:103F88001AD3F01F000E2FCDF9D6C008FACBFFF4D4 +:103F98002FF6F01F000D0836CC253008301CAAC8B3 +:103FA800C038E06C00FF2FCDD8320000000016A208 +:103FB80080037A4C80037CBC800094C480037F0813 +:103FC80080037F308000C19CD431203D3019149487 +:103FD800189674051788F2081800E0810085F6C75E +:103FE800FFFE1792C1700F89F0091800C1310F99AF +:103FF8003EE8F0091800C0E14BD890093008F009F4 +:104008001900C0844BB81AD74BBC1AD8F01F003B14 +:104018002FED4B789088EDB80002C0A14B581AD20A +:104028004B7C1AD61AD41AD8F01F00342FCD30384A +:10403800F0021800E08B005830064AD04AD1FAC383 +:10404800FFF8C4B80F88304AF4081800C4C10F99A3 +:104058000FA8B168F1E911880FB9F1E910880FC903 +:104068002FB7F3E810085807C1800F89301AF409F0 +:104078001800C1310F993EEAF4091800C0E180091F +:10408800300AF4091900C0941AD749BC1AD150282B +:10409800F01F001A2FED400850288089EDB9000262 +:1040A800C0911AD8497C1AD51AD61AD1F01F001314 +:1040B8002FCD5816C0805826C0B0069B0A9CF01F0A +:1040C8000012C0A8069B0A9CF01F0010C058069B4F +:1040D8000A9CF01F000F2FF60436CB553008301C11 +:1040E800A8C8C038E06C00FF2FDDD832000016A247 +:1040F800800378F080037CBC800094C480037F0830 +:1041080080037F308000CBC88000CA748000CA92C8 +:10411800D421FACD00884C6816979088EDB8000233 +:10412800C0B14C48201D1ADC1AD84C384C3C1AD85F +:10413800F01F00432FCD344A300BFAC6FFFC0C9C0D +:10414800F01F0040306AE06B00FFFACCFFDBF01F85 +:10415800003D0F8A31F8F00A1800E08B008930889A +:10416800EECBFFFFFB68003C0C9CF01F00370F896B +:10417800FB6900244AE89088EDB80002C0A14AE82B +:10418800201D4B2C1AD91AD61AD8F01F002D2FCD66 +:104198000F882FF8FAC6FFB810070C9C0E9B173A29 +:1041A800F01F002BFAC9FF780F88F20800083009C1 +:1041B800F169FFC049E89088EDB80002C0B10F88E6 +:1041C800201D1AD849C81AD64A2C1AD8F01F001C24 +:1041D8002FCD0F8A3018FAC7FFFC3089FACBFFB809 +:1041E8000E9CF01F001D581CC0C0491890093008CB +:1041F800F0091900C3C44908498C1AD81AD8C0E86C +:10420800497CF01F000F0E9C300BF01F001618970A +:10421800581CC080201D1ADC493CF01F00092FEDF6 +:10422800C268492CF01F00060E9CC238000016A276 +:1042380080037A248003787080037F50800094C4C0 +:104248008002E8BC8002E73680037CB08002EE0C76 +:1042580080037F648001908480037F7880037FA03F +:10426800800099A880037FB880037FC0E06C00FFBE +:104278002DEDD822D42120AD4A461697178A31F859 +:10428800F00A1800E08B002FFAC5FFF92FFB0A9CF3 +:10429800F01F001F0F88FAC9FFD8FB680027100914 +:1042A8003008F368FFDF8C88EDB80002C0814998B8 +:1042B8001AD5499C1AD8F01F00192FED300BFACCEB +:1042C800FFF9F01F00171897581CC1B048F890095B +:1042D8003008F0091900C1541ADC48E8491C1AD8FA +:1042E800C0D88C093008F0091900C0353FF7C098CC +:1042F800201D488848CC1AD83FF7F01F00082FED3A +:104308000E9C2F6DD8220000000016A28002E7360E +:10431800800378E080037B18800094C4800099A80B +:1043280080037D5480037FC4D431216D4D281697B6 +:104338009088EDB80002C0B14D08201D1ADC1AD8CB +:104348004CF84D0C1AD8F01F00502FCD321AFAC66F +:10435800FFFD300B0C9CF01F004D0F8A31F8F00A5E +:104368001800E08B0085EECBFFFF0C9CF01F004887 +:104378000F88FB6800234C089088EDB80002C081C4 +:104388004BF81AD64C3C1AD8F01F003F2FED0F8679 +:104398002FF6EE060006FAC7FFAC0C9B0E9C173AE8 +:1043A800F01F003D0D88FAC9FFA8F20800080E9C0E +:1043B8003003F163FFFCF01F00393038EFDCC00830 +:1043C8000D89F00718005FB53018F00918005F185C +:1043D80010450A94E6051800C4A1ECCBFFFDFAC30A +:1043E800FFDC2FE6069C0D8AF01F002B0D88FAC90A +:1043F800FFA8F2080008069BF165FFCCFAC5FFC0CC +:104408000A9CF01F002730D81896F00C18005F1986 +:104418003058F00C18005F18F3E80008E808180096 +:10442800C261FAC4FFB2306AE06B00FF089CF01F5B +:1044380000170C9B08990A9A0E9CF01F001A0E9CF4 +:10444800F01F0019300BFACCFFFDF01F0018581CA4 +:10445800C100489890093008F0091900C0844888BC +:104468001ADC493C1AD8F01F00082FEDE06C00FF59 +:104478002EADD832000016A280037888800379AC6C +:1044880080037F50800094C48002E8BC8002E73635 +:1044980080037FE48002EE0C8002DC2C80009868A8 +:1044A8008001927080019258800099A880037D5401 +:1044B800D401319CF01F0010E06B00EFFE7C280057 +:1044C800F01F000E581CC060FE7C2800F01F000C76 +:1044D800CFC0319CF01F000B48B890093008F00994 +:1044E8001900C0844898201D489C1AD8F01F00095C +:1044F8002FEDD8028000A3008000A7FA8000A7F261 +:104508008000A2E6000016A28003790880037FF0ED +:10451800800094C4D431202D3008FAC7FFF81696CD +:10452800189514930EE81694098B0A9C2FF4F01F23 +:104538000009581CC0B00E9B0A9CF01F0007089881 +:104548000C18E6081900CF13300C2FEDD8320000F4 +:104558008000A7FA8000A816D421202D30081496D0 +:10456800F80C002C129AFAC9FFF812E84A88F00CE5 +:10457800002C169578280C9B0A9C5D184A583049DF +:10458800319C9109F01F00249ABA0C9BFE7C2400F0 +:10459800F01F00221897319CF01F00214A189088BC +:1045A800EDB80002C0414A0CF01F002049D890889D +:1045B800EDB80002C0D149E8201D49EC1AD8F01F17 +:1045C800001B49D80A9C908BF01F001C2FED4958FE +:1045D8009088EDB80002C041499CF01F00144918AA +:1045E8009088EDB80002C0C14918201D491C1AD88E +:1045F800F01F000E9AFB0C9CF01F00102FED9A394B +:1046080049080E9CB0092FEDD8220000000011E0E7 +:10461800000011B88000A3008000451C8000A2E6BD +:10462800000016A080038008800094C480037800EE +:1046380080037C84000011BE80013DB48003800C9F +:10464800000011BCD431202D4BC43048E8C3FFF022 +:10465800BAF81897199616910C90F8C2FFFD2FC456 +:104668003005E21000400988EC081800C4B107883A +:104678003029F2081800C1F10A9C4B08EA05002508 +:10468800029AF00500240E9BE8C5FFF46839F01F74 +:10469800002CC030301CC4E868086A0A049B0FACC0 +:1046A8005D18BAFCE216004030181BF9F009180032 +:1046B800C3C1C3D85800E00A1700F9BA0100E8F8E6 +:1046C800FFFC049B0FAC5D18BAFC30190788F20890 +:1046D8001800C0B10A9C4998EA050025029AF0051D +:1046E80000250E9B6A39C0A83049F2081800C0A1FD +:1046F800029A0E9B0A9CFAC9FFF9F01F0011C170BB +:10470800C1882FF52EC42EC3E0450024CAD148D84D +:1047180090093008F0091900C08448B81AD648BC76 +:104728001AD8F01F000B2FED302CC048304CC02891 +:10473800300C2FEDD8320000000011E080004560F9 +:10474800000016A28003789880038010800094C42B +:10475800D421202D4BD8910C30094BD8118AF20A5C +:104768001800E08000DAB08930085018E1B800007D +:10477800EE180001F5D8C201C020D303FE7824004A +:104788003019706BF7D9D001916B706BF7D9D0C124 +:10479800916B706BF7D9D081916B580AC020D50303 +:1047A8004AC7FACAFFFC6E0B4ABCF01F002C1896C9 +:1047B800C6E04AB8303A6E09910A401B4A98161961 +:1047C800B009E06A03FFF4091900E0880005E06910 +:1047D8000400B0094A064A37EC0B000B4A2C8E8AB3 +:1047E800F01F002230084A2BAC8849FCF01F00213A +:1047F800584CC2204A089088EDB80002C0C149F858 +:10480800201D49FC1AD8F01F001F8E8B496CF01F21 +:10481800001E2FED49889088EDB80002C0D1497874 +:10482800201D497C1AD8F01F00174988490C908B25 +:10483800F01F00152FED4879300893084899B20801 +:1048480048799308C46800000000152C0000151C66 +:10485800000014B0000014B880002D70000011B8DA +:10486800000011BE00000DB88002E736000009B84C +:104878008000464C000016A0800379D880037C8411 +:10488800800094C480013DB4000011BCF01F0024D6 +:104898004A489008EC081900C0A44A3890881AD8E9 +:1048A8004A284A3C1AD8F01F00232FED4A289009BD +:1048B8003008F0091900C0644A084A1C909BF01F90 +:1048C80000214A19300893084A09B20849C9B28830 +:1048D800E06B0120FE7C0D80F01F001DE1B8000098 +:1048E800EE180001F5D8C201C020D303FE782400D9 +:1048F8003019705BF7D9D001915B705BF7D9D0C1E3 +:10490800915B705BF7D9D081915B580AC020D503C1 +:10491800319CF01F00102FEDD8220000800044B811 +:10492800000016A2000014B4800379D88003802CFC +:10493800800094C4000016A6000014B0000014B84B +:1049480080013DB4000011B8000011BE8000A20033 +:104958008000A300D431207D4B6730054B664B782F +:104968001188EA081800EC081710EE0817004B4CDD +:104978001AD8F01F00344B481188EA081800EC07D1 +:1049880017104B2C50074B2230074B23F01F002DDC +:104998000E942FED4B01CBD86A005800E08000B28E +:1049A80080286009201D1AD95028F01F002C602A81 +:1049B8002FFD580AE60A1700E20A171040185C781B +:1049C80060491AD84A681ADC1ADA4A6A5809F40996 +:1049D8001700F00917104A4C1AD91AD01AD61AD744 +:1049E800F01F001860482F8D5808C431E0C9FFBC7B +:1049F800720A580AC0E0744B201D49CC1ADB1ADA37 +:104A08001AD850595048F01F000F2FCD40084019B0 +:104A18002FF82FC95848CED161585808C610704988 +:104A2800493C1AD91AD8F01F00072FEDC598000085 +:104A3800800380548003805C000016AB8003806094 +:104A4800800094C400007B078003807400007B080A +:104A580080037BE480037BDC800096A880037DC410 +:104A680080037DC880038088800380B8800380D05D +:104A780061E85808C350F11900127008201D1AD8AF +:104A8800507850395028F01F002761EA2FFDF53B78 +:104A9800001040291AD940281AD81ADC4A2C1ADBE7 +:104AA8001ADA50B8F01F0021FACAFFE00C9B5084B4 +:104AB800FB5400240E9CF01F001E2FBD40305050A8 +:104AC8001AD0FB1800145028F01F00162FFD4018AC +:104AD8001AD81AD01ADC497CF01F00142FCD0E9C6E +:104AE800F01F001549594968580CF2081710201D85 +:104AF800494C1AD8F01F000D493CF01F000C2FED4F +:104B08002FF62FC55826FE91FF492FF75847C0505A +:104B1800E40700353006C41BF01F000C2FADD83257 +:104B2800800096A8800380E8800094C4800021C893 +:104B380080038114800070788003812C8003812891 +:104B480080038130800381408000D680D431204D9D +:104B58004BE812911896169711895809C1A119881E +:104B6800B6881998EA18FFFFE818FF80B6C9B69802 +:104B7800B6A93EE8B6B83048A2084B589088EDB8B8 +:104B88000002E08100E7201D4B284B3C1AD8C228C0 +:104B9800FACCFFF4F01F0031403366105800C1E131 +:104BA8000D88AE880D98EA18FFFFE818FF80AEA0C0 +:104BB800AE9830093EE8AEC9AEB83048A2084A48B7 +:104BC8009088EDB80002E08100C5201D4A184A4CC3 +:104BD8001AD8F01F00242FEDCBC858B0F9B0020A3C +:104BE80030044A12C0786408F004032C2FF4F01F34 +:104BF800001F641849C51034CF736A0C3004F01FC5 +:104C0800001B8B14661B580BC460A36B301CF01F71 +:104C180000188B0CC3A1497CC1486608F002030B3D +:104C28006A080408501B5008F01F00134008910C34 +:104C3800401B6A082FF4F002030C580CC20148FC10 +:104C4800F01F0008C2880000000016AA000016A283 +:104C58008003783C8003816080018F048003817C1D +:104C6800800094C4000015208002E28C8002DC3CA5 +:104C7800800381988002E2A4800381C0344AF01F37 +:104C880000376A182FF88B18E8021502344C66189A +:104C98001034CC430D88AE880D98EA18FFFFE81849 +:104CA800FF803005AE98AEA030364AD20A984AD96D +:104CB8000E93640AEA0B1502F40B030AF537002079 +:104CC800F4070B08ECCCFFFF2FF7E60C000C5C5741 +:104CD800300AE6060B07C0886404E80B0304E80AF8 +:104CE80007042FFA18C40E9EEE0A1900CF630E9A15 +:104CF8002FFAF4060006928A5C56EDBA0002C1D17A +:104D0800640A202DF40B0304503950281A9C306A89 +:104D1800E8CBFFDFF01F001168CA1ADAE93A003859 +:104D28001ADA491A1AD7491C1AD41AD51ADAF01FEE +:104D380000102F8D400840192FF50035CBB53EE8FF +:104D4800E6060B08069730080C07AE982FF6A20661 +:104D5800302C2FCDD83200008002E7360000152015 +:104D6800000016A28003783C800381E4800094C48C +:104D780048781188580CC0215EFF5C68100C300818 +:104D8800F9390015F00918005F1C5EFC00001530A9 +:104D9800D4211897580CC2A04968F129000030089E +:104DA800F2CA0004F00900065836F5D8E9062FF8CB +:104DB800EE06002C791C163CC17148F89088EDB8B5 +:104DC8000001C0A148D81ADB48DC1AD61AD71AD86D +:104DD800F01F000C2FCDF9D6C00830082F06EE06BC +:104DE80000278F18D8225848CDE1E06C00FFD82260 +:104DF80000001530000016A2800382688003830437 +:104E0800800094C4D42118971695580CC2B04978DC +:104E1800F12900003008F2CB0004F00900065836EA +:104E2800F7D8E9062FF8EE06002A751A580AC03096 +:104E38000A3AC16148E89088EDB80001C0A148D895 +:104E48001AD548DC1AD61AD71AD8F01F000C2FCD5D +:104E5800EE060027F9D6C008EF450044D822584886 +:104E6800CDD1E06C00FFD82200001530000016A25A +:104E780080038CF080038304800094C4D4211897A5 +:104E8800580CC2A049E8F12A00003008F4CC00040C +:104E9800F00A00065836F9D8E9062FF8EE06002978 +:104EA80073195809C170580BC0F049689088EDB85B +:104EB8000001C0A149481AD9494C1AD61AD71AD89C +:104EC800F01F00132FCDEE06002748D8B0866F1CC0 +:104ED800D8225848CDE1580BC10048A8900930089D +:104EE800F0091900C0A448881AD748AC1AD8F01F8E +:104EF8000008300C2FEDD822D82A00000000153009 +:104F0800000016A280038CB880038304800094C438 +:104F180080038324D4214CB816951188189730063D +:104F2800EC081800E08000B6300BF01F004718941A +:104F38005807E0800097580C5F19EC0518005F08C7 +:104F4800F3E81008EC081800E080008C4BF8908813 +:104F5800EDB80002C3314BE811894BE89088EDB8F1 +:104F68000001C2C15C69EE09002871185808C041E7 +:104F7800109E1096C098EE09000AF53E0015F2CA78 +:104F8800FFF8EE0A03266F5A201D580AF40C170082 +:104F9800F5FC10045808F00B1700F1FB10041ADE9A +:104FA8001AD61ADC1ADA1ADB1AD84AB81AD74ABC3F +:104FB8001AD91AD8F01F002A2F6D5805C3D068488F +:104FC80058485F1958085F181268C3304A08118991 +:104FD8004A089088EDB80001C2C15C69EE09002852 +:104FE80071185808C04110951096C098EE09000A2B +:104FF800F5350015F2CAFFF8EE0A03266F5A201D90 +:10500800580AF40C1700F5FC10045808F00B1700A8 +:10501800F1FB10041AD51AD61ADC1ADA1ADB1AD8D8 +:1050280048D81AD748DC1AD91AD8F01F000D2F6DA6 +:10503800E93C0013D8226F58F13C0013D822000035 +:10504800000016AB80004E84000016A80000153042 +:10505800000016A28003828C80038348800094C4D9 +:1050680048D890093008F0091900C1345807EE08EB +:105078001700EE041700EFF810151AD848781AD45C +:10508800487C1AD71AD8F01F0007300C2FCDD82229 +:10509800D82A0000000016A88003828C8003838C25 +:1050A800800094C4D421580CC25049D8F12900007A +:1050B8003008F2CA0004F00900075837F5D8E907A4 +:1050C8002FF8F807002E7D1E163EC12149589088FA +:1050D800EDB80001C0A149481ADB1AD71ADC493CCF +:1050E8001AD8F01F00132FCD0E9C5C5CD8225848AC +:1050F800CE31490890093008F0091900C045E06C24 +:1051080000FFD8224888201D1ADB1ADC48AC1AD8C0 +:10511800F01F0007E06C00FF2FCDD82200001530EB +:10512800000016A6800382BC80038304800094C418 +:10513800000016A2800383C0D421580C5F18580BB6 +:105148005F1918961695F3E800081494C590580A44 +:10515800C5704AC89088EDB80001C0C114985C7841 +:10516800201D1AD84A881ADB4A8C1AD8F01F002842 +:105178002FCD4A889088EDB80001C0D14A28201D5B +:105188004A5C1AD8F01F0022089B0A9C5C7BF01F1F +:1051980000232FED300A5C74149C089BF01F00203C +:1051A8001897C0E149789008F8081900C29449682E +:1051B8001AD649CC1AD8F01F00162FEDC1C8089A84 +:1051C8000A9B781CF01F00180E9B6DECF01F00174F +:1051D8005C5CC12048B890093008F0091900C08407 +:1051E80048981AD6492C1AD8F01F00092FED0E9CA2 +:1051F800F01F0010DC2A0E9CF01F000EDA2ADC2AB1 +:10520800000016A280038CE4800383E8800094C425 +:10521800000016A080037C8480013DB48000D31870 +:10522800800383FC8002E7368001153880038428D8 +:105238008000D13CD421149518971696580CC0417B +:10524800E06C00F6D822F01F00163FF8E9DCC00831 +:10525800F0041800C041E06C00FFD822491890887B +:10526800EDB80001C0E16C48201D1AD848E85C651B +:1052780048EC1AD51AD61AD71AD8F01F000D2FAD38 +:105288006C4858485F0948B8B0893008EE040004F3 +:10529800E9680068F01F00088F7CD82A800050ACAD +:1052A800000016A280038D1080038450800094C4EF +:1052B80000007B0780009504D43118971695F01FDD +:1052C80000353FF8EDDCC008F0061800C5E0EE0632 +:1052D80000083009F1690015ECC8FFF8EE0803244E +:1052E8005804C5304AC89088EDB80001C0A14AB832 +:1052F800201D4ABC1AD41AD41AD8F01F002A2FCD60 +:10530800EB1800726EF91238F20817B00838F0047A +:1053180017804A589088EDB80001C051F01F00234B +:105328004A38910CECC8FFEA3019EE08032B089AAA +:105338000A9C5C7AF01F001FE7DCC008C19049A8EE +:105348009088EDB80001C0F16A48201DF3D3B00879 +:105358001AD91AD41AD849181AD5497C1AD8F01F5C +:1053680000112FAD0C073008EF680015C10830197F +:10537800ECC8FFF8EE060006ED690015EE080329F3 +:105388000819EE080929C038E06300FF069CD832E6 +:10539800800050AC000016A680038C7880038474CB +:1053A800800094C4000016A2800095040000153403 +:1053B800800109C08003848CD43116941493189703 +:1053C800580CC1014AB89008F8081900E08400D3C5 +:1053D8004A98201D4A9C1AD8F01F00293FFC2FED3F +:1053E800D832300BF01F0027189B18960E9CF01F20 +:1053F80000263FF8EBDCC008F0051800E08000BB91 +:105408004A289088EDB80001C0E1F1D3C010201DF2 +:105418001AD849981AD449EC1AD61AD71AD8F01FAC +:1054280000182FAD49B89088EDB80001C0D14928BF +:10543800201D499C1AD8F01F0012F7D3C010089CF1 +:10544800F01F00162FED49189088EDB80001C4B17F +:105458004938118948789088EDB80001C4415C69E1 +:10546800EE09002871185808C1C11092109EC21880 +:10547800000016A280038D20800384C0800094C49D +:1054880080004E84800050AC000016A6800384D8AB +:10549800000016A080037C8480013DB40000153014 +:1054A800EE09000AF5320015F2CAFFF8EE0A032EDB +:1054B8006F5A201D580AF40C1700F5FC1004580800 +:1054C800F00B1700F1FB10041AD21ADE1ADC1ADAF4 +:1054D8001ADB1AD84A881AD74A8C1AD91AD8F01F50 +:1054E80000282F6D5806C46058045F183009F2036D +:1054F80019005F1AF5E80008F2081800C3B0EAC8F6 +:10550800FFEAEE08032C580CC3506C4858785F0B20 +:1055180058485F0AF7EA100AF20A1800C0515828DA +:10552800C0305838C2715C73089B069AF01F00158A +:10553800EAC9FFEA300AEE090328F0030B0A4928F2 +:105548009088EDB80001C0A1EE0903281AD848A830 +:1055580048EC1AD8F01F000A2FED48DB0C9C2F8569 +:10556800EE050923F01F000B0C9B0E9CF01F000A90 +:10557800DA3ADC3A80038D2080038348800094C4A3 +:105588008002E736000016A6800384FC800055A040 +:105598008000D662800052C0D431149518971696B0 +:1055A800580CC041E06C00F6D832F01F001D3FF8DF +:1055B800E9DCC008F0041800C041E06C00FFD832F4 +:1055C8003009EE040008F16900683019F169001526 +:1055D80049489088EDB80001C171E8C8FFF8EE08A5 +:1055E8000323F01F00114918201D1AD37008F8086A +:1055F80001081AD848E85C7548EC1AD51AD61AD8A2 +:10560800F01F000D2FAD2F84EE04032C580CC06042 +:105618000C9B0E9CF01F0009300CD832800050AC57 +:10562800000016A2800095040000153480038D50F8 +:1056380080038508800094C4800052C0D421189744 +:10564800580CC1C0F01F000E18965BFCC060EF3B01 +:10565800000B5C5CF01F000B48B89088EDB80001A7 +:10566800C0A148A8201D48AC1AD61AD71AD8F01FCE +:1056780000092FCD30094888B089D82280002044FD +:1056880080002068000016A280038D3C80038538C6 +:10569800800094C400007B07D4314898189711897A +:1056A80048889088EDB80001C3015C69F8090028B2 +:1056B80071185808C08110951096C0D80000153090 +:1056C800000016A2F809000AF5350015F2CAFFF81D +:1056D800F80A03266F5A201D580AF40C1700F5FC27 +:1056E80010045808F00B1700F1FB10041AD51AD64D +:1056F8001ADC1ADA1ADB1AD84C281AD74C2C1AD901 +:105708001AD8F01F00422F6D0E9C3005F01F004084 +:10571800EEC6FFBC0A924BF34BA45C5CF01F003E44 +:105728006C08300B2FF5109C5808C1D0F01F003BB7 +:105738006C0C300BF01F003A6C0C300BF01F00396A +:105748006C0C300BF01F00388688EDB80001C0B132 +:10575800201D1AD26C0870484B4C1AD81AD4F01F66 +:10576800002B2FCD2FC65845CDC16F5C580CC1D02A +:10577800300BF01F002A300B6F5CF01F002D6F5CA0 +:10578800F01F002C4A385C5C9088EDB80001C0D14D +:10579800201D5C6C1ADC6F5870481AD849984A6CFE +:1057A8001AD8F01F001A2FCD6FEC580CC060F01FEC +:1057B80000236FECF01F00224A28F1260000495808 +:1057C8009088EDB80001C0E1ECC8FFEAEE080328B4 +:1057D800201D1AD848B81AD649BC1AD8F01F000B91 +:1057E8002FCD2EA6EE06032C580CC060F01F001714 +:1057F8003008EE0609280E9CF01F0014D83200006D +:1058080080038CC880038348800094C480002044AF +:10581800000016A280006F288000D6588000D6624B +:105828008000D65C8000D668800385608000D66ED4 +:105838008000E50480038588800111C88001122852 +:1058480000001530800385B08002E28CD4211897BF +:10585800580CE080007EF01F00413FF8EDDCC008E6 +:10586800F0061800C750EE0600287114089CF01FB7 +:10587800003CEBDCC008C0D10A9B089CF01F003933 +:105888000A9B089CF01F00380A9B089CF01F0037F1 +:105898004B789088EDB80001C0D1F1D5B0081AD87E +:1058A80068481AD84B381AD44B3C1AD8F01F003322 +:1058B8002FCD4AF43FF8F0051800C1718809300867 +:1058C800F0091900C0D4EE0600287118201D1AD856 +:1058D8004AB81AD64ABC1AD8F01F00282FCD0C0790 +:1058E8003018EF68006CC368EE0600083009F169EB +:1058F800006CEE0600280E9C711BF01F00238888A0 +:10590800EDB80001C0E1ECC8FFEAEE080328201D4D +:105918001AD849B81AD649DC1AD8F01F00182FCD62 +:105928002EA6EE06032C580CC060F01F0019300894 +:10593800EE06092848E89088EDB80001C0B149088A +:10594800201D494C1AD8F01F000D2FEDC038E06516 +:1059580000FF0A9CD8220000800050AC8000E504BB +:105968008000D6588000D6628000D65C000016A25F +:1059780080038D2C800385CC800094C480038CD850 +:10598800800385F880004D98800385B08002E28C02 +:1059980080038624D4211897580CC0E14BE890085E +:1059A800F8081900C7744BD8201D4BDC1AD8F01F13 +:1059B800003D2FEDD82278264BB85806C121F12595 +:1059C8000000F01F003A0E9CEF34000BF01F003867 +:1059D800089B5C5CF01F00370A07EF660068D82256 +:1059E80011894AD89088EDB80001C2C15C69F809EC +:1059F800002871185808C04110951096C098F809E9 +:105A0800000AF5350015F2CAFFF8F80A03266F5A9E +:105A1800201D580AF40C1700F5FC10045808F00B68 +:105A28001700F1FB10041AD51AD61ADC1ADA1ADB99 +:105A38001AD849A81AD74A0C1AD91AD8F01F001927 +:105A48002F6D4998F1260000ECC5FFF0EE05002502 +:105A58006A1C580CC1F078485898C1C05808C1A0B1 +:105A6800F01F001648C85C5C9088EDB80001C0C102 +:105A7800201D5C6C1ADC6A181AD84888490C1AD898 +:105A8800F01F00082FCDEE0600260E9C6D1BF01FA0 +:105A9800000DD822000016A2800382988003864455 +:105AA800800094C400001530800056A08000204477 +:105AB800800020688003834880010CEC8003865CAA +:105AC80080005854D4214B0818979009169630082E +:105AD800F0091900C0F44AD8F12800001AD8F1DBFF +:105AE800B0081AD84AA81ADC4AAC1AD8F01F002AFB +:105AF8002FCD4AA811893008F0091800C0414A8CF6 +:105B0800F01F00253FB8F0061800C3C15807C110A0 +:105B180049E830091188F2081800C0B53039F20890 +:105B28001800E08900075C68EE080028711BC0288F +:105B3800300B0E9CF01F001B49389088EDB800010F +:105B4800C1114928F1280000201DF0C9FFEAEE091B +:105B580003291AD91AD848E8493C1AD8F01F000E68 +:105B68002FCD48A6ED2800002EA8EE08032C580CCF +:105B7800C090F01F000EED28000030092EA8EE0896 +:105B88000929D822000016A200001530800382A837 +:105B980080038680800094C4000016AB800386B41E +:105BA80080004D98800385B08002E28CD42118973C +:105BB8001696580CC4E04A8890093008F009190074 +:105BC800C0C4F1DBB0081ADC1AD84A481ADC4A4CBF +:105BD8001AD8F01F00242FCD4A3811893008F0094F +:105BE8001800C0414A1CF01F001F3FB8F0061800FB +:105BF800C301499890093008F0091900C084497810 +:105C08001AD749BC1AD8F01F00172FED0E9CF01FA9 +:105C180000194998F126000048F89088EDB800016D +:105C2800C0E1ECC8FFEAEE080328201D1AD848B8DE +:105C38001AD6492C1AD8F01F000B2FCD2EA6EE0627 +:105C4800032C580CC060F01F000E3008EE0609281F +:105C5800D8220000000016A2800382D0800386C8E4 +:105C6800800094C4000016AB800386B4800386F8D5 +:105C78008000564400001530800385B08002E28C15 +:105C8800D4311897149678CC94CAF80A000A8FCAA7 +:105C98001093169512946E385808C1504A5CF01F3C +:105CA8000026EF18001A3509F0090D083008F00928 +:105CB8001900C0414A1CF01F0020EF08001A2FF8F5 +:105CC800EF58001A49E89088EDB80001C171202DFD +:105CD800304A1A9C089BF01F001BF01F001BEF386E +:105CE8000014F3D3C01050091ADC1AD849781AD610 +:105CF800497C1AD8F01F00102FAD0A9AEF3B001408 +:105D08000C9CF01F001409890998B168F1E9118801 +:105D180009A9F1E9108809BBEF3C0014F5D3C010BC +:105D2800104BF01F000D0C9CF01F000CD832000027 +:105D380080037FB4800094C4800384D4000016A23A +:105D48008002E736800096A88003827C800387184B +:105D580080007130800020088000D13CD431204D73 +:105D6800502C503BFAC4FFCC10916800681268238D +:105D780068386846129568545819E088000E4B58E0 +:105D880090093008F0091900E08402B0201D4B2862 +:105D98004B2C1AD8C2F85801C0C14AE89008E2084A +:105DA8001900E08402A3201D4AB84ADC1AD8C22888 +:105DB8005802C0C14A789008E4081900E0840296A5 +:105DC800201D4A584A7C1AD8C158501A500837CB57 +:105DD800301CF01F0025401A18974008C10149D807 +:105DE8009008F8081900E0840281201D49A849FCA0 +:105DF8001AD8F01F001F2FEDE08F0278402999383C +:105E0800B829300840395C729900B831992599DA77 +:105E180099E999F29943F9480050F9480044F9483A +:105E28000048F948004C5803E080008C3058F95875 +:105E38000074F01F0010EF4C00784865580CC1D171 +:105E48008A08F8081900E084020C1AD748A8C8582C +:105E5800000016A280038CA880038744800387640F +:105E6800800387848002DC3C800387A8800094C478 +:105E780080011200800382F88A88EDB80001C131E0 +:105E88006E08201D8EA51AD8F01F00366FE8500541 +:105E98001ADC1AD84B481AD84B484B5C1AD8F01F52 +:105EA80000352FAD6E258EAA6FEC5805C1210E9BCB +:105EB800F01F00315C5CC2504B089008EA081900DA +:105EC800E08401CF1AD74A984ADC1AD8E08F0175C6 +:105ED8004ACBF01F002DF5DCC008C0E04A789009D5 +:105EE8003008F0091900E08401BC201D5C6A49F8FB +:105EF8001ADA1AD7C499EF3C0014149BF01F002338 +:105F08006FEC0E9A4A2BF01F002349C8908CE21CB4 +:105F18000002E08001A76FE8F11900141AD970197E +:105F28001AD9F11900121AD970081AD848E81AD8DB +:105F380048E8499C1AD8F01F000F2FADE08F018F59 +:105F4800F01F00161892C2F148C89008F808190006 +:105F5800E08401871AD749281AD8492CC2D90000E9 +:105F6800800096A88003825C800382F88003880CF6 +:105F7800800094C480011320000016A280038824A6 +:105F88008003B409800112608000200880005C88CA +:105F9800800111F8800388848000E34080038C6CC2 +:105FA800800387E04B880E9BB083F01F0038EF63B7 +:105FB800006FEF63006CEF63006DEF63006E6E2897 +:105FC8004B355808E08100BD049B0E9CF01F003142 +:105FD800E7DCB0086EFCF01F0030E6C8FFEAEE0808 +:105FE800092C8A88EDB80001C0A14AC8201D1ADC16 +:105FF8004ABC1AD31AD8F01F002B2FCD2EA34A451E +:10600800EE0303285808C0B18A09F0091900E08492 +:1060180001281AD74A184A4C1AD8CCE84A3B049C9B +:10602800F01F00234A3B049CF01F00234A3B049CBA +:10603800F01F0023304A4A3B049CF01F00234A38D3 +:106048003009B0898A88EDB80001C0C1EE03032881 +:10605800201D1AD849181AD249DC1AD8F01F001185 +:106068002FCD4898118948A89088EDB80001C5310E +:106078005C69EE09002871185808C2B11093109590 +:10608800C3080000000015308000D658000016A292 +:1060980080004E0C8002E2A480038C6C800388A8E8 +:1060A800800094C4800388C480005BB48000D668F4 +:1060B800800069888000D65C800055A08000D66288 +:1060C800800067B48000D67200007B07800388F4E4 +:1060D800EE09000AF5330015F2CAFFF8EE0A0325A7 +:1060E800201D5808F00B1700F1FB10046F5A580ACE +:1060F800F40C1700F5FC10041AD31AD51ADC1ADAB6 +:106108001ADB1AD84B681AD74B6C1AD91AD8F01F51 +:1061180000362F6D049C4B598EAA0E9BF01F00343D +:106128005C5CE080009F4B3890093008F00919004A +:10613800E08400971AD74AA84AFC1AD8C3D88A8894 +:10614800EDB80001C0F1301B0E9CF01F002C6F58F9 +:106158001ADC1AD84A281AD74A9C1AD8F01F0022E3 +:106168002FCD8EAA4A7B049CF01F00275C5CC120BF +:106178004A0890093008F0091900C724201D5C6CF2 +:1061880049781ADC1AD71AD84A0CF01F00172FCDF5 +:10619800C678049CE06B00FFF01F001DEF4C005414 +:1061A8004945580CC0D18A08F8081900C5941AD76F +:1061B80048B8498C1AD8F01F000C2FEDC5188A88EA +:1061C8004959E21800021389C4505C69EE09002895 +:1061D80071185808C2211095109BC27880038C6CE6 +:1061E80080038348800094C48000523C8000E350C0 +:1061F800000016A28003891080004E84800389382D +:106208008003B4098000D7708003884C8000DC04C8 +:106218008003896400001530EE09000AF535001581 +:10622800F2CAFFF8EE0A032B7843201D5808F00A3B +:106238001700F1FA10041AD51ADB1AD31ADC1ADA85 +:106248001AD84AC81AD74ACC1AD91AD8F01F002B1C +:106258002F6D4ABB6F5CF01F002B300CC0283FFC31 +:106268004A95580CC0E08A093008F0091900C3A4FF +:106278004A68201D4A6C1AD8F01F00202FEDC32849 +:106288008A88EDB80001C2914A284A396E204A31FD +:106298005800F2001700F00017108E226E484A09C5 +:1062A8006EF35808F20117108E355818C0316FEC8C +:1062B800C058301B0E9CF01F001B49481AD05C7256 +:1062C8001AD15C751AD21AD31AD51ADC496C1AD7A6 +:1062D8001AD8F01F000A2F8D8907EF660014300CBA +:1062E800C0580E9CF01F00113FFC2FCDD832000083 +:1062F80080038C6C80038348800094C480006434DD +:106308008000D66E000016A280038CA880038988BE +:1063180080037BDC80037BE480037DC880037DC42D +:1063280080004E84800389A8800056A0D431203D87 +:10633800300730194B38E06504001892169191091E +:10634800E06007D00A9350070E964AF4C22826CC7C +:1063580058ACE08B001F4ADEFC0C032F3016C198A6 +:106368003006C178680CF01F002AE7DCB010C118AD +:1063780030185008C0E8680CF01F0025EBDCB0109E +:10638800C0883017C068680CF01F0021E1DCB0102D +:106398004A0A029B049CF01F00205BFCCD91580622 +:1063A800C161498870080438C0A4E208032BFACCFC +:1063B800FFF8F01F001A402B580BC0A14988201D78 +:1063C800498C1AD8F01F00182FEDC198300B502BAC +:1063D800F1D5C0100C99FAC5FFFC300650161AD535 +:1063E8001AD6402E5C731ADEF9D0C0101AD70C9A50 +:1063F8001AD31ADB0C9BF01F000D2FAD2FDDD83AF6 +:1064080000007AB800007AC0800382208002DC2C69 +:10641800800389E08002E278800098FC0000000C8C +:10642800800389EC800094C480005D64D4211897AF +:106438001696580CC041E06C00F6D8224C1890888B +:10644800EDB80001C0A14C08201D1ADB1ADC4BFC7A +:106458001AD8F01F003F2FCD4BA89088EDB8000147 +:10646800C0F16C481AD8ED1800241AD8ED18001C91 +:106478001AD84B584B7C1AD8F01F00352FCD0C9BDF +:106488000E9CF01F0035EDDCB008ECC8FFEAEE0802 +:1064980003285808C0804B18201D4B1C1AD8F01F21 +:1064A800002C2FED6EFCF01F002FECC8FFEAEE0861 +:1064B800092C4A489088EDB80001C0A14A28201D3F +:1064C8001ADC4A9C1AD61AD8F01F00212FCDECC826 +:1064D800FFEAEE0803285808C10149A99209F00902 +:1064E8001900C08449881AD74A0C1AD8F01F001816 +:1064F8002FEDE06C00FFD8220E9B2F06EE0600263B +:106508006C1CF01F001B49BB6C1CF01F001B49BB17 +:106518006C1CF01F001B6C1C304A49ABF01F001AA2 +:106528000E9CF01F001A583CE08B00075C5C300A98 +:106538000E9BF01F0017F01F00178F7CD82A000051 +:10654800000016A2800382E8800389F0800094C4CA +:1065580080038A1480004E0C80038A3880039DC013 +:106568008002E2A4800388A8800388C48000D658EB +:10657800800069888000D65C80005ACC8000D6688C +:106588008000659C8000D6728000204480002A002C +:1065980080009504D43118971695580CC041E06CCA +:1065A80000F6D832F01F00473FF8EDDCC008F006CF +:1065B8001800C041E06C00FFD832ECC8FFF8EE08C4 +:1065C80003285808EFD6E108F1F91868F7B901FF70 +:1065D800F1F91E68EE0600083049F1380068F20843 +:1065E8001800E088001E4B89920A3009F20A190047 +:1065F800C0A41AD84B581AD74B5C1AD51AD8F01F12 +:1066080000352FCD0C070A9C3006301BEF6600685A +:10661800F01F0031E06C00FBEF66006CD8325805C3 +:10662800C1504AE89088EDB80001C101EAF800A815 +:106638001AD8EAF8009C1AD8EB3800AD1AD84A38AC +:106648004A7C1AD8F01F00232FCDECC8FFF8EE08BB +:1066580003245804C1D049C89088EDB80001C1810D +:10666800EE060008301BF1330068F132006C0E9C16 +:10667800F01F001C4958201D1AD41AD21AD31AD751 +:106688001AD51ADC498C1AD8F01F00122F8D0A9BD4 +:106698000E9CF01F0016EE0600033002E738006C6F +:1066A800E4081800C7100A9CF01F00113FF8E9DC45 +:1066B800C008F0041800C1D13018E768006CC4A8FD +:1066C800800050AC000016A280038C8C80038A4C9A +:1066D800800094C48000E124000016A880038A7C0E +:1066E80080004E8480038AB0800052C08000E50498 +:1066F800EE060028E762006C711B0E9CF01F002359 +:106708004A389088EDB80001C0E1ECC8FFEAEE080D +:106718000328201D1AD849F81AD649FC1AD8F01FA0 +:10672800001F2FCDECC3FFEAEE03032C580CC0600A +:10673800F01F001B3008EE03092849589088EDB86F +:106748000001C0814938201D496C1AD8F01F001378 +:106758002FED48F89088EDB80001C1610E9C301B00 +:106768000C07EF37006CF01F001048A81AD65C64BD +:106778001AD41AD71ADC48DC1AD51AD8F01F000721 +:10678800300C2FADD832D83A80004D98000016A2B0 +:1067980080038C8C800385B0800094C48002E28CD6 +:1067A8008003862480004E8480038AF0D4311897B1 +:1067B8001695580CC041E06C00F6D832F01F003E28 +:1067C8003FF8EDDCC008F0061800C041E06C00FF9F +:1067D800D8324BA89088EDB80001C1A1EE06000898 +:1067E800F1340068F133006C4B58301B11820E9C59 +:1067F800F01F00344B48201D1AD21AD31AD41AD7C6 +:106808001AD51ADC4B1C1AD8F01F00312F8DEE0652 +:1068180000083009F13A006CF20A1800C060F1393A +:1068280000682FF9F1690068EE060008F134006885 +:106838003088F0041800E08800224A68900930087F +:10684800F0091900C104301B0E9CF01F001E49E816 +:10685800201D1AD41AD71ADC49FC1AD51AD8F01FE9 +:10686800001C2FAD30080C070A9CEF680068301B2D +:10687800F01F001AE06C00FBD83249181189300863 +:10688800F0091800C0500A9B0E9CF01F0015EE0678 +:1068980000043008E939006CF0091800C6100A9C99 +:1068A800F01F00103FF8F00C1800C1D13018E9684B +:1068B800006CC3E8800050AC000016A800007B07FD +:1068C80080004E848003824C80038B2C800094C40B +:1068D800000016A280038B6C8000E124800052C067 +:1068E8008000E5040E9CF01F001F49F89088EDB861 +:1068F8000001C0E1ECC8FFEAEE080328201D1AD801 +:1069080049A81AD649AC1AD8F01F001A2FCDECC4E2 +:10691800FFEAEE04032C580CC060F01F0017300883 +:10692800EE040928EE0600083009F169006C48E811 +:106938009088EDB80001C1410E9C301BEE060006A0 +:10694800ED37006CF01F000D48881AD71ADC48CCC8 +:106958001AD51AD8F01F0007300C2FCDD832D83AE4 +:1069680080005644000016A28003824C800385B044 +:10697800800094C48002E28C80004E8480038B984F +:10698800D4311294580A5F1830091497F204180089 +:106998005F0318961695E7E80008F2081800C55036 +:1069A800335CF01F00406CC98EC8F20800088DC81F +:1069B8006C385808C0614BC89088EDB80001C231E6 +:1069C8004BA89088EDB80001C0918EC81AD84B88A2 +:1069D8004B8C1AD8F01F00382FED4B889088EDB8F3 +:1069E8000001C0C14B28201D4B5C1AD8F01F003293 +:1069F8008ECB6E1CF01F00332FEDED08001A2FF818 +:106A0800ED58001A0A9AED3B00140E9CF01F002E58 +:106A18004A689088EDB80001C1218EC8201D1AD897 +:106A28001ADCED38001430091AD91AD71AD51AD831 +:106A380049F84A6C1AD8F01F00202F8D0E9CF01FC1 +:106A48000024335CF01F002358075F081063C160FF +:106A580049689088EDB80001C0C1201D1AD5ED38ED +:106A680000141AD8492849CC1AD8F01F00132FCD82 +:106A78000A9B0C9CF01F0019C1385804C11048B873 +:106A880090093008F0091900C0B44898201D5C64CA +:106A98001AD7493C1AD41AD8F01F00072FCDD83A74 +:106AA8008000A300000016A6000016A280038C98A0 +:106AB80080038BC8800094C4000016A080037C84E7 +:106AC80080013DB48000713080038BD88000D13CB8 +:106AD8008000A2E680038C108000585480038C3C10 +:106AE800D42148C8189716969088EDB80001C0A11F +:106AF8004898201D1ADB1ADC488C1AD8F01F0008A9 +:106B08002FCDF7D6C0100E9CF01F0006D82200002B +:106B1800000016A280038D0480038C50800094C46A +:106B28008000D984D4213007C1B80C9C0E9B2FF665 +:106B3800F01F000D1895C0F078485808C0C1F01F24 +:106B4800000B0A9CEB35000BF01F00090A9B5C5CEC +:106B5800F01F00085846CEA12FF75827C03030063E +:106B6800CE5BD82280002024800056A080002044DC +:106B780080002068D4214978F00C07085808C071B3 +:106B88004959F20C070AF00A1800C1F04929F20C19 +:106B9800070AF4081800C1904909F80C001CF0080D +:106BA8000017A567EE0C0027120748D99289EDB99E +:106BB8000004C0C11AD848B81ADA48BC1AD71AD87B +:106BC800F01F000A2FCDC02830070E9CD8220000E5 +:106BD8000000153C0000153800007B2C000016A6AC +:106BE8008003901080038DE0800094C4D421169710 +:106BF8001496F01F0005C0609828AC087808301C6F +:106C08008F08D82280006B7CD43149B849B91092DA +:106C1800F00C0708F20C070718961AD7498C1AD8EF +:106C2800EC060014F01F001749732FEDA36431E53B +:106C3800EE070018A568E8080008E60800087009CB +:106C48005809C0C090BA90AB1ADB1AD9702848FC12 +:106C58001AD81ADAF01F000B2FCD2FF7E406070811 +:106C68005C57EE051800F9B70000EE081800CE11C1 +:106C7800D8320000000015380000153C80038DF460 +:106C8800800094C400007B2C80038E0CD431201D1E +:106C98004A181896F00C07073005F80C001849F048 +:106CA800A36849F149F231E349F4EE070019A569EF +:106CB800F0090009E0090009720A580AC1D0923B9C +:106CC800922A8289F40B010CE2190010F8050005DC +:106CD8005C855809C1105C7B5C7AF3D5C010201D17 +:106CE800492C1AD91ADB1ADA1AD61AD25068F01FA8 +:106CF80000102FAD40082FF7E80607095C57EE0390 +:106D08001800F9B70000EE091800CD010A9C2FFD04 +:106D1800D83200000000153C00007B2C000016A6AD +:106D280080038DA00000153880038E28800094C44D +:106D3800D421F01F000B48B8EFDCB0109088EDB8F4 +:106D48000004C0A10E985C781AD84878487C1AD8F4 +:106D5800F01F00072FED0E9CD822000080006C94D5 +:106D6800000016A680038D7080038E4C800094C4AA +:106D7800D4214A181897169631D9F20C1800E088D1 +:106D8800000F90093008F0091900C33449B81ADC1B +:106D980049BC1AD8F01F001B2FEDD822F60B001A99 +:106DA8009088F80C0019E2180010A569F20A002969 +:106DB800495AF40903055808C0A04908201D1ADCDF +:106DC800492C1AD51AD8F01F000F2FCD0A9CF01F96 +:106DD80000103008EC060016EE07001748A9A56752 +:106DE800EE060026F20600068D288D08AC28AC3881 +:106DF800D8220000000016A280038DD080038E6880 +:106E0800800094C400007B2C80038E888002E28C72 +:106E1800D4314948F80C00121896F00C0707A36201 +:106E2800491331E44915EE070018A568E40800087D +:106E3800E60803085808C0500E9C0C9BF01F000C75 +:106E48002FF7EA0607085C57EE041800F9B70000A8 +:106E5800EE081800CE914839300CF2060B08D832EB +:106E68000000153C00007B2C0000153880006D7870 +:106E7800D4211897580CC0E14A189008F80819004E +:106E8800C3C44A08201D4A0C1AD8F01F00202FED51 +:106E9800D82249FAF40B070CF8CEFFFFF80C001CB7 +:106EA800A56CF40B0B0E3008F60B0019F809002935 +:106EB800498CF809000993289308B228B23831E9B7 +:106EC800F20E1800C031F40B0B0848D89088EDB8C2 +:106ED8000004C10148E8F00B07081AD848E8F00B8D +:106EE80007081AD848781AD748CC1AD8F01F0007CC +:106EF8002FCD0E9CF01F000AD8220000000016A219 +:106F080080038D8480038E98800094C40000153C13 +:106F180000007B2C0000153880038DE08002E28C95 +:106F2800D42118970E9CF01F0005C060780C0E9BAA +:106F3800F01F0003CF8BD82280006B7C80006E7816 +:106F4800D421496818971696149512949088EDB82C +:106F58000001C0C14928201D1AD91ADA1ADB1ADC27 +:106F6800490C1AD8F01F00102FAD301B0A9CF01FD7 +:106F7800000FC080301B0A9CF01F000C784858088E +:106F8800C0510C9B0E9CF01F000A5804C0500A9B6D +:106F9800089CF01F0008D822000016A280038D600C +:106FA80080038EAC800094C48000202480006AE8AE +:106FB80080006E78D4211897F01F00061898C02119 +:106FC800D8220E9A782C700990ABF01F0003DA2AA9 +:106FD80080006B7C80006F48D42116961494189515 +:106FE800F01F001E1897C021D8229838982B7809CE +:106FF800F6081900C2B2F5D8C0105804C050F20AF9 +:107008000708AC88C068F20A0709AC892FF8B838B5 +:1070180049389088EDB80004C0D10D881AD86E0898 +:107028001AD88EB81AD848F848FC1AD8F01F000F9A +:107038002FCD8E3B8E28F6081900C0710A9A5C7B0A +:107048006E2C6E09F01F000ADA2A0A9A5C7B782CEB +:10705800F01F0007D82A000080006B7C000016A6ED +:1070680080038D9080038ED4800094C480006F4884 +:10707800D4211897F01F00231896C021D8224A2837 +:107088009088EDB80004C0D178081AD898A81AD802 +:107098008CB81AD849D849EC1AD8F01F001E2FCD41 +:1070A8008C398C28F0091900C020DA2A49A8908860 +:1070B800EDB80004C1614998201DF0070709498807 +:1070C8001AD9F00707081AD8F20818005F191AD950 +:1070D8006C081AD848D8493C1AD8F01F000E2FADB2 +:1070E8006C2C6C090E9A8CABF01F000F48C8F00787 +:1070F800070948A8F0070708F00918005F1CD822FC +:1071080080006B7C000016A680038DBC80038EE88F +:10711800800094C4000016A2000015380000153C39 +:1071280080038F0080006F48D43118951697149308 +:10713800580CC0311894CBD8F60B001A4A58F00BEB +:107148000708F0080019A569F20A00294A2AF40973 +:1071580003095809C1604A1A940B300AF40B190044 +:10716800C0A4201D1AD849E81AD949EC1AD8F01F2A +:10717800001E2FCD49780E9BF007070CF01F001B4F +:10718800301B8ACCF01F001A18961894E0800092E1 +:10719800189B30098ACA0A9CF01F00168A485C8C22 +:1071A800F00C1900C2C048D9920A3009F20A190035 +:1071B800C0B45C781AD848A81AD648FC1AD51AD888 +:1071C800F01F00092FCD0C9C3004F01F000CC718CD +:1071D8000000153800007B2C000016A280039004E4 +:1071E80080038F2C800094C480006D788002DC3C82 +:1071F8008000CEC480038F548002E28C4AE9F207F3 +:10720800070AF4CBFFFFF40A001AA56AEE07001874 +:10721800F2070B0BF40800284A8AF4080008300A21 +:107228009123B02C9106B03A31E8F00B1800C03128 +:10723800F2070B0A4A084A29F0070708F207070964 +:10724800F0091800C1C149F9920A3009F20A190077 +:10725800C0A4201D1AD81AD849B849CC1AD8F01F8A +:10726800001C2FCD4948F00707095809F9BA01FF52 +:10727800F3DAE109F9B9001DF0070B0949189088FC +:10728800EDB80004C1618AC848DAF407070A201D6E +:107298000D891ADA488AF407070A1ADA1AD91AD8A5 +:1072A80048981AD648BC1AD71AD8F01F00092F8D4B +:1072B800089CD8320000153800007B2C0000153CD3 +:1072C800000016A28003900480038F90800094C46D +:1072D80080038FBCD431203D1690502A1895F01F9A +:1072E8000021301BE5DCB010F9D2C010F01F001EE1 +:1072F8001896C2C049D8EA050019F0050707A3691E +:10730800189431E849A1189349ABEE070016A56611 +:10731800F2060006F60600066C0B580BC0B0089C77 +:107328008CAA50095018F01F00148CAA4018140495 +:1073380040092FF7E205070A5C57EE081800F9B76D +:107348000000EE0A1800CE110696402A5800E1F611 +:107358001A00580AF5F21C000C9C2FDDD8320000E8 +:1073680080006C948002DC3C0000153C000015385D +:1073780000007B2C8002E736D431303818971693FA +:107388001494F00C1800E088001B48989009300805 +:10739800F0091900C0353005CA2848681ADC3005DC +:1073A8001AD8485CF01F00052FEDC998000016A2F6 +:1073B80080038DB080038FE0800094C4F80C001A1D +:1073C8004C88F00C0708F0080019A569F20A002992 +:1073D8004C5AF40903095809C1604C4A940B300A05 +:1073E800F40B1900C0A4201D1AD84C181AD94C1C2B +:1073F8001AD8F01F00412FCD4BA80E9BF007070CA1 +:10740800F01F003E0892301B5C72049CF01F003C89 +:1074180018961895C640049A069BF01F003AEE0786 +:1074280000184B03E6070702E4020012A562E4080D +:1074380000224AD83001F0020002300B8506A4244D +:10744800A4310E9CF01F0030852CE60707082FF8A2 +:10745800E6070B0831E9F2081800C031E6070B010E +:107468004A084AA9F0070708F2070709F0091800AF +:10747800C1C149E9920A3009F20A1900C0A4201DC5 +:107488001AD81AD849A84A2C1AD8F01F001B2FCD91 +:107498004948F00707095809F9BA01FFF3DAE10981 +:1074A800F9B9001DF0070B0949089088EDB80004E8 +:1074B800C1610D884959F2070709201D1AD9489951 +:1074C800F20707091AD91AD848985C74491C1AD4C3 +:1074D8001AD61AD71AD8F01F00082F8D0A9CD8324E +:1074E8000000153800007B2C000016A280038DB028 +:1074F80080038F2C800094C480006D788002DC3C6F +:107508008002E736800020240000153C80038F901D +:1075180080038FBCD401E06A05A0300B482CF01F13 +:107528000003D80200007B2C8002E8BCD421202D67 +:10753800FE782800501C500B3FF7109E301CC308E3 +:10754800300B7049EDB90001CFD17049EDB9000990 +:10755800CFD140195809C0B01396F2C5FFFE138960 +:107568005015EDE91089F7D9D010C038F7D7D010E9 +:10757800913B7049EDB90000CFD17C2B40095C8B61 +:107588005809C080B29BF7DBC108B28B40092FE9CC +:107598005009F80A1900E0880006202A5C8A580A6F +:1075A800CD01FE78280070482FEDD822580CC06015 +:1075B800FE782800300A7019C058FE78280030FA82 +:1075C8007019F3DAD20491195EFC202D3008E069B5 +:1075D80013885018F8090249C058401A2FF82FFA92 +:1075E800501A1238CFB12FED5EFCD703D401303CCE +:1075F800F01F0005C060303CF01F0004F01F0004BD +:10760800D402D6038000A3708000A38880014014B0 +:10761800D401580CC060300B303CF01F0004D80275 +:10762800303CF01F0003D8028000A31A8000A35C3E +:10763800D401202D3008B888303CF01F0022303C9F +:10764800F01F0021309CF01F001F307CF01F001D30 +:107658003008501840192FF950192FF8E04861A840 +:10766800CFA1309CF01F00193008501840192FF98D +:1076780050192FF8E05886A0CFA1307CF01F0013D6 +:10768800340B300A492CF01F0013FE782800302AEA +:1076980070C9F3DAD108308A91C970C9F3DAD08495 +:1076A800301A91C970C9F3DAD06191C970C9F3DA97 +:1076B800D001303C91C9F01F00082FEDD80A000016 +:1076C8008000A2A88000A2BE8000A2E6800075F417 +:1076D8008000A3A08000A388D42120AD4C68E3B823 +:1076E8000001D5533017FE6810007109F3D7D20294 +:1076F800303AF1490040E06B1B00EA1B00B7FE7C02 +:107708000C00F01F003E310A201D30081ADA0E99CD +:10771800109B308AFE7C0C00F01F003930080E994F +:107728000E9A109BFE7C0C00F01F0036300BFE7C7E +:107738000C00F01F0035FE7C0C00F01F0034300CEC +:107748001ADC18981899189A1ADC189BFE7C0C00F9 +:10775800F01F002F0E9CF01F002F302BFE7C0C001A +:10776800F01F002DF01F002DD503304AFAC7FFD0B7 +:107778004ABB0E9CF01F002B302B0E9CF01F002ADA +:10778800FAC8FFDC4A99722C109B912CE06AF980A8 +:10779800EA1A0337F2E40000FE7C1800F0E5000066 +:1077A800F01F0023308A4A3B0E9CF01F001E310A4E +:1077B800FAC6FFEC300B0C9CF01F001F3018304B42 +:1077C800FB68002149DCF01F00180C9BFE7C280098 +:1077D800F01F001B3009FE7C2800129B129AF01F34 +:1077E80000190E9C0E96304BF01F000F2FCDFAC7D4 +:1077F800FFD8C2D8800376008000A5088000A4B016 +:107808008000A4CE8000A4E68000A4F48000A470C8 +:107818008000A2228000A4FE8000A3D080039038BC +:107828008002E7368000A2808003901C8000AA1C9A +:10783800800390308002E8BC800390288000A66214 +:107848008000A69C0D8C2FE6F01F000F0E36CFB1DE +:10785800FACBFFFCFE7C2800F01F000C3009FE7CF0 +:107868002800129A129BF01F000AFE7C2800F01FC5 +:107878000009302CF01F0008FE7C2800F01F0005CE +:107888002F6DD8228000A2BE8000A6628000A69C30 +:107898008000A7EC8000A2E6D42130A81896F00C4E +:1078A8001800C0C1E067271020175BF7C13030DB34 +:1078B800FE7C1800F01F0008CF81E0672710201712 +:1078C8005BF7C0800C9BFE7C1800F01F0003CF8183 +:1078D800D822DC2A8000A9AED401178A17B91798D4 +:1078E800B168F1EA118817AAF1EA1088F3E81008DC +:1078F8001AD81ADC483CF01F00042FEDD80200000B +:1079080080039064800094C4D421202D4AB811D9F2 +:10791800BAD97009500911C8BAC81A961895169498 +:10792800581CE08900064A6CF01F0026C448761CE3 +:10793800F01F0025201DEFDCC0084A4C1AD7F01FA5 +:1079480000212FED5825C2A0682CF01F001F201D14 +:10795800EDDCC00849EC1AD6F01F001A30182FEDDC +:10796800F0061800C111305A49AB0E9CF01F001ADE +:1079780030AA49AB0E9CF01F00180E9C308A498B28 +:10798800F01F0015C1883028F0061800C141300AE0 +:107998000E9C149BF01F0013C0E83038F007180045 +:1079A800E08B000A300B0E9CF01F000F1A9B306A08 +:1079B800F01F000E2FEDD82A800396B88003909808 +:1079C800800094C48002DC2C800390C4800390D093 +:1079D800800390E480007380800390EC800390F82B +:1079E800800072DC8000202480005140D421189649 +:1079F8001695582CC45176174B3B0E9CF01F00333C +:107A08001896C1014B2CF01F00334B38FE798000CB +:107A1800B0094B28B0064B28B0064B28B006E08FBB +:107A280001C44B1B0E9CF01F0029C1D14AA89088A5 +:107A3800201D4AEC1AD8F01F00274A8890884ACCA3 +:107A48005008F01F00244A6890884AAC5008F01F7C +:107A580000214A4890884A8C5008F01F001E2FEDDC +:107A6800E08F01A30E9C4A5BF01F0018C0C14A4C6E +:107A7800F01F0018E06900FF4978E08F0195582C45 +:107A8800E089000749FCF01F0013E08F018E762C77 +:107A9800F01F001D18975836E08101876A1649BB08 +:107AA8000C9CF01F000AC53148B85807E08A000846 +:107AB8009009A1A9B0095817C2A1C3089009A1C982 +:107AC800B009C2C8800391048002ECC88003910801 +:107AD800800094C4000016A2000016A6000016A09C +:107AE800000016A8800391148003911C8003913430 +:107AF8008003914C800391648003E18C8003917C26 +:107B0800800391888002DC2C800392144B799208C0 +:107B1800A1A8B2085827C071C0D84B499208A1C87B +:107B2800B208C0884B299208A1A8B2085837C0717A +:107B3800C0A84AF99208A1C8B208C0584AD9920800 +:107B4800A1A8CAC84AB99208A1C8CA884AAB0C9C5D +:107B5800F01F002AC2F14AA85807E08A00089009D5 +:107B6800A3A9B0095817C061C0C89009A3C9B00932 +:107B7800C08849E99208A3A8B2085827C071C0D89C +:107B880049A99208A3C8B208C08849999208A3A82D +:107B9800B2085837C071C0A849599208A3C8B2089A +:107BA800C05849499208A3A8C79849299208A3C868 +:107BB800C758494B0C9CF01F0011C3E149085807EE +:107BC800E08A00089009A1B9B0095817C061C1B886 +:107BD8009009A1D9B009C17848499208A1B8B2085A +:107BE8005827C161C1C80000000016A6000016A0F1 +:107BF800000016A88003921C8002ECC8000016A2A0 +:107C0800800392204B699208A1D8B208C0884B59CA +:107C18009208A1B8B2085837C071C0A84B19920889 +:107C2800A1D8B208C0584B099208A1B8C3784AE94C +:107C38009208A1D8C3384ADB0C9CF01F002DC30161 +:107C48004AC85807E08A00089009A3B9B00958172C +:107C5800C061C0C89009A3D9B009C0884A09920870 +:107C6800A3B8B2085827C071C0D849D99208A3D878 +:107C7800B208C08849B99208A3B8B2085837C07189 +:107C8800C0A849899208A3D8B208C058496992087F +:107C9800A3B8C04849499208A3D8B208C858496B44 +:107CA8000C9CF01F0013C3D149285807E08A00082C +:107CB8009009A5A9B0095817C061C0C89009A5C9FD +:107CC800B009C08848699208A5A8B2085827C151C8 +:107CD800C1B848399208A5C8B208C168000016A6FC +:107CE800000016A0000016A8800392248002ECC8A9 +:107CF800000016A2800392284AC99208A5A8B208D3 +:107D08005837C071C0A84A999208A5C8B208C05887 +:107D18004A799208A5A8CC2B4A599208A5C8CBEB5A +:107D28000C9C4A4BF01F0024C3F14A485807E08ACC +:107D3800000B9009EA19FFFFE8198000B0095817ED +:107D4800C071C1089009F3D9C00FB009C0B849C9BA +:107D58009208EA18FFFFE8188000B2085827C08187 +:107D6800C11849789009F3D9C00FB009C0B848F9CB +:107D78009208EA18FFFFE8188000B2085837C08157 +:107D8800C0E848A89009F3D9C00FB009C08848894D +:107D98009208EA18FFFFE8188000C80B48489009C5 +:107DA800F3D9C00FB009D82A000016A0000016A801 +:107DB800800392308002ECC8000016A2000016A6CC +:107DC800D421582CC2717617495B0E9CF01F001500 +:107DD800C1211897494CF01F0015201D494C1AD78E +:107DE800F01F00120E9C2FF7F01F00122FED5847BE +:107DF800CF51C1380E9CF01F0010201DEFDCC008C9 +:107E080048BC1AD7F01F00090E9CF01F000A2FED7E +:107E1800C04848ACF01F0005D82A000080039238FB +:107E28008002ECC88003923C800094C4800390C414 +:107E380080006C108002DC2C80039250D421207DBD +:107E4800306A18951696FAC7FFEAE06B00FF0E9C99 +:107E5800F01F00385825C1B16C1C4B7BF01F003750 +:107E68001896C4B14B6CF01F00370E9B0C9CF01F8A +:107E780000360E9B301CF01F00340E9B0A9CF01F2E +:107E880000320E9B303CF01F0030C5085825E08AB0 +:107E980000356C1CF01F002D6C2B1897500B169C8E +:107EA800F01F002B58DC5F04585C5F08E9E81008F5 +:107EB800ECC5FFFC109418963008FACCFFF8400B7C +:107EC800F0041800C0500C9AF01F0022C238F01FAE +:107ED800002258375F98580C5F091896F3E8100885 +:107EE800E8081800C0A15807C085C0916A08118920 +:107EF8003308F0091800C030498CC098585C5F18E6 +:107F080058DC5F19F3E80008C050495CF01F000D09 +:107F1800C0D85C570C9BFAC9FFEAFACAFFF80E9C56 +:107F2800F01F00100E9CF01F00102F9DD82A000093 +:107F38008002E8BC800392808002ECC880039288AB +:107F4800800094C48001921C8002DC2C8002EDD059 +:107F58008002EE0C800098688003929C800392DC7B +:107F68008001927080019258D421204D4ABC149609 +:107F7800F01F002B1A9CF01F002B581CC0504AAC55 +:107F8800F01F0027C0A81A9CF01F0028201D1ADC2B +:107F98004A7CF01F00232FEDF01F002618974A6C2B +:107FA800F01F001F5807C0514A4CF01F001DC04861 +:107FB8000E9CF01F00234A376E0CF01F0023C1F0FF +:107FC8006E087018201D1AD8F01F0020500C4A0C9B +:107FD800F01F00136E0870285008F01F001C500C8A +:107FE80049CCF01F000F6E0870385008F01F0017BA +:107FF800500C499CF01F000A2FEDC048497CF01F27 +:108008000008497CF01F00060DC93018F009180057 +:10801800C2A1494CC298000080039314800094C404 +:10802800800191288003932C8000967080039348E8 +:108038008001997C80039358800393A880009784DB +:10804800000080D08000CAE4800096A8800393686E +:10805800800393788003938880039398800393B078 +:10806800800393B8493CF01F0014FACCFFF4300B9E +:10807800F01F0012301B4037FACCFFF8F01F000F3A +:10808800201D1AD750574047F01F000D500C48DCF0 +:10809800F01F000950075047F01F0009500C48AC6A +:1080A800F01F0005F01F0009300C2FED2FCDD8224E +:1080B800800393C4800094C48000C1EC800096A81B +:1080C800800393D080039DC08000495CD421202D7B +:1080D8001695584CE089000649ECF01F001FC3684C +:1080E800FACCFFFC761BF01F001D6A2C4014F01F11 +:1080F800001C18976A3CF01F001A18966A4CF01F6B +:108108000018501418951ADC496C1AD61AD71AD4C4 +:10811800F01F0011089CF3D5C008F5D6C0080E9BC7 +:108128005C7BF01F00112FCD5BFCC10148F8900962 +:108138003008F0091900C0A448D81AD548DC1AD666 +:108148001AD71AD8F01F00042FCD2FEDD82A000017 +:10815800800393DC800094C4800098FC8002DC2CAF +:108168008003941480003958000016A280039054AC +:1081780080039448D4211695583CE089000649CCE0 +:10818800F01F001CC338761CF01F001B18976A2CC0 +:10819800F01F001918966A3CF01F00174978201D37 +:1081A80018941AD649651AD7580CF0051710495C67 +:1081B8001AD5F01F0010089AF7D6C0085C5A0E9C12 +:1081C8005C7CF01F00112FCD5BFCC10148F89009C1 +:1081D8003008F0091900C0A448D81AD648DC1AD7C4 +:1081E8001AD51AD8F01F00032FCDD82A80039488F7 +:1081F800800094C48002DC2C80037DC480037DC889 +:10820800800394B880003C50000016A28003969C1E +:10821800800394DCD421206D1697582CE089000641 +:108228004A4CF01F0025C438761CF01F00246E2B22 +:10823800F8C700011A9CF01F0022304A1A9BFAC6A0 +:10824800FFEC0C9CF01F001F201D40681AD8F01F7F +:10825800001E1ADC49DC1AD7F01F00170C9B0E9C75 +:108268005C5CF01F001BFACCFFE0300BF01F00191C +:10827800301B4087FACCFFE4F01F00162FDD505763 +:108288001AD74056F01F00101AD71ADC492C50870D +:10829800F01F00092FDD50461AD6F01F000B1AD622 +:1082A8001ADC48EC5076F01F00042FCD2FADD82AE9 +:1082B80080039510800094C48002DC2C800098FC18 +:1082C8008002E736800096A8800395388000C19C1C +:1082D8008000C1EC8003955480039564D421FACDC5 +:1082E8000108581CE0890006491CF01F0012C1D87B +:1082F800F6C9FFFCF8CA0001FAC7FFFCE06B0100F1 +:108308000E9CF01F000DC110300948CAFACBFEFCC4 +:108318000E9CF01F000B5C5CC0814418489C1AD866 +:108328001AD7F01F00042FED2BEDD82A800395747F +:10833800800094C480009710800078E08000C4C05A +:1083480080039064D43121AD18961695582CE08995 +:1083580000064A1CF01F0021C3B8FAC7FFFC344AC4 +:10836800300B0E9CF01F001E306AE06B00FFFACC49 +:10837800FFDBF01F001BFAC4FFB8EAC9FFFCECCA18 +:108388000002320B089CF01F00171893C210189AAD +:10839800089B0E9CF01F00143088FB6300242016F5 +:1083A800EA060326FB68003C0C9CF01F00100C9B9F +:1083B800189A30180E9C3089F01F000D581CC08088 +:1083C80048C8201D48CC1AD8F01F00042FED2E6D88 +:1083D800D83A000080039590800094C48002E8BCDD +:1083E800800097108002E7368002EDD080019084EB +:1083F80080039048800395B4D42121AD1696582C5B +:10840800C05049BCF01F001BC308FAC7FFFC344A20 +:10841800300B0E9CF01F0018306AE06B00FFFACC9E +:10842800FFDBF01F0015ECC9FFFC301AFAC6FFB8D5 +:10843800320B0C9CF01F00111895C170189A0C9BF8 +:108448000E9CF01F000F3088FB6500240E9CFB6813 +:10845800003CF01F000C581CC08048B8201D48BCC8 +:108468001AD8F01F00042FED2E6DD82A800395D45A +:10847800800094C48002E8BC800097108002E73630 +:1084880080018FF8800396AC800395ECD431204DA1 +:108498001493189516947406582CC091761C304A7B +:1084A8004A7BF01F0028C0513018C458584CC0806F +:1084B8004A5CF01F00264A6CF01F0024C3D8761BC4 +:1084C8001A9CF01F00240A9A1A9BFACCFFF4F01F9A +:1084D80000224A289088EDB80002C0B1201D40480B +:1084E8001AD849F81AD649FC1AD8F01F00182FCD07 +:1084F800FAC7FFF40C9C0E9BF01F001B682B1A9CFC +:10850800F01F0014304A1A9B0E9CF01F00130E9B9C +:108518000C9CF01F0016683B1A9CF01F000E304A96 +:108528001A9B0E9CF01F000C0E9B0C9CF01F001059 +:108538001A953008A6C82FCDD83A0000800392803B +:108548008002EDE680039610800094C48003964074 +:10855800800098FC8002E736000016A28003903C59 +:10856800800396688000CBC88000CA928000CA74D5 +:10857800D421212D581CE0890006491CF01F001148 +:10858800C1C8F6C9FFFCF8CA0001FAC7FFD8320B08 +:108598000E9CF01F000D1896C1000E9B189AFAC782 +:1085A800FFF90E9CF01F0009300BFB6600270E9C9C +:1085B800F01F0007F01F00072EEDD82A80039684CD +:1085C800800094C4800097108002E736800099A844 +:1085D8008000998CD401F01F0003F01F0003D80A13 +:1085E80080019EF880009820D40148BE1898300970 +:1085F8007C0C580CC0A1F2090019487EFC0900291E +:10860800932A9318930BD8022FF92F4E58F9CF11AC +:10861800DC0A000000001544D401484CF01F000497 +:1086280030194848B089D802800396C0800094C4A5 +:10863800000015F8D4314B68169570065806C050DE +:108648005816E08100BAC938580CE08000B5F01F10 +:1086580000314B18910C1897580CE08000AD19891F +:10866800EC091800C0415805C460C4284AB44AC37C +:108678008906C188EC060018E60800287012049CD8 +:108688005802C0E0F01F002718910E9CF01F00252B +:108698000E9BE20C0D4A049CF01F0023C3102FF61A +:1086A8008906680649D258E6FE98FFE658F6C28160 +:1086B8005805C210049749DCF01F001D3008498690 +:1086C8008508C128F0080018EC0800287009580926 +:1086D800C0807018201D497C1AD8F01F00152FED96 +:1086E8006E082FF88F086E0858E8FE98FFED492CA1 +:1086F800F01F000F4888700CF01F0010C5C80E9CB2 +:1087080048FB49074906F01F0011C2C8000016407F +:108718008002ED8400001644000015400000154456 +:108728008002EDD08002EDE6800396C8800094C4F4 +:10873800800396E0800396C48002E28C80039364F1 +:10874800000015FC000016008002EEB86E08EC0868 +:10875800092C2FF88F085908C070498B300CF01F6E +:108768000018580CCF41301949689109496949786E +:108778007008F0080018F20800284959702A720C8D +:108788007008494B5D18581CC1705805C040492CE9 +:10879800F01F001248E83007340A0E9B910748DCA6 +:1087A800F01F000F48F8700CF01F000F4858301CDD +:1087B8009107D832D83ADA3A800393648002EEB847 +:1087C800000016400000154400001540000015FC8C +:1087D80000001600800396C4800094C48002E8BCA0 +:1087E800000016448002E28CD421202D1897FACB81 +:1087F800FFFCFE7C1800F01F0012583CC080584C4B +:10880800C081E0690100FE7818009109301CC15848 +:10881800401C58DCC03130ACC0B8588CC081F01F47 +:108828000009320CF01F00071BFCC0285C5CF01F1D +:1088380000054018300CAE882FEDD8228000A9C260 +:10884800800078A0D431202D30A1FAC0FFF930D2B1 +:10885800308349B749B630043005009CF01F001A30 +:10886800C2A11BF8E20818005F0AE40818005F09B3 +:10887800124AF80A1800C0904929491A1298740B2C +:10888800950CF20B0B0CC188E6081800C0916E0815 +:108898002018F00C17708F0CEC0C0B04C0686E09D4 +:1088A800EC090B082FF98F096E08E0480050CD61DC +:1088B8008F05CD4B3008109C2FEDD832000016489C +:1088C8000000164C800087F0D401F01F0004301B14 +:1088D800F01F0003D80200008000884C8000863C0E +:1088E800D4314974169714951293580BC0B1680C7B +:1088F800580CC0311896C2181696F01F0012890736 +:10890800C1C868085808C0C1E06C0200F01F000E1A +:10891800890CC061189648DCF01F000DC0E80A9C5D +:10892800E066020048650C33E60617806A0B0C9A6D +:10893800F01F00086A088F080C9CD8320000169CAB +:108948008002E28C8002E2A4800396E8800094C44E +:10895800800090B4D401F01F0002D80A800091086A +:10896800D4213008FAC4FFEC19C9F0091800F9B885 +:108978000100E9F81A01E9F81A02E9F81A004A1898 +:108988001AD84A1818971AD8089B3008E8C9FFF867 +:10899800E8CAFFFC780CF01F001D8F0C2FED580C57 +:1089A800C021DC2AF01F001A300949AA301BE06CEC +:1089B8001388F01F00193009498A301BE06C00FA4F +:1089C800F01F00153009496A301BE06C01F4F01FF4 +:1089D80000123009493A301BE06CEA60F01F000EC3 +:1089E8003009491A301BE06C03E8F01F000B30090E +:1089F80048EA301BE06C03E8F01F0007DA2A0000A1 +:108A08008001365C80013C948000CCA88000CAB00C +:108A180080008A708000956C80008A6480008A5883 +:108A280080008A4C80008A4080008A34D401F01F7C +:108A38000002D8028000C664D401F01F0002D802E8 +:108A480080012984D401F01F0002D8028000B8B048 +:108A5800D401F01F0002D8028000C074D401F01FB6 +:108A68000002D8028000E68CD401F01F0002D80270 +:108A78008001326430194828B0895EFC000016AACB +:108A8800D401319CF01F0003319CF01F0003D80271 +:108A98008000A2D28000A2E6D421204D3FF819C957 +:108AA8001897F0091800F9B80001EFF80E0430081B +:108AB800201D1AD850581AD81AD850685058F01F84 +:108AC800001C49CB6E0CF01F001C0E9949BA49CB0B +:108AD80049CCF01F001D2FCD581CC08049B8201D5F +:108AE80049BC1AD8F01F001B2FEDF01F001BF01F08 +:108AF800001B0E9CF01F001AC0F049A8900930080E +:108B0800F0091900C0F44988201D498C1AD8F01FB3 +:108B180000112FEDC07830194958319CB089F01FE9 +:108B280000153018EF6800082FCDD822800089681A +:108B380080008C5C8000CAEE80008B7C80008BDC1F +:108B480080008A7C80009A188003973C80039DC02F +:108B5800800094C48000998C80019EF880002A9837 +:108B6800000016A28003972880039758000016A4D7 +:108B78008000A300D4211897333CF01F000F300663 +:108B88000FD8EC081800C0C048CCF01F000D6E0CC0 +:108B9800F01F000C6E0CF01F000CAED6C07848BC5D +:108BA800F01F00076E0CF01F000A3FFCF01F0009C1 +:108BB800D82200008000A2E680039774800094C445 +:108BC8008000B1D88000AE50800397908000CABC66 +:108BD80080002E60D42116971896333CF01F00149D +:108BE8000C9CF01F0014201D1ADC493CF01F0013D8 +:108BF80030182FED0FC6F0061800C121490CF01FE0 +:108C0800000F6E0CF01F000F48F849095C5CF20C6D +:108C18001700F00C1710F01F0009AED6C0486E0CF4 +:108C2800F01F000BF01F000BD82200008000A300EB +:108C3800800096E48003979C800094C4800397B8D2 +:108C48008000B950800397D080037FC08000CB8814 +:108C58008000C690D42149471896F01F0014189533 +:108C6800C110301CF01F00126C18201D1AD8F01FFC +:108C78000011500C490CF01F001130182FEDAE8870 +:108C8800D822AE8CF01F000E48E89008EA081900B8 +:108C9800C08448D8201D48DC1AD8F01F00082FEDE2 +:108CA800D8220000000016AB8000CAE480002E60C5 +:108CB800800096A8800397D8800094C480006B2C0D +:108CC800000016A28003995C800397E8D4211897C6 +:108CD800F01F0027300A4A7B4A7CF01F0028300A20 +:108CE8004A7B4A8CF01F00254A7B300A4A7CF01FD9 +:108CF80000230E9A4A6B4A7CF01F0020300A4A6B08 +:108D08004A6CF01F001E4A6B300A4A6CF01F001BA9 +:108D18000E9A4A5B4A5CF01F0019300A4A4B4A5CBB +:108D2800F01F0016300A4A4B4A4CF01F0014300A54 +:108D38004A3B4A4CF01F0011300A4A3B4A3CF01F9C +:108D4800000F300A4A2B4A3CF01F000C300A4A2B0D +:108D58004A2CF01F000A300A4A1B4A2CF01F000751 +:108D6800300A4A1B4A1CF01F0005D82280008620C2 +:108D7800800085DC80039804800085F08000857879 +:108D88008003980C80007E448003981480007F70D4 +:108D98008003981C800079F48003982480007DC8A3 +:108DA8008003982C80008494800398348000633476 +:108DB800800398408000834C80039848800084009A +:108DC80080039850800082E4800398588000821CB9 +:108DD800800398608000817C80039868800080D43C +:108DE800800398748000791080039880D4211897A4 +:108DF800F01F000BF01F000BF01F000BF01F000B03 +:108E08006E0CF01F000B48B811893008F0091800E3 +:108E1800C0406E0CF01F0008D82200008000951496 +:108E2800800088D080009504800193A080013BBC1D +:108E3800000016A480004758D421202D3029EE7850 +:108E48000000F1D9D1A23019F1D9D0033007501858 +:108E58000E9B5007337CF01F000F1A9BFE7C3800D6 +:108E6800F01F000D0E9BE06A01A4FE7C3800F01F85 +:108E7800000B0E9BE06A0348FE7C3800F01F0008D8 +:108E88000E9BFE7C3800F01F00072FEDD822000053 +:108E98008000A2308000A8388000A8F08000A926B1 +:108EA8008000A8D4D401333CF01F0009334CF01FD4 +:108EB8000008335CF01F0006333CF01F0006334CFB +:108EC800F01F0004335CF01F0003D8028000A2A842 +:108ED8008000A2E6D421202DF01F0034F01F0034BA +:108EE800F01F0034F01F0034E06C1B00EA1C00B7D0 +:108EF800F01F00324B28201D4B2C1AD8F01F0032CF +:108F080030CB301CF01F00312FED1897580CC08162 +:108F18004AF8201D4AFC1AD8F01F002B2FED344BBD +:108F2800301CF01F002A8F0CC0814A98201D4A9CD3 +:108F38001AD8F01F00252FED3FF80E9CAEC8F01F81 +:108F48000026300B169CF01F0025F01F0025F01F8F +:108F58000025C0804A48201D49EC1AD8F01F001A85 +:108F68002FEDFACAFFFC0E9B4A0CF01F0021581C7B +:108F7800C0C1401A49FB0E9CF01F001F581CC0516D +:108F88000E9CF01F001ECFDB58CCC04058DCC061DF +:108F9800C03849BCC04849BCC02849BCF01F000AB9 +:108FA800F01F001ACFEB000080008A88800076E06E +:108FB80080008EAC80008E408000AAE88003970C69 +:108FC80080039888800094C48002DC3C800398A8C1 +:108FD80080039DC080008CD4800095C88000C8E4C0 +:108FE8008000895C800398B8800088E880013E880A +:108FF80080008AA0800193BC80008DF4800398E4EF +:109008008003990C8003993080009514D4314A1458 +:1090180058095F081296189716951493A888E06067 +:109028000100E06100FFC2E88920A868E203190096 +:10903800E069FFFFE7D9E828E9F88A02E06901005A +:1090480088E8F2080108682989151039E9F8BA0290 +:10905800EE021608049CF01F0010301CF01F000FD1 +:10906800F01F000F5806C090049CF01F000E301C23 +:10907800F01F000DF01F000D6828101310071005D1 +:109088005C83F1D7C0085803CD01069CD832000094 +:10909800000016AC8000A0408000A19880009ED4FB +:1090A80080009F5C8000A17080009E94D4013009EC +:1090B8005C7AF01F0002D80280009014D40148584E +:1090C80090E9701B120C702AF01F0003D8020000F0 +:1090D800000016AC8002E736D4014888189B118A34 +:1090E8003009F20A1800C07090E9701C120B702A3F +:1090F800F01F0003D8020000000016AC8002E7361B +:10910800D421208D48D8F0E60008FAE70008F0EAF4 +:109118000000FAC8FFF0FAEB0000F0E70008F0EBF7 +:109128000000E06CF980EA1C0337F01F0005300CE2 +:109138002FCD2FCDD82200008003996C8000A1C0CC +:10914800D401FAC9FFFCF01F0002D80280031C1CDE +:10915800D401F01F0002D8028002EE88D401F01F6B +:109168000002D8028002ECACD401F01F0002D80241 +:109178008002F0ECD401F01F0002D8028002E71050 +:10918800D401F01F0002D8028002EE2CD401F01F97 +:109198000002D8028002ED84D401F01F0002D80238 +:1091A8008002ECC8D401F01F0002D8028002EE0C45 +:1091B800D401F01F0002D8028002EDD0D401F01FC4 +:1091C8000002D8028002E87ED401F01F0002D80213 +:1091D8008002E8BCD401F01F0002D8028002E73602 +:1091E800D401F01F0002D8028002E28CD401F01FE3 +:1091F8000002D8028002E8D0D401F01F0002D80291 +:109208008002E2A4D401580CC0707808B08B7808AA +:109218002FF89908D802F9DBC008F01F0002D8021D +:10922800800078A0D431189616971495580AE08AC9 +:1092380000153008109AC0282FF8EE08070BF40B19 +:109248001800CFB10A38F9B50400EBD8E515EDB927 +:109258000001C0313303C0283203E9D9C001C090EE +:109268003004C1082FF42015069B0C9CF01F000D3C +:109278005805FE99FFF9C0682FF42FF70C9CF01FD2 +:1092880000090F8B580BCF91C0782FF42015069B3F +:109298000C9CF01F00045805FE99FFF9089CD83271 +:1092A8008000920CD431204DFAC4FFCC109368177B +:1092B800189568041698580BC0B13308BADB08999A +:1092C800069ABAC8FACBFFFCF01F001FC3985809CA +:1092D8005F1B58AA5F09F7E90009C0605808C04435 +:1092E8005C383016C0283006EECB003A3009FAC791 +:1092F800FFF00EF9C0B8F00A0D00029912985898BC +:10930800F1DBE9082D080EF800985808CF515806E7 +:10931800C1005803C0B0EDB40001C08132DB0A9C23 +:109328002013F01F000A3016C04832D830060EF855 +:109338000899069A0E9B0A9CF01F00030C0C2FCD6F +:10934800D83200008000922C8000920CD431203D4D +:109358003007500A18951696325432D3330230919A +:109368003730C978E8081800E081008E2FF60D889C +:109378005808E0800093E8081800E0800085E608B7 +:109388001800F9B90100F7B600FFF9B90001C038B3 +:109398002FF6A1B90D88E4081800CFB03008C048EE +:1093A800F80E00182FF60D8AF008002EF4CC0030C5 +:1093B800F4CB0030E20B1800FE98FFF4E00A180026 +:1093C800C0A1109A4008110B50084B98580BF00B8D +:1093D8001700C548364BF60A1800C0A1361B400ACC +:1093E8001ADB1AD93019740B2FCA502AC358370BF5 +:1093F800F60A1800C121361A40091ADAF2CAFFFC27 +:10940800501A308A1ADA720B3009310A0A9CF01F96 +:1094180000292FED1807C3C8378BF60A1800C0417A +:10942800400A361BC078358BF60A1800C091400AEE +:10943800341B1ADB1AD9740B2FCA502ACE6B375B30 +:10944800F60A1800C0B1361B400A1ADB1AD93009CF +:10945800740B2FCA502A30AACDAB363BF60A180037 +:10946800C171109A4008700B2FC8FB6B0008500898 +:10947800FACBFFF83008FB6800090A9CF01F000EC1 +:109488001807C0682FF70D8B0A9CF01F000C2FF6E9 +:109498000D885808FE91FF685805EBF81000F9B9D7 +:1094A8000100F1F91E000E9C2FDDD8328003997C53 +:1094B800800092AC8000922C8000920CD401189B02 +:1094C800FACAFFFC300CF01F0002D8028000935447 +:1094D800D40148A972082FF89308F2F800CC58086C +:1094E800C040F2FC00D45D18FE780D003019918957 +:1094F8007078D402D6030000000001184838F0F94B +:1095080000D0700CB33C5EFC00000118D431495601 +:1095180030020C9730152F46EEC1FF2C0E930E9497 +:109528000D88E4081800C18166086E291039E08B9F +:1095380000146C185808C0306C2C5D180D98EA0897 +:109548001800E9F80000EFF90001F3D8E008EFF897 +:109558000A02EDF51E002EC62EC70236CE21D832DD +:1095680000000118D431300E189830A5494C1C96CB +:109578002FCCFCC3FFFF1897F9340008EC0418003F +:10958800C071FDD3C0082ECCEA0E1800CF311C9C48 +:1095980048B530030A96FC0E002EEAF500D0F00517 +:1095A8000D048F040D08EF630008EC0E0026080870 +:1095B800EF6B00098F188D498D3AD83200000118D9 +:1095C800D421300A16971896328B495CF01F001583 +:1095D800300AFE7C0D00149BF01F00134935FE7CF9 +:1095E8000D00EAFB00D0F60B1073A19BF01F0010D2 +:1095F800FE7C0D00F01F000FFE7C0D00F01F000E1A +:10960800EAC9FF2CEB4600CCEB4700D430182F45B5 +:10961800AA882EC51235CFD1D8220000800094D850 +:109628008000A3A08000A594000001188000A580F8 +:109638008000A57A8000A562D401306AF01F00027C +:109648005F0CD8028002E710D401F93A0020F738FD +:109658000020F4081800C020D80AF01F00035F0C8F +:10966800D80200008002E710D42119D919881AD924 +:1096780019C91AD919B91AD919A91AD91999486732 +:109688001AD9486A1AD8312B0E9CF01F00050E9C77 +:109698002FADD822000016E0800399848002EC40A8 +:1096A800D4214058F5D8C008F00916181ADAF5D8A8 +:1096B800C108F1D8C2081ADA48671AD8486A1AD90C +:1096C800310B0E9CF01F00050E9C2FCDD8220000F8 +:1096D800000016F4800399A48002EC40D421488746 +:1096E8001896321A300B0E9CF01F00060C9BED3AB0 +:1096F80000200E9CF01F00040E9CD822000016BC0F +:109708008002E8BC8002E736D431300318971696F9 +:109718001491129218950694C1D805002FF4009C54 +:10972800F01F0012F80300030C33E0880009201D25 +:1097380048FC1AD6F01F000F2FEDC108201DEE05BA +:10974800010B1AD00A9C0C0B48BAF01F000C2FED25 +:1097580018050234CE350E35C021D83A30080AF83B +:10976800EA07010CD83200008002EDD0800399B4DA +:10977800800094C4800399CC8002EC40D4211897CF +:109788002DFCF01F001B201D1ADC49ACF01F001A2D +:109798000E9CF01F001A500C499CF01F00176EC851 +:1097A800498C5008F01F00146EF82FED5818C0416E +:1097B800495CF01F0011EF3800383049F2081800F2 +:1097C800C0E03059F2081800C0603029F2081800CB +:1097D800C091C03848DCC04848DCC02848DCF01FCD +:1097E800000648DCF01F0004D822000080009670B4 +:1097F800800399CC800094C4800096E4800399D0BB +:10980800800399D8800399E8800399F480039A0823 +:1098180080039A1C800384D4D421202DFACCFFFC29 +:10982800F01F000C401870185808C04148ACF01FD1 +:10983800000B3007C0887008F007032CF01F0008E1 +:109848002FF75C57401870191237CF632FEDD822C5 +:1098580080018F0480039A40800094C4800097841C +:10986800D431202D300818921696BAE8169CF01FAD +:10987800001DEDBC0000C04149BCF01F001C3007B2 +:109888002FF649B30E94FAC5FFFCC208660BF6081A +:109898000709E2190044C210E04700405F9C0D8AA6 +:1098A800F60A0709E21900445F09F9E91009E8090D +:1098B8001800C131BADABAC8310A300B0A9C2FE64F +:1098C800F01F000CE4070B0C2FF7ED38FFFF5808CA +:1098D800CDE10E9C5C5CC028300C2FEDD832000026 +:1098E8008002EDD080039A50800094C40000049C4C +:1098F8008002F0ECD421204D1A981AD8FAC8FFF843 +:109908001AD8FAC8FFF01AD8FAC8FFE818971AD870 +:10991800169C49BBF01F001B2FCD584CC221403864 +:10992800E04800FFE08B001E402B580BC1A5E04B20 +:1099380000FFE089001740195809C135E04900FFC8 +:10994800E0890010400A580AC0C5E04A00FFE089D3 +:109958000009B16BF7E811881448F1E91088C028AC +:109968003008F0091618AEB8AE890E9CF3D8C208B4 +:10997800F1D8C108AE99AEA82FCDD82280039A603D +:109988008002EBF4486870085808F9BC00FFF9B980 +:109998000101F1F91E10F9BC01015EFC0000170479 +:1099A800D4214988169770085808C021DC2A580C19 +:1099B800C080189B321AF0CCFFEFF01F0013C0389C +:1099C800F16C003148F85807C080700C0E9B306A63 +:1099D8002CECF01F000DC088700C306A2CECE06B8A +:1099E80000FFF01F000A48787008F139003130088C +:1099F800F0091800C021DA2AF01F0005DA2A000051 +:109A0800000017048002E7368002E8BC80019EF857 +:109A1800D4314A241896169714951292680358035D +:109A2800C3B1338B301CF01F001E890C189BC0B1CA +:109A380049C89088EDB80003C2F1201D49A849BC67 +:109A48001AD8C10849ACF01F001B49691891581C65 +:109A5800C0E09288EDB80003C1F1201D4928496C87 +:109A68001AD8F01F00163FFC2FEDD8326808913243 +:109A7800F16300109106911791259288EDB80003C3 +:109A8800C020D8324888201D48DC1AD8F01F000BA7 +:109A9800029C2FEDD832DC3A000017048002DC3C2F +:109AA800000016A280039A8080039AE080009AC87A +:109AB80080018F2480039AF8800094C480039B203F +:109AC800D431202D1697581CC290C083582CC670CC +:109AD8004A78583CE08101A8C998F01F00264A48F6 +:109AE80018969088EDB80003C0A1F01F00234A38EB +:109AF8001ADC4A3C1AD8F01F00232FED333CF01F24 +:109B08000022334CF01F00216E185808E08001979E +:109B18006E3B0C9C5D18E08F019249589088EDB817 +:109B28000003C08149A8201D49AC1AD8F01F0015B0 +:109B38002FED334CF01F0014333CF01F0014EF39A5 +:109B480000103008F0091800E0800179F01F0012B9 +:109B5800581CE080017448689088EDB80003E081E3 +:109B6800016E201D48A848DC1AD8C659000016A264 +:109B78008001997C800096E480039AC880039B3812 +:109B8800800094C48000A3008000A2E680039CE8C3 +:109B980080039B5480019EF880039B784B589088E3 +:109BA800EDB80003C0814B48201D4B4C1AD8F01F5C +:109BB80000342FED4AF89088EDB80003C0814B18A7 +:109BC800201D4B1C1AD8F01F002E2FED333CF01F20 +:109BD800002F6E285808C0306E3C5D18EF39001011 +:109BE8003008F0091800E080012AF01F0029581CED +:109BF800E080012549F89088EDB80003E081011F55 +:109C0800201D4A084A3C1AD8C1699088EDB800035B +:109C1800C0814A18201D4A1C1AD8F01F00192FEDC0 +:109C28006E085808C0306E3C5D18EF3900103008D7 +:109C3800F0091800E0800103EF390031F00918003D +:109C4800E08000FDF01F00161894FACCFFFCF01F0E +:109C58000015581CC591401870185808C550300593 +:109C6800EEC1FFEFEEC3FFCE0A960A92C488000049 +:109C7800000016A280039ABC80039BAC800094C4A9 +:109C880080039A9880039BC48000A2E680019EF816 +:109C980080039BE880039AA880039C1C8001997C20 +:109CA80080018F04EF390031E4091800C080700882 +:109CB800029CF005032BF01F0041C1F0306A4C0BE9 +:109CC800069CF01F0040C0A040187008069CF005D4 +:109CD800032B2DFBF01F003CC1005806C0A0401804 +:109CE8006CC97008F005032870C81039E0890006AF +:109CF80040187008F00503262FF55C5540187019B8 +:109D08001235CD13C02830060C34C0415804E08108 +:109D1800009658065F1858045F19F1E90009C20057 +:109D2800089B0C9CF01F0025C1D068C8FE58FFC0D6 +:109D3800E08400856CCAF0C9FFF71439E084007F1D +:109D48004A299289EDB90003C0D1201D1ADA1AD820 +:109D580049F84A0C1AD8F01F00202FCDC0385808EF +:109D6800C0C0202DECCBFFDF306A1A9CF01F001B0F +:109D7800F01F001B2FEDC17849489088EDB800030B +:109D8800C0C1EECCFFEFF01F001749181ADC496C70 +:109D98001AD8F01F00112FEDEECCFFEFEF3B00318A +:109DA800F01F0012588CC060589CC2F0581CC21199 +:109DB800C458F01F000FC4288000965080039C38B8 +:109DC8008002EDE680009640000016A280039A8C7F +:109DD80080039C40800094C48002E73680019DDCAB +:109DE800800096E480039C6880019EA0800199CC45 +:109DF80049489088EDB80003C0814938201D493C86 +:109E08001AD8F01F00132FEDF01F0012581CC16064 +:109E180048C89088EDB80003C111201D48A848EC37 +:109E28001AD8C0989088EDB80003C081201D48B8A2 +:109E380048BC1AD8F01F00062FED2FEDD8320000CD +:109E4800000016A280039A8C80039C94800094C41E +:109E580080019EF880039CB080039ABC80039CCC50 +:109E6800D4012FEC580BC080F7DCC008FE7C28001A +:109E7800F01F0005D802F7DCC008FE7C2800F01FA0 +:109E88000003D8028000A6C68000A716D42148C7C0 +:109E9800C098300BFE7C2800F01F000A6E082FF8CF +:109EA8008F086E0CF7DCC008CF51F9DCC288F01FB0 +:109EB800000630194858B089D82200000000170859 +:109EC8008000A7FA80009E680000170CD40148683B +:109ED800300B700CF9DCC288F01F000430094848C8 +:109EE800B089D8020000170880009E680000170C8F +:109EF800D421202D4948301B700CF9DCC288F01F92 +:109F08000013E06B00D7FE7C2800F01F0011FAC791 +:109F1800FFFAE06B00FFFE7C2800F01F000D0E9B8F +:109F2800FE7C2800F01F000B9AB8EDB80007CF217F +:109F38004858300B700CF9DCC288F01F00042FED74 +:109F4800D82200000000170880009E688000A7FA49 +:109F58008000A816D421202D49B8A96C910C49B8C5 +:109F680011893008F0091800C030F01F00193009B5 +:109F780049684957B0896E0C301BF9DCC288F01F5C +:109F88000015E06B0082FE7C2800F01F00136E08AD +:109F9800F3D8C008FAC7FFF8F7D8C10CFE7C280030 +:109FA800F3EB109B0EDBB18BF01F000B0FABFE7CAD +:109FB8002800F01F00090FBBFE7C2800F01F0006D8 +:109FC8002FEDDA2A000017080000170C80009EF811 +:109FD80080009E688000A7FAD42149381897118913 +:109FE8003008F0091800C0604908700CA98CF01FEF +:109FF8000010EEC6FF000F3BFE7C2800F01F000D8E +:10A008000C37CFA14898300B700CF8CCFF00910C9E +:10A01800F9DCC288F01F000830194838301CB089B4 +:10A02800D82200000000170C0000170880009F5C71 +:10A038008000A7FA80009E68D421202D4A78A96C58 +:10A04800910C4A7811893008F0091800C030F01FC7 +:10A05800002530094A284A17B0896E0C301BF9DCF4 +:10A06800C288F01F0021E06B00D2FE7C2800F01FA0 +:10A07800001F6E08F3D8C008FAC7FFF8F7D8C10C5C +:10A08800FE7C2800F3EB109B0EDBB18BF01F001752 +:10A098000FABFE7C2800F01F00150FBBFE7C2800CC +:10A0A800F01F0012E06B00FFFE7C2800F01F000F7D +:10A0B800E06B00FFFE7C2800F01F000CE06B00FF47 +:10A0C800FE7C2800F01F0009E06B00FFFE7C2800E2 +:10A0D800F01F00062FEDDA2A000017080000170C01 +:10A0E80080009EF880009E688000A7FAD421202D69 +:10A0F800498818973009118AF20A1800C070B08987 +:10A108004958700CA98CF01F0015FAC5FFFAEEC665 +:10A11800FF00E06B00FFFE7C2800F01F00110A9B87 +:10A12800FE7C2800F01F000F9A380EC80C37CF218C +:10A138004898300B700CF8CCFF00910CF9DCC28801 +:10A14800F01F000930194838301CB0892FEDD8228B +:10A158000000170C000017088000A0408000A7FA34 +:10A168008000A81680009E68D4211897C088F01F28 +:10A178000006486CF01F000620175C87483C58070B +:10A18800CF71DA2A800090C40000171080009FE089 +:10A19800D4211897C088F01F0006486CF01F0006ED +:10A1A80020175C87483C5807CF71DA2A8000A0F452 +:10A1B80000001710800090E0D4213027FAC4FFEC8B +:10A1C8001896A887C0C80C9A089BFE7C2800F01F28 +:10A1D8000009C020D82A09882FF8A8880988EE081D +:10A1E8001800FE98FFF230094838301CB089D82290 +:10A1F8008000A73C0000170CE1B80000EE18000131 +:10A20800F1D8C201C020D3033019F20B094B994B86 +:10A21800783958085E0CD5035EFCFE681400700996 +:10A22800F3DCD0C191095EFCF8081605A968E0289E +:10A23800F000581BC0D0C063582BC0F0583BC12059 +:10A248005EFF3019F20C0949916991A9C108F60C11 +:10A25800094B915B91ABC0B83019F20C094991696F +:10A26800C0583019F20C0949915991993019F20CDA +:10A27800094C912C5EFDD703D4213007189616940B +:10A288000E95C0880D9B0D8C2FF72FE6F01F00044C +:10A2980018450837CF830A9CD82200008000A230D6 +:10A2A8003018F00C0948A59CA96CE02CF000F9487E +:10A2B800004899185EFC3018F00C0948A59CA96C58 +:10A2C800E02CF000F94800745EFC3018F00C0948E6 +:10A2D800A59CA96CE02CF000F94800785EFC3018C9 +:10A2E800F00C0948A59CA96CE02CF000F948005432 +:10A2F800F948004499185EFC3018F00C0948A59CF0 +:10A30800A96CE02CF000F9480058F9480044991865 +:10A318005EFC301AF8081605F40C0949A968E0280B +:10A32800F000F14900C4143BC080C043582BC0F171 +:10A33800C098F14900A8C038F14900A4F14900B813 +:10A34800C078F14900A8F14900B4C0285EFAF14983 +:10A3580000945EFD3018F00C0948A59CA96CE02C0F +:10A36800F000F94800985EFCF8081605A968E0288E +:10A37800F000F0F800D0F00C0A4CF9DCC0015EFCEB +:10A388003018F00C0948A59CA96CE02CF000F9489D +:10A3980000D85EFCC008D703F3DBC0054898A59B2E +:10A3A800F00B00387018F009092C4878F5DAC0026B +:10A3B800F00A0329FE780800F00B09295EFC00006A +:10A3C80080039CFC8003773CD42148F8E3B8000163 +:10A3D80048E848F9700E48FC3008FE7B0800C0E8E1 +:10A3E8007216EC0A00262FFA8D0C0E3ACFA3F60847 +:10A3F800092E2F892FF85948C0407207300ACF6BB1 +:10A40800D8220000800376008003773C80039CFC00 +:10A418008000A39CE0680083FE790800F00C010C22 +:10A42800F20C0328F0CAFFC0F20A032C580C5E0C89 +:10A438004869F80C1200F2080038F80C111F70185F +:10A44800F00C032C5EFC000080039CFC78C83019DB +:10A45800F1D9D10399C85EFC78C83019F1D9D00177 +:10A46800F1DBD20399C85EFCD421FAC4FFEC68176B +:10A47800680EEFD7C003FDDEC0013004E9D7D00372 +:10A48800E9DED0E1E9D7D103E9DED1E1E9DAD203A7 +:10A49800E9DBD2E1E9D8D303E9D9D3E199147958B2 +:10A4A800EDB80005CFD1D822D4213007405E2F8BDC +:10A4B800EFD8D021EFD9D104EFDAD204EFDED306FA +:10A4C800F80B0927D822F5E910192F8BF3E8102883 +:10A4D800F80B0329F3D8D043F80B09295EFC2F8B1E +:10A4E800F80B0328A1A8F80B09285EFC7958EDB8E9 +:10A4F8000000CFD15EFC7808F1DBD00299085EFC41 +:10A50800EC5BBB9FE08B0004304BC138E068C6BFF2 +:10A51800EA18002D103BE08B0004305BC0A8E0680F +:10A528001200EA18007A103BF9BB0306F9BB0207D0 +:10A5380078A8F1DBD00399A878A8F1DAD10399A813 +:10A548007808A3A899087958EDB80007CFD17808FA +:10A558003019F1D9D00299085EFC7808EDB80004EA +:10A56800CFD07808A1A899087808EDB80004CFD012 +:10A578005EFC301899485EFC7808EDB80004CFD02E +:10A58800992B7808EDB80004CFD05EFCD42130F8C0 +:10A5980014951697F00A18005FBA30181896F00B41 +:10A5A80018005FB9F5E91009C020D82AF00B180087 +:10A5B800C0A1FE7C0C00F01F0015300BFE7C0C00C7 +:10A5C800F01F00136C08EDB80004CFD0A377B1A733 +:10A5D800EFE510878D076C08EDB80004CFD06C0844 +:10A5E800E2180010CFD18D186C08EDB80004CFD058 +:10A5F8006C08EDB80004CFD03FF88D286C08EDB892 +:10A608000004CFD0DA2A00008000A4548000A4609F +:10A618003038F00A18005FB93078F00B18005F88FE +:10A62800F3E81008C1913108F00B1800E08B001511 +:10A63800E06800809908208BF4081601F5DAC0015B +:10A64800F1EB104B580AF9BA0100F9BA0002F7EA1F +:10A65800100A99CA5EFD302C5EFCD4013019189896 +:10A66800F73B000DF20B1800E0880004302CD802EC +:10A67800300AE06900809909301E7019149CF3DED5 +:10A68800D001F3DBD081F3DAD0E130FAF3DAD20487 +:10A698009119D802D4013018F00B18005FBEF00AE7 +:10A6A80018005FB81C48C030302CD8027818F1DB8D +:10A6B800D021F1DAD041F1D9D3089918D80A7819FC +:10A6C8001898EA19000F9919781CE21C0004C100B7 +:10A6D80030E9F20B1800E08B001A7019B16B300CDE +:10A6E800EA1BFFF0E81BFFFF126B911B5EFC303981 +:10A6F800F20B1800E08B000B70192F0B301AF40BBB +:10A70800094B5CDB126B911B5EFC302C5EFCE06835 +:10A718002710C0585808C0215EFF20187849EDB9A5 +:10A728000009CF917818EA18000F9918FC18010051 +:10A7380099085EFDD4313036F737000CEC07180065 +:10A74800E08B0050F733000B301EFC031800E08B41 +:10A758000049F73800083079F2081800E08800420C +:10A768003109F2081800E08B003D7619F205160150 +:10A77800F4050005EA090D04E8C90001E04900FEF6 +:10A78800E08B0030F0CA00080E923008EC1200018D +:10A79800A197F1D7D001F1D2D021F1D3D061F1DA6C +:10A7A800D084F73A0009F1D4D1081789F1DAD20830 +:10A7B800F73A000AF1DAD308FC091800C0C0C093C0 +:10A7C800302AF4091800C090EC091800C0A1C0781C +:10A7D80099C8C06899D8C04899E8C02899F8D83A63 +:10A7E800302CD832301899085EFC784CF9DCC0213E +:10A7F8005EFCE0682710C0585808C0215EFF20188A +:10A808007849EDB90001CF915C7B993B5EFDE0682A +:10A818002710C0585808C0215EFF20187849E2194F +:10A828000201E0490201CF717828300CB6085EFCBD +:10A8380076095829E08800035EFE7618A769109B00 +:10A84800E61BC000120CF3D8C003AFB91649109B21 +:10A85800E61B30001649109BE61B0C001649109B9E +:10A86800E61B03001649109BE61B00C01649109B07 +:10A87800E61B00301649109BE61B000C1649109B7E +:10A88800E61B00031649109BE21B60001649109B4B +:10A89800E21B10001649109BE21B0C001649109B86 +:10A8A800E21B03002FCC1649109BE21B0080109A74 +:10A8B8001649E21A0008109BE2180030E21B00401B +:10A8C8001649F3E81008144899085EFDF6081506BD +:10A8D800582BF9BC0BFFF9D8E80CF9B80805F9F8BA +:10A8E8008A00F9BC08005EFC582BE08800035EFE75 +:10A8F800F6081506F80800082FC87008EDB8000F0C +:10A90800C0C1A76BF3DAC010160C2ECC7808E0187B +:10A918000000F3E810089908F9DAC0105EFC582B1B +:10A92800E08800035EFEA76B160C7818EDB8000FE0 +:10A93800C0A12E4CF3DAC0107808E0180000F3E844 +:10A9480010089908F9DAC0105EFCD401F60E150457 +:10A958001C3AF9BE0210F9BE0308FC0B024BF608BC +:10A968001601F00A003AF40B0D0AF4091603F2C8AE +:10A978000001E048FFFEE0880003DA0A7818E86B77 +:10A988000000E418FFF7E018FECF590EF60E171076 +:10A99800F9BE0000FDE810089918F5DAC003F3EADB +:10A9A80011099989D80A7858EDB80001C030302CBF +:10A9B8005EFCF7DBC009997B5EFD7858E21800E081 +:10A9C800C030304C5EFC7859EDB90000F9BC010389 +:10A9D800F9F90006F00C1700E06A01FFF3DAE02845 +:10A9E800F7F80A005EFCE1B80000EE180001F1D8A3 +:10A9F800C201C020D3033FF9993978595808C020BB +:10AA0800D50330089918999899A8EA68610C9908AB +:10AA18005EFCD703D421201D500A16961897F01F04 +:10AA2800002F400A5806C5500DC83049F2081800D2 +:10AA3800E08800503095EA081800E08B004B0DD9EB +:10AA48003078F0091800E08B00458C39E068010186 +:10AA5800F0091900E08B003EED3900083038F009A4 +:10AA68001800E08B00376C0B0E9CF01F001D581C63 +:10AA7800C3000DC8EA081800C0416E18B1B8C05824 +:10AA880020586E19F3E810688F186E19ED3A00080F +:10AA98000DD8A978F1EA10E812488F18302A8C38B6 +:10AAA800F3D8C010F4081900E08800086E18ADB893 +:10AAB8008F1820298FA9C0586E18F1E910C98F196D +:10AAC8006E18E018FFF08F18300C35088F08C02872 +:10AAD800301C2FFDD82200008000A9EE8000A9526A +:10AAE8004828910C5EFC0000000018E8D431189842 +:10AAF800783E580EC620F90600105806C5E0300901 +:10AB08003FF3129A3344C1780E91E8071800C0A1A8 +:10AB1800F2CAFFFEF4C9FFFF5C7A5C89FC0A070AE7 +:10AB2800C0A8F6071800C4A05C75FC050709E4096D +:10AB380000095C89EC091900C0F2F2C5FFFFF9D9D8 +:10AB4800C0105C85FC0C000CEAC2FFFF19870E914F +:10AB5800E6071800CDA1580AC3003019F20A1800F8 +:10AB6800C0617028E06900802948C0C87028302971 +:10AB7800F20A1800C0412D483409C0482D48E06940 +:10AB880000C0300C3FF7C0D8F60A1800C1705C7ED0 +:10AB9800F00E070CEC0C000C5C8CF20C1900C0D207 +:10ABA800F8CEFFFF5C7C5C8EF00C000CFCC6FFFF4F +:10ABB800198AEE0A1800CE91300CD832D401F9085F +:10ABC800001CF3D8C010F2CEFFFE140EE04E004475 +:10ABD800E088000F48F8201D1AD8E06804E31AD866 +:10ABE80048D848EC1AD8F01F000E2FCDC008786E50 +:10ABF800FC090009F36B00F02FF8786BF3D8C0104C +:10AC0800F6090009F36A00F02FF8F958001CD80279 +:10AC180080039DC480039E0880039D9C800094C48B +:10AC2800D4013439F908001CF2081900E088000F33 +:10AC380048C8201D1AD8E06804EE1AD848A848BCAD +:10AC48001AD8F01F000B2FCDC008786AF3D8C010AF +:10AC5800F4090009F36B00F02FF8F958001CD8022A +:10AC680080039DC480039E5080039D9C800094C4F3 +:10AC7800D401580CC0E14B18201D1AD8E068062BE7 +:10AC88001AD84AF84AFC1AD8F01F002F2FCDC0084E +:10AC9800786A580AC0E14A98201D1AD8E068062C3C +:10ACA8001AD84AA84A7C1AD8F01F00272FCDC00806 +:10ACB800F908001C3439F2081900E088000F49F837 +:10ACC800201D1AD8E068062D1AD84A1849DC1AD867 +:10ACD800F01F001D2FCDC008F7D8C010160A3FFB83 +:10ACE800F56B00F02FF8129B5C88300AF958001CAD +:10ACF800C1584928201D1AD8E06806321AD8494890 +:10AD0800490C1AD8F01F00102FCDC008F1DEB01082 +:10AD1800786EFC090009F36A00F0F0CEFFFFF3D863 +:10AD2800C010F6081900FE98FFF3F958001CF3D973 +:10AD3800C002CE01D802000080039DC480039E8C0F +:10AD480080039D9C800094C480039EB080039EDC99 +:10AD5800D401F908001CF3D8C010F2CAFFFEE04A7B +:10AD68000044E088000F4918201D1AD8E06804F54F +:10AD78001AD848F848FC1AD8F01F000F2FCDC00881 +:10AD8800786AF4090009F5DBC108F36A00F02FF8C6 +:10AD9800786AF3D8C010F4090009F36B00F02FF8B3 +:10ADA800F958001CD802000080039DC480039F1C32 +:10ADB80080039D9C800094C4D401F908001CF3D83A +:10ADC800C010F2CAFFFCE04A0044E088000F49B80E +:10ADD800201D1AD8E06804FD1AD84998499C1AD849 +:10ADE800F01F00192FCDC008786AF4090009F60A87 +:10ADF8001618F36A00F0786A2FF8F3D8C010F4092F +:10AE08000009F5DBC208F36A00F0786A2FF8F3D876 +:10AE1800C010F4090009F5DBC108F36A00F02FF847 +:10AE2800786AF3D8C010F4090009F36B00F02FF822 +:10AE3800F958001CD802000080039DC480039F605D +:10AE480080039D9C800094C4D421F9380035A3D890 +:10AE5800F9680035189678A75807C2406E1C580C38 +:10AE6800C050F01F001130088F186E285808C09184 +:10AE78006E355805C061EF090010EA091900C0E0F5 +:10AE880048A8201D1AD8E06804C51AD84888489CE4 +:10AE98001AD8F01F00092FCDC0080E9CF01F00071C +:10AEA8008DA5D8228001122880039DC480039FA00D +:10AEB80080039D9C800094C48002E28CD421189762 +:10AEC800782C580CC050F01F000830088F286E3CB2 +:10AED800580CC070F01F00043008EF5800108F386D +:10AEE800D82200008002E28CD4211896580CC0E1C8 +:10AEF8004AE8201D1AD8E06805D11AD84AC84ADCA1 +:10AF08001AD8F01F002D2FCDC00878A75807C0E128 +:10AF18004A68201D1AD8E06805D31AD84A784A5CCE +:10AF28001AD8F01F00252FCDC0086E585808C0E069 +:10AF380049E8201D1AD8E06805D41AD84A0849DC1F +:10AF48001AD8F01F001D2FCDC0086E655805C0E047 +:10AF58004968201D1AD8E06805D51AD84998495C6F +:10AF68001AD8F01F00152FCDC0080A9AE06B0134DB +:10AF78000A9CF01F00158F5CC041E06C00FFD822CE +:10AF88009859E0680133F0091900E08B00214878EE +:10AF9800201D1AD8E06805DD1AD848C8485C1AD8B8 +:10AFA800F01F00052FCDC00880039DC480039FB407 +:10AFB80080039D9C800094C480039FD880039FFCDD +:10AFC8008003A0288000D3188003A054EF38001312 +:10AFD800EA081800C0514D3870092FF991097818FE +:10AFE800301B8F684CF9720A8F0AB09BB08B306B9C +:10AFF800B0ABF40B1618B0CBF7DAC2083009B0FAC8 +:10B00800B0DBF5DAC108305BB0B9F1690008F16965 +:10B018000009F169000AF169000BF169000CF16996 +:10B02800000DF169000EF169000FB0EAEF3A001265 +:10B03800F60A18005F0C30ABF60A18005F0BF9EB44 +:10B04800100BF20B1800C0513049F20A1800C0D199 +:10B058000DC9F169000C0DD9F169000D0DE9F1690F +:10B06800000E0DF9F169000F3009ECCAFFD1F16942 +:10B078000010F1690011F1690012F1690013F1691A +:10B088000014F1690015F1690016F1690017F169FA +:10B098000018F1690019F169001AF169001BF0CB79 +:10B0A800FFE4ED35002E3106EA091900F9BC02006B +:10B0B800F5FC380016CC2FF92FFA5C89EC09190039 +:10B0C800CF413009F0CAFFD4129C340B14CC2FF9AD +:10B0D8005C89F6091900CFB13009F0CAFF94129CB7 +:10B0E800E06B008014CC2FF95C89F6091900CFB108 +:10B0F8003639F16900EFF16900EC3829F16900EDA2 +:10B108003539F16900EE344A3009F0C8FF10EF59BB +:10B11800001C10C92FF95C89F4091900CFB1D82A8D +:10B12800000001F0D421580CC0E14A28201D1AD88B +:10B13800E06806141AD84A084A0C1AD8F01F0020EA +:10B148002FCDC00878A75807C0E149A8201D1AD8F4 +:10B15800E06806161AD849B8498C1AD8F01F0018A2 +:10B168002FCDC0086E5C580CC0E14928201D1AD8A4 +:10B17800E06806171AD84948490C1AD8F01F001079 +:10B188002FCDC0086E685808C0E148A8201D1AD8FD +:10B19800E06806181AD848D8488C1AD8F01F000852 +:10B1A8002FCDC008F01F000A30088F688F58D822AA +:10B1B80080039DC48003A09880039D9C800094C454 +:10B1C8008003A0BC8003A0E08003A10C8000D13CD8 +:10B1D800D42130D878A7EF390012F0091800EFF819 +:10B1E8001E12F9B80100EFF81E13300818968FE800 +:10B1F8008F988FB88FA88FD88FC8EF48004CEF482A +:10B208000048EF480044F01F0029EBDCC008C201E9 +:10B21800301A335B0E9CF01F0026307B0E9CF01F0B +:10B2280000250E9CF01F00246E5CEF0B001CF6CB73 +:10B23800FF105C7BF01F00210C983439EECAFFDC4C +:10B248006E5B6E1CF01F001E0C9CF01F001EEF387A +:10B2580000132FF85C58EF6800133099F2081800B3 +:10B26800E0880005E0692710C058E06903E8F009A4 +:10B2780002495C79E06801F4F2C9FE0DF2080C0895 +:10B288000C9CEF58001EF01F00100C9C48FBF01F90 +:10B2980000100C9C48DBF01F000F0C9C48BBF01FF3 +:10B2A800000E0A9CD82200008000AEF08000ABC4DB +:10B2B8008000AC288000AC788000D2108001139008 +:10B2C8008000B12C8000CABC8003B4098000CBC8C0 +:10B2D8008000CA748000CA92D421305878A7EF3908 +:10B2E8000012F0091800EFF81E12F9B80100EFF883 +:10B2F8001E131896F01F0026EBDCC008C2A1301AF6 +:10B30800335B0E9CF01F0023303B0E9CF01F002285 +:10B31800302A339B0E9CF01F001FED1B002C0E9C47 +:10B32800F01F001E0E9CF01F001E6E5CEF0B001C31 +:10B33800F6CBFF105C7BF01F001B0C983439EECA6B +:10B34800FFDC6E5B6E1CF01F00180C9CF01F0017D2 +:10B35800EF3800132FF85C58EF6800133099F208A3 +:10B368001800E0880005E0694E20C058E06907D061 +:10B37800F00902495C790A9CF2C9FE0DE06801F403 +:10B38800F2080C08EF58001ED82200008000AEF02A +:10B398008000ABC48000AC288000AD588000AC7839 +:10B3A8008000D210800113908000B12CD42118960F +:10B3B800580CC0E14AF8201D1AD8E06802F51AD8DE +:10B3C8004AD84AEC1AD8F01F002E2FCDC00878A70B +:10B3D8005807C4E0EF3900123088F0091800C4811A +:10B3E80017B8178A1799B169F3EA118917AAF3EA06 +:10B3F8001089F1E910096EA81039C3A130C8EF68A7 +:10B4080000123008EF680013F01F001E5C5CC28158 +:10B41800301A335B0E9CF01F001C304B0E9CF01F43 +:10B42800001B304A332B0E9CF01F00176EAB0E9C8E +:10B43800F01F00170E9CF01F00176E5CEF0B001C2E +:10B44800F6CBFF105C7BF01F00140C983439493A96 +:10B458006E5B6E1CF01F00120C9CF01F0012EF3880 +:10B4680000132FF8EF6800133148EF58001ED82258 +:10B4780080039DC48003A13880039D9C800094C4F0 +:10B488008000AEF08000ABC48000AC288000ADC066 +:10B498008000AC788000D2108003B405800113903E +:10B4A8008000B12CD421303878A7EF390012F00988 +:10B4B8001800EFF81E12F9B80100EFF81E131896DD +:10B4C800F01F002AEBDCC008C321301A335B0E9C46 +:10B4D800F01F0027303B0E9CF01F0026302A339BBC +:10B4E8000E9CF01F0023E06B02400E9CF01F002210 +:10B4F800304A332B0E9CF01F001E6EAB0E9CF01FC3 +:10B50800001F0E9CF01F001E6E5CEF0B001CF6CB9C +:10B51800FF105C7BF01F001B0C98343949AA6E5B46 +:10B528006E1CF01F001A0C9CF01F0019EF38001356 +:10B538002FF85C58EF6800133099F2081800E0887B +:10B548000005E0692710C058E06903E8F0090249DE +:10B558005C790A9CF2C9FE0DE06801F4F2080C0857 +:10B56800EF58001ED82200008000AEF08000ABC467 +:10B578008000AC288000AD588000ADC08000AC7859 +:10B588008000D2108003B405800113908000B12C94 +:10B59800D4214BD811B9118B119A11A8B16AF5EBC6 +:10B5A800118AF5E81088F3E8100878A78FA8EF3912 +:10B5B80000123068F0091800EFF81E12F9B80100FF +:10B5C800EFF81E131896F01F0031EBDCC008C3E13A +:10B5D800301A335B0E9CF01F002E301B0E9CF01FA0 +:10B5E800002D302A339B0E9CF01F0029ED1B002CE8 +:10B5F8000E9CF01F0029304A337B0E9CF01F00245C +:10B60800301B0E9CF01F0023303B0E9CF01F0021C6 +:10B6180031CB0E9CF01F001F306B0E9CF01F001DDD +:10B628000E9CF01F001E6E5CEF0B001CF6CBFF108B +:10B638005C7BF01F001B0C98343949AA6E5B6E1CAA +:10B64800F01F00190C9CF01F0019EF3800132FF899 +:10B658005C58EF6800133059F2081800E0880005BC +:10B66800FE79EA60C058E06903E8F20809495C79A4 +:10B678000A9CF2C9FE0DE06801F4F2080C08EF58C4 +:10B68800001ED8228003B4098000AEF08000ABC44D +:10B698008000AC288000AD588000AC788000D210C3 +:10B6A8008003B405800113908000B12CD421301898 +:10B6B80078A7EF390012F0091800EFF81E12F9B850 +:10B6C8000100EFF81E131896F01F0039EBDCC008D4 +:10B6D800C501301A335B0E9CF01F0036303B0E9CC0 +:10B6E800F01F0035302A339B0E9CF01F0032ED1BF3 +:10B6F800002C0E9CF01F0031304A332B0E9CF01F9B +:10B70800002D6EAB0E9CF01F002E304A336B0E9C42 +:10B71800F01F00286E9B0E9CF01F0029304A337BD7 +:10B728000E9CF01F0024301B0E9CF01F0023303BA2 +:10B738000E9CF01F002131CB0E9CF01F001F306BB8 +:10B748000E9CF01F001D0E9CF01F001E6E5CEF0B80 +:10B75800001CF6CBFF105C7BF01F001B0C983439E3 +:10B7680049AA6E5B6E1CF01F001A0C9CF01F001992 +:10B77800EF3800132FF85C58EF6800133059F208BF +:10B788001800E0880005FE79EA60C058E06903E81F +:10B79800F20809495C790A9CF2C9FE0DE06801F4D7 +:10B7A800F2080C08EF58001ED82200008000AEF006 +:10B7B8008000ABC48000AC288000AD588000ADC0CC +:10B7C8008000AC788000D2108003B405800113900B +:10B7D8008000B12CD421304878A7EF390012F00945 +:10B7E8001800EFF81E12F9B80100EFF81E131896AA +:10B7F800F01F0025EBDCC008C291301A335B0E9CA9 +:10B80800F01F0022303B0E9CF01F0021302A339B92 +:10B818000E9CF01F001EED1B002C0E9CF01F001D3F +:10B828000E9CF01F001D6E5CEF0B001CF6CBFF108A +:10B838005C7BF01F001A0C983439499A6E5B6E1CB9 +:10B84800F01F00180C9CF01F0018EF3800132FF899 +:10B858005C58EF6800133099F2081800E08800057A +:10B86800E0692710C058E06903E8F00902495C79EB +:10B878000A9CF2C9FE0DE06801F4F2080C08EF58C2 +:10B88800001ED8228000AEF08000ABC48000AC2837 +:10B898008000AD588000AC788000D2108003B405D9 +:10B8A800800113908000B12CD4314A5830167007AB +:10B8B80030A20C9330043055C3E86EA85808C3A0D2 +:10B8C800F1090022F2CA0001F15A0022EC0919001C +:10B8D800C151F1380012E40818005F0AE6081800A0 +:10B8E8005F09F5E91009E8091800C041EA081800DD +:10B8F800C2110E9CF01F0013C1D8F1090020F2CA32 +:10B908000001F15A0020EC091900C141F138001278 +:10B91800E40818005F0AE60818005F09F5E910094D +:10B92800E8091800C041EA081800C0410E9CF01F41 +:10B9380000066E075807CC21D8320000000080CCE2 +:10B948008000B7DC8000B2E0D4211896580CC0E122 +:10B958004C08201D1AD8E068024E1AD84BE84BFC58 +:10B968001AD8F01F003F2FCDC008F9380035A3D8EA +:10B97800F968003578A7F909002CE068023FF0095A +:10B988001900E088008B5807C091350CF01F00356E +:10B998001897E08000838DACC2E86E1C580CC0304C +:10B9A800F01F00316E585808C0E04AA8201D1AD868 +:10B9B800E068026C1AD84AD84A8C1AD8F01F0028B6 +:10B9C8002FCDC0086E285808C0916E385808C0613D +:10B9D800EF090010F0091900C0E049E8201D1AD845 +:10B9E800E068026E1AD84A2849CC1AD8F01F001C01 +:10B9F8002FCDC008350A300B0E9CF01F001EF01F1B +:10BA0800001E8F1C1895C0610E9CF01F001C8DA590 +:10BA1800C178344A49ABF01F001B499B343A6E1C6D +:10BA2800F01F00190C9A499B6E1CF01F00190C9C02 +:10BA3800F01F00185C5CC0700C9CF01F0017E06CD5 +:10BA480000FFD822ED380035A3B8ED680035D822BC +:10BA580080039DC48003A13880039D9C800094C40A +:10BA68008002E2A4800112288003A14880039FA0DD +:10BA78008002E8BC800112008002E28C8003B409D5 +:10BA880080011260800113208000BBBC800111F886 +:10BA98008000B5988000AE50E06C00FFD82200000E +:10BAA800D421202D1896580CC0E14BA8201D1AD877 +:10BAB800E06803781AD84B884B8C1AD8F01F0038E6 +:10BAC8002FCDC00878A75807C0E14B28201D1AD8E9 +:10BAD800E068037A1AD84B384B0C1AD8F01F00309C +:10BAE8002FCDC0086F295BF9C1102E2933C8E06A31 +:10BAF800FFFFF2080D081438F40817B0EF580020BB +:10BB08005808F9B80001EFF80C106F395BF9C1104B +:10BB18002E2933C8E06AFFFFF2080D081438F4082C +:10BB280017B0EF5800225808F9B80001EFF80C11C7 +:10BB38006EB850185808C041FC18FF0050186EC85D +:10BB480050085808C0716EA84019F3E80008A1A869 +:10BB58005008EECBFFD80C9CF01F0013FACBFFFC6B +:10BB68000C9CF01F00121A9B0C9CF01F00110C9CDF +:10BB7800F01F0010EF39001230A8F0091800EFF894 +:10BB88001E12F9B80100EFF81E132FEDD82200009D +:10BB980080039DC48003A16080039D9C800094C4A1 +:10BBA8008003A17C8000CBC88000CA928000CA7440 +:10BBB8008000CB88D43178A71896149574186E290C +:10BBC8005809C0916E395809C061EF0B0010F20B8B +:10BBD8001900C0E04BE8201D1AD8E06805651AD89E +:10BBE8004BC84BDC1AD8F01F003D2FCDC0088A5B2C +:10BBF80032BAF40B1900E088020F118B302AF40BCB +:10BC08001800E0810209F93C002EECCBFFD1F0CA04 +:10BC1800FFE4C0982FF917345C59153EFC0418004E +:10BC2800E08101FAF8091800CF6311FA11CB11D994 +:10BC380011E8B169F3EB1189F3E810896E08F5E9A9 +:10BC480010091039E08101E80E9CF01F00258A4C8C +:10BC5800E06800F0F00C1900E088000FF8CC00F064 +:10BC6800EF5C00105C7CF01F001F8F3CC051EF5C44 +:10BC78000010E08F01D1E06C00F0F01F001A8F2C4B +:10BC88001894C0C16E3C580CE08001C6F01F001625 +:10BC9800EF5400108F34E08F01BF189B3009E06A21 +:10BCA80000F00A9CF01F0011E06800F0F00C190089 +:10BCB800C2004878201D1AD8E068052E1AD848C84E +:10BCC800485C1AD8F01F00052FCDC00880039DC41A +:10BCD80080039FA080039D9C800094C48000AEC414 +:10BCE8008002E2A48002E28C8000CEC48003A1948A +:10BCF8006E3B580BE08001B2E06900F0EF1A0010CB +:10BD08000A9CF01F0036EF080010F8081900E080C0 +:10BD180001A54B38201D1AD8E06805351AD84B18EC +:10BD28004B1C1AD8F01F00312FCDC00819A8305A63 +:10BD3800F4081800E0810100EF3800123019F20809 +:10BD48001800E08100EC30086CA4333B89D889B82E +:10BD580089C8089CF01F0026C0F0F8C8FFFC19AB82 +:10BD6800119919BA1188B16AF5EB118AF5E81088AA +:10BD78001248E948004433AB089CF01F001DC0E09E +:10BD8800F8C8FFFC19AB119919BA1188B16AF5EB1B +:10BD9800118AF5E810881248C0386918A198E9484E +:10BDA800004833BB089CF01F0012C0E0F8C8FFFC35 +:10BDB80019AB119919BA1188B16AF5EB118AF5E82E +:10BDC80010881248C0286918E948004C6828F0C94A +:10BDD800FFF0C0F11298C1C88000CEC480039DC492 +:10BDE8008003A1C880039D9C800094C48000AAF4AD +:10BDF800F1390013F13B0010F13A0011F13800124B +:10BE0800B16AF5EB118AF5E81088F3E8100889A8FB +:10BE1800301B089CF01F0084C0E0F8C8FFFC19AB79 +:10BE2800119919BA1188B16AF5EB118AF5E81088E9 +:10BE3800124889B8303B089CF01F007BC0E0F8C866 +:10BE4800FFFC19AB119919BA1188B16AF5EB118A7F +:10BE5800F5E81088124889C831CB089CF01F007299 +:10BE6800C0E0F8C8FFFC19AB119919BA1188B16A7A +:10BE7800F5EB118AF5E81088124889D8306B089CD0 +:10BE8800F01F00691892C2E01998A38889E8582819 +:10BE9800F9B80B02E9F8BA0E3003C1D8E608150262 +:10BEA800E6C9FFF22FE8E8090029E4080008113E76 +:10BEB800113AB16AF5EE118A118EF5EE108A1191D8 +:10BEC800069CF5E11001F2CBFFFC93112FF3F01F54 +:10BED80000575C5368E81033CE23069C4D4BF01F87 +:10BEE80000536CA43008E93A00123089EF58001E5C +:10BEF800F20A1800E9F91E12E9F81E130C9C300A20 +:10BF0800E8CBFFD8F01F004BE93800132FF8E96899 +:10BF180000133018E958001EC7E820383029F20805 +:10BF28001800E08B007930080C9CEF58001EF01FB9 +:10BF38000042C7183069F2081800C3513019EF38A9 +:10BF48000012F20818005F0B3039F20818005F0978 +:10BF5800F7E91009C0813049F2081800C040F40818 +:10BF68001800C5916CA40C9C3003EF53001EF01F01 +:10BF780000330C9C4AEBF01F00320C9C4ACBF01F9C +:10BF880000310C9C4AABF01F0030E939001230C870 +:10BF98000C9CF0091800E9F31E13E9F81E12F01FB3 +:10BFA800002BC398302AF4081800C351EF38001248 +:10BFB800F2081800C30130086CA4EF58001E336B58 +:10BFC800089CF01F0019C270F8C8FFFC19AB119942 +:10BFD80019BA1188B16AF5EB118AF5E81088124888 +:10BFE80089986828F0C9FFF0C0311298C108F13962 +:10BFF8000013F13B0010F13A0011F1380012B16A58 +:10C00800F5EB118AF5E81088F3E8100889A80C9C6C +:10C01800F01F000F0E9CF01F000F0A9CF01F000E6F +:10C02800D83200008000AAF48000C19C8003B409C3 +:10C038008001384C8000BAA88000CABC8000CBC8F8 +:10C048008000CA748000CA928000B5988000B6B497 +:10C058008000AEC48000D13C335B0E9CF01F00030F +:10C06800FE91FE66CD8B00008000AAF4D4314C18F6 +:10C07800301370073002069430813050C7686EA6BE +:10C088005806C720ED05001EE6051900E0880006E1 +:10C098002015ED55001EC688E6051900C651ED3875 +:10C0A8000012306AED52001EF40818005F0A30C909 +:10C0B800F20818005F09F5E91009300AF4091800B8 +:10C0C800C501E8081800C0B1ED380013E0081800F1 +:10C0D800E08B00360E9CF01F0028C468E2081800A8 +:10C0E800C191ED380013E8081800E08B0010300A01 +:10C0F800ECCBFFD80E9CF01F0021ED380013ED5556 +:10C10800001E2FF8ED680013C2F80E9CF01F001CEB +:10C11800C2B8E0081800C0510E9CF01F001AC248AF +:10C128003049F2081800C0F1ED380013E208180091 +:10C13800E08B00060E9CF01F0014C1680E9CF01FD7 +:10C148000013C0F83039F2081800C0E1ED380013C8 +:10C15800E8081800E08B00060E9CF01F000DC04890 +:10C168000E9CF01F000C6E075807C8A1D8320000BB +:10C17800000080CC8000B6B48001384C8000BAA89A +:10C188008000B2E08000B7DC8000B1D88000B4AC99 +:10C198008000B598D4013019F20C1800E08B001D0E +:10C1A800580B5F1A48D9720958095F19F5E900094F +:10C1B800C13017B9178E179A17A8B16AF5EE118A08 +:10C1C800F5E81088F3E81008C0704858304AF00CB9 +:10C1D800002CF01F0004D80200001D5800001D505C +:10C1E8008002E736D42130181897F00B1800E08B3E +:10C1F80000074868304AF00B002BC038304A484BDB +:10C20800F01F00040E9CD82200001D508003B409C2 +:10C218008002E736D4313013189516911492E60C43 +:10C228001800E088000F4BB8201D1AD8E0680246B5 +:10C238001AD84B984B9C1AD8F01F00392FCDC0083C +:10C248004B89F20C0028F20C072B11BA119911A88E +:10C25800B169F3EB1189F3E81088F5E81008C0E13B +:10C268004AC8201D1AD8E06802471AD84AE84ABCCA +:10C278001AD8F01F002B2FCDC008300AE06B011030 +:10C28800149CF01F002A1897C041E06600FFC758A9 +:10C2980078045804C0E049F8201D1AD8E068024D17 +:10C2A8001AD84A3849DC1AD8F01F001D2FCDC0080B +:10C2B800781630CA089B0C9CF01F001EECC9FFF4CE +:10C2C800AC92ACD3E5D2C110ACA3ACC42011AC8203 +:10C2D80032EC2FF1F2C8FFFF300AC05810CBF5D26C +:10C2E800C0082FF1038BF4C2FFFFE80B18005F139F +:10C2F800F80B18005F16E7E60006E8061800CEF10E +:10C30800B28A0389E8091800C1601099CE3B000081 +:10C318008003A1E48003A22880039D9C800094C42C +:10C3280000001D508003A2408000D3188003A2643F +:10C338008002E8BCF0CBFFFB10C9B089B0A9301966 +:10C34800B099B0B96E180E9C101B5C7BF01F000CE6 +:10C3580048C848D6F0050025335A6C0C0A9BF01FD4 +:10C36800000B6C0C0A9A33590E9BF01F0009EDDC88 +:10C37800C0080E9CF01F00070C9CD8328000D21019 +:10C3880000001D5000001D5880011320800114F08A +:10C398008000D13CD421189A303CF80A1800E08873 +:10C3A800000F4BE8201D1AD8E068028A1AD84BC83B +:10C3B8004BCC1AD8F01F003C2FCDC0084BB8E06713 +:10C3C8000118F4070247F007000730180F8B169979 +:10C3D800F00B1800C0A0C603302BF6091800C0F0F7 +:10C3E800F8091800C4C1C4383008AEABAEB8AE986E +:10C3F800EECBFFF43028300CAE88C3680FA92019A3 +:10C408005C59AEA9C4910FBB2FFB5C5BAEBB0F9C04 +:10C41800304EFC0B1800C251F20C1800C1214A4AD8 +:10C4280015FB15CE15DC15EAB16CF9EE118CF9EA9D +:10C43800108AF7EA100AC050AEB9AEA8AE98D82252 +:10C44800EEF801105808C070EEFA0114300BEECC6B +:10C45800FFF45D183008AE883008EF480110D82284 +:10C46800AEABEECBFFF4F01F0013D8226E282018D5 +:10C478008F28C121EF480110AE88D8224878201DA6 +:10C488001AD8E06802C61AD848B8486C1AD8F01FFB +:10C4980000062FCDC008D8228003A1E48003A28023 +:10C4A80080039D9C800094C4000018F000001D507B +:10C4B8008000C21C8003A29CD431580B5F081292E2 +:10C4C80016974BB914967209189558095F04F1E448 +:10C4D8001004E08100B6580CE08000B31989E8091F +:10C4E8001800E08000AEF01F0033E04C00FFE08B46 +:10C4F80000A84B1B0A9CF01F0031C08137F8AEA47E +:10C50800AE88AE9C3018AEB8D8320A9CF01F002C0A +:10C51800F8081618AE88F1DCC208AEBCAE98F1DC9B +:10C52800C108AEA85BFCE081008F4A63300430305C +:10C5380006910788E0081800C171E80400280A9CE1 +:10C54800F00B1503101B2FFBE20B003B2FCBF01F4A +:10C55800001BC0A1E0680118B13449A8F004000428 +:10C56800E8F8010CC0782FF4E6C3FEE85844CE2161 +:10C578003FF8F0091618AE89F3D8C208AEB8AE99DC +:10C58800F3D8C108AEA95BF8C5E1300748E848DB35 +:10C59800118A0E9C0E9930313043F2C0FFFF178488 +:10C5A80016985804C1211297C358000000001D585E +:10C5B8008002EDD08003A2BC8002ECC880011E106E +:10C5C800000018F0000018ECE2041800C0C117C8F9 +:10C5D800F4080104F40801081838E08A0005F9D4C1 +:10C5E800C0081297F3D0C008F6CBFEE8E609180099 +:10C5F800CD513039F2071800E08B0027494BE0682D +:10C608000118EE080248F6080008118BF20B180012 +:10C61800C1B1F4C9FFFFB0CAF1460110301AF142A6 +:10C628000114B08AF0CCFFF448A80A9BB089F01F27 +:10C63800000A0E9CF01F0009E06C00F2D832E06C92 +:10C6480000F7D832D83AE06C00FFD832000018F072 +:10C65800000018EC8002ED708000C39CD40148985B +:10C6680070085808C0D0300CF01F0007301CF01FAD +:10C678000006302CF01F0004303CF01F0003D802E5 +:10C6880000001D588000C39CD421494C4946F01F26 +:10C6980000156C0518975805C1E1F01F00138D0CA3 +:10C6A800C1A0492B0A9AF01F00120A9A491B6C0C68 +:10C6B800F01F00116C085808C0E05807C0C0EE0908 +:10C6C800161848E8B0B7B089F3D7C208EFD7C10841 +:10C6D800B099B0A7D82200008003A2C800001D5856 +:10C6E80080011E10800112008003B40980011260CD +:10C6F8008000C704800111F800001D50D431E068A3 +:10C7080002001496944AF00A1900E08B00E331986D +:10C71800F00A1900E08800DE4DF75C7A30090E9BBC +:10C728000C9CF01F005E8C48F8081900E08100D2CC +:10C738000F993038F0091800E08B00CCE06501183B +:10C74800AB394D75120530290B8AF20A1800E081C1 +:10C7580000C1AA880FBAF5DAC004AADA0FD80FCB3D +:10C76800F1EB108B0FF80FEC5C8BF1EC108C3009AF +:10C778005C8C0FA8F2081800E084009DF20A1800EB +:10C788005F18301AF40B18005F1AF5E81008F20861 +:10C798001800E0810090EAC4FFF42F4708980F8939 +:10C7A800129AE21A00C0E04A00C0C1502FF7C098A0 +:10C7B800F3DBC0082FF7118BF40B1800C7B12FF863 +:10C7C800F2CB00010F8A5809CF41F20A1800C03095 +:10C7D8002FF8CE6B4B0B30082F4B1739129AE21AF1 +:10C7E80000C0E04A00C0C060120B1789F0091800A9 +:10C7F800CF51F1DCC0082FBB300E301A3047C58846 +:10C808001739129CE21C00C0E04C00C0C060120B3B +:10C818001789FC091800CF512FFB17CC17D9B1691C +:10C82800F3EC118917ECF7330008F3EC108917A221 +:10C8380017FC1781F9E91009F73C0009F9E3108C96 +:10C8480017B35C8CE7E2108317925C83E5E11082F2 +:10C85800F4021900C281F4031900C251EE0C190048 +:10C86800C2218B29E8593A80E0880005E8783A80A7 +:10C878008B28EAC7FEF42F6B304A0E9CF01F000984 +:10C88800EAF801105808C250EAFA01140E9B089CF5 +:10C898005D18C1F800001D5C8000CEC4000018F0CF +:10C8A8008002E7365C7C20182F6C5C58180B5808FF +:10C8B800CA81EAF801105808C070EAFA0114300B6E +:10C8C800EACCFFF45D183008AA883008EB4801105C +:10C8D8000C9CF01F0002D8328000D13CD401F01F1C +:10C8E8000003F01F0003D8028000C8F88000C6903B +:10C8F800D42149A949ABF2CCFEC4F2C8FF54300A8E +:10C90800F2C9FF50910A930AB22A172EF14EFFFC82 +:10C918002F092F081838CF71492949382FD9149C65 +:10C92800E019FFFCF0C6FFDC48D7490E910CEE0A6F +:10C938000405189BC098700493042FFB9109FC0A06 +:10C9480005045C8B0809EA0B1900CF632FC82FEA8E +:10C958000C38CED1D8220000000080D48003A2D8A1 +:10C9680000001F5C000072E88003A394D401580BF8 +:10C97800C200F1DBC002C0E048F8201D1AD8E06808 +:10C98800016B1AD848D848EC1AD8F01F000E2FCDE2 +:10C99800C00848D8F00C03299709F00C092B48B8AF +:10C9A800A56CF00C000CF8CCFF54780820189908F6 +:10C9B800D80200008003A2EC8003A33080039D9C72 +:10C9C800800094C4000072E8000080D4D421189834 +:10C9D800588CE088000F49F8201D1AD8E068013DFE +:10C9E8001AD849D849DC1AD8F01F001D2FCDC00825 +:10C9F80049CE49D9FC0C032CF0CAFFF5580CC230BB +:10CA0800A56AF00B15047807F20B000BFC08092740 +:10CA1800F6CBFF5414097608720A2FF8103AF3F887 +:10CA28003A009708F1DCC002C13048A8201D1AD886 +:10CA3800E068014F1AD848D8488C1AD8F01F000867 +:10CA48002FCDC008A56A140992282FF8B228D82239 +:10CA58008003A2EC8003A35080039D9C800094C4B3 +:10CA6800000072E8000080D48003A370580BC0C097 +:10CA780017B8178A179917ABB169F3EA1189F3EB5D +:10CA8800108BF1EB100B993B5EFC580BC0C017B82C +:10CA9800178A179917ABB169F3EA1189F3EB108B71 +:10CAA800F1EB100B992B5EFC4828910C5EFC000002 +:10CAB800000080D0D4211897F9380035EDB800006F +:10CAC800C0D1A1C8F968003578885808C0205D1819 +:10CAD8006E785808C0300E9C5D18D822F93C003595 +:10CAE800F9DCC0015EFC580CF9FB1A075EFCD703A1 +:10CAF800D421300A18971696302C96CBF01F001ABE +:10CB08001895C041E06600FFC2B80C9BF01F0017E3 +:10CB1800EDDCC008C0500A9CF01F0015C2180A9826 +:10CB280070095809C0301298CFCB6EF95809C15016 +:10CB38006F095809C0E148F8201D1AD8E068025367 +:10CB48001AD848D848DC1AD8F01F000D2FCDC008D5 +:10CB58009305EF480040C048EF4800408FF50C9C13 +:10CB6800D82200008000D3188000CF988000D13CE4 +:10CB78008003A3A88003A44480039D9C800094C4E0 +:10CB8800D4211897F9380035EDB80000C170A1A874 +:10CB9800F968003578885808C0205D186E785808FC +:10CBA800C0300E9C5D18EF380035EDB80005C06147 +:10CBB8000E9CEECBFFFCF01F0002D8228001370C40 +:10CBC800D42117881799B169F3E8118917A8F3E8F0 +:10CBD800108917B81697F1E91009189678181039BE +:10CBE800C27049A8700CC0A8780978356C1810393B +:10CBF800C041301BF01F00160A9C580CCF614958E1 +:10CC08007008C14870095809C1006C1A1439C0D19C +:10CC18000F8A0F99B169F3EA11890FAAF3EA10890B +:10CC28000FBAF5E91009910970385808CEC10F8A72 +:10CC38000FB90F98B168F1EA11880FAAF1EA1088C4 +:10CC4800F3E810088D18D8220000820C8000E12437 +:10CC580000008214D421149712961895F01F001022 +:10CC68005807C0C00FB80F8A0F990FA7B169F3EA28 +:10CC78001189F3E71087F1E710078B275806C0C022 +:10CC88000DB80D8A0D990DA6B169F3EA1189F3E67D +:10CC98001086F1E610068B36D82200008000CBC83B +:10CCA800D4213006999899169926993699A6997695 +:10CCB800998699F6F94600404908FAC4FFEC681EBF +:10CCC8006804F96600351185F96500382FF5B085D7 +:10CCD8001897994EF01F000A0E9C5D145C5C4898EA +:10CCE800580CEC071710F1F90000EFF90A00F1F7FA +:10CCF8000A000E9CD82200000000730C8000CC5C57 +:10CD0800000080CC1898300CC0482FFC70085C5C80 +:10CD18005808CFC15EFC580CF9F81207F9B901019F +:10CD2800F1D9E108F9F81C075EFCD703D401580CC7 +:10CD38005F08580B5F09F3E81008C1304978201DD7 +:10CD48001AD8E068028F1AD84958496C1AD8F01FC7 +:10CD580000162FCDC008964AF4080008B848129C5F +:10CD6800984878095809CF819859F0091900C0E006 +:10CD780048A8201D1AD8E06802971AD848B8489CD5 +:10CD88001AD8F01F00092FCDC0089649990BF20850 +:10CD98000008B848D80200008003A4708003A4B437 +:10CDA80080039D9C800094C48003A4ECD421169732 +:10CDB800F01F00065807EFF81207F9B90101F1D979 +:10CDC800E108EFF81C07D8228000CD34D421580C94 +:10CDD800C0E14B58201D1AD8E06801B01AD84B386A +:10CDE8004B3C1AD8F01F00332FCDC008580BC03168 +:10CDF800169CD8223008F00B1900C154F60911000E +:10CE080098585C89F2081900C0F24A78201D1AD88F +:10CE1800E06801B71AD84A884A5C1AD8F01F00257A +:10CE28002FCDC0081699F93E000C300A3037F40EA1 +:10CE380019005F08EE0E19005F061497104678185F +:10CE4800F4061800C0A0F00B01099919F8CAFFF000 +:10CE58001439C2029918DA2A201E3017EE0E19006A +:10CE6800E08B000CF40B1900C1D4985AF20A19008F +:10CE7800C19316189918C0E848B8201D1AD8E06858 +:10CE880001E61AD848D848AC1AD8F01F000A2FCDA6 +:10CE9800C00898581608B8589848F00B000BB84BBB +:10CEA800D82ADA2A8003A47080039EA480039D9C5C +:10CEB800800094C48003A51C8003A53CD43116913E +:10CEC8001497580CC0E14AD8201D1AD8E068033ED0 +:10CED8001AD84AB84ABC1AD8F01F002B2FCDC00860 +:10CEE800580BC070300518960A920A930A90C388A6 +:10CEF8004A28201D1AD8E068033F1AD84A384A1C25 +:10CF08001AD8F01F00212FCDC0085809C0A08C588E +:10CF1800F208010AF0091900C043F3DAB010C1F8A9 +:10CF2800F1D9C0108C54E8090109EE091900EE097D +:10CF380017B06C1BE9D9B010F9D5C010100BE20C72 +:10CF4800000C089A5C7AF01F0012E8030003081727 +:10CF5800E80500055C835C855C8730096C0658062B +:10CF68005F1AE40719005F18F5E80008E0081800E0 +:10CF7800CCD1069CD83200008003A4708003A5B0F1 +:10CF880080039D9C800094C48003A5D08002E7366E +:10CF9800D431580C5F08580B5F0918961697F3E8B8 +:10CFA8001008C06198499648F0091900C0E24C7809 +:10CFB800201D1AD8E06802FE1AD84C584C5C1AD8C2 +:10CFC800F01F00452FCDC00830050A945806C0E16F +:10CFD8004BE8201D1AD8E06803031AD84BF84BDC3D +:10CFE8001AD8F01F003D2FCDC0088C5808995C79DD +:10CFF8008E53F5D8C010F7D3C010121AF3D5C0104D +:10D00800F6090109123AE7D5E413E8091750F1D9EE +:10D01800E51308985C786C1C100CF1D5C0105C8383 +:10D028006E1BF5D3C010100BF01F002DE604000492 +:10D038008C585C84F0041900E088000F4A38201DE1 +:10D048001AD8E068030F1AD84A684A2C1AD8F01F71 +:10D0580000222FCDC008F0041900EDF60000F9B445 +:10D068000000E60500058E585C85F0051900E0888B +:10D07800000F4968201D1AD8E06803151AD849A876 +:10D08800494C1AD8F01F00142FCDC008F00519001C +:10D09800EFF72000F9B502005807C2908E598E4864 +:10D0A800F0091900C2416E085808C2104878201DBE +:10D0B8001AD8E068031F1AD848C8486C1AD8F01F55 +:10D0C80000062FCDC00800008003A4708003A5F4DB +:10D0D80080039D9C800094C48003A6248002E736C8 +:10D0E8008003A6348003A64C8003A6685806C16056 +:10D0F8008C598C48F0091900C1116C085808C0E017 +:10D108004898201D1AD8E06803241AD84878488C13 +:10D118001AD8F01F00082FCDC0085807FE91FF58F5 +:10D128000E9CD8328003A4708003A66880039D9C5F +:10D13800800094C4D421189B580CC0E14AB8201D23 +:10D148001AD8E068021C1AD84A984AAC1AD8F01FB4 +:10D15800002A2FCDC008F939000C3038F009180022 +:10D16800E088000F4A18201D1AD8E06802281AD84B +:10D178004A284A0C1AD8F01F00202FCDC0083007C3 +:10D18800303530169679F2C800015C885809C0E13C +:10D198004968201D1AD8E06802351AD84988495CC0 +:10D1A8001AD8F01F00152FCDC008B6785808C1B19D +:10D1B800F738000C169CF0C900017604EA0819003B +:10D1C800C031308CC068EC091900E08B0006307C57 +:10D1D800F01F000CC038F01F000C2FF7089B5C579D +:10D1E8005804CD110E9CD8228003A47080039EA4FD +:10D1F80080039D9C800094C48003A6948003A6AC01 +:10D208008000C9748002E28CD421580CC0E14B988C +:10D21800201D1AD8E068015F1AD84B784B7C1AD8C1 +:10D22800F01F00372FCDC0083019F938000CF2086C +:10D2380018005F1A3039F20818005F19F5E900097B +:10D24800C1405808C1203029F2081800C0E04A98A7 +:10D25800201D1AD8E06801631AD84AA84A7C1AD84F +:10D26800F01F00272FCDC0089848F00B1900C3F213 +:10D27800F3D8C0101897F1DBB0105C7B121BC27892 +:10D28800E04BFFFEE08A000F49A8201D1AD8E0688D +:10D2980001771AD849C8499C1AD8F01F00192FCD10 +:10D2A800C0088E481608AE486E075807C0E14918EE +:10D2B800201D1AD8E068017B1AD8494848FC1AD8BA +:10D2C800F01F000F2FCDC008F1DAB0108E59F00909 +:10D2D800010AF2081900FE9BFFD5AE48AE586E0C45 +:10D2E800580CC030F01F000A30088F08D822000000 +:10D2F8008003A4708003A70080039D9C800094C4D1 +:10D308008003A7188003A7348003A7488000D13C76 +:10D31800D431202D16971495581CC0B0C083582CB2 +:10D32800C040583CC0B1C1783004C0583144C0280E +:10D3380030042EC42E445C84C0F84C08201D1AD832 +:10D34800E06800D11AD84BE84BEC1AD8F01F003E21 +:10D358002FCDC00830045825E08B00065815E08210 +:10D3680000DDCBF85835E08100E6308CF01F00373F +:10D378001896E08000F25C740E99E8C8FFFD5C79AD +:10D38800E018FFFCB847E06A02443000F4080108DE +:10D39800F8040004F0090D472ED4E014FFFCAC5744 +:10D3A8009914F965000C99005C77F8C3FDAC0E047C +:10D3B8000833C0E24A18201D1AD8E06800EB1AD8D2 +:10D3C8004A384A0C1AD8F01F00202FCDC008580838 +:10D3D800E089000F4998201D1AD8E06800ED1AD896 +:10D3E80049C8498C1AD8F01F00182FCDC008F20779 +:10D3F800010700980A9918943015E0610243B8753E +:10D40800E0620244C6A850195008308CF01F000F83 +:10D418000E9B189A5C8BF4CEFFF0F6011900F60CFF +:10D428001720E40C173040194008580AC1610C9CB9 +:10D438001496F01F0009C9088003A4708003A76030 +:10D4480080039D9C800094C48000C9D48003A77C7D +:10D458008003A7B08000D13C9508890AF569000CC3 +:10D46800F560000DE047FFFFC0E14BD8201D1AD83A +:10D47800E06801071AD84BB84BBC1AD8F01F003B1C +:10D488002FCDC008951EB45CB44BFDDEC002C0E0D1 +:10D498004B38201D1AD8E068010D1AD84B484B2C80 +:10D4A8001AD8F01F00322FCDC0085C7C8CDB18170F +:10D4B80014946C1CF80B000B1633C0E24A88201D2C +:10D4C8001AD8E06801101AD84AA84A7C1AD8F01F5E +:10D4D80000272FCDC008B4755807FE99FF96C3786A +:10D4E8000E985C782FD8E018FFFC5C74E8CCFFED50 +:10D4F800E01CFFFC100CF01F00201896C2D030086A +:10D50800F8040004AC572ED4B847E014FFFCF968BF +:10D51800000C99149908C1B8307CF01F00181896AF +:10D52800C1B03008AC57F965000CB847990899188C +:10D53800C0E848B8201D1AD8E068013D1AD8490843 +:10D54800489C1AD8F01F00092FCDC0083018AC78B5 +:10D558003008ED68000D0C9C2FEDD8328003A470C4 +:10D568008003A7E480039D9C800094C48003A7F8EF +:10D578008003A77C8002E2A48000C9D48003A82885 +:10D58800D43149B8781918951094300CF2C2FFF4C8 +:10D59800F3310009700718961893C1E8EF380010A6 +:10D5A8000238C1716E585808C1400A9A0E9B6E6CB9 +:10D5B80004995D18C0E05806C0410C95301CC0A8FD +:10D5C8006E388D3868088F388907301C3005C028B8 +:10D5D800300C0E966E37E60C18005F0858075F1976 +:10D5E800F3E80008E6081800CDA1D832000073104F +:10D5F800E06C00FB5EFCD421E067040078A8F90B1E +:10D60800002C78C9F5DBC010F90E003C100AEE0EAC +:10D618001900E0880005E06E0400C0285C7EF4096B +:10D628000107EE0E010EC076F95B002E78CCF40CE3 +:10D63800010CD822F009010A580AE08A00063008CD +:10D64800F958002ED82AF2080108F958002ED82ACD +:10D65800996B5EFCF94B008C5EFCF94B00885EFC14 +:10D66800F94B00985EFC998B5EFCF96A0039F94B1E +:10D6780000945EFC5EFC5EFC48A87008C028703808 +:10D688005808CFE148887008C02870385808CFE19A +:10D6980048687008C02870385808CFE15EFC000060 +:10D6A8000000820C0000821400008220D4014A6825 +:10D6B8007008C30870495809C0E14A48201D1AD8A3 +:10D6C800E06805AC1AD84A284A2C1AD8F01F00225C +:10D6D8002FCDC0085819C0E149C8201D1AD8E068E4 +:10D6E80005AD1AD849D849BC1AD8F01F001B2FCD50 +:10D6F800C00858A9C0E14958201D1AD8E06805AEED +:10D708001AD84978493C1AD8F01F00132FCDC00801 +:10D7180070385808CD0149387008C128704958A98F +:10D72800C0E048A8201D1AD8E06805B11AD848E812 +:10D73800488C1AD8F01F00082FCDC0087038580838 +:10D74800CEE1DA0A0000820C8003A8688003A8AC46 +:10D7580080039D9C800094C48003A8D88003A904FA +:10D76800000082208003A934D43118961497784891 +:10D778005808C0E04C48201D1AD8E068011A1AD889 +:10D788004C284C3C1AD8F01F00432FCDC008580A2B +:10D79800C3514C19720C4C19720A4C19109E9207FD +:10D7A8004C08E069100070052FF70A985C87EE0EA8 +:10D7B8001900F2071790C088F104001C0E93EE04BC +:10D7C8001900CF3070385808CF811898C088F104F4 +:10D7D800001C0E93EE041900CE8070385808CF81D3 +:10D7E8001498C088F104001C0E93EE041900CDD0E3 +:10D7F80070385808CF814AA8B0074A887008C1F81D +:10D80800F109001C0E93EE091900C181700A580A2B +:10D81800E0800099580BE0800096178C1799B16941 +:10D82800F3EC118917ACF3EC108917BCF9E910096E +:10D83800E0800089123AE080008670385808CE11DE +:10D8480049887008C1A8F109001CEE091900C141F6 +:10D85800700A580AC770580BC750178C1799B169C6 +:10D86800F3EC118917ACF3EC108917BCF9E910092E +:10D87800C690123AC67070385808CE6148A870052C +:10D888000A98C2D88003A8688003A96080039D9C79 +:10D89800800094C40000822000008214000001F877 +:10D8A8000000820C0000821CF109001C0E93EE0996 +:10D8B8001900C141700A580AC450580BC430178C5B +:10D8C8001799B169F3EC118917ACF3EC108917BCFF +:10D8D800F9E91009C370123AC35070385808CE518C +:10D8E80049A87008C158F109001CEE091900C0F1D7 +:10D8F800178A1799B169F3EA118917AAF3EA108907 +:10D9080017BAF5E91009700A123AC1C070385808F8 +:10D91800CEB1580BC11017891798B168F1E9118871 +:10D9280017A9F1E9108817B9F3E81008C050304A70 +:10D938000C9CF01F00078D354868ED57001C9106B8 +:10D94800D83AE06C00F5D832000082208002E73631 +:10D958000000821CD4211897169CF01F0008C0B044 +:10D96800F908002C5808C0702288EE081900F00742 +:10D9780017305C870E9CD82280012228D421F90810 +:10D98800002C1897F3D8C010E06CFFFFF5DBC0102F +:10D99800F8090109123AE08A000F4948201D1AD8EF +:10D9A800E06801BD1AD84928492C1AD8F01F00127E +:10D9B8002FCDC008100BE0680800EF5B002CF00BBF +:10D9C8001900EFF8BC160E9CF01F000CE04C01FF8C +:10D9D800E08A000AEF380026A1B80E9CEF680026FE +:10D9E800F01F0007D82200008003A8688003A988D8 +:10D9F80080039D9C800094C48000D5FE80010CECBF +:10DA0800D4211896304CF01F000A1897C0E0ECE8B3 +:10DA18000000F8E90000ECE80008F8E900086C48A4 +:10DA28009948781CF01F00030E9CD8228000C9D4A6 +:10DA38008000CD1ED4211896580CC0311897C0B854 +:10DA4800781C580CC030F01F000518970C9B304C00 +:10DA5800F01F00030E9CD8228000D13C8000C974BE +:10DA6800D42130071896C0880C9C6C06F01F00055E +:10DA7800F80700075C575806CF810E9CD822000093 +:10DA88008000DA3CD4217848189758A85F1A5808BB +:10DA98005F19F5E90009C2005818C1E0F8FC0084D4 +:10DAA800580CC060F01F000D3008EF4800843FF8A4 +:10DAB800EEFC0080EF58003AF01F000930066FECCA +:10DAC800EF460080F01F00066FFCF01F0005EF46D0 +:10DAD800007CEF460078D8228000D13C8000DA68CC +:10DAE800D421169778081638C04176389908C11895 +:10DAF8004B899308C0A870390E39C0614B599308F7 +:10DB08006E399139C06812985808CF614B1993083B +:10DB180030060E9C8F36F01F00306E4858A85F19EB +:10DB280058185F181268EC081800C0C0EF380026B3 +:10DB3800EDB80000C071A1B80E9CEF680026F01F78 +:10DB480000276E485818C3206FE85808C0E04A48B4 +:10DB5800201D1AD8E06804F91AD84A284A2C1AD87D +:10DB6800F01F00222FCDC0086FF85808C0E049C840 +:10DB7800201D1AD8E06804FA1AD849D849AC1AD82E +:10DB8800F01F001A2FCDC008EEF800805808C0E03A +:10DB98004938201D1AD8E06804FC1AD84958492C7D +:10DBA8001AD8F01F00122FCDC00830088F48F01F78 +:10DBB8000012C0E148A8201D1AD8E06805021AD84A +:10DBC80048E8489C1AD8F01F00092FCDC008D82271 +:10DBD800000082188000DA8C80010CEC8003A868B1 +:10DBE8008003A9AC80039D9C800094C48003A9C4D1 +:10DBF8008003A9E08000D6B48003A9F8D42118973F +:10DC080078485808C0E04A68201D1AD8E0680175AD +:10DC18001AD84A484A4C1AD8F01F00242FCDC008F9 +:10DC2800303CF01F00231896C380EF08001CF958F9 +:10DC3800001C6E6899688E48A1B8B8483018994891 +:10DC4800EF38000BF968000BEF38000AF968000A92 +:10DC58006E089908497972080E38C0316E38C108C3 +:10DC680049599308C0A870390E39C06149299308E9 +:10DC78006E399139C06812985808CF6148E99308FD +:10DC880030080E9B8F38302CF01F000C48C948D83C +:10DC98008D8970098D3991060C9CD8228003A8685B +:10DCA8008003AA1880039D9C800094C48000C9D476 +:10DCB8000000821C000082188000C9748000D5F81A +:10DCC80000008214D431204D4B583005700910964D +:10DCD8002FF90A9491090A934B2830627007E08F54 +:10DCE800019E6E485808C0E14AF8201D1AD8E0681D +:10DCF80002571AD84AD84AEC1AD8F01F002E2FCD4E +:10DD0800C0085818C0E14A88201D1AD8E06802588F +:10DD18001AD84A984A6C1AD8F01F00262FCDC00886 +:10DD280058A8C0E14A08201D1AD8E06802591AD834 +:10DD38004A2849FC1AD8F01F001F2FCDC0085828C0 +:10DD4800C071EF38004EE4081800E0800081EF3819 +:10DD5800004E30CAF4081800C7A0EF3800AC10997C +:10DD6800E8081800C300EEF900A82FF9EF4900A849 +:10DD7800493A100AF53AFFFF1439C6B33009EF499A +:10DD880000A8E4081800F9B90801F1D9E808EFF883 +:10DD98008EAC0E9CF01F000BC5C80000000082105E +:10DDA8000000820C8003A8688003AA3C80039D9C25 +:10DDB800800094C48003AA688003AA948003AC38C6 +:10DDC80080010A20EF08003AE6081900F9B90401B1 +:10DDD800F1D9E408EFF84C1D6FF85808C3A0EF0913 +:10DDE800003AEF08004CF0091900C3356E4858286E +:10DDF800C100EF09004AEF0800484CD1A3581208A7 +:10DE0800EF39004EE2090709F0090948EF58004CBC +:10DE1800EF080060EF090056F0091900F00917B083 +:10DE2800EF08003CF3D9C02FEF590058F00A15014C +:10DE3800F0091900EFFA3C2CEF08003CEF53003AC8 +:10DE4800EF5800560E9CF01F003BC0383018C02811 +:10DE580030086E495869C0B16C0B6EDAF60A010ACF +:10DE6800E04A0028E08800042FF85C588ECAEDBA12 +:10DE78000003C39158495F0A58795F091449E809B2 +:10DE88001800C3106C0AEEFC00A0EEF100A4F80123 +:10DE980002416ED9EEFB009CF4090109E20B000E69 +:10DEA800E06A01F4FC0A0D00FAE100080039E08894 +:10DEB80000062FF830115C58C178EF3100ADE20C44 +:10DEC800034BF60A0D0A1439E088000E50180E9C10 +:10DED800F01F0019EF3900AD30012FF9EF6900ADDF +:10DEE8004018C0283001EEFC0080580CC1106ED9D3 +:10DEF8006C0A121AEF09004CF2091006123AC08394 +:10DF08005018F01F000E30004018EF4000806E4996 +:10DF18005839C1516C0A6ED9F4090109E049002841 +:10DF2800E08800182FF85C58C14800008003A85802 +:10DF3800800110608001109C8000DA685899C091B7 +:10DF48006C0A6ED9F4090109E04900F0E08B00047D +:10DF58005808C4900E9CF01F00434C385805C14027 +:10DF680070081037C0E14C18201D1AD8E06802E488 +:10DF78001AD84BF84BFC1AD8F01F003F2FCDC00819 +:10DF88006E388B38C13870090E39C0E04B78201DC7 +:10DF98001AD8E06802E81AD84B884B6C1AD8F01FD8 +:10DFA80000362FCDC0086E399109EEF80098580850 +:10DFB800C0403FBB6E6C5D185801C0F0EF180024DC +:10DFC800201DEEC9FFFC1AD80E9AEF18001C6EAB84 +:10DFD8006F7CF01F002B2FED0E9B302C6E37F01F3F +:10DFE8000029C1C8EF3900382FF9EF690038EF3A36 +:10DFF8000039F20A1800E08B0010EF680038EEF8DC +:10E0080000945808C0600E9B6E6C5D185C5CC04143 +:10E018000E9CF01F001D0E956E375807FE91FE638B +:10E0280049A849B410957006C6086C4858A8C0E0BD +:10E0380048E8201D1AD8E068030C1AD8495848DC6B +:10E048001AD8F01F000D2FCDC00868096CD8F20847 +:10E058000108E04800F0E08B004C0C976C36C4587F +:10E068008000DA8C0000820C8003A8688003AAC4B0 +:10E0780080039D9C800094C48003AAF08001023430 +:10E088008000C97480010CEC00008220000082101E +:10E098008003AB1C6A081036C0E149A8201D1AD8B5 +:10E0A800E068031B1AD84988498C1AD8F01F001851 +:10E0B8002FCDC0086C388F38C1386A080C38C0E0DA +:10E0C8004908201D1AD8E068031F1AD8491848FCC7 +:10E0D8001AD8F01F000F2FCDC0086C388B080C9B86 +:10E0E800302C6C36F01F000C5806CA01C0780C9C06 +:10E0F800F01F000A5807CCF1CE1B2FCDD8320000F4 +:10E108008003A8688003AB4C80039D9C800094C466 +:10E118008003AB748000C9748000DA8CD431202D60 +:10E1280018951691784858A8C0A1189B4A2CF01F3A +:10E1380000230A9B302CF01F0022C3B8780850082F +:10E148007818F903001C5018F9020024797778A68A +:10E15800F8F400987860189B49ACF01F00186BFC25 +:10E16800580CC030F01F00186BEC580CC030F01F72 +:10E178000016EAFC0080580CC030F01F00130A9B00 +:10E18800302CF01F000F5804C040009C3FBB5D14AA +:10E198005801C0F0201D5C72F1D3C0101AD20C9B3C +:10E1A800FAC9FFF4FACAFFF80E9CF01F00082FED19 +:10E1B8002FEDD832000082208000DAE88000C97490 +:10E1C8000000820C8000DA6880010234D42118969D +:10E1D800302CF01F00511897C5114D084D0A189999 +:10E1E8007008740BC0A870DAF60A010A123AF4092A +:10E1F8001720F00C172070385808CF61580CC04011 +:10E20800301BF01F0048302CF01F00431897C30143 +:10E218004C584C3A18997008740E37FBC178F13A8B +:10E228000014EC0A1800E08B000DF60A1800E08BC9 +:10E23800000970D7FC0701071237C033109CC0389B +:10E24800169A12977038149B0E995808CE91580C4C +:10E25800C040301BF01F0033302CF01F002F1897E0 +:10E26800C5704B28F10900D42019F15900D44AF897 +:10E27800F10900D42019F15900D4E06A00B0300B3C +:10E288000E9CF01F002B3408EF6800143FF8EF686D +:10E29800000B4A384A7A70097408F2080008950891 +:10E2A800EF48006CEF480068EF48005CEF4800500A +:10E2B8003008EF6800ADEF680038E0680800EF58F4 +:10E2C800002EEF58002C3068EF58004AEF58004CE9 +:10E2D800E0681000EF580072E0680200EF58003C58 +:10E2E8003FF8EF58003A3018EF5800564928EF48E1 +:10E2F800008CE068DD00EA18006DEF48009CE078CB +:10E3080024F88FD9EF4800A03098EF4800A40E9C5D +:10E31800D82200008000C9D40000822000008210AA +:10E328008000E1240000820C000080D48002E8BC58 +:10E33800000001F48000E5ECD401340CF01F000269 +:10E34800D80200008000E1D4D431189714961293B3 +:10E35800169578445804C0E04C98201D1AD8E068F7 +:10E36800020A1AD84C784C8C1AD8F01F00482FCDC6 +:10E37800C008580BC041E06600F7CB78304A140C4F +:10E38800F01F0043EF560024EF08001CE8081900AE +:10E39800C34110944BF84C0970064C08720B700C72 +:10E3A8004BF9E06A100092082FF80C995C88F00489 +:10E3B8001900F4081790C078F30E001CF00E19002D +:10E3C800CF4072395809CF911899C078F30E001CC4 +:10E3D800F00E1900CEA072395809CF911699C0785D +:10E3E800F30E001CF00E1900CE0072395809CF91B7 +:10E3F8004AB9B208EF58001C4AA84AB9700A72080C +:10E40800F40800089308EF48005CF0C90001E068D0 +:10E418000800EF580060EF58002CEF58002E300825 +:10E428008FC88FA8E0680200EF49006CEF490050E0 +:10E43800EF58003C0A9BE06C0200F01F001C5C8C4B +:10E44800F808100AEF5800583018EF430090EF58BA +:10E458000056EF5C003C30288F48495972080E3846 +:10E46800C0316E38C2C849399308C26870390E394C +:10E47800C221490993086E399139C2288003A868D6 +:10E488008003AB9C80039D9C800094C48002E73687 +:10E498000000820C0000821400008220000001F8B5 +:10E4A80000008210000001F48000D95C0000821C8A +:10E4B8000000821812985808CDA148D9930848D866 +:10E4C80070098F3991073019201D30081AD9109A10 +:10E4D8003029109B0E9CF01F00082FEDEDDCC008C2 +:10E4E800C0410E9CF01F00050C9CD8320000821819 +:10E4F8000000820C8001035080010CECD421189795 +:10E5080078465826C390E08B00075806C0C05816B6 +:10E51800C071C2785846C370C3635876C3C030060A +:10E528000C97C4184A8972081838C0317838C1085D +:10E538004A699308C0A870390E39C0614A399308EE +:10E548006E399139C06812985808CF6149F9930813 +:10E5580030080E9B8F38302C1097F01F001DC0A874 +:10E56800189B49CCF01F001C0E9B303CF01F001874 +:10E5780030070E96C188189B498CF01F00170E9B18 +:10E588000C9CCF5B301BF01F0016EDDCC008C0B13F +:10E598003058C088301BF01F0012EDDCC008C031B5 +:10E5A80030988F4858075F193008F00618005F0A3E +:10E5B800F5E90009F0091800C0400E9CF01F000999 +:10E5C8000C9CD8220000821C000082188000C974AC +:10E5D800000082148000DAE80000820C80010A0042 +:10E5E80080010CECD421169C1497580AC08094CB57 +:10E5F800F01F00070E9CF01F0007D82A5809C030EA +:10E60800149CD822F01F00045C5CD8228000D984B6 +:10E618008000D13C8000E504D42149887007C2A855 +:10E62800EEFB0084580BC140169AEEF8008C58088F +:10E63800C06030090E9B6E6C5D18C078169A1099F0 +:10E648000E9B109CF01F000E5C5CEFFC0A21EF385B +:10E658000026EDB80000C0D1A1B80E9CEF680026D6 +:10E66800F01F0008EF380026E018FFFCEF680026CE +:10E678006E375807CD61D8220000820C8000E5EC87 +:10E6880080010CECD401F01F0007487913882FF89B +:10E698005C58B288EDB80000C031F01F0004D80201 +:10E6A8008000E620000073148000DCCCD4314A6876 +:10E6B80070063058ED3E000C2EC6A58EF00E1900DF +:10E6C800E0880040205E3008A36E30175C8E302151 +:10E6D8003042E7DEC010E06401FFE0650200C2E8F6 +:10E6E800F5D8C010EC0A070BEE0B1800C080C293D7 +:10E6F800EC0A0009E20B1800C1B1C0382FF8C1D8E4 +:10E70800139BE40B1800C1D12FDA063AC1A413BA3F +:10E718002FC813A95C88F5E910895C89F2CA000141 +:10E72800E80A1900EA0917B0F959003CC0781399AA +:10E738005809C070F20800085C88FC081900CD135D +:10E74800D832000000007318D4217848189616971C +:10E75800F138000DEDB80000C1C1169C3007F01F5C +:10E768000020C368F138000DEDB80000C0E16C4826 +:10E77800F13A000CF139000DF3EA1089A1A9F16909 +:10E78800000DA989F169000C6E07F01F0016C0285A +:10E7980049555807C1D06E4811C411DBB16BF7E475 +:10E7A800118B11E48EEEF7E4108B6A0A8CE911F4F0 +:10E7B8000E9CE9EB100B16191409F20E010ECD3759 +:10E7C800C098141B6C1CAC6B5C7BF01F00088D0799 +:10E7D800D8225809FE99FFF7CFBB00008000DA68FD +:10E7E8008000DA3C0000731C8000D210D4314C58F1 +:10E7F80018971188EDB80004E081020C79994C282B +:10E80800F90C006070086FAAF208010BC186103974 +:10E81800C0614BE87008F4080108C1164BB87008CD +:10E82800103AC2914BA87008F139000FF138000E68 +:10E83800F3E81088F8081900E088001E4B487009B2 +:10E84800F338000FF339000EF1E910884AE972092C +:10E858005C88EF490064EF5800604AC97209EF49C3 +:10E8680000685808C080EF3900AC3008F00918007B +:10E87800EFF81EAC4A586F497008F009010B580BA5 +:10E88800E089004C3006EF5600704A2B960BEC0BD3 +:10E898001900C3215C7CEF160060F80A000A6FAC0F +:10E8A800EC0C000C143CC281EF0A003AF60A19007D +:10E8B800C2351039C211EF3800542FF85C58EF6890 +:10E8C80000543039F2081800E088000FEF090056AC +:10E8D800EF08003C12085C88F2081900E088014A39 +:10E8E800EF580056C469F2081800E08101430E9CF5 +:10E8F800F01F0009C3E93008EF680054C3A90000FD +:10E90800000073280000731C0000732400007318B3 +:10E91800000073208001016A5CD91009E08600D1EB +:10E928006F7912185808E08900CCEF380026EDB846 +:10E938000002C081A3C8EF680026EF080058EF580E +:10E948000056300A4D39EF6A004E720BEF6A0054D8 +:10E9580072096F48EF490050F6080108EF09007284 +:10E96800EF580070F2080008EF09004AEF580072EB +:10E97800EF080048A358F2080008EF58004C6E480A +:10E988005838E0880066EF080056EF090058F0098B +:10E998001900E0880006EF09003C1009C0A8EF192B +:10E9A800003CB339F7D8C010F20B0C0AF408000980 +:10E9B8005C89F0091900E088004CEF590056C488BA +:10E9C8006C08EF030074EF48007C6C1CF01F0032E9 +:10E9D800F8031900C0E24B18201D1AD8E06803B3E9 +:10E9E8001AD84AF84AFC1AD8F01F002F2FCDC008B1 +:10E9F800EF0800705808C09020186C49F339000DD2 +:10EA0800EDB90000EFF80C38EF0300746C1CF01F30 +:10EA1800002218130C9CEF530074F01F0024EF0819 +:10EA28000074EA081900C1606FF85808C1316FE82E +:10EA38005808C1014998201D1AD8E06803BF1AD8A0 +:10EA480049B8498C1AD8F01F00182FCDC0084914AE +:10EA580030056FF65806C2D06C4811CBF139000D5D +:10EA6800F3D9C0025F1A11D9B169F3EB118911EB1F +:10EA7800F3EB108911F81248680912188CE9F409A7 +:10EA8800000912085808FE9AFF9DE08F045F0000F5 +:10EA9800000073248000CD0C8003AC608003ACA818 +:10EAA80080039D9C800094C48000DA3C8003ACD035 +:10EAB8003FF8EF58003A3008EF680038C5A830082A +:10EAC800EF580070C5686C08EF030074EF480078D1 +:10EAD8006C1CF01F0021F8031900C0E249F8201D42 +:10EAE8001AD8E06803E01AD849D849EC1AD8F01FB8 +:10EAF800001E2FCDC008EF0800705808C0902018DD +:10EB08006C49F339000DEDB90000EFF80C38EF034C +:10EB180000746C1CF01F001018130C9CEF53007449 +:10EB2800F01F0012EF080074EA081900C2406FF8DD +:10EB38005808C2116FE85808C1E14888201D1AD842 +:10EB4800E06803EA1AD848A8486C1AD8F01F0006EB +:10EB58002FCDC0088000CD0C8003AC608003ACA82A +:10EB680080039D9C800094C48000DA3C8003ACD074 +:10EB78004C5430056FE65806C2106C4811CCF13978 +:10EB8800000D11DAF3D9C002B16AF5EC118A11EC63 +:10EB980011F858095F1B6809F5EC108AF1EA100AA8 +:10EBA8008CE8F20A010AF6080008F4080108C066B1 +:10EBB8006F7810195809FE9AFF886F085808C29094 +:10EBC8004B196F1A7209F4090109C2374AFB760B0F +:10EBD800EF0A0048F6080108F40B140316185C88BD +:10EBE800F00A000A5C8AEF09004AF40B14035C4837 +:10EBF800EF5A0048F20A14021419F2080008F6083D +:10EC08000009EF58004AEF59004C3008EF4800401F +:10EC180049F84A09900A6EA8580AE0800381720BE5 +:10EC2800F60911FF1009E08600B15C7AF0C9FFFF10 +:10EC38001619F20A010A580AE08900A849697216E9 +:10EC48005806C0E14958201D1AD8E06804461AD869 +:10EC58004938494C1AD8F01F00142FCDC008F00BC2 +:10EC6800010BE04B7FFEE08A002348C8201D1AD81C +:10EC7800E06804471AD848D848AC1AD8F01F000AE8 +:10EC88002FCDC008000073240000821000007320FC +:10EC98000000731C000073348003AC608003ACF088 +:10ECA80080039D9C800094C48003AD008CD81638E6 +:10ECB800C3148C48F3D8C0101639C0E44AB8201DD4 +:10ECC8001AD8E06804491AD84A984AAC1AD8F01FEA +:10ECD800002A2FCDC0081618300A5C88C058AC48E6 +:10ECE800AC5A121B6C068CD91639CFA55C3B0C9C10 +:10ECF8005C8BF01F0022C21049C8201D1AD8E0689A +:10ED080004561AD849E849BC1AD8F01F001B2FCD61 +:10ED1800C0085C3B0C9C5C8BF01F0018C0E04938B5 +:10ED2800201D1AD8E068045B1AD84958491C1AD81B +:10ED3800F01F00112FCDC0086C1A4929932A492ABF +:10ED48006EA8740B926C9508F80B000A101AB26A38 +:10ED5800F00A16187249B2F8B2CAF5D8C208F1D842 +:10ED6800C108B2DAB2E8C1B88003AC608003AD1064 +:10ED780080039D9C800094C48000CDD48003AD2086 +:10ED8800000073340000731C101BC097EF38002676 +:10ED9800A1B80E9CEF680026F01F00424C256EA912 +:10EDA8006A08F009010AE08602B7F0CAFFFFEF1B04 +:10EDB800002C121A161A580AE08902AE1039E0819E +:10EDC80001F54BA8906A7048F139000DF3D9C002DB +:10EDD8005F19F40900094B6AB409EF0A002CF20A1A +:10EDE8001900C462F13A000CF139000DF3EA1089F8 +:10EDF8005C89EDB90000C081E219FFFEF169000DE0 +:10EE0800A989F169000C4A98EF0A002CB06A704988 +:10EE1800F339000DEDB90001C031201AB06A4A3645 +:10EE28008CEB6C1CF01F00238C696C48F138000DCA +:10EE3800F1D8C0025F18F208000849D9B20849A9F8 +:10EE480072095C78EF1A002C12086EA9F4090009FF +:10EE58001238C0E04988201D1AD8E068048B1AD8F7 +:10EE68004968497C1AD8F01F00172FCDC008EEF664 +:10EE780000805806E08000BE48C46848F138000D9C +:10EE8800EDB80000C080C4B8109C7008EF4800803E +:10EE9800F01F000DEEF800805808CF71CAA80000D6 +:10EEA80080010CEC0000731C000073340000732018 +:10EEB8008000D2108003AC608003AD3480039D9C39 +:10EEC800800094C48000DA3CF138000DEDB80000F1 +:10EED800C1F16848F139000DF13A000CF3EA108AE3 +:10EEE8005C8A1499A1A95C79F20B1608EDBA0001A5 +:10EEF800C0F0F169000DF16B000C68488869F138C1 +:10EF0800000DF1D8C0025F18F2080008A6086C05C9 +:10EF18000A96F01F00455805C041C6984C324C432C +:10EF28006C4811C5868A11D9B169F3E5118911E5D3 +:10EF38008CEBF3E510890C9C11F5EBE91009F40949 +:10EF48000109640A1409F20B010BCBF7E08F0201E7 +:10EF58004B89EEF80080704811FB11C511DC11E8EF +:10EF6800B16CF9E5118CF9E81088F7E81008F00A97 +:10EF7800010A5C8AB26A7248F138000DEDB80001E6 +:10EF8800C031201AB26A4AB58AEB6A1CF01F002AFF +:10EF98008A696A48F138000DF1D8C0025F18F20892 +:10EFA80000084A39B2085C784A097209F009000A6F +:10EFB800EEF80080704811FB11CC11D911E8B16945 +:10EFC800F3EC1189F3E81089F7E91009123AC0E067 +:10EFD80049A8201D1AD8E06804C31AD84988499C52 +:10EFE8001AD8F01F00192FCDC0080C95EF450080E6 +:10EFF80048F848E9908A7209F40900098FA990082D +:10F00800EF09002CF0091900C22248C8201D1AD89F +:10F01800E06804CD1AD848D848AC1AD8F01F000ABE +:10F028002FCDC0088000DA3C0000731C000073205C +:10F03800000073348000D2108003AC608003AD6C94 +:10F0480080039D9C800094C48003ADA810190E9C79 +:10F05800EF59002CF01F004A4CA8300A7019924B47 +:10F06800F40B1900C0504C8A9509300991194C5875 +:10F078007048F138000DEDB80000C5B14C3913885F +:10F08800A5B8B288C56881098CEAF13B000DF7DBA9 +:10F09800C0025F1BF60A000A14098FA9EF0A002CA8 +:10F0A800F138000D8C69F1D8C002F7D9C0105808A2 +:10F0B8005F1EF9DAC010FC0B000B163CC0E44B488D +:10F0C800201D1AD8E06804F21AD84B284B2C1AD8FD +:10F0D800F01F00322FCDC008F409010958085F1845 +:10F0E800F20801080E9CEF58002CF01F00256C1B3D +:10F0F8009648E2081900C090680C580CC040F01FF0 +:10F108000028C028890B8D126C48F138000DEDB825 +:10F118000000C0810B88A5B8AA886E485848EFF34C +:10F128000A046C080C9CEF480080F01F001EC07891 +:10F1380049D030014944300249453073EEF6008029 +:10F148005806C1006C4811CB11D9B169F3EB11898C +:10F1580011EB6EAAF3EB108911FBF7E910091439CA +:10F16800C930EF380026EDB80000C041A1C80E9C98 +:10F17800CE68A1A8EF680026D83200008000D5FE2E +:10F18800000073340000732C000073298003AC6006 +:10F198008003ADC880039D9C800094C48000CD345A +:10F1A8008000DA3C0000731C0E9CF01F0040EEF655 +:10F1B80000805806C0714BECF01F003EEF4C0080F9 +:10F1C800D8326A093005F2CCFFFF6C4811CB11DA4E +:10F1D800B16AF5EB118A11EBF5EB108A11FBF7EA2E +:10F1E800100A1439C1214B2C8C689869F009190050 +:10F1F800E08800B4F01F002FE08000B05805EBFC59 +:10F208001A00EFFC0A20C0D85805C0D1F20A010B39 +:10F21800C4574A7CF01F0027E08000A0EF4C008014 +:10F228000C9BC3986A4B17F417C217D317EBB1633B +:10F23800E7E21183E7EB108BE9EB100B5CDB120BB9 +:10F24800C2D6F80A010B580BE0890029498CF01F37 +:10F2580000191897E08000826A4811F911CA11DB79 +:10F2680011E8B16BF7EA118BF7E8108B4928F3EB3B +:10F27800100B70088AE9101916095809E08A000964 +:10F28800F00B010B6A1CAA6B5C7BF01F000C8B0750 +:10F298000C9B0E9CF01F000AD8326C0B0C95580B77 +:10F2A800C1001696C93B000080010BF000007334C2 +:10F2B8008000DA080000731C8000D2108000E7503C +:10F2C80014195809E08A004AF138000DEDB8000019 +:10F2D800C4404A3CF01F00238D0CC3F06C4811F960 +:10F2E80011CA11DB11E8B16BF7EA118BF7E8108B43 +:10F2F80049D8F3EB100B70088CE910191609580956 +:10F30800E08A002CF00B010B6C1CAC6B5C7BF01FD3 +:10F318000017D8320E9CF01F0016D832720BF60870 +:10F328000109C0A62FFBEF19002CF60801081218D6 +:10F338005808E08A00130E9CEF380026A1B8EF6841 +:10F348000026F01F000CD8323008FE9FFBB4580985 +:10F35800FE99FE00FE9FFE4BD83200000000733479 +:10F368008000DA080000731C8000D21080010BF0C6 +:10F3780080010CECD4314B86ED0800922FF87819F7 +:10F388004B65ED5800928B091388F1D8C004F20838 +:10F39800002818971693109C4B148908F01F003109 +:10F3A8006A080E9C118BF7DBC004A36B5C3BF01F53 +:10F3B800002EC0718E493138F0091900E08B000B1E +:10F3C8004A580E9CF109009A2FF9F159009AE08FDA +:10F3D80003026A0C069B2F0CF01F0024C0B16A0AB6 +:10F3E800FC19E000F5380010B968E618F00012388A +:10F3F800C0A149980E9CF10900A02FF9F15900A06D +:10F40800E08F02E9F4CBFFF48EC830692F0A0E9C16 +:10F41800F01F00175C8CC080ED0800980E9C2FF838 +:10F42800ED580098C11868080E9CF13B000CA58B9C +:10F43800F60B10FCF01F000CC1C0ED08009A0E9CE2 +:10F448002FF8ED58009AED0800962FF8ED58009621 +:10F45800E08F02C6000080D40000733000007318EB +:10F468008000D67C8000CDD48001255880011E2CD8 +:10F47800680811CA11D9B169F3EA118911EAF3EAE6 +:10F48800108911FAF5E91009F20A1618B0CAF5D967 +:10F49800C208B0F9B0DAF5D9C108B0EA4B28910929 +:10F4A8006808F1390008F13A0009B16AF5E9118AEA +:10F4B800F139000AF5E9108AF139000BF3EA100A6C +:10F4C800F4091618F1690008F3DAC208F16A000BAA +:10F4D800F1690009F3DAC108F169000A4A386804D9 +:10F4E800910AE938000DF5D8C002F1D8C0064A0BD8 +:10F4F800B6884A086A09580A5F1A8E4514055C8559 +:10F50800B00549D87006CA586C485808C0E149B8CF +:10F51800201D1AD8E06800B71AD84998499C1AD80B +:10F52800F01F00192FCDC00858A8C0E14938201D88 +:10F538001AD8E06800B81AD84948492C1AD8F01FD8 +:10F5480000122FCDC0085818C24148C8201D1AD82B +:10F55800E06800B91AD848E848AC1AD8F01F000A81 +:10F568002FCDC0080000731C00007324000073280E +:10F57800000073200000820C8003AC608003ADF0B3 +:10F5880080039D9C800094C48003AE188003AE4421 +:10F59800098A0998F1EA1088ED0A0024F00A19008E +:10F5A800C56109AA09B8F1EA1088ED0A001CF00A39 +:10F5B8001900C4D1F33A000CF338000DB168F1EA30 +:10F5C8001188F33A000EF1EA1088F33A000FF5E8D3 +:10F5D80010086C1A103AC3B1F33A0010F33800114E +:10F5E800B168F1EA1188F33A0012F1EA1088F33AA7 +:10F5F8000013F5E810086C0A103AC2916C380C3800 +:10F60800C0E14CA8201D1AD8E06800C21AD84C885E +:10F618004C8C1AD8F01F00482FCDC008580CC06079 +:10F6280099384C6870098D3991066C380C38E0812E +:10F6380001A14BE8201D1AD8E06800C81AD84C0868 +:10F648004BCC1AD8F01F003C2FCDC0080C9C6C3650 +:10F658005806FE91FF5BE08F05296C4858A8C0E06A +:10F668004B28201D1AD8E06800D21AD84B584B1CDA +:10F678001AD8F01F00312FCDC008098B0998ED0A60 +:10F688000024F1EB1088F00A1900C77109AC09BB16 +:10F69800ED08001CF7EC108BF6081900C6E1F33CE6 +:10F6A800000CF33B000DB16BF7EC118BF33C000E33 +:10F6B800F7EC108BF33C000FF9EB100B6C1C163CAD +:10F6C800C5C1F33C0010F33B0011B16BF7EC118B93 +:10F6D800F33C0012F7EC108BF33C0013F9EB100B22 +:10F6E8006C0C163CC4A1498B178CEDBC0002E08061 +:10F6F800013AEDBC0001C2D1494B6CAC760BF60C5B +:10F70800010CC2D6ED14002C081C580CE089002806 +:10F718005C7A201D5C751ADA48DCEA0B000B5C7811 +:10F72800F2CAFFF0780CC7688003AC608003AE6C47 +:10F7380080039D9C800094C40000820C8003AE98D6 +:10F748008003AEC4000073280000731C00007324FB +:10F75800EDBC0000C0414CC870088DD84CB8900969 +:10F768003008F0091900E08000FEED3800260C9CF6 +:10F77800A1B8ED680026CF486C365806FE91FF6F99 +:10F788004C3870050C98CF286A0A580AC130F33CE7 +:10F798000010F33B0011B16BF7EC118BF33C001236 +:10F7A800F7EC108BF33C0013F9EB100B163AE081E1 +:10F7B80000DC09AB09BAF5EB108AEB0B001CF40B63 +:10F7C8001900E08100D25808C0706A3991394B0895 +:10F7D80070098B3991054AF81188EDB80004C1F118 +:10F7E8004AD8700913AB139A13B8201D1389F1EB8B +:10F7F8001088F5E910894A5B1AD9968C4A794A8BA0 +:10F808007209760BF2CAFFF0F80B000B4A5C780C11 +:10F818002FFC2F49F01F00242FEDCA48EDB8000136 +:10F82800E08100A1EB3C0014F01F00201896C08175 +:10F8380049F8F109009C2FF9F159009CC938497819 +:10F848007008F0C9FFF0C0311298C108F1390013EF +:10F85800F13B0010F13A0011F1380012B16AF5EBF2 +:10F86800118AF5E81088F3E810088D08EB08001CE9 +:10F87800ED58001C48987008F0C9FFF4C1A112980F +:10F88800C27800000000821000007320000082147B +:10F898000000732800007318000073300000731C08 +:10F8A80000007324800102348000E1D4000080D479 +:10F8B800F139000FF13B000CF13A000DF138000E60 +:10F8C800B16AF5EB118AF5E81088F3E810088D188D +:10F8D8004C587008118B1199F3EB1089ED590024DD +:10F8E80030398D494C197209F2CBFFFF8DCB8DABA6 +:10F8F800F13B000FF138000EF7E81088ED5800587A +:10F90800ED5800608A48E2180199AC486A684B8A49 +:10F918002019740C8D688D3C6A889506ED49006441 +:10F928008D880C9CF01F0033ECCBFFFCED1C003CD9 +:10F93800F01F00313019ED5C003C201D30081AD949 +:10F94800109A3129109B0C9CF01F002C2FED5C5C49 +:10F95800C0600C9C300BF01F002AC0480C9CF01FA4 +:10F9680000290E9CC3C80A986A355805FE91FF0EF7 +:10F9780049D56A08F13C000DF9DCC006F01F0022E9 +:10F988005806E08003504A188E4A6A09911791492F +:10F99800B06A30096E1A9109912A49D8910949D853 +:10F9A800B089ECFA0084580AC3C0ECF8008C5808F7 +:10F9B800C0500C9B6C6C5D18C06810990C9B109C17 +:10F9C800F01F00155C5CC041ED4C0084C2A80E9C81 +:10F9D8004928F10900962FF9F1590096F01F0010F7 +:10F9E800D8320000000073180000731C0000820C5D +:10F9F8008000E6B48000D95C800103508000E124D7 +:10FA080080010CEC8000D67E000073340000732C5B +:10FA1800000073298000E5EC000080D48000D13C10 +:10FA28004A9891064A981188EDB80002C3216C489B +:10FA38005828C0814A6870096D781039E081026BD6 +:10FA4800C1D84A49720A6CA9F4090109E08602631F +:10FA5800ED1A002C14195809E089025DE08F032182 +:10FA680049D8201D1AD8E06802271AD849B849CCC5 +:10FA78001AD8F01F001C2FCDC00849B91388A3B8A5 +:10FA8800B288ED380026A1C8ED680026E08F024351 +:10FA9800EDB80001C0616C4820285818E08B00A21E +:10FAA800492870088DD830080C9CED6800ADF01F0F +:10FAB80000106C4820285878E08B022D48D9F208AD +:10FAC800032F000000008224000073280000732424 +:10FAD8000000731C8003AC608003AEF480039D9C1F +:10FAE800800094C400007329000082108000E6B4EE +:10FAF8008003AC404CF811891298E218001259287A +:10FB0800C7A14CD8700A6DF8704811FB11C711DCF9 +:10FB180011E8B16CF9E7118CF9E81088F7E81008DA +:10FB28002FF8103AC681ED0800722FF8ED580072D0 +:10FB38004C287008ED4A0050F0CA00012FF88DC813 +:10FB48008DA84BF87008F139000FF138000EF3E872 +:10FB58001088ED5800603048ED4A00648D48EC0884 +:10FB6800000BED1C003CF01F00375C8CF808100AF5 +:10FB7800ED5C003CED580058ED0900563018F009CE +:10FB88001900C021A17CED5C0056ED0800745808EE +:10FB9800C0E14AD8201D1AD8E06802591AD84AB8D4 +:10FBA8004ABC1AD8F01F002B2FCDC00820186DFCB6 +:10FBB800ED5800747808ED48007C5808F9B800FF43 +:10FBC800F9B80100EDF81E4EED58003AF01F00227A +:10FBD800ECF800905808C050300A0C9B6C6C5D180B +:10FBE800ED380026A1B80C9CED680026F01F001B1C +:10FBF800E08F0191EDB90004E081018D4908700999 +:10FC080013AB139A13B8201D1389F1EB1088F5E98B +:10FC18001089493B1AD9968C4929488B7209760B69 +:10FC2800F2CAFFF0F80B000B483C780CC7980000AC +:10FC380000007328000073240000731C0000731870 +:10FC48008000D95C8003AC608003AF1480039D9C66 +:10FC5800800094C48000DA3C80010CEC0000732022 +:10FC6800000073304C281188EDB80004C5E14C1829 +:10FC7800700C6D485CD81808C3D66D78F808010870 +:10FC88005808E089003830488D486C885808C0E129 +:10FC98004B98201D1AD8E068027E1AD84B784B8CF6 +:10FCA8001AD8F01F00382FCDC008300A0C9B6C6C96 +:10FCB8005D185C5CC0700C9C301BF01F0033E08F3B +:10FCC80001A7ED0700560C9CF01F0030ED080070EE +:10FCD8005808F9B901FFF1D9E108EDF81C383019D5 +:10FCE800ED08003CF2071900C021A178ED58005634 +:10FCF800C2E84A78700913AB139A13B81389F1EB69 +:10FD08001088F5E910894A3B201D1AD94A29968797 +:10FD180072094A2BF2CAFFF0760BEE0B000B2F4943 +:10FD2800F01F001F2FEDCF68EDB80001E08100F350 +:10FD380049A870096CA820181039E08100EC0C9CC7 +:10FD4800F01F0018CE780C9CF01F0010496811882D +:10FD5800EDB80005E08100DFED380026A1B80C9C65 +:10FD6800ED680026F01F00113078CC1800007328C9 +:10FD7800000073248003AC608003AF2C80039D9C3B +:10FD8800800094C48000E1248000E7F40000731828 +:10FD980000007320000073300000731C80010234DF +:10FDA800800101000000732980010CEC0C9CF01FFD +:10FDB800003E4BE84BE91188E2180020C2D01388B6 +:10FDC800EDB80004C1F14BB870096D781039C1A1C4 +:10FDD800ED380026A1B80C9CED680026F01F00360F +:10FDE8000C9CF01F00364B6972080C38C5604B59E3 +:10FDF8009308C05870390C39C69012985808CFB17A +:10FE0800C6D8ED380026A1B80C9CED680026F01F76 +:10FE1800002A3088C6C81388EDB80004E081007B4A +:10FE28004A4870096D781039C7513068C6080C9C6B +:10FE3800F01F001D49D81188EDB80005C6B1ED388E +:10FE48000026A1B80C9CED680026F01F001B0C9C36 +:10FE5800F01F001A49A972080C38C1F04999930893 +:10FE6800C05870390C39C32012985808CFB1C368EC +:10FE78000C9CF01F000D48E81188EDB80004C4A1DF +:10FE880048C870096D781039C4510C9CF01F000BDC +:10FE980048B972080C38C0316C38C21848999308B0 +:10FEA800C1B800008000E7F400007329000073283F +:10FEB8000000732480010CEC8000DA8C0000820CB6 +:10FEC8000000821870390C39C0614C0993086C39EC +:10FED8009139C06812985808CF614BC99308300807 +:10FEE8008D384BB870098D39910630A88D48C128D6 +:10FEF8000C9CF01F00384B881188EDB80004C0A195 +:10FF08004B6870096D781039C0514B591388A5A8F2 +:10FF1800B2884B381188EDB80003C091ECF800980E +:10FF28005808C0803FAB6C6C5D18C048EDB8000441 +:10FF3800C0A10C9B4ABCF01F002C0C9B302CF01F5E +:10FF4800002BC658ED0A0070580AC090ECF80088DB +:10FF58005808C0505C7A0C9B6C6C5D184A48700855 +:10FF68005808C24049C91389EDB90003F1F9080DD1 +:10FF7800F9BA0001F3DAE039F1F90E0D49CAECF8E3 +:10FF8800008C5808C070740A30090C9B6C6C5D18A2 +:10FF9800C0781099740A0C9B109CF01F00165C5CCA +:10FFA800C05049387008ED48008448D81188EDB829 +:10FFB8000005C271ECF8008C5808C1D030090C9BC0 +:10FFC800129A6C6C5D18C1D800008218000082205B +:10FFD8008000E7F4000073280000732400007329F0 +:10FFE8000000820C8000DAE88000C9740000732CDD +:08FFF8008000E5EC10990C9B60 +:02000004800179 +:10000000109A109CF01F002E30094AE80C9C9109B0 +:10001000F01F002D30064AB891064AC76E1C580CD6 +:10002000C330F01F002B8F16C2F86A0BF738000D93 +:10003000EDB80002C2604A78F10C00A02FFCF15C20 +:1000400000A0F10C00962FFCF15C0096179C17A6FF +:1000500017B8178BF9EB108B201D49F972091ADBC1 +:1000600049EB968CF2CAFFF0F1E6108849CB2F4994 +:10007000760BF80B000B49BC780CF01F001B2FED22 +:100080000E9CF01F0013F01F0019C1714988201D3C +:100090001AD8E06801771AD84968497C1AD8F01F45 +:1000A00000172FCDC0085808FE90FCE0FE9FFCEB27 +:1000B00049387006FE9FFB67D83200008000E5ECEF +:1000C0000000822480010CEC000073348000D13CDD +:1000D000000080D400007330000073200000731C07 +:1000E00000007324800102348000D6B48003AC6029 +:1000F0008003AF4080039D9C800094C40000822058 +:10010000D42179F95809C3107208F8CEFF88F9484C +:10011000007C79E8C038109E70085808C1C0704B48 +:1001200017F617C417D5B165EBE41185724A17EBC2 +:1001300015F7EBEB108B15C5EDEB100B15D615EA8B +:10014000B166EDE51186EDEA108AEFEA100AF60ACB +:10015000010ACE2693089D093008F9480040F93875 +:10016000004E2FF8F968004ED822D42179F95809A9 +:10017000C600F9380026EDB80002C5B07208F8CE06 +:10018000FF88F948007C79E8C038109E700858084C +:10019000C1C0704B17F617C417D5B165EBE41185D4 +:1001A000724A17EB15F7EBEB108B15C5EDEB100B47 +:1001B00015D615EAB166EDE51186EDEA108AEFEA8B +:1001C000100AF60A010ACE26930830089D09F9485C +:1001D0000040F938004E2FF8F9090056F968004E32 +:1001E000F5D9C02FF9080060F7D8C02FF009190021 +:1001F000F60817B0F4081780F9580058F908003CC1 +:10020000F00915015C78A178F91A0058103AF9F94B +:100210005C2CF9380026A3A8F909003CF9680026EF +:10022000F20815011009F90800581009F95900568B +:10023000D822D703D43118941693149112921096A1 +:100240004097300A314B301CF01F00391895C6D04A +:1002500098593138F0091900E08B000F4B58201DD8 +:100260001AD8E068031F1AD84B384B4C1AD8F01F25 +:1002700000342FCDC0080E9878175C78AEB8A988E6 +:10028000AEA8E0685014EF68000DA988EF68000C74 +:10029000E8081618AEC8F1D4C208AED8E608161899 +:1002A000EF680008F1D3C208F3D6C010EF68000968 +:1002B000AE993088A9893006AEF4EF63000BAE89A1 +:1002C000EF66000FEF660012EF660013EF66001096 +:1002D000EF660011EF68000E3069049A029BE9D4C2 +:1002E000C108E7D3C108AEE4EF63000A98C8F01F65 +:1002F00000155C7CEF6C0011A98CEF6C0010201DC8 +:10030000491C30671AD70C98F9070090049A2FF708 +:10031000029BE06900FFF95700900A9CF01F000B58 +:100320000A9CF01F000B2FEDD83200008000D3187C +:100330008003AF5C8003AFA480039D9C800094C4C5 +:1003400080011E2C000080D4800122948000D13CCA +:10035000D43120BD14915098414A505A12961897A2 +:100360003009F20119005F08F20A18005F0AF1EA89 +:10037000000AF20A1800C110F3D6C002C0E14C789E +:10038000201D1AD8E06800AD1AD84C584C5C1AD819 +:10039000F01F00452FCDC008580B5F195089126817 +:1003A000C0E04BE8201D1AD8E06800AF1AD84BF81F +:1003B0004BCC1AD8F01F003C2FCDC008EF080072BC +:1003C000E2081900C0B2EF380026EA18FFFFE8186B +:1003D000FF80EF680026E08F02E34058F3D8C001A9 +:1003E000E2180002F9B8010CF009002950296FB099 +:1003F000EF02007431F8F0021900E08800144AC8D6 +:10040000F109009C2FF9F159009CE06C00FFEF38D6 +:100410000026EA18FFFFE818FF80EF680026E08F4B +:1004200002C36FF85802C2605808C1404028A38830 +:100430002FB8AD685C883003503B50A8F7D1B0109E +:10044000409A504BF5DAC001069406980695506A1A +:10045000C3796FE85808CEB14908201D1AD8E06862 +:1004600000D01AD8493848FC1AD8F01F000F2FCDF9 +:10047000C0085808C0416FE85808CD904878201D42 +:100480001AD8E06800D31AD848B8486C1AD8F01FB8 +:1004900000062FCDC00800008003AF5C8003AFD4FE +:1004A00080039D9C800094C48003B028000080D409 +:1004B0008003B0688003B0A450195008EF03003CDB +:1004C000304CF01F0042401918954008E080023C73 +:1004D000300B990B991B5809C0301894C118580853 +:1004E000C0E14BB8201D1AD8E06800EF1AD84B982D +:1004F0004B9C1AD8F01F00392FCDC008910C5C73AB +:10050000402A4069E60A010840435C73E6080D434F +:100510005C835809C3904028300AE608000B149CFD +:100520005C7BF01F002F8B1CE080020EF5D3C01007 +:10053000402B98D9F40B00081039C0E44A48201D1C +:100540001AD8E06800FF1AD84A684A3C1AD8F01F47 +:1005500000232FCDC008501AF01F0023401A18980E +:1005600040895809C0A0402B6A195008721C160C0B +:10057000403BF01F001E4008F00200026A185C8237 +:1005800070188B28C3D8406A402B149CF01F0014AD +:100590008B1CE08001D9F01F0014407AF8020002A1 +:1005A0005C82580AC2D0F7D3C010301A303CF01F1A +:1005B000000C189B6A1C580BC1C1F01F000D40694C +:1005C0008B19E08F01C100008000C9D48003AF5CAB +:1005D0008003B0D880039D9C800094C48000D31811 +:1005E0008003B0E88000CD0C8002E7368000D13C6B +:1005F000403897182FF28B285C82F01F003F320B97 +:10060000F6021900E08B01A0AA63314B6A1CF01FAF +:10061000003BC0904BA8F10900A42FF9F15900A4A8 +:10062000E08F0192EF39001C6A1870188B48B0896E +:10063000EF39001DB099EF3900246A48B0A9EF39AD +:100640000025B0B9E00916186A48B0C9F3D0C2084D +:10065000B0F0B0D9F3D0C108B0E96A48F16C00132A +:10066000F16C00126A48F13A000CF139000DF3EA1E +:100670001089E019FFC0EDE910095C79F169000DFE +:10068000A989F169000C405AEB6A000E404806182F +:100690005C88F3D3C0105048403B6A48120B503B73 +:1006A00040AA1200F139000DF3D9C006F5E910098E +:1006B0005C79F169000DA989F169000C0A98300A8A +:1006C000404BF40B19005F1B507B169A58045F09CE +:1006D000300B124AF60A1800FE91FEF0F5D2B01067 +:1006E000503A6FE05800E08000C260085808C0909F +:1006F0001090CFCB8000CD348000CDD4000080D4CA +:1007000080EA6048F139000DF3D9C0025F1B140B79 +:10071000E08000C45809E08100C1F7D6C0025F0C38 +:10072000301BF60618005F0BF9EB100BF20B1800EC +:10073000E08000B488EBEF19003C140B123BE08919 +:1007400000ADE13B000EE939000EF20B1800E0812C +:1007500000A5684911FE13FB504B11CC11DBB16BA6 +:10076000F7EC118B11ECF7EC108BFDEB100B160A6C +:1007700013CB13D8B168F1EB118813EB4049F1EBBF +:100780001088F3E81008103AE08100884028681CBF +:10079000F00B11EC5C8BF01F0037C0E04B68201DA4 +:1007A0001AD8E06801691AD84B484B5C1AD8F01F78 +:1007B00000352FCDC0086818905AF80A1900C0A15A +:1007C00070098919910C4032109C20125C82F01F34 +:1007D000002EF1D6C001681BC220580BC05188689A +:1007E000F6081900C0E04A48201D1AD8E0680177D1 +:1007F0001AD84A684A2C1AD8F01F00222FCDC008F8 +:100800006048F13A000CF139000DF3EA1089A1A912 +:10081000F169000DA989F169000CC1E8580BC050BD +:100820009659F0091900C0E14938201D1AD8E0682E +:10083000017A1AD84968492C1AD8F01F00122FCD16 +:10084000C008601CF01F001380698868F208000867 +:10085000A068680881080835E0051700E1F3020682 +:10086000089B304CF01F000CC198EF440078C16821 +:100870008000CDD48003AF5C8003B11C80039D9CBD +:10088000800094C48000D13C8003B1308003B1501B +:100890008000CD348000C97481040C98EDB600014D +:1008A000C040EDB60000C0312FF15C81EDD6C00133 +:1008B000EFF81826F9B90120F1D9E138EFF81E2632 +:1008C0006FB9F1D1C010F2080008EF520074EF4880 +:1008D000006CEF0800720218EF5800725802C14015 +:1008E0006FF85808C1116FE85808C0E14AF8201D98 +:1008F0001AD8E06801A11AD84AD84AEC1AD8F01FD1 +:10090000002E2FCDC00858055F193008F0031900DC +:100910005F1AF5E90009F0091800C4406A48580850 +:10092000C410409CE21C0002C3D1F13A000CF13922 +:10093000000DF3EA1089A3B9F169000DA989F169E5 +:10094000000CC318EF380026EA18FFFFE818FF80F4 +:10095000EF6800264998F109009C2FF9F159009C95 +:100960005804C040089CF01F0016EF0900743008BE +:10097000F0091900C1406FF85808C1116FE8580814 +:10098000C0E148A8201D1AD8E06801B41AD84888E8 +:10099000488C1AD8F01F00082FCDC008E06C00FF6B +:1009A000C028300C2F5DD8328003AF5C8003B16467 +:1009B00080039D9C800094C4000080D48000DA688D +:1009C000D421784E1298587E5F07584E5F09EFE9A0 +:1009D0001009C081582EC060583EC040E06C00F83D +:1009E000D822580AC031149CD822201D30095C7AC4 +:1009F0001AD9F01F00032FED5C5CD8228001035050 +:100A0000D4013008201D109A16991AD8149B30185A +:100A1000F01F00032FED5C5CD80200008001035042 +:100A2000D431189679F45804C05179E45804E08020 +:100A300000CE6848F133000DE7D3C001C06088697B +:100A40003008F00919005F03300A5C53301C14337E +:100A5000F9BB0114F9BB0015F01F005D1895E0808B +:100A600000B698593138F0091900E08B000F4D9805 +:100A7000201D1AD8E068040F1AD84D784D7C1AD87A +:100A8000F01F00572FCDC008684811FA11CB11D9BB +:100A900011E8B169F3EB1189F3E81089ED38001C16 +:100AA0007817F5E91009AE88EF3A000CED38001D13 +:100AB000AE98EF38000DF1EA1088ED3A0024AEAAA6 +:100AC000ED3B0025AEBBF20B1618AEF9AECBF7D955 +:100AD000C208F3D9C108AEDBAEE9ED390028EF69F1 +:100AE0000008ED390029EF690009ED39002AEF69A6 +:100AF000000AED39002BE018FFC0EF69000BA5A834 +:100B00005C88F5D8C010EF6A000DF40B1608EF6B87 +:100B1000000CED39002EEF69000EF1D8C006300947 +:100B2000E8185000ED3A002F5C78EF6A000FEF688C +:100B3000000DEF690011EF690012EF690013EF6912 +:100B40000010A988EF68000CED19002E6CA8F208BF +:100B500000088DC85803C110EF39000CEF38000DA4 +:100B6000F1E91088E018FFC0E8180011EF68000DE7 +:100B7000A988EF68000CC068682811897818F169A5 +:100B80000014ECC4FFFC8AC83069089A0C9B0A9CCC +:100B9000F01F00145C7CEF6C0011A98C4929EF6CEC +:100BA0000010F30C00902FFCF35C0090306C201DC3 +:100BB000ED39000B089A1ADC0C9B30080A9CF01FD8 +:100BC000000B0A9CF01F000A2FEDD8328000D318CA +:100BD0008003AF5C8003AFA480039D9C800094C41D +:100BE00080011E2C000080D4800122948000D13C22 +:100BF000D431300A1895314B301CF01F003918934E +:100C0000C041E06C00FED832EB380026EB39001C06 +:100C1000E018FFFCEB6800266B787817AE89EB399B +:100C2000001DAE99EB390024F00B1618AEA9F3D8CD +:100C3000C208EB3A0025AEF8F1D8C108AECBAEBA87 +:100C4000AED9AEE86AA8F0091618EF690008F3D823 +:100C5000C208E06A5010EF690009F3D8C1083004F7 +:100C6000EF68000BEF69000AF40B1608EB19002E71 +:100C7000EF6B000CEF6A000DEF69000FEF640012DC +:100C8000EF640013EF640010EF640011F20A16081D +:100C9000F2080008EF6A000E8BC8EAC6FFFC0A9B48 +:100CA0000C9A98C83069F01F000F5C7CEF6C001143 +:100CB000A98CEF6C0010306CEB38000AEB39000B9C +:100CC000201D0C9A1ADC0A9B069CF01F0007069C4C +:100CD000F01F0006089C2FEDD83200008000D318CA +:100CE00080011E2C800122948000D13CD431202D23 +:100CF0004AE8189770081838E08001A3F9080056F0 +:100D0000F9090060F0091900F20817805C785008B2 +:100D100079E6F9380026E2180002C1E05806C170F1 +:100D20008CEB6C48794911CCF609010911DBB16BE8 +:100D3000F7EC118B11FA11E8F7E81088400BF5E891 +:100D40001008F20800081638E08800070E9CF01F13 +:100D500000185C5CC7696FF55805C0B1EEC9FF8427 +:100D6000EEC2FFFC5019300349214930C2B9109539 +:100D70006A085808CFD1CF3BF13C000CF139000D87 +:100D8000F3EC108C5C8CEDBC0002C1F148B8201D66 +:100D90001AD8E06802471AD8489848AC1AD8F01F09 +:100DA000000A2FCDC00800000000822480010BF053 +:100DB000000080D4000082108003AF5C8003B18407 +:100DC00080039D9C800094C46FF95809C150EF3B8B +:100DD00000261699E2190044C0F16FE95809E08035 +:100DE0000133720E580EC081926EEF09003CF20E74 +:100DF0001900E08301296C09EF4900786E495829F0 +:100E0000C0E0A5AC5C7CF16C000DA98CF16C000C11 +:100E1000EF390026E019FFFCEF6900266EA9F20AFF +:100E20001618F16A0008F5D9C208F16A0009F5D967 +:100E3000C108F169000BF16A000AEF1A002EF16A8D +:100E4000000FF40B1608F16B000EF40900098FC9AE +:100E5000ED39000EEDB90000C061E06B0200EA1B45 +:100E60000204915BEF08003A3FF9F2081900F9B863 +:100E70000000EFF80C1D6E085808C071049CF01FAC +:100E80000075C45078188F086F085808C121600990 +:100E90006C48EF49004011F911CB11DA11E8B16A41 +:100EA000F5EB118AF5E81088F3E81008EF480044E4 +:100EB0006C1C6C4478199848985A9914E8090109EF +:100EC000121A1218B85AB84830695C78049A0E9B06 +:100ED000E9630010E9630011F01F005F30695C7C7A +:100EE000E96C0011A98CE96C0010E30800902FF860 +:100EF000201DE35800901AD9049AEF38000AEF3900 +:100F0000000B0E9B6C1CF01F00552FED6C4811FA66 +:100F1000F139000DF3D9C0025F1B11CC8CE9F60941 +:100F2000000911DB11E8B16BF7EC118BF7E81088C1 +:100F3000F5E810086F7AF2080008101AC037EF4879 +:100F4000005C5809C3B08D036FF85808C041EF46E4 +:100F5000007CC3286C4A15FE15C46A4915DBB16BC9 +:100F6000F7E4118B15E4F7E4108BFDEB100B13CEB7 +:100F700013FC13DAB16AF5EE118A13EEF5EE108A5E +:100F8000144CF60C010CC177401AC058109A700826 +:100F90005808C0E0704913C413FC13DEB16EFDE4C1 +:100FA000118E13E4FDE4108E1C4C161CCF068D0828 +:100FB0009506C0788B060C95C0480C9CF01F002845 +:100FC0006FE65806C3706C4811CC6F4A8CEB11D990 +:100FD000141BB169F3EC118911ECF3EC108911FCCD +:100FE000F9E91009F6090009400B1639FE98FEC60A +:100FF000EF3900AC3008F0091800C1C18CEB6C4827 +:10100000F60A010A11F911CC11DB11E8B16BF7EC0A +:10101000118BF7E81088F3E81008100AEF18006049 +:10102000103AF9B80B00EFF8BA2AF9B80B01EFF84B +:10103000BEACEF380026F1D8C007EF680026300CB0 +:101040002FEDD832E21B00A0FE91FED7CD2B000081 +:101050008001222880011E2C800122948000DA3C2D +:10106000D401189879FA580AC170149B7609580966 +:10107000C030129BCFCB71EC970CF1490040F14985 +:10108000007CF139004E2FF9F14A0078109CF1698B +:10109000004EF01F0002D80280010CECD431300A5F +:1010A0001896314B301CF01F00401895C7B0985966 +:1010B0003138F0091900E08B000F4BC8201D1AD8F9 +:1010C000E06803C91AD84BA84BAC1AD8F01F003AF5 +:1010D0002FCDC008ED39001C78176D78AE89ED3939 +:1010E000001DAE99ED3900242018AEA9F00B16189A +:1010F000ED3A0025F3D8C208AEF8F1D8C108AECB5E +:10110000AEBAAED9AEE86CA8F0091618EF690008BF +:10111000F3D8C208E06A5010EF690009F3D8C1089B +:101120003004EF68000BEF69000AF40B1608ED19A4 +:10113000002EEF6B000CEF6A000DEF69000FEF64FB +:101140000012EF640013EF640010EF640011F20A64 +:101150001608F2080008EF6A000E8DC8ECC3FFFC09 +:1011600098C83069069A0C9BF01F00145C7CEF6CE9 +:101170000011A98C4929EF6C0010F30C00902FFC92 +:10118000F35C0090306C201DED39000B08981ADCE0 +:10119000069A0C9B0A9CF01F000B0A9CF01F000A89 +:1011A0002FEDD8328000D3188003AF5C8003AFA44A +:1011B00080039D9C800094C480011E2C000080D47C +:1011C000800122948000D13CF9390010A3C948A8BD +:1011D000F969001011BA118B119911A8B169F3EBDB +:1011E0001189F3E81088F5E8100899183008F958C3 +:1011F00000145EFC8003B409997A996B5EFCD703F6 +:10120000D421301CF01F00071897C080320A300B21 +:10121000F01F00053FF8EF68000B0E9CD82200007D +:101220008000C9D48002E8BCD40148C9189B720868 +:101230001838C0D178389308C0C870395809C060D0 +:101240001639F7F90003F1F90A0370385808CF612D +:10125000301CF01F0003D802000082288000C974EF +:10126000D4214AB83009700E1C98C148103CC111F5 +:101270005809C0E04A78201D1AD8E06802541AD8EC +:101280004A584A6C1AD8F01F00262FCDC0083019D2 +:1012900070385808CEC1580BC0C017B817861797BA +:1012A00017ABB167EFE61187EFEB108BF1EB100B8B +:1012B000990B580AC2211C98E06A1000E0667FFF73 +:1012C0003007C0C8F10B0012F40B1900C061F6CA58 +:1012D000FFFF1C985C8AC0287038EC0A19005F1563 +:1012E00058085F1BEBEB000BEE0B1800CEC1580843 +:1012F000C040E06C00F5D822F95A00125809C0200D +:10130000D82A993E4828910C129CD82200008228A5 +:101310008003B19C8003B1E080039D9C800094C455 +:10132000D4213008169614951897F9090012F0097F +:101330001900C071300A189BF01F00145C5CC231A8 +:101340005806C0C00DB80D8A0D990DA6B169F3EA13 +:101350001189F3E61086F1E61006EF380010A3A815 +:101360008F16EF680010EF55001448987008109C15 +:10137000C0581837C021D82A783C580CCFB18F38C4 +:1013800048389107D82200008001126000008228AE +:10139000D43112971093169414911895F9090012EC +:1013A0003008F0091900C091300A189BF01F004561 +:1013B000E5DCC008E0810084308B089CF01F00420F +:1013C000C0310896C0E8300A308B301CF01F003F57 +:1013D0001896C041E06200FFC728089BF01F003C40 +:1013E0008C593078F0091900E08B000F4B98201DC4 +:1013F0001AD8E06801C51AD84B784B8C1AD8F01F60 +:1014000000382FCDC008EB3900120E986C175C78AD +:10141000AE893009EB3A0013AEB8AE9AA988AEF99E +:10142000AEE9AEA86A085808C041E6C2FFFCC10890 +:1014300066191238C0C00836C041E06200F7C3F830 +:101440000C9CE06200F7F01F0027C3980A928CC83A +:10145000F0091608AED8AEC9EB390010EDB900009E +:10146000C1403119029A049B0C9CF01F001F5C8C38 +:10147000F1DCC010AEF8A988AEE8580CF9B800FF4E +:10148000EFF80E07EFF80E0631181AD3049BEB396C +:10149000000B029A1AD80C9CEB38000AF01F0013BC +:1014A0002FEDE5DCC0080836C0400C9CF01F000D95 +:1014B00048F8F10900782FF9F1590078049CD832E6 +:1014C000800112608000CDD48000D3188000CDB49C +:1014D0008003B19C8003B1EC80039D9C800094C488 +:1014E0008000D13C80011E2C80012064000080D44B +:1014F000D421202D1897501B149C500A1296F01FCF +:10150000000C401B1898400AC0A148A8E06C00FCE1 +:10151000F10900862FF9F1590086C078F3D6C01082 +:101520000E9CF01F00055C5C2FEDD8228001222864 +:10153000000080D480011390D401F8CAFFFCF9198F +:101540000014F01F00035C5CD8020000800114F05E +:10155000D431203D4D98F109007A2FF9F159007AE4 +:10156000781716910F8818955C8898CAF3D8C0042C +:101570002FE9A369123AC0A5F1D8C004F00B1502F7 +:101580005C3BF01F004F1894C0904CC80A9CF109B6 +:1015900000822FF9F1590082C1D96A12EECCFFF016 +:1015A000029B502CF01F004705980583F1E3108340 +:1015B00005B805AE1896F1EE108E5C835C8E34484B +:1015C000F00E1900C2413438F0031900E081008B9D +:1015D00062A85808E080008770145804E0800083F7 +:1015E00068185808E0800092EF3A000CEF39000DBF +:1015F000B169F3EA1189EF3A000EF3EA1089EF3A84 +:10160000000FF5E910091238C6D1C7F84AE8089961 +:10161000700A089B1498500AC618F10C0012FC0CB2 +:101620001900C5A15806C041700C580CC1B0EF306C +:101630000010EF3C0011B16CF9E0118CEF3000129A +:10164000F9E0108CEF300013F60618005F1AE1EC99 +:10165000100C700018305F0CF5EC100CF60C180034 +:10166000C3B05804E08100D6F13C0010E21C000435 +:10167000F0041700CCE8701C580CC150EF3A000C75 +:10168000EF30000DB160E1EA11805010401AEF30E8 +:10169000000EF5E010805010EF30000F401A14409B +:1016A000003CC1A1400A10945809C0F0703893382A +:1016B000893A48589104C148000080D48000CDD4B4 +:1016C00080012558000082284C88F109008E2FF9EE +:1016D000F159008EC058109970385808C9F1580453 +:1016E000C141EF3A0010EF380011B168F1EA1188FA +:1016F000EF3A00126219F1EA1088EF3A0013F5E8A8 +:1017000010081039C6D1300405F805E9F1E9108850 +:10171000C130402A8AC83119EECBFFF40A9CF01F71 +:1017200000345C8CC0904B180A9CF10900802FF9A2 +:10173000F1590080C4F83F8B0A9CF01F002EC0E0D6 +:101740004AD8201D1AD8E06801141AD84AB84ACCE1 +:101750001AD8F01F002C2FCDC0085804C0D06866DE +:101760005806C3E0089BF1D3C010EEC9FFF40A9AF3 +:10177000687C5D16C5585806C261EF380010FC1928 +:10178000E000B968E618F0001238C1D00F8B0A9C4F +:10179000F7DBC0042FEBA36BF01F00166A180E389E +:1017A000C0E04958201D1AD8E068012F1AD84968AE +:1017B000493C1AD8F01F00132FCDC008303B0A9CBB +:1017C000F01F001248980A9CF10900882FF9F1597E +:1017D0000088F109007E2FF9F159007EC0280A9C8B +:1017E000F01F000BC1D80000000080D480011E2C27 +:1017F0008000CDD48003B19C8003B11C80039D9CEC +:10180000800094C48003B21C800118FC8000D13C8D +:10181000F10C0014E60C1900FE91FF5FC2DB2FDD16 +:10182000D8320000D431189316921494324B300AF7 +:10183000301CF01F00241897C43098593238F00932 +:101840001900E08B000F4A08201D1AD8E068012E0D +:101850001AD849E849EC1AD8F01F001E2FCDC0084D +:101860007816661531CAAC94AC823004ACC4ACD4E2 +:10187000ACE4ACF4661B781C2F8CF01F00170C9C9A +:10188000ACA4ACB48EDBF01F00155C7CACBCA98CA6 +:10189000ACAC201D492C30161AD60898F906006009 +:1018A000EACAFFF4E06900FF089B2FF6F9560060D2 +:1018B0000E9CF01F000C0E9CF01F000B2FEDD83279 +:1018C0008000D3188003B2308003B27880039D9CDF +:1018D000800094C48002E73680011F4A000080D453 +:1018E000800122948000D13CD401F5DBC00830BBDC +:1018F000F01F0002D802000080011824D401F5DB9B +:10190000C008303BF01F0002D802000080011824FC +:10191000D4314C62E50800622FF81694E558006255 +:10192000781618970D85EBD5C004A365EA0311005E +:101930005C83069BF01F003EE08101788E493038C1 +:10194000F0091900E08801726E1811893088F009D9 +:101950001800E081015DED380010ED310011B1613A +:10196000E3E81181ED380012E3E81081ED3800134F +:10197000089BF1E11001ECCCFFF0F01F002EC071CC +:10198000E611F000FC18E0001031C0914A780E9C7E +:10199000F10900742FF9F1590074C4498E49307867 +:1019A000F0091900E08801420E9CF01F00235C8CB6 +:1019B000C0A00E9CF01F0021E50800682FF8E55834 +:1019C0000068D832330B0E9CF01F0019C6E00A9B4A +:1019D0000E9CF01F0017189AC0E04998201D1AD8D5 +:1019E000E06800981AD84978497C1AD8F01F001787 +:1019F0002FCDC0088ECB302CF01F00151892E08040 +:101A0000011F98D9EAC8FFF81039C25248C8201DF2 +:101A10001AD8E06800A21AD848E848BC1AD8F01FC3 +:101A2000000B2FCDC0080000000080D48000CDD472 +:101A30008001255880011FAC8000D13C8003B2306A +:101A40008003B2A480039D9C800094C48000D318BE +:101A50008003B2D80E9BF01F00445C5CC0E04C38A1 +:101A6000201D1AD8E06800A51AD84C184C1C1AD8AA +:101A7000F01F00412FCDC008069B6416049CF01F88 +:101A8000003FC0E04B98201D1AD8E06800AB1AD880 +:101A90004BB84B8C1AD8F01F00382FCDC0080E9CC5 +:101AA0000497F01F0038C1383D0B0E9CF01F003327 +:101AB000C0E04AE8201D1AD8E06800B51AD84B08E3 +:101AC0004ACC1AD8F01F002C2FCDC008ED3A000CDC +:101AD000ED39000DB169F3EA1189ED3A000EED3BE5 +:101AE0000010F3EA1089ED3A000FF5E91009ED3A1C +:101AF0000011B16AF5EB118AED3B0012F5EB108A8B +:101B0000ED3B0013F7EA100AF40B16186E18ED6A95 +:101B1000000FED6B000CF7DAC208F5DAC108ED6AC8 +:101B2000000EF20A1618ED690013ED6A0010ED6B55 +:101B3000000DF5D9C208F3D9C108ED6A0011ED69AD +:101B40000012300911AAB08911B9F3EA1089FE7A9E +:101B5000F7FE5C89F4091900E0880016F2C9F7FF66 +:101B6000C14800008000CF988003B2308003B310DA +:101B700080039D9C800094C48000CDD48003B33842 +:101B80008000D13CF2C9F8005C79B0B9A989B0A94C +:101B9000ED380009E818FF00ED680009A988ED6834 +:101BA00000083008314BED68000BED68000A0C9C12 +:101BB000F01F00284A885C7CED6C000BA98CED6C52 +:101BC000000AF10900602FF90A9BF15900600E9C90 +:101BD000F01F00221898C0E04A18201D1AD8E068AB +:101BE00000D71AD849F84A0C1AD8F01F00202FCD78 +:101BF000C00830191AD4189A1AD9ECCBFFF4E0694E +:101C000000FF0E9CF01F001A2FEDC0B8E508007011 +:101C10002FF8E5580070E50800662FF8E5580066D3 +:101C20000E9CF01F0014D8320E9CF01F001248A822 +:101C3000F109006A2FF9F159006AD8320E9CF01FA1 +:101C4000000D4858F10900742FF9F1590074D83289 +:101C500080011F4A000080D48000CDD48003B230C0 +:101C60008003B36C80039D9C800094C48001206439 +:101C70008000D13CD431205D30951988FAC9FFF03D +:101C8000FACEFFFC5009330231033056F0C9003060 +:101C9000EA091800E08B00BAE4081800C03030A749 +:101CA000C1582FFC35891988F20818005F0A378956 +:101CB000F20818005F09F5E91009F9B70008F7BC48 +:101CC00001FFF9B70110F9F81800F8CAFFFF300951 +:101CD0003191F2070244F0C000301004F4CC00014E +:101CE000EA001800E08B0005E8C90030C1E80E9456 +:101CF000E6071800C1D1F0C400615C54EC04180080 +:101D0000E088000EF0C00041EC001800E08B0011EC +:101D1000E2041800E0880004341CC028361C2F6838 +:101D2000F00C010CF9E9104915882FFACD3B32EA85 +:101D3000F4081800C0814008103EC6701CA92FFC92 +:101D40001988CA5B5808C28030CAF40818005F1CA2 +:101D5000320AF40818005F1A146C300AF40C1800E8 +:101D6000C1B030DCF80818005F1730ACF808180074 +:101D70005F1CEFEC000CF40C1800C0E030BC309796 +:101D8000F80818005F1CEE0818005F18F9E8000852 +:101D9000F4081800C3A1FAC8FFFC101EA34E2FFEC2 +:101DA000582EC0B0E0890005580EC2F0C298583EC7 +:101DB000C0F0584EC251C168E064FFFFEA1400FF52 +:101DC0000839E08B00234018F3E81189C198E049F5 +:101DD000FFFFE08B001B4018402AB968F1EA1108A8 +:101DE000C0D8E04900FFE08B0011402A4018B968D4 +:101DF000F1EA1108403AF1EA1088F1E91009580BAC +:101E0000F7F91A00301CC028300C2FBDD832D70388 +:101E1000D401202DFACBFFFCF01F0004F9BC00FF19 +:101E2000FBFC10012FEDD80280011C74D431202D51 +:101E3000300630110C9EC4A898557812E7D5B01022 +:101E4000049430075008C0B8E92800000990202306 +:101E5000E1E810805C835C702FE40007E203190066 +:101E6000FE9BFFF40A944008E214FFFEE7D5C00190 +:101E700008023000E0031900C0400584A964080787 +:101E8000E9D7C010B187E80700070E94E0140000FE +:101E9000C060E9D7C010B187E80700075C77EBD5D1 +:101EA000C001EE0E000EEFDEC010B18EEE0E000E81 +:101EB0005805C0B0EFDEC108EC061101A96E5C56F2 +:101EC000FDDEC010EFEE100E780C580CCB615806FA +:101ED000C080F9DEC108A96EFDDEC010F9EE100E5B +:101EE00017B715BC17851796B166EDE5118617ABC8 +:101EF0001585EDEB108B5C781596EFEB100B15AAA2 +:101F0000EFDBC010B166B18BEDE511860E0BEDEA8B +:101F1000108AF9EA100AF40C1610F5DAC010F60A65 +:101F2000000A180AF4090009F2080008F00E000E71 +:101F3000F1DEC010B18EF00E000EF9DEC010B18ED1 +:101F40001C0C5CDC5C8C2FEDD832D4213008189945 +:101F5000F5DBB010301EC0B8F32600001397202A1E +:101F6000EFE610875C8A5C772FE90E08FC0A1900FF +:101F7000FE9BFFF41699E219FFFE120CEDBB000068 +:101F8000C0411989A9691208F3D8C010B188F208B4 +:101F900000081099E0190000C060F3D8C010B188A3 +:101FA000F20800085CD8F9D8B010D822D431300A31 +:101FB000301414981495C488985B7816EFDBB01031 +:101FC0000C9E3009C0B8FD2200001D932027E7E2D7 +:101FD00010835C875C732FEE06090E93E8071900E7 +:101FE000FE9BFFF3169EE21EFFFE1C06FDDBC001FA +:101FF000EA0E1900C0400D8EA96E1C09FDD9C01053 +:10200000B189FC090009129EE01E0000C060FDD9E4 +:10201000C010B189FC0900095C79F7DBC001F20846 +:102020000008F3D8C010B188F2080008580BC0B0FF +:10203000F3D8C108F40A1101A9685C5AF1D8C0109C +:10204000F3E81008780C580CCB81580AC080F3D8FC +:10205000C108A968F1D8C010F3E810085CD8F9D815 +:10206000B010D832D431201DFAC4FFD8169712937D +:102070001092681518966801580AE0800091500A7D +:10208000314BF01F0055400AC0A04D48E06C00FEE7 +:10209000F109005C2FF9F159005CCC286C148C59C3 +:1020A0003138F0091900E08B000F4CD8201D1AD8E8 +:1020B000E068022C1AD84CB84CBC1AD8F01F004B60 +:1020C0002FCDC0085C53E3E310815C71E961000926 +:1020D000A981E9610008158B1598B168F1EB1188A9 +:1020E00015ABF1EB108815BBF7E81008F00B1618CC +:1020F000E9680013E96B0010F7D8C208F1D8C108ED +:10210000E96B0011E9680012E81245005C72A892C0 +:10211000E4031608A883ED380008A8A8ED380009E4 +:102120004B39A8FCA8B8A8EC9208F7D8C010A8DBD7 +:10213000A98BA8CB2FF8B2085807C0D00F8B0FB9C6 +:102140000F98B168F1EB11880FABF1EB1088F3E851 +:102150001008C051EAC8FFFCEBF81001F00916188E +:10216000E968000FE969000CF3D8C208F1D8C1088A +:10217000E969000DE968000E3008E968000BE968BC +:10218000000A500A314B089CF01F001A5C7CE96C75 +:10219000000BA98CE96C000A400AC038781A2F0A93 +:1021A00048E8F10900482FF9F1590048158B1599B5 +:1021B000B169F3EB118915AB6A18F3EB108915BB04 +:1021C000F7E910091039C1910C9B0A9CF01F000A15 +:1021D000C26800008000CDD4000080D48003B3909A +:1021E0008003B3D880039D9C800094C40000734892 +:1021F00080011F4A8000CAF8EB08002C5808C0B0C4 +:102200008C49F0091900E08800070A9B0C9CF01F1C +:102210000006C0580C9B0A9C6A585D185C5C2FFD38 +:10222000D8320000800125A0D42149781896700783 +:10223000C1680E9CF01F0015C1100D8B0D98B16880 +:10224000F1EB11880DAB6E1AF1EB10886E290DBB06 +:10225000F7E8100814581268C1306E075807CEA16D +:1022600048B66C0C580CC040F01F0008C08148985C +:10227000F10900562FF9F1590056C0286C070E9C41 +:10228000D8220000000080CC8000CAE4000080D08A +:10229000000080D4D421204D1897503B149C502A24 +:1022A000501950084096F01F000D403B402A40193D +:1022B0004008C0A148A8E06C00FCF10900562FF9C5 +:1022C000F1590056C0881ADC0E9C1AD6F01F000582 +:1022D0002FED5C5C2FCDD82280012228000080D415 +:1022E00080012064D4314C05EB08004A2FF87817A0 +:1022F000EB58004A0F980F831694F1E31083189659 +:10230000E609160C3048F0091900C090F01F00379C +:10231000EB08005C2FF8EB58005CC2980FB8E7D3CD +:10232000C1040FA2A363F1E2108298585C82E60810 +:102330001900C0539848E4081900C0B20C9CF01F63 +:10234000002B4A98F10900522FF9F1590052C86840 +:10235000069B0E9CF01F00265C8CC0F00C9CF01FAE +:102360000023EB0800502FF8EB580050EB08004E0C +:102370002FF8EB58004ECD48F7D2C0100C9CEEC0A1 +:10238000FFF0F01F001C0895301249B10A9CF01FA5 +:10239000001BC1D0EAC8FFFCC1A06A185808C17070 +:1023A000EF3A0010EF390011B169F3EA1189EF3A01 +:1023B0000012F3EA1089EF3A0013F5E91009103919 +:1023C000C2A00A9B009CF01F000EC2515802E3F508 +:1023D0001000EBF5000030020835EBF50000580561 +:1023E000CD61C9F8000080D48000D13C80011F4A33 +:1023F0008000D210000080CC8000CAE48001255803 +:10240000EE03000307B807A9F1E910893448F00981 +:102410001900C2A0EF39000CEF38000DB168F1E9E6 +:102420001188EF39000EF1E91088EF39000FF3E859 +:102430001008C1B0089BEECCFFF4F01F003DC0A116 +:10244000EF38000CFC19E000B968E618F00012380B +:10245000C0C10C9CF01F00374B78F109004E2FF9DA +:10246000F159004EC5D808955805C0510C9CF01F75 +:102470000031C5680FE90FF8F1E91088F1D8C00EF6 +:10248000C0700C9CF01F002D1896C4A078174AC885 +:1024900091044AC8089B91070C9CF01F002BC3B104 +:1024A000EF3800095868C0B05918C0405818C11119 +:1024B000C0B8089B0C9CF01F0025C2D8089B0C9C40 +:1024C000F01F0023C288089B0C9CF01F0022C2381A +:1024D000089BEECCFFF0F01F0016C0F1EF380010A3 +:1024E000FC19E000B968E618F0001238C0608D17DA +:1024F000302B0C9CF01F00180C9CF01F000E48E8BD +:10250000F10900582FF9F1590058F109004E2FF93F +:10251000F159004E48A93008930848A99308D83AC1 +:10252000EF3800095918FE91FF77C6BB8001255886 +:102530008000D13C000080D4800129BC0000822CA6 +:10254000000082308000D588800115508000F37C27 +:1025500080011910800118FC19B9198A1998B168FD +:10256000F1EA118819AAF1EA1088F3E81008F0C915 +:1025700000015BD9E08800035EFFF7390035EDB953 +:102580000001C0E1761A1438C0B07629105A126AD8 +:10259000C0715CD9F3E8000812385F0C5EFC5EFD88 +:1025A000D431209D503B506A781B403AF519002CDD +:1025B000F2C80013502B5078214917EA17F8F1EAB6 +:1025C00010885C88109BF1D8C00DE21B2000984356 +:1025D000505B2143308B5018F20B0C0A1897F3DA3A +:1025E000B0105C8312985049A37830025C88314067 +:1025F0005088C938401B405AF1DBC00D14485008C0 +:10260000E3D3B010F1D3C01040791039E08900064F +:10261000400B4081ADBB500B300A314B302CF01FCA +:1026200000421894C3708E58313AF4081900E08BB8 +:10263000000F4BE8201D1AD8E06802C31AD84BC817 +:102640004BCC1AD8F01F003C2FCDC008314A402B8C +:10265000781CF01F003A6E19F1D0C010F208000883 +:102660006816EBD1B0108F188E58F0000100AE50F4 +:10267000C2188E52EA021900EA0217205C82C19049 +:10268000302A300B303CF01F0028C071089CF01F2E +:10269000002CE06C00FFC4586E18B842B852189B6A +:1026A00099180415089C5C85F01F00265805C02069 +:1026B0006E075805CDF1ED65000B40085C78ACF86D +:1026C000A988ACE8E2C8FFEC5C78ACB8A988314BCB +:1026D000ACA8ED65000A0C9CF01F001B5C7CED6C47 +:1026E000000BA98CED6C000A4039406A7258089BB7 +:1026F000129C5D18495BF70800302FF8089CF758CA +:102700000030F01F000F40180213404AE1D2B01011 +:1027100014085C835C8850185803FE91FF6D069C7A +:102720002F7DD8328000D3188003B4108003B45CAE +:1027300080039D9C800094C48002E7368000D13CD9 +:102740008000CD3480011F4A000080D4D40148F8B5 +:1027500070091839C04178099109C128580BC0E1A6 +:1027600048B8201D1AD8E06801341AD8489848ACF7 +:102770001AD8F01F000A2FCDC00878089708189BB8 +:10278000305CF01F0007D8020000734C8003B410C7 +:102790008003B47C80039D9C800094C48000C97435 +:1027A000D43118971696183BC0E14BC8201D1AD893 +:1027B000E06800A41AD84BA84BAC1AD8F01F003A16 +:1027C0002FCDC008580BC11076081838C0E04B3820 +:1027D000201D1AD8E06800A61AD84B484B1C1AD8FE +:1027E000F01F00312FCDC0086E156A1811CA11D91B +:1027F000F3EA1089C0303004C1D8118A1199109CB5 +:10280000B169F3EA118911AA11B8F3EA10891248E3 +:10281000314A8F18EECBFFF8F01F0025301B0A9CC1 +:10282000F01F00240A9CF01F002418940A9CF01F3B +:1028300000236E15C1486A1811B9118A119311A8A5 +:10284000B163E7EA1183E7E81083F3E31003F01FB5 +:10285000001A18040A9C0695F01F00180A9C5805D7 +:10286000CEB10C9B0E9CF01F001649689009F5D95B +:10287000C010083AC0E44898201D1AD8E06800C784 +:102880001AD84918487C1AD8F01F00072FCDC00865 +:102890000819089CB009D8328003B4108003B4989A +:1028A00080039D9C800094C48003B4A48002E7361A +:1028B000800118E88000CD0C8000D13C8001274CBD +:1028C000000073508003B4B8D431300618971692C4 +:1028D0004AB30C94300566080A9B0A9CC3E8EF3A99 +:1028E000000CEF39000DB169F3EA1189EF3A000EDF +:1028F000F3EA1089EF3A000FF5E91009705A123A1D +:10290000C1B1EF3A0010EF390011B169F3EA118952 +:10291000EF3A0012F3EA1089EF3A0013F5E91009D3 +:10292000706A123AC0910FCA0FD9F3EA1089906AFF +:10293000F20A1900C0D02FF5580CC090F13A001FD0 +:10294000F939001FF20A1800E08B0003109C70098F +:102950005809F00B171012985808CC21580CC04099 +:10296000F01F0008180658155F9804365F59F3E801 +:102970000008E8081800CAF10C9CD8320000734C1B +:10298000800127A0D42148C83007700CC108F9384D +:10299000001F7806F0C900015808C050F969001FEF +:1029A0001897C0480E9BF01F00050C9C580CCF01D7 +:1029B000D82200000000734C800127A0D431201DD4 +:1029C0004CD8F10900322FF9F159003278161895D8 +:1029D0000D835C83F3D3C004A3695949C080F10916 +:1029E00000442FF9F1590044E08F02570DF80DE132 +:1029F000F1E110810DB80DA24C07F1E21082F01F39 +:102A000000408E885C815C821894F808000858A801 +:102A1000E08A000D189B0C9CF01F003AC5708E8850 +:102A2000E808000858A8E08900524B783009700780 +:102A30005009C3D8ED39000CED38000DB168F1E94B +:102A40001188ED39000EF1E91088ED39000FF3E837 +:102A500010086E591039C291ED390010ED3800118F +:102A6000B168F1E91188ED390012F1E91088ED390A +:102A70000013F3E810086E691039C1710DC90DD843 +:102A8000F1E910888E69F0091900C0F149A8F1092F +:102A900000462FF9F15900460DE90DF8F1E91088CB +:102AA000F1D8C00DC360C3F850076E075807CC318A +:102AB000E08F021E089B0C9CF01F0012083CC065B2 +:102AC000305CF01F00121897C09148B8F109003C23 +:102AD0002FF9F159003CE08F01E0320A300B0E9CD7 +:102AE000F01F000B30394888EF69001F70098F090B +:102AF0009107C138000080D4000073508000CD0CD5 +:102B0000800128C80000734C8000C9D48002E8BC52 +:102B10008EF8F1D8C00DC070314A0C9BEECCFFF896 +:102B2000F01F004F4CF89009F20400045C84B004DC +:102B30000DE8A598EDB80000C120EF38001EE3D1E4 +:102B4000C00DE7D3C004A371E60310FCE20200024B +:102B5000A1A80602EF68001EEF52001C6A1811BB04 +:102B6000300A11AEF7EE108E118BB09AB0AAB0BA3F +:102B7000B08A1499F5DBC00411FBF40A10FC11ECC7 +:102B8000F7EC108CF9DCB00DA37CF7DCC010B0DBE7 +:102B9000A98B180EB0CB140E10935C8E3016F5DE98 +:102BA000C010B0FAA98AB0EA6E11029BC548761A25 +:102BB00015C015D2E5E010825C82E40C1900C292C7 +:102BC000F6021618B0BBB082E5DBC208F7DBC1081D +:102BD000B092B0AB5809E080008213E213FBF7E239 +:102BE000108BF60C1900E08300FF15DB15CAF7EA1D +:102BF000108AF40E1900E08B00F7EA0A1618B2B535 +:102C0000B28AF5D5C208EBD5C108B29AB2A5C6788A +:102C1000E40C1900E08000E815E015FBF7E0108BEC +:102C2000F60C1900E08300E05809C09013FB13E98B +:102C3000F7E91089E4091900F9B601001582159B1E +:102C40001499B16BF7E2118B15A215BAF7E2108B4C +:102C5000F5EB100B580BCAC1C52900008002E736FE +:102C60000000735013EB13FA11CCF5EB108A11DB53 +:102C7000F7EC108BF60A1900E088000F4BC8201DF6 +:102C80001AD8E068018E1AD84BA84BBC1AD8F01F8E +:102C9000003B2FCDC008EA0B1618B28BF7D5C2083F +:102CA000B2B5B29BEBD5C108B2A511CB11D9F3EBEC +:102CB0001089F20A1900F9B60100C1185801C0E0E4 +:102CC0004AB8201D1AD8E06801971AD84AC84AACF9 +:102CD0001AD8F01F002A2FCDC0088F15EF39001E1B +:102CE000EDB90000E08100E45806E08000E16E19D3 +:102CF000721A15CB15D9F3EB1089E08100D9118B2D +:102D000011951099B165EBEB118511AB11B8EBEB97 +:102D10001085F1E51005C1A807F86A1907EB13CC77 +:102D2000F1EB108B13D8F1EC1088F00B1900E08157 +:102D300000BF13881395B165EBE8118513A81293B2 +:102D4000EBE8108513B8F1E510055805CE61123A8D +:102D5000C1A14878201D1AD8E06801B91AD848984E +:102D6000485C1AD8F01F00052FCDC0088003B410AE +:102D70008003B4D480039D9C800094C48003B4F489 +:102D80008003B52C138A1398B168F1EA118813AA4D +:102D9000F1EA108813BAF5E81008C0E04C68201D6D +:102DA0001AD8E06801BB1AD84C484C5C1AD8F01FFE +:102DB00000452FCDC00813F813E9F1E91088EF0999 +:102DC000001C5C88F0091900C1704BB8201D1AD88E +:102DD000E06801BD1AD84BC84B9C1AD8F01F0039C7 +:102DE0002FCDC0080A9CF01F00394B9818143006EC +:102DF000B0040A9CC5982EC8EF58001C6E187016B7 +:102E00000D880D94B164E9E811840DA8E9E81084F7 +:102E10000DB8314AF1E41004EECBFFF80C9CF01F22 +:102E2000002DEF38001CACA8EF38001D0C9CED65A0 +:102E3000000BACB8ACE5ACF5ED65000A314BF01F0A +:102E400000265C7CED6C000BA98CED6C000A6E1604 +:102E5000C1586815089C3ECBF01F0020089B0C9CB5 +:102E6000F01F001F0B890BB80B94B164E9E91184C2 +:102E70000BA9E9E91084F1E410045804CEB10E9CCA +:102E8000400BF01F00180C9C49178E05F01F000F17 +:102E90001815AE05C0D849480A9CF109003630061D +:102EA0002FF9F1590036F01F0011C02830060C9C94 +:102EB0002FFDD8328003B4108003B53C80039D9C65 +:102EC000800094C48003B5608000CD0C0000735076 +:102ED0008002E73680011F4A8000CDD48000CD34C7 +:102EE0008001274C000080D48000D13C305CF01F72 +:102EF00000061897FE91FDF3FE9FFDDE5809FE9136 +:102F0000FEB3CDDA8000C9D4D4211898F937002E49 +:102F1000761E306CF8071800C0E04948201D1AD80A +:102F2000E06801B41AD84928492C1AD8F01F0012B9 +:102F30002FCDC008306C201C5C5CF20C0706FC0C2A +:102F40000007EF66000EF40C0706EF660014580C3D +:102F5000CF313089FD6C001BFD69001A109C706830 +:102F60005D185C5CD82200008003B5948003B5DC5A +:102F700080039D9C800094C4D4211897580CC0E114 +:102F800049D8201D1AD8E06800941AD849B849CC0D +:102F90001AD8F01F001C2FCDC00878185808C0E1BF +:102FA0004958201D1AD8E06800951AD84968494C3C +:102FB0001AD8F01F00142FCDC0086E186E06109C92 +:102FC0005808C0E148C8201D1AD8E06800991AD8EE +:102FD00048E848BC1AD8F01F000B2FCDC008F01FDE +:102FE000000C0E9B306C0C97F01F000A5806CE6147 +:102FF000D82200008003B5948003B62080039D9CF6 +:10300000800094C48003B62C8003B63C8000D13C81 +:103010008000C974D431201D500B1897580CC0C0C3 +:103020004D084D19118CF80815031818F2080028DE +:1030300070495829C0D030AA30094CBE129C1C924D +:10304000129B2ECE1298149314911490C1980F8A4B +:103050000F99B169F3EA11890FAA7018F3EA108980 +:103060000FBAF5E910091039CE714C08F109002E9C +:103070002FF9F159002ECE480C990A9C089B30A6D6 +:10308000EC031800C0A1FCF6FFFC5806C0611296C4 +:10309000189516941093C498FCF6FFFC5816C2417C +:1030A0005807C0F00F860F95B165EBE611850FA6A6 +:1030B000EBE610850FB6EDE5100564160C35C26021 +:1030C00064051D865805C080F2061800C2B3189525 +:1030D0001694109AC2A80C94F6061800C2331296E1 +:1030E00018951090C2285826C1D15807C1300F86B4 +:1030F0000F95B165EBE611850FA6EBE610850FB6CF +:10310000EDE5100564160C35C0514969109CB28874 +:10311000C9781D85F8051800C053129616941091B1 +:10312000C0481296189516942FF82E4E5C582E42D1 +:1031300030A9F2081800CA11F2031800C061400655 +:10314000EDB60000E081007B4005E2150002E08161 +:1031500000763098F0031800E089000A5C53C498A8 +:103160000000735200007354000080D430A8F001B6 +:103170001800C180E7D1C0084B38E60915030619CD +:10318000F00903285808C2304B08201D1AD8E068FF +:1031900001761AD84AE84AFC1AD8F01F002F2FCD22 +:1031A000C008F0001800C040E7D0C008C108E20A1B +:1031B0001800C4404A48E7DAC008E60615030616B8 +:1031C000F00600266C0CF01F00258D053098F003EA +:1031D0001800E088000F49D8201D1AD8E068018C3B +:1031E0001AD849F849BC1AD8F01F001B2FCDC008C7 +:1031F0004959E6081503300A0618F2080028F0C9F4 +:10320000FFF0930A5807C0D00F8B0FBA0F99B1691E +:10321000F3EB11890FABF3EB1089F5E91009911964 +:103220004899E60815030618F20800282F08300907 +:10323000069CB0C948B8B083C038E06C00FF2FFDD1 +:10324000D8320000000073548003B5948003B64C5C +:1032500080039D9C800094C480012F788003B66415 +:1032600000007352D431494730050E963EF42EC704 +:10327000ECC3FED40F882FF85C58AE88EEF9FFFC43 +:103280005829C061E8081800E08B0009C0F85819F7 +:10329000C0D1F2081800E088000A6C0C580CC0403D +:1032A000F01F00068D05EF45FFFC2E472E46063722 +:1032B000CE21D8320000735480012F78D431306889 +:1032C0001293189616951497F939002EF0091800E4 +:1032D000C0E04B78201D1AD8E06801DA1AD84B58A4 +:1032E0004B5C1AD8F01F00352FCDC008580BC5C055 +:1032F00017891798B168F1E9118817A9F1E91088C1 +:1033000017B9F3E81008C500189B0A9CF01F002CA1 +:103310001894C4A10B88FC19E000B968E618F00005 +:103320001238C420069B0A9CF01F00265C5CE80C47 +:103330001800C3C55C6C4A49F8081503302AF00C24 +:10334000010CF20C00289166F0C9FFF0930A0FDA25 +:10335000F16A000D0FCAF16A000C0FBAF16A000B96 +:103360000FAAF16A000A0F9A1095F16A0009ECC3DE +:10337000FFD10F8AB2C4F16A0008C0F87009701456 +:103380008B09F01F00120E99069A089B0C9CF01FE7 +:103390000010089CF01F000F6A08306C109B580842 +:1033A000CEE1109CD832E06C00F6D8328003B594A0 +:1033B0008003B67880039D9C800094C480012558CA +:1033C00080013014000073548000C97480012F08FC +:1033D0008000D13CD421189E580CC0E14958201DD2 +:1033E0001AD8E068024A1AD84938494C1AD8F01F4E +:1033F00000142FCDC008761AF4C8FFE4F137000F8F +:10340000F136000CF139000DF138000E782BB1695E +:10341000F3E61189F3E810897818EFE910091059DB +:103420001669C061F4CBFFD82ECAF01F0006D8225F +:103430008003B5948003A13880039D9C800094C4D0 +:10344000800132BCD431202D189616911495580C59 +:10345000C0E14CA8201D1AD8E068027F1AD84C8819 +:103460004C8C1AD8F01F00482FCDC00894593378DF +:10347000F0091900E08B000A4C48149CF109002265 +:103480002FF9F1590022C3087414E8C7FFE40F981C +:103490000F89F1E910893018F0091900C1E10FD83E +:1034A0000FC9F1E91089E0680604F0091900C1515B +:1034B0000FB80FA9F1E91089E0680800F0091900B8 +:1034C000C0C1E938001BE939001AF1E91089E06848 +:1034D0000806F0091900C0E04AC80A9CF109002852 +:1034E0002FF9F1590028F109001E2FF9F159001E9A +:1034F000CA184A68F109001A2FF9E8C3FFD6F15932 +:10350000001AFAC2FFFC304A069B049CF01F002000 +:10351000EF380018EF390019B169F3E81189EF3875 +:10352000001AF3E81089EF38001BF1E910096C1854 +:103530005808C0C01039C0A1049B3019E8CAFFDC8C +:103540000C9CF01F00143018C0A83009EECAFFF818 +:10355000FACBFFFC0C9CF01F000F30080FEA0FF9AC +:10356000F3EA1089301AF4091900C1503028F00923 +:103570001900C591C52800008003B5948003A138C7 +:1035800080039D9C800094C4000080D48002E736B4 +:10359000800132BC5808C4D03008AEE83028304A28 +:1035A000AEF8EECBFFF2EECCFFE8F01F0025304A7C +:1035B000069CEC0A000BF01F0022ED39002E30684B +:1035C000F0091800C0E049F8201D1AD8E06802D9B7 +:1035D0001AD849D849DC1AD8F01F001D2FCDC008D1 +:1035E000306820185C58EE080009F33B0008F36BC4 +:1035F0000012E808000AF56B000EE208070BF36BF7 +:103600000008E2080709F56900145808CEB10C9CBF +:103610006C680A9B5D18C0D80C9CFACBFFFCF01FAD +:10362000000DC07848C8F109002C2FF9F159002C81 +:103630000A9CF01F000A2FEDD83200008002E73606 +:103640008003B5948003B5DC80039D9C800094C406 +:103650008000B3B4000080D48000D13CD42178191C +:10366000F338001BF339001A1697F1E91088189601 +:10367000E0690800F2081900C070E0690806F20865 +:103680001900C231C1C8189B0E9CF01F00173E4B99 +:103690000C9CF01F0016C0E04958201D1AD8E068A5 +:1036A00004A41AD84938494C1AD8F01F00142FCD59 +:1036B000C0080E9B0C9CF01F0012C148189A169C63 +:1036C0002D1BF01F0010C0E848F8F10900282FF961 +:1036D000F1590028F109001E2FF9F159001EF01FC1 +:1036E000000BD82A800133D48000CDD48003B59458 +:1036F0008003B36C80039D9C800094C4800122E40D +:1037000080013444000080D48000D13CD431300AA0 +:1037100018941691303C338BF01F0042E8C8FFD15B +:103720001895580CC0A14C08E06700FFF10900246F +:103730002FF9F1590024C738985A3379F20A190041 +:10374000E08B000F4B98201D1AD8E06804311AD87E +:103750004B784B8C1AD8F01F00382FCDC008300999 +:103760007813E6C7FFE4AEE93019AEF93069E93AFB +:10377000002EF20A1800C0E04AC8201D1AD8E068DE +:1037800004391AD84AD84ABC1AD8F01F002B2FCDBA +:10379000C00830664AAB4ABA20165C56F006070CE1 +:1037A000EE060009F36C0008F606070CF36C001235 +:1037B000F406070CE6060009F36C000EF006070C91 +:1037C000F36C00145806CE913042EECCFFF2E802C2 +:1037D000000B049AF01F001C049A029BEECCFFE839 +:1037E000F01F00193069AED2AEC9AEB6AE863088D1 +:1037F000301AAEA8AE9AE769001BE768001A089C69 +:1038000068680A9B5D184888F10900182FF9EFDCF9 +:10381000C008F15900180A9CF01F000C0E9CD83209 +:103820008000D318000080D48003B5948003B6A034 +:1038300080039D9C800094C48003B5DC8003B71690 +:103840008003B58D8002E7368000D13CD4211694E8 +:103850001896189B1497089CF01F00541895E08147 +:1038600000DF09890998B168F1E9118809A9F1E92E +:10387000108809B9FC1AE000F3E810081099E6195D +:10388000F0001439E08000CC5808E08000C9301BFB +:10389000089CF01F00475C5CEA0C1800C0545807F5 +:1038A000E08100CBCC184C39EBDCB008EA081503FA +:1038B0000A18F20800282F0870095809F9B9000100 +:1038C000F1F90A004BB9EA0815030A18F2080028B2 +:1038D0007048F0C900015819E088000F4B68201D9E +:1038E0001AD8E06803A51AD84B484B5C1AD8F01FC9 +:1038F00000352FCDC00858185F0858075F09F3E856 +:103900001008C041E06400FFC078089B0C9CF01FC9 +:10391000002EE9DCC0085807E08000854A5AEA0911 +:1039200015030A19A369F409000870485828C0B1A2 +:103930002F890E9BF40900090C9CECCAFFD1F01FE3 +:103940000023C6B85818C6E110990E98905B904AAB +:10395000F40B1900C111700A580AC0E04968201D13 +:103960001AD8E06803C41AD84998495C1AD8F01FDD +:1039700000152FCDC008F13A000CF20A1800C05112 +:1039800070085808CE41C51890CB300A303CF01F63 +:1039900000111896C4F00E9BF01F000F5C5CC1F084 +:1039A0000C9CF01F000EC468800125588001301463 +:1039B000000073548003B5948003B6D480039D9CAB +:1039C000800094C48001370C80012F088003B6FC6E +:1039D0008000D3188000CF988000D13C306CF01F5D +:1039E000001AC170300899169908EA081503F00505 +:1039F00001054968F00500256A045804C07008985C +:103A000068045804CFD1910CC0288B0C089CD82294 +:103A10000C9CF01F000F089C5C5CD822E06C00F648 +:103A2000D822089C5C5CD8220E960E9CF01F0009E0 +:103A3000CD6B089C5C5C4888F10900242FF9F15992 +:103A40000024D8228000C9D4000073548000D13CE7 +:103A50008000CD1E000080D4D421202D169618970A +:103A6000149531CB0C9CF01F0027C0804A68E06C95 +:103A700000FE90592FF9B059C4180E9B0A9CF01FF4 +:103A80000023C3410B890B98B168F1E911880BA998 +:103A9000F1E910880BB9FC1AE000F3E8100810995E +:103AA000E619F0001439C0F13019BAA935E9BAC9DC +:103AB000F3D8C207BAF8BAD9A988BABCBAE8FAC921 +:103AC000FFFEC1586E1912586E291268C0906E38E8 +:103AD0005808C041E06C00FCC118EEC5FFF40C9A18 +:103AE0000A9B0E9CF01F000AC08848A90C9B0E9CE4 +:103AF000EECAFFD1F01F00085C5C2FEDD822000059 +:103B00008000CDD4000080D4800125588001384C3D +:103B10008003B58D80012F0878983019B0895EFC3C +:103B2000D4217897EF380024EF390025F0091800E8 +:103B3000C021D82AEE080028201D701630086C1904 +:103B40008CCA8CDB20EA1AD620EBF2CCFFF2F01FF5 +:103B500000182FED587CC0F0581CC0310C95C138AE +:103B6000EF3800242FF8F1D8C0030C9CEF68002434 +:103B7000F01F0010E06C00F4D8228ADB6A1CF01FF2 +:103B8000000E6A055805CFA1EF3800242FF8F1D8B0 +:103B9000C0030C9CEF680024F01F00064878E06C1E +:103BA00000F290092FF9B009D82200008001933467 +:103BB0008000D13C80013F7C000080D4D421204D86 +:103BC0001896F01F002D5806C5306C955805C50095 +:103BD0000B885808C4D0E0680600300ABA68E06B69 +:103BE0000600303CF01F00251897C3F03008FACBD0 +:103BF000FFF4AA88781CF01F00229A6B580BC35060 +:103C00005C7BFAC8FFF2FAC9FFFCFACAFFF86E1C27 +:103C1000F01F001C586CC2606E18402B101B40181F +:103C20005C5B0E9C100B5C7BF01F001749789019B1 +:103C30002FF9B0196E19F338001BF339001AF1E9A6 +:103C40001088E0690800F2081900C060E069080601 +:103C5000F2081900C0716C480C9B0E9C5D185C5CEE +:103C6000C0400E9CF01F000A0C9CF01F000A2FCDD4 +:103C7000D822000080013FA08000D31880013F5867 +:103C8000800192DC8000D210000080D48000D13C02 +:103C900080013B20D4211897580CC0E149B8201D61 +:103CA0001AD8E06801491AD8499849AC1AD8F01FC7 +:103CB000001A2FCDC008499899983778F9680036CE +:103CC00036C8F9680037496899584968189B996857 +:103CD000495CF01F0016496CF01F00163628EF688B +:103CE00000353068EECCFFD1EF68002EF01F0012D7 +:103CF000581CC040E06C00F4D822E06805DC300CB1 +:103D0000EF58002CD82200008003B71C8003A13894 +:103D100080039D9C800094C40000746C80013A581C +:103D200080013D5880013B1880013E6880013D388C +:103D300080018F4480019128D40116985C7A189BE9 +:103D40002F29109C5C79F01F00045C7CF9BC00FFFB +:103D5000D80200008000CEC4D42131B918977898D9 +:103D6000965AF20A1900E08B0005E06C00F4D822A4 +:103D7000F1390025F13C0024F2CAFFFFF5DAC00357 +:103D8000183AC041E06C00F2D822F16A0025F0092F +:103D90000028169C911B3F26F01F00050E9CF01F6B +:103DA0000005EC0C1800CFB0D82A00008000CD1E12 +:103DB00080013B20D42130061897E9DBC01030A5E4 +:103DC000C138EE060708201D48BC1AD8F01F000BAA +:103DD0002FED5806C080EC050C085809C041488CEE +:103DE000F01F00062FF60836CED5486CF01F0003F2 +:103DF000D822000080037AF0800094C48003B76862 +:103E0000800384D448CD48D0E3B00001D55348C0E6 +:103E100048C10230C06248C2A505A1240230CFD3F8 +:103E200048A048B10230C06230023003A122023003 +:103E3000CFE3488F000100008003760000000008F7 +:103E4000000009B88003F480000009B800008CC8A5 +:103E500080008EDCD4013018F96800087808580812 +:103E6000C030781C5D18D802D4014869930C931BAC +:103E7000F33800085808C040129CF01F0003DA0A0B +:103E80000000749880013E54D421201D1895169688 +:103E90001494300B30CA49DCF01F001D300B49DC94 +:103EA000F01F001D300B49DCF01F001D497B49DC71 +:103EB000F01F001D1897581CC0400E9C2FFDD822E3 +:103EC000F01F001A1897581CCF910C9B0A9C49862A +:103ED0008D07F01F00181897581CC04030088D0837 +:103EE000CEDB30088D08F01F00141897581CCE61E7 +:103EF000FACBFFFD302CF01F0011F9B701FFFBF8E2 +:103F00000803E9F80A00CDAB00007498800091D056 +:103F100080013F8C80018F3080013F3C80019F6099 +:103F200080013E54800144588001440C0000749488 +:103F300080018F488001443080014110D401169CDB +:103F4000580BC041F01F0004D802300B301CF01F8A +:103F50000002D80280014110D4014879F3380008EA +:103F60005808C021DC0A3008F3680008F01F00037D +:103F7000DA0A00000000749880014284D4015C7B5E +:103F8000F01F0002DA0A00008001433CD401169CB5 +:103F9000F7DAC010F01F0002D80200008001433C95 +:103FA000EBCD40C0203DF01F00164969F3380008F2 +:103FB0005808C04072085808C0402FDDE3CD80C0CB +:103FC000E0680100FAC6FFF4E06C01000CE8F01FA5 +:103FD000000E0C9B1897F01F000D9A5B580BC0A0A9 +:103FE0005C7BFAC8FFF81A99FACAFFFC0E9CF01F16 +:103FF00000080E9CF01F0007CE1B0000800140A4AB +:10400000000074988000920080013F58800192DC8B +:10401000800091E8D40148583019701CF1690009FA +:10402000700A5D1AD8020000000074A8EBCD40CCE5 +:10403000206D49A6FAC7FFF46C2E8F2EECE200002B +:10404000EEE3000016961093FACEFFF0580CC22053 +:104050007C08FC1C8000F1EC100BF4081509BBB8BF +:10406000F1E611C812481648301C9D08F01F000CDC +:104070000E9C30CA1A9BF01F000BFB38000AA68862 +:10408000FB39000B300CA699F01F00052FADE3CDD6 +:1040900080CC7C0BCE3B00008003B774800075B4ED +:1040A00080007534EBCD4080201D4987EF38000833 +:1040B000EDB80000C071EF3900093008F0091800B0 +:1040C000C0402FFDE3CD808030091A98129B129CCE +:1040D000305AF01F000F3FF91B88F2081800CF205C +:1040E0001B98EDB80001CEE13008301C109B302940 +:1040F000E06A00F0F01F000630186E1CEF6800093F +:104100006E095D19CDFB0000000074A88001402CF1 +:10411000EBCD40C0201D301AF40C1800C1B0C08394 +:104120003028F00C1800C2602FFDE3CFC0C01A97F2 +:10413000300630091A98E06A00F1129B301CF01F1B +:1041400000161B98EC081800CF51300C2FFDE3CD62 +:1041500080C018961A9730191A98E06A00F1300B4F +:10416000129CF01F000D1B98EC081800CF51300C6A +:10417000CEEB48A8F1390008F9D9C001F7FA1E00C2 +:10418000F9BC0100F9B8005AF7F80E002FFDE3CD95 +:1041900080C000008001402C000074A8EBCD406876 +:1041A00048F516961893AA4B301CF01F000E0A9C77 +:1041B000310A300BF01F000C069BF5D6C010300CF6 +:1041C000F01F0009304A300B488CF01F0007300CFC +:1041D000F01F00040C9CE3CD80680000000002107A +:1041E000800075B4800075348003B780EBCD40400B +:1041F00020ED30083009FAE90018FAE90000FAE980 +:104200000008FAE9001049BBFAC6FFD4762A8D2AC5 +:10421000F6E80000301CECE90000F01F0017320A3D +:10422000300B1A9CF01F00150C9C30CAFACBFFE033 +:10423000F01F0012300CF01F00103019FB38002A5C +:10424000F2081800C0503FFC2F2DE3CD804048C835 +:10425000F1390008F9D9C001CF8030083039304A2F +:10426000109B301CF01F00072F2DE3CF8040000073 +:104270008003B784800075B480007534000074A892 +:104280008001402CD42130094A881695F169000933 +:104290001896320BF01F00268C085CC82FE8F7D860 +:1042A000B010AA0BEFDCB010F6C90007E06805F902 +:1042B000F0091900E08B00300D890D98F208180004 +:1042C000C220F6071900C182E0640200F9D7C010CD +:1042D0005C7B181BEC0C000CE04B0200E80B17B0E9 +:1042E0005C7BF01F00138A0B0E0CEFDCB010EE0BA2 +:1042F0001900FE9BFFED48F83009118AF20A1800F8 +:10430000C0D1D8220DA8F2081800CDC10DB8F2080E +:104310001800CD813008AA08D822F5DBC010486CFF +:104320000C9BF01F0006D822000074A88001419C5D +:10433000000074A48003B76C8001447CD4314A38F7 +:1043400018921695118A3009F20A1800C3615805AF +:10435000C33049F83004F0C0FFF4E0610200C22825 +:10436000E06602000C970C93301CA006F01F0019A9 +:10437000300B497C314AF01F0018E404000C0E9AFF +:10438000300BF01F0015304A300B494CF01F001263 +:10439000300CF01F0010EA0601080604EBD8B0103C +:1043A000C0B0E2051900FE9BFFDDEDD5B010EFD6E1 +:1043B000C0100E93CDABD832F5DBC010189B488CE3 +:1043C000F01F0008CC5B0000000074A4000001FC9A +:1043D000800075B4800075348003B7808003B770A7 +:1043E0008001447CD401201D3009301C1A98E06AF9 +:1043F00000F5129BF01F0004314CF01F00042FFD4C +:10440000D80200008001402C800075D2D401F01F3A +:104410000007F01F0007C03030CCD802F01F0003A7 +:10442000F01F0003CFA1DA0A800143E4800141ECD0 +:10443000D401314CF01F0006F01F0006C03030CC14 +:10444000D802301CF01F0004DA0A0000800075D288 +:10445000800141EC80007618D4014878910C911BC2 +:10446000F0CCFFF8F01F0005F9BC010CF9BC00010D +:10447000D8020000000074A8800076385EFCD703E4 +:10448000EBCD40F849C56A096A181039C2F08B0CA7 +:10449000EAC7FFF0EAC6FFF4EEC30010EAC4FF70FB +:1044A0000F89EDB90000C091EDB90001C0616C0940 +:1044B0006A081039E08800082F072F060837CF1147 +:1044C000E3CD80F86E19300B169C5D190F883FDA2A +:1044D000F1EA0009EDB80002C0716609EEF8FFF8D4 +:1044E00012088D08CEABAE89CE8B5809CD118B1C2E +:1044F0008B0CCCFB000074B8EBCD408048CE1897F5 +:10450000300AFCCBFFF0F408150417892F88FC084B +:10451000000CEDB90000C0512FFA2F0B588ACF4183 +:104520003018F96800088F0AE3CF9080000074B853 +:104530002FFC4849A56C18091388A1D8B2885EFCE5 +:10454000000074B82FFC4848A56C30091808B089E1 +:104550005EFC0000000074B8EBCD40E0189E14979C +:104560001295587BE08B002C496AF6C8FFFFA568BE +:10457000F408000C1989EDB90001C1F0F608150422 +:104580001296F4080008A1B6F60915012FF9F409EE +:10459000093E740AB8869157FC0A000A913A5805F8 +:1045A000F9BC0001F9B90104EDD9E138F9F81E00B0 +:1045B000F9BC0101E3CD80E0E3CF80E0E3CFC0E0D0 +:1045C000000074B848387019700C121C5EFC0000B2 +:1045D000000074B85EFC300899085EFC1899780CED +:1045E000580CF9B80001F3F80A005EFC300899088D +:1045F0005EFC300899085EFC5EFC5EFC5EFC5EFCC6 +:10460000D401580BC110F80B000B300A487E7C090E +:10461000F40900092FDAF208141FB98810091019DB +:1046200018C9163CCF51D802000074B85EFD5EFF79 +:104630005EFF5EFF5EFF3FDC5EFC78082FF89908A6 +:104640005EFCD401780820189908C020D80A5D1BA8 +:10465000DA0A301899085EFCD401F01F0002D80273 +:1046600080016D6CEBCD406048784889F5DBC01067 +:104670001895189B7006720C5D160A9CF01F0004BA +:10468000E3CF906000007540000074B4800091E8B2 +:10469000D401E06A0088300B485CF01F0006F01F70 +:1046A00000064868300C9118910CD802000074B8CC +:1046B000800091D0800146C000008B545EFCD7037F +:1046C000D401F01F0011F01F0011301B4909169C86 +:1046D000490AF01F00114919491A301B303CF01FDC +:1046E000000EF01F0010300A301BE06C00F0F01FCD +:1046F000000EF01F000E300A302C149BF01F000C2F +:10470000D80A0000800148C0800147888003B79024 +:10471000800146BC800148548003B794800157A4AF +:104720008001499C800147E0800149F480014730C5 +:104730004828F00C092B5EFC00007548EBCD40E0EA +:104740004905189716966A085808C0205D1848E869 +:10475000F007032C580CC061C088F0061800C09008 +:104760002F8C19885808CFA16A085808C080C00843 +:1047700078193028F0091800FE9BFFF8E3CD80E09F +:1047800000007544000075485EFCD703EBCD40FC8B +:104790004935189630120A94EAC3FFF46A0858089B +:1047A000C0D068385808C19030185806CF805816C5 +:1047B000C0305808CF40E3CD80FC48976E28701970 +:1047C000703C700B5D196E2870296E188F29103996 +:1047D000EFF20A003008CEAB0697CF1B000084B47E +:1047E000EBCD40C018961497580BC24049789009F9 +:1047F000F6091900E088001BF60B00184949F20879 +:10480000002C781A74085808C171741E7428103E60 +:10481000C1507C283009951895099D369D07FD6B80 +:10482000001078089D18E3CD80C0307B305CF01F0D +:104830000009E3CD80C0741ECEDB306B305CF01F0E +:104840000005E3CD80C00000000002200000755C80 +:104850008001473CEBCD408049281497129E581B9D +:104860005F8A9009F80919005FB81468C130F80C24 +:10487000001AF60B0019F4CCFFFF48BB48B8F60A43 +:10488000002AF0090029952EF60C09299507E3CD99 +:104890008080302B305CF01F0006E3CD808000006C +:1048A000000002200000755C000084B48001473CD9 +:1048B000D401307B305CF01F0002D8028001473CFD +:1048C000EBCD404030084AB9B2884ABA940858083B +:1048D000C4D04AA95C784AABF00800184A9EA36885 +:1048E000300C2F88F6CAFFF4F20800082F89930CC9 +:1048F000F34AFFFCF34EFFF82F491039CF91F6CE63 +:10490000FFE84A1A49EB301C970C972A971A14981B +:10491000F4C9FED42EC8F148FFF41238CFC1F54ACD +:1049200001342F4BF4CAFEC01C3BCEF1E06A00807C +:10493000300B496CF01F00164948F0C9FF902F0852 +:10494000F148FFFC491A1238CFB130064918F54634 +:10495000007C910A9116310A0C9B48FCF01F000C58 +:1049600048E80C9C9106E3CD8040485BCC9B00005E +:1049700000007598000002200000755C000084B4FF +:10498000800148B0000082340000759C800091D006 +:1049900000007630000076200000761C4848485918 +:1049A000485A91099119913A912A5EFC000002241B +:1049B000800149D4800149EC48484859485A911926 +:1049C0009109913A912A5EFC00000224800149D4A9 +:1049D000800149EC48494858311AEA1A4000143C11 +:1049E0005E085E19800149D480014A0C481C5EFCB7 +:1049F000800149ECD4013019300A303BFC1C4000E6 +:104A0000F01F0002D8020000800186C8EBCD408074 +:104A10004B373099EA194000123CC310E088001F60 +:104A200030B9EA194000123CC2A0C4233139EA1956 +:104A30004000123CC500E069078AEA198000123C78 +:104A4000C241761CF01F0027300A4A77149B314C74 +:104A5000F01F00260E9CE3CD80803019EA1940003B +:104A6000123CC320E08800153079EA194000123C5E +:104A7000C0603089EA194000123CC0713019300A18 +:104A8000303BF01F001B49B70E9CE3CD8080FC1922 +:104A90004000123CCFA130194978300AF149004456 +:104AA000304C149BF01F00110E9CE3CD8080301918 +:104AB000300A303B30ACEA1C4000F01F000D48D7F4 +:104AC0000E9CE3CD8080302B300CF01F000C0E9C30 +:104AD000E3CD808048470E9CE3CD808080014A0C66 +:104AE0008001DA2C800149D480014658800186C8B3 +:104AF000800152F0000087F480018390D401201DD2 +:104B00001A9CF01F0008C07040085818E088000682 +:104B1000F01F00052FFDD802F01F00042FFDD80262 +:104B200080015F4480015EDC80015EB4EBCD40F823 +:104B3000201DFEF805EA189716951496103AC3A0A2 +:104B4000FEF805E0103AC610FEF805DC103AC06029 +:104B50000C970E9C2FFDE3CD80F8E068018CEA18DD +:104B60008000103CE08000F7E068078AEA188000C7 +:104B7000103CE08000ADE0680186EA188000103C3F +:104B8000CE8176170E9CF01F0169F01F0169C0915C +:104B9000FEF805A0EEEA0000F0EB00006E29912976 +:104BA0000C97FEFA0592300BFEFC0590F01F016495 +:104BB000CD1BF01F015F1894C4D1E0680184EA188E +:104BC00080001037E0800185E08B00D2E0680107AB +:104BD000EA1880001037E08001A0E0680183EA183D +:104BE00080001037CB616A170E9CF01F0156E080E1 +:104BF0000230FEF905523048F34800440E9B334C16 +:104C00000C97F01F0152CA6BFEF4053CE0680112DC +:104C1000EA188000E8F300F8103CC540E08B006320 +:104C2000E0680107EA188000103CE08000F7E068C7 +:104C3000010DEA188000103CE080010DE0680105DC +:104C4000EA188000103CC851761C1497F01F0140F0 +:104C5000C81BFEF304F2E0680188EA188000E6F45D +:104C600000F81037E08001B0E08B00ABE068018312 +:104C7000EA1880001037E080018BE0680184EA18B0 +:104C800080001037E080016EE0680107EA188000BC +:104C90001037FE91FF5F6A18303CF13B000BF01FAC +:104CA000012D3019300A303B30CCEA1C4000F01F97 +:104CB000012A300AFEF70470149B301CF01F0127F4 +:104CC000C49B761C1497F01F0126C44B6A1CF01F6E +:104CD0000125300AFEF70490149B314CF01F011F90 +:104CE000C39BE068018AEA188000103CE08000CB9A +:104CF000E068078AEA188000103CCE90E068011551 +:104D0000EA188000103CFE91FF2576150A9CF01FE2 +:104D100001170BC93048F0091800E08001BBE08B97 +:104D2000019B3008F0091800E08001BF6738301996 +:104D300011EAF20A1800E08001DD0A9CF01F010C64 +:104D4000FE90FF08300A0C97305C149BF01F0103A3 +:104D5000C01B76170E9CF01F0107F01F00F5C4F171 +:104D60000E9B33DC0C97F01F00F9CF4AE068018AF4 +:104D7000EA1880001037E08000BDE068078AEA1872 +:104D800080001037E0800099E0680188EA18800010 +:104D90001037FE91FEDF6A170E9CF01F00F7C0A0CF +:104DA000F01F00F63069FEF8039EFEF60376F14927 +:104DB00000440E9B336C0C97F01F00E4CCBAE06803 +:104DC000018EEA1880001037E08000B7E068078A9B +:104DD000EA1880001037FE90FF7BE068018AEA182D +:104DE00080001037FE91FEB66A160C9CF01F00E49E +:104DF0001897E0800114FEF7032ACACA3099FEF81A +:104E000003460C97F1490044FEFA032C300BFEFCDC +:104E10000372F01F00CBC9EA76150A9CF01F00DA76 +:104E2000302B169CF01F00D9FEF702FCF01F00C0CB +:104E30001896E08100DD0A9B337CF01F00C40C9AB9 +:104E40003019303B30ECEA1C4000F01F00C3FE9FDD +:104E5000FE8276160C9CF01F00CE302B304CFEF7F5 +:104E600002C6F01F00CAF01F00B2E08000EC30194B +:104E7000300A303B310CEA1C4000F01F00B7FE9FA7 +:104E8000FE6A76150A9CF01F00BE1897E08000BAF3 +:104E9000300A302C149BF01F00B13078E9480044F0 +:104EA000F01F00A3FE91FE560A9B0C9733BCF01F27 +:104EB00000A7FE9FFE506A1CF01F00AA089AFEF78A +:104EC00002A6089B314CF01F00A5FE9FFE446A1706 +:104ED0000E9CF01F00B0C060FEF9026C3058F34821 +:104EE00000440E9B335C0C97F01F0098FE9FFE332E +:104EF0006A170E9CF01F00A2C0803069FEF80248BD +:104F0000FEF60220F14900440E9B33BC0C97F01FC3 +:104F1000008FFE9FFE206A1B337CF01F008C089AD6 +:104F2000FEF702043019303B30ECEA1C4000F01F61 +:104F3000008AFE9FFE106938301911EAF20A180043 +:104F4000FE90FE086A1CF01F0094FE91FE03189A62 +:104F5000189BFEF70246301CF01F0080FE9FFDFBF1 +:104F60006A150A9CF01F008B1897E08000874F2A73 +:104F7000300BFEFC022AF01F00721897E08000AE92 +:104F800030580C97E7480044FE9FFDE56A150A9CDF +:104F9000F01F006C1897E08000956938301911EA0D +:104FA000F20A1800FE91FDD64E3A300B4FDCF01F8E +:104FB00000641897E08000A930480C97E748004447 +:104FC000FE9FFDC96A160C9CF01F006B1897C2600B +:104FD000F01F006A30684D37E7480044FE9FFDBB74 +:104FE000EACBFFFC301A30DCF01F005C3019300ACD +:104FF000303B30CCEA1C4000F01F0057FE9FFDAB59 +:10500000F01F004BFE90FF4E0E9A3019303B30CC13 +:10501000EA1C4000F01F0050C44B303B30CCEA1C6F +:10502000400030190E9AF01F004C0DEB304CF01F71 +:1050300000490E9A0E9B301C4BB7F01F0048FE9F94 +:10504000FD8A0C9B33ACF01F0041FE9FFD844D3662 +:10505000FE9FFDD63068F0091800FE98FE693828DA +:10506000F0091800FE91FD76300A0C97325C149B13 +:10507000F01F003AFE9FFD6F189A303B30CCEA1CBF +:1050800040003019F01F0034EB3B000D303CCD0BDD +:105090003008FACBFFFC0C9716F8301A30ECF01FF2 +:1050A000002FFE9FFD580A9CF01F003FFE90FD520E +:1050B000300A0C97306C149BF01F0028FE9FFD4BAC +:1050C0000BCB302CF01F00230E9A0E9B301C4B375D +:1050D000F01F0022FE9FFD3F189A303B30CCEA1CA7 +:1050E00040003019F01F001CEB3B000D301CCA0BB8 +:1050F00048D7F01F000FFE91FF750A9B338CF01FFD +:105100000013FE9FFD28189A303B30CCEA1C40006B +:105110003019F01F00110BCB301CC8AB800152F0CE +:10512000800151A8800156388001D9AC800185E406 +:105130000000763880018E9C8001E03C8001EF20E9 +:105140008001E88C000087F480016D6C8001E2D45E +:1051500080018390800186C8800146588001E00864 +:105160008001DA2C800149D48001E2FC80016D4A83 +:105170008001D9C88001E4D080014AFC8001E4307C +:105180008001E0D48001D9FC800183A08001D9E8AE +:105190008001E81C8001E3DC80014A0C8001E7B853 +:1051A0008001E58880016D48EBCD40C04C96189792 +:1051B0003138EA184000103CE0800087E088002485 +:1051C000E068010DEA188000103CC150E088004002 +:1051D000E0680115EA188000103CC0D0E068018A40 +:1051E000EA188000103CC070E0680112EA188000E4 +:1051F000103CC3910E9C4B7AF01F003718960C9C04 +:10520000E3CD80C03018EA184000103CC510E0889B +:10521000002E30D8EA184000103CC1003108EA18CE +:105220004000103CC3F030C8EA184000103CC1B147 +:10523000301C302BF01F00290E9C3019300A303BF7 +:10524000F01F00274A760C9CE3CD80C0E068010582 +:10525000EA188000103CCCF0E0680107EA188000F2 +:10526000103CCC900C9CE3CD80C0E04C008ACC304C +:10527000FC184000103CCF71307949B8300AF14930 +:105280000044149B302CF01F0019300A30FC149B92 +:10529000F01F0016302B300CF01F00100C9CE3CDDB +:1052A00080C0303C302BF01F000D0E9CCC7B48E9B9 +:1052B0007298ABC8300A9398149B303CF01F000BD7 +:1052C0000C9CE3CD80C048A60C9CE3CD80C00000C0 +:1052D000800151A880014B2C800183A0800186C8E9 +:1052E00080015638000087F480014658800149D477 +:1052F000D421FACD00E4FEF602E21898FEF502E0B1 +:10530000ECF700F83109EA194000123CE08000D5C2 +:10531000E08B003630A9EA194000123CE08000C260 +:10532000E088005330C9EA194000123CE08000A830 +:10533000C6A330D9EA194000123CE080011930F9C7 +:10534000EA194000123CC3D1FEFA0298300BFEFC71 +:105350000296F01F00A61896C341189BFEFA02841D +:10536000FEFC028CF01F00A1304C301BF01F00A18E +:105370000C9A0C9B301CF01F00A0C238E06901841D +:10538000EA198000123CE0880011E0690188EA19FE +:105390008000123CC100E08B00A5E0690186EA199B +:1053A0008000123CC0E1C078E0690183EA19800006 +:1053B000123CC363109CFEFA0226F01F0090189561 +:1053C0000A9C2C7DD8223079EA194000123CC7C0D3 +:1053D000E08800973089EA194000123CE08000CF55 +:1053E0003099EA194000123CCEC14FEA300BFEFC66 +:1053F000020EF01F007E1894E08000CF3048ED4888 +:105400000044CDFB4F7A300B4FECF01F0078CD916C +:10541000189A189B4FC5301CF01F0077CD2BE06900 +:105420000107EA198000123CCC60E0690115EA1915 +:105430008000123CC1203139EA194000123CCC11E5 +:10544000300A301C149BF01F006C300A304C149B47 +:105450004EE5F01F0069CB5B6F38301911EAF20A94 +:105460001800C72076160C9CF01F00690C9CF01FDA +:1054700000694E98580CF0051710CA3B303B3019A4 +:10548000300AF01F0066302B303CF01F005A300A03 +:10549000301C149BF01F00584E150A9C2C7DD822FE +:1054A0004D0A300B4DFCF01F00511897C3B0305817 +:1054B000ED480044C86B303B3019300AF01F0057EC +:1054C000302B304CCE3B6C9BE21B0040C2414C5A0F +:1054D0004D5CF01F0046C9D03028ED480044C71B82 +:1054E000E069018AEA198000123CFE90FF65E069DC +:1054F000018EEA198000123CFE91FF64C5CBFC19B5 +:105500004000123CFE91FF5E300A149B149CF01F79 +:10551000003AC57B300A4BC5149B301CF01F003687 +:10552000C50B30481A9BBAE8336CF01F00400E9A46 +:105530003019303B30ECEA1C4000F01F00384B893A +:105540004BB89119C3EB76170E9CF01F00310FC9B1 +:105550003068F0091800FE9BFF354B15F01F003531 +:10556000C2A10E9B338CF01F0031C2BB4AC530195B +:10557000300A303BF01F0029C24B49AA300B4AAC1D +:10558000F01F001ACAA1304849F5BAC81A9B334C1B +:10559000F01F0026C16B306AEECBFFE2FACCFFFCB5 +:1055A000F01F002530481A9BBA68335CF01F001FBB +:1055B000089ACBFB3019300A303B30CCEA1C400053 +:1055C000F01F00160FCB305CF01F000A300A301CB1 +:1055D000149BF01F0009CF5A000087F4800152F09D +:1055E00080018E9C8001E7548001EF208001E03C27 +:1055F000800183908001465880014B2C8001E58812 +:105600008001DA5480014A0C800149D48001E2FC17 +:1056100080016D48800151A8800186C880015638FC +:105620008001E7B88001EA8C80016D6C00000224E3 +:10563000800185E48002E736EBCD40804C9731084D +:10564000EA184000103CC6F0E088001DE068018CBC +:10565000EA188000103CC3B0E088002EE068019397 +:10566000EA188000103CC440E0680194EA18800009 +:10567000103CC2714BC7761CF01F003C0E9CE3CD62 +:10568000808030C8EA184000103CC400E088001D4B +:1056900030D8EA184000103CC21030E8EA18400048 +:1056A000103CC0F14B2A300B4B2CF01F00330E9CEA +:1056B000E3CD8080E0680186EA188000103CC0706D +:1056C0000E9CE3CD8080E04C008ACFB14A5AF01F97 +:1056D000002B18970E9CE3CD8080F01F00294A4ACA +:1056E000300B4A8CF01F00240E9CE3CD8080761C8A +:1056F000F01F0025F01F0025C0514A5B33CCF01F7E +:10570000002549970E9CE3CD80804A39731858983C +:10571000CD803098496AF3480044300B49FCF01FB3 +:105720000016CCFB49C973185888CCB03088F348B0 +:105730000044F2F900F87338301911EAF20A18003F +:10574000C0A03019300A303B30DCEA1C4000F01FAA +:105750000014CB7B486A300B492CF01F0007CB1B91 +:105760008001563880014A0C8001DA4680018E9C07 +:105770008001E03C8001EF2080014B2C80015E34F1 +:105780008001DA448001DA48800185E4000076383F +:1057900080016D6C000087F48001E0D4800186C830 +:1057A0008001E094EBCD40F84A37189416956E18B6 +:1057B0006E090E930E96C118300B301CEA1C400087 +:1057C0005D19300B6C39FC1C40005D196C388D285C +:1057D0006E186E091238C2001039C190300B301C9F +:1057E000EA1C40005D19300B6E19FC1C40005D196D +:1057F0006E188F086E296E381039CDF10A9B089CFF +:105800005D19873C6629123CCF71CE3B0A9B089CF0 +:105810005D198F1CCF0B5805C0706A085818C060FE +:105820000A9CF01F0006E3CD80F8EACCFFFCF01FD5 +:105830000004CF7B00000224800091E88001D3A8FF +:105840004878F14C00F8580CF9F81004F9B9010146 +:10585000F1D9E108F9F81A045EFC0000000087F4B1 +:10586000EBCD40C04948FAC6FFF4F0F700F4580702 +:10587000C051C1E8F8C70008C1B0EECAFFDC740827 +:10588000204D502815C9FB69000C15D8FB68000D88 +:105890006C0850080DC9BAC90DD8BAD8F01F000756 +:1058A0002FCD580CC0516E2C580CCE5118970E9C11 +:1058B000E3CD80C0000087F480018898D40149D9E5 +:1058C000F2F800F41838C0B078285808C2B0784808 +:1058D000201899482F8CF01F0018D802580CF9F89E +:1058E0001004F9BA01FFF1DAE108F9F81A043008F6 +:1058F000F34800F448FA78285808C180F0C9000835 +:10590000F54900F4CE8072482FF89348F4F900F47A +:105910005809CE10724820182F8C9348F01F0006AB +:10592000D80278385808CD41D802F54800F4CD3B6C +:10593000000087F48001F2A0D4014989F2F800F058 +:105940001838C0A078085808C240784820189948EC +:10595000F01F0013D802580CF9F81004F9BA01FF2F +:10596000F1DAE108F9F81A043008F34800F0780A8F +:10597000F34A00F0580ACED074482FF89548487979 +:10598000F2F900F05809CE50724820189348CE1B07 +:1059900078185808CDB1CDFB000087F48001F2A043 +:1059A000EBCD40801897580AC2C07858F608010815 +:1059B0001438E08800274948F0FB00F8580BC190E4 +:1059C000F8CAFFDC15D8204DFB68000D740950297A +:1059D00015C8F6CAFFDCFB68000C7408500815C92E +:1059E000BAC915D8BAD8F01F00092FCD580CC091EC +:1059F0000E9CF01F00070E9CF01F0006E3CF908066 +:105A0000E3CF8080000087F48001889880015938B6 +:105A1000800158BCD4214A141895E8F700F05807C3 +:105A2000C27079383006704AC02810976F387049B4 +:105A30001439E08A00086E080E965808CF710E9649 +:105A400010970A37C0D06A085808C0B00A9CF01FE7 +:105A500000145806C1300A9B0C9CF01F0012D8227B +:105A60006A185808CF416A482FF88B48CF3BE94C59 +:105A700000F078482FF89948D8220A9B0E9CF01F16 +:105A800000090E9CE94500F0F01F00050E9B0A9CE2 +:105A9000F01F0004D8220000000087F48001F2A06B +:105AA0008001F28CEBCD40C04A48FAC7FFF4F0F613 +:105AB00000F05806C051C3D86C065806C3A06D3814 +:105AC000707C2F4CF8E80000212DFAE90024F8EA58 +:105AD0000008FAEB002CF8E80010FAE90034F8EAC4 +:105AE0000018FAEB003CF9380020FB680044F93953 +:105AF0000021FB690045EEE80000FAE90000EEEA4B +:105B00000008FAEB0008EEE80010FAE90010EEEAEF +:105B10000018FAEB0018EF380020FB680020EF397E +:105B20000021FB690021F01F00062EED580CCC501F +:105B30000C9CE3CD80C00000000087F48001891038 +:105B4000EBCD40E0205D7608502817C9FB69000CBA +:105B500017D81697FB68000DF8CBFFE2306A18964D +:105B60001A9CF01F0034F01F00342FCD580CC05188 +:105B7000300C2FFDE3CD80E06E7C2F4CF8E8000068 +:105B8000212DFAE90024F8EA0008FAEB002CF8E8E5 +:105B90000010FAE90034F8EA0018FAEB003CF93892 +:105BA0000020FB680044F9390021FB6900456D388D +:105BB000707C2F4CF8E80000FAE90000F8EA0008D1 +:105BC000FAEB0008F8E80010FAE90010F8EA00180B +:105BD000FAEB0018F9380020FB680020F9390021A1 +:105BE000FB690021F01F00152EED580CCC20320B64 +:105BF000300CF01F00131895CBC0189A0E99491B52 +:105C0000F01F00110BF93008F0091800EDF800132F +:105C1000F1F90807EBF90E07FACCFFFC6D3818D83C +:105C20001A9CED45004CF01F0009301CCA3B0000D7 +:105C30008002E73680018898800189108001D8DCD5 +:105C40008001D3EC8001AD408001D3A8EBCD40C0F2 +:105C500049C649D86C09700A1439C05530070E9CE2 +:105C6000E3CD80C0350CF01F00191897CF906C0859 +:105C70002FF8350A8D08300BF01F0015320B300C51 +:105C8000F01F0014EF4C004C1898C16030084929EF +:105C90008F680E9CF30A017C8F28EF5A001CEF6876 +:105CA000002A8FF88F488F58EF4800408F188F08D0 +:105CB0008F38E3CD80C00E9C1097F01F0008CD0BED +:105CC000000076440000025880009200800091D0CD +:105CD0008001D8DC00000260800091E8EBCD4080BC +:105CE000189778485808E08A0004E3CD8080793816 +:105CF0005808C0402B4CF01F000648697208201855 +:105D00000E9C9308F01F0004E3CD80808001D3A88F +:105D100000007644800091E8D4014899F2FC00F834 +:105D2000580CC0A07848201899483008F34800F86B +:105D3000F01F0004D802F34C00F8D802000087F4EA +:105D400080015CDCEBCD40F84B131894E6F700F8CB +:105D50005807C060189B0E9CF01F002EC1D1E6F7BB +:105D600000F05807C4203006C1285806C0706F38AC +:105D70006D39704A7248103AC064E6F800F80E387F +:105D8000EE0617106E070E955807C0900E9C089BE4 +:105D9000F01F0020CEB00E9CE3CD80F8F01F001E57 +:105DA00058065F18580C5F0918971069EA0918001F +:105DB000C201089B306AEECCFFDCF01F0018089B84 +:105DC000306AEECCFFE2F01F00156F3A0899149C80 +:105DD000493BF01F001430080E9C8F088F18F01FED +:105DE00000120E9CE3CD80F8F01F000B1897CE2B0D +:105DF0000C9CF01F000E0C9CF01F000D0C9CF01F63 +:105E0000000DF01F00051897CD51CC6B000087F4F2 +:105E100080015B4080015C4C800091DC8001D3EC10 +:105E20008001AD4080015A1480015938800158BC6E +:105E300080015CDCEBCD40E04905EAF700F458074F +:105E4000C0D1C158F0C600080E9CF01F000D0E9C7A +:105E5000F01F000C5806C0B00C976E285808CF31C0 +:105E60000E9CF01F00070E9CF01F00063008EB4848 +:105E700000F4E3CD80E00000000087F4800158BC0E +:105E800080015CDC580CC04078185B98C110489ABF +:105E900074991298EDB90001F9BC0101F9BB001029 +:105EA000F3DBE038F5F80A09F9BC00015EFC5EFDA1 +:105EB000000087F4489A7498109CF0091604E21CBC +:105EC0000002F9BB0110F1DBE138F5F81A09F9B865 +:105ED0000101F3D8E12C5EFC000087F4489A749825 +:105EE000109CF0091604E21C0002F9BB01EFF1DB83 +:105EF000E128F5F81A09F9B80101F3D8E12C5EFCA4 +:105F0000000087F448887099129CA589E21C000261 +:105F1000F9BA0101F3DAE148F9B90101F1D9E12C4B +:105F20005EFC0000000087F418994868709CE21C31 +:105F30000002F1F8103FF3F81A00F9BC01015EFC11 +:105F4000000087F418994868709CE21C0002F1F880 +:105F50001041F3F81A00F9BC01015EFC000087F45F +:105F600018984859729CE21C0002F3F81A41F9BCD7 +:105F700001015EFC000087F44839300C7298A7C814 +:105F800093985EFC000087F44839300C7298A5D8CD +:105F900093985EFC000087F4D401E06A0100300BA6 +:105FA000482CF01F0003DA0A00007648800091D0E8 +:105FB000EBCD40C04A0A18967498109CE21C00026F +:105FC000C1D0F4F700F85807C1801099E2190020F9 +:105FD000C270A5C8A7A8F4FB00BC95983009497AFF +:105FE000E06CEA60F01F00163008F0061800C100EF +:105FF0003018F0061800C040301CE3CD80C0311CC2 +:10600000EECBFFE2306AF01F000FE3CF90C0312CDF +:10601000EECBFFE2306AF01F000BE3CF90C0A5B8D3 +:10602000F4FB00B89598E06CEA60487AF01F000431 +:10603000CDCB0000000087F480015F7880014558D7 +:106040008001465880015F88D401F01F0002D80209 +:1060500080018040D40148687098E2180002C03185 +:10606000109CD802F01F0003D8020000000087F443 +:10607000800183FCD40148687098E2180002C031A6 +:10608000109CD802F01F0003D8020000000087F423 +:10609000800183D8D431FACD0188E06A0168300BE1 +:1060A0001A9CF01F002CFAC6FE541A901A9CF01F7E +:1060B000002A581CC03029EDD832FAC5FFF8401824 +:1060C000F0081016EA0800081035C4120A97FAC43E +:1060D000FE98ECC1FFF8C09840182EA7F0081016E3 +:1060E000EA0800081037C3326C08204D50280DC94B +:1060F000FB69000C0DD80E9BFB68000D306A1A9CE2 +:10610000F01F0016F01F00162FCD580CCE60EECBFE +:10611000FFFA310AFACCFE88F01F0010E2E8000016 +:10612000310AE8E90000089BE2E20008FACCFE88A8 +:10613000E8E30008F01F000BCD01189B316A0E9CAC +:10614000F01F0004009CF01F0008CB6B29EDD83A2B +:10615000800091D0800160748002E73680018898C9 +:106160008000917C80016054D431FACD018CE06ACA +:106170000168300BFACCFFFCF01F0050FAC5FE504E +:10618000FACCFFFCF01F004E581CC03029DDD8327D +:10619000402858F8E088007FF0081016FAC1FFF494 +:1061A000E20800081031E0820087E06801685018BA +:1061B000EACBFFF8FAC6FFF002973004FAC0FE946B +:1061C000500BC0C85804C36040282EA7F008101612 +:1061D0002EA6E20800081037C4926A08204D502805 +:1061E0000BC9FB69000C0BD80E9BFB68000D306AD5 +:1061F0001A9CF01F0034F01F00342FCD580CCE3005 +:10620000ECCBFFFE310AFACCFE84F01F002E400BCF +:10621000F6E80000310AE0E90000FACCFE84F6E27C +:106220000008009BE0E30008F01F0028CB005804A2 +:10623000CCC10F89E8091800CC810F98F20818002A +:10624000CC410FA9F0091800CC010FB8F2081800D2 +:10625000CBC10D89F0091800CB810FD8F2081800C6 +:10626000F9B40100EE041700CB0B5804C2400A9B9E +:10627000306A089CF01F0013EACBFFF8310AE8CC23 +:10628000FFFAF01F0010FACCFFFCF01F001129DD0F +:10629000D832F00A1110FAC1FFF4F40A1016E2081D +:1062A000000C300BF01F00053108E0690168502830 +:1062B0005019C7FB3FDCC6BB800091D080016074E1 +:1062C0008002E736800188988000917C80016054CC +:1062D000EBCD40C0208DBACBBA8A189B4968709C20 +:1062E000E21C0002C06118970E9C2F8DE3CD80C088 +:1062F0003008FAC6FFF8504850281A99FACAFFFC2D +:106300000C9CF01F000EC111189740285808C0407F +:106310000C9CF01F000B404C580CCE70F01F000975 +:106320000E9C2F8DE3CD80C00C9CF01F0007581CE5 +:106330005F07CECB000087F48001E1308001D3A855 +:10634000800091E880018E9CEBCD40C0201D491754 +:1063500018966E9CE21C0002C0412FFDE3CD80C068 +:106360001A9CF01F000DEF4600FCEEF801105808D3 +:10637000C051301C2FFDE3CD80C0EECCFEECEF3AD7 +:10638000011BEF3B011AF01F0005301CCF4B000032 +:10639000000087F4800177A4800162D0EBCD4080BB +:1063A000201DBA8C48C76E98EDB80001C0402FFD83 +:1063B000E3CF808030181A99300A308B487CF01F68 +:1063C0000008581CCF511B88EF4801202FFDE3CD5A +:1063D00080800000000087F48003B7A08001776C04 +:1063E000D401201D48B91898729CE21C0002C0E03C +:1063F000300AF368004C308BFAC9FFFC486C12F885 +:106400003018F01F0006581C5F0C2FFDD80200004A +:10641000000087F48003B7A88001776CD401203D89 +:10642000BA8C496A749CE21C0002C0312FDDD8028C +:106430001B8B3038F00B1800E089001DE06832003B +:10644000EA18312EE069352EEA19312EFAE90004F6 +:10645000F4F800F8F3DBB008300A5808F1F91A0F25 +:10646000308B30181A99FACCFFFCF01F0005581C2D +:10647000CDE03FECCDCB0000000087F48001776CCD +:10648000D421206D4A0618976C98EDB80001C040E1 +:10649000300C2FADD822584C5FB8E04C00FF5F198C +:1064A0001268C0303FECCF6B300814995028169A10 +:1064B0005008189B1A951A9CF01F0014CEA01A9C25 +:1064C000F01F0013400818945808C0401A9CF01F91 +:1064D0000011402C580CC030F01F000F5814CD9103 +:1064E0006C98EDB80007C0C15837E08B000AEE0881 +:1064F000150648A9300A1009089C930ACCBB301C29 +:10650000CC9B0000000087F48001E1A480018E9CF8 +:106510008001D3A8800091E800007648EBCD40C010 +:10652000202D496718966E98E2180002C2103FF8B5 +:10653000FACAFFFEBAF8BAA8BAB8BAC8BAD8BAE85E +:10654000300BF01F000F6E98EDB80007C0E1583611 +:10655000E08B000CEC081506300A48A9301C100925 +:10656000930A2FEDE3CD80C02FEDE3CF90C0109CB8 +:106570002FEDE3CD80C00000000087F4800164802F +:1065800000007648EBCD40C0202D49F66C9CE21C03 +:106590000002C2703FF8BAF8BAA8BAB8BAC8BAD8F6 +:1065A000BAE8ECFB00F8580BC260F6CCFFE2303AD8 +:1065B000300BF01F0016FAC7FFFE301CF01F00144E +:1065C000303B0E9A300CF01F00136C99300B129870 +:1065D000ED4B0110A3D88D98EDB90007C050301CC9 +:1065E0002FEDE3CD80C0E06A010048BCF01F000B36 +:1065F000301CCF7BFAC7FFFE303A0E9CF01F000321 +:10660000CDDB0000000087F4800162D08001651CB2 +:106610008001648000007648800091D0D43120DD74 +:10662000FB690010FB68000CFAC9FFA8FEF7023CEA +:1066300018956E981696149272307201E218000244 +:1066400072147223C041300C2F3DD832E04B002031 +:10665000E08800043FFCCF9B584CE08B002158DBC6 +:106660005FBA301BFB380010F60818005F09126A89 +:10667000C030580CC1413078FACCFFD4FB680033ED +:10668000F01F007B3008303C50785058F01F0079E4 +:1066900058D6C070E08B00315856C0303FECCD5B0F +:1066A00030683019FB680033EF49011CFACCFFCD8C +:1066B000F01F0071501C1AD31AD41AD1FB38001CD9 +:1066C00004991AD80C9AFB380043FACCFFDC0A9BD9 +:1066D000F01F006A2FCD580CC1B140585808C05067 +:1066E000FACCFFECF01F0066407C580CCAD0F01FBB +:1066F0000065300CCAAB5906C6C0E0460020CCF19C +:1067000030283029FB680033EF49011CCD0BFACC4F +:10671000FFECF01F005D500C40585808C050FACCF8 +:10672000FFECF01F0057407C580CC030F01F0055A4 +:1067300040085818C8915800EFF81009F9B9010835 +:10674000F1D9E138EFF81A093009FB380010F208E6 +:106750001800C051F9D5B008F01F004C6E98EDB884 +:106760000001C0514C18F0F800FC501840185808AF +:10677000C080FB3A0010FB3B000C089CF01F00445B +:10678000306A089BEECCFEECF01F0042301AFACBC8 +:10679000FFF4EECCFEE6F01F003FEECCFEE5301A33 +:1067A000FACBFFF0F01F003B3018EF480110FB68F8 +:1067B00000326E9C4AD7EDBC0001C120EDBC000741 +:1067C000C061FB38000C50285845C1E1301CC3DBC8 +:1067D00030483039FB680033EF49011CC68B300864 +:1067E0004ADB1099109A109CF01F002CC3401ADC51 +:1067F0003018FAC9FFCA300A308B4A9CF01F0029B2 +:106800006E9C2FFDCDCBEA0915064A780C9AF0094B +:106810000007049BEF650026EF560024EECCFFFC3A +:10682000F01F001C089BEF610036306AEECCFFD8E9 +:10683000F01F00185803C110069B308AEECCFFD21F +:10684000F01F001440288FF0EF68003830188F08D0 +:10685000109CCFBA6E9CCB3B069B308AEECCFFD20D +:10686000F01F0012CF0B0000000087F4800177A416 +:106870008001EF6C80017BD88001E2148001D3A8F5 +:10688000800091E880018E9C8001641C800162D0B0 +:10689000800091DC80015E8480016AF48003B798F7 +:1068A0008001773000007648800091D0EBCD40C069 +:1068B000300749A60E98A7682FF7EC08000B76085A +:1068C0005808C0F10E985847CF714957EF3C004C1B +:1068D000F01F0014EEFC0100F01F0013E3CF90C086 +:1068E00076F8F6C9FFD2F73C00261AD8F6C8FFD8CA +:1068F0001AD91AD8F7390036F6CAFFFC1AD9F73870 +:106900000038F7390027F71B0024F01F00082FCDAF +:10691000581CCD90E3CF80C000007648000087F47B +:10692000800163E0800163488001661C7808301CA8 +:10693000F80A094C201C106C5EFCD70348787008DC +:106940005808C0901838C041C078103CC05070B88A +:106950005808CFC15EFD5EFF0000778C189A48F89A +:10696000709CE21C00025E0C70A8EDB80000C03004 +:10697000305C5EFC48AC780B583BE089000D300978 +:106980004888F00B003891189109950BF6C8FFFF65 +:1069900099085EFF3FDC5EFC000087F4000077880A +:1069A0000000776848D972A8EDB80000C1313008FE +:1069B000780A99D848ABF60A003A741999E974181C +:1069C000F8C9FFCC910C7808301CF60800389119F2 +:1069D0005EFC305C5EFC0000000087F4000077681D +:1069E000EBCD40C0189778B95809C18078C893C8D2 +:1069F0006EC891096E3C580CC050F01F000B300857 +:106A00008F3833CA6EA635AB0E9CF01F00080C9B66 +:106A10000E9CF01F0007E3CF80C078C94858911939 +:106A200078B9CE7B800091E8800091D0800183B05E +:106A30000000778CEBCD40801897580CC180789877 +:106A40005D1848F972095809C051C11872B958093E +:106A5000C0E01237CFC16E785808C0B06E3C580CF9 +:106A6000C060F01F000830088F588F38E3CF908047 +:106A70000E9C301BF01F0004E3CF90800000778C49 +:106A8000800091E8800169E0EBCD4080496972A8FF +:106A9000EDB80000C040305CE3CD8080493870091B +:106AA0001839E08A001E4928F00C00376E09580991 +:106AB000C15072DA580AF3F8000EEFF80A01F3FA3F +:106AC000000DF3F8100EF5F81A0E72E8129C910AF8 +:106AD000F01F00086E095809CED1E3CF90803FCC5B +:106AE000E3CD8080000087F400007788000077689D +:106AF00080016A34EBCD40F81897169614951294DD +:106B0000109333CCF01F000CC1403008990799B89E +:106B10009938995899889996994599649973487ABA +:106B2000301899A8741999C9930CF8C8FFD495180E +:106B3000E3CD80F8800092000000778CD401202DF6 +:106B4000500A48C972A8EDB80000C040305C2FED73 +:106B5000D80248981A99F00B032A3048FA08000B1B +:106B6000F01F0006581CF9BC0001F9BC01FECF0B58 +:106B7000000087F4000077488001F1D8EBCD40C0D9 +:106B8000201D4AC618976CA8EDB80000C441580CE7 +:106B9000C3F0789B580BC3C0780A580AC3954A695A +:106BA000F20A033850085808C061C1A870D85008CC +:106BB0005808C1601037CFB1F40815036EDA580ACF +:106BC000F3D8E009EFF8000EF3F80A01EFF8100E21 +:106BD000F5F81A0E400870DA70E9930A6E9B3F9838 +:106BE0008F18580BC0300E9C5D1B6E8B581BC0500D +:106BF000582BC150580BC0516E2A1A9CF01F000F21 +:106C00000E9C301BF01F000E2FFDE3CF90C02FFD18 +:106C1000E3CF90C0305C2FFDE3CD80C0ECF801B82D +:106C20000E38CEF130094838F14901B8CEAB00003A +:106C3000000087F40000776880016B3C800169E008 +:106C4000D40148C9169E72A8F1D8C001C031305C89 +:106C5000D8024898304A76A9F00C032C1ADAF6C804 +:106C6000FFF833CAF01F00052FFD581C5F0CD80237 +:106C7000000087F4000077488001F164D431204D92 +:106C800030084931189650285018FAC5FFF4FAC256 +:106C9000FFF802901A93FAC4FFFCC098E006032A9A +:106CA000F01F000C0E9B401CF01F000B3049049B92 +:106CB0000A9AE206032CF01F0009304818970A9937 +:106CC0001A9B089C5817CEB02FCDD83200007748B9 +:106CD0008001F1D880016B7C8001F0B4EBCD40E005 +:106CE000201D49356AA8A1A8300A49298BA8149704 +:106CF000930A14984906EC08002C2FF748FA303B09 +:106D0000F01F000F581CC0F10E985887CF5148D87B +:106D1000300991189109301B1A9CF01F000B2FFDB0 +:106D2000E3CD80E06AA8A1C88BA8CF2B000087F430 +:106D300000007788000077488001692C8001F05CB2 +:106D40000000778C8001695C5EFD5EFFEBCD4080CA +:106D5000189778785808C030788C5D180E9CF01F12 +:106D60000003E3CD80800000800091E8D4314B1017 +:106D70001895169260095809C58030047258721926 +:106D80000A38F7B400FF5809CFA10891E80C1502A2 +:106D9000F01F00291893C46060075807C2303006FE +:106DA000C0486E175807C1E06E580A38CFB10E9C24 +:106DB000F01F0022E60609276E485808C0F06E1939 +:106DC0005809EFF80002E1F80A01EFF90001EFF8C5 +:106DD0001002F3F81A026E2891092FF66E17580761 +:106DE000CE415804C1A006953006C0380836C154BB +:106DF0006A07049C6E686E8B5D18491B0E9CF01F21 +:106E000000112FF62FC56E485808CF100E9C48CBA6 +:106E1000F01F000C0836CED5069CF01F000B029C1C +:106E2000D8321891029CD83212941291CB0B0000E8 +:106E300000007794800092008001463A80016D4CFA +:106E400080014642800091E8EBCD4080324CF01F3B +:106E500000081897C080324A300BF01F00060E9CC5 +:106E6000F01F00050E9CE3CD8080000080009200A2 +:106E7000800091D080014652EBCD40FC18961695CB +:106E80001494129310924077F01F000AC100995693 +:106E900099359964998799739942487A3008991875 +:106EA00074199929930CF8C8FFFC9518E3CD80FC60 +:106EB00080016E4800007794D431FACEFFDC189739 +:106EC00016901491129310927C157C04580CC26099 +:106ED00078095809C26049A66C085808C051C09882 +:106EE00070185808C0601039CFC13018109CD832C3 +:106EF000F01F0014C13099509931996399859972A6 +:106F00009944300899186C199929930CF8C8FFFC1A +:106F10008D188F0C3018109CD8323008109CD83245 +:106F200008981AD50499069A029B009CF01F000647 +:106F30002FFD580C5F188F0CCDAB0000000077942C +:106F400080016E4880016E78EBCD40404856ECCC15 +:106F5000FFF8F01F000530088D168D08E3CD804046 +:106F600000007794800145D6EBCD40807847785A71 +:106F70006E18103AE0880004E3CF8080783B6E0CF6 +:106F8000F01F000B6E285808C0406E1B6E0C5D1879 +:106F90006E3CE04C002BC050300A149BF01F0005E3 +:106FA0000E9CF01F0005E3CF90800000800091DC74 +:106FB00080014658800091E8EBCD40C0203D30086C +:106FC00018979928990814961A9C308AF01F001176 +:106FD000FACBFFF80E9CF01F00102FED580CC101EA +:106FE0006E085808C0400E9CF01F000C6E2C580C08 +:106FF000C040F01F000B300C2FFDE3CD80C05806C1 +:10700000FBF81000EDF81A002FFDE3CF90C0000050 +:107010008002E7368001DE6C8001D3A8800091E811 +:10702000EBCD40C0189778185B98C0C0783B580BE0 +:10703000C17078465806C04078685908C050E3CF00 +:1070400090C0E3CF80C0785A590AE08800153FF815 +:107050008D28ECCCFFF4F01F000CE3CF90C0784CEF +:10706000580CCEE06E685908CEB12F4CF01F0006C8 +:10707000E3CF90C06C0CF01F00056E5830198D18CE +:107080008D29CE8B8001A25C800091DCEBCD40E0AD +:10709000201D1697E04C0081E0800088E08A0027E0 +:1070A000E04C0083C2F0C2B4760A1A9C300BF01F89 +:1070B0000064E08A004F585CC490314CF01F0061BE +:1070C0004008913C4009723A580AC7A06E0830093E +:1070D000990899399919EF380008992840083149D9 +:1070E000301A91594008911AC1D8584CC4A0E04CAC +:1070F0000080C330300C2FFDE3CD80E0E04C0085F4 +:10710000CFA16E0A300B1A9CF01F004DE08A0022BE +:10711000585CC1C0EF3900084008300A9119400896 +:10712000915A301B400CF01F0048581CCE41400CB7 +:10713000F01F0046C0B0400B76785808C070300C85 +:10714000F01F0043581C5F0CCD7B2FFDE3CF90E078 +:107150003FEC2FFDE3CD80E07645760A1A9C300B9C +:10716000F01F0037FE9AFFF6585CCF005805C49117 +:1071700040089135400993550FCA4008911ACD2B0C +:107180007626760A1A9C300BF01F002DFE9AFFE23D +:10719000585CCDC05806C1914008301A913640095C +:1071A00093564008911ACBEB760A1A9C300BF01FCD +:1071B0000024FE9AFFCF585CCC900FC9CAEB3FD891 +:1071C00093184009935ACAEBECC5FFED0A9CF01FD7 +:1071D000001D4008913C1899400A743B580BC2406E +:1071E0006E080C9A93089336EECBFFF430162F0CF2 +:1071F0009316F01F00184008915540099316C92BAB +:1072000040060A9CF01F000F8D3C4009723C580C50 +:10721000C1000A9A6E5BF01F000F400891550FC91C +:1072200040089119C7FB3FD895184009935BC7AB3D +:107230003FD893184009935CC75B000080016B3C0A +:1072400080009200800169A48001693C80016C404B +:10725000800091DCEBCD40FC4C151696189476021C +:107260006A095909E088001B4BE7C15878BA580AE7 +:10727000F9F8000CEFF80A01F9F8100CF5F81A0CFF +:10728000201978C8910A8B09F01F00376A0959093B +:10729000E08800056E0C580CCEA16C2338086C36C3 +:1072A000ECCCFFCCF0041800C260F01F003018973F +:1072B000C2F0B8C464080C9A990899A6069B2CCC15 +:1072C0008F9CF01F002B3808F0041800C2303818CB +:1072D000F0041800C2B04A3B30088FB8761A8FCA43 +:1072E0009507EEC9FFD46A0897192FF8301C8B0850 +:1072F000E3CD80FC64495809CD90ECC8FFC9E01883 +:10730000FFFCF009000CF01F00191897CD31E3CDF8 +:1073100080FC318A049BEECCFFF4F01F00156E7ADE +:107320008F2A580AC1018F8ACD7BEEC6FFF4318ABD +:10733000300B0C9CF01F000F049B0C9C308AF01F3C +:10734000000CCCAB6EA82FD8E018FFFC6E9C100C84 +:107350008F8C645BF01F0006CBFB0000000077A061 +:1073600000000234800091E880009200800091DCEF +:10737000800091D0D421207D1297FACEFFD04B29E6 +:1073800018947298EDB80001C040300C2F9DD8229F +:10739000FCE800003006BB295C7A50265046FAC54E +:1073A000FFF8FAC9FFE00A9CF01F00282FED580CE7 +:1073B000C2D05807C0B08F368F5640680E9B0C9CC9 +:1073C0008F28F01F0023581CC2E11A9CF01F0021D7 +:1073D0005BBCC29040076E4C580CC070F01F001E82 +:1073E00030088F388F4840075807C0401A9CF01F5C +:1073F000001B402C580CC030F01F00175804FBF83D +:107400001006E9F81A002F9DDA2A40085808C040F3 +:107410001A9CF01F0012402C580CCB80F01F000E5D +:107420002F9DD82A40085808C0401A9CF01F000B16 +:10743000402C580CC0313FDCCAABF01F00073FDCCA +:10744000CA6B0000000087F48001DF7480016C408B +:1074500080018E9C800091E88001D3A8EBCD40E0B4 +:10746000208D149616951897308A300BF01F001354 +:1074700059F6E08800052F8DE3CF80E00A9B0C9A37 +:107480001A9CF01F000FFAC9FFE030080C09FACC73 +:107490000001F368FFE0F8C6FFFF300B30AA0C9C38 +:1074A000F01F000832EB0ECC0C9CF01F0007CF4100 +:1074B0002F8DE3CF90E00000800091D0800091DC20 +:1074C0008000917080009164D43120AD189E109599 +:1074D00014974C781292709CE21C0002C0511896CE +:1074E0000C9C2F6DD832169AFAC6FFE41C9B0C9C9C +:1074F000F01F00400C9BFAC3FFFCFACAFFDC069C9D +:10750000F01F003D1896581CCEC15807C2F10E91CD +:107510000E90069CF01F0039401818945808C0407F +:10752000069CF01F0037403C580CC030F01F00355F +:107530005BB4C4D05807C170E06B0BB8E0CCFFF46B +:10754000F01F00315BDCC3A0582CC07060285BF8D2 +:10755000C04060188508CC5B029C301B3006F01FD1 +:10756000002BCBFB40988B08CBCB3FF8310C8B0822 +:10757000F01F002718941890C280F8C8FFF4500834 +:10758000109CF01F00248907640930088919089AA3 +:1075900031094A1B109CF01F00211891C20040982D +:1075A000189B9928300CF01F001E581CCB300C9BE8 +:1075B000029C3FD6F01F001BC94B029C301BF01FE2 +:1075C000001340988B08C8DB3FD6C8BB5807CFD004 +:1075D000029C301B3FD6F01F000DC83B400CF01F33 +:1075E0000012089C3FD6F01F0007C7BB000087F4BD +:1075F0008001745C80016FB880018E9C8001D3A8EB +:10760000800091E88001A22880016B7C80009200BC +:107610008001A28C8001702080016AF480016C409E +:10762000800169E08001A27CEBCD40E0209D49F81B +:1076300018991495709CE21C0002C06118960C9C6D +:107640002F7DE3CD80E0169AFAC6FFE8129B0C9CD2 +:10765000F01F00170C9B1A97FACAFFE01A9CF01F44 +:1076600000151896581CCEC11A9CF01F0013400834 +:1076700018965808C0401A9CF01F0010402C580C57 +:10768000C030F01F000F5BB6C0313FD6CD9B300C31 +:107690008B3C8B5C40880A9B8B28F01F000A581C8F +:1076A000CCF03FD6CCDB0000000087F48001745C96 +:1076B00080016FB880018E9C8001D3A8800091E882 +:1076C00080016C40EBCD40FC1895169414921293F7 +:1076D00010974076310CF01F0012C1D099369905F1 +:1076E00099149927189A3008310948EB109CF01F1B +:1076F000000E1896C100069B049C0C9AF01F000B0C +:107700001897581CC0500C9C301BF01F00090E9C91 +:10771000E3CD80FC30070E9CE3CD80FC800092001E +:1077200080016F6880016AF480017628800169E039 +:10773000EBCD406E202D4086129310951491169A31 +:10774000189B1A9CF01F0008069B0C99FAE2000097 +:107750000A9ABB23029CF01F00052FED2FEDE3CD0D +:10776000806E00008001745C80017374EBCD406812 +:10777000202D129310961495169A189B1A9CF01FA0 +:107780000008FAE800000C9ABB29069B0A9C300905 +:10779000F01F00042FED2FEDE3CD80688001745CB5 +:1077A00080017374EBCD40401896303CF01F00040C +:1077B0007848301C8D08E3CD804000008001EF6CDC +:1077C000EBCD406048A618952F060C9CF01F0009D1 +:1077D000303CF01F0009310AF8CBFF8C0A9CF01FE7 +:1077E00000070C9CF01F0006E3CF9060000087F4B8 +:1077F000800145F88001EF6C800091DC800145FA42 +:10780000D42149461894ECC5FFF00A9CF01F0012E1 +:10781000ECF700F85807C0C06F38707B2F4B322A46 +:10782000089CF01F000E0A9CF01F000DDA2A303C65 +:10783000F01F000CC060F9380088EE081800C06026 +:10784000ECCCFFF0F01F0006D82AF8CBFF78CE8BE7 +:10785000000087F4800145F88002E736800145FA90 +:107860008001EF6CEBCD40E049061895ECC7FFF0C6 +:107870000E9CF01F000F303CF01F000EECF600F8DD +:107880005806C0C0ECCBFFE2306A0A9CF01F000A29 +:107890000E9CF01F000AE3CF90E00E9CF01F000743 +:1078A0000C9CE3CD80E00000000087F4800145F8E7 +:1078B0008001EF6C8002E736800145FAEBCD404055 +:1078C000209DE04B0020E08B001CBABB580BC1B1DF +:1078D0003FF8BAA849162F060C9CF01F0011303C47 +:1078E000F01F0010322AFACBFFFEF8CCFF78F01F11 +:1078F000000E0C9CF01F000D2F7DE3CF90402F7DDC +:10790000E3CFC0403008169ABAA8189BFACCFFFC07 +:10791000F01F0007CE0B0000000087F4800145FC3B +:107920008001EF6C8002E736800145FE800091DC2B +:10793000EBCD40E01895303CF01F000B1897C110BC +:1079400048A62F060C9CF01F000A0A9B306AEECC5A +:10795000FF56F01F00080C9CF01F0007E3CF90E0DB +:10796000E3CD80E08001EF6C000087F4800145FCEE +:10797000800091DC800145FED401F01F0002D80296 +:1079800080017930EBCD40EC202D18961697586B7E +:10799000C0503FFC2FEDE3CD80ECFACCFFF8E06364 +:1079A000312EEA13322EE0623100EA12312EB92371 +:1079B00016980C99300A308B1A9CF01F0010301C5E +:1079C000F01F000F48F81893F0C5FFF00A9CF01F55 +:1079D000000E5803C0C00E9A0C9B069CF01F000BB3 +:1079E0000A9CF01F000B2FEDE3CF90EC0A9CF01FD8 +:1079F0000008069CCD0B00008001776C8001EF6CC5 +:107A0000000087F4800145FC800091DC800145FE88 +:107A1000EBCD40E01897303CF01F0018EEC8000195 +:107A200018955818E0880004E3CF80E058175F09E4 +:107A300049366D1858385F0AF5E90009C0E1582742 +:107A40005F08F5E80008C030E3CF90E0F01F000DBC +:107A5000C0A18B47E3CF90E0F01F000B6D185838A2 +:107A60005F0ACEEB303CF01F000578485818CF2055 +:107A7000F01F0005CEFB00008001EF6C000087F4D2 +:107A800080017BC88001F340EBCD40F81696189337 +:107A900076085858E08A002A49A83064F0C5FFF0FB +:107AA00097040A9CF01F0018301CF01F001818974C +:107AB000C160202D189B089A1A9CF01F0015F01F1A +:107AC00000152FED580CC1616C0A0E9B069CF01F2F +:107AD00000120A9CF01F0011E3CF90F80A9CF01FDF +:107AE000000F0E9CE3CD80F830683FFC9708E3CD93 +:107AF00080F80A9CF01F00093FBCE3CD80F800002D +:107B0000000087F4800145F88001EF6C8002E736C1 +:107B1000800188B0800091DC800145FA0050F200BD +:107B2000000FAC003008F9480320F94803245EFC3C +:107B3000EBCD40C016971496F8FE0320FCCBFFFF58 +:107B4000F60A141FE069851FEA1951EBF60904488B +:107B5000A5591419F8FA0324F2091064121B143BF6 +:107B6000C0B0F94B0320F80E0927FCC8FF9CF808A9 +:107B70000926E3CF90C0E3CF80C0D401189EF8FC63 +:107B80000324FCF803201838C1F0F8C8FF9CFC0C53 +:107B9000032CFC08032930089709E069851FEA19BE +:107BA00051EBFCFB0324FC0B09282FFBF6090448CE +:107BB000F60A141FA5591419F2091064F6090109EF +:107BC000FD490324D802D80A4838F0F900F85809CA +:107BD0005F1C5EFC000087F43018198CF00C180054 +:107BE0005F0A3058F00C18005F09124AC0F1306883 +:107BF000F00C1800C0B03028F00C1800C080584CB1 +:107C0000F9BC0003F9BC01005EFC5EFF302C5EFC99 +:107C100048C8F0F800FC5818C0D0C0635828C0D03D +:107C20005838C0505EFF580C5F0C5EFC583C5F8CAF +:107C30005EFC581C5F8C5EFC582C5F8C5EFC000068 +:107C4000000087F4EBCD40C01897169E740A580ABE +:107C5000C0D0753A580AC0A0747A580AC0704FF85C +:107C6000F0F901045889E0880004E3CF80C04FC8D0 +:107C7000F009032F94D8EDB80004CF813008301CF0 +:107C80009D08E3CD80C0F53900C83FF8F009180021 +:107C9000CED0F51B00D2580BCE90F51C00D030266C +:107CA000F4FA00D8F40C002811B9EC091800E080AF +:107CB00000BFF8C8FFFF3009F40800280C9CF0CA88 +:107CC000FFFDC07815882FCAF8081800E08000B0C2 +:107CD0002FF91639CF85CCABF53900C83FF8F0093C +:107CE0001800CC40F51B00D2580BCC00F51C00D07E +:107CF0003016F4FA00D8F40C002811B9EC09180079 +:107D0000E08000A4F8C8FFFF3009F40800280C9CAC +:107D1000F0CAFFFDC07815882FCAF8081800E08067 +:107D200000952FF91639CF85CA1BF53900A43FF805 +:107D3000F0091800C9B0F51B00B2580BC970F51C4A +:107D400000B03026F4FA00B8F40C002811B9EC09A0 +:107D50001800C660F8C8FFFF3009F40800280C9C22 +:107D6000F0CAFFFDC06815882FCAF8081800C58042 +:107D70002FF91639CF95C7ABF53900A43FF8F009B4 +:107D80001800FE90FF74F51B00B2580BFE90FF6FB9 +:107D9000F51C00B03026F4FA00B8F40C002811B934 +:107DA000EC091800C3D0F8C8FFFF3009F408002818 +:107DB0000C9CF0CAFFFDC06815882FCAF80818008F +:107DC000C2F02FF91639CF95C51BF53900A43FF83D +:107DD000F0091800FE90FF4BF51B00B2580BFE9007 +:107DE000FF46F51C00B03016F4FA00B8F40C002879 +:107DF00011B9EC091800C220F8C8FFFF3009F408D7 +:107E000000280C9CF0CAFFFDC06815882FCAF8082E +:107E10001800C1402FF9123BFE99FFF9C27B3028B0 +:107E2000AE8830199D09129CE3CD80C03028AE8801 +:107E30003029301C9D09E3CD80C03018AE88301940 +:107E40009D09129CE3CD80C03018AE883029301CCB +:107E50009D09E3CD80C00000000087F48003B7B027 +:107E60003028F00C1800C390E088001B3048F00C5C +:107E70001800C3503058F00C1800C21030093028D8 +:107E8000F00B1800C160F00B1800E08B001B3018DD +:107E9000F00B1800C100300812385F5C5EFC30182F +:107EA000F00C1800CEC130193028F00B1800CEC1EC +:107EB0003038C02830181039CF045EFE3029CE0B80 +:107EC0003048F00B1800C0703058F00B1800CE414D +:107ED0003028CF2B3048CF0B3039CD2B3049CD0B4C +:107EE000D431307977387075B8891894581AC0D061 +:107EF000C043582AC4C0D83A7738707A94D9EDB9BB +:107F00000004E0800087DA3AEB3900A43FF8F0097A +:107F10001800CF20EB0800B03009F2081900CF405C +:107F2000149112923006307B30533060C1A8E007C4 +:107F30001800C2B03028F0071800C7A03048EE087B +:107F40001800F9BC0003F9BC0100F01F003CE9F780 +:107F50001E002FF6EB1800B00C38FE9AFFD6098BE6 +:107F6000EAF800B8F006002811B70E9CF01F0034A4 +:107F7000FE9AFFF1E20718005F08E60718005F09A4 +:107F80001248E4081800CD40301CCE0BEB3900C875 +:107F90003FF8F0091800CB00EB0800D03009F208D8 +:107FA0001900CB2012913006307B301230533060F4 +:107FB000C1A8E0071800C2B03028F0071800C3A01D +:107FC0003048EE081800F9BC0003F9BC0100F01FAE +:107FD000001BE9F71E002FF6EB1800D00C38FE9AB4 +:107FE000FF94098BEAF800D8F006002811B70E9C20 +:107FF000F01F0013FE9AFFF1E40718005F08E60780 +:1080000018005F091248E2081800CD40301CCE0B62 +:10801000307B305CF01F000AFE9AFF77301CF01FA7 +:108020000007FE90FF723058301CA888D832302CE0 +:10803000C8DB302CCCDB000080017C1080017E602E +:108040003008484A48499508951893085EFC000096 +:10805000000089EC00008C5CEBCD4080189E198BF1 +:10806000580BC130300A3017149CFC0A00092FFA53 +:1080700013982018EE080948F9E81008F9D8B0104C +:10808000163ACF45E3CD8080169CE3CD80807938C9 +:10809000707A3308F53900C8F0091800C0205EFD79 +:1080A000F51800D4E218000C5848C0E0E08A000837 +:1080B0005888C08058C8CF41310C5EFC5808CF01A9 +:1080C0005EFF304C5EFC302C5EFCD703EBCD40E015 +:1080D00030081896109A169C8D084927760E301590 +:1080E000109BC0A8F80A00082FFA11C9EE0B070868 +:1080F000A7D91039C0A01C3ACF652FFB58DBE08B05 +:10810000000E300A780ECF8B6C08EA0B0949124832 +:108110008D082FFB58DBFE98FFF6E3CF90E00000C0 +:108120008003B7F4EBCD40C030069906149EF8C723 +:10813000FFFC1799EC091800C0E00C9AF60A000839 +:1081400011A90EC978082FF899082FFA1798143832 +:10815000FE99FFF61D993008F0091800C0F0300BA9 +:10816000FC0B000811A9EE0B0B0978082FF89908F1 +:108170002FFB1D981638FE99FFF5E3CF90C0EBCD8D +:1081800040F816941897780B68065806E08A002C79 +:10819000F6C8FFFCE8C5FFFCF8080003300E2FCC42 +:1081A000EA0E070A580BE08A00130FC81458F1D8DA +:1081B000C007C1503009C078F80907081458F1D831 +:1081C000C007C0D02FF9123BFE99FFF8597BE08B16 +:1081D000000706CA6E0B2FFB8F0B68062FFE1C369E +:1081E000FE99FFE0E3CF90F8EBCD40FE1894169295 +:1081F0001497780676055805E08A0025ECC8FFFC40 +:10820000F6C3FFFCF8080001300EF4CCFFFCE60ECC +:10821000070A6E0B580BE08A00120FC81458F1D8E9 +:10822000C007C1203009C078F80907081458F1D8F0 +:10823000C007C0A02FF91639CF852FFE1C35FE9937 +:10824000FFE8E3CF90FE5976FE9BFFF902CA68066D +:108250002FF689062FFE64051C35FE99FFDACF2B19 +:10826000D42178045804E08A0027F8C7FFFC493875 +:108270000F8B700C11C6580CE08A0017F0C5FFFC7C +:10828000300EEDEB2008F1D8C007C0F00A9A300993 +:10829000C0782FFA15881658F1D8C007C0602FF99A +:1082A000123CFE99FFF8D82A2FFE2FF7083EC03463 +:1082B0000F8BCE8BDA2A00000000023CD4211897E5 +:1082C00076055805E08A0026F6C6FFFCF8CEFFFCCE +:1082D000300B1694C0482FFB0A3BC1B4EC0B070AC5 +:1082E000E80A1800CF946E0C580CE08A00120FC8F0 +:1082F0001458F1D8C007CF003009C078FC0907082E +:108300001458F1D8C007CE802FF91839CF85D82A54 +:10831000DA2A3248F00C1800C110E08800113488C5 +:10832000F00C1800C0B0E08800183608F00C1800F7 +:10833000C05036C8F00C1800C0E15EFF3128F00CC8 +:108340001800CFC03188F00C1800CF8030C8F00C76 +:108350001800CF405EFD3308F00C1800CFC1CEEB03 +:10836000EBCD40E078055805E08A0010F8C6FFFC28 +:108370003007C0380A37C0940D8C2FF72FF6F01F46 +:108380000004CF90E3CF90E0E3CF80E08001831240 +:108390004838F14B01DCF14C01D85EFC000087F459 +:1083A0004838F14B01ECF14C01E85EFC000087F429 +:1083B000EBCD40801697581BC050582BC080E3CFA0 +:1083C0008080F01F00050E9CE3CD8080F01F00022E +:1083D000E3CF9080800091E8D401580CC070486BC6 +:1083E000760AE04A0168E0880003D80AF01F00031B +:1083F000DA0A0000000089EC800091DCD401580CFE +:10840000C0A078185908E08B0007780AE04A016894 +:10841000E0880003D80A189B482CF01F0003DA0AF2 +:10842000000089EC800091DCEBCD4040350A1896C5 +:10843000F01F000330088D48E3CD8040800091DCC0 +:10844000D401306AF01F0002D8020000800091DCE5 +:10845000D401300CF01F0002DA0A000080016C7CAD +:10846000D421201D189414971296169A1095189BD3 +:108470001A9CF01F001CE08A0032585CC27058063B +:108480005F1858075F191268C241300840099338D5 +:10849000400A95584008301B9115400CF01F0012FF +:1084A000581CC100400C78785808C090189B089C54 +:1084B000F01F000E581CC0A03FDCC098301BF01FFE +:1084C000000C400C78785808CF21301C2FFDD822A2 +:1084D0004008913740099356CDEB3FEC2FFDD82251 +:1084E00080016B3C800169A480016C40800169E0DF +:1084F000EBCD40C018971696303CF01F00283DD8B1 +:108500003079AE88AE9935083F29300BAEB8AEC988 +:1085100030283019AED8EF6B0008AEABAEEBAEF939 +:1085200058065F1AF8F900BC58095F181468F60875 +:108530001800C310F8F800D05818F9B80008EFF880 +:108540000E08F8F800CC5818EFF80808F9B900043C +:10855000F1D9E038EFF80E08F8F800C85818EFF82D +:108560000808F9B90002F1D9E038EFF80E08F8F878 +:1085700000C45818EFF80808F9B90001F1D9E0383B +:10858000EFF80E08F8F900D4EF380008F1E91048C8 +:10859000EF680008E3CD80C08001EF6CEBCD404078 +:1085A0001896303C5C76F01F000E5876E088000488 +:1085B000E3CF804048B8F006032FF90C00C6E3CDA6 +:1085C0008040F90C00CAE3CD8040F90C00CEE3CD29 +:1085D0008040F90C00D2E3CD804000008001EF6CB8 +:1085E0008003B7D4D40130DCF01F0002784CD802ED +:1085F0008001EF6CEBCD40FC207D31CA1893300B2D +:108600001A9C1A92F01F001266045804E08A00189F +:10861000E6C6FFFC30070D852FF72FF60A9CF01FEA +:10862000000DC0A14008FACAFFE4F0C9FFFF100A1C +:108630005009F565FFE80E34FE99FFEF1A9B069C82 +:1086400031CAF01F00052F9DE3CD80FC800091D042 +:1086500080018312800091DCEBCD40E0207D300B67 +:10866000189731CA1A9CF01F00171A956E0B580BF9 +:10867000E08A0024300AFAC6FFFCEEC9FFFC0C9C1D +:10868000149EC0582FF9143BE08A000D2FFA13886E +:10869000FC081800CF8418C82FF96E0B143BFE9904 +:1086A000FFF7F80601061A9B50060E9C31CAF01F10 +:1086B00000062F9DE3CD80E0FAC6FFFC0C9CCF2B7B +:1086C000800091D0800091DCD421129618971695E5 +:1086D0001494580CC1205809C111314CF01F0009E5 +:1086E000C0C09907B8C599249936487A7419994930 +:1086F000930CF8C8FFF49518D822F01F0004D82274 +:1087000080009200000077A4800147E0EBCD40C0DC +:108710001896580CC110308CF01F000C1897C090A0 +:108720000C9CF01F000B8F1C1898C0A030188F08ED +:108730000E9CE3CD80C018970E9CE3CD80C00E9CAC +:108740001097F01F0004CF5B800092008001D920B9 +:10875000800091E8EBCD40C049566C075807C180B6 +:108760006E395809EFF80004EDF80A01EFF810042B +:10877000F3F81A046E4891096E2A0FCB6E0CF01FA5 +:10878000000D0E9CF01F000C6C075807CEA148B8D6 +:10879000F0C7FFEC0E9CF01F000AC071302CF01FD8 +:1087A00000090E9CF01F0008E3CD80C0000077A4F4 +:1087B000800147E0800091E8000087F4800145DCFB +:1087C0008001478C800145ECD4014848300991185C +:1087D0009109F01F0003D802000077A4800187549C +:1087E000EBCD40FE4A0618976C0816951494201895 +:1087F000E0480167E0880004E3CFC0FE580A5F1933 +:108800006C1A300B580A5F181268F6081800CF501F +:10881000183A5FB858FC5F891268F6081800CED085 +:1088200016910C92C0B82FF7641958F75F8A0E3969 +:108830005FB81468E2081800CE00EE031016306A24 +:10884000E6CCFFF80A9BEC0C000CF01F0008CEC130 +:10885000485B089C060B310A2F2BF01F00050E9C6D +:10886000E3CD80FE000089EC8000917C800091DCEB +:10887000EBCD40E018951697300C18960E9A0A9B8F +:108880002F07F01F0005C0452FF62FFCCF8B0C9C47 +:10889000E3CD80E0800187E0D401306AFACCFFFCB0 +:1088A000FACBFFF4F01F00025F0CD8028000917C2D +:1088B000EBCD4068205D3FF8FACAFFDC15D9FB68B4 +:1088C0000013FB68000EFB68000FFB680010FB68DC +:1088D0000011FB680012FAC6FFF8ACD974088D08C5 +:1088E00015C9FAC3FFFEACC93065FACBFFF20A9A8C +:1088F000069CF01F00060A9A069B0C9CF01F0004C1 +:108900005F0C2FBDE3CD80688002E7368000917C4C +:10891000D401FACBFFFCF73900241788F0091800BE +:10892000C020D80AF73A00251798F4081800CFA1FC +:10893000F6CCFFFE2DABF01F00035F0CD802000049 +:108940008000917CEBCD4040211D303CF01F001E8B +:10895000322A1896FACBFFB4FA0A000CF01F001B5B +:10896000ECC6FF78ECE80000FAE90000ECEA000849 +:10897000FAEB0008ECE80010FAE90010ECEA001845 +:10898000FAEB0018ED380020FB680020ED390021DB +:10899000FB690021FB3A00221B88F4081800C05034 +:1089A000300C2EFDE3CD80401B9AFB380023F408E9 +:1089B0001800CF71FACBFFFEFACCFFDCF01F0004E9 +:1089C0005F0CCF0B8001EF6C8002E7368000917C5A +:1089D000EBCD40E0203D4B571896EF3900943FF81F +:1089E000F0091800C3507938707C2F4CF8E800006B +:1089F000209DFAE90000F8EA0008FAEB0008F8E820 +:108A00000010FAE90010F8EA0018FAEB0018F9383B +:108A10000020FB680020F9390021FB690021F01FCC +:108A200000242F7D580CC0412FDDE3CD80E0202DA8 +:108A3000EEC7FF4A306A0E9B1A9CF01F001EF01F03 +:108A4000001E2FED580CC1C02FDDE3CF90E0F8CB16 +:108A5000FFE2306A1A9CF01F0017EECBFF4AFAC6FD +:108A6000FFFA306A0C9CF01F00130C9B1A9C306AB2 +:108A70001A95F01F00125F0C2FDDE3CD80E0ECCBE8 +:108A8000FFE2FAC5FFFA306A0A9CF01F000A0E9B4B +:108A9000306A1A9CF01F00071A9B0A9C306A1A96CB +:108AA000F01F00065F0CCC1B0000026080018944AF +:108AB0008002E736800188B08000917CD401201DBF +:108AC000500C580CC0401A9CF01F00022FFDD80219 +:108AD0008001D3A8D401201D500C580CC0401A9C12 +:108AE000F01F00022FFDD8028001D3A8EBCD40C0BB +:108AF000E06B00E41896300CF01F000A1897C0E0F5 +:108B0000E06A00E40C9BF01F0008ECC9FFF8EECA15 +:108B1000FFF8486B0E9CF01F00060E9CE3CD80C052 +:108B20008001D8DC800091DC8001D3EC8001ACA80E +:108B3000EBCD40C0E06B00EC1896300CF01F000A43 +:108B40001897C0E0E06A00EC0C9BF01F0008ECC92D +:108B5000FFF0EECAFFF0486B0E9CF01F00060E9C63 +:108B6000E3CD80C08001D8DC800091DC8001D3ECB3 +:108B70008001ACA8EBCD40FE129210914A88F0F92A +:108B800000F818933DD8733C316916977874AE8815 +:108B9000AE9930083509AEA8AEB93F283019301665 +:108BA00014954A0B303AAEC8AED9AE36EECCFFF8CB +:108BB000F01F001D069CEF65000BAE76AE66308B95 +:108BC000F01F001A8F5CC290303A496BF01F0016FC +:108BD0006E58B0B28EE86E5C303AF808002C491B33 +:108BE000F01F00116E598EE8F2080028B0B1E919A3 +:108BF00000B0E91800B21208E93900A5A3682F08EF +:108C00001039C030E3CF90FE0F9830092FE8EF59AC +:108C10000010AE98E3CF90FEE3CD80FE000087F415 +:108C200080017B1C800091DC8001D3ECD431201DBD +:108C3000314E1697330BAE9EAE8B1090FACBFFD809 +:108C40007618500818921493129176055805E08A08 +:108C50000006EA0815042EA8AE983016303AAE1673 +:108C600049E4EECCFFFCE8CBFFFCF01F001D049CA8 +:108C7000AEF3AE56AE46AE75EA0B15042F8BF01F61 +:108C800000198F4CC280303AE8CBFFFCF01F001473 +:108C90006E48B0B18EC86E4CE8CBFFFCF808002CD3 +:108CA000303AF01F000F6E498EC8F2080028B0B0AD +:108CB0003289AE695805E08A000D6E488EC98EDC97 +:108CC000EA0A1504120C400BF00C002CF01F0004F3 +:108CD0002FFDDA3A2FFDD83280017B1C800091DC19 +:108CE0008001D3ECEBCD40E0201D500B1897580CC1 +:108CF000C070169A4C4C0E9BF01F0044C6404C4668 +:108D000030080DA9F0091800C050301C2FFDE3CD2C +:108D100080E0ECCCFFE4F01F003FCF815807C2F0A9 +:108D2000301CF01F003DC3304B751A9B4B6CF01F7D +:108D3000003B1897C320F01F003A3018ED4C00CCD0 +:108D4000ACA80E9C3005400BED5500D04B07F01F32 +:108D500000351896581CC3F1EECCFFE4F01F00322A +:108D60004B28F1090142EA091900CD006E98EDB8CF +:108D7000000ECCC0F01F002E0C9CCC9B4A25EAF9BB +:108D80000320EAF803241039CCC1CD0BECCCFFE46E +:108D9000F01F0025301CCBBBECF801245818C04054 +:108DA000301CF01F0024ECCCFFE4F01F001FEAF998 +:108DB0000324EAF803201238CA90301CF01F001672 +:108DC000301CCA5B492AF50B00D2F80B1900C0A071 +:108DD0003FBCC9DBEECCFFE4AEA5F01F00133FBCE7 +:108DE000C96B3018F55800D24909F3080142F6085A +:108DF0001900CEF07498EDB8000ECEB0F01F000C44 +:108E00003FBCC85B000084CC80017B30000087F44D +:108E1000800145DC80019F3080017B7A800145C460 +:108E200080014664800145EC000002608001FBFC8B +:108E30008001A128EBCD40C01897F01F0015C1B0EC +:108E40006E4849468D186E598D2930096E2C8F2930 +:108E50006E486E3BE2180080F9B80001EDF80E0292 +:108E6000F01F000D1897581CC0803008300CACA8BB +:108E7000E3CD80C0E3CF90C0F01F00083008ED4C78 +:108E800000CCED5800D00E9CE3CD80C08001C6A080 +:108E9000000087F480014664800145C4EBCD40802A +:108EA000491A18977498EDB80001C111F4F801241B +:108EB0005818C0A07848951878599529F01F000BCC +:108EC000C091E3CD8080109CE3CD80803FBCE3CD9A +:108ED000808030086E2C6E3B8F28F01F0005E3CD9C +:108EE00080800000000087F48001C6A080018CE42F +:108EF000106104000000000040200700FFFFFFFF9A +:108F0000000000004869F2F802045828C0205EFE04 +:108F1000580CCFE0F2C8FFF099085EFF000077AC74 +:108F20005EFDD7034828912C913B5EFF000077AC93 +:108F300048384849910C930B5EFC000000007540D6 +:108F4000000074B45EFCD703D431202D500C3008DF +:108F5000FAC1FFF81690109402D84A424A43E269D7 +:108F60005A4C089A0819029B009C40085D181895F5 +:108F70005804C0B1584CF80A1780F9BA0B0449DB01 +:108F8000401CF01F001DC2E140165805C1000A97A1 +:108F90005907EE0A1780F9BA0B100C9B1417140628 +:108FA00064085C7A660C5D185807CF310A04E24405 +:108FB0005A4BFE98FFD65875E088000D4018EACC51 +:108FC000000848CBF00C000C2F8B308AF01F000AF1 +:108FD000C0913009009C129A129B40085D182FED39 +:108FE000DA3A30DC2FEDD83200007540000074B45E +:108FF00080018EF08000917CEBCD40FC49F8189404 +:10900000F0C3FDDCF0C7FFBC3072C0B8321A089B59 +:109010000A9CF01F001B1896C1D02C470637C16070 +:10902000EEC5002C5804CF316E08109C5808CF6054 +:10903000F01F00148F04EF44FFF86E185808CEE1BB +:109040008F248F322C470637CEC15804C0D0E3CFCF +:10905000C0FC6ABC580CC080F01F000A8B968BB60F +:109060006AC85808C030E3CF90FC8BD8301C3078E9 +:109070008BE8E3CD80FC0000000077AC8000917CA1 +:10908000800091E8EBCD40FE109114961895169251 +:109090001293F4C80008E0480037E08B00185859D4 +:1090A000C18049D8F0C4FE08F0C7FFE86EB8580880 +:1090B000C1300E9C321A0A9BF01F0018C1D02C47F9 +:1090C0000837CF51307CE3CD80FE30ACE3CD80FE5D +:1090D000129CE3CD80FEECCBFFFF049CF01F001040 +:1090E0000A9B8FBC8F968FD18FE30E9C321AF01F94 +:1090F000000DE3CF90FE6EBCF01F000B049CECCB88 +:10910000FFFFF01F00078FE38FBC8F968FD1E3CF57 +:1091100090FE0000000077AC8000917C8000918878 +:10912000800091DC800091E8D401487BF6F80204CD +:109130005828C020DC0AF6CBFE04306AF01F00037A +:10914000DA0A0000000077AC800091DCEBCD40FE35 +:10915000209D580B5F09580A5F08169314941069F4 +:10916000C341580BC4514A9264585808C2E03005B4 +:10917000FAC1FFFD0A970A9CC0D8ED3A0020FB38DF +:109180000023F4081800C2E00E9C64580E38E088F2 +:10919000001E64482FF7F00C03265803CEF1306A06 +:1091A000089B5804C0A0202D1A9CF01F0019F01F26 +:1091B00000192FED580CC0E05805C0506AC96CC8A2 +:1091C0001238CE350C95CE1B30050A9C2F7DE3CD91 +:1091D00080FE306A089BECCCFFDFF01F000FCD5102 +:1091E000CECB029B0C9CF01F000CCCF1CD9B189BAE +:1091F000069AFACCFFFDF01F0009FB6300234832FA +:1092000064585808CB51CE1B000077AC8002E7367B +:10921000800188B08000917C800091DCEBCD4060C3 +:10922000306A202D169618951A9CF01F0009F01F21 +:1092300000090C9A5F0B0A9CF01F00072FED581CC9 +:10924000F9BC0001F9BC01FFE3CD80608002E73684 +:10925000800188B080016480D4015C6CF01F000440 +:10926000581CF9BC0001F9BC01FFD8028001641C44 +:10927000EBCD406E202D1293189116921495300B61 +:10928000308A1A9CF01F0012306A069B1A96202D15 +:109290001A9CF01F0010F01F001030085F091AD848 +:1092A0000A9A1AD6049B1AD3029C1AD83038F01F97 +:1092B000000B2FAD5BFCC070581CF9BC01FF2FEDFB +:1092C000E3CD806E304C2FEDE3CD806E800091D0E9 +:1092D0008002E736800188B08001661CEBCD406ECD +:1092E00010911892169314951296F01F00113008E1 +:1092F0000C991AD80A9A1AD1069B049CF01F000DEB +:109300002FED583CE0890007582CC085306CE3CD28 +:10931000806E584CC070E3CFC06E5BECC050581CE0 +:10932000CFB1E3CF906E30BCE3CD806E8001A1DC85 +:109330008001F7D8EBCD4040201D10964978F0FE13 +:109340000204582EC0503FFC2FFDE3CD804030EE8C +:10935000FAC8FFFC10DE300E1A985C761ADE1AD6B8 +:10936000F01F000F2FEDFE5CFC17E0890010FE5C83 +:10937000FC16C114FE5CFB4FC070FE5CFBB4C0B0B9 +:10938000FE5CFAECCE11307CCE0B5BECC040581C7E +:10939000CDB1CDBB30BCCD9B000077AC8001F54496 +:1093A000D4014858F0F902045809C030F01F0003F6 +:1093B000D8020000000077AC80014480EBCD40E88B +:1093C0004D56189514971693E06A0218300B0C9CB2 +:1093D000F01F00524D288D05700C8D133005A36CC5 +:1093E000ED450204F01F004F8D4CC031E3CFC0E8C3 +:1093F0000A9CF01F004D581CCFA11AD5F1D7C00808 +:109400000A990A9A310B320CF01F00482FFD581CA4 +:10941000CEE1F01F0047581CCEA11AD50A980A9930 +:109420004C4A0A9B302CF01F00442FFD580CCDF005 +:1094300030670A981AD70A994BEA0A9B322CF01F18 +:10944000003E2FFD580CCD3030780A991AD84B9A2F +:109450000A980A9B323CF01F00382FFD580CCC7044 +:109460001AD50E9C0A980A994B2A0A9BF01F0032C3 +:109470002FFD580CCBC030270A981AD70A994ADA20 +:109480000A9B304CF01F002C2FFD580CCB001AD734 +:109490000A984A8A0A990A9B305CF01F00272FFD20 +:1094A000580CCA50301C0A981ADC0A994A1A0A9BAE +:1094B000F01F00212FFD580CC9A030390A981AD985 +:1094C00049CA0A990A9B31CCF01F001B2FFD580C8A +:1094D000C8E0F01F001A581CC8A1F01F0019581C42 +:1094E000FE91FF860A980C9730490C9A495B0A9CBA +:1094F000F01F0015FE90FF7C189A308B493CF01F3E +:109500000014581CFE91FF74ED4C0204EF45020C50 +:10951000E3CD80E8000077AC800091D000000258D5 +:1095200080009200800200AC8002067C8001FFB4C3 +:109530008001984C80016E788001FD8C8001A00034 +:109540008001955080016AF48003B8048001762878 +:10955000EBCD40E078185B98C031E3CFC0E078569F +:109560005866CFC1783B0C9A4985EAC7FE040E9C29 +:10957000F01F0017303A497B0E9CF01F0017C131D5 +:10958000F01F00163026EB460204F01F00150C9C5D +:10959000F01F00146A195809C14048C8700C5D19C1 +:1095A000E3CF80E037A83C49EB6801FC30E80C9B36 +:1095B0000E9CEB6901FDEB6801FEF01F000BCE1B5A +:1095C000129CE3CD80E00000000077AC800091DCCD +:1095D0008003B80C8000917C8001FD8080020290A5 +:1095E0008002023480017984EBCD40FC7875580B01 +:1095F000F9B80100F7F81A001693EB3900C83FF8E4 +:10960000F0091800C250EB0900D03008F009190029 +:10961000C4D0307430073022EE061502EAF800D8C4 +:109620000C082FF711BC089BF01F0027E08A0009E7 +:10963000EAF800D80C0811B45803E7F21A00EB1846 +:1096400000D00E38FE99FFEA089CE3CD80FCEB3891 +:1096500000A4F2081800C250EB0900B03008F0096D +:109660001900C240307430073012EE061502EAF8D5 +:1096700000B80C082FF711BC089BF01F0013E08AFC +:109680000009EAF800B80C0811B45803E7F21A0010 +:10969000EB1800B00E38FE99FFEA089CE3CD80FC81 +:1096A000787992D8EDB80004C040307CE3CD80FCDE +:1096B000307B305CF01F0004FE9AFFF9305CE3CD94 +:1096C00080FC000080017E60D431201D4D876E58E3 +:1096D0005808C0E030060C996E48F009032CF01FC2 +:1096E00000552FF66E580C990C38FE9BFFF730068C +:1096F0001A9B8F560C9CF01F00501A94400C580C6B +:10970000C0312FFDD832A36CF01F004C1890CFA0B1 +:10971000400A0C9BA36AF01F004A40085808E08AE0 +:1097200000260C950096C0782FF52FC640080A3801 +:10973000E08A001D350CF01F00418D0CCF614009FF +:109740005809E08A000F009530062FF66A0C580C75 +:10975000C040F01F003840092FC50C39FE99FFF7B3 +:10976000009CF01F00342FFDD8321A9B009CF01F84 +:1097700000324B4972084009F0090D488F585808CB +:10978000CE00300408930891A363E003000264084C +:109790006E467135344CF01F0029F9410040060631 +:1097A0008D0C6A796E48F2CBFFF2F0030306F33AB0 +:1097B000000D0C9CF01F00246A78F139000D306A0E +:1097C000ED690020ECCCFFDF640B2E2BF01F001E98 +:1097D000029B0A9CF01F001DED6C00386A498DC980 +:1097E0006A585808F9B805008DD86A79F338005ED0 +:1097F000ED6800276A7992C88DA80BF9ED59002C05 +:1098000030290BEAF20A1800E2081710F9B8000133 +:109810008DF830286E49F20309062FF4F00A18007B +:1098200008936E580838FE9BFFB1C8AB000077ACB8 +:10983000800091E88002105880009200800091D052 +:1098400000000258800091DC800195E8EBCD40C01B +:10985000201D1696582BC680E0880013586BC590C3 +:10986000587BC2D0583BC4804C076E295809C05061 +:109870004BE80C9C703B5D192FFDE3CD80C0580B6D +:10988000C0F14BA7EEF902085819C6C0EEF8020C59 +:109890003019A1D8EF690210EF48020CCE7B581B9B +:1098A000CE414B273008EEF9020C4B1AA3A9EF6802 +:1098B0000210A1D9B488EF49020CCD8B4ACA3008F6 +:1098C0001589F0091800C4C14A87EEF8020CEDB8FA +:1098D0000001CD31EF380210F2081800CCE1F01F82 +:1098E0000025F01F0025EEF8020C3016E018FFF9F5 +:1098F000EF48020CCBBBF01F002049C7EEF9020C69 +:10990000EDB90004CBA11298A5C8EF48020CCAEB30 +:1099100049673019EEF8020CEF690210A1D8300641 +:10992000EF48020CCA3B4917EEF8020CA3C81A9C78 +:10993000EF48020CF01F001140085828C050F01FDB +:10994000000DF01F000D300A4898B08AEF39021060 +:10995000F4091800C9204858F16A0210C87BB4887D +:10996000C8CB4838B089C89B000077AC000079C4E8 +:1099700080021298800196C8800177A4D401201D2E +:1099800048F9F2F802045828C0302FFDD80AF339FC +:1099900002103008F0091800C0711A9CF01F00096D +:1099A00040085828CF31F01F0008CF00F8CAFFE266 +:1099B000300B169CF01F00052FFDD802000077AC7D +:1099C000800177A4800210FC8001914CEBCD408097 +:1099D000201D4967EEF802045828C0503FFC2FFDB7 +:1099E000E3CD8080F01F0012C051302C2FFDE3CD5D +:1099F0008080EEF9020CEDB90002CF10EDB9000144 +:109A0000C031309CCEDB1A9CF01F000A4008580879 +:109A1000CED0F01F0009581CCE21EEF8020CA3A8EE +:109A2000EF48020CCDDB0000000077AC800210FC98 +:109A3000800211088001F370EBCD40C020AD189872 +:109A40001697580BC07076DC581CC0402F6DE3CDC4 +:109A500080C0109BF13A0020FAC6FFFE0C9CF01F5C +:109A6000001B0C9B209D322A1A9CF01F0019F01F2E +:109A700000192F7D580CCEB0793CFACBFFDCF01FDB +:109A8000001640985818C150C0923058F808180075 +:109A9000F9BC0003F9BC0102CDAB5828C030301C22 +:109AA000CD6B5807C0D06EC85808C0A0305CCCFB46 +:109AB0005807C0806EC85808C050304CCC8B307CE2 +:109AC000CC6B306CCC4B00008002113C8002E7363E +:109AD0008001F2BC800195E8D43120EDFEF3029CB8 +:109AE000FAC1FFA4E6F8020C18971694E2180006D3 +:109AF000C040309C2F2DD832F01F00A1C040308CC8 +:109B00002F2DD832E74C02085807C130BA8CF5D453 +:109B1000C008FAC6FFFEBA9A0E9B0C9CF01F009973 +:109B20000C9C1B9BF01F0098581CC0802F2DDC3A0A +:109B3000BA97BA87FAC6FFFECF4B029CF01F00937C +:109B40001892581CCF41029A089B0E9CF01F00905F +:109B50001890C580E6C7FFE8E6C6FE08EF3A002089 +:109B6000E1380020F4081800E08000A02C470C37F2 +:109B7000CF6130070E950E9B009CF01F0086E136EA +:109B800000381897CD40585CE08000C2E08B00B9E7 +:109B9000583CE08000B4584CC020300CF01F007ED0 +:109BA0003048F0061800E08000A83054E80618009D +:109BB000E08000983028F0061800E080009A300C11 +:109BC000F01F0076E8061800E080008F300CF01FD0 +:109BD00000745837E08B007960F85818C710301CB3 +:109BE000F01F0070300B4F0CF01F0070CA00F01F08 +:109BF0000070581CC9C1E6F8020CA1B8E748020C75 +:109C0000C7ABFAC5FFCE306A029B0A9CF01F005D0D +:109C1000FAC6FFDE0C9CF01F00673FF81AD00C9BC1 +:109C20001AD2310A1AD8204D1A9CF01F00630A9BE1 +:109C3000202D306A1A9CF01F00600499209DE6CC0C +:109C4000FDECFB380069FAEA0048FAE20050FB68D4 +:109C50000021FAEB0000FB380068FAEA0058FAE34A +:109C60000008FAE20060FAEB0010FAE30018FB6863 +:109C70000020303A0098129B4C03F01F00502EED4C +:109C80001895581CFE91FF54009BE6FC0214F01F2F +:109C9000004C5BBCC620580CC3E1189BE6FC0214C8 +:109CA000F01F00483FFCC27B0E9C009BF01F00464B +:109CB000FE91FF5E6EB55805EA071700C5DB302C34 +:109CC000F01F0038C90B5805FE90FF320A9AE13B9D +:109CD0000020009CF01F003D3018E7480208C7DB59 +:109CE000301CF01F002E301CF01F002DC73B302C05 +:109CF000F01F002AC6CB303CCFCB301CC50B586CB4 +:109D0000C080587CFE91FF4B308CC49B307CC47B60 +:109D1000305CC45B344CF01F002E089A18960E9BE2 +:109D2000F01F0018029B306AED640020ECCCFFDFCE +:109D3000F01F001400991AD60A984A6A009B31CC89 +:109D4000F01F00252FFD580CC0E0E6F8020C0A9C1D +:109D5000A1B8E748020CCCFA009BE6FC0214F01F05 +:109D60000019CC8A189BE6FC0214F01F00160C9C0C +:109D7000F01F001A3FFCCBFA000077AC800210FC09 +:109D8000800091DC800178BC800179788001914C61 +:109D900080019A3880015F60800163488001639C84 +:109DA00080017A1080018F208001FD408001F3A0A6 +:109DB000800177C08002E73680020BFC80020A70C7 +:109DC00080020B408000917C800214708000920021 +:109DD00080019E0080016E78800091E8D401202DE2 +:109DE000FACAFFF415D8BAD87409500915C8300B4F +:109DF000BAC8169CF01F00022FEDD80280019AD835 +:109E0000EBCD40E049F51697EAFC0214300BF01F49 +:109E1000001EF01F001EEEC6FFDFEF3B00200C9A75 +:109E20000E9CF01F001BC150EAF8020CA1D8202D97 +:109E30000C9BEB48020C306A1A9CEF360020F01F96 +:109E400000150C9B0E9CF01F00142FED581CC060D9 +:109E5000EAF8020CEDB80001C0600E9CF01F000F84 +:109E6000E3CD80E0301B300CF01F000D302B300CA8 +:109E7000F01F000B0E9CF01F0009E3CD80E00000F6 +:109E8000000077AC80020B40800196C88001914CA5 +:109E90008002E73680019AD8800091E88001984CD2 +:109EA000EBCD40E0202D18951697580CC0513FFC83 +:109EB0002FEDE3CD80E0580BCFB0E04B0020FE9BB0 +:109EC000FFF8FAC6FFFE306AE06B00FF0C9CF01F43 +:109ED0000008306A202D0C9B1A9CF01F00060E9B78 +:109EE0000A9CF01F00052FEDCE4B0000800091D0A2 +:109EF0008002E73680019AD8EBCD408048B7EEF873 +:109F000002045828C030E3CFC080F01F0009581C5D +:109F1000F9BC0109EFF80083F9B90010F1D9E03874 +:109F2000EFF80A83E3CD8080000077AC80020A84DA +:109F3000D40148B9F338000A104CF36C000A7218C7 +:109F40005808C0B05828C0803028726C9318301B55 +:109F500072595D19D80AD80ADA0A0000000079C8D7 +:109F60004828916B915C5EFC000079C8EBCD40C045 +:109F7000203D5CBBBA89502B109714965CC85C8856 +:109F80005807C0513FFC2FDDE3CD80C05C784959B4 +:109F90005018B28C3048FAC9FFF8300A306B492C9F +:109FA000F01F0012581CCEF11B89491A1898B48969 +:109FB000306B1A99300A48FCF01F000C581CCE3147 +:109FC00048D8300AB007306B304848CCFA0800094E +:109FD000F01F0006581CCD7148989146CD5B0000DB +:109FE00000007A288003B8108001776C0000025CC2 +:109FF0008003B8180000025E8003B820000079C812 +:10A00000EBCD40C030074A161AD78D078D17ED6784 +:10A010000008ED670009ED67000A8D378D470E983F +:10A020000E9949BA0E9B302CF01F001A2FFD580CC8 +:10A03000C0413FFCE3CD80C01AD70E980E99496A03 +:10A040000E9B304CF01F00132FFD580CCF301AD749 +:10A050000E980E99491A0E9B32ECF01F000E2FFD40 +:10A06000580CCE8031483019E06A138830AB0E9C12 +:10A07000F01F000B581CCDE10E9BECCCFFF4F01F41 +:10A080000009581CCD71CD7B000079C88001A0F07B +:10A0900080016E788001A1A08001A0A480019F6C46 +:10A0A000800144F8D401F01F000E48EA74085838C3 +:10A0B000C12030289508F539000A3008F009180049 +:10A0C000C020D8023018300B9518487C487AF01F11 +:10A0D0000008D80230089508D80200008001DA365E +:10A0E000000079C88001DA5880018E348001EF20A9 +:10A0F000EBCD408048973018EF6800086E4958094A +:10A10000C0A0308CF01F00066E4C3009485A6E3BE0 +:10A11000F01F0005E3CD8080000079C880019F30EA +:10A120008001A1CC80014558D4014989F80C11FF68 +:10A13000F338000A106CF36C000AC1E1F33800092F +:10A14000F8081800C19072185808C161F338000867 +:10A15000F8081800C06072085808C0F05818C0C04D +:10A160003018300B931848AA48ACF01F000B300B86 +:10A17000331CF01F000AD802301B485A930B488C3E +:10A18000F01F0005D8020000000079C880018E345D +:10A190008001DA588001EF2080016D6C8001DA8443 +:10A1A000EBCD404048766C3CF01F0007308CF01F30 +:10A1B000000730083009ED6800088D09E3CD8040C4 +:10A1C000000079C8800145308001A128D401308C7D +:10A1D000F01F0002D80A00008001A128EBCD4080CA +:10A1E00048E76E185828C030E3CD80806E58300B99 +:10A1F0006E6C5D18300B8F1B4899F2FA0324F2F84D +:10A2000003201438C040169CF01F0006300B332C7E +:10A21000F01F0005E3CD8080000079C8000084CCE9 +:10A2200080018CE480016D6CEBCD40C018971696D0 +:10A23000F01F0009C0C06E0C581CC0700C9B0E9C17 +:10A24000F01F0006CF91302CE3CD80C03FDCE3CD82 +:10A2500080C000008001462C80014636EBCD404096 +:10A26000301818969908F01F00040C9CF01F00038A +:10A27000E3CD80408001463280014634D401580C41 +:10A28000C030F01F0002D80280014630D4013008EF +:10A290009908F01F0002D8028001462ED401189EB2 +:10A2A000580AC0C196199688F9D9C010103CC165EA +:10A2B000F2C8FFFF973AB618D802581AC06096192C +:10A2C000F2C8FFFFB618D802969996881039C0F4E4 +:10A2D0007648F0090709B889CF3B1D897648F00C0C +:10A2E0000B099619F2C8FFFFB618D8023008973844 +:10A2F000B8889619F2C8FFFFB618D802EBCD408097 +:10A300001897580AC1D1961C9689FDDCC010FCC86C +:10A31000FFFF1238F7FA4A03F7F85004F1DEE508B8 +:10A32000EFF95801F1F95E00EFFA5800F1FA5E0119 +:10A33000F7FC5201F8C8FFFEB618E3CD8080581A2A +:10A34000C070961CF8C8FFFEB618E3CD8080969AC0 +:10A350009689F4C8FFFF1238C09476481408119902 +:10A36000B889118AB89A961CCEEB30089738B8088D +:10A37000961CF8C8FFFEB618E3CD8080EBCD408078 +:10A38000189E169C580AC0F1961B9889EFDBC010E6 +:10A39000EEC8FFFD1238C205F6C8FFFC993AB8189E +:10A3A000E3CD8080581AC070981BF6C8FFFCB8181F +:10A3B000E3CD8080969B9889F6C8FFFD1238C1C412 +:10A3C000784A160A15B8BC8815A9BC991598BCA876 +:10A3D0001589BCB9CEAB1DB8784A0E0AB4881DA940 +:10A3E000B4991D98B4A81D89B4B9981BF6C8FFFC90 +:10A3F000B818E3CD8080300899389D08981BF6C8BE +:10A40000FFFCB818E3CD8080EBCD4068189316951B +:10A410001496F01F000C0C9A0A9BE6CCFFFFF01F6D +:10A4200000090C9A0A9BE6CCFFFEF01F00060C9A6E +:10A430000A9BE6CCFFFDF01F0003E3CD806800001F +:10A440008001A29CD4211697189596141496F01F9B +:10A4500000080C9A0E9BEACCFFFEF01F00060BC80A +:10A460005808F1D4E108EFF81C01D8228001A2FCC1 +:10A470008001A408EBCD4068189316951496F01F40 +:10A4800000060C9A0A9BE6CCFFFCF01F0003E3CD0C +:10A49000806800008001A37CEBCD4068189316957E +:10A4A0001496F01F00090C9A0A9BE6CCFFFCF01FE3 +:10A4B00000070C9A0A9BE6CCFFFAF01F0004E3CDDC +:10A4C000806800008001A37C8001A2FCEBCD406885 +:10A4D000189316951496F01F000F0C9A0A9BE6CC61 +:10A4E000FFFCF01F000D0C9A0A9BE6CCFFFBF01F4F +:10A4F000000A0C9A0A9BE6CCFFFAF01F00070C9AA0 +:10A500000A9BE6CCFFF9F01F0004E3CD8068000051 +:10A510008001A37C8001A29CEBCD40681893169526 +:10A520001496F01F000C0C9A0A9BE6CCFFFCF01F5F +:10A53000000A0C9A0A9BE6CCFFFAF01F00080C9A5E +:10A540000A9BE6CCFFF9F01F0005E3CD8068000010 +:10A550008001A37C8001A2FC8001A29CEBCD40681D +:10A56000189316951496F01F00150C9A0A9BE6CCCA +:10A57000FFFCF01F00120C9A0A9BE6CCFFF8F01FBC +:10A5800000100C9A0A9BE6CCFFF6F01F000D0C9A07 +:10A590000A9BE6CCFFF4F01F00090C9A0A9BE6CC5C +:10A5A000FFF0F01F00070C9A0A9BE6CCFFEEF01FAD +:10A5B0000004E3CD806800008001A37C8001A2FC40 +:10A5C000EBCD4068189316951496F01F00090C9A6D +:10A5D0000A9BE6CCFFFCF01F00060C9A0A9BE6CC17 +:10A5E000FFF8F01F0003E3CD806800008001A37C2A +:10A5F000EBCD4068189316951496F01F00060C9A40 +:10A600000A9BE6CCFFFCF01F0003E3CD806800004E +:10A610008001A37CEBCD4068189316951496F01F2B +:10A62000000C0C9A0A9BE6CCFFFCF01F00090C9A68 +:10A630000A9BE6CCFFF8F01F00060C9A0A9BE6CCBA +:10A64000FFF4F01F0003E3CD806800008001A37CCD +:10A65000EBCD4068189316951496F01F00330C9AB2 +:10A660000A9BE6CCFFFCF01F00300C9A0A9BE6CC5C +:10A67000FFF8F01F002D0C9A0A9BE6CCFFF4F01FA8 +:10A68000002B0C9A0A9BE6CCFFF2F01F00280C9AD4 +:10A690000A9BE6CCFFF0F01F00250C9A0A9BE6CC43 +:10A6A000FFEEF01F00220C9A0A9BE6CCFFECF01F95 +:10A6B000001F0C9A0A9BE6CCFFEAF01F001C0C9AC4 +:10A6C0000A9BE6CCFFE8F01F00190C9A0A9BE6CC27 +:10A6D000FFE6F01F00160C9A0A9BE6CCFFE4F01F81 +:10A6E00000130C9A0A9BE6CCFFE2F01F00110C9AB3 +:10A6F0000A9BE6CCFFE1F01F000E0C9A0A9BE6CC09 +:10A70000FFE0F01F00090C9A0A9BE6CCFFDCF01F6B +:10A7100000060C9A0A9BE6CCFFD8F01F0005E3CD9B +:10A72000806800008001A37C8001A2FC8001A29CC3 +:10A73000EBCD4068189316951496F01F00120C9AF2 +:10A740000A9BE6CCFFFCF01F00100C9A0A9BE6CC9B +:10A75000FFFBF01F000D0C9A0A9BE6CCFFFAF01FDE +:10A76000000A0C9A0A9BE6CCFFF9F01F00070C9A2E +:10A770000A9BE6CCFFF8F01F0004E3CD80680000E0 +:10A780008001A37C8001A29CEBCD406818931695B4 +:10A790001496F01F00060C9A0A9BE6CCFFFCF01FF3 +:10A7A0000003E3CD806800008001A37CEBCD40680E +:10A7B000189316951496F01F00060C9A0A9BE6CC87 +:10A7C000FFFCF01F0003E3CD806800008001A37C44 +:10A7D000EBCD4068189316951496F01F00060C9A5E +:10A7E0000A9BE6CCFFFCF01F0003E3CD806800006D +:10A7F0008001A37CEBCD4068189316951496F01F4A +:10A8000000060C9A0A9BE6CCFFFCF01F0003E3CD88 +:10A81000806800008001A37CEBCD406818931695FA +:10A820001496F01F00060C9A0A9BE6CCFFFCF01F62 +:10A830000003E3CD806800008001A37CEBCD40687D +:10A84000189316951496F01F00060C9A0A9BE6CCF6 +:10A85000FFFCF01F0003E3CD806800008001A37CB3 +:10A86000EBCD4068189316951496F01F00060C9ACD +:10A870000A9BE6CCFFFCF01F0003E3CD80680000DC +:10A880008001A37CEBCD4068189316951496F01FB9 +:10A8900000060C9A0A9BE6CCFFFCF01F0003E3CDF8 +:10A8A000806800008001A37CEBCD4068189316956A +:10A8B0001496F01F00060C9A0A9BE6CCFFFCF01FD2 +:10A8C0000004E3CD806800008001A37C8001A650D5 +:10A8D000EBCD4068189316951496F01F00060C9A5D +:10A8E0000A9BE6CCFFFCF01F0003E3CD806800006C +:10A8F0008001A37CEBCD4068189316951496F01F49 +:10A9000000090C9A0A9BE6CCFFFCF01F00060C9A8B +:10A910000A9BE6CCFFF8F01F0003E3CD806800003F +:10A920008001A37CEBCD4068189316951496F01F18 +:10A9300000060C9A0A9BE6CCFFFCF01F0003E3CD57 +:10A94000806800008001A37CEBCD406818931695C9 +:10A950001496F01F00090C9A0A9BE6CCFFFCF01F2E +:10A9600000060C9A0A9BE6CCFFF8F01F0003E3CD2B +:10A97000806800008001A37CEBCD40681893169599 +:10A980001496F01F00090C9A0A9BE6CCFFFCF01FFE +:10A9900000060C9A0A9BE6CCFFF8F01F0003E3CDFB +:10A9A000806800008001A37CEBCD40681893169569 +:10A9B0001496F01F00060C9A0A9BE6CCFFFCF01FD1 +:10A9C0000003E3CD806800008001A37CEBCD4068EC +:10A9D000189316951496F01F00090C9A0A9BE6CC62 +:10A9E000FFFCF01F00060C9A0A9BE6CCFFF8F01F54 +:10A9F0000003E3CD806800008001A37CEBCD4068BC +:10AA0000189316951496F01F00060C9A0A9BE6CC34 +:10AA1000FFFCF01F0003E3CD806800008001A37CF1 +:10AA2000EBCD4068189316951496F01F00090C9A08 +:10AA30000A9BE6CCFFFCF01F00060C9A0A9BE6CCB2 +:10AA4000FFF8F01F0003E3CD806800008001A37CC5 +:10AA5000EBCD4068189316951496F01F00090C9AD8 +:10AA60000A9BE6CCFFFCF01F00060C9A0A9BE6CC82 +:10AA7000FFF8F01F0003E3CD806800008001A37C95 +:10AA8000EBCD4068189316951496F01F00060C9AAB +:10AA90000A9BE6CCFFFCF01F0003E3CD80680000BA +:10AAA0008001A37CEBCD4068189316951496F01F97 +:10AAB00000060C9A0A9BE6CCFFFCF01F0003E3CDD6 +:10AAC000806800008001A37CEBCD40681893169548 +:10AAD0001496F01F00060C9A0A9BE6CCFFFCF01FB0 +:10AAE0000003E3CD806800008001A37CEBCD4068CB +:10AAF000189316951496F01F00060C9A0A9BE6CC44 +:10AB0000FFFCF01F0004E3CD806800008001A37CFF +:10AB10008001A29CEBCD4068189316951496F01F07 +:10AB200000060C9A0A9BE6CCFFFCF01F0004E3CD64 +:10AB3000806800008001A37C8001D434EBCD4068A4 +:10AB4000189316951496F01F00330C9A0A9BE6CCC6 +:10AB5000FFDEF01F00310C9A0A9BE6CCFFD4F01FF9 +:10AB6000002F0C9A0A9BE6CCFFC2F01F002D0C9A16 +:10AB70000A9BE6CCFFBFF01F002B0C9A0A9BE6CC89 +:10AB8000FFBCF01F00290C9A0A9BE6CCFFB0F01F17 +:10AB900000270C9A0A9BE6CCFFACF01F00250C9A0C +:10ABA0000A9BE6CCFFA4F01F00230C9A0A9BE6CC7C +:10ABB000FF9CF01F00210C9A0A9BE6CCFF98F01F27 +:10ABC000001F0C9A0A9BE6CCFF8CF01F001D0C9A0C +:10ABD0000A9BE6CCFF72F01F001B0C9A0A9BE6CC86 +:10ABE000FF68F01F00190C9A0A9BE6CCFF44F01F87 +:10ABF00000170C9A0A9BE6CCFF50F01F00150C9A28 +:10AC00000A9BE6CCFF30F01F0013E3CD8068000004 +:10AC10008001D3448001D2DC8001D2748001CAF863 +:10AC20008001C9D88001D8608001CA688001CA9CAF +:10AC30008001CA0C8001C9A48001D4348001CDB444 +:10AC40008001CE848001D5588001D6B08001D4E443 +:10AC50008001CFFCEBCD4068189316951496F01F39 +:10AC6000000F0C9A0A9BE6CCFFFCF01F000D0C9A1B +:10AC70000A9BE6CCFFFAF01F000B0C9A0A9BE6CC6D +:10AC8000FFF9F01F00080C9A0A9BE6CCFFF8F01FB2 +:10AC90000006E3CD806800008001A37C8001A2FC57 +:10ACA0008001A29C8001AB3CEBCD406C14951296C8 +:10ACB00018921693E06A00DC129B0A9CF01F001A9F +:10ACC000ECC9FF98EACAFF98069B049CF01F001786 +:10ACD000ECC9FFBCEACAFFBC069B049CF01F001431 +:10ACE000ECC9FF68EACAFF68069B049CF01F0011CC +:10ACF000ECC9FF50EACAFF50069B049CF01F000EEF +:10AD0000ECC9FF44EACAFF44069B049CF01F000BF9 +:10AD1000ECC9FF30EACAFF30069B049CF01F000814 +:10AD2000E3CD806C8002E7368001D1588001D24C9F +:10AD30008001D1E88001D1C08001D21C8001CF9C6C +:10AD4000EBCD40EC1296F2E80000F4E90000ECE8EC +:10AD50000008F4E90008ECE20010F4E30010ECE86D +:10AD6000001814971695F4E90018E06B00E85D15DB +:10AD70008F7CC0D030CA6C7BF01F00066E7A6C7975 +:10AD8000149C0A9B2F492F4AF01F0003E3CD80EC4F +:10AD9000800091DC8001ACA8EBCD40C014971696E2 +:10ADA00074385808C160949E948AF60E00081438CE +:10ADB000F5DEE916F9B80900EFF89A03580CC090CF +:10ADC0005809C0C1189B0C9A6E4C1C0CF01F000A4D +:10ADD0008E180C08AE18E3CD80C05819CFA16E4B69 +:10ADE0000C9A1C0BF01F00048E180C08AE18E3CD53 +:10ADF00080C00000800091DCEBCD40E016971496F7 +:10AE00001895581AC0B0F01F000C0C99189B0E9A98 +:10AE10000A9CF01F000AE3CD80E09698968614996C +:10AE20001016169A0C9BF01F00053008EA060B0856 +:10AE3000E3CD80E0800091B88001AD98EBCD406813 +:10AE4000189316951496F01F00060C9A0A9BE6CCF0 +:10AE5000FFFCF01F0004E3CD806800008001A37CAC +:10AE60008001ADF8EBCD4068189316951496F01F4D +:10AE700000060C9A0A9BE6CCFFFCF01F0004E3CD11 +:10AE8000806800008001A37C8001ADF8EBCD4068B4 +:10AE9000189316951496F01F000F0C9A0A9BE6CC97 +:10AEA000FFFCF01F000C0C9A0A9BE6CCFFF8F01F89 +:10AEB00000090C9A0A9BE6CCFFF4F01F00060C99DF +:10AEC0000A9AE6CCFFF0320BF01F0003E3CD806856 +:10AED0008001A37C8001AD98EBCD40681893169556 +:10AEE0001496F01F000C0C9A0A9BE6CCFFFCF01F96 +:10AEF00000090C9A0A9BE6CCFFF8F01F00060C999B +:10AF00000A9AE6CCFFF4320BF01F0003E3CD806811 +:10AF10008001A37C8001AD98EBCD40681893169515 +:10AF20001496F01F000C0C9A0A9BE6CCFFFCF01F55 +:10AF300000090C9A0A9BE6CCFFF8F01F00070C9959 +:10AF40000A9AE6CCFFF7303BF01F0004E3CD80689F +:10AF50008001A37C8001A29C8001AD98EBCD40686C +:10AF6000189316951496F01F00180C9A0A9BE6CCBD +:10AF7000FFFCF01F00150C9A0A9BE6CCFFF8F01FAF +:10AF800000120C9A0A9BE6CCFFF4F01F000F0C9AFB +:10AF90000A9BE6CCFFF0F01F000C0C9A0A9BE6CC53 +:10AFA000FFECF01F000A0C9A0A9BE6CCFFEAF01FA8 +:10AFB00000080C990A9AE6CCFFE9303BF01F000527 +:10AFC000E3CD80688001A37C8001A2FC8001A29C6B +:10AFD0008001AD98EBCD4068189316951496F01F3C +:10AFE00000280C9A0A9BE6CCFFFCF01F00250C9A67 +:10AFF0000A9BE6CCFFF8F01F00220C9A0A9BE6CCD5 +:10B00000FFF4F01F00200C9A0A9BE6CCFFF2F01F21 +:10B01000001E0C9A0A9BE6CCFFF1F01F001B0C9A55 +:10B020000A9BE6CCFFF0F01F00180C9A0A9BE6CCB6 +:10B03000FFEFF01F00150C9A0A9BE6CCFFEEF01F05 +:10B0400000120C990A9AE6CCFFED306BF01F000F4E +:10B050000C9A0A9BE6CCFFE7F01F000B0C9A0A9BA8 +:10B06000E6CCFFE6F01F00080C990A9AE6CCFFE553 +:10B07000320BF01F0006E3CD806800008001A37C46 +:10B080008001A2FC8001A29C8001AD98EBCD4068BC +:10B09000189316951496F01F00150C9A0A9BE6CC8F +:10B0A000FFFCF01F00120C9A0A9BE6CCFFF8F01F81 +:10B0B000000F0C9A0A9BE6CCFFF4F01F000C0C9AD0 +:10B0C0000A9BE6CCFFF0F01F000A0C9A0A9BE6CC24 +:10B0D000FFEEF01F00080C990A9AE6CCFFED303B1A +:10B0E000F01F0005E3CD80688001A37C8001A2FCF5 +:10B0F0008001A29C8001AD98EBCD40681893169515 +:10B100001496F01F00120C9A0A9BE6CCFFFCF01F6D +:10B1100000100C9A0A9BE6CCFFFBF01F000D0C9967 +:10B120000A9AE6CCFFFA302BF01F000A0C9A0A9B11 +:10B13000E6CCFFF8F01F00050C9A0A9BE6CCFFF462 +:10B14000F01F0002E3CD80688001A37C8001A29CF7 +:10B150008001AD98EBCD4068189316951496F01FBA +:10B1600000120C9A0A9BE6CCFFFCF01F00100C9A10 +:10B170000A9BE6CCFFFBF01F000D0C990A9AE6CC67 +:10B18000FFFA302BF01F000A0C9A0A9BE6CCFFF85E +:10B19000F01F00050C9A0A9BE6CCFFF4F01F00029A +:10B1A000E3CD80688001A37C8001A29C8001AD98E2 +:10B1B000EBCD4068189316951496F01F000C0C9A6E +:10B1C0000A9BE6CCFFFCF01F000A0C9A0A9BE6CC17 +:10B1D000FFFBF01F00070C990A9AE6CCFFFA302B10 +:10B1E000F01F0004E3CD80688001A37C8001A29C55 +:10B1F0008001AD98EBCD4068189316951496F01F1A +:10B2000000090C9A0A9BE6CCFFFCF01F00070C9982 +:10B210000A9AE6CCFFFB303BF01F0004E3CD8068C8 +:10B220008001A37C8001A29C8001AD98EBCD406899 +:10B23000189316951496F01F00090C9A0A9BE6CCF9 +:10B24000FFFCF01F00070C990A9AE6CCFFFB303B8D +:10B25000F01F0004E3CD80688001A37C8001A29CE4 +:10B260008001AD98EBCD4068189316951496F01FA9 +:10B2700000090C9A0A9BE6CCFFFCF01F00070C9912 +:10B280000A9AE6CCFFFB303BF01F0004E3CD806858 +:10B290008001A37C8001A29C8001AD98EBCD406829 +:10B2A000189316951496F01F000C0C9A0A9BE6CC86 +:10B2B000FFFCF01F00090C9A0A9BE6CCFFF8F01F78 +:10B2C00000070C990A9AE6CCFFF7303BF01F000408 +:10B2D000E3CD80688001A37C8001A29C8001AD98B1 +:10B2E000EBCD4068189316951496F01F000C0C9A3D +:10B2F0000A9BE6CCFFFCF01F00090C9A0A9BE6CCE7 +:10B30000FFF8F01F00070C990A9AE6CCFFF7303BD4 +:10B31000F01F0004E3CD80688001A37C8001A29C23 +:10B320008001AD98EBCD4068189316951496F01FE8 +:10B33000000C0C9A0A9BE6CCFFFCF01F00090C9A4B +:10B340000A9BE6CCFFF8F01F00070C990A9AE6CC9E +:10B35000FFF7303BF01F0004E3CD80688001A37C41 +:10B360008001A29C8001AD98EBCD406818931695A2 +:10B370001496F01F000C0C9A0A9BE6CCFFFCF01F01 +:10B3800000090C9A0A9BE6CCFFF8F01F00070C9905 +:10B390000A9AE6CCFFF7303BF01F0004E3CD80684B +:10B3A0008001A37C8001A29C8001AD98EBCD406818 +:10B3B000189316951496F01F00090C9A0A9BE6CC78 +:10B3C000FFFCF01F00070C990A9AE6CCFFFB303B0C +:10B3D000F01F0004E3CD80688001A37C8001A29C63 +:10B3E0008001AD98EBCD4068169514961893F01F28 +:10B3F00000220C990A9AE6CCFFFC308BF01F001F4C +:10B400000C9A0A9BE6CCFFF4F01F001B0C9A0A9BD7 +:10B41000E6CCFFF0F01F00180C9A0A9BE6CCFFEC7C +:10B42000F01F00150C9A0A9BE6CCFFE8F01F0012F3 +:10B430000C9A0A9BE6CCFFE4F01F000F0C9A0A9BC3 +:10B44000E6CCFFE0F01F000E0C9A0A9BE6CCFFDE74 +:10B45000F01F000B0C9A0A9BE6CCFFDCF01F0008E3 +:10B460000C990A9AE6CCFFDA302BF01F0004E3CDEA +:10B47000806800008001A37C8001AD988001A2FC5F +:10B48000EBCD4068189316951496F01F00090C9A9E +:10B490000A9BE6CCFFFCF01F00070C990A9AE6CC49 +:10B4A000FFFB303BF01F0004E3CD80688001A37CEC +:10B4B0008001A29C8001AD98EBCD40681695149652 +:10B4C0001893F01F00060C990A9AE6CCFFFC308B0B +:10B4D000F01F0003E3CD80688001A37C8001AD985C +:10B4E000EBCD4068189316951496F01F00090C9A3E +:10B4F0000A9BE6CCFFFCF01F00070C990A9AE6CCE9 +:10B50000FFFB303BF01F0004E3CD80688001A37C8B +:10B510008001A29C8001AD98EBCD406818931695F0 +:10B520001496F01F00100C9A0A9BE6CCFFFCF01F4B +:10B53000000E0C990A9AE6CCFFFB306BF01F000B53 +:10B540000A9AE6CCFFF50C99306BF01F00080C9AB4 +:10B550000A9BE6CCFFEFF01F0004E3CD80680000FB +:10B560008001A37C8001A29C8001AD98EBCD406856 +:10B57000169514961893F01F000C0C990A9AE6CCB5 +:10B58000FFFC306BF01F00090C9A0A9BE6CCFFF61B +:10B59000F01F00070C9A0A9BE6CCFFF5F01F000491 +:10B5A000E3CD80688001A37C8001AD988001A29CDE +:10B5B000EBCD4068169514961893F01F000D0C996A +:10B5C0000A9AE6CCFFFC306BF01F000A0A9AE6CC20 +:10B5D000FFF60C99302BF01F00070C9A0A9BE6CC63 +:10B5E000FFF4F01F0005E3CD806800008001A37C1C +:10B5F0008001AD988001AB3CEBCD40681695149668 +:10B600001893F01F000D0C990A9AE6CCFFFC306BE2 +:10B61000F01F000A0A9AE6CCFFF60C99302BF01FB7 +:10B6200000070C9A0A9BE6CCFFF4F01F0005E3CD5F +:10B63000806800008001A37C8001AD988001AB3C54 +:10B64000EBCD4068169514961893F01F00100C99D6 +:10B650000A9AE6CCFFFC306BF01F000D0C9A0A9B97 +:10B66000E6CCFFF6F01F000B0C9A0A9BE6CCFFF429 +:10B67000F01F00080C990A9AE6CCFFF2302BF01F5D +:10B680000004E3CD806800008001A37C8001AD98B8 +:10B690008001A2FCEBCD4068169514961893F01F1C +:10B6A000000A0C990A9AE6CCFFFC306BF01F0007E9 +:10B6B0000C990A9AE6CCFFF6302BF01F0004E3CD7C +:10B6C000806800008001A37C8001AD98EBCD4068CC +:10B6D000169514961893F01F000A0C990A9AE6CC56 +:10B6E000FFFC306BF01F00070C990A9AE6CCFFF6BE +:10B6F000302BF01F0004E3CD806800008001A37CA4 +:10B700008001AD98EBCD4068189316951496F01F04 +:10B7100000220C9A0A9BE6CCFFFCF01F00200C9A3A +:10B720000A9BE6CCFFFAF01F001D0C9A0A9BE6CCA0 +:10B73000FFF8F01F001A0C990A9AE6CCFFF6306B5E +:10B74000F01F00170C9A0A9BE6CCFFF0F01F0015C3 +:10B750000C9A0A9BE6CCFFEFF01F00120C990A9A94 +:10B76000E6CCFFEE302BF01F000E0C9A0A9BE6CCC5 +:10B77000FFECF01F00090C9A0A9BE6CCFFE8F01FD3 +:10B7800000060C9A0A9BE6CCFFE4F01F0007E3CD0D +:10B79000806800008001A37C8001A2FC8001AD983C +:10B7A0008001A29C8001AB3CEBCD406816951496BD +:10B7B0001893F01F000C0C990A9AE6CCFFFC306B32 +:10B7C000F01F00090C9A0A9BE6CCFFF6F01F000759 +:10B7D0000C9A0A9BE6CCFFF5F01F0004E3CD8068CD +:10B7E0008001A37C8001AD988001A29CEBCD4068D4 +:10B7F000169514961893F01F000C0C990A9AE6CC33 +:10B80000FFFC306BF01F00090C9A0A9BE6CCFFF698 +:10B81000F01F00070C9A0A9BE6CCFFF5F01F00040E +:10B82000E3CD80688001A37C8001AD988001A29C5B +:10B83000EBCD4068189316951496F01F00120C9AE1 +:10B840000A9BE6CCFFFCF01F00100C9A0A9BE6CC8A +:10B85000FFFAF01F000D0C9A0A9BE6CCFFF8F01FD0 +:10B86000000A0A9AE6CCFFF60C99306BF01F00072D +:10B870000C9A0A9BE6CCFFF0F01F0005E3CD806830 +:10B880008001A37C8001A2FC8001AD988001AB3CCB +:10B89000EBCD4068189316951496F01F00100C9A83 +:10B8A0000A9BE6CCFFFCF01F000E0C9A0A9BE6CC2C +:10B8B000FFFAF01F000B0C990A9AE6CCFFF8306BE8 +:10B8C000F01F00080C990A9AE6CCFFF2302BF01F0B +:10B8D0000005E3CD806800008001A37C8001A2FC0C +:10B8E0008001AD98EBCD4068189316951496F01F23 +:10B8F00000090C9A0A9BE6CCFFFFF01F00060C998A +:10B900000A9AE6CCFFFE302BF01F0003E3CD8068DF +:10B910008001A29C8001AD98EBCD406816951496ED +:10B920001893F01F00130C990A9AE6CCFFFF306BB6 +:10B93000F01F00100C9A0A9BE6CCFFF9F01F000CD8 +:10B940000C9A0A9BE6CCFFF8F01F00090A9AE6CC95 +:10B95000FFF70C99306BF01F00070C9A0A9BE6CC9E +:10B96000FFF1F01F0003E3CD806800008001A29C7E +:10B970008001AD98EBCD4068189316951496F01F92 +:10B9800000060C9A0A9BE6CCFFFCF01F0004E3CDF6 +:10B99000806800008001A37C8001B918EBCD40686D +:10B9A0001696149518931499169A306BF01F000888 +:10B9B0000A9A0C9BE6CCFFFAF01F00060A9A0C9B31 +:10B9C000E6CCFFF9F01F0003E3CD80688001AD985D +:10B9D0008001A29CEBCD4068189316951496F01F39 +:10B9E00000060C9A0A9BE6CCFFFCF01F0004E3CD96 +:10B9F000806800008001A37C8001B99CEBCD406889 +:10BA0000189316951496F01F00090C9A0A9BE6CC21 +:10BA1000FFFFF01F00060C990A9AE6CCFFFE306B80 +:10BA2000F01F0003E3CD80688001A29C8001AD98E7 +:10BA3000EBCD4068189316951496F01F00060C9AEB +:10BA40000A9BE6CCFFFCF01F0004E3CD80680000F9 +:10BA50008001A37C8001B9FCD4011499169A308B23 +:10BA6000F01F0002D80200008001AD98EBCD4068C5 +:10BA7000169514961893F01F00090A9AE6CCFFFC5D +:10BA80000C99306BF01F00060C9A0A9BE6CCFFF66F +:10BA9000F01F0004E3CD80688001A37C8001AD9895 +:10BAA0008001A2FCEBCD4068189316951496F01F08 +:10BAB00000090C9A0A9BE6CCFFFCF01F00070C99CA +:10BAC0000A9AE6CCFFFB303BF01F0004E3CD806810 +:10BAD0008001A37C8001A29C8001AD98D4011499BF +:10BAE000169A320BF01F0002D80200008001AD98B8 +:10BAF000EBCD4068189316951496F01F00180C9A19 +:10BB00000A9BE6CCFFE0F01F00160C9A0A9BE6CCDD +:10BB1000FFDEF01F00140C9A0A9BE6CCFFDDF01F3D +:10BB200000110C990A9AE6CCFFDC306BF01F000E76 +:10BB30000C9A0A9BE6CCFFD6F01F000C0C9A0A9BCD +:10BB4000E6CCFFCEF01F00070C9A0A9BE6CCFFCD97 +:10BB5000F01F0004E3CD80688001BADC8001A2FC04 +:10BB60008001A29C8001AD988001BA58EBCD40685D +:10BB7000189316951496F01F00060C9A0A9BE6CCB3 +:10BB8000FFFCF01F0004E3CD806800008001A37C6F +:10BB90008001BAF0D4011499169A303BF01F0002CC +:10BBA000D80200008001AD98EBCD40E018971695C3 +:10BBB0001496F01F000D6E1C580CC0800C990A9A48 +:10BBC0006E0BF01F000AE3CD80E05816C0918A99F1 +:10BBD0006A4812088F186E098A181208AA18E3CD4D +:10BBE00080E000008001A37C8001AD98EBCD40682F +:10BBF000189316951496F01F00060C9A0A9BE6CC33 +:10BC0000FFFCF01F0004E3CD806800008001A37CEE +:10BC10008001BBA8EBCD4068189316951496F01FD1 +:10BC200000100C9A0A9BE6CCFFFCF01F000E0C994A +:10BC30000A9AE6CCFFFB303BF01F000B0A9AE6CCD9 +:10BC4000FFF80C99308BF01F00080C9A0A9BE6CC89 +:10BC5000FFF0F01F0006E3CD806800008001A37CA8 +:10BC60008001A29C8001AD988001BBA8EBCD40680B +:10BC7000169514961893F01F00090A9AE6CCFFFC5B +:10BC80000C99308BF01F00060C9A0A9BE6CCFFF44F +:10BC9000F01F0004E3CD80688001A37C8001AD9893 +:10BCA0008001BBA8EBCD40801697189B580AC0F1C5 +:10BCB0008E1C8E89FDDCC010FCC8FFF91238C285CD +:10BCC000F8C8FFF88F3AAE18E3CD8080581AC070DC +:10BCD0008E1CF8C8FFF8AE18E3CD80808E9A8E894E +:10BCE000F4C8FFF91238C2C46E48140811F9B889B3 +:10BCF00011EAB89A11D9B8A911CAB8BA11B9B8C914 +:10BD000011AAB8DA1199B8E9118AB8FACE2B17F846 +:10BD10006E4A1C0AB48817E9B49917D8B4A817C991 +:10BD2000B4B917B8B4C817A9B4D91798B4E8178923 +:10BD3000B4F98E1CF8C8FFF8AE18E3CD8080300B44 +:10BD4000308A8F3BF01F00028E1CCC4B800091D0BC +:10BD5000EBCD4068189316951496F01F000C0C9AC2 +:10BD60000A9BE6CCFFF8F01F000A0C9A0A9BE6CC6F +:10BD7000FFF6F01F00070C9A0A9BE6CCFFF4F01FB9 +:10BD80000005E3CD806800008001BCA48001A2FC16 +:10BD90008001AB3CEBCD40F8206D169714961499BA +:10BDA0001895169A306BF01F002D0C9A0E9BEACC5A +:10BDB000FFFAF01F002B0C9A0E9BEACCFFF9F01F44 +:10BDC00000280C9A0E9BEACCFFF8F01F00260C9A74 +:10BDD0000E9BEACCFFF0F01F00240C9A0E9BEACCDD +:10BDE000FFECF01F0021318A0E9B1A9CF01F001FF0 +:10BDF000EAC3FFE81A940C9A1A9B069CF01F001ADB +:10BE00005816C1801A9B0C9A6A7CF01F00199A98E8 +:10BE10008E992048F00901098B690C9A069C0E9BAB +:10BE2000F01F00116A698E181208AE182FADE3CD0D +:10BE300080F86A698E182FC81208E06B00E8BA080B +:10BE40006E5CF01F000C8B7CCF20505C1A9B0C9A10 +:10BE5000F01F0007CE3B00008001AD988001A29C3E +:10BE60008001BCA48001A37C800091DC8001BD50D6 +:10BE70008001D3ECEBCD4068189316951496F01F13 +:10BE800000120C9A0A9BE6CCFFFCF01F00100C9AE3 +:10BE90000A9BE6CCFFFAF01F000D0C9A0A9BE6CC39 +:10BEA000FFF8F01F00090C9A0A9BE6CCFFF4F01F84 +:10BEB00000060C9A0A9BE6CCFFF0F01F0005E3CDCC +:10BEC000806800008001A37C8001A2FC8001BD94F9 +:10BED000EBCD40E0189716951496F01F000B0C9AC6 +:10BEE0000A9BEECCFFFCF01F00090FD93008F009C7 +:10BEF0001800C0700C9A0A9BEECCFFF8F01F0004EB +:10BF0000E3CD80E08001A37C8001B8E48001BD9492 +:10BF1000EBCD4060202D301A18951696FACCFFFE16 +:10BF2000F01F00089A181BF92FE8F0090109AC0965 +:10BF30001BCA8B5A1BD88B482FEDE3CD80600000C5 +:10BF40008001A444EBCD40E07808975818971696E6 +:10BF50007859E049003FE0880004E3CF80E0FEF834 +:10BF6000029AF009032F78455815E0800127E04533 +:10BF70000080CF41780C301AF01F00A1E3CF90E091 +:10BF800078485808C391780C301AF01F009EE3CF10 +:10BF900090E07848F0C90005E049008FFE9BFFDF84 +:10BFA000FEF80264F009032F7848E0480081E08041 +:10BFB000010CE08A002BE0480083E0800118E08556 +:10BFC0000110E0480085CCA1780C301AF01F008FDA +:10BFD000E3CF90E0780C301AF01F008DE3CF90E0B3 +:10BFE0007848F0C90001E049009BFE9BFFB8FEF8CD +:10BFF0000222F009032FE0480081CB01780C301AAF +:10C00000F01F0085E3CF90E05848E08000E4E0486E +:10C010000080CA41781A300B780CF01F00806E0C3B +:10C020000C9B301AF01F007EE3CF90E0780C301AA2 +:10C03000F01F007CE3CF90E0780C301AF01F007AFC +:10C04000E3CF90E0780C301AF01F0078E3CF90E057 +:10C05000780C301AF01F0076E3CF90E0780C301A9D +:10C06000F01F0074E3CF90E0780C301AF01F0072DC +:10C07000E3CF90E0780C301AF01F0070E3CF90E02F +:10C08000780C301AF01F006EE3CF90E0780C301A75 +:10C09000F01F006CE3CF90E0780C301AF01F006ABC +:10C0A000E3CF90E0780C301AF01F0068E3CF90E007 +:10C0B000780C301AF01F0066E3CF90E0780C301A4D +:10C0C000F01F0064E3CF90E0780C301AF01F00629C +:10C0D000E3CF90E0780C301AF01F0060E3CF90E0DF +:10C0E000780C301AF01F005EE3CF90E0780C301A25 +:10C0F000F01F005CE3CF90E0780C301AF01F005A7C +:10C10000E3CF90E0780C301AF01F0058E3CF90E0B6 +:10C11000780C301AF01F0056E3CF90E0780C301AFC +:10C12000F01F0054E3CF90E0780C301AF01F00525B +:10C13000E3CF90E0780C301AF01F0050E3CF90E08E +:10C14000780C301AF01F004EE3CF90E0780C301AD4 +:10C15000F01F004CE3CF90E0780C301AF01F004A3B +:10C16000E3CF90E0780C301AF01F0048E3CF90E066 +:10C17000780C301AF01F0046E3CF90E0780C301AAC +:10C18000F01F0044E3CF90E0780C301AF01F00421B +:10C19000E3CF90E0780C301AF01F0040E3CF90E03E +:10C1A000780C301AF01F003EE3CF90E0780C301A84 +:10C1B000F01F003CE3CF90E0780C0A9AF01F003AA1 +:10C1C0000A9CE3CD80E0780C301AF01F0038E3CFF2 +:10C1D00090E0780C301AF01F0036E3CF90E0780C36 +:10C1E000301AF01F0034E3CF90E0780C301AF01FC3 +:10C1F0000032E3CF90E000008003B8288001AAEC71 +:10C200008001A4988003B9288001B3248001A37C15 +:10C210008003BB688001A4CC800091D08001BC1455 +:10C220008001BAA48001A4748001BA6C8001AC546E +:10C230008001AA808001AE8C8001AAC88001AAA4D6 +:10C240008001AA208001AF5C8001A9CC8001A9787F +:10C250008001A9488001A8F48001A8D08001A884A9 +:10C260008001A8608001B1548001B1B08001B1F4B7 +:10C270008001A8188001AA508001B0F88001A83C74 +:10C280008001A7F48001B4E08001B56C8001B5B0F5 +:10C290008001B5F88001B6408001BED08001B5189C +:10C2A0008001B9748001AE3C8001B3AC8001A6145A +:10C2B0008001B3688001B2E0EBCD40C012971499C1 +:10C2C0008E96109A582CC280E08A0008584CC360A1 +:10C2D000587CC190E3CF80C0580CC0A0581CCFB18F +:10C2E00058EBFE9BFFF9FEF80312F00B032F580BDF +:10C2F000CF21129C0E9BF01F00C28E98F006010CFD +:10C30000E3CD80C0202BE04B007FFE9BFFE5FEF8D5 +:10C3100002F2F00B032F582BE080015DE089001A38 +:10C32000580BC260581BCD71129C0E9BF01F00B6BB +:10C330008E98F006010CE3CD80C0580BCCC1129C46 +:10C340000E9BF01F00B28E98F006010CE3CD80C06A +:10C35000584BC170E0850148585BCBD1129C0E9BB5 +:10C36000F01F00AB8E98F006010CE3CD80C0129C4C +:10C370000E9BF01F00A88E98F006010CE3CD80C044 +:10C38000129C0E9BF01F00A48E98F006010CE3CDCA +:10C3900080C0129C0E9BF01F00A18E98F006010C2D +:10C3A000E3CD80C0129C0E9BF01F009D8E98F0067E +:10C3B000010CE3CD80C0129C0E9BF01F009A8E985A +:10C3C000F006010CE3CD80C0129C0E9BF01F00967E +:10C3D0008E98F006010CE3CD80C0129C0E9BF01FDE +:10C3E00000938E98F006010CE3CD80C0129C0E9B4A +:10C3F000F01F008F8E98F006010CE3CD80C0129CD8 +:10C400000E9BF01F008C8E98F006010CE3CD80C0CF +:10C41000129C0E9BF01F00888E98F006010CE3CD55 +:10C4200080C0129C0E9BF01F00858E98F006010CB8 +:10C43000E3CD80C0129C0E9BF01F00818E98F00609 +:10C44000010CE3CD80C0129C0E9BF01F007E8E98E5 +:10C45000F006010CE3CD80C0129C0E9BF01F007A09 +:10C460008E98F006010CE3CD80C0129C0E9BF01F4D +:10C4700000778E98F006010CE3CD80C0129C0E9BD5 +:10C48000F01F00738E98F006010CE3CD80C0129C63 +:10C490000E9BF01F00708E98F006010CE3CD80C05B +:10C4A000129C0E9BF01F006C8E98F006010CE3CDE1 +:10C4B00080C0129C0E9BF01F00698E98F006010C44 +:10C4C000E3CD80C0129C0E9BF01F00658E98F00695 +:10C4D000010CE3CD80C0129C0E9BF01F00628E9871 +:10C4E000F006010CE3CD80C0129C0E9BF01F005E95 +:10C4F0008E98F006010CE3CD80C0129C0E9BF01FBD +:10C50000005B8E98F006010CE3CD80C0129C0E9B60 +:10C51000F01F00578E98F006010CE3CD80C0129CEE +:10C520000E9BF01F00548E98F006010CE3CD80C0E6 +:10C53000129C0E9BF01F00508E98F006010CE3CD6C +:10C5400080C0129C0E9BF01F004D8E98F006010CCF +:10C55000E3CD80C0129C0E9BF01F00498E98F00620 +:10C56000010CE3CD80C0129C0E9BF01F00468E98FC +:10C57000F006010CE3CD80C0129C0E9BF01F004220 +:10C580008E98F006010CE3CD80C0129C0E9BF01F2C +:10C59000003F8E98F006010CE3CD80C0129C0E9BEC +:10C5A000F01F003B8E98F006010CE3CD80C0129C7A +:10C5B0000E9BF01F00388E98F006010CE3CD80C072 +:10C5C000129C0E9BF01F00348E98F006010CE3CDF8 +:10C5D00080C0129C0E9BF01F00318E98F006010C5B +:10C5E000E3CD80C0129C0E9BF01F002D8E98F006AC +:10C5F000010CE3CD80C000008003BDD88001A49869 +:10C600008003BE148001BC6C8001AE648001A5C0B3 +:10C610008001B4B88001A5F08001B8308001B29CDF +:10C620008001B6948001B6CC8001B9D48001BA30C3 +:10C630008001BB6C8001B7048001B7EC8001BA6C4B +:10C640008001B8908001BE748001A5188001A55CAE +:10C650008001B7A88001A7308001A7888001AE8C37 +:10C660008001AED88001A7D08001AB148001AF1843 +:10C670008001A9FC8001A9A88001AFD48001A92470 +:10C680008001B08C8001A8A88001B22C8001A7ACE9 +:10C690008001B2648001BBEC8001B4808001B3E40E +:10C6A000EBCD40FE208D306A18977853784578019D +:10C6B000FAC2FFE6300B049CF01F00384B88F139BA +:10C6C000010BE06AFFFFFB69001E300B1A9CF01F94 +:10C6D0000035302A1A9B049CF01F0033029A302840 +:10C6E0001A990A9B069CF01F00319A194B08F9D938 +:10C6F000C0101188103CF9B60200F1DCE318E06AC2 +:10C7000000FFF1DAE326EDD9E309FBF93C01F9D6A4 +:10C71000E30C1A944A78118A580AC060F4C80001E0 +:10C72000F9E80008C2918F3CF01F00238F2CC31042 +:10C730006E3A300BF01F0019FB66001F6E2BFB6377 +:10C74000001CFB65001D8E78F5D8C01020281A9CAF +:10C75000FB58001AF01F0013049C1A9B300AF01FAC +:10C7600000121A99029A0A9B069C3008F01F000FCB +:10C770002F8DE3CF90FE9A18F4C90001F9E9000962 +:10C78000F40901095C591208120CBA181206CCCB34 +:10C790002F8DE3CD80FE0000800091D0000087F453 +:10C7A0008001C7B88001A4448001C2B8000079E5C7 +:10C7B000000079E48000920030083019B838B818C9 +:10C7C000B828B80A3008994B993999285EFCD703E4 +:10C7D000EBCD4068189316951496F01F00090C9A3B +:10C7E0000A9BE6CCFFFFF01F00060C9A0A9BE6CCE2 +:10C7F000FFFEF01F0004E3CD806800008001A29CD2 +:10C800008001A2FCEBCD40681696149518931499FC +:10C81000169A303BF01F00050A9A0C9BE6CCFFFDF0 +:10C82000F01F0003E3CD80688001AD988001A29CD9 +:10C83000EBCD40681696149518931499169A303BD0 +:10C84000F01F00050A9A0C9BE6CCFFFDF01F0003C9 +:10C85000E3CD80688001AD988001A29CD431FACEEE +:10C86000FFDC189616971494129210907C157C0198 +:10C87000581AC2D0C153582AC1300D893FF8F00967 +:10C880001800C2100D98E2081900E08B0005E008BE +:10C890001900C6E23FF83009AC88AC99D83A8E1836 +:10C8A000AE383FF80D89F0091800C0D00C9C089AEA +:10C8B0000E9BF01F0034089A0E9BECCCFFFFF01F7C +:10C8C0000031CDCB3008300CAC98D83296285808BF +:10C8D000C4C0B618AE3830088B08AC983FFAAC8AA2 +:10C8E0008E198E08F2081900FE98FFEE1494ECC31E +:10C8F000FFFFC1D8E8081800EDF41E000D9A8E184D +:10C900008E89F408000B5C781019123AE089002631 +:10C91000AE1B6A082FF88B080D89E8091800CB3187 +:10C920008E198E08F2081900FE98FFCEAE39301A23 +:10C930000E9B0C9CF01F0013301A0E9B069CF01FE0 +:10C9400000110D88E4081800CD618E888E990D9A2B +:10C950001218103AE08A000E3FF83009AC88AC9902 +:10C960008E182028AE08C8AB9618B628CB4BDA3AFA +:10C970006A0A6E293018F00A094810498F29C7EB56 +:10C980008001A29CEBCD4040201D1A9E9AF65C7857 +:10C990001ADE1AD6F01F00032FED2FFDE3CD8040E5 +:10C9A0008001C85CEBCD40E0302818951AD8169667 +:10C9B00014973069F01F00072FFD580CC0700E9AB5 +:10C9C0000C9BEACCFFFEF01F0004E3CD80E00000EA +:10C9D0008001C9848001A2FCEBCD40E0301818959D +:10C9E0001AD81696149732A9F01F00072FFD580C7D +:10C9F000C0700E9A0C9BEACCFFFEF01F0004E3CD42 +:10CA000080E000008001C9848001A29CEBCD40E061 +:10CA1000305818951AD8169614973029F01F001020 +:10CA20002FFD580CC190EACCFFFE0E9A0C9BF01F14 +:10CA3000000D0E9A0C9BEACCFFFCF01F000B0E9A27 +:10CA40000C9BEACCFFFBF01F00080E9A0C9BEACC73 +:10CA5000FFFAF01F0005E3CD80E000008001C984EB +:10CA60008001A2FC8001A29CEBCD40E0301818951B +:10CA70001AD8169614973039F01F00072FFD580C5E +:10CA8000C0700E9A0C9BEACCFFFEF01F0004E3CDB1 +:10CA900080E000008001C9848001A29CEBCD40E0D1 +:10CAA000306818951AD8169614973049F01F001060 +:10CAB0002FFD580CC190EACCFFFE0E9A0C9BF01F84 +:10CAC000000D0E9A0C9BEACCFFFDF01F000A0E9A97 +:10CAD0000C9BEACCFFFCF01F00080E9A0C9BEACCE2 +:10CAE000FFFAF01F0005E3CD80E000008001C9845B +:10CAF0008001A29C8001A2FCEBCD40E0301818958B +:10CB00001AD81696149730A9F01F00072FFD580C5D +:10CB1000C0700E9A0C9BEACCFFFEF01F0004E3CD20 +:10CB200080E000008001C9848001A29CD43120BD36 +:10CB30005019500818961697581AC390C272E06898 +:10CB400000FDE06900DD1AD8300A3018F01F005CE3 +:10CB50002FFD580CC1E0300A0E9BECCCFFFEF01FFD +:10CB60000059300A0E9BECCCFFFDF01F0056300A36 +:10CB70000E9BECCCFFFCF01F0053ECCCFFFB0E9B9C +:10CB8000300AF01F0050301CC048582AC040301CEA +:10CB90002F5DD83219893FF8F0091800E080008B2A +:10CBA0009618301C2FA8B6182F5DD832761850581A +:10CBB000B1485038760A504AF6E80008F8C2FFFE3D +:10CBC000FAE90018F8C3FFFDF6EA0010F8C9FFFB08 +:10CBD000FAEB0020F8C4FFFC50293FF5FAC0FFD85B +:10CBE000E06100FDC0680D998E382FE81208AE286C +:10CBF0001AD030181AD1E06900DD109A0E9B0C9CF7 +:10CC0000F01F00312FED580CC4105805FBF5500AE9 +:10CC1000FBF8400AF9B90401F1D9E408EBD8E405BE +:10CC2000301A0E9B049CF01F0027301A0E9B069CA6 +:10CC3000F01F0024301A0E9B089CF01F00220DA844 +:10CC40003009F2081800CD010DB83509F2081800B6 +:10CC5000CCB10DC83F29F2081800CC61301A0E9BE8 +:10CC6000402CF01F00180DD84019F2081800CBC155 +:10CC70004038301CAE28F80509496E2812488F2824 +:10CC800040095809C8509305C84B4038FB58001458 +:10CC9000FAE80020EEE90010FAEA0010EEEB0000DE +:10CCA000FAE80018EEE90008AC9C3FF8AC882F5D6C +:10CCB000D8323008B898300CC6CB00008001C98447 +:10CCC0008001A29C8001C85CD431207D1895169704 +:10CCD00014961293581AC110C0B2300830290C9A19 +:10CCE0000E9B0A9CF01F0032C5712F9DD832582A26 +:10CCF000CF50301C2F9DD83276185018760AF0008D +:10CD00001410500A1A91F6E80008F8C4FFFAFAE97C +:10CD100000083FF6F6EA0010FAC2FFE8FAEB00104E +:10CD2000C1A85806FBF65006FBF84006F9B9040105 +:10CD3000F1D9E408EDD8E406301A0E9B089CF01FE8 +:10CD4000001D0BE8E6081800C1D00B998E382FE8BB +:10CD50001208AE2804983029301A0E9B0A9CF01F46 +:10CD60000014CE01BA20E2E80010EEE90010E2E87B +:10CD70000000EEE90000E2EA0008EEEB00082F9D5B +:10CD8000D83230186E29F006094AAE201449109C9A +:10CD90008F292F9DD8320B982FF8EACCFFFA0C9AE6 +:10CDA0000E9BAA98F01F0003301CCA5B8001CB2C9D +:10CDB0008001A29CEBCD40EC206D301918971693A2 +:10CDC0001495F01F002DC0412FADE3CD80ECEECCCB +:10CDD000FFF90A9A069BF01F00290A9A069BEECCDF +:10CDE000FFF8F01F00260A9A069BEECCFFF7F01F13 +:10CDF00000230A9A069BEECCFFF6F01F00210A9A48 +:10CE0000069BEECCFFF2F01F001E0A9A069BEECCAA +:10CE1000FFEEF01F001B0A9A069BEECCFFEAF01F04 +:10CE2000001858055F0858255F091248CCE06608CD +:10CE30005008661886160A9A5018EBD8B010BA1522 +:10CE4000E6E80008FAE900082026E6E20010E068BB +:10CE500000FD0A16AE961A9BFAE300100E9C1AD833 +:10CE6000E06900DD3018F01F00072FFD2FADE3CD86 +:10CE700080EC00008001CCC88001A29C8001C7D05A +:10CE80008001C984EBCD40EC206D18971693149562 +:10CE9000582AC18119893FF8F0091800F9F91801D9 +:10CEA000F7F81201F9BA0102F1DAE108F1D9E10863 +:10CEB000F7F81C01F9B80000F9F80E012FADE3CD29 +:10CEC00080EC3009F01F0019CFA0EECCFFF90A9AD0 +:10CED000069BF01F00170A9A069BEECCFFF8F01F86 +:10CEE00000145805CEC166085008661886160A9ABE +:10CEF0005018EBD8B010BA15E6E80008FAE90008B7 +:10CF00002026E6E20010E06800FD0A16AE961A9BA5 +:10CF1000FAE300100E9C1AD8E06900DD3018F01F0B +:10CF200000052FFDCCCB00008001CCC88001A29C65 +:10CF30008001C984D42112951497580A5F095805B5 +:10CF40005F08169A1248C2510B986E29F0C4FFFE72 +:10CF5000F2C800015BD8E08B0015129C089B5D1A9B +:10CF600018965806C0C06E086E192FF80809089A5E +:10CF70000A9B8F088F190C9CF01F00080C9CD8226C +:10CF8000089B5D1A300818968F2C8F188F08CEAB2F +:10CF900030060C9CD8220000800091DCEBCD40FCD8 +:10CFA00012951494580A5F0958055F0818921248A0 +:10CFB0001693C191300995296A085808E08A00162D +:10CFC00012966A270E99089A069B049CF01F000B84 +:10CFD0002FF6EEF7FFF86A085807F7B701F80C3894 +:10CFE000FE99FFF2E3CD80FCEAE80000F4E90000DE +:10CFF0006A2A892AE3CD80FC8001CF34EBCD40FC46 +:10D0000018931695581AC2C0C053582AC5E0E3CDEC +:10D0100080FC782778085808FE9AFFFB7819580991 +:10D02000FE9AFFF79698300612087649F208000437 +:10D030000F9A0E9B2FEA1414089CF01F00332FF652 +:10D04000EEF7FFF866085807F7B701F80C38FE99B5 +:10D05000FFF166198A181208AA18E3CD80FC9628F9 +:10D060005808C3C0B618F9D8B010AA3C300830121E +:10D0700087088718872810948A1C8A0E189AFC0C37 +:10D080001900C212F7DAC0106A46EC0B00081199B9 +:10D09000F2C7FFFE5827C250F1DEC0101618103735 +:10D0A000E0890020E40409496A2B2FF4F3EB00081F +:10D0B000C1C0F4070008AA18F9D8B010189AFC0CDF +:10D0C0001900CE13E3CD80FC781C580CFE9AFFA10A +:10D0D00096181808B618E3CD80FC961CB62CCC6BBD +:10D0E000AA0CFDDCB010CCBBF3EB1008069A8A99B1 +:10D0F0008B28EC090009485B6A5CF01F00058A1A5E +:10D100008A0ECD8B800091DC8001D3EC8001CF347E +:10D11000EBCD40F83FF510941697149340661388B2 +:10D12000EA081800C05130070E9CE3CD80F858047F +:10D130005F1858065F991268CF700C9B5D1718979F +:10D14000C0600C9A089BF01F0004CEFBA685A69C2D +:10D15000CECB0000800091DCEBCD40C0129EF2E807 +:10D160000000F4E9000014977C2A8F2A18961D8984 +:10D17000169C3FF8F0091800C1401D993058F0097D +:10D180001800E088000F2039E06A5556EA1A555514 +:10D19000F20B141FF20A04481619F2090019C028EC +:10D1A00030091AD9189B1C990C9C7C280E9AF01FE8 +:10D1B00000042FFD8F2CE3CD80C000008001D11032 +:10D1C000EBCD406CF2E20000F4E3000072289528F9 +:10D1D0001495722813961AD6F01F00032FFD8B2C7E +:10D1E000E3CD806C8001D110EBCD406FF2E2000006 +:10D1F000F4E30000F2E00008F4E10008F2E20010BD +:10D20000F4E300101495725813961AD6F01F000319 +:10D210002FFD8B5CE3CD806F8001D110EBCD406F93 +:10D22000F2E20000F4E30000F2E00008F4E100089C +:10D23000724895481495724813961AD6F01F000349 +:10D240002FFD8B4CE3CD806F8001D110EBCD406C76 +:10D25000F2E20000F4E30000722895281495722889 +:10D2600013961AD6F01F00032FFD8B2CE3CD806C94 +:10D270008001D110D421310418971AD41696149530 +:10D2800030183329F01F00142FFD580CC0B058057A +:10D29000C0E18C986C4C0F9A100CEECBFFFEF01F87 +:10D2A000000F0F998C181208AC18D8225815CFA16E +:10D2B0000F9AE80A1800E08800073FF83009AE88A6 +:10D2C000AE99CF0B8C986C4BEECCFFFE100BF01F81 +:10D2D0000003CE8B8001C984800091DCD4213018FA +:10D2E000189716961495308410991AD4F01F0014CC +:10D2F0002FFD580CC0B05805C0E18C986C4C0F9AAB +:10D30000100CEECBFFFEF01F000F0F998C181208C7 +:10D31000AC18D8225815CFA10F9AE80A1800E08857 +:10D3200000073FF83009AE88AE99CF0B8C986C4B54 +:10D33000EECCFFFE100BF01F0003CE8B8001C984E2 +:10D34000800091DCEBCD40E0320930081AD9189505 +:10D35000169714961099F01F00132FFD580CC0F06B +:10D360005806C0F18E986E4C0B9A100CEACBFFFE5B +:10D37000F01F000D0B998E181208AE18E3CD80E057 +:10D380005816CF918E986E4B0B9A100BEACCFFFE7D +:10D39000F01F00050B998E181208AE18CF0B000075 +:10D3A0008001C984800091ACD421201D7809189691 +:10D3B000F2C800015BD8E08B0014F2C80008C0E09E +:10D3C0001A943005C0280E98500870079105680C13 +:10D3D000F01F00068D055807CF712FFDD8223008A9 +:10D3E00099082FFDD8220000800091E8EBCD40C0C5 +:10D3F00018971696F6CCFFF8F01F000DC130EEF826 +:10D40000FFF8EEC900089908F8C7FFF8930C9916C1 +:10D410000C9AE06B00FF0E9CF01F00060E9CE3CD03 +:10D4200080C018970E9CE3CD80C000008000920061 +:10D43000800091D0EBCD40FC32E818931AD81692B8 +:10D44000149430683079F01F00232FFD580CC03140 +:10D45000E3CD80FC089A049BE6CCFFFEF01F001E83 +:10D4600007993058F0091800E088001F2039E06A59 +:10D470005556EA1A5555F20B141FF20A0448F20BDE +:10D4800001055814C18030060C972FF6662C0899B8 +:10D490000E0C049A2FD7303BF01F00100C35FE996C +:10D4A000FFF6E3CD80FC5814F9B80000E7F80A0253 +:10D4B000E3CD80FCEA050017645C0E9BF01F0008BA +:10D4C000872CCC700E9A300BF01F0006CDDB0000CD +:10D4D0008001C9848001BB948001AD988001D3ECA8 +:10D4E000800091D0D421189616951497582AC161BE +:10D4F00019893FF8F0091800F9F91801F7F8120135 +:10D50000F9BA0102F1DAE108F1D9E108F7F81C01F2 +:10D51000F9B80000F9F80E01D82230083049F01FA0 +:10D52000000CC0C00D98F0C400045817C0800E99BC +:10D530000A9A089B6C2CF01F0007D822089B6A5C93 +:10D54000F01F00058D2CCF41CF9B00008001CB2C1C +:10D550008001AD988001D3ECEBCD40FC206D189498 +:10D5600016951493582AC18119893FF8F0091800BB +:10D57000F9F91801F7F81201F9BA0102F1DAE10834 +:10D58000F1D9E108F7F81C01F9B80000F9F80E012B +:10D590002FADE3CD80FC30083019F01F0040CF9054 +:10D5A0006A1E501E6A0A500AEAE80008FAE90008F2 +:10D5B000EAEA0010FAEB0010EDDEB0105813C600D6 +:10D5C000E8C7FFFA0999ECC8FFFE12080E9CE5D8DF +:10D5D000B010069A0A9BF01F00328A18E40819005E +:10D5E000CD82069A0A9BE8CCFFF8F01F002E8A181D +:10D5F000E4081900CCE2E8CCFFF4069A0A9BF01F7D +:10D600000028685C88693008F0091900C0E01896A5 +:10D6100030070C9C2FF7069A0A9BF01F00222FC69A +:10D6200088E80E38FE99FFF78A18E4081900CB1233 +:10D63000069AE8CCFFF20A9BF01F0019685888E9A7 +:10D64000887AF009002C3008F00A1900C0E018961A +:10D6500030070C9C2FF7069A0A9BF01F00132FC669 +:10D6600088F80E38FE99FFF78A18E4081900C912E5 +:10D67000069A0A9BE8CCFFF0F01F0009C8ABE8C788 +:10D68000FFFA30EA300B0E9CF01F0008099B6A5C21 +:10D69000F01F0007895CC97B8001CB2C8001A2FCB4 +:10D6A0008001C8308001C804800091D08001D3EC93 +:10D6B000EBCD40FC206D189416951493582AC18127 +:10D6C00019893FF8F0091800F9F91801F7F8120163 +:10D6D000F9BA0102F1DAE108F1D9E108F7F81C0121 +:10D6E000F9B80000F9F80E012FADE3CD80FCE06839 +:10D6F00000FF33091AD83008F01F00532FFD580CD3 +:10D70000CF406A1E501E6A0A500AEAE80008FAE989 +:10D710000008EAEA0010FAEB0010EDDEB010581332 +:10D72000E0800085E8C7FFFE0999ECC8FFFE1208FB +:10D730000E9CE5D8B010069A0A9BF01F00448A1888 +:10D74000E4081900CD22069A0A9BE8CCFFFCF01FE2 +:10D7500000408A18E4081900CC82E8CCFFF8069A49 +:10D760000A9BF01F003A684C88493008F0091900FC +:10D77000C0E0189630070C9C2FF7069A0A9BF01F02 +:10D7800000342FC688C80E38FE99FFF78A18E408BF +:10D790001900CAB2069AE8CCFFF60A9BF01F002BCC +:10D7A000684888C9885AF009002C3008F00A190026 +:10D7B000C0E0189630070C9C2FF7069A0A9BF01FC2 +:10D7C00000252FC688D80E38FE99FFF78A18E4087E +:10D7D0001900C8B2069A0A9BE8CCFFF4F01F001BA0 +:10D7E0008A18E4081900C812069AE8CCFFF20A9BCE +:10D7F000F01F001688C988D81208684A8879F4088A +:10D80000002C3008F0091900FE90FF7018963007C0 +:10D810000C9C2FF706990A9A310BF01F000F2F0668 +:10D8200088F80E38FE99FFF6C60BE8C7FFFE30EA0F +:10D83000300B0E9CF01F0009099B6A5CF01F00086A +:10D84000894CC73B8001C9848001A2FC8001C8309B +:10D850008001C8048001AD98800091D08001D3EC94 +:10D86000EBCD40E0E06800FE18971AD816951496A4 +:10D8700030483059F01F00162FFD580CC031E3CD51 +:10D8800080E0EECCFFFE0C9A0A9BF01F00120C9A6F +:10D890000A9BEECCFFFDF01F000F0C9A0A9BEECC0A +:10D8A000FFFCF01F000C5816C0A00F9B0C990A9AA1 +:10D8B0006E2C203BF01F0008E3CD80E00F9B6A5CDC +:10D8C000203BF01F00068F2CCF11CDAB8001C98407 +:10D8D0008001A29C8001AD988001D3ECEBCD40E0AB +:10D8E00018951696F6CCFFF8F01F000CC12099167B +:10D8F00030089908F8C7FFF80C9A5805EBF71A0595 +:10D90000E06B00FF0E9CF01F00060E9CE3CD80E054 +:10D9100018970E9CE3CD80E080009200800091D0AB +:10D92000EBCD40C0201DF8C60008300C6C1BF01F6A +:10D930000014C1A0500C3007C1286C1B400CF01F14 +:10D9400000111897C1406C1AECCBFFF8EF4AFFFCAE +:10D950000E9CF01F000D6C065806C0505807CEE113 +:10D960004007CF2B400C2FFDE3CD80C01A9CF01F49 +:10D9700000070E9C2FFDE3CD80C000008001D8DCA5 +:10D980008001D3EC800091DC8001D3A8D401E06851 +:10D990000081301999489959189A7408129C11CE2F +:10D9A000F20E18005F089708D802D703486830398C +:10D9B000F0FA00F830089569985BF00B19005F0CDD +:10D9C0005EFC0000000087F419C8300A4869F2F9CB +:10D9D00000F8F4081800F9BC0001F9BC0100F3FCE0 +:10D9E0001A065EFC000087F448483009F0FA00F897 +:10D9F000301C95695EFC0000000087F448B8985A16 +:10DA0000F0FB00F83178F00A1900E08B000B3018B9 +:10DA1000F00A0948E4180080E01803FEC0205EFF09 +:10DA20003008301C97685EFC000087F478185808AE +:10DA30005F0C5EFC5EFF19C830192018F208180050 +:10DA40005FBC5EFC5EFD5EFD19C93008F009180080 +:10DA50005F0C5EFC5EFD5EFFEBCD4080308B189767 +:10DA6000991B300CF01F00078F0CC0803078E069E4 +:10DA700000818F588F49E3CF9080E3CD80800000F4 +:10DA80008001D8DCEBCD40C018971696308B991BDF +:10DA9000300CF01F00108F0CC160301830298F58E7 +:10DAA0008F4948D8B826118948C8B8E948C71189AC +:10DAB000B8F96EB899086EBC580CC0752FFC8FBCB5 +:10DAC000E3CF90C0E3CD80C0F01F0006CF9B0000E5 +:10DAD0008001D8DC00007A280000025C000087F496 +:10DAE00080018450EBCD40FE1897FACCFFE01694ED +:10DAF000781330CB14928F1B129178061095300C4E +:10DB0000F01F00118F0CC1A0307830498F588F4919 +:10DB10009905B8E6B8F1F9630008B8C4B8D248B8B6 +:10DB200048B9B084B28248B76EB899086EBC580C38 +:10DB3000C0752FFC8FBCE3CF90FEE3CD80FEF01FBD +:10DB40000006CF9B8001D8DC000079E5000079E475 +:10DB5000000087F480018450EBCD40FC1897FACC8C +:10DB6000FFE4314B781414938F1B129278061095B2 +:10DB7000300CF01F00158F0CC2003018F3D4C01009 +:10DB80008F488F589913B8429935F9560010F954B7 +:10DB9000001248E7F1D6C0100A481248F9B800FF51 +:10DBA000F9B80100B8586EB999096EBC580CC07527 +:10DBB0002FFC8FBCE3CF90FCE3CD80FCF01F000472 +:10DBC000CF9B00008001D8DC000087F480018450E6 +:10DBD000D401780A3009740B15F8129C129AF01FC0 +:10DBE0000002DA0A80018460D401780A3009740BDB +:10DBF000F538000B129C129AF01F0002DA0A00009E +:10DC000080018460D401780A3009740BF538000B68 +:10DC1000129C129AF01F0002DA0A00008001846050 +:10DC2000D401780A3009740BF538000B129C129A53 +:10DC3000F01F0002DA0A000080018460D401780A33 +:10DC40003009740BF538000B129C129AF01F000279 +:10DC5000DA0A000080018460D401780A3009740B6C +:10DC6000F538000B129C129AF01F0002DA0A00002D +:10DC700080018460D401780A3009740B15F8129C75 +:10DC8000129AF01F0002DA0A80018460EBCD40F89E +:10DC900030C618979916169414930C9B300CF01FED +:10DCA00000108F0C1895C160307831690C9A8F582C +:10DCB000089B8F49F01F000B48B66CB88B086CBCF2 +:10DCC000580CC0A52FFC8DBC301C6A088708E3CD1A +:10DCD00080F8E3CD80F8F01F0005CF6B8001D8DC21 +:10DCE000800091DC000087F480018450EBCD40F887 +:10DCF000308618979916169414930C9B300CF01FCD +:10DD000000108F0C1895C160307831490C9A8F58EB +:10DD1000089B8F49F01F000B48B66CB88B086CBC91 +:10DD2000580CC0A52FFC8DBC301C6A088708E3CDB9 +:10DD300080F8E3CD80F8F01F0005CF6B8001D8DCC0 +:10DD4000800091DC000087F480018450EBCD40F826 +:10DD500033C618979916169414930C9B300CF01F29 +:10DD600000108F0C1895C160307831390C9A8F589B +:10DD7000089B8F49F01F000B48B66CB88B086CBC31 +:10DD8000580CC0A52FFC8DBC301C6A088708E3CD59 +:10DD900080F8E3CD80F8F01F0005CF6B8001D8DC60 +:10DDA000800091DC000087F480018450EBCD40F8C6 +:10DDB000318618979916169414930C9B300CF01F0B +:10DDC00000108F0C1895C160307831190C9A8F585B +:10DDD000089B8F49F01F000B48B66CB88B086CBCD1 +:10DDE000580CC0A52FFC8DBC301C6A088708E3CDF9 +:10DDF00080F8E3CD80F8F01F0005CF6B8001D8DC00 +:10DE0000800091DC000087F480018450EBCD40F865 +:10DE1000330618979916169414930C9B300CF01F28 +:10DE200000108F0C1895C160307831090C9A8F580A +:10DE3000089B8F49F01F000B48B66CB88B086CBC70 +:10DE4000580CC0A52FFC8DBC301C6A088708E3CD98 +:10DE500080F8E3CD80F8F01F0005CF6B8001D8DC9F +:10DE6000800091DC000087F480018450D421189751 +:10DE7000169530CB991B300CF01F00128F0C1896A2 +:10DE8000FAC4FFEC580CC190302830098F588F49E4 +:10DE900048D76EB899086EBC580CC1052FFC8FBCD2 +:10DEA0005805EDF81000EBF81A00089BECCCFFFCCD +:10DEB000308AF01F0006DA2AD822F01F0005CF0BA7 +:10DEC0008001D8DC000087F4800091DC8001845060 +:10DED000EBCD40E018961695310B991B300CF01FD6 +:10DEE00000108D0C1897C1503078317A0A998D58EE +:10DEF0008D4A48CBF8CAFFFCF01F000B48B56AB842 +:10DF00008F086ABC580CC0752FFC8BBCE3CF90E027 +:10DF1000E3CD80E0F01F0006CF9B00008001D8DC3D +:10DF20008001D3EC8001D158000087F48001845037 +:10DF3000EBCD408078076E285808C0B0300C189A96 +:10DF40005C586E0B3109300CF01F0009E3CF908054 +:10DF5000310CF01F00086E189908EF390016991956 +:10DF60006E3899286E4999396E28CEAB800184604D +:10DF700080009200EBCD40FC189716931495314B1E +:10DF80001294991B300CF01F001C8F0C1896FAC2CB +:10DF9000FFE4580CC200302830198F588F495805BB +:10DFA000C1C18D455C7549576EB88D086EBC580C63 +:10DFB000C1F52FFC8FBC5804EDF81000E9F81A00E9 +:10DFC000049B308AECCCFFFCF01F000D301C8D351B +:10DFD000E3CD80FCE3CF80FC5C750A9CF01F000958 +:10DFE0008D4CCF90069B0A9AF01F0005CDDBF01FE9 +:10DFF0000006CE1B8001D8DC000087F4800091DC95 +:10E000008000920080018450EBCD40801897F93C4D +:10E01000000BF01F00084888F0F900F85809C0709C +:10E02000EECBFFFC310A313CF01F0004E3CF9080BF +:10E0300080015FB0000087F480014658D42130C8C9 +:10E040001896109B4904300CE8F500F88D18F01F65 +:10E05000000F8D0C1897C120301830D98D582FCC57 +:10E06000EACBFFE28D49F01F000A68B88F0868BC50 +:10E07000580CC0552FFC89BCDA2AD822F01F0005A5 +:10E08000CFBB0000000087F48001D8DC8001844011 +:10E0900080018450D42130CB1897991B300CF01F8D +:10E0A000000B8F0C1894C1004898301530868F559E +:10E0B0008F462FCCF0FB00F82E2BF01F00060A9C99 +:10E0C000E966000AD822D8228001D8DC000087F453 +:10E0D00080018440EBCD40E030CB1896991B300C8A +:10E0E000F01F00108D0C1897C1703018305948E59A +:10E0F0008D588D492FCCEAFB00F82E2BF01F000B1A +:10E100003028AE586AB98F096ABC580CC0752FFC0C +:10E110008BBCE3CF90E0E3CD80E0F01F0005CF9B08 +:10E120008001D8DC000087F48001844080018450A5 +:10E13000EBCD40FC30C518969915169414931292A5 +:10E140000A9B300CF01F00138D0C1897C1D03018AB +:10E150008D458D580A9A300BF01F000FEECCFFFC56 +:10E16000089BF01F000E078848D6EF68000A058953 +:10E17000EF69000B6CB88F086CBC580CC0752FFC95 +:10E180008DBCE3CF90FCE3CD80FCF01F0006CF9B5D +:10E190008001D8DC800091D080018440000087F4A9 +:10E1A00080018450EBCD40FC30C51896991516942B +:10E1B000149312920A9B300CF01F00128D0C1897CA +:10E1C000C1B0301830B98D588D490A9A300BF01F04 +:10E1D000000E306AAEC4AED3049BEE0A000CF01FF2 +:10E1E000000B48B66CB88F086CBC580CC0752FFC7F +:10E1F0008DBCE3CF90FCE3CD80FCF01F0006CF9BED +:10E200008001D8DC800091D0800091DC000087F490 +:10E2100080018450D431203D502B5018FACEFFD0CD +:10E2200033857C3499157C181896149312917C00D0 +:10E2300050087C220A9B300CF01F00228D0C18978E +:10E24000C370301830A98D580A9A8D49300BF01FD1 +:10E25000001E069A029BEECCFFFCF01F001CEF5341 +:10E2600000244028049BEF680026EF600027306AF6 +:10E27000EECCFFD8F01F00155804C1C0089B308AAF +:10E28000EECCFFD2F01F00114008EF6800364018B6 +:10E2900048F6EF6800376CB88F086CBC580CC05556 +:10E2A0002FFC8DBC2FDDDA3AF01F000ACFBB2FDD2B +:10E2B000D832089B308AEECCFFD2F01F0003CE5B31 +:10E2C0008001D8DC800091D0800091DC000087F4D0 +:10E2D00080018450D4012FCC7808202D500819C912 +:10E2E000BAC919D8BAD8F01F00052FED580CF9B8E3 +:10E2F000010DF9F81A06DA0A80015860D40148D8ED +:10E30000F8CBFFF5F0F900F8733C7808204D502861 +:10E3100019C9FB69000C19D8306AFB68000D1A9CFA +:10E32000F01F0005F01F00052FCD580C5F1CD80210 +:10E33000000087F48002E73680018898EBCD40FE2C +:10E340003007FAC5FFE0189116924A134A1466087E +:10E350000E38E08A00216A08204D50280BC9FB695D +:10E36000000C0BD8EE061504FB68000DE806000A49 +:10E3700015D8BAD87409500915C8BAC8F01F0016C4 +:10E380002FCD580CC0A12FF75907CE2118970E9CFE +:10E39000E3CD80FEEE061504E80600060A9B0C9C01 +:10E3A000F01F000EF3D2C001EE081501AC692FF882 +:10E3B000E808093166090E39FE99FFEBEEC9FFFF47 +:10E3C00048380E9C9109E3CD80FE000000008C5C73 +:10E3D00000008B5C8001889880018440EBCD4080F8 +:10E3E000300819C9F0091800C10048E8F0F700F832 +:10E3F0005807C130F01F000C0E9CF01F000C0E9C43 +:10E40000F01F000BE3CF8080486830A9F0FA00F8D5 +:10E41000301C9569E3CD80800E9CE3CD80800000A8 +:10E42000000087F480015D188001593880015CDCB0 +:10E43000EBCD40E01896F01F00224A2A0DE9F4F7D0 +:10E4400000F85809C1103018F0091800C32030280E +:10E45000F0091800C31030488F687498300CABC8AE +:10E460009598E3CD80E06F3930D8322A8F68496CB7 +:10E47000727B2F4BF01F00156F3C3FF8787BF7390C +:10E4800000C8F0091800C130202DF71600D47845D7 +:10E49000306AEECBFFE21A9CF01F000C0C9B0A9C2A +:10E4A000F01F000B301C2FEDE3CD80E0E3CF90E0B8 +:10E4B00030088F68CD3B30588F68CD0B8001F00459 +:10E4C000000087F400008C608002E7368001E33CA6 +:10E4D000EBCD40E01896F01F00284A8A0DE9F4F7CA +:10E4E00000F85809C1503018F0091800C3603028EE +:10E4F000F0091800C3906F0830492FF88F69EF4872 +:10E5000000407498300CABC89598E3CD80E06F392B +:10E5100030D8322A8F6849AC727B2F4BF01F00191C +:10E520006F3C3FF8787BF73900C8F0091800C1301C +:10E53000202DF71600D47845306AEECBFFE21A9C06 +:10E54000F01F00100C9B0A9CF01F000F301C2FEDD9 +:10E55000E3CD80E0E3CF90E06F0830092FF88F69BA +:10E56000EF480040CCFB6F0830592FF88F69EF4817 +:10E570000040CC8B8001F004000087F400008C6028 +:10E580008002E7368001E33CD421310B1896991BB9 +:10E59000300CF01F00198D0C1897C28030183049CC +:10E5A0008D588D494955302CEAF400F8F01F0014BD +:10E5B000E8CBFFE21896EECCFFF8F01F00126C38A3 +:10E5C000AE38EAF901045819C0D03008AE2830B886 +:10E5D00089686AB98F096ABC580CC0952FFC8BBC3E +:10E5E000DA2AEAF8011C5818CF20D82AF01F0006B2 +:10E5F000CF7B00008001D8DC000087F48001EF6C45 +:10E600008001844080018450EBCD40F81897169427 +:10E6100030CCF01F0046303CF01F00441895302CE1 +:10E62000F01F0042E06A00EC1896E06B00FF0E9CC1 +:10E63000F01F003FE8CBFFE2EECCFFF6F01F003DFD +:10E640006C384BD9AE289208AE483DD86939727BF8 +:10E65000F73A009AF00A1800C480F73900803DD8D4 +:10E66000F0091800C52030050A93F01F00349838CF +:10E67000AE381896F93900A83FF8F0091800C09094 +:10E68000F8C9FF58EECAFF584ADB0E9CF01F002D58 +:10E69000ED3900CC3FF8F0091800C1900E9CECC990 +:10E6A000FF34EECAFF344A6BF01F0027089CF01FAE +:10E6B0000027583CE089000C4A587099ABC99199E1 +:10E6C0003FFA301CEF6A009EE3CD80F85805CF502A +:10E6D000EECCFF62069BF01F001F49D9301C7298D8 +:10E6E000ABA89398E3CD80F8F73900A03008F00983 +:10E6F0001800CB41EAF900B85819CB01F72800A25D +:10E700001295F003161FCB2BF73900863018F0094D +:10E710001800CAA1EAFC00B8581CCA61F728008892 +:10E720001895F003161FCA2B8001EF6C800091D062 +:10E73000800184400000025E8001EFF88001D3EC8C +:10E740008001D1E88001D21C8001808E000087F416 +:10E75000800184F0D421E06800EC1897109B4924D4 +:10E76000300CE8F500F88F18F01F00108F0C189689 +:10E77000C090301830798F588F490A9BF01F000CD9 +:10E78000C021D82A0C9CF01F000B30C88B6868B9D8 +:10E790008D0968BC580CC0452FFC89BCDA2AF01FD3 +:10E7A0000006CFCB000087F48001D8DC8001E608AA +:10E7B0008001F03080018450D421E06800EC18978B +:10E7C000109B4924300CE8F500F88F18F01F00105A +:10E7D0008F0C1896C090301830698F588F490A9B5B +:10E7E000F01F000CC021D82A0C9CF01F000B30C871 +:10E7F0008B6868B98D0968BC580CC0452FFC89BC72 +:10E80000DA2AF01F0006CFCB000087F48001D8DCA5 +:10E810008001E6088001F03080018450EBCD40405B +:10E82000201D18961A9CF01F001849888C69F0FB6F +:10E8300000F85809C1203018F0091900C0B030287C +:10E84000F0091900C170770830492FF89769F74827 +:10E8500000402FFDE3CF80407738301911EA301C9B +:10E86000F20A1800F9B8000CF7F80A062FFDE3CDFC +:10E870008040770830592FF89769F74800402FFDFE +:10E88000E3CF8040800177A4000087F4D401496879 +:10E8900019C9F0FA00F85809C1803028F0091800A9 +:10E8A000C1803048F0091800C0503018F009180035 +:10E8B000C180750830492FF89569F548004019CB9B +:10E8C000302CF01F000AD80A3088301C9568D80216 +:10E8D000750830592FF89569F548004019CBCF1BC2 +:10E8E000301BCEFB000087F480018390D431215D82 +:10E8F000303C169614911290F01F00584D83F8C4C6 +:10E90000FFB0189531CA089B069CF01F0056C0A1A5 +:10E910006D3830AA707BE6CCFFE42D2BF01F005140 +:10E92000C7B06D38FAC7FFC8707B0E9CF6CAFFC827 +:10E930002D2BF01F004D089B0E9CF01F004CC0417A +:10E94000300C2EBDD83231CA0E9BFA0A0002049C4C +:10E95000F01F0047049CF01F004730080E9A500833 +:10E960001A97089B1A9CF01F00446D38707930E8A4 +:10E97000F33A005EF00A1800C670EB3A0074580AC9 +:10E98000CE006D387079EB380075F33B005EF60809 +:10E990001800C0F0EACCFF8A3009C0581938F608D0 +:10E9A0001800C0502FF9123AFE99FFFA123ACC9093 +:10E9B000049CF01F0032CC50049B1A9CF01F0030C6 +:10E9C0001A9B029CF01F002F049B009CF01F002D3F +:10E9D000089B31CA4A2CF01F00266D3830AA707B84 +:10E9E000E6CCFFE42D2BF01F00226D38312A707B1E +:10E9F000E6CCFFDA2C8BF01F001E029B304AE6CCDF +:10EA0000FFC8F01F001B009BE6CCFFC4304AF01F7C +:10EA10000018301CC97B6D38312A707BE6CCFFDAD8 +:10EA20002C8BF01F0010FE91FF7E304AE6CBFFC812 +:10EA3000029CF01F000FE6CBFFC4009C304AF01F81 +:10EA4000000C301CC7FB049CF01F000FFE90FF7AE7 +:10EA50001A9CF01F000EC92B8001EF6C000079E8B2 +:10EA60008000917C80018124800182BC800091DC47 +:10EA700080018658800181E8800182608001817E6A +:10EA8000800180CC80018360800185F4EBCD40FC67 +:10EA9000FACD0110300733095407FEF3022EE6F8D1 +:10EAA00000F854281896129B0E9C8D19F01F0088B0 +:10EAB0008D0C1895E080008A3018303C8D588D4CB4 +:10EAC000F01F0084FACBFEFC1894FACAFEF8FACCC8 +:10EAD000FEF2F01F0081442871390E9CE06B00ECBF +:10EAE0007277F01F007BC710540CE0680420B83820 +:10EAF000442B7738707992D9EDB90000C6B0EDB9E2 +:10EB00000001C06144099238A1B8B238442BE8F83A +:10EB100000B85808C0C07738707A94D9EDB90009A8 +:10EB2000C06144099238A9B8B238442BFAC2FEF148 +:10EB3000441A049CF01F006944185818E08000A58E +:10EB4000C6823079FB38010FF2081800C050440922 +:10EB50009238A5A8B238440CF01F0061049CF01F45 +:10EB600000614428E74C0100EACAFFF071390A9CB1 +:10EB70004DDBF01F005E6858AA286869AA394D3C31 +:10EB800069B85808C440442B773870793078F33A24 +:10EB90000074F00A1800C240EAC9FFF4EACAFFF89C +:10EBA000300CF01F0053581CC53030063018E748B1 +:10EBB000004444095809C0A0FACCFF00F01F004DE2 +:10EBC0000C9C2BCDE3CD80FC30060C9C2BCDE3CDF3 +:10EBD00080FC44099238A1A8B238442BC99BF8F8AC +:10EBE00001AC5808C050F8CCFE54F01F004230CBA6 +:10EBF000300CF01F0037E74C01AC189AC080442855 +:10EC0000713B76794B8B28C9F01F003B442BCC5BC2 +:10EC10005828CA51442C1A9B2E2CF01F00381A96E3 +:10EC20001AD61ADC442BFB380116FB390117EF3AD0 +:10EC300000CF169CF6CBFF34F01F003144283289F8 +:10EC4000F15900D8442CF01F00262FEDC88BE8F8AE +:10EC500000B85808C2916AB93FF8F368009A3028A2 +:10EC60003039E7480044442891694426F01F0025C4 +:10EC7000ED4C004466B88B0866BC580CC2352FFCBE +:10EC800087BC3016C94B440BEF3A00AF169CFB38DB +:10EC9000010EFB39010FF6CBFF58F01F001B440C8F +:10ECA000F01F000FC5CB44287139727A94D8EDB8A3 +:10ECB0000001CD21189B6ABCF8CCFF66F01F001341 +:10ECC000CCFBF01F0013CDDB000087F48001D8DC03 +:10ECD0008001EF6C80017C4480017EE08001F03097 +:10ECE00080017BD88001D3EC8001AD408001E8EC4D +:10ECF0008001D3A88001D1588001887080018C2CBC +:10ED0000800145C480018B74800184F080018450AF +:10ED1000D431203D189616971493303CF01F0070A4 +:10ED2000301831798D588D4930086C068F0858039A +:10ED3000EDF81805E7F81A0018950DC40898A7D83B +:10ED4000C0505898C0302FDDD83A0DD93018F0098E +:10ED50001800C1003008F0041800F9B80500EFF8F9 +:10ED60005A00F9BC0501F9BC0401EFFC4A002FDD93 +:10ED7000D832303CF01F005A6C98F93A0074F13BDD +:10ED8000005E580ACE80F9380075F6081800C0A059 +:10ED900028AC30092FF91439CDE41938F00B1800DC +:10EDA000CFA1ECC0FFF8009CF01F004E1891CD30B1 +:10EDB0006BB85808C090793870793078F33A00749D +:10EDC000F00A1800C6E0FACCFFF8F01F0047581C04 +:10EDD000C0A0F01F0046029B835C350A31DCF01FA7 +:10EDE0000044CB9B40285818CF51FACCFFFCF01FB1 +:10EDF0000041581CCEF1401820785818FE9BFFEBBC +:10EE00004BD8F0F900F85809CE501A9CF01F003B7F +:10EE1000581CCE01400820285818FE9BFFDC6C9E31 +:10EE20002F4EFCE80000212DFAE90024FCE8000840 +:10EE3000FAE9002CFCE20010FAE30034FCE80018C8 +:10EE4000FAE9003CFD3C0020FB6C0044FD38002149 +:10EE5000322AFB6800454AAB1A9CF01F002AF01FBB +:10EE6000002A2EED580CCB606C9A3FF8F53900C89B +:10EE7000F0091800CAF06008F51B00D4202D6C6C56 +:10EE8000500801C9BAC901D8BAD8F01F0020A56C32 +:10EE900049FB310A180B315CF01F00152FEDC9AB8F +:10EEA0004955EAF801AC5808C050EACCFE54F01FAE +:10EEB000001930CB300CF01F0018EB4C01AC189A45 +:10EEC00048D5580CFE90FF816338494B707928C9AA +:10EED000F01F00136A98ABB88B98C76B8001EF6C7A +:10EEE00080015D44800177A4800145C480014658BB +:10EEF00080015F44000087F480015F2800008C607F +:10EF00008002E736800189108001E33C00008B5CC1 +:10EF10008001D3A88001D8DC8001D3EC8001D158D6 +:10EF2000EBCD40E0206D300818991495502850081A +:10EF30001A9C1A965D191897C10140085808C040DC +:10EF40001A9CF01F0009402C580CC030F01F00071D +:10EF50000E9C2FADE3CD80E01A9C5D15581C5F0719 +:10EF6000CEDB00008001D3A8800091E858DCE08867 +:10EF700000035EFD49B8F00C032F49B8F0CCFFF454 +:10EF80005EFC4998F0CCFFE45EFC4978F0CCFFD4FD +:10EF90005EFC4958F0CCFFCC5EFC4938F0CCFFC495 +:10EFA0005EFC4918F0CCFF305EFC48F8F0CCFF1C4A +:10EFB0005EFC48D8F0CCFEF45EFC48B8F0CCFEBC59 +:10EFC0005EFC4898F0CCFE945EFC487C5EFC486891 +:10EFD000F0CCFFFC5EFC4848F0CCFE785EFC000004 +:10EFE0008003C01400000260483930089318930869 +:10EFF0005EFC000000008C844828700C5EFC000061 +:10F0000000008C84EBCD40C0487618976C1C580CDF +:10F01000C030F01F00060E9CF01F00058D1CE3CDD4 +:10F0200080C0000000008C8480018AD480018AECBA +:10F03000EBCD40C0487618976C0C580CC030F01FD0 +:10F0400000060E9CF01F00058D0CE3CD80C0000073 +:10F0500000008C8480018ABC80018B30D4211894FC +:10F060001696149530CCF01F00121897C1D03018A6 +:10F0700099069915F0060946EC0C1502F01F000CD4 +:10F080008F2CC0F05806E08A000B3009129A6E28C7 +:10F09000F009092A2FF91236FE99FFFB8907DA2AAF +:10F0A0000E9CF01F00043FDCD8220000800092007C +:10F0B000800091E8D4311893169214901291580C54 +:10F0C000C36078093018760CF0090945580CC390D4 +:10F0D000189468160A36C1A468075807C0606E48BD +:10F0E0000238C1B03FCCD832662CF8060327580747 +:10F0F000CF71ECC8FFFFF808002CC0582FF8190793 +:10F100005807CEE110960A38CFA5089CF01F0013CF +:10F1100030083FEC8508D832029A009C6E3BF01F05 +:10F120000010301C89166E088908D832760C580CED +:10F13000C040F01F000ADA3A66093018F0090945A4 +:10F14000308CF01F00081894C060850C30089918A6 +:10F150009908CC0BD8320000800091E8800091DC47 +:10F1600080009200D431109412907818409618952F +:10F17000169214910C9B780A089C5D181893318C98 +:10F18000F01F00131897C1F00C9CF01F00118F3C6A +:10F19000C170089B0C9AF01F000F30088F468F1229 +:10F1A0008F218F508F086A29F203002C78085808A5 +:10F1B000C0C0109970085808CFD19307DA3A0E9C56 +:10F1C000F01F00053FDCD8329907DA3A8000920040 +:10F1D000800091DC800091E8D431203D501C500B20 +:10F1E000149112921090580AC4307418009B740A3B +:10F1F000129C5D18A36C502C6228F00C0307580772 +:10F20000C3706E450A990035C3610E940E93C09881 +:10F210006E075807C2D008936E490A39C2C10E94CE +:10F220006E3B0A9A049CF01F00181896CF214019D3 +:10F230006E18930840086E2991098F1C8F2C6E3C24 +:10F24000F01F00128F468F3640296228F009000C0B +:10F2500078090E39EFF80000F9F80A00EFF810000D +:10F26000E7F81A000E9CF01F00092FDDDA3A3FEC98 +:10F270002FDDD8326E385808CFB00039CF903FCC50 +:10F280002FDDD8328000917C800091E8163C5E0C26 +:10F290007808971C990B97085808F1FB1A015EFC37 +:10F2A00078195809F9F81000F3F81A007808580886 +:10F2B000F1F91A013008990899185EFCD40149380F +:10F2C000FACEFFFC709CE21C0002C1D0209DFD3AEA +:10F2D0000021FB6A0021FCE80000FAE90000FCEADA +:10F2E0000008FAEB0008FCE80010FAE90010FCEA5C +:10F2F0000018FAEB0018FD380020FB680020F01F12 +:10F3000000042F7DD8020000000087F480015AA479 +:10F31000D4014898709CE21C0002C0C0300930CC77 +:10F32000EA1C4000303B129AF01F0004F01F00045A +:10F33000301CD802000087F4800186C88001875401 +:10F34000D4014898709CE21C0002C0C0300930DC37 +:10F35000EA1C4000303B129AF01F0004F01F00042A +:10F36000301CD802000087F4800186C880018754D1 +:10F37000D4014898709CE21C0002C0C03009310CD6 +:10F38000EA1C4000303B129AF01F0004F01F0004FA +:10F39000301CD802000087F4800186C880018754A1 +:10F3A000EBCD4080495818977098E2180002C04190 +:10F3B000109CE3CD8080F01F00126F38302911EAD5 +:10F3C000F20A1800C0D03009303B129A307CEA1C97 +:10F3D0004000F01F000CF01F000CE3CF90806E681F +:10F3E0005898CF213009303B129A30BCEA1C4000BB +:10F3F000F01F0004CF1B0000000087F4800158407C +:10F40000800186C88001875458DBE08A0012F939F0 +:10F41000000C3078F0091800E08B000C595BE08A92 +:10F420000008F939000E3AA8F0091800C0D05EFDB6 +:10F430003888F0091800CFC1F939000D38E8F00913 +:10F4400018005F0C5EFCF938000FF2081800CF01BD +:10F45000F93900103038F0091800CEA1F93900113F +:10F460003008F0091800CE41F93A0012F20A1800EB +:10F47000CDF1F9380013F4081800CDA1F9390014C2 +:10F480003888F0091800CD41F939001538E8F0093D +:10F4900018005F0C5EFCD7033019482891095EFC08 +:10F4A00000007A38EBCD40C0208D48D730088E0957 +:10F4B000F0091900C101E06AFFFF300B1A9CF01F30 +:10F4C00000091A9B302AFACCFFE8F01F00079A18AF +:10F4D0001A96AE088E0C2F8DE3CD80C000007A2ADC +:10F4E0008001C7B88001A498D401F01F00054858D6 +:10F4F000F139010B120C5C8CD80200008001F4A4DD +:10F50000000087F4EBCD4060208D306AFAC5FFE63D +:10F51000300B0A9CF01F00091A9CE06AFFFF300BB9 +:10F52000F01F00070A9C1A9B302AF01F00061A964B +:10F530009A1C2F8DE3CD8060800091D08001C7B8E8 +:10F540008001A444D43120DDFEF60234FACEFFA8B7 +:10F55000189516916C9C1494129310907C177C0251 +:10F56000E21C0002C0312F3DD832FEF802167009AD +:10F570005809C041FE7CFBB4CF7BECF8012458183D +:10F58000C041FE7CFC17CF0BECC9FFE85019129C60 +:10F59000F01F007D581CE08000E30D890D98F009F4 +:10F5A0001800E08200E6302CF01F0078E08000D2E6 +:10F5B0006CB850282FF88DB85807FBF91002EFF9F6 +:10F5C0001A00F01F0073C0E0029B0A9CF01F00713C +:10F5D000E08000C96C98EDB80006C0414E88402913 +:10F5E00091D9F01F006D6008EFDCB010F3D7C010A8 +:10F5F00050091039E08B006C0D882FF8AC880D99FC +:10F60000F0091800C061300A320C149BF01F00632F +:10F61000E8C800020E08FB58002EED38010B30043C +:10F62000FB680032400A300BFB640030FB640031A1 +:10F63000FB640033069CF01F005A069BFAC7FFF4D8 +:10F64000400A0E9CF01F0057300A0E9BFACCFFD2E6 +:10F65000F01F0055ED38010BF9D2C003BA78F01F46 +:10F660000053300CFB520028FB5C002AE041003EB6 +:10F67000E0880008EB39000C3888F0091800C2D087 +:10F680004028300A50980E9BFACCFFDCF01F00484F +:10F690004009ECCCFFE88109F01F0046F01F00464E +:10F6A0003008ED4C00CCED5800D04C49F30A014233 +:10F6B000F00A1900C0604B297298EDB8000EC031F5 +:10F6C000301CC52BF01F003E301CC4EBECCCFFE817 +:10F6D000F01F00383FFCC48BEB39000D38E8F0090F +:10F6E0001800CCF1EB39000E3018F0091800CC915D +:10F6F000EB39000F3038F0091800CC313028EB3BE3 +:10F700000012F00B18005F1A3FE8F00B18005F19A9 +:10F71000126AE80A1800CB51EB380013E218001DFA +:10F720005818CAF1EB380014E21800C85888CA917A +:10F73000189A31F9EA090708F4081800CA212FF9C4 +:10F74000E049003FCF81E0680400FB58002AC99BD4 +:10F75000401CF01F0018FE7CFAECC06BFE7CFC160F +:10F76000C03BECCCFFE8F01F00133FECCFDA401CAD +:10F77000F01F0010FE7CFB4FCF7A0000000087F4E2 +:10F7800000007A38800145DC80019F3080015F04F1 +:10F790008001F4088001F4E880014658800091D08F +:10F7A0008001C7B88001A4448001859C8001A49891 +:10F7B000800145EC800145C4000002608001FBFC33 +:10F7C000D401302CF01F0003300948389109D802C9 +:10F7D0008001A12800007A38D431FACD01385009CF +:10F7E000FACEFEA416971896FEFB031C14947C1305 +:10F7F0007C00F6F801245818C460FEFA030A749CD1 +:10F80000E21C0002C05118970E9C2B2DD832E068E4 +:10F8100000F8FAC5FEFCF5D7C0100C9B0A9C548872 +:10F82000549654A730025472F01F00B8FAC1FEE497 +:10F830000A9B029CF01F00B644C95879E08B00284F +:10F840003018F0090948E2180085C2104488FAC946 +:10F85000FFF45012502854D944D80A9B5478029C83 +:10F86000F01F00ACC1C1302744D95809CCE0FAC818 +:10F87000FFF41039CCA0FACCFECCF01F00A70E9CF0 +:10F880002B2DD83230270E9C2B2DD832448B300CA8 +:10F89000F01F00A2E08000B354DCCDFB44C9E04976 +:10F8A000003FE088000B300744B8EDB80007E08067 +:10F8B000009EF01F009BCD9BFEF80268F009032F0D +:10F8C000ECCAFFFC1588EC08000889080DD81589DA +:10F8D000400BEE0901093067F208010A970A44B8A3 +:10F8E000CE5B44B8F0C90001E0490097E088008988 +:10F8F000447CF01F008D44C8189A300944BC303B4A +:10F90000BFBCF9E8108CF01F0089F01F0085301B88 +:10F91000300CF01F008744B83027CC8B44B8E04847 +:10F920000082C090E08900A9E0480080C040E04823 +:10F930000081CEE10E9B0C9CF01F007ECE9B44B854 +:10F94000E0480082E08000C4E08900915978E080BE +:10F9500000C4E0480081CCD1029CF01F0077CD8B21 +:10F9600044B85808C7E144D65803EDF81000E7F84A +:10F970001A008C28A008FB1A0106445814088908AC +:10F98000FB190104F20A0105400A30EB95056807EE +:10F990000E9CF01F006AE08000AE4DB9F2F801D075 +:10F9A0005808E080009E0A9B0E9C5D18E08000993C +:10F9B00030270DE84D4BF768007B44B8C77B44B84F +:10F9C0005818CB90E0480080CA31CB5B447B44BCE4 +:10F9D000F01F005B44BCF8C800805818FE9BFF99DC +:10F9E000029B5C5CF01F0057C93B30084C69300B30 +:10F9F000B2A8169CF01F0054C5DB3FD7C06B4D3832 +:10FA0000F009032F029CF01F0052C82B029CF01F2C +:10FA10000051C7EB029CF01F0050C7AB029CF01FC7 +:10FA2000004FC76B029CF01F004EC72B029CF01FBB +:10FA3000004DC6EBF01F004C4B3AF54C00D4C68B82 +:10FA4000029CF01F004AC64B029CF01F0049C60BE7 +:10FA5000029CF01F0048C5CB447CF01F0047C58BBB +:10FA6000E0480081C1403027C21BF0C8008F5828F1 +:10FA7000FE9BFF40C4DBE0480084FE90FF5DFE95E6 +:10FA8000FF5BE0480085FE91FF44C55B49E91388B0 +:10FA900020185C58B28844D7C29049BB7698E218C7 +:10FAA0000040C20076D96E081039E088002944B8B9 +:10FAB000A7D854B85803F9B70003EFF81000E7F8D7 +:10FAC0001A00F9B70103FBF8104BCF0A447B32EC64 +:10FAD000F01F002AC1DB029CF01F0029C19B3047A8 +:10FAE000C69B0FD8F768007ACE3B302CF01F00255C +:10FAF000CD5BF01F0025CF403FE7C5CBF01F0023B3 +:10FB0000CD7B0000000087F48001C7B88001BF10E2 +:10FB10008001BF448001D3A88001D8DC80018754D4 +:10FB20008003C04C8001870C800186C880016A88F0 +:10FB3000800237E8800208948001F4088001708C0C +:10FB40008001725480018CE48003C14C8002084023 +:10FB50008002085880020864800208708002087CD5 +:10FB600080020888800145C48002084C8002083465 +:10FB7000800209B48001DA3480016D6C8002094092 +:10FB80008001A12880015F048001F310EBCD406863 +:10FB90003006493C1AD61AD649250C9899064929A7 +:10FBA000492A302B0A9CF01F001249231AD60C98C0 +:10FBB0001AD60699490A303BEACCFFFCF01F000C2C +:10FBC0000C981AD606991AD6EACCFFF848BA305BD8 +:10FBD000F01F0007301C2FADE3CD806800007A389D +:10FBE00000007A2C8001F4988003C3AC80016EB8C9 +:10FBF0008001F7C08003C3C48003C3E05EFCD70369 +:10FC0000EBCD40E0203D1897580CC1F07938707A60 +:10FC100094D9EDB90001C1D04C166C785828C15068 +:10FC20000E9CF01F0040C110ED3900943FF8F00920 +:10FC30001800C1405017FACAFFFC1A9BFACCFFF615 +:10FC4000F01F0039581CC180301C2FDDE3CD80E04F +:10FC50004B366C785818CE51CF8B202D306A1A9CB9 +:10FC60004AFBF6CBFF4AF01F0031F01F00312FEDA9 +:10FC7000580CCEB1CE0BFAC5FFF5400A401B0A9CCA +:10FC8000F01F002C581CCE113079FB38000BF20805 +:10FC90001800C35140187139727A94D8EDB8000435 +:10FCA000CD404A5AF4F801045818C3206DE85808AA +:10FCB000C1D1ED3B008049AA580BC2806F387079E2 +:10FCC000F5380081F33C005EF8081800C1F0F4CA72 +:10FCD000FF7E3009C0581538F8081800C0402FF9C9 +:10FCE0001639CFA516395F0CCB1B48D973F85808C5 +:10FCF000CE10F4F801AC5808CDD1CA7B0A9CF01F95 +:10FD0000000FF01F000FCA10CCDB3009CECB3059EA +:10FD1000FB38000BF2081800C981CC9B0000026080 +:10FD2000800189D080017C448002E736800188B060 +:10FD300080017EE0000087F480017BD880017C1088 +:10FD4000EBCD40E048D818961695F0F700F058072C +:10FD5000C0E00E9CF01F000AC0715806C0A00E9CA7 +:10FD60000A9B5D16C0606E075807CF41E3CF80E065 +:10FD70000E9CE3CD80E00000000087F48001FC00D1 +:10FD8000D401F01F0002D80280021500EBCD40F82C +:10FD9000204DE0683100EA18312EE069312EEA1971 +:10FDA000322E306CFAE90000F01F00631894E080F6 +:10FDB00000B9303CF01F00611896301CF01F005F46 +:10FDC000306A202D189B18951A9CF01F005DF01FBB +:10FDD000005D2FED580CE080008732B80A9C1AD8DD +:10FDE000308930084D8A306BF01F00582FFD1A9370 +:10FDF000ECFC00D8F01F0056ECFC00DCF01F0055B6 +:10FE0000ECFC00E4F01F0054ECFC00E8F01F005391 +:10FE1000ECFC00ECF01F0052ECFC00F0F01F005175 +:10FE2000ED3C00B7F01F00506DC85808F9B801014B +:10FE3000EDF81A1BED3C006FF01F004CECFC012CA0 +:10FE4000F01F004BF01F004BF01F004BF01F004B4A +:10FE5000F01F004BECF800F85808C6616D084C978D +:10FE6000EF4800D8ECFC0130F01F0047300830A903 +:10FE700032B54C6A1AD5E06B0080EECCFED8F01F8C +:10FE80000033EEC6FE58304A300B0C9CF01F004089 +:10FE900030081AD530594BFA0C9C304BF01F002B10 +:10FEA0004BD82FEDF10A01423009F20A1900C26065 +:10FEB0006E99EDB9000EC201A7B930688F9950381C +:10FEC0001A9CFAC8FFF8FAC9FFF4089A308BF01FA1 +:10FED00000331897581CC140089CF01F00312FCDEB +:10FEE000E3CF80F8189A0A991A933068308B1A9CDD +:10FEF000F01F002CC7EBF01F002C6E99CDEB089C77 +:10FF0000F01F00273009303B129A311CEA1C4000D8 +:10FF1000F01F0026F01F00260E9C2FCDE3CD80F8A9 +:10FF20002FCDE3CD80F8300A301B149CF01F002148 +:10FF3000C96B0000800092008001EF6C8002E73600 +:10FF4000800188B08003B804800176C480020594E3 +:10FF500080020538800204DC8002048080020424D0 +:10FF6000800203C8800202F880020374800202D477 +:10FF70008002078C800168AC8002017080020EFC58 +:10FF8000000087F48002031C8003C400800091D02D +:10FF90008003C40C00000260800174C8800091E8F6 +:10FFA0008001776C8001FBFC800186C8800187544A +:10FFB00080020B34EBCD406830094AF63068ACA9BA +:10FFC000AC893129314AAC988D99300530130A9BA0 +:10FFD000ED4500ECED4500E88DA58DC5ED550040E3 +:10FFE000ED550042ED55004EED4500D88DB3ECCCFB +:10FFF000FEF0F01F0022ED450124F01F0021ED5519 +:02000004800278 +:1000000000D0ED4C00CCED5500D249ECF01F001EA5 +:10001000F01F001EED4501B8F01F001DF01F001D70 +:10002000F01F001D0A9BECCCFF48F01F001C0A9B30 +:10003000ECCCFF44F01F0019069BECCCFF40F01FF6 +:100040000017069BECCCFF3CF01F0014ED4300446E +:10005000F01F0013F01F001330DCF01F0013F93CF9 +:10006000000FF01F0012F01F0006ED4C01CC069CA3 +:10007000E3CD8068000087F4800091D0800145C402 +:10008000000084CC80017B24800237D080016CDCAE +:100090008001FB8C8001EFE8800144F8800187C873 +:1000A000800205EC8001EF6C800202B8EBCD40606D +:1000B000E06A01F8300B49D518960A9CF01F001C25 +:1000C000F01F001C0C9CF01F001CEACCFFF4F01F7A +:1000D000001BEACCFFE0F01F0019EACCFFF0F01F94 +:1000E0000017EACCFFECF01F0016EACCFFE8F01F87 +:1000F0000014EACCFFE4F01F0012300930DC1AD9FA +:100100001298129A129BF01F000FF01F000FF01FA1 +:10011000000FF01F000FF01F000FF01F000F301C2A +:100120002FFDE3CD80600000000087F4800091D0B7 +:1001300080016F4880021124800145D6800145F27C +:100140008002067C80014690800149B88001804091 +:1001500080015F98800201584848300A4849911848 +:10016000910A930A5EFC000000007A3C00007A4489 +:10017000D421219D4A846808F3D8C001FB6900633B +:10018000E2180002C14030183005FB6800634A3CA9 +:10019000F01F00233018189BFAC9FF9D300A49FC54 +:1001A000F01F0020581CC2802E7DD8225809C1C0E3 +:1001B000109549D870065806CEB0EA050019FA091C +:1001C00000170C9B0E9C306A2FA72FF5F01F00170D +:1001D0006C265806CDD05905CF516808F1D8C0011A +:1001E000F0051700CD5B306AE06B00FF1A9C3015FC +:1001F000F01F000FCDFB48FCF01F0009EA050018B6 +:10020000189BA1781A99300A48ACF01F00062E7D81 +:10021000D822000000007A448003C414800091B802 +:100220008001776C00007A3C800091DC800091D0E6 +:100230008003C41CD40148697208104C930CEDBCB7 +:100240000002C021DA0AF01F0003D80200007A443D +:1002500080020170EBCD408048C76E095809C1305B +:10026000722A580AF3F80003EFF80A01F3F81003B2 +:10027000F5F81A037238129C910AF01F00056E09F6 +:100280005809CEF1E3CF908000007A3C800091E8DD +:10029000D401F01F0007581CC020D802485972082A +:1002A000EDB80002CFB0F01F0004D8028002025463 +:1002B00000007A4480020170F8C900013058F0094A +:1002C0001800E08B00054838B09C5EFF3FCC5EFC18 +:1002D000000087F4D401201DFAC9FFFC12DC1A9932 +:1002E0003048300A307B483CF01F00032FFDD80215 +:1002F0008003C43C8001776CD401201D3018BA8C77 +:100300001A99300A306B484CF01F0004581C5F0CDF +:100310002FFDD8028003C45C8001776CEBCD406870 +:10032000201D48F61893FAC5FFFC2F060AFC0C9C0A +:10033000F01F000C303CF01F000CF94301300C9C06 +:10034000F01F000A0A993018300A307B488CF01FE1 +:100350000009581C5F0C2FFDE3CD8068000087F476 +:10036000800145FC8001EF6C800145FE8003C46C78 +:100370008001776CEBCD4040201D48E6BA8C2F06FB +:100380000C9CF01F000D303CF01F000C1B88F9483E +:10039000006C0C9CF01F000A30181A99300A309B30 +:1003A000488CF01F0009581C5F0C2FFDE3CD8040E6 +:1003B000000087F4800145FC8001EF6C800145FE60 +:1003C0008003C4748001776CEBCD4068201D1898C1 +:1003D0005CB81895FAC3FFFC48D606D82F060C9CCB +:1003E000F01F000C303CF01F000CF94500F00C9C95 +:1003F000F01F000A1A993048300A309B488CF01FD1 +:100400000009581C5F0C2FFDE3CD8068000087F4C5 +:10041000800145FC8001EF6C800145FE8003C480B3 +:100420008001776CEBCD4068201D18985CB818955A +:10043000FAC3FFFC48D606D82F060C9CF01F000C10 +:10044000303CF01F000CF94500EC0C9CF01F000A3A +:100450001A993048300A309B488CF01F0009581C0C +:100460005F0C2FFDE3CD8068000087F4800145FC20 +:100470008001EF6C800145FE8003C48C8001776CA5 +:10048000EBCD4068201D18985CB81895FAC3FFFCA6 +:1004900048D606D82F060C9CF01F000C303CF01FED +:1004A000000CF94500E80C9CF01F000A1A9930482E +:1004B000300A309B488CF01F0009581C5F0C2FFD40 +:1004C000E3CD8068000087F4800145FC8001EF6C7B +:1004D000800145FE8003C4988001776CEBCD4068B5 +:1004E000201D18985CB81895FAC3FFFC48D606D8AA +:1004F0002F060C9CF01F000C303CF01F000CF9453F +:1005000000E40C9CF01F000A1A993048300A309B16 +:10051000488CF01F0009581C5F0C2FFDE3CD80684C +:10052000000087F4800145FC8001EF6C800145FEEE +:100530008003C4A48001776CEBCD4068201D18981F +:100540005CB81895FAC3FFFC48D606D82F060C9C59 +:10055000F01F000C303CF01F000CF94500DC0C9C37 +:10056000F01F000A1A993048300A309B488CF01F5F +:100570000009581C5F0C2FFDE3CD8068000087F454 +:10058000800145FC8001EF6C800145FE8003C4B012 +:100590008001776CEBCD4060201D48F5BABC2F057B +:1005A0000A9CF01F000E303CF01F000DFAC6FFFC45 +:1005B0000D78F94800D80A9CF01F000A0C993018F1 +:1005C000300A306B488CF01F0009581C5F0C2FFD5F +:1005D000E3CD8060000087F4800145FC8001EF6C72 +:1005E000800145FE8003C4BC8001776CEBCD40C028 +:1005F000206D49EC3008F939010DF93B010850082C +:1006000050281AD9F93A010C1ADAFAC7FFF8F93961 +:10061000010AF93A01090E9CF01F00152FED580C44 +:10062000C10140085808C0401A9CF01F0012402C1D +:10063000580CC040F01F0010300C2FADE3CD80C02F +:100640001A9CF01F000E400818965808C0401A9CCB +:10065000F01F0008402C580CC030F01F000758163F +:100660005F0C2FADE3CD80C0000087F48001DAE499 +:100670008001D3A8800091E880018E9CD4214C0792 +:10068000405EEF6C0108EF6B0109EF6E010D1495F0 +:100690001294109A3019F2081800C120EEF801B037 +:1006A0005808C3D05828C4C04B5CEF3B01B5338811 +:1006B000F00B1800C5403398F00B1800C440EF6AE7 +:1006C000010CF01F0030EDDCB010F01F002F0C0CFF +:1006D0005C5C5805C1E11895F01F002A1815EF65FC +:1006E000010AF01F0029EDDCB010F01F00260C0CF1 +:1006F0005C5C5804C3F11894F01F00221814EF64D6 +:10070000010B6E98EDB80001C031F01F0020DA2A0D +:10071000EA0C1800FE98FFE23FCCD822EF3901B571 +:100720003348F0091800CC11EF3901B63418F0093C +:100730001800FE98FFC630E8EF68010CCC3BEF696B +:10074000010CCC0BEF3901B63408F0091800FE9803 +:10075000FFB8301948A8F169010CCB4BF93901B643 +:100760003408F0091800FE98FFA835A8F968010CB4 +:10077000CA9BE80C1800FE9BFFD1CBFB000087F45E +:100780008001F4A48001F504800205ECEBCD40E08B +:10079000303CF01F002330CB18954A26300CF01F58 +:1007A0000022ED4C01AC1897C360303BF01F001FD6 +:1007B0008F2CECF901AC72275807C2903078300BBF +:1007C000B2883068ECFA01ACB498ECF901ACB2AB89 +:1007D000ECF801ACB0BBECF901ACB2CBECF801AC7D +:1007E000EB390075702AB489ECF801ACEB39007470 +:1007F000702AB499ECF801ACEAFB00847029B2AB22 +:10080000ECFC01ACF01F000AE3CF90E0ECCCFE540E +:10081000F01F00080E9CE3CD80E000008001EF6C2B +:10082000000087F48001D8DC8001D3EC800208D47A +:100830008001D3A8D401F01F0002DA0A8001DA5641 +:10084000D401F01F0002DA0A8001DF30D401F01F6A +:100850000002DA0A8001DBE8D401F01F0002DA0AA4 +:100860008001DC04D401F01F0002DA0A8001DC20E0 +:10087000D401F01F0002DA0A8001DC3CD401F01F31 +:100880000002DA0A8001DC58D401F01F0002DA0A03 +:100890008001DC74D401201D1A9BF01F000CC09055 +:1008A00040085808C06048AA7499EDB90000C030EB +:1008B0002FFDDA0A1298A1C831CC9598300A149B02 +:1008C000F01F00042FFDDA0A8001D98C000087F4A4 +:1008D00080014658EBCD40C0206D4958189B709C54 +:1008E000E21C0002C06118970E9C2FADE3CD80C0C2 +:1008F00030081A96502850081A9CF01F000EC1119B +:10090000189740085808C0401A9CF01F000B402C54 +:10091000580CCEB0F01F00090E9C2FADE3CD80C067 +:100920001A9C3017F01F0006CEDB0000000087F491 +:100930008001DED08001D3A8800091E880018E9CE8 +:10094000EBCD4080201D300A1A9BF01F0017C0F02D +:1009500040085808C0F149576E99EDB9000BC071B5 +:10096000EEF801A84917F1D8C001C1212FFDE3CF4E +:10097000908048E76E99EDB90000CF01A1C9300A17 +:100980008F9931CC149BF01F000A6E99CE7BEEFC40 +:1009900001ACF01F00086E98301CABD88F982FFD6B +:1009A000E3CD80808001ED10000087F4800146587F +:1009B000800208D4D401F01F0002DA0A8001DBD0E3 +:1009C000EBCD40FC206D4A5318951097169266980F +:1009D0001496109C1294E21C0002C2D05BF5C30175 +:1009E000303CF01F001F300BF3D7C010F5D4C010FF +:1009F0001AD90C981ADAF3D2C010504B502BFAC601 +:100A0000FFF8F93B00F70A9A0C9CF01F00162FED37 +:100A1000580CC1B1189740085808C0401A9CF01FE4 +:100A20000012402C580CC030F01F00100E9C2FAD4F +:100A3000E3CD80FC18970E9C2FADE3CD80FCEDB884 +:100A40000000CCF13FB7CF3B6698A1A81A9C8798CD +:100A50003017F01F0007CE0B000087F48001EF6C09 +:100A60008001DB588001D3A8800091E880018E9C32 +:100A7000D40130085C7B1099109AF01F0002D80254 +:100A8000800209C0D4013008364B1099109A109C8E +:100A9000F01F0002D8020000800209C0EBCD40E048 +:100AA00020AD3006507CFB6B00201497500650267A +:100AB0001A95FACAFFDCFACBFFE81A9CF01F00195E +:100AC000C111189640085808C0401A9CF01F001623 +:100AD000402C580CC030F01F00150C9C2F6DE3CD3E +:100AE00080E05807C09040980E9B0C9C8F28F01F08 +:100AF0000010581CC0611A9C3016F01F000ECE3B2F +:100B000040085808C0401A9CF01F0007402C580CA1 +:100B1000C0313FD6CE3BF01F00053FD6CDFB0000D5 +:100B20008001DC8C8001D3A8800091E880016C40BA +:100B300080018E9CD401F01F0002D80280020A9C22 +:100B4000EBCD40E0209D3018189A1697F00C09481C +:100B50004A5B7609F1E9000CC06118970E9C2F7D65 +:100B6000E3CD80E0F00811FF12683006507A970854 +:100B7000500650261A95FACAFFE0FACBFFE81A9CF5 +:100B8000F01F001AC1E05807C09040880E9B0C9CD3 +:100B90008F28F01F0017581CC1611A9C3017F01FD6 +:100BA000001540085808C0401A9CF01F0013402C44 +:100BB000580CCD50F01F00110E9C2F7DE3CD80E02E +:100BC0001897CF0B40085808C0401A9CF01F000A25 +:100BD000402C580CC0313FD7CC2BF01F00083FD71A +:100BE000CBEB000000007A4C8001DCEC80016C4013 +:100BF00080018E9C8001D3A8800091E8EBCD40F865 +:100C0000216DFAC6FF901897FB69000EFB68000F74 +:100C1000FB6B0010FB6A00116CF46D036D15ECCCDE +:100C2000FFD4F01F0038306ABA6CECCBFFDCFACC92 +:100C3000FFEDF01F00350D88FB6800190D99ECCB16 +:100C4000FFFEFB69001A320AFACCFFE5F01F002E06 +:100C50004AEE30097C0B301CF809094AF5EB000814 +:100C6000C0902FF95899CF9130060C9C2EADE3CD52 +:100C700080F8F7EA10089D085BF9CF705024FB63F9 +:100C8000001250195807EFF91A003006FAC7FFC4CE +:100C900050F65116FACAFFAC1A9B0E9CF01F001CAE +:100CA000C111189640F85808C0400E9CF01F00195A +:100CB000411C580CCDB0F01F00180C9C2EADE3CD9C +:100CC00080F85805C09041580A9B0C9C8B28F01F57 +:100CD0000013581CC0610E9C3016F01F0011CE3B53 +:100CE00040F85808C0400E9CF01F000A411C580CE8 +:100CF000C0313FD6CBBBF01F00083FD6CB7B0000F6 +:100D000080018058800091DC00007A4C8001DD4C2D +:100D10008001D3A8800091E880016C4080018E9C06 +:100D2000D42120DD4B0510946A0E4126F1DEC0016E +:100D3000C0B0EDBE0001C411EDBE0002C411300709 +:100D40000E9C2F3DD82210973018FB6B002A508A3A +:100D50005077FDE8100850998B08FB540028580C78 +:100D6000F9F71A001A953007FACAFFD05007502732 +:100D7000FACBFFE81A9CF01F001DC101189740082C +:100D80005808C0401A9CF01F001A402C580CCD90F7 +:100D9000F01F00180E9C2F3DD8225806C09040C866 +:100DA0000C9B0E9C8D28F01F0014581CC0C11A9C6F +:100DB0003017F01F0012CE4B30173028CC7B302775 +:100DC0003048CC4B40085808C0401A9CF01F00081F +:100DD000402C580CC0313FD7CB4BF01F00063FD7FB +:100DE000CB0B000000007A488001DDAC8001D3A865 +:100DF000800091E880016C4080018E9CEBCD40E04A +:100E0000207D300616975006189B50261A95FACA70 +:100E1000FFE81A9CF01F001AC111189640085808E4 +:100E2000C0401A9CF01F0017402C580CC030F01F17 +:100E300000160C9C2F9DE3CD80E05807C1904068C0 +:100E40000E9B0C9C8F28F01F0011581CC1104008ED +:100E50005808C0401A9CF01F000B402C580CC0D002 +:100E6000F01F000930060C9C2F9DE3CD80E01A9CFA +:100E70003016F01F0007CD3B1896CDCB8001DE0C5D +:100E80008001D3A8800091E880016C4080018E9C95 +:100E9000D40120CDFB5A0012FB590014FACAFFCC32 +:100EA000502874197408FB590016501874397428A6 +:100EB000FB59001AFB580018745974485039FB58F4 +:100EC000001C74797468FB590020FB58001E74994B +:100ED000748850A95098300974A8FB6C0022FB5B01 +:100EE0000010FB68002C74BBFB6900231A9CF01FE8 +:100EF00000032F4DD802000080020DFCEBCD40EE28 +:100F000020CD3FF94CC850A950B94CC93005303CF0 +:100F100091059305F01F004A322A18961A971A9CD9 +:100F20000A9BF01F0048FAC3FFDE306AE06B00FF47 +:100F3000069CF01F00441AD5ED38004F1AD86D28D2 +:100F40001AD86D191AD9ED1800361AD8ED190032D1 +:100F50001AD96CE81AD8ED19002E1AD9ED18002A02 +:100F60001AD8ED1900261AD9ED1800221AD86C6982 +:100F700030BB1AD9301C6D08ED1900FEED3A001F88 +:100F8000F01F0031ECFB01282F4DF6C80001581866 +:100F9000E0880045ED3100F7ECCAFF8C30153006D3 +:100FA0001AD61AD540D81AD8F4E80000206D069B4E +:100FB000FAE900081A9CF4E20008306AFAE300102B +:100FC000F01F0022EF380021209DFB680021EEE891 +:100FD0000000FAE90000EEE20008FAE30008EEE89B +:100FE0000010FAE90010EEE20018FAE30018EF38FA +:100FF0000020029BFB6800200A990C98FACCFF9015 +:10100000303AF01F00130C9A2EED0C9B40ACF01FF1 +:1010100000110A9C2F4DE3CD80EE1AD50A98FACC28 +:10102000FFD05C5B0A99FE7AFF6AF01F000B2FFD70 +:10103000CB2B000000007A4C00007A488001EF6C56 +:10104000800091D080020E908002E73680020BFC77 +:1010500080020A9C80020D20D431202D500B189163 +:101060004A1776026E9CE21C0002C350304C5011AD +:101070005801E2021700F01F001DEEF700F0189073 +:101080005807C2D030043013C0A82FF45802C1B1A1 +:101090005801F9B301FF5805C1100A9760B66E05F3 +:1010A000F01F00130C9A189B0E9CF01F0012CEE04C +:1010B0000E9CF01F00115805CF114008069C9104AA +:1010C0002FEDD83240182012110C0E9B5018F01F33 +:1010D000000BCE2B1893069C2FEDD8320E943013B4 +:1010E000CEDB0000000087F48001EF6C800145C476 +:1010F000800159A080015CDC800184284828F0FC34 +:1011000000F85EFC000087F4486871195879F9B856 +:101110000001F9F80A00F9B80100F9F81A005EFFB9 +:10112000000087F44828F14C007C5EFC000087F446 +:101130004828F14C01D05EFF000087F4EBCD40C0A1 +:1011400018971496E04A0020E088000830083FF91C +:10115000B898B889E3CF80C02FECF01F00043008A6 +:10116000AE96AE88E3CF90C0800091DCEBCD40FC22 +:10117000206D18941695F01F00431897C1A0F939F7 +:1011800000CC3FF8F0091800C3910896EF3900A889 +:101190003FF8F0091800C5414BB8F0F700F85807C0 +:1011A000C0A1EC040104301C8B042FADE3CD80FC06 +:1011B0000896CF3BE06AFFFF300B1A9CF01F00330C +:1011C0006F38302A707C1A9B2F4CF01F00311A9216 +:1011D0006A0A9A93063AC0442FADE3CFC0FC0C9B39 +:1011E0001A9C5C7AF01F00296F380606707C1A9BE7 +:1011F0002F4C300AF01F0026CD5BE06AFFFF300B5A +:101200001A9CF01F0022302AEEC2FF341A9B049C65 +:10121000F01F00201A966A0A9A93063ACDE55C7A86 +:10122000089B1A9CF01F00191A9B049C300AF01F9F +:1012300000196A08E803000606188B08CA8BE06AE2 +:10124000FFFF300B1A9CF01F0011302AEEC7FF5829 +:101250001A9B0E9CF01F00101A926A0A9A93063A83 +:10126000CBC50C9B5C7A1A9CF01F00081A9B0E9C45 +:10127000300AF01F00096A08060606188B08C8DB4A +:101280008001EFF8000087F48001C7B88001D344E3 +:101290008001D6B08001D558D401F01F0002D802D9 +:1012A00080015D18EBCD40F8FACD00803225149313 +:1012B00018941297BA85FAC6FFFF0C9CF01F001B0A +:1012C000300806063019AC85AC981A951A9A498BE5 +:1012D000089CF01F0018C0503FFC2E0DE3CD80F895 +:1012E0000E9CF01F0015E04C0040C1701AD7493A1F +:1012F000E06B00800A9CF01F00120A9A3019491B0B +:10130000089CF01F000C2FFD1897580CCE61089C0C +:10131000F01F000D0E9CCE2B0E9A089C3019489B96 +:10132000F01F0004CDB0CD9B800091DC8003C4FC95 +:1013300080023BB8800091B8800399D0800091482A +:101340008003C50480024328D421210D300B4B6655 +:10135000169CF01F00368D0CC2B078075807C2A04B +:101360006F985808C2704B283014EF4400641A95E7 +:10137000340B1AD84AFA0A9CF01F002F08990A9ACF +:101380004AEB0E9CF01F002E2FFD580CC2506C082B +:10139000700CF01F002C6C09300893086C08700961 +:1013A0004A98722A910A6C09300893486C0C2F0DE8 +:1013B000D822F01F00261897CF70F01F00254A583A +:1013C0004A59118A4A5B0E9CF01F0025C2056E29FE +:1013D00049D89109CE9B08994A2A4A3B0E9CF01F96 +:1013E0000018C1C14A18340B1AD8492A0A9CF01FA8 +:1013F000001208990A9A49EB0E9CF01F00112FFD6C +:10140000580CC0C13088EF480054CC9B0E9CF01F94 +:10141000000D6C0930089308CC7B0E9CF01F00096E +:10142000CB7B000000008C8C80023B4C8003C50805 +:10143000800399D0800091488003C4FC80023BB8AF +:1014400080024190000003FC80024F4080023B225A +:10145000000004000000042800000404800212A41C +:101460008003C5108003C5148003C5188003C538E8 +:10147000D421169849871495189B109A49740E9C8C +:10148000A888F01F00170A9B30064965EF66002008 +:10149000341A0A9CF01F001449484959EB66004071 +:1014A000700B720CF01F00131896C0C0F01F0012D2 +:1014B0000A99098A0E9B0C9CF01F00106D185808A1 +:1014C000C021D822ECCAFFDC0A9C3209341BF01F71 +:1014D000000CD8220000040400000400800091DC0D +:1014E00000000428800091AC000003FC00008C8CFC +:1014F00080023B0680023B22800212A480023A68EE +:10150000D421210D328A300B1A9CF01F00301A9C16 +:1015100030073014504750544AD5F01F002E8B0C22 +:101520001A96C4A0FAC6FFD8318A0E9B0C9CF01FF5 +:1015300000274A984A990C9B50E850A96A0CF01F62 +:1015400000281896C3B04A7CF01F00274A761AD7A5 +:10155000304B1AD70E984A694A6AEC0B000CF01F00 +:1015600000260E981AD74A591AD74A5A302B0C9C83 +:10157000F01F00210E981AD74A291AD74A2A311B80 +:10158000ECCCFFF8F01F001C0E981AD749F91AD7B7 +:1015900049FA312BECCCFFF4F01F00170E982F8D79 +:1015A000ECCCFFF01AD749B91AD749BA315BF01F12 +:1015B0000012089C2FED2F0DD8226A0CF01F001787 +:1015C0000C9C8B06CF9B0000800091D000007A50CD +:1015D00080022B4C8003C5448003C54C80022C0440 +:1015E000800216FC8002113000007A5480021670CE +:1015F0008003C55480016EB8800217408003C3ACDD +:10160000800216C48003C5708002168C8003C58CCE +:101610008002161C8003C5A480022AF8EBCD40C0CE +:1016200021AD189798E8EDB80000C181368A300BDB +:101630001A9CF01F000C306A0E9B1A9CF01F000AC7 +:101640006E2830195C3850395028488870091A962D +:101650001A9A720C306BF01F00062E6DE3CD80C01D +:10166000800091D0800091DC00007A508002792CBB +:10167000D40148587009300A720C301BF01F000367 +:10168000D802000000007A508002792CEBCD404057 +:1016900021AD368A300B1A9CF01F000830084889AB +:1016A000500872081A961A9A700C302BF01F000519 +:1016B0002E6DE3CD80400000800091D000007A5074 +:1016C0008002792CEBCD404021AD368A300B1A9C3C +:1016D000F01F000830184889500872081A961A9AA4 +:1016E000700C302BF01F00052E6DE3CD8040000004 +:1016F000800091D000007A508002792CD401487883 +:10170000700EF6C9000E189AF8CBFFFA2F2A7C0C3F +:10171000F01F0003DA0A000000007A50800224E083 +:10172000D401580CC051304CF01F0004D802304C8A +:10173000F01F0003D80200008001A12880019F3023 +:10174000EBCD40E0FACD0170FACCFE98F01F001905 +:10175000581CC22145A85818E088001FE068010005 +:10176000FACBFE901A9C16D8F01F00131A95189603 +:10177000FAC7FF00368A300B0E9CF01F0010581677 +:10178000C11048F870090E9A720C300BF01F000D52 +:101790002A4DE3CD80E0300CF01F000B2A4DE3CD45 +:1017A00080E045B85808FE9AFFEE540D5418CEABB1 +:1017B00080015F448002116C800091D000007A505B +:1017C0008002792C80021720000000000000000039 +:1017D000EBCD40C0F8F800D418971696F0F80088C2 +:1017E000F8FA00E85808C040F8FC00C45D185876C4 +:1017F000C1A058065F0858365F091248C11030185A +:10180000EF4800ECEEF900D473985808C050300B44 +:10181000EEFC00C45D18EF4600E8E3CD80C05846FA +:10182000CEF0CFABEEF800EC5808CF603008301B9C +:10183000EF4800ECEF4B00F0EEF800D47198580838 +:10184000CE81CEABD401F01F0002D802800217D0A7 +:10185000F8FC00E85EFCD401F8F800D471A8580840 +:10186000C050F8FC00C45D18D802109CD802D40106 +:10187000F8F800D471185808C050F8FC00C45D187E +:10188000D802DC0AD401F8F800D471285808C050F6 +:10189000F8FC00C45D18D802DC0AD703EBCD408009 +:1018A0003008F8F90108F94801085809C031C08822 +:1018B0000E997207129CF01F00045807CFA1E3CDC8 +:1018C00080800000800091E8D401F8FC00DCF01F6B +:1018D0000002D8028002B4A4D401F8FC0090F01FEA +:1018E0000002D80280023B8CD401F8FC0090F01F6B +:1018F0000002D80280023C84EBCD40C01696F8F777 +:1019000001085807C051C0B86E075807C080EECC18 +:10191000FFFC306A0C9BF01F0004CF710E9CE3CDDE +:1019200080C000008000917CD4011699F8F801185D +:101930005808C0A1F8F800D470285808C0C0F8FCB6 +:1019400000C45D18D802F8CBFF64306A129CF01F07 +:101950000003D80ADC0A0000800091DCEBCD40F8DF +:1019600020AD1897F8F801185808C06030070E9C91 +:101970002F6DE3CD80F8F8F800D470385808CF7098 +:10198000F8FC00C41A9B1A935D181895CF05EEF861 +:1019900001185808C431EEF800D470285808CE70E9 +:1019A000FAC4FFE0EEFC00C4089B5D18CE05EEFC17 +:1019B000009078465806C301EEF800D45808C2C01B +:1019C000700C49BBF01F001BEFFC0024F9B60001AE +:1019D000EFFC102478075807C111CCAB5806C0B0F3 +:1019E0006E885808CC50EECBFFE8306A089CF01F98 +:1019F0000012CBE06E075807CBB0EEF80194580800 +:101A0000CFA16E581035CEB16E4B0A9A1A9CF01FBA +:101A1000000ACE70CE4B3006CDEBFAC4FFE0306A40 +:101A2000EECBFF64089CF01F0005CC2B8003C65C46 +:101A3000800091A08000917C800091DCD401F01F97 +:101A40000002D8028002195CD42120AD3008FB5876 +:101A50000024508816961897F6F801845818C0404C +:101A60003FFC2F6DD82277185808CFB0F8F500B892 +:101A70005885C2205905CF512DCB0A9A1A9CF01FC8 +:101A800000171A940A9A303BEEFE00D47C5858088E +:101A9000CE801ADA1AD43009EF490104EEFC00C4F2 +:101AA00030681AD8FACAFFD430181ADA48CA7C56F5 +:101AB0005D162FCDCD7B2DCB318A1A9CF01F0007F0 +:101AC0000A9AECCBFFCCFACCFFE8F01F00041A9482 +:101AD000320A302BCDAB0000800091DC80039C38B3 +:101AE000D42118951696F01F000F1897C05078381B +:101AF0002FF89938D82A310CF01F000B1894C0F039 +:101B00000C9B306A2FCCF01F000930188938EAF995 +:101B100001088909EB4401080E9CD822DC2A000048 +:101B2000800218F880028F24800091DCEBCD40FC0D +:101B3000EDD9C010407218941693ECCCFFFC1495AC +:101B4000910CF01F00161897C190E8F800907039BA +:101B5000EC081608B893B889B8B6B8A85805C100FB +:101B60000C9A0A9BF8C6FFFC0C9CF01F000D0E9C03 +:101B70005802E5F61A00E3CD80FCE3CD80FC0C9A18 +:101B80000A9BF8C6FFFC0C9CF01F00060E9C580236 +:101B9000E5F61A00E3CD80FC80009200800091DC25 +:101BA000800091D0D401401E5C791ADEF01F000243 +:101BB0002FFDD80280021B2CEBCD40F8203DF8F819 +:101BC00000BC1493129458485F0A58285F0918976C +:101BD00016961449C0603FF70E9C2FDDE3CD80F8C8 +:101BE000F8FC00DCF01F002BC0305816CF50EEC5BB +:101BF000FF64306A4A8B0A9CF01F0028C0D1EEF8BF +:101C000000D470285808C060EEFC00C41A9B5D1810 +:101C1000C370EEC5FF043008F7D6C0081AD8F3D455 +:101C2000C010FAC8FFF4069A0E9CF01F001D2FFD8D +:101C30001896580CCD1040296E2C580CC1001298E3 +:101C40000A9B0C99E06A888EF01F001618970C9C6E +:101C5000F01F00150E9C2FDDE3CD80F8EEF800D4C8 +:101C600071845804C0B01298EEFC00C40A9B0C9911 +:101C7000E06A888E5D141897CEBB3FF7CE9B306A22 +:101C8000485B1A9CF01F0005CC501A95CC5B0000F5 +:101C900080028F78800217C88000917C80021B2C04 +:101CA00080028154800091E8EBCD40C0189EEFDAAD +:101CB000C010782C580CC0600E9AF01F0009E3CDBC +:101CC00080C0FCFA00D475865806C0700E9AFCFCE1 +:101CD00000C45D16E3CD80C0E3CFC0C08002815454 +:101CE000D421497A1894301BF01F0016300A089B43 +:101CF000495CE8C5FF64F01F0015E8F701085807C4 +:101D0000C1C03006C0680E966E0C580CC1601897A2 +:101D1000306A0A9BEECCFFFCF01F000DCF51580635 +:101D2000EFF80000E9F80A42EFF81000EDF81A00A9 +:101D30000E9CF01F0008D822D82200008003C66441 +:101D400080023A1A80023058800274008000917C30 +:101D5000800091E8D401F01F0002D80280021CE04C +:101D6000EBCD408048FA1897301BF01F000FEEF8BB +:101D700000BC5818C0F00E9B300A48CCF01F000C75 +:101D80000E9CF01F000C0E9C307BF01F000BE3CD6F +:101D900080800E9C305BF01F0008E3CD8080000047 +:101DA0008003C68880023A1A8002360080027400DE +:101DB00080021CE0800217D0EBCD4040486A1896A4 +:101DC000301BF01F00060C9B300A485CF01F00051A +:101DD000E3CD80408003C6A880023A1A8002360014 +:101DE00080027400EBCD40F81894F8FC00CC580C3D +:101DF000C360E8F800D05808E08A00321897E8C3BA +:101E0000FF643005C0A8580AC200EEC7FF64E8F8B6 +:101E100000D00A38E08A00242FF5E8F600B0306AD6 +:101E2000069B0E9CF01F0015CF115806C0E06C5A9F +:101E30006EA81438CE91EECCFFFA6C4BF01F000F59 +:101E4000C0406C5A580ACE215807C0906F5AEECB4A +:101E5000FFD4E8FC00DCF01F000AC0403FFCE3CDEB +:101E600080F8EECBFFA8E8FC00DCEEFA0080F01F63 +:101E70000005CF60CF4B00008000917C8002B58CC4 +:101E80008002B52CD4211895E06C009CF01F001B3B +:101E90001897C310EAF401185804C2A1EAF800D454 +:101EA00070C85808C250189B301AEAFC00C45D186C +:101EB0001898C1E50E9C3016E06B009CF0060D46AC +:101EC000EC0B024BF01F000E58065F09580C5F1810 +:101ED0001248E8081800F8071710EAFC00CCF01FB9 +:101EE0000009089CEB4600D0EB4700CCD8220E9CA2 +:101EF000F01F0004DC2A000080009200800091F4B2 +:101F0000800091E8EBCD40801897F01F0008C031A9 +:101F1000E3CD80800E9CF01F0006C0550E9CF01F84 +:101F20000003CF7BE3CFC08080021DE480021E84CB +:101F3000EBCD40FE208D18961697149512921091B5 +:101F4000580BC580F6FB0080580BC0E16F5B580B47 +:101F5000C3210C9CFEFA02E4303BF01F00B93FFCA9 +:101F60002F8DE3CD80FE7568EDB80001CF011A9A80 +:101F7000EECCFFA8F01F00B3CEA16B484029126839 +:101F8000CE606B3840191268CE206B584039126809 +:101F9000CDE0FEFA02B2301B0C9CF01F00A9EEC48B +:101FA000FFD4302A303BECFC00DCF01F00A8089C7A +:101FB0006F5AC4386B68EDB80000CCC1EEC4FFD4D2 +:101FC0001A9A089CF01F009FCC516B484029126858 +:101FD000CC106B3840191268CBD06B58403912685E +:101FE000CB90FEFA026A301B0C9CF01F0095301A51 +:101FF000CDAB7568E21800021A93F9B40102F9B486 +:102000000001F8FC00DC1A9BF01F0092C1F05BECB1 +:10201000C4001A9C320A300BF01F008F6B48502806 +:102020006B3950196B585038089A303BECFC00DC87 +:10203000F01F0086300C189A189BECFC00DCF01F97 +:102040000087C3602F8DE3CFC0FE402A6B49F3EABF +:102050000008C0D0401A6B39F3EA0008C110403ABA +:102060006B59F3EA0008C1B04004CDFB1AD9302BFC +:102070001ADA0C9C4FAAF01F00722FEDCCBB1AD9B4 +:10208000302B1ADA0C9C4F7AF01F006D2FEDCC2B01 +:102090004F5A302B0C9CF01F006ACBCB1AD9302B37 +:1020A0001ADA0C9C4F1AF01F00662FEDCB3B580735 +:1020B000EE0B1700F60A1700F9B80158EFD8E10B3C +:1020C000EFFA1020ECFC00DCF01F0069CBC16B487C +:1020D0004029F1E90009EDB90004C5D0EDB90003CC +:1020E000C750EDB90002E081009430484E1AED4827 +:1020F00000B8301B0C9CF01F00526B384019F1E9FE +:102100000009EDB90004C500EDB90003C7513088DE +:102110004D9AED4800B4301B0C9CF01F00496B58E1 +:102120004039F1E90009EDB90000E080007FEDB928 +:102130000001C55130284D1AED4800BC301B0C9CE5 +:10214000F01F003FECFA00BC306BECFC00DCF01F31 +:10215000003FECFA00B4304BECFC00DCF01F003B1D +:10216000ECFA00B8305BECFC00DCF01F0038029A9F +:10217000049BECFC00DCF01F00421894FE91FF640D +:102180006B57E2170002C191ECFC00DCF01F003D30 +:102190000E9CCE7A31084BCAED4800B8301B0C9C1F +:1021A000F01F0027CABB31084B8AED4800B4301B32 +:1021B0000C9CF01F0023CB4BECFC00DCEACBFFDCDB +:1021C000320AF01F0033089CCCCA30884B1AED4805 +:1021D00000B8301B0C9CF01F001AC90BEDB90004AD +:1021E000FE91FF3231084ACAED4800BC301B0C9CFE +:1021F000F01F0013CA8BEDB90000FE91FF25301BC4 +:102200004A6AED4B00B40C9CF01F000DC89BEDB961 +:102210000001FE91FF1930284A1AED4800B8301B22 +:102220000C9CF01F0007C6AB301B49EAED4B00BC0D +:102230000C9CF01F0003C87B8003C8EC80023A1A94 +:102240008002BD688003C6C08002B4D48003C6E0AB +:102250008002C04C800091D08002B58C8003C734CE +:102260008003C7788003C7008003C7BC8002B52CF9 +:102270008003C8288003C86C8003C8B08002B64CB5 +:102280008002B9EC8003C8008003C8588002B91CE2 +:102290008003C8148003C8CC8003C8808003C84072 +:1022A0008003C894EBCD40C07758EDB80003F9B86F +:1022B0000008F9F80A2FF9B80104F9F81A2F18974D +:1022C000300A1696F8FC00DC149BF01F0025300A3B +:1022D000EEFC00DC149BF01F0023300AEEFC00DC57 +:1022E000149BF01F002130183009ECCBFECCEF48D6 +:1022F00000B8EF4800B4EF4900C02FF976085858ED +:10230000E08B00225808C2512FCB5849CF71EEFA0A +:1023100000BC306BEEFC00DCF01F0014EEFA00B4E1 +:10232000304BEEFC00DCF01F0011EEFA00B8305B21 +:10233000EEFC00DCF01F000DEEFC00DCF01F000CDA +:10234000E3CD80C03048EF4800B8EF4800B4CE0B72 +:102350003028EF4800B8EF4800B4CDAB8002B58C10 +:102360008002B52C8002B5EC8002B4D480028F804C +:10237000EBCD40E0205D1897F8F600B0F8F800BC0F +:102380005828C57059085F0958485F081248C2901C +:10239000302BEEFC00E0F01F002F314A300B1A9C6E +:1023A000F01F002D1A95EEFA00BC588AC200EEF814 +:1023B00000905808C03070785028149958895F18D8 +:1023C00058195F191069ECF8017CEEFC00E01A9ACC +:1023D0000C9B50495038F01F00212FBDE3CD80E009 +:1023E000300BEEFC00E0F01F001BCD8B30085018C6 +:1023F000301B500BECF900F0F3EB0008FBFB1A016B +:10240000EDB90001C120EEF800905808C1F0EEFCD3 +:1024100000D4580CCD10780C491BF01F0012FBFCA7 +:102420000A01EEFA00BCCC4B4018A1B85018CECB34 +:10243000300BF8FC00E0F01F000C300BEEFC00E06D +:10244000F01F000AEEF800BCC9EB3089CB8B00000E +:1024500080026178800091D08002581C8003C65CA5 +:10246000800091A0800261A48002618CEBCD40E0ED +:10247000189716951496F8F800905808C0D0704830 +:102480005808C0A1F8FC00D4580CC060780C48EB88 +:10249000F01F000EC1501AD648DA1AD5301B0E9C18 +:1024A000F01F000C300A0E9B48BCF01F000C0E9968 +:1024B0000C9B0A9C3008488AF01F00092FEDE3CDE1 +:1024C00080E000008003C65C800091A08003C960AA +:1024D00080023A1A800230588002740080027474BC +:1024E000D4211295169614941897F8F900BC5849FF +:1024F000C1C0F8FA00F4580AC10158895F08581998 +:102500005F0B104BF40B1800F9BB000AF9BB014636 +:10251000F01F0019EEFA00F4F4C8FFFFEF4800F4D2 +:10252000EEF900945809C020D822306A0C9BEECCFA +:10253000FF04F01F0012EEF800BC5828C111EEF89D +:1025400000D471585808C040EEFC00C45D180A99C8 +:10255000089A0C9BEEFC00DCF01F0009D8220A99B7 +:10256000089A0C9BEEFC00E0F01F0006FE99FFDECF +:10257000CE7B00008002246C800091DC8002C3CC02 +:10258000800261FCEBCD406C1ADA18951ADB1692CA +:102590001493301B48AAF01F000B48B6300A0A9B60 +:1025A0000C9CF01F000A0A990C9A069B049C3008A8 +:1025B000F01F00072FEDE3CD806C00008003C99071 +:1025C00080023A1A8002360080027400800274741D +:1025D000D401F01F0002D80280022584EBCD40C058 +:1025E000189E1497109CFCF800BC5888C240580BE9 +:1025F000C1A0FCCAFF64FCF600D46C585808C19016 +:102600001ADC16981AD9300BFCFC00C41ADBFD4BFF +:102610000104490E0E991ADE301B6C565D162FCD43 +:10262000E3CD80C0FCF600D448BA6C585808CE916F +:10263000E3CFC0C0585CF9B80002F9B80104580BE8 +:10264000C040FD4800B4CD6BFD4800B8482ACD4BD2 +:1026500080037E2080039C38EBCD40F8FACEFFE863 +:1026600018967C35F8F400D47C037C17685C7C2ECB +:10267000580CC0F01AD51ADE300E1AD71AD3ED4E08 +:102680000104ECFC00C468565D162FCDE3CD80F844 +:10269000E3CFC0F8D42118951694F8F70104580731 +:1026A000C020D822F8F900D472585808C4C01AD7EC +:1026B000F94701041AD70E981AD74B6A1AD70E9BFE +:1026C0007256F8FC00C40E995D16EAF900D42FCDBD +:1026D00072585808C3801AD7EB4701041AD70E98CE +:1026E0001AD74ACA1AD70E9B7256EAFC00C4301990 +:1026F0005D16EAF900D42FCD72585808C2401AD797 +:10270000EB4701041AD70E981AD74A2A1AD70E9BFC +:102710007256EAFC00C430295D16EAF900D42FCDC8 +:1027200072585808C1001AD7EB4701041AD70E98FF +:102730001AD7498A1AD70E9B7256EAFC00C4303960 +:102740005D162FCD5804C200EAFA00D47458580818 +:10275000C12030091AD91AD9EB4901041AD91298A3 +:102760001AD9129B7456EAFC00C4089A5D16EAFA5C +:1027700000D42FCD75A85808C070089B3019300AB6 +:10278000EAFC00C45D183018EB480104D8220000B0 +:1027900080039C38D421204DF8F900D41897169561 +:1027A00073885808C2C11094F8C6FFEAC1C8EEFC8D +:1027B00000C45D1B1AD4189B0E984C19E06A888ED1 +:1027C0000C9CF01F00408F2C2FFD580CC111580598 +:1027D000C140189B305CF01F003CEEF900D47388B8 +:1027E0005808C0D1737B580BCE31169CCE4BEECB24 +:1027F000FFF0F01F0036C1302FCDDC2A7378580867 +:10280000C0B0EEFC00C45D18C070189B306AEECCFE +:10281000FFF0F01F002F6E2C580CCEA1EF39007A7C +:102820003008F0091800C3A1EEF800D47048580829 +:10283000C100301BEEFC00C45D18C0B4EEF800D43B +:1028400071485808C0601A9BEEFC00C45D18C214A1 +:10285000300B0E9CF01F001FEEF800D47099580941 +:10286000C070300BEEFC00C45D19EEF800D470A807 +:102870005808C050301BEEFC00C45D183018EF48FB +:1028800000C84959300C72082FF893082FCDD82270 +:102890004038F1D8C002CDD0CB0B300848891AD8C7 +:1028A000E06A888E0E98EECBFFF0EECCFF86F01F2C +:1028B00000058F3C2FFD580CCB81C9FB800224E022 +:1028C0008002819C80028F1C800281E4800091DC68 +:1028D0008002269400007A6CEBCD40E018971695A4 +:1028E000300BF01F001DEEC6FF64306A49BB0C9C24 +:1028F000F01F001BC2E0EEF801185808C1F00C9B55 +:102900000E9CF01F00183006EEFC00DC0C9BEF461E +:1029100000B0F01F00150C9A0C9BEEFC00E0F01FBD +:1029200000130C9BEEFC00E0F01F00110C9BEEFC72 +:1029300000E0F01F0010E3CD80E0EEF800D470D886 +:102940005808CDE00A9A0C9BEEFC00C45D18CD8BB4 +:102950001896CD6B800217D0800217C88000917C3A +:10296000800226948002B9D48002581C800261E85B +:10297000800261D4D401F01F0002D802800228D85E +:10298000EBCD40C01897F8F800C45808C230303B6F +:10299000F01F003DEEF800D470495809C070300BAC +:1029A000EEFC00C45D19EEF800D470A95809C0709F +:1029B000300BEEFC00C45D19EEF800D47098580896 +:1029C000C050300BEEFC00C45D18300B0E9CF01FA5 +:1029D000002F6E2C3006F01F002E8F266E3C580CF8 +:1029E000C040F01F002B8F36EEF800E45808F9B80D +:1029F0000100EFF81A39EEFC0090580CC060F01F8F +:102A000000253008EF480090EEFC008CF01F0022FB +:102A10003006EEFC00DC0C9BEF46008CF01F001F24 +:102A2000EEFC00E0F01F001EEEFC00DCEF4600E0D4 +:102A3000F01F001CEEFC00DCF01F001BEEFC00DCB5 +:102A4000F01F001A0E9CEF4600DCF01F0019EEFC90 +:102A500000CCF01F00110E9CEF4600D0EF4600CCDA +:102A6000F01F00140E9CF01F0014EEFC00C4580C64 +:102A7000C070EEF800D470785808C0205D18E3CD1F +:102A800080C00000800228D88002269480028174D1 +:102A9000800242B4800091E88002B4CC800256ECFF +:102AA00080029438800294088002C0788002189CCA +:102AB00080021DB880021CE0EBCD4080169778099B +:102AC0001639C0F1761899080E9CF01F000A0E9C6A +:102AD000F01F0009E3CF808072180E38C060109993 +:102AE0005809CFB1E3CFC0806E189318CEEB000029 +:102AF00080022980800091E8EBCD40801897580C27 +:102B0000C051C1980E9CF01F000D6E0B580BCFB139 +:102B1000F01F000BF01F000B6E4C580CC060F01F34 +:102B2000000A6E4CF01F00096E8CF01F00080E9C0E +:102B3000F01F0006E3CD808080022AB88002724C2C +:102B40008002728480028F20800091E8EBCD40C02B +:102B50001897580CC05130060C9CE3CD80C0F01F74 +:102B60000021CFA1334CF01F00201896CF606E08D3 +:102B70006E19991899296E286E89993899996E3C21 +:102B8000580CC040F01F00198D4C6E7C580CC04092 +:102B9000F01F00168D8C6E498D59495891096E5A57 +:102BA0008D6A4948910A49486E698D7991090C9C52 +:102BB000F01F0012C11130196C988DB95808EDF949 +:102BC0001A0C6C285808CC906C185808CC606C4CC7 +:102BD000F01F000BCC200C9C3006F01F000ACBDB52 +:102BE0008002720880028F24800091940000046C9F +:102BF00000007AA400007AA0800275F880028F1E7F +:102C000080022AF8D431204D580C5F08580B5F0918 +:102C1000189316971248C05030050A9C2FCDD83211 +:102C2000E06C011CF01F00C01895CF803018F948E7 +:102C3000010CFEF102F66E22620B580BC100580225 +:102C4000E0800144E2C4FFFC3006760B049CF01FD8 +:102C500000B8C0C02FF6090B580BCF810A9CF01F9B +:102C600000B50A9CF01F00B4CD8BE2060328EB48A8 +:102C700000D46E0C580CE0800122F01F00B0EB4C29 +:102C8000008CF01F00AFEB4C0090CE906E185808EF +:102C9000C0A0785CF01F00A86E1CEAF60090F01F40 +:102CA00000A78D5C6E385808C0C0EAF8009070BC70 +:102CB000F01F00A16E3CEAF60090F01F00A08DBC52 +:102CC000EAF800905808CCB06E4C580CCC80F01F3D +:102CD000009DE04C0063FE9BFFC3EAC1FFEA364A59 +:102CE0006E4B029CF01F00986E5C580CE08100F95E +:102CF0006620340CF01F008C1897CB10FEF8024CA5 +:102D00008F78FEF8024AFEF9024A8F98FEF80248D0 +:102D10008F058F458F658F898FC83006FEF4023C82 +:102D20008F168FA4FEF202388FB2EAF900907288F3 +:102D30008FD8EAF9009072988FE8EAF9009072A8AB +:102D40008FF8F01F0088EB4C00E0E08000C20C9B85 +:102D5000F01F00850C9BEAFC00E0F01F0084EAF8FD +:102D600000D470685808E08000A7029B0A9C5D1898 +:102D7000EB4C00C4FE90FF74EAF8009070BBEAF8D8 +:102D800000D470895809C0605D19FE95FF69EAF8A2 +:102D900000D471685808C0F0EAFC00C45D181897A8 +:102DA000C0A0029BF01F0062C0600E9B364A029CCE +:102DB000F01F006534CCF01F005CFE90FF514EC840 +:102DC0004EC9991899294EC84EC9993899494EC883 +:102DD0004EC9995899694EC84EC9997899894EC873 +:102DE0004EC9999899A94EC84EC999B899D94EC853 +:102DF0004EC999C899E94EC84EC9F9440040F942F4 +:102E00000044990599F8F9490048F01F0069EB4C16 +:102E100000DCFE90FF25EB39007A3008F00918003D +:102E2000C5C1300A029BF01F0063EAF80090EAFC7B +:102E300000DC707BF01F0060EAFB00E0EAFC00DCD5 +:102E4000F01F005EEAFA009074C85808C60174D8F2 +:102E50005808C52174EA580AC080302BEAFC00DC0F +:102E6000F01F0057FE91FEFC009B0A9CF01F0055CE +:102E7000FE95FEF6EACBFFF0EAFC00DCF01F005204 +:102E80003FF8EB4800E4EAF900D473485808C0D092 +:102E90001A9BEAFC00C45D18C0814038EDB80002FE +:102EA000C0413018EB4801188B0366088B18870562 +:102EB000FE9FFEB5EB4800C4CD2A6E3B6E1CF01F92 +:102EC0000043EB4C0090CFDAF94B00D4CD3A0E9C86 +:102ED000F01F0019FE9FFEC4EACAFF86CA4BF01F0E +:102EE000001958FCFE9BFEBC6E5B310AEACCFF86E3 +:102EF000F01F0015CFEA109A301BEAFC00DCF01F2F +:102F00000030FE91FEADEAFA0090CA5B109A300BD9 +:102F1000EAFC00DCF01F002AFE91FEA2EAFA009013 +:102F2000C97B000080028F2400000470800091A003 +:102F300080022980800091E88000919480021348EB +:102F4000800091B8800091AC80021D60800225DC79 +:102F500080021BB8800218C8800218E8800218D8C6 +:102F60008002609C800261E8800261D48002184483 +:102F700080021850800225D0800229748002304CD3 +:102F8000800226588002360080021A3C80021928EE +:102F900080021CA880021F0480021BA480021D5412 +:102FA0008002186E80021884800218568002C0DCED +:102FB0008002B4C08002B4B88002B4CC8002B4D421 +:102FC000800227948002B90480023B4CEBCD40E0A4 +:102FD000306A18971695F8C6FF64497B0C9CF01F61 +:102FE0000017C270EEF801185808C1800C9B0E9CA7 +:102FF000F01F00130E9CF01F00133006EEFC00DCE7 +:103000000C9BEF4600B0F01F00100C9A0C9BEEFCDE +:1030100000E0F01F000EE3CD80E0EEF800D470E891 +:103020005808CE500A9A0C9BEEFC00C45D18CDFBEC +:103030001896CDDB800217C88000917C8002269410 +:10304000800276648002B9D48002581CD401F01F3B +:103050000002D80280022FCCEBCD40C0499BF8C7BC +:10306000FF641896306A0E9CF01F0017EDFB189C49 +:10307000E06800A2EDD8E007EDFB08A20FD81AD84F +:103080000FC91AD90FB81AD80FA91AD90F9848FA28 +:103090001AD80C9C1ADB302BF01F000D0E9B0C9CD9 +:1030A000F01F000CECFC00DCF01F000B303B0C9C14 +:1030B000F01F000A30182FADED4800A8E3CD80C006 +:1030C000800217C88000917C8003C9B880023A1A38 +:1030D00080021AE08002BA1C80022FCCD431FACDD3 +:1030E00000D03007F94700A8189516941491580B92 +:1030F000E0800217F6F60084E8CCFFFA76ABF01F0A +:10310000012A1AD61ADC09D81AD809C91AD909B855 +:103110001AD809A91AD909981AD809890A9C1AD95A +:10312000FEFA0488302BF01F01220E9B306A2F8D8F +:10313000EACCFF64F01F011F306A089BEACCFF5EF7 +:10314000F01F011D0A9CF01F011D300AEAFC00DC83 +:10315000149BF01F011B635AEDBA0003C061E2F833 +:1031600001745808E08100B1301063795809C0E05B +:10317000E1D9C0011298EDB90001E08000A4EDB9D9 +:103180000002F9B80004E1D8E030EAF800D4710890 +:103190005808C060009BEAFC00C45D18635A5804DC +:1031A000C07069585808C5A0F1DAC002C6E114978A +:1031B000E2170013C5B1029B0A9CF01F0102FAC876 +:1031C000FF9453375028089B0A9CF01F00FFEAF831 +:1031D00000B45828E08001BAE089007F5818E080E8 +:1031E000017130285038EAF800B85828C7F058283C +:1031F000E08900805818E080016230285048EAF9E0 +:1032000000BC58495F0B58895F08F7E81008C78071 +:10321000E2C9FECCE2C8FF0C16963007EC1600019E +:103220005019500812931092505766095809E081BE +:1032300001122FF72FC32F025847CF81EAF900BCA4 +:103240005889C671E2F800F04059F1D8C002F3E89D +:103250001008E08101311096C5F8E8F800805808A0 +:10326000CA70F1DAC002CA40C1083509FAC8FF3095 +:1032700010D9029AFAC9FF94300B50290A9CF01F0A +:1032800000D3CA202CCDD832E2F801485808E0819A +:10329000010FEAF900B0089A300BEAFC00DCF01FDD +:1032A00000CCE080017A3509FAC8FF3010D9029AC3 +:1032B000FAC9FF94089B50290A9CF01F00C4C8401B +:1032C000CE2BA1B0C5DBE2F801785808F9B00004B4 +:1032D000F9B00105C4BB5848C8605908C831303935 +:1032E0005039EAF800B85828C83130195049C88B0D +:1032F0005848C8505908C82130395049C81B3008AF +:103300005058E2C8FECC30165018E2C8FF0C5008E6 +:103310005909E080011FEAF800D470A85808C0508D +:103320000C9BEAFC00C45D18303B0A9CF01F00A90E +:10333000354AFAC7FFE8300B0E9CF01F009E580478 +:10334000E0800126E8F8008450645098E8C8FFFA4D +:10335000507868A95089E2FA0184581AE080009EEA +:103360004029403850A950C84049433850D950B836 +:10337000EAF800BC5848E08000E7E0890088581867 +:10338000E08000A43018510A4014400350E850F087 +:10339000FACAFFAC0899069BFACCFF9C7208580841 +:1033A000C040F54BFFF0720814A82FC92F0B183A34 +:1033B000CF61E2F801445198EAF601185806E0801E +:1033C0000089FEFA0212302B0A9CF01F0079301996 +:1033D000EAF800BC5908E080008F5809E0800098A6 +:1033E000305B300A0A9CF01F007D40585808C1C06D +:1033F000EAF800D471485808C170FACBFF44EAFCDF +:1034000000C45D18C1114328EDB80001C0D1189760 +:103410004F30189268095809E08100A12FF72FC496 +:103420002F035847CF81EAF800B05808C070103118 +:10343000C050EAFC00E0F01F006BEAFC00DC029BDD +:10344000EB4100B0F01F00680A9CF01F00682CCD13 +:10345000D832EAFB00D4E2FA014476585808C13069 +:103460001AD91AD23009EB4901041AD94DC90E3ABA +:103470005F081AD94DEA76560E99301BEAFC00C453 +:103480005D162FCD30165056CD5A5888C2005908B7 +:10349000FE91FF7A3048C78BE2F901A45809FE9AE1 +:1034A000FF6140985808FBF90A09C5BB6368F1D869 +:1034B000C021CF0A50375047C2FB30085048CA0AD3 +:1034C00030085038FE9FFE913008C5EB3038C5CB30 +:1034D000EAF800D470F85808FE90FF750E9BEAFCDD +:1034E00000C45D18FE95FF6F0C99EAF800BC5908FE +:1034F000FE91FF75029B0A9CF01F003E0A9CF01F84 +:10350000003E307B0A9CF01F0033C70BEAF80090A6 +:1035100070495819F9BB000AF9BB013CC63B745B02 +:10352000744CF01F00214B5A1ADC302B0A9CF01F00 +:103530000020306A089BEACCFF5EF01F001E2FFDC2 +:10354000FE9FFE023028C20B30195039FE9FFE4DFF +:10355000029B0A9CF01F0027CDFAEAFB00D4E2FA96 +:10356000014476585808FE90FF5B1AD91AD3EB42F3 +:1035700001041AD20E3A5F081AD00E99765649CA3B +:10358000301BEAFC00C45D162FCDC49B6248507806 +:1035900062595089CE1A301BEAFC00E0F01F001877 +:1035A000FE9FFE8380023A1C8003C9F880023A1A0B +:1035B000800091D0800091DC80021DB88002B5ECC3 +:1035C000800222A48002269480021F308002938011 +:1035D000800217D08003CA6C8002246C80037E2096 +:1035E000800257488002B9D48002237080039C383F +:1035F00080021A4880021CE08003CA488002559667 +:10360000EBCD40C021AD1897F8F800AC5808C68142 +:10361000F8F6010CEEFB009076095809C061C8F875 +:1036200072095809E080008CF2F801945808CF9193 +:103630003008EF48010C76495809C670EEFC00D4FA +:10364000580CC0E04DAB780CF01F005AEFF8002486 +:10365000F1FC0A04EEFB009076485808C560EEF8CD +:1036600000E85818E088008D760AEEF800C858186F +:10367000C3F0580AC090103AC041C3981438C370C0 +:10368000740A580ACFC15826C04076485828C690B8 +:10369000580AEFFA1A32F9B80001EFF80A32EEF9D7 +:1036A00001105809C04176485818C710EEF80118A3 +:1036B0005808C4F1580AF40B1700F60A1700F5FB76 +:1036C0001004F5FA1005EEF800D470B85808C410CC +:1036D000EEFC00C45D18C3D12E6DE3CD80C0F8F6BA +:1036E000010C5806C9812E6DE3CD80C0740A580ABA +:1036F000CCB0F4F801945808CFA175885808CC4193 +:1037000076485828CF41CC0B0E9CF01F002BCE5092 +:10371000EEF800B05808EFFC0A2C0E9CF01F0027B2 +:10372000300B1A9C368AF01F00261A961A9A0E9CA5 +:10373000300BF01F00242E6DE3CD80C05806FE91A3 +:10374000FF790E9C301BF01F00202E6DE3CD80C052 +:103750000E9C300A30ABF01F001D2E6DE3CD80C0F3 +:10376000580AC1D074085808EFFA1A32F9B80001A3 +:10377000EFF80A320E9C300BF01F0015CAEB302B0D +:103780000E9CF01F0011EEFB0090C6FBEF480110ED +:10379000129A0E9C303BF01F000BC9FB30180E9C98 +:1037A000EF4800C8149BF01F0009C97B8003C65C6A +:1037B000800091A08002195C80022370800091D06B +:1037C0008002792C800217D080022584800230DCB0 +:1037D0004848300A48499118910A930A5EFF000050 +:1037E00000007A7000007A78EBCD40681695189347 +:1037F000F6CCFFEDF01F0022314A1896300BF01F77 +:1038000000210A9A8D15ECCCFFF0069BF01F001EDC +:1038100049EAF5090042AC09F50800422FF8F558CD +:10382000004249B530088D286A198D3993062F86D4 +:103830008B1649866C08F0C9FFFF8D095909E0888D +:1038400000180A936A0C782A580AF9F80003E7F876 +:103850000A01F9F81003F5F81A0320197838910ACB +:103860008D09F01F000D6C095909FE9BFFED300A10 +:10387000326C149BF01F0009E3CF90688000920027 +:10388000800091D0800091DC000087F400007A7005 +:1038900000007A78800091E880014658EBCD40E046 +:1038A00030961697305E300B33A51989F2C8003078 +:1038B000EC081800E08B0019F2CA0030580AC2C5A3 +:1038C0001999F2C80030EC081800E08B0017F2C814 +:1038D00000305808C215F1EA1048EE0B0B08585B8F +:1038E000C291E3CF80E0F2C80061FC081800E08BD1 +:1038F000000EF2CA0057CE3BF2C80061FC08180067 +:10390000E08B000DF2C80057CE5BF2C80041FC0806 +:103910001800E088000DE3CFC0E0F2C80041FC08C9 +:103920001800FE9BFFFAF2C80037CD4BF2CA0037F1 +:10393000CC6B19A8EA081800CEF12FFB586BCD20EC +:103940002FDCCB4BEBCD40E016961497580AC4C041 +:10395000300B3095305EC1B8F2CA0030580AC365EA +:103960001999F2C80030EA081800E08B0021F2C86B +:1039700000305808C2B5F1EA10485808C275EC0B7F +:103980000B082FFB1637E08800302FEC1989F2C89E +:103990000030EA081800FE98FFE1F2C80061FC0858 +:1039A0001800E08B000EF2CA0057CD9BF2C80061F0 +:1039B000FC081800E08B000DF2C80057CDBBF2C820 +:1039C0000041FC081800E088000DE3CFC0E0F2C819 +:1039D0000041FC081800FE9BFFFAF2C80037CCAB90 +:1039E000F2CA0037CBCBE3CF80E0F6CA00015E6CB1 +:1039F000F80A000913882FF85C58B2885E1CF6C8D4 +:103A00000002100CC08819882FF85C58B888201C58 +:103A100058085E1C201ACF875EFC5EFCEBCD40C0D0 +:103A200049071696189BE0460020F9B60B200E9C1D +:103A30000C9AF01F000D3008EE060B080F8858088E +:103A4000C0D00E9C35E935FA2208F2081800F9FAC0 +:103A5000BE002FFC19885808CF81482CE3CD80C0C8 +:103A600000007A7C800091DCEBCD40FE189114922E +:103A7000169C1293580BC2A0E20B00045809C20016 +:103A800002973006C0881835E08A001418070C33F6 +:103A9000E0880018E4060708E80701051AD80E9C1C +:103AA00048CA0A9B2FF6F01F000C2FFD580CCEC4FD +:103AB0003008EE01010CE968FFFFE3CD80FE0297BC +:103AC0003008EE01010CE968FFFFE3CD80FE000045 +:103AD0008003DA3080009148580CC140F8FC00D0D7 +:103AE000580CC1002FCCF8F8FFFC5808C0417809E9 +:103AF0005809C0901638C0302F8CCF6B7808143816 +:103B0000CFC15EFF5EF9780C580C5E0C7828163831 +:103B1000C0515EFC782816385E0C780C580CCFB17A +:103B20005EFC30383189F94800F0F9480058F9480E +:103B3000005431E8F949004CF94800503FF9E06879 +:103B40000576F949017CF948019C5EFCEBCD40E02B +:103B500018961695344CF01F000C1897C1103018A9 +:103B60009978993899485806C0500C9CF01F000766 +:103B70008F5C5805C0500A9CF01F00048FBC0E9C3F +:103B8000E3CD80E080028F2480009194EBCD40C093 +:103B9000169679075807C051C0C86E375807C090AD +:103BA0006E0C0C9BF01F0004CF910E9CE3CD80C0E7 +:103BB000E3CF80C0800091A0EBCD40FC1695189417 +:103BC000580C5F0B58055F081493104B1292C040BD +:103BD0003FFCE3CD80FC580ACFC048E73006C06800 +:103BE0002FF62E07E0460038CF406E0B0A9CF01FE0 +:103BF000000ACF710699049A089B0E9C6E185D18F6 +:103C0000F9BC01FFF9BC0000E0460038CE31CE1B04 +:103C10008003CC00800091A0EBCD40801897580C19 +:103C2000C0A0780CF01F00056E1CF01F00040E9C55 +:103C3000F01F0002E3CD8080800091E8D421189429 +:103C4000169579075807C1A03006C0680E966E3CDD +:103C5000580CC14018970A9B6E0CF01F0009CF71D9 +:103C60005806EFF81003EDF81A03EFF80003E9F82F +:103C70000A100E9CF01F0003D82ADC2A800091A0B5 +:103C800080023C18EBCD406016961895760BF01F1D +:103C900000056B088D38EB460040E3CD80600000E6 +:103CA00080023C3CD431202D500B129CF01F003C74 +:103CB0001890C730198A580AC670300118965011EA +:103CC000320230930294C0382FF60D8AE40A1800AD +:103CD0005F08E60A18005F091248E8081800CF518B +:103CE000580AC2C00D87E40718005F18E6071800DD +:103CF0005F191268E8081800C4505807C4300C95C2 +:103D0000C0385807C0D02FF50B87E40718005F189C +:103D1000E60718005F191268E8081800CF31AA8476 +:103D20004A0B0C9CF01F0020C171A1A15807C06074 +:103D3000EAC6FFFF0D8A580ACCA1009CF01F001BA9 +:103D40005801C2404008F141005C40195809C25175 +:103D5000129C2FEDD832496B0C9CF01F0013C03120 +:103D6000A1B1CE5B0C9C493BF01F000FF9B80004D9 +:103D7000E3D8E031FBF91001F7B901FFFBF91A01B3 +:103D8000CD6B0C95CCDBF01F0009300840093FFCDF +:103D9000F348005C2FEDD8322FEDDC3A800091948F +:103DA0008003D304800091A0800091E88003D30CAD +:103DB0008003D314EBCD40FE169CF01F00451891F4 +:103DC000C6B0198A580AC7A0189630023203309438 +:103DD000E80A18005F08E60A18005F091049300871 +:103DE000F0091800C0E0109B2FF60D8AE60A1800B3 +:103DF0005F08E80A18005F091248F6081800CF515A +:103E0000580AC4500D87E80718005F18E607180025 +:103E10005F1910693008F0091800C3705807C350C3 +:103E2000109A0C95C0385807C0D02FF50B87E607BD +:103E300018005F18E80718005F191268F4081800E6 +:103E4000CF3130084A3BAA880C9CF01F0023C0F1F8 +:103E5000A5A25807C060EAC6FFFF0D8A580ACB9199 +:103E6000029CF01F001E049CE3CD80FE49CB0C9CFD +:103E7000F01F0019C031A3B2CEDB49AB0C9CF01F80 +:103E80000016C0E1A3A2CE6B0C95CDCB029CF01F17 +:103E900000135802CE913FF2049CE3CD80FE492BE3 +:103EA0000C9CF01F000DC031A1B2CD4B0C9C48FB07 +:103EB000F01F0009C071A1A2CCDBF01F00083FF287 +:103EC000CD3B029C3FF2F01F0005CCEB80009194AB +:103ED00080039A74800091A0800091E880039A6C1E +:103EE0008003D31C8003D3248003C8E4EBCD40803F +:103EF0001697149C129BF01F00085BFCC031E3CFA7 +:103F0000C0801898E018FFE1CFB1EF4C0050109C32 +:103F1000E3CD808080023DB4EBCD40801697149CA9 +:103F2000129BF01F00085BFCC031E3CFC0801898E3 +:103F3000E018FFE6CFB1EF4C004C109CE3CD808041 +:103F400080023DB4D431201D500B129CF01F00485C +:103F50001891E080007F198A580AC6B0300218967E +:103F6000049032033094E80A18005F08E60A18004B +:103F70005F0910493008F0091800C0E0109B2FF6C7 +:103F80000D8AE60A18005F08E80A18005F0912485F +:103F9000F6081800CF51580AC2F00D87E80718003C +:103FA0005F18E60718005F1910693008F00918005B +:103FB000C3E05807C3C0109A0C95C0385807C0D04A +:103FC0002FF50B87E60718005F18E80718005F1940 +:103FD0001268F4081800CF3130084A6BAA880C9C8C +:103FE000F01F0025C161A1B25807C060EAC6FFFFFB +:103FF0000D8A580ACB91029CF01F00205802C1B0D4 +:104000004009F34200545800C241009C2FFDD832B1 +:1040100049BB0C9CF01F0018C031A1A2CE6B499B7C +:104020000C9CF01F0015C0E1A3B2CDFB0C95CD5B3D +:10403000F01F0012300840093FFCF34800542FFDE8 +:10404000D832491B0C9CF01F000CC051A3A2CCDB42 +:104050002FFDDC3A0C9C48DBF01F0007F9B800107C +:10406000E5D8E032F7B001FFCC0B0000800091945E +:104070008003C8C4800091A0800091E88003D32C05 +:104080008003D3348003C8E48003C8E0D431202DFA +:10409000500B129CF01F00391890C6D0198A580A8C +:1040A000C610300118955011320230930294C03876 +:1040B0002FF50B8AE40A18005F08E60A18005F096A +:1040C0001248E8081800CF51580AC2C00B87E4070D +:1040D00018005F18E60718005F191268E808180052 +:1040E000C3F05807C3D00A96C0385807C0D02FF67F +:1040F0000D87E40718005F18E60718005F191268BB +:10410000E8081800CF31AC8449DB0A9CF01F001D81 +:10411000C171A1A15807C060ECC5FFFF0B8A580A06 +:10412000CCA1009CF01F00185801C1E04008F141EB +:10413000005840195809C1F1129C2FEDD832493B63 +:104140000A9CF01F0010C031A1B1CE5B0A9C490B44 +:10415000F01F000CCFA040192FF95019CDCB0A96B3 +:10416000CD3BF01F0009300840093FFCF3480058E0 +:104170002FEDD8322FEDDC3A800091948003D340AC +:10418000800091A0800091E88003D3448003D3484D +:10419000EBCD40401896784CF01F00466D2CF01F78 +:1041A0000045ECFC00D0F01F00436DACF01F004157 +:1041B0006DCCF01F00406DECF01F003EECFC008069 +:1041C000F01F003CECFC0088F01F003AECFC009073 +:1041D000F01F0038ECFC0094F01F0036ECFC009857 +:1041E000F01F0034ECFC009CF01F0032ECFC00A03F +:1041F000F01F0030ECFC00A4F01F002EECFC00A827 +:10420000F01F002CECFC00ACF01F002AECFC00B00E +:10421000F01F0028ECFC00B4F01F0026ECFC00B8F6 +:10422000F01F0024ECFC00BCF01F0022ECFC00C0DE +:10423000F01F0020ECFC00C4F01F001EECFC00C8C6 +:10424000F01F001CECFC00CCF01F001AECFC00D4AA +:10425000F01F0018ECFC00D8F01F0016ECFC00DC8E +:10426000F01F0014ECFC00E0F01F0012ECFC00E872 +:10427000F01F0010ECFC00ECF01F000EECFC0150F5 +:10428000F01F000CECFC016CF01F000AECFC01803C +:10429000F01F0008ECFC018CF01F0006ECFC01A0F4 +:1042A000F01F00040C9CF01F0003E3CD80400000D1 +:1042B000800091E8EBCD40C0189678085808C031CE +:1042C000C0880E987007109CF01F00155807CFA1EA +:1042D0006D085808C031C0880E987037109CF01FC8 +:1042E00000115807CFA16C5CF01F000F6C6CF01F21 +:1042F000000E6C8CF01F000C6C9CF01F000B6CAC63 +:10430000F01F00096CBCF01F00086C1CF01F0006B9 +:104310000C9CF01F0005E3CD80C00000800241909E +:1043200080023C18800091E8EBCD4040320818969E +:104330001AD8E0691000F8C8FFDC785A784B792C5D +:10434000F01F000430182FFDED480044E3CD8040FD +:104350008002B254D421F60815011695F0C6FFFF6D +:1043600018940C9CF01F00061897C0600A99089AD0 +:104370000C9BF01F00040E9CD822000080028F24AA +:1043800080023A68EBCD40E016951896F6CCFFFD1A +:10439000F01F00091897C0C00C9B0A9A322618C655 +:1043A000F01F0006EE0500093008B296B2A80E9C78 +:1043B000E3CD80E080009200800091DCD401580CB5 +:1043C000C1D0580BC160198835E92208F2081800DD +:1043D000E08B0013129A3009C088F80907082208F8 +:1043E000F4081800E08B00092FF9123BFE9BFFF741 +:1043F000F01F0003D802F01F0003D802800243849C +:1044000080024354D4011698F6FC0140580CC06059 +:10441000189BF0CCFEDCF01F0002D802800243BCE7 +:10442000D4011698F6FC013C580CC060189BF0CCE7 +:10443000FEECF01F0002D802800243BCD4011698A3 +:10444000F6FC0138580CC060189BF0CCFEFCF01F45 +:104450000002D802800243BCD4011698F6FC013455 +:10446000580CC060189BF0CCFF0CF01F0002D80263 +:10447000800243BCEBCD40F831EC1694F01F0028CD +:104480001896C3906979F8C3FFE2EDB90000C360E4 +:104490001897EDB90001C1614A294A380C37F20872 +:1044A0001710E60701051AD84A0A0A9B0E9CF01F4E +:1044B00000202FFD580CC1C51835E08A001A1807D6 +:1044C0006979EDB90002C171496949780C37F20880 +:1044D00017100E9C1AD8E6070107496A0E9BF01FB9 +:1044E00000142FFD580CC0451837E089000530082E +:1044F000E768FFFF0C9CE3CD80F848B848EA1AD87B +:1045000031EBF01F000B2FFD580CCF2559DCFE9925 +:10451000FFF0EC0C00076979CBDB000080028F24F0 +:104520008003936480037E208003D35880009148E9 +:104530008003D3648003D350EBCD40F81894332C20 +:10454000F01F003E1896C650F8C3FFCEEDB400042D +:10455000C6301897EDB40003C1514B994B980C37F6 +:10456000F2081710E60701051AD84B7A0A9B0E9C31 +:10457000F01F00362FFD580CC4951835E08A00470F +:104580001807EDB40002C1514AD94AE80C37F208C5 +:104590001710E60701051AD84ADA0A9B0E9CF01F8D +:1045A000002B2FFD580CC3251835E08A0030180762 +:1045B000EDB40001C1514A294A280C37F2081710FE +:1045C000E60701051AD84A3A0A9B0E9CF01F001F05 +:1045D0002FFD580CC1B51835E08A00191807EDB445 +:1045E0000000C171496949780C37F20817100E9C18 +:1045F0001AD8E6070107498A0E9BF01F00142FFD09 +:10460000580CC0451837E08900053008E768FFFFFF +:104610000C9CE3CD80F848B8490A1AD8332BF01F18 +:10462000000B2FFD580CCF25E04C0031FE99FFEF19 +:10463000EC0C0007C90B000080028F2480039364F8 +:1046400080037E208003D374800091488003D37C54 +:104650008003D3888003D3908003D36CD401774C3C +:10466000F01F0002D802000080024538D401773CD8 +:10467000F01F0002D802000080024538EBCD40F860 +:10468000332C1693F01F00401896C6906759F8C453 +:10469000FFCEEDB90001C6601897EDB90000C16109 +:1046A0004BA94BB80C37F2081710E80701051AD8C8 +:1046B0004B8A0A9B0E9CF01F00382FFD580CC4C576 +:1046C0001835E08A004A18076759EDB90003C1613F +:1046D0004AE94AF80C37F2081710E80701051AD81A +:1046E0004AEA0A9B0E9CF01F002C2FFD580CC34574 +:1046F0001835E08A003218076759EDB90002C16128 +:104700004A294A380C37F2081710E80701051AD869 +:104710004A3A0A9B0E9CF01F00202FFD580CC1C581 +:104720001835E08A001A18076759EDB90004C171FD +:10473000496949780C37F20817100E9C1AD8E80717 +:104740000107498A0E9BF01F00142FFD580CC0452D +:104750001837E08900053008E968FFFF0C9CE3CDBD +:1047600080F848B8490A1AD8332BF01F000B2FFDE8 +:10477000580CCF25E04C0031FE99FFEFEC0C000700 +:104780006759C8CB80028F248003936480037E2006 +:104790008003D3A4800091488003D3B08003D390DA +:1047A0008003D3BC8003D398EBCD40C030AC1696C9 +:1047B000F01F00181897C1806D69EDB90000C17035 +:1047C000189A301BEDB90001C0F149384939580B2E +:1047D000F0091700149C1AD9EECBFFF6141B490AF6 +:1047E000F01F00102FFD0E9CE3CD80C048B848EAB2 +:1047F0001AD830ABF01F000B2FFD580CCF55589C2A +:10480000FE99FFF3EE0C000A6D69300BCDCB000072 +:1048100080028F248003936480037E208003D3D0A2 +:10482000800091488003D3C8EBCD40C01697768CAA +:10483000580CC05118960C9CE3CD80C0314CF01F31 +:1048400000101896CF90EF38001DEF3A00181AD8D4 +:10485000EF39001C1AD9EF38001B1AD8EF39001AAB +:104860001AD9EF380019314B1AD81ADA485AF01F02 +:10487000000630082FADED680013CDEB80009200EC +:104880008003DA4880009148EBCD40E078351696F9 +:10489000314CF01F000A1897C0C0EC050308488A85 +:1048A0001AD8314BF01F000730082FFDEF680013B6 +:1048B0000E9CE3CD80E00000800092008003DD6864 +:1048C00080009148EBCD40801697772C580CC09013 +:1048D000F01F0009189B6F2CF01F0008E3CD8080AB +:1048E000771C580CC060F6CCFFDC320BF01F0004C4 +:1048F000E3CD8080800091B88002438480024354DD +:10490000EBCD40807838F60800076E085808C0C024 +:10491000784C580CC0C0F60C030C189B109CF01F70 +:104920000007E3CD8080109CE3CD8080109CF01FB9 +:1049300000046E08CF3B0000800243BC800091B8A9 +:10494000EBCD40F83228169418961989F009180012 +:10495000C0A0F01F001BEBDCC001C19030070E9C13 +:10496000E3CD80F8F8C7FFFF322B0E9CF01F001537 +:10497000CF6019985808CF31B8880E9CF01F0010EE +:10498000890C0E9CF01F00101897CEABF80316018F +:10499000E6CCFFFFF01F000D1897CE200C9C069A66 +:1049A0000E9BF01F000BC051EE030B0C8903CD8B47 +:1049B0000E9C0A97F01F0007CD3B0000800091B8C5 +:1049C00080009158800091948000920080023944C8 +:1049D000800091E8D421205D18951094129C1696C1 +:1049E000F01F000F1897C1906C0A590AE08B001451 +:1049F000189B0A9CF01F000B0E9CF01F000B48BA7E +:104A00001AD4314BFACCFFFCF01F0009300C2FFDFB +:104A10002FBDD822F01F00042FBDDC2A80024940A0 +:104A2000800091DC800091E88003D3D88000914819 +:104A3000D4013038F6CCFEDCF6CBFEC0F01F00020D +:104A4000D8020000800249D4D4013028F6CCFEEC14 +:104A5000F6CBFEC4F01F0002D8020000800249D449 +:104A6000D4013018F6CCFEFCF6CBFEC8F01F0002D5 +:104A7000D8020000800249D4D4013008F6CCFF0CE3 +:104A8000F6CBFECCF01F0002D8020000800249D411 +:104A9000EBCD40F8201D18971693129C1A9BF01F1F +:104AA00000171895C2306E595809C0504008103987 +:104AB000E08B00206E695809C04040081039C133AE +:104AC0006E366E44E60600066C0CF01F000D8D0578 +:104AD0006E4C580CC0504008300CE60409082FFDFD +:104AE000E3CD80F80A9CF01F00062FFDE3CFC0F84D +:104AF000F01F00033FFCCF4B80024940800091E84B +:104B0000EBCD40FEF6F700D05807C0510E94089C3C +:104B1000E3CD80FE364CF01F00191894CF90EEC6FE +:104B2000FFFCF8C3FF9C189749514962ECFCFFFC5D +:104B3000580CC2116C0B580BC1A02F86F01F00122D +:104B4000CF600837E2081700E40817101ADCE60700 +:104B500001051AD80E9C48DA0A9BF01F000D2FEDB4 +:104B60001807580CC0451835FE99FFE23008E76871 +:104B7000FFFFCCEB6C0BCE2B80028F2480037E20BA +:104B800080039364800271BC8003D3E48000914869 +:104B9000D431205D500B129CF01F0056502CE08049 +:104BA000008E198A580AE080009B3009402650196F +:104BB000503912905049320230931294C0382FF677 +:104BC0000D8AE40A18005F08E60A18005F09124817 +:104BD000E8081800CF51580AC4E00D87E407180010 +:104BE0005F18E60718005F191268E8081800C64049 +:104BF0005807C6200C95C0385807C0D02FF50B8732 +:104C0000E40718005F18E60718005F191268E80843 +:104C10001800CF31AA842FF0403CE00B1503F01FA1 +:104C200000361891C4E040490C9CE20900060C9B38 +:104C3000F01F00328D1C6C085808C141580CC1018E +:104C400040182FF850185807C15040482F88504836 +:104C5000EAC6FFFF0D8A580AC3C05031CB3B591C2E +:104C6000C2404009F2F801782FF8F348017858075C +:104C7000CED15031E0C8FFFFF0071503402CF01FE4 +:104C800000200E9B403CF01F001CC2E0F8000039E1 +:104C90003008931893084008F14C00D04019580987 +:104CA000C0D1129C2FBDD8324009F2F801742FF800 +:104CB000F3480174CC9B0C95CAEB3FFC2FBDD83256 +:104CC000403CF01F000F402CF01F000D2FBDDC3AC0 +:104CD000E0C8FFFF5031F0071503CD1B501A308795 +:104CE000503A1490CCCB403CF01F00053FFCCE7BEB +:104CF00080009194800091F48002720C800091E811 +:104D0000D4213228129716951389F0091800C0A0F3 +:104D1000320A2DCB0E9CF01F00271896C2F03FFCE4 +:104D2000D822EEC6FFFF322B0C9CF01F0023C3C01D +:104D3000F8060107EEC80008E0480037FE9BFFF1C7 +:104D40006B2C580CC060F01F001D0E3CC2606B2C19 +:104D50003004EB440044F01F001AEECCFFFFF01FBC +:104D60000019EB4C0048CDC00C9B0E9AF01F0016AA +:104D70006B28089CF0070B04D822EF390040F80993 +:104D80001800CCE16B2CF01F000E3018EB460048E9 +:104D90000C9CEB480044D8220E9A0C9B6B2CF01F05 +:104DA000000BCD61CBEB0C9CF01F00041897CC3BA3 +:104DB0008002394480009158800091B8800091E8C9 +:104DC00080009200800091DC8000917CEBCD4080DF +:104DD0001697129C2E8BF01F0006F9BC01FFF9B844 +:104DE0000001EFF80A08E3CD808000008002389CC3 +:104DF000EBCD40C018976E38129CF00B000630AA1D +:104E0000300BF01F000C8D0C18996E585808C030EC +:104E1000103CC0956E6C580CC0401839E0890007F2 +:104E2000E3CF80C08D08E3CFC0C08D0CE3CFC0C0FE +:104E300080009170D42116941895782B580BE08A35 +:104E400000557817683E6E0C78381C38C410EECACE +:104E5000FFFC3009C058150C78381C38C3902FF966 +:104E60001639CFA52FFB0E9CA36BF01F00241896BC +:104E7000C3506A2C580CE08A003B6C08683E7039BD +:104E80001C39C355ECC8FFFC300AC0A81097700845 +:104E9000F40B15027039EEC8FFFC1C39C2052FFA5D +:104EA000143CFE99FFF5F4C8FFFFEC0A002BA36841 +:104EB0001697F80A010AEC08000CA36AF01F00100C +:104EC0008F048B166A28300C2FF88B28D82218985C +:104ED000781C580CCFD19114D822DC2AF4C8FFFFDB +:104EE000EC0B000BA368CE6B7817CBDB0C97300A6A +:104EF00030480C9BCDFB0000800091F4800091C4F1 +:104F0000D4211895781CF01F000D300C8B1C8B2CB5 +:104F10006A075807C0F0189618948F140E9B0A9CC5 +:104F2000F01F00076E07F9B605FF5807CF710C9CFC +:104F3000D8220E96CFDB0000800091E880024E342C +:104F4000D421189578095809C1E03FFAC028109972 +:104F50007228F4080C4A72085808CFA1F4C4FFFF65 +:104F60001296E06C01A8F01F000A1897C0A09924BF +:104F70005806EDFC1A00EBFC0A000A9CF01F000525 +:104F80000E9CD82212961294CEDB000080028F2451 +:104F900080024F005EFD5EFD5EFD5EFD5EFD5EFD1E +:104FA000D401584BC0E0E0880007586BC0A0587B84 +:104FB000C040D802580BC091300CF01F0005D80239 +:104FC000301CF01F0003D802D80200008002172016 +:104FD000D401581BC070300A323C149BF01F0005EE +:104FE000D80A300A322C149BF01F0002D80A0000A5 +:104FF00080014658EBCD40FE201D1094129216956C +:10500000F01F0057E8C8FFF25C7C4D69F00C000609 +:10501000F33A0109580AC060EC0A0D085809E0810A +:10502000008F3003500CE6060001029CF01F004E7A +:105030000A9B1897306A400CEE0C000CF01F004BD6 +:10504000400C306A4CAB140CEE0C000CF01F004707 +:10505000400C302A4C7B2F4CEE0C000CF01F004310 +:10506000400C089A049B2F2CEE0C000CF01F003F04 +:10507000FAC8FFFC3005114A0E991AD5EE0A000C49 +:105080001AD5EC0A010A30EBF01F003B2FED581C3B +:10509000C5914009EC090108E048003EE08B001092 +:1050A0008E085CC806085CC8AED3029B0E9CAE0896 +:1050B000F01F0032300C2FFDE3CD80FEEE09000E14 +:1050C0003888FD39000CF0091800CEB1FD39000D0B +:1050D00038E8F0091800CE51FD38000EF808180025 +:1050E000CE01FD39000F3038F0091800CDA130286D +:1050F000FD3A0012F00A18005F1B3FE8F00A1800A2 +:105100005F19126BEA0B1800CCC1FD380013E218CE +:10511000001D5818CC61FD380014E21800C85888EA +:10512000CC01FCCAFFC1FCC9FFE1C0482FF914390A +:10513000C0E01388F6081800CFA0CB3BF4090103A8 +:10514000C72B0E9CF01F000E3FFCCB6B0FC92FA985 +:10515000EE0900091388A3A8B288CA3B8001F4E8CD +:10516000000087F480009200800091DC00007AA8A3 +:105170008003D6548001F54480014664800091E8A4 +:10518000D401201D3068FACBFFFC16D81A9B486C5E +:10519000F01F00064848581CF00C1700F9BC01002D +:1051A0002FFDD80200007AA880017A88EBCD40401C +:1051B000310A1696300B0C9CF01F000630F930783F +:1051C0008D198D09300C30398D288D39E3CD804013 +:1051D000800091D0D401F01F0002D80A80016048FD +:1051E000EBCD4068206DFAC3FFEE1496069C306A42 +:1051F000F01F0010FAC5FFFE0C9B310A0A9CF01F3D +:10520000000D0A9B204D310A1A9CF01F000B069BD3 +:10521000202D306A1A9CF01F0008F01F00082FADE7 +:10522000581CF9BC01FFF9BC00002FADE3CD80682C +:10523000800091DC8002E73680016094EBCD40680D +:10524000206DFAC3FFEE1496069C306AF01F001022 +:10525000FAC5FFFE0C9B310A0A9CF01F000D0A9B49 +:10526000204D310A1A9CF01F000B069B202D306A3E +:105270001A9CF01F0008F01F00082FAD581CF9BC45 +:1052800001FFF9BC00002FADE3CD8068800091DC08 +:105290008002E73680016168D401F01F0005581CC8 +:1052A000F9BC01FFF9BC0000D80200008001F370D6 +:1052B000D401F01F0005581CF9BC01FFF9BC000027 +:1052C000D80200008001F310D401169CF01F0004E6 +:1052D000581CF9BC01FFF9BC0000D802800163E052 +:1052E000D431207DFACEFFC050287C027C387C1758 +:1052F00050087C2E501E16901894149B1293580A36 +:10530000C5C0FAC5FFEA306A0A9CF01F0031202DA3 +:10531000306A0A9B1A9CF01F002FF01F002F5802C2 +:105320005F1858075F1918912FED1268C181300678 +:105330005800C26168193018F0030948F00811FFDD +:10534000F1E9000C891C580CC365BFBC891CF01F17 +:10535000002318975817C2F02F9DDC3A5887FE9B00 +:10536000FFFDFAC6FFF2308A300B0C9CF01F001CC8 +:105370000E9A049B0C9CF01F00165800CDC04028CC +:1053800058015F091AD8069C1AD630381AD530163B +:10539000404A403B1AD6F01F00136819EC03094835 +:1053A0001248F1D8C01F189789180C9CF01F000EE6 +:1053B0002FCDCD1B2F9DD83AFAC5FFEA306AE06B9E +:1053C00000FF0A9CF01F0006CA3B0000800091DC31 +:1053D0008002E736800188B080016584800091D02A +:1053E0008001661C8001639CEBCD40C01896308C18 +:1053F000F01F00091897C0C0300899069918F01FCF +:105400000007301CF01F00060E9CE3CD80C0E3CDEA +:1054100080C0000080028F248001604880017A10E3 +:10542000EBCD4080209D1697FACCFFFEF01F0009BF +:10543000581CC0402F7DE3CFC0800E9C1BBAFACB16 +:10544000FFFCF01F00051BBC2F7DE3CD808000001A +:1054500080017800800091DCEBCD4080202D580B3E +:10546000C120FAC7FFFE306A0E9CF01F000C0E9C94 +:10547000F01F000B581CF9BC01FFF9BC00002FED18 +:10548000E3CD8080FAC7FFFE306AE06B00FF0E9C20 +:10549000F01F0004CEDB0000800091DC8001793039 +:1054A000800091D0EBCD4040485B1896F01F00057E +:1054B0000C9CF01F0005E3CD8040000080039C3869 +:1054C00080025458800091E8EBCD40C0202DFAC7EF +:1054D000FFFE16960E9CF01F0008581CC0402FEDD2 +:1054E000E3CFC0C00E9B0C9C306AF01F00042FED70 +:1054F000E3CF80C080017864800091DCEBCD40C0B8 +:1055000018977939580BC0305839C0E03018EF4837 +:1055100000BC3038EF48004C1039C0808F2830086C +:105520008F58E3CD80C0F949004C6F682FF8EEFA30 +:10553000010CEF4800586FA830098F288F59301B95 +:10554000746C7486487A5D16EEF80094EEF900905B +:105550002FF82FF9EF480094EF490090E3CD80C079 +:1055600080037E20580C5E0C580BF9FB4A19580A30 +:10557000F9FA4A225809F9F94A1A5808F9F84A1B5F +:105580005EFC580CF9F81024F9B90101F1D9E108D1 +:10559000F9F81A245EFC580C5E0C580BF9B801019E +:1055A000F9F81A45F9FB0A455EFCD703EBCD40C07C +:1055B0001897580CC04079385858C030E3CD80C097 +:1055C000F8F8010C3009706C7086488A301B5D1643 +:1055D000EEF80094EEF900902FF82FF9EF480094C0 +:1055E000EF490090E3CD80C080037E20580CF9FC89 +:1055F00010315EFC580CC0B0F8F800D45808C070E8 +:10560000F8F800D89708F8FC00D45EFC300897083A +:105610005EF8D703580CC040588BE08800035EFD4D +:1056200048D8F00B032FF8FC00E05EFCF8FC00DC2F +:105630005EFC78BC5EFCF8FC00805EFC79FC5EFCE5 +:10564000F8FC00845EFC784C5EFC797C5EFC786C37 +:105650005EFC00008003D6FC580C5E0C588B5EBCD0 +:1056600048E8F00B032FF94A00E05EFCF94A00DC41 +:105670005EFC99BA5EFCF94A00805EFCF94A007C47 +:105680005EFCF94A00845EFC994A5EFCF94A005CC3 +:105690005EFC996A5EFC00008003D720580CC05065 +:1056A000580BC031783C5EFC5EFD580C5E0C580B0C +:1056B000F9FA0A035EFCD401580CC0A0F8FC010CF6 +:1056C000580CC06078A85808C030780C5D18D80213 +:1056D000D401580CC021D80AF8FC010C580CCFC0DA +:1056E00078B85808CF90780C5D18D802EBCD408080 +:1056F0001897580CC1E0189A300B48FCF01F000FA7 +:105700000E9A300B48ECF01F000DEEFC00C0F01FAD +:10571000000DEEFC00CCF01F000CEEFC00D4F01FDE +:10572000000AEEFC010CF01F00080E9CF01F0006A2 +:10573000E3CD80808002608C800274008002602053 +:10574000800270E0800091E8D401580CC050F8FC51 +:1057500000C0F01F0002D80280026410D401580C6F +:10576000C050F8FC00C0F01F0002D802800264287C +:10577000D401189A580CC0A030583019F8FC00C059 +:10578000F548004C95C9F01F0002D802800263BAA8 +:10579000EBCD40801897580BC04079E85888C0403E +:1057A0003018EF4800BC30193088EF490044EF480A +:1057B00000788F99EEFC00C0F01F0004F9B80100DA +:1057C000EFF81A39E3CD8080800263B2EBCD40E080 +:1057D000201D189716951496580CC0513FFC2FFDAC +:1057E000E3CD80E0F8FC00C0F01F000ACF801A9BD8 +:1057F000EEFC00C0F01F0008189BCF10400C0C3CC2 +:10580000CEF30C9A0A9CF01F0005300CCE9B0000D2 +:10581000800263B2800263CE800091DCEBCD40C099 +:1058200018971496580CC1F0F94B00C4580AC1B02F +:1058300074087419F94800F8F94900FC7428F9480B +:105840000100F8FC00C0580CC0E0742BF01F0007EA +:105850006C3BEEFC00C0F01F00066C4BEEFC00C081 +:10586000F01F0004E3CD80C0800263A6800263AC19 +:1058700080026408D431FACD00A81897F8F600CC5D +:105880005806C0F0F8F800F85808C0B00DA80DB9D7 +:10589000F3E81089F8F800D02FC91039E088000427 +:1058A0002D6DD832ECC4FFFC0999500909A0F01FF6 +:1058B000006FFAC1FFF8340A029B0E9CF01F006CC7 +:1058C0001895CEF5590CE0800090580CCEA132020C +:1058D0005012EEF800E45808C7D1E8C5FFE4FAC357 +:1058E000FF68310A0A9B069CF01F0062310A300BE8 +:1058F0000A9CF01F00610DAA0DB9049BF3EA108900 +:10590000FACCFFD8EEFA00CC0A982FC9F01F005B42 +:10591000310A0A9B069CF01F005AC7614009E1E961 +:1059200010880DB9EBD8B0100DA8F3E81089320833 +:10593000F2CE002CF00519005FB9E04E00205F9A0E +:10594000124AF80A1800CAD15C751C35C630580EC8 +:10595000CA81FAC3FF88029B0A9A069CF01F004581 +:105960003018308AEF4800E4E8CBFFFDEECCFF189A +:10597000F01F0040EEFC010C78965806C0D0E93AC2 +:10598000001B0A98149B0699780CE21B0080F5DA3C +:10599000C0025D16C865E939001B3008F00918001F +:1059A000C5753018EF48011CEEF901185809C0718F +:1059B000EEF800FCEDB80000FE90FF7430188FD8B0 +:1059C000EEFC010C78785808FE90FF6C780C5D189E +:1059D000C68B308AE8CBFFFDEECCFF18F01F002805 +:1059E000FE94FF60C7BB189A029B0E9CF01F00201C +:1059F000FE91FF580A9A029BFACCFFD80A92F01F38 +:105A0000001D5015C67B069B0A9C310AF01F001929 +:105A1000C48BFAC6FFB8E8CBFFF50C9C310AF01F27 +:105A20000015049A029BFACCFFA8F01F0012FAC3DB +:105A3000FF880A9AE8CBFFD4069CF01F000E40199D +:105A40000C9A2F090A9B069CF01F000EC8AB301859 +:105A5000EF480118EEF9011C5809CB11EEF800FCD3 +:105A6000EDB80001CAC1C1DB8002575C800257CC8F +:105A7000800091DC800091D080028EF88000917CC3 +:105A800080029C38D431201D3003189730140695BD +:105A900030213040EF4500BC6F4A580AE08000C911 +:105AA0006F585808E08100C56E7C580CE08100C238 +:105AB0006EB85808E08000BE6F385828EFF41A2FEF +:105AC000EEF8010CEF41004C3009706C7086FEFA64 +:105AD000051E029B5D16EF4400548FC5EEF800983A +:105AE000EEF900902FF82FF9EF480098EF49009059 +:105AF0006E7C580CC0516EB85808E08100EC6FC83D +:105B0000EF4400705818EFF41A2F6FD85808E0814E +:105B100000F8580CE08100A76EE85808E08100A367 +:105B20006FE8F0C900015879E08B000EFEF804C45C +:105B3000F009032FEF4400BCEF410078EF4500402F +:105B4000EF4400C8EEFC00C0F01F012BE08000B560 +:105B5000EF4400BC2FF3E0430064C9D10E9A300B30 +:105B6000FEFC0498F01F012630090E98FEFA048C02 +:105B7000129B129CF01F0123EEF9010C72285808A9 +:105B8000C0E0EEF801105808C0A058185F0B3008AC +:105B90000E9CEF480110723A72285D182FFDD83222 +:105BA000EEF80088EF4400BCEF4000788F55EF45D9 +:105BB000007CEF4500C88F08CC6B6E585808E08118 +:105BC00000DF6E4B580BE08100D06E085808C161B1 +:105BD0003078EF4400BCEF480078EF440048CB3BFE +:105BE000EEF900845809E08101846FF85808E081DB +:105BF000015C6E4B580BE08100B86E685808CA30E3 +:105C00000E9CF01F0101C9FB6E485808E08100A9F5 +:105C10006E585808E08100B06E685808C9406F0897 +:105C20005808C910300B0E9CF01F00F7C8CB6E7CD3 +:105C30006EA95809C2F16F885808C2C06F38EF4585 +:105C400000605818EFF41A2FEF44004CEF4500584D +:105C5000EF4500548FC58FE4EF450118EF45011C57 +:105C6000C49B6FE8EEFC00CC5818EFF41A2FEF44F9 +:105C70000078F01F00E6EEFC00D4EF4500CCF01FEA +:105C800000E3EEFC00C0EF4500D4F01F00E18FE51B +:105C9000C5AB580CCD416EB85808CD105829C3B0CB +:105CA0005819C4706F3820185878FE9BFF26FEF9EB +:105CB0000362F208032FEEF800BC5808FE91FF4C77 +:105CC000C5CB6E585808E08100FE6ED85808E080B9 +:105CD00000FE6FC95819FE90FF1A5829FE91FF1E49 +:105CE0006FD85808FE90FF1A0E9CEF490070EF44E1 +:105CF00000BCF01F00C96E7CEF450074C0BB0E9C59 +:105D0000EF4400BCEF410070F01F00C36E7CEF4514 +:105D10000074C00B6F885828CC606F388FC45898B7 +:105D2000EFF41A2FEF4100603098EF48004CCE4A54 +:105D30006F885818CB806F3858A8EFF91A2FEEF9F2 +:105D4000010C30A88FC5EF440060EF48004CFEFA0C +:105D5000029E7286726C302B0A995D16CC0A6F080F +:105D60005808FE90FF573068EF4400BC8FF4EF48AE +:105D70000078CE9A6F085808FE90FF503038EF44F4 +:105D800000BC8F05EF440080EF480078CDCA6E69F3 +:105D90005809C0A06ED85808E0810117EEF800F845 +:105DA0005808E08100FC6E485808E08100EB6E88DE +:105DB0005808C0506ED85808E08000E46F28580892 +:105DC000C050300B0E9CF01F00956E7CC93A6F7866 +:105DD0005808C8018F88EF4400BCEF40004CEF48E2 +:105DE0000058EF4800448FF8EF4800488F98EF4480 +:105DF0000040C82A6E1B580BCE606E585808FE90A3 +:105E0000FF6A3089EF4400BCEF49004CEF44005C6E +:105E1000C73A6E2B580BC2716F696FB81039CD330A +:105E20006ED85808C2003058EF4400BCEF48004C10 +:105E30008FC4EF440110FE9FFE60580AFE91FF4B95 +:105E4000EF4A011CEF4400BCEF44004CEF4A0060F5 +:105E5000EF4A0058EF4A00548FCA8FE4EF4A011806 +:105E6000FE9FFE4B6E685808C7B16E485808C78140 +:105E70006E585808CC71580BFE91FF2D6F696FB8A2 +:105E80001039FE93FF286ED85808FE91FF24307811 +:105E90008FCBEF48004CEF4400BC6F98EF410110EE +:105EA0008F18FE9FFE2AEEF80088EF4900C8EF44E5 +:105EB00000BCEF4000788F59EF49007C8F08FE9FAF +:105EC000FE436ED85808E081008AEF4400BCEF44DE +:105ED000004CEF450060EF450058EF4500548FC57A +:105EE0008FE4EF450118EF45011CFE9FFE06305977 +:105EF000EF4400BCEF4900781A9BEEFC00C0F01F95 +:105F000000481892C290EEF8010C4009189A708669 +:105F1000706C300B5D16049CF01F003CEEF800C85E +:105F20005808EFF81028F9B90101F1D9E108EFF8A4 +:105F30001A28EFF80029F9B90001F1D9E008EFF8C3 +:105F40000A29EEF90090EEF8009C2FF92FF8EF499E +:105F50000090EF48009CEF450084FE9FFDF5EF4464 +:105F600000BCEF40004CEF450058EF4500448FF572 +:105F7000EF4500488F958F85EF440040FE9FFDBDA3 +:105F80003078EF4400BCEF48004C8FC56F98EF416C +:105F900001108F186E7CFE9FFDAEEEF800FC5808D5 +:105FA000FE91FF038FD4EEFC010C78785808C040B6 +:105FB000780C5D186E695809FE90FEF76ED8580887 +:105FC000FE90FEF36E7C3059EF4400BCEF49004C6C +:105FD0008FC4EF440110FE9FFD8E3088EF4400BC5B +:105FE000EF48004CEF44005CFE9FFD8780037E205D +:105FF0008003D744800268308002608C8002740085 +:106000008002747480025790800091E88002653CA1 +:106010008003D76480025874800254FC800263E6D7 +:10602000EBCD408076085808F9B901FFF1D9E108B5 +:10603000F7F81A0076185808F9B901FFF1D9E10804 +:10604000F7F81A0176285808F9B901FFF1D9E108E3 +:10605000F7F81A0276385808F9B901FFF1D9E108C2 +:10606000F7F81A03169718991698486A300B301CDF +:10607000F01F00050E9CF01F0005E3CD808000009E +:10608000800260208002747480025A84D401169CBD +:10609000F01F0002D802000080025A84D421203D63 +:1060A0001895E06C0120F01F00221897C38031E89A +:1060B0003039F9480088F948006833C8F949006C5C +:1060C000F9480064F945010C300430CA99A4089BD2 +:1060D0001A9CF01F00186AF850286ADA500A6AE819 +:1060E0005018EEF8010C1A99704A493B0E9CF01FAB +:1060F0000013EF4C00C01A961898C14030160E9C41 +:106100008F76F01F000F0E9C8F74F01F000D0E98FD +:1061100008990C9C48BA089BF01F000B0E9C2FDDC1 +:10612000D8220E9C1097F01F0009CF9B80028F246D +:10613000800091D0000004788002711C80025A8493 +:106140008002602080027474800091E8D401580CB1 +:10615000C090F8F800D45808C050F8F800805808EB +:10616000C020D8023018F94800809958F01F00026A +:10617000D802000080025A84D401580CC04099AB68 +:10618000F01F0002D802000080025A84D401580C8B +:10619000C060F94B00E0994BF01F0002D8020000EC +:1061A00080025A84EBCD40801897580CC090996BB0 +:1061B000F94B00DC580BC0610E9CF01F0005E3CDCD +:1061C0008080F8FC00C0F01F0003CF7B80025A845F +:1061D000800263BAD401580CC04099DBF01F000262 +:1061E000D802000080025A84D401580CC04099BBE8 +:1061F000F01F0002D802000080025A84EBCD40E07C +:10620000189714951296580CC3A0F8F8008C2FF824 +:10621000F948008C5839E08B0009F8F800A82FF8ED +:10622000F94800A8E3CF80E01588306AF94800B04B +:10623000F8CCFF4CF01F0042ECCA00040BA90BB8CD +:10624000F1E910861436E08B00130B99300CF80935 +:106250001800C4603038F0091800C130EEF800A80A +:10626000301C2FF8EF4800A8E3CD80E0EEF800AC3A +:10627000300C2FF8EF4800ACE3CD80E0E3CF80E0B6 +:10628000E046002BE088004C3FE80BCBF00B1800F9 +:106290005F0A3028F00B18005F09124AF80A18004C +:1062A000CEE13018F00B1800C3A1EEFC00CCF01FBB +:1062B00000252FC60C9CF01F0024EF4C00CCC2F030 +:1062C0000C9A0A9BF01F001E0E9CEF4600D0301661 +:1062D000EF460074F01F001D0C9CE3CD80E0EEF84B +:1062E00001145808C100300830398FC8EF48011434 +:1062F0008F29EF49004CEEFC010C78C85808C030DB +:10630000780C5D18EEFC00D4F01F000E0C9CEF46DC +:1063100000D8F01F000DEF4C00D4C031E3CF90E067 +:10632000EACBFFFCEEFA00D8F01F00050E9C3016F9 +:106330008F56F01F00060C9CE3CD80E0800091DCBE +:10634000800091E88000920080025A84EBCD40806A +:10635000189779685808C0B079BB580BC08070494D +:106360005D193008EF480058EF48006CE3CD80809D +:10637000EBCD40C01897580BC04078085878C04003 +:106380003018EF48006030786FA68F086F9C6C293A +:10639000300A305B5D196FA86F9C7029301A304B42 +:1063A0005D19E3CD80C0F94B00745EFCF94B00B081 +:1063B0005EFC580CF9FC10135EFC580CF9B8010196 +:1063C000F9F81A06F9B9010BF9F91A005EFC580C34 +:1063D000C08079485808C05079589708794C5EFCBD +:1063E000300897085EF8580CC0C0791A580AC09057 +:1063F000792897083009F9490048F94900445EFABC +:106400003008109A97085EFAF94B00C45EFCD70377 +:10641000D401580CC040483BF01F0003D8020000D4 +:106420008003D7B08002634CEBCD40801897580CA6 +:10643000C0F079A8300B7019799C5D19C0916E6815 +:106440005808C0606E2820385818E0880004E3CD52 +:1064500080806F485808F9B80101EFF81A136FA847 +:106460006F9C7029301A300B5D19EEFC00A4483A7D +:10647000302BF01F0003CECB8003D7BC80023A1A2A +:10648000EBCD40801897580BC040780858B8C040F2 +:106490003018EF4800606F4930B88F085809F9B8D4 +:1064A0000101EFF81A136FA86F9C7029301A300B96 +:1064B0005D196FA86F9C7029300A305B5D196FA859 +:1064C0006F9C301A7029304B5D19EEFC00A4484ACD +:1064D000302BF01F0004E3CD808000008003D81C27 +:1064E00080023A1AEBCD40C01897580BC04078088C +:1064F00058C8C0403018EF48006030C86FA68F08F9 +:106500006F9C6C29301A302B5D196FA86F9C702915 +:10651000300A305B5D196FA86F9C301A7029304BC0 +:106520005D19EEFC00A4484A302BF01F0004E3CDB7 +:1065300080C000008003D86080023A1AEBCD406032 +:106540001896784CF01F000B30056D1C8D45F01F20 +:1065500000096D4CED450044F01F00066DA8ED45A7 +:1065600000500A9A6D9C70290A9B5D19E3CD8060EA +:10657000800091E8EBCD40E01897580BC4F0780804 +:106580005808C4C130088F086FD95809C0B06F6867 +:106590005808C08070985808C0506FBB0E9C5D189A +:1065A000C4114A4B0E9CF01F00246FA83006301512 +:1065B0008F16EF4500408F268F666EFA70490C9B50 +:1065C0006F9C5D196FA80C9A70290C9B6F9C5D19CC +:1065D0006FA80C9A7029302B6F9C5D196F4CF01FBF +:1065E00000176FA80A9BEF460050EF46004C0C9A2C +:1065F00070296F9C5D193FF80C9A8F386FA5303B5E +:106600006F9C6A295D196FA80C9A7029304B6F9C9A +:106610005D19EF4600C0E3CD80E03018EF48006020 +:10662000CB2B6F686FBB70A90E9C5D19CBFB000074 +:106630008003D8948002634C800091E8EBCD40E069 +:10664000205D1897580BC04078085858C040301843 +:10665000EF48006030588F086F695809C4406FA830 +:10666000FACBFFF070596F9C5D19310A300B189509 +:106670001A9CF01F00256F1C6EE850086E295019F7 +:106680006E6850286F095039F01F002030086F6B7A +:10669000EF48005CEF480044EEC8FFB81A9A0A9928 +:1066A0001AD80E9C405876566FBB5D16EF4C0044CE +:1066B00040188FE82FFD5808C1616F785808C13124 +:1066C00040188F2840298F694038EF4800406F6894 +:1066D00070695809C08070785808C0506FBB0E9C14 +:1066E0005D19C0412FBDE3CD80E06F4CF01F000766 +:1066F0006F68EECAFFAC70796FBB0E9C5D19EF4CF2 +:106700000050CF1B800091D0800091E8EBCD4080FD +:106710001897580BC04078085868C0403018EF48A8 +:10672000006030686E4C8F08F01F001A6F18580810 +:10673000C2E0EEF800B05808C2216EA86F2C8F3866 +:10674000F01F00158F4CC0706F2A6F1BF01F0013D5 +:106750006F288F586FA8301A7029303B6F9C5D19D5 +:106760006FA86F9C7029300A305B5D196FA86F9C11 +:1067700070496EFA300B5D19E3CD8080310AEECBA3 +:10678000FF7CEECCFF6CF01F0005CD8B8F48CE9BBD +:10679000800091E880009200800091DCEBCD40FC0D +:1067A000201D79A81897169214931294799C700959 +:1067B0005D191896C2F06F685808C23070C8580842 +:1067C000C2000E9C1A9A6FBB5D181895C1A0400CB0 +:1067D0002FBC870CF01F0015C1D03028B892B888A4 +:1067E00030188699B8B9A9891897B8A9B8C80A9B6A +:1067F000400A2FBCF01F000E0E9C2FFDE3CD80FC45 +:106800005804C0416DCC580CC0A16DB86DA5580599 +:10681000C0A130070E9C2FFDE3CD80FC6DD81895EC +:106820005008CD6B5008CD4B80009200800091DC69 +:10683000D431209D3004F8C9FF7CF8C8FF6C18974C +:1068400050195008F8C0FFB808956FA8EF450060D0 +:10685000301B70196F9C5D19C0706FA8306B701978 +:106860006F9C5D19C2F16FA8306B70196F9C5D1938 +:10687000C140EEF800C45808C101EEF800C0E0487D +:106880000032E08A0025E0480033E080011C6F8878 +:106890005808C1003014CDAB6E085818F9B8010182 +:1068A000EFF81A18EF4500C030188F086F885808A5 +:1068B000CF216F7C580CE80C1700F9BC01012F7D2B +:1068C000D832301B0E9CF01F01EECE2B6E0958A95A +:1068D000FE9BFFDFFEF807ACF009032F30183029CC +:1068E000EF4800608F09CD4B300B0E9CF01F01E686 +:1068F000CCFB6E196EB81039C760300B0E9CF01FC0 +:1069000001E2CC6B6EA96E381039E0800137300B94 +:106910006E8E580EC1B06E685808C1806EAA6E396E +:10692000123AE08000BBEEF800B05808C0F0F2C8A0 +:10693000FFFFF1D8C008103AE08000B0F2C8FFFEB7 +:10694000F1D8C008103AE08000A96E2C582CC20083 +:106950006E985808E08001236E685828E080011F77 +:106960006EAA6E39123AE0800146EEF800B058087F +:10697000C0F0F2C8FFFFF1D8C008103AE080013B38 +:10698000F2C8FFFEF1D8C008103AE08001346E78FA +:1069900058085F1A3008F5EB0009F0091800E0818B +:1069A000010FEC1B0001F5EB0008F2081800E08075 +:1069B00001056EBB1699582BE080012A6E16580609 +:1069C000C071581BE080021B582BE08101630C3B17 +:1069D000E080014F0C995919C0F1580EC0416FE881 +:1069E0005808C0A0300B0E9CF01F01A8C51B6EEB11 +:1069F000580BFE90FF7C300B0E9CF01F01A5C48B42 +:106A00006FA8305B70196F9C5D19C7016FA8307B50 +:106A100070196F9C5D19C0506E685808FE91FF395F +:106A20006FA8300B70396F9C5D19C0516E68582883 +:106A3000FE90FF2F6FA8308B70196F9C5D19FE912F +:106A4000FF286FA8189B70396F9C5D19C0516E6844 +:106A50005828FE91FF1E6FA8307B70196F9C5D193E +:106A6000C0806E285828C0506E685808FE90FF11EC +:106A70006E185918E080025C5998FE91FF0AEEF8F2 +:106A800000805808FE90FF056E685808FE90FF01D0 +:106A90006E285848FE91FEFD300B0E9CF01F017DC4 +:106AA000CF7A6FA8306B70196F9C5D19FE90FEF164 +:106AB000EEFB00C4580BFE91FEEC0E9CF01F017023 +:106AC000CE7A3328EEFC00A4FEFA05CC1AD8302B7F +:106AD000F01F0172EEF800C0301B16080E9CEF4844 +:106AE00000C0F01F016F2FFDCD3A6FAA3038FACBEE +:106AF000FFE08F0830136F9CEF43006074595D19FD +:106B00008F95507C8F85EF4500788F758FA58FB559 +:106B10008FC58FD55F0A408B1896583B5F88104A07 +:106B2000EA0A1800C23119A919B8F1E910885068A9 +:106B3000103BC1C319988FA8EEF900B05809C09056 +:106B4000069C4019FACAFFE8FACBFFE4F01F015592 +:106B50000D893028F0091800E080011CE08B008DC1 +:106B60003018F0091800E0800123EEF800C02FF87B +:106B7000EF4800C0FE9FFE8D6E785808FE90FEC95B +:106B8000EEF800B05808C080310A400B401CF01FDE +:106B90000146FE91FEBE301BCBCA580EFE90FEF998 +:106BA0006E685808FE91FEF56E185918FE91FEDACF +:106BB000583CFE91FED7CECA6E19C0EB301830A9F2 +:106BC000EF4800608F096F1CF01F01386E485808AD +:106BD000C1A06E5CF01F0136EF4C0044FE90FE59E0 +:106BE0006E5A6E4BF01F01336E58EF480048FE9FFF +:106BF000FE50300B0E9CF01F012AFE9FFE4A30090A +:106C000050494048EF480044FE9FFE436F08580833 +:106C1000FE90FED6301830996FAA8F09EF480060B9 +:106C20007458FACBFFE86F9C5D1819A919B818962B +:106C3000F1E910885848E08B01476F1CF01F011BD9 +:106C4000305CEF450044EF4C00486EA6F01F011881 +:106C5000E08001853029B896B889EF18004AB8C994 +:106C6000B8B8A988B8A8EF4C0044FE9FFE12584C53 +:106C7000FE90FEB3CB8A3038F0091800E08000DCCB +:106C80003048F0091800FE91FF7230188F98C6EB5B +:106C900030181693EF48006030496FA8E04B00FEB3 +:106CA000EFF3000D8F096EC670096F9C5D19069A8F +:106CB0000C9BF01F0101E08100C36F1CF01F00FB63 +:106CC0006FA8EF4500446EA270096F9C5D19503C9F +:106CD000FACCFFE8F01F00F91893C9206EB8E0481D +:106CE00000FEE08101516FA8406670096F9C5D193C +:106CF00030C8505CA376EF480048ECCCFFECF01FA6 +:106D000000EC1891E080012E3FE9B892B8C9302913 +:106D1000B889F8C8FFFBB0A5B085B095F8C9FFF8F1 +:106D20003038B285B295B2A5B2B8504CF8C2FFF473 +:106D30000A96C298661A6ED81438C210405CF01FCA +:106D400000DE049AE4CBFFFC580CC1903FE814C865 +:106D50008689B4896608A988B4986609B4A907C861 +:106D6000B68886A9B6996618A988B6A86619B6B96C +:106D7000F6C2FFFC60082FF62F88810866F35803DF +:106D8000E0800099660B6EC81638CD50661ACD7B30 +:106D90006E185918FE91FEEB40685848FE98FEE7C1 +:106DA0003018EF4800780DC98FB9CE0A406A584AAA +:106DB000FE98FEDD30188F780DC98FB9E04900FECE +:106DC000FE91FED558BAFE98FED2ECC9FFFB139C8B +:106DD000138A13A8F1EA1108F1EC1088ECCBFFF844 +:106DE0008FC817AC17B81789179AF1E91188F1EA1B +:106DF0001108F1EC10888FD8CB9A6FA83089EF4B2F +:106E000000608F09FACBFFE0705A6F9C5D1AFEFAA2 +:106E100002AE302BEEFC00A4F01F00A06F1CF01F90 +:106E200000A30C99EF460044009A6EAB0E9CF01F35 +:106E300000A5C1AB30188F88FE9FFE990C9C069B65 +:106E4000F01F00A1FE90FF3B6FD85808C0906F6AFA +:106E5000580AC06074096EC81039E0800086FEFBD5 +:106E6000026A0E9C3006F01F009A6EB88F186F6C85 +:106E7000580CE08000CD5806C54078B86FBB0E9C1A +:106E80005D18EF4C006C6FB65806E08000CA6F6A60 +:106E90006ECB30188F287429FEFA02381AD91AD30B +:106EA0001ADB302BEEFC00A4F01F007C2FDDFE9FD0 +:106EB000FCF05806C4206F285C78A2B8A988A2A864 +:106EC000FE9FFEA1F0CC0004F0C20005F01F007888 +:106ED0001893FE90FEB45802C120ECCCFFFB300AA0 +:106EE00035DB1938F0C90021F6091800F9B80B5F35 +:106EF000E60A0B082FFA1432FE9BFFF53008E60273 +:106F00000B084F581AD34F5A1AD8302BEEFC00A456 +:106F1000F01F0062069CF01F00652FEDFE9FFE8FA4 +:106F200078380E9C5D18EF4C006CCAEB6FF858086F +:106F3000FE90FCAFFE9FFDAA04983FE910C9B0A6E1 +:106F4000B086B096E4C9FFFCB2B6B286B296B2A6DD +:106F50006F282F88EF480048CB0B0A9CFE9FFE85C8 +:106F60005045FE9FFE5074181033FE91FF7A7499BD +:106F70005809FE90FF766FBB0E9C5D19FE90FF7165 +:106F80003016C74B3058406CEF4800482FACF01F0C +:106F900000481896FE90FE35B89230283039B888EF +:106FA000B8C9504CF8C2FFFB50250A91C1A8661A17 +:106FB0006EB8103AC130403CF01F003FC0F0660888 +:106FC0005808C5A040285808C0913FE904C93018A6 +:106FD000502860082FF12FF8810866F35803C0602D +:106FE000660B580BCE50661ACE7B5801EFF8101284 +:106FF000E5F10E00EFF80012F7B800FFEFF80A1203 +:107000005C78ACB8A988ACA8FE9FFDFD069B6ECC51 +:10701000F01F002DEF4C0058FE90FE51C2DB6FA810 +:107020006F9C70095D196F6870291AD91AD36EC8E0 +:1070300018921AD8302B4AAAEEFC00A4F01F0017B1 +:10704000EF4600588F268F1658025F1B6EB92FDD52 +:1070500058D95F081668EC081800FE90FE30E4F876 +:1070600001605808FE91FC15E4F801685808FE908C +:10707000FE26FE9FFC0E661804C8CACB800265740B +:107080008003D7848002670C8002663C80026370B4 +:10709000800264808003D8A080023A1A800264E4EF +:1070A00080028D9C8000917C800091E8800092009D +:1070B000800091DC80023AD8800271E48003D8F02D +:1070C0008002679C800271908003D9248002634C07 +:1070D0008003D9708003D8D08003D3E48003D930F3 +:1070E000EBCD40801897580CC0E0488BF01F00088B +:1070F0000E9CF01F0008EEFC00ACF01F00070E9C79 +:10710000F01F0006E3CD80808003D9AC8002634C81 +:107110008002653C8002D298800091E8EBCD40F877 +:10712000203D1896169414931295E06C00C8F01F39 +:1071300000151897C1C033C8F946006499F8F9449E +:107140000068F94300A430CA300B1A9CF01F000EEF +:107150006A2850286A0950096A181A9C5018F01FAA +:10716000000BEF4C00AC1A961898C0500E9C2FDD07 +:10717000E3CD80F80E9C1097F01F0005CF8B000028 +:1071800080028F24800091D08002D2C4800091E8D8 +:10719000189948A8700C580CC051C0D878FC580CED +:1071A000C0A078081238CFB1781816385E0C78FC79 +:1071B000580CCF815EFD000000007AB01899489805 +:1071C000700C580CC051C0C878FC580CC09078089E +:1071D0001238CFB178181638CF81782C5EFC5EFD5E +:1071E00000007AB0189B4888700C580CC0A0189901 +:1071F000300A2FFA72F95809CFD1149897085EFC1B +:107200001898CFDB00007AB05EFDD703EBCD40E0ED +:1072100048D81896169570075807C051C0E86EF701 +:107220005807C0B06E2C0C9BF01F0008CF916E0861 +:107230008B086E1CE3CD80E030088B08109CE3CDFA +:1072400080E0000000007AB0800091A0EBCD40C04B +:1072500048B70E966E095809C0B072F88D08129C96 +:1072600072D85808C0705D186E095809CF71E3CD07 +:1072700080C0129CF01F0003CEEB000000007AB02B +:10728000800091E8EBCD40C048D66C485808C0312A +:10729000C0880E987057109CF01F000A5807CFA1A5 +:1072A0006C6CF01F000930086C3C8D68F01F000505 +:1072B0006C8CF01F0004E3CD80C0000000008C90B7 +:1072C000800091E880014544EBCD40F8495718967D +:1072D000169314946E2B12952FFB6E3CA56BF01F2A +:1072E0000012C1D06E28A568F80809066E29A569A4 +:1072F000F8090009932593146E2AF4081504F80878 +:10730000000891336E188F3C2FFA1036EFF69A0171 +:107310008F2A3018300C8FC8E3CD80F8E3CFC0F847 +:1073200000008C90800091F4EBCD404CE0634DD395 +:10733000EA1310621896F01F000DF8030648A7899B +:10734000E06A03E8F20A0248F8080109121CF20A8E +:10735000024AF80304428D1ABF5CA743E60C010CF5 +:107360008D0CE3CD804C0000800145C4EBCD408006 +:10737000202D4A076E495809C2C06E581039C29074 +:107380001A9CF01F001D6E484009700A1439C2444F +:107390007018401BF40901091618C276F00B141F6F +:1073A000E06A03E8F20A024AE0694DD3EA19106282 +:1073B000F0090448A7491619F20A000C580CE08A93 +:1073C000000E300948DA6E6BF01F000D6E488F58C2 +:1073D0002FEDE3CD80801439C030301CCF3B7018C6 +:1073E000401B103BCFB4CD7B2019F028BDC0CD7B16 +:1073F00000008C9080027328800275188001455827 +:10740000D43149A0189516931492604C580CC2B010 +:1074100030060C940C91785778480A38C09018962A +:107420000E9C5807CF91F01F0012089CD8325BF3D6 +:107430005F0A782906395F081448E2081800CF006F +:107440005BF25F0A783904395F081448E2081800D3 +:10745000CE705806E1F70A04EDF71A052FF4F01F75 +:107460000005CDFB1894CE0B00008C908002736C4D +:10747000800091E8EBCD40FC18961695149212947A +:107480001093318CF01F00211897C3A0F01F00202B +:107490006E0A6E1B0C0AEA0B000B8F0A8F1BEE5B49 +:1074A000423FE08A000B2FFAEE3B42408F0A8F1BCF +:1074B000EE5B423FFE99FFF98F248F338F423008F5 +:1074C0008F58494C78495809C1D072081438E0895E +:1074D000001A2F0CC0A8F2CCFFEC72595809C0A0BA +:1074E00072081438E0890007103ACF617218103B17 +:1074F000CF348F599907F01F0008E3CF80FCE3CF0A +:10750000C0FC2F0CCF7B000080009200800273280B +:1075100000008C908002736CEBCD40E0202D49661A +:107520001A9CF01F00166C475807C1F040096E08FE +:107530001238E089001B3005C05840096E08103928 +:10754000C1451039C0516E1940181238C0E56E5847 +:107550008D558D486E3B6E486E2C5D180E9CF01F4D +:1075600000086C475807CEA1F01F00062FEDE3CFAF +:1075700080E0000000008C9080027328800091E879 +:107580008002736CEBCD408049A76E3E580EC2B0AE +:107590006E2A580AC280E08A002B7C081838C27014 +:1075A000FCC9FFF0300BC05872082F091838C050C2 +:1075B0002FFB163AFE99FFFA143BC170201A163AB7 +:1075C000C0F0161AF60C1504A56AFC0C000C2FFB73 +:1075D000A56BFC0B000BF01F00086E2A201A301858 +:1075E0008F2A8FC8E3CD8080E3CD8080300BCE7BA7 +:1075F00000008C90800091C4EBCD406048861895C7 +:10760000334A300B0C9CF01F0007ECCCFFE88D05D3 +:10761000301BF01F0005E3CF8060000000008C905D +:10762000800091D0800144F80050F2010100000078 +:107630000000000000000000F6F800DC5808C05010 +:10764000F8F800F85808C0205EFDF6FB00D0580B93 +:10765000CFC076085808C04176185808CF602F8BE5 +:10766000CF9BD703EBCD4080300B1897F01F001352 +:10767000306A300BEECCFF64F01F0011306A300B23 +:10768000EECCFF5EF01F000E300BEEFC00E0F01FB2 +:10769000000D300BEEFC00E0F01F000BEEF800BC1C +:1076A0005828C030E3CD8080EEFC00E0300BF01FA6 +:1076B0000007E3CD80800000800217D0800091D0C9 +:1076C000800261E8800261D4800261A4EBCD408039 +:1076D0001897F8F800945808C160300BF94B0094E3 +:1076E000F8F800D470985808C040F8FC00C45D1841 +:1076F000486A302B0E9CF01F0006300A0E9C149B2B +:10770000F01F0004E3CD80808003D9D480023A1AB0 +:1077100080022584D431209D500C761558155F9831 +:107720007607169058075F1910693008F00918009D +:10773000E08000B8EEC4FFFF0989F2C6FFFE0C35F9 +:10774000E08500B010923DD33301C168E208180013 +:10775000C2800C0758155F9958075F181268E40833 +:107760001800E080009EEEC4FFFF0989F2C6FFFE0C +:107770000A36E08900960C150F88E6081800CE71CD +:10778000305AF4091800FE98FFE6EECCFFFE306A8E +:107790004DFBF01F0060C0B00F88E2081800CDA1BB +:1077A00009883019F2081800FE98FFD540080E9B92 +:1077B0000C9AF0FC00DCF01F00581897C711400A23 +:1077C000FACBFFFCF4FC00DCF01F0054C21540793A +:1077D0005809C1E040685808E0890007C19840682E +:1077E0001037C1644079EE0B1504F20B000B400911 +:1077F0003008F2FC00DC2FF71099109AF01F0048B7 +:10780000CEF14008301BF0FC00E0F01F004660465F +:10781000605558065F1958155F981069C760ECC429 +:10782000FFFF0989F2C7FFFE0E35C6F53003069249 +:107830000691C1A85802C0610D88330AF4081800E7 +:10784000C3A00E060E1558065F1858155F991268EA +:10785000E2081800C3F0ECC4FFFF0989F2C7FFFE7D +:107860000A37E08900385803CE610D883DDAF40804 +:107870001800CE113058F0091800FE98FFDD306A6C +:107880004A3BECCCFFFEF01F0023CD5140090E9A7D +:107890000C9BF2FC00DC3013F01F0023CCCB600704 +:1078A0005807CB604009300AF2FC00DC149BF01F43 +:1078B000001ACAEB09883019F2081800FE98FFC3B5 +:1078C00040080E9A0C9BF0FC00DC3012F01F0017F1 +:1078D000CB9B5803C0F05802C0B160485808C08024 +:1078E0004008049AF0FC00DC049BF01F00102F7D80 +:1078F000D83260465806CF004009300AF2FC00DC5E +:10790000149BF01F0009CE8B3002CF5B80027628DB +:107910008000917C8002B5EC8002C04C8002938094 +:10792000800255968002B58C8002B52CD431FACDF8 +:10793000009018911497586BE08B00C4FEF807482C +:10794000F00B032F580AC0A0F8F800907009739A42 +:10795000580AC0410E9BF01F01CD304B029CF01F16 +:1079600001CCE2F801185808E0810312FAC7FF942D +:10797000E2F800D470285808C4C00E9BE2FC00C492 +:107980005D18C475E2C6FF64306A0C9B0E9CF01F44 +:1079900001C1C3F0FB3800711AD8FB3900741AD941 +:1079A000FB3800771AD8FB39007A1AD9FB38007DEA +:1079B0001AD8FB390080FEFA06DE1AD9301B029C69 +:1079C000F01F01B6306A0E9B0C9CF01F01B5306AA7 +:1079D000300BE2CCFF5EF01F01B3E2FA00BC2FAD2A +:1079E000584A5F08590A5F091248C081588AE080E6 +:1079F000030C0E9B029CF01F01ACE2F80090704952 +:107A00005819E08102D5E2F800B05808E08002D0B1 +:107A1000FB3800711AD8FB3900741AD9FB3800778B +:107A20001AD8FB39007A1AD9FB38007D1AD8FB39ED +:107A30000080302B1AD9FEFA0672029CF01F0197C3 +:107A4000E2FB00B02FAD580BC040029CF01F019824 +:107A50000E9BE2FC00DCF01F0197622CF01F0196E8 +:107A6000300BE2FC00E0F01F0195300BE2FC00E07F +:107A7000F01F0193E2F800BC5828C061300BE2FC13 +:107A800000E0F01F0190301BE2FC00E0F01F018BD2 +:107A9000300BE34B00F4E2F900BC59095F0A584986 +:107AA0005F081448F6081800E0800216029CF01FD8 +:107AB0000186307B029CF01F0176029CF01F01833F +:107AC0002DCDD832580ACFD0149B7439F8FC00DC85 +:107AD000742AF01F017F2DCDD832F8FB00BC590B62 +:107AE000CF00F8F800E85858E08002355838E08BAD +:107AF0000234E2C7FF64306AFEFB05D80E9C2F8B70 +:107B0000F01F0164EE0B1710E06800A2E3D8E00B51 +:107B1000029CF01F0171E2FC00DCF01F0170FEFA14 +:107B200005BE302B029CF01F015DE2FA00BC584AF2 +:107B30005F08590A5F091248C0B1588AE08002976D +:107B400030080E9BE3480104029CF01F0157029C81 +:107B5000F01F01642DCDD832FEFA058C303BF01FAA +:107B6000014F5807E08002806E0858085F1B169A84 +:107B7000E2FC00DC301BF01F015DFACCFF94F01F2B +:107B8000015CE2F800985808E08001D541B9F2089C +:107B90000108E048003CE08A01A6E34900982DCDA9 +:107BA000D832F01F0154E08501EBE2F900907248F1 +:107BB0005828C870E2F800AC5808C831E2FA00CC86 +:107BC0001094500AE2F000D072285808E08A00A908 +:107BD000300850187218401AF00A032850585800FC +:107BE000E08A0097400530020A96C11808973003D2 +:107BF00030142FF2ECC6FF6404305F983009E9E8D6 +:107C00000008F2081800E08000970E940C9B029C7C +:107C10000C93F01F0139C05078385818FE99FFE8CE +:107C20006D585808C051ECF800805808CE004059F3 +:107C30005809CDD0ECC8FFFAECCAFFA8ECC9FFD4B4 +:107C40005048502A50394057C0486E175807CCF05A +:107C5000EEF801945808CFA16CAA6E58103ACF6183 +:107C60006E4B404CF01F010BCF116E885808E0811D +:107C700000E16F6AEDBA0001C061ECFB0080580BB7 +:107C8000E08100E3F1DAC001300AF4081800CDE029 +:107C90006D5B580BCDB0FACAFF94403CF01F011742 +:107CA000CD516F6841B91268CD106F3841C9126863 +:107CB000CCD06F4841D91268CC906F5841E9126816 +:107CC000CC5058065F04C96B149BF01F00F02DCDFB +:107CD000D832149B2EACF01F010A1896FE91FEF2CA +:107CE0006F9B580BE080012A581BFE91FEEBE34B83 +:107CF00000D8029CF01F00FB622CF01F01028326BB +:107D0000CE0A5803E08100BF0E94E2F900904018BB +:107D10002FF850187228401A103AFE95FF5DE2F8CD +:107D200001085808E0800121029CF01F00F7E2F9E9 +:107D30000090C4BB5804CE600E923006C108049770 +:107D4000089930032FF6EAC5FF640C305F98F3E81A +:107D500000083009F2081800CD500E920A9B029CD0 +:107D60000A93F01F00E5C05078385818FE99FFE9D3 +:107D700040585808CE50EACAFFFA4057506AC078B7 +:107D80006AA8103AC5006E175807CDA0EEF8019406 +:107D90005808CFA16E5A580ACF416E885808C1E1E1 +:107DA0006F5BEDBB0002C040EDBB0003CED1F1DB49 +:107DB000C002C0806B585808CE71EAF8008058089D +:107DC000CE31EEF8014C5808C110EB190088EDB91E +:107DD0000001CDA058055F09CB6B306AEECBFFE800 +:107DE0000A9CF01F00ACCD01CDCB1099EEC8FECCA3 +:107DF0002FF9700A580AC2612FC85849CFA1EDBBAC +:107E00000003C071EEF800F0F1D8C002F9BA010128 +:107E1000EB190088EDB90004C030580A5F0A580A0F +:107E2000CB30CD6B6E4B406CF01F009ACAD1CB6B40 +:107E3000306AEECBFFE80C9CF01F0096FE91FF0726 +:107E4000C19B301ACDDBFACAFF94402CF01F00AB67 +:107E5000C0306F6AC18B6F6A41B8F5E80008FE90C8 +:107E6000FF136F3841C91268FE90FF0E6F4841D969 +:107E70001268FE90FF096F5841E91268FE90FF04F6 +:107E8000C21BE2F800A85808C131306AE2CBFF6497 +:107E9000069CF01F0080C170E2F800E85838C081ED +:107EA000306AE2CBFF5E069CF01F007AC0C00E9BDA +:107EB000029CF01F007FE08100B50E9A069B029C99 +:107EC000F01F0092009A400BE2FC00DCF01F0090D3 +:107ED000FE9FFDF8169A029C30ABF01F008EFE9FAD +:107EE000FDEE3017FEFA0230303B029CE34700946F +:107EF000F01F006AE06B2710300CF01F0088E2F8DA +:107F000000D470985808C0500E9BE2FC00C45D1865 +:107F100030EB029CF01F0082300A029BFEFC020440 +:107F2000F01F0081300802994FEA109B33CCF01FFC +:107F3000007F41B9FE9FFE33E2F800D85808FE905A +:107F4000FDC1E34B00D8029C301BF01F0079FE9F5F +:107F5000FDB9582BC780E07A86A0300B029CF01F39 +:107F60000075FE9FFDC8305BE2F801105818C7206D +:107F7000029C300AF01F006FFE9FFDA4E2F9009002 +:107F800072485828FE90FD9E301BCEFBFAC7FF9426 +:107F9000E2C6FF64306A0C9B0E9CF01F0041E2F8C1 +:107FA00001185808FE91FCF8FE9FFCE4029CF01FAB +:107FB00000621896C230F8FB0194580BC1F1795851 +:107FC000E2180013C351189B029CF01F005CE2F8FA +:107FD00000B05808C0701036C050E2FC00E0F01F3E +:107FE0000058E2FC00DC0C9BE34600B0F01F00559B +:107FF000029CF01F0055FE9FFD0D029C303BF01FC0 +:108000000053FE9FFD5FE2F800B05808FE90FCF3BD +:10801000F0F800F0F1D8C002FE91FCEDFE9FFCEFFD +:10802000029C300A30ABF01F0043FE9FFD4B350928 +:10803000FAC8FF70189A10D9029CFAC9FFE4F01F21 +:108040000044CC6B4C3AF01F0015E2F800E8FE9FAC +:10805000FD4F72485818F9B80002E3F80A44F9BB1A +:108060000000C87B0E9BFE9FFD84E2F800B058081C +:10807000FE90FD68F0F800F0F1D8C002FE91FD62BC +:10808000FE9FFD678003D9B880027714800217D065 +:108090008000917C8003D9F880023A1A800091DC3C +:1080A000800091D0800226948003DA3880027638EE +:1080B0008002BA4C80028172800261E8800261D441 +:1080C000800261A480021CE080021DB88002979C9F +:1080D0008002762880021AE08002BA1C8003DAA8A7 +:1080E000800276648003DAE48002D19C80028F549F +:1080F00080021E84800218F88002BD68800091A072 +:10810000800281748002189C800230DC800298A476 +:108110008002246C8003DB0480028F1C800228D83C +:10812000800276CC800274008002747480022794EE +:10813000800225848002195C800222A480025748B4 +:108140008002B9D48002237080022FCC80021F30BD +:108150008003DA68580C5E0E5E1DD401201D3008C5 +:10816000767C3009BA881A9A7668129B5D182FFDC2 +:10817000D8025EFCEBCD40801897580CC090789CDC +:10818000580CC035F01F00040E9CF01F0004E3CD16 +:108190008080000080027584800091E8EBCD40F87B +:1081A0001896129510944063328CF01F000B1897AC +:1081B000C0F00C9B311AF01F00093FFC8F658F74D3 +:1081C0008F838F9C30090E9A485BF01F00060E9C2F +:1081D000E3CD80F880028F24800091AC8002815A28 +:1081E000800272C8D4011698306AF8CBFFEF109C59 +:1081F000F01F0002D80A0000800091DCD431213D3C +:1082000076FE511E760A503A761950497628505813 +:10821000763E506E764A507A7669508976785098D4 +:10822000768E50AE769A50BA76B950D976C850E864 +:1082300076DE189850FEF8C9FFF876EA510A7654AF +:1082400076AB500C5019E02BA44F50CB110EF8CB4D +:10825000FFF45008512E403A700340487205502BED +:10826000E069A478EA19D76AFC0900091409760ABA +:10827000E06BB756EA1BE8C7F40B000B100BF5E5F3 +:108280002008066814581009E06870DBEA182420FA +:10829000EBE3200AF20E1507FDE9139E060EFDEA38 +:1082A000000A0A5A1005140BFDE32008F606150C07 +:1082B000EDEB13461C06EDE800080658405AE0694D +:1082C000CEEEEA19C1BD14051005EDEE2008EA0B4B +:1082D0001511F7E512FB0C0BF7E800081C58120308 +:1082E0004069120310034078E6051516E0690FAFE8 +:1082F000EA19F57CEBE312A5F00900091605F7E68B +:108300002008EBE800080C581C091009EBEB2008CA +:10831000F2031507E7E913930A03E7E80008165884 +:10832000E06AC62AEA1A4787E80A000A0C0A100A15 +:10833000E7E52008F402150CE5EA13420602E5E839 +:1083400000080A58408EE0694613EA19A830FC0973 +:10835000000916091009E5E32008F2061511EDE9F8 +:1083600012F60406EDE800080658409AE06B950105 +:10837000EA1BFD46F40B000B0A0B100B40A840C98A +:10838000F60E1516FE395BB1FDEB12AEE06A98D819 +:10839000EA1A69800C0E40BBF00A000AEDE22008E0 +:1083A000FDE80008045840C1060A50C9100AE069F7 +:1083B000F7AFEA198B44FDE62008F6090009F40B33 +:1083C0001507F7EA139B1C0BF7E800080C58F7EEAB +:1083D000200A0C0104091009F206150CEDE91346F8 +:1083E0001606EDEB2008EDEA000A1C5A1401E2051E +:1083F0001511EBE112F50C05EBE80008165840DA10 +:10840000E069D7BEEA19895CF40900091C09100962 +:1084100040E8F20E1516E06A1122EA1A6B90FDE9A7 +:1084200012AEF00A000A0A0EEBE62008160AFDE872 +:10843000000840FB0C58E0697193EA19FD98100A96 +:10844000F6090009FDE52008F40B1507F7EA139B70 +:108450001C0BF7E800080A580C0910094108F2063D +:10846000150CE06A438EEA1AA679EDE91346F00A84 +:10847000000A1606F7EE2008EDE800081C580A0A64 +:10848000100A4118F4051511E0690821EA1949B4E8 +:10849000EBEA12F5F00900090C05EDEB2008EBE81A +:1084A000000816581C091009F2031516E7E912A373 +:1084B0000A03E7E520080C680A58404EE06A256286 +:1084C000EA1AF61EFC0A000A160A408B100A40D867 +:1084D000F40E1505E069B340EA19C040FDEA13BE89 +:1084E000F6090009060E403B0C09E0665A51EA16EF +:1084F000265EF0060006FDE320080A68065810090B +:10850000E062C7AAEA12E9B6F6020002F20B150908 +:10851000F7E9137B41191C0BF7EE200806681C587D +:108520000A0606021006E063E681EA13D8A1F20308 +:108530000003EC09150EF3E613291609F3EB2008E6 +:108540001C68165840CA10024078E065105DEA15B4 +:10855000D62FE0611453EA110244E8050005F40146 +:1085600000011C051601E40A1514E06EFBC8EA1EA2 +:10857000E7D3F5E212CAF00E000E120AF5E9200860 +:10858000166840BB125812031005E066CDE6EA16E5 +:1085900021E1F6060006EA0B1505F7E513BB140BFF +:1085A000F7EA2008126841091458E06507D6EA1571 +:1085B000C3371001F2050005E2091509F3E113794B +:1085C0001609F3EB20081468165810034068140EBF +:1085D0001606E60A150EE0620D87EA12F4D5F5E3F9 +:1085E000132AF0020002120AF5E92008166840ABCF +:1085F00012581205100EE06314EDEA13455AF60303 +:108600000003FC0B1514F7EE12CB140BF7EA20084D +:10861000126840F91458E061E905EA11A9E310066F +:10862000F2010001EC091505F3E613B91609F3EBA5 +:10863000200814681658100540581402E066A3F884 +:10864000EA16FCEFEA0A1509F0060006F5E5137ACA +:10865000120AF5E9200816681258409E1002160307 +:10866000E40B150EF7E2132B140BF7EA200812683F +:108670001458E06502D9EA15676F1003FC05000580 +:10868000E60E1514FDE312CE160EFDEB200814685D +:1086900016581201100140A840E91406E060F68166 +:1086A000EA108771E20A1505F0000000F5E113BA3F +:1086B0001C0AF5EE200816681C58E0624C8AEA1283 +:1086C0008D2A1006F2020002EC091509F3E613796F +:1086D0001409F3EA20081C681458160540DB10053D +:1086E0004108E434C6BEE0616122EA116D9DE80AEA +:1086F0000007F6010001E066380CEA16FDE5F00619 +:108700000006EA08150EF1E513281208F1E9200B1E +:10871000F7EA000A125A1C021402407A404E120074 +:108720001001E063CFA9EA134BDEF4030003E40A6F +:108730001514F5E212CA100AF5EB200BF5E8200833 +:10874000EE0B000BF6091504F3EB13C914091258CC +:1087500014061000F3EA200AE065EA44EA15A4BE14 +:10876000E008150BFC050005F1E01358120512088E +:10877000105A10031401F1E92009E20B1510F7E17A +:10878000130B100B1659F7E820081206EC0E1517FC +:10879000FDE6129E160E1C5810054098FDEB200AAF +:1087A000EA061504E0694B60EA19F6BBEDE513C66D +:1087B000F00900091C0616090C5AEDEE20081403F6 +:1087C00040CBE605150BEBE313550C050A58E06AA0 +:1087D000BC70EA1ABEBF1009F60A000AEBE62008D0 +:1087E000F20B1510F7E9130B0A0B16581C0A100AA6 +:1087F00040F8F40E1517E0697EC6EA19289BFDEAD9 +:10880000129EF0090009160EF7E520081C580C0905 +:1088100010094038F2061504E06A27FAEA1AEAA1BC +:10882000EDE913C6F00A000A1C06FDEB20080C58FF +:108830000A0A100A4068F405150BE0693085EA1948 +:10884000D4EFEBEA1355F00900090C05EDEE200812 +:1088500016090A58408B1009E06A1D05EA1A0488B7 +:10886000EBE62008F60A000AF20B1510F7E9130BE5 +:108870000A0B16581C0A100A40B8F40E1517E069C6 +:10888000D039EA19D9D4FDEA129EF0090009160E72 +:10889000F7E520081C580C09100940E8F2061504F9 +:1088A000E06A99E5EA1AE6DBEDE913C6F00A000A88 +:1088B0001C06FDEB20080C580A0A100A4118F405A2 +:1088C000150BE0697CF8EA191FA2EBEA1355F009D1 +:1088D00000090C05EDEE200816090A58405B100946 +:1088E000E06A5665EA1AC4ACEBE62008F60A000A0C +:1088F000F20B15101C0AF7E9130BE0692244EA1980 +:10890000F4290A0B1658100A4032F40E15171202F9 +:10891000FDEA129EEA0811FF160E409AFDE81008C3 +:10892000E069FF97EA19432A1658F40900090A0971 +:108930000C0241061002F60811FFE40A1506F5E2E2 +:1089400013AA1C0AF5E810081C58F2080005E06993 +:1089500023A7EA19AB941206FC0811FFEC0B000BDD +:10896000EA06150AEDE513661406EDE8100814583A +:10897000F6080008E069A039EA19FC93F00B150F1E +:10898000FA243942F7E8131BE80900050C0BEA0E3C +:10899000000EF40811FFF7E810080C58E06959C3FD +:1089A000EA19655BFC08000540E2EA0E15151202A3 +:1089B000FDE512BEEC0811FF160EFDE81008165872 +:1089C000E40A000AE069CC92EA198F0CF40800026C +:1089D0004068F00900090C09E40A1506F60811FFC1 +:1089E000F5E213AA1C0AF5E810081C58F208000268 +:1089F000E069F47DEA19FFEF40C1FC0811FF1201A4 +:108A0000E406150AE20B000BE0695DD1EA198584E2 +:108A1000EDE213661406EDE8100814584045F60818 +:108A200000011205E20B150FEA0E000EF7E1131B11 +:108A3000F40811FF0C0BE0697E4FEA196FA8F7E804 +:108A4000100840A30C581203E60A000AFC080005AF +:108A5000EC0811FFEA0E1515FDE512BE160EFDE835 +:108A600010081658F4080003411AF60811FFE069CF +:108A7000E6E0EA19FE2CF4090009E60A15060C09DD +:108A8000F5E313AA1C0AF5E810081C58F2080003C5 +:108A90004088E0694314EA19A301F00900091609A6 +:108AA000FC0811FF40FBE605150AEBE3136514050E +:108AB000EBE810081458F2080008E06911A1EA195F +:108AC0004E08F6090009F20E000EF006150FE069D7 +:108AD0007E82EA19F753EDE81316F40811FF0A062F +:108AE000EDE810080A58FC080001407E120EEA0862 +:108AF00011FFFC0A000AE20E1515FDE112BE0C0E74 +:108B0000FDE810080C58F40800094128F20A15067F +:108B1000F5E913AA1C0AF4080009E068F235EA181E +:108B2000BD3A990940D91009EC0811FFF205000B74 +:108B3000F5E8100840091C58720CF6080001E069BD +:108B4000D2BBEA192AD740581208E20B150AF006E0 +:108B50000009F7E1136BFC0811FF140BF7E810088C +:108B60001458F208000640B8E069D391EA19EB8680 +:108B7000F0090009F20E0008F40A11FF400EEC099A +:108B8000150FF3E613191609F20C000CF3EA100A9C +:108B9000165AF00A0006EC081515F1E612B8100C8A +:108BA0009D0C401A7408120895084028700916098F +:108BB00091092EDDD832D703EBCD40E03809764855 +:108BC000F1D8C066F608000AF56900181895F00A91 +:108BD000113F1697F6080008F0CCFFE7587AE08BB3 +:108BE0000056300BF01F002DEEC6FFE8EECCFFA8BC +:108BF0000C9B1798178917BAF3E8108917A8F1EAA0 +:108C00001088F3E8110916A9183BCF410C9B0E9C64 +:108C1000F01F0023338A300B0C9CF01F00200C9BAC +:108C2000ECCCFFC81798178917BAF3E8108917A872 +:108C3000F1EA1088F3E8110916A9183BCF416E48F4 +:108C40006E590C9B0E9CEF480050EF490054F01FEA +:108C500000140E9BEECCFFF01798178917BAF3E8B3 +:108C6000108917A8F1EA1088F3E8110916A9183B32 +:108C7000CF410E9B0A9C310AF01F000A0E9C304A1D +:108C8000300BF01F0006E3CD80E0208A300BEEC6EB +:108C9000FFE8F01F0002CC4B800091D0800281FCE5 +:108CA000800091DCEBCD40FC1493784AF40300384B +:108CB000103AF9F98005F9F9B005F7B90BFFF9F9A0 +:108CC000BA059948E608161DF20800089958189444 +:108CD0001692F1DAC066C381F8C5FFE8E043003FB1 +:108CE000E088002C3006EAC7FFC0E406000B340A17 +:108CF0000A9CF01F00290A9B1798178917BAF3E8F6 +:108D0000108917A8F1EA1088F3E8110916A90E3B9B +:108D1000CF410A9B089CF01F00212C06E6060108A3 +:108D2000E048003FFE9BFFE3E6C80040E7D8C006EE +:108D3000E018FFC02C081002069A049B0A9CF01F42 +:108D40000016E3CD80FCF00711402E88100C0E3386 +:108D5000C1D30E9AF01F0010E8C5FFE8E8CCFFA8C9 +:108D60000A9B1798178917BAF3E8108917A8F1EA30 +:108D70001088F3E8110916A9183BCF410E130E0213 +:108D80000A9B089CF01F0005CAAB069AF01F000260 +:108D9000E3CD80FC800091DC800281FCEBCD40FCC7 +:108DA000216DE0682301EA186745E06EAB89EA1E91 +:108DB000EFCD30075008501EE068DCFEEA1898BA84 +:108DC000E06E5476EA1E1032504750575028503EFD +:108DD00018931292580CC140149416951A962FF7B6 +:108DE000090A0B0B1A9CF01F00080E33FE9BFFF9BB +:108DF0001A9B049CF01F00052EADE3CD80FC1A9653 +:108E0000CF8B000080028CA480028BB8D431FACDC5 +:108E10000088501C500B14931292109142B0585A73 +:108E2000E08B0056E04B0040E08B0054FAC4FFF8A2 +:108E3000340A300B089CF01F002E400A401B089C8F +:108E40000896F01F002CFAC5FFB808970D88EC189B +:108E500000360CC80A36CFB1340851845128580363 +:108E6000C110FACCFF9CFACBFFB4300AE60E150213 +:108E7000E40A030818A8E20A030916A92FCA1C3A33 +:108E8000CF81E6CCFFFF00990A9AFAC3FFA0069BA8 +:108E9000F01F0019340A300B089CF01F0015400A1F +:108EA000401B089CF01F00130F88EC18005C0EC8D4 +:108EB0000C37CFB1310C3408513C5184519000999A +:108EC0000A9A069B5128302CF01F000B2DEDD8324A +:108ED000FAC6FF881A9A0C99FACBFFFC301CF01FD7 +:108EE0000006310850165008CA2B0000800091D0AF +:108EF000800091DC80028D9CD401202D501A5009F5 +:108F0000301A1AD8FAC9FFF8FAC8FFFCF01F00039C +:108F10002FFD2FEDD802000080028E0C5EFC5EFE5D +:108F20005EFCD703EBCD40C01896F01F00061897E3 +:108F3000C0500C9A300BF01F00040E9CE3CD80C093 +:108F400080009200800091D0D401F01F0002D80A66 +:108F500080014600D401F8CBFFFCF01F0002D80AC4 +:108F6000800145D4780C580C5E0C3008F948004C50 +:108F7000780C580CCFC15EFC580CF9FC10435EFC19 +:108F8000580CF9B80100F9F81A435EFCEBCD40E04B +:108F9000189716961495314CF01F0005F9F71A032F +:108FA000F9F61A04F9F51A02E3CD80E080028F2465 +:108FB000EBCD40E01696149578075807C160580627 +:108FC000C080306A0C9BEECCFFC0F01F000AC0A12D +:108FD0005805C0B0EECCFFFC310A0A9BF01F00051B +:108FE000C0406E075807CEC10E9CE3CD80E0000064 +:108FF0008000917CEBCD4040781820181696991887 +:10900000784B78390C9C5D190C9CF01F0003E3CD64 +:1090100080400000800091E8EBCD4080202D300A98 +:109020001897189B49BCF01F001C300A0E9B49BCC6 +:10903000F01F00196E085808C2201A9CF01F001873 +:109040006E08400A70EC0E993008141C109BF8084A +:109050000C4C490A2FFCF01F00136E2BF6FA010C82 +:10906000580AC1006E08400A712C0E99141C300871 +:1090700048AAF8080C4C109BF01F000A2FEDE3CD16 +:109080008080F6CBFEB80E9CF01F0007CF80CEBBD1 +:10909000800290E4800274008002913080028F543C +:1090A0008002747480028FB0EBCD40C01896580CCB +:1090B000C1407809300899085809C031C0880E9914 +:1090C0007207129CF01F00065807CFA10C9CF01FDE +:1090D00000050C9CF01F0002E3CD80C0800091E8E9 +:1090E00080029018EBCD4080202D18971A9CF01F1D +:1090F000000E6E0A580AC0C1C1087408149B8F087C +:10910000300A0E9CF01F00096E0A580AC06074E90C +:1091100040081039FE9AFFF30E9CF01F00052FED5A +:10912000E3CD808080028F5480028FF480029018FB +:10913000D4013008782AF548010C7829F2FC0104A2 +:10914000F01F0002D8020000800255ACD43120CDBF +:109150001096782814941293E04A00205FBAF0F930 +:109160000160189758295F18169241511448C05051 +:1091700030060C9C2F4DD832354CF01F00621890F1 +:10918000CF80089A049B2ECCF01F005F81D4FAC9CF +:10919000FFE450965083FAC5FFF84DC81AD5303A0F +:1091A000089B049C4DA65086F01F005AE0C8FFFCA7 +:1091B0000A9B5018310A109CF01F0053FACCFFD4C0 +:1091C000F01F0055E0C8FFC0502840BC6E29F2F8DF +:1091D0000150F808000881E86E2AF4FB0150F4F908 +:1091E0000154E06A851FEA1A51EBB739F20A0648C2 +:1091F000301AA599180981FAE1490048306A402CD3 +:10920000069BF01F0041E141004C2FFD6E06580601 +:10921000C2903005C0680C956C0C580CC58018962F +:10922000ECCBFFC0306A069CF01F003CCF516CD8DD +:109230000838C5505805EDF80000EFF80A00EDF8C1 +:109240001000EBF81A006E29F2F8010C0C38F9B88E +:109250000000F3F80A430C9B301A0E9CF01F0030FC +:109260006E066E1859F8E08A00155806C3200C9A4D +:1092700015088F086E28F0F90128ECCBFFC0720C9E +:1092800072F85D180C9B300A0E9CF01F00256E06CC +:109290005806C1F060EA6CE8103AC074C1A872E8E0 +:1092A0001438E089000612966C095809CF9181099B +:1092B0008D006E2C6E18400A401B2FF88F18F8F99D +:1092C00001280096720C72E85D18C54B6E06CCAB97 +:1092D00081068F000E9CF01F0013CECB089A049BD2 +:1092E000ECCCFFECF01F000DCA61310A400BECCC56 +:1092F000FFFCF01F000AC9F1009CF01F000BC3AB7C +:1093000080028F24800091DC8003DB248003DB9CBF +:109310008002B14480028F548000917C80028FF4DF +:1093200080029018800091E8EBCD4080189E78076D +:10933000580BC06116970E9CE3CD80806E075807CE +:10934000CFB06F381638CFB11AD814997C286EDA9E +:10935000F0C8FEC8EECBFFEC1C9CF01F00092FFDEF +:10936000580CF8071700EFF8100EF9F81A0EF80766 +:109370001710F9B80101F9F81A14CDEB8002914CDD +:10938000EBCD40FC1897300CEF4C010C1496129268 +:109390001094EEF50108580BC080169A189B0A9C91 +:1093A000F01F0016EF4C010C58065F13EEFC010C89 +:1093B000580C5F09F3E30008C16158045F18F3E833 +:1093C0000008C0A05803C0800C9A049B0A9CF01FA0 +:1093D000000CEF4C010C580CF9BC00FFF9BC01006B +:1093E000E3CD80FC300A0C9B0A9CF01F00045F094F +:1093F000EF4C010CCE3B000080028FB0800293281E +:109400000000000000000000EBCD4080580CC100BF +:10941000F8F901103008F94801105809C031C08826 +:109420000E997207129CF01F00045807CFA1E3CDDC +:1094300080800000800091E8EBCD40C01897580C68 +:10944000C250F8F801245808C210189B300A491C71 +:10945000F01F0011EEFC0124F01F00103006306AEE +:109460000C9BEF460124EECCFEE4F01F000DEEFC59 +:109470000114F01F000CEF460114EEFC0118580C0B +:10948000C050F01F0008EF460118E3CD80C0000077 +:109490008002996880027400800256EC800091D0AE +:1094A00080028174EBCD40F8205D189716951494D6 +:1094B000F8F601245806C0503FFC2FBDE3CD80F8DC +:1094C000F8FA012817D81AD817C91AD917B81AD80C +:1094D00017A91AD917981AD81789301B1AD9740CDA +:1094E0004C6AF01F0047EEC3FEC81AD60E984C59BE +:1094F000E06A88C7069BEEFC0140F01F0043EF4C7A +:1095000001142F9D580CC6F0EEFC0144580CC0E02D +:109510001AD6069B0E984BB9E06A88C7F01F003A2E +:10952000EF4C01182FFD580CC5E0340CF01F00372C +:109530001896C5B0EEF8012870099909EEF80128CF +:109540003019700A4B2899199928994A99374B185C +:10955000EEF9012C998899599967EEF8012871095B +:1095600099A9EEF80128711999B9F01F002BEF4C59 +:109570000124C3D0314A300B1A9CF01F0028EEF9A9 +:1095800001305804E9F8105FFBF81A03300650293F +:109590001A9A089B50165006EEFC0124F01F00207A +:1095A000306830593FFAEEFC0124149BF01F001D77 +:1095B000306A0A9BEECCFEE4F01F001B301BEEFC71 +:1095C0000124F01F001A301BEEFC0124F01F0018CC +:1095D0000C980E99497A0C9BEEFC0158F01F00166E +:1095E0000C9CC6CB3FECC6AB3FCCC68B0C9CF01F93 +:1095F00000133FDCC63B00008003DBA880023A1A60 +:1096000080029AF08002819C80028F2480029A243A +:10961000800299C48002609C800091D08002581C16 +:1096200080025564800091DC800261D4800261E890 +:109630008002996880027474800091E8EBCD40FC50 +:109640001897F8F801105808C6F0F8F801284CAA45 +:10965000700C301BF01F0049EEF801245808C0A020 +:10966000EEF801284C6A700C301BF01F0044E3CD6B +:1096700080FCEEF801605828CF41EEF80128700C0C +:1096800070295D19587CCED1EEF8016C5818CE9136 +:10969000EEF501105805C410EEC2FEB8EAC3FFFC97 +:1096A000300A069BEEFC0108F01F0036306A189461 +:1096B000069B049CF01F0034C0605804C3706948C6 +:1096C0005808C341EB3800091AD8EB3800081AD8FB +:1096D0000BF81AD80BE8EEF601281AD80BD91AD9CC +:1096E0000BC84AAA1AD8301B6C0CF01F00242FADEF +:1096F0005804C090EEF90128E8CAFFFC069B720CE2 +:1097000072E85D186A080A9CEF480110F01F0020FB +:10971000EEF501105805CC31EEF8012849DA700C4D +:10972000301BF01F0016E3CD80FCEB3800091AD87F +:10973000EB380008EEF601281AD80BF81AD80BE817 +:109740001AD80BD91AD90BC8493A1AD8301B6C0C45 +:10975000F01F000A6A08069BEEFA0134EF48011078 +:109760000E9CF01F000E0A9CF01F00092FADE3CDE8 +:1097700080FC00008003DBEC80023A1A8003DC14DA +:1097800080028FB08000917C8003DCA0800091E893 +:109790008003DCFC8003DC4C800294A4EBCD40F819 +:1097A0001695189414931297F8FB0134580BC05077 +:1097B000F6F801485808C5D15807C4C0E8F60110AA +:1097C0005806C4A03007C0680C976C0C580CC440F5 +:1097D0001896306A0A9BECCCFFFCF01F002CCF518E +:1097E0005807EDF81000EFF81A00EDF80000E9F85E +:1097F0000A44E04303E7E08A003BE8FA0110580A14 +:10980000C4006C3B74381638C065C3B8723816385B +:10981000C054129A74095809CFA18D0995061AD31C +:109820000BD80B8CE8F601281AD80BC91AD90BB83B +:109830001AD80BA91AD90B98495A1AD8301B1ADC16 +:109840006C0CF01F0014089CF01F00132F9DE3CD3B +:1098500080F8E3CD80F8310CF01F00101896C0F0AE +:10986000306A0A9BECCCFFFCF01F000D8D33CC6BF3 +:109870000A9AF8FC0108F01F000BC9FBE3CD80F841 +:109880008D0AE9460110CCCB8000917C8003DD2459 +:1098900080023A1A8002963C80028F24800091DC7C +:1098A00080029328EBCD40F8208D169414971895DC +:1098B000F8F801345808C470F01F0027EEC6000104 +:1098C000C426E068009C1A93EC080248E8080007E8 +:1098D000EAC4FEB8C0682016EEC7009C5806C3351F +:1098E000EAF901346EAA7258103ACF61724BEECC8D +:1098F000FFFAF01F001ACF01306A089B0E9CF01F80 +:109900000017CEA0EEFB0080580BCE601A9AEECC6A +:10991000FFA8F01F0013CE01189A0E9BEAFC010865 +:10992000F01F0010C13079485808CD604048EDB8AC +:109930000000CD213019E06A03E80E9B0A9CF01F5D +:10994000000ACCAB2F8DE3CD80F84048F3D8C0019E +:10995000CF3B0000800294088000917C8002BD68AB +:1099600080028FB08002979CEBCD4060F9380121D6 +:10997000F8F501281AD8F93901201AD9F938011F48 +:109980001AD8F939011E1AD9F938011D1AD8F9392E +:10999000011C489A1AD9302B18966A0CF01F000740 +:1099A0000C9CF01F00070C9CF01F00062FADE3CDB0 +:1099B000806000008003DD6C80023A1A80029438D7 +:1099C0008002963CEBCD40E0201D1897F8F801147A +:1099D0005808C0613FF60C9C2FFDE3CD80E0F8F8FD +:1099E0000128300C5C791ADC5C5B700C70D6FAC80C +:1099F000FFFC5D162FFD1895580CCED01899400825 +:109A0000E06A88C7EECBFEE4EEFC0114F01F000410 +:109A100018960A9CF01F0003CDFB000080028154C1 +:109A2000800091E8EBCD40E0208D14971896580BFC +:109A3000C2614A781AD8EEF60128EF3801211AD807 +:109A4000EF3901201AD9EF38011F1AD8EF39011E5A +:109A50001AD9EF38011D1AD8EF39011C49DA1AD981 +:109A6000302B6C0CF01F001C0E9CF01F001C0E9C79 +:109A7000F01F001B2F9D2F8DE3CD80E01A95320A39 +:109A80001A9BF01F0018C1211A9B320AEEF801340C +:109A90008F8A1AD8EEC9FEE4EEC8FEC8EEFC0108B3 +:109AA000F01F001149182FFDCC6B0C9C310A1A9B3A +:109AB000F01F000CC090EEF8012848DA700C302B33 +:109AC000F01F0005CB7B1A9B310ACE1B8003AD2C07 +:109AD0008003DE1880023A1A800294388002963C95 +:109AE000800257CC8002914C8003DDB48003DDCC32 +:109AF000EBCD40F81897169514931294F8F80124BA +:109B00005808C090F8C6FEE4306A48BB0C9CF01FB1 +:109B1000000BC031E3CD80F80C9C306A0A9BF01F2B +:109B20000007CF910899069A0A9BEEFC0124F01FCA +:109B30000004CF1B800294008000917C800261FCB5 +:109B4000EBCD40F8FACD01001293109418961697B9 +:109B5000149530081A99F2080B082FF8E048010014 +:109B6000CFB1300E1A9C1C9BEC0B0709198AFC0A1A +:109B700000081208FAC9FF00FDD8C0081C09F33814 +:109B8000FF0018C8F36AFF002FFBFAC8FF000E3B66 +:109B9000F9BB0200103CCE915805C4C0300E1C9792 +:109BA0001C9CF8C8FFFFFACAFF00F9D8C008180AC1 +:109BB000F53BFF00F60E0008FAC9FF00FDD8C0080B +:109BC0001C09F338FF00F568FF00F36BFF002FF767 +:109BD0000E35FE9BFFE85804C2A006963007F8C871 +:109BE000FFFFFACAFF00F9D8C008180AF539FF00CC +:109BF000F20E0008FACBFF00FDD8C0081C0BF738A6 +:109C0000FF00F568FF00F769FF00F538FF00100955 +:109C1000F3D9C008FACAFF00120A0D89F538FF000F +:109C200012580CC82FF70E34FE9BFFDB2C0DE3CD32 +:109C300080F80A9E0A9CCD0BD401129E16981899A2 +:109C40001C9B149C300AF01F0002D80280029B402B +:109C500000000000D431FACD0180340AFAC4FEC0FD +:109C6000510C089CF01F04BF688A516A689950A97A +:109C700068A8509868B65086684568216830416683 +:109C800050E5685250D2686A50CA687950B968087D +:109C90005158E3E8200868D50C580A586812F00AB1 +:109CA000150150F2F5E813FA517A68E868F640E5D4 +:109CB00040A9105940980C580A5802580059F00A07 +:109CC00015010459F5E813FAF20215014178E5E9A6 +:109CD00013F2519A518240C54089105968C80458FE +:109CE00040E20A58045840D6F00A15010C59F5E82C +:109CF00013FA005951AA419840B640D5416240CA72 +:109D0000F2071501EFE913F768D9105968E80E5802 +:109D1000045814580C590A59F0051501F20615019A +:109D2000EBE813F5EDE913F640B851C551B641A281 +:109D300068F940AA416504591459105941780C58E2 +:109D400040960C580A58F2021501F00A1501E5E98F +:109D500013F2F5E813FA41C851EA51D2408640A502 +:109D6000409A418910594198045868C204581458BF +:109D70000C590A59F0051501F2061501EBE813F527 +:109D8000EDE913F6408851F6520541E268DA68C5FC +:109D9000EFE220091459105941A80C5868E60C58F4 +:109DA0000A58F2021501F00A1501E5E913F2F5E887 +:109DB00013FA52124208522A41B968F668D568EA85 +:109DC000105941C804584172045814580C590A5982 +:109DD000F0051501F2061501EBE813F5EDE913F6B0 +:109DE0005245523668F84222418A417541D9045998 +:109DF0001459105941E80C5841960C580A58F2026F +:109E00001501F00A1501E5E913F2F5E813FA4248E5 +:109E1000418641A5525241F9105942080E59045841 +:109E20000C5941920A580458526AF20A1501F5E990 +:109E300013FAF0091501F3E813F9426841B641C578 +:109E400041A2527A52894219105942280C59145889 +:109E50000E590A580458F20A1501F5E913FAF009E7 +:109E60001501529AF3E813F9428852A941D641B537 +:109E700041E2423910594248145841CA0458145812 +:109E80000C5941FA0A59F0051501F2061501EBE8E3 +:109E900013F5EDE913F641D852C542A241E552B699 +:109EA00042590459145942CA105942680C58420682 +:109EB0000C580A5841F6F20E1501F0021501FDE9A1 +:109EC00013FEE5E813F2421942781458420A42257B +:109ED000125842890C581C59F00615010A59EDE830 +:109EE00013F61459F20A1501F5E913FA0C951493B7 +:109EF000423952E652FA4216424A52D24298045825 +:109F0000125842A90C580A5942261459F00A150150 +:109F1000F5E813FA0C59530A1496F2081501425A3F +:109F2000F1E913F84239109C531842B806581458F6 +:109F3000426A125842C90C591459424A1459F00A3B +:109F40001501F5E813FAF2081501F1E913F8109B71 +:109F500053384278FDEC20091059425810595019D5 +:109F60004289E5EA200812584269125840195008FF +:109F70004018A178F1E913F8400953484008A17846 +:109F8000F1E913F853584298EBEB20091059427845 +:109F9000105942A850194349E7E92009105942884D +:109FA000105940185009532A4019A179F3E813F9C0 +:109FB000400853694009A179F3E813F953794358EC +:109FC000EDE8200942B810594298105942C850197A +:109FD0004369F9E92009105942A81059401850095D +:109FE0004019A179F3E813F9400853894009A17990 +:109FF000F3E813F943785399F5E8200942B81C595E +:10A00000105950194389F7E92009129842C9045898 +:10A010001258401950084018A178F1E913F8400986 +:10A0200053A84008A178F1E913F8434953B843987D +:10A0300010590A591C59501943A94358125840192C +:10A04000065804584012A172E5E913F253C2F00217 +:10A050001501E5E813F243B84369105943780C59E8 +:10A060000A5943C50A581858065853D2F202150126 +:10A07000E5E913F2F0091501F3E813F943D853F9B0 +:10A08000438910594398145904580C5916581858B4 +:10A0900053E243F54342F20C1501F0061501F9E9CC +:10A0A00013FCEDE813F643A943B80A5918580459AC +:10A0B0001459435A145816585406436A4402F20677 +:10A0C0001501F0051501EDE913F6EBE813F543482A +:10A0D00054255416435543C904591459105943D8AB +:10A0E000F20215010C58E5E913F2437654320C588C +:10A0F0000A58F00A1501F5E813FA544A890A442966 +:10A1000043864365437A43E8125843F90C5804598F +:10A110000A584392F0061501EDE813F654568916D5 +:10A1200004591459F2051501EBE913F55465892515 +:10A13000444243AA4389F9E2200814581258F00215 +:10A140001501E5E813F25472439544090C5943B6DE +:10A1500089320C590A59F20A1501F5E913FA548AA1 +:10A16000894A43C6446943A5441812580C580A58F2 +:10A17000F0061501EDE813F6549643BA4429045944 +:10A1800043D2895604591459F2051501EBE913F528 +:10A1900054A58965448243EA43C944380458145895 +:10A1A0001258F0021501E5E813F254B243D54449C0 +:10A1B0000C5943F689720C5944080A59446A045AE6 +:10A1C000105A0C5AF2061501EDE913F654C6447BF9 +:10A1D00089860C5BF4061501EDEA13F654E6441586 +:10A1E00044A243E9445889A60A5B045818581258F7 +:10A1F000F0051501EBE813F554D58995185BF602C7 +:10A200001501E5EB13F254F289B2444A4489449BA8 +:10A210000A590C5B4405442644A804581458F3E634 +:10A22000200A0C580A5A5028E0657999EA155A8292 +:10A23000504A410644325116441AEE050009F7E22D +:10A2400020081458E062EBA1EA126ED95038507918 +:10A25000040E0C99506EE068BCDCEA188F1B0C9A57 +:10A26000100C2F8A505C512A1306511941087403AF +:10A27000720C2F485138410A2F0A514A700A41483E +:10A28000700941580A08F0090009EC081505F1E6C3 +:10A2900013B8F2080008F5E3200918691459F00909 +:10A2A000000740F80A08F00A0009F80B151EF7EC41 +:10A2B000122BF7E320080C680658F2080008EE0994 +:10A2C0001505F3E713B9EC0A151EF009000EF5E6C3 +:10A2D000122AFC091505F7EA2008F3EE13B9EFE896 +:10A2E000000816580A01EE0C151E0601F9E7122C9B +:10A2F0001001F9EA200812011C68E209150514583A +:10A30000F3E113B90A001600100040E812000A0831 +:10A31000F00A0009FC0B151EF7EE122BF7EC2008D3 +:10A3200002681858F2080008E0091505F3E013B9AF +:10A33000F009000640D80A08F00C0009E20A151ED0 +:10A34000F5E1122AF5EB200800681658F20800081B +:10A35000EC091505F3E613B9F009000E40C80A0828 +:10A36000F00B0009E00C151EF9E0122CF9EA2008A8 +:10A370000C681458F2080008FC091505F3EE13B92F +:10A38000F009000340B80A08F00A0009EC0B151E9A +:10A39000F7E6122BF7EC20081C681858F2080008A2 +:10A3A000E6091505F3E313B9F009000641680A0848 +:10A3B000F00C0009FC0A151EF5EE122AF5EB200838 +:10A3C00006681658F2080008EC091505F3E613B9FB +:10A3D000F009000E40A90A091609E60C151EF9E35A +:10A3E000122CF9EA20080C681458F2080008FC093D +:10A3F0001505F3EE13B9F009000340980A08F00AB6 +:10A400000009EC0B151EF7E6122BF7EC20081C6870 +:10A410001858F2080008E6091505F3E313B9F00926 +:10A42000000640890A091809FC0A151EF5EE122AD1 +:10A43000F5EB200806681658F2080008EC09150527 +:10A44000F3E613B9F009000E68C80A08F00B00091A +:10A45000E60C151EF9E3122CF9EA20080C681458D2 +:10A46000F2080008FC091505F3EE13B9F009000124 +:10A4700068D90A091409EC0B151EF7E6122BF7EC44 +:10A4800020081C681858F2080006E2091505F3E1D7 +:10A4900013B968E8EC0900030A08F00C0009FC0A8B +:10A4A000151EF5EE122AF5EB200802681658F20880 +:10A4B0000008E6091505F3E313B9F009000E68F981 +:10A4C0000A091609E20C151EF9E1122CF9EA200816 +:10A4D00006681458F208000BFC091505F3EE13B9D1 +:10A4E0004178F60900000A08F00A0009E606151E80 +:10A4F000EDE31226EDEC20081C681858F208000A5B +:10A50000E0091505F3E013B9F409000341890A09CC +:10A510001809FC0A151EF5EE122AF5E62008006857 +:10A520000C58F208000CE6091505F3E313B941983D +:10A53000F80900010A08F0060009E00B151EF7E013 +:10A54000122BF7EA200806681458F2080008E209FE +:10A550001505F3E113B94077F009000E1407FC0963 +:10A560001505E60A151EF3EE13B9F5E3122AF5EB0D +:10A57000200802681658EE080008F009000341A8F8 +:10A580000408F00B0009E20C151EF9E1122CF9EA9F +:10A5900020081C58F2080008E6091505F3E313B972 +:10A5A000F009000541B904091409FC0B151EF7EE6A +:10A5B000122BF7EC20080658F2080008EA091505E6 +:10A5C000F3E513B9F009000641C80408F00C0009CE +:10A5D000E60A151EF5E3122AF5EB20080A58F208E0 +:10A5E0000008EC091505F3E613B9F009000E41D98E +:10A5F00004091609EA0C151EF9E5122CF9EA2008DF +:10A600000C58F2080008FC091505F3EE13B9F0091F +:10A61000000541E80408F00A0009EC0B151EF7E6F6 +:10A62000122BF7EC20081C58F2080008EA0915055F +:10A63000F3E513B9F009000641F904091809FC0A09 +:10A64000151EF5EE122AF5EB20080A58F20800084C +:10A65000EC091505F3E613B9F009000E42080408E9 +:10A66000F00B0009EA0C151EF9E5122CF9EA200896 +:10A670000C58F2080008FC091505F3EE13B9F009AF +:10A680000005421904091409EC0B151EF7E6122BFC +:10A69000F7EC20081C58F2080008EA091505F3E554 +:10A6A00013B9F009000642280408F00C0009FC0A5E +:10A6B000151EF5EE122AF5EB20080A58F2080008DC +:10A6C000EC091505F3E613B9F009000E4239040947 +:10A6D0001609EA0C151EF9E5122CF9EA20080C58A7 +:10A6E000F2080008FC091505F3EE13B9F00900059E +:10A6F00042480408F00A0009EC0B151EF7E6122B7D +:10A70000F7EC20081C58F2080008EA091505F3E5E3 +:10A7100013B9F0090006425904091809FC0A151E6C +:10A72000F5EE122AF5EB20080A58F2080008EC09A9 +:10A730001505F3E613B9F009000E42680408F00BA2 +:10A740000009EA0C151EF9E5122CF9EA20080C584C +:10A75000F2080008FC091505F3EE13B9F00900032F +:10A76000427904091409EC0B151EF7E6122BF7ECDD +:10A7700020081C58F2080008E6091505F3E313B990 +:10A78000F0090005428904091809FC0A151EF5EEB6 +:10A79000122AF5EB20080658F2080008EA09150508 +:10A7A000F3E513B9F009000E429904091609E60C05 +:10A7B000151EF9E3122CF9EA20080A58F208000BDA +:10A7C000FC091505F3EE13B9F609000042A90409C6 +:10A7D0001409EA06151EEDE51226EDEC20081C58BA +:10A7E000F208000AE0091505F3E013B9F4090003C3 +:10A7F00042B9FC0A151E0409F5EE122A1809F5E6FD +:10A80000200800584065F208000C1405E6091505FB +:10A81000E00B151EF3E313B9F7E0122BF809000162 +:10A82000F7EA200AE2081505065AF1E113B842C911 +:10A8300004090C091409E60A151EF208000EF5E3D6 +:10A84000122AF5EB20080258EA080008E066BCDC92 +:10A85000EA168F1BFC091505F3EE13B9F009000089 +:10A8600042D80C08E20C151EF00B0002F9E1122C84 +:10A87000FDEC0008FDEC100914691049E00815050D +:10A88000F1E013B8E4090009F208000242E80C08FC +:10A89000FC0B151EF00A0005F7EE122BE1EB000889 +:10A8A000E1EB100918691049E4081505EA090009E7 +:10A8B000F1E213B8E00A151EF2080005F5E0122ACD +:10A8C00042F9E5EA00080C09F20C0003E5EA100978 +:10A8D00016691049EA081505F1E513B8E6090009FB +:10A8E000F208000343080C08E40C151EF00B0006E8 +:10A8F000F9E2122CEBEC0008EBEC1009146910499A +:10A90000E6081505EC090009F1E313B8EA0B151E7A +:10A91000F2080006F7E5122B4319E065BCDCEA15E6 +:10A920008F1BE7EB00080A09F20A000AE7EB10099F +:10A9300018691049EC081505F1E613B8F409000987 +:10A94000F208000243280A08E60A151EF00C000C63 +:10A95000F5E3122AEDEA0008EDEA1009166910493C +:10A96000E4081505F8090009F1E213B8EC0C151E0E +:10A97000F208000EF9E6122C4339E5EC00080A094A +:10A98000F20B000BE5EC100914691049FC081505E1 +:10A99000120BF1EE13B84349F6080005E40B151E3F +:10A9A000F7E2122BE062BCDCEA128F1BFDEB000821 +:10A9B0000409F20A000AFDEB100918691049EA08B7 +:10A9C0001505F1E513B8F4090009F208000643582B +:10A9D0000408FC0A151EF00C000CF5EE122AEBEA36 +:10A9E0000008EBEA100916691049EC081505F8098A +:10A9F0000009F1E613B8EA0C151EF208000EF9E59D +:10AA0000122C4369EDEC00080409F20B000BEDEC8D +:10AA1000100914691049FC081505F1EE13B8F60980 +:10AA20000009F208000543780408EC0B151EF00A33 +:10AA3000000AF7E6122BFDEB0008FDEB1009186980 +:10AA40001049EA081505F4090009F1E513B8FC0AF4 +:10AA5000151EF2080006F5EE122A4389EBEA0008FB +:10AA60000409F20C000CEBEA100916691049EC0815 +:10AA70001505F1E613B8F8090009F208000E43982D +:10AA80000408EA0C151EF00B000BF9E5122CEDEC96 +:10AA90000008EDEC100914691049FC081505F609C9 +:10AAA0000009F1EE13B8EC0B151EF2080005F7E6ED +:10AAB000122B43A9FDEB00080409F20A000AFDEB82 +:10AAC000100918691049EA081505F1E513B8F409E9 +:10AAD0000009F208000643B80408FC0A151EF00C31 +:10AAE000000CF5EE122AEBEA0008EBEA10091669F1 +:10AAF0001049EC081505F8090009F1E613B8EA0C4D +:10AB0000151EF208000EF9E5122C43C9EDEC000801 +:10AB10000409F20B000BEDEC100914691049FC0854 +:10AB20001505F1EE13B8F6090009F208000343D841 +:10AB30000408EC0B151EF00A000AF7E6122BFDEBD9 +:10AB40000008FDEB100918691049F4090009E6082E +:10AB50001505F1E313B8F208000543E90409FC0AFE +:10AB6000151EF20C000CF5EE122AE7EA0008E7EADF +:10AB7000100916691049F8090009EA081505F1E5F8 +:10AB800013B8F208000E43F90409E60C151EF20B87 +:10AB9000000BF9E3122CEBEC0008EBEC1009146944 +:10ABA00010494057FC0815051407F1EE13B8F609D3 +:10ABB000000AEA0B151EF7E5122BFDEB0009F4085D +:10ABC0000003FDEB1008E60A15051868F5E313BA53 +:10ABD0001248EE080009F20A00054409E06AC1D6ED +:10ABE000EA1ACA6214091809FC06151EEDEE1226AF +:10ABF000EDEB20080658F2080008EA091505F3E510 +:10AC000013B9F009000A4419E068C1D6EA18CA620B +:10AC100010091609E60C151EF9E3122CF9E62008B6 +:10AC20000A58F2080008F4091505F3EA13B9EA0B0B +:10AC3000151EF0090003F7E5122B4429E065C1D683 +:10AC4000EA15CA620A090C09F7EC20081458F20840 +:10AC50000008E6091505F3E313B9F009000EFC0935 +:10AC60001505F3EE13B9F406151EEDEA1226443A63 +:10AC7000EDEB20080A0A0658180A100A120A44497D +:10AC80000A091609E60C151EF9E3122CF9E620084C +:10AC90001C58F2080008F4091505F3EA13B9FC057D +:10ACA000151EF0090003EBEE1225E6091505EBEC85 +:10ACB0002008F3E313B91458E062C1D6EA12CA625D +:10ACC000445B040B0C0BF406151E100BEDEA122668 +:10ACD000120BEDE52008F60915050658F3EB13B93C +:10ACE000446A040A180A100A4478F409000E040899 +:10ACF000F0050009E60A151EF5E3122AF5E620081C +:10AD00001658F2080008FC091505F3EE13B9F0090E +:10AD10000005448904090C09F60C151EF9EB122CE8 +:10AD2000F9EA20081C58F2080008EA091505F3E5BD +:10AD300013B9F009000344980408F00A0009FC0B59 +:10AD4000151EF7EE122BF7EC20080A58F20800083F +:10AD5000E6091505F3E313B9F009000E44A9040947 +:10AD60001809EA06151EEDE51226EDEB2008065837 +:10AD7000F2080008FC091505F3EE13B9F009000507 +:10AD8000EA091505F3E513B944BAE60C151E040AE1 +:10AD9000F9E3122C160AF9E620081C58100A120AC8 +:10ADA00044C904090C09FC0B151EF7EE122BF7EC35 +:10ADB00020080A58F2080002F4091505F3EA13B94D +:10ADC00044D8E409000EE069C1D6EA19CA62120843 +:10ADD000EA06151EF00C0009EDE51226EDEB200841 +:10ADE0001458F2080008FC091505F3EE13B9F00930 +:10ADF000000CE068C1D6EA18CA62F405151EF8090D +:10AE00001505EBEA1225F3EC13B944EA100AEBE658 +:10AE10002008160A1C58100AFC02151EF40900012D +:10AE2000E5EE1222E06AC1D6EA1ACA62E5E5200818 +:10AE3000E20915051858F3E113B944FB140B404A15 +:10AE40000C0BA17A100B44B8F609000E4049F5E945 +:10AE500013FA14584459F1E9200B4438E069C1D67B +:10AE6000EA19CA6289CAF7E820074108F806151EE0 +:10AE7000120AEDEC1226700CEDE22008120C0258BA +:10AE8000FC091505F3EE13B90A0AE203151E100AB0 +:10AE9000E7E11223120AE7E62008E069C1D6EA19C1 +:10AEA000CA621C5840354030A170E1E513F0E0095A +:10AEB000000BF4091505040BF3EA13B9100B402835 +:10AEC0004021120BE065C1D6EA15CA62A171E3E820 +:10AED00013F1E2050008F0060009FC02151EE5EE7C +:10AEE0001222E5E320081458F2080008F6091505B7 +:10AEF000F3EB13B9F406151EF009000EEDEA122665 +:10AF0000EE051501410AEBE713F5EDE220080A0C06 +:10AF10001658060CFC091505100CF3EE13B9120CAB +:10AF2000950C411972081C089308F609151E412A50 +:10AF3000F3EB1229740812089508413870090C09BE +:10AF4000910989D089E189F541466C080408089C7B +:10AF50008D08340A300BF01F00042A0DD83200008F +:10AF6000800091DC800091D0EBCD40F878581494AB +:10AF7000A37AF40800099959123AF9F98006F9F907 +:10AF8000B006F7B90BFFF9F9BA06FDD8C066E808B4 +:10AF9000161DF2080008996818951693E80E000926 +:10AFA000E049003FE08B000F3006FCCCFFE4E606F2 +:10AFB000000BEA0C000CE806010AF01F0014E3CDB8 +:10AFC00080F8FC061140FCCCFFE40C9AEA0C000C63 +:10AFD000F01F000EEACBFFE40A9CF01F000DECC846 +:10AFE000FFC11034E088000FE60600070E9B0A9CA4 +:10AFF0002C07F01F00072C06ECC8FFC11034FE9B85 +:10B00000FFF7300ECD3B0000800091DC80029C54A5 +:10B01000D421202D16961895300B1A94583BF9B868 +:10B020000B14F9B80818F60911FFEC08030AF3D954 +:10B03000C002A379F4090A4AE80B0B0A2FFB588BCC +:10B04000CEE1301A49EBC038301A49EB0C9CF01FA6 +:10B05000001E6C58E21801F8E04801C0CF61308A48 +:10B060001A9B0C9CF01F00183007EE081602EE0920 +:10B0700011FFEC08032AF3D9C002A379F4090A4AA4 +:10B08000EA070B0A2FF75947CF11300B340AECCCE3 +:10B09000FFE4F01F000E0E9A300B0C9CF01F000B0B +:10B0A000ECCCFFEC308A300BF01F00081A9C308A81 +:10B0B000300BF01F00062FEDD82200008003DE5871 +:10B0C00080029C508002AF68800091D0EBCD40FCA4 +:10B0D000217DE0682301EA186745E06EAB89EA1E2E +:10B0E000EFCD5008E068DCFEEA1898BA3007501E31 +:10B0F0005028E06E5476EA1E1032E068E1F0EA185B +:10B10000C3D250675057503E504818931292580C73 +:10B11000C140149416951A962FF7090A0B0B1A9C26 +:10B12000F01F00070E33FE9BFFF91A9B049CF01FD3 +:10B1300000052E9DE3CD80FC1A96CF8B8002AF6870 +:10B140008002B010D431FACD008C501C500B1493F7 +:10B150001292109142C0585AE08B0056E04B0040CA +:10B16000E08B0054FAC4FFF8340A300B089CF01F3F +:10B17000002E400A401B089C0896F01F002CFAC5C0 +:10B18000FFB808970D88EC1800360CC80A36CFB106 +:10B190003408518451285803C110FACCFF9CFACBD3 +:10B1A000FFB4300AE60E1502E40A030818A8E20A02 +:10B1B000030916A92FCA1C3ACF81E6CCFFFF0099DC +:10B1C0000A9AFAC3FFA0069BF01F0019340A300B3D +:10B1D000089CF01F0015400A401B089CF01F00133C +:10B1E0000F88EC18005C0EC80C37CFB1314C340816 +:10B1F000513C5184519000990A9A069B5128302C59 +:10B20000F01F000B2DDDD832FAC6FF881A9A0C9970 +:10B21000FACBFFFC301CF01F0006314850165008D6 +:10B22000CA2B0000800091D0800091DC8002B0CC5D +:10B23000D401202D501A5009301A1AD8FAC9FFF833 +:10B24000FAC8FFFCF01F00032FFD2FEDD80200000D +:10B250008002B144D43121AD5009502B501A1892BC +:10B2600042395809C6D0504850593008FAC7FFAC87 +:10B270005038FAC3FFD4FAC0FFC0FAC4FFE8049CF8 +:10B28000F01F003140382FF850381AD34038518819 +:10B2900040285168FAC8FF98519830484046517884 +:10B2A000B986FB380013FAC9FFA0FB68006B189B36 +:10B2B0000E98FB66006840454046302A1891B185DB +:10B2C000049CFB650069A986FB66006AF01F001FED +:10B2D000314A069B009CF01F001E2FFD40085818A5 +:10B2E000E08A001C301608983149069A029B049C9B +:10B2F000F01F0018314A089B069CF01F0015009AA9 +:10B30000089B17381589125814C80E3ACFB12FF67A +:10B3100040080C38FE99FFE940560C985946F9B69A +:10B320000B140C180C9A5058009B404CF01F00084E +:10B3300040585808C05040480C085048CA1B2E6D51 +:10B34000D8320000800091B88002B144800091DCC6 +:10B350008002B230D43120EDFACEFFA4109530082F +:10B3600018927C14149716911296FB680036FB68AD +:10B3700000377C00149CF01F00275804C3003018CD +:10B38000FAC9FFC9508850685097FAC8FFCA505C84 +:10B3900050B6507550A950C85934E0880023300782 +:10B3A000FAC3FFECFAC6FFDCC088FB680036E8078A +:10B3B00001055935E088001CE00700080C991AD8EF +:10B3C0002EC70698304A029B049CF01F00132FFDE5 +:10B3D000FB3800362FF80E34FE9BFFE92F2DD832B4 +:10B3E00008953007FAC3FFECFAC6FFDC0C99069803 +:10B3F0001A96049C1AD6029B304AF01F00070A9A3C +:10B400000C9BE007000CF01F00052FFD2F2DD832FC +:10B41000800091B88002B144800091DC00000000FF +:10B4200000000000EBCD4080129E1097584CC26087 +:10B43000E08A0013588CC140590CC101590B5F18A8 +:10B4400058FA5FA91248C0A130689D083039300C05 +:10B450008F09E3CD8080582CC1E0E3CFC080E04B62 +:10B4600000205F1859FA5FA91248CF8130689D0803 +:10B470003029300C8F09E3CD808058DB5F1858CA23 +:10B480005FA91248CEB130099D093018129C8F086F +:10B49000E3CD8080585B5F18584A5FA91248CF40BF +:10B4A000E3CFC080580C5E0CF8F8010C5808F9B8CE +:10B4B0000100F9F81A435EFC580CF9FB1A4C5EFCCB +:10B4C000580CF9FA1A51F9FB1A505EFC580CF9FBAA +:10B4D0001A415EFC580CC080586BE08800035EFD8A +:10B4E0004928F00B032F5EFEF94A016C5EFDF94A14 +:10B4F00001685EFDF94A01645EFDF94A01605EFD86 +:10B50000580ACF20F94A01585EFDF4C80001E0480E +:10B510000063FE9BFFEAF94A01545EFD580ACE40E3 +:10B52000F94A01505EFD00008003DE5CEBCD40E097 +:10B53000189716951496580CC130F8FC0180F01F2E +:10B54000001158055F0858065F091248C0B030085E +:10B55000EF480188EF480180109CE3CD80E0E3CF05 +:10B56000C0E00C9CF01F0008EF4C0180CF900A9BBC +:10B570000C9AF01F0006300CEF460188E3CD80E006 +:10B58000800091E880009200800091DCEBCD40E0EB +:10B59000189716951496580CC130F8FC017CF01FD2 +:10B5A000001158055F0858065F091248C0B03008FE +:10B5B000EF480184EF48017C109CE3CD80E0E3CFAD +:10B5C000C0E00C9CF01F0008EF4C017CCF900A9B60 +:10B5D0000C9AF01F0006300CEF460184E3CD80E0AA +:10B5E000800091E880009200800091DCEBCD40E08B +:10B5F000189716951496580CC130F8FC0174F01F7A +:10B60000001158055F0858065F091248C0B030089D +:10B61000EF480178EF480174109CE3CD80E0E3CF60 +:10B62000C0E00C9CF01F0008EF4C0174CF900A9B07 +:10B630000C9AF01F0006300CEF460178E3CD80E055 +:10B64000800091E880009200800091DCEBCD40FE0C +:10B65000189716961493580CC031E3CFC0FE7409A6 +:10B66000F8F801605828C5E0F8F1016CF8F50168B8 +:10B67000F8F201645979FE98FFF23DD8304AB68855 +:10B68000ECCCFFFEFEFB0238F01F008E30083019B4 +:10B69000ACF8ACE9ECC4FFF85905E08000A158858E +:10B6A000E08000AA5845E08100BC0A9AFEFB02181F +:10B6B000089CF01F00843018A8C8E8C9FFFB3008B8 +:10B6C000B288E8C5FFFA5902E08000905882E08114 +:10B6D000009F304A4FDB0A9CF01F007A3018AAC83E +:10B6E000EAC9FFFB3008B2882FA55811E080008A14 +:10B6F0005821E08100A5304A4F5B0A9CF01F007181 +:10B70000EAC9FFFCEC0811FE1208AC98F206010C25 +:10B71000CA56870CEEF501745805E08000C1E3CFEE +:10B7200080FEF8F8010CF8F2016C5808F9B801280D +:10B73000F9B80016F8FA0168F8F401641039C8E3A2 +:10B7400033083009B688B6B93018B6A8F6C5FFFC7C +:10B75000590AC6F0588AE0800082584AE081009772 +:10B760004DCB0A9CF01F00573018AAC8EAC9FFFB4E +:10B770003008B2882FA55904C6B05884E081007EF5 +:10B78000304A4D5B0A9CF01F004F3018AAC8EAC926 +:10B79000FFFB3008B2882FA55812C661304A4CFB17 +:10B7A0000A9CF01F0048EAC8FFFC300AB08AB09A31 +:10B7B000EAC9FFFAEEF8010C5808CA503018B288EE +:10B7C000EAC9FFF9EACCFFF8B28A310AEEFB010CB4 +:10B7D0002FCBF01F003CEAC9FFE8C95B304A4C0B95 +:10B7E000089CF01F0038C68B304A4BDB0A9CF01FC8 +:10B7F0000035C75B304A4B5B089CF01F0032C5CB5D +:10B80000304A4B8B0A9CF01F002FC7BB5812FE9189 +:10B81000FF26304A4B4B0A9CF01F002AC60B5825C6 +:10B82000FE91FF1D304A4B1B089CF01F0026C44BA5 +:10B83000304A4AFB0A9CF01F0023C97B5901FE9144 +:10B84000FF0E304A4ABB0A9CF01F001EC5AB304AAF +:10B850004A7B0A9CF01F001BC99B304A49EB0A9C9B +:10B86000F01F0018C82B5822FE91FEF9304A4A2BCF +:10B870000A9CF01F0014C98B5814FE91FEF0304A48 +:10B8800049EB0A9CF01F000FC81B582AFE91FEE7E7 +:10B89000304A49BB0A9CF01F000BC67BF01F001901 +:10B8A000EF4C0174FE90FEDB0C9B660AF01F000556 +:10B8B00066080A9CEF480178E3CD80FE8003DE989D +:10B8C000800091DC8003DEA08003DE8C8003DE7CC0 +:10B8D0008003DE888003DE808003E1EC8003E1E406 +:10B8E0008003DE9C8003DEA48003DE948003DEB44C +:10B8F0008003DEB08003E1E88003DEA88003DE84FD +:10B9000080009200D401580CC060F8CCFEC8306AA8 +:10B91000F01F0002D8020000800091DCD4011898CA +:10B92000580CC040918AF01F0002D802800091DCC0 +:10B93000EBCD40F8208D189416971493F6C6FFF0BF +:10B94000F8F501685885C2E0E8F801645818C1604C +:10B950006EC8E8F901286E0B1AD81AD66E2849CAA3 +:10B960001AD81AD3720C72666E186E395D162FCD06 +:10B97000580CC1552F8DE3CF80F86EC9E8FA012825 +:10B980006E0B1AD91AD66E291AD91AD3740C74668A +:10B990006E3948FA5D162FCD580CCED42F8DE3CFDB +:10B9A000C0F80C9B310A1A9CF01F000A0A9AEECBD1 +:10B9B000FFD8FACCFFF0F01F00070A9AEECBFFE0A9 +:10B9C000FACCFFE81A96F01F0003CBFB80039C38EB +:10B9D000800091DCD401580CC070F94B0134F8FCA4 +:10B9E0000108F01F0002D80280028F64D401580CB5 +:10B9F000C110F8F8010C5808C08070DAF0CBFFECE9 +:10BA0000998AF01F0005D802320A109B998AF01F0C +:10BA10000003D802800091DC800091D0EBCD408003 +:10BA20001897F01F000AEEF801287029700C5D19B4 +:10BA3000585CEFF80057F9B90001F1D9E008EFF8C8 +:10BA40000A57E3CD8080000080029438EBCD40C0DF +:10BA500018971696580CC190306AF8CCFEB8F01FB3 +:10BA6000000F308A300BEECCFF10F01F000D3008B5 +:10BA700030190C9BEF4800F8EF4900EC306AEECC2F +:10BA8000FEE4F01F0008C030E3CD80C00E9CF01F24 +:10BA90000006E3CD80C00000800091DC800091D0E2 +:10BAA0008000917C80029438EBCD40C016971496AC +:10BAB000F6F8010C1838C0D0768A78D8103AC03021 +:10BAC000E3CD80C0F8CBFFEC0E9CF01F000ECF91B1 +:10BAD0003008EF48010C5806CF41320A0C9B0E9CEF +:10BAE000F01F0009EEF90128301B720C72485D1836 +:10BAF000EEF801280C9A700C70390C9B5D19CE1B66 +:10BB00008000917C800091D0D431189716941493C2 +:10BB1000300B324A069CEE040005F01F0052EEC6C0 +:10BB2000FFFF0C35E0880034E8C800013DD2EE0884 +:10BB30000004C0D8E4091800C2B01499F2C8FFFE8E +:10BB40001007EEC6FFFF0C35E08800220F89E409DC +:10BB50001800C4B10837C1B00D8A580AC180F4C8B2 +:10BB6000FFFEEE0800081035C4733308F009180012 +:10BB7000CE2187270D882FE887380D89F2C8FFFE70 +:10BB80001007EEC6FFFF0C35FE9BFFE2D83A580ABD +:10BB9000CFE03058F00A1800E08B003FEEC8FFFB02 +:10BBA0001035E08B002B14993061E2091800FE98E3 +:10BBB000FFC7EEC0FFFE304A4ABB009CF01F002BBF +:10BBC000C3900D89E2091800FE98FFBA009C304A24 +:10BBD0004A7BF01F0026C071EEC9FFFA87790D88F5 +:10BBE000204887880D89CABB0D8AF4C8FFFEEE087D +:10BBF00000081035CBB2DC3A14993138F00A18003D +:10BC0000FE98FFD4304A49BBEECCFFFEF01F001770 +:10BC1000C1900D89CCAB304A497BEECCFFFEF01FC2 +:10BC20000013C0610FE93018F0091800C1000D8A37 +:10BC3000CB6BEEC9FFFA87590D88204887680D89BC +:10BC4000C7EBEEC8FFFA87480D89C79B0FF8F808C5 +:10BC50001800CEE187070D882FE887180D89C6FBED +:10BC6000800091D08003DE788000917C8003DEAC80 +:10BC70008003DE908003DE98EBCD4080304A189739 +:10BC8000496BF01F0017C031E3CF9080304A495B09 +:10BC90000E9CF01F0013C041302CE3CD8080304A51 +:10BCA000491B0E9CF01F000EC041308CE3CD8080FC +:10BCB000304A48EB0E9CF01F000AC041310CE3CD26 +:10BCC00080800E9C304A48ABF01F0005F9BC000490 +:10BCD000F9BC0100E3CD80808003DEA88000917C68 +:10BCE0008003DE848003DE808003DEB48003DE8890 +:10BCF000EBCD4080304A1897496BF01F0017C031D8 +:10BD0000E3CF9080304A495B0E9CF01F0013C04186 +:10BD1000302CE3CD8080304A491B0E9CF01F000E72 +:10BD2000C041308CE3CD8080304A48EB0E9CF01F40 +:10BD3000000AC041310CE3CD80800E9C304A48ABF4 +:10BD4000F01F0005F9BC0004F9BC0100E3CD8080C0 +:10BD50008003DEA48000917C8003DE948003DE8C6F +:10BD60008003E1E48003DEA0EBCD40FC189416963E +:10BD70001497580BC160198B3308F00B1800C1D011 +:10BD80003008301595789548956895589505308810 +:10BD90009535952895185876E08B009BE3CFC0FC2D +:10BDA000301830898F7B8F4B8F6B8F5B9538950860 +:10BDB00095299519E3CFC0FC300531099545956566 +:10BDC000955595759529951930289508301A8F3A0B +:10BDD0005836FE98FFE51988F6081800CE01199923 +:10BDE000ECC800021039CDB119B919A8F1E91088D1 +:10BDF000F4081900CD4120465836E08A01112FC4BD +:10BE0000089CF01F008A8F2C20465816E08A010BF0 +:10BE10008F15E8CCFFFC19991988F1E91082CBF055 +:10BE2000ECC30002E40815021033CB95F8C4FFFE02 +:10BE300030056E16089CF01F007D0C4C8F1C2FC423 +:10BE400020432FF50A32FE99FFF65813E08A00E5E9 +:10BE5000300A8F3A09990988F1E91082CA00202333 +:10BE6000E40815021033C9B5E8C6FFFE14956E3418 +:10BE7000304A4EFB0C9CF01F006FE08100C430186C +:10BE800008488F382FC620432FF50A32FE99FFF15C +:10BE90005813E08A00940D990D88F1E910888F48B5 +:10BEA000E6CB0002581BE08A008AECCCFFFE199812 +:10BEB0001989F3E810898F59F6C80002A56912386C +:10BEC000C7F5F8C8FFFE300C8F68E3CD80FC1989F8 +:10BED0003DD8F0091800FE91FF631999ECC80002E3 +:10BEE0001039FE91FF5D304A4D3B2FECF01F0051A1 +:10BEF0001893FE91FF5509F909E8F1E91088EA085D +:10BF00001900FE91FF4DECCA0008583AE08A005E25 +:10BF1000E8CCFFF8F01F00498F2CECCA000C0A3A5D +:10BF2000E08A00578F13E8CCFFF419991988F1E9DA +:10BF30001082FE90FF35F4C30002E40815021033AE +:10BF4000FE95FF2EF8C4FFFE30056E16089CF01F0C +:10BF5000003B0C4C8F1C2FC420432FF50A32FE9956 +:10BF6000FFF65813E08A0042300A8F3A099909888F +:10BF7000F1E91082FE90FF142023E408150210332B +:10BF8000FE95FF0EE8C6FFFE14956E340C9C304AF9 +:10BF90004ABBF01F0028C211301808488F382FC63E +:10BFA00020432FF50A32FE99FFF25813E08A00145D +:10BFB0000D880D99F1E910888F48E3CF80FC300897 +:10BFC0008F58109CE3CD80FC580AFE99FEE9581A60 +:10BFD000FE90FEE6E3CF80FC304A49AB0C9CF01F9C +:10BFE0000015C0613028CDAB5813CF51CD8A0C9CC1 +:10BFF000304A495BF01F000FF9B80010F9B8010092 +:10C00000CCDB0C9C304A491BF01F000AF9B8000237 +:10C01000F9B80100C36B5813CD11CC1A5806FE991C +:10C02000FEBF5816CCB1CBBA8002BC788003E1ECDD +:10C030008000917C8003DE988002BCF08003DE9C4F +:10C040008003DE7C8003DEB08003E1E8D401580C7D +:10C05000C021DC0AF8F801745808CFC0169AF8FB22 +:10C060000178109CF01F0004F9BC01FEF9BC00002F +:10C07000D80200008002BD68EBCD40801897580CB4 +:10C08000C1D0F8FC0108F01F000F300A0E9B48ECED +:10C09000F01F000EEEFC0174F01F000DEEFC017CA1 +:10C0A000F01F000BEEFC0180F01F0009EEFC0128E0 +:10C0B000F01F00070E9CF01F0006E3CD80800000FB +:10C0C000800290A88002C0D080027400800091E8B5 +:10C0D000D401F01F0002D8028002963CEBCD40C094 +:10C0E0001896E06C018CF01F00131897C19030185F +:10C0F000E069A8C0F94800ECF9490150346833C937 +:10C10000F9480154F9460128F9490158189A189B31 +:10C11000489CF01F000AEF4C01081898C0400E9C84 +:10C12000E3CD80C00E9C1097F01F0005CF9B000050 +:10C1300080028F248002BAA880028F8C800091E850 +:10C14000EBCD4060149E1DD81896158CECF5012897 +:10C150001AD81DC91AD91DB81AD81DA91AD91D98DF +:10C1600048CA1AD81ADC1ADB303B6A0CF01F000AE6 +:10C17000ECF90128311B720C72585D18ECF901289A +:10C18000300A720C7238149B5D182F9DE3CD8060CD +:10C190008003DF4880023A1AEBCD40C0205D109743 +:10C1A000581BC130582BC0402FBDE3CD80C0310B90 +:10C1B0001A98F01F00091A961A9B0E9C310AF01F5C +:10C1C00000072FBDE3CD80C0310BF01F00052FBD50 +:10C1D000E3CD80C08002B230800091DC80028EF816 +:10C1E000D431201DFACEFFD81894500B149012961B +:10C1F00010917C237C077C12306A49AB129CF01FA3 +:10C20000001AC1D05803C0800698009B400C0499C6 +:10C210000E9AF01F00160C9BE8F501280498F5D142 +:10C22000C0100E996A0C6AA65D16E8FC0104F01FA6 +:10C2300000100E9CF01F000F2FFDD832E8C5FEB88D +:10C24000306A488B0A9CF01F0008CDD1E8F801281D +:10C250000A9B700C70995D19EA061740CD4B0000DF +:10C260008002B41C8000917C8002C19880025582BB +:10C27000800091E8EBCD40E0189716961495F8F8F9 +:10C2800001685848E0800081E08A00495888C780EA +:10C290005908C4F04C19EEF801645848C480584855 +:10C2A000E089004A5818C6605828C6604BB81AD9A9 +:10C2B0001AD8EEFA01280DD81AD80DC91AD90DB816 +:10C2C0001AD80DA91AD90D981AD80D89302B1AD958 +:10C2D000740C4B3AF01F0033EEF801282F8D700BD1 +:10C2E000707C300AF01F0030EEF90128720C72C821 +:10C2F0005D18EEF90128307B720C72185D18580534 +:10C30000C201EEFC010C580CC07079485808F9B80D +:10C310000100F9F81A14E3CD80E05818C33058280A +:10C32000CBA14A29EEF801645848CBA14A08CC0BAE +:10C330004A09CB2B5888C2205908CB9149D8CB8BBE +:10C34000EEF801280C9B700C71263019303A5D16FE +:10C35000301BEEFC0104F01F0018EEF8016C5828A9 +:10C36000C15030080E99495A109B301CF01F001420 +:10C37000CC9B4948C9DB48D8C9BB4938C99B492926 +:10C38000C8BB4909C89B48A9C87B301BEEFC010407 +:10C39000F01F000ECE7B00008003C6288003DF74F0 +:10C3A00080023A1A800274008003DF088003DF10E5 +:10C3B00080039A74800261D48002C0D080027474B9 +:10C3C0008003C8E480039A6C800261A4D431FACD62 +:10C3D00000DC1897169314951296E0490062E08BE2 +:10C3E000000630060C9C2C9DD832129CF01F034492 +:10C3F0001892E08000D60C9A0A9BF01F034205A910 +:10C4000005B8F1E910880599F5D8B0103038F00971 +:10C410001800C0603006049CF01F033BCE4BECC8F4 +:10C420000004EBDAC01030090A385F3AE045005EDC +:10C430005F88F5E8100CF20C1800CED13FE8E4C19B +:10C44000FFFC038AF00A18005F1B3028F00A18006E +:10C450005F19F7E90004F8041800CDD1EEFC0104DF +:10C46000F01F032A039903A8F1E91088EDD8B01052 +:10C47000FDD6C003506E1C9930182019F009190020 +:10C48000E08800043FF6CC8BEEF8016459085F0A9F +:10C490003028F00E19005F19126AE80A1800C080EF +:10C4A000EEF801685908CEF0EDB60003CEC0EEF804 +:10C4B00000F85808E08100ABE1D6C0100098E218FF +:10C4C0002080CE10009AE21A0800502ACDC12FC554 +:10C4D00000995055E21901005039C641405AE339DC +:10C4E000005DE338005E263AF1E91088F7D8B01015 +:10C4F000E9DBC010083AE0830598EEF9016058299D +:10C50000E0800550EDB00003E0810333E21000301D +:10C51000CBA140395809E08001CAEEF90128305B0F +:10C52000720C72185D18039903A8F1E91088E339B9 +:10C53000005DEBD8B010E33B005EFACAFF50F7E9AC +:10C54000108BE2CCFFA1F01F02F243185808C04044 +:10C55000EDB5000CC231EEC3FEB8EEF60134EEF8D4 +:10C56000017C5808E08004E742C95809E08004C80B +:10C57000EEFB017C580BC79042DAEEF80184103ACA +:10C58000C70042FE42EC1ADE14981ADC069A0E9C92 +:10C59000FEFB0B80F01F02E02FED3016C3DB3FF6F1 +:10C5A000C22BE2C6FFB3FAC4FF84310A0C9B089C7D +:10C5B000F01F02D440685C785048EEF800A8580894 +:10C5C000C301EEF800A45808FE90FF5E310A300B5C +:10C5D0000C9CF01F02D2049A404BEECCFFDC0C986E +:10C5E0004059F01F02CF0C9B089C310AF01F02CD6E +:10C5F000FE91FF4A308AE2CBFFFBEECCFF10F01F2A +:10C6000002C13018EF4800F8C6AB308AEECBFF10FD +:10C61000E2CCFFFBF01F02C3FE99FF503FF6CFCAEA +:10C62000402B310A0C9CF01F02BD049A404B0C9821 +:10C630004059EEC5FF9C0A9CF01F02B9310A0C9BC1 +:10C64000089CF01F02B8CBE13018EF4C00A80A9B01 +:10C65000EF4800A4340AEECCFFDCF01F02AACCBBEA +:10C66000129CF01F02B0C10142EC580CC160EEFBFD +:10C670000180580BC12042FEEEF80188103EC090A8 +:10C6800042C942DAC81B42FE42C942EC42DAC7CB79 +:10C690001C9AF01F02A4CF81EEF801605818E080C8 +:10C6A00000E6320AE2CBFFF3EECCFF34F01F029D2E +:10C6B000FE91FF7503B903C8F1E91088F3D8B010F3 +:10C6C000EEF801645888E08000CC5908E08000CA88 +:10C6D000EEF80128FAC9FF2C1AD970D6700C35F97A +:10C6E000FAC8FF24300A303B5D162FFD1896580C0F +:10C6F000FE90FF55EEF80160E06900FE5828F20850 +:10C700001710435AB48840680A99E2190200F1E907 +:10C7100010094358E8190108F20B1608B09B435A58 +:10C72000B4A9EEF801605828E0810093300843591D +:10C73000B2B8435AB4C8435C308AE2CBFFFB2FBC8B +:10C74000F01F02704358300AF16A005D4359F36AE2 +:10C75000005E4358406A2B381AD84379E068888EC7 +:10C760001AD9EECBFFDC1AD606990E9CF01F026E8A +:10C770003018EF4800EC5C752FDDEDB50006C0F118 +:10C78000FEFA09A8F4E80000FAE9007CEEF801647A +:10C790005888E08003F65908E08003D90A90E21037 +:10C7A0000200C0E0EEFA01283019740C069B7528CF +:10C7B000129A5D18301BEEFC0104F01F025DEEF8CA +:10C7C0000128306B700C70195D1943165806FE90E5 +:10C7D000FEE64328FAC4FF84F0C50002334A300B5A +:10C7E000089CF01F024EE0450020FE9BFED80D88FD +:10C7F000F1D8C00252280D89F3D9C041C050EEF8DB +:10C80000016458185F095209ECCBFFFE0A9AFACC72 +:10C81000FF74F01F023C0A9A52B50898FAC9FF7CCF +:10C820000A9BEEFC0168F01F0243FE91FEB8E2CACB +:10C83000FFC3089B0E9CF01F0240FE91FEB0009AC1 +:10C84000069B0E9C3016F01F023DFE9FFDE6435CEA +:10C85000302AE2CBFFFD2FDCF01F022AC6DB3208B4 +:10C86000F0091900FE91FE9BC34B42EB580BFE9062 +:10C87000FF1A58065F1AEEF9018058095F0814681C +:10C88000FE90FF116D68EDB80001FE91FF0C42F8BB +:10C89000069A1AD80E9C1ADBFEFB08A442F842E95D +:10C8A000F01F021D2FEDFE9FFE7AEEF90128720C9B +:10C8B00072885D18FE90FE73EEF80128305B700CF4 +:10C8C00070195D19403BFAC6FF50324A0C9CF01FAC +:10C8D0000213EEF801605828C0C1E338005DE33B65 +:10C8E000005E0C9AF7E8108BE2CCFFA1F01F020863 +:10C8F00043065806C0E0EEFC010C580CE08003D162 +:10C90000F8CBFFFC310A0C9CF01F0206E08003C04C +:10C910003005EEF8016C5818E08000D45805C0606E +:10C92000EEFB016C581BE080029BEEF800EC58080F +:10C93000E08102B5EEC8FF545008EECAFEB8EEC959 +:10C94000FF9CE2C8FFF3508AEEC6FEC850A950987B +:10C95000306A6E85408B0C9CF01F01F2E08500FB75 +:10C96000306A408BFAC0FFD0009CF01F01E60C9BA0 +:10C97000306AFACCFFCAF01F01E3320A409B400C38 +:10C98000F01F01E8E08500D0320A409BFACCFFC4DA +:10C99000F01F01DC320A400BFACCFFA4F01F01D9D2 +:10C9A000340E1ADE40BE00991ADE34C80A9BFEFA25 +:10C9B00007920E9CF01F01E4EEC5FF6CFAC3FF7CEA +:10C9C0000A9B308A069CF01F01CF0A9CEEC6FF64CA +:10C9D000308A0C9BF01F01CB069B0C9C308AF01F09 +:10C9E00001C93018EF4800A82FEDEEF50178EEF000 +:10C9F00001745800FE90FDD3EEFA0128FAC8FF2812 +:10CA0000E9D5B0101AD8E8C9FFA1740C74D6FAC8D9 +:10CA1000FF285C79300A303B5D162FFD1893580CC7 +:10CA2000FE90FDBDEEF80160E06900FE5828F208B6 +:10CA30001710436AB48843683019B0994066436858 +:10CA40005C760C9AA3BAB0AAEEF901605829C631F7 +:10CA500030084369B2B8436AB4C8436CE2CBFFFB09 +:10CA6000308A2FBCF01F01A74368F3D4C108F169D5 +:10CA7000005D43680A9AF165005E009B436C2A1CC6 +:10CA8000F01F01A0400B436C320A2F3CF01F019DA8 +:10CA9000408940AB43682B381AD8436C0C9A1ADC97 +:10CAA000E068888E1AD30E9CF01F019F40CBEECC1D +:10CAB000FF34320A3016F01F01932FDDFE9FFCADCC +:10CAC000EEFC0104580CFE90FF2B320A0E9BF01F67 +:10CAD000019FC361320A8F8AEEF8013406991AD891 +:10CAE0000E9BEEC8FEC8EEFC0108F01F0199580627 +:10CAF0005F1AEEF9010C2FFD58095F081468FE90CB +:10CB0000FF0F0C9A069BEEFC0108F01F0192FE91AC +:10CB1000FF0EC05B436C302AE2CBFFFD2FDCF01F21 +:10CB20000179C9CB400B320AFACCFFC4F01F017562 +:10CB3000320A409BFACCFFA4F01F0172C32B310ACA +:10CB40000E9BEEFC0104F01F0181E08101B4310A6B +:10CB5000CC3B0C9BFAC0FFD0306A009CF01F0169EF +:10CB6000306A408BFACCFFCAF01F0166C07B009B85 +:10CB7000E21B2000FE91FD13403A580AFE90FD0F83 +:10CB8000334AFAC0FFD0009CF01F0164EEF901287F +:10CB90007228720C5D1850BC039903A8F1E9108843 +:10CBA000E339005DE7D8B010E338005EF1E91088A2 +:10CBB000EEF90160F7D8B0105829E080011303B9ED +:10CBC00003C8F1E910895189EBDBC0100A34E08316 +:10CBD00000CB3028406EF00E1900E08001D80A9694 +:10CBE000129B0098FAC9FFC80C9AEEFC0168F01F6E +:10CBF0000151E08100B9F5D3C010F1DAC082501ABA +:10CC000050F830194068F2081900E08000C7302859 +:10CC1000406EF00E1900E08000A4401AF1DAC0C1A5 +:10CC2000C050EEF8016458185F0850D8EEF801289B +:10CC3000306B700C70195D19009BE2CAFFC30E9C2B +:10CC4000F01F013D1895FE91FCAAEEF80128FAC9E3 +:10CC5000FF2C0A9A1AD9303B700C70D635F9FAC8F5 +:10CC6000FF245D162FFD1894580CFE90FC98EEF8EA +:10CC70000160E06900FE5828F20817104066435A28 +:10CC80005C76B488E21300304358E8130300E7E60B +:10CC9000100CF80B1608B09B4359B2ACEEF80160CB +:10CCA0005828E08102234358B0B54359B2C5435CCC +:10CCB000E2CBFFFB308A2FBCF01F01124358300A31 +:10CCC000F16A005D4359F36A005E43582B381AD865 +:10CCD00043790C9A1AD9EEC6FEB81AD40C99E068BA +:10CCE000888EEECBFFDC0E9CF01F010F2FDD40B9CC +:10CCF0005879E08101F1EEF801685848E08001E6DA +:10CD0000E08901DC5818E080014B5828E08001469A +:10CD1000FEF804441AD8EEFA0128EF38014D1AD86B +:10CD2000EF39014C1AD9EF38014B1AD8EF39014AC3 +:10CD30001AD9EF3801491AD8EF390148302B1AD9DE +:10CD4000740CFEFA0416F01F0106EEF80128307B81 +:10CD5000700C701930165D192F9DFE9FFB5EF1D58A +:10CD6000C003C0A0EEF80128306B700C70193016AB +:10CD70005D19FE9FFB52E0460020FE9BFFF5EC0B89 +:10CD80001603FAC9FFC0E2CAFFA1EECCFFCCF01F28 +:10CD900000F5FE90FF44CE7B310AE2CBFFD3FAC40C +:10CDA000FF84089CF01F00D7310AEECBFFCCFACCF1 +:10CDB000FF74F01F00D4E0450020FE9BFFD5FAC6AB +:10CDC000FFC00A9AE2CBFFA10C9CF01F00CE0A988C +:10CDD0000C99089CE06A0100320BF01F00E3C1EBE4 +:10CDE0005C7BFACAFF50E2CCFFA1F01F00C94318D8 +:10CDF0005808CB90F3D3C0105019EDB9000CCB31CB +:10CE000043282028FAC9FFC8109A5188149B00981B +:10CE1000EEFC0168F01F00C7CA61431B1788F1D8F8 +:10CE2000C00250F81789F3D9C041C050EEF8016430 +:10CE300058185F0950D94328F0CA0002E04A002080 +:10CE4000FE9BFF922FEBFACCFFC0F01F00AEEEF975 +:10CE50000128306B720C72185D18CEFAEEF80128BA +:10CE600030091AD9129A700C70D6FAC8FF285D16CC +:10CE70002FFD1893580CFE90FB92EEF5012818999F +:10CE8000EECBFEB84358E06A888E6A0C6AA65D163F +:10CE9000069CF01F009DFE9FFB82EECEFF54320BDE +:10CEA000500E1C9CF01F00B1C1F1EF4C00ECFE9F36 +:10CEB000FD46EEF80128FEFA02B6700C303BF01F7A +:10CEC00000A8EEF80128FEFA02AA700C303BF01F11 +:10CED00000A4EEF8010C5808FE90FB613008EF4802 +:10CEE000010CFE9FFD1FEEF80128FEFA028A700C6D +:10CEF000303B3016F01F009AFE9FFA8F42EC580C20 +:10CF0000FE91FBB7EEF8017C5808C061EEF8018095 +:10CF10005808FE90FBC342F830091AD8069A1AD96D +:10CF20000E9C42F8FEFB0254F01F007B2FEDFE9F8B +:10CF3000FB36EEF801805808FE91FB18EEF9012847 +:10CF4000720C72B85D18FE9FFB111099303BEEF821 +:10CF500001605828C180E2CCFFC31AD9EEC8FFBCDB +:10CF6000EEFA012830691AD830181AD930091ADCBB +:10CF7000740C7466069A5D162FCDFE9FFC11302B43 +:10CF80003209CE6BFACCFF84CE9B5875FE98FEEC2E +:10CF9000EAC60008FE9FFE264F98CBDA4F98CBBA20 +:10CFA000EDB0000CFE91FAB0EEF800A45808FE9027 +:10CFB000FA6B3018406EF00E1900C490406AF20A05 +:10CFC0001900FE91FAA1F1D4C003FE91FA5DF6C8F2 +:10CFD00000085C88109550785C750A9CF01F00482A +:10CFE0001896FE90FA51E2C4FFA11899089AEA0B2C +:10CFF0001603EECCFFCCF01F005BC2310A9A0C9BEB +:10D00000089CF01F00400C9CF01F003F4078EA098C +:10D0100016085C58E369005DE368005E5C59F1E95D +:10D020001084FE9FFA711ADA1AD4EEF801284D6ABC +:10D03000700C302B3FF6F01F004A2FEDFE9FF9EDEC +:10D040000C9C3FF6F01F0030FE9FF9E7FAC6FF8404 +:10D05000310AE2CBFFD30C9CF01F002A310AEECB41 +:10D06000FFCCFACCFF74F01F00270898E2C9FFA19B +:10D070000C9CE06A0100320BF01F003BE339005DBD +:10D08000E338005EF1E91084FE9FFA3E0E9CF01F2B +:10D09000003FEEFC0104F01F003EFE9FFC480C9A8E +:10D0A000069BEEFC0108F01F002BEF4C010CFE91DB +:10D0B000FC293015FE9FFC2F5888C0A05908FE910E +:10D0C000FE294B48FE9FFE284B38FE9FFE254B381D +:10D0D000FE9FFE22401A0C9BE21A02000E9C3016A4 +:10D0E000F01F0016FE9FF999435C302AE2CBFFFD4A +:10D0F0002FDCF01F0004FE9FFDDC0000800092008A +:10D10000800091DC800091E88002575C8002BB08BF +:10D110008003E0488002C140800091D08002C19825 +:10D120008000917C8002C1E08003E1DC800261D458 +:10D130008002B4248002B9308002C2748003E0848B +:10D140008003E1788002B354800257CC8002914C76 +:10D1500080028FB08003C6288003E19080023A1AD3 +:10D160008002D8A080029B4080028F488003E0F0BC +:10D170008003E1308003E14C8003E0048003DF089A +:10D180008003C8E48003DFC88002B9EC80025770D6 +:10D1900080039A748003DF1080039A6CD431204D91 +:10D1A0001894F8F80128E8F9016416955909F9B3BB +:10D1B0000002F9B301011492700C1A9070991A9B35 +:10D1C0005D19C635E8F80128FAC9FFF8300A1AD9FE +:10D1D000303B700C70D635F9FAC8FFF05D162FFDA4 +:10D1E0001891580CC520E8F80160E06900FE402A5B +:10D1F0005828F2081710B4880697E8F800A4ABB7CF +:10D200005808C050E0680900E7E810075805E068D2 +:10D210000400EFD8E1375802F9B80108EFD8E13738 +:10D220004028F3D7C108B09940283006B0A740295C +:10D23000B2B64028308AB0C6E8C5FF04402C0A9B2D +:10D240002FBCF01F00130A9C308BF01F00124028E7 +:10D25000F166005D4029F366005E0E99E219010057 +:10D26000FBF81002F9BA014DF1DAE1091AD9404888 +:10D2700000991AD8069A1AD1089CE068888EE8CBE3 +:10D28000FFDCF01F00052FDD2FCDD832800091DCB0 +:10D29000800239EA8002C1E0EBCD40804879720813 +:10D2A000201893081897C031F01F00050E9CF01F3E +:10D2B0000005E3CD8080000000007AB48002D2F83F +:10D2C000800091E8EBCD40C048976E065806C041FB +:10D2D000F01F0008C0916E082FF8304C8F08F01F27 +:10D2E0000006E3CD80C00C9CE3CD80C000007AB482 +:10D2F0008002D30480028F24D401F01F0002D802E0 +:10D300008002D996D401F01F0002D8028002D9947D +:10D31000D4211789179A17B8F1E9118817A9F1EAEA +:10D320001108F1E91088990817CA17D8B168F1EA0D +:10D33000118817EA17F91258F1EA10889918F73A84 +:10D340000008F739000BF7380009B168F1EA1188D5 +:10D35000F73A000A1258F1EA10889928189EF73A0D +:10D36000000CF738000DF739000FF8C5FFE4B1687D +:10D37000F73C000EF1EA11883007125849B4F1EC7D +:10D38000108C49B69D3CC038149C2F05E80707084F +:10D390002F0EFCF9FFF0F3E82189EC0C0F88E2185E +:10D3A000FF001059EC0C0F98E61800FF1059EC0C18 +:10D3B0000FB8F1D8C1081059FCF8FFF4EC0C0FAB12 +:10D3C000A96BE61BFF0016599D091059FCF8FFF8E0 +:10D3D0009D1910599D29FCF8FFFCF3E8200A8B0ADF +:10D3E0002FF758A7CD21D8228003E2F08003E6FC76 +:10D3F000EBCD40FE1892F01F002F0493E4CBFF60AA +:10D40000E4C4FFFCE4C5FF5CE4C6FFF8E4C7FF58D2 +:10D41000E4CEFFF4E4CCFF54E4C1FFB06609760823 +:10D4200087089709680A6A0889088B0A6E086C09D8 +:10D430008D088F097C0A78089D08990A2F03210B13 +:10D440002F0421052F0621072F0E210C023BCE7140 +:10D45000E4C4FFF030134985498608972F046E0A0B +:10D46000EC0A0F98EA080F9EEC0A0F88EA080F9C56 +:10D47000EC0A0FB8EA080F9BEC0A0FA8F809150888 +:10D48000FC0A1510F3EC1389F5EE130A1659EA0895 +:10D490000F9BF6081518F1EB1288105914590EA9B4 +:10D4A0000E34CDE12FF358A3CD91E3CD80FE0000E3 +:10D4B0008002D3108003E2FC8003E6FCD431209D7F +:10D4C000F736000E505A178A780917B8F1EA118812 +:10D4D000179A1258F1EA210817AEF1EE208E506E1D +:10D4E000781817CA17F9105917D8F3EA2189F3E801 +:10D4F000210917EEF3EE208E507E7828F7390008C8 +:10D50000F73A000B105AF7380009F5E9218AF73984 +:10D51000000AF5E8210AF5E920827839F73A000C8B +:10D52000F738000FFEF7034412581894F1EA2188E7 +:10D53000F739000DF8CAFF60F1E92108500AF1E659 +:10D5400020800E91E0081618406AEE080326F3DAF0 +:10D55000C008F1D2C208EE090329EE080328504999 +:10D560005038407AEE0A0F9950296878684B105667 +:10D570004068EE000FACEE080FBA4079165AEE097B +:10D580000F8BF6081508F1EB1388F8091518105AD7 +:10D59000F3EC1289EE020F9C125AF8081510F1EC08 +:10D5A0001308F5E82008685E68654079EE090FBB4E +:10D5B00050884068EE020F8C1C5BEE080FAEF80836 +:10D5C0001508F1EC1388EE000F9A105BFC09151892 +:10D5D000F4081510F3EE1289F1EA1308125B407992 +:10D5E000F7E82003EE000F8BF6081508F1EB13881F +:10D5F000EE020FBCEE090FAE0A5CFC091518105CB8 +:10D60000F3EE12894068125CEE080F9B404A4048D6 +:10D61000F6091510A968F3EB1309F1EA1388F9E983 +:10D620002000105640394038B968F1E912882E04BC +:10D63000105640294028B169400AF3E81309EDE982 +:10D6400020021434C770E4081618408AF3DAC008C0 +:10D65000E208032EE2090326F1D0C208E2030F9983 +:10D66000E20803255019E2020FACE2030F8B6809B0 +:10D67000F6081508F1EB1388E20A0FBA125AF809F6 +:10D680001518105AF3EC1289E2000F9C125AF80890 +:10D690001510F1EC1308F5E82008E2030FBB506801 +:10D6A00040886819E2000F8AE2080FAC125BF408A8 +:10D6B0001508F8091518F1EA1388F3EC1289E2004D +:10D6C0000FBAE2020F9C105BF8081510125BF1EC28 +:10D6D0001308F7E8200850786829E2030FAC125AC3 +:10D6E000F8091518F3EC1289E2020F8BF6081508F9 +:10D6F000F1EB1388105A125A4089E2090F9B6839DE +:10D70000F6081510F1EB1308125EF5E82002EC099B +:10D710001508EA081518F3E61389F1E51288125E78 +:10D720004019105EB1694018F3E81309FDE92000C3 +:10D73000C0AB4089F1D3C1084CDBFDD9C008F60865 +:10D740000706E40A1618EBD0C208F60A0709F60520 +:10D750000708F60E070CF9E9118CF3D3C008F9E8B5 +:10D76000110C4088B988F608070AF6090708F3D2B1 +:10D77000C208F1EA1188F609070AF3D0C108680E59 +:10D78000F1EA1108F609070AF1EA10881C58F009B5 +:10D790001618405AB4B8B4894059F00A1610A9882E +:10D7A000B29AB2A8E6091618F609070AF3D0C0081B +:10D7B000F6090708F1EA1188408AF3DAC208F60987 +:10D7C000070AF3D2C108F1EA1108F609070A40591D +:10D7D000681EF1EA10881C58B2F8F0091618405A71 +:10D7E000B4C94059F00A1610A988B2DAB2E8E009C3 +:10D7F0001618F609070AF3D2C008F6090708F3D38A +:10D80000C208F1EA1188F609070AF1EA1108408A0C +:10D81000F3DAC108F609070A4059682EF1EA1088C0 +:10D820001C58F368000BF0091618405AF5690008F7 +:10D830004059F00A1610A988F36A0009F368000A33 +:10D840006839405AF9E6108C125CF8081618F80985 +:10D850001610F56C000FF568000CA98CF569000D29 +:10D86000F56C000E2F7DD8328003E2FC8003E1F0DE +:10D87000EBCD40C01897590BC030E3CF80C0E06CAF +:10D8800000B0F01F00061896CF900E9BF01F00040A +:10D890000C9CE3CD80C00000800092008002D3F099 +:10D8A000D431209D129714961895500B308A0C9BFA +:10D8B000FAC2FFE4049CF01F0034ECCBFFF8400AEE +:10D8C0000E9CA37AF01F00300A9C310BF01F002F32 +:10D8D0001893C57040082018EE08003840095028F9 +:10D8E0005C39400A5C59F40A00285019E9D8C0088C +:10D8F0003050FAC7FFF4FAC1FFEC40095809E08A3A +:10D90000002940251296308A049B0E9CF01F001EB1 +:10D91000FB390013E806000812580A9BFB68001345 +:10D92000308A029CF01F00180E9A0E9B069CF01F76 +:10D930000018308A0E9B049CF01F001320160A9CCE +:10D94000308A2085029BF01F00105806FE99FFDDEB +:10D95000401A2010E80A0008E9D8C0085BF0CCE1C2 +:10D96000069CF01F000C049C3A691988F208180004 +:10D97000C0812FFCFAC8FFDC103CCF812F7DD83A44 +:10D980002F7DDC3A800091DC8002D8708002D4BC0C +:10D99000800091E85EFD5EFCD4311A97202D109E28 +:10D9A000129514965809C4911638E0880057F0086B +:10D9B0001200C0D0F608094BF0091120FC08094EEE +:10D9C000F4090A49F4080946F3EB100BFC0516109C +:10D9D000F9DEC010F6050D0AEC0816101499F1EBEB +:10D9E0001108B93A103AE088000C20191C08103EC2 +:10D9F000E08B0007103AF7B90B01F1DEEB08F00AF3 +:10DA0000010BEDD6C010F6050D0AEDEB11061498CA +:10DA1000F40C024C0C3CE088000A20181C060C3E5A +:10DA2000E08B00050C3CF7B80B01F1E9110B300C51 +:10DA3000169A189B2FEDD8321639E08B0051F20C54 +:10DA40001200C53114385F8916355F381049F8095E +:10DA50001800C450301BC4585808C0513019F2087F +:10DA60000D08109EFC081200E08100911C1BFC05B3 +:10DA70001610F3DEC010301CF6050D0AEC08161067 +:10DA8000F4090243F1EB1108149B1033E088000CF9 +:10DA9000201B1C08103EE08B00071033F7BB0B0166 +:10DAA000F1DEEB08F0030103EDD6C010E6050D0230 +:10DAB000EDE311060498E40902490C39E088000AF4 +:10DAC00020181C060C3EE08B00050C39F7B80B0142 +:10DAD000F1EB110B169A189B2FEDD832300B169CD8 +:10DAE000169A189B2FEDD832F20C0945F80E11202A +:10DAF000F00C0943F40E0A46F00E0A48F60E0A4EE0 +:10DB00000A48F0011610FC010D04EEE5FFF8F60CD2 +:10DB10000949EBD8C010EDE910090896F20E16106D +:10DB2000EEF4FFF8EC05024BFDE4110E1C3BE0881F +:10DB300000072016100E1C38E088006D161EF3D961 +:10DB4000C010FC010D00F3E11109009BE005024E3D +:10DB5000123EE0880007201B10091238E0880055AB +:10DB6000F7E6110B1C19F60306420639C0935F094C +:10DB7000F40C094C043C5F38F3E80008C020201B7B +:10DB8000300C169A189B2FEDD832F6080949FC087C +:10DB9000094EF0011120FC051610F4010A42F601AD +:10DBA0000A411242E2050D00F3DEC010E406161031 +:10DBB0000093EDE11106E009024C0C3CE0880007FF +:10DBC00020131C060C3EE088002CEC0C0101F7D25F +:10DBD000C010E2050D00F7E1110B009CE0090241C5 +:10DBE0001631E088000C201C1C0B163EE08B000751 +:10DBF0001631F7BC0B01F7DEEB0BF4080946021BEC +:10DC0000F9E3110CC3AB123EF3D8EB09F7BB0B01E0 +:10DC1000CA8B1C3BF7B60B01FDD8EB0EC90B0C3CB5 +:10DC2000F7B30B01EDDEEB06CD1BD703D40130AA11 +:10DC3000300BF01F0002D8028002F0ECD4014848FB +:10DC4000169A189B700CF01F0003D802000005986C +:10DC50008002DC54D421F40B024BF01F00151897FE +:10DC6000C230F8FAFFFCE01AFFFC204AE04A002428 +:10DC7000E08B00181898593AE088000F300910A975 +:10DC800010A959BAE088000910A910A9E04A002497 +:10DC9000C03110A910A9300910A991199109C048E3 +:10DCA000300BF01F00040E9CD82200008002E2BC62 +:10DCB0008002E8BCD421300EF6C80001F60614013B +:10DCC000F808002818991897C07870046E050EA4FB +:10DCD00091052FFE20480C3ECF95F40B000B1897B2 +:10DCE000F6C80001300EF8080028A15BC078700566 +:10DCF0006E060EA591062FFE2048163ECF95F4C85D +:10DD00000001A15AF808002C3008C078780E720B78 +:10DD100012AE990B2FF8204C1438CF95D822D70388 +:10DD2000D431205D502C503816971496580C5F0B48 +:10DD300058075F0C1295F9EB100B40E33008F00B1D +:10DD40001800E081028058095F09580A5F08F3E86B +:10DD50000008F6081800E08102764BE4402B6808C2 +:10DD60001638E0840270EE08032C580CE080026B39 +:10DD70004B9BF01F003AC06168082FF88908E08FBC +:10DD8000026268085808C05130184B598908930836 +:10DD90005806C14032D90D88F20818005F0232B926 +:10DDA000F20818005F08E5E81008C0805802F9B2D0 +:10DDB0000101F9B200022FF6C0884AACF01F002A18 +:10DDC000F9B20102F9B200004A5870085818C61199 +:10DDD0005812C2B049F95822C4A0129872043001F6 +:10DDE00032DB32BA7009F2C0FFFFEE09032C580C87 +:10DDF000E080023B1989F6091800C0805803E080D2 +:10DE00000225F4091800E081022150015014492B29 +:10DE1000F01F0012C411EE04002C029B301A2FF4E4 +:10DE2000F01F0012E08F022148A87009EE090328B4 +:10DE30005808C2F0118A32DBF60A1800C2A0580353 +:10DE4000E080020832BBF60A1800E0810203C21823 +:10DE500000007AB88003EC008002ECC800007ABCB5 +:10DE60008003EC04800326948002DCB47208EE0880 +:10DE700003285808C0E0118832D9F2081800C09071 +:10DE80005803E08001E032B9F2081800E08101DBBC +:10DE90003009500950195805E08000A44BE4680887 +:10DEA000302AEE08032C4BDBF01F003DC0D0580396 +:10DEB000E08000986808EE080328118932B8F0095C +:10DEC0001800E081008F4B7468085818E081008AC0 +:10DED0004B187008302AEE08032C4B0BF01F003053 +:10DEE000F9B80002E9F80A004AB468084AD1EE0815 +:10DEF000032C620833DB100CF01F002B1893C0E1D9 +:10DF00006808EE08032CF01F002968096208EE0972 +:10DF10000323F80801081803C08868086209EE089E +:10DF20000328F8080108121850430A910C933FF493 +:10DF300030001096C4784989720849A9EE08032C6C +:10DF400072080C9A100CF01F0016C3A1620CF01F8F +:10DF500000171836C051069600944043C3C85BF4BE +:10DF6000C2E0493870085808C7C062081AD848A8E3 +:10DF700070096E08EE090329A564EA04030A1ADA97 +:10DF80001AD91AD848B8700848BB702CF01F000B7B +:10DF90002FCDC67800007AB88003EC008002E7102D +:10DFA00000007ABC8002ECAC8002EDD0000004A43A +:10DFB000000005988003EC1480031FE800942FF004 +:10DFC0002F01620B580BCB81069640435BF4C031A6 +:10DFD0000898C0A8E8081504EA0800087018C048A6 +:10DFE0003FF83003109458065F19F3E403F9C03189 +:10DFF0003006C5484BE162084BE3EE08032966088A +:10E000000C9CF208070BF01F003C1896C2D14BB8CD +:10E0100070085808C11062096608EE090329F20861 +:10E0200007081AD86E081AD84B5870084B5B702C2A +:10E03000F01F00352FED4AF8700B2FFB910B4AC9EA +:10E04000720AEE0A032CF80B070C300BF60C1800C2 +:10E05000F7BA00FFF3FA0A00F9B90001F1F90A0072 +:10E0600033F8109CC818199833A9F2081800C0306A +:10E070003008C08819A9F0091800F9B80002F9B8E9 +:10E08000010149CA49A97209EE09032974030D8ADD +:10E090002FF3F203000349D9930A5818C1505828A6 +:10E0A000C0405808C6C0C208078933D8F009180014 +:10E0B000F7B300FF4968078A3009F20A1800C10166 +:10E0C00030069106C718078933D8F0091800F7B34E +:10E0D00000FF30080789F0091800C1B048C8910353 +:10E0E0003019484891093006C5F8000000007AB898 +:10E0F00000007ABC8002ECAC000004A4000005988B +:10E100008003EC5080031FE8000004A000007AC0E8 +:10E110004C08402B70082FF81638C2954BE8700851 +:10E120005808C1C06E084BD71AD86E084BCB702C5C +:10E13000F01F003C2FFD5BF4C0906E08A5644BAB54 +:10E14000EA0403091AD9702CC0686E080D894B7B4C +:10E150001AD9702CF01F00332FFD4AE933A8720A38 +:10E16000109C2FFA930A4B299308C6D84B19EE0836 +:10E17000032A3018930A10964AF9C1584AE95BF409 +:10E18000C0D1720A2FFA930A4A2B760BEE0B032B9F +:10E19000F60A070AF00A1800C03130189308300850 +:10E1A0004A49109693085802C1B140094A285809B3 +:10E1B0005F19700858185F08F3E80008E4081800B1 +:10E1C000C0F04018ECCAFFFFEE08002C400BF01F17 +:10E1D000001B40182FF8F006000648E8C0A8496860 +:10E1E00070085818C07148B870092FF9F206000677 +:10E1F00091065BF4C240403B580BF7F41A00A5644B +:10E2000008056A3C6A285808C1E0910C300CC1B876 +:10E2100000007AB8000004A4000005988003EC70A8 +:10E2200080031FE88003EC948003EC9C000004A0B2 +:10E2300000007AC000007ABC8002DCB448C8700CD0 +:10E24000C0283FFC2FBDD83291002FF1FE9FFDCC9E +:10E25000488B97084888F2CAFFFF3019910A129C30 +:10E2600048389109CF0B48489104CECB000004A058 +:10E2700000007AC000007AB8D40130091AD9129887 +:10E28000F01F00022FFDD8028002DD20D401484893 +:10E29000189B700CF01F0003D802000000000598C6 +:10E2A0008003217CD4014848189B700CF01F0003A8 +:10E2B000D8020000000005988002E2BCD431F6C705 +:10E2C000FFF518955967F9B70810F9B80BF8EFD8AA +:10E2D000EB2716375F38F1E713F8C05030C899388C +:10E2E000E08F01F4F01F0050E04701F7E08B001CC5 +:10E2F000EE0316034CD8F003003870361036C061B8 +:10E30000ECC8FFF870361036C0C06C18E018FFFC7F +:10E310006C3AEC0800090A9C6C289528913AC4785C +:10E320002FE3C4D8EE081609C041EE031603C278E5 +:10E330005848E08B0006EE0316062C83C2085948A5 +:10E34000E08B0005F0C3FFA5C1A8E0480054E08BB6 +:10E350000006EE03160C2923C128E0480154E08B87 +:10E360000006EE03160F2893C0A8EE031612E0482D +:10E370000554E088000437E3C02828434ABAF40370 +:10E38000003A7436C1986C19E019FFFCF207010BD2 +:10E3900058FBE08A00042013C1186C38580BC0B534 +:10E3A0006C2AEC0900090A9C912A95387218A1A8D8 +:10E3B0009318CBD810961436CE712FF349BAF4CCFB +:10E3C000FFF878261836C6F06C19E019FFFCF20742 +:10E3D000010858F8E0890091993C992C5808C055DB +:10E3E000EC0900090A9CCE3BE04901FFE08B0013D9 +:10E3F000A399F4090038702B8D388D2B9736912610 +:10E40000A3497418301BF6090949F1E91009951957 +:10E41000C4A8F20816095848E08B000AF20A16064A +:10E420002C8AC2488002E8CA0000059C5948E08B4B +:10E430000005F0CAFFA5C1A8E0480054E08B000623 +:10E44000F20A160C292AC128E0480154E08B000684 +:10E45000F20A160F289AC0A8F20A1612E0480554CC +:10E46000E088000437EAC028284A4C8BF60A0034BA +:10E4700068280838C0E17619A34A301EFC0A094A08 +:10E48000F3EA100A1099971AC0A870280838C060DB +:10E49000701AE01AFFFC1439CF9370398D398D282A +:10E4A00091369326E6081402301B4B84F608094B7C +:10E4B0006818103BE08B006EF7E80009C0B1E0136C +:10E4C000FFFCA17B2FC3C0382FC3A17BF7E8000955 +:10E4D000CFC0E803003E06921C916236C2E86C1A77 +:10E4E000E01AFFFCF407010858F8E08A00156C3ABE +:10E4F0006C299529933A0E99EC070007A1A9993741 +:10E5000099278D19EE0809088F2C8F3CA1A80A9C29 +:10E510008F18C0D86C395808C0F5EC0A000A741876 +:10E52000A1A80A9C95186C2893289139F01F00180F +:10E53000ECCCFFF8D83212960236CD212FF2F1D270 +:10E54000C002C0302F81CCAB1C98F3D3C002C08175 +:10E550006819F60811FFF3E800088918C078F0C9B7 +:10E560000008201370081238CF10A17B6818103BE8 +:10E57000E08B0010580BC0D00493C0382FC3A17B90 +:10E58000F7E80009CA71CFBB0000059C8002E8CC07 +:10E5900068236612E012FFFC0E325F39E4070108BF +:10E5A00058F85FAAF5E91009E08000A24C887001D4 +:10E5B0004C882F0170080E015BF8C0402811E01153 +:10E5C000FF80029B0A9CF01F004418965BFCC6E08B +:10E5D000E6020008103CC0320833C6814BFA7409C9 +:10E5E000E209000995091036C0A1F5D6C007C0712F +:10E5F000E20200026828A1A29112C4C84B5A740B0F +:10E600005BFBC0319506C068EC0900094B3A101954 +:10E610009509F1D6C003F00911085808F20817103F +:10E62000EDD8E1062808EC0100010A9CE3D1C007FF +:10E63000F0010101029BF01F00284A885BFCEC0CF2 +:10E640001700F9B1000070090C1C8926020C120198 +:10E65000A1AC91018D1C0833C1D058F2E08B0005AC +:10E6600030188D18C238305920C2E012FFF8E60287 +:10E670000008912991196618F1D8C001E5E8100841 +:10E68000871858F2E0880007E6CBFFF80A9CF01FD5 +:10E6900000144949720A491870081438F3F8BA008E +:10E6A0004919720A1438F3F8BA0068287018E0188B +:10E6B000FFFC0E385F390E1858F85FAAF5E910090B +:10E6C000C1600A9CF01F0009D83A000000007ACC13 +:10E6D000000009A88002EBC800007AD08003217CEA +:10E6E00000007AC800007AC48002E8CC6826A1A89D +:10E6F0000E99A1A98D19EC0700070A9C89278F188C +:10E70000F01F0003ECCCFFF8D83200008002E8CC08 +:10E71000D4013008C0D8F808070EF6080709201AF7 +:10E720002FF8F20E1800C040FC09010CD802580A5C +:10E73000CF31149CD802588AC2F5F9EB1009E219BE +:10E740000003E0810097E04A0020C3B4F4081402FB +:10E75000F0091108FE09002F7669996976599959CF +:10E7600076499949763999397629992976199919E5 +:10E7700076099909F608002BF8080028E01A00032A +:10E78000F40A1104FE0A002F17A9B0A91799B0992D +:10E790001789B0895EFCF40A1109FE0A002F17F9E7 +:10E7A000B8F917E9B8E917D9B8D917C9B8C917B965 +:10E7B000B8B917A9B8A91799B8991789B8895EFC8B +:10E7C000EBCD40C01899220AB707B326B707B32686 +:10E7D000B707B326B707B326220ACF742F0AC0653E +:10E7E000B707B326B707B326210A5C3AFE0A003FF3 +:10E7F000D703D703F736000EF366000EF736000D89 +:10E80000F366000DF736000CF366000CF736000BCC +:10E81000F366000BF736000AF366000AF7360009C4 +:10E82000F3660009F7360008F3660008F7360007BC +:10E83000F3660007F7360006F3660006F7360005B4 +:10E84000F3660005F7360004F3660004F7360003AC +:10E85000F3660003F7360002F3660002F7360001A4 +:10E86000F3660001F7360000F3660000E3CD80C0D8 +:10E87000201AF60A0709F80A0B09CFB15EFCD40189 +:10E88000183BC192F60A0009123CC152F80A000B6B +:10E890003008C068F208070E201AF6080B0E201880 +:10E8A000580ACF91D802F6080709201AF8080B0970 +:10E8B0002FF8C0283008580ACF71D8021898C038ED +:10E8C00010CB201A580ACFD15EFC5EFC5EFCD70349 +:10E8D000D4014848169A189B700CF01F0003D80208 +:10E8E000000005988002E8E8D431201D16941892A3 +:10E8F000149B5804C051F01F005B1895C5B9500A0D +:10E90000F01F0059400BE8C10008F6C6FFF5621C75 +:10E910005966F9B60810F9B80BF8EDD8EB2616369B +:10E920005F38F1E613F8C05030C830058538C42987 +:10E930001890E010FFFC0C30E08401124CB8E200AB +:10E94000000970250A39C090721AA1CAF20A000A99 +:10E95000741AEDBA0000C220721AE01AFFFCF4002B +:10E9600000030A39C131ECC7FFF00E33C195E2064E +:10E9700000090C13A1A393139129049C6218089514 +:10E98000F1D8C00110468316C1390C33C0957228E6 +:10E990000297723993289139CE48300A1499EDBC08 +:10E9A0000000E080009D6207E20701076E1CE01C8A +:10E9B000FFFC5809C5E0F80000030A39C4811403BC +:10E9C000ECC9FFF01233C5556E3A6E299529933A7A +:10E9D000EEC5FFF8E0CA0004E04A0024E08B002501 +:10E9E0000A99593AE088001A09098B0909098F39EF +:10E9F000EEC9FFF059BAE0880011090B930B090921 +:10EA00008F59EEC9FFE8E04A0024C071090A930A51 +:10EA1000EEC9FFE0090A8F7A090A12AA680A930A66 +:10EA2000681A931AC0785008089B0A9CF01F0010BF +:10EA30004008EE0600090C13A1A393139129049C2E +:10EA40006E18F1D8C00110468F16CB2814030C3372 +:10EA5000C10572287239932891396E286E39C0F831 +:10EA60008002E2BC8002E8CA0000059C8002E87EC9 +:10EA7000F80000030C33C3356E396E2893289139A2 +:10EA8000E0CA0004EECCFFF8E04A0024E08B00244A +:10EA9000593AE088001A0908990809088F38EECC1D +:10EAA000FFF059BAE08800110908990809088F5841 +:10EAB000EECCFFE8E04A0024C07109089908EECCCA +:10EAC000FFE009088F78090818A8680899086818ED +:10EAD0009918C478089BF01F0039C438049CF01FB3 +:10EAE00000381895C3A06218F8C90008A1C8E20848 +:10EAF00000081039C07172130297E013FFFC000385 +:10EB0000C308E0CA0004E04A0024E08B0020089912 +:10EB10001898593AE0880014130B10AB130B10AB84 +:10EB200059BAE088000D130B10AB130B10ABE04A81 +:10EB30000024C051130A10AA130A10AA130A10AA1B +:10EB4000720A910A72199119C048089BF01F001BA4 +:10EB5000089B049CF01F001B049CC2A80093029712 +:10EB6000E60601096E1858F9E0880016F1D8C001D0 +:10EB7000EDE810088F181298A1A8EE06000BF60910 +:10EB8000000997187218A1A82F8B9318049CF01FE6 +:10EB9000000DC0B8F1D8C001E7E810088F18EE03E7 +:10EBA00000036618A1A88718049CEEC5FFF8F01FA3 +:10EBB00000060A9C2FFDD8328002E87E8002E2BC6B +:10EBC0008003217C8002E8CCD42130081897487655 +:10EBD000169C8D08F01F00065BFCC0516C0858089D +:10EBE000EFF81A03D822000000008CC48002F1E87C +:10EBF0005EFDD703D421217DE06802041697BA6830 +:10EC0000504C500CF01F000B3008512850D848A829 +:10EC100050983FF8BA784898505C501CFAC9FF9059 +:10EC20000E9A700C1A9BF01F00062E9DD822000031 +:10EC30008002EDD08002EBF00000059880030C4CC0 +:10EC4000D421217D4988FAC9FF9016977006580B88 +:10EC5000C064E068008B3FFC8D38C228580BF60872 +:10EC600017005807F9BB01FFEFDBE10850585028A7 +:10EC7000E0680208BA683FF8504C500CBA781A9B0A +:10EC80000C9CF01F000A5BFCC044E068008B8D38D0 +:10EC90005807F9B90100FBF81000F1F91E002E9D8C +:10ECA000D8220000000005988002F5685C5BC0284F +:10ECB0002FFC19885808C050F6081800CFA15EFC38 +:10ECC000580B5E0C5E1DD703F9EB100AE21A000325 +:10ECD000C341780A76095CEAC170123AC151781AC8 +:10ECE00076195CEAC110123AC0F1782A76295CEAFA +:10ECF000C0B0123AC091783A76395CEAC0502F0C15 +:10ED00002F0B123ACE70F9DAC308F7D9C3085E0C9C +:10ED1000161C5E1CF9DAC208F7D9C2085E0C161C74 +:10ED20005E1CF9DAC108F7D9C1085E0C161C5E1C1E +:10ED30005C5A5C59121A5EFA178A1989580A5E09D8 +:10ED400014195E19179A1999580A5E0914195E194F +:10ED500017AA19A9580A5E0914195E1917BA19B920 +:10ED6000580A5E0914195E192FCB2FCCCE6B000008 +:10ED70003008F6080709F8080B092FF85809CFA141 +:10ED80005EFCD703D4014848189B700CF01F0003A9 +:10ED9000D8020000000005988002ED9CD42118974D +:10EDA0001696169CF01F0008F8C5FFFF0E9C0A9BE4 +:10EDB000F01F00061897C0500A9A0C9BF01F000421 +:10EDC0000E9CD8228002EDD08002E2BC8002E736A1 +:10EDD00030091898C0282FF8118AF20A1800CFC1FC +:10EDE000F00C010C5EFC580AC0815EFA580AC0B0F3 +:10EDF0005808C0902FFC2FFB201A19881789F0099A +:10EE00001800CF50198C1788101C5EFC3008103A7F +:10EE10005E0CF6080709F8080B092FF85809CF818E +:10EE2000103A5E0CF8080B092FF8CFBBD401484804 +:10EE3000169A189B700CF01F0003D802000005986A +:10EE40008002EE44D421300816951696C0282FF67D +:10EE5000580AC060201A0D89F0091800CF910A16CF +:10EE6000ECCBFFFFF01F00071897C0800A9B0C9A9D +:10EE7000F01F00053008EE060B080E9CD82200009B +:10EE80008002E2BC8002E736D42118981696580B0F +:10EE9000C0C03007C0481897F8C8FFFF109C0C9BF3 +:10EEA000F01F0005CF91C048F01F000318970E9C7B +:10EEB000D82200008002ECACD421201D4A351897DE +:10EEC0006A04E8F600E85806C351500B350CF01FF1 +:10EED00000206A08E94C00E8F0F900E89326930660 +:10EEE0009316F0F900E893469336F0F900E893663C +:10EEF0009356F0F900E893B693A6F0F900E893D69C +:10EF000093C6F0F900E893F693E6F0F900E8F346CB +:10EF10000044F3460040F0F900E8F346004CF346A5 +:10EF20000048F0F900E8F366001CF0F800E8400B38 +:10EF30009196486870080E9CF0FA00E83019F01FAE +:10EF400000052FFDD8220000000005988002E2A4F1 +:10EF50008002EF54D421580CC041740C580CC2905C +:10EF600018981697113EC0A80C3EC0815809C030B1 +:10EF7000109CCF7B9508B889D8220F365806CF5100 +:10EF8000580EC051950E1C9CD822129810991697B5 +:10EF9000133E0F361C36C0A1580EFC091700F9BBF2 +:10EFA0000100F1FB1E009509D8225806CF31CEEBA7 +:10EFB000D822D703D431203D4CC8502C700116986C +:10EFC000113EE20E0706E2160008CFB1E04E002D1A +:10EFD000C041113E3016C058E04E002BC021113EFA +:10EFE00058095F0C59095F053007F9E51005EE0572 +:10EFF0001800C1E0E04E0030C131118535843783FF +:10F00000E80518005F04E60518005F05E9E510054E +:10F01000EE051800C050119E31092FE8C098580C19 +:10F02000C070E04E0030F9B90008F9B9010AE06C8F +:10F03000FFFFEA1C7FFF3007FC1580000E930E36A1 +:10F04000F80517000E9CEA090D0408925005E20E1F +:10F050000704E1D4C001F9B00137F9B000575010EE +:10F06000FCC500300890E2100004C0814010E9D4D3 +:10F07000C002FC0001055804C1C01235C1A4043C03 +:10F080005FBEFDE713FEE60E1800C101043C5F0EF3 +:10F0900040070E355F97EFEE000EE60E1800C061D8 +:10F0A000B33C3017EA0C000CC0283FF7113ECD0BE3 +:10F0B0005BF7C0E1E069FFFFEA197FFFFC1C8000FD +:10F0C00040205806F20C170032298139C0485806F2 +:10F0D000FBBC0100580AC0705807F9B901FFF1D90B +:10F0E000E10B950B2FDDD8320000049CD401485869 +:10F0F0001499169A189B700CF01F0003D802000098 +:10F10000000005988002EFB43028D6733FFC358BA1 +:10F11000580C5E4C482A950B5EFC000000008CC425 +:10F120003058D6733FFC358B580C5E4C482A950BF3 +:10F130005EFC000000008CC43038D6733FFC358B79 +:10F14000580C5E4C482A950B5EFC000000008CC4F5 +:10F150003048D6733FFC358B580C5E4C482A950BD3 +:10F160005EFC000000008CC430B8D6733FFC358BC9 +:10F17000580C5E4C482A950B5EFC000000008CC4C5 +:10F180003098D6733FFC358B580C5E4C482A950B53 +:10F190005EFC000000008CC4D421210D16971A9B40 +:10F1A000F01F0011C0343FFCC1C84008AE08401831 +:10F1B000AE1840288F184038AE484048AE584058E6 +:10F1C000AE684068AE7840888F4840A88FB840C885 +:10F1D0008FC840D88F5840E8300C8F7840F88F980F +:10F1E0002F0DD8228002F180D40148C87009580937 +:10F1F000C03148B99109489948AA7208F00C000C2E +:10F20000143CE08B0004930CC068F01F000730C86A +:10F2100099083FF8109CD80200007AF800008CC8CA +:10F220000000F00080031D20D431208DFAC4FFBC03 +:10F23000504B682E505812967C0B7005506E580B30 +:10F24000F40B17006803681140493008C2C92FFB4E +:10F25000325C178AF80A18005F1EF00A18005F1C5B +:10F26000FDEC000CF00C1800CF31580AE0800129A9 +:10F27000300C3FFA1890503A18941892F80C003C51 +:10F280001697507C4CDC0F3AF80A070E407C1C0C99 +:10F290004CBEFC0C070E201E500E4CAEFC0C070C96 +:10F2A000507C400C587CE08B00F84C7EFC0C032F0B +:10F2B000368BF60A1800E08000F0371BF60A1800BB +:10F2C000C07034CBF60A1800C051A3B4CE58A5B410 +:10F2D000CE380F8B36CAF40B1800C051A5B4EECB54 +:10F2E000FFFFCDB8A5A4CD88EBD5C005367CF80AC4 +:10F2F0001800E08B0027365BF60A1800C48234FB46 +:10F30000F60A1800C480E08B000C345BF60A180083 +:10F31000C3E0347BF60A1800C3A0344BC088358B99 +:10F32000F60A1800C2C0E08B0007355BF60A180029 +:10F33000C351C318363BF60A1800C2F0364BC0E87A +:10F34000370BF60A1800C250E08B000D36EBF60AB8 +:10F350001800C1F0E08B0014369BF60A1800C1E1DA +:10F36000C0E8375BF60A1800C0A0378BF60A180011 +:10F37000C060373BF60A1800C111C0B8EDB40004F4 +:10F38000C0A0EDB40005C0913020C0883040C068F6 +:10F390003030C0483010C0283000403B5BFBC040DC +:10F3A000E20B0920C7985860E08B00776C0AEACC22 +:10F3B000FFFF486EFC00032F8003EE088003ED641E +:10F3C0008003ECF88003ECAC8003ECCCF4CBFFF8CA +:10F3D0008D0BF4EA0000E605083AC0F8F4CBFFFC18 +:10F3E0008D0B740AE605093AC088F4CBFFF88D0B43 +:10F3F000F4EA0000E605083A0E9B1895C4E8620A94 +:10F400005BFAC0B150195028E06A0080300B029CB2 +:10F41000F01F004D40284019E4CC00010E9B503CE9 +:10F42000F20C0C49C3A8620A5BFAC0B1501950280B +:10F43000E06A0080300B029CF01F00434028401916 +:10F440002012300A0E9BE202092AF2020C49C2582D +:10F4500016976C0AF4CBFFFC8D0B740A0E9BE60525 +:10F46000093A2FF5C1A8F4C20030C068E4020022B6 +:10F470002FF7F40200120F8A580AC0E0230A589AA4 +:10F48000FE98FFF6C0982FF70F8A580AC050230A3B +:10F49000589AFE98FFFA0E9B407C30BAF40C180084 +:10F4A000FE91FEEE4042178C0A325F4AF00C1800C3 +:10F4B0005F1CF9EA000AF00A1800FE91FECB300842 +:10F4C000404E178AE2050021F00A1800FC091710C7 +:10F4D000E6050038069EC2A8620A583AC1E0E089F3 +:10F4E0000007581AC1A0582AC181C058585AC0C034 +:10F4F000C0B5C1386C0AF4CCFFF88D0CF4E2000002 +:10F50000F0E30000C1086C0AF4CCFFF88D0CF4E2C3 +:10F510000000F0E30000C0786C0AF4CCFFFC8D0C16 +:10F52000740A910A2FF52F882FC11235FE9AFFD643 +:10F530001C934052406E85059D0B404BE60B003CF2 +:10F540002F8DD8328002E8BCD42114977428580833 +:10F55000C0419518109CD822F01F000330088F1866 +:10F560008F28D82280032320D431FACD068850A9D1 +:10F57000169014971893580CC06078685808C031DA +:10F58000F01F004E4CE81030C0316600C0A84CD8C7 +:10F590001030C0316610C0584CB81030E7F000028F +:10F5A0008068EDB80003C04160485808C071009BF6 +:10F5B000069CF01F0046E0810B4080681099E2191C +:10F5C000001A58A9C3D18079300AF4091900C385FB +:10F5D000A1D8FB5805B86088FB4805CC60A8FB485B +:10F5E00005D4FAC8FFD4FB4805BCFB4805ACE0686D +:10F5F0000400FB4805C0FB4805B43008FB5905BAB8 +:10F600000E9A40A9FAC7FA54FB4805C4069C0E9B03 +:10F61000F01F002F506CC0950E9B069CF01F002D14 +:10F62000406EF9BE01FF506EFB0805B8EDB800064C +:10F63000E0810B058068A7A8A068E08F0B00300868 +:10F64000FAC4F9F85098FB480678409CFB480674C9 +:10F65000FB48067CFB48068050573FF8FB44067089 +:10F66000FB48052C506C1896069150204055C02838 +:10F670002FF50B88300B325AF60818005F19F40882 +:10F6800018005F181268F6081800CF314059EA09CF +:10F690000107C2E0FAF806780E088909FB480678E7 +:10F6A0008917FAF806742FF8FB4806745878E08931 +:10F6B00000132F84C1A8000080031F388003EF2CA3 +:10F6C0008003EF4C8003EF6C80031C388002F568E8 +:10F6D00080031D2CFACAF990402B029CF01F00A158 +:10F6E000E0810AA6FAC4F9F840680E0850680B8851 +:10F6F0003007EE081800E0800A8AEAC2FFFF3003F4 +:10F700005052FB6706873FFE50745043503E0690B0 +:10F71000508506920C944057C0683FFC0A97503CB5 +:10F72000C02830000F38C0281292E0480063E08003 +:10F7300001CCE0890045E0480039E0890026E04836 +:10F740000031E0840198E048002BE0800101E0896D +:10F75000000FE0480023E080008EE048002AE080AF +:10F76000008CE0480020E0810897C7B8E048002EF0 +:10F77000E08000F1E0480030E080017BE048002DAF +:10F78000E081088ACE28505750420897408540743F +:10F790001092E048004FE0800439E0890008E0481A +:10F7A0000044E081087DE08F01DEE0480055E08004 +:10F7B00005DFE0480058E0810873C428E048006F86 +:10F7C000C430E089001FE0480069C450E089000AA5 +:10F7D000E0480064C400E0480068E081085DC63984 +:10F7E000E048006CE0800163505750420897408524 +:10F7F00040741092E048006EE0810852E08F02ED04 +:10F80000E0480073E0800553E089000BE048007099 +:10F81000E08004F9E0480071E081083EC5295057B6 +:10F8200050420897408540741092E0480075E0808F +:10F8300005A0E0480078E0810833E08F06964CABE5 +:10F84000509BE08F06945057408508975042407473 +:10F85000E08F03DD50574085089750424074C83907 +:10F86000FB380687300AF4081800FE91FF5D320865 +:10F87000C6E8A1A3C58B0F89F2C800305898E08B69 +:10F88000001EEEC8FFFF300B2309F60B002BF20B16 +:10F89000001B1139F2CA0030589AFE98FFF7E04970 +:10F8A0000024FE91FF40E04B0020E08909C1201BAD +:10F8B000FAF90680123BC095C108FAF90680ECCA35 +:10F8C000FFFF1236C1F5C268FAC9F9781097F20B3A +:10F8D000003BF6F2FDA4C358FAC7F9841AD7109773 +:10F8E000FAC2FAD01AD2FAC8FBCC029C1AD8FAC8CB +:10F8F000F974FAC9FFCC40BAF01F001C2FDD780262 +:10F90000C208FACEF9781496FC040038F0F2FDA48F +:10F91000C18840A859F9E0890011F0CBFFFC50AB39 +:10F920007002FACCF978F8090038F142FDA42FF9F9 +:10F930001496FB490680C058700214962FC850A830 +:10F940005802FE94FEF15C32A3A3CEDAFB68068770 +:10F95000CEAA0F38E048002AC0A03009C7D800005E +:10F960008002F5488003EDD08002F2280F88F0C9AC +:10F9700000305899E08B001EEEC5FFFF300B2308C6 +:10F98000F60B002BF00B001B0B38F0C90030589918 +:10F99000FE98FFF7E0480024FE91FEC5E04B0020F2 +:10F9A000E0890946201BFAF80680103BC095C10883 +:10F9B000FAF90680ECCAFFFF1236C1F5C288FACA0E +:10F9C000F978F40B003BF6FBFDA4503BC3C8FAC921 +:10F9D000F9841AD9FAC8FAD01AD8FAC8FBCC029C12 +:10F9E0001AD8FAC8F974FAC9FFCC40BAF01F027AE3 +:10F9F0002FDD780C503CC278FACEF9780E95FC04D5 +:10FA000000381496F0F8FDA45038C1D840A859F930 +:10FA1000E0890014F0CBFFFC700850AB5038FACCF2 +:10FA2000F978403BF8090038F14BFDA42FF90E9509 +:10FA3000FB4906801496C07870090E952FC850397E +:10FA4000149650A840385808FE95FE690A97C6BA21 +:10FA5000F40B00190F38F209002BF0CA0030589A45 +:10FA6000FE98FFF83FFEF20E0C495039C5FAA7B3D5 +:10FA7000C5AA30092308F2090029F00900190F3836 +:10FA8000F0CA0030589AFE98FFF7E0480024FE9133 +:10FA9000FE4DE0490020E08908CBF2C4000130109F +:10FAA000FE9FFE42A7A3FE9FFE3F0F89F0091800AC +:10FAB000C0512FF7A5B3FE9FFE37A5A3FE9FFE34CE +:10FAC000A5B3FE9FFE3150575042089740854074C1 +:10FAD0000C99FAF806805800C1D01037C064FACCEF +:10FAE000F978F8070037C1D8FAC8F9841AD8FAC8E3 +:10FAF000FAD01AD8FAC8FBCC1AD8FAC8F974FAC9DD +:10FB0000FFCC0A9A0E9B029CF01F02332FDD19B81E +:10FB1000C2282FF61039C084FACBF978F6070037DF +:10FB2000EF38FDA7C18840A959F8E0890012F2CA50 +:10FB3000FFFC50AA7209FAC2F978E408003A2FF8DB +:10FB4000F549FDA4FB480680F1D9C008C04813B8A8 +:10FB50002FC950A9300EFB680648FB6E0687E08F60 +:10FB600006A7A5A30C92EDB30005C4D1FAF8068050 +:10FB70005800C1E01037C064FACCF978F8070037B4 +:10FB8000C1F8FAC8F9841AD8FAC8FAD00A9A1AD869 +:10FB9000FAC8FBCC1AD8FAC9FFCCFAC8F9740E9B84 +:10FBA000029CF01F020D2FDD781A7809C288ECC282 +:10FBB000FFFF1036C0A4FACBF978F6070037EEFA4B +:10FBC000FDA8EEF9FDA4C1B840A959F8E0890013D9 +:10FBD000F2CAFFF850AAFAC6F978721AEC08003B8C +:10FBE0007209F74AFDA8F749FDA42FF8FB480680E3 +:10FBF000C068F2C8FFF8721A50A87209049650093A +:10FC0000501ACD58EDB30004C441FAF806805800EC +:10FC1000C1D01037C064FACEF978FC070037C1E8CC +:10FC2000FAC8F9841AD8FAC8FAD00A9A1AD8FAC8BF +:10FC3000FBCC0E9B1AD8029CFAC8F974FAC9FFCC07 +:10FC4000F01F01E52FDD780AC218ECC2FFFF103665 +:10FC5000C084FACCF978F8070037EEFAFDA4C16841 +:10FC600040A959F8E0890010F2CAFFFC50AAFACB6B +:10FC7000F978720AF6080039F34AFDA42FF8FB4818 +:10FC80000680C048720A2FC950A90496501AC8D8D5 +:10FC9000EDB30006C481FAF806805800C1D01037D1 +:10FCA000C064FAC8F978F0070037C1E8FAC8F984E7 +:10FCB0001AD8FAC8FAD01AD8FAC8FBCC1AD8FAC897 +:10FCC000F974FAC9FFCC0A9A0E9B029CF01F01C27C +:10FCD0002FDD9818C238ECC2FFFF1036C084FAC678 +:10FCE000F978EC070037EF08FDA6C18840A959F85C +:10FCF000E0890012F2CAFFFC50AA7209FACEF97824 +:10FD0000FC08003A2FF8F549FDA4FB480680F1D91C +:10FD1000B010C04892182FC950A950180496BF5867 +:10FD20005008C458FAF806805800C1D01037C06493 +:10FD3000FACBF978F6070037C1E8FAC8F9841AD87F +:10FD4000FAC8FAD00A9A1AD8FAC8FBCC0E9B1AD86D +:10FD5000029CFAC8F974FAC9FFCCF01F019F2FDD8D +:10FD6000780AC218ECC2FFFF1036C084FACAF978CC +:10FD7000F4070037EEFAFDA4C16840A959F8E089FC +:10FD80000010F2CAFFFC50AAFAC6F978720AEC0811 +:10FD90000039F34AFDA42FF8FB480680C048720AD8 +:10FDA0002FC950A90496501ABF5A500AFAEA000007 +:10FDB000580A5C2BC0E43008FAEA00003009F00A67 +:10FDC000010AF20B014B32D8FAEB0000FB68068700 +:10FDD0003010E08F04E30C99EDB30005C471FAF81C +:10FDE00006805800C1D01037C064FACAF978F40709 +:10FDF0000037C1D8FAC8F9841AD8FAC8FAD00A9AD2 +:10FE00001AD8FAC8FBCC0E9B1AD8029CFAC8F9740F +:10FE1000FAC9FFCCF01F01702FDD780AC2082FF657 +:10FE20001039C084FAC9F978F2070037EEFAFDA458 +:10FE3000C16840A959F8E0890010F2CAFFFC50AA35 +:10FE4000FAC3F978720AE6080039F34AFDA42FF8DC +:10FE5000FB480680C048720A2FC950A94062049826 +:10FE60009512BF589508FE9FFC03EDB30004C441F2 +:10FE7000FAF806805800C1D01037C064FACEF9787D +:10FE8000FC070037C1D8FAC8F9841AD8FAC8FAD0E2 +:10FE90000A9A1AD8FAC8FBCC0E9B1AD8029CFAC848 +:10FEA000F974FAC9FFCCF01F014C2FDD780AC208A3 +:10FEB0002FF61039C084FACCF978F8070037EEFA3B +:10FEC000FDA4C16840A959F8E0890010F2CAFFFCFE +:10FED00050AAFACBF978720AF6080039F34AFDA461 +:10FEE0002FF8FB480680C048720A2FC950A9406904 +:10FEF0009509FE9FFBBDE2130040C440FAF806805E +:10FF00005800C1D01037C064FAC8F978F00700373C +:10FF1000C1D8FAC8F9841AD8FAC8FAD00A9A1AD8F5 +:10FF2000FAC8FBCC0E9B1AD8029CFAC8F974FAC91D +:10FF3000FFCCF01F01292FDD780AC2082FF61039F7 +:10FF4000C084FAC3F978E6070037EEFAFDA4C16869 +:10FF500040A959F8E0890010F2CAFFFC50AAFAC281 +:10FF6000F978720AE4080039F34AFDA42FF8FB4837 +:10FF70000680C048720A2FC950A9406EB40EFE9F79 +:10FF8000FB77FAF806805800C1D01037C064FACC6D +:10FF9000F978F8070037C1D8FAC8F9841AD8FAC82E +:10FFA000FAD00A9A1AD8FAC8FBCC0E9B1AD8029C2F +:10FFB000FAC8F974FAC9FFCCF01F01072FDD780ADF +:10FFC000C2082FF61039C084FACBF978F60700374B +:10FFD000EEFAFDA4C16840A959F8E0890010F2CA00 +:10FFE000FFFC50AAFAC3F978720AE6080039F34A0E +:10FFF000FDA42FF8FB480680C048720A2FC950A9FB +:02000004800377 +:1000000040629502FE9FFB34A5A30C99EDB3000559 +:10001000C571FAF806805800C2601037C0A4FACE45 +:10002000F978FC070037EEEAFDA4FAEB0000C1887E +:10003000FAC8F9841AD8FAC8FAD01AD8FAC8FBCC88 +:100040001AD8FAC8F974FAC9FFCC0A9A0E9B029C16 +:10005000F01F00E12FDDF8E80000FAE900003000B1 +:10006000E08F03992FF61039C0B4FAC8F978F00779 +:100070000037EEEAFDA4FAEB0000E08F038C40A904 +:1000800059F8E0890016F2CAFFF850AAF2EA000017 +:10009000FAEB0000FACAF978F4080039FAEA00002D +:1000A000F2EBFDA42FF8FB480680E08F0374F2EA20 +:1000B00000002F89FAEB000050A9E08F036CEDB32C +:1000C0000004C141FAF806805800C0801037C60409 +:1000D000FACAF978F4070037C7782FF61039C774D1 +:1000E000FAC9F978F2070037C6F8EDB30006C45133 +:1000F000FAF806805800C1D01037C064FACCF978FD +:10010000F8070037C1D8FAC8F9841AD8FAC8FAD063 +:100110001AD8FAC8FBCC1AD8FAC8F974FAC9FFCCB5 +:100120000A9A0E9B029CF01F00AC2FDD9818C22883 +:100130002FF61039C084FACBF978F6070037EF08AC +:10014000FDA6C18840A959F8E0890012F2CAFFFC57 +:1001500050AA7209FAC2F978E408003A2FF8F54972 +:10016000FDA4FB480680F1D9B010C04892182FC9F1 +:1001700050A95C785018C418FAF806805800C1D00D +:100180001037C064FACCF978F8070037C1D8FAC83C +:10019000F9841AD8FAC8FAD00A9A1AD8FAC8FBCC45 +:1001A0000E9B1AD8029CFAC8F974FAC9FFCCF01F4A +:1001B000008A2FDD780AC2082FF61039C084FACBE6 +:1001C000F978F6070037EEFAFDA4C16840A959F89E +:1001D000E0890010F2CAFFFC50AAFAC2F978720A4C +:1001E000E4080039F34AFDA42FF8FB480680C04814 +:1001F000720A2FC950A9501A300E500E1C90E08F71 +:1002000002CA505750420897408540740C99FAF83A +:1002100006805800C1D01037C064FACCF978F807CE +:100220000037C1D8FAC8F9841AD8FAC8FAD01AD84F +:10023000FAC8FBCC1AD8FAC9FFCCFAC8F9740A9AE2 +:100240000E9B029CF01F00642FDD7809C2182FF668 +:100250001039C084FACBF978F6070037EEF9FDA41F +:10026000C17840A959F8E0890010F2CAFFFC50AAF1 +:10027000FAC2F9787209E408003AF549FDA42FF8AA +:10028000FB480680C058F2C8FFFC50A8720933082A +:10029000300EFB6806844D1C37885019A1B3FB68EB +:1002A0000685500E509CE08F02755057300B50421F +:1002B000FB6B06870897408540740C99FAF8068016 +:1002C0005800C1D01037C064FACAF978F407003773 +:1002D000C1D8FAC8F9841AD8FAC8FAD01AD8FAC814 +:1002E000FBCC0E9B1AD80A9AFAC8F974FAC9FFCC4B +:1002F000029CF01F00392FDD7807C2082FF6103955 +:10030000C084FAC9F978F2070037EEF7FDA4C16896 +:1003100040A959F8E0890010F2CAFFFC50AA720700 +:10032000FAC2F978E4080039F347FDA42FF8FB4836 +:100330000680C04872072FC950A9403E580EC1051B +:100340001C9A300B0E9CF01F0026E08002B6F807C6 +:100350000105403C1835E08902B0E08F02AF0E9CE9 +:100360003000F01F00201895E08F02A9A5A30C997A +:10037000EDB30005C581FAF806805800C2001037B9 +:10038000C064FACBF978F6070037C208FAC8F984D6 +:100390001AD8FAC8FAD00A9A1AD80E9BFAC8FBCC17 +:1003A000029C1AD8FAC8F974FAC9FFCCF01F000AE7 +:1003B0002FDDF8EA0000FAEB0000C3282FF6103911 +:1003C000C124FACAF978F4070037EEE8FDA4FAE987 +:1003D0000000C2688002F2288003EDE4800328A4B4 +:1003E0008002EDD040A959F8E0890015F2CAFFF863 +:1003F00050AAF2EA0000FAEB0000FACAF978F40811 +:100400000039FAEA0000F2EBFDA42FF8FB48068061 +:10041000C078F2EA00002F89FAEB000050A93010F2 +:10042000E08F01B9EDB30004C141FAF8068058002D +:10043000C0801037C604FACAF978F4070037C778C5 +:100440002FF61039C774FAC9F978F2070037C6F8E1 +:10045000EDB30006C451FAF806805800C1D0103739 +:10046000C064FACCF978F8070037C1D8FAC8F98423 +:100470001AD8FAC8FAD01AD8FAC8FBCC1AD8FAC8CF +:10048000F974FAC9FFCC0A9A0E9B029CF01F0086F1 +:100490002FDD9818C2282FF61039C084FACBF978CE +:1004A000F6070037EF08FDA6C18840A959F8E08992 +:1004B0000012F2CAFFFC50AA7209FAC2F978E408E5 +:1004C000003A2FF8F549FDA4FB480680F1D9B01099 +:1004D000C04892182FC950A95C785018C418FAF86F +:1004E00006805800C1D01037C064FACCF978F807FC +:1004F0000037C1D8FAC8F9841AD8FAC8FAD00A9ACB +:100500001AD8FAC8FBCC0E9B1AD8029CFAC8F97408 +:10051000FAC9FFCCF01F00642FDD780AC2082FF65D +:100520001039C084FACBF978F6070037EEFAFDA44B +:10053000C16840A959F8E0890010F2CAFFFC50AA2E +:10054000FAC2F978720AE4080039F34AFDA42FF8D8 +:10055000FB480680C048720A2FC950A9501A300EB5 +:100560003010500EC1794D1C509CEDB30005C541B3 +:10057000FAF806805800C2201037C0A4FACBF978E8 +:10058000F6070037EEE8FDA4FAE90000CF28FAC824 +:10059000F9841AD8FAC8FAD00A9A1AD80E9BFAC85F +:1005A000FBCC029C1AD8FAC8F974FAC9FFCCF01F28 +:1005B000003E2FDDF8EA0000C0C8ECCAFFFF10368D +:1005C000C0B4FAC9F9781496F2070037EEEAFDA430 +:1005D000FAEB0000CCE840A959F8E0890016F2E6F1 +:1005E0000000F2CBFFF8FAE7000050ABFAC6F9784A +:1005F000EC080039FAE60000F2E7FDA42FF81496A3 +:10060000FB480680CB68F2E600002F89FAE700007D +:1006100050A91496CAE8EDB30004C161FAF8068047 +:100620005800C0801037C6A4FACEF978FC0700370E +:10063000C838ECCAFFFF1036E0840082FACCF978A3 +:10064000F8070037C788EDB30006C4D1FAF8068072 +:100650005800C1D01037C064FACCF978F8070037D9 +:10066000C1F8FAC8F9841AD8FAC8FAD01AD8FAC860 +:10067000FBCC1AD8FAC8F974FAC9FFCC0A9A0E9BB7 +:10068000029CF01F00092FDD9818C2A8ECCAFFFFDA +:100690001036C0D4FACBF9781496F6070037EF0875 +:1006A000FDA6C1E88002F2288003EDE440A959F8D4 +:1006B000E0890013F2CBFFFC50AB7209FAC6F9785F +:1006C000EC08003B2FF8F749FDA4FB480680149680 +:1006D000F1D9B010C058921814962FC950A95C785F +:1006E0005018C458FAF806805800C1D01037C064BA +:1006F000FACCF978F8070037C1F8FAC8F9841AD8A3 +:10070000FAC8FAD00E9B1AD8FAC8FBCC0A9A1AD8A3 +:10071000029CFAC8F974FAC9FFCCF01F00C42FDD9F +:10072000780BC248ECCAFFFF1036C094FACBF978B8 +:10073000F60700371496EEFBFDA4C18840A959F8CE +:10074000E0890011F2CBFFFC50ABFAC6F978720BCE +:10075000EC080039F34BFDA42FF81496FB480680F3 +:10076000C058720B14962FC950A9501B300E500E52 +:100770004008401C300B18485F18E7E80008F608EE +:100780001800C0703308FB620685A1B3FB680684BD +:100790003020300AFB6A068740395809C025A7D3A4 +:1007A0004038401758085F194008FAC5F9900E48BC +:1007B00030025F18F3E81008E4081800C5E03018AC +:1007C000F0001800C0603028F0001800C051C3E8E5 +:1007D0000A970690C2C80A97FAE80000F5D8C00345 +:1007E0002D0A0EFAF00B1603F20C1603F7E911DBD3 +:1007F0001899169858085C29CF21FAE90000EDB342 +:100800000000C4613309F20A1800C4200EF9C408BC +:10081000F01F008730A82D0A3009AE8AFAEA0000DE +:10082000F01F008416991498FAE90000EECC00013C +:1008300030A83009FAEA00001897589A5C2BFE9B02 +:10084000FFE91BF800932D08C2080A97FAE8000098 +:10085000F5D8C004409EFC0A070A0EFAF20B1604F3 +:10086000F00A1604F5E911CA1699149858085C297B +:10087000CF01FAE90000C0C85800C091EDB30000F4 +:10088000C061FAC7F9913308AE88C0280A970E15DF +:100890004030C14850425057407410925802E08096 +:1008A00001B6300CFB620648FB6C06873015300041 +:1008B000FAC7F9B8C03840353000069A0699E21AEE +:1008C0000002E2190084508A5079EA000C42FB3899 +:1008D0000687300BF6081800F7B201FF580AF7B286 +:1008E00001FE5809C4514048041850385808E0899E +:1008F000001DC3E8FB4C06784CFE310C890E891CA8 +:10090000FB4B0674587BE08900042F84C0B8FACAF8 +:10091000F990402B029CF01F0049E0810189FAC444 +:10092000F9F8403B210B503BFAF90678FAF80674C7 +:10093000F2CCFFF0F0CBFFFF4BFA403E590EFE9990 +:10094000FFDB1C09890AFB490678891EFB4B0674EC +:10095000587BE08900042F84C0B8FACAF990402B74 +:10096000029CF01F0036E0810163FAC4F9F8FB38FD +:100970000687300CF8081800C1F0FAF80678FAC9B2 +:10098000F9792FF88909FB4806783019FAF80674C6 +:1009900089192FF8FB4806745878E08900042F84E1 +:1009A000C0B8FACAF990402B029CF01F0024E081E5 +:1009B000013FFAC4F9F8408B580BC1F0FAF80678F9 +:1009C000FAC9F97C2FE88909FB4806783029FAF83A +:1009D000067489192FF8FB4806745878E0890004DA +:1009E0002F84C0B8FACAF990402B029CF01F001364 +:1009F000E081011EFAC4F9F8407AE04A0080C5118E +:100A00004049041950395809E0890029C4A848C848 +:100A1000310EFB4C06788908891EFB4B0674587B07 +:100A2000E08900102F84C1788002F228800373408F +:100A30008002D9988003EDF88002F5488003ECE845 +:100A4000FACAF990402B029CF01F0052E08100F09E +:100A5000FAC4F9F8403C210C503CFAF90678FAF84F +:100A60000674F2CCFFF0F0CBFFFF4CBA403E590EBB +:100A7000FE99FFCF1C09890AFB490678891EFB4BAA +:100A80000674587BE08900042F84C0B8FACAF99034 +:100A9000402B029CF01F003FE08100CAFAC4F9F825 +:100AA0000A105800E089001BC3B8FB4C0678310AD5 +:100AB0004B9C891A890CFB4B0674587BE089000417 +:100AC0002F84C0B8FACAF990402B029CF01F003165 +:100AD000E08100AEFAC4F9F82100FAF90678FAF8D4 +:100AE0000674F2CCFFF0F0CBFFFF4ABA5900FE9932 +:100AF000FFDE0009890AFB4906788910FB4B067462 +:100B0000587BE08900042F84C0B8FACAF990402BC2 +:100B1000029CF01F0020E081008BFAC4F9F8FAF87B +:100B2000067889158907F0050005FAF80674FB4573 +:100B300006782FF8FB4806745878E08900042F8463 +:100B4000C0A8FACAF990402B029CF01F0012C6F10F +:100B5000FAC4F9F8E2130004C41040470417580718 +:100B6000E089001CC3B8FB4C067889058913FB4B50 +:100B70000674587BE08900042F84C098009A402BAB +:100B8000029CF01F0004C531FAC4F9F82107C0988F +:100B90008002F5488003ECE84AB53103FAC0F990C9 +:100BA000FAF90678FAF80674F2CCFFF0F0CBFFFF02 +:100BB0004A5A5907FE99FFD90E09890A8917FB4934 +:100BC0000678FB4B0674587BE08A0009FACAF99054 +:100BD000402B029CF01F001DC2A140684049E4095F +:100BE0000C4204085068FAF806785808C080FACA1F +:100BF000F990402B029CF01F0015C1913003FAC4FC +:100C0000F9F8FB430674FE9FF53302934020FAF88F +:100C100006785808C080029CFACAF990009BF01F21 +:100C2000000BC0613008FB480674C0284020806873 +:100C3000EDB80006C0313FF25062406CFE3DF978DD +:100C4000D83200008003EDF88002F548D431FACDA7 +:100C500001E03007503C16961295507A5087505755 +:100C60000E930E905047407E1D8957795809E080B9 +:100C700007A22FFE4D5C507E780C502CF809070817 +:100C8000E2180008C1B06C185808E08900070C9BF6 +:100C9000403CF01F004FCE816C084CCBF0C9FFFFE9 +:100CA000760A1188F4080708EDB80003CDD16C1856 +:100CB0008D0920182FF08D18CE7BE0490025E081AA +:100CC000008906941091109236CA344C358E407BC0 +:100CD0001739507B364BF6091800E08000BBE08BDB +:100CE0000042F8091800E08000B4E08B0021339B3B +:100CF000F6091800E08B01D2330BF6091800E082E8 +:100D00000094325BF6091800C640E08B000B5809CE +:100D1000E080074F324BF6091800E08101BFC8A8F8 +:100D200032ABF6091800E08101B9C6D8FC091800F9 +:100D3000E08000A4E08B000C34CBF6091800C7005B +:100D400034FAF4091800E08101A9C8C835BAF409D9 +:100D50001800E0800098363AF4091800E081019EFE +:100D6000C9E836FBF6091800C7E0E08B0017369B90 +:100D7000F6091800C720E08B0008368BF60918002A +:100D8000E081018CC4F8F4091800C3F036EAF409D4 +:100D90001800E0810183C8D8373AF4091800C1303F +:100DA000E08B0008370AF4091800E0810177C7A832 +:100DB000375AF4091800C5C0378AF4091800E081D1 +:100DC000016DC5B83029C7590000049C800328BCB8 +:100DD0006C185808E08900080C9B403CF01F006428 +:100DE000E08106E0407A6C08F539FFFF118AF20ACB +:100DF0001800E08106E02FF82FF08D086C182018FD +:100E00008D18C32BA5A1C64B407B1789F409180088 +:100E1000C0512FFBA1B1507BC5BBA1A1C59BA1B106 +:100E2000C57BA3A1C55BE4020022A17223021202CA +:100E3000C4FBE0420020E08B0007E4C4000130184E +:100E40003002C46B3168403A9538E08F06ABA1A1FF +:100E50004C8930AE5089C2B84C6C300B508C505B12 +:100E6000C279A1A14C4A3089508A5059C2194C2EDE +:100E700030AC508E505CC1C94BFBA9B1508B310ACC +:100E8000C169301950085019407BFACCFFD4F01FCB +:100E9000003BA7A1507C40194008C0B9A7A1300968 +:100EA000C0894B59E81102205089310E505EC009AB +:100EB000EDB10004FE90FED9EDB10002C441580826 +:100EC000C2500E34C064FACCFE20F8040024C2786C +:100ED000FACAFED40A99F407002A0E98130B14AB31 +:100EE0002FF81034CFC4EEC9FFFFEE0811FFF0C792 +:100EF000FFFF2FE808080807EA080025F2070007A7 +:100F0000FAC8FED4F0040324C1C8E6C8FFFF0E33BC +:100F1000C094FACBFE201093F6040024E8F4FF4CB2 +:100F2000C1086A042FC559F7E089000B1093FACA6B +:100F3000FE20F40700282FF7F144FF4CC02810933F +:100F4000A800C92AEDB10000C1A15808E0800088BE +:100F50000E34C635FACAFED40A99F407002A0E9850 +:100F6000130B14AB2FF81034CFC4C678800328BC01 +:100F70008002EFB480032E6C800329ECE2110002A2 +:100F8000C4805808C2500E34C064FACCFE20F80465 +:100F90000024C278FACAFED40A99F407002A0E98EF +:100FA000130B14AB2FF81034CFC4EEC9FFFFEE08BB +:100FB00011FFF0C7FFFF2FE808080807EA0800251F +:100FC000F2070007FAC8FED4F0040324C1C8E6C83B +:100FD000FFFF0E33C094FACBFE201093F6040024DA +:100FE000E8F4FF4CC1086A042FC559F7E089000BEB +:100FF0001093FACAFE20F40700282FF7F144FF4CA3 +:10100000C0281093E008141F89108908FE9FFE2D48 +:101010005808C2500E34C064FAC9FE20F2040024FD +:10102000C278FACAFED40A99F407002A0E98130B64 +:1010300014AB2FF81034CFC4EEC9FFFFEE0811FF38 +:10104000F0C7FFFF2FE808080807EA080025F207A5 +:101050000007FAC8FED4F0040324C1C8E6C8FFFFA5 +:101060000E33C094FAC2FE201093E4040024E8F486 +:10107000FF4CC1086A042FC559F7E089000B109393 +:10108000FACEFE20FC0700282FF7F144FF4CC028C1 +:1010900010938900FE9FFDE9402CF8090709EDB97E +:1010A0000000C021A1A14C7B30AA508B505A30398E +:1010B0006C1A580AE089000C501950080C9B403CEF +:1010C000F01F004140194008E081056CEDB10006B9 +:1010D000C151C1F86C1A201A8D1A580AE08A00040E +:1010E0008D0CC0B8501950080C9B403CF01F0036C6 +:1010F00040194008E08105562FF06C0A4B3EF4CCB5 +:10110000FFFF7C0B158AF60A070AEDBA0003CE3002 +:101110005829E08001C05839E080031D5819E0804B +:10112000011B029CE21C0010502C5802F9B2000175 +:10113000E3D1C001E080009B580CC0303001C4985E +:101140005808C2500E34C064FACBFE20F6040024C6 +:10115000C278FACAFED40A99F407002A0E98130B33 +:1011600014AB2FF81034CFC4EEC9FFFFEE0811FF07 +:10117000F0C7FFFF2FE808080807EA080025F20774 +:101180000007FAC8FED4F0040324C228E6C8FFFF13 +:101190000E33C094FACAFE201093F4040024E8F43D +:1011A000FF4CC1686A042FC559F7E08900111093FC +:1011B000FAC9FE20F20700282FF7F144FF4CC0883F +:1011C0008002EFB4800328BC0000049C10930891B7 +:1011D00030044D5E7C081034E08004E46C08118912 +:1011E000FAC8FE200808F169FFCC6C1820188D1889 +:1011F0006C082FF8308A8D08300BFACCFE2CF01FCB +:10120000004B2FF4FAC8FE2C0899FACAFE54029B30 +:10121000403CF01F00475BFCE08004C4580CC061F8 +:10122000402C580CC051830CC0385BECC0B0080097 +:10123000402B2012580BF9B40100F7B100FCFBF46D +:1012400000026C185808E089000B0C9B403CF01F12 +:101250000039C0505804C050E08F04A45802CBA1FC +:10126000402A580AFE91FD01C718402E580EC1A011 +:101270006C186C090438C0F4100910128D091001A3 +:101280000C9B403CF01F002BCF405801E08101E651 +:10129000E08F0488040904188D098D180401E08F7B +:1012A00001DD5808C2500E34C064FACCFE20F804A8 +:1012B0000024C278FACAFED40A99F407002A0E98CC +:1012C000130B14AB2FF81034CFC4EEC9FFFFEE0898 +:1012D00011FFF0C7FFFF2FE808080807EA080025FC +:1012E000F2070007FAC8FED4F0040324C258E6C887 +:1012F000FFFF0E33C094FACBFE201093F6040024B7 +:10130000E8F4FF4CC1986A042FC559F7E08900142E +:101310001093FACAFE20F40700282FF7F144FF4C7F +:10132000C0B80000000009AC8002E8BC800328407F +:10133000800328BC1093049A089C0C99301BF01F62 +:1013400000C9E080042FF800000040492FF95049FF +:10135000FE9FFC8B5802F9B200FFEDB10004C261A0 +:1013600030040891C1286C188D0920188D182FF4AD +:101370000832E080008D5808E08900080C9B403C52 +:10138000F01F00B9E08100846C08FACEFE20F0C99D +:10139000FFFF1188FC080008F138FE4CE208180035 +:1013A000CE315804C741E08F04065808C2500E34AD +:1013B000C064FACCFE20F8040024C278FACAFED435 +:1013C0000A99F407002A0E98130B14AB2FF8103467 +:1013D000CFC4EEC9FFFFEE0811FFF0C7FFFF2FE8F3 +:1013E00008080807EA080025F2070007FAC8FED433 +:1013F000F0040324C1C8E6C8FFFF0E33C094FACB43 +:10140000FE201093F6040024E8F4FF4CC1086A049F +:101410002FC559F7E089000B1093FACAFE20F40794 +:1014200000282FF7F144FF4CC02810930891300892 +:10143000C1886C1A201A8D1A133A02CA8D095802F3 +:10144000C1D06C195809E089000D50080C9B403C34 +:10145000F01F00854008C0500831C101E08F03A291 +:101460006C0AFACEFE2014992012158AFC0A000A92 +:10147000F53AFE4CF00A1800CDD1E2040104E080F8 +:10148000039A404C2FFC504C3008A2880800FE9F65 +:10149000FBEC029BE21B0010502B5802F9B200FF3C +:1014A000E3D1C001E08000BC580BC050FACAFE2452 +:1014B000506AC4385808C2500E34C064FAC9FE20BD +:1014C000F2040024C278FACAFED40A99F407002A6A +:1014D0000E98130B14AB2FF81034CFC4EEC9FFFFD6 +:1014E000EE0811FFF0C7FFFF2FE808080807EA0819 +:1014F0000025F2070007FAC8FED4F0040324C1C88F +:10150000E6C8FFFF0E33C094FACEFE201093FC0411 +:101510000024E8F4FF4CC1086A042FC559F7E0899C +:10152000000B1093FACCFE20F80700282FF7F144A7 +:10153000FF4CC0281093506430014CC4C598680813 +:101540001031E080032FFAC8FE200208F169FFCCB9 +:101550006C1820188D186C082FF8308A8D08300B05 +:10156000FACCFE2CF01F00422FF1FAC8FE2C029993 +:10157000FACAFE54406B403CF01F003E5BFCE0802A +:101580000311580CC041406B970CC0385BECC23063 +:10159000406A740CF01F0038C100FAC4FE20020437 +:1015A0002354C088098B201120140C9A403CF01F52 +:1015B00000335801CF81C2C80200402920125809C7 +:1015C000F8011710FBF80006F7B800FCFBF80A0654 +:1015D000FBF100026C185808E089000B0C9B403CA2 +:1015E000F01F0021C0505801E08102DCC1186C08D6 +:1015F00058025F1A11894A2E300C7C08F00907083E +:10160000EC180008F5E80238F8081800C991402BDA +:10161000580BFE91FB2A406A950BC98A402E580E42 +:10162000C300C1086C188D0A20188D182FF10232E2 +:10163000C1405808E08900070C9B403CF01F000A9D +:10164000C0C16C0848ECF0CAFFFF78091188F208A5 +:101650000708EDB80003CE710200FE9FFB060000F4 +:10166000800320B8800328BC000009AC8002E8BCDD +:10167000800328408003274880032FF40000049C47 +:101680005808C2500E34C064FACBFE20F604002481 +:10169000C278FACAFED40A99F407002A0E98130BEE +:1016A00014AB2FF81034CFC4EEC9FFFFEE0811FFC2 +:1016B000F0C7FFFF2FE808080807EA080025F2072F +:1016C0000007FAC8FED4F0040324C1C8E6C8FFFF2F +:1016D0000E33C094FACAFE201093F4040024E8F4F8 +:1016E000FF4CC1086A042FC559F7E089000B10931D +:1016F000FAC9FE20F20700282FF7F144FF4CC0285A +:1017000010930891C1286C1920198D19113902C93B +:101710008D085802C1506C185808E08900070C9BCE +:10172000403CF01F0059C0C16C094D8E12987C0AD4 +:1017300013892012F4090709EDB90003CE51404C7A +:101740002FFC504C08103008E2000000A288FE9FD9 +:10175000FA8CE4C90001E0490026E08B0005300B5B +:10176000506BC058E4CA00273272506A3009FACE72 +:10177000FE54509950A7E8110D80502E35894057DE +:101780006C0A339C158AF80A1800E08B0015338B1D +:10179000F60A1800C4E2330BF60A1800C270E08B98 +:1017A000004532BBF60A1800C51032DBF60A1800F5 +:1017B000C7C1C4C8F20A1800C4E0E08B000AF4CB29 +:1017C0000041305EFC0B1800E08B0070C398361CA3 +:1017D000F80A1800C6A3366BF60A1800E088003134 +:1017E000378EFC0A1800C611C368029BEDB1000BCE +:1017F000C3C15807E06B0200E3DBE031F9B7000832 +:10180000EDB1000AC041E011FA7FC2F8409B406C84 +:101810002FFB580CF7BC0101FBFC1A06F7B201FFC5 +:10182000E011FC7F509BC248499EFC070417C0B8DA +:10183000497CF80704175887E0890006C36858A751 +:10184000E08A0034E011F47FC108EDB10007C2D195 +:10185000A7D1C0B8029BE21B0600E04B0200C251B8 +:10186000A9D13107E8110500402B16CA502B6C1A7C +:10187000201A8D1A580AE08A000D6C0A2FFA8D0A78 +:10188000C1180000800328BC0000049C8003EF08FE +:10189000501950080C9B403CF01F00BD40194008F7 +:1018A000C0412012FE91FF6E505740A7EDB10008D5 +:1018B000C161FAC9FE54402A123AE088000B40295F +:1018C0000C9A137B403C50085029F01F00B240088E +:1018D000FAC9FE5440221232E080016D029AE21AE7 +:1018E0000010E081014B402EBC8A50084059FACBD1 +:1018F000FE54403C40825D1202994008E2190020EB +:10190000C2A05808C1400E34C064FACEFE20FC04C8 +:101910000024C1D9FACAFED40A99F407002A0E9805 +:10192000130B14AB2FF81034CFC4CF68E6C8FFFFF9 +:101930000E33C064FACBFE20F6040024C0796A049A +:101940002FC559F7E08901151093FACAFE20F40754 +:101950000028C0A9EDB10002C4415808C2500E349D +:10196000C064FAC9FE20F2040024C278FACAFED488 +:101970000A99F407002A0E98130B14AB2FF81034B1 +:10198000CFC4EEC9FFFFEE0811FFF0C7FFFF2FE83D +:1019900008080807EA080025F2070007FAC8FED47D +:1019A000F0040324C1C8E6C8FFFF0E33C094FAC296 +:1019B000FE201093E4040024E8F4FF4CC1086A04FC +:1019C0002FC559F7E089000B1093FACEFE20FC07D3 +:1019D00000282FF7F144FF4CC0281093A80CCCA886 +:1019E000F5D1C001C2A05808C1400E34C064FACB82 +:1019F000FE20F6040024CAB8FACAFED40A99F407F5 +:101A0000002A0E98130B14AB2FF81034CFC4C8481B +:101A1000E6C8FFFF0E33C064FACAFE20F4040024B7 +:101A2000C9586A042FC559F7E08900A31093FAC971 +:101A3000FE20F2070028C988E2110002C5904D6916 +:101A400040821232C091FACBFE544059403C5008BB +:101A5000F01F0052C088FACBFE544059403C500859 +:101A6000F01F004F40085808C2500E34C064FACE30 +:101A7000FE20FC040024C278FACCFED40A99F807B0 +:101A8000002C0E98130E18AE2FF81034CFC4EEC9E8 +:101A9000FFFFEE0811FFF0C7FFFF2FE80808080757 +:101AA000EA080025F2070007FAC8FED4F004032470 +:101AB000C1C8E6C8FFFF0E33C094FACCFE201093D5 +:101AC000F8040024E8F4FF4CC1086A042FC559F754 +:101AD000E089000B1093FAC9FE20F20700282FF7C7 +:101AE000F144FF4CC0281093891A890BC438580858 +:101AF000C2500E34C064FAC8FE20F0040024C2783C +:101B0000FACAFED40A99F407002A0E98130B14ABF4 +:101B10002FF81034CFC4EEC9FFFFEE0811FFF0C755 +:101B2000FFFF2FE808080807EA080025F20700076A +:101B3000FAC8FED4F0040324C1C8E6C8FFFF0E3380 +:101B4000C094FAC2FE20E40400241093E8F4FF4C91 +:101B5000C1086A042FC559F7E089000B1093FACE2B +:101B6000FE20FC070028F144FF4C2FF7C0281093FB +:101B7000890C404C2FFC504CFAC8FE54409B10106E +:101B8000402A1600F4000000FE9FF86F800328BC76 +:101B900080032FF480032E6C80032CE480032B340D +:101BA00040495809C0508C68EDB80006C0313FF874 +:101BB0005048404C288DD832D421217D1497189656 +:101BC000129A5807C064E068008B99383FFCC2281D +:101BD0005807EE0C1700F9B901FFEFD9E10C109985 +:101BE000E0680208BA683FF8504B505C500B502C2C +:101BF000BA781A9B0C9CF01F00095BFCC044E0689B +:101C0000008B8D385807F9B90100FBF81000F1F985 +:101C10001E002E9DD82200008002F568D401129883 +:101C20001499169A189B483C780CF01F0003D802B0 +:101C30000000059880031BB8D4214B3818961697DE +:101C4000700C580CC06078685808C031F01F002F25 +:101C50004AF81037C0514AC870087007C0E84AD81F +:101C60001037C0514A8870087017C0784AA81037DA +:101C7000C0414A58700870278E68EDB80003C1E073 +:101C8000EDB80004C3E1EDB80002C1516EDB580BA2 +:101C9000C0A0EEC8FFBC103BC0400C9CF01F001F52 +:101CA00030088FD88E68E018FFDBAE6830088F18D8 +:101CB0006E488F088E68A3B8AE686E485808C0B1E9 +:101CC0008E68E2180280E0480200C0500C9C0E9B17 +:101CD000F01F00138E69F1D9C001C07030088F2841 +:101CE0006E585C388F68C068EDB90001EFF81005D8 +:101CF0008F286E485808C0618E68EDB80007C02173 +:101D0000DC2AD82A0000059880031F388003EF2CB6 +:101D10008003EF4C8003EF6C8003217C8003276CF1 +:101D20004828700C2F4C5EFC00000598D4211697B3 +:101D3000189676485808C7D0580CC060786858087C +:101D4000C031F01F003D4BD81037C0316C07C0A820 +:101D50004BB81037C0316C17C0584BA81037EDF78F +:101D600000028E6A1498EDBA0003C420ABBAAE6AC2 +:101D70006E185808E08900066F085808E08A005A73 +:101D80006EB85808C560E21A1000C0306F55C0F830 +:101D900030196E8B0C9C5D1818955BFCC0816C38FB +:101DA00059D8C4708E68A7A8AE68D8228E68EDB8DE +:101DB0000002C0916E1810156ED85808EFF8101078 +:101DC000EBD8E1156EB80C9C30090A9A6E8B5D1841 +:101DD0008E680A3CC261ABD8300C6E49AE688F1C6D +:101DE0008F09EDB8000CC251EF450054D8226E4562 +:101DF0005805C1F06E04F5DAC0028F05F9B801008C +:101E0000EFF800050A148F28C11808990A9A6EA8DD +:101E10006E8B0C9C5D181814580CE08900078E68B6 +:101E2000A7A83FFCAE68D82218055804FE99FFEF1A +:101E3000D82A000080031F388003EF2C8003EF4C6A +:101E40008003EF6CD401189B580CC0714868487B24 +:101E5000700CF01F0007D8024868700CF01F0003D8 +:101E6000D80200008003ECA880031D2C800325E825 +:101E7000000005985EFC5EFCD401483BF01F0003A7 +:101E8000D80200008003629080032640D42116957A +:101E9000F606105CECCBFFF4F01F00071897C0901B +:101EA0009915300B2F4C0C9A8F2C8F0BF01F0003C1 +:101EB0000E9CD8228002E2BC8002E8BCD42149C832 +:101EC000189670076E685808C0410E9CF01F0019E4 +:101ED000EEC7FF2830056E2C6E18C0689869EA09B5 +:101EE0001900C1202A4C2018CFA76E085808C071CD +:101EF000304B0C9CF01F00108F0CC0306E07CECB07 +:101F000030C88D38D8223008F948004C99089928F3 +:101F1000991899489958996899D899E8F9480048C2 +:101F20003FF8B8783018B868D82200008003ECA8D1 +:101F300080031F3880031E8CD421189678675807B9 +:101F4000C4714A48301599A8F94700D8F94700DC10 +:101F5000F94700E09965F01F00208D0C0C9CF01FE4 +:101F6000001E8D1C0C9CF01F001C6C093048930750 +:101F7000B268931793276C18B27793479357936778 +:101F80009389910791179127494E495B939E93AB93 +:101F9000494A495493BA93C43099B069B07591C411 +:101FA0009147915791679188919E91AB91BA8D2CF1 +:101FB00031289907B868991799273028B87899C4B3 +:101FC0009967999E99AB99BA99479957998CD82254 +:101FD00080031E7880031EBC80032B1080032AD848 +:101FE00080032AAC80032A9CD4014858169AFAC967 +:101FF000FFFC189B700CF01F0003D802000005982E +:1020000080033424D43114901291169310971895AC +:10201000F20A02425802C0310491C418580CC06040 +:1020200078685808C031F01F001F49F81037C031D8 +:102030006A07C0A849D81037C0316A17C05849C8C4 +:102040001037EBF700026E185808C03430088F18AC +:102050000496C148F01F00176E08080308160E9B6F +:10206000F00400040A9C8F04F01F0013C070E40603 +:102070000109F2000D081091C1286E146E08069C2B +:10208000089A109B0836FE9BFFE70C9AF01F000988 +:102090006E080C088F086E180C188F18029CD83226 +:1020A00080031F388003EF2C8003EF4C8003EF6C1C +:1020B0008002E736800328BCD40112981499169A3E +:1020C000189B483C780CF01F0003D80200000598CC +:1020D00080032004D42116951897F01F00234A345A +:1020E00068287016E016FFFCECC8FF91F0050105AA +:1020F000E015FF80EAC50080E045007FE08A00230C +:10210000300B0E9CF01F001A68280C08103CC1A16F +:10211000EA0B11000E9CF01F00165BFCC171300B26 +:102120000E9CF01F00136828F808010958F9E08A8E +:10213000000AA1A9911948F8700948F8F80901099D +:1021400091090E9CF01F000DD82A68280A16A1A636 +:102150009116489870090A190E9C9109F01F000702 +:10216000DA2A00008002E8CA0000059C8002EBC861 +:10217000000009A800007AD08002E8CCD42116968D +:102180001897580BE08000CAF01F004E20864CEADA +:102190006C18742EF9D8C001A1C8EC080009721B94 +:1021A000E01BFFFC1C39C1D1F6080008580CC081A7 +:1021B0006C09121612086C3B6C299729933B1099F5 +:1021C0009526A1A98D194C1972091238C0634C08C3 +:1021D0000E9C700BF01F003F0E9CF01F003FD8229A +:1021E000931B580CC030300CC1086C0EF4C5FFF8BE +:1021F0001C161C086C2E0A3EF9BC0001EDF51003FC +:10220000EBFE1A02FDF51A03F20B000E7C1EEDBE6A +:102210000000C1301608580CC0C14ABE722B2F8E68 +:102220001C3BC071973697268D2B8D3B301CC058B8 +:10223000722B7239932B97391099EC080908A1A9D0 +:102240008D19580CC671E04801FFE08B0013A3986C +:10225000F4080039722B8D398D2B97369326A348BD +:102260007419301BF6080948F3E810089518C528BA +:10227000F00916095849E08B0006F00B16062C8B66 +:10228000C2D85949E08B0005F2CBFFA5C278E049DE +:102290000054E08B0006F00B160C292BC1F8E04926 +:1022A0000154E08B0006F00B160F289BC178F00B51 +:1022B0001612E0490554E088001137EBC0F8000021 +:1022C0008002E8CA0000059C000009A400007ACC46 +:1022D000800320D48002E8CC284BF40B003C782902 +:1022E0001839C0E17418A34B301CF80B094BF1EB03 +:1022F000100B1298951BC0A872291839C060721A69 +:10230000E01AFFFC1438CF9372388D388D2993363C +:1023100091260E9CF01F0002D82200008002E8CC1B +:10232000D431203D14941895169774285808E080ED +:10233000014A9668EDB80003C04176485808C0C10C +:102340000E9B0A9CF01F00A1C0708E68A7A8AE6803 +:1023500030988B38C3598E6368000696E2160002E7 +:10236000C2103003E06204000696C04860036016A5 +:102370002F805806CFC0E0460400EC091780E4091E +:1023800017B0069A6EA86E8B0A9C5D181816580C2A +:10239000E08A0114682818188928E08001141803BD +:1023A000CE9BE7D3C001C07050060C930C91501522 +:1023B0000892CA0806960891C048600360162F80EC +:1023C0005806CFC08E686E241099E2190200C570BD +:1023D0000836C4531099E2190480C4106E4B6E097C +:1023E000161950096E59109CF209001A3028F40889 +:1023F0000C08FAE9000410944009E21C04002FF9CB +:102400000C091238F2041730580CC110089B0A9CB2 +:10241000F01F006F1892C150400A6E4BF01F006D04 +:102420008E68E018FB7FA7B8AE68C0E8089A0A9CDF +:10243000F01F00691892C0816E4B0A9CF01F006764 +:1024400030C88B38CBA8400A4009E80A010AE409E1 +:1024500000088F548F2A8F088F420C940836EC04A2 +:102460001730069B089A6E0CF01F005D6E08080876 +:102470008F086E2808180C948F28C30808365FBA96 +:102480006E0C6E48103C5FB8F5E80008F2081800C2 +:10249000C0E0069B089AF01F00526E0808080E9BC9 +:1024A0008F080A9CF01F004FC190C8786E591236F1 +:1024B000C0A36EA8069A6E8B0A9C5D181894E089DA +:1024C000000EC7B80C9A069BF01F00456E080C085A +:1024D0000C948F086E280C188F28622808188328FF +:1024E000C71008160803C6DB6003601130082F8090 +:1024F00050085801CFA0400A580AC181029A30AB57 +:10250000069CF01F0039F9B80101F9D8E106EDD3B6 +:10251000E116F9B90101FBF91A00F9B80001E3D895 +:10252000E006F9B80001FBF80A000236EC04178057 +:10253000E20417B06E596E25F20500050A345F9A61 +:102540006E0C6E48103C5FB8F5E80008300AF408DD +:102550001800C0E0069B0A9AF01F00216E080A08C6 +:102560000E9B8F08401CF01F001FC180C2681234F0 +:10257000C0A56EA8069A6E8B401C5D181895E08960 +:10258000000EC1B8089A069BF01F00156E080808D7 +:1025900008958F086E2808188F280A16C0710E9BA0 +:1025A000401CF01F0010C091500664280A188528AE +:1025B000C0900A110A03C9EB8E68A7A8AE683FFC59 +:1025C000C028300C2FDDD83280031C388002E2BCDA +:1025D0008002E7368002E8E88003217C8002E87E02 +:1025E00080031D2C800328A4D43130051893169045 +:1025F0000A91F01F00123FF2E6C7FF28C1786E264D +:102600006E142F46C0D88C08E2081900C0808C18C0 +:10261000E4081900C040069C5D1018452A462014A5 +:10262000ECCB000C5804CF046E075807CE91F01F76 +:1026300000040A9CD832000080031E7480031E76BA +:10264000D43130051691F8C7FF280A92F01F001008 +:102650003FF3C1686E266E142F46C0C88C08E4088C +:102660001900C0708C18E6081900C0305D111845BB +:102670002A462014ECCC000C5804CF146E075807DF +:10268000CEA1F01F00040A9CD832000080031E7403 +:1026900080031E76D401201D4848189B1A9A700C9E +:1026A000F01F00032FFDD80200000598800326B01C +:1026B000D431169414921895F01F00204A08700720 +:1026C0005807C050300633DA0C98C0780A9CF01FC7 +:1026D000001D0E9CD8322FF6E8060709F0091800F5 +:1026E0005F1BF40918005F191669F0091800CF4143 +:1026F000C1A8029C0C9A089BF01F0013C1216E0117 +:102700000C010388E6081800C0C148D870080A9C6C +:102710001017A3478507F01F000BE2CCFFFFD8324C +:102720002FC7C02833D36E015801CE410A9CF01F39 +:102730000005029CD8320000800361BC000009B093 +:10274000800361BE8002EDE6E04C00FFE0880003FC +:102750005EFD48487008F00C070CE21C00085EFCA7 +:102760000000049C481C5EFC8003EF8CD42120FDFB +:10277000966816971896E2180002C3C1967BF00B74 +:102780001900C0551A9AF01F002AC0F48E650A98E5 +:10279000ABB8E2150080AE683004E0680400F9B51B +:1027A0000140F0051700C1B84018E218F000E048F9 +:1027B00020005F04E0488000C0D16EB949D81039CC +:1027C000C0918E68E0650400ABA8EF450050AE688C +:1027D000C0688E68E0650400ABB8AE680A9B0C9CCC +:1027E000F01F00158E68C0D1EDB80009C1E0A1B896 +:1027F000AE68EEC8FFB98F488F0830188F58C1589F +:10280000A7B88F4CAE688F5548C88F0C8DA8580458 +:10281000C0C08E7CF01F000AEFF81206F9B9010162 +:10282000F1D9E138EFF81C062F1DD822800362A8E9 +:1028300080032AAC8002E2BC80031E788002F1682B +:10284000D42118971096580AC041149B3019486A31 +:10285000F01F00065BFCC06130088D08E068008A4C +:102860008F38D82280037E208003286C201D5809D1 +:102870005F09580BFA0B1700580A5F18F3E80008B5 +:102880003009F2081800C0303FECC0B8580AC03117 +:10289000149CC078158997091589F00918005F1CE8 +:1028A0002FFD5EFCF7DBC008C068201A19881638B7 +:1028B0005E0C2FFC580ACFA15EFAD703D4211697DD +:1028C0001896580CC06078685808C031F01F00385E +:1028D0004B881037C0316C07C0A84B781037C03117 +:1028E0006C17C0584B581037EDF7000230088F189E +:1028F0008E68EDB80005C590EDB80002C1A0EDB836 +:102900000004C060A7A8AE6830988D38C4D8EDB870 +:102910000003C0B10E9B0C9CF01F0029C4618E689F +:102920008F6CA3D88F2CAE688E68A3A8AE68C14800 +:102930006EDB580BC110EEC8FFBC103BC0400C9CB6 +:10294000F01F0020300C6F088FDC8F185808C04033 +:102950006EF88F08D8226E485808C0510E9B0C9C08 +:10296000F01F00198E68F1D8C002C0604978498B09 +:10297000700CF01F00186E4A6E980C9C8F0A6E59EE +:102980006E8B5D188E688F1CADD8AE68580CE08ACF +:102990000003D82A580CC041A5B8AE68C058A7A8F3 +:1029A000AE6830088F18DC2ADC2A000080031F384C +:1029B0008003EF2C8003EF4C8003EF6C80031D2C11 +:1029C0008003217C8003276C8003ECA8800329D43A +:1029D00080032640D4019868E21800095898C02066 +:1029E000D80AF01F0002D80280031E44D431189E7A +:1029F0001738E048005EC030300AC0381738301A47 +:102A00003009FC090B0A2FF9E0490100CFB1580841 +:102A1000C041F6CC0001D832149632D4EC16000135 +:102A2000300735D5C0381498129BFC080B06F6C940 +:102A3000FFFF178A129CE80A1800C090EA0A1800E3 +:102A4000C1E0EE0A1800CF01169CD832138C103C5E +:102A50005F53E04C005D5F0AE7EA100AEE0A1800D7 +:102A6000C03032D8CE2BF0CAFFFFFC0A000A14C6D1 +:102A70002FF81838CFD52FEB2FE9CDCBD8321498BB +:102A8000F5DBC01FF00C1100104CFC187FF0F5ECCA +:102A900013FCF00C010CBF9C5EFCD703D401967BA9 +:102AA000F01F0002D8020000800353E0D4211697E3 +:102AB000967BF01F00098E681099ADC95BFCEFF999 +:102AC0000C06EFFC1A15E0691000F1D9E138EFF8B7 +:102AD0001C06D822800362D4D421966816971495D8 +:102AE0001294E21801001896C0603029300A967BD3 +:102AF000F01F00068E68ADC808990A9A8E7B0C9C60 +:102B0000AE68F01F0003D822800362D4800353B460 +:102B1000D4211697967BF01F0007C0656F581808E0 +:102B2000EF480054D8228E68ADC8AE68D8220000A5 +:102B30008003694CD431208D4DB8500B7008507C07 +:102B4000502A1295501816970F36401AF4060704AB +:102B5000E2140008CFA1E046002DC0410F3630142A +:102B6000C058E046002BC0210F3658055F085905B4 +:102B70005F0A3009F1EA100AF20A1800C1D0E046F3 +:102B80000030C1210F8A358B378CF60A18005F0B95 +:102B9000F80A18005F0A144BF20B1800C0500F9689 +:102BA00031052FE7C0985808C070E0460030F9B5ED +:102BB0000008F9B5010A5804C0713FF0E061FFFF59 +:102BC000EA117FFFC0483000FC118000EA03141FA7 +:102BD0000A980699009A029BF01F00340699505AF1 +:102BE0000A98009A029BF01F0032069C14981699CE +:102BF000300A30003001149E109212934019F206F0 +:102C0000070BF3DBC001F9B90137F9B90057506977 +:102C1000ECC80030EDBB0002C0804069F7DBC002A9 +:102C2000EC090108580BC2D00A38C2B40430E601DE +:102C300013005FB9F3EA13FAFC0A1800C1F104307B +:102C4000E60113005F09405A14385F9AF5E900095C +:102C5000FC091800C131E005064AEA010249504862 +:102C6000F8000349BF58F20B000B5038FAE0000C93 +:102C70001400E20B0041301AC0283FFA0F36CBFB9C +:102C80005BFAC1715804C0713FF0E061FFFFEA11C7 +:102C90007FFFC0483000FC11800032284079933813 +:102CA000C10800000000049C800373408002D99892 +:102CB0005804C07030083009F0000100F2010141F1 +:102CC00040285808C0B0580AF9B801FFEFD8E10A07 +:102CD000FBFA1A00402940089308009A029B2F8DA6 +:102CE000D8320000D431209D4DE816927008508CE7 +:102CF000505A1295504816970F36404EFC0607035F +:102D0000E2130008CFA1E046002DC0410F3630137A +:102D1000C058E046002BC0210F3658055F08590502 +:102D20005F0A3009F1EA100AF20A1800C1D0E04641 +:102D30000030C1210F8A358B378CF60A18005F0BE3 +:102D4000F80A18005F0A144BF20B1800C0500F96D7 +:102D500031052FE7C0985808C070E0460030F9B53B +:102D60000008F9B5010AEA04141F0A9808993FFA05 +:102D70003FFBF01F003D0899502B503A0A983FFA4C +:102D80003FFBF01F003A300B300830094041E206AB +:102D9000070EE1DEC001ECCC00305800F9B101377C +:102DA000F9B100571C90E2100004C061EC01010C65 +:102DB000FDDEC002C3700A3CC354FAE000080038CC +:102DC000E20913005FBE3000FDEB13FBE00B1800BF +:102DD000C261FAE00008143C5F9E0038E20913006B +:102DE0005F0B3000FDEB000BE00B1800C181F0051C +:102DF0000640EA09024BFAE10000E808034BF6013D +:102E00000001507C5001BF5CFAE00000506C301BA8 +:102E1000FAE800180008F2010049C0283FFB0F360D +:102E2000CB6B5BFBC071322840803FF981383FF8A3 +:102E3000C0985803C07030043005E8080108EA095A +:102E40000149405E580EC080580BF9BA01FFEFDA15 +:102E5000E102405A9502109A129B2F7DD832000051 +:102E60000000049C8002D99880037340D431203D37 +:102E70004C48502C70011698113EE20E0705E215E1 +:102E80000008CFB1E04E002DC041113E3015C058B2 +:102E9000E04E002BC021113E58095F0C59095F0616 +:102EA0003007F9E61006EE061800C1E0E04E0030EB +:102EB000C131118635843783E80618005F04E606C1 +:102EC00018005F06E9E61006EE061800C050119ED5 +:102ED00031092FE8C098580CC070E04E0030F9B9A5 +:102EE0000008F9B9010A3FF3E6090D023007500363 +:102EF0000E9C0E93E20E0704E1D4C001F9B0013735 +:102F0000F9B000575010FCC600300890E2100004E1 +:102F1000C0814010E9D4C002FC0001065804C1C0C1 +:102F20001236C1A4043C5FBEFDE713FEE60E180096 +:102F3000C101043C5F0E40070E365F97EFEE000EB6 +:102F4000E60E1800C061B33C3017EC0C000CC02832 +:102F50003FF7113ECD0B5BF7C061322940200E9C3C +:102F60008139C0485805FBBC0100580AC070580799 +:102F7000F9B901FFF1D9E10B950B2FDDD832000033 +:102F80000000049CD421169776DBEEC8FFBC103BF2 +:102F9000C171E06B0400F01F0015C250E06804002E +:102FA0008FDC8FE8EF380046F8CCFC03B8A8EF3888 +:102FB0000045B898EF380044B8888F0CC1386EE5EA +:102FC000EA041501089AF01F000A1896C0C00A9A70 +:102FD000189BF80500050A9CF01F00068FE48F057A +:102FE0008FD6D82ADC2A00008002E2BC8002E8E802 +:102FF0008002E736D4211697149618955BFBC650CD +:10300000580CC06078685808C031F01F00314B1868 +:103010001036C0316A06C0A84AF81036C0316A16A8 +:10302000C0584AE81036EBF600028C68A5D8AC68A8 +:10303000EDB80002C140EDB80004C461EDB8000372 +:10304000C0B10C9B0A9CF01F0026C3E18C688D6CFC +:10305000A3D88D2CAC688C68A3A8AC680E946CD8EF +:103060005C545808C1006C196CE81039C0650A9CA2 +:103070000C9BF01F001CC2816C0820188D08B084C6 +:103080000897C0C86C495809C0C06C081238E0885D +:10309000000911770837C0518D086C182FF8C12826 +:1030A0006C18ED4800406C088DF8ECC8FFBC8DD85A +:1030B00030388DE8ECC8FFBAED6400468D080897FB +:1030C00030188D18C0283FF70E9CD82280031F3877 +:1030D0008003EF2C8003EF4C8003EF6C80031D2CEA +:1030E00080032F84D431208DFAC4FFBC504B682E4E +:1030F000505812967C0B7005506E580BF40B17004D +:103100006803681140493008C2C92FFB325C178A36 +:10311000F80A18005F1EF00A18005F1CFDEC000C96 +:10312000F00C1800CF31580AE0800129300C3FFA2A +:103130001890503A18941892F80C003C1697507C4E +:103140004CDC0F3AF80A070E407C1C0C4CBEFC0C01 +:10315000070E201E500E4CAEFC0C070C507C400C91 +:10316000587CE08B00F84C7EFC0C032F368BF60A63 +:103170001800E08000F0371BF60A1800C07034CB4E +:10318000F60A1800C051A3B4CE58A5B4CE380F8BA0 +:1031900036CAF40B1800C051A5B4EECBFFFFCDB872 +:1031A000A5A4CD88EBD5C005367CF80A1800E08BC5 +:1031B0000027365BF60A1800C48234FBF60A1800B2 +:1031C000C480E08B000C345BF60A1800C3E0347B4B +:1031D000F60A1800C3A0344BC088358BF60A1800D5 +:1031E000C2C0E08B0007355BF60A1800C351C31854 +:1031F000363BF60A1800C2F0364BC0E8370BF60A29 +:103200001800C250E08B000D36EBF60A1800C1F032 +:10321000E08B0014369BF60A1800C1E1C0E8375B6A +:10322000F60A1800C0A0378BF60A1800C060373BBA +:10323000F60A1800C111C0B8EDB40004C0A0EDB486 +:103240000005C0913020C0883040C0683030C04890 +:103250003010C0283000403B5BFBC040E20B09202F +:10326000C7985860E08B00776C0AEACCFFFF486E85 +:10327000FC00032F8003F2708003F1D48003F16817 +:103280008003EFC88003EFE8F4CBFFF88D0BF4EA7E +:103290000000E605083AC0F8F4CBFFFC8D0B740A79 +:1032A000E605093AC088F4CBFFF88D0BF4EA00007C +:1032B000E605083A0E9B1895C4E8620A5BFAC0B1AD +:1032C00050195028E06A0080300B029CF01F004D1E +:1032D00040284019E4CC00010E9B503CF20C0C49F4 +:1032E000C3A8620A5BFAC0B150195028E06A008096 +:1032F000300B029CF01F0043402840192012300A76 +:103300000E9BE202092AF2020C49C25816976C0A77 +:10331000F4CBFFFC8D0B740A0E9BE605093A2FF5E2 +:10332000C1A8F4C20030C068E40200222FF7F40202 +:1033300000120F8A580AC0E0230A589AFE98FFF636 +:10334000C0982FF70F8A580AC050230A589AFE983F +:10335000FFFA0E9B407C30BAF40C1800FE91FEEE92 +:103360004042178C0A325F4AF00C18005F1CF9EAE1 +:10337000000AF00A1800FE91FECB3008404E178A72 +:10338000E2050021F00A1800FC091710E6050038D4 +:10339000069EC2A8620A583AC1E0E0890007581A9E +:1033A000C1A0582AC181C058585AC0C0C0B5C13840 +:1033B0006C0AF4CCFFF88D0CF4E20000F0E300009E +:1033C000C1086C0AF4CCFFF88D0CF4E20000F0E3C5 +:1033D0000000C0786C0AF4CCFFFC8D0C740A910AD2 +:1033E0002FF52F882FC11235FE9AFFD61C9340521D +:1033F000406E85059D0B404BE60B003C2F8DD8326F +:103400008002E8BCD421149774285808C04195184C +:10341000109CD822F01F000330088F188F28D82264 +:1034200080032320D431FACD06BC5109169114979C +:103430001895F01F0056780C50CC5805C0706A687B +:103440005808C0410A9CF01F00524D281031C0316D +:103450006A01C0A84D081031C0316A11C0584CF83B +:103460001031EBF100028268EDB80003C041624800 +:103470005808C071029B0A9CF01F0049E0810F941C +:1034800082681099E219001A58A9C3D18279300ACA +:10349000F4091900C385A1D8FB5805D06288FB4800 +:1034A00005E462A8FB4805ECFAC8FFBCFB4805D45C +:1034B000FB4805C4E0680400FB4805D8FB4805CC80 +:1034C0003008FB5905D20E9A4109FAC7FA3CFB486D +:1034D00005DC0A9C0E9BF01F003350BCC0950E9B70 +:1034E0000A9CF01F003140BEF9BE01FF50BEFB0830 +:1034F00005D0EDB80006E0810F598268A7A8A26840 +:10350000E08F0F543008FB4806B4FB480690FB4898 +:10351000068CFB4806B03008300950A75078FAC432 +:10352000F9E03FF85059FB440688FB480544129CDB +:10353000506950D950E950B9129740A2325A300818 +:10354000C0282FF20589F00918005F1BF409180044 +:103550005F19F3EB000BF00B1800CF4140ABE40B0D +:103560000106C300FAF806900C08890BFB48069088 +:103570008916FAF8068C2FF8FB48068C5878E089F3 +:1035800000152F84C1C800008003276480031F3802 +:103590008003EF2C8003EF4C8003EF6C80031C381A +:1035A0008003342480031D2CFACAF978029B0A9CFC +:1035B000F01F0071E0810EF4FAC4F9E040BA0C0A81 +:1035C00050BA05893008F0091800E0800ED930099A +:1035D000FB6806BB0E96E4C8FFFF3FFE50945041C7 +:1035E0000E940491508950A8502E50391293129085 +:1035F00010970A92C0783FFC0A97502CC038300BC5 +:10360000503B0F38C0281290F0C90020E049005804 +:10361000E08B0A4A4D9AF409032F50A750800C976B +:103620000495089602924D6940941090404150D9FB +:10363000E08F08AA3008FB3906BBF0091800CE213C +:103640003208C6E8A1A3CDEB0F89F2C80030589824 +:10365000E08B001DEEC8FFFF300B2309F60B002B9B +:10366000F20B001B1139F2CA0030589AFE98FFF78E +:10367000E0490024CC51E04B0020E0890E90201B53 +:10368000FAF906B4123BC095C108FAF906B4ECCABF +:10369000FFFF1236C1F5C268FACEF9441097FC0B51 +:1036A000003BF6F0FD88C3581097FAC8F9501AD8B5 +:1036B000FAC8FAB81AD8FAC8FBB4029A1AD8049C05 +:1036C000FAC8F940FAC9FFB4F01F002E2FDD7800C8 +:1036D000C208FACCF9441496F8040038F0F0FD88DA +:1036E000C188410859F9E0890011F0CBFFFC510B6A +:1036F0007000FACBF944F6090038F140FD882FF943 +:103700001496FB4906B4C058700014962FC851088F +:103710005800FE94FF785C30A3A3C74B32B8FB6817 +:1037200006BBC70B0F38E048002AC0303009C80874 +:103730000F88F0C900305899E08B0026EEC5FFFFD6 +:10374000300B2308F60B002BF00B001B0B38F0C9D5 +:1037500000305899FE98FFF7E0480024FE91FF5191 +:10376000E04B0020E0890E1B201BFAF806B4103B4A +:10377000C115C188800334048003F0048003EDD0B8 +:10378000800330E4FAFA06B4ECC9FFFF1436C1F541 +:10379000C288FACAF944F40B003BF6FBFD88502BB3 +:1037A000C3C8FAC8F9501AD8FAC8FAB81AD8FAC869 +:1037B000FBB4029A1AD8049CFAC8F940FAC9FFB4BB +:1037C000F01F017B2FDD780C502CC27812960E95DD +:1037D000FAC9F944F2040038F0F8FD885028C1D83D +:1037E000410859FAE0890014F0CBFFFC7008510B36 +:1037F0005028FAC6F944402EEC0A0038F14EFD88F4 +:103800002FFA0E95FB4A06B41296C078700C0E95EE +:103810002FC8502C12965108402B580BFE95FEEDE8 +:103820000A97CF0AF20900290F38F4090019F0CAE3 +:103830000030589AFE98FFF83FFAF20A0C495029D6 +:10384000CE4AA7B3CDFA30092308F2090029F009BE +:1038500000190F38F0CA0030589AFE98FFF7E04878 +:103860000024FE91FED2E0490020E0890D98F2C4C8 +:10387000000130195039CC6AA3B3CC4AA7A3CC2A93 +:103880000F8836CEFC081800C0412FF7A5B3CBAA8D +:10389000A5A3CB8AA5B3CB6A50A750800C971090F4 +:1038A00008960495409402920E994041FAF806B4A5 +:1038B000403C580CC1D01036C064FACBF944F6062F +:1038C0000036C1D8FAC8F9501AD8FAC8FAB81AD8C6 +:1038D000FAC8FBB41AD8FAC8F940FAC9FFB4049A76 +:1038E0000C9B0A9CF01F01322FDD19B8C2282FF75C +:1038F0001039C084FACAF944F4060036ED38FD8B5D +:10390000C188410959F8E0890012F2CAFFFC510A46 +:103910007209FAC6F944EC08003A2FF8F549FD8817 +:10392000FB4806B4F1D9C008C04813B82FC95109E3 +:10393000FB680660300E30083012FB6806BB502E64 +:10394000E08F08C450A750800C9704950896029207 +:10395000409410904041A5A3C0A850A750800C9758 +:10396000049508960292409410904041EDB30005F2 +:10397000C511FAF806B4403C580CC1E01036C064DA +:10398000FACBF944F6060036C208FAC8F9501AD83C +:10399000FAC8FAB80C9B1AD8FAC8FBB41AD8FAC9F4 +:1039A000FFB4FAC8F940049A0A9CF01F01012FDD08 +:1039B000781B7809C2B8EECAFFFF1037C0B4FAC945 +:1039C000F9441497F2060036ECFBFD8CECF9FD8807 +:1039D000C1D8410959F8E0890014F2CBFFF8510B26 +:1039E000FAC6F944721BEC08003C7209F94BFD8CD5 +:1039F000F949FD882FF81497FB4806B4C078F2C83F +:103A0000FFF8721B1497510872091698FAE9000022 +:103A1000CAE8EDB30004C171FAF806B4403E580E8E +:103A2000C0801036C694FACCF944F8060036C8288F +:103A3000EECAFFFF1037E0840081FACBF944F606A6 +:103A40000036C778EDB30006C4B1FAF806B4403CBE +:103A5000580CC1D01036C064FACBF944F6060036D3 +:103A6000C1F8FAC8F9501AD8FAC8FAB81AD8FAC878 +:103A7000FBB41AD8FAC8F940FAC9FFB4049A0C9BEF +:103A80000A9CF01F00CB2FDD9818C268EECAFFFF1A +:103A90001037C094FAC9F9441497F2060036ED08BD +:103AA000FD8AC1A8410959F8E0890013F2CBFFFC57 +:103AB000510B7209FAC6F944EC08003B2FF8F7499C +:103AC000FD88FB4806B41497F1D9B010C05892187D +:103AD00014972FC951095018BF585008C488FAF8D4 +:103AE00006B4403C580CC1D01036C064FACBF9443F +:103AF000F6060036C1F8FAC8F9501AD8FAC8FAB86A +:103B00000C9B1AD8FAC8FBB4049A1AD80A9CFAC8B3 +:103B1000F940FAC9FFB4F01F00A62FDD780BC248A8 +:103B2000EECAFFFF1037C094FAC9F944F206003616 +:103B30001497ECFBFD88C188410959F8E089001110 +:103B4000F2CBFFFC510BFAC6F944720BEC080039BA +:103B5000F34BFD882FF81497FB4806B4C058720B3E +:103B600014972FC95109501BBF5B500BFAEA000094 +:103B7000580A5C2BC0E43008FAEA00003009F00A69 +:103B8000010AF20B014B32D8FAEB0000FB6806BBCE +:103B90003018E08F071150A750800C9704950896B5 +:103BA00002924094109040410E99EDB30003C4116D +:103BB000FAF806B4403A580AC1901036C645FAC819 +:103BC000F9501AD8FAC8FAB81AD8FAC8FBB40C9B3C +:103BD0001AD8049AFAC8F940FAC9FFB40A9CF01F2F +:103BE00000742FDD78165076C4882FF71039C0C4C2 +:103BF000FACEF944FC060036ECFCFD8C507CECF669 +:103C0000FD885056C668410959F8E0890010F2CA8B +:103C1000FFF8721B510A7209FACAF944507B5059D5 +:103C2000F4080039405B407AC47872185078C4C8F0 +:103C3000FAF806B4403E580EC2301036C094FACCA2 +:103C4000F944F8060036ECFBFD8C507BCD9BFAC89E +:103C5000F9501AD8FAC8FAB8049A1AD8FAC8FBB4B4 +:103C60000C9B1AD80A9CFAC8F940FAC9FFB4F01F95 +:103C700000502FDD781A507A780C505CC2A82FF7CC +:103C80001039C094FAC9F944F2060036ECF8FD8CFC +:103C90005078CB6B410959F8E0890015F2CAFFF85A +:103CA00072167209510A5059FACEF9445076FC083E +:103CB0000039405B0C9AF2EBFD882FF8FB4806B404 +:103CC000C088721C507CF2C8FFF851087209505924 +:103CD000405B407AF01F00371896C1503008300919 +:103CE000405B407AF01F0034C04032D8FB6806BB0E +:103CF0004B284B36A7D3E0400047F00617A03032E0 +:103D0000E08F06E7405B407AF01F002EC0C05026CF +:103D10004AD84AE6A7D3E0400047F00617A0303261 +:103D2000E08F06DD402A5BFAC04130695029C11896 +:103D3000E04000475F09E04000675F08F3E81008D3 +:103D4000F8081800C06040285808F9B80001502849 +:103D500040784059FAE90694A9A3FAF8069458085D +:103D6000C065405E300C506E509CC078405B32DACB +:103D7000EE1B8000509A506BE04000465F09E04027 +:103D800000665F08F3E810085048C0404022303910 +:103D9000C228E04000455F09E04000655F084046FA +:103DA0001049EC091800C1314022C148800330E4B9 +:103DB0008003697880036FC08003F2408003F2447F +:103DC00080032A7E8003F2488003F24C402EFCC21E +:103DD000FFFF3029FAC8F95C1AD8FAC8F9541AD882 +:103DE000FAC8F94C0A9C1AD80498409B40AAF01FC4 +:103DF00001E0E04000475F19E04000675F18189657 +:103E00002FDDF3E80008C041EDB30000C301EC0270 +:103E1000000C503C404B580BC1500D893308F00941 +:103E20001800C0B130083009406B407AF01F01D152 +:103E3000FBB20001FBF20BAB403AFAF806AC100AF9 +:103E4000503A406B30083009407AF01F01CAC090E8 +:103E50004039FB4906A4C05810C9FB4806A4C02835 +:103E60003309FAF806A4403E1C38CF73E0400047FF +:103E70005F09E04000675F08F3E81008FAF906A45C +:103E80000C1950695808C0B0FAF806AC5BD8C05598 +:103E9000402C1838E08A006A2020C058E0400065B5 +:103EA000E0890046FAFB06ACFB60069C201BFB4B3E +:103EB00006ACC0475C3B32D8C02832B8FB68069DD0 +:103EC000589BE08A001DFAC9FA3530AA12980E9C58 +:103ED0000C92F60A0C060E9B2D0B10FB0C9B5896B1 +:103EE000FE99FFF92D0B1897049610FBFACAF96298 +:103EF000C038113B14CB1238CFD3C0982D0B3308E8 +:103F0000FB6B069FFB68069EFACAF960FAC8F96463 +:103F1000F408010850E81092406B1602581BE08923 +:103F20000005EDB30000C3512FF2C338E040006636 +:103F3000C1C1FAF206AC5802E08A000C402A580AC5 +:103F4000C041EDB30000C2512FF240291202C0B8A7 +:103F500040285808C061EDB30000C0303012C1984D +:103F600040222FE23660C158FAF206AC406E1C3295 +:103F7000C065EDB30000F7B200FFC0A8E40811026D +:103F8000406C5802F00217A0F9B20901180236700D +:103F9000409B580BE080059D32D8FB6806BBE08F44 +:103FA000059C50A704950C970292089640414094B6 +:103FB0000E99EDB30005C481FAF806B4403E580EE0 +:103FC000C1D01036C064FACCF944F8060036C1D826 +:103FD000FAC8F9501AD8FAC8FAB8049A1AD8FAC81E +:103FE000FBB40C9B1AD80A9CFAC8F940FAC9FFB472 +:103FF000F01F01612FDD780AC2082FF71039C08445 +:10400000FACBF944F6060036ECFAFD88C16841099E +:1040100059F8E0890010F2CAFFFC510AFAC6F944C7 +:10402000720AEC080039F34AFD882FF8FB4806B401 +:10403000C048720A2FC9510940BE1C98951EBF582E +:104040009508FE9FFA7CEDB30004C480E2130040A3 +:10405000C450FAF806B4403C580CC1D01036C064C5 +:10406000FACBF944F6060036C1D8FAC8F9501AD886 +:10407000FAC8FAB8049A1AD8FAC8FBB40C9B1AD832 +:104080000A9CFAC8F940FAC9FFB4F01F013B2FDDC2 +:10409000780AC2082FF71039C084FACAF944F40626 +:1040A0000036ECFAFD88C168410959F8E089001032 +:1040B000F2CAFFFC510AFAC6F944720AEC08003948 +:1040C000F34AFD882FF8FB4806B4C048720A2FC98E +:1040D000510940BEB40EFE9FFA32FAF806B4403CD5 +:1040E000580CC1D01036C064FACBF944F60600363D +:1040F000C1D8FAC8F9501AD8FAC8FAB8049A1AD826 +:10410000FAC8FBB40C9B1AD80A9CFAC8F940FAC941 +:10411000FFB4F01F01192FDD780AC2082FF71039FC +:10412000C084FACAF944F4060036ECFAFD88C16886 +:10413000410959F8E0890010F2CAFFFC510AFAC699 +:10414000F944720AEC080039F34AFD882FF8FB485D +:1041500006B4C048720A2FC9510940BE950EFE9F91 +:10416000F9EE50A750800C9704950896029240945F +:1041700010904041A5A3C0A850A750800C9704956B +:1041800008960292409410904041EDB30005C5D1CD +:10419000FAF806B4403C580CC2601036C0A4FACB02 +:1041A000F944F6060036ECE8FD88FAE90000C1881B +:1041B000FAC8F9501AD8FAC8FAB8049A1AD80C9B57 +:1041C000FAC8FBB40A9C1AD8FAC8F940FAC9FFB475 +:1041D000F01F00E92FDDF8EA0000FAEB00003008DC +:1041E000E08F03E7EECAFFFF1037C0B4FAC9F94405 +:1041F0001497F2060036ECEAFD88FAEB0000C1885D +:10420000410959F8E0890018F2E60000F2CBFFF806 +:10421000FAE70000510BFAC6F944EC080039FAE657 +:104220000000F2E7FD882FF81497FB4806B44038E9 +:10423000E08F03BFF2E600004038FAE700002F8964 +:1042400014975109E08F03B5EDB30004C161FAF88A +:1042500006B4403E580EC0801036C674FACCF944FD +:10426000F8060036C808EECAFFFF1037C7F4FACBCD +:10427000F944F6060036C768EDB30006C4A1FAF8A3 +:1042800006B4403C580CC1D01036C064FACBF94497 +:10429000F6060036C1F8FAC8F9501AD8FAC8FAB8C2 +:1042A0001AD8FAC8FBB41AD8FAC8F940FAC9FFB448 +:1042B000049A0C9B0A9CF01F00B02FDD9818C2686E +:1042C000EECAFFFF1037C094FAC9F9441497F206FA +:1042D0000036ED08FD8AC1A8410959F8E0890013AC +:1042E000F2CBFFFC510B7209FAC6F944EC08003B13 +:1042F0002FF8F749FD88FB4806B41497F1D9B010A0 +:10430000C058921814972FC951095C785018C46886 +:10431000FAF806B4403C580CC1D01036C064FACB51 +:10432000F944F6060036C1F8FAC8F9501AD8FAC8A6 +:10433000FAB80C9B1AD8FAC8FBB4049A1AD80A9C8B +:10434000FAC8F940FAC9FFB4F01F008B2FDD780BD3 +:10435000C248EECAFFFF1037C094FAC9F944F2060A +:1043600000361497ECFBFD88C188410959F8E089B3 +:104370000011F2CBFFFC510BFAC6F944720BEC08AA +:104380000039F34BFD882FF81497FB4806B4C0584A +:10439000720B14972FC95109501B300E500E1C98E8 +:1043A000E08F030750A750800C970495089602925F +:1043B000409440410E99FAF806B4403C580CC1D0E4 +:1043C0001036C064FACBF944F6060036C1D8FAC8F4 +:1043D000F9501AD8FAC8FAB81AD8FAC8FBB41AD8D9 +:1043E000FAC9FFB4FAC8F940049A0C9B0A9CF01F62 +:1043F00000622FDD7809C2182FF71039C084FACA7D +:10440000F944F4060036ECF9FD88C178410959F801 +:10441000E0890010F2CAFFFC510AFAC6F944720999 +:10442000EC08003AF549FD882FF8FB4806B4C0585F +:10443000F2C8FFFC510872093308FB6806B83788D8 +:10444000300EFB6806B94CDC5019A1B3500E50DC9D +:1044500030283780E08F02AD50A750801090300890 +:10446000FB6806BB0C970495089602924094404165 +:104470000E99FAF806B4403B580BC1D01036C06410 +:10448000FACAF944F4060036C1D8FAC8F9501AD865 +:10449000FAC8FAB81AD8FAC8FBB40C9B1AD8049A0E +:1044A000FAC8F940FAC9FFB40A9CF01F00332FDDA7 +:1044B0007806C2082FF71039C084FAC9F944F20609 +:1044C0000036ECF6FD88C168410959F8E089001012 +:1044D000F2CAFFFC510A7206FACEF944FC08003910 +:1044E000F346FD882FF8FB4806B4C04872062FC972 +:1044F0005109402C580CC105189A300B0C9CF01F28 +:104500000020E08002E9F8060102402B1632E08923 +:1045100002E3E08F02DE300A0C9C502AF01F0019E3 +:104520001892E08F02DC50A750800C9704950896F3 +:104530000292409410904041A5A3C0A850A750807B +:104540000C97049508960292409410904041EDB368 +:104550000005C611FAF806B440395809C2C0103631 +:10456000C124FAC8F944F0060036C2E88003552C8D +:1045700080036F32800330E48003EDE4800328A4DD +:104580008002EDD0FAC8F9501AD8FAC8FAB81AD889 +:10459000FAC8FBB41AD8FAC8F940FAC9FFB4049AA9 +:1045A0000C9B0A9CF01F00C82FDDF8E80000FAE918 +:1045B0000000C2E8EECAFFFF1037C0B4FAC8F944E1 +:1045C0001497F0060036ECEAFD88FAEB0000C2080A +:1045D000410959F8E0890016F2E60000F2CBFFF835 +:1045E000FAE70000510BFAC6F944EC080039FAE684 +:1045F0000000F2E7FD882FF81497FB4806B4C08846 +:10460000F2E600002F89FAE70000510914973018EC +:10461000E08F01CFEDB30004C161FAF806B4403E6B +:10462000580EC0801036C674FACCF944F80600362D +:10463000C808EECAFFFF1037C7F4FACBF944F606F4 +:104640000036C768EDB30006C4A1FAF806B4403CD2 +:10465000580CC1D01036C064FACBF944F6060036C7 +:10466000C1F8FAC8F9501AD8FAC8FAB81AD8FAC86C +:10467000FBB41AD8FAC8F940FAC9FFB4049A0C9BE3 +:104680000A9CF01F00912FDD9818C268EECAFFFF48 +:104690001037C094FAC9F9441497F2060036ED08B1 +:1046A000FD8AC1A8410959F8E0890013F2CBFFFC4B +:1046B000510B7209FAC6F944EC08003B2FF8F74990 +:1046C000FD88FB4806B41497F1D9B010C058921871 +:1046D00014972FC951095C785018C468FAF806B4C9 +:1046E000403C580CC1D01036C064FACBF944F606F1 +:1046F0000036C1F8FAC8F9501AD8FAC8FAB80C9BB3 +:104700001AD8FAC8FBB4049A1AD80A9CFAC8F94015 +:10471000FAC9FFB4F01F006C2FDD780BC248EECA57 +:10472000FFFF1037C094FAC9F944F2060036149717 +:10473000ECFBFD88C188410959F8E0890011F2CBF2 +:10474000FFFC510BFAC6F944720BEC080039F34B2D +:10475000FD882FF81497FB4806B4C058720B1497C5 +:104760002FC95109501B300E3018500EC21950A7D6 +:1047700050800C970495089602924D4C40941090EE +:10478000404150DCEDB30005C551FAF806B4403B9A +:10479000580BC2201036C0A4FACAF944F4060036F9 +:1047A000ECE8FD88FAE90000CF58FAC8F9501AD8A9 +:1047B000FAC8FAB8049A1AD80C9BFAC8FBB40A9C37 +:1047C0001AD8FAC8F940FAC9FFB4F01F003F2FDD2C +:1047D000F8EA0000C0C8EECAFFFF1037C0B4FAC93B +:1047E000F9441497F2060036ECEAFD88FAEB000073 +:1047F000CD18410959F8E0890016F2E60000F2CB25 +:10480000FFF8FAE70000510BFAC6F944EC0800394A +:10481000FAE60000F2E7FD882FF81497FB4806B48B +:10482000CB98F2E600002F89FAE7000051091497AF +:10483000CB18EDB30004C171FAF806B4403E580E2F +:10484000C0801036C6C4FACCF944F8060036C85801 +:10485000EECAFFFF1037E0840084FACBF944F60675 +:104860000036C7A8EDB30006C4E1FAF806B4403C30 +:10487000580CC1D01036C064FACBF944F6060036A5 +:10488000C1F8FAC8F9501AD8FAC8FAB81AD8FAC84A +:10489000FBB41AD8FAC8F940FAC9FFB4049A0C9BC1 +:1048A0000A9CF01F00092FDD9818C2A8EECAFFFF6E +:1048B0001037C0D4FAC9F9441497F2060036ED084F +:1048C000FD8AC1E8800330E48003EDE4410959F832 +:1048D000E0890013F2CBFFFC510B7209FAC6F944D0 +:1048E000EC08003B2FF8F749FD88FB4806B4149705 +:1048F000F1D9B010C058921814972FC951095C789B +:104900005018C468FAF806B4403C580CC1D01036B0 +:10491000C064FACBF944F6060036C1F8FAC8F9507B +:104920001AD8FAC8FAB80C9B1AD8FAC8FBB4049A79 +:104930001AD80A9CFAC8F940FAC9FFB4F01F00C996 +:104940002FDD780BC248EECAFFFF1037C094FAC9BA +:10495000F944F20600361497ECFBFD88C188410942 +:1049600059F8E0890011F2CBFFFC510BFAC6F9446B +:10497000720BEC080039F34BFD882FF81497FB48B5 +:1049800006B4C058720B14972FC95109501B300E32 +:10499000500E4008401C18485F18E7E80008C07037 +:1049A0003308FB6006B9A1B3FB6806B830283009AC +:1049B000FB6906BB402B580BC025A7D3402A4009F2 +:1049C000580A5F1A4016FAC2F9780C495F19F5E9DE +:1049D0001009C5C03019F2081800C0603029F2086B +:1049E0001800C041C3C80496C3080496FAE8000042 +:1049F000F5D8C0032D0A0CFAF00B1603F20C1603BF +:104A0000F7E911DB1899169858085C29CF21FAE9C3 +:104A10000000EDB30000C4513309F20A1800C410BD +:104A20000CF9C3F8FAEA000030A83009F01F008E34 +:104A300030A82D0A3009AC8AFAEA0000F01F008B7A +:104A400016991498FAE900002016FAEA0000589A1C +:104A50005C2BFE9BFFE91BF82D08C2080496FAE8C0 +:104A60000000F5D8C00440DEFC0A070A0CFAF20B7D +:104A70001604F00A1604F5E911CA16991498580894 +:104A80005C29CF01FAE90000C0C85808C091EDB315 +:104A90000000C061FAC6F9793308AC88C0280496D2 +:104AA0000C12C1C850A7508040940C9710900495E8 +:104AB00040415808E0800464FB680660300C300810 +:104AC0003012FB6806BB502CFAC6F9A0C078300B38 +:104AD000502BC0484022300A502A4029E4090C4992 +:104AE000FB3806BB5039069E3009E21E0002F20870 +:104AF0001800FBF81003F7B801FFFBF81A03069B38 +:104B0000580EFBFC1003F7BC01FEFBFC1A03E21B72 +:104B1000008450FE509BC451408A4039121A504ABA +:104B2000580AE089001FC3D82F092FF84D0E310C09 +:104B3000FB490690890E891CFB48068C5878E08951 +:104B400000042F84C0B8FACAF978029B0A9CF01FAF +:104B50000049E0810425FAC4F9E0404B210B504B99 +:104B6000FAF90690FAF8068C4C1A404E590EFE9946 +:104B7000FFDD1C092FF8890AFB490690891EFB48B6 +:104B8000068C5878E08900042F84C0B8FACAF978F6 +:104B9000029B0A9CF01F0037E0810402FAC4F9E08E +:104BA0003009FB3806BBF2081800C1F0FAF806908D +:104BB000FAC9F9452FF88909FB4806903019FAF827 +:104BC000068C89192FF8FB48068C5878E089000478 +:104BD0002F84C0B8FACAF978029B0A9CF01F0025FE +:104BE000E08103DEFAC4F9E040FC580CC1F0FAF8A9 +:104BF0000690FAC9F9482FE88909FB480690302940 +:104C0000FAF8068C89192FF8FB48068C5878E08949 +:104C100000042F84C0B8FACAF978029B0A9CF01FDE +:104C20000015E08103BDFAC4F9E0409BE04B008031 +:104C3000C511408A4039121A504A580AE089002B9F +:104C4000C4982F092FF848CE310CFB490690890EE5 +:104C5000891CFB48068C5878E08900102F84C178A5 +:104C6000800330E4800373408002D9988003F250BF +:104C7000800334048003F260FACAF978029B0A9C2C +:104C8000F01F004CE081038CFAC4F9E0404B210B8B +:104C9000504BFAF90690FAF8068C4C7A404E590EB1 +:104CA000FE99FFD11C092FF8890AFB490690891E3D +:104CB000FB48068C5878E08900042F84C0B8FACAF3 +:104CC000F978029B0A9CF01F003BE0810369FAC45B +:104CD000F9E0402C041C502C580CE089001FC3D86C +:104CE0002F092FF84B4B310AFB490690890B891A83 +:104CF000FB48068C5878E08900042F84C0B8FACAB3 +:104D0000F978029B0A9CF01F002BE0810349FAC44A +:104D1000F9E0402921095029FAF90690FAF8068CA1 +:104D20004A5A402E590EFE99FFDD1C092FF8890AB8 +:104D3000FB490690891EFB48068C5878E0890004E0 +:104D40002F84C0B8FACAF978029B0A9CF01F001998 +:104D5000E0810326FAC4F9E0EDB30008C0B0FAF828 +:104D6000069089128906F0020002FB420690E08F4D +:104D700001DBE0400065E08A01DD30083009405B7E +:104D8000407AF01F000EC7E0FAF8069048C92FF8E5 +:104D90008909FB4806903019FAF8068C89192FF812 +:104DA000FB48068C5878E089000D2F84C14800002C +:104DB000800334048003F26080036F328003A6C056 +:104DC000FACAF978029B0A9CF01F0078E08102E899 +:104DD000FAC4F9E0FAF806AC406C1838C055EDB3E7 +:104DE0000000E081026DFAF806902FF840CBFB48F6 +:104DF00006903019FAF8068C890B2FF88919FB48B0 +:104E0000068C5878E08900042F84C0B8FACAF97873 +:104E1000029B0A9CF01F0065E08102C2FAC4F9E01F +:104E2000406620165806E089001DE08F02492F09D0 +:104E30002FF8FB49069089028910FB48068C5878A8 +:104E4000E08900042F84C0B8FACAF978029B0A9C52 +:104E5000F01F0056E08102A4FAC4F9E02106C03830 +:104E60004D323100FAF90690FAF8068C4D0A5906CF +:104E7000FE99FFDF0C09890AFB4906902FF8891675 +:104E8000C559FAFA06AC580AE0890096FAF8069075 +:104E90004C892FF88909FB4806903019FAF8068CDE +:104EA00089192FF8FB48068C5878E08900042F8474 +:104EB000C0B8FACAF978029B0A9CF01F003CE08156 +:104EC000026FFAC4F9E0FAF806AC5808C081406AEB +:104ED000580AC051EDB30000E08101F240C9FAF870 +:104EE00006902FF88909FB4806903019FAF8068CCD +:104EF00089192FF8FB48068C5878E08900042F8424 +:104F0000C0B8FACAF978029B0A9CF01F0028E08119 +:104F10000247FAC4F9E0FAF206AC5C325802E089C2 +:104F2000001DC3B82F092FF8310EFB4906908900E8 +:104F3000891EFB48068C5878E08900042F84C0B88D +:104F4000FACAF978029B0A9CF01F0018E081022837 +:104F5000FAC4F9E02102C0284950FAF90690FAF89B +:104F6000068C493A5902FE99FFDF04092FF8890A95 +:104F7000FB4906908912FB48068C5878E0890004AA +:104F80002F84C0B8FACAF978029B0A9CF01F000768 +:104F9000E0810206FAC4F9E0406CFAF8069089064E +:104FA000891C1808CBE80000800334048003F260F9 +:104FB0008003A6C0FAF90690FAF8068C406B163A00 +:104FC000C6D516092FF88906FB490690891BFB48B0 +:104FD000068C5878E08900042F84C0B8FACAF978A2 +:104FE000029B0A9CF01F006FE08101DAFAC4F9E02D +:104FF000FAF606AC406A14165806E089001CC3B8DD +:105000002F092FF8FB49069089028910FB48068C6E +:105010005878E08900042F84C0B8FACAF978029B56 +:105020000A9CF01F0060E08101BBFAC4F9E0210690 +:10503000C0384DD23100FAF90690FAF8068C4DAA24 +:105040005906FE99FFDF0C092FF8890AFB490690E3 +:105050008916FB48068C5878E08900042F84C0B874 +:10506000FACAF978029B0A9CF01F004EE081019871 +:10507000FAC4F9E0EDB30000E081012240C9FAF87A +:1050800006902FF88909FB4806903019FAF8068C2B +:1050900089192FF8FB48068CC04914092FF8FB49E1 +:1050A00006908906891AFB48068C5878E089000426 +:1050B0002F84C0B8FACAF978029B0A9CF01F003905 +:1050C000E081016EFAC4F9E040C88908FAF8069058 +:1050D0002FF83019FB4806908919FAF8068C2FF83A +:1050E000FB48068CFAF206AC5878E08900042F845D +:1050F000C0B8FACAF978029B0A9CF01F002AE08126 +:10510000014FFAC4F9E00406FAF806AC8906FAF988 +:1051100006904066406E1016F208010889161C08B9 +:10512000FB480690FAF8068C2FF8FB48068CCB98C3 +:10513000406C581CE0890006EDB30000E081008758 +:10514000FAF806902FF83019FB4806908906FAF80D +:10515000068C89192FF8FB48068C5878E0890004E2 +:105160002F84C0B8FACAF978029B0A9CF01F000D80 +:10517000E0810116FAC4F9E0FAF806902FF840CB66 +:10518000FB4806903019FAF8068C890B2FF889191C +:10519000FB48068C5878E08900092F84C10800007C +:1051A000800334048003F260FACAF978029B0A9CF7 +:1051B000F01F006FE08100F4FAC4F9E03008300914 +:1051C000405B407AF01F006B40682018580CC0D13B +:1051D0002FF689188906FAF606901006FAF8068C5A +:1051E000FB4606902FF8C2F810965808E089001C7C +:1051F000C4982F092FF8FB49069089028910FB48B3 +:10520000068C5878E08900042F84C0B8FACAF9786F +:10521000029B0A9CF01F0056E08100C2FAC4F9E02C +:105220002106C0384D423100FAF90690FAF8068C92 +:105230004D1A5906FE99FFDF0C09890AFB490690B1 +:105240002FF88916FB48068CC0E8FAF806902FF86C +:105250003019FB4806908906FAF8068C89192FF850 +:10526000FB48068C5878E08900042F84C0B8FACA3D +:10527000F978029B0A9CF01F003EE0810091FAC47D +:10528000F9E040EAFAF806901408FAC9F964FB4814 +:105290000690891AFAF8068C89092FF8FB48068CC3 +:1052A0005878E08900042F84C0A8FACAF978029BD4 +:1052B0000A9CF01F002FC731FAC4F9E0E213000482 +:1052C000C3D04086403912165806E089001AC368D8 +:1052D0002F092FF8FB49069089038912FB48068C99 +:1052E0005878E08900042F84C098009A029B0A9C99 +:1052F000F01F001FC541FAC4F9E02106C05849F368 +:105300003102FAC0F978FAF90690FAF8068C49BA2F +:105310005906FE99FFDF0C092FF8890A8916FB4907 +:105320000690FB48068C5878E08A0009FACAF9789A +:10533000029B0A9CF01F000EC32140BC4036408EE9 +:10534000EC0E0C48100C50BCFAF806905808C080BF +:10535000FACAF978029B0A9CF01F0005C201300BC3 +:10536000FAC4F9E0FB4B068CFE9FF0E9800334049D +:1053700080036F328003F2608003F250FAF80690E7 +:105380005808C0800A9CFACAF978029BF01F0009ED +:10539000C0613008FB48068CC02840418268EDB8E7 +:1053A0000006C0313FFA50BA40BCFE3DF944D83245 +:1053B00080033404D42116981897109C3008149B4D +:1053C0004866129A8D08F01F00065BFCC0516C08FD +:1053D0005808EFF81A03D82200008CC48002F1505C +:1053E000D421300818974876169C8D08F01F0006C7 +:1053F0005BFCC0516C085808EFF81A03D822000073 +:1054000000008CC48002F108D431202D1897784810 +:1054100076460C38C034300CC858ECC2FFFCF6C3DA +:10542000FFECF6020329F802032C2FF92016F809E5 +:105430000D08F6020022EEC4FFEC10955808C410C7 +:105440003009069A08981291500B700EB18E501EBA +:10545000150EFC001610FDDEC010EA0E0341FDD152 +:10546000C010B181401BEA000240E2000000E3D01E +:10547000C010021B501B700BE3DBC0100209F20EC0 +:10548000010EB01EFC091410401EFC090009B009F1 +:10549000E00116102FC8B149043AFE98FFD8400B1E +:1054A000580CC0F1ECC8FFFBEE080028C0282016FD +:1054B00020480838E088000570095809CF908F46C9 +:1054C0000E9CF01F001AC2D52FF508983009070B63 +:1054D000F60A1610700CF7DBC010F80E1610141E2A +:1054E000F5DCC010161A120AB01AB14AFC0A0009FB +:1054F000B0092FC8B1490433FE98FFEBECC8FFFB9D +:10550000EE0803295809C0D1EE080028C02820164B +:1055100020480838E088000570095809CF908F4668 +:105520000A9C2FEDD8320000800363EED43121AD08 +:10553000FAC4FF7418971695682C50C96816680944 +:1055400050E81494512CFAE5000851596E9558050D +:10555000C091310CF01F004799358F9C9915992502 +:1055600099056E9972085808C0F0721A911A301A8B +:105570007219F4090949109B91290E9CF01F003EF5 +:105580006E9830099109402810945808C064F1D8E9 +:10559000C01F50283018C02830088D08FC1C7FF030 +:1055A00040260C98E6187FF01838C1C1E068270F34 +:1055B000415B9708403A580AC061EDD6C014C0312B +:1055C0004AECC0284AEC41295809E08005DEF8C8B9 +:1055D000FFFD3009118AF20A1800C190F8C8FFF8DF +:1055E000C168FAEA00083008FAEB003C3009F01F05 +:1055F0000025C1103018415A950841294A285809F8 +:10560000C041109CE08F05C1109C2FF841258B08EC +:10561000E08F05BBFAC8FF9CFAC9FFA0FAEA003C7C +:105620000E9CEBD6C28BF01F001918935805C0D002 +:10563000FAEA003C3004F1DBC014EAC503FF109B1A +:105640005174EA1B3FF0C3284188419C100CF8C5F7 +:10565000FBCEE0450020E08A001BF8CCFBEE403B8F +:10566000EA081140F60C0A4CEC0809460C4CC148FB +:105670008002E2A4800364208003F3708003F37C43 +:1056800080036F328003A6C0800364D0EA0C11202F +:10569000403AF40C094CF01F006BFC18FE10301956 +:1056A000EAC50433F00B000B51793008FC193FF8C0 +:1056B000F01F0065E0684361EA18636FE06987A73F +:1056C000EA193FD2F01F0061E068C8B3EA188B60A6 +:1056D000E0698A28EA193FC6F01F005D0A9C149011 +:1056E0001691F01F005CE06879FBEA18509FE069B2 +:1056F0004413EA193FD3F01F005514981699009AE5 +:10570000029BF01F005314901691F01F00533008B5 +:1057100018963009009A029BF01F0050C0C00C9CE4 +:10572000F01F004C14981699009A029BF01F004C31 +:10573000F7B600015966E088000530185148C128C5 +:105740004C88FAEA003CF0060238F01F0044F9B435 +:105750000000FBF40A14F7B60101F9BC0100FBFCE0 +:105760001A14419020100A10C04650403000C04822 +:10577000300B5C30504BEC0211005806FBFA400431 +:10578000F5D6E40AFBFA4A04FBF64A11F9B2040022 +:10579000E1D6E510F9B90500FBF95A1140C858984F +:1057A000E08B00205858F9B40A01FBF5900CF7B5CE +:1057B0000904FBF59A0CF9B4090040CC583CC2D05E +:1057C000E0890005582CC101C18840CB584BC0600E +:1057D000585BC0A1301A50DAC228301950D9C0F82D +:1057E0003008301450C83FF5301C300B509550DC59 +:1057F0000A91312850EBC208300A50DA40E95809C2 +:10580000E089000730185098109150E8C15840E5E1 +:1058100050950A910A98C108300C50DC40EBEC0B13 +:10582000000B509B16982FF85808E089000510913E +:105830003018C028109130096E9A95193049C178F6 +:1058400080036E4A80036B7C800369A480036D181B +:1058500080036E5280036E2480036FC080036F321A +:105860008003F38C6A1AA1792FFA8B1A6E95F2CA0B +:10587000FFEC103AFE98FFF86A1B0E9CF01F0053D5 +:1058800058E15F888B0CF1E400046E987008508832 +:10589000E08001985806E08A0040F3D6C0044CC866 +:1058A000F0090234FAE50018EC041404EDB4000425 +:1058B000C0303025C0F84C78F0E80020FAEA003C0F +:1058C000E9D4C004F01F0044303514981699FAE961 +:1058D00000084C0C50A30C931896C0F8FAEA001874 +:1058E000EDB40000C081ECE800002FF5F01F003B94 +:1058F000FAEB0018A1542F865804CF11FAE80018CB +:10590000FAEA00080696F01F003440A3149816998E +:10591000FAE90008C2D8EC081100C0313025C2886D +:105920004ACCF0041404501CF1D8C0044A89FAEAA5 +:10593000003CF2080238F01F0029401C506330255B +:105940000C93FAEB00081896C0F8FAEA0008EDB4D8 +:105950000000C081ECE800002FF5F01F0020FAEBFA +:105960000008A1542F865804CF1106964063414A7F +:10597000580AC370FAE8000858015F94FAE9001861 +:105980003008FC193FF0FAEA0018F01F0015F9BCC6 +:105990000000F9BC0101E9EC000CC2304098580845 +:1059A000E08A010C3008FC194024ECC40001FAEA3A +:1059B00000182FF55064F01F0009409414981699B0 +:1059C000FAE90008C1080000800364588003F38CE2 +:1059D0008003F45480037028800369A480036FC09F +:1059E000506602940A9CF01F0069FAE80008F01F54 +:1059F00000683008FC19401CF01F006614981699C6 +:105A0000FAE90028FC18FCC040A5100550A5580470 +:105A1000C211FAEA00083008FC194014F01F005EB9 +:105A200040BCFAEB000814981699189A0A9BF01FCC +:105A3000005BE08102740A9840B9EE188000FAEA2F +:105A40000008109512980A99F01F0054E081025E38 +:105A5000CB484D39E8C8000140D55805C4F0300C9A +:105A6000F2080238513C300AFC1B3FE0F01F004DA9 +:105A7000FAE800284085F01F0048FAEB0028FAEA0F +:105A80000008F01F0049516CF01F0040149816994F +:105A9000FAEA0008F01F0040FAEB000841682D0800 +:105AA0000AC841392FF95139FAE80028F01F003BA4 +:105AB000E081035AFAE80008300AFC1B3FF0F01FAF +:105AC0000036FAE80028F01F0035FAEA002830080E +:105AD000FC194024E08100E8413C083CC6E4F01F8A +:105AE000002C3008FAEB0028FC194024FAEA0008E0 +:105AF000F01F0027FAEB0008CC3B40850805F208B0 +:105B0000023A5135FAE800284085F01F0021FAEBEF +:105B10000028FAEA0008F01F0024516CF01F001B57 +:105B200014981699FAEA0008F01F001BFAEB000817 +:105B300041682D080AC8413C1835C3713008FC196A +:105B40003FE0FAEA0028F01F00134085FAE8000859 +:105B50000805F01F0012E08100A7FAE80028300ACB +:105B6000FC1B3FE0F01F000C14981699FAEA00089D +:105B7000F01F000AC22033090A98117AF20A1800AD +:105B8000E08102F21095CF9B80036E52800369A4DE +:105B900080036D1880036B7C80036FC08003F38CDF +:105BA0008003702880036E243008FC194024F01F05 +:105BB0000056FAEB0008CAEBFAEA003CFAEB0008E0 +:105BC00058E65FAB418A3008F40911FFF7E903F9A1 +:105BD000F0091800E080008140EA58015FA9F3EA6B +:105BE00003F94CAAF4060234FAE50010F009180093 +:105BF000C1405801E081018A3008FC194014089A1C +:105C00000A9BF01F0041FAE80008F01F0041E08104 +:105C1000017D0292E08F018540853014FAE8001082 +:105C2000FAEA0008F01F003BF01F003B1892F01F3B +:105C3000003BFAE80010F01F003414981699FAEAB5 +:105C40000008F01F0037FAEB0008E4C8FFD00AC8CC +:105C5000FC19402430080234C331FAE80008F01F70 +:105C600000311691149014980299FAEA0010F01F6E +:105C7000002EC1A1FAE80010009A029BF01F002B31 +:105C8000E0800271E5D2C001C0F1E08F026C408A71 +:105C90001438C0301095C098330840892FF6B28868 +:105CA0004088C088406633990A98117AF20A180031 +:105CB000CEF0506611892FF9B089E08F0255F01FA0 +:105CC00000122FF4FAEB000830083009F01F00171B +:105CD000CA60E08F024840D85808C0510498009527 +:105CE00040D4C4A840C55815E08900224174580426 +:105CF000C040F4C9FBCDC0484199F209113604985F +:105D00000095C2F8800369A48003F38C80036F5868 +:105D10008003702880036E2480036E5280036B7CA6 +:105D200080036D1880036FC080036F32E2C80001EA +:105D30005801E0051740E2091740E1D1E515F9B92E +:105D400005001032E5D8E418F1D2E518E5D8E502EF +:105D5000FBFC5011F9D8E50CFBFC5A11F9B8050011 +:105D6000404B120B5008504B1200301B0E9CF01F82 +:105D7000010840081894404A58055F99580A5F9AEC +:105D8000F5E90009C080404CF8050D49121C1210BD +:105D9000504C12155802E08A002740DB580BC1D046 +:105DA0005808E08A0017109A5008089B0E9CF01FB4 +:105DB00000F9069A189B18940E9CF01F00F718998A +:105DC000069B50190E9CF01F00F5401940081293D5 +:105DD000E408010AC080C028049A069B0E9CF01FAC +:105DE00000ED1893301B0E9CF01F00E9411A189229 +:105DF000580AE08A0007189B0E9CF01F00E61892D4 +:105E000040C95819E089001440385808C101402998 +:105E1000F1D9C014C0C11298E6187FF0C080404C80 +:105E2000301B2FFC2FF0504C506BC038300A506A9A +:105E300041195809C031301CC09864482FC8E40883 +:105E4000032CF01F00D7F80C1120404BF80B000872 +:105E5000F1D8C005C0C0F00811205848E08A0006FB +:105E60002048100B504BC0785848C070404A2E480C +:105E7000100A504A100010055800E08A0008069BDE +:105E8000009A0E9CF01F00C7189340495809E08AF9 +:105E90000008049B129A0E9CF01F00C21892414801 +:105EA0005808C1B0049B069CF01F00BFC164069B4C +:105EB000300930AA0E9CF01F00BD2016189340DC5C +:105EC000580CC0314091C098089B4091300930AACD +:105ED0000E9CF01F00B6189458015FA940CB582BB8 +:105EE0005F98F3E80008C2505801C111049B029961 +:105EF000305A0E9CF01F00AD1892189B069CF01FA4 +:105F000000AAE089000FC0383002049440EA30094A +:105F10005CDA4085506A5049C0F9089240660494A2 +:105F20002FF65066331840850AC830085048C049DB +:105F300040DC580CE08000B55805E08A0008089B5A +:105F40000A9A0E9CF01F00971894406B580BC031B2 +:105F5000089CC138681B0E9CF01F0095684A189574 +:105F6000E8CBFFF42FEA2F4CA36AF01F00920A9BA4 +:105F7000301A0E9CF01F008B5044403A3019F5DA6D +:105F8000C001189450DA40855099502650E1049B86 +:105F9000069CF01F0089404BF8C0FFD0069CF01F04 +:105FA0000082089A506C049B0E9CF01F008418918C +:105FB00078385808C0303016C068189B069CF01F0F +:105FC000007A18960E9C029BF01F007440CCEDECFA +:105FD0001008C0D140DB580BC0A14026E04000397A +:105FE000C300406A580AE0890024C2F84069580991 +:105FF000C085129840CC1848C1D140DB580BC1A1D4 +:106000000C9940265809E08A0021069B301A0E9C04 +:10601000F01F0064049B1893F01F0063E0890006E2 +:10602000C141EDB00000C111E0400039C0A02FF027 +:10603000C0C85806E08A000C4026E0400039C04144 +:1060400033980AC8C6782FF00AC0C7580AC0409AC9 +:1060500040E9123AC430069B300930AA0E9CF01F6A +:106060000053404818930838C091109B300930AA5B +:106070000E9CF01F004E504CC0E8404B300930AA37 +:106080000E9CF01F004A089B504C300930AA0E9C11 +:10609000F01F00461894409C2FFC509CC79B301862 +:1060A0000690408508930C941096049B009CF01F6A +:1060B00000422D0C0ACC0236C0A4009B300930AA45 +:1060C0000E9C2FF6F01F00391890CF0B0896300B5E +:1060D0000694504B00931890C0284026069B301A17 +:1060E0000E9CF01F0030049B1893F01F002FE089D6 +:1060F0000012C1B1E1D0C001C0D1C17840891238CD +:10610000C0301095C0882FF650663318408CB88880 +:10611000C138339A0A981179F4091800CF002FF981 +:10612000B089C0981095C02833090A98117AF20AEC +:106130001800CF905066049B0E9CF01F0018580466 +:10614000C120404B083B5F19580B5F18F3E800086B +:10615000C0400E9CF01F0011089B0E9CF01F000F0A +:10616000C02850660E9C069BF01F000C3008AA88C1 +:106170004068415A2FF841299508408C5809FBF88E +:106180001012F1F51A002E6DD8320000800368005D +:10619000800368A0800366F88003642080036300A6 +:1061A00080036664800363EE80036818800364588C +:1061B0008002E736800354088003658C5EFC5EFC39 +:1061C000D42118961697580BC0311695C508F01FA4 +:1061D00000295806C0706C685808C0410C9CF01F1C +:1061E00000264A681037C0316C07C0A84A481037EB +:1061F000C0316C17C0584A381037EDF700028E696D +:106200003008F0091900C051F01F001F3005C2F816 +:106210000E9B0C9CF01F001D6EC818955808C0609E +:106220006E8B0C9C5D18F9B505FF8E68EDB8000704 +:10623000C0516E4B0C9CF01F00166EDB580BC0A0BB +:10624000EEC8FFBC103BC0400C9CF01F0011300892 +:106250008FD86F2B580BC0700C9CF01F000D3008AE +:10626000EF4800483008AE68F01F00070A9CD822AB +:1062700080031E7480031F388003EF2C8003EF4CD3 +:106280008003EF6C80031E7680031D2C8003217C2D +:10629000D4014848189B700CF01F0003D80200007E +:1062A00000000598800361C0D42116981897109CAF +:1062B00030084876149B8D08F01F00065BFCC05127 +:1062C0006C085808EFF81A03D822000000008CC4AC +:1062D0008002F198D42116981897109C3008149BCE +:1062E0004866129A8D08F01F00065BFCC0516C08CE +:1062F0005808EFF81A03D82200008CC48002F1205D +:106300001898E01C0000F0091510580CF20817004E +:10631000F9BC0010F9BC0100109AF0091508E61A42 +:10632000FF00F7BC00F8F2081700109AF0091504F6 +:10633000E61AF000F7BC00FCF2081700109AF0090A +:106340001502E61AC000F7BC00FEF2081700580854 +:106350005E5CEDB8001EF9BC0120F7BC00FF5EFCDE +:1063600018997808F9D8C003C150EDB80000C021D1 +:106370005EFD109BF00A1601E21B0002A388580B79 +:10638000F3FA1A00F9BC0101F3F80A00F9BC0002A3 +:106390005EFCF5D8C010F00B1610580AF60817006E +:1063A000F9BC0010F7D8C008F00A1608580BF7BC63 +:1063B00000F8F4081700F7D8C004F00A1604580BC8 +:1063C000F7BC00FCF4081700F7D8C002F00A160268 +:1063D000580BF7BC00FEF4081700EDB80000C060D1 +:1063E000A198C031320C5EFC2FFC93085EFCD401F6 +:1063F00018987649784C121CC1312FB9A369120B39 +:10640000F00900092EC8134E174A143EC060F9BCAB +:1064100003FFF9BC0201D8021039FE9BFFF6D80237 +:10642000D4211897169578965806C091310CF01F14 +:10643000000A99368F9C9916992699065805C0909E +:106440006A196E987038F009032A8B0AF009092539 +:10645000D82200008002E2A4D421189716967895DD +:106460005805C091310CF01F001999358F9C991572 +:10647000992599056E956A385808C0B1310A304B94 +:106480000E9CF01F00138B3C6E98703C580CC1B0F2 +:106490006E987038F0060028700C580CC0407809CF +:1064A0009109C0E80E9C30170E9BEE060947EECA14 +:1064B000FFFBA36AF01F0006C060991699273008F9 +:1064C00099389948D82200008002E2A48002DC5466 +:1064D000D431202D1693129610951492301BF01F74 +:1064E0000029F3D3C0145009F1D3C01FF0011614D2 +:1064F000FC1A0010F3DAE139FBF91A00189458027B +:10650000C1E0FACCFFF818D2F01F001F4018C0D02D +:106510004009F80A1120F20A094AF5E810088958DA +:10652000F20C0A495009C028895840085808F9B3A4 +:106530000102F9B3000189688943C0981A9CF01FD1 +:106540000012301340082E0C894389585801C0901E +:10655000E2C1043318018D01F80C11358B0CC0D841 +:10656000E6C8FFFCF8CC0432A5738D0CE808032CB8 +:10657000F01F000618138B03089C2FEDD832000083 +:10658000800364588003636080036300D4317448DF +:106590007645169714961015C1312FB8EECEFFEC44 +:1065A000A368F408000BEE080008114A1749123AD4 +:1065B000C030C0E2C0781C38FE9BFFF9C4A8580563 +:1065C000C0640E9830150C971096C02830056E1BCD +:1065D000F01F00246E496C4499352FB4F2C5FFFBBF +:1065E000EC040024EE0500252EC62EC7F8C8FFECEB +:1065F000300A0F0E0D0BFC021610F6031610FDDE0E +:10660000C010E4030103F7DBC010FC0B010BF60A1A +:10661000000AB01AB14AE60A000AB00A2FC8B14A05 +:106620000836CE83C0D80F0BF60E1610F7DBC0105D +:10663000160AB01AB14A1C0AB00A2FC8B14A0A3762 +:10664000CF33C0282019114A580ACFD09949D832DF +:10665000300BF01F00043018994830089958D83290 +:1066600080036458D43116977646F40214052FF649 +:10667000149318940406761B6E28C0382FFBA1785B +:106680001036FE99FFFD089CF01F001A300918957E +:10669000F8C8FFEC129AC03810AA2FF90439CFD5E8 +:1066A0006E4BE7D3C0052FBBEEC9FFECEE0B002B02 +:1066B0005803C130E60C1120300A7202E40309428B +:1066C000044A10AA130AF40C0A4A1639CF73910A25 +:1066D000580AC0702FF6C058130A10AA1639CFD323 +:1066E000089C20160E9B8B46F01F00030A9CD83294 +:1066F0008003645880036420D431202D7649744887 +:10670000169614951039EC081750EA061750F00544 +:1067100017506C2876437442761BE4030007103749 +:10672000F7BB09FFF01F0036EEC4FFFBF8C9FFEC12 +:10673000F8040024300A1298C02810AA0838CFE3C1 +:106740002FB32FB2EC030023EA020022ECCBFFECC4 +:106750005012EACAFFECC44894955805C20012983A +:106760001696300E50090D02E400161070017009E3 +:10677000B181E5D2C010E0050341AB32E1D9C010D0 +:106780000002E40E000EB01EB18E1C01B001E20E3C +:1067900016102FC80636CE834009910E94865806EF +:1067A000C1D072021298169E3005B0121D0190825F +:1067B000E1D1C010AD30E0020002E4050005B005F3 +:1067C000B185B1812FC8AD319092E20200020A0278 +:1067D000E4051610063ECEA391022FCA2FC9401819 +:1067E000103ACBB3C02820175807E08A00050948A3 +:1067F0005808CFA099472FEDD83200008003645885 +:10680000D4211697301BF01F00043019995799496D +:10681000D822000080036458D431300812951697AE +:1068200018967644F6C9FFEC720BF60C1610F7DBDF +:10683000C010F40C024CF40B0345F7D5C010B18521 +:106840001805EA0C1510F80B000B12AB2FF8B185E8 +:106850000838CEB55805C1D06E281034C1456E1B1E +:106860000C9C2FFBF01F000C6E4AEECBFFF418932C +:106870002FEA2F4CA36AF01F00090E9B0C9CF01FFF +:1068800000080697E8C8FFFF2FB48F48EE040925DB +:106890000E9CD832800364588002E736800364205F +:1068A000D431149618971694F1DAC002C0902018CB +:1068B0004A19F208032A3009F01F00201894A34651 +:1068C000C3706E955805C091310CF01F001D9935AD +:1068D0008F9C9915992599056E9366255805C0D109 +:1068E000E06B02710E9CF01F0017872C3008189582 +:1068F0009908C038069C1895EDB60000C0C1089BE9 +:106900000A9A0E9CF01F0010089B18930E9C069488 +:10691000F01F000EA156C0C06A035803CEC10A9AE8 +:106920000A9B0E9CF01F00088B0C9903CE5B089C01 +:10693000D83200008003F380800368188002E2A44C +:1069400080036800800366F880036420D4211698D1 +:106950001897109C3008149B4866129A8D08F01FF7 +:1069600000065BFCC0516C085808EFF81A03D822E7 +:1069700000008CC48002F1381498FC197FF0F5DB1C +:10698000C01FF00B1100F7E81008F5E813F8F20843 +:106990000108F00C1100F9E81008F00C141F2FFC8E +:1069A0005EFCD703F5EB101CE08000DCD421F7E996 +:1069B000200EEFDBC28B3015C430AB6BF7EA136BE4 +:1069C000AB6AF7D5D3C2EDD9C28BC5C0A1785CF94B +:1069D000F3D5D2ABE04707FFC770E04607FFC740DB +:1069E000EE06000CE02C03FEF6080644F40907440A +:1069F000F4080646F609064A0807F405004A5C0B47 +:106A0000EDBB0014C050A1775CFA5CFB201C580C55 +:106A1000E08A006FE04C07FFE084009CF7DCD28B3B +:106A2000EDEA11F6EFE61217EE178000F1B7042039 +:106A30000E0A5C0BEDBE001FEFBB001FD822E41B4B +:106A4000000FF40C1200F6061200F7BC03E1F80682 +:106A50001730F7B60201E0460020C0D4EC0C11203C +:106A6000F606094BF40C0A4C184BF406094A20B6FA +:106A70000C17CAABF406094BC640300A20B60C17F7 +:106A8000CA3BE419000FF00C1200F2051200F7BC2B +:106A900003EAF8051730F7B5020AE0450020C0D434 +:106AA000EA0C1120F2050949F00C0A4C1849F005CE +:106AB000094820250A16C8FBF0050949C4203008FA +:106AC00020250A16C88BE419000FE41B000F144B95 +:106AD0001049E04707FFC091580BC381E04607FF0C +:106AE000C3815809C360C3285809C330C2F85C3C4D +:106AF0002FFCF1BC04C0E04C0020C114F8081120A8 +:106B00000E46EE0C0A47F40809491247F40C0A4AEB +:106B1000F6080949124AF60C0A4BC83BF80811203E +:106B2000F9B90000C030F60809490E46EDEA101622 +:106B3000F40C0A4AF3EA1007F60C0A4A300BC71B9A +:106B40001C9BE61B8000300AD8223FFB3FFAD8226C +:106B5000F06B0000EDBE001FEFBB001F300AD82213 +:106B6000F7E9200BE61B8000F9D9C28BE04C07FF48 +:106B70005E1C3FFA3FFB5EFCEE198000F7E9200C3B +:106B8000E08600CAEBCD40E0169CE61C8000BFDB2F +:106B9000BFD9103AF20B1300C0921697129B0E99B0 +:106BA0001497109A0E98EE1C8000F6071614AB7B13 +:106BB000F7EA135BAB7ABFBBF2061614C440AB799D +:106BC000F3E81359AB78BFB9E04707FFC4F00E26CE +:106BD000C120EC051120E0460020C7C2F005094E97 +:106BE000F2050945F0060A48F2060A490A48580E15 +:106BF0005F1E1C48101AF609014BF6061200C0E091 +:106C0000C783EC0E1120F606094BF40E0A4E1C4BFE +:106C1000F406094A0C17E08A0039F4091515AB9AF5 +:106C2000F5EB115AAB9BF7D7D28B184BFC178000B2 +:106C3000EDBA0000F7B701FF0E395F29120A5C0BAD +:106C4000E3CD80E0AB79F3E81359AB78F3E8100EAD +:106C5000F9B60101EE0E1100F9B70001EFBB001FFC +:106C6000F7EA100EF9B70000CB0BBFDBF7EA100E06 +:106C7000C081E04607FFC050F9E7114BE3CD80E04B +:106C80003FFA3FFBE3CD80E05C372FF7F1B704C05C +:106C9000E0470020C114EE081120F40809495F16EE +:106CA000F4070A4A0C4AF6080949F5E9100AF407FC +:106CB0000A4B3007CB3BEE081140F608094914494E +:106CC0005F16F6070A4A0C4A300B3007CA7BE3CD41 +:106CD00080E0F1B604C0F00E1700C040F205094E86 +:106CE000104EF2060A483009580E5F1E1C48C83B79 +:106CF000F4061200F9B70300F9B60300F9BC03006B +:106D0000F7B602E0F406094B300A0C17FE9AFFBEF4 +:106D1000C85B0000EE198000F7E9200CFE96FF2EFC +:106D2000EBCD40E0169CE61C8000BFDBBFD9123BD8 +:106D3000C0721697129B0E991497109A0E98300EE7 +:106D4000EFDBC28BF7DBC014B5ABEDD9C28BC5F05E +:106D5000F3D9C014B5A9E04707FFC2500E26C0F012 +:106D6000EC051120E0460020C352F005094EF20563 +:106D70000945F0060A48F2060A490A48100AF609C7 +:106D8000004BEDBB0015C340F7D7D28B184BF9DA97 +:106D9000C001184EEE1E8000F1BE04201C0A5C0BE0 +:106DA000E3CD80E0B5CBF7EA100EC101E04607FF66 +:106DB000C030E3CD80E0B5C9F3E8100EC071300AF1 +:106DC000FC1B7FF0184BE3CD80E03FFA3FFBE3CDA7 +:106DD00080E0F1B604C0F00E1700C060F205094E65 +:106DE00058085F18104EF2060A483009CC8BFDEEA9 +:106DF000101EA19B5D0A5D0E2FF7E04707FFF9BA51 +:106E00000000F9BB0000F9BE0000CBFB30165807AC +:106E1000CA31B5CB100AF609004B184BE3CD80E020 +:106E2000580B5E6DF60C1501B59CE02C03FF5E3D22 +:106E3000F80C111F1699AB7BBFBBF7EA135BF60C7E +:106E40000A4BA1795E2B5C3B5EFBF8CB0000300C5B +:106E5000C038189B5C4B300A5E0BD401E069041EFD +:106E6000F6081200C170C0C3F00E1120F608094BDD +:106E7000F40E0A4E1C4BF408094A1019C0B8F40865 +:106E80001200F9B80300F7B802E0F408094B300A21 +:106E900010195809E08900305C392FF9E0490036B3 +:106EA000C043300B300AC2682F69F2081120E04954 +:106EB0000020C0B2F408094EF6080948F4090A4A4D +:106EC000F6090A4B104BC088F608094E144E169A64 +:106ED000300BF4090A4AEDBA0000C0921C7EC04192 +:106EE000EDBA0001C0422FFAF7BB02FF5CFC5D0B5C +:106EF0005D0AD802E06803FFEDBA000BF7B800FFA7 +:106F0000100A5C0BF7B903FEE04907FFC055300AD1 +:106F1000FC1BFFE0C0C8EDBB001FF7B90101AB9A35 +:106F2000F5EB115AA17BAB9BF7E9115BA17C5D0BE3 +:106F3000D802103AF20B1300C080A17BA179144B48 +:106F4000124B104B5E0F5EFDA17BFC1CFFE0580A4C +:106F5000F80B13005E8F5EFD1ADE1AD7A17B5F3C33 +:106F6000A1795F375CFCFC1EFFE0580AFC0B1300A4 +:106F7000E08B001D5808FC091300E08B0018580B2B +:106F8000F5BA0000C1501B071B0E583CC0A0581C8E +:106F9000C0335E0F5E1D103AF20B13005E2F5E3D94 +:106FA0001438F60913005E2F5E3D1B07D80A5817E8 +:106FB0005F0C5809F5B800001B071B0E5E0F5EFC46 +:106FC0001ADE1AD7A17B5F3CA1795F375CFCFC1EFF +:106FD000FFE0580AFC0B1300E08B001D5808FC0969 +:106FE0001300E08B0018580BF5BA0000C1501B07C6 +:106FF0001B0E583CC0A0581CC0335E0D5E1F103ADB +:10700000F20B13005E2D5E3F1438F60913005E2D5F +:107010005E3F1B07D80A58175F1C5809F5B80000D7 +:107020001B071B0E5E0D5EFCEBCD40FFF7E9200E4B +:10703000F6071614A97BF7EA137BA97ABDBBE41BFC +:107040003FFFABD7E08000CCE04707FFE08400B50E +:10705000F2061614A979F3E81379A978BDB9E419F1 +:107060003FFFABD6E08000E2E04607FFE08400B2DD +:107070000C17FE37FC01FC1C8000F8031601E9D94F +:10708000C3625CD4E7D4D382E6090644F80501253F +:10709000E6050644EA031502E6090644F80501255B +:1070A000E6050644EA031502E6090644F80501254B +:1070B000E6050644EA031502E6080640E40907402F +:1070C000E609064402045C05A365EBE413E5A3644A +:1070D0005C34F8050145E6040640E4050740E60592 +:1070E000064402045C05EA031502E7E413E3E80240 +:1070F0001502E6080640E4090740E60906440204D2 +:107100005C05A365EBE413E5A3645C34F805014575 +:10711000E6040640E4050740E605064402045C0573 +:10712000EA031502E7E413E3E8021502E60A064063 +:10713000E40B0740E60B064202025C03EDB3001CC1 +:10714000C090A1725CF32017A39AF5EB11DAA39B10 +:10715000C058A58AF5EB11CAA58B5807E08A008BA9 +:10716000E012FF00E8120080E6080640E40907404C +:10717000E4080644E60906480005F00100485C09F9 +:10718000F9D2C10158045C25F4081300F609130074 +:107190005F36F8061700E40A1608F5E3118AE60BD5 +:1071A0001608F7D7D28BEDBE001FEFBB001F0C0AED +:1071B0005C0BE3CD80FFE41B000F144BE08100A7C4 +:1071C000F2061614ABD6E04607FFE08100A4C9E83A +:1071D000E419000F1049E081009AC928A37BF7EA5F +:1071E00013DBA37AF5EB1004E08000A0F604120094 +:1071F000C170C0C3E8051120F604094BF4050A4527 +:107200000A4BF404094A0817C0B8F4041200F9B490 +:107210000300F7B402E0F404094B300A0817A38A0C +:10722000F5EB11EAA38BC11BA379F3E813D9A3787B +:10723000F3E81004C6F0F2041200C170C0C3E80500 +:107240001120F2040949F0050A450A49F0040948E9 +:107250000816C0B8F0041200F9B40300F7B402E055 +:10726000F004094930080816A388F1E911E8A38958 +:10727000CFCA5C372FF7F1B704C0E0470020C154F4 +:10728000EE061120E4070A42E606094C1842E6071A +:107290000A43F4060941F4070A4AF606094C184A5B +:1072A000F6070A4B3000C158EE061120F9B0000075 +:1072B000F9BC0000C050F4060940F606094CE60788 +:1072C0000A423003F4070A411841F6070A4A300B14 +:1072D000E012FF00E8120080E6080646E4090746CF +:1072E000E4080644E60906480C05F00700485C0976 +:1072F0003007F9D2C1010034E2051300C46B1C9BB6 +:10730000E61B8000300AE3CD80FF3FFB300AE3CD6F +:1073100080FFF5EB1004C0901C9BE61B8000EA1B6D +:107320007FF0300AE3CD80FFF1E91015CEF0E9D906 +:10733000C28BE04407FFCE41F1E910C5CE10CE6B01 +:10734000D4311A97202D109C1295149E16931696E0 +:107350005809C4411638E088005AF0081200C0D01D +:10736000F6080946F808094CF00B1120F408094EFC +:10737000F40B0A4BF7E61006F80A1610EBDCC01007 +:10738000EC0A0D02FC091610EA02024BF3E31109A4 +:10739000123BE08800091809123CE08B0005123B03 +:1073A000F3DCEB09F20B010BFDDEC010F60A0D0A4F +:1073B000FDEB110EEA0A024A1C3AE0880009180E99 +:1073C0001C3CE08B00051C3AFDDCEB0EFC0A010ABC +:1073D000300BF4080A4A2FEDD8321639FE9BFFFD18 +:1073E000F2091200C46114385F8B06355F3AF7EA80 +:1073F000100AF20A1800C060FC08010AE6050146FE +:10740000149E0C9B1C9A2FEDD8325808C05130198D +:10741000F2080D08109CF8081200E0810084EC0CC2 +:10742000010BF8031610EBDCC010F6030D0AFC0983 +:107430001610EA0A024AF3EB1109123AE088000931 +:107440001809123CE08B0005123AF3DCEB09141921 +:10745000FDDEC010F2030D02FDE3110EEA02024A46 +:107460001C3AFE98FFB5180E1C3CFE9BFFB1CACB20 +:10747000F20E1120EA090945F609094BE60E0A4306 +:10748000F0090941F4090942F00E0A48F40E0A4ACB +:107490000A48164AF0061610F9D8C010E6060D0480 +:1074A000F4031610089BE7E51103E80C02450635C6 +:1074B000E0880007201B10030638E0880072F5DA28 +:1074C000C0100A13E6060D04F5E51106E80C024C9F +:1074D000089A0C3CE0880007201A10060C38E08857 +:1074E000005AF5EB110B1816F601064A149C1636D5 +:1074F000C0735F0514325F3AEBEA000AC060F8011E +:107500000104F608014B089CE40C010AEC0B01464F +:10751000EC090A4BF4090A4AEC0E09460C4A2FED15 +:10752000D832F0011120F4010A4BF808094CEC089C +:107530000949EC010A41F7E91009F8031610EBDCE0 +:10754000C010E2030D00F20B1610EA00024EF7E144 +:10755000110B163EE0880006180B163CE088002749 +:10756000F60E0101F3D9C010E2030D00F3E1110999 +:10757000EA00024B123BE08800091809123CE08B3C +:107580000005123BF3DCEB09F20B010BF408094E8A +:10759000C4DB0C3CF7BA0B01EDD8EB06CA3B063551 +:1075A000F7BB0B01E7D8EB03C8BB163EF7DCEB0BD0 +:0275B000CD8B81 +:10760000C0080000C0080000C0080000C00800005A +:10761000C0080000C0080000C0080000C00800004A +:10762000C0080000C0080000C0080000C00800003A +:10763000C0080000C0080000C0080000C00800002A +:10764000C0080000C00800000000000000000000AA +:10765000C008000000000000000000000000000062 +:10766000C008000000000000000000000000000052 +:10767000C008000000000000000000000000000042 +:1076800000000000000000000000000000000000FA +:1076900000000000000000000000000000000000EA +:1076A00000000000000000000000000000000000DA +:1076B00000000000000000000000000000000000CA +:1076C00000000000000000000000000000000000BA +:1076D00000000000000000000000000000000000AA +:1076E000000000000000000000000000000000009A +:1076F000000000000000000000000000000000008A +:10770000C0080000300CF01F0012580CF80F1710C2 +:10771000D603301CF01F000E580CF80F1710D603BC +:10772000302CF01F000B580CF80F1710D603303C0C +:10773000F01F0007580CF80F1710D60300000104C3 +:107740004000011280000120C000012E8000A41C16 +:107750000000000000000000000000000000000029 +:107760000000000000000000000000000000000019 +:107770000000000000000000000000000000000009 +:1077800000000000000000000000000000000000F9 +:1077900000000000000000000000000000000000E9 +:1077A00000000000000000000000000000000000D9 +:1077B00000000000000000000000000000000000C9 +:1077C00000000000000000000000000000000000B9 +:1077D00000000000000000000000000000000000A9 +:1077E0000000000000000000000000000000000099 +:1077F0000000000000000000000000000000000089 +:1078000073656E645265706C790000006765745F23 +:10781000646174615F7463705F636D645F63620071 +:107820006765745F7265706C795F686F73745F62AF +:10783000795F6E616D655F63620000006765745F0C +:107840007265706C795F7363616E5F6E6574776F7C +:10785000726B735F636200006765745F7265706C62 +:10786000795F6964785F6E65745F63620000000031 +:107870007365745F706173737068726173655F6361 +:107880006D645F63620000007365745F6B65795FB0 +:10789000636D645F6362000063616C6C5F7265704E +:1078A0006C795F6362000000617661696C5F64619E +:1078B00074615F7463705F636D645F636200000096 +:1078C0007365744D6170536F636B4D6F6465000039 +:1078D0006765745374617274436D6453657100001D +:1078E0007365745F6E65745F636D645F63620000EF +:1078F0007365745F69705F636F6E6669675F636D00 +:10790000645F63620000000073656E644572726FAD +:107910007200000073746172745F736572766572D1 +:107920005F7463705F636D645F6362007370695F4F +:10793000736C61766552656365697665496E74003E +:107940006765745F636C69656E745F737461746599 +:107950005F7463705F636D645F63620073656E6420 +:107960005F646174615F7564705F636D645F6362BF +:1079700000000000636865636B4D7367466F726D4E +:107980006174000073746172745F7363616E5F6E23 +:1079900065745F636D645F6362000000666F756E9F +:1079A00064486F737442794E616D65007365745FEE +:1079B0006B65795F636D645F63620000696E697413 +:1079C0005370690073746172745F636C69656E747F +:1079D0005F746370000000007370695F706F6C6C9F +:1079E000000000006765745F726573756C745F6397 +:1079F0006D645F636200000073746F705F636C6935 +:107A0000656E745F7463705F636D645F63620000D2 +:107A100073746172745F7365727665725F7463709C +:107A2000000000007365745F706173737068726149 +:107A300073655F636D645F63620000007365745F0C +:107A4000726573756C745F636D6400007365745F59 +:107A5000646E735F636F6E6669675F636D645F63B7 +:107A6000620000006765745F73746174655F7463BE +:107A7000705F636D645F6362000000007265715F38 +:107A80007265706C795F686F73745F62795F6E6145 +:107A90006D655F636200000073746172745F636C94 +:107AA00069656E745F7463705F636D645F636200C9 +:107AB000572D5B25735D2057726F6E67207465725A +:107AC0006D696E6174696F6E20696E6465783A25C0 +:107AD00064206E506172616D3A2564206964783A61 +:107AE00025642031366269743A25640A000000007A +:107AF0003078257820000000572D5B25735D2049E4 +:107B00006E646578206F7574206F662072616E6791 +:107B1000653A2025640A00005B25735D20535349B4 +:107B2000443A25730A0000005B25735D20525353CD +:107B3000493A25640A0000005B25735D20454E43E9 +:107B4000543A25640A0000005B25735D205365618B +:107B5000726368696E6720666F7220486F73743A4B +:107B60002069703D3078257820666F756E643D25FC +:107B7000640A00005B25735D20666F756E64486F54 +:107B8000737442794E616D653A20466F756E64205C +:107B9000486F73743A206E616D653D25732069707E +:107BA0003D307825780A00005B25735D20696653B7 +:107BB00074617475733A256420726573756C743AD8 +:107BC00025640A004C69737420436F6D6D616E64A7 +:107BD000732066756C6C210A000000005245434515 +:107BE000495645005452414E534D4954000000003F +:107BF0005B25735D204D6170205B25642C20257012 +:107C00002C2025735D0A00005B25735D20535049CD +:107C100020696E697469616C697A6174696F6E203C +:107C20006661696C65642100572D5B25735D204595 +:107C300072726F7220636F6E6669677572696E67C4 +:107C4000205350490A000000572D5B25735D202505 +:107C5000645D20446973616C6C2E2025642F25645B +:107C600020636D643A25640A00000000572D5B25EF +:107C7000735D2025645D20446973616C6C2E202542 +:107C8000640A00005B25735D3A200000572D5B25D8 +:107C9000735D2025645D204E6F7420666F756E6481 +:107CA00020656E6420636D643A20307825780A0080 +:107CB0005B25735D2025732025640A00572D5B2505 +:107CC000735D20456E64206F6620636D6420706173 +:107CD00072616D73000000005B25735D2064617448 +:107CE00061417661696C3A25640A0000572D5B2575 +:107CF000735D2054544350206E6F7420666F756E10 +:107D00006420666F7220736F636B3A25640A00000B +:107D10005B25735D20736F636B3A25642073746118 +:107D200074653A25640A00005B25735D20737461F5 +:107D300074653A25640A00005B25735D2053746105 +:107D40007274204E6574776F726B205363616E207E +:107D500025640A00572D5B25735D206572723D25F1 +:107D6000640A00005B25735D204C6F6F6B696E6762 +:107D700020666F7220486F73743A206E616D653DA6 +:107D800025730A005B25735D20466F756E6420487D +:107D90006F73743A206E616D653D25732069703D87 +:107DA000307825780A0000005B25735D2053746FDE +:107DB0007020636C69656E7420736F636B3A256421 +:107DC0000A00000055445000544350005B25735D89 +:107DD00020416464723A307825782C20706F727478 +:107DE0003A25642C20736F636B3A25642C207072E3 +:107DF0006F743A25730A0000572D5B25735D205080 +:107E0000726576696F757320636C69656E74202581 +:107E100070206E6F742073746F7070656420210A17 +:107E2000000000005B25735D205374617274204371 +:107E30006C69656E74202573202570205B30782571 +:107E4000782C2025642C2025645D204F4B210A00CE +:107E50005B25735D20537461727420436C69656E99 +:107E600074202573202570205B307825782C202500 +:107E7000642C2025645D204641494C4544210A007C +:107E8000572D5B25735D205374696C6C20636F6E96 +:107E90006E65637465642E2E2E776169740A000026 +:107EA000572D5B25735D20494620646F776E2E2E1B +:107EB0002E776169740A00005B25735D205374613D +:107EC000727420536572766572202573205B256479 +:107ED0002C2025645D204F4B210A0000572D5B2587 +:107EE000735D2053746172742053657276657220DD +:107EF0002573205B25642C2025645D204641494C78 +:107F00004544210A000000005B25735D2025702098 +:107F10006E756D506172616D3D2564207061726D8A +:107F200073546F4368616E67653D25640A00000005 +:107F30005B25735D2025645D206E69663A2570209F +:107F40006C7769705F616464723D307825780A00EF +:107F50005B25735D20257320706172616D733D2513 +:107F6000640A00005B25735D20506173733A20251D +:107F7000732025640A000000572D5B25735D2025C2 +:107F800073203A204661696C656420746F206164D7 +:107F90006420706173737068726173650A00000019 +:107FA000436F6E6E65637420746F206E6574776FB7 +:107FB000726B2E2E2E0000006572723D25640A0041 +:107FC0004F4B0A00572D5B25735D205353494420C6 +:107FD0006C656E206F7574206F662072616E6765C8 +:107FE000000000005B25735D2025730A000000007F +:107FF000572D5B25735D2053656E642053504920D7 +:108000006572726F72210A003D3D3E003C3D3D00AD +:10801000572D5B25735D20556E6B6E6F776E2063F9 +:108020006D6420307825780A00000000572D5B250C +:10803000735D2025645D20436865636B20666F7205 +:108040006D6174206D7367206661696C6564210AD7 +:1080500000000000444F574E000000005550000043 +:1080600049462020207374617475733A2025730A81 +:1080700000000000434F4E4E207374617475733AD4 +:108080002025730A00000000536F636B6574206E37 +:108090002E3A256428256429205B307825785D20D8 +:1080A000257320257320616464723A257320706FF4 +:1080B00072743A25640A00005B2564207470637052 +:1080C0002D25705D2D5374617475733A25640A0013 +:1080D0005B746C63702D25705D2D537461747573C2 +:1080E0003A25640A000000005B757063702D2570EE +:1080F0005D20666C6167733A3078257820206C6F5C +:1081000063616C3A25735B307825785D2D25640AB0 +:108110000000000072656D6F74653A257328307831 +:108120002578292D25640A004E4F0000594553003B +:108130004461746120617661696C3A25730A0000BC +:108140002D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D5F +:108150002D2D2D2D2D2D2D2D2D2D2D2D2D2D0A009F +:108160005B25735D205363616E206E6F7420636FB7 +:108170006D706C65746564210A0000005B25735D99 +:10818000204E6574776F726B73206E6F7420666F0C +:10819000756E64210A000000636F756C64206E6F59 +:1081A0007420616C6C6F6361746520616C6C206716 +:1081B0007569206E65742061727261790A00000031 +:1081C000636F756C64206E6F7420616C6C6F63619B +:1081D000746520616C6C20677569206E6574730A24 +:1081E000000000005B25735D202564202D20257391 +:1081F000205B25645D2D202564202D202564202D05 +:1082000020307825780A000D000B000C000A0000D1 +:108210007365745F726573756C745F636D64000081 +:108220008000636C800063988000637E80006398A8 +:108230008000638E80006398800063648000639890 +:10824000800063688000638A800063786174637073 +:108250005F706F6C6C5F636F6E6E00007564705F53 +:10826000737461727400000072656D6F76654E659F +:1082700077436C69656E74436F6E6E0061756470F0 +:108280005F726563765F6362000000006765745328 +:1082900074617465546370006172645F7463705FCD +:1082A00073746F7000000000617463705F636F6EC1 +:1082B0006E5F6572725F6362000000006765744EF6 +:1082C0006577436C69656E74436F6E6E4964000038 +:1082D000617463705F636F6E6E5F636C695F65721C +:1082E000725F636200000000617463705F616363CA +:1082F0006570745F636200007564705F73746172AF +:10830000740000005B25735D20747463703A2570FF +:108310002069643D25642C20747063623D25700AD9 +:1083200000000000572D5B25735D204E6F205661C5 +:108330006C696420636C69656E7420666F7220746A +:108340007463703A25700A005B25735D2025645DB7 +:1083500020747463703A257020747063623A2570DB +:108360002073746174653A2564206C7063623A25E9 +:10837000702073746174653A2564206C6566743A84 +:1083800025642073656E743A25640A00572D5B25B9 +:10839000735D20544350206E6F7420696E69746958 +:1083A000616C697A656420747463703A2570207416 +:1083B0007063623A2570206C7063623A25700A001F +:1083C000572D5B25735D204E6F2056616C696420CC +:1083D000496420666F7220747463703A257020704F +:1083E00063623A25700A00005B25735D2062756642 +:1083F0003A2570206C656E3A25640A00572D5B257E +:10840000735D2054544350205B25705D3A20636FA8 +:10841000756C64206E6F7420616C6C6F6361746541 +:1084200020706275660A0000572D5B25735D20542D +:10843000544350205B25705D3A207564705F73650E +:108440006E642829206661696C65640A000000007A +:108450005B25735D2054544350205B25702D25709F +:108460005D3A20636F6E6E65637420256420256419 +:108470000A0000005B25735D206C6566743D256411 +:10848000206C656E3A25640A000000005B25735D70 +:10849000207463705F7772697465206661696C65CA +:1084A000642025702073746174653A2564206C65BE +:1084B0006E3A2564206572723A25640A0000000055 +:1084C000572D5B25735D2074746370203D3D204EF5 +:1084D000554C4C210A0000005B25735D20747463C9 +:1084E000703A2570207063623A2570206275663A92 +:1084F0002570206C656E3A25640A00005B25735D6B +:1085000020272573270A00005B25735D20506163D7 +:108510006B65742073656E74207063623A257020F9 +:108520006C656E3A2564206475723A2564206C652A +:1085300066743A25640A00005B25735D2054544339 +:1085400050205B25705D3A20636C65616E536F63EC +:108550006B53746174655F63622025640A000000D8 +:108560005B25735D20436C6F73696E672074706365 +:10857000623A2073746174653A30782578206572A8 +:10858000723A25640A0000005B25735D20436C6F1E +:1085900073696E67206C7063623A207374617465EE +:1085A0003A30782578206572723A25640A00000016 +:1085B0005B25735D2046726565696E672070617921 +:1085C0006C6F61642025642D25700A005B25735D46 +:1085D00020436C6F73696E6720747063625B2570F3 +:1085E0005D3A2073746174653A307825782065723D +:1085F000723A25640A000000572D5B25735D204305 +:10860000616E6E6F7420636C6F73652069643A25C8 +:10861000642D2570207075742070656E64696E67B6 +:108620000A0000005B25735D202D2D2D2D2D2D2D95 +:108630002D2D2D2D2D2D2D2D2D2D2D2D2D2D2D0A8D +:1086400000000000572D5B25735D2074746370205B +:108650003D204E554C4C210A000000005B25735D07 +:1086600020666C75736820646174613A207470636D +:10867000623A2570206572723A25640A0000000093 +:10868000572D5B25735D2054544350205B25705D4E +:108690003A20636F6E6E656374696F6E20657272E7 +:1086A0006F723A202564206375727249643A2564BA +:1086B0000A00000041626F727420636F6E6E656322 +:1086C00074696F6E0A000000572D5B25735D20549E +:1086D000544350205B25705D3A20636F6E6E656376 +:1086E00074696F6E206572726F723A202564206122 +:1086F00072673A25700A0000572D5B25735D205480 +:10870000544350205B25705D3A2066726565206D8C +:10871000656D6F72790A00005B25735D20554450CA +:1087200020496E7365727420257020736F636B3AF5 +:10873000256420616464723A257320706F72743A04 +:1087400025640A00572D5B25735D20545443502047 +:108750005B2D5D3A20696E76616C6964206D6F6493 +:10876000650A0000572D5B25735D2054544350204B +:108770005B2D5D3A20696E76616C6964206E62756E +:10878000660A0000572D5B25735D2054544350202A +:108790005B2D5D3A20696E76616C69642062756656 +:1087A0006C656E0A00000000572D5B25735D205438 +:1087B000544350205B2D5D3A20636F756C64206ECE +:1087C0006F7420616C6C6F63617465206D656D6F93 +:1087D000727920666F7220747463700A0000000062 +:1087E000572D5B25735D2054544350205B25705DED +:1087F0003A20636F756C64206E6F7420616C6C6FCF +:1088000063617465207063620A0000005B25735D1C +:108810002025732C20757063623A25702025733AE9 +:1088200025640A00572D5B25735D20545443502066 +:108830005B25705D3A2075647020636F6E6E6563B2 +:1088400074206661696C65640A000000572D5B2521 +:10885000735D2054544350205B25705D3A2062695B +:108860006E64206661696C6564206572723D256482 +:1088700020506F727420616C726561647920757329 +:1088800065640A005B25735D2025732C206C6F6383 +:108890003A307825782D25642072656D3A30782538 +:1088A000782D25640A0000005B25735D20416C6C07 +:1088B0006F63207061796C6F61642025642D257071 +:1088C0000A000000572D5B25735D2054544350204F +:1088D0005B25705D3A20636F756C64206E6F742049 +:1088E000616C6C6F63617465207061796C6F616439 +:1088F0000A0000005B25735D205B747063625D2D70 +:108900002570207061796C6F61643A25700A0000EF +:10891000572D5B25735D2054544350205B25705DBB +:108920003A2074637020636F6E6E656374206661B5 +:10893000696C65640A0000005B25735D2042454652 +:108940004F52452042494E4420747463703A25705A +:10895000206C7063623A2570207063623A25700A59 +:1089600000000000572D5B25735D205454435020B8 +:108970005B25705D3A206C697374656E2066616971 +:108980006C65640A00000000572D5B25735D205361 +:108990007461727420736572766572204641494C29 +:1089A0004544210A000000005B25735D20545443B8 +:1089B00050205B25702D25705D3A206E6275663DF6 +:1089C00025642C206275666C656E3D25642C2070D4 +:1089D0006F72743D2564202825732F2573290A00A2 +:1089E0007574726C3A6E3A703A7600002573000026 +:1089F0005B25735D2041524420544350205B257019 +:108A00005D3A20616363657074206E6577205B2535 +:108A1000705D0A005B25735D206C6F63616C3A25A5 +:108A2000642072656D6F74653A2564207374617497 +:108A3000653A25640A0000007061796C6F616420FA +:108A40006E6F74206672656564210000572D5B258A +:108A5000735D2041524420544350205B25705D20BB +:108A60006172673D257020726574726965733D257A +:108A7000642061626F72740A000000005B25735D00 +:108A8000206B656570416C697665436E743A256448 +:108A9000206B6565705F69646C653A25642070655C +:108AA00072736973745F636E743A25640A00000020 +:108AB0005B25735D2041524420544350205B257058 +:108AC0002D25705D206172673D257020726574727E +:108AD0006965733D25642070656E642E636C6F73E9 +:108AE000653A2564206C656E3A25640A0000000032 +:108AF0005B25735D2041524420544350205B257018 +:108B00002D25705D2074727920746F20636C6F73F3 +:108B1000652070656E64696E673A256420657272BF +:108B20003A25642069643A25640A00005B25735D78 +:108B30002041524420544350205B25702D25705D08 +:108B4000206172673D257020726574726965733D9E +:108B500025642070656E642E636C6F73653A2564BE +:108B600020636F6E6E3A25640A000000572D5B2566 +:108B7000735D2041524420544350205B25702D25C5 +:108B8000705D206172673D25702072657472696541 +:108B9000733D25640A0000005B25735D204152444B +:108BA00020544350205B25702D25705D2074727910 +:108BB00020746F20636C6F73652070656E64696EDE +:108BC000673A25640A0000005B25735D206C656EC2 +:108BD0003A25640A000000005B25735D20736F6313 +:108BE0006B3A2564207063623A2570207062756666 +:108BF0003A2570206572723A256420627566537456 +:108C00006F72653A2570206C656E3A25640A000023 +:108C10005B25735D20617463705F726563765F636B +:108C20006220703D4E554C4C206F6E20736F636B0D +:108C30003A2564207063623A25700A00572D5B253F +:108C4000735D206572723D256420703D25700A00B9 +:108C50005B25735D205265636569766564202570C8 +:108C6000206C656E3A25640A000000006174637030 +:108C70005F737461727400007463705F73656E6417 +:108C80005F646174615F70636200000061746370AF +:108C90005F706F6C6C000000617463705F7265637D +:108CA000765F6362000000006172645F7463705FEE +:108CB000737461727400000067657446697273743E +:108CC000436C69656E7400006172645F7463705F09 +:108CD00064657374726F7900636C6F73655F636F43 +:108CE0006E6E000073656E6455647044617461005B +:108CF000696E736572744E6577436C69656E744313 +:108D00006F6E6E0061636B5F726563766564000011 +:108D10007463705F636F6E6E6563745F636200009F +:108D200073656E645463704461746100636C6F7347 +:108D3000655F636F6E6E5F7063620000636C656198 +:108D40006E536F636B53746174655F636200000000 +:108D50007463705F646174615F73656E74000000BA +:108D600061636B416E6446726565446174610000C5 +:108D7000676574417661696C5463704461746142E3 +:108D80007974650066726565744461746100000001 +:108D9000676574546370446174614279746500005E +:108DA00063616C634D657267654C656E0000000021 +:108DB000696E73657274427566000000697341766E +:108DC00061696C5463704461746142797465000038 +:108DD00066726565744461746149647800000000DE +:108DE0005B25735D202570205B25642C25645D0A5E +:108DF00000000000686561644275663D256420746A +:108E000061696C4275663D25640A000025645D2039 +:108E10007063623A2570204275663A202570204CB6 +:108E2000656E3A25640A00005B25735D20205B2592 +:108E3000645D3A206C656E3A2564206964783A2551 +:108E40006420746F743A25640A0000005B25735D2A +:108E500020417661696C61626C6564206461746153 +:108E60003A2025640A000000572D5B25735D2069B8 +:108E70006478427566206F7574206F662072616E2B +:108E800067653A2025640A005B25735D2025702004 +:108E90006964783A25640A00572D5B25735D20428A +:108EA0007566203D3D204E554C4C21005B25735D81 +:108EB0002041636B207063623A2570206C656E3AC6 +:108EC000256420736F636B3A256420646174613A92 +:108ED00025700A005B25735D206765743A25642060 +:108EE00025702025640A00005B25735D206368659A +:108EF000636B3A25642025642025700A0000000079 +:108F00005B25735D2046726565202570206F74684F +:108F1000657220627566202564207461696C3A254B +:108F20006420686561643A25640A0000572D5B255A +:108F3000735D204F76657277726974696E6720621F +:108F40007566666572202570206964783A2564210B +:108F50000A000000572D5B25735D20706275665F07 +:108F6000636F70795F7061727469616C20666169AA +:108F70006C65643A207372633A25702C20647374B4 +:108F80003A25702C206C656E3A25640A00000000BA +:108F9000572D5B25735D2041766F696420746F20C7 +:108FA0004F76657277726974652064617461205BC5 +:108FB00025642D25645D210A000000005B25735D9A +:108FC00020496E736572745B25645D3A2025703AA2 +:108FD00025642D2564205B25642C25645D0A000032 +:108FE000572D5B25735D20536F636B206F75742065 +:108FF0006F662072616E67653A20736F636B3D2503 +:1090000064000000696E736572745F70427566007B +:109010006765745F70427566000000000000E10043 +:1090200008040000000000000F01110110011301ED +:109030000E01110110010F0106000500636D645F50 +:109040007365745F69700000636D645F736574704D +:1090500061737300636D645F7374617274436C69F0 +:1090600000000000466F756E6420486F73743A20EC +:109070006E616D653D25732069703D307825780AF5 +:109080000000000075736167653A206474203C310C +:109090007C303E0A0000000075736167653A2073FA +:1090A000656E64556470205B736F636B5D0A097352 +:1090B0006F636B3A20736F636B6574204E756D62DE +:1090C00065720A00536F636B65743A2025640A0069 +:1090D0005061747465726E547970653A2025640A23 +:1090E0000000000050726F766100000031323334AE +:1090F000353637383930000046696E65546573740B +:10910000000000006F6666004465627567204F4688 +:10911000460A00007072696E740000004465627552 +:10912000672009656E61626C65643A203078257845 +:109130000A000000566572626F736520656E616299 +:109140006C65643A20307825780A000044756D70AB +:109150002009656E61626C65643A20307825780A72 +:1091600000000000504F6F6C6C2009656E61626CEE +:1091700065643A20307825780A00000044656275FD +:1091800067204F4E0A00000075736167653A2064DE +:1091900065627567203C73656374696F6E3E203C41 +:1091A0006C6576656C3E0A0973656374696F6E3A27 +:1091B00020696E69742C20636D2C207370692C20DB +:1091C000746370202C207574696C2C207761726E2A +:1091D0000A096C6576656C20203A203020286F667D +:1091E00066292C203120286F6E292C2032202876E9 +:1091F0006572626F7365290A096F723A206465624D +:109200007567207072696E742F6F6E2F6F66660AB5 +:1092100000000000696E697400000000737069004E +:1092200074637000636D00007574696C0000000069 +:109230007761726E00000000616C6C0044756D70A7 +:1092400020416C6C20427566666572730A000000EE +:1092500075736167653A2064756D7050627566203C +:109260005B736F636B5D0A09736F636B3A20736F97 +:10927000636B6574204E756D6265720A00000000B4 +:109280006E6F6E650000000044656C6574696E6702 +:1092900020574550206B6579730A0000757361672C +:1092A000653A207365746B6579203C6B65795F69FD +:1092B00064782028302D33293E203C6B6579206965 +:1092C0006E206865783E0A09206F723A20736574D3 +:1092D0006B6579206E6F6E650A000000205745505F +:1092E000206B6579206D75737420626520313020A4 +:1092F000285745502D343029206F722032362028CF +:109300005745502D31303429206469676974730AD8 +:1093100000000000776C5F61706920766572736988 +:109320006F6E2076322E372E300A00006661696C2F +:10933000656420746F20676574206D6163206164CB +:1093400064726573730A0000687720616464723A1E +:109350002025730A000000006C696E6B2073746135 +:109360007475733A20000000697020616464723A79 +:10937000202573202D2000006E65746D61736B3A9B +:10938000202573202D200000676174657761793A8C +:109390002025730A00000000697020696E746572F0 +:1093A0006661636520697320646F776E0A00000050 +:1093B00064686370203A2000656E61626C65640ABF +:1093C0000000000064697361626C65640A0000005B +:1093D000444E533A202573202D2000007573616799 +:1093E000653A207374617274436C69203C697061E2 +:1093F0006464723E203C706F72743E203C736F63F5 +:109400006B3E203C7463702830292F7564702831BE +:10941000293E0A00537461727420636C69656E742E +:10942000206F6E206164647220307825782C207063 +:109430006F727420256420736F636B202564206D28 +:109440006F64652025640A00572D5B25735D2053EA +:109450007461727420636C69656E74206F6E207025 +:109460006F727420256420736F636B2025642070F5 +:10947000726F74202564206D6F646520256420461A +:1094800041494C45440A000075736167653A207391 +:1094900074617274537276203C706F72743E203C1B +:1094A000736F636B3E203C7463702830292F7564A2 +:1094B000702831293E0A00005374617274202573AC +:1094C00020736572766572206F6E20706F727420E3 +:1094D000256420736F636B2025640A00572D5B257C +:1094E000735D2053746172742025732073657276E6 +:1094F0006572206F6E20706F727420256420736F08 +:10950000636B202564204641494C45440A00000015 +:1095100075736167653A20736574646E73205B319F +:109520002D325D206161612E6262622E6363632E63 +:109530006464640A0000000053657420444E5320A4 +:1095400073657276657220256420746F2025730A16 +:10955000000000003D3D3E20444E53313A2025732B +:109560000A0000003D3D3E20444E53323A20257310 +:109570000A00000075736167653A20676574486F7B +:109580007374203C686F73746E616D653E0A0000F1 +:1095900075736167653A207770617373203C7373EC +:1095A00069643E203C706173737068726173653EDC +:1095B0000A0000002573203A204661696C6564202A +:1095C000746F20616464207061737370687261737A +:1095D000650A000075736167653A20647061737392 +:1095E000203C737369643E0A000000002573203A32 +:1095F000204661696C656420746F2064656C6574D5 +:109600006520706173737068726173650A00000091 +:1096100075736167653A206970636F6E666967206C +:109620003C69703E203C6E65746D61736B3E203CFE +:10963000676174657761792D69703E0A00000000EA +:1096400020206F72203A206970636F6E6669672010 +:109650006E6F6E652028746F20656E61626C652088 +:1096600044484350290A00005B25735D206E6966FB +:109670003A2570206C7769705F616464723D307860 +:1096800025780A0075736167653A20636F6E6E65B1 +:109690006374203C737369643E0A0000636D645F09 +:1096A000737461727453727600000000636D645FBE +:1096B00064656C70617373004D494D4C4644000005 +:1096C0000A24200024200000617661696C61626CCC +:1096D0006520636F6D6D616E64733A0A000000006F +:1096E000202025730A000000636F756C64206E6F84 +:1096F0007420616C6C6F63617465206669726D774C +:10970000617265206275666665720A00547565202F +:109710004D61722032362032323A30393A353420B7 +:109720003230313300000000776C5F696E69745F1E +:10973000636F6D706C6574655F6362006661696C10 +:10974000656420746F20696E697420776C20636F84 +:109750006E6E206D67720000572D5B25735D205380 +:109760007069206E6F7420696E697469616C697AC2 +:1097700065640A006C696E6B20646F776E2C2072D2 +:10978000656C6561736520646863700A00000000A1 +:109790006C696E6B20646F776E0A00006C696E6B8B +:1097A0002075702C20636F6E6E6563746564207421 +:1097B0006F20222573220A007265717565737469C2 +:1097C0006E672064686370202E2E2E20000000003B +:1097D0004641494C45440A00626F756E6420746FBF +:1097E0002025730A00000000572D5B25735D20497A +:1097F0006E74657266616365206E6F74207570218A +:109800000A0000007363616E00000000636F6E6EFB +:10981000656374007365746B6579000073746174BB +:1098200075730000646562756700000064756D7093 +:10983000427566006970636F6E66696700000000BC +:10984000747463700000000077706173730000002F +:109850006470617373000000676574486F7374000F +:10986000736574444E53000073746172745372765E +:10987000000000007374617274436C6900000000A2 +:1098800073656E645564700041726475696E6F2013 +:109890005769666920537461727475702E2E2E207C +:1098A0005B25735D0A0000006F7574206F66206D84 +:1098B000656D6F72790000006661696C6564207483 +:1098C0006F207072657061726520666F72206669C4 +:1098D000726D7761726520646F776E6C6F61640A78 +:1098E00000000000436F756C64206E6F7420646527 +:1098F0007465637420776C206465766963652C20D9 +:1099000061626F7274696E670A000000496E766169 +:109910006C6964206669726D776172652064617438 +:10992000612C2061626F7274696E670A000000002A +:109930004661696C656420746F2073746172742071 +:10994000776C20696E697469616C697A6174696F9A +:109950006E0A0000312E312E3000000069705F73F6 +:1099600074617475735F63620000000002000000A0 +:1099700000B71B000800000100010000286E756C94 +:109980006C290000253032782D253032782D253095 +:1099900032782D253032782D253032782D25303211 +:1099A00078000000256C752E256C752E256C752EA3 +:1099B000256C75007373696420746F6F206C6F6E13 +:1099C0006720286D6178202564290A00257320000E +:1099D00022257322000000002052535349202564A1 +:1099E0002064426D200000002041642D486F6320F8 +:1099F00000000000202857455020656E6372797082 +:109A000074696F6E290000002028544B495020656E +:109A10006E6372797074696F6E2900002028434369 +:109A20004D5020656E6372797074696F6E29000005 +:109A3000202020002530325820000000256300003F +:109A40006E6F206E65747320666F756E640A000019 +:109A5000496E76616C6964206C656E6774680A0093 +:109A600025642E25642E25642E256400544B495010 +:109A70000000000043434D500000000057455000D7 +:109A8000776C5F636D5F696E6974000073656C6508 +:109A900063745F6E65740000776C5F636F6E6E5FFA +:109AA0006C6F73745F636200776C5F7363616E5F8A +:109AB000636F6D706C6574655F636200776C5F6582 +:109AC00076656E745F636200776C5F6D6564696173 +:109AD0005F636F6E6E65637465645F636200000050 +:109AE0005B25735D20434D3A206F7574206F6620AF +:109AF0006D656D6F72790A005B25735D20434D3A89 +:109B000020636F756C64206E6F7420726567697373 +:109B1000746572206576656E742063620A000000C9 +:109B20005B25735D20434D3A20696E697469616CF1 +:109B3000697A65640A0000005B25735D20434D3A35 +:109B400020636F6E6E656374656420746F20257387 +:109B50000A0000005B25735D20434D3A20636F6E61 +:109B60006E656374206661696C65642C2073636143 +:109B70006E6E696E670A00005B25735D20434D3A87 +:109B800020636F756C64206E6F74207374617274DF +:109B9000207363616E20616674657220636F6E6E00 +:109BA000656374206661696C210A00005B25735D42 +:109BB00020434D3A20646973636F6E6E656374650C +:109BC000640A00005B25735D20434D3A20636F6E8D +:109BD0006E656374696F6E206C6F73742C20736391 +:109BE000616E6E696E670A005B25735D20434D3AB6 +:109BF00020636F756C64206E6F742073746172746F +:109C0000207363616E20616674657220636F6E6E8F +:109C1000656374206C6F7374210A00005B25735DAB +:109C200020434D3A207363616E20636F6D706C65E5 +:109C30007465640A00000000FFFFFFFFFFFF0000E3 +:109C40005B25735D20434D3A20526F616D696E67ED +:109C50002066726F6D207273736920256420746FA3 +:109C60002025640A000000005B25735D20434D3A07 +:109C7000204E6F2063616E64696461746520666F55 +:109C8000756E6420666F7220737369642022257379 +:109C9000220A00005B25735D20434D3A206661690E +:109CA0006C656420746F20636F6E6E6563740A0068 +:109CB0005B25735D20434D3A206661696C656420C5 +:109CC000746F207363616E0A000000005B25735D92 +:109CD00020434D3A20756E68616E646C6564206542 +:109CE00076656E740A000000776C5F636F6E6E5F5E +:109CF0006661696C7572655F636200000000000157 +:109D0000000018500000000B00001854000000096B +:109D1000000018800000000F000018A400000001DF +:109D2000000018E000000001000018E4000000013D +:109D300000001810000000010000181400000001CD +:109D400000001818000000010000181C00000001AD +:109D5000000018200000000100001824000000018D +:109D600000001828000000010000182C000000036B +:109D700000001830000000010000183C0000000145 +:109D8000000018400000000100001844000000011D +:109D900000001848000000010000184C4173736572 +:109DA0007274696F6E2022257322206661696C656A +:109DB00064206174206C696E6520256420696E20C2 +:109DC00025730A002E2E2F7372632F534F4654575C +:109DD0004152455F4652414D45574F524B2F5345D7 +:109DE0005256494345532F4C5749502F6C77697051 +:109DF0002D312E332E322F7372632F636F72652FC6 +:109E0000646863702E630000646863705F6F7074D1 +:109E1000696F6E3A20646863702D3E6F7074696F6D +:109E20006E735F6F75745F6C656E202B2032202B14 +:109E3000206F7074696F6E5F6C656E203C3D2044CE +:109E40004843505F4F5054494F4E535F4C454E006E +:109E5000646863705F6F7074696F6E5F6279746558 +:109E60003A20646863702D3E6F7074696F6E735F23 +:109E70006F75745F6C656E203C20444843505F4FA3 +:109E80005054494F4E535F4C454E00006468637018 +:109E90005F6F7074696F6E5F747261696C65723A3E +:109EA000206468637020213D204E554C4C0000001A +:109EB000646863705F6F7074696F6E5F74726169FC +:109EC0006C65723A20646863702D3E6D73675F6FD6 +:109ED000757420213D204E554C4C0A006468637017 +:109EE0005F6F7074696F6E5F747261696C65723AEE +:109EF00020646863702D3E6F7074696F6E735F6F5E +:109F000075745F6C656E203C20444843505F4F5031 +:109F100054494F4E535F4C454E0A000064686370CD +:109F20005F6F7074696F6E5F73686F72743A2064EC +:109F30006863702D3E6F7074696F6E735F6F7574B8 +:109F40005F6C656E202B2032203C3D2044484350FE +:109F50005F4F5054494F4E535F4C454E0000000038 +:109F6000646863705F6F7074696F6E5F6C6F6E674B +:109F70003A20646863702D3E6F7074696F6E735F12 +:109F80006F75745F6C656E202B2034203C3D20443F +:109F90004843505F4F5054494F4E535F4C454E001D +:109FA0007265706C79207761736E277420667265B4 +:109FB00065640000646863705F6372656174655F07 +:109FC000726571756573743A206E657469662021D7 +:109FD0003D204E554C4C0000646863705F637265B1 +:109FE0006174655F726571756573743A2064686346 +:109FF0007020213D204E554C4C0000006468637079 +:10A000005F6372656174655F726571756573743ADB +:10A0100020646863702D3E705F6F7574203D3D2035 +:10A020004E554C4C00000000646863705F637265BD +:10A030006174655F726571756573743A20646863F5 +:10A04000702D3E6D73675F6F7574203D3D204E55DA +:10A050004C4C0000646863705F6372656174655F97 +:10A06000726571756573743A20636865636B2074FB +:10A07000686174206669727374207062756620630B +:10A08000616E20686F6C64207374727563742064F1 +:10A090006863705F6D736700646863705F64656CAC +:10A0A0006574655F726571756573743A206E657469 +:10A0B000696620213D204E554C4C00006468637059 +:10A0C0005F64656C6574655F726571756573743A1C +:10A0D000206468637020213D204E554C4C000000E8 +:10A0E000646863705F64656C6574655F72657175E3 +:10A0F0006573743A20646863702D3E705F6F757489 +:10A1000020213D204E554C4C0000000064686370D7 +:10A110005F64656C6574655F726571756573743ACB +:10A1200020646863702D3E6D73675F6F75742021C6 +:10A130003D204E554C4C00006E6574696620213DF3 +:10A14000204E554C4C0000007062756620705F6FA9 +:10A150007574207761736E2774206672656564007C +:10A16000646863705F62696E643A206E65746966E4 +:10A1700020213D204E554C4C000000006468637067 +:10A180005F62696E643A206468637020213D204EEE +:10A19000554C4C00726574203D3D2073697A656FA3 +:10A1A000662873747275637420646863705F6D737E +:10A1B0006729202D20444843505F4F5054494F4E4B +:10A1C000535F4C454E000000726574203D3D206495 +:10A1D0006863702D3E6F7074696F6E735F696E5F38 +:10A1E0006C656E002E2E2F7372632F534F4654579B +:10A1F0004152455F4652414D45574F524B2F5345B3 +:10A200005256494345532F4C5749502F6C7769702C +:10A210002D312E332E322F7372632F636F72652FA1 +:10A22000646E732E63000000646E73207365727633 +:10A230006572206F7574206F66206172726179009B +:10A24000646E732073657276657220686173206E28 +:10A250006F20495020616464726573732073657464 +:10A260000000000070627566206D75737420626571 +:10A2700020696E206F6E652070696563650000005F +:10A28000617272617920696E646578206F757420DF +:10A290006F6620626F756E6473000000756E6B6E82 +:10A2A0006F776E20646E735F7461626C6520656E9B +:10A2B0007472792073746174653A00006C6F636125 +:10A2C0006C686F73740000003230382E36372E32CF +:10A2D00032322E3232320000000400040004000248 +:10A2E000002000050002001E002000002E2E2F730B +:10A2F00072632F534F4654574152455F4652414D6A +:10A3000045574F524B2F53455256494345532F4CB7 +:10A310005749502F6C7769702D312E332E322F73A1 +:10A3200072632F636F72652F6D656D702E63000011 +:10A330006D656D705F667265653A206D656D207044 +:10A34000726F7065726C7920616C69676E6564000C +:10A350006D656D705F6D616C6C6F633A20747970C0 +:10A3600065203C204D454D505F4D41580000000098 +:10A370006D656D705F6D616C6C6F633A206D656DBE +:10A38000702070726F7065726C7920616C69676E95 +:10A3900065640000001C002000B0002400140020B0 +:10A3A00000080010025400002E2E2F7372632F53EA +:10A3B0004F4654574152455F4652414D45574F52C3 +:10A3C0004B2F53455256494345532F4C5749502F15 +:10A3D0006C7769702D312E332E322F7372632F6399 +:10A3E0006F72652F6E657469662E6300626F6775A4 +:10A3F0007320706275663A206C656E20213D207472 +:10A400006F745F6C656E20627574206E6578742061 +:10A410003D3D204E554C4C210000000073686F7587 +:10A420006C64206E6F74206265206E756C6C207396 +:10A43000696E636520666972737420213D206C61CA +:10A4400073742100696620666972737420213D204F +:10A450004E554C4C2C206C617374206D75737420B8 +:10A46000616C736F20626520213D204E554C4C007D +:10A470002E2E2F7372632F534F4654574152455F10 +:10A480004652414D45574F524B2F53455256494323 +:10A4900045532F4C5749502F6C7769702D312E330F +:10A4A0002E322F7372632F636F72652F7062756621 +:10A4B0002E630000286820213D204E554C4C292059 +:10A4C000262620287420213D204E554C4C2920283A +:10A4D00070726F6772616D6D65722076696F6C6105 +:10A4E000746573204150492900000000702D3E74AE +:10A4F0006F745F6C656E203D3D20702D3E6C656E07 +:10A5000020286F66206C6173742070627566206904 +:10A510006E20636861696E2900000000696E6372D5 +:10A52000656D656E745F6D61676E697475646520D5 +:10A530003C3D20702D3E6C656E0000006261642021 +:10A5400070627566207479706500000070627566CF +:10A550005F74616B653A20696E76616C6964206234 +:10A5600075660000706275665F74616B653A20699C +:10A570006E76616C6964206461746170747200004D +:10A58000706275665F74616B653A20696E76616CA6 +:10A590006964207062756600646964206E6F74205F +:10A5A000636F707920616C6C2064617461000000DD +:10A5B000706275665F636F70795F706172746961F4 +:10A5C0006C3A20696E76616C696420627566000081 +:10A5D000706275665F636F70795F706172746961D4 +:10A5E0006C3A20696E76616C696420646174617094 +:10A5F00074720000706275665F636F70793A2074E0 +:10A600006172676574206E6F742062696720656E81 +:10A610006F75676820746F20686F6C6420736F7546 +:10A6200072636500705F746F20213D204E554C4C65 +:10A63000000000006F66667365745F746F203C3DB8 +:10A6400020705F746F2D3E6C656E00006F666673E0 +:10A6500065745F66726F6D203C3D20705F66726F3F +:10A660006D2D3E6C656E0000706275665F636F7085 +:10A6700079282920646F6573206E6F7420616C6C7B +:10A680006F77207061636B65742071756575657394 +:10A69000210A0000706275665F667265653A207314 +:10A6A000616E6520747970650000000070627566E7 +:10A6B0005F667265653A20702D3E726566203E20A9 +:10A6C00030000000702D3E746F745F6C656E203D2D +:10A6D0003D20702D3E6C656E202B20712D3E746FD9 +:10A6E000745F6C656E000000702D3E746F745F6C5B +:10A6F000656E203D3D20702D3E6C656E00000000B3 +:10A70000706275665F7265616C6C6F633A20702071 +:10A71000213D204E554C4C00706275665F7265613C +:10A720006C6C6F633A2073616E6520702D3E747996 +:10A730007065000067726F77203C206D61785F75EF +:10A7400031365F7400000000706275665F7265618B +:10A750006C6C6F633A207120213D204E554C4C00AB +:10A76000706275665F616C6C6F633A206261642031 +:10A7700070627566206C617965720000636865635C +:10A780006B20702D3E7061796C6F6164202B20709E +:10A790002D3E6C656E20646F6573206E6F74206F44 +:10A7A000766572666C6F77207062756600000000D7 +:10A7B000504255465F504F4F4C5F42554653495AA1 +:10A7C00045206D75737420626520626967676572E4 +:10A7D000207468616E204D454D5F414C49474E4D98 +:10A7E000454E540072656D5F6C656E203C206D6156 +:10A7F000785F7531365F7400706275665F616C6C8E +:10A800006F633A207062756620712D3E7061796CBD +:10A810006F61642070726F7065726C7920616C6911 +:10A82000676E656400000000706275665F616C6C45 +:10A830006F633A206572726F6E656F7573207479FD +:10A8400070650000706275665F636F707920666185 +:10A85000696C656400000000010203040506070737 +:10A8600007070707070000002E2E2F7372632F5370 +:10A870004F4654574152455F4652414D45574F52FE +:10A880004B2F53455256494345532F4C5749502F50 +:10A890006C7769702D312E332E322F7372632F63D4 +:10A8A0006F72652F7463702E630000007463705FB5 +:10A8B000706362735F73616E653A20616374697679 +:10A8C00065207063622D3E737461746520213D20A4 +:10A8D000434C4F53454400007463705F7063627370 +:10A8E0005F73616E653A2061637469766520706399 +:10A8F000622D3E737461746520213D204C49535490 +:10A90000454E00007463705F706362735F73616EC5 +:10A91000653A20616374697665207063622D3E73C9 +:10A920007461746520213D2054494D452D5741499E +:10A93000540000007463705F706362735F73616ED4 +:10A94000653A207477207063622D3E73746174657C +:10A95000203D3D2054494D452D57414954000000AC +:10A960007463705F62696E643A2063616E206F6E1B +:10A970006C792062696E6420696E207374617465FD +:10A9800020434C4F534544007463705F7265637697 +:10A9900065643A206C656E20776F756C6420777201 +:10A9A0006170207263765F776E640A00756E7365FE +:10A9B0006E74207365676D656E7473206C65616B72 +:10A9C000696E6700756E61636B6564207365676DA2 +:10A9D000656E7473206C65616B696E6700000000C2 +:10A9E0006F6F736571207365676D656E7473206C2E +:10A9F00065616B696E6700007463705F7063625FAE +:10AA000072656D6F76653A207463705F7063627310 +:10AA10005F73616E652829007463705F6C6973747D +:10AA2000656E3A2070636220616C726561647920A2 +:10AA3000636F6E6E65637465640000007463705FBD +:10AA4000736C6F77746D723A2061637469766520F8 +:10AA50007063622D3E737461746520213D20434C08 +:10AA60004F5345440A0000007463705F736C6F7746 +:10AA7000746D723A20616374697665207063622D2B +:10AA80003E737461746520213D204C495354454EFA +:10AA90000A0000007463705F736C6F77746D723AB4 +:10AAA00020616374697665207063622D3E73746102 +:10AAB000746520213D2054494D452D574149540A84 +:10AAC000000000007463705F736C6F77746D723A8E +:10AAD000206D6964646C652074637020213D20746E +:10AAE00063705F6163746976655F706362730000B1 +:10AAF0007463705F736C6F77746D723A20666972FD +:10AB0000737420706362203D3D207463705F6163E5 +:10AB1000746976655F706362730000007463705FD0 +:10AB2000736C6F77746D723A2054494D452D5741BF +:10AB30004954207063622D3E7374617465203D3DFD +:10AB40002054494D452D5741495400007463705FAE +:10AB5000736C6F77746D723A206D6964646C6520F4 +:10AB600074637020213D207463705F74775F70633D +:10AB7000627300007463705F736C6F77746D723A08 +:10AB800020666972737420706362203D3D20746397 +:10AB9000705F74775F706362730000007463705F4E +:10ABA000636F6E6E6563743A2063616E206F6E6CC6 +:10ABB0007920636F6E6E65637465642066726F6D75 +:10ABC00020737461746520434C4F5345440000006A +:10ABD00053594E5F53454E540000000053594E5F89 +:10ABE000524356440000000045535441424C4953DF +:10ABF0004845440046494E5F574149545F31000083 +:10AC000046494E5F574149545F320000434C4F5311 +:10AC1000455F574149540000434C4F53494E47004C +:10AC20004C4153545F41434B0000000054494D4593 +:10AC30005F5741495400000003060C18306078004B +:10AC40008000FAFC8000FC6C8000FD4E8000FDB4AA +:10AC50008000FE368000FD4E8000FE788000FEF809 +:10AC60002E2E2F7372632F534F4654574152455F18 +:10AC70004652414D45574F524B2F5345525649432B +:10AC800045532F4C5749502F6C7769702D312E3317 +:10AC90002E322F7372632F636F72652F7463705F30 +:10ACA000696E2E63000000007063622D3E736E6457 +:10ACB0005F71756575656C656E203E3D20706275CF +:10ACC000665F636C656E286E6578742D3E70290032 +:10ACD0007463705F726563656976653A2076616C4E +:10ACE0006964207175657565206C656E67746800B0 +:10ACF000696E7365672E7020213D204E554C4C00C7 +:10AD0000696E73616E65206F6666736574210000FD +:10AD10007062756620746F6F2073686F72742100A3 +:10AD2000706275665F686561646572206661696CF2 +:10AD3000656400007463705F726563656976653A87 +:10AD4000207365676D656E74206E6F742074726910 +:10AD50006D6D656420636F72726563746C792074C5 +:10AD60006F207263765F776E640A00007463705FB1 +:10AD7000726563656976653A207365676D656E74A3 +:10AD8000206E6F74207472696D6D656420636F72DC +:10AD9000726563746C7920746F206F6F73657120B6 +:10ADA00071756575650A00007463705F726563652F +:10ADB0006976653A207463706C656E203E2072631C +:10ADC000765F776E640A00007463705F7265636516 +:10ADD0006976653A206F6F736571207463706C6576 +:10ADE0006E203E207263765F776E640A000000007A +:10ADF0007463705F696E7075743A2061637469760C +:10AE000065207063622D3E737461746520213D205E +:10AE1000434C4F53454400007463705F696E707516 +:10AE2000743A20616374697665207063622D3E73A5 +:10AE30007461746520213D2054494D452D57414989 +:10AE4000540000007463705F696E7075743A20611D +:10AE50006374697665207063622D3E7374617465F6 +:10AE600020213D204C495354454E00007463705FCF +:10AE7000696E7075743A207063622D3E6E657874E9 +:10AE800020213D2070636220286265666F72652014 +:10AE900063616368652900007463705F696E707533 +:10AEA000743A207063622D3E6E65787420213D20D7 +:10AEB00070636220286166746572206361636865EF +:10AEC000290000007463705F696E7075743A2054D5 +:10AED000494D452D57414954207063622D3E73748E +:10AEE000617465203D3D2054494D452D57414954DD +:10AEF000000000007463705F696E7075743A2070B2 +:10AF000063622D3E737461746520213D20434C4F74 +:10AF1000534544007063622D3E736E645F717565C6 +:10AF200075656C656E203E20300000007063622DF8 +:10AF30003E61636365707420213D204E554C4C008A +:10AF40007463705F696E7075743A207463705F70BB +:10AF50006362735F73616E65282900002E2E2F7364 +:10AF600072632F534F4654574152455F4652414DED +:10AF700045574F524B2F53455256494345532F4C3B +:10AF80005749502F6C7769702D312E332E322F7325 +:10AF900072632F636F72652F7463705F6F75742EA9 +:10AFA00063000000636865636B20746861742066E9 +:10AFB0006972737420706275662063616E20686FB9 +:10AFC0006C6420737472756374207463705F68645A +:10AFD000720000007463705F656E71756575653A27 +:10AFE000207061636B6574206E65656473207061A9 +:10AFF000796C6F61642C206F7074696F6E732C2094 +:10B000006F722053594E2F46494E202870726F6739 +:10B0100072616D6D65722076696F6C617465732005 +:10B0200041504929000000007463705F656E7175BE +:10B030006575653A206C656E20213D2030207C7C52 +:10B0400020617267203D3D204E554C4C2028707287 +:10B050006F6772616D6D65722076696F6C61746582 +:10B0600073204150492900007463705F656E7175EB +:10B070006575653A207062756673206F6E20717514 +:10B08000657565203D3E206174206C656173742098 +:10B090006F6E65207175657565206E6F6E2D656DBF +:10B0A000707479007463705F656E71756575653A6B +:10B0B000206E6F207062756673206F6E20717565EB +:10B0C0007565203D3E20626F7468207175657565F9 +:10B0D0007320656D707479007573656720213D205C +:10B0E0004E554C4C00000000636865636B2074682B +:10B0F0006174206669727374207062756620636182 +:10B100006E20686F6C642074686520636F6D706C6E +:10B11000657465207365676C656E000070627566A6 +:10B120005F686561646572206661696C65640A00C8 +:10B1300046494E20656E71756575656420746F674C +:10B140006574686572207769746820646174610051 +:10B150007A65726F2D6C656E6774682070627566B3 +:10B16000000000007463705F656E71756575653A07 +:10B170002076616C6964207175657565206C656EFB +:10B1800067746800525354206E6F74206578706540 +:10B190006374656420686572652100002E2E2F732C +:10B1A00072632F534F4654574152455F4652414DAB +:10B1B00045574F524B2F53455256494345532F4CF9 +:10B1C0005749502F6C7769702D312E332E322F73E3 +:10B1D00072632F636F72652F7564702E63000000B9 +:10B1E000726562696E64203D3D203000636865636E +:10B1F0006B20746861742066697273742070627564 +:10B20000662063616E20686F6C642073747275636E +:10B2100074207564705F686472000000702D3E7069 +:10B2200061796C6F6164203D3D20697068647200D3 +:10B230002E2E2F7372632F534F4654574152455F42 +:10B240004652414D45574F524B2F53455256494355 +:10B2500045532F4C5749502F6C7769702D312E3341 +:10B260002E322F7372632F636F72652F697076347D +:10B270002F69636D702E6300636865636B2074686B +:10B2800061742066697273742070627566206361F0 +:10B290006E20686F6C642069636D70206D657373D8 +:10B2A0006167650069636D705F696E7075743A20DF +:10B2B0006D6F76696E6720702D3E7061796C6F617D +:10B2C0006420746F2069702068656164657220660F +:10B2D00061696C65640A0000636865636B2074686B +:10B2E0006174206669727374207062756620636190 +:10B2F0006E20686F6C642073747275637420746858 +:10B30000652049434D502068656164657200000006 +:10B3100069636D705F696E7075743A20636F7079E0 +:10B32000696E6720746F206E657720706275662085 +:10B330006661696C65640A0069636D705F696E704F +:10B3400075743A20726573746F72696E67206F72DC +:10B350006967696E616C20702D3E7061796C6F61F8 +:10B3600064206661696C65640A00000043616E27B1 +:10B3700074206D6F7665206F7665722068656164F4 +:10B38000657220696E207061636B65740000000057 +:10B390002E2E2F7372632F534F4654574152455FE1 +:10B3A0004652414D45574F524B2F534552564943F4 +:10B3B00045532F4C5749502F6C7769702D312E33E0 +:10B3C0002E322F7372632F636F72652F697076341C +:10B3D0002F69702E63000000636865636B207468DA +:10B3E000617420666972737420706275662063618F +:10B3F0006E20686F6C64207374727563742069705A +:10B400005F68647200FFFFFFFF00000000000000A3 +:10B410002E2E2F7372632F534F4654574152455F60 +:10B420004652414D45574F524B2F53455256494373 +:10B4300045532F4C5749502F6C7769702D312E335F +:10B440002E322F7372632F636F72652F697076349B +:10B450002F69705F667261672E630000746869739C +:10B46000206E656564732061207062756620696E68 +:10B47000206F6E65207069656365210073616E6978 +:10B48000747920636865636B206C696E6B656420FA +:10B490006C697374000000007072657620213D2095 +:10B4A00069707200707265762D3E6E657874203D0D +:10B4B0003D2069707200000069705F72656173738E +:10B4C0005F70627566636F756E74203E3D20636CBD +:10B4D000656E0000636865636B20667261676D6509 +:10B4E0006E747320646F6E2774206F7665726C6162 +:10B4F000700000006E6F2070726576696F75732042 +:10B50000667261676D656E742C2074686973206D56 +:10B51000757374206265207468652066697273743F +:10B5200020667261676D656E7421000073616E69DB +:10B53000747920636865636B0000000076616C6954 +:10B54000646174655F646174616772616D3A6E65B0 +:10B5500078745F70627566213D4E554C4C0000005A +:10B5600076616C69646174655F646174616772615E +:10B570006D3A646174616772616D20656E64213D2E +:10B58000646174616772616D206C656E00FFFFFF1E +:10B59000FFFFFF002E2E2F7372632F534F46545719 +:10B5A0004152455F4652414D45574F524B2F5345EF +:10B5B0005256494345532F4C5749502F6C77697069 +:10B5C0002D312E332E322F7372632F6E65746966A0 +:10B5D0002F6574686172702E630000006E65746977 +:10B5E000662D3E6877616464725F6C656E206D7570 +:10B5F0007374206265207468652073616D652061D5 +:10B6000073204554484152505F4857414444525F6B +:10B610004C454E20666F722065746861727021001F +:10B620007120213D204E554C4C000000712D3E7084 +:10B6300020213D204E554C4C00000000722D3E70E4 +:10B6400020213D204E554C4C000000006172705F7F +:10B650007461626C655B695D2E71203D3D204E55C5 +:10B660004C4C000069203C204152505F5441424CF8 +:10B67000455F53495A4500006E657469662D3E6802 +:10B6800077616464725F6C656E203D3D204554486F +:10B690004152505F4857414444525F4C454E000070 +:10B6A000636865636B207468617420666972737483 +:10B6B00020706275662063616E20686F6C64207311 +:10B6C0007472756374206574686172705F68647207 +:10B6D000000000006172705F7461626C655B695D9F +:10B6E0002E7374617465203D3D2050454E44494E93 +:10B6F00047206F7220535441424C45006E6F2070BA +:10B7000061636B65742071756575657320616C6C20 +:10B710006F77656421000000000000002E2E2F735B +:10B7200072632F534F4654574152455F4652414D25 +:10B7300045574F524B2F53455256494345532F4C73 +:10B740005749502F6C7769702D706F72742D312EA0 +:10B75000332E322F48442F69662F6E657469662F29 +:10B76000776C69662E6300000A09000052580000D9 +:10B7700054580000FFFFFF740000000001FFFFFFAE +:10B780000000FFFFFFFFFF400000000001FFFFFF80 +:10B7900041505000484D4700312E352E312E370094 +:10B7A000312E352E312E3100312E352E312E3400F2 +:10B7B00080017C7C80017C7480017C7C80017C6ABF +:10B7C00080017DCA80017D7880017D2A80017CD83E +:10B7D00080017C86800185D2800185CA800185CA6E +:10B7E000800185D2800185C2800185C2800185BA31 +:10B7F000800185BA02040B0C121618242C30424822 +:10B80000606C0000322E312E312E310078C40E00D3 +:10B81000352E332E31000000352E332E350000003A +:10B82000352E332E340000008001BF808001BF928E +:10B830008001BFA88001BF5A8001BF668001BFD4CC +:10B840008001BF5A8001BFE08001BF5A8001BF5A0A +:10B850008001BF5A8001BF5A8001BF5A8001BF5A80 +:10B860008001BF5A8001BF5A8001BF5A8001BF5A70 +:10B870008001BF5A8001BF5A8001BF5A8001BF5A60 +:10B880008001BF5A8001BF5A8001BF5A8001BF5A50 +:10B890008001BF5A8001BF5A8001BF5A8001BF5A40 +:10B8A0008001BF5A8001BF5A8001BF5A8001BF5A30 +:10B8B0008001BF5A8001BF5A8001BF5A8001BF5A20 +:10B8C0008001BF5A8001BF5A8001BF5A8001BF5A10 +:10B8D0008001BF5A8001BF5A8001BF5A8001BF5A00 +:10B8E0008001BF5A8001BF5A8001BF5A8001BF5AF0 +:10B8F0008001BF5A8001BF5A8001BF5A8001BF5AE0 +:10B900008001BF5A8001BF5A8001BF5A8001BF5ACF +:10B910008001BF5A8001BF5A8001BF5A8001BF5ABF +:10B920008001BF5A8001BF7C8001C0448001BF5AA2 +:10B930008001C0448001BF5A8001C17C8001BF5A90 +:10B940008001C1708001BF5A8001C1648001BF5A6B +:10B950008001BF5A8001BF5A8001BF5A8001C1AC2B +:10B960008001BF5A8001BF5A8001C1A08001BF5A27 +:10B970008001C1948001BF5A8001BF5A8001BF5A23 +:10B980008001BF5A8001BF5A8001BF5A8001BF5A4F +:10B990008001BF5A8001BF5A8001BF5A8001BF5A3F +:10B9A0008001BF5A8001BF5A8001BF5A8001BF5A2F +:10B9B0008001BF5A8001BF5A8001BF5A8001BF5A1F +:10B9C0008001BF5A8001BF5A8001BF5A8001BF5A0F +:10B9D0008001BF5A8001BF5A8001BF5A8001BF5AFF +:10B9E0008001BF5A8001BF5A8001BF5A8001BF5AEF +:10B9F0008001BF5A8001BF5A8001BF5A8001BF5ADF +:10BA00008001BF5A8001BF5A8001BF5A8001BF5ACE +:10BA10008001BF5A8001BF5A8001BF5A8001BF5ABE +:10BA20008001BF5A8001BF5A8001BF5A8001BF5AAE +:10BA30008001BF5A8001BF5A8001BF5A8001BF5A9E +:10BA40008001BF5A8001BF5A8001BF5A8001BF5A8E +:10BA50008001BF5A8001BF5A8001BF5A8001BF5A7E +:10BA60008001BF5A8001BF5A8001BF5A8001BF5A6E +:10BA70008001BF5A8001BF5A8001BF5A8001BF5A5E +:10BA80008001BF5A8001BF5A8001BF5A8001BF5A4E +:10BA90008001BF5A8001BF5A8001BF5A8001BF5A3E +:10BAA0008001BF5A8001BF5A8001BF5A8001BF5A2E +:10BAB0008001BF5A8001BF5A8001BF5A8001BF5A1E +:10BAC0008001BF5A8001BF5A8001BF5A8001BF5A0E +:10BAD0008001BF5A8001BF5A8001BF5A8001BF5AFE +:10BAE0008001BF5A8001BF5A8001BF5A8001BF5AEE +:10BAF0008001BF5A8001BF5A8001BF5A8001BF5ADE +:10BB00008001BF5A8001BF5A8001BF5A8001BF5ACD +:10BB10008001BF5A8001C02C8001C1588001C02C17 +:10BB20008001C02C8001C1888001BF5A8001C044BF +:10BB30008001BF5A8001C0508001BF5A8001C050AF +:10BB40008001BF5A8001C02C8001BF5A8001C02CE7 +:10BB50008001C0388001C0388001C0388001BF5AE0 +:10BB60008001C02C8001C02C8001C14C8001BF5AD3 +:10BB70008001BF5A8001C1408001BF5A8001BF5A75 +:10BB80008001BF5A8001BF5A8001BF5A8001BF5A4D +:10BB90008001BF5A8001BF5A8001BF5A8001BF5A3D +:10BBA0008001C1348001BF5A8001BF5A8001BF5A51 +:10BBB0008001BF5A8001BF5A8001BF5A8001BF5A1D +:10BBC0008001C1288001BF5A8001BF5A8001BF5A3D +:10BBD0008001BF5A8001BF5A8001BF5A8001BF5AFD +:10BBE0008001BF5A8001BF5A8001BF5A8001BF5AED +:10BBF0008001BF5A8001BF5A8001BF5A8001BF5ADD +:10BC00008001BF5A8001BF5A8001BF5A8001BF5ACC +:10BC10008001BF5A8001BF5A8001BF5A8001BF5ABC +:10BC20008001BF5A8001BF5A8001BF5A8001BF5AAC +:10BC30008001BF5A8001BF5A8001BF5A8001BF5A9C +:10BC40008001BF5A8001BF5A8001BF5A8001BF5A8C +:10BC50008001BF5A8001BF5A8001BF5A8001BF5A7C +:10BC60008001BF5A8001BF5A8001BF5A8001BF5A6C +:10BC70008001BF5A8001BF5A8001BF5A8001BF5A5C +:10BC80008001BF5A8001BF5A8001BF5A8001BF5A4C +:10BC90008001BF5A8001BF5A8001BF5A8001BF5A3C +:10BCA0008001BF5A8001BF5A8001BF5A8001BF5A2C +:10BCB0008001BF5A8001BF5A8001BF5A8001BF5A1C +:10BCC0008001BF5A8001BF5A8001BF5A8001BF5A0C +:10BCD0008001BF5A8001BF5A8001BF5A8001BF5AFC +:10BCE0008001BF5A8001BF5A8001BF5A8001BF5AEC +:10BCF0008001BF5A8001BF5A8001BF5A8001BF5ADC +:10BD00008001BF5A8001BF5A8001BF5A8001BF5ACB +:10BD10008001BF5A8001BF5A8001BF5A8001BF5ABB +:10BD20008001BF5A8001BF5A8001BF5A8001BF5AAB +:10BD30008001BF5A8001BF5A8001BF5A8001BF5A9B +:10BD40008001BF5A8001BF5A8001BF5A8001BF5A8B +:10BD50008001BF5A8001BF5A8001BF5A8001BF5A7B +:10BD60008001BF5A8001BF5A8001BF5A8001C11CA7 +:10BD70008001C1108001BF5A8001C1048001BF5AF7 +:10BD80008001BF5A8001BF5A8001C0F88001C0EC19 +:10BD90008001BF5A8001BF5A8001C0E08001BF5AB4 +:10BDA0008001BF5A8001C0D48001C0C88001C0BCDE +:10BDB0008001C0B08001C0A48001C0988001C08C07 +:10BDC0008001BF5A8001C0808001C0748001BF5AC9 +:10BDD0008001C0688001C05C8001C48E8001C47C89 +:10BDE0008001C46A8001C4588001C4468001C43403 +:10BDF0008001C3928001C3928001C4228001C410DB +:10BE00008001C3FE8001C3EC8001C3DA8001C3C896 +:10BE10008001C3B68001C3A48001C3A48001C4A073 +:10BE20008001C2D48001C2D48001C2D48001C5C0C7 +:10BE30008001C5AE8001C59C8001C2D48001C2D4FE +:10BE40008001C58A8001C2D48001C2D48001C57836 +:10BE50008001C5668001C5548001C5428001C5309E +:10BE60008001C51E8001C50C8001C4FA8001C4E8B0 +:10BE70008001C2D48001C4D68001C4C48001C2D470 +:10BE80008001C2D48001C2D48001C2D48001C2D456 +:10BE90008001C2D48001C2D48001C2D48001C2D446 +:10BEA0008001C2D48001C2D48001C2D48001C2D436 +:10BEB0008001C2D48001C2D48001C2D48001C2D426 +:10BEC0008001C2D48001C2D48001C2D48001C2D416 +:10BED0008001C2D48001C2D48001C2D48001C2D406 +:10BEE0008001C2D48001C2D48001C2D48001C2D4F6 +:10BEF0008001C2D48001C2D48001C2D48001C2D4E6 +:10BF00008001C2D48001C2D48001C2D48001C2D4D5 +:10BF10008001C2D48001C2D48001C2D48001C2D4C5 +:10BF20008001C2D48001C2D48001C2D48001C2D4B5 +:10BF30008001C2D48001C2D48001C2D48001C2D4A5 +:10BF40008001C2D48001C2D48001C2D48001C2D495 +:10BF50008001C2D48001C2D48001C2D48001C2D485 +:10BF60008001C2D48001C2D48001C2D48001C2D475 +:10BF70008001C2D48001C2D48001C2D48001C2D465 +:10BF80008001C2D48001C2D48001C2D48001C2D455 +:10BF90008001C2D48001C2D48001C2D48001C2D445 +:10BFA0008001C2D48001C2D48001C2D48001C2D435 +:10BFB0008001C2D48001C2D48001C2D48001C2D425 +:10BFC0008001C2D48001C2D48001C2D48001C2D415 +:10BFD0008001C2D48001C2D48001C2D48001C2D405 +:10BFE0008001C2D48001C2D48001C2D48001C2D4F5 +:10BFF0008001C2D48001C2D48001C2D48001C2D4E5 +:10C000008001C2D48001C2D48001C2D48001C2D4D4 +:10C010008001C4B28001EFCA8001EFCE8001EF7AC7 +:10C020008001EF7A8001EF828001EF8A8001EF9238 +:10C030008001EF9A8001EFA28001EFAA8001EFB2A8 +:10C040008001EFBA8001EFC28001EFD68001F96074 +:10C050008001F93E8001F9CC8001F8A68001F9BE8B +:10C060008001F91C8001F8A68001F8E28001F8A6A1 +:10C070008001F8A68001F8A68001F8A68001F8A644 +:10C080008001F8A68001F8A68001F8A68001F8A634 +:10C090008001F8A68001F8A68001F8A68001F8A624 +:10C0A0008001F8A68001F8A68001F8A68001F8A614 +:10C0B0008001F8A68001F8A68001F8A68001F8A604 +:10C0C0008001F8A68001F8A68001F8A68001F8A6F4 +:10C0D0008001F8A68001F8A68001F8A68001F8A6E4 +:10C0E0008001F8A68001F8A68001F8A68001F8A6D4 +:10C0F0008001F8A68001F8A68001F8A68001F8A6C4 +:10C100008001F8A68001F8A68001F8A68001F8A6B3 +:10C110008001F8A68001F8A68001F8A68001F8A6A3 +:10C120008001F8A68001F8A68001F8A68001F8A693 +:10C130008001F8A68001F8A68001F8A68001F8A683 +:10C140008001F8A68001F8A68001F8C08001FA58A5 +:10C150008001F8F08001F8F08001F90E8001F8F01C +:10C160008001F8F08001F8F08001F8F08001F8F02B +:10C170008001F8F08001F8F08001F8F08001F8F01B +:10C180008001F8F08001F90E8001F8F08001F8F0EC +:10C190008001F8F08001F8F08001F8F08001F8F0FB +:10C1A0008001F8F08001FA488001F8F08001F8F091 +:10C1B0008001F8F08001F8F08001F8F08001F8F0DB +:10C1C0008001F8F08001F8F08001F8F08001F8F0CB +:10C1D0008001F8F08001F8F08001F8F08001F8F0BB +:10C1E0008001F8F08001F8F08001F8F08001F8F0AB +:10C1F0008001F8F08001F8F08001F8F08001F8F09B +:10C200008001F8F08001F8F08001F8F08001F8F08A +:10C210008001F8F08001F8F08001F8F08001F8F07A +:10C220008001F8F08001F8F08001F8F08001F8F06A +:10C230008001F8F08001F8F08001F8F08001F8F05A +:10C240008001F8F08001F8F08001F8F08001F8F04A +:10C250008001F8F08001F8F08001F8F08001F8F03A +:10C260008001F8F08001F8F08001F8F08001F8F02A +:10C270008001F8F08001F8F08001F8F08001F8F01A +:10C280008001F8F08001F8F08001F8F08001F8F00A +:10C290008001F8F08001F8F08001F8F08001F8F0FA +:10C2A0008001F8F08001F8F08001F8F08001F8F0EA +:10C2B0008001F8F08001F8F08001F8F08001F8F0DA +:10C2C0008001F8F08001F8F08001F8F08001F8F0CA +:10C2D0008001F8F08001F8F08001F8F08001F8F0BA +:10C2E0008001F8F08001F8F08001F8F08001F8F0AA +:10C2F0008001F8F08001F8F08001F8F08001F8F09A +:10C300008001F8F08001F8F08001F8F08001F8F089 +:10C310008001F8F08001F8F08001F8F08001F8F079 +:10C320008001F8F08001F8F08001F8F08001F8F069 +:10C330008001F8F08001F8F08001F8F08001F8F059 +:10C340008001F8F08001F8F08001F8F08001F8F049 +:10C350008001F90E8001FA348001F8F08001F90EB5 +:10C360008001F8F08001F8F08001F8F08001F8F029 +:10C370008001F8F08001F8F08001F8F08001F90EFA +:10C380008001F8F08001F8F08001FA2C8001FA2495 +:10C390008001FA1C8001FA148001FA0C8001FA0471 +:10C3A0008001FA408001F8F08001FA5057455F495A +:10C3B0004E445F38303231315F434F4E4E45435427 +:10C3C0004544000057455F494E445F3830323131B3 +:10C3D0005F444953434F4E4E454354494E47000036 +:10C3E00057455F494E445F38303231315F494253DF +:10C3F000535F444953434F4E4E4543544544000018 +:10C40000332E312E322E312E34000000352E3233B1 +:10C4100000000000352E32322E320000352E32322E +:10C420002E310000352E322E39000000352E3138E5 +:10C430002E310000352E31382E320000352E3232AA +:10C440002E340000352E32342E320000352E323498 +:10C450002E310000352E31312E310000352E322E96 +:10C4600032000000352E31362E320000352E3136A6 +:10C470002E310000312E312E312E323200000000DC +:10C48000352E322E31392E3500000000352E322E59 +:10C4900031392E3400000000352E322E31392E3342 +:10C4A00000000000352E322E31392E3200000000FF +:10C4B000352E322E31392E3100000000352E322E2D +:10C4C00031000000352E31312E320000352E313151 +:10C4D0002E330000352E31312E340000352E31310F +:10C4E0002E350000352E31312E360000352E3131FB +:10C4F0002E380000352E31312E37000073736964F9 +:10C500000000000070736B004A756E6B41500000B4 +:10C5100057534300656170005746412D53696D7054 +:10C520006C65436F6E6669672D456E726F6C6C65E6 +:10C53000652D312D300000006964656E7469747971 +:10C54000000000006E7277696669000064656661CC +:10C55000756C740057455F494E445F383032313155 +:10C560005F444953434F4E4E4543544544000000F9 +:10C5700057455F494E445F50414952574953455FC3 +:10C580004D49435F4552524F5200000057455F49A5 +:10C590004E445F47524F55505F4D49435F4552529D +:10C5A0004F52000057455F494E445F43414E444956 +:10C5B000444154455F4C495354000000494E4143A7 +:10C5C0005449564500000000444953434F4E4E45E0 +:10C5D00043544544000000005343414E4E494E47EA +:10C5E000000000004153534F43494154494E470016 +:10C5F0004153534F43494154454400003457415936 +:10C600005F48414E445348414B45000047524F5507 +:10C61000505F48414E445348414B4500434F4D50B5 +:10C620004C45544544000000554E4B4E4F574E006C +:10C630004354524C2D4556454E542D5445524D4968 +:10C640004E4154494E47202D207369676E616C201E +:10C650002564207265636569766564007769726533 +:10C660006400000043616E63656C6C696E672061F5 +:10C67000757468656E7469636174696F6E2074693E +:10C680006D656F75740000005750413A2045415068 +:10C690004F4C2070726F63657373696E6720636FB0 +:10C6A0006D706C657465000043616E63656C6C69E8 +:10C6B0006E67207363616E207265717565737400B7 +:10C6C00052534E3A207573696E672049454545209F +:10C6D0003830322E3131692F44392E3000000000BD +:10C6E0005750413A207573696E672049454545208A +:10C6F0003830322E3131692F44332E3000000000A3 +:10C700005750413A204661696C656420746F20700F +:10C7100061727365205750412049452066726F6DE4 +:10C72000206173736F63696174696F6E20696E66EF +:10C730006F0000005750413A2044726976657220BC +:10C74000757365642064697361626C6564206772E7 +:10C750006F75702063697068657220307825782065 +:10C76000286D61736B203078257829202D20726523 +:10C770006A656374000000005750413A20447269B2 +:10C7800076657220757365642064697361626C6597 +:10C790006420706169727769736520636970686588 +:10C7A00072203078257820286D61736B20307825D1 +:10C7B0007829202D2072656A656374005750413ACC +:10C7C00020447269766572207573656420646973AC +:10C7D00061626C6564206B6579206D616E6167656F +:10C7E0006D656E74203078257820286D61736B201C +:10C7F0003078257829202D2072656A6563740000E1 +:10C800005750413A207573696E672047544B204357 +:10C81000434D50005750413A207573696E67204769 +:10C82000544B20544B4950005750413A207573697E +:10C830006E672047544B205745503130340000007C +:10C840005750413A207573696E672047544B205703 +:10C8500045503430000000005750413A207573694C +:10C860006E672050544B2043434D50005750413A7F +:10C87000207573696E672050544B20544B4950000B +:10C880005750413A207573696E672050544B204EC3 +:10C890004F4E45005750413A207573696E67204BE3 +:10C8A00045595F4D474D54203830322E31580000E5 +:10C8B0005750413A207573696E67204B45595F4D5B +:10C8C000474D54205750412D50534B005750413A3B +:10C8D000207573696E67204B45595F4D474D542055 +:10C8E0005750412D4E4F4E45000000005750413AE1 +:10C8F000204661696C656420746F2073656C6563A4 +:10C9000074205750412F52534E0000004661696C0D +:10C91000656420746F20706172736520746865208F +:10C92000636F6E66696775726174696F6E206669A0 +:10C930006C652027257327202D2065786974696E22 +:10C94000670000005265636F6E6669677572617497 +:10C95000696F6E20636F6D706C65746564000000B4 +:10C9600053657474696E672061757468656E746967 +:10C97000636174696F6E2074696D656F75743A20B8 +:10C98000256420736563202564207573656300004A +:10C9900053657474696E67207363616E207265718C +:10C9A000756573743A2025642073656320256420BF +:10C9B000757365630000000041757468656E746985 +:10C9C000636174696F6E20776974682025303278EE +:10C9D0003A253032783A253032783A253032783A72 +:10C9E000253032783A253032782074696D656420BC +:10C9F0006F75742E00000000547279696E672074A0 +:10CA00006F206173736F63696174652077697468FF +:10CA100020253032783A253032783A253032783A4B +:10CA2000253032783A253032783A2530327820284D +:10CA3000535349443D2725732720667265713D2570 +:10CA400064204D487A290000547279696E67207419 +:10CA50006F206173736F63696174652077697468AF +:10CA60002053534944202725732700004173736FD7 +:10CA700063696174696F6E20726571756573742086 +:10CA8000746F2074686520647269766572206661CF +:10CA9000696C6564000000007770615F7375707089 +:10CAA0006C6963616E742076302E352E31300A4306 +:10CAB0006F7079726967687420286329203230307A +:10CAC000332D323030382C204A6F756E69204D611D +:10CAD0006C696E656E203C6A4077312E66693E2037 +:10CAE000616E6420636F6E7472696275746F7273C5 +:10CAF00000000000546869732070726F6772616D86 +:10CB0000206973206672656520736F667477617241 +:10CB1000652E20596F752063616E2064697374728D +:10CB2000696275746520697420616E642F6F72206C +:10CB30006D6F646966792069740A756E6465722028 +:10CB4000746865207465726D73206F662074686503 +:10CB500020474E552047656E6572616C20507562A6 +:10CB60006C6963204C6963656E73652076657273CA +:10CB7000696F6E20322E0A0A416C7465726E6174A0 +:10CB80006976656C792C207468697320736F66749C +:10CB900077617265206D61792062652064697374C4 +:10CBA0007269627574656420756E6465722074685C +:10CBB00065207465726D73206F66207468650A4223 +:10CBC0005344206C6963656E73652E205365652040 +:10CBD000524541444D4520616E6420434F505949B0 +:10CBE0004E4720666F72206D6F72652064657461B8 +:10CBF000696C732E0A0000002530325800000000D6 +:10CC00008003C4FC80024A908002490000000010AA +:10CC100000000014000000000000002000000000E0 +:10CC20008003D3EC80024DF0800248880000006051 +:10CC300000000000000000000000000100000000F3 +:10CC40008003D3F880024DCC800248280000000009 +:10CC500000000000000000000000000000000000D4 +:10CC60008003C50480024D00800248C4000000001B +:10CC700000000000000000000000000000000001B3 +:10CC80008003D4008002408C800247A8000000008E +:10CC90000000000000000000000000000000000094 +:10CCA0008003D40880023F448002467C00000000DC +:10CCB0000000000000000000000000000000000074 +:10CCC0008003D41480023F188002466C00000000EC +:10CCD0000000000000000000000000000000000054 +:10CCE0008003D42080023EEC8002465C00000000FD +:10CCF0000000000000000000000000000000000034 +:10CD00008003D42880023CA4800244740000000008 +:10CD10000000000000000000000000000000000013 +:10CD20008003C51480024B9080024B00000000007D +:10CD300000000000000000000000000000000000F3 +:10CD40008003C53880024A908002490000000068D4 +:10CD50000000006C00000000000000000000000067 +:10CD60008003D43480024A908002490000000070A1 +:10CD7000000000740000000000000000000000003F +:10CD80008003D44880024A90800249000000007865 +:10CD90000000007C000000100000002000000001E6 +:10CDA0008003D45080024A90800249000000008035 +:10CDB00000000084000000000000000000000000EF +:10CDC0008003D45480024A90800249000000008809 +:10CDD0000000008C000000000000000000000001C6 +:10CDE0008003D46080024A908002490000000090D5 +:10CDF0000000000000000000000000000000000033 +:10CE00008003D46880024A908002490000000094A8 +:10CE10000000000000000000000000000000000012 +:10CE20008003D47080024A9080024900000000987C +:10CE300000000000000000000000000000000000F2 +:10CE40008003D47C80024A90800249000000009C4C +:10CE500000000000000000000000000000000000D2 +:10CE60008003D48880024A9080024900000000A01C +:10CE700000000000000000000000000000000001B1 +:10CE80008003D49C80024A9080024900000000A4E4 +:10CE90000000000000000000000000000000000092 +:10CEA0008003D4A480024A9080024900000000A8B8 +:10CEB0000000000000000000000000000000000072 +:10CEC0008003D4B480024A9080024900000000AC84 +:10CED0000000000000000000000000000000000052 +:10CEE0008003D4C880024A9080024900000000B04C +:10CEF0000000000000000000000000000000000032 +:10CF00008003D4D480024A9080024900000000B41B +:10CF10000000000000000000000000000000000011 +:10CF20008003D4E080024A9080024900000000B8EB +:10CF300000000000000000000000000000000000F1 +:10CF40008003D4F080024A9080024900000000BCB7 +:10CF500000000000000000000000000000000000D1 +:10CF60008003D50080024A9080024900000000C082 +:10CF700000000000000000000000000000000001B0 +:10CF80008003D51480024A9080024900000000C44A +:10CF90000000000000000000000000000000000091 +:10CFA0008003D52080024A9080024900000000C81A +:10CFB0000000000000000000000000000000000071 +:10CFC0008003D53080024A9080024900000000CCE6 +:10CFD0000000000000000000000000000000000051 +:10CFE0008003D54480024A9080024900000000D4AA +:10CFF0000000000000000000000000000000000031 +:10D000008003D54C80024A9080024900000000D87D +:10D010000000000000000000000000000000000010 +:10D020008003D55480024A9080024900000000DC51 +:10D0300000000000000000000000000000000000F0 +:10D040008003D55C80024A9080024900000000E025 +:10D0500000000000000000000000000000000001CF +:10D060008003D56080024A9080024900000000E8F9 +:10D0700000000000000000000000000000000000B0 +:10D080008003D56C80024A9080024900000000ECC9 +:10D090000000000000000000000000000000000090 +:10D0A0008003D65C80024DF080024888000000E4D6 +:10D0B0000000000000000000000000000000000070 +:10D0C0008003D57480024DF080024888000000F093 +:10D0D0000000000000000000000000000000000050 +:10D0E0008003D58080024A78800244580000000006 +:10D0F000000000000000000000000000000000012F +:10D100008003D58C80024A608002443C000000000D +:10D11000000000000000000000000000000000010E +:10D120008003D59880024A48800244200000000015 +:10D1300000000000000000000000000000000001EE +:10D140008003D5A480024A3080024404000000001D +:10D1500000000000000000000000000000000001CE +:10D160008003D5B080024DF0800248880000014461 +:10D1700000000000000000000000000000000000AF +:10D180008003D5C080024DF0800248880000000C6A +:10D19000000000000000000000000000000000008F +:10D1A0008003D5CC80024DF0800248880000017CCD +:10D1B000000000000000000000000000000000006F +:10D1C0008003D5DC80024A90800249000000018083 +:10D1D000000000000000000000000000000000004F +:10D1E0008003D5E880024DF0800248880000019C51 +:10D1F000000000000000000000000000000000002F +:10D200008003D5F880024DF0800248880000018438 +:10D21000000000000000000000000001000000000D +:10D220008003D60080024DF0800248880000006430 +:10D2300000000000000000000000000200000000EC +:10D240008003D60880024DF0800248880000014823 +:10D2500000000000000000000000000100000000CD +:10D260008003D62080024DF080024888000001949F +:10D2700000000000000000000000000100000000AD +:10D280008003D62C80024A9080024900000001A051 +:10D29000000000000000000000000000000000008E +:10D2A0008003D63480024DF0800248880000019847 +:10D2B000000000000000000000000001000000006D +:10D2C0008003D63C80024DF0800248880000014C6B +:10D2D000000000000000000000000001000000004D +:10D2E0008003D64880024DF080024888000001A4E7 +:10D2F00000000000000000000000271000000000F7 +:10D300002A0000004F50454E000000005348415293 +:10D31000454400004C454150000000005745503145 +:10D320003034000057455034300000005750412D34 +:10D3300045415000494545453830323158000000DC +:10D340005750410052534E005750413200000000E8 +:10D3500025734F50454E00002573534841524544B4 +:10D360000000000025734C454150000025734343E5 +:10D370004D5000002573544B49500000257357450C +:10D3800050313034000000002573574550343000D0 +:10D3900025734E4F4E45000025735750412D505375 +:10D3A0004B00000025735750412D454150000000AF +:10D3B000257349454545383032315800257357505B +:10D3C000412D4E4F4E45000025735750410000003F +:10D3D000257352534E0000007765705F6B657925A9 +:10D3E0006400000025732573000000007363616E04 +:10D3F0005F73736964000000627373696400000006 +:10D4000070726F746F0000006B65795F6D676D748B +:10D4100000000000706169727769736500000000A8 +:10D4200067726F7570000000617574685F616C678A +:10D4300000000000616E6F6E796D6F75735F6964D7 +:10D44000656E74697479000065617070736B0000BB +:10D450006E61690070617373776F72640000000021 +:10D4600063615F636572740063615F70617468001B +:10D47000636C69656E745F6365727400707269765F +:10D480006174655F6B657900707269766174655F60 +:10D490006B65795F706173737764000064685F66C1 +:10D4A000696C65007375626A6563745F6D6174634E +:10D4B00068000000616C747375626A6563745F6D07 +:10D4C000617463680000000063615F6365727432B9 +:10D4D0000000000063615F7061746832000000004A +:10D4E000636C69656E745F6365727432000000007E +:10D4F000707269766174655F6B6579320000000057 +:10D50000707269766174655F6B6579325F706173A3 +:10D510007377640064685F66696C653200000000C0 +:10D520007375626A6563745F6D617463683200006D +:10D53000616C747375626A6563745F6D617463684E +:10D5400032000000706861736531000070686173BB +:10D5500065320000706373630000000070696E0044 +:10D56000656E67696E655F69640000006B65795F71 +:10D57000696400006561706F6C5F666C6167730061 +:10D580007765705F6B657930000000007765705FCC +:10D590006B657931000000007765705F6B657932EB +:10D5A000000000007765705F6B6579330000000054 +:10D5B0007765705F74785F6B6579696478000000E7 +:10D5C0007072696F72697479000000006561705F44 +:10D5D000776F726B61726F756E6400007061635F6C +:10D5E00066696C6500000000667261676D656E7447 +:10D5F0005F73697A650000006D6F6465000000006C +:10D600007573655F7770730070726F6163746976AC +:10D61000655F6B65795F63616368696E67000000D1 +:10D6200064697361626C65640000000069645F7323 +:10D6300074720000706565726B6579006D6978655C +:10D64000645F63656C6C00006672657175656E631E +:10D6500079000000888E000077696669656E6769E9 +:10D660006E65000057694669456E67696E65000022 +:10D670008003D6588003D664800254C880025420A8 +:10D6800080024F98800252E0800253E8800254A446 +:10D690000000000080024F9A800252C880024F941E +:10D6A00080024F96800252B08002529880024F9CB6 +:10D6B00080024F9E8002523C800251E0800251D491 +:10D6C000800251AC00000000000000008002518088 +:10D6D00080024FF480024FD00000000000000000E4 +:10D6E000000000000000000000000000000000003A +:10D6F000000000000000000080024FA08002564E93 +:10D700008002564A80025646800256408002563CAD +:10D7100080025636800256328002562C80025626EF +:10D72000800256928002568C800256888002568271 +:10D730008002567C80025676800256728002566CB9 +:10D740008002566680025B3480025C0880025BE0E7 +:10D7500080025BBA80025BA080025B3480025B3493 +:10D7600080025B3480025DC280025E3A80025E12FB +:10D7700080025D8E80025CC280025AF680025DF4F7 +:10D7800080025DCE800268DC80026AA280026A00AC +:10D7900080026904800268F2800269EE800268DC1F +:10D7A000800268DC800268E8800268E8800268E83D +:10D7B000696E76616C696461746500004354524C13 +:10D7C0002D4556454E542D4541502D535543434507 +:10D7D0005353204541502061757468656E746963C8 +:10D7E0006174696F6E20636F6D706C657465642021 +:10D7F0007375636365737366756C6C7920286261F9 +:10D80000736564206F6E206C6F776572206C617930 +:10D810006572207375636365737329004354524CBA +:10D820002D4556454E542D4541502D5355434345A6 +:10D830005353204541502061757468656E74696367 +:10D840006174696F6E20636F6D706C6574656420C0 +:10D850007375636365737366756C6C7900000000A3 +:10D860004354524C2D4556454E542D4541502D465E +:10D8700041494C55524520454150206175746865B9 +:10D880006E7469636174696F6E206661696C65644A +:10D8900000000000494E495449414C495A45000096 +:10D8A0004541503A206D6F7265207468616E202585 +:10D8B000642061757468656E7469636174696F6E04 +:10D8C00020726F756E6473202D2061626F72740018 +:10D8D0004354524C2D4556454E542D4541502D4EE6 +:10D8E0004F54494649434154494F4E2000000000DF +:10D8F0004354524C2D4556454E542D4541502D53C1 +:10D900005441525445442045415020617574686526 +:10D910006E7469636174696F6E207374617274658B +:10D92000640000004745545F4D4554484F44000093 +:10D930004541503A204661696C656420746F2069E6 +:10D940006E697469616C697A6520454150206D6526 +:10D9500074686F643A2076656E646F722025752056 +:10D960006D6574686F642025752028257329000073 +:10D970004354524C2D4556454E542D4541502D4D46 +:10D980004554484F44204541502076656E646F727F +:10D99000202575206D6574686F6420257520282505 +:10D9A00073292073656C656374656400454150207C +:10D9B0006465696E697400008002794480027ADAD5 +:10D9C00080027B5880027BA280027CC880027CD2CD +:10D9D00080027AC45750413A20544B495020636F1B +:10D9E000756E7465726D656173757265732073749D +:10D9F0006F707065640000004173736F63696174D8 +:10DA0000656420746F2061206E6577204253533A1D +:10DA10002042535349443D253032783A25303278FC +:10DA20003A253032783A253032783A253032783A11 +:10DA300025303278000000004173736F63696174B0 +:10DA40006564207769746820253032783A25303251 +:10DA5000783A253032783A253032783A25303278A3 +:10DA60003A253032780000005750413A20342D5783 +:10DA700061792048616E647368616B6520666169D5 +:10DA80006C6564202D207072652D73686172656409 +:10DA9000206B6579206D617920626520696E636F06 +:10DAA00072726563740000004354524C2D45564514 +:10DAB0004E542D444953434F4E4E45435445442004 +:10DAC0002D20446973636F6E6E656374206576659F +:10DAD0006E74202D2072656D6F7665206B6579738D +:10DAE000000000004D69636861656C204D4943206A +:10DAF0006661696C757265206465746563746564DC +:10DB000000000000544B495020636F756E746572BD +:10DB10006D65617375726573207374617274656489 +:10DB200000000000000000080000000600000006E1 +:10DB3000496E646578202F204141202F20504D4BA5 +:10DB40004944202F2065787069726174696F6E2076 +:10DB500028696E207365636F6E647329202F206FB0 +:10DB600070706F7274756E69737469630A00000077 +:10DB7000256420253032783A253032783A25303203 +:10DB8000783A253032783A253032783A2530327872 +:10DB9000200000002025642025640A00504D4B2001 +:10DBA0004E616D650000000052534E3A207374615F +:10DBB0007274696E67207072652D61757468656E28 +:10DBC0007469636174696F6E2077697468202530A9 +:10DBD00032783A253032783A253032783A25303268 +:10DBE000783A253032783A253032780052534E3A1E +:10DBF0002070726F63657373696E6720504D4B536D +:10DC0000412063616E646964617465206C6973743A +:10DC10000000000052534E3A206E6F7420696E204F +:10DC20007375697461626C652073746174652066D4 +:10DC30006F72206E6577207072652D6175746865EE +:10DC40006E7469636174696F6E00000052534E3ADE +:10DC500020504D4B53412063616E6469646174656B +:10DC600020253032783A253032783A253032783AE9 +:10DC7000253032783A253032783A253032782073A0 +:10DC8000656C656374656420666F72207072652DC3 +:10DC900061757468656E7469636174696F6E0000A4 +:10DCA00052534E3A20504D4B53412063616E64698C +:10DCB0006461746520253032783A253032783A250F +:10DCC0003032783A253032783A253032783A253079 +:10DCD000327820646F6573206E6F74206E656564A2 +:10DCE000207072652D61757468656E746963617406 +:10DCF000696F6E20616E796D6F72650052534E3A96 +:10DD0000206E6F206D6F72652070656E64696E673E +:10DD100020504D4B53412063616E646964617465AA +:10DD20007300000052534E3A2061646465642050D1 +:10DD30004D4B53412063616368652063616E646984 +:10DD40006461746520253032783A253032783A257E +:10DD50003032783A253032783A253032783A2530E8 +:10DD60003278207072696F202564000052534E3A59 +:10DD7000207072652D61757468656E746963617475 +:10DD8000696F6E207769746820253032783A2530C3 +:10DD900032783A253032783A253032783A253032A6 +:10DDA000783A253032782074696D6564206F757417 +:10DDB00000000000636F6D706C657465642073759E +:10DDC000636365737366756C6C79000052534E3AE9 +:10DDD000206661696C656420746F20676574206DCE +:10DDE00061737465722073657373696F6E206B6500 +:10DDF000792066726F6D207072652D617574682070 +:10DE00004541504F4C207374617465206D616368A7 +:10DE1000696E65730000000052534E3A20707265BF +:10DE20002D61757468656E7469636174696F6E20C5 +:10DE30007769746820253032783A253032783A256F +:10DE40003032783A253032783A253032783A2530F7 +:10DE50003278202573000000800000008002B51C8D +:10DE60008002B50A8002B5008002B4FA8002B4F4E0 +:10DE70008002B4EE8002B4E8000FAC010050F20260 +:10DE8000000FAC02000FAC01000FAC050050F20215 +:10DE9000000FAC040050F2010050F2010050F201FA +:10DEA0000050F2050050F200000FAC00000FAC0370 +:10DEB0000050F200000FAC0449454545203830328F +:10DEC0002E315820286E6F20575041290000000045 +:10DED0005750412F49454545203830322E31582F73 +:10DEE00045415000575041322F4945454520383073 +:10DEF000322E31582F45415000000000575041321A +:10DF00002D50534B000000005745502D3430000079 +:10DF10005745502D313034007061697277697365EF +:10DF20005F6369706865723D25730A67726F75700B +:10DF30005F6369706865723D25730A6B65795F6D13 +:10DF4000676D743D25730A005750413A20257320B0 +:10DF5000287372633D253032783A253032783A257D +:10DF60003032783A253032783A253032783A2530D6 +:10DF7000327829005750413A204B6579206E656709 +:10DF80006F74696174696F6E20636F6D706C657416 +:10DF90006564207769746820253032783A253032FC +:10DFA000783A253032783A253032783A253032784E +:10DFB0003A25303278205B50544B3D25732047542E +:10DFC0004B3D25735D0000005750413A20496E7665 +:10DFD000616C6964204541504F4C2D4B657920663A +:10DFE00072616D65202D206B65795F6461746120BD +:10DFF0006F766572666C6F7720282564203E202539 +:10E000006C752900494520696E20332F34206D73CB +:10E010006720646F6573206E6F74206D6174636830 +:10E02000207769746820494520696E2042656163E4 +:10E030006F6E2F50726F62655265737020286E6F1D +:10E040002049453F29000000494520696E20332FB3 +:10E0500034206D736720646F6573206E6F74206D5C +:10E0600061746368207769746820494520696E206F +:10E07000426561636F6E2F50726F62655265737097 +:10E0800000000000506F737369626C6520646F77E5 +:10E090006E67726164652061747461636B2064658E +:10E0A000746563746564202D2052534E207761732C +:10E0B00020656E61626C656420616E642052534E0F +:10E0C0002049452077617320696E206D7367203386 +:10E0D0002F342C20627574206E6F7420696E20427C +:10E0E0006561636F6E2F50726F6265526573700069 +:10E0F0005750413A204661696C656420746F20670F +:10E100006574206D61737465722073657373696FD4 +:10E110006E206B65792066726F6D204541504F4CC3 +:10E12000207374617465206D616368696E65730046 +:10E130005750413A204B65792068616E647368617D +:10E140006B652061626F7274656400005750413ADC +:10E15000204661696C656420746F20676574207265 +:10E16000616E646F6D206461746120666F7220530C +:10E170004E6F6E6365000000506169727769736568 +:10E18000206B657920657870616E73696F6E000031 +:10E190005750413A2047726F75702072656B6579F0 +:10E1A000696E6720636F6D706C6574656420776954 +:10E1B000746820253032783A253032783A2530326A +:10E1C000783A253032783A253032783A253032782C +:10E1D000205B47544B3D25735D00000000000000AC +:10E1E000000000000050F204000FAC02000FAC0170 +:10E1F00052096AD53036A538BF40A39E81F3D7FBBC +:10E200007CE339829B2FFF87348E4344C4DEE9CB05 +:10E21000547B9432A6C2233DEE4C950B42FAC34E7A +:10E22000082EA16628D924B2765BA2496D8BD12530 +:10E2300072F8F66486689816D4A45CCC5D65B692D4 +:10E240006C704850FDEDB9DA5E154657A78D9D8478 +:10E2500090D8AB008CBCD30AF7E45805B8B3450698 +:10E26000D02C1E8FCA3F0F02C1AFBD0301138A6BB2 +:10E270003A9111414F67DCEA97F2CFCEF0B4E673E2 +:10E2800096AC7422E7AD3585E2F937E81C75DF6E90 +:10E2900047F11A711D29C5896FB7620EAA18BE1BF6 +:10E2A000FC563E4BC6D279209ADBC0FE78CD5AF49C +:10E2B0001FDDA8338807C731B11210592780EC5FE2 +:10E2C00060517FA919B54A0D2DE57A9F93C99CEF3E +:10E2D000A0E03B4DAE2AF5B0C8EBBB3C835399613F +:10E2E000172B047EBA77D626E169146355210C7D7D +:10E2F00001020408102040801B36000051F4A75092 +:10E300007E4165531A17A4C33A275E963BAB6BCB8D +:10E310001F9D45F1ACFA58AB4BE303932030FA55FF +:10E32000AD766DF688CC7691F5024C254FE5D7FC9D +:10E33000C52ACBD726354480B562A38FDEB15A49B2 +:10E3400025BA1B6745EA0E985DFEC0E1C32F750232 +:10E35000814CF0128D4697A36BD3F9C6038F5FE70C +:10E3600015929C95BF6D7AEB955259DAD4BE832DE8 +:10E37000587421D349E069298EC9C84475C2896A95 +:10E38000F48E797899583E6B27B971DDBEE14FB6AE +:10E39000F088AD17C920AC667DCE3AB463DF4A1869 +:10E3A000E51A31829751336062537F45B16477E05B +:10E3B000BB6BAE84FE81A01CF9082B947048685892 +:10E3C0008F45FD1994DE6C87527BF8B7AB73D3236E +:10E3D000724B02E2E31F8F576655AB2AB2EB280758 +:10E3E0002FB5C20386C57B9AD33708A5302887F29C +:10E3F00023BFA5B202036ABAED16825C8ACF1C2B3A +:10E40000A779B492F307F2F04E69E2A165DAF4CD90 +:10E410000605BED5D134621FC4A6FE8A342E539D94 +:10E42000A2F355A0058AE132A4F6EB750B83EC3913 +:10E430004060EFAA5E719F06BD6E10513E218AF9C1 +:10E4400096DD063DDD3E05AE4DE6BD4691548DB5EB +:10E4500071C45D050406D46F605015FF1998FB2444 +:10E46000D6BDE997894043CC67D99E77B0E842BDD5 +:10E4700007898B88E7195B3879C8EEDBA17C0A47EE +:10E480007C420FE9F8841EC90000000009808683E1 +:10E49000322BED481E1170AC6C5A724EFD0EFFFB14 +:10E4A0000F8538563DAED51E362D39270A0FD96453 +:10E4B000685CA6219B5B54D124362E3A0C0A67B1C6 +:10E4C0009357E70FB4EE96D21B9B919E80C0C54F29 +:10E4D00061DC20A25A774B691C121A16E293BA0A21 +:10E4E000C0A02AE53C22E043121B171D0E090D0BAC +:10E4F000F28BC7AD2DB6A8B9141EA9C857F119855E +:10E50000AF75074CEE99DDBBA37F60FDF701269F39 +:10E510005C72F5BC44663BC55BFB7E348B4329765D +:10E52000CB23C6DCB6EDFC68B8E4F163D731DCCAB6 +:10E53000426385101397224084C61120854A247DAA +:10E54000D2BB3DF8AEF93211C729A16D1D9E2F4BEC +:10E55000DCB230F30D8652EC77C1E3D02BB3166CEE +:10E56000A970B999119448FA47E96422A8FC8CC4AF +:10E57000A0F03F1A567D2CD8223390EF87494EC722 +:10E58000D938D1C18CCAA2FE98D40B36A6F581CF5A +:10E59000A57ADE28DAB78E263FADBFA42C3A9DE4DB +:10E5A0005078920D6A5FCC9B547E4662F68D13C202 +:10E5B00090D8B8E82E39F75E82C3AFF59F5D80BE74 +:10E5C00069D0937C6FD52DA9CF2512B3C8AC993BE8 +:10E5D00010187DA7E89C636EDB3BBB7BCD267809DA +:10E5E0006E5918F4EC9AB701834F9AA8E6956E65B8 +:10E5F000AAFFE67E21BCCF08EF15E8E6BAE79BD973 +:10E600004A6F36CEEA9F09D429B07CD631A4B2AF86 +:10E610002A3F2331C6A5943035A266C0744EBC375C +:10E62000FC82CAA6E090D0B033A7D815F104984A6E +:10E6300041ECDAF77FCD500E1791F62F764DD68D3F +:10E6400043EFB04DCCAA4D54E49604DF9ED1B5E320 +:10E650004C6A881BC12C1FB84665517F9D5EEA0439 +:10E66000018C355DFA877473FB0B412EB3671D5A1D +:10E6700092DBD252E91056336DD647139AD7618C8C +:10E6800037A10C7A59F8148EEB133C89CEA927EEEA +:10E69000B761C935E11CE5ED7A47B13C9CD2DF5941 +:10E6A00055F2733F1814CE7973C737BF53F7CDEACD +:10E6B0005FFDAA5BDF3D6F147844DB86CAAFF38150 +:10E6C000B968C43E3824342CC2A3405F161DC372FF +:10E6D000BCE2250C283C498BFF0D954139A80171FE +:10E6E000080CB3DED8B4E49C6456C1907BCB846143 +:10E6F000D532B670486C5C74D0B85742C66363A517 +:10E70000F87C7C84EE777799F67B7B8DFFF2F20DB7 +:10E71000D66B6BBDDE6F6FB191C5C55460303050A4 +:10E7200002010103CE6767A9562B2B7DE7FEFE1978 +:10E73000B5D7D7624DABABE6EC76769A8FCACA45B1 +:10E740001F82829D89C9C940FA7D7D87EFFAFA153B +:10E75000B25959EB8E4747C9FBF0F00B41ADADEC18 +:10E76000B3D4D4675FA2A2FD45AFAFEA239C9CBFA0 +:10E7700053A4A4F7E47272969BC0C05B75B7B7C28E +:10E78000E1FDFD1C3D9393AE4C26266A6C36365A4D +:10E790007E3F3F41F5F7F70283CCCC4F6834345CC1 +:10E7A00051A5A5F4D1E5E534F9F1F108E2717193D1 +:10E7B000ABD8D873623131532A15153F0804040CC5 +:10E7C00095C7C752462323659DC3C35E30181828DA +:10E7D000379696A10A05050F2F9A9AB50E070709D5 +:10E7E000241212361B80809BDFE2E23DCDEBEB264C +:10E7F0004E2727697FB2B2CDEA75759F1209091BB2 +:10E800001D83839E582C2C74341A1A2E361B1B2DF4 +:10E81000DC6E6EB2B45A5AEE5BA0A0FBA45252F664 +:10E82000763B3B4DB7D6D6617DB3B3CE5229297B1B +:10E83000DDE3E33E5E2F2F7113848497A65353F5D7 +:10E84000B9D1D16800000000C1EDED2C402020605E +:10E85000E3FCFC1F79B1B1C8B65B5BEDD46A6ABE5C +:10E860008DCBCB4667BEBED97239394B944A4ADE4E +:10E87000984C4CD4B05858E885CFCF4ABBD0D06B19 +:10E88000C5EFEF2A4FAAAAE5EDFBFB16864343C569 +:10E890009A4D4DD766333355118585948A4545CFBA +:10E8A000E9F9F91004020206FE7F7F81A05050F0C2 +:10E8B000783C3C44259F9FBA4BA8A8E3A25151F352 +:10E8C0005DA3A3FE804040C0058F8F8A3F9292AD2A +:10E8D000219D9DBC70383848F1F5F50463BCBCDF60 +:10E8E00077B6B6C1AFDADA75422121632010103055 +:10E8F000E5FFFF1AFDF3F30EBFD2D26D81CDCD4CF3 +:10E90000180C0C1426131335C3ECEC2FBE5F5FE11B +:10E91000359797A2884444CC2E17173993C4C4570F +:10E9200055A7A7F2FC7E7E827A3D3D47C86464AC61 +:10E93000BA5D5DE73219192BE6737395C06060A06C +:10E94000198181989E4F4FD1A3DCDC7F442222663F +:10E95000542A2A7E3B9090AB0B8888838C4646CA0B +:10E96000C7EEEE296BB8B8D32814143CA7DEDE79C5 +:10E97000BC5E5EE2160B0B1DADDBDB76DBE0E03B45 +:10E9800064323256743A3A4E140A0A1E924949DBEE +:10E990000C06060A4824246CB85C5CE49FC2C25D85 +:10E9A000BDD3D36E43ACACEFC46262A6399191A8DB +:10E9B000319595A4D3E4E437F279798BD5E7E73242 +:10E9C0008BC8C8436E373759DA6D6DB7018D8D8CA2 +:10E9D000B1D5D5649C4E4ED249A9A9E0D86C6CB48F +:10E9E000AC5656FAF3F4F407CFEAEA25CA6565AFE8 +:10E9F000F47A7A8E47AEAEE9100808186FBABAD525 +:10EA0000F07878884A25256F5C2E2E72381C1C24DD +:10EA100057A6A6F173B4B4C797C6C651CBE8E8238E +:10EA2000A1DDDD7CE874749C3E1F1F21964B4BDDFD +:10EA300061BDBDDC0D8B8B860F8A8A85E07070907E +:10EA40007C3E3E4271B5B5C4CC6666AA904848D8B3 +:10EA500006030305F7F6F6011C0E0E12C26161A350 +:10EA60006A35355FAE5757F969B9B9D017868691BF +:10EA700099C1C1583A1D1D27279E9EB9D9E1E13899 +:10EA8000EBF8F8132B9898B322111133D26969BBB4 +:10EA9000A9D9D970078E8E89339494A72D9B9BB6E4 +:10EAA0003C1E1E2215878792C9E9E92087CECE49F0 +:10EAB000AA5555FF50282878A5DFDF7A038C8C8F64 +:10EAC00059A1A1F8098989801A0D0D1765BFBFDA10 +:10EAD000D7E6E631844242C6D06868B8824141C375 +:10EAE000299999B05A2D2D771E0F0F117BB0B0CBFD +:10EAF000A85454FC6DBBBBD62C16163A002020201F +:10EB000020202020202028282828282020202020DD +:10EB100020202020202020202020202020881010AD +:10EB20001010101010101010101010101004040409 +:10EB300004040404040404101010101010104141C7 +:10EB400041414141010101010101010101010101B5 +:10EB500001010101010101011010101010104242C9 +:10EB60004242424202020202020202020202020285 +:10EB70000202020202020202101010102000000025 +:10EB80000000000000000000000000000000000085 +:10EB90000000000000000000000000000000000075 +:10EBA0000000000000000000000000000000000065 +:10EBB0000000000000000000000000000000000055 +:10EBC0000000000000000000000000000000000045 +:10EBD0000000000000000000000000000000000035 +:10EBE0000000000000000000000000000000000025 +:10EBF0000000000000000000000000000000000015 +:10EC00002D2D0000504F5349584C595F434F5252DD +:10EC10004543540025733A206F7074696F6E20600D +:10EC200025732720697320616D626967756F75733D +:10EC30002028636F756C6420626520602D2D25731C +:10EC400027206F7220602D2D257327290A000000D0 +:10EC500025733A20696E76616C6964206F707469FF +:10EC60006F6E202D2D20602D2563270A00000000E7 +:10EC700025733A20617267756D656E7420726571D7 +:10EC8000756972656420666F72206F7074696F6E4B +:10EC9000206000002D2D2573270A00002D256327F5 +:10ECA0000A00000043000000000004A88002F4668F +:10ECB0008002F4888002F2B08002F2E88002F4520E +:10ECC0008002F4508002F3FE8002F4268002F3DC1E +:10ECD0008002F3DC8002F3CC8002F3DC8002F3EAF2 +:10ECE0008002F3EA8002F3DC3030303030303030F4 +:10ECF000303030303030303001020B040B0506016B +:10ED00000B01020B040B0506010B0B0B03040B0597 +:10ED10000B0B0B0B0B0B040B050B0B0B0B0B0B0B50 +:10ED20000B0B0B0B0B05080B040B0B070B0B0B0949 +:10ED30000B040B050B0B0B0B0A0B040B0B0B0B0B38 +:10ED40000B0B0B040B0B0B0B0B0B0B030B0B0B0B22 +:10ED50000B0B0B0B080B0B0B0B0B0B00000000003D +:10ED6000000000000001000304000000000001009A +:10ED7000030400000000000007030400000000007E +:10ED80000000030400000000000000000400000078 +:10ED90000000020003040000000000010005060559 +:10EDA0000000000001000506000000000000000354 +:10EDB0000400000000000008000000000000000047 +:10EDC000080000000000000000000000000000003B +:10EDD0003031323334353637383941424344454691 +:10EDE0000000000030313233343536373839616253 +:10EDF0006364656600000000202020202020202081 +:10EE000020202020202020200808080808080808C2 +:10EE10000808080808080808080808080808080872 +:10EE2000080808080808080807080807020808076B +:10EE30000808060708070508000101010101010192 +:10EE40000101080808080808080408040404040468 +:10EE50000808080803080804080808040804080843 +:10EE6000040808080808080808040804040404043E +:10EE70000304030803080404040308040304080843 +:10EE8000040803080808080808080808080808080B +:10EE900008080808080808080808080808080808F2 +:10EEA00008080808080808080808080808080808E2 +:10EEB00008080808080808080808080808080808D2 +:10EEC00008080808080808080808080808080808C2 +:10EED00008080808080808080808080808080808B2 +:10EEE00008080808080808080808080808080808A2 +:10EEF0000808080808080808080808080808080892 +:10EF00000808080808080808000A000100020003B1 +:10EF1000000400050006000700080009000A000BB5 +:10EF2000000C000D000E000F00100000000000009B +:10EF300000000000000000000000000000000000D1 +:10EF400000000000000000000000000000000000C1 +:10EF500000000000000000000000000000000000B1 +:10EF600000000000000000000000000000000000A1 +:10EF70000000000000000000000000000000000091 +:10EF800000000000000000000000000080037FB4CB +:10EF900080037E2080037E2080037E2080037E20ED +:10EFA00080037E2080037E2080037E2080037E20DD +:10EFB00080037E20FFFFFFFFFFFFFFFF49534F2D20 +:10EFC000383835392D310000800333228003334433 +:10EFD0008003316C800331A48003330E8003330C33 +:10EFE000800332BA800332E2800332988003329881 +:10EFF0008003328880033298800332A6800332A6D1 +:10F00000800332988003363480034AA480034AA4E4 +:10F010008003364480034AA480034AA480034AA4A0 +:10F0200080034AA480034AA480034AA4800336488C +:10F030008003371C80034AA48003371880033724D9 +:10F0400080034AA480033842800338468003384650 +:10F0500080033846800338468003384680033846AC +:10F0600080033846800338468003384680034AA42C +:10F0700080034AA480034AA480034AA480034AA4CC +:10F0800080034AA480034AA480034AA480034AA4BC +:10F0900080034AA48003394480033B9680034AA43A +:10F0A00080033B9680034AA480034AA480034AA4B9 +:10F0B00080034AA48003387880034AA480034AA4CA +:10F0C0008003416280034AA480034AA480034AA4C7 +:10F0D00080034AA480034AA48003452680034AA4EF +:10F0E00080034AA48003361A80034AA480034AA4FA +:10F0F00080034AA480034AA480034AA480034AA44C +:10F1000080034AA480034AA480034AA480034AA43B +:10F11000800338988003395A80033B9680033B96DE +:10F1200080033B968003387C8003395A80034AA4CD +:10F1300080034AA48003388080034AA480033FA24E +:10F1400080034178800343A48003389480034AA459 +:10F150008003445880034AA48003453C80034AA4AA +:10F1600080034AA48003476E01020B040B050601CD +:10F170000B01020B040B0506010B0B0B03040B0523 +:10F180000B0B0B0B0B0B040B050B0B0B0B0B0B0BDC +:10F190000B0B0B0B0B05080B040B0B070B0B0B09D5 +:10F1A0000B040B050B0B0B0B0A0B040B0B0B0B0BC4 +:10F1B0000B0B0B040B0B0B0B0B0B0B030B0B0B0BAE +:10F1C0000B0B0B0B080B0B0B0B0B0B0000000000C9 +:10F1D0000000000000010003040000000000010026 +:10F1E000030400000000000007030400000000000A +:10F1F0000000030400000000000000000400000004 +:10F2000000000200030400000000000100050605E4 +:10F2100000000000010005060000000000000003DF +:10F2200004000000000000080000000000000000D2 +:10F2300008000000000000000000000000000000C6 +:10F24000494E4600696E66004E414E006E616E008A +:10F2500020202020202020202020202020202020AE +:10F26000303030303030303030303030303030309E +:10F27000080808080808080808080808080808080E +:10F2800008080808080808080808080808080808FE +:10F2900007080807020808070808060708070508FE +:10F2A0000001010101010101010108080808080825 +:10F2B00008040804040404040808080803080804EF +:10F2C00008080804080408080408080808080808CA +:10F2D00008040804040404040304030803080404E1 +:10F2E00004030804030408080408030808080808BD +:10F2F000080808080808080808080808080808088E +:10F30000080808080808080808080808080808087D +:10F31000080808080808080808080808080808086D +:10F32000080808080808080808080808080808085D +:10F33000080808080808080808080808080808084D +:10F34000080808080808080808080808080808083D +:10F35000080808080808080808080808080808082D +:10F36000080808080808080808080808080808081D +:10F37000496E66696E697479000000004E614E0046 +:10F3800000000005000000190000007D3FF00000B3 +:10F390000000000040240000000000004059000070 +:10F3A00000000000408F40000000000040C38800C3 +:10F3B0000000000040F86A0000000000412E848038 +:10F3C00000000000416312D0000000004197D78484 +:10F3D0000000000041CDCD65000000004202A05FAA +:10F3E0002000000042374876E8000000426D1A9481 +:10F3F000A200000042A2309CE540000042D6BCC4FE +:10F400001E900000430C6BF5263400004341C37985 +:10F4100037E080004376345785D8A00043ABC16DF8 +:10F42000674EC80043E158E460913D004415AF1DAC +:10F4300078B58C40444B1AE4D6E2EF504480F0CFCC +:10F44000064DD59244B52D02C7E14AF644EA784309 +:10F4500079D99DB44341C37937E080004693B8B56C +:10F46000B5056E174D384F03E93FF9F55A827748D5 +:0CF47000F9301D3275154FDD7F73BF3C75 +:10F480000000000455736167653A2074746370204E +:10F490002D742F2D72205B2D6F7074696F6E735DEC +:10F4A00020686F73740A20202020202020202D6CDB +:10F4B0002020202020206C656E677468206F6620F5 +:10F4C00062756673207772697474656E20746F203C +:10F4D0006E6574776F726B202864656661756C74F5 +:10F4E0002031303234290A20202020202020202DD5 +:10F4F0006E2020202020206E756D626572206F6660 +:10F500002062756673207772697474656E20746FFB +:10F51000206E6574776F726B202864656661756C08 +:10F52000742031303234290A20202020202020204D +:10F530002D70202020202020706F7274206E756D39 +:10F5400062657220746F2073656E6420746F20286A +:10F5500064656661756C742032303030290A202071 +:10F560002020202020202D752020202020207564A0 +:10F57000700A20202020202020202D7620202020EE +:10F580002020766572626F73650A000080039954CB +:10F59000000000000000000000000000000000006B +:10F5A000000000000000000000000000000000005B +:10F5B000000000000000000000000000000000004B +:10F5C000000000000000000000000000000000003B +:10F5D000000000000000000000000000000000002B +:10F5E000000000000000000000000000000000001B +:10F5F000000000000000000000000000000000000B +:10F6000000000000000000000000000000000000FA +:10F6100000000000000000000000000000000000EA +:10F6200000000000000000000000000000000000DA +:10F6300000000000000000000000000000000000CA +:10F6400000000000000000000000000000000000BA +:10F6500000000000000000000000000000000000AA +:10F660000000000400000000ABCD00000000196E97 +:10F6700010000000FFFFFFFFFFFFFFFFFF7590007E +:10F68000000001FFFFFFFFFEFFFFFFFFFF751000FF +:10F69000000001FFFFFFFFFE00050000800149ECB4 +:10F6A000800149EC800149EC800149EC0000000038 +:10F6B000000002340000000C02040B0C1216182487 +:10F6C0003048606C000000000000000000000000F6 +:10F6D00000000010010000146D3E86B0FFFFFFFF28 +:10F6E000FFFF0000000003E800000001000000012F +:10F6F00000000320000000010000000000000008DE +:10F70000000000020000006400000000000000058E +:10F710000000000F000000050000000F000013882B +:10F7200000001388000007D00000138800003E800E +:10F73000000000020000000C02040B0C121618243A +:10F740003048606C00000000000000000000000075 +:10F7500000000000000000000D0102030405060780 +:10F7600008090A0B0C0D000000000011FF0000004A +:10F770000000000000000000000000000000000089 +:10F780000000000000000000000000000000FFFF7B +:10F79000FFFFFFFF00000001000000030000000168 +:10F7A0000000000100000000000000010000000156 +:10F7B0000000000100000001000000000000000146 +:10F7C0000000000A00000005000000000000000525 +:10F7D00000000000FFFFFFFF00000001000000002C +:10F7E00000000002FF000000000000000000000018 +:10F7F0000000000000000000000000000000000009 +:10F80000000000000000FFFFFFFFFFFF00000001FD +:10F810000000000300000000000007D000000064AA +:10F8200003010100060200000000000C82848B8CA2 +:10F83000129618243048606C0000000000000000A0 +:10F8400000000000000000000000000100000001B6 +:10F85000000000010014000000000014000007D0A8 +:10F860000000000000000001000000000000000691 +:10F8700000000001FFFFFFFF0A00000064756D6DCE +:10F88000795F7373696400000000000000000000ED +:10F890000000000000000000000000000000000068 +:10F8A000303030313032303330343035303630373C +:10F8B0003038303930613062306330643065306602 +:10F8C0003130313131323133313431353136313714 +:10F8D00031383139316131623163316431653166DA +:10F8E00000000000000000028003D670000000004D +:10F8F000800255EC80025614800256588002569CB5 +:10F90000800256AA800255F4800256B6800256D074 +:10F910008002614C8003EAFD0000003F000000010E +:10F920008003EF2C8003EF4C8003EF6C000000009D +:10F9300000000000000000000000000000000000C7 +:10F940008003ECA4000000000000000000000000A4 +:10F9500000000000000000000000000000000000A7 +:10F960000000000000000000000000000000000097 +:10F970000000000000000000000000000000000087 +:10F980000000000000000000000000000000000077 +:10F990000000000000000000000000000000000067 +:10F9A0000000000000000000000000000000000057 +:10F9B0000000000000000000000000000000000047 +:10F9C0000000000000000000000000000000000037 +:10F9D0000000000000000000000000000000000027 +:10F9E0000000000000000000000000000000000017 +:10F9F0000000000000000000000000000000000007 +:10FA000000000000000000000000000000000000F6 +:10FA1000000004A800000000000000000000059C99 +:10FA20000000059C000005A4000005A4000005AC32 +:10FA3000000005AC000005B4000005B4000005BCE2 +:10FA4000000005BC000005C4000005C4000005CC92 +:10FA5000000005CC000005D4000005D4000005DC42 +:10FA6000000005DC000005E4000005E4000005ECF2 +:10FA7000000005EC000005F4000005F4000005FCA2 +:10FA8000000005FC00000604000006040000060C4F +:10FA90000000060C00000614000006140000061CFE +:10FAA0000000061C00000624000006240000062CAE +:10FAB0000000062C00000634000006340000063C5E +:10FAC0000000063C00000644000006440000064C0E +:10FAD0000000064C00000654000006540000065CBE +:10FAE0000000065C00000664000006640000066C6E +:10FAF0000000066C00000674000006740000067C1E +:10FB00000000067C00000684000006840000068CCD +:10FB10000000068C00000694000006940000069C7D +:10FB20000000069C000006A4000006A4000006AC2D +:10FB3000000006AC000006B4000006B4000006BCDD +:10FB4000000006BC000006C4000006C4000006CC8D +:10FB5000000006CC000006D4000006D4000006DC3D +:10FB6000000006DC000006E4000006E4000006ECED +:10FB7000000006EC000006F4000006F4000006FC9D +:10FB8000000006FC00000704000007040000070C4A +:10FB90000000070C00000714000007140000071CF9 +:10FBA0000000071C00000724000007240000072CA9 +:10FBB0000000072C00000734000007340000073C59 +:10FBC0000000073C00000744000007440000074C09 +:10FBD0000000074C00000754000007540000075CB9 +:10FBE0000000075C00000764000007640000076C69 +:10FBF0000000076C00000774000007740000077C19 +:10FC00000000077C00000784000007840000078CC8 +:10FC10000000078C00000794000007940000079C78 +:10FC20000000079C000007A4000007A4000007AC28 +:10FC3000000007AC000007B4000007B4000007BCD8 +:10FC4000000007BC000007C4000007C4000007CC88 +:10FC5000000007CC000007D4000007D4000007DC38 +:10FC6000000007DC000007E4000007E4000007ECE8 +:10FC7000000007EC000007F4000007F4000007FC98 +:10FC8000000007FC00000804000008040000080C45 +:10FC90000000080C00000814000008140000081CF4 +:10FCA0000000081C00000824000008240000082CA4 +:10FCB0000000082C00000834000008340000083C54 +:10FCC0000000083C00000844000008440000084C04 +:10FCD0000000084C00000854000008540000085CB4 +:10FCE0000000085C00000864000008640000086C64 +:10FCF0000000086C00000874000008740000087C14 +:10FD00000000087C00000884000008840000088CC3 +:10FD10000000088C00000894000008940000089C73 +:10FD20000000089C000008A4000008A4000008AC23 +:10FD3000000008AC000008B4000008B4000008BCD3 +:10FD4000000008BC000008C4000008C4000008CC83 +:10FD5000000008CC000008D4000008D4000008DC33 +:10FD6000000008DC000008E4000008E4000008ECE3 +:10FD7000000008EC000008F4000008F4000008FC93 +:10FD8000000008FC00000904000009040000090C40 +:10FD90000000090C00000914000009140000091CEF +:10FDA0000000091C00000924000009240000092C9F +:10FDB0000000092C00000934000009340000093C4F +:10FDC0000000093C00000944000009440000094CFF +:10FDD0000000094C00000954000009540000095CAF +:10FDE0000000095C00000964000009640000096C5F +:10FDF0000000096C00000974000009740000097C0F +:10FE00000000097C00000984000009840000098CBE +:10FE10000000098C00000994000009940002000011 +:0CFE2000FFFFFFFF0000000100007AFC63 +:040000058000000077 +:00000001FF diff --git a/libraries/WiFi/extras/wifiHD/src/CONFIG/conf_access.h b/libraries/WiFi/extras/wifiHD/src/CONFIG/conf_access.h new file mode 100644 index 000000000..2d38d5069 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/CONFIG/conf_access.h @@ -0,0 +1,170 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Memory access control configuration file. + * + * This file contains the possible external configuration of the memory access + * control. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _CONF_ACCESS_H_ +#define _CONF_ACCESS_H_ + +#include "compiler.h" +#include "board.h" + + +/*! \name Activation of Logical Unit Numbers + */ +//! @{ +#define LUN_0 DISABLE //!< On-Chip Virtual Memory. +#define LUN_1 ENABLE //!< AT45DBX Data Flash. +#define LUN_2 DISABLE //!< SD/MMC Card over SPI. +#define LUN_3 DISABLE +#define LUN_4 DISABLE +#define LUN_5 DISABLE +#define LUN_6 DISABLE +#define LUN_7 DISABLE +#define LUN_USB DISABLE //!< Host Mass-Storage Memory. +//! @} + +/*! \name LUN 0 Definitions + */ +//! @{ +#define VIRTUAL_MEM LUN_0 +#define LUN_ID_VIRTUAL_MEM LUN_ID_0 +#define LUN_0_INCLUDE "virtual_mem.h" +#define Lun_0_test_unit_ready virtual_test_unit_ready +#define Lun_0_read_capacity virtual_read_capacity +#define Lun_0_wr_protect virtual_wr_protect +#define Lun_0_removal virtual_removal +#define Lun_0_usb_read_10 virtual_usb_read_10 +#define Lun_0_usb_write_10 virtual_usb_write_10 +#define Lun_0_mem_2_ram virtual_mem_2_ram +#define Lun_0_ram_2_mem virtual_ram_2_mem +#define LUN_0_NAME "\"On-Chip Virtual Memory\"" +//! @} + +/*! \name LUN 1 Definitions + */ +//! @{ +#define AT45DBX_MEM LUN_1 +#define LUN_ID_AT45DBX_MEM LUN_ID_1 +#define LUN_1_INCLUDE "at45dbx_mem.h" +#define Lun_1_test_unit_ready at45dbx_test_unit_ready +#define Lun_1_read_capacity at45dbx_read_capacity +#define Lun_1_wr_protect at45dbx_wr_protect +#define Lun_1_removal at45dbx_removal +#define Lun_1_usb_read_10 at45dbx_usb_read_10 +#define Lun_1_usb_write_10 at45dbx_usb_write_10 +#define Lun_1_mem_2_ram at45dbx_df_2_ram +#define Lun_1_ram_2_mem at45dbx_ram_2_df +#define LUN_1_NAME "\"AT45DBX Data Flash\"" +//! @} + +/*! \name LUN 2 Definitions + */ +//! @{ +#define SD_MMC_SPI_MEM LUN_2 +#define LUN_ID_SD_MMC_SPI_MEM LUN_ID_2 +#define LUN_2_INCLUDE "sd_mmc_spi_mem.h" +#define Lun_2_test_unit_ready sd_mmc_spi_test_unit_ready +#define Lun_2_read_capacity sd_mmc_spi_read_capacity +#define Lun_2_wr_protect sd_mmc_spi_wr_protect +#define Lun_2_removal sd_mmc_spi_removal +#define Lun_2_usb_read_10 sd_mmc_spi_usb_read_10 +#define Lun_2_usb_write_10 sd_mmc_spi_usb_write_10 +#define Lun_2_mem_2_ram sd_mmc_spi_mem_2_ram +#define Lun_2_ram_2_mem sd_mmc_spi_ram_2_mem +#define LUN_2_NAME "\"SD/MMC Card over SPI\"" +//! @} + +/*! \name USB LUNs Definitions + */ +//! @{ +#define MEM_USB LUN_USB +#define LUN_ID_MEM_USB LUN_ID_USB +#define LUN_USB_INCLUDE "host_mem.h" +#define Lun_usb_test_unit_ready(lun) host_test_unit_ready(lun) +#define Lun_usb_read_capacity(lun, nb_sect) host_read_capacity(lun, nb_sect) +#define Lun_usb_read_sector_size(lun) host_read_sector_size(lun) +#define Lun_usb_wr_protect(lun) host_wr_protect(lun) +#define Lun_usb_removal() host_removal() +#define Lun_usb_mem_2_ram(addr, ram) host_read_10_ram(addr, ram) +#define Lun_usb_ram_2_mem(addr, ram) host_write_10_ram(addr, ram) +#define LUN_USB_NAME "\"Host Mass-Storage Memory\"" +//! @} + +/*! \name Actions Associated with Memory Accesses + * + * Write here the action to associate with each memory access. + * + * \warning Be careful not to waste time in order not to disturb the functions. + */ +//! @{ +#define memory_start_read_action(nb_sectors) +#define memory_stop_read_action() +#define memory_start_write_action(nb_sectors) +#define memory_stop_write_action() +//! @} + +/*! \name Activation of Interface Features + */ +//! @{ +#define ACCESS_USB DISABLED //!< MEM <-> USB interface. +#define ACCESS_MEM_TO_RAM ENABLED //!< MEM <-> RAM interface. +#define ACCESS_STREAM ENABLED //!< Streaming MEM <-> MEM interface. //mlf +#define ACCESS_STREAM_RECORD DISABLED //!< Streaming MEM <-> MEM interface in record mode. +#define ACCESS_MEM_TO_MEM DISABLED //!< MEM <-> MEM interface. +#define ACCESS_CODEC DISABLED //!< Codec interface. +//! @} + +/*! \name Specific Options for Access Control + */ +//! @{ +#define GLOBAL_WR_PROTECT DISABLED //!< Management of a global write protection. +//! @} + + +#endif // _CONF_ACCESS_H_ diff --git a/libraries/WiFi/extras/wifiHD/src/CONFIG/conf_at45dbx.h b/libraries/WiFi/extras/wifiHD/src/CONFIG/conf_at45dbx.h new file mode 100644 index 000000000..3280e4fc1 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/CONFIG/conf_at45dbx.h @@ -0,0 +1,83 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief AT45DBX configuration file. + * + * This file contains the possible external configuration of the AT45DBX. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with an SPI module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _CONF_AT45DBX_H_ +#define _CONF_AT45DBX_H_ + + +#include "conf_access.h" + +#if AT45DBX_MEM == DISABLE + #error conf_at45dbx.h is #included although AT45DBX_MEM is disabled +#endif + + +#include "at45dbx.h" + + +//_____ D E F I N I T I O N S ______________________________________________ + +//! Size of AT45DBX data flash memories to manage. +#define AT45DBX_MEM_SIZE AT45DBX_1MB + +//! Number of AT45DBX components to manage. +#define AT45DBX_MEM_CNT 1 + +//! First chip select used by AT45DBX components on the SPI module instance. +//! AT45DBX_SPI_NPCS0_PIN always corresponds to this first NPCS, whatever it is. +#define AT45DBX_SPI_FIRST_NPCS AT45DBX_SPI_NPCS + +//! SPI master speed in Hz. +#define AT45DBX_SPI_MASTER_SPEED 12000000 + +//! Number of bits in each SPI transfer. +#define AT45DBX_SPI_BITS 8 + + +#endif // _CONF_AT45DBX_H_ diff --git a/libraries/WiFi/extras/wifiHD/src/CONFIG/conf_ebi.h b/libraries/WiFi/extras/wifiHD/src/CONFIG/conf_ebi.h new file mode 100644 index 000000000..aacdb1314 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/CONFIG/conf_ebi.h @@ -0,0 +1,108 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief CONF_EBI EBI/SMC driver for AVR32 UC3. + * + * \note The values defined in this file are device-specific. See the device + * datasheet for further information. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with an SMC module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _CONF_EBI_H_ +#define _CONF_EBI_H_ + +#include "compiler.h" +#include "board.h" + +#if (ET024006DHU_SMC_USE_NCS == 0) +#define SMC_USE_NCS0 +#define SMC_COMPONENT_CS0 ET024006DHU_SMC_COMPONENT_CS +#else + +#if (ET024006DHU_SMC_USE_NCS == 2) +#define SMC_USE_NCS2 +#define SMC_COMPONENT_CS2 ET024006DHU_SMC_COMPONENT_CS + +#else +#error This board is not supported +#endif +#endif + +#define EBI_DATA_0 ET024006DHU_EBI_DATA_0 +#define EBI_DATA_1 ET024006DHU_EBI_DATA_1 +#define EBI_DATA_2 ET024006DHU_EBI_DATA_2 +#define EBI_DATA_3 ET024006DHU_EBI_DATA_3 +#define EBI_DATA_4 ET024006DHU_EBI_DATA_4 +#define EBI_DATA_5 ET024006DHU_EBI_DATA_5 +#define EBI_DATA_6 ET024006DHU_EBI_DATA_6 +#define EBI_DATA_7 ET024006DHU_EBI_DATA_7 +#define EBI_DATA_8 ET024006DHU_EBI_DATA_8 +#define EBI_DATA_9 ET024006DHU_EBI_DATA_9 +#define EBI_DATA_10 ET024006DHU_EBI_DATA_10 +#define EBI_DATA_11 ET024006DHU_EBI_DATA_11 +#define EBI_DATA_12 ET024006DHU_EBI_DATA_12 +#define EBI_DATA_13 ET024006DHU_EBI_DATA_13 +#define EBI_DATA_14 ET024006DHU_EBI_DATA_14 +#define EBI_DATA_15 ET024006DHU_EBI_DATA_15 + +#if BOARD==EVK1105 +#ifdef EVK1105_REV3 +#define EBI_ADDR_19 AVR32_EBI_ADDR_19 +#define EBI_NCS_2 ET024006DHU_EBI_NCS +#else +#define EBI_ADDR_21 ET024006DHU_EBI_ADDR_21 +#define EBI_NCS_0 ET024006DHU_EBI_NCS +#endif +#elif BOARD == UC3C_EK +#define EBI_ADDR_22 AVR32_EBI_ADDR_22 +#define EBI_NCS_0 ET024006DHU_EBI_NCS +#elif BOARD == EVK1104 +#define EBI_ADDR_21 ET024006DHU_EBI_ADDR_21 +#define EBI_NCS_0 ET024006DHU_EBI_NCS +#endif + + +#define EBI_NWE0 ET024006DHU_EBI_NWE +#define EBI_NRD ET024006DHU_EBI_NRD + +#endif // _CONF_EBI_H_ diff --git a/libraries/WiFi/extras/wifiHD/src/CONFIG/conf_sd_mmc_spi.h b/libraries/WiFi/extras/wifiHD/src/CONFIG/conf_sd_mmc_spi.h new file mode 100644 index 000000000..94b55e10c --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/CONFIG/conf_sd_mmc_spi.h @@ -0,0 +1,73 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief SD/MMC configuration file. + * + * This file contains the possible external configuration of the SD/MMC. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with an SPI module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _CONF_SD_MMC_SPI_H_ +#define _CONF_SD_MMC_SPI_H_ + + +#include "conf_access.h" + +#if SD_MMC_SPI_MEM == DISABLE + #error conf_sd_mmc_spi.h is #included although SD_MMC_SPI_MEM is disabled +#endif + + +#include "sd_mmc_spi.h" + + +//_____ D E F I N I T I O N S ______________________________________________ + +//! SPI master speed in Hz. +#define SD_MMC_SPI_MASTER_SPEED 12000000 + +//! Number of bits in each SPI transfer. +#define SD_MMC_SPI_BITS 8 + + +#endif // _CONF_SD_MMC_SPI_H_ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/ASM/trampoline.x b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/ASM/trampoline.x new file mode 100644 index 000000000..c12712150 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/ASM/trampoline.x @@ -0,0 +1,74 @@ +/* This file is part of the ATMEL AVR32-SoftwareFramework-AT32UC3A-1.4.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief AVR32 UC3 ISP trampoline. + * + * In order to be able to program a project with both BatchISP and JTAGICE mkII + * without having to take the general-purpose fuses into consideration, add this + * file to the project and change the program entry point to _trampoline. + * + * The pre-programmed ISP will be erased if JTAGICE mkII is used. + * + * - Compiler: GNU GCC for AVR32 + * - Supported devices: All AVR32UC devices can be used. + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (C) 2006-2008, Atmel Corporation All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of ATMEL may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + +#include "conf_isp.h" + + +//! @{ +//! \verbatim + + + // This must be linked @ 0x80000000 if it is to be run upon reset. + .section .reset, "ax", @progbits + + + .global _trampoline + .type _trampoline, @function +_trampoline: + // Jump to program start. + rjmp program_start + + .org PROGRAM_START_OFFSET +program_start: + // Jump to the C runtime startup routine. + lda.w pc, _stext + + +//! \endverbatim +//! @} diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/ARDUINO/arduino.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/ARDUINO/arduino.h new file mode 100644 index 000000000..e687723c3 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/ARDUINO/arduino.h @@ -0,0 +1,237 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief AT32UC3A EVK1100 board header file. + * + * This file contains definitions and services related to the features of the + * EVK1100 board rev. B and C. + * + * To use this board, define BOARD=EVK1100. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 AT32UC3A devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _ARDUINO_H_ +#define _ARDUINO_H_ + +#include "compiler.h" + +#ifdef __AVR32_ABI_COMPILER__ // Automatically defined when compiling for AVR32, not when assembling. +# include "led.h" +#endif // __AVR32_ABI_COMPILER__ + + +/*! \name Oscillator Definitions + */ +//! @{ + +// RCOsc has no custom calibration by default. Set the following definition to +// the appropriate value if a custom RCOsc calibration has been applied to your +// part. +//#define FRCOSC AVR32_PM_RCOSC_FREQUENCY //!< RCOsc frequency: Hz. + +#define FOSC32 32768 //!< Osc32 frequency: Hz. +#define OSC32_STARTUP AVR32_PM_OSCCTRL32_STARTUP_8192_RCOSC //!< Osc32 startup time: RCOsc periods. + +#define FOSC0 12000000 //!< Osc0 frequency: Hz. +#define OSC0_STARTUP AVR32_PM_OSCCTRL0_STARTUP_2048_RCOSC //!< Osc0 startup time: RCOsc periods. + +// Osc1 crystal is not mounted by default. Set the following definitions to the +// appropriate values if a custom Osc1 crystal is mounted on your board. +//#define FOSC1 12000000 //!< Osc1 frequency: Hz. +//#define OSC1_STARTUP AVR32_PM_OSCCTRL1_STARTUP_2048_RCOSC //!< Osc1 startup time: RCOsc periods. + +//! @} + + +//! Number of LEDs. +#define LED_COUNT 0 + +/*! \name GPIO Connections of LEDs + */ +//! @{ +#define LED0_GPIO AVR32_PIN_PB19 +#define LED1_GPIO AVR32_PIN_PB20 +#define LED2_GPIO AVR32_PIN_PB21 +#define DEB_PIN_GPIO AVR32_PIN_PA20 +#define DEB2_PIN_GPIO AVR32_PIN_PB00 +//! @} + +/*! \name PWM Channels of LEDs + */ +//! @{ +#define LED0_PWM 0 +#define LED1_PWM 1 +#define LED2_PWM 2 +//! @} + +/*! \name PWM Functions of LEDs + */ +//! @{ +#define LED0_PWM_FUNCTION AVR32_PWM_0_FUNCTION +#define LED1_PWM_FUNCTION AVR32_PWM_1_FUNCTION +#define LED2_PWM_FUNCTION AVR32_PWM_2_FUNCTION +//! @} + +/*! \name Color Identifiers of LEDs to Use with LED Functions + */ +//! @{ +#define LED_MONO0_GREEN LED0 +#define LED_MONO1_RED LED1 +#define LED_MONO2_BLU LED2 +//! @} + +#if 0 +/*! \name SPI Connections of the DIP204 LCD + */ +//! @{ +#define DIP204_SPI (&AVR32_SPI1) +#define DIP204_SPI_NPCS 2 +#define DIP204_SPI_SCK_PIN AVR32_SPI1_SCK_0_0_PIN +#define DIP204_SPI_SCK_FUNCTION AVR32_SPI1_SCK_0_0_FUNCTION +#define DIP204_SPI_MISO_PIN AVR32_SPI1_MISO_0_0_PIN +#define DIP204_SPI_MISO_FUNCTION AVR32_SPI1_MISO_0_0_FUNCTION +#define DIP204_SPI_MOSI_PIN AVR32_SPI1_MOSI_0_0_PIN +#define DIP204_SPI_MOSI_FUNCTION AVR32_SPI1_MOSI_0_0_FUNCTION +#define DIP204_SPI_NPCS_PIN AVR32_SPI1_NPCS_2_0_PIN +#define DIP204_SPI_NPCS_FUNCTION AVR32_SPI1_NPCS_2_0_FUNCTION +//! @} + +/*! \name GPIO and PWM Connections of the DIP204 LCD Backlight + */ +//! @{ +#define DIP204_BACKLIGHT_PIN AVR32_PIN_PB18 +#define DIP204_PWM_CHANNEL 6 +#define DIP204_PWM_PIN AVR32_PWM_6_PIN +#define DIP204_PWM_FUNCTION AVR32_PWM_6_FUNCTION +//! @} +#endif + +/*! \name SPI Connections of the AT45DBX Data Flash Memory + */ +//! @{ +#define AT45DBX_SPI (&AVR32_SPI1) +#define AT45DBX_SPI_NPCS 2 +#define AT45DBX_SPI_SCK_PIN AVR32_SPI1_SCK_0_0_PIN +#define AT45DBX_SPI_SCK_FUNCTION AVR32_SPI1_SCK_0_0_FUNCTION +#define AT45DBX_SPI_MISO_PIN AVR32_SPI1_MISO_0_0_PIN +#define AT45DBX_SPI_MISO_FUNCTION AVR32_SPI1_MISO_0_0_FUNCTION +#define AT45DBX_SPI_MOSI_PIN AVR32_SPI1_MOSI_0_0_PIN +#define AT45DBX_SPI_MOSI_FUNCTION AVR32_SPI1_MOSI_0_0_FUNCTION +#define AT45DBX_SPI_NPCS2_PIN AVR32_SPI1_NPCS_2_0_PIN +#define AT45DBX_SPI_NPCS2_FUNCTION AVR32_SPI1_NPCS_2_0_FUNCTION +#define AT45DBX_CHIP_RESET AVR32_PIN_PA02 +//! @} + + +/*! \name GPIO and SPI Connections of the SD/MMC Connector + */ +//! @{ +//#define SD_MMC_CARD_DETECT_PIN AVR32_PIN_PA02 +//#define SD_MMC_WRITE_PROTECT_PIN AVR32_PIN_PA07 +#define SD_MMC_SPI (&AVR32_SPI1) +#define SD_MMC_SPI_NPCS 1 +#define SD_MMC_SPI_SCK_PIN AVR32_SPI1_SCK_0_0_PIN +#define SD_MMC_SPI_SCK_FUNCTION AVR32_SPI1_SCK_0_0_FUNCTION +#define SD_MMC_SPI_MISO_PIN AVR32_SPI1_MISO_0_0_PIN +#define SD_MMC_SPI_MISO_FUNCTION AVR32_SPI1_MISO_0_0_FUNCTION +#define SD_MMC_SPI_MOSI_PIN AVR32_SPI1_MOSI_0_0_PIN +#define SD_MMC_SPI_MOSI_FUNCTION AVR32_SPI1_MOSI_0_0_FUNCTION +#define SD_MMC_SPI_NPCS_PIN AVR32_SPI1_NPCS_1_0_PIN +#define SD_MMC_SPI_NPCS_FUNCTION AVR32_SPI1_NPCS_1_0_FUNCTION +//! @} + +/* Timer Counter to generate clock for WiFi chip*/ +# define WIFI_TC (&AVR32_TC) +# define WIFI_TC_CHANNEL_ID 0 +# define WIFI_TC_CHANNEL_PIN AVR32_TC_A0_0_0_PIN +# define WIFI_TC_CHANNEL_FUNCTION AVR32_TC_A0_0_0_FUNCTION +// Note that TC_A0_0_0 pin is pin 6 (PB23) on AT32UC3A1512 QFP100. + +/* Pin related to WiFi chip communication */ +#ifndef USE_POLL + #define USE_POLL +#endif + #define SPI_CS 0 + #define AVR32_SPI AVR32_SPI1 + #define GPIO_IRQ_PIN AVR32_PIN_PA03 + #define GPIO_IRQ AVR32_GPIO_IRQ_7 + #define GPIO_W_RESET_PIN AVR32_PIN_PA07 + #define GPIO_W_SHUTDOWN_PIN AVR32_PIN_PA09 + +/* Pin related to shield communication */ + #define ARDUINO_HANDSHAKE_PIN AVR32_PIN_PA25 + #define ARDUINO_EXTINT_PIN AVR32_PIN_PA04 //not used + + #define AVR32_PDCA_PID_TX AVR32_PDCA_PID_SPI1_TX + #define AVR32_PDCA_PID_RX AVR32_PDCA_PID_SPI1_RX + + +#if 0 +/*! \name TWI Connections of the Spare TWI Connector + */ +//! @{ +#define SPARE_TWI (&AVR32_TWI) +#define SPARE_TWI_SCL_PIN AVR32_TWI_SCL_0_0_PIN +#define SPARE_TWI_SCL_FUNCTION AVR32_TWI_SCL_0_0_FUNCTION +#define SPARE_TWI_SDA_PIN AVR32_TWI_SDA_0_0_PIN +#define SPARE_TWI_SDA_FUNCTION AVR32_TWI_SDA_0_0_FUNCTION +//! @} + + +/*! \name SPI Connections of the Spare SPI Connector + */ +//! @{ +#define SPARE_SPI (&AVR32_SPI0) +#define SPARE_SPI_NPCS 0 +#define SPARE_SPI_SCK_PIN AVR32_SPI0_SCK_0_0_PIN +#define SPARE_SPI_SCK_FUNCTION AVR32_SPI0_SCK_0_0_FUNCTION +#define SPARE_SPI_MISO_PIN AVR32_SPI0_MISO_0_0_PIN +#define SPARE_SPI_MISO_FUNCTION AVR32_SPI0_MISO_0_0_FUNCTION +#define SPARE_SPI_MOSI_PIN AVR32_SPI0_MOSI_0_0_PIN +#define SPARE_SPI_MOSI_FUNCTION AVR32_SPI0_MOSI_0_0_FUNCTION +#define SPARE_SPI_NPCS_PIN AVR32_SPI0_NPCS_0_0_PIN +#define SPARE_SPI_NPCS_FUNCTION AVR32_SPI0_NPCS_0_0_FUNCTION +//! @} +#endif + +#endif // _ARDUINO_H_ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/ARDUINO/led.c b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/ARDUINO/led.c new file mode 100644 index 000000000..d7cd439db --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/ARDUINO/led.c @@ -0,0 +1,346 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief AT32UC3A EVK1100 board LEDs support package. + * + * This file contains definitions and services related to the LED features of + * the EVK1100 board. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 AT32UC3A devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#include +#include "preprocessor.h" +#include "compiler.h" +#include "arduino.h" +#include "led.h" + + +//! Structure describing LED hardware connections. +typedef const struct +{ + struct + { + U32 PORT; //!< LED GPIO port. + U32 PIN_MASK; //!< Bit-mask of LED pin in GPIO port. + } GPIO; //!< LED GPIO descriptor. + struct + { + S32 CHANNEL; //!< LED PWM channel (< 0 if N/A). + S32 FUNCTION; //!< LED pin PWM function (< 0 if N/A). + } PWM; //!< LED PWM descriptor. +} tLED_DESCRIPTOR; + + +//! Hardware descriptors of all LEDs. +static tLED_DESCRIPTOR LED_DESCRIPTOR[LED_COUNT] = +{ +#define INSERT_LED_DESCRIPTOR(LED_NO, unused) \ + { \ + {LED##LED_NO##_GPIO / 32, 1 << (LED##LED_NO##_GPIO % 32)},\ + {LED##LED_NO##_PWM, LED##LED_NO##_PWM_FUNCTION } \ + }, + MREPEAT(LED_COUNT, INSERT_LED_DESCRIPTOR, ~) +#undef INSERT_LED_DESCRIPTOR +}; + + +//! Saved state of all LEDs. +static volatile U32 LED_State = (1 << LED_COUNT) - 1; + + +U32 LED_Read_Display(void) +{ + return LED_State; +} + + +void LED_Display(U32 leds) +{ + // Use the LED descriptors to get the connections of a given LED to the MCU. + tLED_DESCRIPTOR *led_descriptor; + volatile avr32_gpio_port_t *led_gpio_port; + + // Make sure only existing LEDs are specified. + leds &= (1 << LED_COUNT) - 1; + + // Update the saved state of all LEDs with the requested changes. + LED_State = leds; + + // For all LEDs... + for (led_descriptor = &LED_DESCRIPTOR[0]; + led_descriptor < LED_DESCRIPTOR + LED_COUNT; + led_descriptor++) + { + // Set the LED to the requested state. + led_gpio_port = &AVR32_GPIO.port[led_descriptor->GPIO.PORT]; + if (leds & 1) + { + led_gpio_port->ovrc = led_descriptor->GPIO.PIN_MASK; + } + else + { + led_gpio_port->ovrs = led_descriptor->GPIO.PIN_MASK; + } + led_gpio_port->oders = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->gpers = led_descriptor->GPIO.PIN_MASK; + leds >>= 1; + } +} + + +U32 LED_Read_Display_Mask(U32 mask) +{ + return Rd_bits(LED_State, mask); +} + + +void LED_Display_Mask(U32 mask, U32 leds) +{ + // Use the LED descriptors to get the connections of a given LED to the MCU. + tLED_DESCRIPTOR *led_descriptor = &LED_DESCRIPTOR[0] - 1; + volatile avr32_gpio_port_t *led_gpio_port; + U8 led_shift; + + // Make sure only existing LEDs are specified. + mask &= (1 << LED_COUNT) - 1; + + // Update the saved state of all LEDs with the requested changes. + Wr_bits(LED_State, mask, leds); + + // While there are specified LEDs left to manage... + while (mask) + { + // Select the next specified LED and set it to the requested state. + led_shift = 1 + ctz(mask); + led_descriptor += led_shift; + led_gpio_port = &AVR32_GPIO.port[led_descriptor->GPIO.PORT]; + leds >>= led_shift - 1; + if (leds & 1) + { + led_gpio_port->ovrc = led_descriptor->GPIO.PIN_MASK; + } + else + { + led_gpio_port->ovrs = led_descriptor->GPIO.PIN_MASK; + } + led_gpio_port->oders = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->gpers = led_descriptor->GPIO.PIN_MASK; + leds >>= 1; + mask >>= led_shift; + } +} + + +Bool LED_Test(U32 leds) +{ + return Tst_bits(LED_State, leds); +} + + +void LED_Off(U32 leds) +{ + // Use the LED descriptors to get the connections of a given LED to the MCU. + tLED_DESCRIPTOR *led_descriptor = &LED_DESCRIPTOR[0] - 1; + volatile avr32_gpio_port_t *led_gpio_port; + U8 led_shift; + + // Make sure only existing LEDs are specified. + leds &= (1 << LED_COUNT) - 1; + + // Update the saved state of all LEDs with the requested changes. + Clr_bits(LED_State, leds); + + // While there are specified LEDs left to manage... + while (leds) + { + // Select the next specified LED and turn it off. + led_shift = 1 + ctz(leds); + led_descriptor += led_shift; + led_gpio_port = &AVR32_GPIO.port[led_descriptor->GPIO.PORT]; + led_gpio_port->ovrs = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->oders = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->gpers = led_descriptor->GPIO.PIN_MASK; + leds >>= led_shift; + } +} + + +void LED_On(U32 leds) +{ + // Use the LED descriptors to get the connections of a given LED to the MCU. + tLED_DESCRIPTOR *led_descriptor = &LED_DESCRIPTOR[0] - 1; + volatile avr32_gpio_port_t *led_gpio_port; + U8 led_shift; + + // Make sure only existing LEDs are specified. + leds &= (1 << LED_COUNT) - 1; + + // Update the saved state of all LEDs with the requested changes. + Set_bits(LED_State, leds); + + // While there are specified LEDs left to manage... + while (leds) + { + // Select the next specified LED and turn it on. + led_shift = 1 + ctz(leds); + led_descriptor += led_shift; + led_gpio_port = &AVR32_GPIO.port[led_descriptor->GPIO.PORT]; + led_gpio_port->ovrc = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->oders = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->gpers = led_descriptor->GPIO.PIN_MASK; + leds >>= led_shift; + } +} + + +void LED_Toggle(U32 leds) +{ + // Use the LED descriptors to get the connections of a given LED to the MCU. + tLED_DESCRIPTOR *led_descriptor = &LED_DESCRIPTOR[0] - 1; + volatile avr32_gpio_port_t *led_gpio_port; + U8 led_shift; + + // Make sure only existing LEDs are specified. + leds &= (1 << LED_COUNT) - 1; + + // Update the saved state of all LEDs with the requested changes. + Tgl_bits(LED_State, leds); + + // While there are specified LEDs left to manage... + while (leds) + { + // Select the next specified LED and toggle it. + led_shift = 1 + ctz(leds); + led_descriptor += led_shift; + led_gpio_port = &AVR32_GPIO.port[led_descriptor->GPIO.PORT]; + led_gpio_port->ovrt = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->oders = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->gpers = led_descriptor->GPIO.PIN_MASK; + leds >>= led_shift; + } +} + + +U32 LED_Read_Display_Field(U32 field) +{ + return Rd_bitfield(LED_State, field); +} + + +void LED_Display_Field(U32 field, U32 leds) +{ + // Move the bit-field to the appropriate position for the bit-mask. + LED_Display_Mask(field, leds << ctz(field)); +} + + +U8 LED_Get_Intensity(U32 led) +{ + tLED_DESCRIPTOR *led_descriptor; + + // Check that the argument value is valid. + led = ctz(led); + led_descriptor = &LED_DESCRIPTOR[led]; + if (led >= LED_COUNT || led_descriptor->PWM.CHANNEL < 0) return 0; + + // Return the duty cycle value if the LED PWM channel is enabled, else 0. + return (AVR32_PWM.sr & (1 << led_descriptor->PWM.CHANNEL)) ? + AVR32_PWM.channel[led_descriptor->PWM.CHANNEL].cdty : 0; +} + + +void LED_Set_Intensity(U32 leds, U8 intensity) +{ + tLED_DESCRIPTOR *led_descriptor = &LED_DESCRIPTOR[0] - 1; + volatile avr32_pwm_channel_t *led_pwm_channel; + volatile avr32_gpio_port_t *led_gpio_port; + U8 led_shift; + + // For each specified LED... + for (leds &= (1 << LED_COUNT) - 1; leds; leds >>= led_shift) + { + // Select the next specified LED and check that it has a PWM channel. + led_shift = 1 + ctz(leds); + led_descriptor += led_shift; + if (led_descriptor->PWM.CHANNEL < 0) continue; + + // Initialize or update the LED PWM channel. + led_pwm_channel = &AVR32_PWM.channel[led_descriptor->PWM.CHANNEL]; + if (!(AVR32_PWM.sr & (1 << led_descriptor->PWM.CHANNEL))) + { + led_pwm_channel->cmr = (AVR32_PWM_CPRE_MCK << AVR32_PWM_CPRE_OFFSET) & + ~(AVR32_PWM_CALG_MASK | + AVR32_PWM_CPOL_MASK | + AVR32_PWM_CPD_MASK); + led_pwm_channel->cprd = 0x000000FF; + led_pwm_channel->cdty = intensity; + AVR32_PWM.ena = 1 << led_descriptor->PWM.CHANNEL; + } + else + { + AVR32_PWM.isr; + while (!(AVR32_PWM.isr & (1 << led_descriptor->PWM.CHANNEL))); + led_pwm_channel->cupd = intensity; + } + + // Switch the LED pin to its PWM function. + led_gpio_port = &AVR32_GPIO.port[led_descriptor->GPIO.PORT]; + if (led_descriptor->PWM.FUNCTION & 0x1) + { + led_gpio_port->pmr0s = led_descriptor->GPIO.PIN_MASK; + } + else + { + led_gpio_port->pmr0c = led_descriptor->GPIO.PIN_MASK; + } + if (led_descriptor->PWM.FUNCTION & 0x2) + { + led_gpio_port->pmr1s = led_descriptor->GPIO.PIN_MASK; + } + else + { + led_gpio_port->pmr1c = led_descriptor->GPIO.PIN_MASK; + } + led_gpio_port->gperc = led_descriptor->GPIO.PIN_MASK; + } +} diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/ARDUINO/led.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/ARDUINO/led.h new file mode 100644 index 000000000..a577124ff --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/ARDUINO/led.h @@ -0,0 +1,191 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief AT32UC3A EVK1100 board LEDs support package. + * + * This file contains definitions and services related to the LED features of + * the EVK1100 board. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 AT32UC3A devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _LED_H_ +#define _LED_H_ + +#include "compiler.h" + + +/*! \name Identifiers of LEDs to Use with LED Functions + */ +//! @{ +#define LED0 0x01 +#define LED1 0x02 +#define LED2 0x04 +#define LED3 0x08 +#define LED4 0x10 +#define LED5 0x20 +#define LED6 0x40 +#define LED7 0x80 +//! @} + + +/*! \brief Gets the last state of all LEDs set through the LED API. + * + * \return State of all LEDs (1 bit per LED). + * + * \note The GPIO pin configuration of all LEDs is left unchanged. + */ +extern U32 LED_Read_Display(void); + +/*! \brief Sets the state of all LEDs. + * + * \param leds New state of all LEDs (1 bit per LED). + * + * \note The pins of all LEDs are set to GPIO output mode. + */ +extern void LED_Display(U32 leds); + +/*! \brief Gets the last state of the specified LEDs set through the LED API. + * + * \param mask LEDs of which to get the state (1 bit per LED). + * + * \return State of the specified LEDs (1 bit per LED). + * + * \note The GPIO pin configuration of all LEDs is left unchanged. + */ +extern U32 LED_Read_Display_Mask(U32 mask); + +/*! \brief Sets the state of the specified LEDs. + * + * \param mask LEDs of which to set the state (1 bit per LED). + * + * \param leds New state of the specified LEDs (1 bit per LED). + * + * \note The pins of the specified LEDs are set to GPIO output mode. + */ +extern void LED_Display_Mask(U32 mask, U32 leds); + +/*! \brief Tests the last state of the specified LEDs set through the LED API. + * + * \param leds LEDs of which to test the state (1 bit per LED). + * + * \return \c TRUE if at least one of the specified LEDs has a state on, else + * \c FALSE. + * + * \note The GPIO pin configuration of all LEDs is left unchanged. + */ +extern Bool LED_Test(U32 leds); + +/*! \brief Turns off the specified LEDs. + * + * \param leds LEDs to turn off (1 bit per LED). + * + * \note The pins of the specified LEDs are set to GPIO output mode. + */ +extern void LED_Off(U32 leds); + +/*! \brief Turns on the specified LEDs. + * + * \param leds LEDs to turn on (1 bit per LED). + * + * \note The pins of the specified LEDs are set to GPIO output mode. + */ +extern void LED_On(U32 leds); + +/*! \brief Toggles the specified LEDs. + * + * \param leds LEDs to toggle (1 bit per LED). + * + * \note The pins of the specified LEDs are set to GPIO output mode. + */ +extern void LED_Toggle(U32 leds); + +/*! \brief Gets as a bit-field the last state of the specified LEDs set through + * the LED API. + * + * \param field LEDs of which to get the state (1 bit per LED). + * + * \return State of the specified LEDs (1 bit per LED, beginning with the first + * specified LED). + * + * \note The GPIO pin configuration of all LEDs is left unchanged. + */ +extern U32 LED_Read_Display_Field(U32 field); + +/*! \brief Sets as a bit-field the state of the specified LEDs. + * + * \param field LEDs of which to set the state (1 bit per LED). + * \param leds New state of the specified LEDs (1 bit per LED, beginning with + * the first specified LED). + * + * \note The pins of the specified LEDs are set to GPIO output mode. + */ +extern void LED_Display_Field(U32 field, U32 leds); + +/*! \brief Gets the intensity of the specified LED. + * + * \param led LED of which to get the intensity (1 bit per LED; only the least + * significant set bit is used). + * + * \return Intensity of the specified LED (0x00 to 0xFF). + * + * \warning The PWM channel of the specified LED is supposed to be used only by + * this module. + * + * \note The GPIO pin configuration of all LEDs is left unchanged. + */ +extern U8 LED_Get_Intensity(U32 led); + +/*! \brief Sets the intensity of the specified LEDs. + * + * \param leds LEDs of which to set the intensity (1 bit per LED). + * \param intensity New intensity of the specified LEDs (0x00 to 0xFF). + * + * \warning The PWM channels of the specified LEDs are supposed to be used only + * by this module. + * + * \note The pins of the specified LEDs are set to PWM output mode. + */ +extern void LED_Set_Intensity(U32 leds, U8 intensity); + + +#endif // _LED_H_ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/EVK1105/evk1105.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/EVK1105/evk1105.h new file mode 100644 index 000000000..edda44cb3 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/EVK1105/evk1105.h @@ -0,0 +1,433 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief AT32UC3A EVK1105 board header file. + * + * This file contains definitions and services related to the features of the + * EVK1105 board rev. B. + * + * To use this board, define BOARD=EVK1105. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 AT32UC3A devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _EVK1105_H_ +#define _EVK1105_H_ + +#ifdef EVK1105_REV3 +# include "evk1105_rev3.h" +#else + +#include "compiler.h" + +#ifdef __AVR32_ABI_COMPILER__ // Automatically defined when compiling for AVR32, not when assembling. +# include "led.h" +#endif // __AVR32_ABI_COMPILER__ + + +/*! \name Oscillator Definitions + */ +//! @{ + +// RCOsc has no custom calibration by default. Set the following definition to +// the appropriate value if a custom RCOsc calibration has been applied to your +// part. +//#define FRCOSC AVR32_PM_RCOSC_FREQUENCY //!< RCOsc frequency: Hz. + +#define FOSC32 32768 //!< Osc32 frequency: Hz. +#define OSC32_STARTUP AVR32_PM_OSCCTRL32_STARTUP_8192_RCOSC //!< Osc32 startup time: RCOsc periods. + +#define FOSC0 12000000 //!< Osc0 frequency: Hz. +#define OSC0_STARTUP AVR32_PM_OSCCTRL0_STARTUP_2048_RCOSC //!< Osc0 startup time: RCOsc periods. + +#define FOSC1 11289600 //!< Osc1 frequency: Hz +#define OSC1_STARTUP AVR32_PM_OSCCTRL1_STARTUP_2048_RCOSC //!< Osc1 startup time: RCOsc periods. + + +//! @} + + +/*! \name SDRAM Definitions + */ +//! @{ + +//! Part header file of used SDRAM(s). +#define SDRAM_PART_HDR "MT48LC16M16A2TG7E/mt48lc16m16a2tg7e.h" + +//! Data bus width to use the SDRAM(s) with (16 or 32 bits; always 16 bits on +//! UC3). +#define SDRAM_DBW 16 +//! @} + + +/*! \name USB Definitions + */ +//! @{ +//! Multiplexed pin used for USB_ID: AVR32_USBB_USB_ID_x_x. +//! To be selected according to the AVR32_USBB_USB_ID_x_x_PIN and +//! AVR32_USBB_USB_ID_x_x_FUNCTION definitions from . +#define AVR32_USBB_USB_ID_0_2_PIN 21 +#define AVR32_USBB_USB_ID_0_2_FUNCTION 2 +#define USB_ID AVR32_USBB_USB_ID_0_2 + +//! Multiplexed pin used for USB_VBOF: AVR32_USBB_USB_VBOF_x_x. +//! To be selected according to the AVR32_USBB_USB_VBOF_x_x_PIN and +//! AVR32_USBB_USB_VBOF_x_x_FUNCTION definitions from . +# define USB_VBOF AVR32_USBB_USB_VBOF_0_1 + + +//! Active level of the USB_VBOF output pin. +# define USB_VBOF_ACTIVE_LEVEL LOW + +//! USB overcurrent detection pin. +# define USB_OVERCURRENT_DETECT_PIN AVR32_PIN_PX15 + +//! @} + + +//! GPIO connection of the MAC PHY PWR_DOWN/INT signal. +# define MACB_INTERRUPT_PIN AVR32_PIN_PA26 + + + +//! Number of LEDs. +#define LED_COUNT 4 + +/*! \name GPIO Connections of LEDs + */ +//! @{ +# define LED0_GPIO AVR32_PIN_PB27 +# define LED1_GPIO AVR32_PIN_PB28 +# define LED2_GPIO AVR32_PIN_PA05 +# define LED3_GPIO AVR32_PIN_PA06 +//! @} + +/*! \name Color Identifiers of LEDs to Use with LED Functions + */ +//! @{ +#define LED_MONO0_GREEN LED0 +#define LED_MONO1_GREEN LED1 +#define LED_MONO2_GREEN LED2 +#define LED_MONO3_GREEN LED3 +//! @} + +/*! \name PWM Channels of LEDs + */ +//! @{ +#define LED0_PWM 4 +#define LED1_PWM 5 +#define LED2_PWM (-1) +#define LED3_PWM (-1) +//! @} + +/*! \name PWM Functions of LEDs + */ +//! @{ +/* TODO: Implement PWM functionality */ +#define LED0_PWM_FUNCTION (-1)//AVR32_PWM_0_FUNCTION +#define LED1_PWM_FUNCTION (-1)//AVR32_PWM_1_FUNCTION +#define LED2_PWM_FUNCTION (-1) +#define LED3_PWM_FUNCTION (-1) +//! @} + +//! External interrupt connection of touch sensor. +#define QT1081_EIC_EXTINT_PIN AVR32_EIC_EXTINT_1_PIN +#define QT1081_EIC_EXTINT_FUNCTION AVR32_EIC_EXTINT_1_FUNCTION +#define QT1081_EIC_EXTINT_IRQ AVR32_EIC_IRQ_1 +#define QT1081_EIC_EXTINT_INT AVR32_EIC_INT1 +/*! \name Touch sensor low power mode select + */ +#define QT1081_LP_MODE AVR32_PIN_PB29 + +/*! \name GPIO Connections of touch buttons + */ +//! @{ +#define QT1081_TOUCH_SENSOR_0 AVR32_PIN_PB22 +#define QT1081_TOUCH_SENSOR_0_PRESSED 1 +#define QT1081_TOUCH_SENSOR_1 AVR32_PIN_PB23 +#define QT1081_TOUCH_SENSOR_1_PRESSED 1 +#define QT1081_TOUCH_SENSOR_2 AVR32_PIN_PB24 +#define QT1081_TOUCH_SENSOR_2_PRESSED 1 +#define QT1081_TOUCH_SENSOR_3 AVR32_PIN_PB25 +#define QT1081_TOUCH_SENSOR_3_PRESSED 1 +#define QT1081_TOUCH_SENSOR_4 AVR32_PIN_PB26 +#define QT1081_TOUCH_SENSOR_4_PRESSED 1 + +#define QT1081_TOUCH_SENSOR_ENTER QT1081_TOUCH_SENSOR_4 +#define QT1081_TOUCH_SENSOR_ENTER_PRESSED QT1081_TOUCH_SENSOR_4_PRESSED +#define QT1081_TOUCH_SENSOR_LEFT QT1081_TOUCH_SENSOR_3 +#define QT1081_TOUCH_SENSOR_LEFT_PRESSED QT1081_TOUCH_SENSOR_3_PRESSED +#define QT1081_TOUCH_SENSOR_RIGHT QT1081_TOUCH_SENSOR_2 +#define QT1081_TOUCH_SENSOR_RIGHT_PRESSED QT1081_TOUCH_SENSOR_2_PRESSED +#define QT1081_TOUCH_SENSOR_UP QT1081_TOUCH_SENSOR_0 +#define QT1081_TOUCH_SENSOR_UP_PRESSED QT1081_TOUCH_SENSOR_0_PRESSED +#define QT1081_TOUCH_SENSOR_DOWN QT1081_TOUCH_SENSOR_1 +#define QT1081_TOUCH_SENSOR_DOWN_PRESSED QT1081_TOUCH_SENSOR_1_PRESSED +//! @} + +/*! \name SPI Connections of the AT45DBX Data Flash Memory + */ +//! @{ +#define AT45DBX_SPI (&AVR32_SPI0) +#define AT45DBX_SPI_NPCS 0 +#define AT45DBX_SPI_SCK_PIN AVR32_SPI0_SCK_0_0_PIN +#define AT45DBX_SPI_SCK_FUNCTION AVR32_SPI0_SCK_0_0_FUNCTION +#define AT45DBX_SPI_MISO_PIN AVR32_SPI0_MISO_0_0_PIN +#define AT45DBX_SPI_MISO_FUNCTION AVR32_SPI0_MISO_0_0_FUNCTION +#define AT45DBX_SPI_MOSI_PIN AVR32_SPI0_MOSI_0_0_PIN +#define AT45DBX_SPI_MOSI_FUNCTION AVR32_SPI0_MOSI_0_0_FUNCTION +#define AT45DBX_SPI_NPCS0_PIN AVR32_SPI0_NPCS_0_0_PIN +#define AT45DBX_SPI_NPCS0_FUNCTION AVR32_SPI0_NPCS_0_0_FUNCTION +//! @} + +/*! \name GPIO and SPI Connections of the SD/MMC Connector + */ +//! @{ +#define SD_MMC_CARD_DETECT_PIN AVR32_PIN_PA02 +#define SD_MMC_WRITE_PROTECT_PIN AVR32_PIN_PA18 +#define SD_MMC_SPI (&AVR32_SPI0) +#define SD_MMC_SPI_NPCS 1 +#define SD_MMC_SPI_SCK_PIN AVR32_SPI0_SCK_0_0_PIN +#define SD_MMC_SPI_SCK_FUNCTION AVR32_SPI0_SCK_0_0_FUNCTION +#define SD_MMC_SPI_MISO_PIN AVR32_SPI0_MISO_0_0_PIN +#define SD_MMC_SPI_MISO_FUNCTION AVR32_SPI0_MISO_0_0_FUNCTION +#define SD_MMC_SPI_MOSI_PIN AVR32_SPI0_MOSI_0_0_PIN +#define SD_MMC_SPI_MOSI_FUNCTION AVR32_SPI0_MOSI_0_0_FUNCTION +#define SD_MMC_SPI_NPCS_PIN AVR32_SPI0_NPCS_1_0_PIN +#define SD_MMC_SPI_NPCS_FUNCTION AVR32_SPI0_NPCS_1_0_FUNCTION +//! @} + + +/*! \name TWI expansion + */ +//! @{ +#define EXPANSION_TWI (&AVR32_TWI) +#define EXPANSION_RESET AVR32_PIN_PX16 +#define EXPANSION_TWI_SCL_PIN AVR32_TWI_SCL_0_0_PIN +#define EXPANSION_TWI_SCL_FUNCTION AVR32_TWI_SCL_0_0_FUNCTION +#define EXPANSION_TWI_SDA_PIN AVR32_TWI_SDA_0_0_PIN +#define EXPANSION_TWI_SDA_FUNCTION AVR32_TWI_SDA_0_0_FUNCTION +//! @} + +/*! \name Wireless expansion + */ + +#define WEXPANSION_EXTINT_PIN AVR32_EIC_EXTINT_8_PIN +#define WEXPANSION_EXTINT_FUNCTION AVR32_EIC_EXTINT_8_FUNCTION +#define WEXPANSION_GPIO1 AVR32_PIN_PB30 +#define WEXPANSION_GPIO2 AVR32_PIN_PB31 + +#define WEXPANSION_SPI (&AVR32_SPI0) +#define WEXPANSION_SPI_NPCS 2 +#define WEXPANSION_SPI_SCK_PIN AVR32_SPI0_SCK_0_0_PIN +#define WEXPANSION_SPI_SCK_FUNCTION AVR32_SPI0_SCK_0_0_FUNCTION +#define WEXPANSION_SPI_MISO_PIN AVR32_SPI0_MISO_0_0_PIN +#define WEXPANSION_SPI_MISO_FUNCTION AVR32_SPI0_MISO_0_0_FUNCTION +#define WEXPANSION_SPI_MOSI_PIN AVR32_SPI0_MOSI_0_0_PIN +#define WEXPANSION_SPI_MOSI_FUNCTION AVR32_SPI0_MOSI_0_0_FUNCTION +#define WEXPANSION_SPI_NPCS_PIN AVR32_SPI0_NPCS_2_0_PIN +#define WEXPANSION_SPI_NPCS_FUNCTION AVR32_SPI0_NPCS_2_0_FUNCTION + +//! @} + +/*! \name ET024006DHU TFT display + */ +//! @{ + +#define ET024006DHU_TE_PIN AVR32_PIN_PX19 +#define ET024006DHU_RESET_PIN AVR32_PIN_PX22 +#define ET024006DHU_BL_PIN AVR32_PWM_6_PIN +#define ET024006DHU_BL_FUNCTION AVR32_PWM_6_FUNCTION +#define ET024006DHU_DNC_PIN AVR32_EBI_ADDR_21_1_PIN +#define ET024006DHU_DNC_FUNCTION AVR32_EBI_ADDR_21_1_FUNCTION +#define ET024006DHU_EBI_NCS_PIN AVR32_EBI_NCS_0_1_PIN +#define ET024006DHU_EBI_NCS_FUNCTION AVR32_EBI_NCS_0_1_FUNCTION + +//! @} +/*! \name Optional SPI connection to the TFT + */ +//! @{ + +#define ET024006DHU_SPI (&AVR32_SPI0) +#define ET024006DHU_SPI_NPCS 3 +#define ET024006DHU_SPI_SCK_PIN AVR32_SPI0_SCK_0_0_PIN +#define ET024006DHU_SPI_SCK_FUNCTION AVR32_SPI0_SCK_0_0_FUNCTION +#define ET024006DHU_SPI_MISO_PIN AVR32_SPI0_MISO_0_0_PIN +#define ET024006DHU_SPI_MISO_FUNCTION AVR32_SPI0_MISO_0_0_FUNCTION +#define ET024006DHU_SPI_MOSI_PIN AVR32_SPI0_MOSI_0_0_PIN +#define ET024006DHU_SPI_MOSI_FUNCTION AVR32_SPI0_MOSI_0_0_FUNCTION +#define ET024006DHU_SPI_NPCS_PIN AVR32_SPI1_NPCS_3_0_PIN +#define ET024006DHU_SPI_NPCS_FUNCTION AVR32_SPI1_NPCS_3_0_FUNCTION + +//! @} + + +/*! \name Audio amplifier connection to the DAC + */ +//! @{ + +#define TPA6130_ABDAC (&AVR32_ABDAC) + +#define TPA6130_DATA0_PIN AVR32_ABDAC_DATA_0_1_PIN +#define TPA6130_DATA0_FUNCTION AVR32_ABDAC_DATA_0_1_FUNCTION +#define TPA6130_DATAN0_PIN AVR32_ABDAC_DATAN_0_1_PIN +#define TPA6130_DATAN0_FUNCTION AVR32_ABDAC_DATAN_0_1_FUNCTION +#define TPA6130_DATA1_PIN AVR32_ABDAC_DATA_1_1_PIN +#define TPA6130_DATA1_FUNCTION AVR32_ABDAC_DATA_1_1_FUNCTION +#define TPA6130_DATAN1_PIN AVR32_ABDAC_DATAN_1_1_PIN +#define TPA6130_DATAN1_FUNCTION AVR32_ABDAC_DATAN_1_1_FUNCTION + +#define TPA6130_ABDAC_PDCA_PID AVR32_PDCA_PID_ABDAC_TX +#define TPA6130_ABDAC_PDCA_CHANNEL 0 +#define TPA6130_ABDAC_PDCA_IRQ AVR32_PDCA_IRQ_0 +#define TPA6130_ABDAC_PDCA_INT_LEVEL AVR32_INTC_INT3 + +#define TPA6130_TWI (&AVR32_TWI) +#define TPA6130_TWI_SCL_PIN AVR32_TWI_SCL_0_0_PIN +#define TPA6130_TWI_SCL_FUNCTION AVR32_TWI_SCL_0_0_FUNCTION +#define TPA6130_TWI_SDA_PIN AVR32_TWI_SDA_0_0_PIN +#define TPA6130_TWI_SDA_FUNCTION AVR32_TWI_SDA_0_0_FUNCTION + +//! }@ +/*! \name TI TLV320AIC23B sound chip + */ +//! @{ +#define TLV320_SSC (&AVR32_SSC) +#define TLV320_SSC_TX_CLOCK_PIN AVR32_SSC_TX_CLOCK_0_PIN +#define TLV320_SSC_TX_CLOCK_FUNCTION AVR32_SSC_TX_CLOCK_0_FUNCTION +#define TLV320_SSC_TX_DATA_PIN AVR32_SSC_TX_DATA_0_PIN +#define TLV320_SSC_TX_DATA_FUNCTION AVR32_SSC_TX_DATA_0_FUNCTION +#define TLV320_SSC_TX_FRAME_SYNC_PIN AVR32_SSC_TX_FRAME_SYNC_0_PIN +#define TLV320_SSC_TX_FRAME_SYNC_FUNCTION AVR32_SSC_TX_FRAME_SYNC_0_FUNCTION + +#define TLV320_TWI (&AVR32_TWI) +#define TLV320_TWI_SCL_PIN AVR32_TWI_SCL_0_0_PIN +#define TLV320_TWI_SCL_FUNCTION AVR32_TWI_SCL_0_0_FUNCTION +#define TLV320_TWI_SDA_PIN AVR32_TWI_SDA_0_0_PIN +#define TLV320_TWI_SDA_FUNCTION AVR32_TWI_SDA_0_0_FUNCTION + +#define TLV320_PM_GCLK_PIN AVR32_PM_GCLK_0_0_PIN +#define TLV320_PM_GCLK_FUNCTION AVR32_PM_GCLK_0_0_FUNCTION +//! @} + +////! \name SPI: Apple Authentication Chip Hardware Connections +////! @{ +#define IPOD_AUTH_CHIP_SPI (&AVR32_SPI0) +#define IPOD_AUTH_CHIP_SPI_IRQ AVR32_SPI0_IRQ +#define IPOD_AUTH_CHIP_SPI_NPCS 2 +#define IPOD_AUTH_CHIP_SPI_SCK_PIN AVR32_SPI0_SCK_0_0_PIN +#define IPOD_AUTH_CHIP_SPI_SCK_FUNCTION AVR32_SPI0_SCK_0_0_FUNCTION +#define IPOD_AUTH_CHIP_SPI_MISO_PIN AVR32_SPI0_MISO_0_0_PIN +#define IPOD_AUTH_CHIP_SPI_MISO_FUNCTION AVR32_SPI0_MISO_0_0_FUNCTION +#define IPOD_AUTH_CHIP_SPI_MOSI_PIN AVR32_SPI0_MOSI_0_0_PIN +#define IPOD_AUTH_CHIP_SPI_MOSI_FUNCTION AVR32_SPI0_MOSI_0_0_FUNCTION +#define IPOD_AUTH_CHIP_SPI_NPCS_PIN AVR32_SPI0_NPCS_2_0_PIN +#define IPOD_AUTH_CHIP_SPI_NPCS_FUNCTION AVR32_SPI0_NPCS_2_0_FUNCTION +#define IPOD_AUTH_CHIP_SPI_N_RESET_PIN AVR32_PIN_PB30 +#define IPOD_AUTH_CHIP_SPI_CP_READY_PIN AVR32_PIN_PB31 +//! }@ + +/*! \name Connections of the iPOD Authentication Coprocessor + */ +//! @{ + +#define IPOD_AUTH_CHIP_TWI (&AVR32_TWI) +#define IPOD_AUTH_CHIP_TWI_SCL_PIN AVR32_TWI_SCL_0_0_PIN +#define IPOD_AUTH_CHIP_TWI_SCL_FUNCTION AVR32_TWI_SCL_0_0_FUNCTION +#define IPOD_AUTH_CHIP_TWI_SDA_PIN AVR32_TWI_SDA_0_0_PIN +#define IPOD_AUTH_CHIP_TWI_SDA_FUNCTION AVR32_TWI_SDA_0_0_FUNCTION +#define IPOD_AUTH_CHIP_TWI_N_RESET_PIN AVR32_PIN_PX16 + +//! @} + +/*! \name USART connection to the UC3B board controller + */ +//! @{ + +#define USART0_RXD_PIN AVR32_USART0_RXD_0_0_PIN +#define USART0_RXD_FUNCTION AVR32_USART0_RXD_0_0_FUNCTION +#define USART0_TXD_PIN AVR32_USART0_TXD_0_0_PIN +#define USART0_TXD_FUNCTION AVR32_USART0_TXD_0_0_FUNCTION +#define USART0_RTS_PIN AVR32_USART0_RTS_0_0_PIN +#define USART0_RTS_FUNCTION AVR32_USART0_RTS_0_0_FUNCTION +#define USART0_CTS_PIN AVR32_USART0_CTS_0_0_PIN +#define USART0_CTS_FUNCTION AVR32_USART0_CTS_0_0_FUNCTION + +//! @} + +#define ADC_VEXT_PIN AVR32_ADC_AD_7_PIN +#define ADC_VEXT_FUNCTION AVR32_ADC_AD_7_FUNCTION + +/*! \name LCD Connections of the ET024006DHU display + */ +//! @{ +#define ET024006DHU_SMC_USE_NCS 0 +#define ET024006DHU_SMC_COMPONENT_CS "smc_et024006dhu.h" + +#define ET024006DHU_EBI_DATA_0 AVR32_EBI_DATA_0 +#define ET024006DHU_EBI_DATA_1 AVR32_EBI_DATA_1 +#define ET024006DHU_EBI_DATA_2 AVR32_EBI_DATA_2 +#define ET024006DHU_EBI_DATA_3 AVR32_EBI_DATA_3 +#define ET024006DHU_EBI_DATA_4 AVR32_EBI_DATA_4 +#define ET024006DHU_EBI_DATA_5 AVR32_EBI_DATA_5 +#define ET024006DHU_EBI_DATA_6 AVR32_EBI_DATA_6 +#define ET024006DHU_EBI_DATA_7 AVR32_EBI_DATA_7 +#define ET024006DHU_EBI_DATA_8 AVR32_EBI_DATA_8 +#define ET024006DHU_EBI_DATA_9 AVR32_EBI_DATA_9 +#define ET024006DHU_EBI_DATA_10 AVR32_EBI_DATA_10 +#define ET024006DHU_EBI_DATA_11 AVR32_EBI_DATA_11 +#define ET024006DHU_EBI_DATA_12 AVR32_EBI_DATA_12 +#define ET024006DHU_EBI_DATA_13 AVR32_EBI_DATA_13 +#define ET024006DHU_EBI_DATA_14 AVR32_EBI_DATA_14 +#define ET024006DHU_EBI_DATA_15 AVR32_EBI_DATA_15 + +#define ET024006DHU_EBI_ADDR_21 AVR32_EBI_ADDR_21_1 + +#define ET024006DHU_EBI_NWE AVR32_EBI_NWE0_0 +#define ET024006DHU_EBI_NRD AVR32_EBI_NRD_0 +#define ET024006DHU_EBI_NCS AVR32_EBI_NCS_0_1 +//! @} + + +#endif // !EVK1105_REVA + +#endif // _EVK1105_H_ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/EVK1105/led.c b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/EVK1105/led.c new file mode 100644 index 000000000..561652aeb --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/EVK1105/led.c @@ -0,0 +1,346 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief AT32UC3A EVK1105 board LEDs support package. + * + * This file contains definitions and services related to the LED features of + * the EVK1105 board. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 AT32UC3A devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#include +#include "preprocessor.h" +#include "compiler.h" +#include "evk1105.h" +#include "led.h" + + +//! Structure describing LED hardware connections. +typedef const struct +{ + struct + { + U32 PORT; //!< LED GPIO port. + U32 PIN_MASK; //!< Bit-mask of LED pin in GPIO port. + } GPIO; //!< LED GPIO descriptor. + struct + { + S32 CHANNEL; //!< LED PWM channel (< 0 if N/A). + S32 FUNCTION; //!< LED pin PWM function (< 0 if N/A). + } PWM; //!< LED PWM descriptor. +} tLED_DESCRIPTOR; + + +//! Hardware descriptors of all LEDs. +static tLED_DESCRIPTOR LED_DESCRIPTOR[LED_COUNT] = +{ +#define INSERT_LED_DESCRIPTOR(LED_NO, unused) \ + { \ + {LED##LED_NO##_GPIO / 32, 1 << (LED##LED_NO##_GPIO % 32)},\ + {LED##LED_NO##_PWM, LED##LED_NO##_PWM_FUNCTION } \ + }, + MREPEAT(LED_COUNT, INSERT_LED_DESCRIPTOR, ~) +#undef INSERT_LED_DESCRIPTOR +}; + + +//! Saved state of all LEDs. +static volatile U32 LED_State = (1 << LED_COUNT) - 1; + + +U32 LED_Read_Display(void) +{ + return LED_State; +} + + +void LED_Display(U32 leds) +{ + // Use the LED descriptors to get the connections of a given LED to the MCU. + tLED_DESCRIPTOR *led_descriptor; + volatile avr32_gpio_port_t *led_gpio_port; + + // Make sure only existing LEDs are specified. + leds &= (1 << LED_COUNT) - 1; + + // Update the saved state of all LEDs with the requested changes. + LED_State = leds; + + // For all LEDs... + for (led_descriptor = &LED_DESCRIPTOR[0]; + led_descriptor < LED_DESCRIPTOR + LED_COUNT; + led_descriptor++) + { + // Set the LED to the requested state. + led_gpio_port = &AVR32_GPIO.port[led_descriptor->GPIO.PORT]; + if (leds & 1) + { + led_gpio_port->ovrc = led_descriptor->GPIO.PIN_MASK; + } + else + { + led_gpio_port->ovrs = led_descriptor->GPIO.PIN_MASK; + } + led_gpio_port->oders = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->gpers = led_descriptor->GPIO.PIN_MASK; + leds >>= 1; + } +} + + +U32 LED_Read_Display_Mask(U32 mask) +{ + return Rd_bits(LED_State, mask); +} + + +void LED_Display_Mask(U32 mask, U32 leds) +{ + // Use the LED descriptors to get the connections of a given LED to the MCU. + tLED_DESCRIPTOR *led_descriptor = &LED_DESCRIPTOR[0] - 1; + volatile avr32_gpio_port_t *led_gpio_port; + U8 led_shift; + + // Make sure only existing LEDs are specified. + mask &= (1 << LED_COUNT) - 1; + + // Update the saved state of all LEDs with the requested changes. + Wr_bits(LED_State, mask, leds); + + // While there are specified LEDs left to manage... + while (mask) + { + // Select the next specified LED and set it to the requested state. + led_shift = 1 + ctz(mask); + led_descriptor += led_shift; + led_gpio_port = &AVR32_GPIO.port[led_descriptor->GPIO.PORT]; + leds >>= led_shift - 1; + if (leds & 1) + { + led_gpio_port->ovrc = led_descriptor->GPIO.PIN_MASK; + } + else + { + led_gpio_port->ovrs = led_descriptor->GPIO.PIN_MASK; + } + led_gpio_port->oders = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->gpers = led_descriptor->GPIO.PIN_MASK; + leds >>= 1; + mask >>= led_shift; + } +} + + +Bool LED_Test(U32 leds) +{ + return Tst_bits(LED_State, leds); +} + + +void LED_Off(U32 leds) +{ + // Use the LED descriptors to get the connections of a given LED to the MCU. + tLED_DESCRIPTOR *led_descriptor = &LED_DESCRIPTOR[0] - 1; + volatile avr32_gpio_port_t *led_gpio_port; + U8 led_shift; + + // Make sure only existing LEDs are specified. + leds &= (1 << LED_COUNT) - 1; + + // Update the saved state of all LEDs with the requested changes. + Clr_bits(LED_State, leds); + + // While there are specified LEDs left to manage... + while (leds) + { + // Select the next specified LED and turn it off. + led_shift = 1 + ctz(leds); + led_descriptor += led_shift; + led_gpio_port = &AVR32_GPIO.port[led_descriptor->GPIO.PORT]; + led_gpio_port->ovrs = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->oders = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->gpers = led_descriptor->GPIO.PIN_MASK; + leds >>= led_shift; + } +} + + +void LED_On(U32 leds) +{ + // Use the LED descriptors to get the connections of a given LED to the MCU. + tLED_DESCRIPTOR *led_descriptor = &LED_DESCRIPTOR[0] - 1; + volatile avr32_gpio_port_t *led_gpio_port; + U8 led_shift; + + // Make sure only existing LEDs are specified. + leds &= (1 << LED_COUNT) - 1; + + // Update the saved state of all LEDs with the requested changes. + Set_bits(LED_State, leds); + + // While there are specified LEDs left to manage... + while (leds) + { + // Select the next specified LED and turn it on. + led_shift = 1 + ctz(leds); + led_descriptor += led_shift; + led_gpio_port = &AVR32_GPIO.port[led_descriptor->GPIO.PORT]; + led_gpio_port->ovrc = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->oders = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->gpers = led_descriptor->GPIO.PIN_MASK; + leds >>= led_shift; + } +} + + +void LED_Toggle(U32 leds) +{ + // Use the LED descriptors to get the connections of a given LED to the MCU. + tLED_DESCRIPTOR *led_descriptor = &LED_DESCRIPTOR[0] - 1; + volatile avr32_gpio_port_t *led_gpio_port; + U8 led_shift; + + // Make sure only existing LEDs are specified. + leds &= (1 << LED_COUNT) - 1; + + // Update the saved state of all LEDs with the requested changes. + Tgl_bits(LED_State, leds); + + // While there are specified LEDs left to manage... + while (leds) + { + // Select the next specified LED and toggle it. + led_shift = 1 + ctz(leds); + led_descriptor += led_shift; + led_gpio_port = &AVR32_GPIO.port[led_descriptor->GPIO.PORT]; + led_gpio_port->ovrt = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->oders = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->gpers = led_descriptor->GPIO.PIN_MASK; + leds >>= led_shift; + } +} + + +U32 LED_Read_Display_Field(U32 field) +{ + return Rd_bitfield(LED_State, field); +} + + +void LED_Display_Field(U32 field, U32 leds) +{ + // Move the bit-field to the appropriate position for the bit-mask. + LED_Display_Mask(field, leds << ctz(field)); +} + + +U8 LED_Get_Intensity(U32 led) +{ + tLED_DESCRIPTOR *led_descriptor; + + // Check that the argument value is valid. + led = ctz(led); + led_descriptor = &LED_DESCRIPTOR[led]; + if (led >= LED_COUNT || led_descriptor->PWM.CHANNEL < 0) return 0; + + // Return the duty cycle value if the LED PWM channel is enabled, else 0. + return (AVR32_PWM.sr & (1 << led_descriptor->PWM.CHANNEL)) ? + AVR32_PWM.channel[led_descriptor->PWM.CHANNEL].cdty : 0; +} + + +void LED_Set_Intensity(U32 leds, U8 intensity) +{ + tLED_DESCRIPTOR *led_descriptor = &LED_DESCRIPTOR[0] - 1; + volatile avr32_pwm_channel_t *led_pwm_channel; + volatile avr32_gpio_port_t *led_gpio_port; + U8 led_shift; + + // For each specified LED... + for (leds &= (1 << LED_COUNT) - 1; leds; leds >>= led_shift) + { + // Select the next specified LED and check that it has a PWM channel. + led_shift = 1 + ctz(leds); + led_descriptor += led_shift; + if (led_descriptor->PWM.CHANNEL < 0) continue; + + // Initialize or update the LED PWM channel. + led_pwm_channel = &AVR32_PWM.channel[led_descriptor->PWM.CHANNEL]; + if (!(AVR32_PWM.sr & (1 << led_descriptor->PWM.CHANNEL))) + { + led_pwm_channel->cmr = (AVR32_PWM_CPRE_MCK << AVR32_PWM_CPRE_OFFSET) & + ~(AVR32_PWM_CALG_MASK | + AVR32_PWM_CPOL_MASK | + AVR32_PWM_CPD_MASK); + led_pwm_channel->cprd = 0x000000FF; + led_pwm_channel->cdty = intensity; + AVR32_PWM.ena = 1 << led_descriptor->PWM.CHANNEL; + } + else + { + AVR32_PWM.isr; + while (!(AVR32_PWM.isr & (1 << led_descriptor->PWM.CHANNEL))); + led_pwm_channel->cupd = intensity; + } + + // Switch the LED pin to its PWM function. + led_gpio_port = &AVR32_GPIO.port[led_descriptor->GPIO.PORT]; + if (led_descriptor->PWM.FUNCTION & 0x1) + { + led_gpio_port->pmr0s = led_descriptor->GPIO.PIN_MASK; + } + else + { + led_gpio_port->pmr0c = led_descriptor->GPIO.PIN_MASK; + } + if (led_descriptor->PWM.FUNCTION & 0x2) + { + led_gpio_port->pmr1s = led_descriptor->GPIO.PIN_MASK; + } + else + { + led_gpio_port->pmr1c = led_descriptor->GPIO.PIN_MASK; + } + led_gpio_port->gperc = led_descriptor->GPIO.PIN_MASK; + } +} diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/EVK1105/led.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/EVK1105/led.h new file mode 100644 index 000000000..7766b6a76 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/EVK1105/led.h @@ -0,0 +1,187 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief AT32UC3A EVK1105 board LEDs support package. + * + * This file contains definitions and services related to the LED features of + * the EVK1105 board. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 AT32UC3A devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _LED_H_ +#define _LED_H_ + +#include "compiler.h" + + +/*! \name Identifiers of LEDs to Use with LED Functions + */ +//! @{ +#define LED0 0x01 +#define LED1 0x02 +#define LED2 0x04 +#define LED3 0x08 +//! @} + + +/*! \brief Gets the last state of all LEDs set through the LED API. + * + * \return State of all LEDs (1 bit per LED). + * + * \note The GPIO pin configuration of all LEDs is left unchanged. + */ +extern U32 LED_Read_Display(void); + +/*! \brief Sets the state of all LEDs. + * + * \param leds New state of all LEDs (1 bit per LED). + * + * \note The pins of all LEDs are set to GPIO output mode. + */ +extern void LED_Display(U32 leds); + +/*! \brief Gets the last state of the specified LEDs set through the LED API. + * + * \param mask LEDs of which to get the state (1 bit per LED). + * + * \return State of the specified LEDs (1 bit per LED). + * + * \note The GPIO pin configuration of all LEDs is left unchanged. + */ +extern U32 LED_Read_Display_Mask(U32 mask); + +/*! \brief Sets the state of the specified LEDs. + * + * \param mask LEDs of which to set the state (1 bit per LED). + * + * \param leds New state of the specified LEDs (1 bit per LED). + * + * \note The pins of the specified LEDs are set to GPIO output mode. + */ +extern void LED_Display_Mask(U32 mask, U32 leds); + +/*! \brief Tests the last state of the specified LEDs set through the LED API. + * + * \param leds LEDs of which to test the state (1 bit per LED). + * + * \return \c TRUE if at least one of the specified LEDs has a state on, else + * \c FALSE. + * + * \note The GPIO pin configuration of all LEDs is left unchanged. + */ +extern Bool LED_Test(U32 leds); + +/*! \brief Turns off the specified LEDs. + * + * \param leds LEDs to turn off (1 bit per LED). + * + * \note The pins of the specified LEDs are set to GPIO output mode. + */ +extern void LED_Off(U32 leds); + +/*! \brief Turns on the specified LEDs. + * + * \param leds LEDs to turn on (1 bit per LED). + * + * \note The pins of the specified LEDs are set to GPIO output mode. + */ +extern void LED_On(U32 leds); + +/*! \brief Toggles the specified LEDs. + * + * \param leds LEDs to toggle (1 bit per LED). + * + * \note The pins of the specified LEDs are set to GPIO output mode. + */ +extern void LED_Toggle(U32 leds); + +/*! \brief Gets as a bit-field the last state of the specified LEDs set through + * the LED API. + * + * \param field LEDs of which to get the state (1 bit per LED). + * + * \return State of the specified LEDs (1 bit per LED, beginning with the first + * specified LED). + * + * \note The GPIO pin configuration of all LEDs is left unchanged. + */ +extern U32 LED_Read_Display_Field(U32 field); + +/*! \brief Sets as a bit-field the state of the specified LEDs. + * + * \param field LEDs of which to set the state (1 bit per LED). + * \param leds New state of the specified LEDs (1 bit per LED, beginning with + * the first specified LED). + * + * \note The pins of the specified LEDs are set to GPIO output mode. + */ +extern void LED_Display_Field(U32 field, U32 leds); + +/*! \brief Gets the intensity of the specified LED. + * + * \param led LED of which to get the intensity (1 bit per LED; only the least + * significant set bit is used). + * + * \return Intensity of the specified LED (0x00 to 0xFF). + * + * \warning The PWM channel of the specified LED is supposed to be used only by + * this module. + * + * \note The GPIO pin configuration of all LEDs is left unchanged. + */ +extern U8 LED_Get_Intensity(U32 led); + +/*! \brief Sets the intensity of the specified LEDs. + * + * \param leds LEDs of which to set the intensity (1 bit per LED). + * \param intensity New intensity of the specified LEDs (0x00 to 0xFF). + * + * \warning The PWM channels of the specified LEDs are supposed to be used only + * by this module. + * + * \note The pins of the specified LEDs are set to PWM output mode. + */ +extern void LED_Set_Intensity(U32 leds, U8 intensity); + + +#endif // _LED_H_ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/board.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/board.h new file mode 100644 index 000000000..78ee91e75 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/board.h @@ -0,0 +1,120 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Standard board header file. + * + * This file includes the appropriate board header file according to the + * defined board. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _BOARD_H_ +#define _BOARD_H_ + +#include + +/*! \name Base Boards + */ +//! @{ +#define EVK1100 1 //!< AT32UC3A EVK1100 board. +#define EVK1101 2 //!< AT32UC3B EVK1101 board. +#define UC3C_EK 3 //!< AT32UC3C UC3C_EK board. +#define EVK1104 4 //!< AT32UC3A3 EVK1104 board. +#define EVK1105 5 //!< AT32UC3A EVK1105 board. +#define STK1000 6 //!< AT32AP7000 STK1000 board. +#define NGW100 7 //!< AT32AP7000 NGW100 board. +#define STK600_RCUC3L0 8 //!< STK600 RCUC3L0 board. +#define UC3L_EK 9 //!< AT32UC3L-EK board. +#define USER_BOARD 99 //!< User-reserved board (if any). +//! @} + +/*! \name Extension Boards + */ +//! @{ +#define EXT1102 1 //!< AT32UC3B EXT1102 board. +#define MC300 2 //!< AT32UC3 MC300 board. +#define USER_EXT_BOARD 99 //!< User-reserved extension board (if any). +//! @} + +#if BOARD == EVK1100 + #include "EVK1100/evk1100.h" +#elif BOARD == EVK1101 + #include "EVK1101/evk1101.h" +#elif BOARD == UC3C_EK + #include "UC3C_EK/uc3c_ek.h" +#elif BOARD == EVK1104 + #include "EVK1104/evk1104.h" +#elif BOARD == EVK1105 + #include "EVK1105/evk1105.h" +#elif BOARD == STK1000 + #include "STK1000/stk1000.h" +#elif BOARD == NGW100 + #include "NGW100/ngw100.h" +#elif BOARD == STK600_RCUC3L0 + #include "STK600/RCUC3L0/stk600_rcuc3l0.h" +#elif BOARD == UC3L_EK + #include "UC3L_EK/uc3l_ek.h" +#elif BOARD == ARDUINO + #include "ARDUINO/arduino.h" +#else + #error No known AVR32 board defined +#endif + +#if (defined EXT_BOARD) + #if EXT_BOARD == EXT1102 + #include "EXT1102/ext1102.h" + #elif EXT_BOARD == MC300 + #include "MC300/mc300.h" + #elif EXT_BOARD == USER_EXT_BOARD + // User-reserved area: #include the header file of your extension board here + // (if any). + #endif +#endif + + +#ifndef FRCOSC + #define FRCOSC AVR32_PM_RCOSC_FREQUENCY //!< Default RCOsc frequency. +#endif + + +#endif // _BOARD_H_ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/board.h.my b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/board.h.my new file mode 100644 index 000000000..78ee91e75 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/board.h.my @@ -0,0 +1,120 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Standard board header file. + * + * This file includes the appropriate board header file according to the + * defined board. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _BOARD_H_ +#define _BOARD_H_ + +#include + +/*! \name Base Boards + */ +//! @{ +#define EVK1100 1 //!< AT32UC3A EVK1100 board. +#define EVK1101 2 //!< AT32UC3B EVK1101 board. +#define UC3C_EK 3 //!< AT32UC3C UC3C_EK board. +#define EVK1104 4 //!< AT32UC3A3 EVK1104 board. +#define EVK1105 5 //!< AT32UC3A EVK1105 board. +#define STK1000 6 //!< AT32AP7000 STK1000 board. +#define NGW100 7 //!< AT32AP7000 NGW100 board. +#define STK600_RCUC3L0 8 //!< STK600 RCUC3L0 board. +#define UC3L_EK 9 //!< AT32UC3L-EK board. +#define USER_BOARD 99 //!< User-reserved board (if any). +//! @} + +/*! \name Extension Boards + */ +//! @{ +#define EXT1102 1 //!< AT32UC3B EXT1102 board. +#define MC300 2 //!< AT32UC3 MC300 board. +#define USER_EXT_BOARD 99 //!< User-reserved extension board (if any). +//! @} + +#if BOARD == EVK1100 + #include "EVK1100/evk1100.h" +#elif BOARD == EVK1101 + #include "EVK1101/evk1101.h" +#elif BOARD == UC3C_EK + #include "UC3C_EK/uc3c_ek.h" +#elif BOARD == EVK1104 + #include "EVK1104/evk1104.h" +#elif BOARD == EVK1105 + #include "EVK1105/evk1105.h" +#elif BOARD == STK1000 + #include "STK1000/stk1000.h" +#elif BOARD == NGW100 + #include "NGW100/ngw100.h" +#elif BOARD == STK600_RCUC3L0 + #include "STK600/RCUC3L0/stk600_rcuc3l0.h" +#elif BOARD == UC3L_EK + #include "UC3L_EK/uc3l_ek.h" +#elif BOARD == ARDUINO + #include "ARDUINO/arduino.h" +#else + #error No known AVR32 board defined +#endif + +#if (defined EXT_BOARD) + #if EXT_BOARD == EXT1102 + #include "EXT1102/ext1102.h" + #elif EXT_BOARD == MC300 + #include "MC300/mc300.h" + #elif EXT_BOARD == USER_EXT_BOARD + // User-reserved area: #include the header file of your extension board here + // (if any). + #endif +#endif + + +#ifndef FRCOSC + #define FRCOSC AVR32_PM_RCOSC_FREQUENCY //!< Default RCOsc frequency. +#endif + + +#endif // _BOARD_H_ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx.c b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx.c new file mode 100644 index 000000000..93d3dd96c --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx.c @@ -0,0 +1,653 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Management of the AT45DBX data flash controller through SPI. + * + * This file manages the accesses to the AT45DBX data flash components. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with an SPI module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +//_____ I N C L U D E S ___________________________________________________ + +#include "conf_access.h" + + +#if AT45DBX_MEM == ENABLE + +#include "compiler.h" +#include "board.h" +#include "gpio.h" +#include "spi.h" +#include "conf_at45dbx.h" +#include "at45dbx.h" + + +#if AT45DBX_MEM_CNT > 4 + #error AT45DBX_MEM_CNT must not exceed 4 +#endif + + +//_____ D E F I N I T I O N S ______________________________________________ + +/*! \name AT45DBX Group A Commands + */ +//! @{ +#define AT45DBX_CMDA_RD_PAGE 0xD2 //!< Main Memory Page Read (Serial/8-bit Mode). +#define AT45DBX_CMDA_RD_ARRAY_LEG 0xE8 //!< Continuous Array Read, Legacy Command (Serial/8-bit Mode). +#define AT45DBX_CMDA_RD_ARRAY_LF_SM 0x03 //!< Continuous Array Read, Low-Frequency Mode (Serial Mode). +#define AT45DBX_CMDA_RD_ARRAY_AF_SM 0x0B //!< Continuous Array Read, Any-Frequency Mode (Serial Mode). +#define AT45DBX_CMDA_RD_SECTOR_PROT_REG 0x32 //!< Read Sector Protection Register (Serial/8-bit Mode). +#define AT45DBX_CMDA_RD_SECTOR_LKDN_REG 0x35 //!< Read Sector Lockdown Register (Serial/8-bit Mode). +#define AT45DBX_CMDA_RD_SECURITY_REG 0x77 //!< Read Security Register (Serial/8-bit Mode). +//! @} + +/*! \name AT45DBX Group B Commands + */ +//! @{ +#define AT45DBX_CMDB_ER_PAGE 0x81 //!< Page Erase (Serial/8-bit Mode). +#define AT45DBX_CMDB_ER_BLOCK 0x50 //!< Block Erase (Serial/8-bit Mode). +#define AT45DBX_CMDB_ER_SECTOR 0x7C //!< Sector Erase (Serial/8-bit Mode). +#define AT45DBX_CMDB_ER_CHIP 0xC794809A //!< Chip Erase (Serial/8-bit Mode). +#define AT45DBX_CMDB_XFR_PAGE_TO_BUF1 0x53 //!< Main Memory Page to Buffer 1 Transfer (Serial/8-bit Mode). +#define AT45DBX_CMDB_XFR_PAGE_TO_BUF2 0x55 //!< Main Memory Page to Buffer 2 Transfer (Serial/8-bit Mode). +#define AT45DBX_CMDB_CMP_PAGE_TO_BUF1 0x60 //!< Main Memory Page to Buffer 1 Compare (Serial/8-bit Mode). +#define AT45DBX_CMDB_CMP_PAGE_TO_BUF2 0x61 //!< Main Memory Page to Buffer 2 Compare (Serial/8-bit Mode). +#define AT45DBX_CMDB_PR_BUF1_TO_PAGE_ER 0x83 //!< Buffer 1 to Main Memory Page Program with Built-in Erase (Serial/8-bit Mode). +#define AT45DBX_CMDB_PR_BUF2_TO_PAGE_ER 0x86 //!< Buffer 2 to Main Memory Page Program with Built-in Erase (Serial/8-bit Mode). +#define AT45DBX_CMDB_PR_BUF1_TO_PAGE 0x88 //!< Buffer 1 to Main Memory Page Program without Built-in Erase (Serial/8-bit Mode). +#define AT45DBX_CMDB_PR_BUF2_TO_PAGE 0x89 //!< Buffer 2 to Main Memory Page Program without Built-in Erase (Serial/8-bit Mode). +#define AT45DBX_CMDB_PR_PAGE_TH_BUF1 0x82 //!< Main Memory Page Program through Buffer 1 (Serial/8-bit Mode). +#define AT45DBX_CMDB_PR_PAGE_TH_BUF2 0x85 //!< Main Memory Page Program through Buffer 2 (Serial/8-bit Mode). +#define AT45DBX_CMDB_RWR_PAGE_TH_BUF1 0x58 //!< Auto Page Rewrite through Buffer 1 (Serial/8-bit Mode). +#define AT45DBX_CMDB_RWR_PAGE_TH_BUF2 0x59 //!< Auto Page Rewrite through Buffer 2 (Serial/8-bit Mode). +//! @} + +/*! \name AT45DBX Group C Commands + */ +//! @{ +#define AT45DBX_CMDC_RD_BUF1_LF_SM 0xD1 //!< Buffer 1 Read, Low-Frequency Mode (Serial Mode). +#define AT45DBX_CMDC_RD_BUF2_LF_SM 0xD3 //!< Buffer 2 Read, Low-Frequency Mode (Serial Mode). +#define AT45DBX_CMDC_RD_BUF1_AF_SM 0xD4 //!< Buffer 1 Read, Any-Frequency Mode (Serial Mode). +#define AT45DBX_CMDC_RD_BUF2_AF_SM 0xD6 //!< Buffer 2 Read, Any-Frequency Mode (Serial Mode). +#define AT45DBX_CMDC_RD_BUF1_AF_8M 0x54 //!< Buffer 1 Read, Any-Frequency Mode (8-bit Mode). +#define AT45DBX_CMDC_RD_BUF2_AF_8M 0x56 //!< Buffer 2 Read, Any-Frequency Mode (8-bit Mode). +#define AT45DBX_CMDC_WR_BUF1 0x84 //!< Buffer 1 Write (Serial/8-bit Mode). +#define AT45DBX_CMDC_WR_BUF2 0x87 //!< Buffer 2 Write (Serial/8-bit Mode). +#define AT45DBX_CMDC_RD_STATUS_REG 0xD7 //!< Status Register Read (Serial/8-bit Mode). +#define AT45DBX_CMDC_RD_MNFCT_DEV_ID_SM 0x9F //!< Manufacturer and Device ID Read (Serial Mode). +//! @} + +/*! \name AT45DBX Group D Commands + */ +//! @{ +#define AT45DBX_CMDD_EN_SECTOR_PROT 0x3D2A7FA9 //!< Enable Sector Protection (Serial/8-bit Mode). +#define AT45DBX_CMDD_DIS_SECTOR_PROT 0x3D2A7F9A //!< Disable Sector Protection (Serial/8-bit Mode). +#define AT45DBX_CMDD_ER_SECTOR_PROT_REG 0x3D2A7FCF //!< Erase Sector Protection Register (Serial/8-bit Mode). +#define AT45DBX_CMDD_PR_SECTOR_PROT_REG 0x3D2A7FFC //!< Program Sector Protection Register (Serial/8-bit Mode). +#define AT45DBX_CMDD_LKDN_SECTOR 0x3D2A7F30 //!< Sector Lockdown (Serial/8-bit Mode). +#define AT45DBX_CMDD_PR_SECURITY_REG 0x9B000000 //!< Program Security Register (Serial/8-bit Mode). +#define AT45DBX_CMDD_PR_CONF_REG 0x3D2A80A6 //!< Program Configuration Register (Serial/8-bit Mode). +#define AT45DBX_CMDD_DEEP_PWR_DN 0xB9 //!< Deep Power-down (Serial/8-bit Mode). +#define AT45DBX_CMDD_RSM_DEEP_PWR_DN 0xAB //!< Resume from Deep Power-down (Serial/8-bit Mode). +//! @} + + +/*! \name Bit-Masks and Values for the Status Register + */ +//! @{ +#define AT45DBX_MSK_BUSY 0x80 //!< Busy status bit-mask. +#define AT45DBX_BUSY 0x00 //!< Busy status value (0x00 when busy, 0x80 when ready). +#define AT45DBX_MSK_DENSITY 0x3C //!< Device density bit-mask. +//! @} +#if AT45DBX_MEM_SIZE == AT45DBX_1MB + +/*! \name AT45DB081 Memories + */ +//! @{ +#define AT45DBX_DENSITY 0x24 //!< Device density value. +#define AT45DBX_BYTE_ADDR_BITS 9 //!< Address bits for byte position within buffer. + +//! @} +#elif AT45DBX_MEM_SIZE == AT45DBX_2MB + +/*! \name AT45DB161 Memories + */ +//! @{ +#define AT45DBX_DENSITY 0x2C //!< Device density value. +#define AT45DBX_BYTE_ADDR_BITS 10 //!< Address bits for byte position within buffer. +//! @} + +#elif AT45DBX_MEM_SIZE == AT45DBX_4MB + +/*! \name AT45DB321 Memories + */ +//! @{ +#define AT45DBX_DENSITY 0x34 //!< Device density value. +#define AT45DBX_BYTE_ADDR_BITS 10 //!< Address bits for byte position within buffer. +//! @} + +#elif AT45DBX_MEM_SIZE == AT45DBX_8MB + +/*! \name AT45DB642 Memories + */ +//! @{ +#define AT45DBX_DENSITY 0x3C //!< Device density value. +#define AT45DBX_BYTE_ADDR_BITS 11 //!< Address bits for byte position within buffer. +//! @} + +#else + #error AT45DBX_MEM_SIZE is not defined to a supported value +#endif + +//! Address bits for page selection. +#define AT45DBX_PAGE_ADDR_BITS (AT45DBX_MEM_SIZE - AT45DBX_PAGE_BITS) + +//! Number of bits for addresses within pages. +#define AT45DBX_PAGE_BITS (AT45DBX_BYTE_ADDR_BITS - 1) + +//! Page size in bytes. +#define AT45DBX_PAGE_SIZE (1 << AT45DBX_PAGE_BITS) + +//! Bit-mask for byte position within buffer in \ref gl_ptr_mem. +#define AT45DBX_MSK_PTR_BYTE ((1 << AT45DBX_PAGE_BITS) - 1) + +//! Bit-mask for page selection in \ref gl_ptr_mem. +#define AT45DBX_MSK_PTR_PAGE (((1 << AT45DBX_PAGE_ADDR_BITS) - 1) << AT45DBX_PAGE_BITS) + +//! Bit-mask for byte position within sector in \ref gl_ptr_mem. +#define AT45DBX_MSK_PTR_SECTOR ((1 << AT45DBX_SECTOR_BITS) - 1) + + +/*! \brief Sends a dummy byte through SPI. + */ +#define spi_write_dummy() spi_write(AT45DBX_SPI, 0xFF) + + +//! Boolean indicating whether memory is in busy state. +static Bool at45dbx_busy; + +//! Memory data pointer. +static U32 gl_ptr_mem; + +//! Sector buffer. +static U8 sector_buf[AT45DBX_SECTOR_SIZE]; + + +/*! \name Control Functions + */ +//! @{ + + +Bool at45dbx_init(spi_options_t spiOptions, unsigned int pba_hz) +{ + // Setup SPI registers according to spiOptions. + for (spiOptions.reg = AT45DBX_SPI_FIRST_NPCS; + spiOptions.reg < AT45DBX_SPI_FIRST_NPCS + AT45DBX_MEM_CNT; + spiOptions.reg++) + { + if (spi_setupChipReg(AT45DBX_SPI, &spiOptions, pba_hz) != SPI_OK) return KO; + } + + // Memory ready. + at45dbx_busy = FALSE; + + return OK; +} + + +/*! \brief Selects or unselects a DF memory. + * + * \param memidx Memory ID of DF to select or unselect. + * \param bSelect Boolean indicating whether the DF memory has to be selected. + */ +static void at45dbx_chipselect_df(U8 memidx, Bool bSelect) +{ + if (bSelect) + { + // Select SPI chip. + spi_selectChip(AT45DBX_SPI, AT45DBX_SPI_FIRST_NPCS + memidx); + } + else + { + // Unselect SPI chip. + spi_unselectChip(AT45DBX_SPI, AT45DBX_SPI_FIRST_NPCS + memidx); + } +} + + +Bool at45dbx_mem_check(void) +{ + U8 df; + U16 status = 0; + + // DF memory check. + for (df = 0; df < AT45DBX_MEM_CNT; df++) + { + // Select the DF memory to check. + at45dbx_chipselect_df(df, TRUE); + + // Send the Status Register Read command. + spi_write(AT45DBX_SPI, AT45DBX_CMDC_RD_STATUS_REG); + + // Send a dummy byte to read the status register. + spi_write_dummy(); + spi_read(AT45DBX_SPI, &status); + + // Unselect the checked DF memory. + at45dbx_chipselect_df(df, FALSE); + + // Unexpected device density value. + if ((status & AT45DBX_MSK_DENSITY) < AT45DBX_DENSITY) return KO; + } + + return OK; +} + + +/*! \brief Waits until the DF is ready. + */ +static void at45dbx_wait_ready(void) +{ + U16 status; + + // Select the DF memory gl_ptr_mem points to. + at45dbx_chipselect_df(gl_ptr_mem >> AT45DBX_MEM_SIZE, TRUE); + + // Send the Status Register Read command. + spi_write(AT45DBX_SPI, AT45DBX_CMDC_RD_STATUS_REG); + + // Read the status register until the DF is ready. + do + { + // Send a dummy byte to read the status register. + spi_write_dummy(); + spi_read(AT45DBX_SPI, &status); + } while ((status & AT45DBX_MSK_BUSY) == AT45DBX_BUSY); + + // Unselect the DF memory gl_ptr_mem points to. + at45dbx_chipselect_df(gl_ptr_mem >> AT45DBX_MEM_SIZE, FALSE); +} + + +Bool at45dbx_read_open(U32 sector) +{ + U32 addr; + + // Set the global memory pointer to a byte address. + gl_ptr_mem = sector << AT45DBX_SECTOR_BITS; // gl_ptr_mem = sector * AT45DBX_SECTOR_SIZE. + + // If the DF memory is busy, wait until it's ready. + if (at45dbx_busy) at45dbx_wait_ready(); + at45dbx_busy = FALSE; + + // Select the DF memory gl_ptr_mem points to. + at45dbx_chipselect_df(gl_ptr_mem >> AT45DBX_MEM_SIZE, TRUE); + + // Initiate a page read at a given sector. + + // Send the Main Memory Page Read command. + spi_write(AT45DBX_SPI, AT45DBX_CMDA_RD_PAGE); + + // Send the three address bytes, which comprise: + // - (24 - (AT45DBX_PAGE_ADDR_BITS + AT45DBX_BYTE_ADDR_BITS)) reserved bits; + // - then AT45DBX_PAGE_ADDR_BITS bits specifying the page in main memory to be read; + // - then AT45DBX_BYTE_ADDR_BITS bits specifying the starting byte address within that page. + // NOTE: The bits of gl_ptr_mem above the AT45DBX_MEM_SIZE bits are useless for the local + // DF addressing. They are used for DF discrimination when there are several DFs. + addr = (Rd_bitfield(gl_ptr_mem, AT45DBX_MSK_PTR_PAGE) << AT45DBX_BYTE_ADDR_BITS) | + Rd_bitfield(gl_ptr_mem, AT45DBX_MSK_PTR_BYTE); + spi_write(AT45DBX_SPI, LSB2W(addr)); + spi_write(AT45DBX_SPI, LSB1W(addr)); + spi_write(AT45DBX_SPI, LSB0W(addr)); + + // Send 32 don't care clock cycles to initialize the read operation. + spi_write_dummy(); + spi_write_dummy(); + spi_write_dummy(); + spi_write_dummy(); + + return OK; +} + + +void at45dbx_read_close(void) +{ + // Unselect the DF memory gl_ptr_mem points to. + at45dbx_chipselect_df(gl_ptr_mem >> AT45DBX_MEM_SIZE, FALSE); + + // Memory ready. + at45dbx_busy = FALSE; +} + + +Bool at45dbx_write_open(U32 sector) +{ + U32 addr; + + // Set the global memory pointer to a byte address. + gl_ptr_mem = sector << AT45DBX_SECTOR_BITS; // gl_ptr_mem = sector * AT45DBX_SECTOR_SIZE. + + // If the DF memory is busy, wait until it's ready. + if (at45dbx_busy) at45dbx_wait_ready(); + at45dbx_busy = FALSE; + +#if AT45DBX_PAGE_SIZE > AT45DBX_SECTOR_SIZE + // Select the DF memory gl_ptr_mem points to. + at45dbx_chipselect_df(gl_ptr_mem >> AT45DBX_MEM_SIZE, TRUE); + + // Transfer the content of the current page to buffer 1. + + // Send the Main Memory Page to Buffer 1 Transfer command. + spi_write(AT45DBX_SPI, AT45DBX_CMDB_XFR_PAGE_TO_BUF1); + + // Send the three address bytes, which comprise: + // - (24 - (AT45DBX_PAGE_ADDR_BITS + AT45DBX_BYTE_ADDR_BITS)) reserved bits; + // - then AT45DBX_PAGE_ADDR_BITS bits specifying the page in main memory to be read; + // - then AT45DBX_BYTE_ADDR_BITS don't care bits. + // NOTE: The bits of gl_ptr_mem above the AT45DBX_MEM_SIZE bits are useless for the local + // DF addressing. They are used for DF discrimination when there are several DFs. + addr = Rd_bitfield(gl_ptr_mem, AT45DBX_MSK_PTR_PAGE) << AT45DBX_BYTE_ADDR_BITS; + spi_write(AT45DBX_SPI, LSB2W(addr)); + spi_write(AT45DBX_SPI, LSB1W(addr)); + spi_write(AT45DBX_SPI, LSB0W(addr)); + + // Unselect the DF memory gl_ptr_mem points to. + at45dbx_chipselect_df(gl_ptr_mem >> AT45DBX_MEM_SIZE, FALSE); + + // Wait for end of page transfer. + at45dbx_wait_ready(); +#endif + + // Select the DF memory gl_ptr_mem points to. + at45dbx_chipselect_df(gl_ptr_mem >> AT45DBX_MEM_SIZE, TRUE); + + // Initiate a page write at a given sector. + + // Send the Main Memory Page Program through Buffer 1 command. + spi_write(AT45DBX_SPI, AT45DBX_CMDB_PR_PAGE_TH_BUF1); + + // Send the three address bytes, which comprise: + // - (24 - (AT45DBX_PAGE_ADDR_BITS + AT45DBX_BYTE_ADDR_BITS)) reserved bits; + // - then AT45DBX_PAGE_ADDR_BITS bits specifying the page in main memory to be written; + // - then AT45DBX_BYTE_ADDR_BITS bits specifying the starting byte address within that page. + // NOTE: The bits of gl_ptr_mem above the AT45DBX_MEM_SIZE bits are useless for the local + // DF addressing. They are used for DF discrimination when there are several DFs. + addr = (Rd_bitfield(gl_ptr_mem, AT45DBX_MSK_PTR_PAGE) << AT45DBX_BYTE_ADDR_BITS) | + Rd_bitfield(gl_ptr_mem, AT45DBX_MSK_PTR_BYTE); + spi_write(AT45DBX_SPI, LSB2W(addr)); + spi_write(AT45DBX_SPI, LSB1W(addr)); + spi_write(AT45DBX_SPI, LSB0W(addr)); + + return OK; +} + + +void at45dbx_write_close(void) +{ + // While end of logical sector not reached, zero-fill remaining memory bytes. + while (Rd_bitfield(gl_ptr_mem, AT45DBX_MSK_PTR_SECTOR)) + { + spi_write(AT45DBX_SPI, 0x00); + gl_ptr_mem++; + } + + // Unselect the DF memory gl_ptr_mem points to. + at45dbx_chipselect_df(gl_ptr_mem >> AT45DBX_MEM_SIZE, FALSE); + + // Memory busy. + at45dbx_busy = TRUE; +} + + +//! @} + + +/*! \name Single-Byte Access Functions + */ +//! @{ + + +U8 at45dbx_read_byte(void) +{ + U16 data; + + // Memory busy. + if (at45dbx_busy) + { + // Being here, we know that we previously finished a page read. + // => We have to access the next page. + + // Memory ready. + at45dbx_busy = FALSE; + + // Eventually select the next DF and open the next page. + // NOTE: at45dbx_read_open input parameter is a sector. + at45dbx_read_open(gl_ptr_mem >> AT45DBX_SECTOR_BITS); // gl_ptr_mem / AT45DBX_SECTOR_SIZE. + } + + // Send a dummy byte to read the next data byte. + spi_write_dummy(); + spi_read(AT45DBX_SPI, &data); + gl_ptr_mem++; + + // If end of page reached, + if (!Rd_bitfield(gl_ptr_mem, AT45DBX_MSK_PTR_BYTE)) + { + // unselect the DF memory gl_ptr_mem points to. + at45dbx_chipselect_df(gl_ptr_mem >> AT45DBX_MEM_SIZE, FALSE); + + // Memory busy. + at45dbx_busy = TRUE; + } + + return data; +} + + +Bool at45dbx_write_byte(U8 b) +{ + // Memory busy. + if (at45dbx_busy) + { + // Being here, we know that we previously launched a page programming. + // => We have to access the next page. + + // Eventually select the next DF and open the next page. + // NOTE: at45dbx_write_open input parameter is a sector. + at45dbx_write_open(gl_ptr_mem >> AT45DBX_SECTOR_BITS); // gl_ptr_mem / AT45DBX_SECTOR_SIZE. + } + + // Write the next data byte. + spi_write(AT45DBX_SPI, b); + gl_ptr_mem++; + + // If end of page reached, + if (!Rd_bitfield(gl_ptr_mem, AT45DBX_MSK_PTR_BYTE)) + { + // unselect the DF memory gl_ptr_mem points to in order to program the page. + at45dbx_chipselect_df(gl_ptr_mem >> AT45DBX_MEM_SIZE, FALSE); + + // Memory busy. + at45dbx_busy = TRUE; + } + + return OK; +} + + +//! @} + + +/*! \name Multiple-Sector Access Functions + */ +//! @{ + + +Bool at45dbx_read_multiple_sector(U16 nb_sector) +{ + while (nb_sector--) + { + // Read the next sector. + at45dbx_read_sector_2_ram(sector_buf); + at45dbx_read_multiple_sector_callback(sector_buf); + } + + return OK; +} + + +Bool at45dbx_write_multiple_sector(U16 nb_sector) +{ + while (nb_sector--) + { + // Write the next sector. + at45dbx_write_multiple_sector_callback(sector_buf); + at45dbx_write_sector_from_ram(sector_buf); + } + + return OK; +} + + +//! @} + + +/*! \name Single-Sector Access Functions + */ +//! @{ + + +Bool at45dbx_read_sector_2_ram(void *ram) +{ + U8 *_ram = ram; + U16 i; + U16 data; + + // Memory busy. + if (at45dbx_busy) + { + // Being here, we know that we previously finished a page read. + // => We have to access the next page. + + // Memory ready. + at45dbx_busy = FALSE; + + // Eventually select the next DF and open the next page. + // NOTE: at45dbx_read_open input parameter is a sector. + at45dbx_read_open(gl_ptr_mem >> AT45DBX_SECTOR_BITS); // gl_ptr_mem / AT45DBX_SECTOR_SIZE. + } + + // Read the next sector. + for (i = AT45DBX_SECTOR_SIZE; i; i--) + { + // Send a dummy byte to read the next data byte. + spi_write_dummy(); + spi_read(AT45DBX_SPI, &data); + *_ram++ = data; + } + + // Update the memory pointer. + gl_ptr_mem += AT45DBX_SECTOR_SIZE; + +#if AT45DBX_PAGE_SIZE > AT45DBX_SECTOR_SIZE + // If end of page reached, + if (!Rd_bitfield(gl_ptr_mem, AT45DBX_MSK_PTR_BYTE)) +#endif + { + // unselect the DF memory gl_ptr_mem points to. + at45dbx_chipselect_df(gl_ptr_mem >> AT45DBX_MEM_SIZE, FALSE); + + // Memory busy. + at45dbx_busy = TRUE; + } + + return OK; +} + + +Bool at45dbx_write_sector_from_ram(const void *ram) +{ + const U8 *_ram = ram; + U16 i; + + // Memory busy. + if (at45dbx_busy) + { + // Being here, we know that we previously launched a page programming. + // => We have to access the next page. + + // Eventually select the next DF and open the next page. + // NOTE: at45dbx_write_open input parameter is a sector. + at45dbx_write_open(gl_ptr_mem >> AT45DBX_SECTOR_BITS); // gl_ptr_mem / AT45DBX_SECTOR_SIZE. + } + + // Write the next sector. + for (i = AT45DBX_SECTOR_SIZE; i; i--) + { + // Write the next data byte. + spi_write(AT45DBX_SPI, *_ram++); + } + + // Update the memory pointer. + gl_ptr_mem += AT45DBX_SECTOR_SIZE; + +#if AT45DBX_PAGE_SIZE > AT45DBX_SECTOR_SIZE + // If end of page reached, + if (!Rd_bitfield(gl_ptr_mem, AT45DBX_MSK_PTR_BYTE)) +#endif + { + // unselect the DF memory gl_ptr_mem points to in order to program the page. + at45dbx_chipselect_df(gl_ptr_mem >> AT45DBX_MEM_SIZE, FALSE); + + // Memory busy. + at45dbx_busy = TRUE; + } + + return OK; +} + + +//! @} + + +#endif // AT45DBX_MEM == ENABLE diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx.h new file mode 100644 index 000000000..e5263b247 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx.h @@ -0,0 +1,270 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Management of the AT45DBX data flash controller through SPI. + * + * This file manages the accesses to the AT45DBX data flash components. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with an SPI module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _AT45DBX_H_ +#define _AT45DBX_H_ + + +#include "conf_access.h" + +#if AT45DBX_MEM == DISABLE + #error at45dbx.h is #included although AT45DBX_MEM is disabled +#endif + + +#include "spi.h" + + +//_____ D E F I N I T I O N S ______________________________________________ + +/*! \name Available AT45DBX Sizes + * + * Number of address bits of available AT45DBX data flash memories. + * + * \note Only memories with page sizes of at least 512 bytes (sector size) are + * supported. + */ +//! @{ +#define AT45DBX_1MB 20 +#define AT45DBX_2MB 21 +#define AT45DBX_4MB 22 +#define AT45DBX_8MB 23 +//! @} + +// AT45DBX_1MB +#define AT45DBX_SECTOR_BITS 8 //! Number of bits for addresses within sectors. +// AT45DBX_2MB AT45DBX_4MB AT45DBX_8MB +//#define AT45DBX_SECTOR_BITS 9 //! Number of bits for addresses within sectors. + +//! Sector size in bytes. +#define AT45DBX_SECTOR_SIZE (1 << AT45DBX_SECTOR_BITS) + + +//_____ D E C L A R A T I O N S ____________________________________________ + +/*! \name Control Functions + */ +//! @{ + +/*! \brief Initializes the data flash controller and the SPI channel by which + * the DF is controlled. + * + * \param spiOptions Initialization options of the DF SPI channel. + * \param pba_hz SPI module input clock frequency (PBA clock, Hz). + * + * \retval OK Success. + * \retval KO Failure. + */ +extern Bool at45dbx_init(spi_options_t spiOptions, unsigned int pba_hz); + +/*! \brief Performs a memory check on all DFs. + * + * \retval OK Success. + * \retval KO Failure. + */ +extern Bool at45dbx_mem_check(void); + +/*! \brief Opens a DF memory in read mode at a given sector. + * + * \param sector Start sector. + * + * \retval OK Success. + * \retval KO Failure. + * + * \note Sector may be page-unaligned (depending on the DF page size). + */ +extern Bool at45dbx_read_open(U32 sector); + +/*! \brief Unselects the current DF memory. + */ +extern void at45dbx_read_close(void); + +/*! \brief This function opens a DF memory in write mode at a given sector. + * + * \param sector Start sector. + * + * \retval OK Success. + * \retval KO Failure. + * + * \note Sector may be page-unaligned (depending on the DF page size). + * + * \note If \ref AT45DBX_PAGE_SIZE > \ref AT45DBX_SECTOR_SIZE, page content is + * first loaded in buffer to then be partially updated by write byte or + * write sector functions. + */ +extern Bool at45dbx_write_open(U32 sector); + +/*! \brief Fills the end of the current logical sector and launches page programming. + */ +extern void at45dbx_write_close(void); + +//! @} + + +/*! \name Single-Byte Access Functions + */ +//! @{ + +/*! \brief Performs a single byte read from DF memory. + * + * \return The read byte. + * + * \note First call must be preceded by a call to the \ref at45dbx_read_open + * function. + */ +extern U8 at45dbx_read_byte(void); + +/*! \brief Performs a single byte write to DF memory. + * + * \param b The byte to write. + * + * \retval OK Success. + * \retval KO Failure. + * + * \note First call must be preceded by a call to the \ref at45dbx_write_open + * function. + */ +extern Bool at45dbx_write_byte(U8 b); + +//! @} + + +/*! \name Multiple-Sector Access Functions + */ +//! @{ + +/*! \brief Reads \a nb_sector sectors from DF memory. + * + * Data flow is: DF -> callback. + * + * \param nb_sector Number of contiguous sectors to read. + * + * \retval OK Success. + * \retval KO Failure. + * + * \note First call must be preceded by a call to the \ref at45dbx_read_open + * function. + * + * \note As \ref AT45DBX_PAGE_SIZE is always a multiple of + * \ref AT45DBX_SECTOR_SIZE, there is no need to check page end for each + * byte. + */ +extern Bool at45dbx_read_multiple_sector(U16 nb_sector); + +/*! \brief Callback function invoked after each sector read during + * \ref at45dbx_read_multiple_sector. + * + * \param psector Pointer to read sector. + */ +extern void at45dbx_read_multiple_sector_callback(const void *psector); + +/*! \brief Writes \a nb_sector sectors to DF memory. + * + * Data flow is: callback -> DF. + * + * \param nb_sector Number of contiguous sectors to write. + * + * \retval OK Success. + * \retval KO Failure. + * + * \note First call must be preceded by a call to the \ref at45dbx_write_open + * function. + * + * \note As \ref AT45DBX_PAGE_SIZE is always a multiple of + * \ref AT45DBX_SECTOR_SIZE, there is no need to check page end for each + * byte. + */ +extern Bool at45dbx_write_multiple_sector(U16 nb_sector); + +/*! \brief Callback function invoked before each sector write during + * \ref at45dbx_write_multiple_sector. + * + * \param psector Pointer to sector to write. + */ +extern void at45dbx_write_multiple_sector_callback(void *psector); + +//! @} + + +/*! \name Single-Sector Access Functions + */ +//! @{ + +/*! \brief Reads 1 DF sector to a RAM buffer. + * + * Data flow is: DF -> RAM. + * + * \param ram Pointer to RAM buffer. + * + * \retval OK Success. + * \retval KO Failure. + * + * \note First call must be preceded by a call to the \ref at45dbx_read_open + * function. + */ +extern Bool at45dbx_read_sector_2_ram(void *ram); + +/*! \brief Writes 1 DF sector from a RAM buffer. + * + * Data flow is: RAM -> DF. + * + * \param ram Pointer to RAM buffer. + * + * \retval OK Success. + * \retval KO Failure. + * + * \note First call must be preceded by a call to the \ref at45dbx_write_open + * function. + */ +extern Bool at45dbx_write_sector_from_ram(const void *ram); + +//! @} + + +#endif // _AT45DBX_H_ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx_mem.c b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx_mem.c new file mode 100644 index 000000000..4c0ace2f5 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx_mem.c @@ -0,0 +1,234 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief CTRL_ACCESS interface for the AT45DBX data flash controller. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with an SPI module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +//_____ I N C L U D E S ___________________________________________________ + +#include "conf_access.h" + + +#if AT45DBX_MEM == ENABLE + +#include "conf_at45dbx.h" +#include "at45dbx.h" +#include "at45dbx_mem.h" + + +//_____ D E F I N I T I O N S ______________________________________________ + +//! Whether to detect write accesses to the memory. +#define AT45DBX_MEM_TEST_CHANGE_STATE ENABLED + + +#if (ACCESS_USB == ENABLED || ACCESS_MEM_TO_RAM == ENABLED) && AT45DBX_MEM_TEST_CHANGE_STATE == ENABLED + +//! Memory data modified flag. +static volatile Bool s_b_data_modify = FALSE; + +#endif + + +/*! \name Control Interface + */ +//! @{ + + +Ctrl_status at45dbx_test_unit_ready(void) +{ + return (at45dbx_mem_check() == OK) ? CTRL_GOOD : CTRL_NO_PRESENT; +} + + +Ctrl_status at45dbx_read_capacity(U32 *u32_nb_sector) +{ + *u32_nb_sector = (AT45DBX_MEM_CNT << (AT45DBX_MEM_SIZE - AT45DBX_SECTOR_BITS)) - 1; + + return CTRL_GOOD; +} + + +Bool at45dbx_wr_protect(void) +{ + return FALSE; +} + + +Bool at45dbx_removal(void) +{ + return FALSE; +} + + +//! @} + + +#if ACCESS_USB == ENABLED + +#include "usb_drv.h" +#include "scsi_decoder.h" + + +/*! \name MEM <-> USB Interface + */ +//! @{ + + +Ctrl_status at45dbx_usb_read_10(U32 addr, U16 nb_sector) +{ + if (addr + nb_sector > AT45DBX_MEM_CNT << (AT45DBX_MEM_SIZE - AT45DBX_SECTOR_BITS)) return CTRL_FAIL; + + at45dbx_read_open(addr); + at45dbx_read_multiple_sector(nb_sector); + at45dbx_read_close(); + + return CTRL_GOOD; +} + + +void at45dbx_read_multiple_sector_callback(const void *psector) +{ + U16 data_to_transfer = AT45DBX_SECTOR_SIZE; + + // Transfer read sector to the USB interface. + while (data_to_transfer) + { + while (!Is_usb_in_ready(g_scsi_ep_ms_in)) + { + if(!Is_usb_endpoint_enabled(g_scsi_ep_ms_in)) + return; // USB Reset + } + + Usb_reset_endpoint_fifo_access(g_scsi_ep_ms_in); + data_to_transfer = usb_write_ep_txpacket(g_scsi_ep_ms_in, psector, + data_to_transfer, &psector); + Usb_ack_in_ready_send(g_scsi_ep_ms_in); + } +} + + +Ctrl_status at45dbx_usb_write_10(U32 addr, U16 nb_sector) +{ + if (addr + nb_sector > AT45DBX_MEM_CNT << (AT45DBX_MEM_SIZE - AT45DBX_SECTOR_BITS)) return CTRL_FAIL; + +#if AT45DBX_MEM_TEST_CHANGE_STATE == ENABLED + if (nb_sector) s_b_data_modify = TRUE; +#endif + + at45dbx_write_open(addr); + at45dbx_write_multiple_sector(nb_sector); + at45dbx_write_close(); + + return CTRL_GOOD; +} + + +void at45dbx_write_multiple_sector_callback(void *psector) +{ + U16 data_to_transfer = AT45DBX_SECTOR_SIZE; + + // Transfer sector to write from the USB interface. + while (data_to_transfer) + { + while (!Is_usb_out_received(g_scsi_ep_ms_out)) + { + if(!Is_usb_endpoint_enabled(g_scsi_ep_ms_out)) + return; // USB Reset + } + + Usb_reset_endpoint_fifo_access(g_scsi_ep_ms_out); + data_to_transfer = usb_read_ep_rxpacket(g_scsi_ep_ms_out, psector, + data_to_transfer, &psector); + Usb_ack_out_received_free(g_scsi_ep_ms_out); + } +} + + +//! @} + +#endif // ACCESS_USB == ENABLED + + +#if ACCESS_MEM_TO_RAM == ENABLED + +/*! \name MEM <-> RAM Interface + */ +//! @{ + + +Ctrl_status at45dbx_df_2_ram(U32 addr, void *ram) +{ + if (addr + 1 > AT45DBX_MEM_CNT << (AT45DBX_MEM_SIZE - AT45DBX_SECTOR_BITS)) return CTRL_FAIL; + + at45dbx_read_open(addr); + at45dbx_read_sector_2_ram(ram); + at45dbx_read_close(); + + return CTRL_GOOD; +} + + +Ctrl_status at45dbx_ram_2_df(U32 addr, const void *ram) +{ + if (addr + 1 > AT45DBX_MEM_CNT << (AT45DBX_MEM_SIZE - AT45DBX_SECTOR_BITS)) return CTRL_FAIL; + +#if AT45DBX_MEM_TEST_CHANGE_STATE == ENABLED + s_b_data_modify = TRUE; +#endif + + at45dbx_write_open(addr); + at45dbx_write_sector_from_ram(ram); + at45dbx_write_close(); + + return CTRL_GOOD; +} + + +//! @} + +#endif // ACCESS_MEM_TO_RAM == ENABLED + + +#endif // AT45DBX_MEM == ENABLE diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx_mem.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx_mem.h new file mode 100644 index 000000000..de24fa371 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx_mem.h @@ -0,0 +1,164 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief CTRL_ACCESS interface for the AT45DBX data flash controller. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with an SPI module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _AT45DBX_MEM_H_ +#define _AT45DBX_MEM_H_ + + +#include "conf_access.h" + +#if AT45DBX_MEM == DISABLE + #error at45dbx_mem.h is #included although AT45DBX_MEM is disabled +#endif + + +#include "ctrl_access.h" + + +//_____ D E C L A R A T I O N S ____________________________________________ + +/*! \name Control Interface + */ +//! @{ + +/*! \brief Tests the memory state and initializes the memory if required. + * + * The TEST UNIT READY SCSI primary command allows an application client to poll + * a LUN until it is ready without having to allocate memory for returned data. + * + * This command may be used to check the media status of LUNs with removable + * media. + * + * \return Status. + */ +extern Ctrl_status at45dbx_test_unit_ready(void); + +/*! \brief Returns the address of the last valid sector in the memory. + * + * \param u32_nb_sector Pointer to the address of the last valid sector. + * + * \return Status. + */ +extern Ctrl_status at45dbx_read_capacity(U32 *u32_nb_sector); + +/*! \brief Returns the write-protection state of the memory. + * + * \return \c TRUE if the memory is write-protected, else \c FALSE. + * + * \note Only used by removable memories with hardware-specific write + * protection. + */ +extern Bool at45dbx_wr_protect(void); + +/*! \brief Tells whether the memory is removable. + * + * \return \c TRUE if the memory is removable, else \c FALSE. + */ +extern Bool at45dbx_removal(void); + +//! @} + + +#if ACCESS_USB == ENABLED + +/*! \name MEM <-> USB Interface + */ +//! @{ + +/*! \brief Tranfers data from the memory to USB. + * + * \param addr Address of first memory sector to read. + * \param nb_sector Number of sectors to transfer. + * + * \return Status. + */ +extern Ctrl_status at45dbx_usb_read_10(U32 addr, U16 nb_sector); + +/*! \brief Tranfers data from USB to the memory. + * + * \param addr Address of first memory sector to write. + * \param nb_sector Number of sectors to transfer. + * + * \return Status. + */ +extern Ctrl_status at45dbx_usb_write_10(U32 addr, U16 nb_sector); + +//! @} + +#endif + + +#if ACCESS_MEM_TO_RAM == ENABLED + +/*! \name MEM <-> RAM Interface + */ +//! @{ + +/*! \brief Copies 1 data sector from the memory to RAM. + * + * \param addr Address of first memory sector to read. + * \param ram Pointer to RAM buffer to write. + * + * \return Status. + */ +extern Ctrl_status at45dbx_df_2_ram(U32 addr, void *ram); + +/*! \brief Copies 1 data sector from RAM to the memory. + * + * \param addr Address of first memory sector to write. + * \param ram Pointer to RAM buffer to read. + * + * \return Status. + */ +extern Ctrl_status at45dbx_ram_2_df(U32 addr, const void *ram); + +//! @} + +#endif + + +#endif // _AT45DBX_MEM_H_ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.7.0/UCR1/GCC/lib_ucr1_hd_sdio_v2.7.0.a b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.7.0/UCR1/GCC/lib_ucr1_hd_sdio_v2.7.0.a new file mode 100644 index 000000000..e01ab14a6 Binary files /dev/null and b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.7.0/UCR1/GCC/lib_ucr1_hd_sdio_v2.7.0.a differ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.7.0/UCR1/GCC/lib_ucr1_hd_spi_v2.7.0.a b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.7.0/UCR1/GCC/lib_ucr1_hd_spi_v2.7.0.a new file mode 100644 index 000000000..9aa4f2410 Binary files /dev/null and b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.7.0/UCR1/GCC/lib_ucr1_hd_spi_v2.7.0.a differ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.7.0/UCR1/GCC/lib_ucr1_hd_wl_sta_intwpa_v2.7.0.a b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.7.0/UCR1/GCC/lib_ucr1_hd_wl_sta_intwpa_v2.7.0.a new file mode 100644 index 000000000..00536f5dc Binary files /dev/null and b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.7.0/UCR1/GCC/lib_ucr1_hd_wl_sta_intwpa_v2.7.0.a differ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.7.0/UCR2/GCC/lib_ucr2_hd_sdio_v2.7.0.a b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.7.0/UCR2/GCC/lib_ucr2_hd_sdio_v2.7.0.a new file mode 100644 index 000000000..a61dea3d0 Binary files /dev/null and b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.7.0/UCR2/GCC/lib_ucr2_hd_sdio_v2.7.0.a differ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.7.0/UCR2/GCC/lib_ucr2_hd_spi_v2.7.0.a b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.7.0/UCR2/GCC/lib_ucr2_hd_spi_v2.7.0.a new file mode 100644 index 000000000..688319295 Binary files /dev/null and b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.7.0/UCR2/GCC/lib_ucr2_hd_spi_v2.7.0.a differ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.7.0/UCR2/GCC/lib_ucr2_hd_wl_sta_intwpa_v2.7.0.a b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.7.0/UCR2/GCC/lib_ucr2_hd_wl_sta_intwpa_v2.7.0.a new file mode 100644 index 000000000..0b09aa811 Binary files /dev/null and b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.7.0/UCR2/GCC/lib_ucr2_hd_wl_sta_intwpa_v2.7.0.a differ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.7.0/revision.txt b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.7.0/revision.txt new file mode 100644 index 000000000..5420c93d5 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.7.0/revision.txt @@ -0,0 +1 @@ +Revision: 2491 diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/wl_api.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/wl_api.h new file mode 100644 index 000000000..17ba2ba8c --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/wl_api.h @@ -0,0 +1,1687 @@ +/* + * Programming interface for wl_api. + * Copyright (C) 2010 HD Wireless AB + * + * You should have received a copy of the license along with this library. + */ + +/*! \file wl_api.h ************************************************************* + * + * \brief Basic WiFi API + * + * This file provides the wl_api interface. + * + * - Compiler: GNU GCC for AVR32 + * - Supported devices: + * \li SPB104 + EVK1100 + * \li SPB104 + EVK1101 + * \li SPB104 + EVK1104 + * \li SPB104 + EVK1105 (SPI) + * \li SPB104 + EVK1105 (SPI + irq) + * \li SPB105 + EVK1105 (SPI) + * - AppNote: + * + * \author H&D Wireless AB: \n + * + ***************************************************************************** + * + * \section intro Introduction + * This is the documentation for the generic WiFi Driver API \a wl_api. + * + * \section files Main Files + * - wl_api.h : WiFi driver interface. + * - lib_ucr*_hd_wifi_standalone_v*.*.a - Driver library. + * + */ +/** \mainpage wl_api Reference Manual + +\image html images/wl_api_block_diagram_small.png "wl_api Architecture" + +(o)WL API © is a programming interface for WiFi (802.11). It aims +to be a complete interface for embedded applications wanting to use +wireless as a communications interface. (o)WL API © is shortened +"wl_api" in this document. + +wl_api has been designed to meet the following goals : + \li Simple : The API is as simple as is practicable + to make it easy to use. + \li Minimal size : The API is usable on very resource constrained + platforms. + \li Portable : The API is deployable on any platform with a standards + compliant C compiler. + \li OS independent : The API is deployable on systems using a real time + operating system as well as with applications running on the + "bare metal" of a hardware platform (that is without an operating system). + +As a consequence of these design goals wl_api does not allow very fine +grained control of most parameters relating to 802.11 networks. That +would increase the flexibility of the API while also increasing +complexity and code size. When the underlying WiFi hardware can +support a richer feature set the extra features can be offered as a +add-on library if required. + +The wl_api is implemented by two libraries. The core library is +compiled for a hardware platform and is independent of operating +system or IP stack. The core library contains all WiFi +functionality. The core library is supported by a suite of transport +libraries. The transport libraries implements the hardware +communication layer and are specific to the type of hardware interface +used to connect the host platform to the WiFi hardware. For example, +there are transport libraries for SPI and for SDIO. Only the core +library has a public interface (wl_api.h) but applications will need +to link with both the core library and a transport library matching +the hardware configuration. + +\section wl_api_princ Operation Principles + +There are three important properties of wl_api to keep in mind when +programming with it. + +The first is that wl_api is \b asynchronous. For instance, when the +\a wl_connect() function is called to attempt connection with an access +point it will trigger a sequence of packets being exchanged with the +access point after which, if everything is okay, a connection has been +established. The \a wl_connect() call is asynchronous (or non-blocking) +which means that you don't know if the connection attempt has +succeeded after the call returns. You only know if the sequence was +successfully started or not. To find out if, and when, the connection +attempt was successful you must register an event handler using the +function \a wl_register_event_cb(). This is true of a number of API calls +(which is indicated in their documentation). + +The second important property is that wl_api is \b polled. wl_api +never executes "by itself", since it would then have to support +interrupts, timers, locks and other operating system dependent +features. Instead all asynchronous processes proceed when wl_api is +polled by calling the \a wl_tick() function. When \a wl_tick() is called +wl_api reacts to any received management frames, expires any internal timers and +performs any other tasks necessary for forward progress. After +\a wl_tick() returns nothing will happen unless it or some other wl_api +function is called again. Also, to send and receive data, the \a wl_process_rx() +and \a wl_process_tx() must be invoked upon reception and transmission of data. + +The third important property is that wl_api is \b not \b thread \b safe. +All wl_api calls must execute in the same context since the +library has no knowledge of the locking mechanisms available (if any). + +\section wl_api_code_examples A note on the code examples + +The code examples illustrate how to call the different wl_api functions. +They do not constitute a complete program. Functions with the prefix "app_" +in the code examples are application specific calls that illustrate a +particular action. These functions are not part of the API and will have +to be implemented if needed. For a complete working code example see +one of the H&D Wireless software reference designs, such as the WiFi HTTP +server demo code in the Atmel Software Framework. + +The API is structured into these functional groups: + +\li \ref wl_api +\li \ref wl_wifi +\li \ref wl_data +\li \ref wl_transport +\li \ref wl_custom + +Also documented here is the transport layers for SPI and SDIO. +There interfaces are only necessary when porting the library to +a new hardware platform. + +\li \ref wl_spi +\li \ref wl_sdio + + * \section contactinfo Contact Information + * For further information, visit + * H&D Wireless.\n + * Support and FAQ: http://www.atmel.com/ + */ + +#ifndef WL_API_H +#define WL_API_H + +#define WL_API_RELEASE_NAME "v2.7.0" + +/*! Maximum size of a SSID */ +#define WL_SSID_MAX_LENGTH 32 +/*! Size of a MAC-address or BSSID */ +#define WL_MAC_ADDR_LENGTH 6 +/*! Maximum length of a passphrase */ +#define WL_MAX_PASS_LEN 64 +/*! Indicates that there is no SNR information */ +#define WL_SNR_UNKNOWN -128 + +#define SPB104 104 +#define SPB105 105 + +/*! \ingroup wl_api + * API Error codes */ +typedef enum { + WL_FAILURE = -1, + WL_SUCCESS = 1, + WL_NOEFFECT, + WL_OOM, + WL_INVALID_LENGTH, + WL_NOT_SUPPORTED, + WL_ABSORBED, + WL_RESOURCES, + WL_BUSY, + WL_RETRY, /*!< Retry the operation later. The driver is busy + resolving an operation that conflicts with the + request. */ + WL_INVALID_ARGS, + WL_AVAIL, + WL_CARD_FAILURE, /*!< Could not detect SPB device */ + WL_FIRMWARE_INVALID, /*!< Invalid firmware data */ + +} wl_err_t; + +/*! \ingroup wl_wifi + * Event identifiers */ +enum wl_event_id_t { + WL_EVENT_MEDIA_CONNECTED = 0, + WL_EVENT_CONN_FAILURE, + WL_EVENT_MEDIA_DISCONNECTED, + WL_EVENT_SCAN_COMPLETE, + WL_EVENT_FAILURE, + MAX_WL_EVENT +}; + +/*! \ingroup wl_wifi + * Authentication modes */ +enum wl_auth_mode { + AUTH_MODE_INVALID, + AUTH_MODE_AUTO, + AUTH_MODE_OPEN_SYSTEM, + AUTH_MODE_SHARED_KEY, + AUTH_MODE_WPA, + AUTH_MODE_WPA2, + AUTH_MODE_WPA_PSK, + AUTH_MODE_WPA2_PSK +}; + +/*! \ingroup wl_wifi + * Encryption modes */ +enum wl_enc_type { /* Values map to 802.11 encryption suites... */ + ENC_TYPE_WEP = 5, + ENC_TYPE_TKIP = 2, + ENC_TYPE_CCMP = 4, + /* ... except these two, 7 and 8 are reserved in 802.11-2007 */ + ENC_TYPE_NONE = 7, + ENC_TYPE_AUTO = 8 +}; + +enum wl_host_attention_mode { + WL_HOST_ATTENTION_SDIO = 0x1, /*!< For SDIO or polled SPI */ + WL_HOST_ATTENTION_SPI = 0x5a /*!< For SPI with interrupt line */ +}; + +/*! \ingroup wl_wifi + * Event descriptor +*/ +struct wl_event_t { + enum wl_event_id_t id; /**< Event identifier. */ + +}; + +/*! \ingroup wl_wifi + * Infrastructure (ESS) or Ad-hoc (IBSS) connection modes. + */ +enum wl_conn_type_t { + WL_CONN_TYPE_INFRA, /*!< For infrastructure mode (default) */ + WL_CONN_TYPE_ADHOC /*!< For ad-hoc mode */ +}; + +/* Note: + * If your environment does not have stdint.h you will have to + * define the fixed-width integer types specified in that file + * yourself, make sure that those definitions are included + * before any inclusions of wl_api.h, and build with the macro + * WITHOUT_STDINT defined. In this case the wl_api library + * must have been built with the same integer type definitions. + */ + +#ifndef WITHOUT_STDINT +#include +#endif + +/* Note: + * If your environment does not have stdio.h you will have to define + * the size_t type yourself, make sure that that definition is + * included before any inclusions of wl_api.h, and build with the + * macro WITHOUT_STDIO defined. In this case the wl_api library must + * have been built with the same size_t type definition. + */ +#ifndef WITHOUT_STDIO +#include +#endif + +/*! \ingroup wl_wifi + * + * \brief SSID representation. + * + * The SSID is a binary string and cannot be treated as a + * C-string safely. An empty SSID is represented by a + * SSID struct with the len field set to 0. + */ +struct wl_ssid_t +{ + char ssid[WL_SSID_MAX_LENGTH]; /**< Octet array containing the SSID data. */ + uint8_t len; /**< Length of valid data in ssid member. + * Cannot be longer than WL_SSID_MAX_LENGTH. */ +}; + +/*! \ingroup wl_wifi + * + * MAC-address/BSSID representation + * + * A broadcast BSSID is one with all octets set to 0xFF. + */ +struct wl_mac_addr_t +{ + uint8_t octet[WL_MAC_ADDR_LENGTH]; /**< Octet array containing the MAC address + * data. This array is always WL_MAC_ADDR_LENGTH bytes. + */ +}; + +/*! \ingroup wl_wifi + * + * Network representation + * + */ +struct wl_network_t +{ + struct wl_ssid_t ssid; /**< The SSID of the network. */ + struct wl_mac_addr_t bssid; /**< The BSSID of the network. */ + uint8_t channel; /**< The wlan channel which the network uses */ + uint32_t beacon_period; /**< Beacon period for the network */ + uint16_t dtim_period; /**< DTIM period for the network */ + int32_t rssi; /**< Received Signal Strength in dBm (measured on beacons) */ + int32_t snr; /**< Received Signal to noise ratio in dBm (measured on beacons) */ + uint8_t enc_type; /**< The encryption type used in the network. */ + + enum wl_conn_type_t net_type; /**< Type of network (Infrastructure or Ad-Hoc */ + size_t ie_len; /**< Always 0 unless wl_api has been built with WL_CONFIG_WPA_SUPPLICANT */ + + uint8_t ie[0]; /**< Not used unless wl_api has been built with WL_CONFIG_WPA_SUPPLICANT */ +}; + +/*! \ingroup wl_wifi + * Network list representation. Array of pointers to wl_network_t entries. + * + */ +struct wl_network_list_t +{ + struct wl_network_t **net; /**< The list of pointers to networks */ + size_t cnt; /**< Number of networks */ +}; + +#define WL_RATE_1MBIT 2 +#define WL_RATE_2MBIT 4 +#define WL_RATE_5_5MBIT 11 +#define WL_RATE_6MBIT 12 +#define WL_RATE_9MBIT 18 +#define WL_RATE_11MBIT 22 +#define WL_RATE_12MBIT 24 +#define WL_RATE_18MBIT 36 +#define WL_RATE_22MBIT 44 +#define WL_RATE_24MBIT 48 +#define WL_RATE_33MBIT 66 +#define WL_RATE_36MBIT 72 +#define WL_RATE_48MBIT 96 +#define WL_RATE_54MBIT 108 +#define WL_RATE_NUM_RATES 14 +#define WL_RATE_INVALID WL_RATE_NUM_RATES + +/*! \ingroup wl_wifi + * + * Rate representation + * + */ +typedef uint8_t wl_rate_t; + +/** \defgroup wl_api Library support functions + * + * These functions manage the library in general. They concern initalizing + * the library, downloading firmware to the WiFi chip and handling events + * from the library. + +For this example we assume that the application is running stand-alone +without an operating system. + +Before the library can do anything it needs to start up the WiFi +hardware by downloading a firmware image. The firmware image is +relatively big (around 144kB) and is therefore not included in the library +it is only needed once. It is up to the application to decide where to +store the firmware image and how to read it into the wl_api library. + +Step one is to write a function of the type \a ::wl_fw_read_cb_t +that wl_api will call to retrive the firmware image. Assuming that you +have some spare RAM (or whatever memory type is used for read only +data, such as FLASH memory) on your platform you can simply include +the firmware image from the \a wl_fw.h header file and write a +firmware read function like this + +\code +static size_t fw_read_cb(void* ctx, + uint8_t** buf, + size_t offset, + size_t len) +{ + if ( NULL == buf ) { + return 0; + } + *buf = ((uint8_t*) fw_buf) + offset; + if ( len > ( fw_len - offset ) ) { + return fw_len - offset; + } + return len; +} + +\endcode + +If the firmware image is stored in ROM this function may have to read +it back block by block instead. + +First, firmware must be downloaded to the device + +\code +if ( wl_transport_init(fw_read_cb, NULL, &mode) != WL_SUCCESS ) { + app_error("Firmware download failed"); + return 0; +} +\endcode + +The wl_api library is then initialized like this + +\code +if ( wl_init(NULL, init_complete_cb, mode) != WL_SUCCESS ) { + app_error("Init failed"); + return 0; +} +\endcode + +The library startup process will now require \a wl_poll() to be called +a number of times before it can complete. In addition, if the +application needs to know when the startup process has completed so +that it can, for example, start up an IP stack it will have to supply +a valid callback function of the type \a ::wl_init_complete_cb_t as a parameter +to the \a wl_init() call and start polling the wl_api library. + +The init complete callback will only be executed during a call to \a wl_poll() +or another wl_api function. This simplifies the implementation since no +internal locking is required and the wl_api library becomes OS-independent. + +\code +static void init_complete_cb(void* ctx) { + init_ip_stack(); +} +\endcode + +Registering the event callback is straightforward : + +\code +if (wl_register_event_cb(event_cb, NULL) != WL_SUCCESS) { + app_error("Failed to register event handler"); + return 0; +} +\endcode + +Similar to \a wl_poll(), there is also a \a wl_tick() function that takes a +free running "tick" counter with millisecond resolution as an argument so +that it can trigger internal timers when necessary. Assuming that such a tick +counter is provided by the macro GET_MS_TICK() the wl_api execution loop becomes + +\code +while (TRUE) { + wl_tick(GET_MS_TICK()); + wl_poll(); +} +\endcode + +In a stand-alone application this loop would usually be the main application +loop and include application specific calls as well. + +After some number of main loop iterations the init_complete_cb will be +invoked and the application can initialize its IP stack. + + * @{ + */ + +/*! \brief WiFi event callback. + * + * This function receives WiFi events that the application + * wants notification of. This function is supplied by the user + * of the API. + * + * @param event Struct describing the type of event and, for some + * events, additional information regarding the + * status of the event. See wl_event_t for additional + * information. + * @param ctx A context handle. This handle is passed + * untouched to the callback and has the same value + * as the context registered with the callback in + * wl_register_event_cb(). + */ +typedef void (*wl_event_cb_t) (struct wl_event_t event, void* ctx); + + +/*! \brief Initialization complete callback function. + * + * Invoked when WiFi initialization is complete. + * + * @param ctx Opaque context pointer as provided to \a wl_init() that will be + * passed back to the callback. + */ +typedef void (wl_init_complete_cb_t)(void* ctx); + + +/*! \brief Register an event handler. + * + * Register an event handler with the driver. This + * event handler will be called whenever a event + * listed in #wl_event_id_t occurs. + * See #wl_event_cb_t and #wl_event_id_t for more details. + * + * @param cb Event callback function to register. + * @param ctx Opaque context pointer that will be + * passed to the callback when it is + * invoked. This parameter is never + * accessed by the API. + * @return WL_SUCCESS + */ +wl_err_t wl_register_event_cb(wl_event_cb_t cb, void* ctx); + +/*! \brief Initialize the wl_api library. + * + * Note that \a wl_poll() must be called for this function to progress + * towards complete init + * + * The startup process will proceed asynchronously and will inkove + * init_complete_cb when completed. The callback will not be invoked if any + * error occurs during initialization. + * + * This function should be called after firmware has been downloaded to the + * device. + * + * @param ctx Opaque context pointer that will be passed to the callback + * when invoked. This parameter is never accessed by the API. + * @param init_complete_cb callback function to invoke when initialization is + * complete. + * @param mode Indicates the host attention mode used by the device. If + * \a wl_transport_init() was used to download the firmware image to the + * device, the proper mode can be obtained from the mode parameter of + * that function. + * + * @return + * - WL_SUCCESS + * - WL_FAILURE + */ +wl_err_t wl_init(void* ctx, wl_init_complete_cb_t init_complete_cb, + enum wl_host_attention_mode mode); + + +/*! \brief Shutdown the wl_api library and free resources. + * + * \a wl_init() must be invoked to startup the library + * again. + * + * @return + * - WL_SUCCESS on success + * - WL_FAILURE + * + */ +wl_err_t wl_shutdown(void); + + +/*! \brief WiFi driver timer tick function + * + * Periodic timers are triggered from this function so it should be called as + * often as possible if precision timing is required (traffic timeouts, + * authentication timeouts etc). + * + * @param tick A tick count in us. This is used to expire timers + * in the driver. + */ +void wl_tick(uint32_t tick); + +/*! @} */ + + +/** \defgroup wl_wifi Connection Management + * + * These functions access WiFi-specific functionality such as + * scanning, connect/disconnect, authentication and encryption, + * and power save modes. + * + +\section scanning Scanning + +To scan all channels that are available in the current regulatory +domain + +\code + if ( wl_scan() != WL_SUCCESS ) { + // May be busy scanning already, no fatal error + return 0; + } +\endcode + +Since wl_scan() only starts the scanning process the application +should add code to the event handler to catch the "scan complete" event +and retrieve the list of seen networks from the library + +\code +static void event_cb(struct wl_event_t event, void* ctx) { + switch(event.id) { + case WL_EVENT_SCAN_COMPLETE: + struct wl_network_list_t *netlist; + uint8_t netcnt; + + wl_get_network_list(&netlist); + netcnt = netlist->cnt; + while (--netcnt) { + print_network(netlist->net[netcnt]); + } + break; + } +} +\endcode + +The function print_network() could display the network name, the SSID, in +a user interface. It is important to keep in mind is that despite the fact +that the SSID is usually presented as a ASCII string, it is +in fact just a byte string and can legally contain all kinds of +non-printable characters, including a 0-byte. This means that it is +easy to end up with buffer overrun bugs if the SSID is ever treated +as a normal string without precautions. + +\code +void print_network(struct wl_network_t* wl_network) +{ + char ssid[WL_SSID_MAX_LENGTH + 1]; + memset(ssid, 0, sizeof(ssid)); + memcpy(ssid, wl_network->ssid.ssid, wl_network->ssid.len); + if (app_is_printable(ssid)) { + app_print("\"%s\" ", ssid); + } + else { + app_print(" "); + } + switch (wl_network->enc_type) { + case ENC_TYPE_WEP : + app_print("(WEP encryption)"); + break; + case ENC_TYPE_TKIP : + app_print("(TKIP encryption)"); + break; + case ENC_TYPE_CCMP : + app_print("(CCMP encryption)"); + break; + } + app_print("\n"); +} +\endcode + +\section connecting Connecting + +To connect to an access point (beware binary SSIDs) the connection process +must be started + +\code + if ( wl_connect("My AP", strlen("My AP")) + != WL_SUCCESS ) { + app_error("Connection failed.\n"); + return 0; + } +\endcode + +and the \a WL_EVENT_MEDIA_CONNECTED and \a WL_EVENT_CONN_FAILURE events should be +caught. To detect that a connection is terminated after it has been successfully established +(such as when the AP goes out of range) the \a WL_EVENT_MEDIA_DISCONNECTED event +must be also be caught + + +\code +static void event_cb(struct wl_event_t event, void* ctx) { + switch(event.id) { + case WL_EVENT_SCAN_COMPLETE: + struct wl_network_list_t *netlist; + uint8_t netcnt; + + wl_get_network_list(&netlist); + netcnt = netlist->cnt; + while (--netcnt) { + print_network(netlist->net[netcnt]); + } + break; + case WL_EVENT_CONN_FAILURE: + app_error("Connection failed\n"); + break; + case WL_EVENT_MEDIA_CONNECTED: + app_print("Connected to Access Point\n"); + app_ip_interface_up(); + break; + case WL_EVENT_MEDIA_DISCONNECTED: + app_print("Disconnected from Access Point\n"); + app_ip_interface_down(); + break; + } +} +\endcode + +\section security Security + +To use WEP a WEP key must be added before the connection is initiated. +To set the 40-bit WEP key 0xDEADBEEF00 as default key for key index 0 do + +\code + char key[5] = { 0xDE, 0xAD, 0xBE, 0xEF, 0x00 }; + struct wl_mac_addr_t bssid; + + // This means that the bssid is a broadcast bssid and the WEP key will be a default key instead of a key-mapping key. + memset(&bssid.octet, 0xff, sizeof bssid.octet); + + if ( wl_add_wep_key(0, sizeof key, key, &bssid) + != WL_SUCCESS ) { + app_error("Failed to add WEP key."); + return 0; + } +\endcode + +To use WPA/WPA2 with a Pre-shared key a passphrase must be associated +with the network before the connection is initiated. + +\code + struct wl_network_t net; + char passphrase[] = "MySecretKey"; + + memset(&net, 0, sizeof net); + memset(net.bssid.octet, 0xFF, sizeof net.bssid.octet); + strncpy(net.ssid.ssid, "My AP", strlen("My AP")); + net.ssid.len = strlen("My AP"); + net.enc_type = ENC_TYPE_AUTO; + if (wl_set_passphrase(&net, + passphrase, + strlen(passphrase), + ENC_TYPE_AUTO, + AUTH_MODE_AUTO) + != WL_SUCCESS) { + app_error("Failed to add passphrase"); + } +\endcode + +The library supports several passphrase-network associations to be +configured simultaneously. Be aware that the \a wl_connect() call +can take up to 15 seconds longer than normal when using a pre-shared +WPA/WPA2 key since the platform must calculate a temporal encryption +key from the passphrase before the connection attempt can start. + + * @{ + */ + + +/*! \brief Scan all channels. + * + * Starts a scan of all WiFi channels allowed in this regulatory + * domain. The list of allowed channels (the domain) is adapted to the + * channels announced as allowed by the first AP heard. + * + * The scan will proceed asynchronously and will raise a + * WL_EVENT_SCAN_COMPLETE event when completed. + * + * Currently, there's a limit on the scan list size that depends on the + * architecture (6 networks for the AVR32 UCR1 architecture 16 networks for + * other architectures. If more network exist, the strongest networks are + * chosen. Note that the limitation on the scan list size does not limit the + * networks which the device can connect to. See wl_connect() for more + * details. + * + * @return + * - WL_SUCCESS + * - WL_FAILURE. + */ +wl_err_t wl_scan(void); + +/*! \brief Get the list of currently known networks. + * + * Retrieves the list of currently known networks from + * the driver. To ensure that this list is up-to-date + * a wl_scan() call should be issued and this function + * should be called upon reception of the WL_EVENT_SCAN_COMPLETE + * event. This function can be called at other times + * but the list of networks retrieved then might not + * correspond to the networks actually in range. + * + * Note that a successful scan does not necessarily + * find any networks. + * + * @param network_list Output buffer. The API call returns + * a pointer to allocated memory containing the network list. + * @return + * - WL_SUCCESS + * - WL_FAILURE. + */ +wl_err_t wl_get_network_list(struct wl_network_list_t **network_list); + +#ifdef WFE_6_12 +/*! \brief Start a Ad-hoc network. + * + * Attempt to start a Ad-hoc (IBSS) network. If a Ad-hoc network + * is successfully started then a WL_EVENT_MEDIA_CONNECTED event + * will be raised once the first peer station connects to the Ad-hoc + * network (and not when the network is announced on the air). + * + * If a Ad-hoc network should be started with encryption + * enabled then \a wl_set_passphrase() should be called before + * \a wl_start_adhoc_net() to configure the security parameters. + * The Ad-hoc network is started with the security parameters + * (if any) that was configured for the specified \a ssid. + * + * @param ssid The SSID of the new network. If there's a network + * already present with this SSID this call will fail. + * @param channel The channel to use. Valid channels are 1-14 + * @param auth_mode The authentication mode to use. Supported + * authentication modes for Ad-hoc networks are + * AUTH_MODE_OPEN_SYSTEM and AUTH_MODE_SHARED_KEY. + * Passing other modes will cause a WL_INVALID_ARGS return. + * If AUTH_MODE_SHARED_KEY is used then a valid WEP + * key must be set with a call to \a wl_add_wep_key() + * and the default WEP key index must be set with a + * call to \a wl_set_default_wep_key(). + * @return + * - WL_SUCCESS on success. + * - WL_INVALID_ARGS if the ssid is malformed, if + * the channel not valid or if the authentication mode + * is invalid. + * - WL_RETRY if the driver is busy resolving a conflicting + * operation. The operation should be retried after a wait + * (at least one call to wl_poll() for polled implementations). + * - WL_BUSY if the driver is already connected or if a network + * with the same SSID is already known. + * + */ +wl_err_t wl_start_adhoc_net(struct wl_ssid_t ssid, + uint8_t channel, + enum wl_auth_mode auth_mode); +#endif +/*! \brief Connect to a SSID. + * + * Attempt to connect to a given SSID. If the driver is already + * connected to an AP with a different SSID then this call will + * return WL_BUSY and wl_disconnect() should be called before + * trying again. + * + * The connection process will proceed asynchronously and will raise a + * WL_EVENT_MEDIA_CONNECTED event when completed, or a WL_EVENT_CONN_FAILURE + * when failed. After a WL_EVENT_MEDIA_CONNECTED event has been raised + * a WL_EVENT_MEDIA_DISCONNECT event will be raised if the connection is + * terminated. Note that this can be caused by external factors and can + * happen at any time. + * + * If wl_connect() is invoked with a network that is not shown in the + * scan list, the device will probe for that specific network and connect + * to it, if found. This is also the method to use in order to connect to + * "hidden" networks (AP's that doesn't broadcast its SSID). + * + * @param ssid Pointer to the SSID string. + * Freed by caller. + * @param ssid_len Length of the SSID string in octets. Max value is 32. + * @return + * - WL_SUCCESS + * - WL_FAILURE if the network could not be found + * - WL_BUSY if the driver is already connected + * - WL_RETRY if the driver is busy resolving a conflicting operation. + * The operation should be retried after a wait (at least one call to wl_poll() + * for polled implementations). + */ +wl_err_t wl_connect(char* ssid, size_t ssid_len); + +/*! \brief Connect to a BSSID + * + * Attempt to connect to a given BSSID. If the driver is already + * connected to an AP with a different BSSID then this call will + * return WL_BUSY and wl_disconnect() should be called before + * trying again. + * + * The connection process will proceed asynchronously and will raise a + * WL_EVENT_MEDIA_CONNECTED event when completed, or a WL_EVENT_CONN_FAILURE + * when failed. After a WL_EVENT_MEDIA_CONNECTED event has been raised + * a WL_EVENT_MEDIA_DISCONNECT event will be raised if the connection is + * terminated. Note that this can be caused by external factors and can + * happen at any time. + * + * If wl_connect_bssid() is invoked with a network that is not shown in the + * scan list, the device will probe for that specific network and connect + * to it, if found. + * + * @param bssid Pointer to the BSSID. Freed by caller. + * @return + * - WL_SUCCESS + * - WL_FAILURE if the network could not be found + * - WL_BUSY if the driver is already connected + * - WL_RETRY if the driver is busy resolving a conflicting operation. + * The operation should be retried after a wait (at least one call to wl_poll() + * for polled implementations). + */ +wl_err_t wl_connect_bssid(struct wl_mac_addr_t bssid); + +/*! \brief Disconnect from the network + * + * Disconnect from any currently associated network. + * + * The disconnection process will proceed asynchronously and will raise a + * WL_EVENT_MEDIA_DISCONNECTED event when completed. + * @return + * - WL_SUCCESS if the disconnect process was started + * - WL_FAILURE if the driver was not connected + * - WL_RETRY if the driver is in the process of connecting. + * In this case the disconnect must be retried after + * the connection attempt has completed (resulted in a + * WL_EVENT_MEDIA_CONNECTED or a WL_EVENT_CONN_FAILURE event). + */ +wl_err_t wl_disconnect(void); + +/*! + * @brief Add a WEP encryption key to the device. + * + * Configure a key into the device. The key type (WEP-40, WEP-104) + * is determined by the size of the key (5 bytes for WEP-40, 13 bytes for WEP-104). + * + * @param key_idx The key index to set. Valid values are 0-3. + * @param key_len Length of key in bytes. Valid values are 5 and 13. + * @param key Key input buffer. + * @param bssid BSSID that the key applies to. If this is + * the broadcast BSSID then the key is configured + * as one of the default keys (not _the_ default key, + * this must be set by calling set_default_wep_key() + * after adding it). If the BSSID is a valid unicast + * bssid then the key is configured as a key-mapping + * key ( See 802.11-2007 8.2.1.3 ). + * @return + * - WL_SUCCESS on success. + * - WL_INVALID_LENGTH if the key length is bad. + * - WL_FAILURE on failure + */ +wl_err_t wl_add_wep_key(uint8_t key_idx, + size_t key_len, + const void *key, + struct wl_mac_addr_t *bssid); + +/*! @brief Set the default WEP key index. + * + * Select which WEP key to use for transmitted packets. + * For this to work correctly you must have added a WEP + * key with \a wl_add_wep_key() as a default key, using the + * same index as the one set in this call. + * @param key_idx Index of the key to make the default key. + * Valid values are 0-3. + * @return WL_SUCCESS or WL_FAILURE. + */ +wl_err_t wl_set_default_wep_key(uint8_t key_idx); + +/*! \brief Delete a WEP key. + * + * Deletes a WEP key from the driver. + * + * @param key_idx The index of the key to delete. Valid values are 0-3. + * @param bssid BSSID that the key applies to. If this is + * the broadcast BSSID then the key deleted is a default key. + * If the BSSID is a valid unicast bssid then the deleted + * key is a key-mapping key. + * @return WL_SUCCESS or WL_FAILURE + */ +wl_err_t wl_delete_wep_key(uint8_t key_idx, struct wl_mac_addr_t *bssid); + +/*! @brief Set a WPA/WPA2 passphase + * + * Associate a WPA/WPA2/RSN passphrase with a network. + * The number of passphrases that can be stored can + * vary but is always at least one. Passphrases can + * be added until \a wl_add_wpa_passphrase() returns + * WL_RESOURCES. + * + * @param net Network with which to associate the passphrase. + * @param passphrase Passphrase. Valid characters in a passphrase + * must lie between ASCII 32-126 (decimal). + * @param len Length of passphrase. Valid lengths are 8-63. + * @param enc_type Encryption type. If this is set to ENC_TYPE_AUTO + * then the most secure supported mode will be automatically + * selected. Normally you only need to pass something else here + * if you need to enforce picking a certain encryption mode when + * the network supports several modes and you don't want to use + * the best one. + * @param auth_mode Authentication mode. If this is set to AUTH_MODE_AUTO + * then the most secure mode will be automatically selected. + * Normally you only need to pass something else here if the network + * announces support for both WPA and WPA2/RSN and the passphrases are + * different. + * @return + * - WL_SUCCESS + * - WL_INVALID_ARGS if the passphrase length is invalid. + * - WL_RESOURCES if no more passphrases can be added. + */ +wl_err_t wl_set_passphrase(const struct wl_network_t *net, + const char *passphrase, + const size_t len, + const enum wl_enc_type enc_type, + const enum wl_auth_mode auth_mode); + +/*! @brief Remove a WPA/WPA2 passphase + * + * Remove a WPA/WPA2/RSN passphrase associated with a network. + * + * @param net Network with which to associate the passphrase. + * If net is NULL then all stored passphrases will be + * cleared. + * @return + * - WL_SUCCESS + * - WL_FAILURE if no passphrase was associated with the net. + */ +wl_err_t wl_clear_passphrase(struct wl_network_t *net); + + +/*! \brief Enable legacy power save mode + * + * Enable legacy power save mode. In legacy power save mode, the device + * will power down when idle. When connected, the device will wake up to + * receive beacon frames and any buffered data from the AP. The response + * time when legacy power save is enabled might therefore be as long as the + * AP beacon interval (mostly 100 ms). However, the throughput should not + * be affected. + * + * @return WL_SUCCESS or WL_FAILURE. + */ +wl_err_t wl_enable_ps(void); + +/*! \brief Disable legacy power save mode + * + * @return WL_SUCCESS or WL_FAILURE. + */ +wl_err_t wl_disable_ps(void); + +/*! \brief Configure power save parameters. + * + * @param use_ps_poll Use PS-Poll frames to retrieve buffered data. Any changes + * to this parameter will take effect upon next connect + * or when power save is enabled through wl_enable_ps(). + * Note: To retrieve one buffered packet, the ps poll scheme + * needs one ps poll packet to the AP instead of two null + * packets in the power management bit scheme. Ps poll avoids + * the overhead of traffic monitoring time in active mode as + * well. But since each ps poll request can make the AP + * release only one buffered packet, it is not the optimal + * scheme for applications with heavy downlink traffic. + * @param ps_traffic_timeout Timeout in [ms] to wait for more buffered data + * from AP. This setting has no effect if + * use_ps_poll is 1. Any changes to this parameter + * will take effect immediately. + * @param ps_delay Power save will de delayed ps_delay [ms] after connecting to + * an AP. + * @param rx_all_dtim If set to 1, then STA will wake up to listen to every + * beacon containing DTIM (delivery traffic indication messages) when + * connected. The actual DTIM interval is configured in the AP. + * If the DTIM interval, as configured in the AP, is larger than + * \a listen_interval, the STA will wakeup according to the + * \a listen_interval parameter. + * @param listen_interval The Listen Interval field is used to indicate to the + * AP how often a STA in power save mode wakes to listen + * to beacon frames. The value of this parameter is expressed in units + * of Beacon Interval. An AP may use the Listen Interval information in + * determining the lifetime of frames that it buffers for a STA. + * Any changes to this parameter will take effect upon next association. + * + * @return WL_SUCCESS or WL_FAILURE. + */ +wl_err_t wl_conf_ps(uint8_t use_ps_poll, + uint32_t ps_traffic_timeout, + uint32_t ps_delay, + uint8_t rx_all_dtim, + uint16_t listen_interval); + +/*! \brief Get the interface MAC address. + * + * Return the 802.3 MAC address of the network interface. + * + * @param buf Output buffer. It must be at least WL_MAC_ADDR_LENGTH + * bytes long and only the first WL_MAC_ADDR_LENGTH bytes + * will contain valid data. + * @return + * - WL_FAILURE if the interface is not up. + * - WL_SUCCESS + */ +wl_err_t wl_get_mac_addr(uint8_t* buf); + +/*! \brief Return the associated network. + * + * Return the description of the currently associated + * network, if any. + * + * @return The network description, or NULL of the driver + * is unconnected. + */ +struct wl_network_t* wl_get_current_network(void); +/*! @} */ + +/** \defgroup wl_data Data Transfer + * + * \brief Packet processing interface. + * + * Note that the examples in this group assumes that the transport library + * functions in the \a wl_transport group are being used. For more information, + * See the documentation for those functions in the \a wl_transport group. + +For the IP stack integration you need to intercept received packets so +they can be sent up the stack and to transmit packets coming down the +stack. + +By default the wl_api library discards all data packets. To receive +them the application must register a rx interrupt service routine (isr) +using the \a wl_register_rx_isr() function. + +\code +static void rx_isr(void* ctx) { + rx_pending = TRUE; +} +\endcode + +Since the rx_isr() function is only called in interrupt context, it is not +safe to perform the actual read directly from rx_isr(). If an OS is used, +the normal case is to signal a receiver thread to invoke the ip stack +read function to read the pending data. In a system that runs without an OS +(as in the example), a flag is set to indicate that wl_rx() can be invoked +from the ip stack read function next time the ip stack is polled. +The beginning of a ip stack read function can look like this + +\code +static void ip_stack_rx_pkt() { + char *pkt = malloc(MAX_PKT_SIZE); + uint16_t len = MAX_PKT_SIZE; + + if (p == NULL) { + app_error("Out of memory."); + return; + } + wl_rx(pkt, &len); + if (0 == len) { + app_error("Packet reception failed."); + free(pkt); + return + } +} +\endcode + +Since the ip_stack_rx_pkt() function should only be called when there is +actually a packet ready to read you do not have to check the return value +from \a wl_rx() since it only returns failure if there is no packet ready to +read. + +A packet arriving from the WiFi interface can be either a data +packet or a message from the WiFi hardware to the WiFi driver +(which is implemented by the wl_api library). This means that +wl_api must process every packet to decide if it is an internal +message or a data frame that +should be passed up to the application. Data packets are +prefixed with an extra header containing some administrative +information, and may be followed by padding bytes and so +wl_api also needs to strip the extra header and any padding +before the packet can be safely ingested by the IP stack. +All this happens in the function \a wl_process_rx() which \b must +be called on every packet received by a call to \a wl_rx(). + +Continuing the ip_stack_rx_pkt() example + +\code + { + char* stripped_pkt; + size_t stripped_pkt_len; + uint16_t vlan; + int status; + + status = wl_process_rx(pkt, + len, + &stripped_pkt, + &stripped_pkt_len, + &vlan); + if (WL_ABSORBED == status) { + // This is normal. The packet was a + // wl_api-internal message. + free(pkt); + return; + } + app_ip_stack_input(stripped_pkt, + stripped_pkt_len, + vlan); + free(pkt); + } +} +\endcode + +If \a wl_process_rx() decides that the packet was a command it processes +it and returns \a WL_ABSORBED to signal that the packet should +not be used by anyone else. Otherwise stripped_pkt is +pointing to the beginning of a 802.3 Ethernet frame of length +stripped_pkt_len. If the IP stack supports VLAN and QoS +the extra VLAN tag should be passed to the IP stack +together with the packet. For IP stacks without this support the VLAN tag +contents can safely be ignored, but it must still be filled in by \a wl_process_tx(). + +To register the receive isr + +\code + wl_register_rx_isr(rx_isr, NULL); +\endcode + +Transmitting data packets happens in a similar way but does not +require a callback/isr since the application/IP stack knows when it has +packets to send. + +\code +int ip_stack_tx_pkt(char *pkt, size_t len, uint16_t vlan_tag) { + int status; + char wlan_hdr[WL_HEADER_SIZE]; + // The packet must have an Ethernet header + if (len < ETHERNET_HEADER_SIZE) { + app_error("Invalid packet length"); + return 0; + } + hdr_len = sizeof wlan_hdr; + status = wl_process_tx(pkt, + ETHERNET_HEADER_SIZE, + len, + wlan_hdr, + vlan_tag, + NULL); + if ( WL_SUCCESS != status ) { + app_error("Packet processing failed"); + return 0; + } + // Transmit the header first + if (wl_tx(wlan_hdr, hdr_len) != WL_SUCCESS) { + app_error("Header transmission failed"); + return 0; + } + // Then transmit the data packet + if (wl_tx(pkt, len) != WL_SUCCESS) { + app_error("Packet transmission failed"); + return 0; + } +} +\endcode + +The final piece of the puzzle in the IP stack integration is +the MAC address of the WiFi interface + +\code + char mac_addr[WL_MAC_ADDR_LENGTH]; + + wl_get_mac_addr(mac_addr); + ip_stack_set_mac_address(mac_addr); +\endcode + + * @{ + */ + +/*! Size of the wl_api packet header */ +#ifdef WFE_6_12 +#define WL_HEADER_SIZE 16 +#else +#define WL_HEADER_SIZE 14 +#endif + +/*! Maximum packet size (including wl_api headers and paddings) + * + * Maximum packet size is obtained with the following data: + * + * 1500 bytes of Ethernet payload (MTU) + 14 bytes of Ethernet header + + * WL_HEADER_SIZE of wl header. This data is then size-aligned to 16. + * + */ +#define WL_MAX_PKT_LEN 1536 + + +/*! + * \brief Process rx packet. + * + * Processes a raw rx packet by unencrypting it (if necessary) + * and stripping headers so as to output a 802.3 frame. + * + * wl_process_rx() will strip bytes both from the head and from the tail. + * + * Upon return from wl_process_rx(), the pointer at stripped_pkt will + * point to the start of the Ethernet header, hence adjusting the offset + * by WL_HEADER_LEN bytes. Any padding (added by the wifi device) will + * be removed from the tail of the packet, hence making len smaller. + * + * The wl_api library of the device will not perform any Ethernet padding + * removal. The padding removal performed by wl_process_rx() is only for + * the padding used in the protocol shared by the host and the device. + * This padding is mainly there to ensure that the host does not have to + * deal with rx of odd-sized data buffers (which some DMA's have problems + * to handle). + * + * @param pkt Input buffer (raw packet) + * @param pkt_len Length of the input buffer (in bytes) + * @param stripped_pkt Pointer to the packet with the + * transport header stripped. + * @param stripped_pkt_len Length of the stripped packet. + * @param vlanid_prio VLAN ID and 802.1p priority value + * using following format: + *
+ *        1
+ *  5|432109876543|210
+ *  -+------------+---
+ *  0|   VLANID   |PRI
+ * 
+ * + * @returns + * - WL_FAILURE + * - WL_ABSORBED if the packet was an internal driver command + * and not a proper data packet. The packet should + * be freed and the stripped_pkt will not point + * to a valid packet. + * - WL_SUCCESS + */ +wl_err_t wl_process_rx(char *pkt, size_t pkt_len, char **stripped_pkt, + size_t *stripped_pkt_len, uint16_t *vlanid_prio); + +/*! \brief Process tx packet. + * + * Prepare tx packet for transmission. + * + * This function is typically used only by the TCP/IP stack driver. + * + * Takes a Ethernet II frame header and generates a message passing header + * for it. + * + * The caller should ensure that any frames injected into wl_process_tx() + * are proper Ethernet frames. The wl_api library or the device will not + * perform any Ethernet padding if the frames are too short. + * + * The Ethernet header is assumed to have the following layout : + * ... + * The rest of the Ethernet header buffer (if any) is ignored. + * + * A note on the TX packet representation : + * If your TX packets are simple contiguous buffers you can ignore + * the rest of this note and pass NULL in parameter \a pkt_handle. + * A TX packet may have a more complex structure than a RX packet + * (which must be a contiguous, flat buffer). The IP stack may + * for example represent a packet as a linked list of buffers where + * the Ethernet header, the IP header and other headers, are represented + * by separate buffers. In some cases, such as when the driver is + * running in SoftAP mode, a TX packet has to be copied and queued + * internally for later processing and to support this when packets + * have a complicated structure a special data access function can + * be registered. See \a wl_register_pkt_read_cb() for details. + * If you use \a wl_process_tx() with non-simple packets you + * should pass a handle to the packet in parameter \a pkt_handle + * and register an access function with \a wl_register_pkt_read_cb(). + * + * @param eth_hdr Input buffer (Ethernet header) + * @param eth_hdr_len Input buffer length (must be >= 14) + * This is usually the same as pkt_len unless e.g linked list or buffers + * chained in other ways are being used. + * @param pkt_len Length of the complete data packet (in bytes) + * @param hdr Pointer to the header buffer (must be + * allocated by the caller). The length of the buffer + * must be at least WL_HEADER_SIZE bytes. + * @param vlanid_prio VLAN ID and 802.1p priority value + * using following format: + *
+ *        1
+ *  5|432109876543|210
+ *  -+------------+---
+ *  0|   VLANID   |PRI
+ * 
+ * Ignored for legacy association (no WMM) + * @param pkt_handle A handle to the complete packet. If this parameter + * is NULL then \a eth_hdr is expected to point to the whole packet + * in a single contiguous buffer (the default). If a different packet + * representation is used this parameter should be a handle to the + * complete packet and will be passed unmodified to the data + * access function that was registered with \a wl_register_pkt_read_cb(). + * + * @returns + * - WL_FAILURE + * - WL_RESOURCES if packet can not be processed at the moment. + * The caller must either drop the packet or try + * retransmit it later. + * - WL_AVAIL if network not available + * - WL_SUCCESS if packet is ready for transmission through wl_tx(). + */ +wl_err_t wl_process_tx(char *eth_hdr, + size_t eth_hdr_len, + size_t pkt_len, + char *hdr, + uint16_t vlanid_prio, + void *pkt_handle); + + +/*! \brief Get current TX and RX rate used for data transfer + * + * During transmission and reception of data, the actual rate used will depend + * on the signal quality. This function can be used to get the actual rate used + * for the last tx and rx data. + * + * @param tx will hold the tx rate upon successful return. + * @param rx will hold the rx rate upon successful return. + * + * @return + * - WL_SUCCESS on success + * - WL_FAILURE on failure. + */ +wl_err_t wl_get_rate(wl_rate_t *tx, wl_rate_t *rx); + + +/*! @} */ /* End wl_data group */ + + +/** \defgroup wl_transport Transport interface + * + * \brief Low level transport interface. + * + * These functions access the low level transport driver which makes + * the application independent of the actual physical transport + * layer (usually SDIO or SPI). + * + +For applications running on an real time kernel or without an +operating system, the provided transport library will fit right into the +application design. However, when running on a more complex operating system +(such as windows or linux) which has its own transport primitivies and +components (and probably its own IP stack) it might be preferred to design a +custom transport library for that specific environment. Therefore, these +transport interface functions are fully optional. + + + * @{ + */ + +#define WL_RX_MIN_PKT_LEN 32 + + +/*! \brief WiFi event callback. + * + * This function is invoked in interrupt context when there is new data + * available from the mac. This function is supplied by the user + * of the API. + * + * This function is typically used only by the TCP/IP stack driver. + * + * @param ctx A context handle. This handle is passed + * untouched to the callback and has the same value + * as the context registered with the callback in + * wl_register_event_cb(). + */ +typedef void (*wl_rx_isr_t) (void* ctx); + + +/*! \brief Firmware access function. + * + * Reads the WiFi firmware image. This function is supplied by + * the user of this API since storage for the firmware image is + * managed by the application. + * + * This function should read the specified number of bytes of the + * firmware image starting at the specified \a offset. The number of + * bytes to read is given in \a len. Upon return, \a buf should point + * to a buffer which holds the read data and the number of valid bytes + * in \a buf is returned from the call. + * + * This function will be called repeatedly until the complete firmware + * image has been read. + * + * This function may be called again at any time while the driver is + * running to download further pieces of the WiFi firmware image as + * needed by the runtime requirements. This will normally only happen + * when the driver switches between networks of different kinds such + * as from WEP to WPA, or from ESS to IBSS for example. + * + * For convenience, any time a firmware chunk has been completely + * downloaded this function will be called once with the \a buf + * parameter set to NULL to indicate that no more data is needed right + * now and that any dynamically allocated buffers which holds firmware + * data can be freed without much performance impact. + * + * @param ctx Opaque context pointer as provided to \a wl_init() that will be + * passed back to the callback. + * @param buf Should be assigned the address of the buffer holding the read + * data upon return. This parameter can be NULL which indicates + * that there are no further immediately pending accesses. + * @param offset Offset in bytes from the start of the firmware image. + * Data should be copied into buf starting at \a offset. + * @param len The number of bytes to copy into \a buf. + * @return The number of bytes copied into buf. This may be smaller than + * \len if the implementation of the function so requires. + */ +typedef size_t (wl_fw_read_cb_t)(void *ctx, + const uint8_t **buf, + size_t offset, + size_t len); + + +/*! \brief Initialize the transport interface and download the WiFi firmware + * image to the device. + * + * This operation will proceed synchronously until the firmware is completely + * downloaded. wl_init() should be called after this function has returned to + * perform device initialization. + * + * @param fw_read_cb callback function to invoke during firmware download. + * @param ctx Opaque context pointer that will be passed to the callbacks + * when they are invoked. This parameter is never + * accessed by the API. + * @param mode will hold the host attention mode used by the transport layer. + * This parameter can be passed directly to \a wl_init(). + * + * @return + * + * - WL_CARD_FAILURE if the wl hardware device is not available + * - WL_FIRMWARE_INVALID if the firmware obtained through fw_read_cb is + * invalid. + * - WL_OOM if the necessary memory could not be allocated. + */ +wl_err_t wl_transport_init(wl_fw_read_cb_t *fw_read_cb, + void *ctx, + enum wl_host_attention_mode *mode); + +/*! \brief WiFi driver forward progress function + * + * This function must be called in polled environments to + * ensure forward progress. The call can be made as often as possible from + * the main application loop. However, the call will not have any effect unless + * there is an interrupt pending from the hardware. + * + * In interrupt mode, wl_poll() must be called if no interrupt + * handler is registered through wl_register_rx_isr(). When an interrupt + * handler is registered, it is no longer necessary to invoke wl_poll(). + * + * Note that this function should not be invoked from interrupt context. + * + */ +void wl_poll(void); + + +/*! \brief Register RX callback + * + * Register function to be called by the low level transport driver + * when a new packet is available or when there is a state change in the + * data path. When invoked, any pending data can be fetched by calling wl_rx(). + * + * This function is typically used only by the TCP/IP stack driver. + * Note, the registered function is called in interrupt context. + * + * @param isr rx interrup handler. + * @param ctx Opaque context pointer that is passed unmodified to the + * rx_cb callback when it is invoked. + * + * @return WL_SUCCESS + */ +wl_err_t wl_register_rx_isr(wl_rx_isr_t isr, void* ctx); + + +/*! \brief Read pending packet + * + * Read a pending packet from the low level transport driver. + * The read packet must be passed to the wl_process_rx() function + * for proper driver operation. + * + * @param buf Buffer to read the packet into. This buffer must be + * at least WL_MAX_PKT_LEN bytes long. + * @param len Length of buf in bytes. Contains the length of the + * read packet in bytes on output. + * @return + * - WL_FAILURE if no RX packet is pending. + * - WL_SUCCESS + */ +wl_err_t wl_rx(uint8_t* buf, uint16_t* len); + +/*! \brief Send processed tx packet + * + * Send a packet to the low level transport driver. + * This packet has to have been successfully processed by the + * wl_process_tx() function. + * + * @param buf Buffer to send. + * @param len Length of buf in bytes. + * + * @return + * - WL_FAILURE if the interface is not ready to send. + * - WL_SUCCESS if the packet was successfully transmitted. + */ +wl_err_t wl_tx(const uint8_t* buf, uint16_t len); + + +/*! \brief Configure data alignment + * + * This function can be used if the host SDIO/SPI controller has certain + * requirements on the data transfer sizes that can be used on the SDIO/SPI bus. + * + * If the txsize parameter is non-zero, additional padding data should be added + * when performing the low level transfer of data buffer of sizes that are not + * a multiple of the size_align parameter. See \ref wl_sdio and \ref wl_spi for + * more information. + * + * @param txsize will configure the size alignment for tx data. + * + */ +void wl_conf_alignment(uint8_t txsize); + + +/*! @} */ /* End wl_transport group */ + + +/** \defgroup wl_custom Custom environment support + * + * \brief Support for custom environments + * + * These functions should only be used in cases where the transport library is + * not used at all. This usually applies to operating systems and environments + * where there already exists a transport layer framework, e.g. linux or + * windows. + * + * + +Note that the \a wl_poll() function is part of the transport library. Therefore, +it should not be used in custom environments. Therefore, it is necessary to +implement a custom polling or interrupt based scheme to ensure that any +incoming packets are processed by the core. + + * @{ + */ + + /*! \brief Wakeup callback function. + * + * Invoked when the WiFi device should wake up from power save mode. + * This function should send the proper commands to the device. + * + * Note that this type should only be used in custom environments, where + * the transport library is not used. + * + * @param ctx Opaque context pointer as provided to \a wl_register_wakeup_cb() + * that will be passed back to the callback. + * @param wakeup indicates whether wakeup should be set or cleared in the + * device. + */ +typedef void (wl_wakeup_cb_t)(void* ctx, uint8_t wakeup); + +/*! \brief Register wakeup callback function. + * + * Register a function that will be invoked when the WiFi device should wake + * up from power save mode. + * + * Note that this function should only be used in custom environments, where + * the transport library is not used. + * + * @param wakeup_cb Will be invoked when the device should wakeup from sleep + * mode. + * @param ctx Opaque context pointer that will be passed back to the callback. + */ +void wl_register_wakeup_cb(wl_wakeup_cb_t *wakeup_cb, void *ctx); + + +/*! \brief Management tx callback function. + * + * Invoked when the a management message should be transmitted to the + * WiFi device. This function should ensure that the message is passed through + * to the device and should never fail. + * + * Note that this type should only be used in custom environments, where + * the transport library is not used. + * + * @param ctx Opaque context pointer as provided to \a wl_register_mgmt_tx_cb() + * that will be passed back to the callback. + * @param buf Points to the buffer which holds the management data, + * @param len Size of the buffer. + */ +typedef void (wl_mgmt_tx_cb_t)(void *ctx, const uint8_t *buf, uint16_t len); + + +/*! \brief Register management tx callback function + * + * Register a function that will be invoked when a management message should + * be transmitted to the device. + * + * Note that this function should only be used in custom environments, where + * the transport library is not used. + * + * IMPORTANT : In a custom environment without a transport library \a + * wl_register_mgmt_tx_cb() \b must have been called + * before \a wl_fw_download() is called since \a + * wl_fw_download() depends on the \a mgmt_tx_cb() to send + * the firmware data to the WiFi chip. + * + * @param mgmt_tx_cb The callback function to invoke. + * @param ctx Opaque context pointer that will be passed back to the callback. + */ +void wl_register_mgmt_tx_cb(wl_mgmt_tx_cb_t *mgmt_tx_cb, void *ctx); + + + +/*! \brief Download the WiFi firmware image to the device. + * + * This operation will proceed synchronously until the firmware is completely + * downloaded. wl_init() should be called after this function has returned to + * perform device initialization. This function depends on \a + * wl_register_mgmt_tx_cb(). See that function for details. + * + * @param ctx Opaque context pointer that will be passed to the callbacks + * when they are invoked. This parameter is never + * accessed by the API. + * @param fw_read_cb callback function to invoke during firmware download. + * + * @return + * + * - WL_CARD_FAILURE if the wl hardware device is not available + * - WL_FIRMWARE_INVALID if the firmware obtained through fw_read_cb is + * invalid. + * - WL_OOM if the necessary memory could not be allocated. + */ + wl_err_t wl_fw_download(wl_fw_read_cb_t *fw_read_cb, void *ctx); + + + +/*! @} */ /* End wl_custom group */ + + + +#endif diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/wl_fw.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/wl_fw.h new file mode 100644 index 000000000..5be5f3762 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/wl_fw.h @@ -0,0 +1,19287 @@ +/* + * Programming interface for wl_api. + * Copyright (C) 2010 HD Wireless AB + * + * You should have received a copy of the license along with this library. + */ + +#ifndef WITHOUT_STDINT +#include +#endif +const uint8_t fw_buf[154188] = { + 0x10, 0x61, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x10, 0x61, 0x04, 0x00, + 0x38, 0x61, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x20, 0x61, 0x04, 0x00, + 0x30, 0x61, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x30, 0x61, 0x04, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x61, 0x04, 0x00, + 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xee, 0xee, + 0xee, 0xee, 0x18, 0xf0, 0x9f, 0xe5, 0x18, 0xf0, + 0x9f, 0xe5, 0x18, 0xf0, 0x9f, 0xe5, 0x18, 0xf0, + 0x9f, 0xe5, 0x00, 0x00, 0xa0, 0xe1, 0x18, 0xf0, + 0x9f, 0xe5, 0x18, 0xf0, 0x9f, 0xe5, 0x44, 0x00, + 0x00, 0x00, 0xb4, 0x08, 0x00, 0x00, 0xb4, 0x08, + 0x00, 0x00, 0xb4, 0x08, 0x00, 0x00, 0xb4, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe4, 0x08, + 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x00, 0x00, + 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0f, 0xe1, 0x1f, 0x00, 0xc0, 0xe3, + 0x13, 0x00, 0x80, 0xe3, 0xc0, 0x00, 0x80, 0xe3, + 0x00, 0xf0, 0x2f, 0xe1, 0x1c, 0xf0, 0x9f, 0xe5, + 0x3d, 0x02, 0x00, 0xeb, 0x5a, 0x02, 0x00, 0xeb, + 0x8d, 0x02, 0x00, 0xeb, 0x01, 0x00, 0x8f, 0xe2, + 0x10, 0xff, 0x2f, 0xe1, 0x41, 0xf0, 0xde, 0xfb, + 0x01, 0xf0, 0xdc, 0xfd, 0x3c, 0x00, 0x78, 0x00, + 0x00, 0x00, 0xfe, 0xe7, 0x00, 0x00, 0x5c, 0x00, + 0x00, 0x00, 0x78, 0x47, 0xc0, 0x46, 0x01, 0x00, + 0x00, 0xea, 0x78, 0x47, 0xc0, 0x46, 0x17, 0x00, + 0x00, 0xea, 0x8c, 0x11, 0x9f, 0xe5, 0x00, 0x20, + 0x91, 0xe5, 0x00, 0x30, 0x0f, 0xe1, 0x84, 0x11, + 0x9f, 0xe5, 0xfd, 0x20, 0xa1, 0xe8, 0x80, 0x01, + 0x9f, 0xe5, 0x80, 0x21, 0x9f, 0xe5, 0x01, 0x20, + 0x42, 0xe0, 0x0d, 0x00, 0x40, 0xe0, 0x3c, 0x00, + 0xb4, 0x00, 0x00, 0x00, 0x02, 0x00, 0x50, 0xe1, + 0x28, 0x00, 0x00, 0xaa, 0x68, 0x01, 0x9f, 0xe5, + 0x0d, 0x00, 0x50, 0xe1, 0x02, 0x00, 0x00, 0xba, + 0x04, 0x20, 0x10, 0xe4, 0x04, 0x20, 0x81, 0xe4, + 0xfa, 0xff, 0xff, 0xea, 0x58, 0x11, 0x9f, 0xe5, + 0x58, 0x01, 0x9f, 0xe5, 0x00, 0x00, 0x81, 0xe5, + 0x3c, 0x11, 0x9f, 0xe5, 0x50, 0x01, 0x9f, 0xe5, + 0x00, 0x00, 0x81, 0xe5, 0x1e, 0xff, 0x2f, 0xe1, + 0x3c, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x48, 0x11, + 0x9f, 0xe5, 0x00, 0x00, 0x91, 0xe5, 0x24, 0x11, + 0x9f, 0xe5, 0x00, 0x00, 0x81, 0xe5, 0x2c, 0x11, + 0x9f, 0xe5, 0x38, 0x01, 0x9f, 0xe5, 0x00, 0x00, + 0x81, 0xe5, 0x1e, 0xff, 0x2f, 0xe1, 0x74, 0x02, + 0x00, 0xeb, 0x10, 0x01, 0x9f, 0xe5, 0x28, 0x11, + 0x9f, 0xe5, 0x04, 0x20, 0x91, 0xe4, 0x04, 0x20, + 0x00, 0xe4, 0x04, 0x21, 0x9f, 0xe5, 0x02, 0x00, + 0x51, 0xe1, 0x3c, 0x00, 0x2c, 0x01, 0x00, 0x00, + 0xfa, 0xff, 0xff, 0x1a, 0xf0, 0x10, 0x9f, 0xe5, + 0xfd, 0x20, 0xb1, 0xe8, 0x03, 0xf0, 0x2f, 0xe1, + 0xe0, 0x10, 0x9f, 0xe5, 0x00, 0x20, 0x81, 0xe5, + 0xe8, 0x10, 0x9f, 0xe5, 0xf4, 0x20, 0x9f, 0xe5, + 0x00, 0x20, 0x81, 0xe5, 0x02, 0x10, 0x80, 0xe2, + 0x00, 0x00, 0x20, 0xe0, 0x01, 0x00, 0x40, 0xe2, + 0x11, 0xff, 0x2f, 0xe1, 0x01, 0x00, 0x8f, 0xe2, + 0x10, 0xff, 0x2f, 0xe1, 0x3c, 0x00, 0x68, 0x01, + 0x00, 0x00, 0x01, 0xf0, 0x9c, 0xf8, 0x78, 0x47, + 0x00, 0x00, 0x01, 0x00, 0x8f, 0xe2, 0x10, 0xff, + 0x2f, 0xe1, 0x01, 0xf0, 0x94, 0xf8, 0x78, 0x47, + 0x00, 0x00, 0x03, 0x00, 0x2d, 0xe9, 0x00, 0x10, + 0x0f, 0xe1, 0x00, 0x10, 0x80, 0xe5, 0xb8, 0x10, + 0x9f, 0xe5, 0x04, 0x10, 0x80, 0xe5, 0x00, 0x10, + 0xa0, 0xe1, 0x10, 0x00, 0x80, 0xe2, 0xfc, 0x1f, + 0xa0, 0xe8, 0x00, 0x20, 0xa0, 0xe1, 0x3c, 0x00, + 0xa4, 0x01, 0x00, 0x00, 0x01, 0x30, 0xa0, 0xe1, + 0x03, 0x00, 0xbd, 0xe8, 0x08, 0x00, 0x83, 0xe5, + 0x0c, 0x10, 0x83, 0xe5, 0xd3, 0x00, 0xa0, 0xe3, + 0x00, 0xf0, 0x21, 0xe1, 0x00, 0x60, 0xa2, 0xe8, + 0x00, 0x10, 0x4f, 0xe1, 0x04, 0x10, 0x82, 0xe4, + 0xd2, 0x00, 0xa0, 0xe3, 0x00, 0xf0, 0x21, 0xe1, + 0x00, 0x60, 0xa2, 0xe8, 0x00, 0x10, 0x4f, 0xe1, + 0x04, 0x10, 0x82, 0xe4, 0xd1, 0x00, 0xa0, 0xe3, + 0x3c, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x00, 0xf0, + 0x21, 0xe1, 0x00, 0x7f, 0xa2, 0xe8, 0x00, 0x10, + 0x4f, 0xe1, 0x04, 0x10, 0x82, 0xe4, 0xd7, 0x00, + 0xa0, 0xe3, 0x00, 0xf0, 0x21, 0xe1, 0x00, 0x60, + 0xa2, 0xe8, 0x00, 0x10, 0x4f, 0xe1, 0x04, 0x10, + 0x82, 0xe4, 0xdb, 0x00, 0xa0, 0xe3, 0x00, 0xf0, + 0x21, 0xe1, 0x00, 0x60, 0xa2, 0xe8, 0x00, 0x10, + 0x4f, 0xe1, 0x00, 0x10, 0x82, 0xe5, 0x00, 0x00, + 0x93, 0xe5, 0x3c, 0x00, 0x1c, 0x02, 0x00, 0x00, + 0x00, 0xf0, 0x2f, 0xe1, 0x1e, 0xff, 0x2f, 0xe1, + 0x20, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x00, + 0x20, 0xee, 0x01, 0x00, 0xd8, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0xf0, 0x9f, 0xe5, + 0x10, 0x01, 0x00, 0x00, 0x08, 0x03, 0x00, 0x00, + 0xee, 0xee, 0xee, 0xee, 0x24, 0x03, 0x00, 0x00, + 0x20, 0x02, 0x00, 0x00, 0xb0, 0xb5, 0x04, 0x1c, + 0x63, 0x1c, 0x0b, 0x4d, 0x3c, 0x00, 0x58, 0x02, + 0x00, 0x00, 0x01, 0xd1, 0x6c, 0x69, 0x10, 0xe0, + 0x00, 0xf0, 0x6c, 0xfb, 0x09, 0x48, 0xff, 0xf7, + 0x0c, 0xff, 0xec, 0x60, 0x08, 0x4a, 0x51, 0x68, + 0x50, 0x68, 0x88, 0x42, 0xfc, 0xd0, 0x02, 0x20, + 0x28, 0x70, 0x01, 0x21, 0x8a, 0x20, 0x01, 0xf0, + 0x12, 0xf8, 0x20, 0x1c, 0xb0, 0xbd, 0x30, 0x00, + 0x07, 0x00, 0x51, 0x02, 0x00, 0x00, 0x00, 0x03, + 0x07, 0x00, 0xb0, 0xb5, 0x05, 0x1c, 0x3c, 0x00, + 0x94, 0x02, 0x00, 0x00, 0x00, 0x24, 0x00, 0xf0, + 0x50, 0xfb, 0x14, 0x48, 0xff, 0xf7, 0xf0, 0xfe, + 0x13, 0x49, 0x14, 0x48, 0xc1, 0x60, 0x01, 0x21, + 0x13, 0x4a, 0x49, 0x03, 0x91, 0x60, 0x13, 0x49, + 0xca, 0x78, 0x08, 0x23, 0x9a, 0x43, 0xca, 0x70, + 0xca, 0x78, 0x04, 0x23, 0x1a, 0x43, 0xca, 0x70, + 0x6b, 0x1c, 0x0d, 0xd0, 0x0e, 0x4b, 0x5a, 0x68, + 0x59, 0x68, 0x91, 0x42, 0xfc, 0xd0, 0xbe, 0x21, + 0x3c, 0x00, 0xd0, 0x02, 0x00, 0x00, 0x19, 0x73, + 0x19, 0x7a, 0x11, 0x22, 0x91, 0x43, 0x19, 0x72, + 0x19, 0x7a, 0xc9, 0x07, 0xfc, 0xd4, 0x02, 0x21, + 0x01, 0x70, 0xff, 0xf7, 0xd0, 0xfe, 0x20, 0x1c, + 0xb0, 0xbd, 0x91, 0x02, 0x00, 0x00, 0xff, 0xff, + 0xff, 0x00, 0x30, 0x00, 0x07, 0x00, 0x00, 0x10, + 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x03, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x0c, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x48, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x84, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, + 0x08, 0x47, 0x10, 0x47, 0x18, 0x47, 0x20, 0x47, + 0x28, 0x47, 0x30, 0x47, 0x38, 0x47, 0x10, 0xb5, + 0x04, 0x1c, 0x10, 0x1c, 0x00, 0xf0, 0x23, 0xf9, + 0x03, 0xc4, 0x10, 0xbc, 0x08, 0xbc, 0x18, 0x47, + 0x00, 0x00, 0x3c, 0x00, 0xfc, 0x03, 0x00, 0x00, + 0x10, 0xb4, 0x04, 0x2a, 0x0e, 0xd3, 0x03, 0x1c, + 0x0b, 0x43, 0x9b, 0x07, 0x0a, 0xd1, 0x08, 0xc8, + 0x10, 0xc9, 0xa3, 0x42, 0x02, 0xd1, 0x04, 0x3a, + 0x04, 0x2a, 0xf8, 0xd2, 0xa3, 0x42, 0x01, 0xd0, + 0x04, 0x38, 0x04, 0x39, 0x00, 0x2a, 0x02, 0xd1, + 0x00, 0x20, 0x10, 0xbc, 0x70, 0x47, 0xd3, 0x07, + 0x01, 0xd5, 0x01, 0x32, 0x05, 0xe0, 0x03, 0x78, + 0x0c, 0x78, 0x01, 0x31, 0x3c, 0x00, 0x38, 0x04, + 0x00, 0x00, 0x01, 0x30, 0xa3, 0x42, 0x07, 0xd1, + 0x03, 0x78, 0x0c, 0x78, 0x01, 0x31, 0x01, 0x30, + 0xa3, 0x42, 0x01, 0xd1, 0x02, 0x3a, 0xf1, 0xd1, + 0x18, 0x1b, 0xe9, 0xe7, 0x00, 0x00, 0x78, 0x47, + 0x00, 0x00, 0x00, 0x20, 0xa0, 0xe3, 0x04, 0x00, + 0x51, 0xe3, 0x08, 0x00, 0x00, 0x3a, 0x03, 0xc0, + 0x10, 0xe2, 0x0d, 0x00, 0x00, 0x0a, 0x04, 0xc0, + 0x6c, 0xe2, 0x02, 0x00, 0x5c, 0xe3, 0x3c, 0x00, + 0x74, 0x04, 0x00, 0x00, 0x01, 0x20, 0xc0, 0xe4, + 0x01, 0x20, 0xc0, 0xa4, 0x01, 0x20, 0xc0, 0xc4, + 0x0c, 0x10, 0x41, 0xe0, 0x06, 0x00, 0x00, 0xea, + 0x81, 0xcf, 0xb0, 0xe1, 0x01, 0x20, 0xc0, 0x24, + 0x01, 0x20, 0xc0, 0x24, 0x01, 0x20, 0xc0, 0x44, + 0x1e, 0xff, 0x2f, 0xe1, 0x78, 0x47, 0x00, 0x00, + 0x00, 0x20, 0xa0, 0xe3, 0x00, 0x40, 0x2d, 0xe9, + 0x02, 0x30, 0xa0, 0xe1, 0x02, 0xc0, 0xa0, 0xe1, + 0x3c, 0x00, 0xb0, 0x04, 0x00, 0x00, 0x02, 0xe0, + 0xa0, 0xe1, 0x20, 0x10, 0x51, 0xe2, 0x0c, 0x50, + 0xa0, 0x28, 0x0c, 0x50, 0xa0, 0x28, 0x20, 0x10, + 0x51, 0x22, 0xfb, 0xff, 0xff, 0x2a, 0x01, 0x1e, + 0xb0, 0xe1, 0x0c, 0x50, 0xa0, 0x28, 0x0c, 0x00, + 0xa0, 0x48, 0x00, 0x40, 0xbd, 0xe8, 0x01, 0x11, + 0xb0, 0xe1, 0x04, 0x20, 0x80, 0x24, 0x1e, 0xff, + 0x2f, 0x01, 0x01, 0x20, 0xc0, 0x44, 0x01, 0x20, + 0xc0, 0x44, 0x3c, 0x00, 0xec, 0x04, 0x00, 0x00, + 0x40, 0x04, 0x11, 0xe3, 0x01, 0x20, 0xc0, 0x14, + 0x1e, 0xff, 0x2f, 0xe1, 0x78, 0x47, 0x00, 0x00, + 0x03, 0x00, 0x52, 0xe3, 0x3e, 0x00, 0x00, 0x9a, + 0x03, 0xc0, 0x10, 0xe2, 0x08, 0x00, 0x00, 0x0a, + 0x01, 0x30, 0xd1, 0xe4, 0x02, 0x00, 0x5c, 0xe3, + 0x0c, 0x20, 0x82, 0xe0, 0x01, 0xc0, 0xd1, 0x94, + 0x01, 0x30, 0xc0, 0xe4, 0x01, 0x30, 0xd1, 0x34, + 0x04, 0x20, 0x42, 0xe2, 0x3c, 0x00, 0x28, 0x05, + 0x00, 0x00, 0x01, 0xc0, 0xc0, 0x94, 0x01, 0x30, + 0xc0, 0x34, 0x03, 0x30, 0x11, 0xe2, 0x1e, 0x00, + 0x00, 0x0a, 0x04, 0x20, 0x52, 0xe2, 0x2f, 0x00, + 0x00, 0x3a, 0x03, 0xc0, 0x31, 0xe7, 0x02, 0x00, + 0x53, 0xe3, 0x08, 0x00, 0x00, 0x0a, 0x0f, 0x00, + 0x00, 0x8a, 0x2c, 0x34, 0xa0, 0xe1, 0x04, 0xc0, + 0xb1, 0xe5, 0x04, 0x20, 0x52, 0xe2, 0x0c, 0x3c, + 0x83, 0xe1, 0x04, 0x30, 0x80, 0xe4, 0x3c, 0x00, + 0x64, 0x05, 0x00, 0x00, 0xf9, 0xff, 0xff, 0x2a, + 0x01, 0x10, 0x81, 0xe2, 0x23, 0x00, 0x00, 0xea, + 0x2c, 0x38, 0xa0, 0xe1, 0x04, 0xc0, 0xb1, 0xe5, + 0x04, 0x20, 0x52, 0xe2, 0x0c, 0x38, 0x83, 0xe1, + 0x04, 0x30, 0x80, 0xe4, 0xf9, 0xff, 0xff, 0x2a, + 0x02, 0x10, 0x81, 0xe2, 0x1b, 0x00, 0x00, 0xea, + 0x2c, 0x3c, 0xa0, 0xe1, 0x04, 0xc0, 0xb1, 0xe5, + 0x04, 0x20, 0x52, 0xe2, 0x0c, 0x34, 0x83, 0xe1, + 0x3c, 0x00, 0xa0, 0x05, 0x00, 0x00, 0x04, 0x30, + 0x80, 0xe4, 0xf9, 0xff, 0xff, 0x2a, 0x03, 0x10, + 0x81, 0xe2, 0x13, 0x00, 0x00, 0xea, 0x78, 0x47, + 0x00, 0x00, 0x10, 0x40, 0x2d, 0xe9, 0x20, 0x20, + 0x52, 0xe2, 0x05, 0x00, 0x00, 0x3a, 0x18, 0x50, + 0xb1, 0x28, 0x18, 0x50, 0xa0, 0x28, 0x18, 0x50, + 0xb1, 0x28, 0x18, 0x50, 0xa0, 0x28, 0x20, 0x20, + 0x52, 0x22, 0xf9, 0xff, 0xff, 0x2a, 0x02, 0xce, + 0xb0, 0xe1, 0x3c, 0x00, 0xdc, 0x05, 0x00, 0x00, + 0x18, 0x50, 0xb1, 0x28, 0x18, 0x50, 0xa0, 0x28, + 0x18, 0x00, 0xb1, 0x48, 0x18, 0x00, 0xa0, 0x48, + 0x10, 0x40, 0xbd, 0xe8, 0x02, 0xcf, 0xb0, 0xe1, + 0x04, 0x30, 0x91, 0x24, 0x04, 0x30, 0x80, 0x24, + 0x1e, 0xff, 0x2f, 0x01, 0x82, 0x2f, 0xb0, 0xe1, + 0x01, 0x20, 0xd1, 0x44, 0x01, 0x30, 0xd1, 0x24, + 0x01, 0xc0, 0xd1, 0x24, 0x01, 0x20, 0xc0, 0x44, + 0x01, 0x30, 0xc0, 0x24, 0x3c, 0x00, 0x18, 0x06, + 0x00, 0x00, 0x01, 0xc0, 0xc0, 0x24, 0x1e, 0xff, + 0x2f, 0xe1, 0x78, 0x47, 0x00, 0x00, 0xff, 0x30, + 0x01, 0xe2, 0x02, 0x10, 0xa0, 0xe1, 0x03, 0x24, + 0x83, 0xe1, 0x02, 0x28, 0x82, 0xe1, 0x88, 0xff, + 0xff, 0xea, 0x78, 0x47, 0x00, 0x00, 0x80, 0x24, + 0x10, 0xe2, 0x00, 0x00, 0x60, 0x42, 0x41, 0x30, + 0x32, 0xe0, 0x00, 0x10, 0x61, 0x22, 0xa1, 0xc1, + 0x70, 0xe0, 0x20, 0x00, 0x00, 0x3a, 0x3c, 0x00, + 0x54, 0x06, 0x00, 0x00, 0x21, 0xc4, 0x70, 0xe0, + 0x0f, 0x00, 0x00, 0x3a, 0x00, 0x04, 0xa0, 0xe1, + 0xff, 0x24, 0x82, 0xe3, 0x21, 0xc2, 0x70, 0xe0, + 0x17, 0x00, 0x00, 0x3a, 0x21, 0xc4, 0x70, 0xe0, + 0x09, 0x00, 0x00, 0x3a, 0x00, 0x04, 0xa0, 0xe1, + 0xff, 0x28, 0x82, 0xe3, 0x21, 0xc4, 0x70, 0xe0, + 0x00, 0x04, 0xa0, 0x21, 0xff, 0x2c, 0x82, 0x23, + 0x21, 0xc2, 0x70, 0xe0, 0x0e, 0x00, 0x00, 0x3a, + 0x3c, 0x00, 0x90, 0x06, 0x00, 0x00, 0x00, 0xc0, + 0x70, 0xe2, 0x83, 0x00, 0x00, 0x2a, 0x20, 0x04, + 0xa0, 0x21, 0xa1, 0xc3, 0x70, 0xe0, 0x80, 0x13, + 0x41, 0x20, 0x02, 0x20, 0xa2, 0xe0, 0x21, 0xc3, + 0x70, 0xe0, 0x00, 0x13, 0x41, 0x20, 0x02, 0x20, + 0xa2, 0xe0, 0xa1, 0xc2, 0x70, 0xe0, 0x80, 0x12, + 0x41, 0x20, 0x02, 0x20, 0xa2, 0xe0, 0x21, 0xc2, + 0x70, 0xe0, 0x00, 0x12, 0x41, 0x20, 0x02, 0x20, + 0xa2, 0xe0, 0x3c, 0x00, 0xcc, 0x06, 0x00, 0x00, + 0xa1, 0xc1, 0x70, 0xe0, 0x80, 0x11, 0x41, 0x20, + 0x02, 0x20, 0xa2, 0xe0, 0x21, 0xc1, 0x70, 0xe0, + 0x00, 0x11, 0x41, 0x20, 0x02, 0x20, 0xa2, 0xe0, + 0xa1, 0xc0, 0x70, 0xe0, 0x80, 0x10, 0x41, 0x20, + 0x02, 0x20, 0xa2, 0xe0, 0x01, 0xc0, 0x70, 0xe0, + 0x00, 0x10, 0x41, 0x20, 0x02, 0x20, 0xb2, 0xe0, + 0xe5, 0xff, 0xff, 0x2a, 0xc3, 0x0f, 0x32, 0xe0, + 0xa3, 0x0f, 0x80, 0xe0, 0x3c, 0x00, 0x08, 0x07, + 0x00, 0x00, 0x00, 0x10, 0x61, 0x22, 0x1e, 0xff, + 0x2f, 0xe1, 0x78, 0x47, 0x00, 0x00, 0x00, 0x20, + 0xa0, 0xe3, 0xa1, 0xc1, 0x70, 0xe0, 0x20, 0x00, + 0x00, 0x3a, 0x21, 0xc4, 0x70, 0xe0, 0x0f, 0x00, + 0x00, 0x3a, 0x00, 0x04, 0xa0, 0xe1, 0xff, 0x24, + 0x82, 0xe3, 0x21, 0xc2, 0x70, 0xe0, 0x17, 0x00, + 0x00, 0x3a, 0x21, 0xc4, 0x70, 0xe0, 0x09, 0x00, + 0x00, 0x3a, 0x00, 0x04, 0xa0, 0xe1, 0x3c, 0x00, + 0x44, 0x07, 0x00, 0x00, 0xff, 0x28, 0x82, 0xe3, + 0x21, 0xc4, 0x70, 0xe0, 0x00, 0x04, 0xa0, 0x21, + 0xff, 0x2c, 0x82, 0x23, 0x21, 0xc2, 0x70, 0xe0, + 0x0e, 0x00, 0x00, 0x3a, 0x00, 0xc0, 0x70, 0xe2, + 0x50, 0x00, 0x00, 0x2a, 0x20, 0x04, 0xa0, 0x21, + 0xa1, 0xc3, 0x70, 0xe0, 0x80, 0x13, 0x41, 0x20, + 0x02, 0x20, 0xa2, 0xe0, 0x21, 0xc3, 0x70, 0xe0, + 0x00, 0x13, 0x41, 0x20, 0x02, 0x20, 0xa2, 0xe0, + 0x3c, 0x00, 0x80, 0x07, 0x00, 0x00, 0xa1, 0xc2, + 0x70, 0xe0, 0x80, 0x12, 0x41, 0x20, 0x02, 0x20, + 0xa2, 0xe0, 0x21, 0xc2, 0x70, 0xe0, 0x00, 0x12, + 0x41, 0x20, 0x02, 0x20, 0xa2, 0xe0, 0xa1, 0xc1, + 0x70, 0xe0, 0x80, 0x11, 0x41, 0x20, 0x02, 0x20, + 0xa2, 0xe0, 0x21, 0xc1, 0x70, 0xe0, 0x00, 0x11, + 0x41, 0x20, 0x02, 0x20, 0xa2, 0xe0, 0xa1, 0xc0, + 0x70, 0xe0, 0x80, 0x10, 0x41, 0x20, 0x02, 0x20, + 0xa2, 0xe0, 0x3c, 0x00, 0xbc, 0x07, 0x00, 0x00, + 0x01, 0xc0, 0x70, 0xe0, 0x00, 0x10, 0x41, 0x20, + 0x02, 0x20, 0xb2, 0xe0, 0xe5, 0xff, 0xff, 0x2a, + 0x02, 0x00, 0xa0, 0xe1, 0x1e, 0xff, 0x2f, 0xe1, + 0x78, 0x47, 0x00, 0x00, 0x0a, 0x10, 0x40, 0xe2, + 0x20, 0x01, 0x40, 0xe0, 0x20, 0x02, 0x80, 0xe0, + 0x20, 0x04, 0x80, 0xe0, 0x20, 0x08, 0x80, 0xe0, + 0xa0, 0x01, 0xa0, 0xe1, 0x00, 0x21, 0x80, 0xe0, + 0x82, 0x10, 0x51, 0xe0, 0x3c, 0x00, 0xf8, 0x07, + 0x00, 0x00, 0x01, 0x00, 0x80, 0x52, 0x0a, 0x10, + 0x81, 0x42, 0x1e, 0xff, 0x2f, 0xe1, 0x30, 0xb4, + 0x44, 0x1c, 0x81, 0x07, 0x08, 0xd0, 0x01, 0x78, + 0x01, 0x30, 0x00, 0x29, 0x02, 0xd1, 0x00, 0x1b, + 0x30, 0xbc, 0x70, 0x47, 0x81, 0x07, 0xf6, 0xd1, + 0x0b, 0x4a, 0xd5, 0x01, 0x02, 0xc8, 0x8b, 0x1a, + 0x8b, 0x43, 0x2b, 0x40, 0xfa, 0xd0, 0x00, 0x1b, + 0x0a, 0x06, 0x01, 0xd1, 0x03, 0x38, 0x3c, 0x00, + 0x34, 0x08, 0x00, 0x00, 0xef, 0xe7, 0x0a, 0x04, + 0x12, 0x0e, 0x01, 0xd1, 0x02, 0x38, 0xea, 0xe7, + 0x09, 0x02, 0x09, 0x0e, 0xe7, 0xd1, 0x01, 0x38, + 0xe5, 0xe7, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, + 0xf0, 0xb4, 0x03, 0x1c, 0x04, 0x1c, 0x0c, 0x43, + 0xa4, 0x07, 0x0c, 0xd1, 0x10, 0x4d, 0xef, 0x01, + 0x02, 0xe0, 0x04, 0x31, 0x04, 0x3a, 0x10, 0xc3, + 0x04, 0x2a, 0x04, 0xd3, 0x0c, 0x68, 0x66, 0x1b, + 0x3c, 0x00, 0x70, 0x08, 0x00, 0x00, 0xa6, 0x43, + 0x3e, 0x40, 0xf5, 0xd0, 0x00, 0x2a, 0x07, 0xd0, + 0x0c, 0x78, 0x01, 0x31, 0x1c, 0x70, 0x01, 0x33, + 0x00, 0x2c, 0x03, 0xd0, 0x01, 0x3a, 0xf7, 0xd1, + 0xf0, 0xbc, 0x70, 0x47, 0x01, 0x2a, 0xfb, 0xd9, + 0x51, 0x1e, 0x00, 0x22, 0x1a, 0x70, 0x01, 0x33, + 0x01, 0x39, 0xfb, 0xd1, 0xf4, 0xe7, 0x01, 0x01, + 0x01, 0x01, 0x78, 0x47, 0x00, 0x00, 0x02, 0x00, + 0xa0, 0xe3, 0x3c, 0x00, 0xac, 0x08, 0x00, 0x00, + 0x02, 0x10, 0xa0, 0xe3, 0x2e, 0xfe, 0xff, 0xea, + 0x1f, 0x40, 0x2d, 0xe9, 0x00, 0x00, 0x0f, 0xe1, + 0xc0, 0x00, 0x80, 0xe3, 0x00, 0xf0, 0x2f, 0xe1, + 0x81, 0x00, 0xa0, 0xe3, 0x02, 0x10, 0xa0, 0xe3, + 0x01, 0x20, 0x8f, 0xe2, 0x12, 0xff, 0x2f, 0xe1, + 0x00, 0xf0, 0xe6, 0xfc, 0x78, 0x47, 0x00, 0x00, + 0x1f, 0x40, 0xbd, 0xe8, 0xfe, 0xff, 0xff, 0xea, + 0x1f, 0x50, 0x2d, 0xe9, 0x3c, 0x00, 0xe8, 0x08, + 0x00, 0x00, 0x01, 0x00, 0x8f, 0xe2, 0x10, 0xff, + 0x2f, 0xe1, 0x00, 0xf0, 0x40, 0xfb, 0x78, 0x47, + 0x00, 0x00, 0x1f, 0x50, 0xbd, 0xe8, 0x04, 0xf0, + 0x5e, 0xe2, 0x1f, 0x50, 0x2d, 0xe9, 0x01, 0x00, + 0x8f, 0xe2, 0x10, 0xff, 0x2f, 0xe1, 0x00, 0xf0, + 0x18, 0xfb, 0x78, 0x47, 0x00, 0x00, 0x1f, 0x50, + 0xbd, 0xe8, 0x04, 0xf0, 0x5e, 0xe2, 0x00, 0xbd, + 0x01, 0xb5, 0x00, 0xa0, 0x00, 0x47, 0x3c, 0x00, + 0x24, 0x09, 0x00, 0x00, 0x00, 0x30, 0x0f, 0xe1, + 0xc0, 0x30, 0xc3, 0xe3, 0x03, 0xf0, 0x21, 0xe1, + 0x01, 0x00, 0x8f, 0xe2, 0x10, 0xff, 0x2f, 0xe1, + 0x01, 0xbd, 0x01, 0xb5, 0x00, 0xa0, 0x00, 0x47, + 0x00, 0x30, 0x0f, 0xe1, 0xc0, 0x30, 0x83, 0xe3, + 0x03, 0xf0, 0x21, 0xe1, 0x01, 0x00, 0x8f, 0xe2, + 0x10, 0xff, 0x2f, 0xe1, 0x01, 0xbd, 0x00, 0x00, + 0x18, 0x00, 0x9f, 0xe5, 0x04, 0x10, 0x90, 0xe4, + 0x3c, 0x00, 0x60, 0x09, 0x00, 0x00, 0x00, 0x00, + 0x51, 0xe3, 0x02, 0x00, 0x00, 0x0a, 0x04, 0x20, + 0x90, 0xe4, 0x00, 0x20, 0x81, 0xe5, 0xf9, 0xff, + 0xff, 0xea, 0x0e, 0xf0, 0xa0, 0xe1, 0x7c, 0x09, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, + 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0xd8, 0x03, + 0x00, 0x00, 0xd8, 0x03, 0x00, 0x00, 0xd8, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x9c, 0x09, 0x00, 0x00, + 0x44, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, + 0x44, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, + 0x00, 0x80, 0x01, 0x00, 0x10, 0x8e, 0x01, 0x00, + 0x10, 0x8e, 0x01, 0x00, 0x88, 0xf8, 0x01, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x10, 0x04, 0x00, + 0xc4, 0x33, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0e, 0x50, 0xa0, 0xe1, + 0x58, 0x40, 0x9f, 0xe5, 0x3c, 0x00, 0xd8, 0x09, + 0x00, 0x00, 0x04, 0x00, 0x94, 0xe4, 0x01, 0x00, + 0x50, 0xe3, 0x05, 0xf0, 0xa0, 0x01, 0x04, 0x10, + 0x94, 0xe4, 0x04, 0x20, 0x94, 0xe4, 0x03, 0x00, + 0x00, 0xeb, 0x04, 0x00, 0x94, 0xe4, 0x04, 0x10, + 0x94, 0xe4, 0x07, 0x00, 0x00, 0xeb, 0xf5, 0xff, + 0xff, 0xea, 0x01, 0x00, 0x50, 0xe1, 0x0e, 0xf0, + 0xa0, 0x01, 0x02, 0x00, 0x51, 0xe1, 0x04, 0x30, + 0x90, 0x14, 0x04, 0x30, 0x81, 0x14, 0x3c, 0x00, + 0x14, 0x0a, 0x00, 0x00, 0xfb, 0xff, 0xff, 0x1a, + 0x0e, 0xf0, 0xa0, 0xe1, 0x14, 0x20, 0x9f, 0xe5, + 0x00, 0x20, 0x92, 0xe5, 0x01, 0x00, 0x50, 0xe1, + 0x04, 0x20, 0x80, 0x14, 0xfc, 0xff, 0xff, 0x1a, + 0x0e, 0xf0, 0xa0, 0xe1, 0x80, 0x09, 0x00, 0x00, + 0xcc, 0x09, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, + 0x20, 0xe6, 0x01, 0x00, 0x13, 0x00, 0x00, 0x00, + 0x53, 0x56, 0x43, 0x5f, 0x00, 0x04, 0x00, 0x00, + 0x3c, 0x00, 0x50, 0x0a, 0x00, 0x00, 0x20, 0xee, + 0x01, 0x00, 0x12, 0x00, 0x00, 0x00, 0x49, 0x52, + 0x51, 0x5f, 0x00, 0x02, 0x00, 0x00, 0x20, 0xf2, + 0x01, 0x00, 0x11, 0x00, 0x00, 0x00, 0x46, 0x49, + 0x51, 0x5f, 0x80, 0x00, 0x00, 0x00, 0x20, 0xf4, + 0x01, 0x00, 0x17, 0x00, 0x00, 0x00, 0x41, 0x42, + 0x54, 0x5f, 0x00, 0x00, 0x00, 0x00, 0xa0, 0xf4, + 0x01, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x55, 0x4e, + 0x44, 0x5f, 0x3c, 0x00, 0x8c, 0x0a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xa0, 0xf4, 0x01, 0x00, + 0x1f, 0x00, 0x00, 0x00, 0x55, 0x53, 0x52, 0x5f, + 0x01, 0x00, 0x00, 0x00, 0x0e, 0x50, 0xa0, 0xe1, + 0x00, 0x60, 0x0f, 0xe1, 0x8c, 0x40, 0x9f, 0xe5, + 0x04, 0x10, 0x94, 0xe4, 0x01, 0x00, 0x51, 0xe3, + 0x09, 0x00, 0x00, 0x0a, 0x04, 0x00, 0x94, 0xe4, + 0x01, 0x10, 0x80, 0xe0, 0x03, 0x10, 0xc1, 0xe3, + 0x04, 0x20, 0x94, 0xe4, 0x3c, 0x00, 0xc8, 0x0a, + 0x00, 0x00, 0xc0, 0x20, 0x82, 0xe3, 0x02, 0xf0, + 0x2f, 0xe1, 0x04, 0xd0, 0x41, 0xe2, 0x04, 0x20, + 0x94, 0xe4, 0x13, 0x00, 0x00, 0xeb, 0xf2, 0xff, + 0xff, 0xea, 0x06, 0xf0, 0x2f, 0xe1, 0x05, 0xf0, + 0xa0, 0xe1, 0x0e, 0x50, 0xa0, 0xe1, 0x00, 0x60, + 0x0f, 0xe1, 0x44, 0x40, 0x9f, 0xe5, 0x04, 0x10, + 0x94, 0xe4, 0x01, 0x00, 0x51, 0xe3, 0x08, 0x00, + 0x00, 0x0a, 0x04, 0x00, 0x94, 0xe4, 0x3c, 0x00, + 0x04, 0x0b, 0x00, 0x00, 0x01, 0x10, 0x80, 0xe0, + 0x03, 0x10, 0xc1, 0xe3, 0x04, 0x20, 0x94, 0xe4, + 0xc0, 0x20, 0x82, 0xe3, 0x02, 0xf0, 0x2f, 0xe1, + 0x04, 0xd0, 0x41, 0xe2, 0x04, 0x20, 0x94, 0xe4, + 0xf3, 0xff, 0xff, 0xea, 0x06, 0xf0, 0x2f, 0xe1, + 0x05, 0xf0, 0xa0, 0xe1, 0x01, 0x00, 0x50, 0xe1, + 0x04, 0x20, 0x80, 0x14, 0xfc, 0xff, 0xff, 0x1a, + 0x0e, 0xf0, 0xa0, 0xe1, 0x3c, 0x0a, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0x0b, 0x00, 0x00, 0x01, 0x60, + 0xc0, 0x46, 0xc0, 0x46, 0xc0, 0x46, 0x70, 0x47, + 0x00, 0x00, 0x10, 0x1e, 0x10, 0xee, 0x02, 0x00, + 0x11, 0xe3, 0xfc, 0xff, 0xff, 0x1a, 0x10, 0x0e, + 0x01, 0xee, 0x10, 0x1e, 0x10, 0xee, 0x02, 0x00, + 0x11, 0xe3, 0xfc, 0xff, 0xff, 0x1a, 0x1e, 0xff, + 0x2f, 0xe1, 0x10, 0x1e, 0x10, 0xee, 0x01, 0x00, + 0x11, 0xe3, 0x03, 0x00, 0x00, 0x0a, 0x10, 0x1e, + 0x11, 0xee, 0x3c, 0x00, 0x7c, 0x0b, 0x00, 0x00, + 0x00, 0x10, 0x80, 0xe5, 0x01, 0x00, 0xa0, 0xe3, + 0x1e, 0xff, 0x2f, 0xe1, 0x00, 0x00, 0x20, 0xe0, + 0x1e, 0xff, 0x2f, 0xe1, 0x8d, 0x46, 0x97, 0x46, + 0x78, 0x47, 0xc0, 0x46, 0x78, 0xfd, 0xff, 0xea, + 0x10, 0xb5, 0x04, 0x1c, 0x03, 0x28, 0x01, 0xd9, + 0x00, 0xf0, 0xac, 0xfb, 0x0c, 0x48, 0x40, 0x68, + 0x00, 0x28, 0x00, 0xd0, 0x03, 0x24, 0x0b, 0x48, + 0x01, 0x68, 0x09, 0x48, 0x3c, 0x00, 0xb8, 0x0b, + 0x00, 0x00, 0x12, 0x30, 0x00, 0x29, 0x05, 0xd0, + 0x06, 0x21, 0x61, 0x43, 0x40, 0x5c, 0xc3, 0x00, + 0x18, 0x18, 0x04, 0xe0, 0x06, 0x21, 0x61, 0x43, + 0x40, 0x5c, 0x14, 0x23, 0x58, 0x43, 0x0a, 0x30, + 0x00, 0x06, 0x00, 0x0e, 0x10, 0xbd, 0xd4, 0x7a, + 0x01, 0x00, 0xa8, 0x69, 0x01, 0x00, 0x80, 0xb5, + 0x09, 0x4a, 0x09, 0x49, 0x03, 0x20, 0x00, 0xf0, + 0xf2, 0xf9, 0x08, 0x49, 0x08, 0x20, 0x3c, 0x00, + 0xf4, 0x0b, 0x00, 0x00, 0x08, 0x60, 0x48, 0x60, + 0x07, 0x49, 0x1d, 0x20, 0x01, 0xf0, 0xb2, 0xfc, + 0x06, 0x49, 0x1e, 0x20, 0x01, 0xf0, 0xae, 0xfc, + 0x80, 0xbd, 0x00, 0x00, 0x00, 0x6c, 0x01, 0x00, + 0x31, 0x27, 0x00, 0x00, 0x00, 0x10, 0x07, 0x00, + 0x29, 0x25, 0x00, 0x00, 0x31, 0x25, 0x00, 0x00, + 0x05, 0x49, 0x80, 0xb5, 0x08, 0x20, 0x88, 0x60, + 0x1d, 0x20, 0x01, 0xf0, 0xbf, 0xfc, 0x1e, 0x20, + 0x3c, 0x00, 0x30, 0x0c, 0x00, 0x00, 0x01, 0xf0, + 0xbc, 0xfc, 0x80, 0xbd, 0x00, 0x00, 0x00, 0x10, + 0x07, 0x00, 0x02, 0x1c, 0x08, 0x1c, 0xd1, 0x2a, + 0x80, 0xb5, 0x01, 0xd1, 0x05, 0xf0, 0x19, 0xfc, + 0x80, 0xbd, 0x03, 0x49, 0x80, 0xb5, 0x00, 0x20, + 0x08, 0x80, 0x05, 0x20, 0x05, 0xf0, 0xd5, 0xfb, + 0x80, 0xbd, 0xb0, 0x74, 0x01, 0x00, 0x80, 0xb5, + 0x54, 0x28, 0x01, 0xd1, 0x06, 0xf0, 0xcd, 0xf8, + 0x80, 0xbd, 0x3c, 0x00, 0x6c, 0x0c, 0x00, 0x00, + 0xb0, 0xb5, 0x10, 0x4d, 0x02, 0x1c, 0x01, 0x24, + 0x01, 0x2a, 0x0d, 0x48, 0x29, 0x68, 0x06, 0xd0, + 0xc4, 0x2a, 0x03, 0xd1, 0x6a, 0x68, 0x00, 0x2a, + 0x05, 0xd0, 0xac, 0x60, 0xb0, 0xbd, 0x0e, 0xf0, + 0x89, 0xfb, 0x6c, 0x60, 0x08, 0xe0, 0x00, 0x22, + 0xaa, 0x60, 0x6c, 0x60, 0x0e, 0xf0, 0x82, 0xfb, + 0x00, 0x21, 0x04, 0x20, 0x12, 0xf0, 0xc8, 0xfc, + 0x06, 0xf0, 0xd8, 0xf8, 0x3c, 0x00, 0xa8, 0x0c, + 0x00, 0x00, 0xb0, 0xbd, 0x00, 0x00, 0xc4, 0x60, + 0x01, 0x00, 0xbc, 0x74, 0x01, 0x00, 0x05, 0x4a, + 0x51, 0x69, 0x08, 0x1a, 0x11, 0x69, 0x09, 0x68, + 0x10, 0x31, 0x81, 0x42, 0x01, 0xd8, 0x50, 0x61, + 0x70, 0x47, 0x00, 0x20, 0x70, 0x47, 0x8c, 0x6e, + 0x01, 0x00, 0x01, 0x49, 0x49, 0x68, 0x40, 0x1a, + 0x70, 0x47, 0x8c, 0x6e, 0x01, 0x00, 0x01, 0x48, + 0x40, 0x69, 0x70, 0x47, 0x00, 0x00, 0x3c, 0x00, + 0xe4, 0x0c, 0x00, 0x00, 0x8c, 0x6e, 0x01, 0x00, + 0x02, 0x4a, 0x51, 0x69, 0x08, 0x18, 0x50, 0x61, + 0x70, 0x47, 0x00, 0x00, 0x8c, 0x6e, 0x01, 0x00, + 0x0e, 0x49, 0x0f, 0x48, 0x10, 0xb5, 0x19, 0x22, + 0x92, 0x01, 0x41, 0x60, 0x89, 0x18, 0xc1, 0x60, + 0x0b, 0x49, 0x00, 0x22, 0x0c, 0x31, 0x01, 0x60, + 0x0a, 0x49, 0x82, 0x60, 0x09, 0x68, 0x01, 0x23, + 0xdb, 0x03, 0xc9, 0x18, 0x08, 0x4c, 0x41, 0x61, + 0x3c, 0x00, 0x20, 0x0d, 0x00, 0x00, 0x21, 0x68, + 0x00, 0x29, 0x02, 0xd0, 0x07, 0x49, 0x01, 0x61, + 0x01, 0xe0, 0x00, 0xf0, 0x0c, 0xf8, 0x22, 0x60, + 0x10, 0xbd, 0x44, 0xdc, 0x01, 0x00, 0x8c, 0x6e, + 0x01, 0x00, 0xc8, 0x09, 0x00, 0x00, 0x34, 0x58, + 0x01, 0x00, 0xc4, 0x09, 0x00, 0x00, 0x01, 0x48, + 0x02, 0x49, 0x08, 0x61, 0x70, 0x47, 0xc8, 0x09, + 0x00, 0x00, 0x8c, 0x6e, 0x01, 0x00, 0x08, 0x28, + 0x05, 0xd2, 0x3c, 0x00, 0x5c, 0x0d, 0x00, 0x00, + 0x03, 0x4b, 0x80, 0x00, 0x19, 0x50, 0x02, 0x49, + 0x20, 0x31, 0x0a, 0x50, 0x70, 0x47, 0x00, 0x00, + 0x64, 0x6d, 0x01, 0x00, 0x70, 0xb5, 0x06, 0x1c, + 0x0d, 0x48, 0x0d, 0x1c, 0x00, 0x68, 0x14, 0x1c, + 0x00, 0x28, 0x03, 0xd1, 0x20, 0x1c, 0x00, 0xf0, + 0x09, 0xfc, 0x70, 0xbd, 0x28, 0x06, 0x01, 0xd5, + 0x00, 0xf0, 0x22, 0xfe, 0x22, 0x1c, 0x29, 0x1c, + 0x30, 0x1c, 0x08, 0xf0, 0x3c, 0x00, 0x98, 0x0d, + 0x00, 0x00, 0xdd, 0xfd, 0x01, 0x1c, 0x03, 0x48, + 0x54, 0x30, 0x43, 0x69, 0x32, 0x1c, 0xff, 0xf7, + 0x1b, 0xfb, 0x70, 0xbd, 0x00, 0x00, 0x50, 0x6d, + 0x01, 0x00, 0xf8, 0xb5, 0x06, 0x1c, 0x0d, 0x48, + 0x1f, 0x1c, 0x00, 0x68, 0x15, 0x1c, 0x0c, 0x1c, + 0x00, 0x28, 0x02, 0xd1, 0x28, 0x1c, 0x00, 0xf0, + 0xe8, 0xfb, 0x20, 0x06, 0x01, 0xd5, 0x00, 0xf0, + 0x02, 0xfe, 0x2a, 0x1c, 0x21, 0x1c, 0x3c, 0x00, + 0xd4, 0x0d, 0x00, 0x00, 0x30, 0x1c, 0x08, 0xf0, + 0xbd, 0xfd, 0x01, 0x1c, 0x03, 0x48, 0x54, 0x30, + 0x43, 0x69, 0x3a, 0x1c, 0xff, 0xf7, 0xfb, 0xfa, + 0xf8, 0xbd, 0x00, 0x00, 0x50, 0x6d, 0x01, 0x00, + 0xf8, 0xb5, 0xf1, 0x28, 0x4e, 0xd1, 0x2a, 0x48, + 0x69, 0x46, 0x82, 0x69, 0xff, 0xf7, 0xee, 0xfa, + 0x27, 0x49, 0x00, 0x26, 0x54, 0x39, 0xc8, 0x68, + 0x8b, 0x68, 0xc2, 0x00, 0x01, 0x30, 0xd5, 0x18, + 0x3c, 0x00, 0x10, 0x0e, 0x00, 0x00, 0x07, 0x28, + 0xc8, 0x60, 0x00, 0xd1, 0xce, 0x60, 0x22, 0x48, + 0x6c, 0x68, 0x00, 0x68, 0x00, 0x28, 0x03, 0xd0, + 0x00, 0x21, 0x20, 0x1c, 0x08, 0xf0, 0x3b, 0xfb, + 0x6e, 0x60, 0x25, 0x68, 0x20, 0x89, 0xa9, 0x78, + 0x02, 0x39, 0x40, 0x1a, 0xe9, 0x78, 0x40, 0x1a, + 0x20, 0x81, 0xa8, 0x78, 0x28, 0x18, 0x02, 0x38, + 0x20, 0x60, 0x6e, 0x78, 0x28, 0x78, 0x08, 0x28, + 0x17, 0xd2, 0x3c, 0x00, 0x4c, 0x0e, 0x00, 0x00, + 0x30, 0x06, 0x07, 0xd5, 0x27, 0x1c, 0x20, 0x1c, + 0x00, 0xf0, 0x7a, 0xfc, 0x04, 0x1c, 0x38, 0x1c, + 0x00, 0xf0, 0x9c, 0xfb, 0x28, 0x78, 0x0f, 0x49, + 0x40, 0x39, 0x80, 0x00, 0x0a, 0x58, 0x00, 0x2a, + 0x04, 0xd0, 0x31, 0x1c, 0x20, 0x1c, 0xff, 0xf7, + 0xb3, 0xfa, 0x08, 0xe0, 0x05, 0x21, 0x00, 0xe0, + 0x04, 0x21, 0x06, 0x20, 0x00, 0xf0, 0x10, 0xfa, + 0x20, 0x1c, 0x00, 0xf0, 0x3c, 0x00, 0x88, 0x0e, + 0x00, 0x00, 0x87, 0xfb, 0x30, 0x06, 0x01, 0xd5, + 0x00, 0xf0, 0xa1, 0xfd, 0xf8, 0xbd, 0x01, 0x21, + 0x06, 0x20, 0x00, 0xf0, 0x04, 0xfa, 0xf9, 0xe7, + 0x00, 0x00, 0xa4, 0x6d, 0x01, 0x00, 0xcc, 0x5c, + 0x01, 0x00, 0xf8, 0xb5, 0x1a, 0x4d, 0x19, 0x4f, + 0x01, 0x24, 0x54, 0x35, 0x29, 0x1c, 0x03, 0x20, + 0x7c, 0x60, 0x17, 0x4b, 0x18, 0x4a, 0x05, 0xf0, + 0xf4, 0xfb, 0x00, 0x28, 0x02, 0xd0, 0x3c, 0x00, + 0xc4, 0x0e, 0x00, 0x00, 0x00, 0x20, 0x38, 0x60, + 0x1f, 0xe0, 0x3c, 0x60, 0x07, 0x21, 0x28, 0x1c, + 0xea, 0x69, 0xff, 0xf7, 0x83, 0xfa, 0x38, 0x20, + 0x00, 0xf0, 0x80, 0xfc, 0x00, 0x24, 0xb8, 0x60, + 0xb8, 0x68, 0xe6, 0x00, 0x35, 0x18, 0x68, 0x46, + 0x02, 0x21, 0x00, 0xf0, 0x75, 0xfb, 0x28, 0x60, + 0x28, 0x1c, 0x00, 0xf0, 0xa5, 0xfd, 0xb8, 0x68, + 0x81, 0x59, 0x06, 0x48, 0x54, 0x30, 0x02, 0x6a, + 0x3c, 0x00, 0x00, 0x0f, 0x00, 0x00, 0xff, 0xf7, + 0x6c, 0xfa, 0x01, 0x34, 0x07, 0x2c, 0xea, 0xdb, + 0x00, 0x20, 0xf8, 0x60, 0x38, 0x61, 0xf8, 0xbd, + 0x00, 0x00, 0x50, 0x6d, 0x01, 0x00, 0x81, 0x9a, + 0x00, 0x00, 0x61, 0x9a, 0x00, 0x00, 0x05, 0x48, + 0x80, 0xb5, 0x00, 0x68, 0x00, 0x28, 0x05, 0xd0, + 0x03, 0x48, 0x54, 0x30, 0x42, 0x6a, 0x00, 0x21, + 0xff, 0xf7, 0x53, 0xfa, 0x80, 0xbd, 0x50, 0x6d, + 0x01, 0x00, 0x3c, 0x00, 0x3c, 0x0f, 0x00, 0x00, + 0x70, 0x47, 0x00, 0x00, 0x70, 0xb5, 0x0a, 0x4e, + 0x09, 0x4d, 0x08, 0x4c, 0x08, 0x3e, 0xa1, 0x69, + 0x00, 0x29, 0x07, 0xd0, 0x30, 0x68, 0x41, 0x60, + 0x00, 0x7b, 0x81, 0x00, 0x69, 0x58, 0xff, 0xf7, + 0x3e, 0xfa, 0xf4, 0xe7, 0x03, 0x49, 0x02, 0x20, + 0x08, 0x70, 0x70, 0xbd, 0x00, 0x10, 0x07, 0x00, + 0xe0, 0x7e, 0x01, 0x00, 0x00, 0x02, 0x07, 0x00, + 0x70, 0xb5, 0x0a, 0x4e, 0x3c, 0x00, 0x78, 0x0f, + 0x00, 0x00, 0x09, 0x4d, 0x08, 0x4c, 0x08, 0x3e, + 0xe1, 0x69, 0x00, 0x29, 0x07, 0xd0, 0x70, 0x68, + 0x41, 0x60, 0x00, 0x7b, 0x81, 0x00, 0x69, 0x58, + 0xff, 0xf7, 0x24, 0xfa, 0xf4, 0xe7, 0x03, 0x49, + 0x02, 0x20, 0x08, 0x70, 0x70, 0xbd, 0x00, 0x10, + 0x07, 0x00, 0xe0, 0x7e, 0x01, 0x00, 0x00, 0x02, + 0x07, 0x00, 0xb0, 0xb5, 0x09, 0x4d, 0x04, 0x1c, + 0x28, 0x1c, 0x20, 0x22, 0x40, 0x30, 0x3c, 0x00, + 0xb4, 0x0f, 0x00, 0x00, 0x05, 0x49, 0xff, 0xf7, + 0x9f, 0xfa, 0xe0, 0x68, 0xe8, 0x60, 0x20, 0x69, + 0x28, 0x61, 0xa0, 0x6a, 0xa8, 0x62, 0x60, 0x68, + 0x68, 0x60, 0xb0, 0xbd, 0x70, 0x52, 0x01, 0x00, + 0x00, 0x10, 0x07, 0x00, 0xf8, 0xb5, 0x00, 0x24, + 0x00, 0x23, 0x20, 0x28, 0x01, 0xdb, 0x01, 0x24, + 0x07, 0xe0, 0x08, 0x4e, 0x80, 0x00, 0x35, 0x58, + 0x07, 0x4f, 0xbd, 0x42, 0x00, 0xd0, 0x2b, 0x1c, + 0x3c, 0x00, 0xf0, 0x0f, 0x00, 0x00, 0x31, 0x50, + 0x13, 0x60, 0x00, 0x2c, 0x03, 0xd0, 0x21, 0x1c, + 0x82, 0x20, 0x00, 0xf0, 0x52, 0xf9, 0x20, 0x1c, + 0xf8, 0xbd, 0xe0, 0x7e, 0x01, 0x00, 0x75, 0x75, + 0x00, 0x00, 0xb0, 0xb5, 0x0b, 0x4d, 0x04, 0x1c, + 0x28, 0x68, 0x00, 0x28, 0x0f, 0xd0, 0x20, 0x1c, + 0x12, 0xf0, 0xb7, 0xfd, 0x00, 0x28, 0x0a, 0xd0, + 0x21, 0x7a, 0x28, 0x7a, 0x0a, 0x07, 0x00, 0x07, + 0x00, 0x0f, 0x3c, 0x00, 0x2c, 0x10, 0x00, 0x00, + 0x12, 0x0f, 0x90, 0x42, 0x29, 0x72, 0x01, 0xd0, + 0x01, 0x20, 0xb0, 0xbd, 0x00, 0x20, 0xb0, 0xbd, + 0x70, 0x78, 0x01, 0x00, 0xf0, 0xb5, 0x42, 0x4e, + 0x05, 0x1c, 0x30, 0x68, 0x85, 0xb0, 0x00, 0x28, + 0x63, 0xd0, 0x00, 0x24, 0x00, 0x20, 0x00, 0x2d, + 0x06, 0xd0, 0x69, 0x78, 0x18, 0x29, 0x03, 0xd1, + 0xe9, 0x79, 0x01, 0x29, 0x00, 0xd1, 0x01, 0x20, + 0x00, 0x28, 0x45, 0xd0, 0x3c, 0x00, 0x68, 0x10, + 0x00, 0x00, 0x00, 0x20, 0xb0, 0x72, 0x81, 0x00, + 0x4a, 0x19, 0x93, 0x7a, 0x59, 0x06, 0x89, 0x0f, + 0xdb, 0x06, 0x04, 0xd5, 0xb3, 0x7a, 0x01, 0x27, + 0x8f, 0x40, 0x3b, 0x43, 0xb3, 0x72, 0xd2, 0x7a, + 0x13, 0x09, 0x12, 0x07, 0x12, 0x0f, 0x93, 0x42, + 0x05, 0xd3, 0x01, 0x22, 0x8a, 0x40, 0x14, 0x43, + 0x01, 0xaa, 0x89, 0x00, 0x50, 0x50, 0x01, 0x30, + 0x04, 0x28, 0xe4, 0xdb, 0xb0, 0x7a, 0x3c, 0x00, + 0xa4, 0x10, 0x00, 0x00, 0x20, 0x40, 0x01, 0x07, + 0x0d, 0xd5, 0x41, 0x07, 0x09, 0xd5, 0xc1, 0x07, + 0x05, 0xd5, 0x81, 0x07, 0x01, 0xd5, 0x00, 0x24, + 0x05, 0xe0, 0x02, 0x99, 0x02, 0xe0, 0x01, 0x99, + 0x00, 0xe0, 0x03, 0x99, 0x04, 0x91, 0x41, 0x07, + 0x09, 0xd5, 0xc1, 0x07, 0x05, 0xd5, 0x81, 0x07, + 0x01, 0xd5, 0x00, 0x24, 0x03, 0xe0, 0x02, 0x99, + 0x00, 0xe0, 0x01, 0x99, 0x03, 0x91, 0xc1, 0x07, + 0x3c, 0x00, 0xe0, 0x10, 0x00, 0x00, 0x05, 0xd5, + 0x81, 0x07, 0x01, 0xd5, 0x00, 0x24, 0x01, 0xe0, + 0x02, 0x99, 0x01, 0x91, 0x80, 0x07, 0x01, 0xd5, + 0x00, 0x24, 0x22, 0xe0, 0x0f, 0x2c, 0x20, 0xd1, + 0x70, 0x68, 0x00, 0x28, 0x0b, 0xd0, 0x04, 0x9a, + 0x02, 0xab, 0x00, 0x92, 0x0a, 0xcb, 0x01, 0x9a, + 0x28, 0x1c, 0x0b, 0xf0, 0x8a, 0xfb, 0x00, 0x20, + 0x70, 0x60, 0x10, 0xe0, 0x17, 0xe0, 0x30, 0x7a, + 0x29, 0x7a, 0x3c, 0x00, 0x1c, 0x11, 0x00, 0x00, + 0x00, 0x07, 0x09, 0x07, 0x09, 0x0f, 0x00, 0x0f, + 0x88, 0x42, 0x07, 0xd0, 0x04, 0x9a, 0x02, 0xab, + 0x00, 0x92, 0x0a, 0xcb, 0x01, 0x9a, 0x28, 0x1c, + 0x0b, 0xf0, 0x76, 0xfb, 0x28, 0x7a, 0x30, 0x72, + 0x01, 0x20, 0x0f, 0x2c, 0x00, 0xd0, 0x00, 0x20, + 0x05, 0xb0, 0xf0, 0xbd, 0x01, 0x20, 0xfb, 0xe7, + 0x70, 0x78, 0x01, 0x00, 0x0d, 0x4a, 0x70, 0xb5, + 0x11, 0x68, 0x00, 0x20, 0x3c, 0x00, 0x58, 0x11, + 0x00, 0x00, 0x00, 0x29, 0x0e, 0xd0, 0x11, 0x7a, + 0x09, 0x06, 0x0b, 0xd5, 0x53, 0x7a, 0x94, 0x7a, + 0x03, 0x21, 0x01, 0x25, 0x2a, 0x1c, 0x8a, 0x40, + 0x1e, 0x1c, 0x16, 0x40, 0x03, 0xd0, 0x22, 0x40, + 0x01, 0xd1, 0x01, 0x20, 0x70, 0xbd, 0xff, 0x31, + 0x09, 0x06, 0x09, 0x16, 0xf2, 0xd5, 0x70, 0xbd, + 0x00, 0x00, 0x70, 0x78, 0x01, 0x00, 0x10, 0xb5, + 0x08, 0x4c, 0x20, 0x68, 0x00, 0x28, 0x3c, 0x00, + 0x94, 0x11, 0x00, 0x00, 0x04, 0xd0, 0x60, 0x68, + 0x00, 0x28, 0x01, 0xd1, 0x0b, 0xf0, 0xc0, 0xfb, + 0x00, 0x20, 0x00, 0x21, 0x00, 0x22, 0x07, 0xc4, + 0x0c, 0x3c, 0x01, 0x20, 0x60, 0x60, 0x10, 0xbd, + 0x70, 0x78, 0x01, 0x00, 0x01, 0x49, 0x01, 0x20, + 0x08, 0x60, 0x70, 0x47, 0x70, 0x78, 0x01, 0x00, + 0xf8, 0xb5, 0x0e, 0x4d, 0x04, 0x1c, 0x00, 0x20, + 0x68, 0x72, 0x20, 0x1c, 0x12, 0xf0, 0xde, 0xfc, + 0x3c, 0x00, 0xd0, 0x11, 0x00, 0x00, 0x00, 0x28, + 0x12, 0xd0, 0x00, 0x20, 0x03, 0x21, 0x01, 0x22, + 0x0f, 0x1a, 0x16, 0x1c, 0x23, 0x7a, 0xbe, 0x40, + 0x33, 0x40, 0x04, 0xd0, 0x6b, 0x7a, 0x16, 0x1c, + 0x86, 0x40, 0x33, 0x43, 0x6b, 0x72, 0x01, 0x30, + 0x00, 0x06, 0x00, 0x0e, 0x03, 0x28, 0xef, 0xd9, + 0xf8, 0xbd, 0x70, 0x78, 0x01, 0x00, 0x92, 0x00, + 0x51, 0x18, 0x8a, 0x7a, 0x12, 0x07, 0x12, 0x0f, + 0x02, 0x70, 0x3c, 0x00, 0x0c, 0x12, 0x00, 0x00, + 0xca, 0x7a, 0x12, 0x07, 0x12, 0x0f, 0x42, 0x70, + 0xca, 0x7a, 0x12, 0x09, 0x82, 0x70, 0x09, 0x7b, + 0x81, 0x80, 0x70, 0x47, 0x03, 0x4a, 0x0f, 0x21, + 0x52, 0x7a, 0x01, 0x20, 0x91, 0x43, 0x00, 0xd0, + 0x00, 0x20, 0x70, 0x47, 0x70, 0x78, 0x01, 0x00, + 0x40, 0x07, 0x05, 0x49, 0x40, 0x0f, 0x05, 0x4a, + 0x09, 0x56, 0x52, 0x7a, 0x01, 0x20, 0x0a, 0x40, + 0x00, 0xd1, 0x00, 0x20, 0x3c, 0x00, 0x48, 0x12, + 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, 0x5e, 0x46, + 0x01, 0x00, 0x70, 0x78, 0x01, 0x00, 0x12, 0x4a, + 0x70, 0xb5, 0x53, 0x7a, 0x94, 0x7a, 0xff, 0x20, + 0x03, 0x21, 0x01, 0x25, 0x2a, 0x1c, 0x8a, 0x40, + 0x1e, 0x1c, 0x16, 0x40, 0x14, 0xd0, 0x22, 0x40, + 0x12, 0xd1, 0x08, 0x06, 0x00, 0x0e, 0x07, 0xd0, + 0x01, 0x28, 0x07, 0xd0, 0x02, 0x28, 0x07, 0xd0, + 0x03, 0x28, 0x07, 0xd1, 0x07, 0x20, 0x3c, 0x00, + 0x84, 0x12, 0x00, 0x00, 0x70, 0xbd, 0x03, 0x20, + 0x70, 0xbd, 0x01, 0x20, 0x70, 0xbd, 0x05, 0x20, + 0x70, 0xbd, 0xff, 0x20, 0x70, 0xbd, 0xff, 0x31, + 0x09, 0x06, 0x09, 0x16, 0xe1, 0xd5, 0x70, 0xbd, + 0x70, 0x78, 0x01, 0x00, 0xf8, 0xb5, 0x04, 0x1c, + 0x13, 0x48, 0x0d, 0x1c, 0x81, 0x68, 0x00, 0x29, + 0x05, 0xd0, 0x01, 0x7b, 0x00, 0x29, 0x01, 0xd1, + 0x04, 0x73, 0x45, 0x73, 0xf8, 0xbd, 0x0f, 0x4e, + 0x3c, 0x00, 0xc0, 0x12, 0x00, 0x00, 0x31, 0x1c, + 0x20, 0x31, 0x8a, 0x79, 0x00, 0xab, 0x1a, 0x70, + 0xc9, 0x79, 0x59, 0x70, 0x42, 0x68, 0x00, 0x2a, + 0x07, 0xd0, 0x20, 0x02, 0x28, 0x43, 0x01, 0x1c, + 0x00, 0x20, 0xff, 0xf7, 0x7e, 0xf8, 0x00, 0x28, + 0x04, 0xd1, 0x2a, 0x1c, 0x21, 0x1c, 0x00, 0x20, + 0x11, 0xf0, 0x0f, 0xf8, 0x00, 0xab, 0x18, 0x88, + 0xf0, 0x84, 0xe2, 0xe7, 0x00, 0x00, 0x88, 0x5a, + 0x01, 0x00, 0x3c, 0x00, 0xfc, 0x12, 0x00, 0x00, + 0x00, 0x10, 0x07, 0x00, 0x80, 0xb5, 0x01, 0x21, + 0x81, 0x20, 0xff, 0xf7, 0xcd, 0xff, 0x80, 0xbd, + 0x01, 0x49, 0x01, 0x20, 0x88, 0x60, 0x70, 0x47, + 0x88, 0x5a, 0x01, 0x00, 0x05, 0x49, 0x80, 0xb5, + 0x00, 0x20, 0x88, 0x60, 0x08, 0x7b, 0x00, 0x28, + 0x02, 0xd0, 0x49, 0x7b, 0xff, 0xf7, 0xbc, 0xff, + 0x80, 0xbd, 0x00, 0x00, 0x88, 0x5a, 0x01, 0x00, + 0x02, 0x4a, 0x01, 0x1c, 0x3c, 0x00, 0x38, 0x13, + 0x00, 0x00, 0x50, 0x68, 0x51, 0x60, 0x70, 0x47, + 0x00, 0x00, 0x88, 0x5a, 0x01, 0x00, 0x10, 0xb5, + 0x0c, 0x1c, 0x07, 0xf0, 0x64, 0xfa, 0x04, 0x61, + 0x00, 0x20, 0x10, 0xbd, 0x00, 0x00, 0xff, 0xb5, + 0x0e, 0x1c, 0x1f, 0x1c, 0x38, 0x20, 0x81, 0xb0, + 0x00, 0xf0, 0x3d, 0xfa, 0x1d, 0x49, 0x04, 0x1c, + 0x48, 0x69, 0x00, 0x28, 0x01, 0xd1, 0x4c, 0x61, + 0x00, 0xe0, 0x04, 0x60, 0x30, 0x01, 0x3c, 0x00, + 0x74, 0x13, 0x00, 0x00, 0x00, 0x90, 0x00, 0x04, + 0x00, 0x0c, 0x00, 0xf0, 0x15, 0xfa, 0x05, 0x1c, + 0x00, 0x99, 0xff, 0xf7, 0x8b, 0xf8, 0x00, 0x20, + 0x73, 0x1e, 0x04, 0xe0, 0x01, 0x01, 0x4a, 0x19, + 0x10, 0x32, 0x6a, 0x50, 0x01, 0x30, 0x98, 0x42, + 0xf8, 0xd3, 0x00, 0x01, 0x2d, 0x50, 0x38, 0x21, + 0x20, 0x1c, 0xff, 0xf7, 0x7b, 0xf8, 0xa5, 0x60, + 0x65, 0x60, 0xe6, 0x85, 0x0c, 0x20, 0x60, 0x86, + 0x3c, 0x00, 0xb0, 0x13, 0x00, 0x00, 0xaf, 0x20, + 0x80, 0x01, 0xe0, 0x61, 0x0e, 0x20, 0xe0, 0x86, + 0x00, 0x20, 0x20, 0x60, 0x01, 0x98, 0xe0, 0x60, + 0x38, 0x68, 0x60, 0x61, 0x03, 0x99, 0x04, 0x48, + 0x08, 0x60, 0x04, 0x48, 0x38, 0x60, 0x05, 0xb0, + 0x00, 0x20, 0xf0, 0xbd, 0x00, 0x00, 0xfc, 0x5a, + 0x01, 0x00, 0xdd, 0x15, 0x01, 0x00, 0xfd, 0x16, + 0x01, 0x00, 0x02, 0x1c, 0x08, 0x1c, 0xf0, 0x2a, + 0x80, 0xb5, 0x3c, 0x00, 0xec, 0x13, 0x00, 0x00, + 0x04, 0xd0, 0xf1, 0x2a, 0x07, 0xd1, 0x06, 0xf0, + 0x09, 0xfb, 0x80, 0xbd, 0x07, 0xf0, 0x0c, 0xfa, + 0x0d, 0xf0, 0xa8, 0xfa, 0x80, 0xbd, 0x01, 0x21, + 0x02, 0x20, 0xff, 0xf7, 0x4d, 0xff, 0x80, 0xbd, + 0x01, 0x49, 0x00, 0x20, 0x48, 0x61, 0x70, 0x47, + 0xfc, 0x5a, 0x01, 0x00, 0x00, 0x28, 0x02, 0xd0, + 0x00, 0x29, 0x00, 0xd0, 0xc1, 0x60, 0x70, 0x47, + 0xf8, 0xb5, 0x17, 0x1c, 0x3c, 0x00, 0x28, 0x14, + 0x00, 0x00, 0x0e, 0x1c, 0x05, 0x1c, 0x1c, 0x1c, + 0x1c, 0x30, 0x07, 0xf0, 0xc8, 0xf8, 0x01, 0x69, + 0x42, 0x69, 0x80, 0x68, 0x89, 0x19, 0x89, 0x1a, + 0x81, 0x42, 0x06, 0xd2, 0x23, 0x1c, 0x3a, 0x1c, + 0x31, 0x1c, 0x28, 0x1c, 0x00, 0xf0, 0x05, 0xf8, + 0xf8, 0xbd, 0x00, 0x20, 0x38, 0x60, 0x20, 0x60, + 0xfa, 0xe7, 0xff, 0xb5, 0x85, 0xb0, 0x05, 0x98, + 0x01, 0x27, 0x0e, 0x1c, 0x1c, 0x30, 0x3c, 0x00, + 0x64, 0x14, 0x00, 0x00, 0x07, 0xf0, 0xae, 0xf8, + 0x04, 0x1c, 0x80, 0x88, 0x04, 0x30, 0x03, 0x90, + 0x2c, 0x48, 0x04, 0x90, 0x80, 0x79, 0x02, 0x90, + 0xa0, 0x69, 0xb0, 0x42, 0x17, 0xd2, 0x35, 0x1a, + 0x11, 0xe0, 0x03, 0x98, 0xff, 0xf7, 0x16, 0xfc, + 0x00, 0x28, 0x06, 0xd1, 0x01, 0x21, 0x8e, 0x20, + 0xff, 0xf7, 0x08, 0xff, 0x00, 0x25, 0x00, 0x27, + 0x05, 0xe0, 0x21, 0x68, 0x01, 0x60, 0x20, 0x60, + 0x3c, 0x00, 0xa0, 0x14, 0x00, 0x00, 0xa0, 0x69, + 0x01, 0x30, 0xa0, 0x61, 0x01, 0x3d, 0xeb, 0xd2, + 0x00, 0x2f, 0x35, 0xd0, 0xa0, 0x69, 0x80, 0x1b, + 0xa0, 0x61, 0x20, 0x69, 0x80, 0x19, 0x20, 0x61, + 0x61, 0x69, 0x40, 0x1a, 0xe1, 0x68, 0x88, 0x42, + 0x03, 0xd9, 0x07, 0x21, 0x8e, 0x20, 0xff, 0xf7, + 0xec, 0xfe, 0x25, 0x68, 0x2f, 0x1c, 0x70, 0x1e, + 0x01, 0x95, 0x00, 0xe0, 0x3f, 0x68, 0x01, 0x38, + 0xfc, 0xd2, 0x3c, 0x00, 0xdc, 0x14, 0x00, 0x00, + 0x38, 0x68, 0x20, 0x60, 0x02, 0x98, 0x04, 0x99, + 0x88, 0x71, 0x2e, 0x68, 0x2c, 0x60, 0x32, 0x1d, + 0x00, 0x92, 0x29, 0x1c, 0x20, 0x31, 0x01, 0x22, + 0x28, 0x1d, 0x05, 0x9b, 0x08, 0xf0, 0x7a, 0xfc, + 0xbd, 0x42, 0x01, 0xd0, 0x35, 0x1c, 0xf0, 0xe7, + 0x00, 0x20, 0x38, 0x61, 0x01, 0x98, 0x07, 0x99, + 0x04, 0x30, 0x08, 0x60, 0x08, 0x98, 0x04, 0x37, + 0x07, 0x60, 0x09, 0xb0, 0x3c, 0x00, 0x18, 0x15, + 0x00, 0x00, 0xf0, 0xbd, 0x02, 0x98, 0x04, 0x99, + 0x88, 0x71, 0xf9, 0xe7, 0x00, 0x00, 0x20, 0x10, + 0x07, 0x00, 0x38, 0xb5, 0x04, 0x1c, 0x15, 0x1c, + 0x00, 0x20, 0x0c, 0x60, 0x09, 0xe0, 0xe2, 0x68, + 0x20, 0x1c, 0x00, 0x92, 0xa3, 0x8a, 0x21, 0x68, + 0xa2, 0x69, 0x08, 0xf0, 0x56, 0xfc, 0x20, 0x1c, + 0xe4, 0x68, 0x00, 0x2c, 0xf3, 0xd1, 0x28, 0x60, + 0x38, 0xbd, 0x80, 0xb5, 0x0c, 0xe0, 0x3c, 0x00, + 0x54, 0x15, 0x00, 0x00, 0xc2, 0x68, 0x8a, 0x42, + 0x08, 0xd1, 0x00, 0x21, 0xc1, 0x60, 0x00, 0x28, + 0x03, 0xd1, 0x06, 0x21, 0x8e, 0x20, 0xff, 0xf7, + 0x9d, 0xfe, 0x80, 0xbd, 0x10, 0x1c, 0x00, 0x28, + 0xf7, 0xd0, 0xef, 0xe7, 0x10, 0xb5, 0x04, 0x1c, + 0x0c, 0xd0, 0xa0, 0x69, 0x00, 0x28, 0x06, 0xd1, + 0x20, 0x69, 0x00, 0x28, 0x03, 0xd0, 0x06, 0xf0, + 0xf7, 0xfd, 0x00, 0x20, 0x20, 0x61, 0x20, 0x1c, + 0x3c, 0x00, 0x90, 0x15, 0x00, 0x00, 0x06, 0xf0, + 0xf2, 0xfd, 0x10, 0xbd, 0x00, 0x00, 0x10, 0xb5, + 0x00, 0x28, 0x09, 0xd0, 0xc4, 0x68, 0x03, 0xe0, + 0xff, 0xf7, 0xe7, 0xff, 0x20, 0x1c, 0xf9, 0xe7, + 0x00, 0x2c, 0xf9, 0xd1, 0xff, 0xf7, 0xe1, 0xff, + 0x10, 0xbd, 0x01, 0x1c, 0x00, 0x20, 0x04, 0xe0, + 0x0a, 0x89, 0xc9, 0x68, 0x10, 0x18, 0x00, 0x04, + 0x00, 0x0c, 0x00, 0x29, 0xf8, 0xd1, 0x70, 0x47, + 0x00, 0x00, 0x3c, 0x00, 0xcc, 0x15, 0x00, 0x00, + 0x00, 0xe0, 0x08, 0x1c, 0xc1, 0x68, 0x00, 0x29, + 0xfb, 0xd1, 0x70, 0x47, 0xf8, 0xb5, 0x06, 0x1c, + 0x0c, 0x1c, 0x1c, 0x20, 0x00, 0xf0, 0x68, 0xfa, + 0x05, 0x1c, 0x00, 0x2e, 0x01, 0xd1, 0x00, 0x2c, + 0x02, 0xd1, 0x30, 0x1c, 0x01, 0x21, 0x03, 0xe0, + 0x20, 0x1c, 0x00, 0xf0, 0x5d, 0xfa, 0x00, 0x21, + 0x00, 0x22, 0x00, 0x92, 0x0a, 0x1c, 0x01, 0x1c, + 0x23, 0x1c, 0x28, 0x1c, 0x3c, 0x00, 0x08, 0x16, + 0x00, 0x00, 0x08, 0xf0, 0xf2, 0xfb, 0x28, 0x1c, + 0xf8, 0xbd, 0xb0, 0xb5, 0x03, 0x32, 0x92, 0x08, + 0x92, 0x00, 0x14, 0x04, 0x24, 0x0c, 0x09, 0x19, + 0x1d, 0x1c, 0xc9, 0x18, 0x09, 0x04, 0x09, 0x0c, + 0xff, 0xf7, 0xd7, 0xff, 0x01, 0x89, 0x02, 0x68, + 0x12, 0x19, 0x09, 0x1b, 0x49, 0x1b, 0x02, 0x60, + 0x01, 0x81, 0xb0, 0xbd, 0x00, 0x00, 0xf8, 0xb5, + 0x0a, 0x4c, 0xa0, 0x21, 0x20, 0x1c, 0x3c, 0x00, + 0x44, 0x16, 0x00, 0x00, 0xfe, 0xf7, 0x2a, 0xff, + 0x00, 0x20, 0x26, 0x1c, 0xa0, 0x36, 0x07, 0x4d, + 0x07, 0xe0, 0x0c, 0x21, 0x41, 0x43, 0x49, 0x19, + 0x0e, 0xc9, 0x27, 0x1d, 0x0e, 0xc7, 0x20, 0x34, + 0x01, 0x30, 0xa6, 0x42, 0xf5, 0xd1, 0xf8, 0xbd, + 0xd0, 0x5c, 0x01, 0x00, 0xc8, 0x3f, 0x01, 0x00, + 0xf7, 0xb5, 0xc4, 0x68, 0x06, 0x1c, 0x00, 0x25, + 0x00, 0x2c, 0x82, 0xb0, 0x23, 0xd0, 0x20, 0x89, + 0x3c, 0x00, 0x80, 0x16, 0x00, 0x00, 0x90, 0x42, + 0x20, 0xd3, 0xe1, 0x68, 0x87, 0x1a, 0x01, 0x91, + 0x00, 0x21, 0xe1, 0x60, 0x03, 0x99, 0x00, 0x20, + 0xff, 0xf7, 0xa1, 0xff, 0x05, 0x1c, 0x20, 0x89, + 0xc0, 0x1b, 0x20, 0x81, 0x2a, 0x68, 0x03, 0x99, + 0x30, 0x1c, 0x00, 0xf0, 0x16, 0xf8, 0x20, 0x89, + 0xc0, 0x19, 0x20, 0x81, 0x01, 0x99, 0x20, 0x1c, + 0xff, 0xf7, 0xb1, 0xfe, 0x21, 0x1c, 0x28, 0x1c, + 0xff, 0xf7, 0x3c, 0x00, 0xbc, 0x16, 0x00, 0x00, + 0xad, 0xfe, 0x29, 0x1c, 0x30, 0x1c, 0xff, 0xf7, + 0xa9, 0xfe, 0x01, 0x20, 0x00, 0x2d, 0x00, 0xd1, + 0x00, 0x20, 0x05, 0xb0, 0xf0, 0xbd, 0x00, 0x00, + 0xf7, 0xb5, 0x04, 0x1c, 0x0e, 0x1c, 0x00, 0x20, + 0x01, 0xe0, 0x20, 0x1c, 0x0c, 0x1c, 0xe1, 0x68, + 0x00, 0x29, 0xfa, 0xd1, 0x27, 0x89, 0xb7, 0x42, + 0x0a, 0xd3, 0xb8, 0x1b, 0x00, 0x04, 0x00, 0x0c, + 0x20, 0x81, 0x21, 0x68, 0x3c, 0x00, 0xf8, 0x16, + 0x00, 0x00, 0x09, 0x18, 0x02, 0x98, 0x32, 0x1c, + 0xfe, 0xf7, 0xfb, 0xfe, 0xfe, 0xbd, 0xf1, 0x1b, + 0x0d, 0x04, 0x2d, 0x0c, 0x00, 0x28, 0x19, 0xd0, + 0x01, 0x89, 0xa9, 0x42, 0x16, 0xd3, 0x49, 0x1b, + 0x09, 0x04, 0x09, 0x0c, 0x01, 0x81, 0x00, 0x68, + 0x41, 0x18, 0x02, 0x98, 0x2a, 0x1c, 0xfe, 0xf7, + 0xe8, 0xfe, 0x21, 0x68, 0x02, 0x98, 0x72, 0x1b, + 0x40, 0x19, 0xfe, 0xf7, 0xe2, 0xfe, 0x3c, 0x00, + 0x34, 0x17, 0x00, 0x00, 0x20, 0x89, 0xc0, 0x1b, + 0x20, 0x81, 0x20, 0x68, 0xc0, 0x19, 0x20, 0x60, + 0xdf, 0xe7, 0x03, 0x21, 0x8e, 0x20, 0xff, 0xf7, + 0xad, 0xfd, 0xda, 0xe7, 0xf8, 0xb5, 0x04, 0x1c, + 0x00, 0x26, 0x13, 0xe0, 0x21, 0x89, 0x00, 0x20, + 0xff, 0xf7, 0x3e, 0xff, 0x05, 0x1c, 0x22, 0x89, + 0x21, 0x68, 0x00, 0x68, 0xfe, 0xf7, 0xc8, 0xfe, + 0x00, 0x2e, 0x01, 0xd1, 0x2e, 0x1c, 0x03, 0xe0, + 0x3c, 0x00, 0x70, 0x17, 0x00, 0x00, 0x29, 0x1c, + 0x38, 0x1c, 0xff, 0xf7, 0x50, 0xfe, 0xe4, 0x68, + 0x2f, 0x1c, 0x00, 0x2c, 0xe9, 0xd1, 0x30, 0x1c, + 0xf8, 0xbd, 0xb0, 0xb5, 0x04, 0x1c, 0x00, 0x89, + 0x40, 0x1a, 0x05, 0x04, 0x20, 0x68, 0x2d, 0x0c, + 0x40, 0x18, 0x29, 0x1c, 0xff, 0xf7, 0x1f, 0xff, + 0x21, 0x89, 0x49, 0x1b, 0x21, 0x81, 0xe1, 0x68, + 0xc1, 0x60, 0xe0, 0x60, 0xb0, 0xbd, 0x10, 0xb5, + 0x03, 0x30, 0x3c, 0x00, 0xac, 0x17, 0x00, 0x00, + 0x09, 0x4a, 0x81, 0x08, 0x10, 0x68, 0x3d, 0x24, + 0x08, 0x4b, 0x64, 0x01, 0x89, 0x00, 0x09, 0x18, + 0x1b, 0x19, 0x99, 0x42, 0x01, 0xd8, 0x11, 0x60, + 0x10, 0xbd, 0x0f, 0x21, 0x80, 0x20, 0xff, 0xf7, + 0x6b, 0xfd, 0x00, 0x20, 0x10, 0xbd, 0x00, 0x00, + 0xb4, 0xcf, 0x01, 0x00, 0x14, 0xc8, 0x01, 0x00, + 0x10, 0xb5, 0x11, 0xf0, 0x61, 0xff, 0x04, 0x1c, + 0x03, 0xd1, 0x0d, 0x21, 0x3c, 0x00, 0xe8, 0x17, + 0x00, 0x00, 0x80, 0x20, 0xff, 0xf7, 0x5b, 0xfd, + 0x20, 0x1c, 0x10, 0xbd, 0x00, 0x00, 0xb0, 0xb5, + 0x01, 0x1f, 0x0b, 0x68, 0x0d, 0x48, 0x00, 0x22, + 0x83, 0x42, 0x04, 0xd0, 0x01, 0x32, 0x10, 0x30, + 0x03, 0x2a, 0xf9, 0xd3, 0x01, 0xe0, 0x03, 0x2a, + 0x06, 0xd3, 0x09, 0x24, 0x21, 0x1c, 0x80, 0x20, + 0xff, 0xf7, 0x45, 0xfd, 0x20, 0x1c, 0xb0, 0xbd, + 0x05, 0x4b, 0x00, 0x24, 0x9a, 0x79, 0x3c, 0x00, + 0x24, 0x18, 0x00, 0x00, 0x85, 0x68, 0x0d, 0x60, + 0x81, 0x60, 0x9a, 0x71, 0xf5, 0xe7, 0x00, 0x00, + 0x20, 0x57, 0x01, 0x00, 0x20, 0x10, 0x07, 0x00, + 0xb0, 0xb5, 0x00, 0x21, 0x10, 0x4a, 0x00, 0x23, + 0xd4, 0x68, 0x84, 0x42, 0x04, 0xd2, 0x01, 0x33, + 0x10, 0x32, 0x03, 0x2b, 0xf8, 0xd3, 0x01, 0xe0, + 0x03, 0x2b, 0x01, 0xd3, 0x04, 0x21, 0x0e, 0xe0, + 0x0a, 0x4c, 0xa3, 0x79, 0x90, 0x68, 0x00, 0x28, + 0x3c, 0x00, 0x60, 0x18, 0x00, 0x00, 0x02, 0xd1, + 0xa3, 0x71, 0x03, 0x21, 0x06, 0xe0, 0x05, 0x68, + 0x95, 0x60, 0xa3, 0x71, 0x00, 0x29, 0x01, 0xd1, + 0x04, 0xc0, 0xb0, 0xbd, 0x80, 0x20, 0xff, 0xf7, + 0x14, 0xfd, 0x00, 0x20, 0xb0, 0xbd, 0x20, 0x57, + 0x01, 0x00, 0x20, 0x10, 0x07, 0x00, 0xa0, 0x30, + 0x00, 0x8a, 0x40, 0x07, 0x40, 0x0f, 0x08, 0x28, + 0x0f, 0xd2, 0x01, 0xa3, 0x1b, 0x5c, 0x5b, 0x00, + 0x9f, 0x44, 0x3c, 0x00, 0x9c, 0x18, 0x00, 0x00, + 0x05, 0x03, 0x03, 0x05, 0x07, 0x07, 0x09, 0x09, + 0x01, 0x20, 0x70, 0x47, 0x00, 0x20, 0x70, 0x47, + 0x02, 0x20, 0x70, 0x47, 0x03, 0x20, 0x70, 0x47, + 0x04, 0x20, 0x70, 0x47, 0xb0, 0xb5, 0x10, 0x4d, + 0x68, 0x69, 0x00, 0x28, 0x07, 0xd0, 0x0e, 0x49, + 0x00, 0x22, 0x2c, 0x31, 0x03, 0xc9, 0x01, 0x43, + 0x03, 0x20, 0x06, 0xf0, 0xcf, 0xff, 0x0b, 0x4c, + 0x00, 0x22, 0x03, 0xcc, 0x3c, 0x00, 0xd8, 0x18, + 0x00, 0x00, 0x08, 0x3c, 0x01, 0x43, 0x03, 0x20, + 0x06, 0xf0, 0xaf, 0xff, 0x03, 0xcc, 0x08, 0x43, + 0x07, 0x49, 0x4a, 0x68, 0x02, 0x43, 0x4a, 0x60, + 0x8a, 0x68, 0x10, 0x43, 0x88, 0x60, 0x01, 0x20, + 0x68, 0x61, 0xb0, 0xbd, 0x00, 0x00, 0x64, 0x73, + 0x01, 0x00, 0xb0, 0x58, 0x01, 0x00, 0x10, 0x00, + 0x07, 0x00, 0xb0, 0xb5, 0x0c, 0x1c, 0x0f, 0xf0, + 0xa8, 0xfa, 0x05, 0x4d, 0xe8, 0x6a, 0x3c, 0x00, + 0x14, 0x19, 0x00, 0x00, 0x00, 0x28, 0x06, 0xd1, + 0x00, 0x2c, 0x04, 0xd0, 0x20, 0x1c, 0x0f, 0xf0, + 0xb7, 0xfd, 0x01, 0x20, 0x28, 0x70, 0xb0, 0xbd, + 0xf4, 0x6e, 0x01, 0x00, 0x05, 0x49, 0x80, 0xb5, + 0x88, 0x6a, 0x00, 0x28, 0x04, 0xda, 0x00, 0x20, + 0x88, 0x62, 0x01, 0x21, 0x0d, 0xf0, 0x42, 0xfd, + 0x80, 0xbd, 0x00, 0x00, 0xac, 0x7e, 0x01, 0x00, + 0xf8, 0xb5, 0x1e, 0x4d, 0x04, 0x1c, 0x00, 0x20, + 0x3c, 0x00, 0x50, 0x19, 0x00, 0x00, 0x68, 0x62, + 0xa8, 0x70, 0x1c, 0x48, 0x00, 0x78, 0xc0, 0x07, + 0x22, 0xd5, 0xb8, 0x20, 0x03, 0x59, 0x1a, 0x48, + 0x00, 0x78, 0x0e, 0x28, 0x09, 0xd1, 0x0a, 0x1c, + 0x80, 0x32, 0x06, 0xd0, 0x18, 0x4e, 0x0d, 0x20, + 0x32, 0x5c, 0x8a, 0x42, 0x01, 0xdd, 0x01, 0x38, + 0xfa, 0xd1, 0x59, 0x1e, 0x0b, 0x06, 0x1b, 0x0e, + 0xab, 0x70, 0xab, 0x62, 0x0e, 0x28, 0x0b, 0xd2, + 0x08, 0xe0, 0x3c, 0x00, 0x8c, 0x19, 0x00, 0x00, + 0x62, 0x18, 0xb0, 0x32, 0x12, 0x7b, 0x82, 0x42, + 0x02, 0xd8, 0x58, 0x1a, 0xa8, 0x62, 0x02, 0xe0, + 0x01, 0x39, 0x00, 0x29, 0xf4, 0xda, 0x0e, 0xf0, + 0x35, 0xf9, 0x00, 0x90, 0x00, 0xab, 0x18, 0x78, + 0x59, 0x78, 0x81, 0x42, 0x00, 0xd9, 0x58, 0x78, + 0xed, 0x30, 0xe8, 0x70, 0x01, 0x21, 0x20, 0x1c, + 0x0d, 0xf0, 0x02, 0xfd, 0xf8, 0xbd, 0x00, 0x00, + 0xac, 0x7e, 0x01, 0x00, 0x3c, 0x00, 0xc8, 0x19, + 0x00, 0x00, 0x1d, 0x75, 0x01, 0x00, 0x11, 0x67, + 0x01, 0x00, 0xc7, 0x52, 0x01, 0x00, 0x0e, 0x49, + 0x10, 0xb5, 0x08, 0x69, 0x8b, 0x68, 0xc2, 0x00, + 0xd4, 0x18, 0x62, 0x68, 0x00, 0x2a, 0x0f, 0xd1, + 0x01, 0x30, 0x08, 0x61, 0x07, 0x28, 0x01, 0xd1, + 0x00, 0x20, 0x08, 0x61, 0x20, 0x1c, 0x00, 0xf0, + 0x24, 0xf8, 0x05, 0x48, 0x21, 0x68, 0x54, 0x30, + 0x02, 0x6a, 0xfe, 0xf7, 0xec, 0xfc, 0x3c, 0x00, + 0x04, 0x1a, 0x00, 0x00, 0x10, 0xbd, 0x06, 0x21, + 0x06, 0x20, 0xff, 0xf7, 0x4b, 0xfc, 0x10, 0xbd, + 0x50, 0x6d, 0x01, 0x00, 0x08, 0x49, 0x09, 0x79, + 0xc9, 0x07, 0x08, 0x4a, 0x08, 0xd4, 0x00, 0xe0, + 0x08, 0x1c, 0xc1, 0x68, 0x00, 0x29, 0xfb, 0xd1, + 0x01, 0x89, 0x04, 0x31, 0x01, 0x81, 0x00, 0xe0, + 0x00, 0x20, 0xd0, 0x62, 0x70, 0x47, 0x00, 0x00, + 0x60, 0x80, 0x07, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x3c, 0x00, 0x40, 0x1a, 0x00, 0x00, 0x10, 0xb5, + 0x04, 0x1c, 0x19, 0x21, 0x89, 0x01, 0x00, 0x20, + 0xff, 0xf7, 0xc5, 0xfd, 0x01, 0x1c, 0x60, 0x60, + 0x20, 0x68, 0xff, 0xf7, 0xe0, 0xfc, 0x60, 0x68, + 0x21, 0x68, 0x08, 0x30, 0x08, 0x60, 0x10, 0xbd, + 0x00, 0x00, 0x0a, 0x28, 0x01, 0xda, 0x04, 0x20, + 0x04, 0xe0, 0x50, 0x28, 0x01, 0xda, 0x05, 0x20, + 0x00, 0xe0, 0x07, 0x20, 0x04, 0x4a, 0x11, 0x78, + 0x38, 0x23, 0x3c, 0x00, 0x7c, 0x1a, 0x00, 0x00, + 0xc0, 0x00, 0x18, 0x40, 0x99, 0x43, 0x08, 0x43, + 0x10, 0x70, 0x70, 0x47, 0x88, 0x00, 0x07, 0x00, + 0xb0, 0xb5, 0x05, 0x1c, 0x07, 0x48, 0x40, 0x68, + 0x08, 0xe0, 0x01, 0x69, 0xa9, 0x42, 0x04, 0xd1, + 0x44, 0x68, 0x05, 0xf0, 0xc7, 0xfd, 0x20, 0x1c, + 0x00, 0xe0, 0x40, 0x68, 0x00, 0x28, 0xf4, 0xd1, + 0xb0, 0xbd, 0x00, 0x00, 0x58, 0x75, 0x01, 0x00, + 0xf8, 0xb5, 0x00, 0x25, 0x3c, 0x00, 0xb8, 0x1a, + 0x00, 0x00, 0x06, 0xf0, 0x84, 0xfd, 0x11, 0x4f, + 0x04, 0x1c, 0xbe, 0x79, 0x20, 0x68, 0x00, 0x28, + 0x07, 0xd1, 0xa0, 0x88, 0x04, 0x30, 0xff, 0xf7, + 0xf2, 0xf8, 0x00, 0x28, 0x06, 0xd1, 0x01, 0x21, + 0x0f, 0xe0, 0x01, 0x68, 0x21, 0x60, 0xa1, 0x69, + 0x01, 0x39, 0xa1, 0x61, 0x10, 0xc0, 0x05, 0x1c, + 0x20, 0x69, 0x01, 0x30, 0x20, 0x61, 0x61, 0x69, + 0x40, 0x1a, 0xe1, 0x68, 0x88, 0x42, 0x3c, 0x00, + 0xf4, 0x1a, 0x00, 0x00, 0x03, 0xd9, 0x07, 0x21, + 0x8e, 0x20, 0xff, 0xf7, 0xd3, 0xfb, 0xbe, 0x71, + 0x28, 0x1c, 0xf8, 0xbd, 0x20, 0x10, 0x07, 0x00, + 0xb0, 0xb5, 0x09, 0xf0, 0xbb, 0xff, 0x2f, 0x4c, + 0x00, 0x28, 0x20, 0x74, 0x03, 0xd0, 0x01, 0x21, + 0x01, 0x20, 0x0a, 0xf0, 0x71, 0xfc, 0x2b, 0x4d, + 0x14, 0x35, 0x28, 0x68, 0x00, 0x28, 0x4d, 0xd0, + 0x01, 0x21, 0x0f, 0x20, 0x11, 0xf0, 0x82, 0xfd, + 0x3c, 0x00, 0x30, 0x1b, 0x00, 0x00, 0x28, 0x89, + 0x08, 0xf0, 0xfb, 0xff, 0x01, 0x1c, 0x01, 0x22, + 0x0f, 0x20, 0x11, 0xf0, 0x40, 0xfd, 0xe0, 0x78, + 0x01, 0x25, 0x02, 0x28, 0x36, 0xd1, 0x0a, 0xf0, + 0xc6, 0xf8, 0x00, 0x28, 0x0a, 0xd0, 0x0b, 0xf0, + 0x92, 0xfb, 0x1e, 0x49, 0x09, 0x68, 0x40, 0x18, + 0x11, 0xf0, 0x5f, 0xf8, 0x00, 0x28, 0x01, 0xd1, + 0x02, 0x20, 0x2f, 0xe0, 0xe0, 0x78, 0x02, 0x28, + 0x24, 0xd1, 0x3c, 0x00, 0x6c, 0x1b, 0x00, 0x00, + 0x60, 0x70, 0x25, 0x70, 0x60, 0x68, 0x01, 0x28, + 0x1c, 0xd0, 0x15, 0x48, 0x10, 0x38, 0x81, 0x7b, + 0x00, 0x29, 0x04, 0xd1, 0x85, 0x73, 0x0f, 0x20, + 0x13, 0x49, 0x10, 0xf0, 0x01, 0xfc, 0x08, 0xf0, + 0x4f, 0xfe, 0x00, 0x28, 0x07, 0xd0, 0x0e, 0x48, + 0x01, 0x21, 0x98, 0x38, 0x00, 0x69, 0x01, 0xf0, + 0xb7, 0xfd, 0x00, 0x28, 0x05, 0xd0, 0x01, 0x20, + 0x0e, 0xf0, 0x0c, 0xfd, 0x3c, 0x00, 0xa8, 0x1b, + 0x00, 0x00, 0x01, 0x20, 0x0e, 0xf0, 0x1d, 0xfc, + 0xb0, 0xbd, 0x05, 0xf0, 0xdc, 0xfe, 0xb0, 0xbd, + 0xe0, 0x78, 0x00, 0x28, 0x01, 0xd1, 0x25, 0x70, + 0xf7, 0xe7, 0x03, 0x20, 0x00, 0xe0, 0x04, 0x20, + 0x0d, 0xf0, 0x8d, 0xfa, 0xb0, 0xbd, 0x84, 0x66, + 0x01, 0x00, 0x6c, 0x57, 0x01, 0x00, 0xe9, 0x03, + 0x01, 0x00, 0x70, 0xb5, 0x04, 0x1c, 0x00, 0x21, + 0x00, 0x20, 0x0a, 0x4d, 0x00, 0xe0, 0x3c, 0x00, + 0xe4, 0x1b, 0x00, 0x00, 0x01, 0x31, 0xcb, 0x00, + 0x5a, 0x19, 0x16, 0x79, 0x01, 0x2e, 0x02, 0xd0, + 0x52, 0x79, 0xa2, 0x42, 0x02, 0xd0, 0x0b, 0x29, + 0xf4, 0xd3, 0x70, 0xbd, 0x0b, 0x29, 0xfc, 0xd2, + 0xc8, 0x00, 0x01, 0x21, 0x5a, 0x19, 0x28, 0x58, + 0x11, 0x71, 0x70, 0xbd, 0x38, 0x58, 0x01, 0x00, + 0x05, 0x48, 0x80, 0xb5, 0x00, 0x7f, 0x24, 0x23, + 0x04, 0x49, 0x58, 0x43, 0x40, 0x18, 0x00, 0x6a, + 0x3c, 0x00, 0x20, 0x1c, 0x00, 0x00, 0xfe, 0xf7, + 0xda, 0xfb, 0x80, 0xbd, 0x00, 0x00, 0xd4, 0x79, + 0x01, 0x00, 0x94, 0x46, 0x01, 0x00, 0x80, 0xb5, + 0x04, 0xf0, 0x37, 0xff, 0x00, 0x20, 0x11, 0xf0, + 0x84, 0xfc, 0x00, 0x20, 0x80, 0xbd, 0xb0, 0xb5, + 0x05, 0x4c, 0x05, 0x1c, 0x20, 0x6b, 0xe1, 0x6a, + 0x02, 0xf0, 0xe3, 0xfd, 0x29, 0x1c, 0xa0, 0x6a, + 0x02, 0xf0, 0x11, 0xfb, 0xb0, 0xbd, 0xa4, 0x6c, + 0x01, 0x00, 0x3c, 0x00, 0x5c, 0x1c, 0x00, 0x00, + 0xb0, 0xb5, 0x03, 0x1c, 0x08, 0x1c, 0x14, 0x1c, + 0x00, 0x2b, 0x0c, 0x4d, 0x09, 0xd0, 0x69, 0x69, + 0x89, 0x00, 0x01, 0x31, 0x0a, 0x04, 0x12, 0x0c, + 0x22, 0x80, 0x29, 0x1c, 0xfe, 0xf7, 0x3e, 0xfc, + 0x0a, 0xe0, 0x01, 0x1c, 0x28, 0x1c, 0x22, 0x88, + 0xfe, 0xf7, 0x38, 0xfc, 0x20, 0x88, 0x01, 0x28, + 0x02, 0xd9, 0x80, 0x08, 0x01, 0x38, 0x68, 0x61, + 0x01, 0x20, 0xb0, 0xbd, 0x3c, 0x00, 0x98, 0x1c, + 0x00, 0x00, 0x20, 0x6e, 0x01, 0x00, 0xf1, 0xb5, + 0x00, 0x98, 0x00, 0x26, 0xc1, 0x68, 0x08, 0x68, + 0x09, 0x89, 0x1c, 0x29, 0x34, 0xd3, 0xc1, 0x88, + 0xff, 0x23, 0x01, 0x33, 0x99, 0x42, 0x2f, 0xd1, + 0x01, 0x88, 0xc9, 0x1a, 0x2c, 0xd1, 0x41, 0x88, + 0x08, 0x29, 0x29, 0xd1, 0x01, 0x79, 0x06, 0x29, + 0x26, 0xd1, 0x41, 0x79, 0x04, 0x29, 0x23, 0xd1, + 0x00, 0x25, 0x00, 0x24, 0x07, 0x1c, 0x3c, 0x00, + 0xd4, 0x1c, 0x00, 0x00, 0x18, 0x37, 0x0b, 0xe0, + 0xa0, 0x00, 0x41, 0x18, 0x04, 0x31, 0x04, 0x22, + 0x38, 0x1c, 0xfe, 0xf7, 0x8b, 0xfb, 0x00, 0x28, + 0x01, 0xd1, 0x01, 0x25, 0x04, 0xe0, 0x01, 0x34, + 0x0a, 0x49, 0x48, 0x69, 0xa0, 0x42, 0xef, 0xd8, + 0x08, 0x49, 0x08, 0x78, 0x00, 0x28, 0x0a, 0xd0, + 0x01, 0x28, 0x01, 0xd0, 0x02, 0x28, 0x06, 0xd1, + 0x00, 0x2d, 0x04, 0xd1, 0x00, 0x98, 0xc0, 0x68, + 0x3c, 0x00, 0x10, 0x1d, 0x00, 0x00, 0xff, 0xf7, + 0x42, 0xfc, 0x01, 0x26, 0x30, 0x1c, 0xf8, 0xbd, + 0x00, 0x00, 0x20, 0x6e, 0x01, 0x00, 0x01, 0x48, + 0x40, 0x68, 0x70, 0x47, 0x00, 0x00, 0x20, 0x6e, + 0x01, 0x00, 0x02, 0x49, 0x48, 0x60, 0x01, 0x20, + 0x48, 0x61, 0x70, 0x47, 0x00, 0x00, 0x20, 0x6e, + 0x01, 0x00, 0x70, 0xb5, 0x04, 0x1c, 0x01, 0x26, + 0x03, 0xf0, 0xef, 0xfa, 0x25, 0x1c, 0x10, 0x35, + 0x00, 0x28, 0x3c, 0x00, 0x4c, 0x1d, 0x00, 0x00, + 0x04, 0xd0, 0x00, 0x20, 0x20, 0x77, 0x03, 0xf0, + 0xf1, 0xfb, 0x07, 0xe0, 0x03, 0xf0, 0x38, 0xfd, + 0x00, 0x28, 0x09, 0xd0, 0x01, 0x20, 0x20, 0x77, + 0x03, 0xf0, 0xce, 0xfc, 0x01, 0x1c, 0x06, 0x22, + 0x28, 0x1c, 0xfe, 0xf7, 0xc3, 0xfb, 0x02, 0xe0, + 0x02, 0x20, 0x20, 0x77, 0x00, 0x26, 0x30, 0x1c, + 0x70, 0xbd, 0x00, 0x00, 0x03, 0x48, 0x80, 0x7a, + 0xc0, 0x07, 0x03, 0x49, 0x3c, 0x00, 0x88, 0x1d, + 0x00, 0x00, 0xc0, 0x0f, 0x88, 0x62, 0x70, 0x47, + 0x00, 0x00, 0x40, 0x90, 0x07, 0x00, 0xa4, 0x6c, + 0x01, 0x00, 0x01, 0x49, 0x01, 0x20, 0x88, 0x62, + 0x70, 0x47, 0xa4, 0x6c, 0x01, 0x00, 0x06, 0x48, + 0x80, 0x7a, 0xc1, 0x07, 0x06, 0x4a, 0xc9, 0x0f, + 0x91, 0x62, 0x20, 0x21, 0x80, 0x07, 0x00, 0xd4, + 0x00, 0x21, 0xa0, 0x32, 0x11, 0x70, 0x70, 0x47, + 0x00, 0x00, 0x40, 0x90, 0x07, 0x00, 0x3c, 0x00, + 0xc4, 0x1d, 0x00, 0x00, 0xa4, 0x6c, 0x01, 0x00, + 0x07, 0x4a, 0x12, 0x68, 0x07, 0x4b, 0x9b, 0x69, + 0x1a, 0x40, 0x01, 0xd0, 0x01, 0x22, 0x00, 0xe0, + 0x00, 0x22, 0x0a, 0x60, 0x01, 0x21, 0x00, 0x2a, + 0x00, 0xd0, 0x00, 0x21, 0x01, 0x60, 0x70, 0x47, + 0x10, 0x00, 0x07, 0x00, 0xa4, 0x6c, 0x01, 0x00, + 0x01, 0x22, 0x02, 0x60, 0x0a, 0x60, 0x70, 0x47, + 0xb0, 0xb5, 0x0d, 0x1c, 0x01, 0x1c, 0x58, 0x31, + 0x3c, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x04, 0x1c, + 0x06, 0x22, 0x28, 0x1d, 0xfe, 0xf7, 0x77, 0xfb, + 0x21, 0x1c, 0x5e, 0x31, 0x06, 0x22, 0x28, 0x1c, + 0x0a, 0x30, 0xfe, 0xf7, 0x70, 0xfb, 0x21, 0x1c, + 0x64, 0x31, 0x06, 0x22, 0x28, 0x1c, 0x10, 0x30, + 0xfe, 0xf7, 0x69, 0xfb, 0xb0, 0xbd, 0xfe, 0xb5, + 0x00, 0x25, 0x1d, 0x72, 0x17, 0x1c, 0x0e, 0x1c, + 0xb2, 0x6d, 0x00, 0x21, 0x92, 0x19, 0x50, 0x32, + 0xd2, 0x7a, 0x3c, 0x00, 0x3c, 0x1e, 0x00, 0x00, + 0x1c, 0x1c, 0x5a, 0x72, 0x00, 0x78, 0x32, 0x1c, + 0x80, 0x32, 0xc0, 0x07, 0xc0, 0x17, 0x01, 0x30, + 0x01, 0x90, 0x08, 0x98, 0x02, 0x92, 0x00, 0x28, + 0x01, 0xd1, 0x30, 0x7f, 0x2b, 0xe0, 0x37, 0x48, + 0x00, 0x68, 0x00, 0x28, 0x00, 0xdd, 0x01, 0x1c, + 0x01, 0x98, 0x00, 0x28, 0x02, 0xd0, 0x08, 0x98, + 0x01, 0x28, 0x10, 0xd1, 0x02, 0x9a, 0x90, 0x6b, + 0x00, 0x28, 0x06, 0xd0, 0x3c, 0x00, 0x78, 0x1e, + 0x00, 0x00, 0x88, 0x42, 0x01, 0xd9, 0x45, 0x1a, + 0x01, 0x3d, 0x70, 0x19, 0xb0, 0x30, 0x03, 0xe0, + 0xb5, 0x6d, 0x01, 0x3d, 0x70, 0x19, 0x50, 0x30, + 0x00, 0x7b, 0x0f, 0xe0, 0x02, 0x9a, 0x10, 0x6a, + 0x00, 0x28, 0x07, 0xd0, 0x88, 0x42, 0x01, 0xd9, + 0x45, 0x1a, 0x01, 0x3d, 0x70, 0x19, 0xa0, 0x30, + 0x00, 0x79, 0x03, 0xe0, 0xbd, 0x69, 0x01, 0x3d, + 0x78, 0x19, 0x00, 0x7f, 0xa0, 0x72, 0x3c, 0x00, + 0xb4, 0x1e, 0x00, 0x00, 0x0e, 0xf0, 0x0c, 0xf8, + 0x0e, 0x28, 0x11, 0xd1, 0xa0, 0x7a, 0x08, 0xf0, + 0x67, 0xff, 0x00, 0x28, 0x0c, 0xd0, 0x78, 0x68, + 0x00, 0x28, 0x05, 0xd1, 0x1b, 0x48, 0x00, 0x25, + 0x00, 0x78, 0x08, 0xf0, 0x4b, 0xff, 0x02, 0xe0, + 0x45, 0x1e, 0x78, 0x19, 0x00, 0x7a, 0xa0, 0x72, + 0x02, 0x9a, 0x50, 0x69, 0x00, 0x28, 0x17, 0xd0, + 0x08, 0x98, 0x01, 0x28, 0x14, 0xd0, 0xa0, 0x7a, + 0x3c, 0x00, 0xf0, 0x1e, 0x00, 0x00, 0x08, 0xf0, + 0x4e, 0xff, 0x00, 0x28, 0x0f, 0xd0, 0x01, 0x98, + 0x00, 0x28, 0x07, 0xd0, 0x02, 0x20, 0x20, 0x72, + 0x70, 0x6c, 0x80, 0x19, 0x40, 0x30, 0xc0, 0x79, + 0x60, 0x72, 0x04, 0xe0, 0x7d, 0x68, 0x01, 0x3d, + 0x78, 0x19, 0x00, 0x7a, 0xa0, 0x72, 0x02, 0x9a, + 0xa0, 0x7a, 0x91, 0x69, 0x08, 0xf0, 0x51, 0xff, + 0x20, 0x60, 0x02, 0x9a, 0x60, 0x7a, 0x91, 0x69, + 0x08, 0xf0, 0x3c, 0x00, 0x2c, 0x1f, 0x00, 0x00, + 0x4b, 0xff, 0x60, 0x60, 0xa0, 0x7a, 0xe0, 0x72, + 0x25, 0x73, 0xfe, 0xbd, 0xd4, 0x7e, 0x01, 0x00, + 0x90, 0x57, 0x01, 0x00, 0x00, 0x06, 0x00, 0x0e, + 0x00, 0x2a, 0x8c, 0xb5, 0x01, 0xd0, 0x8a, 0x22, + 0x00, 0xe0, 0x88, 0x22, 0x00, 0xab, 0x1a, 0x80, + 0x0c, 0xf0, 0xc2, 0xf8, 0x01, 0x90, 0x68, 0x46, + 0x0b, 0xf0, 0xbc, 0xfa, 0x8c, 0xbd, 0x00, 0x00, + 0x01, 0x1c, 0x08, 0x48, 0x3c, 0x00, 0x68, 0x1f, + 0x00, 0x00, 0x80, 0xb5, 0x00, 0x68, 0x00, 0x28, + 0x09, 0xd0, 0x49, 0x68, 0x02, 0x20, 0x00, 0x29, + 0x00, 0xd1, 0x01, 0x20, 0x01, 0x06, 0x09, 0x0e, + 0x00, 0x20, 0x06, 0xf0, 0xd8, 0xff, 0x80, 0xbd, + 0x00, 0x00, 0x20, 0x67, 0x01, 0x00, 0x1c, 0xb5, + 0x01, 0x90, 0x04, 0x1c, 0x44, 0x30, 0x01, 0xaa, + 0x69, 0x46, 0x11, 0xf0, 0xb8, 0xfd, 0x00, 0x28, + 0x0b, 0xd0, 0xa0, 0x69, 0x00, 0x21, 0x3c, 0x00, + 0xa4, 0x1f, 0x00, 0x00, 0xc2, 0x07, 0xd2, 0x0f, + 0x02, 0x20, 0xff, 0xf7, 0xc9, 0xff, 0x00, 0x21, + 0x20, 0x1c, 0x0f, 0xf0, 0xd9, 0xfe, 0x1c, 0xbd, + 0x04, 0x21, 0x98, 0x20, 0xff, 0xf7, 0x72, 0xf9, + 0xf9, 0xe7, 0x00, 0x00, 0x8c, 0xb5, 0x00, 0xab, + 0x84, 0x21, 0x19, 0x80, 0x05, 0x4b, 0x02, 0x1c, + 0x18, 0x1c, 0x99, 0x8a, 0x0c, 0xf0, 0x8e, 0xf8, + 0x01, 0x90, 0x68, 0x46, 0x0b, 0xf0, 0x7c, 0xfa, + 0x3c, 0x00, 0xe0, 0x1f, 0x00, 0x00, 0x8c, 0xbd, + 0x00, 0x00, 0x70, 0x7c, 0x01, 0x00, 0x70, 0x47, + 0x00, 0x00, 0x06, 0x49, 0x80, 0xb5, 0xc9, 0x68, + 0x14, 0x23, 0x40, 0x31, 0x89, 0x7a, 0x04, 0x4a, + 0x59, 0x43, 0x89, 0x18, 0x80, 0x00, 0x08, 0x58, + 0xfe, 0xf7, 0xe9, 0xf9, 0x80, 0xbd, 0x70, 0x7c, + 0x01, 0x00, 0x54, 0x47, 0x01, 0x00, 0x80, 0xb5, + 0x00, 0x20, 0xff, 0xf7, 0xd6, 0xff, 0x80, 0xbd, + 0x00, 0x00, 0x3c, 0x00, 0x1c, 0x20, 0x00, 0x00, + 0x80, 0xb5, 0x12, 0x48, 0x11, 0x49, 0x80, 0x8a, + 0x0a, 0x8b, 0x00, 0x21, 0x00, 0x28, 0xc2, 0xb0, + 0x0c, 0xd1, 0x01, 0x2a, 0x05, 0xd0, 0x02, 0x2a, + 0x15, 0xd0, 0x00, 0xab, 0x5a, 0x80, 0x0e, 0x22, + 0x07, 0xe0, 0x02, 0x22, 0x00, 0xab, 0x5a, 0x80, + 0x99, 0x80, 0x04, 0xe0, 0x00, 0xab, 0x5a, 0x80, + 0x0d, 0x22, 0x00, 0xab, 0x9a, 0x80, 0x00, 0xab, + 0x18, 0x80, 0xff, 0x20, 0x3c, 0x00, 0x58, 0x20, + 0x00, 0x00, 0x98, 0x71, 0xd9, 0x71, 0x68, 0x46, + 0x00, 0xf0, 0xd1, 0xf9, 0x42, 0xb0, 0x80, 0xbd, + 0x00, 0x00, 0x70, 0x7c, 0x01, 0x00, 0x10, 0xb5, + 0x09, 0xf0, 0x5f, 0xfc, 0x00, 0x20, 0x05, 0xf0, + 0x2a, 0xf9, 0x03, 0x4c, 0xe0, 0x8a, 0x05, 0xf0, + 0x36, 0xf9, 0x20, 0x1c, 0x0f, 0xf0, 0xb3, 0xfe, + 0x10, 0xbd, 0x70, 0x7c, 0x01, 0x00, 0x1c, 0xb5, + 0x09, 0xf0, 0x4f, 0xfc, 0x07, 0x20, 0x3c, 0x00, + 0x94, 0x20, 0x00, 0x00, 0x00, 0xab, 0x07, 0x4c, + 0x18, 0x80, 0xe1, 0x8a, 0x20, 0x1c, 0x0c, 0xf0, + 0x0b, 0xf8, 0x01, 0x90, 0x68, 0x46, 0x0b, 0xf0, + 0x17, 0xfa, 0x20, 0x1c, 0x0f, 0xf0, 0x9e, 0xfe, + 0x1c, 0xbd, 0x00, 0x00, 0x70, 0x7c, 0x01, 0x00, + 0x80, 0xb5, 0x02, 0x21, 0x98, 0x20, 0xff, 0xf7, + 0xf1, 0xf8, 0x80, 0xbd, 0x10, 0xb5, 0x15, 0x4c, + 0xc2, 0xb0, 0xa0, 0x8a, 0x00, 0x28, 0x03, 0xd0, + 0x3c, 0x00, 0xd0, 0x20, 0x00, 0x00, 0x01, 0x28, + 0x1e, 0xd1, 0x02, 0x20, 0x00, 0xe0, 0x01, 0x20, + 0xe1, 0x68, 0x40, 0x31, 0x88, 0x72, 0x20, 0x69, + 0x08, 0xf0, 0x23, 0xfd, 0x02, 0x1c, 0x0c, 0x48, + 0x18, 0x38, 0x80, 0x88, 0xe1, 0x68, 0x0f, 0xf0, + 0xa4, 0xfe, 0xa0, 0x8a, 0x00, 0xab, 0x18, 0x80, + 0x01, 0x20, 0x58, 0x80, 0x00, 0x20, 0x98, 0x80, + 0xff, 0x21, 0x99, 0x71, 0xd8, 0x71, 0x68, 0x46, + 0x00, 0xf0, 0x3c, 0x00, 0x0c, 0x21, 0x00, 0x00, + 0x7b, 0xf9, 0x42, 0xb0, 0x10, 0xbd, 0x03, 0x21, + 0x98, 0x20, 0xff, 0xf7, 0xc5, 0xf8, 0xf8, 0xe7, + 0x70, 0x7c, 0x01, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x80, 0xb5, 0x03, 0x48, 0x0f, 0xf0, 0x60, 0xfe, + 0x00, 0x20, 0x05, 0xf0, 0xcd, 0xf8, 0x80, 0xbd, + 0x70, 0x7c, 0x01, 0x00, 0x80, 0xb5, 0x02, 0x48, + 0x0f, 0xf0, 0x56, 0xfe, 0x80, 0xbd, 0x00, 0x00, + 0x70, 0x7c, 0x01, 0x00, 0x3c, 0x00, 0x48, 0x21, + 0x00, 0x00, 0x80, 0xb5, 0x02, 0x21, 0x98, 0x20, + 0xff, 0xf7, 0xa9, 0xf8, 0x80, 0xbd, 0x80, 0xb5, + 0x03, 0x20, 0xff, 0xf7, 0x34, 0xff, 0x80, 0xbd, + 0x00, 0x00, 0xf0, 0xb5, 0x21, 0x4e, 0x00, 0x27, + 0xb1, 0x8a, 0x30, 0x1c, 0x00, 0x25, 0x04, 0x24, + 0x00, 0x29, 0x00, 0x8b, 0xc3, 0xb0, 0x1e, 0xd1, + 0x01, 0x28, 0x07, 0xd0, 0x31, 0x1c, 0x49, 0x8b, + 0x02, 0x28, 0x12, 0xd1, 0x00, 0x29, 0x3c, 0x00, + 0x84, 0x21, 0x00, 0x00, 0x07, 0xd1, 0x00, 0x24, + 0x05, 0xe0, 0x00, 0x24, 0x01, 0x25, 0x02, 0x20, + 0x00, 0xab, 0xd8, 0x80, 0x1f, 0x81, 0x0f, 0xf0, + 0x7f, 0xff, 0x00, 0x2c, 0x10, 0xd1, 0xf1, 0x68, + 0x05, 0x20, 0x40, 0x31, 0x88, 0x72, 0x0e, 0xe0, + 0x00, 0x29, 0x1a, 0xd1, 0x00, 0xab, 0xd8, 0x80, + 0x0e, 0x20, 0x02, 0xe0, 0x00, 0xab, 0xd8, 0x80, + 0x0d, 0x20, 0x00, 0xab, 0x18, 0x81, 0x07, 0xe0, + 0x3c, 0x00, 0xc0, 0x21, 0x00, 0x00, 0x30, 0x1c, + 0x0f, 0xf0, 0x13, 0xfe, 0x20, 0x1c, 0xff, 0xf7, + 0xfc, 0xfe, 0x00, 0x2d, 0x08, 0xd0, 0xb0, 0x8a, + 0x00, 0xab, 0x98, 0x80, 0xff, 0x20, 0x98, 0x72, + 0xdf, 0x72, 0x01, 0xa8, 0x00, 0xf0, 0x11, 0xf9, + 0x43, 0xb0, 0xf0, 0xbd, 0x00, 0x00, 0x70, 0x7c, + 0x01, 0x00, 0x10, 0xb5, 0x00, 0x20, 0x05, 0xf0, + 0x6c, 0xf8, 0x04, 0x4c, 0xe0, 0x8a, 0x05, 0xf0, + 0x78, 0xf8, 0x3c, 0x00, 0xfc, 0x21, 0x00, 0x00, + 0x0f, 0xf0, 0x4c, 0xff, 0x20, 0x1c, 0x0f, 0xf0, + 0xf3, 0xfd, 0x10, 0xbd, 0x70, 0x7c, 0x01, 0x00, + 0x80, 0xb5, 0x04, 0x20, 0xff, 0xf7, 0xd8, 0xfe, + 0x01, 0x48, 0x0f, 0xf0, 0xe9, 0xfd, 0x80, 0xbd, + 0x70, 0x7c, 0x01, 0x00, 0x80, 0xb5, 0x02, 0x20, + 0xff, 0xf7, 0xce, 0xfe, 0x01, 0x20, 0x05, 0xf0, + 0x5f, 0xf8, 0x02, 0x48, 0x0f, 0xf0, 0xdc, 0xfd, + 0x80, 0xbd, 0x00, 0x00, 0x3c, 0x00, 0x38, 0x22, + 0x00, 0x00, 0x70, 0x7c, 0x01, 0x00, 0x80, 0xb5, + 0x03, 0x20, 0xff, 0xf7, 0xc0, 0xfe, 0x80, 0xbd, + 0x00, 0x00, 0xb0, 0xb5, 0x1d, 0x4d, 0xc2, 0xb0, + 0x28, 0x8b, 0x00, 0xab, 0xff, 0x21, 0x58, 0x80, + 0x99, 0x71, 0x00, 0x21, 0xd9, 0x71, 0xaa, 0x8a, + 0x00, 0x24, 0x01, 0x2a, 0x18, 0xd1, 0x2a, 0x1c, + 0x52, 0x8b, 0x02, 0x28, 0x0f, 0xd1, 0x00, 0x2a, + 0x16, 0xd1, 0x03, 0x20, 0x58, 0x80, 0x3c, 0x00, + 0x74, 0x22, 0x00, 0x00, 0x99, 0x80, 0x2c, 0x1c, + 0xff, 0x22, 0x98, 0x1d, 0xe9, 0x69, 0xfe, 0xf7, + 0x3b, 0xf9, 0xe1, 0x68, 0x04, 0x20, 0x40, 0x31, + 0x88, 0x72, 0x10, 0xe0, 0x00, 0x2a, 0x06, 0xd1, + 0x01, 0x24, 0x0e, 0x20, 0x01, 0xe0, 0x01, 0x24, + 0x0d, 0x20, 0x00, 0xab, 0x98, 0x80, 0x28, 0x1c, + 0x0f, 0xf0, 0xa4, 0xfd, 0x04, 0x20, 0xff, 0xf7, + 0x8d, 0xfe, 0x00, 0x2c, 0x05, 0xd0, 0xa8, 0x8a, + 0x3c, 0x00, 0xb0, 0x22, 0x00, 0x00, 0x00, 0xab, + 0x18, 0x80, 0x68, 0x46, 0x00, 0xf0, 0xa5, 0xf8, + 0x42, 0xb0, 0xb0, 0xbd, 0x00, 0x00, 0x70, 0x7c, + 0x01, 0x00, 0x10, 0xb5, 0x00, 0x20, 0x05, 0xf0, + 0x00, 0xf8, 0x03, 0x4c, 0xe0, 0x8a, 0x05, 0xf0, + 0x0c, 0xf8, 0x20, 0x1c, 0x0f, 0xf0, 0x89, 0xfd, + 0x10, 0xbd, 0x70, 0x7c, 0x01, 0x00, 0x80, 0xb5, + 0x04, 0x20, 0xff, 0xf7, 0x6e, 0xfe, 0x01, 0x48, + 0x0f, 0xf0, 0x3c, 0x00, 0xec, 0x22, 0x00, 0x00, + 0x7f, 0xfd, 0x80, 0xbd, 0x70, 0x7c, 0x01, 0x00, + 0x80, 0xb5, 0x02, 0x20, 0xff, 0xf7, 0x64, 0xfe, + 0x01, 0x20, 0x04, 0xf0, 0xf5, 0xff, 0x02, 0x48, + 0x0f, 0xf0, 0x72, 0xfd, 0x80, 0xbd, 0x00, 0x00, + 0x70, 0x7c, 0x01, 0x00, 0x80, 0xb5, 0x03, 0x20, + 0xff, 0xf7, 0x56, 0xfe, 0x80, 0xbd, 0x00, 0x00, + 0xb0, 0xb5, 0x19, 0x4d, 0x04, 0x24, 0xa9, 0x8a, + 0x28, 0x1c, 0x02, 0x8b, 0x3c, 0x00, 0x28, 0x23, + 0x00, 0x00, 0xc2, 0xb0, 0x01, 0x29, 0x14, 0xd1, + 0x40, 0x8b, 0x04, 0x2a, 0x0b, 0xd1, 0x00, 0x28, + 0x00, 0xd1, 0x00, 0x24, 0x0f, 0xf0, 0xad, 0xfe, + 0x00, 0x2c, 0x19, 0xd1, 0xe9, 0x68, 0x05, 0x20, + 0x40, 0x31, 0x88, 0x72, 0x17, 0xe0, 0x00, 0x28, + 0x10, 0xd1, 0x00, 0xab, 0x5a, 0x80, 0x0e, 0x20, + 0x02, 0xe0, 0x00, 0xab, 0x5a, 0x80, 0x0d, 0x20, + 0x00, 0xab, 0x98, 0x80, 0x19, 0x80, 0x3c, 0x00, + 0x64, 0x23, 0x00, 0x00, 0xff, 0x20, 0x98, 0x71, + 0x00, 0x20, 0xd8, 0x71, 0x68, 0x46, 0x00, 0xf0, + 0x49, 0xf8, 0x42, 0xb0, 0xb0, 0xbd, 0x28, 0x1c, + 0x0f, 0xf0, 0x38, 0xfd, 0x20, 0x1c, 0xff, 0xf7, + 0x21, 0xfe, 0xf6, 0xe7, 0x70, 0x7c, 0x01, 0x00, + 0x10, 0xb5, 0x00, 0x20, 0x04, 0xf0, 0x9e, 0xff, + 0x03, 0x4c, 0xe0, 0x8a, 0x04, 0xf0, 0xaa, 0xff, + 0x20, 0x1c, 0x0f, 0xf0, 0x27, 0xfd, 0x10, 0xbd, + 0x3c, 0x00, 0xa0, 0x23, 0x00, 0x00, 0x70, 0x7c, + 0x01, 0x00, 0x80, 0xb5, 0x04, 0x20, 0xff, 0xf7, + 0x0c, 0xfe, 0x01, 0x48, 0x0f, 0xf0, 0x1d, 0xfd, + 0x80, 0xbd, 0x70, 0x7c, 0x01, 0x00, 0x80, 0xb5, + 0x02, 0x20, 0xff, 0xf7, 0x02, 0xfe, 0x01, 0x20, + 0x04, 0xf0, 0x93, 0xff, 0x02, 0x48, 0x0f, 0xf0, + 0x10, 0xfd, 0x80, 0xbd, 0x00, 0x00, 0x70, 0x7c, + 0x01, 0x00, 0xb0, 0xb5, 0x0a, 0x4d, 0x01, 0x1c, + 0x44, 0x31, 0x3c, 0x00, 0xdc, 0x23, 0x00, 0x00, + 0x04, 0x1c, 0x06, 0x22, 0x28, 0x1c, 0xfe, 0xf7, + 0x89, 0xf8, 0xec, 0x60, 0x20, 0x69, 0x03, 0xf0, + 0x97, 0xf8, 0x01, 0x1c, 0x06, 0x22, 0xa8, 0x18, + 0xfe, 0xf7, 0x80, 0xf8, 0x04, 0x20, 0xff, 0xf7, + 0xf7, 0xfd, 0xb0, 0xbd, 0x70, 0x7c, 0x01, 0x00, + 0x90, 0xb5, 0x04, 0x1c, 0x80, 0x88, 0x93, 0xb0, + 0x00, 0x28, 0x06, 0xd0, 0x15, 0x49, 0x06, 0x22, + 0x48, 0x80, 0x18, 0x31, 0x3c, 0x00, 0x18, 0x24, + 0x00, 0x00, 0x88, 0x1f, 0xfe, 0xf7, 0x6d, 0xf8, + 0x68, 0x46, 0x0c, 0xf0, 0x14, 0xf8, 0x20, 0x88, + 0x01, 0x28, 0x08, 0xd1, 0x60, 0x88, 0x03, 0x28, + 0x05, 0xd1, 0xa0, 0x88, 0x00, 0x28, 0x02, 0xd1, + 0x06, 0x20, 0x0c, 0xa9, 0x08, 0x70, 0xa0, 0x79, + 0x06, 0x21, 0xff, 0x28, 0x04, 0xd0, 0xe0, 0x79, + 0x00, 0x28, 0x01, 0xd0, 0x01, 0x1c, 0x08, 0x31, + 0x0b, 0x20, 0x08, 0xaa, 0x50, 0x72, 0x3c, 0x00, + 0x54, 0x24, 0x00, 0x00, 0x20, 0x1c, 0x08, 0xf0, + 0x3b, 0xff, 0x03, 0x90, 0x68, 0x46, 0x0b, 0xf0, + 0x31, 0xf8, 0x13, 0xb0, 0x90, 0xbd, 0x00, 0x00, + 0x58, 0x7c, 0x01, 0x00, 0x07, 0x4b, 0x1a, 0x78, + 0x82, 0x42, 0x01, 0xd0, 0x00, 0x29, 0x07, 0xd0, + 0xff, 0x20, 0x18, 0x70, 0x04, 0x48, 0x01, 0x88, + 0x01, 0x22, 0x52, 0x03, 0x91, 0x43, 0x01, 0x80, + 0x70, 0x47, 0x00, 0x00, 0x4c, 0x7b, 0x01, 0x00, + 0x3c, 0x00, 0x90, 0x24, 0x00, 0x00, 0x32, 0x80, + 0x07, 0x00, 0x10, 0xb5, 0x04, 0x1c, 0x0c, 0x23, + 0x07, 0x49, 0x58, 0x43, 0x40, 0x18, 0x00, 0x79, + 0x0a, 0xf0, 0x4f, 0xf9, 0x01, 0x20, 0x03, 0x49, + 0xa0, 0x40, 0x08, 0x39, 0x0a, 0x78, 0x10, 0x43, + 0x08, 0x70, 0x10, 0xbd, 0x00, 0x00, 0x74, 0x7a, + 0x01, 0x00, 0x03, 0x4a, 0x00, 0x21, 0x11, 0x54, + 0x80, 0x00, 0x30, 0x32, 0x10, 0x58, 0x01, 0x70, + 0x70, 0x47, 0x3c, 0x00, 0xcc, 0x24, 0x00, 0x00, + 0xe0, 0x7a, 0x01, 0x00, 0x10, 0xb5, 0x04, 0x1c, + 0x05, 0x28, 0x01, 0xd3, 0xfe, 0xf7, 0x12, 0xff, + 0x20, 0x1c, 0xff, 0xf7, 0xed, 0xff, 0x00, 0x21, + 0x20, 0x1c, 0x0e, 0xf0, 0x89, 0xfb, 0x10, 0xbd, + 0x05, 0x49, 0x80, 0xb5, 0x88, 0x60, 0x08, 0x7f, + 0x24, 0x23, 0x04, 0x49, 0x58, 0x43, 0x08, 0x58, + 0xfd, 0xf7, 0x6c, 0xff, 0x80, 0xbd, 0x00, 0x00, + 0xd4, 0x79, 0x01, 0x00, 0x3c, 0x00, 0x08, 0x25, + 0x00, 0x00, 0x94, 0x46, 0x01, 0x00, 0x80, 0xb5, + 0x01, 0x21, 0x91, 0x20, 0xfe, 0xf7, 0xc7, 0xfe, + 0x80, 0xbd, 0x02, 0x4a, 0x11, 0x68, 0x81, 0x43, + 0x11, 0x60, 0x70, 0x47, 0x00, 0x00, 0x78, 0x6e, + 0x01, 0x00, 0x80, 0xb5, 0xfe, 0xf7, 0xe9, 0xfe, + 0x80, 0xbd, 0x80, 0xb5, 0xfe, 0xf7, 0xe5, 0xfe, + 0x80, 0xbd, 0x80, 0xb5, 0x00, 0xf0, 0x31, 0xfa, + 0x80, 0xbd, 0x03, 0x49, 0x80, 0xb5, 0x3c, 0x00, + 0x44, 0x25, 0x00, 0x00, 0x04, 0x20, 0x88, 0x60, + 0x00, 0xf0, 0xd0, 0xf9, 0x80, 0xbd, 0x00, 0x00, + 0x00, 0x30, 0x07, 0x00, 0x80, 0xb5, 0x00, 0xf0, + 0x99, 0xfa, 0x80, 0xbd, 0x80, 0xb5, 0x00, 0xf0, + 0x99, 0xfb, 0x80, 0xbd, 0x38, 0xb5, 0x20, 0x28, + 0x15, 0xd2, 0x0d, 0x4c, 0x22, 0x1c, 0x20, 0x32, + 0x95, 0x79, 0x00, 0xab, 0x1d, 0x70, 0xd2, 0x79, + 0x5a, 0x70, 0x0a, 0x4b, 0x82, 0x00, 0x99, 0x50, + 0x3c, 0x00, 0x80, 0x25, 0x00, 0x00, 0x01, 0x21, + 0x81, 0x40, 0x08, 0x48, 0x01, 0x60, 0x42, 0x68, + 0x11, 0x43, 0x41, 0x60, 0x00, 0xab, 0x18, 0x88, + 0xe0, 0x84, 0x38, 0xbd, 0x01, 0x21, 0xff, 0x20, + 0xfe, 0xf7, 0x83, 0xfe, 0xf9, 0xe7, 0x00, 0x10, + 0x07, 0x00, 0x30, 0x74, 0x01, 0x00, 0x00, 0x40, + 0x07, 0x00, 0x20, 0x28, 0x09, 0xd2, 0x05, 0x49, + 0x06, 0x4b, 0x82, 0x00, 0x99, 0x50, 0x05, 0x4a, + 0x51, 0x68, 0x3c, 0x00, 0xbc, 0x25, 0x00, 0x00, + 0x01, 0x23, 0x83, 0x40, 0x99, 0x43, 0x51, 0x60, + 0x70, 0x47, 0x00, 0x00, 0xa9, 0x75, 0x00, 0x00, + 0x30, 0x74, 0x01, 0x00, 0x00, 0x40, 0x07, 0x00, + 0x02, 0x4a, 0x11, 0x68, 0x08, 0x43, 0x10, 0x60, + 0x70, 0x47, 0x00, 0x00, 0x78, 0x6e, 0x01, 0x00, + 0x0b, 0x48, 0x01, 0x68, 0x03, 0x22, 0x12, 0x04, + 0x11, 0x43, 0x01, 0x60, 0x01, 0x68, 0x07, 0x22, + 0x12, 0x06, 0x91, 0x43, 0x3c, 0x00, 0xf8, 0x25, + 0x00, 0x00, 0x01, 0x22, 0x52, 0x06, 0x89, 0x18, + 0x01, 0x60, 0x01, 0x68, 0x12, 0x0c, 0x11, 0x43, + 0x01, 0x60, 0x01, 0x68, 0x52, 0x08, 0x11, 0x43, + 0x01, 0x60, 0x70, 0x47, 0x00, 0x00, 0x80, 0x00, + 0x07, 0x00, 0xfe, 0xb5, 0x1c, 0x4e, 0x05, 0x1c, + 0xb0, 0x8a, 0xf2, 0x68, 0x12, 0xd0, 0x01, 0x24, + 0x00, 0x29, 0x09, 0xd1, 0x11, 0x6d, 0x02, 0xaa, + 0x01, 0xab, 0xfe, 0xf7, 0xf8, 0xfe, 0x3c, 0x00, + 0x34, 0x26, 0x00, 0x00, 0x02, 0x98, 0x00, 0x28, + 0x01, 0xd0, 0x00, 0x24, 0x0b, 0xe0, 0x01, 0xaa, + 0x02, 0xa9, 0x28, 0x1c, 0xfe, 0xf7, 0x70, 0xff, + 0x05, 0xe0, 0x11, 0x6d, 0x02, 0xaa, 0x00, 0x24, + 0x01, 0xab, 0xfe, 0xf7, 0x01, 0xff, 0x0e, 0x49, + 0x08, 0x1c, 0x20, 0x30, 0x82, 0x79, 0x00, 0xab, + 0x1a, 0x70, 0xc0, 0x79, 0x58, 0x70, 0x30, 0x68, + 0x00, 0x28, 0x02, 0xd1, 0x02, 0x98, 0x30, 0x60, + 0x3c, 0x00, 0x70, 0x26, 0x00, 0x00, 0x02, 0xe0, + 0x02, 0x98, 0x72, 0x68, 0xd0, 0x60, 0x01, 0x98, + 0x00, 0xab, 0x70, 0x60, 0x18, 0x88, 0xc8, 0x84, + 0xf0, 0x68, 0xc0, 0x6c, 0xf0, 0x60, 0x20, 0x1c, + 0xfe, 0xbd, 0x24, 0x7e, 0x01, 0x00, 0x00, 0x10, + 0x07, 0x00, 0xf8, 0xb5, 0x04, 0x1c, 0x54, 0x27, + 0x1d, 0x4e, 0x00, 0x20, 0x30, 0x60, 0x70, 0x60, + 0x67, 0x43, 0x38, 0x04, 0x15, 0x1c, 0x00, 0x0c, + 0xb1, 0x82, 0x3c, 0x00, 0xac, 0x26, 0x00, 0x00, + 0xff, 0xf7, 0x96, 0xf8, 0x08, 0x21, 0x30, 0x61, + 0x00, 0x26, 0x17, 0x4a, 0x14, 0xe0, 0x03, 0x1c, + 0x24, 0x33, 0x42, 0x61, 0x03, 0x61, 0xc6, 0x61, + 0x01, 0x83, 0x08, 0x33, 0x03, 0x60, 0xb1, 0x23, + 0x43, 0x60, 0x03, 0x1c, 0x64, 0x33, 0xc3, 0x60, + 0x0c, 0x23, 0x03, 0x81, 0x03, 0x1c, 0x54, 0x33, + 0x4c, 0x30, 0x28, 0xc0, 0x01, 0x3c, 0x18, 0x1c, + 0x00, 0x2c, 0xe8, 0xd1, 0x3c, 0x00, 0xe8, 0x26, + 0x00, 0x00, 0x09, 0x4e, 0x07, 0x22, 0x30, 0x69, + 0xd2, 0x43, 0xc1, 0x19, 0x50, 0x50, 0x02, 0x1c, + 0x10, 0x32, 0x80, 0x39, 0x8a, 0x63, 0xf0, 0x60, + 0xb0, 0x60, 0x00, 0x21, 0x00, 0x20, 0xff, 0xf7, + 0x88, 0xff, 0x30, 0x69, 0xf0, 0x60, 0xb0, 0x60, + 0xf8, 0xbd, 0x24, 0x7e, 0x01, 0x00, 0x91, 0x00, + 0x05, 0x00, 0x01, 0x48, 0x40, 0x6a, 0x70, 0x47, + 0x00, 0x00, 0xe8, 0x7d, 0x01, 0x00, 0x3c, 0x00, + 0x24, 0x27, 0x00, 0x00, 0x01, 0x48, 0x00, 0x88, + 0x70, 0x47, 0x00, 0x00, 0xfc, 0x6b, 0x01, 0x00, + 0x06, 0x49, 0x80, 0xb5, 0x08, 0x88, 0x01, 0x30, + 0x08, 0x80, 0x05, 0x49, 0x08, 0x20, 0x08, 0x60, + 0x04, 0x49, 0x88, 0x69, 0x88, 0x61, 0x00, 0xf0, + 0x21, 0xf8, 0x80, 0xbd, 0xfc, 0x6b, 0x01, 0x00, + 0x00, 0x10, 0x07, 0x00, 0x00, 0x30, 0x07, 0x00, + 0x03, 0x4a, 0x01, 0x20, 0x12, 0x1d, 0x06, 0xca, + 0x3c, 0x00, 0x60, 0x27, 0x00, 0x00, 0x91, 0x42, + 0x00, 0xd1, 0x00, 0x20, 0x70, 0x47, 0xe8, 0x7d, + 0x01, 0x00, 0x06, 0x48, 0x00, 0xb5, 0xc0, 0x7c, + 0x00, 0x28, 0x03, 0xd1, 0xff, 0xf7, 0xef, 0xff, + 0x00, 0x28, 0x01, 0xd0, 0x01, 0x20, 0x00, 0xbd, + 0x00, 0x20, 0x00, 0xbd, 0x00, 0x00, 0xa0, 0x80, + 0x07, 0x00, 0x10, 0xb5, 0x04, 0x1c, 0x80, 0x07, + 0x02, 0xd5, 0x06, 0xf0, 0x3e, 0xfd, 0x03, 0xe0, + 0xe0, 0x07, 0x3c, 0x00, 0x9c, 0x27, 0x00, 0x00, + 0x01, 0xd5, 0x06, 0xf0, 0xe3, 0xfd, 0x60, 0x07, + 0x01, 0xd5, 0xfe, 0xf7, 0xab, 0xfd, 0x10, 0xbd, + 0x02, 0x4a, 0x01, 0x1c, 0x10, 0x68, 0x11, 0x60, + 0x70, 0x47, 0x00, 0x00, 0xe8, 0x7d, 0x01, 0x00, + 0x38, 0xb5, 0x20, 0x4d, 0x2c, 0x1c, 0x20, 0x34, + 0xa0, 0x79, 0x00, 0xab, 0x18, 0x70, 0xe0, 0x79, + 0x58, 0x70, 0xfe, 0xf7, 0x27, 0xfa, 0x00, 0xab, + 0x18, 0x88, 0xe8, 0x84, 0x3c, 0x00, 0xd8, 0x27, + 0x00, 0x00, 0x1a, 0x48, 0x81, 0x78, 0x08, 0x22, + 0x91, 0x43, 0x81, 0x70, 0x81, 0x78, 0x11, 0x43, + 0x81, 0x70, 0x17, 0x48, 0x41, 0x68, 0x80, 0x22, + 0x91, 0x43, 0x41, 0x60, 0x01, 0x68, 0x11, 0x43, + 0x01, 0x60, 0x00, 0x20, 0x01, 0x30, 0x64, 0x28, + 0xfc, 0xd3, 0xa0, 0x79, 0x0f, 0x4d, 0x00, 0xab, + 0x18, 0x70, 0xe0, 0x79, 0x10, 0x4c, 0x58, 0x70, + 0x20, 0x1c, 0x10, 0x30, 0x00, 0xf0, 0x3c, 0x00, + 0x14, 0x28, 0x00, 0x00, 0xdf, 0xfb, 0x00, 0x20, + 0xc0, 0x43, 0xa0, 0x61, 0xff, 0xf7, 0x9c, 0xff, + 0x00, 0x28, 0x09, 0xd0, 0x0a, 0x49, 0x08, 0x69, + 0x01, 0x30, 0x08, 0x61, 0x00, 0x20, 0x3c, 0x31, + 0x89, 0x68, 0x48, 0x63, 0x06, 0xf0, 0xee, 0xfc, + 0x00, 0xab, 0x18, 0x88, 0xe8, 0x84, 0x38, 0xbd, + 0x00, 0x10, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, + 0xf4, 0x00, 0x07, 0x00, 0x00, 0x30, 0x07, 0x00, + 0x3c, 0x00, 0x50, 0x28, 0x00, 0x00, 0xe8, 0x7d, + 0x01, 0x00, 0x0a, 0x48, 0x80, 0xb5, 0x00, 0x6a, + 0x00, 0x28, 0x01, 0xd0, 0xfe, 0xf7, 0xc1, 0xf9, + 0x07, 0x48, 0x07, 0x49, 0x3c, 0x30, 0x80, 0x68, + 0x10, 0x30, 0x48, 0x61, 0x01, 0x20, 0x08, 0x61, + 0x05, 0x49, 0x08, 0x68, 0x80, 0x22, 0x90, 0x43, + 0x08, 0x60, 0x80, 0xbd, 0x00, 0x00, 0xe8, 0x7d, + 0x01, 0x00, 0x00, 0x30, 0x07, 0x00, 0xf4, 0x00, + 0x07, 0x00, 0x3c, 0x00, 0x8c, 0x28, 0x00, 0x00, + 0x80, 0xb5, 0x0c, 0xf0, 0xcb, 0xfe, 0x06, 0xf0, + 0xbf, 0xfc, 0x80, 0xbd, 0x01, 0x49, 0xc8, 0x62, + 0x70, 0x47, 0x00, 0x00, 0xe8, 0x7d, 0x01, 0x00, + 0x02, 0x4a, 0x91, 0x6a, 0x08, 0x43, 0x90, 0x62, + 0x70, 0x47, 0x00, 0x00, 0xe8, 0x7d, 0x01, 0x00, + 0x18, 0x23, 0x06, 0x49, 0x58, 0x43, 0x40, 0x18, + 0x00, 0x21, 0x02, 0x79, 0x03, 0x68, 0x1a, 0x70, + 0x01, 0x31, 0x08, 0x30, 0x3c, 0x00, 0xc8, 0x28, + 0x00, 0x00, 0x03, 0x29, 0xf8, 0xd3, 0x70, 0x47, + 0x00, 0x00, 0x28, 0x52, 0x01, 0x00, 0x03, 0x49, + 0x00, 0x28, 0x00, 0xd0, 0x01, 0x1c, 0x02, 0x48, + 0x81, 0x62, 0x70, 0x47, 0x00, 0x00, 0x85, 0x75, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0xf8, 0xb5, + 0xff, 0xf7, 0x33, 0xff, 0x28, 0x4f, 0x00, 0x28, + 0x04, 0xd0, 0xff, 0xf7, 0xc8, 0xff, 0x38, 0x6a, + 0x01, 0x30, 0x38, 0x62, 0xf8, 0x6a, 0x3c, 0x00, + 0x04, 0x29, 0x00, 0x00, 0x00, 0x28, 0x02, 0xd0, + 0x01, 0x89, 0x04, 0x39, 0x01, 0x81, 0x38, 0x6b, + 0x00, 0x25, 0x00, 0x28, 0x08, 0xd0, 0x0b, 0x20, + 0x3d, 0x63, 0x10, 0xf0, 0xe5, 0xfa, 0x1e, 0x49, + 0x08, 0x68, 0x21, 0x22, 0x90, 0x43, 0x08, 0x60, + 0x38, 0x78, 0x3c, 0x21, 0x1b, 0x4a, 0x41, 0x43, + 0x8c, 0x18, 0xff, 0x22, 0x79, 0x6a, 0x3a, 0x70, + 0x00, 0x29, 0x0c, 0xd0, 0xb9, 0x69, 0x01, 0x31, + 0x3c, 0x00, 0x40, 0x29, 0x00, 0x00, 0xb9, 0x61, + 0x7d, 0x62, 0xbd, 0x68, 0x00, 0x2d, 0x04, 0xd0, + 0x63, 0x6b, 0x7a, 0x6b, 0x00, 0x21, 0xfd, 0xf7, + 0x47, 0xfd, 0xf8, 0xbd, 0x04, 0x28, 0x03, 0xd3, + 0x01, 0x21, 0x84, 0x20, 0xfe, 0xf7, 0xa1, 0xfc, + 0x38, 0x69, 0x26, 0x1c, 0x01, 0x30, 0x38, 0x61, + 0x20, 0x36, 0x30, 0x78, 0x02, 0x28, 0x03, 0xd0, + 0x0c, 0x21, 0x84, 0x20, 0xfe, 0xf7, 0x95, 0xfc, + 0x35, 0x70, 0x3c, 0x00, 0x7c, 0x29, 0x00, 0x00, + 0xa1, 0x69, 0x00, 0x29, 0xe8, 0xd0, 0x63, 0x6b, + 0x30, 0x34, 0x20, 0x78, 0x0c, 0x1c, 0x00, 0x21, + 0x7a, 0x6b, 0xfd, 0xf7, 0x27, 0xfd, 0xdf, 0xe7, + 0x04, 0x6c, 0x01, 0x00, 0xf4, 0x00, 0x07, 0x00, + 0x18, 0xdb, 0x01, 0x00, 0x10, 0xb5, 0x0b, 0x4c, + 0x60, 0x6a, 0x00, 0x28, 0x0e, 0xd0, 0x0a, 0x48, + 0x00, 0xf0, 0x12, 0xfb, 0x00, 0x20, 0x60, 0x62, + 0xa4, 0x68, 0x00, 0x2c, 0x3c, 0x00, 0xb8, 0x29, + 0x00, 0x00, 0x05, 0xd0, 0x7e, 0x23, 0xdb, 0x43, + 0x00, 0x22, 0x01, 0x21, 0xfd, 0xf7, 0x0d, 0xfd, + 0x10, 0xbd, 0xe0, 0x69, 0x01, 0x30, 0xe0, 0x61, + 0x10, 0xbd, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x30, + 0x07, 0x00, 0x09, 0x48, 0x41, 0x68, 0x3f, 0x22, + 0x12, 0x04, 0x91, 0x43, 0x0d, 0x22, 0x12, 0x04, + 0x89, 0x18, 0x41, 0x60, 0x41, 0x68, 0x01, 0x22, + 0x52, 0x02, 0x91, 0x43, 0x41, 0x60, 0x3c, 0x00, + 0xf4, 0x29, 0x00, 0x00, 0x03, 0x48, 0x81, 0x78, + 0x81, 0x70, 0x81, 0x78, 0x81, 0x70, 0x70, 0x47, + 0x80, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, + 0xf0, 0xb5, 0x01, 0x25, 0x08, 0x24, 0x00, 0x20, + 0x0e, 0x4a, 0x0f, 0x49, 0x00, 0x26, 0x3c, 0x23, + 0x43, 0x43, 0xd1, 0x52, 0x9b, 0x18, 0x5d, 0x71, + 0x9b, 0x60, 0x5e, 0x61, 0x1c, 0x82, 0xc0, 0x27, + 0xdf, 0x60, 0x20, 0x27, 0xfe, 0x54, 0x9e, 0x61, + 0x3c, 0x00, 0x30, 0x2a, 0x00, 0x00, 0x30, 0x27, + 0xfe, 0x54, 0x07, 0x4f, 0x3f, 0x18, 0x20, 0x37, + 0x01, 0x30, 0x05, 0x28, 0x9f, 0x63, 0xe9, 0xd3, + 0x05, 0x48, 0xff, 0x32, 0x01, 0x32, 0x90, 0x62, + 0xf0, 0xbd, 0x18, 0xdb, 0x01, 0x00, 0xbe, 0xba, + 0x00, 0x00, 0x30, 0x80, 0x07, 0x00, 0x06, 0x6c, + 0x01, 0x00, 0x01, 0x49, 0x48, 0x60, 0x70, 0x47, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x05, 0x49, + 0x08, 0x5c, 0x3c, 0x00, 0x6c, 0x2a, 0x00, 0x00, + 0x05, 0x49, 0x49, 0x68, 0x40, 0x18, 0xc0, 0x06, + 0xc0, 0x0e, 0x04, 0x49, 0x20, 0x30, 0x48, 0x72, + 0x70, 0x47, 0x00, 0x00, 0xa0, 0x57, 0x01, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x80, 0x07, 0x00, + 0x80, 0xb5, 0x15, 0x21, 0x84, 0x20, 0xfe, 0xf7, + 0x07, 0xfc, 0x80, 0xbd, 0xf8, 0xb5, 0x43, 0x48, + 0x84, 0x68, 0x03, 0x34, 0x42, 0x4d, 0x04, 0xe0, + 0x20, 0x1c, 0x10, 0xf0, 0x3c, 0x00, 0xa8, 0x2a, + 0x00, 0x00, 0xb9, 0xf8, 0x00, 0x28, 0x71, 0xd1, + 0x28, 0x69, 0xc0, 0x07, 0xf7, 0xd5, 0x3e, 0x48, + 0x28, 0x60, 0x3e, 0x4a, 0x14, 0x1c, 0x20, 0x34, + 0x20, 0x79, 0x00, 0x90, 0x3c, 0x23, 0x3c, 0x49, + 0x58, 0x43, 0x45, 0x18, 0x28, 0x79, 0xff, 0xf7, + 0xcc, 0xff, 0x28, 0x1c, 0x3a, 0x49, 0x08, 0x30, + 0x48, 0x60, 0x01, 0x26, 0x08, 0x1c, 0x06, 0x60, + 0x68, 0x6a, 0x00, 0x28, 0x0d, 0xd0, 0x3c, 0x00, + 0xe4, 0x2a, 0x00, 0x00, 0xa9, 0x6a, 0x92, 0x6a, + 0x35, 0x4b, 0x9f, 0x68, 0xd7, 0x1b, 0x1a, 0x68, + 0x51, 0x18, 0x79, 0x18, 0x8a, 0x42, 0x5a, 0x68, + 0x00, 0xd8, 0x00, 0xe0, 0x01, 0x32, 0x06, 0xc0, + 0xe8, 0x6a, 0xfe, 0xf7, 0x87, 0xff, 0x2d, 0x49, + 0xe8, 0x6a, 0x48, 0x60, 0x30, 0x1c, 0x0e, 0x60, + 0x66, 0x79, 0x1f, 0xe0, 0x2b, 0x48, 0x46, 0x61, + 0x04, 0x7f, 0x29, 0x49, 0x20, 0x1c, 0x50, 0x39, + 0x3c, 0x00, 0x20, 0x2b, 0x00, 0x00, 0x89, 0x6a, + 0xfd, 0xf7, 0x5a, 0xfc, 0x00, 0x98, 0x84, 0x42, + 0x10, 0xd0, 0x3c, 0x20, 0x22, 0x49, 0x60, 0x43, + 0x40, 0x18, 0x87, 0x69, 0x00, 0x2f, 0x09, 0xd0, + 0x00, 0x21, 0x20, 0x30, 0x01, 0x70, 0x7e, 0x23, + 0xdb, 0x43, 0x02, 0x21, 0x00, 0x22, 0x20, 0x1c, + 0xfd, 0xf7, 0x4c, 0xfc, 0x01, 0x20, 0xa0, 0x40, + 0x86, 0x43, 0x00, 0x2e, 0xdd, 0xd1, 0xe9, 0x69, + 0x00, 0x29, 0x3c, 0x00, 0x5c, 0x2b, 0x00, 0x00, + 0x03, 0xd0, 0x30, 0x20, 0x40, 0x5d, 0xfd, 0xf7, + 0x3a, 0xfc, 0x16, 0x4c, 0x50, 0x3c, 0x60, 0x6a, + 0x00, 0x28, 0x03, 0xd0, 0x0a, 0x21, 0x84, 0x20, + 0xfe, 0xf7, 0x96, 0xfb, 0x20, 0x35, 0x28, 0x78, + 0x01, 0x28, 0x03, 0xd0, 0x0b, 0x21, 0x84, 0x20, + 0xfe, 0xf7, 0x8e, 0xfb, 0x02, 0x20, 0x28, 0x70, + 0xe0, 0x68, 0x01, 0x30, 0x00, 0xe0, 0x07, 0xe0, + 0xe0, 0x60, 0x00, 0x98, 0x3c, 0x00, 0x98, 0x2b, + 0x00, 0x00, 0x20, 0x70, 0x00, 0x98, 0x60, 0x70, + 0x0a, 0x48, 0x00, 0x68, 0x60, 0x63, 0xf8, 0xbd, + 0x00, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x40, + 0x07, 0x00, 0x01, 0x00, 0x00, 0x01, 0x30, 0x80, + 0x07, 0x00, 0x18, 0xdb, 0x01, 0x00, 0x00, 0x30, + 0x07, 0x00, 0x54, 0x6c, 0x01, 0x00, 0x00, 0xa0, + 0x07, 0x00, 0x78, 0x6e, 0x01, 0x00, 0x3c, 0x22, + 0x3c, 0x23, 0x4a, 0x43, 0x09, 0x49, 0x3c, 0x00, + 0xd4, 0x2b, 0x00, 0x00, 0xb0, 0xb5, 0x54, 0x18, + 0x58, 0x43, 0x45, 0x18, 0x21, 0x1c, 0x38, 0x22, + 0x28, 0x1c, 0xfd, 0xf7, 0xe5, 0xfc, 0xa0, 0x6b, + 0x00, 0x78, 0xa9, 0x6b, 0x08, 0x70, 0x00, 0x20, + 0x20, 0x34, 0x20, 0x70, 0xb0, 0xbd, 0x00, 0x00, + 0x18, 0xdb, 0x01, 0x00, 0x3c, 0x23, 0x07, 0x49, + 0x58, 0x43, 0x10, 0xb5, 0x44, 0x18, 0x20, 0x34, + 0x20, 0x78, 0x02, 0x28, 0x03, 0xd1, 0x0d, 0x21, + 0x3c, 0x00, 0x10, 0x2c, 0x00, 0x00, 0x84, 0x20, + 0xfe, 0xf7, 0x47, 0xfb, 0x00, 0x20, 0x20, 0x70, + 0x10, 0xbd, 0x18, 0xdb, 0x01, 0x00, 0xff, 0xb5, + 0x3c, 0x20, 0x48, 0x43, 0x1a, 0x49, 0x81, 0xb0, + 0x44, 0x18, 0x26, 0x1c, 0x20, 0x36, 0x30, 0x78, + 0x15, 0x1c, 0x0f, 0x9f, 0x02, 0x28, 0x03, 0xd1, + 0x04, 0x21, 0x84, 0x20, 0xfe, 0xf7, 0x31, 0xfb, + 0x01, 0x20, 0x30, 0x70, 0x25, 0x71, 0x0b, 0x99, + 0x30, 0x22, 0x3c, 0x00, 0x4c, 0x2c, 0x00, 0x00, + 0x61, 0x80, 0x0a, 0x99, 0xe1, 0x62, 0x0d, 0x99, + 0xa1, 0x61, 0x0c, 0x99, 0xe1, 0x61, 0x0e, 0x99, + 0x61, 0x62, 0xa7, 0x62, 0x01, 0x99, 0x11, 0x55, + 0x7e, 0x21, 0xc9, 0x43, 0x61, 0x63, 0x04, 0x99, + 0x00, 0x29, 0x00, 0xd1, 0x00, 0x20, 0x06, 0x1c, + 0x28, 0x1c, 0x08, 0xf0, 0x8b, 0xf8, 0x00, 0x28, + 0x01, 0xd0, 0x02, 0x20, 0x00, 0xe0, 0x00, 0x20, + 0xa1, 0x6b, 0x30, 0x43, 0x3c, 0x00, 0x88, 0x2c, + 0x00, 0x00, 0x08, 0x70, 0x05, 0xb0, 0xf0, 0xbd, + 0x00, 0x00, 0x18, 0xdb, 0x01, 0x00, 0x80, 0xb5, + 0x14, 0x21, 0x84, 0x20, 0xfe, 0xf7, 0x03, 0xfb, + 0x80, 0xbd, 0x01, 0x48, 0x40, 0x78, 0x70, 0x47, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x02, 0x48, + 0x00, 0x69, 0xc0, 0x07, 0xc0, 0x0f, 0x70, 0x47, + 0x00, 0x00, 0x00, 0x40, 0x07, 0x00, 0x01, 0x1c, + 0x3c, 0x23, 0x04, 0x4a, 0x59, 0x43, 0x3c, 0x00, + 0xc4, 0x2c, 0x00, 0x00, 0x89, 0x18, 0x20, 0x31, + 0x09, 0x78, 0x01, 0x20, 0x00, 0x29, 0x00, 0xd0, + 0x00, 0x20, 0x70, 0x47, 0x18, 0xdb, 0x01, 0x00, + 0x08, 0x48, 0x40, 0x6a, 0x00, 0x28, 0x0a, 0xd1, + 0x07, 0x4a, 0x00, 0x21, 0x20, 0x23, 0x9b, 0x5c, + 0x02, 0x2b, 0x04, 0xd0, 0x01, 0x31, 0x3c, 0x32, + 0x05, 0x29, 0xf7, 0xd3, 0x70, 0x47, 0x01, 0x20, + 0x70, 0x47, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x3c, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x18, 0xdb, + 0x01, 0x00, 0xf8, 0xb5, 0x0e, 0x1c, 0x04, 0x1c, + 0x17, 0x1c, 0xfe, 0xf7, 0x82, 0xfe, 0x20, 0x1c, + 0x11, 0x4c, 0x60, 0x60, 0x01, 0x20, 0x20, 0x60, + 0x10, 0x4d, 0x68, 0x69, 0x01, 0x30, 0x68, 0x61, + 0x68, 0x6a, 0x00, 0x28, 0x03, 0xd0, 0x07, 0x21, + 0x84, 0x20, 0xfe, 0xf7, 0xba, 0xfa, 0xa0, 0x68, + 0x40, 0x07, 0x03, 0xd5, 0x06, 0x21, 0x84, 0x20, + 0xfe, 0xf7, 0x3c, 0x00, 0x3c, 0x2d, 0x00, 0x00, + 0xb3, 0xfa, 0x08, 0x48, 0x00, 0x69, 0x00, 0x28, + 0x03, 0xda, 0xaa, 0x21, 0x84, 0x20, 0xfe, 0xf7, + 0xab, 0xfa, 0x02, 0x20, 0x68, 0x62, 0xae, 0x60, + 0x2f, 0x70, 0xf8, 0xbd, 0x00, 0x30, 0x07, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x40, 0x07, 0x00, + 0x04, 0x4a, 0x51, 0x80, 0x10, 0x71, 0x03, 0x48, + 0x03, 0x49, 0x08, 0x30, 0x48, 0x60, 0x01, 0x20, + 0x08, 0x60, 0x70, 0x47, 0x3c, 0x00, 0x78, 0x2d, + 0x00, 0x00, 0x3c, 0x6c, 0x01, 0x00, 0x00, 0x30, + 0x07, 0x00, 0x00, 0x21, 0x00, 0x23, 0x05, 0xe0, + 0x02, 0x89, 0x43, 0x60, 0xc0, 0x68, 0x51, 0x18, + 0x09, 0x04, 0x09, 0x0c, 0x00, 0x28, 0xf7, 0xd1, + 0x04, 0x31, 0x08, 0x04, 0x00, 0x0c, 0x70, 0x47, + 0x00, 0x00, 0x02, 0x4a, 0x51, 0x6b, 0x08, 0x43, + 0x50, 0x63, 0x70, 0x47, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x38, 0xb5, 0x0a, 0x4c, 0x3c, 0x00, + 0xb4, 0x2d, 0x00, 0x00, 0x22, 0x1c, 0x20, 0x32, + 0x95, 0x79, 0x00, 0xab, 0x1d, 0x70, 0xd2, 0x79, + 0x5a, 0x70, 0x03, 0x68, 0x40, 0x68, 0x06, 0x4a, + 0x50, 0x65, 0x05, 0x48, 0x13, 0x65, 0x50, 0x30, + 0x81, 0x60, 0x00, 0xab, 0x18, 0x88, 0xe0, 0x84, + 0x38, 0xbd, 0x00, 0x00, 0x00, 0x10, 0x07, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x98, 0xb5, 0x0d, 0x4c, + 0x20, 0x1c, 0x20, 0x30, 0x81, 0x79, 0x00, 0xab, + 0x3c, 0x00, 0xf0, 0x2d, 0x00, 0x00, 0x19, 0x70, + 0xc0, 0x79, 0x58, 0x70, 0x0a, 0x48, 0x00, 0xf0, + 0xec, 0xf8, 0x09, 0x49, 0x00, 0x20, 0x48, 0x62, + 0xff, 0xf7, 0x69, 0xff, 0x00, 0x28, 0x03, 0xd0, + 0x12, 0x21, 0x84, 0x20, 0xfe, 0xf7, 0x49, 0xfa, + 0x00, 0xab, 0x18, 0x88, 0xe0, 0x84, 0x98, 0xbd, + 0x00, 0x00, 0x00, 0x10, 0x07, 0x00, 0x00, 0x30, + 0x07, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x03, 0x48, + 0x01, 0x7a, 0x3c, 0x00, 0x2c, 0x2e, 0x00, 0x00, + 0xfe, 0x22, 0x91, 0x43, 0x0a, 0x31, 0x01, 0x72, + 0x70, 0x47, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, + 0x90, 0xb5, 0x0e, 0x4c, 0x85, 0xb0, 0xa0, 0x78, + 0x02, 0x28, 0x14, 0xd1, 0x03, 0x20, 0xa0, 0x70, + 0x0b, 0x49, 0x00, 0x20, 0x00, 0x22, 0x04, 0x92, + 0x02, 0x90, 0x03, 0x91, 0xe1, 0x88, 0x01, 0x22, + 0x01, 0x92, 0x00, 0x91, 0x61, 0x78, 0x20, 0x78, + 0x22, 0x69, 0xe3, 0x68, 0x3c, 0x00, 0x68, 0x2e, + 0x00, 0x00, 0x08, 0xf0, 0x94, 0xfd, 0x04, 0x48, + 0x09, 0xf0, 0x7f, 0xf9, 0x05, 0xb0, 0x90, 0xbd, + 0x00, 0x00, 0xb4, 0x79, 0x01, 0x00, 0xad, 0xb6, + 0x00, 0x00, 0x71, 0xb6, 0x00, 0x00, 0xb0, 0xb5, + 0x0c, 0x4d, 0xac, 0x79, 0x0c, 0x49, 0x09, 0x78, + 0x00, 0x29, 0x03, 0xd0, 0x01, 0x29, 0x0e, 0xd0, + 0x02, 0x29, 0x08, 0xd1, 0xc2, 0x88, 0x00, 0x2a, + 0x09, 0xd0, 0x01, 0x23, 0x81, 0x68, 0x3c, 0x00, + 0xa4, 0x2e, 0x00, 0x00, 0x02, 0x20, 0x0f, 0xf0, + 0xc1, 0xf8, 0x03, 0xe0, 0x02, 0x21, 0x86, 0x20, + 0xfe, 0xf7, 0xf8, 0xf9, 0xac, 0x71, 0xb0, 0xbd, + 0x20, 0x10, 0x07, 0x00, 0xa0, 0x79, 0x01, 0x00, + 0x80, 0xb5, 0x02, 0x68, 0x07, 0x49, 0x4a, 0x60, + 0x03, 0x79, 0xca, 0x78, 0xcb, 0x70, 0x00, 0x79, + 0x90, 0x42, 0x06, 0xd0, 0x03, 0x48, 0x14, 0x30, + 0x00, 0x89, 0x07, 0xf0, 0x27, 0xfe, 0x06, 0xf0, + 0x3c, 0x00, 0xe0, 0x2e, 0x00, 0x00, 0xab, 0xfa, + 0x80, 0xbd, 0x84, 0x66, 0x01, 0x00, 0x70, 0xb5, + 0x16, 0x4c, 0x15, 0x4d, 0xa0, 0x78, 0x00, 0x26, + 0x98, 0x3d, 0x01, 0x28, 0x03, 0xd1, 0x28, 0x69, + 0x08, 0xf0, 0xfb, 0xfc, 0xa6, 0x70, 0x60, 0x68, + 0x01, 0x28, 0x03, 0xd0, 0x00, 0x21, 0x28, 0x69, + 0x00, 0xf0, 0xff, 0xfb, 0x0e, 0x48, 0x29, 0x69, + 0x0c, 0xf0, 0x31, 0xfa, 0x01, 0x20, 0x0c, 0xf0, + 0xe4, 0xf8, 0x3c, 0x00, 0x1c, 0x2f, 0x00, 0x00, + 0xe0, 0x78, 0x01, 0x28, 0x02, 0xd0, 0x01, 0x20, + 0x60, 0x70, 0x00, 0xe0, 0x66, 0x70, 0x06, 0x48, + 0x14, 0x30, 0x41, 0x68, 0x01, 0x29, 0x06, 0xd1, + 0x06, 0x60, 0x41, 0x6f, 0x00, 0x29, 0x02, 0xd0, + 0x00, 0x20, 0xfd, 0xf7, 0x4c, 0xfa, 0x70, 0xbd, + 0x84, 0x66, 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, + 0x30, 0xb5, 0x00, 0x22, 0x00, 0x23, 0x01, 0x25, + 0x2c, 0x1c, 0x94, 0x40, 0x3c, 0x00, 0x58, 0x2f, + 0x00, 0x00, 0x04, 0x40, 0x01, 0xd0, 0xca, 0x54, + 0x01, 0x33, 0x01, 0x32, 0x0e, 0x2a, 0xf6, 0xdb, + 0x18, 0x1c, 0x30, 0xbd, 0x00, 0x00, 0xff, 0xb5, + 0x01, 0x27, 0x00, 0x26, 0x05, 0x1c, 0x02, 0x20, + 0x81, 0xb0, 0x00, 0x90, 0x00, 0x2d, 0x18, 0xd0, + 0x28, 0x78, 0xff, 0x28, 0x15, 0xd0, 0x00, 0x24, + 0x10, 0xe0, 0x28, 0x19, 0x80, 0x78, 0x0a, 0x99, + 0x00, 0x29, 0x01, 0xd0, 0x01, 0x06, 0x3c, 0x00, + 0x94, 0x2f, 0x00, 0x00, 0x08, 0xd5, 0x07, 0xf0, + 0xe9, 0xfe, 0x0e, 0x28, 0x03, 0xd0, 0x01, 0x21, + 0x81, 0x40, 0x0e, 0x43, 0x00, 0xe0, 0x00, 0x27, + 0x01, 0x34, 0x68, 0x78, 0xa0, 0x42, 0xeb, 0xdc, + 0x00, 0x98, 0x02, 0x9d, 0x01, 0x38, 0x00, 0x90, + 0xdf, 0xd1, 0x03, 0x98, 0x31, 0x1c, 0x81, 0x43, + 0x02, 0xd0, 0x03, 0x98, 0x06, 0x40, 0x00, 0x27, + 0x04, 0x98, 0x06, 0x60, 0x05, 0xb0, 0x38, 0x1c, + 0x3c, 0x00, 0xd0, 0x2f, 0x00, 0x00, 0xf0, 0xbd, + 0x00, 0x00, 0x02, 0x21, 0x01, 0x60, 0x64, 0x21, + 0x01, 0xe0, 0x01, 0x39, 0x02, 0xd0, 0x02, 0x68, + 0x92, 0x07, 0xfa, 0xd4, 0x01, 0x20, 0x00, 0x29, + 0x00, 0xd1, 0x00, 0x20, 0x70, 0x47, 0x10, 0xb5, + 0x00, 0x20, 0xc4, 0x43, 0x05, 0x4b, 0x02, 0x22, + 0x01, 0x01, 0x5a, 0x50, 0xc9, 0x18, 0x8c, 0x60, + 0x01, 0x30, 0x08, 0x28, 0xf8, 0xdb, 0x10, 0xbd, + 0x00, 0x00, 0x3c, 0x00, 0x0c, 0x30, 0x00, 0x00, + 0x00, 0x30, 0x07, 0x00, 0xf0, 0xb5, 0x05, 0x1c, + 0x60, 0x35, 0xc7, 0x6a, 0x04, 0x1c, 0x28, 0x7b, + 0x00, 0x2f, 0x8b, 0xb0, 0x15, 0xd0, 0x08, 0x28, + 0x15, 0xd2, 0x02, 0xa3, 0x1b, 0x5c, 0x5b, 0x00, + 0x9f, 0x44, 0x00, 0x00, 0x07, 0x04, 0x04, 0x07, + 0x09, 0x09, 0x0c, 0x0c, 0x01, 0x26, 0x00, 0x21, + 0x09, 0xe0, 0x00, 0x26, 0x06, 0xe0, 0x02, 0x26, + 0x02, 0x21, 0x04, 0xe0, 0x3c, 0x00, 0x48, 0x30, + 0x00, 0x00, 0x03, 0x26, 0x03, 0x21, 0x01, 0xe0, + 0x04, 0x26, 0x01, 0x21, 0x8c, 0x22, 0x12, 0x59, + 0x07, 0x91, 0x26, 0x49, 0x06, 0x90, 0x04, 0x91, + 0x00, 0x20, 0x03, 0x90, 0x05, 0x97, 0x08, 0x92, + 0xe0, 0x69, 0x22, 0x69, 0x21, 0x1c, 0x70, 0x31, + 0x01, 0x91, 0x21, 0x49, 0x00, 0x90, 0x70, 0x00, + 0x40, 0x18, 0x60, 0x30, 0x02, 0x92, 0x03, 0x88, + 0x59, 0x1c, 0x01, 0x80, 0x1e, 0x48, 0x3c, 0x00, + 0x84, 0x30, 0x00, 0x00, 0x02, 0x88, 0xa1, 0x68, + 0x0a, 0xa8, 0x09, 0xf0, 0xe1, 0xff, 0x60, 0x60, + 0xe8, 0x7a, 0xa1, 0x6a, 0xc9, 0x07, 0x00, 0x07, + 0x00, 0x0e, 0xc9, 0x0d, 0x08, 0x43, 0x61, 0x6a, + 0x22, 0x69, 0xc9, 0x07, 0x89, 0x0d, 0x01, 0x43, + 0x01, 0x20, 0x00, 0x2a, 0x00, 0xd1, 0x00, 0x20, + 0x80, 0x03, 0x08, 0x43, 0x21, 0x6a, 0xc9, 0x03, + 0x08, 0x43, 0x08, 0x21, 0x08, 0x43, 0x0a, 0x99, + 0x3c, 0x00, 0xc0, 0x30, 0x00, 0x00, 0x08, 0x80, + 0x20, 0x1c, 0xfe, 0xf7, 0x98, 0xfe, 0x20, 0x69, + 0x00, 0x28, 0x04, 0xd1, 0x20, 0x1c, 0x0a, 0xf0, + 0x82, 0xf9, 0x0b, 0xb0, 0xf0, 0xbd, 0x80, 0x79, + 0x06, 0x28, 0x01, 0xd9, 0xfe, 0xf7, 0x0f, 0xf9, + 0x20, 0x69, 0x06, 0x49, 0x80, 0x79, 0x80, 0x00, + 0x09, 0x58, 0x20, 0x1c, 0xfd, 0xf7, 0x74, 0xf9, + 0xef, 0xe7, 0x79, 0x2f, 0x01, 0x00, 0xc4, 0x69, + 0x01, 0x00, 0x3c, 0x00, 0xfc, 0x30, 0x00, 0x00, + 0x08, 0x61, 0x01, 0x00, 0x74, 0x57, 0x01, 0x00, + 0x10, 0xb5, 0x04, 0x1c, 0x58, 0x30, 0x8a, 0xb0, + 0x0e, 0xf0, 0x7c, 0xfe, 0x22, 0x1c, 0x80, 0x32, + 0x51, 0x68, 0x00, 0x29, 0x01, 0xd0, 0x11, 0x7a, + 0x07, 0xe0, 0x00, 0x28, 0x04, 0xd0, 0x80, 0x69, + 0x80, 0x07, 0x01, 0xd5, 0x03, 0x21, 0x00, 0xe0, + 0x01, 0x21, 0xd2, 0x68, 0x07, 0x91, 0x22, 0x49, + 0x00, 0x20, 0x08, 0x92, 0x3c, 0x00, 0x38, 0x31, + 0x00, 0x00, 0x04, 0x91, 0x00, 0x22, 0x05, 0x92, + 0x06, 0x90, 0x03, 0x90, 0xe0, 0x69, 0x22, 0x69, + 0x00, 0x90, 0x21, 0x1c, 0x70, 0x31, 0x1c, 0x48, + 0x01, 0x91, 0x02, 0x92, 0x03, 0x89, 0x59, 0x1c, + 0x01, 0x81, 0x1a, 0x48, 0x02, 0x88, 0xa1, 0x68, + 0x09, 0xa8, 0x09, 0xf0, 0x76, 0xff, 0x60, 0x60, + 0x6b, 0x20, 0x00, 0x5d, 0xa1, 0x6a, 0x22, 0x69, + 0xc9, 0x07, 0x00, 0x07, 0x00, 0x0e, 0x3c, 0x00, + 0x74, 0x31, 0x00, 0x00, 0xc9, 0x0d, 0x01, 0x43, + 0x01, 0x20, 0x00, 0x2a, 0x00, 0xd1, 0x00, 0x20, + 0x80, 0x03, 0x08, 0x43, 0x09, 0x99, 0x08, 0x80, + 0x20, 0x1c, 0xfe, 0xf7, 0x35, 0xfe, 0x20, 0x69, + 0x00, 0x28, 0x04, 0xd1, 0x20, 0x1c, 0x0a, 0xf0, + 0x1f, 0xf9, 0x0a, 0xb0, 0x10, 0xbd, 0x80, 0x79, + 0x06, 0x28, 0x01, 0xd9, 0xfe, 0xf7, 0xac, 0xf8, + 0x20, 0x69, 0x07, 0x49, 0x80, 0x79, 0x80, 0x00, + 0x3c, 0x00, 0xb0, 0x31, 0x00, 0x00, 0x09, 0x58, + 0x20, 0x1c, 0xfd, 0xf7, 0x11, 0xf9, 0xef, 0xe7, + 0x00, 0x00, 0xbd, 0x2f, 0x01, 0x00, 0x24, 0x6a, + 0x01, 0x00, 0x08, 0x61, 0x01, 0x00, 0x74, 0x57, + 0x01, 0x00, 0x3e, 0xb5, 0x05, 0x1c, 0x00, 0x69, + 0x04, 0x21, 0x07, 0xf0, 0xd2, 0xfa, 0x00, 0x28, + 0x09, 0xd0, 0x42, 0x78, 0x02, 0x32, 0x01, 0x1c, + 0x68, 0x46, 0xfd, 0xf7, 0x88, 0xf9, 0xe8, 0x6a, + 0x6c, 0x46, 0x3c, 0x00, 0xec, 0x31, 0x00, 0x00, + 0x02, 0x90, 0x00, 0xe0, 0x00, 0x24, 0x28, 0x1c, + 0x14, 0x30, 0x02, 0xf0, 0x03, 0xfb, 0x00, 0x28, + 0x04, 0xd0, 0x21, 0x1c, 0x28, 0x1c, 0x05, 0xf0, + 0xa5, 0xfe, 0x3e, 0xbd, 0x00, 0x2c, 0xfc, 0xd0, + 0x02, 0x49, 0x20, 0x1c, 0x49, 0x69, 0xfd, 0xf7, + 0xe2, 0xf8, 0xf6, 0xe7, 0x44, 0x7d, 0x01, 0x00, + 0x70, 0xb5, 0x1e, 0x1c, 0x18, 0x23, 0x58, 0x43, + 0x06, 0x4b, 0x04, 0x9d, 0x3c, 0x00, 0x28, 0x32, + 0x00, 0x00, 0x19, 0x50, 0xc4, 0x18, 0x00, 0x20, + 0x60, 0x61, 0x62, 0x60, 0xa6, 0x60, 0xe5, 0x60, + 0x0f, 0xf0, 0xb9, 0xfd, 0x20, 0x61, 0x70, 0xbd, + 0x00, 0x00, 0xb8, 0x7d, 0x01, 0x00, 0x02, 0x4a, + 0x01, 0x1c, 0x90, 0x69, 0x91, 0x61, 0x70, 0x47, + 0x00, 0x00, 0x44, 0x7d, 0x01, 0x00, 0x01, 0x48, + 0x40, 0x6b, 0x70, 0x47, 0x00, 0x00, 0x44, 0x7d, + 0x01, 0x00, 0x04, 0x49, 0x04, 0x4b, 0x3c, 0x00, + 0x64, 0x32, 0x00, 0x00, 0xca, 0x68, 0x09, 0x69, + 0x5c, 0x3b, 0x5b, 0x68, 0xc9, 0x1a, 0x41, 0x43, + 0x50, 0x18, 0x70, 0x47, 0xa0, 0x7d, 0x01, 0x00, + 0x01, 0x48, 0x00, 0x78, 0x70, 0x47, 0x00, 0x00, + 0x78, 0x69, 0x01, 0x00, 0x80, 0xb5, 0x06, 0x22, + 0x01, 0x49, 0xfd, 0xf7, 0x35, 0xf9, 0x80, 0xbd, + 0xfe, 0x67, 0x01, 0x00, 0xf0, 0xb5, 0x89, 0xb0, + 0x00, 0x93, 0x16, 0x4f, 0x13, 0x1c, 0x0e, 0x1c, + 0x3c, 0x00, 0xa0, 0x32, 0x00, 0x00, 0x04, 0x1c, + 0x3a, 0x1c, 0x01, 0xf0, 0x62, 0xff, 0x01, 0xa9, + 0x06, 0xa8, 0xa2, 0x68, 0x02, 0xf0, 0x0b, 0xf9, + 0x01, 0xaa, 0x06, 0xa9, 0x38, 0x1c, 0x63, 0x6a, + 0x02, 0xf0, 0x81, 0xfc, 0x05, 0x1c, 0x01, 0x28, + 0x14, 0xd1, 0x0c, 0x48, 0xfc, 0x21, 0xc8, 0x51, + 0x38, 0x1c, 0x02, 0xf0, 0x0c, 0xf8, 0x03, 0x21, + 0x30, 0x1c, 0x07, 0xf0, 0x52, 0xfa, 0x00, 0x28, + 0x07, 0xd0, 0x3c, 0x00, 0xdc, 0x32, 0x00, 0x00, + 0x80, 0x78, 0x00, 0xf0, 0x33, 0xfc, 0x20, 0x1c, + 0x10, 0x30, 0x0e, 0xf0, 0x47, 0xfd, 0x00, 0xe0, + 0x00, 0x25, 0x28, 0x1c, 0x09, 0xb0, 0xf0, 0xbd, + 0xf4, 0x67, 0x01, 0x00, 0xc1, 0x38, 0x00, 0x00, + 0x10, 0xb5, 0x07, 0x4c, 0x06, 0x48, 0x06, 0x22, + 0x21, 0x1d, 0x08, 0x38, 0xfd, 0xf7, 0xf6, 0xf8, + 0x01, 0xf0, 0xfc, 0xff, 0x00, 0xf0, 0x42, 0xfc, + 0x20, 0x1c, 0x02, 0xf0, 0x3c, 0x00, 0x18, 0x33, + 0x00, 0x00, 0x27, 0xfc, 0x10, 0xbd, 0xf4, 0x67, + 0x01, 0x00, 0x08, 0x49, 0xc9, 0x68, 0x00, 0x29, + 0x0a, 0xd0, 0x06, 0x4a, 0x01, 0x32, 0x51, 0x78, + 0x12, 0x78, 0x48, 0x43, 0x00, 0x2a, 0x01, 0xd1, + 0x08, 0x18, 0x70, 0x47, 0x10, 0x18, 0x70, 0x47, + 0x01, 0x30, 0x70, 0x47, 0x00, 0x00, 0x44, 0x7d, + 0x01, 0x00, 0x04, 0x4b, 0x05, 0x49, 0x00, 0x28, + 0x5a, 0x69, 0x00, 0xd0, 0x01, 0x1c, 0x3c, 0x00, + 0x54, 0x33, 0x00, 0x00, 0x10, 0x1c, 0x59, 0x61, + 0x70, 0x47, 0x00, 0x00, 0x44, 0x7d, 0x01, 0x00, + 0xb9, 0x75, 0x00, 0x00, 0x07, 0x49, 0x00, 0x20, + 0x0a, 0x78, 0x02, 0x2a, 0x09, 0xd1, 0x0a, 0x7c, + 0x00, 0x2a, 0x05, 0xd1, 0xca, 0x68, 0x00, 0x2a, + 0x03, 0xd0, 0x49, 0x69, 0x00, 0x29, 0x00, 0xd0, + 0x01, 0x20, 0x70, 0x47, 0x78, 0x69, 0x01, 0x00, + 0x0c, 0x4a, 0x80, 0xb5, 0x01, 0x21, 0x51, 0x60, + 0x3c, 0x00, 0x90, 0x33, 0x00, 0x00, 0x09, 0xf0, + 0x6a, 0xf8, 0x09, 0x48, 0x1c, 0x30, 0x81, 0x69, + 0x00, 0x29, 0x07, 0xd0, 0x00, 0x23, 0x83, 0x61, + 0x00, 0x22, 0x00, 0x21, 0x00, 0x20, 0x00, 0xf0, + 0xd2, 0xf8, 0x80, 0xbd, 0x00, 0x22, 0x00, 0x21, + 0x03, 0x48, 0x00, 0xf0, 0x5c, 0xf9, 0x80, 0xbd, + 0x00, 0x00, 0x5c, 0x69, 0x01, 0x00, 0x51, 0x35, + 0x00, 0x00, 0xb0, 0xb5, 0x0c, 0x1c, 0x01, 0x28, + 0x16, 0xd1, 0x3c, 0x00, 0xcc, 0x33, 0x00, 0x00, + 0x0e, 0x4d, 0x02, 0x2c, 0x09, 0xd1, 0x00, 0xf0, + 0x2b, 0xfa, 0x00, 0x28, 0x0e, 0xd0, 0x68, 0x69, + 0x00, 0x28, 0x0b, 0xd1, 0x21, 0x1c, 0x13, 0x20, + 0x0c, 0xe0, 0x03, 0x2c, 0xfa, 0xd1, 0x00, 0xf0, + 0xf9, 0xf9, 0x00, 0x28, 0x02, 0xd0, 0x28, 0x7c, + 0x00, 0x28, 0xf3, 0xd0, 0xb0, 0xbd, 0x21, 0x1c, + 0x00, 0x06, 0x00, 0x0e, 0x04, 0xf0, 0x62, 0xfc, + 0xb0, 0xbd, 0x00, 0x00, 0x3c, 0x00, 0x08, 0x34, + 0x00, 0x00, 0x78, 0x69, 0x01, 0x00, 0xb0, 0xb5, + 0x0c, 0x4c, 0x00, 0x25, 0x25, 0x74, 0x65, 0x61, + 0xe5, 0x60, 0x00, 0xf0, 0x3c, 0xfa, 0x00, 0xf0, + 0x34, 0xfa, 0x07, 0x48, 0x1c, 0x38, 0x05, 0x61, + 0x09, 0xf0, 0x33, 0xff, 0x20, 0x78, 0x00, 0x28, + 0x02, 0xd1, 0x04, 0xf0, 0x6e, 0xfa, 0xb0, 0xbd, + 0x02, 0x28, 0xfc, 0xd1, 0x04, 0xf0, 0xa5, 0xfb, + 0xb0, 0xbd, 0x78, 0x69, 0x01, 0x00, 0x3c, 0x00, + 0x44, 0x34, 0x00, 0x00, 0x0c, 0x48, 0x80, 0xb5, + 0x01, 0x78, 0x00, 0x29, 0x12, 0xd0, 0xc0, 0x68, + 0x00, 0x28, 0x0f, 0xd1, 0x08, 0x48, 0x1c, 0x38, + 0x40, 0x69, 0x00, 0x28, 0x0a, 0xd1, 0x07, 0x48, + 0x00, 0x68, 0x00, 0x28, 0x06, 0xd0, 0x00, 0x22, + 0x07, 0x21, 0x10, 0x20, 0x10, 0xf0, 0xa0, 0xf9, + 0x02, 0xf0, 0x2c, 0xfc, 0x80, 0xbd, 0x00, 0x00, + 0x78, 0x69, 0x01, 0x00, 0xd4, 0x67, 0x01, 0x00, + 0x3c, 0x00, 0x80, 0x34, 0x00, 0x00, 0xf8, 0xb5, + 0x1d, 0x4e, 0x1c, 0x4d, 0x04, 0x1c, 0xf0, 0x68, + 0x02, 0x27, 0x1c, 0x3d, 0x00, 0x28, 0x07, 0xd0, + 0xe8, 0x68, 0x00, 0x28, 0x04, 0xd0, 0xfd, 0xf7, + 0xc2, 0xfe, 0x00, 0x28, 0x00, 0xd0, 0xbc, 0x43, + 0x00, 0x2c, 0x14, 0xd0, 0x37, 0x70, 0xf0, 0x68, + 0x14, 0x4f, 0x00, 0x28, 0x10, 0xd0, 0xe0, 0x07, + 0x17, 0xd4, 0xfd, 0xf7, 0xb4, 0xfe, 0x00, 0x28, + 0x13, 0xd0, 0x3c, 0x00, 0xbc, 0x34, 0x00, 0x00, + 0x70, 0x69, 0x00, 0x28, 0x06, 0xd1, 0xe8, 0x68, + 0x00, 0x28, 0x01, 0xd0, 0xfd, 0xf7, 0x1a, 0xff, + 0x0d, 0xf0, 0x0a, 0xfa, 0xf8, 0xbd, 0x68, 0x69, + 0x00, 0x28, 0x05, 0xd1, 0x09, 0x48, 0x00, 0x68, + 0x00, 0x28, 0x01, 0xd0, 0x01, 0x2c, 0x04, 0xd1, + 0x39, 0x1c, 0x20, 0x1c, 0x0e, 0xf0, 0x52, 0xfd, + 0xf0, 0xe7, 0x04, 0xf0, 0x1d, 0xfb, 0x02, 0xf0, + 0xeb, 0xfb, 0xeb, 0xe7, 0x3c, 0x00, 0xf8, 0x34, + 0x00, 0x00, 0x78, 0x69, 0x01, 0x00, 0x50, 0xc3, + 0x00, 0x00, 0xd4, 0x67, 0x01, 0x00, 0x05, 0x48, + 0x41, 0x69, 0x00, 0x29, 0x04, 0xd0, 0x40, 0x6a, + 0x00, 0x28, 0x01, 0xd0, 0x01, 0x20, 0x70, 0x47, + 0x00, 0x20, 0x70, 0x47, 0x00, 0x00, 0x78, 0x69, + 0x01, 0x00, 0x10, 0xb5, 0x04, 0x1c, 0x06, 0x49, + 0x00, 0x20, 0x48, 0x60, 0x08, 0x60, 0x88, 0x60, + 0x08, 0xf0, 0x9b, 0xff, 0x07, 0x21, 0x3c, 0x00, + 0x34, 0x35, 0x00, 0x00, 0x12, 0x20, 0x22, 0x79, + 0x10, 0xf0, 0x3a, 0xf9, 0x10, 0xbd, 0x00, 0x00, + 0x5c, 0x69, 0x01, 0x00, 0x01, 0x49, 0x01, 0x20, + 0x08, 0x60, 0x70, 0x47, 0xe8, 0x67, 0x01, 0x00, + 0xf8, 0xb5, 0x07, 0x1c, 0x0e, 0x1c, 0x08, 0xf0, + 0xa3, 0xfa, 0x13, 0x4d, 0x04, 0x1c, 0x68, 0x68, + 0x00, 0x28, 0x17, 0xd0, 0x00, 0x2f, 0x02, 0xd0, + 0xa8, 0x68, 0x03, 0x28, 0x13, 0xd3, 0x00, 0x20, + 0x3c, 0x00, 0x70, 0x35, 0x00, 0x00, 0xa8, 0x60, + 0x68, 0x60, 0x21, 0x1c, 0x0f, 0x20, 0x0e, 0xf0, + 0xf0, 0xfe, 0x28, 0x68, 0x00, 0x28, 0x03, 0xd0, + 0x00, 0x2c, 0x06, 0xd1, 0x01, 0x20, 0x02, 0xe0, + 0x01, 0x2c, 0x02, 0xd1, 0x00, 0x20, 0xff, 0xf7, + 0xfa, 0xfe, 0xf8, 0xbd, 0x72, 0x1c, 0x00, 0x21, + 0x04, 0x48, 0x00, 0xf0, 0x68, 0xf8, 0xa8, 0x68, + 0x01, 0x30, 0xa8, 0x60, 0xf5, 0xe7, 0x5c, 0x69, + 0x01, 0x00, 0x3c, 0x00, 0xac, 0x35, 0x00, 0x00, + 0x51, 0x35, 0x00, 0x00, 0x0a, 0x49, 0x80, 0xb5, + 0xca, 0x68, 0x00, 0x2a, 0x0b, 0xd0, 0x42, 0x68, + 0x00, 0x2a, 0x09, 0xd0, 0x00, 0x22, 0x4a, 0x62, + 0x02, 0x68, 0x0a, 0x62, 0x02, 0x68, 0x07, 0x21, + 0x17, 0x20, 0x10, 0xf0, 0xef, 0xf8, 0x80, 0xbd, + 0x01, 0x20, 0x48, 0x62, 0x80, 0xbd, 0x00, 0x00, + 0x78, 0x69, 0x01, 0x00, 0x70, 0xb5, 0x14, 0x4d, + 0x84, 0x6c, 0xe9, 0x68, 0x3c, 0x00, 0xe8, 0x35, + 0x00, 0x00, 0x00, 0x29, 0x17, 0xd0, 0x40, 0x30, + 0xec, 0x61, 0x40, 0x78, 0x00, 0x28, 0x01, 0xd1, + 0x01, 0x20, 0x68, 0x62, 0x28, 0x6a, 0x0e, 0x4e, + 0x00, 0x1b, 0xb0, 0x42, 0x0c, 0xd2, 0x08, 0xf0, + 0x3a, 0xfe, 0x29, 0x6a, 0x40, 0x1a, 0xb0, 0x42, + 0x03, 0xd2, 0x02, 0x22, 0x07, 0x21, 0x13, 0x20, + 0x09, 0xe0, 0x04, 0xf0, 0xb6, 0xfa, 0x70, 0xbd, + 0x07, 0x48, 0xa9, 0x68, 0x0b, 0xf0, 0x3c, 0x00, + 0x24, 0x36, 0x00, 0x00, 0xbd, 0xfe, 0x22, 0x1c, + 0x07, 0x21, 0x16, 0x20, 0x10, 0xf0, 0xc0, 0xf8, + 0x70, 0xbd, 0x00, 0x00, 0x78, 0x69, 0x01, 0x00, + 0xa0, 0x86, 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, + 0x0a, 0x49, 0x80, 0xb5, 0x00, 0x20, 0x88, 0x61, + 0x08, 0x69, 0x00, 0x28, 0x0c, 0xd0, 0x07, 0x48, + 0x1c, 0x30, 0x00, 0x78, 0x00, 0x28, 0x07, 0xd0, + 0x01, 0xf0, 0xd2, 0xff, 0x02, 0x28, 0x03, 0xd1, + 0x3c, 0x00, 0x60, 0x36, 0x00, 0x00, 0x00, 0xf0, + 0x12, 0xf9, 0x00, 0xf0, 0xbc, 0xf8, 0x80, 0xbd, + 0x00, 0x00, 0x5c, 0x69, 0x01, 0x00, 0xf0, 0xb5, + 0x06, 0x1c, 0x0c, 0x1c, 0x15, 0x1c, 0x91, 0xb0, + 0x01, 0xa8, 0x40, 0x21, 0xfc, 0xf7, 0x0d, 0xff, + 0x00, 0x21, 0x68, 0x46, 0xfd, 0xf7, 0xa7, 0xff, + 0x04, 0x90, 0x01, 0xa8, 0x06, 0x22, 0x08, 0x49, + 0xfc, 0xf7, 0x31, 0xff, 0x06, 0x22, 0x02, 0xa8, + 0x02, 0x30, 0x3c, 0x00, 0x9c, 0x36, 0x00, 0x00, + 0x06, 0x49, 0xfc, 0xf7, 0x2b, 0xff, 0x00, 0xab, + 0xdc, 0x76, 0x0c, 0x95, 0x31, 0x1c, 0x01, 0xa8, + 0x07, 0xf0, 0x4e, 0xf8, 0x11, 0xb0, 0xf0, 0xbd, + 0x12, 0x61, 0x01, 0x00, 0xf8, 0x67, 0x01, 0x00, + 0x03, 0x1c, 0x08, 0x1c, 0x19, 0x1c, 0x11, 0x4b, + 0x80, 0xb5, 0x06, 0xd0, 0x04, 0x21, 0x11, 0x80, + 0x04, 0x22, 0x19, 0x1c, 0xfc, 0xf7, 0x12, 0xff, + 0x16, 0xe0, 0x04, 0x22, 0x3c, 0x00, 0xd8, 0x36, + 0x00, 0x00, 0x01, 0x1c, 0x18, 0x1c, 0xfc, 0xf7, + 0x0c, 0xff, 0x09, 0x48, 0x10, 0x38, 0x00, 0x69, + 0x00, 0x28, 0x0c, 0xd0, 0x07, 0x48, 0x0c, 0x30, + 0x00, 0x78, 0x00, 0x28, 0x07, 0xd0, 0x01, 0xf0, + 0x84, 0xff, 0x02, 0x28, 0x03, 0xd1, 0x00, 0xf0, + 0xc4, 0xf8, 0x00, 0xf0, 0x6e, 0xf8, 0x01, 0x20, + 0x80, 0xbd, 0x6c, 0x69, 0x01, 0x00, 0xf8, 0xb5, + 0x04, 0x1c, 0x0f, 0x1c, 0x00, 0x25, 0x3c, 0x00, + 0x14, 0x37, 0x00, 0x00, 0x00, 0x26, 0x01, 0xf0, + 0x73, 0xff, 0x02, 0x28, 0x2f, 0xd1, 0x19, 0x49, + 0x01, 0x2f, 0x08, 0x68, 0x07, 0xd1, 0x02, 0x1c, + 0x22, 0x40, 0x0a, 0xd1, 0x20, 0x43, 0x08, 0x60, + 0xa0, 0x42, 0x06, 0xd1, 0x04, 0xe0, 0x00, 0x28, + 0x03, 0xd0, 0xa0, 0x43, 0x08, 0x60, 0x00, 0xd1, + 0x01, 0x25, 0x48, 0x68, 0x00, 0x28, 0x1a, 0xd1, + 0x00, 0x2d, 0x17, 0xd0, 0x01, 0x20, 0x48, 0x60, + 0x3c, 0x00, 0x50, 0x37, 0x00, 0x00, 0x38, 0x1c, + 0x08, 0xf0, 0x89, 0xfe, 0x0b, 0x48, 0x1c, 0x30, + 0x81, 0x69, 0x00, 0x29, 0x07, 0xd0, 0x00, 0x23, + 0x83, 0x61, 0x00, 0x22, 0x00, 0x21, 0x00, 0x20, + 0xff, 0xf7, 0xf1, 0xfe, 0x06, 0xe0, 0x00, 0x22, + 0x00, 0x21, 0x04, 0x48, 0xff, 0xf7, 0x7b, 0xff, + 0x00, 0xe0, 0x01, 0x26, 0x30, 0x1c, 0xf8, 0xbd, + 0x00, 0x00, 0x5c, 0x69, 0x01, 0x00, 0x51, 0x35, + 0x00, 0x00, 0x3c, 0x00, 0x8c, 0x37, 0x00, 0x00, + 0x03, 0x1c, 0x08, 0x1c, 0x19, 0x1c, 0x12, 0x4b, + 0x80, 0xb5, 0x06, 0xd0, 0x04, 0x21, 0x11, 0x80, + 0x04, 0x22, 0x19, 0x1c, 0xfc, 0xf7, 0xaa, 0xfe, + 0x18, 0xe0, 0x04, 0x22, 0x01, 0x1c, 0x18, 0x1c, + 0xfc, 0xf7, 0xa4, 0xfe, 0x0a, 0x48, 0x10, 0x30, + 0xc1, 0x68, 0x00, 0x29, 0x0e, 0xd0, 0x00, 0x78, + 0x00, 0x28, 0x0b, 0xd0, 0x01, 0xf0, 0x1e, 0xff, + 0x02, 0x28, 0x07, 0xd1, 0x3c, 0x00, 0xc8, 0x37, + 0x00, 0x00, 0x00, 0xf0, 0x64, 0xf8, 0x00, 0xf0, + 0x2e, 0xf8, 0x00, 0x28, 0x01, 0xd1, 0x09, 0xf0, + 0x7a, 0xfd, 0x01, 0x20, 0x80, 0xbd, 0x68, 0x69, + 0x01, 0x00, 0x10, 0xb5, 0x0a, 0x4c, 0x20, 0x69, + 0x00, 0x28, 0x09, 0xd0, 0xa1, 0x69, 0x00, 0x29, + 0x06, 0xd1, 0x7d, 0x21, 0xc9, 0x00, 0x41, 0x43, + 0x03, 0x22, 0x07, 0x20, 0x0f, 0xf0, 0xe1, 0xfe, + 0x21, 0x69, 0x01, 0x20, 0x00, 0x29, 0x3c, 0x00, + 0x04, 0x38, 0x00, 0x00, 0x00, 0xd1, 0x00, 0x20, + 0x10, 0xbd, 0x00, 0x00, 0x5c, 0x69, 0x01, 0x00, + 0x10, 0xb5, 0x05, 0x4c, 0x00, 0x28, 0x03, 0xd0, + 0xfd, 0xf7, 0x9a, 0xfc, 0xe0, 0x60, 0x10, 0xbd, + 0x01, 0x20, 0x00, 0x21, 0xe1, 0x60, 0x10, 0xbd, + 0x78, 0x69, 0x01, 0x00, 0x0a, 0x48, 0x0a, 0x49, + 0x10, 0xb5, 0xc0, 0x68, 0x1c, 0x39, 0xc9, 0x68, + 0x00, 0x28, 0x03, 0xd0, 0x00, 0x29, 0x01, 0xd0, + 0x3c, 0x00, 0x40, 0x38, 0x00, 0x00, 0x01, 0x24, + 0x00, 0xe0, 0x00, 0x24, 0x00, 0x2c, 0x03, 0xd0, + 0x02, 0x22, 0x07, 0x20, 0x0f, 0xf0, 0xb7, 0xfe, + 0x20, 0x1c, 0x10, 0xbd, 0x00, 0x00, 0x78, 0x69, + 0x01, 0x00, 0x10, 0xb5, 0x09, 0x4c, 0x00, 0x20, + 0x21, 0x69, 0x00, 0x29, 0x0c, 0xd0, 0x06, 0x49, + 0x1c, 0x31, 0x09, 0x78, 0x00, 0x29, 0x07, 0xd0, + 0x00, 0xf0, 0x09, 0xf8, 0x01, 0x20, 0xa0, 0x61, + 0x20, 0x69, 0x3c, 0x00, 0x7c, 0x38, 0x00, 0x00, + 0x7d, 0x23, 0xdb, 0x00, 0x58, 0x43, 0x10, 0xbd, + 0x5c, 0x69, 0x01, 0x00, 0x80, 0xb5, 0x03, 0x21, + 0x07, 0x20, 0x0f, 0xf0, 0xd1, 0xfe, 0x80, 0xbd, + 0x80, 0xb5, 0x02, 0x21, 0x07, 0x20, 0x0f, 0xf0, + 0xcb, 0xfe, 0x80, 0xbd, 0x06, 0x48, 0x80, 0xb5, + 0x00, 0x78, 0x00, 0x28, 0x01, 0xd0, 0xfd, 0xf7, + 0x29, 0xfd, 0x00, 0x22, 0x07, 0x21, 0x11, 0x20, + 0x0f, 0xf0, 0x7c, 0xff, 0x3c, 0x00, 0xb8, 0x38, + 0x00, 0x00, 0x80, 0xbd, 0x00, 0x00, 0x78, 0x69, + 0x01, 0x00, 0x10, 0xb5, 0x04, 0x1c, 0x10, 0x1c, + 0x06, 0x4a, 0x51, 0x61, 0x00, 0xf0, 0xa3, 0xf8, + 0x10, 0x20, 0x00, 0x2c, 0x00, 0xd1, 0x11, 0x20, + 0x00, 0x22, 0x07, 0x21, 0x0f, 0xf0, 0x69, 0xff, + 0x10, 0xbd, 0x5c, 0x69, 0x01, 0x00, 0x01, 0x49, + 0x48, 0x62, 0x70, 0x47, 0x00, 0x00, 0x44, 0x7d, + 0x01, 0x00, 0x10, 0xb5, 0x09, 0x4c, 0x3c, 0x00, + 0xf4, 0x38, 0x00, 0x00, 0xe0, 0x69, 0x00, 0x28, + 0x0c, 0xd1, 0xe0, 0x62, 0x01, 0x20, 0xe0, 0x61, + 0x0b, 0xf0, 0x08, 0xfd, 0x0b, 0xf0, 0x74, 0xfe, + 0x01, 0x20, 0x00, 0xf0, 0xb5, 0xf8, 0x0f, 0xf0, + 0x4d, 0xfa, 0x60, 0x63, 0x10, 0xbd, 0x00, 0x00, + 0x44, 0x7d, 0x01, 0x00, 0x05, 0x49, 0x80, 0xb5, + 0x00, 0x20, 0xc8, 0x61, 0x88, 0x63, 0x00, 0xf0, + 0x89, 0xf8, 0x00, 0xf0, 0x01, 0xf9, 0x02, 0xf0, + 0x3c, 0x00, 0x30, 0x39, 0x00, 0x00, 0x91, 0xfb, + 0x80, 0xbd, 0x44, 0x7d, 0x01, 0x00, 0x10, 0xb5, + 0x01, 0x28, 0x38, 0xd1, 0x08, 0x06, 0x00, 0x0e, + 0x05, 0x28, 0x32, 0xd1, 0x1d, 0x4c, 0x20, 0x78, + 0x01, 0x28, 0x09, 0xd0, 0x02, 0x28, 0x1b, 0xd0, + 0x03, 0x28, 0x2a, 0xd1, 0x02, 0xf0, 0x7d, 0xfb, + 0x00, 0xf0, 0x6f, 0xf8, 0x01, 0x20, 0x10, 0xe0, + 0x17, 0x48, 0x21, 0x6b, 0x0b, 0xf0, 0x1b, 0xfd, + 0x0b, 0xf0, 0x3c, 0x00, 0x6c, 0x39, 0x00, 0x00, + 0x41, 0xfe, 0x15, 0x48, 0x00, 0x69, 0x03, 0x28, + 0x01, 0xd3, 0xc0, 0x07, 0x03, 0xd5, 0x01, 0x21, + 0x20, 0x6b, 0x07, 0xf0, 0x19, 0xff, 0x02, 0x20, + 0x00, 0xf0, 0x78, 0xf8, 0x10, 0xbd, 0x0f, 0x48, + 0x00, 0x68, 0x20, 0x64, 0x0a, 0x48, 0x5c, 0x30, + 0xc1, 0x68, 0x02, 0x69, 0x89, 0x18, 0xc1, 0x60, + 0x03, 0xf0, 0xcc, 0xfc, 0x03, 0x20, 0x00, 0xf0, + 0x69, 0xf8, 0x01, 0x20, 0x3c, 0x00, 0xa8, 0x39, + 0x00, 0x00, 0xe0, 0x62, 0x10, 0xbd, 0x09, 0x21, + 0x00, 0xe0, 0x08, 0x21, 0x09, 0x20, 0xfd, 0xf7, + 0x76, 0xfc, 0x10, 0xbd, 0x00, 0x00, 0x44, 0x7d, + 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, 0xf4, 0x68, + 0x01, 0x00, 0x78, 0x6e, 0x01, 0x00, 0xb0, 0xb5, + 0x0f, 0x4c, 0x20, 0x78, 0x65, 0x1e, 0x01, 0x28, + 0x0f, 0xd1, 0x00, 0x20, 0xff, 0xf7, 0xa1, 0xfc, + 0x0c, 0x49, 0x09, 0x88, 0x49, 0x08, 0x3c, 0x00, + 0xe4, 0x39, 0x00, 0x00, 0x40, 0x1a, 0x0f, 0xf0, + 0x19, 0xf9, 0x00, 0x28, 0x04, 0xd0, 0x28, 0x78, + 0x01, 0x28, 0x07, 0xd0, 0x02, 0x28, 0x05, 0xd0, + 0x20, 0x78, 0x00, 0x28, 0x04, 0xd1, 0x28, 0x78, + 0x03, 0x28, 0x01, 0xd1, 0x01, 0x20, 0xb0, 0xbd, + 0x00, 0x20, 0xb0, 0xbd, 0x45, 0x7d, 0x01, 0x00, + 0xf4, 0x67, 0x01, 0x00, 0x01, 0x49, 0xc8, 0x64, + 0x70, 0x47, 0x00, 0x00, 0x44, 0x7d, 0x01, 0x00, + 0x3c, 0x00, 0x20, 0x3a, 0x00, 0x00, 0x04, 0x49, + 0x05, 0x4a, 0x89, 0x68, 0x12, 0x6d, 0x01, 0x20, + 0x91, 0x42, 0x00, 0xd3, 0x00, 0x20, 0x70, 0x47, + 0x00, 0x00, 0xf4, 0x68, 0x01, 0x00, 0x44, 0x7d, + 0x01, 0x00, 0x10, 0xb5, 0x06, 0x4c, 0x20, 0x6b, + 0x07, 0xf0, 0xf9, 0xfe, 0xa0, 0x6b, 0x00, 0x28, + 0x03, 0xd1, 0x03, 0x48, 0x21, 0x6b, 0x0b, 0xf0, + 0x92, 0xfc, 0x10, 0xbd, 0x00, 0x00, 0x44, 0x7d, + 0x01, 0x00, 0x3c, 0x00, 0x5c, 0x3a, 0x00, 0x00, + 0x34, 0x63, 0x01, 0x00, 0x04, 0x48, 0x00, 0x78, + 0x02, 0x28, 0x01, 0xd0, 0x03, 0x28, 0x01, 0xd1, + 0x01, 0x20, 0x70, 0x47, 0x00, 0x20, 0x70, 0x47, + 0x44, 0x7d, 0x01, 0x00, 0xf8, 0xb5, 0x07, 0x1c, + 0xff, 0xf7, 0xd0, 0xff, 0x06, 0x1c, 0x01, 0x2f, + 0x26, 0x4d, 0x1f, 0xd0, 0x02, 0x2f, 0x45, 0xd0, + 0x03, 0x2f, 0x12, 0xd1, 0x24, 0x48, 0x25, 0x4b, + 0x00, 0x69, 0x6a, 0x69, 0x3c, 0x00, 0x98, 0x3a, + 0x00, 0x00, 0x41, 0x08, 0x5a, 0x43, 0x23, 0x4b, + 0xd4, 0x18, 0x8c, 0x42, 0x00, 0xd9, 0x0c, 0x1c, + 0x00, 0x2e, 0x05, 0xd0, 0x1e, 0x49, 0x5b, 0x39, + 0x09, 0x78, 0x00, 0x29, 0x00, 0xd1, 0x04, 0x1c, + 0x05, 0x22, 0x21, 0x1c, 0x09, 0x20, 0x0f, 0xf0, + 0x80, 0xfd, 0x18, 0x4a, 0x5c, 0x3a, 0x17, 0x70, + 0xf8, 0xbd, 0xff, 0xf7, 0xd6, 0xfb, 0x00, 0x28, + 0x02, 0xd0, 0x28, 0x69, 0x00, 0x28, 0x3c, 0x00, + 0xd4, 0x3a, 0x00, 0x00, 0x0e, 0xd0, 0x04, 0xf0, + 0xcf, 0xfb, 0x13, 0x4b, 0x69, 0x69, 0x11, 0x4a, + 0x59, 0x43, 0x5c, 0x3a, 0xd2, 0x6b, 0x89, 0x18, + 0x88, 0x42, 0x01, 0xd9, 0x44, 0x1a, 0x04, 0xe0, + 0x00, 0x24, 0x02, 0xe0, 0x04, 0xf0, 0xae, 0xfd, + 0x04, 0x1c, 0x00, 0x2e, 0xdb, 0xd0, 0x09, 0x48, + 0x5b, 0x38, 0x00, 0x78, 0x01, 0x28, 0xd6, 0xd1, + 0x08, 0x4b, 0x9c, 0x42, 0x02, 0xd9, 0x58, 0x42, + 0x3c, 0x00, 0x10, 0x3b, 0x00, 0x00, 0x24, 0x18, + 0xd0, 0xe7, 0x00, 0x24, 0xce, 0xe7, 0x04, 0xf0, + 0xae, 0xfb, 0xca, 0xe7, 0x00, 0x00, 0xf4, 0x68, + 0x01, 0x00, 0xa0, 0x7d, 0x01, 0x00, 0x98, 0x3a, + 0x00, 0x00, 0x88, 0x13, 0x00, 0x00, 0x80, 0xb5, + 0x05, 0x21, 0x09, 0x20, 0x0f, 0xf0, 0x7d, 0xfd, + 0x02, 0x49, 0x00, 0x20, 0x08, 0x70, 0x80, 0xbd, + 0x00, 0x00, 0x44, 0x7d, 0x01, 0x00, 0x70, 0xb5, + 0x06, 0x1c, 0x3c, 0x00, 0x4c, 0x3b, 0x00, 0x00, + 0x0d, 0xf0, 0xbc, 0xfa, 0xff, 0xf7, 0xce, 0xfe, + 0x09, 0x4c, 0x0a, 0x48, 0x21, 0x6b, 0x0b, 0xf0, + 0x21, 0xfc, 0x01, 0x25, 0x01, 0x21, 0x30, 0x06, + 0x00, 0x0e, 0xa5, 0x63, 0x07, 0xf0, 0x3a, 0xfe, + 0x05, 0x48, 0x29, 0x02, 0x09, 0x58, 0x00, 0x29, + 0x00, 0xd1, 0x05, 0x61, 0x70, 0xbd, 0x00, 0x00, + 0x44, 0x7d, 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, + 0xf4, 0x67, 0x01, 0x00, 0x3c, 0x00, 0x88, 0x3b, + 0x00, 0x00, 0x02, 0x4a, 0x11, 0x6c, 0x08, 0x43, + 0x10, 0x64, 0x70, 0x47, 0x00, 0x00, 0x44, 0x7d, + 0x01, 0x00, 0x80, 0xb5, 0xff, 0xf7, 0xbf, 0xfe, + 0x0b, 0xf0, 0xa1, 0xfb, 0x80, 0xbd, 0x02, 0x4a, + 0x01, 0x1c, 0x10, 0x69, 0x11, 0x61, 0x70, 0x47, + 0x00, 0x00, 0x44, 0x7d, 0x01, 0x00, 0xf3, 0xb5, + 0x06, 0x1c, 0x00, 0x20, 0x89, 0xb0, 0xf8, 0x4c, + 0x08, 0x90, 0xe2, 0x69, 0x08, 0x25, 0x3c, 0x00, + 0xc4, 0x3b, 0x00, 0x00, 0x00, 0x2a, 0x03, 0xd0, + 0x06, 0xa9, 0x07, 0xa8, 0xfc, 0xf7, 0x06, 0xfc, + 0x30, 0x1c, 0xf3, 0x4e, 0x00, 0x27, 0x20, 0x36, + 0x82, 0x28, 0x6f, 0xd0, 0x15, 0xdc, 0x01, 0x28, + 0x18, 0xd0, 0x80, 0x28, 0x6b, 0xd1, 0xee, 0x4d, + 0x80, 0x3d, 0xa8, 0x68, 0x01, 0x28, 0x67, 0xd1, + 0x68, 0x68, 0x0f, 0xf0, 0x1b, 0xf8, 0x00, 0x28, + 0x63, 0xd1, 0x01, 0x21, 0x01, 0x20, 0x0d, 0xf0, + 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x9d, 0xf8, + 0x08, 0xf0, 0xdb, 0xfd, 0x0b, 0xb0, 0xf0, 0xbd, + 0x83, 0x28, 0x6d, 0xd0, 0x84, 0x28, 0x55, 0xd1, + 0xe7, 0xe0, 0x0a, 0x98, 0x0a, 0x28, 0x04, 0xd2, + 0x03, 0xa3, 0x1b, 0x18, 0x1b, 0x5a, 0x5b, 0x00, + 0x9f, 0x44, 0xf6, 0xe0, 0x00, 0x00, 0xee, 0x00, + 0x0b, 0x00, 0xf7, 0x00, 0xf7, 0x00, 0xf7, 0x00, + 0xf7, 0x00, 0x2f, 0x00, 0x88, 0x00, 0x8b, 0x00, + 0xad, 0x00, 0x3c, 0x00, 0x3c, 0x3c, 0x00, 0x00, + 0x00, 0xf0, 0x56, 0xfe, 0x00, 0x28, 0x17, 0xd0, + 0xd6, 0x4a, 0x80, 0x3a, 0xd1, 0x6a, 0x06, 0x98, + 0x81, 0x42, 0x16, 0xd0, 0x06, 0x21, 0x00, 0x28, + 0x00, 0xd1, 0x07, 0x21, 0x0d, 0x06, 0x2d, 0x0e, + 0x00, 0x28, 0x0e, 0xd0, 0xcf, 0x4a, 0x01, 0x20, + 0x80, 0x3a, 0x50, 0x65, 0x0f, 0xf0, 0xa0, 0xf8, + 0xcc, 0x4a, 0x80, 0x3a, 0x50, 0x66, 0x04, 0xe0, + 0x00, 0x21, 0x16, 0x20, 0x3c, 0x00, 0x78, 0x3c, + 0x00, 0x00, 0x0f, 0xf0, 0xdc, 0xfc, 0x01, 0x25, + 0x02, 0x20, 0x05, 0x90, 0x2e, 0xe2, 0xc6, 0x48, + 0x80, 0x38, 0x40, 0x6d, 0x00, 0x28, 0x2e, 0xd0, + 0xc6, 0x49, 0x20, 0x69, 0xc4, 0x4d, 0x40, 0x18, + 0x0e, 0xf0, 0xc1, 0xff, 0x00, 0x28, 0x12, 0xd0, + 0x0f, 0xf0, 0x85, 0xf8, 0xc1, 0x49, 0x49, 0x42, + 0x40, 0x18, 0xbd, 0x49, 0x20, 0x61, 0x80, 0x39, + 0x48, 0x6e, 0x40, 0x19, 0x0e, 0xf0, 0x3c, 0x00, + 0xb4, 0x3c, 0x00, 0x00, 0xbb, 0xff, 0x00, 0x28, + 0x11, 0xd0, 0x0a, 0xe0, 0xf7, 0xe0, 0x17, 0xe2, + 0xb2, 0xe0, 0xb0, 0xe0, 0xb6, 0x49, 0x20, 0x69, + 0x80, 0x39, 0x49, 0x6e, 0x40, 0x1a, 0xa8, 0x42, + 0x05, 0xdb, 0xb3, 0x49, 0xb5, 0x4d, 0x80, 0x39, + 0x4f, 0x65, 0x03, 0xf0, 0x27, 0xfb, 0x06, 0x22, + 0x29, 0x1c, 0x16, 0x20, 0x0f, 0xf0, 0x72, 0xfc, + 0x47, 0xe0, 0x95, 0xe0, 0x00, 0xf0, 0xfe, 0xfd, + 0x3c, 0x00, 0xf0, 0x3c, 0x00, 0x00, 0x00, 0x28, + 0x42, 0xd1, 0xaa, 0x4d, 0xc4, 0x3d, 0xef, 0x60, + 0x08, 0xf0, 0x19, 0xfd, 0x03, 0xf0, 0x15, 0xfb, + 0xa8, 0x6a, 0x00, 0x28, 0x02, 0xd0, 0xff, 0xf7, + 0x4c, 0xff, 0xaf, 0x62, 0xa4, 0x48, 0x80, 0x38, + 0x00, 0x68, 0x00, 0x21, 0xff, 0xf7, 0xf9, 0xfc, + 0x08, 0xf0, 0x3f, 0xf9, 0x09, 0x21, 0x16, 0x20, + 0x0f, 0xf0, 0x87, 0xfc, 0x00, 0x22, 0x16, 0x21, + 0x83, 0x20, 0x3c, 0x00, 0x2c, 0x3d, 0x00, 0x00, + 0x0f, 0xf0, 0x40, 0xfd, 0xff, 0xf7, 0x86, 0xfc, + 0x21, 0xe0, 0x00, 0xf0, 0x1b, 0xfe, 0x1e, 0xe0, + 0x06, 0xf0, 0x54, 0xfa, 0x97, 0x4d, 0x80, 0x3d, + 0xa9, 0x6f, 0x40, 0x1a, 0x04, 0x90, 0x06, 0x98, + 0x00, 0x28, 0x01, 0xd0, 0xaf, 0x65, 0x02, 0xe0, + 0xa8, 0x6d, 0x00, 0x28, 0x08, 0xd1, 0x91, 0x48, + 0xc4, 0x38, 0x00, 0x78, 0x80, 0x07, 0x03, 0xd5, + 0x92, 0x48, 0x47, 0x60, 0x3c, 0x00, 0x68, 0x3d, + 0x00, 0x00, 0x00, 0xf0, 0x02, 0xfe, 0x04, 0x98, + 0xff, 0x38, 0x23, 0x38, 0x14, 0x28, 0x02, 0xd2, + 0x01, 0x20, 0xe8, 0x63, 0x53, 0xe0, 0xef, 0x63, + 0x51, 0xe0, 0x87, 0x4a, 0xb5, 0x7a, 0x80, 0x3a, + 0x00, 0x2d, 0x4c, 0xd0, 0x0d, 0xf0, 0x71, 0xff, + 0x00, 0xf0, 0xad, 0xfd, 0x07, 0x1c, 0x82, 0x48, + 0x80, 0x38, 0x40, 0x6f, 0xff, 0x30, 0x5f, 0x30, + 0x0e, 0xf0, 0x3d, 0xff, 0x02, 0x1c, 0x3c, 0x00, + 0xa4, 0x3d, 0x00, 0x00, 0x7e, 0x48, 0x80, 0x38, + 0x40, 0x6d, 0x00, 0x28, 0x1a, 0xd1, 0x00, 0xf0, + 0xf1, 0xfd, 0x00, 0x28, 0x16, 0xd1, 0x04, 0x2d, + 0x02, 0xd1, 0x00, 0x2f, 0x12, 0xd1, 0x1b, 0xe0, + 0x00, 0x2f, 0x06, 0xd0, 0x02, 0x2d, 0x14, 0xd0, + 0x79, 0x48, 0x40, 0x68, 0x00, 0x28, 0x09, 0xd0, + 0x12, 0xe0, 0x00, 0x2a, 0x10, 0xd1, 0x4b, 0x21, + 0xc9, 0x00, 0x01, 0x23, 0x09, 0x22, 0x16, 0x20, + 0x3c, 0x00, 0xe0, 0x3d, 0x00, 0x00, 0x0f, 0xf0, + 0xd6, 0xfc, 0x6e, 0x4a, 0x73, 0x48, 0x80, 0x3a, + 0x11, 0x68, 0x0b, 0xf0, 0xd8, 0xfa, 0x18, 0xe0, + 0x01, 0x21, 0x00, 0x20, 0x01, 0xe0, 0x01, 0x21, + 0x01, 0x20, 0x00, 0xf0, 0x2a, 0xfe, 0x10, 0xe0, + 0x67, 0x4a, 0x6c, 0x49, 0x80, 0x3a, 0x90, 0x6e, + 0x40, 0x18, 0x90, 0x66, 0x01, 0x25, 0x08, 0x95, + 0x8b, 0xe1, 0x04, 0x21, 0x6c, 0xe1, 0x61, 0x4a, + 0x66, 0x48, 0x3c, 0x00, 0x1c, 0x3e, 0x00, 0x00, + 0x80, 0x3a, 0x11, 0x68, 0x0b, 0xf0, 0xaa, 0xfa, + 0x88, 0xe1, 0xaf, 0x60, 0xa8, 0x6f, 0xe8, 0x67, + 0x63, 0x48, 0x01, 0x6d, 0xa9, 0x67, 0x07, 0x9a, + 0x14, 0x20, 0x00, 0x2a, 0x00, 0xd1, 0x00, 0x20, + 0x08, 0x18, 0x12, 0x30, 0xa8, 0x66, 0x70, 0x78, + 0xb0, 0x70, 0x30, 0x78, 0x70, 0x70, 0x02, 0x20, + 0x30, 0x70, 0xa0, 0x69, 0xfc, 0xf7, 0xc2, 0xfa, + 0xef, 0x64, 0xa8, 0x6f, 0x3c, 0x00, 0x58, 0x3e, + 0x00, 0x00, 0xe9, 0x6f, 0x59, 0x4b, 0x40, 0x1a, + 0x98, 0x42, 0x12, 0xd2, 0x68, 0x6d, 0x06, 0x99, + 0x88, 0x42, 0x0e, 0xd0, 0x30, 0x78, 0x02, 0x28, + 0x0b, 0xd8, 0x0e, 0xf0, 0x9c, 0xff, 0xa9, 0x6f, + 0x08, 0x22, 0x40, 0x1a, 0x52, 0x49, 0x09, 0x1a, + 0x3b, 0x1c, 0x16, 0x20, 0x0f, 0xf0, 0x85, 0xfc, + 0x00, 0xe0, 0xaf, 0x65, 0x01, 0x20, 0x05, 0x90, + 0x08, 0x90, 0x43, 0x48, 0x02, 0x25, 0x3c, 0x00, + 0x94, 0x3e, 0x00, 0x00, 0xc4, 0x38, 0xc1, 0x68, + 0x00, 0x29, 0x72, 0xd1, 0x01, 0x21, 0xc1, 0x60, + 0x49, 0x48, 0x00, 0x6b, 0x00, 0x28, 0x6c, 0xd0, + 0x08, 0xf0, 0x66, 0xfc, 0x69, 0xe0, 0x3c, 0x48, + 0x00, 0x22, 0x01, 0x92, 0x80, 0x38, 0x80, 0x68, + 0x01, 0x28, 0x04, 0xd1, 0x38, 0x48, 0x80, 0x38, + 0x87, 0x60, 0x01, 0x20, 0x48, 0xe1, 0x3a, 0x48, + 0x01, 0x23, 0x43, 0x60, 0x34, 0x48, 0xc4, 0x38, + 0x3c, 0x00, 0xd0, 0x3e, 0x00, 0x00, 0x00, 0x78, + 0x00, 0x28, 0x0a, 0xd1, 0x00, 0xf0, 0x25, 0xfe, + 0x00, 0x28, 0x06, 0xd0, 0xff, 0x21, 0x91, 0x31, + 0x01, 0x23, 0x09, 0x22, 0x16, 0x20, 0x0f, 0xf0, + 0x52, 0xfc, 0x2c, 0x49, 0x80, 0x39, 0x48, 0x6f, + 0x89, 0x6f, 0x42, 0x1a, 0x03, 0x92, 0x06, 0xf0, + 0x76, 0xf9, 0x28, 0x49, 0x80, 0x39, 0x89, 0x6f, + 0x03, 0x9a, 0x40, 0x1a, 0x02, 0x90, 0x37, 0x20, + 0x00, 0x01, 0x3c, 0x00, 0x0c, 0x3f, 0x00, 0x00, + 0x10, 0x1a, 0x50, 0x28, 0x0d, 0xd2, 0x23, 0x48, + 0x80, 0x38, 0x40, 0x6d, 0x00, 0x28, 0x04, 0xd1, + 0x02, 0x98, 0xff, 0x38, 0x55, 0x38, 0x14, 0x28, + 0x01, 0xd2, 0x01, 0x22, 0x00, 0xe0, 0x00, 0x22, + 0x01, 0x92, 0x03, 0x9a, 0x01, 0x20, 0xff, 0x3a, + 0x0b, 0x3a, 0x50, 0x2a, 0x00, 0xd3, 0x00, 0x20, + 0x04, 0x90, 0x00, 0x28, 0x0a, 0xd0, 0x17, 0x48, + 0x80, 0x38, 0xc0, 0x6f, 0x3c, 0x00, 0x48, 0x3f, + 0x00, 0x00, 0x08, 0x1a, 0x9b, 0x21, 0xc9, 0x00, + 0x40, 0x1a, 0x14, 0x28, 0x01, 0xd2, 0x01, 0x22, + 0x00, 0xe0, 0x00, 0x22, 0x00, 0x92, 0x00, 0x2a, + 0x11, 0xd0, 0x0f, 0x4d, 0x01, 0x20, 0x80, 0x3d, + 0x68, 0x65, 0x0e, 0xf0, 0x20, 0xff, 0x68, 0x66, + 0x01, 0x25, 0x01, 0x21, 0x16, 0x20, 0x0f, 0xf0, + 0x5e, 0xfb, 0x00, 0x21, 0x16, 0x20, 0x0f, 0xf0, + 0x5a, 0xfb, 0x00, 0xe0, 0xba, 0xe0, 0x3c, 0x00, + 0x84, 0x3f, 0x00, 0x00, 0xf0, 0x79, 0x02, 0x28, + 0x3c, 0xd8, 0x05, 0x4a, 0x80, 0x3a, 0x51, 0x6c, + 0x00, 0x29, 0x37, 0xd1, 0x13, 0x6c, 0x11, 0x1c, + 0x00, 0x2b, 0x33, 0xd1, 0x16, 0xe0, 0x00, 0x00, + 0x24, 0x6d, 0x01, 0x00, 0x50, 0xc3, 0x00, 0x00, + 0xc0, 0x5c, 0x15, 0x00, 0x70, 0x99, 0x14, 0x00, + 0xb0, 0x57, 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, + 0xe2, 0x04, 0x00, 0x00, 0x00, 0x90, 0x07, 0x00, + 0x3c, 0x00, 0xc0, 0x3f, 0x00, 0x00, 0x53, 0x07, + 0x00, 0x00, 0x1e, 0x02, 0x00, 0x00, 0xc8, 0x57, + 0x01, 0x00, 0x4a, 0x6d, 0x00, 0x2a, 0x02, 0xd0, + 0xb2, 0x7a, 0x02, 0x2a, 0x15, 0xd1, 0x00, 0x9a, + 0x00, 0x2a, 0x03, 0xd0, 0xca, 0x6d, 0x01, 0x32, + 0xca, 0x65, 0x00, 0xe0, 0xcf, 0x65, 0x01, 0x9a, + 0x00, 0x2a, 0x0b, 0xd0, 0x8a, 0x6f, 0xcb, 0x6f, + 0xd2, 0x1a, 0x5a, 0x4b, 0x9a, 0x42, 0x02, 0xd2, + 0x8a, 0x6d, 0x3c, 0x00, 0xfc, 0x3f, 0x00, 0x00, + 0x01, 0x32, 0x00, 0xe0, 0x01, 0x22, 0x8a, 0x65, + 0x00, 0xe0, 0x8f, 0x65, 0x04, 0x99, 0x00, 0x29, + 0x01, 0xd1, 0x02, 0x28, 0x0b, 0xd9, 0x54, 0x4a, + 0x02, 0x28, 0x1e, 0xd9, 0xd0, 0x6f, 0x61, 0x68, + 0x88, 0x42, 0x1a, 0xd1, 0x91, 0x6f, 0x08, 0x1a, + 0x50, 0x49, 0x88, 0x42, 0x15, 0xdd, 0x4e, 0x4b, + 0x98, 0x6f, 0xe1, 0x68, 0x40, 0x1a, 0x7d, 0x21, + 0xc9, 0x00, 0x88, 0x42, 0x3c, 0x00, 0x38, 0x40, + 0x00, 0x00, 0x0b, 0xdd, 0x61, 0x69, 0x40, 0x1a, + 0x00, 0x28, 0x04, 0xdd, 0x02, 0x11, 0x40, 0x11, + 0x10, 0x18, 0x40, 0x18, 0x01, 0xe0, 0x80, 0x10, + 0x08, 0x18, 0x60, 0x61, 0x58, 0x6f, 0xe0, 0x60, + 0x03, 0x98, 0xff, 0x38, 0x23, 0x38, 0x14, 0x28, + 0x09, 0xd2, 0x02, 0x98, 0xff, 0x38, 0x23, 0x38, + 0x14, 0x28, 0x04, 0xd2, 0x3e, 0x4a, 0x90, 0x6f, + 0x50, 0x64, 0x90, 0x6a, 0x90, 0x64, 0x3c, 0x00, + 0x74, 0x40, 0x00, 0x00, 0x0e, 0xf0, 0x9a, 0xfe, + 0x3a, 0x49, 0x49, 0x6c, 0x40, 0x1a, 0x3b, 0x49, + 0x88, 0x42, 0x01, 0xd9, 0x37, 0x49, 0x4f, 0x64, + 0x39, 0x49, 0x03, 0x98, 0x40, 0x18, 0x14, 0x28, + 0x07, 0xd2, 0x34, 0x49, 0xc8, 0x6b, 0x00, 0x28, + 0x03, 0xd0, 0x88, 0x6f, 0x08, 0x64, 0x88, 0x6a, + 0x88, 0x64, 0x0e, 0xf0, 0x83, 0xfe, 0x2f, 0x49, + 0x09, 0x6c, 0x40, 0x1a, 0x31, 0x49, 0x88, 0x42, + 0x3c, 0x00, 0xb0, 0x40, 0x00, 0x00, 0x01, 0xd9, + 0x2c, 0x48, 0x07, 0x64, 0x04, 0x20, 0x05, 0x90, + 0x08, 0x21, 0x16, 0x20, 0x0f, 0xf0, 0xb9, 0xfa, + 0x28, 0x48, 0x40, 0x6d, 0x00, 0x28, 0x02, 0xd0, + 0x04, 0x99, 0x00, 0x29, 0x08, 0xd0, 0x29, 0x49, + 0x00, 0x28, 0x00, 0xd1, 0x29, 0x49, 0x3b, 0x1c, + 0x06, 0x22, 0x16, 0x20, 0x0f, 0xf0, 0x57, 0xfb, + 0x02, 0x2d, 0x09, 0xd0, 0x06, 0x2d, 0x0a, 0xd0, + 0x07, 0x2d, 0x3c, 0x00, 0xec, 0x40, 0x00, 0x00, + 0x13, 0xd1, 0x07, 0xe0, 0x01, 0x21, 0x16, 0x20, + 0xfd, 0xf7, 0xd6, 0xf8, 0x1e, 0xe0, 0x1a, 0x4a, + 0x57, 0x63, 0x97, 0x63, 0x18, 0x4a, 0x06, 0x98, + 0xd0, 0x62, 0x07, 0x99, 0x11, 0x63, 0x53, 0x6b, + 0x18, 0x43, 0x50, 0x63, 0x90, 0x6b, 0x08, 0x43, + 0x90, 0x63, 0x05, 0x98, 0x00, 0x28, 0x05, 0xd0, + 0x05, 0x98, 0x0c, 0xf0, 0x5f, 0xfa, 0x05, 0x98, + 0x0c, 0xf0, 0xd2, 0xf9, 0x3c, 0x00, 0x28, 0x41, + 0x00, 0x00, 0x08, 0x2d, 0x05, 0xd0, 0x0d, 0x48, + 0x44, 0x38, 0x85, 0x70, 0x28, 0x1c, 0x03, 0xf0, + 0xdc, 0xfd, 0x11, 0x49, 0xe0, 0x69, 0x88, 0x42, + 0x00, 0xd1, 0x61, 0xe5, 0x08, 0x98, 0x00, 0x28, + 0xfb, 0xd0, 0xb0, 0x7a, 0x02, 0x28, 0xf8, 0xd1, + 0x01, 0x21, 0x16, 0x20, 0x0f, 0xf0, 0x6f, 0xfa, + 0x02, 0x20, 0x0d, 0xf0, 0xe8, 0xfe, 0x53, 0xe5, + 0x00, 0x00, 0x53, 0x07, 0x00, 0x00, 0x3c, 0x00, + 0x64, 0x41, 0x00, 0x00, 0xa4, 0x6c, 0x01, 0x00, + 0x20, 0xa1, 0x07, 0x00, 0x20, 0x4e, 0x00, 0x00, + 0x3f, 0xfb, 0xff, 0xff, 0xa0, 0x86, 0x01, 0x00, + 0x50, 0xc3, 0x00, 0x00, 0xc0, 0x5c, 0x15, 0x00, + 0xf1, 0x1d, 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x70, 0x47, 0x00, 0x00, 0xf8, 0xb5, 0x21, 0x48, + 0x00, 0x68, 0x21, 0x4d, 0x69, 0x69, 0x08, 0x40, + 0x01, 0xd1, 0x01, 0x27, 0x00, 0xe0, 0x00, 0x27, + 0x3c, 0x00, 0xa0, 0x41, 0x00, 0x00, 0x1d, 0x4d, + 0x01, 0x26, 0x69, 0x6a, 0x00, 0x29, 0x00, 0xd0, + 0x00, 0x26, 0x1b, 0x4d, 0x1a, 0x48, 0x2c, 0x1c, + 0xa0, 0x30, 0x02, 0x7a, 0x28, 0x1c, 0x40, 0x30, + 0x80, 0x34, 0x10, 0x23, 0xb7, 0x42, 0x10, 0xd1, + 0x01, 0x25, 0xc5, 0x80, 0x00, 0x29, 0x00, 0xd0, + 0x00, 0x23, 0x1a, 0x43, 0x11, 0x1c, 0x01, 0x73, + 0x01, 0x20, 0x0e, 0xf0, 0x88, 0xfe, 0x08, 0x20, + 0x20, 0x70, 0x3c, 0x00, 0xdc, 0x41, 0x00, 0x00, + 0x00, 0x22, 0x16, 0x21, 0x80, 0x20, 0x13, 0xe0, + 0x11, 0x27, 0xc7, 0x80, 0x2e, 0x1c, 0x0b, 0x4d, + 0x00, 0x29, 0x00, 0xd1, 0x00, 0x23, 0x1a, 0x43, + 0x11, 0x1c, 0x01, 0x73, 0x01, 0x20, 0x0e, 0xf0, + 0x75, 0xfe, 0x08, 0x20, 0x20, 0x70, 0x30, 0x6d, + 0x00, 0x22, 0x16, 0x21, 0x68, 0x67, 0x82, 0x20, + 0x0f, 0xf0, 0xd0, 0xfa, 0xf8, 0xbd, 0x00, 0x00, + 0x10, 0x00, 0x07, 0x00, 0x3c, 0x00, 0x18, 0x42, + 0x00, 0x00, 0xa4, 0x6c, 0x01, 0x00, 0x00, 0x90, + 0x07, 0x00, 0xb0, 0xb5, 0x0f, 0x4d, 0x04, 0x1c, + 0xaa, 0x7a, 0x01, 0x21, 0x08, 0x1c, 0x00, 0x2a, + 0x00, 0xd0, 0x00, 0x20, 0x00, 0x2c, 0x00, 0xd0, + 0x00, 0x21, 0x88, 0x42, 0x0a, 0xd0, 0x00, 0x2c, + 0x04, 0xd1, 0x00, 0xf0, 0x42, 0xfb, 0x00, 0xf0, + 0xd6, 0xfa, 0x03, 0xe0, 0x00, 0xf0, 0xd9, 0xfa, + 0x00, 0xf0, 0x09, 0xf8, 0xa8, 0x7a, 0x3c, 0x00, + 0x54, 0x42, 0x00, 0x00, 0x02, 0x49, 0xe4, 0x39, + 0x48, 0x71, 0xac, 0x72, 0xb0, 0xbd, 0x00, 0x00, + 0x44, 0x6d, 0x01, 0x00, 0x80, 0xb5, 0x3e, 0xf0, + 0x55, 0xf8, 0x02, 0x49, 0x01, 0x20, 0x08, 0x70, + 0x80, 0xbd, 0x00, 0x00, 0x68, 0x7e, 0x01, 0x00, + 0xf3, 0xb5, 0x01, 0x20, 0x8d, 0xb0, 0x0f, 0x1c, + 0x01, 0x24, 0x08, 0x90, 0x0e, 0xf0, 0x92, 0xfd, + 0x06, 0x1c, 0x00, 0xf0, 0xb5, 0xfa, 0x09, 0x90, + 0x3c, 0x00, 0x90, 0x42, 0x00, 0x00, 0x00, 0xf0, + 0x80, 0xfb, 0x07, 0x90, 0xfe, 0xf7, 0x3f, 0xfa, + 0x05, 0x1c, 0x00, 0x21, 0x0c, 0x91, 0x08, 0xf0, + 0xf0, 0xfb, 0x00, 0x28, 0x01, 0xd1, 0x01, 0x20, + 0x00, 0xe0, 0x00, 0x20, 0x0a, 0x90, 0xfe, 0xf7, + 0x12, 0xfd, 0x05, 0xf0, 0xe0, 0xfe, 0x0b, 0x90, + 0x00, 0x2d, 0x23, 0xd0, 0x28, 0x88, 0x41, 0x07, + 0x20, 0xd4, 0x29, 0x1d, 0x04, 0x91, 0x0a, 0x35, + 0x00, 0x06, 0x3c, 0x00, 0xcc, 0x42, 0x00, 0x00, + 0x80, 0x0e, 0x01, 0x21, 0x20, 0x28, 0x03, 0x95, + 0x00, 0xd0, 0x00, 0x21, 0x0d, 0x1c, 0x04, 0x98, + 0x06, 0xf0, 0x38, 0xfd, 0x0c, 0x90, 0x04, 0x98, + 0x06, 0xf0, 0x10, 0xfd, 0x00, 0x28, 0x08, 0xd0, + 0x03, 0x98, 0x01, 0xf0, 0x87, 0xfa, 0x00, 0x28, + 0x03, 0xd0, 0x00, 0x2d, 0x01, 0xd1, 0x01, 0x20, + 0x00, 0xe0, 0x00, 0x20, 0x0c, 0x99, 0x01, 0x43, + 0x0c, 0x91, 0xfc, 0xf7, 0x3c, 0x00, 0x08, 0x43, + 0x00, 0x00, 0x23, 0xff, 0x00, 0x28, 0x2f, 0xd0, + 0x07, 0xf0, 0x99, 0xff, 0x05, 0x1c, 0x07, 0xf0, + 0xb2, 0xff, 0x04, 0x90, 0xff, 0xf7, 0xf3, 0xf8, + 0x0c, 0x99, 0x01, 0x43, 0x00, 0x2d, 0x06, 0xd0, + 0x04, 0x98, 0xf0, 0x4a, 0x30, 0x1a, 0x90, 0x42, + 0x01, 0xd2, 0x01, 0x20, 0x00, 0xe0, 0x00, 0x20, + 0x08, 0x43, 0x0c, 0x90, 0x0b, 0x98, 0x0a, 0x9b, + 0x18, 0x43, 0x01, 0x1c, 0x0b, 0x91, 0x3c, 0x00, + 0x44, 0x43, 0x00, 0x00, 0x05, 0xf0, 0xce, 0xfe, + 0x00, 0x28, 0x1a, 0xd1, 0x00, 0x2d, 0x06, 0xd0, + 0x04, 0x98, 0xe7, 0x49, 0x30, 0x1a, 0x88, 0x42, + 0x01, 0xd2, 0x01, 0x20, 0x00, 0xe0, 0x00, 0x20, + 0x0c, 0x99, 0x08, 0x43, 0x05, 0x1c, 0x00, 0xf0, + 0x1f, 0xfb, 0x28, 0x43, 0x03, 0xe0, 0x00, 0xf0, + 0x1b, 0xfb, 0x0c, 0x99, 0x08, 0x43, 0x0c, 0x90, + 0x00, 0xf0, 0xd4, 0xfb, 0x0b, 0x99, 0x01, 0x43, + 0x3c, 0x00, 0x80, 0x43, 0x00, 0x00, 0x0b, 0x91, + 0xdc, 0x49, 0xc8, 0x68, 0x00, 0x28, 0x01, 0xd0, + 0x01, 0x38, 0xc8, 0x60, 0x08, 0xf0, 0xe7, 0xfb, + 0x06, 0x90, 0x08, 0xf0, 0x90, 0xfd, 0x31, 0x1a, + 0x05, 0x91, 0x06, 0x99, 0xd6, 0x48, 0x81, 0x42, + 0x08, 0xd8, 0x00, 0x2f, 0x08, 0xd1, 0x05, 0x99, + 0x40, 0x08, 0x81, 0x42, 0x04, 0xd9, 0x06, 0x99, + 0x81, 0x42, 0x01, 0xd9, 0x00, 0x24, 0x8b, 0xe0, + 0xd0, 0x48, 0x3c, 0x00, 0xbc, 0x43, 0x00, 0x00, + 0x05, 0x99, 0xd0, 0x4d, 0x81, 0x42, 0x26, 0xd2, + 0xe8, 0x79, 0x10, 0x28, 0x06, 0xd2, 0x00, 0x2f, + 0x21, 0xd1, 0xcc, 0x48, 0xa0, 0x38, 0x80, 0x6a, + 0x00, 0x28, 0x1c, 0xd1, 0x09, 0xf0, 0x62, 0xff, + 0x04, 0x90, 0x00, 0x28, 0x02, 0xd1, 0x00, 0x20, + 0xc3, 0x49, 0x13, 0xe0, 0x09, 0xf0, 0x10, 0xfe, + 0x00, 0x28, 0x03, 0xd0, 0xc4, 0x48, 0xc0, 0x69, + 0x00, 0x28, 0xf4, 0xd0, 0x3c, 0x00, 0xf8, 0x43, + 0x00, 0x00, 0x04, 0x98, 0x05, 0x28, 0x03, 0xd0, + 0xc1, 0x48, 0x00, 0x6a, 0x00, 0x28, 0x65, 0xd1, + 0xbb, 0x49, 0x48, 0x6a, 0x00, 0x28, 0x23, 0xd0, + 0x01, 0x38, 0x48, 0x62, 0x00, 0xf0, 0x87, 0xff, + 0x00, 0x28, 0x11, 0xd0, 0xbb, 0x48, 0x05, 0x99, + 0x81, 0x42, 0x0d, 0xd2, 0x01, 0xf0, 0x9b, 0xf8, + 0x04, 0x30, 0x0d, 0xf0, 0xee, 0xfc, 0x40, 0x30, + 0xc1, 0x7a, 0x01, 0x29, 0x4e, 0xd0, 0x3c, 0x00, + 0x34, 0x44, 0x00, 0x00, 0x80, 0x7a, 0x00, 0x28, + 0x01, 0xd0, 0x05, 0x28, 0x49, 0xd3, 0x01, 0xf0, + 0xdf, 0xf8, 0x02, 0x28, 0x10, 0xd0, 0x00, 0x2f, + 0x02, 0xd1, 0x06, 0x98, 0x00, 0x28, 0x40, 0xd1, + 0x00, 0x20, 0x08, 0x90, 0x82, 0xe1, 0xaa, 0x48, + 0xa0, 0x38, 0xc0, 0x68, 0x00, 0x28, 0x38, 0xd0, + 0xa8, 0x48, 0x80, 0x69, 0x48, 0x62, 0x34, 0xe0, + 0x0a, 0xa9, 0x03, 0xc9, 0x08, 0x43, 0x45, 0xd0, + 0x3c, 0x00, 0x70, 0x44, 0x00, 0x00, 0xa3, 0x48, + 0x29, 0x78, 0xa0, 0x38, 0x02, 0x29, 0x40, 0xd8, + 0x40, 0x6d, 0x00, 0x28, 0x0a, 0xd0, 0x9f, 0x48, + 0xa2, 0x49, 0x20, 0x38, 0xc0, 0x68, 0x40, 0x18, + 0x0e, 0xf0, 0xc7, 0xfb, 0x00, 0x28, 0x01, 0xd0, + 0x01, 0x21, 0x00, 0xe0, 0x00, 0x21, 0x96, 0x4a, + 0x90, 0x6a, 0x00, 0x28, 0x02, 0xda, 0x64, 0x08, + 0x64, 0x00, 0x2a, 0xe0, 0x00, 0x29, 0x09, 0xd1, + 0x95, 0x4b, 0x3c, 0x00, 0xac, 0x44, 0x00, 0x00, + 0xa0, 0x3b, 0x5b, 0x6d, 0x00, 0x2b, 0x02, 0xd0, + 0x05, 0x28, 0x0d, 0xdb, 0x01, 0xe0, 0x07, 0x28, + 0x0a, 0xdb, 0x01, 0x20, 0xc0, 0x43, 0x90, 0x62, + 0x64, 0x08, 0x8e, 0x49, 0x64, 0x00, 0x00, 0x20, + 0xa0, 0x39, 0x88, 0x65, 0x14, 0xe0, 0xd1, 0xe0, + 0x39, 0x43, 0x11, 0xd1, 0x89, 0x49, 0xa0, 0x39, + 0xcb, 0x6d, 0x00, 0x2b, 0x02, 0xd1, 0x89, 0x6d, + 0x01, 0x29, 0x09, 0xd9, 0x3c, 0x00, 0xe8, 0x44, + 0x00, 0x00, 0x07, 0x9b, 0x00, 0x2b, 0x01, 0xd1, + 0x07, 0x28, 0x01, 0xdb, 0x64, 0x08, 0x64, 0x00, + 0x01, 0x30, 0x90, 0x62, 0xbd, 0xe0, 0x7d, 0x49, + 0x88, 0x69, 0x04, 0x90, 0x00, 0x20, 0x88, 0x61, + 0x0c, 0x98, 0x00, 0x28, 0x2c, 0xd0, 0x07, 0xf0, + 0x66, 0xfc, 0x00, 0x28, 0x02, 0xd0, 0x02, 0x20, + 0x04, 0x43, 0x25, 0xe0, 0x7a, 0x48, 0xc0, 0x6a, + 0x00, 0x28, 0x04, 0xd1, 0x77, 0x48, 0x3c, 0x00, + 0x24, 0x45, 0x00, 0x00, 0xa0, 0x38, 0xc0, 0x68, + 0x00, 0x28, 0x1c, 0xd1, 0x04, 0x98, 0x00, 0x28, + 0x0d, 0xd1, 0x28, 0x78, 0x10, 0x28, 0x02, 0xd3, + 0xe8, 0x78, 0x02, 0x28, 0x02, 0xd9, 0x28, 0x79, + 0x10, 0x28, 0x04, 0xd3, 0x04, 0x24, 0x6b, 0x49, + 0x01, 0x22, 0x8a, 0x61, 0x94, 0xe0, 0x6c, 0x48, + 0xa0, 0x38, 0x40, 0x6d, 0x00, 0x28, 0x71, 0xd0, + 0x05, 0xf0, 0xa2, 0xfd, 0x00, 0x28, 0x6d, 0xd0, + 0x3c, 0x00, 0x60, 0x45, 0x00, 0x00, 0x64, 0x08, + 0x64, 0x00, 0x88, 0xe0, 0xff, 0xf7, 0x5b, 0xfa, + 0x00, 0x28, 0x1a, 0xd0, 0x68, 0x48, 0x00, 0x78, + 0x02, 0x28, 0x01, 0xd1, 0x00, 0x2f, 0x14, 0xd1, + 0x00, 0x20, 0xfe, 0xf7, 0x70, 0xfe, 0x30, 0x1a, + 0x04, 0x90, 0xff, 0xf7, 0x6c, 0xfa, 0x00, 0x28, + 0x07, 0xd0, 0xff, 0xf7, 0x1e, 0xfa, 0x00, 0x28, + 0x03, 0xd0, 0x5d, 0x49, 0x04, 0x98, 0x88, 0x42, + 0x4f, 0xd3, 0x3c, 0x00, 0x9c, 0x45, 0x00, 0x00, + 0x05, 0xf0, 0x6c, 0xfd, 0x00, 0x28, 0x4b, 0xd1, + 0x53, 0x49, 0x08, 0x78, 0x03, 0x28, 0x08, 0xd1, + 0x88, 0x68, 0x01, 0x22, 0xd2, 0x07, 0x30, 0x1a, + 0x90, 0x42, 0x41, 0xd2, 0x01, 0x22, 0x0a, 0x70, + 0x57, 0xe0, 0x54, 0x48, 0x00, 0x78, 0x02, 0x28, + 0x01, 0xd1, 0x00, 0x2f, 0x51, 0xd1, 0x4a, 0x49, + 0x88, 0x68, 0x51, 0x49, 0x80, 0x1b, 0x88, 0x42, + 0x07, 0xd9, 0x01, 0x20, 0x3c, 0x00, 0xd8, 0x45, + 0x00, 0x00, 0xfe, 0xf7, 0x42, 0xfe, 0x7d, 0x21, + 0x09, 0x01, 0x40, 0x18, 0x44, 0x49, 0x88, 0x60, + 0x4a, 0x48, 0x00, 0x78, 0x02, 0x28, 0x04, 0xd1, + 0x07, 0x9b, 0x00, 0x2b, 0x01, 0xd1, 0x01, 0x20, + 0x00, 0xe0, 0x00, 0x20, 0x47, 0x4b, 0x47, 0x49, + 0x58, 0x43, 0x40, 0x18, 0x3c, 0x49, 0x89, 0x68, + 0x89, 0x1b, 0x88, 0x42, 0x30, 0xd9, 0x07, 0x9b, + 0x00, 0x20, 0x03, 0x93, 0x00, 0xf0, 0x3c, 0x00, + 0x14, 0x46, 0x00, 0x00, 0x79, 0xff, 0x02, 0x90, + 0xff, 0xf7, 0xd8, 0xf9, 0x04, 0x90, 0x01, 0xf0, + 0x57, 0xf8, 0x04, 0x99, 0x02, 0x9a, 0x51, 0x43, + 0x48, 0x43, 0x01, 0x90, 0x00, 0xf0, 0xdc, 0xff, + 0x41, 0x1c, 0x01, 0x98, 0x01, 0x22, 0x48, 0x43, + 0x11, 0x1c, 0x00, 0xe0, 0x1b, 0xe0, 0x31, 0x4b, + 0x5b, 0x6a, 0x83, 0x42, 0x00, 0xd3, 0x00, 0x21, + 0x03, 0x9b, 0x01, 0x22, 0x00, 0x2b, 0x00, 0xd0, + 0x3c, 0x00, 0x50, 0x46, 0x00, 0x00, 0x00, 0x22, + 0x2c, 0x4b, 0x51, 0x43, 0x9b, 0x6a, 0x01, 0x22, + 0x83, 0x42, 0x00, 0xd3, 0x00, 0x22, 0x50, 0x00, + 0x08, 0x18, 0x03, 0xd0, 0x23, 0x49, 0x03, 0x20, + 0x08, 0x70, 0x03, 0xe0, 0x09, 0x98, 0xc0, 0x68, + 0x06, 0x28, 0x08, 0xd9, 0x02, 0x24, 0x08, 0x98, + 0x00, 0x28, 0x6e, 0xd0, 0x1d, 0x49, 0x00, 0x20, + 0xc8, 0x61, 0x48, 0x61, 0xa5, 0xe0, 0x1a, 0x49, + 0x48, 0x69, 0x3c, 0x00, 0x8c, 0x46, 0x00, 0x00, + 0x00, 0x28, 0x0a, 0xd1, 0x00, 0x2f, 0x05, 0xd0, + 0x01, 0x22, 0x4a, 0x61, 0xc8, 0x69, 0x80, 0x18, + 0xc8, 0x61, 0x0a, 0xe0, 0x00, 0x20, 0xc8, 0x61, + 0x03, 0xe0, 0x00, 0x2f, 0x05, 0xd1, 0x00, 0x20, + 0x48, 0x61, 0x0d, 0x98, 0x00, 0x28, 0x00, 0xd1, + 0xc8, 0x68, 0x00, 0x20, 0x08, 0x90, 0x08, 0x78, + 0x01, 0x28, 0x2f, 0xd0, 0x02, 0x28, 0x4b, 0xd1, + 0x00, 0x2f, 0x08, 0xd1, 0x3c, 0x00, 0xc8, 0x46, + 0x00, 0x00, 0xe8, 0x78, 0x00, 0x28, 0x02, 0xd1, + 0x28, 0x78, 0x10, 0x28, 0x43, 0xd2, 0x28, 0x79, + 0x10, 0x28, 0x40, 0xd2, 0x48, 0x68, 0x0a, 0x69, + 0x30, 0x1a, 0x90, 0x42, 0x67, 0xd3, 0x01, 0x22, + 0x0a, 0x70, 0x38, 0xe0, 0x00, 0x00, 0xe2, 0x04, + 0x00, 0x00, 0x10, 0x27, 0x00, 0x00, 0x68, 0x7e, + 0x01, 0x00, 0xa0, 0x86, 0x01, 0x00, 0x88, 0x13, + 0x00, 0x00, 0x44, 0x6d, 0x01, 0x00, 0x3c, 0x00, + 0x04, 0x47, 0x00, 0x00, 0xc8, 0x57, 0x01, 0x00, + 0x50, 0xc3, 0x00, 0x00, 0x98, 0x3a, 0x00, 0x00, + 0xc0, 0x57, 0x01, 0x00, 0x40, 0x0d, 0x03, 0x00, + 0xc4, 0x09, 0x00, 0x00, 0xb2, 0x0c, 0x00, 0x00, + 0x00, 0x20, 0x0b, 0x9a, 0x0a, 0x9b, 0xc0, 0x43, + 0x1a, 0x43, 0x37, 0xd0, 0x00, 0x2f, 0x35, 0xd1, + 0x07, 0x9b, 0x00, 0x2b, 0x08, 0xd0, 0x6a, 0x78, + 0x02, 0x2a, 0x2f, 0xd9, 0x2a, 0x78, 0x10, 0x2a, + 0x3c, 0x00, 0x40, 0x47, 0x00, 0x00, 0x2c, 0xd2, + 0x2a, 0x79, 0x10, 0x2a, 0x29, 0xd2, 0x25, 0x4b, + 0x1a, 0x6c, 0x00, 0x2a, 0x06, 0xd0, 0x9a, 0x6a, + 0x9f, 0x6c, 0xba, 0x42, 0x02, 0xd1, 0x1f, 0x20, + 0x1f, 0xe0, 0x2e, 0xe0, 0x20, 0x4b, 0x5a, 0x6c, + 0x00, 0x2a, 0x03, 0xd0, 0x1f, 0x4f, 0xb3, 0x1a, + 0xbb, 0x42, 0x16, 0xd3, 0x1c, 0x4b, 0x00, 0x2a, + 0x05, 0xd0, 0x9a, 0x6a, 0x9f, 0x6c, 0xba, 0x42, + 0x01, 0xd1, 0x3c, 0x00, 0x7c, 0x47, 0x00, 0x00, + 0x0f, 0x20, 0x0d, 0xe0, 0x07, 0x9a, 0x00, 0x2a, + 0x04, 0xd0, 0xea, 0x79, 0x20, 0x2a, 0x01, 0xd1, + 0x00, 0x20, 0x05, 0xe0, 0xea, 0x79, 0x10, 0x2a, + 0x01, 0xd3, 0x03, 0x20, 0x00, 0xe0, 0x9a, 0x6a, + 0x12, 0x4a, 0x12, 0x68, 0x02, 0x40, 0x0b, 0xd1, + 0x01, 0x20, 0x08, 0x90, 0x02, 0x20, 0x08, 0x70, + 0x0f, 0x48, 0x08, 0x61, 0x4e, 0x60, 0x64, 0xe7, + 0xff, 0xe7, 0x01, 0x20, 0x3c, 0x00, 0xb8, 0x47, + 0x00, 0x00, 0x08, 0x90, 0x60, 0xe7, 0x0c, 0x49, + 0x88, 0x6a, 0x00, 0x28, 0x01, 0xda, 0x01, 0x30, + 0x02, 0xe0, 0x00, 0x28, 0x01, 0xdd, 0x00, 0x20, + 0x88, 0x62, 0x00, 0x20, 0x08, 0x62, 0x08, 0x99, + 0x20, 0x04, 0x08, 0x43, 0x0f, 0xb0, 0xf0, 0xbd, + 0x00, 0x00, 0xa4, 0x6c, 0x01, 0x00, 0x71, 0x02, + 0x00, 0x00, 0x08, 0x20, 0x07, 0x00, 0x53, 0x07, + 0x00, 0x00, 0x68, 0x7e, 0x01, 0x00, 0x3c, 0x00, + 0xf4, 0x47, 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x00, 0x48, 0x70, 0x47, 0x50, 0x7e, 0x01, 0x00, + 0x80, 0xb5, 0x3d, 0xf0, 0x7f, 0xfd, 0x02, 0x49, + 0x01, 0x20, 0x08, 0x70, 0x80, 0xbd, 0x00, 0x00, + 0x3c, 0x7e, 0x01, 0x00, 0xf8, 0xb5, 0x0d, 0x1c, + 0x0e, 0xf0, 0xc8, 0xfa, 0x26, 0x49, 0x04, 0x1c, + 0x88, 0x6a, 0x26, 0x4e, 0x00, 0x28, 0x01, 0xd0, + 0x04, 0x20, 0x03, 0xe0, 0x70, 0x6a, 0x00, 0x28, + 0x3c, 0x00, 0x30, 0x48, 0x00, 0x00, 0x01, 0xd0, + 0x01, 0x38, 0x70, 0x62, 0x00, 0x27, 0x00, 0x2d, + 0x02, 0xd0, 0xb7, 0x61, 0xf7, 0x61, 0x0a, 0xe0, + 0xb0, 0x69, 0x1c, 0x49, 0x01, 0x30, 0xb0, 0x61, + 0x49, 0x6d, 0x00, 0x29, 0x03, 0xd0, 0x03, 0x28, + 0x01, 0xd9, 0x01, 0x20, 0xf0, 0x61, 0xb4, 0x60, + 0xf1, 0x68, 0x00, 0x91, 0x08, 0xf0, 0xf7, 0xfc, + 0xf0, 0x60, 0x00, 0x99, 0x88, 0x42, 0x02, 0xd0, + 0x30, 0x62, 0x3c, 0x00, 0x6c, 0x48, 0x00, 0x00, + 0x34, 0x61, 0x0b, 0xe0, 0x00, 0xf0, 0x90, 0xf8, + 0x00, 0x28, 0x01, 0xd0, 0x11, 0x48, 0x00, 0xe0, + 0x11, 0x48, 0x31, 0x69, 0x61, 0x1a, 0x81, 0x42, + 0x00, 0xd9, 0x37, 0x62, 0x0b, 0x4a, 0x0c, 0x48, + 0xd1, 0x6c, 0x20, 0x30, 0x00, 0x29, 0x01, 0xd0, + 0x0a, 0x21, 0x03, 0xe0, 0x01, 0x7a, 0x00, 0x29, + 0x01, 0xd0, 0xff, 0x31, 0x01, 0x72, 0x00, 0x2d, + 0x03, 0xd1, 0x01, 0x7a, 0x3c, 0x00, 0xa8, 0x48, + 0x00, 0x00, 0x00, 0x29, 0x00, 0xd0, 0x91, 0x6a, + 0x00, 0x7a, 0x00, 0x28, 0x00, 0xd1, 0x17, 0x65, + 0xf8, 0xbd, 0xa4, 0x6c, 0x01, 0x00, 0x3c, 0x7e, + 0x01, 0x00, 0xa6, 0x0e, 0x00, 0x00, 0xa8, 0x61, + 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, 0x06, 0x49, + 0x80, 0xb5, 0x89, 0x68, 0x00, 0x29, 0x07, 0xd0, + 0x05, 0x21, 0x00, 0x28, 0x00, 0xd1, 0x04, 0x21, + 0x08, 0x06, 0x00, 0x0e, 0x03, 0xf0, 0x3c, 0x00, + 0xe4, 0x48, 0x00, 0x00, 0x05, 0xfa, 0x80, 0xbd, + 0x60, 0x6c, 0x01, 0x00, 0x07, 0x48, 0x00, 0x68, + 0x07, 0x49, 0x4a, 0x69, 0x10, 0x40, 0x01, 0xd0, + 0x01, 0x20, 0x00, 0xe0, 0x00, 0x20, 0x49, 0x6a, + 0x88, 0x42, 0x01, 0xd1, 0x01, 0x20, 0x70, 0x47, + 0x00, 0x20, 0x70, 0x47, 0x10, 0x00, 0x07, 0x00, + 0xa4, 0x6c, 0x01, 0x00, 0x70, 0xb5, 0x0e, 0xf0, + 0x49, 0xfa, 0x02, 0x1c, 0x00, 0xf0, 0x3a, 0xf8, + 0x3c, 0x00, 0x20, 0x49, 0x00, 0x00, 0x10, 0x49, + 0x00, 0x28, 0x0e, 0xd0, 0x08, 0x1c, 0xa0, 0x31, + 0x0e, 0x78, 0x0e, 0x4b, 0x10, 0x2e, 0x01, 0xd3, + 0x80, 0x6f, 0x03, 0xe0, 0x49, 0x78, 0x10, 0x29, + 0x0e, 0xd3, 0xc0, 0x6f, 0xc0, 0x18, 0x84, 0x1a, + 0x0a, 0xe0, 0x08, 0x1c, 0x80, 0x30, 0x45, 0x69, + 0x08, 0x49, 0x8d, 0x42, 0x01, 0xd9, 0x0c, 0x1c, + 0x05, 0xe0, 0xc0, 0x68, 0x10, 0x1a, 0x2c, 0x1a, + 0x00, 0x2c, 0x3c, 0x00, 0x5c, 0x49, 0x00, 0x00, + 0x00, 0xda, 0x64, 0x19, 0x20, 0x1c, 0x70, 0xbd, + 0xa4, 0x6c, 0x01, 0x00, 0xa6, 0x0e, 0x00, 0x00, + 0x50, 0xc3, 0x00, 0x00, 0x80, 0xb5, 0x05, 0xf0, + 0xb7, 0xfb, 0x00, 0x28, 0x02, 0xd0, 0x07, 0xf0, + 0x1f, 0xff, 0x80, 0xbd, 0x03, 0x48, 0x00, 0x78, + 0x00, 0x28, 0xfa, 0xd0, 0x07, 0xf0, 0x70, 0xfb, + 0x80, 0xbd, 0x00, 0x00, 0x60, 0x6c, 0x01, 0x00, + 0x03, 0x49, 0x01, 0x20, 0x3c, 0x00, 0x98, 0x49, + 0x00, 0x00, 0x49, 0x69, 0x03, 0x29, 0x00, 0xd8, + 0x00, 0x20, 0x70, 0x47, 0x00, 0x00, 0x60, 0x6c, + 0x01, 0x00, 0xb0, 0xb5, 0x0a, 0x4d, 0x00, 0x24, + 0x28, 0x78, 0x01, 0x28, 0x03, 0xd0, 0x05, 0xf0, + 0x6a, 0xfb, 0x04, 0x06, 0x24, 0x0e, 0xfe, 0xf7, + 0xd2, 0xfc, 0x00, 0x02, 0x20, 0x43, 0x02, 0xd1, + 0x68, 0x6a, 0x00, 0x28, 0x01, 0xd1, 0x01, 0x20, + 0xb0, 0xbd, 0x00, 0x20, 0xb0, 0xbd, 0x3c, 0x00, + 0xd4, 0x49, 0x00, 0x00, 0x60, 0x6c, 0x01, 0x00, + 0x01, 0x21, 0x01, 0x28, 0x00, 0xd0, 0x00, 0x21, + 0x01, 0x48, 0x41, 0x62, 0x70, 0x47, 0x00, 0x00, + 0x60, 0x6c, 0x01, 0x00, 0x15, 0x48, 0x10, 0xb5, + 0x04, 0x68, 0x15, 0x48, 0x00, 0x6a, 0x00, 0x28, + 0x14, 0xd0, 0xff, 0xf7, 0xcb, 0xff, 0x00, 0x28, + 0x0e, 0xd1, 0x11, 0x48, 0x11, 0x49, 0xc4, 0x30, + 0x40, 0x69, 0x88, 0x42, 0x08, 0xd2, 0xcc, 0x08, + 0x3c, 0x00, 0x10, 0x4a, 0x00, 0x00, 0xa0, 0x42, + 0x05, 0xd3, 0xff, 0xf7, 0x7e, 0xff, 0xa0, 0x42, + 0x01, 0xda, 0x0c, 0x4c, 0x01, 0xe0, 0xff, 0x24, + 0x91, 0x34, 0x7d, 0x20, 0x00, 0x01, 0x84, 0x42, + 0x04, 0xd9, 0x00, 0x22, 0x16, 0x21, 0x83, 0x20, + 0x0e, 0xf0, 0xbd, 0xfe, 0x01, 0x23, 0x09, 0x22, + 0x21, 0x1c, 0x16, 0x20, 0x0e, 0xf0, 0xa7, 0xfe, + 0x10, 0xbd, 0xb0, 0x57, 0x01, 0x00, 0x60, 0x6c, + 0x01, 0x00, 0x3c, 0x00, 0x4c, 0x4a, 0x00, 0x00, + 0xc0, 0x5d, 0x00, 0x00, 0x10, 0x27, 0x00, 0x00, + 0x70, 0xb5, 0x05, 0x1c, 0x0e, 0x1c, 0x00, 0xf0, + 0x43, 0xf8, 0x00, 0x28, 0x0f, 0xd0, 0x08, 0x4c, + 0x20, 0x78, 0xc0, 0x07, 0x03, 0xd4, 0x05, 0xf0, + 0xab, 0xf9, 0x09, 0xf0, 0x31, 0xfe, 0x00, 0x2d, + 0x05, 0xd0, 0x20, 0x78, 0x80, 0x07, 0x02, 0xd4, + 0x30, 0x1c, 0x02, 0xf0, 0xfd, 0xfe, 0x70, 0xbd, + 0x60, 0x6c, 0x01, 0x00, 0x3c, 0x00, 0x88, 0x4a, + 0x00, 0x00, 0xb0, 0xb5, 0x00, 0x28, 0x18, 0xd0, + 0x11, 0x48, 0x81, 0x42, 0x15, 0xd2, 0x10, 0x48, + 0x0c, 0x1c, 0x0d, 0x18, 0x07, 0xf0, 0xdf, 0xfa, + 0x81, 0x00, 0x09, 0x18, 0xa1, 0x42, 0x01, 0xd2, + 0x40, 0x00, 0x03, 0xe0, 0x41, 0x00, 0x09, 0x18, + 0xa1, 0x42, 0x01, 0xd2, 0x24, 0x1a, 0x06, 0xe0, + 0x41, 0x00, 0xa1, 0x42, 0x03, 0xd2, 0x40, 0x08, + 0xf8, 0xe7, 0x06, 0x4d, 0x07, 0x4c, 0x3c, 0x00, + 0xc4, 0x4a, 0x00, 0x00, 0x0e, 0xf0, 0x72, 0xf9, + 0x00, 0x19, 0x29, 0x1c, 0x07, 0xf0, 0xdc, 0xfa, + 0xb0, 0xbd, 0x00, 0x00, 0x80, 0xb9, 0x2a, 0x00, + 0x53, 0x07, 0x00, 0x00, 0x4c, 0x1d, 0x00, 0x00, + 0x88, 0x13, 0x00, 0x00, 0xb0, 0xb5, 0x05, 0xf0, + 0xfd, 0xfa, 0x00, 0x28, 0x13, 0xd1, 0xfe, 0xf7, + 0xb5, 0xfe, 0x0a, 0x4c, 0x0a, 0x4d, 0x00, 0x28, + 0x60, 0x63, 0x00, 0xd0, 0x28, 0x60, 0x0e, 0xf0, + 0x3c, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x55, 0xf9, + 0x21, 0x6a, 0x00, 0x29, 0x04, 0xd1, 0xe1, 0x69, + 0x40, 0x1a, 0x29, 0x68, 0x88, 0x42, 0x01, 0xd9, + 0x01, 0x20, 0xb0, 0xbd, 0x00, 0x20, 0xb0, 0xbd, + 0x00, 0x00, 0x60, 0x6c, 0x01, 0x00, 0xb0, 0x57, + 0x01, 0x00, 0x80, 0xb5, 0xff, 0xf7, 0xdd, 0xff, + 0x00, 0x28, 0x05, 0xd0, 0x05, 0xf0, 0xb7, 0xfa, + 0x00, 0x28, 0x01, 0xd1, 0x01, 0x20, 0x80, 0xbd, + 0x00, 0x20, 0x3c, 0x00, 0x3c, 0x4b, 0x00, 0x00, + 0x80, 0xbd, 0x00, 0x00, 0x10, 0xb5, 0x0a, 0x4c, + 0x00, 0x21, 0xa2, 0x68, 0x00, 0x2a, 0x03, 0xd0, + 0xa1, 0x60, 0x02, 0xf0, 0x83, 0xf9, 0x10, 0xbd, + 0x61, 0x60, 0x01, 0x1c, 0x00, 0x22, 0x04, 0x20, + 0x0e, 0xf0, 0x36, 0xfd, 0x03, 0x48, 0x21, 0x68, + 0x0a, 0xf0, 0x08, 0xfc, 0x10, 0xbd, 0x00, 0x00, + 0xbc, 0x74, 0x01, 0x00, 0xc4, 0x60, 0x01, 0x00, + 0x70, 0xb5, 0x05, 0x1c, 0x3c, 0x00, 0x78, 0x4b, + 0x00, 0x00, 0x01, 0xd1, 0xfc, 0xf7, 0xc1, 0xfb, + 0x20, 0x4c, 0xe0, 0x6a, 0x00, 0x28, 0x15, 0xd0, + 0x1f, 0x4b, 0xa0, 0x69, 0x58, 0x43, 0xc6, 0x0b, + 0x20, 0x88, 0x46, 0x43, 0xf0, 0x00, 0x80, 0x19, + 0xe6, 0x60, 0xfb, 0xf7, 0x1c, 0xfe, 0xa8, 0x42, + 0x05, 0xd8, 0x30, 0x1c, 0xfb, 0xf7, 0x17, 0xfe, + 0x80, 0x19, 0xa8, 0x42, 0x02, 0xd2, 0x00, 0x20, + 0xe0, 0x60, 0x20, 0xe0, 0xe5, 0x60, 0x3c, 0x00, + 0xb4, 0x4b, 0x00, 0x00, 0x00, 0x2d, 0x1d, 0xd0, + 0x26, 0x88, 0xa0, 0x69, 0x70, 0x43, 0xc1, 0x03, + 0x28, 0x1c, 0xfb, 0xf7, 0xa5, 0xfd, 0x60, 0x61, + 0x0d, 0x48, 0x32, 0x1c, 0x29, 0x1c, 0x30, 0x30, + 0xfb, 0xf7, 0x0a, 0xfc, 0x0c, 0x4b, 0x60, 0x69, + 0x58, 0x43, 0xc0, 0x0b, 0x60, 0x62, 0x01, 0xf0, + 0xb7, 0xfd, 0xa0, 0x62, 0xe0, 0x68, 0x00, 0x28, + 0x04, 0xd0, 0x20, 0x69, 0xa1, 0x68, 0xfb, 0xf7, + 0x3c, 0x00, 0xf0, 0x4b, 0x00, 0x00, 0xf4, 0xfb, + 0x70, 0xbd, 0x05, 0x48, 0xa1, 0x68, 0xfb, 0xf7, + 0xef, 0xfb, 0x70, 0xbd, 0x00, 0x00, 0xc8, 0x74, + 0x01, 0x00, 0x40, 0x42, 0x0f, 0x00, 0xc0, 0xc6, + 0x2d, 0x00, 0x88, 0x13, 0x00, 0x00, 0xf1, 0xb5, + 0x3e, 0x48, 0x00, 0xab, 0x81, 0x78, 0xc0, 0x78, + 0x3e, 0x4f, 0x0a, 0x07, 0x04, 0x07, 0x58, 0x78, + 0x3b, 0x49, 0x12, 0x0f, 0x08, 0x5c, 0x14, 0x39, + 0x24, 0x0f, 0x3c, 0x00, 0x2c, 0x4c, 0x00, 0x00, + 0x80, 0x18, 0x78, 0x60, 0x01, 0x30, 0xb8, 0x60, + 0x18, 0x78, 0x35, 0x4d, 0x08, 0x5c, 0x00, 0x19, + 0xb8, 0x61, 0x01, 0x30, 0xf8, 0x61, 0xeb, 0x78, + 0x33, 0x48, 0x1e, 0x09, 0x33, 0x4b, 0x18, 0x38, + 0x81, 0x78, 0x5e, 0x43, 0xab, 0x78, 0x1d, 0x09, + 0xc8, 0x23, 0x6b, 0x43, 0x00, 0x29, 0x08, 0xd1, + 0x2b, 0x4d, 0x2d, 0x78, 0x3d, 0x60, 0xc5, 0x60, + 0x7d, 0x25, 0xed, 0x00, 0x3c, 0x00, 0x68, 0x4c, + 0x00, 0x00, 0x5d, 0x1b, 0x2c, 0x4b, 0x07, 0xe0, + 0x27, 0x4d, 0x6d, 0x78, 0x3d, 0x60, 0xc5, 0x60, + 0x4b, 0x25, 0x2d, 0x01, 0x5d, 0x1b, 0x28, 0x4b, + 0xf6, 0x18, 0x02, 0x20, 0x00, 0xf0, 0x57, 0xf8, + 0x28, 0x1a, 0xf8, 0x60, 0x22, 0x48, 0x22, 0x1c, + 0x18, 0x38, 0x81, 0x78, 0x03, 0x20, 0x00, 0xf0, + 0x4e, 0xf8, 0x30, 0x1a, 0x38, 0x62, 0x39, 0x68, + 0x00, 0xab, 0x79, 0x61, 0x5a, 0x78, 0x3c, 0x00, + 0xa4, 0x4c, 0x00, 0x00, 0x56, 0x23, 0xf9, 0x68, + 0x5a, 0x43, 0x89, 0x1a, 0xf9, 0x60, 0xc8, 0x31, + 0x39, 0x61, 0x18, 0x49, 0x18, 0x39, 0x89, 0x78, + 0x00, 0x29, 0xb9, 0x69, 0x11, 0xd1, 0x00, 0xab, + 0x1a, 0x78, 0x13, 0x4b, 0x14, 0x3b, 0x9a, 0x5c, + 0x53, 0x1c, 0x59, 0x43, 0x0a, 0x23, 0x59, 0x43, + 0x14, 0x4b, 0x59, 0x1a, 0x51, 0x43, 0x0a, 0x23, + 0x59, 0x43, 0x40, 0x1a, 0x38, 0x62, 0x12, 0x49, + 0x3c, 0x00, 0xe0, 0x4c, 0x00, 0x00, 0x10, 0xe0, + 0x00, 0xab, 0x1a, 0x78, 0x0a, 0x4b, 0x14, 0x3b, + 0x9a, 0x5c, 0x53, 0x1c, 0x59, 0x43, 0x0a, 0x23, + 0x59, 0x43, 0x0d, 0x4b, 0x59, 0x1a, 0x51, 0x43, + 0x0a, 0x23, 0x59, 0x43, 0x40, 0x1a, 0x0b, 0x49, + 0x38, 0x62, 0x40, 0x18, 0x78, 0x62, 0xf8, 0xbd, + 0x00, 0x00, 0x0c, 0x5a, 0x01, 0x00, 0x66, 0x5a, + 0x01, 0x00, 0x94, 0x78, 0x01, 0x00, 0xa0, 0x86, + 0x01, 0x00, 0x3c, 0x00, 0x1c, 0x4d, 0x00, 0x00, + 0x00, 0x48, 0x71, 0x00, 0xb0, 0xd6, 0x8c, 0x00, + 0x88, 0x10, 0x00, 0x00, 0x80, 0x38, 0x01, 0x00, + 0x58, 0x12, 0x00, 0x00, 0x70, 0x11, 0x01, 0x00, + 0x30, 0xb5, 0x19, 0x4b, 0x02, 0x28, 0xdd, 0x68, + 0x06, 0xd1, 0x00, 0x29, 0x04, 0xd1, 0x2b, 0x1c, + 0x0c, 0x33, 0x9c, 0x1a, 0x64, 0x23, 0x5c, 0x43, + 0x02, 0x28, 0x09, 0xd1, 0x01, 0x29, 0x07, 0xd1, + 0x64, 0x23, 0x7d, 0x24, 0x3c, 0x00, 0x58, 0x4d, + 0x00, 0x00, 0xe4, 0x00, 0x6b, 0x43, 0x1c, 0x19, + 0xa0, 0x23, 0x53, 0x43, 0xe4, 0x1a, 0x0a, 0x23, + 0x5a, 0x43, 0x03, 0x28, 0x09, 0xd1, 0x00, 0x29, + 0x07, 0xd1, 0x13, 0x23, 0xff, 0x24, 0xe4, 0x00, + 0x6b, 0x43, 0x1b, 0x19, 0x9b, 0x1a, 0x1c, 0x1c, + 0x5c, 0x43, 0x03, 0x28, 0x08, 0xd1, 0x01, 0x29, + 0x06, 0xd1, 0x0e, 0x20, 0x05, 0x49, 0x68, 0x43, + 0x40, 0x18, 0x80, 0x1a, 0x04, 0x1c, 0x3c, 0x00, + 0x94, 0x4d, 0x00, 0x00, 0x44, 0x43, 0x20, 0x1c, + 0x30, 0xbd, 0x00, 0x00, 0x7c, 0x78, 0x01, 0x00, + 0x84, 0x08, 0x00, 0x00, 0x10, 0xb5, 0x07, 0x4c, + 0x0c, 0x23, 0x60, 0x78, 0x05, 0x49, 0x14, 0x31, + 0x58, 0x43, 0x40, 0x18, 0x40, 0x68, 0x01, 0xf0, + 0x4f, 0xfc, 0x00, 0x21, 0x60, 0x78, 0x02, 0xf0, + 0x4b, 0xff, 0x10, 0xbd, 0x4c, 0x7b, 0x01, 0x00, + 0x0c, 0x48, 0xf8, 0xb5, 0x40, 0x78, 0x0c, 0x23, + 0x3c, 0x00, 0xd0, 0x4d, 0x00, 0x00, 0x0a, 0x49, + 0x58, 0x43, 0x14, 0x31, 0x44, 0x18, 0x26, 0x1d, + 0x60, 0xce, 0x30, 0x1c, 0x0b, 0xf0, 0x0b, 0xfd, + 0x00, 0x27, 0x41, 0x20, 0x47, 0x55, 0x05, 0x48, + 0x29, 0x1c, 0x02, 0xf0, 0xf0, 0xfe, 0x28, 0x1c, + 0x01, 0xf0, 0x31, 0xfc, 0x04, 0x34, 0xc0, 0xc4, + 0xf8, 0xbd, 0x4c, 0x7b, 0x01, 0x00, 0x55, 0x80, + 0x00, 0x00, 0xb0, 0xb5, 0x0a, 0x4d, 0x4c, 0x21, + 0x28, 0x78, 0x3c, 0x00, 0x0c, 0x4e, 0x00, 0x00, + 0x09, 0x4a, 0x41, 0x43, 0x8c, 0x18, 0x22, 0x68, + 0x01, 0x21, 0xfb, 0xf7, 0xe1, 0xfa, 0x28, 0x78, + 0x01, 0xf0, 0xfa, 0xfb, 0x3c, 0x23, 0xe0, 0x56, + 0x41, 0x1e, 0x01, 0x20, 0x07, 0xf0, 0x34, 0xfb, + 0xb0, 0xbd, 0x00, 0x00, 0x3c, 0x7c, 0x01, 0x00, + 0x58, 0xe3, 0x01, 0x00, 0x0c, 0x23, 0x07, 0x49, + 0x58, 0x43, 0x40, 0x18, 0x80, 0xb5, 0x40, 0x68, + 0x41, 0x6b, 0x00, 0x29, 0x3c, 0x00, 0x48, 0x4e, + 0x00, 0x00, 0x02, 0xd0, 0x0b, 0xf0, 0xfb, 0xfd, + 0x80, 0xbd, 0x0b, 0xf0, 0x2c, 0xfd, 0x80, 0xbd, + 0x00, 0x00, 0x60, 0x7b, 0x01, 0x00, 0x38, 0x22, + 0x0a, 0x4b, 0x42, 0x43, 0xd2, 0x18, 0x00, 0x29, + 0x80, 0xb5, 0x04, 0xd0, 0x02, 0x29, 0x07, 0xd1, + 0x0b, 0xf0, 0xfb, 0xfc, 0x80, 0xbd, 0xd2, 0x6a, + 0x01, 0x21, 0xfb, 0xf7, 0xb0, 0xfa, 0x80, 0xbd, + 0x03, 0x21, 0x86, 0x20, 0xfc, 0xf7, 0x3c, 0x00, + 0x84, 0x4e, 0x00, 0x00, 0x0f, 0xfa, 0x80, 0xbd, + 0xd4, 0xe4, 0x01, 0x00, 0xb0, 0xb5, 0x04, 0x06, + 0x24, 0x0e, 0x0c, 0x20, 0x0e, 0x49, 0x60, 0x43, + 0x40, 0x18, 0x45, 0x68, 0xa8, 0x6b, 0x00, 0x28, + 0x03, 0xd1, 0x00, 0x21, 0x20, 0x1c, 0xfd, 0xf7, + 0xe1, 0xfa, 0x20, 0x1c, 0x07, 0xf0, 0xf2, 0xff, + 0x00, 0x28, 0x08, 0xd0, 0x28, 0x1c, 0x60, 0x30, + 0xc1, 0x79, 0x01, 0x29, 0x03, 0xd9, 0xff, 0x31, + 0x3c, 0x00, 0xc0, 0x4e, 0x00, 0x00, 0xc1, 0x71, + 0xff, 0x31, 0x81, 0x71, 0x01, 0x21, 0x20, 0x1c, + 0x02, 0xf0, 0xc5, 0xfe, 0xb0, 0xbd, 0x60, 0x7b, + 0x01, 0x00, 0x70, 0xb5, 0x00, 0x06, 0x00, 0x0e, + 0x05, 0x1c, 0x4c, 0x23, 0x0a, 0x49, 0x58, 0x43, + 0x44, 0x18, 0x3c, 0x20, 0x00, 0x5d, 0xff, 0x30, + 0x06, 0x06, 0x36, 0x16, 0x28, 0x1c, 0x01, 0xf0, + 0x90, 0xfb, 0x00, 0x21, 0x28, 0x1c, 0x22, 0x68, + 0xfb, 0xf7, 0x3c, 0x00, 0xfc, 0x4e, 0x00, 0x00, + 0x6f, 0xfa, 0x31, 0x1c, 0x00, 0x20, 0x07, 0xf0, + 0xc7, 0xfa, 0x70, 0xbd, 0x58, 0xe3, 0x01, 0x00, + 0x0c, 0x22, 0x0f, 0x4b, 0x42, 0x43, 0xd2, 0x18, + 0x10, 0xb5, 0x54, 0x68, 0x00, 0x29, 0x0d, 0xd0, + 0x02, 0x29, 0x0f, 0xd1, 0x2c, 0x20, 0x00, 0x5d, + 0x00, 0x28, 0x03, 0xd0, 0x07, 0x21, 0x0c, 0x20, + 0xfc, 0xf7, 0xba, 0xf9, 0x20, 0x1c, 0x0b, 0xf0, + 0xbb, 0xfc, 0x10, 0xbd, 0x3c, 0x00, 0x38, 0x4f, + 0x00, 0x00, 0x00, 0x21, 0x02, 0xf0, 0x8d, 0xfe, + 0x10, 0xbd, 0x04, 0x21, 0x0c, 0x20, 0xfc, 0xf7, + 0xae, 0xf9, 0x10, 0xbd, 0x00, 0x00, 0x60, 0x7b, + 0x01, 0x00, 0x80, 0xb5, 0x00, 0x29, 0x07, 0xd0, + 0x0c, 0x23, 0x05, 0x49, 0x58, 0x43, 0x40, 0x18, + 0x40, 0x68, 0x0b, 0xf0, 0x4a, 0xfc, 0x80, 0xbd, + 0x01, 0x21, 0x02, 0xf0, 0x76, 0xfe, 0x80, 0xbd, + 0x00, 0x00, 0x60, 0x7b, 0x01, 0x00, 0x3c, 0x00, + 0x74, 0x4f, 0x00, 0x00, 0x10, 0xb5, 0x04, 0x1c, + 0x00, 0x29, 0x05, 0xd0, 0x02, 0x29, 0x1a, 0xd1, + 0x20, 0x1c, 0x0b, 0xf0, 0xeb, 0xfc, 0x10, 0xbd, + 0x0d, 0x48, 0x04, 0x70, 0x0d, 0x48, 0x07, 0xf0, + 0x07, 0xf9, 0x0d, 0x48, 0x01, 0x88, 0x01, 0x22, + 0x12, 0x03, 0x11, 0x43, 0x01, 0x80, 0x4c, 0x20, + 0x0a, 0x49, 0x60, 0x43, 0x40, 0x18, 0x40, 0x30, + 0x00, 0x78, 0xfd, 0xf7, 0x5d, 0xfd, 0x20, 0x1c, + 0x3c, 0x00, 0xb0, 0x4f, 0x00, 0x00, 0x0a, 0xf0, + 0xd4, 0xf8, 0x10, 0xbd, 0x03, 0x21, 0x86, 0x20, + 0xfc, 0xf7, 0x73, 0xf9, 0x10, 0xbd, 0x3c, 0x7c, + 0x01, 0x00, 0x05, 0x4e, 0x00, 0x00, 0x32, 0x80, + 0x07, 0x00, 0x58, 0xe3, 0x01, 0x00, 0xff, 0xb5, + 0x05, 0x1c, 0x01, 0x20, 0x83, 0xb0, 0x01, 0x90, + 0x0c, 0x20, 0x5d, 0x4a, 0x68, 0x43, 0x86, 0x18, + 0x01, 0x27, 0x00, 0x29, 0x74, 0x68, 0x0e, 0xd0, + 0x02, 0x29, 0x3c, 0x00, 0xec, 0x4f, 0x00, 0x00, + 0x6a, 0xd1, 0x2c, 0x20, 0x00, 0x5d, 0x00, 0x28, + 0x03, 0xd0, 0x06, 0x21, 0x0c, 0x20, 0xfc, 0xf7, + 0x53, 0xf9, 0x20, 0x1c, 0x0b, 0xf0, 0x20, 0xfd, + 0x07, 0xb0, 0xf0, 0xbd, 0x52, 0x48, 0x14, 0x38, + 0x45, 0x70, 0xa0, 0x6b, 0x00, 0x28, 0x07, 0xd0, + 0x50, 0x48, 0x07, 0xf0, 0x7f, 0xf8, 0x01, 0x21, + 0x28, 0x1c, 0xfd, 0xf7, 0x25, 0xfa, 0x1c, 0xe0, + 0x4d, 0x48, 0x07, 0xf0, 0x3c, 0x00, 0x28, 0x50, + 0x00, 0x00, 0x77, 0xf8, 0x4a, 0x48, 0x14, 0x38, + 0x05, 0x70, 0x4b, 0x48, 0x01, 0x88, 0x01, 0x22, + 0x52, 0x03, 0x11, 0x43, 0x01, 0x80, 0x40, 0x20, + 0x00, 0x5d, 0xfd, 0xf7, 0x12, 0xfd, 0xb0, 0x68, + 0x00, 0x28, 0x09, 0xd1, 0x28, 0x1c, 0x07, 0xf0, + 0x64, 0xff, 0xb0, 0x60, 0x00, 0x28, 0x03, 0xd1, + 0x09, 0x21, 0x0c, 0x20, 0xfc, 0xf7, 0x23, 0xf9, + 0x05, 0x98, 0x00, 0x28, 0x03, 0xd0, 0x3c, 0x00, + 0x64, 0x50, 0x00, 0x00, 0xe0, 0x6c, 0x01, 0x30, + 0xe0, 0x64, 0x0e, 0xe0, 0x67, 0x20, 0x00, 0x5d, + 0x00, 0x28, 0x07, 0xd1, 0xe0, 0x6c, 0x00, 0x28, + 0x04, 0xd1, 0x39, 0x48, 0x02, 0x38, 0xc0, 0x6a, + 0xa0, 0x64, 0x09, 0xe0, 0x20, 0x6d, 0x00, 0x28, + 0x01, 0xd0, 0x00, 0x27, 0x04, 0xe0, 0x28, 0x1c, + 0x07, 0xf0, 0x00, 0xff, 0x00, 0x28, 0xe5, 0xd1, + 0x05, 0x98, 0x20, 0x65, 0x20, 0x1c, 0x20, 0x30, + 0x3c, 0x00, 0xa0, 0x50, 0x00, 0x00, 0x62, 0x6a, + 0x02, 0x90, 0x81, 0x7b, 0x28, 0x1c, 0x07, 0xf0, + 0x78, 0xff, 0x00, 0x2f, 0x19, 0xd0, 0x20, 0x1c, + 0x60, 0x30, 0xc1, 0x79, 0x4a, 0x1c, 0xc2, 0x71, + 0x80, 0x79, 0x81, 0x42, 0x02, 0xd2, 0x01, 0x20, + 0x01, 0xe0, 0x40, 0xe0, 0x00, 0x20, 0x01, 0x90, + 0x00, 0x28, 0x0a, 0xd0, 0x25, 0x48, 0x00, 0x78, + 0x80, 0x07, 0x06, 0xd5, 0x00, 0xf0, 0x0d, 0xfb, + 0x01, 0x1c, 0x3c, 0x00, 0xdc, 0x50, 0x00, 0x00, + 0x20, 0x1c, 0x0b, 0xf0, 0x15, 0xfd, 0x01, 0x90, + 0x01, 0x98, 0x00, 0x28, 0x0f, 0xd0, 0x02, 0x98, + 0x00, 0x7b, 0x02, 0x28, 0x03, 0xd1, 0x20, 0x1c, + 0x04, 0xf0, 0xd0, 0xfe, 0x84, 0xe7, 0x01, 0x28, + 0x00, 0xd0, 0x7e, 0xe7, 0x21, 0x1c, 0x30, 0x1c, + 0x04, 0xf0, 0xe2, 0xfe, 0x7c, 0xe7, 0x25, 0x1c, + 0x60, 0x35, 0xe8, 0x79, 0xff, 0x30, 0xa8, 0x71, + 0x68, 0x7a, 0x06, 0xf0, 0x3c, 0x00, 0x18, 0x51, + 0x00, 0x00, 0x9d, 0xfc, 0x0d, 0xf0, 0x47, 0xfe, + 0x07, 0x1c, 0x05, 0xf0, 0x12, 0xff, 0x3f, 0x18, + 0x02, 0x98, 0x81, 0x7b, 0x20, 0x69, 0x04, 0x30, + 0x00, 0xf0, 0x35, 0xfa, 0x61, 0x6a, 0x05, 0xf0, + 0xea, 0xfe, 0x39, 0x18, 0x6b, 0x7a, 0x30, 0x88, + 0x80, 0x31, 0x09, 0x4a, 0x0d, 0xf0, 0x91, 0xfe, + 0x5d, 0xe7, 0x03, 0x21, 0x0c, 0x20, 0xfc, 0xf7, + 0xaa, 0xf8, 0x58, 0xe7, 0x00, 0x00, 0x3c, 0x00, + 0x54, 0x51, 0x00, 0x00, 0x60, 0x7b, 0x01, 0x00, + 0xa5, 0x4d, 0x00, 0x00, 0xc9, 0x4d, 0x00, 0x00, + 0x32, 0x80, 0x07, 0x00, 0x1d, 0x75, 0x01, 0x00, + 0x8d, 0x4e, 0x00, 0x00, 0xff, 0xb5, 0x81, 0xb0, + 0x1f, 0x1c, 0x05, 0x1c, 0x14, 0x1c, 0x10, 0x1c, + 0x0a, 0x9e, 0x00, 0xf0, 0xf5, 0xfc, 0x29, 0x1c, + 0x10, 0x31, 0x20, 0x1d, 0x06, 0x22, 0xfb, 0xf7, + 0xb7, 0xf9, 0xa8, 0x8e, 0x20, 0x80, 0xe8, 0x8e, + 0x3c, 0x00, 0x90, 0x51, 0x00, 0x00, 0x60, 0x80, + 0x02, 0x99, 0x20, 0x1c, 0x00, 0xf0, 0x07, 0xf9, + 0xff, 0x34, 0x01, 0x34, 0x66, 0x60, 0x27, 0x60, + 0x05, 0xb0, 0xf0, 0xbd, 0x00, 0x00, 0xf8, 0xb5, + 0x0f, 0x1c, 0x1e, 0x1c, 0x05, 0x1c, 0x14, 0x1c, + 0x10, 0x1c, 0x00, 0xf0, 0xd8, 0xfc, 0xa8, 0x88, + 0x39, 0x1c, 0x20, 0x80, 0x28, 0x89, 0x60, 0x80, + 0x20, 0x1c, 0x00, 0xf0, 0xf0, 0xf8, 0xff, 0x34, + 0x01, 0x34, 0x3c, 0x00, 0xcc, 0x51, 0x00, 0x00, + 0x66, 0x60, 0xf8, 0xbd, 0x70, 0xb5, 0x04, 0x1c, + 0xc0, 0x68, 0x05, 0x68, 0x20, 0x1c, 0x14, 0x30, + 0x06, 0x1c, 0x00, 0xf0, 0x0f, 0xfb, 0x00, 0x28, + 0x16, 0xd0, 0x01, 0x22, 0x02, 0x21, 0x20, 0x69, + 0x05, 0xf0, 0xf8, 0xfa, 0x00, 0x28, 0x01, 0xd0, + 0xfb, 0xf7, 0x24, 0xff, 0x00, 0x22, 0x02, 0x21, + 0x20, 0x69, 0x05, 0xf0, 0xef, 0xfa, 0x00, 0x28, + 0x06, 0xd0, 0xfb, 0xf7, 0x3c, 0x00, 0x08, 0x52, + 0x00, 0x00, 0x01, 0xff, 0x00, 0x28, 0x02, 0xd0, + 0x30, 0x1c, 0x0b, 0xf0, 0x7c, 0xfb, 0x68, 0x89, + 0x80, 0x07, 0xc0, 0x0f, 0x03, 0xf0, 0xa7, 0xf8, + 0x18, 0x23, 0x04, 0x49, 0x58, 0x43, 0x40, 0x18, + 0xc1, 0x68, 0x00, 0x29, 0x02, 0xd0, 0x20, 0x1c, + 0xfb, 0xf7, 0xd4, 0xf8, 0x70, 0xbd, 0x94, 0x67, + 0x01, 0x00, 0xf8, 0xb5, 0x04, 0x1c, 0x10, 0x1c, + 0x0d, 0x1c, 0x19, 0x1c, 0xff, 0x22, 0x3c, 0x00, + 0x44, 0x52, 0x00, 0x00, 0x00, 0x27, 0xff, 0x2d, + 0x25, 0xd0, 0x00, 0x29, 0x05, 0xd0, 0x4b, 0x88, + 0x00, 0x2b, 0x02, 0xd0, 0x00, 0xf0, 0x50, 0xfc, + 0x15, 0xe0, 0x00, 0x21, 0x10, 0x4e, 0x4b, 0x00, + 0x9e, 0x19, 0x02, 0x23, 0xf6, 0x5e, 0x86, 0x42, + 0x01, 0xdd, 0x0a, 0x1c, 0x04, 0xe0, 0x01, 0x31, + 0x09, 0x06, 0x09, 0x0e, 0x26, 0x29, 0xf1, 0xd3, + 0x09, 0x4e, 0x50, 0x00, 0x80, 0x19, 0x4e, 0x23, + 0x3c, 0x00, 0x80, 0x52, 0x00, 0x00, 0xc0, 0x5e, + 0x27, 0x2a, 0x07, 0xd2, 0x06, 0x49, 0x20, 0x39, + 0x49, 0x57, 0x47, 0x31, 0x40, 0x1a, 0x20, 0x60, + 0x01, 0x27, 0x02, 0xe0, 0x7e, 0x20, 0xc0, 0x43, + 0x20, 0x60, 0x38, 0x1c, 0xf8, 0xbd, 0xfa, 0x47, + 0x01, 0x00, 0xb0, 0xb5, 0x0c, 0x1c, 0x7e, 0x21, + 0x05, 0x1c, 0x00, 0x20, 0xc9, 0x43, 0x00, 0x2c, + 0x0f, 0xd0, 0x10, 0x1c, 0x05, 0xf0, 0x6b, 0xfd, + 0x00, 0x28, 0x3c, 0x00, 0xbc, 0x52, 0x00, 0x00, + 0x02, 0xd0, 0x21, 0x1c, 0xc9, 0x39, 0x01, 0xe0, + 0x21, 0x1c, 0x86, 0x39, 0x02, 0x20, 0xc0, 0x43, + 0xfb, 0xf7, 0xb4, 0xf9, 0x01, 0x1c, 0x01, 0x20, + 0x29, 0x60, 0xb0, 0xbd, 0x98, 0xb5, 0x14, 0x1c, + 0x00, 0x22, 0x00, 0x92, 0x22, 0x1c, 0xfd, 0xf7, + 0x43, 0xfe, 0x98, 0xbd, 0x05, 0x49, 0x80, 0xb5, + 0x08, 0x60, 0x05, 0x49, 0x01, 0x20, 0xc8, 0x61, + 0x01, 0x21, 0x00, 0x20, 0x3c, 0x00, 0xf8, 0x52, + 0x00, 0x00, 0x03, 0xf0, 0x1c, 0xfe, 0x80, 0xbd, + 0x00, 0x00, 0x20, 0x67, 0x01, 0x00, 0xac, 0x7c, + 0x01, 0x00, 0x80, 0xb5, 0x00, 0x21, 0x00, 0x20, + 0x03, 0xf0, 0x11, 0xfe, 0x06, 0xf0, 0x0d, 0xfb, + 0x02, 0x49, 0x00, 0x20, 0x08, 0x60, 0x80, 0xbd, + 0x00, 0x00, 0x20, 0x67, 0x01, 0x00, 0x03, 0x49, + 0x01, 0x20, 0x09, 0x69, 0x00, 0x29, 0x00, 0xd1, + 0x00, 0x20, 0x70, 0x47, 0x00, 0x00, 0x3c, 0x00, + 0x34, 0x53, 0x00, 0x00, 0x10, 0x67, 0x01, 0x00, + 0x03, 0x48, 0x00, 0x69, 0x00, 0x28, 0x01, 0xd0, + 0x40, 0x69, 0x70, 0x47, 0x00, 0x20, 0x70, 0x47, + 0x10, 0x67, 0x01, 0x00, 0x70, 0xb5, 0x16, 0x1c, + 0x0d, 0x1c, 0x04, 0x1c, 0x00, 0x28, 0x01, 0xd0, + 0x01, 0x2c, 0x07, 0xd1, 0x00, 0xf0, 0x36, 0xfa, + 0x00, 0x28, 0x05, 0xd0, 0x13, 0xf0, 0xca, 0xf9, + 0x00, 0x28, 0x01, 0xd1, 0x01, 0x20, 0x70, 0xbd, + 0x3c, 0x00, 0x70, 0x53, 0x00, 0x00, 0x01, 0x20, + 0x00, 0x2c, 0x00, 0xd0, 0x00, 0x20, 0x0a, 0x4c, + 0x04, 0x34, 0x61, 0xc4, 0x10, 0x3c, 0x00, 0xf0, + 0x24, 0xfa, 0x00, 0x28, 0x02, 0xd0, 0x00, 0xf0, + 0xc6, 0xf9, 0x01, 0xe0, 0x00, 0xf0, 0xe5, 0xf8, + 0xc0, 0x30, 0xc3, 0x6b, 0x22, 0x1d, 0x07, 0xca, + 0xfb, 0xf7, 0x20, 0xf8, 0x00, 0x20, 0x70, 0xbd, + 0x00, 0x00, 0xd4, 0x67, 0x01, 0x00, 0xf8, 0xb5, + 0x0d, 0x1c, 0x3c, 0x00, 0xac, 0x53, 0x00, 0x00, + 0x00, 0x21, 0x04, 0x1c, 0x28, 0x1c, 0x05, 0xf0, + 0xe3, 0xf9, 0x23, 0x1c, 0xff, 0x33, 0x21, 0x33, + 0xff, 0x27, 0x00, 0x28, 0x05, 0xd0, 0x22, 0x22, + 0x01, 0x1c, 0x18, 0x1c, 0xfb, 0xf7, 0x96, 0xf8, + 0x00, 0xe0, 0x1f, 0x70, 0x03, 0x21, 0x28, 0x1c, + 0x05, 0xf0, 0xd2, 0xf9, 0x26, 0x1c, 0xff, 0x36, + 0x41, 0x36, 0x00, 0x28, 0x05, 0xd0, 0x03, 0x22, + 0x01, 0x1c, 0xb0, 0x1c, 0x3c, 0x00, 0xe8, 0x53, + 0x00, 0x00, 0xfb, 0xf7, 0x86, 0xf8, 0x00, 0xe0, + 0xb7, 0x70, 0x01, 0x21, 0x28, 0x1c, 0x05, 0xf0, + 0xc2, 0xf9, 0x00, 0x28, 0x07, 0xd0, 0x01, 0x1c, + 0x20, 0x1c, 0xff, 0x30, 0x0a, 0x22, 0x46, 0x30, + 0xfb, 0xf7, 0x77, 0xf8, 0x00, 0xe0, 0x77, 0x71, + 0x32, 0x21, 0x28, 0x1c, 0x05, 0xf0, 0xb3, 0xf9, + 0x00, 0x28, 0x07, 0xd0, 0x01, 0x1c, 0x20, 0x1c, + 0xff, 0x30, 0x12, 0x22, 0x50, 0x30, 0x3c, 0x00, + 0x24, 0x54, 0x00, 0x00, 0xfb, 0xf7, 0x68, 0xf8, + 0x00, 0xe0, 0xf7, 0x73, 0x06, 0x21, 0x28, 0x1c, + 0x05, 0xf0, 0xa4, 0xf9, 0x00, 0x28, 0x07, 0xd0, + 0x01, 0x1c, 0x20, 0x1c, 0xff, 0x30, 0x04, 0x22, + 0x63, 0x30, 0xfb, 0xf7, 0x59, 0xf8, 0xf8, 0xbd, + 0xff, 0x34, 0x61, 0x34, 0xa7, 0x70, 0xfa, 0xe7, + 0x08, 0x49, 0x80, 0xb5, 0x09, 0x68, 0x00, 0x28, + 0x01, 0xd1, 0x07, 0x48, 0x01, 0x68, 0x08, 0x1c, + 0x3c, 0x00, 0x60, 0x54, 0x00, 0x00, 0x05, 0xd1, + 0x03, 0x21, 0x90, 0x20, 0xfb, 0xf7, 0x1d, 0xff, + 0x00, 0x20, 0x80, 0xbd, 0x01, 0xf0, 0xd7, 0xfb, + 0x80, 0xbd, 0x1c, 0x67, 0x01, 0x00, 0x20, 0x67, + 0x01, 0x00, 0x80, 0xb5, 0xff, 0xf7, 0xe7, 0xff, + 0x80, 0xbd, 0xf0, 0xb5, 0x00, 0x24, 0x84, 0x46, + 0x00, 0x20, 0x0b, 0xe0, 0x87, 0x40, 0x17, 0x40, + 0x07, 0xd0, 0x14, 0x23, 0x0b, 0x4d, 0x43, 0x43, + 0x5b, 0x19, 0x3c, 0x00, 0x9c, 0x54, 0x00, 0x00, + 0x1b, 0x7c, 0x65, 0x46, 0x2b, 0x55, 0x01, 0x34, + 0x01, 0x30, 0x01, 0x27, 0x3b, 0x1c, 0x0e, 0x28, + 0x00, 0xd3, 0x00, 0x23, 0x0e, 0x88, 0x3d, 0x1c, + 0xa6, 0x42, 0x00, 0xdc, 0x00, 0x25, 0x2b, 0x40, + 0xe7, 0xd1, 0x0c, 0x80, 0xf0, 0xbd, 0x00, 0x00, + 0x74, 0x40, 0x01, 0x00, 0x78, 0xb5, 0x04, 0x1c, + 0x01, 0x20, 0x20, 0x70, 0x08, 0x20, 0x00, 0xab, + 0x0d, 0x1c, 0x18, 0x80, 0x3c, 0x00, 0xd8, 0x54, + 0x00, 0x00, 0x16, 0x1c, 0xa0, 0x1c, 0x69, 0x46, + 0xff, 0xf7, 0xd1, 0xff, 0x00, 0xab, 0x00, 0x22, + 0xd2, 0x43, 0x19, 0x88, 0x82, 0x40, 0x61, 0x70, + 0x32, 0x20, 0x28, 0x70, 0x10, 0x20, 0x18, 0x80, + 0x32, 0x40, 0xa8, 0x1c, 0x69, 0x46, 0xff, 0xf7, + 0xc2, 0xff, 0x00, 0xab, 0x18, 0x88, 0x68, 0x70, + 0x78, 0xbd, 0x80, 0xb5, 0x02, 0xf0, 0x35, 0xff, + 0x00, 0x21, 0x00, 0x28, 0x00, 0xd0, 0x3c, 0x00, + 0x14, 0x55, 0x00, 0x00, 0x01, 0x69, 0x08, 0x1c, + 0x80, 0xbd, 0x00, 0x00, 0x05, 0x49, 0x00, 0x28, + 0x01, 0xd0, 0xc8, 0x68, 0x00, 0xe0, 0x08, 0x69, + 0x00, 0x28, 0x01, 0xd0, 0x04, 0x30, 0x70, 0x47, + 0x00, 0x20, 0x70, 0x47, 0x10, 0x67, 0x01, 0x00, + 0x03, 0x48, 0x00, 0x69, 0x00, 0x28, 0x01, 0xd0, + 0x04, 0x30, 0x70, 0x47, 0x00, 0x20, 0x70, 0x47, + 0x10, 0x67, 0x01, 0x00, 0x02, 0x48, 0x00, 0x69, + 0x3c, 0x00, 0x50, 0x55, 0x00, 0x00, 0x00, 0x28, + 0xff, 0xd1, 0x70, 0x47, 0x00, 0x00, 0x10, 0x67, + 0x01, 0x00, 0x10, 0xb5, 0x05, 0x4c, 0x20, 0x69, + 0x00, 0x28, 0x03, 0xd1, 0x04, 0x21, 0x90, 0x20, + 0xfb, 0xf7, 0x9b, 0xfe, 0x20, 0x69, 0x10, 0xbd, + 0x00, 0x00, 0x10, 0x67, 0x01, 0x00, 0x10, 0xb5, + 0x04, 0x1c, 0x00, 0xf0, 0x40, 0xf9, 0x00, 0x28, + 0x01, 0xd0, 0x00, 0x20, 0x10, 0xbd, 0x20, 0x1c, + 0x00, 0xf0, 0x3c, 0x00, 0x8c, 0x55, 0x00, 0x00, + 0x57, 0xf9, 0x00, 0x28, 0x01, 0xd0, 0x01, 0x20, + 0x10, 0xbd, 0x02, 0x20, 0x10, 0xbd, 0x00, 0x00, + 0x70, 0xb5, 0x0f, 0x4e, 0x04, 0x1c, 0x30, 0x68, + 0x0d, 0x1c, 0x00, 0x28, 0x07, 0xd0, 0x21, 0x1c, + 0x04, 0x30, 0x05, 0xf0, 0xc1, 0xfb, 0x00, 0x28, + 0x01, 0xd0, 0x30, 0x68, 0x0b, 0xe0, 0x09, 0x4a, + 0x10, 0x68, 0x00, 0x28, 0x09, 0xd0, 0x21, 0x1c, + 0x14, 0x1c, 0x04, 0x30, 0x3c, 0x00, 0xc8, 0x55, + 0x00, 0x00, 0x05, 0xf0, 0xb4, 0xfb, 0x00, 0x28, + 0x02, 0xd0, 0x20, 0x68, 0x9c, 0x30, 0x00, 0xe0, + 0x03, 0x48, 0x40, 0x5d, 0x70, 0xbd, 0x20, 0x67, + 0x01, 0x00, 0x1c, 0x67, 0x01, 0x00, 0xcc, 0x47, + 0x01, 0x00, 0x04, 0x49, 0x00, 0x20, 0x09, 0x69, + 0x00, 0x29, 0x02, 0xd0, 0xff, 0x31, 0x01, 0x31, + 0x88, 0x69, 0x70, 0x47, 0x00, 0x00, 0x10, 0x67, + 0x01, 0x00, 0x01, 0x48, 0x00, 0x7a, 0x3c, 0x00, + 0x04, 0x56, 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, + 0xac, 0x7c, 0x01, 0x00, 0xfe, 0xb5, 0x06, 0x1c, + 0x00, 0x20, 0x1f, 0x1c, 0x14, 0x1c, 0x00, 0x29, + 0x02, 0x90, 0x19, 0xd0, 0x01, 0x29, 0x26, 0xd0, + 0x02, 0x29, 0x47, 0xd1, 0x26, 0x48, 0x00, 0x78, + 0x05, 0xf0, 0xa0, 0xfb, 0xa0, 0x72, 0x0a, 0xf0, + 0x4f, 0xfc, 0x0e, 0x28, 0x09, 0xd1, 0xa0, 0x7a, + 0x05, 0xf0, 0xaa, 0xfb, 0x00, 0x28, 0x04, 0xd0, + 0x3c, 0x00, 0x40, 0x56, 0x00, 0x00, 0x20, 0x48, + 0x00, 0x78, 0x05, 0xf0, 0x92, 0xfb, 0xa0, 0x72, + 0x00, 0x20, 0x20, 0x72, 0x2f, 0xe0, 0x1d, 0x4d, + 0x28, 0x68, 0x00, 0x28, 0x01, 0xd1, 0xfb, 0xf7, + 0x52, 0xfe, 0x00, 0x97, 0x2a, 0x68, 0x23, 0x1c, + 0x18, 0x32, 0x11, 0x1c, 0x30, 0x1c, 0xfc, 0xf7, + 0xde, 0xfb, 0x26, 0xe0, 0x30, 0x1c, 0x0c, 0xf0, + 0xca, 0xfb, 0x05, 0x1c, 0x02, 0xd0, 0xa8, 0x68, + 0x00, 0x28, 0x3c, 0x00, 0x7c, 0x56, 0x00, 0x00, + 0x08, 0xd1, 0x13, 0x48, 0x00, 0x68, 0x00, 0x28, + 0x01, 0xd1, 0xfb, 0xf7, 0x3b, 0xfe, 0x10, 0x48, + 0x00, 0x68, 0x18, 0x30, 0x02, 0x1c, 0x0e, 0x48, + 0x00, 0x97, 0x01, 0x68, 0x23, 0x1c, 0x18, 0x31, + 0x30, 0x1c, 0xfc, 0xf7, 0xc3, 0xfb, 0x00, 0x2d, + 0x0a, 0xd0, 0x40, 0x35, 0x28, 0x88, 0x80, 0x06, + 0x06, 0xd4, 0x00, 0x20, 0x20, 0x60, 0x03, 0xe0, + 0x01, 0x21, 0x90, 0x20, 0x3c, 0x00, 0xb8, 0x56, + 0x00, 0x00, 0xfb, 0xf7, 0xf4, 0xfd, 0x02, 0x98, + 0xfe, 0xbd, 0xb0, 0x69, 0x01, 0x00, 0x90, 0x57, + 0x01, 0x00, 0x20, 0x67, 0x01, 0x00, 0x1c, 0x67, + 0x01, 0x00, 0x80, 0xb5, 0x00, 0x20, 0x02, 0xf0, + 0x4a, 0xfe, 0x18, 0x23, 0x05, 0x4a, 0x58, 0x43, + 0x80, 0x18, 0x40, 0x69, 0x01, 0x21, 0x00, 0x28, + 0x00, 0xd0, 0x41, 0x78, 0x08, 0x1c, 0x80, 0xbd, + 0x00, 0x00, 0x94, 0x67, 0x01, 0x00, 0x3c, 0x00, + 0xf4, 0x56, 0x00, 0x00, 0x02, 0x49, 0x08, 0x69, + 0x00, 0x28, 0x00, 0xd1, 0xc8, 0x68, 0x70, 0x47, + 0x10, 0x67, 0x01, 0x00, 0x03, 0x48, 0xc0, 0x68, + 0x00, 0x28, 0x01, 0xd0, 0x04, 0x30, 0x70, 0x47, + 0x00, 0x20, 0x70, 0x47, 0x10, 0x67, 0x01, 0x00, + 0x10, 0xb5, 0x05, 0x4c, 0xe0, 0x68, 0x00, 0x28, + 0x03, 0xd1, 0x05, 0x21, 0x90, 0x20, 0xfb, 0xf7, + 0xbd, 0xfd, 0xe0, 0x68, 0x10, 0xbd, 0x00, 0x00, + 0x3c, 0x00, 0x30, 0x57, 0x00, 0x00, 0x10, 0x67, + 0x01, 0x00, 0xf8, 0xb5, 0x0d, 0x1c, 0x00, 0x2a, + 0x03, 0xd0, 0x11, 0x49, 0x12, 0x4f, 0x0e, 0x78, + 0x01, 0xe0, 0x11, 0x4f, 0x0c, 0x26, 0x08, 0x2e, + 0x01, 0xd2, 0x34, 0x1c, 0x00, 0xe0, 0x08, 0x24, + 0x01, 0x21, 0x01, 0x70, 0x44, 0x70, 0x39, 0x1c, + 0x22, 0x1c, 0x02, 0x30, 0xfa, 0xf7, 0xcb, 0xfe, + 0x32, 0x1b, 0x00, 0x2a, 0x07, 0xdd, 0x32, 0x20, + 0x28, 0x70, 0x3c, 0x00, 0x6c, 0x57, 0x00, 0x00, + 0x39, 0x19, 0xa8, 0x1c, 0x6a, 0x70, 0xfa, 0xf7, + 0xc1, 0xfe, 0xf8, 0xbd, 0xff, 0x20, 0x28, 0x70, + 0x00, 0x20, 0x68, 0x70, 0xf9, 0xe7, 0x00, 0x00, + 0xa4, 0x69, 0x01, 0x00, 0xb0, 0x69, 0x01, 0x00, + 0x90, 0x57, 0x01, 0x00, 0x01, 0x49, 0x48, 0x62, + 0x70, 0x47, 0x00, 0x00, 0x94, 0x67, 0x01, 0x00, + 0x03, 0x49, 0x80, 0xb5, 0x08, 0x60, 0x01, 0x21, + 0x01, 0x20, 0x03, 0xf0, 0x3c, 0x00, 0xa8, 0x57, + 0x00, 0x00, 0xc5, 0xfb, 0x80, 0xbd, 0x1c, 0x67, + 0x01, 0x00, 0x80, 0xb5, 0x00, 0x21, 0x01, 0x20, + 0x03, 0xf0, 0xbd, 0xfb, 0x06, 0xf0, 0xb9, 0xf8, + 0x02, 0x49, 0x00, 0x20, 0x08, 0x60, 0x80, 0xbd, + 0x00, 0x00, 0x1c, 0x67, 0x01, 0x00, 0x03, 0x49, + 0x01, 0x20, 0xc9, 0x68, 0x00, 0x29, 0x00, 0xd1, + 0x00, 0x20, 0x70, 0x47, 0x00, 0x00, 0x10, 0x67, + 0x01, 0x00, 0x03, 0x48, 0xc0, 0x68, 0x3c, 0x00, + 0xe4, 0x57, 0x00, 0x00, 0x00, 0x28, 0x01, 0xd0, + 0x40, 0x69, 0x70, 0x47, 0x00, 0x20, 0x70, 0x47, + 0x10, 0x67, 0x01, 0x00, 0x80, 0xb5, 0x02, 0x21, + 0x01, 0x20, 0x03, 0xf0, 0x9b, 0xfb, 0x80, 0xbd, + 0x05, 0x4a, 0x80, 0xb5, 0x12, 0x69, 0x00, 0x21, + 0x00, 0x2a, 0x03, 0xd0, 0x11, 0x1d, 0x05, 0xf0, + 0x91, 0xfa, 0x01, 0x1c, 0x08, 0x1c, 0x80, 0xbd, + 0x10, 0x67, 0x01, 0x00, 0x06, 0x4a, 0x80, 0xb5, + 0x3c, 0x00, 0x20, 0x58, 0x00, 0x00, 0x12, 0x69, + 0x00, 0x21, 0x00, 0x2a, 0x05, 0xd0, 0x11, 0x1c, + 0xff, 0x31, 0x21, 0x31, 0x05, 0xf0, 0x8b, 0xfa, + 0x01, 0x1c, 0x08, 0x1c, 0x80, 0xbd, 0x10, 0x67, + 0x01, 0x00, 0x05, 0x4a, 0x80, 0xb5, 0xd2, 0x68, + 0x00, 0x21, 0x00, 0x2a, 0x03, 0xd0, 0x11, 0x1d, + 0x05, 0xf0, 0x73, 0xfa, 0x01, 0x1c, 0x08, 0x1c, + 0x80, 0xbd, 0x10, 0x67, 0x01, 0x00, 0x06, 0x4a, + 0x80, 0xb5, 0x3c, 0x00, 0x5c, 0x58, 0x00, 0x00, + 0xd2, 0x68, 0x00, 0x21, 0x00, 0x2a, 0x05, 0xd0, + 0x11, 0x1c, 0xff, 0x31, 0x21, 0x31, 0x05, 0xf0, + 0x6d, 0xfa, 0x01, 0x1c, 0x08, 0x1c, 0x80, 0xbd, + 0x10, 0x67, 0x01, 0x00, 0xff, 0xb5, 0x0d, 0x1c, + 0x1f, 0x1c, 0x87, 0xb0, 0x10, 0x9e, 0x00, 0x24, + 0x02, 0xf0, 0x72, 0xfd, 0x18, 0x23, 0x13, 0x49, + 0x58, 0x43, 0x08, 0x58, 0x00, 0x28, 0x19, 0xd0, + 0x04, 0x1c, 0x33, 0x1c, 0x3c, 0x00, 0x98, 0x58, + 0x00, 0x00, 0x3a, 0x1c, 0x28, 0x1c, 0x09, 0x99, + 0xfa, 0xf7, 0x9f, 0xfd, 0x04, 0x1c, 0x14, 0xd0, + 0x18, 0x20, 0x00, 0xab, 0x18, 0x80, 0xaa, 0x68, + 0x01, 0xa8, 0x69, 0x46, 0xff, 0xf7, 0xe7, 0xfd, + 0x6a, 0x46, 0x01, 0xa9, 0x00, 0x20, 0x07, 0xf0, + 0x44, 0xfe, 0x00, 0x28, 0x05, 0xd1, 0x0a, 0x21, + 0x00, 0xe0, 0x0f, 0x21, 0x90, 0x20, 0xfb, 0xf7, + 0xea, 0xfc, 0x20, 0x1c, 0x0b, 0xb0, 0x3c, 0x00, + 0xd4, 0x58, 0x00, 0x00, 0xf0, 0xbd, 0x00, 0x00, + 0x94, 0x67, 0x01, 0x00, 0x10, 0xb5, 0x00, 0x24, + 0x02, 0xf0, 0x44, 0xfd, 0x18, 0x23, 0x05, 0x49, + 0x58, 0x43, 0x40, 0x18, 0x80, 0x68, 0x00, 0x28, + 0x02, 0xd0, 0xfa, 0xf7, 0x71, 0xfd, 0x01, 0x24, + 0x20, 0x1c, 0x10, 0xbd, 0x94, 0x67, 0x01, 0x00, + 0x80, 0xb5, 0x02, 0x4b, 0x00, 0xf0, 0x4e, 0xf8, + 0x80, 0xbd, 0x00, 0x00, 0x10, 0x67, 0x01, 0x00, + 0x3c, 0x00, 0x10, 0x59, 0x00, 0x00, 0x80, 0xb5, + 0x02, 0x4b, 0x00, 0xf0, 0x46, 0xf8, 0x80, 0xbd, + 0x00, 0x00, 0x11, 0x67, 0x01, 0x00, 0xf8, 0xb5, + 0x0e, 0x1c, 0x15, 0x1c, 0x00, 0x28, 0x1c, 0x49, + 0x10, 0xd0, 0x48, 0x68, 0x1c, 0x4a, 0x28, 0x80, + 0x00, 0x20, 0x07, 0xe0, 0x0b, 0x18, 0x1c, 0x7a, + 0x14, 0x23, 0x63, 0x43, 0x9b, 0x18, 0x1b, 0x7c, + 0x33, 0x54, 0x01, 0x30, 0x2b, 0x88, 0x83, 0x42, + 0xf4, 0xdc, 0x3c, 0x00, 0x4c, 0x59, 0x00, 0x00, + 0x24, 0xe0, 0x00, 0x20, 0x0f, 0x1c, 0x00, 0x24, + 0x08, 0x60, 0x0f, 0xe0, 0x30, 0x5d, 0x05, 0xf0, + 0x07, 0xfa, 0x0e, 0x28, 0x01, 0xd1, 0x00, 0x20, + 0xf8, 0xbd, 0x39, 0x19, 0x08, 0x72, 0x01, 0x22, + 0x39, 0x68, 0x82, 0x40, 0x11, 0x43, 0x08, 0x1c, + 0x38, 0x60, 0x01, 0x34, 0x28, 0x88, 0xa0, 0x42, + 0xec, 0xdc, 0x28, 0x88, 0x78, 0x60, 0xff, 0xf7, + 0xb7, 0xfe, 0x00, 0x28, 0x3c, 0x00, 0x88, 0x59, + 0x00, 0x00, 0x06, 0xd0, 0x01, 0x69, 0x00, 0x29, + 0x03, 0xd0, 0x7f, 0x21, 0xc9, 0x43, 0x0b, 0xf0, + 0x52, 0xfb, 0x01, 0x20, 0xe3, 0xe7, 0x2c, 0x7d, + 0x01, 0x00, 0x74, 0x40, 0x01, 0x00, 0x10, 0xb5, + 0x1c, 0x1c, 0x00, 0x28, 0x0b, 0xd0, 0x20, 0x78, + 0x0e, 0x28, 0x05, 0xd2, 0x14, 0x23, 0x0c, 0x4a, + 0x58, 0x43, 0x80, 0x18, 0x00, 0x7c, 0x00, 0xe0, + 0x00, 0x20, 0x08, 0x70, 0x0e, 0xe0, 0x3c, 0x00, + 0xc4, 0x59, 0x00, 0x00, 0x08, 0x78, 0x05, 0xf0, + 0xd1, 0xf9, 0x20, 0x70, 0xff, 0xf7, 0x92, 0xfe, + 0x00, 0x28, 0x06, 0xd0, 0x01, 0x69, 0x00, 0x29, + 0x03, 0xd0, 0x7f, 0x21, 0xc9, 0x43, 0x0b, 0xf0, + 0x2d, 0xfb, 0x01, 0x20, 0x10, 0xbd, 0x00, 0x00, + 0x74, 0x40, 0x01, 0x00, 0x80, 0xb5, 0x27, 0x20, + 0xc0, 0x43, 0x09, 0xf0, 0x31, 0xfc, 0x80, 0xbd, + 0x80, 0xb5, 0x27, 0x20, 0xc0, 0x43, 0x09, 0xf0, + 0x3c, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x39, 0xfc, + 0x80, 0xbd, 0x80, 0xb5, 0x28, 0x20, 0x09, 0xf0, + 0x42, 0xfc, 0x80, 0xbd, 0x00, 0x00, 0x80, 0xb5, + 0x28, 0x20, 0x09, 0xf0, 0x4a, 0xfc, 0x80, 0xbd, + 0x00, 0x00, 0xb0, 0xb5, 0x01, 0x28, 0x28, 0xd1, + 0x01, 0x29, 0x01, 0xd0, 0xfb, 0xf7, 0x6b, 0xfc, + 0xff, 0xf7, 0xe9, 0xfd, 0x02, 0x28, 0x1a, 0xd1, + 0x07, 0xf0, 0x13, 0xfc, 0x12, 0x4c, 0x21, 0x69, + 0x88, 0x42, 0x3c, 0x00, 0x3c, 0x5a, 0x00, 0x00, + 0x15, 0xd0, 0x07, 0xf0, 0x0d, 0xfc, 0x20, 0x61, + 0x20, 0x68, 0x7d, 0x24, 0xe4, 0x00, 0x44, 0x43, + 0x0d, 0xf0, 0xae, 0xf9, 0x05, 0x1c, 0x07, 0xf0, + 0x0b, 0xfc, 0x28, 0x1a, 0x84, 0x42, 0x00, 0xd9, + 0x24, 0x1a, 0x01, 0x22, 0x21, 0x1c, 0x0a, 0x20, + 0x0d, 0xf0, 0xb2, 0xfd, 0xb0, 0xbd, 0x00, 0x21, + 0x09, 0x20, 0x0c, 0xf0, 0x75, 0xfc, 0xb0, 0xbd, + 0x07, 0x21, 0x0a, 0x20, 0x3c, 0x00, 0x78, 0x5a, + 0x00, 0x00, 0xfb, 0xf7, 0x14, 0xfc, 0xb0, 0xbd, + 0x00, 0x00, 0xd4, 0x67, 0x01, 0x00, 0x7d, 0x20, + 0x02, 0x49, 0x00, 0x01, 0x08, 0x60, 0x70, 0x47, + 0x00, 0x00, 0xd4, 0x67, 0x01, 0x00, 0x10, 0xb5, + 0x81, 0x6d, 0x04, 0x1c, 0xff, 0x30, 0x46, 0x30, + 0x0c, 0xf0, 0xd1, 0xfc, 0x20, 0x1c, 0xff, 0x30, + 0x50, 0x30, 0xa1, 0x6d, 0x0c, 0xf0, 0xcb, 0xfc, + 0x10, 0xbd, 0xb0, 0xb5, 0x04, 0x1c, 0x3c, 0x00, + 0xb4, 0x5a, 0x00, 0x00, 0x0d, 0x1c, 0x02, 0xf0, + 0x59, 0xfc, 0x20, 0x1c, 0x02, 0xf0, 0x56, 0xfc, + 0x18, 0x23, 0x04, 0x49, 0x58, 0x43, 0x40, 0x18, + 0x18, 0x22, 0x29, 0x1c, 0xfa, 0xf7, 0x70, 0xfd, + 0xb0, 0xbd, 0x00, 0x00, 0x94, 0x67, 0x01, 0x00, + 0x10, 0xb5, 0x04, 0x1c, 0x09, 0xf0, 0xbc, 0xfb, + 0x20, 0x1c, 0x09, 0xf0, 0xc7, 0xfb, 0x10, 0xbd, + 0x10, 0xb5, 0x04, 0x1c, 0x09, 0xf0, 0xd0, 0xfb, + 0x3c, 0x00, 0xf0, 0x5a, 0x00, 0x00, 0x20, 0x1c, + 0x09, 0xf0, 0xdb, 0xfb, 0x10, 0xbd, 0x70, 0xb5, + 0x0c, 0x78, 0x06, 0x1c, 0x48, 0x88, 0x4d, 0x78, + 0xe2, 0x00, 0x80, 0x1a, 0xe9, 0x00, 0x40, 0x1a, + 0x01, 0x1c, 0x41, 0x43, 0x12, 0x31, 0x24, 0x20, + 0xfa, 0xf7, 0x91, 0xfd, 0x21, 0x1c, 0x61, 0x43, + 0xc9, 0x00, 0x40, 0x18, 0x29, 0x1c, 0x69, 0x43, + 0xc9, 0x00, 0x42, 0x18, 0x0c, 0x49, 0x88, 0x79, + 0x0c, 0x4b, 0x3c, 0x00, 0x2c, 0x5b, 0x00, 0x00, + 0x53, 0x43, 0x0c, 0x4a, 0x13, 0x60, 0x53, 0x7b, + 0x34, 0x02, 0x14, 0x60, 0x52, 0x7b, 0x88, 0x71, + 0x01, 0x33, 0x58, 0x10, 0x08, 0x4b, 0x80, 0x1a, + 0x01, 0x21, 0x49, 0x02, 0x58, 0x43, 0x00, 0x28, + 0x00, 0xda, 0x49, 0x42, 0x08, 0x18, 0x80, 0x12, + 0x21, 0x38, 0x70, 0xbd, 0x20, 0x10, 0x07, 0x00, + 0xec, 0x04, 0x00, 0x00, 0x00, 0xa0, 0x07, 0x00, + 0x03, 0x03, 0x00, 0x00, 0x3c, 0x00, 0x68, 0x5b, + 0x00, 0x00, 0x10, 0xb5, 0x04, 0x1c, 0x06, 0x21, + 0x04, 0x30, 0xfa, 0xf7, 0x70, 0xfc, 0xff, 0x20, + 0x21, 0x30, 0xff, 0x21, 0x01, 0x55, 0x20, 0x1c, + 0xff, 0x30, 0x41, 0x30, 0x81, 0x70, 0x41, 0x71, + 0xc1, 0x73, 0xff, 0x20, 0x63, 0x30, 0x01, 0x55, + 0x00, 0x20, 0x20, 0x61, 0x60, 0x61, 0xff, 0x34, + 0x01, 0x34, 0xa0, 0x60, 0xe0, 0x60, 0x10, 0xbd, + 0x00, 0x00, 0x70, 0xb5, 0x06, 0x1c, 0x3c, 0x00, + 0xa4, 0x5b, 0x00, 0x00, 0x08, 0x1c, 0x58, 0x60, + 0x9a, 0x60, 0x1c, 0x1c, 0x1e, 0x60, 0x15, 0x1c, + 0x9b, 0x8a, 0xe2, 0x8a, 0x31, 0x1c, 0x02, 0xf0, + 0xa1, 0xfc, 0x28, 0x1a, 0xe0, 0x60, 0x70, 0xbd, + 0x70, 0xb5, 0x04, 0x1c, 0x08, 0x1c, 0x11, 0x1c, + 0x1e, 0x1c, 0x00, 0x25, 0xeb, 0x43, 0x22, 0x1c, + 0x18, 0x32, 0x0b, 0xf0, 0xf7, 0xfb, 0x22, 0x1c, + 0xff, 0x32, 0x50, 0x32, 0x11, 0x1c, 0x0a, 0x39, + 0x3c, 0x00, 0xe0, 0x5b, 0x00, 0x00, 0x01, 0x23, + 0x20, 0x1c, 0x00, 0xf0, 0xc6, 0xf8, 0x0c, 0x28, + 0x10, 0xd0, 0x01, 0x25, 0x20, 0x1c, 0x0b, 0xf0, + 0xac, 0xfa, 0x20, 0x1c, 0x00, 0xf0, 0x19, 0xf8, + 0x20, 0x1c, 0x00, 0xf0, 0x0a, 0xf8, 0x20, 0x1c, + 0x00, 0xf0, 0x29, 0xf8, 0x31, 0x1c, 0x20, 0x1c, + 0x0b, 0xf0, 0x17, 0xfa, 0x28, 0x1c, 0x70, 0xbd, + 0x00, 0x00, 0xff, 0x21, 0x1d, 0x31, 0x09, 0x58, + 0x80, 0x30, 0x3c, 0x00, 0x1c, 0x5c, 0x00, 0x00, + 0x89, 0x07, 0x00, 0x29, 0x01, 0xda, 0x01, 0x21, + 0x00, 0xe0, 0x00, 0x21, 0xc1, 0x62, 0x70, 0x47, + 0x01, 0x1c, 0x80, 0x31, 0x00, 0x22, 0x0a, 0x63, + 0x07, 0x4a, 0x12, 0x68, 0x00, 0x2a, 0x09, 0xd0, + 0x42, 0x88, 0x92, 0x06, 0x06, 0xd5, 0xff, 0x30, + 0x01, 0x30, 0xc0, 0x69, 0x40, 0x07, 0x01, 0xd4, + 0x01, 0x20, 0x08, 0x63, 0x70, 0x47, 0x00, 0x00, + 0xac, 0x69, 0x01, 0x00, 0x3c, 0x00, 0x58, 0x5c, + 0x00, 0x00, 0x80, 0xb5, 0x01, 0x1c, 0x4a, 0x88, + 0x00, 0x20, 0x52, 0x05, 0x05, 0xd5, 0xff, 0x31, + 0x01, 0x31, 0xc9, 0x69, 0x49, 0x07, 0x00, 0xd4, + 0x01, 0x20, 0x06, 0xf0, 0xec, 0xfb, 0x80, 0xbd, + 0x00, 0x00, 0xf8, 0xb5, 0x05, 0x1c, 0x98, 0x68, + 0x17, 0x1c, 0x0e, 0x1c, 0x1c, 0x1c, 0x00, 0x28, + 0x02, 0xd1, 0x20, 0x1c, 0x0c, 0xf0, 0x31, 0xf8, + 0xab, 0x69, 0x39, 0x1c, 0x30, 0x1c, 0x3c, 0x00, + 0x94, 0x5c, 0x00, 0x00, 0xa2, 0x68, 0x0b, 0xf0, + 0x95, 0xfb, 0xf8, 0xbd, 0xf8, 0xb5, 0x16, 0x1c, + 0x0d, 0x1c, 0x1f, 0x1c, 0x00, 0x24, 0x02, 0xf0, + 0x61, 0xfb, 0x18, 0x23, 0x06, 0x49, 0x58, 0x43, + 0x40, 0x18, 0x43, 0x68, 0x00, 0x2b, 0x05, 0xd0, + 0x3a, 0x1c, 0x31, 0x1c, 0x28, 0x1c, 0xfa, 0xf7, + 0x8e, 0xfb, 0x01, 0x24, 0x20, 0x1c, 0xf8, 0xbd, + 0x94, 0x67, 0x01, 0x00, 0x80, 0xb5, 0x07, 0xf0, + 0x3c, 0x00, 0xd0, 0x5c, 0x00, 0x00, 0xc5, 0xfa, + 0x09, 0x49, 0x08, 0x61, 0x08, 0x68, 0x00, 0x28, + 0x02, 0xd1, 0x7d, 0x20, 0x00, 0x01, 0x08, 0x60, + 0x08, 0x68, 0x7d, 0x21, 0xc9, 0x00, 0x41, 0x43, + 0x00, 0x23, 0x01, 0x22, 0x0a, 0x20, 0x0d, 0xf0, + 0x4e, 0xfd, 0x80, 0xbd, 0x00, 0x00, 0xd4, 0x67, + 0x01, 0x00, 0x80, 0xb5, 0x01, 0x21, 0x0a, 0x20, + 0x0d, 0xf0, 0x97, 0xfc, 0x80, 0xbd, 0xf8, 0xb5, + 0x0e, 0x1c, 0x3c, 0x00, 0x0c, 0x5d, 0x00, 0x00, + 0x51, 0x68, 0x14, 0x1c, 0x12, 0x68, 0xa5, 0x68, + 0x0b, 0x1c, 0x75, 0x1b, 0x57, 0x19, 0x97, 0x42, + 0x00, 0xd2, 0x01, 0x31, 0x42, 0x68, 0x00, 0x25, + 0x8a, 0x42, 0x02, 0xdd, 0x01, 0x25, 0x62, 0x60, + 0x05, 0xe0, 0x9a, 0x42, 0x03, 0xd1, 0x01, 0x68, + 0xb9, 0x42, 0x00, 0xd9, 0x01, 0x25, 0x00, 0x2d, + 0x09, 0xd0, 0x01, 0x68, 0x21, 0x60, 0xa6, 0x60, + 0xa3, 0x8a, 0xe2, 0x8a, 0x3c, 0x00, 0x48, 0x5d, + 0x00, 0x00, 0x60, 0x68, 0x02, 0xf0, 0xd7, 0xfb, + 0x30, 0x1a, 0xe0, 0x60, 0x28, 0x1c, 0xf8, 0xbd, + 0x00, 0x00, 0x80, 0xb5, 0x02, 0xf0, 0x07, 0xfb, + 0x18, 0x23, 0x03, 0x49, 0x58, 0x43, 0x40, 0x18, + 0x18, 0x21, 0xfa, 0xf7, 0x98, 0xfb, 0x80, 0xbd, + 0x00, 0x00, 0x94, 0x67, 0x01, 0x00, 0xfe, 0xb5, + 0x04, 0x1c, 0x08, 0x1c, 0x11, 0x1c, 0x1e, 0x1c, + 0x0c, 0x25, 0x01, 0x22, 0x00, 0x92, 0x3c, 0x00, + 0x84, 0x5d, 0x00, 0x00, 0xa2, 0x69, 0x02, 0xab, + 0xfd, 0xf7, 0xf0, 0xf8, 0x00, 0x28, 0x45, 0xd0, + 0x02, 0x98, 0x27, 0x21, 0x02, 0x1c, 0x0a, 0x40, + 0x01, 0xd1, 0x08, 0x43, 0x02, 0x90, 0x21, 0x49, + 0xa0, 0x69, 0x08, 0x40, 0x06, 0xd0, 0x02, 0x98, + 0x01, 0x40, 0x03, 0xd1, 0x49, 0x21, 0xc9, 0x00, + 0x08, 0x43, 0x02, 0x90, 0xa0, 0x6d, 0x02, 0x99, + 0x88, 0x42, 0x30, 0xd0, 0x00, 0x2e, 0x2d, 0xd0, + 0x3c, 0x00, 0xc0, 0x5d, 0x00, 0x00, 0x40, 0x21, + 0x20, 0x1c, 0x58, 0x30, 0xfa, 0xf7, 0x69, 0xfb, + 0x02, 0x98, 0x00, 0x25, 0x00, 0x26, 0x37, 0x1c, + 0xa0, 0x65, 0x19, 0xe0, 0xc0, 0x07, 0x11, 0xd5, + 0xf0, 0x19, 0x00, 0x19, 0x70, 0x30, 0x05, 0x71, + 0x28, 0x1c, 0x04, 0xf0, 0xd4, 0xff, 0x00, 0x28, + 0x04, 0xd0, 0xa0, 0x19, 0x80, 0x30, 0x05, 0x72, + 0x01, 0x36, 0x03, 0xe0, 0xe0, 0x19, 0x60, 0x30, + 0x05, 0x70, 0x3c, 0x00, 0xfc, 0x5d, 0x00, 0x00, + 0x01, 0x37, 0x01, 0x35, 0x2d, 0x06, 0x02, 0x98, + 0x2d, 0x0e, 0x40, 0x08, 0x02, 0x90, 0x02, 0x98, + 0x00, 0x28, 0xe2, 0xd1, 0x84, 0x20, 0x06, 0x51, + 0xf0, 0x19, 0x20, 0x67, 0xe7, 0x65, 0x00, 0x25, + 0x00, 0xe0, 0x0b, 0x25, 0x28, 0x1c, 0xfe, 0xbd, + 0xd8, 0x3a, 0x00, 0x00, 0x38, 0xb5, 0x05, 0x1c, + 0x08, 0x1c, 0x11, 0x1c, 0x00, 0x24, 0xe2, 0x43, + 0x6b, 0x46, 0xff, 0xf7, 0x3c, 0x00, 0x38, 0x5e, + 0x00, 0x00, 0x4f, 0xfa, 0x00, 0x28, 0x05, 0xd0, + 0xa8, 0x69, 0x00, 0x99, 0x01, 0x40, 0x81, 0x42, + 0x00, 0xd1, 0x01, 0x24, 0x20, 0x1c, 0x38, 0xbd, + 0x00, 0x00, 0x7c, 0xb5, 0x05, 0x6a, 0x86, 0x69, + 0x04, 0x1c, 0xc0, 0x68, 0xfb, 0xf7, 0xb7, 0xfb, + 0xe1, 0x69, 0xfb, 0xf7, 0xda, 0xfa, 0x20, 0x1c, + 0xe2, 0x69, 0x40, 0x30, 0xc1, 0x8b, 0x12, 0x89, + 0x89, 0x18, 0xc1, 0x83, 0x06, 0x49, 0x3c, 0x00, + 0x74, 0x5e, 0x00, 0x00, 0x01, 0x94, 0x00, 0x91, + 0x28, 0x69, 0x33, 0x1c, 0x82, 0x88, 0x01, 0x68, + 0xe0, 0x68, 0xc0, 0x68, 0x00, 0xf0, 0xf2, 0xf9, + 0x7c, 0xbd, 0x00, 0x00, 0x91, 0x5e, 0x00, 0x00, + 0xb0, 0xb5, 0xd1, 0x68, 0x55, 0x69, 0xc8, 0x68, + 0x14, 0x1c, 0x14, 0x4b, 0x0c, 0xe0, 0x02, 0x68, + 0x9a, 0x42, 0x07, 0xd1, 0xc2, 0x68, 0xca, 0x60, + 0x00, 0x21, 0xc1, 0x60, 0x01, 0x60, 0xfb, 0xf7, + 0x3c, 0x00, 0xb0, 0x5e, 0x00, 0x00, 0x73, 0xfb, + 0x03, 0xe0, 0x01, 0x1c, 0xc0, 0x68, 0x00, 0x28, + 0xf0, 0xd1, 0xe0, 0x68, 0xc0, 0x68, 0xe8, 0x60, + 0xe0, 0x68, 0xc5, 0x60, 0x20, 0x1c, 0x40, 0x30, + 0xc1, 0x8b, 0x2a, 0x89, 0x89, 0x18, 0xc1, 0x83, + 0x20, 0x68, 0x00, 0x28, 0x02, 0xd0, 0xff, 0xf7, + 0xba, 0xff, 0xb0, 0xbd, 0x04, 0x48, 0x04, 0xf0, + 0x4e, 0xf9, 0x00, 0x6a, 0x07, 0xf0, 0x77, 0xfa, + 0xb0, 0xbd, 0x3c, 0x00, 0xec, 0x5e, 0x00, 0x00, + 0xa0, 0x7e, 0x01, 0x00, 0xa0, 0x6a, 0x01, 0x00, + 0xf1, 0xb5, 0x82, 0xb0, 0x02, 0x98, 0x06, 0x69, + 0x01, 0x1c, 0x08, 0x36, 0x60, 0x31, 0x45, 0x68, + 0x01, 0x91, 0x82, 0xe0, 0x10, 0x21, 0x00, 0x20, + 0x2f, 0x69, 0xfb, 0xf7, 0x63, 0xfb, 0x68, 0x61, + 0x01, 0x89, 0x08, 0x39, 0x09, 0x04, 0x09, 0x0c, + 0x01, 0x81, 0x68, 0x69, 0x00, 0x68, 0x40, 0x18, + 0x08, 0x21, 0xfb, 0xf7, 0x3c, 0x00, 0x28, 0x5f, + 0x00, 0x00, 0x57, 0xfb, 0xe8, 0x61, 0x68, 0x69, + 0x71, 0x88, 0x00, 0x68, 0x20, 0x22, 0x01, 0x80, + 0x71, 0x68, 0x41, 0x60, 0x01, 0x99, 0x49, 0x7b, + 0x89, 0x01, 0x11, 0x43, 0xc1, 0x70, 0x00, 0x21, + 0x81, 0x70, 0x28, 0x20, 0xfb, 0xf7, 0x75, 0xfc, + 0x39, 0x88, 0x04, 0x1c, 0xc1, 0x81, 0xa8, 0x6b, + 0x00, 0x28, 0x03, 0xd1, 0x01, 0x20, 0x80, 0x02, + 0x08, 0x43, 0xe0, 0x81, 0x06, 0x22, 0x3c, 0x00, + 0x64, 0x5f, 0x00, 0x00, 0x39, 0x1d, 0x20, 0x1c, + 0x10, 0x30, 0xfa, 0xf7, 0xc5, 0xfa, 0x39, 0x1c, + 0x0a, 0x31, 0x06, 0x22, 0x20, 0x1c, 0x16, 0x30, + 0x00, 0x90, 0xfa, 0xf7, 0xbd, 0xfa, 0x39, 0x1c, + 0x10, 0x31, 0x06, 0x22, 0x20, 0x1c, 0x1c, 0x30, + 0xfa, 0xf7, 0xb6, 0xfa, 0xe1, 0x89, 0x25, 0x4a, + 0x5c, 0x20, 0x11, 0x40, 0x01, 0x22, 0x92, 0x03, + 0x11, 0x43, 0x40, 0x5b, 0xe1, 0x81, 0x0f, 0x21, + 0x3c, 0x00, 0xa0, 0x5f, 0x00, 0x00, 0x08, 0x40, + 0x60, 0x84, 0x20, 0x1c, 0x20, 0x30, 0x16, 0x21, + 0x81, 0x71, 0x00, 0x21, 0x21, 0x70, 0xe9, 0x6b, + 0x00, 0x29, 0x07, 0xd0, 0x29, 0x69, 0x09, 0x8b, + 0x09, 0x07, 0x09, 0x0f, 0x21, 0x70, 0xa1, 0x84, + 0x18, 0x21, 0x81, 0x71, 0x06, 0x22, 0x60, 0x1c, + 0x00, 0x99, 0xfa, 0xf7, 0x94, 0xfa, 0x70, 0x68, + 0x00, 0x0e, 0xe0, 0x71, 0x70, 0x68, 0x00, 0x02, + 0x00, 0x0e, 0x3c, 0x00, 0xdc, 0x5f, 0x00, 0x00, + 0x20, 0x72, 0x70, 0x68, 0x00, 0x04, 0x00, 0x0e, + 0x60, 0x72, 0x70, 0x68, 0xa0, 0x72, 0x70, 0x88, + 0x00, 0x0a, 0xe0, 0x72, 0x70, 0x88, 0x20, 0x73, + 0x70, 0x88, 0x01, 0x30, 0x00, 0x04, 0x00, 0x0c, + 0x70, 0x80, 0x02, 0xd1, 0x70, 0x68, 0x01, 0x30, + 0x70, 0x60, 0xac, 0x61, 0x02, 0x98, 0x28, 0x62, + 0x2d, 0x68, 0x00, 0x2d, 0x00, 0xd0, 0x79, 0xe7, + 0x02, 0x98, 0x04, 0x49, 0x3c, 0x00, 0x18, 0x60, + 0x00, 0x00, 0x42, 0x68, 0x04, 0x48, 0x04, 0xf0, + 0x74, 0xf8, 0xfe, 0xbd, 0x00, 0x00, 0x8f, 0xc7, + 0xff, 0xff, 0x3d, 0xda, 0x00, 0x00, 0xa0, 0x6a, + 0x01, 0x00, 0xb0, 0xb5, 0x07, 0x4d, 0x28, 0x78, + 0x03, 0x28, 0x08, 0xd0, 0x00, 0x24, 0x2c, 0x70, + 0x69, 0x68, 0x00, 0x29, 0x03, 0xd0, 0x01, 0x20, + 0xfa, 0xf7, 0xc8, 0xf9, 0x6c, 0x60, 0xb0, 0xbd, + 0x00, 0x00, 0x9c, 0x73, 0x01, 0x00, 0x3c, 0x00, + 0x54, 0x60, 0x00, 0x00, 0xf8, 0xb5, 0x2b, 0x4b, + 0xd8, 0x6a, 0x00, 0x28, 0x50, 0xd0, 0x2a, 0x48, + 0x01, 0x1c, 0xff, 0x31, 0x01, 0x31, 0xca, 0x68, + 0x01, 0x32, 0xca, 0x60, 0x1a, 0x6c, 0x00, 0x2a, + 0x02, 0xd1, 0x4a, 0x69, 0x01, 0x32, 0x4a, 0x61, + 0x0a, 0x69, 0x01, 0x32, 0x0a, 0x61, 0xda, 0x68, + 0x00, 0x2a, 0x04, 0xd0, 0x1f, 0x4a, 0x01, 0x32, + 0x12, 0x78, 0x00, 0x2a, 0x02, 0xd1, 0x8a, 0x69, + 0x3c, 0x00, 0x90, 0x60, 0x00, 0x00, 0x01, 0x32, + 0x8a, 0x61, 0x00, 0x25, 0x07, 0x1d, 0x18, 0x26, + 0x1a, 0x4a, 0x6e, 0x43, 0x74, 0x32, 0x90, 0x59, + 0x00, 0x28, 0x29, 0xd0, 0xb4, 0x18, 0x60, 0x69, + 0x00, 0x28, 0x25, 0xd1, 0x60, 0x68, 0x00, 0x28, + 0x02, 0xd0, 0x01, 0x68, 0x00, 0x29, 0x05, 0xd1, + 0xa1, 0x68, 0x00, 0x29, 0x1c, 0xd0, 0x09, 0x68, + 0x00, 0x29, 0x19, 0xd0, 0x00, 0x28, 0x05, 0xd0, + 0xe1, 0x68, 0x3c, 0x00, 0xcc, 0x60, 0x00, 0x00, + 0x01, 0x31, 0xe1, 0x60, 0x00, 0x68, 0x81, 0x42, + 0x11, 0xd3, 0xa0, 0x68, 0x00, 0x28, 0x06, 0xd0, + 0x21, 0x69, 0x00, 0x68, 0x08, 0x18, 0x0c, 0xf0, + 0xa3, 0xfd, 0x00, 0x28, 0x07, 0xd0, 0x06, 0x4a, + 0x01, 0x20, 0x60, 0x61, 0x74, 0x32, 0x91, 0x59, + 0x38, 0x1c, 0xfa, 0xf7, 0x70, 0xf9, 0x01, 0x35, + 0x02, 0x2d, 0xcb, 0xdb, 0xf8, 0xbd, 0x00, 0x00, + 0x44, 0x7d, 0x01, 0x00, 0x3c, 0x00, 0x08, 0x61, + 0x00, 0x00, 0xf4, 0x67, 0x01, 0x00, 0xf8, 0xb5, + 0x0f, 0x1c, 0x00, 0x25, 0x04, 0x1c, 0x00, 0x28, + 0x25, 0xd0, 0x20, 0x1c, 0x04, 0xf0, 0x03, 0xfe, + 0x00, 0x28, 0x06, 0xd0, 0xff, 0xf7, 0xff, 0xf8, + 0x04, 0x1c, 0xff, 0xf7, 0x50, 0xfb, 0x06, 0x1c, + 0x07, 0xe0, 0x20, 0x1c, 0xff, 0xf7, 0x91, 0xfb, + 0x06, 0x1c, 0x20, 0x1c, 0xff, 0xf7, 0x6f, 0xfb, + 0x04, 0x1c, 0x00, 0x2e, 0x06, 0xd0, 0x3c, 0x00, + 0x44, 0x61, 0x00, 0x00, 0xff, 0xf7, 0x4c, 0xfb, + 0x00, 0x28, 0x02, 0xd0, 0x01, 0x25, 0x01, 0x20, + 0x07, 0xe0, 0x00, 0x2c, 0x06, 0xd0, 0xff, 0xf7, + 0xef, 0xf8, 0x00, 0x28, 0x02, 0xd0, 0x01, 0x25, + 0x00, 0x20, 0x38, 0x60, 0x28, 0x1c, 0xf8, 0xbd, + 0xb0, 0xb5, 0xc5, 0x68, 0x04, 0x1c, 0x0d, 0xf0, + 0x8f, 0xfc, 0x20, 0x7e, 0xc1, 0x07, 0x08, 0xd5, + 0xe1, 0x68, 0xa9, 0x42, 0x05, 0xd9, 0x22, 0x69, + 0x3c, 0x00, 0x80, 0x61, 0x00, 0x00, 0x91, 0x42, + 0x02, 0xd3, 0xe1, 0x8a, 0x01, 0x31, 0xe1, 0x82, + 0x81, 0x07, 0x08, 0xd5, 0xe1, 0x68, 0xa9, 0x42, + 0x05, 0xd2, 0x22, 0x69, 0x91, 0x42, 0x02, 0xd8, + 0xe1, 0x8a, 0x01, 0x31, 0xe1, 0x82, 0x40, 0x07, + 0x06, 0xd5, 0xe0, 0x68, 0x21, 0x69, 0x88, 0x42, + 0x02, 0xd1, 0xe0, 0x8a, 0x01, 0x30, 0xe0, 0x82, + 0xe0, 0x8a, 0xa1, 0x8a, 0x88, 0x42, 0x0d, 0xd3, + 0x60, 0x7e, 0x3c, 0x00, 0xbc, 0x61, 0x00, 0x00, + 0x02, 0x28, 0x0b, 0xd0, 0x20, 0x68, 0xe1, 0x68, + 0x04, 0x22, 0x07, 0xf0, 0x65, 0xfb, 0x60, 0x7e, + 0x00, 0x28, 0x03, 0xd1, 0x20, 0x68, 0x08, 0xf0, + 0xab, 0xff, 0xb0, 0xbd, 0x00, 0x20, 0xe0, 0x82, + 0xb0, 0xbd, 0x00, 0x00, 0x70, 0xb5, 0x06, 0x1c, + 0x0c, 0x23, 0x20, 0x49, 0x58, 0x43, 0x45, 0x18, + 0x00, 0x20, 0xa8, 0x60, 0x30, 0x1c, 0x06, 0xf0, + 0x91, 0xfe, 0x04, 0x1c, 0x3c, 0x00, 0xf8, 0x61, + 0x00, 0x00, 0x68, 0x60, 0x33, 0xd0, 0x01, 0x20, + 0xa8, 0x70, 0x2c, 0x20, 0x00, 0x5d, 0x02, 0x28, + 0x03, 0xd1, 0x20, 0x1c, 0x03, 0xf0, 0x45, 0xfe, + 0x10, 0xe0, 0x61, 0x6b, 0x00, 0x29, 0x0a, 0xd0, + 0x01, 0x28, 0x04, 0xd1, 0x21, 0x1c, 0x28, 0x1c, + 0x03, 0xf0, 0x55, 0xfe, 0x06, 0xe0, 0x20, 0x1c, + 0x0a, 0xf0, 0x0d, 0xfc, 0x02, 0xe0, 0x20, 0x1c, + 0x0a, 0xf0, 0x3d, 0xfb, 0x0d, 0x48, 0x3c, 0x00, + 0x34, 0x62, 0x00, 0x00, 0x14, 0x38, 0x41, 0x68, + 0x00, 0x29, 0x10, 0xd0, 0x20, 0x1c, 0x40, 0x30, + 0x02, 0x8b, 0x12, 0x07, 0x92, 0x0f, 0x01, 0x2a, + 0x09, 0xd0, 0x80, 0x8b, 0x32, 0x02, 0x00, 0x09, + 0x00, 0x04, 0x10, 0x43, 0x81, 0x22, 0x02, 0x43, + 0x0c, 0x20, 0x0d, 0xf0, 0xb7, 0xf9, 0x0c, 0xf0, + 0xa5, 0xfd, 0x60, 0x64, 0x70, 0xbd, 0x00, 0x00, + 0x60, 0x7b, 0x01, 0x00, 0xff, 0xb5, 0x08, 0x1c, + 0x3c, 0x00, 0x70, 0x62, 0x00, 0x00, 0x11, 0x1c, + 0x0c, 0x32, 0x20, 0x24, 0x14, 0x43, 0x0c, 0x4a, + 0x83, 0xb0, 0x0c, 0xae, 0x52, 0x68, 0x60, 0xce, + 0x94, 0x70, 0x00, 0x24, 0xd4, 0x70, 0x93, 0x63, + 0x0d, 0x23, 0x40, 0x27, 0xbb, 0x52, 0x94, 0x61, + 0x14, 0x84, 0x01, 0x22, 0x02, 0x92, 0x32, 0x1c, + 0x00, 0x90, 0x01, 0x91, 0x23, 0x1c, 0x29, 0x1c, + 0x03, 0x98, 0x00, 0xf0, 0x66, 0xf9, 0x07, 0xb0, + 0xf0, 0xbd, 0x3c, 0x00, 0xac, 0x62, 0x00, 0x00, + 0xa0, 0x7e, 0x01, 0x00, 0xf8, 0xb5, 0x04, 0x1c, + 0x00, 0x27, 0x11, 0x4e, 0x1d, 0xe0, 0xe0, 0x68, + 0x00, 0x28, 0x70, 0x68, 0x0c, 0xd1, 0x80, 0x88, + 0x00, 0x07, 0x0d, 0xd1, 0x01, 0x21, 0x0c, 0x48, + 0xfb, 0xf7, 0x84, 0xf9, 0xc4, 0x60, 0xe8, 0x60, + 0x70, 0x68, 0x81, 0x88, 0x01, 0x31, 0x02, 0xe0, + 0x81, 0x88, 0x22, 0x89, 0x89, 0x18, 0x81, 0x80, + 0xe0, 0x68, 0x39, 0x1c, 0x3c, 0x00, 0xe8, 0x62, + 0x00, 0x00, 0x00, 0x28, 0x01, 0xd1, 0x71, 0x68, + 0xc9, 0x6d, 0x25, 0x1c, 0x61, 0x60, 0x04, 0x1c, + 0x00, 0x2c, 0xdf, 0xd1, 0xf8, 0xbd, 0xa0, 0x7e, + 0x01, 0x00, 0x06, 0x49, 0x10, 0xb5, 0x49, 0x68, + 0x00, 0x23, 0x05, 0xe0, 0x8a, 0x88, 0x04, 0x89, + 0x12, 0x19, 0x8a, 0x80, 0x43, 0x60, 0xc0, 0x68, + 0x00, 0x28, 0xf7, 0xd1, 0x10, 0xbd, 0xa0, 0x7e, + 0x01, 0x00, 0x10, 0xb5, 0x09, 0x49, 0x3c, 0x00, + 0x24, 0x63, 0x00, 0x00, 0x00, 0x24, 0x49, 0x68, + 0x0a, 0xe0, 0x8a, 0x88, 0x03, 0x89, 0xd2, 0x18, + 0x8a, 0x80, 0xc3, 0x68, 0x22, 0x1c, 0x00, 0x2b, + 0x00, 0xd1, 0xca, 0x6d, 0x42, 0x60, 0x18, 0x1c, + 0x00, 0x28, 0xf2, 0xd1, 0x10, 0xbd, 0x00, 0x00, + 0xa0, 0x7e, 0x01, 0x00, 0x01, 0x1c, 0x13, 0x48, + 0x10, 0xb5, 0x40, 0x68, 0x00, 0x23, 0x09, 0xe0, + 0x82, 0x88, 0x0c, 0x89, 0x12, 0x19, 0x82, 0x80, + 0x3c, 0x00, 0x60, 0x63, 0x00, 0x00, 0x4b, 0x60, + 0xca, 0x68, 0x00, 0x2a, 0x00, 0xd1, 0x41, 0x66, + 0xc9, 0x68, 0x00, 0x29, 0xf3, 0xd1, 0x01, 0x1c, + 0x68, 0x31, 0x81, 0x64, 0xc3, 0x64, 0x43, 0x65, + 0x82, 0x88, 0x08, 0x23, 0x11, 0x1c, 0x08, 0x31, + 0x89, 0x07, 0x89, 0x0f, 0x59, 0x1a, 0x50, 0x23, + 0x19, 0x52, 0x51, 0x18, 0x81, 0x80, 0x01, 0x1c, + 0x40, 0x6e, 0x48, 0x31, 0xc1, 0x60, 0x10, 0xbd, + 0x00, 0x00, 0x3c, 0x00, 0x9c, 0x63, 0x00, 0x00, + 0xa0, 0x7e, 0x01, 0x00, 0x10, 0xb5, 0x07, 0x49, + 0x00, 0x24, 0x4b, 0x68, 0x06, 0xe0, 0xc2, 0x68, + 0x21, 0x1c, 0x00, 0x2a, 0x00, 0xd1, 0xd9, 0x6d, + 0x41, 0x60, 0x10, 0x1c, 0x00, 0x28, 0xf6, 0xd1, + 0x10, 0xbd, 0x00, 0x00, 0xa0, 0x7e, 0x01, 0x00, + 0x70, 0x47, 0x00, 0x00, 0xfe, 0xb5, 0x06, 0x1c, + 0x0c, 0x48, 0x0c, 0x1c, 0x40, 0x68, 0x80, 0x21, + 0x81, 0x70, 0x00, 0x21, 0x3c, 0x00, 0xd8, 0x63, + 0x00, 0x00, 0xc1, 0x70, 0x15, 0x1c, 0x40, 0x22, + 0x81, 0x63, 0x11, 0x52, 0x81, 0x61, 0x01, 0x84, + 0x00, 0x20, 0x04, 0x22, 0x02, 0x92, 0x00, 0x90, + 0x01, 0x91, 0x29, 0x1c, 0x20, 0x1c, 0x1a, 0x1c, + 0x33, 0x1c, 0x00, 0xf0, 0xbc, 0xf8, 0xfe, 0xbd, + 0x00, 0x00, 0xa0, 0x7e, 0x01, 0x00, 0x70, 0xb5, + 0x06, 0x1c, 0x17, 0x48, 0x80, 0x78, 0x02, 0x21, + 0x16, 0x4a, 0x88, 0x43, 0x90, 0x70, 0x3c, 0x00, + 0x14, 0x64, 0x00, 0x00, 0x10, 0x1c, 0x80, 0x78, + 0x08, 0x43, 0x11, 0x1c, 0x88, 0x70, 0x13, 0x48, + 0x00, 0x24, 0xc4, 0x70, 0x70, 0x20, 0xfb, 0xf7, + 0xd9, 0xf9, 0x11, 0x4d, 0x70, 0x21, 0x68, 0x60, + 0xfa, 0xf7, 0x34, 0xf8, 0x30, 0x07, 0x00, 0x0f, + 0x69, 0x68, 0x90, 0x30, 0xc8, 0x65, 0x0d, 0x48, + 0x68, 0x22, 0x08, 0x80, 0x08, 0x1c, 0x28, 0x30, + 0x89, 0x60, 0x48, 0x61, 0x08, 0x20, 0x08, 0x82, + 0x3c, 0x00, 0x50, 0x64, 0x00, 0x00, 0x08, 0x1c, + 0x38, 0x30, 0x48, 0x63, 0x20, 0x38, 0x48, 0x64, + 0x5a, 0x20, 0x50, 0x54, 0x06, 0x48, 0x08, 0x31, + 0x41, 0x64, 0x44, 0x65, 0x70, 0xbd, 0x00, 0x00, + 0x07, 0x00, 0x58, 0x00, 0x07, 0x00, 0xa0, 0x7e, + 0x01, 0x00, 0xde, 0xc0, 0x00, 0x00, 0x00, 0x30, + 0x07, 0x00, 0x0a, 0x4b, 0x10, 0xb5, 0x58, 0x6d, + 0x0a, 0x49, 0x00, 0x22, 0x49, 0x68, 0x00, 0x24, + 0x4a, 0x62, 0x3c, 0x00, 0x8c, 0x64, 0x00, 0x00, + 0x5c, 0x65, 0x4b, 0x6e, 0x00, 0x2b, 0x01, 0xd0, + 0xda, 0x60, 0x4a, 0x66, 0x8b, 0x6d, 0x00, 0x2b, + 0x03, 0xd0, 0x0a, 0x6e, 0x00, 0x21, 0xf9, 0xf7, + 0x9c, 0xff, 0x10, 0xbd, 0x00, 0x30, 0x07, 0x00, + 0xa0, 0x7e, 0x01, 0x00, 0x09, 0x49, 0x10, 0xb5, + 0x08, 0x88, 0x01, 0x30, 0x08, 0x80, 0x01, 0x20, + 0x07, 0x49, 0x80, 0x02, 0x08, 0x60, 0x07, 0x4c, + 0xa2, 0x6d, 0x00, 0x2a, 0x3c, 0x00, 0xc8, 0x64, + 0x00, 0x00, 0x05, 0xd0, 0x05, 0x21, 0xd1, 0x20, + 0x0d, 0xf0, 0x6f, 0xf9, 0x01, 0x20, 0xa0, 0x65, + 0x10, 0xbd, 0xb0, 0x74, 0x01, 0x00, 0x00, 0x10, + 0x07, 0x00, 0x00, 0x30, 0x07, 0x00, 0xff, 0xb5, + 0x83, 0xb0, 0x0c, 0xae, 0x86, 0x46, 0x8c, 0x46, + 0x0e, 0x4a, 0x43, 0xce, 0x0f, 0xad, 0x0f, 0x1c, + 0x52, 0x68, 0x0c, 0x37, 0x30, 0xcd, 0x97, 0x70, + 0xd3, 0x70, 0x96, 0x63, 0x0d, 0x26, 0x3c, 0x00, + 0x04, 0x65, 0x00, 0x00, 0x40, 0x27, 0xbe, 0x52, + 0x05, 0x9e, 0x96, 0x61, 0x13, 0x84, 0x00, 0x22, + 0x02, 0x92, 0x2a, 0x1c, 0x00, 0x90, 0x01, 0x91, + 0x21, 0x1c, 0x60, 0x46, 0x73, 0x46, 0x00, 0xf0, + 0x29, 0xf8, 0x07, 0xb0, 0xf0, 0xbd, 0x00, 0x00, + 0xa0, 0x7e, 0x01, 0x00, 0xff, 0xb5, 0x10, 0x1c, + 0x1a, 0x1c, 0x0c, 0x1c, 0x19, 0x1c, 0x60, 0x23, + 0xff, 0x32, 0x13, 0x43, 0x0c, 0x4a, 0x83, 0xb0, + 0x3c, 0x00, 0x40, 0x65, 0x00, 0x00, 0x0c, 0xae, + 0x52, 0x68, 0x60, 0xce, 0x93, 0x70, 0x00, 0x23, + 0xd3, 0x70, 0x93, 0x63, 0x40, 0x27, 0xbb, 0x52, + 0x93, 0x61, 0x13, 0x84, 0x03, 0x22, 0x02, 0x92, + 0x01, 0x91, 0x29, 0x1c, 0x32, 0x1c, 0x00, 0x90, + 0x20, 0x1c, 0x03, 0x9b, 0x00, 0xf0, 0x05, 0xf8, + 0x07, 0xb0, 0xf0, 0xbd, 0x00, 0x00, 0xa0, 0x7e, + 0x01, 0x00, 0xf8, 0xb5, 0x05, 0x1c, 0x11, 0x48, + 0x1c, 0x1c, 0x3c, 0x00, 0x7c, 0x65, 0x00, 0x00, + 0x08, 0x9b, 0x07, 0x9f, 0x40, 0x68, 0xde, 0x00, + 0x81, 0x65, 0x02, 0x66, 0x00, 0x21, 0x81, 0x80, + 0x0d, 0x48, 0x81, 0x59, 0x20, 0x1c, 0xf9, 0xf7, + 0x22, 0xff, 0x0b, 0x48, 0x30, 0x18, 0x41, 0x68, + 0x28, 0x1c, 0xf9, 0xf7, 0x1c, 0xff, 0x07, 0x49, + 0x06, 0x98, 0x49, 0x68, 0x00, 0x2c, 0x88, 0x62, + 0x0f, 0x86, 0x00, 0xd1, 0x2c, 0x1c, 0x05, 0x48, + 0x4c, 0x62, 0x45, 0x65, 0x3c, 0x00, 0xb8, 0x65, + 0x00, 0x00, 0x01, 0x21, 0x01, 0x65, 0x01, 0x64, + 0xf8, 0xbd, 0xa0, 0x7e, 0x01, 0x00, 0x90, 0x52, + 0x01, 0x00, 0x00, 0x30, 0x07, 0x00, 0xff, 0xb5, + 0x83, 0xb0, 0x0d, 0xae, 0x60, 0xce, 0x0c, 0x9f, + 0x08, 0x1c, 0x11, 0x1c, 0xd2, 0x19, 0xff, 0x32, + 0x40, 0x24, 0x14, 0x43, 0x0b, 0x4a, 0x52, 0x68, + 0x94, 0x70, 0x00, 0x24, 0xd4, 0x70, 0x93, 0x63, + 0x40, 0x23, 0x9f, 0x52, 0x94, 0x61, 0x3c, 0x00, + 0xf4, 0x65, 0x00, 0x00, 0x14, 0x84, 0x02, 0x22, + 0x02, 0x92, 0x32, 0x1c, 0x00, 0x90, 0x01, 0x91, + 0x23, 0x1c, 0x29, 0x1c, 0x03, 0x98, 0xff, 0xf7, + 0xb5, 0xff, 0x07, 0xb0, 0xf0, 0xbd, 0x00, 0x00, + 0xa0, 0x7e, 0x01, 0x00, 0x4c, 0x21, 0x0d, 0x4a, + 0x41, 0x43, 0x10, 0xb5, 0x8c, 0x18, 0x0c, 0x49, + 0x09, 0x78, 0x88, 0x42, 0x07, 0xd1, 0x05, 0xf0, + 0xc7, 0xfd, 0x0a, 0x48, 0x01, 0x88, 0x01, 0x22, + 0x3c, 0x00, 0x30, 0x66, 0x00, 0x00, 0x12, 0x03, + 0x91, 0x43, 0x01, 0x80, 0x20, 0x1c, 0x30, 0x30, + 0x0c, 0x23, 0xc1, 0x56, 0x40, 0x7b, 0x81, 0x42, + 0x02, 0xdd, 0x20, 0x8d, 0x0c, 0xf0, 0xe5, 0xfb, + 0x10, 0xbd, 0x58, 0xe3, 0x01, 0x00, 0x3c, 0x7c, + 0x01, 0x00, 0x32, 0x80, 0x07, 0x00, 0x01, 0x1c, + 0x60, 0x31, 0x80, 0xb5, 0xca, 0x79, 0x8b, 0x79, + 0x9a, 0x42, 0x07, 0xd9, 0x48, 0x7a, 0x0c, 0x23, + 0x07, 0x49, 0x3c, 0x00, 0x6c, 0x66, 0x00, 0x00, + 0x58, 0x43, 0x08, 0x5a, 0x0c, 0xf0, 0xd0, 0xfb, + 0x80, 0xbd, 0x20, 0x30, 0x00, 0x7b, 0x01, 0x28, + 0xfa, 0xd1, 0x48, 0x7a, 0x05, 0xf0, 0x40, 0xfd, + 0x80, 0xbd, 0x00, 0x00, 0x60, 0x7b, 0x01, 0x00, + 0x10, 0xb5, 0x04, 0x1c, 0x1c, 0x21, 0xf9, 0xf7, + 0x03, 0xff, 0x03, 0x48, 0xa0, 0x80, 0xe0, 0x80, + 0x20, 0x81, 0x60, 0x81, 0xa0, 0x81, 0x10, 0xbd, + 0xff, 0xff, 0x00, 0x00, 0x3c, 0x00, 0xa8, 0x66, + 0x00, 0x00, 0xff, 0xb5, 0x04, 0x1c, 0x00, 0x20, + 0x83, 0xb0, 0x0d, 0x1c, 0x06, 0x2c, 0x02, 0x90, + 0x38, 0xd2, 0x1f, 0x4a, 0xff, 0x26, 0xc1, 0x00, + 0x89, 0x18, 0x89, 0x78, 0xa1, 0x42, 0x03, 0xd1, + 0xc0, 0x00, 0x80, 0x18, 0x46, 0x78, 0x04, 0xe0, + 0x01, 0x30, 0x00, 0x06, 0x00, 0x16, 0x06, 0x28, + 0xf1, 0xdb, 0xff, 0x2e, 0x24, 0xd0, 0x01, 0x93, + 0x20, 0x1c, 0x0d, 0xf0, 0xe8, 0xf9, 0x3c, 0x00, + 0xe4, 0x66, 0x00, 0x00, 0x00, 0x28, 0x05, 0xd0, + 0x24, 0x21, 0x28, 0x1c, 0x01, 0xab, 0x02, 0xaa, + 0xfa, 0xf7, 0x30, 0xfe, 0x10, 0x49, 0xf0, 0x00, + 0x30, 0x39, 0x0f, 0x58, 0x31, 0x06, 0x09, 0x16, + 0x28, 0x1c, 0x05, 0x9a, 0x01, 0x9b, 0xf9, 0xf7, + 0x6e, 0xfe, 0x06, 0x1c, 0x10, 0xd1, 0x20, 0x1c, + 0x0d, 0xf0, 0xd0, 0xf9, 0x00, 0x28, 0x0b, 0xd0, + 0x28, 0x1c, 0x69, 0x69, 0xfa, 0xf7, 0x12, 0xfe, + 0x3c, 0x00, 0x20, 0x67, 0x00, 0x00, 0x02, 0x98, + 0x68, 0x61, 0x04, 0xe0, 0x06, 0x2c, 0x01, 0xd3, + 0x07, 0x26, 0x00, 0xe0, 0x08, 0x26, 0x30, 0x1c, + 0x07, 0xb0, 0xf0, 0xbd, 0x00, 0x00, 0xcc, 0x5a, + 0x01, 0x00, 0x10, 0xb5, 0x0c, 0x1c, 0x09, 0xf0, + 0x86, 0xf8, 0x00, 0x28, 0x02, 0xd0, 0x20, 0x1c, + 0x09, 0xf0, 0xb5, 0xf8, 0x10, 0xbd, 0xfe, 0xb5, + 0x13, 0x4d, 0x04, 0x1c, 0xae, 0x69, 0x00, 0x2e, + 0x1c, 0xd0, 0x3c, 0x00, 0x5c, 0x67, 0x00, 0x00, + 0x10, 0x4f, 0x30, 0x37, 0x78, 0x68, 0x60, 0x43, + 0x01, 0x1c, 0x28, 0x88, 0xf9, 0xf7, 0xd2, 0xff, + 0x39, 0x68, 0x61, 0x43, 0x41, 0x18, 0x01, 0xa8, + 0x32, 0x1c, 0xf9, 0xf7, 0x37, 0xfe, 0x02, 0x98, + 0x29, 0x6a, 0x40, 0x18, 0x28, 0x62, 0x0b, 0xd4, + 0xe9, 0x69, 0x88, 0x42, 0x08, 0xd9, 0xa9, 0x69, + 0x40, 0x1a, 0x28, 0x62, 0x01, 0x98, 0x01, 0x30, + 0x01, 0xe0, 0x00, 0x20, 0x3c, 0x00, 0x98, 0x67, + 0x00, 0x00, 0x02, 0x90, 0x01, 0x90, 0x01, 0x98, + 0xfe, 0xbd, 0xc8, 0x74, 0x01, 0x00, 0xf8, 0xb5, + 0x00, 0x28, 0x28, 0xd0, 0x00, 0x24, 0x14, 0x4d, + 0x00, 0xe0, 0x01, 0x34, 0x61, 0x00, 0x09, 0x19, + 0x49, 0x19, 0x49, 0x78, 0x00, 0x29, 0xf8, 0xd1, + 0x63, 0x00, 0x1b, 0x19, 0x03, 0x33, 0x07, 0x22, + 0x69, 0x46, 0x03, 0xf0, 0xd4, 0xfb, 0x00, 0x2c, + 0x0f, 0xd0, 0x00, 0x20, 0x00, 0x99, 0x3c, 0x00, + 0xd4, 0x67, 0x00, 0x00, 0x0a, 0xe0, 0x42, 0x00, + 0x12, 0x18, 0xae, 0x5c, 0x53, 0x18, 0x52, 0x19, + 0x5e, 0x71, 0x56, 0x78, 0x01, 0x30, 0x9e, 0x71, + 0x92, 0x78, 0xda, 0x71, 0xa0, 0x42, 0xf2, 0xdb, + 0x00, 0x98, 0x03, 0x22, 0x02, 0x30, 0x03, 0x49, + 0xf9, 0xf7, 0x7e, 0xfe, 0xf8, 0xbd, 0x00, 0x00, + 0xeb, 0x62, 0x01, 0x00, 0xe8, 0x62, 0x01, 0x00, + 0xb0, 0xb5, 0x05, 0x1c, 0x08, 0x1c, 0xfa, 0xf7, + 0x3c, 0x00, 0x10, 0x68, 0x00, 0x00, 0x9d, 0xff, + 0x04, 0x1c, 0x28, 0x1c, 0xfa, 0xf7, 0xd9, 0xfe, + 0x21, 0x1c, 0xfa, 0xf7, 0xfc, 0xfd, 0x20, 0x1c, + 0xb0, 0xbd, 0xf3, 0xb5, 0x44, 0x48, 0x0c, 0x1c, + 0x00, 0x78, 0x81, 0xb0, 0x01, 0x28, 0x72, 0xd1, + 0xfa, 0xf7, 0x82, 0xf8, 0x41, 0x4d, 0xe8, 0x6a, + 0x41, 0x49, 0x08, 0x60, 0xe8, 0x6b, 0x48, 0x60, + 0x40, 0x48, 0xfa, 0xf7, 0xa6, 0xf9, 0xe8, 0x6a, + 0x00, 0x28, 0x3c, 0x00, 0x4c, 0x68, 0x00, 0x00, + 0xfc, 0xda, 0x22, 0x1c, 0x0f, 0x20, 0x01, 0x99, + 0x0a, 0xf0, 0xa4, 0xf8, 0x38, 0x4d, 0x02, 0x27, + 0x2f, 0x63, 0x38, 0x4a, 0x64, 0x26, 0x00, 0x20, + 0xaa, 0x21, 0x08, 0x32, 0x13, 0x18, 0x01, 0x30, + 0x00, 0x04, 0x00, 0x0c, 0x64, 0x28, 0x19, 0x74, + 0xf8, 0xd3, 0x16, 0x81, 0x00, 0x20, 0x50, 0x60, + 0x10, 0x1c, 0x10, 0x30, 0x10, 0x60, 0x00, 0x25, + 0x17, 0x1c, 0xd2, 0x60, 0x3c, 0x00, 0x88, 0x68, + 0x00, 0x00, 0x08, 0xe0, 0x28, 0x1c, 0xf9, 0xf7, + 0xa2, 0xff, 0x41, 0x31, 0x78, 0x19, 0x01, 0x35, + 0x2d, 0x04, 0x2d, 0x0c, 0x01, 0x74, 0xb5, 0x42, + 0xf4, 0xd3, 0x26, 0x4d, 0x6f, 0x63, 0x01, 0x20, + 0x28, 0x63, 0x24, 0x4d, 0xe8, 0x6a, 0x00, 0x28, + 0xfb, 0xda, 0x0b, 0x22, 0x3b, 0x1c, 0x24, 0x4e, + 0x03, 0xe0, 0x01, 0x32, 0x64, 0x2a, 0x00, 0xd1, + 0x00, 0x22, 0x10, 0x1c, 0x0c, 0x21, 0x3c, 0x00, + 0xc4, 0x68, 0x00, 0x00, 0x01, 0x39, 0x75, 0x5c, + 0x1f, 0x18, 0x3f, 0x7c, 0xbd, 0x42, 0xf3, 0xd1, + 0x01, 0x38, 0x00, 0xd5, 0x63, 0x20, 0x00, 0x29, + 0xf4, 0xd1, 0x18, 0x4e, 0x50, 0x1c, 0xf1, 0x6b, + 0x1a, 0x4a, 0x10, 0x1c, 0x01, 0x38, 0xfd, 0xd1, + 0xf0, 0x6b, 0x88, 0x42, 0x01, 0xd0, 0x01, 0x1c, + 0xf7, 0xe7, 0x02, 0x27, 0x37, 0x63, 0x16, 0x4d, + 0x90, 0x21, 0x28, 0x1c, 0xf9, 0xf7, 0xce, 0xfd, + 0x3c, 0x00, 0x00, 0x69, 0x00, 0x00, 0x28, 0x1c, + 0x28, 0x30, 0x28, 0x60, 0x28, 0x1c, 0x10, 0x30, + 0x2f, 0x81, 0xe8, 0x60, 0x28, 0x1c, 0x20, 0x30, + 0x28, 0x61, 0x04, 0x21, 0x00, 0xe0, 0x0c, 0xe0, + 0x29, 0x83, 0xe8, 0x61, 0xed, 0x62, 0x75, 0x63, + 0x01, 0x20, 0x30, 0x63, 0x22, 0x1c, 0x89, 0x20, + 0x01, 0x99, 0x0a, 0xf0, 0x38, 0xf8, 0x00, 0x20, + 0x28, 0x63, 0xfe, 0xbd, 0x00, 0x00, 0x08, 0x57, + 0x01, 0x00, 0x3c, 0x00, 0x3c, 0x69, 0x00, 0x00, + 0x00, 0x30, 0x07, 0x00, 0x10, 0x8e, 0x01, 0x00, + 0x74, 0xff, 0x01, 0x00, 0x09, 0x57, 0x01, 0x00, + 0x20, 0x4e, 0x00, 0x00, 0xe4, 0xfe, 0x01, 0x00, + 0x80, 0xb5, 0x13, 0x28, 0x1e, 0xd0, 0xf0, 0x28, + 0x16, 0xd1, 0x09, 0xf0, 0xb5, 0xf9, 0x00, 0x28, + 0x13, 0xd1, 0x0d, 0xf0, 0xbf, 0xfa, 0x11, 0xf0, + 0x0d, 0xfc, 0x00, 0x22, 0x04, 0x21, 0xc4, 0x20, + 0x0c, 0xf0, 0x1c, 0xff, 0x3c, 0x00, 0x78, 0x69, + 0x00, 0x00, 0x09, 0x48, 0x00, 0x21, 0x00, 0x78, + 0x05, 0xf0, 0x3f, 0xfd, 0x05, 0xf0, 0x93, 0xf8, + 0x07, 0x49, 0x01, 0x20, 0x08, 0x60, 0x80, 0xbd, + 0x01, 0x1c, 0x01, 0x20, 0xfa, 0xf7, 0x87, 0xfc, + 0x80, 0xbd, 0x00, 0xf0, 0x32, 0xf8, 0x80, 0xbd, + 0x00, 0x00, 0x6a, 0x57, 0x01, 0x00, 0x3c, 0xd9, + 0x01, 0x00, 0xb0, 0xb5, 0x0c, 0xf0, 0xff, 0xf9, + 0x0b, 0x49, 0x02, 0x24, 0x48, 0x60, 0x3c, 0x00, + 0xb4, 0x69, 0x00, 0x00, 0x0a, 0x48, 0x04, 0x61, + 0x01, 0x20, 0x77, 0x21, 0x09, 0x03, 0x08, 0x61, + 0x08, 0x4d, 0x68, 0x68, 0x80, 0x07, 0x02, 0xd4, + 0x68, 0x68, 0x20, 0x43, 0x68, 0x60, 0x09, 0xf0, + 0xc7, 0xf9, 0x68, 0x68, 0xa0, 0x43, 0x68, 0x60, + 0x00, 0x20, 0xb0, 0xbd, 0xe0, 0x60, 0x01, 0x00, + 0x00, 0x30, 0x07, 0x00, 0x00, 0x01, 0x07, 0x00, + 0x80, 0xb5, 0x01, 0x23, 0x03, 0x22, 0x00, 0x21, + 0x3c, 0x00, 0xf0, 0x69, 0x00, 0x00, 0x02, 0x20, + 0x3c, 0xf0, 0xf1, 0xfa, 0x00, 0x28, 0x01, 0xd0, + 0xfa, 0xf7, 0x81, 0xfc, 0x80, 0xbd, 0x1c, 0xb5, + 0xfc, 0xf7, 0xf5, 0xfa, 0xfa, 0xf7, 0x19, 0xfe, + 0x01, 0xf0, 0x03, 0xf9, 0x00, 0x24, 0x21, 0x1c, + 0x68, 0x46, 0x01, 0xf0, 0xe2, 0xfb, 0x00, 0xab, + 0x18, 0x78, 0x01, 0x28, 0x03, 0xd0, 0x02, 0x28, + 0x01, 0xd0, 0x03, 0x28, 0x01, 0xd1, 0x0c, 0xf0, + 0xb2, 0xfc, 0x3c, 0x00, 0x2c, 0x6a, 0x00, 0x00, + 0x01, 0x34, 0x24, 0x06, 0x24, 0x16, 0x06, 0x2c, + 0xec, 0xdb, 0xfa, 0xf7, 0x09, 0xf9, 0xfa, 0xf7, + 0xe7, 0xfc, 0xfa, 0xf7, 0x33, 0xfa, 0xfa, 0xf7, + 0x6d, 0xfa, 0xfb, 0xf7, 0xdf, 0xff, 0x05, 0xf0, + 0x4d, 0xfb, 0x06, 0xf0, 0x81, 0xfc, 0x0b, 0xf0, + 0x7d, 0xf9, 0x07, 0xf0, 0x29, 0xfc, 0x11, 0x48, + 0x10, 0x21, 0x01, 0x60, 0x09, 0x01, 0x01, 0x60, + 0xc9, 0x02, 0x01, 0x60, 0x3c, 0x00, 0x68, 0x6a, + 0x00, 0x00, 0x89, 0x00, 0x01, 0x60, 0x20, 0x21, + 0x01, 0x60, 0x04, 0x21, 0x01, 0x60, 0x08, 0x21, + 0x01, 0x60, 0x40, 0x21, 0x01, 0x60, 0x80, 0x21, + 0x01, 0x60, 0x89, 0x00, 0x01, 0x60, 0x49, 0x00, + 0x01, 0x60, 0x49, 0x00, 0x01, 0x60, 0x49, 0x00, + 0x01, 0x60, 0xc9, 0x03, 0x01, 0x60, 0x89, 0x0b, + 0x01, 0x60, 0xf9, 0xf7, 0x41, 0xff, 0x1c, 0xbd, + 0x00, 0x00, 0x00, 0x10, 0x07, 0x00, 0x3c, 0x00, + 0xa4, 0x6a, 0x00, 0x00, 0x80, 0xb5, 0x3b, 0xf0, + 0x4f, 0xf8, 0x3b, 0xf0, 0x7d, 0xf9, 0xfa, 0xf7, + 0x4b, 0xf9, 0x80, 0xbd, 0xf8, 0xb5, 0x00, 0x25, + 0x00, 0x24, 0x00, 0x22, 0x00, 0x28, 0x71, 0xd0, + 0x43, 0x4f, 0xb9, 0x68, 0x0b, 0x1a, 0xbb, 0x60, + 0xf8, 0x68, 0x39, 0x1c, 0x01, 0x30, 0xf8, 0x60, + 0x89, 0x6a, 0x00, 0x2b, 0x1e, 0xdc, 0x02, 0x24, + 0x00, 0x29, 0x06, 0xda, 0xfb, 0x69, 0x98, 0x42, + 0x3c, 0x00, 0xe0, 0x6a, 0x00, 0x00, 0x06, 0xdd, + 0x3b, 0x69, 0x98, 0x42, 0x09, 0xdd, 0x07, 0xe0, + 0xbb, 0x69, 0x98, 0x42, 0x01, 0xdc, 0x01, 0x24, + 0x03, 0xe0, 0x7b, 0x69, 0x98, 0x42, 0x00, 0xdd, + 0x03, 0x24, 0x78, 0x6a, 0x00, 0x28, 0x08, 0xd0, + 0x00, 0x20, 0x78, 0x62, 0x03, 0x2c, 0x01, 0xd1, + 0x02, 0x24, 0x02, 0xe0, 0x02, 0x2c, 0x00, 0xd1, + 0x01, 0x24, 0x2e, 0x48, 0x01, 0x2c, 0x00, 0x79, + 0x18, 0xd1, 0x3c, 0x00, 0x1c, 0x6b, 0x00, 0x00, + 0xbb, 0x78, 0x99, 0x42, 0x15, 0xda, 0x3b, 0x78, + 0x7b, 0x70, 0x39, 0x70, 0x01, 0x31, 0xb9, 0x62, + 0x01, 0xd5, 0x01, 0x31, 0xb9, 0x62, 0xb9, 0x6a, + 0x01, 0x25, 0x99, 0x42, 0x03, 0xd1, 0x04, 0x28, + 0x04, 0xd2, 0x01, 0x30, 0x00, 0xe0, 0x00, 0x20, + 0x38, 0x71, 0x01, 0x22, 0x00, 0x29, 0x33, 0xda, + 0x27, 0xe0, 0x03, 0x2c, 0x35, 0xd1, 0x00, 0x26, + 0x00, 0x28, 0x07, 0xd0, 0x3c, 0x00, 0x58, 0x6b, + 0x00, 0x00, 0x1e, 0x49, 0x81, 0x40, 0x38, 0x6a, + 0x08, 0x18, 0x0c, 0xf0, 0x5c, 0xf8, 0x00, 0x28, + 0x2c, 0xd0, 0x1b, 0x48, 0x00, 0x78, 0x40, 0x07, + 0x05, 0xd5, 0xf8, 0x68, 0x39, 0x69, 0x88, 0x42, + 0x01, 0xdb, 0x03, 0x23, 0xfe, 0x56, 0xb8, 0x6a, + 0xb0, 0x42, 0x12, 0xdd, 0x01, 0x21, 0x79, 0x62, + 0x39, 0x78, 0x01, 0x25, 0x79, 0x70, 0x38, 0x70, + 0x01, 0x38, 0xb8, 0x62, 0x88, 0x42, 0x3c, 0x00, + 0x94, 0x6b, 0x00, 0x00, 0x01, 0xd0, 0x00, 0x21, + 0x39, 0x71, 0x00, 0x28, 0x0c, 0xda, 0x07, 0x20, + 0x38, 0x71, 0x00, 0xe0, 0x12, 0xe0, 0x07, 0xe0, + 0x38, 0x79, 0x00, 0x28, 0x09, 0xd0, 0xff, 0x30, + 0x38, 0x71, 0x06, 0xe0, 0x00, 0x2a, 0x02, 0xd0, + 0x0c, 0xf0, 0xf8, 0xf8, 0x38, 0x62, 0x00, 0x2c, + 0x04, 0xd0, 0xfe, 0xf7, 0x97, 0xfd, 0x29, 0x1c, + 0x08, 0xf0, 0xfc, 0xfb, 0xf8, 0xbd, 0x00, 0x00, + 0x3c, 0x00, 0xd0, 0x6b, 0x00, 0x00, 0xac, 0x7e, + 0x01, 0x00, 0x50, 0xc3, 0x00, 0x00, 0x1d, 0x75, + 0x01, 0x00, 0x80, 0xb5, 0x10, 0x68, 0x00, 0x28, + 0x02, 0xd0, 0x00, 0xf0, 0x0a, 0xf8, 0x80, 0xbd, + 0x03, 0x48, 0xc0, 0x69, 0x80, 0x68, 0x08, 0xf0, + 0xb2, 0xf9, 0x80, 0xbd, 0x00, 0x00, 0x84, 0x6a, + 0x01, 0x00, 0x10, 0xb5, 0x04, 0x1c, 0xc0, 0x68, + 0xc0, 0x68, 0x00, 0x28, 0x01, 0xd1, 0xfa, 0xf7, + 0x7a, 0xfb, 0x3c, 0x00, 0x0c, 0x6c, 0x00, 0x00, + 0xe0, 0x68, 0xe1, 0x69, 0xc0, 0x68, 0x23, 0x1c, + 0x01, 0x4a, 0xff, 0xf7, 0xd7, 0xfb, 0x10, 0xbd, + 0xdd, 0x6b, 0x00, 0x00, 0xb0, 0xb5, 0x05, 0x1c, + 0x0c, 0x21, 0x00, 0x20, 0xfa, 0xf7, 0xd6, 0xfc, + 0x04, 0x1c, 0x00, 0x68, 0x00, 0x21, 0x41, 0x60, + 0x01, 0x60, 0x29, 0x88, 0x01, 0x81, 0x69, 0x88, + 0x41, 0x81, 0x29, 0x1c, 0xff, 0x31, 0x21, 0x31, + 0x20, 0x1c, 0x03, 0xf0, 0x3c, 0x00, 0x48, 0x6c, + 0x00, 0x00, 0x77, 0xf9, 0x29, 0x1c, 0xff, 0x31, + 0x46, 0x31, 0x20, 0x1c, 0x03, 0xf0, 0x71, 0xf9, + 0x29, 0x1c, 0xff, 0x31, 0x50, 0x31, 0x20, 0x1c, + 0x03, 0xf0, 0x6b, 0xf9, 0x29, 0x1c, 0xff, 0x31, + 0x43, 0x31, 0x20, 0x1c, 0x03, 0xf0, 0x65, 0xf9, + 0x29, 0x1c, 0xff, 0x31, 0x63, 0x31, 0x20, 0x1c, + 0x03, 0xf0, 0x5f, 0xf9, 0x04, 0x48, 0x00, 0x68, + 0x00, 0x28, 0x02, 0xd0, 0x20, 0x1c, 0x3c, 0x00, + 0x84, 0x6c, 0x00, 0x00, 0xff, 0xf7, 0x8e, 0xfd, + 0x20, 0x1c, 0xb0, 0xbd, 0xe4, 0x62, 0x01, 0x00, + 0xf8, 0xb5, 0x05, 0x1c, 0x0c, 0x1c, 0x04, 0xd1, + 0x05, 0x21, 0x18, 0x20, 0xfa, 0xf7, 0x02, 0xfb, + 0x4d, 0xe0, 0x29, 0x1c, 0x12, 0x31, 0x06, 0x22, + 0x60, 0x1c, 0xf9, 0xf7, 0x25, 0xfc, 0x22, 0x1c, + 0x30, 0x32, 0x00, 0x26, 0x00, 0x21, 0x00, 0x20, + 0x16, 0x70, 0x34, 0x4b, 0x1b, 0x5c, 0x2f, 0x8a, + 0x3c, 0x00, 0xc0, 0x6c, 0x00, 0x00, 0xdf, 0x40, + 0xff, 0x07, 0x07, 0xd5, 0x17, 0x78, 0x01, 0x33, + 0x01, 0x37, 0x17, 0x70, 0x67, 0x18, 0x30, 0x37, + 0x7b, 0x70, 0x01, 0x31, 0x01, 0x30, 0x0e, 0x28, + 0xee, 0xdb, 0xa8, 0x7b, 0x60, 0x72, 0x10, 0x78, + 0x00, 0x28, 0x2b, 0xd0, 0x2a, 0x48, 0x1e, 0x21, + 0x09, 0x5c, 0x27, 0x1c, 0x10, 0x37, 0x21, 0x72, + 0x01, 0x68, 0x61, 0x81, 0xc1, 0x89, 0x21, 0x77, + 0x81, 0x89, 0x3c, 0x00, 0xfc, 0x6c, 0x00, 0x00, + 0x79, 0x73, 0xc1, 0x8a, 0xa1, 0x81, 0x01, 0x8b, + 0xe1, 0x81, 0x42, 0x8a, 0x21, 0x1c, 0x60, 0x31, + 0x4a, 0x80, 0x82, 0x8a, 0x8a, 0x80, 0x1f, 0x49, + 0x2c, 0x31, 0x09, 0x7a, 0x00, 0x29, 0x09, 0xd0, + 0x02, 0x29, 0x0a, 0xd1, 0x01, 0x22, 0x62, 0x62, + 0x62, 0x72, 0x42, 0x8b, 0xa2, 0x81, 0x80, 0x8b, + 0xe0, 0x81, 0x03, 0xe0, 0x01, 0x21, 0x66, 0x62, + 0x00, 0xe0, 0x00, 0x21, 0x3c, 0x00, 0x38, 0x6d, + 0x00, 0x00, 0xe8, 0x7b, 0x08, 0x40, 0x01, 0xd1, + 0x00, 0x20, 0xf8, 0xbd, 0xa8, 0x68, 0x43, 0x1c, + 0x09, 0xd0, 0x22, 0x1c, 0x12, 0x32, 0x00, 0x92, + 0x93, 0x1d, 0x02, 0x32, 0x21, 0x1c, 0x01, 0xf0, + 0x9c, 0xfa, 0xa0, 0x62, 0x00, 0xe0, 0xa6, 0x62, + 0x68, 0x7b, 0x29, 0x1c, 0x1d, 0x31, 0x20, 0x74, + 0x0b, 0x48, 0x20, 0x22, 0x20, 0x62, 0x20, 0x1c, + 0x42, 0x30, 0xbe, 0x73, 0xf9, 0xf7, 0x3c, 0x00, + 0x74, 0x6d, 0x00, 0x00, 0xc1, 0xfb, 0x40, 0x34, + 0x26, 0x70, 0x68, 0x7e, 0x04, 0x49, 0x60, 0x70, + 0x68, 0x68, 0x2c, 0x31, 0x48, 0x60, 0x01, 0x20, + 0xda, 0xe7, 0x00, 0x00, 0x90, 0x58, 0x01, 0x00, + 0xc8, 0x6e, 0x01, 0x00, 0x91, 0x02, 0x01, 0x00, + 0x70, 0xb5, 0x16, 0x1c, 0x0d, 0x1c, 0x04, 0x1c, + 0x00, 0x28, 0x06, 0xd0, 0x0c, 0x20, 0xfa, 0xf7, + 0x47, 0xfd, 0x30, 0xc0, 0x08, 0x38, 0x06, 0x72, + 0x3c, 0x00, 0xb0, 0x6d, 0x00, 0x00, 0x70, 0xbd, + 0x00, 0x20, 0x70, 0xbd, 0x00, 0x00, 0x01, 0x1c, + 0x05, 0x48, 0x80, 0xb5, 0x00, 0x68, 0x01, 0xd0, + 0x01, 0x21, 0x00, 0xe0, 0x00, 0x21, 0xfc, 0xf7, + 0xa0, 0xfc, 0x80, 0xbd, 0x00, 0x00, 0x0c, 0x79, + 0x01, 0x00, 0x70, 0xb5, 0x0e, 0x1c, 0x04, 0x1c, + 0x00, 0x28, 0x01, 0xd1, 0xfa, 0xf7, 0x8f, 0xfa, + 0x06, 0x4d, 0x28, 0x68, 0x00, 0x28, 0x01, 0xd0, + 0xfa, 0xf7, 0x3c, 0x00, 0xec, 0x6d, 0x00, 0x00, + 0x89, 0xfa, 0x04, 0x48, 0x2e, 0x60, 0xc4, 0x60, + 0x01, 0x21, 0x01, 0x70, 0x70, 0xbd, 0x00, 0x00, + 0xa8, 0x7e, 0x01, 0x00, 0x30, 0x00, 0x07, 0x00, + 0x10, 0xb5, 0x07, 0x4c, 0x20, 0x68, 0x00, 0x28, + 0x01, 0xd1, 0xfa, 0xf7, 0x77, 0xfa, 0x05, 0x48, + 0x00, 0x69, 0x21, 0x68, 0xf9, 0xf7, 0xdf, 0xfa, + 0x00, 0x20, 0x20, 0x60, 0x10, 0xbd, 0x00, 0x00, + 0xa8, 0x7e, 0x01, 0x00, 0x3c, 0x00, 0x28, 0x6e, + 0x00, 0x00, 0x30, 0x00, 0x07, 0x00, 0x01, 0x20, + 0x05, 0x49, 0xc0, 0x06, 0x80, 0xb5, 0x08, 0x60, + 0x00, 0x22, 0x03, 0x21, 0x54, 0x20, 0x0c, 0xf0, + 0xb8, 0xfc, 0x80, 0xbd, 0x00, 0x00, 0x00, 0x10, + 0x07, 0x00, 0x80, 0xb5, 0x00, 0x22, 0x04, 0x21, + 0xc4, 0x20, 0x0c, 0xf0, 0xae, 0xfc, 0x80, 0xbd, + 0x00, 0x00, 0x04, 0x48, 0x80, 0xb5, 0x00, 0x88, + 0x02, 0x49, 0xff, 0xf7, 0xb8, 0xff, 0x3c, 0x00, + 0x64, 0x6e, 0x00, 0x00, 0x80, 0xbd, 0x00, 0x00, + 0x75, 0x4b, 0x00, 0x00, 0xc8, 0x74, 0x01, 0x00, + 0xf8, 0xb5, 0x06, 0x1c, 0x31, 0x48, 0x00, 0x25, + 0xc0, 0x68, 0x0c, 0x1c, 0x00, 0x28, 0x30, 0xd0, + 0x2e, 0x48, 0x2f, 0x4f, 0x04, 0x30, 0x00, 0x78, + 0x38, 0x76, 0x2c, 0x48, 0x04, 0x30, 0x40, 0x78, + 0x38, 0x81, 0x00, 0x2a, 0x0b, 0xd0, 0xf9, 0xf7, + 0xa5, 0xfa, 0x1f, 0x20, 0xb8, 0x76, 0x20, 0x1c, + 0x3c, 0x00, 0xa0, 0x6e, 0x00, 0x00, 0xf9, 0xf7, + 0xf6, 0xf9, 0x25, 0x48, 0x04, 0x30, 0x80, 0x78, + 0xb8, 0x76, 0x43, 0xe0, 0x25, 0x48, 0x22, 0x49, + 0x84, 0x42, 0x4d, 0x69, 0x02, 0xd2, 0x6c, 0x43, + 0xe4, 0x0b, 0x0f, 0xe0, 0x1f, 0x48, 0x21, 0x1c, + 0x80, 0x6a, 0x00, 0x90, 0xf9, 0xf7, 0x23, 0xfc, + 0x00, 0x99, 0x02, 0x1c, 0x4a, 0x43, 0xa1, 0x1a, + 0x1a, 0x4a, 0x69, 0x43, 0x52, 0x6a, 0xc9, 0x0b, + 0x50, 0x43, 0x3c, 0x00, 0xdc, 0x6e, 0x00, 0x00, + 0x44, 0x18, 0x02, 0x2c, 0x01, 0xd8, 0x00, 0x20, + 0xf8, 0xbd, 0xf9, 0xf7, 0x7d, 0xfa, 0x1f, 0x20, + 0xb8, 0x76, 0x20, 0x1c, 0xf9, 0xf7, 0xae, 0xf9, + 0x04, 0x1c, 0x11, 0x48, 0x04, 0x30, 0x80, 0x78, + 0xb8, 0x76, 0x0f, 0x4f, 0x7d, 0x6a, 0xac, 0x42, + 0x04, 0xd2, 0x20, 0x1c, 0xff, 0xf7, 0x22, 0xfc, + 0x05, 0x1c, 0x12, 0xe0, 0x21, 0x1c, 0x28, 0x1c, + 0xf9, 0xf7, 0xfc, 0xfb, 0x3c, 0x00, 0x18, 0x6f, + 0x00, 0x00, 0x06, 0x1c, 0x68, 0x43, 0x20, 0x1a, + 0xff, 0xf7, 0x17, 0xfc, 0x05, 0x1c, 0x00, 0x24, + 0x04, 0xe0, 0x78, 0x6a, 0xff, 0xf7, 0x11, 0xfc, + 0x45, 0x19, 0x01, 0x34, 0xb4, 0x42, 0xf8, 0xd3, + 0x28, 0x1c, 0xd4, 0xe7, 0x00, 0x00, 0xc8, 0x74, + 0x01, 0x00, 0x30, 0x00, 0x07, 0x00, 0xc0, 0xc6, + 0x2d, 0x00, 0x01, 0x1c, 0x7d, 0x20, 0x80, 0xb5, + 0xc0, 0x00, 0xf9, 0xf7, 0x72, 0xfb, 0x3c, 0x00, + 0x54, 0x6f, 0x00, 0x00, 0x02, 0x49, 0x88, 0x61, + 0x40, 0x08, 0xc8, 0x61, 0x80, 0xbd, 0x00, 0x00, + 0xc8, 0x74, 0x01, 0x00, 0x10, 0xb5, 0x06, 0x4c, + 0x21, 0x1c, 0x00, 0x20, 0x0b, 0xf0, 0x42, 0xfa, + 0x21, 0x1c, 0x00, 0x20, 0x0b, 0xf0, 0x0a, 0xfa, + 0x00, 0xf0, 0x68, 0xfe, 0x10, 0xbd, 0x00, 0x00, + 0x85, 0x6f, 0x00, 0x00, 0x30, 0xb5, 0x0f, 0x4d, + 0x2a, 0x78, 0x04, 0x2a, 0x19, 0xd8, 0x00, 0x2a, + 0x3c, 0x00, 0x90, 0x6f, 0x00, 0x00, 0x17, 0xd0, + 0x00, 0x21, 0x07, 0xe0, 0x4b, 0x00, 0x5b, 0x18, + 0x5c, 0x19, 0x01, 0x23, 0xe4, 0x56, 0x84, 0x42, + 0x02, 0xda, 0x01, 0x31, 0x8a, 0x42, 0xf5, 0xdc, + 0x8a, 0x42, 0x00, 0xd1, 0x01, 0x39, 0x48, 0x00, + 0x40, 0x18, 0x40, 0x19, 0x81, 0x78, 0x02, 0x4a, + 0x34, 0x3a, 0x11, 0x70, 0xc0, 0x78, 0x50, 0x70, + 0x30, 0xbd, 0x00, 0x75, 0x01, 0x00, 0x30, 0xb5, + 0x11, 0x1c, 0x3c, 0x00, 0xcc, 0x6f, 0x00, 0x00, + 0x38, 0x31, 0x85, 0xb0, 0x91, 0x62, 0x08, 0x21, + 0x11, 0x86, 0x00, 0x23, 0x14, 0x1c, 0x01, 0x1c, + 0x53, 0x63, 0xc0, 0x68, 0x15, 0x4d, 0x0b, 0xe0, + 0x02, 0x68, 0xaa, 0x42, 0x06, 0xd1, 0xc2, 0x68, + 0xca, 0x60, 0xc3, 0x60, 0x03, 0x60, 0xfa, 0xf7, + 0xd1, 0xfa, 0x03, 0xe0, 0x01, 0x1c, 0xc0, 0x68, + 0x00, 0x28, 0xf1, 0xd1, 0x22, 0x1c, 0x40, 0x32, + 0x08, 0x21, 0x20, 0x68, 0x3c, 0x00, 0x08, 0x70, + 0x00, 0x00, 0xfa, 0xf7, 0x64, 0xfb, 0x0b, 0x49, + 0x20, 0x1c, 0x48, 0x30, 0x02, 0x90, 0x04, 0x94, + 0x03, 0x91, 0xe0, 0x69, 0x82, 0x88, 0x01, 0x68, + 0x6e, 0x20, 0x01, 0x92, 0x00, 0x91, 0x22, 0x1c, + 0x56, 0x32, 0x03, 0x5d, 0x21, 0x1c, 0x28, 0x31, + 0x20, 0x68, 0xff, 0xf7, 0x58, 0xfa, 0x05, 0xb0, + 0x30, 0xbd, 0xa0, 0x7e, 0x01, 0x00, 0xd5, 0x70, + 0x00, 0x00, 0x1c, 0xb5, 0x07, 0x49, 0x3c, 0x00, + 0x44, 0x70, 0x00, 0x00, 0x02, 0x1c, 0x01, 0x90, + 0x00, 0x91, 0xc0, 0x69, 0x13, 0x1c, 0x84, 0x88, + 0x01, 0x68, 0x10, 0x68, 0x48, 0x33, 0x22, 0x1c, + 0xff, 0xf7, 0x08, 0xf9, 0x1c, 0xbd, 0x00, 0x00, + 0xc9, 0x6f, 0x00, 0x00, 0x10, 0xb5, 0x14, 0x1c, + 0x18, 0x48, 0x03, 0xf0, 0x89, 0xf8, 0xa0, 0x42, + 0x01, 0xd0, 0xfa, 0xf7, 0x45, 0xf9, 0x04, 0x22, + 0x20, 0x1c, 0x40, 0x30, 0xa1, 0x6a, 0xf9, 0xf7, + 0x3c, 0x00, 0x80, 0x70, 0x00, 0x00, 0xbd, 0xf9, + 0x00, 0x28, 0x02, 0xd1, 0x01, 0x20, 0x20, 0x62, + 0x05, 0xe0, 0x00, 0x20, 0x20, 0x62, 0x84, 0x20, + 0x00, 0x5d, 0x00, 0x28, 0x03, 0xd1, 0x20, 0x1c, + 0x09, 0xf0, 0x23, 0xfb, 0x05, 0xe0, 0x20, 0x68, + 0xfa, 0xf7, 0x79, 0xfa, 0x20, 0x1c, 0xfa, 0xf7, + 0xa4, 0xfb, 0xe0, 0x69, 0x80, 0x79, 0x06, 0x28, + 0x06, 0xd1, 0x20, 0x6a, 0x06, 0x49, 0x00, 0x28, + 0x03, 0xd0, 0x3c, 0x00, 0xbc, 0x70, 0x00, 0x00, + 0x08, 0x69, 0x01, 0x30, 0x08, 0x61, 0x10, 0xbd, + 0x48, 0x69, 0x01, 0x30, 0x48, 0x61, 0x10, 0xbd, + 0xa0, 0x6a, 0x01, 0x00, 0x28, 0x61, 0x01, 0x00, + 0x1c, 0xb5, 0x14, 0x1c, 0x15, 0x48, 0x03, 0xf0, + 0x51, 0xf8, 0xa0, 0x42, 0x01, 0xd0, 0xfa, 0xf7, + 0x0d, 0xf9, 0x20, 0x1c, 0x4f, 0x30, 0x02, 0x79, + 0x41, 0x79, 0x00, 0xab, 0x12, 0x02, 0x11, 0x43, + 0xc2, 0x78, 0x12, 0x04, 0x3c, 0x00, 0xf8, 0x70, + 0x00, 0x00, 0x11, 0x43, 0x82, 0x78, 0x12, 0x06, + 0x11, 0x43, 0x00, 0x91, 0x01, 0x78, 0x40, 0x78, + 0x09, 0x02, 0x08, 0x43, 0x98, 0x80, 0x20, 0x1c, + 0x69, 0x46, 0x06, 0xf0, 0x3c, 0xf9, 0x00, 0x28, + 0x03, 0xd1, 0x20, 0x1c, 0x09, 0xf0, 0xe3, 0xfa, + 0x1c, 0xbd, 0x20, 0x68, 0xfa, 0xf7, 0x39, 0xfa, + 0x20, 0x1c, 0xfa, 0xf7, 0x64, 0xfb, 0xf7, 0xe7, + 0x00, 0x00, 0xa0, 0x6a, 0x01, 0x00, 0x3c, 0x00, + 0x34, 0x71, 0x00, 0x00, 0xbc, 0xb5, 0x1f, 0x4d, + 0x14, 0x1c, 0x28, 0x1c, 0xdc, 0x30, 0x03, 0xf0, + 0x1f, 0xf8, 0xa0, 0x42, 0x01, 0xd0, 0xfa, 0xf7, + 0xdb, 0xf8, 0xa0, 0x6c, 0x00, 0xab, 0x02, 0x78, + 0x81, 0x78, 0x12, 0x02, 0x11, 0x43, 0x02, 0x79, + 0x12, 0x04, 0x11, 0x43, 0x42, 0x79, 0x12, 0x06, + 0x11, 0x43, 0x00, 0x91, 0x81, 0x79, 0xc0, 0x79, + 0x00, 0x02, 0x08, 0x43, 0x98, 0x80, 0x20, 0x1c, + 0x3c, 0x00, 0x70, 0x71, 0x00, 0x00, 0x69, 0x46, + 0x06, 0xf0, 0x0b, 0xf9, 0x00, 0x28, 0x17, 0xd0, + 0x01, 0x28, 0x0e, 0xd1, 0xed, 0x6c, 0x00, 0x2d, + 0x0b, 0xd0, 0x80, 0x20, 0x02, 0x5d, 0xe0, 0x6c, + 0x01, 0x21, 0x00, 0x28, 0x00, 0xd1, 0x00, 0x21, + 0x60, 0x68, 0x6b, 0x46, 0x0a, 0x30, 0xf9, 0xf7, + 0x23, 0xf9, 0x20, 0x68, 0xfa, 0xf7, 0xfb, 0xf9, + 0x20, 0x1c, 0xfa, 0xf7, 0x26, 0xfb, 0xbc, 0xbd, + 0x20, 0x1c, 0x3c, 0x00, 0xac, 0x71, 0x00, 0x00, + 0x00, 0xf0, 0x8e, 0xfe, 0xfa, 0xe7, 0x00, 0x00, + 0xc4, 0x69, 0x01, 0x00, 0xbc, 0xb5, 0x04, 0x1c, + 0x40, 0x6a, 0x00, 0x25, 0x00, 0x28, 0x03, 0xd0, + 0x60, 0x68, 0x00, 0x8b, 0x05, 0x07, 0x2d, 0x0f, + 0x22, 0x1c, 0x40, 0x32, 0x08, 0x21, 0x20, 0x68, + 0xfa, 0xf7, 0x7e, 0xfa, 0xa1, 0x68, 0x01, 0x95, + 0x00, 0x91, 0x21, 0x1c, 0x22, 0x1c, 0x60, 0x32, + 0x20, 0x68, 0x50, 0x31, 0x3c, 0x00, 0xe8, 0x71, + 0x00, 0x00, 0x0d, 0x1c, 0xe3, 0x68, 0x09, 0xf0, + 0xe2, 0xff, 0xe0, 0x69, 0x80, 0x6b, 0x00, 0x28, + 0x03, 0xd1, 0xfe, 0xf7, 0xe8, 0xfa, 0x00, 0x28, + 0x01, 0xd0, 0x18, 0x20, 0x00, 0xe0, 0x10, 0x20, + 0x06, 0x49, 0x01, 0x94, 0x00, 0x91, 0xe1, 0x69, + 0x08, 0x23, 0x09, 0x68, 0x0a, 0x18, 0x21, 0x1c, + 0x28, 0x31, 0x28, 0x1c, 0xff, 0xf7, 0x87, 0xf9, + 0xbc, 0xbd, 0x35, 0x71, 0x00, 0x00, 0x3c, 0x00, + 0x24, 0x72, 0x00, 0x00, 0x10, 0xb5, 0x10, 0x1c, + 0x38, 0x30, 0x90, 0x62, 0x04, 0x20, 0x10, 0x86, + 0x00, 0x20, 0x50, 0x63, 0x10, 0x68, 0x14, 0x1c, + 0x40, 0x32, 0x04, 0x21, 0xfa, 0xf7, 0x4a, 0xfa, + 0x23, 0x1c, 0x21, 0x1c, 0x28, 0x31, 0x02, 0x4a, + 0x20, 0x68, 0xff, 0xf7, 0xbd, 0xf8, 0x10, 0xbd, + 0x65, 0x70, 0x00, 0x00, 0x0e, 0xb5, 0xc3, 0x69, + 0x02, 0x1c, 0x98, 0x88, 0x05, 0x49, 0x02, 0x92, + 0x3c, 0x00, 0x60, 0x72, 0x00, 0x00, 0x01, 0x91, + 0x00, 0x90, 0x1b, 0x68, 0x10, 0x68, 0x91, 0x69, + 0x03, 0x22, 0xff, 0xf7, 0xae, 0xf9, 0x0e, 0xbd, + 0x00, 0x00, 0x25, 0x72, 0x00, 0x00, 0x0e, 0xb5, + 0x02, 0x1c, 0x06, 0x49, 0x10, 0x20, 0x00, 0x90, + 0x02, 0x92, 0x13, 0x1c, 0x01, 0x91, 0x10, 0x68, + 0x00, 0x22, 0x70, 0x33, 0x00, 0x21, 0xff, 0xf7, + 0x9c, 0xf9, 0x0e, 0xbd, 0x00, 0x00, 0x25, 0x72, + 0x00, 0x00, 0x3c, 0x00, 0x9c, 0x72, 0x00, 0x00, + 0x10, 0xb5, 0x03, 0x1c, 0x00, 0x21, 0x00, 0x20, + 0x08, 0x4c, 0x00, 0xe0, 0x01, 0x31, 0xca, 0x00, + 0xa2, 0x58, 0x9a, 0x42, 0x02, 0xd0, 0x0b, 0x29, + 0xf8, 0xd3, 0x10, 0xbd, 0x0b, 0x29, 0xfc, 0xd2, + 0xc9, 0x00, 0x09, 0x19, 0x00, 0x20, 0x08, 0x71, + 0x01, 0x20, 0x10, 0xbd, 0x38, 0x58, 0x01, 0x00, + 0x8c, 0xb5, 0x00, 0xab, 0x86, 0x21, 0x19, 0x80, + 0x01, 0x1c, 0x04, 0x48, 0x3c, 0x00, 0xd8, 0x72, + 0x00, 0x00, 0x06, 0xf0, 0xee, 0xfe, 0x01, 0x90, + 0x68, 0x46, 0x06, 0xf0, 0xfa, 0xf8, 0x8c, 0xbd, + 0x00, 0x00, 0x70, 0x7c, 0x01, 0x00, 0x10, 0xb5, + 0x04, 0x1c, 0x0d, 0x48, 0x0d, 0x49, 0x94, 0xb0, + 0x04, 0x80, 0x06, 0x22, 0x18, 0x31, 0x0c, 0x30, + 0xf9, 0xf7, 0xfb, 0xf8, 0x01, 0xa8, 0x07, 0xf0, + 0xa2, 0xf8, 0x0c, 0x20, 0x09, 0xa9, 0x48, 0x72, + 0x00, 0xab, 0x1c, 0x80, 0x02, 0x21, 0x3c, 0x00, + 0x14, 0x73, 0x00, 0x00, 0x68, 0x46, 0x03, 0xf0, + 0xdb, 0xff, 0x04, 0x90, 0x01, 0xa8, 0x06, 0xf0, + 0xd1, 0xf8, 0x14, 0xb0, 0x10, 0xbd, 0x00, 0x00, + 0x58, 0x7c, 0x01, 0x00, 0x80, 0xb5, 0x04, 0xf0, + 0x45, 0xfe, 0x05, 0xf0, 0x53, 0xfa, 0x80, 0xbd, + 0x10, 0xb5, 0x19, 0x4c, 0xe0, 0x68, 0x00, 0x28, + 0x06, 0xd0, 0x61, 0x1c, 0x08, 0x78, 0x00, 0x28, + 0x03, 0xd1, 0x48, 0x78, 0xff, 0x30, 0x08, 0x70, + 0x3c, 0x00, 0x50, 0x73, 0x00, 0x00, 0x10, 0xbd, + 0xff, 0x30, 0x00, 0x06, 0x00, 0x0e, 0x08, 0x70, + 0xa1, 0x68, 0x00, 0x29, 0xf7, 0xd0, 0x00, 0x28, + 0xf5, 0xd1, 0x0e, 0x48, 0x54, 0x30, 0x81, 0x78, + 0x00, 0x29, 0x03, 0xd1, 0xc1, 0x78, 0xff, 0x31, + 0x81, 0x70, 0x10, 0xbd, 0xff, 0x31, 0x09, 0x06, + 0x09, 0x0e, 0x81, 0x70, 0xf9, 0xd1, 0xa1, 0x69, + 0x00, 0x29, 0xf6, 0xd0, 0x80, 0x88, 0x03, 0xf0, + 0xd0, 0xfb, 0x3c, 0x00, 0x8c, 0x73, 0x00, 0x00, + 0x04, 0x4a, 0x01, 0x1c, 0x5c, 0x32, 0x0c, 0x32, + 0x05, 0xca, 0x80, 0x1a, 0xa2, 0x69, 0xf9, 0xf7, + 0x1f, 0xf8, 0x10, 0xbd, 0x44, 0x7d, 0x01, 0x00, + 0xf0, 0xb5, 0x04, 0x1c, 0x40, 0x68, 0x00, 0x25, + 0x01, 0x79, 0x00, 0x22, 0x85, 0xb0, 0xc9, 0x07, + 0xcb, 0x17, 0x69, 0x49, 0x01, 0x33, 0x89, 0x6a, + 0x10, 0x29, 0x05, 0xd3, 0x66, 0x49, 0xc0, 0x39, + 0x08, 0x6b, 0x01, 0x30, 0x3c, 0x00, 0xc8, 0x73, + 0x00, 0x00, 0x08, 0x63, 0x8e, 0xe0, 0x21, 0x68, + 0x0e, 0x68, 0xf6, 0x78, 0xb7, 0x06, 0xff, 0x0f, + 0xb6, 0x09, 0x00, 0x2b, 0x04, 0x97, 0x06, 0xd0, + 0x63, 0x69, 0x1f, 0x1c, 0x1b, 0x6a, 0x50, 0x37, + 0x9f, 0x42, 0x00, 0xd1, 0x01, 0x25, 0x00, 0x2d, + 0x02, 0xd0, 0x63, 0x69, 0x1b, 0x6a, 0x04, 0xe0, + 0x3c, 0x23, 0x59, 0x4f, 0x73, 0x43, 0xdb, 0x19, + 0x04, 0x33, 0xe3, 0x61, 0x9f, 0x88, 0x3c, 0x00, + 0x04, 0x74, 0x00, 0x00, 0x00, 0x2f, 0x70, 0xd0, + 0x9b, 0x79, 0x02, 0x2b, 0x6e, 0xd0, 0x04, 0x2b, + 0x17, 0xd0, 0x06, 0x2b, 0x69, 0xd1, 0x08, 0x68, + 0xa0, 0x61, 0x08, 0x89, 0x04, 0x38, 0x08, 0x81, + 0x20, 0x68, 0x01, 0x68, 0x04, 0x31, 0x01, 0x60, + 0x4e, 0x49, 0x00, 0x29, 0x5d, 0xd0, 0x04, 0x9f, + 0xba, 0x42, 0x5a, 0xd1, 0x49, 0x48, 0x22, 0x1c, + 0x1c, 0x30, 0x02, 0xf0, 0x65, 0xfe, 0x05, 0xb0, + 0x3c, 0x00, 0x40, 0x74, 0x00, 0x00, 0xf0, 0xbd, + 0x09, 0x68, 0x25, 0x1c, 0xca, 0x79, 0x40, 0x35, + 0x26, 0x1c, 0xea, 0x73, 0x8b, 0x79, 0x22, 0x1c, + 0x50, 0x32, 0x13, 0x70, 0x4b, 0x79, 0x60, 0x36, + 0x53, 0x70, 0x0b, 0x79, 0x93, 0x70, 0x4b, 0x78, + 0xd3, 0x70, 0x09, 0x78, 0x11, 0x71, 0x00, 0x21, + 0x29, 0x72, 0x16, 0x21, 0xb1, 0x73, 0x61, 0x6a, + 0x00, 0x29, 0x06, 0xd0, 0x01, 0x8b, 0x09, 0x07, + 0x09, 0x0f, 0x3c, 0x00, 0x7c, 0x74, 0x00, 0x00, + 0x29, 0x72, 0xb1, 0x81, 0x18, 0x21, 0xb1, 0x73, + 0x01, 0x1c, 0x0a, 0x31, 0x20, 0x1c, 0x06, 0x22, + 0x49, 0x30, 0xf9, 0xf7, 0x33, 0xf8, 0x60, 0x68, + 0x14, 0x22, 0x01, 0x88, 0xe9, 0x82, 0x01, 0x1d, + 0x20, 0x1c, 0x58, 0x30, 0xf9, 0xf7, 0x2a, 0xf8, + 0xe8, 0x8a, 0x30, 0x49, 0x08, 0x40, 0x01, 0x21, + 0x89, 0x03, 0x08, 0x43, 0xe8, 0x82, 0x70, 0x89, + 0x0f, 0x21, 0x08, 0x40, 0x3c, 0x00, 0xb8, 0x74, + 0x00, 0x00, 0x70, 0x81, 0x20, 0x68, 0x01, 0x89, + 0x08, 0x39, 0x01, 0x81, 0x20, 0x68, 0x01, 0x68, + 0x08, 0x31, 0x01, 0x60, 0x08, 0x21, 0x00, 0x20, + 0xfa, 0xf7, 0x83, 0xf8, 0x05, 0x1c, 0x02, 0x68, + 0x20, 0x68, 0x08, 0x21, 0xfa, 0xf7, 0xfb, 0xf8, + 0x20, 0x68, 0xfa, 0xf7, 0x74, 0xf8, 0x21, 0x49, + 0xc5, 0x60, 0x2f, 0xe0, 0x30, 0xe0, 0xff, 0xe7, + 0x21, 0x68, 0x60, 0x68, 0x0a, 0x68, 0x3c, 0x00, + 0xf4, 0x74, 0x00, 0x00, 0x80, 0x23, 0xa2, 0x64, + 0x1e, 0x55, 0xe5, 0x64, 0x55, 0x79, 0x13, 0x79, + 0x2d, 0x02, 0x5b, 0x19, 0x95, 0x79, 0x2d, 0x04, + 0x5b, 0x19, 0xd5, 0x79, 0x2d, 0x06, 0x5b, 0x19, + 0x95, 0x78, 0x12, 0x78, 0x12, 0x02, 0xaa, 0x18, + 0x15, 0x04, 0x0a, 0x89, 0x2d, 0x0c, 0x08, 0x3a, + 0x0a, 0x81, 0x21, 0x68, 0x0a, 0x68, 0x08, 0x32, + 0x0a, 0x60, 0xe1, 0x69, 0x02, 0x1c, 0x0a, 0x32, + 0x3c, 0x00, 0x30, 0x75, 0x00, 0x00, 0x01, 0xa8, + 0x09, 0x68, 0x0b, 0xf0, 0x3e, 0xf9, 0xe0, 0x69, + 0x2b, 0x1c, 0x01, 0x68, 0x20, 0x1c, 0x70, 0x30, + 0x01, 0xaa, 0x0b, 0xf0, 0x86, 0xf9, 0x09, 0x49, + 0x01, 0x22, 0x6d, 0xe7, 0x20, 0x68, 0xfa, 0xf7, + 0x22, 0xf8, 0x20, 0x1c, 0xfa, 0xf7, 0x4d, 0xf9, + 0x70, 0xe7, 0x84, 0x6a, 0x01, 0x00, 0x68, 0x61, + 0x01, 0x00, 0x55, 0x72, 0x00, 0x00, 0x8f, 0xc7, + 0xff, 0xff, 0x3c, 0x00, 0x6c, 0x75, 0x00, 0x00, + 0x41, 0x70, 0x00, 0x00, 0x79, 0x72, 0x00, 0x00, + 0x80, 0xb5, 0x02, 0x21, 0x82, 0x20, 0xf9, 0xf7, + 0x93, 0xfe, 0x80, 0xbd, 0x70, 0x47, 0x00, 0x00, + 0x70, 0x47, 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x70, 0x47, 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x70, 0x47, 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x80, 0xb5, 0xc0, 0x68, 0xf9, 0xf7, 0xfa, 0xff, + 0x01, 0x20, 0x80, 0xbd, 0x3c, 0x00, 0xa8, 0x75, + 0x00, 0x00, 0x80, 0xb5, 0x00, 0x21, 0xff, 0x20, + 0xf9, 0xf7, 0x79, 0xfe, 0x80, 0xbd, 0x70, 0x47, + 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, 0x01, 0x20, + 0x70, 0x47, 0x70, 0x47, 0x00, 0x00, 0x70, 0x47, + 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, 0x70, 0x47, + 0x00, 0x00, 0x80, 0xb5, 0x06, 0x21, 0x99, 0x20, + 0xf9, 0xf7, 0x65, 0xfe, 0x80, 0xbd, 0xb0, 0xb5, + 0x00, 0x25, 0x01, 0x29, 0x12, 0x4c, 0x3c, 0x00, + 0xe4, 0x75, 0x00, 0x00, 0x0f, 0xd1, 0x0a, 0xf0, + 0x0f, 0xfc, 0x00, 0x28, 0x1d, 0xd0, 0x61, 0x78, + 0x3c, 0x23, 0x59, 0x43, 0x09, 0x19, 0x04, 0x31, + 0x01, 0x62, 0x61, 0x1c, 0x41, 0x62, 0x84, 0x62, + 0x04, 0x1c, 0x50, 0x34, 0x06, 0xe0, 0x00, 0x29, + 0x0f, 0xd1, 0x3c, 0x20, 0x50, 0x43, 0x25, 0x70, + 0x04, 0x19, 0x04, 0x34, 0x00, 0x2c, 0x08, 0xd0, + 0x20, 0x68, 0x00, 0x28, 0x02, 0xd0, 0x20, 0x21, + 0x3c, 0x00, 0x20, 0x76, 0x00, 0x00, 0xf8, 0xf7, + 0x18, 0xff, 0xa5, 0x80, 0x07, 0x20, 0xa0, 0x71, + 0xb0, 0xbd, 0x68, 0x61, 0x01, 0x00, 0x70, 0xb5, + 0x04, 0x1c, 0x00, 0x21, 0x01, 0xf0, 0x41, 0xfc, + 0x60, 0x68, 0x00, 0x28, 0x01, 0xd0, 0x21, 0x68, + 0x01, 0x60, 0x20, 0x68, 0x00, 0x28, 0x01, 0xd0, + 0x61, 0x68, 0x41, 0x60, 0x12, 0x4e, 0x70, 0x68, + 0xa0, 0x42, 0x01, 0xd1, 0x60, 0x68, 0x70, 0x60, + 0xe0, 0x68, 0x3c, 0x00, 0x5c, 0x76, 0x00, 0x00, + 0x00, 0x28, 0x0b, 0xd0, 0x00, 0x25, 0x06, 0xe0, + 0xe0, 0x68, 0xe9, 0x00, 0x41, 0x18, 0x14, 0x20, + 0x0b, 0xf0, 0xe2, 0xff, 0x01, 0x35, 0x30, 0x88, + 0x85, 0x42, 0xf5, 0xdb, 0x06, 0x21, 0x20, 0x1c, + 0x44, 0x30, 0xf8, 0xf7, 0xe9, 0xfe, 0x20, 0x6b, + 0x00, 0x28, 0x01, 0xd0, 0xf9, 0xf7, 0x86, 0xff, + 0xe0, 0x69, 0x00, 0x28, 0x01, 0xd0, 0xfa, 0xf7, + 0xaf, 0xf8, 0x70, 0xbd, 0x3c, 0x00, 0x98, 0x76, + 0x00, 0x00, 0x58, 0x75, 0x01, 0x00, 0xf0, 0xb5, + 0x1d, 0x4f, 0x05, 0x9d, 0x3f, 0x68, 0x01, 0x26, + 0x1c, 0x1c, 0x33, 0x1c, 0x00, 0x2f, 0x00, 0xd0, + 0x2b, 0x1c, 0x1d, 0x06, 0x2d, 0x0e, 0x00, 0x29, + 0x06, 0xd0, 0x11, 0x78, 0x0e, 0x23, 0x16, 0x4f, + 0x09, 0x18, 0x09, 0x7a, 0x6b, 0x43, 0x10, 0xe0, + 0x21, 0x78, 0x00, 0x29, 0x13, 0xd0, 0xff, 0x31, + 0x0d, 0xe0, 0x01, 0x29, 0x01, 0xd9, 0x3c, 0x00, + 0xd4, 0x76, 0x00, 0x00, 0x01, 0x31, 0x11, 0x70, + 0x11, 0x78, 0x0e, 0x23, 0x0f, 0x4f, 0x49, 0x08, + 0x11, 0x70, 0x09, 0x18, 0x09, 0x7a, 0x6b, 0x43, + 0xdb, 0x19, 0x59, 0x5c, 0x21, 0x70, 0x21, 0x78, + 0x00, 0x29, 0x02, 0xd1, 0x11, 0x78, 0x00, 0x29, + 0xea, 0xd1, 0x09, 0x48, 0xc0, 0x68, 0x00, 0x28, + 0x05, 0xd0, 0x21, 0x78, 0x30, 0x1c, 0x00, 0x29, + 0x00, 0xd1, 0x00, 0x20, 0xf0, 0xbd, 0x01, 0x20, + 0x3c, 0x00, 0x10, 0x77, 0x00, 0x00, 0xf0, 0xbd, + 0x00, 0x00, 0x18, 0x67, 0x01, 0x00, 0x24, 0x67, + 0x01, 0x00, 0x5c, 0x67, 0x01, 0x00, 0xac, 0x7c, + 0x01, 0x00, 0x84, 0x46, 0x00, 0x20, 0xf0, 0xb5, + 0x00, 0x29, 0x09, 0xd0, 0x11, 0x78, 0x1a, 0x4e, + 0xb1, 0x70, 0x19, 0x4e, 0xb1, 0x78, 0x71, 0x70, + 0x31, 0x70, 0x01, 0x21, 0x31, 0x61, 0x27, 0xe0, + 0x16, 0x4e, 0x01, 0x23, 0xf1, 0x56, 0x63, 0x46, + 0x5f, 0x68, 0x3c, 0x00, 0x4c, 0x77, 0x00, 0x00, + 0x00, 0x23, 0xf6, 0x56, 0x01, 0x25, 0xcc, 0x0f, + 0xb7, 0x42, 0x00, 0xd9, 0x00, 0x25, 0x00, 0x2c, + 0x01, 0xd0, 0x00, 0x2d, 0xe8, 0xd1, 0x0e, 0x4f, + 0x3b, 0x69, 0x00, 0x2b, 0x03, 0xd0, 0x00, 0x2d, + 0x01, 0xd1, 0x16, 0x70, 0x02, 0xe0, 0x1c, 0x43, + 0x01, 0xd1, 0x11, 0x70, 0x01, 0x20, 0x01, 0x24, + 0x00, 0x2b, 0x00, 0xd0, 0x00, 0x24, 0x3c, 0x61, + 0x00, 0x2c, 0x02, 0xd0, 0x3c, 0x00, 0x88, 0x77, + 0x00, 0x00, 0x71, 0x1c, 0x39, 0x70, 0x01, 0xe0, + 0xff, 0x31, 0x79, 0x70, 0x00, 0x28, 0xd5, 0xd0, + 0x01, 0x20, 0xf0, 0xbd, 0x00, 0x00, 0xac, 0x7c, + 0x01, 0x00, 0x90, 0xb5, 0x0a, 0x4c, 0x00, 0x20, + 0x93, 0xb0, 0x20, 0x61, 0x03, 0x90, 0x68, 0x46, + 0x00, 0x21, 0x08, 0xf0, 0x84, 0xfd, 0x20, 0x7a, + 0x02, 0x28, 0x01, 0xd1, 0xe0, 0x6b, 0x00, 0xe0, + 0x20, 0x6c, 0xe0, 0x61, 0x01, 0x20, 0x3c, 0x00, + 0xc4, 0x77, 0x00, 0x00, 0x08, 0xf0, 0x8a, 0xfd, + 0x13, 0xb0, 0x90, 0xbd, 0xf4, 0x6e, 0x01, 0x00, + 0xf7, 0xb5, 0x05, 0x1c, 0x88, 0x88, 0x0c, 0x1c, + 0x82, 0xb0, 0x1f, 0x4f, 0x00, 0x28, 0x00, 0xd1, + 0x00, 0x27, 0x04, 0x98, 0x00, 0x28, 0x01, 0xd1, + 0xf9, 0xf7, 0x8a, 0xfd, 0x1b, 0x48, 0x3b, 0x1c, + 0x00, 0x68, 0x21, 0x1c, 0x02, 0x68, 0x28, 0x1c, + 0x00, 0x92, 0x04, 0x9a, 0xfe, 0xf7, 0x3c, 0xf8, + 0x3c, 0x00, 0x00, 0x78, 0x00, 0x00, 0x06, 0x1c, + 0x22, 0xd0, 0x03, 0x21, 0x04, 0x98, 0x02, 0xf0, + 0xb8, 0xff, 0x00, 0x28, 0x1b, 0xd0, 0x80, 0x78, + 0x01, 0x21, 0x03, 0xf0, 0xe4, 0xff, 0xa0, 0x88, + 0xa1, 0x8e, 0x48, 0x43, 0x00, 0x04, 0x0f, 0x49, + 0x00, 0x0c, 0x08, 0x80, 0x03, 0xf0, 0x81, 0xf9, + 0x01, 0x22, 0x00, 0x2d, 0x00, 0xd1, 0x00, 0x22, + 0x01, 0x1c, 0x0e, 0x20, 0x0b, 0xf0, 0xc9, 0xfe, + 0x00, 0x2f, 0x3c, 0x00, 0x3c, 0x78, 0x00, 0x00, + 0x08, 0xd1, 0x00, 0x21, 0x28, 0x1c, 0x02, 0xf0, + 0xbd, 0xfc, 0x03, 0xe0, 0x00, 0x26, 0x28, 0x1c, + 0x00, 0xf0, 0x0a, 0xf8, 0x30, 0x1c, 0x05, 0xb0, + 0xf0, 0xbd, 0x00, 0x00, 0xc1, 0xa1, 0x00, 0x00, + 0xe4, 0x65, 0x01, 0x00, 0xa8, 0x7c, 0x01, 0x00, + 0x10, 0xb5, 0x04, 0x1c, 0xfe, 0xf7, 0x38, 0xf8, + 0x01, 0x21, 0x00, 0x2c, 0x00, 0xd1, 0x00, 0x21, + 0x0e, 0x20, 0x0b, 0xf0, 0x3c, 0x00, 0x78, 0x78, + 0x00, 0x00, 0xdd, 0xfe, 0x10, 0xbd, 0xf8, 0xb5, + 0x07, 0x1c, 0x0b, 0xf0, 0x94, 0xfa, 0xfd, 0xf7, + 0xbc, 0xfe, 0x00, 0x26, 0x02, 0x28, 0x1e, 0x4d, + 0x01, 0xd0, 0x2e, 0x70, 0xf8, 0xbd, 0xfd, 0xf7, + 0x3e, 0xf8, 0x04, 0x1c, 0xf9, 0xf7, 0x59, 0xfc, + 0x00, 0x28, 0x14, 0xd0, 0xfd, 0xf7, 0x77, 0xf8, + 0x00, 0x28, 0x10, 0xd0, 0x02, 0xf0, 0xf9, 0xfb, + 0x00, 0x28, 0x01, 0xd0, 0x00, 0x24, 0x3c, 0x00, + 0xb4, 0x78, 0x00, 0x00, 0x00, 0xe0, 0x15, 0x4c, + 0x33, 0x1c, 0x21, 0x1c, 0x07, 0x22, 0x16, 0x20, + 0x0b, 0xf0, 0x66, 0xff, 0x68, 0x78, 0x80, 0x21, + 0x08, 0x43, 0x68, 0x70, 0x02, 0xf0, 0x0a, 0xfc, + 0x00, 0x28, 0xde, 0xd1, 0x28, 0x78, 0x80, 0x07, + 0xdb, 0xd4, 0xfd, 0xf7, 0x23, 0xf9, 0x00, 0x28, + 0x05, 0xd1, 0x28, 0x78, 0xc0, 0x07, 0x02, 0xd5, + 0xfd, 0xf7, 0x42, 0xf8, 0xd1, 0xe7, 0x02, 0xf0, + 0x3c, 0x00, 0xf0, 0x78, 0x00, 0x00, 0xcd, 0xfb, + 0x00, 0x28, 0xcd, 0xd0, 0x28, 0x78, 0x02, 0x21, + 0x08, 0x43, 0x28, 0x70, 0x21, 0x1c, 0x38, 0x1c, + 0xfd, 0xf7, 0xc1, 0xf8, 0xc4, 0xe7, 0x60, 0x6c, + 0x01, 0x00, 0x71, 0x02, 0x00, 0x00, 0x10, 0xb5, + 0x12, 0x4c, 0x01, 0x20, 0x20, 0x70, 0xfe, 0xf7, + 0xf0, 0xf9, 0x01, 0x21, 0xa0, 0x68, 0xfb, 0xf7, + 0xf4, 0xfe, 0xa0, 0x68, 0x03, 0xf0, 0x87, 0xff, + 0x0d, 0x48, 0x3c, 0x00, 0x2c, 0x79, 0x00, 0x00, + 0xa1, 0x68, 0x07, 0xf0, 0x23, 0xfd, 0xfb, 0xf7, + 0x55, 0xff, 0xe0, 0x68, 0x00, 0x28, 0x0d, 0xd0, + 0x09, 0x49, 0x06, 0x20, 0x0a, 0xf0, 0x24, 0xfd, + 0x08, 0x49, 0x05, 0x20, 0x0a, 0xf0, 0x20, 0xfd, + 0xfb, 0xf7, 0x6e, 0xff, 0x00, 0x28, 0x01, 0xd0, + 0x05, 0xf0, 0xf8, 0xfc, 0x10, 0xbd, 0x00, 0x00, + 0x78, 0x69, 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, + 0xe1, 0x35, 0x00, 0x00, 0x3c, 0x00, 0x68, 0x79, + 0x00, 0x00, 0xb1, 0x35, 0x00, 0x00, 0xf0, 0xb5, + 0x24, 0x4d, 0x23, 0x4c, 0x68, 0x7c, 0x20, 0x3c, + 0x9b, 0xb0, 0x00, 0x28, 0x08, 0xd0, 0x02, 0x28, + 0x03, 0xd8, 0x20, 0x89, 0x01, 0x38, 0x20, 0x81, + 0x37, 0xe0, 0x00, 0x27, 0x6f, 0x74, 0x34, 0xe0, + 0x1c, 0x4e, 0x68, 0x22, 0x14, 0x36, 0x31, 0x1c, + 0x0c, 0x31, 0x01, 0xa8, 0xf8, 0xf7, 0x09, 0xfe, + 0x18, 0x48, 0x33, 0x89, 0x01, 0x21, 0x3c, 0x00, + 0xa4, 0x79, 0x00, 0x00, 0x44, 0x30, 0x0a, 0x1c, + 0x00, 0x2b, 0x00, 0x7b, 0x00, 0xd1, 0x02, 0x1c, + 0x12, 0x06, 0x12, 0x0e, 0x0d, 0xaf, 0x3a, 0x70, + 0x94, 0x46, 0xaa, 0x7b, 0x93, 0x19, 0x30, 0x33, + 0x5b, 0x7b, 0x7b, 0x70, 0xea, 0x73, 0x01, 0x32, + 0x12, 0x06, 0x12, 0x0e, 0x00, 0x27, 0x82, 0x42, + 0xaa, 0x73, 0x01, 0xd3, 0xaf, 0x73, 0x04, 0xe0, + 0x62, 0x46, 0x01, 0x2a, 0x01, 0xd1, 0x77, 0x60, + 0x3c, 0x00, 0xe0, 0x79, 0x00, 0x00, 0x00, 0xe0, + 0x71, 0x60, 0x06, 0x48, 0x07, 0x4a, 0x80, 0x38, + 0x81, 0x67, 0x42, 0x67, 0x68, 0x22, 0x01, 0xa9, + 0xf8, 0xf7, 0xdd, 0xfd, 0x27, 0x81, 0x08, 0xf0, + 0x12, 0xfd, 0x1b, 0xb0, 0xf0, 0xbd, 0x84, 0x66, + 0x01, 0x00, 0xe9, 0x2e, 0x00, 0x00, 0xf1, 0xb5, + 0x86, 0xb0, 0x06, 0x99, 0x00, 0x20, 0x88, 0x61, + 0x06, 0x98, 0x84, 0x68, 0x80, 0x8d, 0x65, 0x68, + 0x01, 0x28, 0x3c, 0x00, 0x1c, 0x7a, 0x00, 0x00, + 0x4c, 0xd9, 0x35, 0x49, 0x49, 0x68, 0x05, 0x91, + 0x00, 0x29, 0x47, 0xd0, 0x00, 0x22, 0x00, 0x21, + 0x00, 0x23, 0x03, 0x90, 0x28, 0x1c, 0x96, 0x46, + 0x94, 0x46, 0x06, 0x68, 0x04, 0x96, 0xf2, 0x78, + 0x80, 0x26, 0xb2, 0x43, 0x3f, 0x2a, 0x2e, 0xd8, + 0xd7, 0x06, 0xff, 0x0e, 0x01, 0x26, 0xbe, 0x40, + 0x37, 0x1c, 0x04, 0x9e, 0x52, 0x09, 0xb6, 0x78, + 0x76, 0x00, 0xb2, 0x18, 0x3c, 0x00, 0x58, 0x7a, + 0x00, 0x00, 0x26, 0x4e, 0x92, 0x00, 0x1c, 0x36, + 0xb2, 0x58, 0x3a, 0x40, 0x1e, 0xd0, 0x03, 0xe0, + 0x02, 0x90, 0x02, 0x89, 0xc0, 0x68, 0x51, 0x18, + 0x00, 0x28, 0xf9, 0xd1, 0x05, 0x98, 0x81, 0x42, + 0x14, 0xd8, 0x70, 0x46, 0x01, 0x30, 0x86, 0x46, + 0x00, 0x2b, 0x04, 0xd0, 0x60, 0x46, 0xd8, 0x60, + 0x01, 0x98, 0x62, 0x46, 0xd0, 0x60, 0x03, 0x98, + 0x01, 0x38, 0x03, 0x90, 0x06, 0xd0, 0x3c, 0x00, + 0x94, 0x7a, 0x00, 0x00, 0x23, 0x1c, 0x24, 0x68, + 0x60, 0x68, 0x02, 0x9a, 0x01, 0x90, 0x94, 0x46, + 0xc9, 0xe7, 0x70, 0x46, 0x01, 0x28, 0x07, 0xd9, + 0x2a, 0x1c, 0x00, 0x21, 0x3f, 0x20, 0x01, 0xf0, + 0x51, 0xff, 0x05, 0x1c, 0x06, 0x98, 0x85, 0x61, + 0x28, 0x1c, 0x01, 0xf0, 0xb3, 0xff, 0x0e, 0x48, + 0x00, 0x68, 0x00, 0x28, 0x07, 0xd0, 0x28, 0x68, + 0x01, 0x88, 0x40, 0x79, 0x02, 0x31, 0x09, 0x1a, + 0x3c, 0x00, 0xd0, 0x7a, 0x00, 0x00, 0x28, 0x1c, + 0x01, 0xf0, 0xe5, 0xfc, 0xa2, 0x68, 0x06, 0x98, + 0xc0, 0x68, 0x06, 0x99, 0x0b, 0x69, 0x29, 0x1c, + 0xf8, 0xf7, 0x7c, 0xfc, 0x03, 0x49, 0x08, 0x69, + 0x01, 0x30, 0x08, 0x61, 0x07, 0xb0, 0xf0, 0xbd, + 0x00, 0x00, 0xfc, 0x5a, 0x01, 0x00, 0xcc, 0x5c, + 0x01, 0x00, 0x10, 0xb5, 0x09, 0x4a, 0x80, 0x00, + 0x12, 0x58, 0xd0, 0x06, 0xc0, 0x0e, 0x01, 0x30, + 0x07, 0x4b, 0x3c, 0x00, 0x0c, 0x7b, 0x00, 0x00, + 0x1c, 0x68, 0x00, 0x2c, 0xfc, 0xdb, 0x5a, 0x60, + 0x20, 0x22, 0x12, 0x1a, 0x91, 0x40, 0x19, 0x60, + 0x19, 0x68, 0x00, 0x29, 0xfc, 0xdb, 0x10, 0xbd, + 0xe8, 0x60, 0x01, 0x00, 0x30, 0x20, 0x07, 0x00, + 0xb0, 0xb5, 0x12, 0x4c, 0x00, 0x25, 0x25, 0x70, + 0xa1, 0x68, 0x11, 0x48, 0x07, 0xf0, 0x32, 0xfc, + 0x65, 0x61, 0xfb, 0xf7, 0xa3, 0xfe, 0xe0, 0x68, + 0x00, 0x28, 0x0d, 0xd0, 0x3c, 0x00, 0x48, 0x7b, + 0x00, 0x00, 0xfb, 0xf7, 0xa4, 0xfe, 0x01, 0x21, + 0x07, 0x20, 0x0b, 0xf0, 0x70, 0xfd, 0x0a, 0x49, + 0x06, 0x20, 0x0a, 0xf0, 0x4c, 0xfc, 0x09, 0x49, + 0x05, 0x20, 0x0a, 0xf0, 0x48, 0xfc, 0xa0, 0x68, + 0x03, 0xf0, 0x67, 0xfe, 0x00, 0x21, 0xa0, 0x68, + 0xfb, 0xf7, 0xcd, 0xfd, 0x05, 0xf0, 0xab, 0xfb, + 0xb0, 0xbd, 0x78, 0x69, 0x01, 0x00, 0x34, 0x63, + 0x01, 0x00, 0xe1, 0x35, 0x00, 0x00, 0x3c, 0x00, + 0x84, 0x7b, 0x00, 0x00, 0xb1, 0x35, 0x00, 0x00, + 0x10, 0xb5, 0x0f, 0x4c, 0x20, 0x7c, 0x00, 0x28, + 0x19, 0xd1, 0x60, 0x69, 0x00, 0x28, 0x16, 0xd1, + 0xe0, 0x68, 0x00, 0x28, 0x06, 0xd0, 0x0a, 0x48, + 0x1c, 0x38, 0xc0, 0x68, 0x00, 0x28, 0x01, 0xd0, + 0x05, 0xf0, 0xce, 0xfb, 0x01, 0x21, 0x07, 0x20, + 0x0b, 0xf0, 0x40, 0xfd, 0xa0, 0x68, 0x03, 0xf0, + 0x3f, 0xfe, 0x04, 0x48, 0xa1, 0x68, 0x07, 0xf0, + 0x3c, 0x00, 0xc0, 0x7b, 0x00, 0x00, 0xdb, 0xfb, + 0x01, 0x20, 0x20, 0x70, 0x10, 0xbd, 0x78, 0x69, + 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, 0x70, 0xb5, + 0x0e, 0x4c, 0x01, 0x22, 0xa3, 0x68, 0xe5, 0x68, + 0x26, 0x8a, 0x5d, 0x1b, 0xb5, 0x42, 0x01, 0xd1, + 0x00, 0x22, 0x06, 0xe0, 0x25, 0x68, 0x01, 0x33, + 0x2e, 0x68, 0xa3, 0x60, 0x26, 0x60, 0x04, 0x35, + 0x03, 0xc5, 0x00, 0x2a, 0x04, 0xd1, 0x01, 0x21, + 0x9d, 0x20, 0x3c, 0x00, 0xfc, 0x7b, 0x00, 0x00, + 0xf9, 0xf7, 0x52, 0xfb, 0x70, 0xbd, 0x03, 0x49, + 0x02, 0x20, 0x08, 0x60, 0x70, 0xbd, 0x00, 0x00, + 0x44, 0xe3, 0x01, 0x00, 0x40, 0x20, 0x07, 0x00, + 0x80, 0xb5, 0x02, 0xf0, 0xb9, 0xf8, 0x80, 0xbd, + 0x80, 0xb5, 0x02, 0x21, 0x2d, 0x20, 0xf9, 0xf7, + 0x3f, 0xfb, 0x00, 0x20, 0x80, 0xbd, 0x00, 0x00, + 0x80, 0xb5, 0x02, 0x21, 0x2a, 0x20, 0xf9, 0xf7, + 0x37, 0xfb, 0x00, 0x20, 0x3c, 0x00, 0x38, 0x7c, + 0x00, 0x00, 0x80, 0xbd, 0x00, 0x00, 0x80, 0xb5, + 0x01, 0x21, 0x2b, 0x20, 0xf9, 0xf7, 0x2f, 0xfb, + 0x02, 0x20, 0x80, 0xbd, 0x00, 0x00, 0x01, 0x49, + 0x01, 0x20, 0x08, 0x61, 0x70, 0x47, 0x7c, 0x78, + 0x01, 0x00, 0xf8, 0xb5, 0x06, 0x1c, 0x0c, 0x23, + 0x0f, 0x1c, 0x17, 0x49, 0x58, 0x43, 0x45, 0x18, + 0x6c, 0x68, 0x30, 0x1c, 0x0b, 0xf0, 0x3f, 0xfe, + 0x00, 0x2f, 0x09, 0xd1, 0x30, 0x1c, 0x3c, 0x00, + 0x74, 0x7c, 0x00, 0x00, 0x03, 0xf0, 0xee, 0xfe, + 0x41, 0x20, 0x07, 0x55, 0x11, 0x48, 0x21, 0x1c, + 0xff, 0xf7, 0xa6, 0xff, 0xf8, 0xbd, 0x41, 0x20, + 0x07, 0x55, 0xa0, 0x6b, 0x00, 0x28, 0x03, 0xd0, + 0x20, 0x1c, 0x00, 0xf0, 0xdf, 0xf9, 0xf5, 0xe7, + 0x20, 0x1c, 0x00, 0xf0, 0xdb, 0xf9, 0xac, 0x68, + 0x00, 0x2c, 0x02, 0xd0, 0x00, 0x20, 0xa8, 0x60, + 0xed, 0xe7, 0x30, 0x1c, 0x05, 0xf0, 0x34, 0xf9, + 0x3c, 0x00, 0xb0, 0x7c, 0x00, 0x00, 0x04, 0x1c, + 0xe8, 0xd1, 0x08, 0x21, 0x0c, 0x20, 0xf9, 0xf7, + 0xf4, 0xfa, 0xe3, 0xe7, 0x00, 0x00, 0x60, 0x7b, + 0x01, 0x00, 0x55, 0x80, 0x00, 0x00, 0x07, 0x4a, + 0x80, 0xb5, 0x50, 0x70, 0x51, 0x60, 0x12, 0x78, + 0x06, 0x4b, 0x80, 0x00, 0x52, 0x01, 0xd2, 0x18, + 0x10, 0x18, 0x40, 0x38, 0x02, 0x68, 0x08, 0x1c, + 0xf8, 0xf7, 0x7b, 0xfb, 0x80, 0xbd, 0x78, 0x69, + 0x01, 0x00, 0x3c, 0x00, 0xec, 0x7c, 0x00, 0x00, + 0xfc, 0x42, 0x01, 0x00, 0xb0, 0xb5, 0x0a, 0x49, + 0x04, 0x1c, 0xc8, 0x70, 0x08, 0x4d, 0xe4, 0x35, + 0xa8, 0x7a, 0x08, 0x71, 0x08, 0x2c, 0x01, 0xd3, + 0xf9, 0xf7, 0xfc, 0xfa, 0xa8, 0x7a, 0x05, 0x49, + 0x40, 0x01, 0x40, 0x18, 0xa1, 0x00, 0x40, 0x58, + 0xf8, 0xf7, 0x60, 0xfb, 0xb0, 0xbd, 0x00, 0x00, + 0x60, 0x6c, 0x01, 0x00, 0x80, 0x43, 0x01, 0x00, + 0x80, 0xb5, 0x00, 0x28, 0x3c, 0x00, 0x28, 0x7d, + 0x00, 0x00, 0x01, 0xd0, 0x09, 0xf0, 0x1d, 0xf9, + 0x80, 0xbd, 0xb0, 0xb5, 0x05, 0x1c, 0x0c, 0x1c, + 0x00, 0x20, 0x08, 0x60, 0x68, 0x68, 0x09, 0xf0, + 0x36, 0xfb, 0x6c, 0x60, 0xb0, 0xbd, 0x10, 0xb5, + 0x04, 0x1c, 0x09, 0xf0, 0x34, 0xfb, 0x21, 0x68, + 0x00, 0x29, 0x00, 0xd1, 0x64, 0x60, 0x10, 0xbd, + 0x00, 0x00, 0x00, 0x21, 0x01, 0x60, 0x40, 0x60, + 0x70, 0x47, 0xf8, 0xb5, 0x46, 0x68, 0x3c, 0x00, + 0x64, 0x7d, 0x00, 0x00, 0x04, 0x1c, 0x40, 0x6a, + 0x35, 0x1c, 0x0a, 0x35, 0x00, 0x28, 0x04, 0xd0, + 0x20, 0x1c, 0xf9, 0xf7, 0x89, 0xfd, 0x07, 0x1c, + 0x00, 0xe0, 0x04, 0x27, 0x29, 0x1c, 0x60, 0x69, + 0x00, 0xf0, 0xf6, 0xfc, 0x79, 0x00, 0x0f, 0x18, + 0xba, 0x88, 0xf1, 0x8a, 0x05, 0x1c, 0x8a, 0x42, + 0x05, 0xd1, 0x30, 0x88, 0x00, 0x05, 0x02, 0xd5, + 0x04, 0xf0, 0xbe, 0xfb, 0x3c, 0xe0, 0x28, 0x68, + 0x3c, 0x00, 0xa0, 0x7d, 0x00, 0x00, 0x00, 0x28, + 0x0f, 0xd0, 0x01, 0x32, 0x8a, 0x42, 0x04, 0xd1, + 0xf9, 0xf7, 0x0f, 0xfc, 0x21, 0x68, 0xc1, 0x60, + 0x0b, 0xe0, 0xf9, 0xf7, 0xf0, 0xfb, 0xf0, 0x8a, + 0x00, 0x07, 0x04, 0xd0, 0x00, 0x21, 0x29, 0x60, + 0x29, 0xe0, 0x08, 0x07, 0x27, 0xd1, 0x20, 0x68, + 0x28, 0x60, 0xf0, 0x8a, 0xb8, 0x80, 0x13, 0x48, + 0x01, 0x68, 0x01, 0x31, 0x01, 0x60, 0x31, 0x88, + 0x49, 0x05, 0x3c, 0x00, 0xdc, 0x7d, 0x00, 0x00, + 0x18, 0xd4, 0x29, 0x68, 0x21, 0x60, 0x00, 0x21, + 0x29, 0x60, 0xe1, 0x69, 0x00, 0x29, 0x0d, 0xd0, + 0x89, 0x79, 0x02, 0x29, 0x0a, 0xd1, 0x08, 0x21, + 0x21, 0x86, 0x21, 0x1c, 0x38, 0x31, 0xa1, 0x62, + 0x22, 0x1c, 0xdc, 0x30, 0x08, 0x49, 0x02, 0xf0, + 0x81, 0xf9, 0xf8, 0xbd, 0x20, 0x1c, 0x00, 0xf0, + 0x5f, 0xf8, 0xfa, 0xe7, 0x20, 0x1c, 0xf9, 0xf7, + 0xef, 0xfc, 0xf6, 0xe7, 0x3c, 0x00, 0x18, 0x7e, + 0x00, 0x00, 0x20, 0x68, 0xf9, 0xf7, 0xbd, 0xfb, + 0xf7, 0xe7, 0xc4, 0x69, 0x01, 0x00, 0xb9, 0x71, + 0x00, 0x00, 0xf8, 0xb5, 0x0f, 0x1c, 0x09, 0x78, + 0x01, 0x24, 0xc9, 0x07, 0x21, 0xd5, 0x02, 0xf0, + 0x8c, 0xff, 0x00, 0x28, 0x01, 0xd0, 0x00, 0x24, + 0x1b, 0xe0, 0x0e, 0x4e, 0x75, 0x6e, 0x00, 0x2d, + 0x17, 0xd0, 0x34, 0x6e, 0x06, 0x22, 0x31, 0x1c, + 0x38, 0x1c, 0xf8, 0xf7, 0xd4, 0xfa, 0x3c, 0x00, + 0x54, 0x7e, 0x00, 0x00, 0x00, 0x28, 0x05, 0xd1, + 0x01, 0x20, 0x00, 0x2c, 0x00, 0xd0, 0x00, 0x20, + 0x04, 0x1c, 0x03, 0xe0, 0x01, 0x3d, 0x06, 0x36, + 0x00, 0x2d, 0xee, 0xd1, 0x00, 0x2c, 0x03, 0xd1, + 0x02, 0x4e, 0xb0, 0x6e, 0x01, 0x30, 0xb0, 0x66, + 0x20, 0x1c, 0xf8, 0xbd, 0x10, 0x79, 0x01, 0x00, + 0x30, 0xb5, 0x05, 0x1c, 0x00, 0x20, 0x06, 0x49, + 0x00, 0x22, 0x1c, 0x23, 0xcc, 0x56, 0xac, 0x42, + 0x3c, 0x00, 0x90, 0x7e, 0x00, 0x00, 0x01, 0xd1, + 0x08, 0x1c, 0x30, 0xbd, 0x01, 0x32, 0x48, 0x31, + 0x01, 0x2a, 0xf5, 0xd3, 0x30, 0xbd, 0xcc, 0x6d, + 0x01, 0x00, 0x10, 0xb5, 0x08, 0x4c, 0x00, 0x22, + 0x1c, 0x23, 0x53, 0x43, 0xe3, 0x58, 0x83, 0x42, + 0x04, 0xd1, 0x1c, 0x20, 0x50, 0x43, 0x00, 0x19, + 0x0a, 0x60, 0x10, 0xbd, 0x01, 0x32, 0x0e, 0x2a, + 0xf2, 0xd3, 0x00, 0x20, 0x10, 0xbd, 0xdc, 0x71, + 0x01, 0x00, 0x3c, 0x00, 0xcc, 0x7e, 0x00, 0x00, + 0xf0, 0xb5, 0x41, 0x68, 0x95, 0xb0, 0x07, 0x1c, + 0x90, 0x37, 0x13, 0x91, 0x04, 0x1c, 0xf8, 0x78, + 0x25, 0x1c, 0x80, 0x35, 0xc6, 0x07, 0x28, 0x79, + 0xf6, 0x0f, 0x4a, 0x49, 0x02, 0x28, 0x4d, 0xd1, + 0x0a, 0x6d, 0x00, 0x2a, 0x4a, 0xd0, 0x48, 0x68, + 0x01, 0x30, 0x48, 0x60, 0x0a, 0xf0, 0x58, 0xff, + 0x44, 0x49, 0x08, 0x61, 0x48, 0x61, 0x13, 0x99, + 0x09, 0x79, 0xc9, 0x07, 0x3c, 0x00, 0x08, 0x7f, + 0x00, 0x00, 0x01, 0xd4, 0x41, 0x49, 0x88, 0x61, + 0x20, 0x68, 0x06, 0x22, 0x06, 0x90, 0xa1, 0x68, + 0x03, 0xa8, 0xf8, 0xf7, 0xee, 0xfa, 0x06, 0x22, + 0x04, 0xa8, 0x02, 0x30, 0xe1, 0x68, 0xf8, 0xf7, + 0xe8, 0xfa, 0x07, 0xa8, 0x06, 0x22, 0x21, 0x69, + 0xf8, 0xf7, 0xe3, 0xfa, 0xb8, 0x78, 0x08, 0xab, + 0x00, 0x21, 0x98, 0x70, 0x0c, 0x96, 0x63, 0x6a, + 0x20, 0x1c, 0xa0, 0x30, 0x0a, 0x1c, 0x3c, 0x00, + 0x44, 0x7f, 0x00, 0x00, 0x00, 0x2b, 0x02, 0xd0, + 0x02, 0x8a, 0x52, 0x07, 0x52, 0x0f, 0x08, 0xab, + 0xda, 0x70, 0x00, 0xab, 0x99, 0x84, 0x13, 0x99, + 0x09, 0x88, 0xc9, 0x0b, 0xd9, 0x84, 0x69, 0x6b, + 0x10, 0xab, 0x10, 0x91, 0xa9, 0x6b, 0x11, 0x91, + 0x80, 0x8b, 0x29, 0x49, 0x18, 0x81, 0x09, 0x6d, + 0x03, 0xa8, 0xf8, 0xf7, 0x32, 0xfa, 0x29, 0x79, + 0x68, 0x6b, 0x0b, 0xf0, 0x4d, 0xfd, 0x29, 0x79, + 0x3c, 0x00, 0x80, 0x7f, 0x00, 0x00, 0xa8, 0x6b, + 0x0b, 0xf0, 0x67, 0xfd, 0x3d, 0xe0, 0x00, 0x28, + 0x38, 0xd1, 0x48, 0x6d, 0x14, 0x90, 0x00, 0x28, + 0x34, 0xd0, 0x20, 0x68, 0x06, 0x22, 0x03, 0x90, + 0xa1, 0x68, 0x68, 0x46, 0xf8, 0xf7, 0xab, 0xfa, + 0x06, 0x22, 0x68, 0x46, 0x80, 0x18, 0xe1, 0x68, + 0xf8, 0xf7, 0xa5, 0xfa, 0x05, 0xa8, 0x06, 0x22, + 0x21, 0x69, 0xf8, 0xf7, 0xa0, 0xfa, 0x00, 0x21, + 0x04, 0x91, 0x3c, 0x00, 0xbc, 0x7f, 0x00, 0x00, + 0xb9, 0x78, 0x08, 0xa8, 0x10, 0xab, 0x01, 0x72, + 0x08, 0x96, 0xe9, 0x68, 0x0b, 0x91, 0x69, 0x79, + 0x41, 0x72, 0x68, 0x6b, 0x0e, 0x90, 0xa8, 0x6b, + 0x10, 0x90, 0x28, 0x8d, 0xd8, 0x80, 0x68, 0x8d, + 0x18, 0x81, 0xe1, 0x69, 0x0c, 0xa8, 0x00, 0x29, + 0x04, 0xd0, 0x89, 0x79, 0x01, 0x70, 0x20, 0x6a, + 0x0d, 0x90, 0x01, 0xe0, 0x07, 0x21, 0x01, 0x70, + 0x68, 0x46, 0x14, 0x99, 0x3c, 0x00, 0xf8, 0x7f, + 0x00, 0x00, 0xf8, 0xf7, 0xef, 0xf9, 0x02, 0xe0, + 0x20, 0x68, 0xf9, 0xf7, 0xca, 0xfa, 0x20, 0x1c, + 0xf9, 0xf7, 0xf5, 0xfb, 0x15, 0xb0, 0xf0, 0xbd, + 0x00, 0x00, 0xc4, 0x69, 0x01, 0x00, 0xb0, 0xb5, + 0x04, 0x1c, 0xc0, 0x68, 0x06, 0x22, 0x01, 0x89, + 0x0c, 0x31, 0x01, 0x81, 0x05, 0x68, 0x21, 0x1c, + 0x0c, 0x3d, 0x05, 0x60, 0xa8, 0x18, 0xf8, 0xf7, + 0x64, 0xfa, 0x06, 0x22, 0xa1, 0x18, 0x3c, 0x00, + 0x34, 0x80, 0x00, 0x00, 0x28, 0x1c, 0xf8, 0xf7, + 0x5f, 0xfa, 0xa0, 0x8f, 0x00, 0x09, 0xe0, 0x62, + 0x20, 0x63, 0x03, 0x48, 0x01, 0x69, 0x20, 0x1c, + 0xf8, 0xf7, 0xc7, 0xf9, 0xb0, 0xbd, 0x00, 0x00, + 0x7c, 0x79, 0x01, 0x00, 0xf8, 0xb5, 0x06, 0x1c, + 0x60, 0x36, 0x05, 0x1c, 0x70, 0x7a, 0x0c, 0x23, + 0x25, 0x49, 0x58, 0x43, 0x44, 0x18, 0xa8, 0x6b, + 0x00, 0x27, 0x00, 0x28, 0x06, 0xd0, 0xa0, 0x78, + 0x3c, 0x00, 0x70, 0x80, 0x00, 0x00, 0x01, 0x28, + 0x03, 0xd1, 0xa7, 0x70, 0x70, 0x7a, 0x0a, 0xf0, + 0xb6, 0xfd, 0x2a, 0x1c, 0x0c, 0x21, 0x80, 0x20, + 0x0b, 0xf0, 0x95, 0xfb, 0xa8, 0x6b, 0x00, 0x28, + 0x33, 0xd0, 0xa0, 0x78, 0x02, 0x28, 0x0b, 0xd0, + 0x04, 0x28, 0x22, 0xd1, 0xa7, 0x70, 0x2f, 0x1c, + 0x40, 0x37, 0x78, 0x78, 0x02, 0x28, 0x0c, 0xd1, + 0x70, 0x7a, 0x0a, 0xf0, 0xa0, 0xfd, 0x18, 0xe0, + 0x03, 0x20, 0x3c, 0x00, 0xac, 0x80, 0x00, 0x00, + 0xa0, 0x70, 0x12, 0x49, 0x00, 0x20, 0x14, 0x39, + 0x09, 0x69, 0xf8, 0xf7, 0x90, 0xf9, 0x0f, 0xe0, + 0x2c, 0x1c, 0x07, 0xe0, 0x78, 0x78, 0x41, 0x21, + 0x22, 0x1c, 0x08, 0x55, 0x0c, 0x21, 0x80, 0x20, + 0x0b, 0xf0, 0x70, 0xfb, 0x60, 0x34, 0x60, 0x7a, + 0x04, 0xf0, 0x20, 0xff, 0x04, 0x1c, 0xf1, 0xd1, + 0x70, 0x7a, 0x40, 0x35, 0xa9, 0x8b, 0x00, 0x02, + 0x09, 0x09, 0x09, 0x04, 0x3c, 0x00, 0xe8, 0x80, + 0x00, 0x00, 0x08, 0x43, 0x81, 0x21, 0x01, 0x43, + 0x0c, 0x20, 0x0b, 0xf0, 0xa0, 0xfa, 0xf8, 0xbd, + 0x00, 0x00, 0x60, 0x7b, 0x01, 0x00, 0xf8, 0xb5, + 0x1c, 0x49, 0x05, 0x1c, 0x88, 0x6a, 0x01, 0x30, + 0x88, 0x62, 0x28, 0x1c, 0x0b, 0xf0, 0x7d, 0xfd, + 0x04, 0x1c, 0x11, 0xd0, 0x2b, 0x1c, 0x20, 0x33, + 0x1e, 0x1c, 0x5a, 0x79, 0x20, 0x1c, 0xb4, 0x30, + 0x19, 0x79, 0x14, 0x4f, 0xfd, 0xf7, 0x3c, 0x00, + 0x24, 0x81, 0x00, 0x00, 0x89, 0xf8, 0xaa, 0x7a, + 0x20, 0x1c, 0xb8, 0x30, 0xb1, 0x79, 0xfd, 0xf7, + 0xb9, 0xf8, 0x00, 0x2f, 0x04, 0xd1, 0x01, 0x21, + 0x28, 0x68, 0xfa, 0xf7, 0x6d, 0xfa, 0xf8, 0xbd, + 0x60, 0x68, 0xbc, 0x21, 0xc0, 0x8a, 0x08, 0x53, + 0x28, 0x68, 0x00, 0x21, 0xfa, 0xf7, 0x64, 0xfa, + 0x00, 0x28, 0x09, 0xd0, 0x06, 0x49, 0xc8, 0x6a, + 0x01, 0x30, 0xc8, 0x62, 0x00, 0x2c, 0xee, 0xd0, + 0x3c, 0x00, 0x60, 0x81, 0x00, 0x00, 0x20, 0x1c, + 0xf9, 0xf7, 0x47, 0xfb, 0xea, 0xe7, 0x20, 0x1c, + 0xf8, 0xf7, 0x3c, 0xf9, 0xe6, 0xe7, 0xc4, 0x69, + 0x01, 0x00, 0xa1, 0xff, 0x00, 0x00, 0xf8, 0xb5, + 0x16, 0x4c, 0x05, 0x1f, 0x00, 0x22, 0x21, 0x1c, + 0xa0, 0x31, 0x03, 0xe0, 0x28, 0x68, 0xa0, 0x42, + 0x09, 0xd0, 0x20, 0x34, 0xa1, 0x42, 0xf9, 0xd1, + 0x00, 0x2a, 0x04, 0xd1, 0x02, 0x21, 0x8e, 0x20, + 0xf9, 0xf7, 0x3c, 0x00, 0x9c, 0x81, 0x00, 0x00, + 0x83, 0xf8, 0xf8, 0xbd, 0x0d, 0x4f, 0xbe, 0x79, + 0x60, 0x69, 0x01, 0x30, 0x60, 0x61, 0xf8, 0xf7, + 0x97, 0xfd, 0xa8, 0x42, 0x07, 0xd1, 0xa0, 0x88, + 0x04, 0x30, 0xf8, 0xf7, 0x97, 0xfd, 0xe0, 0x69, + 0x01, 0x30, 0xe0, 0x61, 0x05, 0xe0, 0x20, 0x68, + 0x28, 0x60, 0x25, 0x60, 0xa0, 0x69, 0x01, 0x30, + 0xa0, 0x61, 0xbe, 0x71, 0xe5, 0xe7, 0x00, 0x00, + 0xd0, 0x5c, 0x01, 0x00, 0x3c, 0x00, 0xd8, 0x81, + 0x00, 0x00, 0x20, 0x10, 0x07, 0x00, 0x00, 0x29, + 0x01, 0xdb, 0x06, 0x29, 0x01, 0xdb, 0x02, 0x20, + 0x70, 0x47, 0x06, 0x4b, 0xc9, 0x00, 0x5a, 0x5c, + 0xc9, 0x18, 0x02, 0x70, 0x4a, 0x78, 0x42, 0x70, + 0x8a, 0x78, 0x82, 0x70, 0x49, 0x68, 0x41, 0x60, + 0x00, 0x20, 0x70, 0x47, 0x00, 0x00, 0xcc, 0x5a, + 0x01, 0x00, 0xb0, 0xb5, 0x0d, 0x1c, 0x04, 0x1c, + 0x05, 0x28, 0x01, 0xd3, 0xf9, 0xf7, 0x3c, 0x00, + 0x14, 0x82, 0x00, 0x00, 0x75, 0xf8, 0x10, 0x48, + 0x40, 0x68, 0x00, 0x28, 0x00, 0xd0, 0x03, 0x24, + 0x10, 0x2d, 0x00, 0xd3, 0x0f, 0x25, 0x06, 0x20, + 0x0b, 0x49, 0x60, 0x43, 0x12, 0x31, 0x40, 0x18, + 0x41, 0x78, 0x80, 0x78, 0x49, 0x19, 0x09, 0x06, + 0x09, 0x0e, 0x88, 0x42, 0x00, 0xd2, 0x01, 0x1c, + 0x01, 0x20, 0x88, 0x40, 0x05, 0x49, 0x01, 0x38, + 0x09, 0x68, 0x08, 0x40, 0x00, 0x04, 0x00, 0x0c, + 0x3c, 0x00, 0x50, 0x82, 0x00, 0x00, 0x02, 0xf0, + 0x44, 0xfe, 0xb0, 0xbd, 0x00, 0x00, 0xd4, 0x7a, + 0x01, 0x00, 0x08, 0x20, 0x07, 0x00, 0xb0, 0xb5, + 0x04, 0x1c, 0x0d, 0x1c, 0x09, 0xf0, 0xcf, 0xfd, + 0x00, 0x28, 0x03, 0xd1, 0x20, 0x1c, 0x09, 0xf0, + 0x82, 0xfd, 0x05, 0x61, 0xb0, 0xbd, 0x80, 0xb5, + 0x0a, 0xf0, 0x97, 0xfd, 0x03, 0x4a, 0x0c, 0x32, + 0x06, 0xca, 0x89, 0x18, 0x08, 0x1a, 0x80, 0xbd, + 0x00, 0x00, 0x3c, 0x00, 0x8c, 0x82, 0x00, 0x00, + 0xa0, 0x7d, 0x01, 0x00, 0x70, 0xb5, 0x0b, 0x4c, + 0x04, 0x9e, 0x64, 0x68, 0x0d, 0xe0, 0x65, 0x68, + 0x85, 0x42, 0x09, 0xd1, 0x20, 0x7a, 0x08, 0x70, + 0xe0, 0x68, 0x10, 0x60, 0x20, 0x69, 0x18, 0x60, + 0x20, 0x7d, 0x30, 0x80, 0x01, 0x20, 0x70, 0xbd, + 0x24, 0x68, 0x00, 0x2c, 0xef, 0xd1, 0x00, 0x20, + 0x70, 0xbd, 0x00, 0x00, 0xa4, 0x6e, 0x01, 0x00, + 0x10, 0xb5, 0x04, 0x1c, 0x3c, 0x00, 0xc8, 0x82, + 0x00, 0x00, 0x20, 0x30, 0x81, 0x7b, 0x20, 0x69, + 0x04, 0x30, 0xfd, 0xf7, 0x64, 0xf9, 0x01, 0x1c, + 0x62, 0x20, 0x02, 0x5b, 0x63, 0x6a, 0x40, 0x34, + 0x20, 0x78, 0x02, 0xf0, 0xce, 0xfd, 0x10, 0xbd, + 0x00, 0x00, 0x0b, 0x49, 0x10, 0xb5, 0x08, 0x88, + 0x8a, 0x69, 0x0a, 0x23, 0x50, 0x43, 0x58, 0x43, + 0x0e, 0xd0, 0x08, 0x4a, 0x53, 0x89, 0x94, 0x88, + 0xd2, 0x88, 0x1b, 0x19, 0x52, 0x04, 0x3c, 0x00, + 0x04, 0x83, 0x00, 0x00, 0x52, 0x0c, 0x9a, 0x18, + 0xc9, 0x68, 0x06, 0x32, 0x4a, 0x43, 0x0a, 0x21, + 0x51, 0x43, 0xf8, 0xf7, 0xfd, 0xf9, 0x10, 0xbd, + 0xc8, 0x74, 0x01, 0x00, 0x30, 0x00, 0x07, 0x00, + 0x10, 0xb5, 0x43, 0x1c, 0x01, 0xd1, 0x10, 0x48, + 0x10, 0xbd, 0x0f, 0x4a, 0x0e, 0x4b, 0x94, 0x3a, + 0x12, 0x68, 0x44, 0x3b, 0x1b, 0x7a, 0x10, 0xe0, + 0x54, 0x68, 0x84, 0x42, 0x0c, 0xd1, 0x00, 0x29, + 0x3c, 0x00, 0x40, 0x83, 0x00, 0x00, 0x0f, 0xd1, + 0x02, 0x2b, 0x03, 0xd1, 0xd4, 0x7b, 0x02, 0x2c, + 0x0a, 0xd2, 0x04, 0xe0, 0x00, 0x2b, 0x05, 0xd1, + 0xd4, 0x7b, 0xe4, 0x07, 0x04, 0xd4, 0x12, 0x68, + 0x00, 0x2a, 0xec, 0xd1, 0x00, 0x20, 0x10, 0xbd, + 0x10, 0x1c, 0x10, 0xbd, 0x00, 0x00, 0x38, 0x6f, + 0x01, 0x00, 0x01, 0x1c, 0x01, 0x20, 0x01, 0x29, + 0x00, 0xd0, 0x00, 0x20, 0x70, 0x47, 0x00, 0xb5, + 0x02, 0x1c, 0x3c, 0x00, 0x7c, 0x83, 0x00, 0x00, + 0xfd, 0xf7, 0xce, 0xf8, 0x00, 0x28, 0x08, 0xd0, + 0x10, 0x1c, 0xff, 0xf7, 0xf1, 0xff, 0x18, 0x23, + 0x03, 0x49, 0x58, 0x43, 0x40, 0x18, 0x00, 0x69, + 0x00, 0xbd, 0x00, 0x20, 0x00, 0xbd, 0x00, 0x00, + 0x94, 0x67, 0x01, 0x00, 0x80, 0xb5, 0x00, 0x28, + 0x00, 0xd1, 0x08, 0x48, 0x07, 0x49, 0x00, 0x68, + 0x50, 0x31, 0x09, 0x7a, 0x00, 0x29, 0x02, 0xd0, + 0x02, 0x29, 0x04, 0xd1, 0x3c, 0x00, 0xb8, 0x83, + 0x00, 0x00, 0x00, 0xe0, 0x01, 0x21, 0x00, 0xf0, + 0x06, 0xf8, 0x80, 0xbd, 0x00, 0x20, 0x80, 0xbd, + 0x00, 0x00, 0xa4, 0x6e, 0x01, 0x00, 0x12, 0x4a, + 0x12, 0x4b, 0x12, 0x7a, 0x2c, 0x3b, 0x00, 0x2a, + 0x03, 0xd1, 0x5a, 0x68, 0x00, 0x2a, 0x18, 0xd1, + 0x04, 0xe0, 0x02, 0x2a, 0x02, 0xd1, 0x9a, 0x68, + 0x00, 0x2a, 0x12, 0xd1, 0x00, 0x20, 0x70, 0x47, + 0xc2, 0x7b, 0x8a, 0x42, 0x01, 0xd0, 0x3c, 0x00, + 0xf4, 0x83, 0x00, 0x00, 0x03, 0x2a, 0x0a, 0xd1, + 0x82, 0x7e, 0x01, 0x2a, 0x07, 0xd1, 0x02, 0x7f, + 0x01, 0x32, 0x12, 0x06, 0x12, 0x0e, 0x02, 0x77, + 0xc3, 0x7e, 0x9a, 0x42, 0xee, 0xd2, 0x00, 0x68, + 0x00, 0x28, 0xec, 0xd1, 0x70, 0x47, 0x00, 0x00, + 0xf4, 0x6e, 0x01, 0x00, 0xf7, 0xb5, 0x84, 0x46, + 0x00, 0x20, 0x01, 0x27, 0x00, 0x24, 0x00, 0x25, + 0x88, 0xb0, 0x07, 0xe0, 0x62, 0x46, 0x52, 0x5d, + 0x3c, 0x00, 0x30, 0x84, 0x00, 0x00, 0x00, 0x2a, + 0x05, 0xd0, 0xab, 0x00, 0x6e, 0x46, 0xf2, 0x50, + 0x01, 0x35, 0x8d, 0x42, 0xf5, 0xd3, 0x00, 0x2d, + 0x00, 0xd0, 0x01, 0x20, 0x00, 0x28, 0x28, 0xd0, + 0x00, 0x27, 0x16, 0x4c, 0x6e, 0x46, 0x22, 0xe0, + 0x20, 0x1c, 0x00, 0xf0, 0x30, 0xf8, 0x01, 0x28, + 0x01, 0xd0, 0x07, 0x28, 0x06, 0xd1, 0x00, 0x21, + 0x20, 0x1c, 0x00, 0xf0, 0x34, 0xf8, 0x31, 0x68, + 0x88, 0x42, 0x3c, 0x00, 0x6c, 0x84, 0x00, 0x00, + 0x01, 0xd2, 0x02, 0x27, 0x14, 0xe0, 0x20, 0x68, + 0xc9, 0x00, 0x0c, 0x18, 0x08, 0x3c, 0x20, 0x1c, + 0x00, 0xf0, 0x1c, 0xf8, 0x07, 0x28, 0x07, 0xd1, + 0x01, 0x20, 0x01, 0x2d, 0x00, 0xd0, 0x00, 0x20, + 0x24, 0x68, 0x00, 0x28, 0x00, 0xd1, 0x08, 0x34, + 0x01, 0x3d, 0x04, 0x36, 0x00, 0x2d, 0xda, 0xd1, + 0x0a, 0x98, 0x04, 0x60, 0x0b, 0xb0, 0x38, 0x1c, + 0xf0, 0xbd, 0x00, 0x00, 0x3c, 0x00, 0xa8, 0x84, + 0x00, 0x00, 0x20, 0x52, 0x01, 0x00, 0x00, 0x68, + 0x00, 0x29, 0x01, 0xd0, 0x80, 0x02, 0x80, 0x0a, + 0x70, 0x47, 0x10, 0xb5, 0x40, 0x68, 0x80, 0x00, + 0x44, 0x0f, 0x08, 0x2c, 0x03, 0xd3, 0x02, 0x21, + 0x87, 0x20, 0xf8, 0xf7, 0xec, 0xfe, 0x20, 0x1c, + 0x10, 0xbd, 0x00, 0x29, 0x02, 0xd0, 0x00, 0x68, + 0x80, 0x0d, 0x70, 0x47, 0x40, 0x68, 0x80, 0x05, + 0x80, 0x0d, 0x70, 0x47, 0x00, 0x00, 0x3c, 0x00, + 0xe4, 0x84, 0x00, 0x00, 0x10, 0xb5, 0x40, 0x68, + 0x40, 0x01, 0x44, 0x0f, 0x05, 0x2c, 0x03, 0xd3, + 0x05, 0x21, 0x87, 0x20, 0xf8, 0xf7, 0xd6, 0xfe, + 0x20, 0x1c, 0x10, 0xbd, 0xf8, 0xb5, 0x05, 0x1c, + 0x88, 0x0a, 0x00, 0x90, 0x1c, 0x48, 0x8e, 0x05, + 0xc0, 0x69, 0xb6, 0x0d, 0x17, 0x1c, 0x1c, 0x1c, + 0x00, 0x28, 0x05, 0xd1, 0x18, 0x48, 0x81, 0x69, + 0x8d, 0x42, 0x1d, 0xd0, 0x85, 0x61, 0x11, 0xe0, + 0x3c, 0x00, 0x20, 0x85, 0x00, 0x00, 0xfd, 0xf7, + 0xe8, 0xf8, 0x15, 0x49, 0x09, 0x78, 0x0e, 0x29, + 0x07, 0xd1, 0x00, 0x28, 0x05, 0xd0, 0x11, 0x49, + 0x50, 0x31, 0x06, 0x23, 0xc9, 0x56, 0xf9, 0xf7, + 0x06, 0xfa, 0x0e, 0x49, 0x00, 0x20, 0xc8, 0x61, + 0x8d, 0x61, 0x29, 0x1c, 0x20, 0x1c, 0xf8, 0xf7, + 0xe2, 0xf8, 0x79, 0x43, 0x20, 0x1c, 0xf8, 0xf7, + 0xde, 0xf8, 0x08, 0x48, 0x41, 0x61, 0x20, 0x1c, + 0x00, 0x99, 0x3c, 0x00, 0x5c, 0x85, 0x00, 0x00, + 0xf8, 0xf7, 0xd8, 0xf8, 0x05, 0x48, 0x40, 0x69, + 0x0a, 0x18, 0xa2, 0x42, 0x01, 0xd2, 0x40, 0x18, + 0x01, 0xe0, 0x40, 0x18, 0x00, 0x1b, 0x80, 0x02, + 0x80, 0x19, 0xf8, 0xbd, 0xac, 0x7c, 0x01, 0x00, + 0x11, 0x67, 0x01, 0x00, 0xf8, 0xb5, 0x0f, 0x1c, + 0x06, 0x1c, 0x14, 0x1c, 0x1d, 0x1c, 0x07, 0xf0, + 0xa1, 0xfc, 0x0e, 0x28, 0x09, 0xd1, 0x20, 0x1c, + 0x02, 0xf0, 0xfc, 0xfb, 0x3c, 0x00, 0x98, 0x85, + 0x00, 0x00, 0x00, 0x28, 0x04, 0xd0, 0x08, 0x48, + 0x00, 0x78, 0x02, 0xf0, 0xe4, 0xfb, 0x04, 0x1c, + 0x01, 0x21, 0x00, 0x2e, 0xac, 0x72, 0x00, 0xd0, + 0x39, 0x1c, 0x20, 0x1c, 0x02, 0xf0, 0x07, 0xfc, + 0x28, 0x60, 0x00, 0x20, 0x28, 0x72, 0x6c, 0x72, + 0xf8, 0xbd, 0x90, 0x57, 0x01, 0x00, 0x03, 0x1c, + 0x0a, 0x48, 0x10, 0xb5, 0x00, 0x24, 0x02, 0x1c, + 0xa0, 0x32, 0x03, 0xe0, 0x81, 0x88, 0x3c, 0x00, + 0xd4, 0x85, 0x00, 0x00, 0x99, 0x42, 0x09, 0xd2, + 0x20, 0x30, 0x82, 0x42, 0xf9, 0xd1, 0x00, 0x2c, + 0x04, 0xd1, 0x02, 0x21, 0x8e, 0x20, 0xf8, 0xf7, + 0x5d, 0xfe, 0x00, 0x20, 0x10, 0xbd, 0x00, 0x00, + 0xd0, 0x5c, 0x01, 0x00, 0xff, 0xb5, 0x06, 0x1c, + 0x00, 0x20, 0x81, 0xb0, 0x10, 0x60, 0x1f, 0x1c, + 0x01, 0x25, 0x14, 0x1c, 0x30, 0x1c, 0xff, 0xf7, + 0x6d, 0xff, 0x05, 0x28, 0x12, 0xd2, 0x02, 0xa3, + 0x3c, 0x00, 0x10, 0x86, 0x00, 0x00, 0x1b, 0x5c, + 0x5b, 0x00, 0x9f, 0x44, 0x00, 0x00, 0x03, 0x03, + 0x03, 0x03, 0x08, 0x00, 0x39, 0x1c, 0x30, 0x1c, + 0xff, 0xf7, 0x55, 0xff, 0x03, 0xe0, 0x02, 0x98, + 0xf8, 0xf7, 0xeb, 0xf8, 0x01, 0x30, 0x20, 0x60, + 0x04, 0xe0, 0x05, 0x21, 0x87, 0x20, 0xf8, 0xf7, + 0x34, 0xfe, 0x00, 0x25, 0x20, 0x68, 0x80, 0x28, + 0x04, 0xd9, 0x06, 0x21, 0x87, 0x20, 0xf8, 0xf7, + 0x2c, 0xfe, 0x3c, 0x00, 0x4c, 0x86, 0x00, 0x00, + 0x00, 0x25, 0x28, 0x1c, 0x05, 0xb0, 0xf0, 0xbd, + 0x70, 0xb5, 0x17, 0x4c, 0x60, 0x6c, 0x00, 0x28, + 0x01, 0xd0, 0x01, 0x20, 0x1d, 0xe0, 0x16, 0x4e, + 0x14, 0x4d, 0x31, 0x88, 0xa0, 0x6c, 0x00, 0x28, + 0x08, 0xd0, 0x28, 0x78, 0x81, 0x42, 0x05, 0xd9, + 0xf8, 0xf7, 0x4c, 0xf8, 0x01, 0x38, 0xfa, 0xf7, + 0x51, 0xfe, 0x0e, 0xe0, 0xe0, 0x6c, 0x00, 0x28, + 0x0a, 0xd0, 0x00, 0x20, 0x3c, 0x00, 0x88, 0x86, + 0x00, 0x00, 0xfa, 0xf7, 0x4a, 0xfe, 0x29, 0x78, + 0x32, 0x88, 0x91, 0x42, 0x04, 0xd9, 0x90, 0x42, + 0x02, 0xd9, 0x10, 0x1c, 0x00, 0xe0, 0x08, 0x1c, + 0xfa, 0xf7, 0xdf, 0xfd, 0xe1, 0x6b, 0x44, 0x1a, + 0x0a, 0xf0, 0x81, 0xfb, 0x20, 0x1a, 0x00, 0xd5, + 0x00, 0x20, 0x70, 0xbd, 0x00, 0x00, 0x44, 0x7d, + 0x01, 0x00, 0xf8, 0x60, 0x01, 0x00, 0xfc, 0x60, + 0x01, 0x00, 0xff, 0xb5, 0x27, 0x4e, 0x3c, 0x00, + 0xc4, 0x86, 0x00, 0x00, 0x04, 0x1c, 0xb0, 0x79, + 0x0f, 0x1c, 0x15, 0x1c, 0x81, 0xb0, 0x00, 0x90, + 0x0a, 0xf0, 0x6c, 0xfb, 0xc1, 0x19, 0x23, 0x48, + 0x07, 0x68, 0x00, 0x2f, 0x05, 0xd1, 0x0a, 0x21, + 0x80, 0x20, 0xf8, 0xf7, 0xdf, 0xfd, 0x05, 0xb0, + 0xf0, 0xbd, 0x1e, 0x48, 0x40, 0x68, 0x84, 0x46, + 0x00, 0x28, 0x01, 0xd1, 0x00, 0x22, 0x0e, 0xe0, + 0x82, 0x68, 0x03, 0x68, 0xab, 0x42, 0x07, 0xd1, + 0x3c, 0x00, 0x00, 0x87, 0x00, 0x00, 0x03, 0x79, + 0xa3, 0x42, 0x04, 0xd1, 0x0b, 0x21, 0x80, 0x20, + 0xf8, 0xf7, 0xcb, 0xfd, 0x23, 0xe0, 0xc0, 0x68, + 0x00, 0x28, 0xf1, 0xd1, 0x13, 0x4b, 0xf8, 0x68, + 0x18, 0x60, 0x3d, 0x60, 0x3c, 0x71, 0xb9, 0x60, + 0x04, 0x98, 0x8d, 0x1a, 0x38, 0x61, 0x60, 0x46, + 0x00, 0x23, 0x05, 0xe0, 0x84, 0x68, 0xa4, 0x1a, + 0xac, 0x42, 0x03, 0xda, 0x03, 0x1c, 0xc0, 0x68, + 0x00, 0x28, 0x3c, 0x00, 0x3c, 0x87, 0x00, 0x00, + 0xf7, 0xd1, 0xf8, 0x60, 0x00, 0x2b, 0x08, 0xd1, + 0x07, 0x48, 0x3b, 0x1c, 0x47, 0x60, 0x08, 0x48, + 0x06, 0x4a, 0x00, 0x88, 0x0a, 0xf0, 0x8a, 0xfb, + 0x00, 0xe0, 0xdf, 0x60, 0x00, 0x98, 0xb0, 0x71, + 0xc3, 0xe7, 0x00, 0x00, 0x20, 0x10, 0x07, 0x00, + 0x7c, 0x5d, 0x01, 0x00, 0x21, 0x38, 0x01, 0x00, + 0x2c, 0x74, 0x01, 0x00, 0xf3, 0xb5, 0x83, 0xb0, + 0x04, 0x1c, 0x09, 0xd0, 0x3c, 0x00, 0x78, 0x87, + 0x00, 0x00, 0x20, 0x1c, 0x04, 0x99, 0x09, 0xf0, + 0x8e, 0xfb, 0x00, 0x28, 0x03, 0xd0, 0x20, 0x1c, + 0x30, 0x30, 0x05, 0xb0, 0xf0, 0xbd, 0x0a, 0xf0, + 0x0e, 0xfb, 0x1e, 0x4a, 0x00, 0x26, 0x04, 0x9f, + 0x01, 0x96, 0x00, 0x90, 0x02, 0x92, 0x02, 0x9c, + 0x00, 0x25, 0x39, 0x1c, 0x20, 0x1c, 0x14, 0x30, + 0x02, 0xf0, 0xc5, 0xfa, 0x00, 0x28, 0x01, 0xd0, + 0x26, 0x1c, 0x03, 0xe0, 0x01, 0x35, 0x3c, 0x00, + 0xb4, 0x87, 0x00, 0x00, 0x1c, 0x34, 0x04, 0x2d, + 0xf2, 0xd3, 0x00, 0x2e, 0x22, 0xd1, 0x01, 0x98, + 0x13, 0x4f, 0x01, 0x30, 0x01, 0x90, 0x02, 0x28, + 0xe8, 0xd3, 0x01, 0x21, 0xc9, 0x06, 0x02, 0x9a, + 0x00, 0x20, 0x13, 0x69, 0x00, 0x9c, 0xe3, 0x1a, + 0x8b, 0x42, 0x01, 0xdd, 0x19, 0x1c, 0x16, 0x1c, + 0x01, 0x30, 0x1c, 0x32, 0x04, 0x28, 0xf4, 0xd3, + 0x30, 0x68, 0x00, 0x28, 0x01, 0xd0, 0xf8, 0xf7, + 0x3c, 0x00, 0xf0, 0x87, 0x00, 0x00, 0xd3, 0xfe, + 0x30, 0x1c, 0xfd, 0xf7, 0x4a, 0xff, 0x30, 0x1c, + 0x14, 0x30, 0x06, 0x22, 0x04, 0x99, 0xf7, 0xf7, + 0x7a, 0xfe, 0x00, 0x9c, 0x30, 0x1c, 0x34, 0x61, + 0xbd, 0xe7, 0x30, 0x6a, 0x01, 0x00, 0x34, 0x42, + 0x01, 0x00, 0x09, 0x49, 0x10, 0xb5, 0x4c, 0x69, + 0x03, 0xe0, 0xe1, 0x68, 0x81, 0x42, 0x03, 0xd0, + 0x24, 0x68, 0x00, 0x2c, 0xf9, 0xd1, 0x01, 0xe0, + 0x00, 0x2c, 0x3c, 0x00, 0x2c, 0x88, 0x00, 0x00, + 0x03, 0xd1, 0x02, 0x21, 0x02, 0x20, 0xf8, 0xf7, + 0x37, 0xfd, 0x20, 0x1c, 0x10, 0xbd, 0x00, 0x00, + 0xfc, 0x5a, 0x01, 0x00, 0x10, 0xb5, 0xc3, 0x07, + 0x06, 0xd5, 0x08, 0x4b, 0x5c, 0x69, 0x0c, 0x43, + 0x5c, 0x61, 0x1c, 0x7e, 0x14, 0x43, 0x1c, 0x76, + 0x80, 0x07, 0x06, 0xd5, 0x04, 0x48, 0x43, 0x69, + 0x19, 0x43, 0x41, 0x61, 0x01, 0x7e, 0x11, 0x43, + 0x01, 0x76, 0x10, 0xbd, 0x3c, 0x00, 0x68, 0x88, + 0x00, 0x00, 0xfc, 0x57, 0x01, 0x00, 0x18, 0x58, + 0x01, 0x00, 0x70, 0xb5, 0x0d, 0x1c, 0x04, 0x1c, + 0x16, 0x1c, 0x00, 0xf0, 0x08, 0xf8, 0xa0, 0x07, + 0xc0, 0x17, 0x01, 0x30, 0x32, 0x1c, 0x29, 0x1c, + 0x00, 0xf0, 0x21, 0xf8, 0x70, 0xbd, 0x10, 0xb5, + 0xc3, 0x07, 0x06, 0xd5, 0x08, 0x4b, 0x5c, 0x69, + 0x8c, 0x43, 0x5c, 0x61, 0x1c, 0x7e, 0x94, 0x43, + 0x1c, 0x76, 0x80, 0x07, 0x06, 0xd5, 0x3c, 0x00, + 0xa4, 0x88, 0x00, 0x00, 0x04, 0x48, 0x43, 0x69, + 0x8b, 0x43, 0x43, 0x61, 0x01, 0x7e, 0x91, 0x43, + 0x01, 0x76, 0x10, 0xbd, 0xfc, 0x57, 0x01, 0x00, + 0x18, 0x58, 0x01, 0x00, 0x03, 0x22, 0x11, 0x1f, + 0x80, 0xb5, 0x01, 0x20, 0x00, 0xf0, 0x02, 0xf8, + 0x80, 0xbd, 0x00, 0x00, 0x30, 0xb5, 0x15, 0x1c, + 0x0c, 0x1c, 0x00, 0x28, 0x87, 0xb0, 0x02, 0xd0, + 0x1c, 0x22, 0x22, 0x49, 0x01, 0xe0, 0x22, 0x49, + 0x3c, 0x00, 0xe0, 0x88, 0x00, 0x00, 0x1c, 0x22, + 0x68, 0x46, 0xf7, 0xf7, 0x64, 0xfe, 0x05, 0x99, + 0x00, 0xab, 0x1a, 0x7e, 0x8c, 0x43, 0x20, 0x1c, + 0x95, 0x43, 0x02, 0x9a, 0x29, 0x1c, 0x02, 0x40, + 0x02, 0x92, 0x01, 0x9a, 0x02, 0x40, 0x01, 0x92, + 0x00, 0x9a, 0x02, 0x40, 0x00, 0x92, 0x03, 0x9a, + 0x02, 0x40, 0x03, 0x92, 0x98, 0x7c, 0x08, 0x40, + 0x98, 0x74, 0x58, 0x7c, 0x08, 0x40, 0x58, 0x74, + 0x18, 0x7c, 0x3c, 0x00, 0x1c, 0x89, 0x00, 0x00, + 0x08, 0x40, 0x18, 0x74, 0xd8, 0x7c, 0x08, 0x40, + 0xd8, 0x74, 0x02, 0x99, 0x10, 0x48, 0x41, 0x61, + 0x01, 0xaa, 0x06, 0xca, 0x91, 0x43, 0x81, 0x61, + 0x81, 0x68, 0x01, 0x9a, 0x11, 0x43, 0x81, 0x60, + 0x81, 0x68, 0x00, 0x9a, 0x91, 0x43, 0x81, 0x60, + 0x00, 0xaa, 0x06, 0xca, 0x11, 0x43, 0x42, 0x68, + 0x11, 0x43, 0x41, 0x60, 0x41, 0x68, 0x03, 0x9a, + 0x91, 0x43, 0x41, 0x60, 0x3c, 0x00, 0x58, 0x89, + 0x00, 0x00, 0x04, 0xa8, 0x0b, 0xf0, 0x01, 0xf8, + 0x07, 0xb0, 0x30, 0xbd, 0x00, 0x00, 0xfc, 0x57, + 0x01, 0x00, 0x18, 0x58, 0x01, 0x00, 0x10, 0x00, + 0x07, 0x00, 0x10, 0xb5, 0x04, 0x1c, 0x01, 0x1c, + 0x01, 0x20, 0x08, 0xf0, 0xe0, 0xf9, 0x00, 0x2c, + 0x02, 0xd0, 0x03, 0xf0, 0x1c, 0xff, 0x10, 0xbd, + 0xfe, 0xf7, 0xd1, 0xfc, 0x10, 0xbd, 0xf0, 0xb5, + 0x0c, 0x1c, 0x01, 0x0e, 0x01, 0x23, 0x3c, 0x00, + 0x94, 0x89, 0x00, 0x00, 0x1b, 0x06, 0x09, 0x06, + 0x99, 0x42, 0x9f, 0xb0, 0x28, 0xd1, 0x17, 0x49, + 0x08, 0x40, 0x00, 0x21, 0x1a, 0x28, 0x00, 0xd3, + 0x02, 0x21, 0x00, 0x29, 0x19, 0xd1, 0xc5, 0x00, + 0x13, 0x4f, 0x10, 0xa8, 0xee, 0x19, 0xb2, 0x88, + 0x21, 0x68, 0xf7, 0xf7, 0x9d, 0xfd, 0x20, 0x1c, + 0xf8, 0xf7, 0xea, 0xfd, 0x7a, 0x59, 0x01, 0xa9, + 0x10, 0xa8, 0xf7, 0xf7, 0x07, 0xfd, 0x00, 0x28, + 0x3c, 0x00, 0xd0, 0x89, 0x00, 0x00, 0x05, 0xd0, + 0x10, 0x98, 0x01, 0xa9, 0x01, 0x90, 0xb0, 0x79, + 0x00, 0xf0, 0x9d, 0xf8, 0x1f, 0xb0, 0xf0, 0xbd, + 0x2a, 0x20, 0xf8, 0xf7, 0x5e, 0xfc, 0x20, 0x1c, + 0xf8, 0xf7, 0xd5, 0xfd, 0xf6, 0xe7, 0x03, 0x21, + 0x2a, 0x20, 0xf8, 0xf7, 0x56, 0xfc, 0xf1, 0xe7, + 0x00, 0x00, 0x7f, 0xff, 0xff, 0x00, 0x24, 0x45, + 0x01, 0x00, 0x10, 0xb5, 0x0c, 0x1c, 0x80, 0x28, + 0x02, 0xd0, 0x3c, 0x00, 0x0c, 0x8a, 0x00, 0x00, + 0x81, 0x28, 0x08, 0xd1, 0x03, 0xe0, 0x20, 0x1c, + 0x00, 0xf0, 0x06, 0xf9, 0x10, 0xbd, 0x20, 0x1c, + 0xf8, 0xf7, 0xbc, 0xfd, 0x10, 0xbd, 0x03, 0x21, + 0x2c, 0x20, 0xf8, 0xf7, 0x3d, 0xfc, 0xf6, 0xe7, + 0xf0, 0xb5, 0x0c, 0x1c, 0x00, 0x21, 0x8b, 0xb0, + 0x0a, 0x91, 0x01, 0x0e, 0x01, 0x23, 0x1b, 0x06, + 0x09, 0x06, 0x99, 0x42, 0x2a, 0xd1, 0x18, 0x49, + 0x08, 0x40, 0x06, 0x1c, 0x3c, 0x00, 0x48, 0x8a, + 0x00, 0x00, 0x06, 0x2e, 0x01, 0xd3, 0x07, 0x21, + 0x24, 0xe0, 0x20, 0x89, 0xf8, 0xf7, 0xf1, 0xfe, + 0x22, 0x89, 0x21, 0x68, 0x05, 0x1c, 0xf7, 0xf7, + 0x4c, 0xfd, 0x20, 0x1c, 0xf8, 0xf7, 0x99, 0xfd, + 0xf4, 0x00, 0x0f, 0x4e, 0x28, 0x1c, 0x0a, 0xaa, + 0x69, 0x46, 0x33, 0x59, 0xf7, 0xf7, 0xb4, 0xfc, + 0x00, 0x28, 0x01, 0xd0, 0x01, 0x28, 0x07, 0xd1, + 0x28, 0x68, 0x69, 0x46, 0x00, 0x90, 0x3c, 0x00, + 0x84, 0x8a, 0x00, 0x00, 0xa0, 0x19, 0x00, 0x79, + 0x0a, 0x9a, 0x00, 0xf0, 0x09, 0xf9, 0x28, 0x1c, + 0xf8, 0xf7, 0xb0, 0xfe, 0x0b, 0xb0, 0xf0, 0xbd, + 0x01, 0x21, 0x2b, 0x20, 0xf8, 0xf7, 0x02, 0xfc, + 0xf8, 0xe7, 0x00, 0x00, 0x7f, 0xff, 0xff, 0x00, + 0x28, 0x46, 0x01, 0x00, 0x0a, 0x1c, 0x01, 0x0e, + 0x01, 0x23, 0x1b, 0x06, 0x09, 0x06, 0x99, 0x42, + 0x80, 0xb5, 0x08, 0xd0, 0x5b, 0x00, 0x99, 0x42, + 0x3c, 0x00, 0xc0, 0x8a, 0x00, 0x00, 0x0b, 0xd1, + 0x00, 0x06, 0x00, 0x0e, 0x11, 0x1c, 0x00, 0xf0, + 0x0e, 0xf9, 0x80, 0xbd, 0x05, 0x49, 0x01, 0x40, + 0x10, 0x1c, 0x05, 0xf0, 0xa2, 0xf9, 0x80, 0xbd, + 0x01, 0x21, 0x2d, 0x20, 0xf8, 0xf7, 0xe1, 0xfb, + 0x80, 0xbd, 0x7f, 0xff, 0xff, 0x00, 0x80, 0xb5, + 0x01, 0x1c, 0x0f, 0x20, 0x00, 0xf0, 0x13, 0xf8, + 0x80, 0xbd, 0x80, 0xb5, 0x01, 0x1c, 0x04, 0x20, + 0x00, 0xf0, 0x3c, 0x00, 0xfc, 0x8a, 0x00, 0x00, + 0x0d, 0xf8, 0x80, 0xbd, 0x80, 0xb5, 0x01, 0x1c, + 0x17, 0x20, 0x00, 0xf0, 0x07, 0xf8, 0x80, 0xbd, + 0x80, 0xb5, 0x01, 0x1c, 0x01, 0x20, 0x00, 0xf0, + 0x01, 0xf8, 0x80, 0xbd, 0xf8, 0xb5, 0x04, 0x1c, + 0x06, 0x1c, 0x80, 0x20, 0x84, 0x43, 0x0f, 0x1c, + 0x19, 0x2c, 0x01, 0xd3, 0xf8, 0xf7, 0xea, 0xfb, + 0x08, 0x48, 0x04, 0x5d, 0x21, 0x1c, 0x00, 0x20, + 0xf8, 0xf7, 0x50, 0xfd, 0x3c, 0x00, 0x38, 0x8b, + 0x00, 0x00, 0x05, 0x1c, 0x22, 0x1c, 0x39, 0x1c, + 0x00, 0x68, 0xf7, 0xf7, 0xda, 0xfc, 0x2a, 0x1c, + 0x31, 0x1c, 0x07, 0x20, 0xf8, 0xf7, 0x11, 0xf9, + 0xf8, 0xbd, 0xf4, 0x45, 0x01, 0x00, 0xf8, 0xb5, + 0x0d, 0x1c, 0x16, 0x1c, 0x04, 0x1c, 0x1f, 0x1c, + 0x08, 0x21, 0x00, 0x20, 0xf8, 0xf7, 0x39, 0xfd, + 0x14, 0x22, 0x01, 0x68, 0x0e, 0x4b, 0x72, 0x43, + 0xd2, 0x18, 0x0c, 0x71, 0x12, 0x7c, 0x3c, 0x00, + 0x74, 0x8b, 0x00, 0x00, 0x4a, 0x71, 0x0d, 0x60, + 0x0b, 0x4a, 0x8f, 0x71, 0x12, 0x68, 0x7f, 0x2a, + 0x03, 0xd9, 0x52, 0x05, 0x52, 0x0e, 0x80, 0x23, + 0x1a, 0x43, 0xca, 0x71, 0x07, 0x4a, 0x00, 0x23, + 0x51, 0x68, 0x01, 0x31, 0x51, 0x60, 0x02, 0x1c, + 0x81, 0x21, 0x00, 0x20, 0xf8, 0xf7, 0x08, 0xf9, + 0xf8, 0xbd, 0x00, 0x00, 0x74, 0x40, 0x01, 0x00, + 0xfc, 0x5a, 0x01, 0x00, 0x80, 0x6e, 0x01, 0x00, + 0x3c, 0x00, 0xb0, 0x8b, 0x00, 0x00, 0xb0, 0xb5, + 0x04, 0x1c, 0x08, 0x21, 0x00, 0x20, 0xf8, 0xf7, + 0x0e, 0xfd, 0x21, 0x8b, 0xe2, 0x7d, 0x05, 0x1c, + 0x09, 0x05, 0x52, 0x07, 0x52, 0x0f, 0x49, 0x0c, + 0x00, 0x68, 0x11, 0x43, 0x81, 0x80, 0xa1, 0x7d, + 0x14, 0x23, 0x0e, 0x4a, 0x59, 0x43, 0x89, 0x18, + 0x09, 0x7c, 0xc1, 0x71, 0xe1, 0x6a, 0x01, 0x60, + 0xe1, 0x68, 0x28, 0x1c, 0xf8, 0xf7, 0x17, 0xfc, + 0x0a, 0x48, 0x3c, 0x00, 0xec, 0x8b, 0x00, 0x00, + 0x00, 0x68, 0x00, 0x28, 0x01, 0xd0, 0xf7, 0xf7, + 0xf1, 0xfb, 0x07, 0x49, 0x04, 0x31, 0x88, 0x68, + 0x01, 0x30, 0x88, 0x60, 0x00, 0x21, 0x2a, 0x1c, + 0x00, 0x20, 0x23, 0x6b, 0xf8, 0xf7, 0xd2, 0xf8, + 0x01, 0x20, 0xb0, 0xbd, 0x74, 0x40, 0x01, 0x00, + 0x7c, 0x6e, 0x01, 0x00, 0x01, 0x48, 0x80, 0x68, + 0x70, 0x47, 0x00, 0x00, 0x80, 0x6e, 0x01, 0x00, + 0x10, 0xb5, 0x04, 0x1c, 0x3c, 0x00, 0x28, 0x8c, + 0x00, 0x00, 0x92, 0xb0, 0x01, 0x68, 0x68, 0x46, + 0x08, 0x22, 0xf7, 0xf7, 0x62, 0xfc, 0x00, 0xab, + 0x98, 0x88, 0x40, 0x07, 0x40, 0x0f, 0xd8, 0x77, + 0x98, 0x88, 0x40, 0x04, 0x00, 0x0d, 0x18, 0x84, + 0xd8, 0x88, 0x58, 0x84, 0x00, 0x98, 0x0d, 0x90, + 0x05, 0x94, 0x20, 0x89, 0x08, 0x38, 0x20, 0x81, + 0x05, 0x98, 0x01, 0x68, 0x08, 0x31, 0x01, 0x60, + 0x00, 0x20, 0x0a, 0x90, 0x0c, 0x90, 0x3c, 0x00, + 0x64, 0x8c, 0x00, 0x00, 0x00, 0x21, 0x11, 0x20, + 0x09, 0xf0, 0x78, 0xfb, 0x05, 0x49, 0x06, 0x4a, + 0x08, 0x68, 0x01, 0x30, 0x08, 0x60, 0x02, 0x21, + 0x02, 0xa8, 0x01, 0xf0, 0xcd, 0xfc, 0x12, 0xb0, + 0x10, 0xbd, 0x00, 0x00, 0x80, 0x6e, 0x01, 0x00, + 0x55, 0x8b, 0x00, 0x00, 0x02, 0x1c, 0x01, 0x20, + 0x00, 0x06, 0x08, 0x43, 0x80, 0xb5, 0x2b, 0x21, + 0x0a, 0xf0, 0x8a, 0xfd, 0x80, 0xbd, 0x00, 0x00, + 0x3c, 0x00, 0xa0, 0x8c, 0x00, 0x00, 0xf7, 0xb5, + 0x04, 0x1c, 0x06, 0x1c, 0x80, 0x20, 0x84, 0x43, + 0x17, 0x1c, 0x06, 0x2c, 0x01, 0xd3, 0xf8, 0xf7, + 0x26, 0xfb, 0x0b, 0x48, 0x05, 0x5d, 0x29, 0x1c, + 0x00, 0x20, 0xf8, 0xf7, 0x8c, 0xfc, 0x04, 0x1c, + 0x00, 0x68, 0x01, 0x99, 0x2a, 0x1c, 0xf7, 0xf7, + 0x16, 0xfc, 0x39, 0x1c, 0x20, 0x1c, 0xf8, 0xf7, + 0xa2, 0xfb, 0x22, 0x1c, 0x31, 0x1c, 0x00, 0x23, + 0x02, 0x20, 0x3c, 0x00, 0xdc, 0x8c, 0x00, 0x00, + 0xf8, 0xf7, 0x68, 0xf8, 0xfe, 0xbd, 0x00, 0x00, + 0x20, 0x46, 0x01, 0x00, 0x0a, 0x1c, 0x01, 0x1c, + 0x80, 0xb5, 0x00, 0x23, 0x01, 0x20, 0xf8, 0xf7, + 0x5d, 0xf8, 0x80, 0xbd, 0xff, 0xb5, 0x9f, 0xb0, + 0x1f, 0x1c, 0x05, 0x1c, 0x0a, 0x30, 0x1e, 0x90, + 0x1c, 0xaa, 0x1d, 0xa9, 0x0a, 0xf0, 0x00, 0xff, + 0x00, 0x28, 0x71, 0xd0, 0x00, 0x2f, 0x09, 0xd0, + 0x0a, 0x21, 0x00, 0x20, 0x3c, 0x00, 0x18, 0x8d, + 0x00, 0x00, 0xf8, 0xf7, 0x5e, 0xfc, 0x06, 0x68, + 0x04, 0x1c, 0x30, 0x1d, 0xfa, 0xf7, 0xaf, 0xfa, + 0x05, 0xe0, 0x04, 0x21, 0x00, 0x20, 0xf8, 0xf7, + 0x54, 0xfc, 0x06, 0x68, 0x04, 0x1c, 0x28, 0x89, + 0x36, 0x49, 0x01, 0x22, 0x08, 0x80, 0x70, 0x80, + 0xe8, 0x88, 0x14, 0xa9, 0x30, 0x80, 0x19, 0xa8, + 0xfc, 0xf7, 0xf5, 0xfc, 0xfc, 0xf7, 0xff, 0xfb, + 0x01, 0x1c, 0xff, 0x31, 0x21, 0x31, 0x3c, 0x00, + 0x54, 0x8d, 0x00, 0x00, 0x20, 0x1c, 0x01, 0xf0, + 0xef, 0xf8, 0x19, 0xa9, 0x20, 0x1c, 0x01, 0xf0, + 0xeb, 0xf8, 0x14, 0xa9, 0x20, 0x1c, 0x01, 0xf0, + 0xe7, 0xf8, 0x20, 0x1c, 0x20, 0x99, 0xfd, 0xf7, + 0x4b, 0xfd, 0x00, 0x22, 0x02, 0x21, 0x01, 0xf0, + 0x33, 0xfd, 0x06, 0x1c, 0x1c, 0x99, 0x00, 0x20, + 0x88, 0x61, 0x30, 0x1c, 0xf8, 0xf7, 0x1c, 0xfa, + 0x00, 0x2e, 0x0b, 0xd0, 0x30, 0x7a, 0x00, 0x28, + 0x3c, 0x00, 0x90, 0x8d, 0x00, 0x00, 0x02, 0xd0, + 0x40, 0x21, 0x08, 0x43, 0x30, 0x72, 0x1c, 0x98, + 0x02, 0x22, 0x81, 0x69, 0x11, 0x43, 0x81, 0x61, + 0x04, 0xe0, 0x1c, 0x99, 0x02, 0x22, 0x88, 0x69, + 0x90, 0x43, 0x88, 0x61, 0x1d, 0xaa, 0x06, 0xca, + 0x01, 0xa8, 0x05, 0xf0, 0x58, 0xfb, 0x09, 0xa8, + 0x00, 0x2f, 0x02, 0xd0, 0x02, 0x22, 0x42, 0x72, + 0x01, 0xe0, 0x00, 0x21, 0x41, 0x72, 0x04, 0x94, + 0x01, 0xa8, 0x3c, 0x00, 0xcc, 0x8d, 0x00, 0x00, + 0x04, 0xf0, 0x7a, 0xfb, 0x01, 0x21, 0x1c, 0x98, + 0x08, 0xf0, 0xc8, 0xff, 0x00, 0x2f, 0x04, 0xd0, + 0x1c, 0x98, 0x01, 0x22, 0x81, 0x69, 0x11, 0x43, + 0x81, 0x61, 0xa8, 0x88, 0x1c, 0x9c, 0x01, 0xf0, + 0x9f, 0xfe, 0x02, 0x1c, 0x21, 0x1c, 0x00, 0xe0, + 0x04, 0xe0, 0x07, 0x48, 0x40, 0x88, 0x09, 0xf0, + 0x1f, 0xf8, 0x04, 0xe0, 0x3a, 0x1c, 0x00, 0x21, + 0x05, 0x20, 0xf9, 0xf7, 0x3c, 0x00, 0x08, 0x8e, + 0x00, 0x00, 0x9b, 0xf8, 0x00, 0x20, 0x23, 0xb0, + 0xf0, 0xbd, 0xfc, 0x60, 0x01, 0x00, 0x98, 0x7c, + 0x01, 0x00, 0xf8, 0xb5, 0x04, 0x1c, 0xc0, 0x68, + 0x05, 0x68, 0xa0, 0x1d, 0x01, 0xf0, 0x95, 0xff, + 0x00, 0x28, 0x45, 0xd0, 0x21, 0x1c, 0x14, 0x31, + 0x20, 0x1c, 0x6a, 0x46, 0x0a, 0xf0, 0x55, 0xfe, + 0x00, 0x28, 0x3d, 0xd0, 0xfc, 0xf7, 0x7d, 0xfa, + 0x00, 0x28, 0x39, 0xd1, 0x00, 0x98, 0x3c, 0x00, + 0x44, 0x8e, 0x00, 0x00, 0x4b, 0x21, 0x09, 0x5c, + 0x01, 0x29, 0x34, 0xd1, 0x04, 0x26, 0x09, 0xf0, + 0x19, 0xf9, 0x68, 0x88, 0x00, 0x28, 0x1b, 0xd1, + 0xa8, 0x88, 0x03, 0x21, 0x89, 0x03, 0x88, 0x43, + 0x15, 0x49, 0x00, 0x26, 0x08, 0x80, 0x01, 0x22, + 0x02, 0x21, 0x20, 0x69, 0x01, 0xf0, 0xb8, 0xfc, + 0x04, 0x1c, 0x14, 0xd0, 0x00, 0x98, 0x80, 0x69, + 0x80, 0x07, 0x10, 0xd5, 0xf8, 0xf7, 0x9a, 0xf9, + 0x3c, 0x00, 0x80, 0x8e, 0x00, 0x00, 0x20, 0x1c, + 0xf8, 0xf7, 0xdd, 0xf8, 0x00, 0x28, 0x09, 0xd1, + 0xf8, 0xf7, 0x7f, 0xf9, 0x01, 0x26, 0x00, 0x98, + 0x02, 0x22, 0x81, 0x69, 0x91, 0x43, 0x81, 0x61, + 0x00, 0x21, 0x01, 0xe0, 0x00, 0x98, 0x02, 0x21, + 0x08, 0xf0, 0x61, 0xff, 0x00, 0x98, 0x80, 0x69, + 0xa9, 0x88, 0xc2, 0x07, 0xd2, 0x0f, 0x30, 0x1c, + 0xf9, 0xf7, 0x45, 0xf8, 0xf8, 0xbd, 0xfa, 0x60, + 0x01, 0x00, 0x3c, 0x00, 0xbc, 0x8e, 0x00, 0x00, + 0x1c, 0xb5, 0x04, 0x69, 0x00, 0x23, 0x00, 0x22, + 0x00, 0x2c, 0x13, 0xd1, 0x4b, 0x24, 0x24, 0x5c, + 0x02, 0x2c, 0x03, 0xd1, 0x02, 0x29, 0x05, 0xd0, + 0x01, 0x22, 0x03, 0xe0, 0x02, 0x29, 0x01, 0xd1, + 0x01, 0x22, 0x01, 0x23, 0x00, 0x2a, 0x05, 0xd0, + 0x00, 0x90, 0x04, 0x20, 0x01, 0x93, 0x69, 0x46, + 0x09, 0xf0, 0x36, 0xfa, 0x1c, 0xbd, 0x00, 0x00, + 0xb0, 0xb5, 0x04, 0x1c, 0x3c, 0x00, 0xf8, 0x8e, + 0x00, 0x00, 0xf2, 0x21, 0x0f, 0x20, 0x0c, 0x4d, + 0x0a, 0xf0, 0x99, 0xfb, 0x28, 0x78, 0x08, 0x28, + 0x0b, 0xd2, 0x01, 0xa3, 0x1b, 0x5c, 0x5b, 0x00, + 0x9f, 0x44, 0x07, 0x03, 0x03, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x00, 0x2c, 0x01, 0xd1, 0x05, 0xf0, + 0xbc, 0xfb, 0xb0, 0xbd, 0x01, 0x2c, 0xfc, 0xd1, + 0xff, 0x20, 0x07, 0xf0, 0x38, 0xfa, 0xb0, 0xbd, + 0x00, 0x00, 0x74, 0x66, 0x01, 0x00, 0x3c, 0x00, + 0x34, 0x8f, 0x00, 0x00, 0x8c, 0xb5, 0x05, 0x4a, + 0x00, 0xab, 0x11, 0x72, 0x00, 0x90, 0x19, 0x71, + 0x69, 0x46, 0x08, 0x20, 0x09, 0xf0, 0x0a, 0xfa, + 0x8c, 0xbd, 0x00, 0x00, 0xac, 0x7c, 0x01, 0x00, + 0xf3, 0xb5, 0x04, 0x1c, 0xc0, 0x68, 0x06, 0x27, + 0x85, 0xb0, 0x06, 0x68, 0x09, 0xf0, 0x26, 0xff, + 0x98, 0x49, 0x48, 0x63, 0x20, 0x69, 0x03, 0x21, + 0x01, 0xf0, 0x08, 0xfc, 0x96, 0x4d, 0x00, 0x28, + 0x3c, 0x00, 0x70, 0x8f, 0x00, 0x00, 0x4d, 0xd0, + 0x95, 0x49, 0x40, 0x31, 0x09, 0x79, 0x80, 0x78, + 0x81, 0x42, 0x47, 0xd1, 0x01, 0x21, 0x20, 0x69, + 0x01, 0xf0, 0xfb, 0xfb, 0x02, 0x90, 0x20, 0x69, + 0x32, 0x21, 0x01, 0xf0, 0xf6, 0xfb, 0x01, 0x90, + 0x02, 0x1c, 0x8d, 0x48, 0x02, 0x99, 0xfc, 0xf7, + 0x46, 0xff, 0x00, 0x28, 0x36, 0xd0, 0x00, 0x23, + 0x8a, 0x48, 0x02, 0x99, 0x01, 0x9a, 0xfc, 0xf7, + 0xe4, 0xfe, 0x3c, 0x00, 0xac, 0x8f, 0x00, 0x00, + 0x0b, 0x28, 0x2e, 0xd1, 0x86, 0x4a, 0x51, 0x88, + 0x70, 0x89, 0x41, 0x40, 0x03, 0x91, 0x0b, 0x1c, + 0x84, 0x49, 0x0b, 0x40, 0x25, 0xd1, 0x50, 0x80, + 0x03, 0x99, 0x17, 0x1c, 0x00, 0x29, 0x0b, 0xd0, + 0x03, 0x99, 0x48, 0x05, 0x02, 0xd5, 0x38, 0x1c, + 0xfc, 0xf7, 0x40, 0xfe, 0x03, 0x99, 0x88, 0x06, + 0x02, 0xd5, 0x38, 0x1c, 0xfc, 0xf7, 0x24, 0xfe, + 0x2a, 0x21, 0x20, 0x69, 0x3c, 0x00, 0xe8, 0x8f, + 0x00, 0x00, 0x01, 0xf0, 0xc8, 0xfb, 0x00, 0x28, + 0x0d, 0xd0, 0x80, 0x78, 0xe9, 0x69, 0x81, 0x42, + 0x09, 0xd0, 0xe8, 0x61, 0x38, 0x1c, 0xfc, 0xf7, + 0x16, 0xfe, 0x38, 0x1c, 0xfc, 0xf7, 0x07, 0xfe, + 0x38, 0x1c, 0xfc, 0xf7, 0x26, 0xfe, 0x00, 0x27, + 0x20, 0x1c, 0x20, 0x30, 0x04, 0x90, 0x40, 0x7a, + 0x08, 0x28, 0x71, 0xd1, 0x0a, 0xf0, 0xd1, 0xfc, + 0x00, 0x20, 0x68, 0x61, 0x00, 0x23, 0x3c, 0x00, + 0x24, 0x90, 0x00, 0x00, 0x2b, 0x61, 0xa8, 0x68, + 0x66, 0x49, 0x01, 0x30, 0xa8, 0x60, 0x30, 0x89, + 0x5c, 0x31, 0x88, 0x82, 0x01, 0xf0, 0x7a, 0xfd, + 0x62, 0x49, 0x5c, 0x31, 0x08, 0x61, 0x22, 0x6a, + 0x04, 0x98, 0x18, 0x21, 0x00, 0x7a, 0x01, 0xf0, + 0x33, 0xfe, 0xe1, 0x6a, 0x40, 0x18, 0x03, 0x90, + 0x5c, 0x48, 0x00, 0x6a, 0x00, 0x28, 0x0d, 0xd0, + 0x00, 0x2f, 0x0b, 0xd1, 0x59, 0x48, 0x01, 0x23, + 0x3c, 0x00, 0x60, 0x90, 0x00, 0x00, 0x5c, 0x30, + 0x01, 0x68, 0x1b, 0x07, 0x00, 0x22, 0x30, 0x68, + 0x09, 0xf0, 0x49, 0xff, 0x00, 0x28, 0x00, 0xd1, + 0x05, 0x27, 0x00, 0x21, 0xa0, 0x6b, 0x0a, 0xf0, + 0xce, 0xfc, 0x00, 0x21, 0x20, 0x6c, 0x0a, 0xf0, + 0xe8, 0xfc, 0x4f, 0x4b, 0x03, 0xce, 0x03, 0x9a, + 0x5c, 0x33, 0xfc, 0xf7, 0x88, 0xfd, 0x00, 0x20, + 0x4c, 0x4e, 0x05, 0x21, 0xb0, 0x63, 0x20, 0x69, + 0x01, 0xf0, 0x3c, 0x00, 0x9c, 0x90, 0x00, 0x00, + 0x6f, 0xfb, 0x01, 0x1c, 0x01, 0xd1, 0xf0, 0x60, + 0x1c, 0xe0, 0x01, 0x20, 0xf0, 0x60, 0x88, 0x78, + 0x45, 0x4a, 0x01, 0x32, 0x10, 0x70, 0xc8, 0x78, + 0x50, 0x70, 0x47, 0x4a, 0x10, 0x70, 0x30, 0x69, + 0x00, 0x28, 0x0a, 0xd0, 0x4a, 0x78, 0x08, 0x79, + 0x05, 0x31, 0x09, 0xf0, 0xdd, 0xfa, 0x31, 0x69, + 0xf7, 0xf7, 0x85, 0xf9, 0xf0, 0x68, 0x00, 0x28, + 0x04, 0xd0, 0x3b, 0x4a, 0x3c, 0x00, 0xd8, 0x90, + 0x00, 0x00, 0x01, 0x32, 0x10, 0x78, 0x00, 0x28, + 0x08, 0xd1, 0x00, 0x20, 0xa8, 0x61, 0x71, 0x6a, + 0x00, 0x29, 0x03, 0xd0, 0x20, 0x1c, 0x14, 0x30, + 0xf7, 0xf7, 0x74, 0xf9, 0x34, 0x4a, 0x5c, 0x32, + 0x10, 0x69, 0x31, 0x6a, 0x41, 0x18, 0x00, 0xe0, + 0x20, 0xe0, 0x0a, 0x23, 0xd0, 0x68, 0x0a, 0x22, + 0x09, 0xf0, 0xfb, 0xfe, 0x00, 0x28, 0x07, 0xd0, + 0x2d, 0x4a, 0x31, 0x6a, 0x5c, 0x32, 0x3c, 0x00, + 0x14, 0x91, 0x00, 0x00, 0xd0, 0x68, 0x40, 0x1a, + 0x11, 0x69, 0x40, 0x1a, 0x70, 0x60, 0x29, 0x4a, + 0x5c, 0x32, 0xd0, 0x68, 0x30, 0x62, 0xf0, 0x69, + 0x00, 0x28, 0x04, 0xd0, 0xfa, 0xf7, 0x00, 0xfd, + 0x01, 0x20, 0xfa, 0xf7, 0xa1, 0xfc, 0xfa, 0xf7, + 0x81, 0xfc, 0x27, 0x48, 0x00, 0x68, 0x03, 0xf0, + 0x07, 0xf9, 0x06, 0x98, 0x00, 0x28, 0x03, 0xd1, + 0x1e, 0x4e, 0x00, 0x23, 0xb3, 0x60, 0x16, 0xe0, + 0x3c, 0x00, 0x50, 0x91, 0x00, 0x00, 0x1c, 0x4e, + 0x01, 0x20, 0xb0, 0x60, 0x06, 0x98, 0x01, 0x68, + 0x40, 0x68, 0xb0, 0x65, 0x19, 0x48, 0x71, 0x65, + 0x54, 0x30, 0xc0, 0x88, 0x00, 0x28, 0x09, 0xd0, + 0xb1, 0x69, 0x00, 0x29, 0x06, 0xd0, 0x01, 0xf0, + 0xdc, 0xfc, 0x01, 0x1c, 0xe0, 0x6a, 0xb2, 0x69, + 0xf7, 0xf7, 0x2f, 0xf9, 0x00, 0x2f, 0x15, 0xd1, + 0x12, 0x48, 0x01, 0x69, 0x00, 0x29, 0x08, 0xd1, + 0x01, 0x21, 0x3c, 0x00, 0x8c, 0x91, 0x00, 0x00, + 0x01, 0x61, 0x2a, 0x68, 0x00, 0x2a, 0x03, 0xd0, + 0x00, 0x21, 0x00, 0x20, 0xf7, 0xf7, 0x20, 0xf9, + 0x09, 0x49, 0x00, 0x23, 0xcb, 0x62, 0x2b, 0x61, + 0x6b, 0x61, 0x06, 0xf0, 0xb5, 0xf8, 0x07, 0xb0, + 0xf0, 0xbd, 0x6b, 0x68, 0x06, 0x48, 0x00, 0x2b, + 0xf9, 0xd0, 0x02, 0x1d, 0x11, 0x1c, 0x38, 0x1c, + 0xf7, 0xf7, 0x0f, 0xf9, 0xf3, 0xe7, 0x00, 0x00, + 0x44, 0x7d, 0x01, 0x00, 0x3c, 0x00, 0xc8, 0x91, + 0x00, 0x00, 0xf4, 0x68, 0x01, 0x00, 0xf4, 0x67, + 0x01, 0x00, 0x03, 0x08, 0x00, 0x00, 0xf8, 0x60, + 0x01, 0x00, 0xc4, 0x67, 0x01, 0x00, 0x08, 0xb5, + 0xf8, 0xf7, 0x2f, 0xfd, 0x00, 0x90, 0x00, 0xab, + 0x18, 0x88, 0x00, 0x28, 0x0c, 0xd0, 0x05, 0xf0, + 0x50, 0xff, 0x00, 0xab, 0x59, 0x88, 0x18, 0x88, + 0x05, 0xf0, 0x6d, 0xf9, 0xfe, 0xf7, 0x97, 0xf8, + 0x03, 0x20, 0xfb, 0xf7, 0x0e, 0xf8, 0x3c, 0x00, + 0x04, 0x92, 0x00, 0x00, 0x08, 0xbd, 0x01, 0x20, + 0xff, 0xf7, 0xb2, 0xfb, 0x00, 0x20, 0x08, 0xf0, + 0x8d, 0xfe, 0xf7, 0xe7, 0xf8, 0xb5, 0x4f, 0x49, + 0x8c, 0x68, 0x20, 0x6a, 0x00, 0x68, 0x05, 0x78, + 0xfc, 0xf7, 0x68, 0xfa, 0x00, 0x28, 0x12, 0xd0, + 0x2a, 0x07, 0x92, 0x0f, 0x01, 0x21, 0x01, 0x2a, + 0x00, 0xd0, 0x00, 0x21, 0x00, 0x29, 0x03, 0xd0, + 0x29, 0x06, 0x09, 0x0f, 0x0b, 0x29, 0x06, 0xd1, + 0x3c, 0x00, 0x40, 0x92, 0x00, 0x00, 0x2a, 0x21, + 0x09, 0x5d, 0x08, 0x18, 0x90, 0x30, 0x00, 0x7b, + 0xf9, 0xf7, 0x0d, 0xfc, 0x41, 0x4f, 0x3c, 0x3f, + 0xb8, 0x6b, 0x79, 0x6b, 0xf7, 0xf7, 0xc0, 0xf8, + 0xa0, 0x6c, 0x00, 0x26, 0xc6, 0x60, 0x60, 0x6b, + 0x80, 0x08, 0x04, 0xd0, 0xb8, 0x69, 0x01, 0x30, + 0xb8, 0x61, 0x06, 0xf0, 0xdc, 0xf9, 0x39, 0x4d, + 0x28, 0x69, 0x80, 0x05, 0x80, 0x0f, 0x08, 0xd1, + 0x78, 0x69, 0x3c, 0x00, 0x7c, 0x92, 0x00, 0x00, + 0x04, 0x21, 0x01, 0x30, 0x78, 0x61, 0x60, 0x6b, + 0x40, 0x08, 0x40, 0x00, 0x08, 0x43, 0x60, 0x63, + 0xb8, 0x6a, 0x00, 0x28, 0x03, 0xd0, 0x60, 0x6b, + 0x08, 0x21, 0x08, 0x43, 0x60, 0x63, 0x20, 0x1c, + 0x20, 0x30, 0x00, 0x90, 0x39, 0x68, 0xf7, 0xf7, + 0x9a, 0xf8, 0x03, 0x20, 0x00, 0x02, 0x28, 0x60, + 0x2b, 0x49, 0x88, 0x68, 0xa0, 0x63, 0xc8, 0x68, + 0xe0, 0x63, 0x08, 0x79, 0x3c, 0x00, 0xb8, 0x92, + 0x00, 0x00, 0xc0, 0x06, 0xc0, 0x0e, 0x25, 0x1c, + 0x40, 0x35, 0x28, 0x71, 0x48, 0x79, 0x68, 0x71, + 0x23, 0x48, 0x3c, 0x38, 0x46, 0x62, 0x00, 0x98, + 0x80, 0x7a, 0x01, 0xf0, 0x5e, 0xfd, 0x00, 0x21, + 0x00, 0x28, 0x21, 0x4a, 0x01, 0xd0, 0x11, 0x78, + 0x03, 0xe0, 0x93, 0x78, 0xdb, 0x07, 0x00, 0xd5, + 0x51, 0x78, 0xa9, 0x71, 0x00, 0x28, 0x04, 0xd0, + 0x1b, 0x49, 0x14, 0x31, 0x08, 0x68, 0x3c, 0x00, + 0xf4, 0x92, 0x00, 0x00, 0x20, 0x64, 0x00, 0xe0, + 0x6e, 0x80, 0xb8, 0x6a, 0xc0, 0x07, 0x02, 0xd5, + 0xff, 0x20, 0x28, 0x71, 0xae, 0x71, 0xe6, 0x61, + 0xb8, 0x68, 0x01, 0x30, 0xb8, 0x60, 0x79, 0x68, + 0x88, 0x42, 0x03, 0xd0, 0x0b, 0x21, 0x85, 0x20, + 0xf7, 0xf7, 0xc4, 0xff, 0x0d, 0x49, 0x88, 0x68, + 0xc0, 0x6c, 0x88, 0x60, 0xfb, 0x6a, 0x00, 0x2b, + 0x0c, 0xd0, 0x0e, 0x4a, 0xd4, 0x7b, 0x00, 0x2b, + 0x3c, 0x00, 0x30, 0x93, 0x00, 0x00, 0x02, 0xdd, + 0x7f, 0x2c, 0x05, 0xd2, 0x01, 0xe0, 0x00, 0x2c, + 0x02, 0xd0, 0xd4, 0x7b, 0xe3, 0x18, 0xd3, 0x73, + 0xfe, 0x62, 0xc9, 0x68, 0x88, 0x42, 0x03, 0xd1, + 0x05, 0x21, 0x85, 0x20, 0xf7, 0xf7, 0xa9, 0xff, + 0xf8, 0xbd, 0x24, 0x7e, 0x01, 0x00, 0x00, 0x40, + 0x07, 0x00, 0xa0, 0x80, 0x07, 0x00, 0xe8, 0x80, + 0x07, 0x00, 0x40, 0x00, 0x07, 0x00, 0xfe, 0xb5, + 0x30, 0x4c, 0x3c, 0x00, 0x6c, 0x93, 0x00, 0x00, + 0xa0, 0x6b, 0x21, 0x6b, 0xf7, 0xf7, 0x33, 0xf8, + 0x2d, 0x49, 0x3c, 0x31, 0x8e, 0x68, 0x70, 0x8b, + 0x06, 0x28, 0x04, 0xd2, 0xe0, 0x69, 0x01, 0x30, + 0xe0, 0x61, 0x0e, 0x20, 0x30, 0x85, 0x28, 0x49, + 0x3c, 0x31, 0x0d, 0x68, 0x00, 0x2d, 0x03, 0xd1, + 0x03, 0x21, 0x85, 0x20, 0xf7, 0xf7, 0x84, 0xff, + 0x24, 0x48, 0x45, 0x61, 0x35, 0x62, 0x31, 0x8d, + 0xef, 0x68, 0x04, 0x39, 0x3c, 0x00, 0xa8, 0x93, + 0x00, 0x00, 0x0c, 0x04, 0x01, 0x21, 0x02, 0x91, + 0x24, 0x0c, 0x00, 0x21, 0x01, 0x91, 0x1d, 0x48, + 0x3c, 0x30, 0x80, 0x8a, 0xa0, 0x42, 0x03, 0xd3, + 0x2c, 0x81, 0xee, 0x60, 0x00, 0x24, 0x0b, 0xe0, + 0x00, 0x2f, 0x04, 0xd1, 0x03, 0x21, 0x85, 0x20, + 0xf7, 0xf7, 0x69, 0xff, 0x04, 0xe0, 0x3d, 0x1c, + 0x20, 0x1a, 0x04, 0x04, 0xff, 0x68, 0x24, 0x0c, + 0x02, 0x98, 0x00, 0x28, 0x04, 0xd0, 0x3c, 0x00, + 0xe4, 0x93, 0x00, 0x00, 0x12, 0x49, 0x01, 0x20, + 0x08, 0x61, 0x00, 0x20, 0x02, 0x90, 0x01, 0x98, + 0x01, 0x30, 0x01, 0x90, 0x00, 0x2c, 0xdd, 0xd1, + 0x0c, 0x48, 0x0c, 0x4c, 0x3c, 0x30, 0x07, 0x60, + 0x01, 0x98, 0x30, 0x65, 0xb5, 0x64, 0x30, 0x6a, + 0x00, 0x68, 0x60, 0x62, 0x60, 0x68, 0x01, 0x30, + 0x60, 0x60, 0xa1, 0x68, 0x01, 0x31, 0x88, 0x42, + 0x03, 0xd0, 0x0a, 0x21, 0x85, 0x20, 0xf7, 0xf7, + 0x3c, 0x00, 0x20, 0x94, 0x00, 0x00, 0x41, 0xff, + 0x04, 0x48, 0x00, 0x68, 0xa0, 0x62, 0xfe, 0xbd, + 0x00, 0x00, 0xe8, 0x7d, 0x01, 0x00, 0x00, 0x30, + 0x07, 0x00, 0x78, 0x6e, 0x01, 0x00, 0xb0, 0xb5, + 0x05, 0x1c, 0x01, 0x21, 0x0f, 0x20, 0x0a, 0xf0, + 0xf8, 0xf8, 0xf2, 0x21, 0x0f, 0x20, 0x0a, 0xf0, + 0xf4, 0xf8, 0x0c, 0x48, 0x0c, 0x4c, 0x00, 0x68, + 0x14, 0x3c, 0x00, 0x28, 0x0c, 0xd0, 0xe0, 0x78, + 0x01, 0x28, 0x3c, 0x00, 0x5c, 0x94, 0x00, 0x00, + 0x09, 0xd0, 0x01, 0x22, 0x29, 0x1c, 0x0f, 0x20, + 0x0a, 0xf0, 0xac, 0xf8, 0x60, 0x78, 0x02, 0x28, + 0x06, 0xd0, 0x01, 0x20, 0x03, 0xe0, 0x60, 0x78, + 0x02, 0x28, 0x01, 0xd0, 0x00, 0x20, 0x60, 0x70, + 0xb0, 0xbd, 0x00, 0x00, 0x98, 0x66, 0x01, 0x00, + 0x02, 0x22, 0x00, 0x28, 0x80, 0xb5, 0x00, 0xd1, + 0x03, 0x22, 0x03, 0x49, 0x0e, 0x20, 0x0a, 0xf0, + 0x9b, 0xf8, 0x00, 0x20, 0x3c, 0x00, 0x98, 0x94, + 0x00, 0x00, 0x80, 0xbd, 0x00, 0x00, 0x50, 0xc3, + 0x00, 0x00, 0xf8, 0xb5, 0x00, 0x23, 0x00, 0x22, + 0x00, 0x28, 0x2e, 0xd0, 0x06, 0x89, 0x04, 0x68, + 0x75, 0x1e, 0x2d, 0x04, 0xb6, 0x1a, 0xf6, 0x07, + 0x2d, 0x0c, 0xf6, 0x0f, 0xb4, 0x46, 0x0e, 0xe0, + 0xa7, 0x5c, 0xa6, 0x18, 0x02, 0x33, 0x00, 0x97, + 0x77, 0x78, 0xa7, 0x54, 0x02, 0x32, 0x12, 0x04, + 0x00, 0x9f, 0x12, 0x0c, 0x00, 0x29, 0x3c, 0x00, + 0xd4, 0x94, 0x00, 0x00, 0x77, 0x70, 0x01, 0xdd, + 0x8b, 0x42, 0x15, 0xda, 0xaa, 0x42, 0xee, 0xd3, + 0xc0, 0x68, 0x00, 0x28, 0x10, 0xd0, 0x02, 0x89, + 0x00, 0x2a, 0xf9, 0xd0, 0x62, 0x46, 0x00, 0x2a, + 0x0b, 0xd0, 0x02, 0x68, 0x66, 0x5d, 0x17, 0x78, + 0x02, 0x33, 0x67, 0x55, 0x16, 0x70, 0x01, 0x22, + 0x00, 0x29, 0xd2, 0xdd, 0x8b, 0x42, 0xd0, 0xdb, + 0xf8, 0xbd, 0x00, 0x22, 0xcd, 0xe7, 0x00, 0x00, + 0x3c, 0x00, 0x10, 0x95, 0x00, 0x00, 0xb0, 0xb5, + 0x04, 0x1c, 0x0d, 0x1c, 0x01, 0x20, 0xf8, 0xf7, + 0x5e, 0xfb, 0x0d, 0x49, 0x00, 0x28, 0xc8, 0x61, + 0x14, 0xd0, 0x62, 0x68, 0x42, 0x60, 0xa2, 0x7c, + 0x02, 0x72, 0xa2, 0x68, 0xc2, 0x60, 0xe2, 0x68, + 0x02, 0x61, 0x22, 0x8a, 0x02, 0x75, 0x0a, 0x1d, + 0x0a, 0x62, 0x12, 0x68, 0x00, 0x2a, 0xff, 0xd1, + 0x02, 0x60, 0x48, 0x60, 0x00, 0x20, 0xa8, 0x60, + 0x01, 0x20, 0x3c, 0x00, 0x4c, 0x95, 0x00, 0x00, + 0xb0, 0xbd, 0x01, 0x20, 0xfa, 0xe7, 0x00, 0x00, + 0xa4, 0x6e, 0x01, 0x00, 0xb0, 0xb5, 0x04, 0x1c, + 0x40, 0x68, 0x0d, 0x1c, 0x43, 0x1c, 0x02, 0xd1, + 0x21, 0x1c, 0x09, 0x48, 0x08, 0xe0, 0x00, 0x20, + 0xf8, 0xf7, 0x34, 0xfb, 0x06, 0x49, 0x94, 0x39, + 0x08, 0x61, 0x00, 0x28, 0x03, 0xd0, 0x21, 0x1c, + 0x00, 0xf0, 0x48, 0xfe, 0x00, 0xe0, 0x01, 0x20, + 0xa8, 0x60, 0x01, 0x20, 0x3c, 0x00, 0x88, 0x95, + 0x00, 0x00, 0xb0, 0xbd, 0x00, 0x00, 0x38, 0x6f, + 0x01, 0x00, 0x80, 0xb5, 0x01, 0x21, 0x97, 0x20, + 0xf7, 0xf7, 0x85, 0xfe, 0x00, 0x20, 0x80, 0xbd, + 0x00, 0x00, 0x38, 0xb5, 0x0a, 0x1c, 0x14, 0x32, + 0x00, 0x92, 0x13, 0x1f, 0x05, 0x1c, 0x08, 0x3a, + 0x0c, 0x1c, 0x16, 0x31, 0x40, 0x68, 0xfe, 0xf7, + 0x6c, 0xfe, 0x00, 0x28, 0x01, 0xd0, 0x00, 0x20, + 0x00, 0xe0, 0x01, 0x20, 0x69, 0x68, 0x3c, 0x00, + 0xc4, 0x95, 0x00, 0x00, 0xa0, 0x60, 0x61, 0x60, + 0x01, 0x20, 0x38, 0xbd, 0x10, 0xb5, 0x0c, 0x1c, + 0x01, 0x7a, 0x00, 0x29, 0x0f, 0xd0, 0x01, 0x29, + 0x09, 0xd0, 0x02, 0x29, 0x03, 0xd1, 0x00, 0x21, + 0x00, 0x20, 0x0a, 0xf0, 0x73, 0xfc, 0x00, 0x20, + 0x20, 0x71, 0x01, 0x20, 0x10, 0xbd, 0x41, 0x68, + 0x01, 0x20, 0x0a, 0xf0, 0x6b, 0xfc, 0x00, 0xf0, + 0x0d, 0xf9, 0xf4, 0xe7, 0x80, 0xb5, 0x04, 0x49, + 0x3c, 0x00, 0x00, 0x96, 0x00, 0x00, 0x48, 0x68, + 0x01, 0x38, 0x48, 0x60, 0x01, 0xd1, 0x07, 0xf0, + 0x6e, 0xfb, 0x00, 0x20, 0x80, 0xbd, 0xac, 0x79, + 0x01, 0x00, 0xb0, 0xb5, 0x05, 0x1c, 0x0c, 0x1c, + 0x00, 0xf0, 0x4f, 0xfe, 0xa0, 0x60, 0x68, 0x68, + 0x60, 0x60, 0x01, 0x20, 0xb0, 0xbd, 0xb0, 0xb5, + 0x05, 0x1c, 0x0c, 0x1c, 0x00, 0xf0, 0x6f, 0xfe, + 0xa0, 0x60, 0x68, 0x68, 0x60, 0x60, 0x01, 0x20, + 0xb0, 0xbd, 0x3c, 0x00, 0x3c, 0x96, 0x00, 0x00, + 0x08, 0x1c, 0x00, 0x21, 0x00, 0x22, 0x00, 0x23, + 0x0e, 0xc0, 0x08, 0xc0, 0x01, 0x20, 0x70, 0x47, + 0xf8, 0xb5, 0x0f, 0x1c, 0x04, 0x1c, 0x20, 0x79, + 0x20, 0x28, 0x01, 0xd2, 0x20, 0x20, 0x20, 0x71, + 0x66, 0x79, 0x00, 0x2e, 0x02, 0xd1, 0x25, 0x79, + 0x00, 0x22, 0x0d, 0xe0, 0x25, 0x79, 0x29, 0x1c, + 0x30, 0x1c, 0xf7, 0xf7, 0x4f, 0xf8, 0x00, 0x29, + 0x01, 0xd1, 0x32, 0x1c, 0x3c, 0x00, 0x78, 0x96, + 0x00, 0x00, 0x04, 0xe0, 0x70, 0x43, 0x80, 0x19, + 0x05, 0x06, 0x2d, 0x0e, 0x32, 0x1c, 0xe0, 0x79, + 0x29, 0x1c, 0x00, 0xf0, 0xf2, 0xf9, 0x20, 0x7a, + 0x2f, 0x49, 0xc0, 0x07, 0xc0, 0x0f, 0x08, 0x60, + 0x2e, 0x48, 0x00, 0x78, 0xc0, 0x07, 0x43, 0xd5, + 0xa1, 0x79, 0x2c, 0x4a, 0xc8, 0x07, 0x48, 0xd4, + 0x2c, 0x4e, 0x16, 0x60, 0x8b, 0x07, 0x2b, 0x48, + 0x08, 0xd5, 0xcc, 0x08, 0x01, 0x23, 0x3c, 0x00, + 0xb4, 0x96, 0x00, 0x00, 0xa3, 0x40, 0x03, 0x60, + 0x49, 0x07, 0x04, 0xd5, 0x28, 0x49, 0x11, 0x60, + 0x01, 0xe0, 0x40, 0x21, 0x01, 0x60, 0x13, 0x68, + 0x26, 0x4a, 0xb3, 0x42, 0x10, 0xd1, 0x54, 0x68, + 0x01, 0x68, 0x0c, 0x43, 0x54, 0x60, 0x14, 0x68, + 0x0c, 0x40, 0x01, 0xd0, 0x51, 0x61, 0x00, 0xe0, + 0x91, 0x61, 0x54, 0x68, 0x0c, 0x43, 0x54, 0x60, + 0x94, 0x68, 0x21, 0x43, 0x91, 0x60, 0x13, 0xe0, + 0x3c, 0x00, 0xf0, 0x96, 0x00, 0x00, 0x54, 0x7c, + 0x01, 0x68, 0x0c, 0x43, 0x54, 0x74, 0x14, 0x7c, + 0x0c, 0x40, 0x03, 0xd0, 0x14, 0x7c, 0x0c, 0x43, + 0x14, 0x74, 0x02, 0xe0, 0x14, 0x7c, 0x8c, 0x43, + 0x14, 0x74, 0x54, 0x7c, 0x0c, 0x43, 0x54, 0x74, + 0x94, 0x7c, 0x21, 0x43, 0x91, 0x74, 0xb3, 0x42, + 0x05, 0xd1, 0x00, 0x22, 0x01, 0x68, 0x03, 0x20, + 0xff, 0xf7, 0x8d, 0xf8, 0x09, 0xe0, 0x00, 0x68, + 0x00, 0x21, 0x3c, 0x00, 0x2c, 0x97, 0x00, 0x00, + 0x02, 0x06, 0x12, 0x0e, 0x03, 0x20, 0xff, 0xf7, + 0x85, 0xf8, 0x01, 0xe0, 0x0b, 0x48, 0x10, 0x60, + 0x00, 0x20, 0x38, 0x71, 0x7d, 0x71, 0xf7, 0xf7, + 0xe9, 0xfd, 0x01, 0x20, 0xf8, 0xbd, 0x00, 0x00, + 0xcc, 0x5c, 0x01, 0x00, 0x04, 0x00, 0x07, 0x00, + 0x5c, 0x5b, 0x01, 0x00, 0xb9, 0x9b, 0x00, 0x00, + 0x58, 0x5b, 0x01, 0x00, 0x95, 0x9b, 0x00, 0x00, + 0x10, 0x00, 0x07, 0x00, 0x3c, 0x00, 0x68, 0x97, + 0x00, 0x00, 0x55, 0x9b, 0x00, 0x00, 0xb0, 0xb5, + 0x0d, 0x1c, 0x04, 0x30, 0x00, 0x24, 0xfe, 0xf7, + 0xd6, 0xfa, 0x01, 0x20, 0x6c, 0x60, 0xb0, 0xbd, + 0x00, 0x00, 0xf0, 0xb5, 0x07, 0x7a, 0x43, 0x68, + 0x04, 0x1c, 0x0e, 0x48, 0x0e, 0x1c, 0x00, 0x68, + 0x01, 0x25, 0x01, 0x1c, 0x9b, 0xb0, 0x06, 0xe0, + 0x4a, 0x68, 0x9a, 0x42, 0x02, 0xd1, 0x8f, 0x76, + 0x00, 0x25, 0x02, 0xe0, 0x09, 0x68, 0x3c, 0x00, + 0xa4, 0x97, 0x00, 0x00, 0x00, 0x29, 0xf6, 0xd1, + 0x00, 0x2d, 0x05, 0xd1, 0x21, 0x7a, 0x01, 0x29, + 0x02, 0xd1, 0x01, 0xa9, 0xf8, 0xf7, 0xa8, 0xf8, + 0x60, 0x68, 0x04, 0x36, 0x21, 0xc6, 0x1b, 0xb0, + 0x01, 0x20, 0xf0, 0xbd, 0xa4, 0x6e, 0x01, 0x00, + 0x10, 0xb5, 0x0c, 0x1c, 0x08, 0xf0, 0xae, 0xfc, + 0x60, 0x60, 0x01, 0x20, 0x10, 0xbd, 0x00, 0x00, + 0x10, 0xb5, 0x0c, 0x1c, 0x07, 0xf0, 0x84, 0xfa, + 0x3c, 0x00, 0xe0, 0x97, 0x00, 0x00, 0x04, 0xf0, + 0x54, 0xff, 0x00, 0x20, 0x60, 0x60, 0x01, 0x20, + 0x10, 0xbd, 0x00, 0x20, 0xc0, 0x43, 0x48, 0x60, + 0x01, 0x20, 0x70, 0x47, 0x00, 0x00, 0x10, 0xb5, + 0x0c, 0x1c, 0x00, 0x79, 0xfa, 0xf7, 0x07, 0xf8, + 0x00, 0x28, 0x01, 0xd0, 0x00, 0x20, 0x00, 0xe0, + 0x02, 0x20, 0x60, 0x60, 0x01, 0x20, 0x10, 0xbd, + 0x00, 0x00, 0x1c, 0xb5, 0x06, 0x4c, 0x20, 0x68, + 0x00, 0x28, 0x3c, 0x00, 0x1c, 0x98, 0x00, 0x00, + 0x07, 0xd0, 0x09, 0xf0, 0xc5, 0xfa, 0x01, 0x90, + 0x20, 0x68, 0x41, 0x68, 0x68, 0x46, 0xf6, 0xf7, + 0xd6, 0xfd, 0x1c, 0xbd, 0xac, 0x79, 0x01, 0x00, + 0x01, 0x49, 0x08, 0x60, 0x70, 0x47, 0x00, 0x00, + 0xac, 0x79, 0x01, 0x00, 0x0e, 0xb5, 0x06, 0x4b, + 0x1b, 0x68, 0x00, 0x2b, 0x06, 0xd0, 0x02, 0x90, + 0x00, 0x91, 0x01, 0x92, 0x68, 0x46, 0xd9, 0x68, + 0xf6, 0xf7, 0xc1, 0xfd, 0x3c, 0x00, 0x58, 0x98, + 0x00, 0x00, 0x0e, 0xbd, 0x00, 0x00, 0xac, 0x79, + 0x01, 0x00, 0x1c, 0xb5, 0x04, 0x1c, 0x07, 0xf0, + 0x4c, 0xfa, 0x06, 0x48, 0x41, 0x68, 0x01, 0x31, + 0x41, 0x60, 0x00, 0x94, 0x00, 0x21, 0x01, 0x91, + 0x00, 0x68, 0x01, 0x68, 0x68, 0x46, 0xf6, 0xf7, + 0xad, 0xfd, 0x1c, 0xbd, 0x00, 0x00, 0xac, 0x79, + 0x01, 0x00, 0x80, 0xb5, 0xf8, 0xf7, 0xa3, 0xf8, + 0x80, 0xbd, 0x80, 0xb5, 0x02, 0x1c, 0x3c, 0x00, + 0x94, 0x98, 0x00, 0x00, 0x80, 0x21, 0x03, 0x20, + 0x00, 0xf0, 0x5c, 0xf8, 0x01, 0x1c, 0x03, 0x48, + 0x00, 0x22, 0x43, 0x69, 0xf6, 0xf7, 0x9b, 0xfd, + 0x80, 0xbd, 0x00, 0x00, 0xa4, 0x6d, 0x01, 0x00, + 0xf8, 0xb5, 0x0c, 0x1c, 0x13, 0x49, 0x05, 0x1c, + 0x08, 0x68, 0x16, 0x1c, 0x01, 0x30, 0x08, 0x60, + 0x00, 0x20, 0x20, 0x61, 0x22, 0x1c, 0x10, 0x32, + 0x28, 0x1d, 0x00, 0x21, 0x07, 0x1c, 0x00, 0x92, + 0x3c, 0x00, 0xd0, 0x98, 0x00, 0x00, 0x03, 0xf0, + 0xde, 0xfe, 0x20, 0x71, 0x20, 0x69, 0x00, 0x28, + 0x10, 0xd0, 0x01, 0x04, 0x09, 0x0c, 0x00, 0x20, + 0xf7, 0xf7, 0x79, 0xfe, 0x30, 0x60, 0x29, 0x1d, + 0x03, 0xc9, 0xa0, 0x60, 0xe1, 0x60, 0x30, 0x68, + 0x01, 0x68, 0x00, 0x9a, 0x38, 0x1c, 0x03, 0xf0, + 0xca, 0xfe, 0x20, 0x71, 0x01, 0x20, 0xf8, 0xbd, + 0x00, 0x00, 0x10, 0x75, 0x01, 0x00, 0x80, 0xb5, + 0x02, 0x1c, 0x3c, 0x00, 0x0c, 0x99, 0x00, 0x00, + 0x08, 0x21, 0x04, 0x20, 0x09, 0xf0, 0x4e, 0xff, + 0x03, 0x20, 0x80, 0xbd, 0x10, 0xb5, 0x07, 0x4a, + 0x0c, 0x1c, 0x51, 0x68, 0x01, 0x31, 0x51, 0x60, + 0x01, 0x1c, 0x10, 0x31, 0xc2, 0x68, 0x04, 0x30, + 0x03, 0xf0, 0xf0, 0xfe, 0x20, 0x71, 0x00, 0x20, + 0x10, 0xbd, 0x00, 0x00, 0x10, 0x75, 0x01, 0x00, + 0x04, 0x49, 0x80, 0xb5, 0x81, 0x61, 0x08, 0x21, + 0x02, 0x1c, 0x03, 0x20, 0x3c, 0x00, 0x48, 0x99, + 0x00, 0x00, 0x09, 0xf0, 0x32, 0xff, 0x03, 0x20, + 0x80, 0xbd, 0x95, 0xd8, 0x00, 0x00, 0xf7, 0xb5, + 0x07, 0x1c, 0x16, 0x1c, 0x06, 0x21, 0x00, 0x20, + 0x82, 0xb0, 0xf7, 0xf7, 0x3a, 0xfe, 0x05, 0x1c, + 0x20, 0x48, 0x00, 0x78, 0x06, 0x28, 0x00, 0xd9, + 0x28, 0x81, 0x2c, 0x68, 0x00, 0x20, 0xa7, 0x70, + 0x03, 0x99, 0xe1, 0x70, 0x31, 0x1c, 0x03, 0xe0, + 0x0a, 0x89, 0x10, 0x18, 0x0f, 0x1c, 0x3c, 0x00, + 0x84, 0x99, 0x00, 0x00, 0xc9, 0x68, 0x00, 0x29, + 0xf9, 0xd1, 0x6b, 0x46, 0x01, 0xaa, 0x21, 0x1d, + 0x00, 0xf0, 0x34, 0xf8, 0x00, 0xab, 0x18, 0x78, + 0x60, 0x71, 0x18, 0x78, 0x00, 0x28, 0x17, 0xd0, + 0x11, 0x48, 0x40, 0x68, 0x00, 0x28, 0x08, 0xd0, + 0x19, 0x78, 0x00, 0x20, 0xf7, 0xf7, 0x14, 0xfe, + 0x01, 0x1c, 0x38, 0x1c, 0xf7, 0xf7, 0x30, 0xfd, + 0x0a, 0xe0, 0x38, 0x68, 0x00, 0x28, 0x02, 0xd1, + 0x3c, 0x00, 0xc0, 0x99, 0x00, 0x00, 0x3f, 0x60, + 0x01, 0x20, 0xb8, 0x61, 0x00, 0xab, 0x19, 0x78, + 0x38, 0x89, 0x40, 0x18, 0x38, 0x81, 0x00, 0xab, + 0x98, 0x88, 0x31, 0x1c, 0x02, 0x38, 0x20, 0x80, + 0x28, 0x1c, 0xf7, 0xf7, 0x1c, 0xfd, 0x28, 0x1c, + 0x05, 0xb0, 0xf0, 0xbd, 0x00, 0x00, 0xc8, 0x5c, + 0x01, 0x00, 0x01, 0x79, 0x42, 0x79, 0x00, 0x88, + 0x89, 0x18, 0x02, 0x39, 0x40, 0x1a, 0x70, 0x47, + 0x00, 0x00, 0x3c, 0x00, 0xfc, 0x99, 0x00, 0x00, + 0x70, 0xb5, 0x08, 0x4d, 0x2c, 0x78, 0xad, 0x78, + 0x20, 0x18, 0x06, 0x1c, 0x00, 0x2d, 0x03, 0xd0, + 0x70, 0x19, 0x01, 0x38, 0x01, 0x3d, 0xa8, 0x43, + 0x10, 0x80, 0x80, 0x1b, 0x18, 0x70, 0x0c, 0x70, + 0x70, 0xbd, 0x00, 0x00, 0xc8, 0x5c, 0x01, 0x00, + 0xb0, 0xb5, 0x04, 0x68, 0x0c, 0x4a, 0x21, 0x88, + 0x52, 0x78, 0x02, 0x31, 0x91, 0x42, 0x11, 0xd2, + 0x55, 0x1a, 0xf7, 0xf7, 0x3c, 0x00, 0x38, 0x9a, + 0x00, 0x00, 0xc9, 0xfd, 0x01, 0x68, 0x00, 0x29, + 0x02, 0xd1, 0x00, 0x60, 0x01, 0x21, 0x81, 0x61, + 0x01, 0x89, 0x49, 0x19, 0x01, 0x81, 0x20, 0x88, + 0x40, 0x19, 0x20, 0x80, 0x60, 0x79, 0x40, 0x19, + 0x60, 0x71, 0xb0, 0xbd, 0x00, 0x00, 0xc8, 0x5c, + 0x01, 0x00, 0x80, 0xb5, 0x00, 0x22, 0x06, 0x21, + 0xf1, 0x20, 0x09, 0xf0, 0xa2, 0xfe, 0x80, 0xbd, + 0x00, 0x00, 0x03, 0x1c, 0x02, 0x48, 0x3c, 0x00, + 0x74, 0x9a, 0x00, 0x00, 0x03, 0x70, 0x41, 0x70, + 0x82, 0x70, 0x70, 0x47, 0xc8, 0x5c, 0x01, 0x00, + 0xb0, 0xb5, 0x08, 0x1c, 0x09, 0x68, 0x15, 0x1c, + 0x8c, 0x78, 0xf7, 0xf7, 0x85, 0xfd, 0x04, 0x49, + 0xa0, 0x00, 0x09, 0x58, 0x00, 0x29, 0x02, 0xd0, + 0x28, 0x1c, 0xf6, 0xf7, 0x9e, 0xfc, 0xb0, 0xbd, + 0x84, 0x6d, 0x01, 0x00, 0xfe, 0xb5, 0x04, 0x1c, + 0xc0, 0x7a, 0xa1, 0x7a, 0xc6, 0x07, 0xf6, 0x0f, + 0x3c, 0x00, 0xb0, 0x9a, 0x00, 0x00, 0x32, 0x1c, + 0x20, 0x1d, 0x01, 0xf0, 0x3c, 0xf8, 0x60, 0x69, + 0x25, 0x4f, 0xc1, 0x07, 0x37, 0xd5, 0xb8, 0x69, + 0x00, 0x28, 0x01, 0xd0, 0xf6, 0xf7, 0x87, 0xfc, + 0x20, 0x68, 0x05, 0x68, 0x28, 0x88, 0x80, 0x07, + 0x34, 0xd1, 0x01, 0xaa, 0x02, 0xa9, 0x28, 0x1c, + 0x01, 0xf0, 0x0b, 0xfc, 0x28, 0x1c, 0x01, 0xf0, + 0x12, 0xfc, 0x00, 0x78, 0xc0, 0x07, 0x0a, 0xd4, + 0x60, 0x69, 0x3c, 0x00, 0xec, 0x9a, 0x00, 0x00, + 0x80, 0x07, 0x26, 0xd4, 0x33, 0x1c, 0x29, 0x1c, + 0xa2, 0x7a, 0x20, 0x69, 0x7d, 0x69, 0xf6, 0xf7, + 0x72, 0xfc, 0x1e, 0xe0, 0x00, 0xab, 0x18, 0x7a, + 0x00, 0x28, 0x03, 0xd0, 0x01, 0x28, 0x06, 0xd0, + 0x02, 0x28, 0x16, 0xd1, 0x28, 0x1c, 0x79, 0x6a, + 0xf6, 0xf7, 0x61, 0xfc, 0x11, 0xe0, 0x00, 0xab, + 0x18, 0x79, 0x0e, 0x28, 0x01, 0xd0, 0x0f, 0x28, + 0x0b, 0xd1, 0x28, 0x1c, 0x3c, 0x00, 0x28, 0x9b, + 0x00, 0x00, 0x39, 0x6a, 0xf6, 0xf7, 0x56, 0xfc, + 0x06, 0xe0, 0x00, 0x07, 0x80, 0x0f, 0x03, 0xd1, + 0x20, 0x69, 0xf9, 0x69, 0xf6, 0xf7, 0x4e, 0xfc, + 0x78, 0x6b, 0x21, 0x21, 0x01, 0x30, 0x78, 0x63, + 0x22, 0x1c, 0x80, 0x20, 0x09, 0xf0, 0x31, 0xfe, + 0xfe, 0xbd, 0x28, 0x7a, 0x01, 0x00, 0x0b, 0x49, + 0x18, 0xb5, 0x08, 0x78, 0xc0, 0x07, 0x11, 0xd5, + 0x0a, 0x4a, 0x10, 0x1c, 0x20, 0x30, 0x3c, 0x00, + 0x64, 0x9b, 0x00, 0x00, 0x84, 0x79, 0x00, 0xab, + 0x1c, 0x70, 0xc0, 0x79, 0x58, 0x70, 0x08, 0x78, + 0x40, 0x23, 0x18, 0x43, 0x08, 0x70, 0x05, 0x48, + 0x00, 0x78, 0x08, 0x70, 0x00, 0xab, 0x18, 0x88, + 0xd0, 0x84, 0x18, 0xbd, 0x04, 0x00, 0x07, 0x00, + 0x00, 0x10, 0x07, 0x00, 0xe0, 0x60, 0x01, 0x00, + 0x70, 0x47, 0x00, 0x00, 0x05, 0x49, 0x10, 0xb5, + 0x88, 0x79, 0x05, 0x4b, 0x1a, 0x7c, 0x05, 0x4c, + 0x3c, 0x00, 0xa0, 0x9b, 0x00, 0x00, 0x24, 0x68, + 0x62, 0x40, 0x1a, 0x74, 0x88, 0x71, 0x10, 0xbd, + 0x00, 0x00, 0x20, 0x10, 0x07, 0x00, 0x10, 0x00, + 0x07, 0x00, 0x58, 0x5b, 0x01, 0x00, 0x04, 0x49, + 0x0a, 0x68, 0x04, 0x48, 0x00, 0x68, 0x02, 0x40, + 0x01, 0xd0, 0x88, 0x61, 0x70, 0x47, 0x48, 0x61, + 0x70, 0x47, 0x10, 0x00, 0x07, 0x00, 0x58, 0x5b, + 0x01, 0x00, 0x02, 0x1c, 0x01, 0x20, 0x00, 0x06, + 0x08, 0x43, 0x3c, 0x00, 0xdc, 0x9b, 0x00, 0x00, + 0x80, 0xb5, 0x2a, 0x21, 0x09, 0xf0, 0xe6, 0xfd, + 0x80, 0xbd, 0x00, 0x00, 0x10, 0xb5, 0x04, 0x1c, + 0x00, 0x29, 0x03, 0xd0, 0x81, 0x29, 0x07, 0xd1, + 0x81, 0x20, 0x00, 0xe0, 0x80, 0x20, 0x22, 0x1c, + 0x2c, 0x21, 0x09, 0xf0, 0xd7, 0xfd, 0x10, 0xbd, + 0x02, 0x21, 0x2c, 0x20, 0xf7, 0xf7, 0x4c, 0xfb, + 0x20, 0x1c, 0xf7, 0xf7, 0xc3, 0xfc, 0x10, 0xbd, + 0x80, 0xb5, 0xb4, 0xb0, 0x3c, 0x00, 0x18, 0x9c, + 0x00, 0x00, 0x01, 0x28, 0x06, 0xd0, 0x82, 0x28, + 0x1c, 0xd1, 0x1a, 0xa8, 0x07, 0xf0, 0x35, 0xfc, + 0x34, 0xb0, 0x80, 0xbd, 0x81, 0x29, 0x13, 0xd1, + 0x0d, 0x48, 0x0c, 0x4a, 0x81, 0x69, 0x00, 0x68, + 0x50, 0x32, 0x81, 0x42, 0x02, 0xd0, 0xd1, 0x6a, + 0x01, 0x29, 0x02, 0xd0, 0x11, 0x78, 0x02, 0x29, + 0x02, 0xd1, 0x07, 0xf0, 0x0a, 0xf9, 0xeb, 0xe7, + 0x69, 0x46, 0xf7, 0xf7, 0x5a, 0xfe, 0x3c, 0x00, + 0x54, 0x9c, 0x00, 0x00, 0xe7, 0xe7, 0x01, 0x21, + 0x00, 0xe0, 0x02, 0x21, 0x18, 0x20, 0xf7, 0xf7, + 0x21, 0xfb, 0xe0, 0xe7, 0xa4, 0x6e, 0x01, 0x00, + 0xb0, 0xb5, 0x04, 0x1c, 0x00, 0x68, 0x17, 0x4d, + 0x9a, 0xb0, 0x68, 0x63, 0x08, 0xf0, 0x3e, 0xfa, + 0x20, 0x79, 0x14, 0x49, 0x13, 0x4a, 0x50, 0x39, + 0x2c, 0x3a, 0x02, 0x28, 0x0a, 0xd1, 0x90, 0x68, + 0x80, 0x02, 0xa8, 0x61, 0xc8, 0x68, 0xe8, 0x61, + 0x3c, 0x00, 0x90, 0x9c, 0x00, 0x00, 0x02, 0x20, + 0x28, 0x72, 0x07, 0xf0, 0xe4, 0xf8, 0x1a, 0xb0, + 0xb0, 0xbd, 0x03, 0x1c, 0x00, 0x20, 0x00, 0x2b, + 0x0b, 0xd1, 0x52, 0x68, 0x92, 0x02, 0xaa, 0x61, + 0x0a, 0x1c, 0x89, 0x68, 0xe9, 0x61, 0x28, 0x72, + 0x10, 0x68, 0x69, 0x46, 0xf7, 0xf7, 0x27, 0xfe, + 0xed, 0xe7, 0xa8, 0x61, 0x01, 0x20, 0x28, 0x72, + 0x28, 0x70, 0x00, 0x20, 0x06, 0xf0, 0x7d, 0xfa, + 0xe5, 0xe7, 0x3c, 0x00, 0xcc, 0x9c, 0x00, 0x00, + 0xf4, 0x6e, 0x01, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x70, 0x47, 0x00, 0x00, 0x80, 0xb5, 0x01, 0x21, + 0x07, 0x20, 0xf7, 0xf7, 0xe1, 0xfa, 0x80, 0xbd, + 0x70, 0x47, 0x00, 0x00, 0xf8, 0xb5, 0x00, 0x24, + 0x19, 0x4a, 0x00, 0x26, 0xd5, 0x68, 0x11, 0x68, + 0x04, 0x35, 0x08, 0x1c, 0x91, 0x60, 0x02, 0xe0, + 0x01, 0x1c, 0x40, 0x19, 0x08, 0x60, 0x53, 0x68, + 0x83, 0x42, 0xf9, 0xd8, 0x3c, 0x00, 0x08, 0x9d, + 0x00, 0x00, 0x01, 0x34, 0x10, 0x32, 0x03, 0x2c, + 0x0e, 0x60, 0xee, 0xd3, 0xf6, 0xf7, 0xf1, 0xff, + 0x10, 0x48, 0x10, 0x49, 0x12, 0x4c, 0x08, 0x60, + 0x10, 0x49, 0x00, 0x20, 0x01, 0x22, 0x19, 0x23, + 0x5b, 0x01, 0x0c, 0x25, 0x43, 0x43, 0x1b, 0x19, + 0x45, 0x43, 0x4a, 0x51, 0x1f, 0x1c, 0x6d, 0x18, + 0xab, 0x60, 0x6b, 0x60, 0x00, 0x25, 0x1e, 0x1c, + 0x14, 0x36, 0x9e, 0x60, 0x33, 0x1c, 0x3c, 0x00, + 0x44, 0x9d, 0x00, 0x00, 0x01, 0x35, 0x27, 0x2d, + 0xf8, 0xdb, 0x01, 0x30, 0x03, 0x28, 0x9f, 0x60, + 0xe8, 0xdb, 0xf8, 0xbd, 0x20, 0x57, 0x01, 0x00, + 0x14, 0xc8, 0x01, 0x00, 0xb4, 0xcf, 0x01, 0x00, + 0x18, 0xd9, 0x01, 0x00, 0xb8, 0xcf, 0x01, 0x00, + 0xb0, 0xb5, 0x07, 0x4c, 0x25, 0x1c, 0xc0, 0x35, + 0x28, 0x6b, 0x1e, 0x21, 0x00, 0xf0, 0xf2, 0xf9, + 0xa2, 0x6b, 0x20, 0x1c, 0xdc, 0x30, 0x29, 0x6b, + 0x3c, 0x00, 0x80, 0x9d, 0x00, 0x00, 0x00, 0xf0, + 0xb6, 0xf9, 0xb0, 0xbd, 0x00, 0x00, 0xc4, 0x69, + 0x01, 0x00, 0x00, 0x20, 0x10, 0x22, 0x10, 0xb5, + 0x0a, 0x49, 0x05, 0xe0, 0x0c, 0x23, 0x43, 0x43, + 0x5c, 0x18, 0x0c, 0x34, 0xcc, 0x50, 0x01, 0x30, + 0x0f, 0x28, 0xf7, 0xd3, 0x0c, 0x23, 0x58, 0x43, + 0x09, 0x50, 0x04, 0x48, 0x41, 0x60, 0x01, 0x60, + 0x02, 0x82, 0x00, 0x21, 0x81, 0x60, 0xc1, 0x60, + 0x10, 0xbd, 0x3c, 0x00, 0xbc, 0x9d, 0x00, 0x00, + 0x84, 0xe2, 0x01, 0x00, 0x44, 0xe3, 0x01, 0x00, + 0x10, 0xb5, 0x08, 0x4c, 0xa0, 0x6a, 0x00, 0x28, + 0x03, 0xd1, 0x07, 0x48, 0xf9, 0xf7, 0xe8, 0xfe, + 0xa0, 0x62, 0x04, 0x48, 0x44, 0x30, 0x00, 0x68, + 0x01, 0x21, 0xf9, 0xf7, 0x95, 0xfc, 0x60, 0x62, + 0x10, 0xbd, 0x00, 0x00, 0x60, 0x6c, 0x01, 0x00, + 0xcd, 0x26, 0x01, 0x00, 0xff, 0xb5, 0x0d, 0x1c, + 0x04, 0x1c, 0x1e, 0x1c, 0x3c, 0x00, 0xf8, 0x9d, + 0x00, 0x00, 0x81, 0xb0, 0x0a, 0x9f, 0x1c, 0x21, + 0xf6, 0xf7, 0x4d, 0xfb, 0x03, 0x98, 0xa0, 0x61, + 0x25, 0x60, 0x25, 0x61, 0x26, 0x81, 0xa6, 0x82, + 0xe7, 0x60, 0x05, 0xb0, 0xf0, 0xbd, 0x70, 0xb5, + 0x0d, 0x1c, 0xa4, 0x21, 0x04, 0x1c, 0x08, 0x30, + 0xf6, 0xf7, 0x3d, 0xfb, 0x20, 0x1c, 0x44, 0x30, + 0x06, 0x22, 0x29, 0x1c, 0xf6, 0xf7, 0x65, 0xfb, + 0x18, 0x48, 0x3c, 0x23, 0x41, 0x1c, 0x3c, 0x00, + 0x34, 0x9e, 0x00, 0x00, 0x61, 0x62, 0x41, 0x78, + 0x59, 0x43, 0x09, 0x18, 0x89, 0x7a, 0x06, 0x29, + 0x01, 0xd1, 0xa0, 0x62, 0x02, 0xe0, 0x21, 0x1c, + 0x4d, 0x31, 0xa1, 0x62, 0x41, 0x78, 0x3c, 0x23, + 0x59, 0x43, 0x08, 0x18, 0x04, 0x30, 0x0f, 0x49, + 0x20, 0x62, 0x0b, 0x88, 0x00, 0x2b, 0x15, 0xd0, + 0xac, 0x20, 0x00, 0x5d, 0x0b, 0x4a, 0x18, 0x32, + 0x00, 0x02, 0x80, 0x18, 0xb0, 0x30, 0xe0, 0x60, + 0x3c, 0x00, 0x70, 0x9e, 0x00, 0x00, 0x8d, 0x68, + 0x00, 0x20, 0x08, 0xe0, 0xe2, 0x68, 0xc1, 0x00, + 0x54, 0x50, 0xe6, 0x68, 0x82, 0x00, 0x52, 0x19, + 0x71, 0x18, 0x4a, 0x60, 0x01, 0x30, 0x98, 0x42, + 0xf4, 0xdb, 0x70, 0xbd, 0x00, 0x00, 0x68, 0x61, + 0x01, 0x00, 0x58, 0x75, 0x01, 0x00, 0x1f, 0xb5, + 0x04, 0x1c, 0x60, 0x34, 0x61, 0x7a, 0x03, 0x1c, + 0x80, 0x6a, 0x08, 0x4a, 0x02, 0x91, 0x01, 0x90, + 0x03, 0x92, 0x3c, 0x00, 0xac, 0x9e, 0x00, 0x00, + 0xe2, 0x79, 0x18, 0x1c, 0x20, 0x30, 0x00, 0x92, + 0x44, 0x7b, 0x82, 0x7b, 0x5e, 0x20, 0xc1, 0x5a, + 0x18, 0x69, 0x04, 0x30, 0x23, 0x1c, 0x02, 0xf0, + 0x7f, 0xfe, 0x1f, 0xbd, 0x39, 0x4e, 0x00, 0x00, + 0xb0, 0xb5, 0x0b, 0x1c, 0x01, 0x88, 0x69, 0x20, + 0xc0, 0x5c, 0x86, 0xb0, 0x0e, 0x4a, 0x04, 0x91, + 0x03, 0x90, 0x05, 0x92, 0x0d, 0x4d, 0x59, 0x6a, + 0x9a, 0x6a, 0x2d, 0x68, 0x3c, 0x00, 0xe8, 0x9e, + 0x00, 0x00, 0x01, 0x24, 0x00, 0x2d, 0x00, 0xd0, + 0x04, 0x1c, 0x0a, 0x48, 0x00, 0x5d, 0x01, 0x91, + 0x02, 0x92, 0x00, 0x90, 0x18, 0x1c, 0x20, 0x30, + 0x44, 0x7b, 0x82, 0x7b, 0x5e, 0x20, 0xc1, 0x5a, + 0x18, 0x69, 0x04, 0x30, 0x23, 0x1c, 0x02, 0xf0, + 0xa4, 0xfe, 0x06, 0xb0, 0xb0, 0xbd, 0x51, 0x4f, + 0x00, 0x00, 0x18, 0x67, 0x01, 0x00, 0x0a, 0x61, + 0x01, 0x00, 0x01, 0x89, 0x8a, 0x1c, 0x3c, 0x00, + 0x24, 0x9f, 0x00, 0x00, 0x02, 0x81, 0x02, 0x68, + 0x02, 0x3a, 0x02, 0x60, 0x08, 0x0a, 0x09, 0x02, + 0x08, 0x43, 0x10, 0x80, 0x70, 0x47, 0x00, 0x00, + 0x70, 0xb5, 0x05, 0x1c, 0x08, 0x78, 0x0e, 0x1c, + 0xff, 0x28, 0x14, 0xd0, 0x71, 0x78, 0x02, 0x31, + 0x00, 0x20, 0xf7, 0xf7, 0x45, 0xfb, 0x04, 0x1c, + 0x02, 0x89, 0x00, 0x68, 0x31, 0x1c, 0xf6, 0xf7, + 0xcf, 0xfa, 0x00, 0x2d, 0x06, 0xd0, 0x28, 0x1c, + 0x3c, 0x00, 0x60, 0x9f, 0x00, 0x00, 0xf7, 0xf7, + 0x34, 0xfb, 0x21, 0x1c, 0xf7, 0xf7, 0x57, 0xfa, + 0x00, 0xe0, 0x25, 0x1c, 0x28, 0x1c, 0x70, 0xbd, + 0x00, 0x00, 0xff, 0xb5, 0x0f, 0x1c, 0x1e, 0x1c, + 0x04, 0x1c, 0x98, 0x1c, 0x01, 0x04, 0x09, 0x0c, + 0x00, 0x20, 0x81, 0xb0, 0xf7, 0xf7, 0x27, 0xfb, + 0x05, 0x1c, 0x00, 0x68, 0x00, 0x2c, 0x38, 0x60, + 0x03, 0x99, 0x01, 0x70, 0x38, 0x68, 0x46, 0x70, + 0x06, 0xd0, 0x3c, 0x00, 0x9c, 0x9f, 0x00, 0x00, + 0x20, 0x1c, 0xf7, 0xf7, 0x15, 0xfb, 0x29, 0x1c, + 0xf7, 0xf7, 0x38, 0xfa, 0x00, 0xe0, 0x2c, 0x1c, + 0x20, 0x1c, 0x05, 0xb0, 0xf0, 0xbd, 0x00, 0x00, + 0x70, 0xb5, 0x10, 0x48, 0x04, 0x68, 0x04, 0x60, + 0x0f, 0x49, 0x20, 0x20, 0x08, 0x60, 0xa0, 0x05, + 0x0e, 0x4e, 0x02, 0xd5, 0x70, 0x6a, 0xf6, 0xf7, + 0x05, 0xfa, 0xe0, 0x01, 0x02, 0xd5, 0x30, 0x6e, + 0xf6, 0xf7, 0x00, 0xfa, 0x3c, 0x00, 0xd8, 0x9f, + 0x00, 0x00, 0x0a, 0x48, 0x04, 0x40, 0x00, 0x25, + 0x07, 0xe0, 0xe0, 0x07, 0x03, 0xd5, 0xa8, 0x00, + 0x30, 0x58, 0xf6, 0xf7, 0xf6, 0xf9, 0x01, 0x35, + 0x64, 0x08, 0x00, 0x2c, 0xf5, 0xd1, 0x70, 0xbd, + 0x00, 0x00, 0x00, 0x40, 0x07, 0x00, 0x00, 0x10, + 0x07, 0x00, 0x30, 0x74, 0x01, 0x00, 0xff, 0xfd, + 0xff, 0xfe, 0x80, 0xb5, 0x07, 0x21, 0x80, 0x20, + 0xf7, 0xf7, 0x49, 0xf9, 0x80, 0xbd, 0x3c, 0x00, + 0x14, 0xa0, 0x00, 0x00, 0xf8, 0xb5, 0x14, 0x4b, + 0x82, 0x00, 0x9c, 0x58, 0xca, 0x06, 0x01, 0x27, + 0x39, 0x1c, 0xd2, 0x0e, 0x91, 0x40, 0x11, 0x4a, + 0x11, 0x60, 0x11, 0x4e, 0x40, 0x00, 0x85, 0x19, + 0x15, 0xe0, 0x60, 0x60, 0x20, 0x7b, 0xc1, 0x00, + 0x89, 0x19, 0x10, 0x31, 0x0a, 0x78, 0x0d, 0x23, + 0x9a, 0x43, 0x0a, 0x70, 0x39, 0x1c, 0x81, 0x40, + 0x31, 0x73, 0x07, 0x49, 0x00, 0x01, 0x08, 0x31, + 0x3c, 0x00, 0x50, 0xa0, 0x00, 0x00, 0x40, 0x18, + 0x08, 0x4a, 0x41, 0x68, 0x42, 0x60, 0x80, 0x68, + 0xf6, 0xf7, 0xbe, 0xf9, 0x28, 0x7b, 0x00, 0x28, + 0xe6, 0xd1, 0xf8, 0xbd, 0x00, 0x00, 0xa4, 0x73, + 0x01, 0x00, 0x00, 0x10, 0x07, 0x00, 0x00, 0x60, + 0x07, 0x00, 0xd1, 0x75, 0x00, 0x00, 0x03, 0x49, + 0x01, 0x20, 0x09, 0x7a, 0x00, 0x29, 0x00, 0xd1, + 0x00, 0x20, 0x70, 0x47, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x3c, 0x00, 0x8c, 0xa0, 0x00, 0x00, + 0x03, 0x49, 0x01, 0x20, 0x89, 0x7a, 0x00, 0x29, + 0x00, 0xd1, 0x00, 0x20, 0x70, 0x47, 0x00, 0x00, + 0x14, 0x7a, 0x01, 0x00, 0xb0, 0xb5, 0x00, 0x24, + 0xfa, 0xf7, 0x76, 0xfc, 0x00, 0x28, 0x14, 0xd0, + 0x01, 0x24, 0x08, 0xf0, 0x7d, 0xfe, 0x0a, 0x4d, + 0x0a, 0x4b, 0x00, 0x21, 0x5a, 0x18, 0xa0, 0x32, + 0x12, 0x78, 0x10, 0x2a, 0x06, 0xd3, 0x8a, 0x00, + 0xd2, 0x18, 0x92, 0x6f, 0x3c, 0x00, 0xc8, 0xa0, + 0x00, 0x00, 0x82, 0x1a, 0xaa, 0x42, 0x00, 0xd2, + 0x00, 0x24, 0x01, 0x31, 0x03, 0x29, 0xf0, 0xd3, + 0x20, 0x1c, 0xb0, 0xbd, 0x00, 0x00, 0x8b, 0x08, + 0x00, 0x00, 0xa4, 0x6c, 0x01, 0x00, 0x01, 0x48, + 0xc0, 0x68, 0x70, 0x47, 0x00, 0x00, 0x78, 0x69, + 0x01, 0x00, 0x70, 0xb5, 0x0d, 0x1c, 0x04, 0x1c, + 0x16, 0x1c, 0xfd, 0xf7, 0x2e, 0xfe, 0x00, 0x20, + 0xe0, 0x60, 0x26, 0x61, 0xa5, 0x60, 0x3c, 0x00, + 0x04, 0xa1, 0x00, 0x00, 0x70, 0xbd, 0x00, 0x00, + 0xf8, 0xb5, 0x17, 0x1c, 0x0e, 0x1c, 0x04, 0x1c, + 0x00, 0x28, 0x01, 0xd0, 0x00, 0x2e, 0x01, 0xd1, + 0xf7, 0xf7, 0xf2, 0xf8, 0xa0, 0x68, 0x07, 0xf0, + 0x49, 0xf9, 0x05, 0x1c, 0x01, 0xd1, 0xf7, 0xf7, + 0xeb, 0xf8, 0x29, 0x1c, 0x6e, 0x60, 0xaf, 0x60, + 0x20, 0x1c, 0xfd, 0xf7, 0xfd, 0xfd, 0xe0, 0x68, + 0x41, 0x1c, 0xe1, 0x60, 0x00, 0x28, 0x03, 0xd1, + 0x3c, 0x00, 0x40, 0xa1, 0x00, 0x00, 0x05, 0x48, + 0x21, 0x69, 0x05, 0xf0, 0x2c, 0xf9, 0x20, 0x68, + 0xa8, 0x42, 0x02, 0xd1, 0x38, 0x1c, 0xf6, 0xf7, + 0x48, 0xf9, 0xf8, 0xbd, 0x00, 0x00, 0xc4, 0x60, + 0x01, 0x00, 0x00, 0x22, 0x01, 0x39, 0x10, 0xb5, + 0x05, 0xe0, 0x0c, 0x23, 0x53, 0x43, 0x1c, 0x18, + 0x0c, 0x34, 0xc4, 0x50, 0x01, 0x32, 0x8a, 0x42, + 0xf7, 0xd3, 0x00, 0x21, 0x0c, 0x23, 0x5a, 0x43, + 0x81, 0x50, 0x3c, 0x00, 0x7c, 0xa1, 0x00, 0x00, + 0x10, 0xbd, 0x00, 0x00, 0xb0, 0xb5, 0x04, 0x1c, + 0x01, 0xd1, 0xf7, 0xf7, 0xbb, 0xf8, 0x20, 0x1c, + 0xfd, 0xf7, 0xda, 0xfd, 0x01, 0x1c, 0x85, 0x68, + 0xa0, 0x68, 0x07, 0xf0, 0x09, 0xf9, 0xe0, 0x68, + 0x01, 0x38, 0xe0, 0x60, 0x03, 0xd1, 0x06, 0x48, + 0x21, 0x69, 0x05, 0xf0, 0xe7, 0xf8, 0x21, 0x68, + 0x00, 0x29, 0x03, 0xd0, 0x88, 0x68, 0x49, 0x68, + 0xf6, 0xf7, 0x11, 0xf9, 0x3c, 0x00, 0xb8, 0xa1, + 0x00, 0x00, 0x28, 0x1c, 0xb0, 0xbd, 0xc4, 0x60, + 0x01, 0x00, 0x01, 0x21, 0x00, 0x28, 0x8c, 0xb5, + 0x00, 0xd1, 0x00, 0x21, 0x0e, 0x20, 0x09, 0xf0, + 0x32, 0xfa, 0x83, 0x20, 0x00, 0xab, 0x18, 0x80, + 0x00, 0x20, 0x04, 0xf0, 0x0c, 0xf8, 0x01, 0x90, + 0x68, 0x46, 0x03, 0xf0, 0x7a, 0xf9, 0x8c, 0xbd, + 0x00, 0x00, 0x80, 0xb5, 0x08, 0xf0, 0xdf, 0xfd, + 0x06, 0x49, 0x0a, 0x89, 0x06, 0x49, 0x3c, 0x00, + 0xf4, 0xa1, 0x00, 0x00, 0x09, 0x6e, 0x41, 0x1a, + 0x0b, 0x0c, 0x59, 0x18, 0x89, 0x1a, 0x09, 0x04, + 0x09, 0x0c, 0x40, 0x1a, 0x80, 0xbd, 0x00, 0x00, + 0x00, 0x90, 0x07, 0x00, 0xa4, 0x6c, 0x01, 0x00, + 0x70, 0xb5, 0x04, 0x1c, 0x88, 0x7e, 0x0d, 0x1c, + 0x20, 0x28, 0x03, 0xd9, 0x03, 0x21, 0x18, 0x20, + 0xf7, 0xf7, 0x40, 0xf8, 0x00, 0x26, 0x26, 0x76, + 0xa8, 0x7e, 0x29, 0x1c, 0x1b, 0x31, 0x60, 0x76, + 0x3c, 0x00, 0x30, 0xa2, 0x00, 0x00, 0x20, 0x1c, + 0x1d, 0x30, 0xaa, 0x7e, 0xf6, 0xf7, 0x5f, 0xf9, + 0x68, 0x68, 0x29, 0x1c, 0x60, 0x60, 0xa8, 0x68, + 0x13, 0x31, 0xa0, 0x60, 0xa8, 0x7b, 0x06, 0x22, + 0x20, 0x73, 0xe8, 0x7b, 0x60, 0x73, 0x28, 0x7c, + 0xa0, 0x73, 0x68, 0x7c, 0xe0, 0x73, 0xa8, 0x89, + 0x20, 0x82, 0xa8, 0x7c, 0xe0, 0x76, 0x26, 0x77, + 0x20, 0x1c, 0x12, 0x30, 0xa6, 0x76, 0xf6, 0xf7, + 0x46, 0xf9, 0x3c, 0x00, 0x6c, 0xa2, 0x00, 0x00, + 0x60, 0x68, 0x43, 0x1c, 0x1d, 0xd0, 0x11, 0x4d, + 0x6d, 0x61, 0x28, 0x68, 0x00, 0x28, 0x1a, 0xd0, + 0x22, 0x7b, 0x01, 0x1c, 0x0b, 0x7b, 0x9a, 0x42, + 0x01, 0xd3, 0x20, 0x60, 0x14, 0xe0, 0x0b, 0x1c, + 0x09, 0x68, 0x00, 0x29, 0x0b, 0xd0, 0x0e, 0x7b, + 0xb2, 0x42, 0x08, 0xd2, 0x0b, 0x68, 0x00, 0x2b, + 0xf0, 0xd0, 0x1e, 0x7b, 0xb2, 0x42, 0xed, 0xd3, + 0x23, 0x60, 0x0c, 0x60, 0x3c, 0x00, 0xa8, 0xa2, + 0x00, 0x00, 0x01, 0xe0, 0x21, 0x60, 0x1c, 0x60, + 0x00, 0x20, 0x70, 0xbd, 0x26, 0x60, 0x2c, 0x60, + 0xfa, 0xe7, 0xa4, 0x6e, 0x01, 0x00, 0x13, 0x4a, + 0xb0, 0xb5, 0x51, 0x68, 0x01, 0x24, 0x00, 0x29, + 0x1e, 0xd0, 0x13, 0x1d, 0xd1, 0x61, 0x13, 0x62, + 0x43, 0x68, 0x04, 0xe0, 0x10, 0x62, 0x00, 0x68, + 0xd0, 0x61, 0x00, 0x28, 0x14, 0xd0, 0xd0, 0x69, + 0x45, 0x68, 0x9d, 0x42, 0xf6, 0xd1, 0x3c, 0x00, + 0xe4, 0xa2, 0x00, 0x00, 0x10, 0x6a, 0x81, 0x42, + 0x04, 0xd1, 0x51, 0x60, 0xd0, 0x69, 0x00, 0x68, + 0x08, 0x60, 0x02, 0xe0, 0xd1, 0x69, 0x09, 0x68, + 0x01, 0x60, 0xd0, 0x69, 0xfc, 0xf7, 0xce, 0xff, + 0x00, 0x28, 0x00, 0xd0, 0x00, 0x24, 0x20, 0x1c, + 0xb0, 0xbd, 0x00, 0x00, 0xa4, 0x6e, 0x01, 0x00, + 0xb0, 0xb5, 0x17, 0x4d, 0x01, 0x24, 0x29, 0x68, + 0x00, 0x29, 0x27, 0xd0, 0x6d, 0x61, 0x29, 0x61, + 0x3c, 0x00, 0x20, 0xa3, 0x00, 0x00, 0x43, 0x68, + 0x04, 0xe0, 0x68, 0x61, 0x00, 0x68, 0x28, 0x61, + 0x00, 0x28, 0x1d, 0xd0, 0x28, 0x69, 0x42, 0x68, + 0x9a, 0x42, 0xf6, 0xd1, 0xaa, 0x69, 0x2b, 0x69, + 0x9a, 0x42, 0x00, 0xd1, 0xa9, 0x61, 0x6a, 0x69, + 0x91, 0x42, 0x03, 0xd1, 0x29, 0x60, 0x00, 0x68, + 0x08, 0x60, 0x06, 0xe0, 0x00, 0x68, 0x10, 0x60, + 0x28, 0x68, 0x00, 0x28, 0x01, 0xd1, 0x07, 0xf0, + 0xcc, 0xfe, 0x3c, 0x00, 0x5c, 0xa3, 0x00, 0x00, + 0x28, 0x69, 0xfc, 0xf7, 0x9d, 0xff, 0x00, 0x28, + 0x02, 0xd0, 0x00, 0x24, 0x00, 0xe0, 0x01, 0x24, + 0x20, 0x1c, 0xb0, 0xbd, 0xa4, 0x6e, 0x01, 0x00, + 0xb0, 0xb5, 0x05, 0x1c, 0x07, 0x48, 0x44, 0x68, + 0x07, 0xe0, 0x21, 0x1c, 0x44, 0x31, 0x28, 0x1c, + 0x00, 0xf0, 0xd6, 0xfc, 0x00, 0x28, 0x02, 0xd1, + 0x64, 0x68, 0x00, 0x2c, 0xf5, 0xd1, 0x20, 0x1c, + 0xb0, 0xbd, 0x00, 0x00, 0x3c, 0x00, 0x98, 0xa3, + 0x00, 0x00, 0x58, 0x75, 0x01, 0x00, 0x70, 0xb5, + 0x0d, 0x1c, 0x14, 0x1c, 0x00, 0x28, 0x0b, 0x4e, + 0x08, 0xd0, 0x70, 0x6e, 0x06, 0x23, 0x58, 0x43, + 0x02, 0x04, 0x12, 0x0c, 0x31, 0x1c, 0x28, 0x1c, + 0x22, 0x80, 0x07, 0xe0, 0x21, 0x88, 0x06, 0x20, + 0xf6, 0xf7, 0xa7, 0xf9, 0x70, 0x66, 0x22, 0x88, + 0x29, 0x1c, 0x30, 0x1c, 0xf6, 0xf7, 0x95, 0xf8, + 0x01, 0x20, 0x70, 0xbd, 0x00, 0x00, 0x3c, 0x00, + 0xd4, 0xa3, 0x00, 0x00, 0x10, 0x79, 0x01, 0x00, + 0x80, 0xb5, 0x03, 0x28, 0x03, 0xd8, 0x04, 0x4a, + 0xc0, 0x00, 0x11, 0x50, 0x80, 0xbd, 0x01, 0x21, + 0x26, 0x20, 0xf6, 0xf7, 0x5b, 0xff, 0x80, 0xbd, + 0x7c, 0x79, 0x01, 0x00, 0xb0, 0xb5, 0x05, 0x1c, + 0xc0, 0x68, 0x01, 0x89, 0x39, 0x29, 0x39, 0xd3, + 0x04, 0x68, 0xa0, 0x79, 0x88, 0x28, 0x35, 0xd1, + 0xe0, 0x79, 0x8e, 0x28, 0x32, 0xd1, 0x20, 0x7a, + 0x3c, 0x00, 0x10, 0xa4, 0x00, 0x00, 0x01, 0x28, + 0x2f, 0xd1, 0x60, 0x7a, 0x03, 0x28, 0x2c, 0xd1, + 0x20, 0x7b, 0x02, 0x28, 0x01, 0xd0, 0xfe, 0x28, + 0x27, 0xd1, 0x60, 0x7b, 0x1d, 0x21, 0x08, 0x40, + 0x01, 0x28, 0x22, 0xd1, 0xa0, 0x7b, 0xc8, 0x21, + 0x08, 0x40, 0x08, 0x28, 0x1d, 0xd1, 0xa8, 0x1d, + 0xfb, 0xf7, 0xe1, 0xf9, 0x00, 0x28, 0x18, 0xd0, + 0x19, 0x20, 0x21, 0x5c, 0x00, 0x29, 0x14, 0xd1, + 0x01, 0x30, 0x3c, 0x00, 0x4c, 0xa4, 0x00, 0x00, + 0x39, 0x28, 0xf9, 0xdb, 0x68, 0x8b, 0x04, 0x21, + 0x08, 0x43, 0x68, 0x83, 0x03, 0xf0, 0xd6, 0xfe, + 0x00, 0x28, 0x09, 0xd1, 0x00, 0x23, 0x00, 0x22, + 0x26, 0x20, 0x04, 0x49, 0x09, 0xf0, 0x92, 0xf9, + 0x03, 0x48, 0x00, 0x68, 0x01, 0xf0, 0x84, 0xf9, + 0xb0, 0xbd, 0x00, 0x00, 0x50, 0xc3, 0x00, 0x00, + 0x0c, 0x79, 0x01, 0x00, 0xb0, 0xb5, 0x08, 0x4c, + 0xa3, 0x68, 0x01, 0x33, 0x3c, 0x00, 0x88, 0xa4, + 0x00, 0x00, 0xa3, 0x60, 0x0c, 0x1c, 0x09, 0xd0, + 0x25, 0x68, 0x00, 0x2d, 0x03, 0xd0, 0x23, 0x7a, + 0x61, 0x68, 0xf5, 0xf7, 0xa3, 0xff, 0x20, 0x1c, + 0xf7, 0xf7, 0xa9, 0xf9, 0xb0, 0xbd, 0x94, 0x79, + 0x01, 0x00, 0x70, 0xb5, 0x04, 0x1c, 0xc0, 0x68, + 0x01, 0x89, 0x05, 0x68, 0x08, 0x29, 0x53, 0xd3, + 0x06, 0x22, 0x28, 0x1c, 0x55, 0x49, 0xf5, 0xf7, + 0x9e, 0xff, 0x00, 0x28, 0x37, 0xd1, 0x3c, 0x00, + 0xc4, 0xa4, 0x00, 0x00, 0xe9, 0x88, 0x52, 0x4e, + 0x04, 0x3e, 0x81, 0x29, 0x24, 0xd1, 0xe5, 0x68, + 0x29, 0x68, 0x08, 0x7a, 0x4a, 0x7a, 0x00, 0x02, + 0x80, 0x18, 0x00, 0x04, 0x00, 0x0c, 0x42, 0x0b, + 0x00, 0x05, 0x00, 0x0d, 0xe2, 0x75, 0x20, 0x83, + 0x4b, 0x89, 0x00, 0x20, 0x42, 0x00, 0xb2, 0x5a, + 0x9a, 0x42, 0x06, 0xd1, 0x28, 0x89, 0x0c, 0x38, + 0x02, 0x0a, 0x00, 0x02, 0x10, 0x43, 0x48, 0x81, + 0x3c, 0x00, 0x00, 0xa5, 0x00, 0x00, 0x02, 0xe0, + 0x01, 0x30, 0x02, 0x28, 0xf1, 0xd3, 0xe0, 0x68, + 0x01, 0x89, 0x0a, 0x39, 0x01, 0x81, 0xe0, 0x68, + 0x01, 0x68, 0x0a, 0x31, 0x1c, 0xe0, 0x00, 0x22, + 0x00, 0x20, 0x43, 0x00, 0xf3, 0x5a, 0x8b, 0x42, + 0x01, 0xd1, 0x01, 0x22, 0x02, 0xe0, 0x01, 0x30, + 0x02, 0x28, 0xf6, 0xd3, 0x00, 0x2a, 0x11, 0xd1, + 0x07, 0xe0, 0x36, 0x49, 0x06, 0x22, 0x06, 0x31, + 0x28, 0x1c, 0x3c, 0x00, 0x3c, 0xa5, 0x00, 0x00, + 0xf5, 0xf7, 0x5e, 0xff, 0x00, 0x28, 0x08, 0xd1, + 0xe0, 0x68, 0x01, 0x89, 0x06, 0x39, 0x01, 0x81, + 0xe0, 0x68, 0x01, 0x68, 0x06, 0x31, 0x01, 0x60, + 0x10, 0xe0, 0xe0, 0x68, 0xff, 0xf7, 0xe2, 0xfc, + 0x0c, 0xe0, 0x02, 0x31, 0x01, 0x81, 0xe0, 0x68, + 0x01, 0x68, 0x02, 0x39, 0x01, 0x60, 0xe0, 0x68, + 0x00, 0x89, 0x02, 0x38, 0x02, 0x0a, 0x00, 0x02, + 0x10, 0x43, 0x08, 0x80, 0x3c, 0x00, 0x78, 0xa5, + 0x00, 0x00, 0xe0, 0x68, 0x03, 0x25, 0x02, 0x89, + 0x01, 0x68, 0x24, 0x4e, 0x02, 0x2a, 0x10, 0xd9, + 0x09, 0x88, 0x08, 0x29, 0x05, 0xd0, 0xc1, 0x23, + 0xdb, 0x00, 0x99, 0x42, 0x03, 0xd1, 0x01, 0x25, + 0x02, 0xe0, 0x00, 0x25, 0x00, 0xe0, 0x02, 0x25, + 0xe9, 0x00, 0x71, 0x58, 0x00, 0x29, 0x00, 0xd1, + 0x02, 0x25, 0xf7, 0xf7, 0x04, 0xf8, 0xe9, 0x00, + 0x89, 0x19, 0x89, 0x88, 0x88, 0x42, 0x3c, 0x00, + 0xb4, 0xa5, 0x00, 0x00, 0x00, 0xd9, 0x03, 0x25, + 0xa1, 0x1d, 0x20, 0x1c, 0xfd, 0xf7, 0x34, 0xfc, + 0x00, 0x28, 0x00, 0xd1, 0x03, 0x25, 0x02, 0x2d, + 0x05, 0xd0, 0x03, 0x2d, 0x07, 0xd1, 0xe0, 0x68, + 0xf6, 0xf7, 0xe2, 0xff, 0x70, 0xbd, 0x20, 0x1c, + 0xfd, 0xf7, 0x1c, 0xfd, 0x70, 0xbd, 0xe0, 0x68, + 0x01, 0x89, 0x02, 0x39, 0x01, 0x81, 0xe0, 0x68, + 0x01, 0x68, 0x02, 0x31, 0x01, 0x60, 0xe8, 0x00, + 0x3c, 0x00, 0xf0, 0xa5, 0x00, 0x00, 0x31, 0x58, + 0x20, 0x1c, 0xf5, 0xf7, 0xf1, 0xfe, 0x00, 0x28, + 0xef, 0xd1, 0xe0, 0x68, 0x01, 0x89, 0x02, 0x31, + 0x01, 0x81, 0xe0, 0x68, 0x01, 0x68, 0x02, 0x39, + 0x01, 0x60, 0xe3, 0xe7, 0x00, 0x00, 0x6a, 0x46, + 0x01, 0x00, 0x7c, 0x79, 0x01, 0x00, 0x70, 0xb5, + 0x0e, 0x1c, 0x04, 0x1c, 0x15, 0x1c, 0xf7, 0xf7, + 0x8c, 0xfb, 0x00, 0x28, 0x2a, 0xd0, 0x1b, 0x49, + 0x08, 0x68, 0x3c, 0x00, 0x2c, 0xa6, 0x00, 0x00, + 0x01, 0x30, 0x08, 0x60, 0x00, 0x2e, 0x0a, 0xd0, + 0x01, 0x2e, 0x0b, 0xd0, 0x02, 0x2e, 0x0f, 0xd1, + 0x20, 0x1c, 0x04, 0xf0, 0xcd, 0xf8, 0x20, 0x1c, + 0xff, 0xf7, 0xd6, 0xfe, 0x0c, 0xe0, 0x08, 0x21, + 0xe0, 0x68, 0x02, 0xe0, 0xc1, 0x21, 0xe0, 0x68, + 0xc9, 0x00, 0x04, 0xf0, 0x35, 0xf9, 0x03, 0xe0, + 0x02, 0x21, 0x26, 0x20, 0xf6, 0xf7, 0x20, 0xfe, + 0xe2, 0x7d, 0xe1, 0x6a, 0x3c, 0x00, 0x68, 0xa6, + 0x00, 0x00, 0x28, 0x1c, 0xfc, 0xf7, 0x95, 0xfb, + 0x20, 0x63, 0x00, 0x20, 0x20, 0x62, 0xa0, 0x62, + 0x20, 0x1c, 0x00, 0xf0, 0x6c, 0xfe, 0x70, 0xbd, + 0xe0, 0x68, 0xf6, 0xf7, 0x8a, 0xff, 0x00, 0x2d, + 0xf9, 0xd0, 0xe3, 0x7d, 0x00, 0x22, 0x01, 0x20, + 0xe1, 0x6a, 0xf5, 0xf7, 0xa7, 0xfe, 0x70, 0xbd, + 0x00, 0x00, 0x94, 0x79, 0x01, 0x00, 0x80, 0xb5, + 0x01, 0x28, 0x04, 0xd1, 0x05, 0x48, 0x3c, 0x00, + 0xa4, 0xa6, 0x00, 0x00, 0x00, 0x68, 0x01, 0xf0, + 0x09, 0xf9, 0x80, 0xbd, 0x03, 0x21, 0x26, 0x20, + 0xf6, 0xf7, 0xf8, 0xfd, 0x80, 0xbd, 0x00, 0x00, + 0x0c, 0x79, 0x01, 0x00, 0xf8, 0xb5, 0x06, 0x1c, + 0x80, 0x79, 0x00, 0x24, 0xc0, 0x07, 0x2d, 0xd5, + 0xf0, 0x68, 0x00, 0x68, 0x41, 0x7a, 0x11, 0x29, + 0x28, 0xd1, 0xc1, 0x88, 0x0a, 0x0a, 0x09, 0x02, + 0x11, 0x43, 0xc9, 0x04, 0x22, 0xd1, 0x01, 0x78, + 0x3c, 0x00, 0xe0, 0xa6, 0x00, 0x00, 0x11, 0x4f, + 0x09, 0x07, 0x89, 0x0e, 0x08, 0x18, 0x41, 0x88, + 0x0a, 0x0a, 0x09, 0x02, 0x11, 0x43, 0x0d, 0x04, + 0x2d, 0x0c, 0x43, 0x2d, 0x39, 0x68, 0x01, 0xd1, + 0xca, 0x07, 0x0e, 0xd4, 0x44, 0x2d, 0x06, 0xd1, + 0xc9, 0x07, 0x04, 0xd5, 0x24, 0x30, 0x00, 0xf0, + 0x22, 0xfb, 0x00, 0x28, 0x05, 0xd0, 0x06, 0x48, + 0x85, 0x42, 0x06, 0xd1, 0x38, 0x68, 0x80, 0x07, + 0x03, 0xd5, 0x3c, 0x00, 0x1c, 0xa7, 0x00, 0x00, + 0x01, 0x24, 0xf0, 0x68, 0xf6, 0xf7, 0x3a, 0xff, + 0x20, 0x1c, 0xf8, 0xbd, 0x7c, 0x5a, 0x01, 0x00, + 0x6c, 0x07, 0x00, 0x00, 0x80, 0xb5, 0x00, 0x28, + 0x07, 0xd0, 0x00, 0x21, 0x26, 0x20, 0x08, 0xf0, + 0x7b, 0xff, 0x02, 0x48, 0x00, 0x68, 0x01, 0xf0, + 0xbb, 0xf8, 0x80, 0xbd, 0x0c, 0x79, 0x01, 0x00, + 0x10, 0xb5, 0x04, 0x1c, 0x09, 0x4a, 0x08, 0x1c, + 0x51, 0x68, 0x01, 0x31, 0x3c, 0x00, 0x58, 0xa7, + 0x00, 0x00, 0x51, 0x60, 0x00, 0x21, 0x21, 0x62, + 0xa1, 0x62, 0xe2, 0x7d, 0xe1, 0x6a, 0xfc, 0xf7, + 0x18, 0xfb, 0x20, 0x63, 0x20, 0x1c, 0xf7, 0xf7, + 0xe6, 0xfa, 0x20, 0x1c, 0x00, 0xf0, 0xef, 0xfd, + 0x10, 0xbd, 0x94, 0x79, 0x01, 0x00, 0x0c, 0xb5, + 0x02, 0x1c, 0x08, 0x1c, 0x00, 0x21, 0x01, 0x91, + 0x00, 0x92, 0x6a, 0x46, 0x01, 0xa9, 0x00, 0xf0, + 0x02, 0xf8, 0x0c, 0xbd, 0x00, 0x00, 0x3c, 0x00, + 0x94, 0xa7, 0x00, 0x00, 0x70, 0xb5, 0x13, 0x68, + 0x00, 0x2b, 0x1e, 0xd0, 0x00, 0x26, 0x0b, 0x68, + 0x00, 0x2b, 0x02, 0xd1, 0x13, 0x68, 0x1b, 0x68, + 0x0b, 0x60, 0x13, 0x68, 0x1c, 0x68, 0x1b, 0x89, + 0xe5, 0x18, 0x08, 0xe0, 0x5c, 0x78, 0x1c, 0x19, + 0x02, 0x34, 0x0c, 0x60, 0x1c, 0x78, 0x84, 0x42, + 0x01, 0xd1, 0x18, 0x1c, 0x70, 0xbd, 0x0b, 0x68, + 0xab, 0x42, 0xf3, 0xd3, 0x13, 0x68, 0xdb, 0x68, + 0x3c, 0x00, 0xd0, 0xa7, 0x00, 0x00, 0x13, 0x60, + 0x0e, 0x60, 0x13, 0x68, 0x00, 0x2b, 0xe1, 0xd1, + 0x00, 0x20, 0x70, 0xbd, 0x00, 0x00, 0x70, 0xb5, + 0x03, 0x1c, 0x20, 0xd0, 0x18, 0x68, 0x1e, 0x89, + 0x05, 0x1c, 0x16, 0xe0, 0x04, 0x78, 0xdd, 0x2c, + 0x10, 0xd1, 0x84, 0x78, 0x00, 0x2c, 0x0d, 0xd1, + 0xc4, 0x78, 0x50, 0x2c, 0x0a, 0xd1, 0x04, 0x79, + 0xf2, 0x2c, 0x07, 0xd1, 0x44, 0x79, 0x8c, 0x42, + 0x04, 0xd1, 0x3c, 0x00, 0x0c, 0xa8, 0x00, 0x00, + 0x02, 0x29, 0x0c, 0xd1, 0x84, 0x79, 0x94, 0x42, + 0x09, 0xd0, 0x44, 0x78, 0x20, 0x18, 0x02, 0x30, + 0x44, 0x1b, 0xb4, 0x42, 0xe5, 0xdb, 0xdb, 0x68, + 0x00, 0x2b, 0xde, 0xd1, 0x00, 0x20, 0x70, 0xbd, + 0x04, 0x49, 0x80, 0xb5, 0x0a, 0x78, 0x0a, 0x20, + 0x00, 0x2a, 0x00, 0xd0, 0x48, 0x6a, 0x00, 0xf0, + 0xd1, 0xf8, 0x80, 0xbd, 0x1c, 0x75, 0x01, 0x00, + 0xb0, 0xb5, 0x17, 0x4c, 0x3c, 0x00, 0x48, 0xa8, + 0x00, 0x00, 0x20, 0x68, 0x00, 0x28, 0x29, 0xd0, + 0x16, 0x4d, 0xe8, 0x69, 0x00, 0x28, 0x25, 0xd1, + 0x01, 0xf0, 0x3f, 0xfa, 0x00, 0x28, 0x21, 0xd1, + 0xff, 0xf7, 0x41, 0xfc, 0x00, 0x28, 0x1d, 0xd1, + 0x20, 0x68, 0xa9, 0x69, 0x40, 0x18, 0x08, 0xf0, + 0xd6, 0xf9, 0x00, 0x28, 0x16, 0xd0, 0x02, 0xf0, + 0x06, 0xfd, 0x21, 0x68, 0x40, 0x18, 0x08, 0xf0, + 0xce, 0xf9, 0x00, 0x28, 0x0e, 0xd0, 0x3c, 0x00, + 0x84, 0xa8, 0x00, 0x00, 0x01, 0x20, 0xe8, 0x61, + 0x00, 0x22, 0x25, 0x21, 0x80, 0x20, 0x08, 0xf0, + 0x8f, 0xff, 0x06, 0x48, 0x29, 0x6a, 0x04, 0xf0, + 0x83, 0xfd, 0x01, 0x21, 0x28, 0x6a, 0x00, 0xf0, + 0x89, 0xff, 0xb0, 0xbd, 0xe8, 0x59, 0x01, 0x00, + 0x1c, 0x75, 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, + 0x70, 0xb5, 0x05, 0x1c, 0x00, 0x24, 0xfa, 0xf7, + 0x0b, 0xff, 0x18, 0x4e, 0x71, 0x6a, 0x40, 0x18, + 0x3c, 0x00, 0xc0, 0xa8, 0x00, 0x00, 0x00, 0xf0, + 0x8e, 0xf8, 0x00, 0x28, 0x0b, 0xd1, 0x04, 0xf0, + 0xfe, 0xfb, 0x00, 0x21, 0x25, 0x20, 0x08, 0xf0, + 0xb0, 0xfe, 0x03, 0x22, 0x29, 0x1c, 0x28, 0x1c, + 0x00, 0xf0, 0xaf, 0xf8, 0x18, 0xe0, 0x70, 0x6a, + 0x44, 0x1e, 0x00, 0xf0, 0x7c, 0xf8, 0x00, 0x28, + 0x12, 0xd1, 0x0c, 0x48, 0x31, 0x6a, 0x04, 0xf0, + 0x56, 0xfd, 0x01, 0x21, 0x30, 0x6a, 0x00, 0xf0, + 0x5c, 0xff, 0x3c, 0x00, 0xfc, 0xa8, 0x00, 0x00, + 0x00, 0x20, 0xfa, 0xf7, 0x0d, 0xfe, 0x06, 0xf0, + 0x03, 0xf8, 0x00, 0x23, 0x00, 0x22, 0x25, 0x20, + 0x05, 0x49, 0x08, 0xf0, 0x3f, 0xff, 0x20, 0x1c, + 0x07, 0xf0, 0xfc, 0xfa, 0x70, 0xbd, 0x00, 0x00, + 0x1c, 0x75, 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, + 0x10, 0x27, 0x00, 0x00, 0x80, 0xb5, 0x01, 0x28, + 0x07, 0xd0, 0x80, 0x28, 0x0d, 0xd1, 0x00, 0x22, + 0x00, 0x21, 0x08, 0x48, 0x3c, 0x00, 0x38, 0xa9, + 0x00, 0x00, 0xf8, 0xf7, 0x9a, 0xfe, 0x80, 0xbd, + 0x01, 0x29, 0x02, 0xd1, 0x06, 0x49, 0x00, 0x20, + 0xc8, 0x61, 0x04, 0xf0, 0xbe, 0xfb, 0x80, 0xbd, + 0x05, 0x21, 0x25, 0x20, 0xf6, 0xf7, 0xa7, 0xfc, + 0x80, 0xbd, 0x61, 0xa9, 0x00, 0x00, 0x1c, 0x75, + 0x01, 0x00, 0x00, 0x21, 0x00, 0x28, 0x80, 0xb5, + 0x01, 0xd1, 0x03, 0x48, 0x41, 0x68, 0x01, 0x22, + 0x25, 0x20, 0x08, 0xf0, 0x2c, 0xfe, 0x3c, 0x00, + 0x74, 0xa9, 0x00, 0x00, 0x80, 0xbd, 0x00, 0x00, + 0xe8, 0x59, 0x01, 0x00, 0x02, 0x49, 0xc8, 0x68, + 0x01, 0x38, 0x48, 0x62, 0x70, 0x47, 0x00, 0x00, + 0x1c, 0x75, 0x01, 0x00, 0x38, 0xb5, 0x03, 0x1c, + 0x08, 0x1c, 0x19, 0x1c, 0x11, 0x4b, 0x06, 0xd0, + 0x01, 0x21, 0x11, 0x80, 0x0a, 0x1c, 0x19, 0x1c, + 0xf5, 0xf7, 0xaa, 0xfd, 0x17, 0xe0, 0x0d, 0x4d, + 0x01, 0x1c, 0x2c, 0x78, 0x12, 0x88, 0x18, 0x1c, + 0x3c, 0x00, 0xb0, 0xa9, 0x00, 0x00, 0xf5, 0xf7, + 0xa2, 0xfd, 0x28, 0x78, 0x84, 0x42, 0x0d, 0xd0, + 0x00, 0x23, 0x6b, 0x61, 0x00, 0x28, 0x03, 0xd0, + 0x00, 0x20, 0x07, 0xf0, 0xa4, 0xfa, 0x05, 0xe0, + 0x00, 0x22, 0x00, 0x21, 0x00, 0x20, 0x00, 0x92, + 0xf8, 0xf7, 0x23, 0xfc, 0x01, 0x20, 0x38, 0xbd, + 0x00, 0x00, 0x1c, 0x75, 0x01, 0x00, 0x70, 0xb5, + 0x04, 0x1c, 0x01, 0x26, 0x08, 0xf0, 0xe1, 0xf9, + 0x05, 0x1c, 0x3c, 0x00, 0xec, 0xa9, 0x00, 0x00, + 0x00, 0x20, 0xfa, 0xf7, 0x8b, 0xfd, 0x44, 0x43, + 0x02, 0xf0, 0x40, 0xfc, 0x02, 0xf0, 0x3e, 0xfc, + 0x01, 0x1c, 0x23, 0x1c, 0x00, 0x22, 0x28, 0x1c, + 0x08, 0xf0, 0x7c, 0xfa, 0x00, 0x28, 0x13, 0xd1, + 0x0a, 0x48, 0x23, 0x1c, 0x00, 0x22, 0x81, 0x69, + 0x28, 0x1c, 0x08, 0xf0, 0x73, 0xfa, 0x00, 0x28, + 0x0a, 0xd1, 0xf8, 0xf7, 0x19, 0xfc, 0x01, 0x1c, + 0x23, 0x1c, 0x00, 0x22, 0x3c, 0x00, 0x28, 0xaa, + 0x00, 0x00, 0x28, 0x1c, 0x08, 0xf0, 0x69, 0xfa, + 0x00, 0x28, 0x00, 0xd1, 0x00, 0x26, 0x30, 0x1c, + 0x70, 0xbd, 0x1c, 0x75, 0x01, 0x00, 0x70, 0xb5, + 0x0d, 0x1c, 0x04, 0x1c, 0x16, 0x1c, 0x07, 0xf0, + 0x76, 0xf9, 0x00, 0x28, 0x0d, 0xd0, 0xfa, 0xf7, + 0x52, 0xfe, 0x00, 0x28, 0x09, 0xd0, 0xff, 0x30, + 0x01, 0x30, 0x43, 0x68, 0x00, 0x2b, 0x04, 0xd0, + 0x22, 0x1c, 0x29, 0x1c, 0x30, 0x1c, 0x3c, 0x00, + 0x64, 0xaa, 0x00, 0x00, 0xf5, 0xf7, 0xbb, 0xfc, + 0x70, 0xbd, 0x00, 0x00, 0x80, 0xb5, 0x01, 0x21, + 0x1d, 0x20, 0x08, 0xf0, 0xdf, 0xfd, 0x07, 0x4a, + 0x07, 0x48, 0x11, 0x69, 0x01, 0x60, 0x51, 0x69, + 0x41, 0x60, 0x06, 0x49, 0x49, 0x68, 0x81, 0x60, + 0x00, 0x21, 0xc1, 0x60, 0x03, 0xf0, 0x74, 0xfc, + 0x80, 0xbd, 0x00, 0x00, 0x28, 0x61, 0x01, 0x00, + 0x48, 0x75, 0x01, 0x00, 0x90, 0x5c, 0x01, 0x00, + 0x3c, 0x00, 0xa0, 0xaa, 0x00, 0x00, 0x70, 0xb5, + 0x04, 0x1c, 0x40, 0x6b, 0x00, 0x28, 0x35, 0xd0, + 0x1d, 0x4d, 0x00, 0x26, 0x28, 0x78, 0x00, 0x28, + 0x24, 0xd0, 0x41, 0x20, 0x00, 0x5d, 0x00, 0x28, + 0x03, 0xd1, 0x08, 0xf0, 0x76, 0xf9, 0xa8, 0x61, + 0x1b, 0xe0, 0x69, 0x69, 0x01, 0x31, 0x69, 0x61, + 0xa8, 0x68, 0x00, 0x28, 0x08, 0xd0, 0x81, 0x42, + 0x06, 0xd1, 0x20, 0x69, 0x01, 0x1c, 0x10, 0x31, + 0x04, 0x30, 0x3c, 0x00, 0xdc, 0xaa, 0x00, 0x00, + 0x82, 0x22, 0xff, 0xf7, 0xad, 0xff, 0x68, 0x68, + 0x00, 0x28, 0x0a, 0xd0, 0x69, 0x69, 0x81, 0x42, + 0x07, 0xd1, 0x20, 0x69, 0x01, 0x1c, 0x10, 0x31, + 0x04, 0x30, 0x02, 0x22, 0xff, 0xf7, 0xa0, 0xff, + 0x6e, 0x61, 0x68, 0x78, 0x05, 0x21, 0x08, 0x40, + 0x08, 0xd0, 0x07, 0x48, 0x00, 0x78, 0x0e, 0x28, + 0x03, 0xd3, 0x60, 0x34, 0xe0, 0x79, 0xfb, 0xf7, + 0xcf, 0xff, 0x70, 0xbd, 0x3c, 0x00, 0x18, 0xab, + 0x00, 0x00, 0x03, 0x48, 0x06, 0x60, 0x70, 0xbd, + 0x00, 0x00, 0x1c, 0x75, 0x01, 0x00, 0x10, 0x67, + 0x01, 0x00, 0xd4, 0x7e, 0x01, 0x00, 0x80, 0x02, + 0x70, 0x47, 0x14, 0x23, 0x30, 0xb5, 0x09, 0x4d, + 0x4b, 0x43, 0x5b, 0x19, 0x5b, 0x68, 0x08, 0x24, + 0x00, 0x2b, 0x00, 0xd1, 0x02, 0x24, 0x38, 0x23, + 0x5a, 0x43, 0x05, 0x4b, 0x89, 0x00, 0xd2, 0x18, + 0x51, 0x5a, 0x02, 0x68, 0x09, 0x19, 0x3c, 0x00, + 0x54, 0xab, 0x00, 0x00, 0x51, 0x1a, 0x01, 0x60, + 0x30, 0xbd, 0x00, 0x00, 0x74, 0x40, 0x01, 0x00, + 0x8c, 0x41, 0x01, 0x00, 0xf8, 0xb5, 0x07, 0x1c, + 0x2c, 0x48, 0x14, 0x1c, 0x2c, 0x4a, 0x48, 0x43, + 0x86, 0x46, 0x80, 0x18, 0x80, 0x0d, 0x84, 0x46, + 0x2b, 0x48, 0x2a, 0x4a, 0x06, 0x26, 0x1d, 0x1c, + 0x48, 0x43, 0x4a, 0x43, 0x0e, 0x2f, 0x40, 0xd2, + 0x01, 0xa3, 0xdb, 0x5d, 0x5b, 0x00, 0x9f, 0x44, + 0x3c, 0x00, 0x90, 0xab, 0x00, 0x00, 0x06, 0x08, + 0x0a, 0x0f, 0x14, 0x18, 0x1d, 0x20, 0x27, 0x24, + 0x27, 0x2b, 0x2f, 0x31, 0xc8, 0x00, 0x1f, 0xe0, + 0x88, 0x00, 0x1d, 0xe0, 0x21, 0x49, 0x70, 0x46, + 0x40, 0x18, 0x00, 0x0d, 0x18, 0xe0, 0x1f, 0x4a, + 0x80, 0x18, 0x80, 0x0d, 0x40, 0x18, 0x21, 0xe0, + 0x1e, 0x48, 0x10, 0x18, 0x00, 0x0d, 0x1d, 0xe0, + 0x1d, 0x49, 0x70, 0x46, 0x40, 0x18, 0x40, 0x0d, + 0x0a, 0xe0, 0x3c, 0x00, 0xcc, 0xab, 0x00, 0x00, + 0x1b, 0x49, 0x40, 0x18, 0x01, 0xe0, 0x1b, 0x48, + 0x10, 0x18, 0x40, 0x0d, 0x11, 0xe0, 0x1a, 0x49, + 0x40, 0x18, 0x05, 0xe0, 0x60, 0x46, 0x20, 0x80, + 0x00, 0x20, 0x16, 0xe0, 0x17, 0x48, 0x10, 0x18, + 0x80, 0x0d, 0x06, 0xe0, 0x16, 0x49, 0x02, 0xe0, + 0x16, 0x48, 0x48, 0x43, 0x16, 0x49, 0x40, 0x18, + 0xc0, 0x0d, 0x03, 0x30, 0x80, 0x08, 0x80, 0x00, + 0x20, 0x80, 0x2e, 0x80, 0x3c, 0x00, 0x08, 0xac, + 0x00, 0x00, 0xf8, 0xbd, 0xff, 0x21, 0xff, 0x20, + 0xf6, 0xf7, 0x49, 0xfb, 0x00, 0x20, 0x20, 0x80, + 0x28, 0x80, 0xf6, 0xe7, 0x00, 0x00, 0xd1, 0x45, + 0x17, 0x00, 0xff, 0xff, 0x3f, 0x00, 0xe3, 0x38, + 0x0e, 0x00, 0x55, 0x55, 0x15, 0x00, 0xff, 0xff, + 0x0f, 0x00, 0xa9, 0xaa, 0x2a, 0x01, 0x70, 0x1c, + 0x37, 0x00, 0xff, 0xff, 0x1f, 0x00, 0xcb, 0xcc, + 0x4c, 0x00, 0x70, 0x1c, 0x47, 0x00, 0x3c, 0x00, + 0x44, 0xac, 0x00, 0x00, 0xa9, 0xaa, 0x7a, 0x00, + 0x70, 0x1c, 0x67, 0x00, 0xa9, 0xaa, 0xba, 0x00, + 0x84, 0xf6, 0x12, 0x00, 0xec, 0x25, 0xb4, 0x00, + 0x04, 0x49, 0x00, 0x28, 0x01, 0xd0, 0x09, 0x22, + 0x00, 0xe0, 0x14, 0x22, 0x4a, 0x80, 0x48, 0x60, + 0x70, 0x47, 0x00, 0x00, 0xa4, 0x69, 0x01, 0x00, + 0x80, 0xb5, 0x06, 0x22, 0xf5, 0xf7, 0x40, 0xfc, + 0x80, 0xbd, 0x00, 0x00, 0xbc, 0xb5, 0x15, 0x1c, + 0x3c, 0x00, 0x80, 0xac, 0x00, 0x00, 0x04, 0x1c, + 0x04, 0x31, 0x09, 0x04, 0x09, 0x0c, 0x01, 0xaa, + 0x6b, 0x46, 0xff, 0xf7, 0x6a, 0xff, 0x38, 0x20, + 0x06, 0x49, 0x68, 0x43, 0x40, 0x18, 0xa1, 0x00, + 0x40, 0x5a, 0x00, 0xab, 0x99, 0x88, 0x40, 0x18, + 0x19, 0x88, 0x40, 0x18, 0x00, 0x04, 0x00, 0x0c, + 0xbc, 0xbd, 0x8c, 0x41, 0x01, 0x00, 0xbc, 0xb5, + 0x04, 0x1c, 0x15, 0x1c, 0x01, 0xaa, 0x6b, 0x46, + 0xff, 0xf7, 0x3c, 0x00, 0xbc, 0xac, 0x00, 0x00, + 0x53, 0xff, 0x38, 0x20, 0x05, 0x49, 0x68, 0x43, + 0x40, 0x18, 0xa1, 0x00, 0x40, 0x5a, 0x00, 0xab, + 0x99, 0x88, 0x40, 0x18, 0x00, 0x04, 0x00, 0x0c, + 0xbc, 0xbd, 0x00, 0x00, 0x8c, 0x41, 0x01, 0x00, + 0x80, 0xb5, 0x00, 0x28, 0x0f, 0xd0, 0x00, 0x29, + 0x0d, 0xd0, 0x02, 0x78, 0x0b, 0x78, 0x9a, 0x42, + 0x09, 0xd1, 0xff, 0x2a, 0x05, 0xd0, 0x42, 0x78, + 0x02, 0x32, 0xf5, 0xf7, 0x3c, 0x00, 0xf8, 0xac, + 0x00, 0x00, 0x81, 0xfb, 0x00, 0x28, 0x01, 0xd1, + 0x01, 0x20, 0x80, 0xbd, 0x00, 0x20, 0x80, 0xbd, + 0x00, 0x00, 0x80, 0xb5, 0x06, 0x22, 0x04, 0x49, + 0xf5, 0xf7, 0x75, 0xfb, 0x00, 0x28, 0x01, 0xd1, + 0x01, 0x20, 0x80, 0xbd, 0x00, 0x20, 0x80, 0xbd, + 0x00, 0x00, 0x5e, 0x40, 0x01, 0x00, 0x01, 0x1c, + 0x49, 0x78, 0x01, 0x20, 0x00, 0x29, 0x00, 0xd0, + 0x00, 0x20, 0x70, 0x47, 0x00, 0x00, 0x3c, 0x00, + 0x34, 0xad, 0x00, 0x00, 0x80, 0xb5, 0x06, 0x22, + 0xf5, 0xf7, 0x60, 0xfb, 0x00, 0x28, 0x01, 0xd1, + 0x01, 0x20, 0x80, 0xbd, 0x00, 0x20, 0x80, 0xbd, + 0x80, 0xb5, 0xff, 0xf7, 0xc7, 0xff, 0x80, 0xbd, + 0x80, 0xb5, 0x06, 0x22, 0x04, 0x49, 0xf5, 0xf7, + 0x51, 0xfb, 0x00, 0x28, 0x01, 0xd1, 0x01, 0x20, + 0x80, 0xbd, 0x00, 0x20, 0x80, 0xbd, 0x00, 0x00, + 0x12, 0x61, 0x01, 0x00, 0x01, 0x1c, 0x80, 0x20, + 0x3c, 0x00, 0x70, 0xad, 0x00, 0x00, 0x81, 0x43, + 0x8a, 0x08, 0x0e, 0x20, 0x1c, 0x2a, 0x10, 0xb5, + 0x06, 0xd2, 0x03, 0x4c, 0x52, 0x00, 0xa3, 0x5c, + 0x8b, 0x42, 0x01, 0xd1, 0x10, 0x19, 0x40, 0x78, + 0x10, 0xbd, 0xfc, 0x41, 0x01, 0x00, 0x14, 0x23, + 0x02, 0x49, 0x58, 0x43, 0x40, 0x18, 0x40, 0x68, + 0x70, 0x47, 0x74, 0x40, 0x01, 0x00, 0x20, 0x22, + 0x01, 0x1c, 0x80, 0xb5, 0x02, 0x48, 0xf5, 0xf7, + 0x52, 0xfd, 0x3c, 0x00, 0xac, 0xad, 0x00, 0x00, + 0x80, 0xbd, 0x00, 0x00, 0x48, 0x61, 0x01, 0x00, + 0x08, 0x06, 0x00, 0x0e, 0x02, 0x28, 0x01, 0xd1, + 0x00, 0x20, 0x70, 0x47, 0x01, 0x20, 0x70, 0x47, + 0x00, 0x29, 0x0c, 0xd0, 0x07, 0x49, 0x09, 0x68, + 0x00, 0x29, 0x08, 0xd0, 0x14, 0x23, 0x06, 0x49, + 0x58, 0x43, 0x40, 0x18, 0xc0, 0x68, 0x00, 0x28, + 0x01, 0xd0, 0x01, 0x20, 0x70, 0x47, 0x00, 0x20, + 0x70, 0x47, 0x00, 0x00, 0x3c, 0x00, 0xe8, 0xad, + 0x00, 0x00, 0xac, 0x69, 0x01, 0x00, 0x74, 0x40, + 0x01, 0x00, 0x10, 0xb5, 0x04, 0x1c, 0x06, 0x22, + 0x01, 0x1c, 0x04, 0x48, 0xf5, 0xf7, 0x7d, 0xfb, + 0x06, 0x22, 0x21, 0x1c, 0x03, 0x48, 0xf5, 0xf7, + 0x78, 0xfb, 0x10, 0xbd, 0x00, 0x00, 0x12, 0x61, + 0x01, 0x00, 0x40, 0x80, 0x07, 0x00, 0x00, 0x29, + 0x01, 0xd1, 0x00, 0x20, 0x70, 0x47, 0x38, 0x23, + 0x5a, 0x43, 0x07, 0x4b, 0xd2, 0x18, 0x3c, 0x00, + 0x24, 0xae, 0x00, 0x00, 0x83, 0x00, 0xd2, 0x5a, + 0x14, 0x23, 0x58, 0x43, 0x05, 0x4b, 0xc0, 0x18, + 0x40, 0x88, 0x10, 0x18, 0x08, 0x1a, 0x0a, 0x38, + 0x00, 0x04, 0x00, 0x0c, 0x70, 0x47, 0x00, 0x00, + 0x8c, 0x41, 0x01, 0x00, 0x74, 0x40, 0x01, 0x00, + 0xf8, 0xb5, 0x07, 0x1c, 0x08, 0x1c, 0x16, 0x1c, + 0x1c, 0x1c, 0x19, 0x1c, 0x00, 0xf0, 0x5a, 0xf8, + 0x05, 0x1c, 0x14, 0x35, 0x22, 0x1c, 0x31, 0x1c, + 0x3c, 0x00, 0x60, 0xae, 0x00, 0x00, 0x38, 0x1c, + 0xff, 0xf7, 0x0b, 0xff, 0x28, 0x18, 0x00, 0x04, + 0x00, 0x0c, 0xf8, 0xbd, 0x00, 0x00, 0x00, 0xb5, + 0x00, 0xf0, 0x4b, 0xf8, 0x0a, 0x30, 0x00, 0x04, + 0x00, 0x0c, 0x00, 0xbd, 0x00, 0x00, 0xf8, 0xb5, + 0x07, 0x1c, 0x08, 0x1c, 0x16, 0x1c, 0x1c, 0x1c, + 0x19, 0x1c, 0x00, 0xf0, 0x3e, 0xf8, 0x45, 0x00, + 0x1e, 0x35, 0x22, 0x1c, 0x31, 0x1c, 0x38, 0x1c, + 0xff, 0xf7, 0x3c, 0x00, 0x9c, 0xae, 0x00, 0x00, + 0xef, 0xfe, 0x28, 0x18, 0x00, 0x04, 0x00, 0x0c, + 0xf8, 0xbd, 0x00, 0x00, 0xff, 0xb5, 0x0f, 0x1c, + 0x81, 0xb0, 0x0a, 0xa9, 0x14, 0x1c, 0x1e, 0x1c, + 0x03, 0xc9, 0x00, 0xf0, 0x29, 0xf8, 0x05, 0x1c, + 0x1e, 0x35, 0x21, 0x1c, 0x30, 0x1c, 0x00, 0xf0, + 0x23, 0xf8, 0x2d, 0x18, 0x22, 0x1c, 0x39, 0x1c, + 0x01, 0x98, 0xff, 0xf7, 0xd5, 0xfe, 0x28, 0x18, + 0x00, 0x04, 0x00, 0x0c, 0x3c, 0x00, 0xd8, 0xae, + 0x00, 0x00, 0x05, 0xb0, 0xf0, 0xbd, 0x0a, 0x49, + 0x80, 0xb5, 0x09, 0x88, 0x09, 0x29, 0x04, 0xd0, + 0x14, 0x29, 0x07, 0xd1, 0x01, 0x01, 0x80, 0x00, + 0x00, 0xe0, 0xc1, 0x00, 0x08, 0x18, 0x00, 0x04, + 0x00, 0x0c, 0x80, 0xbd, 0xff, 0x21, 0xff, 0x20, + 0xf6, 0xf7, 0xd1, 0xf9, 0x00, 0x20, 0x80, 0xbd, + 0x00, 0x00, 0xa6, 0x69, 0x01, 0x00, 0x38, 0x23, + 0x59, 0x43, 0x06, 0x4a, 0x14, 0x23, 0x3c, 0x00, + 0x14, 0xaf, 0x00, 0x00, 0x89, 0x18, 0x82, 0x00, + 0x89, 0x5a, 0x05, 0x4a, 0x58, 0x43, 0x80, 0x18, + 0x40, 0x88, 0x08, 0x18, 0x00, 0x04, 0x00, 0x0c, + 0x70, 0x47, 0x00, 0x00, 0x8c, 0x41, 0x01, 0x00, + 0x74, 0x40, 0x01, 0x00, 0x02, 0x48, 0x03, 0x49, + 0x00, 0x68, 0x40, 0x00, 0x08, 0x5a, 0x70, 0x47, + 0xa8, 0x69, 0x01, 0x00, 0x54, 0x40, 0x01, 0x00, + 0x0a, 0x20, 0x70, 0x47, 0x10, 0xb5, 0x04, 0x1c, + 0x3c, 0x00, 0x50, 0xaf, 0x00, 0x00, 0xfd, 0xf7, + 0x62, 0xff, 0x20, 0x1c, 0x10, 0xbd, 0xb0, 0xb5, + 0x04, 0x1c, 0xc0, 0x68, 0x05, 0x68, 0xa0, 0x1d, + 0xff, 0xf7, 0xf5, 0xfe, 0x00, 0x28, 0x18, 0xd0, + 0x21, 0x1c, 0x14, 0x31, 0x20, 0x1c, 0x08, 0xf0, + 0xe2, 0xfd, 0x00, 0x28, 0x11, 0xd0, 0x29, 0x88, + 0x09, 0x48, 0x20, 0x22, 0x81, 0x82, 0x69, 0x88, + 0x01, 0x83, 0xa9, 0x88, 0x06, 0x35, 0x41, 0x83, + 0xc5, 0x61, 0x3c, 0x00, 0x8c, 0xaf, 0x00, 0x00, + 0x30, 0x21, 0x09, 0x5d, 0x11, 0x54, 0x61, 0x6b, + 0x41, 0x62, 0x01, 0x20, 0xf7, 0xf7, 0x28, 0xf8, + 0x20, 0x1c, 0xb0, 0xbd, 0x70, 0x7c, 0x01, 0x00, + 0x70, 0xb5, 0x04, 0x1c, 0xc0, 0x68, 0x21, 0x1c, + 0x14, 0x31, 0x05, 0x68, 0x20, 0x1c, 0x08, 0xf0, + 0xc1, 0xfd, 0x00, 0x28, 0x08, 0xd0, 0x05, 0x4e, + 0xf0, 0x68, 0x02, 0xf0, 0xcf, 0xfd, 0x28, 0x88, + 0xf0, 0x82, 0x03, 0x20, 0x3c, 0x00, 0xc8, 0xaf, + 0x00, 0x00, 0xf7, 0xf7, 0x10, 0xf8, 0x20, 0x1c, + 0x70, 0xbd, 0x70, 0x7c, 0x01, 0x00, 0x3e, 0xb5, + 0x04, 0x1c, 0xc0, 0x68, 0x05, 0x68, 0xa0, 0x1d, + 0xff, 0xf7, 0xb7, 0xfe, 0x00, 0x28, 0x21, 0xd0, + 0x21, 0x1c, 0x14, 0x31, 0x20, 0x1c, 0x02, 0xaa, + 0x08, 0xf0, 0x77, 0xfd, 0x00, 0x28, 0x19, 0xd0, + 0x02, 0x98, 0x4b, 0x21, 0x09, 0x5c, 0x00, 0x29, + 0x10, 0xd0, 0x01, 0x29, 0x14, 0xd0, 0x3c, 0x00, + 0x04, 0xb0, 0x00, 0x00, 0x02, 0x29, 0x0c, 0xd1, + 0x29, 0x88, 0x0d, 0x20, 0x00, 0xab, 0x18, 0x80, + 0x20, 0x1c, 0x03, 0xf0, 0x51, 0xf8, 0x01, 0x90, + 0x68, 0x46, 0x02, 0xf0, 0x5d, 0xfa, 0xf6, 0xf7, + 0xb5, 0xf8, 0x00, 0x21, 0x02, 0x98, 0x06, 0xf0, + 0x9f, 0xfe, 0x20, 0x1c, 0x3e, 0xbd, 0x07, 0xf0, + 0x29, 0xf8, 0x02, 0x98, 0x00, 0x21, 0x80, 0x69, + 0xc2, 0x07, 0xd2, 0x0f, 0x04, 0x20, 0xf6, 0xf7, + 0x3c, 0x00, 0x40, 0xb0, 0x00, 0x00, 0x7f, 0xff, + 0xee, 0xe7, 0x10, 0xb5, 0x04, 0x1c, 0xfd, 0xf7, + 0xe6, 0xfe, 0x20, 0x1c, 0x10, 0xbd, 0x3e, 0xb5, + 0x05, 0x1c, 0x00, 0xf0, 0x40, 0xfe, 0x00, 0x28, + 0x15, 0xd1, 0x28, 0x1c, 0x14, 0x30, 0xfa, 0xf7, + 0xce, 0xfb, 0x00, 0x28, 0x0f, 0xd0, 0x05, 0x21, + 0x28, 0x69, 0xff, 0xf7, 0x86, 0xfb, 0x04, 0x1c, + 0x09, 0xd0, 0x05, 0x22, 0x21, 0x1c, 0x68, 0x46, + 0xf5, 0xf7, 0x3c, 0x00, 0x7c, 0xb0, 0x00, 0x00, + 0x3d, 0xfa, 0x05, 0x34, 0x02, 0x94, 0x68, 0x46, + 0x03, 0xf0, 0x1a, 0xfb, 0x2a, 0x1c, 0x0d, 0x21, + 0x8f, 0x20, 0x08, 0xf0, 0x8f, 0xfb, 0x00, 0x20, + 0x3e, 0xbd, 0x00, 0x00, 0x10, 0xb5, 0x04, 0x1c, + 0xfa, 0xf7, 0x98, 0xf8, 0x20, 0x1c, 0x05, 0xf0, + 0xe5, 0xf8, 0x20, 0x1c, 0x10, 0xbd, 0x00, 0x00, + 0xb0, 0xb5, 0x04, 0x1c, 0x00, 0x69, 0x00, 0x21, + 0x94, 0xb0, 0xff, 0xf7, 0x3c, 0x00, 0xb8, 0xb0, + 0x00, 0x00, 0x61, 0xfb, 0x69, 0x46, 0xfb, 0xf7, + 0x26, 0xf8, 0x00, 0x28, 0x1e, 0xd0, 0x00, 0x98, + 0xfa, 0xf7, 0x29, 0xfa, 0x01, 0x1c, 0x01, 0xa8, + 0x02, 0xf0, 0xd7, 0xf9, 0x00, 0x98, 0xfa, 0xf7, + 0xd2, 0xf9, 0x04, 0x90, 0x05, 0x20, 0x09, 0xad, + 0x68, 0x72, 0x02, 0xa8, 0x21, 0x1c, 0x06, 0x22, + 0x02, 0x30, 0xf5, 0xf7, 0x06, 0xfa, 0x01, 0x20, + 0x08, 0x90, 0x21, 0x6a, 0x0a, 0x90, 0x3c, 0x00, + 0xf4, 0xb0, 0x00, 0x00, 0x28, 0x20, 0x09, 0x91, + 0x00, 0x5d, 0x28, 0x72, 0x01, 0xa8, 0x00, 0xf0, + 0x69, 0xf8, 0x20, 0x1c, 0x14, 0xb0, 0xb0, 0xbd, + 0xff, 0xb5, 0x16, 0x1c, 0x1f, 0x1c, 0x81, 0xb0, + 0x0a, 0x9d, 0x4c, 0x20, 0xf6, 0xf7, 0x90, 0xfb, + 0x04, 0x1c, 0x14, 0x30, 0x06, 0x22, 0x02, 0x99, + 0xf5, 0xf7, 0xea, 0xf9, 0x20, 0x1c, 0x06, 0x22, + 0x01, 0x99, 0xf5, 0xf7, 0xe5, 0xf9, 0x28, 0x20, + 0x3c, 0x00, 0x30, 0xb1, 0x00, 0x00, 0x00, 0x21, + 0x06, 0x55, 0xe1, 0x60, 0x27, 0x62, 0x00, 0x2d, + 0x01, 0xd0, 0x8e, 0x20, 0x00, 0xe0, 0x8d, 0x20, + 0x22, 0x1c, 0x0d, 0x21, 0x08, 0xf0, 0x33, 0xfb, + 0x05, 0xb0, 0xf0, 0xbd, 0x00, 0x00, 0xb0, 0xb5, + 0x05, 0x1c, 0x4c, 0x20, 0xf6, 0xf7, 0x6f, 0xfb, + 0x04, 0x1c, 0x4c, 0x22, 0x29, 0x1c, 0xf5, 0xf7, + 0x26, 0xfa, 0x29, 0x20, 0x40, 0x5d, 0x0d, 0x28, + 0x2c, 0xd2, 0x3c, 0x00, 0x6c, 0xb1, 0x00, 0x00, + 0x01, 0xa3, 0x1b, 0x5c, 0x5b, 0x00, 0x9f, 0x44, + 0x28, 0x1a, 0x28, 0x1e, 0x06, 0x0a, 0x28, 0x28, + 0x0e, 0x28, 0x22, 0x12, 0x16, 0x00, 0x22, 0x1c, + 0x0d, 0x21, 0x8c, 0x20, 0x1a, 0xe0, 0x22, 0x1c, + 0x0d, 0x21, 0x83, 0x20, 0x16, 0xe0, 0x22, 0x1c, + 0x0d, 0x21, 0x84, 0x20, 0x12, 0xe0, 0x22, 0x1c, + 0x0d, 0x21, 0x85, 0x20, 0x0e, 0xe0, 0x22, 0x1c, + 0x0d, 0x21, 0x86, 0x20, 0x3c, 0x00, 0xa8, 0xb1, + 0x00, 0x00, 0x0a, 0xe0, 0x22, 0x1c, 0x0d, 0x21, + 0x87, 0x20, 0x06, 0xe0, 0x22, 0x1c, 0x0d, 0x21, + 0x89, 0x20, 0x02, 0xe0, 0x22, 0x1c, 0x0d, 0x21, + 0x8b, 0x20, 0x08, 0xf0, 0xf6, 0xfa, 0xb0, 0xbd, + 0xe8, 0x68, 0xf6, 0xf7, 0xe6, 0xf9, 0x20, 0x1c, + 0xf6, 0xf7, 0x11, 0xfb, 0xb0, 0xbd, 0xfe, 0xb5, + 0x05, 0x1c, 0x90, 0x20, 0xf6, 0xf7, 0x2d, 0xfb, + 0x04, 0x1c, 0x90, 0x21, 0xf5, 0xf7, 0x3c, 0x00, + 0xe4, 0xb1, 0x00, 0x00, 0x5b, 0xf9, 0x37, 0x4e, + 0x01, 0x27, 0xf0, 0x69, 0x04, 0x28, 0x03, 0xd9, + 0x70, 0x6b, 0x01, 0x30, 0x70, 0x63, 0x4d, 0xe0, + 0x33, 0x48, 0xb1, 0x6b, 0x04, 0xf0, 0xd0, 0xf8, + 0x01, 0x20, 0x20, 0x62, 0xa8, 0x7e, 0x21, 0x1c, + 0x80, 0x31, 0x02, 0x91, 0x08, 0x70, 0x22, 0x1c, + 0x60, 0x32, 0x01, 0x92, 0x00, 0x20, 0x2f, 0x1c, + 0x20, 0x37, 0x90, 0x72, 0x78, 0x7a, 0x2b, 0x1c, + 0x3c, 0x00, 0x20, 0xb2, 0x00, 0x00, 0x14, 0x33, + 0xd0, 0x72, 0xe8, 0x68, 0xaa, 0x1d, 0xa0, 0x60, + 0xe8, 0x6b, 0x48, 0x60, 0x44, 0x20, 0x40, 0x5d, + 0x08, 0x72, 0x29, 0x1c, 0x20, 0x1c, 0x05, 0xf0, + 0xaa, 0xfc, 0x68, 0x6a, 0x00, 0x28, 0x0a, 0xd1, + 0x01, 0x9a, 0x20, 0x1c, 0x93, 0x7a, 0x02, 0x99, + 0x22, 0x1c, 0x70, 0x32, 0x58, 0x30, 0x09, 0x78, + 0xfa, 0xf7, 0xdb, 0xf9, 0x06, 0xe0, 0x3a, 0x7a, + 0x23, 0x1c, 0x3c, 0x00, 0x5c, 0xb2, 0x00, 0x00, + 0xe8, 0x69, 0x29, 0x6a, 0x70, 0x33, 0xfd, 0xf7, + 0x8d, 0xf9, 0x30, 0x20, 0x40, 0x5d, 0x18, 0x49, + 0x07, 0x28, 0x0b, 0xd1, 0x58, 0x20, 0x00, 0x5d, + 0xc0, 0x07, 0xc0, 0x17, 0x01, 0x30, 0xe0, 0x61, + 0x00, 0x20, 0x20, 0x61, 0x20, 0x1c, 0xf7, 0xf7, + 0x3f, 0xff, 0x18, 0xe0, 0x01, 0x22, 0x20, 0x1c, + 0x05, 0xf0, 0xac, 0xff, 0x07, 0x1c, 0x12, 0xd0, + 0x03, 0xf0, 0x06, 0xff, 0x3c, 0x00, 0x98, 0xb2, + 0x00, 0x00, 0xf3, 0x6d, 0x00, 0x2b, 0x06, 0xd0, + 0x60, 0x68, 0x20, 0x30, 0x82, 0x7b, 0x61, 0x6b, + 0x38, 0x1c, 0xf5, 0xf7, 0x99, 0xf8, 0xe8, 0x68, + 0xf6, 0xf7, 0x73, 0xf9, 0x20, 0x1c, 0xf6, 0xf7, + 0x9e, 0xfa, 0xfe, 0xbd, 0xf0, 0x69, 0x01, 0x30, + 0xf0, 0x61, 0xfa, 0xe7, 0x00, 0x00, 0xc4, 0x69, + 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, 0x05, 0x31, + 0x00, 0x00, 0x70, 0xb5, 0x06, 0x1c, 0x3c, 0x00, + 0xd4, 0xb2, 0x00, 0x00, 0x0d, 0x1c, 0x09, 0x04, + 0x09, 0x0c, 0x00, 0x20, 0xf6, 0xf7, 0x7c, 0xf9, + 0x04, 0x1c, 0x2a, 0x1c, 0x31, 0x1c, 0x00, 0x68, + 0xf5, 0xf7, 0x06, 0xf9, 0x20, 0x1c, 0x70, 0xbd, + 0x40, 0x88, 0x70, 0x47, 0x03, 0x78, 0x1b, 0x07, + 0x9b, 0x0f, 0x0b, 0x70, 0x00, 0x78, 0x00, 0x09, + 0x10, 0x70, 0x70, 0x47, 0x04, 0x30, 0x70, 0x47, + 0x04, 0x30, 0x70, 0x47, 0xd4, 0x21, 0x01, 0x70, + 0x3c, 0x00, 0x10, 0xb3, 0x00, 0x00, 0x00, 0x21, + 0x41, 0x70, 0x70, 0x47, 0x00, 0x00, 0xc4, 0x21, + 0x01, 0x70, 0x00, 0x21, 0x41, 0x70, 0x70, 0x47, + 0x00, 0x00, 0xb4, 0x21, 0x01, 0x70, 0x00, 0x21, + 0x41, 0x70, 0x70, 0x47, 0x00, 0x00, 0x01, 0x49, + 0x48, 0x65, 0x70, 0x47, 0x00, 0x00, 0xc4, 0x69, + 0x01, 0x00, 0x01, 0x49, 0x08, 0x65, 0x70, 0x47, + 0x00, 0x00, 0xc4, 0x69, 0x01, 0x00, 0x01, 0x49, + 0x88, 0x65, 0x3c, 0x00, 0x4c, 0xb3, 0x00, 0x00, + 0x70, 0x47, 0x00, 0x00, 0xc4, 0x69, 0x01, 0x00, + 0xf8, 0xb5, 0x5f, 0x4f, 0x05, 0x1c, 0xb8, 0x68, + 0x01, 0x30, 0xb8, 0x60, 0x07, 0xf0, 0x24, 0xfd, + 0x38, 0x61, 0x90, 0x20, 0xf6, 0xf7, 0x66, 0xfa, + 0x04, 0x1c, 0x90, 0x21, 0xf5, 0xf7, 0x94, 0xf8, + 0x28, 0x6b, 0x27, 0x1c, 0x60, 0x63, 0x68, 0x8b, + 0x80, 0x37, 0x26, 0x1c, 0xc0, 0x07, 0xc0, 0x0f, + 0x20, 0x62, 0x68, 0x8b, 0x3c, 0x00, 0x88, 0xb3, + 0x00, 0x00, 0x60, 0x36, 0x02, 0x21, 0x40, 0x07, + 0xc0, 0x0f, 0x20, 0x63, 0x68, 0x8b, 0x80, 0x07, + 0xc0, 0x0f, 0xf8, 0x60, 0x28, 0x7f, 0x38, 0x70, + 0xb1, 0x72, 0x00, 0x28, 0x08, 0xd1, 0xf9, 0xf7, + 0xc8, 0xff, 0x00, 0x28, 0x02, 0xd0, 0x01, 0x20, + 0x60, 0x62, 0x01, 0xe0, 0x01, 0x20, 0xa0, 0x62, + 0xf8, 0x68, 0x00, 0x28, 0x03, 0xd0, 0x00, 0x21, + 0x02, 0x20, 0x06, 0xf0, 0xcc, 0xff, 0x3c, 0x00, + 0xc4, 0xb3, 0x00, 0x00, 0x2b, 0x1c, 0x10, 0x33, + 0xaa, 0x1d, 0x29, 0x1c, 0x20, 0x1c, 0x05, 0xf0, + 0xdf, 0xfb, 0xa8, 0x6a, 0x00, 0x28, 0x0c, 0xd1, + 0x39, 0x78, 0x02, 0x29, 0x07, 0xd0, 0x22, 0x1c, + 0x70, 0x32, 0x20, 0x1c, 0x58, 0x30, 0xb3, 0x7a, + 0xfa, 0xf7, 0x10, 0xf9, 0x08, 0xe0, 0x01, 0x26, + 0x5e, 0xe0, 0xaa, 0x7d, 0x23, 0x1c, 0x28, 0x6a, + 0x69, 0x6a, 0x70, 0x33, 0xfd, 0xf7, 0xc0, 0xf8, + 0x3c, 0x00, 0x00, 0xb4, 0x00, 0x00, 0xe9, 0x68, + 0x00, 0x20, 0x09, 0x89, 0x00, 0x29, 0x00, 0xd1, + 0x04, 0x20, 0xf0, 0x72, 0x38, 0x78, 0x01, 0x28, + 0x14, 0xd1, 0x00, 0x27, 0x00, 0x90, 0x00, 0x20, + 0x06, 0xe0, 0x29, 0x69, 0x01, 0x29, 0x03, 0xd1, + 0xa9, 0x69, 0x01, 0x27, 0x89, 0x07, 0x1a, 0xd5, + 0x06, 0xf0, 0x79, 0xfc, 0x00, 0x28, 0xf4, 0xd1, + 0x01, 0x2f, 0x14, 0xd1, 0x00, 0x98, 0x01, 0x28, + 0x11, 0xd1, 0x3c, 0x00, 0x3c, 0xb4, 0x00, 0x00, + 0x08, 0xe0, 0x20, 0x1c, 0x58, 0x30, 0x06, 0xf0, + 0xe1, 0xfc, 0x00, 0x28, 0x0a, 0xd0, 0x80, 0x69, + 0x80, 0x07, 0x07, 0xd5, 0xf0, 0x7a, 0x08, 0x21, + 0x08, 0x43, 0xf0, 0x72, 0x01, 0x20, 0xe0, 0x62, + 0xe8, 0x7d, 0x30, 0x73, 0xe8, 0x68, 0xa0, 0x60, + 0xe0, 0x6a, 0x00, 0x28, 0x12, 0xd0, 0x1a, 0x4f, + 0xf8, 0x6b, 0x00, 0x28, 0x0e, 0xd0, 0x30, 0x7b, + 0xf5, 0xf7, 0xde, 0xfe, 0x3c, 0x00, 0x78, 0xb4, + 0x00, 0x00, 0x00, 0x28, 0x09, 0xd0, 0x21, 0x1c, + 0x38, 0x1c, 0x40, 0x30, 0xfc, 0xf7, 0x55, 0xfc, + 0x14, 0x48, 0xb9, 0x6b, 0x03, 0xf0, 0x89, 0xff, + 0xf8, 0xbd, 0x10, 0x4f, 0x12, 0x48, 0xb9, 0x6b, + 0x03, 0xf0, 0x83, 0xff, 0x00, 0x22, 0x20, 0x1c, + 0x10, 0x49, 0x05, 0xf0, 0xa2, 0xfe, 0x06, 0x1c, + 0x03, 0xd1, 0x38, 0x6a, 0x01, 0x30, 0x38, 0x62, + 0xee, 0xe7, 0x20, 0x1c, 0xf6, 0xf7, 0x3c, 0x00, + 0xb4, 0xb4, 0x00, 0x00, 0x9f, 0xf9, 0xe8, 0x68, + 0xf6, 0xf7, 0x6e, 0xf8, 0x03, 0xf0, 0xf2, 0xfd, + 0x04, 0x48, 0x83, 0x6d, 0x00, 0x2b, 0xe2, 0xd0, + 0x00, 0x22, 0x30, 0x1c, 0x29, 0x6b, 0xf4, 0xf7, + 0x86, 0xff, 0xdc, 0xe7, 0xc4, 0x69, 0x01, 0x00, + 0xc4, 0x60, 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, + 0x11, 0x30, 0x00, 0x00, 0x10, 0xb5, 0x0a, 0x20, + 0x07, 0xf0, 0xfe, 0xfc, 0x07, 0xf0, 0x5e, 0xfc, + 0x3c, 0x00, 0xf0, 0xb4, 0x00, 0x00, 0x0b, 0x49, + 0x44, 0x18, 0x0c, 0xe0, 0x20, 0x1c, 0x07, 0xf0, + 0x90, 0xfb, 0x00, 0x28, 0x07, 0xd0, 0xf7, 0xf7, + 0x34, 0xf9, 0x00, 0x28, 0x03, 0xd0, 0x12, 0x21, + 0x86, 0x20, 0xf5, 0xf7, 0xca, 0xfe, 0xf7, 0xf7, + 0x2c, 0xf9, 0x00, 0x28, 0xee, 0xd1, 0x01, 0xf0, + 0x80, 0xfd, 0x10, 0xbd, 0x00, 0x00, 0x40, 0x9c, + 0x00, 0x00, 0x10, 0xb5, 0x0c, 0x1c, 0x01, 0x1c, + 0x17, 0x4a, 0x3c, 0x00, 0x2c, 0xb5, 0x00, 0x00, + 0x01, 0x29, 0x50, 0x69, 0x04, 0xd0, 0x80, 0x29, + 0x1d, 0xd0, 0x81, 0x29, 0x21, 0xd1, 0x1c, 0xe0, + 0x91, 0x78, 0x01, 0x29, 0x15, 0xd1, 0x02, 0x21, + 0x91, 0x70, 0x14, 0x1c, 0x01, 0x1c, 0x10, 0x48, + 0x03, 0xf0, 0x28, 0xff, 0x01, 0x21, 0x60, 0x69, + 0x00, 0xf0, 0x2e, 0xf9, 0x60, 0x69, 0x01, 0xf0, + 0x5f, 0xfc, 0x20, 0x70, 0xa0, 0x88, 0xa1, 0x69, + 0x00, 0x23, 0x0a, 0x4a, 0x3c, 0x00, 0x68, 0xb5, + 0x00, 0x00, 0x07, 0xf0, 0x7e, 0xfc, 0x10, 0xbd, + 0x22, 0x21, 0x06, 0xe0, 0x01, 0xf0, 0x1d, 0xfc, + 0x20, 0x1c, 0x00, 0xf0, 0x4a, 0xf8, 0x10, 0xbd, + 0x1c, 0x21, 0x20, 0x20, 0xf5, 0xf7, 0x8f, 0xfe, + 0x10, 0xbd, 0xb4, 0x79, 0x01, 0x00, 0x34, 0x63, + 0x01, 0x00, 0x3d, 0x2e, 0x00, 0x00, 0x70, 0xb5, + 0x1c, 0x4c, 0xa0, 0x78, 0x00, 0x28, 0x32, 0xd0, + 0x05, 0x28, 0x30, 0xd0, 0x60, 0x69, 0x3c, 0x00, + 0xa4, 0xb5, 0x00, 0x00, 0x00, 0xf0, 0xea, 0xf8, + 0x18, 0x4e, 0xb5, 0x79, 0xa0, 0x78, 0x01, 0x28, + 0x0b, 0xd0, 0x02, 0x28, 0x0e, 0xd0, 0x03, 0x28, + 0x10, 0xd0, 0x04, 0x28, 0x17, 0xd1, 0x42, 0x1f, + 0x80, 0x21, 0x20, 0x20, 0x08, 0xf0, 0x08, 0xf8, + 0x0e, 0xe0, 0x00, 0x21, 0x20, 0x20, 0x08, 0xf0, + 0x31, 0xf8, 0x0c, 0xe0, 0xa0, 0x88, 0x07, 0xf0, + 0x1d, 0xfc, 0x05, 0xe0, 0x20, 0x78, 0x00, 0xf0, + 0x3c, 0x00, 0xe0, 0xb5, 0x00, 0x00, 0x39, 0xfa, + 0x00, 0x20, 0x00, 0xf0, 0xc4, 0xfd, 0x60, 0x69, + 0x01, 0xf0, 0xe1, 0xfb, 0x05, 0x20, 0xa0, 0x70, + 0xb5, 0x71, 0x60, 0x69, 0x00, 0xf0, 0x61, 0xf9, + 0x00, 0x22, 0x20, 0x21, 0x81, 0x20, 0x08, 0xf0, + 0xd6, 0xf8, 0x70, 0xbd, 0x00, 0x00, 0xb4, 0x79, + 0x01, 0x00, 0x20, 0x10, 0x07, 0x00, 0xb0, 0xb5, + 0x0d, 0x4d, 0x04, 0x1c, 0xa8, 0x78, 0x00, 0x28, + 0x14, 0xd0, 0x3c, 0x00, 0x1c, 0xb6, 0x00, 0x00, + 0x68, 0x69, 0x00, 0xf0, 0x0b, 0xf9, 0x0a, 0x48, + 0x69, 0x69, 0x03, 0xf0, 0xa7, 0xfe, 0xa8, 0x88, + 0x07, 0xf0, 0x9e, 0xfb, 0x00, 0x2c, 0x02, 0xd0, + 0x68, 0x78, 0x00, 0xf0, 0x79, 0xff, 0x00, 0x20, + 0xa8, 0x70, 0xa9, 0x68, 0x20, 0x1c, 0xf4, 0xf7, + 0xca, 0xfe, 0xb0, 0xbd, 0xb4, 0x79, 0x01, 0x00, + 0x34, 0x63, 0x01, 0x00, 0x06, 0x4b, 0x80, 0xb5, + 0x99, 0x78, 0x03, 0x29, 0x3c, 0x00, 0x58, 0xb6, + 0x00, 0x00, 0x06, 0xd1, 0x04, 0x21, 0x99, 0x70, + 0x20, 0x21, 0x02, 0x1c, 0x80, 0x20, 0x08, 0xf0, + 0xa4, 0xf8, 0x80, 0xbd, 0x00, 0x00, 0xb4, 0x79, + 0x01, 0x00, 0x10, 0xb5, 0x0c, 0x4c, 0xa1, 0x78, + 0x03, 0x29, 0x0f, 0xd1, 0x10, 0x30, 0xfa, 0xf7, + 0xde, 0xf8, 0x00, 0x28, 0x09, 0xd0, 0x20, 0x78, + 0x00, 0xf0, 0xe5, 0xf9, 0x00, 0x20, 0x00, 0xf0, + 0x70, 0xfd, 0x00, 0x21, 0x05, 0x48, 0x3c, 0x00, + 0x94, 0xb6, 0x00, 0x00, 0xfc, 0xf7, 0x9c, 0xfa, + 0x10, 0xbd, 0x1b, 0x21, 0x20, 0x20, 0xf5, 0xf7, + 0x01, 0xfe, 0x10, 0xbd, 0xb4, 0x79, 0x01, 0x00, + 0x51, 0xb6, 0x00, 0x00, 0x09, 0x49, 0x80, 0xb5, + 0x89, 0x78, 0x03, 0x29, 0x09, 0xd1, 0x00, 0xf0, + 0xcd, 0xf9, 0x00, 0x20, 0x00, 0xf0, 0x58, 0xfd, + 0x01, 0x21, 0x05, 0x48, 0xfc, 0xf7, 0x84, 0xfa, + 0x80, 0xbd, 0x17, 0x21, 0x20, 0x20, 0xf5, 0xf7, + 0x3c, 0x00, 0xd0, 0xb6, 0x00, 0x00, 0xe9, 0xfd, + 0x80, 0xbd, 0xb4, 0x79, 0x01, 0x00, 0x51, 0xb6, + 0x00, 0x00, 0x70, 0xb5, 0x10, 0x4c, 0x1d, 0x1c, + 0xa3, 0x78, 0x06, 0x1c, 0x04, 0x98, 0x00, 0x2b, + 0x18, 0xd1, 0x01, 0x23, 0xa3, 0x70, 0x22, 0x61, + 0xe6, 0x60, 0x61, 0x70, 0xa0, 0x60, 0xa5, 0x61, + 0x00, 0x20, 0x07, 0xf0, 0xac, 0xfa, 0xa0, 0x80, + 0x30, 0x1c, 0xf7, 0xf7, 0x3c, 0xfb, 0xe0, 0x80, + 0x07, 0xf0, 0x3c, 0x00, 0x0c, 0xb7, 0x00, 0x00, + 0x4f, 0xfb, 0xc7, 0x21, 0xc9, 0x00, 0x28, 0x1a, + 0x41, 0x1a, 0x00, 0x22, 0x20, 0x20, 0x07, 0xf0, + 0x57, 0xff, 0x70, 0xbd, 0xb4, 0x79, 0x01, 0x00, + 0xb0, 0xb5, 0x04, 0x1c, 0x0d, 0x1c, 0x00, 0xf0, + 0x09, 0xf8, 0x20, 0x1c, 0x00, 0xf0, 0x24, 0xf8, + 0x00, 0x2d, 0x01, 0xd0, 0xff, 0xf7, 0xd4, 0xfe, + 0xb0, 0xbd, 0x00, 0x00, 0xb0, 0xb5, 0x0c, 0x4c, + 0x05, 0x1c, 0xa0, 0x68, 0x3c, 0x00, 0x48, 0xb7, + 0x00, 0x00, 0x00, 0x28, 0x0f, 0xd1, 0x0a, 0x48, + 0x01, 0x7e, 0x02, 0x22, 0x11, 0x40, 0x61, 0x60, + 0x01, 0x7e, 0x11, 0x43, 0x01, 0x76, 0x07, 0x20, + 0x03, 0xf0, 0x49, 0xfc, 0x20, 0x60, 0x03, 0xf0, + 0x98, 0xff, 0x03, 0xf0, 0xee, 0xff, 0xa0, 0x68, + 0x28, 0x43, 0xa0, 0x60, 0xb0, 0xbd, 0x40, 0x7c, + 0x01, 0x00, 0x0c, 0x80, 0x07, 0x00, 0x0a, 0x49, + 0x38, 0xb5, 0x0a, 0x1c, 0x20, 0x32, 0x3c, 0x00, + 0x84, 0xb7, 0x00, 0x00, 0x94, 0x79, 0x00, 0xab, + 0x1c, 0x70, 0xd2, 0x79, 0x07, 0x4c, 0x5a, 0x70, + 0xe2, 0x68, 0x00, 0x2a, 0x02, 0xd1, 0x06, 0x4d, + 0x01, 0x23, 0x6b, 0x70, 0x10, 0x43, 0xe0, 0x60, + 0x00, 0xab, 0x18, 0x88, 0xc8, 0x84, 0x38, 0xbd, + 0x00, 0x10, 0x07, 0x00, 0x40, 0x7c, 0x01, 0x00, + 0x00, 0x50, 0x07, 0x00, 0xb0, 0xb5, 0x05, 0x1c, + 0x00, 0x29, 0x01, 0xd0, 0x00, 0xf0, 0x28, 0xf8, + 0x3c, 0x00, 0xc0, 0xb7, 0x00, 0x00, 0x06, 0x4c, + 0x60, 0x78, 0x21, 0x69, 0x08, 0x43, 0x03, 0xd1, + 0x01, 0x21, 0x0e, 0x20, 0x06, 0xf0, 0xc5, 0xfd, + 0x20, 0x69, 0x28, 0x43, 0x20, 0x61, 0xb0, 0xbd, + 0x00, 0x00, 0x18, 0x63, 0x01, 0x00, 0xb0, 0xb5, + 0x0a, 0x4c, 0x05, 0x1c, 0x22, 0x69, 0x00, 0x20, + 0x00, 0x2a, 0x0c, 0xd1, 0x00, 0x29, 0x00, 0xd0, + 0x04, 0xe0, 0x60, 0x78, 0x00, 0x28, 0x02, 0xd1, + 0x04, 0xf0, 0x3c, 0x00, 0xfc, 0xb7, 0x00, 0x00, + 0x69, 0xfb, 0x60, 0x70, 0x28, 0x1c, 0x06, 0xf0, + 0xef, 0xfc, 0x01, 0x20, 0xb0, 0xbd, 0x00, 0x00, + 0x18, 0x63, 0x01, 0x00, 0x10, 0xb5, 0x08, 0x4c, + 0x60, 0x78, 0x00, 0x28, 0x0a, 0xd0, 0x06, 0xf0, + 0xe3, 0xfc, 0x00, 0x20, 0x60, 0x70, 0x20, 0x69, + 0x00, 0x28, 0x03, 0xd0, 0x01, 0x21, 0x0e, 0x20, + 0x06, 0xf0, 0x96, 0xfd, 0x10, 0xbd, 0x00, 0x00, + 0x18, 0x63, 0x01, 0x00, 0x3c, 0x00, 0x38, 0xb8, + 0x00, 0x00, 0x09, 0x49, 0x80, 0xb5, 0x0b, 0x69, + 0x83, 0x42, 0x04, 0xd1, 0x4a, 0x78, 0x00, 0x2a, + 0x01, 0xd1, 0x01, 0x22, 0x00, 0xe0, 0x00, 0x22, + 0x83, 0x43, 0x0b, 0x61, 0x00, 0x2a, 0x03, 0xd0, + 0x00, 0x21, 0x0e, 0x20, 0x06, 0xf0, 0x7f, 0xfd, + 0x80, 0xbd, 0x18, 0x63, 0x01, 0x00, 0x80, 0xb5, + 0x01, 0x20, 0xf6, 0xf7, 0x56, 0xfe, 0x80, 0xbd, + 0x00, 0x00, 0x10, 0xb5, 0x04, 0x1c, 0x3c, 0x00, + 0x74, 0xb8, 0x00, 0x00, 0x00, 0xf0, 0x04, 0xf8, + 0x20, 0x1c, 0x00, 0xf0, 0x1f, 0xf8, 0x10, 0xbd, + 0xb0, 0xb5, 0x0c, 0x4d, 0x04, 0x1c, 0xa8, 0x68, + 0xa0, 0x42, 0x0f, 0xd1, 0x07, 0x20, 0x29, 0x68, + 0x08, 0xf0, 0x8c, 0xfb, 0x68, 0x68, 0x02, 0x22, + 0x07, 0x49, 0x00, 0x28, 0x08, 0x7e, 0x01, 0xd0, + 0x10, 0x43, 0x00, 0xe0, 0x90, 0x43, 0x08, 0x76, + 0x04, 0xf0, 0xc4, 0xf8, 0xa8, 0x68, 0xa0, 0x43, + 0x3c, 0x00, 0xb0, 0xb8, 0x00, 0x00, 0xa8, 0x60, + 0xb0, 0xbd, 0x40, 0x7c, 0x01, 0x00, 0x0c, 0x80, + 0x07, 0x00, 0x0a, 0x49, 0x38, 0xb5, 0x0a, 0x1c, + 0x20, 0x32, 0x94, 0x79, 0x00, 0xab, 0x1c, 0x70, + 0xd2, 0x79, 0x07, 0x4c, 0x5a, 0x70, 0xe2, 0x68, + 0x82, 0x42, 0x02, 0xd1, 0x06, 0x4d, 0x00, 0x23, + 0x6b, 0x70, 0x82, 0x43, 0xe2, 0x60, 0x00, 0xab, + 0x18, 0x88, 0xc8, 0x84, 0x38, 0xbd, 0x00, 0x10, + 0x07, 0x00, 0x3c, 0x00, 0xec, 0xb8, 0x00, 0x00, + 0x40, 0x7c, 0x01, 0x00, 0x00, 0x50, 0x07, 0x00, + 0xb0, 0xb5, 0x05, 0x1c, 0x0a, 0x4c, 0x00, 0x21, + 0x60, 0x69, 0xff, 0xf7, 0x11, 0xff, 0x04, 0x20, + 0x01, 0xf0, 0x46, 0xf9, 0x01, 0xf0, 0x88, 0xfb, + 0x00, 0x22, 0x04, 0x21, 0x04, 0x20, 0x01, 0xf0, + 0x8b, 0xf8, 0x28, 0x1c, 0x01, 0xf0, 0x4a, 0xfa, + 0x60, 0x69, 0xff, 0xf7, 0xa7, 0xff, 0xb0, 0xbd, + 0x40, 0x7c, 0x01, 0x00, 0x3c, 0x00, 0x28, 0xb9, + 0x00, 0x00, 0x80, 0xb5, 0x01, 0xf0, 0x77, 0xfa, + 0x80, 0xbd, 0xb0, 0xb5, 0x0d, 0x4d, 0x01, 0x21, + 0x28, 0x69, 0xff, 0xf7, 0xf4, 0xfe, 0xff, 0xf7, + 0x2a, 0xfe, 0x00, 0xf0, 0x2c, 0xfb, 0x00, 0xf0, + 0x84, 0xfa, 0x00, 0x24, 0x00, 0x22, 0x04, 0x21, + 0x20, 0x1c, 0x01, 0xf0, 0x6c, 0xf8, 0x01, 0x34, + 0x24, 0x06, 0x24, 0x0e, 0x04, 0x2c, 0xf5, 0xd3, + 0x28, 0x69, 0xff, 0xf7, 0x86, 0xff, 0x3c, 0x00, + 0x64, 0xb9, 0x00, 0x00, 0xb0, 0xbd, 0x00, 0x00, + 0x40, 0x7c, 0x01, 0x00, 0xf8, 0xb5, 0x05, 0x1c, + 0x0e, 0x1c, 0x07, 0x4c, 0x17, 0x1c, 0x01, 0x21, + 0x20, 0x69, 0xff, 0xf7, 0xd3, 0xfe, 0x3a, 0x1c, + 0x31, 0x1c, 0x28, 0x1c, 0x01, 0xf0, 0x52, 0xf8, + 0x20, 0x69, 0xff, 0xf7, 0x71, 0xff, 0xf8, 0xbd, + 0x40, 0x7c, 0x01, 0x00, 0xff, 0xb5, 0x89, 0xb0, + 0x06, 0x1c, 0x16, 0x98, 0x1d, 0x1c, 0x00, 0x28, + 0x3c, 0x00, 0xa0, 0xb9, 0x00, 0x00, 0x01, 0xd0, + 0x29, 0x48, 0x14, 0x90, 0x28, 0x68, 0x00, 0x88, + 0x00, 0x06, 0x80, 0x0e, 0x20, 0x28, 0x01, 0xd0, + 0x14, 0x28, 0x17, 0xd1, 0x0a, 0xaa, 0x18, 0x24, + 0x18, 0x21, 0x05, 0xca, 0xff, 0xf7, 0x77, 0xf9, + 0x07, 0x1c, 0x28, 0x1c, 0x01, 0x89, 0xa1, 0x42, + 0x02, 0xdd, 0x00, 0x68, 0x01, 0x19, 0x0b, 0xe0, + 0xc0, 0x68, 0x64, 0x1a, 0x00, 0x28, 0xf5, 0xd1, + 0x0f, 0x21, 0x3c, 0x00, 0xdc, 0xb9, 0x00, 0x00, + 0x86, 0x20, 0xf5, 0xf7, 0x61, 0xfc, 0x00, 0x21, + 0x01, 0xe0, 0x00, 0x21, 0x00, 0x27, 0x18, 0x48, + 0x08, 0x90, 0x80, 0x79, 0x07, 0x90, 0x0c, 0x20, + 0x16, 0x4a, 0x70, 0x43, 0x80, 0x18, 0x04, 0x79, + 0x04, 0x91, 0x12, 0x99, 0x15, 0x98, 0x14, 0x9a, + 0x01, 0x91, 0x03, 0x90, 0x05, 0x97, 0x00, 0x95, + 0x0a, 0xab, 0x02, 0x92, 0x21, 0x1c, 0x30, 0x1c, + 0x0c, 0xcb, 0xf7, 0xf7, 0x3c, 0x00, 0x18, 0xba, + 0x00, 0x00, 0x03, 0xf9, 0x01, 0x25, 0xb5, 0x40, + 0x0c, 0x4e, 0x08, 0x3e, 0x30, 0x78, 0x28, 0x40, + 0x06, 0xd0, 0x20, 0x1c, 0x00, 0xf0, 0xc9, 0xfd, + 0x30, 0x78, 0xa8, 0x43, 0x30, 0x70, 0x03, 0xe0, + 0x20, 0x1c, 0x13, 0x99, 0x00, 0xf0, 0x43, 0xff, + 0x07, 0xa9, 0x03, 0xc9, 0x88, 0x71, 0x0d, 0xb0, + 0xf0, 0xbd, 0x95, 0x24, 0x00, 0x00, 0x20, 0x10, + 0x07, 0x00, 0x74, 0x7a, 0x01, 0x00, 0x3c, 0x00, + 0x54, 0xba, 0x00, 0x00, 0xb0, 0xb5, 0x04, 0x1c, + 0x0c, 0x23, 0x09, 0x49, 0x58, 0x43, 0x40, 0x18, + 0x00, 0x79, 0x05, 0x1c, 0x00, 0xf0, 0x92, 0xfe, + 0x28, 0x1c, 0xf7, 0xf7, 0xc7, 0xf8, 0x01, 0x20, + 0x03, 0x4a, 0xa0, 0x40, 0x08, 0x3a, 0x11, 0x78, + 0x81, 0x43, 0x11, 0x70, 0xb0, 0xbd, 0x00, 0x00, + 0x74, 0x7a, 0x01, 0x00, 0x10, 0xb5, 0x05, 0x4c, + 0x20, 0x78, 0x00, 0x28, 0x03, 0xd1, 0x1a, 0x21, + 0x3c, 0x00, 0x90, 0xba, 0x00, 0x00, 0x86, 0x20, + 0xf5, 0xf7, 0x07, 0xfc, 0x20, 0x78, 0x10, 0xbd, + 0x00, 0x00, 0x18, 0x63, 0x01, 0x00, 0x01, 0x48, + 0x40, 0x78, 0x70, 0x47, 0x00, 0x00, 0x2c, 0x63, + 0x01, 0x00, 0x80, 0xb5, 0xf6, 0xf7, 0xd1, 0xfe, + 0x00, 0xf0, 0x1b, 0xf9, 0x80, 0xbd, 0xfe, 0xb5, + 0x01, 0x68, 0x05, 0x1c, 0x0c, 0x68, 0x0e, 0x1c, + 0x21, 0x78, 0x88, 0x07, 0x71, 0xd1, 0x68, 0x69, + 0xc2, 0x07, 0x3c, 0x00, 0xcc, 0xba, 0x00, 0x00, + 0x6e, 0xd5, 0x80, 0x07, 0x6d, 0xd5, 0xe8, 0x7a, + 0xc2, 0x07, 0x08, 0x07, 0x09, 0x09, 0x02, 0x91, + 0x45, 0x49, 0x80, 0x0f, 0xd2, 0x0f, 0x00, 0x28, + 0x4f, 0x68, 0x05, 0xd0, 0x01, 0x28, 0x09, 0xd0, + 0x02, 0x28, 0x21, 0xd0, 0x03, 0x28, 0x5b, 0xd1, + 0xff, 0x23, 0x20, 0x1c, 0xa9, 0x7a, 0xf4, 0xf7, + 0x74, 0xfc, 0x55, 0xe0, 0x02, 0x98, 0x0b, 0x28, + 0x0a, 0xd0, 0x0c, 0x28, 0x3c, 0x00, 0x08, 0xbb, + 0x00, 0x00, 0x0f, 0xd0, 0x0d, 0x28, 0x4e, 0xd1, + 0x39, 0x4f, 0xf8, 0x68, 0xf4, 0xf7, 0x61, 0xfc, + 0x00, 0x20, 0xc0, 0x43, 0x5a, 0xe0, 0x35, 0x4f, + 0xa9, 0x7a, 0xbb, 0x68, 0x20, 0x1c, 0xf4, 0xf7, + 0x5b, 0xfc, 0x40, 0xe0, 0x32, 0x4f, 0x38, 0x69, + 0xf4, 0xf7, 0x53, 0xfc, 0x3b, 0xe0, 0x00, 0x21, + 0x01, 0x91, 0x02, 0x99, 0x00, 0x20, 0xff, 0x23, + 0x09, 0x07, 0x01, 0xd4, 0x01, 0x20, 0x3c, 0x00, + 0x44, 0xbb, 0x00, 0x00, 0x13, 0xe0, 0x31, 0x89, + 0x19, 0x29, 0x01, 0xd3, 0x26, 0x7e, 0x07, 0xe0, + 0x15, 0x29, 0x04, 0xd3, 0x18, 0x26, 0x71, 0x1a, + 0x49, 0x19, 0x0e, 0x7b, 0x00, 0xe0, 0x00, 0x26, + 0xb1, 0x06, 0x02, 0xd4, 0x01, 0x20, 0x73, 0x07, + 0x5b, 0x0f, 0x01, 0x21, 0x01, 0x91, 0x00, 0x28, + 0x03, 0xd0, 0xa9, 0x7a, 0x20, 0x1c, 0xf4, 0xf7, + 0x36, 0xfc, 0x01, 0x99, 0x01, 0x29, 0x15, 0xd1, + 0x3c, 0x00, 0x80, 0xbb, 0x00, 0x00, 0xf0, 0x06, + 0xc6, 0x0f, 0x20, 0x88, 0x1b, 0x4f, 0xe4, 0x8a, + 0xf9, 0x6b, 0x00, 0x05, 0xc0, 0x0f, 0x00, 0x29, + 0x1a, 0xd0, 0x4b, 0x1c, 0x18, 0xd0, 0x00, 0x2e, + 0x0a, 0xd0, 0x00, 0x28, 0x08, 0xd0, 0x38, 0x88, + 0x84, 0x42, 0x13, 0xd0, 0x02, 0x98, 0x0c, 0x28, + 0x01, 0xe0, 0x1d, 0xe0, 0x12, 0xe0, 0x0d, 0xd0, + 0x08, 0x1c, 0x01, 0xf0, 0x76, 0xf9, 0x00, 0x28, + 0x03, 0xd1, 0x3c, 0x00, 0xbc, 0xbb, 0x00, 0x00, + 0x00, 0xf0, 0xa6, 0xfa, 0xf4, 0xf7, 0x0a, 0xfc, + 0x00, 0x20, 0xc0, 0x43, 0xf8, 0x63, 0x00, 0x2e, + 0x0d, 0xd0, 0x3c, 0x80, 0x00, 0x20, 0xf8, 0x63, + 0x09, 0xe0, 0x20, 0x88, 0x00, 0x06, 0x80, 0x0e, + 0x20, 0x28, 0x04, 0xd1, 0x04, 0x4f, 0x20, 0x1c, + 0xb9, 0x6a, 0xf4, 0xf7, 0xf8, 0xfb, 0x29, 0x1c, + 0x02, 0x48, 0xfb, 0xf7, 0xef, 0xff, 0xfe, 0xbd, + 0x28, 0x7a, 0x01, 0x00, 0x3c, 0x00, 0xf8, 0xbb, + 0x00, 0x00, 0xa5, 0x9a, 0x00, 0x00, 0x03, 0x48, + 0x80, 0xb5, 0x00, 0x78, 0x00, 0x21, 0x00, 0xf0, + 0xfc, 0xfb, 0x80, 0xbd, 0x00, 0x00, 0x18, 0x63, + 0x01, 0x00, 0x04, 0x4b, 0x05, 0x49, 0x00, 0x28, + 0x1a, 0x68, 0x00, 0xd0, 0x01, 0x1c, 0x10, 0x1c, + 0x19, 0x60, 0x70, 0x47, 0x00, 0x00, 0xd4, 0x79, + 0x01, 0x00, 0x95, 0x75, 0x00, 0x00, 0x05, 0x48, + 0x80, 0xb5, 0x00, 0x7f, 0x24, 0x23, 0x3c, 0x00, + 0x34, 0xbc, 0x00, 0x00, 0x04, 0x49, 0x58, 0x43, + 0x40, 0x18, 0xc0, 0x69, 0xf4, 0xf7, 0xcc, 0xfb, + 0x80, 0xbd, 0x00, 0x00, 0xd4, 0x79, 0x01, 0x00, + 0x94, 0x46, 0x01, 0x00, 0x02, 0x1c, 0x06, 0x48, + 0x80, 0xb5, 0x81, 0x62, 0x82, 0x60, 0x00, 0x7f, + 0x24, 0x23, 0x04, 0x49, 0x58, 0x43, 0x40, 0x18, + 0x80, 0x69, 0xf4, 0xf7, 0xb9, 0xfb, 0x80, 0xbd, + 0xd4, 0x79, 0x01, 0x00, 0x94, 0x46, 0x01, 0x00, + 0x3c, 0x00, 0x70, 0xbc, 0x00, 0x00, 0x80, 0xb5, + 0x00, 0x20, 0x00, 0xf0, 0x3c, 0xfb, 0x00, 0x20, + 0x00, 0xf0, 0x6d, 0xfa, 0x00, 0xf0, 0x65, 0xfa, + 0x04, 0x49, 0xc8, 0x6a, 0x01, 0x30, 0xc8, 0x62, + 0x08, 0x1f, 0x00, 0x88, 0x07, 0xf0, 0xc1, 0xf8, + 0x80, 0xbd, 0xd4, 0x79, 0x01, 0x00, 0x06, 0x48, + 0x80, 0xb5, 0x00, 0x21, 0x01, 0x77, 0xc1, 0x6a, + 0x01, 0x31, 0xc1, 0x62, 0x04, 0x38, 0x00, 0x88, + 0x07, 0xf0, 0x3c, 0x00, 0xac, 0xbc, 0x00, 0x00, + 0xb3, 0xf8, 0x03, 0xf0, 0xd1, 0xf9, 0x80, 0xbd, + 0xd4, 0x79, 0x01, 0x00, 0x80, 0xb5, 0x05, 0xf0, + 0xe9, 0xfa, 0x80, 0xbd, 0x80, 0xb5, 0x00, 0x28, + 0x03, 0xd1, 0x01, 0x20, 0x04, 0xf0, 0x22, 0xfa, + 0x80, 0xbd, 0x01, 0x20, 0x03, 0xf0, 0xe6, 0xfb, + 0x80, 0xbd, 0x00, 0x00, 0x03, 0x49, 0x01, 0x20, + 0x49, 0x78, 0x00, 0x29, 0x00, 0xd0, 0x00, 0x20, + 0x70, 0x47, 0x00, 0x00, 0x3c, 0x00, 0xe8, 0xbc, + 0x00, 0x00, 0x2c, 0x63, 0x01, 0x00, 0x70, 0xb5, + 0x13, 0x4d, 0x28, 0x78, 0x00, 0x28, 0x20, 0xd1, + 0x01, 0x21, 0x2e, 0x1c, 0x70, 0x68, 0xff, 0xf7, + 0x12, 0xfd, 0x00, 0x21, 0x07, 0x20, 0x06, 0xf0, + 0x2a, 0xfb, 0x0d, 0x48, 0x00, 0x24, 0x04, 0x71, + 0x04, 0xf0, 0xed, 0xf8, 0x06, 0xf0, 0xd5, 0xf9, + 0x01, 0x20, 0x28, 0x70, 0x0a, 0x48, 0x04, 0x60, + 0x44, 0x60, 0xf6, 0xf7, 0x4c, 0xfd, 0x3c, 0x00, + 0x24, 0xbd, 0x00, 0x00, 0xf7, 0xf7, 0x5e, 0xf8, + 0xff, 0xf7, 0xa2, 0xff, 0x00, 0xf0, 0xa8, 0xfd, + 0x05, 0x48, 0x71, 0x68, 0x03, 0xf0, 0x20, 0xfb, + 0x01, 0x20, 0x70, 0xbd, 0x2c, 0x63, 0x01, 0x00, + 0x50, 0x00, 0x07, 0x00, 0x80, 0x00, 0x07, 0x00, + 0xc4, 0x60, 0x01, 0x00, 0xb0, 0xb5, 0x1e, 0x4c, + 0x20, 0x78, 0x01, 0x28, 0x35, 0xd1, 0x25, 0x1c, + 0x69, 0x68, 0x1c, 0x48, 0x03, 0xf0, 0x20, 0xfb, + 0x3c, 0x00, 0x60, 0xbd, 0x00, 0x00, 0x04, 0xf0, + 0xf0, 0xf8, 0x1a, 0x48, 0x01, 0x68, 0x49, 0x08, + 0x49, 0x00, 0x01, 0x60, 0x01, 0x68, 0x01, 0x22, + 0x11, 0x43, 0x01, 0x60, 0x00, 0xf0, 0x2b, 0xfe, + 0x00, 0xf0, 0x1b, 0xfc, 0x06, 0xf0, 0x99, 0xf8, + 0xf6, 0xf7, 0x29, 0xfe, 0xf6, 0xf7, 0x2d, 0xfc, + 0x00, 0x20, 0x20, 0x70, 0xff, 0xf7, 0x83, 0xff, + 0x00, 0xf0, 0x8b, 0xfd, 0x0f, 0x48, 0x81, 0x78, + 0x08, 0x22, 0x3c, 0x00, 0x9c, 0xbd, 0x00, 0x00, + 0x91, 0x43, 0x81, 0x70, 0x81, 0x78, 0x11, 0x43, + 0x81, 0x70, 0x0c, 0x49, 0x10, 0x20, 0x08, 0x71, + 0x68, 0x68, 0xff, 0xf7, 0x5f, 0xfd, 0xf7, 0xf7, + 0x39, 0xf8, 0xf6, 0xf7, 0x4d, 0xfd, 0x01, 0x21, + 0x07, 0x20, 0x06, 0xf0, 0xcd, 0xfa, 0x01, 0x20, + 0xb0, 0xbd, 0x00, 0x00, 0x2c, 0x63, 0x01, 0x00, + 0xc4, 0x60, 0x01, 0x00, 0xf0, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x3c, 0x00, 0xd8, 0xbd, + 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x03, 0x49, + 0x01, 0x20, 0x89, 0x7a, 0x01, 0x29, 0x00, 0xd0, + 0x00, 0x20, 0x70, 0x47, 0x00, 0x00, 0x14, 0x7a, + 0x01, 0x00, 0xb0, 0xb5, 0x15, 0x4d, 0x04, 0x1c, + 0x28, 0x7a, 0x00, 0x28, 0x20, 0xd1, 0xf9, 0xf7, + 0x00, 0xfc, 0x02, 0x28, 0x1c, 0xd1, 0x01, 0x20, + 0x28, 0x72, 0xe8, 0x68, 0x00, 0x28, 0x10, 0xd0, + 0x20, 0x68, 0x29, 0x68, 0x08, 0x60, 0x3c, 0x00, + 0x14, 0xbe, 0x00, 0x00, 0x69, 0x68, 0x0d, 0x48, + 0x03, 0xf0, 0xc2, 0xfa, 0x01, 0x21, 0x68, 0x68, + 0xff, 0xf7, 0xc8, 0xfc, 0x00, 0x22, 0x24, 0x20, + 0x61, 0x68, 0x07, 0xf0, 0xcf, 0xfb, 0xb0, 0xbd, + 0x00, 0x20, 0x28, 0x72, 0x21, 0x68, 0x01, 0x20, + 0xf4, 0xf7, 0xcf, 0xfa, 0xb0, 0xbd, 0x00, 0x20, + 0x21, 0x68, 0xf4, 0xf7, 0xca, 0xfa, 0xb0, 0xbd, + 0x04, 0x7a, 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, + 0x3c, 0x00, 0x50, 0xbe, 0x00, 0x00, 0x04, 0x48, + 0x80, 0xb5, 0x00, 0x7a, 0x01, 0x28, 0x02, 0xd1, + 0x00, 0x20, 0x02, 0xf0, 0xf0, 0xfe, 0x80, 0xbd, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x80, 0xb5, + 0x01, 0x28, 0x07, 0xd0, 0x80, 0x28, 0x09, 0xd1, + 0x07, 0x48, 0x00, 0x7a, 0x00, 0x28, 0x04, 0xd0, + 0x01, 0x20, 0x00, 0xe0, 0x00, 0x20, 0x02, 0xf0, + 0xde, 0xfe, 0x80, 0xbd, 0x0e, 0x21, 0x24, 0x20, + 0xf5, 0xf7, 0x3c, 0x00, 0x8c, 0xbe, 0x00, 0x00, + 0x0b, 0xfa, 0x80, 0xbd, 0x04, 0x7a, 0x01, 0x00, + 0xf8, 0xb5, 0x3a, 0x4e, 0x05, 0x1c, 0xb0, 0x7a, + 0x00, 0x28, 0x69, 0xd1, 0xf9, 0xf7, 0xae, 0xfb, + 0x02, 0x28, 0x65, 0xd1, 0x36, 0x48, 0x00, 0x68, + 0x00, 0x28, 0x61, 0xd0, 0x35, 0x48, 0x71, 0x68, + 0x03, 0xf0, 0x74, 0xfa, 0x01, 0x21, 0x70, 0x68, + 0xff, 0xf7, 0x7a, 0xfc, 0x6c, 0x20, 0xf5, 0xf7, + 0xb9, 0xfc, 0x04, 0x1c, 0x3c, 0x00, 0xc8, 0xbe, + 0x00, 0x00, 0x6c, 0x21, 0xf4, 0xf7, 0xe7, 0xfa, + 0x30, 0x68, 0x2c, 0x22, 0x04, 0x60, 0x29, 0x68, + 0x81, 0x60, 0x69, 0x68, 0xc1, 0x60, 0x00, 0x21, + 0x11, 0x54, 0x81, 0x62, 0xa9, 0x68, 0x00, 0x29, + 0x02, 0xd0, 0xe9, 0x68, 0x01, 0x61, 0x05, 0xe0, + 0x06, 0xf0, 0x5d, 0xff, 0x69, 0x68, 0x40, 0x18, + 0x31, 0x68, 0x08, 0x61, 0x70, 0x68, 0xff, 0xf7, + 0x14, 0xfd, 0x69, 0x21, 0x08, 0x55, 0x3c, 0x00, + 0x04, 0xbf, 0x00, 0x00, 0x00, 0x20, 0xf9, 0xf7, + 0x09, 0xfb, 0x01, 0x27, 0x3b, 0x1c, 0x06, 0x1c, + 0x22, 0x1c, 0x24, 0x32, 0x00, 0x21, 0xf9, 0xf7, + 0x79, 0xfb, 0x1c, 0x48, 0x03, 0x21, 0x00, 0x88, + 0x89, 0x03, 0x08, 0x43, 0x21, 0x1c, 0x40, 0x31, + 0x00, 0x91, 0x48, 0x83, 0x18, 0x48, 0x10, 0x21, + 0x60, 0x60, 0x18, 0x48, 0xa0, 0x60, 0xa7, 0x63, + 0x67, 0x63, 0x00, 0x20, 0xf5, 0xf7, 0x4c, 0xfb, + 0x3c, 0x00, 0x40, 0xbf, 0x00, 0x00, 0xe0, 0x60, + 0x02, 0x89, 0x00, 0x99, 0xca, 0x83, 0x07, 0x68, + 0x31, 0x1c, 0x38, 0x1d, 0x27, 0x61, 0xfe, 0xf7, + 0x8e, 0xfe, 0x38, 0x1c, 0x0a, 0x30, 0x0f, 0x49, + 0xfe, 0xf7, 0x89, 0xfe, 0xa4, 0x20, 0x38, 0x80, + 0x00, 0x20, 0x04, 0xf0, 0xde, 0xfb, 0x00, 0x22, + 0x1f, 0x20, 0x69, 0x68, 0x07, 0xf0, 0x2d, 0xfb, + 0xf8, 0xbd, 0xff, 0xe7, 0x00, 0x20, 0x29, 0x68, + 0xf4, 0xf7, 0x3c, 0x00, 0x7c, 0xbf, 0x00, 0x00, + 0x2e, 0xfa, 0xf8, 0xe7, 0x14, 0x7a, 0x01, 0x00, + 0x80, 0x5a, 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, + 0xfa, 0x60, 0x01, 0x00, 0x99, 0xec, 0x00, 0x00, + 0x15, 0xed, 0x00, 0x00, 0x12, 0x61, 0x01, 0x00, + 0x06, 0x48, 0x80, 0xb5, 0x81, 0x7a, 0x00, 0x29, + 0x07, 0xd0, 0x00, 0x68, 0x04, 0x22, 0x20, 0x30, + 0x01, 0x7b, 0x11, 0x43, 0x01, 0x73, 0x02, 0xf0, + 0x6b, 0xfd, 0x80, 0xbd, 0x3c, 0x00, 0xb8, 0xbf, + 0x00, 0x00, 0x14, 0x7a, 0x01, 0x00, 0x10, 0xb5, + 0x04, 0x4c, 0xa0, 0x7a, 0x01, 0x28, 0x03, 0xd1, + 0x06, 0xf0, 0xf1, 0xfe, 0x21, 0x68, 0x88, 0x61, + 0x10, 0xbd, 0x14, 0x7a, 0x01, 0x00, 0x03, 0x1c, + 0x08, 0x1c, 0x1f, 0x49, 0x70, 0xb5, 0x0a, 0x68, + 0x01, 0x2b, 0x1c, 0xd0, 0x80, 0x2b, 0x05, 0xd0, + 0x83, 0x2b, 0x30, 0xd1, 0x88, 0x7a, 0x00, 0x28, + 0x14, 0xd0, 0x29, 0xe0, 0x53, 0x69, 0x3c, 0x00, + 0xf4, 0xbf, 0x00, 0x00, 0x00, 0x2b, 0x0e, 0xd0, + 0x94, 0x69, 0xd5, 0x69, 0x2e, 0x1b, 0x0c, 0x69, + 0x5d, 0x1b, 0x36, 0x1b, 0xb6, 0x10, 0xa4, 0x19, + 0x0c, 0x61, 0xcc, 0x68, 0x2d, 0x1b, 0xad, 0x10, + 0x64, 0x19, 0xcc, 0x60, 0x93, 0x61, 0x02, 0xf0, + 0x81, 0xfd, 0x70, 0xbd, 0x02, 0x28, 0x12, 0xd1, + 0x90, 0x6a, 0x0c, 0x1c, 0x00, 0x28, 0xf8, 0xd0, + 0x07, 0xf0, 0x0e, 0xfa, 0xa0, 0x7a, 0x01, 0x28, + 0x3c, 0x00, 0x30, 0xc0, 0x00, 0x00, 0xf3, 0xd1, + 0x20, 0x68, 0x81, 0x6a, 0x00, 0x29, 0xef, 0xd1, + 0x20, 0x30, 0x01, 0x7b, 0x08, 0x22, 0x11, 0x43, + 0x01, 0x73, 0x70, 0xbd, 0x02, 0xf0, 0x21, 0xfd, + 0x70, 0xbd, 0x0e, 0x21, 0x1f, 0x20, 0xf5, 0xf7, + 0x28, 0xf9, 0x70, 0xbd, 0x00, 0x00, 0x14, 0x7a, + 0x01, 0x00, 0x02, 0x49, 0x0c, 0x31, 0x03, 0xc9, + 0x40, 0x18, 0x70, 0x47, 0x00, 0x00, 0x14, 0x7a, + 0x01, 0x00, 0x3c, 0x00, 0x6c, 0xc0, 0x00, 0x00, + 0x05, 0x48, 0x80, 0xb5, 0x00, 0x68, 0x04, 0x22, + 0x20, 0x30, 0x01, 0x7b, 0x11, 0x43, 0x01, 0x73, + 0x07, 0xf0, 0xe4, 0xf9, 0x80, 0xbd, 0x00, 0x00, + 0x14, 0x7a, 0x01, 0x00, 0x70, 0xb5, 0x16, 0x4c, + 0x0e, 0x1c, 0xa1, 0x7a, 0x00, 0x29, 0x1c, 0xd0, + 0x21, 0x68, 0x08, 0x61, 0x07, 0xf0, 0x32, 0xfa, + 0x00, 0x28, 0x17, 0xd0, 0x20, 0x68, 0x00, 0x25, + 0x05, 0x62, 0x00, 0x22, 0x3c, 0x00, 0xa8, 0xc0, + 0x00, 0x00, 0x83, 0x21, 0x1f, 0x20, 0x07, 0xf0, + 0x94, 0xfa, 0x60, 0x68, 0xff, 0xf7, 0x03, 0xfc, + 0x21, 0x68, 0x04, 0x22, 0x20, 0x31, 0x08, 0x7b, + 0x2b, 0x1c, 0x90, 0x43, 0x08, 0x73, 0x31, 0x1c, + 0x00, 0x22, 0x1f, 0x20, 0x07, 0xf0, 0x61, 0xfb, + 0x70, 0xbd, 0x20, 0x68, 0x08, 0x22, 0x20, 0x30, + 0x01, 0x7b, 0x11, 0x43, 0x01, 0x73, 0x02, 0xf0, + 0xd6, 0xfc, 0x70, 0xbd, 0x00, 0x00, 0x3c, 0x00, + 0xe4, 0xc0, 0x00, 0x00, 0x14, 0x7a, 0x01, 0x00, + 0x80, 0xb5, 0x00, 0xf0, 0x77, 0xfc, 0x00, 0xf0, + 0x6f, 0xfc, 0x00, 0xf0, 0x29, 0xff, 0x00, 0xf0, + 0x5d, 0xfa, 0x00, 0xf0, 0xc5, 0xf8, 0x00, 0xf0, + 0x85, 0xff, 0x80, 0xbd, 0x80, 0xb5, 0xfa, 0xf7, + 0x85, 0xfa, 0x80, 0xbd, 0x01, 0x48, 0xc0, 0x68, + 0x70, 0x47, 0x00, 0x00, 0x28, 0x7a, 0x01, 0x00, + 0x03, 0x49, 0x00, 0x28, 0x00, 0xd0, 0x01, 0x1c, + 0x3c, 0x00, 0x20, 0xc1, 0x00, 0x00, 0x02, 0x48, + 0xc1, 0x60, 0x70, 0x47, 0x00, 0x00, 0x81, 0x75, + 0x00, 0x00, 0x28, 0x7a, 0x01, 0x00, 0x01, 0x48, + 0x02, 0x49, 0xc8, 0x60, 0x70, 0x47, 0x81, 0x75, + 0x00, 0x00, 0x28, 0x7a, 0x01, 0x00, 0x01, 0x49, + 0x88, 0x61, 0x70, 0x47, 0x00, 0x00, 0x28, 0x7a, + 0x01, 0x00, 0x01, 0x49, 0x00, 0x20, 0x88, 0x61, + 0x70, 0x47, 0x28, 0x7a, 0x01, 0x00, 0x03, 0x49, + 0x00, 0x28, 0x3c, 0x00, 0x5c, 0xc1, 0x00, 0x00, + 0x00, 0xd0, 0x01, 0x1c, 0x02, 0x48, 0xc1, 0x61, + 0x70, 0x47, 0x00, 0x00, 0x89, 0x75, 0x00, 0x00, + 0x28, 0x7a, 0x01, 0x00, 0x03, 0x49, 0x00, 0x28, + 0x00, 0xd0, 0x01, 0x1c, 0x02, 0x48, 0x81, 0x62, + 0x70, 0x47, 0x00, 0x00, 0x8d, 0x75, 0x00, 0x00, + 0x28, 0x7a, 0x01, 0x00, 0x03, 0x49, 0x00, 0x28, + 0x00, 0xd0, 0x01, 0x1c, 0x02, 0x48, 0x01, 0x62, + 0x70, 0x47, 0x00, 0x00, 0x3c, 0x00, 0x98, 0xc1, + 0x00, 0x00, 0x91, 0x75, 0x00, 0x00, 0x28, 0x7a, + 0x01, 0x00, 0x03, 0x49, 0x00, 0x28, 0x00, 0xd0, + 0x01, 0x1c, 0x02, 0x48, 0x01, 0x61, 0x70, 0x47, + 0x00, 0x00, 0x99, 0x75, 0x00, 0x00, 0x28, 0x7a, + 0x01, 0x00, 0x01, 0x48, 0x02, 0x49, 0x08, 0x61, + 0x70, 0x47, 0x81, 0x75, 0x00, 0x00, 0x28, 0x7a, + 0x01, 0x00, 0x02, 0x1c, 0x08, 0x1c, 0x80, 0x2a, + 0x80, 0xb5, 0x02, 0xd1, 0x00, 0xf0, 0x3c, 0x00, + 0xd4, 0xc1, 0x00, 0x00, 0x07, 0xf8, 0x80, 0xbd, + 0x1e, 0x21, 0x21, 0x20, 0xf5, 0xf7, 0x62, 0xf8, + 0x80, 0xbd, 0x00, 0x00, 0xb0, 0xb5, 0x10, 0x4d, + 0x04, 0x1c, 0xa8, 0x6b, 0x01, 0x30, 0xa8, 0x63, + 0x69, 0x6b, 0x09, 0x1a, 0x28, 0x1c, 0x00, 0x6b, + 0x0c, 0x29, 0x03, 0xd9, 0x00, 0x21, 0xff, 0xf7, + 0x91, 0xfa, 0x03, 0xe0, 0x08, 0x29, 0x01, 0xd1, + 0xff, 0xf7, 0x32, 0xfb, 0x20, 0x1c, 0x00, 0xf0, + 0x3c, 0x00, 0x10, 0xc2, 0x00, 0x00, 0x4d, 0xf9, + 0x60, 0x69, 0x40, 0x07, 0x01, 0xd5, 0x03, 0xf0, + 0x0c, 0xfc, 0x20, 0x1c, 0xe9, 0x6a, 0xf4, 0xf7, + 0xdb, 0xf8, 0xb0, 0xbd, 0x00, 0x00, 0x28, 0x7a, + 0x01, 0x00, 0x03, 0x49, 0x00, 0x28, 0x00, 0xd0, + 0x01, 0x1c, 0x02, 0x48, 0x41, 0x62, 0x70, 0x47, + 0x00, 0x00, 0xb5, 0x75, 0x00, 0x00, 0x28, 0x7a, + 0x01, 0x00, 0x03, 0x49, 0x01, 0x20, 0x09, 0x6c, + 0x00, 0x29, 0x3c, 0x00, 0x4c, 0xc2, 0x00, 0x00, + 0x00, 0xd1, 0x00, 0x20, 0x70, 0x47, 0x00, 0x00, + 0x28, 0x7a, 0x01, 0x00, 0x10, 0xb5, 0x07, 0x4c, + 0xe1, 0x6b, 0x00, 0x29, 0x01, 0xd1, 0xe0, 0x63, + 0x04, 0xe0, 0x81, 0x42, 0x02, 0xd0, 0x00, 0x20, + 0xc0, 0x43, 0xf8, 0xe7, 0x06, 0xf0, 0x9c, 0xfd, + 0x20, 0x64, 0x10, 0xbd, 0x28, 0x7a, 0x01, 0x00, + 0x01, 0x48, 0x00, 0x6c, 0x70, 0x47, 0x00, 0x00, + 0x28, 0x7a, 0x01, 0x00, 0x3c, 0x00, 0x88, 0xc2, + 0x00, 0x00, 0x05, 0x49, 0x80, 0xb5, 0x00, 0x20, + 0x48, 0x63, 0x88, 0x63, 0xff, 0x21, 0x09, 0x31, + 0x15, 0x22, 0x10, 0x20, 0xf6, 0xf7, 0xfb, 0xf9, + 0x80, 0xbd, 0x28, 0x7a, 0x01, 0x00, 0x03, 0x49, + 0x00, 0x28, 0x00, 0xd0, 0x01, 0x1c, 0x02, 0x48, + 0x81, 0x60, 0x70, 0x47, 0x00, 0x00, 0xc1, 0x75, + 0x00, 0x00, 0x28, 0x7a, 0x01, 0x00, 0x03, 0x49, + 0x00, 0x28, 0x00, 0xd0, 0x01, 0x1c, 0x3c, 0x00, + 0xc4, 0xc2, 0x00, 0x00, 0x02, 0x48, 0xc1, 0x62, + 0x70, 0x47, 0x00, 0x00, 0xc5, 0x75, 0x00, 0x00, + 0x28, 0x7a, 0x01, 0x00, 0x04, 0x4b, 0x05, 0x49, + 0x00, 0x28, 0x5a, 0x68, 0x00, 0xd0, 0x01, 0x1c, + 0x10, 0x1c, 0x59, 0x60, 0x70, 0x47, 0x00, 0x00, + 0x28, 0x7a, 0x01, 0x00, 0xc9, 0x75, 0x00, 0x00, + 0x03, 0x49, 0x00, 0x28, 0x00, 0xd0, 0x01, 0x1c, + 0x02, 0x48, 0x41, 0x61, 0x70, 0x47, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0xc3, 0x00, 0x00, 0xcd, 0x75, + 0x00, 0x00, 0x28, 0x7a, 0x01, 0x00, 0x0f, 0x4b, + 0x10, 0xb5, 0xd9, 0x68, 0x00, 0x29, 0x19, 0xd0, + 0x0e, 0x4c, 0x00, 0x21, 0xca, 0x00, 0x12, 0x19, + 0x40, 0x3a, 0xd2, 0x6b, 0x82, 0x42, 0x02, 0xda, + 0x01, 0x31, 0x03, 0x29, 0xf6, 0xd3, 0x48, 0x1c, + 0x1a, 0x78, 0x00, 0x06, 0x00, 0x0e, 0x90, 0x42, + 0x08, 0xd0, 0x18, 0x70, 0x08, 0x06, 0x00, 0x0e, + 0x04, 0x1c, 0x3c, 0x00, 0x3c, 0xc3, 0x00, 0x00, + 0xf6, 0xf7, 0xba, 0xfa, 0x20, 0x1c, 0x03, 0xf0, + 0x1b, 0xfd, 0x10, 0xbd, 0x18, 0x63, 0x01, 0x00, + 0x3c, 0x42, 0x01, 0x00, 0x10, 0xb5, 0x14, 0x4c, + 0xe1, 0x68, 0x00, 0x29, 0x22, 0xd0, 0x21, 0x78, + 0x12, 0x4b, 0xca, 0x00, 0xd2, 0x18, 0x40, 0x3a, + 0xd3, 0x6b, 0x83, 0x42, 0x02, 0xda, 0x48, 0x1c, + 0x20, 0x70, 0x0b, 0xe0, 0x92, 0x6b, 0x82, 0x42, + 0x14, 0xdd, 0xff, 0x31, 0x3c, 0x00, 0x78, 0xc3, + 0x00, 0x00, 0x08, 0x06, 0x00, 0x0e, 0x20, 0x70, + 0x03, 0xd1, 0x19, 0x21, 0x86, 0x20, 0xf4, 0xf7, + 0x8e, 0xff, 0x20, 0x78, 0xff, 0x30, 0x00, 0x06, + 0x00, 0x0e, 0xf6, 0xf7, 0x90, 0xfa, 0x20, 0x78, + 0xff, 0x30, 0x00, 0x06, 0x00, 0x0e, 0x03, 0xf0, + 0xee, 0xfc, 0x10, 0xbd, 0x00, 0x00, 0x18, 0x63, + 0x01, 0x00, 0x3c, 0x42, 0x01, 0x00, 0x09, 0x48, + 0x00, 0x21, 0x01, 0x81, 0x41, 0x81, 0x3c, 0x00, + 0xb4, 0xc3, 0x00, 0x00, 0x81, 0x81, 0xc1, 0x81, + 0x07, 0x4a, 0x02, 0x80, 0x01, 0x23, 0xdb, 0x02, + 0x43, 0x80, 0x82, 0x80, 0xc2, 0x80, 0x41, 0x76, + 0x31, 0x21, 0x81, 0x76, 0x01, 0x21, 0x01, 0x76, + 0x70, 0x47, 0x00, 0x00, 0x30, 0x80, 0x07, 0x00, + 0xff, 0xff, 0x00, 0x00, 0x80, 0xb5, 0x01, 0x20, + 0xf6, 0xf7, 0xf8, 0xf8, 0x01, 0x20, 0xf6, 0xf7, + 0xdb, 0xfc, 0x01, 0x20, 0xf6, 0xf7, 0x5a, 0xfa, + 0x3c, 0x00, 0xf0, 0xc3, 0x00, 0x00, 0x01, 0x20, + 0x00, 0xf0, 0xf1, 0xfd, 0x01, 0x20, 0xf7, 0xf7, + 0xc6, 0xfb, 0x80, 0xbd, 0x00, 0x00, 0x10, 0xb5, + 0x11, 0x4c, 0x00, 0x29, 0x07, 0xd1, 0x00, 0x28, + 0x02, 0xd1, 0x01, 0x20, 0xe0, 0x60, 0x06, 0xe0, + 0x00, 0x21, 0xe1, 0x60, 0x03, 0xe0, 0x01, 0x29, + 0x07, 0xd1, 0x00, 0x28, 0x01, 0xd0, 0x20, 0x70, + 0x03, 0xe0, 0x18, 0x21, 0x86, 0x20, 0xf4, 0xf7, + 0x3c, 0xff, 0x3c, 0x00, 0x2c, 0xc4, 0x00, 0x00, + 0x20, 0x78, 0xff, 0x30, 0x00, 0x06, 0x00, 0x0e, + 0xf6, 0xf7, 0x3e, 0xfa, 0x20, 0x78, 0xff, 0x30, + 0x00, 0x06, 0x00, 0x0e, 0x03, 0xf0, 0x9c, 0xfc, + 0x10, 0xbd, 0x00, 0x00, 0x18, 0x63, 0x01, 0x00, + 0x05, 0x49, 0x80, 0xb5, 0x09, 0x68, 0x88, 0x42, + 0x05, 0xd0, 0xfe, 0xf7, 0xff, 0xfb, 0x00, 0xf0, + 0x87, 0xfa, 0xff, 0xf7, 0x2b, 0xfc, 0x80, 0xbd, + 0xa8, 0x69, 0x01, 0x00, 0x3c, 0x00, 0x68, 0xc4, + 0x00, 0x00, 0x01, 0x49, 0x48, 0x70, 0x70, 0x47, + 0x00, 0x00, 0x2c, 0x63, 0x01, 0x00, 0x01, 0x49, + 0xc8, 0x60, 0x70, 0x47, 0x00, 0x00, 0x4c, 0x7b, + 0x01, 0x00, 0x03, 0x49, 0x01, 0x20, 0x09, 0x78, + 0x00, 0x29, 0x00, 0xd0, 0x00, 0x20, 0x70, 0x47, + 0x00, 0x00, 0x2c, 0x63, 0x01, 0x00, 0x04, 0x4a, + 0x00, 0x28, 0x02, 0xd0, 0x90, 0x69, 0x01, 0x30, + 0x90, 0x61, 0xd0, 0x69, 0x40, 0x18, 0x3c, 0x00, + 0xa4, 0xc4, 0x00, 0x00, 0xd0, 0x61, 0x70, 0x47, + 0x90, 0x5c, 0x01, 0x00, 0xfe, 0xb5, 0x04, 0x1c, + 0x00, 0x68, 0x05, 0x68, 0x28, 0x1c, 0xfe, 0xf7, + 0x27, 0xff, 0x07, 0x1c, 0x60, 0x69, 0x15, 0x4e, + 0xc0, 0x07, 0xc0, 0x0f, 0x21, 0xd0, 0x01, 0xaa, + 0x02, 0xa9, 0x28, 0x1c, 0xfe, 0xf7, 0x12, 0xff, + 0x38, 0x78, 0xc0, 0x07, 0x0c, 0xd4, 0x60, 0x69, + 0x80, 0x07, 0x08, 0xd5, 0x00, 0xab, 0x18, 0x7a, + 0x3c, 0x00, 0xe0, 0xc4, 0x00, 0x00, 0x00, 0x28, + 0x01, 0xd0, 0x02, 0x28, 0x02, 0xd1, 0x70, 0x6a, + 0x01, 0x30, 0x70, 0x62, 0xfe, 0xbd, 0x00, 0xab, + 0x18, 0x7a, 0x00, 0x28, 0x01, 0xd0, 0x02, 0x28, + 0xf8, 0xd1, 0x70, 0x6a, 0x01, 0x30, 0x70, 0x62, + 0xb0, 0x6a, 0x01, 0x30, 0xb0, 0x62, 0xf1, 0xe7, + 0xf0, 0x6a, 0x01, 0x30, 0xf0, 0x62, 0xed, 0xe7, + 0x00, 0x00, 0x90, 0x5c, 0x01, 0x00, 0x02, 0x49, + 0x48, 0x69, 0x3c, 0x00, 0x1c, 0xc5, 0x00, 0x00, + 0x01, 0x30, 0x48, 0x61, 0x70, 0x47, 0x00, 0x00, + 0x90, 0x5c, 0x01, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x70, 0x47, 0x00, 0x00, 0x01, 0x1c, 0x40, 0x31, + 0x10, 0xb5, 0x0a, 0x8b, 0x12, 0x07, 0x92, 0x0f, + 0x01, 0x2a, 0x33, 0xd0, 0x4a, 0x78, 0x1a, 0x49, + 0x04, 0x1c, 0x60, 0x34, 0x00, 0x2a, 0x0b, 0x6a, + 0x22, 0xd1, 0xe2, 0x79, 0x01, 0x2a, 0x02, 0xd9, + 0xcc, 0x68, 0x01, 0x34, 0x3c, 0x00, 0x58, 0xc5, + 0x00, 0x00, 0xcc, 0x60, 0x02, 0x2a, 0x02, 0xd9, + 0x0c, 0x69, 0x01, 0x34, 0x0c, 0x61, 0x0c, 0x68, + 0x01, 0x34, 0x0c, 0x60, 0x44, 0x6b, 0x00, 0x2c, + 0x03, 0xd0, 0x04, 0x69, 0x24, 0x7c, 0xe4, 0x07, + 0x02, 0xd5, 0x4c, 0x68, 0x01, 0x34, 0x4c, 0x60, + 0x80, 0x6b, 0x00, 0x28, 0x02, 0xd0, 0x08, 0x6b, + 0x01, 0x30, 0x08, 0x63, 0x00, 0x2a, 0x0c, 0xd0, + 0x98, 0x18, 0x01, 0x38, 0x08, 0xe0, 0x3c, 0x00, + 0x94, 0xc5, 0x00, 0x00, 0x01, 0x2a, 0x01, 0xd0, + 0x02, 0x2a, 0x02, 0xd1, 0x88, 0x68, 0x01, 0x30, + 0x88, 0x60, 0xe0, 0x79, 0x18, 0x18, 0x08, 0x62, + 0x10, 0xbd, 0x00, 0x00, 0x90, 0x5c, 0x01, 0x00, + 0x70, 0x47, 0x00, 0x00, 0x01, 0x49, 0x0a, 0x20, + 0x08, 0x81, 0x70, 0x47, 0xc4, 0x7a, 0x01, 0x00, + 0xf0, 0xb5, 0x32, 0x4f, 0x04, 0x1c, 0x78, 0x78, + 0x85, 0xb0, 0xc0, 0x07, 0xc0, 0x0f, 0x03, 0x90, + 0x3c, 0x00, 0xd0, 0xc5, 0x00, 0x00, 0xb8, 0x78, + 0x02, 0x90, 0x01, 0x20, 0xa0, 0x40, 0x04, 0x90, + 0x39, 0x1c, 0x88, 0x70, 0x2c, 0x48, 0x00, 0x88, + 0x06, 0xf0, 0x0b, 0xfc, 0x01, 0x90, 0xfe, 0xf7, + 0xae, 0xfc, 0x04, 0x30, 0x29, 0x4e, 0xa5, 0x00, + 0x71, 0x59, 0x09, 0x79, 0x88, 0x42, 0x06, 0xd0, + 0xfe, 0xf7, 0xa5, 0xfc, 0x71, 0x59, 0x04, 0x30, + 0x08, 0x71, 0x01, 0x20, 0x78, 0x70, 0x00, 0x20, + 0x78, 0x70, 0x3c, 0x00, 0x0c, 0xc6, 0x00, 0x00, + 0x21, 0x48, 0x01, 0x21, 0x20, 0x4e, 0x30, 0x38, + 0x01, 0x55, 0x71, 0x59, 0x03, 0x20, 0x08, 0x70, + 0x06, 0xf0, 0xc6, 0xfb, 0x06, 0x1c, 0xfe, 0xf7, + 0x91, 0xfc, 0x36, 0x18, 0x0e, 0x36, 0x09, 0xe0, + 0x30, 0x1c, 0x06, 0xf0, 0xf5, 0xfa, 0x00, 0x28, + 0x04, 0xd0, 0x23, 0x21, 0x86, 0x20, 0xf4, 0xf7, + 0x33, 0xfe, 0x03, 0xe0, 0xf6, 0xf7, 0x34, 0xfb, + 0x00, 0x28, 0xf1, 0xd0, 0x3c, 0x00, 0x48, 0xc6, + 0x00, 0x00, 0x12, 0x48, 0x13, 0x49, 0x3c, 0x38, + 0x00, 0x78, 0x08, 0x72, 0x20, 0x1c, 0xf4, 0xf7, + 0xa2, 0xfa, 0x0e, 0x4e, 0x71, 0x59, 0x08, 0x71, + 0x03, 0x98, 0x00, 0x28, 0x01, 0xd0, 0x01, 0x21, + 0x79, 0x70, 0x09, 0x48, 0x00, 0x88, 0x01, 0x99, + 0x06, 0xf0, 0xbd, 0xfb, 0x02, 0x98, 0xb8, 0x70, + 0x09, 0x49, 0x49, 0x79, 0x04, 0x98, 0x88, 0x42, + 0x03, 0xd0, 0x24, 0x21, 0x86, 0x20, 0x3c, 0x00, + 0x84, 0xc6, 0x00, 0x00, 0xf4, 0xf7, 0x0e, 0xfe, + 0x05, 0xb0, 0xf0, 0xbd, 0x00, 0x50, 0x07, 0x00, + 0xd0, 0x79, 0x01, 0x00, 0x10, 0x7b, 0x01, 0x00, + 0x80, 0x80, 0x07, 0x00, 0x50, 0x80, 0x07, 0x00, + 0xb0, 0xb5, 0x0d, 0x1c, 0x04, 0x1c, 0x05, 0x28, + 0x01, 0xd3, 0xf4, 0xf7, 0x29, 0xfe, 0x05, 0x2d, + 0x01, 0xd3, 0xf4, 0xf7, 0x25, 0xfe, 0x0b, 0x4a, + 0xa8, 0x00, 0x11, 0x58, 0xa0, 0x00, 0x10, 0x58, + 0x3c, 0x00, 0xc0, 0xc6, 0x00, 0x00, 0x0e, 0xc9, + 0x0e, 0xc0, 0x06, 0x21, 0x06, 0x22, 0x06, 0x48, + 0x69, 0x43, 0x2a, 0x38, 0x09, 0x18, 0x62, 0x43, + 0x10, 0x18, 0x06, 0x22, 0xf3, 0xf7, 0x0f, 0xff, + 0x02, 0x48, 0x30, 0x38, 0x41, 0x5d, 0x01, 0x55, + 0xb0, 0xbd, 0x10, 0x7b, 0x01, 0x00, 0xb0, 0xb5, + 0x04, 0x1c, 0x0e, 0x48, 0x0d, 0x1c, 0x80, 0x78, + 0x01, 0x21, 0xa1, 0x40, 0x08, 0x40, 0x03, 0xd0, + 0x01, 0x21, 0x3c, 0x00, 0xfc, 0xc6, 0x00, 0x00, + 0x86, 0x20, 0xf4, 0xf7, 0xd1, 0xfd, 0x06, 0x21, + 0x06, 0x22, 0x09, 0x48, 0x69, 0x43, 0x09, 0x18, + 0x62, 0x43, 0x10, 0x18, 0x06, 0x22, 0xf3, 0xf7, + 0xf1, 0xfe, 0x20, 0x1c, 0xf4, 0xf7, 0x40, 0xfa, + 0x03, 0x4a, 0xa1, 0x00, 0x2a, 0x32, 0x51, 0x58, + 0x08, 0x71, 0xb0, 0xbd, 0x00, 0x50, 0x07, 0x00, + 0xe6, 0x7a, 0x01, 0x00, 0x03, 0x49, 0x80, 0xb5, + 0x00, 0x20, 0x48, 0x60, 0x3c, 0x00, 0x38, 0xc7, + 0x00, 0x00, 0x07, 0xf0, 0x32, 0xf9, 0x80, 0xbd, + 0x00, 0x00, 0xd4, 0x7a, 0x01, 0x00, 0x10, 0xb5, + 0x04, 0x1c, 0x05, 0x28, 0x01, 0xd3, 0xf4, 0xf7, + 0xd8, 0xfd, 0x07, 0x49, 0x08, 0x7a, 0x07, 0x4a, + 0x10, 0x70, 0x01, 0x20, 0x08, 0x72, 0xfe, 0xf7, + 0xf4, 0xfb, 0x04, 0x4a, 0x04, 0x30, 0xa1, 0x00, + 0x3c, 0x32, 0x51, 0x58, 0x08, 0x71, 0x10, 0xbd, + 0x00, 0x00, 0x80, 0x80, 0x07, 0x00, 0x3c, 0x00, + 0x74, 0xc7, 0x00, 0x00, 0xd4, 0x7a, 0x01, 0x00, + 0x03, 0x49, 0x80, 0xb5, 0x01, 0x20, 0x48, 0x60, + 0x07, 0xf0, 0x0e, 0xf9, 0x80, 0xbd, 0x00, 0x00, + 0xd4, 0x7a, 0x01, 0x00, 0x10, 0xb5, 0x04, 0x1c, + 0x05, 0x28, 0x01, 0xd3, 0xf4, 0xf7, 0xb4, 0xfd, + 0x20, 0x1c, 0xf5, 0xf7, 0x8f, 0xfe, 0x00, 0x21, + 0x20, 0x1c, 0xfb, 0xf7, 0x31, 0xfd, 0x01, 0x21, + 0x00, 0x28, 0x00, 0xd0, 0x01, 0x1c, 0x09, 0x04, + 0x3c, 0x00, 0xb0, 0xc7, 0x00, 0x00, 0x09, 0x0c, + 0x20, 0x1c, 0x04, 0xf0, 0x22, 0xfa, 0x10, 0xbd, + 0x00, 0x00, 0x06, 0x49, 0x01, 0x20, 0x05, 0x4b, + 0x88, 0x60, 0x00, 0x20, 0x3c, 0x33, 0x00, 0x21, + 0x82, 0x00, 0x9a, 0x58, 0x11, 0x70, 0x01, 0x30, + 0x05, 0x28, 0xf9, 0xdb, 0x70, 0x47, 0xd4, 0x7a, + 0x01, 0x00, 0x0f, 0x49, 0x38, 0xb5, 0x00, 0x20, + 0x88, 0x60, 0x0e, 0x48, 0x01, 0x1c, 0x20, 0x31, + 0x8a, 0x79, 0x3c, 0x00, 0xec, 0xc7, 0x00, 0x00, + 0x00, 0xab, 0x1a, 0x70, 0xc9, 0x79, 0x0a, 0x4c, + 0x09, 0x4d, 0x59, 0x70, 0x0c, 0x34, 0x3c, 0x35, + 0x00, 0x21, 0x03, 0x22, 0x63, 0x5c, 0x00, 0x2b, + 0x02, 0xd0, 0x8b, 0x00, 0xeb, 0x58, 0x1a, 0x70, + 0x01, 0x31, 0x05, 0x29, 0xf6, 0xdb, 0x00, 0xab, + 0x19, 0x88, 0xc1, 0x84, 0x38, 0xbd, 0x00, 0x00, + 0xd4, 0x7a, 0x01, 0x00, 0x00, 0x10, 0x07, 0x00, + 0xff, 0xb5, 0x14, 0x4f, 0x3c, 0x00, 0x28, 0xc8, + 0x00, 0x00, 0x04, 0x1c, 0xbe, 0x79, 0x0d, 0x1c, + 0x81, 0xb0, 0x0f, 0x20, 0x00, 0xf0, 0xb9, 0xf8, + 0x2a, 0x1c, 0x10, 0x4d, 0x00, 0x90, 0x21, 0x1c, + 0x28, 0x1c, 0xf4, 0xf7, 0xde, 0xfc, 0x21, 0x1c, + 0xa8, 0x1d, 0x03, 0x9a, 0xf4, 0xf7, 0xd9, 0xfc, + 0x21, 0x1c, 0x28, 0x1c, 0x0c, 0x30, 0x04, 0x9a, + 0xf4, 0xf7, 0xd3, 0xfc, 0x21, 0x1c, 0x28, 0x1c, + 0x12, 0x30, 0x0a, 0x9a, 0xf4, 0xf7, 0x3c, 0x00, + 0x64, 0xc8, 0x00, 0x00, 0xcd, 0xfc, 0x07, 0xf0, + 0x9b, 0xf8, 0x00, 0x98, 0x00, 0xf0, 0x76, 0xf8, + 0xbe, 0x71, 0x05, 0xb0, 0xf0, 0xbd, 0x00, 0x00, + 0x20, 0x10, 0x07, 0x00, 0xe6, 0x7a, 0x01, 0x00, + 0x10, 0xb5, 0x00, 0x20, 0xf6, 0xf7, 0x26, 0xf8, + 0x07, 0x49, 0x88, 0x78, 0x00, 0x09, 0x00, 0x01, + 0x88, 0x70, 0x00, 0x24, 0x20, 0x1c, 0xf5, 0xf7, + 0x11, 0xfe, 0x01, 0x34, 0x24, 0x06, 0x24, 0x0e, + 0x3c, 0x00, 0xa0, 0xc8, 0x00, 0x00, 0x04, 0x2c, + 0xf7, 0xd3, 0x10, 0xbd, 0x00, 0x00, 0x00, 0x50, + 0x07, 0x00, 0x80, 0xb5, 0x02, 0xf0, 0xe3, 0xfb, + 0x03, 0x48, 0x81, 0x78, 0x0f, 0x22, 0x11, 0x43, + 0x81, 0x70, 0x80, 0xbd, 0x00, 0x00, 0x00, 0x50, + 0x07, 0x00, 0xf8, 0xb5, 0x0d, 0x1c, 0x04, 0x1c, + 0x05, 0x28, 0x01, 0xd3, 0xf4, 0xf7, 0x17, 0xfd, + 0xa6, 0x00, 0x00, 0x2d, 0x11, 0x4f, 0x07, 0xd1, + 0xb8, 0x59, 0x3c, 0x00, 0xdc, 0xc8, 0x00, 0x00, + 0x81, 0x68, 0x00, 0x29, 0x0e, 0xd1, 0x40, 0x78, + 0x00, 0x28, 0x0b, 0xd0, 0x02, 0xe0, 0xff, 0x35, + 0x2d, 0x06, 0x2d, 0x0e, 0x29, 0x1c, 0x20, 0x1c, + 0xfb, 0xf7, 0x88, 0xfc, 0x01, 0x1c, 0x20, 0x1c, + 0x04, 0xf0, 0x7e, 0xf9, 0x06, 0x49, 0x01, 0x20, + 0x30, 0x39, 0x08, 0x55, 0x04, 0x48, 0x3c, 0x38, + 0x80, 0x68, 0x00, 0x28, 0x02, 0xd1, 0xb9, 0x59, + 0x03, 0x20, 0x08, 0x70, 0x3c, 0x00, 0x18, 0xc9, + 0x00, 0x00, 0xf8, 0xbd, 0x00, 0x00, 0x10, 0x7b, + 0x01, 0x00, 0x80, 0xb5, 0x04, 0xf0, 0xcd, 0xf9, + 0x80, 0xbd, 0x10, 0xb5, 0x04, 0x1c, 0x05, 0x28, + 0x01, 0xd3, 0xf4, 0xf7, 0xe6, 0xfc, 0x20, 0x1c, + 0xf5, 0xf7, 0xc1, 0xfd, 0x00, 0x20, 0x05, 0x4a, + 0xa1, 0x00, 0x51, 0x58, 0x88, 0x60, 0x04, 0x49, + 0x88, 0x78, 0x01, 0x22, 0xa2, 0x40, 0x10, 0x43, + 0x88, 0x70, 0x10, 0xbd, 0x00, 0x00, 0x3c, 0x00, + 0x54, 0xc9, 0x00, 0x00, 0x10, 0x7b, 0x01, 0x00, + 0x00, 0x50, 0x07, 0x00, 0x02, 0x4a, 0x91, 0x78, + 0x08, 0x43, 0x90, 0x70, 0x70, 0x47, 0x00, 0x00, + 0x00, 0x50, 0x07, 0x00, 0xf8, 0xb5, 0x0c, 0x4f, + 0xbe, 0x79, 0x0f, 0x20, 0x00, 0xf0, 0x18, 0xf8, + 0x05, 0x1c, 0x00, 0x24, 0x20, 0x1c, 0xf4, 0xf7, + 0x0d, 0xf9, 0x08, 0x4a, 0xa1, 0x00, 0x51, 0x58, + 0x08, 0x71, 0x01, 0x34, 0x24, 0x06, 0x24, 0x0e, + 0x3c, 0x00, 0x90, 0xc9, 0x00, 0x00, 0x04, 0x2c, + 0xf3, 0xd3, 0x28, 0x1c, 0xff, 0xf7, 0xe1, 0xff, + 0xbe, 0x71, 0xf8, 0xbd, 0x00, 0x00, 0x20, 0x10, + 0x07, 0x00, 0x10, 0x7b, 0x01, 0x00, 0xb0, 0xb5, + 0x08, 0x49, 0x8d, 0x78, 0x8a, 0x78, 0x05, 0x40, + 0x82, 0x43, 0x8a, 0x70, 0x06, 0xf0, 0xf9, 0xf9, + 0x04, 0x1c, 0x0a, 0x34, 0x20, 0x1c, 0x06, 0xf0, + 0x34, 0xf9, 0x00, 0x28, 0xfa, 0xd0, 0x28, 0x1c, + 0xb0, 0xbd, 0x3c, 0x00, 0xcc, 0xc9, 0x00, 0x00, + 0x00, 0x50, 0x07, 0x00, 0x01, 0x49, 0x0a, 0x20, + 0x08, 0x81, 0x70, 0x47, 0x38, 0x7b, 0x01, 0x00, + 0xf8, 0xb5, 0x10, 0x48, 0x04, 0x26, 0x04, 0x1c, + 0xe0, 0x34, 0x05, 0x1c, 0x38, 0x3d, 0x00, 0x27, + 0x20, 0x1c, 0x1c, 0x30, 0xe4, 0x60, 0xa0, 0x61, + 0x27, 0x61, 0x0b, 0x48, 0xa6, 0x82, 0xe0, 0x61, + 0x27, 0x62, 0xa7, 0x62, 0x06, 0x20, 0xa0, 0x84, + 0x20, 0x1c, 0xfe, 0xf7, 0x3c, 0x00, 0x08, 0xca, + 0x00, 0x00, 0x87, 0xfc, 0x20, 0x1c, 0x0c, 0x30, + 0xf6, 0xf7, 0xb7, 0xf9, 0x05, 0x49, 0x38, 0x3c, + 0xac, 0x42, 0x08, 0x80, 0xe7, 0xd1, 0xf8, 0xbd, + 0x00, 0x00, 0xd4, 0xe4, 0x01, 0x00, 0x12, 0x61, + 0x01, 0x00, 0x48, 0x7b, 0x01, 0x00, 0xf7, 0xb5, + 0x05, 0x1c, 0x0c, 0x23, 0x0f, 0x1c, 0x12, 0x49, + 0x58, 0x43, 0x44, 0x18, 0x20, 0x88, 0x06, 0xf0, + 0xea, 0xf9, 0xa0, 0x78, 0x01, 0x28, 0x3c, 0x00, + 0x44, 0xca, 0x00, 0x00, 0x1a, 0xd1, 0x66, 0x68, + 0x02, 0x2f, 0x05, 0xd1, 0x5c, 0x20, 0x80, 0x5b, + 0x02, 0x99, 0x00, 0x09, 0x88, 0x42, 0x11, 0xd1, + 0x28, 0x1c, 0xfe, 0xf7, 0xfb, 0xff, 0x30, 0x1c, + 0xf9, 0xf7, 0xfa, 0xfd, 0x04, 0x20, 0xa0, 0x70, + 0x39, 0x1c, 0x28, 0x1c, 0xfb, 0xf7, 0xf4, 0xf8, + 0x03, 0x4a, 0xe8, 0x00, 0x3c, 0x32, 0x11, 0x58, + 0x01, 0x31, 0x11, 0x50, 0xfe, 0xbd, 0x00, 0x00, + 0x3c, 0x00, 0x80, 0xca, 0x00, 0x00, 0x60, 0x7b, + 0x01, 0x00, 0x01, 0x20, 0x06, 0x4a, 0x00, 0x21, + 0x0c, 0x23, 0x4b, 0x43, 0x9b, 0x18, 0x9b, 0x78, + 0x00, 0x2b, 0x00, 0xd0, 0x00, 0x20, 0x01, 0x31, + 0x04, 0x29, 0xf5, 0xdb, 0x70, 0x47, 0x60, 0x7b, + 0x01, 0x00, 0x70, 0xb5, 0x04, 0x1c, 0xff, 0xf7, + 0xea, 0xfc, 0x00, 0x28, 0x03, 0xd1, 0x20, 0x21, + 0x0c, 0x20, 0xf4, 0xf7, 0xf6, 0xfb, 0x26, 0x1c, + 0x60, 0x36, 0x3c, 0x00, 0xbc, 0xca, 0x00, 0x00, + 0x00, 0x21, 0xf1, 0x71, 0xe1, 0x64, 0x60, 0x6b, + 0x25, 0x1c, 0x40, 0x35, 0x00, 0x28, 0x31, 0xd0, + 0xff, 0xf7, 0x04, 0xf9, 0x01, 0x22, 0x12, 0x03, + 0x00, 0x28, 0x20, 0x69, 0x01, 0x88, 0x01, 0xd0, + 0x91, 0x43, 0x00, 0xe0, 0x11, 0x43, 0x01, 0x80, + 0x20, 0x69, 0x01, 0x22, 0x00, 0x88, 0xd2, 0x02, + 0x28, 0x83, 0x20, 0x1c, 0x58, 0x30, 0x01, 0x88, + 0x91, 0x43, 0x01, 0x80, 0x3c, 0x00, 0xf8, 0xca, + 0x00, 0x00, 0xa3, 0x6b, 0x52, 0x08, 0x00, 0x2b, + 0x10, 0xd0, 0x91, 0x43, 0x01, 0x80, 0x28, 0x8b, + 0x00, 0x07, 0x80, 0x0f, 0x01, 0x28, 0x15, 0xd0, + 0x2e, 0x20, 0x01, 0x5d, 0x20, 0x69, 0x04, 0x30, + 0xf8, 0xf7, 0x41, 0xfd, 0x61, 0x6a, 0xfe, 0xf7, + 0xa8, 0xf9, 0x04, 0xe0, 0x11, 0x43, 0x01, 0x80, + 0x20, 0x1c, 0xfb, 0xf7, 0xcc, 0xfb, 0x68, 0x83, + 0x04, 0xe0, 0x20, 0x69, 0x41, 0x80, 0x3c, 0x00, + 0x34, 0xcb, 0x00, 0x00, 0xa8, 0x8b, 0x21, 0x69, + 0xc8, 0x82, 0xe0, 0x68, 0xf6, 0xf7, 0x20, 0xf9, + 0x30, 0x80, 0x60, 0x6d, 0x00, 0x28, 0x04, 0xd0, + 0x00, 0x22, 0x03, 0x21, 0x70, 0x7a, 0xfe, 0xf7, + 0x0d, 0xff, 0x20, 0x1c, 0x00, 0xf0, 0xb6, 0xf9, + 0x70, 0x7a, 0x06, 0xf0, 0x45, 0xf8, 0x70, 0xbd, + 0xb0, 0xb5, 0x00, 0x24, 0x06, 0xf0, 0x22, 0xf9, + 0x09, 0x4a, 0x00, 0x21, 0x0c, 0x23, 0x4b, 0x43, + 0x3c, 0x00, 0x70, 0xcb, 0x00, 0x00, 0x9d, 0x18, + 0x6b, 0x68, 0x5b, 0x6c, 0xad, 0x78, 0xc3, 0x1a, + 0x01, 0x2d, 0x02, 0xd1, 0xa3, 0x42, 0x00, 0xdd, + 0x1c, 0x1c, 0x01, 0x31, 0x05, 0x29, 0xf0, 0xd3, + 0x20, 0x1c, 0xb0, 0xbd, 0x00, 0x00, 0x60, 0x7b, + 0x01, 0x00, 0xb0, 0xb5, 0x04, 0x1c, 0x06, 0xf0, + 0xa8, 0xfe, 0x0c, 0x20, 0x08, 0x49, 0x60, 0x43, + 0x45, 0x18, 0x28, 0x88, 0x06, 0xf0, 0x35, 0xf9, + 0x68, 0x68, 0x3c, 0x00, 0xac, 0xcb, 0x00, 0x00, + 0x00, 0x28, 0x06, 0xd0, 0x20, 0x30, 0x00, 0x7b, + 0x01, 0x28, 0x02, 0xd1, 0x20, 0x1c, 0xff, 0xf7, + 0xa3, 0xfa, 0xb0, 0xbd, 0x60, 0x7b, 0x01, 0x00, + 0xff, 0xb5, 0x85, 0xb0, 0x0f, 0xae, 0x60, 0xce, + 0x38, 0x20, 0x1e, 0x49, 0x70, 0x43, 0x17, 0x1c, + 0x44, 0x18, 0xff, 0xf7, 0x7f, 0xf8, 0x01, 0x22, + 0x12, 0x03, 0x00, 0x28, 0x03, 0xd0, 0x20, 0x88, + 0x90, 0x43, 0x20, 0x80, 0x3c, 0x00, 0xe8, 0xcb, + 0x00, 0x00, 0x02, 0xe0, 0x21, 0x88, 0x11, 0x43, + 0x21, 0x80, 0x11, 0x98, 0x39, 0x1c, 0xe0, 0x62, + 0x05, 0x98, 0xf8, 0xf7, 0xd0, 0xfc, 0x01, 0x1c, + 0x2b, 0x1c, 0x38, 0x1c, 0x06, 0x9a, 0xfe, 0xf7, + 0x20, 0xf9, 0x60, 0x80, 0x06, 0x22, 0x20, 0x1d, + 0x0f, 0x49, 0xf3, 0xf7, 0x72, 0xfc, 0x23, 0x1c, + 0x08, 0x98, 0x30, 0x33, 0x18, 0x70, 0x0e, 0x98, + 0x0c, 0x49, 0x58, 0x70, 0x65, 0x63, 0x3c, 0x00, + 0x24, 0xcc, 0x00, 0x00, 0x00, 0x20, 0x02, 0x90, + 0x01, 0x22, 0x04, 0x92, 0x09, 0x48, 0x03, 0x91, + 0x5a, 0x78, 0x01, 0x88, 0x01, 0x92, 0x00, 0x91, + 0x19, 0x78, 0x24, 0x3b, 0x30, 0x1c, 0x62, 0x6b, + 0xfe, 0xf7, 0xa8, 0xfe, 0x09, 0xb0, 0xf0, 0xbd, + 0xd4, 0xe4, 0x01, 0x00, 0x12, 0x61, 0x01, 0x00, + 0x5d, 0x4e, 0x00, 0x00, 0x48, 0x7b, 0x01, 0x00, + 0xff, 0xb5, 0x87, 0xb0, 0x10, 0x98, 0x12, 0xaf, + 0x3c, 0x00, 0x60, 0xcc, 0x00, 0x00, 0x8c, 0x46, + 0xa2, 0xcf, 0x4c, 0x23, 0x30, 0x4c, 0x6b, 0x43, + 0x1c, 0x19, 0x16, 0x1c, 0x15, 0x9a, 0x27, 0x85, + 0x27, 0x1c, 0x30, 0x37, 0x06, 0x97, 0x05, 0x97, + 0x00, 0x23, 0x3b, 0x73, 0x05, 0x9f, 0x78, 0x73, + 0x11, 0x98, 0x27, 0x1c, 0x60, 0x64, 0x61, 0x60, + 0x22, 0x60, 0x40, 0x37, 0x3e, 0x70, 0x61, 0x46, + 0x61, 0x87, 0x07, 0x98, 0x31, 0x1c, 0xf8, 0xf7, + 0x80, 0xfc, 0x3c, 0x00, 0x9c, 0xcc, 0x00, 0x00, + 0x05, 0x99, 0xc8, 0x73, 0x0a, 0x98, 0x78, 0x70, + 0x30, 0x1c, 0xfe, 0xf7, 0x73, 0xf8, 0x00, 0x28, + 0x01, 0xd0, 0x01, 0x20, 0x00, 0xe0, 0x00, 0x20, + 0x41, 0x00, 0x02, 0x20, 0x01, 0x40, 0x11, 0x9a, + 0x01, 0x20, 0x00, 0x2a, 0x00, 0xd1, 0x00, 0x20, + 0x08, 0x43, 0x38, 0x72, 0x20, 0x1c, 0x2e, 0x30, + 0x07, 0x99, 0xfd, 0xf7, 0xcf, 0xff, 0x28, 0x1c, + 0x04, 0xf0, 0xae, 0xf8, 0x3c, 0x00, 0xd8, 0xcc, + 0x00, 0x00, 0xfe, 0xf7, 0xfe, 0xff, 0x4c, 0x22, + 0x12, 0x4b, 0x6a, 0x43, 0xd2, 0x18, 0x01, 0x21, + 0x09, 0x03, 0x2a, 0x32, 0x00, 0x28, 0x04, 0xd0, + 0x10, 0x1c, 0x12, 0x88, 0x8a, 0x43, 0x02, 0x80, + 0x02, 0xe0, 0x10, 0x88, 0x08, 0x43, 0x10, 0x80, + 0x0b, 0x49, 0x00, 0x20, 0x03, 0x91, 0x06, 0x99, + 0x02, 0x90, 0x00, 0x22, 0x04, 0x92, 0x08, 0x48, + 0x0a, 0x7b, 0x41, 0x88, 0x23, 0x1c, 0x3c, 0x00, + 0x14, 0xcd, 0x00, 0x00, 0x01, 0x92, 0x00, 0x91, + 0x79, 0x78, 0x08, 0x33, 0x28, 0x1c, 0x62, 0x68, + 0xfe, 0xf7, 0x38, 0xfe, 0x0b, 0xb0, 0xf0, 0xbd, + 0x58, 0xe3, 0x01, 0x00, 0x75, 0x4f, 0x00, 0x00, + 0x3c, 0x7c, 0x01, 0x00, 0xb0, 0xb5, 0x0c, 0x1c, + 0x01, 0x28, 0x27, 0xd0, 0x80, 0x28, 0x30, 0xd1, + 0xe0, 0x6c, 0x00, 0x28, 0x08, 0xd0, 0x69, 0x20, + 0x00, 0x5d, 0x18, 0x49, 0xc0, 0x00, 0x40, 0x18, + 0x3c, 0x00, 0x50, 0xcd, 0x00, 0x00, 0x04, 0x30, + 0x01, 0x68, 0x01, 0x31, 0x01, 0x60, 0x20, 0x1c, + 0xff, 0xf7, 0xe9, 0xfb, 0x13, 0x4d, 0x50, 0x3d, + 0xe8, 0x68, 0x00, 0x28, 0x05, 0xd0, 0x2e, 0x20, + 0x00, 0x5d, 0xfe, 0xf7, 0x10, 0xf8, 0x02, 0xf0, + 0x42, 0xfe, 0x20, 0x1c, 0x61, 0x68, 0xf3, 0xf7, + 0x2f, 0xfb, 0x40, 0x34, 0x60, 0x78, 0x00, 0x28, + 0x02, 0xd1, 0x06, 0xf0, 0x12, 0xf8, 0xa8, 0x60, + 0xb0, 0xbd, 0x3c, 0x00, 0x8c, 0xcd, 0x00, 0x00, + 0x20, 0x06, 0x00, 0x0e, 0x81, 0x28, 0xfa, 0xd1, + 0x22, 0x0c, 0x20, 0x04, 0x00, 0x0e, 0x02, 0x21, + 0xfe, 0xf7, 0xe6, 0xfd, 0xb0, 0xbd, 0x0a, 0x21, + 0x0c, 0x20, 0xf4, 0xf7, 0x7d, 0xfa, 0xb0, 0xbd, + 0x9c, 0x7b, 0x01, 0x00, 0xf8, 0xb5, 0x18, 0x4e, + 0x18, 0x4f, 0x05, 0x1c, 0x34, 0x79, 0xb8, 0x79, + 0x00, 0x90, 0x20, 0x1c, 0xf5, 0xf7, 0x7c, 0xff, + 0x00, 0x28, 0x06, 0xd0, 0x3c, 0x00, 0xc8, 0xcd, + 0x00, 0x00, 0x12, 0x48, 0x38, 0x38, 0x40, 0x68, + 0x85, 0x42, 0x01, 0xd1, 0x00, 0x2d, 0x03, 0xd1, + 0x10, 0x21, 0x86, 0x20, 0xf4, 0xf7, 0x63, 0xfa, + 0x0d, 0x49, 0x00, 0x20, 0x38, 0x39, 0x48, 0x60, + 0x04, 0x21, 0x20, 0x1c, 0xff, 0xf7, 0x59, 0xfc, + 0x04, 0x21, 0x20, 0x1c, 0xf5, 0xf7, 0xeb, 0xfe, + 0x0c, 0x21, 0x06, 0x4a, 0x61, 0x43, 0x30, 0x3a, + 0x89, 0x18, 0x0c, 0x71, 0x04, 0x20, 0x3c, 0x00, + 0x04, 0xce, 0x00, 0x00, 0x30, 0x71, 0x00, 0x98, + 0xb8, 0x71, 0x0f, 0x20, 0xff, 0xf7, 0xa6, 0xfd, + 0xf8, 0xbd, 0x00, 0x00, 0xa4, 0x7a, 0x01, 0x00, + 0x20, 0x10, 0x07, 0x00, 0xf8, 0xb5, 0x04, 0x1c, + 0x0f, 0x20, 0xff, 0xf7, 0xc1, 0xfd, 0xf5, 0xf7, + 0x3b, 0xff, 0x01, 0x25, 0x00, 0x28, 0x00, 0xd0, + 0x00, 0x25, 0x16, 0x4e, 0xb0, 0x79, 0x16, 0x4f, + 0x00, 0x90, 0x38, 0x79, 0x04, 0x28, 0x01, 0xd1, + 0x3c, 0x00, 0x40, 0xce, 0x00, 0x00, 0x00, 0x2c, + 0x03, 0xd1, 0x11, 0x21, 0x86, 0x20, 0xf4, 0xf7, + 0x2c, 0xfa, 0x10, 0x48, 0x29, 0x06, 0x38, 0x38, + 0x44, 0x60, 0x09, 0x0e, 0x0c, 0x1c, 0x04, 0x20, + 0xff, 0xf7, 0x21, 0xfc, 0x03, 0x21, 0x20, 0x1c, + 0xff, 0xf7, 0x41, 0xfc, 0x21, 0x1c, 0x04, 0x20, + 0xf5, 0xf7, 0xaf, 0xfe, 0x0c, 0x21, 0x07, 0x4a, + 0x69, 0x43, 0x04, 0x20, 0x30, 0x3a, 0x89, 0x18, + 0x08, 0x71, 0x3c, 0x00, 0x7c, 0xce, 0x00, 0x00, + 0x3c, 0x71, 0x00, 0x98, 0xb0, 0x71, 0x20, 0x1c, + 0xff, 0xf7, 0x50, 0xfd, 0x04, 0x20, 0xf8, 0xbd, + 0x20, 0x10, 0x07, 0x00, 0xa4, 0x7a, 0x01, 0x00, + 0x0c, 0x23, 0x02, 0x49, 0x58, 0x43, 0x40, 0x18, + 0x80, 0x68, 0x70, 0x47, 0x74, 0x7a, 0x01, 0x00, + 0x60, 0x30, 0xc1, 0x79, 0x80, 0x79, 0x81, 0x42, + 0x01, 0xd9, 0x01, 0x20, 0x70, 0x47, 0x00, 0x20, + 0x70, 0x47, 0x00, 0x00, 0x3c, 0x00, 0xb8, 0xce, + 0x00, 0x00, 0x01, 0x48, 0x80, 0x68, 0x70, 0x47, + 0x00, 0x00, 0x4c, 0x7b, 0x01, 0x00, 0x38, 0xb5, + 0x69, 0x21, 0x09, 0x5c, 0x18, 0x23, 0x10, 0x4a, + 0x59, 0x43, 0x89, 0x18, 0x8a, 0x68, 0x01, 0x32, + 0x8a, 0x60, 0x4b, 0x69, 0xd2, 0x1a, 0xcb, 0x68, + 0x93, 0x42, 0x00, 0xd2, 0xca, 0x60, 0x00, 0x22, + 0x0b, 0x4c, 0x02, 0x60, 0x22, 0x1c, 0x20, 0x32, + 0x95, 0x79, 0x00, 0xab, 0x1d, 0x70, 0x3c, 0x00, + 0xf4, 0xce, 0x00, 0x00, 0xd2, 0x79, 0x5a, 0x70, + 0x0a, 0x68, 0x00, 0x2a, 0x01, 0xd1, 0x48, 0x60, + 0x00, 0xe0, 0x10, 0x60, 0x00, 0xab, 0x08, 0x60, + 0x18, 0x88, 0xe0, 0x84, 0x38, 0xbd, 0x00, 0x00, + 0xc4, 0x7b, 0x01, 0x00, 0x00, 0x10, 0x07, 0x00, + 0x18, 0x23, 0x0a, 0x49, 0x58, 0x43, 0x41, 0x18, + 0x08, 0x69, 0x01, 0x30, 0x08, 0x61, 0x48, 0x68, + 0x00, 0x28, 0x09, 0xd0, 0x48, 0x69, 0x01, 0x30, + 0x3c, 0x00, 0x30, 0xcf, 0x00, 0x00, 0x48, 0x61, + 0x48, 0x68, 0x02, 0x68, 0x4a, 0x60, 0x00, 0x2a, + 0x00, 0xd1, 0x0a, 0x60, 0x70, 0x47, 0x00, 0x20, + 0x70, 0x47, 0xc4, 0x7b, 0x01, 0x00, 0xf8, 0xb5, + 0x12, 0x4e, 0x10, 0x4d, 0x0f, 0x4c, 0x0a, 0x27, + 0x21, 0x1c, 0x00, 0x20, 0xe0, 0x60, 0x2a, 0x31, + 0x22, 0x1c, 0x18, 0x32, 0xa1, 0x60, 0x62, 0x61, + 0x27, 0x82, 0x0c, 0x4a, 0xe0, 0x61, 0xa2, 0x61, + 0x60, 0x62, 0x3c, 0x00, 0x6c, 0xcf, 0x00, 0x00, + 0x06, 0x20, 0x20, 0x84, 0x08, 0x1c, 0xfe, 0xf7, + 0xd7, 0xf9, 0x20, 0x1c, 0x08, 0x30, 0xf5, 0xf7, + 0x01, 0xff, 0x4c, 0x3c, 0xac, 0x42, 0x70, 0x80, + 0xe5, 0xd1, 0xff, 0x20, 0x30, 0x70, 0xf8, 0xbd, + 0x88, 0xe4, 0x01, 0x00, 0x0c, 0xe3, 0x01, 0x00, + 0x3c, 0x7c, 0x01, 0x00, 0x12, 0x61, 0x01, 0x00, + 0xf8, 0xb5, 0x04, 0x1c, 0x0b, 0x48, 0x0e, 0x1c, + 0x17, 0x1c, 0x44, 0x70, 0x3c, 0x00, 0xa8, 0xcf, + 0x00, 0x00, 0x05, 0xf0, 0x00, 0xff, 0x05, 0x1c, + 0x39, 0x1c, 0x30, 0x1c, 0xfd, 0xf7, 0xab, 0xff, + 0x0c, 0x21, 0x05, 0x4a, 0x28, 0x18, 0x0a, 0x30, + 0x61, 0x43, 0x08, 0x32, 0x50, 0x50, 0x03, 0x48, + 0x89, 0x18, 0x00, 0x68, 0x88, 0x60, 0xf8, 0xbd, + 0x00, 0x00, 0x6c, 0x7a, 0x01, 0x00, 0x78, 0x6e, + 0x01, 0x00, 0x70, 0xb5, 0x0b, 0x4e, 0x05, 0x1c, + 0x70, 0x78, 0xff, 0x28, 0x0f, 0xd0, 0x3c, 0x00, + 0xe4, 0xcf, 0x00, 0x00, 0x0c, 0x23, 0x08, 0x4c, + 0x58, 0x43, 0x08, 0x34, 0x20, 0x58, 0x05, 0xf0, + 0x1d, 0xfe, 0x00, 0x28, 0x06, 0xd1, 0x70, 0x78, + 0x0c, 0x23, 0x58, 0x43, 0x00, 0x19, 0x81, 0x68, + 0x29, 0x43, 0x81, 0x60, 0x70, 0xbd, 0x00, 0x00, + 0x6c, 0x7a, 0x01, 0x00, 0x80, 0xb5, 0x30, 0x21, + 0x01, 0x48, 0xf3, 0xf7, 0x43, 0xfa, 0x80, 0xbd, + 0xec, 0xe5, 0x01, 0x00, 0x10, 0xb5, 0x05, 0xf0, + 0x3c, 0x00, 0x20, 0xd0, 0x00, 0x00, 0xc5, 0xfe, + 0x0a, 0x49, 0x44, 0x18, 0x0c, 0xe0, 0x20, 0x1c, + 0x05, 0xf0, 0xf7, 0xfd, 0x00, 0x28, 0x07, 0xd0, + 0xf5, 0xf7, 0x51, 0xfe, 0x00, 0x28, 0x03, 0xd0, + 0x13, 0x21, 0x86, 0x20, 0xf4, 0xf7, 0x31, 0xf9, + 0xf5, 0xf7, 0x49, 0xfe, 0x00, 0x28, 0xee, 0xd1, + 0x10, 0xbd, 0xb0, 0x36, 0x00, 0x00, 0xff, 0xb5, + 0x8b, 0xb0, 0x19, 0x9b, 0x0d, 0x1c, 0x04, 0x1c, + 0x1a, 0x20, 0x3c, 0x00, 0x5c, 0xd0, 0x00, 0x00, + 0x00, 0x2b, 0x16, 0x99, 0x00, 0xd1, 0x18, 0x20, + 0x01, 0x90, 0x14, 0x98, 0x00, 0x28, 0x27, 0xd0, + 0xff, 0x20, 0x19, 0x9b, 0x01, 0x30, 0x00, 0x2b, + 0x01, 0xd1, 0x18, 0x23, 0x00, 0xe0, 0x1a, 0x23, + 0x04, 0x33, 0x82, 0x42, 0x04, 0xd3, 0xd0, 0x1a, + 0x40, 0x08, 0x40, 0x00, 0x00, 0x04, 0x00, 0x0c, + 0x0d, 0x90, 0x6a, 0x48, 0x00, 0x88, 0xc2, 0x1a, + 0x12, 0x04, 0x12, 0x0c, 0x3c, 0x00, 0x98, 0xd0, + 0x00, 0x00, 0x04, 0x92, 0x00, 0x29, 0x08, 0xd0, + 0x89, 0x79, 0x66, 0x4a, 0x49, 0x00, 0x51, 0x5a, + 0x04, 0x9a, 0x51, 0x1a, 0x0a, 0x04, 0x12, 0x0c, + 0x04, 0x92, 0x04, 0x9a, 0x82, 0x42, 0x05, 0xd9, + 0x00, 0x20, 0x04, 0x90, 0x02, 0xe0, 0x60, 0x48, + 0x04, 0x90, 0x0d, 0x90, 0x01, 0x98, 0x01, 0x04, + 0x09, 0x0c, 0x0a, 0x91, 0x00, 0x20, 0xf4, 0xf7, + 0x84, 0xfa, 0x00, 0x90, 0x00, 0x68, 0x3c, 0x00, + 0xd4, 0xd0, 0x00, 0x00, 0x00, 0x26, 0x06, 0x90, + 0x20, 0x60, 0x00, 0x20, 0x05, 0x90, 0x0e, 0x98, + 0x00, 0x24, 0x00, 0x05, 0x00, 0x0c, 0x09, 0x90, + 0x1a, 0x98, 0x0d, 0x9f, 0x40, 0x07, 0x40, 0x0f, + 0x08, 0x90, 0x07, 0x94, 0x03, 0x95, 0x00, 0x2d, + 0x0d, 0xd0, 0x28, 0x89, 0xb8, 0x42, 0x04, 0xd8, + 0x36, 0x18, 0x3f, 0x1a, 0x07, 0xd0, 0xed, 0x68, + 0xf5, 0xe7, 0x39, 0x04, 0x09, 0x0c, 0x28, 0x1c, + 0x3c, 0x00, 0x10, 0xd1, 0x00, 0x00, 0xf4, 0xf7, + 0x38, 0xfb, 0xef, 0xe7, 0x00, 0x2e, 0x02, 0xd1, + 0x07, 0x99, 0x00, 0x29, 0x71, 0xd1, 0x27, 0x1c, + 0x6c, 0x20, 0xf4, 0xf7, 0x88, 0xfb, 0x07, 0x99, + 0x04, 0x1c, 0x00, 0x29, 0x20, 0xd1, 0x07, 0x94, + 0x00, 0x20, 0xa0, 0x61, 0x18, 0x98, 0x27, 0x1c, + 0x60, 0x60, 0x17, 0x98, 0x24, 0x37, 0xa0, 0x60, + 0x06, 0x98, 0x20, 0x61, 0x15, 0x98, 0x0f, 0xc8, + 0x0f, 0xc7, 0x3c, 0x00, 0x4c, 0xd1, 0x00, 0x00, + 0x14, 0x98, 0x5c, 0x21, 0x60, 0x63, 0x09, 0x98, + 0x08, 0x53, 0x19, 0x98, 0x69, 0x21, 0xe0, 0x63, + 0x1b, 0x98, 0x08, 0x55, 0x1c, 0x98, 0x60, 0x65, + 0x19, 0x98, 0x00, 0x28, 0x23, 0xd0, 0x08, 0x98, + 0x06, 0x99, 0x08, 0x83, 0x1f, 0xe0, 0x6c, 0x22, + 0x20, 0x1c, 0x07, 0x99, 0xf3, 0xf7, 0x1a, 0xfa, + 0x3c, 0x60, 0x01, 0x98, 0x62, 0x21, 0x30, 0x18, + 0xc8, 0x53, 0x15, 0x98, 0x3c, 0x00, 0x88, 0xd1, + 0x00, 0x00, 0x40, 0x21, 0x80, 0x7a, 0xc8, 0x55, + 0x00, 0x20, 0xb8, 0x63, 0x06, 0x98, 0x0a, 0x99, + 0xf4, 0xf7, 0x1f, 0xfa, 0xf8, 0x60, 0x02, 0x99, + 0xf4, 0xf7, 0x3b, 0xf9, 0x20, 0x1c, 0x40, 0x30, + 0x81, 0x8b, 0x05, 0x9a, 0x12, 0x07, 0x12, 0x0f, + 0x11, 0x43, 0x81, 0x83, 0x03, 0x98, 0x5e, 0x21, + 0x02, 0x90, 0x01, 0x98, 0x22, 0x4a, 0x30, 0x18, + 0x08, 0x53, 0x12, 0x68, 0x01, 0x21, 0x3c, 0x00, + 0xc4, 0xd1, 0x00, 0x00, 0x08, 0x1c, 0x00, 0x2a, + 0x00, 0xd0, 0x1b, 0x98, 0x00, 0x06, 0x04, 0x9a, + 0x00, 0x0e, 0x96, 0x42, 0x03, 0xd9, 0x2c, 0x22, + 0x11, 0x55, 0x1b, 0x49, 0x04, 0xe0, 0x15, 0x99, + 0x2c, 0x22, 0x09, 0x7a, 0x11, 0x55, 0x19, 0x49, + 0x08, 0x5c, 0x66, 0x21, 0x08, 0x55, 0x1c, 0x98, + 0x00, 0x28, 0x01, 0xd0, 0x1f, 0x20, 0x08, 0x55, + 0x00, 0x2d, 0x03, 0xd0, 0xe8, 0x68, 0x03, 0x90, + 0x3c, 0x00, 0x00, 0xd2, 0x00, 0x00, 0x00, 0x20, + 0x00, 0xe0, 0x09, 0xe0, 0xe8, 0x60, 0x05, 0x98, + 0x00, 0x26, 0x01, 0x30, 0x00, 0x04, 0x00, 0x0c, + 0x0d, 0x9f, 0x05, 0x90, 0x03, 0x9d, 0x6d, 0xe7, + 0x00, 0x98, 0xe0, 0x60, 0x02, 0x99, 0xf4, 0xf7, + 0xfa, 0xf8, 0x00, 0x20, 0x20, 0x60, 0x01, 0x21, + 0xa1, 0x63, 0x60, 0x34, 0x60, 0x80, 0x07, 0x98, + 0x0f, 0xb0, 0xf0, 0xbd, 0x00, 0x00, 0x06, 0x61, + 0x01, 0x00, 0x3c, 0x00, 0x3c, 0xd2, 0x00, 0x00, + 0x5c, 0x43, 0x01, 0x00, 0x38, 0x09, 0x00, 0x00, + 0x18, 0x67, 0x01, 0x00, 0x0e, 0x61, 0x01, 0x00, + 0x0a, 0x61, 0x01, 0x00, 0x01, 0x48, 0x00, 0x68, + 0x70, 0x47, 0x00, 0x00, 0xc4, 0x6a, 0x01, 0x00, + 0x02, 0x49, 0x09, 0x1d, 0x03, 0xc9, 0x40, 0x18, + 0x70, 0x47, 0x00, 0x00, 0xc4, 0x69, 0x01, 0x00, + 0x01, 0x48, 0x00, 0x69, 0x70, 0x47, 0x00, 0x00, + 0xc4, 0x69, 0x01, 0x00, 0x3c, 0x00, 0x78, 0xd2, + 0x00, 0x00, 0x01, 0x48, 0x40, 0x69, 0x70, 0x47, + 0x00, 0x00, 0xc4, 0x69, 0x01, 0x00, 0x01, 0x48, + 0x80, 0x69, 0x70, 0x47, 0x00, 0x00, 0xc4, 0x69, + 0x01, 0x00, 0x70, 0xb5, 0x0d, 0x4e, 0x00, 0x20, + 0x35, 0x1c, 0x40, 0x35, 0xf0, 0x63, 0x0d, 0xe0, + 0xa0, 0x68, 0xf4, 0xf7, 0x7a, 0xf9, 0xb3, 0x6d, + 0x00, 0x2b, 0x04, 0xd0, 0x00, 0x22, 0x01, 0x20, + 0x61, 0x6b, 0xf3, 0xf7, 0x95, 0xf8, 0x3c, 0x00, + 0xb4, 0xd2, 0x00, 0x00, 0x20, 0x1c, 0xf4, 0xf7, + 0x9d, 0xfa, 0x28, 0x1c, 0xfa, 0xf7, 0x42, 0xfd, + 0x04, 0x1c, 0xec, 0xd1, 0x70, 0xbd, 0x00, 0x00, + 0xc4, 0x69, 0x01, 0x00, 0xf8, 0xb5, 0x1a, 0x4f, + 0x00, 0x26, 0xf8, 0x6b, 0x00, 0x28, 0x2c, 0xd0, + 0x38, 0x1c, 0x40, 0x30, 0x00, 0x90, 0x1d, 0xe0, + 0x16, 0x48, 0xb9, 0x6b, 0x02, 0xf0, 0x5c, 0xf8, + 0x00, 0x22, 0x20, 0x1c, 0x14, 0x49, 0x03, 0xf0, + 0x3c, 0x00, 0xf0, 0xd2, 0x00, 0x00, 0x7b, 0xff, + 0x05, 0x1c, 0x04, 0xd1, 0x38, 0x6a, 0x01, 0x30, + 0x38, 0x62, 0x01, 0x36, 0x0d, 0xe0, 0xa0, 0x68, + 0xf4, 0xf7, 0x49, 0xf9, 0xbb, 0x6d, 0x00, 0x2b, + 0x04, 0xd0, 0x00, 0x22, 0x28, 0x1c, 0x61, 0x6b, + 0xf3, 0xf7, 0x64, 0xf8, 0x20, 0x1c, 0xf4, 0xf7, + 0x6c, 0xfa, 0x00, 0x98, 0xfa, 0xf7, 0x11, 0xfd, + 0x04, 0x1c, 0xdc, 0xd1, 0x07, 0x48, 0xb9, 0x6b, + 0x02, 0xf0, 0x3c, 0x00, 0x2c, 0xd3, 0x00, 0x00, + 0x25, 0xf8, 0x00, 0x20, 0xf8, 0x63, 0x30, 0x1c, + 0xf8, 0xbd, 0x00, 0x00, 0xc4, 0x69, 0x01, 0x00, + 0x34, 0x63, 0x01, 0x00, 0x11, 0x30, 0x00, 0x00, + 0xc4, 0x60, 0x01, 0x00, 0x01, 0x49, 0x01, 0x20, + 0xc8, 0x63, 0x70, 0x47, 0xc4, 0x69, 0x01, 0x00, + 0x80, 0xb5, 0x00, 0x20, 0x05, 0x4a, 0x00, 0x21, + 0x1c, 0x23, 0x43, 0x43, 0x9b, 0x18, 0x01, 0x30, + 0x04, 0x28, 0xd9, 0x66, 0x3c, 0x00, 0x68, 0xd3, + 0x00, 0x00, 0xf8, 0xdb, 0xfc, 0xf7, 0xfd, 0xfc, + 0x80, 0xbd, 0xc4, 0x69, 0x01, 0x00, 0x01, 0x49, + 0xc8, 0x64, 0x70, 0x47, 0x00, 0x00, 0xc4, 0x69, + 0x01, 0x00, 0x01, 0x49, 0x88, 0x64, 0x70, 0x47, + 0x00, 0x00, 0xc4, 0x69, 0x01, 0x00, 0xb0, 0xb5, + 0x04, 0x1c, 0x0d, 0x1c, 0x21, 0x1c, 0x02, 0x8e, + 0x80, 0x6a, 0x40, 0x31, 0xf3, 0xf7, 0x2f, 0xf8, + 0x00, 0x28, 0x16, 0xd1, 0x02, 0x21, 0x3c, 0x00, + 0xa4, 0xd3, 0x00, 0x00, 0x20, 0x1c, 0xf4, 0xf7, + 0x6f, 0xfa, 0xe2, 0x69, 0xc0, 0x00, 0x10, 0x18, + 0x82, 0x8b, 0xab, 0x88, 0x9a, 0x42, 0x04, 0xd1, + 0x82, 0x69, 0x2b, 0x68, 0x9a, 0x42, 0x08, 0xd2, + 0x01, 0xe0, 0x9a, 0x42, 0x05, 0xd2, 0x00, 0x21, + 0x18, 0x30, 0x0c, 0xcd, 0x0c, 0xc0, 0x00, 0xe0, + 0x01, 0x21, 0x08, 0x1c, 0xb0, 0xbd, 0x00, 0x00, + 0xf8, 0xb5, 0x06, 0x1c, 0x00, 0x27, 0x44, 0x68, + 0x3c, 0x00, 0xe0, 0xd3, 0x00, 0x00, 0x0f, 0xe0, + 0x09, 0x49, 0x48, 0x6a, 0x01, 0x30, 0x48, 0x62, + 0xa0, 0x69, 0x00, 0x28, 0x02, 0xd0, 0xf4, 0xf7, + 0x00, 0xfa, 0xa7, 0x61, 0x26, 0x62, 0x25, 0x68, + 0x20, 0x1c, 0xff, 0xf7, 0x52, 0xfb, 0x2c, 0x1c, + 0x00, 0x2c, 0xed, 0xd1, 0xf8, 0xbd, 0xc4, 0x69, + 0x01, 0x00, 0x03, 0x30, 0x07, 0x4a, 0x81, 0x08, + 0x13, 0x68, 0x50, 0x68, 0x1b, 0x68, 0x89, 0x00, + 0x09, 0x18, 0x3c, 0x00, 0x1c, 0xd4, 0x00, 0x00, + 0x8b, 0x42, 0x01, 0xd3, 0x51, 0x60, 0x00, 0xe0, + 0x00, 0x20, 0x90, 0x60, 0x70, 0x47, 0x00, 0x00, + 0x8c, 0x6e, 0x01, 0x00, 0x70, 0xb5, 0x12, 0x4e, + 0x80, 0x38, 0xc5, 0x00, 0x70, 0x59, 0x0c, 0x1c, + 0x00, 0x28, 0x04, 0xd1, 0x01, 0x21, 0x0d, 0x20, + 0xf3, 0xf7, 0x2e, 0xff, 0x0d, 0xe0, 0x20, 0x69, + 0x00, 0x28, 0x05, 0xd1, 0xa8, 0x19, 0x81, 0x88, + 0xe0, 0x68, 0x01, 0xf0, 0x3c, 0x00, 0x58, 0xd4, + 0x00, 0x00, 0x47, 0xfa, 0x20, 0x61, 0x71, 0x59, + 0x20, 0x1c, 0xf2, 0xf7, 0xbb, 0xff, 0x04, 0x1c, + 0x00, 0x2c, 0x07, 0xd0, 0xe0, 0x68, 0x00, 0x28, + 0x01, 0xd0, 0xf4, 0xf7, 0x92, 0xf8, 0x20, 0x1c, + 0xf4, 0xf7, 0xbd, 0xf9, 0x70, 0xbd, 0x54, 0x42, + 0x01, 0x00, 0x70, 0xb5, 0x04, 0x1c, 0x0d, 0x1c, + 0x0e, 0x49, 0x06, 0x22, 0xf3, 0xf7, 0x35, 0xf8, + 0x00, 0x26, 0xe6, 0x61, 0x66, 0x62, 0x3c, 0x00, + 0x94, 0xd4, 0x00, 0x00, 0x07, 0x20, 0x30, 0x21, + 0x08, 0x55, 0xe6, 0x63, 0x28, 0x1c, 0xf8, 0xf7, + 0x6b, 0xf8, 0xa0, 0x76, 0x20, 0x1c, 0x14, 0x30, + 0x06, 0x22, 0x29, 0x1c, 0xf3, 0xf7, 0x24, 0xf8, + 0x06, 0x22, 0x29, 0x1c, 0xa0, 0x18, 0xf3, 0xf7, + 0x1f, 0xf8, 0x26, 0x61, 0x70, 0xbd, 0x00, 0x00, + 0x12, 0x61, 0x01, 0x00, 0x80, 0xb5, 0xfd, 0xf7, + 0x85, 0xfe, 0x80, 0xbd, 0x01, 0x49, 0x48, 0x60, + 0x3c, 0x00, 0xd0, 0xd4, 0x00, 0x00, 0x70, 0x47, + 0x00, 0x00, 0xe4, 0x65, 0x01, 0x00, 0x02, 0x49, + 0x80, 0xb5, 0x49, 0x68, 0xf2, 0xf7, 0x7c, 0xff, + 0x80, 0xbd, 0xe4, 0x65, 0x01, 0x00, 0x80, 0xb5, + 0xf4, 0xf7, 0xe5, 0xf9, 0x07, 0x49, 0x07, 0x48, + 0x0e, 0xc9, 0x0e, 0xc0, 0x18, 0x38, 0x00, 0x68, + 0x00, 0x28, 0x02, 0xd0, 0x02, 0xf0, 0xb7, 0xfa, + 0x80, 0xbd, 0x02, 0xf0, 0x9e, 0xfa, 0x80, 0xbd, + 0x00, 0x00, 0x3c, 0x00, 0x0c, 0xd5, 0x00, 0x00, + 0xb0, 0x58, 0x01, 0x00, 0x90, 0x73, 0x01, 0x00, + 0x05, 0x49, 0x80, 0xb5, 0x89, 0x68, 0x00, 0x20, + 0x00, 0x29, 0x00, 0xd1, 0x03, 0x20, 0x00, 0x06, + 0x00, 0x0e, 0xfa, 0xf7, 0xe3, 0xfb, 0x80, 0xbd, + 0x60, 0x6c, 0x01, 0x00, 0x80, 0xb5, 0x03, 0x48, + 0x06, 0x22, 0x03, 0x49, 0xf2, 0xf7, 0xde, 0xff, + 0x80, 0xbd, 0x00, 0x00, 0x40, 0x80, 0x07, 0x00, + 0x12, 0x61, 0x01, 0x00, 0x3c, 0x00, 0x48, 0xd5, + 0x00, 0x00, 0xb0, 0xb5, 0x04, 0x1c, 0x0c, 0x4d, + 0x0b, 0x1c, 0x21, 0x1c, 0x00, 0x20, 0x0c, 0x3d, + 0x00, 0x29, 0x09, 0x4c, 0x05, 0xd0, 0x28, 0x78, + 0x21, 0x1c, 0x10, 0x80, 0x02, 0x1c, 0x18, 0x1c, + 0x07, 0xe0, 0x11, 0x88, 0x0e, 0x29, 0x07, 0xd8, + 0x0a, 0x06, 0x12, 0x0e, 0x19, 0x1c, 0x20, 0x1c, + 0x2a, 0x70, 0xf2, 0xf7, 0xbe, 0xff, 0x01, 0x20, + 0xb0, 0xbd, 0xb0, 0x69, 0x01, 0x00, 0x3c, 0x00, + 0x84, 0xd5, 0x00, 0x00, 0x10, 0xb5, 0x00, 0x20, + 0x0a, 0x4a, 0x01, 0x21, 0x11, 0x60, 0x0a, 0x4c, + 0x0a, 0xe0, 0x02, 0x1c, 0x01, 0x6a, 0x50, 0x32, + 0x91, 0x42, 0x05, 0xd0, 0x61, 0x78, 0x3c, 0x23, + 0x59, 0x43, 0x09, 0x19, 0x04, 0x31, 0x01, 0x62, + 0x04, 0xf0, 0xba, 0xfb, 0x00, 0x28, 0xf0, 0xd1, + 0x10, 0xbd, 0x00, 0x00, 0xdc, 0x62, 0x01, 0x00, + 0x68, 0x61, 0x01, 0x00, 0x04, 0x48, 0x80, 0xb5, + 0x3c, 0x00, 0xc0, 0xd5, 0x00, 0x00, 0x00, 0x68, + 0x00, 0x28, 0x03, 0xd0, 0x01, 0x1c, 0x10, 0x20, + 0x04, 0xf0, 0xc7, 0xfe, 0x80, 0xbd, 0x28, 0x61, + 0x01, 0x00, 0x03, 0x22, 0x11, 0x1f, 0x80, 0xb5, + 0x00, 0x20, 0xfb, 0xf7, 0x76, 0xf9, 0x80, 0xbd, + 0x00, 0x00, 0x80, 0xb5, 0x0b, 0xf0, 0xb9, 0xfa, + 0x80, 0xbd, 0xff, 0xb5, 0x83, 0xb0, 0x16, 0x1c, + 0x00, 0x21, 0x01, 0x91, 0x1f, 0x1c, 0x08, 0x21, + 0x02, 0xaa, 0x3c, 0x00, 0xfc, 0xd5, 0x00, 0x00, + 0xfa, 0xf7, 0x0e, 0xff, 0x04, 0x1c, 0x2a, 0xd1, + 0x02, 0x98, 0x41, 0x68, 0x49, 0x00, 0x01, 0xd4, + 0x09, 0x24, 0x24, 0xe0, 0xfa, 0xf7, 0x52, 0xff, + 0x38, 0x60, 0x02, 0x98, 0x41, 0x68, 0x49, 0x02, + 0xcd, 0x0f, 0x29, 0x1c, 0xfa, 0xf7, 0x44, 0xff, + 0x01, 0x1c, 0x30, 0x60, 0x38, 0x68, 0x00, 0x06, + 0x00, 0x0e, 0x00, 0xf0, 0x1b, 0xf8, 0x00, 0x28, + 0x01, 0xd1, 0x0a, 0x24, 0x3c, 0x00, 0x38, 0xd6, + 0x00, 0x00, 0x0f, 0xe0, 0x31, 0x68, 0x02, 0x98, + 0x2b, 0x1c, 0x01, 0xaa, 0xfa, 0xf7, 0xd7, 0xff, + 0x00, 0x28, 0x06, 0xd0, 0x01, 0x98, 0x00, 0x28, + 0x04, 0xd0, 0x04, 0x99, 0x09, 0x68, 0x81, 0x42, + 0x00, 0xd2, 0x03, 0x24, 0x01, 0x98, 0x04, 0x99, + 0x08, 0x60, 0x07, 0xb0, 0x20, 0x1c, 0xf0, 0xbd, + 0x00, 0x00, 0x70, 0xb5, 0x05, 0x1c, 0x0e, 0x1c, + 0x01, 0x24, 0x00, 0xf0, 0x84, 0xff, 0x3c, 0x00, + 0x74, 0xd6, 0x00, 0x00, 0x00, 0x28, 0x08, 0xd0, + 0x03, 0x2d, 0x01, 0xd0, 0x04, 0x2d, 0x04, 0xd1, + 0x03, 0x20, 0xc0, 0x03, 0x86, 0x42, 0x00, 0xd3, + 0x00, 0x24, 0x20, 0x1c, 0x70, 0xbd, 0x00, 0x00, + 0x7c, 0xb5, 0x15, 0x1c, 0x06, 0x1c, 0x0c, 0x1c, + 0x29, 0x1c, 0x6a, 0x46, 0x01, 0xab, 0xff, 0xf7, + 0xa5, 0xff, 0x00, 0x28, 0x02, 0xd1, 0x00, 0x2c, + 0x01, 0xd1, 0x03, 0x20, 0x7c, 0xbd, 0x17, 0x48, + 0x3c, 0x00, 0xb0, 0xd6, 0x00, 0x00, 0x00, 0xab, + 0x06, 0x60, 0x18, 0x79, 0x07, 0x28, 0x21, 0xd2, + 0x02, 0xa3, 0x1b, 0x5c, 0x5b, 0x00, 0x9f, 0x44, + 0x00, 0x00, 0x1d, 0x04, 0x04, 0x06, 0x10, 0x17, + 0x13, 0x00, 0x04, 0x20, 0xed, 0xe7, 0x2a, 0x1c, + 0x21, 0x1c, 0x01, 0x20, 0x00, 0x9b, 0xf2, 0xf7, + 0x81, 0xfe, 0x00, 0x28, 0x12, 0xd1, 0x06, 0x20, + 0xe3, 0xe7, 0x2a, 0x68, 0x00, 0x99, 0x05, 0xe0, + 0x00, 0x98, 0x3c, 0x00, 0xec, 0xd6, 0x00, 0x00, + 0x42, 0x78, 0x81, 0x1c, 0x01, 0xe0, 0x2a, 0x68, + 0x69, 0x46, 0x20, 0x1c, 0xf2, 0xf7, 0xfe, 0xfe, + 0x03, 0xe0, 0x04, 0x21, 0x87, 0x20, 0xf3, 0xf7, + 0xcf, 0xfd, 0x00, 0x20, 0xd0, 0xe7, 0x00, 0x00, + 0xf8, 0x6b, 0x01, 0x00, 0xf7, 0xb5, 0x86, 0xb0, + 0x0e, 0x1c, 0x08, 0x21, 0x05, 0xaa, 0x06, 0x98, + 0xfa, 0xf7, 0x7e, 0xfe, 0x04, 0x1c, 0x45, 0xd1, + 0x05, 0x98, 0x41, 0x68, 0x3c, 0x00, 0x28, 0xd7, + 0x00, 0x00, 0x02, 0x90, 0x49, 0x02, 0xc9, 0x0f, + 0x00, 0x25, 0x04, 0x95, 0x03, 0x91, 0x08, 0x9f, + 0xfa, 0xf7, 0xd5, 0xfe, 0x01, 0x90, 0x02, 0xa9, + 0x03, 0xc9, 0xfa, 0xf7, 0xc6, 0xfe, 0x01, 0x99, + 0x05, 0x29, 0x14, 0xd2, 0x02, 0xa3, 0x5b, 0x5c, + 0x5b, 0x00, 0x9f, 0x44, 0x00, 0x00, 0x0e, 0x03, + 0x06, 0x0c, 0x03, 0x00, 0x87, 0x42, 0x0e, 0xd8, + 0x07, 0xe0, 0x87, 0x42, 0x0b, 0xd8, 0x3c, 0x00, + 0x64, 0xd7, 0x00, 0x00, 0x01, 0x25, 0xc0, 0x1b, + 0x04, 0x90, 0x07, 0xe0, 0x87, 0x42, 0x05, 0xd1, + 0x01, 0x25, 0x03, 0xe0, 0x05, 0x21, 0x87, 0x20, + 0xf3, 0xf7, 0x94, 0xfd, 0x00, 0x2d, 0x01, 0xd1, + 0x03, 0x24, 0x15, 0xe0, 0x05, 0x98, 0x41, 0x68, + 0x00, 0x29, 0x69, 0xda, 0x3a, 0x4a, 0x06, 0x99, + 0x11, 0x60, 0xfa, 0xf7, 0x91, 0xfe, 0x07, 0x1c, + 0x05, 0x98, 0x03, 0x99, 0xfa, 0xf7, 0x86, 0xfe, + 0x3c, 0x00, 0xa0, 0xd7, 0x00, 0x00, 0x05, 0x1c, + 0x01, 0x1c, 0x38, 0x1c, 0xff, 0xf7, 0x5f, 0xff, + 0x00, 0x28, 0x01, 0xd1, 0x0a, 0x24, 0x5e, 0xe0, + 0x07, 0x2f, 0x57, 0xd2, 0x02, 0xa3, 0xdb, 0x5d, + 0x5b, 0x00, 0x9f, 0x44, 0x00, 0x00, 0x53, 0x04, + 0x04, 0x06, 0x2e, 0x50, 0x48, 0x00, 0x04, 0x24, + 0x51, 0xe0, 0x04, 0x98, 0x00, 0x28, 0x01, 0xd1, + 0x00, 0x27, 0x14, 0xe0, 0x08, 0x99, 0x08, 0x18, + 0x00, 0x04, 0x3c, 0x00, 0xdc, 0xd7, 0x00, 0x00, + 0x00, 0x0c, 0xf4, 0xf7, 0x2b, 0xf8, 0x07, 0x1c, + 0x31, 0x1c, 0x08, 0x9a, 0xf2, 0xf7, 0x86, 0xfe, + 0x08, 0x98, 0x04, 0x99, 0x38, 0x18, 0xf2, 0xf7, + 0x2f, 0xfe, 0x08, 0x98, 0x04, 0x99, 0x3e, 0x1c, + 0x40, 0x18, 0x08, 0x90, 0x31, 0x1c, 0x00, 0x20, + 0x08, 0xaa, 0xf2, 0xf7, 0xec, 0xfd, 0x00, 0x28, + 0x00, 0xd1, 0x05, 0x24, 0x00, 0x2f, 0x2d, 0xd0, + 0x38, 0x1c, 0xf3, 0xf7, 0x3c, 0x00, 0x18, 0xd8, + 0x00, 0x00, 0xed, 0xff, 0x29, 0xe0, 0x03, 0x99, + 0x00, 0x29, 0x04, 0xd0, 0x05, 0x98, 0x40, 0x68, + 0x87, 0x02, 0xbf, 0x0a, 0x00, 0xe0, 0x00, 0x27, + 0x31, 0x1c, 0x28, 0x1c, 0x08, 0x9a, 0xf2, 0xf7, + 0x60, 0xfe, 0x04, 0x99, 0x00, 0x29, 0x03, 0xd0, + 0x08, 0x98, 0x28, 0x18, 0xf2, 0xf7, 0x07, 0xfe, + 0x00, 0x2f, 0x12, 0xd0, 0xf2, 0xf7, 0xcc, 0xfd, + 0x0f, 0xe0, 0x31, 0x1c, 0xa8, 0x1c, 0x3c, 0x00, + 0x54, 0xd8, 0x00, 0x00, 0x08, 0x9a, 0xf2, 0xf7, + 0x4f, 0xfe, 0x08, 0x98, 0x68, 0x70, 0x07, 0xe0, + 0xff, 0xe7, 0x07, 0x24, 0x04, 0xe0, 0x08, 0x24, + 0x03, 0x21, 0x87, 0x20, 0xf3, 0xf7, 0x1a, 0xfd, + 0x20, 0x1c, 0x09, 0xb0, 0xf0, 0xbd, 0x00, 0x00, + 0xf8, 0x6b, 0x01, 0x00, 0x9e, 0xb5, 0x1c, 0x1c, + 0x00, 0xab, 0x19, 0x72, 0x00, 0x92, 0x00, 0x22, + 0x01, 0x94, 0x69, 0x46, 0xfb, 0xf7, 0x08, 0xfa, + 0x3c, 0x00, 0x90, 0xd8, 0x00, 0x00, 0x9e, 0xbd, + 0x00, 0x00, 0x8f, 0xb5, 0x02, 0x92, 0x00, 0x22, + 0x00, 0x90, 0x01, 0x90, 0x03, 0x91, 0x69, 0x46, + 0x04, 0x20, 0xfb, 0xf7, 0xfc, 0xf9, 0x8f, 0xbd, + 0x00, 0x00, 0xb0, 0xb5, 0x0c, 0x1c, 0x01, 0x28, + 0x0a, 0xd0, 0x03, 0x28, 0x19, 0xd0, 0x04, 0x28, + 0x2c, 0xd1, 0x60, 0x68, 0x01, 0xf0, 0x35, 0xfc, + 0x01, 0x1c, 0x83, 0x20, 0x0c, 0xcc, 0x22, 0xe0, + 0x1c, 0x20, 0x3c, 0x00, 0xcc, 0xd8, 0x00, 0x00, + 0x14, 0x49, 0x60, 0x43, 0x40, 0x18, 0x14, 0x49, + 0x45, 0x18, 0x28, 0x1c, 0xf8, 0xf7, 0x46, 0xfc, + 0xa9, 0x68, 0x00, 0x29, 0x03, 0xd0, 0x22, 0x1c, + 0x08, 0x20, 0x05, 0xf0, 0x71, 0xfe, 0xb0, 0xbd, + 0x20, 0x8c, 0xc8, 0x28, 0x01, 0xd3, 0x04, 0x20, + 0x04, 0xe0, 0x65, 0x28, 0x01, 0xd3, 0x02, 0x20, + 0x00, 0xe0, 0x01, 0x20, 0x20, 0x84, 0x20, 0x1c, + 0x03, 0xf0, 0xdc, 0xfa, 0x3c, 0x00, 0x08, 0xd9, + 0x00, 0x00, 0x22, 0x68, 0xe3, 0x68, 0x01, 0x1c, + 0x82, 0x20, 0xff, 0xf7, 0xb4, 0xff, 0xb0, 0xbd, + 0xa0, 0x21, 0x08, 0x20, 0xf3, 0xf7, 0xc3, 0xfc, + 0xb0, 0xbd, 0xdc, 0x71, 0x01, 0x00, 0x64, 0xee, + 0xff, 0xff, 0x03, 0x48, 0x04, 0x4a, 0x81, 0x68, + 0x51, 0x61, 0xc0, 0x68, 0x90, 0x61, 0x70, 0x47, + 0x00, 0x00, 0xf4, 0x68, 0x01, 0x00, 0xc0, 0x71, + 0x01, 0x00, 0x03, 0x49, 0x04, 0x4a, 0x3c, 0x00, + 0x44, 0xd9, 0x00, 0x00, 0x08, 0x6b, 0x90, 0x60, + 0x88, 0x68, 0xd0, 0x60, 0x70, 0x47, 0x00, 0x00, + 0x90, 0x5c, 0x01, 0x00, 0xc0, 0x71, 0x01, 0x00, + 0x00, 0xb5, 0xff, 0xf7, 0xf1, 0xff, 0xff, 0xf7, + 0xe3, 0xff, 0x00, 0xbd, 0xb0, 0xb5, 0x0d, 0x1c, + 0x00, 0x28, 0x14, 0xd0, 0x0b, 0x49, 0x0c, 0x4c, + 0x88, 0x68, 0x62, 0x69, 0xc9, 0x68, 0x80, 0x1a, + 0xa2, 0x69, 0x89, 0x1a, 0x40, 0x18, 0x04, 0xd0, + 0x3c, 0x00, 0x80, 0xd9, 0x00, 0x00, 0x64, 0x23, + 0x59, 0x43, 0xf2, 0xf7, 0xc4, 0xfe, 0x20, 0x61, + 0xff, 0xf7, 0xcd, 0xff, 0x20, 0x69, 0x28, 0x60, + 0x01, 0x20, 0xb0, 0xbd, 0x00, 0x20, 0xb0, 0xbd, + 0x00, 0x00, 0xf4, 0x68, 0x01, 0x00, 0xc0, 0x71, + 0x01, 0x00, 0xb0, 0xb5, 0x0d, 0x1c, 0x00, 0x28, + 0x17, 0xd0, 0x0c, 0x49, 0x0d, 0x4c, 0x08, 0x6b, + 0xa2, 0x68, 0x89, 0x68, 0x80, 0x1a, 0xe2, 0x68, + 0x89, 0x1a, 0x3c, 0x00, 0xbc, 0xd9, 0x00, 0x00, + 0x40, 0x18, 0x07, 0xd0, 0x22, 0x88, 0x90, 0x42, + 0x04, 0xd9, 0x64, 0x23, 0x59, 0x43, 0xf2, 0xf7, + 0xa1, 0xfe, 0x60, 0x60, 0xff, 0xf7, 0xb6, 0xff, + 0x60, 0x68, 0x28, 0x60, 0x01, 0x20, 0xb0, 0xbd, + 0x00, 0x20, 0xb0, 0xbd, 0x90, 0x5c, 0x01, 0x00, + 0xc0, 0x71, 0x01, 0x00, 0x7c, 0xb5, 0x10, 0x68, + 0x00, 0x28, 0x02, 0xd0, 0x00, 0xf0, 0x24, 0xf8, + 0x7c, 0xbd, 0x0f, 0x48, 0x3c, 0x00, 0xf8, 0xd9, + 0x00, 0x00, 0xc0, 0x69, 0x84, 0x68, 0xe0, 0x68, + 0x25, 0x6a, 0xa6, 0x69, 0xf3, 0xf7, 0xe3, 0xfd, + 0xe1, 0x69, 0xf3, 0xf7, 0x06, 0xfd, 0x20, 0x1c, + 0xe2, 0x69, 0x40, 0x30, 0xc1, 0x8b, 0x12, 0x89, + 0x89, 0x18, 0xc1, 0x83, 0x07, 0x49, 0x01, 0x94, + 0x00, 0x91, 0x28, 0x69, 0x33, 0x1c, 0x82, 0x88, + 0x01, 0x68, 0xe0, 0x68, 0xc0, 0x68, 0xf8, 0xf7, + 0x1e, 0xfc, 0xe0, 0xe7, 0x00, 0x00, 0x3c, 0x00, + 0x34, 0xda, 0x00, 0x00, 0x84, 0x6a, 0x01, 0x00, + 0x91, 0x5e, 0x00, 0x00, 0xf0, 0xb5, 0x85, 0x69, + 0x06, 0x6a, 0x04, 0x1c, 0xc0, 0x68, 0x85, 0xb0, + 0xc0, 0x68, 0x00, 0x28, 0x01, 0xd1, 0xf3, 0xf7, + 0x57, 0xfc, 0x0a, 0x49, 0x02, 0x95, 0x04, 0x94, + 0x03, 0x91, 0x30, 0x69, 0x82, 0x88, 0x01, 0x68, + 0x26, 0x20, 0x01, 0x92, 0x00, 0x91, 0x43, 0x5d, + 0xe0, 0x68, 0xe1, 0x69, 0x2a, 0x1c, 0x0e, 0x32, + 0x3c, 0x00, 0x70, 0xda, 0x00, 0x00, 0xc0, 0x68, + 0xf8, 0xf7, 0x37, 0xfd, 0x05, 0xb0, 0xf0, 0xbd, + 0x00, 0x00, 0xe9, 0xd9, 0x00, 0x00, 0x10, 0xb5, + 0x14, 0x1c, 0x05, 0x48, 0xfc, 0xf7, 0x7b, 0xfb, + 0xa0, 0x68, 0xf3, 0xf7, 0x9e, 0xfd, 0xe1, 0x68, + 0xc1, 0x60, 0x20, 0x1c, 0xf5, 0xf7, 0xbb, 0xfa, + 0x10, 0xbd, 0xa0, 0x6a, 0x01, 0x00, 0x7c, 0xb5, + 0x04, 0x1c, 0x60, 0x30, 0x02, 0x7b, 0xa1, 0x69, + 0x00, 0x91, 0x3c, 0x00, 0xac, 0xda, 0x00, 0x00, + 0x01, 0x92, 0x22, 0x1c, 0x21, 0x1c, 0x38, 0x31, + 0xa0, 0x68, 0x48, 0x32, 0x0d, 0x1c, 0x63, 0x69, + 0x03, 0xf0, 0x7a, 0xfb, 0x08, 0x21, 0x00, 0x20, + 0xf3, 0xf7, 0x88, 0xfd, 0xe0, 0x60, 0x26, 0x69, + 0xb1, 0x6b, 0x00, 0x29, 0x01, 0xd0, 0x10, 0x23, + 0x00, 0xe0, 0x18, 0x23, 0x05, 0x49, 0x01, 0x94, + 0x00, 0x91, 0x31, 0x68, 0xca, 0x18, 0x08, 0x23, + 0x01, 0x1c, 0x28, 0x1c, 0x3c, 0x00, 0xe8, 0xda, + 0x00, 0x00, 0xf8, 0xf7, 0x20, 0xfd, 0x7c, 0xbd, + 0x00, 0x00, 0x81, 0xda, 0x00, 0x00, 0xf0, 0xb5, + 0x46, 0x68, 0x17, 0x1c, 0x04, 0x1c, 0x01, 0x21, + 0x30, 0x1c, 0x9b, 0xb0, 0xfa, 0xf7, 0x0d, 0xfc, + 0x00, 0x25, 0x00, 0x28, 0x03, 0xd0, 0x13, 0x49, + 0x0a, 0x7a, 0x01, 0x2a, 0x01, 0xd1, 0x01, 0x25, + 0x1c, 0xe0, 0x88, 0x62, 0x4e, 0x61, 0x20, 0x89, + 0xc8, 0x61, 0x60, 0x89, 0x00, 0x28, 0x3c, 0x00, + 0x24, 0xdb, 0x00, 0x00, 0x03, 0xd0, 0x00, 0x20, + 0x08, 0x84, 0x48, 0x84, 0x04, 0xe0, 0xe0, 0x68, + 0x08, 0x84, 0x20, 0x8a, 0x48, 0x84, 0x60, 0x8a, + 0x88, 0x84, 0x08, 0x6b, 0x00, 0x28, 0x03, 0xd1, + 0x01, 0xa8, 0x03, 0xf0, 0x77, 0xfc, 0x04, 0xe0, + 0x01, 0x20, 0x08, 0x61, 0x00, 0x20, 0x02, 0xf0, + 0x39, 0xfb, 0x3d, 0x71, 0x1b, 0xb0, 0x01, 0x20, + 0xf0, 0xbd, 0x00, 0x00, 0xf4, 0x6e, 0x01, 0x00, + 0x3c, 0x00, 0x60, 0xdb, 0x00, 0x00, 0x10, 0xb5, + 0x04, 0x1c, 0xf7, 0xf7, 0xe8, 0xfb, 0x00, 0x28, + 0x11, 0xd1, 0x4b, 0x20, 0x00, 0x5d, 0x01, 0x28, + 0x0d, 0xd1, 0x20, 0x1c, 0x04, 0xf0, 0x85, 0xfa, + 0x00, 0x21, 0x20, 0x1c, 0x04, 0xf0, 0xf3, 0xf8, + 0xa0, 0x69, 0x00, 0x21, 0xc2, 0x07, 0xd2, 0x0f, + 0x04, 0x20, 0xf4, 0xf7, 0xd8, 0xf9, 0x10, 0xbd, + 0x00, 0x00, 0x38, 0xb5, 0x04, 0x1c, 0x04, 0xf0, + 0x36, 0xf9, 0x3c, 0x00, 0x9c, 0xdb, 0x00, 0x00, + 0x00, 0x28, 0x03, 0xd0, 0x40, 0x30, 0x80, 0x7a, + 0x00, 0x28, 0x25, 0xd1, 0x0c, 0x20, 0x29, 0x21, + 0x08, 0x55, 0x21, 0x1c, 0x06, 0x22, 0xa0, 0x18, + 0xf2, 0xf7, 0xa0, 0xfc, 0x20, 0x1c, 0x06, 0x22, + 0x0e, 0x49, 0xf2, 0xf7, 0x9b, 0xfc, 0x01, 0x20, + 0xe0, 0x61, 0x60, 0x62, 0x07, 0x20, 0x30, 0x21, + 0x08, 0x55, 0x00, 0x25, 0xe5, 0x63, 0x06, 0x20, + 0x00, 0xab, 0x18, 0x80, 0x3c, 0x00, 0xd8, 0xdb, + 0x00, 0x00, 0xe0, 0x68, 0x00, 0x28, 0x01, 0xd0, + 0xf3, 0xf7, 0xdb, 0xfc, 0x02, 0x21, 0x68, 0x46, + 0xfd, 0xf7, 0x73, 0xfb, 0xe0, 0x60, 0x20, 0x1c, + 0xff, 0xf7, 0x69, 0xfc, 0xe5, 0x60, 0x20, 0x1c, + 0x38, 0xbd, 0x12, 0x61, 0x01, 0x00, 0xfe, 0xb5, + 0x05, 0x1c, 0x0e, 0x1c, 0x15, 0x20, 0x00, 0xab, + 0x98, 0x80, 0x14, 0x21, 0x17, 0x1c, 0x00, 0x20, + 0xf3, 0xf7, 0xe3, 0xfc, 0x02, 0x90, 0x3c, 0x00, + 0x14, 0xdc, 0x00, 0x00, 0x04, 0x68, 0x06, 0x22, + 0x31, 0x1c, 0x60, 0x1d, 0x25, 0x71, 0xf2, 0xf7, + 0x6b, 0xfc, 0x06, 0x22, 0x39, 0x1c, 0x20, 0x1c, + 0x0b, 0x30, 0xf2, 0xf7, 0x65, 0xfc, 0x01, 0xa8, + 0xff, 0xf7, 0x52, 0xfc, 0xfe, 0xbd, 0x00, 0x00, + 0x80, 0xb5, 0x00, 0x23, 0xfb, 0xf7, 0x5c, 0xf8, + 0x80, 0xbd, 0x00, 0x00, 0x70, 0xb5, 0x05, 0x1c, + 0x08, 0x35, 0x0f, 0x4e, 0x29, 0x1c, 0x04, 0x1c, + 0x3c, 0x00, 0x50, 0xdc, 0x00, 0x00, 0x06, 0x22, + 0x30, 0x1c, 0xf2, 0xf7, 0x50, 0xfc, 0xa0, 0x88, + 0xb0, 0x82, 0x28, 0x1c, 0x05, 0xf0, 0xa1, 0xff, + 0x00, 0x28, 0x0b, 0xd0, 0xe0, 0x88, 0x30, 0x61, + 0x28, 0x1c, 0x04, 0xf0, 0xcc, 0xf8, 0xa1, 0x88, + 0x40, 0x30, 0x41, 0x80, 0x00, 0x20, 0xf4, 0xf7, + 0xb8, 0xf9, 0x02, 0xe0, 0x04, 0x20, 0xf4, 0xf7, + 0xa0, 0xf9, 0x00, 0x20, 0x70, 0xbd, 0x70, 0x7c, + 0x01, 0x00, 0x3c, 0x00, 0x8c, 0xdc, 0x00, 0x00, + 0x80, 0xb5, 0x00, 0x20, 0xfb, 0xf7, 0xf8, 0xfb, + 0x80, 0xbd, 0x00, 0x00, 0x70, 0xb5, 0x04, 0x1c, + 0x04, 0x30, 0x05, 0x1c, 0xfd, 0xf7, 0x32, 0xf8, + 0x00, 0x28, 0x09, 0xd0, 0x00, 0x20, 0xf7, 0xf7, + 0x37, 0xfc, 0x00, 0x28, 0x04, 0xd0, 0x06, 0x22, + 0x01, 0x1c, 0x28, 0x1c, 0xf2, 0xf7, 0x1e, 0xfc, + 0x0a, 0x4e, 0x06, 0x22, 0x29, 0x1c, 0x30, 0x1c, + 0xf2, 0xf7, 0x18, 0xfc, 0x3c, 0x00, 0xc8, 0xdc, + 0x00, 0x00, 0x60, 0x89, 0xf0, 0x82, 0x28, 0x1c, + 0x05, 0xf0, 0x69, 0xff, 0x00, 0x28, 0x03, 0xd0, + 0x02, 0x20, 0xf4, 0xf7, 0x88, 0xf9, 0x02, 0xe0, + 0x05, 0x20, 0xf9, 0xf7, 0xf4, 0xfa, 0x00, 0x20, + 0x70, 0xbd, 0x70, 0x7c, 0x01, 0x00, 0x10, 0xb5, + 0x04, 0x1c, 0x00, 0x79, 0x04, 0x28, 0x1c, 0xd2, + 0x60, 0x79, 0x01, 0x28, 0x01, 0xd0, 0x03, 0x28, + 0x04, 0xd1, 0x00, 0x22, 0x01, 0x21, 0x3c, 0x00, + 0x04, 0xdd, 0x00, 0x00, 0xa0, 0x1d, 0xf9, 0xf7, + 0x69, 0xfc, 0x60, 0x79, 0x00, 0x28, 0x04, 0xd1, + 0x22, 0x79, 0x00, 0x21, 0xf9, 0xf7, 0x62, 0xfc, + 0x0a, 0xe0, 0x03, 0x28, 0x08, 0xd1, 0x00, 0x24, + 0x22, 0x1c, 0x00, 0x21, 0x00, 0x20, 0xf9, 0xf7, + 0x59, 0xfc, 0x01, 0x34, 0x04, 0x2c, 0xf7, 0xdb, + 0x01, 0x20, 0x10, 0xbd, 0xf0, 0xb5, 0x97, 0xb0, + 0x17, 0x1c, 0x05, 0x1c, 0x04, 0x30, 0x04, 0x1c, + 0x3c, 0x00, 0x40, 0xdd, 0x00, 0x00, 0x15, 0xaa, + 0x16, 0xa9, 0x05, 0xf0, 0xe2, 0xfe, 0x00, 0x28, + 0x2e, 0xd0, 0x15, 0x98, 0x4b, 0x21, 0x09, 0x5c, + 0x00, 0x29, 0x23, 0xd0, 0x01, 0x29, 0x02, 0xd0, + 0x02, 0x29, 0x1f, 0xd1, 0x01, 0xe0, 0x04, 0xf0, + 0x90, 0xf9, 0xad, 0x7a, 0x13, 0x48, 0x16, 0x9e, + 0x05, 0x80, 0x06, 0x22, 0x21, 0x1c, 0x08, 0x30, + 0xf2, 0xf7, 0xc1, 0xfb, 0x22, 0x1c, 0x31, 0x1c, + 0x02, 0xa8, 0x3c, 0x00, 0x7c, 0xdd, 0x00, 0x00, + 0x00, 0xf0, 0x74, 0xfb, 0x0a, 0x20, 0x0a, 0xa9, + 0x48, 0x72, 0x00, 0xab, 0x9d, 0x80, 0x02, 0x21, + 0x01, 0xa8, 0xfd, 0xf7, 0x9f, 0xfa, 0x05, 0x90, + 0x02, 0xa8, 0xff, 0xf7, 0x95, 0xfb, 0xf3, 0xf7, + 0xf7, 0xf9, 0x00, 0x21, 0x15, 0x98, 0x03, 0xf0, + 0xe1, 0xff, 0x00, 0x20, 0x00, 0xe0, 0x01, 0x20, + 0x38, 0x71, 0x17, 0xb0, 0x01, 0x20, 0xf0, 0xbd, + 0x98, 0x7c, 0x01, 0x00, 0x3c, 0x00, 0xb8, 0xdd, + 0x00, 0x00, 0x80, 0xb5, 0x01, 0x20, 0xfb, 0xf7, + 0x62, 0xfb, 0x80, 0xbd, 0x00, 0x00, 0xb0, 0xb5, + 0x04, 0x1c, 0x80, 0x7d, 0x15, 0x1c, 0x0a, 0x1c, + 0xc0, 0x07, 0xc0, 0x17, 0x01, 0x30, 0x21, 0x1c, + 0xf9, 0xf7, 0xfb, 0xfc, 0x00, 0x28, 0x03, 0xd1, + 0x04, 0x20, 0x28, 0x71, 0x01, 0x20, 0xb0, 0xbd, + 0x20, 0x6a, 0xf7, 0xf7, 0x76, 0xfe, 0x60, 0x6a, + 0xf7, 0xf7, 0x7b, 0xfe, 0x20, 0x6a, 0x3c, 0x00, + 0xf4, 0xdd, 0x00, 0x00, 0xfe, 0xf7, 0x88, 0xfa, + 0x00, 0x20, 0xb0, 0xbd, 0x10, 0xb5, 0x14, 0x1c, + 0xc2, 0x79, 0x81, 0x79, 0x80, 0x88, 0xf7, 0xf7, + 0xa1, 0xfa, 0x20, 0x71, 0x01, 0x20, 0x10, 0xbd, + 0x80, 0xb5, 0x01, 0x23, 0xfa, 0xf7, 0x70, 0xff, + 0x80, 0xbd, 0x00, 0x00, 0xf0, 0xb5, 0x04, 0x1c, + 0x08, 0x1c, 0x00, 0x21, 0x0f, 0x28, 0x91, 0xb0, + 0x00, 0xd3, 0x02, 0x21, 0x00, 0x29, 0x41, 0xd1, + 0x3c, 0x00, 0x30, 0xde, 0x00, 0x00, 0xc0, 0x00, + 0x24, 0x4f, 0x10, 0x90, 0xc6, 0x19, 0xb2, 0x88, + 0x21, 0x68, 0x02, 0xa8, 0xf2, 0xf7, 0x5b, 0xfb, + 0x21, 0x89, 0xb0, 0x88, 0x09, 0x1a, 0x00, 0x29, + 0x07, 0xdd, 0x09, 0x04, 0x22, 0x68, 0x09, 0x0c, + 0x10, 0x18, 0xf3, 0xf7, 0xc0, 0xfb, 0x05, 0x1c, + 0x00, 0xe0, 0x00, 0x25, 0xb0, 0x79, 0x80, 0x21, + 0x88, 0x43, 0x17, 0x49, 0x78, 0x31, 0x09, 0x5c, + 0x00, 0x20, 0x3c, 0x00, 0x6c, 0xde, 0x00, 0x00, + 0xf3, 0xf7, 0xb4, 0xfb, 0x07, 0x1c, 0x00, 0x68, + 0x13, 0x49, 0x01, 0x90, 0x10, 0x98, 0x0b, 0x58, + 0x01, 0x9a, 0x29, 0x1c, 0x02, 0xa8, 0xf2, 0xf7, + 0xac, 0xfa, 0x00, 0x90, 0x28, 0x1c, 0xf3, 0xf7, + 0x73, 0xfb, 0x20, 0x1c, 0xf3, 0xf7, 0x82, 0xfb, + 0x00, 0x98, 0x00, 0x28, 0x08, 0xd0, 0x02, 0x98, + 0x01, 0x99, 0x08, 0x60, 0xb0, 0x79, 0x39, 0x1c, + 0xfa, 0xf7, 0x20, 0xff, 0x3c, 0x00, 0xa8, 0xde, + 0x00, 0x00, 0x11, 0xb0, 0xf0, 0xbd, 0x38, 0x1c, + 0xf3, 0xf7, 0x61, 0xfb, 0xf9, 0xe7, 0x2d, 0x20, + 0xf3, 0xf7, 0xf5, 0xf9, 0x20, 0x1c, 0xf3, 0xf7, + 0x6c, 0xfb, 0xf2, 0xe7, 0x00, 0x00, 0x24, 0x44, + 0x01, 0x00, 0x70, 0xb5, 0x05, 0x1c, 0x20, 0x35, + 0x06, 0x1c, 0xa8, 0x79, 0x04, 0x28, 0x48, 0xd2, + 0xe9, 0x79, 0x01, 0x29, 0x13, 0xd1, 0x30, 0x1c, + 0x28, 0x30, 0x03, 0xf0, 0x92, 0xff, 0x3c, 0x00, + 0xe4, 0xde, 0x00, 0x00, 0x00, 0x28, 0x3f, 0xd0, + 0x01, 0x1c, 0x8c, 0x31, 0x01, 0x65, 0xa9, 0x79, + 0x4c, 0x22, 0x04, 0x1c, 0x11, 0x54, 0x81, 0x18, + 0x41, 0x62, 0x50, 0x34, 0x04, 0x62, 0xe1, 0x1e, + 0x81, 0x62, 0x0b, 0xe0, 0x00, 0x29, 0x2f, 0xd1, + 0x3c, 0x22, 0x18, 0x49, 0x42, 0x43, 0x54, 0x18, + 0x17, 0x4a, 0x04, 0x34, 0x12, 0x68, 0x00, 0x2a, + 0x00, 0xd1, 0x48, 0x70, 0x00, 0x2c, 0x23, 0xd0, + 0x3c, 0x00, 0x20, 0xdf, 0x00, 0x00, 0x35, 0x1c, + 0x30, 0x35, 0xe8, 0x79, 0x01, 0x28, 0x01, 0xd0, + 0x05, 0x28, 0x01, 0xd1, 0x06, 0x20, 0xe8, 0x71, + 0x20, 0x22, 0x31, 0x1d, 0x20, 0x68, 0xf2, 0xf7, + 0xde, 0xfa, 0xb0, 0x8c, 0xa0, 0x80, 0xe8, 0x79, + 0xa0, 0x71, 0xa8, 0x79, 0x00, 0x25, 0xa0, 0x63, + 0x01, 0x20, 0x60, 0x81, 0x00, 0x20, 0xe0, 0x60, + 0x2e, 0x36, 0xe8, 0x00, 0x00, 0x19, 0x18, 0x30, + 0x08, 0x22, 0x3c, 0x00, 0x5c, 0xdf, 0x00, 0x00, + 0x31, 0x1c, 0xf2, 0xf7, 0xcb, 0xfa, 0x01, 0x35, + 0x04, 0x2d, 0xf5, 0xd3, 0x01, 0x20, 0x70, 0xbd, + 0x68, 0x61, 0x01, 0x00, 0xdc, 0x62, 0x01, 0x00, + 0x10, 0xb5, 0x04, 0x1c, 0xc0, 0x7a, 0x01, 0x28, + 0x01, 0xd0, 0x03, 0x28, 0x07, 0xd1, 0x20, 0x1d, + 0x03, 0xf0, 0x40, 0xff, 0x00, 0x28, 0x02, 0xd0, + 0xa1, 0x7a, 0x40, 0x30, 0x41, 0x73, 0xe0, 0x7a, + 0x00, 0x28, 0x01, 0xd0, 0x3c, 0x00, 0x98, 0xdf, + 0x00, 0x00, 0x03, 0x28, 0x02, 0xd1, 0xa0, 0x7a, + 0x02, 0x49, 0x08, 0x70, 0x01, 0x20, 0x10, 0xbd, + 0x00, 0x00, 0x68, 0x61, 0x01, 0x00, 0x70, 0xb5, + 0x0e, 0x1c, 0x03, 0x21, 0x04, 0x1c, 0x30, 0x1c, + 0xfc, 0xf7, 0xe1, 0xfb, 0x00, 0x28, 0x01, 0xd0, + 0x85, 0x78, 0x00, 0xe0, 0x00, 0x25, 0x0b, 0x48, + 0x32, 0x1c, 0x00, 0x68, 0x03, 0x68, 0x20, 0x7c, + 0x80, 0x07, 0xc0, 0x0f, 0x21, 0x1c, 0x3c, 0x00, + 0xd4, 0xdf, 0x00, 0x00, 0xf7, 0xf7, 0x62, 0xfe, + 0x00, 0x28, 0x05, 0xd0, 0x01, 0x21, 0x28, 0x1c, + 0xfd, 0xf7, 0xfe, 0xfb, 0x00, 0x20, 0x00, 0xe0, + 0x08, 0x20, 0x03, 0xf0, 0xc5, 0xff, 0x00, 0x20, + 0x70, 0xbd, 0x00, 0x00, 0xe4, 0x65, 0x01, 0x00, + 0x80, 0xb5, 0x42, 0x68, 0x00, 0x88, 0x01, 0x21, + 0x49, 0x06, 0x08, 0x43, 0x2d, 0x21, 0x05, 0xf0, + 0xd3, 0xfb, 0x80, 0xbd, 0x03, 0x49, 0x01, 0x20, + 0x3c, 0x00, 0x10, 0xe0, 0x00, 0x00, 0x49, 0x78, + 0x02, 0x29, 0x00, 0xd0, 0x00, 0x20, 0x70, 0x47, + 0x00, 0x00, 0x84, 0x66, 0x01, 0x00, 0x8c, 0xb5, + 0x01, 0x28, 0x1f, 0xd1, 0x00, 0x29, 0x0d, 0xd0, + 0x01, 0x29, 0x0b, 0xd0, 0x02, 0x29, 0x01, 0xd0, + 0x03, 0x29, 0x16, 0xd1, 0x00, 0x20, 0xf9, 0xf7, + 0x14, 0xfc, 0x93, 0x20, 0x00, 0xab, 0x18, 0x80, + 0x00, 0x20, 0x08, 0xe0, 0x01, 0x29, 0x00, 0xd0, + 0x00, 0x20, 0x3c, 0x00, 0x4c, 0xe0, 0x00, 0x00, + 0xf9, 0xf7, 0x0a, 0xfc, 0x83, 0x20, 0x00, 0xab, + 0x18, 0x80, 0x02, 0x20, 0x00, 0xf0, 0xcc, 0xf8, + 0x01, 0x90, 0x68, 0x46, 0xff, 0xf7, 0x3a, 0xfa, + 0x8c, 0xbd, 0x01, 0x21, 0x0e, 0x20, 0xf3, 0xf7, + 0x1b, 0xf9, 0xf9, 0xe7, 0xff, 0xb5, 0x17, 0x1c, + 0x1e, 0x1c, 0x14, 0x21, 0x00, 0x20, 0x83, 0xb0, + 0xf3, 0xf7, 0xac, 0xfa, 0x05, 0x1c, 0x04, 0x68, + 0x12, 0x20, 0x00, 0xab, 0x3c, 0x00, 0x88, 0xe0, + 0x00, 0x00, 0x98, 0x80, 0x06, 0x22, 0x60, 0x1d, + 0x03, 0x99, 0xf2, 0xf7, 0x32, 0xfa, 0x00, 0x20, + 0x20, 0x71, 0x27, 0x73, 0x04, 0x99, 0x20, 0x1c, + 0xe1, 0x72, 0x31, 0x1c, 0x06, 0x22, 0x0d, 0x30, + 0xf2, 0xf7, 0x27, 0xfa, 0x02, 0x95, 0x01, 0xa8, + 0xff, 0xf7, 0x13, 0xfa, 0x07, 0xb0, 0xf0, 0xbd, + 0x00, 0x00, 0xf8, 0xb5, 0x06, 0x1c, 0x0f, 0x1c, + 0x0c, 0x21, 0x00, 0x20, 0xf3, 0xf7, 0x3c, 0x00, + 0xc4, 0xe0, 0x00, 0x00, 0x89, 0xfa, 0x05, 0x68, + 0x04, 0x1c, 0x28, 0x1d, 0x06, 0x22, 0x31, 0x1c, + 0xf2, 0xf7, 0x12, 0xfa, 0x6f, 0x81, 0x20, 0x1c, + 0xf8, 0xbd, 0x00, 0x00, 0xb0, 0xb5, 0x04, 0x1c, + 0x0d, 0x1c, 0x08, 0x21, 0x00, 0x20, 0xf3, 0xf7, + 0x77, 0xfa, 0x01, 0x68, 0x8c, 0x71, 0x8d, 0x80, + 0xb0, 0xbd, 0x00, 0x00, 0xf7, 0xb5, 0x0e, 0x1c, + 0x10, 0x21, 0x17, 0x1c, 0x00, 0x20, 0xf3, 0xf7, + 0x3c, 0x00, 0x00, 0xe1, 0x00, 0x00, 0x6b, 0xfa, + 0x04, 0x68, 0x05, 0x1c, 0x20, 0x1d, 0x06, 0x22, + 0x00, 0x99, 0xf2, 0xf7, 0xf4, 0xf9, 0x66, 0x81, + 0xa7, 0x81, 0x28, 0x1c, 0xfe, 0xbd, 0xf3, 0xb5, + 0x0c, 0x1c, 0x08, 0x21, 0x00, 0x20, 0x85, 0xb0, + 0xf3, 0xf7, 0x59, 0xfa, 0x06, 0x1c, 0x07, 0x68, + 0xe0, 0x68, 0x00, 0x28, 0x02, 0xd0, 0x05, 0x99, + 0x01, 0x29, 0x04, 0xd1, 0x05, 0x98, 0x38, 0x71, + 0x00, 0x20, 0x3c, 0x00, 0x3c, 0xe1, 0x00, 0x00, + 0x78, 0x71, 0x56, 0xe0, 0x03, 0x68, 0x01, 0x21, + 0x03, 0x93, 0x20, 0x69, 0x02, 0x90, 0xfc, 0xf7, + 0x17, 0xfb, 0x05, 0x1c, 0x02, 0x98, 0x32, 0x21, + 0xfc, 0xf7, 0x12, 0xfb, 0x00, 0x22, 0xd2, 0x43, + 0x01, 0x1c, 0x28, 0x1c, 0x04, 0xab, 0xf7, 0xf7, + 0xb9, 0xf8, 0x00, 0x28, 0x04, 0xd1, 0x30, 0x1c, + 0xf3, 0xf7, 0x02, 0xfa, 0x00, 0x26, 0x3c, 0xe0, + 0x00, 0x2d, 0x05, 0xd0, 0x3c, 0x00, 0x78, 0xe1, + 0x00, 0x00, 0x68, 0x78, 0x09, 0x38, 0x07, 0x28, + 0x01, 0xd8, 0x32, 0x20, 0x28, 0x70, 0x1c, 0x21, + 0x00, 0x20, 0xf3, 0xf7, 0x26, 0xfa, 0x01, 0x90, + 0x05, 0x68, 0x01, 0x1c, 0x30, 0x1c, 0xf3, 0xf7, + 0x40, 0xf9, 0xe0, 0x68, 0xf3, 0xf7, 0x0b, 0xfa, + 0xa8, 0x61, 0xe1, 0x68, 0x01, 0x98, 0xf3, 0xf7, + 0x38, 0xf9, 0x00, 0x20, 0xe0, 0x60, 0x05, 0x98, + 0x80, 0x21, 0x08, 0x43, 0x38, 0x71, 0x3c, 0x00, + 0xb4, 0xe1, 0x00, 0x00, 0x01, 0x20, 0x21, 0x1c, + 0x14, 0x31, 0x78, 0x71, 0x28, 0x1c, 0x06, 0x22, + 0xf2, 0xf7, 0x9a, 0xf9, 0x02, 0x9a, 0x29, 0x20, + 0x00, 0x92, 0x00, 0x5d, 0x01, 0x21, 0xe2, 0x6a, + 0x08, 0x28, 0x00, 0xd0, 0x00, 0x21, 0x28, 0x1c, + 0x03, 0x9b, 0x02, 0xf0, 0x9d, 0xff, 0xa0, 0x6b, + 0x28, 0x61, 0x20, 0x6c, 0x68, 0x61, 0x7f, 0x30, + 0x01, 0xd1, 0x0f, 0x20, 0x68, 0x61, 0x30, 0x1c, + 0x3c, 0x00, 0xf0, 0xe1, 0x00, 0x00, 0x07, 0xb0, + 0xf0, 0xbd, 0x10, 0xb5, 0x04, 0x1c, 0x08, 0x21, + 0x00, 0x20, 0xf3, 0xf7, 0xec, 0xf9, 0x01, 0x68, + 0x0c, 0x71, 0x10, 0xbd, 0x00, 0x00, 0x01, 0x48, + 0x00, 0x68, 0x70, 0x47, 0x00, 0x00, 0x28, 0x61, + 0x01, 0x00, 0x01, 0x49, 0x08, 0x60, 0x70, 0x47, + 0x00, 0x00, 0xe4, 0x65, 0x01, 0x00, 0x02, 0x1c, + 0x01, 0x20, 0x00, 0x06, 0x08, 0x43, 0x80, 0xb5, + 0x2d, 0x21, 0x3c, 0x00, 0x2c, 0xe2, 0x00, 0x00, + 0x05, 0xf0, 0xc0, 0xfa, 0x80, 0xbd, 0x00, 0x00, + 0x80, 0xb5, 0x01, 0x28, 0x07, 0xd0, 0xf1, 0x28, + 0x25, 0xd0, 0xf3, 0x28, 0x27, 0xd1, 0x02, 0x20, + 0x02, 0xf0, 0xbc, 0xf9, 0x80, 0xbd, 0x00, 0x29, + 0x1a, 0xd0, 0x01, 0x29, 0x03, 0xd0, 0xf2, 0x29, + 0xf8, 0xd1, 0x88, 0x21, 0x1c, 0xe0, 0x10, 0x48, + 0x01, 0x78, 0x00, 0x29, 0x05, 0xd1, 0x40, 0x78, + 0x01, 0x28, 0xef, 0xd1, 0x3c, 0x00, 0x68, 0xe2, + 0x00, 0x00, 0x00, 0xf0, 0x16, 0xfa, 0x80, 0xbd, + 0x0b, 0x48, 0x14, 0x30, 0x00, 0x89, 0xfc, 0xf7, + 0x5a, 0xfc, 0x01, 0x1c, 0x01, 0x22, 0x0f, 0x20, + 0x05, 0xf0, 0x9f, 0xf9, 0x80, 0xbd, 0x04, 0xf0, + 0x52, 0xfa, 0x80, 0xbd, 0x00, 0x20, 0xfa, 0xf7, + 0x32, 0xfe, 0x80, 0xbd, 0x02, 0x21, 0x0f, 0x20, + 0xf3, 0xf7, 0x05, 0xf8, 0x80, 0xbd, 0x84, 0x66, + 0x01, 0x00, 0x01, 0x48, 0x00, 0x78, 0x3c, 0x00, + 0xa4, 0xe2, 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x74, 0x66, 0x01, 0x00, 0x01, 0x49, 0x00, 0x20, + 0x48, 0x60, 0x70, 0x47, 0xec, 0x65, 0x01, 0x00, + 0xf8, 0xb5, 0x0e, 0x1c, 0x13, 0x4d, 0x01, 0x1c, + 0x14, 0x1c, 0x68, 0x22, 0x28, 0x1c, 0x1f, 0x1c, + 0x0c, 0x30, 0xf2, 0xf7, 0x71, 0xf9, 0x0f, 0x49, + 0x00, 0x20, 0xac, 0x39, 0x48, 0x60, 0x01, 0x21, + 0x29, 0x60, 0x19, 0x21, 0x19, 0x2c, 0x6e, 0x67, + 0x3c, 0x00, 0xe0, 0xe2, 0x00, 0x00, 0x00, 0xd3, + 0x21, 0x1c, 0x29, 0x81, 0x09, 0x49, 0x14, 0x39, + 0x88, 0x73, 0x8f, 0x74, 0xc8, 0x78, 0x01, 0x28, + 0x08, 0xd0, 0x01, 0x21, 0x0f, 0x20, 0x05, 0xf0, + 0x9c, 0xf9, 0x19, 0x20, 0xfc, 0xf7, 0x15, 0xfc, + 0xfb, 0xf7, 0x99, 0xf8, 0x01, 0x20, 0xf8, 0xbd, + 0x00, 0x00, 0x98, 0x66, 0x01, 0x00, 0x80, 0xb5, + 0x01, 0x28, 0x02, 0xd1, 0x00, 0xf0, 0x2f, 0xf8, + 0x80, 0xbd, 0x3c, 0x00, 0x1c, 0xe3, 0x00, 0x00, + 0x01, 0x21, 0x1d, 0x20, 0xf2, 0xf7, 0xc0, 0xff, + 0x80, 0xbd, 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x01, 0x20, 0x07, 0x49, 0x00, 0x05, 0x80, 0xb5, + 0x88, 0x60, 0x00, 0x22, 0x80, 0x21, 0x16, 0x20, + 0x05, 0xf0, 0x4c, 0xf9, 0x04, 0xf0, 0x34, 0xfd, + 0x02, 0x49, 0x08, 0x61, 0x80, 0xbd, 0x00, 0x00, + 0x00, 0x10, 0x07, 0x00, 0x24, 0x6d, 0x01, 0x00, + 0x06, 0x4a, 0x80, 0xb5, 0x3c, 0x00, 0x58, 0xe3, + 0x00, 0x00, 0xd1, 0x6a, 0x81, 0x42, 0x07, 0xd1, + 0x10, 0x7f, 0x24, 0x23, 0x04, 0x49, 0x58, 0x43, + 0x40, 0x18, 0xc0, 0x68, 0xf2, 0xf7, 0x35, 0xf8, + 0x80, 0xbd, 0xd4, 0x79, 0x01, 0x00, 0x94, 0x46, + 0x01, 0x00, 0x1d, 0x48, 0x1c, 0xb5, 0x00, 0x78, + 0x00, 0x28, 0x2d, 0xd0, 0x1c, 0x48, 0x00, 0x68, + 0x00, 0x28, 0x29, 0xd0, 0x1a, 0x4a, 0x1a, 0x4b, + 0x04, 0x32, 0x11, 0x68, 0x1c, 0x69, 0x3c, 0x00, + 0x94, 0xe3, 0x00, 0x00, 0xa1, 0x42, 0x22, 0xd1, + 0x51, 0x68, 0x5b, 0x69, 0x99, 0x42, 0x1f, 0xd1, + 0x16, 0x49, 0x49, 0x68, 0x93, 0x68, 0xc9, 0x1a, + 0x81, 0x42, 0x19, 0xd2, 0xd0, 0x68, 0x14, 0x49, + 0x01, 0x30, 0xd0, 0x60, 0x09, 0x68, 0x88, 0x42, + 0x0c, 0xd9, 0x06, 0x22, 0xff, 0x21, 0x68, 0x46, + 0xf2, 0xf7, 0x2e, 0xf9, 0xf3, 0xf7, 0xac, 0xfc, + 0x01, 0x1c, 0x00, 0x23, 0x00, 0x22, 0x68, 0x46, + 0x3c, 0x00, 0xd0, 0xe3, 0x00, 0x00, 0x02, 0xf0, + 0xce, 0xf9, 0x01, 0x22, 0x1d, 0x20, 0x0a, 0x49, + 0x05, 0xf0, 0xf7, 0xf8, 0x1c, 0xbd, 0xf7, 0xf7, + 0x88, 0xf9, 0x04, 0x22, 0x81, 0x18, 0x08, 0x1c, + 0xfc, 0xf7, 0x27, 0xfb, 0xf6, 0xe7, 0x1c, 0x75, + 0x01, 0x00, 0x44, 0x75, 0x01, 0x00, 0x28, 0x61, + 0x01, 0x00, 0x90, 0x5c, 0x01, 0x00, 0xf0, 0x59, + 0x01, 0x00, 0xa0, 0x86, 0x01, 0x00, 0x80, 0xb5, + 0x01, 0x68, 0x3c, 0x00, 0x0c, 0xe4, 0x00, 0x00, + 0x00, 0x29, 0x15, 0xd1, 0x00, 0x79, 0x02, 0x28, + 0x12, 0xd1, 0x08, 0x1c, 0xf7, 0xf7, 0x80, 0xf8, + 0x00, 0x28, 0x0d, 0xd0, 0x03, 0xf0, 0xf2, 0xfc, + 0x08, 0x30, 0x41, 0x8f, 0x00, 0x29, 0x07, 0xd1, + 0x80, 0x69, 0x00, 0x28, 0x04, 0xd0, 0x80, 0x79, + 0x06, 0x28, 0x01, 0xd1, 0xfc, 0xf7, 0x18, 0xfb, + 0x80, 0xbd, 0x00, 0x00, 0x01, 0x49, 0x00, 0x20, + 0x88, 0x62, 0x70, 0x47, 0x3c, 0x00, 0x48, 0xe4, + 0x00, 0x00, 0x78, 0x69, 0x01, 0x00, 0xb0, 0xb5, + 0x05, 0x4d, 0x04, 0x1c, 0xa9, 0x1d, 0xff, 0xf7, + 0x14, 0xf8, 0x06, 0x22, 0x29, 0x1c, 0xa0, 0x18, + 0xf2, 0xf7, 0x4b, 0xf8, 0xb0, 0xbd, 0x70, 0x7c, + 0x01, 0x00, 0xb0, 0xb5, 0x04, 0x1c, 0x15, 0x1c, + 0xff, 0xf7, 0x07, 0xf8, 0x06, 0x22, 0x29, 0x1c, + 0xa0, 0x18, 0xf2, 0xf7, 0x3e, 0xf8, 0xb0, 0xbd, + 0x00, 0x00, 0x80, 0xb5, 0x0a, 0x30, 0x3c, 0x00, + 0x84, 0xe4, 0x00, 0x00, 0xf7, 0xf7, 0xbc, 0xf9, + 0x01, 0x23, 0x00, 0x28, 0x03, 0xd0, 0x05, 0x48, + 0x00, 0x78, 0x01, 0x28, 0x04, 0xd1, 0x00, 0x22, + 0x00, 0x21, 0x00, 0x20, 0x03, 0xf0, 0xc6, 0xfd, + 0x80, 0xbd, 0x00, 0x00, 0xa0, 0x79, 0x01, 0x00, + 0x80, 0xb5, 0x00, 0x23, 0x00, 0x22, 0x00, 0x21, + 0x00, 0x20, 0x03, 0xf0, 0xbb, 0xfd, 0x80, 0xbd, + 0xb0, 0xb5, 0x05, 0x4d, 0xac, 0x79, 0x0a, 0x1c, + 0x3c, 0x00, 0xc0, 0xe4, 0x00, 0x00, 0x01, 0x1c, + 0x01, 0x23, 0x01, 0x20, 0x03, 0xf0, 0xb1, 0xfd, + 0xac, 0x71, 0xb0, 0xbd, 0x00, 0x00, 0x20, 0x10, + 0x07, 0x00, 0xf8, 0xb5, 0x06, 0x1c, 0x0c, 0x1c, + 0x88, 0x07, 0x02, 0xd5, 0xf6, 0xf7, 0x47, 0xfa, + 0x10, 0xe0, 0x60, 0x07, 0x0e, 0xd5, 0x17, 0x4f, + 0xa3, 0x20, 0xc0, 0x5d, 0x15, 0x4d, 0x10, 0x28, + 0x00, 0xd3, 0x15, 0x4d, 0x04, 0xf0, 0x59, 0xfc, + 0xb9, 0x6f, 0x3c, 0x00, 0xfc, 0xe4, 0x00, 0x00, + 0x40, 0x1a, 0x29, 0x1a, 0x01, 0x20, 0xf6, 0xf7, + 0xc1, 0xfa, 0xe0, 0x07, 0x11, 0x49, 0xc0, 0x0f, + 0x48, 0x60, 0x0c, 0xd0, 0x0d, 0x4c, 0x44, 0x3c, + 0x20, 0x78, 0x03, 0x28, 0x0f, 0xd1, 0x00, 0x2e, + 0x06, 0xd0, 0xf6, 0xf7, 0xf9, 0xf9, 0x01, 0x1c, + 0x01, 0x20, 0xf6, 0xf7, 0xaf, 0xfa, 0xf8, 0xbd, + 0x09, 0x49, 0x01, 0x20, 0xf6, 0xf7, 0xaa, 0xfa, + 0x01, 0x20, 0x20, 0x70, 0x3c, 0x00, 0x38, 0xe5, + 0x00, 0x00, 0xf7, 0xe7, 0x01, 0x21, 0x30, 0x1c, + 0xf6, 0xf7, 0x89, 0xfa, 0xf2, 0xe7, 0xa6, 0x0e, + 0x00, 0x00, 0xa4, 0x6c, 0x01, 0x00, 0xc4, 0x09, + 0x00, 0x00, 0xb0, 0x57, 0x01, 0x00, 0x40, 0x42, + 0x0f, 0x00, 0x80, 0xb5, 0x06, 0x28, 0x04, 0xdb, + 0x05, 0x21, 0xff, 0x20, 0xf2, 0xf7, 0x9f, 0xfe, + 0x80, 0xbd, 0x03, 0x4a, 0xc0, 0x00, 0x11, 0x50, + 0x01, 0x21, 0x80, 0x18, 0x01, 0x71, 0x3c, 0x00, + 0x74, 0xe5, 0x00, 0x00, 0x80, 0xbd, 0x00, 0x00, + 0x9c, 0x5a, 0x01, 0x00, 0x01, 0x48, 0x80, 0x68, + 0x70, 0x47, 0x00, 0x00, 0xd0, 0x60, 0x01, 0x00, + 0xb0, 0xb5, 0x08, 0x4c, 0x25, 0x1d, 0x28, 0x1c, + 0x21, 0x68, 0x00, 0xf0, 0xf1, 0xfe, 0x00, 0x28, + 0x03, 0xd1, 0x01, 0x21, 0x04, 0x48, 0xf2, 0xf7, + 0xcf, 0xfa, 0x28, 0x1c, 0x21, 0x68, 0x00, 0xf0, + 0xfb, 0xfe, 0xb0, 0xbd, 0xc0, 0x60, 0x01, 0x00, + 0x3c, 0x00, 0xb0, 0xe5, 0x00, 0x00, 0x2c, 0x10, + 0x07, 0x00, 0xb0, 0xb5, 0x10, 0x4d, 0x0c, 0x1c, + 0xa8, 0x68, 0x00, 0x28, 0x02, 0xd1, 0x04, 0xf0, + 0xf4, 0xfb, 0x28, 0x60, 0x20, 0x1c, 0x04, 0xf0, + 0x38, 0xfb, 0x01, 0x21, 0x03, 0x20, 0x03, 0xf0, + 0xc4, 0xfe, 0x04, 0xf0, 0xf0, 0xfb, 0xa8, 0x68, + 0x00, 0x28, 0x0b, 0xd1, 0x04, 0xf0, 0xe5, 0xfb, + 0x29, 0x68, 0x00, 0x1b, 0x40, 0x1a, 0x69, 0x68, + 0x40, 0x18, 0x3c, 0x00, 0xec, 0xe5, 0x00, 0x00, + 0x41, 0x08, 0x40, 0x18, 0x28, 0x60, 0x01, 0x20, + 0xa8, 0x60, 0xb0, 0xbd, 0xd0, 0x60, 0x01, 0x00, + 0xf8, 0xb5, 0x1f, 0x4e, 0x00, 0x24, 0xb0, 0x68, + 0x00, 0x28, 0x02, 0xd1, 0x04, 0xf0, 0xd0, 0xfb, + 0x70, 0x60, 0x05, 0xf0, 0x61, 0xf8, 0x04, 0xf0, + 0x8f, 0xfb, 0x05, 0x1c, 0xf9, 0xf7, 0x66, 0xfe, + 0x31, 0x68, 0x18, 0x4a, 0x41, 0x18, 0x12, 0x68, + 0xe8, 0x0b, 0x00, 0x2a, 0x3c, 0x00, 0x28, 0xe6, + 0x00, 0x00, 0x00, 0xd1, 0xa8, 0x0a, 0x40, 0x18, + 0x85, 0x42, 0x1f, 0xd9, 0x14, 0x4f, 0x2d, 0x1a, + 0x38, 0x1c, 0x20, 0x30, 0x81, 0x79, 0x00, 0xab, + 0x19, 0x70, 0xc0, 0x79, 0x58, 0x70, 0x05, 0xf0, + 0x6e, 0xf8, 0x00, 0x28, 0x03, 0xd1, 0x02, 0x21, + 0x8f, 0x20, 0xf2, 0xf7, 0x28, 0xfe, 0x29, 0x1c, + 0x0c, 0x48, 0xf2, 0x68, 0xf8, 0xf7, 0x09, 0xfc, + 0x00, 0x28, 0x04, 0xd0, 0x01, 0x1c, 0x3c, 0x00, + 0x64, 0xe6, 0x00, 0x00, 0x28, 0x1c, 0xff, 0xf7, + 0xa5, 0xff, 0x01, 0x24, 0x00, 0xab, 0x18, 0x88, + 0xf8, 0x84, 0x05, 0xf0, 0x47, 0xf8, 0x20, 0x1c, + 0xf8, 0xbd, 0x00, 0x00, 0xd0, 0x60, 0x01, 0x00, + 0xf4, 0x74, 0x01, 0x00, 0x00, 0x10, 0x07, 0x00, + 0x89, 0x13, 0x01, 0x00, 0x01, 0x49, 0x01, 0x20, + 0xc8, 0x60, 0x70, 0x47, 0xd0, 0x60, 0x01, 0x00, + 0x06, 0x48, 0x80, 0xb5, 0x00, 0x68, 0x01, 0x28, + 0x3c, 0x00, 0xa0, 0xe6, 0x00, 0x00, 0x07, 0xd1, + 0x04, 0x48, 0xac, 0x38, 0x01, 0x69, 0x03, 0x48, + 0x00, 0xf0, 0x79, 0xfe, 0xf3, 0xf7, 0x2b, 0xfa, + 0x80, 0xbd, 0x98, 0x66, 0x01, 0x00, 0x34, 0x63, + 0x01, 0x00, 0x80, 0xb5, 0x42, 0x78, 0x81, 0x68, + 0x00, 0x79, 0x03, 0xf0, 0xde, 0xff, 0x00, 0x28, + 0x01, 0xd1, 0xf5, 0xf7, 0xb6, 0xf9, 0x80, 0xbd, + 0x00, 0x00, 0x1f, 0xb5, 0x04, 0xf0, 0x69, 0xfb, + 0xf6, 0xf7, 0x3c, 0x00, 0xdc, 0xe6, 0x00, 0x00, + 0x91, 0xff, 0x16, 0x4c, 0x02, 0x28, 0x03, 0xd1, + 0xff, 0xf7, 0xdc, 0xfd, 0x04, 0x28, 0x02, 0xd3, + 0x00, 0x20, 0x20, 0x70, 0x1f, 0xbd, 0xfb, 0xf7, + 0xf7, 0xfc, 0x00, 0x28, 0xfa, 0xd1, 0x60, 0x6a, + 0x00, 0x28, 0xf7, 0xd0, 0x20, 0x78, 0x80, 0x07, + 0xf4, 0xd4, 0x09, 0x21, 0x16, 0x20, 0x04, 0xf0, + 0x93, 0xff, 0x01, 0x20, 0x20, 0x70, 0x0b, 0x4c, + 0x09, 0x49, 0x02, 0x90, 0x3c, 0x00, 0x18, 0xe7, + 0x00, 0x00, 0x01, 0x94, 0x00, 0x91, 0x04, 0xf0, + 0x46, 0xfb, 0x00, 0x19, 0x03, 0x90, 0x68, 0x46, + 0xfd, 0xf7, 0xb5, 0xfb, 0x00, 0x22, 0x16, 0x21, + 0x84, 0x20, 0x05, 0xf0, 0x3e, 0xf8, 0xdc, 0xe7, + 0x00, 0x00, 0x60, 0x6c, 0x01, 0x00, 0x61, 0xed, + 0x00, 0x00, 0x40, 0x42, 0x0f, 0x00, 0x23, 0x48, + 0x70, 0xb5, 0x80, 0x78, 0x9c, 0xb0, 0x01, 0x28, + 0x3e, 0xd1, 0x20, 0x4c, 0x09, 0xa8, 0x3c, 0x00, + 0x54, 0xe7, 0x00, 0x00, 0x80, 0x3c, 0x61, 0x1c, + 0xfe, 0xf7, 0x92, 0xfe, 0x04, 0x20, 0x11, 0xad, + 0x68, 0x72, 0xa0, 0x6f, 0x19, 0xa9, 0x18, 0x90, + 0x7c, 0x20, 0x00, 0x5d, 0x01, 0x26, 0x08, 0x71, + 0x1d, 0x20, 0x00, 0x5d, 0x00, 0x28, 0x06, 0xd0, + 0x10, 0x96, 0x12, 0x96, 0xfc, 0xf7, 0xf6, 0xfa, + 0x28, 0x72, 0x20, 0x7a, 0x11, 0x90, 0xf3, 0xf7, + 0xcd, 0xff, 0x6a, 0x21, 0x08, 0x53, 0x40, 0x34, + 0x3c, 0x00, 0x90, 0xe7, 0x00, 0x00, 0x00, 0x22, + 0x01, 0xa9, 0x06, 0xa8, 0xf6, 0xf7, 0xcd, 0xff, + 0x21, 0x1c, 0x00, 0x20, 0xfb, 0xf7, 0xcb, 0xfb, + 0x06, 0xa9, 0xfb, 0xf7, 0xc8, 0xfb, 0x01, 0xa9, + 0xfb, 0xf7, 0xc5, 0xfb, 0x0a, 0x49, 0x09, 0x68, + 0x00, 0x29, 0x07, 0xd0, 0x33, 0x1c, 0x0a, 0x22, + 0x69, 0x46, 0xfb, 0xf7, 0xda, 0xfb, 0x00, 0x9a, + 0x07, 0x21, 0x91, 0x70, 0x0c, 0x90, 0x09, 0xa8, + 0xfe, 0xf7, 0x3c, 0x00, 0xcc, 0xe7, 0x00, 0x00, + 0x7b, 0xfe, 0x1c, 0xb0, 0x70, 0xbd, 0x00, 0x00, + 0x84, 0x66, 0x01, 0x00, 0xe4, 0x62, 0x01, 0x00, + 0xf8, 0xb5, 0x04, 0x1c, 0xc0, 0x68, 0xff, 0x22, + 0x01, 0x68, 0x12, 0x02, 0x0e, 0x1c, 0x08, 0x7b, + 0x49, 0x7b, 0x09, 0x02, 0x11, 0x40, 0x08, 0x43, + 0x05, 0x1c, 0x31, 0x1c, 0x06, 0x22, 0xa0, 0x18, + 0xf1, 0xf7, 0x7c, 0xfe, 0x06, 0x22, 0xb1, 0x18, + 0x20, 0x1c, 0xf1, 0xf7, 0x3c, 0x00, 0x08, 0xe8, + 0x00, 0x00, 0x77, 0xfe, 0x28, 0x0a, 0x29, 0x02, + 0x08, 0x43, 0x00, 0x04, 0x03, 0x21, 0x49, 0x02, + 0x00, 0x0c, 0x88, 0x42, 0x08, 0xd2, 0xe0, 0x68, + 0x01, 0x89, 0x0e, 0x39, 0x01, 0x81, 0xe0, 0x68, + 0x01, 0x68, 0x0e, 0x31, 0x01, 0x60, 0xf8, 0xbd, + 0x00, 0x26, 0x20, 0x1c, 0x10, 0x30, 0x03, 0xf0, + 0xe8, 0xfa, 0x21, 0x8b, 0x00, 0x29, 0x05, 0xd1, + 0xe1, 0x7d, 0x00, 0x29, 0x0b, 0xd0, 0x3c, 0x00, + 0x44, 0xe8, 0x00, 0x00, 0x80, 0x69, 0x80, 0x07, + 0x08, 0xd4, 0xe0, 0x68, 0x01, 0x26, 0x01, 0x89, + 0x02, 0x39, 0x01, 0x81, 0xe0, 0x68, 0x01, 0x68, + 0x02, 0x31, 0x06, 0xe0, 0xe0, 0x68, 0x01, 0x89, + 0x06, 0x39, 0x01, 0x81, 0xe0, 0x68, 0x01, 0x68, + 0x06, 0x31, 0x01, 0x60, 0x14, 0x49, 0x00, 0x20, + 0x0b, 0x1f, 0x42, 0x00, 0x9a, 0x5a, 0xaa, 0x42, + 0x02, 0xd1, 0x11, 0x49, 0x06, 0x31, 0x02, 0xe0, + 0x3c, 0x00, 0x80, 0xe8, 0x00, 0x00, 0x01, 0x30, + 0x02, 0x28, 0xf5, 0xd3, 0xe0, 0x68, 0x06, 0x22, + 0x00, 0x68, 0xf1, 0xf7, 0x34, 0xfe, 0x01, 0x2e, + 0xcb, 0xd1, 0x81, 0x20, 0x00, 0xab, 0x18, 0x80, + 0xe1, 0x7d, 0x20, 0x8b, 0x49, 0x03, 0x08, 0x43, + 0x31, 0x03, 0x08, 0x43, 0x00, 0x04, 0x00, 0x0c, + 0x01, 0x0a, 0x00, 0x02, 0x08, 0x43, 0x58, 0x80, + 0xe0, 0x68, 0x19, 0x88, 0x00, 0x68, 0xc1, 0x80, + 0x59, 0x88, 0x3c, 0x00, 0xbc, 0xe8, 0x00, 0x00, + 0x01, 0x81, 0xb5, 0xe7, 0x6a, 0x46, 0x01, 0x00, + 0xb0, 0xb5, 0x0d, 0x1c, 0x01, 0x89, 0x06, 0x22, + 0x08, 0x31, 0x01, 0x81, 0x04, 0x68, 0x04, 0x49, + 0x08, 0x3c, 0x04, 0x60, 0x20, 0x1c, 0xf1, 0xf7, + 0x0d, 0xfe, 0xe5, 0x80, 0xb0, 0xbd, 0x00, 0x00, + 0x6a, 0x46, 0x01, 0x00, 0xf8, 0xb5, 0x00, 0x29, + 0x01, 0xd0, 0x00, 0x28, 0x01, 0xd1, 0x00, 0x20, + 0xf8, 0xbd, 0x09, 0x04, 0x3c, 0x00, 0xf8, 0xe8, + 0x00, 0x00, 0x09, 0x0c, 0xf2, 0xf7, 0x43, 0xff, + 0x06, 0x1c, 0x05, 0x1c, 0x00, 0x27, 0x20, 0xe0, + 0x2c, 0x89, 0x29, 0x68, 0x02, 0x2c, 0x01, 0xd2, + 0x02, 0x20, 0x01, 0xe0, 0x48, 0x78, 0x02, 0x30, + 0x84, 0x42, 0x02, 0xdd, 0x24, 0x1a, 0x09, 0x18, + 0xf4, 0xe7, 0x84, 0x42, 0x10, 0xd0, 0x01, 0x1b, + 0x0a, 0x04, 0x01, 0x04, 0x09, 0x0c, 0x12, 0x0c, + 0x28, 0x1c, 0xf2, 0xf7, 0x9e, 0xfe, 0x3c, 0x00, + 0x34, 0xe9, 0x00, 0x00, 0x00, 0x28, 0x06, 0xd1, + 0xe8, 0x68, 0xf2, 0xf7, 0x2d, 0xfe, 0xef, 0x60, + 0x28, 0x89, 0x00, 0x1b, 0x28, 0x81, 0xed, 0x68, + 0x00, 0x2d, 0xdc, 0xd1, 0x30, 0x1c, 0xd1, 0xe7, + 0xf8, 0xb5, 0x85, 0x68, 0x04, 0x1c, 0x80, 0x69, + 0x2e, 0x1c, 0x00, 0x28, 0x0d, 0xd0, 0x71, 0x68, + 0xf2, 0xf7, 0xf6, 0xfd, 0xa0, 0x69, 0xf2, 0xf7, + 0x17, 0xfe, 0x06, 0xe0, 0x00, 0x21, 0xc1, 0x60, + 0x3c, 0x00, 0x70, 0xe9, 0x00, 0x00, 0xf1, 0x60, + 0xa0, 0x8d, 0x36, 0x68, 0x01, 0x38, 0xa0, 0x85, + 0xf0, 0x68, 0x00, 0x28, 0xf5, 0xd1, 0x30, 0x68, + 0xa0, 0x60, 0xa0, 0x8d, 0x01, 0x38, 0x00, 0x04, + 0x00, 0x0c, 0xa0, 0x85, 0x02, 0xd0, 0x20, 0x1c, + 0xf9, 0xf7, 0x39, 0xf8, 0x2a, 0x4f, 0x2a, 0x48, + 0x00, 0x68, 0x00, 0x28, 0x03, 0xd0, 0x06, 0x21, + 0x68, 0x68, 0xfa, 0xf7, 0x7c, 0xfd, 0x68, 0x68, + 0x00, 0x68, 0x3c, 0x00, 0xac, 0xe9, 0x00, 0x00, + 0x81, 0x78, 0x00, 0x29, 0x2b, 0xd1, 0xc1, 0x78, + 0x00, 0x29, 0x30, 0xd1, 0x21, 0x8e, 0x01, 0x39, + 0x21, 0x86, 0xfb, 0xf7, 0x15, 0xf8, 0xa1, 0x6a, + 0x08, 0x1a, 0xa0, 0x62, 0xe1, 0x69, 0x88, 0x42, + 0x03, 0xd9, 0x04, 0x21, 0x02, 0x20, 0xf2, 0xf7, + 0x67, 0xfc, 0xb8, 0x68, 0x00, 0x28, 0x1e, 0xd0, + 0x1a, 0x49, 0x20, 0x8e, 0x49, 0x68, 0x0c, 0x22, + 0x52, 0x1a, 0x90, 0x42, 0x3c, 0x00, 0xe8, 0xe9, + 0x00, 0x00, 0x08, 0xd3, 0x19, 0x23, 0x9b, 0x01, + 0xaf, 0x22, 0x92, 0x01, 0x59, 0x43, 0xa0, 0x6a, + 0x51, 0x1a, 0x88, 0x42, 0x0e, 0xd2, 0x00, 0x21, + 0x0c, 0x20, 0x03, 0xf0, 0xac, 0xfc, 0x00, 0x20, + 0xb8, 0x60, 0x07, 0xe0, 0x01, 0x29, 0x05, 0xd1, + 0xc0, 0x78, 0x17, 0x28, 0x02, 0xd1, 0xa0, 0x8e, + 0x01, 0x38, 0xa0, 0x86, 0x2a, 0x1d, 0x06, 0xca, + 0xe0, 0x68, 0x63, 0x69, 0xf1, 0xf7, 0x3c, 0x00, + 0x24, 0xea, 0x00, 0x00, 0xdc, 0xfc, 0xb5, 0x42, + 0x01, 0xd0, 0x2d, 0x68, 0xb4, 0xe7, 0xa0, 0x8d, + 0x00, 0x28, 0x03, 0xd1, 0x05, 0x48, 0xb9, 0x69, + 0x00, 0xf0, 0x9e, 0xfc, 0xf8, 0xbd, 0x00, 0x00, + 0xfc, 0x5a, 0x01, 0x00, 0xcc, 0x5c, 0x01, 0x00, + 0x18, 0x57, 0x01, 0x00, 0xc4, 0x60, 0x01, 0x00, + 0x89, 0x07, 0x07, 0x4b, 0xca, 0x0f, 0x80, 0xb5, + 0x19, 0x7c, 0x00, 0x29, 0x06, 0xd0, 0x81, 0x43, + 0x3c, 0x00, 0x60, 0xea, 0x00, 0x00, 0x19, 0x74, + 0x03, 0xd1, 0x07, 0x21, 0x15, 0x20, 0x04, 0xf0, + 0xa2, 0xfe, 0x80, 0xbd, 0x00, 0x00, 0x78, 0x69, + 0x01, 0x00, 0x80, 0xb5, 0x01, 0x1c, 0x01, 0x20, + 0xff, 0xf7, 0xe9, 0xff, 0x80, 0xbd, 0x80, 0xb5, + 0x01, 0x1c, 0x02, 0x20, 0xff, 0xf7, 0xe3, 0xff, + 0x80, 0xbd, 0xb0, 0xb5, 0x1b, 0x4c, 0x60, 0x68, + 0xfc, 0xf7, 0x2f, 0xff, 0x20, 0x68, 0x00, 0x25, + 0x40, 0x68, 0x3c, 0x00, 0x9c, 0xea, 0x00, 0x00, + 0x00, 0x28, 0x03, 0xd0, 0xfd, 0xf7, 0x18, 0xfc, + 0x20, 0x68, 0x45, 0x60, 0x60, 0x68, 0xfc, 0xf7, + 0xc5, 0xfe, 0x14, 0x48, 0x61, 0x68, 0x00, 0xf0, + 0x61, 0xfc, 0xa0, 0x7a, 0x01, 0x28, 0x05, 0xd0, + 0x02, 0x28, 0x03, 0xd0, 0x20, 0x68, 0x00, 0x68, + 0x00, 0xf0, 0xde, 0xf8, 0x01, 0x21, 0x1f, 0x20, + 0x04, 0xf0, 0xb2, 0xfd, 0x00, 0x21, 0x1f, 0x20, + 0x04, 0xf0, 0xae, 0xfd, 0x3c, 0x00, 0xd8, 0xea, + 0x00, 0x00, 0x02, 0x21, 0x1f, 0x20, 0x04, 0xf0, + 0xaa, 0xfd, 0xa5, 0x72, 0x21, 0x68, 0x2c, 0x20, + 0x40, 0x5c, 0x89, 0x68, 0xf1, 0xf7, 0x76, 0xfc, + 0x60, 0x68, 0xfc, 0xf7, 0xe4, 0xfe, 0x20, 0x68, + 0x05, 0x62, 0xb0, 0xbd, 0x00, 0x00, 0x14, 0x7a, + 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, 0x04, 0x49, + 0x0a, 0x68, 0xc8, 0x68, 0x92, 0x6a, 0x00, 0x2a, + 0x01, 0xd0, 0x09, 0x69, 0x08, 0x18, 0x3c, 0x00, + 0x14, 0xeb, 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x14, 0x7a, 0x01, 0x00, 0xb0, 0xb5, 0x13, 0x4c, + 0x05, 0x1c, 0xa0, 0x7a, 0x01, 0x38, 0x02, 0x28, + 0x19, 0xd8, 0x01, 0x21, 0x1f, 0x20, 0x04, 0xf0, + 0x81, 0xfd, 0x20, 0x68, 0xfc, 0x23, 0x01, 0x1c, + 0x20, 0x30, 0x02, 0x7b, 0x1a, 0x40, 0x02, 0x73, + 0x00, 0x2d, 0x0f, 0xd0, 0x01, 0x23, 0x1a, 0x43, + 0x02, 0x73, 0xa0, 0x7a, 0x03, 0x28, 0x07, 0xd1, + 0x3c, 0x00, 0x50, 0xeb, 0x00, 0x00, 0x01, 0x20, + 0x01, 0xf0, 0xe7, 0xfd, 0x00, 0x28, 0x01, 0xd1, + 0xff, 0xf7, 0x97, 0xff, 0xb0, 0xbd, 0x4b, 0x62, + 0xb0, 0xbd, 0x02, 0x21, 0x11, 0x43, 0x01, 0x73, + 0xf6, 0xe7, 0x14, 0x7a, 0x01, 0x00, 0x10, 0xb5, + 0x04, 0x1c, 0x0a, 0x30, 0xf6, 0xf7, 0x43, 0xfe, + 0x00, 0x28, 0x0c, 0xd0, 0x22, 0x88, 0x0a, 0x49, + 0x0b, 0x7a, 0x90, 0x04, 0xc0, 0x0f, 0x00, 0x2b, + 0x06, 0xd1, 0x3c, 0x00, 0x8c, 0xeb, 0x00, 0x00, + 0x12, 0x06, 0x92, 0x0e, 0x20, 0x2a, 0x00, 0xd1, + 0x01, 0x20, 0xc8, 0x60, 0x10, 0xbd, 0x00, 0x28, + 0xfc, 0xd1, 0x00, 0x22, 0x24, 0x21, 0x80, 0x20, + 0x04, 0xf0, 0x04, 0xfe, 0x10, 0xbd, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x80, 0xb5, 0x02, 0x1c, + 0x1f, 0x21, 0x80, 0x20, 0x04, 0xf0, 0xfa, 0xfd, + 0x80, 0xbd, 0x00, 0x00, 0xf8, 0xb5, 0x1d, 0x4e, + 0x04, 0x1c, 0x30, 0x68, 0x3c, 0x00, 0xc8, 0xeb, + 0x00, 0x00, 0x1d, 0x1c, 0x47, 0x68, 0x20, 0x1c, + 0xf1, 0xf7, 0x0a, 0xfc, 0xfb, 0xf7, 0x87, 0xfa, + 0x00, 0x28, 0x04, 0xd0, 0x28, 0x1c, 0xf2, 0xf7, + 0x2a, 0xfb, 0x00, 0x28, 0x28, 0xd1, 0x20, 0x88, + 0x40, 0x05, 0x25, 0xd4, 0x30, 0x68, 0x00, 0x68, + 0xfe, 0xf7, 0x59, 0xf9, 0x00, 0x28, 0x03, 0xd1, + 0xfd, 0xf7, 0x89, 0xfa, 0xf1, 0xf7, 0xed, 0xfb, + 0x30, 0x68, 0x00, 0x25, 0x40, 0x68, 0x3c, 0x00, + 0x04, 0xec, 0x00, 0x00, 0x00, 0x28, 0x03, 0xd0, + 0xfd, 0xf7, 0x64, 0xfb, 0x30, 0x68, 0x45, 0x60, + 0x20, 0x88, 0x00, 0x09, 0x00, 0x07, 0x03, 0xd1, + 0x04, 0xf0, 0xc8, 0xf8, 0x61, 0x88, 0x45, 0x18, + 0x30, 0x68, 0x45, 0x61, 0x81, 0x6a, 0x01, 0x31, + 0x81, 0x62, 0x20, 0x88, 0x80, 0x04, 0xc1, 0x0f, + 0x02, 0x48, 0xf8, 0xf7, 0xcd, 0xff, 0xf8, 0xbd, + 0x14, 0x7a, 0x01, 0x00, 0xb1, 0xeb, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0xec, 0x00, 0x00, 0xb0, 0xb5, + 0x0e, 0x4c, 0x05, 0x1c, 0x60, 0x68, 0xfc, 0xf7, + 0xf6, 0xfd, 0x0c, 0x48, 0x61, 0x68, 0x00, 0xf0, + 0x92, 0xfb, 0x00, 0x21, 0x24, 0x20, 0x04, 0xf0, + 0xec, 0xfc, 0x00, 0x22, 0xd2, 0x43, 0x80, 0x21, + 0x24, 0x20, 0x04, 0xf0, 0xb8, 0xfc, 0x00, 0x20, + 0xe0, 0x60, 0x20, 0x72, 0x20, 0x68, 0x01, 0x68, + 0x28, 0x06, 0x00, 0x0e, 0xf1, 0xf7, 0xb0, 0xfb, + 0xb0, 0xbd, 0x3c, 0x00, 0x7c, 0xec, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, + 0x10, 0xb5, 0x04, 0x1c, 0xc0, 0x68, 0xf2, 0xf7, + 0x85, 0xfc, 0x20, 0x1c, 0xf2, 0xf7, 0xb0, 0xfd, + 0x10, 0xbd, 0x00, 0x00, 0x70, 0xb5, 0x1c, 0x4e, + 0x05, 0x1c, 0xb0, 0x7a, 0x2c, 0x1c, 0x40, 0x34, + 0x02, 0x28, 0x26, 0xd1, 0xa0, 0x8b, 0x31, 0x89, + 0x88, 0x42, 0x22, 0xd1, 0x30, 0x68, 0x41, 0x6a, + 0x00, 0x29, 0x08, 0xd0, 0x3c, 0x00, 0xb8, 0xec, + 0x00, 0x00, 0x20, 0x30, 0x00, 0x7b, 0xc0, 0x07, + 0x04, 0xd5, 0x01, 0x20, 0x01, 0xf0, 0x2f, 0xfd, + 0x00, 0x28, 0x18, 0xd1, 0x60, 0x78, 0x00, 0x28, + 0x09, 0xd1, 0x30, 0x68, 0x02, 0x23, 0x20, 0x30, + 0x02, 0x7b, 0x0d, 0x49, 0x52, 0x08, 0x52, 0x00, + 0x1a, 0x43, 0x02, 0x73, 0x01, 0xe0, 0xff, 0x21, + 0xf5, 0x31, 0x01, 0x22, 0x1f, 0x20, 0x04, 0xf0, + 0x6e, 0xfc, 0x03, 0x20, 0xb0, 0x72, 0x3c, 0x00, + 0xf4, 0xec, 0x00, 0x00, 0x02, 0xe0, 0x28, 0x1c, + 0xff, 0xf7, 0xc4, 0xff, 0x60, 0x78, 0x00, 0x28, + 0x03, 0xd1, 0x29, 0x1c, 0x01, 0x20, 0x03, 0xf0, + 0x29, 0xfb, 0x70, 0xbd, 0x14, 0x7a, 0x01, 0x00, + 0x50, 0xc3, 0x00, 0x00, 0xb0, 0xb5, 0x04, 0x1c, + 0x60, 0x34, 0xe0, 0x79, 0x0e, 0x4d, 0x00, 0x28, + 0x0a, 0xd1, 0x02, 0x20, 0xa8, 0x72, 0x28, 0x68, + 0x40, 0x68, 0x00, 0x28, 0x04, 0xd1, 0x0b, 0x48, + 0x3c, 0x00, 0x30, 0xed, 0x00, 0x00, 0xfd, 0xf7, + 0xd0, 0xfa, 0x29, 0x68, 0x48, 0x60, 0x04, 0xf0, + 0x38, 0xf8, 0x29, 0x68, 0xc8, 0x61, 0xff, 0xf7, + 0xe0, 0xfe, 0x29, 0x68, 0x09, 0x69, 0x08, 0x1a, + 0x03, 0xf0, 0x6f, 0xff, 0x00, 0x28, 0x01, 0xd0, + 0xe0, 0x79, 0xa0, 0x71, 0xb0, 0xbd, 0x14, 0x7a, + 0x01, 0x00, 0xc1, 0xeb, 0x00, 0x00, 0xf8, 0xb5, + 0x04, 0x1c, 0x00, 0x26, 0x04, 0xf0, 0x21, 0xf8, + 0x05, 0x1c, 0x3c, 0x00, 0x6c, 0xed, 0x00, 0x00, + 0x22, 0x48, 0x00, 0x27, 0x07, 0x70, 0xa1, 0x07, + 0x04, 0xd0, 0xe1, 0x07, 0xc9, 0x0f, 0x01, 0x62, + 0xc5, 0x61, 0x01, 0x26, 0x41, 0x6b, 0x00, 0x29, + 0x34, 0xd1, 0x00, 0x2e, 0x32, 0xd0, 0x06, 0x1c, + 0xf9, 0xf7, 0x44, 0xff, 0x31, 0x6b, 0x1a, 0x4b, + 0x41, 0x1a, 0xa2, 0x07, 0x12, 0xd5, 0xda, 0x68, + 0x00, 0x2a, 0x08, 0xdd, 0x91, 0x42, 0x1a, 0x68, + 0x02, 0xda, 0x14, 0x09, 0x3c, 0x00, 0xa8, 0xed, + 0x00, 0x00, 0xa2, 0x18, 0x06, 0xe0, 0x14, 0x09, + 0x12, 0x1b, 0x03, 0xe0, 0x0a, 0x43, 0x02, 0xd1, + 0x1a, 0x68, 0x52, 0x00, 0x1a, 0x60, 0xb7, 0x63, + 0x0a, 0xe0, 0xb2, 0x6b, 0x01, 0x32, 0xb2, 0x63, + 0x02, 0x2a, 0x1a, 0x68, 0x01, 0xdd, 0x94, 0x08, + 0x00, 0xe0, 0x14, 0x09, 0x12, 0x1b, 0x1a, 0x60, + 0xd9, 0x60, 0x30, 0x63, 0xf5, 0x62, 0x18, 0x68, + 0x08, 0x49, 0x88, 0x42, 0x01, 0xd9, 0x3c, 0x00, + 0xe4, 0xed, 0x00, 0x00, 0x19, 0x60, 0x03, 0xe0, + 0x64, 0x28, 0x01, 0xd2, 0x64, 0x20, 0x18, 0x60, + 0xf5, 0xf7, 0xfc, 0xfd, 0xf8, 0xbd, 0x00, 0x00, + 0x60, 0x6c, 0x01, 0x00, 0xb0, 0x57, 0x01, 0x00, + 0x20, 0xa1, 0x07, 0x00, 0xfe, 0xb5, 0x04, 0x1c, + 0x00, 0x20, 0x50, 0x4d, 0x00, 0x21, 0x68, 0x61, + 0x20, 0x69, 0xfb, 0xf7, 0xb3, 0xfc, 0x07, 0x1c, + 0x20, 0x69, 0x03, 0x21, 0xfb, 0xf7, 0xae, 0xfc, + 0x3c, 0x00, 0x20, 0xee, 0x00, 0x00, 0x00, 0x28, + 0x03, 0xd0, 0x80, 0x78, 0x29, 0x78, 0x88, 0x42, + 0x63, 0xd1, 0x47, 0x4d, 0x20, 0x1c, 0x14, 0x30, + 0x39, 0x1c, 0x06, 0x1c, 0x2a, 0x78, 0x02, 0xf0, + 0x5a, 0xfa, 0x00, 0x28, 0x59, 0xd1, 0xe0, 0x68, + 0x05, 0x68, 0x41, 0x48, 0x01, 0x95, 0x58, 0x30, + 0x02, 0x90, 0xfb, 0xf7, 0x6a, 0xff, 0x3e, 0x4d, + 0x19, 0x35, 0x00, 0x28, 0x0b, 0xd0, 0x28, 0x1c, + 0xfb, 0xf7, 0x3c, 0x00, 0x5c, 0xee, 0x00, 0x00, + 0x55, 0xff, 0x00, 0x28, 0x1e, 0xd1, 0x31, 0x1c, + 0x28, 0x1c, 0xfb, 0xf7, 0x65, 0xff, 0x00, 0x28, + 0x42, 0xd0, 0x17, 0xe0, 0x28, 0x1c, 0xfb, 0xf7, + 0x49, 0xff, 0x00, 0x28, 0x06, 0xd0, 0x39, 0x1c, + 0x02, 0x98, 0xfb, 0xf7, 0x63, 0xff, 0x00, 0x28, + 0x36, 0xd0, 0x0b, 0xe0, 0x39, 0x1c, 0x02, 0x98, + 0xfb, 0xf7, 0x5c, 0xff, 0x00, 0x28, 0x2f, 0xd0, + 0x31, 0x1c, 0x28, 0x1c, 0x3c, 0x00, 0x98, 0xee, + 0x00, 0x00, 0xfb, 0xf7, 0x4c, 0xff, 0x00, 0x28, + 0x29, 0xd0, 0x30, 0x1c, 0xf6, 0xf7, 0xad, 0xfc, + 0x29, 0x4a, 0x18, 0x32, 0x11, 0x7c, 0x00, 0x29, + 0x04, 0xd0, 0x51, 0x6a, 0x00, 0x29, 0x01, 0xd0, + 0x00, 0x28, 0x1c, 0xd1, 0x90, 0x6a, 0x00, 0x28, + 0x3b, 0xd0, 0x13, 0x78, 0x01, 0x9d, 0x01, 0x21, + 0x6d, 0x89, 0x01, 0x20, 0x2b, 0x40, 0x9b, 0x07, + 0x11, 0xd0, 0xa3, 0x6b, 0x1e, 0x4e, 0x3c, 0x00, + 0xd4, 0xee, 0x00, 0x00, 0x1d, 0x1c, 0x7f, 0x35, + 0x98, 0x36, 0x00, 0x2d, 0x14, 0xd0, 0x55, 0x8a, + 0x00, 0x2d, 0x08, 0xd1, 0x55, 0x69, 0xab, 0x42, + 0x0f, 0xda, 0x00, 0x20, 0x17, 0x4d, 0x01, 0x23, + 0x6b, 0x61, 0x0a, 0xe0, 0x29, 0xe0, 0xf5, 0x78, + 0x02, 0x2d, 0x06, 0xd1, 0x14, 0x4f, 0x55, 0x69, + 0x3f, 0x68, 0xed, 0x19, 0xab, 0x42, 0x00, 0xda, + 0x00, 0x20, 0x23, 0x6c, 0x1d, 0x1c, 0x7f, 0x35, + 0x3c, 0x00, 0x10, 0xef, 0x00, 0x00, 0x10, 0xd0, + 0x55, 0x8a, 0x00, 0x2d, 0x03, 0xd1, 0x95, 0x69, + 0xab, 0x42, 0x0a, 0xd2, 0x08, 0xe0, 0xf5, 0x78, + 0x02, 0x2d, 0x06, 0xd1, 0x0b, 0x4e, 0x95, 0x69, + 0x36, 0x68, 0xad, 0x19, 0xab, 0x42, 0x00, 0xd2, + 0x00, 0x21, 0x08, 0x43, 0x08, 0xd0, 0x10, 0x6a, + 0x00, 0x28, 0x01, 0xd0, 0xf1, 0xf7, 0x4b, 0xfa, + 0x00, 0x21, 0x20, 0x1c, 0x01, 0xf0, 0xb9, 0xf9, + 0xfe, 0xbd, 0x3c, 0x00, 0x4c, 0xef, 0x00, 0x00, + 0xec, 0x65, 0x01, 0x00, 0xc4, 0x67, 0x01, 0x00, + 0xcc, 0x67, 0x01, 0x00, 0x3e, 0xb5, 0x05, 0x6a, + 0x04, 0x1c, 0xc0, 0x68, 0xf2, 0xf7, 0x34, 0xfb, + 0xe1, 0x69, 0xf2, 0xf7, 0x57, 0xfa, 0x20, 0x1c, + 0x40, 0x30, 0xc1, 0x8b, 0x04, 0x31, 0xc1, 0x83, + 0x2b, 0x69, 0x10, 0x49, 0x98, 0x79, 0x06, 0x28, + 0x0a, 0xd1, 0x98, 0x88, 0x01, 0x91, 0x02, 0x94, + 0x00, 0x90, 0x60, 0x69, 0x3c, 0x00, 0x88, 0xef, + 0x00, 0x00, 0x1b, 0x68, 0x01, 0x68, 0xe0, 0x68, + 0x03, 0x22, 0xc0, 0x68, 0x0a, 0xe0, 0x02, 0x28, + 0x0b, 0xd1, 0x10, 0x20, 0x00, 0x90, 0x01, 0x91, + 0x02, 0x94, 0xe0, 0x68, 0xa3, 0x69, 0xc0, 0x68, + 0x00, 0x22, 0x00, 0x21, 0xf7, 0xf7, 0x0f, 0xfb, + 0x3e, 0xbd, 0xf2, 0xf7, 0xa6, 0xf9, 0xfb, 0xe7, + 0x00, 0x00, 0xbd, 0xef, 0x00, 0x00, 0x80, 0xb5, + 0xd1, 0x68, 0x50, 0x69, 0xc9, 0x68, 0x3c, 0x00, + 0xc4, 0xef, 0x00, 0x00, 0xc1, 0x60, 0xd1, 0x68, + 0xc8, 0x60, 0x11, 0x1c, 0x40, 0x31, 0xcb, 0x8b, + 0x00, 0x89, 0x18, 0x18, 0xc8, 0x83, 0x10, 0x68, + 0x00, 0x28, 0x02, 0xd0, 0xff, 0xf7, 0xbc, 0xff, + 0x80, 0xbd, 0x03, 0x48, 0xfb, 0xf7, 0xcc, 0xf8, + 0x00, 0x6a, 0xfe, 0xf7, 0xf5, 0xf9, 0x80, 0xbd, + 0xa0, 0x6a, 0x01, 0x00, 0xf8, 0xb5, 0x06, 0x1c, + 0x0a, 0x24, 0x30, 0x07, 0x01, 0x09, 0xa0, 0x07, + 0x3c, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x01, 0x43, + 0x0f, 0x1c, 0x0a, 0x4d, 0x2f, 0x60, 0x04, 0xf0, + 0xfa, 0xfe, 0xad, 0x68, 0x28, 0x01, 0x00, 0x0f, + 0xb0, 0x42, 0x05, 0xd0, 0x01, 0x3c, 0xf4, 0xd2, + 0x01, 0x21, 0x9b, 0x20, 0xf2, 0xf7, 0x41, 0xf9, + 0x28, 0x02, 0x00, 0x0a, 0x08, 0x2e, 0x01, 0xd1, + 0x31, 0x05, 0x08, 0x43, 0xf8, 0xbd, 0x60, 0x00, + 0x07, 0x00, 0x01, 0x22, 0xd2, 0x05, 0x80, 0xb5, + 0x00, 0x21, 0x3c, 0x00, 0x3c, 0xf0, 0x00, 0x00, + 0x04, 0x20, 0x04, 0xf0, 0xdd, 0xfc, 0x0f, 0x20, + 0xff, 0xf7, 0xd6, 0xff, 0x0f, 0x21, 0x09, 0x04, + 0x08, 0x40, 0x00, 0x0c, 0x80, 0xbd, 0x00, 0x00, + 0x80, 0xb5, 0x05, 0x48, 0xfd, 0xf7, 0x4a, 0xf9, + 0x04, 0x48, 0xfd, 0xf7, 0x7b, 0xf8, 0x04, 0x48, + 0xfd, 0xf7, 0x6c, 0xf8, 0x80, 0xbd, 0x00, 0x00, + 0x89, 0x34, 0x01, 0x00, 0xed, 0x24, 0x00, 0x00, + 0x11, 0x1c, 0x00, 0x00, 0x3c, 0x00, 0x78, 0xf0, + 0x00, 0x00, 0x80, 0xb5, 0x02, 0x48, 0xf3, 0xf7, + 0x2a, 0xfc, 0x80, 0xbd, 0x00, 0x00, 0xd1, 0x24, + 0x00, 0x00, 0x80, 0xb5, 0xf2, 0xf7, 0x53, 0xf9, + 0x80, 0xbd, 0x80, 0xb5, 0x00, 0x21, 0x00, 0x20, + 0x01, 0xf0, 0x51, 0xfe, 0x03, 0x20, 0x02, 0xf0, + 0x46, 0xff, 0x80, 0xbd, 0x00, 0x00, 0x06, 0x48, + 0x80, 0xb5, 0xc1, 0x69, 0x00, 0x29, 0x06, 0xd1, + 0x01, 0x6a, 0x00, 0x29, 0x03, 0xd1, 0x3c, 0x00, + 0xb4, 0xf0, 0x00, 0x00, 0x81, 0x6b, 0x03, 0x48, + 0x00, 0xf0, 0x5e, 0xf9, 0x80, 0xbd, 0x00, 0x00, + 0xc4, 0x69, 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, + 0x10, 0xb5, 0x04, 0x4c, 0x20, 0x6a, 0xfc, 0xf7, + 0xb3, 0xfb, 0x03, 0x48, 0x21, 0x6a, 0x00, 0xf0, + 0x4f, 0xf9, 0x10, 0xbd, 0x1c, 0x75, 0x01, 0x00, + 0x34, 0x63, 0x01, 0x00, 0xb0, 0xb5, 0x0d, 0x4c, + 0x20, 0x7c, 0x00, 0x28, 0x02, 0xd0, 0x01, 0x21, + 0x3c, 0x00, 0xf0, 0xf0, 0x00, 0x00, 0xfd, 0xf7, + 0x86, 0xf9, 0x00, 0x25, 0x25, 0x70, 0xa0, 0x68, + 0x01, 0x28, 0x03, 0xd1, 0x00, 0x20, 0xa5, 0x60, + 0x01, 0xf0, 0x8f, 0xf8, 0xa0, 0x78, 0x01, 0x28, + 0x05, 0xd1, 0x03, 0x48, 0x98, 0x38, 0x00, 0x69, + 0xfc, 0xf7, 0xef, 0xfb, 0xa5, 0x70, 0xb0, 0xbd, + 0x00, 0x00, 0x84, 0x66, 0x01, 0x00, 0x80, 0xb5, + 0x00, 0x21, 0x01, 0x20, 0x01, 0xf0, 0x09, 0xfe, + 0x80, 0xbd, 0x3c, 0x00, 0x2c, 0xf1, 0x00, 0x00, + 0x38, 0xb5, 0x69, 0x46, 0x00, 0x25, 0xf8, 0xf7, + 0xb7, 0xfe, 0x04, 0x1c, 0x01, 0xd1, 0x01, 0x20, + 0x38, 0xbd, 0xa0, 0x68, 0x00, 0x28, 0x04, 0xd0, + 0x00, 0x99, 0xa1, 0x31, 0x08, 0x20, 0x04, 0xf0, + 0x73, 0xfa, 0x1c, 0x21, 0x20, 0x1c, 0xf1, 0xf7, + 0xa3, 0xf9, 0x28, 0x1c, 0xf0, 0xe7, 0x00, 0x00, + 0xfe, 0xb5, 0x07, 0x1c, 0x4c, 0x23, 0x39, 0x49, + 0x58, 0x43, 0x44, 0x18, 0x3c, 0x00, 0x68, 0xf1, + 0x00, 0x00, 0x25, 0x1c, 0x40, 0x35, 0x28, 0x7a, + 0x37, 0x49, 0x48, 0x76, 0x21, 0x1c, 0x30, 0x31, + 0x02, 0x91, 0x0c, 0x23, 0xc8, 0x56, 0x42, 0x1c, + 0x0a, 0x73, 0x49, 0x7b, 0x88, 0x42, 0x46, 0xda, + 0x32, 0x48, 0x00, 0x78, 0x80, 0x07, 0x3e, 0xd5, + 0x00, 0x20, 0x01, 0x90, 0xf6, 0xf7, 0xaf, 0xfa, + 0x00, 0x28, 0x2e, 0xd0, 0xac, 0x21, 0x09, 0x58, + 0x00, 0x29, 0x01, 0xd0, 0xe4, 0x30, 0x3c, 0x00, + 0xa4, 0xf1, 0x00, 0x00, 0x00, 0xe0, 0xcc, 0x30, + 0x06, 0x1c, 0x40, 0x68, 0x00, 0x28, 0x25, 0xd0, + 0x02, 0x99, 0x08, 0x7b, 0x01, 0x28, 0x11, 0xd1, + 0x20, 0x1c, 0x2e, 0x30, 0x29, 0x78, 0xf6, 0xf7, + 0xed, 0xf9, 0x71, 0x68, 0x03, 0xe0, 0x72, 0x18, + 0x12, 0x7a, 0x82, 0x42, 0x03, 0xd9, 0xff, 0x31, + 0x09, 0x06, 0x09, 0x0e, 0xf7, 0xd1, 0xa9, 0x70, + 0x01, 0x20, 0x01, 0x90, 0x23, 0x1c, 0x3e, 0x33, + 0x3c, 0x00, 0xe0, 0xf1, 0x00, 0x00, 0x1a, 0x1d, + 0x30, 0x1c, 0x00, 0x97, 0x01, 0x99, 0xf8, 0xf7, + 0x58, 0xfa, 0x00, 0x28, 0x11, 0xd0, 0xa8, 0x78, + 0x80, 0x19, 0x00, 0x7a, 0x00, 0xe0, 0x00, 0x20, + 0x68, 0x70, 0x68, 0x78, 0x01, 0x21, 0xfb, 0xf7, + 0xe0, 0xfd, 0x60, 0x60, 0x38, 0x1c, 0x01, 0xf0, + 0x14, 0xfe, 0x38, 0x1c, 0x01, 0xf0, 0xa5, 0xfb, + 0xfe, 0xbd, 0x02, 0x99, 0x08, 0x7b, 0xff, 0x30, + 0x48, 0x73, 0x3c, 0x00, 0x1c, 0xf2, 0x00, 0x00, + 0x38, 0x1c, 0xfc, 0xf7, 0x19, 0xfc, 0x03, 0xf0, + 0xc3, 0xfd, 0x06, 0x1c, 0xfb, 0xf7, 0x8e, 0xfe, + 0x41, 0x00, 0x76, 0x18, 0x68, 0x78, 0x61, 0x68, + 0xfb, 0xf7, 0x6a, 0xfe, 0x31, 0x18, 0x20, 0x8d, + 0x3b, 0x1c, 0x05, 0x4a, 0x03, 0xf0, 0x12, 0xfe, + 0xe5, 0xe7, 0x00, 0x00, 0x58, 0xe3, 0x01, 0x00, + 0x30, 0x80, 0x07, 0x00, 0x1d, 0x75, 0x01, 0x00, + 0xd5, 0x4e, 0x00, 0x00, 0x3c, 0x00, 0x58, 0xf2, + 0x00, 0x00, 0x03, 0x1c, 0x04, 0x48, 0x80, 0xb5, + 0x02, 0x79, 0x20, 0x30, 0x03, 0x49, 0x00, 0xf0, + 0x30, 0xf8, 0x80, 0xbd, 0x00, 0x00, 0xac, 0x7c, + 0x01, 0x00, 0xc4, 0x67, 0x01, 0x00, 0x03, 0x1c, + 0x04, 0x48, 0x80, 0xb5, 0xc2, 0x78, 0x38, 0x30, + 0x03, 0x49, 0x00, 0xf0, 0x22, 0xf8, 0x80, 0xbd, + 0x00, 0x00, 0xac, 0x7c, 0x01, 0x00, 0xc8, 0x67, + 0x01, 0x00, 0x03, 0x1c, 0x04, 0x48, 0x3c, 0x00, + 0x94, 0xf2, 0x00, 0x00, 0x80, 0xb5, 0x82, 0x79, + 0x50, 0x30, 0x03, 0x49, 0x00, 0xf0, 0x14, 0xf8, + 0x80, 0xbd, 0x00, 0x00, 0xac, 0x7c, 0x01, 0x00, + 0xcc, 0x67, 0x01, 0x00, 0x03, 0x1c, 0x04, 0x48, + 0x80, 0xb5, 0x42, 0x79, 0x68, 0x30, 0x03, 0x49, + 0x00, 0xf0, 0x06, 0xf8, 0x80, 0xbd, 0x00, 0x00, + 0xac, 0x7c, 0x01, 0x00, 0xd0, 0x67, 0x01, 0x00, + 0x10, 0xb5, 0x00, 0x24, 0x84, 0x80, 0x0b, 0x60, + 0x3c, 0x00, 0xd0, 0xf2, 0x00, 0x00, 0x19, 0x1c, + 0x51, 0x43, 0x01, 0x60, 0x19, 0x06, 0x09, 0x16, + 0x10, 0x22, 0x06, 0x30, 0xf1, 0xf7, 0x9f, 0xf9, + 0x10, 0xbd, 0xb0, 0xb5, 0x06, 0x4d, 0x00, 0x24, + 0xac, 0x60, 0xec, 0x60, 0xec, 0x61, 0x2c, 0x62, + 0x02, 0xf0, 0xf1, 0xfc, 0x00, 0xf0, 0x0d, 0xf8, + 0xec, 0x62, 0x2c, 0x70, 0xb0, 0xbd, 0x44, 0x7d, + 0x01, 0x00, 0x80, 0xb5, 0x80, 0x21, 0x01, 0x48, + 0xf1, 0xf7, 0x3c, 0x00, 0x0c, 0xf3, 0x00, 0x00, + 0xc7, 0xf8, 0x80, 0xbd, 0x04, 0x66, 0x01, 0x00, + 0xf8, 0xb5, 0x07, 0x4f, 0x00, 0x24, 0x00, 0x26, + 0x18, 0x20, 0x60, 0x43, 0xc5, 0x19, 0xee, 0x60, + 0x03, 0xf0, 0x42, 0xfd, 0x10, 0x35, 0x01, 0x34, + 0x02, 0x2c, 0x41, 0xc5, 0xf4, 0xdb, 0xf8, 0xbd, + 0xb8, 0x7d, 0x01, 0x00, 0x00, 0x23, 0x03, 0x60, + 0x04, 0x4b, 0x00, 0x29, 0x00, 0xd1, 0x19, 0x1c, + 0x41, 0x60, 0x00, 0x2a, 0x3c, 0x00, 0x48, 0xf3, + 0x00, 0x00, 0x00, 0xd1, 0x1a, 0x1c, 0x82, 0x60, + 0x70, 0x47, 0xbd, 0x75, 0x00, 0x00, 0x10, 0xb5, + 0x07, 0x4c, 0x20, 0x68, 0x01, 0x30, 0x20, 0x60, + 0x20, 0x28, 0x03, 0xd9, 0x58, 0x21, 0x58, 0x20, + 0xf1, 0xf7, 0x9d, 0xff, 0x21, 0x68, 0x01, 0x20, + 0x01, 0x39, 0x88, 0x40, 0x10, 0xbd, 0x60, 0x5b, + 0x01, 0x00, 0xb0, 0xb5, 0x0d, 0x1c, 0x04, 0x1c, + 0x21, 0x68, 0x00, 0x20, 0x00, 0x29, 0x3c, 0x00, + 0x84, 0xf3, 0x00, 0x00, 0x0a, 0xd0, 0xa9, 0x43, + 0x21, 0x60, 0x07, 0xd1, 0xa0, 0x68, 0xf1, 0xf7, + 0x23, 0xf8, 0x00, 0x28, 0x02, 0xd1, 0x21, 0x68, + 0x29, 0x43, 0x21, 0x60, 0xb0, 0xbd, 0x00, 0x00, + 0xb0, 0xb5, 0x0d, 0x1c, 0x04, 0x1c, 0x21, 0x68, + 0x00, 0x20, 0x29, 0x43, 0x21, 0x60, 0xa9, 0x42, + 0x07, 0xd1, 0x60, 0x68, 0xf1, 0xf7, 0x10, 0xf8, + 0x00, 0x28, 0x02, 0xd1, 0x21, 0x68, 0xa9, 0x43, + 0x3c, 0x00, 0xc0, 0xf3, 0x00, 0x00, 0x21, 0x60, + 0xb0, 0xbd, 0x1a, 0x4b, 0xb0, 0xb5, 0x9a, 0x6a, + 0x00, 0x28, 0x0b, 0xd0, 0x00, 0x2a, 0x07, 0xdb, + 0xb8, 0x24, 0x24, 0x58, 0x01, 0x3c, 0xa4, 0x1a, + 0x00, 0x19, 0xb0, 0x30, 0x00, 0x7b, 0x02, 0xe0, + 0x0e, 0x20, 0x00, 0xe0, 0x0d, 0x20, 0x5d, 0x6a, + 0x12, 0x4c, 0x00, 0x2d, 0x01, 0xd0, 0x20, 0x78, + 0x00, 0xe0, 0x20, 0x5c, 0xff, 0x24, 0xa8, 0x34, + 0xc4, 0x40, 0x3c, 0x00, 0xfc, 0xf3, 0x00, 0x00, + 0x9c, 0x60, 0xf5, 0x24, 0xc4, 0x40, 0x9c, 0x61, + 0xfd, 0x24, 0xc4, 0x40, 0xdc, 0x61, 0xff, 0x24, + 0x29, 0x34, 0xc4, 0x40, 0x5c, 0x61, 0xff, 0x24, + 0x53, 0x34, 0xc4, 0x40, 0x00, 0x20, 0x0c, 0x33, + 0x11, 0xc3, 0x00, 0x29, 0x05, 0xd0, 0x00, 0x2a, + 0x03, 0xdc, 0x02, 0x21, 0x50, 0x42, 0x00, 0xf0, + 0x65, 0xfb, 0xb0, 0xbd, 0xac, 0x7e, 0x01, 0x00, + 0xb8, 0x52, 0x01, 0x00, 0x3c, 0x00, 0x38, 0xf4, + 0x00, 0x00, 0x10, 0xb5, 0x13, 0x4c, 0x13, 0x48, + 0x21, 0x1c, 0xff, 0x31, 0x69, 0x31, 0x0e, 0xc9, + 0x0e, 0xc0, 0x21, 0x1c, 0xff, 0x31, 0x24, 0x22, + 0x75, 0x31, 0x0f, 0x48, 0xf1, 0xf7, 0x51, 0xf8, + 0x21, 0x1c, 0xff, 0x31, 0x3c, 0x22, 0x99, 0x31, + 0x0d, 0x48, 0xf1, 0xf7, 0xa6, 0xf8, 0xfc, 0xf7, + 0xa2, 0xff, 0x21, 0x1c, 0xff, 0x31, 0x10, 0x22, + 0xd5, 0x31, 0x09, 0x48, 0xf1, 0xf7, 0x3c, 0x00, + 0x74, 0xf4, 0x00, 0x00, 0x41, 0xf8, 0x21, 0x1c, + 0xff, 0x31, 0x28, 0x22, 0xe5, 0x31, 0x07, 0x48, + 0xf1, 0xf7, 0x96, 0xf8, 0x10, 0xbd, 0x00, 0x00, + 0x40, 0x63, 0x01, 0x00, 0x00, 0x80, 0x07, 0x00, + 0x0c, 0x80, 0x07, 0x00, 0x30, 0x80, 0x07, 0x00, + 0x80, 0x80, 0x07, 0x00, 0xa0, 0x80, 0x07, 0x00, + 0xf8, 0xb5, 0x00, 0x28, 0x59, 0xd0, 0x04, 0xf0, + 0x4b, 0xf9, 0xf8, 0xf7, 0xb3, 0xfb, 0x00, 0x22, + 0x3c, 0x00, 0xb0, 0xf4, 0x00, 0x00, 0x01, 0x21, + 0x13, 0x20, 0x04, 0xf0, 0x7c, 0xf9, 0x2a, 0x49, + 0x29, 0x48, 0x49, 0x6c, 0x01, 0x60, 0x00, 0x21, + 0x29, 0x48, 0xc9, 0x43, 0x41, 0x60, 0x26, 0x4c, + 0x14, 0x34, 0x61, 0x6c, 0x81, 0x60, 0xa1, 0x6c, + 0xc1, 0x60, 0x00, 0x20, 0x25, 0x4d, 0x02, 0x26, + 0x01, 0x01, 0x6e, 0x50, 0x0a, 0x19, 0x4f, 0x19, + 0x50, 0x32, 0x04, 0x37, 0x0e, 0xca, 0x01, 0x30, + 0x08, 0x28, 0x3c, 0x00, 0xec, 0xf4, 0x00, 0x00, + 0x0e, 0xc7, 0xf4, 0xdb, 0x14, 0x22, 0x21, 0x1c, + 0xcc, 0x31, 0x1e, 0x48, 0xf1, 0xf7, 0x5a, 0xf8, + 0x1d, 0x48, 0x81, 0x78, 0x09, 0x09, 0x09, 0x01, + 0x81, 0x70, 0x00, 0x21, 0xc1, 0x70, 0x41, 0x70, + 0x21, 0x1c, 0xe0, 0x31, 0x0a, 0x78, 0x02, 0x70, + 0x49, 0x78, 0x41, 0x70, 0x21, 0x1c, 0xe8, 0x31, + 0x30, 0x22, 0x08, 0x30, 0xf1, 0xf7, 0x46, 0xf8, + 0x21, 0x1c, 0xff, 0x31, 0x3c, 0x00, 0x28, 0xf5, + 0x00, 0x00, 0x50, 0x22, 0x19, 0x31, 0x12, 0x48, + 0xf1, 0xf7, 0x3f, 0xf8, 0x83, 0x20, 0x80, 0x00, + 0x14, 0x22, 0x21, 0x18, 0x10, 0x48, 0xf1, 0xf7, + 0x38, 0xf8, 0x11, 0x20, 0x40, 0x01, 0x84, 0x22, + 0x21, 0x18, 0x0d, 0x48, 0xf1, 0xf7, 0x31, 0xf8, + 0xff, 0xf7, 0x73, 0xff, 0x20, 0x1c, 0xf1, 0xf7, + 0x28, 0xfd, 0xf8, 0xbd, 0xff, 0xf7, 0x6d, 0xff, + 0xfb, 0xe7, 0x08, 0x20, 0x07, 0x00, 0x3c, 0x00, + 0x64, 0xf5, 0x00, 0x00, 0x2c, 0x63, 0x01, 0x00, + 0x40, 0x20, 0x07, 0x00, 0x00, 0x30, 0x07, 0x00, + 0x00, 0x40, 0x07, 0x00, 0x00, 0x50, 0x07, 0x00, + 0x00, 0x60, 0x07, 0x00, 0x10, 0x00, 0x07, 0x00, + 0x00, 0x90, 0x07, 0x00, 0xf8, 0xb5, 0x05, 0x1c, + 0x18, 0x48, 0xc0, 0x68, 0x00, 0x28, 0x25, 0xd0, + 0x16, 0x4e, 0x01, 0x36, 0x74, 0x78, 0x30, 0x78, + 0x27, 0x1a, 0x79, 0x19, 0x20, 0x1c, 0xf1, 0xf7, + 0x3c, 0x00, 0xa0, 0xf5, 0x00, 0x00, 0x4b, 0xf8, + 0x00, 0x90, 0x29, 0x1c, 0x20, 0x1c, 0xf1, 0xf7, + 0xb2, 0xf8, 0xc1, 0x19, 0x20, 0x1c, 0xf1, 0xf7, + 0x42, 0xf8, 0x60, 0x1a, 0x30, 0x70, 0x70, 0x1e, + 0x80, 0x68, 0x00, 0x28, 0x0d, 0xd0, 0x53, 0x36, + 0xf4, 0x78, 0x00, 0x99, 0x20, 0x1c, 0xf1, 0xf7, + 0xa2, 0xf8, 0xb1, 0x78, 0x61, 0x1a, 0x41, 0x18, + 0x20, 0x1c, 0xf1, 0xf7, 0x9c, 0xf8, 0x60, 0x1a, + 0xb0, 0x70, 0x3c, 0x00, 0xdc, 0xf5, 0x00, 0x00, + 0x03, 0x48, 0x5c, 0x30, 0x01, 0x69, 0xc2, 0x68, + 0x69, 0x43, 0x51, 0x18, 0xc1, 0x60, 0xf8, 0xbd, + 0x44, 0x7d, 0x01, 0x00, 0xb0, 0xb5, 0x0c, 0x4d, + 0xe8, 0x68, 0x29, 0x69, 0x40, 0x18, 0x7d, 0x21, + 0x09, 0x01, 0x44, 0x18, 0x20, 0x1c, 0x03, 0xf0, + 0x0b, 0xfb, 0x00, 0x28, 0x0a, 0xd0, 0x03, 0xf0, + 0xcf, 0xfb, 0x01, 0x1b, 0x28, 0x69, 0xf1, 0xf7, + 0x7d, 0xf8, 0x01, 0x30, 0x3c, 0x00, 0x18, 0xf6, + 0x00, 0x00, 0x00, 0x04, 0x00, 0x0c, 0xff, 0xf7, + 0xb2, 0xff, 0xb0, 0xbd, 0x00, 0x00, 0xa0, 0x7d, + 0x01, 0x00, 0x70, 0xb5, 0x10, 0x4c, 0x60, 0x68, + 0x80, 0x25, 0xa8, 0x43, 0x60, 0x60, 0x20, 0x68, + 0x28, 0x43, 0x20, 0x60, 0x0d, 0x4e, 0x30, 0x1c, + 0x10, 0x30, 0xf3, 0xf7, 0xc8, 0xfc, 0x00, 0x28, + 0x03, 0xd1, 0x07, 0x21, 0x85, 0x20, 0xf1, 0xf7, + 0x2a, 0xfe, 0x08, 0x48, 0x00, 0x21, 0x3c, 0x00, + 0x54, 0xf6, 0x00, 0x00, 0x80, 0x68, 0x41, 0x63, + 0xc0, 0x6c, 0x10, 0x30, 0x70, 0x61, 0x01, 0x20, + 0x30, 0x61, 0x20, 0x68, 0xa8, 0x43, 0x20, 0x60, + 0x70, 0xbd, 0x00, 0x00, 0xf4, 0x00, 0x07, 0x00, + 0x00, 0x30, 0x07, 0x00, 0x24, 0x7e, 0x01, 0x00, + 0x01, 0x1c, 0x00, 0x20, 0x05, 0x29, 0x80, 0xb5, + 0x09, 0xd2, 0x02, 0xa3, 0x5b, 0x5c, 0x5b, 0x00, + 0x9f, 0x44, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, + 0x3c, 0x00, 0x90, 0xf6, 0x00, 0x00, 0x03, 0x00, + 0xff, 0xf7, 0xcf, 0xfc, 0x80, 0xbd, 0x01, 0x22, + 0x92, 0x02, 0x80, 0xb5, 0x00, 0x21, 0x07, 0x20, + 0x04, 0xf0, 0xab, 0xf9, 0x80, 0xbd, 0x80, 0xb5, + 0x40, 0x22, 0x00, 0x21, 0x00, 0x20, 0x04, 0xf0, + 0xa4, 0xf9, 0x03, 0x22, 0x00, 0x21, 0x00, 0x20, + 0x04, 0xf0, 0x9f, 0xf9, 0x80, 0xbd, 0x70, 0xb5, + 0x0e, 0x1c, 0x05, 0x1c, 0x14, 0x1c, 0x08, 0x28, + 0x0e, 0xd1, 0x3c, 0x00, 0xcc, 0xf6, 0x00, 0x00, + 0x00, 0xf0, 0x00, 0xfc, 0x0e, 0x28, 0x01, 0xd1, + 0x14, 0x20, 0x00, 0xe0, 0x10, 0x20, 0xe1, 0x03, + 0x00, 0xd5, 0x01, 0x38, 0xc0, 0x06, 0x0a, 0x49, + 0xc0, 0x0e, 0x88, 0x71, 0x08, 0xe0, 0x09, 0x2d, + 0x06, 0xd1, 0xa0, 0x04, 0x01, 0xd5, 0x00, 0x20, + 0x00, 0xe0, 0x01, 0x20, 0xf3, 0xf7, 0xb0, 0xf9, + 0x34, 0x40, 0x21, 0x1c, 0x32, 0x1c, 0x28, 0x1c, + 0x04, 0xf0, 0x7a, 0xf9, 0x3c, 0x00, 0x08, 0xf7, + 0x00, 0x00, 0x70, 0xbd, 0x00, 0x00, 0x00, 0x80, + 0x07, 0x00, 0x70, 0xb5, 0x00, 0x24, 0x13, 0x29, + 0x11, 0xd8, 0x00, 0x28, 0x01, 0xd1, 0x08, 0x4e, + 0x08, 0x25, 0x01, 0x28, 0x01, 0xd1, 0x07, 0x4e, + 0x09, 0x25, 0x00, 0xf0, 0x78, 0xfa, 0x00, 0x28, + 0x05, 0xd0, 0x02, 0x1c, 0x31, 0x1c, 0x28, 0x1c, + 0xff, 0xf7, 0xc3, 0xff, 0x01, 0x24, 0x20, 0x1c, + 0x70, 0xbd, 0xf8, 0xff, 0x07, 0x00, 0x3c, 0x00, + 0x44, 0xf7, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, + 0x01, 0x22, 0xd2, 0x02, 0x80, 0xb5, 0x00, 0x21, + 0x07, 0x20, 0x04, 0xf0, 0x53, 0xf9, 0x80, 0xbd, + 0x0f, 0x22, 0x12, 0x04, 0x07, 0x21, 0x49, 0x04, + 0x80, 0xb5, 0x09, 0x20, 0x04, 0xf0, 0x4a, 0xf9, + 0x80, 0xbd, 0x00, 0x00, 0x80, 0xb5, 0x00, 0x21, + 0x04, 0x20, 0x04, 0xf0, 0x1b, 0xfc, 0x40, 0x21, + 0x00, 0x20, 0x04, 0xf0, 0x17, 0xfc, 0x04, 0x49, + 0x3c, 0x00, 0x80, 0xf7, 0x00, 0x00, 0x00, 0x20, + 0x88, 0x60, 0x02, 0x48, 0x09, 0x69, 0x20, 0x30, + 0xff, 0xf7, 0x09, 0xfe, 0x80, 0xbd, 0x64, 0x73, + 0x01, 0x00, 0xb0, 0xb5, 0x60, 0x21, 0x00, 0x20, + 0x04, 0xf0, 0x07, 0xfc, 0x11, 0x4d, 0x00, 0x24, + 0x00, 0x22, 0x04, 0x20, 0x29, 0x5d, 0x04, 0xf0, + 0x28, 0xf9, 0x0c, 0x20, 0x03, 0xf0, 0x9b, 0xfb, + 0x01, 0x34, 0x24, 0x06, 0x24, 0x0e, 0x05, 0x2c, + 0xf2, 0xd3, 0x3c, 0x00, 0xbc, 0xf7, 0x00, 0x00, + 0x0f, 0x22, 0x00, 0x21, 0x0a, 0x20, 0x04, 0xf0, + 0x1b, 0xf9, 0x61, 0x21, 0x00, 0x20, 0x04, 0xf0, + 0xef, 0xfb, 0x06, 0x49, 0x01, 0x20, 0x88, 0x60, + 0x04, 0x48, 0x09, 0x69, 0x20, 0x30, 0xff, 0xf7, + 0xcd, 0xfd, 0xff, 0x20, 0x2d, 0x30, 0xb0, 0xbd, + 0xa8, 0x58, 0x01, 0x00, 0x64, 0x73, 0x01, 0x00, + 0xf8, 0xb5, 0x06, 0x1c, 0x12, 0x48, 0xc6, 0x70, + 0x01, 0x20, 0xff, 0xf7, 0x3c, 0x00, 0xf8, 0xf7, + 0x00, 0x00, 0xfd, 0xfb, 0x01, 0x27, 0xbf, 0x02, + 0x04, 0x1c, 0xb8, 0x43, 0x01, 0x1c, 0x01, 0x20, + 0x04, 0xf0, 0xd1, 0xfb, 0x03, 0x20, 0xff, 0xf7, + 0xf2, 0xfb, 0x05, 0x1c, 0xb8, 0x43, 0x01, 0x1c, + 0x03, 0x20, 0x04, 0xf0, 0xc8, 0xfb, 0x30, 0x1c, + 0x00, 0xf0, 0x9f, 0xf9, 0x00, 0xf0, 0x57, 0xf8, + 0x21, 0x1c, 0x01, 0x20, 0x04, 0xf0, 0xbf, 0xfb, + 0x29, 0x1c, 0x03, 0x20, 0x04, 0xf0, 0x3c, 0x00, + 0x34, 0xf8, 0x00, 0x00, 0xbb, 0xfb, 0x00, 0x20, + 0xf8, 0xbd, 0x00, 0x00, 0x64, 0x73, 0x01, 0x00, + 0x80, 0xb5, 0x00, 0x22, 0x40, 0x21, 0x00, 0x20, + 0x04, 0xf0, 0xd8, 0xf8, 0x80, 0xbd, 0x00, 0x00, + 0x70, 0xb5, 0x05, 0x1c, 0x01, 0x24, 0x09, 0x20, + 0xff, 0xf7, 0xcc, 0xfb, 0x0f, 0x21, 0x09, 0x04, + 0x88, 0x43, 0x03, 0x21, 0x89, 0x04, 0xe2, 0x04, + 0x05, 0x2d, 0x12, 0x4e, 0x20, 0xd2, 0x02, 0xa3, + 0x3c, 0x00, 0x70, 0xf8, 0x00, 0x00, 0x5b, 0x5d, + 0x5b, 0x00, 0x9f, 0x44, 0x00, 0x00, 0x06, 0x09, + 0x0c, 0x10, 0x03, 0x00, 0x03, 0x21, 0x09, 0x04, + 0x0c, 0xe0, 0x01, 0x21, 0x09, 0x04, 0x09, 0xe0, + 0x01, 0x21, 0x49, 0x04, 0x06, 0xe0, 0xf3, 0x68, + 0x04, 0x2b, 0x05, 0xd9, 0x02, 0xe0, 0xf3, 0x68, + 0x04, 0x2b, 0x01, 0xd8, 0x01, 0x43, 0x01, 0xe0, + 0x10, 0x43, 0x01, 0x1c, 0x09, 0x20, 0x04, 0xf0, + 0x80, 0xfb, 0x3c, 0x00, 0xac, 0xf8, 0x00, 0x00, + 0x20, 0x1c, 0x70, 0xbd, 0x00, 0x24, 0xfb, 0xe7, + 0x64, 0x73, 0x01, 0x00, 0x01, 0x21, 0xc9, 0x05, + 0x00, 0x28, 0x80, 0xb5, 0x02, 0xd0, 0x0a, 0x1c, + 0x00, 0x21, 0x00, 0xe0, 0x00, 0x22, 0x04, 0x20, + 0x04, 0xf0, 0x96, 0xf8, 0x80, 0xbd, 0x00, 0x00, + 0xf0, 0xb5, 0x91, 0xb0, 0x00, 0x26, 0x40, 0x21, + 0x01, 0xa8, 0xf0, 0xf7, 0xdd, 0xfd, 0x2a, 0x4f, + 0xb8, 0x79, 0x01, 0x22, 0x3c, 0x00, 0xe8, 0xf8, + 0x00, 0x00, 0x52, 0x03, 0x00, 0x90, 0x00, 0x21, + 0x06, 0x20, 0x04, 0xf0, 0x84, 0xf8, 0x60, 0x21, + 0x00, 0x20, 0x04, 0xf0, 0x58, 0xfb, 0x61, 0x21, + 0x00, 0x20, 0x04, 0xf0, 0x54, 0xfb, 0x08, 0x20, + 0x03, 0xf0, 0xef, 0xfa, 0x00, 0x24, 0x0f, 0x20, + 0xff, 0xf7, 0x71, 0xfb, 0x40, 0x05, 0x05, 0x0f, + 0xa8, 0x00, 0x01, 0xa9, 0x09, 0x58, 0x01, 0xaa, + 0x01, 0x31, 0x01, 0x34, 0x0c, 0x2c, 0x3c, 0x00, + 0x24, 0xf9, 0x00, 0x00, 0x11, 0x50, 0xf1, 0xd3, + 0x00, 0x20, 0x81, 0x00, 0x01, 0xaa, 0x51, 0x58, + 0xb1, 0x42, 0x01, 0xd9, 0x0e, 0x1c, 0x05, 0x1c, + 0x01, 0x30, 0x10, 0x28, 0xf5, 0xd3, 0x06, 0x20, + 0xff, 0xf7, 0x58, 0xfb, 0x0f, 0x21, 0x49, 0x02, + 0x88, 0x43, 0x69, 0x02, 0x08, 0x43, 0x01, 0x21, + 0x49, 0x03, 0x01, 0x43, 0x06, 0x20, 0x04, 0xf0, + 0x29, 0xfb, 0x0d, 0x48, 0x84, 0x68, 0x64, 0x34, + 0x3c, 0x00, 0x60, 0xf9, 0x00, 0x00, 0x08, 0xe0, + 0x20, 0x1c, 0x03, 0xf0, 0x5a, 0xf9, 0x00, 0x28, + 0x03, 0xd0, 0x01, 0x21, 0x95, 0x20, 0xf1, 0xf7, + 0x98, 0xfc, 0x0f, 0x20, 0xff, 0xf7, 0x3d, 0xfb, + 0x00, 0x04, 0xf1, 0xd5, 0x87, 0x20, 0x03, 0xf0, + 0xb2, 0xfa, 0x00, 0x98, 0xb8, 0x71, 0x11, 0xb0, + 0xf0, 0xbd, 0x20, 0x10, 0x07, 0x00, 0x00, 0x01, + 0x07, 0x00, 0x10, 0xb5, 0x17, 0x4c, 0x61, 0x69, + 0x00, 0x29, 0x3c, 0x00, 0x9c, 0xf9, 0x00, 0x00, + 0x04, 0xd0, 0x0a, 0x21, 0x13, 0x20, 0x03, 0xf0, + 0x47, 0xfe, 0x10, 0xbd, 0x01, 0x1c, 0x12, 0x48, + 0x01, 0x29, 0x00, 0x78, 0x0c, 0xd0, 0x11, 0x29, + 0xf7, 0xd1, 0x05, 0x28, 0x03, 0xd1, 0x01, 0x21, + 0x13, 0x20, 0xf1, 0xf7, 0x71, 0xfc, 0x20, 0x78, + 0x07, 0x28, 0xee, 0xd1, 0x02, 0x21, 0x0a, 0xe0, + 0x05, 0x28, 0x07, 0xd0, 0x06, 0x28, 0x0a, 0xd0, + 0x07, 0x28, 0xf7, 0xd0, 0x3c, 0x00, 0xd8, 0xf9, + 0x00, 0x00, 0x08, 0x28, 0xe4, 0xd1, 0x00, 0x20, + 0x05, 0xe0, 0x01, 0x21, 0x13, 0x20, 0xf1, 0xf7, + 0x5e, 0xfc, 0x10, 0xbd, 0x01, 0x20, 0x02, 0xf0, + 0x6c, 0xfd, 0x10, 0xbd, 0x00, 0x00, 0x7c, 0x78, + 0x01, 0x00, 0x0d, 0x49, 0x80, 0xb5, 0x09, 0x78, + 0x03, 0x29, 0x01, 0xd1, 0x00, 0x28, 0x0b, 0xd0, + 0x07, 0x29, 0x01, 0xd1, 0x00, 0x28, 0x07, 0xd0, + 0x02, 0x29, 0x01, 0xd1, 0x00, 0x28, 0x3c, 0x00, + 0x14, 0xfa, 0x00, 0x00, 0x03, 0xd1, 0x05, 0x29, + 0x09, 0xd1, 0x00, 0x28, 0x07, 0xd0, 0x00, 0x20, + 0xfc, 0xf7, 0x28, 0xfd, 0x00, 0x22, 0x13, 0x21, + 0x11, 0x20, 0x03, 0xf0, 0xc1, 0xfe, 0x80, 0xbd, + 0x7c, 0x78, 0x01, 0x00, 0x80, 0xb5, 0x06, 0x22, + 0x08, 0x21, 0x00, 0x20, 0x03, 0xf0, 0xde, 0xff, + 0x80, 0xbd, 0x00, 0x00, 0x07, 0x48, 0x80, 0xb5, + 0x40, 0x69, 0x00, 0x28, 0x01, 0xd1, 0xf1, 0xf7, + 0x3c, 0x00, 0x50, 0xfa, 0x00, 0x00, 0x33, 0xff, + 0x05, 0x49, 0x05, 0x4a, 0x08, 0x68, 0x50, 0x61, + 0x48, 0x68, 0x90, 0x61, 0x01, 0x20, 0x80, 0xbd, + 0x00, 0x00, 0x64, 0x73, 0x01, 0x00, 0xb0, 0x58, + 0x01, 0x00, 0x10, 0x00, 0x07, 0x00, 0x07, 0x48, + 0x80, 0xb5, 0x40, 0x69, 0x00, 0x28, 0x01, 0xd1, + 0xf1, 0xf7, 0x1d, 0xff, 0x05, 0x49, 0x05, 0x4a, + 0x08, 0x68, 0x90, 0x61, 0x48, 0x68, 0x50, 0x61, + 0x01, 0x20, 0x3c, 0x00, 0x8c, 0xfa, 0x00, 0x00, + 0x80, 0xbd, 0x00, 0x00, 0x64, 0x73, 0x01, 0x00, + 0xb0, 0x58, 0x01, 0x00, 0x10, 0x00, 0x07, 0x00, + 0x11, 0xb5, 0x00, 0xab, 0x59, 0x78, 0x14, 0x48, + 0x01, 0x23, 0xc0, 0x56, 0x00, 0x22, 0x09, 0x18, + 0x0b, 0x06, 0x1b, 0x16, 0x13, 0x21, 0x13, 0x2b, + 0x02, 0xdd, 0x00, 0xab, 0x59, 0x70, 0x07, 0xe0, + 0x00, 0x2b, 0x02, 0xda, 0x00, 0xab, 0x5a, 0x70, + 0x02, 0xe0, 0x1c, 0x1c, 0x3c, 0x00, 0xc8, 0xfa, + 0x00, 0x00, 0x00, 0xab, 0x5c, 0x70, 0x00, 0xab, + 0x1b, 0x78, 0x18, 0x18, 0x00, 0x06, 0x00, 0x16, + 0x13, 0x28, 0x02, 0xdd, 0x00, 0xab, 0x19, 0x70, + 0x06, 0xe0, 0x00, 0x28, 0x02, 0xda, 0x00, 0xab, + 0x1a, 0x70, 0x01, 0xe0, 0x00, 0xab, 0x18, 0x70, + 0x00, 0x98, 0x18, 0xbd, 0x00, 0x00, 0x64, 0x73, + 0x01, 0x00, 0x38, 0xb5, 0x0c, 0x1c, 0x15, 0x49, + 0x00, 0xab, 0x49, 0x68, 0x13, 0x25, 0x3c, 0x00, + 0x04, 0xfb, 0x00, 0x00, 0x00, 0x91, 0x59, 0x78, + 0x09, 0x18, 0x59, 0x70, 0x19, 0x78, 0x08, 0x18, + 0x18, 0x70, 0x19, 0x88, 0x10, 0x48, 0x02, 0x2c, + 0xc1, 0x80, 0x01, 0xd0, 0x00, 0x2c, 0x0b, 0xd1, + 0x00, 0xab, 0x18, 0x78, 0x13, 0x28, 0x00, 0xd9, + 0x1d, 0x70, 0x00, 0xab, 0x19, 0x78, 0x00, 0x20, + 0xff, 0xf7, 0xee, 0xfd, 0x02, 0x2c, 0x01, 0xd0, + 0x01, 0x2c, 0x09, 0xd1, 0x00, 0xab, 0x58, 0x78, + 0x3c, 0x00, 0x40, 0xfb, 0x00, 0x00, 0x13, 0x28, + 0x00, 0xd9, 0x5d, 0x70, 0x00, 0xab, 0x59, 0x78, + 0x01, 0x20, 0xff, 0xf7, 0xe0, 0xfd, 0x38, 0xbd, + 0x00, 0x00, 0x64, 0x73, 0x01, 0x00, 0xa0, 0x58, + 0x01, 0x00, 0x70, 0x47, 0x00, 0x00, 0xb0, 0xb5, + 0x04, 0x1c, 0x0e, 0x28, 0x13, 0x4d, 0x04, 0xd0, + 0x12, 0x49, 0xa0, 0x00, 0x00, 0x19, 0x4d, 0x39, + 0x45, 0x18, 0x06, 0x20, 0xff, 0xf7, 0x3d, 0xfa, + 0x0f, 0x49, 0x3c, 0x00, 0x7c, 0xfb, 0x00, 0x00, + 0xe0, 0x22, 0x09, 0x19, 0x10, 0x39, 0xc9, 0x7b, + 0x90, 0x43, 0x49, 0x01, 0x11, 0x40, 0x01, 0x43, + 0x06, 0x20, 0x04, 0xf0, 0x0d, 0xfa, 0x29, 0x1c, + 0x05, 0x20, 0x09, 0x4a, 0x03, 0xf0, 0x30, 0xff, + 0x08, 0x48, 0x1f, 0x22, 0x00, 0x19, 0x10, 0x38, + 0xc0, 0x7b, 0xc1, 0x04, 0xd2, 0x04, 0x08, 0x20, + 0x03, 0xf0, 0x26, 0xff, 0xb0, 0xbd, 0x00, 0x00, + 0xb4, 0x09, 0x00, 0x00, 0x3c, 0x00, 0xb8, 0xfb, + 0x00, 0x00, 0x14, 0x45, 0x01, 0x00, 0xff, 0x0f, + 0x00, 0x00, 0xc0, 0x58, 0x01, 0x00, 0x70, 0x47, + 0x00, 0x00, 0x80, 0xb5, 0x06, 0x49, 0x00, 0x28, + 0x01, 0xd1, 0x08, 0x68, 0x80, 0xbd, 0x01, 0x28, + 0x01, 0xd1, 0x48, 0x68, 0x80, 0xbd, 0xf1, 0xf7, + 0x90, 0xfb, 0x00, 0x20, 0x80, 0xbd, 0x7c, 0x73, + 0x01, 0x00, 0x01, 0x48, 0x40, 0x68, 0x70, 0x47, + 0x00, 0x00, 0xa0, 0x58, 0x01, 0x00, 0x3c, 0x00, + 0xf4, 0xfb, 0x00, 0x00, 0x04, 0x48, 0x01, 0x23, + 0x04, 0x49, 0xc0, 0x56, 0xc9, 0x56, 0x40, 0x18, + 0x00, 0x04, 0x00, 0x0c, 0x70, 0x47, 0x00, 0x00, + 0xa0, 0x58, 0x01, 0x00, 0xa2, 0x58, 0x01, 0x00, + 0x01, 0x48, 0x40, 0x68, 0x70, 0x47, 0x00, 0x00, + 0x64, 0x73, 0x01, 0x00, 0xf8, 0xb5, 0x05, 0x1c, + 0x0e, 0x1c, 0x00, 0xf0, 0x55, 0xf9, 0x04, 0x1c, + 0x00, 0xf0, 0x58, 0xf9, 0x00, 0x28, 0x2c, 0xd0, + 0x3c, 0x00, 0x30, 0xfc, 0x00, 0x00, 0xb3, 0x00, + 0x60, 0x1e, 0x00, 0x2d, 0x1c, 0x4e, 0x19, 0x49, + 0x1a, 0x4a, 0x06, 0xd1, 0x0b, 0x25, 0x0e, 0x2c, + 0x00, 0xd1, 0x19, 0x4a, 0xd2, 0x58, 0x08, 0x56, + 0x08, 0xe0, 0x01, 0x2d, 0x1c, 0xd1, 0x9a, 0x18, + 0x04, 0x36, 0x08, 0x18, 0x08, 0x25, 0x0e, 0x23, + 0x12, 0x6d, 0xc0, 0x56, 0x07, 0x1c, 0x47, 0x43, + 0xfb, 0x00, 0xdf, 0x19, 0x12, 0x4b, 0x3f, 0x21, + 0x58, 0x43, 0x3c, 0x00, 0x6c, 0xfc, 0x00, 0x00, + 0x11, 0x4b, 0xa9, 0x40, 0x0c, 0x1c, 0x38, 0x18, + 0xc0, 0x18, 0x14, 0x40, 0xec, 0x40, 0xc0, 0x11, + 0x60, 0x43, 0x1b, 0x0a, 0xc0, 0x18, 0x80, 0x12, + 0x03, 0xd1, 0x01, 0x20, 0x04, 0xe0, 0x00, 0x20, + 0xf8, 0xbd, 0x3f, 0x28, 0x00, 0xdd, 0x3f, 0x20, + 0x30, 0x60, 0xa8, 0x40, 0x08, 0x40, 0x8a, 0x43, + 0x10, 0x43, 0xf5, 0xe7, 0xcc, 0x59, 0x01, 0x00, + 0xdc, 0x58, 0x01, 0x00, 0x3c, 0x00, 0xa8, 0xfc, + 0x00, 0x00, 0x7c, 0x73, 0x01, 0x00, 0x7c, 0x59, + 0x01, 0x00, 0x06, 0x06, 0x00, 0x00, 0x26, 0x00, + 0x02, 0x00, 0x03, 0x48, 0x08, 0xb5, 0xc0, 0x88, + 0x00, 0xab, 0x18, 0x80, 0x00, 0x98, 0x08, 0xbd, + 0x00, 0x00, 0xa0, 0x58, 0x01, 0x00, 0xb0, 0xb5, + 0x0b, 0x4d, 0x09, 0x4c, 0x0e, 0x20, 0x6c, 0x60, + 0xff, 0xf7, 0x8d, 0xf9, 0x09, 0x49, 0x02, 0x1c, + 0xc8, 0x60, 0x01, 0x06, 0x09, 0x0e, 0x3c, 0x00, + 0xe4, 0xfc, 0x00, 0x00, 0x13, 0x3a, 0x02, 0x2a, + 0x02, 0xd9, 0x17, 0x38, 0x04, 0x28, 0x00, 0xd8, + 0x00, 0x21, 0x08, 0x1c, 0x6c, 0x60, 0xb0, 0xbd, + 0x04, 0x18, 0x02, 0x00, 0x60, 0x00, 0x07, 0x00, + 0x64, 0x73, 0x01, 0x00, 0x0a, 0x48, 0x98, 0xb5, + 0x02, 0x78, 0x13, 0x21, 0x14, 0x2a, 0x00, 0xd3, + 0x01, 0x70, 0x42, 0x78, 0x14, 0x2a, 0x00, 0xd3, + 0x41, 0x70, 0x06, 0x4c, 0x60, 0x68, 0xff, 0xf7, + 0x3c, 0x00, 0x20, 0xfd, 0x00, 0x00, 0xbd, 0xfe, + 0x00, 0x90, 0x00, 0xab, 0x18, 0x88, 0xe0, 0x80, + 0x00, 0xf0, 0x75, 0xff, 0x98, 0xbd, 0xa4, 0x58, + 0x01, 0x00, 0xa0, 0x58, 0x01, 0x00, 0x03, 0x48, + 0x80, 0xb5, 0x41, 0x78, 0x01, 0x20, 0xff, 0xf7, + 0xe6, 0xfc, 0x80, 0xbd, 0x00, 0x00, 0xa6, 0x58, + 0x01, 0x00, 0x03, 0x48, 0x80, 0xb5, 0x01, 0x78, + 0x00, 0x20, 0xff, 0xf7, 0xdc, 0xfc, 0x80, 0xbd, + 0x00, 0x00, 0x3c, 0x00, 0x5c, 0xfd, 0x00, 0x00, + 0xa6, 0x58, 0x01, 0x00, 0xb0, 0xb5, 0x05, 0x4d, + 0x00, 0x24, 0x20, 0x1c, 0xff, 0xf7, 0x44, 0xf9, + 0x01, 0x34, 0x10, 0x2c, 0x01, 0xc5, 0xf8, 0xd3, + 0xb0, 0xbd, 0x00, 0x00, 0xd4, 0x44, 0x01, 0x00, + 0x04, 0x49, 0x80, 0xb5, 0x88, 0x70, 0x04, 0x49, + 0x80, 0x00, 0x09, 0x58, 0x07, 0x20, 0x04, 0xf0, + 0x0f, 0xf9, 0x80, 0xbd, 0x64, 0x73, 0x01, 0x00, + 0xd0, 0x58, 0x01, 0x00, 0x3c, 0x00, 0x98, 0xfd, + 0x00, 0x00, 0xb0, 0xb5, 0x3f, 0x24, 0x02, 0x1c, + 0x00, 0x2a, 0x01, 0xd1, 0x08, 0x20, 0x0b, 0x23, + 0x01, 0x2a, 0x01, 0xd1, 0x09, 0x20, 0x08, 0x23, + 0x25, 0x1c, 0x9d, 0x40, 0x00, 0x29, 0x00, 0xd1, + 0x01, 0x21, 0x3f, 0x29, 0x00, 0xd9, 0x21, 0x1c, + 0x99, 0x40, 0x0a, 0x1c, 0x29, 0x1c, 0xff, 0xf7, + 0x7c, 0xfc, 0xb0, 0xbd, 0x00, 0x00, 0x91, 0xb5, + 0x12, 0x49, 0x00, 0xab, 0x1a, 0x78, 0x3c, 0x00, + 0xd4, 0xfd, 0x00, 0x00, 0x08, 0x78, 0x11, 0x4c, + 0x80, 0x18, 0x00, 0x06, 0x00, 0x0e, 0x20, 0x70, + 0x49, 0x78, 0x5a, 0x78, 0x89, 0x18, 0x09, 0x06, + 0x09, 0x0e, 0x13, 0x22, 0x13, 0x28, 0x61, 0x70, + 0x00, 0xd9, 0x22, 0x70, 0x13, 0x29, 0x00, 0xd9, + 0x62, 0x70, 0x08, 0x49, 0x08, 0x48, 0x06, 0x39, + 0xc9, 0x88, 0x81, 0x80, 0x21, 0x78, 0x00, 0x20, + 0xff, 0xf7, 0x82, 0xfc, 0x61, 0x78, 0x01, 0x20, + 0x3c, 0x00, 0x10, 0xfe, 0x00, 0x00, 0xff, 0xf7, + 0x7e, 0xfc, 0x98, 0xbd, 0x00, 0x00, 0xa4, 0x58, + 0x01, 0x00, 0xa6, 0x58, 0x01, 0x00, 0x64, 0x73, + 0x01, 0x00, 0x70, 0xb5, 0x1d, 0x4d, 0x04, 0x1c, + 0x28, 0x78, 0x0e, 0x1c, 0x03, 0x28, 0x03, 0xd1, + 0x02, 0x21, 0x11, 0x20, 0xf1, 0xf7, 0x35, 0xfa, + 0x20, 0x1c, 0x00, 0xf0, 0x4e, 0xf8, 0x00, 0x28, + 0x25, 0xd0, 0x28, 0x78, 0x01, 0x28, 0x0a, 0xd1, + 0x68, 0x68, 0x3c, 0x00, 0x4c, 0xfe, 0x00, 0x00, + 0x00, 0x28, 0x07, 0xd0, 0x01, 0x21, 0x11, 0x20, + 0x03, 0xf0, 0xee, 0xfb, 0x01, 0x20, 0x69, 0x68, + 0xf0, 0xf7, 0xbd, 0xfa, 0x6c, 0x70, 0x6e, 0x60, + 0x20, 0x1c, 0xff, 0xf7, 0xc1, 0xfc, 0x04, 0x1c, + 0x00, 0xf0, 0xd4, 0xfe, 0x00, 0x2c, 0x02, 0xd0, + 0x68, 0x68, 0x00, 0x28, 0x02, 0xd1, 0xf6, 0xf7, + 0xd9, 0xf8, 0x70, 0xbd, 0x01, 0x20, 0x28, 0x70, + 0x01, 0x22, 0x21, 0x1c, 0x3c, 0x00, 0x88, 0xfe, + 0x00, 0x00, 0x11, 0x20, 0x03, 0xf0, 0x9f, 0xfb, + 0x70, 0xbd, 0x02, 0x21, 0x11, 0x20, 0xf1, 0xf7, + 0x06, 0xfa, 0x70, 0xbd, 0x00, 0x00, 0x9c, 0x73, + 0x01, 0x00, 0x80, 0xb5, 0x01, 0x28, 0x05, 0xd1, + 0x00, 0x29, 0x04, 0xd0, 0x01, 0x29, 0x01, 0xd1, + 0xf6, 0xf7, 0xbf, 0xf8, 0x80, 0xbd, 0x05, 0x49, + 0x08, 0x78, 0x03, 0x28, 0x02, 0xd0, 0x00, 0x20, + 0x08, 0x70, 0x80, 0xbd, 0x03, 0x21, 0x3c, 0x00, + 0xc4, 0xfe, 0x00, 0x00, 0x11, 0x20, 0xf1, 0xf7, + 0xed, 0xf9, 0x80, 0xbd, 0x9c, 0x73, 0x01, 0x00, + 0x01, 0x48, 0x40, 0x78, 0x70, 0x47, 0x00, 0x00, + 0x9c, 0x73, 0x01, 0x00, 0x01, 0x1c, 0x01, 0x39, + 0x01, 0x20, 0x0e, 0x29, 0x00, 0xd3, 0x00, 0x20, + 0x70, 0x47, 0x00, 0x00, 0x10, 0xb5, 0x13, 0x4c, + 0x20, 0x78, 0x01, 0x28, 0x0e, 0xd1, 0x60, 0x68, + 0x00, 0x28, 0x0d, 0xd0, 0x01, 0x21, 0x11, 0x20, + 0x3c, 0x00, 0x00, 0xff, 0x00, 0x00, 0x03, 0xf0, + 0x98, 0xfb, 0x01, 0x20, 0x61, 0x68, 0xf0, 0xf7, + 0x67, 0xfa, 0x00, 0x20, 0x60, 0x60, 0x20, 0x70, + 0x01, 0xe0, 0x03, 0x28, 0x0e, 0xd0, 0x00, 0x21, + 0x11, 0x20, 0x03, 0xf0, 0x8a, 0xfb, 0xff, 0xf7, + 0x24, 0xfc, 0xff, 0xf7, 0xc0, 0xfb, 0x05, 0x49, + 0x08, 0x7b, 0x40, 0x08, 0x40, 0x00, 0x08, 0x73, + 0x03, 0x20, 0x20, 0x70, 0x01, 0x20, 0x10, 0xbd, + 0x00, 0x00, 0x3c, 0x00, 0x3c, 0xff, 0x00, 0x00, + 0x9c, 0x73, 0x01, 0x00, 0x88, 0x00, 0x07, 0x00, + 0x10, 0xb5, 0x0d, 0x4c, 0x20, 0x78, 0x03, 0x28, + 0x13, 0xd1, 0x00, 0x20, 0x20, 0x70, 0x0b, 0x48, + 0x01, 0x7b, 0x01, 0x22, 0x11, 0x43, 0x01, 0x73, + 0xff, 0xf7, 0x70, 0xfc, 0xff, 0xf7, 0x18, 0xfc, + 0x00, 0x28, 0x06, 0xd0, 0x02, 0x21, 0x21, 0x70, + 0x01, 0x1c, 0x00, 0x22, 0x11, 0x20, 0x03, 0xf0, + 0x2b, 0xfb, 0x01, 0x20, 0x3c, 0x00, 0x78, 0xff, + 0x00, 0x00, 0x10, 0xbd, 0x00, 0x00, 0x9c, 0x73, + 0x01, 0x00, 0x88, 0x00, 0x07, 0x00, 0x80, 0xb5, + 0x05, 0x49, 0x00, 0x28, 0x04, 0xd0, 0x00, 0x20, + 0x08, 0x60, 0x03, 0xf0, 0x5a, 0xfa, 0x80, 0xbd, + 0x01, 0x20, 0x08, 0x60, 0x80, 0xbd, 0x80, 0x5a, + 0x01, 0x00, 0xfe, 0xb5, 0x05, 0x1c, 0x80, 0x35, + 0x04, 0x1c, 0xa8, 0x68, 0x29, 0x79, 0x06, 0x68, + 0x20, 0x1c, 0xa0, 0x30, 0x02, 0x29, 0x3c, 0x00, + 0xb4, 0xff, 0x00, 0x00, 0x1c, 0xd1, 0x69, 0x79, + 0x08, 0x29, 0x01, 0xd0, 0x0c, 0x29, 0x17, 0xd1, + 0x01, 0x21, 0x61, 0x62, 0xa9, 0x68, 0x09, 0x68, + 0x09, 0x8b, 0x01, 0x82, 0xa9, 0x69, 0x01, 0x91, + 0x00, 0x8a, 0xc0, 0x06, 0x05, 0xd5, 0x60, 0x68, + 0x00, 0x88, 0x40, 0x05, 0x01, 0xd4, 0x01, 0x20, + 0x00, 0xe0, 0x00, 0x20, 0x02, 0x90, 0x05, 0x20, + 0x01, 0xa9, 0x02, 0xf0, 0xb7, 0xf9, 0x02, 0xe0, + 0x3c, 0x00, 0xf0, 0xff, 0x00, 0x00, 0x00, 0x21, + 0x61, 0x62, 0x01, 0x82, 0xa9, 0x68, 0x1a, 0x23, + 0x0a, 0x89, 0x67, 0x6a, 0x18, 0x1c, 0x00, 0x2f, + 0x00, 0xd1, 0x18, 0x20, 0x10, 0x1a, 0x08, 0x81, + 0xa8, 0x68, 0x01, 0x68, 0x62, 0x6a, 0x00, 0x2a, + 0x00, 0xd1, 0x18, 0x23, 0xc9, 0x18, 0x01, 0x60, + 0xa8, 0x68, 0x41, 0xc4, 0x30, 0x88, 0x08, 0x3c, + 0x40, 0x04, 0x03, 0xd5, 0x20, 0x1c, 0xf7, 0xf7, + 0xbc, 0xf9, 0x3c, 0x00, 0x2c, 0x00, 0x01, 0x00, + 0xfe, 0xbd, 0x00, 0x21, 0xe1, 0x61, 0x30, 0x79, + 0xc0, 0x07, 0x03, 0xd4, 0x20, 0x1c, 0xf7, 0xf7, + 0x91, 0xfe, 0xf5, 0xe7, 0x20, 0x1c, 0xf7, 0xf7, + 0x43, 0xff, 0xf1, 0xe7, 0xf7, 0xb5, 0x05, 0x1c, + 0x0a, 0x30, 0x06, 0x1c, 0xf5, 0xf7, 0xa4, 0xfa, + 0x14, 0x4f, 0x04, 0x1c, 0x39, 0x88, 0xf2, 0xf7, + 0x83, 0xfe, 0x32, 0x88, 0x78, 0x68, 0x02, 0x80, + 0x72, 0x88, 0x02, 0x30, 0x3c, 0x00, 0x68, 0x00, + 0x01, 0x00, 0x02, 0x80, 0xb1, 0x88, 0x41, 0x80, + 0x69, 0x88, 0x02, 0x9a, 0x20, 0x1c, 0xfa, 0xf7, + 0xce, 0xfe, 0x0b, 0x4d, 0x08, 0x35, 0x68, 0x80, + 0xfb, 0xf7, 0x2b, 0xfe, 0x01, 0x21, 0x09, 0x03, + 0x00, 0x28, 0x28, 0x88, 0x01, 0xd0, 0x88, 0x43, + 0x00, 0xe0, 0x08, 0x43, 0x28, 0x80, 0x04, 0x48, + 0x00, 0x22, 0x00, 0x21, 0x14, 0x30, 0xf2, 0xf7, + 0x32, 0xfe, 0x20, 0x1c, 0xfc, 0xf7, 0x3c, 0x00, + 0xa4, 0x00, 0x01, 0x00, 0x85, 0xfa, 0xfe, 0xbd, + 0x24, 0x7b, 0x01, 0x00, 0x10, 0xb5, 0x13, 0x4c, + 0x11, 0x49, 0x20, 0x1c, 0xff, 0x30, 0x69, 0x30, + 0x0e, 0xc9, 0x0e, 0xc0, 0x20, 0x1c, 0xff, 0x30, + 0x24, 0x22, 0x75, 0x30, 0x0e, 0x49, 0xf0, 0xf7, + 0x17, 0xfa, 0x20, 0x1c, 0xff, 0x30, 0x3c, 0x22, + 0x99, 0x30, 0x0c, 0x49, 0xf0, 0xf7, 0x6c, 0xfa, + 0x20, 0x1c, 0xff, 0x30, 0x10, 0x22, 0xd5, 0x30, + 0x3c, 0x00, 0xe0, 0x00, 0x01, 0x00, 0x09, 0x49, + 0xf0, 0xf7, 0x09, 0xfa, 0x20, 0x1c, 0xff, 0x30, + 0x28, 0x22, 0xe5, 0x30, 0x07, 0x49, 0xf0, 0xf7, + 0x5e, 0xfa, 0x10, 0xbd, 0x00, 0x00, 0x00, 0x80, + 0x07, 0x00, 0x40, 0x63, 0x01, 0x00, 0x0c, 0x80, + 0x07, 0x00, 0x30, 0x80, 0x07, 0x00, 0x80, 0x80, + 0x07, 0x00, 0xa0, 0x80, 0x07, 0x00, 0xb0, 0xb5, + 0x00, 0x28, 0x3f, 0xd0, 0x21, 0x48, 0x41, 0x68, + 0x21, 0x4c, 0x3c, 0x00, 0x1c, 0x01, 0x01, 0x00, + 0x61, 0x60, 0xc1, 0x68, 0xe1, 0x60, 0x01, 0x69, + 0x21, 0x61, 0x80, 0x6a, 0xa0, 0x62, 0x1e, 0x49, + 0x1c, 0x48, 0x09, 0x68, 0x14, 0x38, 0x41, 0x64, + 0x1c, 0x48, 0x25, 0x1c, 0x3c, 0x35, 0x0f, 0xc8, + 0x0f, 0xc5, 0x20, 0x1c, 0x80, 0x22, 0x4c, 0x30, + 0x19, 0x49, 0xf0, 0xf7, 0x33, 0xfa, 0x14, 0x22, + 0x20, 0x1c, 0xcc, 0x30, 0x17, 0x49, 0xf0, 0xf7, + 0x2d, 0xfa, 0x38, 0x22, 0x3c, 0x00, 0x58, 0x01, + 0x01, 0x00, 0x20, 0x1c, 0xe0, 0x30, 0x15, 0x49, + 0xf0, 0xf7, 0x27, 0xfa, 0x20, 0x1c, 0xff, 0x30, + 0x50, 0x22, 0x19, 0x30, 0x13, 0x49, 0xf0, 0xf7, + 0x20, 0xfa, 0x83, 0x20, 0x80, 0x00, 0x14, 0x22, + 0x20, 0x18, 0x10, 0x49, 0xf0, 0xf7, 0x19, 0xfa, + 0x11, 0x20, 0x40, 0x01, 0x84, 0x22, 0x20, 0x18, + 0x0e, 0x49, 0xf0, 0xf7, 0x12, 0xfa, 0xff, 0xf7, + 0x8e, 0xff, 0xf8, 0xf7, 0x94, 0xfb, 0x3c, 0x00, + 0x94, 0x01, 0x01, 0x00, 0xb0, 0xbd, 0xff, 0xf7, + 0x89, 0xff, 0xb0, 0xbd, 0x00, 0x10, 0x07, 0x00, + 0x40, 0x63, 0x01, 0x00, 0x08, 0x20, 0x07, 0x00, + 0x40, 0x20, 0x07, 0x00, 0x00, 0x30, 0x07, 0x00, + 0x00, 0x40, 0x07, 0x00, 0x00, 0x50, 0x07, 0x00, + 0x00, 0x60, 0x07, 0x00, 0x10, 0x00, 0x07, 0x00, + 0x00, 0x90, 0x07, 0x00, 0x0c, 0x49, 0x80, 0xb5, + 0x01, 0x20, 0x48, 0x60, 0x0a, 0x48, 0x14, 0x38, + 0x3c, 0x00, 0xd0, 0x01, 0x01, 0x00, 0x00, 0x78, + 0x01, 0x28, 0x04, 0xd0, 0x08, 0x48, 0x94, 0x38, + 0x40, 0x6f, 0x00, 0x28, 0x03, 0xd0, 0x00, 0x20, + 0x00, 0xf0, 0x1f, 0xf8, 0x80, 0xbd, 0x08, 0x68, + 0x00, 0x28, 0xfb, 0xd0, 0x03, 0x48, 0xf2, 0xf7, + 0x7a, 0xfe, 0x80, 0xbd, 0x00, 0x00, 0x98, 0x66, + 0x01, 0x00, 0xff, 0xff, 0x00, 0x00, 0x80, 0xb5, + 0x00, 0x28, 0x09, 0xd1, 0xf2, 0x21, 0x0f, 0x20, + 0x03, 0xf0, 0x3c, 0x00, 0x0c, 0x02, 0x01, 0x00, + 0x13, 0xfa, 0x00, 0x22, 0x0f, 0x21, 0xf1, 0x20, + 0x03, 0xf0, 0xcc, 0xfa, 0x80, 0xbd, 0x01, 0x20, + 0xf8, 0xf7, 0x6a, 0xfe, 0x80, 0xbd, 0x00, 0x00, + 0x10, 0xb5, 0x04, 0x1c, 0x03, 0x20, 0x00, 0xf0, + 0xc9, 0xf9, 0x00, 0x21, 0x0f, 0x20, 0x03, 0xf0, + 0xff, 0xf9, 0xff, 0xf7, 0x65, 0xf8, 0x0b, 0x49, + 0x00, 0x20, 0x48, 0x74, 0xfb, 0xf7, 0xe6, 0xfa, + 0x09, 0x48, 0x00, 0x68, 0x3c, 0x00, 0x48, 0x02, + 0x01, 0x00, 0x00, 0x28, 0x03, 0xdc, 0x02, 0x21, + 0x40, 0x42, 0xff, 0xf7, 0x52, 0xfc, 0x04, 0x48, + 0x14, 0x30, 0x00, 0x68, 0x00, 0x28, 0x02, 0xd0, + 0x20, 0x1c, 0xf2, 0xf7, 0x42, 0xfe, 0x10, 0xbd, + 0x00, 0x00, 0x84, 0x66, 0x01, 0x00, 0xd4, 0x7e, + 0x01, 0x00, 0x06, 0x49, 0x80, 0xb5, 0x09, 0x78, + 0x04, 0x29, 0x05, 0xd0, 0x05, 0x29, 0x03, 0xd0, + 0x06, 0x29, 0x01, 0xd0, 0x07, 0x29, 0x3c, 0x00, + 0x84, 0x02, 0x01, 0x00, 0x01, 0xd1, 0xfe, 0xf7, + 0xbd, 0xfd, 0x80, 0xbd, 0x74, 0x66, 0x01, 0x00, + 0x10, 0xb5, 0x09, 0x4c, 0xe0, 0x68, 0x00, 0x28, + 0x0b, 0xd1, 0x07, 0x48, 0x2c, 0x38, 0x00, 0x8a, + 0xc0, 0x07, 0x04, 0xd5, 0x00, 0x21, 0x01, 0x20, + 0x62, 0x68, 0xf9, 0xf7, 0xc9, 0xfa, 0x01, 0x20, + 0xe0, 0x60, 0x01, 0x20, 0x10, 0xbd, 0x00, 0x00, + 0xf4, 0x6e, 0x01, 0x00, 0x8c, 0xb5, 0x02, 0x1c, + 0x3c, 0x00, 0xc0, 0x02, 0x01, 0x00, 0x08, 0x1c, + 0x11, 0x1c, 0xfd, 0xf7, 0x28, 0xff, 0x01, 0x90, + 0x00, 0x28, 0x05, 0xd0, 0x17, 0x20, 0x00, 0xab, + 0x18, 0x80, 0x68, 0x46, 0xfd, 0xf7, 0xff, 0xf8, + 0x8c, 0xbd, 0xf1, 0xb5, 0x2e, 0x4c, 0xae, 0xb0, + 0x00, 0x25, 0x25, 0x63, 0x20, 0x69, 0x01, 0x28, + 0x03, 0xd1, 0x01, 0xa8, 0x01, 0xf0, 0xa1, 0xf8, + 0x4e, 0xe0, 0x01, 0x26, 0x28, 0x4f, 0x26, 0x70, + 0x50, 0x3f, 0x3c, 0x00, 0xfc, 0x02, 0x01, 0x00, + 0xb8, 0x69, 0xf8, 0xf7, 0x4f, 0xf8, 0x25, 0x49, + 0x2c, 0x39, 0x00, 0x28, 0x1d, 0xd0, 0xe0, 0x6a, + 0x01, 0x28, 0x1a, 0xd1, 0x08, 0x8a, 0x0f, 0x1c, + 0x80, 0x07, 0x04, 0xd5, 0x00, 0x21, 0x02, 0x20, + 0x62, 0x68, 0xf9, 0xf7, 0x8f, 0xfa, 0x38, 0x8a, + 0x00, 0x07, 0x07, 0xd5, 0xe0, 0x68, 0x01, 0x28, + 0x04, 0xd1, 0x00, 0x21, 0x08, 0x20, 0x62, 0x68, + 0xf9, 0xf7, 0x84, 0xfa, 0x3c, 0x00, 0x38, 0x03, + 0x01, 0x00, 0x00, 0x22, 0x18, 0x21, 0x82, 0x20, + 0x26, 0x63, 0x03, 0xf0, 0x36, 0xfa, 0x25, 0xe0, + 0x08, 0x8a, 0x0e, 0x1c, 0x80, 0x07, 0x04, 0xd5, + 0x00, 0x21, 0x02, 0x20, 0x62, 0x68, 0xf9, 0xf7, + 0x74, 0xfa, 0x30, 0x8a, 0x00, 0x07, 0x07, 0xd5, + 0xe0, 0x68, 0x01, 0x28, 0x04, 0xd1, 0x00, 0x21, + 0x08, 0x20, 0x62, 0x68, 0xf9, 0xf7, 0x69, 0xfa, + 0x30, 0x8a, 0x40, 0x07, 0x04, 0xd5, 0x3c, 0x00, + 0x74, 0x03, 0x01, 0x00, 0x00, 0x22, 0x00, 0x21, + 0x04, 0x20, 0xf9, 0xf7, 0x61, 0xfa, 0x2e, 0x98, + 0x01, 0x28, 0x04, 0xd0, 0x1e, 0x95, 0x09, 0x21, + 0x1b, 0xa8, 0xff, 0xf7, 0x97, 0xff, 0xe5, 0x62, + 0xbd, 0x61, 0xe5, 0x60, 0x2f, 0xb0, 0xf0, 0xbd, + 0xf4, 0x6e, 0x01, 0x00, 0x80, 0xb5, 0x07, 0x20, + 0xfe, 0xf7, 0xa0, 0xfe, 0x00, 0x21, 0x0f, 0x20, + 0x03, 0xf0, 0x44, 0xf9, 0x0c, 0x48, 0x01, 0x78, + 0x3c, 0x00, 0xb0, 0x03, 0x01, 0x00, 0x00, 0x29, + 0x0f, 0xd0, 0x02, 0x21, 0x01, 0x70, 0x88, 0x38, + 0x00, 0x78, 0x00, 0x28, 0x04, 0xd0, 0x07, 0x49, + 0x10, 0x31, 0x48, 0x7c, 0x01, 0x30, 0x48, 0x74, + 0xf2, 0x22, 0x0f, 0x20, 0x05, 0x49, 0x03, 0xf0, + 0xfc, 0xf8, 0x00, 0x22, 0x0f, 0x21, 0xf3, 0x20, + 0x03, 0xf0, 0xe9, 0xf9, 0x80, 0xbd, 0x74, 0x66, + 0x01, 0x00, 0x80, 0x84, 0x1e, 0x00, 0x10, 0xb5, + 0x04, 0x1c, 0x3c, 0x00, 0xec, 0x03, 0x01, 0x00, + 0xf2, 0x21, 0x0f, 0x20, 0x03, 0xf0, 0x20, 0xf9, + 0x01, 0x2c, 0x0a, 0xd1, 0x08, 0x48, 0x08, 0x49, + 0x00, 0x68, 0x14, 0x39, 0x00, 0x28, 0x05, 0xd0, + 0xc8, 0x78, 0x02, 0x28, 0x02, 0xd1, 0xf7, 0xf7, + 0xaf, 0xfa, 0x10, 0xbd, 0x00, 0x20, 0x48, 0x70, + 0x05, 0x20, 0xfe, 0xf7, 0x65, 0xfe, 0x10, 0xbd, + 0x98, 0x66, 0x01, 0x00, 0xf8, 0xb5, 0x28, 0x4e, + 0x30, 0x21, 0x35, 0x1c, 0x3c, 0x00, 0x28, 0x04, + 0x01, 0x00, 0x60, 0x35, 0x28, 0x89, 0x89, 0x5d, + 0x88, 0x42, 0x03, 0xd1, 0x00, 0x20, 0xff, 0xf7, + 0xf6, 0xfe, 0xf8, 0xbd, 0x34, 0x1c, 0x70, 0x34, + 0x01, 0x21, 0x21, 0x70, 0x41, 0x18, 0x80, 0x19, + 0x30, 0x30, 0x29, 0x81, 0x40, 0x78, 0x1d, 0x4f, + 0x18, 0x3f, 0x38, 0x70, 0x00, 0x28, 0x08, 0xd0, + 0x00, 0x21, 0xfb, 0xf7, 0xc2, 0xf9, 0x00, 0x28, + 0x07, 0xd1, 0x20, 0x78, 0xff, 0xf7, 0x3c, 0x00, + 0x64, 0x04, 0x01, 0x00, 0x9b, 0xff, 0xe7, 0xe7, + 0x01, 0x21, 0x0f, 0x20, 0xf0, 0xf7, 0x1a, 0xff, + 0x14, 0x48, 0x01, 0x21, 0x80, 0x30, 0x81, 0x70, + 0x38, 0x69, 0xfb, 0xf7, 0x55, 0xfa, 0x20, 0x73, + 0x00, 0x21, 0x0f, 0x20, 0x03, 0xf0, 0xd6, 0xf8, + 0x70, 0x7a, 0x01, 0x28, 0x0e, 0xd1, 0x0e, 0x48, + 0x00, 0x68, 0x00, 0x28, 0x04, 0xd0, 0x38, 0x78, + 0x02, 0xf0, 0xda, 0xfa, 0x00, 0x28, 0x05, 0xd0, + 0x3c, 0x00, 0xa0, 0x04, 0x01, 0x00, 0x30, 0x7f, + 0x60, 0x73, 0x03, 0x20, 0x20, 0x70, 0x71, 0x89, + 0x05, 0xe0, 0x05, 0x20, 0x20, 0x70, 0xa8, 0x88, + 0xfa, 0xf7, 0x3b, 0xfb, 0x01, 0x1c, 0x00, 0x22, + 0x0f, 0x20, 0x03, 0xf0, 0x86, 0xf8, 0xba, 0xe7, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0xe4, 0x62, + 0x01, 0x00, 0x70, 0xb5, 0x04, 0x1c, 0x02, 0xf0, + 0x6c, 0xfc, 0x36, 0x4b, 0x19, 0x1c, 0xa0, 0x31, + 0x0a, 0x78, 0x3c, 0x00, 0xdc, 0x04, 0x01, 0x00, + 0x10, 0x2a, 0x02, 0xd2, 0x0a, 0x79, 0x10, 0x2a, + 0x01, 0xd3, 0x01, 0x25, 0x00, 0xe0, 0x00, 0x25, + 0x30, 0x4e, 0xca, 0x79, 0x80, 0x36, 0x01, 0x2c, + 0x12, 0xd0, 0x00, 0x25, 0x02, 0x2c, 0x2e, 0xd0, + 0x04, 0x2c, 0x3c, 0xd1, 0x5c, 0x6b, 0x00, 0x2c, + 0x39, 0xd1, 0x9c, 0x6f, 0x00, 0x1b, 0x2a, 0x4c, + 0xa0, 0x42, 0x34, 0xd9, 0xb2, 0x68, 0x98, 0x6a, + 0x82, 0x42, 0x31, 0xd0, 0x3c, 0x00, 0x18, 0x05, + 0x01, 0x00, 0x4d, 0x72, 0x34, 0xe0, 0xb0, 0x68, + 0x9c, 0x6a, 0x02, 0x22, 0xa0, 0x42, 0x21, 0xd1, + 0x58, 0x6b, 0x00, 0x28, 0x1e, 0xd1, 0x00, 0x2d, + 0x1c, 0xd1, 0x48, 0x7a, 0x19, 0x28, 0x20, 0xd0, + 0x34, 0x68, 0x98, 0x6f, 0x64, 0x00, 0x00, 0x1b, + 0x74, 0x68, 0x00, 0x19, 0xff, 0x30, 0x1c, 0x4c, + 0x39, 0x30, 0xa0, 0x42, 0x16, 0xd2, 0x48, 0x79, + 0x8c, 0x79, 0x00, 0x19, 0x30, 0x28, 0x3c, 0x00, + 0x54, 0x05, 0x01, 0x00, 0x11, 0xd3, 0x10, 0x22, + 0x0f, 0xe0, 0x5c, 0x6b, 0x01, 0x2c, 0x06, 0xd1, + 0xb0, 0x68, 0x9a, 0x6a, 0x90, 0x42, 0x00, 0xd1, + 0x4d, 0x72, 0x00, 0x22, 0x05, 0xe0, 0x9c, 0x6f, + 0x00, 0x1b, 0x12, 0x4c, 0xa0, 0x42, 0x00, 0xd3, + 0x20, 0x22, 0x06, 0xe0, 0x4a, 0x7a, 0x19, 0x2a, + 0x01, 0xd2, 0x01, 0x32, 0x4a, 0x72, 0x20, 0x22, + 0xb0, 0x60, 0x30, 0x68, 0x9b, 0x6f, 0x98, 0x42, + 0x3c, 0x00, 0x90, 0x05, 0x01, 0x00, 0x04, 0xd1, + 0x00, 0x2a, 0x00, 0xd1, 0x48, 0x79, 0x4a, 0x71, + 0x06, 0xe0, 0x10, 0x2a, 0x04, 0xd3, 0x70, 0x60, + 0x33, 0x60, 0x48, 0x79, 0x88, 0x71, 0xf6, 0xe7, + 0xca, 0x71, 0x70, 0xbd, 0x00, 0x00, 0xa4, 0x6c, + 0x01, 0x00, 0xa3, 0x04, 0x00, 0x00, 0x71, 0x02, + 0x00, 0x00, 0x35, 0x0c, 0x00, 0x00, 0x05, 0x48, + 0x80, 0xb5, 0x81, 0x7b, 0x00, 0x29, 0x05, 0xd0, + 0x00, 0x21, 0x3c, 0x00, 0xcc, 0x05, 0x01, 0x00, + 0x81, 0x73, 0x03, 0x49, 0x0f, 0x20, 0x01, 0xf0, + 0x0f, 0xff, 0x80, 0xbd, 0x74, 0x66, 0x01, 0x00, + 0xe9, 0x03, 0x01, 0x00, 0xf8, 0xb5, 0x04, 0x1c, + 0x02, 0xf0, 0xe2, 0xfb, 0x05, 0x1c, 0x38, 0x4e, + 0x20, 0x1c, 0x37, 0x49, 0x34, 0x1c, 0xa0, 0x34, + 0x10, 0x22, 0x44, 0x39, 0x01, 0x28, 0x2c, 0xd0, + 0x04, 0x28, 0x4e, 0xd1, 0x37, 0x1c, 0x74, 0x36, + 0x09, 0xce, 0x26, 0x78, 0x3c, 0x00, 0x08, 0x06, + 0x01, 0x00, 0xc0, 0x1a, 0x20, 0x2e, 0x04, 0xd1, + 0x30, 0x4e, 0xb0, 0x42, 0x01, 0xd9, 0x00, 0x26, + 0x4e, 0x61, 0x3e, 0x1c, 0x3f, 0x6c, 0x00, 0x2f, + 0x48, 0xd1, 0x77, 0x6c, 0x00, 0x2f, 0x45, 0xd1, + 0xb7, 0x6a, 0x00, 0x2f, 0x3d, 0xd0, 0x77, 0x6b, + 0x00, 0x2f, 0x3a, 0xd0, 0x27, 0x4f, 0xb8, 0x42, + 0x37, 0xd2, 0x60, 0x78, 0x10, 0x28, 0x06, 0xd3, + 0xf0, 0x6f, 0x18, 0x1a, 0x24, 0x4b, 0x3c, 0x00, + 0x44, 0x06, 0x01, 0x00, 0x98, 0x42, 0x01, 0xd2, + 0xe2, 0x70, 0xf5, 0x66, 0x48, 0x69, 0x06, 0x28, + 0x2f, 0xd2, 0x01, 0x30, 0x2c, 0xe0, 0x20, 0x78, + 0x20, 0x28, 0x01, 0xd1, 0x06, 0x23, 0x4b, 0x61, + 0x02, 0x23, 0x23, 0x71, 0xb3, 0x6a, 0x00, 0x2b, + 0x19, 0xd0, 0x49, 0x69, 0x03, 0x29, 0x16, 0xd9, + 0x71, 0x6b, 0x73, 0x6d, 0x59, 0x40, 0x12, 0xd0, + 0xe1, 0x78, 0x10, 0x29, 0x10, 0xd3, 0x61, 0x78, + 0x3c, 0x00, 0x80, 0x06, 0x01, 0x00, 0x33, 0x1c, + 0x10, 0x29, 0x0c, 0xd3, 0xd9, 0x6f, 0x69, 0x1a, + 0x13, 0x4d, 0xa9, 0x42, 0x07, 0xd2, 0x58, 0x6c, + 0x00, 0x28, 0x02, 0xd0, 0x98, 0x6c, 0x00, 0x28, + 0x00, 0xd1, 0x22, 0x71, 0xf8, 0xbd, 0x02, 0x28, + 0xfc, 0xd1, 0x22, 0x70, 0xfa, 0xe7, 0x48, 0x69, + 0x00, 0x28, 0x01, 0xd0, 0x01, 0x38, 0x48, 0x61, + 0x0a, 0x49, 0xf0, 0x6e, 0x40, 0x18, 0x02, 0xf0, + 0xb0, 0xfa, 0x3c, 0x00, 0xbc, 0x06, 0x01, 0x00, + 0x00, 0x28, 0xee, 0xd0, 0x01, 0x20, 0xe0, 0x70, + 0x06, 0x48, 0x28, 0x18, 0xf0, 0x66, 0xe8, 0xe7, + 0xa4, 0x6c, 0x01, 0x00, 0xe2, 0x04, 0x00, 0x00, + 0x1a, 0x06, 0x00, 0x00, 0x53, 0x07, 0x00, 0x00, + 0x00, 0x2d, 0x31, 0x01, 0x00, 0x5a, 0x62, 0x02, + 0x80, 0xb5, 0x41, 0x68, 0x09, 0x79, 0xc9, 0x07, + 0x13, 0xd5, 0xc1, 0x69, 0x00, 0x29, 0x0d, 0xd0, + 0x89, 0x79, 0x02, 0x29, 0x3c, 0x00, 0xf8, 0x06, + 0x01, 0x00, 0x0a, 0xd1, 0x08, 0x21, 0x01, 0x86, + 0x01, 0x1c, 0x38, 0x31, 0x81, 0x62, 0x02, 0x1c, + 0x06, 0x48, 0x04, 0x49, 0xf9, 0xf7, 0xfd, 0xfc, + 0x80, 0xbd, 0xf7, 0xf7, 0xdc, 0xfb, 0x80, 0xbd, + 0xf7, 0xf7, 0x23, 0xfb, 0x80, 0xbd, 0xb9, 0x71, + 0x00, 0x00, 0xa0, 0x6a, 0x01, 0x00, 0x10, 0xb5, + 0x00, 0x24, 0x00, 0x28, 0x03, 0xd0, 0x02, 0xf0, + 0xe8, 0xfe, 0x00, 0x28, 0x17, 0xd0, 0x3c, 0x00, + 0x34, 0x07, 0x01, 0x00, 0x0c, 0x4c, 0x01, 0x20, + 0xa0, 0x72, 0x20, 0x68, 0x00, 0x21, 0x41, 0x62, + 0x0a, 0x49, 0x02, 0x68, 0xc9, 0x78, 0x60, 0x32, + 0x91, 0x71, 0x21, 0x89, 0x01, 0x31, 0x21, 0x81, + 0x00, 0x68, 0x40, 0x30, 0x81, 0x83, 0xfb, 0xf7, + 0x31, 0xfc, 0x20, 0x68, 0x00, 0x68, 0xfc, 0xf7, + 0xa1, 0xf9, 0x01, 0x24, 0x20, 0x1c, 0x10, 0xbd, + 0x14, 0x7a, 0x01, 0x00, 0x0e, 0x61, 0x01, 0x00, + 0x3c, 0x00, 0x70, 0x07, 0x01, 0x00, 0x7f, 0xb5, + 0x06, 0x1c, 0x1e, 0x48, 0x1d, 0x1c, 0x43, 0x88, + 0x02, 0x88, 0x1c, 0x21, 0x00, 0x20, 0x90, 0xb0, + 0xf0, 0xf7, 0x45, 0xff, 0x03, 0x90, 0x04, 0x68, + 0xff, 0x21, 0x01, 0x31, 0x21, 0x80, 0x08, 0x20, + 0x60, 0x80, 0x06, 0x20, 0x20, 0x71, 0x04, 0x20, + 0x60, 0x71, 0xc0, 0x01, 0x00, 0x2d, 0x00, 0xd1, + 0x08, 0x1c, 0xe0, 0x80, 0x01, 0xa8, 0x02, 0x30, + 0x31, 0x1c, 0x3c, 0x00, 0xac, 0x07, 0x01, 0x00, + 0x05, 0x1c, 0xfa, 0xf7, 0x5f, 0xfa, 0x10, 0x49, + 0x68, 0x46, 0xfa, 0xf7, 0x5b, 0xfa, 0x20, 0x1c, + 0x08, 0x30, 0x69, 0x46, 0xfa, 0xf7, 0x56, 0xfa, + 0x29, 0x1c, 0x20, 0x1c, 0x12, 0x30, 0xfa, 0xf7, + 0x51, 0xfa, 0x10, 0xab, 0x98, 0x88, 0x00, 0x22, + 0x01, 0x21, 0x20, 0x83, 0xd8, 0x88, 0x60, 0x83, + 0x18, 0x89, 0xe0, 0x81, 0x58, 0x89, 0x20, 0x82, + 0x68, 0x46, 0xf9, 0xf7, 0x3c, 0x00, 0xe8, 0x07, + 0x01, 0x00, 0x17, 0xff, 0x14, 0xb0, 0x70, 0xbd, + 0x00, 0x00, 0x14, 0x6e, 0x01, 0x00, 0x12, 0x61, + 0x01, 0x00, 0xb0, 0xb5, 0x04, 0x1c, 0x18, 0x48, + 0x25, 0x1c, 0x00, 0x78, 0x60, 0x35, 0x80, 0x07, + 0x00, 0x28, 0x08, 0xda, 0xe8, 0x79, 0x00, 0x28, + 0x05, 0xd0, 0xf4, 0xf7, 0x70, 0xff, 0x01, 0x1c, + 0x20, 0x1c, 0x00, 0xf0, 0x78, 0xf9, 0x29, 0x88, + 0x2e, 0x20, 0x00, 0x5d, 0xf2, 0xf7, 0x3c, 0x00, + 0x24, 0x08, 0x01, 0x00, 0x9f, 0xfa, 0xe8, 0x79, + 0x00, 0x28, 0x0b, 0xd1, 0x20, 0x1c, 0x40, 0x30, + 0x01, 0x8b, 0x22, 0x69, 0x11, 0x80, 0x41, 0x8b, + 0x22, 0x69, 0x51, 0x80, 0x80, 0x8b, 0x21, 0x69, + 0xc8, 0x82, 0x07, 0xe0, 0x01, 0x28, 0x05, 0xd1, + 0x20, 0x69, 0x01, 0x22, 0x01, 0x88, 0xd2, 0x02, + 0x11, 0x43, 0x01, 0x80, 0x6a, 0x7a, 0xe0, 0x68, + 0x02, 0x49, 0xf2, 0xf7, 0x53, 0xfa, 0xb0, 0xbd, + 0x3c, 0x00, 0x60, 0x08, 0x01, 0x00, 0x1d, 0x75, + 0x01, 0x00, 0xd1, 0x4f, 0x00, 0x00, 0x90, 0xb5, + 0x04, 0x1c, 0x38, 0x23, 0x0c, 0x49, 0x58, 0x43, + 0x43, 0x18, 0x85, 0xb0, 0x00, 0x20, 0x0a, 0x49, + 0x02, 0x90, 0x18, 0x1c, 0x01, 0x22, 0x03, 0x91, + 0x09, 0x49, 0x04, 0x92, 0x30, 0x30, 0x42, 0x78, + 0x09, 0x88, 0x01, 0x92, 0x00, 0x91, 0x01, 0x78, + 0x5a, 0x6b, 0x0c, 0x33, 0x20, 0x1c, 0xfb, 0xf7, + 0x7c, 0xf8, 0x3c, 0x00, 0x9c, 0x08, 0x01, 0x00, + 0x05, 0xb0, 0x90, 0xbd, 0xd4, 0xe4, 0x01, 0x00, + 0x5d, 0x4e, 0x00, 0x00, 0x48, 0x7b, 0x01, 0x00, + 0x90, 0xb5, 0x85, 0xb0, 0x03, 0x1c, 0x00, 0x20, + 0x02, 0x90, 0x0a, 0x49, 0x18, 0x1c, 0x00, 0x22, + 0x04, 0x92, 0x60, 0x30, 0x03, 0x91, 0xc2, 0x79, + 0x01, 0x88, 0x01, 0x92, 0x00, 0x91, 0x5a, 0x6a, + 0xdc, 0x68, 0x20, 0x33, 0x99, 0x7b, 0x40, 0x7a, + 0x23, 0x1c, 0xfb, 0xf7, 0x3c, 0x00, 0xd8, 0x08, + 0x01, 0x00, 0x5d, 0xf8, 0x05, 0xb0, 0x90, 0xbd, + 0x00, 0x00, 0x0d, 0x4f, 0x00, 0x00, 0x07, 0x49, + 0x80, 0xb5, 0x88, 0x6a, 0x00, 0x28, 0x08, 0xd1, + 0x01, 0x20, 0x88, 0x62, 0xf0, 0xf7, 0xaf, 0xfc, + 0x01, 0x1c, 0x03, 0x48, 0x00, 0x22, 0xf2, 0xf7, + 0xb8, 0xfe, 0x80, 0xbd, 0x00, 0x00, 0x78, 0x69, + 0x01, 0x00, 0x41, 0xe4, 0x00, 0x00, 0xf0, 0xb5, + 0x9b, 0xb0, 0x00, 0x28, 0x20, 0xd0, 0x3c, 0x00, + 0x14, 0x09, 0x01, 0x00, 0x01, 0x1c, 0x08, 0xa8, + 0xfc, 0xf7, 0xb2, 0xfd, 0x01, 0x20, 0x11, 0x90, + 0x03, 0x20, 0x10, 0xad, 0x28, 0x72, 0x04, 0x20, + 0x68, 0x72, 0x05, 0xa8, 0x00, 0x22, 0x69, 0x46, + 0xf4, 0xf7, 0x00, 0xff, 0x00, 0x24, 0x00, 0x26, + 0x05, 0xa9, 0x00, 0x20, 0xf9, 0xf7, 0xfc, 0xfa, + 0x69, 0x46, 0xf9, 0xf7, 0xf9, 0xfa, 0x0b, 0x90, + 0x08, 0xa8, 0xfc, 0xf7, 0xbb, 0xfd, 0x01, 0x34, + 0x3c, 0x00, 0x50, 0x09, 0x01, 0x00, 0x02, 0x2c, + 0x2e, 0x72, 0xf0, 0xdb, 0x1b, 0xb0, 0xf0, 0xbd, + 0x00, 0x00, 0x90, 0xb5, 0x04, 0x1c, 0x4c, 0x23, + 0x0c, 0x49, 0x58, 0x43, 0x43, 0x18, 0x85, 0xb0, + 0x00, 0x20, 0x0a, 0x49, 0x02, 0x90, 0x00, 0x22, + 0x04, 0x92, 0x3c, 0x20, 0x03, 0x91, 0xc2, 0x5c, + 0x08, 0x48, 0x41, 0x88, 0x01, 0x92, 0x41, 0x20, + 0x00, 0x91, 0xc1, 0x5c, 0x5a, 0x68, 0x08, 0x33, + 0x20, 0x1c, 0x3c, 0x00, 0x8c, 0x09, 0x01, 0x00, + 0xfb, 0xf7, 0x02, 0xf8, 0x05, 0xb0, 0x90, 0xbd, + 0x58, 0xe3, 0x01, 0x00, 0x75, 0x4f, 0x00, 0x00, + 0x3c, 0x7c, 0x01, 0x00, 0xf8, 0xb5, 0x0e, 0x1c, + 0x22, 0x4c, 0x38, 0x21, 0x17, 0x1c, 0x05, 0x1c, + 0x20, 0x1c, 0xef, 0xf7, 0x75, 0xfd, 0x23, 0x1c, + 0x25, 0x33, 0x21, 0x1c, 0x24, 0x31, 0x10, 0x20, + 0x6a, 0x46, 0xf9, 0xf7, 0x1d, 0xf8, 0x00, 0xab, + 0x18, 0x88, 0x07, 0x21, 0x3c, 0x00, 0xc8, 0x09, + 0x01, 0x00, 0x1a, 0x4a, 0x02, 0x38, 0x20, 0x84, + 0x20, 0x1c, 0x20, 0x30, 0x81, 0x70, 0xc5, 0x70, + 0x11, 0x1c, 0x06, 0x73, 0x47, 0x73, 0x34, 0x31, + 0x21, 0x63, 0x30, 0x32, 0x62, 0x63, 0x01, 0x79, + 0x25, 0x1c, 0x10, 0x35, 0x21, 0x81, 0x20, 0x60, + 0xe5, 0x60, 0x18, 0x88, 0x40, 0x1a, 0x20, 0x83, + 0x20, 0x1c, 0x28, 0x30, 0x20, 0x61, 0x20, 0x1c, + 0xf9, 0xf7, 0x11, 0xf8, 0x0d, 0x48, 0x3c, 0x00, + 0x04, 0x0a, 0x01, 0x00, 0x00, 0x68, 0x00, 0x28, + 0x07, 0xd0, 0x06, 0x21, 0x20, 0x1c, 0xf8, 0xf7, + 0x47, 0xfd, 0x10, 0x21, 0x28, 0x1c, 0xf8, 0xf7, + 0x43, 0xfd, 0x08, 0x48, 0x02, 0x21, 0x01, 0x62, + 0x44, 0x62, 0x01, 0x21, 0x01, 0x62, 0x06, 0x48, + 0x00, 0x68, 0xef, 0xf7, 0xd5, 0xfc, 0xf8, 0xbd, + 0x8c, 0x8e, 0x01, 0x00, 0xe4, 0xfe, 0x01, 0x00, + 0xcc, 0x5c, 0x01, 0x00, 0x00, 0x30, 0x07, 0x00, + 0x3c, 0x00, 0x40, 0x0a, 0x01, 0x00, 0x5c, 0x5b, + 0x01, 0x00, 0xf0, 0xb5, 0x06, 0x1c, 0x40, 0x36, + 0x31, 0x8b, 0x04, 0x1c, 0x25, 0x1c, 0x08, 0x07, + 0x80, 0x0f, 0x60, 0x35, 0x01, 0x28, 0x85, 0xb0, + 0x3b, 0xd0, 0xe8, 0x79, 0x00, 0x28, 0x05, 0xd1, + 0x20, 0x69, 0x01, 0x80, 0xb0, 0x8b, 0x21, 0x69, + 0xc8, 0x82, 0x07, 0xe0, 0x01, 0x28, 0x05, 0xd1, + 0x20, 0x69, 0x01, 0x22, 0x01, 0x88, 0xd2, 0x02, + 0x11, 0x43, 0x3c, 0x00, 0x7c, 0x0a, 0x01, 0x00, + 0x01, 0x80, 0x20, 0x48, 0x00, 0x78, 0x80, 0x07, + 0x26, 0xd5, 0xe8, 0x79, 0x00, 0x28, 0x23, 0xd0, + 0xa0, 0x6b, 0x00, 0x28, 0x1c, 0xd0, 0xf4, 0xf7, + 0x2f, 0xfe, 0x00, 0x28, 0x09, 0xd0, 0xb8, 0x21, + 0x09, 0x58, 0x00, 0x29, 0x05, 0xd0, 0x30, 0x21, + 0x09, 0x5d, 0xb4, 0x30, 0x08, 0x18, 0x07, 0x7a, + 0x00, 0xe0, 0x00, 0x27, 0x01, 0x21, 0x38, 0x1c, + 0xfa, 0xf7, 0x86, 0xf9, 0x3c, 0x00, 0xb8, 0x0a, + 0x01, 0x00, 0x04, 0x90, 0x20, 0x69, 0x04, 0x30, + 0x39, 0x1c, 0xf4, 0xf7, 0x6c, 0xfd, 0x04, 0x99, + 0xfa, 0xf7, 0xd3, 0xf9, 0x02, 0xe0, 0x20, 0x1c, + 0xf7, 0xf7, 0xf9, 0xfb, 0x70, 0x83, 0x70, 0x8b, + 0x21, 0x69, 0x00, 0x22, 0x48, 0x80, 0x09, 0x49, + 0x0a, 0x48, 0x04, 0x92, 0x03, 0x91, 0x02, 0x90, + 0xea, 0x79, 0x29, 0x88, 0x01, 0x92, 0x00, 0x91, + 0x62, 0x6a, 0xe3, 0x68, 0x20, 0x34, 0x3c, 0x00, + 0xf4, 0x0a, 0x01, 0x00, 0xa1, 0x7b, 0x68, 0x7a, + 0xfa, 0xf7, 0x4c, 0xff, 0x05, 0xb0, 0xf0, 0xbd, + 0x1d, 0x75, 0x01, 0x00, 0xd1, 0x4f, 0x00, 0x00, + 0xdd, 0x2f, 0x01, 0x00, 0xfe, 0xb5, 0x04, 0x1c, + 0x26, 0x1c, 0x01, 0x20, 0x20, 0x36, 0x00, 0x29, + 0x02, 0x90, 0x2e, 0xd0, 0x58, 0x20, 0x00, 0x5b, + 0x00, 0x07, 0x80, 0x0f, 0x01, 0x28, 0x01, 0xd1, + 0xcc, 0x31, 0x00, 0xe0, 0xb4, 0x31, 0x48, 0x68, + 0x3c, 0x00, 0x30, 0x0b, 0x01, 0x00, 0x0d, 0x1c, + 0x00, 0x28, 0x24, 0xd0, 0x20, 0x1c, 0x60, 0x30, + 0xc2, 0x79, 0x01, 0x21, 0x01, 0x2a, 0x00, 0xd0, + 0x00, 0x21, 0x27, 0x1c, 0x62, 0x6d, 0x30, 0x37, + 0x00, 0x2a, 0x04, 0xd0, 0x3a, 0x1c, 0x28, 0x1c, + 0xf6, 0xf7, 0xe7, 0xfd, 0x07, 0xe0, 0x42, 0x7a, + 0x23, 0x1c, 0x68, 0x33, 0x00, 0x92, 0x3a, 0x1c, + 0x28, 0x1c, 0xf6, 0xf7, 0x9a, 0xfd, 0x02, 0x90, + 0x38, 0x78, 0x3c, 0x00, 0x6c, 0x0b, 0x01, 0x00, + 0x40, 0x19, 0x00, 0x7a, 0x01, 0x21, 0xb0, 0x73, + 0xfa, 0xf7, 0x26, 0xf9, 0x01, 0xe0, 0x00, 0x20, + 0xb0, 0x73, 0x60, 0x62, 0xb0, 0x7b, 0x0d, 0x28, + 0x01, 0xd9, 0xf0, 0xf7, 0xbb, 0xfb, 0x02, 0x98, + 0xfe, 0xbd, 0x00, 0x00, 0xff, 0xb5, 0x04, 0x1c, + 0x80, 0x30, 0x25, 0x1c, 0x5e, 0x35, 0x00, 0x78, + 0xae, 0x1d, 0xaf, 0x1f, 0x00, 0x28, 0x83, 0xb0, + 0x12, 0xd1, 0xf4, 0xf7, 0x3c, 0x00, 0xa8, 0x0b, + 0x01, 0x00, 0xc7, 0xfb, 0x00, 0x28, 0x07, 0xd0, + 0x06, 0x98, 0x05, 0x99, 0x02, 0x90, 0x04, 0x98, + 0x01, 0x90, 0xa6, 0x61, 0x67, 0x61, 0x0d, 0xe0, + 0x04, 0x98, 0x06, 0x99, 0x02, 0x90, 0x05, 0x98, + 0x01, 0x90, 0x66, 0x61, 0x05, 0xe0, 0x04, 0xa9, + 0x03, 0xc9, 0x02, 0x90, 0x06, 0x98, 0x01, 0x90, + 0x67, 0x61, 0xa5, 0x61, 0x06, 0x22, 0x38, 0x1c, + 0xef, 0xf7, 0x8b, 0xfc, 0x06, 0x22, 0x3c, 0x00, + 0xe4, 0x0b, 0x01, 0x00, 0x28, 0x1c, 0x02, 0x99, + 0xef, 0xf7, 0x86, 0xfc, 0x06, 0x22, 0x30, 0x1c, + 0x01, 0x99, 0xef, 0xf7, 0x81, 0xfc, 0x07, 0xb0, + 0xf0, 0xbd, 0x00, 0x00, 0xb0, 0xb5, 0x0d, 0x1c, + 0x04, 0x1c, 0x05, 0x28, 0x01, 0xd3, 0xf0, 0xf7, + 0x7b, 0xfb, 0x02, 0x49, 0xa0, 0x00, 0x08, 0x58, + 0x85, 0x60, 0xb0, 0xbd, 0x10, 0x7b, 0x01, 0x00, + 0xf8, 0xb5, 0xff, 0xf7, 0x59, 0xf9, 0x05, 0x1c, + 0x3c, 0x00, 0x20, 0x0c, 0x01, 0x00, 0xfe, 0xf7, + 0xe8, 0xff, 0x04, 0x1c, 0x28, 0x1c, 0xff, 0xf7, + 0x58, 0xf9, 0x00, 0x28, 0x42, 0xd0, 0x69, 0x1e, + 0x21, 0x4d, 0x4a, 0x00, 0x20, 0x4b, 0x1c, 0x3d, + 0xae, 0x5c, 0x98, 0x5c, 0x30, 0x40, 0xd6, 0x18, + 0x01, 0x23, 0xf6, 0x56, 0x52, 0x19, 0xd2, 0x56, + 0x96, 0x42, 0x01, 0xdd, 0x15, 0x1c, 0x00, 0xe0, + 0x35, 0x1c, 0x18, 0x4b, 0x2a, 0x3b, 0x59, 0x56, + 0x51, 0x18, 0x3c, 0x00, 0x5c, 0x0c, 0x01, 0x00, + 0xb1, 0x42, 0x00, 0xdb, 0x31, 0x1c, 0x0e, 0x1c, + 0x00, 0x28, 0x26, 0xd0, 0xfe, 0xf7, 0xbe, 0xff, + 0x00, 0x90, 0x00, 0xab, 0x18, 0x78, 0x12, 0x49, + 0x00, 0x23, 0xc9, 0x56, 0x00, 0xab, 0x15, 0x22, + 0x10, 0x1a, 0x5b, 0x78, 0x00, 0x1b, 0x40, 0x18, + 0xd2, 0x1a, 0x12, 0x1b, 0x51, 0x18, 0x00, 0x22, + 0x85, 0x42, 0x02, 0xdb, 0x00, 0xab, 0x1a, 0x70, + 0x02, 0xe0, 0x40, 0x1b, 0x3c, 0x00, 0x98, 0x0c, + 0x01, 0x00, 0x00, 0xab, 0x18, 0x70, 0x8e, 0x42, + 0x02, 0xdb, 0x00, 0xab, 0x5a, 0x70, 0x02, 0xe0, + 0x88, 0x1b, 0x00, 0xab, 0x58, 0x70, 0x00, 0x98, + 0xff, 0xf7, 0x8d, 0xf8, 0x01, 0xf0, 0xff, 0xf8, + 0xf8, 0xbd, 0xe6, 0x78, 0x01, 0x00, 0x65, 0x73, + 0x01, 0x00, 0x70, 0xb5, 0x08, 0x4e, 0x06, 0x4d, + 0x00, 0x24, 0x06, 0x20, 0x60, 0x43, 0x80, 0x19, + 0x06, 0x22, 0x29, 0x1c, 0xef, 0xf7, 0x3c, 0x00, + 0xd4, 0x0c, 0x01, 0x00, 0x11, 0xfc, 0x01, 0x34, + 0x05, 0x2c, 0xf5, 0xdb, 0x70, 0xbd, 0x00, 0x00, + 0x4e, 0x47, 0x01, 0x00, 0xe6, 0x7a, 0x01, 0x00, + 0x03, 0x48, 0x80, 0xb5, 0x01, 0x68, 0x03, 0x48, + 0xfe, 0xf7, 0x42, 0xfb, 0x80, 0xbd, 0x00, 0x00, + 0xa8, 0x79, 0x01, 0x00, 0xc4, 0x60, 0x01, 0x00, + 0x03, 0x48, 0x80, 0xb5, 0x01, 0x68, 0x03, 0x48, + 0xfe, 0xf7, 0x4a, 0xfb, 0x80, 0xbd, 0x00, 0x00, + 0x3c, 0x00, 0x10, 0x0d, 0x01, 0x00, 0xa8, 0x79, + 0x01, 0x00, 0xc4, 0x60, 0x01, 0x00, 0x10, 0xb5, + 0x00, 0x28, 0x0a, 0xd0, 0x06, 0x4c, 0xa1, 0x69, + 0x00, 0x29, 0x01, 0xd1, 0x00, 0x20, 0x00, 0xe0, + 0x09, 0x68, 0xf7, 0xf7, 0x38, 0xfb, 0xa0, 0x61, + 0x10, 0xbd, 0x00, 0x20, 0x10, 0xbd, 0xa4, 0x6e, + 0x01, 0x00, 0xf3, 0xb5, 0x37, 0x48, 0x83, 0xb0, + 0x02, 0x90, 0x80, 0x79, 0x0e, 0x1c, 0x00, 0x27, + 0x01, 0x90, 0x3c, 0x00, 0x4c, 0x0d, 0x01, 0x00, + 0x34, 0x48, 0x35, 0x4a, 0x01, 0x6a, 0x03, 0x9c, + 0x03, 0x1c, 0x1b, 0x69, 0xa1, 0x42, 0x01, 0xd0, + 0x93, 0x61, 0x00, 0xe0, 0x53, 0x61, 0x31, 0x49, + 0x8a, 0x68, 0x96, 0x42, 0x3f, 0xd0, 0x2d, 0x48, + 0x8e, 0x60, 0xc1, 0x68, 0x00, 0x24, 0x25, 0x1c, + 0x00, 0x29, 0x2d, 0x48, 0x09, 0xd0, 0x00, 0x2e, + 0x0b, 0xd0, 0x28, 0x48, 0x01, 0x24, 0xc0, 0x6a, + 0x24, 0x03, 0x00, 0x28, 0x3c, 0x00, 0x88, 0x0d, + 0x01, 0x00, 0x06, 0xd0, 0x01, 0x27, 0x04, 0xe0, + 0x00, 0x2e, 0x01, 0xd0, 0x05, 0x1c, 0xf9, 0xe7, + 0x04, 0x1c, 0x00, 0x2f, 0x06, 0xd0, 0xfb, 0xf7, + 0x1e, 0xfb, 0x1f, 0x48, 0x01, 0x68, 0x22, 0x48, + 0xfe, 0xf7, 0xfb, 0xfa, 0x20, 0x1c, 0x28, 0x43, + 0x0e, 0xd0, 0x2a, 0x1c, 0x21, 0x1c, 0x01, 0x20, + 0x02, 0xf0, 0x21, 0xfe, 0x2a, 0x1c, 0x21, 0x1c, + 0x02, 0x20, 0x02, 0xf0, 0x1c, 0xfe, 0x3c, 0x00, + 0xc4, 0x0d, 0x01, 0x00, 0x2a, 0x1c, 0x21, 0x1c, + 0x03, 0x20, 0x02, 0xf0, 0x17, 0xfe, 0x00, 0x2f, + 0x06, 0xd1, 0x13, 0x48, 0x01, 0x68, 0x16, 0x48, + 0xfe, 0xf7, 0xce, 0xfa, 0xfa, 0xf7, 0x42, 0xfd, + 0x03, 0x9c, 0x00, 0x2c, 0x01, 0xd1, 0x01, 0xf0, + 0xe1, 0xff, 0x01, 0xa9, 0x03, 0xc9, 0x88, 0x71, + 0x01, 0xf0, 0xdc, 0xff, 0x0a, 0x4c, 0x0a, 0x4b, + 0x44, 0x3c, 0xa1, 0x69, 0x22, 0x69, 0x08, 0x3b, + 0x3c, 0x00, 0x00, 0x0e, 0x01, 0x00, 0x41, 0x1a, + 0x00, 0x2a, 0x03, 0xd0, 0x1a, 0x68, 0x51, 0x18, + 0x19, 0x60, 0x02, 0xe0, 0x5a, 0x68, 0x51, 0x18, + 0x59, 0x60, 0xa0, 0x61, 0x26, 0x61, 0x05, 0xb0, + 0xf0, 0xbd, 0x20, 0x10, 0x07, 0x00, 0xa4, 0x6c, + 0x01, 0x00, 0x10, 0x00, 0x07, 0x00, 0xb0, 0x57, + 0x01, 0x00, 0x00, 0x10, 0x60, 0x00, 0x84, 0x73, + 0x01, 0x00, 0x1c, 0xb5, 0x4c, 0x23, 0x08, 0x49, + 0x58, 0x43, 0x3c, 0x00, 0x3c, 0x0e, 0x01, 0x00, + 0x44, 0x18, 0x20, 0x1c, 0x40, 0x30, 0x41, 0x78, + 0x62, 0x68, 0x00, 0x91, 0x01, 0x92, 0x3f, 0x21, + 0x0b, 0x5d, 0x61, 0x8f, 0x00, 0x78, 0x62, 0x6c, + 0xfa, 0xf7, 0x28, 0xf8, 0xa0, 0x85, 0x1c, 0xbd, + 0x58, 0xe3, 0x01, 0x00, 0xb0, 0xb5, 0x16, 0x4d, + 0xa9, 0x69, 0x00, 0x29, 0x25, 0xd0, 0x2c, 0x1c, + 0x30, 0x34, 0x20, 0x7a, 0x00, 0x28, 0x20, 0xd0, + 0x00, 0x23, 0x81, 0x22, 0x3c, 0x00, 0x78, 0x0e, + 0x01, 0x00, 0x18, 0x20, 0x02, 0xf0, 0x89, 0xfc, + 0x20, 0x7a, 0xff, 0x30, 0x00, 0x06, 0x00, 0x0e, + 0x20, 0x72, 0x12, 0xd1, 0x0c, 0x48, 0x28, 0x21, + 0x2c, 0x38, 0x09, 0x5c, 0x21, 0x72, 0x29, 0x7a, + 0x00, 0x29, 0x01, 0xd1, 0x00, 0x6a, 0x00, 0xe0, + 0x40, 0x6a, 0xa9, 0x69, 0x80, 0x02, 0x81, 0x42, + 0x03, 0xd2, 0x49, 0x00, 0x81, 0x42, 0x01, 0xd2, + 0xa9, 0x61, 0xb0, 0xbd, 0xa8, 0x61, 0x3c, 0x00, + 0xb4, 0x0e, 0x01, 0x00, 0xb0, 0xbd, 0x01, 0xf0, + 0x1d, 0xf9, 0xb0, 0xbd, 0xf4, 0x6e, 0x01, 0x00, + 0x7f, 0xb5, 0x05, 0x1c, 0x04, 0x20, 0x6b, 0x46, + 0x1b, 0x18, 0x02, 0x90, 0x00, 0x26, 0x28, 0x18, + 0x6a, 0x46, 0x02, 0xa9, 0xfc, 0xf7, 0x8a, 0xfb, + 0x00, 0x28, 0x06, 0xd1, 0x00, 0xab, 0x18, 0x79, + 0x04, 0x28, 0x08, 0xd0, 0x18, 0x79, 0x03, 0x28, + 0x05, 0xd0, 0x00, 0xab, 0x18, 0x79, 0x10, 0x21, + 0x3c, 0x00, 0xf0, 0x0e, 0x01, 0x00, 0x08, 0x43, + 0x04, 0xb0, 0x70, 0xbd, 0x03, 0xa9, 0xe8, 0x68, + 0xf6, 0xf7, 0xd3, 0xff, 0x00, 0x28, 0x05, 0xd0, + 0x03, 0x98, 0x20, 0x21, 0x08, 0x43, 0x00, 0x06, + 0x00, 0x0e, 0xf1, 0xe7, 0x03, 0xa9, 0x00, 0x20, + 0xf6, 0xf7, 0xc7, 0xff, 0x04, 0x1c, 0x01, 0xd1, + 0x02, 0x20, 0xe9, 0xe7, 0xe8, 0x68, 0x00, 0xab, + 0x20, 0x60, 0x00, 0x98, 0x60, 0x60, 0x18, 0x79, + 0xa0, 0x76, 0x3c, 0x00, 0x2c, 0x0f, 0x01, 0x00, + 0xa8, 0x8c, 0x60, 0x76, 0xe8, 0x69, 0x20, 0x61, + 0x68, 0x8c, 0xa0, 0x82, 0x28, 0x8c, 0x20, 0x76, + 0x69, 0x69, 0x09, 0x48, 0x81, 0x42, 0x00, 0xd9, + 0x08, 0x1c, 0xa0, 0x60, 0x20, 0x1c, 0x02, 0xf0, + 0xa1, 0xfd, 0xa1, 0x68, 0x00, 0x29, 0x04, 0xd0, + 0x03, 0x9a, 0xa1, 0x32, 0x08, 0x20, 0x02, 0xf0, + 0x37, 0xfb, 0x30, 0x1c, 0xc7, 0xe7, 0x00, 0x00, + 0xa0, 0x86, 0x01, 0x00, 0x3c, 0x00, 0x68, 0x0f, + 0x01, 0x00, 0xfe, 0xb5, 0x06, 0x1c, 0x40, 0x78, + 0x01, 0x24, 0x06, 0x28, 0x50, 0xd3, 0xc1, 0x1e, + 0x03, 0x20, 0xef, 0xf7, 0x5e, 0xfb, 0x00, 0x90, + 0x0e, 0x28, 0x49, 0xd8, 0x00, 0x20, 0x0a, 0xe0, + 0x41, 0x00, 0x09, 0x18, 0x89, 0x19, 0x4a, 0x79, + 0x89, 0x79, 0x51, 0x18, 0x01, 0x39, 0x0e, 0x29, + 0x00, 0xd9, 0x00, 0x24, 0x01, 0x30, 0x00, 0x99, + 0x88, 0x42, 0xf1, 0xdb, 0x00, 0x2c, 0x3c, 0x00, + 0xa4, 0x0f, 0x01, 0x00, 0x37, 0xd0, 0x03, 0x22, + 0xb1, 0x1c, 0x1b, 0x48, 0xef, 0xf7, 0xa4, 0xfa, + 0x1a, 0x4c, 0x1c, 0x21, 0x20, 0x1c, 0xef, 0xf7, + 0x4d, 0xfa, 0x00, 0x25, 0x28, 0xe0, 0x69, 0x00, + 0x49, 0x19, 0x02, 0x91, 0x8a, 0x19, 0x53, 0x79, + 0x15, 0x48, 0x43, 0x54, 0x93, 0x79, 0x0f, 0x18, + 0x7b, 0x70, 0xd3, 0x79, 0xbb, 0x70, 0x07, 0x23, + 0xd2, 0x56, 0x01, 0x92, 0x44, 0x5c, 0x0f, 0xe0, + 0x3c, 0x00, 0xe0, 0x0f, 0x01, 0x00, 0x20, 0x1c, + 0xfe, 0xf7, 0x7b, 0xff, 0x00, 0x28, 0x07, 0xd0, + 0x0c, 0x4a, 0x60, 0x00, 0x80, 0x18, 0x01, 0x21, + 0x10, 0x38, 0x81, 0x73, 0x01, 0x99, 0xc1, 0x73, + 0x01, 0x34, 0x24, 0x06, 0x24, 0x0e, 0x07, 0x48, + 0x02, 0x99, 0x40, 0x5c, 0x79, 0x78, 0x40, 0x18, + 0xa0, 0x42, 0xe8, 0xd8, 0x01, 0x35, 0x00, 0x98, + 0x85, 0x42, 0xd3, 0xdb, 0xfe, 0xbd, 0xe8, 0x62, + 0x01, 0x00, 0x3c, 0x00, 0x1c, 0x10, 0x01, 0x00, + 0xe6, 0x78, 0x01, 0x00, 0xeb, 0x62, 0x01, 0x00, + 0x01, 0x68, 0x0f, 0x29, 0x01, 0xdd, 0x0f, 0x21, + 0x01, 0x60, 0x01, 0x68, 0x00, 0x29, 0x01, 0xda, + 0x00, 0x21, 0x01, 0x60, 0x70, 0x47, 0x00, 0x00, + 0xf8, 0xb5, 0x04, 0x1c, 0x1e, 0x48, 0x22, 0x1d, + 0x05, 0x68, 0x00, 0x92, 0x16, 0x1c, 0x23, 0x1c, + 0x0f, 0x1c, 0xcc, 0x33, 0x2a, 0x1c, 0x20, 0x1c, + 0x70, 0x30, 0xa1, 0x6d, 0x3c, 0x00, 0x58, 0x10, + 0x01, 0x00, 0x00, 0xf0, 0x3e, 0xf9, 0x00, 0x96, + 0xa1, 0x6d, 0x27, 0x20, 0x01, 0x40, 0x23, 0x1c, + 0xe4, 0x33, 0x20, 0x1c, 0x2a, 0x1c, 0x5c, 0x30, + 0x00, 0xf0, 0x33, 0xf9, 0x13, 0x48, 0x00, 0x78, + 0x0e, 0x28, 0x01, 0xd2, 0x01, 0x25, 0x85, 0x40, + 0x11, 0x48, 0xa1, 0x69, 0x00, 0x78, 0x29, 0x40, + 0x00, 0x07, 0x0b, 0xd4, 0x48, 0x07, 0x03, 0xd5, + 0x08, 0x07, 0x01, 0xd5, 0x04, 0x20, 0x3c, 0x00, + 0x94, 0x10, 0x01, 0x00, 0x81, 0x43, 0x88, 0x06, + 0x03, 0xd5, 0x48, 0x06, 0x01, 0xd5, 0x20, 0x20, + 0x81, 0x43, 0x23, 0x1c, 0xb4, 0x33, 0x2a, 0x1c, + 0x20, 0x1c, 0x30, 0x30, 0x00, 0x96, 0x00, 0xf0, + 0x13, 0xf9, 0x39, 0x1c, 0x20, 0x1c, 0xf0, 0xf7, + 0x47, 0xfc, 0xf8, 0xbd, 0x2c, 0x7d, 0x01, 0x00, + 0x10, 0x67, 0x01, 0x00, 0x1d, 0x75, 0x01, 0x00, + 0xb0, 0xb5, 0xf2, 0xf7, 0x27, 0xfc, 0xfe, 0xf7, + 0x3c, 0x00, 0xd0, 0x10, 0x01, 0x00, 0x09, 0xf9, + 0x0f, 0x48, 0x00, 0x25, 0x45, 0x70, 0x0e, 0x48, + 0x0d, 0x4c, 0x00, 0x88, 0x5b, 0x34, 0xa0, 0x82, + 0xf9, 0xf7, 0x23, 0xfd, 0x20, 0x61, 0xa0, 0x8a, + 0x00, 0x28, 0x04, 0xd0, 0x01, 0x21, 0x89, 0x05, + 0xef, 0xf7, 0x0d, 0xfb, 0xe1, 0x82, 0x05, 0x48, + 0x01, 0x38, 0x45, 0x60, 0x01, 0xf0, 0x55, 0xfe, + 0x02, 0x1c, 0x23, 0x1c, 0x00, 0x21, 0x00, 0x20, + 0xf4, 0xf7, 0x3c, 0x00, 0x0c, 0x11, 0x01, 0x00, + 0x49, 0xfd, 0xb0, 0xbd, 0x45, 0x7d, 0x01, 0x00, + 0xf4, 0x67, 0x01, 0x00, 0x70, 0xb5, 0x16, 0x1c, + 0x5a, 0x89, 0x04, 0x1c, 0x04, 0x98, 0x92, 0x07, + 0x92, 0x0f, 0x00, 0x25, 0x00, 0x29, 0xa2, 0x71, + 0x09, 0xd0, 0x05, 0x21, 0xf9, 0xf7, 0x24, 0xfb, + 0x00, 0x28, 0x01, 0xd0, 0xc0, 0x78, 0x00, 0xe0, + 0x01, 0x20, 0xe0, 0x71, 0x00, 0xe0, 0xe5, 0x71, + 0xe5, 0x60, 0xa6, 0x60, 0x3c, 0x00, 0x48, 0x11, + 0x01, 0x00, 0x70, 0xbd, 0x00, 0x00, 0xfe, 0xb5, + 0x05, 0x1c, 0x0e, 0x22, 0x9c, 0x30, 0x16, 0x49, + 0xef, 0xf7, 0xcf, 0xf9, 0x29, 0x1c, 0x28, 0x1c, + 0x80, 0x30, 0x88, 0x31, 0x00, 0x24, 0x2f, 0x1c, + 0x60, 0x37, 0x02, 0x91, 0x01, 0x90, 0x20, 0x06, + 0x00, 0x0e, 0x06, 0x1c, 0xf9, 0xf7, 0x0d, 0xfe, + 0x00, 0x28, 0x03, 0xd0, 0x01, 0x98, 0x42, 0x68, + 0x02, 0x99, 0x01, 0xe0, 0xea, 0x6d, 0x3c, 0x00, + 0x84, 0x11, 0x01, 0x00, 0x39, 0x1c, 0x00, 0x2a, + 0x0d, 0xd0, 0x00, 0x20, 0x03, 0xe0, 0x0b, 0x5c, + 0xb3, 0x42, 0x02, 0xd8, 0x01, 0x30, 0x90, 0x42, + 0xf9, 0xdb, 0x08, 0x18, 0x10, 0x38, 0xc0, 0x7b, + 0x29, 0x19, 0x90, 0x31, 0x08, 0x73, 0x01, 0x34, + 0x0e, 0x2c, 0xdf, 0xd3, 0xfe, 0xbd, 0x00, 0x00, + 0xcc, 0x47, 0x01, 0x00, 0xff, 0xb5, 0x81, 0xb0, + 0x14, 0x1c, 0x10, 0x1c, 0x06, 0x22, 0x0d, 0x1c, + 0x3c, 0x00, 0xc0, 0x11, 0x01, 0x00, 0x19, 0x1c, + 0x0b, 0x9e, 0x0a, 0x9f, 0xef, 0xf7, 0x97, 0xf9, + 0x06, 0x22, 0x39, 0x1c, 0xa0, 0x18, 0xef, 0xf7, + 0x92, 0xf9, 0xe6, 0x60, 0x2c, 0x60, 0x10, 0x20, + 0x28, 0x81, 0x6e, 0x60, 0x01, 0x98, 0xe8, 0x60, + 0x05, 0xb0, 0xf0, 0xbd, 0x00, 0x00, 0x70, 0xb5, + 0x04, 0x1c, 0x00, 0x20, 0x20, 0x61, 0x58, 0x20, + 0x00, 0x5d, 0x0e, 0x1c, 0x15, 0x1c, 0xc0, 0x07, + 0xc0, 0x17, 0x3c, 0x00, 0xfc, 0x11, 0x01, 0x00, + 0x01, 0x30, 0xe0, 0x61, 0x21, 0x6b, 0x00, 0x29, + 0x36, 0xd1, 0x1e, 0x49, 0x09, 0x68, 0x29, 0x43, + 0x32, 0xd0, 0xa1, 0x68, 0x89, 0x8a, 0x00, 0x29, + 0x2e, 0xd0, 0x00, 0x28, 0x0b, 0xd0, 0x20, 0x1c, + 0x58, 0x30, 0x00, 0xf0, 0xf3, 0xfd, 0x00, 0x28, + 0x1b, 0xd0, 0x81, 0x6a, 0x02, 0x6a, 0x40, 0x6a, + 0x09, 0x78, 0x00, 0x78, 0x06, 0xe0, 0x14, 0x4a, + 0x3c, 0x23, 0x11, 0x78, 0x3c, 0x00, 0x38, 0x12, + 0x01, 0x00, 0x50, 0x78, 0x43, 0x43, 0x9a, 0x18, + 0x04, 0x32, 0x00, 0x2d, 0x03, 0xd1, 0x02, 0x29, + 0x01, 0xd0, 0x03, 0x29, 0x02, 0xd1, 0x6d, 0x21, + 0x22, 0x61, 0x08, 0x55, 0x20, 0x69, 0x00, 0x28, + 0x0d, 0xd0, 0x81, 0x88, 0x00, 0x29, 0x01, 0xd1, + 0x01, 0x20, 0x70, 0xbd, 0x80, 0x79, 0x02, 0x28, + 0x05, 0xd1, 0x22, 0x1c, 0x07, 0x49, 0x07, 0x48, + 0xf8, 0xf7, 0x4b, 0xff, 0x02, 0xe0, 0x3c, 0x00, + 0x74, 0x12, 0x01, 0x00, 0x20, 0x1c, 0xef, 0xf7, + 0xb5, 0xf8, 0x00, 0x20, 0x70, 0xbd, 0x00, 0x00, + 0x28, 0x61, 0x01, 0x00, 0x68, 0x61, 0x01, 0x00, + 0xa1, 0xda, 0x00, 0x00, 0xa0, 0x6a, 0x01, 0x00, + 0x10, 0xb5, 0x00, 0x21, 0x00, 0x20, 0xf9, 0xf7, + 0x39, 0xfe, 0xc4, 0x00, 0xf9, 0xf7, 0x54, 0xfe, + 0x24, 0x18, 0xf9, 0xf7, 0x47, 0xfe, 0x08, 0x49, + 0x20, 0x18, 0x09, 0x88, 0x08, 0x4c, 0x40, 0x18, + 0x3c, 0x00, 0xb0, 0x12, 0x01, 0x00, 0x06, 0x49, + 0x09, 0x88, 0x40, 0x18, 0x60, 0x61, 0xf9, 0xf7, + 0x46, 0xfe, 0x05, 0x49, 0x09, 0x88, 0x40, 0x18, + 0x40, 0x00, 0xa0, 0x61, 0x10, 0xbd, 0x02, 0x61, + 0x01, 0x00, 0x04, 0x61, 0x01, 0x00, 0xd4, 0x79, + 0x01, 0x00, 0xa6, 0x69, 0x01, 0x00, 0x11, 0x40, + 0x08, 0x1c, 0x10, 0xb5, 0x1c, 0x1c, 0x19, 0x1c, + 0x08, 0x31, 0x18, 0x60, 0xf1, 0xf7, 0x31, 0xfe, + 0x60, 0x60, 0x3c, 0x00, 0xec, 0x12, 0x01, 0x00, + 0x10, 0xbd, 0x00, 0x00, 0xf8, 0xb5, 0x06, 0x1c, + 0x22, 0x48, 0x0f, 0x1c, 0x41, 0x68, 0x91, 0x42, + 0x03, 0xd0, 0x00, 0x21, 0x81, 0x60, 0xc1, 0x60, + 0x42, 0x60, 0xc4, 0x68, 0x15, 0xe0, 0x28, 0x20, + 0x1d, 0x49, 0x60, 0x43, 0x40, 0x18, 0x05, 0x1c, + 0x06, 0x22, 0x31, 0x1c, 0xef, 0xf7, 0x70, 0xf8, + 0x00, 0x28, 0x07, 0xd1, 0xa8, 0x1d, 0x39, 0x1c, + 0xf9, 0xf7, 0x10, 0xfd, 0x3c, 0x00, 0x28, 0x13, + 0x01, 0x00, 0x00, 0x28, 0x01, 0xd0, 0x01, 0x20, + 0xf8, 0xbd, 0x01, 0x34, 0x24, 0x07, 0x24, 0x0f, + 0x12, 0x48, 0x80, 0x68, 0x84, 0x42, 0xe5, 0xd1, + 0x10, 0x4c, 0x28, 0x23, 0xa0, 0x68, 0x0f, 0x4d, + 0x58, 0x43, 0x40, 0x19, 0x06, 0x22, 0x31, 0x1c, + 0xef, 0xf7, 0xd3, 0xf8, 0xa0, 0x68, 0x28, 0x23, + 0x58, 0x43, 0x40, 0x19, 0x06, 0x30, 0x22, 0x22, + 0x39, 0x1c, 0xef, 0xf7, 0xca, 0xf8, 0x3c, 0x00, + 0x64, 0x13, 0x01, 0x00, 0xa0, 0x68, 0x01, 0x30, + 0x00, 0x07, 0x00, 0x0f, 0xa0, 0x60, 0xe1, 0x68, + 0x81, 0x42, 0x03, 0xd1, 0x01, 0x31, 0x08, 0x07, + 0x00, 0x0f, 0xe0, 0x60, 0x00, 0x20, 0xd6, 0xe7, + 0xec, 0x65, 0x01, 0x00, 0xa0, 0xf4, 0x01, 0x00, + 0x10, 0xb5, 0x00, 0x21, 0x03, 0x20, 0x00, 0xf0, + 0xe5, 0xff, 0x05, 0x4c, 0xa0, 0x68, 0x00, 0x28, + 0x04, 0xd1, 0x01, 0xf0, 0x07, 0xfd, 0x61, 0x68, + 0x3c, 0x00, 0xa0, 0x13, 0x01, 0x00, 0x40, 0x1a, + 0x60, 0x60, 0x10, 0xbd, 0x00, 0x00, 0xd0, 0x60, + 0x01, 0x00, 0x02, 0x68, 0x0a, 0x60, 0x01, 0x60, + 0x70, 0x47, 0x01, 0x1c, 0x00, 0x68, 0x00, 0x28, + 0x01, 0xd0, 0x02, 0x68, 0x0a, 0x60, 0x70, 0x47, + 0x00, 0x00, 0xfe, 0xb5, 0x14, 0x1c, 0x1d, 0x1c, + 0x00, 0x22, 0xd2, 0x43, 0x01, 0xab, 0xf3, 0xf7, + 0x82, 0xff, 0x01, 0x98, 0x00, 0x26, 0x28, 0x40, + 0x01, 0x90, 0x3c, 0x00, 0xdc, 0x13, 0x01, 0x00, + 0x00, 0x25, 0x00, 0x27, 0x20, 0x60, 0x1e, 0xe0, + 0x01, 0x21, 0xb9, 0x40, 0x0a, 0x1c, 0x02, 0x40, + 0x18, 0xd0, 0x88, 0x43, 0x01, 0x90, 0x39, 0x06, + 0x09, 0x0e, 0x70, 0x19, 0x00, 0x19, 0x02, 0x91, + 0x01, 0x77, 0x08, 0x1c, 0xf9, 0xf7, 0xc6, 0xfc, + 0x00, 0x28, 0x06, 0xd0, 0x30, 0x1c, 0x00, 0x19, + 0x01, 0x36, 0x02, 0x99, 0x30, 0x30, 0x01, 0x70, + 0x04, 0xe0, 0x28, 0x1c, 0x3c, 0x00, 0x18, 0x14, + 0x01, 0x00, 0x01, 0x35, 0x02, 0x99, 0x00, 0x19, + 0x01, 0x72, 0x01, 0x37, 0x01, 0x98, 0x00, 0x28, + 0xdd, 0xd1, 0x70, 0x19, 0xa0, 0x61, 0x65, 0x60, + 0xe6, 0x62, 0xfe, 0xbd, 0x00, 0x00, 0xb0, 0xb5, + 0x14, 0x4d, 0x04, 0x1c, 0x28, 0x7a, 0x01, 0x28, + 0x02, 0xd1, 0x04, 0x20, 0xf6, 0xf7, 0xad, 0xf9, + 0x21, 0x1c, 0xa8, 0x6a, 0xf5, 0xf7, 0x21, 0xfc, + 0x00, 0x28, 0x03, 0xd1, 0x04, 0x20, 0x3c, 0x00, + 0x54, 0x14, 0x01, 0x00, 0xf6, 0xf7, 0xa4, 0xf9, + 0xb0, 0xbd, 0x02, 0x20, 0x28, 0x70, 0x28, 0x8c, + 0x00, 0x28, 0x00, 0xd0, 0x60, 0x81, 0x68, 0x8c, + 0x00, 0x28, 0x00, 0xd0, 0xa0, 0x81, 0xa8, 0x8c, + 0x00, 0x28, 0x00, 0xd0, 0xe0, 0x81, 0xe8, 0x69, + 0x01, 0x23, 0x02, 0x04, 0x12, 0x0c, 0x20, 0x1c, + 0x02, 0x49, 0xfc, 0xf7, 0x19, 0xff, 0xb0, 0xbd, + 0xf4, 0x6e, 0x01, 0x00, 0xa1, 0x77, 0x00, 0x00, + 0x3c, 0x00, 0x90, 0x14, 0x01, 0x00, 0xf8, 0xb5, + 0x19, 0x4e, 0x05, 0x1c, 0xb0, 0x69, 0x00, 0x28, + 0x00, 0xd1, 0x30, 0x68, 0xff, 0xf7, 0x3b, 0xfc, + 0x15, 0x4f, 0x04, 0x1c, 0x50, 0x37, 0x00, 0x28, + 0x0b, 0xd0, 0x60, 0x68, 0x29, 0x1c, 0x78, 0x60, + 0x01, 0x20, 0x38, 0x63, 0x20, 0x1c, 0xf5, 0xf7, + 0xea, 0xfb, 0x00, 0x28, 0x04, 0xd1, 0x00, 0x20, + 0xf8, 0xbd, 0x00, 0x23, 0xfb, 0x62, 0xfa, 0xe7, + 0x00, 0x23, 0x3c, 0x00, 0xcc, 0x14, 0x01, 0x00, + 0x23, 0x77, 0xf8, 0x6a, 0x00, 0x28, 0x01, 0xd1, + 0x01, 0x20, 0xf8, 0x62, 0x38, 0x7a, 0x01, 0x28, + 0x07, 0xd0, 0xf8, 0x69, 0x06, 0x49, 0x02, 0x04, + 0x12, 0x0c, 0x28, 0x1c, 0xfc, 0xf7, 0xe6, 0xfe, + 0x01, 0xe0, 0xfb, 0x62, 0xb3, 0x61, 0x01, 0x20, + 0xe5, 0xe7, 0x00, 0x00, 0xa4, 0x6e, 0x01, 0x00, + 0xdd, 0x02, 0x01, 0x00, 0x70, 0xb5, 0x0d, 0x1c, + 0x04, 0x1c, 0x16, 0x1c, 0x3c, 0x00, 0x08, 0x15, + 0x01, 0x00, 0x04, 0x2c, 0x1b, 0xd2, 0x10, 0x48, + 0x83, 0x42, 0x07, 0xd2, 0x58, 0x00, 0x0f, 0x49, + 0xef, 0xf7, 0xfb, 0xf8, 0xff, 0x30, 0x00, 0x0a, + 0x01, 0x38, 0x00, 0xe0, 0x00, 0x20, 0x1f, 0x35, + 0xea, 0x06, 0x61, 0x07, 0x09, 0x0e, 0xd2, 0x0e, + 0x11, 0x43, 0x72, 0x07, 0x52, 0x0d, 0x11, 0x43, + 0x00, 0x06, 0x00, 0x0a, 0x08, 0x43, 0x06, 0x4a, + 0xa1, 0x00, 0x50, 0x50, 0x70, 0xbd, 0x3c, 0x00, + 0x44, 0x15, 0x01, 0x00, 0x01, 0x21, 0x8d, 0x20, + 0xef, 0xf7, 0xac, 0xfe, 0x70, 0xbd, 0x00, 0x00, + 0x40, 0x9c, 0x00, 0x00, 0x00, 0x80, 0x38, 0x01, + 0xe8, 0x60, 0x01, 0x00, 0x09, 0x4a, 0x80, 0x00, + 0x10, 0x58, 0x40, 0x09, 0x40, 0x01, 0x07, 0x22, + 0x02, 0x43, 0x07, 0x48, 0x03, 0x68, 0x00, 0x2b, + 0xfc, 0xdb, 0x42, 0x60, 0x09, 0x06, 0x01, 0x60, + 0x01, 0x68, 0x00, 0x29, 0xfc, 0xdb, 0x08, 0x20, + 0x3c, 0x00, 0x80, 0x15, 0x01, 0x00, 0x70, 0x47, + 0x00, 0x00, 0xe8, 0x60, 0x01, 0x00, 0x30, 0x20, + 0x07, 0x00, 0xb0, 0xb5, 0x04, 0x1c, 0x0d, 0x1c, + 0x07, 0x49, 0xa0, 0x00, 0x08, 0x58, 0x00, 0x28, + 0x03, 0xd1, 0x02, 0x21, 0x8d, 0x20, 0xef, 0xf7, + 0x80, 0xfe, 0x29, 0x1c, 0x20, 0x1c, 0xf6, 0xf7, + 0xa8, 0xfa, 0xb0, 0xbd, 0x00, 0x00, 0xe8, 0x60, + 0x01, 0x00, 0xb0, 0xb5, 0x04, 0x1c, 0x0d, 0x1c, + 0x07, 0x49, 0x3c, 0x00, 0xbc, 0x15, 0x01, 0x00, + 0xa0, 0x00, 0x08, 0x58, 0x00, 0x28, 0x03, 0xd1, + 0x02, 0x21, 0x8d, 0x20, 0xef, 0xf7, 0x6c, 0xfe, + 0x29, 0x1c, 0x20, 0x1c, 0xff, 0xf7, 0xc4, 0xff, + 0xb0, 0xbd, 0x00, 0x00, 0xe8, 0x60, 0x01, 0x00, + 0xf8, 0xb5, 0x0d, 0x1c, 0x16, 0x1c, 0xf7, 0xf7, + 0x17, 0xf9, 0x04, 0x1c, 0x28, 0x68, 0x40, 0x4f, + 0x81, 0x78, 0x00, 0x29, 0x3b, 0xd1, 0xc1, 0x78, + 0x00, 0x29, 0x58, 0xd1, 0x3c, 0x00, 0xf8, 0x15, + 0x01, 0x00, 0xf8, 0xf7, 0xf8, 0xf9, 0x22, 0x8e, + 0x61, 0x8e, 0x8a, 0x42, 0x04, 0xd0, 0xa1, 0x6a, + 0x09, 0x18, 0xe0, 0x69, 0x81, 0x42, 0x10, 0xd9, + 0x38, 0x49, 0x32, 0x1c, 0x48, 0x6b, 0x01, 0x30, + 0x48, 0x63, 0x20, 0x6a, 0x01, 0x30, 0x20, 0x62, + 0x38, 0x68, 0x01, 0x30, 0x38, 0x60, 0xe0, 0x68, + 0x63, 0x69, 0x29, 0x1c, 0xee, 0xf7, 0xd8, 0xfe, + 0xf8, 0xbd, 0x01, 0x32, 0x12, 0x04, 0x3c, 0x00, + 0x34, 0x16, 0x01, 0x00, 0x12, 0x0c, 0x22, 0x86, + 0xa1, 0x62, 0xb8, 0x68, 0x00, 0x28, 0x34, 0xd1, + 0x2c, 0x48, 0x0c, 0x23, 0x00, 0x68, 0x1b, 0x1a, + 0x9a, 0x42, 0x07, 0xd2, 0x19, 0x23, 0x9b, 0x01, + 0xaf, 0x22, 0x92, 0x01, 0x58, 0x43, 0x10, 0x1a, + 0x81, 0x42, 0x26, 0xd3, 0x01, 0x20, 0xb8, 0x60, + 0x01, 0x21, 0x0c, 0x20, 0x00, 0xf0, 0x7a, 0xfe, + 0x1f, 0xe0, 0x01, 0x29, 0x1d, 0xd1, 0xc0, 0x78, + 0x3c, 0x00, 0x70, 0x16, 0x01, 0x00, 0x17, 0x28, + 0x1a, 0xd1, 0xa0, 0x8e, 0xe1, 0x8e, 0x88, 0x42, + 0x14, 0xd3, 0xe9, 0x68, 0x09, 0x68, 0x09, 0x79, + 0x09, 0x06, 0x0f, 0xd5, 0x60, 0x6a, 0x32, 0x1c, + 0x01, 0x30, 0x60, 0x62, 0xe0, 0x68, 0x63, 0x69, + 0x29, 0x1c, 0xee, 0xf7, 0xa3, 0xfe, 0xe8, 0x68, + 0x01, 0x68, 0x08, 0x31, 0x0b, 0x20, 0x00, 0xf0, + 0x5c, 0xfe, 0xc3, 0xe7, 0x01, 0x30, 0xa0, 0x86, + 0xa0, 0x8d, 0x3c, 0x00, 0xac, 0x16, 0x01, 0x00, + 0xe1, 0x8d, 0x88, 0x42, 0x04, 0xd1, 0x03, 0x21, + 0x02, 0x20, 0xef, 0xf7, 0xf5, 0xfd, 0xb8, 0xe7, + 0x60, 0x68, 0x45, 0x60, 0x86, 0x60, 0x00, 0x68, + 0x60, 0x60, 0xf8, 0x68, 0x01, 0x30, 0xf8, 0x60, + 0xa0, 0x8d, 0x41, 0x1c, 0xa1, 0x85, 0x00, 0x28, + 0xab, 0xd1, 0x08, 0x48, 0xb9, 0x69, 0xfd, 0xf7, + 0x61, 0xfe, 0x22, 0x1c, 0x02, 0x21, 0xf1, 0x20, + 0x02, 0xf0, 0x64, 0xf8, 0x3c, 0x00, 0xe8, 0x16, + 0x01, 0x00, 0xa1, 0xe7, 0x00, 0x00, 0xfc, 0x5a, + 0x01, 0x00, 0x90, 0x5c, 0x01, 0x00, 0x18, 0x57, + 0x01, 0x00, 0xc4, 0x60, 0x01, 0x00, 0x80, 0xb5, + 0x02, 0x1c, 0x02, 0x21, 0xf0, 0x20, 0x02, 0xf0, + 0x54, 0xf8, 0x80, 0xbd, 0x00, 0x00, 0x00, 0x28, + 0x03, 0xd1, 0x02, 0x48, 0x41, 0x78, 0xc9, 0x07, + 0xfc, 0xd5, 0x70, 0x47, 0x00, 0x00, 0x04, 0x00, + 0x07, 0x00, 0x80, 0xb5, 0x00, 0x06, 0x3c, 0x00, + 0x24, 0x17, 0x01, 0x00, 0x01, 0xd1, 0xf1, 0xf7, + 0x71, 0xfe, 0x80, 0xbd, 0x80, 0xb5, 0xf4, 0xf7, + 0xe5, 0xfa, 0x80, 0xbd, 0x80, 0xb5, 0xf6, 0xf7, + 0xeb, 0xf8, 0x80, 0xbd, 0x01, 0x49, 0x00, 0x20, + 0x08, 0x74, 0x70, 0x47, 0x78, 0x69, 0x01, 0x00, + 0x80, 0xb5, 0xc0, 0x07, 0x03, 0xd5, 0x02, 0x49, + 0x01, 0x20, 0x00, 0xf0, 0x1d, 0xfc, 0x80, 0xbd, + 0x50, 0xc3, 0x00, 0x00, 0x00, 0x06, 0x00, 0x0e, + 0x3c, 0x00, 0x60, 0x17, 0x01, 0x00, 0x01, 0x28, + 0x80, 0xb5, 0x02, 0xd1, 0xf6, 0xf7, 0xe1, 0xf9, + 0x80, 0xbd, 0x00, 0x28, 0xfc, 0xd1, 0xf1, 0xf7, + 0x4c, 0xfe, 0x80, 0xbd, 0x00, 0x00, 0x80, 0xb5, + 0xf6, 0xf7, 0xd7, 0xf9, 0x80, 0xbd, 0x03, 0x49, + 0x80, 0xb5, 0x00, 0x20, 0x08, 0x74, 0xf6, 0xf7, + 0xfe, 0xf9, 0x80, 0xbd, 0x00, 0x00, 0x78, 0x69, + 0x01, 0x00, 0x80, 0xb5, 0x00, 0x06, 0x00, 0x0e, + 0xf1, 0xf7, 0x3c, 0x00, 0x9c, 0x17, 0x01, 0x00, + 0x71, 0xfe, 0x80, 0xbd, 0x10, 0xb5, 0x01, 0x28, + 0x08, 0xd0, 0x02, 0x28, 0x03, 0xd0, 0x03, 0x28, + 0x01, 0xd0, 0xef, 0xf7, 0xa7, 0xfd, 0xf6, 0xf7, + 0xe9, 0xf9, 0x10, 0xbd, 0x01, 0xf0, 0xf8, 0xfa, + 0x04, 0x1c, 0xfa, 0xf7, 0x5d, 0xfd, 0x24, 0x1a, + 0xfa, 0xf7, 0x3e, 0xfd, 0x08, 0x49, 0x00, 0x28, + 0x0b, 0xd0, 0x48, 0x6a, 0x00, 0x28, 0x08, 0xd0, + 0x06, 0x48, 0x84, 0x42, 0x3c, 0x00, 0xd8, 0x17, + 0x01, 0x00, 0x05, 0xd2, 0x01, 0x1b, 0x01, 0x22, + 0x07, 0x20, 0x01, 0xf0, 0xf4, 0xfe, 0xe5, 0xe7, + 0x00, 0x20, 0x48, 0x61, 0xe2, 0xe7, 0x78, 0x69, + 0x01, 0x00, 0x50, 0xc3, 0x00, 0x00, 0x09, 0x49, + 0x80, 0xb5, 0x48, 0x69, 0x00, 0x28, 0x0c, 0xd0, + 0x08, 0x6a, 0xca, 0x69, 0x80, 0x1a, 0x00, 0x28, + 0x07, 0xdd, 0x00, 0x20, 0x48, 0x61, 0x01, 0x21, + 0x07, 0x20, 0x01, 0xf0, 0x10, 0xff, 0x3c, 0x00, + 0x14, 0x18, 0x01, 0x00, 0xf6, 0xf7, 0xb8, 0xf9, + 0x80, 0xbd, 0x00, 0x00, 0x78, 0x69, 0x01, 0x00, + 0x80, 0xb5, 0x00, 0xf0, 0xe7, 0xfb, 0x80, 0xbd, + 0x80, 0xb5, 0x00, 0xf0, 0x3f, 0xfc, 0x00, 0x20, + 0xf7, 0xf7, 0xd4, 0xfc, 0x80, 0xbd, 0x00, 0x00, + 0x80, 0xb5, 0x00, 0xf0, 0x37, 0xfc, 0xfd, 0xf7, + 0x6f, 0xfc, 0xf5, 0xf7, 0x73, 0xfd, 0x30, 0xf0, + 0x47, 0xfb, 0x80, 0xbd, 0x04, 0x48, 0x80, 0xb5, + 0x3c, 0x00, 0x50, 0x18, 0x01, 0x00, 0xc1, 0x6a, + 0x00, 0x6b, 0xf2, 0xf7, 0xde, 0xff, 0x01, 0x20, + 0xf7, 0xf7, 0x89, 0xf8, 0x80, 0xbd, 0xa4, 0x6c, + 0x01, 0x00, 0x10, 0xb5, 0xf3, 0xf7, 0x41, 0xf8, + 0x0d, 0x4c, 0x00, 0x28, 0x04, 0xd0, 0x01, 0x20, + 0xe0, 0x64, 0xf7, 0xf7, 0xb2, 0xfc, 0x10, 0xbd, + 0x01, 0x21, 0x01, 0x20, 0xf3, 0xf7, 0xe9, 0xf8, + 0xfd, 0xf7, 0x4d, 0xfc, 0x60, 0x6d, 0x00, 0x28, + 0x03, 0xd0, 0x3c, 0x00, 0x8c, 0x18, 0x01, 0x00, + 0xf3, 0xf7, 0x82, 0xf8, 0x00, 0x28, 0x01, 0xd0, + 0xf5, 0xf7, 0x4a, 0xfd, 0x01, 0x20, 0xf2, 0xf7, + 0xc1, 0xfc, 0x10, 0xbd, 0xa4, 0x6c, 0x01, 0x00, + 0x04, 0x48, 0x80, 0xb5, 0xc1, 0x6a, 0x00, 0x6b, + 0xf2, 0xf7, 0xb2, 0xff, 0x01, 0x20, 0xf7, 0xf7, + 0x5d, 0xf8, 0x80, 0xbd, 0xa4, 0x6c, 0x01, 0x00, + 0x80, 0xb5, 0x00, 0xf0, 0xf5, 0xfb, 0xf5, 0xf7, + 0x33, 0xfd, 0xfc, 0xf7, 0x3c, 0x00, 0xc8, 0x18, + 0x01, 0x00, 0x31, 0xfd, 0xf9, 0xf7, 0xcb, 0xff, + 0x04, 0x20, 0xf2, 0xf7, 0xa6, 0xfc, 0x80, 0xbd, + 0x00, 0x00, 0x03, 0x48, 0x80, 0xb5, 0xc1, 0x6a, + 0x00, 0x6b, 0xf2, 0xf7, 0x98, 0xff, 0x80, 0xbd, + 0x00, 0x00, 0xa4, 0x6c, 0x01, 0x00, 0x80, 0xb5, + 0x00, 0xf0, 0xdd, 0xfb, 0x00, 0x20, 0xf7, 0xf7, + 0x3c, 0xf8, 0x30, 0xf0, 0xee, 0xfa, 0x80, 0xbd, + 0x00, 0x00, 0x80, 0xb5, 0x00, 0x21, 0x3c, 0x00, + 0x04, 0x19, 0x01, 0x00, 0x01, 0x20, 0xff, 0xf7, + 0x19, 0xfa, 0x01, 0x20, 0xf2, 0xf7, 0x88, 0xfc, + 0x80, 0xbd, 0x00, 0x00, 0x80, 0xb5, 0x00, 0xf0, + 0xc9, 0xfb, 0xfc, 0xf7, 0x07, 0xfd, 0x01, 0x21, + 0x01, 0x20, 0xff, 0xf7, 0x0b, 0xfa, 0x04, 0x20, + 0xf2, 0xf7, 0x7a, 0xfc, 0x80, 0xbd, 0x00, 0x00, + 0x80, 0xb5, 0x00, 0x22, 0x00, 0x21, 0x00, 0x20, + 0x00, 0xf0, 0x8a, 0xfb, 0x80, 0xbd, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0x19, 0x01, 0x00, 0x03, 0x48, + 0x80, 0xb5, 0x82, 0x6a, 0x01, 0x21, 0x04, 0x20, + 0x00, 0xf0, 0x81, 0xfb, 0x80, 0xbd, 0xd4, 0x79, + 0x01, 0x00, 0x80, 0xb5, 0x00, 0x22, 0x00, 0x21, + 0x03, 0x20, 0x00, 0xf0, 0x78, 0xfb, 0x80, 0xbd, + 0x00, 0x00, 0x03, 0x48, 0x80, 0xb5, 0x82, 0x6a, + 0x01, 0x21, 0x04, 0x20, 0x00, 0xf0, 0x6f, 0xfb, + 0x80, 0xbd, 0xd4, 0x79, 0x01, 0x00, 0x80, 0xb5, + 0x00, 0x22, 0x3c, 0x00, 0x7c, 0x19, 0x01, 0x00, + 0x00, 0x21, 0x03, 0x20, 0x00, 0xf0, 0x66, 0xfb, + 0x80, 0xbd, 0x00, 0x00, 0x06, 0x48, 0x80, 0xb5, + 0x81, 0x68, 0x42, 0x69, 0x00, 0x69, 0x51, 0x18, + 0x81, 0x42, 0x03, 0xd9, 0x01, 0x21, 0x01, 0x20, + 0x00, 0xf0, 0x58, 0xfb, 0x80, 0xbd, 0x00, 0x00, + 0xd4, 0x79, 0x01, 0x00, 0x06, 0x48, 0x80, 0xb5, + 0x82, 0x88, 0x81, 0x68, 0x00, 0x69, 0x51, 0x18, + 0x81, 0x42, 0x03, 0xd9, 0x3c, 0x00, 0xb8, 0x19, + 0x01, 0x00, 0x01, 0x21, 0x02, 0x20, 0x00, 0xf0, + 0x48, 0xfb, 0x80, 0xbd, 0x00, 0x00, 0xd4, 0x79, + 0x01, 0x00, 0x10, 0xb5, 0x08, 0x4c, 0x20, 0x7b, + 0x21, 0x6a, 0xf9, 0xf7, 0x9c, 0xfa, 0xa1, 0x69, + 0x42, 0x18, 0xa0, 0x68, 0x21, 0x69, 0x80, 0x18, + 0x88, 0x42, 0x03, 0xd9, 0x01, 0x21, 0x02, 0x20, + 0x00, 0xf0, 0x33, 0xfb, 0x10, 0xbd, 0xd4, 0x79, + 0x01, 0x00, 0x80, 0xb5, 0x00, 0x22, 0x3c, 0x00, + 0xf4, 0x19, 0x01, 0x00, 0x00, 0x21, 0x00, 0x20, + 0x00, 0xf0, 0x2a, 0xfb, 0x80, 0xbd, 0x00, 0x00, + 0x00, 0x06, 0x00, 0x0e, 0x01, 0x28, 0x80, 0xb5, + 0x02, 0xd1, 0xf6, 0xf7, 0x8f, 0xf8, 0x80, 0xbd, + 0x00, 0x28, 0xfc, 0xd1, 0xf1, 0xf7, 0xfa, 0xfc, + 0x80, 0xbd, 0x00, 0x00, 0x80, 0xb5, 0xf6, 0xf7, + 0x85, 0xf8, 0x80, 0xbd, 0x80, 0xb5, 0x00, 0x06, + 0x00, 0x0e, 0xf1, 0xf7, 0x29, 0xfd, 0x80, 0xbd, + 0x3c, 0x00, 0x30, 0x1a, 0x01, 0x00, 0xb0, 0xb5, + 0x02, 0x25, 0x02, 0x28, 0x10, 0x4c, 0x0b, 0xd1, + 0xfb, 0xf7, 0x47, 0xfc, 0x00, 0x28, 0x01, 0xd1, + 0xfe, 0xf7, 0x4f, 0xff, 0x25, 0x70, 0xa1, 0x68, + 0x0c, 0x48, 0xfd, 0xf7, 0xa8, 0xfc, 0xb0, 0xbd, + 0x03, 0x28, 0x0d, 0xd1, 0x08, 0x48, 0x7d, 0x23, + 0x1c, 0x38, 0x00, 0x69, 0xdb, 0x00, 0x58, 0x43, + 0x19, 0x1c, 0x40, 0x18, 0x41, 0x08, 0x02, 0x20, + 0x00, 0xf0, 0x3c, 0x00, 0x6c, 0x1a, 0x01, 0x00, + 0x91, 0xfa, 0x25, 0x70, 0xb0, 0xbd, 0xf8, 0xf7, + 0x31, 0xf9, 0xb0, 0xbd, 0x78, 0x69, 0x01, 0x00, + 0x34, 0x63, 0x01, 0x00, 0x10, 0xb5, 0x05, 0x4c, + 0xe0, 0x68, 0x00, 0x28, 0x01, 0xd1, 0xef, 0xf7, + 0x39, 0xfc, 0x02, 0x20, 0x20, 0x70, 0x00, 0xf0, + 0xaf, 0xfa, 0x10, 0xbd, 0x78, 0x69, 0x01, 0x00, + 0x03, 0x48, 0x80, 0xb5, 0x82, 0x6a, 0x01, 0x21, + 0x04, 0x20, 0x00, 0xf0, 0x3c, 0x00, 0xa8, 0x1a, + 0x01, 0x00, 0xd3, 0xfa, 0x80, 0xbd, 0xd4, 0x79, + 0x01, 0x00, 0x80, 0xb5, 0x00, 0x22, 0x00, 0x21, + 0x03, 0x20, 0x00, 0xf0, 0xca, 0xfa, 0x80, 0xbd, + 0x00, 0x00, 0x80, 0xb5, 0x00, 0x22, 0x00, 0x21, + 0x00, 0x20, 0x00, 0xf0, 0xc2, 0xfa, 0x80, 0xbd, + 0x00, 0x00, 0x03, 0x48, 0x80, 0xb5, 0x42, 0x69, + 0x01, 0x21, 0x01, 0x20, 0x00, 0xf0, 0xb9, 0xfa, + 0x80, 0xbd, 0xd4, 0x79, 0x01, 0x00, 0x3c, 0x00, + 0xe4, 0x1a, 0x01, 0x00, 0x06, 0x48, 0x80, 0xb5, + 0x82, 0x88, 0x00, 0x2a, 0x02, 0xd0, 0x01, 0x21, + 0x02, 0x20, 0x02, 0xe0, 0x00, 0x22, 0x00, 0x21, + 0x00, 0x20, 0x00, 0xf0, 0xa9, 0xfa, 0x80, 0xbd, + 0xd4, 0x79, 0x01, 0x00, 0x10, 0xb5, 0x06, 0x4c, + 0x20, 0x7b, 0x21, 0x6a, 0xf9, 0xf7, 0xfe, 0xf9, + 0xa1, 0x69, 0x42, 0x18, 0x01, 0x21, 0x02, 0x20, + 0x00, 0xf0, 0x9a, 0xfa, 0x10, 0xbd, 0x00, 0x00, + 0x3c, 0x00, 0x20, 0x1b, 0x01, 0x00, 0xd4, 0x79, + 0x01, 0x00, 0x80, 0xb5, 0x00, 0x22, 0x00, 0x21, + 0x00, 0x20, 0x00, 0xf0, 0x90, 0xfa, 0x80, 0xbd, + 0x00, 0x00, 0x38, 0xb5, 0xfa, 0xf7, 0x41, 0xfe, + 0x00, 0x20, 0xf0, 0xf7, 0x80, 0xf8, 0x00, 0x90, + 0x00, 0xab, 0x1c, 0x88, 0x5d, 0x88, 0xf8, 0xf7, + 0x3c, 0xf9, 0x00, 0x2c, 0x02, 0xd0, 0xfd, 0xf7, + 0x9e, 0xfa, 0x02, 0xe0, 0x01, 0x20, 0xf6, 0xf7, + 0x0a, 0xff, 0x3c, 0x00, 0x5c, 0x1b, 0x01, 0x00, + 0x29, 0x1c, 0x20, 0x1c, 0xfc, 0xf7, 0xb8, 0xfc, + 0x00, 0x2c, 0x02, 0xd0, 0xf5, 0xf7, 0xe0, 0xfb, + 0x02, 0xe0, 0x00, 0x20, 0x00, 0xf0, 0xdc, 0xf9, + 0x03, 0x20, 0x00, 0x2c, 0x00, 0xd1, 0x02, 0x20, + 0x00, 0x06, 0x00, 0x0e, 0xf2, 0xf7, 0x4e, 0xfb, + 0x38, 0xbd, 0x00, 0x00, 0x03, 0x48, 0x80, 0xb5, + 0x82, 0x6a, 0x01, 0x21, 0x04, 0x20, 0x00, 0xf0, + 0x5d, 0xfa, 0x80, 0xbd, 0x3c, 0x00, 0x98, 0x1b, + 0x01, 0x00, 0xd4, 0x79, 0x01, 0x00, 0x80, 0xb5, + 0x30, 0xf0, 0x9b, 0xf9, 0x80, 0xbd, 0x80, 0xb5, + 0x00, 0x22, 0x00, 0x21, 0x03, 0x20, 0x00, 0xf0, + 0x50, 0xfa, 0x80, 0xbd, 0x00, 0x00, 0x03, 0x48, + 0x80, 0xb5, 0x42, 0x69, 0x01, 0x21, 0x01, 0x20, + 0x00, 0xf0, 0x47, 0xfa, 0x80, 0xbd, 0xd4, 0x79, + 0x01, 0x00, 0x04, 0x48, 0x80, 0xb5, 0x82, 0x88, + 0x00, 0x2a, 0x03, 0xd0, 0x01, 0x21, 0x3c, 0x00, + 0xd4, 0x1b, 0x01, 0x00, 0x02, 0x20, 0x00, 0xf0, + 0x3b, 0xfa, 0x80, 0xbd, 0xd4, 0x79, 0x01, 0x00, + 0x10, 0xb5, 0x06, 0x4c, 0x20, 0x7b, 0x21, 0x6a, + 0xf9, 0xf7, 0x90, 0xf9, 0xa1, 0x69, 0x42, 0x18, + 0x01, 0x21, 0x02, 0x20, 0x00, 0xf0, 0x2c, 0xfa, + 0x10, 0xbd, 0x00, 0x00, 0xd4, 0x79, 0x01, 0x00, + 0x80, 0xb5, 0xfc, 0xf7, 0x93, 0xfb, 0x01, 0x21, + 0x01, 0x20, 0xff, 0xf7, 0x97, 0xf8, 0x04, 0x20, + 0x3c, 0x00, 0x10, 0x1c, 0x01, 0x00, 0xf2, 0xf7, + 0x06, 0xfb, 0x80, 0xbd, 0x00, 0x00, 0x80, 0xb5, + 0x2f, 0xf0, 0x6b, 0xfb, 0x00, 0x28, 0x0a, 0xd0, + 0x01, 0x20, 0xf2, 0xf7, 0xfc, 0xfa, 0xfa, 0xf7, + 0x2a, 0xfc, 0x00, 0x28, 0x02, 0xd1, 0x04, 0x20, + 0xf6, 0xf7, 0x5d, 0xf8, 0x80, 0xbd, 0x03, 0x21, + 0x16, 0x20, 0xef, 0xf7, 0x32, 0xfb, 0x80, 0xbd, + 0x00, 0x00, 0x02, 0x48, 0x80, 0xb5, 0x00, 0x68, + 0xee, 0xf7, 0x3c, 0x00, 0x4c, 0x1c, 0x01, 0x00, + 0xc5, 0xfb, 0x80, 0xbd, 0xd4, 0x79, 0x01, 0x00, + 0x03, 0x48, 0x80, 0xb5, 0x42, 0x69, 0x01, 0x21, + 0x01, 0x20, 0x00, 0xf0, 0xf7, 0xf9, 0x80, 0xbd, + 0xd4, 0x79, 0x01, 0x00, 0x80, 0xb5, 0x30, 0xf0, + 0x35, 0xf9, 0x80, 0xbd, 0xb0, 0xb5, 0x18, 0x4c, + 0xaa, 0x20, 0x00, 0x5d, 0x04, 0x28, 0x19, 0xd1, + 0x01, 0x25, 0xe5, 0x62, 0x25, 0x63, 0x01, 0xf0, + 0x93, 0xf8, 0xa0, 0x66, 0x3c, 0x00, 0x88, 0x1c, + 0x01, 0x00, 0x01, 0xf0, 0xfc, 0xfd, 0xf2, 0xf7, + 0x2e, 0xfe, 0x00, 0x28, 0x0e, 0xd0, 0x02, 0x20, + 0xf2, 0xf7, 0xc3, 0xfa, 0xa5, 0x60, 0x01, 0xf0, + 0x86, 0xf8, 0x64, 0x30, 0x60, 0x60, 0xfa, 0xf7, + 0x8a, 0xfd, 0x01, 0x21, 0x01, 0x20, 0xff, 0xf7, + 0x46, 0xf8, 0xb0, 0xbd, 0x01, 0x20, 0xf2, 0xf7, + 0xb4, 0xfa, 0x00, 0x20, 0xa0, 0x60, 0x00, 0x21, + 0x01, 0x20, 0xff, 0xf7, 0x3c, 0xf8, 0x3c, 0x00, + 0xc4, 0x1c, 0x01, 0x00, 0xf2, 0xf7, 0x66, 0xfe, + 0x00, 0x28, 0xf1, 0xd0, 0xfa, 0xf7, 0x76, 0xfd, + 0xb0, 0xbd, 0x00, 0x00, 0xa4, 0x6c, 0x01, 0x00, + 0x80, 0xb5, 0x00, 0x20, 0xef, 0xf7, 0xd6, 0xfe, + 0x80, 0xbd, 0x00, 0x00, 0x80, 0xb5, 0x01, 0x20, + 0xef, 0xf7, 0xd0, 0xfe, 0x80, 0xbd, 0x00, 0x00, + 0xac, 0x21, 0x09, 0x5c, 0x02, 0x4a, 0x09, 0x02, + 0x89, 0x18, 0xc0, 0x31, 0x81, 0x60, 0x70, 0x47, + 0x3c, 0x00, 0x00, 0x1d, 0x01, 0x00, 0x70, 0x75, + 0x01, 0x00, 0x80, 0xb5, 0x01, 0x28, 0x04, 0xd1, + 0x03, 0xc9, 0x09, 0x68, 0xee, 0xf7, 0x64, 0xfb, + 0x80, 0xbd, 0x01, 0x21, 0x14, 0x20, 0xef, 0xf7, + 0xc4, 0xfa, 0x80, 0xbd, 0x00, 0x00, 0x00, 0x28, + 0x02, 0xd1, 0x02, 0x48, 0x40, 0x68, 0x70, 0x47, + 0x40, 0x68, 0x70, 0x47, 0x00, 0x00, 0x58, 0x75, + 0x01, 0x00, 0x10, 0xb5, 0x00, 0x24, 0xf8, 0xf7, + 0x1c, 0xfb, 0x3c, 0x00, 0x3c, 0x1d, 0x01, 0x00, + 0x00, 0x28, 0x04, 0xd0, 0x40, 0x30, 0x80, 0x7a, + 0x05, 0x28, 0x00, 0xd1, 0x01, 0x24, 0x20, 0x1c, + 0x10, 0xbd, 0x00, 0x00, 0x04, 0x48, 0x00, 0x21, + 0x40, 0x68, 0x01, 0xe0, 0x01, 0x63, 0x40, 0x68, + 0x00, 0x28, 0xfb, 0xd1, 0x70, 0x47, 0x00, 0x00, + 0x58, 0x75, 0x01, 0x00, 0xb0, 0xb5, 0x04, 0x1c, + 0x0d, 0x1c, 0xf7, 0xf7, 0xa5, 0xf8, 0x40, 0x34, + 0xe5, 0x72, 0xb0, 0xbd, 0x3c, 0x00, 0x78, 0x1d, + 0x01, 0x00, 0xf8, 0xb5, 0x07, 0x1c, 0xf8, 0xf7, + 0xfa, 0xfa, 0x04, 0x1c, 0x04, 0xd0, 0x05, 0x21, + 0x14, 0x20, 0xef, 0xf7, 0x8c, 0xfa, 0x28, 0xe0, + 0x00, 0x25, 0x14, 0x49, 0x28, 0x02, 0x46, 0x18, + 0x30, 0x1c, 0x44, 0x30, 0x06, 0x22, 0x12, 0x49, + 0xee, 0xf7, 0x2d, 0xfb, 0x00, 0x28, 0x02, 0xd1, + 0xac, 0x20, 0x85, 0x55, 0x34, 0x1c, 0x01, 0x35, + 0x03, 0x2d, 0xee, 0xd3, 0x00, 0x2c, 0x3c, 0x00, + 0xb4, 0x1d, 0x01, 0x00, 0x14, 0xd0, 0x39, 0x1c, + 0x20, 0x1c, 0xf8, 0xf7, 0x2b, 0xf8, 0x09, 0x49, + 0x00, 0x20, 0x20, 0x60, 0x18, 0x39, 0x48, 0x68, + 0x60, 0x60, 0x00, 0x28, 0x00, 0xd0, 0x04, 0x60, + 0x4c, 0x60, 0xca, 0x68, 0x00, 0x2a, 0x03, 0xd0, + 0x01, 0x21, 0x20, 0x1c, 0xee, 0xf7, 0xfe, 0xfa, + 0x20, 0x1c, 0xf8, 0xbd, 0x70, 0x75, 0x01, 0x00, + 0x58, 0x46, 0x01, 0x00, 0x80, 0xb5, 0xf8, 0xf7, + 0x3c, 0x00, 0xf0, 0x1d, 0x01, 0x00, 0xc1, 0xfa, + 0x00, 0x28, 0x04, 0xd1, 0x06, 0x21, 0x14, 0x20, + 0xef, 0xf7, 0x53, 0xfa, 0x80, 0xbd, 0xf5, 0xf7, + 0x16, 0xfc, 0x80, 0xbd, 0x00, 0x00, 0x80, 0xb5, + 0xf8, 0xf7, 0xb3, 0xfa, 0x80, 0xbd, 0x10, 0xb5, + 0x09, 0x4c, 0x21, 0x88, 0x02, 0x29, 0x03, 0xd1, + 0x14, 0x20, 0xef, 0xf7, 0x42, 0xfa, 0x04, 0xe0, + 0xa3, 0x68, 0x8a, 0x00, 0x98, 0x50, 0x48, 0x1c, + 0x20, 0x80, 0x3c, 0x00, 0x2c, 0x1e, 0x01, 0x00, + 0x20, 0x88, 0x01, 0x38, 0x00, 0x04, 0x00, 0x0c, + 0x10, 0xbd, 0x00, 0x00, 0x58, 0x75, 0x01, 0x00, + 0x0b, 0x1c, 0x11, 0x1c, 0x08, 0x4a, 0x80, 0xb5, + 0x12, 0x88, 0x90, 0x42, 0x06, 0xd2, 0xda, 0x68, + 0xc0, 0x00, 0x12, 0x18, 0x14, 0x20, 0x01, 0xf0, + 0xbb, 0xfb, 0x80, 0xbd, 0x03, 0x21, 0x14, 0x20, + 0xef, 0xf7, 0x22, 0xfa, 0x80, 0xbd, 0x00, 0x00, + 0x58, 0x75, 0x01, 0x00, 0x3c, 0x00, 0x68, 0x1e, + 0x01, 0x00, 0x08, 0x4a, 0x80, 0xb5, 0x12, 0x88, + 0x90, 0x42, 0x06, 0xd2, 0xc9, 0x68, 0xc0, 0x00, + 0x09, 0x18, 0x14, 0x20, 0x01, 0xf0, 0xdb, 0xfb, + 0x80, 0xbd, 0x04, 0x21, 0x14, 0x20, 0xef, 0xf7, + 0x0e, 0xfa, 0x80, 0xbd, 0x00, 0x00, 0x58, 0x75, + 0x01, 0x00, 0x01, 0x49, 0xc8, 0x60, 0x70, 0x47, + 0x00, 0x00, 0x58, 0x75, 0x01, 0x00, 0x80, 0xb5, + 0x06, 0x22, 0x44, 0x30, 0xee, 0xf7, 0x3c, 0x00, + 0xa4, 0x1e, 0x01, 0x00, 0xab, 0xfa, 0x00, 0x28, + 0x01, 0xd1, 0x01, 0x20, 0x80, 0xbd, 0x00, 0x20, + 0x80, 0xbd, 0x00, 0x00, 0x1c, 0xb5, 0x14, 0x4c, + 0x20, 0x69, 0x00, 0x28, 0x23, 0xd0, 0x20, 0x78, + 0x0a, 0x28, 0x01, 0xd0, 0x00, 0xf0, 0xfc, 0xf8, + 0x00, 0x20, 0x60, 0x61, 0x0f, 0x48, 0x40, 0x79, + 0xa0, 0x70, 0x00, 0x28, 0x01, 0xd0, 0x01, 0x28, + 0x15, 0xd1, 0xfd, 0xf7, 0xed, 0xfe, 0x01, 0x90, + 0x3c, 0x00, 0xe0, 0x1e, 0x01, 0x00, 0xfd, 0xf7, + 0x82, 0xfe, 0x00, 0x90, 0x00, 0xab, 0x18, 0x79, + 0x19, 0x78, 0x40, 0x1a, 0x18, 0x71, 0x58, 0x79, + 0x59, 0x78, 0x40, 0x1a, 0x58, 0x71, 0x01, 0x98, + 0xf2, 0xf7, 0x89, 0xfe, 0x05, 0x20, 0x20, 0x70, + 0x00, 0xf0, 0xbf, 0xf9, 0x1c, 0xbd, 0x7c, 0x78, + 0x01, 0x00, 0x0c, 0x5a, 0x01, 0x00, 0x08, 0xb5, + 0x04, 0x4a, 0x00, 0x90, 0x14, 0x32, 0x00, 0x20, + 0x02, 0x4b, 0x3c, 0x00, 0x1c, 0x1f, 0x01, 0x00, + 0x02, 0x49, 0xf1, 0xf7, 0x7d, 0xf9, 0x08, 0xbd, + 0x2c, 0x75, 0x01, 0x00, 0xb1, 0xa8, 0x00, 0x00, + 0xb0, 0xb5, 0x00, 0x28, 0x06, 0xd0, 0x01, 0x28, + 0x06, 0xd0, 0x02, 0x28, 0x07, 0xd1, 0x0c, 0x4c, + 0x01, 0x25, 0x07, 0xe0, 0x0b, 0x4c, 0x04, 0xe0, + 0x0a, 0x4c, 0x2a, 0x3c, 0x01, 0xe0, 0x08, 0x4c, + 0xb6, 0x34, 0x00, 0x25, 0x00, 0xf0, 0x2c, 0xff, + 0x07, 0x49, 0x89, 0x6e, 0x3c, 0x00, 0x58, 0x1f, + 0x01, 0x00, 0x09, 0x19, 0x09, 0x1a, 0xa1, 0x42, + 0x00, 0xd9, 0x00, 0x21, 0x2a, 0x1c, 0x16, 0x20, + 0x01, 0xf0, 0x31, 0xfb, 0xb0, 0xbd, 0x71, 0x02, + 0x00, 0x00, 0x0c, 0x05, 0x00, 0x00, 0xa4, 0x6c, + 0x01, 0x00, 0x8c, 0xb5, 0x00, 0xab, 0x8e, 0x21, + 0x19, 0x80, 0xfc, 0xf7, 0x38, 0xf9, 0x01, 0x90, + 0x68, 0x46, 0xfb, 0xf7, 0xa6, 0xfa, 0x8c, 0xbd, + 0x00, 0x00, 0xbf, 0xb5, 0x13, 0x4a, 0x3c, 0x00, + 0x94, 0x1f, 0x01, 0x00, 0x01, 0x91, 0x0d, 0x1c, + 0x11, 0x7c, 0x88, 0x43, 0x04, 0x1c, 0x21, 0x43, + 0x08, 0x1c, 0x10, 0x74, 0xa0, 0x07, 0x0b, 0xd5, + 0x0e, 0x48, 0x00, 0x90, 0x01, 0x20, 0x02, 0x90, + 0x00, 0xf0, 0xfc, 0xfe, 0x0c, 0x49, 0x40, 0x18, + 0x03, 0x90, 0x68, 0x46, 0xf9, 0xf7, 0x6a, 0xff, + 0xe0, 0x07, 0x0c, 0xd5, 0xf1, 0xf7, 0x2c, 0xfd, + 0x00, 0x28, 0x03, 0xd0, 0x07, 0x48, 0x85, 0x42, + 0x3c, 0x00, 0xd0, 0x1f, 0x01, 0x00, 0x00, 0xd2, + 0x01, 0x90, 0x06, 0x48, 0x00, 0x90, 0x68, 0x46, + 0xf9, 0xf7, 0x09, 0xff, 0xbf, 0xbd, 0x78, 0x69, + 0x01, 0x00, 0x81, 0xea, 0x00, 0x00, 0x10, 0x27, + 0x00, 0x00, 0xa0, 0x86, 0x01, 0x00, 0x75, 0xea, + 0x00, 0x00, 0x10, 0xb5, 0x0a, 0x4c, 0x60, 0x69, + 0x00, 0x28, 0x0e, 0xd1, 0x01, 0x20, 0x60, 0x61, + 0xa1, 0x68, 0x07, 0x48, 0xfd, 0xf7, 0xcb, 0xf9, + 0x00, 0x21, 0x3c, 0x00, 0x0c, 0x20, 0x01, 0x00, + 0xa0, 0x68, 0xf9, 0xf7, 0xd1, 0xfb, 0x01, 0x22, + 0x07, 0x20, 0x04, 0x49, 0x01, 0xf0, 0xd8, 0xfa, + 0x10, 0xbd, 0x00, 0x00, 0x78, 0x69, 0x01, 0x00, + 0x34, 0x63, 0x01, 0x00, 0x98, 0x3a, 0x00, 0x00, + 0x10, 0xb5, 0x0c, 0x1c, 0x11, 0x1c, 0x06, 0x4a, + 0x00, 0x2b, 0x10, 0x70, 0x03, 0xd0, 0x00, 0x28, + 0x02, 0xd1, 0xf9, 0xf7, 0xf5, 0xfd, 0x10, 0xbd, + 0x20, 0x1c, 0xf9, 0xf7, 0x3c, 0x00, 0x48, 0x20, + 0x01, 0x00, 0x01, 0xfe, 0x10, 0xbd, 0xa0, 0x79, + 0x01, 0x00, 0xb0, 0xb5, 0x0a, 0x4c, 0x05, 0x1c, + 0xe3, 0x6a, 0x20, 0x1f, 0x01, 0x33, 0xe3, 0x62, + 0x00, 0x88, 0x00, 0x29, 0x06, 0xd0, 0xa1, 0x68, + 0x89, 0x18, 0x21, 0x61, 0x05, 0x4a, 0x00, 0xf0, + 0xfc, 0xfe, 0x01, 0xe0, 0x00, 0xf0, 0xcf, 0xfe, + 0x25, 0x77, 0xb0, 0xbd, 0x00, 0x00, 0xd4, 0x79, + 0x01, 0x00, 0x55, 0xe3, 0x00, 0x00, 0x3c, 0x00, + 0x84, 0x20, 0x01, 0x00, 0x01, 0x1c, 0x03, 0x48, + 0x80, 0xb5, 0x40, 0x88, 0xff, 0xf7, 0xec, 0xfe, + 0x80, 0xbd, 0x00, 0x00, 0x98, 0x7c, 0x01, 0x00, + 0x03, 0x48, 0x80, 0xb5, 0xc1, 0x68, 0x18, 0x38, + 0x80, 0x88, 0xff, 0xf7, 0xe1, 0xfe, 0x80, 0xbd, + 0x70, 0x7c, 0x01, 0x00, 0x80, 0xb5, 0x00, 0x21, + 0x16, 0x20, 0x01, 0xf0, 0xbf, 0xfa, 0x01, 0x21, + 0x16, 0x20, 0x01, 0xf0, 0xbb, 0xfa, 0x80, 0xbd, + 0x3c, 0x00, 0xc0, 0x20, 0x01, 0x00, 0x10, 0xb5, + 0x0b, 0x4c, 0x20, 0x78, 0x0a, 0x28, 0x10, 0xd0, + 0x01, 0x20, 0x60, 0x61, 0x0a, 0x21, 0x13, 0x20, + 0x01, 0xf0, 0xaf, 0xfa, 0x0a, 0x20, 0x60, 0x70, + 0x20, 0x70, 0xfd, 0xf7, 0x3c, 0xfb, 0x01, 0x20, + 0xfd, 0xf7, 0xe9, 0xfb, 0x00, 0x20, 0xfa, 0xf7, + 0xc4, 0xf9, 0x10, 0xbd, 0x00, 0x00, 0x7c, 0x78, + 0x01, 0x00, 0x10, 0xb5, 0x0c, 0x4c, 0x00, 0x20, + 0x0b, 0x49, 0x3c, 0x00, 0xfc, 0x20, 0x01, 0x00, + 0x20, 0x63, 0xe0, 0x62, 0x50, 0x39, 0x88, 0x61, + 0x20, 0x70, 0x08, 0x48, 0x38, 0x21, 0x0c, 0x38, + 0x00, 0x7a, 0x08, 0x55, 0x81, 0x21, 0x18, 0x20, + 0x01, 0xf0, 0x8e, 0xfa, 0x20, 0x69, 0x01, 0x28, + 0x02, 0xd1, 0x00, 0x20, 0xf5, 0xf7, 0x3e, 0xfb, + 0x10, 0xbd, 0x00, 0x00, 0xf4, 0x6e, 0x01, 0x00, + 0xb0, 0xb5, 0x1c, 0x4c, 0x00, 0x25, 0x2c, 0x22, + 0x01, 0x1d, 0x20, 0x1c, 0x3c, 0x00, 0x38, 0x21, + 0x01, 0x00, 0x9a, 0xb0, 0xee, 0xf7, 0x39, 0xfa, + 0x18, 0x49, 0x2c, 0x31, 0x08, 0x1c, 0x00, 0x7a, + 0x8a, 0x69, 0x00, 0x2a, 0x13, 0xd1, 0x02, 0x28, + 0x03, 0xd1, 0xa0, 0x68, 0x00, 0x28, 0x20, 0xd0, + 0x04, 0xe0, 0x00, 0x28, 0x1d, 0xd1, 0x60, 0x68, + 0x00, 0x28, 0x1a, 0xd0, 0x80, 0x02, 0x88, 0x61, + 0x0e, 0x48, 0x69, 0x46, 0x24, 0x38, 0x00, 0x68, + 0xef, 0xf7, 0xcb, 0xfb, 0x11, 0xe0, 0x3c, 0x00, + 0x74, 0x21, 0x01, 0x00, 0x00, 0x22, 0x02, 0x28, + 0x03, 0xd1, 0xa0, 0x68, 0x00, 0x28, 0x09, 0xd1, + 0x04, 0xe0, 0x00, 0x28, 0x08, 0xd1, 0x60, 0x68, + 0x00, 0x28, 0x03, 0xd1, 0x8a, 0x61, 0xff, 0xf7, + 0xb1, 0xff, 0x01, 0xe0, 0x80, 0x02, 0x88, 0x61, + 0x28, 0x1c, 0x1a, 0xb0, 0xb0, 0xbd, 0x00, 0x00, + 0xc8, 0x6e, 0x01, 0x00, 0xf8, 0xb5, 0x0c, 0x49, + 0x02, 0x20, 0x48, 0x60, 0x0b, 0x49, 0x00, 0x05, + 0x3c, 0x00, 0xb0, 0x21, 0x01, 0x00, 0x08, 0x60, + 0x0b, 0x4f, 0xb8, 0x68, 0xf9, 0x68, 0x7c, 0x68, + 0x45, 0x1a, 0x2e, 0x1c, 0x04, 0xe0, 0xa0, 0x68, + 0x61, 0x68, 0xee, 0xf7, 0x09, 0xf9, 0x24, 0x68, + 0x01, 0x3d, 0xf8, 0xd2, 0x7c, 0x60, 0xf8, 0x68, + 0x80, 0x19, 0xf8, 0x60, 0xf8, 0xbd, 0x40, 0x20, + 0x07, 0x00, 0x00, 0x10, 0x07, 0x00, 0x44, 0xe3, + 0x01, 0x00, 0xf8, 0xb5, 0x1f, 0x4e, 0x04, 0x1c, + 0x30, 0x69, 0x3c, 0x00, 0xec, 0x21, 0x01, 0x00, + 0x01, 0x21, 0xf9, 0xf7, 0x99, 0xfa, 0x1d, 0x49, + 0x60, 0x00, 0x40, 0x18, 0x10, 0x38, 0x81, 0x7b, + 0x1b, 0x4a, 0x51, 0x72, 0xc0, 0x7b, 0x10, 0x74, + 0x1a, 0x4f, 0x1b, 0x4d, 0x0e, 0x2c, 0x0a, 0xd1, + 0x01, 0x22, 0x02, 0x21, 0x08, 0x20, 0x01, 0xf0, + 0xf3, 0xfb, 0x03, 0x20, 0xff, 0x21, 0x41, 0x31, + 0x39, 0x86, 0x14, 0x21, 0x08, 0xe0, 0x02, 0x22, + 0x01, 0x21, 0x08, 0x20, 0x3c, 0x00, 0x28, 0x22, + 0x01, 0x00, 0x01, 0xf0, 0xe8, 0xfb, 0x12, 0x49, + 0x02, 0x20, 0x39, 0x86, 0x10, 0x21, 0xa9, 0x71, + 0xe8, 0x71, 0x10, 0x48, 0x11, 0x4a, 0x00, 0x19, + 0x10, 0x38, 0xc0, 0x7b, 0x00, 0x28, 0x03, 0xd0, + 0x01, 0x21, 0x51, 0x73, 0x10, 0x73, 0x01, 0xe0, + 0x00, 0x20, 0x50, 0x73, 0x00, 0x21, 0x20, 0x1c, + 0xfd, 0xf7, 0xe5, 0xfd, 0x30, 0x69, 0xf9, 0xf7, + 0x08, 0xfb, 0xf8, 0xbd, 0x00, 0x00, 0x3c, 0x00, + 0x64, 0x22, 0x01, 0x00, 0x40, 0x7c, 0x01, 0x00, + 0x76, 0x46, 0x01, 0x00, 0x0c, 0x80, 0x07, 0x00, + 0x30, 0x80, 0x07, 0x00, 0x00, 0x80, 0x07, 0x00, + 0xff, 0x01, 0x00, 0x00, 0x5c, 0x57, 0x01, 0x00, + 0xd0, 0x80, 0x07, 0x00, 0x10, 0xb5, 0x15, 0x4c, + 0x14, 0x4a, 0x21, 0x78, 0x00, 0x20, 0x18, 0x32, + 0x05, 0x29, 0x1d, 0xd0, 0x06, 0x29, 0x1b, 0xd0, + 0x07, 0x29, 0x01, 0xd0, 0x08, 0x29, 0x06, 0xd1, + 0x3c, 0x00, 0xa0, 0x22, 0x01, 0x00, 0x91, 0x68, + 0x05, 0x20, 0x10, 0x29, 0x00, 0xdb, 0x06, 0x20, + 0x20, 0x70, 0x01, 0x20, 0xa1, 0x78, 0x00, 0x28, + 0x61, 0x70, 0x0b, 0xd0, 0x00, 0x20, 0xfa, 0xf7, + 0xdc, 0xf8, 0x00, 0x21, 0x60, 0x78, 0xf4, 0xf7, + 0x3c, 0xfa, 0x0a, 0x22, 0x1e, 0x21, 0x13, 0x20, + 0x01, 0xf0, 0x7f, 0xf9, 0x10, 0xbd, 0xd1, 0x69, + 0x07, 0x20, 0x10, 0x29, 0xe8, 0xdb, 0x08, 0x20, + 0xe6, 0xe7, 0x3c, 0x00, 0xdc, 0x22, 0x01, 0x00, + 0x7c, 0x78, 0x01, 0x00, 0xb0, 0xb5, 0x0d, 0x1c, + 0x01, 0x1c, 0x04, 0x1c, 0x44, 0x31, 0x00, 0x20, + 0xf6, 0xf7, 0x40, 0xfa, 0x30, 0x34, 0x00, 0x2d, + 0x07, 0xd0, 0x0e, 0xc8, 0x0e, 0xc4, 0x08, 0xc8, + 0x10, 0x38, 0x08, 0xc4, 0xf4, 0xf7, 0xc4, 0xf9, + 0xb0, 0xbd, 0x1e, 0xcc, 0x1e, 0xc0, 0xb0, 0xbd, + 0xf8, 0xb5, 0x08, 0x1c, 0x11, 0x1c, 0xf4, 0xf7, + 0x87, 0xfa, 0x08, 0x4c, 0x3c, 0x00, 0x18, 0x23, + 0x01, 0x00, 0x00, 0x25, 0x08, 0x4e, 0x08, 0x4f, + 0x06, 0xe0, 0x30, 0x6b, 0x00, 0x28, 0x03, 0xd0, + 0x35, 0x63, 0x20, 0x68, 0xee, 0xf7, 0x55, 0xf8, + 0x38, 0x68, 0x00, 0x28, 0xf5, 0xd0, 0xf8, 0xbd, + 0x00, 0x00, 0x5c, 0x5b, 0x01, 0x00, 0xe4, 0xfe, + 0x01, 0x00, 0x84, 0x5a, 0x01, 0x00, 0x80, 0xb5, + 0x00, 0x06, 0x00, 0x0e, 0x00, 0xf0, 0x07, 0xf8, + 0x80, 0xbd, 0x80, 0xb5, 0x0a, 0x1c, 0x3c, 0x00, + 0x54, 0x23, 0x01, 0x00, 0x23, 0x21, 0x01, 0xf0, + 0x2b, 0xfa, 0x80, 0xbd, 0xb0, 0xb5, 0x0d, 0x1c, + 0x04, 0x1c, 0x12, 0x28, 0x03, 0xd3, 0x01, 0x21, + 0x23, 0x20, 0xee, 0xf7, 0x9b, 0xff, 0x06, 0x49, + 0xa0, 0x00, 0x08, 0x58, 0x04, 0xe0, 0x12, 0xc8, + 0x28, 0x1c, 0xee, 0xf7, 0x2e, 0xf8, 0x20, 0x1c, + 0x00, 0x28, 0xf8, 0xd1, 0xb0, 0xbd, 0x00, 0x00, + 0x68, 0x5b, 0x01, 0x00, 0xf8, 0xb5, 0x0e, 0x1c, + 0x3c, 0x00, 0x90, 0x23, 0x01, 0x00, 0x00, 0x25, + 0x04, 0x1c, 0x12, 0x28, 0x03, 0xd3, 0x01, 0x21, + 0x23, 0x20, 0xee, 0xf7, 0x82, 0xff, 0x13, 0x48, + 0xa7, 0x00, 0xc4, 0x59, 0x08, 0xe0, 0x20, 0x68, + 0xb0, 0x42, 0x03, 0xd1, 0x03, 0x21, 0x23, 0x20, + 0xee, 0xf7, 0x77, 0xff, 0x25, 0x1c, 0x64, 0x68, + 0x00, 0x2c, 0xf4, 0xd1, 0x0c, 0x4a, 0x04, 0x3a, + 0x10, 0x68, 0x00, 0x28, 0x01, 0xd0, 0x41, 0x68, + 0x11, 0x60, 0x3c, 0x00, 0xcc, 0x23, 0x01, 0x00, + 0x00, 0x28, 0x04, 0xd1, 0x02, 0x21, 0x23, 0x20, + 0xee, 0xf7, 0x66, 0xff, 0xf8, 0xbd, 0x00, 0x21, + 0x41, 0x60, 0x06, 0x60, 0x00, 0x2d, 0x01, 0xd0, + 0x68, 0x60, 0xf7, 0xe7, 0x01, 0x49, 0xc8, 0x51, + 0xf4, 0xe7, 0x00, 0x00, 0x68, 0x5b, 0x01, 0x00, + 0x70, 0xb5, 0x0e, 0x1c, 0x05, 0x1c, 0x00, 0x24, + 0x12, 0x28, 0x03, 0xd3, 0x01, 0x21, 0x23, 0x20, + 0xee, 0xf7, 0x4e, 0xff, 0x3c, 0x00, 0x08, 0x24, + 0x01, 0x00, 0x0d, 0x4b, 0xaa, 0x00, 0x98, 0x58, + 0x04, 0xe0, 0x01, 0x68, 0xb1, 0x42, 0x04, 0xd0, + 0x04, 0x1c, 0x40, 0x68, 0x00, 0x28, 0xf8, 0xd1, + 0x70, 0xbd, 0x00, 0x28, 0xfc, 0xd0, 0x00, 0x2c, + 0x41, 0x68, 0x01, 0xd1, 0x99, 0x50, 0x00, 0xe0, + 0x61, 0x60, 0x00, 0x21, 0x03, 0x4a, 0x01, 0x60, + 0x04, 0x3a, 0x11, 0x68, 0x41, 0x60, 0x10, 0x60, + 0x70, 0xbd, 0x68, 0x5b, 0x01, 0x00, 0x3c, 0x00, + 0x44, 0x24, 0x01, 0x00, 0xf3, 0xb5, 0x81, 0xb0, + 0x00, 0x28, 0x17, 0xd0, 0x01, 0x78, 0xff, 0x29, + 0x14, 0xd0, 0x45, 0x78, 0x44, 0x19, 0x02, 0x34, + 0x80, 0x27, 0x01, 0x3c, 0x26, 0x78, 0x01, 0x3d, + 0xbe, 0x43, 0x30, 0x1c, 0xf8, 0xf7, 0x82, 0xfc, + 0x01, 0x21, 0x81, 0x40, 0x02, 0x98, 0x01, 0x40, + 0x02, 0xd0, 0x3e, 0x43, 0x30, 0x1c, 0x20, 0x70, + 0x00, 0x2d, 0xee, 0xd1, 0xfe, 0xbd, 0x00, 0x00, + 0x3c, 0x00, 0x80, 0x24, 0x01, 0x00, 0x10, 0x4b, + 0x10, 0xb5, 0x59, 0x68, 0x41, 0x1a, 0x0f, 0x29, + 0x0d, 0xdc, 0x0e, 0x22, 0xd2, 0x43, 0x91, 0x42, + 0x09, 0xdb, 0x1a, 0x1c, 0x92, 0x68, 0x00, 0x29, + 0x01, 0xdd, 0x00, 0x2a, 0x03, 0xda, 0x00, 0x29, + 0x0d, 0xda, 0x00, 0x2a, 0x0b, 0xdc, 0x04, 0x33, + 0x03, 0xc3, 0xfd, 0xf7, 0x10, 0xfd, 0x04, 0x1c, + 0xfd, 0xf7, 0x13, 0xfd, 0x00, 0x28, 0x02, 0xd0, + 0x20, 0x1c, 0x3c, 0x00, 0xbc, 0x24, 0x01, 0x00, + 0xff, 0xf7, 0x92, 0xfe, 0x10, 0xbd, 0x00, 0x00, + 0x18, 0x63, 0x01, 0x00, 0xf8, 0xb5, 0x64, 0x4c, + 0x07, 0x1c, 0x60, 0x78, 0xa1, 0x78, 0x88, 0x42, + 0x0f, 0xd1, 0x08, 0x1c, 0xfd, 0xf7, 0xce, 0xf8, + 0xe0, 0x60, 0x04, 0x20, 0x60, 0x70, 0x0a, 0x22, + 0x1e, 0x21, 0x13, 0x20, 0x01, 0xf0, 0x70, 0xf8, + 0x00, 0x21, 0x60, 0x78, 0xf4, 0xf7, 0x24, 0xf9, + 0xf8, 0xbd, 0x04, 0x28, 0x3c, 0x00, 0xf8, 0x24, + 0x01, 0x00, 0x6e, 0xd1, 0x58, 0x4e, 0xfd, 0xf7, + 0xbc, 0xf8, 0x00, 0x90, 0x71, 0x78, 0x04, 0x1c, + 0x00, 0x20, 0x05, 0x29, 0x21, 0xd2, 0x01, 0xa3, + 0x5b, 0x5c, 0x5b, 0x00, 0x9f, 0x44, 0x0b, 0x0f, + 0x14, 0x1a, 0x02, 0x00, 0x51, 0x48, 0x51, 0x49, + 0x60, 0x43, 0x41, 0x18, 0x7d, 0x20, 0xc0, 0x00, + 0xee, 0xf7, 0x87, 0xf8, 0x11, 0xe0, 0x87, 0x20, + 0x60, 0x43, 0x4d, 0x49, 0x02, 0xe0, 0x3c, 0x00, + 0x34, 0x25, 0x01, 0x00, 0x45, 0x20, 0x4d, 0x49, + 0x60, 0x43, 0x40, 0x18, 0x08, 0xe0, 0x4c, 0x48, + 0xcd, 0x21, 0x09, 0x01, 0x60, 0x43, 0x40, 0x1a, + 0x02, 0xe0, 0x46, 0x20, 0x60, 0x43, 0x82, 0x38, + 0x06, 0x06, 0x48, 0x48, 0x07, 0x21, 0x00, 0x79, + 0x36, 0x16, 0x08, 0x1a, 0x00, 0x19, 0x00, 0x90, + 0x68, 0x46, 0xfe, 0xf7, 0x5f, 0xfd, 0x38, 0x1c, + 0xfd, 0xf7, 0x2e, 0xfb, 0x00, 0x99, 0x42, 0x4a, + 0x3c, 0x00, 0x70, 0x25, 0x01, 0x00, 0x49, 0x00, + 0x51, 0x5a, 0x48, 0x43, 0x39, 0x49, 0x04, 0x1c, + 0x88, 0x78, 0x00, 0x28, 0x01, 0xd0, 0x01, 0x28, + 0x1e, 0xd1, 0x35, 0x49, 0x00, 0x28, 0x03, 0xd1, + 0x3a, 0x48, 0x05, 0x78, 0x04, 0x20, 0x02, 0xe0, + 0x38, 0x48, 0x45, 0x78, 0x0c, 0x20, 0x30, 0x49, + 0xc9, 0x68, 0x49, 0x1b, 0x08, 0x18, 0x00, 0x90, + 0x68, 0x46, 0xfe, 0xf7, 0x3e, 0xfd, 0x00, 0x98, + 0x33, 0x49, 0x3c, 0x00, 0xac, 0x25, 0x01, 0x00, + 0x40, 0x00, 0x20, 0x31, 0x08, 0x5a, 0x2a, 0x49, + 0x44, 0x43, 0xc8, 0x68, 0xa8, 0x42, 0x01, 0xd9, + 0x01, 0x25, 0x00, 0xe0, 0x00, 0x25, 0x2e, 0x48, + 0x21, 0x18, 0x40, 0x00, 0xee, 0xf7, 0xa2, 0xf8, + 0x04, 0x1c, 0x00, 0x2d, 0x03, 0xd0, 0xfd, 0xf7, + 0xc3, 0xfa, 0x02, 0xe0, 0x3d, 0xe0, 0xfd, 0xf7, + 0xf3, 0xfa, 0x00, 0x2f, 0x02, 0xd1, 0x25, 0x48, + 0x0e, 0x38, 0x01, 0xe0, 0x3c, 0x00, 0xe8, 0x25, + 0x01, 0x00, 0x23, 0x48, 0x0a, 0x38, 0x01, 0x68, + 0x61, 0x1a, 0xcb, 0x1c, 0x01, 0xdb, 0x03, 0x29, + 0x00, 0xdd, 0x04, 0x60, 0x01, 0x68, 0xa1, 0x42, + 0x01, 0xd2, 0x01, 0x31, 0x04, 0xe0, 0xa1, 0x42, + 0x03, 0xd9, 0x00, 0x29, 0x01, 0xd0, 0x01, 0x39, + 0x01, 0x60, 0x01, 0x68, 0x38, 0x1c, 0xfd, 0xf7, + 0xc0, 0xfb, 0x10, 0x4c, 0x0a, 0x20, 0x60, 0x70, + 0x0a, 0x22, 0x13, 0x20, 0xa1, 0x68, 0x3c, 0x00, + 0x24, 0x26, 0x01, 0x00, 0x00, 0xf0, 0xd2, 0xff, + 0x60, 0x68, 0x00, 0xf0, 0xf7, 0xfa, 0x00, 0x28, + 0x00, 0xd1, 0x5f, 0xe7, 0x00, 0xf0, 0xba, 0xfb, + 0x11, 0x49, 0x00, 0x23, 0x40, 0x18, 0x0e, 0x49, + 0x60, 0x60, 0x1e, 0x39, 0xc8, 0x56, 0xb0, 0x42, + 0xf3, 0xd0, 0x0e, 0x70, 0x31, 0x1c, 0x00, 0x20, + 0xff, 0xf7, 0x84, 0xfe, 0x4e, 0xe7, 0xff, 0xf7, + 0x15, 0xfe, 0x4b, 0xe7, 0x7c, 0x78, 0x01, 0x00, + 0x3c, 0x00, 0x60, 0x26, 0x01, 0x00, 0x60, 0xd7, + 0xff, 0xff, 0x60, 0x8f, 0x01, 0x00, 0x54, 0x0b, + 0x00, 0x00, 0xc9, 0x09, 0x00, 0x00, 0x8e, 0xfe, + 0xff, 0xff, 0x0c, 0x5a, 0x01, 0x00, 0x12, 0x5a, + 0x01, 0x00, 0x20, 0xa1, 0x07, 0x00, 0x40, 0x42, + 0x0f, 0x00, 0x30, 0xb5, 0x0c, 0x4b, 0xfe, 0x24, + 0x1b, 0x88, 0x04, 0x40, 0xc0, 0x07, 0x5d, 0x07, + 0x6d, 0x0f, 0xdb, 0x08, 0xc0, 0x0f, 0x9c, 0x42, + 0x0b, 0xd8, 0x3c, 0x00, 0x9c, 0x26, 0x01, 0x00, + 0xa2, 0x18, 0x04, 0x3a, 0x9a, 0x42, 0x07, 0xd3, + 0x1a, 0x1b, 0x89, 0x5c, 0x01, 0x22, 0xaa, 0x40, + 0x11, 0x40, 0x01, 0xd0, 0x02, 0x21, 0x08, 0x43, + 0x30, 0xbd, 0x00, 0x00, 0xfa, 0x60, 0x01, 0x00, + 0x80, 0xb5, 0x00, 0x28, 0x03, 0xd0, 0x01, 0x1c, + 0x14, 0x20, 0xf5, 0xf7, 0xff, 0xfa, 0x80, 0xbd, + 0xb0, 0xb5, 0x04, 0x1c, 0xf7, 0xf7, 0x08, 0xfd, + 0x13, 0x4d, 0x00, 0x28, 0x3c, 0x00, 0xd8, 0x26, + 0x01, 0x00, 0x1d, 0xd1, 0xa0, 0x07, 0x16, 0xd5, + 0x02, 0x20, 0x84, 0x43, 0x11, 0x48, 0x01, 0x22, + 0x2a, 0x62, 0x40, 0x68, 0x00, 0x28, 0x13, 0xd0, + 0xf2, 0xf7, 0x51, 0xf9, 0x00, 0x28, 0x0f, 0xd1, + 0x0b, 0x48, 0xe4, 0x30, 0x80, 0x7a, 0x01, 0x28, + 0x00, 0xd0, 0x00, 0x22, 0x11, 0x1c, 0x01, 0x20, + 0xf2, 0xf7, 0xa5, 0xf9, 0x04, 0xe0, 0x00, 0xf0, + 0x4e, 0xfb, 0xe8, 0x61, 0xf2, 0xf7, 0x3c, 0x00, + 0x14, 0x27, 0x01, 0x00, 0x6b, 0xf9, 0xa9, 0x6a, + 0x00, 0x29, 0x02, 0xd0, 0x20, 0x1c, 0xed, 0xf7, + 0x5c, 0xfe, 0xb0, 0xbd, 0x60, 0x6c, 0x01, 0x00, + 0xb0, 0x57, 0x01, 0x00, 0x20, 0x48, 0xb0, 0xb5, + 0x81, 0x68, 0x01, 0x29, 0x04, 0xd1, 0x00, 0x78, + 0x00, 0x28, 0x01, 0xd1, 0xfd, 0xf7, 0x72, 0xfd, + 0x1b, 0x4d, 0x80, 0x3d, 0x2c, 0x1c, 0x70, 0x34, + 0x20, 0x78, 0x03, 0x38, 0x05, 0x28, 0x18, 0xd2, + 0x3c, 0x00, 0x50, 0x27, 0x01, 0x00, 0x01, 0xa3, + 0x1b, 0x5c, 0x5b, 0x00, 0x9f, 0x44, 0x04, 0x15, + 0x27, 0x27, 0x27, 0x00, 0xfb, 0xf7, 0xf1, 0xff, + 0x60, 0x7b, 0x01, 0x1c, 0xff, 0x31, 0x61, 0x73, + 0x00, 0x28, 0xf7, 0xd1, 0x04, 0x20, 0x20, 0x70, + 0xa8, 0x89, 0xf8, 0xf7, 0xda, 0xf9, 0x01, 0x1c, + 0x00, 0x22, 0x0f, 0x20, 0x00, 0xf0, 0x25, 0xff, + 0xb0, 0xbd, 0xef, 0xf7, 0xce, 0xff, 0x6a, 0x21, + 0x49, 0x5b, 0x3c, 0x00, 0x8c, 0x27, 0x01, 0x00, + 0x88, 0x42, 0x0b, 0xd0, 0xe8, 0x89, 0xf8, 0xf7, + 0xcb, 0xf9, 0x01, 0x1c, 0x00, 0x23, 0x00, 0x22, + 0x0f, 0x20, 0x00, 0xf0, 0xf7, 0xff, 0x07, 0x20, + 0x20, 0x70, 0xb0, 0xbd, 0xfd, 0xf7, 0x3a, 0xfe, + 0xb0, 0xbd, 0x00, 0x00, 0x84, 0x66, 0x01, 0x00, + 0xf0, 0xb5, 0x85, 0xb0, 0x04, 0x1c, 0x03, 0x80, + 0x18, 0x0c, 0x60, 0x80, 0x0d, 0x1c, 0x51, 0x78, + 0x10, 0x78, 0x09, 0x02, 0x3c, 0x00, 0xc8, 0x27, + 0x01, 0x00, 0x48, 0x40, 0xa0, 0x80, 0xd1, 0x78, + 0x90, 0x78, 0x09, 0x02, 0x48, 0x40, 0xe0, 0x80, + 0x51, 0x79, 0x10, 0x79, 0x09, 0x02, 0x48, 0x40, + 0x20, 0x81, 0x68, 0x46, 0x1a, 0x49, 0x14, 0x22, + 0xed, 0xf7, 0xe3, 0xfe, 0x00, 0x23, 0x00, 0x20, + 0xd9, 0x07, 0xc9, 0x0f, 0x8c, 0x46, 0x42, 0x00, + 0x56, 0x07, 0x76, 0x0f, 0x61, 0x46, 0x89, 0x19, + 0x49, 0x00, 0x6e, 0x5c, 0x49, 0x19, 0x3c, 0x00, + 0x04, 0x28, 0x01, 0x00, 0x49, 0x78, 0x6f, 0x46, + 0x09, 0x02, 0x4e, 0x40, 0x81, 0x00, 0x79, 0x58, + 0x0f, 0x4f, 0x49, 0x00, 0x61, 0x5a, 0x01, 0x30, + 0x4e, 0x40, 0x31, 0x06, 0x36, 0x0a, 0x76, 0x00, + 0xc9, 0x0d, 0x79, 0x5a, 0xf6, 0x19, 0x01, 0x27, + 0x7f, 0x02, 0xf6, 0x19, 0x36, 0x88, 0x71, 0x40, + 0xa6, 0x5a, 0x89, 0x19, 0xa1, 0x52, 0x05, 0x28, + 0xdc, 0xdb, 0x20, 0x89, 0xc0, 0x18, 0x01, 0x33, + 0x3c, 0x00, 0x40, 0x28, 0x01, 0x00, 0x08, 0x2b, + 0x20, 0x81, 0xd2, 0xdb, 0x05, 0xb0, 0xf0, 0xbd, + 0x00, 0x00, 0xd8, 0x56, 0x01, 0x00, 0xd8, 0x52, + 0x01, 0x00, 0xf0, 0xb5, 0x05, 0x1c, 0x0c, 0x1c, + 0x1e, 0x1c, 0x00, 0x20, 0x89, 0xb0, 0x41, 0x00, + 0x53, 0x5a, 0x01, 0x30, 0x06, 0xaf, 0x7b, 0x52, + 0x05, 0x28, 0xf8, 0xdb, 0x10, 0x89, 0x00, 0xab, + 0x3a, 0x49, 0x80, 0x19, 0x58, 0x84, 0x68, 0x46, + 0x18, 0x22, 0x3c, 0x00, 0x7c, 0x28, 0x01, 0x00, + 0xed, 0xf7, 0x98, 0xfe, 0x00, 0x20, 0x41, 0x00, + 0x0a, 0x19, 0x52, 0x78, 0x63, 0x5c, 0x6f, 0x46, + 0x12, 0x02, 0x53, 0x40, 0x82, 0x00, 0xba, 0x58, + 0x06, 0xaf, 0x52, 0x00, 0xba, 0x5a, 0x31, 0x4f, + 0x01, 0x30, 0x53, 0x40, 0x1a, 0x06, 0x1b, 0x0a, + 0x5b, 0x00, 0xd2, 0x0d, 0xba, 0x5a, 0xdb, 0x19, + 0x01, 0x27, 0x7f, 0x02, 0xdb, 0x19, 0x1b, 0x88, + 0x5a, 0x40, 0x06, 0xab, 0x3c, 0x00, 0xb8, 0x28, + 0x01, 0x00, 0x5b, 0x5a, 0xd2, 0x18, 0x06, 0xab, + 0x5a, 0x52, 0x06, 0x28, 0xde, 0xdb, 0x61, 0x7b, + 0x20, 0x7b, 0x00, 0xab, 0x09, 0x02, 0x48, 0x40, + 0x59, 0x8c, 0x48, 0x40, 0x41, 0x08, 0xc0, 0x03, + 0x48, 0x40, 0x19, 0x8b, 0x40, 0x18, 0x18, 0x83, + 0xe1, 0x7b, 0xa0, 0x7b, 0x09, 0x02, 0x48, 0x40, + 0x19, 0x8b, 0x48, 0x40, 0x41, 0x08, 0xc0, 0x03, + 0x48, 0x40, 0x59, 0x8b, 0x40, 0x18, 0x3c, 0x00, + 0xf4, 0x28, 0x01, 0x00, 0x58, 0x83, 0x02, 0x20, + 0x41, 0x00, 0x06, 0xaa, 0x8a, 0x18, 0x20, 0x3a, + 0xd2, 0x8b, 0x01, 0x30, 0x53, 0x08, 0xd2, 0x03, + 0x5a, 0x40, 0x06, 0xab, 0x5b, 0x5a, 0xd2, 0x18, + 0x06, 0xab, 0x5a, 0x52, 0x06, 0x28, 0xef, 0xdb, + 0x30, 0x0a, 0x28, 0x70, 0x70, 0x04, 0x40, 0x0e, + 0x20, 0x21, 0x08, 0x43, 0x68, 0x70, 0xae, 0x70, + 0x61, 0x78, 0x20, 0x78, 0x00, 0xab, 0x09, 0x02, + 0x3c, 0x00, 0x30, 0x29, 0x01, 0x00, 0x48, 0x40, + 0x59, 0x8c, 0x48, 0x40, 0xc0, 0x05, 0x00, 0x0e, + 0xe8, 0x70, 0x00, 0x20, 0x41, 0x00, 0x06, 0xaa, + 0x53, 0x5a, 0x4a, 0x19, 0x01, 0x30, 0x13, 0x71, + 0x06, 0xab, 0x59, 0x5a, 0x09, 0x0a, 0x51, 0x71, + 0x06, 0x28, 0xf3, 0xdb, 0x09, 0xb0, 0xf0, 0xbd, + 0x00, 0x00, 0xec, 0x56, 0x01, 0x00, 0xd8, 0x52, + 0x01, 0x00, 0xf0, 0xb5, 0x46, 0x68, 0x05, 0x1c, + 0x60, 0x30, 0x3c, 0x00, 0x6c, 0x29, 0x01, 0x00, + 0x85, 0xb0, 0x04, 0x90, 0x60, 0xe0, 0x68, 0x68, + 0x0c, 0x21, 0x07, 0x69, 0x00, 0x20, 0xee, 0xf7, + 0x2d, 0xfe, 0x70, 0x61, 0x01, 0x89, 0x04, 0x39, + 0x09, 0x04, 0x09, 0x0c, 0x01, 0x81, 0x70, 0x69, + 0x00, 0x68, 0x40, 0x18, 0x04, 0x21, 0xee, 0xf7, + 0x21, 0xfe, 0xf0, 0x61, 0x70, 0x69, 0x20, 0x21, + 0x04, 0x68, 0x04, 0x98, 0x04, 0x22, 0x40, 0x7b, + 0x80, 0x01, 0x08, 0x43, 0x3c, 0x00, 0xa8, 0x29, + 0x01, 0x00, 0xe0, 0x70, 0x28, 0x69, 0x40, 0x89, + 0xa0, 0x70, 0x28, 0x69, 0x40, 0x89, 0x00, 0x0a, + 0x20, 0x70, 0x29, 0x69, 0x0c, 0x31, 0xa0, 0x18, + 0xed, 0xf7, 0x9b, 0xfd, 0x20, 0x78, 0x20, 0x21, + 0x40, 0x06, 0x40, 0x0e, 0x08, 0x43, 0x60, 0x70, + 0x28, 0x69, 0x0a, 0x30, 0x01, 0x88, 0x01, 0x31, + 0x09, 0x04, 0x09, 0x0c, 0x01, 0x80, 0x04, 0xd1, + 0x28, 0x69, 0x0c, 0x30, 0x01, 0x68, 0x3c, 0x00, + 0xe4, 0x29, 0x01, 0x00, 0x01, 0x31, 0x01, 0x60, + 0x35, 0x62, 0x61, 0x79, 0x20, 0x79, 0x09, 0x02, + 0x40, 0x18, 0xa1, 0x79, 0x09, 0x04, 0x40, 0x18, + 0xe1, 0x79, 0x09, 0x06, 0x43, 0x18, 0x00, 0x93, + 0xa0, 0x78, 0x21, 0x78, 0x09, 0x02, 0x40, 0x18, + 0x04, 0x04, 0x24, 0x0c, 0x10, 0x20, 0xee, 0xf7, + 0x13, 0xff, 0xb0, 0x61, 0x28, 0x69, 0x3a, 0x1c, + 0x01, 0x68, 0x00, 0x9b, 0x01, 0xa8, 0x0a, 0x32, + 0x3c, 0x00, 0x20, 0x2a, 0x01, 0x00, 0xff, 0xf7, + 0xc8, 0xfe, 0x28, 0x69, 0x23, 0x1c, 0x01, 0x68, + 0xb0, 0x69, 0x01, 0xaa, 0xff, 0xf7, 0x11, 0xff, + 0x36, 0x68, 0x00, 0x2e, 0x9c, 0xd1, 0x03, 0x49, + 0x04, 0x48, 0x6a, 0x68, 0xf7, 0xf7, 0x63, 0xfb, + 0x05, 0xb0, 0xf0, 0xbd, 0x00, 0x00, 0xfd, 0x6b, + 0x00, 0x00, 0xa0, 0x6a, 0x01, 0x00, 0x01, 0x38, + 0x07, 0x49, 0x40, 0x00, 0x09, 0x5c, 0x00, 0x29, + 0x06, 0xd0, 0x3c, 0x00, 0x5c, 0x2a, 0x01, 0x00, + 0x04, 0x49, 0x1c, 0x39, 0x08, 0x5c, 0x00, 0x28, + 0x01, 0xd0, 0x01, 0x20, 0x70, 0x47, 0x00, 0x20, + 0x70, 0x47, 0x00, 0x00, 0xe6, 0x78, 0x01, 0x00, + 0xfe, 0xb5, 0x05, 0x1c, 0x00, 0x20, 0x02, 0x90, + 0x13, 0x48, 0x17, 0x1c, 0x00, 0x68, 0x0c, 0x1c, + 0x86, 0x78, 0x30, 0x1c, 0xfd, 0xf7, 0x28, 0xfa, + 0x00, 0x28, 0x01, 0xd1, 0x02, 0x98, 0xfe, 0xbd, + 0x00, 0x2d, 0x08, 0xd1, 0x3c, 0x00, 0x98, 0x2a, + 0x01, 0x00, 0x20, 0x68, 0x00, 0xab, 0x18, 0x71, + 0x60, 0x68, 0x58, 0x71, 0xa0, 0x68, 0x98, 0x71, + 0x03, 0x20, 0x38, 0x80, 0x29, 0x1c, 0x30, 0x1c, + 0x01, 0xaa, 0x00, 0xf0, 0x0e, 0xf8, 0x00, 0x2d, + 0xec, 0xd0, 0x00, 0xab, 0x19, 0x79, 0x21, 0x60, + 0x59, 0x79, 0x61, 0x60, 0x99, 0x79, 0xa1, 0x60, + 0x0c, 0x21, 0x39, 0x80, 0xe2, 0xe7, 0xf8, 0x6b, + 0x01, 0x00, 0xf8, 0xb5, 0x15, 0x1c, 0x3c, 0x00, + 0xd4, 0x2a, 0x01, 0x00, 0x42, 0x1e, 0x01, 0x38, + 0x47, 0x00, 0x3f, 0x18, 0x1f, 0x48, 0x3e, 0x18, + 0x00, 0x29, 0x06, 0xd0, 0x01, 0x24, 0x03, 0x22, + 0x31, 0x1c, 0x28, 0x1c, 0xed, 0xf7, 0x04, 0xfd, + 0x32, 0xe0, 0x68, 0x78, 0x01, 0x24, 0x00, 0x28, + 0x05, 0xd0, 0x29, 0x78, 0x08, 0x18, 0x01, 0x38, + 0x0e, 0x28, 0x00, 0xd9, 0x00, 0x24, 0x00, 0x2c, + 0x26, 0xd0, 0x00, 0x2a, 0x07, 0xd1, 0x2a, 0x21, + 0x3c, 0x00, 0x10, 0x2b, 0x01, 0x00, 0x12, 0x48, + 0xed, 0xf7, 0x9f, 0xfc, 0x1c, 0x21, 0x11, 0x48, + 0xed, 0xf7, 0x9b, 0xfc, 0x0f, 0x48, 0x03, 0x22, + 0x29, 0x1c, 0x30, 0x1c, 0xed, 0xf7, 0xe7, 0xfc, + 0x0c, 0x48, 0x71, 0x78, 0xc0, 0x5d, 0xb2, 0x78, + 0x00, 0x29, 0x0e, 0xd0, 0x00, 0x2a, 0x0c, 0xd0, + 0x01, 0x22, 0x43, 0x18, 0x08, 0x4d, 0x06, 0xe0, + 0x41, 0x00, 0x49, 0x19, 0x10, 0x39, 0x8a, 0x73, + 0xb7, 0x78, 0x3c, 0x00, 0x4c, 0x2b, 0x01, 0x00, + 0x01, 0x30, 0xcf, 0x73, 0x83, 0x42, 0xf6, 0xd8, + 0xfe, 0xf7, 0x60, 0xf8, 0x20, 0x1c, 0xf8, 0xbd, + 0xeb, 0x62, 0x01, 0x00, 0xca, 0x78, 0x01, 0x00, + 0x70, 0xb5, 0x05, 0x1c, 0x1c, 0x48, 0x00, 0x23, + 0xc0, 0x56, 0x43, 0x1c, 0x32, 0xd1, 0xa8, 0x7a, + 0xf8, 0xf7, 0x0c, 0xf9, 0x00, 0x26, 0x00, 0x28, + 0x18, 0x4c, 0x08, 0xd0, 0xe8, 0x69, 0xe1, 0x6b, + 0x00, 0x29, 0x0b, 0xd1, 0x3c, 0x00, 0x88, 0x2b, + 0x01, 0x00, 0x66, 0x63, 0x01, 0x21, 0xe1, 0x63, + 0xa6, 0x63, 0x06, 0xe0, 0xa8, 0x69, 0xe1, 0x6b, + 0x00, 0x29, 0x02, 0xd0, 0x66, 0x63, 0xa6, 0x63, + 0xe6, 0x63, 0xa1, 0x6b, 0x01, 0x31, 0xa1, 0x63, + 0x82, 0x03, 0x01, 0xd5, 0x0e, 0x4a, 0x10, 0x43, + 0xe2, 0x6b, 0x00, 0x2a, 0x00, 0xd0, 0x40, 0x42, + 0x62, 0x6b, 0x10, 0x18, 0x60, 0x63, 0x08, 0x29, + 0x0b, 0xd1, 0x00, 0x28, 0x01, 0xdd, 0x3c, 0x00, + 0xc4, 0x2b, 0x01, 0x00, 0x01, 0x20, 0x03, 0xe0, + 0x00, 0x28, 0x03, 0xda, 0x00, 0x20, 0xc0, 0x43, + 0xef, 0xf7, 0x62, 0xfe, 0x66, 0x63, 0xa6, 0x63, + 0x70, 0xbd, 0x00, 0x00, 0xf4, 0x6b, 0x01, 0x00, + 0x84, 0x6a, 0x01, 0x00, 0x00, 0x00, 0xfe, 0xff, + 0x0c, 0x21, 0x05, 0x4a, 0x41, 0x43, 0x89, 0x18, + 0x80, 0xb5, 0x89, 0x78, 0x00, 0x29, 0x01, 0xd1, + 0xf3, 0xf7, 0xf2, 0xfa, 0x80, 0xbd, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0x2c, 0x01, 0x00, 0x60, 0x7b, + 0x01, 0x00, 0x80, 0xb5, 0x01, 0x1c, 0x00, 0x20, + 0xf7, 0xf7, 0x03, 0xfa, 0x80, 0xbd, 0x80, 0xb5, + 0x01, 0x1c, 0x01, 0x20, 0xf7, 0xf7, 0xfd, 0xf9, + 0x80, 0xbd, 0x02, 0x49, 0x89, 0x68, 0x40, 0x1a, + 0xc0, 0x0f, 0x70, 0x47, 0x00, 0x00, 0x00, 0x01, + 0x07, 0x00, 0x02, 0x49, 0x89, 0x68, 0x08, 0x1a, + 0xc0, 0x17, 0x01, 0x30, 0x70, 0x47, 0x00, 0x01, + 0x07, 0x00, 0x3c, 0x00, 0x3c, 0x2c, 0x01, 0x00, + 0x05, 0x49, 0x4a, 0x68, 0x01, 0x23, 0x1a, 0x43, + 0x4a, 0x60, 0x8a, 0x68, 0x10, 0x18, 0x88, 0x60, + 0x48, 0x68, 0x98, 0x43, 0x48, 0x60, 0x70, 0x47, + 0x00, 0x01, 0x07, 0x00, 0x10, 0xb5, 0x15, 0x4b, + 0x00, 0x21, 0x0a, 0x01, 0x9a, 0x58, 0x00, 0x2a, + 0x17, 0xd1, 0x01, 0x24, 0x0a, 0x01, 0x9c, 0x50, + 0xd2, 0x18, 0x10, 0x73, 0x00, 0x23, 0x53, 0x73, + 0x02, 0x23, 0x01, 0x28, 0x3c, 0x00, 0x78, 0x2c, + 0x01, 0x00, 0x0e, 0x4a, 0x05, 0xd1, 0xc8, 0x00, + 0x80, 0x18, 0x10, 0x30, 0x02, 0x78, 0x9a, 0x43, + 0x04, 0xe0, 0xc8, 0x00, 0x80, 0x18, 0x10, 0x30, + 0x02, 0x78, 0x1a, 0x43, 0x02, 0x70, 0x02, 0xe0, + 0x01, 0x31, 0x08, 0x29, 0xe0, 0xdb, 0x08, 0x29, + 0x04, 0xd1, 0x01, 0x21, 0x99, 0x20, 0xee, 0xf7, + 0xfe, 0xfa, 0x03, 0x49, 0x08, 0x04, 0x00, 0x0c, + 0x10, 0xbd, 0xac, 0x73, 0x01, 0x00, 0x3c, 0x00, + 0xb4, 0x2c, 0x01, 0x00, 0x00, 0x60, 0x07, 0x00, + 0xff, 0xff, 0x00, 0x00, 0xf7, 0xb5, 0x19, 0x4f, + 0x19, 0x4e, 0x0c, 0x1c, 0xc1, 0x00, 0xc9, 0x19, + 0xb2, 0x68, 0x10, 0x31, 0x81, 0xb0, 0x01, 0x3a, + 0x4a, 0x60, 0x0b, 0x78, 0x1d, 0x1c, 0x0d, 0x22, + 0x93, 0x43, 0x0b, 0x70, 0x01, 0x22, 0x82, 0x40, + 0x3a, 0x73, 0x12, 0x4b, 0x00, 0x01, 0x03, 0x9a, + 0xc0, 0x18, 0x82, 0x60, 0x10, 0x4a, 0x10, 0x1c, + 0x3c, 0x00, 0xf0, 0x2c, 0x01, 0x00, 0x20, 0x30, + 0x87, 0x79, 0x00, 0xab, 0x1f, 0x70, 0xc0, 0x79, + 0x58, 0x70, 0xb0, 0x68, 0x03, 0x30, 0x00, 0x23, + 0x26, 0x1a, 0x01, 0xd5, 0x04, 0x1c, 0x01, 0x23, + 0x4c, 0x60, 0x0d, 0x70, 0x00, 0x2b, 0x04, 0xd0, + 0x20, 0x1c, 0xff, 0xf7, 0x8a, 0xff, 0x00, 0x28, + 0xfa, 0xd0, 0x00, 0xab, 0x18, 0x88, 0xd0, 0x84, + 0xff, 0xbd, 0x00, 0x60, 0x07, 0x00, 0x00, 0x01, + 0x07, 0x00, 0x3c, 0x00, 0x2c, 0x2d, 0x01, 0x00, + 0xac, 0x73, 0x01, 0x00, 0x00, 0x10, 0x07, 0x00, + 0x30, 0xb5, 0x00, 0x20, 0xc0, 0x43, 0x0b, 0x4c, + 0x09, 0x4b, 0x00, 0x22, 0xd1, 0x00, 0x09, 0x19, + 0x0d, 0x7c, 0xed, 0x07, 0x07, 0xd5, 0x49, 0x69, + 0x9d, 0x68, 0x49, 0x1b, 0x00, 0xd5, 0x00, 0x21, + 0x81, 0x42, 0x00, 0xd2, 0x08, 0x1c, 0x01, 0x32, + 0x08, 0x2a, 0xef, 0xdb, 0x30, 0xbd, 0x00, 0x00, + 0x00, 0x01, 0x07, 0x00, 0x3c, 0x00, 0x68, 0x2d, + 0x01, 0x00, 0x00, 0x60, 0x07, 0x00, 0xb0, 0xb5, + 0x08, 0x28, 0x0b, 0xd2, 0x08, 0x4d, 0x04, 0x01, + 0x29, 0x59, 0x00, 0x29, 0x04, 0xd0, 0x00, 0xf0, + 0x4a, 0xf8, 0x00, 0x20, 0x28, 0x51, 0xb0, 0xbd, + 0x02, 0x21, 0x00, 0xe0, 0x03, 0x21, 0x99, 0x20, + 0xee, 0xf7, 0x89, 0xfa, 0xb0, 0xbd, 0xac, 0x73, + 0x01, 0x00, 0x03, 0x49, 0x00, 0x01, 0x40, 0x18, + 0x41, 0x7b, 0x08, 0x22, 0x11, 0x43, 0x3c, 0x00, + 0xa4, 0x2d, 0x01, 0x00, 0x41, 0x73, 0x70, 0x47, + 0xac, 0x73, 0x01, 0x00, 0x01, 0x48, 0x80, 0x68, + 0x70, 0x47, 0x00, 0x00, 0x00, 0x01, 0x07, 0x00, + 0x70, 0xb5, 0x0b, 0x4e, 0x09, 0x4d, 0x00, 0x22, + 0xd0, 0x00, 0x84, 0x19, 0x20, 0x7c, 0xc0, 0x07, + 0x07, 0xd5, 0x60, 0x69, 0xff, 0xf7, 0x26, 0xff, + 0x00, 0x28, 0x02, 0xd0, 0xa8, 0x68, 0x32, 0x30, + 0x60, 0x61, 0x01, 0x32, 0x08, 0x2a, 0xef, 0xdb, + 0x3c, 0x00, 0xe0, 0x2d, 0x01, 0x00, 0x70, 0xbd, + 0x00, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x60, + 0x07, 0x00, 0x02, 0x4a, 0xc0, 0x00, 0x80, 0x18, + 0x01, 0x74, 0x70, 0x47, 0x00, 0x00, 0x00, 0x60, + 0x07, 0x00, 0x04, 0x49, 0xc0, 0x00, 0x41, 0x18, + 0x08, 0x7c, 0x08, 0x23, 0x02, 0x1c, 0x9a, 0x43, + 0x0a, 0x74, 0x70, 0x47, 0x00, 0x00, 0x00, 0x60, + 0x07, 0x00, 0x70, 0xb5, 0x08, 0x28, 0x17, 0xd2, + 0x0e, 0x49, 0x3c, 0x00, 0x1c, 0x2e, 0x01, 0x00, + 0x8a, 0x68, 0x0e, 0x4d, 0x01, 0x3a, 0xc1, 0x00, + 0x49, 0x19, 0x4a, 0x61, 0x0c, 0x4b, 0x9a, 0x79, + 0x10, 0x31, 0x0c, 0x78, 0x0d, 0x26, 0xb4, 0x43, + 0x0c, 0x70, 0x01, 0x21, 0x81, 0x40, 0x29, 0x73, + 0x9a, 0x71, 0x09, 0x4a, 0x07, 0x49, 0x00, 0x01, + 0x80, 0x18, 0x41, 0x60, 0x70, 0xbd, 0x05, 0x21, + 0x99, 0x20, 0xee, 0xf7, 0x29, 0xfa, 0x70, 0xbd, + 0x00, 0x01, 0x07, 0x00, 0x3c, 0x00, 0x58, 0x2e, + 0x01, 0x00, 0x00, 0x60, 0x07, 0x00, 0x20, 0x10, + 0x07, 0x00, 0xd1, 0x75, 0x00, 0x00, 0xac, 0x73, + 0x01, 0x00, 0xf8, 0xb5, 0x9e, 0x46, 0x1a, 0x4b, + 0x94, 0x46, 0x9b, 0x68, 0x1a, 0x4c, 0xc2, 0x00, + 0x12, 0x19, 0x01, 0x3b, 0x53, 0x61, 0x15, 0x1c, + 0x18, 0x4c, 0xa6, 0x79, 0x2a, 0x1c, 0x10, 0x32, + 0x13, 0x78, 0x0d, 0x27, 0xbb, 0x43, 0x13, 0x70, + 0x01, 0x27, 0x12, 0x4b, 0x87, 0x40, 0x3c, 0x00, + 0x94, 0x2e, 0x01, 0x00, 0x1f, 0x73, 0xa6, 0x71, + 0x12, 0x4e, 0x00, 0x01, 0x80, 0x19, 0x63, 0x46, + 0x43, 0x60, 0x73, 0x46, 0x83, 0x60, 0x13, 0x78, + 0x40, 0x7b, 0xa6, 0x79, 0x01, 0x27, 0x18, 0x43, + 0x38, 0x43, 0x14, 0x35, 0x00, 0xab, 0x1e, 0x70, + 0xe4, 0x79, 0x5c, 0x70, 0x06, 0x4b, 0x9b, 0x68, + 0x03, 0x33, 0xcc, 0x1a, 0x00, 0xd5, 0x19, 0x1c, + 0x29, 0x60, 0x10, 0x70, 0x00, 0xab, 0x18, 0x88, + 0x3c, 0x00, 0xd0, 0x2e, 0x01, 0x00, 0x03, 0x4c, + 0x20, 0x3c, 0xe0, 0x84, 0xf8, 0xbd, 0x00, 0x01, + 0x07, 0x00, 0x00, 0x60, 0x07, 0x00, 0x20, 0x10, + 0x07, 0x00, 0xac, 0x73, 0x01, 0x00, 0x00, 0xb5, + 0x01, 0x1c, 0xff, 0xf7, 0x5e, 0xff, 0x42, 0x18, + 0x10, 0x1c, 0xff, 0xf7, 0x92, 0xfe, 0x00, 0x28, + 0xfa, 0xd0, 0x00, 0xbd, 0x00, 0x00, 0x89, 0x1a, + 0x40, 0x1a, 0x99, 0x18, 0x88, 0x42, 0x01, 0xd8, + 0x01, 0x20, 0x3c, 0x00, 0x0c, 0x2f, 0x01, 0x00, + 0x70, 0x47, 0x00, 0x20, 0x70, 0x47, 0x00, 0x00, + 0xf8, 0xb5, 0x0f, 0x1c, 0x04, 0x1c, 0x00, 0x28, + 0x01, 0xd1, 0xee, 0xf7, 0xef, 0xf9, 0x21, 0x1c, + 0x01, 0x20, 0xff, 0xf7, 0x19, 0xfa, 0x41, 0x20, + 0x00, 0x5d, 0x00, 0x28, 0x01, 0xd1, 0x00, 0x25, + 0x04, 0xe0, 0x02, 0x28, 0x01, 0xd1, 0x05, 0x25, + 0x00, 0xe0, 0x01, 0x25, 0xe0, 0x68, 0xee, 0xf7, + 0x29, 0xfb, 0xa6, 0x6b, 0x3c, 0x00, 0x48, 0x2f, + 0x01, 0x00, 0x00, 0x2e, 0x10, 0xd0, 0x00, 0x2f, + 0x06, 0xd0, 0x2f, 0x20, 0x02, 0x5d, 0x20, 0x6a, + 0x41, 0x6b, 0x28, 0x1c, 0xed, 0xf7, 0x44, 0xfa, + 0xa0, 0x69, 0x00, 0x28, 0x01, 0xd0, 0xee, 0xf7, + 0x46, 0xfc, 0x20, 0x6a, 0xee, 0xf7, 0x43, 0xfc, + 0x20, 0x1c, 0xee, 0xf7, 0x40, 0xfc, 0x30, 0x1c, + 0xf8, 0xbd, 0xb0, 0xb5, 0x04, 0x1c, 0xc0, 0x6b, + 0x00, 0x28, 0x09, 0xd0, 0x20, 0x69, 0x3c, 0x00, + 0x84, 0x2f, 0x01, 0x00, 0x00, 0x8b, 0xee, 0xf7, + 0x55, 0xf9, 0x00, 0x28, 0x03, 0xd0, 0x21, 0x1c, + 0x06, 0x20, 0xff, 0xf7, 0xe3, 0xf9, 0x08, 0x4d, + 0x20, 0x1c, 0xa9, 0x6d, 0xff, 0xf7, 0xba, 0xff, + 0x00, 0x28, 0x07, 0xd0, 0xe8, 0x68, 0x01, 0x30, + 0xe8, 0x60, 0x28, 0x6a, 0x01, 0x38, 0x28, 0x62, + 0xfc, 0xf7, 0x78, 0xf8, 0xb0, 0xbd, 0x00, 0x00, + 0xc4, 0x69, 0x01, 0x00, 0x10, 0xb5, 0x06, 0x4c, + 0x3c, 0x00, 0xc0, 0x2f, 0x01, 0x00, 0xe1, 0x6d, + 0xff, 0xf7, 0xa7, 0xff, 0x00, 0x28, 0x04, 0xd0, + 0xe0, 0x69, 0x01, 0x38, 0xe0, 0x61, 0xfc, 0xf7, + 0x68, 0xf8, 0x10, 0xbd, 0x00, 0x00, 0xc4, 0x69, + 0x01, 0x00, 0x0c, 0x23, 0x0c, 0x49, 0x58, 0x43, + 0x40, 0x18, 0x10, 0xb5, 0x44, 0x68, 0xa1, 0x68, + 0x00, 0x29, 0x02, 0xd0, 0x20, 0x1c, 0xed, 0xf7, + 0xf3, 0xf9, 0xe0, 0x6b, 0x00, 0x28, 0x08, 0xd0, + 0x20, 0x69, 0x3c, 0x00, 0xfc, 0x2f, 0x01, 0x00, + 0x00, 0x8b, 0xee, 0xf7, 0x19, 0xf9, 0x00, 0x28, + 0x02, 0xd0, 0x20, 0x1c, 0xf9, 0xf7, 0x26, 0xf9, + 0x10, 0xbd, 0x00, 0x00, 0x60, 0x7b, 0x01, 0x00, + 0xf8, 0xb5, 0x22, 0x49, 0x48, 0x68, 0x80, 0x00, + 0x06, 0xd4, 0x01, 0x20, 0x40, 0x07, 0x08, 0x60, + 0x4a, 0x69, 0x92, 0x00, 0x00, 0xd4, 0x48, 0x60, + 0x1d, 0x4f, 0x78, 0x7e, 0xc3, 0x06, 0x01, 0x20, + 0x02, 0x1c, 0xdb, 0x0e, 0x3c, 0x00, 0x38, 0x30, + 0x01, 0x00, 0x9a, 0x40, 0x0a, 0x60, 0x79, 0x69, + 0x8c, 0x68, 0x8c, 0x60, 0x21, 0x07, 0x89, 0x0f, + 0x09, 0xd0, 0x21, 0x07, 0x04, 0xd5, 0x0b, 0x21, + 0x9e, 0x20, 0xee, 0xf7, 0x28, 0xf9, 0x00, 0xe0, + 0x78, 0x64, 0x0c, 0x20, 0x84, 0x43, 0x12, 0x48, + 0x3d, 0x68, 0x06, 0x5d, 0x6c, 0x68, 0x2c, 0x34, + 0x06, 0xe0, 0xa0, 0x68, 0x00, 0x68, 0xa0, 0x60, + 0xe9, 0x68, 0x28, 0x1c, 0xed, 0xf7, 0x3c, 0x00, + 0x74, 0x30, 0x01, 0x00, 0xb2, 0xf9, 0x01, 0x3e, + 0xf6, 0xd2, 0xa0, 0x68, 0x80, 0x68, 0x00, 0x28, + 0x0d, 0xd0, 0x40, 0x89, 0x00, 0x28, 0x0a, 0xd0, + 0x78, 0x6c, 0x00, 0x28, 0x07, 0xd1, 0x78, 0x69, + 0x80, 0x68, 0x80, 0x07, 0x03, 0xd1, 0x0c, 0x21, + 0x9e, 0x20, 0xee, 0xf7, 0x03, 0xf9, 0xf8, 0xbd, + 0x00, 0x10, 0x07, 0x00, 0xcc, 0x6d, 0x01, 0x00, + 0xb4, 0x44, 0x01, 0x00, 0x09, 0x49, 0x80, 0xb5, + 0x3c, 0x00, 0xb0, 0x30, 0x01, 0x00, 0x08, 0x7e, + 0xc2, 0x06, 0xd2, 0x0e, 0x01, 0x20, 0x90, 0x40, + 0x07, 0x4a, 0x10, 0x60, 0x00, 0x20, 0x0a, 0x69, + 0xc0, 0x43, 0x90, 0x60, 0x08, 0x68, 0x24, 0x31, + 0x06, 0xc9, 0x03, 0x69, 0xed, 0xf7, 0x86, 0xf9, + 0x80, 0xbd, 0xcc, 0x6d, 0x01, 0x00, 0x00, 0x10, + 0x07, 0x00, 0xf8, 0xb5, 0x44, 0x68, 0x06, 0x1c, + 0x2c, 0x34, 0x20, 0x68, 0x0d, 0x1c, 0x80, 0x68, + 0x00, 0x90, 0x3c, 0x00, 0xec, 0x30, 0x01, 0x00, + 0x00, 0x28, 0x00, 0xd0, 0xc5, 0x60, 0x20, 0x68, + 0x00, 0x68, 0x20, 0x60, 0x40, 0x68, 0x00, 0x28, + 0x03, 0xd0, 0x0a, 0x21, 0x9e, 0x20, 0xee, 0xf7, + 0xcf, 0xf8, 0x20, 0x68, 0x45, 0x60, 0x28, 0x1c, + 0x02, 0xe0, 0x00, 0x22, 0x42, 0x60, 0x08, 0x1c, + 0xc1, 0x68, 0x00, 0x29, 0xf9, 0xd1, 0x71, 0x68, + 0x60, 0x27, 0x0b, 0x1c, 0x40, 0x33, 0x9c, 0x46, + 0x9b, 0x78, 0xca, 0x7e, 0x3c, 0x00, 0x28, 0x31, + 0x01, 0x00, 0x5b, 0x01, 0x12, 0x07, 0x12, 0x0f, + 0x3b, 0x40, 0x1a, 0x43, 0x8b, 0x8f, 0xff, 0x27, + 0x3f, 0x04, 0x1b, 0x04, 0x3b, 0x40, 0x1a, 0x43, + 0x90, 0x23, 0x1a, 0x43, 0x42, 0x60, 0x63, 0x46, + 0x9a, 0x78, 0x01, 0x32, 0xd2, 0x07, 0xd2, 0x0f, + 0x9a, 0x70, 0x89, 0x6b, 0xc1, 0x60, 0x21, 0x68, + 0x88, 0x60, 0x00, 0x98, 0x00, 0x28, 0x01, 0xd0, + 0x00, 0x98, 0xc5, 0x60, 0x0a, 0x4f, 0x3c, 0x00, + 0x64, 0x31, 0x01, 0x00, 0xbd, 0x79, 0xa0, 0x69, + 0x00, 0x28, 0x0c, 0xd0, 0x00, 0x22, 0xa2, 0x61, + 0x74, 0x68, 0x60, 0x69, 0xef, 0xf7, 0x2e, 0xff, + 0xe0, 0x6a, 0x61, 0x69, 0x40, 0x68, 0x48, 0x60, + 0x61, 0x69, 0x01, 0x20, 0x08, 0x60, 0xbd, 0x71, + 0xf8, 0xbd, 0x00, 0x00, 0x20, 0x10, 0x07, 0x00, + 0xfe, 0xb5, 0x44, 0x68, 0x0f, 0x1c, 0x01, 0x94, + 0x2c, 0x34, 0x20, 0x1c, 0x12, 0x30, 0x02, 0x90, + 0x3c, 0x00, 0xa0, 0x31, 0x01, 0x00, 0x2c, 0xe0, + 0x0c, 0x20, 0xee, 0xf7, 0x00, 0xfb, 0x05, 0x1c, + 0x60, 0x68, 0x00, 0x28, 0x1d, 0xd1, 0x02, 0x98, + 0x00, 0x21, 0x00, 0x90, 0x00, 0x20, 0xee, 0xf7, + 0x0e, 0xfa, 0x06, 0x1c, 0x00, 0x98, 0x04, 0x21, + 0xee, 0xf7, 0x09, 0xfa, 0x01, 0x1c, 0x01, 0x98, + 0xc0, 0x7e, 0x00, 0x07, 0x00, 0x0f, 0xd0, 0x30, + 0x70, 0x60, 0x01, 0x98, 0xc0, 0x7e, 0x00, 0x07, + 0x00, 0x0f, 0x3c, 0x00, 0xdc, 0x31, 0x01, 0x00, + 0xf0, 0x30, 0x48, 0x60, 0x30, 0x1c, 0xee, 0xf7, + 0x19, 0xf9, 0x65, 0x60, 0xe6, 0x60, 0x01, 0xe0, + 0x20, 0x68, 0x05, 0x60, 0x60, 0x68, 0x28, 0x60, + 0x25, 0x60, 0x00, 0x20, 0x68, 0x60, 0xa8, 0x60, + 0x38, 0x1c, 0xff, 0x30, 0x00, 0x06, 0x00, 0x0e, + 0x39, 0x1c, 0x07, 0x1c, 0x00, 0x29, 0xca, 0xd1, + 0x60, 0x68, 0xa0, 0x60, 0xfe, 0xbd, 0x00, 0x00, + 0xff, 0xb5, 0x05, 0x1c, 0x3c, 0x00, 0x18, 0x32, + 0x01, 0x00, 0x08, 0x1c, 0x00, 0x26, 0x81, 0xb0, + 0xf4, 0xf7, 0x2f, 0xfe, 0x04, 0x1c, 0x02, 0xd0, + 0x60, 0x68, 0xff, 0x28, 0x01, 0xd1, 0x06, 0x26, + 0x28, 0xe0, 0x21, 0x1c, 0x20, 0x31, 0x0a, 0x78, + 0x01, 0x2a, 0x01, 0xd1, 0x03, 0x26, 0x21, 0xe0, + 0x01, 0x27, 0x25, 0x60, 0x0f, 0x70, 0x11, 0xc5, + 0x1d, 0x48, 0x08, 0x3d, 0x68, 0x61, 0x03, 0x98, + 0x6a, 0x46, 0xe8, 0x60, 0x04, 0x98, 0x3c, 0x00, + 0x54, 0x32, 0x01, 0x00, 0x28, 0x61, 0x1a, 0x48, + 0xa8, 0x61, 0x1a, 0x48, 0xe8, 0x61, 0x1a, 0x48, + 0x28, 0x62, 0x1a, 0x48, 0x68, 0x62, 0x20, 0x7e, + 0xa1, 0x68, 0xed, 0xf7, 0xb3, 0xfe, 0x00, 0x28, + 0x06, 0xd1, 0x60, 0x7e, 0xe1, 0x68, 0x6a, 0x46, + 0xed, 0xf7, 0xac, 0xfe, 0x00, 0x28, 0x07, 0xd0, + 0x04, 0x26, 0x31, 0x1c, 0x9e, 0x20, 0xee, 0xf7, + 0x0d, 0xf8, 0x30, 0x1c, 0x05, 0xb0, 0xf0, 0xbd, + 0x3c, 0x00, 0x90, 0x32, 0x01, 0x00, 0x6a, 0x46, + 0x0f, 0x49, 0x1d, 0x20, 0xed, 0xf7, 0x9d, 0xfe, + 0x01, 0x21, 0x0d, 0x48, 0x49, 0x07, 0x01, 0x60, + 0x22, 0x7e, 0x3b, 0x1c, 0xd2, 0x06, 0xd2, 0x0e, + 0x93, 0x40, 0x43, 0x60, 0x62, 0x7e, 0xd2, 0x06, + 0xd2, 0x0e, 0x97, 0x40, 0x47, 0x60, 0x41, 0x60, + 0xe6, 0xe7, 0x31, 0x33, 0x01, 0x00, 0xd9, 0x32, + 0x01, 0x00, 0x91, 0x31, 0x01, 0x00, 0xdd, 0x30, + 0x01, 0x00, 0x3c, 0x00, 0xcc, 0x32, 0x01, 0x00, + 0xfd, 0x32, 0x01, 0x00, 0x71, 0x33, 0x01, 0x00, + 0x00, 0x10, 0x07, 0x00, 0x42, 0x68, 0x2c, 0x32, + 0x50, 0x68, 0x43, 0x68, 0x0b, 0x60, 0x81, 0x68, + 0x4b, 0x89, 0x0b, 0x81, 0x83, 0x68, 0x00, 0x21, + 0xd9, 0x60, 0x41, 0x60, 0x81, 0x60, 0x00, 0x68, + 0x50, 0x60, 0x00, 0x20, 0x70, 0x47, 0x00, 0x00, + 0x70, 0xb5, 0x42, 0x68, 0xff, 0x26, 0x91, 0x87, + 0x10, 0x6b, 0x0c, 0x04, 0x3c, 0x00, 0x08, 0x33, + 0x01, 0x00, 0x05, 0x1c, 0x36, 0x04, 0x34, 0x40, + 0x43, 0x68, 0x59, 0x68, 0xb1, 0x43, 0x21, 0x43, + 0x59, 0x60, 0x00, 0x68, 0xa8, 0x42, 0xf7, 0xd1, + 0x10, 0x6b, 0x51, 0x69, 0x40, 0x68, 0x48, 0x60, + 0x51, 0x69, 0x01, 0x20, 0x08, 0x60, 0x70, 0xbd, + 0x00, 0x00, 0xb0, 0xb5, 0x43, 0x68, 0x08, 0x1c, + 0x59, 0x62, 0x9a, 0x62, 0x00, 0x25, 0x0a, 0xe0, + 0x45, 0x81, 0xc4, 0x68, 0x2a, 0x1c, 0x3c, 0x00, + 0x44, 0x33, 0x01, 0x00, 0x00, 0x2c, 0x03, 0xd1, + 0x9a, 0x7e, 0x12, 0x07, 0x12, 0x0f, 0x10, 0x32, + 0x42, 0x60, 0x20, 0x1c, 0x00, 0x28, 0xf2, 0xd1, + 0x18, 0x69, 0x41, 0x60, 0x19, 0x69, 0x01, 0x20, + 0x08, 0x60, 0x02, 0x48, 0x00, 0x68, 0xed, 0xf7, + 0x37, 0xf8, 0xb0, 0xbd, 0x5c, 0x5b, 0x01, 0x00, + 0x01, 0x20, 0x05, 0x49, 0x40, 0x07, 0x80, 0xb5, + 0x88, 0x60, 0x04, 0x48, 0x01, 0x68, 0x0d, 0x20, + 0x3c, 0x00, 0x80, 0x33, 0x01, 0x00, 0xfe, 0xf7, + 0xe6, 0xff, 0x80, 0xbd, 0x00, 0x00, 0x00, 0x10, + 0x07, 0x00, 0xc4, 0x60, 0x01, 0x00, 0xf8, 0xb5, + 0x0e, 0x4f, 0x0c, 0x4e, 0x00, 0x24, 0x48, 0x20, + 0x60, 0x43, 0xc5, 0x19, 0x48, 0x21, 0x28, 0x1c, + 0xed, 0xf7, 0x7b, 0xf8, 0x1c, 0x20, 0x60, 0x43, + 0x81, 0x19, 0x28, 0x1d, 0x1c, 0x22, 0xed, 0xf7, + 0xfe, 0xf8, 0x1c, 0x23, 0xe8, 0x56, 0x05, 0x49, + 0xfb, 0xf7, 0x3c, 0x00, 0xbc, 0x33, 0x01, 0x00, + 0xcd, 0xf8, 0x01, 0x34, 0x01, 0x2c, 0xe9, 0xd3, + 0xf8, 0xbd, 0x00, 0x00, 0xb8, 0x44, 0x01, 0x00, + 0xcc, 0x6d, 0x01, 0x00, 0x15, 0x32, 0x01, 0x00, + 0xff, 0xb5, 0x05, 0x1c, 0x0a, 0x30, 0x06, 0x1c, + 0x81, 0xb0, 0xf2, 0xf7, 0xdd, 0xf8, 0x18, 0x4f, + 0x04, 0x1c, 0x39, 0x88, 0xef, 0xf7, 0xbc, 0xfc, + 0x32, 0x88, 0x78, 0x68, 0x02, 0x80, 0x72, 0x88, + 0x02, 0x30, 0x02, 0x80, 0x3c, 0x00, 0xf8, 0x33, + 0x01, 0x00, 0xb1, 0x88, 0x12, 0x4e, 0x41, 0x80, + 0x28, 0x88, 0x08, 0x36, 0x40, 0x05, 0x00, 0x28, + 0x05, 0xda, 0x69, 0x88, 0x03, 0x9a, 0x20, 0x1c, + 0xf7, 0xf7, 0x01, 0xfd, 0x00, 0xe0, 0x00, 0x20, + 0x70, 0x80, 0xf8, 0xf7, 0x5e, 0xfc, 0x01, 0x21, + 0x09, 0x03, 0x00, 0x28, 0x30, 0x88, 0x01, 0xd0, + 0x88, 0x43, 0x00, 0xe0, 0x08, 0x43, 0x30, 0x80, + 0x05, 0x48, 0x00, 0x22, 0x00, 0x21, 0x3c, 0x00, + 0x34, 0x34, 0x01, 0x00, 0x14, 0x30, 0xef, 0xf7, + 0x65, 0xfc, 0x20, 0x1c, 0xf9, 0xf7, 0x74, 0xf8, + 0x05, 0xb0, 0xf0, 0xbd, 0xb0, 0x7a, 0x01, 0x00, + 0x10, 0xb5, 0x0e, 0x4c, 0x60, 0x68, 0xf8, 0xf7, + 0x95, 0xf9, 0x20, 0x68, 0x00, 0x6a, 0x00, 0x28, + 0x13, 0xd1, 0xf8, 0xf7, 0xbf, 0xfc, 0x00, 0x28, + 0x08, 0xd0, 0x21, 0x68, 0x01, 0x20, 0x08, 0x62, + 0x1f, 0x21, 0x00, 0x22, 0x83, 0x20, 0x00, 0xf0, + 0x3c, 0x00, 0x70, 0x34, 0x01, 0x00, 0x9f, 0xf9, + 0x02, 0xe0, 0x60, 0x68, 0xf8, 0xf7, 0x21, 0xfa, + 0xff, 0xf7, 0x97, 0xfc, 0x21, 0x68, 0x08, 0x61, + 0x10, 0xbd, 0x14, 0x7a, 0x01, 0x00, 0xfe, 0xb5, + 0x1b, 0x4e, 0x0f, 0x1c, 0x1d, 0x1c, 0x14, 0x1c, + 0xb0, 0x60, 0x08, 0x1c, 0xf7, 0xf7, 0x2b, 0xff, + 0xb0, 0x80, 0x34, 0x73, 0x35, 0x62, 0x38, 0x1c, + 0x01, 0xaa, 0x02, 0xa9, 0xf7, 0xf7, 0x25, 0xff, + 0x00, 0xab, 0x3c, 0x00, 0xac, 0x34, 0x01, 0x00, + 0x18, 0x7a, 0x01, 0x28, 0x18, 0xd1, 0x18, 0x79, + 0x0b, 0x28, 0x08, 0xd1, 0x30, 0x7f, 0x24, 0x23, + 0x0f, 0x49, 0x58, 0x43, 0x40, 0x18, 0x80, 0x68, + 0xec, 0xf7, 0x88, 0xff, 0xfe, 0xbd, 0x00, 0xab, + 0x18, 0x79, 0x0a, 0x28, 0x08, 0xd1, 0xf7, 0xf7, + 0x39, 0xfd, 0x07, 0x1c, 0x29, 0x1c, 0x20, 0x1c, + 0xf7, 0xf7, 0x16, 0xfd, 0x38, 0x18, 0xb0, 0x80, + 0x30, 0x7f, 0x24, 0x23, 0x3c, 0x00, 0xe8, 0x34, + 0x01, 0x00, 0x04, 0x49, 0x58, 0x43, 0x40, 0x18, + 0x40, 0x68, 0xec, 0xf7, 0x72, 0xff, 0xe8, 0xe7, + 0x00, 0x00, 0xd4, 0x79, 0x01, 0x00, 0x94, 0x46, + 0x01, 0x00, 0xb0, 0xb5, 0xff, 0xf7, 0x53, 0xfc, + 0x04, 0x1c, 0xfb, 0xf7, 0xfc, 0xfa, 0x0c, 0x4d, + 0x29, 0x68, 0x09, 0x69, 0x09, 0x1b, 0x0c, 0x1a, + 0x02, 0x21, 0x1f, 0x20, 0x00, 0xf0, 0x8b, 0xf8, + 0x14, 0x2c, 0x06, 0xdd, 0x02, 0x22, 0x3c, 0x00, + 0x24, 0x35, 0x01, 0x00, 0x21, 0x1c, 0x1f, 0x20, + 0x00, 0xf0, 0x50, 0xf8, 0x01, 0x20, 0xb0, 0xbd, + 0x29, 0x68, 0x01, 0x20, 0x89, 0x6a, 0x00, 0x29, + 0xf9, 0xd0, 0x00, 0x20, 0xb0, 0xbd, 0x00, 0x00, + 0x14, 0x7a, 0x01, 0x00, 0xf8, 0xb5, 0x1a, 0x4d, + 0x07, 0x1c, 0xae, 0x79, 0x01, 0x21, 0x19, 0x4c, + 0x00, 0x20, 0x22, 0x68, 0x00, 0x2a, 0x14, 0xd1, + 0xae, 0x71, 0xa2, 0x68, 0xd0, 0x68, 0x06, 0xca, + 0x3c, 0x00, 0x60, 0x35, 0x01, 0x00, 0xec, 0xf7, + 0x3c, 0xff, 0xae, 0x79, 0x00, 0x21, 0x13, 0x4a, + 0x50, 0x69, 0x01, 0x30, 0x50, 0x61, 0xa0, 0x68, + 0x80, 0x68, 0xa0, 0x60, 0x62, 0x68, 0x90, 0x42, + 0x06, 0xd1, 0x01, 0x20, 0x20, 0x60, 0x03, 0xe0, + 0x01, 0x30, 0x0c, 0x34, 0x03, 0x28, 0xe3, 0xdb, + 0x00, 0x2f, 0x08, 0xd1, 0x00, 0x29, 0x0a, 0xd0, + 0x0a, 0x48, 0x40, 0x68, 0x00, 0x28, 0x06, 0xd0, + 0xfa, 0xf7, 0x3c, 0x00, 0x9c, 0x35, 0x01, 0x00, + 0xf5, 0xff, 0x03, 0xe0, 0x01, 0x2f, 0x03, 0xd0, + 0x00, 0x29, 0x01, 0xd1, 0xae, 0x71, 0xce, 0xe7, + 0xae, 0x71, 0xf8, 0xbd, 0x20, 0x10, 0x07, 0x00, + 0x18, 0xd9, 0x01, 0x00, 0xa8, 0x60, 0x01, 0x00, + 0x70, 0x5d, 0x01, 0x00, 0x80, 0xb5, 0x01, 0x23, + 0xf5, 0xf7, 0x7c, 0xf8, 0x80, 0xbd, 0x00, 0x00, + 0x80, 0xb5, 0x00, 0x23, 0xf5, 0xf7, 0x76, 0xf8, + 0x80, 0xbd, 0x00, 0x00, 0x3c, 0x00, 0xd8, 0x35, + 0x01, 0x00, 0xf8, 0xb5, 0x13, 0x4b, 0x00, 0x24, + 0x1b, 0x88, 0x98, 0x42, 0x1b, 0xd2, 0x11, 0x4b, + 0xc0, 0x00, 0xc0, 0x18, 0x45, 0x68, 0x06, 0x68, + 0x28, 0x68, 0x00, 0x28, 0x17, 0xd1, 0x0e, 0x4f, + 0xa8, 0x68, 0x43, 0x68, 0xb3, 0x42, 0x09, 0xd1, + 0xc3, 0x68, 0x8b, 0x42, 0x06, 0xd1, 0x03, 0x68, + 0x93, 0x42, 0x01, 0xd0, 0x53, 0x1c, 0x01, 0xd1, + 0x01, 0x24, 0x47, 0x60, 0x80, 0x68, 0x3c, 0x00, + 0x14, 0x36, 0x01, 0x00, 0x6b, 0x68, 0x83, 0x42, + 0xee, 0xd1, 0x03, 0xe0, 0x01, 0x21, 0x80, 0x20, + 0xed, 0xf7, 0x40, 0xfe, 0x20, 0x1c, 0xf8, 0xbd, + 0x56, 0x57, 0x01, 0x00, 0x84, 0x5d, 0x01, 0x00, + 0x29, 0xe3, 0x00, 0x00, 0xf8, 0xb5, 0x17, 0x4f, + 0x0a, 0x1c, 0xbe, 0x79, 0x16, 0x4d, 0x00, 0x23, + 0x6c, 0x68, 0x07, 0xe0, 0x21, 0x68, 0x91, 0x42, + 0x02, 0xd1, 0x21, 0x79, 0x81, 0x42, 0x04, 0xd0, + 0x3c, 0x00, 0x50, 0x36, 0x01, 0x00, 0x23, 0x1c, + 0xe4, 0x68, 0x00, 0x2c, 0xf5, 0xd1, 0x17, 0xe0, + 0x00, 0x2c, 0x15, 0xd0, 0x00, 0x2b, 0x0d, 0xd1, + 0xe3, 0x68, 0x0d, 0x48, 0x6b, 0x60, 0x00, 0x88, + 0x00, 0x2b, 0x02, 0xd1, 0xff, 0xf7, 0xd1, 0xfb, + 0x06, 0xe0, 0x0a, 0x4a, 0x99, 0x68, 0xff, 0xf7, + 0xf6, 0xfb, 0x01, 0xe0, 0xe0, 0x68, 0xd8, 0x60, + 0x28, 0x68, 0xe0, 0x60, 0x2c, 0x60, 0x02, 0xe0, + 0x01, 0x21, 0x3c, 0x00, 0x8c, 0x36, 0x01, 0x00, + 0xff, 0xf7, 0xa4, 0xff, 0xbe, 0x71, 0xf8, 0xbd, + 0x20, 0x10, 0x07, 0x00, 0x7c, 0x5d, 0x01, 0x00, + 0x2c, 0x74, 0x01, 0x00, 0x21, 0x38, 0x01, 0x00, + 0x70, 0xb5, 0x09, 0x4e, 0xb5, 0x79, 0xf9, 0xf7, + 0xaf, 0xfe, 0x04, 0x1c, 0x09, 0xd0, 0x20, 0x1c, + 0xed, 0xf7, 0x0c, 0xfb, 0x05, 0x49, 0x8a, 0x68, + 0x80, 0x18, 0x88, 0x60, 0x08, 0x68, 0x01, 0x30, + 0x08, 0x60, 0xb5, 0x71, 0x3c, 0x00, 0xc8, 0x36, + 0x01, 0x00, 0x20, 0x1c, 0x70, 0xbd, 0x20, 0x10, + 0x07, 0x00, 0xa8, 0x60, 0x01, 0x00, 0x09, 0x48, + 0x80, 0xb5, 0x40, 0x68, 0x02, 0x1c, 0x0b, 0xe0, + 0x01, 0x69, 0x00, 0x29, 0x07, 0xd0, 0x82, 0x42, + 0x04, 0xd0, 0x81, 0x68, 0x05, 0x48, 0x00, 0x88, + 0xff, 0xf7, 0xe5, 0xfa, 0x80, 0xbd, 0xc0, 0x68, + 0x00, 0x28, 0xf1, 0xd1, 0x80, 0xbd, 0x7c, 0x5d, + 0x01, 0x00, 0x2c, 0x74, 0x01, 0x00, 0x3c, 0x00, + 0x04, 0x37, 0x01, 0x00, 0x05, 0x48, 0x80, 0xb5, + 0x42, 0x68, 0x00, 0x2a, 0x04, 0xd0, 0x04, 0x48, + 0x00, 0x88, 0x91, 0x68, 0xff, 0xf7, 0xd2, 0xfa, + 0x80, 0xbd, 0x00, 0x00, 0x7c, 0x5d, 0x01, 0x00, + 0x2c, 0x74, 0x01, 0x00, 0x05, 0x48, 0x01, 0x68, + 0x00, 0x29, 0x04, 0xd0, 0xc0, 0x68, 0x00, 0x28, + 0x01, 0xd0, 0x01, 0x20, 0x70, 0x47, 0x00, 0x20, + 0x70, 0x47, 0x00, 0x00, 0x18, 0xd9, 0x01, 0x00, + 0x3c, 0x00, 0x40, 0x37, 0x01, 0x00, 0x80, 0xb5, + 0xf6, 0xf7, 0xd1, 0xfa, 0x80, 0xbd, 0x13, 0x1c, + 0x0d, 0x4a, 0xb0, 0xb5, 0x12, 0x88, 0x90, 0x42, + 0x0f, 0xd2, 0x03, 0x29, 0x0d, 0xd2, 0x0a, 0x4a, + 0xc0, 0x00, 0x14, 0x58, 0x0a, 0x4d, 0xac, 0x42, + 0x07, 0xd1, 0x13, 0x50, 0x0c, 0x23, 0x59, 0x43, + 0x08, 0x4b, 0xc9, 0x18, 0x80, 0x18, 0x41, 0x60, + 0xb0, 0xbd, 0x02, 0x21, 0x80, 0x20, 0xed, 0xf7, + 0x94, 0xfd, 0x3c, 0x00, 0x7c, 0x37, 0x01, 0x00, + 0xb0, 0xbd, 0x00, 0x00, 0x56, 0x57, 0x01, 0x00, + 0x84, 0x5d, 0x01, 0x00, 0x09, 0xa0, 0x00, 0x00, + 0x18, 0xd9, 0x01, 0x00, 0xf8, 0xb5, 0x0f, 0x1c, + 0x1e, 0x1c, 0x15, 0x1c, 0x04, 0x1c, 0x11, 0x1c, + 0xff, 0xf7, 0x4a, 0xff, 0x33, 0x1c, 0x2a, 0x1c, + 0x39, 0x1c, 0x20, 0x1c, 0xf4, 0xf7, 0x8a, 0xff, + 0xf8, 0xbd, 0x00, 0x00, 0xf7, 0xb5, 0x94, 0x46, + 0xff, 0x29, 0x21, 0xd0, 0x3c, 0x00, 0xb8, 0x37, + 0x01, 0x00, 0x15, 0x48, 0x00, 0x88, 0x81, 0x42, + 0x21, 0xd2, 0x14, 0x4a, 0x15, 0x4e, 0xc8, 0x00, + 0x85, 0x18, 0xb4, 0x79, 0x68, 0x68, 0x02, 0x68, + 0x00, 0x2a, 0x03, 0xd1, 0x03, 0x1d, 0x0c, 0xcb, + 0x9a, 0x42, 0x11, 0xd0, 0x43, 0x68, 0x9a, 0x68, + 0x42, 0x60, 0x0e, 0x4a, 0x17, 0x69, 0x01, 0x37, + 0x17, 0x61, 0xb4, 0x71, 0x00, 0x22, 0x02, 0x60, + 0x00, 0x98, 0xd8, 0x60, 0x60, 0x46, 0x3c, 0x00, + 0xf4, 0x37, 0x01, 0x00, 0x18, 0x60, 0x19, 0x74, + 0x28, 0x68, 0x58, 0x60, 0xfe, 0xbd, 0xb4, 0x71, + 0x06, 0x21, 0x00, 0xe0, 0x07, 0x21, 0x80, 0x20, + 0xed, 0xf7, 0x4c, 0xfd, 0xf6, 0xe7, 0x00, 0x00, + 0x56, 0x57, 0x01, 0x00, 0x84, 0x5d, 0x01, 0x00, + 0x20, 0x10, 0x07, 0x00, 0xa8, 0x60, 0x01, 0x00, + 0xb0, 0xb5, 0x14, 0x4d, 0x6c, 0x68, 0x00, 0x2c, + 0x01, 0xd0, 0x84, 0x42, 0x04, 0xd0, 0x0c, 0x21, + 0x3c, 0x00, 0x30, 0x38, 0x01, 0x00, 0x80, 0x20, + 0xed, 0xf7, 0x37, 0xfd, 0xb0, 0xbd, 0xff, 0xf7, + 0xb8, 0xfa, 0xa1, 0x68, 0x40, 0x1a, 0x0d, 0x49, + 0x88, 0x42, 0x03, 0xda, 0x10, 0x21, 0x80, 0x20, + 0xed, 0xf7, 0x2b, 0xfd, 0x21, 0x79, 0x22, 0x68, + 0x01, 0x20, 0xff, 0xf7, 0xac, 0xff, 0xe3, 0x68, + 0x6b, 0x60, 0x00, 0x2b, 0x05, 0xd0, 0x07, 0x48, + 0x06, 0x4a, 0x00, 0x88, 0x99, 0x68, 0xff, 0xf7, + 0xfe, 0xfa, 0x3c, 0x00, 0x6c, 0x38, 0x01, 0x00, + 0x28, 0x68, 0xe0, 0x60, 0x2c, 0x60, 0xb0, 0xbd, + 0x7c, 0x5d, 0x01, 0x00, 0x18, 0xfc, 0xff, 0xff, + 0x21, 0x38, 0x01, 0x00, 0x2c, 0x74, 0x01, 0x00, + 0xb0, 0xb5, 0x15, 0x4c, 0x08, 0x20, 0x21, 0x1c, + 0x80, 0x31, 0x08, 0x70, 0x13, 0x4a, 0x41, 0x04, + 0x11, 0x60, 0x13, 0x48, 0x00, 0x68, 0x13, 0x4d, + 0x6b, 0x69, 0x18, 0x40, 0x01, 0xd1, 0x10, 0x20, + 0x00, 0xe0, 0x00, 0x20, 0x3c, 0x00, 0xa8, 0x38, + 0x01, 0x00, 0xa8, 0x23, 0x5b, 0x5d, 0x18, 0x43, + 0x23, 0x1c, 0x40, 0x33, 0x18, 0x73, 0x51, 0x60, + 0x20, 0x78, 0x80, 0x08, 0x80, 0x00, 0x20, 0x70, + 0x00, 0x20, 0xff, 0xf7, 0x12, 0xfb, 0xff, 0xf7, + 0x72, 0xfa, 0x64, 0x30, 0x28, 0x66, 0x01, 0x38, + 0xa0, 0x61, 0x20, 0x78, 0x03, 0x21, 0x08, 0x43, + 0x20, 0x70, 0xb0, 0xbd, 0x00, 0x00, 0x00, 0x90, + 0x07, 0x00, 0x00, 0x10, 0x07, 0x00, 0x3c, 0x00, + 0xe4, 0x38, 0x01, 0x00, 0x10, 0x00, 0x07, 0x00, + 0xa4, 0x6c, 0x01, 0x00, 0x38, 0xb5, 0x0a, 0x4c, + 0x21, 0x1c, 0x20, 0x31, 0x8a, 0x79, 0x00, 0xab, + 0x1a, 0x70, 0xc9, 0x79, 0x07, 0x4d, 0x59, 0x70, + 0x69, 0x78, 0x88, 0x42, 0x03, 0xd1, 0xf8, 0xf7, + 0x13, 0xfc, 0xff, 0x20, 0x68, 0x70, 0x00, 0xab, + 0x18, 0x88, 0xe0, 0x84, 0x38, 0xbd, 0x00, 0x00, + 0x00, 0x10, 0x07, 0x00, 0x4c, 0x7b, 0x01, 0x00, + 0x3c, 0x00, 0x20, 0x39, 0x01, 0x00, 0xf8, 0xb5, + 0x0b, 0x1c, 0x06, 0x1c, 0x04, 0x1d, 0x7f, 0x33, + 0x14, 0xd0, 0x33, 0x68, 0x5d, 0x18, 0x35, 0x60, + 0x23, 0x88, 0x1f, 0x18, 0x06, 0x23, 0xff, 0x56, + 0xeb, 0x1b, 0x33, 0x60, 0x23, 0x88, 0x18, 0x18, + 0x81, 0x71, 0x20, 0x88, 0x01, 0x30, 0x00, 0x04, + 0x00, 0x0c, 0x20, 0x80, 0x90, 0x42, 0x01, 0xd3, + 0x00, 0x20, 0x20, 0x80, 0x10, 0x1c, 0x31, 0x68, + 0xec, 0xf7, 0x3c, 0x00, 0x5c, 0x39, 0x01, 0x00, + 0x6d, 0xfe, 0xf8, 0xbd, 0x0e, 0x49, 0x0a, 0x7c, + 0x83, 0x78, 0x1a, 0x43, 0x0a, 0x74, 0x42, 0x78, + 0x83, 0x78, 0x9a, 0x43, 0x0b, 0x7c, 0x93, 0x43, + 0x0b, 0x74, 0x8a, 0x7c, 0x43, 0x78, 0x1a, 0x43, + 0x8a, 0x74, 0x8a, 0x7c, 0x03, 0x78, 0x9a, 0x43, + 0x8a, 0x74, 0x02, 0x78, 0x43, 0x78, 0x1a, 0x43, + 0x4b, 0x7c, 0x1a, 0x43, 0x4a, 0x74, 0x4a, 0x7c, + 0xc0, 0x78, 0x82, 0x43, 0x3c, 0x00, 0x98, 0x39, + 0x01, 0x00, 0x4a, 0x74, 0x70, 0x47, 0x10, 0x00, + 0x07, 0x00, 0xb0, 0xb5, 0x06, 0x4d, 0x00, 0x24, + 0x20, 0x06, 0x00, 0x0e, 0xed, 0xf7, 0xf7, 0xf8, + 0xa1, 0x00, 0x69, 0x58, 0x08, 0x71, 0x01, 0x34, + 0x04, 0x2c, 0xf5, 0xdb, 0xb0, 0xbd, 0x10, 0x7b, + 0x01, 0x00, 0x0b, 0x48, 0x0c, 0x49, 0x7d, 0x23, + 0x42, 0x69, 0xdb, 0x00, 0x00, 0x2a, 0xc8, 0x6b, + 0x07, 0xd0, 0xc0, 0x18, 0x1a, 0x01, 0x3c, 0x00, + 0xd4, 0x39, 0x01, 0x00, 0x90, 0x42, 0xc8, 0x63, + 0x01, 0xd9, 0x07, 0x48, 0xc8, 0x63, 0x70, 0x47, + 0xff, 0x38, 0xf5, 0x38, 0xc8, 0x63, 0x98, 0x42, + 0xf9, 0xd2, 0xcb, 0x63, 0x70, 0x47, 0x00, 0x00, + 0xf4, 0x68, 0x01, 0x00, 0x44, 0x7d, 0x01, 0x00, + 0x70, 0x17, 0x00, 0x00, 0x70, 0xb5, 0x0d, 0x1c, + 0x04, 0x1c, 0x16, 0x1c, 0xfb, 0xf7, 0xf6, 0xfa, + 0xb0, 0x43, 0x28, 0x43, 0x01, 0x1c, 0x20, 0x1c, + 0x3c, 0x00, 0x10, 0x3a, 0x01, 0x00, 0x00, 0xf0, + 0xcc, 0xfa, 0x70, 0xbd, 0x00, 0x00, 0x80, 0xb5, + 0x0b, 0x4a, 0x00, 0x29, 0x09, 0xd0, 0x02, 0x29, + 0x0f, 0xd1, 0x01, 0x1c, 0x08, 0x48, 0xd2, 0x78, + 0x38, 0x30, 0xff, 0xf7, 0x78, 0xff, 0x06, 0x49, + 0x06, 0xe0, 0x01, 0x1c, 0x04, 0x48, 0x12, 0x79, + 0x20, 0x30, 0xff, 0xf7, 0x70, 0xff, 0x03, 0x49, + 0x08, 0x60, 0x80, 0xbd, 0x00, 0x00, 0xac, 0x7c, + 0x01, 0x00, 0x3c, 0x00, 0x4c, 0x3a, 0x01, 0x00, + 0xc8, 0x67, 0x01, 0x00, 0xc4, 0x67, 0x01, 0x00, + 0x80, 0xb5, 0x0b, 0x4a, 0x00, 0x29, 0x09, 0xd0, + 0x02, 0x29, 0x0f, 0xd1, 0x01, 0x1c, 0x08, 0x48, + 0x52, 0x79, 0x68, 0x30, 0xff, 0xf7, 0x5a, 0xff, + 0x06, 0x49, 0x06, 0xe0, 0x01, 0x1c, 0x04, 0x48, + 0x92, 0x79, 0x50, 0x30, 0xff, 0xf7, 0x52, 0xff, + 0x03, 0x49, 0x08, 0x60, 0x80, 0xbd, 0x00, 0x00, + 0xac, 0x7c, 0x01, 0x00, 0x3c, 0x00, 0x88, 0x3a, + 0x01, 0x00, 0xd0, 0x67, 0x01, 0x00, 0xcc, 0x67, + 0x01, 0x00, 0x08, 0xb5, 0x04, 0x21, 0x00, 0x91, + 0x81, 0x7e, 0x43, 0x68, 0x03, 0x29, 0x06, 0xd1, + 0x01, 0x1c, 0x0c, 0x31, 0x01, 0x20, 0x6a, 0x46, + 0xec, 0xf7, 0x9a, 0xfc, 0x08, 0xbd, 0x19, 0x68, + 0xc1, 0x60, 0xfb, 0xe7, 0x00, 0x00, 0x10, 0xb5, + 0x03, 0x1c, 0x00, 0x20, 0x08, 0x4c, 0x00, 0x21, + 0xca, 0x00, 0x12, 0x19, 0x92, 0x78, 0x3c, 0x00, + 0xc4, 0x3a, 0x01, 0x00, 0x9a, 0x42, 0x03, 0xd1, + 0xc8, 0x00, 0x00, 0x19, 0x40, 0x68, 0x10, 0xbd, + 0x01, 0x31, 0x09, 0x06, 0x09, 0x16, 0x06, 0x29, + 0xf1, 0xdb, 0x10, 0xbd, 0xcc, 0x5a, 0x01, 0x00, + 0xf8, 0xb5, 0x0f, 0x1c, 0x16, 0x1c, 0x00, 0x25, + 0xfe, 0xf7, 0x8e, 0xf9, 0x04, 0x1c, 0x0a, 0xd0, + 0x4a, 0x20, 0x00, 0x5d, 0x05, 0x28, 0x06, 0xd1, + 0x38, 0x1c, 0xf1, 0xf7, 0x81, 0xfe, 0x00, 0x28, + 0x3c, 0x00, 0x00, 0x3b, 0x01, 0x00, 0x01, 0xd0, + 0x01, 0x25, 0x34, 0x60, 0x28, 0x1c, 0xf8, 0xbd, + 0x00, 0x00, 0x70, 0xb5, 0x0d, 0x1c, 0x16, 0x1c, + 0x00, 0x24, 0xfe, 0xf7, 0x78, 0xf9, 0x00, 0x28, + 0x0b, 0xd0, 0x4a, 0x21, 0x09, 0x5c, 0x05, 0x29, + 0x07, 0xd1, 0x01, 0x69, 0x00, 0x29, 0x04, 0xd1, + 0x30, 0x60, 0xf1, 0xf7, 0x04, 0xfd, 0x01, 0x24, + 0x28, 0x60, 0x20, 0x1c, 0x70, 0xbd, 0xf8, 0xb5, + 0x06, 0x1c, 0x3c, 0x00, 0x3c, 0x3b, 0x01, 0x00, + 0x00, 0x25, 0x0c, 0x1c, 0x08, 0x1c, 0xf1, 0xf7, + 0x5d, 0xfe, 0x00, 0x28, 0x01, 0xd0, 0x00, 0x21, + 0x05, 0xe0, 0x20, 0x1c, 0xf1, 0xf7, 0x74, 0xfe, + 0x00, 0x28, 0x14, 0xd0, 0x01, 0x21, 0x30, 0x1c, + 0xf4, 0xf7, 0x80, 0xfb, 0x00, 0x90, 0x00, 0x28, + 0x0d, 0xd0, 0x08, 0x4f, 0x01, 0x25, 0x06, 0x22, + 0x31, 0x1c, 0x38, 0x1c, 0xec, 0xf7, 0xc2, 0xfc, + 0x06, 0x22, 0x21, 0x1c, 0x3c, 0x00, 0x78, 0x3b, + 0x01, 0x00, 0xb8, 0x18, 0xec, 0xf7, 0xbd, 0xfc, + 0x00, 0x98, 0xf8, 0x60, 0x28, 0x1c, 0xf8, 0xbd, + 0x00, 0x00, 0x70, 0x7c, 0x01, 0x00, 0x00, 0x21, + 0x00, 0x28, 0x06, 0xd0, 0x42, 0x78, 0x07, 0x2a, + 0x03, 0xd1, 0xc0, 0x79, 0x01, 0x28, 0x00, 0xd1, + 0x01, 0x21, 0x08, 0x1c, 0x70, 0x47, 0xf8, 0xb5, + 0x05, 0x1c, 0x00, 0x27, 0x16, 0x4e, 0xf1, 0xf7, + 0x28, 0xfe, 0x00, 0x28, 0x07, 0xd0, 0x3c, 0x00, + 0xb4, 0x3b, 0x01, 0x00, 0xf1, 0xf7, 0xc0, 0xfb, + 0x00, 0x28, 0x10, 0xd1, 0x00, 0x24, 0xf1, 0xf7, + 0xbb, 0xfc, 0x06, 0xe0, 0xf1, 0xf7, 0x02, 0xfe, + 0x00, 0x28, 0x08, 0xd0, 0x01, 0x24, 0xf1, 0xf7, + 0x99, 0xfd, 0x01, 0x1c, 0x06, 0x22, 0x30, 0x1c, + 0xec, 0xf7, 0x8e, 0xfc, 0x01, 0x27, 0x00, 0x2f, + 0x0d, 0xd0, 0x21, 0x1c, 0x28, 0x1c, 0xf4, 0xf7, + 0x3b, 0xfb, 0x01, 0x1c, 0x05, 0x48, 0x06, 0x22, + 0x3c, 0x00, 0xf0, 0x3b, 0x01, 0x00, 0x06, 0x38, + 0xc1, 0x60, 0x29, 0x1c, 0xec, 0xf7, 0x7f, 0xfc, + 0x01, 0x20, 0xf8, 0xbd, 0x00, 0x20, 0xfc, 0xe7, + 0x00, 0x00, 0x76, 0x7c, 0x01, 0x00, 0xf0, 0xb5, + 0x07, 0x1c, 0x00, 0x68, 0x02, 0x21, 0x04, 0x68, + 0x78, 0x69, 0x87, 0xb0, 0x01, 0x40, 0x00, 0x25, + 0x00, 0x29, 0x05, 0x91, 0x74, 0x4e, 0x12, 0xd0, + 0x22, 0x88, 0x01, 0x21, 0x13, 0x05, 0x02, 0xd4, + 0xc0, 0x07, 0x3c, 0x00, 0x2c, 0x3c, 0x01, 0x00, + 0xc1, 0x17, 0x01, 0x31, 0x6f, 0x48, 0x00, 0x29, + 0x00, 0x68, 0x01, 0xd0, 0x01, 0x30, 0x04, 0xe0, + 0x11, 0x06, 0x89, 0x0e, 0x2d, 0x29, 0x01, 0xd1, + 0x03, 0x30, 0x30, 0x60, 0x20, 0x88, 0x80, 0x07, + 0x67, 0xd1, 0x78, 0x69, 0xc0, 0x07, 0x64, 0xd5, + 0x03, 0xaa, 0x04, 0xa9, 0x20, 0x1c, 0xf7, 0xf7, + 0x4b, 0xfb, 0x00, 0xab, 0x18, 0x7c, 0x00, 0x28, + 0x07, 0xd0, 0x18, 0x7c, 0x3c, 0x00, 0x68, 0x3c, + 0x01, 0x00, 0x02, 0x28, 0x58, 0xd1, 0x18, 0x7b, + 0x40, 0x07, 0x40, 0x0f, 0x04, 0x28, 0x53, 0xd8, + 0x20, 0x79, 0x05, 0x99, 0xc0, 0x07, 0xc0, 0x17, + 0x01, 0x30, 0x02, 0x90, 0x00, 0x29, 0x02, 0xd1, + 0x02, 0x98, 0x00, 0x28, 0x48, 0xd1, 0x05, 0x99, + 0x00, 0x29, 0x04, 0xd0, 0x20, 0x88, 0x00, 0x05, + 0x01, 0xd4, 0x00, 0x20, 0x30, 0x60, 0xc0, 0x20, + 0xed, 0xf7, 0xcb, 0xfd, 0x05, 0x1c, 0x3c, 0x00, + 0xa4, 0x3c, 0x01, 0x00, 0x20, 0x1c, 0x0a, 0x30, + 0x06, 0x90, 0xfe, 0xf7, 0xad, 0xf8, 0x06, 0x1c, + 0x28, 0x1c, 0x08, 0x30, 0x23, 0x88, 0x02, 0x1d, + 0x11, 0x1d, 0xdb, 0x05, 0x06, 0xd5, 0x06, 0x9b, + 0x03, 0x60, 0x20, 0x1c, 0x10, 0x30, 0x10, 0x60, + 0x20, 0x1d, 0x0e, 0xe0, 0x23, 0x1d, 0x13, 0x60, + 0x22, 0x88, 0x92, 0x05, 0x05, 0xd5, 0x22, 0x1c, + 0x10, 0x32, 0x02, 0x60, 0x06, 0x9b, 0x0b, 0x60, + 0x3c, 0x00, 0xe0, 0x3c, 0x01, 0x00, 0x04, 0xe0, + 0x06, 0x9b, 0x03, 0x60, 0x20, 0x1c, 0x10, 0x30, + 0x08, 0x60, 0x28, 0x69, 0xf1, 0xf7, 0x43, 0xfc, + 0x00, 0x28, 0x08, 0xd0, 0x01, 0x28, 0x12, 0xd0, + 0x02, 0x28, 0x58, 0xd1, 0x00, 0xab, 0x18, 0x7c, + 0x00, 0x28, 0x54, 0xd1, 0x12, 0xe0, 0x00, 0xab, + 0x18, 0x7c, 0x02, 0x28, 0x0b, 0xd1, 0x00, 0x2e, + 0x4d, 0xd0, 0x4b, 0x20, 0x80, 0x5d, 0x02, 0x28, + 0x49, 0xd1, 0x3c, 0x00, 0x1c, 0x3d, 0x01, 0x00, + 0x07, 0xe0, 0x63, 0xe0, 0x00, 0xab, 0x18, 0x7c, + 0x00, 0x28, 0x02, 0xd1, 0x38, 0x1c, 0xfe, 0xf7, + 0x1b, 0xff, 0x20, 0x88, 0x41, 0x04, 0x30, 0x48, + 0x11, 0xd5, 0x00, 0x2e, 0x52, 0xd0, 0x00, 0xab, + 0x19, 0x7c, 0x00, 0x29, 0x26, 0xd0, 0x02, 0x99, + 0x00, 0x29, 0x02, 0xd0, 0xb0, 0x6a, 0x00, 0x78, + 0x00, 0xe0, 0x00, 0x78, 0x01, 0x28, 0x1d, 0xd0, + 0x03, 0x28, 0x43, 0xd1, 0x3c, 0x00, 0x58, 0x3d, + 0x01, 0x00, 0x1a, 0xe0, 0x00, 0xab, 0x19, 0x7c, + 0x02, 0x29, 0x16, 0xd1, 0x19, 0x7b, 0x04, 0x29, + 0x13, 0xd0, 0x19, 0x7b, 0x0c, 0x29, 0x10, 0xd0, + 0x22, 0x49, 0x09, 0x68, 0x00, 0x29, 0x0c, 0xd0, + 0x00, 0x2e, 0x0a, 0xd0, 0x02, 0x99, 0x00, 0x29, + 0x02, 0xd0, 0xb0, 0x6a, 0x00, 0x78, 0x00, 0xe0, + 0x00, 0x78, 0x01, 0x28, 0x29, 0xd0, 0x03, 0x28, + 0x27, 0xd0, 0x28, 0x22, 0x39, 0x1c, 0x3c, 0x00, + 0x94, 0x3d, 0x01, 0x00, 0x28, 0x1c, 0x88, 0x30, + 0xec, 0xf7, 0x0a, 0xfc, 0x00, 0xab, 0x19, 0x7c, + 0x28, 0x1c, 0x80, 0x30, 0x01, 0x71, 0x19, 0x7b, + 0x41, 0x71, 0x6c, 0x60, 0x6e, 0x61, 0x1b, 0xe0, + 0x05, 0x99, 0x00, 0x29, 0x14, 0xd0, 0x11, 0x48, + 0x84, 0x6c, 0x00, 0x2c, 0x10, 0xd0, 0x00, 0x22, + 0x00, 0x2e, 0x04, 0xd0, 0x40, 0x36, 0xb0, 0x7a, + 0x05, 0x28, 0x00, 0xd1, 0x01, 0x22, 0x00, 0x92, + 0x3c, 0x00, 0xd0, 0x3d, 0x01, 0x00, 0xf8, 0x7a, + 0xba, 0x7a, 0x29, 0x69, 0xc3, 0x07, 0xdb, 0x0f, + 0x06, 0x98, 0xec, 0xf7, 0x00, 0xfb, 0x28, 0x1c, + 0xed, 0xf7, 0x07, 0xfd, 0x00, 0x25, 0x28, 0x1c, + 0x07, 0xb0, 0xf0, 0xbd, 0x00, 0x00, 0xc4, 0x6a, + 0x01, 0x00, 0x68, 0x61, 0x01, 0x00, 0x28, 0x61, + 0x01, 0x00, 0xc4, 0x69, 0x01, 0x00, 0x80, 0xb5, + 0x02, 0x20, 0xff, 0xf7, 0x70, 0xf8, 0x80, 0xbd, + 0x00, 0x00, 0x3c, 0x00, 0x0c, 0x3e, 0x01, 0x00, + 0xb0, 0xb5, 0x1d, 0x4d, 0x01, 0x28, 0x17, 0xd0, + 0xa2, 0x28, 0x06, 0xd0, 0xa3, 0x28, 0x03, 0xd1, + 0x01, 0x21, 0x15, 0x20, 0xff, 0xf7, 0x08, 0xfc, + 0xb0, 0xbd, 0x00, 0x29, 0x01, 0xd1, 0x17, 0x48, + 0x02, 0xe0, 0x7d, 0x20, 0xc0, 0x00, 0x48, 0x43, + 0x00, 0x23, 0x01, 0x22, 0x01, 0x1c, 0x28, 0x60, + 0x15, 0x20, 0xff, 0xf7, 0xa7, 0xfc, 0xb0, 0xbd, + 0x01, 0x29, 0x04, 0xd0, 0x3c, 0x00, 0x48, 0x3e, + 0x01, 0x00, 0x02, 0x29, 0xfa, 0xd1, 0x00, 0xf0, + 0x2a, 0xf8, 0xb0, 0xbd, 0x6c, 0x68, 0xf5, 0xf7, + 0xde, 0xfc, 0xfe, 0xf7, 0xa8, 0xff, 0x68, 0x60, + 0x00, 0x2c, 0x09, 0xd0, 0x29, 0x68, 0x0a, 0x23, + 0x59, 0x43, 0x00, 0x1b, 0x88, 0x42, 0x03, 0xd9, + 0x01, 0x21, 0x15, 0x20, 0xed, 0xf7, 0x17, 0xfa, + 0x01, 0x22, 0x15, 0x20, 0x29, 0x68, 0xff, 0xf7, + 0xa6, 0xfb, 0xb0, 0xbd, 0x00, 0x00, 0x3c, 0x00, + 0x84, 0x3e, 0x01, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x87, 0x93, 0x03, 0x01, 0x20, 0x04, 0x49, + 0x40, 0x03, 0x80, 0xb5, 0x08, 0x60, 0x03, 0x21, + 0x15, 0x20, 0xed, 0xf7, 0x03, 0xfa, 0x80, 0xbd, + 0x00, 0x10, 0x07, 0x00, 0x07, 0x48, 0x80, 0xb5, + 0xbe, 0x21, 0x01, 0x73, 0x01, 0x7a, 0x10, 0x22, + 0x11, 0x43, 0x01, 0x72, 0x00, 0x23, 0x02, 0x22, + 0x15, 0x20, 0x03, 0x49, 0xff, 0xf7, 0x68, 0xfc, + 0x3c, 0x00, 0xc0, 0x3e, 0x01, 0x00, 0x80, 0xbd, + 0x00, 0x00, 0x00, 0x03, 0x07, 0x00, 0x80, 0x9f, + 0xd5, 0x00, 0x80, 0xb5, 0x00, 0x28, 0x03, 0xd0, + 0x0a, 0x1c, 0x15, 0x21, 0xa2, 0x20, 0x02, 0xe0, + 0x00, 0x22, 0x15, 0x21, 0xa3, 0x20, 0xff, 0xf7, + 0x66, 0xfc, 0x80, 0xbd, 0x00, 0x00, 0x10, 0xb5, + 0x00, 0xf0, 0x19, 0xf8, 0x0a, 0x48, 0xbe, 0x21, + 0x01, 0x73, 0x03, 0x7a, 0x10, 0x22, 0x93, 0x43, + 0x01, 0x24, 0x3c, 0x00, 0xfc, 0x3e, 0x01, 0x00, + 0x23, 0x43, 0x03, 0x72, 0x01, 0x73, 0x01, 0x7a, + 0x91, 0x43, 0x20, 0x22, 0x11, 0x43, 0x01, 0x72, + 0x02, 0x22, 0x15, 0x20, 0x02, 0x49, 0xff, 0xf7, + 0x5b, 0xfb, 0x10, 0xbd, 0x00, 0x03, 0x07, 0x00, + 0x80, 0x9f, 0xd5, 0x00, 0x80, 0xb5, 0x02, 0x21, + 0x15, 0x20, 0xff, 0xf7, 0x85, 0xfb, 0x04, 0x48, + 0xbe, 0x21, 0x01, 0x73, 0x01, 0x7a, 0x11, 0x22, + 0x91, 0x43, 0x01, 0x72, 0x3c, 0x00, 0x38, 0x3f, + 0x01, 0x00, 0x80, 0xbd, 0x00, 0x00, 0x00, 0x03, + 0x07, 0x00, 0xf8, 0xb5, 0x06, 0x1c, 0x05, 0x1c, + 0x60, 0x36, 0x00, 0x27, 0x44, 0x68, 0x22, 0xe0, + 0x08, 0x21, 0x00, 0x20, 0xed, 0xf7, 0x41, 0xfb, + 0x60, 0x61, 0x01, 0x89, 0x04, 0x39, 0x09, 0x04, + 0x09, 0x0c, 0x01, 0x81, 0x60, 0x69, 0x00, 0x68, + 0x40, 0x18, 0x04, 0x21, 0xed, 0xf7, 0x35, 0xfb, + 0xe0, 0x61, 0x60, 0x69, 0x71, 0x7b, 0x3c, 0x00, + 0x74, 0x3f, 0x01, 0x00, 0x00, 0x68, 0x89, 0x01, + 0xc1, 0x70, 0x29, 0x69, 0x0c, 0x31, 0x03, 0x22, + 0xec, 0xf7, 0xba, 0xfa, 0x28, 0x69, 0x0c, 0x30, + 0x01, 0x68, 0x01, 0x31, 0x01, 0x60, 0x25, 0x62, + 0xa7, 0x61, 0x24, 0x68, 0x00, 0x2c, 0xda, 0xd1, + 0x02, 0x49, 0x03, 0x48, 0x6a, 0x68, 0xf6, 0xf7, + 0xb3, 0xf8, 0xf8, 0xbd, 0xfd, 0x6b, 0x00, 0x00, + 0xa0, 0x6a, 0x01, 0x00, 0x80, 0xb5, 0x00, 0x07, + 0x3c, 0x00, 0xb0, 0x3f, 0x01, 0x00, 0x00, 0x09, + 0x09, 0x02, 0x09, 0x0a, 0x08, 0x43, 0x02, 0x49, + 0x08, 0x60, 0xff, 0xf7, 0x20, 0xff, 0x80, 0xbd, + 0x00, 0x00, 0x60, 0x00, 0x07, 0x00, 0x08, 0x00, + 0x14, 0x00, 0xc8, 0x00, 0x00, 0x00, 0xe8, 0x03, + 0x00, 0x00, 0x10, 0x00, 0x14, 0x00, 0xc8, 0x00, + 0x00, 0x00, 0xe8, 0x03, 0x00, 0x00, 0x1c, 0x00, + 0x14, 0x00, 0xc8, 0x00, 0x00, 0x00, 0xe8, 0x03, + 0x00, 0x00, 0x3c, 0x00, 0xec, 0x3f, 0x01, 0x00, + 0x24, 0x01, 0x07, 0x00, 0x32, 0x00, 0x00, 0x00, + 0xe8, 0x03, 0x00, 0x00, 0x40, 0x06, 0x01, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x41, 0x6e, 0x62, 0x69, 0x7e, 0x64, 0x61, 0x6f, + 0x6f, 0x00, 0x00, 0x00, 0x52, 0x65, 0x6c, 0x65, + 0x61, 0x73, 0x65, 0x20, 0x36, 0x5f, 0x37, 0x5f, + 0x31, 0x35, 0x20, 0x42, 0x75, 0x69, 0x6c, 0x64, + 0x20, 0x32, 0x3a, 0x35, 0x3c, 0x00, 0x28, 0x40, + 0x01, 0x00, 0x32, 0x39, 0x38, 0x20, 0x53, 0x65, + 0x70, 0x20, 0x30, 0x34, 0x20, 0x32, 0x30, 0x30, + 0x39, 0x20, 0x31, 0x37, 0x3a, 0x31, 0x33, 0x3a, + 0x32, 0x30, 0x20, 0x28, 0x48, 0x57, 0x3d, 0x34, + 0x3a, 0x33, 0x2c, 0x42, 0x54, 0x43, 0x4f, 0x45, + 0x58, 0x29, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, + 0x1c, 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3c, 0x00, + 0x64, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xe8, 0x03, 0x70, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0xd0, 0x07, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x7c, 0x15, 0x15, 0x00, + 0x3c, 0x00, 0xa0, 0x40, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x70, 0x17, + 0x1e, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, + 0x00, 0x00, 0x28, 0x23, 0x16, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0xf8, 0x2a, + 0x0b, 0x00, 0x3c, 0x00, 0xdc, 0x40, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, + 0xe0, 0x2e, 0x12, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x00, 0x50, 0x46, 0x0e, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, + 0xf0, 0x55, 0x08, 0x00, 0x3c, 0x00, 0x18, 0x41, + 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2c, 0x00, + 0x00, 0x00, 0xc0, 0x5d, 0x0e, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0xe8, 0x80, + 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x42, 0x00, + 0x00, 0x00, 0xa0, 0x8c, 0x0a, 0x00, 0x3c, 0x00, + 0x54, 0x41, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x48, 0x00, 0x00, 0x00, 0x80, 0xbb, 0x0a, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0xf0, 0xd2, 0x0a, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x6c, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x90, 0x00, + 0x3c, 0x00, 0x90, 0x41, 0x01, 0x00, 0xc0, 0x00, + 0x90, 0x00, 0xc0, 0x00, 0x90, 0x00, 0x14, 0x00, + 0x10, 0x00, 0x14, 0x00, 0x10, 0x00, 0xc0, 0x00, + 0x90, 0x00, 0x14, 0x00, 0x10, 0x00, 0x14, 0x00, + 0x10, 0x00, 0xc0, 0x00, 0x90, 0x00, 0x14, 0x00, + 0x10, 0x00, 0xc0, 0x00, 0x90, 0x00, 0x14, 0x00, + 0x10, 0x00, 0x14, 0x00, 0x10, 0x00, 0x14, 0x00, + 0x10, 0x00, 0xc0, 0x00, 0x90, 0x00, 0x60, 0x00, + 0x48, 0x00, 0x3c, 0x00, 0xcc, 0x41, 0x01, 0x00, + 0x60, 0x00, 0x48, 0x00, 0x14, 0x00, 0x10, 0x00, + 0x14, 0x00, 0x10, 0x00, 0x60, 0x00, 0x48, 0x00, + 0x14, 0x00, 0x10, 0x00, 0x14, 0x00, 0x10, 0x00, + 0x60, 0x00, 0x48, 0x00, 0x14, 0x00, 0x10, 0x00, + 0x60, 0x00, 0x48, 0x00, 0x14, 0x00, 0x10, 0x00, + 0x14, 0x00, 0x10, 0x00, 0x14, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x04, 0x01, 0x0b, 0x02, 0x0c, 0x03, + 0x12, 0x04, 0x16, 0x05, 0x3c, 0x00, 0x08, 0x42, + 0x01, 0x00, 0x18, 0x06, 0x00, 0x0e, 0x00, 0x0e, + 0x24, 0x07, 0x00, 0x0e, 0x2c, 0x08, 0x30, 0x09, + 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x42, 0x0a, + 0x00, 0x0e, 0x48, 0x0b, 0x00, 0x0e, 0x00, 0x0e, + 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x60, 0x0c, + 0x00, 0x0e, 0x00, 0x0e, 0x6c, 0x0d, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0xc0, 0xff, 0xff, 0xff, 0x3c, 0x00, + 0x44, 0x42, 0x01, 0x00, 0xb6, 0xff, 0xff, 0xff, + 0xd3, 0xff, 0xff, 0xff, 0xc9, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x51, 0xb0, 0x00, 0x00, + 0x0c, 0x00, 0x00, 0x00, 0x51, 0xb0, 0x00, 0x00, + 0x0c, 0x00, 0x00, 0x00, 0x59, 0xaf, 0x00, 0x00, + 0x3c, 0x00, 0x80, 0x42, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xa5, 0xaf, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x45, 0xb0, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xd5, 0xaf, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xad, 0xb0, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xbc, 0x42, 0x01, 0x00, + 0x95, 0xdb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x95, 0xdb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x99, 0xb0, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xf8, 0x42, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x17, + 0x01, 0x00, 0x35, 0x17, 0x01, 0x00, 0x21, 0x17, + 0x01, 0x00, 0xd9, 0x9c, 0x00, 0x00, 0x49, 0x17, + 0x01, 0x00, 0x3d, 0x17, 0x01, 0x00, 0xd1, 0x9c, + 0x00, 0x00, 0xd1, 0x9c, 0x00, 0x00, 0x1d, 0x1a, + 0x01, 0x00, 0xd1, 0x9c, 0x00, 0x00, 0x01, 0x1a, + 0x01, 0x00, 0x31, 0x1a, 0x01, 0x00, 0x25, 0x1a, + 0x01, 0x00, 0x3d, 0x17, 0x01, 0x00, 0x3c, 0x00, + 0x34, 0x43, 0x01, 0x00, 0x81, 0x1a, 0x01, 0x00, + 0xd1, 0x9c, 0x00, 0x00, 0x79, 0x17, 0x01, 0x00, + 0xd9, 0x9c, 0x00, 0x00, 0x5d, 0x17, 0x01, 0x00, + 0xa1, 0x17, 0x01, 0x00, 0x95, 0x17, 0x01, 0x00, + 0x81, 0x17, 0x01, 0x00, 0x21, 0x18, 0x01, 0x00, + 0xf5, 0x17, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, + 0x0c, 0x00, 0x00, 0x00, 0x10, 0x00, 0x08, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x70, 0x43, 0x01, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, + 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x19, 0x1c, + 0x01, 0x00, 0x89, 0x41, 0x00, 0x00, 0x89, 0x41, + 0x00, 0x00, 0x85, 0x41, 0x00, 0x00, 0x85, 0x41, + 0x00, 0x00, 0x85, 0x41, 0x00, 0x00, 0x85, 0x41, + 0x00, 0x00, 0x89, 0x41, 0x00, 0x00, 0x85, 0x41, + 0x00, 0x00, 0x85, 0x41, 0x00, 0x00, 0x35, 0x1b, + 0x01, 0x00, 0x3c, 0x00, 0xac, 0x43, 0x01, 0x00, + 0x9d, 0x1b, 0x01, 0x00, 0x01, 0x1c, 0x01, 0x00, + 0x89, 0x41, 0x00, 0x00, 0x89, 0x41, 0x00, 0x00, + 0x89, 0x41, 0x00, 0x00, 0x85, 0x41, 0x00, 0x00, + 0x65, 0x18, 0x01, 0x00, 0x29, 0x18, 0x01, 0x00, + 0x39, 0x18, 0x01, 0x00, 0xbd, 0x18, 0x01, 0x00, + 0x89, 0x41, 0x00, 0x00, 0x4d, 0x18, 0x01, 0x00, + 0xa5, 0x18, 0x01, 0x00, 0x85, 0x41, 0x00, 0x00, + 0x01, 0x19, 0x01, 0x00, 0x3c, 0x00, 0xe8, 0x43, + 0x01, 0x00, 0xd9, 0x18, 0x01, 0x00, 0xed, 0x18, + 0x01, 0x00, 0x15, 0x19, 0x01, 0x00, 0x89, 0x41, + 0x00, 0x00, 0x89, 0x41, 0x00, 0x00, 0x89, 0x41, + 0x00, 0x00, 0x85, 0x41, 0x00, 0x00, 0x89, 0x41, + 0x00, 0x00, 0x89, 0x41, 0x00, 0x00, 0x69, 0x1c, + 0x01, 0x00, 0x89, 0x41, 0x00, 0x00, 0x71, 0x1c, + 0x01, 0x00, 0x89, 0x41, 0x00, 0x00, 0x89, 0x41, + 0x00, 0x00, 0xfd, 0xdb, 0x00, 0x00, 0x3c, 0x00, + 0x24, 0x44, 0x01, 0x00, 0x1d, 0x7c, 0x00, 0x00, + 0x00, 0x00, 0x80, 0x00, 0xf5, 0xda, 0x00, 0x00, + 0x14, 0x00, 0x81, 0x00, 0xfd, 0xdd, 0x00, 0x00, + 0x08, 0x00, 0x82, 0x00, 0xc5, 0xdd, 0x00, 0x00, + 0x38, 0x00, 0x83, 0x00, 0x45, 0xdc, 0x00, 0x00, + 0x10, 0x00, 0x84, 0x00, 0x99, 0xdc, 0x00, 0x00, + 0x0c, 0x00, 0x86, 0x00, 0x39, 0xdc, 0x00, 0x00, + 0x10, 0x00, 0x88, 0x00, 0x11, 0xde, 0x00, 0x00, + 0x3c, 0x00, 0x60, 0x44, 0x01, 0x00, 0x10, 0x00, + 0x8a, 0x00, 0x35, 0xdd, 0x00, 0x00, 0x0c, 0x00, + 0x8c, 0x00, 0xad, 0xdf, 0x00, 0x00, 0x1c, 0x00, + 0x8e, 0x00, 0xc9, 0xde, 0x00, 0x00, 0x38, 0x00, + 0x8f, 0x00, 0xed, 0xdc, 0x00, 0x00, 0x38, 0x00, + 0x90, 0x00, 0x75, 0xdf, 0x00, 0x00, 0x0c, 0x00, + 0x91, 0x00, 0x8d, 0xdc, 0x00, 0x00, 0x0c, 0x00, + 0x93, 0x00, 0xb9, 0xdd, 0x00, 0x00, 0x0c, 0x00, + 0x94, 0x00, 0x3c, 0x00, 0x9c, 0x44, 0x01, 0x00, + 0x00, 0x08, 0x08, 0x08, 0x10, 0x0c, 0x0c, 0x0c, + 0x08, 0x0c, 0x08, 0x0c, 0x08, 0x0c, 0x08, 0x08, + 0x08, 0x08, 0x14, 0x08, 0x08, 0x14, 0x00, 0x30, + 0x00, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, + 0xad, 0x30, 0x01, 0x00, 0x15, 0x30, 0x01, 0x00, + 0x20, 0x30, 0x07, 0x00, 0x30, 0x30, 0x07, 0x00, + 0x06, 0x07, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xd8, 0x44, + 0x01, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0xc9, 0x02, 0x00, 0x94, 0x3f, + 0x03, 0x00, 0xe0, 0x8b, 0x5a, 0x00, 0x05, 0x3a, + 0x85, 0x00, 0xc8, 0xf2, 0x06, 0x00, 0xf8, 0x4c, + 0x56, 0x00, 0x20, 0xa7, 0x3d, 0x00, 0xb7, 0x4a, + 0x00, 0x00, 0xb7, 0x4a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x14, 0x45, 0x01, 0x00, 0x01, 0x01, 0x01, 0x02, + 0x02, 0x02, 0x03, 0x03, 0x03, 0x04, 0x04, 0x04, + 0x05, 0x06, 0x00, 0x00, 0x2d, 0x7c, 0x00, 0x00, + 0x00, 0x00, 0xff, 0x00, 0xfd, 0x95, 0x00, 0x00, + 0x08, 0x00, 0xff, 0x00, 0xed, 0x97, 0x00, 0x00, + 0x08, 0x00, 0x82, 0x00, 0xcd, 0x95, 0x00, 0x00, + 0x0c, 0x00, 0x83, 0x00, 0x4d, 0x96, 0x00, 0x00, + 0x0c, 0x00, 0x85, 0x00, 0x2d, 0x7c, 0x00, 0x00, + 0x3c, 0x00, 0x50, 0x45, 0x01, 0x00, 0x00, 0x00, + 0xff, 0x00, 0x2d, 0x7c, 0x00, 0x00, 0x00, 0x00, + 0xff, 0x00, 0x2d, 0x7c, 0x00, 0x00, 0x00, 0x00, + 0xff, 0x00, 0x3d, 0x96, 0x00, 0x00, 0x0c, 0x00, + 0x89, 0x00, 0xd9, 0x97, 0x00, 0x00, 0x08, 0x00, + 0x8a, 0x00, 0x91, 0x95, 0x00, 0x00, 0x08, 0x00, + 0xff, 0x00, 0x2d, 0x7c, 0x00, 0x00, 0x00, 0x00, + 0xff, 0x00, 0x2d, 0x7c, 0x00, 0x00, 0x00, 0x00, + 0xff, 0x00, 0x3c, 0x00, 0x8c, 0x45, 0x01, 0x00, + 0xf9, 0x97, 0x00, 0x00, 0x08, 0x00, 0x8d, 0x00, + 0x2d, 0x7c, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, + 0x2d, 0x7c, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, + 0xc9, 0x97, 0x00, 0x00, 0x30, 0x00, 0x90, 0x00, + 0x11, 0x95, 0x00, 0x00, 0x18, 0x00, 0x91, 0x00, + 0x15, 0x96, 0x00, 0x00, 0x08, 0x00, 0x92, 0x00, + 0x59, 0x95, 0x00, 0x00, 0x3c, 0x00, 0x93, 0x00, + 0x29, 0x96, 0x00, 0x00, 0x3c, 0x00, 0xc8, 0x45, + 0x01, 0x00, 0x08, 0x00, 0x94, 0x00, 0xa1, 0x95, + 0x00, 0x00, 0x08, 0x00, 0x95, 0x00, 0x81, 0x97, + 0x00, 0x00, 0x0c, 0x00, 0x96, 0x00, 0x6d, 0x97, + 0x00, 0x00, 0x10, 0x00, 0x98, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x10, + 0x08, 0x00, 0x00, 0x08, 0x00, 0x10, 0x3c, 0x00, + 0x04, 0x46, 0x01, 0x00, 0x08, 0x0c, 0x0c, 0x0c, + 0x0c, 0x1c, 0x0c, 0x0c, 0x08, 0x00, 0x00, 0x00, + 0x0d, 0x8b, 0x00, 0x00, 0xf5, 0x8a, 0x00, 0x00, + 0xe9, 0x8a, 0x00, 0x00, 0x01, 0x8b, 0x00, 0x00, + 0x14, 0x08, 0x0c, 0x0c, 0x10, 0x0c, 0x00, 0x00, + 0xb1, 0x98, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, + 0x19, 0x99, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, + 0x3d, 0x7c, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0x46, 0x01, 0x00, 0x3d, 0x99, + 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x09, 0x99, + 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x3d, 0x7c, + 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x02, 0x01, + 0x04, 0x04, 0x08, 0x08, 0x81, 0x37, 0x80, 0xf3, + 0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00, 0xaa, 0xaa, + 0x03, 0x00, 0x00, 0xf8, 0x6d, 0xa9, 0x6d, 0xa9, + 0x6e, 0xa9, 0x3c, 0x00, 0x7c, 0x46, 0x01, 0x00, + 0x6e, 0xa8, 0x6e, 0xa8, 0x6e, 0xa8, 0x6f, 0xa7, + 0x6f, 0xa7, 0x6f, 0xa7, 0x6f, 0xa6, 0x6f, 0xa6, + 0x70, 0xa6, 0x70, 0xa5, 0x70, 0xa4, 0x00, 0x00, + 0xb5, 0x1b, 0x01, 0x00, 0xc9, 0x1b, 0x01, 0x00, + 0xe1, 0x1b, 0x01, 0x00, 0xe5, 0x9c, 0x00, 0x00, + 0xa5, 0x1b, 0x01, 0x00, 0xe5, 0x9c, 0x00, 0x00, + 0x89, 0x1b, 0x01, 0x00, 0xd5, 0x9c, 0x00, 0x00, + 0xd5, 0x9c, 0x00, 0x00, 0x3c, 0x00, 0xb8, 0x46, + 0x01, 0x00, 0xd1, 0x1a, 0x01, 0x00, 0xe5, 0x1a, + 0x01, 0x00, 0x05, 0x1b, 0x01, 0x00, 0x25, 0x1b, + 0x01, 0x00, 0xb1, 0x1a, 0x01, 0x00, 0xe5, 0x9c, + 0x00, 0x00, 0x9d, 0x1a, 0x01, 0x00, 0xd5, 0x9c, + 0x00, 0x00, 0xc1, 0x1a, 0x01, 0x00, 0x89, 0x19, + 0x01, 0x00, 0xa9, 0x19, 0x01, 0x00, 0xc9, 0x19, + 0x01, 0x00, 0xf1, 0x19, 0x01, 0x00, 0x79, 0x19, + 0x01, 0x00, 0xe5, 0x9c, 0x00, 0x00, 0x3c, 0x00, + 0xf4, 0x46, 0x01, 0x00, 0x65, 0x19, 0x01, 0x00, + 0xd5, 0x9c, 0x00, 0x00, 0xd5, 0x9c, 0x00, 0x00, + 0xd5, 0x9c, 0x00, 0x00, 0xd5, 0x9c, 0x00, 0x00, + 0xd5, 0x9c, 0x00, 0x00, 0xd5, 0x9c, 0x00, 0x00, + 0xd5, 0x9c, 0x00, 0x00, 0x55, 0x1c, 0x01, 0x00, + 0x45, 0x1c, 0x01, 0x00, 0x45, 0x1c, 0x01, 0x00, + 0xd5, 0x9c, 0x00, 0x00, 0xd5, 0x9c, 0x00, 0x00, + 0xd5, 0x9c, 0x00, 0x00, 0xd5, 0x9c, 0x00, 0x00, + 0x3c, 0x00, 0x30, 0x47, 0x01, 0x00, 0xd5, 0x9c, + 0x00, 0x00, 0x55, 0x19, 0x01, 0x00, 0xe5, 0x9c, + 0x00, 0x00, 0x41, 0x19, 0x01, 0x00, 0x31, 0x19, + 0x01, 0x00, 0xd5, 0x9c, 0x00, 0x00, 0x02, 0x05, + 0x0a, 0x00, 0x00, 0x00, 0x02, 0x04, 0x0a, 0x00, + 0x00, 0x00, 0xc5, 0x20, 0x00, 0x00, 0x21, 0x21, + 0x00, 0x00, 0x25, 0x21, 0x00, 0x00, 0x39, 0x21, + 0x00, 0x00, 0x49, 0x21, 0x00, 0x00, 0x55, 0x21, + 0x00, 0x00, 0x3c, 0x00, 0x6c, 0x47, 0x01, 0x00, + 0x61, 0x21, 0x00, 0x00, 0xed, 0x21, 0x00, 0x00, + 0x0d, 0x22, 0x00, 0x00, 0x21, 0x22, 0x00, 0x00, + 0x3d, 0x22, 0x00, 0x00, 0x49, 0x22, 0x00, 0x00, + 0xc5, 0x22, 0x00, 0x00, 0xe1, 0x22, 0x00, 0x00, + 0xf5, 0x22, 0x00, 0x00, 0xe9, 0x1f, 0x00, 0x00, + 0xe9, 0x1f, 0x00, 0x00, 0xe9, 0x1f, 0x00, 0x00, + 0xe9, 0x1f, 0x00, 0x00, 0xe9, 0x1f, 0x00, 0x00, + 0x11, 0x23, 0x00, 0x00, 0x3c, 0x00, 0xa8, 0x47, + 0x01, 0x00, 0x1d, 0x23, 0x00, 0x00, 0x89, 0x23, + 0x00, 0x00, 0xa5, 0x23, 0x00, 0x00, 0xb9, 0x23, + 0x00, 0x00, 0x11, 0x20, 0x00, 0x00, 0x1d, 0x20, + 0x00, 0x00, 0x6d, 0x20, 0x00, 0x00, 0x8d, 0x20, + 0x00, 0x00, 0xb9, 0x20, 0x00, 0x00, 0x00, 0x01, + 0x02, 0x03, 0x03, 0x05, 0x06, 0x06, 0x08, 0x09, + 0x08, 0x09, 0x09, 0x09, 0xc4, 0x80, 0xca, 0x80, + 0x80, 0x80, 0x80, 0x80, 0xd0, 0x80, 0x3c, 0x00, + 0xe4, 0x47, 0x01, 0x00, 0xd6, 0xd9, 0xdc, 0xdf, + 0xe2, 0x80, 0x80, 0x80, 0xe5, 0xe8, 0x80, 0x80, + 0x80, 0x80, 0xeb, 0xee, 0xf1, 0xf4, 0xf7, 0xfa, + 0xfd, 0x00, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, + 0x04, 0x00, 0x05, 0x00, 0x06, 0x00, 0x07, 0x00, + 0x08, 0x00, 0x09, 0x00, 0x0a, 0x00, 0x0b, 0x00, + 0x0c, 0x00, 0x0e, 0x00, 0x10, 0x00, 0x11, 0x00, + 0x13, 0x00, 0x16, 0x00, 0x18, 0x00, 0x1b, 0x00, + 0x3c, 0x00, 0x20, 0x48, 0x01, 0x00, 0x1e, 0x00, + 0x22, 0x00, 0x26, 0x00, 0x2b, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x3c, 0x00, 0x44, 0x00, 0x4c, 0x00, + 0x55, 0x00, 0x5f, 0x00, 0x6b, 0x00, 0x78, 0x00, + 0x86, 0x00, 0x97, 0x00, 0xa9, 0x00, 0xbe, 0x00, + 0xd5, 0x00, 0xef, 0x00, 0xff, 0x7f, 0x0c, 0x00, + 0x06, 0x00, 0x02, 0x00, 0x00, 0x00, 0xfe, 0xff, + 0xfc, 0xff, 0xfb, 0xff, 0xfa, 0xff, 0xf9, 0xff, + 0xf8, 0xff, 0x3c, 0x00, 0x5c, 0x48, 0x01, 0x00, + 0xf7, 0xff, 0xf6, 0xff, 0xf5, 0xff, 0xf4, 0xff, + 0xf3, 0xff, 0xf2, 0xff, 0xf1, 0xff, 0xf0, 0xff, + 0xef, 0xff, 0xee, 0xff, 0xed, 0xff, 0xec, 0xff, + 0xeb, 0xff, 0xea, 0xff, 0xe9, 0xff, 0xe8, 0xff, + 0xe7, 0xff, 0xe6, 0xff, 0xe5, 0xff, 0xe4, 0xff, + 0xe3, 0xff, 0xe2, 0xff, 0xe1, 0xff, 0xe0, 0xff, + 0xdf, 0xff, 0xde, 0xff, 0xdd, 0xff, 0xdc, 0xff, + 0xdc, 0xff, 0x00, 0x00, 0x3c, 0x00, 0x98, 0x48, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xb1, 0x7c, 0x41, 0x00, 0x11, 0x5a, + 0x40, 0xe2, 0xb2, 0x7c, 0x41, 0x00, 0x05, 0x5a, + 0x40, 0xe2, 0xaf, 0x7c, 0x41, 0x00, 0xf9, 0x59, + 0x40, 0xe2, 0xb0, 0x7c, 0x41, 0x00, 0xed, 0x59, + 0x40, 0xe2, 0x24, 0x67, 0x01, 0x00, 0x0e, 0x00, + 0x00, 0xe3, 0x5c, 0x67, 0x01, 0x00, 0x0e, 0x00, + 0x00, 0xe3, 0x0a, 0x61, 0x01, 0x00, 0x3c, 0x00, + 0xd4, 0x48, 0x01, 0x00, 0x01, 0x00, 0x00, 0xe3, + 0x0e, 0x61, 0x01, 0x00, 0x01, 0x00, 0x00, 0xe3, + 0x32, 0x67, 0x01, 0x00, 0x0e, 0x00, 0x00, 0xe3, + 0x6a, 0x67, 0x01, 0x00, 0x0e, 0x00, 0x00, 0xe3, + 0x0b, 0x61, 0x01, 0x00, 0x01, 0x00, 0x00, 0xe3, + 0x0f, 0x61, 0x01, 0x00, 0x01, 0x00, 0x00, 0xe3, + 0x40, 0x67, 0x01, 0x00, 0x0e, 0x00, 0x00, 0xe3, + 0x78, 0x67, 0x01, 0x00, 0x0e, 0x00, 0x00, 0xe3, + 0x3c, 0x00, 0x10, 0x49, 0x01, 0x00, 0x0c, 0x61, + 0x01, 0x00, 0x01, 0x00, 0x00, 0xe3, 0x10, 0x61, + 0x01, 0x00, 0x01, 0x00, 0x00, 0xe3, 0x4e, 0x67, + 0x01, 0x00, 0x0e, 0x00, 0x00, 0xe3, 0x86, 0x67, + 0x01, 0x00, 0x0e, 0x00, 0x00, 0xe3, 0x0d, 0x61, + 0x01, 0x00, 0x01, 0x00, 0x00, 0xe3, 0x11, 0x61, + 0x01, 0x00, 0x01, 0x00, 0x00, 0xe3, 0xc0, 0x48, + 0x01, 0x00, 0x04, 0x00, 0x00, 0x0a, 0xe0, 0x48, + 0x01, 0x00, 0x3c, 0x00, 0x4c, 0x49, 0x01, 0x00, + 0x04, 0x00, 0x00, 0x0a, 0x00, 0x49, 0x01, 0x00, + 0x04, 0x00, 0x00, 0x0a, 0x20, 0x49, 0x01, 0x00, + 0x04, 0x00, 0x00, 0x0a, 0x18, 0x67, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x28, 0x75, 0x01, 0x01, + 0x7d, 0xa9, 0x40, 0xe2, 0x2c, 0x75, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x20, 0x75, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x44, 0x75, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x3c, 0x00, 0x88, 0x49, + 0x01, 0x00, 0xf0, 0x59, 0x01, 0x00, 0x04, 0x00, + 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x24, 0x75, 0x01, 0x00, 0x04, 0x00, + 0x00, 0xe2, 0xb8, 0x7c, 0x01, 0x00, 0x04, 0x00, + 0x00, 0xe2, 0x8d, 0xa9, 0x00, 0x00, 0x01, 0x00, + 0x00, 0xda, 0x1d, 0x75, 0x01, 0x00, 0x01, 0x00, + 0x00, 0xe2, 0xc4, 0x67, 0x01, 0x00, 0x3c, 0x00, + 0xc4, 0x49, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x21, 0x59, 0x00, 0x00, 0x0e, 0x00, 0x00, 0xd9, + 0xc8, 0x67, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0xcc, 0x67, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0xd0, 0x67, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0x65, 0xd9, 0x00, 0x00, 0x04, 0x00, 0x00, 0xda, + 0xa5, 0xd9, 0x00, 0x00, 0x04, 0x00, 0x00, 0xda, + 0x3c, 0x00, 0x00, 0x4a, 0x01, 0x00, 0x01, 0x59, + 0x00, 0x00, 0x01, 0x00, 0x00, 0xda, 0x32, 0x67, + 0x01, 0x00, 0x0e, 0x00, 0x00, 0xe3, 0x6a, 0x67, + 0x01, 0x00, 0x0e, 0x00, 0x00, 0xe3, 0x11, 0x59, + 0x00, 0x00, 0x01, 0x00, 0x00, 0xda, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x48, + 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, 0xa0, 0x48, + 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, 0x40, 0x49, + 0x01, 0x00, 0x3c, 0x00, 0x3c, 0x4a, 0x01, 0x00, + 0x05, 0x00, 0x00, 0x0a, 0x68, 0x49, 0x01, 0x00, + 0x09, 0x00, 0x00, 0x0a, 0x6c, 0x57, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x38, 0x61, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xac, 0x6e, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0xb0, 0x6e, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x70, 0x57, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x3c, 0x00, 0x78, 0x4a, + 0x01, 0x00, 0xe8, 0x59, 0x01, 0x00, 0x08, 0x00, + 0x00, 0xe3, 0xdc, 0x58, 0x01, 0x14, 0x4d, 0xfd, + 0x40, 0xe3, 0x2c, 0x59, 0x01, 0x14, 0x39, 0xfd, + 0x40, 0xe3, 0xc0, 0x58, 0x01, 0x00, 0x0e, 0x00, + 0x00, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x64, 0x73, 0x41, 0x00, 0x3d, 0x2e, + 0x44, 0xe2, 0x7c, 0x59, 0x01, 0x14, 0x3c, 0x00, + 0xb4, 0x4a, 0x01, 0x00, 0x9d, 0x2f, 0x44, 0xe3, + 0x5c, 0x57, 0x01, 0x00, 0x0e, 0x00, 0x00, 0xe2, + 0x79, 0x2e, 0x04, 0x00, 0x01, 0x00, 0x00, 0xdb, + 0xa0, 0x58, 0x01, 0x00, 0x02, 0x00, 0x00, 0xe3, + 0xa2, 0x58, 0x01, 0x00, 0x02, 0x00, 0x00, 0xe3, + 0xa0, 0x57, 0x01, 0x00, 0x0e, 0x00, 0x00, 0xe3, + 0xd1, 0x88, 0x01, 0x00, 0x01, 0x00, 0x00, 0xda, + 0x1d, 0x89, 0x01, 0x00, 0x04, 0x00, 0x00, 0xda, + 0x3c, 0x00, 0xf0, 0x4a, 0x01, 0x00, 0x95, 0x88, + 0x01, 0x00, 0x04, 0x00, 0x00, 0xdb, 0x31, 0x2f, + 0x04, 0x00, 0x0e, 0x00, 0x00, 0xd9, 0xc5, 0x2e, + 0x04, 0x00, 0x0e, 0x00, 0x00, 0xd9, 0x68, 0x6c, + 0x01, 0x01, 0x15, 0xd5, 0x40, 0xe2, 0xc0, 0x57, + 0x01, 0x00, 0x08, 0x00, 0x00, 0xe3, 0xc8, 0x57, + 0x01, 0x00, 0x34, 0x00, 0x00, 0xe3, 0x9c, 0x6c, + 0x01, 0x00, 0x08, 0x00, 0x00, 0xe3, 0xb0, 0x58, + 0x01, 0x03, 0x3c, 0x00, 0x2c, 0x4b, 0x01, 0x00, + 0xe9, 0xd4, 0x40, 0xe2, 0xbc, 0x58, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x9d, 0xa3, 0x00, 0x00, + 0x60, 0x00, 0x00, 0xd9, 0x70, 0x79, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x78, 0x79, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x7c, 0x5a, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x5d, 0x1c, 0x00, 0x00, + 0x11, 0x00, 0x00, 0xd9, 0x24, 0x6e, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x3c, 0x00, 0x68, 0x4b, + 0x01, 0x00, 0x18, 0x58, 0x01, 0x05, 0xd5, 0xd5, + 0x40, 0xe3, 0xfc, 0x57, 0x01, 0x00, 0x14, 0x00, + 0x00, 0xe3, 0x04, 0x8e, 0x01, 0x03, 0xe5, 0xd5, + 0x40, 0xe3, 0x00, 0x5b, 0x01, 0x00, 0x04, 0x00, + 0x00, 0xe2, 0x18, 0x5b, 0x01, 0x00, 0x40, 0x00, + 0x00, 0xe2, 0xd4, 0x67, 0x01, 0x00, 0x04, 0x00, + 0x00, 0xe2, 0x8d, 0x37, 0x00, 0x00, 0x04, 0x00, + 0x00, 0xdb, 0xbd, 0x36, 0x00, 0x00, 0x3c, 0x00, + 0xa4, 0x4b, 0x01, 0x00, 0x04, 0x00, 0x00, 0xdb, + 0xfc, 0x60, 0x01, 0x00, 0x02, 0x00, 0x00, 0xe2, + 0x90, 0x7d, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0x70, 0x69, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb0, 0x49, 0x01, 0x00, 0x1a, 0x00, 0x00, 0x0a, + 0x90, 0x4b, 0x01, 0x00, 0x06, 0x00, 0x00, 0x0a, + 0xa4, 0x58, 0x81, 0x00, 0x05, 0xfd, 0x40, 0xe3, + 0x3c, 0x00, 0xe0, 0x4b, 0x01, 0x00, 0x80, 0x4a, + 0x01, 0x00, 0x0c, 0x00, 0x00, 0x0a, 0x0c, 0x5a, + 0x81, 0x01, 0x25, 0x2d, 0x44, 0xe3, 0xe0, 0x4a, + 0x01, 0x00, 0x03, 0x00, 0x00, 0x0a, 0x18, 0x63, + 0x41, 0x00, 0xfd, 0xbb, 0x40, 0xe2, 0x08, 0x57, + 0x01, 0x00, 0x01, 0x00, 0x00, 0xe2, 0x9c, 0x48, + 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x4a, + 0x01, 0x00, 0x3c, 0x00, 0x1c, 0x4c, 0x01, 0x00, + 0x02, 0x00, 0x00, 0x0a, 0xcc, 0x74, 0x01, 0x00, + 0x03, 0x00, 0x00, 0xe3, 0x65, 0x73, 0x41, 0x00, + 0xa9, 0x2e, 0x44, 0xe2, 0xf6, 0x59, 0x01, 0x01, + 0xd1, 0x2c, 0x44, 0xe3, 0x08, 0x4b, 0x01, 0x00, + 0x04, 0x00, 0x00, 0x0a, 0x07, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x6a, 0x28, 0x4b, 0x01, 0x00, + 0x02, 0x00, 0x00, 0x0a, 0x88, 0x7d, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x3c, 0x00, 0x58, 0x4c, + 0x01, 0x00, 0x00, 0x75, 0x01, 0x04, 0x65, 0x6f, + 0x40, 0xe3, 0xbc, 0x78, 0x01, 0x00, 0x0e, 0x00, + 0x00, 0xe3, 0x38, 0x4b, 0x01, 0x00, 0x04, 0x00, + 0x00, 0x0a, 0x04, 0x57, 0x01, 0x00, 0x04, 0x00, + 0x00, 0x62, 0x58, 0x4b, 0x01, 0x00, 0x02, 0x00, + 0x00, 0x0a, 0x80, 0x4b, 0x01, 0x00, 0x02, 0x00, + 0x00, 0x0a, 0x68, 0x4b, 0x01, 0x00, 0x03, 0x00, + 0x00, 0x0a, 0x8c, 0x7d, 0x01, 0x00, 0x3c, 0x00, + 0x94, 0x4c, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0x39, 0x2d, 0x04, 0x00, 0x04, 0x00, 0x00, 0xdb, + 0x94, 0x7d, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x64, + 0xa8, 0x4c, 0x01, 0x00, 0x04, 0x00, 0x00, 0x0a, + 0x3c, 0x00, 0xd0, 0x4c, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x4c, + 0x01, 0x00, 0x01, 0x00, 0x00, 0x0a, 0xd0, 0x4c, + 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe7, 0x7a, + 0x01, 0x00, 0x01, 0x00, 0x00, 0xe2, 0xe8, 0x7a, + 0x01, 0x00, 0x01, 0x00, 0x00, 0xe2, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xed, 0x7a, + 0x01, 0x00, 0x3c, 0x00, 0x0c, 0x4d, 0x01, 0x00, + 0x01, 0x00, 0x00, 0xe2, 0xee, 0x7a, 0x01, 0x00, + 0x01, 0x00, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xf3, 0x7a, 0x01, 0x00, + 0x01, 0x00, 0x00, 0xe2, 0xf4, 0x7a, 0x01, 0x00, + 0x01, 0x00, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xf9, 0x7a, 0x01, 0x00, + 0x01, 0x00, 0x00, 0xe2, 0xfa, 0x7a, 0x01, 0x00, + 0x01, 0x00, 0x00, 0xe2, 0x3c, 0x00, 0x48, 0x4d, + 0x01, 0x00, 0xe8, 0x4c, 0x01, 0x00, 0x03, 0x00, + 0x00, 0x0a, 0x00, 0x4d, 0x01, 0x00, 0x03, 0x00, + 0x00, 0x0a, 0x18, 0x4d, 0x01, 0x00, 0x03, 0x00, + 0x00, 0x0a, 0x30, 0x4d, 0x01, 0x00, 0x03, 0x00, + 0x00, 0x0a, 0x90, 0x5c, 0x01, 0x00, 0x04, 0x00, + 0x00, 0xe2, 0x94, 0x5c, 0x01, 0x00, 0x04, 0x00, + 0x00, 0xe2, 0x98, 0x5c, 0x01, 0x00, 0x04, 0x00, + 0x00, 0xe2, 0x9c, 0x5c, 0x01, 0x00, 0x3c, 0x00, + 0x84, 0x4d, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0xa0, 0x5c, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0xa4, 0x5c, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0xa8, 0x5c, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0xac, 0x5c, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0xb0, 0x5c, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0xb4, 0x5c, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0xb8, 0x5c, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0x3c, 0x00, 0xc0, 0x4d, 0x01, 0x00, 0xbc, 0x5c, + 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, 0xc0, 0x5c, + 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, 0xc4, 0x5c, + 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, 0x90, 0x5c, + 0x01, 0x00, 0x38, 0x00, 0x00, 0xe3, 0x68, 0x4d, + 0x01, 0x00, 0x0e, 0x00, 0x00, 0x0a, 0xd8, 0x4d, + 0x01, 0x00, 0x02, 0x00, 0x00, 0xfa, 0x12, 0x61, + 0x81, 0x01, 0x31, 0xd5, 0x40, 0xe3, 0x06, 0x61, + 0x01, 0x00, 0x3c, 0x00, 0xfc, 0x4d, 0x01, 0x00, + 0x02, 0x00, 0x00, 0xe2, 0x0b, 0x61, 0x01, 0x00, + 0x01, 0x00, 0x00, 0xe3, 0x0f, 0x61, 0x01, 0x00, + 0x01, 0x00, 0x00, 0xe3, 0x08, 0x61, 0x01, 0x00, + 0x02, 0x00, 0x00, 0xe2, 0x50, 0x7b, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0x01, 0x00, + 0x0e, 0x00, 0x00, 0x64, 0x9c, 0x57, 0x01, 0x01, + 0x91, 0x88, 0x41, 0xe3, 0x3c, 0x00, 0x38, 0x4e, + 0x01, 0x00, 0x6e, 0x41, 0x67, 0x6f, 0xe2, 0x65, + 0x60, 0x69, 0x6f, 0x20, 0x41, 0x42, 0x00, 0x00, + 0x00, 0x00, 0xf0, 0x4d, 0x01, 0x00, 0x09, 0x00, + 0x00, 0x0a, 0x48, 0x4e, 0x01, 0x00, 0x01, 0x00, + 0x00, 0x0a, 0xe8, 0x4d, 0x01, 0x00, 0x01, 0x00, + 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x48, 0x4d, 0x01, 0x00, 0x04, 0x00, + 0x00, 0x0a, 0x28, 0x61, 0x01, 0x01, 0x3c, 0x00, + 0x74, 0x4e, 0x01, 0x00, 0xbd, 0xd5, 0x40, 0xe2, + 0x69, 0x61, 0x41, 0x00, 0x85, 0xd5, 0x40, 0xe2, + 0x30, 0x61, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0x34, 0x61, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0x3c, 0x61, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0x34, 0x61, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0x44, 0x61, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, + 0x3c, 0x00, 0xb0, 0x4e, 0x01, 0x00, 0x70, 0x4e, + 0x01, 0x00, 0x08, 0x00, 0x00, 0x0a, 0x18, 0x61, + 0x01, 0x00, 0x02, 0x00, 0x00, 0xe2, 0x1c, 0x61, + 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, 0x20, 0x61, + 0x01, 0x00, 0x02, 0x00, 0x00, 0xe2, 0x24, 0x61, + 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, 0xb8, 0x4e, + 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, 0xc8, 0x4e, + 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, 0xd8, 0x4e, + 0x01, 0x00, 0x3c, 0x00, 0xec, 0x4e, 0x01, 0x00, + 0x02, 0x00, 0x00, 0x0a, 0x96, 0x48, 0x01, 0x00, + 0x06, 0x00, 0x00, 0xe3, 0xe0, 0x62, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x6a, 0x9b, 0x7d, 0x01, 0x00, + 0x01, 0x00, 0x00, 0x62, 0x9c, 0x7d, 0x01, 0x00, + 0x02, 0x00, 0x00, 0x62, 0x60, 0x7c, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x01, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x6a, 0x3c, 0x00, 0x28, 0x4f, + 0x01, 0x00, 0x2d, 0x63, 0x01, 0x00, 0x01, 0x00, + 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x49, 0xd5, 0x00, 0x00, 0x0e, 0x00, + 0x00, 0xd9, 0xf4, 0x67, 0x01, 0x00, 0x02, 0x00, + 0x00, 0x62, 0x46, 0x7d, 0x01, 0x00, 0x01, 0x00, + 0x00, 0x62, 0x9c, 0x7c, 0x01, 0x00, 0x04, 0x00, + 0x00, 0xe2, 0x98, 0x7c, 0x01, 0x00, 0x3c, 0x00, + 0x64, 0x4f, 0x01, 0x00, 0x02, 0x00, 0x00, 0x62, + 0xa0, 0x7c, 0x01, 0x00, 0x06, 0x00, 0x00, 0x62, + 0x58, 0x7c, 0x01, 0x00, 0x02, 0x00, 0x00, 0x62, + 0x64, 0x7c, 0x01, 0x00, 0x06, 0x00, 0x00, 0x62, + 0x5a, 0x7c, 0x01, 0x00, 0x02, 0x00, 0x00, 0x62, + 0x6a, 0x7c, 0x01, 0x00, 0x06, 0x00, 0x00, 0x62, + 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, + 0xe4, 0x62, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0x3c, 0x00, 0xa0, 0x4f, 0x01, 0x00, 0xe8, 0x62, + 0x01, 0x00, 0x03, 0x00, 0x00, 0xe2, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, 0x01, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xdc, 0x4f, 0x01, 0x00, + 0x04, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x6a, 0x3c, 0x00, 0x18, 0x50, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x6a, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x6a, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x6a, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x6a, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x6a, 0xf0, 0x4e, 0x01, 0x00, 0x2a, 0x00, + 0x00, 0x0a, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x6a, 0x75, 0x2a, 0x01, 0x00, 0x3c, 0x00, + 0x54, 0x50, 0x01, 0x00, 0x0c, 0x00, 0x00, 0xdb, + 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, + 0x75, 0x2a, 0x01, 0x00, 0x0c, 0x00, 0x00, 0xdb, + 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, + 0x75, 0x2a, 0x01, 0x00, 0x0c, 0x00, 0x00, 0xdb, + 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, + 0x75, 0x2a, 0x01, 0x00, 0x0c, 0x00, 0x00, 0xdb, + 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, + 0x3c, 0x00, 0x90, 0x50, 0x01, 0x00, 0x75, 0x2a, + 0x01, 0x00, 0x0c, 0x00, 0x00, 0xdb, 0x06, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, 0x75, 0x2a, + 0x01, 0x00, 0x0c, 0x00, 0x00, 0xdb, 0x07, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, 0x75, 0x2a, + 0x01, 0x00, 0x0c, 0x00, 0x00, 0xdb, 0x08, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, 0x75, 0x2a, + 0x01, 0x00, 0x0c, 0x00, 0x00, 0xdb, 0x09, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xcc, 0x50, 0x01, 0x00, + 0x04, 0x00, 0x00, 0x6a, 0x75, 0x2a, 0x01, 0x00, + 0x0c, 0x00, 0x00, 0xdb, 0x0a, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x6a, 0x75, 0x2a, 0x01, 0x00, + 0x0c, 0x00, 0x00, 0xdb, 0x0b, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x6a, 0x75, 0x2a, 0x01, 0x00, + 0x0c, 0x00, 0x00, 0xdb, 0x0c, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x6a, 0x75, 0x2a, 0x01, 0x00, + 0x0c, 0x00, 0x00, 0xdb, 0x3c, 0x00, 0x08, 0x51, + 0x01, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x6a, 0x75, 0x2a, 0x01, 0x00, 0x0c, 0x00, + 0x00, 0xdb, 0x0e, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x6a, 0x75, 0x2a, 0x01, 0x00, 0x0c, 0x00, + 0x00, 0xdb, 0x48, 0x50, 0x01, 0x00, 0x02, 0x00, + 0x00, 0x0a, 0x58, 0x50, 0x01, 0x00, 0x02, 0x00, + 0x00, 0x0a, 0x68, 0x50, 0x01, 0x00, 0x02, 0x00, + 0x00, 0x0a, 0x78, 0x50, 0x01, 0x00, 0x3c, 0x00, + 0x44, 0x51, 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, + 0x88, 0x50, 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, + 0x98, 0x50, 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, + 0xa8, 0x50, 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, + 0xb8, 0x50, 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, + 0xc8, 0x50, 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, + 0xd8, 0x50, 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, + 0xe8, 0x50, 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, + 0x3c, 0x00, 0x80, 0x51, 0x01, 0x00, 0xf8, 0x50, + 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, 0x08, 0x51, + 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, 0x18, 0x51, + 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, 0x40, 0x50, + 0x01, 0x00, 0x01, 0x00, 0x00, 0x0a, 0xe8, 0x4e, + 0x01, 0x00, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x4e, + 0x01, 0x00, 0x3c, 0x00, 0xbc, 0x51, 0x01, 0x00, + 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x28, 0x51, 0x01, 0x00, + 0x0e, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xf8, 0x51, + 0x01, 0x00, 0x98, 0x51, 0x01, 0x00, 0x0c, 0x00, + 0x00, 0x0a, 0x50, 0x4e, 0x01, 0x00, 0x04, 0x00, + 0x00, 0x0a, 0xe0, 0x4c, 0x01, 0x00, 0x01, 0x00, + 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xc0, 0x4b, 0x01, 0x00, 0x1d, 0x00, + 0x00, 0x0a, 0xf8, 0x51, 0x01, 0x00, 0x05, 0x00, + 0x00, 0x0a, 0x24, 0x80, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x1d, 0x80, 0x07, 0x00, 0x3c, 0x00, + 0x34, 0x52, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x2a, 0x80, 0x07, 0x00, 0x5c, 0x00, 0x00, 0x00, + 0x24, 0x80, 0x07, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x1d, 0x80, 0x07, 0x00, 0x20, 0x00, 0x00, 0x00, + 0x2a, 0x80, 0x07, 0x00, 0x6a, 0x00, 0x00, 0x00, + 0x24, 0x80, 0x07, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x1d, 0x80, 0x07, 0x00, 0x20, 0x00, 0x00, 0x00, + 0x2a, 0x80, 0x07, 0x00, 0x6a, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x70, 0x52, 0x01, 0x00, 0x00, 0x01, + 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, + 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, + 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, + 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x01, 0x63, + 0x00, 0x00, 0xa1, 0x63, 0x00, 0x00, 0xc5, 0x63, + 0x00, 0x00, 0xb1, 0x62, 0x00, 0x00, 0xc5, 0x63, + 0x00, 0x00, 0x21, 0x63, 0x00, 0x00, 0x4d, 0x63, + 0x00, 0x00, 0x3c, 0x00, 0xac, 0x52, 0x01, 0x00, + 0xa1, 0x63, 0x00, 0x00, 0x01, 0x63, 0x00, 0x00, + 0xa1, 0x63, 0x00, 0x00, 0x06, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x03, 0x05, 0x06, 0x07, 0x08, 0x09, + 0x0a, 0x0a, 0x0c, 0x0d, 0x0e, 0x0f, 0x0f, 0x10, + 0x11, 0x00, 0x00, 0x00, 0xa5, 0xc6, 0x84, 0xf8, + 0x99, 0xee, 0x8d, 0xf6, 0x0d, 0xff, 0xbd, 0xd6, + 0xb1, 0xde, 0x54, 0x91, 0x3c, 0x00, 0xe8, 0x52, + 0x01, 0x00, 0x50, 0x60, 0x03, 0x02, 0xa9, 0xce, + 0x7d, 0x56, 0x19, 0xe7, 0x62, 0xb5, 0xe6, 0x4d, + 0x9a, 0xec, 0x45, 0x8f, 0x9d, 0x1f, 0x40, 0x89, + 0x87, 0xfa, 0x15, 0xef, 0xeb, 0xb2, 0xc9, 0x8e, + 0x0b, 0xfb, 0xec, 0x41, 0x67, 0xb3, 0xfd, 0x5f, + 0xea, 0x45, 0xbf, 0x23, 0xf7, 0x53, 0x96, 0xe4, + 0x5b, 0x9b, 0xc2, 0x75, 0x1c, 0xe1, 0xae, 0x3d, + 0x6a, 0x4c, 0x5a, 0x6c, 0x41, 0x7e, 0x3c, 0x00, + 0x24, 0x53, 0x01, 0x00, 0x02, 0xf5, 0x4f, 0x83, + 0x5c, 0x68, 0xf4, 0x51, 0x34, 0xd1, 0x08, 0xf9, + 0x93, 0xe2, 0x73, 0xab, 0x53, 0x62, 0x3f, 0x2a, + 0x0c, 0x08, 0x52, 0x95, 0x65, 0x46, 0x5e, 0x9d, + 0x28, 0x30, 0xa1, 0x37, 0x0f, 0x0a, 0xb5, 0x2f, + 0x09, 0x0e, 0x36, 0x24, 0x9b, 0x1b, 0x3d, 0xdf, + 0x26, 0xcd, 0x69, 0x4e, 0xcd, 0x7f, 0x9f, 0xea, + 0x1b, 0x12, 0x9e, 0x1d, 0x74, 0x58, 0x2e, 0x34, + 0x3c, 0x00, 0x60, 0x53, 0x01, 0x00, 0x2d, 0x36, + 0xb2, 0xdc, 0xee, 0xb4, 0xfb, 0x5b, 0xf6, 0xa4, + 0x4d, 0x76, 0x61, 0xb7, 0xce, 0x7d, 0x7b, 0x52, + 0x3e, 0xdd, 0x71, 0x5e, 0x97, 0x13, 0xf5, 0xa6, + 0x68, 0xb9, 0x00, 0x00, 0x2c, 0xc1, 0x60, 0x40, + 0x1f, 0xe3, 0xc8, 0x79, 0xed, 0xb6, 0xbe, 0xd4, + 0x46, 0x8d, 0xd9, 0x67, 0x4b, 0x72, 0xde, 0x94, + 0xd4, 0x98, 0xe8, 0xb0, 0x4a, 0x85, 0x6b, 0xbb, + 0x2a, 0xc5, 0x3c, 0x00, 0x9c, 0x53, 0x01, 0x00, + 0xe5, 0x4f, 0x16, 0xed, 0xc5, 0x86, 0xd7, 0x9a, + 0x55, 0x66, 0x94, 0x11, 0xcf, 0x8a, 0x10, 0xe9, + 0x06, 0x04, 0x81, 0xfe, 0xf0, 0xa0, 0x44, 0x78, + 0xba, 0x25, 0xe3, 0x4b, 0xf3, 0xa2, 0xfe, 0x5d, + 0xc0, 0x80, 0x8a, 0x05, 0xad, 0x3f, 0xbc, 0x21, + 0x48, 0x70, 0x04, 0xf1, 0xdf, 0x63, 0xc1, 0x77, + 0x75, 0xaf, 0x63, 0x42, 0x30, 0x20, 0x1a, 0xe5, + 0x0e, 0xfd, 0x6d, 0xbf, 0x3c, 0x00, 0xd8, 0x53, + 0x01, 0x00, 0x4c, 0x81, 0x14, 0x18, 0x35, 0x26, + 0x2f, 0xc3, 0xe1, 0xbe, 0xa2, 0x35, 0xcc, 0x88, + 0x39, 0x2e, 0x57, 0x93, 0xf2, 0x55, 0x82, 0xfc, + 0x47, 0x7a, 0xac, 0xc8, 0xe7, 0xba, 0x2b, 0x32, + 0x95, 0xe6, 0xa0, 0xc0, 0x98, 0x19, 0xd1, 0x9e, + 0x7f, 0xa3, 0x66, 0x44, 0x7e, 0x54, 0xab, 0x3b, + 0x83, 0x0b, 0xca, 0x8c, 0x29, 0xc7, 0xd3, 0x6b, + 0x3c, 0x28, 0x79, 0xa7, 0xe2, 0xbc, 0x3c, 0x00, + 0x14, 0x54, 0x01, 0x00, 0x1d, 0x16, 0x76, 0xad, + 0x3b, 0xdb, 0x56, 0x64, 0x4e, 0x74, 0x1e, 0x14, + 0xdb, 0x92, 0x0a, 0x0c, 0x6c, 0x48, 0xe4, 0xb8, + 0x5d, 0x9f, 0x6e, 0xbd, 0xef, 0x43, 0xa6, 0xc4, + 0xa8, 0x39, 0xa4, 0x31, 0x37, 0xd3, 0x8b, 0xf2, + 0x32, 0xd5, 0x43, 0x8b, 0x59, 0x6e, 0xb7, 0xda, + 0x8c, 0x01, 0x64, 0xb1, 0xd2, 0x9c, 0xe0, 0x49, + 0xb4, 0xd8, 0xfa, 0xac, 0x07, 0xf3, 0x25, 0xcf, + 0x3c, 0x00, 0x50, 0x54, 0x01, 0x00, 0xaf, 0xca, + 0x8e, 0xf4, 0xe9, 0x47, 0x18, 0x10, 0xd5, 0x6f, + 0x88, 0xf0, 0x6f, 0x4a, 0x72, 0x5c, 0x24, 0x38, + 0xf1, 0x57, 0xc7, 0x73, 0x51, 0x97, 0x23, 0xcb, + 0x7c, 0xa1, 0x9c, 0xe8, 0x21, 0x3e, 0xdd, 0x96, + 0xdc, 0x61, 0x86, 0x0d, 0x85, 0x0f, 0x90, 0xe0, + 0x42, 0x7c, 0xc4, 0x71, 0xaa, 0xcc, 0xd8, 0x90, + 0x05, 0x06, 0x01, 0xf7, 0x12, 0x1c, 0xa3, 0xc2, + 0x5f, 0x6a, 0x3c, 0x00, 0x8c, 0x54, 0x01, 0x00, + 0xf9, 0xae, 0xd0, 0x69, 0x91, 0x17, 0x58, 0x99, + 0x27, 0x3a, 0xb9, 0x27, 0x38, 0xd9, 0x13, 0xeb, + 0xb3, 0x2b, 0x33, 0x22, 0xbb, 0xd2, 0x70, 0xa9, + 0x89, 0x07, 0xa7, 0x33, 0xb6, 0x2d, 0x22, 0x3c, + 0x92, 0x15, 0x20, 0xc9, 0x49, 0x87, 0xff, 0xaa, + 0x78, 0x50, 0x7a, 0xa5, 0x8f, 0x03, 0xf8, 0x59, + 0x80, 0x09, 0x17, 0x1a, 0xda, 0x65, 0x31, 0xd7, + 0xc6, 0x84, 0xb8, 0xd0, 0x3c, 0x00, 0xc8, 0x54, + 0x01, 0x00, 0xc3, 0x82, 0xb0, 0x29, 0x77, 0x5a, + 0x11, 0x1e, 0xcb, 0x7b, 0xfc, 0xa8, 0xd6, 0x6d, + 0x3a, 0x2c, 0xc6, 0xa5, 0xf8, 0x84, 0xee, 0x99, + 0xf6, 0x8d, 0xff, 0x0d, 0xd6, 0xbd, 0xde, 0xb1, + 0x91, 0x54, 0x60, 0x50, 0x02, 0x03, 0xce, 0xa9, + 0x56, 0x7d, 0xe7, 0x19, 0xb5, 0x62, 0x4d, 0xe6, + 0xec, 0x9a, 0x8f, 0x45, 0x1f, 0x9d, 0x89, 0x40, + 0xfa, 0x87, 0xef, 0x15, 0xb2, 0xeb, 0x3c, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x8e, 0xc9, 0xfb, 0x0b, + 0x41, 0xec, 0xb3, 0x67, 0x5f, 0xfd, 0x45, 0xea, + 0x23, 0xbf, 0x53, 0xf7, 0xe4, 0x96, 0x9b, 0x5b, + 0x75, 0xc2, 0xe1, 0x1c, 0x3d, 0xae, 0x4c, 0x6a, + 0x6c, 0x5a, 0x7e, 0x41, 0xf5, 0x02, 0x83, 0x4f, + 0x68, 0x5c, 0x51, 0xf4, 0xd1, 0x34, 0xf9, 0x08, + 0xe2, 0x93, 0xab, 0x73, 0x62, 0x53, 0x2a, 0x3f, + 0x08, 0x0c, 0x95, 0x52, 0x46, 0x65, 0x9d, 0x5e, + 0x3c, 0x00, 0x40, 0x55, 0x01, 0x00, 0x30, 0x28, + 0x37, 0xa1, 0x0a, 0x0f, 0x2f, 0xb5, 0x0e, 0x09, + 0x24, 0x36, 0x1b, 0x9b, 0xdf, 0x3d, 0xcd, 0x26, + 0x4e, 0x69, 0x7f, 0xcd, 0xea, 0x9f, 0x12, 0x1b, + 0x1d, 0x9e, 0x58, 0x74, 0x34, 0x2e, 0x36, 0x2d, + 0xdc, 0xb2, 0xb4, 0xee, 0x5b, 0xfb, 0xa4, 0xf6, + 0x76, 0x4d, 0xb7, 0x61, 0x7d, 0xce, 0x52, 0x7b, + 0xdd, 0x3e, 0x5e, 0x71, 0x13, 0x97, 0xa6, 0xf5, + 0xb9, 0x68, 0x3c, 0x00, 0x7c, 0x55, 0x01, 0x00, + 0x00, 0x00, 0xc1, 0x2c, 0x40, 0x60, 0xe3, 0x1f, + 0x79, 0xc8, 0xb6, 0xed, 0xd4, 0xbe, 0x8d, 0x46, + 0x67, 0xd9, 0x72, 0x4b, 0x94, 0xde, 0x98, 0xd4, + 0xb0, 0xe8, 0x85, 0x4a, 0xbb, 0x6b, 0xc5, 0x2a, + 0x4f, 0xe5, 0xed, 0x16, 0x86, 0xc5, 0x9a, 0xd7, + 0x66, 0x55, 0x11, 0x94, 0x8a, 0xcf, 0xe9, 0x10, + 0x04, 0x06, 0xfe, 0x81, 0xa0, 0xf0, 0x78, 0x44, + 0x25, 0xba, 0x4b, 0xe3, 0x3c, 0x00, 0xb8, 0x55, + 0x01, 0x00, 0xa2, 0xf3, 0x5d, 0xfe, 0x80, 0xc0, + 0x05, 0x8a, 0x3f, 0xad, 0x21, 0xbc, 0x70, 0x48, + 0xf1, 0x04, 0x63, 0xdf, 0x77, 0xc1, 0xaf, 0x75, + 0x42, 0x63, 0x20, 0x30, 0xe5, 0x1a, 0xfd, 0x0e, + 0xbf, 0x6d, 0x81, 0x4c, 0x18, 0x14, 0x26, 0x35, + 0xc3, 0x2f, 0xbe, 0xe1, 0x35, 0xa2, 0x88, 0xcc, + 0x2e, 0x39, 0x93, 0x57, 0x55, 0xf2, 0xfc, 0x82, + 0x7a, 0x47, 0xc8, 0xac, 0xba, 0xe7, 0x3c, 0x00, + 0xf4, 0x55, 0x01, 0x00, 0x32, 0x2b, 0xe6, 0x95, + 0xc0, 0xa0, 0x19, 0x98, 0x9e, 0xd1, 0xa3, 0x7f, + 0x44, 0x66, 0x54, 0x7e, 0x3b, 0xab, 0x0b, 0x83, + 0x8c, 0xca, 0xc7, 0x29, 0x6b, 0xd3, 0x28, 0x3c, + 0xa7, 0x79, 0xbc, 0xe2, 0x16, 0x1d, 0xad, 0x76, + 0xdb, 0x3b, 0x64, 0x56, 0x74, 0x4e, 0x14, 0x1e, + 0x92, 0xdb, 0x0c, 0x0a, 0x48, 0x6c, 0xb8, 0xe4, + 0x9f, 0x5d, 0xbd, 0x6e, 0x43, 0xef, 0xc4, 0xa6, + 0x3c, 0x00, 0x30, 0x56, 0x01, 0x00, 0x39, 0xa8, + 0x31, 0xa4, 0xd3, 0x37, 0xf2, 0x8b, 0xd5, 0x32, + 0x8b, 0x43, 0x6e, 0x59, 0xda, 0xb7, 0x01, 0x8c, + 0xb1, 0x64, 0x9c, 0xd2, 0x49, 0xe0, 0xd8, 0xb4, + 0xac, 0xfa, 0xf3, 0x07, 0xcf, 0x25, 0xca, 0xaf, + 0xf4, 0x8e, 0x47, 0xe9, 0x10, 0x18, 0x6f, 0xd5, + 0xf0, 0x88, 0x4a, 0x6f, 0x5c, 0x72, 0x38, 0x24, + 0x57, 0xf1, 0x73, 0xc7, 0x97, 0x51, 0xcb, 0x23, + 0xa1, 0x7c, 0x3c, 0x00, 0x6c, 0x56, 0x01, 0x00, + 0xe8, 0x9c, 0x3e, 0x21, 0x96, 0xdd, 0x61, 0xdc, + 0x0d, 0x86, 0x0f, 0x85, 0xe0, 0x90, 0x7c, 0x42, + 0x71, 0xc4, 0xcc, 0xaa, 0x90, 0xd8, 0x06, 0x05, + 0xf7, 0x01, 0x1c, 0x12, 0xc2, 0xa3, 0x6a, 0x5f, + 0xae, 0xf9, 0x69, 0xd0, 0x17, 0x91, 0x99, 0x58, + 0x3a, 0x27, 0x27, 0xb9, 0xd9, 0x38, 0xeb, 0x13, + 0x2b, 0xb3, 0x22, 0x33, 0xd2, 0xbb, 0xa9, 0x70, + 0x07, 0x89, 0x33, 0xa7, 0x3c, 0x00, 0xa8, 0x56, + 0x01, 0x00, 0x2d, 0xb6, 0x3c, 0x22, 0x15, 0x92, + 0xc9, 0x20, 0x87, 0x49, 0xaa, 0xff, 0x50, 0x78, + 0xa5, 0x7a, 0x03, 0x8f, 0x59, 0xf8, 0x09, 0x80, + 0x1a, 0x17, 0x65, 0xda, 0xd7, 0x31, 0x84, 0xc6, + 0xd0, 0xb8, 0x82, 0xc3, 0x29, 0xb0, 0x5a, 0x77, + 0x1e, 0x11, 0x7b, 0xcb, 0xa8, 0xfc, 0x6d, 0xd6, + 0x2c, 0x3a, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xe4, 0x56, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x72, 0x65, 0x71, 0x45, 0x72, 0x72, 0x52, + 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x20, 0x57, 0x01, 0x00, 0xc4, 0x8e, + 0x01, 0x00, 0x24, 0x9a, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x24, 0x9a, + 0x01, 0x00, 0xa4, 0xb2, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0xa4, 0xb2, + 0x01, 0x00, 0x14, 0xc8, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x10, 0x20, + 0x30, 0x40, 0x50, 0xbb, 0x30, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x5c, 0x57, 0x01, 0x00, + 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e, 0x20, 0x22, + 0x24, 0x26, 0x28, 0x2a, 0x2b, 0x2c, 0x01, 0x00, + 0x70, 0x17, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0d, 0x25, 0x00, 0x00, 0x41, 0x3f, 0x01, 0x00, + 0x65, 0x29, 0x01, 0x00, 0x0d, 0x25, 0x00, 0x00, + 0xf5, 0x5e, 0x00, 0x00, 0x41, 0x3f, 0x01, 0x00, + 0x41, 0x3f, 0x01, 0x00, 0x02, 0x04, 0x0b, 0x0c, + 0x12, 0x16, 0x18, 0x24, 0x3c, 0x00, 0x98, 0x57, + 0x01, 0x00, 0x30, 0x48, 0x60, 0x6c, 0x01, 0x00, + 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x02, 0x10, 0x12, 0x11, 0x00, + 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xd4, 0x57, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xe0, 0x93, 0x04, 0x00, + 0x40, 0x42, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0xdf, 0x40, 0xcf, 0xfd, 0x00, 0x40, 0x83, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, + 0x3c, 0x00, 0x10, 0x58, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x40, 0x00, 0x80, 0x81, 0x00, 0x00, + 0x80, 0x00, 0xbf, 0xff, 0x7f, 0x7e, 0x01, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x78, 0x6f, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x6f, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x6f, + 0x01, 0x00, 0x3c, 0x00, 0x4c, 0x58, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x70, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x78, 0x70, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xb8, 0x70, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xf8, 0x70, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x71, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x78, 0x71, 0x01, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x90, 0x71, 0x01, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x3c, 0x00, 0x88, 0x58, + 0x01, 0x00, 0xa8, 0x71, 0x01, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x05, 0x0a, 0x01, 0x06, 0x0b, + 0x02, 0x07, 0x0c, 0x03, 0x08, 0x0d, 0x04, 0x09, + 0x00, 0x00, 0x03, 0x03, 0x01, 0x01, 0x00, 0x04, + 0x00, 0x04, 0x04, 0x06, 0x16, 0x1e, 0x1f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, + 0xff, 0xff, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, + 0xc4, 0x58, 0x01, 0x00, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, + 0x61, 0x8b, 0x4a, 0x00, 0x61, 0x8f, 0x4a, 0x00, + 0x61, 0x8b, 0x4a, 0x00, 0x05, 0xe3, 0xc0, 0x00, + 0x05, 0xcb, 0xc0, 0x00, 0x05, 0xbb, 0xc0, 0x00, + 0x85, 0xba, 0xc0, 0x00, 0x85, 0xa2, 0xc0, 0x00, + 0x85, 0x92, 0xc0, 0x00, 0x85, 0x8a, 0xc0, 0x00, + 0x85, 0x7a, 0xc0, 0x00, 0x45, 0x89, 0xc0, 0x00, + 0x3c, 0x00, 0x00, 0x59, 0x01, 0x00, 0x45, 0x71, + 0xc0, 0x00, 0x45, 0x69, 0xc0, 0x00, 0x45, 0x61, + 0xc0, 0x00, 0x45, 0x59, 0xc0, 0x00, 0x45, 0x51, + 0xc0, 0x00, 0x45, 0x49, 0xc0, 0x00, 0x45, 0x41, + 0xc0, 0x00, 0x45, 0x39, 0xc0, 0x00, 0x45, 0x31, + 0xc0, 0x00, 0x45, 0x29, 0xc0, 0x00, 0x45, 0x21, + 0xc0, 0x00, 0x60, 0x2d, 0x06, 0x00, 0x60, 0x2d, + 0x06, 0x00, 0x60, 0x2d, 0x06, 0x00, 0x60, 0x2d, + 0x06, 0x00, 0x3c, 0x00, 0x3c, 0x59, 0x01, 0x00, + 0x60, 0x2d, 0x06, 0x00, 0x60, 0x28, 0x06, 0x00, + 0x50, 0x26, 0x06, 0x00, 0x50, 0x21, 0x06, 0x00, + 0x50, 0x1f, 0x06, 0x00, 0x50, 0x1c, 0x06, 0x00, + 0x50, 0x1a, 0x06, 0x00, 0x50, 0x18, 0x06, 0x00, + 0x50, 0x16, 0x06, 0x00, 0x50, 0x14, 0x06, 0x00, + 0x50, 0x12, 0x06, 0x00, 0x50, 0x10, 0x06, 0x00, + 0x50, 0x0e, 0x06, 0x00, 0x50, 0x0c, 0x06, 0x00, + 0x50, 0x0a, 0x06, 0x00, 0x3c, 0x00, 0x78, 0x59, + 0x01, 0x00, 0x2b, 0x0b, 0x06, 0x00, 0x1d, 0x75, + 0xc0, 0x00, 0x1d, 0x75, 0xc0, 0x00, 0x1d, 0x75, + 0xc0, 0x00, 0x1d, 0x75, 0xc0, 0x00, 0x1d, 0x75, + 0xc0, 0x00, 0x1d, 0x75, 0xc0, 0x00, 0x1d, 0x6d, + 0xc0, 0x00, 0xdd, 0x5b, 0xc0, 0x00, 0xdd, 0x4b, + 0xc0, 0x00, 0xdd, 0x43, 0xc0, 0x00, 0xdd, 0x3b, + 0xc0, 0x00, 0xdd, 0x33, 0xc0, 0x00, 0xdd, 0x2b, + 0xc0, 0x00, 0xdd, 0x23, 0xc0, 0x00, 0x3c, 0x00, + 0xb4, 0x59, 0x01, 0x00, 0xdd, 0x1b, 0xc0, 0x00, + 0xdd, 0x13, 0xc0, 0x00, 0xdd, 0x13, 0xc0, 0x00, + 0xdd, 0x13, 0xc0, 0x00, 0xdd, 0x13, 0xc0, 0x00, + 0xdd, 0x13, 0xc0, 0x00, 0x05, 0x05, 0x05, 0x04, + 0x04, 0x03, 0x03, 0x02, 0x02, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x05, 0x05, 0x05, 0x04, 0x04, 0x03, + 0x03, 0x02, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x88, 0x13, 0x00, 0x00, + 0x3c, 0x00, 0xf0, 0x59, 0x01, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x80, 0x00, 0x5b, 0x00, 0x40, 0x02, + 0xe0, 0xfd, 0xf2, 0x00, 0xb8, 0xfc, 0xa4, 0x01, + 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0f, 0x00, + 0x00, 0x00, 0x03, 0x0b, 0x9f, 0x5f, 0x07, 0x01, + 0x2a, 0x04, 0x21, 0x04, 0x17, 0x04, 0x0e, 0x04, + 0x04, 0x04, 0xfb, 0x03, 0xf1, 0x03, 0xe8, 0x03, + 0xc9, 0x03, 0xaa, 0x03, 0x8a, 0x03, 0x6b, 0x03, + 0x4c, 0x03, 0x3c, 0x00, 0x2c, 0x5a, 0x01, 0x00, + 0x2d, 0x03, 0x0e, 0x03, 0xee, 0x02, 0xec, 0x02, + 0x01, 0x03, 0x16, 0x03, 0x2b, 0x03, 0x40, 0x03, + 0x55, 0x03, 0x6a, 0x03, 0x7f, 0x03, 0x94, 0x03, + 0xa9, 0x03, 0xbe, 0x03, 0xd3, 0x03, 0xe8, 0x03, + 0xbe, 0x03, 0x94, 0x03, 0x6a, 0x03, 0x00, 0x02, + 0x04, 0x06, 0x07, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x00, 0x03, 0x3c, 0x00, 0x68, 0x5a, + 0x01, 0x00, 0x05, 0x08, 0x0b, 0x0e, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xa4, 0x5a, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xe0, 0x5a, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x1c, 0x5b, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x58, 0x5b, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x94, 0x5b, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xd0, 0x5b, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x0c, 0x5c, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x48, 0x5c, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x84, 0x5c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xc0, 0x5c, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xfc, 0x5c, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x38, 0x5d, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x74, 0x5d, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xb0, 0x5d, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xec, 0x5d, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x28, 0x5e, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x64, 0x5e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xa0, 0x5e, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xdc, 0x5e, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x18, 0x5f, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x54, 0x5f, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x90, 0x5f, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xcc, 0x5f, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x08, 0x60, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x44, 0x60, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x80, 0x60, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xbc, 0x60, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xf8, 0x60, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x34, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x70, 0x61, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xac, 0x61, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xe8, 0x61, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x24, 0x62, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x60, 0x62, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x9c, 0x62, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xd8, 0x62, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x14, 0x63, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x50, 0x63, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x8c, 0x63, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xc8, 0x63, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0x64, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x7c, 0x64, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xb8, 0x64, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xf4, 0x64, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x30, 0x65, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x6c, 0x65, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xa8, 0x65, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xe4, 0x65, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x20, 0x66, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x5c, 0x66, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x98, 0x66, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xd4, 0x66, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x10, 0x67, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x4c, 0x67, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x88, 0x67, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xc4, 0x67, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0x68, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x68, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x78, 0x68, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xb4, 0x68, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xf0, 0x68, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x2c, 0x69, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x68, 0x69, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xa4, 0x69, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xe0, 0x69, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x1c, 0x6a, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x58, 0x6a, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x94, 0x6a, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xd0, 0x6a, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x0c, 0x6b, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x48, 0x6b, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x84, 0x6b, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xc0, 0x6b, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xfc, 0x6b, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x38, 0x6c, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x74, 0x6c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xb0, 0x6c, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xec, 0x6c, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x28, 0x6d, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x64, 0x6d, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xa0, 0x6d, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xdc, 0x6d, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x18, 0x6e, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x54, 0x6e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x90, 0x6e, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xcc, 0x6e, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x08, 0x6f, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x44, 0x6f, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x80, 0x6f, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xbc, 0x6f, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xf8, 0x6f, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x34, 0x70, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x70, 0x70, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xac, 0x70, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xe8, 0x70, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x24, 0x71, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x60, 0x71, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x9c, 0x71, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xd8, 0x71, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x14, 0x72, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x50, 0x72, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x8c, 0x72, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xc8, 0x72, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0x73, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x7c, 0x73, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xb8, 0x73, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xf4, 0x73, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x30, 0x74, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x6c, 0x74, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xa8, 0x74, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xe4, 0x74, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x20, 0x75, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x5c, 0x75, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x98, 0x75, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xd4, 0x75, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x10, 0x76, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x4c, 0x76, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x88, 0x76, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xc4, 0x76, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0x77, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x77, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x78, 0x77, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xb4, 0x77, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xf0, 0x77, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x2c, 0x78, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x68, 0x78, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xa4, 0x78, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xe0, 0x78, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x1c, 0x79, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x58, 0x79, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x94, 0x79, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xd0, 0x79, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x0c, 0x7a, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x48, 0x7a, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x84, 0x7a, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xc0, 0x7a, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xfc, 0x7a, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x38, 0x7b, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x74, 0x7b, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xb0, 0x7b, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xec, 0x7b, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x28, 0x7c, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x64, 0x7c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xa0, 0x7c, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xdc, 0x7c, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x18, 0x7d, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x54, 0x7d, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x90, 0x7d, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xcc, 0x7d, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x08, 0x7e, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x44, 0x7e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x80, 0x7e, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xbc, 0x7e, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xf8, 0x7e, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x34, 0x7f, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x70, 0x7f, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xac, 0x7f, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xe8, 0x7f, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x70, 0xb5, 0x01, 0x25, 0x07, 0x4e, + 0xad, 0x03, 0x75, 0x61, 0x0a, 0x20, 0xfa, 0xf7, + 0x6c, 0xff, 0x30, 0x68, 0x80, 0x03, 0xc4, 0x0f, + 0xb5, 0x61, 0x0a, 0x20, 0xfa, 0xf7, 0x65, 0xff, + 0x20, 0x1c, 0x70, 0xbd, 0x00, 0x00, 0x3c, 0x00, + 0x24, 0x80, 0x01, 0x00, 0x10, 0x00, 0x07, 0x00, + 0x70, 0xb5, 0x01, 0x25, 0x6d, 0x04, 0x00, 0x28, + 0x10, 0x4c, 0x01, 0xd0, 0x65, 0x61, 0x00, 0xe0, + 0xa5, 0x61, 0x60, 0x68, 0x28, 0x43, 0x60, 0x60, + 0xa0, 0x68, 0x28, 0x43, 0xa0, 0x60, 0x0a, 0x20, + 0xfa, 0xf7, 0x4e, 0xff, 0x01, 0x26, 0xb6, 0x03, + 0x66, 0x61, 0x0a, 0x20, 0xfa, 0xf7, 0x48, 0xff, + 0xa6, 0x61, 0x01, 0x20, 0xfa, 0xf7, 0x44, 0xff, + 0x3c, 0x00, 0x60, 0x80, 0x01, 0x00, 0xa0, 0x68, + 0xa8, 0x43, 0xa0, 0x60, 0x60, 0x68, 0x28, 0x43, + 0x60, 0x60, 0x0a, 0x20, 0xfa, 0xf7, 0x3b, 0xff, + 0x70, 0xbd, 0x10, 0x00, 0x07, 0x00, 0x70, 0xb5, + 0x01, 0x25, 0x10, 0x4c, 0x6d, 0x04, 0x65, 0x61, + 0x60, 0x68, 0x28, 0x43, 0x60, 0x60, 0xa0, 0x68, + 0x28, 0x43, 0xa0, 0x60, 0xee, 0x08, 0xa6, 0x61, + 0x0a, 0x20, 0xfa, 0xf7, 0x28, 0xff, 0x66, 0x61, + 0x0a, 0x20, 0x3c, 0x00, 0x9c, 0x80, 0x01, 0x00, + 0xfa, 0xf7, 0x24, 0xff, 0xa5, 0x61, 0x0a, 0x20, + 0xfa, 0xf7, 0x20, 0xff, 0xa6, 0x61, 0x0a, 0x20, + 0xfa, 0xf7, 0x1c, 0xff, 0xa0, 0x68, 0xa8, 0x43, + 0xa0, 0x60, 0x60, 0x68, 0x28, 0x43, 0x60, 0x60, + 0x70, 0xbd, 0x00, 0x00, 0x10, 0x00, 0x07, 0x00, + 0x70, 0xb5, 0x01, 0x25, 0x0e, 0x4c, 0x6d, 0x04, + 0xa5, 0x61, 0x60, 0x68, 0x28, 0x43, 0x60, 0x60, + 0xa0, 0x68, 0x28, 0x43, 0x3c, 0x00, 0xd8, 0x80, + 0x01, 0x00, 0xa0, 0x60, 0xee, 0x08, 0x66, 0x61, + 0x0a, 0x20, 0xfa, 0xf7, 0x02, 0xff, 0x65, 0x61, + 0x0a, 0x20, 0xfa, 0xf7, 0xfe, 0xfe, 0xa6, 0x61, + 0x0a, 0x20, 0xfa, 0xf7, 0xfa, 0xfe, 0xa0, 0x68, + 0xa8, 0x43, 0xa0, 0x60, 0x60, 0x68, 0x28, 0x43, + 0x60, 0x60, 0x70, 0xbd, 0x00, 0x00, 0x10, 0x00, + 0x07, 0x00, 0x70, 0xb5, 0x05, 0x1c, 0x00, 0x24, + 0x80, 0x26, 0x28, 0x1c, 0x30, 0x40, 0x3c, 0x00, + 0x14, 0x81, 0x01, 0x00, 0xff, 0xf7, 0x88, 0xff, + 0x68, 0x06, 0x05, 0x0e, 0x01, 0x34, 0x08, 0x2c, + 0xf6, 0xdb, 0xff, 0xf7, 0x6d, 0xff, 0x70, 0xbd, + 0x80, 0xb5, 0x02, 0x1c, 0x0b, 0x21, 0x80, 0x20, + 0xfb, 0xf7, 0x3e, 0xfb, 0x80, 0xbd, 0x00, 0x00, + 0xf8, 0xb5, 0x12, 0x48, 0x00, 0x25, 0x07, 0x1c, + 0xff, 0x37, 0x06, 0x1d, 0x01, 0x37, 0x28, 0x1c, + 0xf9, 0xf7, 0xea, 0xfd, 0x04, 0x1c, 0x17, 0xd0, + 0x3c, 0x00, 0x50, 0x81, 0x01, 0x00, 0x20, 0x69, + 0x00, 0x28, 0x04, 0xd0, 0xe0, 0x6a, 0x00, 0x28, + 0x03, 0xd0, 0x00, 0x20, 0xe0, 0x62, 0x25, 0x1c, + 0xf0, 0xe7, 0x7b, 0x68, 0x00, 0x2b, 0x05, 0xd0, + 0x32, 0x1c, 0x21, 0x1c, 0x44, 0x31, 0x01, 0x20, + 0xe8, 0xf7, 0x34, 0xf9, 0x20, 0x1c, 0x44, 0x30, + 0xf9, 0xf7, 0x37, 0xfe, 0xe2, 0xe7, 0xf8, 0xbd, + 0x00, 0x00, 0x20, 0xf7, 0x01, 0x00, 0x11, 0x48, + 0x70, 0xb5, 0x3c, 0x00, 0x8c, 0x81, 0x01, 0x00, + 0x00, 0x68, 0xff, 0x28, 0x1d, 0xd1, 0xff, 0x20, + 0x32, 0x30, 0xfa, 0xf7, 0xa7, 0xfe, 0x0e, 0x4d, + 0x6c, 0x68, 0x0e, 0x48, 0xfa, 0xf7, 0xa2, 0xfe, + 0x68, 0x68, 0x24, 0x1a, 0x01, 0x20, 0x00, 0xf0, + 0x95, 0xfd, 0x6e, 0x68, 0x09, 0x48, 0xfa, 0xf7, + 0x99, 0xfe, 0x68, 0x68, 0x21, 0x1c, 0x0a, 0x39, + 0x30, 0x1a, 0x88, 0x42, 0x02, 0xd3, 0x0a, 0x34, + 0xa0, 0x42, 0x02, 0xd9, 0x3c, 0x00, 0xc8, 0x81, + 0x01, 0x00, 0x00, 0x20, 0x00, 0xf0, 0x85, 0xfd, + 0x70, 0xbd, 0xf4, 0x74, 0x01, 0x00, 0x00, 0x03, + 0x07, 0x00, 0x93, 0x03, 0x00, 0x00, 0x70, 0xb5, + 0x00, 0xf0, 0x4d, 0xf8, 0x01, 0x20, 0xed, 0xf7, + 0x34, 0xf9, 0x11, 0x4d, 0x18, 0x21, 0x68, 0x60, + 0x00, 0x20, 0xe9, 0xf7, 0xf2, 0xf9, 0x28, 0x60, + 0x04, 0x68, 0x80, 0x20, 0x20, 0x80, 0x00, 0x26, + 0x06, 0x22, 0xff, 0x21, 0x20, 0x1d, 0x3c, 0x00, + 0x04, 0x82, 0x01, 0x00, 0x66, 0x80, 0xe8, 0xf7, + 0x0b, 0xfa, 0x20, 0x1c, 0x0a, 0x30, 0x09, 0x49, + 0xf2, 0xf7, 0x2e, 0xfd, 0x20, 0x1c, 0x10, 0x30, + 0x07, 0x49, 0xf2, 0xf7, 0x29, 0xfd, 0xe6, 0x82, + 0x03, 0xcd, 0xe9, 0xf7, 0xf9, 0xf8, 0x02, 0x49, + 0x01, 0x20, 0x14, 0x39, 0x88, 0x60, 0x70, 0xbd, + 0x90, 0xd9, 0x01, 0x00, 0x12, 0x61, 0x01, 0x00, + 0x24, 0xf7, 0x01, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0x82, 0x01, 0x00, 0x10, 0xb5, + 0x06, 0x4c, 0x00, 0x22, 0x02, 0x20, 0xe1, 0x68, + 0xf0, 0xf7, 0x11, 0xfb, 0x60, 0x78, 0x02, 0x28, + 0x01, 0xd1, 0x00, 0xf0, 0x1a, 0xf9, 0x10, 0xbd, + 0x00, 0x00, 0x40, 0xd9, 0x01, 0x00, 0x80, 0xb5, + 0xa1, 0x20, 0xff, 0xf7, 0x50, 0xff, 0x80, 0xbd, + 0x00, 0x00, 0x40, 0x00, 0x0e, 0x21, 0x08, 0x40, + 0x80, 0xb5, 0xa0, 0x30, 0xff, 0xf7, 0x47, 0xff, + 0x80, 0xbd, 0x3c, 0x00, 0x7c, 0x82, 0x01, 0x00, + 0x10, 0xb5, 0x05, 0x4c, 0x20, 0x68, 0x00, 0x28, + 0x04, 0xd0, 0xe9, 0xf7, 0x87, 0xf9, 0x00, 0x20, + 0x20, 0x60, 0x60, 0x60, 0x10, 0xbd, 0x00, 0x00, + 0x90, 0xd9, 0x01, 0x00, 0x10, 0xb5, 0x07, 0x4c, + 0x01, 0x21, 0x07, 0x4a, 0x21, 0x61, 0x02, 0x20, + 0x10, 0x70, 0x61, 0x61, 0x00, 0xf0, 0xd6, 0xfc, + 0x00, 0xf0, 0xc8, 0xfb, 0x20, 0x1c, 0xed, 0xf7, + 0x9f, 0xfa, 0x10, 0xbd, 0x3c, 0x00, 0xb8, 0x82, + 0x01, 0x00, 0x20, 0xf7, 0x01, 0x00, 0x7c, 0xd9, + 0x01, 0x00, 0x70, 0xb5, 0x02, 0x1c, 0x08, 0x1c, + 0x02, 0x25, 0x00, 0x2a, 0x13, 0x4e, 0x14, 0xd0, + 0x00, 0xf0, 0x11, 0xfc, 0x30, 0x78, 0x01, 0x21, + 0x08, 0x43, 0x30, 0x70, 0x30, 0x78, 0x28, 0x43, + 0x30, 0x70, 0x00, 0x20, 0x7d, 0x21, 0x49, 0x01, + 0xb2, 0x79, 0x92, 0x07, 0x00, 0xd5, 0x01, 0x34, + 0x01, 0x30, 0x88, 0x42, 0xf8, 0xdb, 0x3c, 0x00, + 0xf4, 0x82, 0x01, 0x00, 0x20, 0x1c, 0x70, 0xbd, + 0x30, 0x78, 0xa8, 0x43, 0x30, 0x70, 0x30, 0x78, + 0x40, 0x08, 0x40, 0x00, 0x30, 0x70, 0x05, 0x49, + 0x48, 0x68, 0x01, 0x22, 0x12, 0x04, 0x90, 0x43, + 0x48, 0x60, 0x01, 0x20, 0x70, 0xbd, 0x00, 0x00, + 0x88, 0x00, 0x07, 0x00, 0x6c, 0x00, 0x07, 0x00, + 0xff, 0xb5, 0x09, 0xae, 0x00, 0x20, 0x60, 0xce, + 0x28, 0x60, 0x00, 0x23, 0x9c, 0x46, 0x30, 0x60, + 0x3c, 0x00, 0x30, 0x83, 0x01, 0x00, 0x69, 0x46, + 0x01, 0xaa, 0x17, 0xe0, 0xdb, 0x07, 0x0e, 0xd5, + 0x12, 0x4b, 0x1c, 0x56, 0x63, 0x1c, 0x0a, 0xd0, + 0x01, 0x27, 0x2b, 0x68, 0xa7, 0x40, 0x3b, 0x43, + 0x2b, 0x60, 0x13, 0x68, 0xdb, 0x07, 0x02, 0xd5, + 0x33, 0x68, 0x3b, 0x43, 0x33, 0x60, 0x0b, 0x68, + 0x5b, 0x08, 0x0b, 0x60, 0x13, 0x68, 0x5b, 0x08, + 0x13, 0x60, 0x01, 0x30, 0x0b, 0x68, 0x00, 0x2b, + 0x01, 0xd0, 0x3c, 0x00, 0x6c, 0x83, 0x01, 0x00, + 0x22, 0x28, 0xe2, 0xd3, 0x63, 0x46, 0x01, 0x33, + 0x20, 0x20, 0x02, 0x2b, 0x9c, 0x46, 0x02, 0xa9, + 0x03, 0xaa, 0xf2, 0xdb, 0xff, 0xbd, 0x00, 0x00, + 0xb4, 0x8d, 0x01, 0x00, 0xb0, 0xb5, 0x04, 0x1c, + 0x0d, 0x1c, 0x1e, 0x21, 0x00, 0x22, 0x03, 0x20, + 0x05, 0x4b, 0xf9, 0xf7, 0xb3, 0xf8, 0x21, 0x1c, + 0x03, 0x20, 0xf9, 0xf7, 0xf5, 0xf8, 0x29, 0x1c, + 0x03, 0x20, 0xf9, 0xf7, 0x3c, 0x00, 0xa8, 0x83, + 0x01, 0x00, 0xf1, 0xf8, 0xb0, 0xbd, 0x80, 0x38, + 0x01, 0x00, 0xb0, 0xb5, 0x1c, 0x4c, 0x1c, 0x4d, + 0x21, 0x78, 0x02, 0x29, 0x09, 0xd0, 0x03, 0x29, + 0x19, 0xd0, 0x04, 0x29, 0x1f, 0xd0, 0x05, 0x29, + 0x23, 0xd1, 0x00, 0x20, 0x00, 0xf0, 0x17, 0xfb, + 0x23, 0xe0, 0x68, 0x61, 0x14, 0x48, 0x1c, 0x30, + 0xc1, 0x68, 0x02, 0x69, 0x89, 0x18, 0xc1, 0x60, + 0x00, 0xf0, 0x2f, 0xfb, 0xe0, 0x68, 0x3c, 0x00, + 0xe4, 0x83, 0x01, 0x00, 0x01, 0x38, 0xe0, 0x60, + 0x16, 0xd1, 0x32, 0x20, 0xe0, 0x60, 0xff, 0xf7, + 0xa3, 0xfe, 0x11, 0xe0, 0x00, 0x20, 0x00, 0xf0, + 0x01, 0xfb, 0x00, 0xf0, 0x2d, 0xfc, 0x01, 0x20, + 0x20, 0x70, 0x09, 0xe0, 0x00, 0x20, 0x00, 0xf0, + 0xf9, 0xfa, 0xff, 0xf7, 0x45, 0xff, 0x03, 0xe0, + 0x05, 0x21, 0x0b, 0x20, 0xe8, 0xf7, 0x46, 0xff, + 0x68, 0x69, 0x61, 0x68, 0xe7, 0xf7, 0xdd, 0xff, + 0x3c, 0x00, 0x20, 0x84, 0x01, 0x00, 0xb0, 0xbd, + 0x00, 0x00, 0x7c, 0xd9, 0x01, 0x00, 0x20, 0xf7, + 0x01, 0x00, 0xf7, 0xb5, 0x04, 0x1c, 0x17, 0x1c, + 0xff, 0xf7, 0x21, 0xfe, 0x20, 0x0a, 0xff, 0xf7, + 0x18, 0xff, 0x20, 0x06, 0x00, 0x0e, 0xff, 0xf7, + 0x62, 0xfe, 0xff, 0xf7, 0x18, 0xfe, 0xa1, 0x20, + 0xff, 0xf7, 0x5d, 0xfe, 0x00, 0x25, 0x16, 0xe0, + 0x00, 0x20, 0x00, 0x24, 0x40, 0x06, 0x06, 0x0e, + 0xff, 0xf7, 0x3c, 0x00, 0x5c, 0x84, 0x01, 0x00, + 0xd1, 0xfd, 0x00, 0x06, 0x00, 0x0e, 0x30, 0x43, + 0x01, 0x34, 0x08, 0x2c, 0xf5, 0xdb, 0x29, 0x1c, + 0x01, 0x9a, 0x01, 0x35, 0xbd, 0x42, 0x50, 0x54, + 0x01, 0xda, 0x00, 0x20, 0x00, 0xe0, 0x01, 0x20, + 0xff, 0xf7, 0xd4, 0xfd, 0xbd, 0x42, 0xe6, 0xdb, + 0xff, 0xf7, 0x1e, 0xfe, 0xfe, 0xbd, 0x00, 0x00, + 0x80, 0xb5, 0xff, 0xf7, 0x19, 0xfe, 0x09, 0x21, + 0x89, 0x03, 0x00, 0x22, 0x3c, 0x00, 0x98, 0x84, + 0x01, 0x00, 0x02, 0x20, 0xf0, 0xf7, 0xe9, 0xf9, + 0x80, 0xbd, 0x09, 0x21, 0x89, 0x03, 0x80, 0xb5, + 0x00, 0x22, 0x02, 0x20, 0xf0, 0xf7, 0xc9, 0xf9, + 0x01, 0x21, 0x09, 0x48, 0x89, 0x03, 0x81, 0x61, + 0x42, 0x68, 0x0a, 0x43, 0x42, 0x60, 0x82, 0x68, + 0x11, 0x43, 0x81, 0x60, 0x01, 0x21, 0x49, 0x04, + 0x81, 0x61, 0x82, 0x68, 0x8a, 0x43, 0x82, 0x60, + 0x42, 0x68, 0x11, 0x43, 0x41, 0x60, 0x3c, 0x00, + 0xd4, 0x84, 0x01, 0x00, 0x80, 0xbd, 0x00, 0x00, + 0x10, 0x00, 0x07, 0x00, 0xf0, 0xb5, 0x04, 0x1c, + 0xc0, 0x68, 0x7b, 0x4e, 0x05, 0x68, 0x30, 0x78, + 0x85, 0xb0, 0x01, 0x28, 0x01, 0xd0, 0x02, 0x28, + 0x72, 0xd1, 0x00, 0x21, 0x20, 0x69, 0xf2, 0xf7, + 0x41, 0xf9, 0x76, 0x49, 0xf2, 0xf7, 0x24, 0xfc, + 0x00, 0x28, 0x69, 0xd0, 0x20, 0x1c, 0x20, 0x30, + 0x41, 0x7a, 0x08, 0x29, 0x02, 0xd1, 0x72, 0x4a, + 0x3c, 0x00, 0x10, 0x85, 0x01, 0x00, 0x00, 0x21, + 0x51, 0x61, 0x00, 0x7a, 0x22, 0x6a, 0x18, 0x21, + 0xf2, 0xf7, 0xc9, 0xfb, 0xe1, 0x6a, 0x37, 0x1c, + 0x40, 0x18, 0x6c, 0x49, 0x02, 0x90, 0x30, 0x78, + 0x0e, 0x1c, 0xff, 0x36, 0x0a, 0x1d, 0x01, 0x36, + 0x01, 0x28, 0x04, 0x92, 0x07, 0xd0, 0x65, 0x4a, + 0x02, 0x99, 0x1c, 0x32, 0x28, 0x1c, 0xed, 0xf7, + 0xe2, 0xfb, 0x00, 0x28, 0x6b, 0xd0, 0x32, 0x21, + 0x20, 0x69, 0x3c, 0x00, 0x4c, 0x85, 0x01, 0x00, + 0xf2, 0xf7, 0x16, 0xf9, 0x01, 0x90, 0x20, 0x69, + 0x01, 0x21, 0xf2, 0xf7, 0x11, 0xf9, 0x01, 0x1c, + 0x5e, 0x48, 0x01, 0x23, 0x01, 0x9a, 0xed, 0xf7, + 0x07, 0xfc, 0x00, 0x28, 0x04, 0xd1, 0x5b, 0x48, + 0xed, 0xf7, 0x92, 0xfa, 0x00, 0x21, 0xb9, 0x60, + 0x56, 0x48, 0x1c, 0x30, 0x81, 0x68, 0xea, 0xf7, + 0x19, 0xfc, 0x20, 0x1c, 0x14, 0x30, 0x03, 0x90, + 0x04, 0x99, 0xf2, 0xf7, 0x3c, 0x00, 0x88, 0x85, + 0x01, 0x00, 0xd5, 0xfb, 0x00, 0x28, 0x05, 0xd1, + 0x00, 0x22, 0xba, 0x60, 0x04, 0x98, 0x03, 0x99, + 0xf2, 0xf7, 0x6b, 0xfb, 0x4f, 0x49, 0x28, 0x89, + 0x09, 0x88, 0x88, 0x42, 0x03, 0xd0, 0x00, 0x22, + 0x4c, 0x49, 0xba, 0x60, 0x08, 0x80, 0x03, 0x21, + 0x20, 0x69, 0xf2, 0xf7, 0xe4, 0xf8, 0x00, 0x28, + 0x10, 0xd0, 0x46, 0x49, 0x82, 0x78, 0x20, 0x31, + 0x0b, 0x79, 0x94, 0x46, 0x9a, 0x42, 0x3c, 0x00, + 0xc4, 0x85, 0x01, 0x00, 0x09, 0xd0, 0x00, 0x22, + 0xba, 0x60, 0x62, 0x46, 0x0a, 0x71, 0x80, 0x78, + 0x01, 0x21, 0xf3, 0xf7, 0x05, 0xf9, 0x00, 0xe0, + 0x77, 0xe0, 0x06, 0x21, 0x20, 0x69, 0xf2, 0xf7, + 0xcd, 0xf8, 0x00, 0x28, 0x08, 0xd0, 0x81, 0x78, + 0x3a, 0x48, 0x40, 0x30, 0x82, 0x88, 0x91, 0x42, + 0x02, 0xd0, 0x00, 0x22, 0xba, 0x60, 0x81, 0x80, + 0x2a, 0x21, 0x20, 0x69, 0xf2, 0xf7, 0xbe, 0xf8, + 0x3c, 0x00, 0x00, 0x86, 0x01, 0x00, 0x00, 0x28, + 0x0d, 0xd0, 0x80, 0x78, 0xf1, 0x69, 0x33, 0x4a, + 0x81, 0x42, 0x08, 0xd0, 0x00, 0x21, 0xb9, 0x60, + 0xf0, 0x61, 0x10, 0x1c, 0xed, 0xf7, 0x09, 0xfb, + 0x2f, 0x48, 0xed, 0xf7, 0xfa, 0xfa, 0x38, 0x78, + 0x3b, 0x1c, 0x01, 0x28, 0x17, 0xd1, 0x02, 0x20, + 0x18, 0x70, 0x2a, 0x4f, 0x01, 0x23, 0x3b, 0x61, + 0x27, 0x4b, 0x03, 0xcd, 0x1c, 0x33, 0x08, 0x3d, + 0x02, 0x9a, 0x3c, 0x00, 0x3c, 0x86, 0x01, 0x00, + 0xed, 0xf7, 0xb0, 0xfa, 0x38, 0x1c, 0xed, 0xf7, + 0xd7, 0xf8, 0x32, 0x68, 0x00, 0x2a, 0x03, 0xd0, + 0x00, 0x21, 0x01, 0x20, 0xe7, 0xf7, 0xc4, 0xfe, + 0x00, 0xf0, 0xf4, 0xf9, 0x20, 0x1c, 0xf9, 0xf7, + 0xd5, 0xfb, 0x07, 0x1c, 0x11, 0xd1, 0x20, 0x1c, + 0xf9, 0xf7, 0x88, 0xfb, 0x07, 0x1c, 0x2e, 0xd0, + 0x01, 0x23, 0x3b, 0x61, 0x68, 0x89, 0x40, 0x21, + 0xc8, 0x53, 0x73, 0x68, 0x3c, 0x00, 0x78, 0x86, + 0x01, 0x00, 0x00, 0x2b, 0x04, 0xd0, 0x21, 0x1c, + 0x00, 0x20, 0x04, 0x9a, 0xe7, 0xf7, 0xac, 0xfe, + 0x01, 0x23, 0xfb, 0x62, 0x20, 0x69, 0x32, 0x21, + 0xf2, 0xf7, 0x75, 0xf8, 0x05, 0x1c, 0x20, 0x69, + 0x01, 0x21, 0xf2, 0xf7, 0x70, 0xf8, 0x0e, 0x4e, + 0x01, 0x1c, 0x2a, 0x1c, 0x30, 0x1c, 0xed, 0xf7, + 0xc0, 0xfb, 0x00, 0x28, 0x0e, 0xd1, 0x32, 0x21, + 0x20, 0x69, 0xf2, 0xf7, 0x64, 0xf8, 0x3c, 0x00, + 0xb4, 0x86, 0x01, 0x00, 0x05, 0x1c, 0x20, 0x69, + 0x01, 0x21, 0xf2, 0xf7, 0x5f, 0xf8, 0x01, 0x1c, + 0x3b, 0x1c, 0x2a, 0x1c, 0x30, 0x1c, 0xed, 0xf7, + 0xd7, 0xfa, 0x05, 0xb0, 0xf0, 0xbd, 0x00, 0x00, + 0x7c, 0xd9, 0x01, 0x00, 0x40, 0xf8, 0x01, 0x00, + 0x20, 0xf7, 0x01, 0x00, 0x02, 0x1c, 0x08, 0x1c, + 0x80, 0x2a, 0x80, 0xb5, 0x06, 0xd0, 0x81, 0x2a, + 0x03, 0xd0, 0x04, 0x21, 0x0b, 0x20, 0xe8, 0xf7, + 0x3c, 0x00, 0xf0, 0x86, 0x01, 0x00, 0xd9, 0xfd, + 0x80, 0xbd, 0xff, 0xf7, 0x5c, 0xfe, 0x80, 0xbd, + 0x00, 0x00, 0x03, 0x48, 0x81, 0x78, 0xff, 0x29, + 0x01, 0xd0, 0x00, 0x79, 0x70, 0x47, 0x00, 0x20, + 0x70, 0x47, 0x80, 0xf8, 0x01, 0x00, 0x30, 0xb5, + 0x89, 0xb0, 0x00, 0x93, 0x0e, 0x4d, 0x13, 0x1c, + 0x04, 0x1c, 0x2a, 0x1c, 0xec, 0xf7, 0x25, 0xfd, + 0x01, 0xa9, 0x06, 0xa8, 0xa2, 0x68, 0xec, 0xf7, + 0xce, 0xfe, 0x3c, 0x00, 0x2c, 0x87, 0x01, 0x00, + 0x01, 0xaa, 0x06, 0xa9, 0x28, 0x1c, 0x63, 0x6a, + 0xed, 0xf7, 0x44, 0xfa, 0x04, 0x1c, 0x01, 0x28, + 0x04, 0xd1, 0x28, 0x1c, 0xed, 0xf7, 0x2c, 0xf8, + 0x00, 0xf0, 0x4a, 0xf8, 0x20, 0x1c, 0x09, 0xb0, + 0x30, 0xbd, 0x00, 0x00, 0x20, 0xf7, 0x01, 0x00, + 0x80, 0xb5, 0xed, 0xf7, 0x2b, 0xf8, 0x00, 0xf0, + 0x7d, 0xf8, 0x02, 0x48, 0xed, 0xf7, 0x02, 0xfa, + 0x80, 0xbd, 0x00, 0x00, 0x3c, 0x00, 0x68, 0x87, + 0x01, 0x00, 0x20, 0xf7, 0x01, 0x00, 0x80, 0xb5, + 0x00, 0x28, 0x0b, 0xd1, 0x06, 0x48, 0xed, 0xf7, + 0xf8, 0xf9, 0x00, 0xf0, 0x6e, 0xf8, 0x01, 0x20, + 0xed, 0xf7, 0xeb, 0xfa, 0x03, 0x49, 0x03, 0x20, + 0xf9, 0xf7, 0x35, 0xfe, 0x80, 0xbd, 0x20, 0xf7, + 0x01, 0x00, 0x6d, 0x87, 0x01, 0x00, 0xb0, 0xb5, + 0x10, 0x4d, 0x04, 0x1c, 0x13, 0x1c, 0x2a, 0x1c, + 0x88, 0xb0, 0xec, 0xf7, 0x02, 0xfd, 0x3c, 0x00, + 0xa4, 0x87, 0x01, 0x00, 0x21, 0x1c, 0x0a, 0x31, + 0x06, 0x22, 0x28, 0x1d, 0xe7, 0xf7, 0xa4, 0xfe, + 0x69, 0x46, 0x05, 0xa8, 0x62, 0x69, 0xec, 0xf7, + 0x87, 0xfe, 0x28, 0x1c, 0xec, 0xf7, 0xee, 0xff, + 0x7f, 0x23, 0xdb, 0x43, 0x28, 0x1c, 0x6a, 0x46, + 0x05, 0xa9, 0xed, 0xf7, 0xf9, 0xf9, 0x00, 0xf0, + 0x1d, 0xf8, 0x08, 0xb0, 0xb0, 0xbd, 0x00, 0x00, + 0x20, 0xf7, 0x01, 0x00, 0x0a, 0x48, 0x80, 0xb5, + 0x3c, 0x00, 0xe0, 0x87, 0x01, 0x00, 0x01, 0x78, + 0x00, 0x29, 0x06, 0xd0, 0x02, 0x29, 0x01, 0xd0, + 0x05, 0x29, 0x07, 0xd1, 0x03, 0x21, 0x01, 0x70, + 0x80, 0xbd, 0x01, 0x21, 0x01, 0x70, 0x00, 0xf0, + 0x2e, 0xfa, 0x80, 0xbd, 0x03, 0x21, 0x0b, 0x20, + 0xe8, 0xf7, 0x4f, 0xfd, 0x80, 0xbd, 0x7c, 0xd9, + 0x01, 0x00, 0x09, 0x49, 0x80, 0xb5, 0x08, 0x78, + 0x00, 0x28, 0x06, 0xd0, 0x02, 0x28, 0x01, 0xd0, + 0x05, 0x28, 0x3c, 0x00, 0x1c, 0x88, 0x01, 0x00, + 0x05, 0xd1, 0x04, 0x20, 0x08, 0x70, 0x80, 0xbd, + 0xff, 0xf7, 0x38, 0xfd, 0x80, 0xbd, 0x02, 0x21, + 0x0b, 0x20, 0xe8, 0xf7, 0x39, 0xfd, 0x80, 0xbd, + 0x7c, 0xd9, 0x01, 0x00, 0x80, 0xb5, 0x02, 0x21, + 0x0b, 0x20, 0x04, 0x4a, 0xfa, 0xf7, 0x82, 0xff, + 0xf6, 0xf7, 0x86, 0xfd, 0x02, 0x49, 0x08, 0x61, + 0x80, 0xbd, 0x00, 0x00, 0xdd, 0x86, 0x01, 0x00, + 0x7c, 0xd9, 0x01, 0x00, 0x3c, 0x00, 0x58, 0x88, + 0x01, 0x00, 0x0c, 0x48, 0x80, 0xb5, 0x01, 0x78, + 0x06, 0x29, 0x0e, 0xd2, 0x02, 0xa3, 0x5b, 0x5c, + 0x5b, 0x00, 0x9f, 0x44, 0x00, 0x00, 0x06, 0x03, + 0x07, 0x07, 0x07, 0x06, 0x00, 0x20, 0x00, 0xf0, + 0xc2, 0xf8, 0x80, 0xbd, 0x05, 0x21, 0x01, 0x70, + 0x80, 0xbd, 0x04, 0x21, 0x0b, 0x20, 0xe8, 0xf7, + 0x0e, 0xfd, 0x80, 0xbd, 0x00, 0x00, 0x7c, 0xd9, + 0x01, 0x00, 0x70, 0x47, 0x00, 0x00, 0x3c, 0x00, + 0x94, 0x88, 0x01, 0x00, 0x10, 0xb5, 0x0d, 0x4b, + 0x04, 0x1c, 0x18, 0x1c, 0x10, 0x30, 0x00, 0x2c, + 0x08, 0xd0, 0xdb, 0x88, 0x5b, 0x04, 0x5b, 0x0c, + 0x0b, 0x80, 0x80, 0x7b, 0x48, 0x80, 0x04, 0x20, + 0x10, 0x80, 0x08, 0xe0, 0xda, 0x88, 0x01, 0x24, + 0xe4, 0x03, 0x22, 0x40, 0x0c, 0x88, 0x22, 0x43, + 0xda, 0x80, 0x49, 0x88, 0x81, 0x73, 0x01, 0x20, + 0x10, 0xbd, 0x00, 0x00, 0x30, 0x00, 0x07, 0x00, + 0x3c, 0x00, 0xd0, 0x88, 0x01, 0x00, 0x70, 0xb5, + 0x10, 0x4e, 0x02, 0x1c, 0x00, 0x23, 0xf0, 0x56, + 0x00, 0x2a, 0x02, 0xd0, 0x08, 0x70, 0x01, 0x24, + 0x15, 0xe0, 0x00, 0x23, 0xcd, 0x56, 0x85, 0x42, + 0x01, 0xd1, 0x01, 0x20, 0x70, 0xbd, 0x28, 0x1c, + 0x00, 0xf0, 0x5f, 0xf9, 0x04, 0x1c, 0x0a, 0xd0, + 0x07, 0x48, 0x35, 0x70, 0x00, 0x68, 0x00, 0x28, + 0x03, 0xd0, 0x00, 0x21, 0x0a, 0x20, 0xf9, 0xf7, + 0x28, 0xfd, 0x3c, 0x00, 0x0c, 0x89, 0x01, 0x00, + 0x00, 0xf0, 0x16, 0xfa, 0x20, 0x1c, 0x70, 0xbd, + 0xf4, 0x6b, 0x01, 0x00, 0x3c, 0xd9, 0x01, 0x00, + 0x03, 0x1c, 0x08, 0x1c, 0x00, 0x2b, 0x80, 0xb5, + 0x06, 0xd0, 0x04, 0x21, 0x11, 0x80, 0x04, 0x22, + 0x04, 0x49, 0xe7, 0xf7, 0xe3, 0xfd, 0x02, 0xe0, + 0x00, 0x68, 0x00, 0xf0, 0xcf, 0xf9, 0x01, 0x20, + 0x80, 0xbd, 0x00, 0x00, 0xf4, 0x74, 0x01, 0x00, + 0x10, 0xb5, 0xff, 0xf7, 0x3c, 0x00, 0x48, 0x89, + 0x01, 0x00, 0x97, 0xfb, 0xff, 0xf7, 0x89, 0xfc, + 0x04, 0x1c, 0xff, 0xf7, 0xb8, 0xfb, 0xff, 0xf7, + 0x84, 0xfc, 0x00, 0x2c, 0x02, 0xd1, 0x01, 0x28, + 0x00, 0xd1, 0x10, 0xbd, 0x00, 0x20, 0x10, 0xbd, + 0x00, 0x00, 0xf8, 0xb5, 0x20, 0x4f, 0x04, 0x1c, + 0x78, 0x78, 0x0e, 0x1c, 0x02, 0x28, 0x2e, 0xd0, + 0x1e, 0x4a, 0xf9, 0x68, 0x91, 0x61, 0x14, 0x23, + 0x1d, 0x49, 0x58, 0x43, 0x40, 0x18, 0x3c, 0x00, + 0x84, 0x89, 0x01, 0x00, 0x41, 0x7b, 0xb8, 0x78, + 0xf8, 0xf7, 0x14, 0xfe, 0x00, 0xf0, 0x8a, 0xf9, + 0x00, 0x25, 0x04, 0xe0, 0x00, 0x21, 0xb8, 0x78, + 0xf8, 0xf7, 0x0c, 0xfe, 0x01, 0x35, 0x78, 0x78, + 0x14, 0x23, 0x14, 0x49, 0x58, 0x43, 0x40, 0x18, + 0x80, 0x7a, 0xa8, 0x42, 0xf2, 0xdc, 0x00, 0x25, + 0x08, 0xe0, 0x00, 0x21, 0xb8, 0x78, 0xf8, 0xf7, + 0xfd, 0xfd, 0x0f, 0x48, 0x00, 0x68, 0x20, 0x70, + 0x3c, 0x00, 0xc0, 0x89, 0x01, 0x00, 0x01, 0x34, + 0x01, 0x35, 0xb5, 0x42, 0xf4, 0xdb, 0x09, 0x4a, + 0xf8, 0x68, 0x50, 0x61, 0x78, 0x78, 0x02, 0x28, + 0x06, 0xd1, 0xb8, 0x68, 0x32, 0x1c, 0x21, 0x1c, + 0x00, 0x04, 0x00, 0x0c, 0xff, 0xf7, 0x25, 0xfd, + 0xb8, 0x68, 0x80, 0x19, 0xb8, 0x60, 0xf8, 0xbd, + 0x00, 0x00, 0x40, 0xd9, 0x01, 0x00, 0x10, 0x00, + 0x07, 0x00, 0x64, 0x8d, 0x01, 0x00, 0x30, 0x20, + 0x07, 0x00, 0x3c, 0x00, 0xfc, 0x89, 0x01, 0x00, + 0x70, 0xb5, 0x06, 0x1c, 0x0c, 0x4d, 0x00, 0x24, + 0x2c, 0x70, 0xff, 0xf7, 0x39, 0xfc, 0x0a, 0x48, + 0x18, 0x21, 0x1c, 0x30, 0xac, 0x60, 0xe7, 0xf7, + 0x43, 0xfd, 0x08, 0x48, 0x44, 0x61, 0xf9, 0xf7, + 0x63, 0xf9, 0x00, 0x2e, 0x06, 0xd1, 0x06, 0x48, + 0x29, 0x69, 0xf6, 0xf7, 0xa7, 0xfc, 0x00, 0x20, + 0xec, 0xf7, 0xb0, 0xfe, 0x70, 0xbd, 0x00, 0x00, + 0x7c, 0xd9, 0x01, 0x00, 0x3c, 0x00, 0x38, 0x8a, + 0x01, 0x00, 0x20, 0xf7, 0x01, 0x00, 0x34, 0x63, + 0x01, 0x00, 0x30, 0xb5, 0x12, 0x4c, 0x85, 0xb0, + 0x20, 0x68, 0x00, 0x28, 0x1c, 0xd0, 0x0f, 0x48, + 0x14, 0x38, 0x80, 0x68, 0x00, 0x28, 0x01, 0xd1, + 0xff, 0xf7, 0xc1, 0xfb, 0x20, 0x68, 0x00, 0x23, + 0x00, 0x68, 0x01, 0xaa, 0x04, 0x30, 0x01, 0x21, + 0xec, 0xf7, 0xd1, 0xfd, 0x08, 0x49, 0x08, 0x4a, + 0x08, 0x31, 0x0c, 0x31, 0x00, 0x92, 0x3c, 0x00, + 0x74, 0x8a, 0x01, 0x00, 0x03, 0xc9, 0x00, 0xab, + 0x45, 0x18, 0x99, 0x7b, 0x01, 0x9a, 0x20, 0x68, + 0x2b, 0x1c, 0xf2, 0xf7, 0x2b, 0xfe, 0x05, 0xb0, + 0x30, 0xbd, 0x00, 0x00, 0x90, 0xd9, 0x01, 0x00, + 0x29, 0x81, 0x01, 0x00, 0x10, 0xb5, 0x13, 0x4c, + 0x14, 0x23, 0x60, 0x70, 0x58, 0x43, 0x12, 0x4b, + 0xc1, 0x18, 0x8a, 0x88, 0xe2, 0x80, 0x18, 0x58, + 0xe0, 0x60, 0x08, 0x7a, 0xa0, 0x70, 0xff, 0x28, + 0x3c, 0x00, 0xb0, 0x8a, 0x01, 0x00, 0x12, 0xd0, + 0x00, 0x22, 0x08, 0x21, 0x0d, 0x4b, 0xf8, 0xf7, + 0x22, 0xfd, 0x00, 0x22, 0x02, 0x20, 0xe1, 0x68, + 0xef, 0xf7, 0xbd, 0xfe, 0x0a, 0x49, 0xe0, 0x68, + 0x48, 0x61, 0x4a, 0x68, 0x02, 0x43, 0x4a, 0x60, + 0x8a, 0x68, 0x10, 0x43, 0x88, 0x60, 0x60, 0x78, + 0x02, 0x28, 0x01, 0xd1, 0xff, 0xf7, 0xdf, 0xfc, + 0x10, 0xbd, 0x40, 0xd9, 0x01, 0x00, 0x64, 0x8d, + 0x01, 0x00, 0x3c, 0x00, 0xec, 0x8a, 0x01, 0x00, + 0xb8, 0x0b, 0x00, 0x00, 0x10, 0x00, 0x07, 0x00, + 0xfe, 0x30, 0x00, 0x06, 0x00, 0x0e, 0x06, 0x21, + 0x15, 0x4b, 0x41, 0x43, 0x58, 0x5c, 0x82, 0x06, + 0x14, 0x48, 0x92, 0x0e, 0x42, 0x71, 0xc9, 0x18, + 0x4a, 0x78, 0xd2, 0x06, 0xd2, 0x0e, 0x02, 0x71, + 0x42, 0x78, 0x0c, 0x23, 0x1a, 0x43, 0x42, 0x70, + 0x42, 0x78, 0x8b, 0x78, 0x92, 0x08, 0x92, 0x00, + 0x9b, 0x07, 0x9b, 0x0f, 0x3c, 0x00, 0x28, 0x8b, + 0x01, 0x00, 0x1a, 0x43, 0x42, 0x70, 0x02, 0x78, + 0xc0, 0x23, 0x9a, 0x43, 0x40, 0x32, 0x02, 0x70, + 0x02, 0x78, 0x38, 0x23, 0x1a, 0x43, 0x02, 0x70, + 0x02, 0x78, 0xc9, 0x78, 0x04, 0x23, 0x9a, 0x43, + 0x89, 0x00, 0x19, 0x40, 0x11, 0x43, 0x01, 0x70, + 0x01, 0x20, 0x70, 0x47, 0x00, 0x00, 0xd8, 0x8d, + 0x01, 0x00, 0x88, 0x00, 0x07, 0x00, 0x8f, 0xb5, + 0x00, 0x20, 0x02, 0x90, 0x03, 0x90, 0x3c, 0x00, + 0x64, 0x8b, 0x01, 0x00, 0x07, 0x48, 0x02, 0xaa, + 0x03, 0xa9, 0x00, 0x91, 0x01, 0x92, 0x43, 0x89, + 0x02, 0x89, 0x03, 0xc8, 0xff, 0xf7, 0xd4, 0xfb, + 0x03, 0x98, 0x02, 0x99, 0xff, 0xf7, 0x04, 0xfc, + 0x8f, 0xbd, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, + 0x08, 0x49, 0x4a, 0x78, 0x00, 0x2a, 0x03, 0xd1, + 0x88, 0x80, 0x00, 0x20, 0x88, 0x60, 0x70, 0x47, + 0x14, 0x23, 0x5a, 0x43, 0x04, 0x4b, 0xd2, 0x18, + 0x3c, 0x00, 0xa0, 0x8b, 0x01, 0x00, 0xd2, 0x88, + 0x42, 0x43, 0xc8, 0x88, 0x42, 0x43, 0x8a, 0x60, + 0x70, 0x47, 0x40, 0xd9, 0x01, 0x00, 0x64, 0x8d, + 0x01, 0x00, 0xf8, 0xb5, 0x25, 0x4e, 0x04, 0x1c, + 0x30, 0x7a, 0x40, 0x08, 0x40, 0x00, 0x30, 0x72, + 0xb0, 0x7a, 0x00, 0x20, 0xb0, 0x72, 0x01, 0x27, + 0x01, 0x2c, 0x20, 0x4d, 0x01, 0xd0, 0xfc, 0x42, + 0x13, 0xd1, 0x30, 0x7b, 0x38, 0x43, 0x30, 0x73, + 0x00, 0x22, 0x3c, 0x00, 0xdc, 0x8b, 0x01, 0x00, + 0x21, 0x1c, 0x00, 0x20, 0xff, 0xf7, 0x6e, 0xfb, + 0x63, 0x1c, 0x01, 0xd1, 0x3f, 0x21, 0xe9, 0x73, + 0xb1, 0x7a, 0xa0, 0x22, 0x11, 0x43, 0xb1, 0x72, + 0x31, 0x7a, 0x39, 0x43, 0x31, 0x72, 0xf8, 0xbd, + 0x30, 0x7b, 0x40, 0x08, 0x40, 0x00, 0x30, 0x73, + 0x01, 0x22, 0x21, 0x1c, 0x01, 0x20, 0xff, 0xf7, + 0x59, 0xfb, 0x01, 0x20, 0x00, 0x21, 0xe9, 0x73, + 0xb1, 0x7a, 0x02, 0x22, 0x3c, 0x00, 0x18, 0x8c, + 0x01, 0x00, 0x11, 0x43, 0xb1, 0x72, 0xb1, 0x7a, + 0x04, 0x22, 0x11, 0x43, 0xb1, 0x72, 0xb1, 0x7a, + 0x30, 0x22, 0x11, 0x43, 0xb1, 0x72, 0x31, 0x7a, + 0x39, 0x43, 0x31, 0x72, 0x08, 0x49, 0x4a, 0x68, + 0x80, 0x23, 0x9a, 0x43, 0x4a, 0x60, 0x0a, 0x68, + 0x1a, 0x43, 0x0a, 0x60, 0x31, 0x7b, 0x39, 0x43, + 0x31, 0x73, 0xd7, 0xe7, 0x00, 0x00, 0x88, 0x00, + 0x07, 0x00, 0x40, 0x00, 0x07, 0x00, 0x3c, 0x00, + 0x54, 0x8c, 0x01, 0x00, 0x6c, 0x00, 0x07, 0x00, + 0xb0, 0xb5, 0x0e, 0x4d, 0x0e, 0x48, 0x29, 0x69, + 0xf6, 0xf7, 0x9e, 0xfb, 0x0d, 0x48, 0xec, 0xf7, + 0x93, 0xfd, 0x0d, 0x48, 0x09, 0x4c, 0x00, 0x88, + 0x1c, 0x34, 0xa0, 0x82, 0xf1, 0xf7, 0x5a, 0xff, + 0x20, 0x61, 0xfa, 0xf7, 0x97, 0xf8, 0x02, 0x1c, + 0x23, 0x1c, 0x00, 0x21, 0x00, 0x20, 0xec, 0xf7, + 0x8b, 0xff, 0x32, 0x20, 0xe8, 0x60, 0xff, 0xf7, + 0x3c, 0x00, 0x90, 0x8c, 0x01, 0x00, 0xa5, 0xfa, + 0xb0, 0xbd, 0x7c, 0xd9, 0x01, 0x00, 0x34, 0x63, + 0x01, 0x00, 0xdd, 0x84, 0x01, 0x00, 0x20, 0xf7, + 0x01, 0x00, 0xb0, 0xb5, 0x0a, 0x4d, 0x68, 0x78, + 0x00, 0x28, 0x0e, 0xd0, 0x14, 0x23, 0x08, 0x49, + 0x58, 0x43, 0x40, 0x18, 0x44, 0x7a, 0x06, 0xe0, + 0xa8, 0x68, 0xe0, 0x40, 0x01, 0x06, 0x09, 0x0e, + 0xa8, 0x78, 0xf8, 0xf7, 0x76, 0xfc, 0x08, 0x3c, + 0xf6, 0xd5, 0x3c, 0x00, 0xcc, 0x8c, 0x01, 0x00, + 0xb0, 0xbd, 0x00, 0x00, 0x40, 0xd9, 0x01, 0x00, + 0x64, 0x8d, 0x01, 0x00, 0x01, 0x1c, 0x14, 0x48, + 0xb0, 0xb5, 0x01, 0x60, 0x13, 0x48, 0x02, 0x7f, + 0x02, 0x23, 0x9a, 0x43, 0x02, 0x77, 0x02, 0x7f, + 0x01, 0x24, 0x22, 0x43, 0x02, 0x77, 0x10, 0x4d, + 0x00, 0x29, 0x0c, 0xd0, 0x01, 0x22, 0x00, 0x21, + 0x03, 0x20, 0xef, 0xf7, 0x9f, 0xfd, 0x0d, 0x49, + 0x48, 0x7c, 0xa0, 0x43, 0x3c, 0x00, 0x08, 0x8d, + 0x01, 0x00, 0x48, 0x74, 0x68, 0x7a, 0x20, 0x43, + 0x68, 0x72, 0xb0, 0xbd, 0x01, 0x7f, 0x21, 0x43, + 0x01, 0x77, 0x68, 0x7a, 0x40, 0x08, 0x40, 0x00, + 0x68, 0x72, 0x01, 0x22, 0x00, 0x21, 0x03, 0x20, + 0xef, 0xf7, 0xb1, 0xfd, 0xb0, 0xbd, 0xf4, 0x74, + 0x01, 0x00, 0x30, 0x00, 0x07, 0x00, 0x88, 0x00, + 0x07, 0x00, 0x10, 0x00, 0x07, 0x00, 0x10, 0xb5, + 0x07, 0x4c, 0x21, 0x1c, 0x00, 0x20, 0x3c, 0x00, + 0x44, 0x8d, 0x01, 0x00, 0xf9, 0xf7, 0x56, 0xfb, + 0x05, 0x48, 0x00, 0x23, 0xc0, 0x56, 0x01, 0x28, + 0x03, 0xdd, 0x21, 0x1c, 0x00, 0x20, 0xf9, 0xf7, + 0x19, 0xfb, 0x10, 0xbd, 0x65, 0x1a, 0x00, 0x00, + 0xf4, 0x6b, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x08, 0x01, 0x01, 0x00, 0x02, 0x18, 0x04, 0xff, + 0x82, 0xe8, 0xd7, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, + 0x3c, 0x00, 0x80, 0x8d, 0x01, 0x00, 0x00, 0x18, + 0x00, 0x06, 0x02, 0x03, 0x05, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, + 0x01, 0x00, 0xff, 0x10, 0x00, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x20, 0x00, 0x01, 0x00, 0x02, 0x10, + 0x00, 0x06, 0x02, 0x03, 0x05, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x04, 0x05, 0x06, 0x07, 0x08, 0x0c, + 0x0d, 0x0e, 0x3c, 0x00, 0xbc, 0x8d, 0x01, 0x00, + 0xff, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1b, + 0x1c, 0x1d, 0xff, 0x1a, 0x11, 0x13, 0x12, 0x0f, + 0x10, 0xff, 0x02, 0x00, 0xff, 0x01, 0x03, 0x09, + 0x0a, 0x0b, 0x00, 0x00, 0x30, 0x0d, 0x02, 0x00, + 0x00, 0x00, 0x28, 0x0e, 0x03, 0x00, 0x00, 0x00, + 0x1e, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x30, 0x0d, + 0x02, 0x01, 0x00, 0x00, 0x1e, 0x0c, 0x00, 0x01, + 0x00, 0x00, 0x23, 0x0d, 0x3c, 0x00, 0xf8, 0x8d, + 0x01, 0x00, 0x02, 0x01, 0x00, 0x00, 0x1d, 0x0d, + 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfe, + 0xfb, 0x6d, 0x00, 0x00, 0x80, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x34, 0x8e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x70, 0x8e, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xac, 0x8e, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xe8, 0x8e, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x24, 0x8f, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x60, 0x8f, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x9c, 0x8f, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xd8, 0x8f, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x14, 0x90, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x50, 0x90, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x8c, 0x90, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xc8, 0x90, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x04, 0x91, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0x91, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x7c, 0x91, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xb8, 0x91, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xf4, 0x91, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x30, 0x92, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x6c, 0x92, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xa8, 0x92, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xe4, 0x92, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x20, 0x93, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x5c, 0x93, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x98, 0x93, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xd4, 0x93, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x10, 0x94, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x4c, 0x94, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x88, 0x94, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xc4, 0x94, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x95, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x78, 0x95, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xb4, 0x95, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xf0, 0x95, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x2c, 0x96, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x68, 0x96, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xa4, 0x96, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xe0, 0x96, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x1c, 0x97, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x58, 0x97, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x94, 0x97, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xd0, 0x97, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x0c, 0x98, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x48, 0x98, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x84, 0x98, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xc0, 0x98, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xfc, 0x98, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x38, 0x99, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x74, 0x99, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xb0, 0x99, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xec, 0x99, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x28, 0x9a, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x64, 0x9a, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xa0, 0x9a, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xdc, 0x9a, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x18, 0x9b, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x54, 0x9b, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x90, 0x9b, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xcc, 0x9b, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x08, 0x9c, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x44, 0x9c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x80, 0x9c, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xbc, 0x9c, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xf8, 0x9c, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x34, 0x9d, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x70, 0x9d, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xac, 0x9d, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xe8, 0x9d, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x24, 0x9e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x60, 0x9e, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x9c, 0x9e, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xd8, 0x9e, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x14, 0x9f, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x50, 0x9f, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x8c, 0x9f, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xc8, 0x9f, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x04, 0xa0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0xa0, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x7c, 0xa0, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xb8, 0xa0, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xf4, 0xa0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x30, 0xa1, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x6c, 0xa1, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xa8, 0xa1, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xe4, 0xa1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x20, 0xa2, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x5c, 0xa2, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x98, 0xa2, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xd4, 0xa2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x10, 0xa3, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x4c, 0xa3, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x88, 0xa3, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xc4, 0xa3, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0xa4, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x3c, 0xa4, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x78, 0xa4, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xb4, 0xa4, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xf0, 0xa4, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x2c, 0xa5, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x68, 0xa5, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xa4, 0xa5, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xe0, 0xa5, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x1c, 0xa6, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x58, 0xa6, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x94, 0xa6, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xd0, 0xa6, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x0c, 0xa7, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x48, 0xa7, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x84, 0xa7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xc0, 0xa7, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xfc, 0xa7, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x38, 0xa8, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x74, 0xa8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xb0, 0xa8, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xec, 0xa8, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x28, 0xa9, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x64, 0xa9, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xa0, 0xa9, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xdc, 0xa9, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x18, 0xaa, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x54, 0xaa, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x90, 0xaa, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xcc, 0xaa, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x08, 0xab, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x44, 0xab, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x80, 0xab, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xbc, 0xab, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xf8, 0xab, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x34, 0xac, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x70, 0xac, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xac, 0xac, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xe8, 0xac, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x24, 0xad, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x60, 0xad, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x9c, 0xad, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xd8, 0xad, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x14, 0xae, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x50, 0xae, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x8c, 0xae, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xc8, 0xae, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x04, 0xaf, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0xaf, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x7c, 0xaf, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xb8, 0xaf, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xf4, 0xaf, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x30, 0xb0, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x6c, 0xb0, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xa8, 0xb0, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xe4, 0xb0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x20, 0xb1, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x5c, 0xb1, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x98, 0xb1, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xd4, 0xb1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x10, 0xb2, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x4c, 0xb2, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x88, 0xb2, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xc4, 0xb2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0xb3, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x3c, 0xb3, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x78, 0xb3, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xb4, 0xb3, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xf0, 0xb3, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x2c, 0xb4, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x68, 0xb4, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xa4, 0xb4, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xe0, 0xb4, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x1c, 0xb5, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x58, 0xb5, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x94, 0xb5, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xd0, 0xb5, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x0c, 0xb6, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x48, 0xb6, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x84, 0xb6, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xc0, 0xb6, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xfc, 0xb6, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x38, 0xb7, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x74, 0xb7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xb0, 0xb7, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xec, 0xb7, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x28, 0xb8, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x64, 0xb8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xa0, 0xb8, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xdc, 0xb8, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x18, 0xb9, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x54, 0xb9, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x90, 0xb9, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xcc, 0xb9, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x08, 0xba, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x44, 0xba, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x80, 0xba, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xbc, 0xba, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xf8, 0xba, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x34, 0xbb, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x70, 0xbb, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xac, 0xbb, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xe8, 0xbb, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x24, 0xbc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x60, 0xbc, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x9c, 0xbc, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xd8, 0xbc, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x14, 0xbd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x50, 0xbd, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x8c, 0xbd, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xc8, 0xbd, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x04, 0xbe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0xbe, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x7c, 0xbe, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xb8, 0xbe, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xf4, 0xbe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x30, 0xbf, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x6c, 0xbf, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xa8, 0xbf, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xe4, 0xbf, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x20, 0xc0, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x5c, 0xc0, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x98, 0xc0, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xd4, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x10, 0xc1, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x4c, 0xc1, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x88, 0xc1, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xc4, 0xc1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0xc2, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x3c, 0xc2, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x78, 0xc2, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xb4, 0xc2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xf0, 0xc2, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x2c, 0xc3, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x68, 0xc3, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xa4, 0xc3, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xe0, 0xc3, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x1c, 0xc4, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x58, 0xc4, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x94, 0xc4, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xd0, 0xc4, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x0c, 0xc5, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x48, 0xc5, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x84, 0xc5, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xc0, 0xc5, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xfc, 0xc5, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x38, 0xc6, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x74, 0xc6, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xb0, 0xc6, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xec, 0xc6, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x28, 0xc7, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x64, 0xc7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xa0, 0xc7, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xdc, 0xc7, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x18, 0xc8, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x54, 0xc8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x90, 0xc8, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xcc, 0xc8, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x08, 0xc9, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x44, 0xc9, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x80, 0xc9, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xbc, 0xc9, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xf8, 0xc9, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x34, 0xca, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x70, 0xca, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xac, 0xca, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xe8, 0xca, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x24, 0xcb, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x60, 0xcb, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x9c, 0xcb, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xd8, 0xcb, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x14, 0xcc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x50, 0xcc, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x8c, 0xcc, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xc8, 0xcc, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x04, 0xcd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0xcd, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x7c, 0xcd, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xb8, 0xcd, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xf4, 0xcd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x30, 0xce, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x6c, 0xce, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xa8, 0xce, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xe4, 0xce, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x20, 0xcf, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x5c, 0xcf, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x98, 0xcf, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xd4, 0xcf, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x10, 0xd0, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x4c, 0xd0, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x88, 0xd0, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xc4, 0xd0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0xd1, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x3c, 0xd1, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x78, 0xd1, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xb4, 0xd1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xf0, 0xd1, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x2c, 0xd2, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x68, 0xd2, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xa4, 0xd2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xe0, 0xd2, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x1c, 0xd3, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x58, 0xd3, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x94, 0xd3, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xd0, 0xd3, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x0c, 0xd4, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x48, 0xd4, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x84, 0xd4, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xc0, 0xd4, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xfc, 0xd4, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x38, 0xd5, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x74, 0xd5, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xb0, 0xd5, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xec, 0xd5, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x28, 0xd6, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x64, 0xd6, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xa0, 0xd6, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xdc, 0xd6, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x18, 0xd7, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x54, 0xd7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x90, 0xd7, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xcc, 0xd7, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x08, 0xd8, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x44, 0xd8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x80, 0xd8, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xbc, 0xd8, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xf8, 0xd8, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x34, 0xd9, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x70, 0xd9, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xac, 0xd9, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xe8, 0xd9, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x24, 0xda, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x60, 0xda, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x9c, 0xda, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xd8, 0xda, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x14, 0xdb, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x50, 0xdb, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x8c, 0xdb, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xc8, 0xdb, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x04, 0xdc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0xdc, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x7c, 0xdc, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xb8, 0xdc, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xf4, 0xdc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x30, 0xdd, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x6c, 0xdd, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xa8, 0xdd, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xe4, 0xdd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x20, 0xde, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x5c, 0xde, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x98, 0xde, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xd4, 0xde, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x10, 0xdf, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x4c, 0xdf, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x88, 0xdf, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xc4, 0xdf, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x3c, 0xe0, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x78, 0xe0, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xb4, 0xe0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xf0, 0xe0, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x2c, 0xe1, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x68, 0xe1, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xa4, 0xe1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xe0, 0xe1, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x1c, 0xe2, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x58, 0xe2, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x94, 0xe2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xd0, 0xe2, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x0c, 0xe3, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x48, 0xe3, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x84, 0xe3, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xc0, 0xe3, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xfc, 0xe3, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x38, 0xe4, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x74, 0xe4, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xb0, 0xe4, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xec, 0xe4, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x28, 0xe5, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x64, 0xe5, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xa0, 0xe5, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xdc, 0xe5, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x18, 0xe6, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x54, 0xe6, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x90, 0xe6, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xcc, 0xe6, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x08, 0xe7, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x44, 0xe7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x80, 0xe7, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xbc, 0xe7, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xf8, 0xe7, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x34, 0xe8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x70, 0xe8, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xac, 0xe8, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xe8, 0xe8, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x24, 0xe9, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x60, 0xe9, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x9c, 0xe9, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xd8, 0xe9, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x14, 0xea, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x50, 0xea, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x8c, 0xea, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xc8, 0xea, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x04, 0xeb, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0xeb, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x7c, 0xeb, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xb8, 0xeb, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xf4, 0xeb, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x30, 0xec, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x6c, 0xec, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xa8, 0xec, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xe4, 0xec, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x20, 0xed, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x5c, 0xed, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x98, 0xed, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xd4, 0xed, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x10, 0xee, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x4c, 0xee, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x88, 0xee, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xc4, 0xee, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0xef, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x3c, 0xef, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x78, 0xef, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xb4, 0xef, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xf0, 0xef, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x2c, 0xf0, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x68, 0xf0, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xa4, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xe0, 0xf0, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x1c, 0xf1, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x58, 0xf1, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x94, 0xf1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xd0, 0xf1, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x0c, 0xf2, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x48, 0xf2, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x84, 0xf2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xc0, 0xf2, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xfc, 0xf2, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x38, 0xf3, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x74, 0xf3, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xb0, 0xf3, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xec, 0xf3, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x28, 0xf4, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x64, 0xf4, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xa0, 0xf4, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xdc, 0xf4, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x18, 0xf5, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x54, 0xf5, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x90, 0xf5, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xcc, 0xf5, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x08, 0xf6, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x44, 0xf6, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x80, 0xf6, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xbc, 0xf6, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xf8, 0xf6, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x34, 0xf7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x70, 0xf7, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xac, 0xf7, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xe8, 0xf7, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x24, 0xf8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x60, 0xf8, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x9c, 0xf8, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xd8, 0xf8, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x14, 0xf9, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x50, 0xf9, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x8c, 0xf9, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xc8, 0xf9, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x04, 0xfa, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0xfa, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x7c, 0xfa, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xb8, 0xfa, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xf4, 0xfa, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x30, 0xfb, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x6c, 0xfb, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xa8, 0xfb, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xe4, 0xfb, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x20, 0xfc, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x5c, 0xfc, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x98, 0xfc, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xd4, 0xfc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x10, 0xfd, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x4c, 0xfd, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x88, 0xfd, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xc4, 0xfd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x3c, 0xfe, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x78, 0xfe, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xb4, 0xfe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xf0, 0xfe, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x2c, 0xff, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x68, 0xff, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x00, 0x10, 0x04, 0x00, 0x70, 0xb5, 0x2b, 0x48, + 0x06, 0x21, 0x81, 0x75, 0xc1, 0x75, 0x01, 0x7e, + 0x49, 0x08, 0x49, 0x00, 0x01, 0x76, 0x01, 0x7e, + 0x02, 0x22, 0x91, 0x43, 0x01, 0x76, 0x26, 0x49, + 0x0b, 0x78, 0x5b, 0x08, 0x5b, 0x00, 0x0b, 0x70, + 0x04, 0x23, 0x8b, 0x70, 0x0c, 0x23, 0x43, 0x76, + 0x20, 0x23, 0x03, 0x75, 0x1a, 0x24, 0x44, 0x75, + 0x24, 0x24, 0x84, 0x76, 0x10, 0x24, 0xc4, 0x76, + 0x3c, 0x00, 0x3c, 0x10, 0x04, 0x00, 0x2a, 0x25, + 0x4d, 0x70, 0x05, 0x7a, 0x30, 0x26, 0xb5, 0x43, + 0x20, 0x35, 0x05, 0x72, 0x85, 0x7a, 0x6d, 0x08, + 0x6d, 0x00, 0x85, 0x72, 0x85, 0x7a, 0x95, 0x43, + 0x85, 0x72, 0x85, 0x7a, 0x04, 0x26, 0x35, 0x43, + 0x85, 0x72, 0x85, 0x7a, 0x08, 0x26, 0x35, 0x43, + 0x85, 0x72, 0x85, 0x7a, 0xa5, 0x43, 0x85, 0x72, + 0x05, 0x7b, 0x2c, 0x43, 0x04, 0x73, 0x04, 0x7b, + 0x1c, 0x43, 0x3c, 0x00, 0x78, 0x10, 0x04, 0x00, + 0x04, 0x73, 0x04, 0x7b, 0x40, 0x25, 0x2c, 0x43, + 0x04, 0x73, 0x84, 0x7a, 0x23, 0x43, 0x83, 0x72, + 0x83, 0x7a, 0xab, 0x43, 0x83, 0x72, 0x03, 0x7b, + 0x80, 0x24, 0x23, 0x43, 0x03, 0x73, 0x08, 0x78, + 0x90, 0x43, 0x08, 0x70, 0x08, 0x78, 0x01, 0x22, + 0x10, 0x43, 0x08, 0x70, 0x08, 0x78, 0x04, 0x22, + 0x90, 0x43, 0x08, 0x70, 0x70, 0xbd, 0x00, 0x00, + 0x0c, 0x80, 0x07, 0x00, 0x3c, 0x00, 0xb4, 0x10, + 0x04, 0x00, 0x80, 0x80, 0x07, 0x00, 0x01, 0x49, + 0x04, 0x20, 0x48, 0x73, 0x70, 0x47, 0x40, 0x80, + 0x07, 0x00, 0x03, 0x49, 0x80, 0xb5, 0x00, 0x20, + 0x08, 0x80, 0x00, 0xf0, 0x0a, 0xfb, 0x80, 0xbd, + 0x00, 0x00, 0xfc, 0x6b, 0x01, 0x00, 0x70, 0x47, + 0x00, 0x00, 0x80, 0xb5, 0x00, 0xf0, 0x67, 0xfb, + 0x80, 0xbd, 0x80, 0xb5, 0x0a, 0x49, 0x18, 0x20, + 0xc1, 0xf7, 0x3b, 0xfa, 0x09, 0x49, 0x3c, 0x00, + 0xf0, 0x10, 0x04, 0x00, 0x02, 0x20, 0xc1, 0xf7, + 0x37, 0xfa, 0x08, 0x49, 0x1f, 0x20, 0xc1, 0xf7, + 0x33, 0xfa, 0x07, 0x49, 0x1c, 0x20, 0xc1, 0xf7, + 0x2f, 0xfa, 0x06, 0x49, 0x03, 0x20, 0xc1, 0xf7, + 0x2b, 0xfa, 0x80, 0xbd, 0x99, 0x2a, 0x00, 0x00, + 0x41, 0x25, 0x00, 0x00, 0x55, 0x25, 0x00, 0x00, + 0x5d, 0x25, 0x00, 0x00, 0x39, 0x25, 0x00, 0x00, + 0x80, 0xb5, 0xbf, 0xf7, 0x91, 0xfd, 0x80, 0xbd, + 0x3c, 0x00, 0x2c, 0x11, 0x04, 0x00, 0x80, 0xb5, + 0x05, 0x4a, 0x05, 0x49, 0x0a, 0x20, 0xbf, 0xf7, + 0x4e, 0xff, 0x01, 0x20, 0x04, 0x49, 0x80, 0x02, + 0x08, 0x60, 0x48, 0x60, 0x80, 0xbd, 0xb4, 0x74, + 0x01, 0x00, 0xb1, 0x64, 0x00, 0x00, 0x00, 0x10, + 0x07, 0x00, 0x80, 0xb5, 0x00, 0xf0, 0x91, 0xfe, + 0x80, 0xbd, 0x80, 0xb5, 0x05, 0x4a, 0x05, 0x49, + 0x1b, 0x20, 0xbf, 0xf7, 0x38, 0xff, 0x01, 0x20, + 0x04, 0x49, 0x3c, 0x00, 0x68, 0x11, 0x04, 0x00, + 0xc0, 0x06, 0x08, 0x60, 0x48, 0x60, 0x80, 0xbd, + 0xb8, 0x74, 0x01, 0x00, 0x2d, 0x6e, 0x00, 0x00, + 0x00, 0x10, 0x07, 0x00, 0x80, 0xb5, 0x04, 0x48, + 0x00, 0xf0, 0x80, 0xfe, 0x03, 0x49, 0x00, 0x20, + 0x48, 0x60, 0x88, 0x60, 0x80, 0xbd, 0x00, 0x00, + 0x41, 0x4b, 0x00, 0x00, 0xbc, 0x74, 0x01, 0x00, + 0x80, 0xb5, 0xc5, 0xf7, 0xd5, 0xfe, 0xce, 0xf7, + 0xd9, 0xf8, 0x03, 0x49, 0x3c, 0x00, 0xa4, 0x11, + 0x04, 0x00, 0x08, 0x60, 0x03, 0x49, 0x0a, 0x20, + 0xd1, 0xf7, 0xef, 0xf8, 0x80, 0xbd, 0xbc, 0x74, + 0x01, 0x00, 0x49, 0x6e, 0x00, 0x00, 0x80, 0xb5, + 0x01, 0x22, 0x20, 0x21, 0x06, 0x20, 0xc8, 0xf7, + 0x56, 0xfc, 0xbf, 0xf7, 0x70, 0xfe, 0x03, 0x49, + 0x00, 0x20, 0x08, 0x60, 0x20, 0x21, 0x02, 0x48, + 0xbf, 0xf7, 0x63, 0xf9, 0x80, 0xbd, 0xcc, 0x5c, + 0x01, 0x00, 0x64, 0x6d, 0x01, 0x00, 0x3c, 0x00, + 0xe0, 0x11, 0x04, 0x00, 0x08, 0x48, 0x80, 0xb5, + 0x00, 0x68, 0x00, 0x28, 0x05, 0xd0, 0x06, 0x48, + 0x54, 0x30, 0x42, 0x6a, 0x00, 0x21, 0xbf, 0xf7, + 0xf3, 0xf8, 0x04, 0x4a, 0x04, 0x49, 0x03, 0x20, + 0xbf, 0xf7, 0xac, 0xfd, 0x80, 0xbd, 0x00, 0x00, + 0x50, 0x6d, 0x01, 0x00, 0x89, 0x98, 0x00, 0x00, + 0x91, 0x98, 0x00, 0x00, 0x80, 0xb5, 0x00, 0xf0, + 0x03, 0xf8, 0x00, 0xf0, 0x19, 0xf8, 0x80, 0xbd, + 0x3c, 0x00, 0x1c, 0x12, 0x04, 0x00, 0x10, 0xb5, + 0x09, 0x4c, 0x60, 0x21, 0x20, 0x1c, 0xbf, 0xf7, + 0x3a, 0xf9, 0x00, 0x20, 0xc0, 0x43, 0xa0, 0x60, + 0x20, 0x60, 0xff, 0x20, 0x02, 0x30, 0xe0, 0x84, + 0x20, 0x22, 0x20, 0x1c, 0x40, 0x30, 0x02, 0x49, + 0xbf, 0xf7, 0x5b, 0xf9, 0x10, 0xbd, 0x00, 0x10, + 0x07, 0x00, 0x70, 0x52, 0x01, 0x00, 0x00, 0x20, + 0x0a, 0x49, 0xc0, 0x43, 0x88, 0x60, 0x09, 0x4b, + 0x0a, 0x49, 0x3c, 0x00, 0x58, 0x12, 0x04, 0x00, + 0x00, 0x20, 0x82, 0x00, 0x01, 0x30, 0x00, 0x06, + 0x00, 0x0e, 0x20, 0x28, 0x99, 0x50, 0xf8, 0xd3, + 0x06, 0x49, 0x04, 0x4a, 0x08, 0x1c, 0x10, 0x30, + 0x08, 0x3a, 0x03, 0xc2, 0x70, 0x47, 0x00, 0x00, + 0x00, 0x10, 0x07, 0x00, 0xe0, 0x7e, 0x01, 0x00, + 0x75, 0x75, 0x00, 0x00, 0x00, 0xa0, 0x07, 0x00, + 0x04, 0x48, 0x00, 0x21, 0x00, 0x22, 0x00, 0x23, + 0x0e, 0xc0, 0x0c, 0x38, 0x3c, 0x00, 0x94, 0x12, + 0x04, 0x00, 0x01, 0x21, 0x41, 0x60, 0x70, 0x47, + 0x00, 0x00, 0x70, 0x78, 0x01, 0x00, 0x70, 0x47, + 0x00, 0x00, 0x03, 0x48, 0x00, 0x21, 0x00, 0x22, + 0x00, 0x23, 0x0e, 0xc0, 0x08, 0xc0, 0x70, 0x47, + 0x00, 0x00, 0x88, 0x5a, 0x01, 0x00, 0x04, 0x49, + 0x80, 0xb5, 0x00, 0x20, 0x48, 0x61, 0x02, 0x48, + 0x40, 0x21, 0x1c, 0x30, 0xbf, 0xf7, 0xe9, 0xf8, + 0x80, 0xbd, 0xfc, 0x5a, 0x01, 0x00, 0x3c, 0x00, + 0xd0, 0x12, 0x04, 0x00, 0x80, 0xb5, 0xce, 0xf7, + 0x3f, 0xf8, 0x03, 0x49, 0x88, 0x61, 0x03, 0x49, + 0x03, 0x20, 0xd1, 0xf7, 0x55, 0xf8, 0x80, 0xbd, + 0xfc, 0x5a, 0x01, 0x00, 0x0d, 0x17, 0x01, 0x00, + 0x80, 0xb5, 0xc0, 0xf7, 0xa5, 0xf9, 0x80, 0xbd, + 0xfe, 0xb5, 0x6c, 0x49, 0x00, 0x20, 0x00, 0x90, + 0xc8, 0x78, 0x6b, 0x4c, 0x6b, 0x4f, 0x43, 0x07, + 0xc0, 0x06, 0xc0, 0x17, 0xdb, 0x0e, 0xe3, 0x58, + 0x3c, 0x00, 0x0c, 0x13, 0x04, 0x00, 0x01, 0x30, + 0x38, 0x62, 0x3b, 0x61, 0x08, 0x1c, 0x80, 0x78, + 0x66, 0x4e, 0x03, 0x22, 0x41, 0x07, 0xa0, 0x36, + 0x02, 0x96, 0x49, 0x0f, 0x31, 0x72, 0x89, 0x00, + 0x61, 0x58, 0x3c, 0x1c, 0x61, 0x61, 0x01, 0x91, + 0xc0, 0x06, 0xc0, 0x0f, 0x78, 0x62, 0x20, 0x1c, + 0x00, 0x27, 0x87, 0x61, 0x00, 0x20, 0x21, 0x1c, + 0xc8, 0x61, 0x59, 0x48, 0x59, 0x49, 0x00, 0x78, + 0x09, 0x79, 0x3c, 0x00, 0x48, 0x13, 0x04, 0x00, + 0x5a, 0x4c, 0x4e, 0x07, 0x76, 0x0f, 0x71, 0x1c, + 0x8c, 0x46, 0xb1, 0x00, 0x8e, 0x46, 0x56, 0x49, + 0x80, 0x31, 0x00, 0x28, 0x24, 0xd0, 0x52, 0x4f, + 0x01, 0x28, 0x7f, 0x78, 0x1a, 0xd0, 0x02, 0x28, + 0x71, 0xd1, 0x4f, 0x48, 0x00, 0x2f, 0x0c, 0xd0, + 0x01, 0x2f, 0x6c, 0xd1, 0x40, 0x79, 0x4d, 0x4d, + 0x40, 0x07, 0x40, 0x0f, 0x82, 0x00, 0xaa, 0x58, + 0x4b, 0x4d, 0x01, 0x30, 0x3c, 0x00, 0x84, 0x13, + 0x04, 0x00, 0xea, 0x61, 0xa0, 0x73, 0x04, 0x22, + 0x4b, 0x48, 0x48, 0x4d, 0xc8, 0x61, 0x4a, 0x48, + 0x00, 0x2f, 0x00, 0xd0, 0x4a, 0x48, 0x2f, 0x1c, + 0x11, 0xe0, 0x42, 0x48, 0x00, 0x2f, 0x55, 0xd1, + 0x07, 0x70, 0x02, 0x27, 0x47, 0x70, 0x3f, 0x48, + 0x40, 0x78, 0x00, 0x28, 0x10, 0xd0, 0x01, 0x28, + 0x01, 0xd0, 0x02, 0x28, 0x4a, 0xd1, 0x3f, 0x48, + 0x3d, 0x4f, 0xc8, 0x61, 0x3f, 0x48, 0x3c, 0x00, + 0xc0, 0x13, 0x04, 0x00, 0x88, 0x61, 0x3a, 0x49, + 0x70, 0x46, 0x08, 0x58, 0x35, 0x1c, 0xb8, 0x61, + 0x60, 0x46, 0x60, 0x73, 0x04, 0xe0, 0x3c, 0x48, + 0x02, 0x22, 0x88, 0x61, 0x3b, 0x48, 0xc8, 0x61, + 0x00, 0x20, 0x32, 0x49, 0x06, 0xe0, 0x0e, 0x18, + 0xb6, 0x78, 0x76, 0x07, 0x76, 0x0f, 0x04, 0x2e, + 0x2f, 0xd8, 0x01, 0x30, 0x90, 0x42, 0xf6, 0xd3, + 0xc8, 0x79, 0x2e, 0x4f, 0xc0, 0x07, 0xc0, 0x0f, + 0x3c, 0x00, 0xfc, 0x13, 0x04, 0x00, 0xf8, 0x60, + 0x33, 0x48, 0x41, 0x68, 0x19, 0x43, 0x41, 0x60, + 0x81, 0x68, 0x19, 0x43, 0x81, 0x60, 0x01, 0x9a, + 0xb9, 0x69, 0x8c, 0x46, 0x11, 0x43, 0xfa, 0x69, + 0x86, 0x68, 0x11, 0x43, 0x8e, 0x43, 0x86, 0x60, + 0x46, 0x68, 0x31, 0x43, 0x41, 0x60, 0x01, 0x99, + 0x0b, 0x43, 0x18, 0x1c, 0x61, 0x46, 0x08, 0x43, + 0x10, 0x43, 0x01, 0x1c, 0x00, 0x22, 0x02, 0x20, + 0xc7, 0xf7, 0x3c, 0x00, 0x38, 0x14, 0x04, 0x00, + 0x03, 0xfa, 0x1e, 0x4e, 0x40, 0x3e, 0x70, 0x78, + 0xc0, 0x08, 0xc0, 0x00, 0x28, 0x43, 0x70, 0x70, + 0x70, 0x1c, 0x01, 0x78, 0x00, 0xe0, 0x29, 0xe0, + 0x08, 0x25, 0xa9, 0x43, 0x01, 0x70, 0x01, 0x20, + 0xc0, 0x43, 0xb0, 0x80, 0x00, 0x21, 0x01, 0x20, + 0xcf, 0xf7, 0x6c, 0xfc, 0x30, 0x1c, 0x80, 0x30, + 0x81, 0x78, 0x09, 0x09, 0x09, 0x01, 0x81, 0x70, + 0x0f, 0x21, 0x01, 0x70, 0x3c, 0x00, 0x74, 0x14, + 0x04, 0x00, 0x16, 0x4a, 0x69, 0x04, 0x11, 0x60, + 0x51, 0x60, 0x02, 0x9e, 0x10, 0x21, 0x32, 0x7a, + 0x7b, 0x6a, 0x00, 0x2b, 0x00, 0xd1, 0x00, 0x21, + 0x11, 0x43, 0x21, 0x73, 0x81, 0x78, 0x29, 0x43, + 0x81, 0x70, 0xe0, 0x78, 0x01, 0x21, 0x08, 0x43, + 0xe0, 0x70, 0xd2, 0xf7, 0xf2, 0xf9, 0x01, 0x20, + 0x00, 0x90, 0x00, 0x98, 0xfe, 0xbd, 0xc0, 0x57, + 0x01, 0x00, 0x6c, 0x43, 0x01, 0x00, 0x3c, 0x00, + 0xb0, 0x14, 0x04, 0x00, 0xa4, 0x6c, 0x01, 0x00, + 0x40, 0x90, 0x07, 0x00, 0xc9, 0x1d, 0x00, 0x00, + 0x81, 0x1d, 0x00, 0x00, 0xa5, 0x1d, 0x00, 0x00, + 0x99, 0x1d, 0x00, 0x00, 0xf1, 0x1d, 0x00, 0x00, + 0x10, 0x00, 0x07, 0x00, 0x00, 0x10, 0x07, 0x00, + 0x03, 0x49, 0x00, 0x20, 0x88, 0x62, 0x08, 0x70, + 0x48, 0x70, 0x08, 0x71, 0x08, 0x62, 0x70, 0x47, + 0xac, 0x7e, 0x01, 0x00, 0x80, 0xb5, 0x01, 0x21, + 0x3c, 0x00, 0xec, 0x14, 0x04, 0x00, 0x00, 0x20, + 0xcd, 0xf7, 0x69, 0xff, 0x80, 0xbd, 0xb0, 0xb5, + 0x0f, 0x48, 0xc0, 0xf7, 0x18, 0xfc, 0x0e, 0x4d, + 0x03, 0x20, 0x28, 0x70, 0x0d, 0x49, 0x0d, 0x48, + 0x0c, 0x39, 0x48, 0x60, 0x0d, 0x48, 0x0a, 0x4c, + 0x88, 0x60, 0x40, 0x21, 0x18, 0x34, 0x20, 0x1c, + 0xbe, 0xf7, 0xc1, 0xff, 0xff, 0x21, 0x68, 0x68, + 0x09, 0x06, 0x08, 0x43, 0x20, 0x60, 0xff, 0x21, + 0x06, 0x22, 0x3c, 0x00, 0x28, 0x15, 0x04, 0x00, + 0x20, 0x1d, 0xbf, 0xf7, 0x79, 0xf8, 0x01, 0x20, + 0xe0, 0x60, 0xb0, 0xbd, 0xc0, 0xa8, 0x13, 0x0a, + 0x20, 0x6e, 0x01, 0x00, 0xc0, 0xa8, 0x13, 0x01, + 0xff, 0xff, 0xff, 0x00, 0x80, 0xb5, 0x02, 0x49, + 0x01, 0x20, 0xc8, 0xf7, 0x45, 0xff, 0x80, 0xbd, + 0x9d, 0x1c, 0x00, 0x00, 0x98, 0xb5, 0x0c, 0x4c, + 0x00, 0x20, 0x60, 0x60, 0xe0, 0x60, 0x0b, 0x4b, + 0x0b, 0x49, 0x82, 0x00, 0x3c, 0x00, 0x64, 0x15, + 0x04, 0x00, 0x01, 0x30, 0x20, 0x28, 0x99, 0x50, + 0xfa, 0xdb, 0x6a, 0x46, 0x09, 0x49, 0x05, 0x20, + 0xbf, 0xf7, 0x2f, 0xfd, 0x00, 0x20, 0xc0, 0x43, + 0x20, 0x60, 0x06, 0x49, 0x20, 0x20, 0x08, 0x60, + 0x48, 0x60, 0x98, 0xbd, 0x00, 0x00, 0x00, 0x40, + 0x07, 0x00, 0x30, 0x74, 0x01, 0x00, 0xa9, 0x75, + 0x00, 0x00, 0xb5, 0x9f, 0x00, 0x00, 0x00, 0x10, + 0x07, 0x00, 0x05, 0x49, 0x00, 0x20, 0x3c, 0x00, + 0xa0, 0x15, 0x04, 0x00, 0x08, 0x60, 0x05, 0x48, + 0x81, 0x78, 0x28, 0x22, 0x91, 0x43, 0x81, 0x70, + 0x81, 0x78, 0x11, 0x43, 0x81, 0x70, 0x70, 0x47, + 0x78, 0x6e, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x70, 0x47, 0x00, 0x00, 0x41, 0x48, 0x10, 0xb5, + 0x00, 0x68, 0x02, 0x21, 0x88, 0x43, 0x3f, 0x49, + 0x08, 0x60, 0x08, 0x1c, 0x00, 0x68, 0x02, 0x21, + 0x08, 0x43, 0x3c, 0x49, 0x08, 0x60, 0x3c, 0x48, + 0x3c, 0x00, 0xdc, 0x15, 0x04, 0x00, 0x40, 0x68, + 0x80, 0x21, 0x88, 0x43, 0x3a, 0x49, 0x48, 0x60, + 0x08, 0x1c, 0x00, 0x68, 0x80, 0x21, 0x08, 0x43, + 0x37, 0x49, 0x08, 0x60, 0x37, 0x48, 0x01, 0x7a, + 0x01, 0x24, 0x21, 0x43, 0x01, 0x72, 0x01, 0x7a, + 0x02, 0x22, 0x11, 0x43, 0x01, 0x72, 0x01, 0x7a, + 0x04, 0x22, 0x91, 0x43, 0x01, 0x72, 0x01, 0x7a, + 0x08, 0x22, 0x11, 0x43, 0x01, 0x72, 0x01, 0x7b, + 0x21, 0x43, 0x3c, 0x00, 0x18, 0x16, 0x04, 0x00, + 0x01, 0x73, 0x01, 0x7b, 0x02, 0x22, 0x11, 0x43, + 0x01, 0x73, 0x01, 0x7b, 0x04, 0x22, 0x11, 0x43, + 0x01, 0x73, 0x01, 0x7b, 0x08, 0x22, 0x11, 0x43, + 0x01, 0x73, 0x2e, 0x21, 0x41, 0x73, 0x81, 0x7b, + 0x38, 0x22, 0x91, 0x43, 0x28, 0x31, 0x81, 0x73, + 0x20, 0x21, 0x41, 0x74, 0x81, 0x7b, 0xc9, 0x08, + 0xc9, 0x00, 0x03, 0x31, 0x81, 0x73, 0x22, 0x21, + 0xc1, 0x73, 0x20, 0x49, 0x3c, 0x00, 0x54, 0x16, + 0x04, 0x00, 0x09, 0x7a, 0x41, 0x72, 0x1e, 0x49, + 0x49, 0x7a, 0x01, 0x74, 0x3c, 0x22, 0x02, 0x77, + 0x01, 0x1c, 0x10, 0x31, 0x4a, 0x73, 0x50, 0x23, + 0x8b, 0x73, 0x5a, 0x23, 0xcb, 0x73, 0x0d, 0x23, + 0x01, 0x1c, 0x20, 0x31, 0x0b, 0x70, 0x17, 0x4b, + 0x43, 0x84, 0x0e, 0x23, 0x4b, 0x70, 0x00, 0x21, + 0x41, 0x82, 0x30, 0x21, 0x01, 0x70, 0x05, 0x21, + 0x41, 0x70, 0x04, 0x21, 0x41, 0x71, 0x3c, 0x00, + 0x90, 0x16, 0x04, 0x00, 0x84, 0x71, 0xc4, 0x71, + 0x0c, 0x21, 0x01, 0x71, 0xf8, 0x21, 0x41, 0x80, + 0x0f, 0x49, 0xca, 0x72, 0x8a, 0x72, 0x03, 0x22, + 0x0a, 0x72, 0x09, 0x22, 0x4a, 0x72, 0x08, 0x22, + 0x0a, 0x73, 0x02, 0x7a, 0x40, 0x23, 0x1a, 0x43, + 0x02, 0x72, 0x4c, 0x73, 0xff, 0xf7, 0xa2, 0xfc, + 0x08, 0x48, 0x01, 0x78, 0x21, 0x43, 0x01, 0x70, + 0x10, 0xbd, 0x00, 0x00, 0xf0, 0x00, 0x07, 0x00, + 0x3c, 0x00, 0xcc, 0x16, 0x04, 0x00, 0xf4, 0x00, + 0x07, 0x00, 0x0c, 0x80, 0x07, 0x00, 0x76, 0x46, + 0x01, 0x00, 0x24, 0x09, 0x00, 0x00, 0x80, 0x80, + 0x07, 0x00, 0xa0, 0x80, 0x07, 0x00, 0x80, 0xb5, + 0x18, 0x21, 0x09, 0x48, 0xbe, 0xf7, 0xd7, 0xfe, + 0x08, 0x48, 0x00, 0x21, 0x3c, 0x38, 0x41, 0x60, + 0x81, 0x60, 0xc1, 0x60, 0x01, 0x61, 0x41, 0x61, + 0x81, 0x61, 0x01, 0x21, 0x01, 0x62, 0xff, 0xf7, + 0x5c, 0xff, 0x3c, 0x00, 0x08, 0x17, 0x04, 0x00, + 0xc0, 0xf7, 0x6c, 0xff, 0x80, 0xbd, 0x00, 0x00, + 0x24, 0x7e, 0x01, 0x00, 0xb0, 0xb5, 0x21, 0x48, + 0x00, 0x68, 0x40, 0x08, 0x1f, 0x49, 0x40, 0x00, + 0x08, 0x60, 0x08, 0x1c, 0x00, 0x68, 0x01, 0x21, + 0x08, 0x43, 0x1c, 0x49, 0x08, 0x60, 0x1c, 0x4a, + 0x10, 0x79, 0x01, 0x21, 0x08, 0x43, 0x10, 0x71, + 0x10, 0x79, 0x02, 0x21, 0x88, 0x43, 0x10, 0x71, + 0x00, 0xf0, 0x6c, 0xf8, 0x3c, 0x00, 0x44, 0x17, + 0x04, 0x00, 0x10, 0x7a, 0x01, 0x21, 0x08, 0x43, + 0x10, 0x72, 0x10, 0x7a, 0xfe, 0x21, 0x88, 0x43, + 0x0a, 0x30, 0x10, 0x72, 0x28, 0x20, 0x90, 0x72, + 0x5a, 0x20, 0xd0, 0x72, 0x11, 0x4d, 0x14, 0x20, + 0x28, 0x77, 0x2c, 0x1c, 0x10, 0x34, 0xa0, 0x73, + 0x16, 0x20, 0xa8, 0x75, 0x18, 0x20, 0xe8, 0x75, + 0xff, 0xf7, 0xa1, 0xfc, 0x0c, 0x48, 0x68, 0x86, + 0xe0, 0x7b, 0x40, 0x06, 0x40, 0x0e, 0x3c, 0x00, + 0x80, 0x17, 0x04, 0x00, 0x0e, 0x21, 0x08, 0x43, + 0xe0, 0x73, 0xe0, 0x7b, 0x80, 0x21, 0x08, 0x43, + 0xe0, 0x73, 0x07, 0x48, 0x41, 0x79, 0x04, 0x22, + 0x11, 0x43, 0x41, 0x71, 0xb0, 0xbd, 0x00, 0x00, + 0xf0, 0x00, 0x07, 0x00, 0x00, 0x80, 0x07, 0x00, + 0x30, 0x80, 0x07, 0x00, 0xff, 0x01, 0x00, 0x00, + 0x50, 0x00, 0x07, 0x00, 0x80, 0xb5, 0xff, 0xf7, + 0xaf, 0xff, 0x00, 0x20, 0x14, 0x49, 0xc0, 0x43, + 0x3c, 0x00, 0xbc, 0x17, 0x04, 0x00, 0x88, 0x60, + 0xc1, 0xf7, 0x0b, 0xf9, 0x13, 0x49, 0x00, 0x20, + 0x48, 0x62, 0xc8, 0x60, 0x48, 0x61, 0x08, 0x61, + 0x88, 0x61, 0xc8, 0x61, 0x0f, 0x4b, 0x08, 0x62, + 0x0f, 0x4a, 0x08, 0x63, 0x38, 0x33, 0x1a, 0x80, + 0x01, 0x22, 0x5a, 0x71, 0x0b, 0x4a, 0x40, 0x32, + 0xd0, 0x60, 0x13, 0x60, 0x08, 0x23, 0x13, 0x81, + 0x50, 0x60, 0x09, 0x4a, 0x8a, 0x62, 0xff, 0x22, + 0x0a, 0x70, 0x3c, 0x00, 0xf8, 0x17, 0x04, 0x00, + 0x48, 0x70, 0x05, 0x48, 0x00, 0x21, 0x00, 0x22, + 0x50, 0x30, 0x00, 0x23, 0x0e, 0xc0, 0xc1, 0xf7, + 0xff, 0xf8, 0x80, 0xbd, 0x00, 0x30, 0x07, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0xbe, 0xba, 0x00, 0x00, + 0x85, 0x75, 0x00, 0x00, 0x03, 0x48, 0x10, 0x21, + 0x81, 0x71, 0x02, 0x21, 0xc1, 0x71, 0x30, 0x21, + 0x41, 0x72, 0x70, 0x47, 0x00, 0x80, 0x07, 0x00, + 0x70, 0x47, 0x00, 0x00, 0x3c, 0x00, 0x34, 0x18, + 0x04, 0x00, 0x00, 0xb5, 0xc1, 0xf7, 0xdb, 0xfb, + 0x00, 0xbd, 0x70, 0x47, 0x00, 0x00, 0x80, 0xb5, + 0xcd, 0xf7, 0x87, 0xfd, 0x01, 0x49, 0x88, 0x60, + 0x80, 0xbd, 0x50, 0xd9, 0x01, 0x00, 0x80, 0xb5, + 0x06, 0x21, 0x05, 0x48, 0xbe, 0xf7, 0xfd, 0xfd, + 0x04, 0x49, 0x00, 0x20, 0x04, 0x39, 0x08, 0x60, + 0x00, 0xf0, 0x67, 0xf8, 0x00, 0xf0, 0x03, 0xf8, + 0x80, 0xbd, 0xec, 0x67, 0x01, 0x00, 0x3c, 0x00, + 0x70, 0x18, 0x04, 0x00, 0x10, 0xb5, 0x07, 0x4c, + 0x2c, 0x21, 0x20, 0x1c, 0xbe, 0xf7, 0x10, 0xfe, + 0x01, 0x20, 0x20, 0x70, 0x03, 0x49, 0x00, 0x20, + 0x1c, 0x39, 0xc8, 0x60, 0x08, 0x61, 0x88, 0x61, + 0x10, 0xbd, 0x00, 0x00, 0x78, 0x69, 0x01, 0x00, + 0x80, 0xb5, 0xcd, 0xf7, 0x5d, 0xfd, 0x09, 0x49, + 0x88, 0x60, 0x09, 0x49, 0x08, 0x20, 0xd0, 0xf7, + 0x73, 0xfd, 0x08, 0x49, 0x09, 0x20, 0xd0, 0xf7, + 0x3c, 0x00, 0xac, 0x18, 0x04, 0x00, 0x6f, 0xfd, + 0x07, 0x49, 0x11, 0x20, 0xd0, 0xf7, 0x6b, 0xfd, + 0x06, 0x48, 0xc2, 0xf7, 0x74, 0xf9, 0x80, 0xbd, + 0x00, 0x00, 0x78, 0x69, 0x01, 0x00, 0x21, 0x35, + 0x00, 0x00, 0xa1, 0x38, 0x00, 0x00, 0x45, 0x34, + 0x00, 0x00, 0xbd, 0x26, 0x01, 0x00, 0x80, 0xb5, + 0x86, 0xb0, 0x0f, 0x48, 0xc4, 0xf7, 0x45, 0xf9, + 0x00, 0xf0, 0x45, 0xf8, 0xff, 0xf7, 0xd7, 0xff, + 0xff, 0xf7, 0x3c, 0x00, 0xe8, 0x18, 0x04, 0x00, + 0xab, 0xff, 0x0c, 0x49, 0x03, 0x20, 0xd0, 0xf7, + 0x4d, 0xfd, 0x0b, 0x48, 0x69, 0x46, 0x00, 0x90, + 0x00, 0x20, 0x01, 0x90, 0x09, 0x48, 0x04, 0x90, + 0x09, 0x48, 0x02, 0x90, 0x09, 0x48, 0x03, 0x90, + 0x09, 0x48, 0x05, 0x90, 0x00, 0x20, 0xc4, 0xf7, + 0xcf, 0xf8, 0x06, 0xb0, 0x80, 0xbd, 0x00, 0x00, + 0xf4, 0x67, 0x01, 0x00, 0x45, 0x35, 0x00, 0x00, + 0x95, 0x32, 0x00, 0x00, 0x3c, 0x00, 0x24, 0x19, + 0x04, 0x00, 0xa0, 0x7d, 0x01, 0x00, 0xfd, 0x32, + 0x00, 0x00, 0xcd, 0x31, 0x00, 0x00, 0x45, 0x7d, + 0x01, 0x00, 0x10, 0xb5, 0xcd, 0xf7, 0xd5, 0xfc, + 0x09, 0x48, 0x09, 0x4c, 0x30, 0x21, 0x60, 0x61, + 0x08, 0x48, 0x74, 0x30, 0xbe, 0xf7, 0xa9, 0xfd, + 0x00, 0x20, 0xa0, 0x62, 0x06, 0x49, 0x20, 0x61, + 0xe1, 0x63, 0x60, 0x64, 0xa0, 0x64, 0x14, 0x21, + 0x21, 0x65, 0x60, 0x62, 0x10, 0xbd, 0x3c, 0x00, + 0x60, 0x19, 0x04, 0x00, 0xb9, 0x75, 0x00, 0x00, + 0x44, 0x7d, 0x01, 0x00, 0x70, 0x17, 0x00, 0x00, + 0x80, 0xb5, 0x02, 0x21, 0x09, 0x20, 0x04, 0x4a, + 0xd1, 0xf7, 0xe8, 0xfe, 0xcd, 0xf7, 0xec, 0xfc, + 0x02, 0x49, 0x08, 0x63, 0x80, 0xbd, 0x00, 0x00, + 0x39, 0x39, 0x00, 0x00, 0x44, 0x7d, 0x01, 0x00, + 0x80, 0xb5, 0xac, 0x21, 0x03, 0x48, 0xbe, 0xf7, + 0x83, 0xfd, 0x00, 0xf0, 0x51, 0xf8, 0x00, 0xf0, + 0x3c, 0x00, 0x9c, 0x19, 0x04, 0x00, 0x49, 0xf8, + 0x80, 0xbd, 0xa4, 0x6c, 0x01, 0x00, 0x08, 0xb5, + 0x00, 0xf0, 0x4d, 0xf8, 0x00, 0xf0, 0x45, 0xf8, + 0x00, 0x21, 0x16, 0x20, 0x18, 0x4a, 0xd1, 0xf7, + 0xc8, 0xfe, 0x17, 0x4a, 0x04, 0x21, 0x10, 0x1c, + 0x40, 0x30, 0x01, 0x70, 0x00, 0x21, 0x81, 0x70, + 0x11, 0x21, 0xc1, 0x80, 0x14, 0x49, 0x01, 0x81, + 0x10, 0x1c, 0x80, 0x30, 0xc1, 0x78, 0x08, 0x22, + 0x91, 0x43, 0x3c, 0x00, 0xd8, 0x19, 0x04, 0x00, + 0xc1, 0x70, 0xc1, 0x78, 0x11, 0x43, 0xc1, 0x70, + 0x6a, 0x46, 0x0f, 0x49, 0x14, 0x20, 0xbf, 0xf7, + 0xf5, 0xfa, 0x0e, 0x49, 0x07, 0x20, 0xd0, 0xf7, + 0xcd, 0xfc, 0x0d, 0x49, 0x0f, 0x20, 0xd0, 0xf7, + 0xc9, 0xfc, 0xcd, 0xf7, 0xab, 0xfc, 0x0b, 0x49, + 0x08, 0x60, 0x0a, 0x48, 0x44, 0x38, 0x80, 0x68, + 0x00, 0x28, 0x02, 0xd0, 0x00, 0x20, 0xc6, 0xf7, + 0x6f, 0xf9, 0x08, 0xbd, 0x3c, 0x00, 0x14, 0x1a, + 0x04, 0x00, 0xb5, 0x3b, 0x00, 0x00, 0x00, 0x90, + 0x07, 0x00, 0xe7, 0xfd, 0x00, 0x00, 0x8d, 0x41, + 0x00, 0x00, 0xcd, 0x48, 0x00, 0x00, 0xd9, 0x49, + 0x00, 0x00, 0xa4, 0x6c, 0x01, 0x00, 0x80, 0xb5, + 0x00, 0xf0, 0x6f, 0xfc, 0x80, 0xbd, 0x70, 0x47, + 0x00, 0x00, 0x80, 0xb5, 0x00, 0xf0, 0x61, 0xfc, + 0x80, 0xbd, 0x70, 0x47, 0x00, 0x00, 0xb0, 0xb5, + 0x30, 0x21, 0x0c, 0x48, 0xbe, 0xf7, 0x3c, 0x00, + 0x50, 0x1a, 0x04, 0x00, 0x25, 0xfd, 0x0b, 0x4c, + 0x00, 0x25, 0x0a, 0x48, 0x84, 0x3c, 0x38, 0x22, + 0x03, 0x21, 0x70, 0x38, 0x65, 0x60, 0xbe, 0xf7, + 0xdd, 0xfd, 0x06, 0x48, 0x38, 0x22, 0x01, 0x21, + 0x38, 0x38, 0xbe, 0xf7, 0xd7, 0xfd, 0x0e, 0x20, + 0xa5, 0x60, 0x60, 0x70, 0x20, 0x70, 0x00, 0xf0, + 0x1d, 0xf8, 0xb0, 0xbd, 0x94, 0x67, 0x01, 0x00, + 0x04, 0x49, 0x00, 0xb5, 0x01, 0x20, 0x48, 0x60, + 0x3c, 0x00, 0x8c, 0x1a, 0x04, 0x00, 0x88, 0x60, + 0xc8, 0x60, 0xc3, 0xf7, 0xf8, 0xff, 0x00, 0xbd, + 0x00, 0x00, 0xd4, 0x67, 0x01, 0x00, 0x80, 0xb5, + 0x02, 0x21, 0x0a, 0x20, 0x02, 0x4a, 0xd1, 0xf7, + 0x50, 0xfe, 0x80, 0xbd, 0x00, 0x00, 0x1d, 0x5a, + 0x00, 0x00, 0x80, 0xb5, 0x00, 0xf0, 0x05, 0xf8, + 0x80, 0xbd, 0x80, 0xb5, 0x00, 0xf0, 0xfd, 0xfb, + 0x80, 0xbd, 0x80, 0xb5, 0x02, 0x49, 0x04, 0x20, + 0xd0, 0xf7, 0x3c, 0x00, 0xc8, 0x1a, 0x04, 0x00, + 0x61, 0xfc, 0x80, 0xbd, 0x65, 0x1f, 0x00, 0x00, + 0x00, 0x21, 0x17, 0x48, 0xc9, 0x43, 0x80, 0xb5, + 0x16, 0x4b, 0x01, 0x70, 0x18, 0x1c, 0x10, 0x22, + 0x20, 0x30, 0x02, 0x71, 0x00, 0x22, 0x10, 0x33, + 0x9a, 0x73, 0x42, 0x79, 0x04, 0x23, 0x1a, 0x43, + 0x42, 0x71, 0x42, 0x79, 0x18, 0x23, 0x9a, 0x43, + 0x08, 0x32, 0x42, 0x71, 0x08, 0x1c, 0xd7, 0xf7, + 0x59, 0xf8, 0x00, 0x28, 0x3c, 0x00, 0x04, 0x1b, + 0x04, 0x00, 0x03, 0xd1, 0x01, 0x21, 0x9a, 0x20, + 0xbf, 0xf7, 0xcb, 0xfb, 0x50, 0x20, 0x09, 0x49, + 0x50, 0x22, 0x0a, 0x60, 0xc8, 0x60, 0x88, 0x60, + 0x48, 0x60, 0x08, 0x61, 0x01, 0x20, 0x48, 0x61, + 0x00, 0x20, 0xd7, 0xf7, 0xd8, 0xf8, 0x04, 0x49, + 0xff, 0x20, 0x08, 0x60, 0x80, 0xbd, 0xf4, 0x6b, + 0x01, 0x00, 0x30, 0x00, 0x07, 0x00, 0x04, 0x02, + 0x07, 0x00, 0xf4, 0x74, 0x01, 0x00, 0x3c, 0x00, + 0x40, 0x1b, 0x04, 0x00, 0x80, 0xb5, 0xd7, 0xf7, + 0xfb, 0xf8, 0x80, 0xbd, 0x10, 0xb5, 0xff, 0xf7, + 0xab, 0xfb, 0xbf, 0xf7, 0xdd, 0xfb, 0x81, 0x48, + 0xcd, 0xf7, 0x98, 0xfa, 0x00, 0x24, 0x23, 0x1c, + 0x04, 0x22, 0x04, 0x21, 0x00, 0x20, 0x01, 0xf0, + 0x39, 0xfa, 0x00, 0x28, 0x01, 0xd0, 0xbf, 0xf7, + 0xc9, 0xfb, 0x23, 0x1c, 0x00, 0x22, 0xff, 0x21, + 0x00, 0x20, 0x01, 0xf0, 0x2f, 0xfa, 0x00, 0x28, + 0x3c, 0x00, 0x7c, 0x1b, 0x04, 0x00, 0x01, 0xd0, + 0xbf, 0xf7, 0xbf, 0xfb, 0x23, 0x1c, 0x00, 0x22, + 0xff, 0x21, 0x00, 0x20, 0x01, 0xf0, 0x25, 0xfa, + 0x00, 0x28, 0x01, 0xd0, 0xbf, 0xf7, 0xb5, 0xfb, + 0xc4, 0xf7, 0x27, 0xff, 0x70, 0x48, 0x84, 0x70, + 0x6f, 0x49, 0x7f, 0x20, 0x88, 0x70, 0x6e, 0x49, + 0x0c, 0x60, 0x03, 0x20, 0x08, 0x60, 0x6b, 0x48, + 0x44, 0x70, 0x6c, 0x48, 0x04, 0x80, 0x69, 0x48, + 0xc0, 0x78, 0x3c, 0x00, 0xb8, 0x1b, 0x04, 0x00, + 0x08, 0x21, 0x08, 0x43, 0x67, 0x49, 0xc8, 0x70, + 0x08, 0x1c, 0xc0, 0x78, 0x04, 0x21, 0x08, 0x43, + 0x64, 0x49, 0xc8, 0x70, 0x01, 0xf0, 0x7e, 0xfa, + 0xff, 0xf7, 0x7e, 0xff, 0xff, 0xf7, 0x2c, 0xfe, + 0x01, 0xf0, 0x46, 0xfb, 0xff, 0xf7, 0x18, 0xfb, + 0x01, 0xf0, 0x52, 0xfa, 0xff, 0xf7, 0x82, 0xfb, + 0x5f, 0x48, 0xc1, 0x68, 0x10, 0x22, 0x91, 0x43, + 0xc1, 0x60, 0x01, 0x69, 0x3c, 0x00, 0xf4, 0x1b, + 0x04, 0x00, 0x5d, 0x4a, 0x11, 0x43, 0x01, 0x61, + 0x01, 0x69, 0xd2, 0x0a, 0x91, 0x43, 0x01, 0x61, + 0xc1, 0x68, 0x5a, 0x4a, 0x11, 0x43, 0xc1, 0x60, + 0x81, 0x6a, 0x59, 0x4a, 0x11, 0x43, 0x81, 0x62, + 0x00, 0xf0, 0x77, 0xf9, 0x01, 0xf0, 0x1f, 0xf8, + 0x00, 0xf0, 0x93, 0xfa, 0x01, 0xf0, 0x99, 0xfb, + 0x00, 0xf0, 0xf1, 0xff, 0x00, 0xf0, 0x99, 0xfc, + 0x00, 0xf0, 0xdd, 0xfc, 0x00, 0xf0, 0x3c, 0x00, + 0x30, 0x1c, 0x04, 0x00, 0x83, 0xfc, 0xff, 0xf7, + 0xb3, 0xfc, 0x01, 0xf0, 0x31, 0xfa, 0x01, 0xf0, + 0x71, 0xfa, 0xff, 0xf7, 0x87, 0xfa, 0xff, 0xf7, + 0x9b, 0xfa, 0x01, 0x21, 0x01, 0x20, 0x4b, 0x4a, + 0xd1, 0xf7, 0x7c, 0xfd, 0x01, 0x21, 0x02, 0x20, + 0x49, 0x4a, 0xd1, 0xf7, 0x77, 0xfd, 0x02, 0x21, + 0x03, 0x20, 0x48, 0x4a, 0xd1, 0xf7, 0x72, 0xfd, + 0x02, 0x21, 0x04, 0x20, 0x46, 0x4a, 0xd1, 0xf7, + 0x3c, 0x00, 0x6c, 0x1c, 0x04, 0x00, 0x6d, 0xfd, + 0x02, 0x21, 0x05, 0x20, 0x45, 0x4a, 0xd1, 0xf7, + 0x68, 0xfd, 0x02, 0x21, 0x06, 0x20, 0x43, 0x4a, + 0xd1, 0xf7, 0x63, 0xfd, 0x01, 0x21, 0x07, 0x20, + 0x42, 0x4a, 0xd1, 0xf7, 0x5e, 0xfd, 0x02, 0x21, + 0x17, 0x20, 0x40, 0x4a, 0xd1, 0xf7, 0x59, 0xfd, + 0x02, 0x21, 0x08, 0x20, 0x3f, 0x4a, 0xd1, 0xf7, + 0x54, 0xfd, 0xff, 0xf7, 0xc8, 0xfd, 0x3d, 0x48, + 0x04, 0x60, 0x3c, 0x00, 0xa8, 0x1c, 0x04, 0x00, + 0x44, 0x60, 0xff, 0xf7, 0x17, 0xfa, 0xff, 0xf7, + 0x09, 0xfa, 0xff, 0xf7, 0x4f, 0xfc, 0x00, 0xf0, + 0x43, 0xf9, 0xff, 0xf7, 0x33, 0xfa, 0xff, 0xf7, + 0xfb, 0xfa, 0x01, 0xf0, 0x85, 0xf8, 0x01, 0xf0, + 0xeb, 0xf9, 0x01, 0xf0, 0x23, 0xfa, 0x01, 0xf0, + 0x71, 0xf9, 0x00, 0xf0, 0xe3, 0xff, 0xff, 0xf7, + 0x6f, 0xfa, 0x00, 0xf0, 0xaf, 0xf9, 0x00, 0xf0, + 0xbd, 0xf9, 0x00, 0xf0, 0x3c, 0x00, 0xe4, 0x1c, + 0x04, 0x00, 0xad, 0xfc, 0x00, 0xf0, 0x9b, 0xfe, + 0xff, 0xf7, 0xcd, 0xfa, 0xff, 0xf7, 0xab, 0xfe, + 0x00, 0xf0, 0xc3, 0xf9, 0xff, 0xf7, 0xab, 0xfd, + 0x00, 0xf0, 0x8d, 0xff, 0x00, 0xf0, 0x21, 0xff, + 0x00, 0xf0, 0x65, 0xf9, 0x00, 0xf0, 0x97, 0xf9, + 0x00, 0xf0, 0xfd, 0xfe, 0x00, 0xf0, 0xe5, 0xfe, + 0x00, 0xf0, 0x3f, 0xf9, 0x00, 0xf0, 0x73, 0xf9, + 0xff, 0xf7, 0x37, 0xfe, 0x00, 0xf0, 0x3c, 0x00, + 0x20, 0x1d, 0x04, 0x00, 0x21, 0xf9, 0x00, 0xf0, + 0x73, 0xfb, 0xff, 0xf7, 0xe5, 0xfb, 0x00, 0xf0, + 0xd3, 0xfb, 0xff, 0xf7, 0xa9, 0xfe, 0x00, 0xf0, + 0xbb, 0xfb, 0x00, 0xf0, 0x09, 0xff, 0x00, 0xf0, + 0xdb, 0xf9, 0x18, 0x48, 0xc9, 0xf7, 0x56, 0xf8, + 0x17, 0x48, 0xc9, 0xf7, 0x2b, 0xf8, 0x00, 0x22, + 0x01, 0x21, 0xf0, 0x20, 0xd1, 0xf7, 0x2e, 0xfd, + 0x00, 0x20, 0x10, 0xbd, 0xa9, 0x69, 0x00, 0x00, + 0x3c, 0x00, 0x5c, 0x1d, 0x04, 0x00, 0x00, 0x00, + 0x07, 0x00, 0xf0, 0x00, 0x07, 0x00, 0x2c, 0x00, + 0x07, 0x00, 0x00, 0x10, 0x07, 0x00, 0x3c, 0x00, + 0x08, 0x00, 0xc0, 0x3f, 0x74, 0x38, 0xfc, 0xdf, + 0x7f, 0x38, 0x55, 0x69, 0x00, 0x00, 0xe5, 0x13, + 0x00, 0x00, 0x61, 0x0c, 0x00, 0x00, 0x6d, 0x0c, + 0x00, 0x00, 0x3d, 0x0c, 0x00, 0x00, 0xf1, 0x0d, + 0x00, 0x00, 0xc5, 0x33, 0x00, 0x00, 0x3d, 0x0f, + 0x00, 0x00, 0x3c, 0x00, 0x98, 0x1d, 0x04, 0x00, + 0xad, 0xd8, 0x00, 0x00, 0x80, 0x00, 0x07, 0x00, + 0x50, 0x57, 0x01, 0x00, 0x04, 0x40, 0x01, 0x00, + 0x80, 0xb5, 0x01, 0xf0, 0xa9, 0xf9, 0x00, 0xf0, + 0xc9, 0xf8, 0xff, 0xf7, 0xc5, 0xfe, 0x01, 0xf0, + 0x03, 0xfb, 0x01, 0xf0, 0x93, 0xfa, 0xff, 0xf7, + 0xcb, 0xf9, 0x2c, 0x48, 0xff, 0xf7, 0xe8, 0xf9, + 0x00, 0xf0, 0xaa, 0xf8, 0x00, 0xf0, 0x58, 0xff, + 0xff, 0xf7, 0x34, 0xfd, 0x3c, 0x00, 0xd4, 0x1d, + 0x04, 0x00, 0xff, 0xf7, 0xf2, 0xfb, 0xff, 0xf7, + 0x7a, 0xfa, 0xff, 0xf7, 0x00, 0xfa, 0x00, 0xf0, + 0x34, 0xf9, 0x00, 0xf0, 0x3c, 0xf9, 0x01, 0xf0, + 0xe2, 0xf8, 0xff, 0xf7, 0x7a, 0xf9, 0xff, 0xf7, + 0x72, 0xf9, 0xff, 0xf7, 0x9a, 0xf9, 0x01, 0xf0, + 0x66, 0xf9, 0x01, 0xf0, 0x8e, 0xf9, 0x01, 0xf0, + 0xe0, 0xf8, 0x00, 0xf0, 0x06, 0xff, 0x00, 0xf0, + 0xf0, 0xfb, 0x00, 0xf0, 0x46, 0xfb, 0x3c, 0x00, + 0x10, 0x1e, 0x04, 0x00, 0x00, 0xf0, 0xbc, 0xff, + 0x00, 0xf0, 0xe4, 0xfc, 0x00, 0xf0, 0x20, 0xfe, + 0xff, 0xf7, 0x40, 0xfa, 0xff, 0xf7, 0x46, 0xfe, + 0xff, 0xf7, 0x56, 0xfd, 0x00, 0xf0, 0x2c, 0xf9, + 0x00, 0xf0, 0xfa, 0xfe, 0x00, 0xf0, 0x8a, 0xfe, + 0x00, 0xf0, 0xd4, 0xf8, 0x00, 0xf0, 0xb4, 0xf8, + 0x00, 0xf0, 0x78, 0xfe, 0x00, 0xf0, 0x4e, 0xfe, + 0x00, 0xf0, 0xde, 0xf8, 0xff, 0xf7, 0xac, 0xfd, + 0x3c, 0x00, 0x4c, 0x1e, 0x04, 0x00, 0x00, 0xf0, + 0x8c, 0xf8, 0x00, 0xf0, 0xf8, 0xfa, 0xff, 0xf7, + 0x76, 0xfb, 0xff, 0xf7, 0x20, 0xfe, 0x01, 0xf0, + 0xa6, 0xfa, 0x00, 0xf0, 0x48, 0xfb, 0x00, 0xf0, + 0x7c, 0xfe, 0x00, 0xf0, 0x5c, 0xf9, 0xbe, 0xf7, + 0x57, 0xfd, 0x00, 0x20, 0x80, 0xbd, 0x80, 0x38, + 0x01, 0x00, 0x01, 0x49, 0x00, 0x20, 0x08, 0x60, + 0x70, 0x47, 0xa8, 0x7e, 0x01, 0x00, 0x10, 0xb5, + 0x04, 0x1c, 0x3c, 0x00, 0x88, 0x1e, 0x04, 0x00, + 0x01, 0xd1, 0xbf, 0xf7, 0x39, 0xfa, 0x0f, 0x48, + 0x7d, 0x21, 0xc9, 0x00, 0x84, 0x60, 0x01, 0x80, + 0x0d, 0x49, 0x01, 0x61, 0x80, 0x21, 0x41, 0x80, + 0x00, 0x21, 0xc1, 0x60, 0x01, 0x62, 0x0b, 0x48, + 0x41, 0x80, 0x14, 0x21, 0x81, 0x80, 0x07, 0x21, + 0x41, 0x81, 0x06, 0x4a, 0x46, 0x23, 0x04, 0x32, + 0x05, 0x24, 0x13, 0x70, 0x54, 0x70, 0x0a, 0x21, + 0x91, 0x70, 0x81, 0x76, 0x3c, 0x00, 0xc4, 0x1e, + 0x04, 0x00, 0x03, 0x76, 0x04, 0x81, 0x10, 0xbd, + 0x00, 0x00, 0xc8, 0x74, 0x01, 0x00, 0x00, 0x87, + 0x93, 0x03, 0x30, 0x00, 0x07, 0x00, 0x09, 0x48, + 0x80, 0xb5, 0x01, 0x69, 0x42, 0x69, 0x11, 0x43, + 0x82, 0x69, 0xc0, 0x69, 0x11, 0x43, 0x01, 0x43, + 0x00, 0x22, 0x03, 0x20, 0xc6, 0xf7, 0xbf, 0xfc, + 0xcc, 0xf7, 0x1b, 0xfa, 0x00, 0x20, 0xc2, 0xf7, + 0x92, 0xf9, 0x80, 0xbd, 0x00, 0x00, 0x3c, 0x00, + 0x00, 0x1f, 0x04, 0x00, 0xa4, 0x6c, 0x01, 0x00, + 0x05, 0x48, 0x80, 0xb5, 0x00, 0x21, 0x81, 0x60, + 0x02, 0x21, 0xc1, 0x60, 0x03, 0x39, 0x41, 0x60, + 0xc7, 0xf7, 0x3a, 0xff, 0x80, 0xbd, 0x00, 0x00, + 0x40, 0x20, 0x07, 0x00, 0x08, 0xb5, 0x6a, 0x46, + 0x04, 0x49, 0x15, 0x20, 0xbf, 0xf7, 0x54, 0xf8, + 0x01, 0x20, 0x03, 0x49, 0x40, 0x05, 0x08, 0x60, + 0x48, 0x60, 0x08, 0xbd, 0xa5, 0x21, 0x01, 0x00, + 0x3c, 0x00, 0x3c, 0x1f, 0x04, 0x00, 0x00, 0x10, + 0x07, 0x00, 0x70, 0x47, 0x00, 0x00, 0x06, 0x48, + 0x80, 0xb5, 0x80, 0x68, 0xc0, 0x01, 0x80, 0x0f, + 0x05, 0xd1, 0x03, 0x22, 0xc1, 0x43, 0xc6, 0xf7, + 0xba, 0xfc, 0xd6, 0xf7, 0x00, 0xfe, 0x80, 0xbd, + 0x00, 0x00, 0x10, 0x00, 0x07, 0x00, 0x70, 0x47, + 0x00, 0x00, 0x80, 0xb5, 0x02, 0x21, 0x2a, 0x20, + 0x06, 0x4a, 0xd1, 0xf7, 0xea, 0xfb, 0x00, 0x22, + 0x07, 0x20, 0x3c, 0x00, 0x78, 0x1f, 0x04, 0x00, + 0x04, 0x49, 0xbe, 0xf7, 0xed, 0xfe, 0x04, 0x48, + 0xc7, 0xf7, 0x58, 0xfc, 0x80, 0xbd, 0x00, 0x00, + 0x8d, 0x89, 0x00, 0x00, 0xd5, 0x9b, 0x00, 0x00, + 0x10, 0x46, 0x01, 0x00, 0x02, 0x48, 0x00, 0x21, + 0x00, 0x22, 0x00, 0x23, 0x0e, 0xc0, 0x70, 0x47, + 0x80, 0x6e, 0x01, 0x00, 0x80, 0xb5, 0x02, 0x21, + 0x2c, 0x20, 0x06, 0x4a, 0xd1, 0xf7, 0xcc, 0xfb, + 0x00, 0x22, 0x00, 0x20, 0x3c, 0x00, 0xb4, 0x1f, + 0x04, 0x00, 0x04, 0x49, 0xbe, 0xf7, 0xcf, 0xfe, + 0x04, 0x49, 0x02, 0x20, 0xc8, 0xf7, 0x0b, 0xfa, + 0x80, 0xbd, 0x05, 0x8a, 0x00, 0x00, 0xe9, 0x9b, + 0x00, 0x00, 0xb1, 0x8b, 0x00, 0x00, 0x02, 0x48, + 0x00, 0x21, 0x00, 0x22, 0x00, 0x23, 0x0e, 0xc0, + 0x70, 0x47, 0x10, 0x75, 0x01, 0x00, 0x80, 0xb5, + 0x02, 0x21, 0x2b, 0x20, 0x04, 0x4a, 0xd1, 0xf7, + 0xae, 0xfb, 0x00, 0x22, 0x02, 0x20, 0x3c, 0x00, + 0xf0, 0x1f, 0x04, 0x00, 0x02, 0x49, 0xbe, 0xf7, + 0xb1, 0xfe, 0x80, 0xbd, 0x2d, 0x8a, 0x00, 0x00, + 0x8d, 0x8c, 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x80, 0xb5, 0x02, 0x21, 0x2d, 0x20, 0x07, 0x4a, + 0xd1, 0xf7, 0x9c, 0xfb, 0x00, 0x22, 0x01, 0x20, + 0x05, 0x49, 0xbe, 0xf7, 0x9f, 0xfe, 0x05, 0x48, + 0xcb, 0xf7, 0x56, 0xfa, 0x04, 0x48, 0xcc, 0xf7, + 0xf7, 0xf8, 0x80, 0xbd, 0xad, 0x8a, 0x00, 0x00, + 0x3c, 0x00, 0x2c, 0x20, 0x04, 0x00, 0x21, 0xe2, + 0x00, 0x00, 0xf9, 0xdf, 0x00, 0x00, 0x20, 0x44, + 0x01, 0x00, 0x70, 0x47, 0x00, 0x00, 0x02, 0x49, + 0x00, 0x20, 0x08, 0x60, 0x01, 0x20, 0x48, 0x60, + 0x70, 0x47, 0xac, 0x79, 0x01, 0x00, 0x80, 0xb5, + 0x02, 0x49, 0x0d, 0x20, 0xd0, 0xf7, 0x9b, 0xf9, + 0x80, 0xbd, 0x61, 0x98, 0x00, 0x00, 0x70, 0x47, + 0x00, 0x00, 0x80, 0xb5, 0xcd, 0xf7, 0x77, 0xf9, + 0x03, 0x49, 0x3c, 0x00, 0x68, 0x20, 0x04, 0x00, + 0x08, 0x60, 0x01, 0x1c, 0x02, 0x48, 0xcd, 0xf7, + 0x97, 0xf9, 0x80, 0xbd, 0xa8, 0x79, 0x01, 0x00, + 0xc4, 0x60, 0x01, 0x00, 0x80, 0xb5, 0x00, 0xf0, + 0x29, 0xf8, 0x80, 0xbd, 0x80, 0xb5, 0x86, 0xb0, + 0x0c, 0x48, 0xc3, 0xf7, 0x6d, 0xfd, 0xd6, 0xf7, + 0xd3, 0xfb, 0x0b, 0x48, 0x0d, 0x49, 0x00, 0x90, + 0x0a, 0x48, 0x04, 0x91, 0x01, 0x90, 0x0a, 0x48, + 0x69, 0x46, 0x02, 0x90, 0x3c, 0x00, 0xa4, 0x20, + 0x04, 0x00, 0x00, 0x20, 0x03, 0x90, 0x05, 0x90, + 0x01, 0x20, 0xc3, 0xf7, 0x00, 0xfd, 0x07, 0x49, + 0x03, 0x20, 0xd0, 0xf7, 0x6a, 0xf9, 0x06, 0xb0, + 0x80, 0xbd, 0x20, 0xf7, 0x01, 0x00, 0x11, 0x87, + 0x01, 0x00, 0x95, 0x87, 0x01, 0x00, 0x55, 0x87, + 0x01, 0x00, 0x98, 0xd9, 0x01, 0x00, 0x6d, 0x87, + 0x01, 0x00, 0x80, 0xb5, 0x01, 0x20, 0xd6, 0xf7, + 0x90, 0xfc, 0x03, 0x49, 0x00, 0x20, 0x3c, 0x00, + 0xe0, 0x20, 0x04, 0x00, 0x08, 0x60, 0x48, 0x60, + 0x02, 0x48, 0x14, 0x39, 0x48, 0x60, 0x80, 0xbd, + 0x90, 0xd9, 0x01, 0x00, 0x3d, 0x82, 0x01, 0x00, + 0x70, 0xb5, 0x00, 0x26, 0x09, 0x4c, 0x09, 0x4d, + 0x26, 0x60, 0x66, 0x60, 0x44, 0x21, 0x50, 0x35, + 0x28, 0x1c, 0xa6, 0x61, 0xbe, 0xf7, 0xc8, 0xf9, + 0x14, 0x20, 0xe0, 0x60, 0xe8, 0x63, 0x28, 0x20, + 0xe8, 0x61, 0xa0, 0x60, 0x28, 0x64, 0x2e, 0x70, + 0x3c, 0x00, 0x1c, 0x21, 0x04, 0x00, 0x70, 0xbd, + 0x00, 0x00, 0xa4, 0x6e, 0x01, 0x00, 0x80, 0xb5, + 0x02, 0x21, 0x18, 0x20, 0x04, 0x4a, 0xd1, 0xf7, + 0x0c, 0xfb, 0x03, 0x49, 0x08, 0x20, 0xd0, 0xf7, + 0x2a, 0xf9, 0x80, 0xbd, 0x00, 0x00, 0x15, 0x9c, + 0x00, 0x00, 0x69, 0x9c, 0x00, 0x00, 0xfe, 0xb5, + 0x26, 0x4d, 0x28, 0x78, 0xc0, 0x07, 0x0c, 0xd4, + 0x25, 0x49, 0x00, 0x20, 0x08, 0x70, 0x28, 0x70, + 0x24, 0x48, 0x3c, 0x00, 0x58, 0x21, 0x04, 0x00, + 0x81, 0x78, 0x49, 0x08, 0x49, 0x00, 0x81, 0x70, + 0x81, 0x78, 0x01, 0x22, 0x11, 0x43, 0x81, 0x70, + 0x00, 0x24, 0xff, 0x26, 0x1f, 0x4f, 0x01, 0x36, + 0x21, 0x1c, 0x01, 0xa8, 0xc6, 0xf7, 0x32, 0xf8, + 0x00, 0xab, 0x18, 0x79, 0x01, 0x28, 0x1f, 0xd0, + 0x02, 0x28, 0x19, 0xd0, 0x03, 0x28, 0x1e, 0xd1, + 0xb8, 0x68, 0x00, 0x21, 0xb0, 0x43, 0xb8, 0x60, + 0x78, 0x68, 0x30, 0x43, 0x3c, 0x00, 0x94, 0x21, + 0x04, 0x00, 0x78, 0x60, 0x3a, 0x68, 0x32, 0x40, + 0xa0, 0x20, 0x05, 0xe0, 0x3b, 0x68, 0x33, 0x40, + 0x93, 0x42, 0x01, 0xd0, 0x01, 0x21, 0x01, 0xe0, + 0x01, 0x38, 0xf7, 0xd2, 0x78, 0x68, 0xb0, 0x43, + 0x78, 0x60, 0x00, 0x29, 0x03, 0xd0, 0x01, 0xa8, + 0x00, 0xf0, 0x27, 0xff, 0x02, 0xe0, 0x01, 0xa8, + 0x00, 0xf0, 0x45, 0xff, 0x01, 0x34, 0x24, 0x06, + 0x24, 0x16, 0x06, 0x2c, 0xcf, 0xdb, 0x3c, 0x00, + 0xd0, 0x21, 0x04, 0x00, 0x04, 0x49, 0x02, 0x22, + 0x08, 0x78, 0x10, 0x43, 0x08, 0x70, 0x28, 0x70, + 0xfe, 0xbd, 0x00, 0x00, 0x04, 0x00, 0x07, 0x00, + 0xe0, 0x60, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x10, 0x00, 0x07, 0x00, 0xb0, 0xb5, 0x00, 0x20, + 0x15, 0x23, 0x14, 0x49, 0x01, 0x25, 0x42, 0x00, + 0x8d, 0x54, 0x52, 0x18, 0x01, 0x30, 0x0e, 0x28, + 0x53, 0x70, 0xf8, 0xd3, 0x0f, 0x48, 0x1c, 0x22, + 0x3c, 0x00, 0x0c, 0x22, 0x04, 0x00, 0x1c, 0x38, + 0xbe, 0xf7, 0x73, 0xf9, 0x0d, 0x48, 0x0e, 0x21, + 0x2a, 0x38, 0xbe, 0xf7, 0x1c, 0xf9, 0x0b, 0x49, + 0x00, 0x20, 0x08, 0x60, 0x0b, 0x4c, 0x2a, 0x21, + 0x20, 0x1c, 0xbe, 0xf7, 0x14, 0xf9, 0x25, 0x70, + 0x0e, 0x20, 0x60, 0x70, 0x17, 0x20, 0xa0, 0x70, + 0x07, 0x48, 0x53, 0x21, 0x01, 0x70, 0x45, 0x21, + 0x41, 0x70, 0x20, 0x21, 0x81, 0x70, 0xb0, 0xbd, + 0x00, 0x00, 0x3c, 0x00, 0x48, 0x22, 0x04, 0x00, + 0xe6, 0x78, 0x01, 0x00, 0xe4, 0x62, 0x01, 0x00, + 0xeb, 0x62, 0x01, 0x00, 0xe8, 0x62, 0x01, 0x00, + 0x0c, 0x49, 0x0d, 0x48, 0x00, 0x22, 0x41, 0x60, + 0x0c, 0x49, 0x81, 0x60, 0x0c, 0x49, 0xc1, 0x60, + 0x0c, 0x49, 0x01, 0x61, 0x0c, 0x49, 0x41, 0x61, + 0x0c, 0x49, 0x82, 0x61, 0xc1, 0x61, 0x0c, 0x49, + 0x01, 0x62, 0x0c, 0x49, 0x41, 0x62, 0x0c, 0x49, + 0x81, 0x62, 0x0c, 0x49, 0x3c, 0x00, 0x84, 0x22, + 0x04, 0x00, 0xc1, 0x62, 0xc2, 0x63, 0x70, 0x47, + 0x00, 0x00, 0xc9, 0x75, 0x00, 0x00, 0x28, 0x7a, + 0x01, 0x00, 0xc1, 0x75, 0x00, 0x00, 0x81, 0x75, + 0x00, 0x00, 0x99, 0x75, 0x00, 0x00, 0xcd, 0x75, + 0x00, 0x00, 0x89, 0x75, 0x00, 0x00, 0x91, 0x75, + 0x00, 0x00, 0xb5, 0x75, 0x00, 0x00, 0x8d, 0x75, + 0x00, 0x00, 0xc5, 0x75, 0x00, 0x00, 0xb0, 0xb5, + 0x0e, 0x48, 0x0e, 0x49, 0x08, 0x60, 0x3c, 0x00, + 0xc0, 0x22, 0x04, 0x00, 0x08, 0x31, 0xc0, 0xf7, + 0x43, 0xfe, 0x0c, 0x49, 0x00, 0x25, 0x48, 0x60, + 0x0b, 0x48, 0x0a, 0x4c, 0x05, 0x60, 0x0b, 0x48, + 0x80, 0x3c, 0x05, 0x60, 0x10, 0x20, 0x20, 0x71, + 0xe0, 0x70, 0xa0, 0x71, 0x60, 0x71, 0x27, 0x20, + 0xc0, 0x43, 0xc3, 0xf7, 0xf7, 0xfb, 0x28, 0x20, + 0xc3, 0xf7, 0xfc, 0xfb, 0x25, 0x72, 0xb0, 0xbd, + 0xff, 0x3f, 0x00, 0x00, 0x2c, 0x7d, 0x01, 0x00, + 0x3c, 0x00, 0xfc, 0x22, 0x04, 0x00, 0x1c, 0x67, + 0x01, 0x00, 0x20, 0x67, 0x01, 0x00, 0x80, 0xb5, + 0x2c, 0x21, 0x01, 0x48, 0xbe, 0xf7, 0xc7, 0xf8, + 0x80, 0xbd, 0x3c, 0x7e, 0x01, 0x00, 0x80, 0xb5, + 0x38, 0x21, 0x01, 0x48, 0xbe, 0xf7, 0xbf, 0xf8, + 0x80, 0xbd, 0x68, 0x7e, 0x01, 0x00, 0x80, 0xb5, + 0x02, 0x21, 0x0e, 0x20, 0x02, 0x4a, 0xd1, 0xf7, + 0x0c, 0xfa, 0x80, 0xbd, 0x00, 0x00, 0x21, 0xe0, + 0x00, 0x00, 0x3c, 0x00, 0x38, 0x23, 0x04, 0x00, + 0x70, 0x47, 0x00, 0x00, 0xf0, 0xb5, 0x85, 0xb0, + 0x00, 0x27, 0x00, 0xab, 0x2f, 0x4e, 0x1f, 0x81, + 0x00, 0x25, 0x00, 0x24, 0x28, 0x1c, 0xd6, 0xf7, + 0xa1, 0xfb, 0x02, 0x2d, 0x03, 0xd1, 0xd6, 0xf7, + 0xf5, 0xfa, 0x00, 0x28, 0x0c, 0xd0, 0x01, 0x24, + 0x01, 0x2d, 0x03, 0xd1, 0x07, 0x20, 0x00, 0xab, + 0x18, 0x71, 0x01, 0xe0, 0x00, 0xab, 0x1f, 0x71, + 0x00, 0xab, 0x18, 0x79, 0x3c, 0x00, 0x74, 0x23, + 0x04, 0x00, 0xd6, 0xf7, 0x08, 0xfc, 0x00, 0x2c, + 0x39, 0xd0, 0x08, 0x21, 0x03, 0xa8, 0xd6, 0xf7, + 0xf2, 0xfa, 0x00, 0xab, 0x18, 0x7b, 0xfe, 0x28, + 0x31, 0xd1, 0x58, 0x7b, 0x01, 0x28, 0x2a, 0xd1, + 0x02, 0x21, 0x02, 0xa8, 0xd6, 0xf7, 0xe7, 0xfa, + 0x00, 0xab, 0x18, 0x89, 0x00, 0x28, 0x26, 0xd0, + 0x18, 0x89, 0x18, 0x49, 0x88, 0x42, 0x22, 0xd0, + 0x19, 0x89, 0x00, 0x20, 0xbf, 0xf7, 0x3c, 0x00, + 0xb0, 0x23, 0x04, 0x00, 0x13, 0xf9, 0x04, 0x1c, + 0x00, 0x69, 0x00, 0xab, 0x19, 0x89, 0xd6, 0xf7, + 0xd5, 0xfa, 0x20, 0x68, 0x00, 0xab, 0x1a, 0x89, + 0x01, 0x1c, 0x08, 0x31, 0x08, 0x3a, 0xcb, 0xf7, + 0xa1, 0xf9, 0x00, 0x28, 0x06, 0xd0, 0x02, 0x28, + 0x04, 0xd0, 0x02, 0x21, 0x94, 0x20, 0x37, 0x60, + 0xbe, 0xf7, 0x62, 0xff, 0x20, 0x1c, 0xbf, 0xf7, + 0xc7, 0xf8, 0xd4, 0xe7, 0x01, 0x21, 0x94, 0x20, + 0x3c, 0x00, 0xec, 0x23, 0x04, 0x00, 0xbe, 0xf7, + 0x5a, 0xff, 0xd5, 0xf7, 0x26, 0xff, 0x01, 0x35, + 0x2d, 0x06, 0x2d, 0x0e, 0x04, 0x2d, 0xa5, 0xd3, + 0x05, 0xb0, 0xf0, 0xbd, 0x00, 0x00, 0x58, 0x57, + 0x01, 0x00, 0xff, 0xff, 0x00, 0x00, 0x0a, 0x48, + 0x00, 0x21, 0x02, 0x1c, 0x18, 0x32, 0x80, 0xb5, + 0x09, 0x4b, 0x02, 0xe0, 0x01, 0x60, 0x83, 0x80, + 0x08, 0x30, 0x82, 0x42, 0xfa, 0xd1, 0x04, 0x48, + 0x6c, 0x21, 0x3c, 0x00, 0x28, 0x24, 0x04, 0x00, + 0x6c, 0x38, 0xbe, 0xf7, 0x37, 0xf8, 0x04, 0x49, + 0x02, 0x20, 0xc7, 0xf7, 0xd1, 0xff, 0x80, 0xbd, + 0x7c, 0x79, 0x01, 0x00, 0xfc, 0x05, 0x00, 0x00, + 0x9d, 0x75, 0x00, 0x00, 0x80, 0xb5, 0x02, 0x21, + 0x26, 0x20, 0x0d, 0x4a, 0xd1, 0xf7, 0x7c, 0xf9, + 0x0c, 0x48, 0xc8, 0xf7, 0x73, 0xff, 0x0c, 0x48, + 0xc8, 0xf7, 0x76, 0xff, 0x0b, 0x49, 0x10, 0x20, + 0xcf, 0xf7, 0x94, 0xff, 0x3c, 0x00, 0x64, 0x24, + 0x04, 0x00, 0x0a, 0x49, 0x0c, 0x20, 0xcf, 0xf7, + 0x90, 0xff, 0x09, 0x49, 0x00, 0x20, 0xc7, 0xf7, + 0xb2, 0xff, 0xcc, 0xf7, 0x6e, 0xff, 0x07, 0x49, + 0x08, 0x60, 0x80, 0xbd, 0x00, 0x00, 0x9d, 0xa6, + 0x00, 0x00, 0xa9, 0xa4, 0x00, 0x00, 0x81, 0xa4, + 0x00, 0x00, 0x31, 0xa7, 0x00, 0x00, 0xb9, 0x6d, + 0x00, 0x00, 0xbd, 0xa6, 0x00, 0x00, 0x0c, 0x79, + 0x01, 0x00, 0x02, 0x49, 0x08, 0x78, 0x3c, 0x00, + 0xa0, 0x24, 0x04, 0x00, 0x40, 0x08, 0x40, 0x00, + 0x08, 0x70, 0x70, 0x47, 0x58, 0x00, 0x07, 0x00, + 0x00, 0x21, 0x08, 0x48, 0x80, 0xb5, 0x41, 0x61, + 0x81, 0x61, 0x01, 0x70, 0x41, 0x70, 0x41, 0x60, + 0x81, 0x60, 0x14, 0x22, 0xc2, 0x60, 0x01, 0x61, + 0x42, 0x62, 0xc1, 0x61, 0xff, 0xf7, 0x04, 0xf8, + 0x80, 0xbd, 0x00, 0x00, 0x1c, 0x75, 0x01, 0x00, + 0x80, 0xb5, 0x02, 0x21, 0x1d, 0x20, 0x04, 0x4a, + 0x3c, 0x00, 0xdc, 0x24, 0x04, 0x00, 0xd1, 0xf7, + 0x34, 0xf9, 0x03, 0x49, 0x08, 0x20, 0xcf, 0xf7, + 0x52, 0xff, 0x80, 0xbd, 0x00, 0x00, 0x11, 0xe3, + 0x00, 0x00, 0x09, 0xe4, 0x00, 0x00, 0x80, 0xb5, + 0x01, 0x21, 0x25, 0x20, 0x0a, 0x4a, 0xd1, 0xf7, + 0x24, 0xf9, 0xcc, 0xf7, 0x28, 0xff, 0x08, 0x49, + 0x08, 0x62, 0x08, 0x49, 0x01, 0x20, 0xcf, 0xf7, + 0x3e, 0xff, 0x07, 0x49, 0x02, 0x20, 0xcf, 0xf7, + 0x3a, 0xff, 0x3c, 0x00, 0x18, 0x25, 0x04, 0x00, + 0xfe, 0xf7, 0xe6, 0xff, 0x05, 0x48, 0xc1, 0xf7, + 0xe1, 0xf9, 0x80, 0xbd, 0x29, 0xa9, 0x00, 0x00, + 0x1c, 0x75, 0x01, 0x00, 0xa1, 0xaa, 0x00, 0x00, + 0x2d, 0x19, 0x00, 0x00, 0x45, 0xa8, 0x00, 0x00, + 0x10, 0xb5, 0x06, 0x4c, 0x0c, 0x22, 0x22, 0x70, + 0xa0, 0x18, 0x05, 0x49, 0xbd, 0xf7, 0xd8, 0xff, + 0x00, 0x20, 0xc8, 0xf7, 0x85, 0xfb, 0x01, 0x20, + 0xa0, 0x60, 0x10, 0xbd, 0x3c, 0x00, 0x54, 0x25, + 0x04, 0x00, 0xa4, 0x69, 0x01, 0x00, 0x90, 0x57, + 0x01, 0x00, 0xb0, 0xb5, 0x1f, 0x4c, 0x00, 0x25, + 0x65, 0x80, 0x01, 0x20, 0x20, 0x70, 0x0a, 0x20, + 0xa0, 0x80, 0x90, 0x20, 0xe0, 0x80, 0x30, 0x20, + 0x20, 0x81, 0x90, 0x20, 0x60, 0x81, 0x30, 0x20, + 0xa0, 0x81, 0x17, 0x48, 0x04, 0x22, 0x07, 0x21, + 0x12, 0x30, 0xbe, 0xf7, 0x4c, 0xf8, 0x14, 0x48, + 0x04, 0x22, 0x05, 0x21, 0x16, 0x30, 0x3c, 0x00, + 0x90, 0x25, 0x04, 0x00, 0xbe, 0xf7, 0x46, 0xf8, + 0x12, 0x48, 0x11, 0x4a, 0xe0, 0x81, 0x20, 0x82, + 0x70, 0x32, 0x15, 0x70, 0x55, 0x70, 0x00, 0x20, + 0x3c, 0x23, 0x41, 0x01, 0x43, 0x43, 0x89, 0x18, + 0xf4, 0x31, 0x9b, 0x18, 0x01, 0x30, 0x04, 0x28, + 0x59, 0x60, 0xf5, 0xdb, 0x08, 0x48, 0x06, 0x22, + 0x1a, 0x30, 0x09, 0x49, 0xbd, 0xf7, 0x9a, 0xff, + 0x07, 0x48, 0x05, 0x4c, 0x0c, 0x30, 0x0f, 0xc8, + 0x3c, 0x00, 0xcc, 0x25, 0x04, 0x00, 0x20, 0x34, + 0x0f, 0xc4, 0x20, 0x21, 0x20, 0x1c, 0xbd, 0xf7, + 0x62, 0xff, 0xb0, 0xbd, 0x00, 0x00, 0xf8, 0x60, + 0x01, 0x00, 0x2c, 0x09, 0x00, 0x00, 0x58, 0x40, + 0x01, 0x00, 0x70, 0x47, 0x00, 0x00, 0x07, 0x48, + 0x10, 0xb5, 0x00, 0x68, 0x00, 0x28, 0x08, 0xd0, + 0x06, 0x48, 0xbe, 0xf7, 0x9c, 0xfe, 0x04, 0x1c, + 0xff, 0xf7, 0x9d, 0xfe, 0x20, 0x1c, 0xbe, 0xf7, + 0x96, 0xfe, 0x3c, 0x00, 0x08, 0x26, 0x04, 0x00, + 0x10, 0xbd, 0x00, 0x00, 0x58, 0x57, 0x01, 0x00, + 0xb5, 0xad, 0x00, 0x00, 0x04, 0x49, 0x80, 0xb5, + 0x00, 0x20, 0x88, 0x70, 0x02, 0x21, 0x20, 0x20, + 0x02, 0x4a, 0xd1, 0xf7, 0x91, 0xf8, 0x80, 0xbd, + 0xb4, 0x79, 0x01, 0x00, 0x25, 0xb5, 0x00, 0x00, + 0x80, 0xb5, 0xcc, 0xf7, 0x8f, 0xfe, 0x01, 0x49, + 0x48, 0x61, 0x80, 0xbd, 0xb4, 0x79, 0x01, 0x00, + 0x80, 0xb5, 0x18, 0x21, 0x3c, 0x00, 0x44, 0x26, + 0x04, 0x00, 0x14, 0x48, 0xbd, 0xf7, 0x29, 0xff, + 0x14, 0x48, 0x01, 0x21, 0x01, 0x70, 0x00, 0x21, + 0xc1, 0x60, 0x41, 0x70, 0x01, 0x61, 0x00, 0xf0, + 0x02, 0xf9, 0x00, 0xf0, 0xaa, 0xf8, 0x00, 0xf0, + 0x1e, 0xf8, 0x00, 0xf0, 0xba, 0xf9, 0x00, 0xf0, + 0xcc, 0xf9, 0x00, 0xf0, 0x20, 0xf9, 0x00, 0xf0, + 0x64, 0xf9, 0x00, 0xf0, 0xce, 0xf9, 0x00, 0xf0, + 0xfc, 0xf8, 0x00, 0xf0, 0x82, 0xf9, 0x3c, 0x00, + 0x80, 0x26, 0x04, 0x00, 0x00, 0xf0, 0x28, 0xf8, + 0x00, 0xf0, 0x6e, 0xf8, 0x00, 0xf0, 0x4a, 0xf8, + 0xff, 0xf7, 0xc2, 0xff, 0x00, 0xf0, 0x72, 0xf9, + 0x80, 0xbd, 0x00, 0x00, 0x40, 0x7c, 0x01, 0x00, + 0x18, 0x63, 0x01, 0x00, 0xb0, 0xb5, 0x08, 0x4c, + 0x00, 0x25, 0x08, 0x48, 0x25, 0x77, 0x20, 0x60, + 0xce, 0xf7, 0xf0, 0xfd, 0x00, 0x20, 0xe5, 0x62, + 0xd0, 0xf7, 0xd0, 0xfa, 0x21, 0x1f, 0x08, 0x80, + 0x3c, 0x00, 0xbc, 0x26, 0x04, 0x00, 0xd0, 0xf7, + 0x6c, 0xfb, 0xb0, 0xbd, 0x00, 0x00, 0xd4, 0x79, + 0x01, 0x00, 0x95, 0x75, 0x00, 0x00, 0x80, 0xb5, + 0xcc, 0xf7, 0xc1, 0xfc, 0x80, 0xbd, 0x05, 0x49, + 0x80, 0xb5, 0x00, 0x20, 0x08, 0x70, 0x48, 0x70, + 0x03, 0x48, 0x04, 0x49, 0x03, 0x4a, 0x08, 0x30, + 0xcc, 0xf7, 0x27, 0xfe, 0x80, 0xbd, 0x2c, 0x63, + 0x01, 0x00, 0xed, 0xbc, 0x00, 0x00, 0x4d, 0xbd, + 0x00, 0x00, 0x3c, 0x00, 0xf8, 0x26, 0x04, 0x00, + 0x80, 0xb5, 0xcc, 0xf7, 0x2b, 0xfe, 0x05, 0x49, + 0x48, 0x60, 0x01, 0x1c, 0x04, 0x48, 0xcc, 0xf7, + 0x4b, 0xfe, 0x04, 0x49, 0x03, 0x20, 0xcf, 0xf7, + 0x3d, 0xfe, 0x80, 0xbd, 0x2c, 0x63, 0x01, 0x00, + 0xc4, 0x60, 0x01, 0x00, 0xc1, 0xbc, 0x00, 0x00, + 0x04, 0x48, 0x00, 0x21, 0x00, 0x22, 0x00, 0x23, + 0x0e, 0xc0, 0x08, 0xc0, 0x02, 0x49, 0x10, 0x38, + 0x01, 0x60, 0x70, 0x47, 0x3c, 0x00, 0x34, 0x27, + 0x04, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x1c, 0xe6, + 0x01, 0x00, 0x80, 0xb5, 0xcc, 0xf7, 0x09, 0xfe, + 0x05, 0x49, 0x05, 0x4a, 0x48, 0x60, 0x02, 0x21, + 0x24, 0x20, 0xd0, 0xf7, 0xfc, 0xff, 0x03, 0x48, + 0xc9, 0xf7, 0x6b, 0xfd, 0x80, 0xbd, 0x04, 0x7a, + 0x01, 0x00, 0x69, 0xbe, 0x00, 0x00, 0x71, 0xeb, + 0x00, 0x00, 0x10, 0xb5, 0x04, 0x4c, 0x14, 0x21, + 0x20, 0x1c, 0xbd, 0xf7, 0x96, 0xfe, 0x3c, 0x00, + 0x70, 0x27, 0x04, 0x00, 0x02, 0x48, 0x20, 0x60, + 0x10, 0xbd, 0x00, 0x00, 0x14, 0x7a, 0x01, 0x00, + 0xec, 0xe5, 0x01, 0x00, 0x80, 0xb5, 0xcc, 0xf7, + 0xe7, 0xfd, 0x07, 0x49, 0x07, 0x4a, 0x48, 0x60, + 0x02, 0x21, 0x1f, 0x20, 0xd0, 0xf7, 0xda, 0xff, + 0x05, 0x49, 0x01, 0x20, 0x08, 0x60, 0x05, 0x49, + 0x0c, 0x20, 0xcf, 0xf7, 0xf5, 0xfd, 0x80, 0xbd, + 0x14, 0x7a, 0x01, 0x00, 0xd5, 0xbf, 0x00, 0x00, + 0x3c, 0x00, 0xac, 0x27, 0x04, 0x00, 0x80, 0x5a, + 0x01, 0x00, 0x85, 0xff, 0x00, 0x00, 0x80, 0xb5, + 0xff, 0xf7, 0x4f, 0xfd, 0x01, 0x21, 0x21, 0x20, + 0x02, 0x4a, 0xd0, 0xf7, 0xc2, 0xff, 0x80, 0xbd, + 0x00, 0x00, 0xc9, 0xc1, 0x00, 0x00, 0x80, 0xb5, + 0xcc, 0xf7, 0xc1, 0xfd, 0x02, 0x49, 0x08, 0x63, + 0xc9, 0xf7, 0x57, 0xfd, 0x80, 0xbd, 0x28, 0x7a, + 0x01, 0x00, 0x10, 0xb5, 0xcc, 0xf7, 0xb7, 0xfd, + 0x16, 0x4c, 0x3c, 0x00, 0xe8, 0x27, 0x04, 0x00, + 0x20, 0x61, 0xcc, 0xf7, 0xb3, 0xfd, 0x60, 0x61, + 0x14, 0x48, 0x15, 0x49, 0x08, 0x60, 0x16, 0x49, + 0x14, 0x48, 0x08, 0x60, 0xcc, 0xf7, 0xaa, 0xfd, + 0x14, 0x49, 0x08, 0x60, 0x00, 0xf0, 0x34, 0xf8, + 0xff, 0xf7, 0xe0, 0xff, 0xff, 0xf7, 0x5e, 0xff, + 0x00, 0xf0, 0x04, 0xf9, 0x00, 0xf0, 0x8e, 0xf8, + 0xff, 0xf7, 0x6e, 0xff, 0xff, 0xf7, 0xb0, 0xff, + 0xff, 0xf7, 0x8c, 0xff, 0x3c, 0x00, 0x24, 0x28, + 0x04, 0x00, 0xff, 0xf7, 0x04, 0xff, 0x00, 0xf0, + 0xaa, 0xf8, 0x0a, 0x48, 0xbf, 0xf7, 0xbd, 0xff, + 0xc9, 0xf7, 0xbb, 0xfd, 0x09, 0x49, 0x00, 0x20, + 0xcf, 0xf7, 0xa7, 0xfd, 0x10, 0xbd, 0x40, 0x7c, + 0x01, 0x00, 0x7d, 0xb7, 0x00, 0x00, 0x18, 0x7e, + 0x01, 0x00, 0xbd, 0xb8, 0x00, 0x00, 0x1c, 0x7e, + 0x01, 0x00, 0x20, 0x7e, 0x01, 0x00, 0xb9, 0xba, + 0x00, 0x00, 0x81, 0x24, 0x01, 0x00, 0x3c, 0x00, + 0x60, 0x28, 0x04, 0x00, 0x80, 0xb5, 0x38, 0x21, + 0x01, 0x48, 0xbd, 0xf7, 0x19, 0xfe, 0x80, 0xbd, + 0x90, 0x5c, 0x01, 0x00, 0x70, 0x47, 0x00, 0x00, + 0xb0, 0xb5, 0x0c, 0x4c, 0x0b, 0x4d, 0x00, 0x20, + 0x0c, 0x34, 0x60, 0x60, 0x25, 0x60, 0xe0, 0x60, + 0x0a, 0x20, 0x20, 0x81, 0x28, 0x1c, 0xc8, 0xf7, + 0x3f, 0xfd, 0x28, 0x1c, 0xc8, 0xf7, 0x3a, 0xfd, + 0x08, 0x3d, 0x68, 0x60, 0x04, 0x48, 0xc9, 0xf7, + 0x3c, 0x00, 0x9c, 0x28, 0x04, 0x00, 0x1b, 0xfd, + 0x20, 0x1c, 0xc0, 0xf7, 0x6e, 0xfa, 0x28, 0x80, + 0xb0, 0xbd, 0xb8, 0x7a, 0x01, 0x00, 0xd5, 0x33, + 0x01, 0x00, 0xf8, 0xb5, 0x1f, 0x4e, 0x1d, 0x4c, + 0x00, 0x20, 0x0c, 0x21, 0x41, 0x43, 0x82, 0x00, + 0x01, 0x30, 0x09, 0x19, 0x08, 0x31, 0x00, 0x06, + 0x00, 0x0e, 0x04, 0x28, 0xb1, 0x50, 0xf4, 0xd3, + 0x18, 0x48, 0x0c, 0x38, 0x30, 0x61, 0xce, 0xf7, + 0xf4, 0xf9, 0x3c, 0x00, 0xd8, 0x28, 0x04, 0x00, + 0x14, 0x4c, 0xa0, 0x78, 0x00, 0x09, 0x00, 0x01, + 0xa0, 0x70, 0x00, 0x27, 0xe7, 0x70, 0x67, 0x70, + 0x00, 0x24, 0xa5, 0x00, 0x70, 0x59, 0x07, 0x70, + 0x20, 0x1c, 0xbe, 0xf7, 0x53, 0xf9, 0x71, 0x59, + 0x08, 0x71, 0x00, 0x21, 0x20, 0x1c, 0xce, 0xf7, + 0x7d, 0xf9, 0x01, 0x34, 0x24, 0x06, 0x24, 0x0e, + 0x04, 0x2c, 0xee, 0xd3, 0x07, 0x4c, 0x20, 0x78, + 0x00, 0x09, 0x00, 0x01, 0x3c, 0x00, 0x14, 0x29, + 0x04, 0x00, 0x0a, 0x30, 0x20, 0x70, 0x20, 0x78, + 0xf0, 0x21, 0x88, 0x43, 0x30, 0x30, 0x20, 0x70, + 0xa0, 0x78, 0x0f, 0x21, 0x08, 0x43, 0xa0, 0x70, + 0xf8, 0xbd, 0x00, 0x50, 0x07, 0x00, 0x10, 0x7b, + 0x01, 0x00, 0x80, 0xb5, 0xcc, 0xf7, 0x9f, 0xfb, + 0x80, 0xbd, 0xb0, 0xb5, 0x0c, 0x4c, 0x0b, 0x4d, + 0x00, 0x20, 0x0c, 0x34, 0x60, 0x60, 0x25, 0x60, + 0xe0, 0x60, 0x0a, 0x20, 0x20, 0x81, 0x3c, 0x00, + 0x50, 0x29, 0x04, 0x00, 0x28, 0x1c, 0xc8, 0xf7, + 0xe1, 0xfc, 0x28, 0x1c, 0xc8, 0xf7, 0xd4, 0xfc, + 0x08, 0x3d, 0x68, 0x60, 0x20, 0x1c, 0xc0, 0xf7, + 0x0d, 0xfa, 0x28, 0x80, 0x02, 0x48, 0xc9, 0xf7, + 0x9b, 0xfc, 0xb0, 0xbd, 0x2c, 0x7b, 0x01, 0x00, + 0x49, 0x00, 0x01, 0x00, 0x80, 0xb5, 0xca, 0xf7, + 0x2f, 0xf8, 0x80, 0xbd, 0x70, 0x47, 0x00, 0x00, + 0xb0, 0xb5, 0x12, 0x4d, 0x3c, 0x21, 0x28, 0x1c, + 0x3c, 0x00, 0x8c, 0x29, 0x04, 0x00, 0xbd, 0xf7, + 0x86, 0xfd, 0x0f, 0x48, 0x28, 0x21, 0x3c, 0x30, + 0xbd, 0xf7, 0x81, 0xfd, 0x0d, 0x48, 0x00, 0x21, + 0x14, 0x38, 0x01, 0x61, 0xc1, 0x60, 0xff, 0x21, + 0x01, 0x70, 0x41, 0x70, 0x0a, 0x49, 0x0a, 0x4a, + 0x41, 0x60, 0x01, 0x21, 0x0c, 0x20, 0xd0, 0xf7, + 0xc8, 0xfe, 0x2c, 0x1c, 0x30, 0x34, 0x0c, 0x3d, + 0x00, 0x20, 0xd0, 0xf7, 0x4a, 0xf9, 0x20, 0x80, + 0x0c, 0x3c, 0x3c, 0x00, 0xc8, 0x29, 0x04, 0x00, + 0xac, 0x42, 0xf8, 0xd1, 0xb0, 0xbd, 0x00, 0x00, + 0x60, 0x7b, 0x01, 0x00, 0x20, 0xa1, 0x07, 0x00, + 0x35, 0xcd, 0x00, 0x00, 0x08, 0x49, 0x00, 0x20, + 0x0c, 0x22, 0x42, 0x43, 0x52, 0x18, 0x10, 0x71, + 0x01, 0x30, 0x05, 0x28, 0xf8, 0xdb, 0x04, 0x48, + 0x00, 0x21, 0x08, 0x38, 0x01, 0x70, 0x41, 0x60, + 0xff, 0x21, 0x41, 0x70, 0x70, 0x47, 0x00, 0x00, + 0x74, 0x7a, 0x01, 0x00, 0x3c, 0x00, 0x04, 0x2a, + 0x04, 0x00, 0x80, 0xb5, 0x78, 0x21, 0x01, 0x48, + 0xbd, 0xf7, 0x47, 0xfd, 0x80, 0xbd, 0xc4, 0x7b, + 0x01, 0x00, 0x80, 0xb5, 0xca, 0xf7, 0x97, 0xfa, + 0x80, 0xbd, 0x70, 0x47, 0x00, 0x00, 0x10, 0xb5, + 0x0b, 0x4c, 0xff, 0x21, 0x05, 0x31, 0x20, 0x1c, + 0xbd, 0xf7, 0x37, 0xfd, 0x09, 0x48, 0xf0, 0x21, + 0x08, 0x51, 0x20, 0x1c, 0x40, 0x30, 0xc5, 0xf7, + 0x8e, 0xf9, 0x6c, 0x21, 0x06, 0x48, 0x3c, 0x00, + 0x40, 0x2a, 0x04, 0x00, 0xbd, 0xf7, 0x2c, 0xfd, + 0x04, 0x48, 0xc0, 0x21, 0x6c, 0x30, 0xbd, 0xf7, + 0x27, 0xfd, 0x10, 0xbd, 0xc4, 0x69, 0x01, 0x00, + 0xb0, 0xd9, 0x01, 0x00, 0xc8, 0x6a, 0x01, 0x00, + 0xb0, 0xb5, 0x0b, 0x4d, 0x00, 0x24, 0x1c, 0x20, + 0x60, 0x43, 0x40, 0x19, 0x6c, 0x30, 0xc3, 0xf7, + 0x0f, 0xfe, 0x01, 0x34, 0x04, 0x2c, 0xf6, 0xdb, + 0xcc, 0xf7, 0x6e, 0xfc, 0xa8, 0x63, 0xc7, 0xf7, + 0x3c, 0x00, 0x7c, 0x2a, 0x04, 0x00, 0x75, 0xf9, + 0x04, 0x48, 0xc9, 0xf7, 0x1c, 0xfc, 0x03, 0x48, + 0xcf, 0xf7, 0x03, 0xfa, 0xb0, 0xbd, 0xc4, 0x69, + 0x01, 0x00, 0xfd, 0x80, 0x00, 0x00, 0xe1, 0x22, + 0x01, 0x00, 0x10, 0xb5, 0x05, 0x4c, 0x00, 0x20, + 0x20, 0x80, 0x03, 0x48, 0x06, 0x21, 0x08, 0x30, + 0xbd, 0xf7, 0xd5, 0xfc, 0x14, 0x20, 0x60, 0x60, + 0x10, 0xbd, 0x98, 0x7c, 0x01, 0x00, 0x10, 0xb5, + 0x08, 0x4c, 0x3c, 0x00, 0xb8, 0x2a, 0x04, 0x00, + 0x00, 0x20, 0x20, 0x80, 0x60, 0x80, 0x06, 0x48, + 0x06, 0x21, 0x0c, 0x30, 0xbd, 0xf7, 0xc6, 0xfc, + 0x03, 0x48, 0x06, 0x21, 0x12, 0x30, 0xbd, 0xf7, + 0xc1, 0xfc, 0x14, 0x20, 0xa0, 0x60, 0x10, 0xbd, + 0x58, 0x7c, 0x01, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x80, 0xb5, 0x02, 0x21, 0x0d, 0x20, 0x05, 0x4a, + 0xd0, 0xf7, 0x2e, 0xfe, 0x04, 0x48, 0xc8, 0xf7, + 0x1f, 0xfc, 0x04, 0x48, 0x3c, 0x00, 0xf4, 0x2a, + 0x04, 0x00, 0xca, 0xf7, 0x44, 0xfc, 0x80, 0xbd, + 0x00, 0x00, 0x31, 0xd4, 0x00, 0x00, 0x51, 0xb1, + 0x00, 0x00, 0x09, 0xb1, 0x00, 0x00, 0x08, 0x49, + 0x80, 0xb5, 0x00, 0x20, 0x08, 0x60, 0xff, 0xf7, + 0xd0, 0xff, 0xff, 0xf7, 0xc0, 0xff, 0xff, 0xf7, + 0x04, 0xfc, 0x00, 0xf0, 0x4a, 0xf8, 0xff, 0xf7, + 0x0a, 0xfc, 0x00, 0xf0, 0x3c, 0xf8, 0x80, 0xbd, + 0x00, 0x00, 0xe4, 0x65, 0x01, 0x00, 0x3c, 0x00, + 0x30, 0x2b, 0x04, 0x00, 0x80, 0xb5, 0x00, 0xf0, + 0x29, 0xf8, 0x00, 0xf0, 0x1b, 0xf8, 0x00, 0xf0, + 0x51, 0xf8, 0x00, 0xf0, 0x31, 0xf8, 0x80, 0xbd, + 0x70, 0x47, 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x80, 0xb5, 0xff, 0x21, 0x89, 0x31, 0x02, 0x48, + 0xbd, 0xf7, 0xa2, 0xfc, 0x80, 0xbd, 0x00, 0x00, + 0xdc, 0x71, 0x01, 0x00, 0x80, 0xb5, 0x02, 0x49, + 0x08, 0x20, 0xcf, 0xf7, 0x11, 0xfc, 0x80, 0xbd, + 0x3c, 0x00, 0x6c, 0x2b, 0x04, 0x00, 0x59, 0xd9, + 0x00, 0x00, 0x80, 0xb5, 0x03, 0x48, 0xcf, 0xf7, + 0x4c, 0xf9, 0x02, 0x49, 0x48, 0x80, 0x80, 0xbd, + 0x00, 0x00, 0x8d, 0x1f, 0x00, 0x00, 0x98, 0x7c, + 0x01, 0x00, 0x80, 0xb5, 0x03, 0x48, 0xcf, 0xf7, + 0x40, 0xf9, 0x02, 0x49, 0x88, 0x80, 0x80, 0xbd, + 0x00, 0x00, 0xd5, 0x23, 0x00, 0x00, 0x58, 0x7c, + 0x01, 0x00, 0x70, 0x47, 0x00, 0x00, 0x80, 0xb5, + 0x02, 0x48, 0x3c, 0x00, 0xa8, 0x2b, 0x04, 0x00, + 0xca, 0xf7, 0xe4, 0xfb, 0x80, 0xbd, 0x00, 0x00, + 0x71, 0xe0, 0x00, 0x00, 0x80, 0xb5, 0xcc, 0xf7, + 0xa5, 0xfb, 0x02, 0x21, 0x0f, 0x20, 0x06, 0x4a, + 0xd0, 0xf7, 0xc2, 0xfd, 0x14, 0x21, 0x05, 0x48, + 0xbd, 0xf7, 0x68, 0xfc, 0x03, 0x48, 0x78, 0x21, + 0x14, 0x30, 0xbd, 0xf7, 0x63, 0xfc, 0x80, 0xbd, + 0x35, 0xe2, 0x00, 0x00, 0x84, 0x66, 0x01, 0x00, + 0x80, 0xb5, 0xcc, 0xf7, 0x3c, 0x00, 0xe4, 0x2b, + 0x04, 0x00, 0xb7, 0xfb, 0x05, 0x49, 0x08, 0x61, + 0x05, 0x49, 0x0e, 0x20, 0xcf, 0xf7, 0xcd, 0xfb, + 0x04, 0x49, 0x08, 0x20, 0xcf, 0xf7, 0xc9, 0xfb, + 0x80, 0xbd, 0xec, 0x65, 0x01, 0x00, 0x01, 0x02, + 0x01, 0x00, 0xc1, 0x2e, 0x00, 0x00, 0x01, 0x49, + 0x00, 0x20, 0x08, 0x70, 0x70, 0x47, 0x40, 0xd9, + 0x01, 0x00, 0x70, 0x47, 0x00, 0x00, 0x01, 0x49, + 0x00, 0x20, 0x08, 0x70, 0x70, 0x47, 0x3c, 0x00, + 0x20, 0x2c, 0x04, 0x00, 0xa0, 0x79, 0x01, 0x00, + 0x80, 0xb5, 0x07, 0x48, 0xc8, 0xf7, 0xf2, 0xff, + 0x06, 0x49, 0x48, 0x60, 0x06, 0x48, 0xc0, 0xf7, + 0x07, 0xfb, 0x06, 0x48, 0xc0, 0xf7, 0x86, 0xfb, + 0x05, 0x48, 0xc9, 0xf7, 0xa3, 0xfa, 0x80, 0xbd, + 0xa9, 0xe4, 0x00, 0x00, 0xa0, 0x79, 0x01, 0x00, + 0xb9, 0xe4, 0x00, 0x00, 0x85, 0x2e, 0x00, 0x00, + 0x81, 0xe4, 0x00, 0x00, 0x07, 0x48, 0x80, 0xb5, + 0x3c, 0x00, 0x5c, 0x2c, 0x04, 0x00, 0x00, 0x21, + 0x00, 0x22, 0x00, 0x23, 0x0e, 0xc0, 0x08, 0xc0, + 0x10, 0x38, 0xc8, 0x21, 0x01, 0x60, 0x00, 0x21, + 0x0c, 0x38, 0x02, 0x4a, 0xcc, 0xf7, 0x61, 0xfb, + 0x80, 0xbd, 0xd0, 0x60, 0x01, 0x00, 0xfd, 0xe5, + 0x00, 0x00, 0x80, 0xb5, 0xcc, 0xf7, 0x67, 0xfb, + 0x04, 0x49, 0x08, 0x60, 0x01, 0x1c, 0x02, 0x48, + 0x04, 0x30, 0xcc, 0xf7, 0x86, 0xfb, 0x80, 0xbd, + 0x00, 0x00, 0x3c, 0x00, 0x98, 0x2c, 0x04, 0x00, + 0xc0, 0x60, 0x01, 0x00, 0x09, 0x48, 0x80, 0xb5, + 0x0a, 0x21, 0x01, 0x70, 0x41, 0x70, 0x08, 0x49, + 0x08, 0x4a, 0x81, 0x60, 0x00, 0x21, 0xc1, 0x60, + 0x52, 0x79, 0x82, 0x70, 0x01, 0x61, 0x41, 0x61, + 0x28, 0x21, 0x18, 0x30, 0xbd, 0xf7, 0xee, 0xfb, + 0x80, 0xbd, 0x00, 0x00, 0x7c, 0x78, 0x01, 0x00, + 0xa0, 0x86, 0x01, 0x00, 0x0c, 0x5a, 0x01, 0x00, + 0xf8, 0xb5, 0x0f, 0x49, 0x3c, 0x00, 0xd4, 0x2c, + 0x04, 0x00, 0x0f, 0x48, 0x0d, 0x88, 0x4f, 0x88, + 0x06, 0x79, 0x00, 0x24, 0x30, 0x1b, 0x68, 0x43, + 0x68, 0x23, 0x0c, 0x49, 0x58, 0x43, 0x41, 0x18, + 0x7d, 0x20, 0xc0, 0x00, 0xbd, 0xf7, 0x0f, 0xfd, + 0x61, 0x00, 0x09, 0x4a, 0xa6, 0x42, 0x50, 0x52, + 0x00, 0xd1, 0x3d, 0x1c, 0x01, 0x34, 0x24, 0x06, + 0x24, 0x0e, 0x10, 0x2c, 0xea, 0xd3, 0x05, 0x49, + 0x01, 0x20, 0x08, 0x61, 0xf8, 0xbd, 0x3c, 0x00, + 0x10, 0x2d, 0x04, 0x00, 0xf6, 0x59, 0x01, 0x00, + 0x0c, 0x5a, 0x01, 0x00, 0x34, 0x44, 0x0f, 0x00, + 0x12, 0x5a, 0x01, 0x00, 0x7c, 0x78, 0x01, 0x00, + 0x80, 0xb5, 0x00, 0xf0, 0xe7, 0xfa, 0x02, 0x49, + 0x01, 0x20, 0x08, 0x61, 0x80, 0xbd, 0x00, 0x00, + 0x7c, 0x78, 0x01, 0x00, 0x10, 0xb5, 0x04, 0x1c, + 0x08, 0x1c, 0x0f, 0x49, 0x49, 0x79, 0x00, 0x29, + 0x01, 0xd1, 0x0e, 0x4b, 0x00, 0xe0, 0x0e, 0x4b, + 0x3c, 0x00, 0x4c, 0x2d, 0x04, 0x00, 0x00, 0x2c, + 0x07, 0xd0, 0x04, 0x21, 0x11, 0x80, 0x0a, 0x1c, + 0x01, 0x24, 0x19, 0x1c, 0xbd, 0xf7, 0xcd, 0xfb, + 0x0a, 0xe0, 0x01, 0x24, 0x01, 0x1c, 0x18, 0x1c, + 0x12, 0x88, 0xbd, 0xf7, 0xc6, 0xfb, 0x00, 0xf0, + 0xc4, 0xfa, 0x05, 0x49, 0x01, 0x20, 0x08, 0x61, + 0x20, 0x1c, 0x10, 0xbd, 0x00, 0x00, 0x0c, 0x5a, + 0x01, 0x00, 0xfe, 0x59, 0x01, 0x00, 0xfa, 0x59, + 0x01, 0x00, 0x3c, 0x00, 0x88, 0x2d, 0x04, 0x00, + 0x7c, 0x78, 0x01, 0x00, 0x0d, 0x48, 0x8c, 0xb5, + 0xc1, 0x88, 0x00, 0xab, 0x0c, 0x4a, 0x99, 0x80, + 0x01, 0x89, 0x04, 0x20, 0xd9, 0x80, 0x18, 0x80, + 0x02, 0x21, 0x13, 0x20, 0xd0, 0xf7, 0xd0, 0xfc, + 0x00, 0xf0, 0xa6, 0xfa, 0x07, 0x49, 0x01, 0x20, + 0x08, 0x61, 0xff, 0xf7, 0x8d, 0xff, 0x6a, 0x46, + 0x01, 0xa9, 0x00, 0x20, 0xff, 0xf7, 0xbc, 0xff, + 0x8c, 0xbd, 0x00, 0x00, 0x3c, 0x00, 0xc4, 0x2d, + 0x04, 0x00, 0xf4, 0x59, 0x01, 0x00, 0x95, 0xf9, + 0x00, 0x00, 0x7c, 0x78, 0x01, 0x00, 0xf8, 0xb5, + 0x13, 0x4e, 0x01, 0x25, 0xb5, 0x70, 0x05, 0x20, + 0xf0, 0x70, 0x11, 0x49, 0x10, 0x48, 0x0e, 0xc9, + 0x2c, 0x30, 0x0e, 0xc0, 0x00, 0x20, 0x70, 0x61, + 0x0f, 0x48, 0x0f, 0x49, 0x10, 0x4f, 0x00, 0x24, + 0x48, 0x60, 0xa0, 0x00, 0x39, 0x58, 0x20, 0x1c, + 0xd1, 0xf7, 0xd7, 0xf8, 0x01, 0x34, 0x3c, 0x00, + 0x00, 0x2e, 0x04, 0x00, 0x10, 0x2c, 0xf7, 0xd3, + 0x06, 0x4c, 0x0b, 0x4a, 0x20, 0x34, 0x20, 0x1c, + 0x0a, 0x49, 0xb5, 0x60, 0xcc, 0xf7, 0x92, 0xfa, + 0xcc, 0xf7, 0x9e, 0xfa, 0x30, 0x61, 0x20, 0x60, + 0xf8, 0xbd, 0x00, 0x00, 0x64, 0x73, 0x01, 0x00, + 0xb0, 0x58, 0x01, 0x00, 0x04, 0x18, 0x02, 0x00, + 0x60, 0x00, 0x07, 0x00, 0xd4, 0x44, 0x01, 0x00, + 0x45, 0xfa, 0x00, 0x00, 0x71, 0xfa, 0x00, 0x00, + 0x3c, 0x00, 0x3c, 0x2e, 0x04, 0x00, 0x0c, 0x49, + 0x30, 0xb5, 0x00, 0x23, 0xcc, 0x56, 0x0b, 0x4b, + 0x00, 0x20, 0xf0, 0x25, 0x1a, 0x5c, 0x11, 0x07, + 0x09, 0x0f, 0x09, 0x19, 0x0f, 0x29, 0x01, 0xdd, + 0x0f, 0x21, 0x02, 0xe0, 0x00, 0x29, 0x00, 0xda, + 0x00, 0x21, 0x2a, 0x40, 0x51, 0x18, 0x19, 0x54, + 0x01, 0x30, 0x0e, 0x28, 0xee, 0xdb, 0x30, 0xbd, + 0x00, 0x00, 0x64, 0x73, 0x01, 0x00, 0xc0, 0x58, + 0x01, 0x00, 0x3c, 0x00, 0x78, 0x2e, 0x04, 0x00, + 0xb0, 0xb5, 0x0d, 0x1c, 0x00, 0x28, 0x08, 0xd0, + 0x01, 0x24, 0x14, 0x80, 0x05, 0x20, 0xcc, 0xf7, + 0xb5, 0xf8, 0x80, 0x03, 0xc0, 0x0f, 0x28, 0x70, + 0x07, 0xe0, 0x28, 0x78, 0x01, 0x22, 0x41, 0x04, + 0x52, 0x04, 0x05, 0x20, 0xd0, 0xf7, 0xae, 0xfd, + 0x01, 0x24, 0x20, 0x1c, 0xb0, 0xbd, 0x00, 0x00, + 0x98, 0xb5, 0x05, 0x4c, 0x60, 0x68, 0xcc, 0xf7, + 0xf5, 0xfd, 0x00, 0x90, 0x3c, 0x00, 0xb4, 0x2e, + 0x04, 0x00, 0x00, 0xab, 0x18, 0x88, 0xe0, 0x80, + 0xce, 0xf7, 0xfb, 0xff, 0x98, 0xbd, 0xa0, 0x58, + 0x01, 0x00, 0x38, 0xb5, 0x03, 0x1c, 0x08, 0x1c, + 0x00, 0x24, 0x00, 0x2b, 0x17, 0x4d, 0x07, 0xd0, + 0x0e, 0x21, 0x11, 0x80, 0x0a, 0x1c, 0x01, 0x24, + 0x29, 0x1c, 0xbd, 0xf7, 0x0c, 0xfb, 0x22, 0xe0, + 0x11, 0x88, 0x04, 0x29, 0x17, 0xd1, 0x01, 0x1c, + 0x68, 0x46, 0x12, 0x88, 0xbd, 0xf7, 0x3c, 0x00, + 0xf0, 0x2e, 0x04, 0x00, 0x03, 0xfb, 0x00, 0x98, + 0x00, 0x28, 0x01, 0xdb, 0x32, 0x30, 0x00, 0xe0, + 0x32, 0x38, 0x00, 0x90, 0x01, 0x1c, 0x64, 0x20, + 0xbd, 0xf7, 0x98, 0xfb, 0x01, 0x06, 0x09, 0x16, + 0x00, 0x90, 0x0e, 0x22, 0x28, 0x1c, 0xbd, 0xf7, + 0x85, 0xfb, 0x06, 0xe0, 0x0e, 0x29, 0x05, 0xd1, + 0x0a, 0x1c, 0x01, 0x1c, 0x28, 0x1c, 0xbd, 0xf7, + 0xe9, 0xfa, 0x01, 0x24, 0x20, 0x1c, 0x38, 0xbd, + 0x3c, 0x00, 0x2c, 0x2f, 0x04, 0x00, 0xda, 0x59, + 0x01, 0x00, 0x38, 0xb5, 0x03, 0x1c, 0x08, 0x1c, + 0x00, 0x24, 0x00, 0x2b, 0x17, 0x4d, 0x07, 0xd0, + 0x0e, 0x21, 0x11, 0x80, 0x0a, 0x1c, 0x01, 0x24, + 0x29, 0x1c, 0xbd, 0xf7, 0xd6, 0xfa, 0x22, 0xe0, + 0x11, 0x88, 0x04, 0x29, 0x17, 0xd1, 0x01, 0x1c, + 0x68, 0x46, 0x12, 0x88, 0xbd, 0xf7, 0xcd, 0xfa, + 0x00, 0x98, 0x00, 0x28, 0x01, 0xdb, 0x32, 0x30, + 0x00, 0xe0, 0x3c, 0x00, 0x68, 0x2f, 0x04, 0x00, + 0x32, 0x38, 0x00, 0x90, 0x01, 0x1c, 0x64, 0x20, + 0xbd, 0xf7, 0x62, 0xfb, 0x01, 0x06, 0x09, 0x16, + 0x00, 0x90, 0x0e, 0x22, 0x28, 0x1c, 0xbd, 0xf7, + 0x4f, 0xfb, 0x06, 0xe0, 0x0e, 0x29, 0x05, 0xd1, + 0x0a, 0x1c, 0x01, 0x1c, 0x28, 0x1c, 0xbd, 0xf7, + 0xb3, 0xfa, 0x01, 0x24, 0x20, 0x1c, 0x38, 0xbd, + 0xcc, 0x59, 0x01, 0x00, 0x03, 0x48, 0x80, 0xb5, + 0x01, 0x78, 0x00, 0x20, 0x3c, 0x00, 0xa4, 0x2f, + 0x04, 0x00, 0xcc, 0xf7, 0xb4, 0xfb, 0x80, 0xbd, + 0x00, 0x00, 0xa6, 0x58, 0x01, 0x00, 0x70, 0x47, + 0x00, 0x00, 0x02, 0x49, 0x03, 0x20, 0x08, 0x70, + 0x00, 0x20, 0x48, 0x70, 0x70, 0x47, 0x9c, 0x73, + 0x01, 0x00, 0x80, 0xb5, 0x02, 0x21, 0x11, 0x20, + 0x02, 0x4a, 0xd0, 0xf7, 0xbc, 0xfb, 0x80, 0xbd, + 0x00, 0x00, 0xa1, 0xfe, 0x00, 0x00, 0xf0, 0xb5, + 0x0b, 0x4f, 0x1c, 0x1c, 0x00, 0x23, 0x3c, 0x00, + 0xe0, 0x2f, 0x04, 0x00, 0xfd, 0x56, 0x2b, 0x1c, + 0x06, 0x2d, 0x01, 0xd1, 0x01, 0x20, 0xf0, 0xbd, + 0x06, 0x4e, 0x05, 0x1c, 0xd8, 0x00, 0x34, 0x36, + 0x35, 0x54, 0x80, 0x19, 0x41, 0x70, 0x82, 0x70, + 0x44, 0x60, 0x58, 0x1c, 0x38, 0x70, 0x00, 0x20, + 0xf0, 0xbd, 0x00, 0x00, 0x98, 0x5a, 0x01, 0x00, + 0x10, 0xb5, 0x04, 0x1c, 0x0c, 0x48, 0x00, 0xf0, + 0x21, 0xf9, 0x60, 0x78, 0xff, 0x28, 0x04, 0xd0, + 0x3c, 0x00, 0x1c, 0x30, 0x04, 0x00, 0x01, 0x23, + 0xe0, 0x56, 0x06, 0x21, 0x00, 0xf0, 0xcd, 0xf8, + 0x08, 0x4a, 0x01, 0x21, 0x10, 0x78, 0x08, 0x43, + 0x07, 0x49, 0x08, 0x70, 0x20, 0x23, 0x18, 0x43, + 0x08, 0x70, 0x80, 0x23, 0x18, 0x43, 0x10, 0x70, + 0x08, 0x70, 0x10, 0xbd, 0x00, 0x00, 0x91, 0x9b, + 0x00, 0x00, 0xe0, 0x60, 0x01, 0x00, 0x04, 0x00, + 0x07, 0x00, 0x10, 0xb5, 0x0a, 0x49, 0x04, 0x1c, + 0x08, 0x78, 0x3c, 0x00, 0x58, 0x30, 0x04, 0x00, + 0x40, 0x08, 0x40, 0x00, 0x08, 0x70, 0x08, 0x49, + 0x08, 0x70, 0x08, 0x48, 0x00, 0xf0, 0xf8, 0xf8, + 0x60, 0x78, 0xff, 0x28, 0x04, 0xd0, 0x01, 0x23, + 0xe0, 0x56, 0x05, 0x21, 0x00, 0xf0, 0xa4, 0xf8, + 0x10, 0xbd, 0x00, 0x00, 0xe0, 0x60, 0x01, 0x00, + 0x04, 0x00, 0x07, 0x00, 0x91, 0x9b, 0x00, 0x00, + 0x03, 0x48, 0x00, 0x21, 0x00, 0x22, 0x00, 0x23, + 0x0e, 0xc0, 0x08, 0xc0, 0x3c, 0x00, 0x94, 0x30, + 0x04, 0x00, 0x70, 0x47, 0x00, 0x00, 0xe8, 0x60, + 0x01, 0x00, 0x70, 0x47, 0x00, 0x00, 0x10, 0xb5, + 0x07, 0x4c, 0x00, 0x20, 0x60, 0x60, 0x20, 0x80, + 0xe0, 0x60, 0x02, 0x21, 0x14, 0x20, 0x04, 0x4a, + 0xd0, 0xf7, 0x49, 0xfb, 0x02, 0x48, 0x10, 0x30, + 0xa0, 0x60, 0x10, 0xbd, 0x00, 0x00, 0x58, 0x75, + 0x01, 0x00, 0x05, 0x1d, 0x01, 0x00, 0x70, 0x47, + 0x00, 0x00, 0x10, 0xb5, 0x48, 0x21, 0x3c, 0x00, + 0xd0, 0x30, 0x04, 0x00, 0x0a, 0x48, 0xbd, 0xf7, + 0xe3, 0xf9, 0x09, 0x4c, 0xe0, 0x21, 0x48, 0x34, + 0x20, 0x1c, 0xbd, 0xf7, 0xdd, 0xf9, 0x00, 0x20, + 0xc1, 0x00, 0x09, 0x19, 0x0a, 0x1c, 0x08, 0x32, + 0x01, 0x30, 0x1b, 0x28, 0x4a, 0x60, 0xf7, 0xd3, + 0x01, 0x48, 0x04, 0x38, 0x04, 0x60, 0x10, 0xbd, + 0x68, 0x5b, 0x01, 0x00, 0x80, 0xb5, 0x02, 0x21, + 0x23, 0x20, 0x02, 0x4a, 0xd0, 0xf7, 0x1e, 0xfb, + 0x3c, 0x00, 0x0c, 0x31, 0x04, 0x00, 0x80, 0xbd, + 0x00, 0x00, 0x45, 0x23, 0x01, 0x00, 0x80, 0xb5, + 0xff, 0xf7, 0x6b, 0xf8, 0x80, 0xbd, 0x70, 0x47, + 0x00, 0x00, 0xf8, 0xb5, 0x01, 0x20, 0x1d, 0x49, + 0xc0, 0x07, 0x48, 0x60, 0x1d, 0x49, 0xff, 0x20, + 0x08, 0x73, 0x1c, 0x4e, 0x10, 0x20, 0x30, 0x60, + 0x05, 0x01, 0x35, 0x60, 0x1b, 0x4c, 0x80, 0x21, + 0x20, 0x1c, 0xbd, 0xf7, 0xac, 0xf9, 0x00, 0x21, + 0x19, 0x4a, 0x3c, 0x00, 0x48, 0x31, 0x04, 0x00, + 0x15, 0x4f, 0x00, 0x20, 0x0b, 0x01, 0x1b, 0x19, + 0x5a, 0x60, 0xcb, 0x00, 0xdb, 0x19, 0x18, 0x74, + 0x01, 0x31, 0x08, 0x29, 0xf6, 0xdb, 0x0f, 0x4c, + 0xfa, 0x21, 0x21, 0x80, 0x12, 0x49, 0x61, 0x80, + 0xa0, 0x60, 0x6a, 0x46, 0x11, 0x49, 0x04, 0x20, + 0xbd, 0xf7, 0x30, 0xff, 0x6a, 0x46, 0x10, 0x49, + 0x08, 0x20, 0xbd, 0xf7, 0x2b, 0xff, 0x10, 0x20, + 0x70, 0x60, 0x75, 0x60, 0x3c, 0x00, 0x84, 0x31, + 0x04, 0x00, 0x60, 0x68, 0x02, 0x21, 0x08, 0x43, + 0x60, 0x60, 0x0b, 0x49, 0x06, 0x4a, 0x08, 0x1c, + 0x10, 0x30, 0x08, 0x3a, 0x03, 0xc2, 0xf8, 0xbd, + 0x00, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x60, + 0x07, 0x00, 0x00, 0x10, 0x07, 0x00, 0xac, 0x73, + 0x01, 0x00, 0xd1, 0x75, 0x00, 0x00, 0x20, 0x4e, + 0x00, 0x00, 0x05, 0x2c, 0x01, 0x00, 0x11, 0x2c, + 0x01, 0x00, 0x00, 0xa0, 0x07, 0x00, 0x3c, 0x00, + 0xc0, 0x31, 0x04, 0x00, 0x70, 0xb5, 0x0e, 0x1c, + 0x00, 0x24, 0xc4, 0xf7, 0x5b, 0xfe, 0x00, 0x28, + 0x3b, 0xd0, 0x45, 0x68, 0xff, 0x2d, 0x38, 0xd0, + 0x0c, 0x2e, 0x28, 0xd2, 0x01, 0xa3, 0x9b, 0x5d, + 0x5b, 0x00, 0x9f, 0x44, 0x05, 0x07, 0x09, 0x0b, + 0x0d, 0x10, 0x13, 0x16, 0x18, 0x1b, 0x1e, 0x21, + 0x18, 0x24, 0x20, 0xe0, 0x30, 0x24, 0x1e, 0xe0, + 0x60, 0x24, 0x1c, 0xe0, 0xc0, 0x24, 0x1a, 0xe0, + 0x3c, 0x00, 0xfc, 0x31, 0x04, 0x00, 0xff, 0x24, + 0x81, 0x34, 0x17, 0xe0, 0x09, 0x24, 0xa4, 0x01, + 0x14, 0xe0, 0x09, 0x24, 0xe4, 0x01, 0x11, 0xe0, + 0x0f, 0x4c, 0x0f, 0xe0, 0x09, 0x24, 0x24, 0x02, + 0x0c, 0xe0, 0x09, 0x24, 0x64, 0x02, 0x09, 0xe0, + 0x03, 0x24, 0xe4, 0x02, 0x06, 0xe0, 0x09, 0x24, + 0xa4, 0x02, 0x03, 0xe0, 0x09, 0x21, 0x9e, 0x20, + 0xbe, 0xf7, 0x39, 0xf8, 0x60, 0x00, 0x00, 0x19, + 0x40, 0x08, 0x3c, 0x00, 0x38, 0x32, 0x04, 0x00, + 0x05, 0x49, 0x80, 0x04, 0x40, 0x18, 0x05, 0x4a, + 0xa9, 0x00, 0x89, 0x18, 0x48, 0x60, 0x64, 0x20, + 0x60, 0x43, 0x70, 0xbd, 0xdc, 0x07, 0x00, 0x00, + 0x80, 0x38, 0x01, 0x00, 0x04, 0x00, 0x07, 0x00, + 0x02, 0x49, 0x80, 0xb5, 0x08, 0x60, 0xd0, 0xf7, + 0x97, 0xf8, 0x80, 0xbd, 0x5c, 0x5b, 0x01, 0x00, + 0xf8, 0xb5, 0x00, 0x26, 0x17, 0x4c, 0x17, 0x4b, + 0x19, 0x49, 0x26, 0x70, 0x3c, 0x00, 0x74, 0x32, + 0x04, 0x00, 0x00, 0x20, 0x14, 0x33, 0x0d, 0x88, + 0x15, 0x4e, 0x15, 0x4a, 0x04, 0xe0, 0xc1, 0x00, + 0xcf, 0x18, 0x7a, 0x60, 0x5e, 0x50, 0x01, 0x30, + 0xa8, 0x42, 0xf8, 0xdb, 0xc6, 0xf7, 0x2b, 0xfd, + 0xff, 0x21, 0x11, 0x4d, 0xa5, 0x31, 0x28, 0x1c, + 0xbd, 0xf7, 0xff, 0xf8, 0x00, 0x21, 0x28, 0x1c, + 0x02, 0x1c, 0x14, 0x32, 0xc2, 0x60, 0x10, 0x1c, + 0x01, 0x31, 0x14, 0x29, 0xf8, 0xdb, 0x3c, 0x00, + 0xb0, 0x32, 0x04, 0x00, 0x00, 0x26, 0xc6, 0x60, + 0x05, 0x48, 0x0c, 0x30, 0x60, 0xc0, 0x09, 0x48, + 0x18, 0x21, 0xbd, 0xf7, 0xed, 0xf8, 0x01, 0x20, + 0x04, 0x34, 0x41, 0xc4, 0x00, 0x20, 0xf8, 0xbd, + 0x70, 0x5d, 0x01, 0x00, 0x09, 0xa0, 0x00, 0x00, + 0x30, 0xd9, 0x01, 0x00, 0x56, 0x57, 0x01, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0xa8, 0x60, 0x01, 0x00, + 0x80, 0xb5, 0x00, 0x20, 0xcf, 0xf7, 0xb6, 0xfc, + 0x3c, 0x00, 0xec, 0x32, 0x04, 0x00, 0x01, 0x49, + 0x08, 0x80, 0x80, 0xbd, 0x00, 0x00, 0x2c, 0x74, + 0x01, 0x00, 0x11, 0x48, 0xf8, 0xb5, 0x41, 0x79, + 0x00, 0x29, 0x02, 0xd1, 0x05, 0x78, 0x0f, 0x4e, + 0x01, 0xe0, 0x45, 0x78, 0x0f, 0x4e, 0x02, 0x23, + 0xf7, 0x5e, 0x00, 0x24, 0x60, 0x1b, 0x78, 0x43, + 0x64, 0x23, 0x0c, 0x49, 0x58, 0x43, 0x41, 0x18, + 0x7d, 0x20, 0xc0, 0x00, 0xbd, 0xf7, 0xf5, 0xf9, + 0x61, 0x00, 0x3c, 0x00, 0x28, 0x33, 0x04, 0x00, + 0x09, 0x4a, 0xac, 0x42, 0x50, 0x52, 0x01, 0xd1, + 0x00, 0x23, 0xf7, 0x5e, 0x01, 0x34, 0x24, 0x06, + 0x24, 0x0e, 0x10, 0x2c, 0xe9, 0xd3, 0xf8, 0xbd, + 0x0c, 0x5a, 0x01, 0x00, 0xfe, 0x59, 0x01, 0x00, + 0xfa, 0x59, 0x01, 0x00, 0x34, 0x44, 0x0f, 0x00, + 0x32, 0x5a, 0x01, 0x00, 0x38, 0xb5, 0x10, 0x4c, + 0xbe, 0x25, 0x25, 0x73, 0x20, 0x7a, 0x18, 0x21, + 0x88, 0x43, 0x20, 0x72, 0x3c, 0x00, 0x64, 0x33, + 0x04, 0x00, 0x6a, 0x46, 0x0d, 0x49, 0x0d, 0x20, + 0xbd, 0xf7, 0x33, 0xfe, 0x01, 0x20, 0x0b, 0x49, + 0x40, 0x03, 0x08, 0x60, 0x48, 0x60, 0x25, 0x73, + 0x2d, 0x20, 0xc0, 0x03, 0x20, 0x60, 0x25, 0x73, + 0x20, 0x7a, 0x10, 0x21, 0x08, 0x43, 0x20, 0x72, + 0x06, 0x48, 0x06, 0x49, 0x08, 0x60, 0x00, 0x20, + 0x48, 0x60, 0x38, 0xbd, 0x00, 0x00, 0x00, 0x03, + 0x07, 0x00, 0x8d, 0x3e, 0x01, 0x00, 0x24, 0x00, + 0xa0, 0x33, 0x04, 0x00, 0x00, 0x10, 0x07, 0x00, + 0x00, 0x87, 0x93, 0x03, 0x04, 0x79, 0x01, 0x00, + 0x80, 0xb5, 0x02, 0x21, 0x15, 0x20, 0x02, 0x4a, + 0xd0, 0xf7, 0xc8, 0xf9, 0x80, 0xbd, 0x00, 0x00, + 0x0d, 0x3e, 0x01, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x44, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x40, 0x20, 0x07, 0x00, + 0xff, 0xff, 0xff, 0xff, +}; +const uint32_t fw_len = sizeof(fw_buf) / sizeof(fw_buf[0]); diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/wl_os.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/wl_os.h new file mode 100644 index 000000000..1a3b75f35 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/wl_os.h @@ -0,0 +1,35 @@ +#ifndef WL_OS_H +#define WL_OS_H + +#include +#include + +void *owl_os_alloc(size_t size); +void *owl_os_realloc(void *ptr, size_t size); +void owl_os_free(void *p); +void *owl_os_memcpy(void *dst, const void *src, size_t n); +void *owl_os_memset(void *s, int c, size_t n); +void *owl_os_memmove(void *dst, const void *src, size_t n); +size_t owl_os_strlen(char *s); +char *owl_os_strncpy(char *dst, const char *src, size_t n); +int owl_os_strncmp(const char *s1, const char *s2, size_t n); +int owl_os_strcmp(const char *s1, const char *s2); +char *owl_os_strcpy(char *dst, const char *src); +char *owl_os_strdup(const char *s); +char *owl_os_strndup(const char *s, size_t n); +int owl_os_memcmp(const void *s1, const void *s2, size_t n); +long int owl_os_strtol(const char *nptr, char **endptr, int base); +char *owl_os_strchr(const char *s, int c); +char *owl_os_strrchr(const char *s, int c); +int owl_os_strcasecmp(const char *s1, const char *s2); +char *owl_os_strstr(const char *haystack, const char *needle); + +int owl_os_snprintf(char *str, size_t size, const char *format, ...) + __attribute__((format(printf, 3, 4))); + +int owl_os_vprintf(const char *format, va_list arg); /* debug only */ +int owl_os_printf(const char *format, ...) /* debug only */ + __attribute__((format(printf, 1, 2))); + +#endif /* WL_OS_H */ + diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/wl_sdio.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/wl_sdio.h new file mode 100644 index 000000000..ee08fad71 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/wl_sdio.h @@ -0,0 +1,172 @@ +/*! + * \file wl_sdio.h + * \brief SDIO interface for wl_api. + * Copyright (C) 2010 HD Wireless AB + * + * You should have received a copy of the license along with this library. + */ + +#ifndef WL_SDIO_H +#define WL_SDIO_H + +/** \defgroup wl_sdio SDIO Interface + * + * These functions implement the interface that the wl_api library + * needs to work with a SDIO transport layer. + * + * The functions prototyped here must be implemented when porting the + * wl_api library to a new platform with a different SDIO configuration + * + * On platforms supported by H&D Wireless these functions are + * implemented in the file avr32_sdio.c + * + * @{ + */ + +/** + * Maximum transfer size. This will set an upper limit on the len parameter + * passed to owl_sdio_tx() and owl_sdio_rx(). + * + */ +#define MAX_BLOCK_LEN 512 + + +/** + * This flag might be set when owl_sdio_cmd() is called in case the cmd will + * be followed by a data transfer. If the flag is set, the transfer direction is + * from the device to the host (read). Otherwise, the transfer direction is + * from the host to the device (write). + * + */ + #define CMD_FLAG_TO_HOST (1 << 0) + + +/** + * Indicates that the sdio driver needs to be polled in order to make + * forward progress, i.e. it does not support interrupts + * + * The actual polling will result in owl_sdio_cmd() being called to + * request status information from the device. + * + * To activate polling, this flag should be set in owl_sdio_init(). + */ +#define SDIO_FLAG_POLL (1 << 0) + +/** + * Indicates that the sdio driver only supports 1-bit mode. + * + * To set 1-bit mode, this flag should be set in owl_sdio_init(). + */ +#define SDIO_FLAG_1BIT_MODE (1 << 1) + +/** + * This function will be invoked when wlan initialization should be performed, + * this happens when the wl_fw_download() function in the transport group of + * wl_api is invoked. + * + * The wifi device supports sdio high speed mode and clock frequencies up to + * 50 MHz. + * + * The function is responsible for doing any necessary sdio initialization such + * as allocating gpio's, setting up the mci master, one time allocations of + * dma buffers etc. + * + * @param flags is an out parameter that should hold any sdio flags upon return. + * The avaible flags are prefixed with SDIO_FLAG_ + * + * + */ +void owl_sdio_init(uint8_t *flags); + + + +/** + * This function will be invoked when an sdio cmd should be sent to the + * device. + * + * @param idx is the sdio command number + * @param arg is the sdio command argument + * @param flags specifies other options, such as any transfer direction. + * @param rsp should hold the command response upon return. If null, the + * response can be ignored. + * @param data holds a pointer to any data that might follow the command. This + * allows the sdio driver to setup dma transfers while waiting for the + * command response. NULL if no data transfer will follow. Note that + * the same data pointer will be passed to owl_sdio_tx(), which should + * start the actual transfer. + * @param len is the length of the data buffer. + * + */ +void owl_sdio_cmd(uint8_t idx, uint32_t arg, uint8_t flags, uint32_t *rsp, + const uint8_t *data, uint16_t len); + + +/** + * This function will be invoked when data should be transmitted to the device. + * + * If wl_fw_downlad() was called with the size_align parameter set to non-zero, + * the pad parameter should be used. If the pad parameter is not 0, additional + * data must be transmitted after the data buffer has be sent. Depending on + * how the data buffer was first allocated (probably by an TCP/IP stack), it + * might be safe or unsafe to continue reading beyond the data buffer to + * transmit the additional padding bytes. + * + * @param data holds a pointer to the data to transmit, the pointer is the + * same as the one passed to wl_tx(). + * @param len is the number of bytes that should be transmitted, including + * padding. + * @param pad is the number of padding bytes to send. + * + */ +void owl_sdio_tx(const uint8_t *data, uint16_t len, uint8_t pad); + + +/** + * This function will be invoked when data should be received from the device. + * + * @param data should hold the read data upon return. + * @param len is the number of bytes to read. + * + */ +void owl_sdio_rx(uint8_t *data, uint16_t len); + + +/** + * Invoked when sdio rx interrupts from the device should be enabled or + * disabled. + * + * If SDIO_FLAG_POLL was set in wl_spi_init(), then this function can be + * left empty. + * + * @param enable specifies if interrupts should be enabled or disabled. + * + */ +void owl_sdio_irq(uint8_t enable); + + +/** + * Delay executiom for the specified number of ms. This function will be called + * with delays in the 10-20 ms range during fw download and startup of the + * Wi-Fi device. This function can be implemented with a simple for-loop if + * desired (beware of optimization). The timing does not have to be accurate as + * long as the actual delay becomes at least the specified number of ms. + * + * @param ms is the minimal amount of time to wait [ms]. + * + */ +void owl_sdio_mdelay(uint32_t ms); + + +/** + * This function should be called whenever an interrupt is detected. It can + * be called from an interrupt context. + * + * If SDIO_FLAG_POLL was set in owl_sdio_init(), then wl_sdio_irq() + * should never be called. + * + */ +extern void wl_sdio_irq(void); + +/*! @} */ + +#endif diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/wl_spi.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/wl_spi.h new file mode 100644 index 000000000..5d9137499 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/wl_spi.h @@ -0,0 +1,185 @@ +/*! + * \file wl_spi.h + * \brief SPI interface for wl_api. + * Copyright (C) 2010 HD Wireless AB + * + * You should have received a copy of the license along with this library. + */ + +#ifndef WL_SPI_H +#define WL_SPI_H + +#ifndef WITHOUT_STDINT +#include +#endif + +/** \defgroup wl_spi SPI Interface + * + * These functions implement the interface that the wl_api library + * needs to work with a SPI transport layer. + * + * The functions prototyped here must be implemented when porting the + * wl_api library to a new platform with a different SPI configuration + * + * On platforms supported by H&D Wireless these functions are + * implemented in the file avr32_spi.c + * + * @{ + */ + +/** + * Maximum transfer size. This will set an upper limit on the len parameter + * passed to owl_spi_txrx(). + * + * + */ +#define MAX_BLOCK_LEN 512 + + +/** + * Indicates that the spi driver needs to be polled in order to make + * forward progress, i.e. it does not support interrupts through SD pin 8. + * + * The actual polling will result in owl_spi_txrx() being call to + * request status information from the device. + * + * To activate polling, this flag should be set in owl_spi_init(). + * + * See wl_poll() and wl_register_rx_isr() for more information regarding + * polled and interrupt modes. + * + */ +#define SPI_FLAG_POLL (1 << 0) + + +/** + * This function will be invoked when wlan device initialization should be + * performed, this happens when the wl_fw_download() function in the transport + * group of wl_api is invoked. + * + * The wifi device requires spi mode 3, i.e. clock polarity high and sample + * on second phase. This corresponds to CPOL=1, CPHA=1. Maximum frequency on + * spi clock is 30 MHz. + * + * The function is also responsible for doing any necessary spi initialization + * such as allocating gpio's, setting up the SPI master, one time allocations of + * dma buffers etc. + * + * + * If the SPB105 device is used, two signals; POWER (pin 10 on SPB105) and + * SHUTDOWN (pin 4 on SPB105) might be connected to gpio's on the host. + * The GPIO_POWER_PIN is the main power supply to the device. The + * GPIO_SHUTDOWN_PIN (active low) should be defined as an input. + * + * After GPIO_POWER_PIN is pulled high by the host, the device will pull the + * GPIO_SHUTDOWN_PIN high once the device is properly powered. + * + * However, if pin 4 (GPIO_SHUTDOWN_PIN) is not connected to the host, a delay + * of up to 250 ms must be added after GPIO_POWER_PIN is pulled high to ensure + * that startup is completed. The actual time is usually much shorter, therefore + * one might try to reduce the delay for a particualar hardware design. + * + * On SPB104, the GPIO_POWER_PIN will be connected to VCC and GPIO_SHUTDOWN_PIN + * will be unconnected; hence we have to make sure that we have enough delay + * after powering on the host. Since the device power-on usually happens at the + * same time as the host power-on, the startup time of the host can be + * subtracted from any delay put into owl_spi_init(). + * + * @param flags is an out parameter that should hold any spi flags upon return. + * The avaible flags are prefixed with SPI_FLAG_ + * + * @return 0 on success + * -1 if any error occurs + * + */ +int owl_spi_init(uint8_t *flags); + + +/** + * Invoked when a spi transfer should be performed. + * + * All buffers that are allocated by the wl library will have a size that is + * aligned to 4. If size-unaligned data is passed to this function, it is + * always allocated by the ip stack. If 4-byte size alignment (e.g. for DMA) + * is required, 1-3 extra padding bytes can be transmitted after the in buffer. + * These bytes must be 0xff. + * + * Since size-unaligned data always comes from the ip stack, the out ptr is + * always NULL for such data. + * + * @param in points a buffer which holds the data to be transmitted. If NULL, + * then \a len bytes with the value 0xff should be transmitted on the + * bus. + * @param out points a buffer should hold the data received from the device. If + * NULL, any received data can be discarded. + * @param len is the length of the in and out buffers. + * + */ +void owl_spi_txrx(const uint8_t *in, uint8_t* out, uint16_t len); + + +/** + * Invoked when spi rx interrupts from the device should be enabled or disabled. + * Note that the spi interrupts are obtained from pin 8 on SPB104 or pin 3 from + * SPB105. This pin can be be connected to a gpio on the host. The irq line + * will signal an interrupt on both edges. + * + * In general, the wifi device will not issue a new interrupt unless the + * last interrupt has been handled. Also, during normal operation (i.e after + * the complete callback registered in wl_init() has been invoked), + * owl_spi_irq() will never be invoked so interrupts will be enabled all + * the time. For the SPI-mode, the purpose of owl_spi_irq() is basically to + * make sure that the first interrupt (coming after the reset performed in + * owl_spi_init()) is ignored. + * + * If SPI_FLAG_POLL was set in owl_spi_init(), then this function can be + * left empty and the wifi device will be used in polled mode. In polled mode, + * the interrupt line is not used. Regardless of polled or interrupt-mode, + * wl_poll() must be called to ensure progress of the driver. + * + * @param enable specifies if interrupts should be enabled or disabled. + * + */ +void owl_spi_irq(uint8_t enable); + + +/** + * Invoked when the spi cs for the wifi device should be enabled. Note that + * multiple calls to owl_spi_txrx() might be done during a 'single' chip + * select. + * + * @param enable specifies whether chip select should be asserted or deasserted, + * The chip select signal is active low, so if enable is '1' then the + * chip select connected to the wifi device should be set to '0'. + * + */ +void owl_spi_cs(uint8_t enable); + + +/** + * Delay executiom for the specified number of ms. This function will be called + * with delays in the 10-20 ms range during fw download and startup of the + * Wi-Fi device. This function can be implemented with a simple for-loop if + * desired (beware of optimization). The timing does not have to be accurate as + * long as the actual delay becomes at least the specified number of ms. + * + * @param ms is the minimal amount of time to wait [ms]. + * + */ +void owl_spi_mdelay(uint32_t ms); + + +/** + * This function should be called whenever an interrupt is detected. It can + * be called from an interrupt context. + * + * If SPI_FLAG_POLL was set in owl_spi_init(), then wl_spi_irq() + * should never be called. + * + */ +extern void wl_spi_irq(void); + + +/*! @} */ + +#endif diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/wlap_api.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/wlap_api.h new file mode 100644 index 000000000..9a4483afa --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/wlap_api.h @@ -0,0 +1,154 @@ +/* + * Programming interface for wlap_api. + * Copyright (C) 2011 HD Wireless AB + * + * You should have received a copy of the license along with this library. + */ + +/*! \file wlap_api.h ************************************************************* + * + * \brief WiFi AP API + * + * This file provides the wlap_api interface. + * + * - Compiler: GNU GCC for AVR32 + * - Supported devices: + * \li SPB104 + EVK1100 + * \li SPB104 + EVK1101 + * \li SPB104 + EVK1104 + * \li SPB104 + EVK1105 (SPI) + * \li SPB104 + EVK1105 (SPI + irq) + * \li SPB105 + EVK1105 (SPI) + * - AppNote: + * + * \author H&D Wireless AB: \n + * + ***************************************************************************** + * + * \section intro Introduction + * This is the documentation for the WiFi AP Driver API \a wlap_api. + * + * \section files Main Files + * - wlap_api.h : WiFi driver interface. + * - libwlap_api_*.*.a - Driver library. + * + */ + +#ifndef WLAP_API_H +#define WLAP_API_H + +#define WLAP_API_RELEASE_NAME "unknown" + +#include + +/** \defgroup wl_softap Access Point Mode + * + * \brief Support the WiFi Access Point mode. + * + * @{ + */ +/* + * Station representation + * + */ +struct wl_sta_t +{ + struct wl_mac_addr_t bssid; /**< The BSSID of the network. */ + uint8_t queued_pkt_cnt; /**< Number of queueud packets for + this STA. */ + uint8_t in_ps; /**< Is the STA in power save mode. */ + uint8_t aid; /**< STA AID */ +}; + +/* Station list representation. Array of pointers to wl_sta_t entries. */ +struct wl_sta_list_t +{ + struct wl_sta_t **sta; /**< The list of pointers to stations */ + size_t cnt; /**< Number of stations */ +}; + +/*! \brief Get the list of currently associated stations (SoftAP). + * + * Retrieves the list of current stations from + * the driver. + * + * This function is not thread safe. It must be called in the + * same execution context as wl_poll(). + * + * @param network_list Output buffer. The API call returns + * a pointer to allocated memory containing the network list. + * @return + * - WL_SUCCESS + * - WL_FAILURE. + */ +wl_err_t wlap_get_sta_list(struct wl_sta_list_t **network_list); + + +/*! Callback used to read data from a TX packet. + * This function is supplied by the user of the API. + * + * @param dst Destination buffer. The data should be copied + * to this buffer. + * @param src_handle Handle to the source packet from where + * the data should be copied. This handle is the same one that + * is passed in parameter \a pkt_handle to \a wl_process_tx(). + * @param read_len Number of bytes to copy from \a src_handle + * to \a dst. + * @param offset The offset in bytes, counting from the + * beginning of the Ethernet header, from where to copy data. + * @return + * - The number of bytes copied. This number may be smaller + * than the length requested in \a read_len but it may not + * be shorter than the length of the packet counting from + * \a offset. In other words, if the caller of this function + * receives a return count that is shorter than \a read_len + * he will assume that all packet data has been read. + * - < 0 on error. + */ +typedef ssize_t (*wl_pkt_read_cb_t)(char *dst, + void *src_handle, + size_t read_len, + int offset); + +/*! \brief Register a data access function for TX packets (SoftAP). + * + * When a TX data packet has a different representation than a single + * contiguous buffer in memory then a packet read function must be + * implemented and registered with this call. Whenever the library + * needs to read packet data it will call this function to do it. + * + * This function can be ignored if the TX packet representation is + * a single contiguous buffer. This function is only needed in SoftAP + * mode. + * + * @param pkt_read_cb Read callback. + * @param ctx Context + */ +void wl_register_pkt_read_cb(wl_pkt_read_cb_t pkt_read_cb); + +/*! \brief Start a network using the SoftAP mode. + * + * This call will cause the WiFi chip to start sending beacons + * and accept associations from WiFi stations. + * + */ +wl_err_t wlap_start_ap(const char *ssid, + const size_t ssid_len, + const uint8_t channel, + const enum wl_auth_mode auth_mode, + const enum wl_enc_type enc_type); + +/*! \brief Disconnect a STA (SoftAP) + * + * @param bssid The BSSID of the station to disconnect. + * @return + * - WL_SUCCESS + * - WL_FAILURE. + */ +wl_err_t wlap_disconnect_sta(const struct wl_mac_addr_t bssid); + + +/*! @} */ /* End wl_softap group */ + + +#endif diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/CPU/CYCLE_COUNTER/cycle_counter.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/CPU/CYCLE_COUNTER/cycle_counter.h new file mode 100644 index 000000000..d0c51dfa1 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/CPU/CYCLE_COUNTER/cycle_counter.h @@ -0,0 +1,309 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file has been prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Cycle counter driver. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32UC devices. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + *****************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _CYCLE_COUNTER_H_ +#define _CYCLE_COUNTER_H_ + +#include "compiler.h" + + +//! Structure holding private information, automatically initialized by the +//! cpu_set_timeout() function. +typedef struct +{ + //! The cycle count at the begining of the timeout. + unsigned long delay_start_cycle; + + //! The cycle count at the end of the timeout. + unsigned long delay_end_cycle; + + //! Enable/disable the timout detection + unsigned char timer_state; + #define CPU_TIMER_STATE_STARTED 0 + #define CPU_TIMER_STATE_REACHED 1 + #define CPU_TIMER_STATE_STOPPED 2 +} t_cpu_time; + + +/*! + * \brief Convert milli-seconds into CPU cycles. + * + * \param ms: Number of millisecond. + * \param fcpu_hz: CPU frequency in Hz. + * + * \return the converted number of CPU cycles. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ U32 cpu_ms_2_cy(unsigned long ms, unsigned long fcpu_hz) +{ + return ((unsigned long long)ms * fcpu_hz + 999) / 1000; +} + + +/*! + * \brief Convert micro-seconds into CPU cycles. + * + * \param us: Number of microsecond. + * \param fcpu_hz: CPU frequency in Hz. + * + * \return the converted number of CPU cycles. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ U32 cpu_us_2_cy(unsigned long us, unsigned long fcpu_hz) +{ + return ((unsigned long long)us * fcpu_hz + 999999) / 1000000; +} + + +/*! + * \brief Convert CPU cycles into milli-seconds. + * + * \param cy: Number of CPU cycles. + * \param fcpu_hz: CPU frequency in Hz. + * + * \return the converted number of milli-second. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ U32 cpu_cy_2_ms(unsigned long cy, unsigned long fcpu_hz) +{ + return ((unsigned long long)cy * 1000 + fcpu_hz-1) / fcpu_hz; +} + + +/*! + * \brief Convert CPU cycles into micro-seconds. + * + * \param cy: Number of CPU cycles. + * \param fcpu_hz: CPU frequency in Hz. + * + * \return the converted number of micro-second. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ U32 cpu_cy_2_us(unsigned long cy, unsigned long fcpu_hz) +{ + return ((unsigned long long)cy * 1000000 + fcpu_hz-1) / fcpu_hz; +} + + +/*! + * \brief Set a timer variable. + * + * Ex: t_cpu_time timer; + * cpu_set_timeout( cpu_ms_2_cy(10, FOSC0), &timer ); // timeout in 10 ms + * if( cpu_is_timeout(&timer) ) + * cpu_stop_timeout(&timer); + * ../.. + * + * \param delay: (input) delay in CPU cycles before timeout. + * \param cpu_time: (output) internal information used by the timer API. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void cpu_set_timeout(unsigned long delay, t_cpu_time *cpu_time) +{ + cpu_time->delay_start_cycle = Get_system_register(AVR32_COUNT); + cpu_time->delay_end_cycle = cpu_time->delay_start_cycle + delay; + cpu_time->timer_state = CPU_TIMER_STATE_STARTED; +} + + +/*! + * \brief Test if a timer variable reached its timeout. + * + * Once the timeout is reached, the function will always return TRUE, + * until the cpu_stop_timeout() function is called. + * + * Ex: t_cpu_time timer; + * cpu_set_timeout( 10, FOSC0, &timer ); // timeout in 10 ms + * if( cpu_is_timeout(&timer) ) + * cpu_stop_timeout(&timer); + * ../.. + * + * \param cpu_time: (input) internal information used by the timer API. + * + * \return TRUE if timeout occured, otherwise FALSE. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ unsigned long cpu_is_timeout(t_cpu_time *cpu_time) +{ + unsigned long current_cycle_count = Get_system_register(AVR32_COUNT); + + if( cpu_time->timer_state==CPU_TIMER_STATE_STOPPED ) + return FALSE; + + // Test if the timeout as already occured. + else if (cpu_time->timer_state == CPU_TIMER_STATE_REACHED) + return TRUE; + + // If the ending cycle count of this timeout is wrapped, ... + else if (cpu_time->delay_start_cycle > cpu_time->delay_end_cycle) + { + if (current_cycle_count < cpu_time->delay_start_cycle && current_cycle_count > cpu_time->delay_end_cycle) + { + cpu_time->timer_state = CPU_TIMER_STATE_REACHED; + return TRUE; + } + return FALSE; + } + else + { + if (current_cycle_count < cpu_time->delay_start_cycle || current_cycle_count > cpu_time->delay_end_cycle) + { + cpu_time->timer_state = CPU_TIMER_STATE_REACHED; + return TRUE; + } + return FALSE; + } +} + + +/*! + * \brief Stop a timeout detection. + * + * Ex: t_cpu_time timer; + * cpu_set_timeout( 10, FOSC0, &timer ); // timeout in 10 ms + * if( cpu_is_timeout(&timer) ) + * cpu_stop_timeout(&timer); + * ../.. + * + * \param cpu_time: (input) internal information used by the timer API. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void cpu_stop_timeout(t_cpu_time *cpu_time) +{ + cpu_time->timer_state = CPU_TIMER_STATE_STOPPED; +} + + +/*! + * \brief Test if a timer is stopped. + * + * \param cpu_time: (input) internal information used by the timer API. + * + * \return TRUE if timer is stopped, otherwise FALSE. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ unsigned long cpu_is_timer_stopped(t_cpu_time *cpu_time) +{ + + if( cpu_time->timer_state==CPU_TIMER_STATE_STOPPED ) + return TRUE; + else + return FALSE; +} + + +/*! + * \brief Waits during at least the specified delay (in millisecond) before returning. + * + * \param delay: Number of millisecond to wait. + * \param fcpu_hz: CPU frequency in Hz. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void cpu_delay_ms(unsigned long delay, unsigned long fcpu_hz) +{ + t_cpu_time timer; + cpu_set_timeout( cpu_ms_2_cy(delay, fcpu_hz), &timer); + while( !cpu_is_timeout(&timer) ); +} + +/*! + * \brief Waits during at least the specified delay (in microsecond) before returning. + * + * \param delay: Number of microsecond to wait. + * \param fcpu_hz: CPU frequency in Hz. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void cpu_delay_us(unsigned long delay, unsigned long fcpu_hz) +{ + t_cpu_time timer; + cpu_set_timeout( cpu_us_2_cy(delay, fcpu_hz), &timer); + while( !cpu_is_timeout(&timer) ); +} + +/*! + * \brief Waits during at least the specified delay (in CPU cycles) before returning. + * + * \param delay: Number of CPU cycles to wait. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void cpu_delay_cy(unsigned long delay) +{ + t_cpu_time timer; + cpu_set_timeout( delay, &timer); + while( !cpu_is_timeout(&timer) ); +} + + +#define Get_sys_count() ( Get_system_register(AVR32_COUNT) ) +#define Set_sys_count(x) ( Set_system_register(AVR32_COUNT, (x)) ) +#define Get_sys_compare() ( Get_system_register(AVR32_COMPARE) ) +#define Set_sys_compare(x) ( Set_system_register(AVR32_COMPARE, (x)) ) + + +#endif // _CYCLE_COUNTER_H_ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/EBI/SMC/smc.c b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/EBI/SMC/smc.c new file mode 100644 index 000000000..543fed644 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/EBI/SMC/smc.c @@ -0,0 +1,995 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief SMC on EBI driver for AVR32 UC3. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with a SMC module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#include "compiler.h" +#include "preprocessor.h" +#include "gpio.h" +#include "smc.h" + +// Configure the SM Controller with SM setup and timing information for all chip select +#define SMC_CS_SETUP(ncs) { \ + U32 nwe_setup = ((NWE_SETUP * hsb_mhz_up + 999) / 1000); \ + U32 ncs_wr_setup = ((NCS_WR_SETUP * hsb_mhz_up + 999) / 1000); \ + U32 nrd_setup = ((NRD_SETUP * hsb_mhz_up + 999) / 1000); \ + U32 ncs_rd_setup = ((NCS_RD_SETUP * hsb_mhz_up + 999) / 1000); \ + U32 nwe_pulse = ((NWE_PULSE * hsb_mhz_up + 999) / 1000); \ + U32 ncs_wr_pulse = ((NCS_WR_PULSE * hsb_mhz_up + 999) / 1000); \ + U32 nrd_pulse = ((NRD_PULSE * hsb_mhz_up + 999) / 1000); \ + U32 ncs_rd_pulse = ((NCS_RD_PULSE * hsb_mhz_up + 999) / 1000); \ + U32 nwe_cycle = ((NWE_CYCLE * hsb_mhz_up + 999) / 1000); \ + U32 nrd_cycle = ((NRD_CYCLE * hsb_mhz_up + 999) / 1000); \ + \ + /* Some coherence checks... */ \ + /* Ensures CS is active during Rd or Wr */ \ + if( ncs_rd_setup + ncs_rd_pulse < nrd_setup + nrd_pulse ) \ + ncs_rd_pulse = nrd_setup + nrd_pulse - ncs_rd_setup; \ + if( ncs_wr_setup + ncs_wr_pulse < nwe_setup + nwe_pulse ) \ + ncs_wr_pulse = nwe_setup + nwe_pulse - ncs_wr_setup; \ + \ + /* ncs_hold = n_cycle - ncs_setup - ncs_pulse */ \ + /* n_hold = n_cycle - n_setup - n_pulse */ \ + /* */ \ + /* All holds parameters must be positive or null, so: */ \ + /* nwe_cycle shall be >= ncs_wr_setup + ncs_wr_pulse */ \ + if( nwe_cycle < ncs_wr_setup + ncs_wr_pulse ) \ + nwe_cycle = ncs_wr_setup + ncs_wr_pulse; \ + \ + /* nwe_cycle shall be >= nwe_setup + nwe_pulse */ \ + if( nwe_cycle < nwe_setup + nwe_pulse ) \ + nwe_cycle = nwe_setup + nwe_pulse; \ + \ + /* nrd_cycle shall be >= ncs_rd_setup + ncs_rd_pulse */ \ + if( nrd_cycle < ncs_rd_setup + ncs_rd_pulse ) \ + nrd_cycle = ncs_rd_setup + ncs_rd_pulse; \ + \ + /* nrd_cycle shall be >= nrd_setup + nrd_pulse */ \ + if( nrd_cycle < nrd_setup + nrd_pulse ) \ + nrd_cycle = nrd_setup + nrd_pulse; \ + \ + AVR32_SMC.cs[ncs].setup = (nwe_setup << AVR32_SMC_SETUP0_NWE_SETUP_OFFSET) | \ + (ncs_wr_setup << AVR32_SMC_SETUP0_NCS_WR_SETUP_OFFSET) | \ + (nrd_setup << AVR32_SMC_SETUP0_NRD_SETUP_OFFSET) | \ + (ncs_rd_setup << AVR32_SMC_SETUP0_NCS_RD_SETUP_OFFSET); \ + AVR32_SMC.cs[ncs].pulse = (nwe_pulse << AVR32_SMC_PULSE0_NWE_PULSE_OFFSET) | \ + (ncs_wr_pulse << AVR32_SMC_PULSE0_NCS_WR_PULSE_OFFSET) | \ + (nrd_pulse << AVR32_SMC_PULSE0_NRD_PULSE_OFFSET) | \ + (ncs_rd_pulse << AVR32_SMC_PULSE0_NCS_RD_PULSE_OFFSET); \ + AVR32_SMC.cs[ncs].cycle = (nwe_cycle << AVR32_SMC_CYCLE0_NWE_CYCLE_OFFSET) | \ + (nrd_cycle << AVR32_SMC_CYCLE0_NRD_CYCLE_OFFSET); \ + AVR32_SMC.cs[ncs].mode = (((NCS_CONTROLLED_READ) ? AVR32_SMC_MODE0_READ_MODE_NCS_CONTROLLED : \ + AVR32_SMC_MODE0_READ_MODE_NRD_CONTROLLED) << AVR32_SMC_MODE0_READ_MODE_OFFSET) | \ + + (((NCS_CONTROLLED_WRITE) ? AVR32_SMC_MODE0_WRITE_MODE_NCS_CONTROLLED : \ + AVR32_SMC_MODE0_WRITE_MODE_NWE_CONTROLLED) << AVR32_SMC_MODE0_WRITE_MODE_OFFSET) | \ + (NWAIT_MODE << AVR32_SMC_MODE0_EXNW_MODE_OFFSET) | \ + (((SMC_8_BIT_CHIPS) ? AVR32_SMC_MODE0_BAT_BYTE_WRITE : \ + AVR32_SMC_MODE0_BAT_BYTE_SELECT) << AVR32_SMC_MODE0_BAT_OFFSET) | \ + (((SMC_DBW <= 8 ) ? AVR32_SMC_MODE0_DBW_8_BITS : \ + (SMC_DBW <= 16) ? AVR32_SMC_MODE0_DBW_16_BITS : \ + AVR32_SMC_MODE0_DBW_32_BITS) << AVR32_SMC_MODE0_DBW_OFFSET) | \ + (TDF_CYCLES << AVR32_SMC_MODE0_TDF_CYCLES_OFFSET) | \ + (TDF_OPTIM << AVR32_SMC_MODE0_TDF_MODE_OFFSET) | \ + (PAGE_MODE << AVR32_SMC_MODE0_PMEN_OFFSET) | \ + (PAGE_SIZE << AVR32_SMC_MODE0_PS_OFFSET); \ + smc_tab_cs_size[ncs] = (U8)EXT_SM_SIZE; \ + } + +static U8 smc_tab_cs_size[6]; + +static void smc_enable_muxed_pins(void); + + +void smc_init(unsigned long hsb_hz) +{ + unsigned long hsb_mhz_up = (hsb_hz + 999999) / 1000000; + +//! Whether to use the NCS0 pin +#ifdef SMC_USE_NCS0 + #include SMC_COMPONENT_CS0 + + // Setup SMC for NCS0 + SMC_CS_SETUP(0) + + #ifdef SMC_DBW_GLOBAL + #if (SMC_DBW_GLOBAL < SMC_DBW) + #undef SMC_DBW_GLOBAL + #if (SMC_DBW == 8) + #define SMC_DBW_GLOBAL 8 + #elif (SMC_DBW == 16) + #define SMC_DBW_GLOBAL 16 + #elif (SMC_DBW == 32) + #define SMC_DBW_GLOBAL 32 + #else + #error error in SMC_DBW size + #endif + #endif + #else + #if (SMC_DBW == 8) + #define SMC_DBW_GLOBAL 8 + #elif (SMC_DBW == 16) + #define SMC_DBW_GLOBAL 16 + #elif (SMC_DBW == 32) + #define SMC_DBW_GLOBAL 32 + #else + #error error in SMC_DBW size + #endif + #endif + + #ifdef SMC_8_BIT_CHIPS_GLOBAL + #if (SMC_8_BIT_CHIPS_GLOBAL < SMC_8_BIT) + #undef SMC_8_BIT_CHIPS_GLOBAL + #if (SMC_8_BIT_CHIPS == TRUE) + #define SMC_8_BIT_CHIPS_GLOBAL TRUE + #elif (SMC_8_BIT_CHIPS == FALSE) + #define SMC_8_BIT_CHIPS_GLOBAL FALSE + #else + #error error in SMC_8_BIT_CHIPS size + #endif + #endif + #else + #if (SMC_8_BIT_CHIPS == TRUE) + #define SMC_8_BIT_CHIPS_GLOBAL TRUE + #elif (SMC_8_BIT_CHIPS == FALSE) + #define SMC_8_BIT_CHIPS_GLOBAL FALSE + #else + #error error in SMC_8_BIT_CHIPS size + #endif + #endif + + #ifdef NWAIT_MODE_GLOBAL + #if (NWAIT_MODE_GLOBAL < NWAIT_MODE) + #undef NWAIT_MODE_GLOBAL + #if (NWAIT_MODE == AVR32_SMC_EXNW_MODE_DISABLED) + #define NWAIT_MODE_GLOBAL AVR32_SMC_EXNW_MODE_DISABLED + #elif (NWAIT_MODE == AVR32_SMC_EXNW_MODE_FROZEN) + #define NWAIT_MODE_GLOBAL AVR32_SMC_EXNW_MODE_FROZEN + #else + #error error in NWAIT_MODE size + #endif + #endif + #else + #if (NWAIT_MODE == AVR32_SMC_EXNW_MODE_DISABLED) + #define NWAIT_MODE_GLOBAL AVR32_SMC_EXNW_MODE_DISABLED + #elif (NWAIT_MODE == AVR32_SMC_EXNW_MODE_FROZEN) + #define NWAIT_MODE_GLOBAL AVR32_SMC_EXNW_MODE_FROZEN + #else + #error error in NWAIT_MODE size + #endif + #endif + + #undef EXT_SM_SIZE + #undef SMC_DBW + #undef SMC_8_BIT_CHIPS + #undef NWE_SETUP + #undef NCS_WR_SETUP + #undef NRD_SETUP + #undef NCS_RD_SETUP + #undef NCS_WR_PULSE + #undef NWE_PULSE + #undef NCS_RD_PULSE + #undef NRD_PULSE + #undef NCS_WR_HOLD + #undef NWE_HOLD + #undef NWE_CYCLE + #undef NCS_RD_HOLD + #undef NRD_CYCLE + #undef TDF_CYCLES + #undef TDF_OPTIM + #undef PAGE_MODE + #undef PAGE_SIZE + #undef NCS_CONTROLLED_READ + #undef NCS_CONTROLLED_WRITE + #undef NWAIT_MODE +#endif + + +//! Whether to use the NCS1 pin +#ifdef SMC_USE_NCS1 + #include SMC_COMPONENT_CS1 + + // Enable SM mode for CS1 if necessary. + AVR32_HMATRIX.sfr[AVR32_EBI_HMATRIX_NR] &= ~(1 << AVR32_EBI_SDRAM_CS); + AVR32_HMATRIX.sfr[AVR32_EBI_HMATRIX_NR]; + + // Setup SMC for NCS1 + SMC_CS_SETUP(1) + + #ifdef SMC_DBW_GLOBAL + #if (SMC_DBW_GLOBAL < SMC_DBW) + #undef SMC_DBW_GLOBAL + #if (SMC_DBW == 8) + #define SMC_DBW_GLOBAL 8 + #elif (SMC_DBW == 16) + #define SMC_DBW_GLOBAL 16 + #elif (SMC_DBW == 32) + #define SMC_DBW_GLOBAL 32 + #else + #error error in SMC_DBW size + #endif + #endif + #else + #if (SMC_DBW == 8) + #define SMC_DBW_GLOBAL 8 + #elif (SMC_DBW == 16) + #define SMC_DBW_GLOBAL 16 + #elif (SMC_DBW == 32) + #define SMC_DBW_GLOBAL 32 + #else + #error error in SMC_DBW size + #endif + #endif + + #ifdef SMC_8_BIT_CHIPS_GLOBAL + #if (SMC_8_BIT_CHIPS_GLOBAL < SMC_8_BIT) + #undef SMC_8_BIT_CHIPS_GLOBAL + #if (SMC_8_BIT_CHIPS == TRUE) + #define SMC_8_BIT_CHIPS_GLOBAL TRUE + #elif (SMC_8_BIT_CHIPS == FALSE) + #define SMC_8_BIT_CHIPS_GLOBAL FALSE + #else + #error error in SMC_8_BIT_CHIPS size + #endif + #endif + #else + #if (SMC_8_BIT_CHIPS == TRUE) + #define SMC_8_BIT_CHIPS_GLOBAL TRUE + #elif (SMC_8_BIT_CHIPS == FALSE) + #define SMC_8_BIT_CHIPS_GLOBAL FALSE + #else + #error error in SMC_8_BIT_CHIPS size + #endif + #endif + + #ifdef NWAIT_MODE_GLOBAL + #if (NWAIT_MODE_GLOBAL < NWAIT_MODE) + #undef NWAIT_MODE_GLOBAL + #if (NWAIT_MODE == AVR32_SMC_EXNW_MODE_DISABLED) + #define NWAIT_MODE_GLOBAL AVR32_SMC_EXNW_MODE_DISABLED + #elif (NWAIT_MODE == AVR32_SMC_EXNW_MODE_FROZEN) + #define NWAIT_MODE_GLOBAL AVR32_SMC_EXNW_MODE_FROZEN + #else + #error error in NWAIT_MODE size + #endif + #endif + #else + #if (NWAIT_MODE == AVR32_SMC_EXNW_MODE_DISABLED) + #define NWAIT_MODE_GLOBAL AVR32_SMC_EXNW_MODE_DISABLED + #elif (NWAIT_MODE == AVR32_SMC_EXNW_MODE_FROZEN) + #define NWAIT_MODE_GLOBAL AVR32_SMC_EXNW_MODE_FROZEN + #else + #error error in NWAIT_MODE size + #endif + #endif + + #undef EXT_SM_SIZE + #undef SMC_DBW + #undef SMC_8_BIT_CHIPS + #undef NWE_SETUP + #undef NCS_WR_SETUP + #undef NRD_SETUP + #undef NCS_RD_SETUP + #undef NCS_WR_PULSE + #undef NWE_PULSE + #undef NCS_RD_PULSE + #undef NRD_PULSE + #undef NCS_WR_HOLD + #undef NWE_HOLD + #undef NWE_CYCLE + #undef NCS_RD_HOLD + #undef NRD_CYCLE + #undef TDF_CYCLES + #undef TDF_OPTIM + #undef PAGE_MODE + #undef PAGE_SIZE + #undef NCS_CONTROLLED_READ + #undef NCS_CONTROLLED_WRITE + #undef NWAIT_MODE +#endif + +//! Whether to use the NCS2 pin +#ifdef SMC_USE_NCS2 + #include SMC_COMPONENT_CS2 + + // Setup SMC for NCS2 + SMC_CS_SETUP(2) + + #ifdef SMC_DBW_GLOBAL + #if (SMC_DBW_GLOBAL < SMC_DBW) + #undef SMC_DBW_GLOBAL + #if (SMC_DBW == 8) + #define SMC_DBW_GLOBAL 8 + #elif (SMC_DBW == 16) + #define SMC_DBW_GLOBAL 16 + #elif (SMC_DBW == 32) + #define SMC_DBW_GLOBAL 32 + #else + #error error in SMC_DBW size + #endif + #endif + #else + #if (SMC_DBW == 8) + #define SMC_DBW_GLOBAL 8 + #elif (SMC_DBW == 16) + #define SMC_DBW_GLOBAL 16 + #elif (SMC_DBW == 32) + #define SMC_DBW_GLOBAL 32 + #else + #error error in SMC_DBW size + #endif + #endif + + #ifdef SMC_8_BIT_CHIPS_GLOBAL + #if (SMC_8_BIT_CHIPS_GLOBAL < SMC_8_BIT) + #undef SMC_8_BIT_CHIPS_GLOBAL + #if (SMC_8_BIT_CHIPS == TRUE) + #define SMC_8_BIT_CHIPS_GLOBAL TRUE + #elif (SMC_8_BIT_CHIPS == FALSE) + #define SMC_8_BIT_CHIPS_GLOBAL FALSE + #else + #error error in SMC_8_BIT_CHIPS size + #endif + #endif + #else + #if (SMC_8_BIT_CHIPS == TRUE) + #define SMC_8_BIT_CHIPS_GLOBAL TRUE + #elif (SMC_8_BIT_CHIPS == FALSE) + #define SMC_8_BIT_CHIPS_GLOBAL FALSE + #else + #error error in SMC_8_BIT_CHIPS size + #endif + #endif + + #ifdef NWAIT_MODE_GLOBAL + #if (NWAIT_MODE_GLOBAL < NWAIT_MODE) + #undef NWAIT_MODE_GLOBAL + #if (NWAIT_MODE == AVR32_SMC_EXNW_MODE_DISABLED) + #define NWAIT_MODE_GLOBAL AVR32_SMC_EXNW_MODE_DISABLED + #elif (NWAIT_MODE == AVR32_SMC_EXNW_MODE_FROZEN) + #define NWAIT_MODE_GLOBAL AVR32_SMC_EXNW_MODE_FROZEN + #else + #error error in NWAIT_MODE size + #endif + #endif + #else + #if (NWAIT_MODE == AVR32_SMC_EXNW_MODE_DISABLED) + #define NWAIT_MODE_GLOBAL AVR32_SMC_EXNW_MODE_DISABLED + #elif (NWAIT_MODE == AVR32_SMC_EXNW_MODE_FROZEN) + #define NWAIT_MODE_GLOBAL AVR32_SMC_EXNW_MODE_FROZEN + #else + #error error in NWAIT_MODE size + #endif + #endif + + + #undef EXT_SM_SIZE + #undef SMC_DBW + #undef SMC_8_BIT_CHIPS + #undef NWE_SETUP + #undef NCS_WR_SETUP + #undef NRD_SETUP + #undef NCS_RD_SETUP + #undef NCS_WR_PULSE + #undef NWE_PULSE + #undef NCS_RD_PULSE + #undef NRD_PULSE + #undef NCS_WR_HOLD + #undef NWE_HOLD + #undef NWE_CYCLE + #undef NCS_RD_HOLD + #undef NRD_CYCLE + #undef TDF_CYCLES + #undef TDF_OPTIM + #undef PAGE_MODE + #undef PAGE_SIZE + #undef NCS_CONTROLLED_READ + #undef NCS_CONTROLLED_WRITE + #undef NWAIT_MODE +#endif + +//! Whether to use the NCS3 pin +#ifdef SMC_USE_NCS3 + #include SMC_COMPONENT_CS3 + + // Setup SMC for NCS3 + SMC_CS_SETUP(3) + + #ifdef SMC_DBW_GLOBAL + #if (SMC_DBW_GLOBAL < SMC_DBW) + #undef SMC_DBW_GLOBAL + #if (SMC_DBW == 8) + #define SMC_DBW_GLOBAL 8 + #elif (SMC_DBW == 16) + #define SMC_DBW_GLOBAL 16 + #elif (SMC_DBW == 32) + #define SMC_DBW_GLOBAL 32 + #else + #error error in SMC_DBW size + #endif + #endif + #else + #if (SMC_DBW == 8) + #define SMC_DBW_GLOBAL 8 + #elif (SMC_DBW == 16) + #define SMC_DBW_GLOBAL 16 + #elif (SMC_DBW == 32) + #define SMC_DBW_GLOBAL 32 + #else + #error error in SMC_DBW size + #endif + #endif + + #ifdef SMC_8_BIT_CHIPS_GLOBAL + #if (SMC_8_BIT_CHIPS_GLOBAL < SMC_8_BIT) + #undef SMC_8_BIT_CHIPS_GLOBAL + #if (SMC_8_BIT_CHIPS == TRUE) + #define SMC_8_BIT_CHIPS_GLOBAL TRUE + #elif (SMC_8_BIT_CHIPS == FALSE) + #define SMC_8_BIT_CHIPS_GLOBAL FALSE + #else + #error error in SMC_8_BIT_CHIPS size + #endif + #endif + #else + #if (SMC_8_BIT_CHIPS == TRUE) + #define SMC_8_BIT_CHIPS_GLOBAL TRUE + #elif (SMC_8_BIT_CHIPS == FALSE) + #define SMC_8_BIT_CHIPS_GLOBAL FALSE + #else + #error error in SMC_8_BIT_CHIPS size + #endif + #endif + + #ifdef NWAIT_MODE_GLOBAL + #if (NWAIT_MODE_GLOBAL < NWAIT_MODE) + #undef NWAIT_MODE_GLOBAL + #if (NWAIT_MODE == AVR32_SMC_EXNW_MODE_DISABLED) + #define NWAIT_MODE_GLOBAL AVR32_SMC_EXNW_MODE_DISABLED + #elif (NWAIT_MODE == AVR32_SMC_EXNW_MODE_FROZEN) + #define NWAIT_MODE_GLOBAL AVR32_SMC_EXNW_MODE_FROZEN + #else + #error error in NWAIT_MODE size + #endif + #endif + #else + #if (NWAIT_MODE == AVR32_SMC_EXNW_MODE_DISABLED) + #define NWAIT_MODE_GLOBAL AVR32_SMC_EXNW_MODE_DISABLED + #elif (NWAIT_MODE == AVR32_SMC_EXNW_MODE_FROZEN) + #define NWAIT_MODE_GLOBAL AVR32_SMC_EXNW_MODE_FROZEN + #else + #error error in NWAIT_MODE size + #endif + #endif + + + #undef EXT_SM_SIZE + #undef SMC_DBW + #undef SMC_8_BIT_CHIPS + #undef NWE_SETUP + #undef NCS_WR_SETUP + #undef NRD_SETUP + #undef NCS_RD_SETUP + #undef NCS_WR_PULSE + #undef NWE_PULSE + #undef NCS_RD_PULSE + #undef NRD_PULSE + #undef NCS_WR_HOLD + #undef NWE_HOLD + #undef NWE_CYCLE + #undef NCS_RD_HOLD + #undef NRD_CYCLE + #undef TDF_CYCLES + #undef TDF_OPTIM + #undef PAGE_MODE + #undef PAGE_SIZE + #undef NCS_CONTROLLED_READ + #undef NCS_CONTROLLED_WRITE + #undef NWAIT_MODE +#endif + +//! Whether to use the NCS4 pin +#ifdef SMC_USE_NCS4 + #include SMC_COMPONENT_CS4 + + // Setup SMC for NCS4 + SMC_CS_SETUP(4) + + #ifdef SMC_DBW_GLOBAL + #if (SMC_DBW_GLOBAL < SMC_DBW) + #undef SMC_DBW_GLOBAL + #if (SMC_DBW == 8) + #define SMC_DBW_GLOBAL 8 + #elif (SMC_DBW == 16) + #define SMC_DBW_GLOBAL 16 + #elif (SMC_DBW == 32) + #define SMC_DBW_GLOBAL 32 + #else + #error error in SMC_DBW size + #endif + #endif + #else + #if (SMC_DBW == 8) + #define SMC_DBW_GLOBAL 8 + #elif (SMC_DBW == 16) + #define SMC_DBW_GLOBAL 16 + #elif (SMC_DBW == 32) + #define SMC_DBW_GLOBAL 32 + #else + #error error in SMC_DBW size + #endif + #endif + + #ifdef SMC_8_BIT_CHIPS_GLOBAL + #if (SMC_8_BIT_CHIPS_GLOBAL < SMC_8_BIT) + #undef SMC_8_BIT_CHIPS_GLOBAL + #if (SMC_8_BIT_CHIPS == TRUE) + #define SMC_8_BIT_CHIPS_GLOBAL TRUE + #elif (SMC_8_BIT_CHIPS == FALSE) + #define SMC_8_BIT_CHIPS_GLOBAL FALSE + #else + #error error in SMC_8_BIT_CHIPS size + #endif + #endif + #else + #if (SMC_8_BIT_CHIPS == TRUE) + #define SMC_8_BIT_CHIPS_GLOBAL TRUE + #elif (SMC_8_BIT_CHIPS == FALSE) + #define SMC_8_BIT_CHIPS_GLOBAL FALSE + #else + #error error in SMC_8_BIT_CHIPS size + #endif + #endif + + #ifdef NWAIT_MODE_GLOBAL + #if (NWAIT_MODE_GLOBAL < NWAIT_MODE) + #undef NWAIT_MODE_GLOBAL + #if (NWAIT_MODE == AVR32_SMC_EXNW_MODE_DISABLED) + #define NWAIT_MODE_GLOBAL AVR32_SMC_EXNW_MODE_DISABLED + #elif (NWAIT_MODE == AVR32_SMC_EXNW_MODE_FROZEN) + #define NWAIT_MODE_GLOBAL AVR32_SMC_EXNW_MODE_FROZEN + #else + #error error in NWAIT_MODE size + #endif + #endif + #else + #if (NWAIT_MODE == AVR32_SMC_EXNW_MODE_DISABLED) + #define NWAIT_MODE_GLOBAL AVR32_SMC_EXNW_MODE_DISABLED + #elif (NWAIT_MODE == AVR32_SMC_EXNW_MODE_FROZEN) + #define NWAIT_MODE_GLOBAL AVR32_SMC_EXNW_MODE_FROZEN + #else + #error error in NWAIT_MODE size + #endif + #endif + + + #undef EXT_SM_SIZE + #undef SMC_DBW + #undef SMC_8_BIT_CHIPS + #undef NWE_SETUP + #undef NCS_WR_SETUP + #undef NRD_SETUP + #undef NCS_RD_SETUP + #undef NCS_WR_PULSE + #undef NWE_PULSE + #undef NCS_RD_PULSE + #undef NRD_PULSE + #undef NCS_WR_HOLD + #undef NWE_HOLD + #undef NWE_CYCLE + #undef NCS_RD_HOLD + #undef NRD_CYCLE + #undef TDF_CYCLES + #undef TDF_OPTIM + #undef PAGE_MODE + #undef PAGE_SIZE + #undef NCS_CONTROLLED_READ + #undef NCS_CONTROLLED_WRITE + #undef NWAIT_MODE +#endif + +//! Whether to use the NCS5 pin +#ifdef SMC_USE_NCS5 + #include SMC_COMPONENT_CS5 + + // Setup SMC for NCS5 + SMC_CS_SETUP(5) + + #ifdef SMC_DBW_GLOBAL + #if (SMC_DBW_GLOBAL < SMC_DBW) + #undef SMC_DBW_GLOBAL + #if (SMC_DBW == 8) + #define SMC_DBW_GLOBAL 8 + #elif (SMC_DBW == 16) + #define SMC_DBW_GLOBAL 16 + #elif (SMC_DBW == 32) + #define SMC_DBW_GLOBAL 32 + #else + #error error in SMC_DBW size + #endif + #endif + #else + #if (SMC_DBW == 8) + #define SMC_DBW_GLOBAL 8 + #elif (SMC_DBW == 16) + #define SMC_DBW_GLOBAL 16 + #elif (SMC_DBW == 32) + #define SMC_DBW_GLOBAL 32 + #else + #error error in SMC_DBW size + #endif + #endif + + #ifdef SMC_8_BIT_CHIPS_GLOBAL + #if (SMC_8_BIT_CHIPS_GLOBAL < SMC_8_BIT) + #undef SMC_8_BIT_CHIPS_GLOBAL + #if (SMC_8_BIT_CHIPS == TRUE) + #define SMC_8_BIT_CHIPS_GLOBAL TRUE + #elif (SMC_8_BIT_CHIPS == FALSE) + #define SMC_8_BIT_CHIPS_GLOBAL FALSE + #else + #error error in SMC_8_BIT_CHIPS size + #endif + #endif + #else + #if (SMC_8_BIT_CHIPS == TRUE) + #define SMC_8_BIT_CHIPS_GLOBAL TRUE + #elif (SMC_8_BIT_CHIPS == FALSE) + #define SMC_8_BIT_CHIPS_GLOBAL FALSE + #else + #error error in SMC_8_BIT_CHIPS size + #endif + #endif + + #ifdef NWAIT_MODE_GLOBAL + #if (NWAIT_MODE_GLOBAL < NWAIT_MODE) + #undef NWAIT_MODE_GLOBAL + #if (NWAIT_MODE == AVR32_SMC_EXNW_MODE_DISABLED) + #define NWAIT_MODE_GLOBAL AVR32_SMC_EXNW_MODE_DISABLED + #elif (NWAIT_MODE == AVR32_SMC_EXNW_MODE_FROZEN) + #define NWAIT_MODE_GLOBAL AVR32_SMC_EXNW_MODE_FROZEN + #else + #error error in NWAIT_MODE size + #endif + #endif + #else + #if (NWAIT_MODE == AVR32_SMC_EXNW_MODE_DISABLED) + #define NWAIT_MODE_GLOBAL AVR32_SMC_EXNW_MODE_DISABLED + #elif (NWAIT_MODE == AVR32_SMC_EXNW_MODE_FROZEN) + #define NWAIT_MODE_GLOBAL AVR32_SMC_EXNW_MODE_FROZEN + #else + #error error in NWAIT_MODE size + #endif + #endif + + + #undef EXT_SM_SIZE + #undef SMC_DBW + #undef SMC_8_BIT_CHIPS + #undef NWE_SETUP + #undef NCS_WR_SETUP + #undef NRD_SETUP + #undef NCS_RD_SETUP + #undef NCS_WR_PULSE + #undef NWE_PULSE + #undef NCS_RD_PULSE + #undef NRD_PULSE + #undef NCS_WR_HOLD + #undef NWE_HOLD + #undef NWE_CYCLE + #undef NCS_RD_HOLD + #undef NRD_CYCLE + #undef TDF_CYCLES + #undef TDF_OPTIM + #undef PAGE_MODE + #undef PAGE_SIZE + #undef NCS_CONTROLLED_READ + #undef NCS_CONTROLLED_WRITE + #undef NWAIT_MODE +#endif + // Put the multiplexed MCU pins used for the SM under control of the SMC. + smc_enable_muxed_pins(); +} + +/*! \brief Puts the multiplexed MCU pins used for the SMC + * + */ +static void smc_enable_muxed_pins(void) +{ + static const gpio_map_t SMC_EBI_GPIO_MAP = + { + // Enable data pins. +#ifdef EBI_DATA_0 + {ATPASTE2(EBI_DATA_0,_PIN),ATPASTE2(EBI_DATA_0,_FUNCTION)}, +#endif +#ifdef EBI_DATA_1 + {ATPASTE2(EBI_DATA_1,_PIN),ATPASTE2(EBI_DATA_1,_FUNCTION)}, +#endif +#ifdef EBI_DATA_2 + {ATPASTE2(EBI_DATA_2,_PIN),ATPASTE2(EBI_DATA_2,_FUNCTION)}, +#endif +#ifdef EBI_DATA_3 + {ATPASTE2(EBI_DATA_3,_PIN),ATPASTE2(EBI_DATA_3,_FUNCTION)}, +#endif +#ifdef EBI_DATA_4 + {ATPASTE2(EBI_DATA_4,_PIN),ATPASTE2(EBI_DATA_4,_FUNCTION)}, +#endif +#ifdef EBI_DATA_5 + {ATPASTE2(EBI_DATA_5,_PIN),ATPASTE2(EBI_DATA_5,_FUNCTION)}, +#endif +#ifdef EBI_DATA_6 + {ATPASTE2(EBI_DATA_6,_PIN),ATPASTE2(EBI_DATA_6,_FUNCTION)}, +#endif +#ifdef EBI_DATA_7 + {ATPASTE2(EBI_DATA_7,_PIN),ATPASTE2(EBI_DATA_7,_FUNCTION)}, +#endif +#ifdef EBI_DATA_8 + {ATPASTE2(EBI_DATA_8,_PIN),ATPASTE2(EBI_DATA_8,_FUNCTION)}, +#endif +#ifdef EBI_DATA_9 + {ATPASTE2(EBI_DATA_9,_PIN),ATPASTE2(EBI_DATA_9,_FUNCTION)}, +#endif +#ifdef EBI_DATA_10 + {ATPASTE2(EBI_DATA_10,_PIN),ATPASTE2(EBI_DATA_10,_FUNCTION)}, +#endif +#ifdef EBI_DATA_11 + {ATPASTE2(EBI_DATA_11,_PIN),ATPASTE2(EBI_DATA_11,_FUNCTION)}, +#endif +#ifdef EBI_DATA_12 + {ATPASTE2(EBI_DATA_12,_PIN),ATPASTE2(EBI_DATA_12,_FUNCTION)}, +#endif +#ifdef EBI_DATA_13 + {ATPASTE2(EBI_DATA_13,_PIN),ATPASTE2(EBI_DATA_13,_FUNCTION)}, +#endif +#ifdef EBI_DATA_14 + {ATPASTE2(EBI_DATA_14,_PIN),ATPASTE2(EBI_DATA_14,_FUNCTION)}, +#endif +#ifdef EBI_DATA_15 + {ATPASTE2(EBI_DATA_15,_PIN),ATPASTE2(EBI_DATA_15,_FUNCTION)}, +#endif +#ifdef EBI_DATA_16 + {ATPASTE2(EBI_DATA_16,_PIN),ATPASTE2(EBI_DATA_16,_FUNCTION)}, +#endif +#ifdef EBI_DATA_17 + {ATPASTE2(EBI_DATA_17,_PIN),ATPASTE2(EBI_DATA_17,_FUNCTION)}, +#endif +#ifdef EBI_DATA_18 + {ATPASTE2(EBI_DATA_18,_PIN),ATPASTE2(EBI_DATA_18,_FUNCTION)}, +#endif +#ifdef EBI_DATA_19 + {ATPASTE2(EBI_DATA_19,_PIN),ATPASTE2(EBI_DATA_19,_FUNCTION)}, +#endif +#ifdef EBI_DATA_20 + {ATPASTE2(EBI_DATA_20,_PIN),ATPASTE2(EBI_DATA_20,_FUNCTION)}, +#endif +#ifdef EBI_DATA_21 + {ATPASTE2(EBI_DATA_21,_PIN),ATPASTE2(EBI_DATA_21,_FUNCTION)}, +#endif +#ifdef EBI_DATA_22 + {ATPASTE2(EBI_DATA_22,_PIN),ATPASTE2(EBI_DATA_22,_FUNCTION)}, +#endif +#ifdef EBI_DATA_23 + {ATPASTE2(EBI_DATA_23,_PIN),ATPASTE2(EBI_DATA_23,_FUNCTION)}, +#endif +#ifdef EBI_DATA_24 + {ATPASTE2(EBI_DATA_24,_PIN),ATPASTE2(EBI_DATA_24,_FUNCTION)}, +#endif +#ifdef EBI_DATA_25 + {ATPASTE2(EBI_DATA_25,_PIN),ATPASTE2(EBI_DATA_25,_FUNCTION)}, +#endif +#ifdef EBI_DATA_26 + {ATPASTE2(EBI_DATA_26,_PIN),ATPASTE2(EBI_DATA_26,_FUNCTION)}, +#endif +#ifdef EBI_DATA_27 + {ATPASTE2(EBI_DATA_27,_PIN),ATPASTE2(EBI_DATA_27,_FUNCTION)}, +#endif +#ifdef EBI_DATA_28 + {ATPASTE2(EBI_DATA_28,_PIN),ATPASTE2(EBI_DATA_28,_FUNCTION)}, +#endif +#ifdef EBI_DATA_29 + {ATPASTE2(EBI_DATA_29,_PIN),ATPASTE2(EBI_DATA_29,_FUNCTION)}, +#endif +#ifdef EBI_DATA_30 + {ATPASTE2(EBI_DATA_30,_PIN),ATPASTE2(EBI_DATA_30,_FUNCTION)}, +#endif +#ifdef EBI_DATA_31 + {ATPASTE2(EBI_DATA_31,_PIN),ATPASTE2(EBI_DATA_31,_FUNCTION)}, +#endif + + // Enable address pins. +#if SMC_DBW_GLOBAL <= 8 +#ifdef EBI_ADDR_0 + {ATPASTE2(EBI_ADDR_0,_PIN),ATPASTE2(EBI_ADDR_0,_FUNCTION)}, +#endif +#endif +#if SMC_DBW_GLOBAL <= 16 +#ifdef EBI_ADDR_1 + {ATPASTE2(EBI_ADDR_1,_PIN),ATPASTE2(EBI_ADDR_1,_FUNCTION)}, +#endif +#endif + +#ifdef EBI_ADDR_2 + {ATPASTE2(EBI_ADDR_2,_PIN),ATPASTE2(EBI_ADDR_2,_FUNCTION)}, +#endif +#ifdef EBI_ADDR_3 + {ATPASTE2(EBI_ADDR_3,_PIN),ATPASTE2(EBI_ADDR_3,_FUNCTION)}, +#endif +#ifdef EBI_ADDR_4 + {ATPASTE2(EBI_ADDR_4,_PIN),ATPASTE2(EBI_ADDR_4,_FUNCTION)}, +#endif +#ifdef EBI_ADDR_5 + {ATPASTE2(EBI_ADDR_5,_PIN),ATPASTE2(EBI_ADDR_5,_FUNCTION)}, +#endif +#ifdef EBI_ADDR_6 + {ATPASTE2(EBI_ADDR_6,_PIN),ATPASTE2(EBI_ADDR_6,_FUNCTION)}, +#endif +#ifdef EBI_ADDR_7 + {ATPASTE2(EBI_ADDR_7,_PIN),ATPASTE2(EBI_ADDR_7,_FUNCTION)}, +#endif +#ifdef EBI_ADDR_8 + {ATPASTE2(EBI_ADDR_8,_PIN),ATPASTE2(EBI_ADDR_8,_FUNCTION)}, +#endif +#ifdef EBI_ADDR_9 + {ATPASTE2(EBI_ADDR_9,_PIN),ATPASTE2(EBI_ADDR_9,_FUNCTION)}, +#endif +#ifdef EBI_ADDR_10 + {ATPASTE2(EBI_ADDR_10,_PIN),ATPASTE2(EBI_ADDR_10,_FUNCTION)}, +#endif +#ifdef EBI_ADDR_11 + {ATPASTE2(EBI_ADDR_11,_PIN),ATPASTE2(EBI_ADDR_11,_FUNCTION)}, +#endif +#ifdef EBI_ADDR_12 + {ATPASTE2(EBI_ADDR_12,_PIN),ATPASTE2(EBI_ADDR_12,_FUNCTION)}, +#endif +#ifdef EBI_ADDR_13 + {ATPASTE2(EBI_ADDR_13,_PIN),ATPASTE2(EBI_ADDR_13,_FUNCTION)}, +#endif +#ifdef EBI_ADDR_14 + {ATPASTE2(EBI_ADDR_14,_PIN),ATPASTE2(EBI_ADDR_14,_FUNCTION)}, +#endif +#ifdef EBI_ADDR_15 + {ATPASTE2(EBI_ADDR_15,_PIN),ATPASTE2(EBI_ADDR_15,_FUNCTION)}, +#endif +#ifdef EBI_ADDR_16 + {ATPASTE2(EBI_ADDR_16,_PIN),ATPASTE2(EBI_ADDR_16,_FUNCTION)}, +#endif +#ifdef EBI_ADDR_17 + {ATPASTE2(EBI_ADDR_17,_PIN),ATPASTE2(EBI_ADDR_17,_FUNCTION)}, +#endif +#ifdef EBI_ADDR_18 + {ATPASTE2(EBI_ADDR_18,_PIN),ATPASTE2(EBI_ADDR_18,_FUNCTION)}, +#endif +#ifdef EBI_ADDR_19 + {ATPASTE2(EBI_ADDR_19,_PIN),ATPASTE2(EBI_ADDR_19,_FUNCTION)}, +#endif +#ifdef EBI_ADDR_20 + {ATPASTE2(EBI_ADDR_20,_PIN),ATPASTE2(EBI_ADDR_20,_FUNCTION)}, +#endif +#ifdef EBI_ADDR_21 + {ATPASTE2(EBI_ADDR_21,_PIN),ATPASTE2(EBI_ADDR_21,_FUNCTION)}, +#endif +#ifdef EBI_ADDR_22 + {ATPASTE2(EBI_ADDR_22,_PIN),ATPASTE2(EBI_ADDR_22,_FUNCTION)}, +#endif +#ifdef EBI_ADDR_23 + {ATPASTE2(EBI_ADDR_23,_PIN),ATPASTE2(EBI_ADDR_23,_FUNCTION)}, +#endif + +#if SMC_DBW_GLOBAL <= 8 + #undef SMC_8_BIT_CHIPS + #define SMC_8_BIT_CHIPS TRUE +#endif + + // Enable data mask pins. +#if !SMC_8_BIT_CHIPS_GLOBAL +#ifdef EBI_ADDR_0 + {ATPASTE2(EBI_ADDR_0,_PIN),ATPASTE2(EBI_ADDR_0,_FUNCTION)}, +#endif +#endif +#ifdef EBI_NWE0 + {ATPASTE2(EBI_NWE0,_PIN),ATPASTE2(EBI_NWE0,_FUNCTION)}, +#endif + +#if SMC_DBW_GLOBAL >= 16 + #ifdef EBI_NWE1 + {ATPASTE2(EBI_NWE1,_PIN),ATPASTE2(EBI_NWE1,_FUNCTION)}, + #endif + #if SMC_DBW_GLOBAL >= 32 + #ifdef EBI_ADDR_1 + {ATPASTE2(EBI_ADDR_1,_PIN),ATPASTE2(EBI_ADDR_1,_FUNCTION)}, + #endif + #ifdef EBI_NWE3 + {ATPASTE2(EBI_NWE3,_PIN),ATPASTE2(EBI_NWE3,_FUNCTION)}, + #endif + #endif +#endif + #ifdef EBI_NRD + {ATPASTE2(EBI_NRD,_PIN),ATPASTE2(EBI_NRD,_FUNCTION)}, + #endif + + // Enable control pins. +#if NWAIT_MODE_GLOBAL != AVR32_SMC_EXNW_MODE_DISABLED + #ifdef EBI_NWAIT + {ATPASTE2(EBI_NWAIT,_PIN),ATPASTE2(EBI_NWAIT,_FUNCTION)}, + #endif +#endif +#ifdef SMC_USE_NCS0 + #ifdef EBI_NCS_0 + {ATPASTE2(EBI_NCS_0,_PIN),ATPASTE2(EBI_NCS_0,_FUNCTION)}, + #endif +#endif +#ifdef SMC_USE_NCS1 + #ifdef EBI_NCS_1 + {ATPASTE2(EBI_NCS_1,_PIN),ATPASTE2(EBI_NCS_1,_FUNCTION)}, + #endif +#endif +#ifdef SMC_USE_NCS2 + #ifdef EBI_NCS_2 + {ATPASTE2(EBI_NCS_2,_PIN),ATPASTE2(EBI_NCS_2,_FUNCTION)}, + #endif +#endif +#ifdef SMC_USE_NCS3 + #ifdef EBI_NCS_3 + {ATPASTE2(EBI_NCS_3,_PIN),ATPASTE2(EBI_NCS_3,_FUNCTION)}, + #endif +#endif +#ifdef SMC_USE_NCS4 + #ifdef EBI_NCS_4 + {ATPASTE2(EBI_NCS_4,_PIN),ATPASTE2(EBI_NCS_4,_FUNCTION)}, + #endif +#endif +#ifdef SMC_USE_NCS5 + #ifdef EBI_NCS_5 + {ATPASTE2(EBI_NCS_5,_PIN),ATPASTE2(EBI_NCS_5,_FUNCTION)}, + #endif +#endif + }; + + gpio_enable_module(SMC_EBI_GPIO_MAP, sizeof(SMC_EBI_GPIO_MAP) / sizeof(SMC_EBI_GPIO_MAP[0])); +} + +unsigned char smc_get_cs_size(unsigned char cs) +{ + return smc_tab_cs_size[cs]; +} diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/EBI/SMC/smc.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/EBI/SMC/smc.h new file mode 100644 index 000000000..c3bdf43c4 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/EBI/SMC/smc.h @@ -0,0 +1,68 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief SMC on EBI driver for AVR32 UC3. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with a SMC module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _SMC_H_ +#define _SMC_H_ + +#include + +#include "compiler.h" +#include "conf_ebi.h" + +/*! \brief Initializes the AVR32 SMC module and the connected SRAM(s). + * \param hsb_hz HSB frequency in Hz (the HSB frequency is applied to the SMC). + * \note Each access to the SMC address space validates the mode of the SMC + * and generates an operation corresponding to this mode. + */ +extern void smc_init(unsigned long hsb_hz); + +/*! \brief Return the size of the peripheral connected . + * \param cs The chip select value + */ +extern unsigned char smc_get_cs_size(unsigned char cs); + +#endif // _SMC_H_ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/EIC/eic.c b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/EIC/eic.c new file mode 100644 index 000000000..1008c9440 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/EIC/eic.c @@ -0,0 +1,183 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief EIC driver for AVR32 UC3. + * + * AVR32 External Interrupt Controller driver module. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with an EIC module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#include +#include "compiler.h" +#include "preprocessor.h" +#include "eic.h" + + + +void eic_init(volatile avr32_eic_t *eic, const eic_options_t *opt, unsigned int nb_lines) +{ + int i; + for (i = 0; i < nb_lines; i++) + { + // Set up mode level + eic->mode = (opt[i].eic_mode == 1) ? (eic->mode | (1 << opt[i].eic_line)) : (eic->mode & ~(1 << opt[i].eic_line)); + // Set up edge type + eic->edge = (opt[i].eic_edge == 1) ? (eic->edge | (1 << opt[i].eic_line)) : (eic->edge & ~(1 << opt[i].eic_line)); + // Set up level + eic->level = (opt[i].eic_level == 1) ? (eic->level | (1 << opt[i].eic_line)) : (eic->level & ~(1 << opt[i].eic_line)); + // Set up if filter is used + eic->filter = (opt[i].eic_filter == 1) ? (eic->filter | (1 << opt[i].eic_line)) : (eic->filter & ~(1 << opt[i].eic_line)); + // Set up which mode is used : asynchronous mode/ synchronous mode + eic->async = (opt[i].eic_async == 1) ? (eic->async | (1 << opt[i].eic_line)) : (eic->async & ~(1 << opt[i].eic_line)); + } +} + +void eic_enable_lines(volatile avr32_eic_t *eic, unsigned int mask_lines) +{ + eic->en = mask_lines; +} + +void eic_enable_line(volatile avr32_eic_t *eic, unsigned int line_number) +{ + // Enable line line_number + eic->en = 1 << line_number; +} + +void eic_disable_lines(volatile avr32_eic_t *eic, unsigned int mask_lines) +{ + eic->dis = mask_lines; +} + +void eic_disable_line(volatile avr32_eic_t *eic, unsigned int line_number) +{ + // Disable line line_number + eic->dis = 1 << line_number; +} + +Bool eic_is_line_enabled(volatile avr32_eic_t *eic, unsigned int line_number) +{ + return (eic->ctrl & (1 << line_number)) != 0; +} + +void eic_enable_interrupt_lines(volatile avr32_eic_t *eic, unsigned int mask_lines) +{ + eic->ier = mask_lines; +} + +void eic_enable_interrupt_line(volatile avr32_eic_t *eic, unsigned int line_number) +{ + // Enable line line_number + eic->ier = 1 << line_number; +} + +void eic_disable_interrupt_lines(volatile avr32_eic_t *eic, unsigned int mask_lines) +{ + Bool global_interrupt_enabled = Is_global_interrupt_enabled(); + + if (global_interrupt_enabled) Disable_global_interrupt(); + eic->idr = mask_lines; + eic->imr; + if (global_interrupt_enabled) Enable_global_interrupt(); +} + +void eic_disable_interrupt_line(volatile avr32_eic_t *eic, unsigned int line_number) +{ + Bool global_interrupt_enabled = Is_global_interrupt_enabled(); + + // Disable line line_number + if (global_interrupt_enabled) Disable_global_interrupt(); + eic->idr = 1 << line_number; + eic->imr; + if (global_interrupt_enabled) Enable_global_interrupt(); +} + +Bool eic_is_interrupt_line_enabled(volatile avr32_eic_t *eic, unsigned int line_number) +{ + return (eic->imr & (1 << line_number)) != 0; +} + +void eic_clear_interrupt_lines(volatile avr32_eic_t *eic, unsigned int mask_lines) +{ + Bool global_interrupt_enabled = Is_global_interrupt_enabled(); + + if (global_interrupt_enabled) Disable_global_interrupt(); + eic->icr = mask_lines; + eic->isr; + if (global_interrupt_enabled) Enable_global_interrupt(); +} + +void eic_clear_interrupt_line(volatile avr32_eic_t *eic, unsigned int line_number) +{ + Bool global_interrupt_enabled = Is_global_interrupt_enabled(); + + // Clear line line_number + if (global_interrupt_enabled) Disable_global_interrupt(); + eic->icr = 1 << line_number; + eic->isr; + if (global_interrupt_enabled) Enable_global_interrupt(); +} + +Bool eic_is_interrupt_line_pending(volatile avr32_eic_t *eic, unsigned int line_number) +{ + return (eic->isr & (1 << line_number)) != 0; +} + +#if !defined(AVR32_EIC_301_H_INCLUDED) +void eic_enable_interrupt_scan(volatile avr32_eic_t *eic,unsigned int presc) +{ + // Enable SCAN function with PRESC value + eic->scan |= (presc << AVR32_EIC_SCAN_PRESC_OFFSET) | (1 << AVR32_EIC_SCAN_EN_OFFSET); +} + +void eic_disable_interrupt_scan(volatile avr32_eic_t *eic) +{ + // Disable SCAN function + eic->scan = 0 << AVR32_EIC_SCAN_EN_OFFSET; +} + +unsigned long eic_get_interrupt_pad_scan(volatile avr32_eic_t *eic) +{ + // Return pad number that causes interrupt + return(eic->scan>>AVR32_EIC_SCAN_PIN_OFFSET); +} +#endif \ No newline at end of file diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/EIC/eic.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/EIC/eic.h new file mode 100644 index 000000000..32641b78e --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/EIC/eic.h @@ -0,0 +1,275 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief EIC driver for AVR32 UC3. + * + * AVR32 External Interrupt Controller driver module. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with an EIC module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _EIC_H_ +#define _EIC_H_ + +#include "compiler.h" + +/*! \name External Interrupt lines + */ +//! @{ +#if (UC3A || UC3B) +#define EXT_INT0 AVR32_EIC_INT0 //!< Line 0 +#define EXT_INT1 AVR32_EIC_INT1 //!< Line 1 +#define EXT_INT2 AVR32_EIC_INT2 //!< Line 2 +#define EXT_INT3 AVR32_EIC_INT3 //!< Line 3 +#define EXT_INT4 AVR32_EIC_INT4 //!< Line 4 +#define EXT_INT5 AVR32_EIC_INT5 //!< Line 5 +#define EXT_INT6 AVR32_EIC_INT6 //!< Line 6 +#define EXT_INT7 AVR32_EIC_INT7 //!< Line 7 +#define EXT_NMI AVR32_EIC_NMI //!< Line 8 +#else +#define EXT_INT0 AVR32_EIC_INT1 //!< Line 0 +#define EXT_INT1 AVR32_EIC_INT2 //!< Line 1 +#define EXT_INT2 AVR32_EIC_INT3 //!< Line 2 +#define EXT_INT3 AVR32_EIC_INT4 //!< Line 3 +#define EXT_INT4 AVR32_EIC_INT5 //!< Line 4 +#define EXT_INT5 AVR32_EIC_INT6 //!< Line 5 +#define EXT_INT6 AVR32_EIC_INT7 //!< Line 6 +#define EXT_INT7 AVR32_EIC_INT8 //!< Line 7 +#define EXT_NMI AVR32_EIC_NMI //!< Line 8 + +#endif + +//! @} + +/*! \name Mode Trigger Options + */ +//! @{ +#define EIC_MODE_EDGE_TRIGGERED AVR32_EIC_EDGE_IRQ //!< +#define EIC_MODE_LEVEL_TRIGGERED AVR32_EIC_LEVEL_IRQ //!< +//! @} + +/*! \name Edge level Options + */ +//! @{ +#define EIC_EDGE_FALLING_EDGE AVR32_EIC_FALLING_EDGE //!< +#define EIC_EDGE_RISING_EDGE AVR32_EIC_RISING_EDGE //!< +//! @} + +/*! \name Level Options + */ +//! @{ +#define EIC_LEVEL_LOW_LEVEL AVR32_EIC_LOW_LEVEL //!< +#define EIC_LEVEL_HIGH_LEVEL AVR32_EIC_HIGH_LEVEL //!< +//! @} + +/*! \name Filter Options + */ +//! @{ +#define EIC_FILTER_ENABLED AVR32_EIC_FILTER_ON //!< +#define EIC_FILTER_DISABLED AVR32_EIC_FILTER_OFF //!< +//! @} + +/*! \name Synch Mode Options + */ +//! @{ +#define EIC_SYNCH_MODE AVR32_EIC_SYNC //!< +#define EIC_ASYNCH_MODE AVR32_EIC_USE_ASYNC //!< +//! @} + +//! Configuration parameters of the EIC module. +typedef struct +{ + //!Line + unsigned char eic_line; + + //! Mode : EDGE_LEVEL or TRIGGER_LEVEL + unsigned char eic_mode; + + //! Edge : FALLING_EDGE or RISING_EDGE + unsigned char eic_edge; + + //! Level : LOW_LEVEL or HIGH_LEVEL + unsigned char eic_level; + + //! Filter: NOT_FILTERED or FILTERED + unsigned char eic_filter; + + //! Async: SYNC mode or ASYNC + unsigned char eic_async; + +} eic_options_t; + + +/*! \brief Init the EIC driver. + * + * \param eic Base address of the EIC module + * \param opt Configuration parameters of the EIC module (see \ref eic_options_t) + * \param nb_lines Number of lines to consider, equal to size of opt buffer + */ +extern void eic_init(volatile avr32_eic_t *eic, const eic_options_t *opt, unsigned int nb_lines); + +/*! \brief Enable the EIC driver. + * + * \param eic Base address of the EIC module + * \param mask_lines Mask for current selected lines + */ +extern void eic_enable_lines(volatile avr32_eic_t *eic, unsigned int mask_lines); + +/*! \brief Enable the EIC driver. + * + * \param eic Base address of the EIC module + * \param line_number Line number to enable + */ +extern void eic_enable_line(volatile avr32_eic_t *eic, unsigned int line_number); + +/*! \brief Disable the EIC driver. + * + * \param eic Base address of the EIC module + * \param mask_lines Mask for current selected lines + */ +extern void eic_disable_lines(volatile avr32_eic_t *eic, unsigned int mask_lines); + +/*! \brief Disable the EIC driver. + * + * \param eic Base address of the EIC module + * \param line_number Line number to disable + */ +extern void eic_disable_line(volatile avr32_eic_t *eic, unsigned int line_number); + +/*! \brief Tells whether an EIC line is enabled. + * + * \param eic Base address of the EIC module + * \param line_number Line number to test + * + * \return Whether an EIC line is enabled. + */ +extern Bool eic_is_line_enabled(volatile avr32_eic_t *eic, unsigned int line_number); + +/*! \name Interrupt Control Functions + */ +//! @{ + +/*! \brief Enable the interrupt feature of the EIC. + * + * \param eic Base address of the EIC (i.e. &AVR32_EIC). + * \param mask_lines Mask for current selected lines + */ +extern void eic_enable_interrupt_lines(volatile avr32_eic_t *eic, unsigned int mask_lines); + +/*! \brief Enable the interrupt feature of the EIC. + * + * \param eic Base address of the EIC (i.e. &AVR32_EIC). + * \param line_number Line number to enable + */ +extern void eic_enable_interrupt_line(volatile avr32_eic_t *eic, unsigned int line_number); + +/*! \brief Disable the interrupt feature of the EIC. + * + * \param eic Base address of the EIC (i.e. &AVR32_EIC). + * \param mask_lines Mask for current selected lines + */ +extern void eic_disable_interrupt_lines(volatile avr32_eic_t *eic, unsigned int mask_lines); + +/*! \brief Disable the interrupt feature of the EIC. + * + * \param eic Base address of the EIC (i.e. &AVR32_EIC). + * \param line_number Line number to disable + */ +extern void eic_disable_interrupt_line(volatile avr32_eic_t *eic, unsigned int line_number); + +/*! \brief Tells whether an EIC interrupt line is enabled. + * + * \param eic Base address of the EIC module + * \param line_number Line number to test + * + * \return Whether an EIC interrupt line is enabled. + */ +extern Bool eic_is_interrupt_line_enabled(volatile avr32_eic_t *eic, unsigned int line_number); + +/*! \brief Clear the interrupt flag. + * Call this function once you've handled the interrupt. + * + * \param eic Base address of the EIC (i.e. &AVR32_EIC). + * \param mask_lines Mask for current selected lines + */ +extern void eic_clear_interrupt_lines(volatile avr32_eic_t *eic, unsigned int mask_lines); + +/*! \brief Clear the interrupt flag. + * Call this function once you've handled the interrupt. + * + * \param eic Base address of the EIC (i.e. &AVR32_EIC). + * \param line_number Line number to clear + */ +extern void eic_clear_interrupt_line(volatile avr32_eic_t *eic, unsigned int line_number); + +/*! \brief Tells whether an EIC interrupt line is pending. + * + * \param eic Base address of the EIC module + * \param line_number Line number to test + * + * \return Whether an EIC interrupt line is pending. + */ +extern Bool eic_is_interrupt_line_pending(volatile avr32_eic_t *eic, unsigned int line_number); + +/*! \brief Enable the interrupt scan feature of the EIC. + * + * \param eic Base address of the EIC (i.e. &AVR32_EIC). + * \param presc Prescale select for the keypad scan rate in the range [0,31]. + */ +extern void eic_enable_interrupt_scan(volatile avr32_eic_t *eic, unsigned int presc); + +/*! \brief Disable the interrupt scan feature of the EIC. + * + * \param eic Base address of the EIC (i.e. &AVR32_EIC). + */ +extern void eic_disable_interrupt_scan(volatile avr32_eic_t *eic); + +/*! \brief Return scan pad number that causes interrupt. + * + * \param eic Base address of the EIC (i.e. &AVR32_EIC). + */ +extern unsigned long eic_get_interrupt_pad_scan(volatile avr32_eic_t *eic); + +//! @} + + +#endif // _EIC_H_ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC/flashc.c b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC/flashc.c new file mode 100644 index 000000000..2eee15c0a --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC/flashc.c @@ -0,0 +1,1117 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief FLASHC driver for AVR32 UC3. + * + * AVR32 Flash Controller driver module. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with a FLASHC module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#include +#include +#include "compiler.h" +#include "flashc.h" + + +/*! \name FLASHC Writable Bit-Field Registers + */ +//! @{ + +typedef union +{ + unsigned long fcr; + avr32_flashc_fcr_t FCR; +} u_avr32_flashc_fcr_t; + +typedef union +{ + unsigned long fcmd; + avr32_flashc_fcmd_t FCMD; +} u_avr32_flashc_fcmd_t; + +//! @} + + +/*! \name Flash Properties + */ +//! @{ + + +unsigned int flashc_get_flash_size(void) +{ +#if (defined AVR32_FLASHC_300_H_INCLUDED) + static const unsigned int FLASH_SIZE[1 << AVR32_FLASHC_PR_FSZ_SIZE] = + { + 32 << 10, + 64 << 10, + 128 << 10, + 256 << 10, + 384 << 10, + 512 << 10, + 768 << 10, + 1024 << 10 + }; + return FLASH_SIZE[(AVR32_FLASHC.pr & AVR32_FLASHC_PR_FSZ_MASK) >> AVR32_FLASHC_PR_FSZ_OFFSET]; +#else + static const unsigned int FLASH_SIZE[1 << AVR32_FLASHC_FSR_FSZ_SIZE] = + { + 32 << 10, + 64 << 10, + 128 << 10, + 256 << 10, + 384 << 10, + 512 << 10, + 768 << 10, + 1024 << 10 + }; + return FLASH_SIZE[(AVR32_FLASHC.fsr & AVR32_FLASHC_FSR_FSZ_MASK) >> AVR32_FLASHC_FSR_FSZ_OFFSET]; +#endif +} + + +unsigned int flashc_get_page_count(void) +{ + return flashc_get_flash_size() / AVR32_FLASHC_PAGE_SIZE; +} + + +unsigned int flashc_get_page_count_per_region(void) +{ + return flashc_get_page_count() / AVR32_FLASHC_REGIONS; +} + + +unsigned int flashc_get_page_region(int page_number) +{ + return ((page_number >= 0) ? page_number : flashc_get_page_number()) / flashc_get_page_count_per_region(); +} + + +unsigned int flashc_get_region_first_page_number(unsigned int region) +{ + return region * flashc_get_page_count_per_region(); +} + + +//! @} + + +/*! \name FLASHC Control + */ +//! @{ + + +unsigned int flashc_get_wait_state(void) +{ + return (AVR32_FLASHC.fcr & AVR32_FLASHC_FCR_FWS_MASK) >> AVR32_FLASHC_FCR_FWS_OFFSET; +} + + +void flashc_set_wait_state(unsigned int wait_state) +{ + u_avr32_flashc_fcr_t u_avr32_flashc_fcr = {AVR32_FLASHC.fcr}; + u_avr32_flashc_fcr.FCR.fws = wait_state; + AVR32_FLASHC.fcr = u_avr32_flashc_fcr.fcr; +} + + +Bool flashc_is_ready_int_enabled(void) +{ + return ((AVR32_FLASHC.fcr & AVR32_FLASHC_FCR_FRDY_MASK) != 0); +} + + +void flashc_enable_ready_int(Bool enable) +{ + u_avr32_flashc_fcr_t u_avr32_flashc_fcr = {AVR32_FLASHC.fcr}; + u_avr32_flashc_fcr.FCR.frdy = (enable != FALSE); + AVR32_FLASHC.fcr = u_avr32_flashc_fcr.fcr; +} + + +Bool flashc_is_lock_error_int_enabled(void) +{ + return ((AVR32_FLASHC.fcr & AVR32_FLASHC_FCR_LOCKE_MASK) != 0); +} + + +void flashc_enable_lock_error_int(Bool enable) +{ + u_avr32_flashc_fcr_t u_avr32_flashc_fcr = {AVR32_FLASHC.fcr}; + u_avr32_flashc_fcr.FCR.locke = (enable != FALSE); + AVR32_FLASHC.fcr = u_avr32_flashc_fcr.fcr; +} + + +Bool flashc_is_prog_error_int_enabled(void) +{ + return ((AVR32_FLASHC.fcr & AVR32_FLASHC_FCR_PROGE_MASK) != 0); +} + + +void flashc_enable_prog_error_int(Bool enable) +{ + u_avr32_flashc_fcr_t u_avr32_flashc_fcr = {AVR32_FLASHC.fcr}; + u_avr32_flashc_fcr.FCR.proge = (enable != FALSE); + AVR32_FLASHC.fcr = u_avr32_flashc_fcr.fcr; +} + + +//! @} + + +/*! \name FLASHC Status + */ +//! @{ + + +Bool flashc_is_ready(void) +{ + return ((AVR32_FLASHC.fsr & AVR32_FLASHC_FSR_FRDY_MASK) != 0); +} + + +void flashc_default_wait_until_ready(void) +{ + while (!flashc_is_ready()); +} + + +void (*volatile flashc_wait_until_ready)(void) = flashc_default_wait_until_ready; + + +/*! \brief Gets the error status of the FLASHC. + * + * \return The error status of the FLASHC built up from + * \c AVR32_FLASHC_FSR_LOCKE_MASK and \c AVR32_FLASHC_FSR_PROGE_MASK. + * + * \warning This hardware error status is cleared by all functions reading the + * Flash Status Register (FSR). This function is therefore not part of + * the driver's API which instead presents \ref flashc_is_lock_error + * and \ref flashc_is_programming_error. + */ +static unsigned int flashc_get_error_status(void) +{ + return AVR32_FLASHC.fsr & (AVR32_FLASHC_FSR_LOCKE_MASK | + AVR32_FLASHC_FSR_PROGE_MASK); +} + + +//! Sticky error status of the FLASHC. +//! This variable is updated by functions that issue FLASHC commands. It +//! contains the cumulated FLASHC error status of all the FLASHC commands issued +//! by a function. +static unsigned int flashc_error_status = 0; + + +Bool flashc_is_lock_error(void) +{ + return ((flashc_error_status & AVR32_FLASHC_FSR_LOCKE_MASK) != 0); +} + + +Bool flashc_is_programming_error(void) +{ + return ((flashc_error_status & AVR32_FLASHC_FSR_PROGE_MASK) != 0); +} + + +//! @} + + +/*! \name FLASHC Command Control + */ +//! @{ + + +unsigned int flashc_get_command(void) +{ + return (AVR32_FLASHC.fcmd & AVR32_FLASHC_FCMD_CMD_MASK) >> AVR32_FLASHC_FCMD_CMD_OFFSET; +} + + +unsigned int flashc_get_page_number(void) +{ + return (AVR32_FLASHC.fcmd & AVR32_FLASHC_FCMD_PAGEN_MASK) >> AVR32_FLASHC_FCMD_PAGEN_OFFSET; +} + + +void flashc_issue_command(unsigned int command, int page_number) +{ + u_avr32_flashc_fcmd_t u_avr32_flashc_fcmd; + flashc_wait_until_ready(); + u_avr32_flashc_fcmd.fcmd = AVR32_FLASHC.fcmd; + u_avr32_flashc_fcmd.FCMD.cmd = command; + if (page_number >= 0) u_avr32_flashc_fcmd.FCMD.pagen = page_number; + u_avr32_flashc_fcmd.FCMD.key = AVR32_FLASHC_FCMD_KEY_KEY; + AVR32_FLASHC.fcmd = u_avr32_flashc_fcmd.fcmd; + flashc_error_status = flashc_get_error_status(); + flashc_wait_until_ready(); +} + + +//! @} + + +/*! \name FLASHC Global Commands + */ +//! @{ + + +void flashc_no_operation(void) +{ + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_NOP, -1); +} + + +void flashc_erase_all(void) +{ + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_EA, -1); +} + + +//! @} + + +/*! \name FLASHC Protection Mechanisms + */ +//! @{ + + +Bool flashc_is_security_bit_active(void) +{ + return ((AVR32_FLASHC.fsr & AVR32_FLASHC_FSR_SECURITY_MASK) != 0); +} + + +void flashc_activate_security_bit(void) +{ + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_SSB, -1); +} + + +unsigned int flashc_get_bootloader_protected_size(void) +{ + unsigned int bootprot = (1 << AVR32_FLASHC_FGPFRLO_BOOTPROT_SIZE) - 1 - + flashc_read_gp_fuse_bitfield(AVR32_FLASHC_FGPFRLO_BOOTPROT_OFFSET, + AVR32_FLASHC_FGPFRLO_BOOTPROT_SIZE); + return (bootprot) ? AVR32_FLASHC_PAGE_SIZE << bootprot : 0; +} + + +unsigned int flashc_set_bootloader_protected_size(unsigned int bootprot_size) +{ + flashc_set_gp_fuse_bitfield(AVR32_FLASHC_FGPFRLO_BOOTPROT_OFFSET, + AVR32_FLASHC_FGPFRLO_BOOTPROT_SIZE, + (1 << AVR32_FLASHC_FGPFRLO_BOOTPROT_SIZE) - 1 - + ((bootprot_size) ? + 32 - clz((((min(max(bootprot_size, AVR32_FLASHC_PAGE_SIZE << 1), + AVR32_FLASHC_PAGE_SIZE << + ((1 << AVR32_FLASHC_FGPFRLO_BOOTPROT_SIZE) - 1)) + + AVR32_FLASHC_PAGE_SIZE - 1) / + AVR32_FLASHC_PAGE_SIZE) << 1) - 1) - 1 : + 0)); + return flashc_get_bootloader_protected_size(); +} + + +Bool flashc_is_external_privileged_fetch_locked(void) +{ + return (!flashc_read_gp_fuse_bit(AVR32_FLASHC_FGPFRLO_EPFL_OFFSET)); +} + + +void flashc_lock_external_privileged_fetch(Bool lock) +{ + flashc_set_gp_fuse_bit(AVR32_FLASHC_FGPFRLO_EPFL_OFFSET, !lock); +} + + +Bool flashc_is_page_region_locked(int page_number) +{ + return flashc_is_region_locked(flashc_get_page_region(page_number)); +} + + +Bool flashc_is_region_locked(unsigned int region) +{ + return ((AVR32_FLASHC.fsr & AVR32_FLASHC_FSR_LOCK0_MASK << (region & (AVR32_FLASHC_REGIONS - 1))) != 0); +} + + +void flashc_lock_page_region(int page_number, Bool lock) +{ + flashc_issue_command((lock) ? AVR32_FLASHC_FCMD_CMD_LP : AVR32_FLASHC_FCMD_CMD_UP, page_number); +} + + +void flashc_lock_region(unsigned int region, Bool lock) +{ + flashc_lock_page_region(flashc_get_region_first_page_number(region), lock); +} + + +void flashc_lock_all_regions(Bool lock) +{ + unsigned int error_status = 0; + unsigned int region = AVR32_FLASHC_REGIONS; + while (region) + { + flashc_lock_region(--region, lock); + error_status |= flashc_error_status; + } + flashc_error_status = error_status; +} + + +//! @} + + +/*! \name Access to General-Purpose Fuses + */ +//! @{ + + +Bool flashc_read_gp_fuse_bit(unsigned int gp_fuse_bit) +{ + return ((flashc_read_all_gp_fuses() & 1ULL << (gp_fuse_bit & 0x3F)) != 0); +} + + +U64 flashc_read_gp_fuse_bitfield(unsigned int pos, unsigned int width) +{ + return flashc_read_all_gp_fuses() >> (pos & 0x3F) & ((1ULL << min(width, 64)) - 1); +} + + +U8 flashc_read_gp_fuse_byte(unsigned int gp_fuse_byte) +{ + return flashc_read_all_gp_fuses() >> ((gp_fuse_byte & 0x07) << 3); +} + + +U64 flashc_read_all_gp_fuses(void) +{ + return AVR32_FLASHC.fgpfrlo | (U64)AVR32_FLASHC.fgpfrhi << 32; +} + + +Bool flashc_erase_gp_fuse_bit(unsigned int gp_fuse_bit, Bool check) +{ + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_EGPB, gp_fuse_bit & 0x3F); + return (check) ? flashc_read_gp_fuse_bit(gp_fuse_bit) : TRUE; +} + + +Bool flashc_erase_gp_fuse_bitfield(unsigned int pos, unsigned int width, Bool check) +{ + unsigned int error_status = 0; + unsigned int gp_fuse_bit; + pos &= 0x3F; + width = min(width, 64); + for (gp_fuse_bit = pos; gp_fuse_bit < pos + width; gp_fuse_bit++) + { + flashc_erase_gp_fuse_bit(gp_fuse_bit, FALSE); + error_status |= flashc_error_status; + } + flashc_error_status = error_status; + return (check) ? (flashc_read_gp_fuse_bitfield(pos, width) == (1ULL << width) - 1) : TRUE; +} + + +Bool flashc_erase_gp_fuse_byte(unsigned int gp_fuse_byte, Bool check) +{ + unsigned int error_status; + unsigned int current_gp_fuse_byte; + U64 value = flashc_read_all_gp_fuses(); + flashc_erase_all_gp_fuses(FALSE); + error_status = flashc_error_status; + for (current_gp_fuse_byte = 0; current_gp_fuse_byte < 8; current_gp_fuse_byte++, value >>= 8) + { + if (current_gp_fuse_byte != gp_fuse_byte) + { + flashc_write_gp_fuse_byte(current_gp_fuse_byte, value); + error_status |= flashc_error_status; + } + } + flashc_error_status = error_status; + return (check) ? (flashc_read_gp_fuse_byte(gp_fuse_byte) == 0xFF) : TRUE; +} + + +Bool flashc_erase_all_gp_fuses(Bool check) +{ + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_EAGPF, -1); + return (check) ? (flashc_read_all_gp_fuses() == 0xFFFFFFFFFFFFFFFFULL) : TRUE; +} + + +void flashc_write_gp_fuse_bit(unsigned int gp_fuse_bit, Bool value) +{ + if (!value) + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_WGPB, gp_fuse_bit & 0x3F); +} + + +void flashc_write_gp_fuse_bitfield(unsigned int pos, unsigned int width, U64 value) +{ + unsigned int error_status = 0; + unsigned int gp_fuse_bit; + pos &= 0x3F; + width = min(width, 64); + for (gp_fuse_bit = pos; gp_fuse_bit < pos + width; gp_fuse_bit++, value >>= 1) + { + flashc_write_gp_fuse_bit(gp_fuse_bit, value & 0x01); + error_status |= flashc_error_status; + } + flashc_error_status = error_status; +} + + +void flashc_write_gp_fuse_byte(unsigned int gp_fuse_byte, U8 value) +{ + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_PGPFB, (gp_fuse_byte & 0x07) | value << 3); +} + + +void flashc_write_all_gp_fuses(U64 value) +{ + unsigned int error_status = 0; + unsigned int gp_fuse_byte; + for (gp_fuse_byte = 0; gp_fuse_byte < 8; gp_fuse_byte++, value >>= 8) + { + flashc_write_gp_fuse_byte(gp_fuse_byte, value); + error_status |= flashc_error_status; + } + flashc_error_status = error_status; +} + + +void flashc_set_gp_fuse_bit(unsigned int gp_fuse_bit, Bool value) +{ + if (value) + flashc_erase_gp_fuse_bit(gp_fuse_bit, FALSE); + else + flashc_write_gp_fuse_bit(gp_fuse_bit, FALSE); +} + + +void flashc_set_gp_fuse_bitfield(unsigned int pos, unsigned int width, U64 value) +{ + unsigned int error_status = 0; + unsigned int gp_fuse_bit; + pos &= 0x3F; + width = min(width, 64); + for (gp_fuse_bit = pos; gp_fuse_bit < pos + width; gp_fuse_bit++, value >>= 1) + { + flashc_set_gp_fuse_bit(gp_fuse_bit, value & 0x01); + error_status |= flashc_error_status; + } + flashc_error_status = error_status; +} + + +void flashc_set_gp_fuse_byte(unsigned int gp_fuse_byte, U8 value) +{ + unsigned int error_status; + switch (value) + { + case 0xFF: + flashc_erase_gp_fuse_byte(gp_fuse_byte, FALSE); + break; + case 0x00: + flashc_write_gp_fuse_byte(gp_fuse_byte, 0x00); + break; + default: + flashc_erase_gp_fuse_byte(gp_fuse_byte, FALSE); + error_status = flashc_error_status; + flashc_write_gp_fuse_byte(gp_fuse_byte, value); + flashc_error_status |= error_status; + } +} + + +void flashc_set_all_gp_fuses(U64 value) +{ + unsigned int error_status; + switch (value) + { + case 0xFFFFFFFFFFFFFFFFULL: + flashc_erase_all_gp_fuses(FALSE); + break; + case 0x0000000000000000ULL: + flashc_write_all_gp_fuses(0x0000000000000000ULL); + break; + default: + flashc_erase_all_gp_fuses(FALSE); + error_status = flashc_error_status; + flashc_write_all_gp_fuses(value); + flashc_error_status |= error_status; + } +} + + +//! @} + + +/*! \name Access to Flash Pages + */ +//! @{ + + +void flashc_clear_page_buffer(void) +{ + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_CPB, -1); +} + + +Bool flashc_is_page_erased(void) +{ + return ((AVR32_FLASHC.fsr & AVR32_FLASHC_FSR_QPRR_MASK) != 0); +} + + +Bool flashc_quick_page_read(int page_number) +{ + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_QPR, page_number); + return flashc_is_page_erased(); +} + + +Bool flashc_erase_page(int page_number, Bool check) +{ + Bool page_erased = TRUE; + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_EP, page_number); + if (check) + { + unsigned int error_status = flashc_error_status; + page_erased = flashc_quick_page_read(-1); + flashc_error_status |= error_status; + } + return page_erased; +} + + +Bool flashc_erase_all_pages(Bool check) +{ + Bool all_pages_erased = TRUE; + unsigned int error_status = 0; + unsigned int page_number = flashc_get_page_count(); + while (page_number) + { + all_pages_erased &= flashc_erase_page(--page_number, check); + error_status |= flashc_error_status; + } + flashc_error_status = error_status; + return all_pages_erased; +} + + +void flashc_write_page(int page_number) +{ + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_WP, page_number); +} + + +Bool flashc_quick_user_page_read(void) +{ + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_QPRUP, -1); + return flashc_is_page_erased(); +} + + +Bool flashc_erase_user_page(Bool check) +{ + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_EUP, -1); + return (check) ? flashc_quick_user_page_read() : TRUE; +} + + +void flashc_write_user_page(void) +{ + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_WUP, -1); +} + + +volatile void *flashc_memset8(volatile void *dst, U8 src, size_t nbytes, Bool erase) +{ + return flashc_memset16(dst, src | (U16)src << 8, nbytes, erase); +} + + +volatile void *flashc_memset16(volatile void *dst, U16 src, size_t nbytes, Bool erase) +{ + return flashc_memset32(dst, src | (U32)src << 16, nbytes, erase); +} + + +volatile void *flashc_memset32(volatile void *dst, U32 src, size_t nbytes, Bool erase) +{ + return flashc_memset64(dst, src | (U64)src << 32, nbytes, erase); +} + + +volatile void *flashc_memset64(volatile void *dst, U64 src, size_t nbytes, Bool erase) +{ + // Use aggregated pointers to have several alignments available for a same address. + UnionCVPtr flash_array_end; + UnionVPtr dest; + Union64 source = {0}; + StructCVPtr dest_end; + UnionCVPtr flash_page_source_end; + Bool incomplete_flash_page_end; + Union64 flash_dword; + UnionVPtr tmp; + unsigned int error_status = 0; + unsigned int i; + + // Reformat arguments. + flash_array_end.u8ptr = AVR32_FLASH + flashc_get_flash_size(); + dest.u8ptr = dst; + for (i = (Get_align((U32)dest.u8ptr, sizeof(U64)) - 1) & (sizeof(U64) - 1); + src; i = (i - 1) & (sizeof(U64) - 1)) + { + source.u8[i] = src; + src >>= 8; + } + dest_end.u8ptr = dest.u8ptr + nbytes; + + // If destination is outside flash, go to next flash page if any. + if (dest.u8ptr < AVR32_FLASH) + { + dest.u8ptr = AVR32_FLASH; + } + else if (flash_array_end.u8ptr <= dest.u8ptr && dest.u8ptr < AVR32_FLASHC_USER_PAGE) + { + dest.u8ptr = AVR32_FLASHC_USER_PAGE; + } + + // If end of destination is outside flash, move it to the end of the previous flash page if any. + if (dest_end.u8ptr > AVR32_FLASHC_USER_PAGE + AVR32_FLASHC_USER_PAGE_SIZE) + { + dest_end.u8ptr = AVR32_FLASHC_USER_PAGE + AVR32_FLASHC_USER_PAGE_SIZE; + } + else if (AVR32_FLASHC_USER_PAGE >= dest_end.u8ptr && dest_end.u8ptr > flash_array_end.u8ptr) + { + dest_end.u8ptr = flash_array_end.u8ptr; + } + + // Align each end of destination pointer with its natural boundary. + dest_end.u16ptr = (U16 *)Align_down((U32)dest_end.u8ptr, sizeof(U16)); + dest_end.u32ptr = (U32 *)Align_down((U32)dest_end.u16ptr, sizeof(U32)); + dest_end.u64ptr = (U64 *)Align_down((U32)dest_end.u32ptr, sizeof(U64)); + + // While end of destination is not reached... + while (dest.u8ptr < dest_end.u8ptr) + { + // Clear the page buffer in order to prepare data for a flash page write. + flashc_clear_page_buffer(); + error_status |= flashc_error_status; + + // Determine where the source data will end in the current flash page. + flash_page_source_end.u64ptr = + (U64 *)min((U32)dest_end.u64ptr, + Align_down((U32)dest.u8ptr, AVR32_FLASHC_PAGE_SIZE) + AVR32_FLASHC_PAGE_SIZE); + + // Determine if the current destination page has an incomplete end. + incomplete_flash_page_end = (Align_down((U32)dest.u8ptr, AVR32_FLASHC_PAGE_SIZE) >= + Align_down((U32)dest_end.u8ptr, AVR32_FLASHC_PAGE_SIZE)); + + // Use a flash double-word buffer to manage unaligned accesses. + flash_dword.u64 = source.u64; + + // If destination does not point to the beginning of the current flash page... + if (!Test_align((U32)dest.u8ptr, AVR32_FLASHC_PAGE_SIZE)) + { + // Fill the beginning of the page buffer with the current flash page data. + // This is required by the hardware, even if page erase is not requested, + // in order to be able to write successfully to erased parts of flash + // pages that have already been written to. + for (tmp.u8ptr = (U8 *)Align_down((U32)dest.u8ptr, AVR32_FLASHC_PAGE_SIZE); + tmp.u64ptr < (U64 *)Align_down((U32)dest.u8ptr, sizeof(U64)); + tmp.u64ptr++) + *tmp.u64ptr = *tmp.u64ptr; + + // If destination is not 64-bit aligned... + if (!Test_align((U32)dest.u8ptr, sizeof(U64))) + { + // Fill the beginning of the flash double-word buffer with the current + // flash page data. + // This is required by the hardware, even if page erase is not + // requested, in order to be able to write successfully to erased parts + // of flash pages that have already been written to. + for (i = 0; i < Get_align((U32)dest.u8ptr, sizeof(U64)); i++) + flash_dword.u8[i] = *tmp.u8ptr++; + + // Align the destination pointer with its 64-bit boundary. + dest.u64ptr = (U64 *)Align_down((U32)dest.u8ptr, sizeof(U64)); + + // If the current destination double-word is not the last one... + if (dest.u64ptr < dest_end.u64ptr) + { + // Write the flash double-word buffer to the page buffer and reinitialize it. + *dest.u64ptr++ = flash_dword.u64; + flash_dword.u64 = source.u64; + } + } + } + + // Write the source data to the page buffer with 64-bit alignment. + for (i = flash_page_source_end.u64ptr - dest.u64ptr; i; i--) + *dest.u64ptr++ = source.u64; + + // If the current destination page has an incomplete end... + if (incomplete_flash_page_end) + { + // This is required by the hardware, even if page erase is not requested, + // in order to be able to write successfully to erased parts of flash + // pages that have already been written to. + { + tmp.u8ptr = (volatile U8 *)dest_end.u8ptr; + + // If end of destination is not 64-bit aligned... + if (!Test_align((U32)dest_end.u8ptr, sizeof(U64))) + { + // Fill the end of the flash double-word buffer with the current flash page data. + for (i = Get_align((U32)dest_end.u8ptr, sizeof(U64)); i < sizeof(U64); i++) + flash_dword.u8[i] = *tmp.u8ptr++; + + // Write the flash double-word buffer to the page buffer. + *dest.u64ptr++ = flash_dword.u64; + } + + // Fill the end of the page buffer with the current flash page data. + for (; !Test_align((U32)tmp.u64ptr, AVR32_FLASHC_PAGE_SIZE); tmp.u64ptr++) + *tmp.u64ptr = *tmp.u64ptr; + } + } + + // If the current flash page is in the flash array... + if (dest.u8ptr <= AVR32_FLASHC_USER_PAGE) + { + // Erase the current page if requested and write it from the page buffer. + if (erase) + { + flashc_erase_page(-1, FALSE); + error_status |= flashc_error_status; + } + flashc_write_page(-1); + error_status |= flashc_error_status; + + // If the end of the flash array is reached, go to the User page. + if (dest.u8ptr >= flash_array_end.u8ptr) + dest.u8ptr = AVR32_FLASHC_USER_PAGE; + } + // If the current flash page is the User page... + else + { + // Erase the User page if requested and write it from the page buffer. + if (erase) + { + flashc_erase_user_page(FALSE); + error_status |= flashc_error_status; + } + flashc_write_user_page(); + error_status |= flashc_error_status; + } + } + + // Update the FLASHC error status. + flashc_error_status = error_status; + + // Return the initial destination pointer as the standard memset function does. + return dst; +} + + +volatile void *flashc_memcpy(volatile void *dst, const void *src, size_t nbytes, Bool erase) +{ + // Use aggregated pointers to have several alignments available for a same address. + UnionCVPtr flash_array_end; + UnionVPtr dest; + UnionCPtr source; + StructCVPtr dest_end; + UnionCVPtr flash_page_source_end; + Bool incomplete_flash_page_end; + Union64 flash_dword; + Bool flash_dword_pending = FALSE; + UnionVPtr tmp; + unsigned int error_status = 0; + unsigned int i, j; + + // Reformat arguments. + flash_array_end.u8ptr = AVR32_FLASH + flashc_get_flash_size(); + dest.u8ptr = dst; + source.u8ptr = src; + dest_end.u8ptr = dest.u8ptr + nbytes; + + // If destination is outside flash, go to next flash page if any. + if (dest.u8ptr < AVR32_FLASH) + { + source.u8ptr += AVR32_FLASH - dest.u8ptr; + dest.u8ptr = AVR32_FLASH; + } + else if (flash_array_end.u8ptr <= dest.u8ptr && dest.u8ptr < AVR32_FLASHC_USER_PAGE) + { + source.u8ptr += AVR32_FLASHC_USER_PAGE - dest.u8ptr; + dest.u8ptr = AVR32_FLASHC_USER_PAGE; + } + + // If end of destination is outside flash, move it to the end of the previous flash page if any. + if (dest_end.u8ptr > AVR32_FLASHC_USER_PAGE + AVR32_FLASHC_USER_PAGE_SIZE) + { + dest_end.u8ptr = AVR32_FLASHC_USER_PAGE + AVR32_FLASHC_USER_PAGE_SIZE; + } + else if (AVR32_FLASHC_USER_PAGE >= dest_end.u8ptr && dest_end.u8ptr > flash_array_end.u8ptr) + { + dest_end.u8ptr = flash_array_end.u8ptr; + } + + // Align each end of destination pointer with its natural boundary. + dest_end.u16ptr = (U16 *)Align_down((U32)dest_end.u8ptr, sizeof(U16)); + dest_end.u32ptr = (U32 *)Align_down((U32)dest_end.u16ptr, sizeof(U32)); + dest_end.u64ptr = (U64 *)Align_down((U32)dest_end.u32ptr, sizeof(U64)); + + // While end of destination is not reached... + while (dest.u8ptr < dest_end.u8ptr) + { + // Clear the page buffer in order to prepare data for a flash page write. + flashc_clear_page_buffer(); + error_status |= flashc_error_status; + + // Determine where the source data will end in the current flash page. + flash_page_source_end.u64ptr = + (U64 *)min((U32)dest_end.u64ptr, + Align_down((U32)dest.u8ptr, AVR32_FLASHC_PAGE_SIZE) + AVR32_FLASHC_PAGE_SIZE); + + // Determine if the current destination page has an incomplete end. + incomplete_flash_page_end = (Align_down((U32)dest.u8ptr, AVR32_FLASHC_PAGE_SIZE) >= + Align_down((U32)dest_end.u8ptr, AVR32_FLASHC_PAGE_SIZE)); + + // If destination does not point to the beginning of the current flash page... + if (!Test_align((U32)dest.u8ptr, AVR32_FLASHC_PAGE_SIZE)) + { + // Fill the beginning of the page buffer with the current flash page data. + // This is required by the hardware, even if page erase is not requested, + // in order to be able to write successfully to erased parts of flash + // pages that have already been written to. + for (tmp.u8ptr = (U8 *)Align_down((U32)dest.u8ptr, AVR32_FLASHC_PAGE_SIZE); + tmp.u64ptr < (U64 *)Align_down((U32)dest.u8ptr, sizeof(U64)); + tmp.u64ptr++) + *tmp.u64ptr = *tmp.u64ptr; + + // If destination is not 64-bit aligned... + if (!Test_align((U32)dest.u8ptr, sizeof(U64))) + { + // Fill the beginning of the flash double-word buffer with the current + // flash page data. + // This is required by the hardware, even if page erase is not + // requested, in order to be able to write successfully to erased parts + // of flash pages that have already been written to. + for (i = 0; i < Get_align((U32)dest.u8ptr, sizeof(U64)); i++) + flash_dword.u8[i] = *tmp.u8ptr++; + + // Fill the end of the flash double-word buffer with the source data. + for (; i < sizeof(U64); i++) + flash_dword.u8[i] = *source.u8ptr++; + + // Align the destination pointer with its 64-bit boundary. + dest.u64ptr = (U64 *)Align_down((U32)dest.u8ptr, sizeof(U64)); + + // If the current destination double-word is not the last one... + if (dest.u64ptr < dest_end.u64ptr) + { + // Write the flash double-word buffer to the page buffer. + *dest.u64ptr++ = flash_dword.u64; + } + // If the current destination double-word is the last one, the flash + // double-word buffer must be kept for later. + else flash_dword_pending = TRUE; + } + } + + // Read the source data with the maximal possible alignment and write it to + // the page buffer with 64-bit alignment. + switch (Get_align((U32)source.u8ptr, sizeof(U32))) + { + case 0: + for (i = flash_page_source_end.u64ptr - dest.u64ptr; i; i--) + *dest.u64ptr++ = *source.u64ptr++; + break; + + case sizeof(U16): + for (i = flash_page_source_end.u64ptr - dest.u64ptr; i; i--) + { + for (j = 0; j < sizeof(U64) / sizeof(U16); j++) flash_dword.u16[j] = *source.u16ptr++; + *dest.u64ptr++ = flash_dword.u64; + } + break; + + default: + for (i = flash_page_source_end.u64ptr - dest.u64ptr; i; i--) + { + for (j = 0; j < sizeof(U64); j++) flash_dword.u8[j] = *source.u8ptr++; + *dest.u64ptr++ = flash_dword.u64; + } + } + + // If the current destination page has an incomplete end... + if (incomplete_flash_page_end) + { + // If the flash double-word buffer is in use, do not initialize it. + if (flash_dword_pending) i = Get_align((U32)dest_end.u8ptr, sizeof(U64)); + // If the flash double-word buffer is free... + else + { + // Fill the beginning of the flash double-word buffer with the source data. + for (i = 0; i < Get_align((U32)dest_end.u8ptr, sizeof(U64)); i++) + flash_dword.u8[i] = *source.u8ptr++; + } + + // This is required by the hardware, even if page erase is not requested, + // in order to be able to write successfully to erased parts of flash + // pages that have already been written to. + { + tmp.u8ptr = (volatile U8 *)dest_end.u8ptr; + + // If end of destination is not 64-bit aligned... + if (!Test_align((U32)dest_end.u8ptr, sizeof(U64))) + { + // Fill the end of the flash double-word buffer with the current flash page data. + for (; i < sizeof(U64); i++) + flash_dword.u8[i] = *tmp.u8ptr++; + + // Write the flash double-word buffer to the page buffer. + *dest.u64ptr++ = flash_dword.u64; + } + + // Fill the end of the page buffer with the current flash page data. + for (; !Test_align((U32)tmp.u64ptr, AVR32_FLASHC_PAGE_SIZE); tmp.u64ptr++) + *tmp.u64ptr = *tmp.u64ptr; + } + } + + // If the current flash page is in the flash array... + if (dest.u8ptr <= AVR32_FLASHC_USER_PAGE) + { + // Erase the current page if requested and write it from the page buffer. + if (erase) + { + flashc_erase_page(-1, FALSE); + error_status |= flashc_error_status; + } + flashc_write_page(-1); + error_status |= flashc_error_status; + + // If the end of the flash array is reached, go to the User page. + if (dest.u8ptr >= flash_array_end.u8ptr) + { + source.u8ptr += AVR32_FLASHC_USER_PAGE - dest.u8ptr; + dest.u8ptr = AVR32_FLASHC_USER_PAGE; + } + } + // If the current flash page is the User page... + else + { + // Erase the User page if requested and write it from the page buffer. + if (erase) + { + flashc_erase_user_page(FALSE); + error_status |= flashc_error_status; + } + flashc_write_user_page(); + error_status |= flashc_error_status; + } + } + + // Update the FLASHC error status. + flashc_error_status = error_status; + + // Return the initial destination pointer as the standard memcpy function does. + return dst; +} + + +#if UC3C +void flashc_set_flash_waitstate_and_readmode(unsigned long cpu_f_hz) +{ + //! Device-specific data + #undef AVR32_FLASHC_FWS_0_MAX_FREQ + #undef AVR32_FLASHC_FWS_1_MAX_FREQ + #undef AVR32_FLASHC_HSEN_FWS_0_MAX_FREQ + #undef AVR32_FLASHC_HSEN_FWS_1_MAX_FREQ + #define AVR32_FLASHC_FWS_0_MAX_FREQ 33000000 + #define AVR32_FLASHC_FWS_1_MAX_FREQ 66000000 + #define AVR32_FLASHC_HSEN_FWS_0_MAX_FREQ 33000000 + #define AVR32_FLASHC_HSEN_FWS_1_MAX_FREQ 72000000 + // These defines are missing from or wrong in the toolchain header files uc3cxxx.h + // Put a Bugzilla + + if(cpu_f_hz > AVR32_FLASHC_HSEN_FWS_0_MAX_FREQ) // > 33MHz + { + // Set a wait-state + flashc_set_wait_state(1); + if(cpu_f_hz <= AVR32_FLASHC_FWS_1_MAX_FREQ) // <= 66MHz and >33Mhz + { + // Disable the high-speed read mode. + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_HSDIS, -1); + } + else // > 66Mhz + { + // Enable the high-speed read mode. + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_HSEN, -1); + } + } + else // <= 33 MHz + { + // Disable wait-state + flashc_set_wait_state(0); + + // Disable the high-speed read mode. + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_HSDIS, -1); + + } +} +#endif // UC3C device-specific implementation + +//! @} diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC/flashc.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC/flashc.h new file mode 100644 index 000000000..9f2547a6e --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC/flashc.h @@ -0,0 +1,1002 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief FLASHC driver for AVR32 UC3. + * + * AVR32 Flash Controller driver module. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with a FLASHC module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _FLASHC_H_ +#define _FLASHC_H_ + +#include +#include +#include "compiler.h" + +//! Number of flash regions defined by the FLASHC. +#define AVR32_FLASHC_REGIONS (AVR32_FLASHC_FLASH_SIZE /\ + (AVR32_FLASHC_PAGES_PR_REGION * AVR32_FLASHC_PAGE_SIZE)) + + +/*! \name Flash Properties + */ +//! @{ + +/*! \brief Gets the size of the whole flash array. + * + * \return The size of the whole flash array in bytes. + */ +extern unsigned int flashc_get_flash_size(void); + +/*! \brief Gets the total number of pages in the flash array. + * + * \return The total number of pages in the flash array. + */ +extern unsigned int flashc_get_page_count(void); + +/*! \brief Gets the number of pages in each flash region. + * + * \return The number of pages in each flash region. + */ +extern unsigned int flashc_get_page_count_per_region(void); + +/*! \brief Gets the region number of a page. + * + * \param page_number The page number: + * \arg \c 0 to (flashc_get_page_count() - 1): a page number within + * the flash array; + * \arg < 0: the current page number. + * + * \return The region number of the specified page. + */ +extern unsigned int flashc_get_page_region(int page_number); + +/*! \brief Gets the number of the first page of a region. + * + * \param region The region number: \c 0 to (AVR32_FLASHC_REGIONS - 1). + * + * \return The number of the first page of the specified region. + */ +extern unsigned int flashc_get_region_first_page_number(unsigned int region); + +//! @} + + +/*! \name FLASHC Control + */ +//! @{ + +/*! \brief Gets the number of wait states of flash read accesses. + * + * \return The number of wait states of flash read accesses. + */ +extern unsigned int flashc_get_wait_state(void); + +/*! \brief Sets the number of wait states of flash read accesses. + * + * \param wait_state The number of wait states of flash read accesses: \c 0 to + * \c 1. + */ +extern void flashc_set_wait_state(unsigned int wait_state); + +/*! \brief Tells whether the Flash Ready interrupt is enabled. + * + * \return Whether the Flash Ready interrupt is enabled. + */ +extern Bool flashc_is_ready_int_enabled(void); + +/*! \brief Enables or disables the Flash Ready interrupt. + * + * \param enable Whether to enable the Flash Ready interrupt: \c TRUE or + * \c FALSE. + */ +extern void flashc_enable_ready_int(Bool enable); + +/*! \brief Tells whether the Lock Error interrupt is enabled. + * + * \return Whether the Lock Error interrupt is enabled. + */ +extern Bool flashc_is_lock_error_int_enabled(void); + +/*! \brief Enables or disables the Lock Error interrupt. + * + * \param enable Whether to enable the Lock Error interrupt: \c TRUE or + * \c FALSE. + */ +extern void flashc_enable_lock_error_int(Bool enable); + +/*! \brief Tells whether the Programming Error interrupt is enabled. + * + * \return Whether the Programming Error interrupt is enabled. + */ +extern Bool flashc_is_prog_error_int_enabled(void); + +/*! \brief Enables or disables the Programming Error interrupt. + * + * \param enable Whether to enable the Programming Error interrupt: \c TRUE or + * \c FALSE. + */ +extern void flashc_enable_prog_error_int(Bool enable); + +//! @} + + +/*! \name FLASHC Status + */ +//! @{ + +/*! \brief Tells whether the FLASHC is ready to run a new command. + * + * \return Whether the FLASHC is ready to run a new command. + */ +extern Bool flashc_is_ready(void); + +/*! \brief Waits actively until the FLASHC is ready to run a new command. + * + * This is the default function assigned to \ref flashc_wait_until_ready. + */ +extern void flashc_default_wait_until_ready(void); + +//! Pointer to the function used by the driver when it needs to wait until the +//! FLASHC is ready to run a new command. +//! The default function is \ref flashc_default_wait_until_ready. +//! The user may change this pointer to use another implementation. +extern void (*volatile flashc_wait_until_ready)(void); + +/*! \brief Tells whether a Lock Error has occurred during the last function + * called that issued one or more FLASHC commands. + * + * \return Whether a Lock Error has occurred during the last function called + * that issued one or more FLASHC commands. + */ +extern Bool flashc_is_lock_error(void); + +/*! \brief Tells whether a Programming Error has occurred during the last + * function called that issued one or more FLASHC commands. + * + * \return Whether a Programming Error has occurred during the last function + * called that issued one or more FLASHC commands. + */ +extern Bool flashc_is_programming_error(void); + +//! @} + + +/*! \name FLASHC Command Control + */ +//! @{ + +/*! \brief Gets the last issued FLASHC command. + * + * \return The last issued FLASHC command. + */ +extern unsigned int flashc_get_command(void); + +/*! \brief Gets the current FLASHC page number. + * + * \return The current FLASHC page number. + */ +extern unsigned int flashc_get_page_number(void); + +/*! \brief Issues a FLASHC command. + * + * \param command The command: \c AVR32_FLASHC_FCMD_CMD_x. + * \param page_number The page number to apply the command to: + * \arg \c 0 to (flashc_get_page_count() - 1): a page number within + * the flash array; + * \arg < 0: use this to apply the command to the current page number + * or if the command does not apply to any page number; + * \arg this argument may have other meanings according to the command. See + * the FLASHC chapter of the MCU datasheet. + * + * \warning A Lock Error is issued if the command violates the protection + * mechanism. + * + * \warning A Programming Error is issued if the command is invalid. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern void flashc_issue_command(unsigned int command, int page_number); + +//! @} + + +/*! \name FLASHC Global Commands + */ +//! @{ + +/*! \brief Issues a No Operation command to the FLASHC. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern void flashc_no_operation(void); + +/*! \brief Issues an Erase All command to the FLASHC. + * + * This command erases all bits in the flash array, the general-purpose fuse + * bits and the Security bit. The User page is not erased. + * + * This command also ensures that all volatile memories, such as register file + * and RAMs, are erased before the Security bit is erased, i.e. deactivated. + * + * \warning A Lock Error is issued if at least one region is locked or the + * bootloader protection is active. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note An erase operation can only set bits. + */ +extern void flashc_erase_all(void); + +//! @} + + +/*! \name FLASHC Protection Mechanisms + */ +//! @{ + +/*! \brief Tells whether the Security bit is active. + * + * \return Whether the Security bit is active. + */ +extern Bool flashc_is_security_bit_active(void); + +/*! \brief Activates the Security bit. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern void flashc_activate_security_bit(void); + +/*! \brief Gets the bootloader protected size. + * + * \return The bootloader protected size in bytes. + */ +extern unsigned int flashc_get_bootloader_protected_size(void); + +/*! \brief Sets the bootloader protected size. + * + * \param bootprot_size The wanted bootloader protected size in bytes. If this + * size is not supported, the actual size will be the + * nearest greater available size or the maximal possible + * size if the requested size is too large. + * + * \return The actual bootloader protected size in bytes. + * + * \warning A Lock Error is issued if the Security bit is active. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern unsigned int flashc_set_bootloader_protected_size(unsigned int bootprot_size); + +/*! \brief Tells whether external privileged fetch is locked. + * + * \return Whether external privileged fetch is locked. + */ +extern Bool flashc_is_external_privileged_fetch_locked(void); + +/*! \brief Locks or unlocks external privileged fetch. + * + * \param lock Whether to lock external privileged fetch: \c TRUE or \c FALSE. + * + * \warning A Lock Error is issued if the Security bit is active. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern void flashc_lock_external_privileged_fetch(Bool lock); + +/*! \brief Tells whether the region of a page is locked. + * + * \param page_number The page number: + * \arg \c 0 to (flashc_get_page_count() - 1): a page number within + * the flash array; + * \arg < 0: the current page number. + * + * \return Whether the region of the specified page is locked. + */ +extern Bool flashc_is_page_region_locked(int page_number); + +/*! \brief Tells whether a region is locked. + * + * \param region The region number: \c 0 to (AVR32_FLASHC_REGIONS - 1). + * + * \return Whether the specified region is locked. + */ +extern Bool flashc_is_region_locked(unsigned int region); + +/*! \brief Locks or unlocks the region of a page. + * + * \param page_number The page number: + * \arg \c 0 to (flashc_get_page_count() - 1): a page number within + * the flash array; + * \arg < 0: the current page number. + * \param lock Whether to lock the region of the specified page: \c TRUE or + * \c FALSE. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern void flashc_lock_page_region(int page_number, Bool lock); + +/*! \brief Locks or unlocks a region. + * + * \param region The region number: \c 0 to (AVR32_FLASHC_REGIONS - 1). + * \param lock Whether to lock the specified region: \c TRUE or \c FALSE. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern void flashc_lock_region(unsigned int region, Bool lock); + +/*! \brief Locks or unlocks all regions. + * + * \param lock Whether to lock the regions: \c TRUE or \c FALSE. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern void flashc_lock_all_regions(Bool lock); + +//! @} + + +/*! \name Access to General-Purpose Fuses + */ +//! @{ + +/*! \brief Reads a general-purpose fuse bit. + * + * \param gp_fuse_bit The general-purpose fuse bit: \c 0 to \c 63. + * + * \return The value of the specified general-purpose fuse bit. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern Bool flashc_read_gp_fuse_bit(unsigned int gp_fuse_bit); + +/*! \brief Reads a general-purpose fuse bit-field. + * + * \param pos The bit-position of the general-purpose fuse bit-field: \c 0 to + * \c 63. + * \param width The bit-width of the general-purpose fuse bit-field: \c 0 to + * \c 64. + * + * \return The value of the specified general-purpose fuse bit-field. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern U64 flashc_read_gp_fuse_bitfield(unsigned int pos, unsigned int width); + +/*! \brief Reads a general-purpose fuse byte. + * + * \param gp_fuse_byte The general-purpose fuse byte: \c 0 to \c 7. + * + * \return The value of the specified general-purpose fuse byte. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern U8 flashc_read_gp_fuse_byte(unsigned int gp_fuse_byte); + +/*! \brief Reads all general-purpose fuses. + * + * \return The value of all general-purpose fuses as a word. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern U64 flashc_read_all_gp_fuses(void); + +/*! \brief Erases a general-purpose fuse bit. + * + * \param gp_fuse_bit The general-purpose fuse bit: \c 0 to \c 63. + * \param check Whether to check erase: \c TRUE or \c FALSE. + * + * \return Whether the erase succeeded or always \c TRUE if erase check was not + * requested. + * + * \warning A Lock Error is issued if the Security bit is active and the command + * is applied to BOOTPROT or EPFL fuses. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note An erase operation can only set bits. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern Bool flashc_erase_gp_fuse_bit(unsigned int gp_fuse_bit, Bool check); + +/*! \brief Erases a general-purpose fuse bit-field. + * + * \param pos The bit-position of the general-purpose fuse bit-field: \c 0 to + * \c 63. + * \param width The bit-width of the general-purpose fuse bit-field: \c 0 to + * \c 64. + * \param check Whether to check erase: \c TRUE or \c FALSE. + * + * \return Whether the erase succeeded or always \c TRUE if erase check was not + * requested. + * + * \warning A Lock Error is issued if the Security bit is active and the command + * is applied to BOOTPROT or EPFL fuses. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note An erase operation can only set bits. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern Bool flashc_erase_gp_fuse_bitfield(unsigned int pos, unsigned int width, Bool check); + +/*! \brief Erases a general-purpose fuse byte. + * + * \param gp_fuse_byte The general-purpose fuse byte: \c 0 to \c 7. + * \param check Whether to check erase: \c TRUE or \c FALSE. + * + * \return Whether the erase succeeded or always \c TRUE if erase check was not + * requested. + * + * \warning A Lock Error is issued if the Security bit is active. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note An erase operation can only set bits. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern Bool flashc_erase_gp_fuse_byte(unsigned int gp_fuse_byte, Bool check); + +/*! \brief Erases all general-purpose fuses. + * + * \param check Whether to check erase: \c TRUE or \c FALSE. + * + * \return Whether the erase succeeded or always \c TRUE if erase check was not + * requested. + * + * \warning A Lock Error is issued if the Security bit is active. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note An erase operation can only set bits. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern Bool flashc_erase_all_gp_fuses(Bool check); + +/*! \brief Writes a general-purpose fuse bit. + * + * \param gp_fuse_bit The general-purpose fuse bit: \c 0 to \c 63. + * \param value The value of the specified general-purpose fuse bit. + * + * \warning A Lock Error is issued if the Security bit is active and the command + * is applied to BOOTPROT or EPFL fuses. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note A write operation can only clear bits. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern void flashc_write_gp_fuse_bit(unsigned int gp_fuse_bit, Bool value); + +/*! \brief Writes a general-purpose fuse bit-field. + * + * \param pos The bit-position of the general-purpose fuse bit-field: \c 0 to + * \c 63. + * \param width The bit-width of the general-purpose fuse bit-field: \c 0 to + * \c 64. + * \param value The value of the specified general-purpose fuse bit-field. + * + * \warning A Lock Error is issued if the Security bit is active and the command + * is applied to BOOTPROT or EPFL fuses. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note A write operation can only clear bits. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern void flashc_write_gp_fuse_bitfield(unsigned int pos, unsigned int width, U64 value); + +/*! \brief Writes a general-purpose fuse byte. + * + * \param gp_fuse_byte The general-purpose fuse byte: \c 0 to \c 7. + * \param value The value of the specified general-purpose fuse byte. + * + * \warning A Lock Error is issued if the Security bit is active. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note A write operation can only clear bits. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern void flashc_write_gp_fuse_byte(unsigned int gp_fuse_byte, U8 value); + +/*! \brief Writes all general-purpose fuses. + * + * \param value The value of all general-purpose fuses as a word. + * + * \warning A Lock Error is issued if the Security bit is active. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note A write operation can only clear bits. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern void flashc_write_all_gp_fuses(U64 value); + +/*! \brief Sets a general-purpose fuse bit with the appropriate erase and write + * operations. + * + * \param gp_fuse_bit The general-purpose fuse bit: \c 0 to \c 63. + * \param value The value of the specified general-purpose fuse bit. + * + * \warning A Lock Error is issued if the Security bit is active and the command + * is applied to BOOTPROT or EPFL fuses. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern void flashc_set_gp_fuse_bit(unsigned int gp_fuse_bit, Bool value); + +/*! \brief Sets a general-purpose fuse bit-field with the appropriate erase and + * write operations. + * + * \param pos The bit-position of the general-purpose fuse bit-field: \c 0 to + * \c 63. + * \param width The bit-width of the general-purpose fuse bit-field: \c 0 to + * \c 64. + * \param value The value of the specified general-purpose fuse bit-field. + * + * \warning A Lock Error is issued if the Security bit is active and the command + * is applied to BOOTPROT or EPFL fuses. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern void flashc_set_gp_fuse_bitfield(unsigned int pos, unsigned int width, U64 value); + +/*! \brief Sets a general-purpose fuse byte with the appropriate erase and write + * operations. + * + * \param gp_fuse_byte The general-purpose fuse byte: \c 0 to \c 7. + * \param value The value of the specified general-purpose fuse byte. + * + * \warning A Lock Error is issued if the Security bit is active. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern void flashc_set_gp_fuse_byte(unsigned int gp_fuse_byte, U8 value); + +/*! \brief Sets all general-purpose fuses with the appropriate erase and write + * operations. + * + * \param value The value of all general-purpose fuses as a word. + * + * \warning A Lock Error is issued if the Security bit is active. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern void flashc_set_all_gp_fuses(U64 value); + +//! @} + + +/*! \name Access to Flash Pages + */ +//! @{ + +/*! \brief Clears the page buffer. + * + * This command resets all bits in the page buffer to one. Write accesses to the + * page buffer can only change page buffer bits from one to zero. + * + * \warning The page buffer is not automatically reset after a page write. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern void flashc_clear_page_buffer(void); + +/*! \brief Tells whether the page to which the last Quick Page Read or Quick + * Page Read User Page command was applied was erased. + * + * \return Whether the page to which the last Quick Page Read or Quick Page Read + * User Page command was applied was erased. + */ +extern Bool flashc_is_page_erased(void); + +/*! \brief Applies the Quick Page Read command to a page. + * + * \param page_number The page number: + * \arg \c 0 to (flashc_get_page_count() - 1): a page number within + * the flash array; + * \arg < 0: the current page number. + * + * \return Whether the specified page is erased. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern Bool flashc_quick_page_read(int page_number); + +/*! \brief Erases a page. + * + * \param page_number The page number: + * \arg \c 0 to (flashc_get_page_count() - 1): a page number within + * the flash array; + * \arg < 0: the current page number. + * \param check Whether to check erase: \c TRUE or \c FALSE. + * + * \return Whether the erase succeeded or always \c TRUE if erase check was not + * requested. + * + * \warning A Lock Error is issued if the command is applied to a page belonging + * to a locked region or to the bootloader protected area. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note An erase operation can only set bits. + */ +extern Bool flashc_erase_page(int page_number, Bool check); + +/*! \brief Erases all pages within the flash array. + * + * \param check Whether to check erase: \c TRUE or \c FALSE. + * + * \return Whether the erase succeeded or always \c TRUE if erase check was not + * requested. + * + * \warning A Lock Error is issued if at least one region is locked or the + * bootloader protection is active. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note An erase operation can only set bits. + */ +extern Bool flashc_erase_all_pages(Bool check); + +/*! \brief Writes a page from the page buffer. + * + * \param page_number The page number: + * \arg \c 0 to (flashc_get_page_count() - 1): a page number within + * the flash array; + * \arg < 0: the current page number. + * + * \warning A Lock Error is issued if the command is applied to a page belonging + * to a locked region or to the bootloader protected area. + * + * \warning The page buffer is not automatically reset after a page write. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note A write operation can only clear bits. + */ +extern void flashc_write_page(int page_number); + +/*! \brief Issues a Quick Page Read User Page command to the FLASHC. + * + * \return Whether the User page is erased. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern Bool flashc_quick_user_page_read(void); + +/*! \brief Erases the User page. + * + * \param check Whether to check erase: \c TRUE or \c FALSE. + * + * \return Whether the erase succeeded or always \c TRUE if erase check was not + * requested. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note An erase operation can only set bits. + */ +extern Bool flashc_erase_user_page(Bool check); + +/*! \brief Writes the User page from the page buffer. + * + * \warning The page buffer is not automatically reset after a page write. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note A write operation can only clear bits. + */ +extern void flashc_write_user_page(void); + +/*! \brief Copies \a nbytes bytes to the flash destination pointed to by \a dst + * from the repeated \a src source byte. + * + * The destination areas that are not within the flash array or the User page + * are ignored. + * + * All pointer and size alignments are supported. + * + * \param dst Pointer to flash destination. + * \param src Source byte. + * \param nbytes Number of bytes to set. + * \param erase Whether to erase before writing: \c TRUE or \c FALSE. + * + * \return The value of \a dst. + * + * \warning This function may be called with \a erase set to \c FALSE only if + * the destination consists only of erased words, i.e. this function + * can not be used to write only one bit of a previously written word. + * E.g., if \c 0x00000001 then \c 0xFFFFFFFE are written to a word, the + * resulting value in flash may be different from \c 0x00000000. + * + * \warning A Lock Error is issued if the command is applied to pages belonging + * to a locked region or to the bootloader protected area. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern volatile void *flashc_memset8(volatile void *dst, U8 src, size_t nbytes, Bool erase); + +/*! \brief Copies \a nbytes bytes to the flash destination pointed to by \a dst + * from the repeated \a src big-endian source half-word. + * + * The destination areas that are not within the flash array or the User page + * are ignored. + * + * All pointer and size alignments are supported. + * + * \param dst Pointer to flash destination. + * \param src Source half-word. + * \param nbytes Number of bytes to set. + * \param erase Whether to erase before writing: \c TRUE or \c FALSE. + * + * \return The value of \a dst. + * + * \warning This function may be called with \a erase set to \c FALSE only if + * the destination consists only of erased words, i.e. this function + * can not be used to write only one bit of a previously written word. + * E.g., if \c 0x00000001 then \c 0xFFFFFFFE are written to a word, the + * resulting value in flash may be different from \c 0x00000000. + * + * \warning A Lock Error is issued if the command is applied to pages belonging + * to a locked region or to the bootloader protected area. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern volatile void *flashc_memset16(volatile void *dst, U16 src, size_t nbytes, Bool erase); + +/*! \brief Copies \a nbytes bytes to the flash destination pointed to by \a dst + * from the repeated \a src big-endian source word. + * + * The destination areas that are not within the flash array or the User page + * are ignored. + * + * All pointer and size alignments are supported. + * + * \param dst Pointer to flash destination. + * \param src Source word. + * \param nbytes Number of bytes to set. + * \param erase Whether to erase before writing: \c TRUE or \c FALSE. + * + * \return The value of \a dst. + * + * \warning This function may be called with \a erase set to \c FALSE only if + * the destination consists only of erased words, i.e. this function + * can not be used to write only one bit of a previously written word. + * E.g., if \c 0x00000001 then \c 0xFFFFFFFE are written to a word, the + * resulting value in flash may be different from \c 0x00000000. + * + * \warning A Lock Error is issued if the command is applied to pages belonging + * to a locked region or to the bootloader protected area. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern volatile void *flashc_memset32(volatile void *dst, U32 src, size_t nbytes, Bool erase); + +/*! \brief Copies \a nbytes bytes to the flash destination pointed to by \a dst + * from the repeated \a src big-endian source double-word. + * + * The destination areas that are not within the flash array or the User page + * are ignored. + * + * All pointer and size alignments are supported. + * + * \param dst Pointer to flash destination. + * \param src Source double-word. + * \param nbytes Number of bytes to set. + * \param erase Whether to erase before writing: \c TRUE or \c FALSE. + * + * \return The value of \a dst. + * + * \warning This function may be called with \a erase set to \c FALSE only if + * the destination consists only of erased words, i.e. this function + * can not be used to write only one bit of a previously written word. + * E.g., if \c 0x00000001 then \c 0xFFFFFFFE are written to a word, the + * resulting value in flash may be different from \c 0x00000000. + * + * \warning A Lock Error is issued if the command is applied to pages belonging + * to a locked region or to the bootloader protected area. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern volatile void *flashc_memset64(volatile void *dst, U64 src, size_t nbytes, Bool erase); + +/*! \brief Copies \a nbytes bytes to the flash destination pointed to by \a dst + * from the repeated \a src big-endian source pattern. + * + * The destination areas that are not within the flash array or the User page + * are ignored. + * + * All pointer and size alignments are supported. + * + * \param dst Pointer to flash destination. + * \param src Source double-word. + * \param src_width \a src width in bits: 8, 16, 32 or 64. + * \param nbytes Number of bytes to set. + * \param erase Whether to erase before writing: \c TRUE or \c FALSE. + * + * \return The value of \a dst. + * + * \warning This function may be called with \a erase set to \c FALSE only if + * the destination consists only of erased words, i.e. this function + * can not be used to write only one bit of a previously written word. + * E.g., if \c 0x00000001 then \c 0xFFFFFFFE are written to a word, the + * resulting value in flash may be different from \c 0x00000000. + * + * \warning A Lock Error is issued if the command is applied to pages belonging + * to a locked region or to the bootloader protected area. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +#define flashc_memset(dst, src, src_width, nbytes, erase) \ + TPASTE2(flashc_memset, src_width)((dst), (src), (nbytes), (erase)) + +/*! \brief Copies \a nbytes bytes to the flash destination pointed to by \a dst + * from the source pointed to by \a src. + * + * The destination areas that are not within the flash array or the User page + * are ignored. + * + * All pointer and size alignments are supported. + * + * \param dst Pointer to flash destination. + * \param src Pointer to source data. + * \param nbytes Number of bytes to copy. + * \param erase Whether to erase before writing: \c TRUE or \c FALSE. + * + * \return The value of \a dst. + * + * \warning If copying takes place between areas that overlap, the behavior is + * undefined. + * + * \warning This function may be called with \a erase set to \c FALSE only if + * the destination consists only of erased words, i.e. this function + * can not be used to write only one bit of a previously written word. + * E.g., if \c 0x00000001 then \c 0xFFFFFFFE are written to a word, the + * resulting value in flash may be different from \c 0x00000000. + * + * \warning A Lock Error is issued if the command is applied to pages belonging + * to a locked region or to the bootloader protected area. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern volatile void *flashc_memcpy(volatile void *dst, const void *src, size_t nbytes, Bool erase); + +#if UC3C + +/*! \brief Depednding to the CPU frequency, set the wait states of flash read + * accesses and enable or disable the High speed read mode. + * + * \param cpu_f_hz The CPU frequency + */ +void flashc_set_flash_waitstate_and_readmode(unsigned long cpu_f_hz); +#endif // UC3C device-specific implementation + +//! @} + + +#endif // _FLASHC_H_ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO/gpio.c b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO/gpio.c new file mode 100644 index 000000000..b6b83c73f --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO/gpio.c @@ -0,0 +1,458 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file has been prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief GPIO driver for AVR32 UC3. + * + * This file defines a useful set of functions for the GPIO. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with a GPIO module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + *****************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#include "gpio.h" + +//! GPIO module instance. +#define GPIO AVR32_GPIO + + +/*! \name Peripheral Bus Interface + */ +//! @{ + + +int gpio_enable_module(const gpio_map_t gpiomap, unsigned int size) +{ + int status = GPIO_SUCCESS; + unsigned int i; + + for (i = 0; i < size; i++) + { + status |= gpio_enable_module_pin(gpiomap->pin, gpiomap->function); + gpiomap++; + } + + return status; +} + + +int gpio_enable_module_pin(unsigned int pin, unsigned int function) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + + // Enable the correct function. + switch (function) + { + case 0: // A function. + gpio_port->pmr0c = 1 << (pin & 0x1F); + gpio_port->pmr1c = 1 << (pin & 0x1F); +#if defined(AVR32_GPIO_210_H_INCLUDED) || defined(AVR32_GPIO_211_H_INCLUDED) + gpio_port->pmr2c = 1 << (pin & 0x1F); +#endif + break; + + case 1: // B function. + gpio_port->pmr0s = 1 << (pin & 0x1F); + gpio_port->pmr1c = 1 << (pin & 0x1F); +#if defined(AVR32_GPIO_210_H_INCLUDED) || defined(AVR32_GPIO_211_H_INCLUDED) + gpio_port->pmr2c = 1 << (pin & 0x1F); +#endif + break; + + case 2: // C function. + gpio_port->pmr0c = 1 << (pin & 0x1F); + gpio_port->pmr1s = 1 << (pin & 0x1F); +#if defined(AVR32_GPIO_210_H_INCLUDED) || defined(AVR32_GPIO_211_H_INCLUDED) + gpio_port->pmr2c = 1 << (pin & 0x1F); +#endif + break; + + case 3: // D function. + gpio_port->pmr0s = 1 << (pin & 0x1F); + gpio_port->pmr1s = 1 << (pin & 0x1F); +#if defined(AVR32_GPIO_210_H_INCLUDED) || defined(AVR32_GPIO_211_H_INCLUDED) + gpio_port->pmr2c = 1 << (pin & 0x1F); +#endif + break; + +#if defined(AVR32_GPIO_210_H_INCLUDED) || defined(AVR32_GPIO_211_H_INCLUDED) + case 4: // E function. + gpio_port->pmr0c = 1 << (pin & 0x1F); + gpio_port->pmr1c = 1 << (pin & 0x1F); + gpio_port->pmr2s = 1 << (pin & 0x1F); + break; + + case 5: // F function. + gpio_port->pmr0s = 1 << (pin & 0x1F); + gpio_port->pmr1c = 1 << (pin & 0x1F); + gpio_port->pmr2s = 1 << (pin & 0x1F); + break; + + case 6: // G function. + gpio_port->pmr0c = 1 << (pin & 0x1F); + gpio_port->pmr1s = 1 << (pin & 0x1F); + gpio_port->pmr2s = 1 << (pin & 0x1F); + break; + + case 7: // H function. + gpio_port->pmr0s = 1 << (pin & 0x1F); + gpio_port->pmr1s = 1 << (pin & 0x1F); + gpio_port->pmr2s = 1 << (pin & 0x1F); + break; +#endif + + default: + return GPIO_INVALID_ARGUMENT; + } + + // Disable GPIO control. + gpio_port->gperc = 1 << (pin & 0x1F); + + return GPIO_SUCCESS; +} + + +void gpio_enable_gpio(const gpio_map_t gpiomap, unsigned int size) +{ + unsigned int i; + + for (i = 0; i < size; i++) + { + gpio_enable_gpio_pin(gpiomap->pin); + gpiomap++; + } +} + + +void gpio_enable_gpio_pin(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + gpio_port->oderc = 1 << (pin & 0x1F); + gpio_port->gpers = 1 << (pin & 0x1F); +} + + +// The open-drain mode is not synthesized on the current AVR32 products. +// If one day some AVR32 products have this feature, the corresponding part +// numbers should be listed in the #if below. +// Note that other functions are available in this driver to use pins with open +// drain in GPIO mode. The advantage of the open-drain mode functions over these +// other functions is that they can be used not only in GPIO mode but also in +// module mode. +#if 0 + + +void gpio_enable_pin_open_drain(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + gpio_port->odmers = 1 << (pin & 0x1F); +} + + +void gpio_disable_pin_open_drain(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + gpio_port->odmerc = 1 << (pin & 0x1F); +} + + +#endif + + +void gpio_enable_pin_pull_up(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + gpio_port->puers = 1 << (pin & 0x1F); +#if defined(AVR32_GPIO_200_H_INCLUDED) || defined(AVR32_GPIO_210_H_INCLUDED) || defined(AVR32_GPIO_211_H_INCLUDED) + gpio_port->pderc = 1 << (pin & 0x1F); +#endif +} + + +void gpio_disable_pin_pull_up(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + gpio_port->puerc = 1 << (pin & 0x1F); +} + +#if defined(AVR32_GPIO_200_H_INCLUDED) || defined(AVR32_GPIO_210_H_INCLUDED) || defined(AVR32_GPIO_211_H_INCLUDED) +// Added support of Pull-up Resistor, Pull-down Resistor and Buskeeper Control. + +/*! \brief Enables the pull-down resistor of a pin. + * + * \param pin The pin number. + */ +void gpio_enable_pin_pull_down(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + gpio_port->puerc = 1 << (pin & 0x1F); + gpio_port->pders = 1 << (pin & 0x1F); +} + +/*! \brief Disables the pull-down resistor of a pin. + * + * \param pin The pin number. + */ +void gpio_disable_pin_pull_down(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + gpio_port->pderc = 1 << (pin & 0x1F); +} + +/*! \brief Enables the buskeeper functionality on a pin. + * + * \param pin The pin number. + */ +void gpio_enable_pin_buskeeper(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + gpio_port->puers = 1 << (pin & 0x1F); + gpio_port->pders = 1 << (pin & 0x1F); +} + +/*! \brief Disables the buskeeper functionality on a pin. + * + * \param pin The pin number. + */ +void gpio_disable_pin_buskeeper(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + gpio_port->puerc = 1 << (pin & 0x1F); + gpio_port->pderc = 1 << (pin & 0x1F); +} + +#endif + +int gpio_get_pin_value(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + return (gpio_port->pvr >> (pin & 0x1F)) & 1; +} + + +int gpio_get_gpio_pin_output_value(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + return (gpio_port->ovr >> (pin & 0x1F)) & 1; +} + + +int gpio_get_gpio_open_drain_pin_output_value(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + return ((gpio_port->oder >> (pin & 0x1F)) & 1) ^ 1; +} + + +void gpio_set_gpio_pin(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + + gpio_port->ovrs = 1 << (pin & 0x1F); // Value to be driven on the I/O line: 1. + gpio_port->oders = 1 << (pin & 0x1F); // The GPIO output driver is enabled for that pin. + gpio_port->gpers = 1 << (pin & 0x1F); // The GPIO module controls that pin. +} + + +void gpio_clr_gpio_pin(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + + gpio_port->ovrc = 1 << (pin & 0x1F); // Value to be driven on the I/O line: 0. + gpio_port->oders = 1 << (pin & 0x1F); // The GPIO output driver is enabled for that pin. + gpio_port->gpers = 1 << (pin & 0x1F); // The GPIO module controls that pin. +} + + +void gpio_tgl_gpio_pin(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + + gpio_port->ovrt = 1 << (pin & 0x1F); // Toggle the I/O line. + gpio_port->oders = 1 << (pin & 0x1F); // The GPIO output driver is enabled for that pin. + gpio_port->gpers = 1 << (pin & 0x1F); // The GPIO module controls that pin. +} + + +void gpio_set_gpio_open_drain_pin(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + + gpio_port->oderc = 1 << (pin & 0x1F); // The GPIO output driver is disabled for that pin. + gpio_port->gpers = 1 << (pin & 0x1F); // The GPIO module controls that pin. +} + + +void gpio_clr_gpio_open_drain_pin(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + + gpio_port->ovrc = 1 << (pin & 0x1F); // Value to be driven on the I/O line: 0. + gpio_port->oders = 1 << (pin & 0x1F); // The GPIO output driver is enabled for that pin. + gpio_port->gpers = 1 << (pin & 0x1F); // The GPIO module controls that pin. +} + + +void gpio_tgl_gpio_open_drain_pin(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + + gpio_port->ovrc = 1 << (pin & 0x1F); // Value to be driven on the I/O line if the GPIO output driver is enabled: 0. + gpio_port->odert = 1 << (pin & 0x1F); // The GPIO output driver is toggled for that pin. + gpio_port->gpers = 1 << (pin & 0x1F); // The GPIO module controls that pin. +} + + +void gpio_enable_pin_glitch_filter(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + gpio_port->gfers = 1 << (pin & 0x1F); +} + + +void gpio_disable_pin_glitch_filter(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + gpio_port->gferc = 1 << (pin & 0x1F); +} + +/*! \brief Configure the edge detector of an input pin + * + * \param pin The pin number. + * \param mode The edge detection mode (\ref GPIO_PIN_CHANGE, \ref GPIO_RISING_EDGE + * or \ref GPIO_FALLING_EDGE). + * + * \return \ref GPIO_SUCCESS or \ref GPIO_INVALID_ARGUMENT. + */ +static int gpio_configure_edge_detector(unsigned int pin, unsigned int mode) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + + // Configure the edge detector. + switch (mode) + { + case GPIO_PIN_CHANGE: + gpio_port->imr0c = 1 << (pin & 0x1F); + gpio_port->imr1c = 1 << (pin & 0x1F); + break; + + case GPIO_RISING_EDGE: + gpio_port->imr0s = 1 << (pin & 0x1F); + gpio_port->imr1c = 1 << (pin & 0x1F); + break; + + case GPIO_FALLING_EDGE: + gpio_port->imr0c = 1 << (pin & 0x1F); + gpio_port->imr1s = 1 << (pin & 0x1F); + break; + + default: + return GPIO_INVALID_ARGUMENT; + } + + return GPIO_SUCCESS; +} + + +int gpio_enable_pin_interrupt(unsigned int pin, unsigned int mode) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + + // Enable the glitch filter. + gpio_port->gfers = 1 << (pin & 0x1F); + + // Configure the edge detector. + if(GPIO_INVALID_ARGUMENT == gpio_configure_edge_detector(pin, mode)) + return(GPIO_INVALID_ARGUMENT); + + // Enable interrupt. + gpio_port->iers = 1 << (pin & 0x1F); + + return GPIO_SUCCESS; +} + + +void gpio_disable_pin_interrupt(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + gpio_port->ierc = 1 << (pin & 0x1F); +} + + +int gpio_get_pin_interrupt_flag(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + return (gpio_port->ifr >> (pin & 0x1F)) & 1; +} + + +void gpio_clear_pin_interrupt_flag(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + gpio_port->ifrc = 1 << (pin & 0x1F); +} + + +//# +//# Peripheral Event System Support. +//# +#if UC3L +int gpio_configure_pin_periph_event_mode(unsigned int pin, unsigned int mode, unsigned int use_igf) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + + if(TRUE == use_igf) + { + // Enable the glitch filter. + gpio_port->gfers = 1 << (pin & 0x1F); + } + else + { + // Disable the glitch filter. + gpio_port->gferc = 1 << (pin & 0x1F); + } + + // Configure the edge detector. + return(gpio_configure_edge_detector(pin, mode)); +} + +#endif + +//! @} diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO/gpio.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO/gpio.h new file mode 100644 index 000000000..f0b5fd884 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO/gpio.h @@ -0,0 +1,583 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file has been prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief GPIO header for AVR32 UC3. + * + * This file contains basic GPIO driver functions. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with a GPIO module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + *****************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _GPIO_H_ +#define _GPIO_H_ + +#include +#include "compiler.h" + +/*! \name Return Values of the GPIO API + */ +//! @{ +#define GPIO_SUCCESS 0 //!< Function successfully completed. +#define GPIO_INVALID_ARGUMENT 1 //!< Input parameters are out of range. +//! @} + + +/*! \name Interrupt Trigger Modes + */ +//! @{ +#define GPIO_PIN_CHANGE 0 //!< Interrupt triggered upon pin change. +#define GPIO_RISING_EDGE 1 //!< Interrupt triggered upon rising edge. +#define GPIO_FALLING_EDGE 2 //!< Interrupt triggered upon falling edge. +//! @} + + +//! A type definition of pins and modules connectivity. +typedef struct +{ + unsigned char pin; //!< Module pin. + unsigned char function; //!< Module function. +} gpio_map_t[]; + + +/*! \name Peripheral Bus Interface + * + * Low-speed interface with a non-deterministic number of clock cycles per + * access. + * + * This interface operates with lower clock frequencies (fPB <= fCPU), and its + * timing is not deterministic since it needs to access a shared bus which may + * be heavily loaded. + * + * \note This interface is immediately available without initialization. + */ +//! @{ + +/*! \brief Enables specific module modes for a set of pins. + * + * \param gpiomap The pin map. + * \param size The number of pins in \a gpiomap. + * + * \return \ref GPIO_SUCCESS or \ref GPIO_INVALID_ARGUMENT. + */ +extern int gpio_enable_module(const gpio_map_t gpiomap, unsigned int size); + +/*! \brief Enables a specific module mode for a pin. + * + * \param pin The pin number.\n + * Refer to the product header file `uc3x.h' (where x is the part + * number; e.g. x = a0512) for module pins. E.g., to enable a PWM + * channel output, the pin number can be AVR32_PWM_3_PIN for PWM + * channel 3. + * \param function The pin function.\n + * Refer to the product header file `uc3x.h' (where x is the + * part number; e.g. x = a0512) for module pin functions. E.g., + * to enable a PWM channel output, the pin function can be + * AVR32_PWM_3_FUNCTION for PWM channel 3. + * + * \return \ref GPIO_SUCCESS or \ref GPIO_INVALID_ARGUMENT. + */ +extern int gpio_enable_module_pin(unsigned int pin, unsigned int function); + +/*! \brief Enables the GPIO mode of a set of pins. + * + * \param gpiomap The pin map. + * \param size The number of pins in \a gpiomap. + */ +extern void gpio_enable_gpio(const gpio_map_t gpiomap, unsigned int size); + +/*! \brief Enables the GPIO mode of a pin. + * + * \param pin The pin number.\n + * Refer to the product header file `uc3x.h' (where x is the part + * number; e.g. x = a0512) for pin definitions. E.g., to enable the + * GPIO mode of PX21, AVR32_PIN_PX21 can be used. Module pins such as + * AVR32_PWM_3_PIN for PWM channel 3 can also be used to release + * module pins for GPIO. + */ +extern void gpio_enable_gpio_pin(unsigned int pin); + +// The open-drain mode is not synthesized on the current AVR32 products. +// If one day some AVR32 products have this feature, the corresponding part +// numbers should be listed in the #if below. +// Note that other functions are available in this driver to use pins with open +// drain in GPIO mode. The advantage of the open-drain mode functions over these +// other functions is that they can be used not only in GPIO mode but also in +// module mode. +#if 0 + +/*! \brief Enables the open-drain mode of a pin. + * + * \param pin The pin number. + */ +extern void gpio_enable_pin_open_drain(unsigned int pin); + +/*! \brief Disables the open-drain mode of a pin. + * + * \param pin The pin number. + */ +extern void gpio_disable_pin_open_drain(unsigned int pin); + +#endif + +/*! \brief Enables the pull-up resistor of a pin. + * + * \param pin The pin number. + */ +extern void gpio_enable_pin_pull_up(unsigned int pin); + +/*! \brief Disables the pull-up resistor of a pin. + * + * \param pin The pin number. + */ +extern void gpio_disable_pin_pull_up(unsigned int pin); + +#if defined(AVR32_GPIO_200_H_INCLUDED) || defined(AVR32_GPIO_210_H_INCLUDED) || defined(AVR32_GPIO_211_H_INCLUDED) +// Added support of Pull-up Resistor, Pull-down Resistor and Buskeeper Control. + +/*! \brief Enables the pull-down resistor of a pin. + * + * \param pin The pin number. + */ +extern void gpio_enable_pin_pull_down(unsigned int pin); + +/*! \brief Disables the pull-down resistor of a pin. + * + * \param pin The pin number. + */ +extern void gpio_disable_pin_pull_down(unsigned int pin); + +/*! \brief Enables the buskeeper functionality on a pin. + * + * \param pin The pin number. + */ +extern void gpio_enable_pin_buskeeper(unsigned int pin); + +/*! \brief Disables the buskeeper functionality on a pin. + * + * \param pin The pin number. + */ +extern void gpio_disable_pin_buskeeper(unsigned int pin); + +#endif + +/*! \brief Returns the value of a pin. + * + * \param pin The pin number. + * + * \return The pin value. + */ +extern int gpio_get_pin_value(unsigned int pin); + +/*! \brief Returns the output value set for a GPIO pin. + * + * \param pin The pin number. + * + * \return The pin output value. + * + * \note This function must be used in conjunction with \ref gpio_set_gpio_pin, + * \ref gpio_clr_gpio_pin and \ref gpio_tgl_gpio_pin. + */ +extern int gpio_get_gpio_pin_output_value(unsigned int pin); + +/*! \brief Returns the output value set for a GPIO pin using open drain. + * + * \param pin The pin number. + * + * \return The pin output value. + * + * \note This function must be used in conjunction with + * \ref gpio_set_gpio_open_drain_pin, \ref gpio_clr_gpio_open_drain_pin + * and \ref gpio_tgl_gpio_open_drain_pin. + */ +extern int gpio_get_gpio_open_drain_pin_output_value(unsigned int pin); + +/*! \brief Drives a GPIO pin to 1. + * + * \param pin The pin number. + */ +extern void gpio_set_gpio_pin(unsigned int pin); + +/*! \brief Drives a GPIO pin to 0. + * + * \param pin The pin number. + */ +extern void gpio_clr_gpio_pin(unsigned int pin); + +/*! \brief Toggles a GPIO pin. + * + * \param pin The pin number. + */ +extern void gpio_tgl_gpio_pin(unsigned int pin); + +/*! \brief Drives a GPIO pin to 1 using open drain. + * + * \param pin The pin number. + */ +extern void gpio_set_gpio_open_drain_pin(unsigned int pin); + +/*! \brief Drives a GPIO pin to 0 using open drain. + * + * \param pin The pin number. + */ +extern void gpio_clr_gpio_open_drain_pin(unsigned int pin); + +/*! \brief Toggles a GPIO pin using open drain. + * + * \param pin The pin number. + */ +extern void gpio_tgl_gpio_open_drain_pin(unsigned int pin); + +/*! \brief Enables the glitch filter of a pin. + * + * When the glitch filter is enabled, a glitch with duration of less than 1 + * clock cycle is automatically rejected, while a pulse with duration of 2 clock + * cycles or more is accepted. For pulse durations between 1 clock cycle and 2 + * clock cycles, the pulse may or may not be taken into account, depending on + * the precise timing of its occurrence. Thus for a pulse to be guaranteed + * visible it must exceed 2 clock cycles, whereas for a glitch to be reliably + * filtered out, its duration must not exceed 1 clock cycle. The filter + * introduces 2 clock cycles latency. + * + * \param pin The pin number. + */ +extern void gpio_enable_pin_glitch_filter(unsigned int pin); + +/*! \brief Disables the glitch filter of a pin. + * + * \param pin The pin number. + */ +extern void gpio_disable_pin_glitch_filter(unsigned int pin); + +/*! \brief Enables the interrupt of a pin with the specified settings. + * + * \param pin The pin number. + * \param mode The trigger mode (\ref GPIO_PIN_CHANGE, \ref GPIO_RISING_EDGE or + * \ref GPIO_FALLING_EDGE). + * + * \return \ref GPIO_SUCCESS or \ref GPIO_INVALID_ARGUMENT. + */ +extern int gpio_enable_pin_interrupt(unsigned int pin, unsigned int mode); + +/*! \brief Disables the interrupt of a pin. + * + * \param pin The pin number. + */ +extern void gpio_disable_pin_interrupt(unsigned int pin); + +/*! \brief Gets the interrupt flag of a pin. + * + * \param pin The pin number. + * + * \return The pin interrupt flag. + */ +extern int gpio_get_pin_interrupt_flag(unsigned int pin); + +/*! \brief Clears the interrupt flag of a pin. + * + * \param pin The pin number. + */ +extern void gpio_clear_pin_interrupt_flag(unsigned int pin); + +//! @} + + +#if (defined AVR32_GPIO_LOCAL_ADDRESS) +/*! \name Local Bus Interface + * + * High-speed interface with only one clock cycle per access. + * + * This interface operates with high clock frequency (fCPU), and its timing is + * deterministic since it does not need to access a shared bus which may be + * heavily loaded. + * + * \warning To use this interface, the clock frequency of the peripheral bus on + * which the GPIO peripheral is connected must be set to the CPU clock + * frequency (fPB = fCPU). + * + * \note This interface has to be initialized in order to be available. + */ +//! @{ + +/*! \brief Enables the local bus interface for GPIO. + * + * \note This function must have been called at least once before using other + * functions in this interface. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void gpio_local_init(void) +{ + Set_system_register(AVR32_CPUCR, + Get_system_register(AVR32_CPUCR) | AVR32_CPUCR_LOCEN_MASK); +} + +/*! \brief Enables the output driver of a pin. + * + * \param pin The pin number. + * + * \note \ref gpio_local_init must have been called beforehand. + * + * \note This function does not enable the GPIO mode of the pin. + * \ref gpio_enable_gpio_pin can be called for this purpose. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void gpio_local_enable_pin_output_driver(unsigned int pin) +{ + AVR32_GPIO_LOCAL.port[pin >> 5].oders = 1 << (pin & 0x1F); +} + +/*! \brief Disables the output driver of a pin. + * + * \param pin The pin number. + * + * \note \ref gpio_local_init must have been called beforehand. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void gpio_local_disable_pin_output_driver(unsigned int pin) +{ + AVR32_GPIO_LOCAL.port[pin >> 5].oderc = 1 << (pin & 0x1F); +} + +/*! \brief Returns the value of a pin. + * + * \param pin The pin number. + * + * \return The pin value. + * + * \note \ref gpio_local_init must have been called beforehand. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ int gpio_local_get_pin_value(unsigned int pin) +{ + return (AVR32_GPIO_LOCAL.port[pin >> 5].pvr >> (pin & 0x1F)) & 1; +} + +/*! \brief Drives a GPIO pin to 1. + * + * \param pin The pin number. + * + * \note \ref gpio_local_init must have been called beforehand. + * + * \note This function does not enable the GPIO mode of the pin nor its output + * driver. \ref gpio_enable_gpio_pin and + * \ref gpio_local_enable_pin_output_driver can be called for this + * purpose. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void gpio_local_set_gpio_pin(unsigned int pin) +{ + AVR32_GPIO_LOCAL.port[pin >> 5].ovrs = 1 << (pin & 0x1F); +} + +/*! \brief Drives a GPIO pin to 0. + * + * \param pin The pin number. + * + * \note \ref gpio_local_init must have been called beforehand. + * + * \note This function does not enable the GPIO mode of the pin nor its output + * driver. \ref gpio_enable_gpio_pin and + * \ref gpio_local_enable_pin_output_driver can be called for this + * purpose. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void gpio_local_clr_gpio_pin(unsigned int pin) +{ + AVR32_GPIO_LOCAL.port[pin >> 5].ovrc = 1 << (pin & 0x1F); +} + +/*! \brief Toggles a GPIO pin. + * + * \param pin The pin number. + * + * \note \ref gpio_local_init must have been called beforehand. + * + * \note This function does not enable the GPIO mode of the pin nor its output + * driver. \ref gpio_enable_gpio_pin and + * \ref gpio_local_enable_pin_output_driver can be called for this + * purpose. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void gpio_local_tgl_gpio_pin(unsigned int pin) +{ + AVR32_GPIO_LOCAL.port[pin >> 5].ovrt = 1 << (pin & 0x1F); +} + +/*! \brief Initializes the configuration of a GPIO pin so that it can be used + * with GPIO open-drain functions. + * + * \note This function must have been called at least once before using + * \ref gpio_local_set_gpio_open_drain_pin, + * \ref gpio_local_clr_gpio_open_drain_pin or + * \ref gpio_local_tgl_gpio_open_drain_pin. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void gpio_local_init_gpio_open_drain_pin(unsigned int pin) +{ + AVR32_GPIO_LOCAL.port[pin >> 5].ovrc = 1 << (pin & 0x1F); +} + +/*! \brief Drives a GPIO pin to 1 using open drain. + * + * \param pin The pin number. + * + * \note \ref gpio_local_init and \ref gpio_local_init_gpio_open_drain_pin must + * have been called beforehand. + * + * \note This function does not enable the GPIO mode of the pin. + * \ref gpio_enable_gpio_pin can be called for this purpose. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void gpio_local_set_gpio_open_drain_pin(unsigned int pin) +{ + AVR32_GPIO_LOCAL.port[pin >> 5].oderc = 1 << (pin & 0x1F); +} + +/*! \brief Drives a GPIO pin to 0 using open drain. + * + * \param pin The pin number. + * + * \note \ref gpio_local_init and \ref gpio_local_init_gpio_open_drain_pin must + * have been called beforehand. + * + * \note This function does not enable the GPIO mode of the pin. + * \ref gpio_enable_gpio_pin can be called for this purpose. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void gpio_local_clr_gpio_open_drain_pin(unsigned int pin) +{ + AVR32_GPIO_LOCAL.port[pin >> 5].oders = 1 << (pin & 0x1F); +} + +/*! \brief Toggles a GPIO pin using open drain. + * + * \param pin The pin number. + * + * \note \ref gpio_local_init and \ref gpio_local_init_gpio_open_drain_pin must + * have been called beforehand. + * + * \note This function does not enable the GPIO mode of the pin. + * \ref gpio_enable_gpio_pin can be called for this purpose. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void gpio_local_tgl_gpio_open_drain_pin(unsigned int pin) +{ + AVR32_GPIO_LOCAL.port[pin >> 5].odert = 1 << (pin & 0x1F); +} + +//! @} +#endif // AVR32_GPIO_LOCAL_ADDRESS + +#if UC3L +//! @{ +/*! \name Peripheral Event System support + * + * The GPIO can be programmed to output peripheral events whenever an interrupt + * condition is detected, such as pin value change, or only when a rising or + * falling edge is detected. + * + */ + +/*! \brief Enables the peripheral event generation of a pin. + * + * \param pin The pin number. + * + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void gpio_enable_pin_periph_event(unsigned int pin) +{ + AVR32_GPIO.port[pin >> 5].oderc = 1 << (pin & 0x1F); // The GPIO output driver is disabled for that pin. + AVR32_GPIO.port[pin >> 5].evers = 1 << (pin & 0x1F); +} + +/*! \brief Disables the peripheral event generation of a pin. + * + * \param pin The pin number. + * + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void gpio_disable_pin_periph_event(unsigned int pin) +{ + AVR32_GPIO.port[pin >> 5].everc = 1 << (pin & 0x1F); +} + +/*! \brief Configure the peripheral event trigger mode of a pin + * + * \param pin The pin number. + * \param mode The trigger mode (\ref GPIO_PIN_CHANGE, \ref GPIO_RISING_EDGE or + * \ref GPIO_FALLING_EDGE). + * \param use_igf use the Input Glitch Filter (TRUE) or not (FALSE). + * + * \return \ref GPIO_SUCCESS or \ref GPIO_INVALID_ARGUMENT. + */ +extern int gpio_configure_pin_periph_event_mode(unsigned int pin, unsigned int mode, unsigned int use_igf); + +//! @} +#endif + + +#endif // _GPIO_H_ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/INTC/exception.x b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/INTC/exception.x new file mode 100644 index 000000000..ec4109d46 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/INTC/exception.x @@ -0,0 +1,239 @@ +/* This file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Exception and interrupt vectors. + * + * This file maps all events supported by an AVR32. + * + * - Compiler: GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with an INTC module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#if !__AVR32_UC__ && !__AVR32_AP__ + #error Implementation of the AVR32 architecture not supported by the INTC driver. +#endif + + +#include + + +//! @{ +//! \verbatim + + + .section .exception, "ax", @progbits + + +// Start of Exception Vector Table. + + // EVBA must be aligned with a power of two strictly greater than the EVBA- + // relative offset of the last vector. + .balign 0x200 + + // Export symbol. + .global _evba + .type _evba, @function +_evba: + + .org 0x000 + // Unrecoverable Exception. +_handle_Unrecoverable_Exception: + rjmp $ + + .org 0x004 + // TLB Multiple Hit. +_handle_TLB_Multiple_Hit: + rjmp $ + + .org 0x008 + // Bus Error Data Fetch. +_handle_Bus_Error_Data_Fetch: + rjmp $ + + .org 0x00C + // Bus Error Instruction Fetch. +_handle_Bus_Error_Instruction_Fetch: + rjmp $ + + .org 0x010 + // NMI. +_handle_NMI: + rjmp $ + + .org 0x014 + // Instruction Address. +_handle_Instruction_Address: + rjmp $ + + .org 0x018 + // ITLB Protection. +_handle_ITLB_Protection: + rjmp $ + + .org 0x01C + // Breakpoint. +_handle_Breakpoint: + rjmp $ + + .org 0x020 + // Illegal Opcode. +_handle_Illegal_Opcode: + rjmp $ + + .org 0x024 + // Unimplemented Instruction. +_handle_Unimplemented_Instruction: + rjmp $ + + .org 0x028 + // Privilege Violation. +_handle_Privilege_Violation: + rjmp $ + + .org 0x02C + // Floating-Point: UNUSED IN AVR32UC and AVR32AP. +_handle_Floating_Point: + rjmp $ + + .org 0x030 + // Coprocessor Absent: UNUSED IN AVR32UC. +_handle_Coprocessor_Absent: + rjmp $ + + .org 0x034 + // Data Address (Read). +_handle_Data_Address_Read: + rjmp $ + + .org 0x038 + // Data Address (Write). +_handle_Data_Address_Write: + rjmp $ + + .org 0x03C + // DTLB Protection (Read). +_handle_DTLB_Protection_Read: + rjmp $ + + .org 0x040 + // DTLB Protection (Write). +_handle_DTLB_Protection_Write: + rjmp $ + + .org 0x044 + // DTLB Modified: UNUSED IN AVR32UC. +_handle_DTLB_Modified: + rjmp $ + + .org 0x050 + // ITLB Miss. +_handle_ITLB_Miss: + rjmp $ + + .org 0x060 + // DTLB Miss (Read). +_handle_DTLB_Miss_Read: + rjmp $ + + .org 0x070 + // DTLB Miss (Write). +_handle_DTLB_Miss_Write: + rjmp $ + + .org 0x100 + // Supervisor Call. +_handle_Supervisor_Call: + rjmp $ + + +// Interrupt support. +// The interrupt controller must provide the offset address relative to EVBA. +// Important note: +// All interrupts call a C function named _get_interrupt_handler. +// This function will read group and interrupt line number to then return in +// R12 a pointer to a user-provided interrupt handler. + + .balign 4 + + .irp priority, 0, 1, 2, 3 +_int\priority: +#if __AVR32_UC__ + // R8-R12, LR, PC and SR are automatically pushed onto the system stack by the + // CPU upon interrupt entry. No other register is saved by hardware. +#elif __AVR32_AP__ + // PC and SR are automatically saved in respectively RAR_INTx and RSR_INTx by + // the CPU upon interrupt entry. No other register is saved by hardware. + pushm r8-r12, lr +#endif + mov r12, \priority // Pass the int_level parameter to the _get_interrupt_handler function. + call _get_interrupt_handler + cp.w r12, 0 // Get the pointer to the interrupt handler returned by the function. +#if __AVR32_UC__ + movne pc, r12 // If this was not a spurious interrupt (R12 != NULL), jump to the handler. +#elif __AVR32_AP__ + breq spint\priority // If this was a spurious interrupt (R12 == NULL), branch. + st.w --sp, r12 // Push the pointer to the interrupt handler onto the system stack since no register may be altered. + popm r8-r12, lr, pc // Restore registers and jump to the handler. +spint\priority: + popm r8-r12, lr +#endif + rete // If this was a spurious interrupt (R12 == NULL), return from event handler. + .endr + + +// Constant data area. + + .balign 4 + + // Values to store in the interrupt priority registers for the various interrupt priority levels. + // The interrupt priority registers contain the interrupt priority level and + // the EVBA-relative interrupt vector offset. + .global ipr_val + .type ipr_val, @object +ipr_val: + .word (AVR32_INTC_INT0 << AVR32_INTC_IPR_INTLEVEL_OFFSET) | (_int0 - _evba),\ + (AVR32_INTC_INT1 << AVR32_INTC_IPR_INTLEVEL_OFFSET) | (_int1 - _evba),\ + (AVR32_INTC_INT2 << AVR32_INTC_IPR_INTLEVEL_OFFSET) | (_int2 - _evba),\ + (AVR32_INTC_INT3 << AVR32_INTC_IPR_INTLEVEL_OFFSET) | (_int3 - _evba) + + +//! \endverbatim +//! @} diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/INTC/intc.c b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/INTC/intc.c new file mode 100644 index 000000000..84d498d1a --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/INTC/intc.c @@ -0,0 +1,214 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief INTC driver for AVR32 UC3. + * + * AVR32 Interrupt Controller driver module. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with an INTC module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#include +#include "compiler.h" +#include "preprocessor.h" +#include "intc.h" + +// define _evba from exception.S +extern void _evba; + +//! Values to store in the interrupt priority registers for the various interrupt priority levels. +extern const unsigned int ipr_val[AVR32_INTC_NUM_INT_LEVELS]; + +//! Creates a table of interrupt line handlers per interrupt group in order to optimize RAM space. +//! Each line handler table contains a set of pointers to interrupt handlers. +#if (defined __GNUC__) +#define DECL_INT_LINE_HANDLER_TABLE(GRP, unused) \ +static volatile __int_handler _int_line_handler_table_##GRP[Max(AVR32_INTC_NUM_IRQS_PER_GRP##GRP, 1)]; +#elif (defined __ICCAVR32__) +#define DECL_INT_LINE_HANDLER_TABLE(GRP, unused) \ +static volatile __no_init __int_handler _int_line_handler_table_##GRP[Max(AVR32_INTC_NUM_IRQS_PER_GRP##GRP, 1)]; +#endif +MREPEAT(AVR32_INTC_NUM_INT_GRPS, DECL_INT_LINE_HANDLER_TABLE, ~); +#undef DECL_INT_LINE_HANDLER_TABLE + +//! Table containing for each interrupt group the number of interrupt request +//! lines and a pointer to the table of interrupt line handlers. +static const struct +{ + unsigned int num_irqs; + volatile __int_handler *_int_line_handler_table; +} _int_handler_table[AVR32_INTC_NUM_INT_GRPS] = +{ +#define INSERT_INT_LINE_HANDLER_TABLE(GRP, unused) \ + {AVR32_INTC_NUM_IRQS_PER_GRP##GRP, _int_line_handler_table_##GRP}, + MREPEAT(AVR32_INTC_NUM_INT_GRPS, INSERT_INT_LINE_HANDLER_TABLE, ~) +#undef INSERT_INT_LINE_HANDLER_TABLE +}; + + +/*! \brief Default interrupt handler. + * + * \note Taken and adapted from Newlib. + */ +#if (defined __GNUC__) +__attribute__((__interrupt__)) +#elif (defined __ICCAVR32__) +__interrupt +#endif +static void _unhandled_interrupt(void) +{ + // Catch unregistered interrupts. + while (TRUE); +} + + +/*! \brief Gets the interrupt handler of the current event at the \a int_level + * interrupt priority level (called from exception.S). + * + * \param int_level Interrupt priority level to handle. + * + * \return Interrupt handler to execute. + * + * \note Taken and adapted from Newlib. + */ +__int_handler _get_interrupt_handler(unsigned int int_level) +{ + // ICR3 is mapped first, ICR0 last. + // Code in exception.S puts int_level in R12 which is used by AVR32-GCC to + // pass a single argument to a function. + unsigned int int_grp = AVR32_INTC.icr[AVR32_INTC_INT3 - int_level]; + unsigned int int_req = AVR32_INTC.irr[int_grp]; + + // As an interrupt may disappear while it is being fetched by the CPU + // (spurious interrupt caused by a delayed response from an MCU peripheral to + // an interrupt flag clear or interrupt disable instruction), check if there + // are remaining interrupt lines to process. + // If a spurious interrupt occurs, the status register (SR) contains an + // execution mode and interrupt level masks corresponding to a level 0 + // interrupt, whatever the interrupt priority level causing the spurious + // event. This behavior has been chosen because a spurious interrupt has not + // to be a priority one and because it may not cause any trouble to other + // interrupts. + // However, these spurious interrupts place the hardware in an unstable state + // and could give problems in other/future versions of the CPU, so the + // software has to be written so that they never occur. The only safe way of + // achieving this is to always clear or disable peripheral interrupts with the + // following sequence: + // 1: Mask the interrupt in the CPU by setting GM (or IxM) in SR. + // 2: Perform the bus access to the peripheral register that clears or + // disables the interrupt. + // 3: Wait until the interrupt has actually been cleared or disabled by the + // peripheral. This is usually performed by reading from a register in the + // same peripheral (it DOES NOT have to be the same register that was + // accessed in step 2, but it MUST be in the same peripheral), what takes + // bus system latencies into account, but peripheral internal latencies + // (generally 0 cycle) also have to be considered. + // 4: Unmask the interrupt in the CPU by clearing GM (or IxM) in SR. + // Note that steps 1 and 4 are useless inside interrupt handlers as the + // corresponding interrupt level is automatically masked by IxM (unless IxM is + // explicitly cleared by the software). + // + // Get the right IRQ handler. + // + // If several interrupt lines are active in the group, the interrupt line with + // the highest number is selected. This is to be coherent with the + // prioritization of interrupt groups performed by the hardware interrupt + // controller. + // + // If no handler has been registered for the pending interrupt, + // _unhandled_interrupt will be selected thanks to the initialization of + // _int_line_handler_table_x by INTC_init_interrupts. + // + // exception.S will provide the interrupt handler with a clean interrupt stack + // frame, with nothing more pushed onto the stack. The interrupt handler must + // manage the `rete' instruction, what can be done thanks to pure assembly, + // inline assembly or the `__attribute__((__interrupt__))' C function + // attribute. + return (int_req) ? _int_handler_table[int_grp]._int_line_handler_table[32 - clz(int_req) - 1] : NULL; +} + +//! Init EVBA address. This sequence might also be done in the UTILS/STARTUP/GCC/crt0.S +static __inline__ void INTC_init_evba(void) +{ + Set_system_register(AVR32_EVBA, (int)&_evba ); +} + +void INTC_init_interrupts(void) +{ + unsigned int int_grp, int_req; + + INTC_init_evba(); + + // For all interrupt groups, + for (int_grp = 0; int_grp < AVR32_INTC_NUM_INT_GRPS; int_grp++) + { + // For all interrupt request lines of each group, + for (int_req = 0; int_req < _int_handler_table[int_grp].num_irqs; int_req++) + { + // Assign _unhandled_interrupt as default interrupt handler. + _int_handler_table[int_grp]._int_line_handler_table[int_req] = &_unhandled_interrupt; + } + + // Set the interrupt group priority register to its default value. + // By default, all interrupt groups are linked to the interrupt priority + // level 0 and to the interrupt vector _int0. + AVR32_INTC.ipr[int_grp] = ipr_val[AVR32_INTC_INT0]; + } +} + + +void INTC_register_interrupt(__int_handler handler, unsigned int irq, unsigned int int_level) +{ + // Determine the group of the IRQ. + unsigned int int_grp = irq / AVR32_INTC_MAX_NUM_IRQS_PER_GRP; + + // Store in _int_line_handler_table_x the pointer to the interrupt handler, so + // that _get_interrupt_handler can retrieve it when the interrupt is vectored. + _int_handler_table[int_grp]._int_line_handler_table[irq % AVR32_INTC_MAX_NUM_IRQS_PER_GRP] = handler; + + // Program the corresponding IPRX register to set the interrupt priority level + // and the interrupt vector offset that will be fetched by the core interrupt + // system. + // NOTE: The _intx functions are intermediate assembly functions between the + // core interrupt system and the user interrupt handler. + AVR32_INTC.ipr[int_grp] = ipr_val[int_level & (AVR32_INTC_IPR_INTLEVEL_MASK >> AVR32_INTC_IPR_INTLEVEL_OFFSET)]; +} diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/INTC/intc.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/INTC/intc.h new file mode 100644 index 000000000..31a4fc16b --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/INTC/intc.h @@ -0,0 +1,100 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief INTC driver for AVR32 UC3. + * + * AVR32 Interrupt Controller driver module. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with an INTC module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _INTC_H_ +#define _INTC_H_ + +#include "compiler.h" + + +//! Maximal number of interrupt request lines per group. +#define AVR32_INTC_MAX_NUM_IRQS_PER_GRP 32 + +//! Number of interrupt priority levels. +#define AVR32_INTC_NUM_INT_LEVELS (1 << AVR32_INTC_IPR_INTLEVEL_SIZE) + + +#ifdef __AVR32_ABI_COMPILER__ // Automatically defined when compiling for AVR32, not when assembling. + +//! Pointer to interrupt handler. +#if (defined __GNUC__) +typedef void (*__int_handler)(void); +#elif (defined __ICCAVR32__) +typedef void (__interrupt *__int_handler)(void); +#endif + + +/*! \brief Initializes the hardware interrupt controller driver. + * + * \note Taken and adapted from Newlib. + */ +extern void INTC_init_interrupts(void); + +/*! \brief Registers an interrupt handler. + * + * \param handler Interrupt handler to register. + * \param irq IRQ of the interrupt handler to register. + * \param int_level Interrupt priority level to assign to the group of this IRQ. + * + * \warning The interrupt handler must manage the `rete' instruction, what can + * be done thanks to pure assembly, inline assembly or the + * `__attribute__((__interrupt__))' C function attribute. + * + * \warning If several interrupt handlers of a same group are registered with + * different priority levels, only the latest priority level set will + * be effective. + * + * \note Taken and adapted from Newlib. + */ +extern void INTC_register_interrupt(__int_handler handler, unsigned int irq, unsigned int int_level); + +#endif // __AVR32_ABI_COMPILER__ + + +#endif // _INTC_H_ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/PDCA/pdca.c b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/PDCA/pdca.c new file mode 100644 index 000000000..6c00f9e79 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/PDCA/pdca.c @@ -0,0 +1,296 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief PDCA driver for AVR32 UC3. + * + * This file defines a useful set of functions for the PDCA interface on AVR32 + * devices. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with a PDCA module. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#include "compiler.h" +#include "pdca.h" + + +volatile avr32_pdca_channel_t *pdca_get_handler(unsigned int pdca_ch_number) +{ + // get the correct channel pointer + volatile avr32_pdca_channel_t *pdca_channel = &AVR32_PDCA.channel[pdca_ch_number]; + + if (pdca_ch_number >= AVR32_PDCA_CHANNEL_LENGTH) + return (volatile avr32_pdca_channel_t *)PDCA_INVALID_ARGUMENT; + + return pdca_channel; +} + + +int pdca_init_channel(unsigned int pdca_ch_number, const pdca_channel_options_t *opt) +{ + // get the correct channel pointer + volatile avr32_pdca_channel_t *pdca_channel = pdca_get_handler(pdca_ch_number); + + pdca_disable_interrupt_transfer_complete(pdca_ch_number); // disable channel interrupt + pdca_disable_interrupt_reload_counter_zero(pdca_ch_number); // disable channel interrupt + + Bool global_interrupt_enabled = Is_global_interrupt_enabled(); + + if (global_interrupt_enabled) Disable_global_interrupt(); + pdca_channel->mar = (unsigned long)opt->addr; + pdca_channel->tcr = opt->size; + pdca_channel->psr = opt->pid; + pdca_channel->marr = (unsigned long)opt->r_addr; + pdca_channel->tcrr = opt->r_size; + pdca_channel->mr = +#if (defined AVR32_PDCA_120_H_INCLUDED ) || (defined AVR32_PDCA_121_H_INCLUDED ) || (defined AVR32_PDCA_122_H_INCLUDED ) +opt->etrig << AVR32_PDCA_ETRIG_OFFSET | +#endif // #ifdef AVR32_PDCA_120_H_INCLUDED + opt->transfer_size << AVR32_PDCA_SIZE_OFFSET; + pdca_channel->cr = AVR32_PDCA_ECLR_MASK; + pdca_channel->isr; + if (global_interrupt_enabled) Enable_global_interrupt(); + + return PDCA_SUCCESS; +} + + +unsigned int pdca_get_channel_status(unsigned int pdca_ch_number) +{ + // get the correct channel pointer + volatile avr32_pdca_channel_t *pdca_channel = pdca_get_handler(pdca_ch_number); + + return (pdca_channel->sr & AVR32_PDCA_TEN_MASK) != 0; +} + + +void pdca_disable(unsigned int pdca_ch_number) +{ + // get the correct channel pointer + volatile avr32_pdca_channel_t *pdca_channel = pdca_get_handler(pdca_ch_number); + + // Disable transfer + pdca_channel->cr = AVR32_PDCA_TDIS_MASK; + +} + + +void pdca_enable(unsigned int pdca_ch_number) +{ + // get the correct channel pointer + volatile avr32_pdca_channel_t *pdca_channel = pdca_get_handler(pdca_ch_number); + + // Enable transfer + pdca_channel->cr = AVR32_PDCA_TEN_MASK; +} + + +unsigned int pdca_get_load_size(unsigned int pdca_ch_number) +{ + // get the correct channel pointer + volatile avr32_pdca_channel_t *pdca_channel = pdca_get_handler(pdca_ch_number); + + return pdca_channel->tcr; +} + + +void pdca_load_channel(unsigned int pdca_ch_number, volatile void *addr, unsigned int size) +{ + // get the correct channel pointer + volatile avr32_pdca_channel_t *pdca_channel = pdca_get_handler(pdca_ch_number); + + Bool global_interrupt_enabled = Is_global_interrupt_enabled(); + + if (global_interrupt_enabled) Disable_global_interrupt(); + pdca_channel->mar = (unsigned long)addr; + pdca_channel->tcr = size; + pdca_channel->cr = AVR32_PDCA_ECLR_MASK; + pdca_channel->isr; + if (global_interrupt_enabled) Enable_global_interrupt(); +} + + +unsigned int pdca_get_reload_size(unsigned int pdca_ch_number) +{ + // get the correct channel pointer + volatile avr32_pdca_channel_t *pdca_channel = pdca_get_handler(pdca_ch_number); + + return pdca_channel->tcrr; +} + + +void pdca_reload_channel(unsigned int pdca_ch_number, volatile void *addr, unsigned int size) +{ + // get the correct channel pointer + volatile avr32_pdca_channel_t *pdca_channel = pdca_get_handler(pdca_ch_number); + + Bool global_interrupt_enabled = Is_global_interrupt_enabled(); + + if (global_interrupt_enabled) Disable_global_interrupt(); + // set up next memory address + pdca_channel->marr = (unsigned long)addr; + // set up next memory size + pdca_channel->tcrr = size; + pdca_channel->cr = AVR32_PDCA_ECLR_MASK; + pdca_channel->isr; + if (global_interrupt_enabled) Enable_global_interrupt(); +} + + +void pdca_set_peripheral_select(unsigned int pdca_ch_number, unsigned int pid) +{ + // get the correct channel pointer + volatile avr32_pdca_channel_t *pdca_channel = pdca_get_handler(pdca_ch_number); + + pdca_channel->psr = pid; +} + + +void pdca_set_transfer_size(unsigned int pdca_ch_number, unsigned int transfer_size) +{ + // get the correct channel pointer + volatile avr32_pdca_channel_t *pdca_channel = pdca_get_handler(pdca_ch_number); + + pdca_channel->mr = (pdca_channel->mr & ~AVR32_PDCA_SIZE_MASK) | + transfer_size << AVR32_PDCA_SIZE_OFFSET; +} + + +#if (defined AVR32_PDCA_120_H_INCLUDED ) || (defined AVR32_PDCA_121_H_INCLUDED ) || (defined AVR32_PDCA_122_H_INCLUDED ) + + +void pdca_disable_event_trigger(unsigned int pdca_ch_number) +{ + // get the correct channel pointer + volatile avr32_pdca_channel_t *pdca_channel = pdca_get_handler(pdca_ch_number); + + pdca_channel->mr &= ~AVR32_PDCA_ETRIG_MASK; +} + + +void pdca_enable_event_trigger(unsigned int pdca_ch_number) +{ + // get the correct channel pointer + volatile avr32_pdca_channel_t *pdca_channel = pdca_get_handler(pdca_ch_number); + + pdca_channel->mr |= AVR32_PDCA_ETRIG_MASK; +} + + +#endif // #ifdef AVR32_PDCA_120_H_INCLUDED + + +void pdca_disable_interrupt_transfer_error(unsigned int pdca_ch_number) +{ + // get the correct channel pointer + volatile avr32_pdca_channel_t *pdca_channel = pdca_get_handler(pdca_ch_number); + + Bool global_interrupt_enabled = Is_global_interrupt_enabled(); + + if (global_interrupt_enabled) Disable_global_interrupt(); + pdca_channel->idr = AVR32_PDCA_TERR_MASK; + pdca_channel->isr; + if (global_interrupt_enabled) Enable_global_interrupt(); +} + + +void pdca_enable_interrupt_transfer_error(unsigned int pdca_ch_number) +{ + // get the correct channel pointer + volatile avr32_pdca_channel_t *pdca_channel = pdca_get_handler(pdca_ch_number); + + pdca_channel->ier = AVR32_PDCA_TERR_MASK; +} + + +void pdca_disable_interrupt_transfer_complete(unsigned int pdca_ch_number) +{ + // get the correct channel pointer + volatile avr32_pdca_channel_t *pdca_channel = pdca_get_handler(pdca_ch_number); + + Bool global_interrupt_enabled = Is_global_interrupt_enabled(); + + if (global_interrupt_enabled) Disable_global_interrupt(); + pdca_channel->idr = AVR32_PDCA_TRC_MASK; + pdca_channel->isr; + if (global_interrupt_enabled) Enable_global_interrupt(); +} + + +void pdca_enable_interrupt_transfer_complete(unsigned int pdca_ch_number) +{ + // get the correct channel pointer + volatile avr32_pdca_channel_t *pdca_channel = pdca_get_handler(pdca_ch_number); + + pdca_channel->ier = AVR32_PDCA_TRC_MASK; +} + + +void pdca_disable_interrupt_reload_counter_zero(unsigned int pdca_ch_number) +{ + // get the correct channel pointer + volatile avr32_pdca_channel_t *pdca_channel = pdca_get_handler(pdca_ch_number); + + Bool global_interrupt_enabled = Is_global_interrupt_enabled(); + + if (global_interrupt_enabled) Disable_global_interrupt(); + pdca_channel->idr = AVR32_PDCA_RCZ_MASK; + pdca_channel->isr; + if (global_interrupt_enabled) Enable_global_interrupt(); +} + + +void pdca_enable_interrupt_reload_counter_zero(unsigned int pdca_ch_number) +{ + // get the correct channel pointer + volatile avr32_pdca_channel_t *pdca_channel = pdca_get_handler(pdca_ch_number); + + pdca_channel->ier = AVR32_PDCA_RCZ_MASK; +} + + +unsigned long pdca_get_transfer_status(unsigned int pdca_ch_number) +{ + // get the correct channel pointer + volatile avr32_pdca_channel_t *pdca_channel = pdca_get_handler(pdca_ch_number); + + return pdca_channel->isr; +} diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/PDCA/pdca.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/PDCA/pdca.h new file mode 100644 index 000000000..5668fe997 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/PDCA/pdca.h @@ -0,0 +1,251 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief PDCA driver for AVR32 UC3. + * + * This file defines a useful set of functions for the PDCA interface on AVR32 + * devices. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with a PDCA module. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _PDCA_H_ +#define _PDCA_H_ + +#include + + +//! Size of PDCA transfer: byte. +#define PDCA_TRANSFER_SIZE_BYTE AVR32_PDCA_BYTE + +//! Size of PDCA transfer: half-word. +#define PDCA_TRANSFER_SIZE_HALF_WORD AVR32_PDCA_HALF_WORD + +//! Size of PDCA transfer: word. +#define PDCA_TRANSFER_SIZE_WORD AVR32_PDCA_WORD + +/*! \name PDCA Driver Status Codes + */ +//! @{ +#define PDCA_SUCCESS 0 +#define PDCA_INVALID_ARGUMENT -1 +//! @} + +/*! \name PDCA Transfer Status Codes + */ +//! @{ +#define PDCA_TRANSFER_ERROR AVR32_PDCA_TERR_MASK +#define PDCA_TRANSFER_COMPLETE AVR32_PDCA_TRC_MASK +#define PDCA_TRANSFER_COUNTER_RELOAD_IS_ZERO AVR32_PDCA_RCZ_MASK +//! @} + + +//! PDCA channel options. +typedef struct +{ + //! Memory address. + volatile void *addr ; + //! Transfer counter. + unsigned int size ; + //! Next memory address. + volatile void *r_addr ; + //! Next transfer counter. + unsigned int r_size ; + //! Select peripheral ID. + unsigned int pid ; + //! Select the size of the transfer (byte, half-word or word). + unsigned int transfer_size ; +#if (defined AVR32_PDCA_120_H_INCLUDED ) || (defined AVR32_PDCA_121_H_INCLUDED ) || (defined AVR32_PDCA_122_H_INCLUDED ) +// Note: the options in this preprocessor section are only available from the PDCA IP version 1.2.0 on. + //! Enable (\c 1) or disable (\c 0) the transfer upon event trigger. + unsigned char etrig ; +#endif // #ifdef AVR32_PDCA_120_H_INCLUDED +} pdca_channel_options_t; + + +/*! \brief Get PDCA channel handler + * + * \param pdca_ch_number PDCA channel + * + * \return channel handled or PDCA_INVALID_ARGUMENT + */ +extern volatile avr32_pdca_channel_t *pdca_get_handler(unsigned int pdca_ch_number); + +/*! \brief Set the channel configuration + * + * \param pdca_ch_number PDCA channel + * \param opt channel option + */ +extern int pdca_init_channel(unsigned int pdca_ch_number, const pdca_channel_options_t *opt); + +/*! \brief Get the PDCA channel transfer enable status + * + * \param pdca_ch_number PDCA channel + * + * \return \c 1 if channel transfer is enabled, else \c 0 + */ +extern unsigned int pdca_get_channel_status(unsigned int pdca_ch_number); + +/*! \brief Disable the PDCA for the given channel + * + * \param pdca_ch_number PDCA channel + */ +extern void pdca_disable(unsigned int pdca_ch_number); + +/*! \brief Enable the PDCA for the given channel + * + * \param pdca_ch_number PDCA channel + */ +extern void pdca_enable(unsigned int pdca_ch_number); + +/*! \brief Get PDCA channel load size (or remaining size if transfer started) + * + * \param pdca_ch_number PDCA channel + * + * \return size current size to transfer + */ +extern unsigned int pdca_get_load_size(unsigned int pdca_ch_number); + +/*! \brief Set PDCA channel load values + * + * \param pdca_ch_number PDCA channel + * \param addr address where data to load are stored + * \param size size of the data block to load + */ +extern void pdca_load_channel(unsigned int pdca_ch_number, volatile void *addr, unsigned int size); + +/*! \brief Get PDCA channel reload size + * + * \param pdca_ch_number PDCA channel + * + * \return size current reload size + */ +extern unsigned int pdca_get_reload_size(unsigned int pdca_ch_number); + +/*! \brief Set PDCA channel reload values + * + * \param pdca_ch_number PDCA channel + * \param addr address where data to load are stored + * \param size size of the data block to load + */ +extern void pdca_reload_channel(unsigned int pdca_ch_number, volatile void *addr, unsigned int size); + +/*! \brief Set the peripheral function to use with the PDCA channel + * + * \param pdca_ch_number PDCA channel + * \param pid the peripheral ID + */ +extern void pdca_set_peripheral_select(unsigned int pdca_ch_number, unsigned int pid); + +/*! \brief Set the size of the transfer + * + * \param pdca_ch_number PDCA channel + * \param transfer_size size of the transfer (byte, half-word or word) + */ +extern void pdca_set_transfer_size(unsigned int pdca_ch_number, unsigned int transfer_size); + +#if (defined AVR32_PDCA_120_H_INCLUDED ) || (defined AVR32_PDCA_121_H_INCLUDED ) || (defined AVR32_PDCA_122_H_INCLUDED ) +// Note: the functions in this preprocessor section are only available from the PDCA IP version 1.2.0 on. + +/*! \brief Disable the event-triggered transfer feature + * + * \param pdca_ch_number PDCA channel + */ +extern void pdca_disable_event_trigger(unsigned int pdca_ch_number); + +/*! \brief Enable the event-triggered transfer feature + * + * \param pdca_ch_number PDCA channel + */ +extern void pdca_enable_event_trigger(unsigned int pdca_ch_number); + +#endif // #ifdef AVR32_PDCA_120_H_INCLUDED + +/*! \brief Disable PDCA transfer error interrupt + * + * \param pdca_ch_number PDCA channel + */ +extern void pdca_disable_interrupt_transfer_error(unsigned int pdca_ch_number); + +/*! \brief Enable PDCA transfer error interrupt + * + * \param pdca_ch_number PDCA channel + */ +extern void pdca_enable_interrupt_transfer_error(unsigned int pdca_ch_number); + +/*! \brief Disable PDCA transfer interrupt when completed (ie TCR and TCRR are both zero) + * + * \param pdca_ch_number PDCA channel + */ +extern void pdca_disable_interrupt_transfer_complete(unsigned int pdca_ch_number); + +/*! \brief Enable PDCA transfer interrupt when completed (ie TCR and TCRR are both zero) + * + * \param pdca_ch_number PDCA channel + */ +extern void pdca_enable_interrupt_transfer_complete(unsigned int pdca_ch_number); + +/*! \brief Disable PDCA transfer interrupt when TCRR reaches zero + * + * \param pdca_ch_number PDCA channel + */ +extern void pdca_disable_interrupt_reload_counter_zero(unsigned int pdca_ch_number); + +/*! \brief Enable PDCA transfer interrupt when TCRR reaches zero + * + * \param pdca_ch_number PDCA channel + */ +extern void pdca_enable_interrupt_reload_counter_zero(unsigned int pdca_ch_number); + +/*! \brief Get PDCA channel transfer status + * + * \param pdca_ch_number PDCA channel + * + * \return PDCA transfer status with the following bit-masks:\n + * - \c PDCA_TRANSFER_ERROR;\n + * - \c PDCA_TRANSFER_COMPLETE;\n + * - \c PDCA_TRANSFER_COUNTER_RELOAD_IS_ZERO. + */ +extern unsigned long pdca_get_transfer_status(unsigned int pdca_ch_number); + + +#endif // _PDCA_H_ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/pm.c b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/pm.c new file mode 100644 index 000000000..76d9268b4 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/pm.c @@ -0,0 +1,546 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file has been prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Power Manager driver. + * + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + *****************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#include "compiler.h" +#include "pm.h" + + +/*! \name PM Writable Bit-Field Registers + */ +//! @{ + +typedef union +{ + unsigned long mcctrl; + avr32_pm_mcctrl_t MCCTRL; +} u_avr32_pm_mcctrl_t; + +typedef union +{ + unsigned long cksel; + avr32_pm_cksel_t CKSEL; +} u_avr32_pm_cksel_t; + +typedef union +{ + unsigned long pll; + avr32_pm_pll_t PLL; +} u_avr32_pm_pll_t; + +typedef union +{ + unsigned long oscctrl0; + avr32_pm_oscctrl0_t OSCCTRL0; +} u_avr32_pm_oscctrl0_t; + +typedef union +{ + unsigned long oscctrl1; + avr32_pm_oscctrl1_t OSCCTRL1; +} u_avr32_pm_oscctrl1_t; + +typedef union +{ + unsigned long oscctrl32; + avr32_pm_oscctrl32_t OSCCTRL32; +} u_avr32_pm_oscctrl32_t; + +typedef union +{ + unsigned long ier; + avr32_pm_ier_t IER; +} u_avr32_pm_ier_t; + +typedef union +{ + unsigned long idr; + avr32_pm_idr_t IDR; +} u_avr32_pm_idr_t; + +typedef union +{ + unsigned long icr; + avr32_pm_icr_t ICR; +} u_avr32_pm_icr_t; + +typedef union +{ + unsigned long gcctrl; + avr32_pm_gcctrl_t GCCTRL; +} u_avr32_pm_gcctrl_t; + +typedef union +{ + unsigned long rccr; + avr32_pm_rccr_t RCCR; +} u_avr32_pm_rccr_t; + +typedef union +{ + unsigned long bgcr; + avr32_pm_bgcr_t BGCR; +} u_avr32_pm_bgcr_t; + +typedef union +{ + unsigned long vregcr; + avr32_pm_vregcr_t VREGCR; +} u_avr32_pm_vregcr_t; + +typedef union +{ + unsigned long bod; + avr32_pm_bod_t BOD; +} u_avr32_pm_bod_t; + +//! @} + + +/*! \brief Sets the mode of the oscillator 0. + * + * \param pm Base address of the Power Manager (i.e. &AVR32_PM). + * \param mode Oscillator 0 mode (i.e. AVR32_PM_OSCCTRL0_MODE_x). + */ +static void pm_set_osc0_mode(volatile avr32_pm_t *pm, unsigned int mode) +{ + // Read + u_avr32_pm_oscctrl0_t u_avr32_pm_oscctrl0 = {pm->oscctrl0}; + // Modify + u_avr32_pm_oscctrl0.OSCCTRL0.mode = mode; + // Write + pm->oscctrl0 = u_avr32_pm_oscctrl0.oscctrl0; +} + + +void pm_enable_osc0_ext_clock(volatile avr32_pm_t *pm) +{ + pm_set_osc0_mode(pm, AVR32_PM_OSCCTRL0_MODE_EXT_CLOCK); +} + + +void pm_enable_osc0_crystal(volatile avr32_pm_t *pm, unsigned int fosc0) +{ + pm_set_osc0_mode(pm, (fosc0 < 900000) ? AVR32_PM_OSCCTRL0_MODE_CRYSTAL_G0 : + (fosc0 < 3000000) ? AVR32_PM_OSCCTRL0_MODE_CRYSTAL_G1 : + (fosc0 < 8000000) ? AVR32_PM_OSCCTRL0_MODE_CRYSTAL_G2 : + AVR32_PM_OSCCTRL0_MODE_CRYSTAL_G3); +} + + +void pm_enable_clk0(volatile avr32_pm_t *pm, unsigned int startup) +{ + pm_enable_clk0_no_wait(pm, startup); + pm_wait_for_clk0_ready(pm); +} + + +void pm_disable_clk0(volatile avr32_pm_t *pm) +{ + pm->mcctrl &= ~AVR32_PM_MCCTRL_OSC0EN_MASK; +} + + +void pm_enable_clk0_no_wait(volatile avr32_pm_t *pm, unsigned int startup) +{ + // Read register + u_avr32_pm_oscctrl0_t u_avr32_pm_oscctrl0 = {pm->oscctrl0}; + // Modify + u_avr32_pm_oscctrl0.OSCCTRL0.startup = startup; + // Write back + pm->oscctrl0 = u_avr32_pm_oscctrl0.oscctrl0; + + pm->mcctrl |= AVR32_PM_MCCTRL_OSC0EN_MASK; +} + + +void pm_wait_for_clk0_ready(volatile avr32_pm_t *pm) +{ + while (!(pm->poscsr & AVR32_PM_POSCSR_OSC0RDY_MASK)); +} + + +/*! \brief Sets the mode of the oscillator 1. + * + * \param pm Base address of the Power Manager (i.e. &AVR32_PM). + * \param mode Oscillator 1 mode (i.e. AVR32_PM_OSCCTRL1_MODE_x). + */ +static void pm_set_osc1_mode(volatile avr32_pm_t *pm, unsigned int mode) +{ + // Read + u_avr32_pm_oscctrl1_t u_avr32_pm_oscctrl1 = {pm->oscctrl1}; + // Modify + u_avr32_pm_oscctrl1.OSCCTRL1.mode = mode; + // Write + pm->oscctrl1 = u_avr32_pm_oscctrl1.oscctrl1; +} + + +void pm_enable_osc1_ext_clock(volatile avr32_pm_t *pm) +{ + pm_set_osc1_mode(pm, AVR32_PM_OSCCTRL1_MODE_EXT_CLOCK); +} + + +void pm_enable_osc1_crystal(volatile avr32_pm_t *pm, unsigned int fosc1) +{ + pm_set_osc1_mode(pm, (fosc1 < 900000) ? AVR32_PM_OSCCTRL1_MODE_CRYSTAL_G0 : + (fosc1 < 3000000) ? AVR32_PM_OSCCTRL1_MODE_CRYSTAL_G1 : + (fosc1 < 8000000) ? AVR32_PM_OSCCTRL1_MODE_CRYSTAL_G2 : + AVR32_PM_OSCCTRL1_MODE_CRYSTAL_G3); +} + + +void pm_enable_clk1(volatile avr32_pm_t *pm, unsigned int startup) +{ + pm_enable_clk1_no_wait(pm, startup); + pm_wait_for_clk1_ready(pm); +} + + +void pm_disable_clk1(volatile avr32_pm_t *pm) +{ + pm->mcctrl &= ~AVR32_PM_MCCTRL_OSC1EN_MASK; +} + + +void pm_enable_clk1_no_wait(volatile avr32_pm_t *pm, unsigned int startup) +{ + // Read register + u_avr32_pm_oscctrl1_t u_avr32_pm_oscctrl1 = {pm->oscctrl1}; + // Modify + u_avr32_pm_oscctrl1.OSCCTRL1.startup = startup; + // Write back + pm->oscctrl1 = u_avr32_pm_oscctrl1.oscctrl1; + + pm->mcctrl |= AVR32_PM_MCCTRL_OSC1EN_MASK; +} + + +void pm_wait_for_clk1_ready(volatile avr32_pm_t *pm) +{ + while (!(pm->poscsr & AVR32_PM_POSCSR_OSC1RDY_MASK)); +} + + +/*! \brief Sets the mode of the 32-kHz oscillator. + * + * \param pm Base address of the Power Manager (i.e. &AVR32_PM). + * \param mode 32-kHz oscillator mode (i.e. AVR32_PM_OSCCTRL32_MODE_x). + */ +static void pm_set_osc32_mode(volatile avr32_pm_t *pm, unsigned int mode) +{ + // Read + u_avr32_pm_oscctrl32_t u_avr32_pm_oscctrl32 = {pm->oscctrl32}; + // Modify + u_avr32_pm_oscctrl32.OSCCTRL32.mode = mode; + // Write + pm->oscctrl32 = u_avr32_pm_oscctrl32.oscctrl32; +} + + +void pm_enable_osc32_ext_clock(volatile avr32_pm_t *pm) +{ + pm_set_osc32_mode(pm, AVR32_PM_OSCCTRL32_MODE_EXT_CLOCK); +} + + +void pm_enable_osc32_crystal(volatile avr32_pm_t *pm) +{ + pm_set_osc32_mode(pm, AVR32_PM_OSCCTRL32_MODE_CRYSTAL); +} + + +void pm_enable_clk32(volatile avr32_pm_t *pm, unsigned int startup) +{ + pm_enable_clk32_no_wait(pm, startup); + pm_wait_for_clk32_ready(pm); +} + + +void pm_disable_clk32(volatile avr32_pm_t *pm) +{ + pm->oscctrl32 &= ~AVR32_PM_OSCCTRL32_OSC32EN_MASK; +} + + +void pm_enable_clk32_no_wait(volatile avr32_pm_t *pm, unsigned int startup) +{ + // Read register + u_avr32_pm_oscctrl32_t u_avr32_pm_oscctrl32 = {pm->oscctrl32}; + // Modify + u_avr32_pm_oscctrl32.OSCCTRL32.osc32en = 1; + u_avr32_pm_oscctrl32.OSCCTRL32.startup = startup; + // Write back + pm->oscctrl32 = u_avr32_pm_oscctrl32.oscctrl32; +} + + +void pm_wait_for_clk32_ready(volatile avr32_pm_t *pm) +{ + while (!(pm->poscsr & AVR32_PM_POSCSR_OSC32RDY_MASK)); +} + + +void pm_cksel(volatile avr32_pm_t *pm, + unsigned int pbadiv, + unsigned int pbasel, + unsigned int pbbdiv, + unsigned int pbbsel, + unsigned int hsbdiv, + unsigned int hsbsel) +{ + u_avr32_pm_cksel_t u_avr32_pm_cksel = {0}; + + u_avr32_pm_cksel.CKSEL.cpusel = hsbsel; + u_avr32_pm_cksel.CKSEL.cpudiv = hsbdiv; + u_avr32_pm_cksel.CKSEL.hsbsel = hsbsel; + u_avr32_pm_cksel.CKSEL.hsbdiv = hsbdiv; + u_avr32_pm_cksel.CKSEL.pbasel = pbasel; + u_avr32_pm_cksel.CKSEL.pbadiv = pbadiv; + u_avr32_pm_cksel.CKSEL.pbbsel = pbbsel; + u_avr32_pm_cksel.CKSEL.pbbdiv = pbbdiv; + + pm->cksel = u_avr32_pm_cksel.cksel; + + // Wait for ckrdy bit and then clear it + while (!(pm->poscsr & AVR32_PM_POSCSR_CKRDY_MASK)); +} + + +void pm_gc_setup(volatile avr32_pm_t *pm, + unsigned int gc, + unsigned int osc_or_pll, // Use Osc (=0) or PLL (=1) + unsigned int pll_osc, // Sel Osc0/PLL0 or Osc1/PLL1 + unsigned int diven, + unsigned int div) +{ + u_avr32_pm_gcctrl_t u_avr32_pm_gcctrl = {0}; + + u_avr32_pm_gcctrl.GCCTRL.oscsel = pll_osc; + u_avr32_pm_gcctrl.GCCTRL.pllsel = osc_or_pll; + u_avr32_pm_gcctrl.GCCTRL.diven = diven; + u_avr32_pm_gcctrl.GCCTRL.div = div; + + pm->gcctrl[gc] = u_avr32_pm_gcctrl.gcctrl; +} + + +void pm_gc_enable(volatile avr32_pm_t *pm, + unsigned int gc) +{ + pm->gcctrl[gc] |= AVR32_PM_GCCTRL_CEN_MASK; +} + + +void pm_gc_disable(volatile avr32_pm_t *pm, + unsigned int gc) +{ + pm->gcctrl[gc] &= ~AVR32_PM_GCCTRL_CEN_MASK; +} + + +void pm_pll_setup(volatile avr32_pm_t *pm, + unsigned int pll, + unsigned int mul, + unsigned int div, + unsigned int osc, + unsigned int lockcount) +{ + u_avr32_pm_pll_t u_avr32_pm_pll = {0}; + + u_avr32_pm_pll.PLL.pllosc = osc; + u_avr32_pm_pll.PLL.plldiv = div; + u_avr32_pm_pll.PLL.pllmul = mul; + u_avr32_pm_pll.PLL.pllcount = lockcount; + + pm->pll[pll] = u_avr32_pm_pll.pll; +} + + +void pm_pll_set_option(volatile avr32_pm_t *pm, + unsigned int pll, + unsigned int pll_freq, + unsigned int pll_div2, + unsigned int pll_wbwdisable) +{ + u_avr32_pm_pll_t u_avr32_pm_pll = {pm->pll[pll]}; + u_avr32_pm_pll.PLL.pllopt = pll_freq | (pll_div2 << 1) | (pll_wbwdisable << 2); + pm->pll[pll] = u_avr32_pm_pll.pll; +} + + +unsigned int pm_pll_get_option(volatile avr32_pm_t *pm, + unsigned int pll) +{ + return (pm->pll[pll] & AVR32_PM_PLLOPT_MASK) >> AVR32_PM_PLLOPT_OFFSET; +} + + +void pm_pll_enable(volatile avr32_pm_t *pm, + unsigned int pll) +{ + pm->pll[pll] |= AVR32_PM_PLLEN_MASK; +} + + +void pm_pll_disable(volatile avr32_pm_t *pm, + unsigned int pll) +{ + pm->pll[pll] &= ~AVR32_PM_PLLEN_MASK; +} + + +void pm_wait_for_pll0_locked(volatile avr32_pm_t *pm) +{ + while (!(pm->poscsr & AVR32_PM_POSCSR_LOCK0_MASK)); +} + + +void pm_wait_for_pll1_locked(volatile avr32_pm_t *pm) +{ + while (!(pm->poscsr & AVR32_PM_POSCSR_LOCK1_MASK)); +} + + +void pm_switch_to_clock(volatile avr32_pm_t *pm, unsigned long clock) +{ + // Read + u_avr32_pm_mcctrl_t u_avr32_pm_mcctrl = {pm->mcctrl}; + // Modify + u_avr32_pm_mcctrl.MCCTRL.mcsel = clock; + // Write back + pm->mcctrl = u_avr32_pm_mcctrl.mcctrl; +} + + +void pm_switch_to_osc0(volatile avr32_pm_t *pm, unsigned int fosc0, unsigned int startup) +{ + pm_enable_osc0_crystal(pm, fosc0); // Enable the Osc0 in crystal mode + pm_enable_clk0(pm, startup); // Crystal startup time - This parameter is critical and depends on the characteristics of the crystal + pm_switch_to_clock(pm, AVR32_PM_MCSEL_OSC0); // Then switch main clock to Osc0 +} + + +void pm_bod_enable_irq(volatile avr32_pm_t *pm) +{ + pm->ier = AVR32_PM_IER_BODDET_MASK; +} + + +void pm_bod_disable_irq(volatile avr32_pm_t *pm) +{ + Bool global_interrupt_enabled = Is_global_interrupt_enabled(); + + if (global_interrupt_enabled) Disable_global_interrupt(); + pm->idr = AVR32_PM_IDR_BODDET_MASK; + pm->isr; + if (global_interrupt_enabled) Enable_global_interrupt(); +} + + +void pm_bod_clear_irq(volatile avr32_pm_t *pm) +{ + pm->icr = AVR32_PM_ICR_BODDET_MASK; +} + + +unsigned long pm_bod_get_irq_status(volatile avr32_pm_t *pm) +{ + return ((pm->isr & AVR32_PM_ISR_BODDET_MASK) != 0); +} + + +unsigned long pm_bod_get_irq_enable_bit(volatile avr32_pm_t *pm) +{ + return ((pm->imr & AVR32_PM_IMR_BODDET_MASK) != 0); +} + + +unsigned long pm_bod_get_level(volatile avr32_pm_t *pm) +{ + return (pm->bod & AVR32_PM_BOD_LEVEL_MASK) >> AVR32_PM_BOD_LEVEL_OFFSET; +} + + +unsigned long pm_read_gplp(volatile avr32_pm_t *pm, unsigned long gplp) +{ + return pm->gplp[gplp]; +} + + +void pm_write_gplp(volatile avr32_pm_t *pm, unsigned long gplp, unsigned long value) +{ + pm->gplp[gplp] = value; +} + + +long pm_enable_module(volatile avr32_pm_t *pm, unsigned long module) +{ + unsigned long domain = module>>5; + unsigned long *regptr = (unsigned long*)(&(pm->cpumask) + domain); + + // Implementation-specific shortcut: the ckMASK registers are contiguous and + // memory-mapped in that order: CPUMASK, HSBMASK, PBAMASK, PBBMASK. + + *regptr |= (1<<(module%32)); + + return PASS; +} + +long pm_disable_module(volatile avr32_pm_t *pm, unsigned long module) +{ + unsigned long domain = module>>5; + unsigned long *regptr = (unsigned long*)(&(pm->cpumask) + domain); + + // Implementation-specific shortcut: the ckMASK registers are contiguous and + // memory-mapped in that order: CPUMASK, HSBMASK, PBAMASK, PBBMASK. + + *regptr &= ~(1<<(module%32)); + + return PASS; +} diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/pm.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/pm.h new file mode 100644 index 000000000..ca679f734 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/pm.h @@ -0,0 +1,493 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file has been prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Power Manager driver. + * + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + *****************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _PM_H_ +#define _PM_H_ + +#include +#include "compiler.h" +#include "preprocessor.h" + + +/*! \brief Sets the MCU in the specified sleep mode. + * + * \param mode Sleep mode: + * \arg \c AVR32_PM_SMODE_IDLE: Idle; + * \arg \c AVR32_PM_SMODE_FROZEN: Frozen; + * \arg \c AVR32_PM_SMODE_STANDBY: Standby; + * \arg \c AVR32_PM_SMODE_STOP: Stop; + * \arg \c AVR32_PM_SMODE_DEEP_STOP: DeepStop; + * \arg \c AVR32_PM_SMODE_STATIC: Static. + */ +#define SLEEP(mode) {__asm__ __volatile__ ("sleep "STRINGZ(mode));} + + +//! Input and output parameters when initializing PM clocks using pm_configure_clocks(). +typedef struct +{ + //! CPU frequency (input/output argument). + unsigned long cpu_f; + + //! PBA frequency (input/output argument). + unsigned long pba_f; + + //! Oscillator 0's external crystal(or external clock) frequency (board dependant) (input argument). + unsigned long osc0_f; + + //! Oscillator 0's external crystal(or external clock) startup time: AVR32_PM_OSCCTRL0_STARTUP_x_RCOSC (input argument). + unsigned long osc0_startup; +} pm_freq_param_t; + +#define PM_FREQ_STATUS_FAIL (-1) +#define PM_FREQ_STATUS_OK (0) + + +/*! \brief Gets the MCU reset cause. + * + * \param pm Base address of the Power Manager instance (i.e. &AVR32_PM). + * + * \return The MCU reset cause which can be masked with the + * \c AVR32_PM_RCAUSE_x_MASK bit-masks to isolate specific causes. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ unsigned int pm_get_reset_cause(volatile avr32_pm_t *pm) +{ + return pm->rcause; +} + + +/*! + * \brief This function will enable the external clock mode of the oscillator 0. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + */ +extern void pm_enable_osc0_ext_clock(volatile avr32_pm_t *pm); + + +/*! + * \brief This function will enable the crystal mode of the oscillator 0. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param fosc0 Oscillator 0 crystal frequency (Hz) + */ +extern void pm_enable_osc0_crystal(volatile avr32_pm_t *pm, unsigned int fosc0); + + +/*! + * \brief This function will enable the oscillator 0 to be used with a startup time. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param startup Clock 0 startup time. AVR32_PM_OSCCTRL0_STARTUP_x_RCOSC. + */ +extern void pm_enable_clk0(volatile avr32_pm_t *pm, unsigned int startup); + + +/*! + * \brief This function will disable the oscillator 0. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + */ +extern void pm_disable_clk0(volatile avr32_pm_t *pm); + + +/*! + * \brief This function will enable the oscillator 0 to be used with no startup time. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param startup Clock 0 startup time, for which the function does not wait. AVR32_PM_OSCCTRL0_STARTUP_x_RCOSC. + */ +extern void pm_enable_clk0_no_wait(volatile avr32_pm_t *pm, unsigned int startup); + + +/*! + * \brief This function will wait until the Osc0 clock is ready. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + */ +extern void pm_wait_for_clk0_ready(volatile avr32_pm_t *pm); + + +/*! + * \brief This function will enable the external clock mode of the oscillator 1. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + */ +extern void pm_enable_osc1_ext_clock(volatile avr32_pm_t *pm); + + +/*! + * \brief This function will enable the crystal mode of the oscillator 1. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param fosc1 Oscillator 1 crystal frequency (Hz) + */ +extern void pm_enable_osc1_crystal(volatile avr32_pm_t *pm, unsigned int fosc1); + + +/*! + * \brief This function will enable the oscillator 1 to be used with a startup time. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param startup Clock 1 startup time. AVR32_PM_OSCCTRL1_STARTUP_x_RCOSC. + */ +extern void pm_enable_clk1(volatile avr32_pm_t *pm, unsigned int startup); + + +/*! + * \brief This function will disable the oscillator 1. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + */ +extern void pm_disable_clk1(volatile avr32_pm_t *pm); + + +/*! + * \brief This function will enable the oscillator 1 to be used with no startup time. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param startup Clock 1 startup time, for which the function does not wait. AVR32_PM_OSCCTRL1_STARTUP_x_RCOSC. + */ +extern void pm_enable_clk1_no_wait(volatile avr32_pm_t *pm, unsigned int startup); + + +/*! + * \brief This function will wait until the Osc1 clock is ready. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + */ +extern void pm_wait_for_clk1_ready(volatile avr32_pm_t *pm); + + +/*! + * \brief This function will enable the external clock mode of the 32-kHz oscillator. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + */ +extern void pm_enable_osc32_ext_clock(volatile avr32_pm_t *pm); + + +/*! + * \brief This function will enable the crystal mode of the 32-kHz oscillator. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + */ +extern void pm_enable_osc32_crystal(volatile avr32_pm_t *pm); + + +/*! + * \brief This function will enable the oscillator 32 to be used with a startup time. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param startup Clock 32 kHz startup time. AVR32_PM_OSCCTRL32_STARTUP_x_RCOSC. + */ +extern void pm_enable_clk32(volatile avr32_pm_t *pm, unsigned int startup); + + +/*! + * \brief This function will disable the oscillator 32. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + */ +extern void pm_disable_clk32(volatile avr32_pm_t *pm); + + +/*! + * \brief This function will enable the oscillator 32 to be used with no startup time. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param startup Clock 32 kHz startup time, for which the function does not wait. AVR32_PM_OSCCTRL32_STARTUP_x_RCOSC. + */ +extern void pm_enable_clk32_no_wait(volatile avr32_pm_t *pm, unsigned int startup); + + +/*! + * \brief This function will wait until the osc32 clock is ready. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + */ +extern void pm_wait_for_clk32_ready(volatile avr32_pm_t *pm); + + +/*! + * \brief This function will select all the power manager clocks. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param pbadiv Peripheral Bus A clock divisor enable + * \param pbasel Peripheral Bus A select + * \param pbbdiv Peripheral Bus B clock divisor enable + * \param pbbsel Peripheral Bus B select + * \param hsbdiv High Speed Bus clock divisor enable (CPU clock = HSB clock) + * \param hsbsel High Speed Bus select (CPU clock = HSB clock ) + */ +extern void pm_cksel(volatile avr32_pm_t *pm, unsigned int pbadiv, unsigned int pbasel, unsigned int pbbdiv, unsigned int pbbsel, unsigned int hsbdiv, unsigned int hsbsel); + + +/*! + * \brief This function will setup a generic clock. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param gc generic clock number (0 for gc0...) + * \param osc_or_pll Use OSC (=0) or PLL (=1) + * \param pll_osc Select Osc0/PLL0 or Osc1/PLL1 + * \param diven Generic clock divisor enable + * \param div Generic clock divisor + */ +extern void pm_gc_setup(volatile avr32_pm_t *pm, unsigned int gc, unsigned int osc_or_pll, unsigned int pll_osc, unsigned int diven, unsigned int div); + + +/*! + * \brief This function will enable a generic clock. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param gc generic clock number (0 for gc0...) + */ +extern void pm_gc_enable(volatile avr32_pm_t *pm, unsigned int gc); + + +/*! + * \brief This function will disable a generic clock. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param gc generic clock number (0 for gc0...) + */ +extern void pm_gc_disable(volatile avr32_pm_t *pm, unsigned int gc); + + +/*! + * \brief This function will setup a PLL. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param pll PLL number(0 for PLL0, 1 for PLL1) + * \param mul PLL MUL in the PLL formula + * \param div PLL DIV in the PLL formula + * \param osc OSC number (0 for osc0, 1 for osc1) + * \param lockcount PLL lockount + */ +extern void pm_pll_setup(volatile avr32_pm_t *pm, unsigned int pll, unsigned int mul, unsigned int div, unsigned int osc, unsigned int lockcount); + + +/*! + * \brief This function will set a PLL option. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param pll PLL number(0 for PLL0, 1 for PLL1) + * \param pll_freq Set to 1 for VCO frequency range 80-180MHz, set to 0 for VCO frequency range 160-240Mhz. + * \param pll_div2 Divide the PLL output frequency by 2 (this settings does not change the FVCO value) + * \param pll_wbwdisable 1 Disable the Wide-Bandith Mode (Wide-Bandwith mode allow a faster startup time and out-of-lock time). 0 to enable the Wide-Bandith Mode. + */ +extern void pm_pll_set_option(volatile avr32_pm_t *pm, unsigned int pll, unsigned int pll_freq, unsigned int pll_div2, unsigned int pll_wbwdisable); + + +/*! + * \brief This function will get a PLL option. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param pll PLL number(0 for PLL0, 1 for PLL1) + * \return Option + */ +extern unsigned int pm_pll_get_option(volatile avr32_pm_t *pm, unsigned int pll); + + +/*! + * \brief This function will enable a PLL. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param pll PLL number(0 for PLL0, 1 for PLL1) + */ +extern void pm_pll_enable(volatile avr32_pm_t *pm, unsigned int pll); + + +/*! + * \brief This function will disable a PLL. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param pll PLL number(0 for PLL0, 1 for PLL1) + */ +extern void pm_pll_disable(volatile avr32_pm_t *pm, unsigned int pll); + + +/*! + * \brief This function will wait for PLL0 locked + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + */ +extern void pm_wait_for_pll0_locked(volatile avr32_pm_t *pm); + + +/*! + * \brief This function will wait for PLL1 locked + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + */ +extern void pm_wait_for_pll1_locked(volatile avr32_pm_t *pm); + + +/*! + * \brief This function will switch the power manager main clock. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param clock Clock to be switched on. AVR32_PM_MCSEL_SLOW for RCOsc, AVR32_PM_MCSEL_OSC0 for Osc0, AVR32_PM_MCSEL_PLL0 for PLL0. + */ +extern void pm_switch_to_clock(volatile avr32_pm_t *pm, unsigned long clock); + + +/*! + * \brief Switch main clock to clock Osc0 (crystal mode) + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param fosc0 Oscillator 0 crystal frequency (Hz) + * \param startup Crystal 0 startup time. AVR32_PM_OSCCTRL0_STARTUP_x_RCOSC. + */ +extern void pm_switch_to_osc0(volatile avr32_pm_t *pm, unsigned int fosc0, unsigned int startup); + + +/*! \brief Enables the Brown-Out Detector interrupt. + * + * \param pm Base address of the Power Manager (i.e. &AVR32_PM). + */ +extern void pm_bod_enable_irq(volatile avr32_pm_t *pm); + + +/*! \brief Disables the Brown-Out Detector interrupt. + * + * \param pm Base address of the Power Manager (i.e. &AVR32_PM). + */ +extern void pm_bod_disable_irq(volatile avr32_pm_t *pm); + + +/*! \brief Clears the Brown-Out Detector interrupt flag. + * + * \param pm Base address of the Power Manager (i.e. &AVR32_PM). + */ +extern void pm_bod_clear_irq(volatile avr32_pm_t *pm); + + +/*! \brief Gets the Brown-Out Detector interrupt flag. + * + * \param pm Base address of the Power Manager (i.e. &AVR32_PM). + * + * \retval 0 No BOD interrupt. + * \retval 1 BOD interrupt pending. + */ +extern unsigned long pm_bod_get_irq_status(volatile avr32_pm_t *pm); + + +/*! \brief Gets the Brown-Out Detector interrupt enable status. + * + * \param pm Base address of the Power Manager (i.e. &AVR32_PM). + * + * \retval 0 BOD interrupt disabled. + * \retval 1 BOD interrupt enabled. + */ +extern unsigned long pm_bod_get_irq_enable_bit(volatile avr32_pm_t *pm); + + +/*! \brief Gets the triggering threshold of the Brown-Out Detector. + * + * \param pm Base address of the Power Manager (i.e. &AVR32_PM). + * + * \return Triggering threshold of the BOD. See the electrical characteristics + * in the part datasheet for actual voltage levels. + */ +extern unsigned long pm_bod_get_level(volatile avr32_pm_t *pm); + + +/*! + * \brief Read the content of the PM GPLP registers + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param gplp GPLP register index (0,1,... depending on the number of GPLP registers for a given part) + * + * \return The content of the chosen GPLP register. + */ +extern unsigned long pm_read_gplp(volatile avr32_pm_t *pm, unsigned long gplp); + + +/*! + * \brief Write into the PM GPLP registers + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param gplp GPLP register index (0,1,... depending on the number of GPLP registers for a given part) + * \param value Value to write + */ +extern void pm_write_gplp(volatile avr32_pm_t *pm, unsigned long gplp, unsigned long value); + + +/*! \brief Enable the clock of a module. + * + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param module The module to clock (use one of the defines in the part-specific + * header file under "toolchain folder"/avr32/inc(lude)/avr32/; depending on the + * clock domain, look for the sections "CPU clocks", "HSB clocks", "PBx clocks") + * + * \return Status. + * \retval 0 Success. + * \retval <0 An error occured. + */ +extern long pm_enable_module(volatile avr32_pm_t *pm, unsigned long module); + +/*! \brief Disable the clock of a module. + * + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param module The module to shut down (use one of the defines in the part-specific + * header file under "toolchain folder"/avr32/inc(lude)/avr32/; depending on the + * clock domain, look for the sections "CPU clocks", "HSB clocks", "PBx clocks") + * + * \return Status. + * \retval 0 Success. + * \retval <0 An error occured. + */ +extern long pm_disable_module(volatile avr32_pm_t *pm, unsigned long module); + + + +/*! \brief Automatically configure the CPU, PBA, PBB, and HSB clocks + * according to the user wishes. + * + * This function needs some parameters stored in a pm_freq_param_t structure: + * - cpu_f and pba_f are the wanted frequencies, + * - osc0_f is the oscillator 0 on-board frequency (e.g. FOSC0), + * - osc0_startup is the oscillator 0 startup time (e.g. OSC0_STARTUP). + * + * The function will then configure the clocks using the following rules: + * - It first try to find a valid PLL frequency (the highest possible value to avoid jitter) in order + * to satisfy the CPU frequency, + * - It optimizes the configuration depending the various divide stages, + * - Then, the PBA frequency is configured from the CPU freq. + * - Note that HSB and PBB are configured with the same frequency as CPU. + * - Note also that the number of wait states of the flash read accesses is automatically set-up depending + * the CPU frequency. As a consequence, the application needs the FLASHC driver to compile. + * + * The CPU, HSB and PBA frequencies programmed after configuration are stored back into cpu_f and pba_f. + * + * \param param pointer on the configuration structure. + * + * \retval PM_FREQ_STATUS_OK Mode successfully initialized. + * \retval PM_FREQ_STATUS_FAIL The configuration can not be done. + */ +extern int pm_configure_clocks(pm_freq_param_t *param); + + +/*! \brief Automatically configure the USB clock. + * + * USB clock is configured to 48MHz, using the PLL1 from the Oscillator0, assuming + * a 12 MHz crystal is connected to it. + */ +extern void pm_configure_usb_clock(void); + + +#endif // _PM_H_ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/pm_conf_clocks.c b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/pm_conf_clocks.c new file mode 100644 index 000000000..8beb83b20 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/pm_conf_clocks.c @@ -0,0 +1,268 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file has been prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Power Manager clocks configuration helper. + * + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + *****************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#include +#include "compiler.h" +#include "pm.h" + +extern void flashc_set_wait_state(unsigned int wait_state); +#if (defined AVR32_FLASHC_210_H_INCLUDED) +extern void flashc_issue_command(unsigned int command, int page_number); +#endif + + +#define PM_MAX_MUL ((1 << AVR32_PM_PLL0_PLLMUL_SIZE) - 1) + + +int pm_configure_clocks(pm_freq_param_t *param) +{ + // Supported frequencies: + // Fosc0 mul div PLL div2_en cpu_f pba_f Comment + // 12 15 1 192 1 12 12 + // 12 9 3 40 1 20 20 PLL out of spec + // 12 15 1 192 1 24 12 + // 12 9 1 120 1 30 15 + // 12 9 3 40 0 40 20 PLL out of spec + // 12 15 1 192 1 48 12 + // 12 15 1 192 1 48 24 + // 12 8 1 108 1 54 27 + // 12 9 1 120 1 60 15 + // 12 9 1 120 1 60 30 + // 12 10 1 132 1 66 16.5 + // + unsigned long in_cpu_f = param->cpu_f; + unsigned long in_osc0_f = param->osc0_f; + unsigned long mul, div, div2_en = 0, div2_cpu = 0, div2_pba = 0; + unsigned long pll_freq, rest; + Bool b_div2_pba, b_div2_cpu; + + // Switch to external Oscillator 0 + pm_switch_to_osc0(&AVR32_PM, in_osc0_f, param->osc0_startup); + + // Start with CPU freq config + if (in_cpu_f == in_osc0_f) + { + param->cpu_f = in_osc0_f; + param->pba_f = in_osc0_f; + return PM_FREQ_STATUS_OK; + } + else if (in_cpu_f < in_osc0_f) + { + // TBD + } + + rest = in_cpu_f % in_osc0_f; + + for (div = 1; div < 32; div++) + { + if ((div * rest) % in_osc0_f == 0) + break; + } + if (div == 32) + return PM_FREQ_STATUS_FAIL; + + mul = (in_cpu_f * div) / in_osc0_f; + + if (mul > PM_MAX_MUL) + return PM_FREQ_STATUS_FAIL; + + // export 2power from PLL div to div2_cpu + while (!(div % 2)) + { + div /= 2; + div2_cpu++; + } + + // Here we know the mul and div parameter of the PLL config. + // . Check out if the PLL has a valid in_cpu_f. + // . Try to have for the PLL frequency (VCO output) the highest possible value + // to reduce jitter. + while (in_osc0_f * 2 * mul / div < AVR32_PM_PLL_VCO_RANGE0_MAX_FREQ) + { + if (2 * mul > PM_MAX_MUL) + break; + mul *= 2; + div2_cpu++; + } + + if (div2_cpu != 0) + { + div2_cpu--; + div2_en = 1; + } + + pll_freq = in_osc0_f * mul / (div * (1 << div2_en)); + + // Update real CPU Frequency + param->cpu_f = pll_freq / (1 << div2_cpu); + mul--; + + pm_pll_setup(&AVR32_PM + , 0 // pll + , mul // mul + , div // div + , 0 // osc + , 16 // lockcount + ); + + pm_pll_set_option(&AVR32_PM + , 0 // pll + // PLL clock is lower than 160MHz: need to set pllopt. + , (pll_freq < AVR32_PM_PLL_VCO_RANGE0_MIN_FREQ) ? 1 : 0 // pll_freq + , div2_en // pll_div2 + , 0 // pll_wbwdisable + ); + + rest = pll_freq; + while (rest > AVR32_PM_PBA_MAX_FREQ || + rest != param->pba_f) + { + div2_pba++; + rest = pll_freq / (1 << div2_pba); + if (rest < param->pba_f) + break; + } + + // Update real PBA Frequency + param->pba_f = pll_freq / (1 << div2_pba); + + // Enable PLL0 + pm_pll_enable(&AVR32_PM, 0); + + // Wait for PLL0 locked + pm_wait_for_pll0_locked(&AVR32_PM); + + if (div2_cpu) + { + b_div2_cpu = TRUE; + div2_cpu--; + } + else + b_div2_cpu = FALSE; + + if (div2_pba) + { + b_div2_pba = TRUE; + div2_pba--; + } + else + b_div2_pba = FALSE; + + pm_cksel(&AVR32_PM + , b_div2_pba, div2_pba // PBA + , b_div2_cpu, div2_cpu // PBB + , b_div2_cpu, div2_cpu // HSB + ); + + if (param->cpu_f > AVR32_FLASHC_FWS_0_MAX_FREQ) + { + flashc_set_wait_state(1); +#if (defined AVR32_FLASHC_210_H_INCLUDED) + if (param->cpu_f > AVR32_FLASHC_HSEN_FWS_1_MAX_FREQ) + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_HSEN, -1); + else + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_HSDIS, -1); +#endif + } + else + { + flashc_set_wait_state(0); +#if (defined AVR32_FLASHC_210_H_INCLUDED) + if (param->cpu_f > AVR32_FLASHC_HSEN_FWS_0_MAX_FREQ) + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_HSEN, -1); + else + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_HSDIS, -1); +#endif + } + + pm_switch_to_clock(&AVR32_PM, AVR32_PM_MCCTRL_MCSEL_PLL0); + + return PM_FREQ_STATUS_OK; +} + + +void pm_configure_usb_clock(void) +{ +#if UC3A3 + + // Setup USB GCLK. + pm_gc_setup(&AVR32_PM, AVR32_PM_GCLK_USBB, // gc + 0, // osc_or_pll: use Osc (if 0) or PLL (if 1) + 0, // pll_osc: select Osc0/PLL0 or Osc1/PLL1 + 0, // diven + 0); // div + + // Enable USB GCLK. + pm_gc_enable(&AVR32_PM, AVR32_PM_GCLK_USBB); +#else + // Use 12MHz from OSC0 and generate 96 MHz + pm_pll_setup(&AVR32_PM, 1, // pll. + 7, // mul. + 1, // div. + 0, // osc. + 16); // lockcount. + + pm_pll_set_option(&AVR32_PM, 1, // pll. + 1, // pll_freq: choose the range 80-180MHz. + 1, // pll_div2. + 0); // pll_wbwdisable. + + // start PLL1 and wait forl lock + pm_pll_enable(&AVR32_PM, 1); + + // Wait for PLL1 locked. + pm_wait_for_pll1_locked(&AVR32_PM); + + pm_gc_setup(&AVR32_PM, AVR32_PM_GCLK_USBB, // gc. + 1, // osc_or_pll: use Osc (if 0) or PLL (if 1). + 1, // pll_osc: select Osc0/PLL0 or Osc1/PLL1. + 0, // diven. + 0); // div. + pm_gc_enable(&AVR32_PM, AVR32_PM_GCLK_USBB); +#endif +} diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/power_clocks_lib.c b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/power_clocks_lib.c new file mode 100644 index 000000000..f5fc1553d --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/power_clocks_lib.c @@ -0,0 +1,566 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file has been prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief High-level library abstracting features such as oscillators/pll/dfll + * configuration, clock configuration, System-sensible parameters + * configuration, buses clocks configuration, sleep mode, reset. + * + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + *****************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ +#include "power_clocks_lib.h" + + +//! Device-specific data +#if UC3L +static long int pcl_configure_clocks_uc3l(pcl_freq_param_t *param); // FORWARD declaration +#endif + +#if UC3C +static long int pcl_configure_clocks_uc3c(pcl_freq_param_t *param); // FORWARD declaration +#endif + +long int pcl_configure_clocks(pcl_freq_param_t *param) +{ +#ifndef AVR32_PM_VERSION_RESETVALUE + // Implementation for UC3A, UC3A3, UC3B parts. + return(pm_configure_clocks(param)); +#else + #ifdef AVR32_PM_410_H_INCLUDED + // Implementation for UC3C parts. + return(pcl_configure_clocks_uc3c(param)); + #else + // Implementation for UC3L parts. + return(pcl_configure_clocks_uc3l(param)); + #endif +#endif +} + + +//! Device-specific implementation +#if UC3L +// FORWARD declaration +static long int pcl_configure_synchronous_clocks( pm_clk_src_t main_clk_src, + unsigned long main_clock_freq_hz, + pcl_freq_param_t *param); + +long int pcl_configure_clocks_rcsys(pcl_freq_param_t *param) +{ + // Supported main clock sources: PCL_MC_RCSYS + + // Supported synchronous clocks frequencies if RCSYS is the main clock source: + // 115200Hz, 57600Hz, 28800Hz, 14400Hz, 7200Hz, 3600Hz, 1800Hz, 900Hz, 450Hz. + + // NOTE: by default, this implementation doesn't perform thorough checks on the + // input parameters. To enable the checks, define AVR32SFW_INPUT_CHECK. + +#ifdef AVR32SFW_INPUT_CHECK + // Verify that fCPU >= fPBx + if((param->cpu_f < param->pba_f) || (param->cpu_f < param->pbb_f)) + return(-1); +#endif + +#ifdef AVR32SFW_INPUT_CHECK + // Verify that the target frequencies are reachable. + if((param->cpu_f > SCIF_SLOWCLOCK_FREQ_HZ) || (param->pba_f > SCIF_SLOWCLOCK_FREQ_HZ) + || (param->pbb_f > SCIF_SLOWCLOCK_FREQ_HZ)) + return(-1); +#endif + + return(pcl_configure_synchronous_clocks(PM_CLK_SRC_SLOW, SCIF_SLOWCLOCK_FREQ_HZ, param)); +} + + +long int pcl_configure_clocks_rc120m(pcl_freq_param_t *param) +{ + // Supported main clock sources: PCL_MC_RC120M + + // Supported synchronous clocks frequencies if RC120M is the main clock source: + // 30MHz, 15MHz, 7.5MHz, 3.75MHz, 1.875MHz, 937.5kHz, 468.75kHz. + + // NOTE: by default, this implementation doesn't perform thorough checks on the + // input parameters. To enable the checks, define AVR32SFW_INPUT_CHECK. + +#ifdef AVR32SFW_INPUT_CHECK + // Verify that fCPU >= fPBx + if((param->cpu_f < param->pba_f) || (param->cpu_f < param->pbb_f)) + return(-1); +#endif + +#ifdef AVR32SFW_INPUT_CHECK + // Verify that the target frequencies are reachable. + if((param->cpu_f > SCIF_RC120M_FREQ_HZ) || (param->pba_f > SCIF_RC120M_FREQ_HZ) + || (param->pbb_f > SCIF_RC120M_FREQ_HZ)) + return(-1); +#endif + + // Start the 120MHz internal RCosc (RC120M) clock + scif_start_rc120M(); + + return(pcl_configure_synchronous_clocks(PM_CLK_SRC_RC120M, SCIF_RC120M_FREQ_HZ, param)); +} + + +long int pcl_configure_clocks_osc0(pcl_freq_param_t *param) +{ + // Supported main clock sources: PCL_MC_OSC0 + + // Supported synchronous clocks frequencies if OSC0 is the main clock source: + // (these obviously depend on the OSC0 frequency; we'll take 16MHz as an example) + // 16MHz, 8MHz, 4MHz, 2MHz, 1MHz, 500kHz, 250kHz, 125kHz, 62.5kHz. + + // NOTE: by default, this implementation doesn't perform thorough checks on the + // input parameters. To enable the checks, define AVR32SFW_INPUT_CHECK. + + unsigned long main_clock_freq; + + +#ifdef AVR32SFW_INPUT_CHECK + // Verify that fCPU >= fPBx + if((param->cpu_f < param->pba_f) || (param->cpu_f < param->pbb_f)) + return(-1); +#endif + + main_clock_freq = param->osc0_f; +#ifdef AVR32SFW_INPUT_CHECK + // Verify that the target frequencies are reachable. + if((param->cpu_f > main_clock_freq) || (param->pba_f > main_clock_freq) + || (param->pbb_f > main_clock_freq)) + return(-1); +#endif + // Configure OSC0 in crystal mode, external crystal with a fcrystal Hz frequency. + scif_configure_osc_crystalmode(SCIF_OSC0, main_clock_freq); + // Enable the OSC0 + scif_enable_osc(SCIF_OSC0, param->osc0_startup, true); + + return(pcl_configure_synchronous_clocks(PM_CLK_SRC_OSC0, main_clock_freq, param)); +} + + +long int pcl_configure_clocks_dfll0(pcl_freq_param_t *param) +{ + // Supported main clock sources: PCL_MC_DFLL + + // Supported synchronous clocks frequencies if DFLL is the main clock source: + // (these obviously depend on the DFLL target frequency; we'll take 100MHz as an example) + // 50MHz, 25MHz, 12.5MHz, 6.25MHz, 3.125MHz, 1562.5kHz, 781.25kHz, 390.625kHz. + + // NOTE: by default, this implementation doesn't perform thorough checks on the + // input parameters. To enable the checks, define AVR32SFW_INPUT_CHECK. + + unsigned long main_clock_freq; + scif_gclk_opt_t *pgc_dfllif_ref_opt; + + +#ifdef AVR32SFW_INPUT_CHECK + // Verify that fCPU >= fPBx + if((param->cpu_f < param->pba_f) || (param->cpu_f < param->pbb_f)) + return(-1); +#endif + + main_clock_freq = param->dfll_f; +#ifdef AVR32SFW_INPUT_CHECK + // Verify that the target DFLL output frequency is in the correct range. + if((main_clock_freq > SCIF_DFLL_MAXFREQ_HZ) || (main_clock_freq < SCIF_DFLL_MINFREQ_HZ)) + return(-1); + // Verify that the target frequencies are reachable. + if((param->cpu_f > main_clock_freq) || (param->pba_f > main_clock_freq) + || (param->pbb_f > main_clock_freq)) + return(-1); +#endif + pgc_dfllif_ref_opt = (scif_gclk_opt_t *)param->pextra_params; + // Implementation note: this implementation configures the DFLL in closed-loop + // mode (because it gives the best accuracy) which enables the generic clock CLK_DFLLIF_REF + // as a reference (RCSYS being used as the generic clock source, undivided). + scif_dfll0_closedloop_configure_and_start(pgc_dfllif_ref_opt, main_clock_freq, TRUE); + + return(pcl_configure_synchronous_clocks(PM_CLK_SRC_DFLL0, main_clock_freq, param)); +} + + +static long int pcl_configure_clocks_uc3l(pcl_freq_param_t *param) +{ + // Supported main clock sources: PCL_MC_RCSYS, PCL_MC_OSC0, PCL_MC_DFLL0, PCL_MC_RC120M + + // Supported synchronous clocks frequencies if RCSYS is the main clock source: + // 115200Hz, 57600Hz, 28800Hz, 14400Hz, 7200Hz, 3600Hz, 1800Hz, 900Hz, 450Hz. + + // Supported synchronous clocks frequencies if RC120M is the main clock source: + // 30MHz, 15MHz, 7.5MHz, 3.75MHz, 1.875MHz, 937.5kHz, 468.75kHz. + + // Supported synchronous clocks frequencies if OSC0 is the main clock source: + // (these obviously depend on the OSC0 frequency; we'll take 16MHz as an example) + // 16MHz, 8MHz, 4MHz, 2MHz, 1MHz, 500kHz, 250kHz, 125kHz, 62.5kHz. + + // Supported synchronous clocks frequencies if DFLL is the main clock source: + // (these obviously depend on the DFLL target frequency; we'll take 100MHz as an example) + // 50MHz, 25MHz, 12.5MHz, 6.25MHz, 3.125MHz, 1562.5kHz, 781.25kHz, 390.625kHz. + + // NOTE: by default, this implementation doesn't perform thorough checks on the + // input parameters. To enable the checks, define AVR32SFW_INPUT_CHECK. + + +#ifdef AVR32SFW_INPUT_CHECK + // Verify that fCPU >= fPBx + if((param->cpu_f < param->pba_f) || (param->cpu_f < param->pbb_f)) + return(-1); +#endif + + if(PCL_MC_RCSYS == param->main_clk_src) + { + return(pcl_configure_clocks_rcsys(param)); + } + else if(PCL_MC_RC120M == param->main_clk_src) + { + return(pcl_configure_clocks_rc120m(param)); + } + else if(PCL_MC_OSC0 == param->main_clk_src) + { + return(pcl_configure_clocks_osc0(param)); + } + else // PCL_MC_DFLL0 == param->main_clk_src + { + return(pcl_configure_clocks_dfll0(param)); + } +} + +static long int pcl_configure_synchronous_clocks(pm_clk_src_t main_clk_src, unsigned long main_clock_freq_hz, pcl_freq_param_t *param) +{ + //# + //# Set the Synchronous clock division ratio for each clock domain + //# + pm_set_all_cksel(main_clock_freq_hz, param->cpu_f, param->pba_f, param->pbb_f); + + //# + //# Set the Flash wait state and the speed read mode (depending on the target CPU frequency). + //# +#if UC3L + flashcdw_set_flash_waitstate_and_readmode(param->cpu_f); +#elif UC3C + flashc_set_flash_waitstate_and_readmode(param->cpu_f); +#endif + + + //# + //# Switch the main clock source to the selected clock. + //# + pm_set_mclk_source(main_clk_src); + + return PASS; +} + +#endif // UC3L device-specific implementation + +//! UC3C Device-specific implementation +#if UC3C +static long int pcl_configure_clocks_uc3c(pcl_freq_param_t *param) +{ + #define PM_MAX_MUL ((1 << AVR32_SCIF_PLLMUL_SIZE) - 1) + #define AVR32_PM_PBA_MAX_FREQ 66000000 + #define AVR32_PM_PLL_VCO_RANGE0_MAX_FREQ 240000000 + #define AVR32_PM_PLL_VCO_RANGE0_MIN_FREQ 160000000 + + // Implementation for UC3C parts. + // Supported frequencies: + // Fosc0 mul div PLL div2_en cpu_f pba_f Comment + // 12 15 1 192 1 12 12 + // 12 9 3 40 1 20 20 PLL out of spec + // 12 15 1 192 1 24 12 + // 12 9 1 120 1 30 15 + // 12 9 3 40 0 40 20 PLL out of spec + // 12 15 1 192 1 48 12 + // 12 15 1 192 1 48 24 + // 12 8 1 108 1 54 27 + // 12 9 1 120 1 60 15 + // 12 9 1 120 1 60 30 + // 12 10 1 132 1 66 16.5 + // + unsigned long in_cpu_f = param->cpu_f; + unsigned long in_osc0_f = param->osc0_f; + unsigned long mul, div, div2_en = 0, div2_cpu = 0, div2_pba = 0; + unsigned long pll_freq, rest; + Bool b_div2_pba, b_div2_cpu; + + // Configure OSC0 in crystal mode, external crystal with a FOSC0 Hz frequency. + scif_configure_osc_crystalmode(SCIF_OSC0, in_osc0_f); + // Enable the OSC0 + scif_enable_osc(SCIF_OSC0, param->osc0_startup, true); + // Set the main clock source as being OSC0. + pm_set_mclk_source(PM_CLK_SRC_OSC0); + + // Start with CPU freq config + if (in_cpu_f == in_osc0_f) + { + param->cpu_f = in_osc0_f; + param->pba_f = in_osc0_f; + return PASS; + } + else if (in_cpu_f < in_osc0_f) + { + // TBD + } + + rest = in_cpu_f % in_osc0_f; + + for (div = 1; div < 32; div++) + { + if ((div * rest) % in_osc0_f == 0) + break; + } + if (div == 32) + return FAIL; + + mul = (in_cpu_f * div) / in_osc0_f; + + if (mul > PM_MAX_MUL) + return FAIL; + + // export 2power from PLL div to div2_cpu + while (!(div % 2)) + { + div /= 2; + div2_cpu++; + } + + // Here we know the mul and div parameter of the PLL config. + // . Check out if the PLL has a valid in_cpu_f. + // . Try to have for the PLL frequency (VCO output) the highest possible value + // to reduce jitter. + while (in_osc0_f * 2 * mul / div < AVR32_PM_PLL_VCO_RANGE0_MAX_FREQ) + { + if (2 * mul > PM_MAX_MUL) + break; + mul *= 2; + div2_cpu++; + } + + if (div2_cpu != 0) + { + div2_cpu--; + div2_en = 1; + } + + pll_freq = in_osc0_f * mul / (div * (1 << div2_en)); + + // Update real CPU Frequency + param->cpu_f = pll_freq / (1 << div2_cpu); + mul--; + + scif_pll_opt_t opt; + + opt.osc = SCIF_OSC0, // Sel Osc0 or Osc1 + opt.lockcount = 16, // lockcount in main clock for the PLL wait lock + opt.div = div, // DIV=1 in the formula + opt.mul = mul, // MUL=7 in the formula + opt.pll_div2 = div2_en, // pll_div2 Divide the PLL output frequency by 2 (this settings does not change the FVCO value) + opt.pll_wbwdisable = 0, //pll_wbwdisable 1 Disable the Wide-Bandith Mode (Wide-Bandwith mode allow a faster startup time and out-of-lock time). 0 to enable the Wide-Bandith Mode. + opt.pll_freq = (pll_freq < AVR32_PM_PLL_VCO_RANGE0_MIN_FREQ) ? 1 : 0, // Set to 1 for VCO frequency range 80-180MHz, set to 0 for VCO frequency range 160-240Mhz. + + + scif_pll_setup(SCIF_PLL0, opt); // lockcount in main clock for the PLL wait lock + + /* Enable PLL0 */ + scif_pll_enable(SCIF_PLL0); + + /* Wait for PLL0 locked */ + scif_wait_for_pll_locked(SCIF_PLL0) ; + + rest = pll_freq; + while (rest > AVR32_PM_PBA_MAX_FREQ || + rest != param->pba_f) + { + div2_pba++; + rest = pll_freq / (1 << div2_pba); + if (rest < param->pba_f) + break; + } + + // Update real PBA Frequency + param->pba_f = pll_freq / (1 << div2_pba); + + + if (div2_cpu) + { + b_div2_cpu = TRUE; + div2_cpu--; + } + else + b_div2_cpu = FALSE; + + if (div2_pba) + { + b_div2_pba = TRUE; + div2_pba--; + } + else + b_div2_pba = FALSE; + + if (b_div2_cpu == TRUE ) + { + pm_set_clk_domain_div(PM_CLK_DOMAIN_0, (pm_divratio_t) div2_cpu); // CPU + pm_set_clk_domain_div(PM_CLK_DOMAIN_1, (pm_divratio_t) div2_cpu); // HSB + pm_set_clk_domain_div(PM_CLK_DOMAIN_3, (pm_divratio_t) div2_cpu); // PBB + } + if (b_div2_pba == TRUE ) + { + pm_set_clk_domain_div(PM_CLK_DOMAIN_2, (pm_divratio_t) div2_pba); // PBA + pm_set_clk_domain_div(PM_CLK_DOMAIN_4, (pm_divratio_t) div2_pba); // PBC + } + + // Set Flashc Wait State + flashc_set_flash_waitstate_and_readmode(param->cpu_f); + + // Set the main clock source as being PLL0. + pm_set_mclk_source(PM_CLK_SRC_PLL0); + + return PASS; +} +#endif // UC3C device-specific implementation + +long int pcl_switch_to_osc(pcl_osc_t osc, unsigned int fcrystal, unsigned int startup) +{ +#ifndef AVR32_PM_VERSION_RESETVALUE +// Implementation for UC3A, UC3A3, UC3B parts. + if(PCL_OSC0 == osc) + { + // Configure OSC0 in crystal mode, external crystal with a FOSC0 Hz frequency, + // enable the OSC0, set the main clock source as being OSC0. + pm_switch_to_osc0(&AVR32_PM, fcrystal, startup); + } + else + { + return PCL_NOT_SUPPORTED; + } +#else +// Implementation for UC3C, UC3L parts. + #if AVR32_PM_VERSION_RESETVALUE < 0x400 + return PCL_NOT_SUPPORTED; + #else + if(PCL_OSC0 == osc) + { + // Configure OSC0 in crystal mode, external crystal with a fcrystal Hz frequency. + scif_configure_osc_crystalmode(SCIF_OSC0, fcrystal); + // Enable the OSC0 + scif_enable_osc(SCIF_OSC0, startup, true); + // Set the Flash wait state and the speed read mode (depending on the target CPU frequency). +#if UC3L + flashcdw_set_flash_waitstate_and_readmode(fcrystal); +#elif UC3C + flashc_set_flash_waitstate_and_readmode(fcrystal); +#endif + // Set the main clock source as being OSC0. + pm_set_mclk_source(PM_CLK_SRC_OSC0); + } + else + { + return PCL_NOT_SUPPORTED; + } + #endif +#endif + return PASS; +} + +long int pcl_configure_usb_clock(void) +{ +#ifndef AVR32_PM_VERSION_RESETVALUE +// Implementation for UC3A, UC3A3, UC3B parts. + pm_configure_usb_clock(); + return PASS; +#else + #ifdef AVR32_PM_410_H_INCLUDED + const scif_pll_opt_t opt = { + .osc = SCIF_OSC0, // Sel Osc0 or Osc1 + .lockcount = 16, // lockcount in main clock for the PLL wait lock + .div = 1, // DIV=1 in the formula + .mul = 5, // MUL=7 in the formula + .pll_div2 = 1, // pll_div2 Divide the PLL output frequency by 2 (this settings does not change the FVCO value) + .pll_wbwdisable = 0, //pll_wbwdisable 1 Disable the Wide-Bandith Mode (Wide-Bandwith mode allow a faster startup time and out-of-lock time). 0 to enable the Wide-Bandith Mode. + .pll_freq = 1, // Set to 1 for VCO frequency range 80-180MHz, set to 0 for VCO frequency range 160-240Mhz. + }; + + /* Setup PLL1 on Osc0, mul=7 ,no divisor, lockcount=16, ie. 16Mhzx6 = 96MHz output */ + scif_pll_setup(SCIF_PLL1, opt); // lockcount in main clock for the PLL wait lock + + /* Enable PLL1 */ + scif_pll_enable(SCIF_PLL1); + + /* Wait for PLL1 locked */ + scif_wait_for_pll_locked(SCIF_PLL1) ; + + // Implementation for UC3C parts. + // Setup the generic clock for USB + scif_gc_setup(AVR32_SCIF_GCLK_USB, + SCIF_GCCTRL_PLL1, + AVR32_SCIF_GC_NO_DIV_CLOCK, + 0); + // Now enable the generic clock + scif_gc_enable(AVR32_SCIF_GCLK_USB); + return PASS; + #else + return PCL_NOT_SUPPORTED; + #endif +#endif +} + + +#if UC3L +#else +void pcl_write_gplp(unsigned long gplp, unsigned long value) +{ +#ifndef AVR32_PM_VERSION_RESETVALUE +// Implementation for UC3A, UC3A3, UC3B parts. + pm_write_gplp(&AVR32_PM,gplp,value); +#else + scif_write_gplp(gplp,value); +#endif +} + +unsigned long pcl_read_gplp(unsigned long gplp) +{ +#ifndef AVR32_PM_VERSION_RESETVALUE +// Implementation for UC3A, UC3A3, UC3B parts. + return pm_read_gplp(&AVR32_PM,gplp); +#else + return scif_read_gplp(gplp); +#endif +} +#endif diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/power_clocks_lib.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/power_clocks_lib.h new file mode 100644 index 000000000..28c5888da --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/power_clocks_lib.h @@ -0,0 +1,379 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file has been prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief High-level library abstracting features such as oscillators/pll/dfll + * configuration, clock configuration, System-sensible parameters + * configuration, buses clocks configuration, sleep mode, reset. + * + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + *****************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _POWER_CLOCKS_LIB_H_ +#define _POWER_CLOCKS_LIB_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include "compiler.h" + +#ifndef AVR32_PM_VERSION_RESETVALUE +// Support for UC3A, UC3A3, UC3B parts. + #include "pm.h" +#else +//! Device-specific data +#if UC3L + #include "pm_uc3l.h" + #include "scif_uc3l.h" + #include "flashcdw.h" +#elif UC3C + #include "pm_uc3c.h" + #include "scif_uc3c.h" + #include "flashc.h" +#endif +#endif + +/*! \name Clocks Management + */ +//! @{ + +//! The different oscillators +typedef enum +{ + PCL_OSC0 = 0, + PCL_OSC1 = 1 +} pcl_osc_t; + +//! The different DFLLs +typedef enum +{ + PCL_DFLL0 = 0, + PCL_DFLL1 = 1 +} pcl_dfll_t; + +//! Possible Main Clock Sources +typedef enum +{ + PCL_MC_RCSYS, // Default main clock source, supported by all (aka Slow Clock) + PCL_MC_OSC0, // Supported by all + PCL_MC_OSC1, // Supported by UC3C only + PCL_MC_OSC0_PLL0, // Supported by UC3A, UC3B, UC3A3, UC3C (the main clock source is PLL0 with OSC0 as reference) + PCL_MC_OSC1_PLL0, // Supported by UC3A, UC3B, UC3A3, UC3C (the main clock source is PLL0 with OSC1 as reference) + PCL_MC_OSC0_PLL1, // Supported by UC3C (the main clock source is PLL1 with OSC0 as reference) + PCL_MC_OSC1_PLL1, // Supported by UC3C (the main clock source is PLL1 with OSC1 as reference) + PCL_MC_DFLL0, // Supported by UC3L + PCL_MC_DFLL1, // Not supported yet + PCL_MC_RC120M, // Supported by UC3L, UC3C + PCL_MC_RC8M, // Supported by UC3C + PCL_MC_CRIPOSC // Supported by UC3C +} pcl_mainclk_t; + +//! Input and output parameters to configure clocks with pcl_configure_clocks(). +// NOTE: regarding the frequency settings, always abide by the datasheet rules and min & max supported frequencies. +#ifndef AVR32_PM_VERSION_RESETVALUE +// Support for UC3A, UC3A3, UC3B parts. +#define pcl_freq_param_t pm_freq_param_t // See pm.h +#else +// Support for UC3C, UC3L parts. +typedef struct +{ + //! Main clock source selection (input argument). + pcl_mainclk_t main_clk_src; + + //! Target CPU frequency (input/output argument). + unsigned long cpu_f; + + //! Target PBA frequency (input/output argument). + unsigned long pba_f; + + //! Target PBB frequency (input/output argument). + unsigned long pbb_f; + + //! Target PBC frequency (input/output argument). + unsigned long pbc_f; + + //! Oscillator 0's external crystal(or external clock) frequency (board dependant) (input argument). + unsigned long osc0_f; + + //! Oscillator 0's external crystal(or external clock) startup time: AVR32_PM_OSCCTRL0_STARTUP_x_RCOSC (input argument). + unsigned long osc0_startup; + + //! DFLL target frequency (input/output argument) (NOTE: the bigger, the most stable the frequency) + unsigned long dfll_f; + + //! Other parameters that might be necessary depending on the device (implementation-dependent). + // For the UC3L DFLL setup, this parameter should be pointing to a structure of + // type (scif_gclk_opt_t *). + void *pextra_params; +} pcl_freq_param_t; +#endif + +//! Define "not supported" for the lib. +#define PCL_NOT_SUPPORTED (-10000) + +/*! \brief Automatically configure the CPU, PBA, PBB, and HSB clocks + * + * This function needs some parameters stored in a pcl_freq_param_t structure: + * - main_clk_src is the id of the main clock source to use, + * - cpu_f and pba_f and pbb_f are the wanted frequencies, + * - osc0_f is the oscillator 0's external crystal (or external clock) on-board frequency (e.g. FOSC0), + * - osc0_startup is the oscillator 0's external crystal (or external clock) startup time (e.g. OSC0_STARTUP). + * - dfll_f is the target DFLL frequency to set-up if main_clk_src is the dfll. + * + * The CPU, HSB and PBA frequencies programmed after configuration are stored back into cpu_f and pba_f. + * + * \note: since it is dynamically computing the appropriate field values of the + * configuration registers from the parameters structure, this function is not + * optimal in terms of code size. For a code size optimal solution, it is better + * to create a new function from pcl_configure_clocks() and modify it to use + * preprocessor computation from pre-defined target frequencies. + * + * \param param pointer on the configuration structure. + * + * \retval 0 Success. + * \retval <0 The configuration cannot be performed. + */ +extern long int pcl_configure_clocks(pcl_freq_param_t *param); + +/*! \brief Automatically configure the CPU, PBA, PBB, and HSB clocks using the RCSYS osc as main source clock. + * + * This function needs some parameters stored in a pcl_freq_param_t structure: + * - cpu_f and pba_f and pbb_f are the wanted frequencies + * + * Supported main clock sources: PCL_MC_RCSYS + * + * Supported synchronous clocks frequencies: + * 115200Hz, 57600Hz, 28800Hz, 14400Hz, 7200Hz, 3600Hz, 1800Hz, 900Hz, 450Hz. + * + * \note: by default, this implementation doesn't perform thorough checks on the + * input parameters. To enable the checks, define AVR32SFW_INPUT_CHECK. + * + * \note: since it is dynamically computing the appropriate field values of the + * configuration registers from the parameters structure, this function is not + * optimal in terms of code size. For a code size optimal solution, it is better + * to create a new function from pcl_configure_clocks_rcsys() and modify it to use + * preprocessor computation from pre-defined target frequencies. + * + * \param param pointer on the configuration structure. + * + * \retval 0 Success. + * \retval <0 The configuration cannot be performed. + */ +extern long int pcl_configure_clocks_rcsys(pcl_freq_param_t *param); + +/*! \brief Automatically configure the CPU, PBA, PBB, and HSB clocks using the RC120M osc as main source clock. + * + * This function needs some parameters stored in a pcl_freq_param_t structure: + * - cpu_f and pba_f and pbb_f are the wanted frequencies + * + * Supported main clock sources: PCL_MC_RC120M + * + * Supported synchronous clocks frequencies: + * 30MHz, 15MHz, 7.5MHz, 3.75MHz, 1.875MHz, 937.5kHz, 468.75kHz. + * + * \note: by default, this implementation doesn't perform thorough checks on the + * input parameters. To enable the checks, define AVR32SFW_INPUT_CHECK. + * + * \note: since it is dynamically computing the appropriate field values of the + * configuration registers from the parameters structure, this function is not + * optimal in terms of code size. For a code size optimal solution, it is better + * to create a new function from pcl_configure_clocks_rc120m() and modify it to + * use preprocessor computation from pre-defined target frequencies. + * + * \param param pointer on the configuration structure. + * + * \retval 0 Success. + * \retval <0 The configuration cannot be performed. + */ +extern long int pcl_configure_clocks_rc120m(pcl_freq_param_t *param); + +/*! \brief Automatically configure the CPU, PBA, PBB, and HSB clocks using the OSC0 osc as main source clock + * + * This function needs some parameters stored in a pcl_freq_param_t structure: + * - cpu_f and pba_f and pbb_f are the wanted frequencies, + * - osc0_f is the oscillator 0's external crystal (or external clock) on-board frequency (e.g. FOSC0), + * - osc0_startup is the oscillator 0's external crystal (or external clock) startup time (e.g. OSC0_STARTUP). + * + * Supported main clock sources: PCL_MC_OSC0 + * + * Supported synchronous clocks frequencies: + * (these obviously depend on the OSC0 frequency; we'll take 16MHz as an example) + * 16MHz, 8MHz, 4MHz, 2MHz, 1MHz, 500kHz, 250kHz, 125kHz, 62.5kHz. + * + * \note: by default, this implementation doesn't perform thorough checks on the + * input parameters. To enable the checks, define AVR32SFW_INPUT_CHECK. + * + * \note: since it is dynamically computing the appropriate field values of the + * configuration registers from the parameters structure, this function is not + * optimal in terms of code size. For a code size optimal solution, it is better + * to create a new function from pcl_configure_clocks_osc0() and modify it to use + * preprocessor computation from pre-defined target frequencies. + * + * \param param pointer on the configuration structure. + * + * \retval 0 Success. + * \retval <0 The configuration cannot be performed. + */ +extern long int pcl_configure_clocks_osc0(pcl_freq_param_t *param); + +/*! \brief Automatically configure the CPU, PBA, PBB, and HSB clocks using the DFLL0 as main source clock + * + * This function needs some parameters stored in a pcl_freq_param_t structure: + * - cpu_f and pba_f and pbb_f are the wanted frequencies, + * - dfll_f is the target DFLL frequency to set-up + * + * \note: when the DFLL0 is to be used as main source clock for the synchronous clocks, + * the target frequency of the DFLL should be chosen to be as high as possible + * within the specification range (for stability reasons); the target cpu and pbx + * frequencies will then be reached by appropriate division ratio. + * + * Supported main clock sources: PCL_MC_DFLL0 + * + * Supported synchronous clocks frequencies: + * (these obviously depend on the DFLL target frequency; we'll take 100MHz as an example) + * 50MHz, 25MHz, 12.5MHz, 6.25MHz, 3.125MHz, 1562.5kHz, 781.25kHz, 390.625kHz. + * + * \note: by default, this implementation doesn't perform thorough checks on the + * input parameters. To enable the checks, define AVR32SFW_INPUT_CHECK. + * + * \note: since it is dynamically computing the appropriate field values of the + * configuration registers from the parameters structure, this function is not + * optimal in terms of code size. For a code size optimal solution, it is better + * to create a new function from pcl_configure_clocks_dfll0() and modify it to + * use preprocessor computation from pre-defined target frequencies. + * + * \param param pointer on the configuration structure. + * + * \retval 0 Success. + * \retval <0 The configuration cannot be performed. + */ +extern long int pcl_configure_clocks_dfll0(pcl_freq_param_t *param); + +/*! \brief Switch the main clock source to Osc0 configured in crystal mode + * + * \param osc The oscillator to enable and switch to. + * \param fcrystal Oscillator external crystal frequency (Hz) + * \param startup Oscillator startup time. + * + * \return Status. + * \retval 0 Success. + * \retval <0 An error occured. + */ +extern long int pcl_switch_to_osc(pcl_osc_t osc, unsigned int fcrystal, unsigned int startup); + +/*! \brief Enable the clock of a module. + * + * \param module The module to clock (use one of the defines in the part-specific + * header file under "toolchain folder"/avr32/inc(lude)/avr32/; depending on the + * clock domain, look for the sections "CPU clocks", "HSB clocks", "PBx clocks" + * or look in the module section). + * + * \return Status. + * \retval 0 Success. + * \retval <0 An error occured. + */ +#ifndef AVR32_PM_VERSION_RESETVALUE +// Implementation for UC3A, UC3A3, UC3B parts. +#define pcl_enable_module(module) pm_enable_module(&AVR32_PM, module) +#else +// Implementation for UC3C, UC3L parts. +#define pcl_enable_module(module) pm_enable_module(module) +#endif + +/*! \brief Disable the clock of a module. + * + * \param module The module to shut down (use one of the defines in the part-specific + * header file under "toolchain folder"/avr32/inc(lude)/avr32/; depending on the + * clock domain, look for the sections "CPU clocks", "HSB clocks", "PBx clocks" + * or look in the module section). + * + * \return Status. + * \retval 0 Success. + * \retval <0 An error occured. + */ +#ifndef AVR32_PM_VERSION_RESETVALUE +// Implementation for UC3A, UC3A3, UC3B parts. +#define pcl_disable_module(module) pm_disable_module(&AVR32_PM, module) +#else +// Implementation for UC3C, UC3L parts. +#define pcl_disable_module(module) pm_disable_module(module) +#endif + +/*! \brief Configure the USB Clock + * + * + * \return Status. + * \retval 0 Success. + * \retval <0 An error occured. + */ +extern long int pcl_configure_usb_clock(void); + +//! @} + +/*! \name Power Management + */ +//! @{ +/*! + * \brief Read the content of the GPLP registers + * \param gplp GPLP register index (0,1,... depending on the number of GPLP registers for a given part) + * + * \return The content of the chosen GPLP register. + */ +extern unsigned long pcl_read_gplp(unsigned long gplp); + + +/*! + * \brief Write into the GPLP registers + * \param gplp GPLP register index (0,1,... depending on the number of GPLP registers for a given part) + * \param value Value to write + */ +extern void pcl_write_gplp(unsigned long gplp, unsigned long value); + +//! @} + +#ifdef __cplusplus +} +#endif + +#endif // _POWER_CLOCKS_LIB_H_ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/RTC/rtc.c b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/RTC/rtc.c new file mode 100644 index 000000000..4cbae0f70 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/RTC/rtc.c @@ -0,0 +1,213 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief RTC driver for AVR32 UC3. + * + * AVR32 Real Time Counter driver module. + * + * - Compiler: GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with an RTC and a PM module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#include +#include "compiler.h" +#include "pm.h" +#include "rtc.h" + + +int rtc_is_busy(volatile avr32_rtc_t *rtc) +{ + return (rtc->ctrl & AVR32_RTC_CTRL_BUSY_MASK) != 0; +} + + +int rtc_init(volatile avr32_rtc_t *rtc, unsigned char osc_type, unsigned char psel) +{ + // If exit, it means that the configuration has not been set correctly + if (osc_type > (1 << AVR32_RTC_CTRL_CLK32_SIZE) - 1 || + psel > (1 << AVR32_RTC_CTRL_PSEL_SIZE) - 1) + return 0; + + // If we use the 32-kHz oscillator, we have to enable it first + if (osc_type == RTC_OSC_32KHZ) + { + // Select the 32-kHz oscillator crystal + pm_enable_osc32_crystal(&AVR32_PM); + // Enable the 32-kHz clock + pm_enable_clk32_no_wait(&AVR32_PM, AVR32_PM_OSCCTRL32_STARTUP_0_RCOSC); + } + + // Wait until the rtc CTRL register is up-to-date + while (rtc_is_busy(rtc)); + + // Set the new RTC configuration + rtc->ctrl = osc_type << AVR32_RTC_CTRL_CLK32_OFFSET | + psel << AVR32_RTC_CTRL_PSEL_OFFSET | + AVR32_RTC_CTRL_CLKEN_MASK; + + // Wait until write is done + while (rtc_is_busy(rtc)); + + // Set the counter value to 0 + rtc_set_value(rtc, 0x00000000); + // Set the top value to 0xFFFFFFFF + rtc_set_top_value(rtc, 0xFFFFFFFF); + + return 1; +} + + +void rtc_set_value(volatile avr32_rtc_t *rtc, unsigned long val) +{ + // Wait until we can write into the VAL register + while (rtc_is_busy(rtc)); + // Set the new val value + rtc->val = val; + // Wait until write is done + while (rtc_is_busy(rtc)); +} + + +unsigned long rtc_get_value(volatile avr32_rtc_t *rtc) +{ + return rtc->val; +} + + +void rtc_enable_wake_up(volatile avr32_rtc_t *rtc) +{ + // Wait until the rtc CTRL register is up-to-date + while (rtc_is_busy(rtc)); + // Enable the wake up of the RTC + rtc->ctrl |= AVR32_RTC_CTRL_WAKE_EN_MASK; + // Wait until write is done + while (rtc_is_busy(rtc)); +} + + +void rtc_disable_wake_up(volatile avr32_rtc_t *rtc) +{ + // Wait until the rtc CTRL register is up-to-date + while (rtc_is_busy(rtc)); + // Disable the wake up of the RTC + rtc->ctrl &= ~AVR32_RTC_CTRL_WAKE_EN_MASK; + // Wait until write is done + while (rtc_is_busy(rtc)); +} + + +void rtc_enable(volatile avr32_rtc_t *rtc) +{ + // Wait until the rtc CTRL register is up-to-date + while (rtc_is_busy(rtc)); + // Enable the RTC + rtc->ctrl |= AVR32_RTC_CTRL_EN_MASK; + // Wait until write is done + while (rtc_is_busy(rtc)); +} + + +void rtc_disable(volatile avr32_rtc_t *rtc) +{ + // Wait until the rtc CTRL register is up-to-date + while (rtc_is_busy(rtc)); + // Disable the RTC + rtc->ctrl &= ~AVR32_RTC_CTRL_EN_MASK; + // Wait until write is done + while (rtc_is_busy(rtc)); +} + + +void rtc_enable_interrupt(volatile avr32_rtc_t *rtc) +{ + rtc->ier = AVR32_RTC_IER_TOPI_MASK; +} + + +void rtc_disable_interrupt(volatile avr32_rtc_t *rtc) +{ + Bool global_interrupt_enabled = Is_global_interrupt_enabled(); + + if (global_interrupt_enabled) Disable_global_interrupt(); + rtc->idr = AVR32_RTC_IDR_TOPI_MASK; + rtc->imr; + if (global_interrupt_enabled) Enable_global_interrupt(); +} + + +void rtc_clear_interrupt(volatile avr32_rtc_t *rtc) +{ + Bool global_interrupt_enabled = Is_global_interrupt_enabled(); + + if (global_interrupt_enabled) Disable_global_interrupt(); + rtc->icr = AVR32_RTC_ICR_TOPI_MASK; + rtc->isr; + if (global_interrupt_enabled) Enable_global_interrupt(); +} + + +void rtc_set_top_value(volatile avr32_rtc_t *rtc, unsigned long top) +{ + // Wait until we can write into the VAL register + while (rtc_is_busy(rtc)); + // Set the new val value + rtc->top = top; + // Wait until write is done + while (rtc_is_busy(rtc)); +} + + +unsigned long rtc_get_top_value(volatile avr32_rtc_t *rtc) +{ + return rtc->top; +} + + +int rtc_interrupt_enabled(volatile avr32_rtc_t *rtc) +{ + return (rtc->imr & AVR32_RTC_IMR_TOPI_MASK) != 0; +} + + +int rtc_is_interrupt(volatile avr32_rtc_t *rtc) +{ + return (rtc->isr & AVR32_RTC_ISR_TOPI_MASK) != 0; +} diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/RTC/rtc.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/RTC/rtc.h new file mode 100644 index 000000000..5702c2959 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/RTC/rtc.h @@ -0,0 +1,191 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief RTC driver for AVR32 UC3. + * + * AVR32 Real Time Counter driver module. + * + * - Compiler: GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with an RTC and a PM module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _RTC_H_ +#define _RTC_H_ + +#include "compiler.h" +#include + + +/*! \name Oscillator Types + */ +//! @{ +#define RTC_OSC_32KHZ 1 +#define RTC_OSC_RC 0 +//! @} + +/*! \name Predefined PSEL Values + */ +//! @{ + +//! The PSEL value to set the RTC source clock (after the prescaler) to 1 Hz, +//! when using an external 32-kHz crystal. +#define RTC_PSEL_32KHZ_1HZ 14 + +//! The PSEL value to set the RTC source clock (after the prescaler) to 1.76 Hz, +//! when using the internal RC oscillator (~ 115 kHz). +#define RTC_PSEL_RC_1_76HZ 15 + +//! @} + + +/*! + * \brief This function will initialise the RTC module. + * If you use the 32 KHz oscillator, it will enable this module. + * This function also set the top value of the RTC to 0xFFFFFFFF + * and the value to 0. + * \param rtc Base address of the RTC (i.e. &AVR32_RTC). + * \param osc_type The oscillator you want to use. If you need a better + * accuracy, use the 32 KHz oscillator (i.e. RTC_OSC_32KHZ). + * \param psel The preselector value for the corresponding oscillator (4-bits). + * To obtain this value, you can use this formula: + * psel = log(Fosc/Frtc)/log(2)-1, where Fosc is the frequency of the + * oscillator you are using (32 KHz or 115 KHz) and Frtc the frequency + * desired. + * \return 1 if the initialisation succeds otherwize it will return 0. + */ +extern int rtc_init(volatile avr32_rtc_t *rtc, unsigned char osc_type, unsigned char psel); + +/*! + * \brief Enable the RTC. + * \param rtc Base address of the RTC (i.e. &AVR32_RTC). + */ +extern void rtc_enable(volatile avr32_rtc_t *rtc); + +/*! + * \brief Disable the RTC. + * \param rtc Base address of the RTC (i.e. &AVR32_RTC). + */ +extern void rtc_disable(volatile avr32_rtc_t *rtc); + +/*! + * \brief Enable the wake up feature of the RTC. + * \param rtc Base address of the RTC (i.e. &AVR32_RTC). + */ +extern void rtc_enable_wake_up(volatile avr32_rtc_t *rtc); + +/*! + * \brief Disable the wake up feature of the RTC. + * \param rtc Base address of the RTC (i.e. &AVR32_RTC). + */ +extern void rtc_disable_wake_up(volatile avr32_rtc_t *rtc); + +/*! + * \brief Enable the interrupt feature of the RTC. + * An interrupt is raised when the value of the RTC + * is equal to its top value. + * \param rtc Base address of the RTC (i.e. &AVR32_RTC). + */ +extern void rtc_enable_interrupt(volatile avr32_rtc_t *rtc); + +/*! + * \brief Disable the interrupt feature of the RTC. + * \param rtc Base address of the RTC (i.e. &AVR32_RTC). + */ +extern void rtc_disable_interrupt(volatile avr32_rtc_t *rtc); + +/*! + * \brief Clear the interrupt flag. + * Call this function once you handled the interrupt. + * \param rtc Base address of the RTC (i.e. &AVR32_RTC). + */ +extern void rtc_clear_interrupt(volatile avr32_rtc_t *rtc); + +/*! + * \brief Get the status of interrupts. + * \param rtc Base address of the RTC (i.e. &AVR32_RTC). + * \return 1 if the interrupts are enabled otherwize it returns 0. + */ +extern int rtc_interrupt_enabled(volatile avr32_rtc_t *rtc); + +/*! + * \brief Check if an interrupt is raised. + * \param rtc Base address of the RTC (i.e. &AVR32_RTC). + * \return 1 if an interrupt is currently raised otherwize it returns 0. + */ +extern int rtc_is_interrupt(volatile avr32_rtc_t *rtc); + +/*! + * \brief This function sets the RTC current top value. + * \param rtc Base address of the RTC (i.e. &AVR32_RTC). + * \param top The top value you want to store. + */ +extern void rtc_set_top_value(volatile avr32_rtc_t *rtc, unsigned long top); + +/*! + * \brief This function returns the RTC current top value. + * \param rtc Base address of the RTC (i.e. &AVR32_RTC). + * \return The RTC current top value. + */ +extern unsigned long rtc_get_top_value(volatile avr32_rtc_t *rtc); + +/*! + * \brief This function checks if the RTC is busy or not. + * \param rtc Base address of the RTC (i.e. &AVR32_RTC). + * \return 1 if the RTC is busy otherwize it will return 0. + */ +extern int rtc_is_busy(volatile avr32_rtc_t *rtc); + +/*! + * \brief This function sets the RTC current value. + * \param rtc Base address of the RTC (i.e. &AVR32_RTC). + * \param val The value you want to store. + */ +extern void rtc_set_value(volatile avr32_rtc_t *rtc, unsigned long val); + +/*! + * \brief This function returns the RTC current value. + * \param rtc Base address of the RTC (i.e. &AVR32_RTC). + * \return The RTC current value. + */ +extern unsigned long rtc_get_value(volatile avr32_rtc_t *rtc); + + +#endif // _RTC_H_ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/SPI/spi.c b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/SPI/spi.c new file mode 100644 index 000000000..d2b7ccd94 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/SPI/spi.c @@ -0,0 +1,443 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief SPI driver for AVR32 UC3. + * + * This file defines a useful set of functions for the SPI interface on AVR32 + * devices. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with an SPI module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#include "spi.h" + +#ifdef FREERTOS_USED + +#include "FreeRTOS.h" +#include "semphr.h" + +#endif + + +/*! \name SPI Writable Bit-Field Registers + */ +//! @{ + +typedef union +{ + unsigned long cr; + avr32_spi_cr_t CR; +} u_avr32_spi_cr_t; + +typedef union +{ + unsigned long mr; + avr32_spi_mr_t MR; +} u_avr32_spi_mr_t; + +typedef union +{ + unsigned long tdr; + avr32_spi_tdr_t TDR; +} u_avr32_spi_tdr_t; + +typedef union +{ + unsigned long ier; + avr32_spi_ier_t IER; +} u_avr32_spi_ier_t; + +typedef union +{ + unsigned long idr; + avr32_spi_idr_t IDR; +} u_avr32_spi_idr_t; + +typedef union +{ + unsigned long csr; + avr32_spi_csr0_t CSR; +} u_avr32_spi_csr_t; + +//! @} + + +#ifdef FREERTOS_USED + +//! The SPI mutex. +static xSemaphoreHandle xSPIMutex; + +#endif + + +/*! \brief Calculates the baudrate divider. + * + * \param options Pointer to a structure containing initialization options for + * an SPI channel. + * \param pba_hz SPI module input clock frequency (PBA clock, Hz). + * + * \return Divider or error code. + * \retval >=0 Success. + * \retval <0 Error. + */ +static int getBaudDiv(const spi_options_t *options, unsigned int pba_hz) +{ + int baudDiv = (pba_hz + options->baudrate / 2) / options->baudrate; + + if (baudDiv <= 0 || baudDiv > 255) { + return -1; + } + + return baudDiv; +} + + +void spi_reset(volatile avr32_spi_t *spi) +{ + spi->cr = AVR32_SPI_CR_SWRST_MASK; +} + + +spi_status_t spi_initSlave(volatile avr32_spi_t *spi, + unsigned char bits, + unsigned char spi_mode) +{ + if (spi_mode > 3 || + bits < 8 || bits > 16) { + return SPI_ERROR_ARGUMENT; + } + + // Reset. + spi->cr = AVR32_SPI_CR_SWRST_MASK; + + // Will use CSR0 offsets; these are the same for CSR0 to CSR3. + spi->csr0 = ((spi_mode >> 1) << AVR32_SPI_CSR0_CPOL_OFFSET) | + (((spi_mode & 0x1) ^ 0x1) << AVR32_SPI_CSR0_NCPHA_OFFSET) | + ((bits - 8) << AVR32_SPI_CSR0_BITS_OFFSET); + + return SPI_OK; +} + + +spi_status_t spi_initTest(volatile avr32_spi_t *spi) +{ + // Reset. + spi->cr = AVR32_SPI_CR_SWRST_MASK; + spi->mr |= AVR32_SPI_MR_MSTR_MASK | // Master Mode. + AVR32_SPI_MR_LLB_MASK; // Local Loopback. + + return SPI_OK; +} + + +spi_status_t spi_initMaster(volatile avr32_spi_t *spi, const spi_options_t *options) +{ + u_avr32_spi_mr_t u_avr32_spi_mr; + + if (options->modfdis > 1) { + return SPI_ERROR_ARGUMENT; + } + + // Reset. + spi->cr = AVR32_SPI_CR_SWRST_MASK; + + // Master Mode. + u_avr32_spi_mr.mr = spi->mr; + u_avr32_spi_mr.MR.mstr = 1; + u_avr32_spi_mr.MR.modfdis = options->modfdis; + u_avr32_spi_mr.MR.llb = 0; + u_avr32_spi_mr.MR.pcs = (1 << AVR32_SPI_MR_PCS_SIZE) - 1; + spi->mr = u_avr32_spi_mr.mr; + + return SPI_OK; +} + + +spi_status_t spi_selectionMode(volatile avr32_spi_t *spi, + unsigned char variable_ps, + unsigned char pcs_decode, + unsigned char delay) +{ + u_avr32_spi_mr_t u_avr32_spi_mr; + + if (variable_ps > 1 || + pcs_decode > 1) { + return SPI_ERROR_ARGUMENT; + } + + u_avr32_spi_mr.mr = spi->mr; + u_avr32_spi_mr.MR.ps = variable_ps; + u_avr32_spi_mr.MR.pcsdec = pcs_decode; + u_avr32_spi_mr.MR.dlybcs = delay; + spi->mr = u_avr32_spi_mr.mr; + + return SPI_OK; +} + + +spi_status_t spi_selectChip(volatile avr32_spi_t *spi, unsigned char chip) +{ +#ifdef FREERTOS_USED + while (pdFALSE == xSemaphoreTake(xSPIMutex, 20)); +#endif + + // Assert all lines; no peripheral is selected. + spi->mr |= AVR32_SPI_MR_PCS_MASK; + + if (spi->mr & AVR32_SPI_MR_PCSDEC_MASK) { + // The signal is decoded; allow up to 15 chips. + if (chip > 14) { + return SPI_ERROR_ARGUMENT; + } + + spi->mr &= ~AVR32_SPI_MR_PCS_MASK | (chip << AVR32_SPI_MR_PCS_OFFSET); + } else { + if (chip > 3) { + return SPI_ERROR_ARGUMENT; + } + + spi->mr &= ~(1 << (AVR32_SPI_MR_PCS_OFFSET + chip)); + } + + return SPI_OK; +} + + +spi_status_t spi_unselectChip(volatile avr32_spi_t *spi, unsigned char chip) +{ + unsigned int timeout = SPI_TIMEOUT; + + while (!(spi->sr & AVR32_SPI_SR_TXEMPTY_MASK)) { + if (!timeout--) { + return SPI_ERROR_TIMEOUT; + } + } + + // Assert all lines; no peripheral is selected. + spi->mr |= AVR32_SPI_MR_PCS_MASK; + + // Last transfer, so deassert the current NPCS if CSAAT is set. + spi->cr = AVR32_SPI_CR_LASTXFER_MASK; + +#ifdef FREERTOS_USED + xSemaphoreGive(xSPIMutex); +#endif + + return SPI_OK; +} + + +spi_status_t spi_setupChipReg(volatile avr32_spi_t *spi, + const spi_options_t *options, + unsigned int pba_hz) +{ + u_avr32_spi_csr_t u_avr32_spi_csr; + + if (options->spi_mode > 3 || + options->stay_act > 1 || + options->bits < 8 || options->bits > 16) { + return SPI_ERROR_ARGUMENT; + } + + int baudDiv = getBaudDiv(options, pba_hz); + + if (baudDiv < 0) { + return SPI_ERROR_ARGUMENT; + } + + // Will use CSR0 offsets; these are the same for CSR0 to CSR3. + u_avr32_spi_csr.csr = 0; + u_avr32_spi_csr.CSR.cpol = options->spi_mode >> 1; + u_avr32_spi_csr.CSR.ncpha = (options->spi_mode & 0x1) ^ 0x1; + u_avr32_spi_csr.CSR.csaat = options->stay_act; + u_avr32_spi_csr.CSR.bits = options->bits - 8; + u_avr32_spi_csr.CSR.scbr = baudDiv; + u_avr32_spi_csr.CSR.dlybs = options->spck_delay; + u_avr32_spi_csr.CSR.dlybct = options->trans_delay; + + switch(options->reg) { + case 0: + spi->csr0 = u_avr32_spi_csr.csr; + break; + case 1: + spi->csr1 = u_avr32_spi_csr.csr; + break; + case 2: + spi->csr2 = u_avr32_spi_csr.csr; + break; + case 3: + spi->csr3 = u_avr32_spi_csr.csr; + break; + default: + return SPI_ERROR_ARGUMENT; + } + +#ifdef FREERTOS_USED + if (!xSPIMutex) + { + // Create the SPI mutex. + vSemaphoreCreateBinary(xSPIMutex); + if (!xSPIMutex) + { + while(1); + } + } +#endif + + return SPI_OK; +} + + +void spi_enable(volatile avr32_spi_t *spi) +{ + spi->cr = AVR32_SPI_CR_SPIEN_MASK; +} + + +void spi_disable(volatile avr32_spi_t *spi) +{ + spi->cr = AVR32_SPI_CR_SPIDIS_MASK; +} + + +int spi_is_enabled(volatile avr32_spi_t *spi) +{ + return (spi->sr & AVR32_SPI_SR_SPIENS_MASK) != 0; +} + + +inline unsigned char spi_writeRegisterEmptyCheck(volatile avr32_spi_t *spi) +{ + return ((spi->sr & AVR32_SPI_SR_TDRE_MASK) != 0); +} + + +inline spi_status_t spi_write(volatile avr32_spi_t *spi, unsigned short data) +{ + unsigned int timeout = SPI_TIMEOUT; + + while (!(spi->sr & AVR32_SPI_SR_TDRE_MASK)) { + if (!timeout--) { + return SPI_ERROR_TIMEOUT; + } + } + + spi->tdr = data << AVR32_SPI_TDR_TD_OFFSET; + + return SPI_OK; +} + + +spi_status_t spi_variableSlaveWrite(volatile avr32_spi_t *spi, unsigned short data, + unsigned char pcs, unsigned char lastxfer) +{ + unsigned int timeout = SPI_TIMEOUT; + + if (pcs > 14 || lastxfer > 1) { + return SPI_ERROR_ARGUMENT; + } + + while (!(spi->sr & AVR32_SPI_SR_TDRE_MASK)) { + if (!timeout--) { + return SPI_ERROR_TIMEOUT; + } + } + + spi->tdr = (data << AVR32_SPI_TDR_TD_OFFSET) | + (pcs << AVR32_SPI_TDR_PCS_OFFSET) | + (lastxfer << AVR32_SPI_TDR_LASTXFER_OFFSET); + + return SPI_OK; +} + + +inline unsigned char spi_writeEndCheck(volatile avr32_spi_t *spi) +{ + return ((spi->sr & AVR32_SPI_SR_TXEMPTY_MASK) != 0); +} + + +unsigned char spi_readRegisterFullCheck(volatile avr32_spi_t *spi) +{ + return ((spi->sr & AVR32_SPI_SR_RDRF_MASK) != 0); +} + + +inline spi_status_t spi_read(volatile avr32_spi_t *spi, unsigned short *data) +{ + unsigned int timeout = SPI_TIMEOUT; + + while ((spi->sr & (AVR32_SPI_SR_RDRF_MASK | AVR32_SPI_SR_TXEMPTY_MASK)) != + (AVR32_SPI_SR_RDRF_MASK | AVR32_SPI_SR_TXEMPTY_MASK)) { + if (!timeout--) { + return SPI_ERROR_TIMEOUT; + } + } + + *data = spi->rdr >> AVR32_SPI_RDR_RD_OFFSET; + + return SPI_OK; +} + + +unsigned char spi_getStatus(volatile avr32_spi_t *spi) +{ + spi_status_t ret = SPI_OK; + unsigned long sr = spi->sr; + + if (sr & AVR32_SPI_SR_OVRES_MASK) { + ret = SPI_ERROR_OVERRUN; + } + + if (sr & AVR32_SPI_SR_MODF_MASK) { + ret += SPI_ERROR_MODE_FAULT; + } + + if (ret == (SPI_ERROR_OVERRUN + SPI_ERROR_MODE_FAULT)) { + return SPI_ERROR_OVERRUN_AND_MODE_FAULT; + } + else if (ret > 0) { + return ret; + } else { + return SPI_OK; + } +} diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/SPI/spi.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/SPI/spi.h new file mode 100644 index 000000000..6dcc92848 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/SPI/spi.h @@ -0,0 +1,342 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief SPI driver for AVR32 UC3. + * + * This file defines a useful set of functions for the SPI interface on AVR32 + * devices. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with an SPI module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _SPI_H_ +#define _SPI_H_ + +#include + + +//! Time-out value (number of attempts). +#define SPI_TIMEOUT 10000 + + +//! Status codes used by the SPI driver. +typedef enum +{ + SPI_ERROR = -1, + SPI_OK = 0, + SPI_ERROR_TIMEOUT = 1, + SPI_ERROR_ARGUMENT, + SPI_ERROR_OVERRUN, + SPI_ERROR_MODE_FAULT, + SPI_ERROR_OVERRUN_AND_MODE_FAULT +} spi_status_t; + +//! Option structure for SPI channels. +typedef struct +{ + //! The SPI channel to set up. + unsigned char reg; + + //! Preferred baudrate for the SPI. + unsigned int baudrate; + + //! Number of bits in each character (8 to 16). + unsigned char bits; + + //! Delay before first clock pulse after selecting slave (in PBA clock periods). + unsigned char spck_delay; + + //! Delay between each transfer/character (in PBA clock periods). + unsigned char trans_delay; + + //! Sets this chip to stay active after last transfer to it. + unsigned char stay_act; + + //! Which SPI mode to use when transmitting. + unsigned char spi_mode; + + //! Disables the mode fault detection. + //! With this bit cleared, the SPI master mode will disable itself if another + //! master tries to address it. + unsigned char modfdis; +} spi_options_t; + + +/*! \brief Resets the SPI controller. + * + * \param spi Base address of the SPI instance. + */ +extern void spi_reset(volatile avr32_spi_t *spi); + +/*! \brief Initializes the SPI in slave mode. + * + * \param spi Base address of the SPI instance. + * \param bits Number of bits in each transmitted character (8 to 16). + * \param spi_mode Clock polarity and phase. + * + * \return Status. + * \retval SPI_OK Success. + * \retval SPI_ERROR_ARGUMENT Invalid argument(s) passed. + */ +extern spi_status_t spi_initSlave(volatile avr32_spi_t *spi, + unsigned char bits, + unsigned char spi_mode); + +/*! \brief Sets up the SPI in a test mode where the transmitter is connected to + * the receiver (local loopback). + * + * \param spi Base address of the SPI instance. + * + * \return Status. + * \retval SPI_OK Success. + */ +extern spi_status_t spi_initTest(volatile avr32_spi_t *spi); + +/*! \brief Initializes the SPI in master mode. + * + * \param spi Base address of the SPI instance. + * \param options Pointer to a structure containing initialization options. + * + * \return Status. + * \retval SPI_OK Success. + * \retval SPI_ERROR_ARGUMENT Invalid argument(s) passed. + */ +extern spi_status_t spi_initMaster(volatile avr32_spi_t *spi, const spi_options_t *options); + +/*! \brief Sets up how and when the slave chips are selected (master mode only). + * + * \param spi Base address of the SPI instance. + * \param variable_ps Target slave is selected in transfer register for every + * character to transmit. + * \param pcs_decode The four chip select lines are decoded externally. Values + * 0 to 14 can be given to \ref spi_selectChip. + * \param delay Delay in PBA periods between chip selects. + * + * \return Status. + * \retval SPI_OK Success. + * \retval SPI_ERROR_ARGUMENT Invalid argument(s) passed. + */ +extern spi_status_t spi_selectionMode(volatile avr32_spi_t *spi, + unsigned char variable_ps, + unsigned char pcs_decode, + unsigned char delay); + +/*! \brief Selects slave chip. + * + * \param spi Base address of the SPI instance. + * \param chip Slave chip number (normal: 0 to 3, extarnally decoded signal: 0 + * to 14). + * + * \return Status. + * \retval SPI_OK Success. + * \retval SPI_ERROR_ARGUMENT Invalid argument(s) passed. + */ +extern spi_status_t spi_selectChip(volatile avr32_spi_t *spi, unsigned char chip); + +/*! \brief Unselects slave chip. + * + * \param spi Base address of the SPI instance. + * \param chip Slave chip number (normal: 0 to 3, extarnally decoded signal: 0 + * to 14). + * + * \return Status. + * \retval SPI_OK Success. + * \retval SPI_ERROR_TIMEOUT Time-out. + * + * \note Will block program execution until time-out occurs if last transmission + * is not complete. Invoke \ref spi_writeEndCheck beforehand if needed. + */ +extern spi_status_t spi_unselectChip(volatile avr32_spi_t *spi, unsigned char chip); + +/*! \brief Sets options for a specific slave chip. + * + * The baudrate field has to be written before transfer in master mode. Four + * similar registers exist, one for each slave. When using encoded slave + * addressing, reg=0 sets options for slaves 0 to 3, reg=1 for slaves 4 to 7 and + * so on. + * + * \param spi Base address of the SPI instance. + * \param options Pointer to a structure containing initialization options for + * an SPI channel. + * \param pba_hz SPI module input clock frequency (PBA clock, Hz). + * + * \return Status. + * \retval SPI_OK Success. + * \retval SPI_ERROR_ARGUMENT Invalid argument(s) passed. + */ +extern spi_status_t spi_setupChipReg(volatile avr32_spi_t *spi, + const spi_options_t *options, + unsigned int pba_hz); + +/*! \brief Enables the SPI. + * + * \param spi Base address of the SPI instance. + */ +extern void spi_enable(volatile avr32_spi_t *spi); + +/*! \brief Disables the SPI. + * + * Ensures that nothing is transferred while setting up buffers. + * + * \param spi Base address of the SPI instance. + * + * \warning This may cause data loss if used on a slave SPI. + */ +extern void spi_disable(volatile avr32_spi_t *spi); + +/*! \brief Tests if the SPI is enabled. + * + * \param spi Base address of the SPI instance. + * + * \return \c 1 if the SPI is enabled, otherwise \c 0. + */ +extern int spi_is_enabled(volatile avr32_spi_t *spi); + +/*! \brief Checks if there is no data in the transmit register. + * + * \param spi Base address of the SPI instance. + * + * \return Status. + * \retval 1 No data in TDR. + * \retval 0 Some data in TDR. + */ +extern unsigned char spi_writeRegisterEmptyCheck(volatile avr32_spi_t *spi); + +/*! \brief Writes one data word in master fixed peripheral select mode or in + * slave mode. + * + * \param spi Base address of the SPI instance. + * \param data The data word to write. + * + * \return Status. + * \retval SPI_OK Success. + * \retval SPI_ERROR_TIMEOUT Time-out. + * + * \note Will block program execution until time-out occurs if transmitter is + * busy and transmit buffer is full. Invoke + * \ref spi_writeRegisterEmptyCheck beforehand if needed. + * + * \note Once the data has been written to the transmit buffer, the end of + * transmission is not waited for. Invoke \ref spi_writeEndCheck if + * needed. + */ +extern spi_status_t spi_write(volatile avr32_spi_t *spi, unsigned short data); + +/*! \brief Selects a slave in master variable peripheral select mode and writes + * one data word to it. + * + * \param spi Base address of the SPI instance. + * \param data The data word to write. + * \param pcs Slave selector (bit 0 -> nCS line 0, bit 1 -> nCS line 1, + * etc.). + * \param lastxfer Boolean indicating whether this is the last data word + * transfer. + * + * \return Status. + * \retval SPI_OK Success. + * \retval SPI_ERROR_TIMEOUT Time-out. + * \retval SPI_ERROR_ARGUMENT Invalid argument(s) passed. + * + * \note Will block program execution until time-out occurs if transmitter is + * busy and transmit buffer is full. Invoke + * \ref spi_writeRegisterEmptyCheck beforehand if needed. + * + * \note Once the data has been written to the transmit buffer, the end of + * transmission is not waited for. Invoke \ref spi_writeEndCheck if + * needed. + */ +extern spi_status_t spi_variableSlaveWrite(volatile avr32_spi_t *spi, + unsigned short data, + unsigned char pcs, + unsigned char lastxfer); + +/*! \brief Checks if all transmissions are complete. + * + * \param spi Base address of the SPI instance. + * + * \return Status. + * \retval 1 All transmissions complete. + * \retval 0 Transmissions not complete. + */ +extern unsigned char spi_writeEndCheck(volatile avr32_spi_t *spi); + +/*! \brief Checks if there is data in the receive register. + * + * \param spi Base address of the SPI instance. + * + * \return Status. + * \retval 1 Some data in RDR. + * \retval 0 No data in RDR. + */ +extern unsigned char spi_readRegisterFullCheck(volatile avr32_spi_t *spi); + +/*! \brief Reads one data word in master mode or in slave mode. + * + * \param spi Base address of the SPI instance. + * \param data Pointer to the location where to store the received data word. + * + * \return Status. + * \retval SPI_OK Success. + * \retval SPI_ERROR_TIMEOUT Time-out. + * + * \note Will block program execution until time-out occurs if no data is + * received or last transmission is not complete. Invoke + * \ref spi_writeEndCheck or \ref spi_readRegisterFullCheck beforehand if + * needed. + */ +extern spi_status_t spi_read(volatile avr32_spi_t *spi, unsigned short *data); + +/*! \brief Gets status information from the SPI. + * + * \param spi Base address of the SPI instance. + * + * \return Status. + * \retval SPI_OK Success. + * \retval SPI_ERROR_OVERRUN Overrun error. + * \retval SPI_ERROR_MODE_FAULT Mode fault (SPI addressed as slave + * while in master mode). + * \retval SPI_ERROR_OVERRUN_AND_MODE_FAULT Overrun error and mode fault. + */ +extern unsigned char spi_getStatus(volatile avr32_spi_t *spi); + + +#endif // _SPI_H_ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/TC/tc.c b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/TC/tc.c new file mode 100644 index 000000000..225642ede --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/TC/tc.c @@ -0,0 +1,314 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief TC driver for AVR32 UC3. + * + * AVR32 Timer/Counter driver module. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with a TC module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#include +#include "compiler.h" +#include "tc.h" + + +int tc_get_interrupt_settings(volatile avr32_tc_t *tc, unsigned int channel) +{ + // Check for valid input. + if (channel >= TC_NUMBER_OF_CHANNELS) + return TC_INVALID_ARGUMENT; + + return tc->channel[channel].imr; +} + + +int tc_configure_interrupts(volatile avr32_tc_t *tc, unsigned int channel, const tc_interrupt_t *bitfield) +{ + Bool global_interrupt_enabled = Is_global_interrupt_enabled(); + + // Check for valid input. + if (channel >= TC_NUMBER_OF_CHANNELS) + return TC_INVALID_ARGUMENT; + + // Enable the appropriate interrupts. + tc->channel[channel].ier = bitfield->etrgs << AVR32_TC_ETRGS_OFFSET | + bitfield->ldrbs << AVR32_TC_LDRBS_OFFSET | + bitfield->ldras << AVR32_TC_LDRAS_OFFSET | + bitfield->cpcs << AVR32_TC_CPCS_OFFSET | + bitfield->cpbs << AVR32_TC_CPBS_OFFSET | + bitfield->cpas << AVR32_TC_CPAS_OFFSET | + bitfield->lovrs << AVR32_TC_LOVRS_OFFSET | + bitfield->covfs << AVR32_TC_COVFS_OFFSET; + + // Disable the appropriate interrupts. + if (global_interrupt_enabled) Disable_global_interrupt(); + tc->channel[channel].idr = (~bitfield->etrgs & 1) << AVR32_TC_ETRGS_OFFSET | + (~bitfield->ldrbs & 1) << AVR32_TC_LDRBS_OFFSET | + (~bitfield->ldras & 1) << AVR32_TC_LDRAS_OFFSET | + (~bitfield->cpcs & 1) << AVR32_TC_CPCS_OFFSET | + (~bitfield->cpbs & 1) << AVR32_TC_CPBS_OFFSET | + (~bitfield->cpas & 1) << AVR32_TC_CPAS_OFFSET | + (~bitfield->lovrs & 1) << AVR32_TC_LOVRS_OFFSET | + (~bitfield->covfs & 1) << AVR32_TC_COVFS_OFFSET; + tc->channel[channel].sr; + if (global_interrupt_enabled) Enable_global_interrupt(); + + return 0; +} + + +int tc_select_external_clock(volatile avr32_tc_t *tc, unsigned int channel, unsigned int ext_clk_sig_src) +{ + // Check for valid input. + if (channel >= TC_NUMBER_OF_CHANNELS || ext_clk_sig_src >= 1 << AVR32_TC_BMR_TC0XC0S_SIZE) + return TC_INVALID_ARGUMENT; + + // Clear bit-field and set the correct behavior. + tc->bmr = (tc->bmr & ~(AVR32_TC_BMR_TC0XC0S_MASK << (channel * AVR32_TC_BMR_TC0XC0S_SIZE))) | + (ext_clk_sig_src << (channel * AVR32_TC_BMR_TC0XC0S_SIZE)); + + return 0; +} + + +int tc_init_capture(volatile avr32_tc_t *tc, const tc_capture_opt_t *opt) +{ + // Check for valid input. + if (opt->channel >= TC_NUMBER_OF_CHANNELS) + return TC_INVALID_ARGUMENT; + + // MEASURE SIGNALS: Capture operating mode. + tc->channel[opt->channel].cmr = opt->ldrb << AVR32_TC_LDRB_OFFSET | + opt->ldra << AVR32_TC_LDRA_OFFSET | + 0 << AVR32_TC_WAVE_OFFSET | + opt->cpctrg << AVR32_TC_CPCTRG_OFFSET | + opt->abetrg << AVR32_TC_ABETRG_OFFSET | + opt->etrgedg << AVR32_TC_ETRGEDG_OFFSET| + opt->ldbdis << AVR32_TC_LDBDIS_OFFSET | + opt->ldbstop << AVR32_TC_LDBSTOP_OFFSET | + opt->burst << AVR32_TC_BURST_OFFSET | + opt->clki << AVR32_TC_CLKI_OFFSET | + opt->tcclks << AVR32_TC_TCCLKS_OFFSET; + + return 0; +} + + +int tc_init_waveform(volatile avr32_tc_t *tc, const tc_waveform_opt_t *opt) +{ + // Check for valid input. + if (opt->channel >= TC_NUMBER_OF_CHANNELS) + return TC_INVALID_ARGUMENT; + + // GENERATE SIGNALS: Waveform operating mode. + tc->channel[opt->channel].cmr = opt->bswtrg << AVR32_TC_BSWTRG_OFFSET | + opt->beevt << AVR32_TC_BEEVT_OFFSET | + opt->bcpc << AVR32_TC_BCPC_OFFSET | + opt->bcpb << AVR32_TC_BCPB_OFFSET | + opt->aswtrg << AVR32_TC_ASWTRG_OFFSET | + opt->aeevt << AVR32_TC_AEEVT_OFFSET | + opt->acpc << AVR32_TC_ACPC_OFFSET | + opt->acpa << AVR32_TC_ACPA_OFFSET | + 1 << AVR32_TC_WAVE_OFFSET | + opt->wavsel << AVR32_TC_WAVSEL_OFFSET | + opt->enetrg << AVR32_TC_ENETRG_OFFSET | + opt->eevt << AVR32_TC_EEVT_OFFSET | + opt->eevtedg << AVR32_TC_EEVTEDG_OFFSET | + opt->cpcdis << AVR32_TC_CPCDIS_OFFSET | + opt->cpcstop << AVR32_TC_CPCSTOP_OFFSET | + opt->burst << AVR32_TC_BURST_OFFSET | + opt->clki << AVR32_TC_CLKI_OFFSET | + opt->tcclks << AVR32_TC_TCCLKS_OFFSET; + + return 0; +} + + +int tc_start(volatile avr32_tc_t *tc, unsigned int channel) +{ + // Check for valid input. + if (channel >= TC_NUMBER_OF_CHANNELS) + return TC_INVALID_ARGUMENT; + + // Enable, reset and start the selected timer/counter channel. + tc->channel[channel].ccr = AVR32_TC_SWTRG_MASK | AVR32_TC_CLKEN_MASK; + + return 0; +} + + +int tc_stop(volatile avr32_tc_t *tc, unsigned int channel) +{ + // Check for valid input. + if (channel >= TC_NUMBER_OF_CHANNELS) + return TC_INVALID_ARGUMENT; + + // Disable the selected timer/counter channel. + tc->channel[channel].ccr = AVR32_TC_CLKDIS_MASK; + + return 0; +} + + +int tc_software_trigger(volatile avr32_tc_t *tc, unsigned int channel) +{ + // Check for valid input. + if (channel >= TC_NUMBER_OF_CHANNELS) + return TC_INVALID_ARGUMENT; + + // Reset the selected timer/counter channel. + tc->channel[channel].ccr = AVR32_TC_SWTRG_MASK; + + return 0; +} + + +void tc_sync_trigger(volatile avr32_tc_t *tc) +{ + // Reset all channels of the selected timer/counter. + tc->bcr = AVR32_TC_BCR_SYNC_MASK; +} + + +void tc_sync_start(volatile avr32_tc_t *tc) +{ + unsigned int i; + // Enable the clock for each channel. + for(i=0; ichannel[i].ccr = AVR32_TC_CLKEN_MASK; + + // Reset all channels of the selected timer/counter. + tc->bcr = AVR32_TC_BCR_SYNC_MASK; +} + + +int tc_read_sr(volatile avr32_tc_t *tc, unsigned int channel) +{ + // Check for valid input. + if (channel >= TC_NUMBER_OF_CHANNELS) + return TC_INVALID_ARGUMENT; + + return tc->channel[channel].sr; +} + + +int tc_read_tc(volatile avr32_tc_t *tc, unsigned int channel) +{ + // Check for valid input. + if (channel >= TC_NUMBER_OF_CHANNELS) + return TC_INVALID_ARGUMENT; + + return Rd_bitfield(tc->channel[channel].cv, AVR32_TC_CV_MASK); +} + + +int tc_read_ra(volatile avr32_tc_t *tc, unsigned int channel) +{ + // Check for valid input. + if (channel >= TC_NUMBER_OF_CHANNELS) + return TC_INVALID_ARGUMENT; + + return Rd_bitfield(tc->channel[channel].ra, AVR32_TC_RA_MASK); +} + + +int tc_read_rb(volatile avr32_tc_t *tc, unsigned int channel) +{ + // Check for valid input. + if (channel >= TC_NUMBER_OF_CHANNELS) + return TC_INVALID_ARGUMENT; + + return Rd_bitfield(tc->channel[channel].rb, AVR32_TC_RB_MASK); +} + + +int tc_read_rc(volatile avr32_tc_t *tc, unsigned int channel) +{ + // Check for valid input. + if (channel >= TC_NUMBER_OF_CHANNELS) + return TC_INVALID_ARGUMENT; + + return Rd_bitfield(tc->channel[channel].rc, AVR32_TC_RC_MASK); +} + + +int tc_write_ra(volatile avr32_tc_t *tc, unsigned int channel, unsigned short value) +{ + // Check for valid input. + if (channel >= TC_NUMBER_OF_CHANNELS) + return TC_INVALID_ARGUMENT; + + // This function is only available in WAVEFORM mode. + if (Tst_bits(tc->channel[channel].cmr, AVR32_TC_WAVE_MASK)) + Wr_bitfield(tc->channel[channel].ra, AVR32_TC_RA_MASK, value); + + return value; +} + + +int tc_write_rb(volatile avr32_tc_t *tc, unsigned int channel, unsigned short value) +{ + // Check for valid input. + if (channel >= TC_NUMBER_OF_CHANNELS) + return TC_INVALID_ARGUMENT; + + // This function is only available in WAVEFORM mode. + if (Tst_bits(tc->channel[channel].cmr, AVR32_TC_WAVE_MASK)) + Wr_bitfield(tc->channel[channel].rb, AVR32_TC_RB_MASK, value); + + return value; +} + + +int tc_write_rc(volatile avr32_tc_t *tc, unsigned int channel, unsigned short value) +{ + // Check for valid input. + if (channel >= TC_NUMBER_OF_CHANNELS) + return TC_INVALID_ARGUMENT; + + // This function is only available in WAVEFORM mode. + if (Tst_bits(tc->channel[channel].cmr, AVR32_TC_WAVE_MASK)) + Wr_bitfield(tc->channel[channel].rc, AVR32_TC_RC_MASK, value); + + return value; +} diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/TC/tc.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/TC/tc.h new file mode 100644 index 000000000..45ef4f25a --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/TC/tc.h @@ -0,0 +1,591 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Timer/Counter driver for AVR32 UC3. + * + * AVR32 Timer/Counter driver module. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with a TC module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _TC_H_ +#define _TC_H_ + +#include + + +//! TC driver functions return value in case of invalid argument(s). +#define TC_INVALID_ARGUMENT (-1) + +//! Number of timer/counter channels. +#define TC_NUMBER_OF_CHANNELS (sizeof(((avr32_tc_t *)0)->channel) / sizeof(avr32_tc_channel_t)) + +/*! \name External Clock Signal 0 Selection + */ +//! @{ +#define TC_CH0_EXT_CLK0_SRC_TCLK0 AVR32_TC_TC0XC0S_TCLK0 +#define TC_CH0_EXT_CLK0_SRC_NO_CLK AVR32_TC_TC0XC0S_NO_CLK +#define TC_CH0_EXT_CLK0_SRC_TIOA1 AVR32_TC_TC0XC0S_TIOA1 +#define TC_CH0_EXT_CLK0_SRC_TIOA2 AVR32_TC_TC0XC0S_TIOA2 +//! @} + +/*! \name External Clock Signal 1 Selection + */ +//! @{ +#define TC_CH1_EXT_CLK1_SRC_TCLK1 AVR32_TC_TC1XC1S_TCLK1 +#define TC_CH1_EXT_CLK1_SRC_NO_CLK AVR32_TC_TC1XC1S_NO_CLK +#define TC_CH1_EXT_CLK1_SRC_TIOA0 AVR32_TC_TC1XC1S_TIOA0 +#define TC_CH1_EXT_CLK1_SRC_TIOA2 AVR32_TC_TC1XC1S_TIOA2 +//! @} + +/*! \name External Clock Signal 2 Selection + */ +//! @{ +#define TC_CH2_EXT_CLK2_SRC_TCLK2 AVR32_TC_TC2XC2S_TCLK2 +#define TC_CH2_EXT_CLK2_SRC_NO_CLK AVR32_TC_TC2XC2S_NO_CLK +#define TC_CH2_EXT_CLK2_SRC_TIOA0 AVR32_TC_TC2XC2S_TIOA0 +#define TC_CH2_EXT_CLK2_SRC_TIOA1 AVR32_TC_TC2XC2S_TIOA1 +//! @} + +/*! \name Event/Trigger Actions on Output + */ +//! @{ +#define TC_EVT_EFFECT_NOOP AVR32_TC_NONE +#define TC_EVT_EFFECT_SET AVR32_TC_SET +#define TC_EVT_EFFECT_CLEAR AVR32_TC_CLEAR +#define TC_EVT_EFFECT_TOGGLE AVR32_TC_TOGGLE +//! @} + +/*! \name RC Compare Trigger Enable + */ +//! @{ +#define TC_NO_TRIGGER_COMPARE_RC 0 +#define TC_TRIGGER_COMPARE_RC 1 +//! @} + +/*! \name Waveform Selection + */ +//! @{ +#define TC_WAVEFORM_SEL_UP_MODE AVR32_TC_WAVSEL_UP_NO_AUTO +#define TC_WAVEFORM_SEL_UP_MODE_RC_TRIGGER AVR32_TC_WAVSEL_UP_AUTO +#define TC_WAVEFORM_SEL_UPDOWN_MODE AVR32_TC_WAVSEL_UPDOWN_NO_AUTO +#define TC_WAVEFORM_SEL_UPDOWN_MODE_RC_TRIGGER AVR32_TC_WAVSEL_UPDOWN_AUTO +//! @} + +/*! \name TIOA or TIOB External Trigger Selection + */ +//! @{ +#define TC_EXT_TRIG_SEL_TIOA 1 +#define TC_EXT_TRIG_SEL_TIOB 0 +//! @} + +/*! \name External Event Selection + */ +//! @{ +#define TC_EXT_EVENT_SEL_TIOB_INPUT AVR32_TC_EEVT_TIOB_INPUT +#define TC_EXT_EVENT_SEL_XC0_OUTPUT AVR32_TC_EEVT_XC0_OUTPUT +#define TC_EXT_EVENT_SEL_XC1_OUTPUT AVR32_TC_EEVT_XC1_OUTPUT +#define TC_EXT_EVENT_SEL_XC2_OUTPUT AVR32_TC_EEVT_XC2_OUTPUT +//! @} + +/*! \name Edge Selection + */ +//! @{ +#define TC_SEL_NO_EDGE AVR32_TC_EEVTEDG_NO_EDGE +#define TC_SEL_RISING_EDGE AVR32_TC_EEVTEDG_POS_EDGE +#define TC_SEL_FALLING_EDGE AVR32_TC_EEVTEDG_NEG_EDGE +#define TC_SEL_EACH_EDGE AVR32_TC_EEVTEDG_BOTH_EDGES +//! @} + +/*! \name Burst Signal Selection + */ +//! @{ +#define TC_BURST_NOT_GATED AVR32_TC_BURST_NOT_GATED +#define TC_BURST_CLK_AND_XC0 AVR32_TC_BURST_CLK_AND_XC0 +#define TC_BURST_CLK_AND_XC1 AVR32_TC_BURST_CLK_AND_XC1 +#define TC_BURST_CLK_AND_XC2 AVR32_TC_BURST_CLK_AND_XC2 +//! @} + +/*! \name Clock Invert + */ +//! @{ +#define TC_CLOCK_RISING_EDGE 0 +#define TC_CLOCK_FALLING_EDGE 1 +//! @} + +/*! \name Clock Selection + */ +//! @{ +#define TC_CLOCK_SOURCE_TC1 AVR32_TC_TCCLKS_TIMER_CLOCK1 +#define TC_CLOCK_SOURCE_TC2 AVR32_TC_TCCLKS_TIMER_CLOCK2 +#define TC_CLOCK_SOURCE_TC3 AVR32_TC_TCCLKS_TIMER_CLOCK3 +#define TC_CLOCK_SOURCE_TC4 AVR32_TC_TCCLKS_TIMER_CLOCK4 +#define TC_CLOCK_SOURCE_TC5 AVR32_TC_TCCLKS_TIMER_CLOCK5 +#define TC_CLOCK_SOURCE_XC0 AVR32_TC_TCCLKS_XC0 +#define TC_CLOCK_SOURCE_XC1 AVR32_TC_TCCLKS_XC1 +#define TC_CLOCK_SOURCE_XC2 AVR32_TC_TCCLKS_XC2 +//! @} + + +//! Timer/counter interrupts. +typedef struct +{ + unsigned int :24; + + //! External trigger interrupt. + unsigned int etrgs : 1; + + //! RB load interrupt. + unsigned int ldrbs : 1; + + //! RA load interrupt. + unsigned int ldras : 1; + + //! RC compare interrupt. + unsigned int cpcs : 1; + + //! RB compare interrupt. + unsigned int cpbs : 1; + + //! RA compare interrupt. + unsigned int cpas : 1; + + //! Load overrun interrupt. + unsigned int lovrs : 1; + + //! Counter overflow interrupt. + unsigned int covfs : 1; +} tc_interrupt_t; + +//! Parameters when initializing a timer/counter in capture mode. +typedef struct +{ + //! Channel to initialize. + unsigned int channel ; + + unsigned int :12; + + //! RB loading selection:\n + //! - \ref TC_SEL_NO_EDGE;\n + //! - \ref TC_SEL_RISING_EDGE;\n + //! - \ref TC_SEL_FALLING_EDGE;\n + //! - \ref TC_SEL_EACH_EDGE. + unsigned int ldrb : 2; + + //! RA loading selection:\n + //! - \ref TC_SEL_NO_EDGE;\n + //! - \ref TC_SEL_RISING_EDGE;\n + //! - \ref TC_SEL_FALLING_EDGE;\n + //! - \ref TC_SEL_EACH_EDGE. + unsigned int ldra : 2; + + unsigned int : 1; + + //! RC compare trigger enable:\n + //! - \ref TC_NO_TRIGGER_COMPARE_RC;\n + //! - \ref TC_TRIGGER_COMPARE_RC. + unsigned int cpctrg : 1; + + unsigned int : 3; + + //! TIOA or TIOB external trigger selection:\n + //! - \ref TC_EXT_TRIG_SEL_TIOA;\n + //! - \ref TC_EXT_TRIG_SEL_TIOB. + unsigned int abetrg : 1; + + //! External trigger edge selection:\n + //! - \ref TC_SEL_NO_EDGE;\n + //! - \ref TC_SEL_RISING_EDGE;\n + //! - \ref TC_SEL_FALLING_EDGE;\n + //! - \ref TC_SEL_EACH_EDGE. + unsigned int etrgedg : 2; + + //! Counter clock disable with RB loading:\n + //! - \c FALSE;\n + //! - \c TRUE. + unsigned int ldbdis : 1; + + //! Counter clock stopped with RB loading:\n + //! - \c FALSE;\n + //! - \c TRUE. + unsigned int ldbstop : 1; + + //! Burst signal selection:\n + //! - \ref TC_BURST_NOT_GATED;\n + //! - \ref TC_BURST_CLK_AND_XC0;\n + //! - \ref TC_BURST_CLK_AND_XC1;\n + //! - \ref TC_BURST_CLK_AND_XC2. + unsigned int burst : 2; + + //! Clock invert:\n + //! - \ref TC_CLOCK_RISING_EDGE;\n + //! - \ref TC_CLOCK_FALLING_EDGE. + unsigned int clki : 1; + + //! Clock selection:\n + //! - \ref TC_CLOCK_SOURCE_TC1;\n + //! - \ref TC_CLOCK_SOURCE_TC2;\n + //! - \ref TC_CLOCK_SOURCE_TC3;\n + //! - \ref TC_CLOCK_SOURCE_TC4;\n + //! - \ref TC_CLOCK_SOURCE_TC5;\n + //! - \ref TC_CLOCK_SOURCE_XC0;\n + //! - \ref TC_CLOCK_SOURCE_XC1;\n + //! - \ref TC_CLOCK_SOURCE_XC2. + unsigned int tcclks : 3; +} tc_capture_opt_t; + +//! Parameters when initializing a timer/counter in waveform mode. +typedef struct +{ + //! Channel to initialize. + unsigned int channel ; + + //! Software trigger effect on TIOB:\n + //! - \ref TC_EVT_EFFECT_NOOP;\n + //! - \ref TC_EVT_EFFECT_SET;\n + //! - \ref TC_EVT_EFFECT_CLEAR;\n + //! - \ref TC_EVT_EFFECT_TOGGLE. + unsigned int bswtrg : 2; + + //! External event effect on TIOB:\n + //! - \ref TC_EVT_EFFECT_NOOP;\n + //! - \ref TC_EVT_EFFECT_SET;\n + //! - \ref TC_EVT_EFFECT_CLEAR;\n + //! - \ref TC_EVT_EFFECT_TOGGLE. + unsigned int beevt : 2; + + //! RC compare effect on TIOB:\n + //! - \ref TC_EVT_EFFECT_NOOP;\n + //! - \ref TC_EVT_EFFECT_SET;\n + //! - \ref TC_EVT_EFFECT_CLEAR;\n + //! - \ref TC_EVT_EFFECT_TOGGLE. + unsigned int bcpc : 2; + + //! RB compare effect on TIOB:\n + //! - \ref TC_EVT_EFFECT_NOOP;\n + //! - \ref TC_EVT_EFFECT_SET;\n + //! - \ref TC_EVT_EFFECT_CLEAR;\n + //! - \ref TC_EVT_EFFECT_TOGGLE. + unsigned int bcpb : 2; + + //! Software trigger effect on TIOA:\n + //! - \ref TC_EVT_EFFECT_NOOP;\n + //! - \ref TC_EVT_EFFECT_SET;\n + //! - \ref TC_EVT_EFFECT_CLEAR;\n + //! - \ref TC_EVT_EFFECT_TOGGLE. + unsigned int aswtrg : 2; + + //! External event effect on TIOA:\n + //! - \ref TC_EVT_EFFECT_NOOP;\n + //! - \ref TC_EVT_EFFECT_SET;\n + //! - \ref TC_EVT_EFFECT_CLEAR;\n + //! - \ref TC_EVT_EFFECT_TOGGLE. + unsigned int aeevt : 2; + + //! RC compare effect on TIOA:\n + //! - \ref TC_EVT_EFFECT_NOOP;\n + //! - \ref TC_EVT_EFFECT_SET;\n + //! - \ref TC_EVT_EFFECT_CLEAR;\n + //! - \ref TC_EVT_EFFECT_TOGGLE. + unsigned int acpc : 2; + + //! RA compare effect on TIOA:\n + //! - \ref TC_EVT_EFFECT_NOOP;\n + //! - \ref TC_EVT_EFFECT_SET;\n + //! - \ref TC_EVT_EFFECT_CLEAR;\n + //! - \ref TC_EVT_EFFECT_TOGGLE. + unsigned int acpa : 2; + + unsigned int : 1; + + //! Waveform selection:\n + //! - \ref TC_WAVEFORM_SEL_UP_MODE;\n + //! - \ref TC_WAVEFORM_SEL_UP_MODE_RC_TRIGGER;\n + //! - \ref TC_WAVEFORM_SEL_UPDOWN_MODE;\n + //! - \ref TC_WAVEFORM_SEL_UPDOWN_MODE_RC_TRIGGER. + unsigned int wavsel : 2; + + //! External event trigger enable:\n + //! - \c FALSE;\n + //! - \c TRUE. + unsigned int enetrg : 1; + + //! External event selection:\n + //! - \ref TC_EXT_EVENT_SEL_TIOB_INPUT;\n + //! - \ref TC_EXT_EVENT_SEL_XC0_OUTPUT;\n + //! - \ref TC_EXT_EVENT_SEL_XC1_OUTPUT;\n + //! - \ref TC_EXT_EVENT_SEL_XC2_OUTPUT. + unsigned int eevt : 2; + + //! External event edge selection:\n + //! - \ref TC_SEL_NO_EDGE;\n + //! - \ref TC_SEL_RISING_EDGE;\n + //! - \ref TC_SEL_FALLING_EDGE;\n + //! - \ref TC_SEL_EACH_EDGE. + unsigned int eevtedg : 2; + + //! Counter clock disable with RC compare:\n + //! - \c FALSE;\n + //! - \c TRUE. + unsigned int cpcdis : 1; + + //! Counter clock stopped with RC compare:\n + //! - \c FALSE;\n + //! - \c TRUE. + unsigned int cpcstop : 1; + + //! Burst signal selection:\n + //! - \ref TC_BURST_NOT_GATED;\n + //! - \ref TC_BURST_CLK_AND_XC0;\n + //! - \ref TC_BURST_CLK_AND_XC1;\n + //! - \ref TC_BURST_CLK_AND_XC2. + unsigned int burst : 2; + + //! Clock invert:\n + //! - \ref TC_CLOCK_RISING_EDGE;\n + //! - \ref TC_CLOCK_FALLING_EDGE. + unsigned int clki : 1; + + //! Clock selection:\n + //! - \ref TC_CLOCK_SOURCE_TC1;\n + //! - \ref TC_CLOCK_SOURCE_TC2;\n + //! - \ref TC_CLOCK_SOURCE_TC3;\n + //! - \ref TC_CLOCK_SOURCE_TC4;\n + //! - \ref TC_CLOCK_SOURCE_TC5;\n + //! - \ref TC_CLOCK_SOURCE_XC0;\n + //! - \ref TC_CLOCK_SOURCE_XC1;\n + //! - \ref TC_CLOCK_SOURCE_XC2. + unsigned int tcclks : 3; +} tc_waveform_opt_t; + + +/*! \brief Reads timer/counter interrupt settings. + * + * \param tc Pointer to the TC instance to access. + * \param channel The TC instance channel to access. + * + * \retval >=0 The interrupt enable configuration organized according to \ref tc_interrupt_t. + * \retval TC_INVALID_ARGUMENT Invalid argument(s). + */ +extern int tc_get_interrupt_settings(volatile avr32_tc_t *tc, unsigned int channel); + +/*! \brief Enables various timer/counter interrupts. + * + * \param tc Pointer to the TC instance to access. + * \param channel The TC instance channel to access. + * \param bitfield The interrupt enable configuration. + * + * \retval 0 Success. + * \retval TC_INVALID_ARGUMENT Invalid argument(s). + */ +extern int tc_configure_interrupts(volatile avr32_tc_t *tc, unsigned int channel, const tc_interrupt_t *bitfield); + +/*! \brief Selects which external clock to use and how to configure it. + * + * \param tc Pointer to the TC instance to access. + * \param channel The TC instance channel to access. + * \param ext_clk_sig_src External clock signal selection: + * \arg \c TC_CH0_EXT_CLK0_SRC_TCLK0; + * \arg \c TC_CH0_EXT_CLK0_SRC_NO_CLK; + * \arg \c TC_CH0_EXT_CLK0_SRC_TIOA1; + * \arg \c TC_CH0_EXT_CLK0_SRC_TIOA2; + * \arg \c TC_CH1_EXT_CLK1_SRC_TCLK1; + * \arg \c TC_CH1_EXT_CLK1_SRC_NO_CLK; + * \arg \c TC_CH1_EXT_CLK1_SRC_TIOA0; + * \arg \c TC_CH1_EXT_CLK1_SRC_TIOA2; + * \arg \c TC_CH2_EXT_CLK2_SRC_TCLK2; + * \arg \c TC_CH2_EXT_CLK2_SRC_NO_CLK; + * \arg \c TC_CH2_EXT_CLK2_SRC_TIOA0; + * \arg \c TC_CH2_EXT_CLK2_SRC_TIOA1. + * + * \retval 0 Success. + * \retval TC_INVALID_ARGUMENT Invalid argument(s). + */ +extern int tc_select_external_clock(volatile avr32_tc_t *tc, unsigned int channel, unsigned int ext_clk_sig_src); + +/*! \brief Sets options for timer/counter capture initialization. + * + * \param tc Pointer to the TC instance to access. + * \param opt Options for capture mode. + * + * \retval 0 Success. + * \retval TC_INVALID_ARGUMENT Invalid argument(s). + */ +extern int tc_init_capture(volatile avr32_tc_t *tc, const tc_capture_opt_t *opt); + +/*! \brief Sets options for timer/counter waveform initialization. + * + * \param tc Pointer to the TC instance to access. + * \param opt Options for waveform generation. + * + * \retval 0 Success. + * \retval TC_INVALID_ARGUMENT Invalid argument(s). + */ +extern int tc_init_waveform(volatile avr32_tc_t *tc, const tc_waveform_opt_t *opt); + +/*! \brief Starts a timer/counter. + * + * \param tc Pointer to the TC instance to access. + * \param channel The TC instance channel to access. + * + * \retval 0 Success. + * \retval TC_INVALID_ARGUMENT Invalid argument(s). + */ +extern int tc_start(volatile avr32_tc_t *tc, unsigned int channel); + +/*! \brief Stops a timer/counter. + * + * \param tc Pointer to the TC instance to access. + * \param channel The TC instance channel to access. + * + * \retval 0 Success. + * \retval TC_INVALID_ARGUMENT Invalid argument(s). + */ +extern int tc_stop(volatile avr32_tc_t *tc, unsigned int channel); + +/*! \brief Performs a software trigger: the counter is reset and the clock is started. + * + * \param tc Pointer to the TC instance to access. + * \param channel The TC instance channel to access. + * + * \retval 0 Success. + * \retval TC_INVALID_ARGUMENT Invalid argument(s). + */ +extern int tc_software_trigger(volatile avr32_tc_t *tc, unsigned int channel); + +/*! \brief Asserts a SYNC signal to generate a software trigger and reset all channels. + * + * \param tc Pointer to the TC instance to access. + */ +extern void tc_sync_trigger(volatile avr32_tc_t *tc); + +/*! \brief Start all TC channels simultaneously. + * + * \param tc Pointer to the TC instance to access. + */ +extern void tc_sync_start(volatile avr32_tc_t *tc); + +/*! \brief Reads the status register. + * + * \param tc Pointer to the TC instance to access. + * \param channel The TC instance channel to access. + * + * \retval >=0 Status register value. + * \retval TC_INVALID_ARGUMENT Invalid argument(s). + */ +extern int tc_read_sr(volatile avr32_tc_t *tc, unsigned int channel); + +/*! \brief Reads the channel's TC counter and returns the value. + * + * \param tc Pointer to the TC instance to access. + * \param channel The TC instance channel to access. + * + * \retval >=0 TC counter value. + * \retval TC_INVALID_ARGUMENT Invalid argument(s). + */ +extern int tc_read_tc(volatile avr32_tc_t *tc, unsigned int channel); + +/*! \brief Reads the channel's RA register and returns the value. + * + * \param tc Pointer to the TC instance to access. + * \param channel The TC instance channel to access. + * + * \retval >=0 RA register value. + * \retval TC_INVALID_ARGUMENT Invalid argument(s). + */ +extern int tc_read_ra(volatile avr32_tc_t *tc, unsigned int channel); + +/*! \brief Reads the channel's RB register and returns the value. + * + * \param tc Pointer to the TC instance to access. + * \param channel The TC instance channel to access. + * + * \retval >=0 RB register value. + * \retval TC_INVALID_ARGUMENT Invalid argument(s). + */ +extern int tc_read_rb(volatile avr32_tc_t *tc, unsigned int channel); + +/*! \brief Reads the channel's RC register and returns the value. + * + * \param tc Pointer to the TC instance to access. + * \param channel The TC instance channel to access. + * + * \retval >=0 RC register value. + * \retval TC_INVALID_ARGUMENT Invalid argument(s). + */ +extern int tc_read_rc(volatile avr32_tc_t *tc, unsigned int channel); + +/*! \brief Writes a value to the channel's RA register. + * + * \param tc Pointer to the TC instance to access. + * \param channel The TC instance channel to access. + * \param value Value to write to the RA register. + * + * \retval >=0 Written value. + * \retval TC_INVALID_ARGUMENT Invalid argument(s). + */ +extern int tc_write_ra(volatile avr32_tc_t *tc, unsigned int channel, unsigned short value); + +/*! \brief Writes a value to the channel's RB register. + * + * \param tc Pointer to the TC instance to access. + * \param channel The TC instance channel to access. + * \param value Value to write to the RB register. + * + * \retval >=0 Written value. + * \retval TC_INVALID_ARGUMENT Invalid argument(s). + */ +extern int tc_write_rb(volatile avr32_tc_t *tc, unsigned int channel, unsigned short value); + +/*! \brief Writes a value to the channel's RC register. + * + * \param tc Pointer to the TC instance to access. + * \param channel The TC instance channel to access. + * \param value Value to write to the RC register. + * + * \retval >=0 Written value. + * \retval TC_INVALID_ARGUMENT Invalid argument(s). + */ +extern int tc_write_rc(volatile avr32_tc_t *tc, unsigned int channel, unsigned short value); + + +#endif // _TC_H_ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/USART/usart.c b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/USART/usart.c new file mode 100644 index 000000000..b95882a75 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/USART/usart.c @@ -0,0 +1,914 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief USART driver for AVR32 UC3. + * + * This file contains basic functions for the AVR32 USART, with support for all + * modes, settings and clock speeds. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with a USART module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#include "compiler.h" +#include "usart.h" + + +//------------------------------------------------------------------------------ +/*! \name Private Functions + */ +//! @{ + + +/*! \brief Checks if the USART is in multidrop mode. + * + * \param usart Base address of the USART instance. + * + * \return \c 1 if the USART is in multidrop mode, otherwise \c 0. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +static __inline__ int usart_mode_is_multidrop(volatile avr32_usart_t *usart) +{ + return ((usart->mr >> AVR32_USART_MR_PAR_OFFSET) & AVR32_USART_MR_PAR_MULTI) == AVR32_USART_MR_PAR_MULTI; +} + + +/*! \brief Calculates a clock divider (\e CD) and a fractional part (\e FP) for + * the USART asynchronous modes to generate a baud rate as close as + * possible to the baud rate set point. + * + * Baud rate calculation: + * \f$ Baudrate = \frac{SelectedClock}{Over \times (CD + \frac{FP}{8})} \f$, \e Over being 16 or 8. + * The maximal oversampling is selected if it allows to generate a baud rate close to the set point. + * + * \param usart Base address of the USART instance. + * \param baudrate Baud rate set point. + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + * \retval USART_SUCCESS Baud rate successfully initialized. + * \retval USART_INVALID_INPUT Baud rate set point is out of range for the given input clock frequency. + */ +static int usart_set_async_baudrate(volatile avr32_usart_t *usart, unsigned int baudrate, unsigned long pba_hz) +{ + unsigned int over = (pba_hz >= 16 * baudrate) ? 16 : 8; + unsigned int cd_fp = ((1 << AVR32_USART_BRGR_FP_SIZE) * pba_hz + (over * baudrate) / 2) / (over * baudrate); + unsigned int cd = cd_fp >> AVR32_USART_BRGR_FP_SIZE; + unsigned int fp = cd_fp & ((1 << AVR32_USART_BRGR_FP_SIZE) - 1); + + if (cd < 1 || cd > (1 << AVR32_USART_BRGR_CD_SIZE) - 1) + return USART_INVALID_INPUT; + + usart->mr = (usart->mr & ~(AVR32_USART_MR_USCLKS_MASK | + AVR32_USART_MR_SYNC_MASK | + AVR32_USART_MR_OVER_MASK)) | + AVR32_USART_MR_USCLKS_MCK << AVR32_USART_MR_USCLKS_OFFSET | + ((over == 16) ? AVR32_USART_MR_OVER_X16 : AVR32_USART_MR_OVER_X8) << AVR32_USART_MR_OVER_OFFSET; + + usart->brgr = cd << AVR32_USART_BRGR_CD_OFFSET | + fp << AVR32_USART_BRGR_FP_OFFSET; + + return USART_SUCCESS; +} + + +/*! \brief Calculates a clock divider (\e CD) for the USART synchronous master + * modes to generate a baud rate as close as possible to the baud rate + * set point. + * + * Baud rate calculation: + * \f$ Baudrate = \frac{SelectedClock}{CD} \f$. + * + * \param usart Base address of the USART instance. + * \param baudrate Baud rate set point. + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + * \retval USART_SUCCESS Baud rate successfully initialized. + * \retval USART_INVALID_INPUT Baud rate set point is out of range for the given input clock frequency. + */ +static int usart_set_sync_master_baudrate(volatile avr32_usart_t *usart, unsigned int baudrate, unsigned long pba_hz) +{ + unsigned int cd = (pba_hz + baudrate / 2) / baudrate; + + if (cd < 1 || cd > (1 << AVR32_USART_BRGR_CD_SIZE) - 1) + return USART_INVALID_INPUT; + + usart->mr = (usart->mr & ~AVR32_USART_MR_USCLKS_MASK) | + AVR32_USART_MR_USCLKS_MCK << AVR32_USART_MR_USCLKS_OFFSET | + AVR32_USART_MR_SYNC_MASK; + + usart->brgr = cd << AVR32_USART_BRGR_CD_OFFSET; + + return USART_SUCCESS; +} + + +/*! \brief Selects the SCK pin as the source of baud rate for the USART + * synchronous slave modes. + * + * \param usart Base address of the USART instance. + * + * \retval USART_SUCCESS Baud rate successfully initialized. + */ +static int usart_set_sync_slave_baudrate(volatile avr32_usart_t *usart) +{ + usart->mr = (usart->mr & ~AVR32_USART_MR_USCLKS_MASK) | + AVR32_USART_MR_USCLKS_SCK << AVR32_USART_MR_USCLKS_OFFSET | + AVR32_USART_MR_SYNC_MASK; + + return USART_SUCCESS; +} + + +/*! \brief Calculates a clock divider (\e CD) for the USART ISO7816 mode to + * generate an ISO7816 clock as close as possible to the clock set point. + * + * ISO7816 clock calculation: + * \f$ Clock = \frac{SelectedClock}{CD} \f$. + * + * \param usart Base address of the USART instance. + * \param clock ISO7816 clock set point. + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + * \retval USART_SUCCESS ISO7816 clock successfully initialized. + * \retval USART_INVALID_INPUT ISO7816 clock set point is out of range for the given input clock frequency. + */ +static int usart_set_iso7816_clock(volatile avr32_usart_t *usart, unsigned int clock, unsigned long pba_hz) +{ + unsigned int cd = (pba_hz + clock / 2) / clock; + + if (cd < 1 || cd > (1 << AVR32_USART_BRGR_CD_SIZE) - 1) + return USART_INVALID_INPUT; + + usart->mr = (usart->mr & ~(AVR32_USART_MR_USCLKS_MASK | + AVR32_USART_MR_SYNC_MASK | + AVR32_USART_MR_OVER_MASK)) | + AVR32_USART_MR_USCLKS_MCK << AVR32_USART_MR_USCLKS_OFFSET | + AVR32_USART_MR_OVER_X16 << AVR32_USART_MR_OVER_OFFSET; + + usart->brgr = cd << AVR32_USART_BRGR_CD_OFFSET; + + return USART_SUCCESS; +} + + +#if defined(AVR32_USART_400_H_INCLUDED) || \ + defined(AVR32_USART_410_H_INCLUDED) || \ + defined(AVR32_USART_420_H_INCLUDED) || \ + defined(AVR32_USART_440_H_INCLUDED) || \ + defined(AVR32_USART_602_H_INCLUDED) + + +/*! \brief Calculates a clock divider (\e CD) for the USART SPI master mode to + * generate a baud rate as close as possible to the baud rate set point. + * + * Baud rate calculation: + * \f$ Baudrate = \frac{SelectedClock}{CD} \f$. + * + * \param usart Base address of the USART instance. + * \param baudrate Baud rate set point. + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + * \retval USART_SUCCESS Baud rate successfully initialized. + * \retval USART_INVALID_INPUT Baud rate set point is out of range for the given input clock frequency. + */ +static int usart_set_spi_master_baudrate(volatile avr32_usart_t *usart, unsigned int baudrate, unsigned long pba_hz) +{ + unsigned int cd = (pba_hz + baudrate / 2) / baudrate; + + if (cd < 4 || cd > (1 << AVR32_USART_BRGR_CD_SIZE) - 1) + return USART_INVALID_INPUT; + + usart->mr = (usart->mr & ~AVR32_USART_MR_USCLKS_MASK) | + AVR32_USART_MR_USCLKS_MCK << AVR32_USART_MR_USCLKS_OFFSET; + + usart->brgr = cd << AVR32_USART_BRGR_CD_OFFSET; + + return USART_SUCCESS; +} + + +/*! \brief Selects the SCK pin as the source of baud rate for the USART SPI + * slave mode. + * + * \param usart Base address of the USART instance. + * + * \retval USART_SUCCESS Baud rate successfully initialized. + */ +static int usart_set_spi_slave_baudrate(volatile avr32_usart_t *usart) +{ + usart->mr = (usart->mr & ~AVR32_USART_MR_USCLKS_MASK) | + AVR32_USART_MR_USCLKS_SCK << AVR32_USART_MR_USCLKS_OFFSET; + + return USART_SUCCESS; +} + + +#endif // USART rev. >= 4.0.0 + + +//! @} + + +//------------------------------------------------------------------------------ +/*! \name Initialization Functions + */ +//! @{ + + +void usart_reset(volatile avr32_usart_t *usart) +{ + Bool global_interrupt_enabled = Is_global_interrupt_enabled(); + + // Disable all USART interrupts. + // Interrupts needed should be set explicitly on every reset. + if (global_interrupt_enabled) Disable_global_interrupt(); + usart->idr = 0xFFFFFFFF; + usart->csr; + if (global_interrupt_enabled) Enable_global_interrupt(); + + // Reset mode and other registers that could cause unpredictable behavior after reset. + usart->mr = 0; + usart->rtor = 0; + usart->ttgr = 0; + + // Shutdown TX and RX (will be re-enabled when setup has successfully completed), + // reset status bits and turn off DTR and RTS. + usart->cr = AVR32_USART_CR_RSTRX_MASK | + AVR32_USART_CR_RSTTX_MASK | + AVR32_USART_CR_RSTSTA_MASK | + AVR32_USART_CR_RSTIT_MASK | + AVR32_USART_CR_RSTNACK_MASK | +#ifndef AVR32_USART_440_H_INCLUDED +// Note: Modem Signal Management DTR-DSR-DCD-RI are not included in USART rev.440. + AVR32_USART_CR_DTRDIS_MASK | +#endif + AVR32_USART_CR_RTSDIS_MASK; +} + + +int usart_init_rs232(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz) +{ + // Reset the USART and shutdown TX and RX. + usart_reset(usart); + + // Check input values. + if (!opt || // Null pointer. + opt->charlength < 5 || opt->charlength > 9 || + opt->paritytype > 7 || + opt->stopbits > 2 + 255 || + opt->channelmode > 3 || + usart_set_async_baudrate(usart, opt->baudrate, pba_hz) == USART_INVALID_INPUT) + return USART_INVALID_INPUT; + + if (opt->charlength == 9) + { + // Character length set to 9 bits. MODE9 dominates CHRL. + usart->mr |= AVR32_USART_MR_MODE9_MASK; + } + else + { + // CHRL gives the character length (- 5) when MODE9 = 0. + usart->mr |= (opt->charlength - 5) << AVR32_USART_MR_CHRL_OFFSET; + } + + usart->mr |= opt->paritytype << AVR32_USART_MR_PAR_OFFSET | + opt->channelmode << AVR32_USART_MR_CHMODE_OFFSET; + + if (opt->stopbits > USART_2_STOPBITS) + { + // Set two stop bits + usart->mr |= AVR32_USART_MR_NBSTOP_2 << AVR32_USART_MR_NBSTOP_OFFSET; + // and a timeguard period gives the rest. + usart->ttgr = opt->stopbits - USART_2_STOPBITS; + } + else + // Insert 1, 1.5 or 2 stop bits. + usart->mr |= opt->stopbits << AVR32_USART_MR_NBSTOP_OFFSET; + + // Set normal mode. + usart->mr = (usart->mr & ~AVR32_USART_MR_MODE_MASK) | + AVR32_USART_MR_MODE_NORMAL << AVR32_USART_MR_MODE_OFFSET; + + // Setup complete; enable communication. + // Enable input and output. + usart->cr = AVR32_USART_CR_RXEN_MASK | + AVR32_USART_CR_TXEN_MASK; + + return USART_SUCCESS; +} + + +int usart_init_rs232_tx_only(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz) +{ + // Reset the USART and shutdown TX and RX. + usart_reset(usart); + + // Check input values. + if (!opt || // Null pointer. + opt->charlength < 5 || opt->charlength > 9 || + opt->paritytype > 7 || + opt->stopbits == 1 || opt->stopbits > 2 + 255 || + opt->channelmode > 3 || + usart_set_sync_master_baudrate(usart, opt->baudrate, pba_hz) == USART_INVALID_INPUT) + return USART_INVALID_INPUT; + + if (opt->charlength == 9) + { + // Character length set to 9 bits. MODE9 dominates CHRL. + usart->mr |= AVR32_USART_MR_MODE9_MASK; + } + else + { + // CHRL gives the character length (- 5) when MODE9 = 0. + usart->mr |= (opt->charlength - 5) << AVR32_USART_MR_CHRL_OFFSET; + } + + usart->mr |= opt->paritytype << AVR32_USART_MR_PAR_OFFSET | + opt->channelmode << AVR32_USART_MR_CHMODE_OFFSET; + + if (opt->stopbits > USART_2_STOPBITS) + { + // Set two stop bits + usart->mr |= AVR32_USART_MR_NBSTOP_2 << AVR32_USART_MR_NBSTOP_OFFSET; + // and a timeguard period gives the rest. + usart->ttgr = opt->stopbits - USART_2_STOPBITS; + } + else + // Insert 1 or 2 stop bits. + usart->mr |= opt->stopbits << AVR32_USART_MR_NBSTOP_OFFSET; + + // Set normal mode. + usart->mr = (usart->mr & ~AVR32_USART_MR_MODE_MASK) | + AVR32_USART_MR_MODE_NORMAL << AVR32_USART_MR_MODE_OFFSET; + + // Setup complete; enable communication. + // Enable only output as input is not possible in synchronous mode without + // transferring clock. + usart->cr = AVR32_USART_CR_TXEN_MASK; + + return USART_SUCCESS; +} + + +int usart_init_hw_handshaking(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz) +{ + // First: Setup standard RS232. + if (usart_init_rs232(usart, opt, pba_hz) == USART_INVALID_INPUT) + return USART_INVALID_INPUT; + + // Set hardware handshaking mode. + usart->mr = (usart->mr & ~AVR32_USART_MR_MODE_MASK) | + AVR32_USART_MR_MODE_HARDWARE << AVR32_USART_MR_MODE_OFFSET; + + return USART_SUCCESS; +} + + +int usart_init_modem(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz) +{ + // First: Setup standard RS232. + if (usart_init_rs232(usart, opt, pba_hz) == USART_INVALID_INPUT) + return USART_INVALID_INPUT; + + // Set modem mode. + usart->mr = (usart->mr & ~AVR32_USART_MR_MODE_MASK) | + AVR32_USART_MR_MODE_MODEM << AVR32_USART_MR_MODE_OFFSET; + + return USART_SUCCESS; +} + + +int usart_init_sync_master(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz) +{ + // Reset the USART and shutdown TX and RX. + usart_reset(usart); + + // Check input values. + if (!opt || // Null pointer. + opt->charlength < 5 || opt->charlength > 9 || + opt->paritytype > 7 || + opt->stopbits == 1 || opt->stopbits > 2 + 255 || + opt->channelmode > 3 || + usart_set_sync_master_baudrate(usart, opt->baudrate, pba_hz) == USART_INVALID_INPUT) + return USART_INVALID_INPUT; + + if (opt->charlength == 9) + { + // Character length set to 9 bits. MODE9 dominates CHRL. + usart->mr |= AVR32_USART_MR_MODE9_MASK; + } + else + { + // CHRL gives the character length (- 5) when MODE9 = 0. + usart->mr |= (opt->charlength - 5) << AVR32_USART_MR_CHRL_OFFSET; + } + + usart->mr |= opt->paritytype << AVR32_USART_MR_PAR_OFFSET | + opt->channelmode << AVR32_USART_MR_CHMODE_OFFSET; + + if (opt->stopbits > USART_2_STOPBITS) + { + // Set two stop bits + usart->mr |= AVR32_USART_MR_NBSTOP_2 << AVR32_USART_MR_NBSTOP_OFFSET; + // and a timeguard period gives the rest. + usart->ttgr = opt->stopbits - USART_2_STOPBITS; + } + else + // Insert 1 or 2 stop bits. + usart->mr |= opt->stopbits << AVR32_USART_MR_NBSTOP_OFFSET; + + // Set normal mode. + usart->mr = (usart->mr & ~AVR32_USART_MR_MODE_MASK) | + AVR32_USART_MR_MODE_NORMAL << AVR32_USART_MR_MODE_OFFSET | + AVR32_USART_MR_CLKO_MASK; + + // Setup complete; enable communication. + // Enable input and output. + usart->cr = AVR32_USART_CR_RXEN_MASK | + AVR32_USART_CR_TXEN_MASK; + + return USART_SUCCESS; +} + + +int usart_init_sync_slave(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz) +{ + // Reset the USART and shutdown TX and RX. + usart_reset(usart); + + // Check input values. + if (!opt || // Null pointer. + opt->charlength < 5 || opt->charlength > 9 || + opt->paritytype > 7 || + opt->stopbits == 1 || opt->stopbits > 2 + 255 || + opt->channelmode > 3 || + usart_set_sync_slave_baudrate(usart) == USART_INVALID_INPUT) + return USART_INVALID_INPUT; + + if (opt->charlength == 9) + { + // Character length set to 9 bits. MODE9 dominates CHRL. + usart->mr |= AVR32_USART_MR_MODE9_MASK; + } + else + { + // CHRL gives the character length (- 5) when MODE9 = 0. + usart->mr |= (opt->charlength - 5) << AVR32_USART_MR_CHRL_OFFSET; + } + + usart->mr |= opt->paritytype << AVR32_USART_MR_PAR_OFFSET | + opt->channelmode << AVR32_USART_MR_CHMODE_OFFSET; + + if (opt->stopbits > USART_2_STOPBITS) + { + // Set two stop bits + usart->mr |= AVR32_USART_MR_NBSTOP_2 << AVR32_USART_MR_NBSTOP_OFFSET; + // and a timeguard period gives the rest. + usart->ttgr = opt->stopbits - USART_2_STOPBITS; + } + else + // Insert 1 or 2 stop bits. + usart->mr |= opt->stopbits << AVR32_USART_MR_NBSTOP_OFFSET; + + // Set normal mode. + usart->mr = (usart->mr & ~AVR32_USART_MR_MODE_MASK) | + AVR32_USART_MR_MODE_NORMAL << AVR32_USART_MR_MODE_OFFSET; + + // Setup complete; enable communication. + // Enable input and output. + usart->cr = AVR32_USART_CR_RXEN_MASK | + AVR32_USART_CR_TXEN_MASK; + + return USART_SUCCESS; +} + + +int usart_init_rs485(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz) +{ + // First: Setup standard RS232. + if (usart_init_rs232(usart, opt, pba_hz) == USART_INVALID_INPUT) + return USART_INVALID_INPUT; + + // Set RS485 mode. + usart->mr = (usart->mr & ~AVR32_USART_MR_MODE_MASK) | + AVR32_USART_MR_MODE_RS485 << AVR32_USART_MR_MODE_OFFSET; + + return USART_SUCCESS; +} + + +int usart_init_IrDA(volatile avr32_usart_t *usart, const usart_options_t *opt, + long pba_hz, unsigned char irda_filter) +{ + // First: Setup standard RS232. + if (usart_init_rs232(usart, opt, pba_hz) == USART_INVALID_INPUT) + return USART_INVALID_INPUT; + + // Set IrDA filter. + usart->ifr = irda_filter; + + // Set IrDA mode and activate filtering of input. + usart->mr = (usart->mr & ~AVR32_USART_MR_MODE_MASK) | + AVR32_USART_MODE_IRDA << AVR32_USART_MR_MODE_OFFSET | + AVR32_USART_MR_FILTER_MASK; + + return USART_SUCCESS; +} + + +int usart_init_iso7816(volatile avr32_usart_t *usart, const usart_iso7816_options_t *opt, int t, long pba_hz) +{ + // Reset the USART and shutdown TX and RX. + usart_reset(usart); + + // Check input values. + if (!opt || // Null pointer. + opt->paritytype > 1) + return USART_INVALID_INPUT; + + if (t == 0) + { + // Set USART mode to ISO7816, T=0. + // The T=0 protocol always uses 2 stop bits. + usart->mr = AVR32_USART_MR_MODE_ISO7816_T0 << AVR32_USART_MR_MODE_OFFSET | + AVR32_USART_MR_NBSTOP_2 << AVR32_USART_MR_NBSTOP_OFFSET | + opt->bit_order << AVR32_USART_MR_MSBF_OFFSET; // Allow MSBF in T=0. + } + else if (t == 1) + { + // Only LSB first in the T=1 protocol. + // max_iterations field is only used in T=0 mode. + if (opt->bit_order != 0 || + opt->max_iterations != 0) + return USART_INVALID_INPUT; + + // Set USART mode to ISO7816, T=1. + // The T=1 protocol always uses 1 stop bit. + usart->mr = AVR32_USART_MR_MODE_ISO7816_T1 << AVR32_USART_MR_MODE_OFFSET | + AVR32_USART_MR_NBSTOP_1 << AVR32_USART_MR_NBSTOP_OFFSET; + } + else + return USART_INVALID_INPUT; + + if (usart_set_iso7816_clock(usart, opt->iso7816_hz, pba_hz) == USART_INVALID_INPUT) + return USART_INVALID_INPUT; + + // Set FIDI register: bit rate = selected clock/FI_DI_ratio/16. + usart->fidi = opt->fidi_ratio; + + // Set ISO7816 spesific options in the MODE register. + usart->mr |= opt->paritytype << AVR32_USART_MR_PAR_OFFSET | + AVR32_USART_MR_CLKO_MASK | // Enable clock output. + opt->inhibit_nack << AVR32_USART_MR_INACK_OFFSET | + opt->dis_suc_nack << AVR32_USART_MR_DSNACK_OFFSET | + opt->max_iterations << AVR32_USART_MR_MAX_ITERATION_OFFSET; + + // Setup complete; enable the receiver by default. + usart_iso7816_enable_receiver(usart); + + return USART_SUCCESS; +} + + +#if defined(AVR32_USART_400_H_INCLUDED) || \ + defined(AVR32_USART_410_H_INCLUDED) || \ + defined(AVR32_USART_420_H_INCLUDED) || \ + defined(AVR32_USART_440_H_INCLUDED) || \ + defined(AVR32_USART_602_H_INCLUDED) + + +int usart_init_lin_master(volatile avr32_usart_t *usart, unsigned long baudrate, long pba_hz) +{ + // Reset the USART and shutdown TX and RX. + usart_reset(usart); + + // Check input values. + if (usart_set_async_baudrate(usart, baudrate, pba_hz) == USART_INVALID_INPUT) + return USART_INVALID_INPUT; + + usart->mr |= AVR32_USART_MR_MODE_LIN_MASTER << AVR32_USART_MR_MODE_OFFSET; // LIN master mode. + + // Setup complete; enable communication. + // Enable input and output. + usart->cr = AVR32_USART_CR_RXEN_MASK | + AVR32_USART_CR_TXEN_MASK; + + return USART_SUCCESS; +} + + +int usart_init_lin_slave(volatile avr32_usart_t *usart, unsigned long baudrate, long pba_hz) +{ + // Reset the USART and shutdown TX and RX. + usart_reset(usart); + + // Check input values. + if (usart_set_async_baudrate(usart, baudrate, pba_hz) == USART_INVALID_INPUT) + return USART_INVALID_INPUT; + + usart->mr |= AVR32_USART_MR_MODE_LIN_SLAVE << AVR32_USART_MR_MODE_OFFSET; // LIN slave mode. + + // Setup complete; enable communication. + // Enable input and output. + usart->cr = AVR32_USART_CR_RXEN_MASK | + AVR32_USART_CR_TXEN_MASK; + + return USART_SUCCESS; +} + + +int usart_init_spi_master(volatile avr32_usart_t *usart, const usart_spi_options_t *opt, long pba_hz) +{ + // Reset the USART and shutdown TX and RX. + usart_reset(usart); + + // Check input values. + if (!opt || // Null pointer. + opt->charlength < 5 || opt->charlength > 9 || + opt->spimode > 3 || + opt->channelmode > 3 || + usart_set_spi_master_baudrate(usart, opt->baudrate, pba_hz) == USART_INVALID_INPUT) + return USART_INVALID_INPUT; + + if (opt->charlength == 9) + { + // Character length set to 9 bits. MODE9 dominates CHRL. + usart->mr |= AVR32_USART_MR_MODE9_MASK; + } + else + { + // CHRL gives the character length (- 5) when MODE9 = 0. + usart->mr |= (opt->charlength - 5) << AVR32_USART_MR_CHRL_OFFSET; + } + + usart->mr |= AVR32_USART_MR_MODE_SPI_MASTER << AVR32_USART_MR_MODE_OFFSET | // SPI master mode. + ((opt->spimode & 0x1) ^ 0x1) << AVR32_USART_MR_SYNC_OFFSET | // SPI clock phase. + opt->channelmode << AVR32_USART_MR_CHMODE_OFFSET | // Channel mode. + (opt->spimode >> 1) << AVR32_USART_MR_MSBF_OFFSET | // SPI clock polarity. + AVR32_USART_MR_CLKO_MASK; // Drive SCK pin. + + // Setup complete; enable communication. + // Enable input and output. + usart->cr = AVR32_USART_CR_RXEN_MASK | + AVR32_USART_CR_TXEN_MASK; + + return USART_SUCCESS; +} + + +int usart_init_spi_slave(volatile avr32_usart_t *usart, const usart_spi_options_t *opt, long pba_hz) +{ + // Reset the USART and shutdown TX and RX. + usart_reset(usart); + + // Check input values. + if (!opt || // Null pointer. + opt->charlength < 5 || opt->charlength > 9 || + opt->spimode > 3 || + opt->channelmode > 3 || + usart_set_spi_slave_baudrate(usart) == USART_INVALID_INPUT) + return USART_INVALID_INPUT; + + if (opt->charlength == 9) + { + // Character length set to 9 bits. MODE9 dominates CHRL. + usart->mr |= AVR32_USART_MR_MODE9_MASK; + } + else + { + // CHRL gives the character length (- 5) when MODE9 = 0. + usart->mr |= (opt->charlength - 5) << AVR32_USART_MR_CHRL_OFFSET; + } + + usart->mr |= AVR32_USART_MR_MODE_SPI_SLAVE << AVR32_USART_MR_MODE_OFFSET | // SPI slave mode. + ((opt->spimode & 0x1) ^ 0x1) << AVR32_USART_MR_SYNC_OFFSET | // SPI clock phase. + opt->channelmode << AVR32_USART_MR_CHMODE_OFFSET | // Channel mode. + (opt->spimode >> 1) << AVR32_USART_MR_MSBF_OFFSET; // SPI clock polarity. + + // Setup complete; enable communication. + // Enable input and output. + usart->cr = AVR32_USART_CR_RXEN_MASK | + AVR32_USART_CR_TXEN_MASK; + + return USART_SUCCESS; +} + + +#endif // USART rev. >= 4.0.0 + + +//! @} + + +//------------------------------------------------------------------------------ +#if defined(AVR32_USART_400_H_INCLUDED) || \ + defined(AVR32_USART_410_H_INCLUDED) || \ + defined(AVR32_USART_420_H_INCLUDED) || \ + defined(AVR32_USART_440_H_INCLUDED) || \ + defined(AVR32_USART_602_H_INCLUDED) + + +/*! \name SPI Control Functions + */ +//! @{ + + +int usart_spi_selectChip(volatile avr32_usart_t *usart) +{ + // Force the SPI chip select. + usart->cr = AVR32_USART_CR_RTSEN_MASK; + + return USART_SUCCESS; +} + + +int usart_spi_unselectChip(volatile avr32_usart_t *usart) +{ + int timeout = USART_DEFAULT_TIMEOUT; + + do + { + if (!timeout--) return USART_FAILURE; + } while (!usart_tx_empty(usart)); + + // Release the SPI chip select. + usart->cr = AVR32_USART_CR_RTSDIS_MASK; + + return USART_SUCCESS; +} + + +//! @} + + +#endif // USART rev. >= 4.0.0 + + +//------------------------------------------------------------------------------ +/*! \name Transmit/Receive Functions + */ +//! @{ + + +int usart_send_address(volatile avr32_usart_t *usart, int address) +{ + // Check if USART is in multidrop / RS485 mode. + if (!usart_mode_is_multidrop(usart)) return USART_MODE_FAULT; + + // Prepare to send an address. + usart->cr = AVR32_USART_CR_SENDA_MASK; + + // Write the address to TX. + usart_bw_write_char(usart, address); + + return USART_SUCCESS; +} + + +int usart_write_char(volatile avr32_usart_t *usart, int c) +{ + if (usart_tx_ready(usart)) + { + usart->thr = (c << AVR32_USART_THR_TXCHR_OFFSET) & AVR32_USART_THR_TXCHR_MASK; + return USART_SUCCESS; + } + else + return USART_TX_BUSY; +} + + +int usart_putchar(volatile avr32_usart_t *usart, int c) +{ + int timeout = USART_DEFAULT_TIMEOUT; + + if (c == '\n') + { + do + { + if (!timeout--) return USART_FAILURE; + } while (usart_write_char(usart, '\r') != USART_SUCCESS); + + timeout = USART_DEFAULT_TIMEOUT; + } + + do + { + if (!timeout--) return USART_FAILURE; + } while (usart_write_char(usart, c) != USART_SUCCESS); + + return USART_SUCCESS; +} + + +int usart_read_char(volatile avr32_usart_t *usart, int *c) +{ + // Check for errors: frame, parity and overrun. In RS485 mode, a parity error + // would mean that an address char has been received. + if (usart->csr & (AVR32_USART_CSR_OVRE_MASK | + AVR32_USART_CSR_FRAME_MASK | + AVR32_USART_CSR_PARE_MASK)) + return USART_RX_ERROR; + + // No error; if we really did receive a char, read it and return SUCCESS. + if (usart_test_hit(usart)) + { + *c = (usart->rhr & AVR32_USART_RHR_RXCHR_MASK) >> AVR32_USART_RHR_RXCHR_OFFSET; + return USART_SUCCESS; + } + else + return USART_RX_EMPTY; +} + + +int usart_getchar(volatile avr32_usart_t *usart) +{ + int c, ret; + + while ((ret = usart_read_char(usart, &c)) == USART_RX_EMPTY); + + if (ret == USART_RX_ERROR) + return USART_FAILURE; + + return c; +} + + +void usart_write_line(volatile avr32_usart_t *usart, const char *string) +{ + while (*string != '\0') + usart_putchar(usart, *string++); +} + + +int usart_get_echo_line(volatile avr32_usart_t *usart) +{ + int rx_char; + int retval = USART_SUCCESS; + + while (1) + { + rx_char = usart_getchar(usart); + if (rx_char == USART_FAILURE) + { + usart_write_line(usart, "Error!!!\n"); + retval = USART_FAILURE; + break; + } + if (rx_char == '\x03') + { + retval = USART_FAILURE; + break; + } + usart_putchar(usart, rx_char); + if (rx_char == '\r') + { + usart_putchar(usart, '\n'); + break; + } + } + + return retval; +} + + +//! @} diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/USART/usart.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/USART/usart.h new file mode 100644 index 000000000..bc1c100f8 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/USART/usart.h @@ -0,0 +1,889 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief USART driver for AVR32 UC3. + * + * This file contains basic functions for the AVR32 USART, with support for all + * modes, settings and clock speeds. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with a USART module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _USART_H_ +#define _USART_H_ + +#include +#include "compiler.h" + + +/*! \name Return Values + */ +//! @{ +#define USART_SUCCESS 0 //!< Successful completion. +#define USART_FAILURE -1 //!< Failure because of some unspecified reason. +#define USART_INVALID_INPUT 1 //!< Input value out of range. +#define USART_INVALID_ARGUMENT -1 //!< Argument value out of range. +#define USART_TX_BUSY 2 //!< Transmitter was busy. +#define USART_RX_EMPTY 3 //!< Nothing was received. +#define USART_RX_ERROR 4 //!< Transmission error occurred. +#define USART_MODE_FAULT 5 //!< USART not in the appropriate mode. +//! @} + +//! Default time-out value (number of attempts). +#define USART_DEFAULT_TIMEOUT 10000 + +/*! \name Parity Settings + */ +//! @{ +#define USART_EVEN_PARITY AVR32_USART_MR_PAR_EVEN //!< Use even parity on character transmission. +#define USART_ODD_PARITY AVR32_USART_MR_PAR_ODD //!< Use odd parity on character transmission. +#define USART_SPACE_PARITY AVR32_USART_MR_PAR_SPACE //!< Use a space as parity bit. +#define USART_MARK_PARITY AVR32_USART_MR_PAR_MARK //!< Use a mark as parity bit. +#define USART_NO_PARITY AVR32_USART_MR_PAR_NONE //!< Don't use a parity bit. +#define USART_MULTIDROP_PARITY AVR32_USART_MR_PAR_MULTI //!< Parity bit is used to flag address characters. +//! @} + +/*! \name Stop Bits Settings + */ +//! @{ +#define USART_1_STOPBIT AVR32_USART_MR_NBSTOP_1 //!< Use 1 stop bit. +#define USART_1_5_STOPBITS AVR32_USART_MR_NBSTOP_1_5 //!< Use 1.5 stop bits. +#define USART_2_STOPBITS AVR32_USART_MR_NBSTOP_2 //!< Use 2 stop bits (for more, just give the number of bits). +//! @} + +/*! \name Channel Modes + */ +//! @{ +#define USART_NORMAL_CHMODE AVR32_USART_MR_CHMODE_NORMAL //!< Normal communication. +#define USART_AUTO_ECHO AVR32_USART_MR_CHMODE_ECHO //!< Echo data. +#define USART_LOCAL_LOOPBACK AVR32_USART_MR_CHMODE_LOCAL_LOOP //!< Local loopback. +#define USART_REMOTE_LOOPBACK AVR32_USART_MR_CHMODE_REMOTE_LOOP //!< Remote loopback. +//! @} + +#if defined(AVR32_USART_400_H_INCLUDED) || \ + defined(AVR32_USART_410_H_INCLUDED) || \ + defined(AVR32_USART_420_H_INCLUDED) || \ + defined(AVR32_USART_440_H_INCLUDED) || \ + defined(AVR32_USART_602_H_INCLUDED) + +/*! \name LIN Node Actions + */ +//! @{ +#define USART_LIN_PUBLISH_ACTION AVR32_USART_LINMR_NACT_PUBLISH //!< The USART transmits the response. +#define USART_LIN_SUBSCRIBE_ACTION AVR32_USART_LINMR_NACT_SUBSCRIBE //!< The USART receives the response. +#define USART_LIN_IGNORE_ACTION AVR32_USART_LINMR_NACT_IGNORE //!< The USART does not transmit and does not receive the reponse. +//! @} + +/*! \name LIN Checksum Types + */ +//! @{ +#define USART_LIN_ENHANCED_CHECKSUM 0 //!< LIN 2.0 "enhanced" checksum. +#define USART_LIN_CLASSIC_CHECKSUM 1 //!< LIN 1.3 "classic" checksum. +//! @} + +#endif // USART rev. >= 4.0.0 + + +//! Input parameters when initializing RS232 and similar modes. +typedef struct +{ + //! Set baud rate of the USART (unused in slave modes). + unsigned long baudrate; + + //! Number of bits to transmit as a character (5 to 9). + unsigned char charlength; + + //! How to calculate the parity bit: \ref USART_EVEN_PARITY, \ref USART_ODD_PARITY, + //! \ref USART_SPACE_PARITY, \ref USART_MARK_PARITY, \ref USART_NO_PARITY or + //! \ref USART_MULTIDROP_PARITY. + unsigned char paritytype; + + //! Number of stop bits between two characters: \ref USART_1_STOPBIT, + //! \ref USART_1_5_STOPBITS, \ref USART_2_STOPBITS or any number from 3 to 257 + //! which will result in a time guard period of that length between characters. + //! \note \ref USART_1_5_STOPBITS is supported in asynchronous modes only. + unsigned short stopbits; + + //! Run the channel in testmode: \ref USART_NORMAL_CHMODE, \ref USART_AUTO_ECHO, + //! \ref USART_LOCAL_LOOPBACK or \ref USART_REMOTE_LOOPBACK. + unsigned char channelmode; +} usart_options_t; + +//! Input parameters when initializing ISO7816 mode. +typedef struct +{ + //! Set the frequency of the ISO7816 clock. + unsigned long iso7816_hz; + + //! The number of ISO7816 clock ticks in every bit period (1 to 2047, 0 = disable clock). + //! Bit rate = \ref iso7816_hz / \ref fidi_ratio. + unsigned short fidi_ratio; + + //! How to calculate the parity bit: \ref USART_EVEN_PARITY for normal mode or + //! \ref USART_ODD_PARITY for inverse mode. + unsigned char paritytype; + + //! Inhibit Non Acknowledge:\n + //! - 0: the NACK is generated;\n + //! - 1: the NACK is not generated. + //! + //! \note This bit will be used only in ISO7816 mode, protocol T = 0 receiver. + int inhibit_nack; + + //! Disable successive NACKs. + //! Successive parity errors are counted up to the value in the \ref max_iterations field. + //! These parity errors generate a NACK on the ISO line. As soon as this value is reached, + //! no addititional NACK is sent on the ISO line. The ITERATION flag is asserted. + int dis_suc_nack; + + //! Max number of repetitions (0 to 7). + unsigned char max_iterations; + + //! Bit order in transmitted characters:\n + //! - 0: LSB first;\n + //! - 1: MSB first. + int bit_order; +} usart_iso7816_options_t; + +#if defined(AVR32_USART_400_H_INCLUDED) || \ + defined(AVR32_USART_410_H_INCLUDED) || \ + defined(AVR32_USART_420_H_INCLUDED) || \ + defined(AVR32_USART_440_H_INCLUDED) || \ + defined(AVR32_USART_602_H_INCLUDED) + +//! Input parameters when initializing SPI mode. +typedef struct +{ + //! Set the frequency of the SPI clock (unused in slave mode). + unsigned long baudrate; + + //! Number of bits to transmit as a character (5 to 9). + unsigned char charlength; + + //! Which SPI mode to use. + unsigned char spimode; + + //! Run the channel in testmode: \ref USART_NORMAL_CHMODE, \ref USART_AUTO_ECHO, + //! \ref USART_LOCAL_LOOPBACK or \ref USART_REMOTE_LOOPBACK. + unsigned char channelmode; +} usart_spi_options_t; + +#endif // USART rev. >= 4.0.0 + + +//------------------------------------------------------------------------------ +/*! \name Initialization Functions + */ +//! @{ + +/*! \brief Resets the USART and disables TX and RX. + * + * \param usart Base address of the USART instance. + */ +extern void usart_reset(volatile avr32_usart_t *usart); + +/*! \brief Sets up the USART to use the standard RS232 protocol. + * + * \param usart Base address of the USART instance. + * \param opt Options needed to set up RS232 communication (see \ref usart_options_t). + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + * \retval USART_SUCCESS Mode successfully initialized. + * \retval USART_INVALID_INPUT One or more of the arguments is out of valid range. + */ +extern int usart_init_rs232(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz); + +/*! \brief Sets up the USART to use the standard RS232 protocol in TX-only mode. + * + * Compared to \ref usart_init_rs232, this function allows very high baud rates + * (up to \a pba_hz instead of \a pba_hz / \c 8) at the expense of full duplex. + * + * \param usart Base address of the USART instance. + * \param opt Options needed to set up RS232 communication (see \ref usart_options_t). + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + * \retval USART_SUCCESS Mode successfully initialized. + * \retval USART_INVALID_INPUT One or more of the arguments is out of valid range. + * + * \note The \c 1.5 stop bit is not supported in this mode. + */ +extern int usart_init_rs232_tx_only(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz); + +/*! \brief Sets up the USART to use hardware handshaking. + * + * \param usart Base address of the USART instance. + * \param opt Options needed to set up RS232 communication (see \ref usart_options_t). + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + * \retval USART_SUCCESS Mode successfully initialized. + * \retval USART_INVALID_INPUT One or more of the arguments is out of valid range. + * + * \note \ref usart_init_rs232 does not need to be invoked before this function. + */ +extern int usart_init_hw_handshaking(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz); + +/*! \brief Sets up the USART to use the modem protocol, activating dedicated inputs/outputs. + * + * \param usart Base address of the USART instance. + * \param opt Options needed to set up RS232 communication (see \ref usart_options_t). + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + * \retval USART_SUCCESS Mode successfully initialized. + * \retval USART_INVALID_INPUT One or more of the arguments is out of valid range. + */ +extern int usart_init_modem(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz); + +/*! \brief Sets up the USART to use a synchronous RS232-like protocol in master mode. + * + * \param usart Base address of the USART instance. + * \param opt Options needed to set up RS232 communication (see \ref usart_options_t). + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + * \retval USART_SUCCESS Mode successfully initialized. + * \retval USART_INVALID_INPUT One or more of the arguments is out of valid range. + */ +extern int usart_init_sync_master(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz); + +/*! \brief Sets up the USART to use a synchronous RS232-like protocol in slave mode. + * + * \param usart Base address of the USART instance. + * \param opt Options needed to set up RS232 communication (see \ref usart_options_t). + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + * \retval USART_SUCCESS Mode successfully initialized. + * \retval USART_INVALID_INPUT One or more of the arguments is out of valid range. + */ +extern int usart_init_sync_slave(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz); + +/*! \brief Sets up the USART to use the RS485 protocol. + * + * \param usart Base address of the USART instance. + * \param opt Options needed to set up RS232 communication (see \ref usart_options_t). + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + * \retval USART_SUCCESS Mode successfully initialized. + * \retval USART_INVALID_INPUT One or more of the arguments is out of valid range. + */ +extern int usart_init_rs485(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz); + +/*! \brief Sets up the USART to use the IrDA protocol. + * + * \param usart Base address of the USART instance. + * \param opt Options needed to set up RS232 communication (see \ref usart_options_t). + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * \param irda_filter Counter used to distinguish received ones from zeros. + * + * \retval USART_SUCCESS Mode successfully initialized. + * \retval USART_INVALID_INPUT One or more of the arguments is out of valid range. + */ +extern int usart_init_IrDA(volatile avr32_usart_t *usart, const usart_options_t *opt, + long pba_hz, unsigned char irda_filter); + +/*! \brief Sets up the USART to use the ISO7816 T=0 or T=1 smartcard protocols. + * + * The receiver is enabled by default. \ref usart_iso7816_enable_receiver and + * \ref usart_iso7816_enable_transmitter can be called to change the half-duplex + * communication direction. + * + * \param usart Base address of the USART instance. + * \param opt Options needed to set up ISO7816 communication (see \ref usart_iso7816_options_t). + * \param t ISO7816 mode to use (T=0 or T=1). + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + * \retval USART_SUCCESS Mode successfully initialized. + * \retval USART_INVALID_INPUT One or more of the arguments is out of valid range. + */ +extern int usart_init_iso7816(volatile avr32_usart_t *usart, const usart_iso7816_options_t *opt, int t, long pba_hz); + +#if defined(AVR32_USART_400_H_INCLUDED) || \ + defined(AVR32_USART_410_H_INCLUDED) || \ + defined(AVR32_USART_420_H_INCLUDED) || \ + defined(AVR32_USART_440_H_INCLUDED) || \ + defined(AVR32_USART_602_H_INCLUDED) + +/*! \brief Sets up the USART to use the LIN master mode. + * + * \param usart Base address of the USART instance. + * \param baudrate Baud rate. + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + */ +extern int usart_init_lin_master(volatile avr32_usart_t *usart, unsigned long baudrate, long pba_hz); + +/*! \brief Sets up the USART to use the LIN slave mode. + * + * \param usart Base address of the USART instance. + * \param baudrate Baud rate. + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + */ +extern int usart_init_lin_slave(volatile avr32_usart_t *usart, unsigned long baudrate, long pba_hz); + +/*! \brief Sets up the USART to use the SPI master mode. + * + * \ref usart_spi_selectChip and \ref usart_spi_unselectChip can be called to + * select or unselect the SPI slave chip. + * + * \param usart Base address of the USART instance. + * \param opt Options needed to set up SPI mode (see \ref usart_spi_options_t). + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + * \retval USART_SUCCESS Mode successfully initialized. + * \retval USART_INVALID_INPUT One or more of the arguments is out of valid range. + */ +extern int usart_init_spi_master(volatile avr32_usart_t *usart, const usart_spi_options_t *opt, long pba_hz); + +/*! \brief Sets up the USART to use the SPI slave mode. + * + * \param usart Base address of the USART instance. + * \param opt Options needed to set up SPI mode (see \ref usart_spi_options_t). + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + * \retval USART_SUCCESS Mode successfully initialized. + * \retval USART_INVALID_INPUT One or more of the arguments is out of valid range. + */ +extern int usart_init_spi_slave(volatile avr32_usart_t *usart, const usart_spi_options_t *opt, long pba_hz); + +#endif // USART rev. >= 4.0.0 + +//! @} + + +//------------------------------------------------------------------------------ +/*! \name Read and Reset Error Status Bits + */ +//! @{ + +/*! \brief Resets the error status. + * + * This function resets the status bits indicating that a parity error, + * framing error or overrun has occurred. The RXBRK bit, indicating + * a start/end of break condition on the RX line, is also reset. + * + * \param usart Base address of the USART instance. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void usart_reset_status(volatile avr32_usart_t *usart) +{ + usart->cr = AVR32_USART_CR_RSTSTA_MASK; +} + +/*! \brief Checks if a parity error has occurred since last status reset. + * + * \param usart Base address of the USART instance. + * + * \return \c 1 if a parity error has been detected, otherwise \c 0. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ int usart_parity_error(volatile avr32_usart_t *usart) +{ + return (usart->csr & AVR32_USART_CSR_PARE_MASK) != 0; +} + +/*! \brief Checks if a framing error has occurred since last status reset. + * + * \param usart Base address of the USART instance. + * + * \return \c 1 if a framing error has been detected, otherwise \c 0. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ int usart_framing_error(volatile avr32_usart_t *usart) +{ + return (usart->csr & AVR32_USART_CSR_FRAME_MASK) != 0; +} + +/*! \brief Checks if an overrun error has occurred since last status reset. + * + * \param usart Base address of the USART instance. + * + * \return \c 1 if a overrun error has been detected, otherwise \c 0. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ int usart_overrun_error(volatile avr32_usart_t *usart) +{ + return (usart->csr & AVR32_USART_CSR_OVRE_MASK) != 0; +} + +#if defined(AVR32_USART_400_H_INCLUDED) || \ + defined(AVR32_USART_410_H_INCLUDED) || \ + defined(AVR32_USART_420_H_INCLUDED) || \ + defined(AVR32_USART_440_H_INCLUDED) || \ + defined(AVR32_USART_602_H_INCLUDED) + +/*! \brief Get LIN Error Status + * + * \param usart Base address of the USART instance. + * + * \retval The binary value of the error field. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ int usart_lin_get_error(volatile avr32_usart_t *usart) +{ + return (usart->csr & (AVR32_USART_CSR_LINSNRE_MASK | + AVR32_USART_CSR_LINCE_MASK | + AVR32_USART_CSR_LINIPE_MASK | + AVR32_USART_CSR_LINISFE_MASK | + AVR32_USART_CSR_LINBE_MASK)) >> AVR32_USART_CSR_LINBE_OFFSET; +} + +#endif // USART rev. >= 4.0.0 + +//! @} + + +//------------------------------------------------------------------------------ +/*! \name ISO7816 Control Functions + */ +//! @{ + +/*! \brief Enables the ISO7816 receiver. + * + * The ISO7816 transmitter is disabled. + * + * \param usart Base address of the USART instance. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void usart_iso7816_enable_receiver(volatile avr32_usart_t *usart) +{ + usart->cr = AVR32_USART_CR_TXDIS_MASK | AVR32_USART_CR_RXEN_MASK; +} + +/*! \brief Enables the ISO7816 transmitter. + * + * The ISO7816 receiver is disabled. + * + * \param usart Base address of the USART instance. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void usart_iso7816_enable_transmitter(volatile avr32_usart_t *usart) +{ + usart->cr = AVR32_USART_CR_RXDIS_MASK | AVR32_USART_CR_TXEN_MASK; +} + +//! @} + + +//------------------------------------------------------------------------------ +#if defined(AVR32_USART_400_H_INCLUDED) || \ + defined(AVR32_USART_410_H_INCLUDED) || \ + defined(AVR32_USART_420_H_INCLUDED) || \ + defined(AVR32_USART_440_H_INCLUDED) || \ + defined(AVR32_USART_602_H_INCLUDED) + +/*! \name LIN Control Functions + */ +//! @{ + +/*! \brief Sets the node action. + * + * \param usart Base address of the USART instance. + * \param action The node action: \ref USART_LIN_PUBLISH_ACTION, + * \ref USART_LIN_SUBSCRIBE_ACTION or + * \ref USART_LIN_IGNORE_ACTION. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void usart_lin_set_node_action(volatile avr32_usart_t *usart, unsigned char action) +{ + usart->linmr = (usart->linmr & ~AVR32_USART_LINMR_NACT_MASK) | + action << AVR32_USART_LINMR_NACT_OFFSET; +} + +/*! \brief Enables or disables the Identifier parity. + * + * \param usart Base address of the USART instance. + * \param parity Whether to enable the Identifier parity: \c TRUE or \c FALSE. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void usart_lin_enable_parity(volatile avr32_usart_t *usart, unsigned char parity) +{ + usart->linmr = (usart->linmr & ~AVR32_USART_LINMR_PARDIS_MASK) | + !parity << AVR32_USART_LINMR_PARDIS_OFFSET; +} + +/*! \brief Enables or disables the checksum. + * + * \param usart Base address of the USART instance. + * \param parity Whether to enable the checksum: \c TRUE or \c FALSE. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void usart_lin_enable_checksum(volatile avr32_usart_t *usart, unsigned char checksum) +{ + usart->linmr = (usart->linmr & ~AVR32_USART_LINMR_CHKDIS_MASK) | + !checksum << AVR32_USART_LINMR_CHKDIS_OFFSET; +} + +/*! \brief Sets the checksum type. + * + * \param usart Base address of the USART instance. + * \param chktyp The checksum type: \ref USART_LIN_ENHANCED_CHEKSUM or + * \ref USART_LIN_CLASSIC_CHECKSUM. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void usart_lin_set_checksum(volatile avr32_usart_t *usart, unsigned char chktyp) +{ + usart->linmr = (usart->linmr & ~AVR32_USART_LINMR_CHKTYP_MASK) | + chktyp << AVR32_USART_LINMR_CHKTYP_OFFSET; +} + +/*! \brief Gets the response data length. + * + * \param usart Base address of the USART instance. + * + * \return The response data length. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ unsigned char usart_lin_get_data_length(volatile avr32_usart_t *usart) +{ + if (usart->linmr & AVR32_USART_LINMR_DLM_MASK) + { + unsigned char data_length = 1 << ((usart->linir >> (AVR32_USART_LINIR_IDCHR_OFFSET + 4)) & 0x03); + if (data_length == 1) + data_length = 2; + return data_length; + } + else + return ((usart->linmr & AVR32_USART_LINMR_DLC_MASK) >> AVR32_USART_LINMR_DLC_OFFSET) + 1; +} + +/*! \brief Sets the response data length for LIN 1.x. + * + * \param usart Base address of the USART instance. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void usart_lin_set_data_length_lin1x(volatile avr32_usart_t *usart) +{ + usart->linmr |= AVR32_USART_LINMR_DLM_MASK; +} + +/*! \brief Sets the response data length for LIN 2.x. + * + * \param usart Base address of the USART instance. + * \param data_length The response data length. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void usart_lin_set_data_length_lin2x(volatile avr32_usart_t *usart, unsigned char data_length) +{ + usart->linmr = (usart->linmr & ~(AVR32_USART_LINMR_DLC_MASK | + AVR32_USART_LINMR_DLM_MASK)) | + (data_length - 1) << AVR32_USART_LINMR_DLC_OFFSET; +} + +/*! \brief Enables or disables the frame slot mode. + * + * \param usart Base address of the USART instance. + * \param frameslot Whether to enable the frame slot mode: \c TRUE or + * \c FALSE. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void usart_lin_enable_frameslot(volatile avr32_usart_t *usart, unsigned char frameslot) +{ + usart->linmr = (usart->linmr & ~AVR32_USART_LINMR_FSDIS_MASK) | + !frameslot << AVR32_USART_LINMR_FSDIS_OFFSET; +} + +/*! \brief Gets the Identifier character. + * + * \param usart Base address of the USART instance. + * + * \return The Identifier character. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ unsigned char usart_lin_get_id_char(volatile avr32_usart_t *usart) +{ + return (usart->linir & AVR32_USART_LINIR_IDCHR_MASK) >> AVR32_USART_LINIR_IDCHR_OFFSET; +} + +/*! \brief Sets the Identifier character. + * + * \param usart Base address of the USART instance. + * \param id_char The Identifier character. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void usart_lin_set_id_char(volatile avr32_usart_t *usart, unsigned char id_char) +{ + usart->linir = (usart->linir & ~AVR32_USART_LINIR_IDCHR_MASK) | + id_char << AVR32_USART_LINIR_IDCHR_OFFSET; +} + +//! @} + +#endif // USART rev. >= 4.0.0 + + +//------------------------------------------------------------------------------ +#if defined(AVR32_USART_400_H_INCLUDED) || \ + defined(AVR32_USART_410_H_INCLUDED) || \ + defined(AVR32_USART_420_H_INCLUDED) || \ + defined(AVR32_USART_440_H_INCLUDED) || \ + defined(AVR32_USART_602_H_INCLUDED) + +/*! \name SPI Control Functions + */ +//! @{ + +/*! \brief Selects SPI slave chip. + * + * \param usart Base address of the USART instance. + * + * \retval USART_SUCCESS Success. + */ +extern int usart_spi_selectChip(volatile avr32_usart_t *usart); + +/*! \brief Unselects SPI slave chip. + * + * \param usart Base address of the USART instance. + * + * \retval USART_SUCCESS Success. + * \retval USART_FAILURE Time-out. + */ +extern int usart_spi_unselectChip(volatile avr32_usart_t *usart); + +//! @} + +#endif // USART rev. >= 4.0.0 + + +//------------------------------------------------------------------------------ +/*! \name Transmit/Receive Functions + */ +//! @{ + +/*! \brief Addresses a receiver. + * + * While in RS485 mode, receivers only accept data addressed to them. + * A packet/char with the address tag set has to precede any data. + * This function is used to address a receiver. This receiver should read + * all the following data, until an address packet addresses another receiver. + * + * \param usart Base address of the USART instance. + * \param address Address of the target device. + * + * \retval USART_SUCCESS Address successfully sent (if current mode is RS485). + * \retval USART_MODE_FAULT Wrong operating mode. + */ +extern int usart_send_address(volatile avr32_usart_t *usart, int address); + +/*! \brief Tests if the USART is ready to transmit a character. + * + * \param usart Base address of the USART instance. + * + * \return \c 1 if the USART Transmit Holding Register is free, otherwise \c 0. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ int usart_tx_ready(volatile avr32_usart_t *usart) +{ + return (usart->csr & AVR32_USART_CSR_TXRDY_MASK) != 0; +} + +/*! \brief Writes the given character to the TX buffer if the transmitter is ready. + * + * \param usart Base address of the USART instance. + * \param c The character (up to 9 bits) to transmit. + * + * \retval USART_SUCCESS The transmitter was ready. + * \retval USART_TX_BUSY The transmitter was busy. + */ +extern int usart_write_char(volatile avr32_usart_t *usart, int c); + +/*! \brief An active wait writing a character to the USART. + * + * \param usart Base address of the USART instance. + * \param c The character (up to 9 bits) to transmit. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void usart_bw_write_char(volatile avr32_usart_t *usart, int c) +{ + while (usart_write_char(usart, c) != USART_SUCCESS); +} + +/*! \brief Sends a character with the USART. + * + * \param usart Base address of the USART instance. + * \param c Character to write. + * + * \retval USART_SUCCESS The character was written. + * \retval USART_FAILURE The function timed out before the USART transmitter became ready to send. + */ +extern int usart_putchar(volatile avr32_usart_t *usart, int c); + +/*! \brief Tests if all requested USART transmissions are over. + * + * \param usart Base address of the USART instance. + * + * \return \c 1 if the USART Transmit Shift Register and the USART Transmit + * Holding Register are free, otherwise \c 0. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ int usart_tx_empty(volatile avr32_usart_t *usart) +{ + return (usart->csr & AVR32_USART_CSR_TXEMPTY_MASK) != 0; +} + +/*! \brief Tests if the USART contains a received character. + * + * \param usart Base address of the USART instance. + * + * \return \c 1 if the USART Receive Holding Register is full, otherwise \c 0. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ int usart_test_hit(volatile avr32_usart_t *usart) +{ + return (usart->csr & AVR32_USART_CSR_RXRDY_MASK) != 0; +} + +/*! \brief Checks the RX buffer for a received character, and stores it at the + * given memory location. + * + * \param usart Base address of the USART instance. + * \param c Pointer to the where the read character should be stored + * (must be at least short in order to accept 9-bit characters). + * + * \retval USART_SUCCESS The character was read successfully. + * \retval USART_RX_EMPTY The RX buffer was empty. + * \retval USART_RX_ERROR An error was deteceted. + */ +extern int usart_read_char(volatile avr32_usart_t *usart, int *c); + +/*! \brief Waits until a character is received, and returns it. + * + * \param usart Base address of the USART instance. + * + * \return The received character, or \ref USART_FAILURE upon error. + */ +extern int usart_getchar(volatile avr32_usart_t *usart); + +/*! \brief Writes one character string to the USART. + * + * \param usart Base address of the USART instance. + * \param string String to be written. + */ +extern void usart_write_line(volatile avr32_usart_t *usart, const char *string); + +/*! \brief Gets and echoes characters until end of line. + * + * \param usart Base address of the USART instance. + * + * \retval USART_SUCCESS Success. + * \retval USART_FAILURE Low-level error detected or ETX character received. + */ +extern int usart_get_echo_line(volatile avr32_usart_t *usart); + +#if defined(AVR32_USART_400_H_INCLUDED) || \ + defined(AVR32_USART_410_H_INCLUDED) || \ + defined(AVR32_USART_420_H_INCLUDED) || \ + defined(AVR32_USART_440_H_INCLUDED) || \ + defined(AVR32_USART_602_H_INCLUDED) + +/*! \brief Abort LIN transmission. + * + * \param usart Base address of the USART instance. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void usart_lin_abort(volatile avr32_usart_t *usart) +{ + usart->cr = AVR32_USART_LINABT_MASK; +} + +/*! \brief Tests if a LIN transfer has been completed. + * + * \param usart Base address of the USART instance. + * + * \return \c 1 if a LIN transfer has been completed, otherwise \c 0. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ int usart_lin_transfer_completed(volatile avr32_usart_t *usart) +{ + return (usart->csr & AVR32_USART_CSR_LINTC_MASK) != 0; +} + +#endif // USART rev. >= 4.0.0 + +//! @} + + +#endif // _USART_H_ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/DELAY/delay.c b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/DELAY/delay.c new file mode 100644 index 000000000..ad5ecca65 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/DELAY/delay.c @@ -0,0 +1,87 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ****************************************************************** + * + * \brief Management of the delays. + * + * This file manages the "delays", with or without an OS. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ***************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +//_____ I N C L U D E S ___________________________________________________ + +#include "delay.h" + + +//_____ M A C R O S ________________________________________________________ + + +//_____ D E F I N I T I O N S ______________________________________________ + +//! CPU frequency +#ifndef FREERTOS_USED +static unsigned long s_fcpu_hz; +#endif +#if (defined NUTOS_USED) +extern void NutSleep(unsigned long ms); +#endif + +//_____ D E C L A R A T I O N S ____________________________________________ + +void delay_init(unsigned long fcpu_hz) +{ +#ifndef FREERTOS_USED + s_fcpu_hz = fcpu_hz; +#endif +} + + +void delay_ms(unsigned long delay) +{ +#if (defined FREERTOS_USED) + vTaskDelay( (portTickType)TASK_DELAY_MS(delay) ); +#elif (defined NUTOS_USED) + NutSleep(delay); +#else + cpu_delay_ms(delay, s_fcpu_hz); +#endif +} diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/DELAY/delay.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/DELAY/delay.h new file mode 100644 index 000000000..28113267b --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/DELAY/delay.h @@ -0,0 +1,80 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief AT32UC3 delay management header file. + * + * This file contains definitions and services to handle "delays". + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 AT32UC3 devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _DELAY_H_ +#define _DELAY_H_ + +#include "compiler.h" +#ifdef FREERTOS_USED +# include "FreeRTOS.h" +# include "task.h" +#else +# include "cycle_counter.h" +#endif + + +/*! + * \brief Initialize the delay driver. + * + * \param fcpu_hz: CPU frequency in Hz. + */ +extern void delay_init(unsigned long fcpu_hz); + + +/*! + * \brief Waits during at least the specified delay (in millisecond) before returning. + * + * Note that in the case of FreeRTOS, the function will delay the current task for a given number of ms. + * + * \param delay: Number of millisecond to wait. + */ +extern void delay_ms(unsigned long delay); + + +#endif // _DELAY_H_ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/dhcp.c b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/dhcp.c new file mode 100644 index 000000000..8ef6c8426 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/dhcp.c @@ -0,0 +1,1724 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * Dynamic Host Configuration Protocol client + * + */ + +/* + * + * Copyright (c) 2001-2004 Leon Woestenberg + * Copyright (c) 2001-2004 Axon Digital Design B.V., The Netherlands. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is a contribution to the lwIP TCP/IP stack. + * The Swedish Institute of Computer Science and Adam Dunkels + * are specifically granted permission to redistribute this + * source code. + * + * Author: Leon Woestenberg + * + * This is a DHCP client for the lwIP TCP/IP stack. It aims to conform + * with RFC 2131 and RFC 2132. + * + * TODO: + * - Proper parsing of DHCP messages exploiting file/sname field overloading. + * - Add JavaDoc style documentation (API, internals). + * - Support for interfaces other than Ethernet (SLIP, PPP, ...) + * + * Please coordinate changes and requests with Leon Woestenberg + * + * + * Integration with your code: + * + * In lwip/dhcp.h + * #define DHCP_COARSE_TIMER_SECS (recommended 60 which is a minute) + * #define DHCP_FINE_TIMER_MSECS (recommended 500 which equals TCP coarse timer) + * + * Then have your application call dhcp_coarse_tmr() and + * dhcp_fine_tmr() on the defined intervals. + * + * dhcp_start(struct netif *netif); + * starts a DHCP client instance which configures the interface by + * obtaining an IP address lease and maintaining it. + * + * Use dhcp_release(netif) to end the lease and use dhcp_stop(netif) + * to remove the DHCP client. + * + */ + +#include "lwip/opt.h" + +#if LWIP_DHCP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/stats.h" +#include "lwip/mem.h" +#include "lwip/udp.h" +#include "lwip/ip_addr.h" +#include "lwip/netif.h" +#include "lwip/inet.h" +#include "lwip/sys.h" +#include "lwip/dhcp.h" +#include "lwip/autoip.h" +#include "lwip/dns.h" +#include "netif/etharp.h" + +#include + +/** Default for DHCP_GLOBAL_XID is 0xABCD0000 + * This can be changed by defining DHCP_GLOBAL_XID and DHCP_GLOBAL_XID_HEADER, e.g. + * #define DHCP_GLOBAL_XID_HEADER "stdlib.h" + * #define DHCP_GLOBAL_XID rand() + */ +#ifdef DHCP_GLOBAL_XID_HEADER +#include DHCP_GLOBAL_XID_HEADER /* include optional starting XID generation prototypes */ +#endif + +/** DHCP_OPTION_MAX_MSG_SIZE is set to the MTU + * MTU is checked to be big enough in dhcp_start */ +#define DHCP_MAX_MSG_LEN(netif) (netif->mtu) +#define DHCP_MAX_MSG_LEN_MIN_REQUIRED 576 +/** Minimum length for reply before packet is parsed */ +#define DHCP_MIN_REPLY_LEN 44 + +#define REBOOT_TRIES 2 + +/* DHCP client state machine functions */ +static void dhcp_handle_ack(struct netif *netif); +static void dhcp_handle_nak(struct netif *netif); +static void dhcp_handle_offer(struct netif *netif); + +static err_t dhcp_discover(struct netif *netif); +static err_t dhcp_select(struct netif *netif); +static void dhcp_bind(struct netif *netif); +#if DHCP_DOES_ARP_CHECK +static void dhcp_check(struct netif *netif); +static err_t dhcp_decline(struct netif *netif); +#endif /* DHCP_DOES_ARP_CHECK */ +static err_t dhcp_rebind(struct netif *netif); +static err_t dhcp_reboot(struct netif *netif); +static void dhcp_set_state(struct dhcp *dhcp, u8_t new_state); + +/* receive, unfold, parse and free incoming messages */ +static void dhcp_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, struct ip_addr *addr, u16_t port); +static err_t dhcp_unfold_reply(struct dhcp *dhcp, struct pbuf *p); +static u8_t *dhcp_get_option_ptr(struct dhcp *dhcp, u8_t option_type); +static u8_t dhcp_get_option_byte(u8_t *ptr); +#if 0 +static u16_t dhcp_get_option_short(u8_t *ptr); +#endif +static u32_t dhcp_get_option_long(u8_t *ptr); +static void dhcp_free_reply(struct dhcp *dhcp); + +/* set the DHCP timers */ +static void dhcp_timeout(struct netif *netif); +static void dhcp_t1_timeout(struct netif *netif); +static void dhcp_t2_timeout(struct netif *netif); + +/* build outgoing messages */ +/* create a DHCP request, fill in common headers */ +static err_t dhcp_create_request(struct netif *netif); +/* free a DHCP request */ +static void dhcp_delete_request(struct netif *netif); +/* add a DHCP option (type, then length in bytes) */ +static void dhcp_option(struct dhcp *dhcp, u8_t option_type, u8_t option_len); +/* add option values */ +static void dhcp_option_byte(struct dhcp *dhcp, u8_t value); +static void dhcp_option_short(struct dhcp *dhcp, u16_t value); +static void dhcp_option_long(struct dhcp *dhcp, u32_t value); +/* always add the DHCP options trailer to end and pad */ +static void dhcp_option_trailer(struct dhcp *dhcp); + +/** + * Back-off the DHCP client (because of a received NAK response). + * + * Back-off the DHCP client because of a received NAK. Receiving a + * NAK means the client asked for something non-sensible, for + * example when it tries to renew a lease obtained on another network. + * + * We clear any existing set IP address and restart DHCP negotiation + * afresh (as per RFC2131 3.2.3). + * + * @param netif the netif under DHCP control + */ +static void +dhcp_handle_nak(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_handle_nak(netif=%p) %c%c%"U16_F"\n", + (void*)netif, netif->name[0], netif->name[1], (u16_t)netif->num)); + /* Set the interface down since the address must no longer be used, as per RFC2131 */ + netif_set_down(netif); + /* remove IP address from interface */ + netif_set_ipaddr(netif, IP_ADDR_ANY); + netif_set_gw(netif, IP_ADDR_ANY); + netif_set_netmask(netif, IP_ADDR_ANY); + /* Change to a defined state */ + dhcp_set_state(dhcp, DHCP_BACKING_OFF); + /* We can immediately restart discovery */ + dhcp_discover(netif); +} + +#if DHCP_DOES_ARP_CHECK +/** + * Checks if the offered IP address is already in use. + * + * It does so by sending an ARP request for the offered address and + * entering CHECKING state. If no ARP reply is received within a small + * interval, the address is assumed to be free for use by us. + * + * @param netif the netif under DHCP control + */ +static void +dhcp_check(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + err_t result; + u16_t msecs; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_check(netif=%p) %c%c\n", (void *)netif, (s16_t)netif->name[0], + (s16_t)netif->name[1])); + dhcp_set_state(dhcp, DHCP_CHECKING); + /* create an ARP query for the offered IP address, expecting that no host + responds, as the IP address should not be in use. */ + result = etharp_query(netif, &dhcp->offered_ip_addr, NULL); + if (result != ERR_OK) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("dhcp_check: could not perform ARP query\n")); + } + dhcp->tries++; + msecs = 500; + dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_check(): set request timeout %"U16_F" msecs\n", msecs)); +} +#endif /* DHCP_DOES_ARP_CHECK */ + +/** + * Remember the configuration offered by a DHCP server. + * + * @param netif the netif under DHCP control + */ +static void +dhcp_handle_offer(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + /* obtain the server address */ + u8_t *option_ptr = dhcp_get_option_ptr(dhcp, DHCP_OPTION_SERVER_ID); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_handle_offer(netif=%p) %c%c%"U16_F"\n", + (void*)netif, netif->name[0], netif->name[1], (u16_t)netif->num)); + if (option_ptr != NULL) { + dhcp->server_ip_addr.addr = htonl(dhcp_get_option_long(&option_ptr[2])); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_handle_offer(): server 0x%08"X32_F"\n", dhcp->server_ip_addr.addr)); + /* remember offered address */ + ip_addr_set(&dhcp->offered_ip_addr, (struct ip_addr *)&dhcp->msg_in->yiaddr); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_handle_offer(): offer for 0x%08"X32_F"\n", dhcp->offered_ip_addr.addr)); + + dhcp_select(netif); + } +} + +/** + * Select a DHCP server offer out of all offers. + * + * Simply select the first offer received. + * + * @param netif the netif under DHCP control + * @return lwIP specific error (see error.h) + */ +static err_t +dhcp_select(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + err_t result; + u16_t msecs; +#if LWIP_NETIF_HOSTNAME + const char *p; +#endif /* LWIP_NETIF_HOSTNAME */ + + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_select(netif=%p) %c%c%"U16_F"\n", (void*)netif, netif->name[0], netif->name[1], (u16_t)netif->num)); + dhcp_set_state(dhcp, DHCP_REQUESTING); + + /* create and initialize the DHCP message header */ + result = dhcp_create_request(netif); + if (result == ERR_OK) { + dhcp_option(dhcp, DHCP_OPTION_MESSAGE_TYPE, DHCP_OPTION_MESSAGE_TYPE_LEN); + dhcp_option_byte(dhcp, DHCP_REQUEST); + + dhcp_option(dhcp, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); + dhcp_option_short(dhcp, DHCP_MAX_MSG_LEN(netif)); + + /* MUST request the offered IP address */ + dhcp_option(dhcp, DHCP_OPTION_REQUESTED_IP, 4); + dhcp_option_long(dhcp, ntohl(dhcp->offered_ip_addr.addr)); + + dhcp_option(dhcp, DHCP_OPTION_SERVER_ID, 4); + dhcp_option_long(dhcp, ntohl(dhcp->server_ip_addr.addr)); + + dhcp_option(dhcp, DHCP_OPTION_PARAMETER_REQUEST_LIST, 4/*num options*/); + dhcp_option_byte(dhcp, DHCP_OPTION_SUBNET_MASK); + dhcp_option_byte(dhcp, DHCP_OPTION_ROUTER); + dhcp_option_byte(dhcp, DHCP_OPTION_BROADCAST); + dhcp_option_byte(dhcp, DHCP_OPTION_DNS_SERVER); + +#if LWIP_NETIF_HOSTNAME + p = (const char*)netif->hostname; + if (p != NULL) { + dhcp_option(dhcp, DHCP_OPTION_HOSTNAME, strlen(p)); + while (*p) { + dhcp_option_byte(dhcp, *p++); + } + } +#endif /* LWIP_NETIF_HOSTNAME */ + + dhcp_option_trailer(dhcp); + /* shrink the pbuf to the actual content length */ + pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len); + + /* send broadcast to any DHCP server */ + udp_sendto_if(dhcp->pcb, dhcp->p_out, IP_ADDR_BROADCAST, DHCP_SERVER_PORT, netif); + dhcp_delete_request(netif); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_select: REQUESTING\n")); + } else { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("dhcp_select: could not allocate DHCP request\n")); + } + dhcp->tries++; + msecs = (dhcp->tries < 6 ? 1 << dhcp->tries : 60) * 1000; + dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_select(): set request timeout %"U16_F" msecs\n", msecs)); + return result; +} + +/** + * The DHCP timer that checks for lease renewal/rebind timeouts. + * + */ +void +dhcp_coarse_tmr() +{ + struct netif *netif = netif_list; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_coarse_tmr()\n")); + /* iterate through all network interfaces */ + while (netif != NULL) { + /* only act on DHCP configured interfaces */ + if (netif->dhcp != NULL) { + /* timer is active (non zero), and triggers (zeroes) now? */ + if (netif->dhcp->t2_timeout-- == 1) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_coarse_tmr(): t2 timeout\n")); + /* this clients' rebind timeout triggered */ + dhcp_t2_timeout(netif); + /* timer is active (non zero), and triggers (zeroes) now */ + } else if (netif->dhcp->t1_timeout-- == 1) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_coarse_tmr(): t1 timeout\n")); + /* this clients' renewal timeout triggered */ + dhcp_t1_timeout(netif); + } + } + /* proceed to next netif */ + netif = netif->next; + } +} + +/** + * DHCP transaction timeout handling + * + * A DHCP server is expected to respond within a short period of time. + * This timer checks whether an outstanding DHCP request is timed out. + * + */ +void +dhcp_fine_tmr() +{ + struct netif *netif = netif_list; + /* loop through netif's */ + while (netif != NULL) { + /* only act on DHCP configured interfaces */ + if (netif->dhcp != NULL) { + /* timer is active (non zero), and is about to trigger now */ + if (netif->dhcp->request_timeout > 1) { + netif->dhcp->request_timeout--; + } + else if (netif->dhcp->request_timeout == 1) { + netif->dhcp->request_timeout--; + /* { netif->dhcp->request_timeout == 0 } */ + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_fine_tmr(): request timeout\n")); + /* this clients' request timeout triggered */ + dhcp_timeout(netif); + } + } + /* proceed to next network interface */ + netif = netif->next; + } +} + +/** + * A DHCP negotiation transaction, or ARP request, has timed out. + * + * The timer that was started with the DHCP or ARP request has + * timed out, indicating no response was received in time. + * + * @param netif the netif under DHCP control + */ +static void +dhcp_timeout(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_timeout()\n")); + /* back-off period has passed, or server selection timed out */ + if ((dhcp->state == DHCP_BACKING_OFF) || (dhcp->state == DHCP_SELECTING)) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_timeout(): restarting discovery\n")); + dhcp_discover(netif); + /* receiving the requested lease timed out */ + } else if (dhcp->state == DHCP_REQUESTING) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_timeout(): REQUESTING, DHCP request timed out\n")); + if (dhcp->tries <= 5) { + dhcp_select(netif); + } else { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_timeout(): REQUESTING, releasing, restarting\n")); + dhcp_release(netif); + dhcp_discover(netif); + } +#if DHCP_DOES_ARP_CHECK + /* received no ARP reply for the offered address (which is good) */ + } else if (dhcp->state == DHCP_CHECKING) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_timeout(): CHECKING, ARP request timed out\n")); + if (dhcp->tries <= 1) { + dhcp_check(netif); + /* no ARP replies on the offered address, + looks like the IP address is indeed free */ + } else { + /* bind the interface to the offered address */ + dhcp_bind(netif); + } +#endif /* DHCP_DOES_ARP_CHECK */ + } + /* did not get response to renew request? */ + else if (dhcp->state == DHCP_RENEWING) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_timeout(): RENEWING, DHCP request timed out\n")); + /* just retry renewal */ + /* note that the rebind timer will eventually time-out if renew does not work */ + dhcp_renew(netif); + /* did not get response to rebind request? */ + } else if (dhcp->state == DHCP_REBINDING) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_timeout(): REBINDING, DHCP request timed out\n")); + if (dhcp->tries <= 8) { + dhcp_rebind(netif); + } else { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_timeout(): RELEASING, DISCOVERING\n")); + dhcp_release(netif); + dhcp_discover(netif); + } + } else if (dhcp->state == DHCP_REBOOTING) { + if (dhcp->tries < REBOOT_TRIES) { + dhcp_reboot(netif); + } else { + dhcp_discover(netif); + } + } +} + +/** + * The renewal period has timed out. + * + * @param netif the netif under DHCP control + */ +static void +dhcp_t1_timeout(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_t1_timeout()\n")); + if ((dhcp->state == DHCP_REQUESTING) || (dhcp->state == DHCP_BOUND) || (dhcp->state == DHCP_RENEWING)) { + /* just retry to renew - note that the rebind timer (t2) will + * eventually time-out if renew tries fail. */ + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_t1_timeout(): must renew\n")); + dhcp_renew(netif); + } +} + +/** + * The rebind period has timed out. + * + * @param netif the netif under DHCP control + */ +static void +dhcp_t2_timeout(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_t2_timeout()\n")); + if ((dhcp->state == DHCP_REQUESTING) || (dhcp->state == DHCP_BOUND) || (dhcp->state == DHCP_RENEWING)) { + /* just retry to rebind */ + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_t2_timeout(): must rebind\n")); + dhcp_rebind(netif); + } +} + +/** + * Handle a DHCP ACK packet + * + * @param netif the netif under DHCP control + */ +static void +dhcp_handle_ack(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + u8_t *option_ptr; + /* clear options we might not get from the ACK */ + dhcp->offered_sn_mask.addr = 0; + dhcp->offered_gw_addr.addr = 0; + dhcp->offered_bc_addr.addr = 0; + + /* lease time given? */ + option_ptr = dhcp_get_option_ptr(dhcp, DHCP_OPTION_LEASE_TIME); + if (option_ptr != NULL) { + /* remember offered lease time */ + dhcp->offered_t0_lease = dhcp_get_option_long(option_ptr + 2); + } + /* renewal period given? */ + option_ptr = dhcp_get_option_ptr(dhcp, DHCP_OPTION_T1); + if (option_ptr != NULL) { + /* remember given renewal period */ + dhcp->offered_t1_renew = dhcp_get_option_long(option_ptr + 2); + } else { + /* calculate safe periods for renewal */ + dhcp->offered_t1_renew = dhcp->offered_t0_lease / 2; + } + + /* renewal period given? */ + option_ptr = dhcp_get_option_ptr(dhcp, DHCP_OPTION_T2); + if (option_ptr != NULL) { + /* remember given rebind period */ + dhcp->offered_t2_rebind = dhcp_get_option_long(option_ptr + 2); + } else { + /* calculate safe periods for rebinding */ + dhcp->offered_t2_rebind = dhcp->offered_t0_lease; + } + + /* (y)our internet address */ + ip_addr_set(&dhcp->offered_ip_addr, &dhcp->msg_in->yiaddr); + +/** + * Patch #1308 + * TODO: we must check if the file field is not overloaded by DHCP options! + */ +#if 0 + /* boot server address */ + ip_addr_set(&dhcp->offered_si_addr, &dhcp->msg_in->siaddr); + /* boot file name */ + if (dhcp->msg_in->file[0]) { + dhcp->boot_file_name = mem_malloc(strlen(dhcp->msg_in->file) + 1); + strcpy(dhcp->boot_file_name, dhcp->msg_in->file); + } +#endif + + /* subnet mask */ + option_ptr = dhcp_get_option_ptr(dhcp, DHCP_OPTION_SUBNET_MASK); + /* subnet mask given? */ + if (option_ptr != NULL) { + dhcp->offered_sn_mask.addr = htonl(dhcp_get_option_long(&option_ptr[2])); + } + + /* gateway router */ + option_ptr = dhcp_get_option_ptr(dhcp, DHCP_OPTION_ROUTER); + if (option_ptr != NULL) { + dhcp->offered_gw_addr.addr = htonl(dhcp_get_option_long(&option_ptr[2])); + } + + /* broadcast address */ + option_ptr = dhcp_get_option_ptr(dhcp, DHCP_OPTION_BROADCAST); + if (option_ptr != NULL) { + dhcp->offered_bc_addr.addr = htonl(dhcp_get_option_long(&option_ptr[2])); + } + + /* DNS servers */ + option_ptr = dhcp_get_option_ptr(dhcp, DHCP_OPTION_DNS_SERVER); + if (option_ptr != NULL) { + u8_t n; + dhcp->dns_count = dhcp_get_option_byte(&option_ptr[1]) / (u32_t)sizeof(struct ip_addr); + /* limit to at most DHCP_MAX_DNS DNS servers */ + if (dhcp->dns_count > DHCP_MAX_DNS) + dhcp->dns_count = DHCP_MAX_DNS; + for (n = 0; n < dhcp->dns_count; n++) { + dhcp->offered_dns_addr[n].addr = htonl(dhcp_get_option_long(&option_ptr[2 + n * 4])); +#if LWIP_DNS + dns_setserver( n, (struct ip_addr *)(&(dhcp->offered_dns_addr[n].addr))); +#endif /* LWIP_DNS */ + } +#if LWIP_DNS + dns_setserver( n, (struct ip_addr *)(&ip_addr_any)); +#endif /* LWIP_DNS */ + } +} + +/** + * Start DHCP negotiation for a network interface. + * + * If no DHCP client instance was attached to this interface, + * a new client is created first. If a DHCP client instance + * was already present, it restarts negotiation. + * + * @param netif The lwIP network interface + * @return lwIP error code + * - ERR_OK - No error + * - ERR_MEM - Out of memory + */ +err_t +dhcp_start(struct netif *netif) +{ + struct dhcp *dhcp; + err_t result = ERR_OK; + + LWIP_ERROR("netif != NULL", (netif != NULL), return ERR_ARG;); + dhcp = netif->dhcp; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_start(netif=%p) %c%c%"U16_F"\n", (void*)netif, netif->name[0], netif->name[1], (u16_t)netif->num)); + /* Remove the flag that says this netif is handled by DHCP, + it is set when we succeeded starting. */ + netif->flags &= ~NETIF_FLAG_DHCP; + + /* check MTU of the netif */ + if (netif->mtu < DHCP_MAX_MSG_LEN_MIN_REQUIRED) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): Cannot use this netif with DHCP: MTU is too small\n")); + return ERR_MEM; + } + + /* no DHCP client attached yet? */ + if (dhcp == NULL) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): starting new DHCP client\n")); + dhcp = mem_malloc(sizeof(struct dhcp)); + if (dhcp == NULL) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): could not allocate dhcp\n")); + return ERR_MEM; + } + /* store this dhcp client in the netif */ + netif->dhcp = dhcp; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): allocated dhcp")); + /* already has DHCP client attached */ + } else { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_start(): restarting DHCP configuration\n")); + if (dhcp->pcb != NULL) { + udp_remove(dhcp->pcb); + } + LWIP_ASSERT("pbuf p_out wasn't freed", dhcp->p_out == NULL); + LWIP_ASSERT("reply wasn't freed", dhcp->msg_in == NULL && + dhcp->options_in == NULL && dhcp->options_in_len == 0); + } + + /* clear data structure */ + memset(dhcp, 0, sizeof(struct dhcp)); + /* allocate UDP PCB */ + dhcp->pcb = udp_new(); + if (dhcp->pcb == NULL) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): could not obtain pcb\n")); + mem_free((void *)dhcp); + netif->dhcp = dhcp = NULL; + return ERR_MEM; + } +#if IP_SOF_BROADCAST + dhcp->pcb->so_options|=SOF_BROADCAST; +#endif /* IP_SOF_BROADCAST */ + /* set up local and remote port for the pcb */ + udp_bind(dhcp->pcb, IP_ADDR_ANY, DHCP_CLIENT_PORT); + udp_connect(dhcp->pcb, IP_ADDR_ANY, DHCP_SERVER_PORT); + /* set up the recv callback and argument */ + udp_recv(dhcp->pcb, dhcp_recv, netif); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): starting DHCP configuration\n")); + /* (re)start the DHCP negotiation */ + result = dhcp_discover(netif); + if (result != ERR_OK) { + /* free resources allocated above */ + dhcp_stop(netif); + return ERR_MEM; + } + /* Set the flag that says this netif is handled by DHCP. */ + netif->flags |= NETIF_FLAG_DHCP; + return result; +} + +/** + * Inform a DHCP server of our manual configuration. + * + * This informs DHCP servers of our fixed IP address configuration + * by sending an INFORM message. It does not involve DHCP address + * configuration, it is just here to be nice to the network. + * + * @param netif The lwIP network interface + */ +void +dhcp_inform(struct netif *netif) +{ + struct dhcp *dhcp, *old_dhcp; + err_t result = ERR_OK; + dhcp = mem_malloc(sizeof(struct dhcp)); + if (dhcp == NULL) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_inform(): could not allocate dhcp\n")); + return; + } + memset(dhcp, 0, sizeof(struct dhcp)); + + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_inform(): allocated dhcp\n")); + dhcp->pcb = udp_new(); + if (dhcp->pcb == NULL) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_inform(): could not obtain pcb")); + goto free_dhcp_and_return; + } + old_dhcp = netif->dhcp; + netif->dhcp = dhcp; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_inform(): created new udp pcb\n")); + /* create and initialize the DHCP message header */ + result = dhcp_create_request(netif); + if (result == ERR_OK) { + + dhcp_option(dhcp, DHCP_OPTION_MESSAGE_TYPE, DHCP_OPTION_MESSAGE_TYPE_LEN); + dhcp_option_byte(dhcp, DHCP_INFORM); + + dhcp_option(dhcp, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); + dhcp_option_short(dhcp, DHCP_MAX_MSG_LEN(netif)); + + dhcp_option_trailer(dhcp); + + pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len); + +#if IP_SOF_BROADCAST + dhcp->pcb->so_options|=SOF_BROADCAST; +#endif /* IP_SOF_BROADCAST */ + udp_bind(dhcp->pcb, IP_ADDR_ANY, DHCP_CLIENT_PORT); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_inform: INFORMING\n")); + udp_sendto_if(dhcp->pcb, dhcp->p_out, IP_ADDR_BROADCAST, DHCP_SERVER_PORT, netif); + dhcp_delete_request(netif); + } else { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_inform: could not allocate DHCP request\n")); + } + + udp_remove(dhcp->pcb); + dhcp->pcb = NULL; + netif->dhcp = old_dhcp; +free_dhcp_and_return: + mem_free((void *)dhcp); +} + +/** Handle a possible change in the network configuration. + * + * This enters the REBOOTING state to verify that the currently bound + * address is still valid. + */ +void +dhcp_network_changed(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + if (!dhcp) + return; + switch (dhcp->state) { + case DHCP_REBINDING: + case DHCP_RENEWING: + case DHCP_BOUND: + case DHCP_REBOOTING: + netif_set_down(netif); + dhcp->tries = 0; + dhcp_reboot(netif); + break; + case DHCP_OFF: + /* stay off */ + break; + default: + dhcp->tries = 0; + dhcp_discover(netif); + break; + } +} + +#if DHCP_DOES_ARP_CHECK +/** + * Match an ARP reply with the offered IP address. + * + * @param netif the network interface on which the reply was received + * @param addr The IP address we received a reply from + */ +void dhcp_arp_reply(struct netif *netif, struct ip_addr *addr) +{ + LWIP_ERROR("netif != NULL", (netif != NULL), return;); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_arp_reply()\n")); + /* is a DHCP client doing an ARP check? */ + if ((netif->dhcp != NULL) && (netif->dhcp->state == DHCP_CHECKING)) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_arp_reply(): CHECKING, arp reply for 0x%08"X32_F"\n", addr->addr)); + /* did a host respond with the address we + were offered by the DHCP server? */ + if (ip_addr_cmp(addr, &netif->dhcp->offered_ip_addr)) { + /* we will not accept the offered address */ + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE | LWIP_DBG_LEVEL_WARNING, + ("dhcp_arp_reply(): arp reply matched with offered address, declining\n")); + dhcp_decline(netif); + } + } +} + +/** + * Decline an offered lease. + * + * Tell the DHCP server we do not accept the offered address. + * One reason to decline the lease is when we find out the address + * is already in use by another host (through ARP). + * + * @param netif the netif under DHCP control + */ +static err_t +dhcp_decline(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + err_t result = ERR_OK; + u16_t msecs; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_decline()\n")); + dhcp_set_state(dhcp, DHCP_BACKING_OFF); + /* create and initialize the DHCP message header */ + result = dhcp_create_request(netif); + if (result == ERR_OK) { + dhcp_option(dhcp, DHCP_OPTION_MESSAGE_TYPE, DHCP_OPTION_MESSAGE_TYPE_LEN); + dhcp_option_byte(dhcp, DHCP_DECLINE); + + dhcp_option(dhcp, DHCP_OPTION_REQUESTED_IP, 4); + dhcp_option_long(dhcp, ntohl(dhcp->offered_ip_addr.addr)); + + dhcp_option_trailer(dhcp); + /* resize pbuf to reflect true size of options */ + pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len); + + /* per section 4.4.4, broadcast DECLINE messages */ + udp_sendto_if(dhcp->pcb, dhcp->p_out, IP_ADDR_BROADCAST, DHCP_SERVER_PORT, netif); + dhcp_delete_request(netif); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_decline: BACKING OFF\n")); + } else { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, + ("dhcp_decline: could not allocate DHCP request\n")); + } + dhcp->tries++; + msecs = 10*1000; + dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_decline(): set request timeout %"U16_F" msecs\n", msecs)); + return result; +} +#endif + + +/** + * Start the DHCP process, discover a DHCP server. + * + * @param netif the netif under DHCP control + */ +static err_t +dhcp_discover(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + err_t result = ERR_OK; + u16_t msecs; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_discover()\n")); + ip_addr_set(&dhcp->offered_ip_addr, IP_ADDR_ANY); + dhcp_set_state(dhcp, DHCP_SELECTING); + /* create and initialize the DHCP message header */ + result = dhcp_create_request(netif); + if (result == ERR_OK) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_discover: making request\n")); + dhcp_option(dhcp, DHCP_OPTION_MESSAGE_TYPE, DHCP_OPTION_MESSAGE_TYPE_LEN); + dhcp_option_byte(dhcp, DHCP_DISCOVER); + + dhcp_option(dhcp, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); + dhcp_option_short(dhcp, DHCP_MAX_MSG_LEN(netif)); + + dhcp_option(dhcp, DHCP_OPTION_PARAMETER_REQUEST_LIST, 4/*num options*/); + dhcp_option_byte(dhcp, DHCP_OPTION_SUBNET_MASK); + dhcp_option_byte(dhcp, DHCP_OPTION_ROUTER); + dhcp_option_byte(dhcp, DHCP_OPTION_BROADCAST); + dhcp_option_byte(dhcp, DHCP_OPTION_DNS_SERVER); + + dhcp_option_trailer(dhcp); + + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_discover: realloc()ing\n")); + pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len); + + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_discover: sendto(DISCOVER, IP_ADDR_BROADCAST, DHCP_SERVER_PORT)\n")); + udp_sendto_if(dhcp->pcb, dhcp->p_out, IP_ADDR_BROADCAST, DHCP_SERVER_PORT, netif); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_discover: deleting()ing\n")); + dhcp_delete_request(netif); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_discover: SELECTING\n")); + } else { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_discover: could not allocate DHCP request\n")); + } + dhcp->tries++; +#if LWIP_DHCP_AUTOIP_COOP + if(dhcp->tries >= LWIP_DHCP_AUTOIP_COOP_TRIES && dhcp->autoip_coop_state == DHCP_AUTOIP_COOP_STATE_OFF) { + dhcp->autoip_coop_state = DHCP_AUTOIP_COOP_STATE_ON; + autoip_start(netif); + } +#endif /* LWIP_DHCP_AUTOIP_COOP */ + msecs = (dhcp->tries < 6 ? 1 << dhcp->tries : 60) * 1000; + dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_discover(): set request timeout %"U16_F" msecs\n", msecs)); + return result; +} + + +/** + * Bind the interface to the offered IP address. + * + * @param netif network interface to bind to the offered address + */ +static void +dhcp_bind(struct netif *netif) +{ + u32_t timeout; + struct dhcp *dhcp; + struct ip_addr sn_mask, gw_addr; + LWIP_ERROR("dhcp_bind: netif != NULL", (netif != NULL), return;); + dhcp = netif->dhcp; + LWIP_ERROR("dhcp_bind: dhcp != NULL", (dhcp != NULL), return;); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_bind(netif=%p) %c%c%"U16_F"\n", (void*)netif, netif->name[0], netif->name[1], (u16_t)netif->num)); + + /* temporary DHCP lease? */ + if (dhcp->offered_t1_renew != 0xffffffffUL) { + /* set renewal period timer */ + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_bind(): t1 renewal timer %"U32_F" secs\n", dhcp->offered_t1_renew)); + timeout = (dhcp->offered_t1_renew + DHCP_COARSE_TIMER_SECS / 2) / DHCP_COARSE_TIMER_SECS; + if(timeout > 0xffff) { + timeout = 0xffff; + } + dhcp->t1_timeout = (u16_t)timeout; + if (dhcp->t1_timeout == 0) { + dhcp->t1_timeout = 1; + } + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_bind(): set request timeout %"U32_F" msecs\n", dhcp->offered_t1_renew*1000)); + } + /* set renewal period timer */ + if (dhcp->offered_t2_rebind != 0xffffffffUL) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_bind(): t2 rebind timer %"U32_F" secs\n", dhcp->offered_t2_rebind)); + timeout = (dhcp->offered_t2_rebind + DHCP_COARSE_TIMER_SECS / 2) / DHCP_COARSE_TIMER_SECS; + if(timeout > 0xffff) { + timeout = 0xffff; + } + dhcp->t2_timeout = (u16_t)timeout; + if (dhcp->t2_timeout == 0) { + dhcp->t2_timeout = 1; + } + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_bind(): set request timeout %"U32_F" msecs\n", dhcp->offered_t2_rebind*1000)); + } + /* copy offered network mask */ + ip_addr_set(&sn_mask, &dhcp->offered_sn_mask); + + /* subnet mask not given? */ + /* TODO: this is not a valid check. what if the network mask is 0? */ + if (sn_mask.addr == 0) { + /* choose a safe subnet mask given the network class */ + u8_t first_octet = ip4_addr1(&sn_mask); + if (first_octet <= 127) { + sn_mask.addr = htonl(0xff000000); + } else if (first_octet >= 192) { + sn_mask.addr = htonl(0xffffff00); + } else { + sn_mask.addr = htonl(0xffff0000); + } + } + + ip_addr_set(&gw_addr, &dhcp->offered_gw_addr); + /* gateway address not given? */ + if (gw_addr.addr == 0) { + /* copy network address */ + gw_addr.addr = (dhcp->offered_ip_addr.addr & sn_mask.addr); + /* use first host address on network as gateway */ + gw_addr.addr |= htonl(0x00000001); + } + +#if LWIP_DHCP_AUTOIP_COOP + if(dhcp->autoip_coop_state == DHCP_AUTOIP_COOP_STATE_ON) { + autoip_stop(netif); + dhcp->autoip_coop_state = DHCP_AUTOIP_COOP_STATE_OFF; + } +#endif /* LWIP_DHCP_AUTOIP_COOP */ + + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_bind(): IP: 0x%08"X32_F"\n", dhcp->offered_ip_addr.addr)); + netif_set_ipaddr(netif, &dhcp->offered_ip_addr); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_bind(): SN: 0x%08"X32_F"\n", sn_mask.addr)); + netif_set_netmask(netif, &sn_mask); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_bind(): GW: 0x%08"X32_F"\n", gw_addr.addr)); + netif_set_gw(netif, &gw_addr); + /* bring the interface up */ + netif_set_up(netif); + /* netif is now bound to DHCP leased address */ + dhcp_set_state(dhcp, DHCP_BOUND); +} + +/** + * Renew an existing DHCP lease at the involved DHCP server. + * + * @param netif network interface which must renew its lease + */ +err_t +dhcp_renew(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + err_t result; + u16_t msecs; +#if LWIP_NETIF_HOSTNAME + const char *p; +#endif /* LWIP_NETIF_HOSTNAME */ + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_renew()\n")); + dhcp_set_state(dhcp, DHCP_RENEWING); + + /* create and initialize the DHCP message header */ + result = dhcp_create_request(netif); + if (result == ERR_OK) { + + dhcp_option(dhcp, DHCP_OPTION_MESSAGE_TYPE, DHCP_OPTION_MESSAGE_TYPE_LEN); + dhcp_option_byte(dhcp, DHCP_REQUEST); + + dhcp_option(dhcp, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); + dhcp_option_short(dhcp, DHCP_MAX_MSG_LEN(netif)); + +#if LWIP_NETIF_HOSTNAME + p = (const char*)netif->hostname; + if (p != NULL) { + dhcp_option(dhcp, DHCP_OPTION_HOSTNAME, strlen(p)); + while (*p) { + dhcp_option_byte(dhcp, *p++); + } + } +#endif /* LWIP_NETIF_HOSTNAME */ + +#if 0 + dhcp_option(dhcp, DHCP_OPTION_REQUESTED_IP, 4); + dhcp_option_long(dhcp, ntohl(dhcp->offered_ip_addr.addr)); +#endif + +#if 0 + dhcp_option(dhcp, DHCP_OPTION_SERVER_ID, 4); + dhcp_option_long(dhcp, ntohl(dhcp->server_ip_addr.addr)); +#endif + /* append DHCP message trailer */ + dhcp_option_trailer(dhcp); + + pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len); + + udp_sendto_if(dhcp->pcb, dhcp->p_out, &dhcp->server_ip_addr, DHCP_SERVER_PORT, netif); + dhcp_delete_request(netif); + + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_renew: RENEWING\n")); + } else { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_renew: could not allocate DHCP request\n")); + } + dhcp->tries++; + /* back-off on retries, but to a maximum of 20 seconds */ + msecs = dhcp->tries < 10 ? dhcp->tries * 2000 : 20 * 1000; + dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_renew(): set request timeout %"U16_F" msecs\n", msecs)); + return result; +} + +/** + * Rebind with a DHCP server for an existing DHCP lease. + * + * @param netif network interface which must rebind with a DHCP server + */ +static err_t +dhcp_rebind(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + err_t result; + u16_t msecs; +#if LWIP_NETIF_HOSTNAME + const char *p; +#endif /* LWIP_NETIF_HOSTNAME */ + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_rebind()\n")); + dhcp_set_state(dhcp, DHCP_REBINDING); + + /* create and initialize the DHCP message header */ + result = dhcp_create_request(netif); + if (result == ERR_OK) { + + dhcp_option(dhcp, DHCP_OPTION_MESSAGE_TYPE, DHCP_OPTION_MESSAGE_TYPE_LEN); + dhcp_option_byte(dhcp, DHCP_REQUEST); + + dhcp_option(dhcp, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); + dhcp_option_short(dhcp, DHCP_MAX_MSG_LEN(netif)); + +#if LWIP_NETIF_HOSTNAME + p = (const char*)netif->hostname; + if (p != NULL) { + dhcp_option(dhcp, DHCP_OPTION_HOSTNAME, strlen(p)); + while (*p) { + dhcp_option_byte(dhcp, *p++); + } + } +#endif /* LWIP_NETIF_HOSTNAME */ + +#if 0 + dhcp_option(dhcp, DHCP_OPTION_REQUESTED_IP, 4); + dhcp_option_long(dhcp, ntohl(dhcp->offered_ip_addr.addr)); + + dhcp_option(dhcp, DHCP_OPTION_SERVER_ID, 4); + dhcp_option_long(dhcp, ntohl(dhcp->server_ip_addr.addr)); +#endif + + dhcp_option_trailer(dhcp); + + pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len); + + /* broadcast to server */ + udp_sendto_if(dhcp->pcb, dhcp->p_out, IP_ADDR_BROADCAST, DHCP_SERVER_PORT, netif); + dhcp_delete_request(netif); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_rebind: REBINDING\n")); + } else { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_rebind: could not allocate DHCP request\n")); + } + dhcp->tries++; + msecs = dhcp->tries < 10 ? dhcp->tries * 1000 : 10 * 1000; + dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_rebind(): set request timeout %"U16_F" msecs\n", msecs)); + return result; +} + +/** + * Enter REBOOTING state to verify an existing lease + * + * @param netif network interface which must reboot + */ +static err_t +dhcp_reboot(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + err_t result; + u16_t msecs; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_reboot()\n")); + dhcp_set_state(dhcp, DHCP_REBOOTING); + + /* create and initialize the DHCP message header */ + result = dhcp_create_request(netif); + if (result == ERR_OK) { + + dhcp_option(dhcp, DHCP_OPTION_MESSAGE_TYPE, DHCP_OPTION_MESSAGE_TYPE_LEN); + dhcp_option_byte(dhcp, DHCP_REQUEST); + + dhcp_option(dhcp, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); + dhcp_option_short(dhcp, 576); + + dhcp_option(dhcp, DHCP_OPTION_REQUESTED_IP, 4); + dhcp_option_long(dhcp, ntohl(dhcp->offered_ip_addr.addr)); + + dhcp_option_trailer(dhcp); + + pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len); + + /* broadcast to server */ + udp_sendto_if(dhcp->pcb, dhcp->p_out, IP_ADDR_BROADCAST, DHCP_SERVER_PORT, netif); + dhcp_delete_request(netif); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_reboot: REBOOTING\n")); + } else { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_reboot: could not allocate DHCP request\n")); + } + dhcp->tries++; + msecs = dhcp->tries < 10 ? dhcp->tries * 1000 : 10 * 1000; + dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_reboot(): set request timeout %"U16_F" msecs\n", msecs)); + return result; +} + + +/** + * Release a DHCP lease. + * + * @param netif network interface which must release its lease + */ +err_t +dhcp_release(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + err_t result; + u16_t msecs; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_release()\n")); + + /* idle DHCP client */ + dhcp_set_state(dhcp, DHCP_OFF); + /* clean old DHCP offer */ + dhcp->server_ip_addr.addr = 0; + dhcp->offered_ip_addr.addr = dhcp->offered_sn_mask.addr = 0; + dhcp->offered_gw_addr.addr = dhcp->offered_bc_addr.addr = 0; + dhcp->offered_t0_lease = dhcp->offered_t1_renew = dhcp->offered_t2_rebind = 0; + dhcp->dns_count = 0; + + /* create and initialize the DHCP message header */ + result = dhcp_create_request(netif); + if (result == ERR_OK) { + dhcp_option(dhcp, DHCP_OPTION_MESSAGE_TYPE, DHCP_OPTION_MESSAGE_TYPE_LEN); + dhcp_option_byte(dhcp, DHCP_RELEASE); + + dhcp_option_trailer(dhcp); + + pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len); + + udp_sendto_if(dhcp->pcb, dhcp->p_out, &dhcp->server_ip_addr, DHCP_SERVER_PORT, netif); + dhcp_delete_request(netif); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_release: RELEASED, DHCP_OFF\n")); + } else { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_release: could not allocate DHCP request\n")); + } + dhcp->tries++; + msecs = dhcp->tries < 10 ? dhcp->tries * 1000 : 10 * 1000; + dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_release(): set request timeout %"U16_F" msecs\n", msecs)); + /* bring the interface down */ + netif_set_down(netif); + /* remove IP address from interface */ + netif_set_ipaddr(netif, IP_ADDR_ANY); + netif_set_gw(netif, IP_ADDR_ANY); + netif_set_netmask(netif, IP_ADDR_ANY); + + /* TODO: netif_down(netif); */ + return result; +} + +/** + * Remove the DHCP client from the interface. + * + * @param netif The network interface to stop DHCP on + */ +void +dhcp_stop(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + LWIP_ERROR("dhcp_stop: netif != NULL", (netif != NULL), return;); + /* Remove the flag that says this netif is handled by DHCP. */ + netif->flags &= ~NETIF_FLAG_DHCP; + + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_stop()\n")); + /* netif is DHCP configured? */ + if (dhcp != NULL) { +#if LWIP_DHCP_AUTOIP_COOP + if(dhcp->autoip_coop_state == DHCP_AUTOIP_COOP_STATE_ON) { + autoip_stop(netif); + dhcp->autoip_coop_state = DHCP_AUTOIP_COOP_STATE_OFF; + } +#endif /* LWIP_DHCP_AUTOIP_COOP */ + + if (dhcp->pcb != NULL) { + udp_remove(dhcp->pcb); + dhcp->pcb = NULL; + } + LWIP_ASSERT("reply wasn't freed", dhcp->msg_in == NULL && + dhcp->options_in == NULL && dhcp->options_in_len == 0); + mem_free((void *)dhcp); + netif->dhcp = NULL; + } +} + +/* + * Set the DHCP state of a DHCP client. + * + * If the state changed, reset the number of tries. + * + * TODO: we might also want to reset the timeout here? + */ +static void +dhcp_set_state(struct dhcp *dhcp, u8_t new_state) +{ + if (new_state != dhcp->state) { + dhcp->state = new_state; + dhcp->tries = 0; + } +} + +/* + * Concatenate an option type and length field to the outgoing + * DHCP message. + * + */ +static void +dhcp_option(struct dhcp *dhcp, u8_t option_type, u8_t option_len) +{ + LWIP_ASSERT("dhcp_option: dhcp->options_out_len + 2 + option_len <= DHCP_OPTIONS_LEN", dhcp->options_out_len + 2U + option_len <= DHCP_OPTIONS_LEN); + dhcp->msg_out->options[dhcp->options_out_len++] = option_type; + dhcp->msg_out->options[dhcp->options_out_len++] = option_len; +} +/* + * Concatenate a single byte to the outgoing DHCP message. + * + */ +static void +dhcp_option_byte(struct dhcp *dhcp, u8_t value) +{ + LWIP_ASSERT("dhcp_option_byte: dhcp->options_out_len < DHCP_OPTIONS_LEN", dhcp->options_out_len < DHCP_OPTIONS_LEN); + dhcp->msg_out->options[dhcp->options_out_len++] = value; +} + +static void +dhcp_option_short(struct dhcp *dhcp, u16_t value) +{ + LWIP_ASSERT("dhcp_option_short: dhcp->options_out_len + 2 <= DHCP_OPTIONS_LEN", dhcp->options_out_len + 2U <= DHCP_OPTIONS_LEN); + dhcp->msg_out->options[dhcp->options_out_len++] = (u8_t)((value & 0xff00U) >> 8); + dhcp->msg_out->options[dhcp->options_out_len++] = (u8_t) (value & 0x00ffU); +} + +static void +dhcp_option_long(struct dhcp *dhcp, u32_t value) +{ + LWIP_ASSERT("dhcp_option_long: dhcp->options_out_len + 4 <= DHCP_OPTIONS_LEN", dhcp->options_out_len + 4U <= DHCP_OPTIONS_LEN); + dhcp->msg_out->options[dhcp->options_out_len++] = (u8_t)((value & 0xff000000UL) >> 24); + dhcp->msg_out->options[dhcp->options_out_len++] = (u8_t)((value & 0x00ff0000UL) >> 16); + dhcp->msg_out->options[dhcp->options_out_len++] = (u8_t)((value & 0x0000ff00UL) >> 8); + dhcp->msg_out->options[dhcp->options_out_len++] = (u8_t)((value & 0x000000ffUL)); +} + +/** + * Extract the DHCP message and the DHCP options. + * + * Extract the DHCP message and the DHCP options, each into a contiguous + * piece of memory. As a DHCP message is variable sized by its options, + * and also allows overriding some fields for options, the easy approach + * is to first unfold the options into a conitguous piece of memory, and + * use that further on. + * + */ +static err_t +dhcp_unfold_reply(struct dhcp *dhcp, struct pbuf *p) +{ + u16_t ret; + LWIP_ERROR("dhcp != NULL", (dhcp != NULL), return ERR_ARG;); + /* free any left-overs from previous unfolds */ + dhcp_free_reply(dhcp); + /* options present? */ + if (p->tot_len > (sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN)) { + dhcp->options_in_len = p->tot_len - (sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN); + dhcp->options_in = mem_malloc(dhcp->options_in_len); + if (dhcp->options_in == NULL) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, + ("dhcp_unfold_reply(): could not allocate dhcp->options\n")); + dhcp->options_in_len = 0; + return ERR_MEM; + } + } + dhcp->msg_in = mem_malloc(sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN); + if (dhcp->msg_in == NULL) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, + ("dhcp_unfold_reply(): could not allocate dhcp->msg_in\n")); + if (dhcp->options_in != NULL) { + mem_free(dhcp->options_in); + dhcp->options_in = NULL; + dhcp->options_in_len = 0; + } + return ERR_MEM; + } + + /** copy the DHCP message without options */ + ret = pbuf_copy_partial(p, dhcp->msg_in, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN, 0); + LWIP_ASSERT("ret == sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN", ret == sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_unfold_reply(): copied %"U16_F" bytes into dhcp->msg_in[]\n", + sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN)); + + if (dhcp->options_in != NULL) { + /** copy the DHCP options */ + ret = pbuf_copy_partial(p, dhcp->options_in, dhcp->options_in_len, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN); + LWIP_ASSERT("ret == dhcp->options_in_len", ret == dhcp->options_in_len); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_unfold_reply(): copied %"U16_F" bytes to dhcp->options_in[]\n", + dhcp->options_in_len)); + } + LWIP_UNUSED_ARG(ret); + return ERR_OK; +} + +/** + * Free the incoming DHCP message including contiguous copy of + * its DHCP options. + */ +static void dhcp_free_reply(struct dhcp *dhcp) +{ + if (dhcp->msg_in != NULL) { + mem_free((void *)dhcp->msg_in); + dhcp->msg_in = NULL; + } + if (dhcp->options_in) { + mem_free(dhcp->options_in); + dhcp->options_in = NULL; + dhcp->options_in_len = 0; + } + LWIP_DEBUGF(DHCP_DEBUG, ("dhcp_free_reply(): free'd\n")); +} + +/** + * If an incoming DHCP message is in response to us, then trigger the state machine + */ +static void dhcp_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, struct ip_addr *addr, u16_t port) +{ + struct netif *netif = (struct netif *)arg; + struct dhcp *dhcp = netif->dhcp; + struct dhcp_msg *reply_msg = (struct dhcp_msg *)p->payload; + u8_t *options_ptr; + u8_t msg_type; + u8_t i; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_recv(pbuf = %p) from DHCP server %"U16_F".%"U16_F".%"U16_F".%"U16_F" port %"U16_F"\n", (void*)p, + (u16_t)(ntohl(addr->addr) >> 24 & 0xff), (u16_t)(ntohl(addr->addr) >> 16 & 0xff), + (u16_t)(ntohl(addr->addr) >> 8 & 0xff), (u16_t)(ntohl(addr->addr) & 0xff), port)); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("pbuf->len = %"U16_F"\n", p->len)); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("pbuf->tot_len = %"U16_F"\n", p->tot_len)); + /* prevent warnings about unused arguments */ + LWIP_UNUSED_ARG(pcb); + LWIP_UNUSED_ARG(addr); + LWIP_UNUSED_ARG(port); + + LWIP_ASSERT("reply wasn't freed", dhcp->msg_in == NULL && + dhcp->options_in == NULL && dhcp->options_in_len == 0); + + if (p->len < DHCP_MIN_REPLY_LEN) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("DHCP reply message too short\n")); + goto free_pbuf_and_return; + } + + if (reply_msg->op != DHCP_BOOTREPLY) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("not a DHCP reply message, but type %"U16_F"\n", (u16_t)reply_msg->op)); + goto free_pbuf_and_return; + } + /* iterate through hardware address and match against DHCP message */ + for (i = 0; i < netif->hwaddr_len; i++) { + if (netif->hwaddr[i] != reply_msg->chaddr[i]) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, + ("netif->hwaddr[%"U16_F"]==%02"X16_F" != reply_msg->chaddr[%"U16_F"]==%02"X16_F"\n", + (u16_t)i, (u16_t)netif->hwaddr[i], (u16_t)i, (u16_t)reply_msg->chaddr[i])); + goto free_pbuf_and_return; + } + } + /* match transaction ID against what we expected */ + if (ntohl(reply_msg->xid) != dhcp->xid) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, + ("transaction id mismatch reply_msg->xid(%"X32_F")!=dhcp->xid(%"X32_F")\n",ntohl(reply_msg->xid),dhcp->xid)); + goto free_pbuf_and_return; + } + /* option fields could be unfold? */ + if (dhcp_unfold_reply(dhcp, p) != ERR_OK) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, + ("problem unfolding DHCP message - too short on memory?\n")); + goto free_pbuf_and_return; + } + + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("searching DHCP_OPTION_MESSAGE_TYPE\n")); + /* obtain pointer to DHCP message type */ + options_ptr = dhcp_get_option_ptr(dhcp, DHCP_OPTION_MESSAGE_TYPE); + if (options_ptr == NULL) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("DHCP_OPTION_MESSAGE_TYPE option not found\n")); + goto free_pbuf_and_return; + } + + /* read DHCP message type */ + msg_type = dhcp_get_option_byte(options_ptr + 2); + /* message type is DHCP ACK? */ + if (msg_type == DHCP_ACK) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("DHCP_ACK received\n")); + /* in requesting state? */ + if (dhcp->state == DHCP_REQUESTING) { + dhcp_handle_ack(netif); + dhcp->request_timeout = 0; +#if DHCP_DOES_ARP_CHECK + /* check if the acknowledged lease address is already in use */ + dhcp_check(netif); +#else + /* bind interface to the acknowledged lease address */ + dhcp_bind(netif); +#endif + } + /* already bound to the given lease address? */ + else if ((dhcp->state == DHCP_REBOOTING) || (dhcp->state == DHCP_REBINDING) || (dhcp->state == DHCP_RENEWING)) { + dhcp->request_timeout = 0; + dhcp_bind(netif); + } + } + /* received a DHCP_NAK in appropriate state? */ + else if ((msg_type == DHCP_NAK) && + ((dhcp->state == DHCP_REBOOTING) || (dhcp->state == DHCP_REQUESTING) || + (dhcp->state == DHCP_REBINDING) || (dhcp->state == DHCP_RENEWING ))) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("DHCP_NAK received\n")); + dhcp->request_timeout = 0; + dhcp_handle_nak(netif); + } + /* received a DHCP_OFFER in DHCP_SELECTING state? */ + else if ((msg_type == DHCP_OFFER) && (dhcp->state == DHCP_SELECTING)) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("DHCP_OFFER received in DHCP_SELECTING state\n")); + dhcp->request_timeout = 0; + /* remember offered lease */ + dhcp_handle_offer(netif); + } +free_pbuf_and_return: + dhcp_free_reply(dhcp); + pbuf_free(p); +} + +/** + * Create a DHCP request, fill in common headers + * + * @param netif the netif under DHCP control + */ +static err_t +dhcp_create_request(struct netif *netif) +{ + struct dhcp *dhcp; + u16_t i; +#ifndef DHCP_GLOBAL_XID + /** default global transaction identifier starting value (easy to match + * with a packet analyser). We simply increment for each new request. + * Predefine DHCP_GLOBAL_XID to a better value or a function call to generate one + * at runtime, any supporting function prototypes can be defined in DHCP_GLOBAL_XID_HEADER */ + static u32_t xid = 0xABCD0000; +#else + static u32_t xid; + static u8_t xid_initialised = 0; + if (!xid_initialised) { + xid = DHCP_GLOBAL_XID; + xid_initialised = !xid_initialised; + } +#endif + LWIP_ERROR("dhcp_create_request: netif != NULL", (netif != NULL), return ERR_ARG;); + dhcp = netif->dhcp; + LWIP_ERROR("dhcp_create_request: dhcp != NULL", (dhcp != NULL), return ERR_VAL;); + LWIP_ASSERT("dhcp_create_request: dhcp->p_out == NULL", dhcp->p_out == NULL); + LWIP_ASSERT("dhcp_create_request: dhcp->msg_out == NULL", dhcp->msg_out == NULL); + dhcp->p_out = pbuf_alloc(PBUF_TRANSPORT, sizeof(struct dhcp_msg), PBUF_RAM); + if (dhcp->p_out == NULL) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, + ("dhcp_create_request(): could not allocate pbuf\n")); + return ERR_MEM; + } + LWIP_ASSERT("dhcp_create_request: check that first pbuf can hold struct dhcp_msg", + (dhcp->p_out->len >= sizeof(struct dhcp_msg))); + + /* reuse transaction identifier in retransmissions */ + if (dhcp->tries==0) + xid++; + dhcp->xid = xid; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, + ("transaction id xid(%"X32_F")\n", xid)); + + dhcp->msg_out = (struct dhcp_msg *)dhcp->p_out->payload; + + dhcp->msg_out->op = DHCP_BOOTREQUEST; + /* TODO: make link layer independent */ + dhcp->msg_out->htype = DHCP_HTYPE_ETH; + /* TODO: make link layer independent */ + dhcp->msg_out->hlen = DHCP_HLEN_ETH; + dhcp->msg_out->hops = 0; + dhcp->msg_out->xid = htonl(dhcp->xid); + dhcp->msg_out->secs = 0; + dhcp->msg_out->flags = 0; + dhcp->msg_out->ciaddr.addr = 0; + if (dhcp->state==DHCP_BOUND || dhcp->state==DHCP_RENEWING || dhcp->state==DHCP_REBINDING) { + dhcp->msg_out->ciaddr.addr = netif->ip_addr.addr; + } + dhcp->msg_out->yiaddr.addr = 0; + dhcp->msg_out->siaddr.addr = 0; + dhcp->msg_out->giaddr.addr = 0; + for (i = 0; i < DHCP_CHADDR_LEN; i++) { + /* copy netif hardware address, pad with zeroes */ + dhcp->msg_out->chaddr[i] = (i < netif->hwaddr_len) ? netif->hwaddr[i] : 0/* pad byte*/; + } + for (i = 0; i < DHCP_SNAME_LEN; i++) { + dhcp->msg_out->sname[i] = 0; + } + for (i = 0; i < DHCP_FILE_LEN; i++) { + dhcp->msg_out->file[i] = 0; + } + dhcp->msg_out->cookie = htonl(0x63825363UL); + dhcp->options_out_len = 0; + /* fill options field with an incrementing array (for debugging purposes) */ + for (i = 0; i < DHCP_OPTIONS_LEN; i++) { + dhcp->msg_out->options[i] = (u8_t)i; /* for debugging only, no matter if truncated */ + } + return ERR_OK; +} + +/** + * Free previously allocated memory used to send a DHCP request. + * + * @param netif the netif under DHCP control + */ +static void +dhcp_delete_request(struct netif *netif) +{ + struct dhcp *dhcp; + LWIP_ERROR("dhcp_delete_request: netif != NULL", (netif != NULL), return;); + dhcp = netif->dhcp; + LWIP_ERROR("dhcp_delete_request: dhcp != NULL", (dhcp != NULL), return;); + LWIP_ASSERT("dhcp_delete_request: dhcp->p_out != NULL", dhcp->p_out != NULL); + LWIP_ASSERT("dhcp_delete_request: dhcp->msg_out != NULL", dhcp->msg_out != NULL); + if (dhcp->p_out != NULL) { + pbuf_free(dhcp->p_out); + } + dhcp->p_out = NULL; + dhcp->msg_out = NULL; +} + +/** + * Add a DHCP message trailer + * + * Adds the END option to the DHCP message, and if + * necessary, up to three padding bytes. + * + * @param dhcp DHCP state structure + */ +static void +dhcp_option_trailer(struct dhcp *dhcp) +{ + LWIP_ERROR("dhcp_option_trailer: dhcp != NULL", (dhcp != NULL), return;); + LWIP_ASSERT("dhcp_option_trailer: dhcp->msg_out != NULL\n", dhcp->msg_out != NULL); + LWIP_ASSERT("dhcp_option_trailer: dhcp->options_out_len < DHCP_OPTIONS_LEN\n", dhcp->options_out_len < DHCP_OPTIONS_LEN); + dhcp->msg_out->options[dhcp->options_out_len++] = DHCP_OPTION_END; + /* packet is too small, or not 4 byte aligned? */ + while ((dhcp->options_out_len < DHCP_MIN_OPTIONS_LEN) || (dhcp->options_out_len & 3)) { + /* LWIP_DEBUGF(DHCP_DEBUG,("dhcp_option_trailer:dhcp->options_out_len=%"U16_F", DHCP_OPTIONS_LEN=%"U16_F, dhcp->options_out_len, DHCP_OPTIONS_LEN)); */ + LWIP_ASSERT("dhcp_option_trailer: dhcp->options_out_len < DHCP_OPTIONS_LEN\n", dhcp->options_out_len < DHCP_OPTIONS_LEN); + /* add a fill/padding byte */ + dhcp->msg_out->options[dhcp->options_out_len++] = 0; + } +} + +/** + * Find the offset of a DHCP option inside the DHCP message. + * + * @param dhcp DHCP client + * @param option_type + * + * @return a byte offset into the UDP message where the option was found, or + * zero if the given option was not found. + */ +static u8_t *dhcp_get_option_ptr(struct dhcp *dhcp, u8_t option_type) +{ + u8_t overload = DHCP_OVERLOAD_NONE; + + /* options available? */ + if ((dhcp->options_in != NULL) && (dhcp->options_in_len > 0)) { + /* start with options field */ + u8_t *options = (u8_t *)dhcp->options_in; + u16_t offset = 0; + /* at least 1 byte to read and no end marker, then at least 3 bytes to read? */ + while ((offset < dhcp->options_in_len) && (options[offset] != DHCP_OPTION_END)) { + /* LWIP_DEBUGF(DHCP_DEBUG, ("msg_offset=%"U16_F", q->len=%"U16_F, msg_offset, q->len)); */ + /* are the sname and/or file field overloaded with options? */ + if (options[offset] == DHCP_OPTION_OVERLOAD) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("overloaded message detected\n")); + /* skip option type and length */ + offset += 2; + overload = options[offset++]; + } + /* requested option found */ + else if (options[offset] == option_type) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("option found at offset %"U16_F" in options\n", offset)); + return &options[offset]; + /* skip option */ + } else { + LWIP_DEBUGF(DHCP_DEBUG, ("skipping option %"U16_F" in options\n", options[offset])); + /* skip option type */ + offset++; + /* skip option length, and then length bytes */ + offset += 1 + options[offset]; + } + } + /* is this an overloaded message? */ + if (overload != DHCP_OVERLOAD_NONE) { + u16_t field_len; + if (overload == DHCP_OVERLOAD_FILE) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("overloaded file field\n")); + options = (u8_t *)&dhcp->msg_in->file; + field_len = DHCP_FILE_LEN; + } else if (overload == DHCP_OVERLOAD_SNAME) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("overloaded sname field\n")); + options = (u8_t *)&dhcp->msg_in->sname; + field_len = DHCP_SNAME_LEN; + /* TODO: check if else if () is necessary */ + } else { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("overloaded sname and file field\n")); + options = (u8_t *)&dhcp->msg_in->sname; + field_len = DHCP_FILE_LEN + DHCP_SNAME_LEN; + } + offset = 0; + + /* at least 1 byte to read and no end marker */ + while ((offset < field_len) && (options[offset] != DHCP_OPTION_END)) { + if (options[offset] == option_type) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("option found at offset=%"U16_F"\n", offset)); + return &options[offset]; + /* skip option */ + } else { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("skipping option %"U16_F"\n", options[offset])); + /* skip option type */ + offset++; + offset += 1 + options[offset]; + } + } + } + } + return NULL; +} + +/** + * Return the byte of DHCP option data. + * + * @param client DHCP client. + * @param ptr pointer obtained by dhcp_get_option_ptr(). + * + * @return byte value at the given address. + */ +static u8_t +dhcp_get_option_byte(u8_t *ptr) +{ + LWIP_DEBUGF(DHCP_DEBUG, ("option byte value=%"U16_F"\n", (u16_t)(*ptr))); + return *ptr; +} + +#if 0 /* currently unused */ +/** + * Return the 16-bit value of DHCP option data. + * + * @param client DHCP client. + * @param ptr pointer obtained by dhcp_get_option_ptr(). + * + * @return byte value at the given address. + */ +static u16_t +dhcp_get_option_short(u8_t *ptr) +{ + u16_t value; + value = *ptr++ << 8; + value |= *ptr; + LWIP_DEBUGF(DHCP_DEBUG, ("option short value=%"U16_F"\n", value)); + return value; +} +#endif + +/** + * Return the 32-bit value of DHCP option data. + * + * @param client DHCP client. + * @param ptr pointer obtained by dhcp_get_option_ptr(). + * + * @return byte value at the given address. + */ +static u32_t dhcp_get_option_long(u8_t *ptr) +{ + u32_t value; + value = (u32_t)(*ptr++) << 24; + value |= (u32_t)(*ptr++) << 16; + value |= (u32_t)(*ptr++) << 8; + value |= (u32_t)(*ptr++); + LWIP_DEBUGF(DHCP_DEBUG, ("option long value=%"U32_F"\n", value)); + return value; +} + +#endif /* LWIP_DHCP */ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/dns.c b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/dns.c new file mode 100644 index 000000000..62ccf6314 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/dns.c @@ -0,0 +1,982 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * DNS - host name to IP address resolver. + * + */ + +/** + + * This file implements a DNS host name to IP address resolver. + + * Port to lwIP from uIP + * by Jim Pettinato April 2007 + + * uIP version Copyright (c) 2002-2003, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * + * DNS.C + * + * The lwIP DNS resolver functions are used to lookup a host name and + * map it to a numerical IP address. It maintains a list of resolved + * hostnames that can be queried with the dns_lookup() function. + * New hostnames can be resolved using the dns_query() function. + * + * The lwIP version of the resolver also adds a non-blocking version of + * gethostbyname() that will work with a raw API application. This function + * checks for an IP address string first and converts it if it is valid. + * gethostbyname() then does a dns_lookup() to see if the name is + * already in the table. If so, the IP is returned. If not, a query is + * issued and the function returns with a ERR_INPROGRESS status. The app + * using the dns client must then go into a waiting state. + * + * Once a hostname has been resolved (or found to be non-existent), + * the resolver code calls a specified callback function (which + * must be implemented by the module that uses the resolver). + */ + +/*----------------------------------------------------------------------------- + * RFC 1035 - Domain names - implementation and specification + * RFC 2181 - Clarifications to the DNS Specification + *----------------------------------------------------------------------------*/ + +/** @todo: define good default values (rfc compliance) */ +/** @todo: improve answer parsing, more checkings... */ +/** @todo: check RFC1035 - 7.3. Processing responses */ + +/*----------------------------------------------------------------------------- + * Includes + *----------------------------------------------------------------------------*/ + +#include "lwip/opt.h" + +#if LWIP_DNS /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/udp.h" +#include "lwip/mem.h" +#include "lwip/dns.h" + +#include + +/** DNS server IP address */ +#ifndef DNS_SERVER_ADDRESS +#define DNS_SERVER_ADDRESS inet_addr("208.67.222.222") /* resolver1.opendns.com */ +#endif + +/** DNS server port address */ +#ifndef DNS_SERVER_PORT +#define DNS_SERVER_PORT 53 +#endif + +/** DNS maximum number of retries when asking for a name, before "timeout". */ +#ifndef DNS_MAX_RETRIES +#define DNS_MAX_RETRIES 4 +#endif + +/** DNS resource record max. TTL (one week as default) */ +#ifndef DNS_MAX_TTL +#define DNS_MAX_TTL 604800 +#endif + +/* DNS protocol flags */ +#define DNS_FLAG1_RESPONSE 0x80 +#define DNS_FLAG1_OPCODE_STATUS 0x10 +#define DNS_FLAG1_OPCODE_INVERSE 0x08 +#define DNS_FLAG1_OPCODE_STANDARD 0x00 +#define DNS_FLAG1_AUTHORATIVE 0x04 +#define DNS_FLAG1_TRUNC 0x02 +#define DNS_FLAG1_RD 0x01 +#define DNS_FLAG2_RA 0x80 +#define DNS_FLAG2_ERR_MASK 0x0f +#define DNS_FLAG2_ERR_NONE 0x00 +#define DNS_FLAG2_ERR_NAME 0x03 + +/* DNS protocol states */ +#define DNS_STATE_UNUSED 0 +#define DNS_STATE_NEW 1 +#define DNS_STATE_ASKING 2 +#define DNS_STATE_DONE 3 + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +/** DNS message header */ +struct dns_hdr { + PACK_STRUCT_FIELD(u16_t id); + PACK_STRUCT_FIELD(u8_t flags1); + PACK_STRUCT_FIELD(u8_t flags2); + PACK_STRUCT_FIELD(u16_t numquestions); + PACK_STRUCT_FIELD(u16_t numanswers); + PACK_STRUCT_FIELD(u16_t numauthrr); + PACK_STRUCT_FIELD(u16_t numextrarr); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif +#define SIZEOF_DNS_HDR 12 + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +/** DNS query message structure */ +struct dns_query { + /* DNS query record starts with either a domain name or a pointer + to a name already present somewhere in the packet. */ + PACK_STRUCT_FIELD(u16_t type); + PACK_STRUCT_FIELD(u16_t class); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif +#define SIZEOF_DNS_QUERY 4 + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +/** DNS answer message structure */ +struct dns_answer { + /* DNS answer record starts with either a domain name or a pointer + to a name already present somewhere in the packet. */ + PACK_STRUCT_FIELD(u16_t type); + PACK_STRUCT_FIELD(u16_t class); + PACK_STRUCT_FIELD(u32_t ttl); + PACK_STRUCT_FIELD(u16_t len); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif +#define SIZEOF_DNS_ANSWER 10 + +/** DNS table entry */ +struct dns_table_entry { + u8_t state; + u8_t numdns; + u8_t tmr; + u8_t retries; + u8_t seqno; + u8_t err; + u32_t ttl; + char name[DNS_MAX_NAME_LENGTH]; + struct ip_addr ipaddr; + /* pointer to callback on DNS query done */ + dns_found_callback found; + void *arg; +}; + +#if DNS_LOCAL_HOSTLIST +/** struct used for local host-list */ +struct local_hostlist_entry { + /** static hostname */ + const char *name; + /** static host address in network byteorder */ + u32_t addr; + struct local_hostlist_entry *next; +}; + +#if DNS_LOCAL_HOSTLIST_IS_DYNAMIC +/** Local host-list. For hostnames in this list, no + * external name resolution is performed */ +static struct local_hostlist_entry *local_hostlist_dynamic; +#else /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC */ + +/** Defining this allows the local_hostlist_static to be placed in a different + * linker section (e.g. FLASH) */ +#ifndef DNS_LOCAL_HOSTLIST_STORAGE_PRE +#define DNS_LOCAL_HOSTLIST_STORAGE_PRE static +#endif /* DNS_LOCAL_HOSTLIST_STORAGE_PRE */ +/** Defining this allows the local_hostlist_static to be placed in a different + * linker section (e.g. FLASH) */ +#ifndef DNS_LOCAL_HOSTLIST_STORAGE_POST +#define DNS_LOCAL_HOSTLIST_STORAGE_POST +#endif /* DNS_LOCAL_HOSTLIST_STORAGE_POST */ +DNS_LOCAL_HOSTLIST_STORAGE_PRE struct local_hostlist_entry local_hostlist_static[] + DNS_LOCAL_HOSTLIST_STORAGE_POST = DNS_LOCAL_HOSTLIST_INIT; + +#endif /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC */ + +static void dns_init_local(); +#endif /* DNS_LOCAL_HOSTLIST */ + + +/* forward declarations */ +static void dns_recv(void *s, struct udp_pcb *pcb, struct pbuf *p, struct ip_addr *addr, u16_t port); +static void dns_check_entries(void); + +/*----------------------------------------------------------------------------- + * Globales + *----------------------------------------------------------------------------*/ + +/* DNS variables */ +static struct udp_pcb *dns_pcb; +static u8_t dns_seqno; +static struct dns_table_entry dns_table[DNS_TABLE_SIZE]; +static struct ip_addr dns_servers[DNS_MAX_SERVERS]; + +#if (DNS_USES_STATIC_BUF == 1) +static u8_t dns_payload[DNS_MSG_SIZE]; +#endif /* (DNS_USES_STATIC_BUF == 1) */ + +/** + * Initialize the resolver: set up the UDP pcb and configure the default server + * (DNS_SERVER_ADDRESS). + */ +void +dns_init() +{ + struct ip_addr dnsserver; + + /* initialize default DNS server address */ + dnsserver.addr = DNS_SERVER_ADDRESS; + + LWIP_DEBUGF(DNS_DEBUG, ("dns_init: initializing\n")); + + /* if dns client not yet initialized... */ + if (dns_pcb == NULL) { + dns_pcb = udp_new(); + + if (dns_pcb != NULL) { + /* initialize DNS table not needed (initialized to zero since it is a + * global variable) */ + LWIP_ASSERT("For implicit initialization to work, DNS_STATE_UNUSED needs to be 0", + DNS_STATE_UNUSED == 0); + + /* initialize DNS client */ + udp_bind(dns_pcb, IP_ADDR_ANY, 0); + udp_recv(dns_pcb, dns_recv, NULL); + + /* initialize default DNS primary server */ + dns_setserver(0, &dnsserver); + } + } +#if DNS_LOCAL_HOSTLIST + dns_init_local(); +#endif +} + +/** + * Initialize one of the DNS servers. + * + * @param numdns the index of the DNS server to set must be < DNS_MAX_SERVERS + * @param dnsserver IP address of the DNS server to set + */ +void +dns_setserver(u8_t numdns, struct ip_addr *dnsserver) +{ + if ((numdns < DNS_MAX_SERVERS) && (dns_pcb != NULL) && + (dnsserver != NULL) && (dnsserver->addr !=0 )) { + dns_servers[numdns] = (*dnsserver); + } +} + +/** + * Obtain one of the currently configured DNS server. + * + * @param numdns the index of the DNS server + * @return IP address of the indexed DNS server or "ip_addr_any" if the DNS + * server has not been configured. + */ +struct ip_addr +dns_getserver(u8_t numdns) +{ + if (numdns < DNS_MAX_SERVERS) { + return dns_servers[numdns]; + } else { + return *IP_ADDR_ANY; + } +} + +/** + * The DNS resolver client timer - handle retries and timeouts and should + * be called every DNS_TMR_INTERVAL milliseconds (every second by default). + */ +void +dns_tmr(void) +{ + if (dns_pcb != NULL) { + LWIP_DEBUGF(DNS_DEBUG, ("dns_tmr: dns_check_entries\n")); + dns_check_entries(); + } +} + +#if DNS_LOCAL_HOSTLIST +static void +dns_init_local() +{ +#if DNS_LOCAL_HOSTLIST_IS_DYNAMIC && defined(DNS_LOCAL_HOSTLIST_INIT) + int i; + struct local_hostlist_entry *entry; + /* Dynamic: copy entries from DNS_LOCAL_HOSTLIST_INIT to list */ + struct local_hostlist_entry local_hostlist_init[] = DNS_LOCAL_HOSTLIST_INIT; + for (i = 0; i < sizeof(local_hostlist_init) / sizeof(struct local_hostlist_entry); i++) { + entry = mem_malloc(sizeof(struct local_hostlist_entry)); + LWIP_ASSERT("mem-error in dns_init_local", entry != NULL); + if (entry != NULL) { + struct local_hostlist_entry *init_entry = &local_hostlist_init[i]; + entry->name = init_entry->name; + entry->addr = init_entry->addr; + entry->next = local_hostlist_dynamic; + local_hostlist_dynamic = entry; + } + } +#endif /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC && defined(DNS_LOCAL_HOSTLIST_INIT) */ +} + +/** + * Scans the local host-list for a hostname. + * + * @param hostname Hostname to look for in the local host-list + * @return The first IP address for the hostname in the local host-list or + * INADDR_NONE if not found. + */ +static u32_t +dns_lookup_local(const char *hostname) +{ +#if DNS_LOCAL_HOSTLIST_IS_DYNAMIC + struct local_hostlist_entry *entry = local_hostlist_dynamic; + while(entry != NULL) { + if(strcmp(entry->name, hostname) == 0) { + return entry->addr; + } + entry = entry->next; + } +#else /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC */ + int i; + for (i = 0; i < sizeof(local_hostlist_static) / sizeof(struct local_hostlist_entry); i++) { + if(strcmp(local_hostlist_static[i].name, hostname) == 0) { + return local_hostlist_static[i].addr; + } + } +#endif /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC */ + return INADDR_NONE; +} + +#if DNS_LOCAL_HOSTLIST_IS_DYNAMIC +/** Remove all entries from the local host-list for a specific hostname + * and/or IP addess + * + * @param hostname hostname for which entries shall be removed from the local + * host-list + * @param addr address for which entries shall be removed from the local host-list + * @return the number of removed entries + */ +int +dns_local_removehost(const char *hostname, const struct ip_addr *addr) +{ + int removed = 0; + struct local_hostlist_entry *entry = local_hostlist_dynamic; + struct local_hostlist_entry *last_entry = NULL; + while (entry != NULL) { + if (((hostname == NULL) || !strcmp(entry->name, hostname)) && + ((addr == NULL) || (entry->addr == addr->addr))) { + struct local_hostlist_entry *free_entry; + if (last_entry != NULL) { + last_entry->next = entry->next; + } else { + local_hostlist_dynamic = entry->next; + } + free_entry = entry; + entry = entry->next; + mem_free(free_entry); + removed++; + } else { + last_entry = entry; + entry = entry->next; + } + } + return removed; +} + +/** + * Add a hostname/IP address pair to the local host-list. + * Duplicates are not checked. + * + * @param hostname hostname of the new entry + * @param addr IP address of the new entry + * @return ERR_OK if succeeded or ERR_MEM on memory error + */ +err_t +dns_local_addhost(const char *hostname, const struct ip_addr *addr) +{ + struct local_hostlist_entry *entry; + entry = mem_malloc(sizeof(struct local_hostlist_entry)); + if (entry == NULL) { + return ERR_MEM; + } + entry->name = hostname; + entry->addr = addr->addr; + entry->next = local_hostlist_dynamic; + local_hostlist_dynamic = entry; + return ERR_OK; +} +#endif /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC*/ +#endif /* DNS_LOCAL_HOSTLIST */ + +/** + * Look up a hostname in the array of known hostnames. + * + * @note This function only looks in the internal array of known + * hostnames, it does not send out a query for the hostname if none + * was found. The function dns_enqueue() can be used to send a query + * for a hostname. + * + * @param name the hostname to look up + * @return the hostname's IP address, as u32_t (instead of struct ip_addr to + * better check for failure: != INADDR_NONE) or INADDR_NONE if the hostname + * was not found in the cached dns_table. + */ +static u32_t +dns_lookup(const char *name) +{ + u8_t i; +#if DNS_LOCAL_HOSTLIST || defined(DNS_LOOKUP_LOCAL_EXTERN) + u32_t addr; +#endif /* DNS_LOCAL_HOSTLIST || defined(DNS_LOOKUP_LOCAL_EXTERN) */ +#if DNS_LOCAL_HOSTLIST + if ((addr = dns_lookup_local(name)) != INADDR_NONE) { + return addr; + } +#endif /* DNS_LOCAL_HOSTLIST */ +#ifdef DNS_LOOKUP_LOCAL_EXTERN + if((addr = DNS_LOOKUP_LOCAL_EXTERN(name)) != INADDR_NONE) { + return addr; + } +#endif /* DNS_LOOKUP_LOCAL_EXTERN */ + + /* Walk through name list, return entry if found. If not, return NULL. */ + for (i = 0; i < DNS_TABLE_SIZE; ++i) { + if ((dns_table[i].state == DNS_STATE_DONE) && + (strcmp(name, dns_table[i].name) == 0)) { + LWIP_DEBUGF(DNS_DEBUG, ("dns_lookup: \"%s\": found = ", name)); + ip_addr_debug_print(DNS_DEBUG, &(dns_table[i].ipaddr)); + LWIP_DEBUGF(DNS_DEBUG, ("\n")); + return dns_table[i].ipaddr.addr; + } + } + + return INADDR_NONE; +} + +#if DNS_DOES_NAME_CHECK +/** + * Compare the "dotted" name "query" with the encoded name "response" + * to make sure an answer from the DNS server matches the current dns_table + * entry (otherwise, answers might arrive late for hostname not on the list + * any more). + * + * @param query hostname (not encoded) from the dns_table + * @param response encoded hostname in the DNS response + * @return 0: names equal; 1: names differ + */ +static u8_t +dns_compare_name(unsigned char *query, unsigned char *response) +{ + unsigned char n; + + do { + n = *response++; + /** @see RFC 1035 - 4.1.4. Message compression */ + if ((n & 0xc0) == 0xc0) { + /* Compressed name */ + break; + } else { + /* Not compressed name */ + while (n > 0) { + if ((*query) != (*response)) { + return 1; + } + ++response; + ++query; + --n; + }; + ++query; + } + } while (*response != 0); + + return 0; +} +#endif /* DNS_DOES_NAME_CHECK */ + +/** + * Walk through a compact encoded DNS name and return the end of the name. + * + * @param query encoded DNS name in the DNS server response + * @return end of the name + */ +static unsigned char * +dns_parse_name(unsigned char *query) +{ + unsigned char n; + + do { + n = *query++; + /** @see RFC 1035 - 4.1.4. Message compression */ + if ((n & 0xc0) == 0xc0) { + /* Compressed name */ + break; + } else { + /* Not compressed name */ + while (n > 0) { + ++query; + --n; + }; + } + } while (*query != 0); + + return query + 1; +} + +/** + * Send a DNS query packet. + * + * @param numdns index of the DNS server in the dns_servers table + * @param name hostname to query + * @param id index of the hostname in dns_table, used as transaction ID in the + * DNS query packet + * @return ERR_OK if packet is sent; an err_t indicating the problem otherwise + */ +static err_t +dns_send(u8_t numdns, const char* name, u8_t id) +{ + err_t err; + struct dns_hdr *hdr; + struct dns_query qry; + struct pbuf *p; + char *query, *nptr; + const char *pHostname; + u8_t n; + + LWIP_DEBUGF(DNS_DEBUG, ("dns_send: dns_servers[%"U16_F"] \"%s\": request\n", + (u16_t)(numdns), name)); + LWIP_ASSERT("dns server out of array", numdns < DNS_MAX_SERVERS); + LWIP_ASSERT("dns server has no IP address set", dns_servers[numdns].addr != 0); + + /* if here, we have either a new query or a retry on a previous query to process */ + p = pbuf_alloc(PBUF_TRANSPORT, SIZEOF_DNS_HDR + DNS_MAX_NAME_LENGTH + + SIZEOF_DNS_QUERY, PBUF_RAM); + if (p != NULL) { + LWIP_ASSERT("pbuf must be in one piece", p->next == NULL); + /* fill dns header */ + hdr = (struct dns_hdr*)p->payload; + memset(hdr, 0, SIZEOF_DNS_HDR); + hdr->id = htons(id); + hdr->flags1 = DNS_FLAG1_RD; + hdr->numquestions = htons(1); + query = (char*)hdr + SIZEOF_DNS_HDR; + pHostname = name; + --pHostname; + + /* convert hostname into suitable query format. */ + do { + ++pHostname; + nptr = query; + ++query; + for(n = 0; *pHostname != '.' && *pHostname != 0; ++pHostname) { + *query = *pHostname; + ++query; + ++n; + } + *nptr = n; + } while(*pHostname != 0); + *query++='\0'; + + /* fill dns query */ + qry.type = htons(DNS_RRTYPE_A); + qry.class = htons(DNS_RRCLASS_IN); + MEMCPY( query, &qry, SIZEOF_DNS_QUERY); + + /* resize pbuf to the exact dns query */ + pbuf_realloc(p, (query + SIZEOF_DNS_QUERY) - ((char*)(p->payload))); + + /* connect to the server for faster receiving */ + udp_connect(dns_pcb, &dns_servers[numdns], DNS_SERVER_PORT); + /* send dns packet */ + err = udp_sendto(dns_pcb, p, &dns_servers[numdns], DNS_SERVER_PORT); + + /* free pbuf */ + pbuf_free(p); + } else { + err = ERR_MEM; + } + + return err; +} + +/** + * dns_check_entry() - see if pEntry has not yet been queried and, if so, sends out a query. + * Check an entry in the dns_table: + * - send out query for new entries + * - retry old pending entries on timeout (also with different servers) + * - remove completed entries from the table if their TTL has expired + * + * @param i index of the dns_table entry to check + */ +static void +dns_check_entry(u8_t i) +{ + struct dns_table_entry *pEntry = &dns_table[i]; + + LWIP_ASSERT("array index out of bounds", i < DNS_TABLE_SIZE); + + switch(pEntry->state) { + + case DNS_STATE_NEW: { + /* initialize new entry */ + pEntry->state = DNS_STATE_ASKING; + pEntry->numdns = 0; + pEntry->tmr = 1; + pEntry->retries = 0; + + /* send DNS packet for this entry */ + dns_send(pEntry->numdns, pEntry->name, i); + break; + } + + case DNS_STATE_ASKING: { + if (--pEntry->tmr == 0) { + if (++pEntry->retries == DNS_MAX_RETRIES) { + if ((pEntry->numdns+1numdns+1].addr!=0)) { + /* change of server */ + pEntry->numdns++; + pEntry->tmr = 1; + pEntry->retries = 0; + break; + } else { + LWIP_DEBUGF(DNS_DEBUG, ("dns_check_entry: \"%s\": timeout\n", pEntry->name)); + /* call specified callback function if provided */ + if (pEntry->found) + (*pEntry->found)(pEntry->name, NULL, pEntry->arg); + /* flush this entry */ + pEntry->state = DNS_STATE_UNUSED; + pEntry->found = NULL; + break; + } + } + + /* wait longer for the next retry */ + pEntry->tmr = pEntry->retries; + + /* send DNS packet for this entry */ + dns_send(pEntry->numdns, pEntry->name, i); + } + break; + } + + case DNS_STATE_DONE: { + /* if the time to live is nul */ + if (--pEntry->ttl == 0) { + LWIP_DEBUGF(DNS_DEBUG, ("dns_check_entry: \"%s\": flush\n", pEntry->name)); + /* flush this entry */ + pEntry->state = DNS_STATE_UNUSED; + pEntry->found = NULL; + } + break; + } + case DNS_STATE_UNUSED: + /* nothing to do */ + break; + default: + LWIP_ASSERT("unknown dns_table entry state:", 0); + break; + } +} + +/** + * Call dns_check_entry for each entry in dns_table - check all entries. + */ +static void +dns_check_entries(void) +{ + u8_t i; + + for (i = 0; i < DNS_TABLE_SIZE; ++i) { + dns_check_entry(i); + } +} + +/** + * Receive input function for DNS response packets arriving for the dns UDP pcb. + * + * @params see udp.h + */ +static void +dns_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, struct ip_addr *addr, u16_t port) +{ + u8_t i; + char *pHostname; + struct dns_hdr *hdr; + struct dns_answer ans; + struct dns_table_entry *pEntry; + u8_t nquestions, nanswers; +#if (DNS_USES_STATIC_BUF == 0) + u8_t dns_payload[DNS_MSG_SIZE]; +#endif /* (DNS_USES_STATIC_BUF == 0) */ +#if (DNS_USES_STATIC_BUF == 2) + u8_t* dns_payload; +#endif /* (DNS_USES_STATIC_BUF == 2) */ + + LWIP_UNUSED_ARG(arg); + LWIP_UNUSED_ARG(pcb); + LWIP_UNUSED_ARG(addr); + LWIP_UNUSED_ARG(port); + + /* is the dns message too big ? */ + if (p->tot_len > DNS_MSG_SIZE) { + LWIP_DEBUGF(DNS_DEBUG, ("dns_recv: pbuf too big\n")); + /* free pbuf and return */ + goto memerr1; + } + + /* is the dns message big enough ? */ + if (p->tot_len < (SIZEOF_DNS_HDR + SIZEOF_DNS_QUERY + SIZEOF_DNS_ANSWER)) { + LWIP_DEBUGF(DNS_DEBUG, ("dns_recv: pbuf too small\n")); + /* free pbuf and return */ + goto memerr1; + } + +#if (DNS_USES_STATIC_BUF == 2) + dns_payload = mem_malloc(p->tot_len); + if (dns_payload == NULL) { + LWIP_DEBUGF(DNS_DEBUG, ("dns_recv: mem_malloc error\n")); + /* free pbuf and return */ + goto memerr1; + } +#endif /* (DNS_USES_STATIC_BUF == 2) */ + + /* copy dns payload inside static buffer for processing */ + if (pbuf_copy_partial(p, dns_payload, p->tot_len, 0) == p->tot_len) { + /* The ID in the DNS header should be our entry into the name table. */ + hdr = (struct dns_hdr*)dns_payload; + i = htons(hdr->id); + if (i < DNS_TABLE_SIZE) { + pEntry = &dns_table[i]; + if(pEntry->state == DNS_STATE_ASKING) { + /* This entry is now completed. */ + pEntry->state = DNS_STATE_DONE; + pEntry->err = hdr->flags2 & DNS_FLAG2_ERR_MASK; + + /* We only care about the question(s) and the answers. The authrr + and the extrarr are simply discarded. */ + nquestions = htons(hdr->numquestions); + nanswers = htons(hdr->numanswers); + + /* Check for error. If so, call callback to inform. */ + if (((hdr->flags1 & DNS_FLAG1_RESPONSE) == 0) || (pEntry->err != 0) || (nquestions != 1)) { + LWIP_DEBUGF(DNS_DEBUG, ("dns_recv: \"%s\": error in flags\n", pEntry->name)); + /* call callback to indicate error, clean up memory and return */ + goto responseerr; + } + +#if DNS_DOES_NAME_CHECK + /* Check if the name in the "question" part match with the name in the entry. */ + if (dns_compare_name((unsigned char *)(pEntry->name), (unsigned char *)dns_payload + SIZEOF_DNS_HDR) != 0) { + LWIP_DEBUGF(DNS_DEBUG, ("dns_recv: \"%s\": response not match to query\n", pEntry->name)); + /* call callback to indicate error, clean up memory and return */ + goto responseerr; + } +#endif /* DNS_DOES_NAME_CHECK */ + + /* Skip the name in the "question" part */ + pHostname = (char *) dns_parse_name((unsigned char *)dns_payload + SIZEOF_DNS_HDR) + SIZEOF_DNS_QUERY; + + while(nanswers > 0) { + /* skip answer resource record's host name */ + pHostname = (char *) dns_parse_name((unsigned char *)pHostname); + + /* Check for IP address type and Internet class. Others are discarded. */ + MEMCPY(&ans, pHostname, SIZEOF_DNS_ANSWER); + if((ntohs(ans.type) == DNS_RRTYPE_A) && (ntohs(ans.class) == DNS_RRCLASS_IN) && (ntohs(ans.len) == sizeof(struct ip_addr)) ) { + /* read the answer resource record's TTL, and maximize it if needed */ + pEntry->ttl = ntohl(ans.ttl); + if (pEntry->ttl > DNS_MAX_TTL) { + pEntry->ttl = DNS_MAX_TTL; + } + /* read the IP address after answer resource record's header */ + MEMCPY( &(pEntry->ipaddr), (pHostname+SIZEOF_DNS_ANSWER), sizeof(struct ip_addr)); + LWIP_DEBUGF(DNS_DEBUG, ("dns_recv: \"%s\": response = ", pEntry->name)); + ip_addr_debug_print(DNS_DEBUG, (&(pEntry->ipaddr))); + LWIP_DEBUGF(DNS_DEBUG, ("\n")); + /* call specified callback function if provided */ + if (pEntry->found) { + (*pEntry->found)(pEntry->name, &pEntry->ipaddr, pEntry->arg); + } + /* deallocate memory and return */ + goto memerr2; + } else { + pHostname = pHostname + SIZEOF_DNS_ANSWER + htons(ans.len); + } + --nanswers; + } + LWIP_DEBUGF(DNS_DEBUG, ("dns_recv: \"%s\": error in response\n", pEntry->name)); + /* call callback to indicate error, clean up memory and return */ + goto responseerr; + } + } + } + + /* deallocate memory and return */ + goto memerr2; + +responseerr: + /* ERROR: call specified callback function with NULL as name to indicate an error */ + if (pEntry->found) { + (*pEntry->found)(pEntry->name, NULL, pEntry->arg); + } + /* flush this entry */ + pEntry->state = DNS_STATE_UNUSED; + pEntry->found = NULL; + +memerr2: +#if (DNS_USES_STATIC_BUF == 2) + /* free dns buffer */ + mem_free(dns_payload); +#endif /* (DNS_USES_STATIC_BUF == 2) */ + +memerr1: + /* free pbuf */ + pbuf_free(p); + return; +} + +/** + * Queues a new hostname to resolve and sends out a DNS query for that hostname + * + * @param name the hostname that is to be queried + * @param found a callback founction to be called on success, failure or timeout + * @param callback_arg argument to pass to the callback function + * @return @return a err_t return code. + */ +static err_t +dns_enqueue(const char *name, dns_found_callback found, void *callback_arg) +{ + u8_t i; + u8_t lseq, lseqi; + struct dns_table_entry *pEntry = NULL; + + /* search an unused entry, or the oldest one */ + lseq = lseqi = 0; + for (i = 0; i < DNS_TABLE_SIZE; ++i) { + pEntry = &dns_table[i]; + /* is it an unused entry ? */ + if (pEntry->state == DNS_STATE_UNUSED) + break; + + /* check if this is the oldest completed entry */ + if (pEntry->state == DNS_STATE_DONE) { + if ((dns_seqno - pEntry->seqno) > lseq) { + lseq = dns_seqno - pEntry->seqno; + lseqi = i; + } + } + } + + /* if we don't have found an unused entry, use the oldest completed one */ + if (i == DNS_TABLE_SIZE) { + if ((lseqi >= DNS_TABLE_SIZE) || (dns_table[lseqi].state != DNS_STATE_DONE)) { + /* no entry can't be used now, table is full */ + LWIP_DEBUGF(DNS_DEBUG, ("dns_enqueue: \"%s\": DNS entries table is full\n", name)); + return ERR_MEM; + } else { + /* use the oldest completed one */ + i = lseqi; + pEntry = &dns_table[i]; + } + } + + /* use this entry */ + LWIP_DEBUGF(DNS_DEBUG, ("dns_enqueue: \"%s\": use DNS entry %"U16_F"\n", name, (u16_t)(i))); + + /* fill the entry */ + pEntry->state = DNS_STATE_NEW; + pEntry->seqno = dns_seqno++; + pEntry->found = found; + pEntry->arg = callback_arg; + strcpy(pEntry->name, name); + + /* force to send query without waiting timer */ + dns_check_entry(i); + + /* dns query is enqueued */ + return ERR_INPROGRESS; +} + +/** + * Resolve a hostname (string) into an IP address. + * NON-BLOCKING callback version for use with raw API!!! + * + * Returns immediately with one of err_t return codes: + * - ERR_OK if hostname is a valid IP address string or the host + * name is already in the local names table. + * - ERR_INPROGRESS enqueue a request to be sent to the DNS server + * for resolution if no errors are present. + * + * @param hostname the hostname that is to be queried + * @param addr pointer to a struct ip_addr where to store the address if it is already + * cached in the dns_table (only valid if ERR_OK is returned!) + * @param found a callback function to be called on success, failure or timeout (only if + * ERR_INPROGRESS is returned!) + * @param callback_arg argument to pass to the callback function + * @return a err_t return code. + */ +err_t +dns_gethostbyname(const char *hostname, struct ip_addr *addr, dns_found_callback found, + void *callback_arg) +{ + /* not initialized or no valid server yet, or invalid addr pointer + * or invalid hostname or invalid hostname length */ + if ((dns_pcb == NULL) || (addr == NULL) || + (!hostname) || (!hostname[0]) || + (strlen(hostname) >= DNS_MAX_NAME_LENGTH)) { + return ERR_VAL; + } + +#if LWIP_HAVE_LOOPIF + if (strcmp(hostname,"localhost")==0) { + addr->addr = htonl(INADDR_LOOPBACK); + return ERR_OK; + } +#endif /* LWIP_HAVE_LOOPIF */ + + /* host name already in octet notation? set ip addr and return ERR_OK + * already have this address cached? */ + if (((addr->addr = inet_addr(hostname)) != INADDR_NONE) || + ((addr->addr = dns_lookup(hostname)) != INADDR_NONE)) { + return ERR_OK; + } + + /* queue query with specified callback */ + return dns_enqueue(hostname, found, callback_arg); +} + +#endif /* LWIP_DNS */ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/init.c b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/init.c new file mode 100644 index 000000000..b7995276c --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/init.c @@ -0,0 +1,276 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * Modules initialization + * + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#include "lwip/opt.h" + +#include "lwip/init.h" +#include "lwip/stats.h" +#include "lwip/sys.h" +#include "lwip/mem.h" +#include "lwip/memp.h" +#include "lwip/pbuf.h" +#include "lwip/netif.h" +#include "lwip/sockets.h" +#include "lwip/ip.h" +#include "lwip/raw.h" +#include "lwip/udp.h" +#include "lwip/tcp.h" +#include "lwip/snmp_msg.h" +#include "lwip/autoip.h" +#include "lwip/igmp.h" +#include "lwip/dns.h" +#include "netif/etharp.h" + +/* Compile-time sanity checks for configuration errors. + * These can be done independently of LWIP_DEBUG, without penalty. + */ +#ifndef BYTE_ORDER + #error "BYTE_ORDER is not defined, you have to define it in your cc.h" +#endif +#if (!IP_SOF_BROADCAST && IP_SOF_BROADCAST_RECV) + #error "If you want to use broadcast filter per pcb on recv operations, you have to define IP_SOF_BROADCAST=1 in your lwipopts.h" +#endif +#if (!LWIP_ARP && ARP_QUEUEING) + #error "If you want to use ARP Queueing, you have to define LWIP_ARP=1 in your lwipopts.h" +#endif +#if (!LWIP_UDP && LWIP_UDPLITE) + #error "If you want to use UDP Lite, you have to define LWIP_UDP=1 in your lwipopts.h" +#endif +#if (!LWIP_UDP && LWIP_SNMP) + #error "If you want to use SNMP, you have to define LWIP_UDP=1 in your lwipopts.h" +#endif +#if (!LWIP_UDP && LWIP_DHCP) + #error "If you want to use DHCP, you have to define LWIP_UDP=1 in your lwipopts.h" +#endif +#if (!LWIP_UDP && LWIP_IGMP) + #error "If you want to use IGMP, you have to define LWIP_UDP=1 in your lwipopts.h" +#endif +#if (!LWIP_UDP && LWIP_DNS) + #error "If you want to use DNS, you have to define LWIP_UDP=1 in your lwipopts.h" +#endif +#if (LWIP_ARP && (ARP_TABLE_SIZE > 0x7f)) + #error "If you want to use ARP, ARP_TABLE_SIZE must fit in an s8_t, so, you have to reduce it in your lwipopts.h" +#endif +#if (LWIP_ARP && ARP_QUEUEING && (MEMP_NUM_ARP_QUEUE<=0)) + #error "If you want to use ARP Queueing, you have to define MEMP_NUM_ARP_QUEUE>=1 in your lwipopts.h" +#endif +#if (LWIP_RAW && (MEMP_NUM_RAW_PCB<=0)) + #error "If you want to use RAW, you have to define MEMP_NUM_RAW_PCB>=1 in your lwipopts.h" +#endif +#if (LWIP_UDP && (MEMP_NUM_UDP_PCB<=0)) + #error "If you want to use UDP, you have to define MEMP_NUM_UDP_PCB>=1 in your lwipopts.h" +#endif +#if (LWIP_TCP && (MEMP_NUM_TCP_PCB<=0)) + #error "If you want to use TCP, you have to define MEMP_NUM_TCP_PCB>=1 in your lwipopts.h" +#endif +#if (LWIP_TCP && (TCP_WND > 0xffff)) + #error "If you want to use TCP, TCP_WND must fit in an u16_t, so, you have to reduce it in your lwipopts.h" +#endif +#if (LWIP_TCP && (TCP_SND_QUEUELEN > 0xffff)) + #error "If you want to use TCP, TCP_SND_QUEUELEN must fit in an u16_t, so, you have to reduce it in your lwipopts.h" +#endif +#if (LWIP_TCP && ((TCP_MAXRTX > 12) || (TCP_SYNMAXRTX > 12))) + #error "If you want to use TCP, TCP_MAXRTX and TCP_SYNMAXRTX must less or equal to 12 (due to tcp_backoff table), so, you have to reduce them in your lwipopts.h" +#endif +#if (LWIP_TCP && TCP_LISTEN_BACKLOG && (TCP_DEFAULT_LISTEN_BACKLOG < 0) || (TCP_DEFAULT_LISTEN_BACKLOG > 0xff)) + #error "If you want to use TCP backlog, TCP_DEFAULT_LISTEN_BACKLOG must fit into an u8_t" +#endif +#if (LWIP_IGMP && (MEMP_NUM_IGMP_GROUP<=1)) + #error "If you want to use IGMP, you have to define MEMP_NUM_IGMP_GROUP>1 in your lwipopts.h" +#endif +#if (PPP_SUPPORT && (NO_SYS==1)) + #error "If you want to use PPP, you have to define NO_SYS=0 in your lwipopts.h" +#endif +#if (LWIP_NETIF_API && (NO_SYS==1)) + #error "If you want to use NETIF API, you have to define NO_SYS=0 in your lwipopts.h" +#endif +#if ((LWIP_SOCKET || LWIP_NETCONN) && (NO_SYS==1)) + #error "If you want to use Sequential API, you have to define NO_SYS=0 in your lwipopts.h" +#endif +#if ((LWIP_NETCONN || LWIP_SOCKET) && (MEMP_NUM_TCPIP_MSG_API<=0)) + #error "If you want to use Sequential API, you have to define MEMP_NUM_TCPIP_MSG_API>=1 in your lwipopts.h" +#endif +#if (!LWIP_NETCONN && LWIP_SOCKET) + #error "If you want to use Socket API, you have to define LWIP_NETCONN=1 in your lwipopts.h" +#endif +#if (((!LWIP_DHCP) || (!LWIP_AUTOIP)) && LWIP_DHCP_AUTOIP_COOP) + #error "If you want to use DHCP/AUTOIP cooperation mode, you have to define LWIP_DHCP=1 and LWIP_AUTOIP=1 in your lwipopts.h" +#endif +#if (((!LWIP_DHCP) || (!LWIP_ARP)) && DHCP_DOES_ARP_CHECK) + #error "If you want to use DHCP ARP checking, you have to define LWIP_DHCP=1 and LWIP_ARP=1 in your lwipopts.h" +#endif +#if (!LWIP_ARP && LWIP_AUTOIP) + #error "If you want to use AUTOIP, you have to define LWIP_ARP=1 in your lwipopts.h" +#endif +#if (LWIP_SNMP && (SNMP_CONCURRENT_REQUESTS<=0)) + #error "If you want to use SNMP, you have to define SNMP_CONCURRENT_REQUESTS>=1 in your lwipopts.h" +#endif +#if (LWIP_SNMP && (SNMP_TRAP_DESTINATIONS<=0)) + #error "If you want to use SNMP, you have to define SNMP_TRAP_DESTINATIONS>=1 in your lwipopts.h" +#endif +#if (LWIP_TCP && ((LWIP_EVENT_API && LWIP_CALLBACK_API) || (!LWIP_EVENT_API && !LWIP_CALLBACK_API))) + #error "One and exactly one of LWIP_EVENT_API and LWIP_CALLBACK_API has to be enabled in your lwipopts.h" +#endif +/* There must be sufficient timeouts, taking into account requirements of the subsystems. */ +#if ((NO_SYS==0) && (MEMP_NUM_SYS_TIMEOUT < (LWIP_TCP + IP_REASSEMBLY + LWIP_ARP + (2*LWIP_DHCP) + LWIP_AUTOIP + LWIP_IGMP + LWIP_DNS + PPP_SUPPORT))) + #error "MEMP_NUM_SYS_TIMEOUT is too low to accomodate all required timeouts" +#endif +#if (IP_REASSEMBLY && (MEMP_NUM_REASSDATA > IP_REASS_MAX_PBUFS)) + #error "MEMP_NUM_REASSDATA > IP_REASS_MAX_PBUFS doesn't make sense since each struct ip_reassdata must hold 2 pbufs at least!" +#endif +#if (MEM_LIBC_MALLOC && MEM_USE_POOLS) + #error "MEM_LIBC_MALLOC and MEM_USE_POOLS may not both be simultaneously enabled in your lwipopts.h" +#endif +#if (MEM_USE_POOLS && !MEMP_USE_CUSTOM_POOLS) + #error "MEM_USE_POOLS requires custom pools (MEMP_USE_CUSTOM_POOLS) to be enabled in your lwipopts.h" +#endif +#if (PBUF_POOL_BUFSIZE <= MEM_ALIGNMENT) + #error "PBUF_POOL_BUFSIZE must be greater than MEM_ALIGNMENT or the offset may take the full first pbuf" +#endif +#if (TCP_QUEUE_OOSEQ && !LWIP_TCP) + #error "TCP_QUEUE_OOSEQ requires LWIP_TCP" +#endif +#if (DNS_LOCAL_HOSTLIST && !DNS_LOCAL_HOSTLIST_IS_DYNAMIC && !(defined(DNS_LOCAL_HOSTLIST_INIT))) + #error "you have to define define DNS_LOCAL_HOSTLIST_INIT {{'host1', 0x123}, {'host2', 0x234}} to initialize DNS_LOCAL_HOSTLIST" +#endif +#if PPP_SUPPORT && !PPPOS_SUPPORT & !PPPOE_SUPPORT + #error "PPP_SUPPORT needs either PPPOS_SUPPORT or PPPOE_SUPPORT turned on" +#endif + + +/* Compile-time checks for deprecated options. + */ +#ifdef MEMP_NUM_TCPIP_MSG + #error "MEMP_NUM_TCPIP_MSG option is deprecated. Remove it from your lwipopts.h." +#endif +#ifdef MEMP_NUM_API_MSG + #error "MEMP_NUM_API_MSG option is deprecated. Remove it from your lwipopts.h." +#endif +#ifdef TCP_REXMIT_DEBUG + #error "TCP_REXMIT_DEBUG option is deprecated. Remove it from your lwipopts.h." +#endif +#ifdef RAW_STATS + #error "RAW_STATS option is deprecated. Remove it from your lwipopts.h." +#endif +#ifdef ETHARP_QUEUE_FIRST + #error "ETHARP_QUEUE_FIRST option is deprecated. Remove it from your lwipopts.h." +#endif +#ifdef ETHARP_ALWAYS_INSERT + #error "ETHARP_ALWAYS_INSERT option is deprecated. Remove it from your lwipopts.h." +#endif +#if SO_REUSE +/* I removed the lot since this was an ugly hack. It broke the raw-API. + It also came with many ugly goto's, Christiaan Simons. */ + #error "SO_REUSE currently unavailable, this was a hack" +#endif + +#ifdef LWIP_DEBUG +static void +lwip_sanity_check(void) +{ + /* Warnings */ +#if LWIP_NETCONN + if (MEMP_NUM_NETCONN > (MEMP_NUM_TCP_PCB+MEMP_NUM_TCP_PCB_LISTEN+MEMP_NUM_UDP_PCB+MEMP_NUM_RAW_PCB)) + LWIP_PLATFORM_DIAG(("lwip_sanity_check: WARNING: MEMP_NUM_NETCONN should be less than the sum of MEMP_NUM_{TCP,RAW,UDP}_PCB+MEMP_NUM_TCP_PCB_LISTEN\n")); +#endif /* LWIP_NETCONN */ +#if LWIP_TCP + if (MEMP_NUM_TCP_SEG < TCP_SND_QUEUELEN) + LWIP_PLATFORM_DIAG(("lwip_sanity_check: WARNING: MEMP_NUM_TCP_SEG should be at least as big as TCP_SND_QUEUELEN\n")); + if (TCP_SND_BUF < 2 * TCP_MSS) + LWIP_PLATFORM_DIAG(("lwip_sanity_check: WARNING: TCP_SND_BUF must be at least as much as (2 * TCP_MSS) for things to work smoothly\n")); + if (TCP_SND_QUEUELEN < (2 * (TCP_SND_BUF/TCP_MSS))) + LWIP_PLATFORM_DIAG(("lwip_sanity_check: WARNING: TCP_SND_QUEUELEN must be at least as much as (2 * TCP_SND_BUF/TCP_MSS) for things to work\n")); + if (TCP_SNDLOWAT > TCP_SND_BUF) + LWIP_PLATFORM_DIAG(("lwip_sanity_check: WARNING: TCP_SNDLOWAT must be less than or equal to TCP_SND_BUF.\n")); + if (TCP_WND > (PBUF_POOL_SIZE*PBUF_POOL_BUFSIZE)) + LWIP_PLATFORM_DIAG(("lwip_sanity_check: WARNING: TCP_WND is larger than space provided by PBUF_POOL_SIZE*PBUF_POOL_BUFSIZE\n")); + if (TCP_WND < TCP_MSS) + LWIP_PLATFORM_DIAG(("lwip_sanity_check: WARNING: TCP_WND is smaller than MSS\n")); +#endif /* LWIP_TCP */ +} +#else /* LWIP_DEBUG */ +#define lwip_sanity_check() +#endif /* LWIP_DEBUG */ + +/** + * Perform Sanity check of user-configurable values, and initialize all modules. + */ +void +lwip_init(void) +{ + /* Sanity check user-configurable values */ + lwip_sanity_check(); + + /* Modules initialization */ + stats_init(); + sys_init(); + mem_init(); + memp_init(); + pbuf_init(); + netif_init(); +#if LWIP_SOCKET + lwip_socket_init(); +#endif /* LWIP_SOCKET */ + ip_init(); +#if LWIP_ARP + etharp_init(); +#endif /* LWIP_ARP */ +#if LWIP_RAW + raw_init(); +#endif /* LWIP_RAW */ +#if LWIP_UDP + udp_init(); +#endif /* LWIP_UDP */ +#if LWIP_TCP + tcp_init(); +#endif /* LWIP_TCP */ +#if LWIP_SNMP + snmp_init(); +#endif /* LWIP_SNMP */ +#if LWIP_AUTOIP + autoip_init(); +#endif /* LWIP_AUTOIP */ +#if LWIP_IGMP + igmp_init(); +#endif /* LWIP_IGMP */ +#if LWIP_DNS + dns_init(); +#endif /* LWIP_DNS */ +} diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/autoip.c b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/autoip.c new file mode 100644 index 000000000..dde6b6d05 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/autoip.c @@ -0,0 +1,499 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * AutoIP Automatic LinkLocal IP Configuration + * + */ + +/* + * + * Copyright (c) 2007 Dominik Spies + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * Author: Dominik Spies + * + * This is a AutoIP implementation for the lwIP TCP/IP stack. It aims to conform + * with RFC 3927. + * + * + * Please coordinate changes and requests with Dominik Spies + * + */ + +/******************************************************************************* + * USAGE: + * + * define LWIP_AUTOIP 1 in your lwipopts.h + * + * If you don't use tcpip.c (so, don't call, you don't call tcpip_init): + * - First, call autoip_init(). + * - call autoip_tmr() all AUTOIP_TMR_INTERVAL msces, + * that should be defined in autoip.h. + * I recommend a value of 100. The value must divide 1000 with a remainder almost 0. + * Possible values are 1000, 500, 333, 250, 200, 166, 142, 125, 111, 100 .... + * + * Without DHCP: + * - Call autoip_start() after netif_add(). + * + * With DHCP: + * - define LWIP_DHCP_AUTOIP_COOP 1 in your lwipopts.h. + * - Configure your DHCP Client. + * + */ + +#include "lwip/opt.h" + +#if LWIP_AUTOIP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/mem.h" +#include "lwip/udp.h" +#include "lwip/ip_addr.h" +#include "lwip/netif.h" +#include "lwip/autoip.h" +#include "netif/etharp.h" + +#include +#include + +/* 169.254.0.0 */ +#define AUTOIP_NET 0xA9FE0000 +/* 169.254.1.0 */ +#define AUTOIP_RANGE_START (AUTOIP_NET | 0x0100) +/* 169.254.254.255 */ +#define AUTOIP_RANGE_END (AUTOIP_NET | 0xFEFF) + + +/** Pseudo random macro based on netif informations. + * You could use "rand()" from the C Library if you define LWIP_AUTOIP_RAND in lwipopts.h */ +#ifndef LWIP_AUTOIP_RAND +#define LWIP_AUTOIP_RAND(netif) ( (((u32_t)((netif->hwaddr[5]) & 0xff) << 24) | \ + ((u32_t)((netif->hwaddr[3]) & 0xff) << 16) | \ + ((u32_t)((netif->hwaddr[2]) & 0xff) << 8) | \ + ((u32_t)((netif->hwaddr[4]) & 0xff))) + \ + (netif->autoip?netif->autoip->tried_llipaddr:0)) +#endif /* LWIP_AUTOIP_RAND */ + +/** + * Macro that generates the initial IP address to be tried by AUTOIP. + * If you want to override this, define it to something else in lwipopts.h. + */ +#ifndef LWIP_AUTOIP_CREATE_SEED_ADDR +#define LWIP_AUTOIP_CREATE_SEED_ADDR(netif) \ + htonl(AUTOIP_RANGE_START + ((u32_t)(((u8_t)(netif->hwaddr[4])) | \ + ((u32_t)((u8_t)(netif->hwaddr[5]))) << 8))) +#endif /* LWIP_AUTOIP_CREATE_SEED_ADDR */ + +/* static functions */ +static void autoip_handle_arp_conflict(struct netif *netif); + +/* creates a pseudo random LL IP-Address for a network interface */ +static void autoip_create_addr(struct netif *netif, struct ip_addr *ipaddr); + +/* sends an ARP probe */ +static err_t autoip_arp_probe(struct netif *netif); + +/* sends an ARP announce */ +static err_t autoip_arp_announce(struct netif *netif); + +/* configure interface for use with current LL IP-Address */ +static err_t autoip_bind(struct netif *netif); + +/* start sending probes for llipaddr */ +static void autoip_start_probing(struct netif *netif); + +/** + * Initialize this module + */ +void +autoip_init(void) +{ + LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE, ("autoip_init()\n")); +} + +/** + * Handle a IP address conflict after an ARP conflict detection + */ +static void +autoip_handle_arp_conflict(struct netif *netif) +{ + /* Somehow detect if we are defending or retreating */ + unsigned char defend = 1; /* tbd */ + + if(defend) { + if(netif->autoip->lastconflict > 0) { + /* retreat, there was a conflicting ARP in the last + * DEFEND_INTERVAL seconds + */ + LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, + ("autoip_handle_arp_conflict(): we are defending, but in DEFEND_INTERVAL, retreating\n")); + + /* TODO: close all TCP sessions */ + autoip_start(netif); + } else { + LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, + ("autoip_handle_arp_conflict(): we are defend, send ARP Announce\n")); + autoip_arp_announce(netif); + netif->autoip->lastconflict = DEFEND_INTERVAL * AUTOIP_TICKS_PER_SECOND; + } + } else { + LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, + ("autoip_handle_arp_conflict(): we do not defend, retreating\n")); + /* TODO: close all TCP sessions */ + autoip_start(netif); + } +} + +/** + * Create an IP-Address out of range 169.254.1.0 to 169.254.254.255 + * + * @param netif network interface on which create the IP-Address + * @param ipaddr ip address to initialize + */ +static void +autoip_create_addr(struct netif *netif, struct ip_addr *ipaddr) +{ + /* Here we create an IP-Address out of range 169.254.1.0 to 169.254.254.255 + * compliant to RFC 3927 Section 2.1 + * We have 254 * 256 possibilities */ + + u32_t addr = ntohl(LWIP_AUTOIP_CREATE_SEED_ADDR(netif)); + addr += netif->autoip->tried_llipaddr; + addr = AUTOIP_NET | (addr & 0xffff); + /* Now, 169.254.0.0 <= addr <= 169.254.255.255 */ + + if (addr < AUTOIP_RANGE_START) { + addr += AUTOIP_RANGE_END - AUTOIP_RANGE_START + 1; + } + if (addr > AUTOIP_RANGE_END) { + addr -= AUTOIP_RANGE_END - AUTOIP_RANGE_START + 1; + } + LWIP_ASSERT("AUTOIP address not in range", (addr >= AUTOIP_RANGE_START) && + (addr <= AUTOIP_RANGE_END)); + ipaddr->addr = htonl(addr); + + LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, + ("autoip_create_addr(): tried_llipaddr=%"U16_F", 0x%08"X32_F"\n", + (u16_t)(netif->autoip->tried_llipaddr), (u32_t)(ipaddr->addr))); +} + +/** + * Sends an ARP probe from a network interface + * + * @param netif network interface used to send the probe + */ +static err_t +autoip_arp_probe(struct netif *netif) +{ + return etharp_raw(netif, (struct eth_addr *)netif->hwaddr, ðbroadcast, + (struct eth_addr *)netif->hwaddr, IP_ADDR_ANY, ðzero, + &netif->autoip->llipaddr, ARP_REQUEST); +} + +/** + * Sends an ARP announce from a network interface + * + * @param netif network interface used to send the announce + */ +static err_t +autoip_arp_announce(struct netif *netif) +{ + return etharp_raw(netif, (struct eth_addr *)netif->hwaddr, ðbroadcast, + (struct eth_addr *)netif->hwaddr, &netif->autoip->llipaddr, ðzero, + &netif->autoip->llipaddr, ARP_REQUEST); +} + +/** + * Configure interface for use with current LL IP-Address + * + * @param netif network interface to configure with current LL IP-Address + */ +static err_t +autoip_bind(struct netif *netif) +{ + struct autoip *autoip = netif->autoip; + struct ip_addr sn_mask, gw_addr; + + LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE, + ("autoip_bind(netif=%p) %c%c%"U16_F" 0x%08"X32_F"\n", + (void*)netif, netif->name[0], netif->name[1], (u16_t)netif->num, autoip->llipaddr.addr)); + + IP4_ADDR(&sn_mask, 255, 255, 0, 0); + IP4_ADDR(&gw_addr, 0, 0, 0, 0); + + netif_set_ipaddr(netif, &autoip->llipaddr); + netif_set_netmask(netif, &sn_mask); + netif_set_gw(netif, &gw_addr); + + /* bring the interface up */ + netif_set_up(netif); + + return ERR_OK; +} + +/** + * Start AutoIP client + * + * @param netif network interface on which start the AutoIP client + */ +err_t +autoip_start(struct netif *netif) +{ + struct autoip *autoip = netif->autoip; + err_t result = ERR_OK; + + if(netif_is_up(netif)) { + netif_set_down(netif); + } + + /* Set IP-Address, Netmask and Gateway to 0 to make sure that + * ARP Packets are formed correctly + */ + netif->ip_addr.addr = 0; + netif->netmask.addr = 0; + netif->gw.addr = 0; + + LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, + ("autoip_start(netif=%p) %c%c%"U16_F"\n", (void*)netif, netif->name[0], + netif->name[1], (u16_t)netif->num)); + if(autoip == NULL) { + /* no AutoIP client attached yet? */ + LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE, + ("autoip_start(): starting new AUTOIP client\n")); + autoip = mem_malloc(sizeof(struct autoip)); + if(autoip == NULL) { + LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE, + ("autoip_start(): could not allocate autoip\n")); + return ERR_MEM; + } + memset( autoip, 0, sizeof(struct autoip)); + /* store this AutoIP client in the netif */ + netif->autoip = autoip; + LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE, ("autoip_start(): allocated autoip")); + } else { + autoip->state = AUTOIP_STATE_OFF; + autoip->ttw = 0; + autoip->sent_num = 0; + memset(&autoip->llipaddr, 0, sizeof(struct ip_addr)); + autoip->lastconflict = 0; + } + + autoip_create_addr(netif, &(autoip->llipaddr)); + autoip->tried_llipaddr++; + autoip_start_probing(netif); + + return result; +} + +static void +autoip_start_probing(struct netif *netif) +{ + struct autoip *autoip = netif->autoip; + + autoip->state = AUTOIP_STATE_PROBING; + autoip->sent_num = 0; + + /* time to wait to first probe, this is randomly + * choosen out of 0 to PROBE_WAIT seconds. + * compliant to RFC 3927 Section 2.2.1 + */ + autoip->ttw = (u16_t)(LWIP_AUTOIP_RAND(netif) % (PROBE_WAIT * AUTOIP_TICKS_PER_SECOND)); + + /* + * if we tried more then MAX_CONFLICTS we must limit our rate for + * accquiring and probing address + * compliant to RFC 3927 Section 2.2.1 + */ + if(autoip->tried_llipaddr > MAX_CONFLICTS) { + autoip->ttw = RATE_LIMIT_INTERVAL * AUTOIP_TICKS_PER_SECOND; + } +} + +/** + * Handle a possible change in the network configuration. + * + * If there is an AutoIP address configured, take the interface down + * and begin probing with the same address. + */ +void +autoip_network_changed(struct netif *netif) +{ + if (netif->autoip && netif->autoip->state != AUTOIP_STATE_OFF) { + netif_set_down(netif); + autoip_start_probing(netif); + } +} + +/** + * Stop AutoIP client + * + * @param netif network interface on which stop the AutoIP client + */ +err_t +autoip_stop(struct netif *netif) +{ + netif->autoip->state = AUTOIP_STATE_OFF; + netif_set_down(netif); + return ERR_OK; +} + +/** + * Has to be called in loop every AUTOIP_TMR_INTERVAL milliseconds + */ +void +autoip_tmr() +{ + struct netif *netif = netif_list; + /* loop through netif's */ + while (netif != NULL) { + /* only act on AutoIP configured interfaces */ + if (netif->autoip != NULL) { + if(netif->autoip->lastconflict > 0) { + netif->autoip->lastconflict--; + } + + LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE, + ("autoip_tmr() AutoIP-State: %"U16_F", ttw=%"U16_F"\n", + (u16_t)(netif->autoip->state), netif->autoip->ttw)); + + switch(netif->autoip->state) { + case AUTOIP_STATE_PROBING: + if(netif->autoip->ttw > 0) { + netif->autoip->ttw--; + } else { + if(netif->autoip->sent_num >= PROBE_NUM) { + netif->autoip->state = AUTOIP_STATE_ANNOUNCING; + netif->autoip->sent_num = 0; + netif->autoip->ttw = ANNOUNCE_WAIT * AUTOIP_TICKS_PER_SECOND; + } else { + autoip_arp_probe(netif); + LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE, + ("autoip_tmr() PROBING Sent Probe\n")); + netif->autoip->sent_num++; + /* calculate time to wait to next probe */ + netif->autoip->ttw = (u16_t)((LWIP_AUTOIP_RAND(netif) % + ((PROBE_MAX - PROBE_MIN) * AUTOIP_TICKS_PER_SECOND) ) + + PROBE_MIN * AUTOIP_TICKS_PER_SECOND); + } + } + break; + + case AUTOIP_STATE_ANNOUNCING: + if(netif->autoip->ttw > 0) { + netif->autoip->ttw--; + } else { + if(netif->autoip->sent_num == 0) { + /* We are here the first time, so we waited ANNOUNCE_WAIT seconds + * Now we can bind to an IP address and use it. + * + * autoip_bind calls netif_set_up. This triggers a gratuitous ARP + * which counts as an announcement. + */ + autoip_bind(netif); + } else { + autoip_arp_announce(netif); + LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE, + ("autoip_tmr() ANNOUNCING Sent Announce\n")); + } + netif->autoip->ttw = ANNOUNCE_INTERVAL * AUTOIP_TICKS_PER_SECOND; + netif->autoip->sent_num++; + + if(netif->autoip->sent_num >= ANNOUNCE_NUM) { + netif->autoip->state = AUTOIP_STATE_BOUND; + netif->autoip->sent_num = 0; + netif->autoip->ttw = 0; + } + } + break; + } + } + /* proceed to next network interface */ + netif = netif->next; + } +} + +/** + * Handles every incoming ARP Packet, called by etharp_arp_input. + * + * @param netif network interface to use for autoip processing + * @param hdr Incoming ARP packet + */ +void +autoip_arp_reply(struct netif *netif, struct etharp_hdr *hdr) +{ + LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE, ("autoip_arp_reply()\n")); + if ((netif->autoip != NULL) && (netif->autoip->state != AUTOIP_STATE_OFF)) { + /* when ip.src == llipaddr && hw.src != netif->hwaddr + * + * when probing ip.dst == llipaddr && hw.src != netif->hwaddr + * we have a conflict and must solve it + */ + struct ip_addr sipaddr, dipaddr; + struct eth_addr netifaddr; + netifaddr.addr[0] = netif->hwaddr[0]; + netifaddr.addr[1] = netif->hwaddr[1]; + netifaddr.addr[2] = netif->hwaddr[2]; + netifaddr.addr[3] = netif->hwaddr[3]; + netifaddr.addr[4] = netif->hwaddr[4]; + netifaddr.addr[5] = netif->hwaddr[5]; + + /* Copy struct ip_addr2 to aligned ip_addr, to support compilers without + * structure packing (not using structure copy which breaks strict-aliasing rules). + */ + SMEMCPY(&sipaddr, &hdr->sipaddr, sizeof(sipaddr)); + SMEMCPY(&dipaddr, &hdr->dipaddr, sizeof(dipaddr)); + + if ((netif->autoip->state == AUTOIP_STATE_PROBING) || + ((netif->autoip->state == AUTOIP_STATE_ANNOUNCING) && + (netif->autoip->sent_num == 0))) { + /* RFC 3927 Section 2.2.1: + * from beginning to after ANNOUNCE_WAIT + * seconds we have a conflict if + * ip.src == llipaddr OR + * ip.dst == llipaddr && hw.src != own hwaddr + */ + if ((ip_addr_cmp(&sipaddr, &netif->autoip->llipaddr)) || + (ip_addr_cmp(&dipaddr, &netif->autoip->llipaddr) && + !eth_addr_cmp(&netifaddr, &hdr->shwaddr))) { + LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE | LWIP_DBG_LEVEL_WARNING, + ("autoip_arp_reply(): Probe Conflict detected\n")); + autoip_start(netif); + } + } else { + /* RFC 3927 Section 2.5: + * in any state we have a conflict if + * ip.src == llipaddr && hw.src != own hwaddr + */ + if (ip_addr_cmp(&sipaddr, &netif->autoip->llipaddr) && + !eth_addr_cmp(&netifaddr, &hdr->shwaddr)) { + LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE | LWIP_DBG_LEVEL_WARNING, + ("autoip_arp_reply(): Conflicting ARP-Packet detected\n")); + autoip_handle_arp_conflict(netif); + } + } + } +} + +#endif /* LWIP_AUTOIP */ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/icmp.c b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/icmp.c new file mode 100644 index 000000000..3ee17ae57 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/icmp.c @@ -0,0 +1,333 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * ICMP - Internet Control Message Protocol + * + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +/* Some ICMP messages should be passed to the transport protocols. This + is not implemented. */ + +#include "lwip/opt.h" + +#if LWIP_ICMP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/icmp.h" +#include "lwip/inet.h" +#include "lwip/inet_chksum.h" +#include "lwip/ip.h" +#include "lwip/def.h" +#include "lwip/stats.h" +#include "lwip/snmp.h" + +#include + +/** Small optimization: set to 0 if incoming PBUF_POOL pbuf always can be + * used to modify and send a response packet (and to 1 if this is not the case, + * e.g. when link header is stripped of when receiving) */ +#ifndef LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN +#define LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN 1 +#endif /* LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN */ + +/* The amount of data from the original packet to return in a dest-unreachable */ +#define ICMP_DEST_UNREACH_DATASIZE 8 + +static void icmp_send_response(struct pbuf *p, u8_t type, u8_t code); + +/** + * Processes ICMP input packets, called from ip_input(). + * + * Currently only processes icmp echo requests and sends + * out the echo response. + * + * @param p the icmp echo request packet, p->payload pointing to the ip header + * @param inp the netif on which this packet was received + */ +void +icmp_input(struct pbuf *p, struct netif *inp) +{ + u8_t type; +#ifdef LWIP_DEBUG + u8_t code; +#endif /* LWIP_DEBUG */ + struct icmp_echo_hdr *iecho; + struct ip_hdr *iphdr; + struct ip_addr tmpaddr; + s16_t hlen; + + ICMP_STATS_INC(icmp.recv); + snmp_inc_icmpinmsgs(); + + + iphdr = p->payload; + hlen = IPH_HL(iphdr) * 4; + if (pbuf_header(p, -hlen) || (p->tot_len < sizeof(u16_t)*2)) { + LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: short ICMP (%"U16_F" bytes) received\n", p->tot_len)); + goto lenerr; + } + + type = *((u8_t *)p->payload); +#ifdef LWIP_DEBUG + code = *(((u8_t *)p->payload)+1); +#endif /* LWIP_DEBUG */ + switch (type) { + case ICMP_ECHO: +#if !LWIP_MULTICAST_PING || !LWIP_BROADCAST_PING + { + int accepted = 1; +#if !LWIP_MULTICAST_PING + /* multicast destination address? */ + if (ip_addr_ismulticast(&iphdr->dest)) { + accepted = 0; + } +#endif /* LWIP_MULTICAST_PING */ +#if !LWIP_BROADCAST_PING + /* broadcast destination address? */ + if (ip_addr_isbroadcast(&iphdr->dest, inp)) { + accepted = 0; + } +#endif /* LWIP_BROADCAST_PING */ + /* broadcast or multicast destination address not acceptd? */ + if (!accepted) { + LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: Not echoing to multicast or broadcast pings\n")); + ICMP_STATS_INC(icmp.err); + pbuf_free(p); + return; + } + } +#endif /* !LWIP_MULTICAST_PING || !LWIP_BROADCAST_PING */ + LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: ping\n")); + if (p->tot_len < sizeof(struct icmp_echo_hdr)) { + LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: bad ICMP echo received\n")); + goto lenerr; + } + if (inet_chksum_pbuf(p) != 0) { + LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: checksum failed for received ICMP echo\n")); + pbuf_free(p); + ICMP_STATS_INC(icmp.chkerr); + snmp_inc_icmpinerrors(); + return; + } +#if LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN + if (pbuf_header(p, (PBUF_IP_HLEN + PBUF_LINK_HLEN))) { + /* p is not big enough to contain link headers + * allocate a new one and copy p into it + */ + struct pbuf *r; + /* switch p->payload to ip header */ + if (pbuf_header(p, hlen)) { + LWIP_ASSERT("icmp_input: moving p->payload to ip header failed\n", 0); + goto memerr; + } + /* allocate new packet buffer with space for link headers */ + r = pbuf_alloc(PBUF_LINK, p->tot_len, PBUF_RAM); + if (r == NULL) { + LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: allocating new pbuf failed\n")); + goto memerr; + } + LWIP_ASSERT("check that first pbuf can hold struct the ICMP header", + (r->len >= hlen + sizeof(struct icmp_echo_hdr))); + /* copy the whole packet including ip header */ + if (pbuf_copy(r, p) != ERR_OK) { + LWIP_ASSERT("icmp_input: copying to new pbuf failed\n", 0); + goto memerr; + } + iphdr = r->payload; + /* switch r->payload back to icmp header */ + if (pbuf_header(r, -hlen)) { + LWIP_ASSERT("icmp_input: restoring original p->payload failed\n", 0); + goto memerr; + } + /* free the original p */ + pbuf_free(p); + /* we now have an identical copy of p that has room for link headers */ + p = r; + } else { + /* restore p->payload to point to icmp header */ + if (pbuf_header(p, -(s16_t)(PBUF_IP_HLEN + PBUF_LINK_HLEN))) { + LWIP_ASSERT("icmp_input: restoring original p->payload failed\n", 0); + goto memerr; + } + } +#endif /* LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN */ + /* At this point, all checks are OK. */ + /* We generate an answer by switching the dest and src ip addresses, + * setting the icmp type to ECHO_RESPONSE and updating the checksum. */ + iecho = p->payload; + tmpaddr.addr = iphdr->src.addr; + iphdr->src.addr = iphdr->dest.addr; + iphdr->dest.addr = tmpaddr.addr; + ICMPH_TYPE_SET(iecho, ICMP_ER); + /* adjust the checksum */ + if (iecho->chksum >= htons(0xffff - (ICMP_ECHO << 8))) { + iecho->chksum += htons(ICMP_ECHO << 8) + 1; + } else { + iecho->chksum += htons(ICMP_ECHO << 8); + } + + /* Set the correct TTL and recalculate the header checksum. */ + IPH_TTL_SET(iphdr, ICMP_TTL); + IPH_CHKSUM_SET(iphdr, 0); +#if CHECKSUM_GEN_IP + IPH_CHKSUM_SET(iphdr, inet_chksum(iphdr, IP_HLEN)); +#endif /* CHECKSUM_GEN_IP */ + + ICMP_STATS_INC(icmp.xmit); + /* increase number of messages attempted to send */ + snmp_inc_icmpoutmsgs(); + /* increase number of echo replies attempted to send */ + snmp_inc_icmpoutechoreps(); + + if(pbuf_header(p, hlen)) { + LWIP_ASSERT("Can't move over header in packet", 0); + } else { + err_t ret; + ret = ip_output_if(p, &(iphdr->src), IP_HDRINCL, + ICMP_TTL, 0, IP_PROTO_ICMP, inp); + if (ret != ERR_OK) { + LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: ip_output_if returned an error: %c.\n", ret)); + } + } + break; + default: + LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: ICMP type %"S16_F" code %"S16_F" not supported.\n", + (s16_t)type, (s16_t)code)); + ICMP_STATS_INC(icmp.proterr); + ICMP_STATS_INC(icmp.drop); + } + pbuf_free(p); + return; +lenerr: + pbuf_free(p); + ICMP_STATS_INC(icmp.lenerr); + snmp_inc_icmpinerrors(); + return; +#if LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN +memerr: + pbuf_free(p); + ICMP_STATS_INC(icmp.err); + snmp_inc_icmpinerrors(); + return; +#endif /* LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN */ +} + +/** + * Send an icmp 'destination unreachable' packet, called from ip_input() if + * the transport layer protocol is unknown and from udp_input() if the local + * port is not bound. + * + * @param p the input packet for which the 'unreachable' should be sent, + * p->payload pointing to the IP header + * @param t type of the 'unreachable' packet + */ +void +icmp_dest_unreach(struct pbuf *p, enum icmp_dur_type t) +{ + icmp_send_response(p, ICMP_DUR, t); +} + +#if IP_FORWARD || IP_REASSEMBLY +/** + * Send a 'time exceeded' packet, called from ip_forward() if TTL is 0. + * + * @param p the input packet for which the 'time exceeded' should be sent, + * p->payload pointing to the IP header + * @param t type of the 'time exceeded' packet + */ +void +icmp_time_exceeded(struct pbuf *p, enum icmp_te_type t) +{ + icmp_send_response(p, ICMP_TE, t); +} + +#endif /* IP_FORWARD || IP_REASSEMBLY */ + +/** + * Send an icmp packet in response to an incoming packet. + * + * @param p the input packet for which the 'unreachable' should be sent, + * p->payload pointing to the IP header + * @param type Type of the ICMP header + * @param code Code of the ICMP header + */ +static void +icmp_send_response(struct pbuf *p, u8_t type, u8_t code) +{ + struct pbuf *q; + struct ip_hdr *iphdr; + /* we can use the echo header here */ + struct icmp_echo_hdr *icmphdr; + + /* ICMP header + IP header + 8 bytes of data */ + q = pbuf_alloc(PBUF_IP, sizeof(struct icmp_echo_hdr) + IP_HLEN + ICMP_DEST_UNREACH_DATASIZE, + PBUF_RAM); + if (q == NULL) { + LWIP_DEBUGF(ICMP_DEBUG, ("icmp_time_exceeded: failed to allocate pbuf for ICMP packet.\n")); + return; + } + LWIP_ASSERT("check that first pbuf can hold icmp message", + (q->len >= (sizeof(struct icmp_echo_hdr) + IP_HLEN + ICMP_DEST_UNREACH_DATASIZE))); + + iphdr = p->payload; + LWIP_DEBUGF(ICMP_DEBUG, ("icmp_time_exceeded from ")); + ip_addr_debug_print(ICMP_DEBUG, &(iphdr->src)); + LWIP_DEBUGF(ICMP_DEBUG, (" to ")); + ip_addr_debug_print(ICMP_DEBUG, &(iphdr->dest)); + LWIP_DEBUGF(ICMP_DEBUG, ("\n")); + + icmphdr = q->payload; + icmphdr->type = type; + icmphdr->code = code; + icmphdr->id = 0; + icmphdr->seqno = 0; + + /* copy fields from original packet */ + SMEMCPY((u8_t *)q->payload + sizeof(struct icmp_echo_hdr), (u8_t *)p->payload, + IP_HLEN + ICMP_DEST_UNREACH_DATASIZE); + + /* calculate checksum */ + icmphdr->chksum = 0; + icmphdr->chksum = inet_chksum(icmphdr, q->len); + ICMP_STATS_INC(icmp.xmit); + /* increase number of messages attempted to send */ + snmp_inc_icmpoutmsgs(); + /* increase number of destination unreachable messages attempted to send */ + snmp_inc_icmpouttimeexcds(); + ip_output(q, NULL, &(iphdr->src), ICMP_TTL, 0, IP_PROTO_ICMP); + pbuf_free(q); +} + +#endif /* LWIP_ICMP */ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/igmp.c b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/igmp.c new file mode 100644 index 000000000..b302ef482 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/igmp.c @@ -0,0 +1,759 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * IGMP - Internet Group Management Protocol + * + */ + +/* + * Copyright (c) 2002 CITEL Technologies Ltd. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of CITEL Technologies Ltd nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY CITEL TECHNOLOGIES AND CONTRIBUTORS ``AS IS'' + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL CITEL TECHNOLOGIES OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is a contribution to the lwIP TCP/IP stack. + * The Swedish Institute of Computer Science and Adam Dunkels + * are specifically granted permission to redistribute this + * source code. +*/ + +/*------------------------------------------------------------- +Note 1) +Although the rfc requires V1 AND V2 capability +we will only support v2 since now V1 is very old (August 1989) +V1 can be added if required + +a debug print and statistic have been implemented to +show this up. +------------------------------------------------------------- +------------------------------------------------------------- +Note 2) +A query for a specific group address (as opposed to ALLHOSTS) +has now been implemented as I am unsure if it is required + +a debug print and statistic have been implemented to +show this up. +------------------------------------------------------------- +------------------------------------------------------------- +Note 3) +The router alert rfc 2113 is implemented in outgoing packets +but not checked rigorously incoming +------------------------------------------------------------- +Steve Reynolds +------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- + * RFC 988 - Host extensions for IP multicasting - V0 + * RFC 1054 - Host extensions for IP multicasting - + * RFC 1112 - Host extensions for IP multicasting - V1 + * RFC 2236 - Internet Group Management Protocol, Version 2 - V2 <- this code is based on this RFC (it's the "de facto" standard) + * RFC 3376 - Internet Group Management Protocol, Version 3 - V3 + * RFC 4604 - Using Internet Group Management Protocol Version 3... - V3+ + * RFC 2113 - IP Router Alert Option - + *----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- + * Includes + *----------------------------------------------------------------------------*/ + +#include "lwip/opt.h" + +#if LWIP_IGMP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/igmp.h" +#include "lwip/debug.h" +#include "lwip/def.h" +#include "lwip/mem.h" +#include "lwip/ip.h" +#include "lwip/inet.h" +#include "lwip/inet_chksum.h" +#include "lwip/netif.h" +#include "lwip/icmp.h" +#include "lwip/udp.h" +#include "lwip/tcp.h" +#include "lwip/stats.h" + +#include "string.h" + +/*----------------------------------------------------------------------------- + * Globales + *----------------------------------------------------------------------------*/ + +static struct igmp_group* igmp_group_list; +static struct ip_addr allsystems; +static struct ip_addr allrouters; + +/** + * Initialize the IGMP module + */ +void +igmp_init(void) +{ + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_init: initializing\n")); + + IP4_ADDR(&allsystems, 224, 0, 0, 1); + IP4_ADDR(&allrouters, 224, 0, 0, 2); +} + +#ifdef LWIP_DEBUG +/** + * Dump global IGMP groups list + */ +void +igmp_dump_group_list() +{ + struct igmp_group *group = igmp_group_list; + + while (group != NULL) { + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_dump_group_list: [%"U32_F"] ", (u32_t)(group->group_state))); + ip_addr_debug_print(IGMP_DEBUG, &group->group_address); + LWIP_DEBUGF(IGMP_DEBUG, (" on if %p\n", group->interface)); + group = group->next; + } + LWIP_DEBUGF(IGMP_DEBUG, ("\n")); +} +#else +#define igmp_dump_group_list() +#endif /* LWIP_DEBUG */ + +/** + * Start IGMP processing on interface + * + * @param netif network interface on which start IGMP processing + */ +err_t +igmp_start(struct netif *netif) +{ + struct igmp_group* group; + + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_start: starting IGMP processing on if %p\n", netif)); + + group = igmp_lookup_group(netif, &allsystems); + + if (group != NULL) { + group->group_state = IGMP_GROUP_IDLE_MEMBER; + group->use++; + + /* Allow the igmp messages at the MAC level */ + if (netif->igmp_mac_filter != NULL) { + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_start: igmp_mac_filter(ADD ")); + ip_addr_debug_print(IGMP_DEBUG, &allsystems); + LWIP_DEBUGF(IGMP_DEBUG, (") on if %p\n", netif)); + netif->igmp_mac_filter( netif, &allsystems, IGMP_ADD_MAC_FILTER); + } + + return ERR_OK; + } + + return ERR_MEM; +} + +/** + * Stop IGMP processing on interface + * + * @param netif network interface on which stop IGMP processing + */ +err_t +igmp_stop(struct netif *netif) +{ + struct igmp_group *group = igmp_group_list; + struct igmp_group *prev = NULL; + struct igmp_group *next; + + /* look for groups joined on this interface further down the list */ + while (group != NULL) { + next = group->next; + /* is it a group joined on this interface? */ + if (group->interface == netif) { + /* is it the first group of the list? */ + if (group == igmp_group_list) { + igmp_group_list = next; + } + /* is there a "previous" group defined? */ + if (prev != NULL) { + prev->next = next; + } + /* disable the group at the MAC level */ + if (netif->igmp_mac_filter != NULL) { + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_stop: igmp_mac_filter(DEL ")); + ip_addr_debug_print(IGMP_DEBUG, &group->group_address); + LWIP_DEBUGF(IGMP_DEBUG, (") on if %p\n", netif)); + netif->igmp_mac_filter(netif, &(group->group_address), IGMP_DEL_MAC_FILTER); + } + /* free group */ + memp_free(MEMP_IGMP_GROUP, group); + } else { + /* change the "previous" */ + prev = group; + } + /* move to "next" */ + group = next; + } + return ERR_OK; +} + +/** + * Report IGMP memberships for this interface + * + * @param netif network interface on which report IGMP memberships + */ +void +igmp_report_groups( struct netif *netif) +{ + struct igmp_group *group = igmp_group_list; + + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_report_groups: sending IGMP reports on if %p\n", netif)); + + while (group != NULL) { + if (group->interface == netif) { + igmp_delaying_member( group, IGMP_JOIN_DELAYING_MEMBER_TMR); + } + group = group->next; + } +} + +/** + * Search for a group in the global igmp_group_list + * + * @param ifp the network interface for which to look + * @param addr the group ip address to search for + * @return a struct igmp_group* if the group has been found, + * NULL if the group wasn't found. + */ +struct igmp_group * +igmp_lookfor_group(struct netif *ifp, struct ip_addr *addr) +{ + struct igmp_group *group = igmp_group_list; + + while (group != NULL) { + if ((group->interface == ifp) && (ip_addr_cmp(&(group->group_address), addr))) { + return group; + } + group = group->next; + } + + /* to be clearer, we return NULL here instead of + * 'group' (which is also NULL at this point). + */ + return NULL; +} + +/** + * Search for a specific igmp group and create a new one if not found- + * + * @param ifp the network interface for which to look + * @param addr the group ip address to search + * @return a struct igmp_group*, + * NULL on memory error. + */ +struct igmp_group * +igmp_lookup_group(struct netif *ifp, struct ip_addr *addr) +{ + struct igmp_group *group = igmp_group_list; + + /* Search if the group already exists */ + group = igmp_lookfor_group(ifp, addr); + if (group != NULL) { + /* Group already exists. */ + return group; + } + + /* Group doesn't exist yet, create a new one */ + group = memp_malloc(MEMP_IGMP_GROUP); + if (group != NULL) { + group->interface = ifp; + ip_addr_set(&(group->group_address), addr); + group->timer = 0; /* Not running */ + group->group_state = IGMP_GROUP_NON_MEMBER; + group->last_reporter_flag = 0; + group->use = 0; + group->next = igmp_group_list; + + igmp_group_list = group; + } + + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_lookup_group: %sallocated a new group with address ", (group?"":"impossible to "))); + ip_addr_debug_print(IGMP_DEBUG, addr); + LWIP_DEBUGF(IGMP_DEBUG, (" on if %p\n", ifp)); + + return group; +} + +/** + * Remove a group in the global igmp_group_list + * + * @param group the group to remove from the global igmp_group_list + * @return ERR_OK if group was removed from the list, an err_t otherwise + */ +err_t +igmp_remove_group(struct igmp_group *group) +{ + err_t err = ERR_OK; + + /* Is it the first group? */ + if (igmp_group_list == group) { + igmp_group_list = group->next; + } else { + /* look for group further down the list */ + struct igmp_group *tmpGroup; + for (tmpGroup = igmp_group_list; tmpGroup != NULL; tmpGroup = tmpGroup->next) { + if (tmpGroup->next == group) { + tmpGroup->next = group->next; + break; + } + } + /* Group not found in the global igmp_group_list */ + if (tmpGroup == NULL) + err = ERR_ARG; + } + /* free group */ + memp_free(MEMP_IGMP_GROUP, group); + + return err; +} + +/** + * Called from ip_input() if a new IGMP packet is received. + * + * @param p received igmp packet, p->payload pointing to the ip header + * @param inp network interface on which the packet was received + * @param dest destination ip address of the igmp packet + */ +void +igmp_input(struct pbuf *p, struct netif *inp, struct ip_addr *dest) +{ + struct ip_hdr * iphdr; + struct igmp_msg* igmp; + struct igmp_group* group; + struct igmp_group* groupref; + + /* Note that the length CAN be greater than 8 but only 8 are used - All are included in the checksum */ + iphdr = p->payload; + if (pbuf_header(p, -(s16_t)(IPH_HL(iphdr) * 4)) || (p->len < IGMP_MINLEN)) { + pbuf_free(p); + IGMP_STATS_INC(igmp.lenerr); + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_input: length error\n")); + return; + } + + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_input: message from ")); + ip_addr_debug_print(IGMP_DEBUG, &(iphdr->src)); + LWIP_DEBUGF(IGMP_DEBUG, (" to address ")); + ip_addr_debug_print(IGMP_DEBUG, &(iphdr->dest)); + LWIP_DEBUGF(IGMP_DEBUG, (" on if %p\n", inp)); + + /* Now calculate and check the checksum */ + igmp = (struct igmp_msg *)p->payload; + if (inet_chksum(igmp, p->len)) { + pbuf_free(p); + IGMP_STATS_INC(igmp.chkerr); + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_input: checksum error\n")); + return; + } + + /* Packet is ok so find an existing group */ + group = igmp_lookfor_group(inp, dest); /* use the incoming IP address! */ + + /* If group can be found or create... */ + if (!group) { + pbuf_free(p); + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_input: IGMP frame not for us\n")); + return; + } + + /* NOW ACT ON THE INCOMING MESSAGE TYPE... */ + switch (igmp->igmp_msgtype) { + case IGMP_MEMB_QUERY: { + /* IGMP_MEMB_QUERY to the "all systems" address ? */ + if ((ip_addr_cmp(dest, &allsystems)) && (igmp->igmp_group_address.addr == 0)) { + /* THIS IS THE GENERAL QUERY */ + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_input: General IGMP_MEMB_QUERY on \"ALL SYSTEMS\" address (224.0.0.1) [igmp_maxresp=%i]\n", (int)(igmp->igmp_maxresp))); + + if (igmp->igmp_maxresp == 0) { + IGMP_STATS_INC(igmp.v1_rxed); + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_input: got an all hosts query with time== 0 - this is V1 and not implemented - treat as v2\n")); + igmp->igmp_maxresp = IGMP_V1_DELAYING_MEMBER_TMR; + } + + IGMP_STATS_INC(igmp.group_query_rxed); + groupref = igmp_group_list; + while (groupref) { + /* Do not send messages on the all systems group address! */ + if ((groupref->interface == inp) && (!(ip_addr_cmp(&(groupref->group_address), &allsystems)))) { + igmp_delaying_member( groupref, igmp->igmp_maxresp); + } + groupref = groupref->next; + } + } else { + /* IGMP_MEMB_QUERY to a specific group ? */ + if (group->group_address.addr != 0) { + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_input: IGMP_MEMB_QUERY to a specific group ")); + ip_addr_debug_print(IGMP_DEBUG, &group->group_address); + if (ip_addr_cmp (dest, &allsystems)) { + LWIP_DEBUGF(IGMP_DEBUG, (" using \"ALL SYSTEMS\" address (224.0.0.1) [igmp_maxresp=%i]\n", (int)(igmp->igmp_maxresp))); + /* we first need to re-lookfor the group since we used dest last time */ + group = igmp_lookfor_group(inp, &igmp->igmp_group_address); + } else { + LWIP_DEBUGF(IGMP_DEBUG, (" with the group address as destination [igmp_maxresp=%i]\n", (int)(igmp->igmp_maxresp))); + } + + if (group != NULL) { + IGMP_STATS_INC(igmp.unicast_query); + igmp_delaying_member( group, igmp->igmp_maxresp); + } + } + } + break; + } + case IGMP_V2_MEMB_REPORT: { + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_input: IGMP_V2_MEMB_REPORT\n")); + + IGMP_STATS_INC(igmp.report_rxed); + if (group->group_state == IGMP_GROUP_DELAYING_MEMBER) { + /* This is on a specific group we have already looked up */ + group->timer = 0; /* stopped */ + group->group_state = IGMP_GROUP_IDLE_MEMBER; + group->last_reporter_flag = 0; + } + break; + } + default: { + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_input: unexpected msg %d in state %d on group %p on if %p\n", + igmp->igmp_msgtype, group->group_state, &group, group->interface)); + break; + } + } + + pbuf_free(p); + return; +} + +/** + * Join a group on one network interface. + * + * @param ifaddr ip address of the network interface which should join a new group + * @param groupaddr the ip address of the group which to join + * @return ERR_OK if group was joined on the netif(s), an err_t otherwise + */ +err_t +igmp_joingroup(struct ip_addr *ifaddr, struct ip_addr *groupaddr) +{ + err_t err = ERR_VAL; /* no matching interface */ + struct igmp_group *group; + struct netif *netif; + + /* make sure it is multicast address */ + LWIP_ERROR("igmp_joingroup: attempt to join non-multicast address", ip_addr_ismulticast(groupaddr), return ERR_VAL;); + LWIP_ERROR("igmp_joingroup: attempt to join allsystems address", (!ip_addr_cmp(groupaddr, &allsystems)), return ERR_VAL;); + + /* loop through netif's */ + netif = netif_list; + while (netif != NULL) { + /* Should we join this interface ? */ + if ((netif->flags & NETIF_FLAG_IGMP) && ((ip_addr_isany(ifaddr) || ip_addr_cmp(&(netif->ip_addr), ifaddr)))) { + /* find group or create a new one if not found */ + group = igmp_lookup_group(netif, groupaddr); + + if (group != NULL) { + /* This should create a new group, check the state to make sure */ + if (group->group_state != IGMP_GROUP_NON_MEMBER) { + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_joingroup: join to group not in state IGMP_GROUP_NON_MEMBER\n")); + } else { + /* OK - it was new group */ + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_joingroup: join to new group: ")); + ip_addr_debug_print(IGMP_DEBUG, groupaddr); + LWIP_DEBUGF(IGMP_DEBUG, ("\n")); + + /* If first use of the group, allow the group at the MAC level */ + if ((group->use==0) && (netif->igmp_mac_filter != NULL)) { + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_joingroup: igmp_mac_filter(ADD ")); + ip_addr_debug_print(IGMP_DEBUG, groupaddr); + LWIP_DEBUGF(IGMP_DEBUG, (") on if %p\n", netif)); + netif->igmp_mac_filter(netif, groupaddr, IGMP_ADD_MAC_FILTER); + } + + IGMP_STATS_INC(igmp.join_sent); + igmp_send(group, IGMP_V2_MEMB_REPORT); + + igmp_start_timer(group, IGMP_JOIN_DELAYING_MEMBER_TMR); + + /* Need to work out where this timer comes from */ + group->group_state = IGMP_GROUP_DELAYING_MEMBER; + } + /* Increment group use */ + group->use++; + /* Join on this interface */ + err = ERR_OK; + } else { + /* Return an error even if some network interfaces are joined */ + /** @todo undo any other netif already joined */ + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_joingroup: Not enought memory to join to group\n")); + return ERR_MEM; + } + } + /* proceed to next network interface */ + netif = netif->next; + } + + return err; +} + +/** + * Leave a group on one network interface. + * + * @param ifaddr ip address of the network interface which should leave a group + * @param groupaddr the ip address of the group which to leave + * @return ERR_OK if group was left on the netif(s), an err_t otherwise + */ +err_t +igmp_leavegroup(struct ip_addr *ifaddr, struct ip_addr *groupaddr) +{ + err_t err = ERR_VAL; /* no matching interface */ + struct igmp_group *group; + struct netif *netif; + + /* make sure it is multicast address */ + LWIP_ERROR("igmp_leavegroup: attempt to leave non-multicast address", ip_addr_ismulticast(groupaddr), return ERR_VAL;); + LWIP_ERROR("igmp_leavegroup: attempt to leave allsystems address", (!ip_addr_cmp(groupaddr, &allsystems)), return ERR_VAL;); + + /* loop through netif's */ + netif = netif_list; + while (netif != NULL) { + /* Should we leave this interface ? */ + if ((netif->flags & NETIF_FLAG_IGMP) && ((ip_addr_isany(ifaddr) || ip_addr_cmp(&(netif->ip_addr), ifaddr)))) { + /* find group */ + group = igmp_lookfor_group(netif, groupaddr); + + if (group != NULL) { + /* Only send a leave if the flag is set according to the state diagram */ + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_leavegroup: Leaving group: ")); + ip_addr_debug_print(IGMP_DEBUG, groupaddr); + LWIP_DEBUGF(IGMP_DEBUG, ("\n")); + + /* If there is no other use of the group */ + if (group->use <= 1) { + /* If we are the last reporter for this group */ + if (group->last_reporter_flag) { + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_leavegroup: sending leaving group\n")); + IGMP_STATS_INC(igmp.leave_sent); + igmp_send(group, IGMP_LEAVE_GROUP); + } + + /* Disable the group at the MAC level */ + if (netif->igmp_mac_filter != NULL) { + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_leavegroup: igmp_mac_filter(DEL ")); + ip_addr_debug_print(IGMP_DEBUG, groupaddr); + LWIP_DEBUGF(IGMP_DEBUG, (") on if %p\n", netif)); + netif->igmp_mac_filter(netif, groupaddr, IGMP_DEL_MAC_FILTER); + } + + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_leavegroup: remove group: ")); + ip_addr_debug_print(IGMP_DEBUG, groupaddr); + LWIP_DEBUGF(IGMP_DEBUG, ("\n")); + + /* Free the group */ + igmp_remove_group(group); + } else { + /* Decrement group use */ + group->use--; + } + /* Leave on this interface */ + err = ERR_OK; + } else { + /* It's not a fatal error on "leavegroup" */ + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_leavegroup: not member of group\n")); + } + } + /* proceed to next network interface */ + netif = netif->next; + } + + return err; +} + +/** + * The igmp timer function (both for NO_SYS=1 and =0) + * Should be called every IGMP_TMR_INTERVAL milliseconds (100 ms is default). + */ +void +igmp_tmr(void) +{ + struct igmp_group *group = igmp_group_list; + + while (group != NULL) { + if (group->timer != 0) { + group->timer -= 1; + if (group->timer == 0) { + igmp_timeout(group); + } + } + group = group->next; + } +} + +/** + * Called if a timeout for one group is reached. + * Sends a report for this group. + * + * @param group an igmp_group for which a timeout is reached + */ +void +igmp_timeout(struct igmp_group *group) +{ + /* If the state is IGMP_GROUP_DELAYING_MEMBER then we send a report for this group */ + if (group->group_state == IGMP_GROUP_DELAYING_MEMBER) { + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_timeout: report membership for group with address ")); + ip_addr_debug_print(IGMP_DEBUG, &(group->group_address)); + LWIP_DEBUGF(IGMP_DEBUG, (" on if %p\n", group->interface)); + + igmp_send(group, IGMP_V2_MEMB_REPORT); + } +} + +/** + * Start a timer for an igmp group + * + * @param group the igmp_group for which to start a timer + * @param max_time the time in multiples of IGMP_TMR_INTERVAL (decrease with + * every call to igmp_tmr()) + */ +void +igmp_start_timer(struct igmp_group *group, u8_t max_time) +{ + /** + * @todo Important !! this should be random 0 -> max_time. Find out how to do this + */ + group->timer = max_time; +} + +/** + * Stop a timer for an igmp_group + * + * @param group the igmp_group for which to stop the timer + */ +void +igmp_stop_timer(struct igmp_group *group) +{ + group->timer = 0; +} + +/** + * Delaying membership report for a group if necessary + * + * @param group the igmp_group for which "delaying" membership report + * @param maxresp query delay + */ +void +igmp_delaying_member( struct igmp_group *group, u8_t maxresp) +{ + if ((group->group_state == IGMP_GROUP_IDLE_MEMBER) || + ((group->group_state == IGMP_GROUP_DELAYING_MEMBER) && (maxresp > group->timer))) { + igmp_start_timer(group, (maxresp)/2); + group->group_state = IGMP_GROUP_DELAYING_MEMBER; + } +} + + +/** + * Sends an IP packet on a network interface. This function constructs the IP header + * and calculates the IP header checksum. If the source IP address is NULL, + * the IP address of the outgoing network interface is filled in as source address. + * + * @param p the packet to send (p->payload points to the data, e.g. next + protocol header; if dest == IP_HDRINCL, p already includes an IP + header and p->payload points to that IP header) + * @param src the source IP address to send from (if src == IP_ADDR_ANY, the + * IP address of the netif used to send is used as source address) + * @param dest the destination IP address to send the packet to + * @param ttl the TTL value to be set in the IP header + * @param proto the PROTOCOL to be set in the IP header + * @param netif the netif on which to send this packet + * @return ERR_OK if the packet was sent OK + * ERR_BUF if p doesn't have enough space for IP/LINK headers + * returns errors returned by netif->output + */ +err_t +igmp_ip_output_if(struct pbuf *p, struct ip_addr *src, struct ip_addr *dest, + u8_t ttl, u8_t proto, struct netif *netif) +{ + /* This is the "router alert" option */ + u16_t ra[2]; + ra[0] = htons (ROUTER_ALERT); + ra[1] = 0x0000; /* Router shall examine packet */ + return ip_output_if_opt(p, src, dest, ttl, 0, proto, netif, ra, ROUTER_ALERTLEN); +} + +/** + * Send an igmp packet to a specific group. + * + * @param group the group to which to send the packet + * @param type the type of igmp packet to send + */ +void +igmp_send(struct igmp_group *group, u8_t type) +{ + struct pbuf* p = NULL; + struct igmp_msg* igmp = NULL; + struct ip_addr src = {0}; + struct ip_addr* dest = NULL; + + /* IP header + "router alert" option + IGMP header */ + p = pbuf_alloc(PBUF_TRANSPORT, IGMP_MINLEN, PBUF_RAM); + + if (p) { + igmp = p->payload; + LWIP_ASSERT("igmp_send: check that first pbuf can hold struct igmp_msg", + (p->len >= sizeof(struct igmp_msg))); + ip_addr_set(&src, &((group->interface)->ip_addr)); + + if (type == IGMP_V2_MEMB_REPORT) { + dest = &(group->group_address); + IGMP_STATS_INC(igmp.report_sent); + ip_addr_set(&(igmp->igmp_group_address), &(group->group_address)); + group->last_reporter_flag = 1; /* Remember we were the last to report */ + } else { + if (type == IGMP_LEAVE_GROUP) { + dest = &allrouters; + ip_addr_set(&(igmp->igmp_group_address), &(group->group_address)); + } + } + + if ((type == IGMP_V2_MEMB_REPORT) || (type == IGMP_LEAVE_GROUP)) { + igmp->igmp_msgtype = type; + igmp->igmp_maxresp = 0; + igmp->igmp_checksum = 0; + igmp->igmp_checksum = inet_chksum( igmp, IGMP_MINLEN); + + igmp_ip_output_if(p, &src, dest, IGMP_TTL, IP_PROTO_IGMP, group->interface); + } + + pbuf_free(p); + } else { + LWIP_DEBUGF(IGMP_DEBUG, ("igmp_send: not enough memory for igmp_send\n")); + } +} + +#endif /* LWIP_IGMP */ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/inet.c b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/inet.c new file mode 100644 index 000000000..0d4f922fe --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/inet.c @@ -0,0 +1,280 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * Functions common to all TCP/IPv4 modules, such as the byte order functions. + * + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#include "lwip/opt.h" + +#include "lwip/inet.h" + +/* Here for now until needed in other places in lwIP */ +#ifndef isprint +#define in_range(c, lo, up) ((u8_t)c >= lo && (u8_t)c <= up) +#define isprint(c) in_range(c, 0x20, 0x7f) +#define isdigit(c) in_range(c, '0', '9') +#define isxdigit(c) (isdigit(c) || in_range(c, 'a', 'f') || in_range(c, 'A', 'F')) +#define islower(c) in_range(c, 'a', 'z') +#define isspace(c) (c == ' ' || c == '\f' || c == '\n' || c == '\r' || c == '\t' || c == '\v') +#endif + +/** + * Ascii internet address interpretation routine. + * The value returned is in network order. + * + * @param cp IP address in ascii represenation (e.g. "127.0.0.1") + * @return ip address in network order + */ +u32_t +inet_addr(const char *cp) +{ + struct in_addr val; + + if (inet_aton(cp, &val)) { + return (val.s_addr); + } + return (INADDR_NONE); +} + +/** + * Check whether "cp" is a valid ascii representation + * of an Internet address and convert to a binary address. + * Returns 1 if the address is valid, 0 if not. + * This replaces inet_addr, the return value from which + * cannot distinguish between failure and a local broadcast address. + * + * @param cp IP address in ascii represenation (e.g. "127.0.0.1") + * @param addr pointer to which to save the ip address in network order + * @return 1 if cp could be converted to addr, 0 on failure + */ +int +inet_aton(const char *cp, struct in_addr *addr) +{ + u32_t val; + u8_t base; + char c; + u32_t parts[4]; + u32_t *pp = parts; + + c = *cp; + for (;;) { + /* + * Collect number up to ``.''. + * Values are specified as for C: + * 0x=hex, 0=octal, 1-9=decimal. + */ + if (!isdigit(c)) + return (0); + val = 0; + base = 10; + if (c == '0') { + c = *++cp; + if (c == 'x' || c == 'X') { + base = 16; + c = *++cp; + } else + base = 8; + } + for (;;) { + if (isdigit(c)) { + val = (val * base) + (int)(c - '0'); + c = *++cp; + } else if (base == 16 && isxdigit(c)) { + val = (val << 4) | (int)(c + 10 - (islower(c) ? 'a' : 'A')); + c = *++cp; + } else + break; + } + if (c == '.') { + /* + * Internet format: + * a.b.c.d + * a.b.c (with c treated as 16 bits) + * a.b (with b treated as 24 bits) + */ + if (pp >= parts + 3) + return (0); + *pp++ = val; + c = *++cp; + } else + break; + } + /* + * Check for trailing characters. + */ + if (c != '\0' && !isspace(c)) + return (0); + /* + * Concoct the address according to + * the number of parts specified. + */ + switch (pp - parts + 1) { + + case 0: + return (0); /* initial nondigit */ + + case 1: /* a -- 32 bits */ + break; + + case 2: /* a.b -- 8.24 bits */ + if (val > 0xffffffUL) + return (0); + val |= parts[0] << 24; + break; + + case 3: /* a.b.c -- 8.8.16 bits */ + if (val > 0xffff) + return (0); + val |= (parts[0] << 24) | (parts[1] << 16); + break; + + case 4: /* a.b.c.d -- 8.8.8.8 bits */ + if (val > 0xff) + return (0); + val |= (parts[0] << 24) | (parts[1] << 16) | (parts[2] << 8); + break; + } + if (addr) + addr->s_addr = htonl(val); + return (1); +} + +/** + * Convert numeric IP address into decimal dotted ASCII representation. + * returns ptr to static buffer; not reentrant! + * + * @param addr ip address in network order to convert + * @return pointer to a global static (!) buffer that holds the ASCII + * represenation of addr + */ +char * +inet_ntoa(struct in_addr addr) +{ + static char str[16]; + u32_t s_addr = addr.s_addr; + char inv[3]; + char *rp; + u8_t *ap; + u8_t rem; + u8_t n; + u8_t i; + + rp = str; + ap = (u8_t *)&s_addr; + for(n = 0; n < 4; n++) { + i = 0; + do { + rem = *ap % (u8_t)10; + *ap /= (u8_t)10; + inv[i++] = '0' + rem; + } while(*ap); + while(i--) + *rp++ = inv[i]; + *rp++ = '.'; + ap++; + } + *--rp = 0; + return str; +} + +/** + * These are reference implementations of the byte swapping functions. + * Again with the aim of being simple, correct and fully portable. + * Byte swapping is the second thing you would want to optimize. You will + * need to port it to your architecture and in your cc.h: + * + * #define LWIP_PLATFORM_BYTESWAP 1 + * #define LWIP_PLATFORM_HTONS(x) + * #define LWIP_PLATFORM_HTONL(x) + * + * Note ntohs() and ntohl() are merely references to the htonx counterparts. + */ + +#if (LWIP_PLATFORM_BYTESWAP == 0) && (BYTE_ORDER == LITTLE_ENDIAN) + +/** + * Convert an u16_t from host- to network byte order. + * + * @param n u16_t in host byte order + * @return n in network byte order + */ +u16_t +htons(u16_t n) +{ + return ((n & 0xff) << 8) | ((n & 0xff00) >> 8); +} + +/** + * Convert an u16_t from network- to host byte order. + * + * @param n u16_t in network byte order + * @return n in host byte order + */ +u16_t +ntohs(u16_t n) +{ + return htons(n); +} + +/** + * Convert an u32_t from host- to network byte order. + * + * @param n u32_t in host byte order + * @return n in network byte order + */ +u32_t +htonl(u32_t n) +{ + return ((n & 0xff) << 24) | + ((n & 0xff00) << 8) | + ((n & 0xff0000UL) >> 8) | + ((n & 0xff000000UL) >> 24); +} + +/** + * Convert an u32_t from network- to host byte order. + * + * @param n u32_t in network byte order + * @return n in host byte order + */ +u32_t +ntohl(u32_t n) +{ + return htonl(n); +} + +#endif /* (LWIP_PLATFORM_BYTESWAP == 0) && (BYTE_ORDER == LITTLE_ENDIAN) */ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/inet_chksum.c b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/inet_chksum.c new file mode 100644 index 000000000..47a11d4eb --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/inet_chksum.c @@ -0,0 +1,440 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * Incluse internet checksum functions. + * + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#include "lwip/opt.h" + +#include "lwip/inet_chksum.h" +#include "lwip/inet.h" + +#include + +/* These are some reference implementations of the checksum algorithm, with the + * aim of being simple, correct and fully portable. Checksumming is the + * first thing you would want to optimize for your platform. If you create + * your own version, link it in and in your cc.h put: + * + * #define LWIP_CHKSUM + * + * Or you can select from the implementations below by defining + * LWIP_CHKSUM_ALGORITHM to 1, 2 or 3. + */ + +#ifndef LWIP_CHKSUM +# define LWIP_CHKSUM lwip_standard_chksum +# ifndef LWIP_CHKSUM_ALGORITHM +# define LWIP_CHKSUM_ALGORITHM 1 +# endif +#endif +/* If none set: */ +#ifndef LWIP_CHKSUM_ALGORITHM +# define LWIP_CHKSUM_ALGORITHM 0 +#endif + +/** Like the name says... */ +#if LWIP_PLATFORM_BYTESWAP && (BYTE_ORDER == LITTLE_ENDIAN) +/* little endian and PLATFORM_BYTESWAP defined */ +#define SWAP_BYTES_IN_WORD(w) LWIP_PLATFORM_HTONS(w) +#else +/* can't use htons on big endian (or PLATFORM_BYTESWAP not defined)... */ +#define SWAP_BYTES_IN_WORD(w) ((w & 0xff) << 8) | ((w & 0xff00) >> 8) +#endif + +/** Split an u32_t in two u16_ts and add them up */ +#define FOLD_U32T(u) ((u >> 16) + (u & 0x0000ffffUL)) + +#if (LWIP_CHKSUM_ALGORITHM == 1) /* Version #1 */ +/** + * lwip checksum + * + * @param dataptr points to start of data to be summed at any boundary + * @param len length of data to be summed + * @return host order (!) lwip checksum (non-inverted Internet sum) + * + * @note accumulator size limits summable length to 64k + * @note host endianess is irrelevant (p3 RFC1071) + */ +static u16_t +lwip_standard_chksum(void *dataptr, u16_t len) +{ + u32_t acc; + u16_t src; + u8_t *octetptr; + + acc = 0; + /* dataptr may be at odd or even addresses */ + octetptr = (u8_t*)dataptr; + while (len > 1) { + /* declare first octet as most significant + thus assume network order, ignoring host order */ + src = (*octetptr) << 8; + octetptr++; + /* declare second octet as least significant */ + src |= (*octetptr); + octetptr++; + acc += src; + len -= 2; + } + if (len > 0) { + /* accumulate remaining octet */ + src = (*octetptr) << 8; + acc += src; + } + /* add deferred carry bits */ + acc = (acc >> 16) + (acc & 0x0000ffffUL); + if ((acc & 0xffff0000UL) != 0) { + acc = (acc >> 16) + (acc & 0x0000ffffUL); + } + /* This maybe a little confusing: reorder sum using htons() + instead of ntohs() since it has a little less call overhead. + The caller must invert bits for Internet sum ! */ + return htons((u16_t)acc); +} +#endif + +#if (LWIP_CHKSUM_ALGORITHM == 2) /* Alternative version #2 */ +/* + * Curt McDowell + * Broadcom Corp. + * csm@broadcom.com + * + * IP checksum two bytes at a time with support for + * unaligned buffer. + * Works for len up to and including 0x20000. + * by Curt McDowell, Broadcom Corp. 12/08/2005 + * + * @param dataptr points to start of data to be summed at any boundary + * @param len length of data to be summed + * @return host order (!) lwip checksum (non-inverted Internet sum) + */ + +static u16_t +lwip_standard_chksum(void *dataptr, int len) +{ + u8_t *pb = dataptr; + u16_t *ps, t = 0; + u32_t sum = 0; + int odd = ((u32_t)pb & 1); + + /* Get aligned to u16_t */ + if (odd && len > 0) { + ((u8_t *)&t)[1] = *pb++; + len--; + } + + /* Add the bulk of the data */ + ps = (u16_t *)pb; + while (len > 1) { + sum += *ps++; + len -= 2; + } + + /* Consume left-over byte, if any */ + if (len > 0) { + ((u8_t *)&t)[0] = *(u8_t *)ps;; + } + + /* Add end bytes */ + sum += t; + + /* Fold 32-bit sum to 16 bits + calling this twice is propably faster than if statements... */ + sum = FOLD_U32T(sum); + sum = FOLD_U32T(sum); + + /* Swap if alignment was odd */ + if (odd) { + sum = SWAP_BYTES_IN_WORD(sum); + } + + return sum; +} +#endif + +#if (LWIP_CHKSUM_ALGORITHM == 3) /* Alternative version #3 */ +/** + * An optimized checksum routine. Basically, it uses loop-unrolling on + * the checksum loop, treating the head and tail bytes specially, whereas + * the inner loop acts on 8 bytes at a time. + * + * @arg start of buffer to be checksummed. May be an odd byte address. + * @len number of bytes in the buffer to be checksummed. + * @return host order (!) lwip checksum (non-inverted Internet sum) + * + * by Curt McDowell, Broadcom Corp. December 8th, 2005 + */ + +static u16_t +lwip_standard_chksum(void *dataptr, int len) +{ + u8_t *pb = dataptr; + u16_t *ps, t = 0; + u32_t *pl; + u32_t sum = 0, tmp; + /* starts at odd byte address? */ + int odd = ((u32_t)pb & 1); + + if (odd && len > 0) { + ((u8_t *)&t)[1] = *pb++; + len--; + } + + ps = (u16_t *)pb; + + if (((u32_t)ps & 3) && len > 1) { + sum += *ps++; + len -= 2; + } + + pl = (u32_t *)ps; + + while (len > 7) { + tmp = sum + *pl++; /* ping */ + if (tmp < sum) { + tmp++; /* add back carry */ + } + + sum = tmp + *pl++; /* pong */ + if (sum < tmp) { + sum++; /* add back carry */ + } + + len -= 8; + } + + /* make room in upper bits */ + sum = FOLD_U32T(sum); + + ps = (u16_t *)pl; + + /* 16-bit aligned word remaining? */ + while (len > 1) { + sum += *ps++; + len -= 2; + } + + /* dangling tail byte remaining? */ + if (len > 0) { /* include odd byte */ + ((u8_t *)&t)[0] = *(u8_t *)ps; + } + + sum += t; /* add end bytes */ + + /* Fold 32-bit sum to 16 bits + calling this twice is propably faster than if statements... */ + sum = FOLD_U32T(sum); + sum = FOLD_U32T(sum); + + if (odd) { + sum = SWAP_BYTES_IN_WORD(sum); + } + + return sum; +} +#endif + +/* inet_chksum_pseudo: + * + * Calculates the pseudo Internet checksum used by TCP and UDP for a pbuf chain. + * IP addresses are expected to be in network byte order. + * + * @param p chain of pbufs over that a checksum should be calculated (ip data part) + * @param src source ip address (used for checksum of pseudo header) + * @param dst destination ip address (used for checksum of pseudo header) + * @param proto ip protocol (used for checksum of pseudo header) + * @param proto_len length of the ip data part (used for checksum of pseudo header) + * @return checksum (as u16_t) to be saved directly in the protocol header + */ +u16_t +inet_chksum_pseudo(struct pbuf *p, + struct ip_addr *src, struct ip_addr *dest, + u8_t proto, u16_t proto_len) +{ + u32_t acc; + struct pbuf *q; + u8_t swapped; + + acc = 0; + swapped = 0; + /* iterate through all pbuf in chain */ + for(q = p; q != NULL; q = q->next) { + LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): checksumming pbuf %p (has next %p) \n", + (void *)q, (void *)q->next)); + acc += LWIP_CHKSUM(q->payload, q->len); + /*LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): unwrapped lwip_chksum()=%"X32_F" \n", acc));*/ + /* just executing this next line is probably faster that the if statement needed + to check whether we really need to execute it, and does no harm */ + acc = FOLD_U32T(acc); + if (q->len % 2 != 0) { + swapped = 1 - swapped; + acc = SWAP_BYTES_IN_WORD(acc); + } + /*LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): wrapped lwip_chksum()=%"X32_F" \n", acc));*/ + } + + if (swapped) { + acc = SWAP_BYTES_IN_WORD(acc); + } + acc += (src->addr & 0xffffUL); + acc += ((src->addr >> 16) & 0xffffUL); + acc += (dest->addr & 0xffffUL); + acc += ((dest->addr >> 16) & 0xffffUL); + acc += (u32_t)htons((u16_t)proto); + acc += (u32_t)htons(proto_len); + + /* Fold 32-bit sum to 16 bits + calling this twice is propably faster than if statements... */ + acc = FOLD_U32T(acc); + acc = FOLD_U32T(acc); + LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): pbuf chain lwip_chksum()=%"X32_F"\n", acc)); + return (u16_t)~(acc & 0xffffUL); +} + +/* inet_chksum_pseudo: + * + * Calculates the pseudo Internet checksum used by TCP and UDP for a pbuf chain. + * IP addresses are expected to be in network byte order. + * + * @param p chain of pbufs over that a checksum should be calculated (ip data part) + * @param src source ip address (used for checksum of pseudo header) + * @param dst destination ip address (used for checksum of pseudo header) + * @param proto ip protocol (used for checksum of pseudo header) + * @param proto_len length of the ip data part (used for checksum of pseudo header) + * @return checksum (as u16_t) to be saved directly in the protocol header + */ +/* Currently only used by UDPLITE, although this could change in the future. */ +#if LWIP_UDPLITE +u16_t +inet_chksum_pseudo_partial(struct pbuf *p, + struct ip_addr *src, struct ip_addr *dest, + u8_t proto, u16_t proto_len, u16_t chksum_len) +{ + u32_t acc; + struct pbuf *q; + u8_t swapped; + u16_t chklen; + + acc = 0; + swapped = 0; + /* iterate through all pbuf in chain */ + for(q = p; (q != NULL) && (chksum_len > 0); q = q->next) { + LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): checksumming pbuf %p (has next %p) \n", + (void *)q, (void *)q->next)); + chklen = q->len; + if (chklen > chksum_len) { + chklen = chksum_len; + } + acc += LWIP_CHKSUM(q->payload, chklen); + chksum_len -= chklen; + LWIP_ASSERT("delete me", chksum_len < 0x7fff); + /*LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): unwrapped lwip_chksum()=%"X32_F" \n", acc));*/ + /* fold the upper bit down */ + acc = FOLD_U32T(acc); + if (q->len % 2 != 0) { + swapped = 1 - swapped; + acc = SWAP_BYTES_IN_WORD(acc); + } + /*LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): wrapped lwip_chksum()=%"X32_F" \n", acc));*/ + } + + if (swapped) { + acc = SWAP_BYTES_IN_WORD(acc); + } + acc += (src->addr & 0xffffUL); + acc += ((src->addr >> 16) & 0xffffUL); + acc += (dest->addr & 0xffffUL); + acc += ((dest->addr >> 16) & 0xffffUL); + acc += (u32_t)htons((u16_t)proto); + acc += (u32_t)htons(proto_len); + + /* Fold 32-bit sum to 16 bits + calling this twice is propably faster than if statements... */ + acc = FOLD_U32T(acc); + acc = FOLD_U32T(acc); + LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): pbuf chain lwip_chksum()=%"X32_F"\n", acc)); + return (u16_t)~(acc & 0xffffUL); +} +#endif /* LWIP_UDPLITE */ + +/* inet_chksum: + * + * Calculates the Internet checksum over a portion of memory. Used primarily for IP + * and ICMP. + * + * @param dataptr start of the buffer to calculate the checksum (no alignment needed) + * @param len length of the buffer to calculate the checksum + * @return checksum (as u16_t) to be saved directly in the protocol header + */ + +u16_t +inet_chksum(void *dataptr, u16_t len) +{ + return ~LWIP_CHKSUM(dataptr, len); +} + +/** + * Calculate a checksum over a chain of pbufs (without pseudo-header, much like + * inet_chksum only pbufs are used). + * + * @param p pbuf chain over that the checksum should be calculated + * @return checksum (as u16_t) to be saved directly in the protocol header + */ +u16_t +inet_chksum_pbuf(struct pbuf *p) +{ + u32_t acc; + struct pbuf *q; + u8_t swapped; + + acc = 0; + swapped = 0; + for(q = p; q != NULL; q = q->next) { + acc += LWIP_CHKSUM(q->payload, q->len); + acc = FOLD_U32T(acc); + if (q->len % 2 != 0) { + swapped = 1 - swapped; + acc = SWAP_BYTES_IN_WORD(acc); + } + } + + if (swapped) { + acc = SWAP_BYTES_IN_WORD(acc); + } + return (u16_t)~(acc & 0xffffUL); +} diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/ip.c b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/ip.c new file mode 100644 index 000000000..a958242a4 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/ip.c @@ -0,0 +1,725 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * This is the IPv4 layer implementation for incoming and outgoing IP traffic. + * + * @see ip_frag.c + * + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#include "lwip/opt.h" +#include "lwip/ip.h" +#include "lwip/def.h" +#include "lwip/mem.h" +#include "lwip/ip_frag.h" +#include "lwip/inet.h" +#include "lwip/inet_chksum.h" +#include "lwip/netif.h" +#include "lwip/icmp.h" +#include "lwip/igmp.h" +#include "lwip/raw.h" +#include "lwip/udp.h" +#include "lwip/tcp.h" +#include "lwip/snmp.h" +#include "lwip/dhcp.h" +#include "lwip/stats.h" +#include "arch/perf.h" + +#include + +/** + * The interface that provided the packet for the current callback + * invocation. + */ +struct netif *current_netif; + +/** + * Header of the input packet currently being processed. + */ +const struct ip_hdr *current_header; + +/** + * Finds the appropriate network interface for a given IP address. It + * searches the list of network interfaces linearly. A match is found + * if the masked IP address of the network interface equals the masked + * IP address given to the function. + * + * @param dest the destination IP address for which to find the route + * @return the netif on which to send to reach dest + */ +struct netif * +ip_route(struct ip_addr *dest) +{ + struct netif *netif; + + /* iterate through netifs */ + for(netif = netif_list; netif != NULL; netif = netif->next) { + /* network mask matches? */ + if (netif_is_up(netif)) { + if (ip_addr_netcmp(dest, &(netif->ip_addr), &(netif->netmask))) { + /* return netif on which to forward IP packet */ + return netif; + } + } + } + if ((netif_default == NULL) || (!netif_is_up(netif_default))) { + LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("ip_route: No route to 0x%"X32_F"\n", dest->addr)); + IP_STATS_INC(ip.rterr); + snmp_inc_ipoutnoroutes(); + return NULL; + } + /* no matching netif found, use default netif */ + return netif_default; +} + +#if IP_FORWARD +/** + * Forwards an IP packet. It finds an appropriate route for the + * packet, decrements the TTL value of the packet, adjusts the + * checksum and outputs the packet on the appropriate interface. + * + * @param p the packet to forward (p->payload points to IP header) + * @param iphdr the IP header of the input packet + * @param inp the netif on which this packet was received + * @return the netif on which the packet was sent (NULL if it wasn't sent) + */ +static struct netif * +ip_forward(struct pbuf *p, struct ip_hdr *iphdr, struct netif *inp) +{ + struct netif *netif; + + PERF_START; + /* Find network interface where to forward this IP packet to. */ + netif = ip_route((struct ip_addr *)&(iphdr->dest)); + if (netif == NULL) { + LWIP_DEBUGF(IP_DEBUG, ("ip_forward: no forwarding route for 0x%"X32_F" found\n", + iphdr->dest.addr)); + snmp_inc_ipoutnoroutes(); + return (struct netif *)NULL; + } + /* Do not forward packets onto the same network interface on which + * they arrived. */ + if (netif == inp) { + LWIP_DEBUGF(IP_DEBUG, ("ip_forward: not bouncing packets back on incoming interface.\n")); + snmp_inc_ipoutnoroutes(); + return (struct netif *)NULL; + } + + /* decrement TTL */ + IPH_TTL_SET(iphdr, IPH_TTL(iphdr) - 1); + /* send ICMP if TTL == 0 */ + if (IPH_TTL(iphdr) == 0) { + snmp_inc_ipinhdrerrors(); +#if LWIP_ICMP + /* Don't send ICMP messages in response to ICMP messages */ + if (IPH_PROTO(iphdr) != IP_PROTO_ICMP) { + icmp_time_exceeded(p, ICMP_TE_TTL); + } +#endif /* LWIP_ICMP */ + return (struct netif *)NULL; + } + + /* Incrementally update the IP checksum. */ + if (IPH_CHKSUM(iphdr) >= htons(0xffff - 0x100)) { + IPH_CHKSUM_SET(iphdr, IPH_CHKSUM(iphdr) + htons(0x100) + 1); + } else { + IPH_CHKSUM_SET(iphdr, IPH_CHKSUM(iphdr) + htons(0x100)); + } + + LWIP_DEBUGF(IP_DEBUG, ("ip_forward: forwarding packet to 0x%"X32_F"\n", + iphdr->dest.addr)); + + IP_STATS_INC(ip.fw); + IP_STATS_INC(ip.xmit); + snmp_inc_ipforwdatagrams(); + + PERF_STOP("ip_forward"); + /* transmit pbuf on chosen interface */ + netif->output(netif, p, (struct ip_addr *)&(iphdr->dest)); + return netif; +} +#endif /* IP_FORWARD */ + +/** + * This function is called by the network interface device driver when + * an IP packet is received. The function does the basic checks of the + * IP header such as packet size being at least larger than the header + * size etc. If the packet was not destined for us, the packet is + * forwarded (using ip_forward). The IP checksum is always checked. + * + * Finally, the packet is sent to the upper layer protocol input function. + * + * @param p the received IP packet (p->payload points to IP header) + * @param inp the netif on which this packet was received + * @return ERR_OK if the packet was processed (could return ERR_* if it wasn't + * processed, but currently always returns ERR_OK) + */ +err_t +ip_input(struct pbuf *p, struct netif *inp) +{ + struct ip_hdr *iphdr; + struct netif *netif; + u16_t iphdr_hlen; + u16_t iphdr_len; +#if LWIP_DHCP + int check_ip_src=1; +#endif /* LWIP_DHCP */ + + IP_STATS_INC(ip.recv); + snmp_inc_ipinreceives(); + + /* identify the IP header */ + iphdr = p->payload; + if (IPH_V(iphdr) != 4) { + LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_WARNING, ("IP packet dropped due to bad version number %"U16_F"\n", IPH_V(iphdr))); + ip_debug_print(p); + pbuf_free(p); + IP_STATS_INC(ip.err); + IP_STATS_INC(ip.drop); + snmp_inc_ipinhdrerrors(); + return ERR_OK; + } + + /* obtain IP header length in number of 32-bit words */ + iphdr_hlen = IPH_HL(iphdr); + /* calculate IP header length in bytes */ + iphdr_hlen *= 4; + /* obtain ip length in bytes */ + iphdr_len = ntohs(IPH_LEN(iphdr)); + + /* header length exceeds first pbuf length, or ip length exceeds total pbuf length? */ + if ((iphdr_hlen > p->len) || (iphdr_len > p->tot_len)) { + if (iphdr_hlen > p->len) { + LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, + ("IP header (len %"U16_F") does not fit in first pbuf (len %"U16_F"), IP packet dropped.\n", + iphdr_hlen, p->len)); + } + if (iphdr_len > p->tot_len) { + LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, + ("IP (len %"U16_F") is longer than pbuf (len %"U16_F"), IP packet dropped.\n", + iphdr_len, p->tot_len)); + } + /* free (drop) packet pbufs */ + pbuf_free(p); + IP_STATS_INC(ip.lenerr); + IP_STATS_INC(ip.drop); + snmp_inc_ipindiscards(); + return ERR_OK; + } + + /* verify checksum */ +#if CHECKSUM_CHECK_IP + if (inet_chksum(iphdr, iphdr_hlen) != 0) { + + LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, + ("Checksum (0x%"X16_F") failed, IP packet dropped.\n", inet_chksum(iphdr, iphdr_hlen))); + ip_debug_print(p); + pbuf_free(p); + IP_STATS_INC(ip.chkerr); + IP_STATS_INC(ip.drop); + snmp_inc_ipinhdrerrors(); + return ERR_OK; + } +#endif + + /* Trim pbuf. This should have been done at the netif layer, + * but we'll do it anyway just to be sure that its done. */ + pbuf_realloc(p, iphdr_len); + + /* match packet against an interface, i.e. is this packet for us? */ +#if LWIP_IGMP + if (ip_addr_ismulticast(&(iphdr->dest))) { + if ((inp->flags & NETIF_FLAG_IGMP) && (igmp_lookfor_group(inp, &(iphdr->dest)))) { + netif = inp; + } else { + netif = NULL; + } + } else +#endif /* LWIP_IGMP */ + { + /* start trying with inp. if that's not acceptable, start walking the + list of configured netifs. + 'first' is used as a boolean to mark whether we started walking the list */ + int first = 1; + netif = inp; + do { + LWIP_DEBUGF(IP_DEBUG, ("ip_input: iphdr->dest 0x%"X32_F" netif->ip_addr 0x%"X32_F" (0x%"X32_F", 0x%"X32_F", 0x%"X32_F")\n", + iphdr->dest.addr, netif->ip_addr.addr, + iphdr->dest.addr & netif->netmask.addr, + netif->ip_addr.addr & netif->netmask.addr, + iphdr->dest.addr & ~(netif->netmask.addr))); + + /* interface is up and configured? */ + if ((netif_is_up(netif)) && (!ip_addr_isany(&(netif->ip_addr)))) { + /* unicast to this interface address? */ + if (ip_addr_cmp(&(iphdr->dest), &(netif->ip_addr)) || + /* or broadcast on this interface network address? */ + ip_addr_isbroadcast(&(iphdr->dest), netif)) { + LWIP_DEBUGF(IP_DEBUG, ("ip_input: packet accepted on interface %c%c\n", + netif->name[0], netif->name[1])); + /* break out of for loop */ + break; + } + } + if (first) { + first = 0; + netif = netif_list; + } else { + netif = netif->next; + } + if (netif == inp) { + netif = netif->next; + } + } while(netif != NULL); + } + +#if LWIP_DHCP + /* Pass DHCP messages regardless of destination address. DHCP traffic is addressed + * using link layer addressing (such as Ethernet MAC) so we must not filter on IP. + * According to RFC 1542 section 3.1.1, referred by RFC 2131). + */ + if (netif == NULL) { + /* remote port is DHCP server? */ + if (IPH_PROTO(iphdr) == IP_PROTO_UDP) { + LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_TRACE, ("ip_input: UDP packet to DHCP client port %"U16_F"\n", + ntohs(((struct udp_hdr *)((u8_t *)iphdr + iphdr_hlen))->dest))); + if (ntohs(((struct udp_hdr *)((u8_t *)iphdr + iphdr_hlen))->dest) == DHCP_CLIENT_PORT) { + LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_TRACE, ("ip_input: DHCP packet accepted.\n")); + netif = inp; + check_ip_src = 0; + } + } + } +#endif /* LWIP_DHCP */ + + /* broadcast or multicast packet source address? Compliant with RFC 1122: 3.2.1.3 */ +#if LWIP_DHCP + /* DHCP servers need 0.0.0.0 to be allowed as source address (RFC 1.1.2.2: 3.2.1.3/a) */ + if (check_ip_src && (iphdr->src.addr != 0)) +#endif /* LWIP_DHCP */ + { if ((ip_addr_isbroadcast(&(iphdr->src), inp)) || + (ip_addr_ismulticast(&(iphdr->src)))) { + /* packet source is not valid */ + LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("ip_input: packet source is not valid.\n")); + /* free (drop) packet pbufs */ + pbuf_free(p); + IP_STATS_INC(ip.drop); + snmp_inc_ipinaddrerrors(); + snmp_inc_ipindiscards(); + return ERR_OK; + } + } + + /* packet not for us? */ + if (netif == NULL) { + /* packet not for us, route or discard */ + LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_TRACE, ("ip_input: packet not for us.\n")); +#if IP_FORWARD + /* non-broadcast packet? */ + if (!ip_addr_isbroadcast(&(iphdr->dest), inp)) { + /* try to forward IP packet on (other) interfaces */ + ip_forward(p, iphdr, inp); + } else +#endif /* IP_FORWARD */ + { + snmp_inc_ipinaddrerrors(); + snmp_inc_ipindiscards(); + } + pbuf_free(p); + return ERR_OK; + } + /* packet consists of multiple fragments? */ + if ((IPH_OFFSET(iphdr) & htons(IP_OFFMASK | IP_MF)) != 0) { +#if IP_REASSEMBLY /* packet fragment reassembly code present? */ + LWIP_DEBUGF(IP_DEBUG, ("IP packet is a fragment (id=0x%04"X16_F" tot_len=%"U16_F" len=%"U16_F" MF=%"U16_F" offset=%"U16_F"), calling ip_reass()\n", + ntohs(IPH_ID(iphdr)), p->tot_len, ntohs(IPH_LEN(iphdr)), !!(IPH_OFFSET(iphdr) & htons(IP_MF)), (ntohs(IPH_OFFSET(iphdr)) & IP_OFFMASK)*8)); + /* reassemble the packet*/ + p = ip_reass(p); + /* packet not fully reassembled yet? */ + if (p == NULL) { + return ERR_OK; + } + iphdr = p->payload; +#else /* IP_REASSEMBLY == 0, no packet fragment reassembly code present */ + pbuf_free(p); + LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("IP packet dropped since it was fragmented (0x%"X16_F") (while IP_REASSEMBLY == 0).\n", + ntohs(IPH_OFFSET(iphdr)))); + IP_STATS_INC(ip.opterr); + IP_STATS_INC(ip.drop); + /* unsupported protocol feature */ + snmp_inc_ipinunknownprotos(); + return ERR_OK; +#endif /* IP_REASSEMBLY */ + } + +#if IP_OPTIONS_ALLOWED == 0 /* no support for IP options in the IP header? */ + +#if LWIP_IGMP + /* there is an extra "router alert" option in IGMP messages which we allow for but do not police */ + if((iphdr_hlen > IP_HLEN && (IPH_PROTO(iphdr) != IP_PROTO_IGMP)) { +#else + if (iphdr_hlen > IP_HLEN) { +#endif /* LWIP_IGMP */ + LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("IP packet dropped since there were IP options (while IP_OPTIONS_ALLOWED == 0).\n")); + pbuf_free(p); + IP_STATS_INC(ip.opterr); + IP_STATS_INC(ip.drop); + /* unsupported protocol feature */ + snmp_inc_ipinunknownprotos(); + return ERR_OK; + } +#endif /* IP_OPTIONS_ALLOWED == 0 */ + + /* send to upper layers */ + LWIP_DEBUGF(IP_DEBUG, ("ip_input: \n")); + ip_debug_print(p); + LWIP_DEBUGF(IP_DEBUG, ("ip_input: p->len %"U16_F" p->tot_len %"U16_F"\n", p->len, p->tot_len)); + + current_netif = inp; + current_header = iphdr; + +#if LWIP_RAW + /* raw input did not eat the packet? */ + if (raw_input(p, inp) == 0) +#endif /* LWIP_RAW */ + { + + switch (IPH_PROTO(iphdr)) { +#if LWIP_UDP + case IP_PROTO_UDP: +#if LWIP_UDPLITE + case IP_PROTO_UDPLITE: +#endif /* LWIP_UDPLITE */ + snmp_inc_ipindelivers(); + udp_input(p, inp); + break; +#endif /* LWIP_UDP */ +#if LWIP_TCP + case IP_PROTO_TCP: + snmp_inc_ipindelivers(); + tcp_input(p, inp); + break; +#endif /* LWIP_TCP */ +#if LWIP_ICMP + case IP_PROTO_ICMP: + snmp_inc_ipindelivers(); + icmp_input(p, inp); + break; +#endif /* LWIP_ICMP */ +#if LWIP_IGMP + case IP_PROTO_IGMP: + igmp_input(p,inp,&(iphdr->dest)); + break; +#endif /* LWIP_IGMP */ + default: +#if LWIP_ICMP + /* send ICMP destination protocol unreachable unless is was a broadcast */ + if (!ip_addr_isbroadcast(&(iphdr->dest), inp) && + !ip_addr_ismulticast(&(iphdr->dest))) { + p->payload = iphdr; + icmp_dest_unreach(p, ICMP_DUR_PROTO); + } +#endif /* LWIP_ICMP */ + pbuf_free(p); + + LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("Unsupported transport protocol %"U16_F"\n", IPH_PROTO(iphdr))); + + IP_STATS_INC(ip.proterr); + IP_STATS_INC(ip.drop); + snmp_inc_ipinunknownprotos(); + } + } + + current_netif = NULL; + current_header = NULL; + + return ERR_OK; +} + +/** + * Sends an IP packet on a network interface. This function constructs + * the IP header and calculates the IP header checksum. If the source + * IP address is NULL, the IP address of the outgoing network + * interface is filled in as source address. + * If the destination IP address is IP_HDRINCL, p is assumed to already + * include an IP header and p->payload points to it instead of the data. + * + * @param p the packet to send (p->payload points to the data, e.g. next + protocol header; if dest == IP_HDRINCL, p already includes an IP + header and p->payload points to that IP header) + * @param src the source IP address to send from (if src == IP_ADDR_ANY, the + * IP address of the netif used to send is used as source address) + * @param dest the destination IP address to send the packet to + * @param ttl the TTL value to be set in the IP header + * @param tos the TOS value to be set in the IP header + * @param proto the PROTOCOL to be set in the IP header + * @param netif the netif on which to send this packet + * @return ERR_OK if the packet was sent OK + * ERR_BUF if p doesn't have enough space for IP/LINK headers + * returns errors returned by netif->output + * + * @note ip_id: RFC791 "some host may be able to simply use + * unique identifiers independent of destination" + */ +err_t +ip_output_if(struct pbuf *p, struct ip_addr *src, struct ip_addr *dest, + u8_t ttl, u8_t tos, + u8_t proto, struct netif *netif) +{ +#if IP_OPTIONS_SEND + return ip_output_if_opt(p, src, dest, ttl, tos, proto, netif, NULL, 0); +} + +/** + * Same as ip_output_if() but with the possibility to include IP options: + * + * @ param ip_options pointer to the IP options, copied into the IP header + * @ param optlen length of ip_options + */ +err_t ip_output_if_opt(struct pbuf *p, struct ip_addr *src, struct ip_addr *dest, + u8_t ttl, u8_t tos, u8_t proto, struct netif *netif, void *ip_options, + u16_t optlen) +{ +#endif /* IP_OPTIONS_SEND */ + struct ip_hdr *iphdr; + static u16_t ip_id = 0; + + snmp_inc_ipoutrequests(); + + /* Should the IP header be generated or is it already included in p? */ + if (dest != IP_HDRINCL) { + u16_t ip_hlen = IP_HLEN; +#if IP_OPTIONS_SEND + u16_t optlen_aligned = 0; + if (optlen != 0) { + /* round up to a multiple of 4 */ + optlen_aligned = ((optlen + 3) & ~3); + ip_hlen += optlen_aligned; + /* First write in the IP options */ + if (pbuf_header(p, optlen_aligned)) { + LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("ip_output_if_opt: not enough room for IP options in pbuf\n")); + IP_STATS_INC(ip.err); + snmp_inc_ipoutdiscards(); + return ERR_BUF; + } + MEMCPY(p->payload, ip_options, optlen); + if (optlen < optlen_aligned) { + /* zero the remaining bytes */ + memset(((char*)p->payload) + optlen, 0, optlen_aligned - optlen); + } + } +#endif /* IP_OPTIONS_SEND */ + /* generate IP header */ + if (pbuf_header(p, IP_HLEN)) { + LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("ip_output: not enough room for IP header in pbuf\n")); + + IP_STATS_INC(ip.err); + snmp_inc_ipoutdiscards(); + return ERR_BUF; + } + + iphdr = p->payload; + LWIP_ASSERT("check that first pbuf can hold struct ip_hdr", + (p->len >= sizeof(struct ip_hdr))); + + IPH_TTL_SET(iphdr, ttl); + IPH_PROTO_SET(iphdr, proto); + + ip_addr_set(&(iphdr->dest), dest); + + IPH_VHLTOS_SET(iphdr, 4, ip_hlen / 4, tos); + IPH_LEN_SET(iphdr, htons(p->tot_len)); + IPH_OFFSET_SET(iphdr, 0); + IPH_ID_SET(iphdr, htons(ip_id)); + ++ip_id; + + if (ip_addr_isany(src)) { + ip_addr_set(&(iphdr->src), &(netif->ip_addr)); + } else { + ip_addr_set(&(iphdr->src), src); + } + + IPH_CHKSUM_SET(iphdr, 0); +#if CHECKSUM_GEN_IP + IPH_CHKSUM_SET(iphdr, inet_chksum(iphdr, ip_hlen)); +#endif + } else { + /* IP header already included in p */ + iphdr = p->payload; + dest = &(iphdr->dest); + } + + IP_STATS_INC(ip.xmit); + + LWIP_DEBUGF(IP_DEBUG, ("ip_output_if: %c%c%"U16_F"\n", netif->name[0], netif->name[1], netif->num)); + ip_debug_print(p); + +#if ENABLE_LOOPBACK + if (ip_addr_cmp(dest, &netif->ip_addr)) { + /* Packet to self, enqueue it for loopback */ + LWIP_DEBUGF(IP_DEBUG, ("netif_loop_output()")); + return netif_loop_output(netif, p, dest); + } +#endif /* ENABLE_LOOPBACK */ +#if IP_FRAG + /* don't fragment if interface has mtu set to 0 [loopif] */ + if (netif->mtu && (p->tot_len > netif->mtu)) { + return ip_frag(p,netif,dest); + } +#endif + + LWIP_DEBUGF(IP_DEBUG, ("netif->output()")); + return netif->output(netif, p, dest); +} + +/** + * Simple interface to ip_output_if. It finds the outgoing network + * interface and calls upon ip_output_if to do the actual work. + * + * @param p the packet to send (p->payload points to the data, e.g. next + protocol header; if dest == IP_HDRINCL, p already includes an IP + header and p->payload points to that IP header) + * @param src the source IP address to send from (if src == IP_ADDR_ANY, the + * IP address of the netif used to send is used as source address) + * @param dest the destination IP address to send the packet to + * @param ttl the TTL value to be set in the IP header + * @param tos the TOS value to be set in the IP header + * @param proto the PROTOCOL to be set in the IP header + * + * @return ERR_RTE if no route is found + * see ip_output_if() for more return values + */ +err_t +ip_output(struct pbuf *p, struct ip_addr *src, struct ip_addr *dest, + u8_t ttl, u8_t tos, u8_t proto) +{ + struct netif *netif; + + if ((netif = ip_route(dest)) == NULL) { + LWIP_DEBUGF(IP_DEBUG, ("ip_output: No route to 0x%"X32_F"\n", dest->addr)); + IP_STATS_INC(ip.rterr); + return ERR_RTE; + } + + return ip_output_if(p, src, dest, ttl, tos, proto, netif); +} + +#if LWIP_NETIF_HWADDRHINT +/** Like ip_output, but takes and addr_hint pointer that is passed on to netif->addr_hint + * before calling ip_output_if. + * + * @param p the packet to send (p->payload points to the data, e.g. next + protocol header; if dest == IP_HDRINCL, p already includes an IP + header and p->payload points to that IP header) + * @param src the source IP address to send from (if src == IP_ADDR_ANY, the + * IP address of the netif used to send is used as source address) + * @param dest the destination IP address to send the packet to + * @param ttl the TTL value to be set in the IP header + * @param tos the TOS value to be set in the IP header + * @param proto the PROTOCOL to be set in the IP header + * @param addr_hint address hint pointer set to netif->addr_hint before + * calling ip_output_if() + * + * @return ERR_RTE if no route is found + * see ip_output_if() for more return values + */ +err_t +ip_output_hinted(struct pbuf *p, struct ip_addr *src, struct ip_addr *dest, + u8_t ttl, u8_t tos, u8_t proto, u8_t *addr_hint) +{ + struct netif *netif; + err_t err; + + if ((netif = ip_route(dest)) == NULL) { + LWIP_DEBUGF(IP_DEBUG, ("ip_output: No route to 0x%"X32_F"\n", dest->addr)); + IP_STATS_INC(ip.rterr); + return ERR_RTE; + } + + netif->addr_hint = addr_hint; + err = ip_output_if(p, src, dest, ttl, tos, proto, netif); + netif->addr_hint = NULL; + + return err; +} +#endif /* LWIP_NETIF_HWADDRHINT*/ + +#if IP_DEBUG +/* Print an IP header by using LWIP_DEBUGF + * @param p an IP packet, p->payload pointing to the IP header + */ +void +ip_debug_print(struct pbuf *p) +{ + struct ip_hdr *iphdr = p->payload; + u8_t *payload; + + payload = (u8_t *)iphdr + IP_HLEN; + + LWIP_DEBUGF(IP_DEBUG, ("IP header:\n")); + LWIP_DEBUGF(IP_DEBUG, ("+-------------------------------+\n")); + LWIP_DEBUGF(IP_DEBUG, ("|%2"S16_F" |%2"S16_F" | 0x%02"X16_F" | %5"U16_F" | (v, hl, tos, len)\n", + IPH_V(iphdr), + IPH_HL(iphdr), + IPH_TOS(iphdr), + ntohs(IPH_LEN(iphdr)))); + LWIP_DEBUGF(IP_DEBUG, ("+-------------------------------+\n")); + LWIP_DEBUGF(IP_DEBUG, ("| %5"U16_F" |%"U16_F"%"U16_F"%"U16_F"| %4"U16_F" | (id, flags, offset)\n", + ntohs(IPH_ID(iphdr)), + ntohs(IPH_OFFSET(iphdr)) >> 15 & 1, + ntohs(IPH_OFFSET(iphdr)) >> 14 & 1, + ntohs(IPH_OFFSET(iphdr)) >> 13 & 1, + ntohs(IPH_OFFSET(iphdr)) & IP_OFFMASK)); + LWIP_DEBUGF(IP_DEBUG, ("+-------------------------------+\n")); + LWIP_DEBUGF(IP_DEBUG, ("| %3"U16_F" | %3"U16_F" | 0x%04"X16_F" | (ttl, proto, chksum)\n", + IPH_TTL(iphdr), + IPH_PROTO(iphdr), + ntohs(IPH_CHKSUM(iphdr)))); + LWIP_DEBUGF(IP_DEBUG, ("+-------------------------------+\n")); + LWIP_DEBUGF(IP_DEBUG, ("| %3"U16_F" | %3"U16_F" | %3"U16_F" | %3"U16_F" | (src)\n", + ip4_addr1(&iphdr->src), + ip4_addr2(&iphdr->src), + ip4_addr3(&iphdr->src), + ip4_addr4(&iphdr->src))); + LWIP_DEBUGF(IP_DEBUG, ("+-------------------------------+\n")); + LWIP_DEBUGF(IP_DEBUG, ("| %3"U16_F" | %3"U16_F" | %3"U16_F" | %3"U16_F" | (dest)\n", + ip4_addr1(&iphdr->dest), + ip4_addr2(&iphdr->dest), + ip4_addr3(&iphdr->dest), + ip4_addr4(&iphdr->dest))); + LWIP_DEBUGF(IP_DEBUG, ("+-------------------------------+\n")); +} +#endif /* IP_DEBUG */ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/ip_addr.c b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/ip_addr.c new file mode 100644 index 000000000..33e0aaddd --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/ip_addr.c @@ -0,0 +1,86 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * This is the IPv4 address tools implementation. + * + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#include "lwip/opt.h" +#include "lwip/ip_addr.h" +#include "lwip/inet.h" +#include "lwip/netif.h" + +#define IP_ADDR_ANY_VALUE 0x00000000UL +#define IP_ADDR_BROADCAST_VALUE 0xffffffffUL + +/* used by IP_ADDR_ANY and IP_ADDR_BROADCAST in ip_addr.h */ +const struct ip_addr ip_addr_any = { IP_ADDR_ANY_VALUE }; +const struct ip_addr ip_addr_broadcast = { IP_ADDR_BROADCAST_VALUE }; + +/** + * Determine if an address is a broadcast address on a network interface + * + * @param addr address to be checked + * @param netif the network interface against which the address is checked + * @return returns non-zero if the address is a broadcast address + */ +u8_t ip_addr_isbroadcast(struct ip_addr *addr, struct netif *netif) +{ + u32_t addr2test; + + addr2test = addr->addr; + /* all ones (broadcast) or all zeroes (old skool broadcast) */ + if ((~addr2test == IP_ADDR_ANY_VALUE) || + (addr2test == IP_ADDR_ANY_VALUE)) + return 1; + /* no broadcast support on this network interface? */ + else if ((netif->flags & NETIF_FLAG_BROADCAST) == 0) + /* the given address cannot be a broadcast address + * nor can we check against any broadcast addresses */ + return 0; + /* address matches network interface address exactly? => no broadcast */ + else if (addr2test == netif->ip_addr.addr) + return 0; + /* on the same (sub) network... */ + else if (ip_addr_netcmp(addr, &(netif->ip_addr), &(netif->netmask)) + /* ...and host identifier bits are all ones? =>... */ + && ((addr2test & ~netif->netmask.addr) == + (IP_ADDR_BROADCAST_VALUE & ~netif->netmask.addr))) + /* => network broadcast address */ + return 1; + else + return 0; +} diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/ip_frag.c b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/ip_frag.c new file mode 100644 index 000000000..ab35572e4 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/ip_frag.c @@ -0,0 +1,794 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * This is the IPv4 packet segmentation and reassembly implementation. + * + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Jani Monoses + * Simon Goldschmidt + * original reassembly code by Adam Dunkels + * + */ + +#include "lwip/opt.h" +#include "lwip/ip_frag.h" +#include "lwip/ip.h" +#include "lwip/inet.h" +#include "lwip/inet_chksum.h" +#include "lwip/netif.h" +#include "lwip/snmp.h" +#include "lwip/stats.h" +#include "lwip/icmp.h" + +#include + +#if IP_REASSEMBLY +/** + * The IP reassembly code currently has the following limitations: + * - IP header options are not supported + * - fragments must not overlap (e.g. due to different routes), + * currently, overlapping or duplicate fragments are thrown away + * if IP_REASS_CHECK_OVERLAP=1 (the default)! + * + * @todo: work with IP header options + */ + +/** Setting this to 0, you can turn off checking the fragments for overlapping + * regions. The code gets a little smaller. Only use this if you know that + * overlapping won't occur on your network! */ +#ifndef IP_REASS_CHECK_OVERLAP +#define IP_REASS_CHECK_OVERLAP 1 +#endif /* IP_REASS_CHECK_OVERLAP */ + +/** Set to 0 to prevent freeing the oldest datagram when the reassembly buffer is + * full (IP_REASS_MAX_PBUFS pbufs are enqueued). The code gets a little smaller. + * Datagrams will be freed by timeout only. Especially useful when MEMP_NUM_REASSDATA + * is set to 1, so one datagram can be reassembled at a time, only. */ +#ifndef IP_REASS_FREE_OLDEST +#define IP_REASS_FREE_OLDEST 1 +#endif /* IP_REASS_FREE_OLDEST */ + +#define IP_REASS_FLAG_LASTFRAG 0x01 + +/** This is a helper struct which holds the starting + * offset and the ending offset of this fragment to + * easily chain the fragments. + * It has to be packed since it has to fit inside the IP header. + */ +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct ip_reass_helper { + PACK_STRUCT_FIELD(struct pbuf *next_pbuf); + PACK_STRUCT_FIELD(u16_t start); + PACK_STRUCT_FIELD(u16_t end); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +#define IP_ADDRESSES_AND_ID_MATCH(iphdrA, iphdrB) \ + (ip_addr_cmp(&(iphdrA)->src, &(iphdrB)->src) && \ + ip_addr_cmp(&(iphdrA)->dest, &(iphdrB)->dest) && \ + IPH_ID(iphdrA) == IPH_ID(iphdrB)) ? 1 : 0 + +/* global variables */ +static struct ip_reassdata *reassdatagrams; +static u16_t ip_reass_pbufcount; + +/* function prototypes */ +static void ip_reass_dequeue_datagram(struct ip_reassdata *ipr, struct ip_reassdata *prev); +static int ip_reass_free_complete_datagram(struct ip_reassdata *ipr, struct ip_reassdata *prev); + +/** + * Reassembly timer base function + * for both NO_SYS == 0 and 1 (!). + * + * Should be called every 1000 msec (defined by IP_TMR_INTERVAL). + */ +void +ip_reass_tmr(void) +{ + struct ip_reassdata *r, *prev = NULL; + + r = reassdatagrams; + while (r != NULL) { + /* Decrement the timer. Once it reaches 0, + * clean up the incomplete fragment assembly */ + if (r->timer > 0) { + r->timer--; + LWIP_DEBUGF(IP_REASS_DEBUG, ("ip_reass_tmr: timer dec %"U16_F"\n",(u16_t)r->timer)); + prev = r; + r = r->next; + } else { + /* reassembly timed out */ + struct ip_reassdata *tmp; + LWIP_DEBUGF(IP_REASS_DEBUG, ("ip_reass_tmr: timer timed out\n")); + tmp = r; + /* get the next pointer before freeing */ + r = r->next; + /* free the helper struct and all enqueued pbufs */ + ip_reass_free_complete_datagram(tmp, prev); + } + } +} + +/** + * Free a datagram (struct ip_reassdata) and all its pbufs. + * Updates the total count of enqueued pbufs (ip_reass_pbufcount), + * SNMP counters and sends an ICMP time exceeded packet. + * + * @param ipr datagram to free + * @param prev the previous datagram in the linked list + * @return the number of pbufs freed + */ +static int +ip_reass_free_complete_datagram(struct ip_reassdata *ipr, struct ip_reassdata *prev) +{ + int pbufs_freed = 0; + struct pbuf *p; + struct ip_reass_helper *iprh; + + LWIP_ASSERT("prev != ipr", prev != ipr); + if (prev != NULL) { + LWIP_ASSERT("prev->next == ipr", prev->next == ipr); + } + + snmp_inc_ipreasmfails(); +#if LWIP_ICMP + iprh = (struct ip_reass_helper *)ipr->p->payload; + if (iprh->start == 0) { + /* The first fragment was received, send ICMP time exceeded. */ + /* First, de-queue the first pbuf from r->p. */ + p = ipr->p; + ipr->p = iprh->next_pbuf; + /* Then, copy the original header into it. */ + SMEMCPY(p->payload, &ipr->iphdr, IP_HLEN); + icmp_time_exceeded(p, ICMP_TE_FRAG); + pbufs_freed += pbuf_clen(p); + pbuf_free(p); + } +#endif /* LWIP_ICMP */ + + /* First, free all received pbufs. The individual pbufs need to be released + separately as they have not yet been chained */ + p = ipr->p; + while (p != NULL) { + struct pbuf *pcur; + iprh = (struct ip_reass_helper *)p->payload; + pcur = p; + /* get the next pointer before freeing */ + p = iprh->next_pbuf; + pbufs_freed += pbuf_clen(pcur); + pbuf_free(pcur); + } + /* Then, unchain the struct ip_reassdata from the list and free it. */ + ip_reass_dequeue_datagram(ipr, prev); + LWIP_ASSERT("ip_reass_pbufcount >= clen", ip_reass_pbufcount >= pbufs_freed); + ip_reass_pbufcount -= pbufs_freed; + + return pbufs_freed; +} + +#if IP_REASS_FREE_OLDEST +/** + * Free the oldest datagram to make room for enqueueing new fragments. + * The datagram 'fraghdr' belongs to is not freed! + * + * @param fraghdr IP header of the current fragment + * @param pbufs_needed number of pbufs needed to enqueue + * (used for freeing other datagrams if not enough space) + * @return the number of pbufs freed + */ +static int +ip_reass_remove_oldest_datagram(struct ip_hdr *fraghdr, int pbufs_needed) +{ + /* @todo Can't we simply remove the last datagram in the + * linked list behind reassdatagrams? + */ + struct ip_reassdata *r, *oldest, *prev; + int pbufs_freed = 0, pbufs_freed_current; + int other_datagrams; + + /* Free datagrams until being allowed to enqueue 'pbufs_needed' pbufs, + * but don't free the datagram that 'fraghdr' belongs to! */ + do { + oldest = NULL; + prev = NULL; + other_datagrams = 0; + r = reassdatagrams; + while (r != NULL) { + if (!IP_ADDRESSES_AND_ID_MATCH(&r->iphdr, fraghdr)) { + /* Not the same datagram as fraghdr */ + other_datagrams++; + if (oldest == NULL) { + oldest = r; + } else if (r->timer <= oldest->timer) { + /* older than the previous oldest */ + oldest = r; + } + } + if (r->next != NULL) { + prev = r; + } + r = r->next; + } + if (oldest != NULL) { + pbufs_freed_current = ip_reass_free_complete_datagram(oldest, prev); + pbufs_freed += pbufs_freed_current; + } + } while ((pbufs_freed < pbufs_needed) && (other_datagrams > 1)); + return pbufs_freed; +} +#endif /* IP_REASS_FREE_OLDEST */ + +/** + * Enqueues a new fragment into the fragment queue + * @param fraghdr points to the new fragments IP hdr + * @param clen number of pbufs needed to enqueue (used for freeing other datagrams if not enough space) + * @return A pointer to the queue location into which the fragment was enqueued + */ +static struct ip_reassdata* +ip_reass_enqueue_new_datagram(struct ip_hdr *fraghdr, int clen) +{ + struct ip_reassdata* ipr; + /* No matching previous fragment found, allocate a new reassdata struct */ + ipr = memp_malloc(MEMP_REASSDATA); + if (ipr == NULL) { +#if IP_REASS_FREE_OLDEST + if (ip_reass_remove_oldest_datagram(fraghdr, clen) >= clen) { + ipr = memp_malloc(MEMP_REASSDATA); + } + if (ipr == NULL) +#endif /* IP_REASS_FREE_OLDEST */ + { + IPFRAG_STATS_INC(ip_frag.memerr); + LWIP_DEBUGF(IP_REASS_DEBUG,("Failed to alloc reassdata struct\n")); + return NULL; + } + } + memset(ipr, 0, sizeof(struct ip_reassdata)); + ipr->timer = IP_REASS_MAXAGE; + + /* enqueue the new structure to the front of the list */ + ipr->next = reassdatagrams; + reassdatagrams = ipr; + /* copy the ip header for later tests and input */ + /* @todo: no ip options supported? */ + SMEMCPY(&(ipr->iphdr), fraghdr, IP_HLEN); + return ipr; +} + +/** + * Dequeues a datagram from the datagram queue. Doesn't deallocate the pbufs. + * @param ipr points to the queue entry to dequeue + */ +static void +ip_reass_dequeue_datagram(struct ip_reassdata *ipr, struct ip_reassdata *prev) +{ + + /* dequeue the reass struct */ + if (reassdatagrams == ipr) { + /* it was the first in the list */ + reassdatagrams = ipr->next; + } else { + /* it wasn't the first, so it must have a valid 'prev' */ + LWIP_ASSERT("sanity check linked list", prev != NULL); + prev->next = ipr->next; + } + + /* now we can free the ip_reass struct */ + memp_free(MEMP_REASSDATA, ipr); +} + +/** + * Chain a new pbuf into the pbuf list that composes the datagram. The pbuf list + * will grow over time as new pbufs are rx. + * Also checks that the datagram passes basic continuity checks (if the last + * fragment was received at least once). + * @param root_p points to the 'root' pbuf for the current datagram being assembled. + * @param new_p points to the pbuf for the current fragment + * @return 0 if invalid, >0 otherwise + */ +static int +ip_reass_chain_frag_into_datagram_and_validate(struct ip_reassdata *ipr, struct pbuf *new_p) +{ + struct ip_reass_helper *iprh, *iprh_tmp, *iprh_prev=NULL; + struct pbuf *q; + u16_t offset,len; + struct ip_hdr *fraghdr; + int valid = 1; + + /* Extract length and fragment offset from current fragment */ + fraghdr = (struct ip_hdr*)new_p->payload; + len = ntohs(IPH_LEN(fraghdr)) - IPH_HL(fraghdr) * 4; + offset = (ntohs(IPH_OFFSET(fraghdr)) & IP_OFFMASK) * 8; + + /* overwrite the fragment's ip header from the pbuf with our helper struct, + * and setup the embedded helper structure. */ + /* make sure the struct ip_reass_helper fits into the IP header */ + LWIP_ASSERT("sizeof(struct ip_reass_helper) <= IP_HLEN", + sizeof(struct ip_reass_helper) <= IP_HLEN); + iprh = (struct ip_reass_helper*)new_p->payload; + iprh->next_pbuf = NULL; + iprh->start = offset; + iprh->end = offset + len; + + /* Iterate through until we either get to the end of the list (append), + * or we find on with a larger offset (insert). */ + for (q = ipr->p; q != NULL;) { + iprh_tmp = (struct ip_reass_helper*)q->payload; + if (iprh->start < iprh_tmp->start) { + /* the new pbuf should be inserted before this */ + iprh->next_pbuf = q; + if (iprh_prev != NULL) { + /* not the fragment with the lowest offset */ +#if IP_REASS_CHECK_OVERLAP + if ((iprh->start < iprh_prev->end) || (iprh->end > iprh_tmp->start)) { + /* fragment overlaps with previous or following, throw away */ + goto freepbuf; + } +#endif /* IP_REASS_CHECK_OVERLAP */ + iprh_prev->next_pbuf = new_p; + } else { + /* fragment with the lowest offset */ + ipr->p = new_p; + } + break; + } else if(iprh->start == iprh_tmp->start) { + /* received the same datagram twice: no need to keep the datagram */ + goto freepbuf; +#if IP_REASS_CHECK_OVERLAP + } else if(iprh->start < iprh_tmp->end) { + /* overlap: no need to keep the new datagram */ + goto freepbuf; +#endif /* IP_REASS_CHECK_OVERLAP */ + } else { + /* Check if the fragments received so far have no wholes. */ + if (iprh_prev != NULL) { + if (iprh_prev->end != iprh_tmp->start) { + /* There is a fragment missing between the current + * and the previous fragment */ + valid = 0; + } + } + } + q = iprh_tmp->next_pbuf; + iprh_prev = iprh_tmp; + } + + /* If q is NULL, then we made it to the end of the list. Determine what to do now */ + if (q == NULL) { + if (iprh_prev != NULL) { + /* this is (for now), the fragment with the highest offset: + * chain it to the last fragment */ +#if IP_REASS_CHECK_OVERLAP + LWIP_ASSERT("check fragments don't overlap", iprh_prev->end <= iprh->start); +#endif /* IP_REASS_CHECK_OVERLAP */ + iprh_prev->next_pbuf = new_p; + if (iprh_prev->end != iprh->start) { + valid = 0; + } + } else { +#if IP_REASS_CHECK_OVERLAP + LWIP_ASSERT("no previous fragment, this must be the first fragment!", + ipr->p == NULL); +#endif /* IP_REASS_CHECK_OVERLAP */ + /* this is the first fragment we ever received for this ip datagram */ + ipr->p = new_p; + } + } + + /* At this point, the validation part begins: */ + /* If we already received the last fragment */ + if ((ipr->flags & IP_REASS_FLAG_LASTFRAG) != 0) { + /* and had no wholes so far */ + if (valid) { + /* then check if the rest of the fragments is here */ + /* Check if the queue starts with the first datagram */ + if (((struct ip_reass_helper*)ipr->p->payload)->start != 0) { + valid = 0; + } else { + /* and check that there are no wholes after this datagram */ + iprh_prev = iprh; + q = iprh->next_pbuf; + while (q != NULL) { + iprh = (struct ip_reass_helper*)q->payload; + if (iprh_prev->end != iprh->start) { + valid = 0; + break; + } + iprh_prev = iprh; + q = iprh->next_pbuf; + } + /* if still valid, all fragments are received + * (because to the MF==0 already arrived */ + if (valid) { + LWIP_ASSERT("sanity check", ipr->p != NULL); + LWIP_ASSERT("sanity check", + ((struct ip_reass_helper*)ipr->p->payload) != iprh); + LWIP_ASSERT("validate_datagram:next_pbuf!=NULL", + iprh->next_pbuf == NULL); + LWIP_ASSERT("validate_datagram:datagram end!=datagram len", + iprh->end == ipr->datagram_len); + } + } + } + /* If valid is 0 here, there are some fragments missing in the middle + * (since MF == 0 has already arrived). Such datagrams simply time out if + * no more fragments are received... */ + return valid; + } + /* If we come here, not all fragments were received, yet! */ + return 0; /* not yet valid! */ +#if IP_REASS_CHECK_OVERLAP +freepbuf: + ip_reass_pbufcount -= pbuf_clen(new_p); + pbuf_free(new_p); + return 0; +#endif /* IP_REASS_CHECK_OVERLAP */ +} + +/** + * Reassembles incoming IP fragments into an IP datagram. + * + * @param p points to a pbuf chain of the fragment + * @return NULL if reassembly is incomplete, ? otherwise + */ +struct pbuf * +ip_reass(struct pbuf *p) +{ + struct pbuf *r; + struct ip_hdr *fraghdr; + struct ip_reassdata *ipr; + struct ip_reass_helper *iprh; + u16_t offset, len; + u8_t clen; + struct ip_reassdata *ipr_prev = NULL; + + IPFRAG_STATS_INC(ip_frag.recv); + snmp_inc_ipreasmreqds(); + + fraghdr = (struct ip_hdr*)p->payload; + + if ((IPH_HL(fraghdr) * 4) != IP_HLEN) { + LWIP_DEBUGF(IP_REASS_DEBUG,("ip_reass: IP options currently not supported!\n")); + IPFRAG_STATS_INC(ip_frag.err); + goto nullreturn; + } + + offset = (ntohs(IPH_OFFSET(fraghdr)) & IP_OFFMASK) * 8; + len = ntohs(IPH_LEN(fraghdr)) - IPH_HL(fraghdr) * 4; + + /* Check if we are allowed to enqueue more datagrams. */ + clen = pbuf_clen(p); + if ((ip_reass_pbufcount + clen) > IP_REASS_MAX_PBUFS) { +#if IP_REASS_FREE_OLDEST + if (!ip_reass_remove_oldest_datagram(fraghdr, clen) || + ((ip_reass_pbufcount + clen) > IP_REASS_MAX_PBUFS)) +#endif /* IP_REASS_FREE_OLDEST */ + { + /* No datagram could be freed and still too many pbufs enqueued */ + LWIP_DEBUGF(IP_REASS_DEBUG,("ip_reass: Overflow condition: pbufct=%d, clen=%d, MAX=%d\n", + ip_reass_pbufcount, clen, IP_REASS_MAX_PBUFS)); + IPFRAG_STATS_INC(ip_frag.memerr); + /* @todo: send ICMP time exceeded here? */ + /* drop this pbuf */ + goto nullreturn; + } + } + + /* Look for the datagram the fragment belongs to in the current datagram queue, + * remembering the previous in the queue for later dequeueing. */ + for (ipr = reassdatagrams; ipr != NULL; ipr = ipr->next) { + /* Check if the incoming fragment matches the one currently present + in the reassembly buffer. If so, we proceed with copying the + fragment into the buffer. */ + if (IP_ADDRESSES_AND_ID_MATCH(&ipr->iphdr, fraghdr)) { + LWIP_DEBUGF(IP_REASS_DEBUG, ("ip_reass: matching previous fragment ID=%"X16_F"\n", + ntohs(IPH_ID(fraghdr)))); + IPFRAG_STATS_INC(ip_frag.cachehit); + break; + } + ipr_prev = ipr; + } + + if (ipr == NULL) { + /* Enqueue a new datagram into the datagram queue */ + ipr = ip_reass_enqueue_new_datagram(fraghdr, clen); + /* Bail if unable to enqueue */ + if(ipr == NULL) { + goto nullreturn; + } + } else { + if (((ntohs(IPH_OFFSET(fraghdr)) & IP_OFFMASK) == 0) && + ((ntohs(IPH_OFFSET(&ipr->iphdr)) & IP_OFFMASK) != 0)) { + /* ipr->iphdr is not the header from the first fragment, but fraghdr is + * -> copy fraghdr into ipr->iphdr since we want to have the header + * of the first fragment (for ICMP time exceeded and later, for copying + * all options, if supported)*/ + SMEMCPY(&ipr->iphdr, fraghdr, IP_HLEN); + } + } + /* Track the current number of pbufs current 'in-flight', in order to limit + the number of fragments that may be enqueued at any one time */ + ip_reass_pbufcount += clen; + + /* At this point, we have either created a new entry or pointing + * to an existing one */ + + /* check for 'no more fragments', and update queue entry*/ + if ((ntohs(IPH_OFFSET(fraghdr)) & IP_MF) == 0) { + ipr->flags |= IP_REASS_FLAG_LASTFRAG; + ipr->datagram_len = offset + len; + LWIP_DEBUGF(IP_REASS_DEBUG, + ("ip_reass: last fragment seen, total len %"S16_F"\n", + ipr->datagram_len)); + } + /* find the right place to insert this pbuf */ + /* @todo: trim pbufs if fragments are overlapping */ + if (ip_reass_chain_frag_into_datagram_and_validate(ipr, p)) { + /* the totally last fragment (flag more fragments = 0) was received at least + * once AND all fragments are received */ + ipr->datagram_len += IP_HLEN; + + /* save the second pbuf before copying the header over the pointer */ + r = ((struct ip_reass_helper*)ipr->p->payload)->next_pbuf; + + /* copy the original ip header back to the first pbuf */ + fraghdr = (struct ip_hdr*)(ipr->p->payload); + SMEMCPY(fraghdr, &ipr->iphdr, IP_HLEN); + IPH_LEN_SET(fraghdr, htons(ipr->datagram_len)); + IPH_OFFSET_SET(fraghdr, 0); + IPH_CHKSUM_SET(fraghdr, 0); + /* @todo: do we need to set calculate the correct checksum? */ + IPH_CHKSUM_SET(fraghdr, inet_chksum(fraghdr, IP_HLEN)); + + p = ipr->p; + + /* chain together the pbufs contained within the reass_data list. */ + while(r != NULL) { + iprh = (struct ip_reass_helper*)r->payload; + + /* hide the ip header for every succeding fragment */ + pbuf_header(r, -IP_HLEN); + pbuf_cat(p, r); + r = iprh->next_pbuf; + } + /* release the sources allocate for the fragment queue entry */ + ip_reass_dequeue_datagram(ipr, ipr_prev); + + /* and adjust the number of pbufs currently queued for reassembly. */ + ip_reass_pbufcount -= pbuf_clen(p); + + /* Return the pbuf chain */ + return p; + } + /* the datagram is not (yet?) reassembled completely */ + LWIP_DEBUGF(IP_REASS_DEBUG,("ip_reass_pbufcount: %d out\n", ip_reass_pbufcount)); + return NULL; + +nullreturn: + LWIP_DEBUGF(IP_REASS_DEBUG,("ip_reass: nullreturn\n")); + IPFRAG_STATS_INC(ip_frag.drop); + pbuf_free(p); + return NULL; +} +#endif /* IP_REASSEMBLY */ + +#if IP_FRAG +#if IP_FRAG_USES_STATIC_BUF +static u8_t buf[LWIP_MEM_ALIGN_SIZE(IP_FRAG_MAX_MTU + MEM_ALIGNMENT - 1)]; +#endif /* IP_FRAG_USES_STATIC_BUF */ + +/** + * Fragment an IP datagram if too large for the netif. + * + * Chop the datagram in MTU sized chunks and send them in order + * by using a fixed size static memory buffer (PBUF_REF) or + * point PBUF_REFs into p (depending on IP_FRAG_USES_STATIC_BUF). + * + * @param p ip packet to send + * @param netif the netif on which to send + * @param dest destination ip address to which to send + * + * @return ERR_OK if sent successfully, err_t otherwise + */ +err_t +ip_frag(struct pbuf *p, struct netif *netif, struct ip_addr *dest) +{ + struct pbuf *rambuf; +#if IP_FRAG_USES_STATIC_BUF + struct pbuf *header; +#else + struct pbuf *newpbuf; + struct ip_hdr *original_iphdr; +#endif + struct ip_hdr *iphdr; + u16_t nfb; + u16_t left, cop; + u16_t mtu = netif->mtu; + u16_t ofo, omf; + u16_t last; + u16_t poff = IP_HLEN; + u16_t tmp; +#if !IP_FRAG_USES_STATIC_BUF + u16_t newpbuflen = 0; + u16_t left_to_copy; +#endif + + /* Get a RAM based MTU sized pbuf */ +#if IP_FRAG_USES_STATIC_BUF + /* When using a static buffer, we use a PBUF_REF, which we will + * use to reference the packet (without link header). + * Layer and length is irrelevant. + */ + rambuf = pbuf_alloc(PBUF_LINK, 0, PBUF_REF); + if (rambuf == NULL) { + LWIP_DEBUGF(IP_REASS_DEBUG, ("ip_frag: pbuf_alloc(PBUF_LINK, 0, PBUF_REF) failed\n")); + return ERR_MEM; + } + rambuf->tot_len = rambuf->len = mtu; + rambuf->payload = LWIP_MEM_ALIGN((void *)buf); + + /* Copy the IP header in it */ + iphdr = rambuf->payload; + SMEMCPY(iphdr, p->payload, IP_HLEN); +#else /* IP_FRAG_USES_STATIC_BUF */ + original_iphdr = p->payload; + iphdr = original_iphdr; +#endif /* IP_FRAG_USES_STATIC_BUF */ + + /* Save original offset */ + tmp = ntohs(IPH_OFFSET(iphdr)); + ofo = tmp & IP_OFFMASK; + omf = tmp & IP_MF; + + left = p->tot_len - IP_HLEN; + + nfb = (mtu - IP_HLEN) / 8; + + while (left) { + last = (left <= mtu - IP_HLEN); + + /* Set new offset and MF flag */ + tmp = omf | (IP_OFFMASK & (ofo)); + if (!last) + tmp = tmp | IP_MF; + + /* Fill this fragment */ + cop = last ? left : nfb * 8; + +#if IP_FRAG_USES_STATIC_BUF + poff += pbuf_copy_partial(p, (u8_t*)iphdr + IP_HLEN, cop, poff); +#else /* IP_FRAG_USES_STATIC_BUF */ + /* When not using a static buffer, create a chain of pbufs. + * The first will be a PBUF_RAM holding the link and IP header. + * The rest will be PBUF_REFs mirroring the pbuf chain to be fragged, + * but limited to the size of an mtu. + */ + rambuf = pbuf_alloc(PBUF_LINK, IP_HLEN, PBUF_RAM); + if (rambuf == NULL) { + return ERR_MEM; + } + LWIP_ASSERT("this needs a pbuf in one piece!", + (p->len >= (IP_HLEN))); + SMEMCPY(rambuf->payload, original_iphdr, IP_HLEN); + iphdr = rambuf->payload; + + /* Can just adjust p directly for needed offset. */ + p->payload = (u8_t *)p->payload + poff; + p->len -= poff; + + left_to_copy = cop; + while (left_to_copy) { + newpbuflen = (left_to_copy < p->len) ? left_to_copy : p->len; + /* Is this pbuf already empty? */ + if (!newpbuflen) { + p = p->next; + continue; + } + newpbuf = pbuf_alloc(PBUF_RAW, 0, PBUF_REF); + if (newpbuf == NULL) { + pbuf_free(rambuf); + return ERR_MEM; + } + /* Mirror this pbuf, although we might not need all of it. */ + newpbuf->payload = p->payload; + newpbuf->len = newpbuf->tot_len = newpbuflen; + /* Add it to end of rambuf's chain, but using pbuf_cat, not pbuf_chain + * so that it is removed when pbuf_dechain is later called on rambuf. + */ + pbuf_cat(rambuf, newpbuf); + left_to_copy -= newpbuflen; + if (left_to_copy) + p = p->next; + } + poff = newpbuflen; +#endif /* IP_FRAG_USES_STATIC_BUF */ + + /* Correct header */ + IPH_OFFSET_SET(iphdr, htons(tmp)); + IPH_LEN_SET(iphdr, htons(cop + IP_HLEN)); + IPH_CHKSUM_SET(iphdr, 0); + IPH_CHKSUM_SET(iphdr, inet_chksum(iphdr, IP_HLEN)); + +#if IP_FRAG_USES_STATIC_BUF + if (last) + pbuf_realloc(rambuf, left + IP_HLEN); + + /* This part is ugly: we alloc a RAM based pbuf for + * the link level header for each chunk and then + * free it.A PBUF_ROM style pbuf for which pbuf_header + * worked would make things simpler. + */ + header = pbuf_alloc(PBUF_LINK, 0, PBUF_RAM); + if (header != NULL) { + pbuf_chain(header, rambuf); + netif->output(netif, header, dest); + IPFRAG_STATS_INC(ip_frag.xmit); + snmp_inc_ipfragcreates(); + pbuf_free(header); + } else { + LWIP_DEBUGF(IP_REASS_DEBUG, ("ip_frag: pbuf_alloc() for header failed\n")); + pbuf_free(rambuf); + return ERR_MEM; + } +#else /* IP_FRAG_USES_STATIC_BUF */ + /* No need for separate header pbuf - we allowed room for it in rambuf + * when allocated. + */ + netif->output(netif, rambuf, dest); + IPFRAG_STATS_INC(ip_frag.xmit); + + /* Unfortunately we can't reuse rambuf - the hardware may still be + * using the buffer. Instead we free it (and the ensuing chain) and + * recreate it next time round the loop. If we're lucky the hardware + * will have already sent the packet, the free will really free, and + * there will be zero memory penalty. + */ + + pbuf_free(rambuf); +#endif /* IP_FRAG_USES_STATIC_BUF */ + left -= cop; + ofo += nfb; + } +#if IP_FRAG_USES_STATIC_BUF + pbuf_free(rambuf); +#endif /* IP_FRAG_USES_STATIC_BUF */ + snmp_inc_ipfragoks(); + return ERR_OK; +} +#endif /* IP_FRAG */ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/mem.c b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/mem.c new file mode 100644 index 000000000..ea3f4a6cd --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/mem.c @@ -0,0 +1,635 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * Dynamic memory manager + * + * This is a lightweight replacement for the standard C library malloc(). + * + * If you want to use the standard C library malloc() instead, define + * MEM_LIBC_MALLOC to 1 in your lwipopts.h + * + * To let mem_malloc() use pools (prevents fragmentation and is much faster than + * a heap but might waste some memory), define MEM_USE_POOLS to 1, define + * MEM_USE_CUSTOM_POOLS to 1 and create a file "lwippools.h" that includes a list + * of pools like this (more pools can be added between _START and _END): + * + * Define three pools with sizes 256, 512, and 1512 bytes + * LWIP_MALLOC_MEMPOOL_START + * LWIP_MALLOC_MEMPOOL(20, 256) + * LWIP_MALLOC_MEMPOOL(10, 512) + * LWIP_MALLOC_MEMPOOL(5, 1512) + * LWIP_MALLOC_MEMPOOL_END + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * Simon Goldschmidt + * + */ + +#include "lwip/opt.h" + +#if !MEM_LIBC_MALLOC /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/def.h" +#include "lwip/mem.h" +#include "lwip/sys.h" +#include "lwip/stats.h" + +#include + +#if MEM_USE_POOLS +/* lwIP head implemented with different sized pools */ + +/** + * Allocate memory: determine the smallest pool that is big enough + * to contain an element of 'size' and get an element from that pool. + * + * @param size the size in bytes of the memory needed + * @return a pointer to the allocated memory or NULL if the pool is empty + */ +void * +mem_malloc(mem_size_t size) +{ + struct memp_malloc_helper *element; + memp_t poolnr; + mem_size_t required_size = size + sizeof(struct memp_malloc_helper); + + for (poolnr = MEMP_POOL_FIRST; poolnr <= MEMP_POOL_LAST; poolnr++) { +#if MEM_USE_POOLS_TRY_BIGGER_POOL +again: +#endif /* MEM_USE_POOLS_TRY_BIGGER_POOL */ + /* is this pool big enough to hold an element of the required size + plus a struct memp_malloc_helper that saves the pool this element came from? */ + if (required_size <= memp_sizes[poolnr]) { + break; + } + } + if (poolnr > MEMP_POOL_LAST) { + LWIP_ASSERT("mem_malloc(): no pool is that big!", 0); + return NULL; + } + element = (struct memp_malloc_helper*)memp_malloc(poolnr); + if (element == NULL) { + /* No need to DEBUGF or ASSERT: This error is already + taken care of in memp.c */ +#if MEM_USE_POOLS_TRY_BIGGER_POOL + /** Try a bigger pool if this one is empty! */ + if (poolnr < MEMP_POOL_LAST) { + poolnr++; + goto again; + } +#endif /* MEM_USE_POOLS_TRY_BIGGER_POOL */ + return NULL; + } + + /* save the pool number this element came from */ + element->poolnr = poolnr; + /* and return a pointer to the memory directly after the struct memp_malloc_helper */ + element++; + + return element; +} + +/** + * Free memory previously allocated by mem_malloc. Loads the pool number + * and calls memp_free with that pool number to put the element back into + * its pool + * + * @param rmem the memory element to free + */ +void +mem_free(void *rmem) +{ + struct memp_malloc_helper *hmem = (struct memp_malloc_helper*)rmem; + + LWIP_ASSERT("rmem != NULL", (rmem != NULL)); + LWIP_ASSERT("rmem == MEM_ALIGN(rmem)", (rmem == LWIP_MEM_ALIGN(rmem))); + + /* get the original struct memp_malloc_helper */ + hmem--; + + LWIP_ASSERT("hmem != NULL", (hmem != NULL)); + LWIP_ASSERT("hmem == MEM_ALIGN(hmem)", (hmem == LWIP_MEM_ALIGN(hmem))); + LWIP_ASSERT("hmem->poolnr < MEMP_MAX", (hmem->poolnr < MEMP_MAX)); + + /* and put it in the pool we saved earlier */ + memp_free(hmem->poolnr, hmem); +} + +#else /* MEM_USE_POOLS */ +/* lwIP replacement for your libc malloc() */ + +/** + * The heap is made up as a list of structs of this type. + * This does not have to be aligned since for getting its size, + * we only use the macro SIZEOF_STRUCT_MEM, which automatically alignes. + */ +struct mem { + /** index (-> ram[next]) of the next struct */ + mem_size_t next; + /** index (-> ram[next]) of the next struct */ + mem_size_t prev; + /** 1: this area is used; 0: this area is unused */ + u8_t used; +}; + +/** All allocated blocks will be MIN_SIZE bytes big, at least! + * MIN_SIZE can be overridden to suit your needs. Smaller values save space, + * larger values could prevent too small blocks to fragment the RAM too much. */ +#ifndef MIN_SIZE +#define MIN_SIZE 12 +#endif /* MIN_SIZE */ +/* some alignment macros: we define them here for better source code layout */ +#define MIN_SIZE_ALIGNED LWIP_MEM_ALIGN_SIZE(MIN_SIZE) +#define SIZEOF_STRUCT_MEM LWIP_MEM_ALIGN_SIZE(sizeof(struct mem)) +#define MEM_SIZE_ALIGNED LWIP_MEM_ALIGN_SIZE(MEM_SIZE) + +/** the heap. we need one struct mem at the end and some room for alignment */ +static u8_t ram_heap[MEM_SIZE_ALIGNED + (2*SIZEOF_STRUCT_MEM) + MEM_ALIGNMENT]; +/** pointer to the heap (ram_heap): for alignment, ram is now a pointer instead of an array */ +static u8_t *ram; +/** the last entry, always unused! */ +static struct mem *ram_end; +/** pointer to the lowest free block, this is used for faster search */ +static struct mem *lfree; + +/** concurrent access protection */ +static sys_sem_t mem_sem; + +#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT + +static volatile u8_t mem_free_count; + +/* Allow mem_free from other (e.g. interrupt) context */ +#define LWIP_MEM_FREE_DECL_PROTECT() SYS_ARCH_DECL_PROTECT(lev_free) +#define LWIP_MEM_FREE_PROTECT() SYS_ARCH_PROTECT(lev_free) +#define LWIP_MEM_FREE_UNPROTECT() SYS_ARCH_UNPROTECT(lev_free) +#define LWIP_MEM_ALLOC_DECL_PROTECT() SYS_ARCH_DECL_PROTECT(lev_alloc) +#define LWIP_MEM_ALLOC_PROTECT() SYS_ARCH_PROTECT(lev_alloc) +#define LWIP_MEM_ALLOC_UNPROTECT() SYS_ARCH_UNPROTECT(lev_alloc) + +#else /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ + +/* Protect the heap only by using a semaphore */ +#define LWIP_MEM_FREE_DECL_PROTECT() +#define LWIP_MEM_FREE_PROTECT() sys_arch_sem_wait(mem_sem, 0) +#define LWIP_MEM_FREE_UNPROTECT() sys_sem_signal(mem_sem) +/* mem_malloc is protected using semaphore AND LWIP_MEM_ALLOC_PROTECT */ +#define LWIP_MEM_ALLOC_DECL_PROTECT() +#define LWIP_MEM_ALLOC_PROTECT() +#define LWIP_MEM_ALLOC_UNPROTECT() + +#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ + + +/** + * "Plug holes" by combining adjacent empty struct mems. + * After this function is through, there should not exist + * one empty struct mem pointing to another empty struct mem. + * + * @param mem this points to a struct mem which just has been freed + * @internal this function is only called by mem_free() and mem_realloc() + * + * This assumes access to the heap is protected by the calling function + * already. + */ +static void +plug_holes(struct mem *mem) +{ + struct mem *nmem; + struct mem *pmem; + + LWIP_ASSERT("plug_holes: mem >= ram", (u8_t *)mem >= ram); + LWIP_ASSERT("plug_holes: mem < ram_end", (u8_t *)mem < (u8_t *)ram_end); + LWIP_ASSERT("plug_holes: mem->used == 0", mem->used == 0); + + /* plug hole forward */ + LWIP_ASSERT("plug_holes: mem->next <= MEM_SIZE_ALIGNED", mem->next <= MEM_SIZE_ALIGNED); + + nmem = (struct mem *)&ram[mem->next]; + if (mem != nmem && nmem->used == 0 && (u8_t *)nmem != (u8_t *)ram_end) { + /* if mem->next is unused and not end of ram, combine mem and mem->next */ + if (lfree == nmem) { + lfree = mem; + } + mem->next = nmem->next; + ((struct mem *)&ram[nmem->next])->prev = (u8_t *)mem - ram; + } + + /* plug hole backward */ + pmem = (struct mem *)&ram[mem->prev]; + if (pmem != mem && pmem->used == 0) { + /* if mem->prev is unused, combine mem and mem->prev */ + if (lfree == mem) { + lfree = pmem; + } + pmem->next = mem->next; + ((struct mem *)&ram[mem->next])->prev = (u8_t *)pmem - ram; + } +} + +/** + * Zero the heap and initialize start, end and lowest-free + */ +void +mem_init(void) +{ + struct mem *mem; + + LWIP_ASSERT("Sanity check alignment", + (SIZEOF_STRUCT_MEM & (MEM_ALIGNMENT-1)) == 0); + + /* align the heap */ + ram = LWIP_MEM_ALIGN(ram_heap); + /* initialize the start of the heap */ + mem = (struct mem *)ram; + mem->next = MEM_SIZE_ALIGNED; + mem->prev = 0; + mem->used = 0; + /* initialize the end of the heap */ + ram_end = (struct mem *)&ram[MEM_SIZE_ALIGNED]; + ram_end->used = 1; + ram_end->next = MEM_SIZE_ALIGNED; + ram_end->prev = MEM_SIZE_ALIGNED; + + mem_sem = sys_sem_new(1); + + /* initialize the lowest-free pointer to the start of the heap */ + lfree = (struct mem *)ram; + + MEM_STATS_AVAIL(avail, MEM_SIZE_ALIGNED); +} + +/** + * Put a struct mem back on the heap + * + * @param rmem is the data portion of a struct mem as returned by a previous + * call to mem_malloc() + */ +void +mem_free(void *rmem) +{ + struct mem *mem; + LWIP_MEM_FREE_DECL_PROTECT(); + + if (rmem == NULL) { + LWIP_DEBUGF(MEM_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("mem_free(p == NULL) was called.\n")); + return; + } + LWIP_ASSERT("mem_free: sanity check alignment", (((mem_ptr_t)rmem) & (MEM_ALIGNMENT-1)) == 0); + + LWIP_ASSERT("mem_free: legal memory", (u8_t *)rmem >= (u8_t *)ram && + (u8_t *)rmem < (u8_t *)ram_end); + + if ((u8_t *)rmem < (u8_t *)ram || (u8_t *)rmem >= (u8_t *)ram_end) { + SYS_ARCH_DECL_PROTECT(lev); + LWIP_DEBUGF(MEM_DEBUG | LWIP_DBG_LEVEL_SEVERE, ("mem_free: illegal memory\n")); + /* protect mem stats from concurrent access */ + SYS_ARCH_PROTECT(lev); + MEM_STATS_INC(illegal); + SYS_ARCH_UNPROTECT(lev); + return; + } + /* protect the heap from concurrent access */ + LWIP_MEM_FREE_PROTECT(); + /* Get the corresponding struct mem ... */ + mem = (struct mem *)((u8_t *)rmem - SIZEOF_STRUCT_MEM); + /* ... which has to be in a used state ... */ + LWIP_ASSERT("mem_free: mem->used", mem->used); + /* ... and is now unused. */ + mem->used = 0; + + if (mem < lfree) { + /* the newly freed struct is now the lowest */ + lfree = mem; + } + + MEM_STATS_DEC_USED(used, mem->next - ((u8_t *)mem - ram)); + + /* finally, see if prev or next are free also */ + plug_holes(mem); +#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT + mem_free_count = 1; +#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ + LWIP_MEM_FREE_UNPROTECT(); +} + +/** + * In contrast to its name, mem_realloc can only shrink memory, not expand it. + * Since the only use (for now) is in pbuf_realloc (which also can only shrink), + * this shouldn't be a problem! + * + * @param rmem pointer to memory allocated by mem_malloc the is to be shrinked + * @param newsize required size after shrinking (needs to be smaller than or + * equal to the previous size) + * @return for compatibility reasons: is always == rmem, at the moment + * or NULL if newsize is > old size, in which case rmem is NOT touched + * or freed! + */ +void * +mem_realloc(void *rmem, mem_size_t newsize) +{ + mem_size_t size; + mem_size_t ptr, ptr2; + struct mem *mem, *mem2; + /* use the FREE_PROTECT here: it protects with sem OR SYS_ARCH_PROTECT */ + LWIP_MEM_FREE_DECL_PROTECT(); + + /* Expand the size of the allocated memory region so that we can + adjust for alignment. */ + newsize = LWIP_MEM_ALIGN_SIZE(newsize); + + if(newsize < MIN_SIZE_ALIGNED) { + /* every data block must be at least MIN_SIZE_ALIGNED long */ + newsize = MIN_SIZE_ALIGNED; + } + + if (newsize > MEM_SIZE_ALIGNED) { + return NULL; + } + + LWIP_ASSERT("mem_realloc: legal memory", (u8_t *)rmem >= (u8_t *)ram && + (u8_t *)rmem < (u8_t *)ram_end); + + if ((u8_t *)rmem < (u8_t *)ram || (u8_t *)rmem >= (u8_t *)ram_end) { + SYS_ARCH_DECL_PROTECT(lev); + LWIP_DEBUGF(MEM_DEBUG | LWIP_DBG_LEVEL_SEVERE, ("mem_realloc: illegal memory\n")); + /* protect mem stats from concurrent access */ + SYS_ARCH_PROTECT(lev); + MEM_STATS_INC(illegal); + SYS_ARCH_UNPROTECT(lev); + return rmem; + } + /* Get the corresponding struct mem ... */ + mem = (struct mem *)((u8_t *)rmem - SIZEOF_STRUCT_MEM); + /* ... and its offset pointer */ + ptr = (u8_t *)mem - ram; + + size = mem->next - ptr - SIZEOF_STRUCT_MEM; + LWIP_ASSERT("mem_realloc can only shrink memory", newsize <= size); + if (newsize > size) { + /* not supported */ + return NULL; + } + if (newsize == size) { + /* No change in size, simply return */ + return rmem; + } + + /* protect the heap from concurrent access */ + LWIP_MEM_FREE_PROTECT(); + + MEM_STATS_DEC_USED(used, (size - newsize)); + + mem2 = (struct mem *)&ram[mem->next]; + if(mem2->used == 0) { + /* The next struct is unused, we can simply move it at little */ + mem_size_t next; + /* remember the old next pointer */ + next = mem2->next; + /* create new struct mem which is moved directly after the shrinked mem */ + ptr2 = ptr + SIZEOF_STRUCT_MEM + newsize; + if (lfree == mem2) { + lfree = (struct mem *)&ram[ptr2]; + } + mem2 = (struct mem *)&ram[ptr2]; + mem2->used = 0; + /* restore the next pointer */ + mem2->next = next; + /* link it back to mem */ + mem2->prev = ptr; + /* link mem to it */ + mem->next = ptr2; + /* last thing to restore linked list: as we have moved mem2, + * let 'mem2->next->prev' point to mem2 again. but only if mem2->next is not + * the end of the heap */ + if (mem2->next != MEM_SIZE_ALIGNED) { + ((struct mem *)&ram[mem2->next])->prev = ptr2; + } + /* no need to plug holes, we've already done that */ + } else if (newsize + SIZEOF_STRUCT_MEM + MIN_SIZE_ALIGNED <= size) { + /* Next struct is used but there's room for another struct mem with + * at least MIN_SIZE_ALIGNED of data. + * Old size ('size') must be big enough to contain at least 'newsize' plus a struct mem + * ('SIZEOF_STRUCT_MEM') with some data ('MIN_SIZE_ALIGNED'). + * @todo we could leave out MIN_SIZE_ALIGNED. We would create an empty + * region that couldn't hold data, but when mem->next gets freed, + * the 2 regions would be combined, resulting in more free memory */ + ptr2 = ptr + SIZEOF_STRUCT_MEM + newsize; + mem2 = (struct mem *)&ram[ptr2]; + if (mem2 < lfree) { + lfree = mem2; + } + mem2->used = 0; + mem2->next = mem->next; + mem2->prev = ptr; + mem->next = ptr2; + if (mem2->next != MEM_SIZE_ALIGNED) { + ((struct mem *)&ram[mem2->next])->prev = ptr2; + } + /* the original mem->next is used, so no need to plug holes! */ + } + /* else { + next struct mem is used but size between mem and mem2 is not big enough + to create another struct mem + -> don't do anyhting. + -> the remaining space stays unused since it is too small + } */ +#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT + mem_free_count = 1; +#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ + LWIP_MEM_FREE_UNPROTECT(); + return rmem; +} + +/** + * Adam's mem_malloc() plus solution for bug #17922 + * Allocate a block of memory with a minimum of 'size' bytes. + * + * @param size is the minimum size of the requested block in bytes. + * @return pointer to allocated memory or NULL if no free memory was found. + * + * Note that the returned value will always be aligned (as defined by MEM_ALIGNMENT). + */ +void * +mem_malloc(mem_size_t size) +{ + mem_size_t ptr, ptr2; + struct mem *mem, *mem2; +#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT + u8_t local_mem_free_count = 0; +#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ + LWIP_MEM_ALLOC_DECL_PROTECT(); + + if (size == 0) { + return NULL; + } + + /* Expand the size of the allocated memory region so that we can + adjust for alignment. */ + size = LWIP_MEM_ALIGN_SIZE(size); + + if(size < MIN_SIZE_ALIGNED) { + /* every data block must be at least MIN_SIZE_ALIGNED long */ + size = MIN_SIZE_ALIGNED; + } + + if (size > MEM_SIZE_ALIGNED) { + return NULL; + } + + /* protect the heap from concurrent access */ + sys_arch_sem_wait(mem_sem, 0); + LWIP_MEM_ALLOC_PROTECT(); +#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT + /* run as long as a mem_free disturbed mem_malloc */ + do { + local_mem_free_count = 0; +#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ + + /* Scan through the heap searching for a free block that is big enough, + * beginning with the lowest free block. + */ + for (ptr = (u8_t *)lfree - ram; ptr < MEM_SIZE_ALIGNED - size; + ptr = ((struct mem *)&ram[ptr])->next) { + mem = (struct mem *)&ram[ptr]; +#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT + mem_free_count = 0; + LWIP_MEM_ALLOC_UNPROTECT(); + /* allow mem_free to run */ + LWIP_MEM_ALLOC_PROTECT(); + if (mem_free_count != 0) { + local_mem_free_count = mem_free_count; + } + mem_free_count = 0; +#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ + + if ((!mem->used) && + (mem->next - (ptr + SIZEOF_STRUCT_MEM)) >= size) { + /* mem is not used and at least perfect fit is possible: + * mem->next - (ptr + SIZEOF_STRUCT_MEM) gives us the 'user data size' of mem */ + + if (mem->next - (ptr + SIZEOF_STRUCT_MEM) >= (size + SIZEOF_STRUCT_MEM + MIN_SIZE_ALIGNED)) { + /* (in addition to the above, we test if another struct mem (SIZEOF_STRUCT_MEM) containing + * at least MIN_SIZE_ALIGNED of data also fits in the 'user data space' of 'mem') + * -> split large block, create empty remainder, + * remainder must be large enough to contain MIN_SIZE_ALIGNED data: if + * mem->next - (ptr + (2*SIZEOF_STRUCT_MEM)) == size, + * struct mem would fit in but no data between mem2 and mem2->next + * @todo we could leave out MIN_SIZE_ALIGNED. We would create an empty + * region that couldn't hold data, but when mem->next gets freed, + * the 2 regions would be combined, resulting in more free memory + */ + ptr2 = ptr + SIZEOF_STRUCT_MEM + size; + /* create mem2 struct */ + mem2 = (struct mem *)&ram[ptr2]; + mem2->used = 0; + mem2->next = mem->next; + mem2->prev = ptr; + /* and insert it between mem and mem->next */ + mem->next = ptr2; + mem->used = 1; + + if (mem2->next != MEM_SIZE_ALIGNED) { + ((struct mem *)&ram[mem2->next])->prev = ptr2; + } + MEM_STATS_INC_USED(used, (size + SIZEOF_STRUCT_MEM)); + } else { + /* (a mem2 struct does no fit into the user data space of mem and mem->next will always + * be used at this point: if not we have 2 unused structs in a row, plug_holes should have + * take care of this). + * -> near fit or excact fit: do not split, no mem2 creation + * also can't move mem->next directly behind mem, since mem->next + * will always be used at this point! + */ + mem->used = 1; + MEM_STATS_INC_USED(used, mem->next - ((u8_t *)mem - ram)); + } + + if (mem == lfree) { + /* Find next free block after mem and update lowest free pointer */ + while (lfree->used && lfree != ram_end) { + LWIP_MEM_ALLOC_UNPROTECT(); + /* prevent high interrupt latency... */ + LWIP_MEM_ALLOC_PROTECT(); + lfree = (struct mem *)&ram[lfree->next]; + } + LWIP_ASSERT("mem_malloc: !lfree->used", ((lfree == ram_end) || (!lfree->used))); + } + LWIP_MEM_ALLOC_UNPROTECT(); + sys_sem_signal(mem_sem); + LWIP_ASSERT("mem_malloc: allocated memory not above ram_end.", + (mem_ptr_t)mem + SIZEOF_STRUCT_MEM + size <= (mem_ptr_t)ram_end); + LWIP_ASSERT("mem_malloc: allocated memory properly aligned.", + ((mem_ptr_t)mem + SIZEOF_STRUCT_MEM) % MEM_ALIGNMENT == 0); + LWIP_ASSERT("mem_malloc: sanity check alignment", + (((mem_ptr_t)mem) & (MEM_ALIGNMENT-1)) == 0); + + return (u8_t *)mem + SIZEOF_STRUCT_MEM; + } + } +#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT + /* if we got interrupted by a mem_free, try again */ + } while(local_mem_free_count != 0); +#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ + LWIP_DEBUGF(MEM_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("mem_malloc: could not allocate %"S16_F" bytes\n", (s16_t)size)); + MEM_STATS_INC(err); + LWIP_MEM_ALLOC_UNPROTECT(); + sys_sem_signal(mem_sem); + return NULL; +} + +#endif /* MEM_USE_POOLS */ +/** + * Contiguously allocates enough space for count objects that are size bytes + * of memory each and returns a pointer to the allocated memory. + * + * The allocated memory is filled with bytes of value zero. + * + * @param count number of objects to allocate + * @param size size of the objects to allocate + * @return pointer to allocated memory / NULL pointer if there is an error + */ +void *mem_calloc(mem_size_t count, mem_size_t size) +{ + void *p; + + /* allocate 'count' objects of size 'size' */ + p = mem_malloc(count * size); + if (p) { + /* zero the memory */ + memset(p, 0, count * size); + } + return p; +} + +#endif /* !MEM_LIBC_MALLOC */ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/memp.c b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/memp.c new file mode 100644 index 000000000..bd2fd26a8 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/memp.c @@ -0,0 +1,388 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * Dynamic pool memory manager + * + * lwIP has dedicated pools for many structures (netconn, protocol control blocks, + * packet buffers, ...). All these pools are managed here. + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#include "lwip/opt.h" + +#include "lwip/memp.h" +#include "lwip/pbuf.h" +#include "lwip/udp.h" +#include "lwip/raw.h" +#include "lwip/tcp.h" +#include "lwip/igmp.h" +#include "lwip/api.h" +#include "lwip/api_msg.h" +#include "lwip/tcpip.h" +#include "lwip/sys.h" +#include "lwip/stats.h" +#include "netif/etharp.h" +#include "lwip/ip_frag.h" + +#include + +#if !MEMP_MEM_MALLOC /* don't build if not configured for use in lwipopts.h */ + +struct memp { + struct memp *next; +#if MEMP_OVERFLOW_CHECK + const char *file; + int line; +#endif /* MEMP_OVERFLOW_CHECK */ +}; + +#if MEMP_OVERFLOW_CHECK +/* if MEMP_OVERFLOW_CHECK is turned on, we reserve some bytes at the beginning + * and at the end of each element, initialize them as 0xcd and check + * them later. */ +/* If MEMP_OVERFLOW_CHECK is >= 2, on every call to memp_malloc or memp_free, + * every single element in each pool is checked! + * This is VERY SLOW but also very helpful. */ +/* MEMP_SANITY_REGION_BEFORE and MEMP_SANITY_REGION_AFTER can be overridden in + * lwipopts.h to change the amount reserved for checking. */ +#ifndef MEMP_SANITY_REGION_BEFORE +#define MEMP_SANITY_REGION_BEFORE 16 +#endif /* MEMP_SANITY_REGION_BEFORE*/ +#if MEMP_SANITY_REGION_BEFORE > 0 +#define MEMP_SANITY_REGION_BEFORE_ALIGNED LWIP_MEM_ALIGN_SIZE(MEMP_SANITY_REGION_BEFORE) +#else +#define MEMP_SANITY_REGION_BEFORE_ALIGNED 0 +#endif /* MEMP_SANITY_REGION_BEFORE*/ +#ifndef MEMP_SANITY_REGION_AFTER +#define MEMP_SANITY_REGION_AFTER 16 +#endif /* MEMP_SANITY_REGION_AFTER*/ +#if MEMP_SANITY_REGION_AFTER > 0 +#define MEMP_SANITY_REGION_AFTER_ALIGNED LWIP_MEM_ALIGN_SIZE(MEMP_SANITY_REGION_AFTER) +#else +#define MEMP_SANITY_REGION_AFTER_ALIGNED 0 +#endif /* MEMP_SANITY_REGION_AFTER*/ + +/* MEMP_SIZE: save space for struct memp and for sanity check */ +#define MEMP_SIZE (LWIP_MEM_ALIGN_SIZE(sizeof(struct memp)) + MEMP_SANITY_REGION_BEFORE_ALIGNED) +#define MEMP_ALIGN_SIZE(x) (LWIP_MEM_ALIGN_SIZE(x) + MEMP_SANITY_REGION_AFTER_ALIGNED) + +#else /* MEMP_OVERFLOW_CHECK */ + +/* No sanity checks + * We don't need to preserve the struct memp while not allocated, so we + * can save a little space and set MEMP_SIZE to 0. + */ +#define MEMP_SIZE 0 +#define MEMP_ALIGN_SIZE(x) (LWIP_MEM_ALIGN_SIZE(x)) + +#endif /* MEMP_OVERFLOW_CHECK */ + +/** This array holds the first free element of each pool. + * Elements form a linked list. */ +static struct memp *memp_tab[MEMP_MAX]; + +#else /* MEMP_MEM_MALLOC */ + +#define MEMP_ALIGN_SIZE(x) (LWIP_MEM_ALIGN_SIZE(x)) + +#endif /* MEMP_MEM_MALLOC */ + +/** This array holds the element sizes of each pool. */ +#if !MEM_USE_POOLS && !MEMP_MEM_MALLOC +static +#endif +const u16_t memp_sizes[MEMP_MAX] = { +#define LWIP_MEMPOOL(name,num,size,desc) LWIP_MEM_ALIGN_SIZE(size), +#include "lwip/memp_std.h" +}; + +#if !MEMP_MEM_MALLOC /* don't build if not configured for use in lwipopts.h */ + +/** This array holds the number of elements in each pool. */ +static const u16_t memp_num[MEMP_MAX] = { +#define LWIP_MEMPOOL(name,num,size,desc) (num), +#include "lwip/memp_std.h" +}; + +/** This array holds a textual description of each pool. */ +#ifdef LWIP_DEBUG +static const char *memp_desc[MEMP_MAX] = { +#define LWIP_MEMPOOL(name,num,size,desc) (desc), +#include "lwip/memp_std.h" +}; +#endif /* LWIP_DEBUG */ + +/** This is the actual memory used by the pools. */ +static u8_t memp_memory[MEM_ALIGNMENT - 1 +#define LWIP_MEMPOOL(name,num,size,desc) + ( (num) * (MEMP_SIZE + MEMP_ALIGN_SIZE(size) ) ) +#include "lwip/memp_std.h" +]; + +#if MEMP_SANITY_CHECK +/** + * Check that memp-lists don't form a circle + */ +static int +memp_sanity(void) +{ + s16_t i, c; + struct memp *m, *n; + + for (i = 0; i < MEMP_MAX; i++) { + for (m = memp_tab[i]; m != NULL; m = m->next) { + c = 1; + for (n = memp_tab[i]; n != NULL; n = n->next) { + if (n == m && --c < 0) { + return 0; + } + } + } + } + return 1; +} +#endif /* MEMP_SANITY_CHECK*/ +#if MEMP_OVERFLOW_CHECK +/** + * Check if a memp element was victim of an overflow + * (e.g. the restricted area after it has been altered) + * + * @param p the memp element to check + * @param memp_size the element size of the pool p comes from + */ +static void +memp_overflow_check_element(struct memp *p, u16_t memp_size) +{ + u16_t k; + u8_t *m; +#if MEMP_SANITY_REGION_BEFORE_ALIGNED > 0 + m = (u8_t*)p + MEMP_SIZE - MEMP_SANITY_REGION_BEFORE_ALIGNED; + for (k = 0; k < MEMP_SANITY_REGION_BEFORE_ALIGNED; k++) { + if (m[k] != 0xcd) { + LWIP_ASSERT("detected memp underflow!", 0); + } + } +#endif +#if MEMP_SANITY_REGION_AFTER_ALIGNED > 0 + m = (u8_t*)p + MEMP_SIZE + memp_size; + for (k = 0; k < MEMP_SANITY_REGION_AFTER_ALIGNED; k++) { + if (m[k] != 0xcd) { + LWIP_ASSERT("detected memp overflow!", 0); + } + } +#endif +} + +/** + * Do an overflow check for all elements in every pool. + * + * @see memp_overflow_check_element for a description of the check + */ +static void +memp_overflow_check_all(void) +{ + u16_t i, j; + struct memp *p; + + p = LWIP_MEM_ALIGN(memp_memory); + for (i = 0; i < MEMP_MAX; ++i) { + p = p; + for (j = 0; j < memp_num[i]; ++j) { + memp_overflow_check_element(p, memp_sizes[i]); + p = (struct memp*)((u8_t*)p + MEMP_SIZE + memp_sizes[i] + MEMP_SANITY_REGION_AFTER_ALIGNED); + } + } +} + +/** + * Initialize the restricted areas of all memp elements in every pool. + */ +static void +memp_overflow_init(void) +{ + u16_t i, j; + struct memp *p; + u8_t *m; + + p = LWIP_MEM_ALIGN(memp_memory); + for (i = 0; i < MEMP_MAX; ++i) { + p = p; + for (j = 0; j < memp_num[i]; ++j) { +#if MEMP_SANITY_REGION_BEFORE_ALIGNED > 0 + m = (u8_t*)p + MEMP_SIZE - MEMP_SANITY_REGION_BEFORE_ALIGNED; + memset(m, 0xcd, MEMP_SANITY_REGION_BEFORE_ALIGNED); +#endif +#if MEMP_SANITY_REGION_AFTER_ALIGNED > 0 + m = (u8_t*)p + MEMP_SIZE + memp_sizes[i]; + memset(m, 0xcd, MEMP_SANITY_REGION_AFTER_ALIGNED); +#endif + p = (struct memp*)((u8_t*)p + MEMP_SIZE + memp_sizes[i] + MEMP_SANITY_REGION_AFTER_ALIGNED); + } + } +} +#endif /* MEMP_OVERFLOW_CHECK */ + +/** + * Initialize this module. + * + * Carves out memp_memory into linked lists for each pool-type. + */ +void +memp_init(void) +{ + struct memp *memp; + u16_t i, j; + + for (i = 0; i < MEMP_MAX; ++i) { + MEMP_STATS_AVAIL(used, i, 0); + MEMP_STATS_AVAIL(max, i, 0); + MEMP_STATS_AVAIL(err, i, 0); + MEMP_STATS_AVAIL(avail, i, memp_num[i]); + } + + memp = LWIP_MEM_ALIGN(memp_memory); + /* for every pool: */ + for (i = 0; i < MEMP_MAX; ++i) { + memp_tab[i] = NULL; + /* create a linked list of memp elements */ + for (j = 0; j < memp_num[i]; ++j) { + memp->next = memp_tab[i]; + memp_tab[i] = memp; + memp = (struct memp *)((u8_t *)memp + MEMP_SIZE + memp_sizes[i] +#if MEMP_OVERFLOW_CHECK + + MEMP_SANITY_REGION_AFTER_ALIGNED +#endif + ); + } + } +#if MEMP_OVERFLOW_CHECK + memp_overflow_init(); + /* check everything a first time to see if it worked */ + memp_overflow_check_all(); +#endif /* MEMP_OVERFLOW_CHECK */ +} + +/** + * Get an element from a specific pool. + * + * @param type the pool to get an element from + * + * the debug version has two more parameters: + * @param file file name calling this function + * @param line number of line where this function is called + * + * @return a pointer to the allocated memory or a NULL pointer on error + */ +void * +#if !MEMP_OVERFLOW_CHECK +memp_malloc(memp_t type) +#else +memp_malloc_fn(memp_t type, const char* file, const int line) +#endif +{ + struct memp *memp; + SYS_ARCH_DECL_PROTECT(old_level); + + LWIP_ERROR("memp_malloc: type < MEMP_MAX", (type < MEMP_MAX), return NULL;); + + SYS_ARCH_PROTECT(old_level); +#if MEMP_OVERFLOW_CHECK >= 2 + memp_overflow_check_all(); +#endif /* MEMP_OVERFLOW_CHECK >= 2 */ + + memp = memp_tab[type]; + + if (memp != NULL) { + memp_tab[type] = memp->next; +#if MEMP_OVERFLOW_CHECK + memp->next = NULL; + memp->file = file; + memp->line = line; +#endif /* MEMP_OVERFLOW_CHECK */ + MEMP_STATS_INC_USED(used, type); + LWIP_ASSERT("memp_malloc: memp properly aligned", + ((mem_ptr_t)memp % MEM_ALIGNMENT) == 0); + memp = (struct memp*)((u8_t*)memp + MEMP_SIZE); + } else { + LWIP_DEBUGF(MEMP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("memp_malloc: out of memory in pool %s\n", memp_desc[type])); + MEMP_STATS_INC(err, type); + } + + SYS_ARCH_UNPROTECT(old_level); + + return memp; +} + +/** + * Put an element back into its pool. + * + * @param type the pool where to put mem + * @param mem the memp element to free + */ +void +memp_free(memp_t type, void *mem) +{ + struct memp *memp; + SYS_ARCH_DECL_PROTECT(old_level); + + if (mem == NULL) { + return; + } + LWIP_ASSERT("memp_free: mem properly aligned", + ((mem_ptr_t)mem % MEM_ALIGNMENT) == 0); + + memp = (struct memp *)((u8_t*)mem - MEMP_SIZE); + + SYS_ARCH_PROTECT(old_level); +#if MEMP_OVERFLOW_CHECK +#if MEMP_OVERFLOW_CHECK >= 2 + memp_overflow_check_all(); +#else + memp_overflow_check_element(memp, memp_sizes[type]); +#endif /* MEMP_OVERFLOW_CHECK >= 2 */ +#endif /* MEMP_OVERFLOW_CHECK */ + + MEMP_STATS_DEC(used, type); + + memp->next = memp_tab[type]; + memp_tab[type] = memp; + +#if MEMP_SANITY_CHECK + LWIP_ASSERT("memp sanity", memp_sanity()); +#endif /* MEMP_SANITY_CHECK */ + + SYS_ARCH_UNPROTECT(old_level); +} + +#endif /* MEMP_MEM_MALLOC */ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/netif.c b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/netif.c new file mode 100644 index 000000000..cf3815c49 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/netif.c @@ -0,0 +1,683 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * lwIP network interface abstraction + * + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#include "lwip/opt.h" + +#include "lwip/def.h" +#include "lwip/ip_addr.h" +#include "lwip/netif.h" +#include "lwip/tcp.h" +#include "lwip/snmp.h" +#include "lwip/igmp.h" +#include "netif/etharp.h" +#if ENABLE_LOOPBACK +#include "lwip/sys.h" +#if LWIP_NETIF_LOOPBACK_MULTITHREADING +#include "lwip/tcpip.h" +#endif /* LWIP_NETIF_LOOPBACK_MULTITHREADING */ +#endif /* ENABLE_LOOPBACK */ + +#if LWIP_AUTOIP +#include "lwip/autoip.h" +#endif /* LWIP_AUTOIP */ +#if LWIP_DHCP +#include "lwip/dhcp.h" +#endif /* LWIP_DHCP */ + +#if LWIP_NETIF_STATUS_CALLBACK +#define NETIF_STATUS_CALLBACK(n) { if (n->status_callback) (n->status_callback)(n); } +#else +#define NETIF_STATUS_CALLBACK(n) { /* NOP */ } +#endif /* LWIP_NETIF_STATUS_CALLBACK */ + +#if LWIP_NETIF_LINK_CALLBACK +#define NETIF_LINK_CALLBACK(n) { if (n->link_callback) (n->link_callback)(n); } +#else +#define NETIF_LINK_CALLBACK(n) { /* NOP */ } +#endif /* LWIP_NETIF_LINK_CALLBACK */ + +struct netif *netif_list; +struct netif *netif_default; + +/** + * Add a network interface to the list of lwIP netifs. + * + * @param netif a pre-allocated netif structure + * @param ipaddr IP address for the new netif + * @param netmask network mask for the new netif + * @param gw default gateway IP address for the new netif + * @param state opaque data passed to the new netif + * @param init callback function that initializes the interface + * @param input callback function that is called to pass + * ingress packets up in the protocol layer stack. + * + * @return netif, or NULL if failed. + */ +struct netif * +netif_add(struct netif *netif, struct ip_addr *ipaddr, struct ip_addr *netmask, + struct ip_addr *gw, + void *state, + err_t (* init)(struct netif *netif), + err_t (* input)(struct pbuf *p, struct netif *netif)) +{ + static u8_t netifnum = 0; + + /* reset new interface configuration state */ + netif->ip_addr.addr = 0; + netif->netmask.addr = 0; + netif->gw.addr = 0; + netif->flags = 0; +#if LWIP_DHCP + /* netif not under DHCP control by default */ + netif->dhcp = NULL; +#endif /* LWIP_DHCP */ +#if LWIP_AUTOIP + /* netif not under AutoIP control by default */ + netif->autoip = NULL; +#endif /* LWIP_AUTOIP */ +#if LWIP_NETIF_STATUS_CALLBACK + netif->status_callback = NULL; +#endif /* LWIP_NETIF_STATUS_CALLBACK */ +#if LWIP_NETIF_LINK_CALLBACK + netif->link_callback = NULL; +#endif /* LWIP_NETIF_LINK_CALLBACK */ +#if LWIP_IGMP + netif->igmp_mac_filter = NULL; +#endif /* LWIP_IGMP */ +#if ENABLE_LOOPBACK + netif->loop_first = NULL; + netif->loop_last = NULL; +#endif /* ENABLE_LOOPBACK */ + + /* remember netif specific state information data */ + netif->state = state; + netif->num = netifnum++; + netif->input = input; +#if LWIP_NETIF_HWADDRHINT + netif->addr_hint = NULL; +#endif /* LWIP_NETIF_HWADDRHINT*/ +#if ENABLE_LOOPBACK && LWIP_LOOPBACK_MAX_PBUFS + netif->loop_cnt_current = 0; +#endif /* ENABLE_LOOPBACK && LWIP_LOOPBACK_MAX_PBUFS */ + + netif_set_addr(netif, ipaddr, netmask, gw); + + /* call user specified initialization function for netif */ + if (init(netif) != ERR_OK) { + return NULL; + } + + /* add this netif to the list */ + netif->next = netif_list; + netif_list = netif; + snmp_inc_iflist(); + +#if LWIP_IGMP + /* start IGMP processing */ + if (netif->flags & NETIF_FLAG_IGMP) { + igmp_start( netif); + } +#endif /* LWIP_IGMP */ + + LWIP_DEBUGF(NETIF_DEBUG, ("netif: added interface %c%c IP addr ", + netif->name[0], netif->name[1])); + ip_addr_debug_print(NETIF_DEBUG, ipaddr); + LWIP_DEBUGF(NETIF_DEBUG, (" netmask ")); + ip_addr_debug_print(NETIF_DEBUG, netmask); + LWIP_DEBUGF(NETIF_DEBUG, (" gw ")); + ip_addr_debug_print(NETIF_DEBUG, gw); + LWIP_DEBUGF(NETIF_DEBUG, ("\n")); + return netif; +} + +/** + * Change IP address configuration for a network interface (including netmask + * and default gateway). + * + * @param netif the network interface to change + * @param ipaddr the new IP address + * @param netmask the new netmask + * @param gw the new default gateway + */ +void +netif_set_addr(struct netif *netif, struct ip_addr *ipaddr, struct ip_addr *netmask, + struct ip_addr *gw) +{ + netif_set_ipaddr(netif, ipaddr); + netif_set_netmask(netif, netmask); + netif_set_gw(netif, gw); +} + +/** + * Remove a network interface from the list of lwIP netifs. + * + * @param netif the network interface to remove + */ +void netif_remove(struct netif * netif) +{ + if ( netif == NULL ) return; + +#if LWIP_IGMP + /* stop IGMP processing */ + if (netif->flags & NETIF_FLAG_IGMP) { + igmp_stop( netif); + } +#endif /* LWIP_IGMP */ + + snmp_delete_ipaddridx_tree(netif); + + /* is it the first netif? */ + if (netif_list == netif) { + netif_list = netif->next; + snmp_dec_iflist(); + } + else { + /* look for netif further down the list */ + struct netif * tmpNetif; + for (tmpNetif = netif_list; tmpNetif != NULL; tmpNetif = tmpNetif->next) { + if (tmpNetif->next == netif) { + tmpNetif->next = netif->next; + snmp_dec_iflist(); + break; + } + } + if (tmpNetif == NULL) + return; /* we didn't find any netif today */ + } + /* this netif is default? */ + if (netif_default == netif) + /* reset default netif */ + netif_set_default(NULL); + LWIP_DEBUGF( NETIF_DEBUG, ("netif_remove: removed netif\n") ); +} + +/** + * Find a network interface by searching for its name + * + * @param name the name of the netif (like netif->name) plus concatenated number + * in ascii representation (e.g. 'en0') + */ +struct netif * +netif_find(char *name) +{ + struct netif *netif; + u8_t num; + + if (name == NULL) { + return NULL; + } + + num = name[2] - '0'; + + for(netif = netif_list; netif != NULL; netif = netif->next) { + if (num == netif->num && + name[0] == netif->name[0] && + name[1] == netif->name[1]) { + LWIP_DEBUGF(NETIF_DEBUG, ("netif_find: found %c%c\n", name[0], name[1])); + return netif; + } + } + LWIP_DEBUGF(NETIF_DEBUG, ("netif_find: didn't find %c%c\n", name[0], name[1])); + return NULL; +} + +/** + * Change the IP address of a network interface + * + * @param netif the network interface to change + * @param ipaddr the new IP address + * + * @note call netif_set_addr() if you also want to change netmask and + * default gateway + */ +void +netif_set_ipaddr(struct netif *netif, struct ip_addr *ipaddr) +{ + /* TODO: Handling of obsolete pcbs */ + /* See: http://mail.gnu.org/archive/html/lwip-users/2003-03/msg00118.html */ +#if LWIP_TCP + struct tcp_pcb *pcb; + struct tcp_pcb_listen *lpcb; + + /* address is actually being changed? */ + if ((ip_addr_cmp(ipaddr, &(netif->ip_addr))) == 0) + { + /* extern struct tcp_pcb *tcp_active_pcbs; defined by tcp.h */ + LWIP_DEBUGF(NETIF_DEBUG | LWIP_DBG_STATE, ("netif_set_ipaddr: netif address being changed\n")); + pcb = tcp_active_pcbs; + while (pcb != NULL) { + /* PCB bound to current local interface address? */ + if (ip_addr_cmp(&(pcb->local_ip), &(netif->ip_addr))) { + /* this connection must be aborted */ + struct tcp_pcb *next = pcb->next; + LWIP_DEBUGF(NETIF_DEBUG | LWIP_DBG_STATE, ("netif_set_ipaddr: aborting TCP pcb %p\n", (void *)pcb)); + tcp_abort(pcb); + pcb = next; + } else { + pcb = pcb->next; + } + } + for (lpcb = tcp_listen_pcbs.listen_pcbs; lpcb != NULL; lpcb = lpcb->next) { + /* PCB bound to current local interface address? */ + if ((!(ip_addr_isany(&(lpcb->local_ip)))) && + (ip_addr_cmp(&(lpcb->local_ip), &(netif->ip_addr)))) { + /* The PCB is listening to the old ipaddr and + * is set to listen to the new one instead */ + ip_addr_set(&(lpcb->local_ip), ipaddr); + } + } + } +#endif + snmp_delete_ipaddridx_tree(netif); + snmp_delete_iprteidx_tree(0,netif); + /* set new IP address to netif */ + ip_addr_set(&(netif->ip_addr), ipaddr); + snmp_insert_ipaddridx_tree(netif); + snmp_insert_iprteidx_tree(0,netif); + + LWIP_DEBUGF(NETIF_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("netif: IP address of interface %c%c set to %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n", + netif->name[0], netif->name[1], + ip4_addr1(&netif->ip_addr), + ip4_addr2(&netif->ip_addr), + ip4_addr3(&netif->ip_addr), + ip4_addr4(&netif->ip_addr))); +} + +/** + * Change the default gateway for a network interface + * + * @param netif the network interface to change + * @param gw the new default gateway + * + * @note call netif_set_addr() if you also want to change ip address and netmask + */ +void +netif_set_gw(struct netif *netif, struct ip_addr *gw) +{ + ip_addr_set(&(netif->gw), gw); + LWIP_DEBUGF(NETIF_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("netif: GW address of interface %c%c set to %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n", + netif->name[0], netif->name[1], + ip4_addr1(&netif->gw), + ip4_addr2(&netif->gw), + ip4_addr3(&netif->gw), + ip4_addr4(&netif->gw))); +} + +/** + * Change the netmask of a network interface + * + * @param netif the network interface to change + * @param netmask the new netmask + * + * @note call netif_set_addr() if you also want to change ip address and + * default gateway + */ +void +netif_set_netmask(struct netif *netif, struct ip_addr *netmask) +{ + snmp_delete_iprteidx_tree(0, netif); + /* set new netmask to netif */ + ip_addr_set(&(netif->netmask), netmask); + snmp_insert_iprteidx_tree(0, netif); + LWIP_DEBUGF(NETIF_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("netif: netmask of interface %c%c set to %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n", + netif->name[0], netif->name[1], + ip4_addr1(&netif->netmask), + ip4_addr2(&netif->netmask), + ip4_addr3(&netif->netmask), + ip4_addr4(&netif->netmask))); +} + +/** + * Set a network interface as the default network interface + * (used to output all packets for which no specific route is found) + * + * @param netif the default network interface + */ +void +netif_set_default(struct netif *netif) +{ + if (netif == NULL) + { + /* remove default route */ + snmp_delete_iprteidx_tree(1, netif); + } + else + { + /* install default route */ + snmp_insert_iprteidx_tree(1, netif); + } + netif_default = netif; + LWIP_DEBUGF(NETIF_DEBUG, ("netif: setting default interface %c%c\n", + netif ? netif->name[0] : '\'', netif ? netif->name[1] : '\'')); +} + +/** + * Bring an interface up, available for processing + * traffic. + * + * @note: Enabling DHCP on a down interface will make it come + * up once configured. + * + * @see dhcp_start() + */ +void netif_set_up(struct netif *netif) +{ + if ( !(netif->flags & NETIF_FLAG_UP )) { + netif->flags |= NETIF_FLAG_UP; + +#if LWIP_SNMP + snmp_get_sysuptime(&netif->ts); +#endif /* LWIP_SNMP */ + + NETIF_LINK_CALLBACK(netif); + NETIF_STATUS_CALLBACK(netif); + +#if LWIP_ARP + /* For Ethernet network interfaces, we would like to send a "gratuitous ARP" */ + if (netif->flags & NETIF_FLAG_ETHARP) { + etharp_gratuitous(netif); + } +#endif /* LWIP_ARP */ + +#if LWIP_IGMP + /* resend IGMP memberships */ + if (netif->flags & NETIF_FLAG_IGMP) { + igmp_report_groups( netif); + } +#endif /* LWIP_IGMP */ + } +} + +/** + * Bring an interface down, disabling any traffic processing. + * + * @note: Enabling DHCP on a down interface will make it come + * up once configured. + * + * @see dhcp_start() + */ +void netif_set_down(struct netif *netif) +{ + if ( netif->flags & NETIF_FLAG_UP ) + { + netif->flags &= ~NETIF_FLAG_UP; +#if LWIP_SNMP + snmp_get_sysuptime(&netif->ts); +#endif + + NETIF_LINK_CALLBACK(netif); + NETIF_STATUS_CALLBACK(netif); + } +} + +/** + * Ask if an interface is up + */ +u8_t netif_is_up(struct netif *netif) +{ + return (netif->flags & NETIF_FLAG_UP)?1:0; +} + +#if LWIP_NETIF_STATUS_CALLBACK +/** + * Set callback to be called when interface is brought up/down + */ +void netif_set_status_callback(struct netif *netif, void (* status_callback)(struct netif *netif )) +{ + if ( netif ) + netif->status_callback = status_callback; +} +#endif /* LWIP_NETIF_STATUS_CALLBACK */ + +#if LWIP_NETIF_LINK_CALLBACK +/** + * Called by a driver when its link goes up + */ +void netif_set_link_up(struct netif *netif ) +{ + netif->flags |= NETIF_FLAG_LINK_UP; + +#if LWIP_DHCP + if (netif->dhcp) { + dhcp_network_changed(netif); + } +#endif /* LWIP_DHCP */ + +#if LWIP_AUTOIP + if (netif->autoip) { + autoip_network_changed(netif); + } +#endif /* LWIP_AUTOIP */ + + if (netif->flags & NETIF_FLAG_UP) { +#if LWIP_ARP + /* For Ethernet network interfaces, we would like to send a "gratuitous ARP" */ + if (netif->flags & NETIF_FLAG_ETHARP) { + etharp_gratuitous(netif); + } +#endif /* LWIP_ARP */ + +#if LWIP_IGMP + /* resend IGMP memberships */ + if (netif->flags & NETIF_FLAG_IGMP) { + igmp_report_groups( netif); + } +#endif /* LWIP_IGMP */ + } + NETIF_LINK_CALLBACK(netif); +} + +/** + * Called by a driver when its link goes down + */ +void netif_set_link_down(struct netif *netif ) +{ + netif->flags &= ~NETIF_FLAG_LINK_UP; + NETIF_LINK_CALLBACK(netif); +} + +/** + * Ask if a link is up + */ +u8_t netif_is_link_up(struct netif *netif) +{ + return (netif->flags & NETIF_FLAG_LINK_UP) ? 1 : 0; +} + +/** + * Set callback to be called when link is brought up/down + */ +void netif_set_link_callback(struct netif *netif, void (* link_callback)(struct netif *netif )) +{ + if (netif) { + netif->link_callback = link_callback; + } +} +#endif /* LWIP_NETIF_LINK_CALLBACK */ + +#if ENABLE_LOOPBACK +/** + * Send an IP packet to be received on the same netif (loopif-like). + * The pbuf is simply copied and handed back to netif->input. + * In multithreaded mode, this is done directly since netif->input must put + * the packet on a queue. + * In callback mode, the packet is put on an internal queue and is fed to + * netif->input by netif_poll(). + * + * @param netif the lwip network interface structure + * @param p the (IP) packet to 'send' + * @param ipaddr the ip address to send the packet to (not used) + * @return ERR_OK if the packet has been sent + * ERR_MEM if the pbuf used to copy the packet couldn't be allocated + */ +err_t +netif_loop_output(struct netif *netif, struct pbuf *p, + struct ip_addr *ipaddr) +{ + struct pbuf *r; + err_t err; + struct pbuf *last; +#if LWIP_LOOPBACK_MAX_PBUFS + u8_t clen = 0; +#endif /* LWIP_LOOPBACK_MAX_PBUFS */ + SYS_ARCH_DECL_PROTECT(lev); + LWIP_UNUSED_ARG(ipaddr); + + /* Allocate a new pbuf */ + r = pbuf_alloc(PBUF_LINK, p->tot_len, PBUF_RAM); + if (r == NULL) { + return ERR_MEM; + } +#if LWIP_LOOPBACK_MAX_PBUFS + clen = pbuf_clen(r); + /* check for overflow or too many pbuf on queue */ + if(((netif->loop_cnt_current + clen) < netif->loop_cnt_current) || + ((netif->loop_cnt_current + clen) > LWIP_LOOPBACK_MAX_PBUFS)) { + pbuf_free(r); + r = NULL; + return ERR_MEM; + } + netif->loop_cnt_current += clen; +#endif /* LWIP_LOOPBACK_MAX_PBUFS */ + + /* Copy the whole pbuf queue p into the single pbuf r */ + if ((err = pbuf_copy(r, p)) != ERR_OK) { + pbuf_free(r); + r = NULL; + return err; + } + + /* Put the packet on a linked list which gets emptied through calling + netif_poll(). */ + + /* let last point to the last pbuf in chain r */ + for (last = r; last->next != NULL; last = last->next); + + SYS_ARCH_PROTECT(lev); + if(netif->loop_first != NULL) { + LWIP_ASSERT("if first != NULL, last must also be != NULL", netif->loop_last != NULL); + netif->loop_last->next = r; + netif->loop_last = last; + } else { + netif->loop_first = r; + netif->loop_last = last; + } + SYS_ARCH_UNPROTECT(lev); + +#if LWIP_NETIF_LOOPBACK_MULTITHREADING + /* For multithreading environment, schedule a call to netif_poll */ + tcpip_callback((void (*)(void *))(netif_poll), netif); +#endif /* LWIP_NETIF_LOOPBACK_MULTITHREADING */ + + return ERR_OK; +} + +/** + * Call netif_poll() in the main loop of your application. This is to prevent + * reentering non-reentrant functions like tcp_input(). Packets passed to + * netif_loop_output() are put on a list that is passed to netif->input() by + * netif_poll(). + */ +void +netif_poll(struct netif *netif) +{ + struct pbuf *in; + SYS_ARCH_DECL_PROTECT(lev); + + do { + /* Get a packet from the list. With SYS_LIGHTWEIGHT_PROT=1, this is protected */ + SYS_ARCH_PROTECT(lev); + in = netif->loop_first; + if(in != NULL) { + struct pbuf *in_end = in; +#if LWIP_LOOPBACK_MAX_PBUFS + u8_t clen = pbuf_clen(in); + /* adjust the number of pbufs on queue */ + LWIP_ASSERT("netif->loop_cnt_current underflow", + ((netif->loop_cnt_current - clen) < netif->loop_cnt_current)); + netif->loop_cnt_current -= clen; +#endif /* LWIP_LOOPBACK_MAX_PBUFS */ + while(in_end->len != in_end->tot_len) { + LWIP_ASSERT("bogus pbuf: len != tot_len but next == NULL!", in_end->next != NULL); + in_end = in_end->next; + } + /* 'in_end' now points to the last pbuf from 'in' */ + if(in_end == netif->loop_last) { + /* this was the last pbuf in the list */ + netif->loop_first = netif->loop_last = NULL; + } else { + /* pop the pbuf off the list */ + netif->loop_first = in_end->next; + LWIP_ASSERT("should not be null since first != last!", netif->loop_first != NULL); + } + /* De-queue the pbuf from its successors on the 'loop_' list. */ + in_end->next = NULL; + } + SYS_ARCH_UNPROTECT(lev); + + if(in != NULL) { + /* loopback packets are always IP packets! */ + if(ip_input(in, netif) != ERR_OK) { + pbuf_free(in); + } + /* Don't reference the packet any more! */ + in = NULL; + } + /* go on while there is a packet on the list */ + } while(netif->loop_first != NULL); +} + +#if !LWIP_NETIF_LOOPBACK_MULTITHREADING +/** + * Calls netif_poll() for every netif on the netif_list. + */ +void +netif_poll_all(void) +{ + struct netif *netif = netif_list; + /* loop through netifs */ + while (netif != NULL) { + netif_poll(netif); + /* proceed to next network interface */ + netif = netif->next; + } +} +#endif /* !LWIP_NETIF_LOOPBACK_MULTITHREADING */ +#endif /* ENABLE_LOOPBACK */ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/pbuf.c b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/pbuf.c new file mode 100644 index 000000000..6284b9a3a --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/pbuf.c @@ -0,0 +1,931 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * Packet buffer management + * + * Packets are built from the pbuf data structure. It supports dynamic + * memory allocation for packet contents or can reference externally + * managed packet contents both in RAM and ROM. Quick allocation for + * incoming packets is provided through pools with fixed sized pbufs. + * + * A packet may span over multiple pbufs, chained as a singly linked + * list. This is called a "pbuf chain". + * + * Multiple packets may be queued, also using this singly linked list. + * This is called a "packet queue". + * + * So, a packet queue consists of one or more pbuf chains, each of + * which consist of one or more pbufs. CURRENTLY, PACKET QUEUES ARE + * NOT SUPPORTED!!! Use helper structs to queue multiple packets. + * + * The differences between a pbuf chain and a packet queue are very + * precise but subtle. + * + * The last pbuf of a packet has a ->tot_len field that equals the + * ->len field. It can be found by traversing the list. If the last + * pbuf of a packet has a ->next field other than NULL, more packets + * are on the queue. + * + * Therefore, looping through a pbuf of a single packet, has an + * loop end condition (tot_len == p->len), NOT (next == NULL). + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#include "lwip/opt.h" + +#include "lwip/stats.h" +#include "lwip/def.h" +#include "lwip/mem.h" +#include "lwip/memp.h" +#include "lwip/pbuf.h" +#include "lwip/sys.h" +#include "arch/perf.h" +#if TCP_QUEUE_OOSEQ +#include "lwip/tcp.h" +#endif + +#include + +#define SIZEOF_STRUCT_PBUF LWIP_MEM_ALIGN_SIZE(sizeof(struct pbuf)) +/* Since the pool is created in memp, PBUF_POOL_BUFSIZE will be automatically + aligned there. Therefore, PBUF_POOL_BUFSIZE_ALIGNED can be used here. */ +#define PBUF_POOL_BUFSIZE_ALIGNED LWIP_MEM_ALIGN_SIZE(PBUF_POOL_BUFSIZE) + +#if !TCP_QUEUE_OOSEQ || NO_SYS +#define PBUF_POOL_IS_EMPTY() +#else /* !TCP_QUEUE_OOSEQ || NO_SYS */ +/** Define this to 0 to prevent freeing ooseq pbufs when the PBUF_POOL is empty */ +#ifndef PBUF_POOL_FREE_OOSEQ +#define PBUF_POOL_FREE_OOSEQ 1 +#endif /* PBUF_POOL_FREE_OOSEQ */ + +#if PBUF_POOL_FREE_OOSEQ +#include "lwip/tcpip.h" +#define PBUF_POOL_IS_EMPTY() pbuf_pool_is_empty() +static u8_t pbuf_free_ooseq_queued; +/** + * Attempt to reclaim some memory from queued out-of-sequence TCP segments + * if we run out of pool pbufs. It's better to give priority to new packets + * if we're running out. + * + * This must be done in the correct thread context therefore this function + * can only be used with NO_SYS=0 and through tcpip_callback. + */ +static void +pbuf_free_ooseq(void* arg) +{ + struct tcp_pcb* pcb; + SYS_ARCH_DECL_PROTECT(old_level); + LWIP_UNUSED_ARG(arg); + + SYS_ARCH_PROTECT(old_level); + pbuf_free_ooseq_queued = 0; + SYS_ARCH_UNPROTECT(old_level); + + for (pcb = tcp_active_pcbs; NULL != pcb; pcb = pcb->next) { + if (NULL != pcb->ooseq) { + /** Free the ooseq pbufs of one PCB only */ + LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_free_ooseq: freeing out-of-sequence pbufs\n")); + tcp_segs_free(pcb->ooseq); + pcb->ooseq = NULL; + return; + } + } +} + +/** Queue a call to pbuf_free_ooseq if not already queued. */ +static void +pbuf_pool_is_empty(void) +{ + u8_t queued; + SYS_ARCH_DECL_PROTECT(old_level); + + SYS_ARCH_PROTECT(old_level); + queued = pbuf_free_ooseq_queued; + pbuf_free_ooseq_queued = 1; + SYS_ARCH_UNPROTECT(old_level); + + if(!queued) { + /* queue a call to pbuf_free_ooseq if not already queued */ + if(tcpip_callback_with_block(pbuf_free_ooseq, NULL, 0) != ERR_OK) { + SYS_ARCH_PROTECT(old_level); + pbuf_free_ooseq_queued = 0; + SYS_ARCH_UNPROTECT(old_level); + } + } +} +#endif /* PBUF_POOL_FREE_OOSEQ */ +#endif /* !TCP_QUEUE_OOSEQ || NO_SYS */ + +/** + * Allocates a pbuf of the given type (possibly a chain for PBUF_POOL type). + * + * The actual memory allocated for the pbuf is determined by the + * layer at which the pbuf is allocated and the requested size + * (from the size parameter). + * + * @param layer flag to define header size + * @param length size of the pbuf's payload + * @param type this parameter decides how and where the pbuf + * should be allocated as follows: + * + * - PBUF_RAM: buffer memory for pbuf is allocated as one large + * chunk. This includes protocol headers as well. + * - PBUF_ROM: no buffer memory is allocated for the pbuf, even for + * protocol headers. Additional headers must be prepended + * by allocating another pbuf and chain in to the front of + * the ROM pbuf. It is assumed that the memory used is really + * similar to ROM in that it is immutable and will not be + * changed. Memory which is dynamic should generally not + * be attached to PBUF_ROM pbufs. Use PBUF_REF instead. + * - PBUF_REF: no buffer memory is allocated for the pbuf, even for + * protocol headers. It is assumed that the pbuf is only + * being used in a single thread. If the pbuf gets queued, + * then pbuf_take should be called to copy the buffer. + * - PBUF_POOL: the pbuf is allocated as a pbuf chain, with pbufs from + * the pbuf pool that is allocated during pbuf_init(). + * + * @return the allocated pbuf. If multiple pbufs where allocated, this + * is the first pbuf of a pbuf chain. + */ +struct pbuf * +pbuf_alloc(pbuf_layer layer, u16_t length, pbuf_type type) +{ + struct pbuf *p, *q, *r; + u16_t offset; + s32_t rem_len; /* remaining length */ + LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_alloc(length=%"U16_F")\n", length)); + + /* determine header offset */ + offset = 0; + switch (layer) { + case PBUF_TRANSPORT: + /* add room for transport (often TCP) layer header */ + offset += PBUF_TRANSPORT_HLEN; + /* FALLTHROUGH */ + case PBUF_IP: + /* add room for IP layer header */ + offset += PBUF_IP_HLEN; + /* FALLTHROUGH */ + case PBUF_LINK: + /* add room for link layer header */ + offset += PBUF_LINK_HLEN; + break; + case PBUF_RAW: + break; + default: + LWIP_ASSERT("pbuf_alloc: bad pbuf layer", 0); + return NULL; + } + + switch (type) { + case PBUF_POOL: + /* allocate head of pbuf chain into p */ + p = memp_malloc(MEMP_PBUF_POOL); + LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_alloc: allocated pbuf %p\n", (void *)p)); + if (p == NULL) { + PBUF_POOL_IS_EMPTY(); + return NULL; + } + p->type = type; + p->next = NULL; + + /* make the payload pointer point 'offset' bytes into pbuf data memory */ + p->payload = LWIP_MEM_ALIGN((void *)((u8_t *)p + (SIZEOF_STRUCT_PBUF + offset))); + LWIP_ASSERT("pbuf_alloc: pbuf p->payload properly aligned", + ((mem_ptr_t)p->payload % MEM_ALIGNMENT) == 0); + /* the total length of the pbuf chain is the requested size */ + p->tot_len = length; + /* set the length of the first pbuf in the chain */ + p->len = LWIP_MIN(length, PBUF_POOL_BUFSIZE_ALIGNED - LWIP_MEM_ALIGN_SIZE(offset)); + LWIP_ASSERT("check p->payload + p->len does not overflow pbuf", + ((u8_t*)p->payload + p->len <= + (u8_t*)p + SIZEOF_STRUCT_PBUF + PBUF_POOL_BUFSIZE_ALIGNED)); + LWIP_ASSERT("PBUF_POOL_BUFSIZE must be bigger than MEM_ALIGNMENT", + (PBUF_POOL_BUFSIZE_ALIGNED - LWIP_MEM_ALIGN_SIZE(offset)) > 0 ); + /* set reference count (needed here in case we fail) */ + p->ref = 1; + + /* now allocate the tail of the pbuf chain */ + + /* remember first pbuf for linkage in next iteration */ + r = p; + /* remaining length to be allocated */ + rem_len = length - p->len; + /* any remaining pbufs to be allocated? */ + while (rem_len > 0) { + q = memp_malloc(MEMP_PBUF_POOL); + if (q == NULL) { + PBUF_POOL_IS_EMPTY(); + /* free chain so far allocated */ + pbuf_free(p); + /* bail out unsuccesfully */ + return NULL; + } + q->type = type; + q->flags = 0; + q->next = NULL; + /* make previous pbuf point to this pbuf */ + r->next = q; + /* set total length of this pbuf and next in chain */ + LWIP_ASSERT("rem_len < max_u16_t", rem_len < 0xffff); + q->tot_len = (u16_t)rem_len; + /* this pbuf length is pool size, unless smaller sized tail */ + q->len = LWIP_MIN((u16_t)rem_len, PBUF_POOL_BUFSIZE_ALIGNED); + q->payload = (void *)((u8_t *)q + SIZEOF_STRUCT_PBUF); + LWIP_ASSERT("pbuf_alloc: pbuf q->payload properly aligned", + ((mem_ptr_t)q->payload % MEM_ALIGNMENT) == 0); + LWIP_ASSERT("check p->payload + p->len does not overflow pbuf", + ((u8_t*)p->payload + p->len <= + (u8_t*)p + SIZEOF_STRUCT_PBUF + PBUF_POOL_BUFSIZE_ALIGNED)); + q->ref = 1; + /* calculate remaining length to be allocated */ + rem_len -= q->len; + /* remember this pbuf for linkage in next iteration */ + r = q; + } + /* end of chain */ + /*r->next = NULL;*/ + + break; + case PBUF_RAM: + /* If pbuf is to be allocated in RAM, allocate memory for it. */ + p = (struct pbuf*)mem_malloc(LWIP_MEM_ALIGN_SIZE(SIZEOF_STRUCT_PBUF + offset) + LWIP_MEM_ALIGN_SIZE(length)); + if (p == NULL) { + return NULL; + } + /* Set up internal structure of the pbuf. */ + p->payload = LWIP_MEM_ALIGN((void *)((u8_t *)p + SIZEOF_STRUCT_PBUF + offset)); + p->len = p->tot_len = length; + p->next = NULL; + p->type = type; + + LWIP_ASSERT("pbuf_alloc: pbuf->payload properly aligned", + ((mem_ptr_t)p->payload % MEM_ALIGNMENT) == 0); + break; + /* pbuf references existing (non-volatile static constant) ROM payload? */ + case PBUF_ROM: + /* pbuf references existing (externally allocated) RAM payload? */ + case PBUF_REF: + /* only allocate memory for the pbuf structure */ + p = memp_malloc(MEMP_PBUF); + if (p == NULL) { + LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_LEVEL_SERIOUS, + ("pbuf_alloc: Could not allocate MEMP_PBUF for PBUF_%s.\n", + (type == PBUF_ROM) ? "ROM" : "REF")); + return NULL; + } + /* caller must set this field properly, afterwards */ + p->payload = NULL; + p->len = p->tot_len = length; + p->next = NULL; + p->type = type; + break; + default: + LWIP_ASSERT("pbuf_alloc: erroneous type", 0); + return NULL; + } + /* set reference count */ + p->ref = 1; + /* set flags */ + p->flags = 0; + LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_alloc(length=%"U16_F") == %p\n", length, (void *)p)); + return p; +} + + +/** + * Shrink a pbuf chain to a desired length. + * + * @param p pbuf to shrink. + * @param new_len desired new length of pbuf chain + * + * Depending on the desired length, the first few pbufs in a chain might + * be skipped and left unchanged. The new last pbuf in the chain will be + * resized, and any remaining pbufs will be freed. + * + * @note If the pbuf is ROM/REF, only the ->tot_len and ->len fields are adjusted. + * @note May not be called on a packet queue. + * + * @note Despite its name, pbuf_realloc cannot grow the size of a pbuf (chain). + */ +void +pbuf_realloc(struct pbuf *p, u16_t new_len) +{ + struct pbuf *q; + u16_t rem_len; /* remaining length */ + s32_t grow; + + LWIP_ASSERT("pbuf_realloc: p != NULL", p != NULL); + LWIP_ASSERT("pbuf_realloc: sane p->type", p->type == PBUF_POOL || + p->type == PBUF_ROM || + p->type == PBUF_RAM || + p->type == PBUF_REF); + + /* desired length larger than current length? */ + if (new_len >= p->tot_len) { + /* enlarging not yet supported */ + return; + } + + /* the pbuf chain grows by (new_len - p->tot_len) bytes + * (which may be negative in case of shrinking) */ + grow = new_len - p->tot_len; + + /* first, step over any pbufs that should remain in the chain */ + rem_len = new_len; + q = p; + /* should this pbuf be kept? */ + while (rem_len > q->len) { + /* decrease remaining length by pbuf length */ + rem_len -= q->len; + /* decrease total length indicator */ + LWIP_ASSERT("grow < max_u16_t", grow < 0xffff); + q->tot_len += (u16_t)grow; + /* proceed to next pbuf in chain */ + q = q->next; + LWIP_ASSERT("pbuf_realloc: q != NULL", q != NULL); + } + /* we have now reached the new last pbuf (in q) */ + /* rem_len == desired length for pbuf q */ + + /* shrink allocated memory for PBUF_RAM */ + /* (other types merely adjust their length fields */ + if ((q->type == PBUF_RAM) && (rem_len != q->len)) { + /* reallocate and adjust the length of the pbuf that will be split */ + q = mem_realloc(q, (u8_t *)q->payload - (u8_t *)q + rem_len); + LWIP_ASSERT("mem_realloc give q == NULL", q != NULL); + } + /* adjust length fields for new last pbuf */ + q->len = rem_len; + q->tot_len = q->len; + + /* any remaining pbufs in chain? */ + if (q->next != NULL) { + /* free remaining pbufs in chain */ + pbuf_free(q->next); + } + /* q is last packet in chain */ + q->next = NULL; + +} + +/** + * Adjusts the payload pointer to hide or reveal headers in the payload. + * + * Adjusts the ->payload pointer so that space for a header + * (dis)appears in the pbuf payload. + * + * The ->payload, ->tot_len and ->len fields are adjusted. + * + * @param p pbuf to change the header size. + * @param header_size_increment Number of bytes to increment header size which + * increases the size of the pbuf. New space is on the front. + * (Using a negative value decreases the header size.) + * If hdr_size_inc is 0, this function does nothing and returns succesful. + * + * PBUF_ROM and PBUF_REF type buffers cannot have their sizes increased, so + * the call will fail. A check is made that the increase in header size does + * not move the payload pointer in front of the start of the buffer. + * @return non-zero on failure, zero on success. + * + */ +u8_t +pbuf_header(struct pbuf *p, s16_t header_size_increment) +{ + u16_t type; + void *payload; + u16_t increment_magnitude; + + LWIP_ASSERT("p != NULL", p != NULL); + if ((header_size_increment == 0) || (p == NULL)) + return 0; + + if (header_size_increment < 0){ + increment_magnitude = -header_size_increment; + /* Check that we aren't going to move off the end of the pbuf */ + LWIP_ERROR("increment_magnitude <= p->len", (increment_magnitude <= p->len), return 1;); + } else { + increment_magnitude = header_size_increment; +#if 0 + /* Can't assert these as some callers speculatively call + pbuf_header() to see if it's OK. Will return 1 below instead. */ + /* Check that we've got the correct type of pbuf to work with */ + LWIP_ASSERT("p->type == PBUF_RAM || p->type == PBUF_POOL", + p->type == PBUF_RAM || p->type == PBUF_POOL); + /* Check that we aren't going to move off the beginning of the pbuf */ + LWIP_ASSERT("p->payload - increment_magnitude >= p + SIZEOF_STRUCT_PBUF", + (u8_t *)p->payload - increment_magnitude >= (u8_t *)p + SIZEOF_STRUCT_PBUF); +#endif + } + + type = p->type; + /* remember current payload pointer */ + payload = p->payload; + + /* pbuf types containing payloads? */ + if (type == PBUF_RAM || type == PBUF_POOL) { + /* set new payload pointer */ + p->payload = (u8_t *)p->payload - header_size_increment; + /* boundary check fails? */ + if ((u8_t *)p->payload < (u8_t *)p + SIZEOF_STRUCT_PBUF) { + LWIP_DEBUGF( PBUF_DEBUG | LWIP_DBG_LEVEL_SERIOUS, + ("pbuf_header: failed as %p < %p (not enough space for new header size)\n", + (void *)p->payload, (void *)(p + 1))); + /* restore old payload pointer */ + p->payload = payload; + /* bail out unsuccesfully */ + return 1; + } + /* pbuf types refering to external payloads? */ + } else if (type == PBUF_REF || type == PBUF_ROM) { + /* hide a header in the payload? */ + if ((header_size_increment < 0) && (increment_magnitude <= p->len)) { + /* increase payload pointer */ + p->payload = (u8_t *)p->payload - header_size_increment; + } else { + /* cannot expand payload to front (yet!) + * bail out unsuccesfully */ + return 1; + } + } + else { + /* Unknown type */ + LWIP_ASSERT("bad pbuf type", 0); + return 1; + } + /* modify pbuf length fields */ + p->len += header_size_increment; + p->tot_len += header_size_increment; + + LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_header: old %p new %p (%"S16_F")\n", + (void *)payload, (void *)p->payload, header_size_increment)); + + return 0; +} + +/** + * Dereference a pbuf chain or queue and deallocate any no-longer-used + * pbufs at the head of this chain or queue. + * + * Decrements the pbuf reference count. If it reaches zero, the pbuf is + * deallocated. + * + * For a pbuf chain, this is repeated for each pbuf in the chain, + * up to the first pbuf which has a non-zero reference count after + * decrementing. So, when all reference counts are one, the whole + * chain is free'd. + * + * @param p The pbuf (chain) to be dereferenced. + * + * @return the number of pbufs that were de-allocated + * from the head of the chain. + * + * @note MUST NOT be called on a packet queue (Not verified to work yet). + * @note the reference counter of a pbuf equals the number of pointers + * that refer to the pbuf (or into the pbuf). + * + * @internal examples: + * + * Assuming existing chains a->b->c with the following reference + * counts, calling pbuf_free(a) results in: + * + * 1->2->3 becomes ...1->3 + * 3->3->3 becomes 2->3->3 + * 1->1->2 becomes ......1 + * 2->1->1 becomes 1->1->1 + * 1->1->1 becomes ....... + * + */ +u8_t +pbuf_free(struct pbuf *p) +{ + u16_t type; + struct pbuf *q; + u8_t count; + + if (p == NULL) { + LWIP_ASSERT("p != NULL", p != NULL); + /* if assertions are disabled, proceed with debug output */ + LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_LEVEL_SERIOUS, + ("pbuf_free(p == NULL) was called.\n")); + return 0; + } + LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_free(%p)\n", (void *)p)); + + PERF_START; + + LWIP_ASSERT("pbuf_free: sane type", + p->type == PBUF_RAM || p->type == PBUF_ROM || + p->type == PBUF_REF || p->type == PBUF_POOL); + + count = 0; + /* de-allocate all consecutive pbufs from the head of the chain that + * obtain a zero reference count after decrementing*/ + while (p != NULL) { + u16_t ref; + SYS_ARCH_DECL_PROTECT(old_level); + /* Since decrementing ref cannot be guaranteed to be a single machine operation + * we must protect it. We put the new ref into a local variable to prevent + * further protection. */ + SYS_ARCH_PROTECT(old_level); + /* all pbufs in a chain are referenced at least once */ + LWIP_ASSERT("pbuf_free: p->ref > 0", p->ref > 0); + /* decrease reference count (number of pointers to pbuf) */ + ref = --(p->ref); + SYS_ARCH_UNPROTECT(old_level); + /* this pbuf is no longer referenced to? */ + if (ref == 0) { + /* remember next pbuf in chain for next iteration */ + q = p->next; + LWIP_DEBUGF( PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_free: deallocating %p\n", (void *)p)); + type = p->type; + /* is this a pbuf from the pool? */ + if (type == PBUF_POOL) { + memp_free(MEMP_PBUF_POOL, p); + /* is this a ROM or RAM referencing pbuf? */ + } else if (type == PBUF_ROM || type == PBUF_REF) { + memp_free(MEMP_PBUF, p); + /* type == PBUF_RAM */ + } else { + mem_free(p); + } + count++; + /* proceed to next pbuf */ + p = q; + /* p->ref > 0, this pbuf is still referenced to */ + /* (and so the remaining pbufs in chain as well) */ + } else { + LWIP_DEBUGF( PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_free: %p has ref %"U16_F", ending here.\n", (void *)p, ref)); + /* stop walking through the chain */ + p = NULL; + } + } + PERF_STOP("pbuf_free"); + /* return number of de-allocated pbufs */ + return count; +} + +/** + * Count number of pbufs in a chain + * + * @param p first pbuf of chain + * @return the number of pbufs in a chain + */ + +u8_t +pbuf_clen(struct pbuf *p) +{ + u8_t len; + + len = 0; + while (p != NULL) { + ++len; + p = p->next; + } + return len; +} + +/** + * Increment the reference count of the pbuf. + * + * @param p pbuf to increase reference counter of + * + */ +void +pbuf_ref(struct pbuf *p) +{ + SYS_ARCH_DECL_PROTECT(old_level); + /* pbuf given? */ + if (p != NULL) { + SYS_ARCH_PROTECT(old_level); + ++(p->ref); + SYS_ARCH_UNPROTECT(old_level); + } +} + +/** + * Concatenate two pbufs (each may be a pbuf chain) and take over + * the caller's reference of the tail pbuf. + * + * @note The caller MAY NOT reference the tail pbuf afterwards. + * Use pbuf_chain() for that purpose. + * + * @see pbuf_chain() + */ + +void +pbuf_cat(struct pbuf *h, struct pbuf *t) +{ + struct pbuf *p; + + LWIP_ERROR("(h != NULL) && (t != NULL) (programmer violates API)", + ((h != NULL) && (t != NULL)), return;); + + /* proceed to last pbuf of chain */ + for (p = h; p->next != NULL; p = p->next) { + /* add total length of second chain to all totals of first chain */ + p->tot_len += t->tot_len; + } + /* { p is last pbuf of first h chain, p->next == NULL } */ + LWIP_ASSERT("p->tot_len == p->len (of last pbuf in chain)", p->tot_len == p->len); + LWIP_ASSERT("p->next == NULL", p->next == NULL); + /* add total length of second chain to last pbuf total of first chain */ + p->tot_len += t->tot_len; + /* chain last pbuf of head (p) with first of tail (t) */ + p->next = t; + /* p->next now references t, but the caller will drop its reference to t, + * so netto there is no change to the reference count of t. + */ +} + +/** + * Chain two pbufs (or pbuf chains) together. + * + * The caller MUST call pbuf_free(t) once it has stopped + * using it. Use pbuf_cat() instead if you no longer use t. + * + * @param h head pbuf (chain) + * @param t tail pbuf (chain) + * @note The pbufs MUST belong to the same packet. + * @note MAY NOT be called on a packet queue. + * + * The ->tot_len fields of all pbufs of the head chain are adjusted. + * The ->next field of the last pbuf of the head chain is adjusted. + * The ->ref field of the first pbuf of the tail chain is adjusted. + * + */ +void +pbuf_chain(struct pbuf *h, struct pbuf *t) +{ + pbuf_cat(h, t); + /* t is now referenced by h */ + pbuf_ref(t); + LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_chain: %p references %p\n", (void *)h, (void *)t)); +} + +/** + * Dechains the first pbuf from its succeeding pbufs in the chain. + * + * Makes p->tot_len field equal to p->len. + * @param p pbuf to dechain + * @return remainder of the pbuf chain, or NULL if it was de-allocated. + * @note May not be called on a packet queue. + */ +struct pbuf * +pbuf_dechain(struct pbuf *p) +{ + struct pbuf *q; + u8_t tail_gone = 1; + /* tail */ + q = p->next; + /* pbuf has successor in chain? */ + if (q != NULL) { + /* assert tot_len invariant: (p->tot_len == p->len + (p->next? p->next->tot_len: 0) */ + LWIP_ASSERT("p->tot_len == p->len + q->tot_len", q->tot_len == p->tot_len - p->len); + /* enforce invariant if assertion is disabled */ + q->tot_len = p->tot_len - p->len; + /* decouple pbuf from remainder */ + p->next = NULL; + /* total length of pbuf p is its own length only */ + p->tot_len = p->len; + /* q is no longer referenced by p, free it */ + LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_dechain: unreferencing %p\n", (void *)q)); + tail_gone = pbuf_free(q); + if (tail_gone > 0) { + LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, + ("pbuf_dechain: deallocated %p (as it is no longer referenced)\n", (void *)q)); + } + /* return remaining tail or NULL if deallocated */ + } + /* assert tot_len invariant: (p->tot_len == p->len + (p->next? p->next->tot_len: 0) */ + LWIP_ASSERT("p->tot_len == p->len", p->tot_len == p->len); + return ((tail_gone > 0) ? NULL : q); +} + +/** + * + * Create PBUF_RAM copies of pbufs. + * + * Used to queue packets on behalf of the lwIP stack, such as + * ARP based queueing. + * + * @note You MUST explicitly use p = pbuf_take(p); + * + * @note Only one packet is copied, no packet queue! + * + * @param p_to pbuf destination of the copy + * @param p_from pbuf source of the copy + * + * @return ERR_OK if pbuf was copied + * ERR_ARG if one of the pbufs is NULL or p_to is not big + * enough to hold p_from + */ +err_t +pbuf_copy(struct pbuf *p_to, struct pbuf *p_from) +{ + u16_t offset_to=0, offset_from=0, len; + + LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_copy(%p, %p)\n", + (void*)p_to, (void*)p_from)); + + /* is the target big enough to hold the source? */ + LWIP_ERROR("pbuf_copy: target not big enough to hold source", ((p_to != NULL) && + (p_from != NULL) && (p_to->tot_len >= p_from->tot_len)), return ERR_ARG;); + + /* iterate through pbuf chain */ + do + { + LWIP_ASSERT("p_to != NULL", p_to != NULL); + /* copy one part of the original chain */ + if ((p_to->len - offset_to) >= (p_from->len - offset_from)) { + /* complete current p_from fits into current p_to */ + len = p_from->len - offset_from; + } else { + /* current p_from does not fit into current p_to */ + len = p_to->len - offset_to; + } + MEMCPY((u8_t*)p_to->payload + offset_to, (u8_t*)p_from->payload + offset_from, len); + offset_to += len; + offset_from += len; + LWIP_ASSERT("offset_to <= p_to->len", offset_to <= p_to->len); + if (offset_to == p_to->len) { + /* on to next p_to (if any) */ + offset_to = 0; + p_to = p_to->next; + } + LWIP_ASSERT("offset_from <= p_from->len", offset_from <= p_from->len); + if (offset_from >= p_from->len) { + /* on to next p_from (if any) */ + offset_from = 0; + p_from = p_from->next; + } + + if((p_from != NULL) && (p_from->len == p_from->tot_len)) { + /* don't copy more than one packet! */ + LWIP_ERROR("pbuf_copy() does not allow packet queues!\n", + (p_from->next == NULL), return ERR_VAL;); + } + if((p_to != NULL) && (p_to->len == p_to->tot_len)) { + /* don't copy more than one packet! */ + LWIP_ERROR("pbuf_copy() does not allow packet queues!\n", + (p_to->next == NULL), return ERR_VAL;); + } + } while (p_from); + LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_copy: end of chain reached.\n")); + return ERR_OK; +} + +/** + * Copy (part of) the contents of a packet buffer + * to an application supplied buffer. + * + * @param buf the pbuf from which to copy data + * @param dataptr the application supplied buffer + * @param len length of data to copy (dataptr must be big enough). No more + * than buf->tot_len will be copied, irrespective of len + * @param offset offset into the packet buffer from where to begin copying len bytes + * @return the number of bytes copied, or 0 on failure + */ +u16_t +pbuf_copy_partial(struct pbuf *buf, void *dataptr, u16_t len, u16_t offset) +{ + struct pbuf *p; + u16_t left; + u16_t buf_copy_len; + u16_t copied_total = 0; + + LWIP_ERROR("pbuf_copy_partial: invalid buf", (buf != NULL), return 0;); + LWIP_ERROR("pbuf_copy_partial: invalid dataptr", (dataptr != NULL), return 0;); + + left = 0; + + if((buf == NULL) || (dataptr == NULL)) { + return 0; + } + + /* Note some systems use byte copy if dataptr or one of the pbuf payload pointers are unaligned. */ + for(p = buf; len != 0 && p != NULL; p = p->next) { + if ((offset != 0) && (offset >= p->len)) { + /* don't copy from this buffer -> on to the next */ + offset -= p->len; + } else { + /* copy from this buffer. maybe only partially. */ + buf_copy_len = p->len - offset; + if (buf_copy_len > len) + buf_copy_len = len; + /* copy the necessary parts of the buffer */ + MEMCPY(&((char*)dataptr)[left], &((char*)p->payload)[offset], buf_copy_len); + copied_total += buf_copy_len; + left += buf_copy_len; + len -= buf_copy_len; + offset = 0; + } + } + return copied_total; +} + +/** + * Copy application supplied data into a pbuf. + * This function can only be used to copy the equivalent of buf->tot_len data. + * + * @param buf pbuf to fill with data + * @param dataptr application supplied data buffer + * @param len length of the application supplied data buffer + * + * @return ERR_OK if successful, ERR_MEM if the pbuf is not big enough + */ +err_t +pbuf_take(struct pbuf *buf, const void *dataptr, u16_t len) +{ + struct pbuf *p; + u16_t buf_copy_len; + u16_t total_copy_len = len; + u16_t copied_total = 0; + + LWIP_ERROR("pbuf_take: invalid buf", (buf != NULL), return 0;); + LWIP_ERROR("pbuf_take: invalid dataptr", (dataptr != NULL), return 0;); + + if ((buf == NULL) || (dataptr == NULL) || (buf->tot_len < len)) { + return ERR_ARG; + } + + /* Note some systems use byte copy if dataptr or one of the pbuf payload pointers are unaligned. */ + for(p = buf; total_copy_len != 0; p = p->next) { + LWIP_ASSERT("pbuf_take: invalid pbuf", p != NULL); + buf_copy_len = total_copy_len; + if (buf_copy_len > p->len) { + /* this pbuf cannot hold all remaining data */ + buf_copy_len = p->len; + } + /* copy the necessary parts of the buffer */ + MEMCPY(p->payload, &((char*)dataptr)[copied_total], buf_copy_len); + total_copy_len -= buf_copy_len; + copied_total += buf_copy_len; + } + LWIP_ASSERT("did not copy all data", total_copy_len == 0 && copied_total == len); + return ERR_OK; +} + +/** + * Creates a single pbuf out of a queue of pbufs. + * + * @remark: The source pbuf 'p' is not freed by this function because that can + * be illegal in some places! + * + * @param p the source pbuf + * @param layer pbuf_layer of the new pbuf + * + * @return a new, single pbuf (p->next is NULL) + * or the old pbuf if allocation fails + */ +struct pbuf* +pbuf_coalesce(struct pbuf *p, pbuf_layer layer) +{ + struct pbuf *q; + err_t err; + if (p->next == NULL) { + return p; + } + q = pbuf_alloc(layer, p->tot_len, PBUF_RAM); + if (q == NULL) { + /* @todo: what do we do now? */ + return p; + } + err = pbuf_copy(q, p); + LWIP_ASSERT("pbuf_copy failed", err == ERR_OK); + pbuf_free(p); + return q; +} diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/raw.c b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/raw.c new file mode 100644 index 000000000..6966bbc44 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/raw.c @@ -0,0 +1,355 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * Implementation of raw protocol PCBs for low-level handling of + * different types of protocols besides (or overriding) those + * already available in lwIP. + * + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#include "lwip/opt.h" + +#if LWIP_RAW /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/def.h" +#include "lwip/memp.h" +#include "lwip/inet.h" +#include "lwip/ip_addr.h" +#include "lwip/netif.h" +#include "lwip/raw.h" +#include "lwip/stats.h" +#include "lwip/snmp.h" +#include "arch/perf.h" + +#include + +/** The list of RAW PCBs */ +static struct raw_pcb *raw_pcbs; + +/** + * Determine if in incoming IP packet is covered by a RAW PCB + * and if so, pass it to a user-provided receive callback function. + * + * Given an incoming IP datagram (as a chain of pbufs) this function + * finds a corresponding RAW PCB and calls the corresponding receive + * callback function. + * + * @param p pbuf to be demultiplexed to a RAW PCB. + * @param inp network interface on which the datagram was received. + * @return - 1 if the packet has been eaten by a RAW PCB receive + * callback function. The caller MAY NOT not reference the + * packet any longer, and MAY NOT call pbuf_free(). + * @return - 0 if packet is not eaten (pbuf is still referenced by the + * caller). + * + */ +u8_t +raw_input(struct pbuf *p, struct netif *inp) +{ + struct raw_pcb *pcb, *prev; + struct ip_hdr *iphdr; + s16_t proto; + u8_t eaten = 0; + + LWIP_UNUSED_ARG(inp); + + iphdr = p->payload; + proto = IPH_PROTO(iphdr); + + prev = NULL; + pcb = raw_pcbs; + /* loop through all raw pcbs until the packet is eaten by one */ + /* this allows multiple pcbs to match against the packet by design */ + while ((eaten == 0) && (pcb != NULL)) { + if (pcb->protocol == proto) { +#if IP_SOF_BROADCAST_RECV + /* broadcast filter? */ + if ((pcb->so_options & SOF_BROADCAST) || !ip_addr_isbroadcast(&(iphdr->dest), inp)) +#endif /* IP_SOF_BROADCAST_RECV */ + { + /* receive callback function available? */ + if (pcb->recv != NULL) { + /* the receive callback function did not eat the packet? */ + if (pcb->recv(pcb->recv_arg, pcb, p, &(iphdr->src)) != 0) { + /* receive function ate the packet */ + p = NULL; + eaten = 1; + if (prev != NULL) { + /* move the pcb to the front of raw_pcbs so that is + found faster next time */ + prev->next = pcb->next; + pcb->next = raw_pcbs; + raw_pcbs = pcb; + } + } + } + /* no receive callback function was set for this raw PCB */ + } + /* drop the packet */ + } + prev = pcb; + pcb = pcb->next; + } + return eaten; +} + +/** + * Bind a RAW PCB. + * + * @param pcb RAW PCB to be bound with a local address ipaddr. + * @param ipaddr local IP address to bind with. Use IP_ADDR_ANY to + * bind to all local interfaces. + * + * @return lwIP error code. + * - ERR_OK. Successful. No error occured. + * - ERR_USE. The specified IP address is already bound to by + * another RAW PCB. + * + * @see raw_disconnect() + */ +err_t +raw_bind(struct raw_pcb *pcb, struct ip_addr *ipaddr) +{ + ip_addr_set(&pcb->local_ip, ipaddr); + return ERR_OK; +} + +/** + * Connect an RAW PCB. This function is required by upper layers + * of lwip. Using the raw api you could use raw_sendto() instead + * + * This will associate the RAW PCB with the remote address. + * + * @param pcb RAW PCB to be connected with remote address ipaddr and port. + * @param ipaddr remote IP address to connect with. + * + * @return lwIP error code + * + * @see raw_disconnect() and raw_sendto() + */ +err_t +raw_connect(struct raw_pcb *pcb, struct ip_addr *ipaddr) +{ + ip_addr_set(&pcb->remote_ip, ipaddr); + return ERR_OK; +} + + +/** + * Set the callback function for received packets that match the + * raw PCB's protocol and binding. + * + * The callback function MUST either + * - eat the packet by calling pbuf_free() and returning non-zero. The + * packet will not be passed to other raw PCBs or other protocol layers. + * - not free the packet, and return zero. The packet will be matched + * against further PCBs and/or forwarded to another protocol layers. + * + * @return non-zero if the packet was free()d, zero if the packet remains + * available for others. + */ +void +raw_recv(struct raw_pcb *pcb, + u8_t (* recv)(void *arg, struct raw_pcb *upcb, struct pbuf *p, + struct ip_addr *addr), + void *recv_arg) +{ + /* remember recv() callback and user data */ + pcb->recv = recv; + pcb->recv_arg = recv_arg; +} + +/** + * Send the raw IP packet to the given address. Note that actually you cannot + * modify the IP headers (this is inconsistent with the receive callback where + * you actually get the IP headers), you can only specify the IP payload here. + * It requires some more changes in lwIP. (there will be a raw_send() function + * then.) + * + * @param pcb the raw pcb which to send + * @param p the IP payload to send + * @param ipaddr the destination address of the IP packet + * + */ +err_t +raw_sendto(struct raw_pcb *pcb, struct pbuf *p, struct ip_addr *ipaddr) +{ + err_t err; + struct netif *netif; + struct ip_addr *src_ip; + struct pbuf *q; /* q will be sent down the stack */ + + LWIP_DEBUGF(RAW_DEBUG | LWIP_DBG_TRACE, ("raw_sendto\n")); + + /* not enough space to add an IP header to first pbuf in given p chain? */ + if (pbuf_header(p, IP_HLEN)) { + /* allocate header in new pbuf */ + q = pbuf_alloc(PBUF_IP, 0, PBUF_RAM); + /* new header pbuf could not be allocated? */ + if (q == NULL) { + LWIP_DEBUGF(RAW_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("raw_sendto: could not allocate header\n")); + return ERR_MEM; + } + /* chain header q in front of given pbuf p */ + pbuf_chain(q, p); + /* { first pbuf q points to header pbuf } */ + LWIP_DEBUGF(RAW_DEBUG, ("raw_sendto: added header pbuf %p before given pbuf %p\n", (void *)q, (void *)p)); + } else { + /* first pbuf q equals given pbuf */ + q = p; + if(pbuf_header(q, -IP_HLEN)) { + LWIP_ASSERT("Can't restore header we just removed!", 0); + return ERR_MEM; + } + } + + if ((netif = ip_route(ipaddr)) == NULL) { + LWIP_DEBUGF(RAW_DEBUG | LWIP_DBG_LEVEL_WARNING, ("raw_sendto: No route to 0x%"X32_F"\n", ipaddr->addr)); + /* free any temporary header pbuf allocated by pbuf_header() */ + if (q != p) { + pbuf_free(q); + } + return ERR_RTE; + } + +#if IP_SOF_BROADCAST + /* broadcast filter? */ + if ( ((pcb->so_options & SOF_BROADCAST) == 0) && ip_addr_isbroadcast(ipaddr, netif) ) { + LWIP_DEBUGF(RAW_DEBUG | LWIP_DBG_LEVEL_WARNING, ("raw_sendto: SOF_BROADCAST not enabled on pcb %p\n", (void *)pcb)); + /* free any temporary header pbuf allocated by pbuf_header() */ + if (q != p) { + pbuf_free(q); + } + return ERR_VAL; + } +#endif /* IP_SOF_BROADCAST */ + + if (ip_addr_isany(&pcb->local_ip)) { + /* use outgoing network interface IP address as source address */ + src_ip = &(netif->ip_addr); + } else { + /* use RAW PCB local IP address as source address */ + src_ip = &(pcb->local_ip); + } + +#if LWIP_NETIF_HWADDRHINT + netif->addr_hint = &(pcb->addr_hint); +#endif /* LWIP_NETIF_HWADDRHINT*/ + err = ip_output_if (q, src_ip, ipaddr, pcb->ttl, pcb->tos, pcb->protocol, netif); +#if LWIP_NETIF_HWADDRHINT + netif->addr_hint = NULL; +#endif /* LWIP_NETIF_HWADDRHINT*/ + + /* did we chain a header earlier? */ + if (q != p) { + /* free the header */ + pbuf_free(q); + } + return err; +} + +/** + * Send the raw IP packet to the address given by raw_connect() + * + * @param pcb the raw pcb which to send + * @param p the IP payload to send + * + */ +err_t +raw_send(struct raw_pcb *pcb, struct pbuf *p) +{ + return raw_sendto(pcb, p, &pcb->remote_ip); +} + +/** + * Remove an RAW PCB. + * + * @param pcb RAW PCB to be removed. The PCB is removed from the list of + * RAW PCB's and the data structure is freed from memory. + * + * @see raw_new() + */ +void +raw_remove(struct raw_pcb *pcb) +{ + struct raw_pcb *pcb2; + /* pcb to be removed is first in list? */ + if (raw_pcbs == pcb) { + /* make list start at 2nd pcb */ + raw_pcbs = raw_pcbs->next; + /* pcb not 1st in list */ + } else { + for(pcb2 = raw_pcbs; pcb2 != NULL; pcb2 = pcb2->next) { + /* find pcb in raw_pcbs list */ + if (pcb2->next != NULL && pcb2->next == pcb) { + /* remove pcb from list */ + pcb2->next = pcb->next; + } + } + } + memp_free(MEMP_RAW_PCB, pcb); +} + +/** + * Create a RAW PCB. + * + * @return The RAW PCB which was created. NULL if the PCB data structure + * could not be allocated. + * + * @param proto the protocol number of the IPs payload (e.g. IP_PROTO_ICMP) + * + * @see raw_remove() + */ +struct raw_pcb * +raw_new(u8_t proto) { + struct raw_pcb *pcb; + + LWIP_DEBUGF(RAW_DEBUG | LWIP_DBG_TRACE, ("raw_new\n")); + + pcb = memp_malloc(MEMP_RAW_PCB); + /* could allocate RAW PCB? */ + if (pcb != NULL) { + /* initialize PCB to all zeroes */ + memset(pcb, 0, sizeof(struct raw_pcb)); + pcb->protocol = proto; + pcb->ttl = RAW_TTL; + pcb->next = raw_pcbs; + raw_pcbs = pcb; + } + return pcb; +} + +#endif /* LWIP_RAW */ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/stats.c b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/stats.c new file mode 100644 index 000000000..4299a9480 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/stats.c @@ -0,0 +1,151 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * Statistics module + * + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#include "lwip/opt.h" + +#if LWIP_STATS /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/def.h" +#include "lwip/stats.h" +#include "lwip/mem.h" + +#include + +struct stats_ lwip_stats; + +#if LWIP_STATS_DISPLAY +void +stats_display_proto(struct stats_proto *proto, char *name) +{ + LWIP_PLATFORM_DIAG(("\n%s\n\t", name)); + LWIP_PLATFORM_DIAG(("xmit: %"STAT_COUNTER_F"\n\t", proto->xmit)); + LWIP_PLATFORM_DIAG(("recv: %"STAT_COUNTER_F"\n\t", proto->recv)); + LWIP_PLATFORM_DIAG(("fw: %"STAT_COUNTER_F"\n\t", proto->fw)); + LWIP_PLATFORM_DIAG(("drop: %"STAT_COUNTER_F"\n\t", proto->drop)); + LWIP_PLATFORM_DIAG(("chkerr: %"STAT_COUNTER_F"\n\t", proto->chkerr)); + LWIP_PLATFORM_DIAG(("lenerr: %"STAT_COUNTER_F"\n\t", proto->lenerr)); + LWIP_PLATFORM_DIAG(("memerr: %"STAT_COUNTER_F"\n\t", proto->memerr)); + LWIP_PLATFORM_DIAG(("rterr: %"STAT_COUNTER_F"\n\t", proto->rterr)); + LWIP_PLATFORM_DIAG(("proterr: %"STAT_COUNTER_F"\n\t", proto->proterr)); + LWIP_PLATFORM_DIAG(("opterr: %"STAT_COUNTER_F"\n\t", proto->opterr)); + LWIP_PLATFORM_DIAG(("err: %"STAT_COUNTER_F"\n\t", proto->err)); + LWIP_PLATFORM_DIAG(("cachehit: %"STAT_COUNTER_F"\n", proto->cachehit)); +} + +#if IGMP_STATS +void +stats_display_igmp(struct stats_igmp *igmp) +{ + LWIP_PLATFORM_DIAG(("\nIGMP\n\t")); + LWIP_PLATFORM_DIAG(("lenerr: %"STAT_COUNTER_F"\n\t", igmp->lenerr)); + LWIP_PLATFORM_DIAG(("chkerr: %"STAT_COUNTER_F"\n\t", igmp->chkerr)); + LWIP_PLATFORM_DIAG(("v1_rxed: %"STAT_COUNTER_F"\n\t", igmp->v1_rxed)); + LWIP_PLATFORM_DIAG(("join_sent: %"STAT_COUNTER_F"\n\t", igmp->join_sent)); + LWIP_PLATFORM_DIAG(("leave_sent: %"STAT_COUNTER_F"\n\t", igmp->leave_sent)); + LWIP_PLATFORM_DIAG(("unicast_query: %"STAT_COUNTER_F"\n\t", igmp->unicast_query)); + LWIP_PLATFORM_DIAG(("report_sent: %"STAT_COUNTER_F"\n\t", igmp->report_sent)); + LWIP_PLATFORM_DIAG(("report_rxed: %"STAT_COUNTER_F"\n\t", igmp->report_rxed)); + LWIP_PLATFORM_DIAG(("group_query_rxed: %"STAT_COUNTER_F"\n", igmp->group_query_rxed)); +} +#endif /* IGMP_STATS */ + +#if MEM_STATS || MEMP_STATS +void +stats_display_mem(struct stats_mem *mem, char *name) +{ + LWIP_PLATFORM_DIAG(("\nMEM %s\n\t", name)); + LWIP_PLATFORM_DIAG(("avail: %"U32_F"\n\t", (u32_t)mem->avail)); + LWIP_PLATFORM_DIAG(("used: %"U32_F"\n\t", (u32_t)mem->used)); + LWIP_PLATFORM_DIAG(("max: %"U32_F"\n\t", (u32_t)mem->max)); + LWIP_PLATFORM_DIAG(("err: %"U32_F"\n", (u32_t)mem->err)); +} + +#if MEMP_STATS +void +stats_display_memp(struct stats_mem *mem, int index) +{ + char * memp_names[] = { +#define LWIP_MEMPOOL(name,num,size,desc) desc, +#include "lwip/memp_std.h" + }; + if(index < MEMP_MAX) { + stats_display_mem(mem, memp_names[index]); + } +} +#endif /* MEMP_STATS */ +#endif /* MEM_STATS || MEMP_STATS */ + +#if SYS_STATS +void +stats_display_sys(struct stats_sys *sys) +{ + LWIP_PLATFORM_DIAG(("\nSYS\n\t")); + LWIP_PLATFORM_DIAG(("sem.used: %"U32_F"\n\t", (u32_t)sys->sem.used)); + LWIP_PLATFORM_DIAG(("sem.max: %"U32_F"\n\t", (u32_t)sys->sem.max)); + LWIP_PLATFORM_DIAG(("sem.err: %"U32_F"\n\t", (u32_t)sys->sem.err)); + LWIP_PLATFORM_DIAG(("mbox.used: %"U32_F"\n\t", (u32_t)sys->mbox.used)); + LWIP_PLATFORM_DIAG(("mbox.max: %"U32_F"\n\t", (u32_t)sys->mbox.max)); + LWIP_PLATFORM_DIAG(("mbox.err: %"U32_F"\n\t", (u32_t)sys->mbox.err)); +} +#endif /* SYS_STATS */ + +void +stats_display(void) +{ + s16_t i; + + LINK_STATS_DISPLAY(); + ETHARP_STATS_DISPLAY(); + IPFRAG_STATS_DISPLAY(); + IP_STATS_DISPLAY(); + IGMP_STATS_DISPLAY(); + ICMP_STATS_DISPLAY(); + UDP_STATS_DISPLAY(); + TCP_STATS_DISPLAY(); + MEM_STATS_DISPLAY(); + for (i = 0; i < MEMP_MAX; i++) { + MEMP_STATS_DISPLAY(i); + } + SYS_STATS_DISPLAY(); +} +#endif /* LWIP_STATS_DISPLAY */ + +#endif /* LWIP_STATS */ + diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/tcp.c b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/tcp.c new file mode 100644 index 000000000..c588d21df --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/tcp.c @@ -0,0 +1,1463 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * Transmission Control Protocol for IP + * + * This file contains common functions for the TCP implementation, such as functinos + * for manipulating the data structures and the TCP timer functions. TCP functions + * related to input and output is found in tcp_in.c and tcp_out.c respectively. + * + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#include "lwip/opt.h" + +#if LWIP_TCP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/def.h" +#include "lwip/mem.h" +#include "lwip/memp.h" +#include "lwip/snmp.h" +#include "lwip/tcp.h" +#include "lwip/debug.h" +#include "lwip/stats.h" + +#include + +const char *tcp_state_str[] = { + "CLOSED", + "LISTEN", + "SYN_SENT", + "SYN_RCVD", + "ESTABLISHED", + "FIN_WAIT_1", + "FIN_WAIT_2", + "CLOSE_WAIT", + "CLOSING", + "LAST_ACK", + "TIME_WAIT" +}; + +/* Incremented every coarse grained timer shot (typically every 500 ms). */ +u32_t tcp_ticks; +const u8_t tcp_backoff[13] = + { 1, 2, 3, 4, 5, 6, 7, 7, 7, 7, 7, 7, 7}; + /* Times per slowtmr hits */ +const u8_t tcp_persist_backoff[7] = { 3, 6, 12, 24, 48, 96, 120 }; + +/* The TCP PCB lists. */ + +/** List of all TCP PCBs bound but not yet (connected || listening) */ +struct tcp_pcb *tcp_bound_pcbs; +/** List of all TCP PCBs in LISTEN state */ +union tcp_listen_pcbs_t tcp_listen_pcbs; +/** List of all TCP PCBs that are in a state in which + * they accept or send data. */ +struct tcp_pcb *tcp_active_pcbs; +/** List of all TCP PCBs in TIME-WAIT state */ +struct tcp_pcb *tcp_tw_pcbs; + +struct tcp_pcb *tcp_tmp_pcb; + +static u8_t tcp_timer; +static u16_t tcp_new_port(void); + +/** + * Called periodically to dispatch TCP timers. + * + */ +void +tcp_tmr(void) +{ + /* Call tcp_fasttmr() every 250 ms */ + tcp_fasttmr(); + + if (++tcp_timer & 1) { + /* Call tcp_tmr() every 500 ms, i.e., every other timer + tcp_tmr() is called. */ + tcp_slowtmr(); + } +} + +/** + * Closes the connection held by the PCB. + * + * Listening pcbs are freed and may not be referenced any more. + * Connection pcbs are freed if not yet connected and may not be referenced + * any more. If a connection is established (at least SYN received or in + * a closing state), the connection is closed, and put in a closing state. + * The pcb is then automatically freed in tcp_slowtmr(). It is therefore + * unsafe to reference it. + * + * @param pcb the tcp_pcb to close + * @return ERR_OK if connection has been closed + * another err_t if closing failed and pcb is not freed + */ +err_t +tcp_close(struct tcp_pcb *pcb) +{ + err_t err; + +#if TCP_DEBUG + LWIP_DEBUGF(TCP_DEBUG, ("tcp_close: closing in ")); + tcp_debug_print_state(pcb->state); +#endif /* TCP_DEBUG */ + + switch (pcb->state) { + case CLOSED: + /* Closing a pcb in the CLOSED state might seem erroneous, + * however, it is in this state once allocated and as yet unused + * and the user needs some way to free it should the need arise. + * Calling tcp_close() with a pcb that has already been closed, (i.e. twice) + * or for a pcb that has been used and then entered the CLOSED state + * is erroneous, but this should never happen as the pcb has in those cases + * been freed, and so any remaining handles are bogus. */ + err = ERR_OK; + TCP_RMV(&tcp_bound_pcbs, pcb); + memp_free(MEMP_TCP_PCB, pcb); + pcb = NULL; + break; + case LISTEN: + err = ERR_OK; + tcp_pcb_remove((struct tcp_pcb **)&tcp_listen_pcbs.pcbs, pcb); + memp_free(MEMP_TCP_PCB_LISTEN, pcb); + pcb = NULL; + break; + case SYN_SENT: + err = ERR_OK; + tcp_pcb_remove(&tcp_active_pcbs, pcb); + memp_free(MEMP_TCP_PCB, pcb); + pcb = NULL; + snmp_inc_tcpattemptfails(); + break; + case SYN_RCVD: + err = tcp_send_ctrl(pcb, TCP_FIN); + if (err == ERR_OK) { + snmp_inc_tcpattemptfails(); + pcb->state = FIN_WAIT_1; + } + break; + case ESTABLISHED: + err = tcp_send_ctrl(pcb, TCP_FIN); + if (err == ERR_OK) { + snmp_inc_tcpestabresets(); + pcb->state = FIN_WAIT_1; + } + break; + case CLOSE_WAIT: + err = tcp_send_ctrl(pcb, TCP_FIN); + if (err == ERR_OK) { + snmp_inc_tcpestabresets(); + pcb->state = LAST_ACK; + } + break; + default: + /* Has already been closed, do nothing. */ + err = ERR_OK; + pcb = NULL; + break; + } + + if (pcb != NULL && err == ERR_OK) { + /* To ensure all data has been sent when tcp_close returns, we have + to make sure tcp_output doesn't fail. + Since we don't really have to ensure all data has been sent when tcp_close + returns (unsent data is sent from tcp timer functions, also), we don't care + for the return value of tcp_output for now. */ + /* @todo: When implementing SO_LINGER, this must be changed somehow: + If SOF_LINGER is set, the data should be sent when tcp_close returns. */ + tcp_output(pcb); + } + return err; +} + +/** + * Abandons a connection and optionally sends a RST to the remote + * host. Deletes the local protocol control block. This is done when + * a connection is killed because of shortage of memory. + * + * @param pcb the tcp_pcb to abort + * @param reset boolean to indicate whether a reset should be sent + */ +void +tcp_abandon(struct tcp_pcb *pcb, int reset) +{ + u32_t seqno, ackno; + u16_t remote_port, local_port; + struct ip_addr remote_ip, local_ip; +#if LWIP_CALLBACK_API + void (* errf)(void *arg, err_t err); +#endif /* LWIP_CALLBACK_API */ + void *errf_arg; + + + /* Figure out on which TCP PCB list we are, and remove us. If we + are in an active state, call the receive function associated with + the PCB with a NULL argument, and send an RST to the remote end. */ + if (pcb->state == TIME_WAIT) { + tcp_pcb_remove(&tcp_tw_pcbs, pcb); + memp_free(MEMP_TCP_PCB, pcb); + } else { + seqno = pcb->snd_nxt; + ackno = pcb->rcv_nxt; + ip_addr_set(&local_ip, &(pcb->local_ip)); + ip_addr_set(&remote_ip, &(pcb->remote_ip)); + local_port = pcb->local_port; + remote_port = pcb->remote_port; +#if LWIP_CALLBACK_API + errf = pcb->errf; +#endif /* LWIP_CALLBACK_API */ + errf_arg = pcb->callback_arg; + tcp_pcb_remove(&tcp_active_pcbs, pcb); + if (pcb->unacked != NULL) { + tcp_segs_free(pcb->unacked); + } + if (pcb->unsent != NULL) { + tcp_segs_free(pcb->unsent); + } +#if TCP_QUEUE_OOSEQ + if (pcb->ooseq != NULL) { + tcp_segs_free(pcb->ooseq); + } +#endif /* TCP_QUEUE_OOSEQ */ + memp_free(MEMP_TCP_PCB, pcb); + TCP_EVENT_ERR(errf, errf_arg, ERR_ABRT); + if (reset) { + LWIP_DEBUGF(TCP_RST_DEBUG, ("tcp_abandon: sending RST\n")); + tcp_rst(seqno, ackno, &local_ip, &remote_ip, local_port, remote_port); + } + } +} + +/** + * Binds the connection to a local portnumber and IP address. If the + * IP address is not given (i.e., ipaddr == NULL), the IP address of + * the outgoing network interface is used instead. + * + * @param pcb the tcp_pcb to bind (no check is done whether this pcb is + * already bound!) + * @param ipaddr the local ip address to bind to (use IP_ADDR_ANY to bind + * to any local address + * @param port the local port to bind to + * @return ERR_USE if the port is already in use + * ERR_OK if bound + */ +err_t +tcp_bind(struct tcp_pcb *pcb, struct ip_addr *ipaddr, u16_t port) +{ + struct tcp_pcb *cpcb; + + LWIP_ERROR("tcp_bind: can only bind in state CLOSED", pcb->state == CLOSED, return ERR_ISCONN); + + if (port == 0) { + port = tcp_new_port(); + } + /* Check if the address already is in use. */ + /* Check the listen pcbs. */ + for(cpcb = (struct tcp_pcb *)tcp_listen_pcbs.pcbs; + cpcb != NULL; cpcb = cpcb->next) { + if (cpcb->local_port == port) { + if (ip_addr_isany(&(cpcb->local_ip)) || + ip_addr_isany(ipaddr) || + ip_addr_cmp(&(cpcb->local_ip), ipaddr)) { + return ERR_USE; + } + } + } + /* Check the connected pcbs. */ + for(cpcb = tcp_active_pcbs; + cpcb != NULL; cpcb = cpcb->next) { + if (cpcb->local_port == port) { + if (ip_addr_isany(&(cpcb->local_ip)) || + ip_addr_isany(ipaddr) || + ip_addr_cmp(&(cpcb->local_ip), ipaddr)) { + return ERR_USE; + } + } + } + /* Check the bound, not yet connected pcbs. */ + for(cpcb = tcp_bound_pcbs; cpcb != NULL; cpcb = cpcb->next) { + if (cpcb->local_port == port) { + if (ip_addr_isany(&(cpcb->local_ip)) || + ip_addr_isany(ipaddr) || + ip_addr_cmp(&(cpcb->local_ip), ipaddr)) { + return ERR_USE; + } + } + } + /* @todo: until SO_REUSEADDR is implemented (see task #6995 on savannah), + * we have to check the pcbs in TIME-WAIT state, also: */ + for(cpcb = tcp_tw_pcbs; cpcb != NULL; cpcb = cpcb->next) { + if (cpcb->local_port == port) { + if (ip_addr_cmp(&(cpcb->local_ip), ipaddr)) { + return ERR_USE; + } + } + } + + if (!ip_addr_isany(ipaddr)) { + pcb->local_ip = *ipaddr; + } + pcb->local_port = port; + TCP_REG(&tcp_bound_pcbs, pcb); + LWIP_DEBUGF(TCP_DEBUG, ("tcp_bind: bind to port %"U16_F"\n", port)); + return ERR_OK; +} +#if LWIP_CALLBACK_API +/** + * Default accept callback if no accept callback is specified by the user. + */ +static err_t +tcp_accept_null(void *arg, struct tcp_pcb *pcb, err_t err) +{ + LWIP_UNUSED_ARG(arg); + LWIP_UNUSED_ARG(pcb); + LWIP_UNUSED_ARG(err); + + return ERR_ABRT; +} +#endif /* LWIP_CALLBACK_API */ + +/** + * Set the state of the connection to be LISTEN, which means that it + * is able to accept incoming connections. The protocol control block + * is reallocated in order to consume less memory. Setting the + * connection to LISTEN is an irreversible process. + * + * @param pcb the original tcp_pcb + * @param backlog the incoming connections queue limit + * @return tcp_pcb used for listening, consumes less memory. + * + * @note The original tcp_pcb is freed. This function therefore has to be + * called like this: + * tpcb = tcp_listen(tpcb); + */ +struct tcp_pcb * +tcp_listen_with_backlog(struct tcp_pcb *pcb, u8_t backlog) +{ + struct tcp_pcb_listen *lpcb; + + LWIP_UNUSED_ARG(backlog); + LWIP_ERROR("tcp_listen: pcb already connected", pcb->state == CLOSED, return NULL); + + /* already listening? */ + if (pcb->state == LISTEN) { + return pcb; + } + lpcb = memp_malloc(MEMP_TCP_PCB_LISTEN); + if (lpcb == NULL) { + return NULL; + } + lpcb->callback_arg = pcb->callback_arg; + lpcb->local_port = pcb->local_port; + lpcb->state = LISTEN; + lpcb->so_options = pcb->so_options; + lpcb->so_options |= SOF_ACCEPTCONN; + lpcb->ttl = pcb->ttl; + lpcb->tos = pcb->tos; + ip_addr_set(&lpcb->local_ip, &pcb->local_ip); + TCP_RMV(&tcp_bound_pcbs, pcb); + memp_free(MEMP_TCP_PCB, pcb); +#if LWIP_CALLBACK_API + lpcb->accept = tcp_accept_null; +#endif /* LWIP_CALLBACK_API */ +#if TCP_LISTEN_BACKLOG + lpcb->accepts_pending = 0; + lpcb->backlog = (backlog ? backlog : 1); +#endif /* TCP_LISTEN_BACKLOG */ + TCP_REG(&tcp_listen_pcbs.listen_pcbs, lpcb); + return (struct tcp_pcb *)lpcb; +} + +/** + * Update the state that tracks the available window space to advertise. + * + * Returns how much extra window would be advertised if we sent an + * update now. + */ +u32_t tcp_update_rcv_ann_wnd(struct tcp_pcb *pcb) +{ + u32_t new_right_edge = pcb->rcv_nxt + pcb->rcv_wnd; + + if (TCP_SEQ_GEQ(new_right_edge, pcb->rcv_ann_right_edge + LWIP_MIN((TCP_WND / 2), pcb->mss))) { + /* we can advertise more window */ + pcb->rcv_ann_wnd = pcb->rcv_wnd; + return new_right_edge - pcb->rcv_ann_right_edge; + } else { + if (TCP_SEQ_GT(pcb->rcv_nxt, pcb->rcv_ann_right_edge)) { + /* Can happen due to other end sending out of advertised window, + * but within actual available (but not yet advertised) window */ + pcb->rcv_ann_wnd = 0; + } else { + /* keep the right edge of window constant */ + pcb->rcv_ann_wnd = pcb->rcv_ann_right_edge - pcb->rcv_nxt; + } + return 0; + } +} + +/** + * This function should be called by the application when it has + * processed the data. The purpose is to advertise a larger window + * when the data has been processed. + * + * @param pcb the tcp_pcb for which data is read + * @param len the amount of bytes that have been read by the application + */ +void +tcp_recved(struct tcp_pcb *pcb, u16_t len) +{ + int wnd_inflation; + + LWIP_ASSERT("tcp_recved: len would wrap rcv_wnd\n", + len <= 0xffff - pcb->rcv_wnd ); + + pcb->rcv_wnd += len; + if (pcb->rcv_wnd > TCP_WND) + pcb->rcv_wnd = TCP_WND; + + wnd_inflation = tcp_update_rcv_ann_wnd(pcb); + + /* If the change in the right edge of window is significant (default + * watermark is TCP_WND/2), then send an explicit update now. + * Otherwise wait for a packet to be sent in the normal course of + * events (or more window to be available later) */ + if (wnd_inflation >= TCP_WND_UPDATE_THRESHOLD) + tcp_ack_now(pcb); + + LWIP_DEBUGF(TCP_DEBUG, ("tcp_recved: recveived %"U16_F" bytes, wnd %"U16_F" (%"U16_F").\n", + len, pcb->rcv_wnd, TCP_WND - pcb->rcv_wnd)); +} + +/** + * A nastly hack featuring 'goto' statements that allocates a + * new TCP local port. + * + * @return a new (free) local TCP port number + */ +static u16_t +tcp_new_port(void) +{ + struct tcp_pcb *pcb; +#ifndef TCP_LOCAL_PORT_RANGE_START +#define TCP_LOCAL_PORT_RANGE_START 4096 +#define TCP_LOCAL_PORT_RANGE_END 0x7fff +#endif + static u16_t port = TCP_LOCAL_PORT_RANGE_START; + + again: + if (++port > TCP_LOCAL_PORT_RANGE_END) { + port = TCP_LOCAL_PORT_RANGE_START; + } + + for(pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) { + if (pcb->local_port == port) { + goto again; + } + } + for(pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) { + if (pcb->local_port == port) { + goto again; + } + } + for(pcb = (struct tcp_pcb *)tcp_listen_pcbs.pcbs; pcb != NULL; pcb = pcb->next) { + if (pcb->local_port == port) { + goto again; + } + } + return port; +} + +/** + * Connects to another host. The function given as the "connected" + * argument will be called when the connection has been established. + * + * @param pcb the tcp_pcb used to establish the connection + * @param ipaddr the remote ip address to connect to + * @param port the remote tcp port to connect to + * @param connected callback function to call when connected (or on error) + * @return ERR_VAL if invalid arguments are given + * ERR_OK if connect request has been sent + * other err_t values if connect request couldn't be sent + */ +err_t +tcp_connect(struct tcp_pcb *pcb, struct ip_addr *ipaddr, u16_t port, + err_t (* connected)(void *arg, struct tcp_pcb *tpcb, err_t err)) +{ + err_t ret; + u32_t iss; + + LWIP_ERROR("tcp_connect: can only connected from state CLOSED", pcb->state == CLOSED, return ERR_ISCONN); + + LWIP_DEBUGF(TCP_DEBUG, ("tcp_connect to port %"U16_F"\n", port)); + if (ipaddr != NULL) { + pcb->remote_ip = *ipaddr; + } else { + return ERR_VAL; + } + pcb->remote_port = port; + if (pcb->local_port == 0) { + pcb->local_port = tcp_new_port(); + } + iss = tcp_next_iss(); + pcb->rcv_nxt = 0; + pcb->snd_nxt = iss; + pcb->lastack = iss - 1; + pcb->snd_lbb = iss - 1; + pcb->rcv_wnd = TCP_WND; + pcb->rcv_ann_wnd = TCP_WND; + pcb->rcv_ann_right_edge = pcb->rcv_nxt; + pcb->snd_wnd = TCP_WND; + /* As initial send MSS, we use TCP_MSS but limit it to 536. + The send MSS is updated when an MSS option is received. */ + pcb->mss = (TCP_MSS > 536) ? 536 : TCP_MSS; +#if TCP_CALCULATE_EFF_SEND_MSS + pcb->mss = tcp_eff_send_mss(pcb->mss, ipaddr); +#endif /* TCP_CALCULATE_EFF_SEND_MSS */ + pcb->cwnd = 1; + pcb->ssthresh = pcb->mss * 10; + pcb->state = SYN_SENT; +#if LWIP_CALLBACK_API + pcb->connected = connected; +#endif /* LWIP_CALLBACK_API */ + TCP_RMV(&tcp_bound_pcbs, pcb); + TCP_REG(&tcp_active_pcbs, pcb); + + snmp_inc_tcpactiveopens(); + + ret = tcp_enqueue(pcb, NULL, 0, TCP_SYN, 0, TF_SEG_OPTS_MSS +#if LWIP_TCP_TIMESTAMPS + | TF_SEG_OPTS_TS +#endif + ); + if (ret == ERR_OK) { + tcp_output(pcb); + } + return ret; +} + +/** + * Called every 500 ms and implements the retransmission timer and the timer that + * removes PCBs that have been in TIME-WAIT for enough time. It also increments + * various timers such as the inactivity timer in each PCB. + * + * Automatically called from tcp_tmr(). + */ +void +tcp_slowtmr(void) +{ + struct tcp_pcb *pcb, *pcb2, *prev; + u16_t eff_wnd; + u8_t pcb_remove; /* flag if a PCB should be removed */ + u8_t pcb_reset; /* flag if a RST should be sent when removing */ + err_t err; + + err = ERR_OK; + + ++tcp_ticks; + + /* Steps through all of the active PCBs. */ + prev = NULL; + pcb = tcp_active_pcbs; + if (pcb == NULL) { + LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: no active pcbs\n")); + } + while (pcb != NULL) { + LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: processing active pcb\n")); + LWIP_ASSERT("tcp_slowtmr: active pcb->state != CLOSED\n", pcb->state != CLOSED); + LWIP_ASSERT("tcp_slowtmr: active pcb->state != LISTEN\n", pcb->state != LISTEN); + LWIP_ASSERT("tcp_slowtmr: active pcb->state != TIME-WAIT\n", pcb->state != TIME_WAIT); + + pcb_remove = 0; + pcb_reset = 0; + + if (pcb->state == SYN_SENT && pcb->nrtx == TCP_SYNMAXRTX) { + ++pcb_remove; + LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: max SYN retries reached\n")); + } + else if (pcb->nrtx == TCP_MAXRTX) { + ++pcb_remove; + LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: max DATA retries reached\n")); + } else { + if (pcb->persist_backoff > 0) { + /* If snd_wnd is zero, use persist timer to send 1 byte probes + * instead of using the standard retransmission mechanism. */ + pcb->persist_cnt++; + if (pcb->persist_cnt >= tcp_persist_backoff[pcb->persist_backoff-1]) { + pcb->persist_cnt = 0; + if (pcb->persist_backoff < sizeof(tcp_persist_backoff)) { + pcb->persist_backoff++; + } + tcp_zero_window_probe(pcb); + } + } else { + /* Increase the retransmission timer if it is running */ + if(pcb->rtime >= 0) + ++pcb->rtime; + + if (pcb->unacked != NULL && pcb->rtime >= pcb->rto) { + /* Time for a retransmission. */ + LWIP_DEBUGF(TCP_RTO_DEBUG, ("tcp_slowtmr: rtime %"S16_F + " pcb->rto %"S16_F"\n", + pcb->rtime, pcb->rto)); + + /* Double retransmission time-out unless we are trying to + * connect to somebody (i.e., we are in SYN_SENT). */ + if (pcb->state != SYN_SENT) { + pcb->rto = ((pcb->sa >> 3) + pcb->sv) << tcp_backoff[pcb->nrtx]; + } + + /* Reset the retransmission timer. */ + pcb->rtime = 0; + + /* Reduce congestion window and ssthresh. */ + eff_wnd = LWIP_MIN(pcb->cwnd, pcb->snd_wnd); + pcb->ssthresh = eff_wnd >> 1; + if (pcb->ssthresh < pcb->mss) { + pcb->ssthresh = pcb->mss * 2; + } + pcb->cwnd = pcb->mss; + LWIP_DEBUGF(TCP_CWND_DEBUG, ("tcp_slowtmr: cwnd %"U16_F + " ssthresh %"U16_F"\n", + pcb->cwnd, pcb->ssthresh)); + + /* The following needs to be called AFTER cwnd is set to one + mss - STJ */ + tcp_rexmit_rto(pcb); + } + } + } + /* Check if this PCB has stayed too long in FIN-WAIT-2 */ + if (pcb->state == FIN_WAIT_2) { + if ((u32_t)(tcp_ticks - pcb->tmr) > + TCP_FIN_WAIT_TIMEOUT / TCP_SLOW_INTERVAL) { + ++pcb_remove; + LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: removing pcb stuck in FIN-WAIT-2\n")); + } + } + + /* Check if KEEPALIVE should be sent */ + if((pcb->so_options & SOF_KEEPALIVE) && + ((pcb->state == ESTABLISHED) || + (pcb->state == CLOSE_WAIT))) { +#if LWIP_TCP_KEEPALIVE + if((u32_t)(tcp_ticks - pcb->tmr) > + (pcb->keep_idle + (pcb->keep_cnt*pcb->keep_intvl)) + / TCP_SLOW_INTERVAL) +#else + if((u32_t)(tcp_ticks - pcb->tmr) > + (pcb->keep_idle + TCP_MAXIDLE) / TCP_SLOW_INTERVAL) +#endif /* LWIP_TCP_KEEPALIVE */ + { + LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: KEEPALIVE timeout. Aborting connection to %"U16_F".%"U16_F".%"U16_F".%"U16_F".\n", + ip4_addr1(&pcb->remote_ip), ip4_addr2(&pcb->remote_ip), + ip4_addr3(&pcb->remote_ip), ip4_addr4(&pcb->remote_ip))); + + ++pcb_remove; + ++pcb_reset; + } +#if LWIP_TCP_KEEPALIVE + else if((u32_t)(tcp_ticks - pcb->tmr) > + (pcb->keep_idle + pcb->keep_cnt_sent * pcb->keep_intvl) + / TCP_SLOW_INTERVAL) +#else + else if((u32_t)(tcp_ticks - pcb->tmr) > + (pcb->keep_idle + pcb->keep_cnt_sent * TCP_KEEPINTVL_DEFAULT) + / TCP_SLOW_INTERVAL) +#endif /* LWIP_TCP_KEEPALIVE */ + { + tcp_keepalive(pcb); + pcb->keep_cnt_sent++; + } + } + + /* If this PCB has queued out of sequence data, but has been + inactive for too long, will drop the data (it will eventually + be retransmitted). */ +#if TCP_QUEUE_OOSEQ + if (pcb->ooseq != NULL && + (u32_t)tcp_ticks - pcb->tmr >= pcb->rto * TCP_OOSEQ_TIMEOUT) { + tcp_segs_free(pcb->ooseq); + pcb->ooseq = NULL; + LWIP_DEBUGF(TCP_CWND_DEBUG, ("tcp_slowtmr: dropping OOSEQ queued data\n")); + } +#endif /* TCP_QUEUE_OOSEQ */ + + /* Check if this PCB has stayed too long in SYN-RCVD */ + if (pcb->state == SYN_RCVD) { + if ((u32_t)(tcp_ticks - pcb->tmr) > + TCP_SYN_RCVD_TIMEOUT / TCP_SLOW_INTERVAL) { + ++pcb_remove; + LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: removing pcb stuck in SYN-RCVD\n")); + } + } + + /* Check if this PCB has stayed too long in LAST-ACK */ + if (pcb->state == LAST_ACK) { + if ((u32_t)(tcp_ticks - pcb->tmr) > 2 * TCP_MSL / TCP_SLOW_INTERVAL) { + ++pcb_remove; + LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: removing pcb stuck in LAST-ACK\n")); + } + } + + /* If the PCB should be removed, do it. */ + if (pcb_remove) { + tcp_pcb_purge(pcb); + /* Remove PCB from tcp_active_pcbs list. */ + if (prev != NULL) { + LWIP_ASSERT("tcp_slowtmr: middle tcp != tcp_active_pcbs", pcb != tcp_active_pcbs); + prev->next = pcb->next; + } else { + /* This PCB was the first. */ + LWIP_ASSERT("tcp_slowtmr: first pcb == tcp_active_pcbs", tcp_active_pcbs == pcb); + tcp_active_pcbs = pcb->next; + } + + TCP_EVENT_ERR(pcb->errf, pcb->callback_arg, ERR_ABRT); + if (pcb_reset) { + tcp_rst(pcb->snd_nxt, pcb->rcv_nxt, &pcb->local_ip, &pcb->remote_ip, + pcb->local_port, pcb->remote_port); + } + + pcb2 = pcb->next; + memp_free(MEMP_TCP_PCB, pcb); + pcb = pcb2; + } else { + + /* We check if we should poll the connection. */ + ++pcb->polltmr; + if (pcb->polltmr >= pcb->pollinterval) { + pcb->polltmr = 0; + LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: polling application\n")); + TCP_EVENT_POLL(pcb, err); + if (err == ERR_OK) { + tcp_output(pcb); + } + } + + prev = pcb; + pcb = pcb->next; + } + } + + + /* Steps through all of the TIME-WAIT PCBs. */ + prev = NULL; + pcb = tcp_tw_pcbs; + while (pcb != NULL) { + LWIP_ASSERT("tcp_slowtmr: TIME-WAIT pcb->state == TIME-WAIT", pcb->state == TIME_WAIT); + pcb_remove = 0; + + /* Check if this PCB has stayed long enough in TIME-WAIT */ + if ((u32_t)(tcp_ticks - pcb->tmr) > 2 * TCP_MSL / TCP_SLOW_INTERVAL) { + ++pcb_remove; + } + + + + /* If the PCB should be removed, do it. */ + if (pcb_remove) { + tcp_pcb_purge(pcb); + /* Remove PCB from tcp_tw_pcbs list. */ + if (prev != NULL) { + LWIP_ASSERT("tcp_slowtmr: middle tcp != tcp_tw_pcbs", pcb != tcp_tw_pcbs); + prev->next = pcb->next; + } else { + /* This PCB was the first. */ + LWIP_ASSERT("tcp_slowtmr: first pcb == tcp_tw_pcbs", tcp_tw_pcbs == pcb); + tcp_tw_pcbs = pcb->next; + } + pcb2 = pcb->next; + memp_free(MEMP_TCP_PCB, pcb); + pcb = pcb2; + } else { + prev = pcb; + pcb = pcb->next; + } + } +} + +/** + * Is called every TCP_FAST_INTERVAL (250 ms) and process data previously + * "refused" by upper layer (application) and sends delayed ACKs. + * + * Automatically called from tcp_tmr(). + */ +void +tcp_fasttmr(void) +{ + struct tcp_pcb *pcb; + + for(pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) { + /* If there is data which was previously "refused" by upper layer */ + if (pcb->refused_data != NULL) { + /* Notify again application with data previously received. */ + err_t err; + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_fasttmr: notify kept packet\n")); + TCP_EVENT_RECV(pcb, pcb->refused_data, ERR_OK, err); + if (err == ERR_OK) { + pcb->refused_data = NULL; + } + } + + /* send delayed ACKs */ + if (pcb->flags & TF_ACK_DELAY) { + LWIP_DEBUGF(TCP_DEBUG, ("tcp_fasttmr: delayed ACK\n")); + tcp_ack_now(pcb); + pcb->flags &= ~(TF_ACK_DELAY | TF_ACK_NOW); + } + } +} + +/** + * Deallocates a list of TCP segments (tcp_seg structures). + * + * @param seg tcp_seg list of TCP segments to free + * @return the number of pbufs that were deallocated + */ +u8_t +tcp_segs_free(struct tcp_seg *seg) +{ + u8_t count = 0; + struct tcp_seg *next; + while (seg != NULL) { + next = seg->next; + count += tcp_seg_free(seg); + seg = next; + } + return count; +} + +/** + * Frees a TCP segment (tcp_seg structure). + * + * @param seg single tcp_seg to free + * @return the number of pbufs that were deallocated + */ +u8_t +tcp_seg_free(struct tcp_seg *seg) +{ + u8_t count = 0; + + if (seg != NULL) { + if (seg->p != NULL) { + count = pbuf_free(seg->p); +#if TCP_DEBUG + seg->p = NULL; +#endif /* TCP_DEBUG */ + } + memp_free(MEMP_TCP_SEG, seg); + } + return count; +} + +/** + * Sets the priority of a connection. + * + * @param pcb the tcp_pcb to manipulate + * @param prio new priority + */ +void +tcp_setprio(struct tcp_pcb *pcb, u8_t prio) +{ + pcb->prio = prio; +} +#if TCP_QUEUE_OOSEQ + +/** + * Returns a copy of the given TCP segment. + * The pbuf and data are not copied, only the pointers + * + * @param seg the old tcp_seg + * @return a copy of seg + */ +struct tcp_seg * +tcp_seg_copy(struct tcp_seg *seg) +{ + struct tcp_seg *cseg; + + cseg = memp_malloc(MEMP_TCP_SEG); + if (cseg == NULL) { + return NULL; + } + SMEMCPY((u8_t *)cseg, (const u8_t *)seg, sizeof(struct tcp_seg)); + pbuf_ref(cseg->p); + return cseg; +} +#endif + +#if LWIP_CALLBACK_API +/** + * Default receive callback that is called if the user didn't register + * a recv callback for the pcb. + */ +err_t +tcp_recv_null(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err) +{ + LWIP_UNUSED_ARG(arg); + if (p != NULL) { + tcp_recved(pcb, p->tot_len); + pbuf_free(p); + } else if (err == ERR_OK) { + return tcp_close(pcb); + } + return ERR_OK; +} +#endif /* LWIP_CALLBACK_API */ + +/** + * Kills the oldest active connection that has lower priority than prio. + * + * @param prio minimum priority + */ +static void +tcp_kill_prio(u8_t prio) +{ + struct tcp_pcb *pcb, *inactive; + u32_t inactivity; + u8_t mprio; + + + mprio = TCP_PRIO_MAX; + + /* We kill the oldest active connection that has lower priority than prio. */ + inactivity = 0; + inactive = NULL; + for(pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) { + if (pcb->prio <= prio && + pcb->prio <= mprio && + (u32_t)(tcp_ticks - pcb->tmr) >= inactivity) { + inactivity = tcp_ticks - pcb->tmr; + inactive = pcb; + mprio = pcb->prio; + } + } + if (inactive != NULL) { + LWIP_DEBUGF(TCP_DEBUG, ("tcp_kill_prio: killing oldest PCB %p (%"S32_F")\n", + (void *)inactive, inactivity)); + tcp_abort(inactive); + } +} + +/** + * Kills the oldest connection that is in TIME_WAIT state. + * Called from tcp_alloc() if no more connections are available. + */ +static void +tcp_kill_timewait(void) +{ + struct tcp_pcb *pcb, *inactive; + u32_t inactivity; + + inactivity = 0; + inactive = NULL; + /* Go through the list of TIME_WAIT pcbs and get the oldest pcb. */ + for(pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) { + if ((u32_t)(tcp_ticks - pcb->tmr) >= inactivity) { + inactivity = tcp_ticks - pcb->tmr; + inactive = pcb; + } + } + if (inactive != NULL) { + LWIP_DEBUGF(TCP_DEBUG, ("tcp_kill_timewait: killing oldest TIME-WAIT PCB %p (%"S32_F")\n", + (void *)inactive, inactivity)); + tcp_abort(inactive); + } +} + +/** + * Allocate a new tcp_pcb structure. + * + * @param prio priority for the new pcb + * @return a new tcp_pcb that initially is in state CLOSED + */ +struct tcp_pcb * +tcp_alloc(u8_t prio) +{ + struct tcp_pcb *pcb; + u32_t iss; + + pcb = memp_malloc(MEMP_TCP_PCB); + if (pcb == NULL) { + /* Try killing oldest connection in TIME-WAIT. */ + LWIP_DEBUGF(TCP_DEBUG, ("tcp_alloc: killing off oldest TIME-WAIT connection\n")); + tcp_kill_timewait(); + /* Try to allocate a tcp_pcb again. */ + pcb = memp_malloc(MEMP_TCP_PCB); + if (pcb == NULL) { + /* Try killing active connections with lower priority than the new one. */ + LWIP_DEBUGF(TCP_DEBUG, ("tcp_alloc: killing connection with prio lower than %d\n", prio)); + tcp_kill_prio(prio); + /* Try to allocate a tcp_pcb again. */ + pcb = memp_malloc(MEMP_TCP_PCB); + if (pcb != NULL) { + /* adjust err stats: memp_malloc failed twice before */ + MEMP_STATS_DEC(err, MEMP_TCP_PCB); + } + } + if (pcb != NULL) { + /* adjust err stats: timewait PCB was freed above */ + MEMP_STATS_DEC(err, MEMP_TCP_PCB); + } + } + if (pcb != NULL) { + memset(pcb, 0, sizeof(struct tcp_pcb)); + pcb->prio = TCP_PRIO_NORMAL; + pcb->snd_buf = TCP_SND_BUF; + pcb->snd_queuelen = 0; + pcb->rcv_wnd = TCP_WND; + pcb->rcv_ann_wnd = TCP_WND; + pcb->tos = 0; + pcb->ttl = TCP_TTL; + /* As initial send MSS, we use TCP_MSS but limit it to 536. + The send MSS is updated when an MSS option is received. */ + pcb->mss = (TCP_MSS > 536) ? 536 : TCP_MSS; + pcb->rto = 3000 / TCP_SLOW_INTERVAL; + pcb->sa = 0; + pcb->sv = 3000 / TCP_SLOW_INTERVAL; + pcb->rtime = -1; + pcb->cwnd = 1; + iss = tcp_next_iss(); + pcb->snd_wl2 = iss; + pcb->snd_nxt = iss; + pcb->lastack = iss; + pcb->snd_lbb = iss; + pcb->tmr = tcp_ticks; + + pcb->polltmr = 0; + +#if LWIP_CALLBACK_API + pcb->recv = tcp_recv_null; +#endif /* LWIP_CALLBACK_API */ + + /* Init KEEPALIVE timer */ + pcb->keep_idle = TCP_KEEPIDLE_DEFAULT; + +#if LWIP_TCP_KEEPALIVE + pcb->keep_intvl = TCP_KEEPINTVL_DEFAULT; + pcb->keep_cnt = TCP_KEEPCNT_DEFAULT; +#endif /* LWIP_TCP_KEEPALIVE */ + + pcb->keep_cnt_sent = 0; + } + return pcb; +} + +/** + * Creates a new TCP protocol control block but doesn't place it on + * any of the TCP PCB lists. + * The pcb is not put on any list until binding using tcp_bind(). + * + * @internal: Maybe there should be a idle TCP PCB list where these + * PCBs are put on. Port reservation using tcp_bind() is implemented but + * allocated pcbs that are not bound can't be killed automatically if wanting + * to allocate a pcb with higher prio (@see tcp_kill_prio()) + * + * @return a new tcp_pcb that initially is in state CLOSED + */ +struct tcp_pcb * +tcp_new(void) +{ + return tcp_alloc(TCP_PRIO_NORMAL); +} + +/** + * Used to specify the argument that should be passed callback + * functions. + * + * @param pcb tcp_pcb to set the callback argument + * @param arg void pointer argument to pass to callback functions + */ +void +tcp_arg(struct tcp_pcb *pcb, void *arg) +{ + pcb->callback_arg = arg; +} +#if LWIP_CALLBACK_API + +/** + * Used to specify the function that should be called when a TCP + * connection receives data. + * + * @param pcb tcp_pcb to set the recv callback + * @param recv callback function to call for this pcb when data is received + */ +void +tcp_recv(struct tcp_pcb *pcb, + err_t (* recv)(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, err_t err)) +{ + pcb->recv = recv; +} + +/** + * Used to specify the function that should be called when TCP data + * has been successfully delivered to the remote host. + * + * @param pcb tcp_pcb to set the sent callback + * @param sent callback function to call for this pcb when data is successfully sent + */ +void +tcp_sent(struct tcp_pcb *pcb, + err_t (* sent)(void *arg, struct tcp_pcb *tpcb, u16_t len)) +{ + pcb->sent = sent; +} + +/** + * Used to specify the function that should be called when a fatal error + * has occured on the connection. + * + * @param pcb tcp_pcb to set the err callback + * @param errf callback function to call for this pcb when a fatal error + * has occured on the connection + */ +void +tcp_err(struct tcp_pcb *pcb, + void (* errf)(void *arg, err_t err)) +{ + pcb->errf = errf; +} + +/** + * Used for specifying the function that should be called when a + * LISTENing connection has been connected to another host. + * + * @param pcb tcp_pcb to set the accept callback + * @param accept callback function to call for this pcb when LISTENing + * connection has been connected to another host + */ +void +tcp_accept(struct tcp_pcb *pcb, + err_t (* accept)(void *arg, struct tcp_pcb *newpcb, err_t err)) +{ + pcb->accept = accept; +} +#endif /* LWIP_CALLBACK_API */ + + +/** + * Used to specify the function that should be called periodically + * from TCP. The interval is specified in terms of the TCP coarse + * timer interval, which is called twice a second. + * + */ +void +tcp_poll(struct tcp_pcb *pcb, + err_t (* poll)(void *arg, struct tcp_pcb *tpcb), u8_t interval) +{ +#if LWIP_CALLBACK_API + pcb->poll = poll; +#endif /* LWIP_CALLBACK_API */ + pcb->pollinterval = interval; +} + +/** + * Purges a TCP PCB. Removes any buffered data and frees the buffer memory + * (pcb->ooseq, pcb->unsent and pcb->unacked are freed). + * + * @param pcb tcp_pcb to purge. The pcb itself is not deallocated! + */ +void +tcp_pcb_purge(struct tcp_pcb *pcb) +{ + if (pcb->state != CLOSED && + pcb->state != TIME_WAIT && + pcb->state != LISTEN) { + + LWIP_DEBUGF(TCP_DEBUG, ("tcp_pcb_purge\n")); + +#if TCP_LISTEN_BACKLOG + if (pcb->state == SYN_RCVD) { + /* Need to find the corresponding listen_pcb and decrease its accepts_pending */ + struct tcp_pcb_listen *lpcb; + LWIP_ASSERT("tcp_pcb_purge: pcb->state == SYN_RCVD but tcp_listen_pcbs is NULL", + tcp_listen_pcbs.listen_pcbs != NULL); + for (lpcb = tcp_listen_pcbs.listen_pcbs; lpcb != NULL; lpcb = lpcb->next) { + if ((lpcb->local_port == pcb->local_port) && + (ip_addr_isany(&lpcb->local_ip) || + ip_addr_cmp(&pcb->local_ip, &lpcb->local_ip))) { + /* port and address of the listen pcb match the timed-out pcb */ + LWIP_ASSERT("tcp_pcb_purge: listen pcb does not have accepts pending", + lpcb->accepts_pending > 0); + lpcb->accepts_pending--; + break; + } + } + } +#endif /* TCP_LISTEN_BACKLOG */ + + + if (pcb->refused_data != NULL) { + LWIP_DEBUGF(TCP_DEBUG, ("tcp_pcb_purge: data left on ->refused_data\n")); + pbuf_free(pcb->refused_data); + pcb->refused_data = NULL; + } + if (pcb->unsent != NULL) { + LWIP_DEBUGF(TCP_DEBUG, ("tcp_pcb_purge: not all data sent\n")); + } + if (pcb->unacked != NULL) { + LWIP_DEBUGF(TCP_DEBUG, ("tcp_pcb_purge: data left on ->unacked\n")); + } +#if TCP_QUEUE_OOSEQ /* LW */ + if (pcb->ooseq != NULL) { + LWIP_DEBUGF(TCP_DEBUG, ("tcp_pcb_purge: data left on ->ooseq\n")); + } + + /* Stop the retransmission timer as it will expect data on unacked + queue if it fires */ + pcb->rtime = -1; + + tcp_segs_free(pcb->ooseq); + pcb->ooseq = NULL; +#endif /* TCP_QUEUE_OOSEQ */ + tcp_segs_free(pcb->unsent); + tcp_segs_free(pcb->unacked); + pcb->unacked = pcb->unsent = NULL; + } +} + +/** + * Purges the PCB and removes it from a PCB list. Any delayed ACKs are sent first. + * + * @param pcblist PCB list to purge. + * @param pcb tcp_pcb to purge. The pcb itself is NOT deallocated! + */ +void +tcp_pcb_remove(struct tcp_pcb **pcblist, struct tcp_pcb *pcb) +{ + TCP_RMV(pcblist, pcb); + + tcp_pcb_purge(pcb); + + /* if there is an outstanding delayed ACKs, send it */ + if (pcb->state != TIME_WAIT && + pcb->state != LISTEN && + pcb->flags & TF_ACK_DELAY) { + pcb->flags |= TF_ACK_NOW; + tcp_output(pcb); + } + + if (pcb->state != LISTEN) { + LWIP_ASSERT("unsent segments leaking", pcb->unsent == NULL); + LWIP_ASSERT("unacked segments leaking", pcb->unacked == NULL); +#if TCP_QUEUE_OOSEQ + LWIP_ASSERT("ooseq segments leaking", pcb->ooseq == NULL); +#endif /* TCP_QUEUE_OOSEQ */ + } + + pcb->state = CLOSED; + + LWIP_ASSERT("tcp_pcb_remove: tcp_pcbs_sane()", tcp_pcbs_sane()); +} + +/** + * Calculates a new initial sequence number for new connections. + * + * @return u32_t pseudo random sequence number + */ +u32_t +tcp_next_iss(void) +{ + static u32_t iss = 6510; + + iss += tcp_ticks; /* XXX */ + return iss; +} + +#if TCP_CALCULATE_EFF_SEND_MSS +/** + * Calcluates the effective send mss that can be used for a specific IP address + * by using ip_route to determin the netif used to send to the address and + * calculating the minimum of TCP_MSS and that netif's mtu (if set). + */ +u16_t +tcp_eff_send_mss(u16_t sendmss, struct ip_addr *addr) +{ + u16_t mss_s; + struct netif *outif; + + outif = ip_route(addr); + if ((outif != NULL) && (outif->mtu != 0)) { + mss_s = outif->mtu - IP_HLEN - TCP_HLEN; + /* RFC 1122, chap 4.2.2.6: + * Eff.snd.MSS = min(SendMSS+20, MMS_S) - TCPhdrsize - IPoptionsize + * We correct for TCP options in tcp_enqueue(), and don't support + * IP options + */ + sendmss = LWIP_MIN(sendmss, mss_s); + } + return sendmss; +} +#endif /* TCP_CALCULATE_EFF_SEND_MSS */ + +const char* +tcp_debug_state_str(enum tcp_state s) +{ + return tcp_state_str[s]; +} + +#if TCP_DEBUG || TCP_INPUT_DEBUG || TCP_OUTPUT_DEBUG +/** + * Print a tcp header for debugging purposes. + * + * @param tcphdr pointer to a struct tcp_hdr + */ +void +tcp_debug_print(struct tcp_hdr *tcphdr) +{ + LWIP_DEBUGF(TCP_DEBUG, ("TCP header:\n")); + LWIP_DEBUGF(TCP_DEBUG, ("+-------------------------------+\n")); + LWIP_DEBUGF(TCP_DEBUG, ("| %5"U16_F" | %5"U16_F" | (src port, dest port)\n", + ntohs(tcphdr->src), ntohs(tcphdr->dest))); + LWIP_DEBUGF(TCP_DEBUG, ("+-------------------------------+\n")); + LWIP_DEBUGF(TCP_DEBUG, ("| %010"U32_F" | (seq no)\n", + ntohl(tcphdr->seqno))); + LWIP_DEBUGF(TCP_DEBUG, ("+-------------------------------+\n")); + LWIP_DEBUGF(TCP_DEBUG, ("| %010"U32_F" | (ack no)\n", + ntohl(tcphdr->ackno))); + LWIP_DEBUGF(TCP_DEBUG, ("+-------------------------------+\n")); + LWIP_DEBUGF(TCP_DEBUG, ("| %2"U16_F" | |%"U16_F"%"U16_F"%"U16_F"%"U16_F"%"U16_F"%"U16_F"| %5"U16_F" | (hdrlen, flags (", + TCPH_HDRLEN(tcphdr), + TCPH_FLAGS(tcphdr) >> 5 & 1, + TCPH_FLAGS(tcphdr) >> 4 & 1, + TCPH_FLAGS(tcphdr) >> 3 & 1, + TCPH_FLAGS(tcphdr) >> 2 & 1, + TCPH_FLAGS(tcphdr) >> 1 & 1, + TCPH_FLAGS(tcphdr) & 1, + ntohs(tcphdr->wnd))); + tcp_debug_print_flags(TCPH_FLAGS(tcphdr)); + LWIP_DEBUGF(TCP_DEBUG, ("), win)\n")); + LWIP_DEBUGF(TCP_DEBUG, ("+-------------------------------+\n")); + LWIP_DEBUGF(TCP_DEBUG, ("| 0x%04"X16_F" | %5"U16_F" | (chksum, urgp)\n", + ntohs(tcphdr->chksum), ntohs(tcphdr->urgp))); + LWIP_DEBUGF(TCP_DEBUG, ("+-------------------------------+\n")); +} + +/** + * Print a tcp state for debugging purposes. + * + * @param s enum tcp_state to print + */ +void +tcp_debug_print_state(enum tcp_state s) +{ + LWIP_DEBUGF(TCP_DEBUG, ("State: %s\n", tcp_state_str[s])); +} + +/** + * Print tcp flags for debugging purposes. + * + * @param flags tcp flags, all active flags are printed + */ +void +tcp_debug_print_flags(u8_t flags) +{ + if (flags & TCP_FIN) { + LWIP_DEBUGF(TCP_DEBUG, ("FIN ")); + } + if (flags & TCP_SYN) { + LWIP_DEBUGF(TCP_DEBUG, ("SYN ")); + } + if (flags & TCP_RST) { + LWIP_DEBUGF(TCP_DEBUG, ("RST ")); + } + if (flags & TCP_PSH) { + LWIP_DEBUGF(TCP_DEBUG, ("PSH ")); + } + if (flags & TCP_ACK) { + LWIP_DEBUGF(TCP_DEBUG, ("ACK ")); + } + if (flags & TCP_URG) { + LWIP_DEBUGF(TCP_DEBUG, ("URG ")); + } + if (flags & TCP_ECE) { + LWIP_DEBUGF(TCP_DEBUG, ("ECE ")); + } + if (flags & TCP_CWR) { + LWIP_DEBUGF(TCP_DEBUG, ("CWR ")); + } + LWIP_DEBUGF(TCP_DEBUG, ("\n")); +} + +/** + * Print all tcp_pcbs in every list for debugging purposes. + */ +void +tcp_debug_print_pcbs(void) +{ + struct tcp_pcb *pcb; + LWIP_DEBUGF(TCP_DEBUG, ("Active PCB states:\n")); + for(pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) { + LWIP_DEBUGF(TCP_DEBUG, ("[%p]Local port %"U16_F", foreign port %"U16_F" snd_nxt %"U32_F" rcv_nxt %"U32_F" ", + pcb, pcb->local_port, pcb->remote_port, + pcb->snd_nxt, pcb->rcv_nxt)); + tcp_debug_print_state(pcb->state); + } + LWIP_DEBUGF(TCP_DEBUG, ("Listen PCB states:\n")); + for(pcb = (struct tcp_pcb *)tcp_listen_pcbs.pcbs; pcb != NULL; pcb = pcb->next) { + LWIP_DEBUGF(TCP_DEBUG, ("[%p]Local port %"U16_F", foreign port %"U16_F" snd_nxt %"U32_F" rcv_nxt %"U32_F" ", + pcb, pcb->local_port, pcb->remote_port, + pcb->snd_nxt, pcb->rcv_nxt)); + tcp_debug_print_state(pcb->state); + } + LWIP_DEBUGF(TCP_DEBUG, ("TIME-WAIT PCB states:\n")); + for(pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) { + LWIP_DEBUGF(TCP_DEBUG, ("[%p]Local port %"U16_F", foreign port %"U16_F" snd_nxt %"U32_F" rcv_nxt %"U32_F" ", + pcb, pcb->local_port, pcb->remote_port, + pcb->snd_nxt, pcb->rcv_nxt)); + tcp_debug_print_state(pcb->state); + } +} + +/** + * Check state consistency of the tcp_pcb lists. + */ +s16_t +tcp_pcbs_sane(void) +{ + struct tcp_pcb *pcb; + for(pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) { + LWIP_ASSERT("tcp_pcbs_sane: active pcb->state != CLOSED", pcb->state != CLOSED); + LWIP_ASSERT("tcp_pcbs_sane: active pcb->state != LISTEN", pcb->state != LISTEN); + LWIP_ASSERT("tcp_pcbs_sane: active pcb->state != TIME-WAIT", pcb->state != TIME_WAIT); + } + for(pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) { + LWIP_ASSERT("tcp_pcbs_sane: tw pcb->state == TIME-WAIT", pcb->state == TIME_WAIT); + } + return 1; +} +#endif /* TCP_DEBUG */ + +#endif /* LWIP_TCP */ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/tcp_in.c b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/tcp_in.c new file mode 100644 index 000000000..3930b40f6 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/tcp_in.c @@ -0,0 +1,1508 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * Transmission Control Protocol, incoming traffic + * + * The input processing functions of the TCP layer. + * + * These functions are generally called in the order (ip_input() ->) + * tcp_input() -> * tcp_process() -> tcp_receive() (-> application). + * + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#include "lwip/opt.h" + +#if LWIP_TCP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/tcp.h" +#include "lwip/def.h" +#include "lwip/ip_addr.h" +#include "lwip/netif.h" +#include "lwip/mem.h" +#include "lwip/memp.h" +#include "lwip/inet.h" +#include "lwip/inet_chksum.h" +#include "lwip/stats.h" +#include "lwip/snmp.h" +#include "arch/perf.h" + +/* These variables are global to all functions involved in the input + processing of TCP segments. They are set by the tcp_input() + function. */ +static struct tcp_seg inseg; +static struct tcp_hdr *tcphdr; +static struct ip_hdr *iphdr; +static u32_t seqno, ackno; +static u8_t flags; +static u16_t tcplen; + +static u8_t recv_flags; +static struct pbuf *recv_data; + +struct tcp_pcb *tcp_input_pcb; + +/* Forward declarations. */ +static err_t tcp_process(struct tcp_pcb *pcb); +static void tcp_receive(struct tcp_pcb *pcb); +static void tcp_parseopt(struct tcp_pcb *pcb); + +static err_t tcp_listen_input(struct tcp_pcb_listen *pcb); +static err_t tcp_timewait_input(struct tcp_pcb *pcb); + +/** + * The initial input processing of TCP. It verifies the TCP header, demultiplexes + * the segment between the PCBs and passes it on to tcp_process(), which implements + * the TCP finite state machine. This function is called by the IP layer (in + * ip_input()). + * + * @param p received TCP segment to process (p->payload pointing to the IP header) + * @param inp network interface on which this segment was received + */ +void +tcp_input(struct pbuf *p, struct netif *inp) +{ + struct tcp_pcb *pcb, *prev; + struct tcp_pcb_listen *lpcb; + u8_t hdrlen; + err_t err; + + PERF_START; + + TCP_STATS_INC(tcp.recv); + snmp_inc_tcpinsegs(); + + iphdr = p->payload; + tcphdr = (struct tcp_hdr *)((u8_t *)p->payload + IPH_HL(iphdr) * 4); + +#if TCP_INPUT_DEBUG + tcp_debug_print(tcphdr); +#endif + + /* remove header from payload */ + if (pbuf_header(p, -((s16_t)(IPH_HL(iphdr) * 4))) || (p->tot_len < sizeof(struct tcp_hdr))) { + /* drop short packets */ + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_input: short packet (%"U16_F" bytes) discarded\n", p->tot_len)); + TCP_STATS_INC(tcp.lenerr); + TCP_STATS_INC(tcp.drop); + snmp_inc_tcpinerrs(); + pbuf_free(p); + return; + } + + /* Don't even process incoming broadcasts/multicasts. */ + if (ip_addr_isbroadcast(&(iphdr->dest), inp) || + ip_addr_ismulticast(&(iphdr->dest))) { + TCP_STATS_INC(tcp.proterr); + TCP_STATS_INC(tcp.drop); + snmp_inc_tcpinerrs(); + pbuf_free(p); + return; + } + +#if CHECKSUM_CHECK_TCP + /* Verify TCP checksum. */ + if (inet_chksum_pseudo(p, (struct ip_addr *)&(iphdr->src), + (struct ip_addr *)&(iphdr->dest), + IP_PROTO_TCP, p->tot_len) != 0) { + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_input: packet discarded due to failing checksum 0x%04"X16_F"\n", + inet_chksum_pseudo(p, (struct ip_addr *)&(iphdr->src), (struct ip_addr *)&(iphdr->dest), + IP_PROTO_TCP, p->tot_len))); +#if TCP_DEBUG + tcp_debug_print(tcphdr); +#endif /* TCP_DEBUG */ + TCP_STATS_INC(tcp.chkerr); + TCP_STATS_INC(tcp.drop); + snmp_inc_tcpinerrs(); + pbuf_free(p); + return; + } +#endif + + /* Move the payload pointer in the pbuf so that it points to the + TCP data instead of the TCP header. */ + hdrlen = TCPH_HDRLEN(tcphdr); + if(pbuf_header(p, -(hdrlen * 4))){ + /* drop short packets */ + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_input: short packet\n")); + TCP_STATS_INC(tcp.lenerr); + TCP_STATS_INC(tcp.drop); + snmp_inc_tcpinerrs(); + pbuf_free(p); + return; + } + + /* Convert fields in TCP header to host byte order. */ + tcphdr->src = ntohs(tcphdr->src); + tcphdr->dest = ntohs(tcphdr->dest); + seqno = tcphdr->seqno = ntohl(tcphdr->seqno); + ackno = tcphdr->ackno = ntohl(tcphdr->ackno); + tcphdr->wnd = ntohs(tcphdr->wnd); + + flags = TCPH_FLAGS(tcphdr); + tcplen = p->tot_len + ((flags & (TCP_FIN | TCP_SYN)) ? 1 : 0); + + /* Demultiplex an incoming segment. First, we check if it is destined + for an active connection. */ + prev = NULL; + + + for(pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) { + LWIP_ASSERT("tcp_input: active pcb->state != CLOSED", pcb->state != CLOSED); + LWIP_ASSERT("tcp_input: active pcb->state != TIME-WAIT", pcb->state != TIME_WAIT); + LWIP_ASSERT("tcp_input: active pcb->state != LISTEN", pcb->state != LISTEN); + if (pcb->remote_port == tcphdr->src && + pcb->local_port == tcphdr->dest && + ip_addr_cmp(&(pcb->remote_ip), &(iphdr->src)) && + ip_addr_cmp(&(pcb->local_ip), &(iphdr->dest))) { + + /* Move this PCB to the front of the list so that subsequent + lookups will be faster (we exploit locality in TCP segment + arrivals). */ + LWIP_ASSERT("tcp_input: pcb->next != pcb (before cache)", pcb->next != pcb); + if (prev != NULL) { + prev->next = pcb->next; + pcb->next = tcp_active_pcbs; + tcp_active_pcbs = pcb; + } + LWIP_ASSERT("tcp_input: pcb->next != pcb (after cache)", pcb->next != pcb); + break; + } + prev = pcb; + } + + if (pcb == NULL) { + /* If it did not go to an active connection, we check the connections + in the TIME-WAIT state. */ + for(pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) { + LWIP_ASSERT("tcp_input: TIME-WAIT pcb->state == TIME-WAIT", pcb->state == TIME_WAIT); + if (pcb->remote_port == tcphdr->src && + pcb->local_port == tcphdr->dest && + ip_addr_cmp(&(pcb->remote_ip), &(iphdr->src)) && + ip_addr_cmp(&(pcb->local_ip), &(iphdr->dest))) { + /* We don't really care enough to move this PCB to the front + of the list since we are not very likely to receive that + many segments for connections in TIME-WAIT. */ + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_input: packed for TIME_WAITing connection.\n")); + tcp_timewait_input(pcb); + pbuf_free(p); + return; + } + } + + /* Finally, if we still did not get a match, we check all PCBs that + are LISTENing for incoming connections. */ + prev = NULL; + for(lpcb = tcp_listen_pcbs.listen_pcbs; lpcb != NULL; lpcb = lpcb->next) { + if ((ip_addr_isany(&(lpcb->local_ip)) || + ip_addr_cmp(&(lpcb->local_ip), &(iphdr->dest))) && + lpcb->local_port == tcphdr->dest) { + /* Move this PCB to the front of the list so that subsequent + lookups will be faster (we exploit locality in TCP segment + arrivals). */ + if (prev != NULL) { + ((struct tcp_pcb_listen *)prev)->next = lpcb->next; + /* our successor is the remainder of the listening list */ + lpcb->next = tcp_listen_pcbs.listen_pcbs; + /* put this listening pcb at the head of the listening list */ + tcp_listen_pcbs.listen_pcbs = lpcb; + } + + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_input: packed for LISTENing connection.\n")); + tcp_listen_input(lpcb); + pbuf_free(p); + return; + } + prev = (struct tcp_pcb *)lpcb; + } + } + +#if TCP_INPUT_DEBUG + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("+-+-+-+-+-+-+-+-+-+-+-+-+-+- tcp_input: flags ")); + tcp_debug_print_flags(TCPH_FLAGS(tcphdr)); + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n")); +#endif /* TCP_INPUT_DEBUG */ + + + if (pcb != NULL) { + /* The incoming segment belongs to a connection. */ +#if TCP_INPUT_DEBUG +#if TCP_DEBUG + tcp_debug_print_state(pcb->state); +#endif /* TCP_DEBUG */ +#endif /* TCP_INPUT_DEBUG */ + + /* Set up a tcp_seg structure. */ + inseg.next = NULL; + inseg.len = p->tot_len; + inseg.dataptr = p->payload; + inseg.p = p; + inseg.tcphdr = tcphdr; + + recv_data = NULL; + recv_flags = 0; + + /* If there is data which was previously "refused" by upper layer */ + if (pcb->refused_data != NULL) { + /* Notify again application with data previously received. */ + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_input: notify kept packet\n")); + TCP_EVENT_RECV(pcb, pcb->refused_data, ERR_OK, err); + if (err == ERR_OK) { + pcb->refused_data = NULL; + } else { + /* drop incoming packets, because pcb is "full" */ + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_input: drop incoming packets, because pcb is \"full\"\n")); + TCP_STATS_INC(tcp.drop); + snmp_inc_tcpinerrs(); + pbuf_free(p); + return; + } + } + tcp_input_pcb = pcb; + err = tcp_process(pcb); + /* A return value of ERR_ABRT means that tcp_abort() was called + and that the pcb has been freed. If so, we don't do anything. */ + if (err != ERR_ABRT) { + if (recv_flags & TF_RESET) { + /* TF_RESET means that the connection was reset by the other + end. We then call the error callback to inform the + application that the connection is dead before we + deallocate the PCB. */ + TCP_EVENT_ERR(pcb->errf, pcb->callback_arg, ERR_RST); + tcp_pcb_remove(&tcp_active_pcbs, pcb); + memp_free(MEMP_TCP_PCB, pcb); + } else if (recv_flags & TF_CLOSED) { + /* The connection has been closed and we will deallocate the + PCB. */ + tcp_pcb_remove(&tcp_active_pcbs, pcb); + memp_free(MEMP_TCP_PCB, pcb); + } else { + err = ERR_OK; + /* If the application has registered a "sent" function to be + called when new send buffer space is available, we call it + now. */ + if (pcb->acked > 0) { + TCP_EVENT_SENT(pcb, pcb->acked, err); + } + + if (recv_data != NULL) { + if(flags & TCP_PSH) { + recv_data->flags |= PBUF_FLAG_PUSH; + } + + /* Notify application that data has been received. */ + TCP_EVENT_RECV(pcb, recv_data, ERR_OK, err); + + /* If the upper layer can't receive this data, store it */ + if (err != ERR_OK) { + pcb->refused_data = recv_data; + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_input: keep incoming packet, because pcb is \"full\"\n")); + } + } + + /* If a FIN segment was received, we call the callback + function with a NULL buffer to indicate EOF. */ + if (recv_flags & TF_GOT_FIN) { + TCP_EVENT_RECV(pcb, NULL, ERR_OK, err); + } + + tcp_input_pcb = NULL; + /* Try to send something out. */ + tcp_output(pcb); +#if TCP_INPUT_DEBUG +#if TCP_DEBUG + tcp_debug_print_state(pcb->state); +#endif /* TCP_DEBUG */ +#endif /* TCP_INPUT_DEBUG */ + } + } + tcp_input_pcb = NULL; + + + /* give up our reference to inseg.p */ + if (inseg.p != NULL) + { + pbuf_free(inseg.p); + inseg.p = NULL; + } + } else { + + /* If no matching PCB was found, send a TCP RST (reset) to the + sender. */ + LWIP_DEBUGF(TCP_RST_DEBUG, ("tcp_input: no PCB match found, resetting.\n")); + if (!(TCPH_FLAGS(tcphdr) & TCP_RST)) { + TCP_STATS_INC(tcp.proterr); + TCP_STATS_INC(tcp.drop); + tcp_rst(ackno, seqno + tcplen, + &(iphdr->dest), &(iphdr->src), + tcphdr->dest, tcphdr->src); + } + pbuf_free(p); + } + + LWIP_ASSERT("tcp_input: tcp_pcbs_sane()", tcp_pcbs_sane()); + PERF_STOP("tcp_input"); +} + +/** + * Called by tcp_input() when a segment arrives for a listening + * connection (from tcp_input()). + * + * @param pcb the tcp_pcb_listen for which a segment arrived + * @return ERR_OK if the segment was processed + * another err_t on error + * + * @note the return value is not (yet?) used in tcp_input() + * @note the segment which arrived is saved in global variables, therefore only the pcb + * involved is passed as a parameter to this function + */ +static err_t +tcp_listen_input(struct tcp_pcb_listen *pcb) +{ + struct tcp_pcb *npcb; + err_t rc; + + /* In the LISTEN state, we check for incoming SYN segments, + creates a new PCB, and responds with a SYN|ACK. */ + if (flags & TCP_ACK) { + /* For incoming segments with the ACK flag set, respond with a + RST. */ + LWIP_DEBUGF(TCP_RST_DEBUG, ("tcp_listen_input: ACK in LISTEN, sending reset\n")); + tcp_rst(ackno + 1, seqno + tcplen, + &(iphdr->dest), &(iphdr->src), + tcphdr->dest, tcphdr->src); + } else if (flags & TCP_SYN) { + LWIP_DEBUGF(TCP_DEBUG, ("TCP connection request %"U16_F" -> %"U16_F".\n", tcphdr->src, tcphdr->dest)); +#if TCP_LISTEN_BACKLOG + if (pcb->accepts_pending >= pcb->backlog) { + LWIP_DEBUGF(TCP_DEBUG, ("tcp_listen_input: listen backlog exceeded for port %"U16_F"\n", tcphdr->dest)); + return ERR_ABRT; + } +#endif /* TCP_LISTEN_BACKLOG */ + npcb = tcp_alloc(pcb->prio); + /* If a new PCB could not be created (probably due to lack of memory), + we don't do anything, but rely on the sender will retransmit the + SYN at a time when we have more memory available. */ + if (npcb == NULL) { + LWIP_DEBUGF(TCP_DEBUG, ("tcp_listen_input: could not allocate PCB\n")); + TCP_STATS_INC(tcp.memerr); + return ERR_MEM; + } +#if TCP_LISTEN_BACKLOG + pcb->accepts_pending++; +#endif /* TCP_LISTEN_BACKLOG */ + /* Set up the new PCB. */ + ip_addr_set(&(npcb->local_ip), &(iphdr->dest)); + npcb->local_port = pcb->local_port; + ip_addr_set(&(npcb->remote_ip), &(iphdr->src)); + npcb->remote_port = tcphdr->src; + npcb->state = SYN_RCVD; + npcb->rcv_nxt = seqno + 1; + npcb->rcv_ann_right_edge = npcb->rcv_nxt; + npcb->snd_wnd = tcphdr->wnd; + npcb->ssthresh = npcb->snd_wnd; + npcb->snd_wl1 = seqno - 1;/* initialise to seqno-1 to force window update */ + npcb->callback_arg = pcb->callback_arg; +#if LWIP_CALLBACK_API + npcb->accept = pcb->accept; +#endif /* LWIP_CALLBACK_API */ + /* inherit socket options */ + npcb->so_options = pcb->so_options & (SOF_DEBUG|SOF_DONTROUTE|SOF_KEEPALIVE|SOF_OOBINLINE|SOF_LINGER); + /* Register the new PCB so that we can begin receiving segments + for it. */ + TCP_REG(&tcp_active_pcbs, npcb); + + /* Parse any options in the SYN. */ + tcp_parseopt(npcb); +#if TCP_CALCULATE_EFF_SEND_MSS + npcb->mss = tcp_eff_send_mss(npcb->mss, &(npcb->remote_ip)); +#endif /* TCP_CALCULATE_EFF_SEND_MSS */ + + snmp_inc_tcppassiveopens(); + + /* Send a SYN|ACK together with the MSS option. */ + rc = tcp_enqueue(npcb, NULL, 0, TCP_SYN | TCP_ACK, 0, TF_SEG_OPTS_MSS +#if LWIP_TCP_TIMESTAMPS + /* and maybe include the TIMESTAMP option */ + | (npcb->flags & TF_TIMESTAMP ? TF_SEG_OPTS_TS : 0) +#endif + ); + if (rc != ERR_OK) { + tcp_abandon(npcb, 0); + return rc; + } + return tcp_output(npcb); + } + return ERR_OK; +} + +/** + * Called by tcp_input() when a segment arrives for a connection in + * TIME_WAIT. + * + * @param pcb the tcp_pcb for which a segment arrived + * + * @note the segment which arrived is saved in global variables, therefore only the pcb + * involved is passed as a parameter to this function + */ +static err_t +tcp_timewait_input(struct tcp_pcb *pcb) +{ + /* RFC 1337: in TIME_WAIT, ignore RST and ACK FINs + any 'acceptable' segments */ + /* RFC 793 3.9 Event Processing - Segment Arrives: + * - first check sequence number - we skip that one in TIME_WAIT (always + * acceptable since we only send ACKs) + * - second check the RST bit (... return) */ + if (flags & TCP_RST) { + return ERR_OK; + } + /* - fourth, check the SYN bit, */ + if (flags & TCP_SYN) { + /* If an incoming segment is not acceptable, an acknowledgment + should be sent in reply */ + if (TCP_SEQ_BETWEEN(seqno, pcb->rcv_nxt, pcb->rcv_nxt+pcb->rcv_wnd)) { + /* If the SYN is in the window it is an error, send a reset */ + tcp_rst(ackno, seqno + tcplen, &(iphdr->dest), &(iphdr->src), + tcphdr->dest, tcphdr->src); + return ERR_OK; + } + } else if (flags & TCP_FIN) { + /* - eighth, check the FIN bit: Remain in the TIME-WAIT state. + Restart the 2 MSL time-wait timeout.*/ + pcb->tmr = tcp_ticks; + } + + if ((tcplen > 0)) { + /* Acknowledge data, FIN or out-of-window SYN */ + pcb->flags |= TF_ACK_NOW; + return tcp_output(pcb); + } + return ERR_OK; +} + +/** + * Implements the TCP state machine. Called by tcp_input. In some + * states tcp_receive() is called to receive data. The tcp_seg + * argument will be freed by the caller (tcp_input()) unless the + * recv_data pointer in the pcb is set. + * + * @param pcb the tcp_pcb for which a segment arrived + * + * @note the segment which arrived is saved in global variables, therefore only the pcb + * involved is passed as a parameter to this function + */ +static err_t +tcp_process(struct tcp_pcb *pcb) +{ + struct tcp_seg *rseg; + u8_t acceptable = 0; + err_t err; + + err = ERR_OK; + + /* Process incoming RST segments. */ + if (flags & TCP_RST) { + /* First, determine if the reset is acceptable. */ + if (pcb->state == SYN_SENT) { + if (ackno == pcb->snd_nxt) { + acceptable = 1; + } + } else { + if (TCP_SEQ_BETWEEN(seqno, pcb->rcv_nxt, + pcb->rcv_nxt+pcb->rcv_wnd)) { + acceptable = 1; + } + } + + if (acceptable) { + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_process: Connection RESET\n")); + LWIP_ASSERT("tcp_input: pcb->state != CLOSED", pcb->state != CLOSED); + recv_flags |= TF_RESET; + pcb->flags &= ~TF_ACK_DELAY; + return ERR_RST; + } else { + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_process: unacceptable reset seqno %"U32_F" rcv_nxt %"U32_F"\n", + seqno, pcb->rcv_nxt)); + LWIP_DEBUGF(TCP_DEBUG, ("tcp_process: unacceptable reset seqno %"U32_F" rcv_nxt %"U32_F"\n", + seqno, pcb->rcv_nxt)); + return ERR_OK; + } + } + + if ((flags & TCP_SYN) && (pcb->state != SYN_SENT && pcb->state != SYN_RCVD)) { + /* Cope with new connection attempt after remote end crashed */ + tcp_ack_now(pcb); + return ERR_OK; + } + + /* Update the PCB (in)activity timer. */ + pcb->tmr = tcp_ticks; + pcb->keep_cnt_sent = 0; + + tcp_parseopt(pcb); + + /* Do different things depending on the TCP state. */ + switch (pcb->state) { + case SYN_SENT: + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("SYN-SENT: ackno %"U32_F" pcb->snd_nxt %"U32_F" unacked %"U32_F"\n", ackno, + pcb->snd_nxt, ntohl(pcb->unacked->tcphdr->seqno))); + /* received SYN ACK with expected sequence number? */ + if ((flags & TCP_ACK) && (flags & TCP_SYN) + && ackno == ntohl(pcb->unacked->tcphdr->seqno) + 1) { + pcb->snd_buf++; + pcb->rcv_nxt = seqno + 1; + pcb->rcv_ann_right_edge = pcb->rcv_nxt; + pcb->lastack = ackno; + pcb->snd_wnd = tcphdr->wnd; + pcb->snd_wl1 = seqno - 1; /* initialise to seqno - 1 to force window update */ + pcb->state = ESTABLISHED; + +#if TCP_CALCULATE_EFF_SEND_MSS + pcb->mss = tcp_eff_send_mss(pcb->mss, &(pcb->remote_ip)); +#endif /* TCP_CALCULATE_EFF_SEND_MSS */ + + /* Set ssthresh again after changing pcb->mss (already set in tcp_connect + * but for the default value of pcb->mss) */ + pcb->ssthresh = pcb->mss * 10; + + pcb->cwnd = ((pcb->cwnd == 1) ? (pcb->mss * 2) : pcb->mss); + LWIP_ASSERT("pcb->snd_queuelen > 0", (pcb->snd_queuelen > 0)); + --pcb->snd_queuelen; + LWIP_DEBUGF(TCP_QLEN_DEBUG, ("tcp_process: SYN-SENT --queuelen %"U16_F"\n", (u16_t)pcb->snd_queuelen)); + rseg = pcb->unacked; + pcb->unacked = rseg->next; + + /* If there's nothing left to acknowledge, stop the retransmit + timer, otherwise reset it to start again */ + if(pcb->unacked == NULL) + pcb->rtime = -1; + else { + pcb->rtime = 0; + pcb->nrtx = 0; + } + + tcp_seg_free(rseg); + + /* Call the user specified function to call when sucessfully + * connected. */ + TCP_EVENT_CONNECTED(pcb, ERR_OK, err); + tcp_ack_now(pcb); + } + /* received ACK? possibly a half-open connection */ + else if (flags & TCP_ACK) { + /* send a RST to bring the other side in a non-synchronized state. */ + tcp_rst(ackno, seqno + tcplen, &(iphdr->dest), &(iphdr->src), + tcphdr->dest, tcphdr->src); + } + break; + case SYN_RCVD: + if (flags & TCP_ACK) { + /* expected ACK number? */ + if (TCP_SEQ_BETWEEN(ackno, pcb->lastack+1, pcb->snd_nxt)) { + u16_t old_cwnd; + pcb->state = ESTABLISHED; + LWIP_DEBUGF(TCP_DEBUG, ("TCP connection established %"U16_F" -> %"U16_F".\n", inseg.tcphdr->src, inseg.tcphdr->dest)); +#if LWIP_CALLBACK_API + LWIP_ASSERT("pcb->accept != NULL", pcb->accept != NULL); +#endif + /* Call the accept function. */ + TCP_EVENT_ACCEPT(pcb, ERR_OK, err); + if (err != ERR_OK) { + /* If the accept function returns with an error, we abort + * the connection. */ + tcp_abort(pcb); + return ERR_ABRT; + } + old_cwnd = pcb->cwnd; + /* If there was any data contained within this ACK, + * we'd better pass it on to the application as well. */ + tcp_receive(pcb); + + /* Prevent ACK for SYN to generate a sent event */ + if (pcb->acked != 0) { + pcb->acked--; + } + + pcb->cwnd = ((old_cwnd == 1) ? (pcb->mss * 2) : pcb->mss); + + if (recv_flags & TF_GOT_FIN) { + tcp_ack_now(pcb); + pcb->state = CLOSE_WAIT; + } + } + /* incorrect ACK number */ + else { + /* send RST */ + tcp_rst(ackno, seqno + tcplen, &(iphdr->dest), &(iphdr->src), + tcphdr->dest, tcphdr->src); + } + } else if ((flags & TCP_SYN) && (seqno == pcb->rcv_nxt - 1)) { + /* Looks like another copy of the SYN - retransmit our SYN-ACK */ + tcp_rexmit(pcb); + } + break; + case CLOSE_WAIT: + /* FALLTHROUGH */ + case ESTABLISHED: + tcp_receive(pcb); + if (recv_flags & TF_GOT_FIN) { /* passive close */ + tcp_ack_now(pcb); + pcb->state = CLOSE_WAIT; + } + break; + case FIN_WAIT_1: + tcp_receive(pcb); + if (recv_flags & TF_GOT_FIN) { + if ((flags & TCP_ACK) && (ackno == pcb->snd_nxt)) { + LWIP_DEBUGF(TCP_DEBUG, + ("TCP connection closed: FIN_WAIT_1 %"U16_F" -> %"U16_F".\n", inseg.tcphdr->src, inseg.tcphdr->dest)); + tcp_ack_now(pcb); + tcp_pcb_purge(pcb); + TCP_RMV(&tcp_active_pcbs, pcb); + pcb->state = TIME_WAIT; + TCP_REG(&tcp_tw_pcbs, pcb); + } else { + tcp_ack_now(pcb); + pcb->state = CLOSING; + } + } else if ((flags & TCP_ACK) && (ackno == pcb->snd_nxt)) { + pcb->state = FIN_WAIT_2; + } + break; + case FIN_WAIT_2: + tcp_receive(pcb); + if (recv_flags & TF_GOT_FIN) { + LWIP_DEBUGF(TCP_DEBUG, ("TCP connection closed: FIN_WAIT_2 %"U16_F" -> %"U16_F".\n", inseg.tcphdr->src, inseg.tcphdr->dest)); + tcp_ack_now(pcb); + tcp_pcb_purge(pcb); + TCP_RMV(&tcp_active_pcbs, pcb); + pcb->state = TIME_WAIT; + TCP_REG(&tcp_tw_pcbs, pcb); + } + break; + case CLOSING: + tcp_receive(pcb); + if (flags & TCP_ACK && ackno == pcb->snd_nxt) { + LWIP_DEBUGF(TCP_DEBUG, ("TCP connection closed: CLOSING %"U16_F" -> %"U16_F".\n", inseg.tcphdr->src, inseg.tcphdr->dest)); + tcp_pcb_purge(pcb); + TCP_RMV(&tcp_active_pcbs, pcb); + pcb->state = TIME_WAIT; + TCP_REG(&tcp_tw_pcbs, pcb); + } + break; + case LAST_ACK: + tcp_receive(pcb); + if (flags & TCP_ACK && ackno == pcb->snd_nxt) { + LWIP_DEBUGF(TCP_DEBUG, ("TCP connection closed: LAST_ACK %"U16_F" -> %"U16_F".\n", inseg.tcphdr->src, inseg.tcphdr->dest)); + /* bugfix #21699: don't set pcb->state to CLOSED here or we risk leaking segments */ + recv_flags |= TF_CLOSED; + } + break; + default: + break; + } + return ERR_OK; +} + +#if TCP_QUEUE_OOSEQ +/** + * Insert segment into the list (segments covered with new one will be deleted) + * + * Called from tcp_receive() + */ +static void +tcp_oos_insert_segment(struct tcp_seg *cseg, struct tcp_seg *next) +{ + struct tcp_seg *old_seg; + + if (TCPH_FLAGS(cseg->tcphdr) & TCP_FIN) { + /* received segment overlaps all following segments */ + tcp_segs_free(next); + next = NULL; + } + else { + /* delete some following segments + oos queue may have segments with FIN flag */ + while (next && + TCP_SEQ_GEQ((seqno + cseg->len), + (next->tcphdr->seqno + next->len))) { + /* cseg with FIN already processed */ + if (TCPH_FLAGS(next->tcphdr) & TCP_FIN) { + TCPH_FLAGS_SET(cseg->tcphdr, TCPH_FLAGS(cseg->tcphdr) | TCP_FIN); + } + old_seg = next; + next = next->next; + tcp_seg_free(old_seg); + } + if (next && + TCP_SEQ_GT(seqno + cseg->len, next->tcphdr->seqno)) { + /* We need to trim the incoming segment. */ + cseg->len = (u16_t)(next->tcphdr->seqno - seqno); + pbuf_realloc(cseg->p, cseg->len); + } + } + cseg->next = next; +} +#endif + +/** + * Called by tcp_process. Checks if the given segment is an ACK for outstanding + * data, and if so frees the memory of the buffered data. Next, is places the + * segment on any of the receive queues (pcb->recved or pcb->ooseq). If the segment + * is buffered, the pbuf is referenced by pbuf_ref so that it will not be freed until + * i it has been removed from the buffer. + * + * If the incoming segment constitutes an ACK for a segment that was used for RTT + * estimation, the RTT is estimated here as well. + * + * Called from tcp_process(). + */ +static void +tcp_receive(struct tcp_pcb *pcb) +{ + struct tcp_seg *next; +#if TCP_QUEUE_OOSEQ + struct tcp_seg *prev, *cseg; +#endif + struct pbuf *p; + s32_t off; + s16_t m; + u32_t right_wnd_edge; + u16_t new_tot_len; + int found_dupack = 0; + + if (flags & TCP_ACK) { + right_wnd_edge = pcb->snd_wnd + pcb->snd_wl2; + + /* Update window. */ + if (TCP_SEQ_LT(pcb->snd_wl1, seqno) || + (pcb->snd_wl1 == seqno && TCP_SEQ_LT(pcb->snd_wl2, ackno)) || + (pcb->snd_wl2 == ackno && tcphdr->wnd > pcb->snd_wnd)) { + pcb->snd_wnd = tcphdr->wnd; + pcb->snd_wl1 = seqno; + pcb->snd_wl2 = ackno; + if (pcb->snd_wnd > 0 && pcb->persist_backoff > 0) { + pcb->persist_backoff = 0; + } + LWIP_DEBUGF(TCP_WND_DEBUG, ("tcp_receive: window update %"U16_F"\n", pcb->snd_wnd)); +#if TCP_WND_DEBUG + } else { + if (pcb->snd_wnd != tcphdr->wnd) { + LWIP_DEBUGF(TCP_WND_DEBUG, + ("tcp_receive: no window update lastack %"U32_F" ackno %" + U32_F" wl1 %"U32_F" seqno %"U32_F" wl2 %"U32_F"\n", + pcb->lastack, ackno, pcb->snd_wl1, seqno, pcb->snd_wl2)); + } +#endif /* TCP_WND_DEBUG */ + } + + /* (From Stevens TCP/IP Illustrated Vol II, p970.) Its only a + * duplicate ack if: + * 1) It doesn't ACK new data + * 2) length of received packet is zero (i.e. no payload) + * 3) the advertised window hasn't changed + * 4) There is outstanding unacknowledged data (retransmission timer running) + * 5) The ACK is == biggest ACK sequence number so far seen (snd_una) + * + * If it passes all five, should process as a dupack: + * a) dupacks < 3: do nothing + * b) dupacks == 3: fast retransmit + * c) dupacks > 3: increase cwnd + * + * If it only passes 1-3, should reset dupack counter (and add to + * stats, which we don't do in lwIP) + * + * If it only passes 1, should reset dupack counter + * + */ + + /* Clause 1 */ + if (TCP_SEQ_LEQ(ackno, pcb->lastack)) { + pcb->acked = 0; + /* Clause 2 */ + if (tcplen == 0) { + /* Clause 3 */ + if (pcb->snd_wl2 + pcb->snd_wnd == right_wnd_edge){ + /* Clause 4 */ + if (pcb->rtime >= 0) { + /* Clause 5 */ + if (pcb->lastack == ackno) { + found_dupack = 1; + if (pcb->dupacks + 1 > pcb->dupacks) + ++pcb->dupacks; + if (pcb->dupacks > 3) { + /* Inflate the congestion window, but not if it means that + the value overflows. */ + if ((u16_t)(pcb->cwnd + pcb->mss) > pcb->cwnd) { + pcb->cwnd += pcb->mss; + } + } else if (pcb->dupacks == 3) { + /* Do fast retransmit */ + tcp_rexmit_fast(pcb); + } + } + } + } + } + /* If Clause (1) or more is true, but not a duplicate ack, reset + * count of consecutive duplicate acks */ + if (!found_dupack) { + pcb->dupacks = 0; + } + } else if (TCP_SEQ_BETWEEN(ackno, pcb->lastack+1, pcb->snd_nxt)){ + /* We come here when the ACK acknowledges new data. */ + + /* Reset the "IN Fast Retransmit" flag, since we are no longer + in fast retransmit. Also reset the congestion window to the + slow start threshold. */ + if (pcb->flags & TF_INFR) { + pcb->flags &= ~TF_INFR; + pcb->cwnd = pcb->ssthresh; + } + + /* Reset the number of retransmissions. */ + pcb->nrtx = 0; + + /* Reset the retransmission time-out. */ + pcb->rto = (pcb->sa >> 3) + pcb->sv; + + /* Update the send buffer space. Diff between the two can never exceed 64K? */ + pcb->acked = (u16_t)(ackno - pcb->lastack); + + pcb->snd_buf += pcb->acked; + + /* Reset the fast retransmit variables. */ + pcb->dupacks = 0; + pcb->lastack = ackno; + + /* Update the congestion control variables (cwnd and + ssthresh). */ + if (pcb->state >= ESTABLISHED) { + if (pcb->cwnd < pcb->ssthresh) { + if ((u16_t)(pcb->cwnd + pcb->mss) > pcb->cwnd) { + pcb->cwnd += pcb->mss; + } + LWIP_DEBUGF(TCP_CWND_DEBUG, ("tcp_receive: slow start cwnd %"U16_F"\n", pcb->cwnd)); + } else { + u16_t new_cwnd = (pcb->cwnd + pcb->mss * pcb->mss / pcb->cwnd); + if (new_cwnd > pcb->cwnd) { + pcb->cwnd = new_cwnd; + } + LWIP_DEBUGF(TCP_CWND_DEBUG, ("tcp_receive: congestion avoidance cwnd %"U16_F"\n", pcb->cwnd)); + } + } + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_receive: ACK for %"U32_F", unacked->seqno %"U32_F":%"U32_F"\n", + ackno, + pcb->unacked != NULL? + ntohl(pcb->unacked->tcphdr->seqno): 0, + pcb->unacked != NULL? + ntohl(pcb->unacked->tcphdr->seqno) + TCP_TCPLEN(pcb->unacked): 0)); + + /* Remove segment from the unacknowledged list if the incoming + ACK acknowlegdes them. */ + while (pcb->unacked != NULL && + TCP_SEQ_LEQ(ntohl(pcb->unacked->tcphdr->seqno) + + TCP_TCPLEN(pcb->unacked), ackno)) { + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_receive: removing %"U32_F":%"U32_F" from pcb->unacked\n", + ntohl(pcb->unacked->tcphdr->seqno), + ntohl(pcb->unacked->tcphdr->seqno) + + TCP_TCPLEN(pcb->unacked))); + + next = pcb->unacked; + pcb->unacked = pcb->unacked->next; + + LWIP_DEBUGF(TCP_QLEN_DEBUG, ("tcp_receive: queuelen %"U16_F" ... ", (u16_t)pcb->snd_queuelen)); + LWIP_ASSERT("pcb->snd_queuelen >= pbuf_clen(next->p)", (pcb->snd_queuelen >= pbuf_clen(next->p))); + /* Prevent ACK for FIN to generate a sent event */ + if ((pcb->acked != 0) && ((TCPH_FLAGS(next->tcphdr) & TCP_FIN) != 0)) { + pcb->acked--; + } + + pcb->snd_queuelen -= pbuf_clen(next->p); + tcp_seg_free(next); + + LWIP_DEBUGF(TCP_QLEN_DEBUG, ("%"U16_F" (after freeing unacked)\n", (u16_t)pcb->snd_queuelen)); + if (pcb->snd_queuelen != 0) { + LWIP_ASSERT("tcp_receive: valid queue length", pcb->unacked != NULL || + pcb->unsent != NULL); + } + } + + /* If there's nothing left to acknowledge, stop the retransmit + timer, otherwise reset it to start again */ + if(pcb->unacked == NULL) + pcb->rtime = -1; + else + pcb->rtime = 0; + + pcb->polltmr = 0; + } else { + /* Fix bug bug #21582: out of sequence ACK, didn't really ack anything */ + pcb->acked = 0; + } + + /* We go through the ->unsent list to see if any of the segments + on the list are acknowledged by the ACK. This may seem + strange since an "unsent" segment shouldn't be acked. The + rationale is that lwIP puts all outstanding segments on the + ->unsent list after a retransmission, so these segments may + in fact have been sent once. */ + while (pcb->unsent != NULL && + TCP_SEQ_BETWEEN(ackno, ntohl(pcb->unsent->tcphdr->seqno) + + TCP_TCPLEN(pcb->unsent), pcb->snd_nxt)) { + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_receive: removing %"U32_F":%"U32_F" from pcb->unsent\n", + ntohl(pcb->unsent->tcphdr->seqno), ntohl(pcb->unsent->tcphdr->seqno) + + TCP_TCPLEN(pcb->unsent))); + + next = pcb->unsent; + pcb->unsent = pcb->unsent->next; + LWIP_DEBUGF(TCP_QLEN_DEBUG, ("tcp_receive: queuelen %"U16_F" ... ", (u16_t)pcb->snd_queuelen)); + LWIP_ASSERT("pcb->snd_queuelen >= pbuf_clen(next->p)", (pcb->snd_queuelen >= pbuf_clen(next->p))); + /* Prevent ACK for FIN to generate a sent event */ + if ((pcb->acked != 0) && ((TCPH_FLAGS(next->tcphdr) & TCP_FIN) != 0)) { + pcb->acked--; + } + pcb->snd_queuelen -= pbuf_clen(next->p); + tcp_seg_free(next); + LWIP_DEBUGF(TCP_QLEN_DEBUG, ("%"U16_F" (after freeing unsent)\n", (u16_t)pcb->snd_queuelen)); + if (pcb->snd_queuelen != 0) { + LWIP_ASSERT("tcp_receive: valid queue length", + pcb->unacked != NULL || pcb->unsent != NULL); + } + } + /* End of ACK for new data processing. */ + + LWIP_DEBUGF(TCP_RTO_DEBUG, ("tcp_receive: pcb->rttest %"U32_F" rtseq %"U32_F" ackno %"U32_F"\n", + pcb->rttest, pcb->rtseq, ackno)); + + /* RTT estimation calculations. This is done by checking if the + incoming segment acknowledges the segment we use to take a + round-trip time measurement. */ + if (pcb->rttest && TCP_SEQ_LT(pcb->rtseq, ackno)) { + /* diff between this shouldn't exceed 32K since this are tcp timer ticks + and a round-trip shouldn't be that long... */ + m = (s16_t)(tcp_ticks - pcb->rttest); + + LWIP_DEBUGF(TCP_RTO_DEBUG, ("tcp_receive: experienced rtt %"U16_F" ticks (%"U16_F" msec).\n", + m, m * TCP_SLOW_INTERVAL)); + + /* This is taken directly from VJs original code in his paper */ + m = m - (pcb->sa >> 3); + pcb->sa += m; + if (m < 0) { + m = -m; + } + m = m - (pcb->sv >> 2); + pcb->sv += m; + pcb->rto = (pcb->sa >> 3) + pcb->sv; + + LWIP_DEBUGF(TCP_RTO_DEBUG, ("tcp_receive: RTO %"U16_F" (%"U16_F" milliseconds)\n", + pcb->rto, pcb->rto * TCP_SLOW_INTERVAL)); + + pcb->rttest = 0; + } + } + + /* If the incoming segment contains data, we must process it + further. */ + if (tcplen > 0) { + /* This code basically does three things: + + +) If the incoming segment contains data that is the next + in-sequence data, this data is passed to the application. This + might involve trimming the first edge of the data. The rcv_nxt + variable and the advertised window are adjusted. + + +) If the incoming segment has data that is above the next + sequence number expected (->rcv_nxt), the segment is placed on + the ->ooseq queue. This is done by finding the appropriate + place in the ->ooseq queue (which is ordered by sequence + number) and trim the segment in both ends if needed. An + immediate ACK is sent to indicate that we received an + out-of-sequence segment. + + +) Finally, we check if the first segment on the ->ooseq queue + now is in sequence (i.e., if rcv_nxt >= ooseq->seqno). If + rcv_nxt > ooseq->seqno, we must trim the first edge of the + segment on ->ooseq before we adjust rcv_nxt. The data in the + segments that are now on sequence are chained onto the + incoming segment so that we only need to call the application + once. + */ + + /* First, we check if we must trim the first edge. We have to do + this if the sequence number of the incoming segment is less + than rcv_nxt, and the sequence number plus the length of the + segment is larger than rcv_nxt. */ + /* if (TCP_SEQ_LT(seqno, pcb->rcv_nxt)){ + if (TCP_SEQ_LT(pcb->rcv_nxt, seqno + tcplen)) {*/ + if (TCP_SEQ_BETWEEN(pcb->rcv_nxt, seqno + 1, seqno + tcplen - 1)){ + /* Trimming the first edge is done by pushing the payload + pointer in the pbuf downwards. This is somewhat tricky since + we do not want to discard the full contents of the pbuf up to + the new starting point of the data since we have to keep the + TCP header which is present in the first pbuf in the chain. + + What is done is really quite a nasty hack: the first pbuf in + the pbuf chain is pointed to by inseg.p. Since we need to be + able to deallocate the whole pbuf, we cannot change this + inseg.p pointer to point to any of the later pbufs in the + chain. Instead, we point the ->payload pointer in the first + pbuf to data in one of the later pbufs. We also set the + inseg.data pointer to point to the right place. This way, the + ->p pointer will still point to the first pbuf, but the + ->p->payload pointer will point to data in another pbuf. + + After we are done with adjusting the pbuf pointers we must + adjust the ->data pointer in the seg and the segment + length.*/ + + off = pcb->rcv_nxt - seqno; + p = inseg.p; + LWIP_ASSERT("inseg.p != NULL", inseg.p); + LWIP_ASSERT("insane offset!", (off < 0x7fff)); + if (inseg.p->len < off) { + LWIP_ASSERT("pbuf too short!", (((s32_t)inseg.p->tot_len) >= off)); + new_tot_len = (u16_t)(inseg.p->tot_len - off); + while (p->len < off) { + off -= p->len; + /* KJM following line changed (with addition of new_tot_len var) + to fix bug #9076 + inseg.p->tot_len -= p->len; */ + p->tot_len = new_tot_len; + p->len = 0; + p = p->next; + } + if(pbuf_header(p, (s16_t)-off)) { + /* Do we need to cope with this failing? Assert for now */ + LWIP_ASSERT("pbuf_header failed", 0); + } + } else { + if(pbuf_header(inseg.p, (s16_t)-off)) { + /* Do we need to cope with this failing? Assert for now */ + LWIP_ASSERT("pbuf_header failed", 0); + } + } + /* KJM following line changed to use p->payload rather than inseg->p->payload + to fix bug #9076 */ + inseg.dataptr = p->payload; + inseg.len -= (u16_t)(pcb->rcv_nxt - seqno); + inseg.tcphdr->seqno = seqno = pcb->rcv_nxt; + } + else { + if (TCP_SEQ_LT(seqno, pcb->rcv_nxt)){ + /* the whole segment is < rcv_nxt */ + /* must be a duplicate of a packet that has already been correctly handled */ + + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_receive: duplicate seqno %"U32_F"\n", seqno)); + tcp_ack_now(pcb); + } + } + + /* The sequence number must be within the window (above rcv_nxt + and below rcv_nxt + rcv_wnd) in order to be further + processed. */ + if (TCP_SEQ_BETWEEN(seqno, pcb->rcv_nxt, + pcb->rcv_nxt + pcb->rcv_wnd - 1)){ + if (pcb->rcv_nxt == seqno) { + /* The incoming segment is the next in sequence. We check if + we have to trim the end of the segment and update rcv_nxt + and pass the data to the application. */ + tcplen = TCP_TCPLEN(&inseg); + + if (tcplen > pcb->rcv_wnd) { + LWIP_DEBUGF(TCP_INPUT_DEBUG, + ("tcp_receive: other end overran receive window" + "seqno %"U32_F" len %"U32_F" right edge %"U32_F"\n", + seqno, tcplen, pcb->rcv_nxt + pcb->rcv_wnd)); + if (TCPH_FLAGS(inseg.tcphdr) & TCP_FIN) { + /* Must remove the FIN from the header as we're trimming + * that byte of sequence-space from the packet */ + TCPH_FLAGS_SET(inseg.tcphdr, TCPH_FLAGS(inseg.tcphdr) &~ TCP_FIN); + } + /* Adjust length of segment to fit in the window. */ + inseg.len = pcb->rcv_wnd; + if (TCPH_FLAGS(inseg.tcphdr) & TCP_SYN) { + inseg.len -= 1; + } + pbuf_realloc(inseg.p, inseg.len); + tcplen = TCP_TCPLEN(&inseg); + LWIP_ASSERT("tcp_receive: segment not trimmed correctly to rcv_wnd\n", + (seqno + tcplen) == (pcb->rcv_nxt + pcb->rcv_wnd)); + } +#if TCP_QUEUE_OOSEQ + if (pcb->ooseq != NULL) { + if (TCPH_FLAGS(inseg.tcphdr) & TCP_FIN) { + LWIP_DEBUGF(TCP_INPUT_DEBUG, + ("tcp_receive: received in-order FIN, binning ooseq queue\n")); + /* Received in-order FIN means anything that was received + * out of order must now have been received in-order, so + * bin the ooseq queue + * rcv_nxt + * . |--ooseq--| + * .==seg============|FIN + */ + while (pcb->ooseq != NULL) { + struct tcp_seg *old_ooseq = pcb->ooseq; + pcb->ooseq = pcb->ooseq->next; + tcp_seg_free(old_ooseq); + } + } + else { + struct tcp_seg* next = pcb->ooseq; + struct tcp_seg *old_seg; + /* rcv_nxt + * . |--ooseq--| + * .==seg============| + */ + while (next && + TCP_SEQ_GEQ(seqno + tcplen, + next->tcphdr->seqno + next->len)) { + /* inseg doesn't have FIN (already processed) */ + if (TCPH_FLAGS(next->tcphdr) & TCP_FIN && + (TCPH_FLAGS(inseg.tcphdr) & TCP_SYN) == 0) { + TCPH_FLAGS_SET(inseg.tcphdr, + TCPH_FLAGS(inseg.tcphdr) | TCP_FIN); + tcplen = TCP_TCPLEN(&inseg); + } + old_seg = next; + next = next->next; + tcp_seg_free(old_seg); + } + /* rcv_nxt + * . |--ooseq--| + * .==seg============| + */ + if (next && + TCP_SEQ_GT(seqno + tcplen, + next->tcphdr->seqno)) { + /* FIN in inseg already handled by dropping whole ooseq queue */ + inseg.len = (u16_t)(pcb->ooseq->tcphdr->seqno - seqno); + if (TCPH_FLAGS(inseg.tcphdr) & TCP_SYN) { + inseg.len -= 1; + } + pbuf_realloc(inseg.p, inseg.len); + tcplen = TCP_TCPLEN(&inseg); + LWIP_ASSERT("tcp_receive: segment not trimmed correctly to ooseq queue\n", + (seqno + tcplen) == pcb->ooseq->tcphdr->seqno); + } + pcb->ooseq = next; + } + } +#endif /* TCP_QUEUE_OOSEQ */ + + pcb->rcv_nxt = seqno + tcplen; + + /* Update the receiver's (our) window. */ + LWIP_ASSERT("tcp_receive: tcplen > rcv_wnd\n", pcb->rcv_wnd >= tcplen); + pcb->rcv_wnd -= tcplen; + + tcp_update_rcv_ann_wnd(pcb); + + /* If there is data in the segment, we make preparations to + pass this up to the application. The ->recv_data variable + is used for holding the pbuf that goes to the + application. The code for reassembling out-of-sequence data + chains its data on this pbuf as well. + + If the segment was a FIN, we set the TF_GOT_FIN flag that will + be used to indicate to the application that the remote side has + closed its end of the connection. */ + if (inseg.p->tot_len > 0) { + recv_data = inseg.p; + /* Since this pbuf now is the responsibility of the + application, we delete our reference to it so that we won't + (mistakingly) deallocate it. */ + inseg.p = NULL; + } + if (TCPH_FLAGS(inseg.tcphdr) & TCP_FIN) { + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_receive: received FIN.\n")); + recv_flags |= TF_GOT_FIN; + } + +#if TCP_QUEUE_OOSEQ + /* We now check if we have segments on the ->ooseq queue that + is now in sequence. */ + while (pcb->ooseq != NULL && + pcb->ooseq->tcphdr->seqno == pcb->rcv_nxt) { + + cseg = pcb->ooseq; + seqno = pcb->ooseq->tcphdr->seqno; + + pcb->rcv_nxt += TCP_TCPLEN(cseg); + LWIP_ASSERT("tcp_receive: ooseq tcplen > rcv_wnd\n", + pcb->rcv_wnd >= TCP_TCPLEN(cseg)); + pcb->rcv_wnd -= TCP_TCPLEN(cseg); + + tcp_update_rcv_ann_wnd(pcb); + + if (cseg->p->tot_len > 0) { + /* Chain this pbuf onto the pbuf that we will pass to + the application. */ + if (recv_data) { + pbuf_cat(recv_data, cseg->p); + } else { + recv_data = cseg->p; + } + cseg->p = NULL; + } + if (TCPH_FLAGS(cseg->tcphdr) & TCP_FIN) { + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_receive: dequeued FIN.\n")); + recv_flags |= TF_GOT_FIN; + if (pcb->state == ESTABLISHED) { /* force passive close or we can move to active close */ + pcb->state = CLOSE_WAIT; + } + } + + pcb->ooseq = cseg->next; + tcp_seg_free(cseg); + } +#endif /* TCP_QUEUE_OOSEQ */ + + + /* Acknowledge the segment(s). */ + tcp_ack(pcb); + + } else { + /* We get here if the incoming segment is out-of-sequence. */ + tcp_send_empty_ack(pcb); +#if TCP_QUEUE_OOSEQ + /* We queue the segment on the ->ooseq queue. */ + if (pcb->ooseq == NULL) { + pcb->ooseq = tcp_seg_copy(&inseg); + } else { + /* If the queue is not empty, we walk through the queue and + try to find a place where the sequence number of the + incoming segment is between the sequence numbers of the + previous and the next segment on the ->ooseq queue. That is + the place where we put the incoming segment. If needed, we + trim the second edges of the previous and the incoming + segment so that it will fit into the sequence. + + If the incoming segment has the same sequence number as a + segment on the ->ooseq queue, we discard the segment that + contains less data. */ + + prev = NULL; + for(next = pcb->ooseq; next != NULL; next = next->next) { + if (seqno == next->tcphdr->seqno) { + /* The sequence number of the incoming segment is the + same as the sequence number of the segment on + ->ooseq. We check the lengths to see which one to + discard. */ + if (inseg.len > next->len) { + /* The incoming segment is larger than the old + segment. We replace some segments with the new + one. */ + cseg = tcp_seg_copy(&inseg); + if (cseg != NULL) { + if (prev != NULL) { + prev->next = cseg; + } else { + pcb->ooseq = cseg; + } + tcp_oos_insert_segment(cseg, next); + } + break; + } else { + /* Either the lenghts are the same or the incoming + segment was smaller than the old one; in either + case, we ditch the incoming segment. */ + break; + } + } else { + if (prev == NULL) { + if (TCP_SEQ_LT(seqno, next->tcphdr->seqno)) { + /* The sequence number of the incoming segment is lower + than the sequence number of the first segment on the + queue. We put the incoming segment first on the + queue. */ + cseg = tcp_seg_copy(&inseg); + if (cseg != NULL) { + pcb->ooseq = cseg; + tcp_oos_insert_segment(cseg, next); + } + break; + } + } else { + /*if (TCP_SEQ_LT(prev->tcphdr->seqno, seqno) && + TCP_SEQ_LT(seqno, next->tcphdr->seqno)) {*/ + if (TCP_SEQ_BETWEEN(seqno, prev->tcphdr->seqno+1, next->tcphdr->seqno-1)) { + /* The sequence number of the incoming segment is in + between the sequence numbers of the previous and + the next segment on ->ooseq. We trim trim the previous + segment, delete next segments that included in received segment + and trim received, if needed. */ + cseg = tcp_seg_copy(&inseg); + if (cseg != NULL) { + if (TCP_SEQ_GT(prev->tcphdr->seqno + prev->len, seqno)) { + /* We need to trim the prev segment. */ + prev->len = (u16_t)(seqno - prev->tcphdr->seqno); + pbuf_realloc(prev->p, prev->len); + } + prev->next = cseg; + tcp_oos_insert_segment(cseg, next); + } + break; + } + } + /* If the "next" segment is the last segment on the + ooseq queue, we add the incoming segment to the end + of the list. */ + if (next->next == NULL && + TCP_SEQ_GT(seqno, next->tcphdr->seqno)) { + if (TCPH_FLAGS(next->tcphdr) & TCP_FIN) { + /* segment "next" already contains all data */ + break; + } + next->next = tcp_seg_copy(&inseg); + if (next->next != NULL) { + if (TCP_SEQ_GT(next->tcphdr->seqno + next->len, seqno)) { + /* We need to trim the last segment. */ + next->len = (u16_t)(seqno - next->tcphdr->seqno); + pbuf_realloc(next->p, next->len); + } + } + break; + } + } + prev = next; + } + } +#endif /* TCP_QUEUE_OOSEQ */ + + } + } else { + /* The incoming segment is not withing the window. */ + tcp_send_empty_ack(pcb); + } + } else { + /* Segments with length 0 is taken care of here. Segments that + fall out of the window are ACKed. */ + /*if (TCP_SEQ_GT(pcb->rcv_nxt, seqno) || + TCP_SEQ_GEQ(seqno, pcb->rcv_nxt + pcb->rcv_wnd)) {*/ + if(!TCP_SEQ_BETWEEN(seqno, pcb->rcv_nxt, pcb->rcv_nxt + pcb->rcv_wnd-1)){ + tcp_ack_now(pcb); + } + } +} + +/** + * Parses the options contained in the incoming segment. + * + * Called from tcp_listen_input() and tcp_process(). + * Currently, only the MSS option is supported! + * + * @param pcb the tcp_pcb for which a segment arrived + */ +static void +tcp_parseopt(struct tcp_pcb *pcb) +{ + u16_t c, max_c; + u16_t mss; + u8_t *opts, opt; +#if LWIP_TCP_TIMESTAMPS + u32_t tsval; +#endif + + opts = (u8_t *)tcphdr + TCP_HLEN; + + /* Parse the TCP MSS option, if present. */ + if(TCPH_HDRLEN(tcphdr) > 0x5) { + max_c = (TCPH_HDRLEN(tcphdr) - 5) << 2; + for (c = 0; c < max_c; ) { + opt = opts[c]; + switch (opt) { + case 0x00: + /* End of options. */ + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: EOL\n")); + return; + case 0x01: + /* NOP option. */ + ++c; + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: NOP\n")); + break; + case 0x02: + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: MSS\n")); + if (opts[c + 1] != 0x04 || c + 0x04 > max_c) { + /* Bad length */ + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: bad length\n")); + return; + } + /* An MSS option with the right option length. */ + mss = (opts[c + 2] << 8) | opts[c + 3]; + /* Limit the mss to the configured TCP_MSS and prevent division by zero */ + pcb->mss = ((mss > TCP_MSS) || (mss == 0)) ? TCP_MSS : mss; + /* Advance to next option */ + c += 0x04; + break; +#if LWIP_TCP_TIMESTAMPS + case 0x08: + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: TS\n")); + if (opts[c + 1] != 0x0A || c + 0x0A > max_c) { + /* Bad length */ + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: bad length\n")); + return; + } + /* TCP timestamp option with valid length */ + tsval = (opts[c+2]) | (opts[c+3] << 8) | + (opts[c+4] << 16) | (opts[c+5] << 24); + if (flags & TCP_SYN) { + pcb->ts_recent = ntohl(tsval); + pcb->flags |= TF_TIMESTAMP; + } else if (TCP_SEQ_BETWEEN(pcb->ts_lastacksent, seqno, seqno+tcplen)) { + pcb->ts_recent = ntohl(tsval); + } + /* Advance to next option */ + c += 0x0A; + break; +#endif + default: + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: other\n")); + if (opts[c + 1] == 0) { + LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: bad length\n")); + /* If the length field is zero, the options are malformed + and we don't process them further. */ + return; + } + /* All other options have a length field, so that we easily + can skip past them. */ + c += opts[c + 1]; + } + } + } +} + +#endif /* LWIP_TCP */ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/tcp_out.c b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/tcp_out.c new file mode 100644 index 000000000..9605beb8e --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/tcp_out.c @@ -0,0 +1,1071 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * Transmission Control Protocol, outgoing traffic + * + * The output functions of TCP. + * + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#include "lwip/opt.h" + +#if LWIP_TCP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/tcp.h" +#include "lwip/def.h" +#include "lwip/mem.h" +#include "lwip/memp.h" +#include "lwip/sys.h" +#include "lwip/ip_addr.h" +#include "lwip/netif.h" +#include "lwip/inet.h" +#include "lwip/inet_chksum.h" +#include "lwip/stats.h" +#include "lwip/snmp.h" + +#include +#define _TEST_HD_ +/* Forward declarations.*/ +static void tcp_output_segment(struct tcp_seg *seg, struct tcp_pcb *pcb); + +static struct tcp_hdr * +tcp_output_set_header(struct tcp_pcb *pcb, struct pbuf *p, int optlen, + u32_t seqno_be /* already in network byte order */) +{ + struct tcp_hdr *tcphdr = p->payload; + tcphdr->src = htons(pcb->local_port); + tcphdr->dest = htons(pcb->remote_port); + tcphdr->seqno = seqno_be; + tcphdr->ackno = htonl(pcb->rcv_nxt); + TCPH_FLAGS_SET(tcphdr, TCP_ACK); + tcphdr->wnd = htons(pcb->rcv_ann_wnd); + tcphdr->urgp = 0; + TCPH_HDRLEN_SET(tcphdr, (5 + optlen / 4)); + tcphdr->chksum = 0; + + /* If we're sending a packet, update the announced right window edge */ + pcb->rcv_ann_right_edge = pcb->rcv_nxt + pcb->rcv_ann_wnd; + + return tcphdr; +} + +/** + * Called by tcp_close() to send a segment including flags but not data. + * + * @param pcb the tcp_pcb over which to send a segment + * @param flags the flags to set in the segment header + * @return ERR_OK if sent, another err_t otherwise + */ +err_t +tcp_send_ctrl(struct tcp_pcb *pcb, u8_t flags) +{ + /* no data, no length, flags, copy=1, no optdata */ + return tcp_enqueue(pcb, NULL, 0, flags, TCP_WRITE_FLAG_COPY, 0); +} + +/** + * Write data for sending (but does not send it immediately). + * + * It waits in the expectation of more data being sent soon (as + * it can send them more efficiently by combining them together). + * To prompt the system to send data now, call tcp_output() after + * calling tcp_write(). + * + * @param pcb Protocol control block of the TCP connection to enqueue data for. + * @param data pointer to the data to send + * @param len length (in bytes) of the data to send + * @param apiflags combination of following flags : + * - TCP_WRITE_FLAG_COPY (0x01) data will be copied into memory belonging to the stack + * - TCP_WRITE_FLAG_MORE (0x02) for TCP connection, PSH flag will be set on last segment sent, + * @return ERR_OK if enqueued, another err_t on error + * + * @see tcp_write() + */ +err_t +tcp_write(struct tcp_pcb *pcb, const void *data, u16_t len, u8_t apiflags) +{ + LWIP_DEBUGF(TCP_OUTPUT_DEBUG, ("tcp_write(pcb=%p, data=%p, len=%"U16_F", apiflags=%"U16_F")\n", (void *)pcb, + data, len, (u16_t)apiflags)); + /* connection is in valid state for data transmission? */ + if (pcb->state == ESTABLISHED || + pcb->state == CLOSE_WAIT || + pcb->state == SYN_SENT || + pcb->state == SYN_RCVD) { + if (len > 0) { +#if LWIP_TCP_TIMESTAMPS + return tcp_enqueue(pcb, (void *)data, len, 0, apiflags, + pcb->flags & TF_TIMESTAMP ? TF_SEG_OPTS_TS : 0); +#else + return tcp_enqueue(pcb, (void *)data, len, 0, apiflags, 0); +#endif + } + return ERR_OK; + } else { + LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_STATE | LWIP_DBG_LEVEL_SEVERE, ("tcp_write() called in invalid state\n")); + return ERR_CONN; + } +} + +/** + * Enqueue data and/or TCP options for transmission + * + * Called by tcp_connect(), tcp_listen_input(), tcp_send_ctrl() and tcp_write(). + * + * @param pcb Protocol control block for the TCP connection to enqueue data for. + * @param arg Pointer to the data to be enqueued for sending. + * @param len Data length in bytes + * @param flags tcp header flags to set in the outgoing segment + * @param apiflags combination of following flags : + * - TCP_WRITE_FLAG_COPY (0x01) data will be copied into memory belonging to the stack + * - TCP_WRITE_FLAG_MORE (0x02) for TCP connection, PSH flag will be set on last segment sent, + * @param optflags options to include in segment later on (see definition of struct tcp_seg) + */ +err_t +tcp_enqueue(struct tcp_pcb *pcb, void *arg, u16_t len, + u8_t flags, u8_t apiflags, u8_t optflags) +{ + struct pbuf *p; + struct tcp_seg *seg, *useg, *queue; + u32_t seqno; + u16_t left, seglen; + void *ptr; + u16_t queuelen; + u8_t optlen; + + LWIP_DEBUGF(TCP_OUTPUT_DEBUG, + ("tcp_enqueue(pcb=%p, arg=%p, len=%"U16_F", flags=%"X16_F", apiflags=%"U16_F")\n", + (void *)pcb, arg, len, (u16_t)flags, (u16_t)apiflags)); + LWIP_ERROR("tcp_enqueue: packet needs payload, options, or SYN/FIN (programmer violates API)", + ((len != 0) || (optflags != 0) || ((flags & (TCP_SYN | TCP_FIN)) != 0)), + return ERR_ARG;); + LWIP_ERROR("tcp_enqueue: len != 0 || arg == NULL (programmer violates API)", + ((len != 0) || (arg == NULL)), return ERR_ARG;); + + /* fail on too much data */ + if (len > pcb->snd_buf) { + LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_LEVEL_WARNING, + ("tcp_enqueue: too much data (len=%"U16_F" > snd_buf=%"U16_F")\n", len, pcb->snd_buf)); + pcb->flags |= TF_NAGLEMEMERR; + return ERR_MEM; + } + left = len; + ptr = arg; + + optlen = LWIP_TCP_OPT_LENGTH(optflags); + + /* seqno will be the sequence number of the first segment enqueued + * by the call to this function. */ + seqno = pcb->snd_lbb; + + LWIP_DEBUGF(TCP_QLEN_DEBUG, ("tcp_enqueue: queuelen: %"U16_F"\n", (u16_t)pcb->snd_queuelen)); + + /* If total number of pbufs on the unsent/unacked queues exceeds the + * configured maximum, return an error */ + queuelen = pcb->snd_queuelen; + /* check for configured max queuelen and possible overflow */ + if ((queuelen >= TCP_SND_QUEUELEN) || (queuelen > TCP_SNDQUEUELEN_OVERFLOW)) { + LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_LEVEL_WARNING, + ("tcp_enqueue: too long queue %"U16_F" (max %"U16_F")\n", queuelen, TCP_SND_QUEUELEN)); + TCP_STATS_INC(tcp.memerr); + pcb->flags |= TF_NAGLEMEMERR; + return ERR_MEM; + } + if (queuelen != 0) { + LWIP_ASSERT("tcp_enqueue: pbufs on queue => at least one queue non-empty", + pcb->unacked != NULL || pcb->unsent != NULL); + } else { + LWIP_ASSERT("tcp_enqueue: no pbufs on queue => both queues empty", + pcb->unacked == NULL && pcb->unsent == NULL); + } + + /* First, break up the data into segments and tuck them together in + * the local "queue" variable. */ + useg = queue = seg = NULL; + seglen = 0; + while (queue == NULL || left > 0) { + /* The segment length (including options) should be at most the MSS */ + seglen = left > (pcb->mss - optlen) ? (pcb->mss - optlen) : left; + + /* Allocate memory for tcp_seg, and fill in fields. */ + seg = memp_malloc(MEMP_TCP_SEG); + if (seg == NULL) { + LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_LEVEL_SERIOUS, + ("tcp_enqueue: could not allocate memory for tcp_seg\n")); + goto memerr; + } + seg->next = NULL; + seg->p = NULL; + + /* first segment of to-be-queued data? */ + if (queue == NULL) { + queue = seg; + } + /* subsequent segments of to-be-queued data */ + else { + /* Attach the segment to the end of the queued segments */ + LWIP_ASSERT("useg != NULL", useg != NULL); + useg->next = seg; + } + /* remember last segment of to-be-queued data for next iteration */ + useg = seg; + + /* If copy is set, memory should be allocated + * and data copied into pbuf, otherwise data comes from + * ROM or other static memory, and need not be copied. */ + if (apiflags & TCP_WRITE_FLAG_COPY) { + if ((seg->p = pbuf_alloc(PBUF_TRANSPORT, seglen + optlen, PBUF_RAM)) == NULL) { + LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_LEVEL_SERIOUS, + ("tcp_enqueue : could not allocate memory for pbuf copy size %"U16_F"\n", seglen)); + goto memerr; + } + LWIP_ASSERT("check that first pbuf can hold the complete seglen", + (seg->p->len >= seglen + optlen)); + queuelen += pbuf_clen(seg->p); + if (arg != NULL) { + MEMCPY((char *)seg->p->payload + optlen, ptr, seglen); + } + seg->dataptr = seg->p->payload; + } + /* do not copy data */ + else { + /* First, allocate a pbuf for the headers. */ + if ((seg->p = pbuf_alloc(PBUF_TRANSPORT, optlen, PBUF_RAM)) == NULL) { + LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_LEVEL_SERIOUS, + ("tcp_enqueue: could not allocate memory for header pbuf\n")); + goto memerr; + } + queuelen += pbuf_clen(seg->p); + + /* Second, allocate a pbuf for holding the data. + * since the referenced data is available at least until it is sent out on the + * link (as it has to be ACKed by the remote party) we can safely use PBUF_ROM + * instead of PBUF_REF here. + */ + if (left > 0) { + if ((p = pbuf_alloc(PBUF_RAW, seglen, PBUF_ROM)) == NULL) { + /* If allocation fails, we have to deallocate the header pbuf as well. */ + pbuf_free(seg->p); + seg->p = NULL; + LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_LEVEL_SERIOUS, + ("tcp_enqueue: could not allocate memory for zero-copy pbuf\n")); + goto memerr; + } + ++queuelen; + /* reference the non-volatile payload data */ + p->payload = ptr; + seg->dataptr = ptr; + + /* Concatenate the headers and data pbufs together. */ + pbuf_cat(seg->p/*header*/, p/*data*/); + p = NULL; + } + } + + /* Now that there are more segments queued, we check again if the + length of the queue exceeds the configured maximum or overflows. */ + if ((queuelen > TCP_SND_QUEUELEN) || (queuelen > TCP_SNDQUEUELEN_OVERFLOW)) { + LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_LEVEL_SERIOUS, + ("tcp_enqueue: queue too long %"U16_F" (%"U16_F")\n", queuelen, TCP_SND_QUEUELEN)); + goto memerr; + } + + seg->len = seglen; + + /* build TCP header */ + if (pbuf_header(seg->p, TCP_HLEN)) { + LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("tcp_enqueue: no room for TCP header in pbuf.\n")); + TCP_STATS_INC(tcp.err); + goto memerr; + } + seg->tcphdr = seg->p->payload; + seg->tcphdr->src = htons(pcb->local_port); + seg->tcphdr->dest = htons(pcb->remote_port); + seg->tcphdr->seqno = htonl(seqno); + seg->tcphdr->urgp = 0; + TCPH_FLAGS_SET(seg->tcphdr, flags); + /* don't fill in tcphdr->ackno and tcphdr->wnd until later */ + + seg->flags = optflags; + + /* Set the length of the header */ + TCPH_HDRLEN_SET(seg->tcphdr, (5 + optlen / 4)); + LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_TRACE, ("tcp_enqueue: queueing %"U32_F":%"U32_F" (0x%"X16_F")\n", + ntohl(seg->tcphdr->seqno), + ntohl(seg->tcphdr->seqno) + TCP_TCPLEN(seg), + (u16_t)flags)); + + left -= seglen; + seqno += seglen; + ptr = (void *)((u8_t *)ptr + seglen); + } + + /* Now that the data to be enqueued has been broken up into TCP + segments in the queue variable, we add them to the end of the + pcb->unsent queue. */ + if (pcb->unsent == NULL) { + useg = NULL; + } + else { + for (useg = pcb->unsent; useg->next != NULL; useg = useg->next); + } + /* { useg is last segment on the unsent queue, NULL if list is empty } */ + + /* If there is room in the last pbuf on the unsent queue, + chain the first pbuf on the queue together with that. */ + if (useg != NULL && + TCP_TCPLEN(useg) != 0 && + !(TCPH_FLAGS(useg->tcphdr) & (TCP_SYN | TCP_FIN)) && + (!(flags & (TCP_SYN | TCP_FIN)) || (flags == TCP_FIN)) && + /* fit within max seg size */ + (useg->len + queue->len <= pcb->mss) && + /* only concatenate segments with the same options */ + (useg->flags == queue->flags) && + /* segments are consecutive */ + (ntohl(useg->tcphdr->seqno) + useg->len == ntohl(queue->tcphdr->seqno)) ) { + /* Remove TCP header from first segment of our to-be-queued list */ + if(pbuf_header(queue->p, -(TCP_HLEN + optlen))) { + /* Can we cope with this failing? Just assert for now */ + LWIP_ASSERT("pbuf_header failed\n", 0); + TCP_STATS_INC(tcp.err); + goto memerr; + } + if (queue->p->len == 0) { + /* free the first (header-only) pbuf if it is now empty (contained only headers) */ + struct pbuf *old_q = queue->p; + queue->p = queue->p->next; + old_q->next = NULL; + queuelen--; + pbuf_free(old_q); + } + if (flags & TCP_FIN) { + /* the new segment contains only FIN, no data -> put the FIN into the last segment */ + LWIP_ASSERT("FIN enqueued together with data", queue->p == NULL && queue->len == 0); + TCPH_SET_FLAG(useg->tcphdr, TCP_FIN); + } else { + LWIP_ASSERT("zero-length pbuf", (queue->p != NULL) && (queue->p->len > 0)); + pbuf_cat(useg->p, queue->p); + useg->len += queue->len; + useg->next = queue->next; + } + + LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("tcp_enqueue: chaining segments, new len %"U16_F"\n", useg->len)); + if (seg == queue) { + seg = useg; + seglen = useg->len; + } + memp_free(MEMP_TCP_SEG, queue); + } + else { + /* empty list */ + if (useg == NULL) { + /* initialize list with this segment */ + pcb->unsent = queue; + } + /* enqueue segment */ + else { + useg->next = queue; + } + } + if ((flags & TCP_SYN) || (flags & TCP_FIN)) { + ++len; + } + if (flags & TCP_FIN) { + pcb->flags |= TF_FIN; + } + pcb->snd_lbb += len; + + pcb->snd_buf -= len; + + /* update number of segments on the queues */ + pcb->snd_queuelen = queuelen; + LWIP_DEBUGF(TCP_QLEN_DEBUG, ("tcp_enqueue: %"S16_F" (after enqueued)\n", pcb->snd_queuelen)); + if (pcb->snd_queuelen != 0) { + LWIP_ASSERT("tcp_enqueue: valid queue length", + pcb->unacked != NULL || pcb->unsent != NULL); + } + + /* Set the PSH flag in the last segment that we enqueued, but only + if the segment has data (indicated by seglen > 0). */ + if (seg != NULL && seglen > 0 && seg->tcphdr != NULL && ((apiflags & TCP_WRITE_FLAG_MORE)==0)) { + TCPH_SET_FLAG(seg->tcphdr, TCP_PSH); + } + + return ERR_OK; +memerr: + pcb->flags |= TF_NAGLEMEMERR; + TCP_STATS_INC(tcp.memerr); + + if (queue != NULL) { + tcp_segs_free(queue); + } + if (pcb->snd_queuelen != 0) { + LWIP_ASSERT("tcp_enqueue: valid queue length", pcb->unacked != NULL || + pcb->unsent != NULL); + } + LWIP_DEBUGF(TCP_QLEN_DEBUG | LWIP_DBG_STATE, ("tcp_enqueue: %"S16_F" (with mem err)\n", pcb->snd_queuelen)); + return ERR_MEM; +} + + +#if LWIP_TCP_TIMESTAMPS +/* Build a timestamp option (12 bytes long) at the specified options pointer) + * + * @param pcb tcp_pcb + * @param opts option pointer where to store the timestamp option + */ +static void +tcp_build_timestamp_option(struct tcp_pcb *pcb, u32_t *opts) +{ + /* Pad with two NOP options to make everything nicely aligned */ + opts[0] = htonl(0x0101080A); + opts[1] = htonl(sys_now()); + opts[2] = htonl(pcb->ts_recent); +} +#endif + +/** Send an ACK without data. + * + * @param pcb Protocol control block for the TCP connection to send the ACK + */ +err_t +tcp_send_empty_ack(struct tcp_pcb *pcb) +{ + struct pbuf *p; + struct tcp_hdr *tcphdr; + u8_t optlen = 0; + +#if LWIP_TCP_TIMESTAMPS + if (pcb->flags & TF_TIMESTAMP) { + optlen = LWIP_TCP_OPT_LENGTH(TF_SEG_OPTS_TS); + } +#endif + p = pbuf_alloc(PBUF_IP, TCP_HLEN + optlen, PBUF_RAM); + if (p == NULL) { + LWIP_DEBUGF(TCP_OUTPUT_DEBUG, ("tcp_output: (ACK) could not allocate pbuf\n")); + return ERR_BUF; + } + LWIP_DEBUGF(TCP_OUTPUT_DEBUG, + ("tcp_output: sending ACK for %"U32_F"\n", pcb->rcv_nxt)); + /* remove ACK flags from the PCB, as we send an empty ACK now */ + pcb->flags &= ~(TF_ACK_DELAY | TF_ACK_NOW); + + tcphdr = tcp_output_set_header(pcb, p, optlen, htonl(pcb->snd_nxt)); + + /* NB. MSS option is only sent on SYNs, so ignore it here */ +#if LWIP_TCP_TIMESTAMPS + pcb->ts_lastacksent = pcb->rcv_nxt; + + if (pcb->flags & TF_TIMESTAMP) { + tcp_build_timestamp_option(pcb, (u32_t *)(tcphdr + 1)); + } +#endif + +#if CHECKSUM_GEN_TCP + tcphdr->chksum = inet_chksum_pseudo(p, &(pcb->local_ip), &(pcb->remote_ip), + IP_PROTO_TCP, p->tot_len); +#endif +#if LWIP_NETIF_HWADDRHINT + ip_output_hinted(p, &(pcb->local_ip), &(pcb->remote_ip), pcb->ttl, pcb->tos, + IP_PROTO_TCP, &(pcb->addr_hint)); +#else /* LWIP_NETIF_HWADDRHINT*/ + ip_output(p, &(pcb->local_ip), &(pcb->remote_ip), pcb->ttl, pcb->tos, + IP_PROTO_TCP); +#endif /* LWIP_NETIF_HWADDRHINT*/ + pbuf_free(p); + + return ERR_OK; +} + +/** + * Find out what we can send and send it + * + * @param pcb Protocol control block for the TCP connection to send data + * @return ERR_OK if data has been sent or nothing to send + * another err_t on error + */ +err_t +tcp_output(struct tcp_pcb *pcb) +{ + struct tcp_seg *seg, *useg; + u32_t wnd, snd_nxt; +#if TCP_CWND_DEBUG + s16_t i = 0; +#endif /* TCP_CWND_DEBUG */ + + /* First, check if we are invoked by the TCP input processing + code. If so, we do not output anything. Instead, we rely on the + input processing code to call us when input processing is done + with. */ + if (tcp_input_pcb == pcb) { + return ERR_OK; + } + + wnd = LWIP_MIN(pcb->snd_wnd, pcb->cwnd); + + seg = pcb->unsent; + + /* If the TF_ACK_NOW flag is set and no data will be sent (either + * because the ->unsent queue is empty or because the window does + * not allow it), construct an empty ACK segment and send it. + * + * If data is to be sent, we will just piggyback the ACK (see below). + */ + if (pcb->flags & TF_ACK_NOW && + (seg == NULL || + ntohl(seg->tcphdr->seqno) - pcb->lastack + seg->len > wnd)) { + return tcp_send_empty_ack(pcb); + } + + /* useg should point to last segment on unacked queue */ + useg = pcb->unacked; + if (useg != NULL) { + for (; useg->next != NULL; useg = useg->next); + } + +#if TCP_OUTPUT_DEBUG + if (seg == NULL) { + LWIP_DEBUGF(TCP_OUTPUT_DEBUG, ("tcp_output: nothing to send (%p)\n", + (void*)pcb->unsent)); + } +#endif /* TCP_OUTPUT_DEBUG */ +#if TCP_CWND_DEBUG + if (seg == NULL) { + LWIP_DEBUGF(TCP_CWND_DEBUG, ("tcp_output: snd_wnd %"U16_F + ", cwnd %"U16_F", wnd %"U32_F + ", seg == NULL, ack %"U32_F"\n", + pcb->snd_wnd, pcb->cwnd, wnd, pcb->lastack)); + } else { + LWIP_DEBUGF(TCP_CWND_DEBUG, + ("tcp_output: snd_wnd %"U16_F", cwnd %"U16_F", wnd %"U32_F + ", effwnd %"U32_F", seq %"U32_F", ack %"U32_F"\n", + pcb->snd_wnd, pcb->cwnd, wnd, + ntohl(seg->tcphdr->seqno) - pcb->lastack + seg->len, + ntohl(seg->tcphdr->seqno), pcb->lastack)); + } +#endif /* TCP_CWND_DEBUG */ + /* data available and window allows it to be sent? */ + while (seg != NULL && + ntohl(seg->tcphdr->seqno) - pcb->lastack + seg->len <= wnd) { + LWIP_ASSERT("RST not expected here!", + (TCPH_FLAGS(seg->tcphdr) & TCP_RST) == 0); + /* Stop sending if the nagle algorithm would prevent it + * Don't stop: + * - if tcp_enqueue had a memory error before (prevent delayed ACK timeout) or + * - if FIN was already enqueued for this PCB (SYN is always alone in a segment - + * either seg->next != NULL or pcb->unacked == NULL; + * RST is no sent using tcp_enqueue/tcp_output. + */ + if((tcp_do_output_nagle(pcb) == 0) && + ((pcb->flags & (TF_NAGLEMEMERR | TF_FIN)) == 0)){ + break; + } +#if TCP_CWND_DEBUG + LWIP_DEBUGF(TCP_CWND_DEBUG, ("tcp_output: snd_wnd %"U16_F", cwnd %"U16_F", wnd %"U32_F", effwnd %"U32_F", seq %"U32_F", ack %"U32_F", i %"S16_F"\n", + pcb->snd_wnd, pcb->cwnd, wnd, + ntohl(seg->tcphdr->seqno) + seg->len - + pcb->lastack, + ntohl(seg->tcphdr->seqno), pcb->lastack, i)); + ++i; +#endif /* TCP_CWND_DEBUG */ + + pcb->unsent = seg->next; + + if (pcb->state != SYN_SENT) { + TCPH_SET_FLAG(seg->tcphdr, TCP_ACK); + pcb->flags &= ~(TF_ACK_DELAY | TF_ACK_NOW); + } + + tcp_output_segment(seg, pcb); + snd_nxt = ntohl(seg->tcphdr->seqno) + TCP_TCPLEN(seg); + if (TCP_SEQ_LT(pcb->snd_nxt, snd_nxt)) { + pcb->snd_nxt = snd_nxt; + } + /* put segment on unacknowledged list if length > 0 */ + if (TCP_TCPLEN(seg) > 0) { + seg->next = NULL; + /* unacked list is empty? */ + if (pcb->unacked == NULL) { + pcb->unacked = seg; + useg = seg; + /* unacked list is not empty? */ + } else { + /* In the case of fast retransmit, the packet should not go to the tail + * of the unacked queue, but rather somewhere before it. We need to check for + * this case. -STJ Jul 27, 2004 */ + if (TCP_SEQ_LT(ntohl(seg->tcphdr->seqno), ntohl(useg->tcphdr->seqno))){ + /* add segment to before tail of unacked list, keeping the list sorted */ + struct tcp_seg **cur_seg = &(pcb->unacked); + while (*cur_seg && + TCP_SEQ_LT(ntohl((*cur_seg)->tcphdr->seqno), ntohl(seg->tcphdr->seqno))) { + cur_seg = &((*cur_seg)->next ); + } + seg->next = (*cur_seg); + (*cur_seg) = seg; + } else { + /* add segment to tail of unacked list */ + useg->next = seg; + useg = useg->next; + } + } + /* do not queue empty segments on the unacked list */ + } else { + tcp_seg_free(seg); + } + seg = pcb->unsent; + } + + if (seg != NULL && pcb->persist_backoff == 0 && + ntohl(seg->tcphdr->seqno) - pcb->lastack + seg->len > pcb->snd_wnd) { + /* prepare for persist timer */ + pcb->persist_cnt = 0; + pcb->persist_backoff = 1; + } + + pcb->flags &= ~TF_NAGLEMEMERR; + return ERR_OK; +} + +/** + * Called by tcp_output() to actually send a TCP segment over IP. + * + * @param seg the tcp_seg to send + * @param pcb the tcp_pcb for the TCP connection used to send the segment + */ +static void +tcp_output_segment(struct tcp_seg *seg, struct tcp_pcb *pcb) +{ + u16_t len; + struct netif *netif; + u32_t *opts; + + /** @bug Exclude retransmitted segments from this count. */ + snmp_inc_tcpoutsegs(); + + /* The TCP header has already been constructed, but the ackno and + wnd fields remain. */ + seg->tcphdr->ackno = htonl(pcb->rcv_nxt); + + /* advertise our receive window size in this TCP segment */ + seg->tcphdr->wnd = htons(pcb->rcv_ann_wnd); + + pcb->rcv_ann_right_edge = pcb->rcv_nxt + pcb->rcv_ann_wnd; + + /* Add any requested options. NB MSS option is only set on SYN + packets, so ignore it here */ + opts = (u32_t *)(seg->tcphdr + 1); + if (seg->flags & TF_SEG_OPTS_MSS) { + TCP_BUILD_MSS_OPTION(*opts); + opts += 1; + } +#if LWIP_TCP_TIMESTAMPS + pcb->ts_lastacksent = pcb->rcv_nxt; + + if (seg->flags & TF_SEG_OPTS_TS) { + tcp_build_timestamp_option(pcb, opts); + opts += 3; + } +#endif + +#ifdef _TEST_HD_ + /* ANGR: set rtime this _before_ checking ip_route(). Otherwise TCP_SYN will + * not be retransmitted in case the interface was down and tcp_connect() + * will not return any error. Since we still want the err_cb() (or maybe + * the wifi link comes up), make sure that we fulfill the retransmissions in + * tcp_slowtmr() + */ + + /* Set retransmission timer running if it is not currently enabled */ + if(pcb->rtime == -1) + pcb->rtime = 0; +#endif + + /* If we don't have a local IP address, we get one by + calling ip_route(). */ + if (ip_addr_isany(&(pcb->local_ip))) { + netif = ip_route(&(pcb->remote_ip)); + if (netif == NULL) { + return; + } + ip_addr_set(&(pcb->local_ip), &(netif->ip_addr)); + } + +#ifndef _TEST_HD_ + //Set retransmission timer running if it is not currently enabled + if(pcb->rtime == -1) + pcb->rtime = 0; +#endif + + if (pcb->rttest == 0) { + pcb->rttest = tcp_ticks; + pcb->rtseq = ntohl(seg->tcphdr->seqno); + + LWIP_DEBUGF(TCP_RTO_DEBUG, ("tcp_output_segment: rtseq %"U32_F"\n", pcb->rtseq)); + } + LWIP_DEBUGF(TCP_OUTPUT_DEBUG, ("tcp_output_segment: %"U32_F":%"U32_F"\n", + htonl(seg->tcphdr->seqno), htonl(seg->tcphdr->seqno) + + seg->len)); + + len = (u16_t)((u8_t *)seg->tcphdr - (u8_t *)seg->p->payload); + + seg->p->len -= len; + seg->p->tot_len -= len; + + seg->p->payload = seg->tcphdr; + + seg->tcphdr->chksum = 0; +#if CHECKSUM_GEN_TCP + seg->tcphdr->chksum = inet_chksum_pseudo(seg->p, + &(pcb->local_ip), + &(pcb->remote_ip), + IP_PROTO_TCP, seg->p->tot_len); +#endif + TCP_STATS_INC(tcp.xmit); + +#if LWIP_NETIF_HWADDRHINT + ip_output_hinted(seg->p, &(pcb->local_ip), &(pcb->remote_ip), pcb->ttl, pcb->tos, + IP_PROTO_TCP, &(pcb->addr_hint)); +#else /* LWIP_NETIF_HWADDRHINT*/ + ip_output(seg->p, &(pcb->local_ip), &(pcb->remote_ip), pcb->ttl, pcb->tos, + IP_PROTO_TCP); +#endif /* LWIP_NETIF_HWADDRHINT*/ +} + +/** + * Send a TCP RESET packet (empty segment with RST flag set) either to + * abort a connection or to show that there is no matching local connection + * for a received segment. + * + * Called by tcp_abort() (to abort a local connection), tcp_input() (if no + * matching local pcb was found), tcp_listen_input() (if incoming segment + * has ACK flag set) and tcp_process() (received segment in the wrong state) + * + * Since a RST segment is in most cases not sent for an active connection, + * tcp_rst() has a number of arguments that are taken from a tcp_pcb for + * most other segment output functions. + * + * @param seqno the sequence number to use for the outgoing segment + * @param ackno the acknowledge number to use for the outgoing segment + * @param local_ip the local IP address to send the segment from + * @param remote_ip the remote IP address to send the segment to + * @param local_port the local TCP port to send the segment from + * @param remote_port the remote TCP port to send the segment to + */ +void +tcp_rst(u32_t seqno, u32_t ackno, + struct ip_addr *local_ip, struct ip_addr *remote_ip, + u16_t local_port, u16_t remote_port) +{ + struct pbuf *p; + struct tcp_hdr *tcphdr; + p = pbuf_alloc(PBUF_IP, TCP_HLEN, PBUF_RAM); + if (p == NULL) { + LWIP_DEBUGF(TCP_DEBUG, ("tcp_rst: could not allocate memory for pbuf\n")); + return; + } + LWIP_ASSERT("check that first pbuf can hold struct tcp_hdr", + (p->len >= sizeof(struct tcp_hdr))); + + tcphdr = p->payload; + tcphdr->src = htons(local_port); + tcphdr->dest = htons(remote_port); + tcphdr->seqno = htonl(seqno); + tcphdr->ackno = htonl(ackno); + TCPH_FLAGS_SET(tcphdr, TCP_RST | TCP_ACK); + tcphdr->wnd = htons(TCP_WND); + tcphdr->urgp = 0; + TCPH_HDRLEN_SET(tcphdr, 5); + + tcphdr->chksum = 0; +#if CHECKSUM_GEN_TCP + tcphdr->chksum = inet_chksum_pseudo(p, local_ip, remote_ip, + IP_PROTO_TCP, p->tot_len); +#endif + TCP_STATS_INC(tcp.xmit); + snmp_inc_tcpoutrsts(); + /* Send output with hardcoded TTL since we have no access to the pcb */ + ip_output(p, local_ip, remote_ip, TCP_TTL, 0, IP_PROTO_TCP); + pbuf_free(p); + LWIP_DEBUGF(TCP_RST_DEBUG, ("tcp_rst: seqno %"U32_F" ackno %"U32_F".\n", seqno, ackno)); +} + +/** + * Requeue all unacked segments for retransmission + * + * Called by tcp_slowtmr() for slow retransmission. + * + * @param pcb the tcp_pcb for which to re-enqueue all unacked segments + */ +void +tcp_rexmit_rto(struct tcp_pcb *pcb) +{ + struct tcp_seg *seg; + + if (pcb->unacked == NULL) { + return; + } + + /* Move all unacked segments to the head of the unsent queue */ + for (seg = pcb->unacked; seg->next != NULL; seg = seg->next); + /* concatenate unsent queue after unacked queue */ + seg->next = pcb->unsent; + /* unsent queue is the concatenated queue (of unacked, unsent) */ + pcb->unsent = pcb->unacked; + /* unacked queue is now empty */ + pcb->unacked = NULL; + + /* increment number of retransmissions */ + ++pcb->nrtx; + + /* Don't take any RTT measurements after retransmitting. */ + pcb->rttest = 0; + + /* Do the actual retransmission */ + tcp_output(pcb); +} + +/** + * Requeue the first unacked segment for retransmission + * + * Called by tcp_receive() for fast retramsmit. + * + * @param pcb the tcp_pcb for which to retransmit the first unacked segment + */ +void +tcp_rexmit(struct tcp_pcb *pcb) +{ + struct tcp_seg *seg; + struct tcp_seg **cur_seg; + + if (pcb->unacked == NULL) { + return; + } + + /* Move the first unacked segment to the unsent queue */ + /* Keep the unsent queue sorted. */ + seg = pcb->unacked; + pcb->unacked = seg->next; + + cur_seg = &(pcb->unsent); + while (*cur_seg && + TCP_SEQ_LT(ntohl((*cur_seg)->tcphdr->seqno), ntohl(seg->tcphdr->seqno))) { + cur_seg = &((*cur_seg)->next ); + } + seg->next = *cur_seg; + *cur_seg = seg; + + ++pcb->nrtx; + + /* Don't take any rtt measurements after retransmitting. */ + pcb->rttest = 0; + + /* Do the actual retransmission. */ + snmp_inc_tcpretranssegs(); + /* No need to call tcp_output: we are always called from tcp_input() + and thus tcp_output directly returns. */ +} + + +/** + * Handle retransmission after three dupacks received + * + * @param pcb the tcp_pcb for which to retransmit the first unacked segment + */ +void +tcp_rexmit_fast(struct tcp_pcb *pcb) +{ + if (pcb->unacked != NULL && !(pcb->flags & TF_INFR)) { + /* This is fast retransmit. Retransmit the first unacked segment. */ + LWIP_DEBUGF(TCP_FR_DEBUG, + ("tcp_receive: dupacks %"U16_F" (%"U32_F + "), fast retransmit %"U32_F"\n", + (u16_t)pcb->dupacks, pcb->lastack, + ntohl(pcb->unacked->tcphdr->seqno))); + tcp_rexmit(pcb); + + /* Set ssthresh to half of the minimum of the current + * cwnd and the advertised window */ + if (pcb->cwnd > pcb->snd_wnd) + pcb->ssthresh = pcb->snd_wnd / 2; + else + pcb->ssthresh = pcb->cwnd / 2; + + /* The minimum value for ssthresh should be 2 MSS */ + if (pcb->ssthresh < 2*pcb->mss) { + LWIP_DEBUGF(TCP_FR_DEBUG, + ("tcp_receive: The minimum value for ssthresh %"U16_F + " should be min 2 mss %"U16_F"...\n", + pcb->ssthresh, 2*pcb->mss)); + pcb->ssthresh = 2*pcb->mss; + } + + pcb->cwnd = pcb->ssthresh + 3 * pcb->mss; + pcb->flags |= TF_INFR; + } +} + + +/** + * Send keepalive packets to keep a connection active although + * no data is sent over it. + * + * Called by tcp_slowtmr() + * + * @param pcb the tcp_pcb for which to send a keepalive packet + */ +void +tcp_keepalive(struct tcp_pcb *pcb) +{ + struct pbuf *p; + struct tcp_hdr *tcphdr; + + LWIP_DEBUGF(TCP_DEBUG, ("tcp_keepalive: sending KEEPALIVE probe to %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n", + ip4_addr1(&pcb->remote_ip), ip4_addr2(&pcb->remote_ip), + ip4_addr3(&pcb->remote_ip), ip4_addr4(&pcb->remote_ip))); + + LWIP_DEBUGF(TCP_DEBUG, ("tcp_keepalive: tcp_ticks %"U32_F" pcb->tmr %"U32_F" pcb->keep_cnt_sent %"U16_F"\n", + tcp_ticks, pcb->tmr, pcb->keep_cnt_sent)); + + p = pbuf_alloc(PBUF_IP, TCP_HLEN, PBUF_RAM); + + if(p == NULL) { + LWIP_DEBUGF(TCP_DEBUG, + ("tcp_keepalive: could not allocate memory for pbuf\n")); + return; + } + LWIP_ASSERT("check that first pbuf can hold struct tcp_hdr", + (p->len >= sizeof(struct tcp_hdr))); + + tcphdr = tcp_output_set_header(pcb, p, 0, htonl(pcb->snd_nxt - 1)); + +#if CHECKSUM_GEN_TCP + tcphdr->chksum = inet_chksum_pseudo(p, &pcb->local_ip, &pcb->remote_ip, + IP_PROTO_TCP, p->tot_len); +#endif + TCP_STATS_INC(tcp.xmit); + + /* Send output to IP */ +#if LWIP_NETIF_HWADDRHINT + ip_output_hinted(p, &pcb->local_ip, &pcb->remote_ip, pcb->ttl, 0, IP_PROTO_TCP, + &(pcb->addr_hint)); +#else /* LWIP_NETIF_HWADDRHINT*/ + ip_output(p, &pcb->local_ip, &pcb->remote_ip, pcb->ttl, 0, IP_PROTO_TCP); +#endif /* LWIP_NETIF_HWADDRHINT*/ + + pbuf_free(p); + + LWIP_DEBUGF(TCP_DEBUG, ("tcp_keepalive: seqno %"U32_F" ackno %"U32_F".\n", + pcb->snd_nxt - 1, pcb->rcv_nxt)); +} + + +/** + * Send persist timer zero-window probes to keep a connection active + * when a window update is lost. + * + * Called by tcp_slowtmr() + * + * @param pcb the tcp_pcb for which to send a zero-window probe packet + */ +void +tcp_zero_window_probe(struct tcp_pcb *pcb) +{ + struct pbuf *p; + struct tcp_hdr *tcphdr; + struct tcp_seg *seg; + u16_t len; + u8_t is_fin; + + LWIP_DEBUGF(TCP_DEBUG, + ("tcp_zero_window_probe: sending ZERO WINDOW probe to %" + U16_F".%"U16_F".%"U16_F".%"U16_F"\n", + ip4_addr1(&pcb->remote_ip), ip4_addr2(&pcb->remote_ip), + ip4_addr3(&pcb->remote_ip), ip4_addr4(&pcb->remote_ip))); + + LWIP_DEBUGF(TCP_DEBUG, + ("tcp_zero_window_probe: tcp_ticks %"U32_F + " pcb->tmr %"U32_F" pcb->keep_cnt_sent %"U16_F"\n", + tcp_ticks, pcb->tmr, pcb->keep_cnt_sent)); + + seg = pcb->unacked; + + if(seg == NULL) + seg = pcb->unsent; + + if(seg == NULL) + return; + + is_fin = ((TCPH_FLAGS(seg->tcphdr) & TCP_FIN) != 0) && (seg->len == 0); + len = is_fin ? TCP_HLEN : TCP_HLEN + 1; + + p = pbuf_alloc(PBUF_IP, len, PBUF_RAM); + if(p == NULL) { + LWIP_DEBUGF(TCP_DEBUG, ("tcp_zero_window_probe: no memory for pbuf\n")); + return; + } + LWIP_ASSERT("check that first pbuf can hold struct tcp_hdr", + (p->len >= sizeof(struct tcp_hdr))); + + tcphdr = tcp_output_set_header(pcb, p, 0, seg->tcphdr->seqno); + + if (is_fin) { + /* FIN segment, no data */ + TCPH_FLAGS_SET(tcphdr, TCP_ACK | TCP_FIN); + } else { + /* Data segment, copy in one byte from the head of the unacked queue */ + *((char *)p->payload + sizeof(struct tcp_hdr)) = *(char *)seg->dataptr; + } + +#if CHECKSUM_GEN_TCP + tcphdr->chksum = inet_chksum_pseudo(p, &pcb->local_ip, &pcb->remote_ip, + IP_PROTO_TCP, p->tot_len); +#endif + TCP_STATS_INC(tcp.xmit); + + /* Send output to IP */ +#if LWIP_NETIF_HWADDRHINT + ip_output_hinted(p, &pcb->local_ip, &pcb->remote_ip, pcb->ttl, 0, IP_PROTO_TCP, + &(pcb->addr_hint)); +#else /* LWIP_NETIF_HWADDRHINT*/ + ip_output(p, &pcb->local_ip, &pcb->remote_ip, pcb->ttl, 0, IP_PROTO_TCP); +#endif /* LWIP_NETIF_HWADDRHINT*/ + + pbuf_free(p); + + LWIP_DEBUGF(TCP_DEBUG, ("tcp_zero_window_probe: seqno %"U32_F + " ackno %"U32_F".\n", + pcb->snd_nxt - 1, pcb->rcv_nxt)); +} +#endif /* LWIP_TCP */ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/udp.c b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/udp.c new file mode 100644 index 000000000..697ca7ce3 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/udp.c @@ -0,0 +1,843 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * User Datagram Protocol module + * + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + + +/* udp.c + * + * The code for the User Datagram Protocol UDP & UDPLite (RFC 3828). + * + */ + +/* @todo Check the use of '(struct udp_pcb).chksum_len_rx'! + */ + +#include "lwip/opt.h" + +#if LWIP_UDP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/udp.h" +#include "lwip/def.h" +#include "lwip/memp.h" +#include "lwip/inet.h" +#include "lwip/inet_chksum.h" +#include "lwip/ip_addr.h" +#include "lwip/netif.h" +#include "lwip/icmp.h" +#include "lwip/stats.h" +#include "lwip/snmp.h" +#include "arch/perf.h" +#include "lwip/dhcp.h" + +#include + +/* The list of UDP PCBs */ +/* exported in udp.h (was static) */ +struct udp_pcb *udp_pcbs; + +/** + * Process an incoming UDP datagram. + * + * Given an incoming UDP datagram (as a chain of pbufs) this function + * finds a corresponding UDP PCB and hands over the pbuf to the pcbs + * recv function. If no pcb is found or the datagram is incorrect, the + * pbuf is freed. + * + * @param p pbuf to be demultiplexed to a UDP PCB. + * @param inp network interface on which the datagram was received. + * + */ +void +udp_input(struct pbuf *p, struct netif *inp) +{ + struct udp_hdr *udphdr; + struct udp_pcb *pcb, *prev; + struct udp_pcb *uncon_pcb; + struct ip_hdr *iphdr; + u16_t src, dest; + u8_t local_match; + u8_t broadcast; + + PERF_START; + + UDP_STATS_INC(udp.recv); + + iphdr = p->payload; + + /* Check minimum length (IP header + UDP header) + * and move payload pointer to UDP header */ + if (p->tot_len < (IPH_HL(iphdr) * 4 + UDP_HLEN) || pbuf_header(p, -(s16_t)(IPH_HL(iphdr) * 4))) { + /* drop short packets */ + LWIP_DEBUGF(UDP_DEBUG, + ("udp_input: short UDP datagram (%"U16_F" bytes) discarded\n", p->tot_len)); + UDP_STATS_INC(udp.lenerr); + UDP_STATS_INC(udp.drop); + snmp_inc_udpinerrors(); + pbuf_free(p); + goto end; + } + + udphdr = (struct udp_hdr *)p->payload; + + /* is broadcast packet ? */ + broadcast = ip_addr_isbroadcast(&(iphdr->dest), inp); + + LWIP_DEBUGF(UDP_DEBUG, ("udp_input: received datagram of length %"U16_F"\n", p->tot_len)); + + /* convert src and dest ports to host byte order */ + src = ntohs(udphdr->src); + dest = ntohs(udphdr->dest); + + udp_debug_print(udphdr); + + /* print the UDP source and destination */ + LWIP_DEBUGF(UDP_DEBUG, + ("udp (%"U16_F".%"U16_F".%"U16_F".%"U16_F", %"U16_F") <-- " + "(%"U16_F".%"U16_F".%"U16_F".%"U16_F", %"U16_F")\n", + ip4_addr1(&iphdr->dest), ip4_addr2(&iphdr->dest), + ip4_addr3(&iphdr->dest), ip4_addr4(&iphdr->dest), ntohs(udphdr->dest), + ip4_addr1(&iphdr->src), ip4_addr2(&iphdr->src), + ip4_addr3(&iphdr->src), ip4_addr4(&iphdr->src), ntohs(udphdr->src))); + +#if LWIP_DHCP + pcb = NULL; + /* when LWIP_DHCP is active, packets to DHCP_CLIENT_PORT may only be processed by + the dhcp module, no other UDP pcb may use the local UDP port DHCP_CLIENT_PORT */ + if (dest == DHCP_CLIENT_PORT) { + /* all packets for DHCP_CLIENT_PORT not coming from DHCP_SERVER_PORT are dropped! */ + if (src == DHCP_SERVER_PORT) { + if ((inp->dhcp != NULL) && (inp->dhcp->pcb != NULL)) { + /* accept the packe if + (- broadcast or directed to us) -> DHCP is link-layer-addressed, local ip is always ANY! + - inp->dhcp->pcb->remote == ANY or iphdr->src */ + if ((ip_addr_isany(&inp->dhcp->pcb->remote_ip) || + ip_addr_cmp(&(inp->dhcp->pcb->remote_ip), &(iphdr->src)))) { + pcb = inp->dhcp->pcb; + } + } + } + } else +#endif /* LWIP_DHCP */ + { + prev = NULL; + local_match = 0; + uncon_pcb = NULL; + /* Iterate through the UDP pcb list for a matching pcb. + * 'Perfect match' pcbs (connected to the remote port & ip address) are + * preferred. If no perfect match is found, the first unconnected pcb that + * matches the local port and ip address gets the datagram. */ + for (pcb = udp_pcbs; pcb != NULL; pcb = pcb->next) { + local_match = 0; + /* print the PCB local and remote address */ + LWIP_DEBUGF(UDP_DEBUG, + ("pcb (%"U16_F".%"U16_F".%"U16_F".%"U16_F", %"U16_F") --- " + "(%"U16_F".%"U16_F".%"U16_F".%"U16_F", %"U16_F")\n", + ip4_addr1(&pcb->local_ip), ip4_addr2(&pcb->local_ip), + ip4_addr3(&pcb->local_ip), ip4_addr4(&pcb->local_ip), pcb->local_port, + ip4_addr1(&pcb->remote_ip), ip4_addr2(&pcb->remote_ip), + ip4_addr3(&pcb->remote_ip), ip4_addr4(&pcb->remote_ip), pcb->remote_port)); + + /* compare PCB local addr+port to UDP destination addr+port */ + if ((pcb->local_port == dest) && + ((!broadcast && ip_addr_isany(&pcb->local_ip)) || + ip_addr_cmp(&(pcb->local_ip), &(iphdr->dest)) || +#if LWIP_IGMP + ip_addr_ismulticast(&(iphdr->dest)) || +#endif /* LWIP_IGMP */ +#if IP_SOF_BROADCAST_RECV + (broadcast && (pcb->so_options & SOF_BROADCAST)))) { +#else /* IP_SOF_BROADCAST_RECV */ + (broadcast))) { +#endif /* IP_SOF_BROADCAST_RECV */ + local_match = 1; + if ((uncon_pcb == NULL) && + ((pcb->flags & UDP_FLAGS_CONNECTED) == 0)) { + /* the first unconnected matching PCB */ + uncon_pcb = pcb; + } + } + /* compare PCB remote addr+port to UDP source addr+port */ + if ((local_match != 0) && + (pcb->remote_port == src) && + (ip_addr_isany(&pcb->remote_ip) || + ip_addr_cmp(&(pcb->remote_ip), &(iphdr->src)))) { + /* the first fully matching PCB */ + if (prev != NULL) { + /* move the pcb to the front of udp_pcbs so that is + found faster next time */ + prev->next = pcb->next; + pcb->next = udp_pcbs; + udp_pcbs = pcb; + } else { + UDP_STATS_INC(udp.cachehit); + } + break; + } + prev = pcb; + } + /* no fully matching pcb found? then look for an unconnected pcb */ + if (pcb == NULL) { + pcb = uncon_pcb; + } + } + + /* Check checksum if this is a match or if it was directed at us. */ + if (pcb != NULL || ip_addr_cmp(&inp->ip_addr, &iphdr->dest)) { + LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE, ("udp_input: calculating checksum\n")); +#if LWIP_UDPLITE + if (IPH_PROTO(iphdr) == IP_PROTO_UDPLITE) { + /* Do the UDP Lite checksum */ +#if CHECKSUM_CHECK_UDP + u16_t chklen = ntohs(udphdr->len); + if (chklen < sizeof(struct udp_hdr)) { + if (chklen == 0) { + /* For UDP-Lite, checksum length of 0 means checksum + over the complete packet (See RFC 3828 chap. 3.1) */ + chklen = p->tot_len; + } else { + /* At least the UDP-Lite header must be covered by the + checksum! (Again, see RFC 3828 chap. 3.1) */ + UDP_STATS_INC(udp.chkerr); + UDP_STATS_INC(udp.drop); + snmp_inc_udpinerrors(); + pbuf_free(p); + goto end; + } + } + if (inet_chksum_pseudo_partial(p, (struct ip_addr *)&(iphdr->src), + (struct ip_addr *)&(iphdr->dest), + IP_PROTO_UDPLITE, p->tot_len, chklen) != 0) { + LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, + ("udp_input: UDP Lite datagram discarded due to failing checksum\n")); + UDP_STATS_INC(udp.chkerr); + UDP_STATS_INC(udp.drop); + snmp_inc_udpinerrors(); + pbuf_free(p); + goto end; + } +#endif /* CHECKSUM_CHECK_UDP */ + } else +#endif /* LWIP_UDPLITE */ + { +#if CHECKSUM_CHECK_UDP + if (udphdr->chksum != 0) { + if (inet_chksum_pseudo(p, (struct ip_addr *)&(iphdr->src), + (struct ip_addr *)&(iphdr->dest), + IP_PROTO_UDP, p->tot_len) != 0) { + LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, + ("udp_input: UDP datagram discarded due to failing checksum\n")); + UDP_STATS_INC(udp.chkerr); + UDP_STATS_INC(udp.drop); + snmp_inc_udpinerrors(); + pbuf_free(p); + goto end; + } + } +#endif /* CHECKSUM_CHECK_UDP */ + } + if(pbuf_header(p, -UDP_HLEN)) { + /* Can we cope with this failing? Just assert for now */ + LWIP_ASSERT("pbuf_header failed\n", 0); + UDP_STATS_INC(udp.drop); + snmp_inc_udpinerrors(); + pbuf_free(p); + goto end; + } + if (pcb != NULL) { + snmp_inc_udpindatagrams(); + /* callback */ + if (pcb->recv != NULL) { + /* now the recv function is responsible for freeing p */ + pcb->recv(pcb->recv_arg, pcb, p, &iphdr->src, src); + } else { + /* no recv function registered? then we have to free the pbuf! */ + pbuf_free(p); + goto end; + } + } else { + LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE, ("udp_input: not for us.\n")); + +#if LWIP_ICMP + /* No match was found, send ICMP destination port unreachable unless + destination address was broadcast/multicast. */ + if (!broadcast && + !ip_addr_ismulticast(&iphdr->dest)) { + /* move payload pointer back to ip header */ + pbuf_header(p, (IPH_HL(iphdr) * 4) + UDP_HLEN); + LWIP_ASSERT("p->payload == iphdr", (p->payload == iphdr)); + icmp_dest_unreach(p, ICMP_DUR_PORT); + } +#endif /* LWIP_ICMP */ + UDP_STATS_INC(udp.proterr); + UDP_STATS_INC(udp.drop); + snmp_inc_udpnoports(); + pbuf_free(p); + } + } else { + pbuf_free(p); + } +end: + PERF_STOP("udp_input"); +} + +/** + * Send data using UDP. + * + * @param pcb UDP PCB used to send the data. + * @param p chain of pbuf's to be sent. + * + * The datagram will be sent to the current remote_ip & remote_port + * stored in pcb. If the pcb is not bound to a port, it will + * automatically be bound to a random port. + * + * @return lwIP error code. + * - ERR_OK. Successful. No error occured. + * - ERR_MEM. Out of memory. + * - ERR_RTE. Could not find route to destination address. + * - More errors could be returned by lower protocol layers. + * + * @see udp_disconnect() udp_sendto() + */ +err_t +udp_send(struct udp_pcb *pcb, struct pbuf *p) +{ + /* send to the packet using remote ip and port stored in the pcb */ + return udp_sendto(pcb, p, &pcb->remote_ip, pcb->remote_port); +} + +/** + * Send data to a specified address using UDP. + * + * @param pcb UDP PCB used to send the data. + * @param p chain of pbuf's to be sent. + * @param dst_ip Destination IP address. + * @param dst_port Destination UDP port. + * + * dst_ip & dst_port are expected to be in the same byte order as in the pcb. + * + * If the PCB already has a remote address association, it will + * be restored after the data is sent. + * + * @return lwIP error code (@see udp_send for possible error codes) + * + * @see udp_disconnect() udp_send() + */ +err_t +udp_sendto(struct udp_pcb *pcb, struct pbuf *p, + struct ip_addr *dst_ip, u16_t dst_port) +{ + struct netif *netif; + + LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE, ("udp_send\n")); + + /* find the outgoing network interface for this packet */ +#if LWIP_IGMP + netif = ip_route((ip_addr_ismulticast(dst_ip))?(&(pcb->multicast_ip)):(dst_ip)); +#else + netif = ip_route(dst_ip); +#endif /* LWIP_IGMP */ + + /* no outgoing network interface could be found? */ + if (netif == NULL) { + LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("udp_send: No route to 0x%"X32_F"\n", dst_ip->addr)); + UDP_STATS_INC(udp.rterr); + return ERR_RTE; + } + return udp_sendto_if(pcb, p, dst_ip, dst_port, netif); +} + +/** + * Send data to a specified address using UDP. + * The netif used for sending can be specified. + * + * This function exists mainly for DHCP, to be able to send UDP packets + * on a netif that is still down. + * + * @param pcb UDP PCB used to send the data. + * @param p chain of pbuf's to be sent. + * @param dst_ip Destination IP address. + * @param dst_port Destination UDP port. + * @param netif the netif used for sending. + * + * dst_ip & dst_port are expected to be in the same byte order as in the pcb. + * + * @return lwIP error code (@see udp_send for possible error codes) + * + * @see udp_disconnect() udp_send() + */ +err_t +udp_sendto_if(struct udp_pcb *pcb, struct pbuf *p, + struct ip_addr *dst_ip, u16_t dst_port, struct netif *netif) +{ + struct udp_hdr *udphdr; + struct ip_addr *src_ip; + err_t err; + struct pbuf *q; /* q will be sent down the stack */ + +#if IP_SOF_BROADCAST + /* broadcast filter? */ + if ( ((pcb->so_options & SOF_BROADCAST) == 0) && ip_addr_isbroadcast(dst_ip, netif) ) { + LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, + ("udp_sendto_if: SOF_BROADCAST not enabled on pcb %p\n", (void *)pcb)); + return ERR_VAL; + } +#endif /* IP_SOF_BROADCAST */ + + /* if the PCB is not yet bound to a port, bind it here */ + if (pcb->local_port == 0) { + LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE, ("udp_send: not yet bound to a port, binding now\n")); + err = udp_bind(pcb, &pcb->local_ip, pcb->local_port); + if (err != ERR_OK) { + LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("udp_send: forced port bind failed\n")); + return err; + } + } + + /* not enough space to add an UDP header to first pbuf in given p chain? */ + if (pbuf_header(p, UDP_HLEN)) { + /* allocate header in a separate new pbuf */ + q = pbuf_alloc(PBUF_IP, UDP_HLEN, PBUF_RAM); + /* new header pbuf could not be allocated? */ + if (q == NULL) { + LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("udp_send: could not allocate header\n")); + return ERR_MEM; + } + /* chain header q in front of given pbuf p */ + pbuf_chain(q, p); + /* first pbuf q points to header pbuf */ + LWIP_DEBUGF(UDP_DEBUG, + ("udp_send: added header pbuf %p before given pbuf %p\n", (void *)q, (void *)p)); + } else { + /* adding space for header within p succeeded */ + /* first pbuf q equals given pbuf */ + q = p; + LWIP_DEBUGF(UDP_DEBUG, ("udp_send: added header in given pbuf %p\n", (void *)p)); + } + LWIP_ASSERT("check that first pbuf can hold struct udp_hdr", + (q->len >= sizeof(struct udp_hdr))); + /* q now represents the packet to be sent */ + udphdr = q->payload; + udphdr->src = htons(pcb->local_port); + udphdr->dest = htons(dst_port); + /* in UDP, 0 checksum means 'no checksum' */ + udphdr->chksum = 0x0000; + + /* PCB local address is IP_ANY_ADDR? */ + if (ip_addr_isany(&pcb->local_ip)) { + /* use outgoing network interface IP address as source address */ + src_ip = &(netif->ip_addr); + } else { + /* check if UDP PCB local IP address is correct + * this could be an old address if netif->ip_addr has changed */ + if (!ip_addr_cmp(&(pcb->local_ip), &(netif->ip_addr))) { + /* local_ip doesn't match, drop the packet */ + if (q != p) { + /* free the header pbuf */ + pbuf_free(q); + q = NULL; + /* p is still referenced by the caller, and will live on */ + } + return ERR_VAL; + } + /* use UDP PCB local IP address as source address */ + src_ip = &(pcb->local_ip); + } + + LWIP_DEBUGF(UDP_DEBUG, ("udp_send: sending datagram of length %"U16_F"\n", q->tot_len)); + +#if LWIP_UDPLITE + /* UDP Lite protocol? */ + if (pcb->flags & UDP_FLAGS_UDPLITE) { + u16_t chklen, chklen_hdr; + LWIP_DEBUGF(UDP_DEBUG, ("udp_send: UDP LITE packet length %"U16_F"\n", q->tot_len)); + /* set UDP message length in UDP header */ + chklen_hdr = chklen = pcb->chksum_len_tx; + if ((chklen < sizeof(struct udp_hdr)) || (chklen > q->tot_len)) { + if (chklen != 0) { + LWIP_DEBUGF(UDP_DEBUG, ("udp_send: UDP LITE pcb->chksum_len is illegal: %"U16_F"\n", chklen)); + } + /* For UDP-Lite, checksum length of 0 means checksum + over the complete packet. (See RFC 3828 chap. 3.1) + At least the UDP-Lite header must be covered by the + checksum, therefore, if chksum_len has an illegal + value, we generate the checksum over the complete + packet to be safe. */ + chklen_hdr = 0; + chklen = q->tot_len; + } + udphdr->len = htons(chklen_hdr); + /* calculate checksum */ +#if CHECKSUM_GEN_UDP + udphdr->chksum = inet_chksum_pseudo_partial(q, src_ip, dst_ip, + IP_PROTO_UDPLITE, q->tot_len, chklen); + /* chksum zero must become 0xffff, as zero means 'no checksum' */ + if (udphdr->chksum == 0x0000) + udphdr->chksum = 0xffff; +#endif /* CHECKSUM_CHECK_UDP */ + /* output to IP */ + LWIP_DEBUGF(UDP_DEBUG, ("udp_send: ip_output_if (,,,,IP_PROTO_UDPLITE,)\n")); +#if LWIP_NETIF_HWADDRHINT + netif->addr_hint = &(pcb->addr_hint); +#endif /* LWIP_NETIF_HWADDRHINT*/ + err = ip_output_if(q, src_ip, dst_ip, pcb->ttl, pcb->tos, IP_PROTO_UDPLITE, netif); +#if LWIP_NETIF_HWADDRHINT + netif->addr_hint = NULL; +#endif /* LWIP_NETIF_HWADDRHINT*/ + } else +#endif /* LWIP_UDPLITE */ + { /* UDP */ + LWIP_DEBUGF(UDP_DEBUG, ("udp_send: UDP packet length %"U16_F"\n", q->tot_len)); + udphdr->len = htons(q->tot_len); + /* calculate checksum */ +#if CHECKSUM_GEN_UDP + if ((pcb->flags & UDP_FLAGS_NOCHKSUM) == 0) { + udphdr->chksum = inet_chksum_pseudo(q, src_ip, dst_ip, IP_PROTO_UDP, q->tot_len); + /* chksum zero must become 0xffff, as zero means 'no checksum' */ + if (udphdr->chksum == 0x0000) udphdr->chksum = 0xffff; + } +#endif /* CHECKSUM_CHECK_UDP */ + LWIP_DEBUGF(UDP_DEBUG, ("udp_send: UDP checksum 0x%04"X16_F"\n", udphdr->chksum)); + LWIP_DEBUGF(UDP_DEBUG, ("udp_send: ip_output_if (,,,,IP_PROTO_UDP,)\n")); + /* output to IP */ +#if LWIP_NETIF_HWADDRHINT + netif->addr_hint = &(pcb->addr_hint); +#endif /* LWIP_NETIF_HWADDRHINT*/ + err = ip_output_if(q, src_ip, dst_ip, pcb->ttl, pcb->tos, IP_PROTO_UDP, netif); +#if LWIP_NETIF_HWADDRHINT + netif->addr_hint = NULL; +#endif /* LWIP_NETIF_HWADDRHINT*/ + } + /* TODO: must this be increased even if error occured? */ + snmp_inc_udpoutdatagrams(); + + /* did we chain a separate header pbuf earlier? */ + if (q != p) { + /* free the header pbuf */ + pbuf_free(q); + q = NULL; + /* p is still referenced by the caller, and will live on */ + } + + UDP_STATS_INC(udp.xmit); + return err; +} + +/** + * Bind an UDP PCB. + * + * @param pcb UDP PCB to be bound with a local address ipaddr and port. + * @param ipaddr local IP address to bind with. Use IP_ADDR_ANY to + * bind to all local interfaces. + * @param port local UDP port to bind with. Use 0 to automatically bind + * to a random port between UDP_LOCAL_PORT_RANGE_START and + * UDP_LOCAL_PORT_RANGE_END. + * + * ipaddr & port are expected to be in the same byte order as in the pcb. + * + * @return lwIP error code. + * - ERR_OK. Successful. No error occured. + * - ERR_USE. The specified ipaddr and port are already bound to by + * another UDP PCB. + * + * @see udp_disconnect() + */ +err_t +udp_bind(struct udp_pcb *pcb, struct ip_addr *ipaddr, u16_t port) +{ + struct udp_pcb *ipcb; + u8_t rebind; + + LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE, ("udp_bind(ipaddr = ")); + ip_addr_debug_print(UDP_DEBUG, ipaddr); + LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE, (", port = %"U16_F")\n", port)); + + rebind = 0; + /* Check for double bind and rebind of the same pcb */ + for (ipcb = udp_pcbs; ipcb != NULL; ipcb = ipcb->next) { + /* is this UDP PCB already on active list? */ + if (pcb == ipcb) { + /* pcb may occur at most once in active list */ + LWIP_ASSERT("rebind == 0", rebind == 0); + /* pcb already in list, just rebind */ + rebind = 1; + } + + /* this code does not allow upper layer to share a UDP port for + listening to broadcast or multicast traffic (See SO_REUSE_ADDR and + SO_REUSE_PORT under *BSD). TODO: See where it fits instead, OR + combine with implementation of UDP PCB flags. Leon Woestenberg. */ +#ifdef LWIP_UDP_TODO + /* port matches that of PCB in list? */ + else + if ((ipcb->local_port == port) && + /* IP address matches, or one is IP_ADDR_ANY? */ + (ip_addr_isany(&(ipcb->local_ip)) || + ip_addr_isany(ipaddr) || + ip_addr_cmp(&(ipcb->local_ip), ipaddr))) { + /* other PCB already binds to this local IP and port */ + LWIP_DEBUGF(UDP_DEBUG, + ("udp_bind: local port %"U16_F" already bound by another pcb\n", port)); + return ERR_USE; + } +#endif + } + + ip_addr_set(&pcb->local_ip, ipaddr); + + /* no port specified? */ + if (port == 0) { +#ifndef UDP_LOCAL_PORT_RANGE_START +#define UDP_LOCAL_PORT_RANGE_START 4096 +#define UDP_LOCAL_PORT_RANGE_END 0x7fff +#endif + port = UDP_LOCAL_PORT_RANGE_START; + ipcb = udp_pcbs; + while ((ipcb != NULL) && (port != UDP_LOCAL_PORT_RANGE_END)) { + if (ipcb->local_port == port) { + /* port is already used by another udp_pcb */ + port++; + /* restart scanning all udp pcbs */ + ipcb = udp_pcbs; + } else + /* go on with next udp pcb */ + ipcb = ipcb->next; + } + if (ipcb != NULL) { + /* no more ports available in local range */ + LWIP_DEBUGF(UDP_DEBUG, ("udp_bind: out of free UDP ports\n")); + return ERR_USE; + } + } + pcb->local_port = port; + snmp_insert_udpidx_tree(pcb); + /* pcb not active yet? */ + if (rebind == 0) { + /* place the PCB on the active list if not already there */ + pcb->next = udp_pcbs; + udp_pcbs = pcb; + } + LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, + ("udp_bind: bound to %"U16_F".%"U16_F".%"U16_F".%"U16_F", port %"U16_F"\n", + (u16_t)((ntohl(pcb->local_ip.addr) >> 24) & 0xff), + (u16_t)((ntohl(pcb->local_ip.addr) >> 16) & 0xff), + (u16_t)((ntohl(pcb->local_ip.addr) >> 8) & 0xff), + (u16_t)(ntohl(pcb->local_ip.addr) & 0xff), pcb->local_port)); + return ERR_OK; +} +/** + * Connect an UDP PCB. + * + * This will associate the UDP PCB with the remote address. + * + * @param pcb UDP PCB to be connected with remote address ipaddr and port. + * @param ipaddr remote IP address to connect with. + * @param port remote UDP port to connect with. + * + * @return lwIP error code + * + * ipaddr & port are expected to be in the same byte order as in the pcb. + * + * The udp pcb is bound to a random local port if not already bound. + * + * @see udp_disconnect() + */ +err_t +udp_connect(struct udp_pcb *pcb, struct ip_addr *ipaddr, u16_t port) +{ + struct udp_pcb *ipcb; + + if (pcb->local_port == 0) { + err_t err = udp_bind(pcb, &pcb->local_ip, pcb->local_port); + if (err != ERR_OK) + return err; + } + + ip_addr_set(&pcb->remote_ip, ipaddr); + pcb->remote_port = port; + pcb->flags |= UDP_FLAGS_CONNECTED; +/** TODO: this functionality belongs in upper layers */ +#ifdef LWIP_UDP_TODO + /* Nail down local IP for netconn_addr()/getsockname() */ + if (ip_addr_isany(&pcb->local_ip) && !ip_addr_isany(&pcb->remote_ip)) { + struct netif *netif; + + if ((netif = ip_route(&(pcb->remote_ip))) == NULL) { + LWIP_DEBUGF(UDP_DEBUG, ("udp_connect: No route to 0x%lx\n", pcb->remote_ip.addr)); + UDP_STATS_INC(udp.rterr); + return ERR_RTE; + } + /** TODO: this will bind the udp pcb locally, to the interface which + is used to route output packets to the remote address. However, we + might want to accept incoming packets on any interface! */ + pcb->local_ip = netif->ip_addr; + } else if (ip_addr_isany(&pcb->remote_ip)) { + pcb->local_ip.addr = 0; + } +#endif + LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, + ("udp_connect: connected to %"U16_F".%"U16_F".%"U16_F".%"U16_F",port %"U16_F"\n", + (u16_t)((ntohl(pcb->remote_ip.addr) >> 24) & 0xff), + (u16_t)((ntohl(pcb->remote_ip.addr) >> 16) & 0xff), + (u16_t)((ntohl(pcb->remote_ip.addr) >> 8) & 0xff), + (u16_t)(ntohl(pcb->remote_ip.addr) & 0xff), pcb->remote_port)); + + /* Insert UDP PCB into the list of active UDP PCBs. */ + for (ipcb = udp_pcbs; ipcb != NULL; ipcb = ipcb->next) { + if (pcb == ipcb) { + /* already on the list, just return */ + return ERR_OK; + } + } + /* PCB not yet on the list, add PCB now */ + pcb->next = udp_pcbs; + udp_pcbs = pcb; + return ERR_OK; +} + +/** + * Disconnect a UDP PCB + * + * @param pcb the udp pcb to disconnect. + */ +void +udp_disconnect(struct udp_pcb *pcb) +{ + /* reset remote address association */ + ip_addr_set(&pcb->remote_ip, IP_ADDR_ANY); + pcb->remote_port = 0; + /* mark PCB as unconnected */ + pcb->flags &= ~UDP_FLAGS_CONNECTED; +} + +/** + * Set a receive callback for a UDP PCB + * + * This callback will be called when receiving a datagram for the pcb. + * + * @param pcb the pcb for wich to set the recv callback + * @param recv function pointer of the callback function + * @param recv_arg additional argument to pass to the callback function + */ +void +udp_recv(struct udp_pcb *pcb, + void (* recv)(void *arg, struct udp_pcb *upcb, struct pbuf *p, + struct ip_addr *addr, u16_t port), + void *recv_arg) +{ + /* remember recv() callback and user data */ + pcb->recv = recv; + pcb->recv_arg = recv_arg; +} + +/** + * Remove an UDP PCB. + * + * @param pcb UDP PCB to be removed. The PCB is removed from the list of + * UDP PCB's and the data structure is freed from memory. + * + * @see udp_new() + */ +void +udp_remove(struct udp_pcb *pcb) +{ + struct udp_pcb *pcb2; + + snmp_delete_udpidx_tree(pcb); + /* pcb to be removed is first in list? */ + if (udp_pcbs == pcb) { + /* make list start at 2nd pcb */ + udp_pcbs = udp_pcbs->next; + /* pcb not 1st in list */ + } else + for (pcb2 = udp_pcbs; pcb2 != NULL; pcb2 = pcb2->next) { + /* find pcb in udp_pcbs list */ + if (pcb2->next != NULL && pcb2->next == pcb) { + /* remove pcb from list */ + pcb2->next = pcb->next; + } + } + memp_free(MEMP_UDP_PCB, pcb); +} + +/** + * Create a UDP PCB. + * + * @return The UDP PCB which was created. NULL if the PCB data structure + * could not be allocated. + * + * @see udp_remove() + */ +struct udp_pcb * +udp_new(void) +{ + struct udp_pcb *pcb; + pcb = memp_malloc(MEMP_UDP_PCB); + /* could allocate UDP PCB? */ + if (pcb != NULL) { + /* UDP Lite: by initializing to all zeroes, chksum_len is set to 0 + * which means checksum is generated over the whole datagram per default + * (recommended as default by RFC 3828). */ + /* initialize PCB to all zeroes */ + memset(pcb, 0, sizeof(struct udp_pcb)); + pcb->ttl = UDP_TTL; + } + return pcb; +} + +#if UDP_DEBUG +/** + * Print UDP header information for debug purposes. + * + * @param udphdr pointer to the udp header in memory. + */ +void +udp_debug_print(struct udp_hdr *udphdr) +{ + LWIP_DEBUGF(UDP_DEBUG, ("UDP header:\n")); + LWIP_DEBUGF(UDP_DEBUG, ("+-------------------------------+\n")); + LWIP_DEBUGF(UDP_DEBUG, ("| %5"U16_F" | %5"U16_F" | (src port, dest port)\n", + ntohs(udphdr->src), ntohs(udphdr->dest))); + LWIP_DEBUGF(UDP_DEBUG, ("+-------------------------------+\n")); + LWIP_DEBUGF(UDP_DEBUG, ("| %5"U16_F" | 0x%04"X16_F" | (len, chksum)\n", + ntohs(udphdr->len), ntohs(udphdr->chksum))); + LWIP_DEBUGF(UDP_DEBUG, ("+-------------------------------+\n")); +} +#endif /* UDP_DEBUG */ + +#endif /* LWIP_UDP */ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/autoip.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/autoip.h new file mode 100644 index 000000000..d5464b709 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/autoip.h @@ -0,0 +1,118 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * + * AutoIP Automatic LinkLocal IP Configuration + */ + +/* + * + * Copyright (c) 2007 Dominik Spies + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * Author: Dominik Spies + * + * This is a AutoIP implementation for the lwIP TCP/IP stack. It aims to conform + * with RFC 3927. + * + * + * Please coordinate changes and requests with Dominik Spies + * + */ + +#ifndef __LWIP_AUTOIP_H__ +#define __LWIP_AUTOIP_H__ + +#include "lwip/opt.h" + +#if LWIP_AUTOIP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/netif.h" +#include "lwip/udp.h" +#include "netif/etharp.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* AutoIP Timing */ +#define AUTOIP_TMR_INTERVAL 100 +#define AUTOIP_TICKS_PER_SECOND (1000 / AUTOIP_TMR_INTERVAL) + +/* RFC 3927 Constants */ +#define PROBE_WAIT 1 /* second (initial random delay) */ +#define PROBE_MIN 1 /* second (minimum delay till repeated probe) */ +#define PROBE_MAX 2 /* seconds (maximum delay till repeated probe) */ +#define PROBE_NUM 3 /* (number of probe packets) */ +#define ANNOUNCE_NUM 2 /* (number of announcement packets) */ +#define ANNOUNCE_INTERVAL 2 /* seconds (time between announcement packets) */ +#define ANNOUNCE_WAIT 2 /* seconds (delay before announcing) */ +#define MAX_CONFLICTS 10 /* (max conflicts before rate limiting) */ +#define RATE_LIMIT_INTERVAL 60 /* seconds (delay between successive attempts) */ +#define DEFEND_INTERVAL 10 /* seconds (min. wait between defensive ARPs) */ + +/* AutoIP client states */ +#define AUTOIP_STATE_OFF 0 +#define AUTOIP_STATE_PROBING 1 +#define AUTOIP_STATE_ANNOUNCING 2 +#define AUTOIP_STATE_BOUND 3 + +struct autoip +{ + struct ip_addr llipaddr; /* the currently selected, probed, announced or used LL IP-Address */ + u8_t state; /* current AutoIP state machine state */ + u8_t sent_num; /* sent number of probes or announces, dependent on state */ + u16_t ttw; /* ticks to wait, tick is AUTOIP_TMR_INTERVAL long */ + u8_t lastconflict; /* ticks until a conflict can be solved by defending */ + u8_t tried_llipaddr; /* total number of probed/used Link Local IP-Addresses */ +}; + + +/** Init srand, has to be called before entering mainloop */ +void autoip_init(void); + +/** Start AutoIP client */ +err_t autoip_start(struct netif *netif); + +/** Stop AutoIP client */ +err_t autoip_stop(struct netif *netif); + +/** Handles every incoming ARP Packet, called by etharp_arp_input */ +void autoip_arp_reply(struct netif *netif, struct etharp_hdr *hdr); + +/** Has to be called in loop every AUTOIP_TMR_INTERVAL milliseconds */ +void autoip_tmr(void); + +/** Handle a possible change in the network configuration */ +void autoip_network_changed(struct netif *netif); + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_AUTOIP */ + +#endif /* __LWIP_AUTOIP_H__ */ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/icmp.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/icmp.h new file mode 100644 index 000000000..3f917ba04 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/icmp.h @@ -0,0 +1,113 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_ICMP_H__ +#define __LWIP_ICMP_H__ + +#include "lwip/opt.h" +#include "lwip/pbuf.h" +#include "lwip/ip_addr.h" +#include "lwip/netif.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define ICMP_ER 0 /* echo reply */ +#define ICMP_DUR 3 /* destination unreachable */ +#define ICMP_SQ 4 /* source quench */ +#define ICMP_RD 5 /* redirect */ +#define ICMP_ECHO 8 /* echo */ +#define ICMP_TE 11 /* time exceeded */ +#define ICMP_PP 12 /* parameter problem */ +#define ICMP_TS 13 /* timestamp */ +#define ICMP_TSR 14 /* timestamp reply */ +#define ICMP_IRQ 15 /* information request */ +#define ICMP_IR 16 /* information reply */ + +enum icmp_dur_type { + ICMP_DUR_NET = 0, /* net unreachable */ + ICMP_DUR_HOST = 1, /* host unreachable */ + ICMP_DUR_PROTO = 2, /* protocol unreachable */ + ICMP_DUR_PORT = 3, /* port unreachable */ + ICMP_DUR_FRAG = 4, /* fragmentation needed and DF set */ + ICMP_DUR_SR = 5 /* source route failed */ +}; + +enum icmp_te_type { + ICMP_TE_TTL = 0, /* time to live exceeded in transit */ + ICMP_TE_FRAG = 1 /* fragment reassembly time exceeded */ +}; + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +/** This is the standard ICMP header only that the u32_t data + * is splitted to two u16_t like ICMP echo needs it. + * This header is also used for other ICMP types that do not + * use the data part. + */ +PACK_STRUCT_BEGIN +struct icmp_echo_hdr { + PACK_STRUCT_FIELD(u8_t type); + PACK_STRUCT_FIELD(u8_t code); + PACK_STRUCT_FIELD(u16_t chksum); + PACK_STRUCT_FIELD(u16_t id); + PACK_STRUCT_FIELD(u16_t seqno); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +#define ICMPH_TYPE(hdr) ((hdr)->type) +#define ICMPH_CODE(hdr) ((hdr)->code) + +/** Combines type and code to an u16_t */ +#define ICMPH_TYPE_SET(hdr, t) ((hdr)->type = (t)) +#define ICMPH_CODE_SET(hdr, c) ((hdr)->code = (c)) + + +#if LWIP_ICMP /* don't build if not configured for use in lwipopts.h */ + +void icmp_input(struct pbuf *p, struct netif *inp); +void icmp_dest_unreach(struct pbuf *p, enum icmp_dur_type t); +void icmp_time_exceeded(struct pbuf *p, enum icmp_te_type t); + +#endif /* LWIP_ICMP */ + +#ifdef __cplusplus +} +#endif + +#endif /* __LWIP_ICMP_H__ */ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/igmp.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/igmp.h new file mode 100644 index 000000000..da67e7508 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/igmp.h @@ -0,0 +1,164 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2002 CITEL Technologies Ltd. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of CITEL Technologies Ltd nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY CITEL TECHNOLOGIES AND CONTRIBUTORS ``AS IS'' + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL CITEL TECHNOLOGIES OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is a contribution to the lwIP TCP/IP stack. + * The Swedish Institute of Computer Science and Adam Dunkels + * are specifically granted permission to redistribute this + * source code. +*/ + +#ifndef __LWIP_IGMP_H__ +#define __LWIP_IGMP_H__ + +#include "lwip/opt.h" +#include "lwip/ip_addr.h" +#include "lwip/netif.h" +#include "lwip/pbuf.h" + +#if LWIP_IGMP /* don't build if not configured for use in lwipopts.h */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * IGMP constants + */ +#define IP_PROTO_IGMP 2 +#define IGMP_TTL 1 +#define IGMP_MINLEN 8 +#define ROUTER_ALERT 0x9404 +#define ROUTER_ALERTLEN 4 + +/* + * IGMP message types, including version number. + */ +#define IGMP_MEMB_QUERY 0x11 /* Membership query */ +#define IGMP_V1_MEMB_REPORT 0x12 /* Ver. 1 membership report */ +#define IGMP_V2_MEMB_REPORT 0x16 /* Ver. 2 membership report */ +#define IGMP_LEAVE_GROUP 0x17 /* Leave-group message */ + +/* IGMP timer */ +#define IGMP_TMR_INTERVAL 100 /* Milliseconds */ +#define IGMP_V1_DELAYING_MEMBER_TMR (1000/IGMP_TMR_INTERVAL) +#define IGMP_JOIN_DELAYING_MEMBER_TMR (500 /IGMP_TMR_INTERVAL) + +/* MAC Filter Actions */ +#define IGMP_DEL_MAC_FILTER 0 +#define IGMP_ADD_MAC_FILTER 1 + +/* Group membership states */ +#define IGMP_GROUP_NON_MEMBER 0 +#define IGMP_GROUP_DELAYING_MEMBER 1 +#define IGMP_GROUP_IDLE_MEMBER 2 + +/* + * IGMP packet format. + */ +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct igmp_msg { + PACK_STRUCT_FIELD(u8_t igmp_msgtype); + PACK_STRUCT_FIELD(u8_t igmp_maxresp); + PACK_STRUCT_FIELD(u16_t igmp_checksum); + PACK_STRUCT_FIELD(struct ip_addr igmp_group_address); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +/* + * now a group structure - there is + * a list of groups for each interface + * these should really be linked from the interface, but + * if we keep them separate we will not affect the lwip original code + * too much + * + * There will be a group for the all systems group address but this + * will not run the state machine as it is used to kick off reports + * from all the other groups + */ + +struct igmp_group { + struct igmp_group *next; + struct netif *interface; + struct ip_addr group_address; + u8_t last_reporter_flag; /* signifies we were the last person to report */ + u8_t group_state; + u16_t timer; + u8_t use; /* counter of simultaneous uses */ +}; + + +/* Prototypes */ +void igmp_init(void); + +err_t igmp_start( struct netif *netif); + +err_t igmp_stop( struct netif *netif); + +void igmp_report_groups( struct netif *netif); + +struct igmp_group *igmp_lookfor_group( struct netif *ifp, struct ip_addr *addr); + +struct igmp_group *igmp_lookup_group( struct netif *ifp, struct ip_addr *addr); + +err_t igmp_remove_group( struct igmp_group *group); + +void igmp_input( struct pbuf *p, struct netif *inp, struct ip_addr *dest); + +err_t igmp_joingroup( struct ip_addr *ifaddr, struct ip_addr *groupaddr); + +err_t igmp_leavegroup( struct ip_addr *ifaddr, struct ip_addr *groupaddr); + +void igmp_tmr(void); + +void igmp_timeout( struct igmp_group *group); + +void igmp_start_timer( struct igmp_group *group, u8_t max_time); + +void igmp_stop_timer( struct igmp_group *group); + +void igmp_delaying_member( struct igmp_group *group, u8_t maxresp); + +err_t igmp_ip_output_if( struct pbuf *p, struct ip_addr *src, struct ip_addr *dest, u8_t ttl, u8_t proto, struct netif *netif); + +void igmp_send( struct igmp_group *group, u8_t type); + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_IGMP */ + +#endif /* __LWIP_IGMP_H__ */ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/inet.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/inet.h new file mode 100644 index 000000000..903afdf0f --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/inet.h @@ -0,0 +1,105 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_INET_H__ +#define __LWIP_INET_H__ + +#include "lwip/opt.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* For compatibility with BSD code */ +struct in_addr { + u32_t s_addr; +}; + +#define INADDR_NONE ((u32_t)0xffffffffUL) /* 255.255.255.255 */ +#define INADDR_LOOPBACK ((u32_t)0x7f000001UL) /* 127.0.0.1 */ +#define INADDR_ANY ((u32_t)0x00000000UL) /* 0.0.0.0 */ +#define INADDR_BROADCAST ((u32_t)0xffffffffUL) /* 255.255.255.255 */ + +u32_t inet_addr(const char *cp); +int inet_aton(const char *cp, struct in_addr *addr); +char *inet_ntoa(struct in_addr addr); /* returns ptr to static buffer; not reentrant! */ + +#ifdef htons +#undef htons +#endif /* htons */ +#ifdef htonl +#undef htonl +#endif /* htonl */ +#ifdef ntohs +#undef ntohs +#endif /* ntohs */ +#ifdef ntohl +#undef ntohl +#endif /* ntohl */ + +#ifndef LWIP_PLATFORM_BYTESWAP +#define LWIP_PLATFORM_BYTESWAP 0 +#endif + +#if BYTE_ORDER == BIG_ENDIAN +#define htons(x) (x) +#define ntohs(x) (x) +#define htonl(x) (x) +#define ntohl(x) (x) +#else /* BYTE_ORDER != BIG_ENDIAN */ +#ifdef LWIP_PREFIX_BYTEORDER_FUNCS +/* workaround for naming collisions on some platforms */ +#define htons lwip_htons +#define ntohs lwip_ntohs +#define htonl lwip_htonl +#define ntohl lwip_ntohl +#endif /* LWIP_PREFIX_BYTEORDER_FUNCS */ +#if LWIP_PLATFORM_BYTESWAP +#define htons(x) LWIP_PLATFORM_HTONS(x) +#define ntohs(x) LWIP_PLATFORM_HTONS(x) +#define htonl(x) LWIP_PLATFORM_HTONL(x) +#define ntohl(x) LWIP_PLATFORM_HTONL(x) +#else /* LWIP_PLATFORM_BYTESWAP */ +u16_t htons(u16_t x); +u16_t ntohs(u16_t x); +u32_t htonl(u32_t x); +u32_t ntohl(u32_t x); +#endif /* LWIP_PLATFORM_BYTESWAP */ + +#endif /* BYTE_ORDER == BIG_ENDIAN */ + +#ifdef __cplusplus +} +#endif + +#endif /* __LWIP_INET_H__ */ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/inet_chksum.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/inet_chksum.h new file mode 100644 index 000000000..6f5b1b63a --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/inet_chksum.h @@ -0,0 +1,62 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_INET_CHKSUM_H__ +#define __LWIP_INET_CHKSUM_H__ + +#include "lwip/opt.h" + +#include "lwip/pbuf.h" +#include "lwip/ip_addr.h" + +#ifdef __cplusplus +extern "C" { +#endif + +u16_t inet_chksum(void *dataptr, u16_t len); +u16_t inet_chksum_pbuf(struct pbuf *p); +u16_t inet_chksum_pseudo(struct pbuf *p, + struct ip_addr *src, struct ip_addr *dest, + u8_t proto, u16_t proto_len); +#if LWIP_UDPLITE +u16_t inet_chksum_pseudo_partial(struct pbuf *p, + struct ip_addr *src, struct ip_addr *dest, + u8_t proto, u16_t proto_len, u16_t chksum_len); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* __LWIP_INET_H__ */ + diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/ip.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/ip.h new file mode 100644 index 000000000..6b2cdee17 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/ip.h @@ -0,0 +1,200 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_IP_H__ +#define __LWIP_IP_H__ + +#include "lwip/opt.h" + +#include "lwip/def.h" +#include "lwip/pbuf.h" +#include "lwip/ip_addr.h" +#include "lwip/err.h" +#include "lwip/netif.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** Currently, the function ip_output_if_opt() is only used with IGMP */ +#define IP_OPTIONS_SEND LWIP_IGMP + +#define IP_HLEN 20 + +#define IP_PROTO_ICMP 1 +#define IP_PROTO_UDP 17 +#define IP_PROTO_UDPLITE 136 +#define IP_PROTO_TCP 6 + +/* This is passed as the destination address to ip_output_if (not + to ip_output), meaning that an IP header already is constructed + in the pbuf. This is used when TCP retransmits. */ +#ifdef IP_HDRINCL +#undef IP_HDRINCL +#endif /* IP_HDRINCL */ +#define IP_HDRINCL NULL + +#if LWIP_NETIF_HWADDRHINT +#define IP_PCB_ADDRHINT ;u8_t addr_hint +#else +#define IP_PCB_ADDRHINT +#endif /* LWIP_NETIF_HWADDRHINT */ + +/* This is the common part of all PCB types. It needs to be at the + beginning of a PCB type definition. It is located here so that + changes to this common part are made in one location instead of + having to change all PCB structs. */ +#define IP_PCB \ + /* ip addresses in network byte order */ \ + struct ip_addr local_ip; \ + struct ip_addr remote_ip; \ + /* Socket options */ \ + u16_t so_options; \ + /* Type Of Service */ \ + u8_t tos; \ + /* Time To Live */ \ + u8_t ttl \ + /* link layer address resolution hint */ \ + IP_PCB_ADDRHINT + +struct ip_pcb { +/* Common members of all PCB types */ + IP_PCB; +}; + +/* + * Option flags per-socket. These are the same like SO_XXX. + */ +#define SOF_DEBUG (u16_t)0x0001U /* turn on debugging info recording */ +#define SOF_ACCEPTCONN (u16_t)0x0002U /* socket has had listen() */ +#define SOF_REUSEADDR (u16_t)0x0004U /* allow local address reuse */ +#define SOF_KEEPALIVE (u16_t)0x0008U /* keep connections alive */ +#define SOF_DONTROUTE (u16_t)0x0010U /* just use interface addresses */ +#define SOF_BROADCAST (u16_t)0x0020U /* permit to send and to receive broadcast messages (see IP_SOF_BROADCAST option) */ +#define SOF_USELOOPBACK (u16_t)0x0040U /* bypass hardware when possible */ +#define SOF_LINGER (u16_t)0x0080U /* linger on close if data present */ +#define SOF_OOBINLINE (u16_t)0x0100U /* leave received OOB data in line */ +#define SOF_REUSEPORT (u16_t)0x0200U /* allow local address & port reuse */ + + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct ip_hdr { + /* version / header length / type of service */ + PACK_STRUCT_FIELD(u16_t _v_hl_tos); + /* total length */ + PACK_STRUCT_FIELD(u16_t _len); + /* identification */ + PACK_STRUCT_FIELD(u16_t _id); + /* fragment offset field */ + PACK_STRUCT_FIELD(u16_t _offset); +#define IP_RF 0x8000 /* reserved fragment flag */ +#define IP_DF 0x4000 /* dont fragment flag */ +#define IP_MF 0x2000 /* more fragments flag */ +#define IP_OFFMASK 0x1fff /* mask for fragmenting bits */ + /* time to live / protocol*/ + PACK_STRUCT_FIELD(u16_t _ttl_proto); + /* checksum */ + PACK_STRUCT_FIELD(u16_t _chksum); + /* source and destination IP addresses */ + PACK_STRUCT_FIELD(struct ip_addr src); + PACK_STRUCT_FIELD(struct ip_addr dest); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +#define IPH_V(hdr) (ntohs((hdr)->_v_hl_tos) >> 12) +#define IPH_HL(hdr) ((ntohs((hdr)->_v_hl_tos) >> 8) & 0x0f) +#define IPH_TOS(hdr) (ntohs((hdr)->_v_hl_tos) & 0xff) +#define IPH_LEN(hdr) ((hdr)->_len) +#define IPH_ID(hdr) ((hdr)->_id) +#define IPH_OFFSET(hdr) ((hdr)->_offset) +#define IPH_TTL(hdr) (ntohs((hdr)->_ttl_proto) >> 8) +#define IPH_PROTO(hdr) (ntohs((hdr)->_ttl_proto) & 0xff) +#define IPH_CHKSUM(hdr) ((hdr)->_chksum) + +#define IPH_VHLTOS_SET(hdr, v, hl, tos) (hdr)->_v_hl_tos = (htons(((v) << 12) | ((hl) << 8) | (tos))) +#define IPH_LEN_SET(hdr, len) (hdr)->_len = (len) +#define IPH_ID_SET(hdr, id) (hdr)->_id = (id) +#define IPH_OFFSET_SET(hdr, off) (hdr)->_offset = (off) +#define IPH_TTL_SET(hdr, ttl) (hdr)->_ttl_proto = (htons(IPH_PROTO(hdr) | ((u16_t)(ttl) << 8))) +#define IPH_PROTO_SET(hdr, proto) (hdr)->_ttl_proto = (htons((proto) | (IPH_TTL(hdr) << 8))) +#define IPH_CHKSUM_SET(hdr, chksum) (hdr)->_chksum = (chksum) + +/** The interface that provided the packet for the current callback invocation. */ +extern struct netif *current_netif; +/** Header of the input packet currently being processed. */ +extern const struct ip_hdr *current_header; + +#define ip_init() /* Compatibility define, not init needed. */ +struct netif *ip_route(struct ip_addr *dest); +err_t ip_input(struct pbuf *p, struct netif *inp); +err_t ip_output(struct pbuf *p, struct ip_addr *src, struct ip_addr *dest, + u8_t ttl, u8_t tos, u8_t proto); +err_t ip_output_if(struct pbuf *p, struct ip_addr *src, struct ip_addr *dest, + u8_t ttl, u8_t tos, u8_t proto, + struct netif *netif); +#if LWIP_NETIF_HWADDRHINT +err_t ip_output_hinted(struct pbuf *p, struct ip_addr *src, struct ip_addr *dest, + u8_t ttl, u8_t tos, u8_t proto, u8_t *addr_hint); +#endif /* LWIP_NETIF_HWADDRHINT */ +#if IP_OPTIONS_SEND +err_t ip_output_if_opt(struct pbuf *p, struct ip_addr *src, struct ip_addr *dest, + u8_t ttl, u8_t tos, u8_t proto, struct netif *netif, void *ip_options, + u16_t optlen); +#endif /* IP_OPTIONS_SEND */ +/** Get the interface that received the current packet. + * This function must only be called from a receive callback (udp_recv, + * raw_recv, tcp_accept). It will return NULL otherwise. */ +#define ip_current_netif() (current_netif) +/** Get the IP header of the current packet. + * This function must only be called from a receive callback (udp_recv, + * raw_recv, tcp_accept). It will return NULL otherwise. */ +#define ip_current_header() (current_header) +#if IP_DEBUG +void ip_debug_print(struct pbuf *p); +#else +#define ip_debug_print(p) +#endif /* IP_DEBUG */ + +#ifdef __cplusplus +} +#endif + +#endif /* __LWIP_IP_H__ */ + + diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/ip_addr.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/ip_addr.h new file mode 100644 index 000000000..5fbc44d14 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/ip_addr.h @@ -0,0 +1,175 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_IP_ADDR_H__ +#define __LWIP_IP_ADDR_H__ + +#include "lwip/opt.h" + +#include "lwip/inet.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct ip_addr { + PACK_STRUCT_FIELD(u32_t addr); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +/* + * struct ipaddr2 is used in the definition of the ARP packet format in + * order to support compilers that don't have structure packing. + */ +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct ip_addr2 { + PACK_STRUCT_FIELD(u16_t addrw[2]); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +struct netif; + +extern const struct ip_addr ip_addr_any; +extern const struct ip_addr ip_addr_broadcast; + +/** IP_ADDR_ can be used as a fixed IP address + * for the wildcard and the broadcast address + */ +#define IP_ADDR_ANY ((struct ip_addr *)&ip_addr_any) +#define IP_ADDR_BROADCAST ((struct ip_addr *)&ip_addr_broadcast) + +/* Definitions of the bits in an Internet address integer. + + On subnets, host and network parts are found according to + the subnet mask, not these masks. */ + +#define IN_CLASSA(a) ((((u32_t)(a)) & 0x80000000UL) == 0) +#define IN_CLASSA_NET 0xff000000 +#define IN_CLASSA_NSHIFT 24 +#define IN_CLASSA_HOST (0xffffffff & ~IN_CLASSA_NET) +#define IN_CLASSA_MAX 128 + +#define IN_CLASSB(a) ((((u32_t)(a)) & 0xc0000000UL) == 0x80000000UL) +#define IN_CLASSB_NET 0xffff0000 +#define IN_CLASSB_NSHIFT 16 +#define IN_CLASSB_HOST (0xffffffff & ~IN_CLASSB_NET) +#define IN_CLASSB_MAX 65536 + +#define IN_CLASSC(a) ((((u32_t)(a)) & 0xe0000000UL) == 0xc0000000UL) +#define IN_CLASSC_NET 0xffffff00 +#define IN_CLASSC_NSHIFT 8 +#define IN_CLASSC_HOST (0xffffffff & ~IN_CLASSC_NET) + +#define IN_CLASSD(a) (((u32_t)(a) & 0xf0000000UL) == 0xe0000000UL) +#define IN_CLASSD_NET 0xf0000000 /* These ones aren't really */ +#define IN_CLASSD_NSHIFT 28 /* net and host fields, but */ +#define IN_CLASSD_HOST 0x0fffffff /* routing needn't know. */ +#define IN_MULTICAST(a) IN_CLASSD(a) + +#define IN_EXPERIMENTAL(a) (((u32_t)(a) & 0xf0000000UL) == 0xf0000000UL) +#define IN_BADCLASS(a) (((u32_t)(a) & 0xf0000000UL) == 0xf0000000UL) + +#define IN_LOOPBACKNET 127 /* official! */ + +#define IP4_ADDR(ipaddr, a,b,c,d) \ + (ipaddr)->addr = htonl(((u32_t)((a) & 0xff) << 24) | \ + ((u32_t)((b) & 0xff) << 16) | \ + ((u32_t)((c) & 0xff) << 8) | \ + (u32_t)((d) & 0xff)) + +#define ip_addr_set(dest, src) (dest)->addr = \ + ((src) == NULL? 0:\ + (src)->addr) +/** + * Determine if two address are on the same network. + * + * @arg addr1 IP address 1 + * @arg addr2 IP address 2 + * @arg mask network identifier mask + * @return !0 if the network identifiers of both address match + */ +#define ip_addr_netcmp(addr1, addr2, mask) (((addr1)->addr & \ + (mask)->addr) == \ + ((addr2)->addr & \ + (mask)->addr)) +#define ip_addr_cmp(addr1, addr2) ((addr1)->addr == (addr2)->addr) + +#define ip_addr_isany(addr1) ((addr1) == NULL || (addr1)->addr == 0) + +u8_t ip_addr_isbroadcast(struct ip_addr *, struct netif *); + +#define ip_addr_ismulticast(addr1) (((addr1)->addr & ntohl(0xf0000000UL)) == ntohl(0xe0000000UL)) + +#define ip_addr_islinklocal(addr1) (((addr1)->addr & ntohl(0xffff0000UL)) == ntohl(0xa9fe0000UL)) + +#define ip_addr_debug_print(debug, ipaddr) \ + LWIP_DEBUGF(debug, ("%"U16_F".%"U16_F".%"U16_F".%"U16_F, \ + ipaddr != NULL ? \ + (u16_t)(ntohl((ipaddr)->addr) >> 24) & 0xff : 0, \ + ipaddr != NULL ? \ + (u16_t)(ntohl((ipaddr)->addr) >> 16) & 0xff : 0, \ + ipaddr != NULL ? \ + (u16_t)(ntohl((ipaddr)->addr) >> 8) & 0xff : 0, \ + ipaddr != NULL ? \ + (u16_t)ntohl((ipaddr)->addr) & 0xff : 0)) + +/* These are cast to u16_t, with the intent that they are often arguments + * to printf using the U16_F format from cc.h. */ +#define ip4_addr1(ipaddr) ((u16_t)(ntohl((ipaddr)->addr) >> 24) & 0xff) +#define ip4_addr2(ipaddr) ((u16_t)(ntohl((ipaddr)->addr) >> 16) & 0xff) +#define ip4_addr3(ipaddr) ((u16_t)(ntohl((ipaddr)->addr) >> 8) & 0xff) +#define ip4_addr4(ipaddr) ((u16_t)(ntohl((ipaddr)->addr)) & 0xff) + +/** + * Same as inet_ntoa() but takes a struct ip_addr* + */ +#define ip_ntoa(addr) ((addr != NULL) ? inet_ntoa(*((struct in_addr*)(addr))) : "NULL") + +#ifdef __cplusplus +} +#endif + +#endif /* __LWIP_IP_ADDR_H__ */ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/ip_frag.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/ip_frag.h new file mode 100644 index 000000000..adc6e9195 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/ip_frag.h @@ -0,0 +1,78 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Jani Monoses + * + */ + +#ifndef __LWIP_IP_FRAG_H__ +#define __LWIP_IP_FRAG_H__ + +#include "lwip/opt.h" +#include "lwip/err.h" +#include "lwip/pbuf.h" +#include "lwip/netif.h" +#include "lwip/ip_addr.h" +#include "lwip/ip.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#if IP_REASSEMBLY +/* The IP reassembly timer interval in milliseconds. */ +#define IP_TMR_INTERVAL 1000 + +/* IP reassembly helper struct. + * This is exported because memp needs to know the size. + */ +struct ip_reassdata { + struct ip_reassdata *next; + struct pbuf *p; + struct ip_hdr iphdr; + u16_t datagram_len; + u8_t flags; + u8_t timer; +}; + +void ip_reass_init(void); +void ip_reass_tmr(void); +struct pbuf * ip_reass(struct pbuf *p); +#endif /* IP_REASSEMBLY */ + +#if IP_FRAG +err_t ip_frag(struct pbuf *p, struct netif *netif, struct ip_addr *dest); +#endif /* IP_FRAG */ + +#ifdef __cplusplus +} +#endif + +#endif /* __LWIP_IP_FRAG_H__ */ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/api.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/api.h new file mode 100644 index 000000000..7d2c9e6ec --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/api.h @@ -0,0 +1,224 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_API_H__ +#define __LWIP_API_H__ + +#include "lwip/opt.h" + +#if LWIP_NETCONN /* don't build if not configured for use in lwipopts.h */ + +#include /* for size_t */ + +#include "lwip/netbuf.h" +#include "lwip/sys.h" +#include "lwip/ip_addr.h" +#include "lwip/err.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Throughout this file, IP addresses and port numbers are expected to be in + * the same byte order as in the corresponding pcb. + */ + +/* Flags for netconn_write */ +#define NETCONN_NOFLAG 0x00 +#define NETCONN_NOCOPY 0x00 /* Only for source code compatibility */ +#define NETCONN_COPY 0x01 +#define NETCONN_MORE 0x02 + +/* Helpers to process several netconn_types by the same code */ +#define NETCONNTYPE_GROUP(t) (t&0xF0) +#define NETCONNTYPE_DATAGRAM(t) (t&0xE0) + +enum netconn_type { + NETCONN_INVALID = 0, + /* NETCONN_TCP Group */ + NETCONN_TCP = 0x10, + /* NETCONN_UDP Group */ + NETCONN_UDP = 0x20, + NETCONN_UDPLITE = 0x21, + NETCONN_UDPNOCHKSUM= 0x22, + /* NETCONN_RAW Group */ + NETCONN_RAW = 0x40 +}; + +enum netconn_state { + NETCONN_NONE, + NETCONN_WRITE, + NETCONN_LISTEN, + NETCONN_CONNECT, + NETCONN_CLOSE +}; + +enum netconn_evt { + NETCONN_EVT_RCVPLUS, + NETCONN_EVT_RCVMINUS, + NETCONN_EVT_SENDPLUS, + NETCONN_EVT_SENDMINUS +}; + +#if LWIP_IGMP +enum netconn_igmp { + NETCONN_JOIN, + NETCONN_LEAVE +}; +#endif /* LWIP_IGMP */ + +/* forward-declare some structs to avoid to include their headers */ +struct ip_pcb; +struct tcp_pcb; +struct udp_pcb; +struct raw_pcb; +struct netconn; + +/** A callback prototype to inform about events for a netconn */ +typedef void (* netconn_callback)(struct netconn *, enum netconn_evt, u16_t len); + +/** A netconn descriptor */ +struct netconn { + /** type of the netconn (TCP, UDP or RAW) */ + enum netconn_type type; + /** current state of the netconn */ + enum netconn_state state; + /** the lwIP internal protocol control block */ + union { + struct ip_pcb *ip; + struct tcp_pcb *tcp; + struct udp_pcb *udp; + struct raw_pcb *raw; + } pcb; + /** the last error this netconn had */ + err_t err; + /** sem that is used to synchroneously execute functions in the core context */ + sys_sem_t op_completed; + /** mbox where received packets are stored until they are fetched + by the netconn application thread (can grow quite big) */ + sys_mbox_t recvmbox; + /** mbox where new connections are stored until processed + by the application thread */ + sys_mbox_t acceptmbox; + /** only used for socket layer */ + int socket; +#if LWIP_SO_RCVTIMEO + /** timeout to wait for new data to be received + (or connections to arrive for listening netconns) */ + int recv_timeout; +#endif /* LWIP_SO_RCVTIMEO */ +#if LWIP_SO_RCVBUF + /** maximum amount of bytes queued in recvmbox */ + int recv_bufsize; +#endif /* LWIP_SO_RCVBUF */ + s16_t recv_avail; +#if LWIP_TCP + /** TCP: when data passed to netconn_write doesn't fit into the send buffer, + this temporarily stores the message. */ + struct api_msg_msg *write_msg; + /** TCP: when data passed to netconn_write doesn't fit into the send buffer, + this temporarily stores how much is already sent. */ + size_t write_offset; +#if LWIP_TCPIP_CORE_LOCKING + /** TCP: when data passed to netconn_write doesn't fit into the send buffer, + this temporarily stores whether to wake up the original application task + if data couldn't be sent in the first try. */ + u8_t write_delayed; +#endif /* LWIP_TCPIP_CORE_LOCKING */ +#endif /* LWIP_TCP */ + /** A callback function that is informed about events for this netconn */ + netconn_callback callback; +}; + +/* Register an Network connection event */ +#define API_EVENT(c,e,l) if (c->callback) { \ + (*c->callback)(c, e, l); \ + } + +/* Network connection functions: */ +#define netconn_new(t) netconn_new_with_proto_and_callback(t, 0, NULL) +#define netconn_new_with_callback(t, c) netconn_new_with_proto_and_callback(t, 0, c) +struct +netconn *netconn_new_with_proto_and_callback(enum netconn_type t, u8_t proto, + netconn_callback callback); +err_t netconn_delete (struct netconn *conn); +/** Get the type of a netconn (as enum netconn_type). */ +#define netconn_type(conn) (conn->type) + +err_t netconn_getaddr (struct netconn *conn, + struct ip_addr *addr, + u16_t *port, + u8_t local); +#define netconn_peer(c,i,p) netconn_getaddr(c,i,p,0) +#define netconn_addr(c,i,p) netconn_getaddr(c,i,p,1) + +err_t netconn_bind (struct netconn *conn, + struct ip_addr *addr, + u16_t port); +err_t netconn_connect (struct netconn *conn, + struct ip_addr *addr, + u16_t port); +err_t netconn_disconnect (struct netconn *conn); +err_t netconn_listen_with_backlog(struct netconn *conn, u8_t backlog); +#define netconn_listen(conn) netconn_listen_with_backlog(conn, TCP_DEFAULT_LISTEN_BACKLOG) +struct netconn * netconn_accept (struct netconn *conn); +struct netbuf * netconn_recv (struct netconn *conn); +err_t netconn_sendto (struct netconn *conn, + struct netbuf *buf, struct ip_addr *addr, u16_t port); +err_t netconn_send (struct netconn *conn, + struct netbuf *buf); +err_t netconn_write (struct netconn *conn, + const void *dataptr, size_t size, + u8_t apiflags); +err_t netconn_close (struct netconn *conn); + +#if LWIP_IGMP +err_t netconn_join_leave_group (struct netconn *conn, + struct ip_addr *multiaddr, + struct ip_addr *interface, + enum netconn_igmp join_or_leave); +#endif /* LWIP_IGMP */ +#if LWIP_DNS +err_t netconn_gethostbyname(const char *name, struct ip_addr *addr); +#endif /* LWIP_DNS */ + +#define netconn_err(conn) ((conn)->err) +#define netconn_recv_bufsize(conn) ((conn)->recv_bufsize) + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_NETCONN */ + +#endif /* __LWIP_API_H__ */ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/api_msg.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/api_msg.h new file mode 100644 index 000000000..7718d909b --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/api_msg.h @@ -0,0 +1,164 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_API_MSG_H__ +#define __LWIP_API_MSG_H__ + +#include "lwip/opt.h" + +#if LWIP_NETCONN /* don't build if not configured for use in lwipopts.h */ + +#include /* for size_t */ + +#include "lwip/ip_addr.h" +#include "lwip/err.h" +#include "lwip/sys.h" +#include "lwip/igmp.h" +#include "lwip/api.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* IP addresses and port numbers are expected to be in + * the same byte order as in the corresponding pcb. + */ +/** This struct includes everything that is necessary to execute a function + for a netconn in another thread context (mainly used to process netconns + in the tcpip_thread context to be thread safe). */ +struct api_msg_msg { + /** The netconn which to process - always needed: it includes the semaphore + which is used to block the application thread until the function finished. */ + struct netconn *conn; + /** Depending on the executed function, one of these union members is used */ + union { + /** used for do_send */ + struct netbuf *b; + /** used for do_newconn */ + struct { + u8_t proto; + } n; + /** used for do_bind and do_connect */ + struct { + struct ip_addr *ipaddr; + u16_t port; + } bc; + /** used for do_getaddr */ + struct { + struct ip_addr *ipaddr; + u16_t *port; + u8_t local; + } ad; + /** used for do_write */ + struct { + const void *dataptr; + size_t len; + u8_t apiflags; + } w; + /** used for do_recv */ + struct { + u16_t len; + } r; +#if LWIP_IGMP + /** used for do_join_leave_group */ + struct { + struct ip_addr *multiaddr; + struct ip_addr *interface; + enum netconn_igmp join_or_leave; + } jl; +#endif /* LWIP_IGMP */ +#if TCP_LISTEN_BACKLOG + struct { + u8_t backlog; + } lb; +#endif /* TCP_LISTEN_BACKLOG */ + } msg; +}; + +/** This struct contains a function to execute in another thread context and + a struct api_msg_msg that serves as an argument for this function. + This is passed to tcpip_apimsg to execute functions in tcpip_thread context. */ +struct api_msg { + /** function to execute in tcpip_thread context */ + void (* function)(struct api_msg_msg *msg); + /** arguments for this function */ + struct api_msg_msg msg; +}; + +#if LWIP_DNS +/** As do_gethostbyname requires more arguments but doesn't require a netconn, + it has its own struct (to avoid struct api_msg getting bigger than necessary). + do_gethostbyname must be called using tcpip_callback instead of tcpip_apimsg + (see netconn_gethostbyname). */ +struct dns_api_msg { + /** Hostname to query or dotted IP address string */ + const char *name; + /** Rhe resolved address is stored here */ + struct ip_addr *addr; + /** This semaphore is posted when the name is resolved, the application thread + should wait on it. */ + sys_sem_t sem; + /** Errors are given back here */ + err_t *err; +}; +#endif /* LWIP_DNS */ + +void do_newconn ( struct api_msg_msg *msg); +void do_delconn ( struct api_msg_msg *msg); +void do_bind ( struct api_msg_msg *msg); +void do_connect ( struct api_msg_msg *msg); +void do_disconnect ( struct api_msg_msg *msg); +void do_listen ( struct api_msg_msg *msg); +void do_send ( struct api_msg_msg *msg); +void do_recv ( struct api_msg_msg *msg); +void do_write ( struct api_msg_msg *msg); +void do_getaddr ( struct api_msg_msg *msg); +void do_close ( struct api_msg_msg *msg); +#if LWIP_IGMP +void do_join_leave_group( struct api_msg_msg *msg); +#endif /* LWIP_IGMP */ + +#if LWIP_DNS +void do_gethostbyname(void *arg); +#endif /* LWIP_DNS */ + +struct netconn* netconn_alloc(enum netconn_type t, netconn_callback callback); +void netconn_free(struct netconn *conn); + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_NETCONN */ + +#endif /* __LWIP_API_MSG_H__ */ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/arch.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/arch.h new file mode 100644 index 000000000..5ab190a73 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/arch.h @@ -0,0 +1,235 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_ARCH_H__ +#define __LWIP_ARCH_H__ + +#ifndef LITTLE_ENDIAN +#define LITTLE_ENDIAN 1234 +#endif + +#ifndef BIG_ENDIAN +#define BIG_ENDIAN 4321 +#endif + +#include "arch/cc.h" + +/** Temporary: define format string for size_t if not defined in cc.h */ +#ifndef SZT_F +#define SZT_F U32_F +#endif /* SZT_F */ + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef PACK_STRUCT_BEGIN +#define PACK_STRUCT_BEGIN +#endif /* PACK_STRUCT_BEGIN */ + +#ifndef PACK_STRUCT_END +#define PACK_STRUCT_END +#endif /* PACK_STRUCT_END */ + +#ifndef PACK_STRUCT_FIELD +#define PACK_STRUCT_FIELD(x) x +#endif /* PACK_STRUCT_FIELD */ + + +#ifndef LWIP_UNUSED_ARG +#define LWIP_UNUSED_ARG(x) (void)x +#endif /* LWIP_UNUSED_ARG */ + + +#ifdef LWIP_PROVIDE_ERRNO + +#define EPERM 1 /* Operation not permitted */ +#define ENOENT 2 /* No such file or directory */ +#define ESRCH 3 /* No such process */ +#define EINTR 4 /* Interrupted system call */ +#define EIO 5 /* I/O error */ +#define ENXIO 6 /* No such device or address */ +#define E2BIG 7 /* Arg list too long */ +#define ENOEXEC 8 /* Exec format error */ +#define EBADF 9 /* Bad file number */ +#define ECHILD 10 /* No child processes */ +#define EAGAIN 11 /* Try again */ +#define ENOMEM 12 /* Out of memory */ +#define EACCES 13 /* Permission denied */ +#define EFAULT 14 /* Bad address */ +#define ENOTBLK 15 /* Block device required */ +#define EBUSY 16 /* Device or resource busy */ +#define EEXIST 17 /* File exists */ +#define EXDEV 18 /* Cross-device link */ +#define ENODEV 19 /* No such device */ +#define ENOTDIR 20 /* Not a directory */ +#define EISDIR 21 /* Is a directory */ +#define EINVAL 22 /* Invalid argument */ +#define ENFILE 23 /* File table overflow */ +#define EMFILE 24 /* Too many open files */ +#define ENOTTY 25 /* Not a typewriter */ +#define ETXTBSY 26 /* Text file busy */ +#define EFBIG 27 /* File too large */ +#define ENOSPC 28 /* No space left on device */ +#define ESPIPE 29 /* Illegal seek */ +#define EROFS 30 /* Read-only file system */ +#define EMLINK 31 /* Too many links */ +#define EPIPE 32 /* Broken pipe */ +#define EDOM 33 /* Math argument out of domain of func */ +#define ERANGE 34 /* Math result not representable */ +#define EDEADLK 35 /* Resource deadlock would occur */ +#define ENAMETOOLONG 36 /* File name too long */ +#define ENOLCK 37 /* No record locks available */ +#define ENOSYS 38 /* Function not implemented */ +#define ENOTEMPTY 39 /* Directory not empty */ +#define ELOOP 40 /* Too many symbolic links encountered */ +#define EWOULDBLOCK EAGAIN /* Operation would block */ +#define ENOMSG 42 /* No message of desired type */ +#define EIDRM 43 /* Identifier removed */ +#define ECHRNG 44 /* Channel number out of range */ +#define EL2NSYNC 45 /* Level 2 not synchronized */ +#define EL3HLT 46 /* Level 3 halted */ +#define EL3RST 47 /* Level 3 reset */ +#define ELNRNG 48 /* Link number out of range */ +#define EUNATCH 49 /* Protocol driver not attached */ +#define ENOCSI 50 /* No CSI structure available */ +#define EL2HLT 51 /* Level 2 halted */ +#define EBADE 52 /* Invalid exchange */ +#define EBADR 53 /* Invalid request descriptor */ +#define EXFULL 54 /* Exchange full */ +#define ENOANO 55 /* No anode */ +#define EBADRQC 56 /* Invalid request code */ +#define EBADSLT 57 /* Invalid slot */ + +#define EDEADLOCK EDEADLK + +#define EBFONT 59 /* Bad font file format */ +#define ENOSTR 60 /* Device not a stream */ +#define ENODATA 61 /* No data available */ +#define ETIME 62 /* Timer expired */ +#define ENOSR 63 /* Out of streams resources */ +#define ENONET 64 /* Machine is not on the network */ +#define ENOPKG 65 /* Package not installed */ +#define EREMOTE 66 /* Object is remote */ +#define ENOLINK 67 /* Link has been severed */ +#define EADV 68 /* Advertise error */ +#define ESRMNT 69 /* Srmount error */ +#define ECOMM 70 /* Communication error on send */ +#define EPROTO 71 /* Protocol error */ +#define EMULTIHOP 72 /* Multihop attempted */ +#define EDOTDOT 73 /* RFS specific error */ +#define EBADMSG 74 /* Not a data message */ +#define EOVERFLOW 75 /* Value too large for defined data type */ +#define ENOTUNIQ 76 /* Name not unique on network */ +#define EBADFD 77 /* File descriptor in bad state */ +#define EREMCHG 78 /* Remote address changed */ +#define ELIBACC 79 /* Can not access a needed shared library */ +#define ELIBBAD 80 /* Accessing a corrupted shared library */ +#define ELIBSCN 81 /* .lib section in a.out corrupted */ +#define ELIBMAX 82 /* Attempting to link in too many shared libraries */ +#define ELIBEXEC 83 /* Cannot exec a shared library directly */ +#define EILSEQ 84 /* Illegal byte sequence */ +#define ERESTART 85 /* Interrupted system call should be restarted */ +#define ESTRPIPE 86 /* Streams pipe error */ +#define EUSERS 87 /* Too many users */ +#define ENOTSOCK 88 /* Socket operation on non-socket */ +#define EDESTADDRREQ 89 /* Destination address required */ +#define EMSGSIZE 90 /* Message too long */ +#define EPROTOTYPE 91 /* Protocol wrong type for socket */ +#define ENOPROTOOPT 92 /* Protocol not available */ +#define EPROTONOSUPPORT 93 /* Protocol not supported */ +#define ESOCKTNOSUPPORT 94 /* Socket type not supported */ +#define EOPNOTSUPP 95 /* Operation not supported on transport endpoint */ +#define EPFNOSUPPORT 96 /* Protocol family not supported */ +#define EAFNOSUPPORT 97 /* Address family not supported by protocol */ +#define EADDRINUSE 98 /* Address already in use */ +#define EADDRNOTAVAIL 99 /* Cannot assign requested address */ +#define ENETDOWN 100 /* Network is down */ +#define ENETUNREACH 101 /* Network is unreachable */ +#define ENETRESET 102 /* Network dropped connection because of reset */ +#define ECONNABORTED 103 /* Software caused connection abort */ +#define ECONNRESET 104 /* Connection reset by peer */ +#define ENOBUFS 105 /* No buffer space available */ +#define EISCONN 106 /* Transport endpoint is already connected */ +#define ENOTCONN 107 /* Transport endpoint is not connected */ +#define ESHUTDOWN 108 /* Cannot send after transport endpoint shutdown */ +#define ETOOMANYREFS 109 /* Too many references: cannot splice */ +#define ETIMEDOUT 110 /* Connection timed out */ +#define ECONNREFUSED 111 /* Connection refused */ +#define EHOSTDOWN 112 /* Host is down */ +#define EHOSTUNREACH 113 /* No route to host */ +#define EALREADY 114 /* Operation already in progress */ +#define EINPROGRESS 115 /* Operation now in progress */ +#define ESTALE 116 /* Stale NFS file handle */ +#define EUCLEAN 117 /* Structure needs cleaning */ +#define ENOTNAM 118 /* Not a XENIX named type file */ +#define ENAVAIL 119 /* No XENIX semaphores available */ +#define EISNAM 120 /* Is a named type file */ +#define EREMOTEIO 121 /* Remote I/O error */ +#define EDQUOT 122 /* Quota exceeded */ + +#define ENOMEDIUM 123 /* No medium found */ +#define EMEDIUMTYPE 124 /* Wrong medium type */ + + +#define ENSROK 0 /* DNS server returned answer with no data */ +#define ENSRNODATA 160 /* DNS server returned answer with no data */ +#define ENSRFORMERR 161 /* DNS server claims query was misformatted */ +#define ENSRSERVFAIL 162 /* DNS server returned general failure */ +#define ENSRNOTFOUND 163 /* Domain name not found */ +#define ENSRNOTIMP 164 /* DNS server does not implement requested operation */ +#define ENSRREFUSED 165 /* DNS server refused query */ +#define ENSRBADQUERY 166 /* Misformatted DNS query */ +#define ENSRBADNAME 167 /* Misformatted domain name */ +#define ENSRBADFAMILY 168 /* Unsupported address family */ +#define ENSRBADRESP 169 /* Misformatted DNS reply */ +#define ENSRCONNREFUSED 170 /* Could not contact DNS servers */ +#define ENSRTIMEOUT 171 /* Timeout while contacting DNS servers */ +#define ENSROF 172 /* End of file */ +#define ENSRFILE 173 /* Error reading file */ +#define ENSRNOMEM 174 /* Out of memory */ +#define ENSRDESTRUCTION 175 /* Application terminated lookup */ +#define ENSRQUERYDOMAINTOOLONG 176 /* Domain name is too long */ +#define ENSRCNAMELOOP 177 /* Domain name is too long */ + +#ifndef errno +extern int errno; +#endif + +#endif /* LWIP_PROVIDE_ERRNO */ + +#ifdef __cplusplus +} +#endif + +#endif /* __LWIP_ARCH_H__ */ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/debug.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/debug.h new file mode 100644 index 000000000..fb0760790 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/debug.h @@ -0,0 +1,100 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_DEBUG_H__ +#define __LWIP_DEBUG_H__ + +#include "lwip/arch.h" + +/** lower two bits indicate debug level + * - 0 all + * - 1 warning + * - 2 serious + * - 3 severe + */ +#define LWIP_DBG_LEVEL_ALL 0x00 +#define LWIP_DBG_LEVEL_OFF LWIP_DBG_LEVEL_ALL /* compatibility define only */ +#define LWIP_DBG_LEVEL_WARNING 0x01 /* bad checksums, dropped packets, ... */ +#define LWIP_DBG_LEVEL_SERIOUS 0x02 /* memory allocation failures, ... */ +#define LWIP_DBG_LEVEL_SEVERE 0x03 +#define LWIP_DBG_MASK_LEVEL 0x03 + +/** flag for LWIP_DEBUGF to enable that debug message */ +#define LWIP_DBG_ON 0x80U +/** flag for LWIP_DEBUGF to disable that debug message */ +#define LWIP_DBG_OFF 0x00U + +/** flag for LWIP_DEBUGF indicating a tracing message (to follow program flow) */ +#define LWIP_DBG_TRACE 0x40U +/** flag for LWIP_DEBUGF indicating a state debug message (to follow module states) */ +#define LWIP_DBG_STATE 0x20U +/** flag for LWIP_DEBUGF indicating newly added code, not thoroughly tested yet */ +#define LWIP_DBG_FRESH 0x10U +/** flag for LWIP_DEBUGF to halt after printing this debug message */ +#define LWIP_DBG_HALT 0x08U + +#ifndef LWIP_NOASSERT +#define LWIP_ASSERT(message, assertion) do { if(!(assertion)) \ + LWIP_PLATFORM_ASSERT(message); } while(0) +#else /* LWIP_NOASSERT */ +#define LWIP_ASSERT(message, assertion) +#endif /* LWIP_NOASSERT */ + +/** if "expression" isn't true, then print "message" and execute "handler" expression */ +#ifndef LWIP_ERROR +#define LWIP_ERROR(message, expression, handler) do { if (!(expression)) { \ + LWIP_PLATFORM_ASSERT(message); handler;}} while(0) +#endif /* LWIP_ERROR */ + +#ifdef LWIP_DEBUG +/** print debug message only if debug message type is enabled... + * AND is of correct type AND is at least LWIP_DBG_LEVEL + */ +#define LWIP_DEBUGF(debug, message) do { \ + if ( \ + ((debug) & LWIP_DBG_ON) && \ + ((debug) & LWIP_DBG_TYPES_ON) && \ + ((s16_t)((debug) & LWIP_DBG_MASK_LEVEL) >= LWIP_DBG_MIN_LEVEL)) { \ + LWIP_PLATFORM_DIAG(message); \ + if ((debug) & LWIP_DBG_HALT) { \ + while(1); \ + } \ + } \ + } while(0) + +#else /* LWIP_DEBUG */ +#define LWIP_DEBUGF(debug, message) +#endif /* LWIP_DEBUG */ + +#endif /* __LWIP_DEBUG_H__ */ + diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/def.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/def.h new file mode 100644 index 000000000..c3681ac1f --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/def.h @@ -0,0 +1,49 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_DEF_H__ +#define __LWIP_DEF_H__ + +/* this might define NULL already */ +#include "lwip/arch.h" + +#define LWIP_MAX(x , y) (((x) > (y)) ? (x) : (y)) +#define LWIP_MIN(x , y) (((x) < (y)) ? (x) : (y)) + +#ifndef NULL +#define NULL ((void *)0) +#endif + + +#endif /* __LWIP_DEF_H__ */ + diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/dhcp.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/dhcp.h new file mode 100644 index 000000000..27a0adeb8 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/dhcp.h @@ -0,0 +1,248 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** @file + */ + +#ifndef __LWIP_DHCP_H__ +#define __LWIP_DHCP_H__ + +#include "lwip/opt.h" + +#if LWIP_DHCP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/netif.h" +#include "lwip/udp.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** period (in seconds) of the application calling dhcp_coarse_tmr() */ +#define DHCP_COARSE_TIMER_SECS 60 +/** period (in milliseconds) of the application calling dhcp_coarse_tmr() */ +#define DHCP_COARSE_TIMER_MSECS (DHCP_COARSE_TIMER_SECS * 1000UL) +/** period (in milliseconds) of the application calling dhcp_fine_tmr() */ +#define DHCP_FINE_TIMER_MSECS 500 + +struct dhcp +{ + /** transaction identifier of last sent request */ + u32_t xid; + /** our connection to the DHCP server */ + struct udp_pcb *pcb; + /** incoming msg */ + struct dhcp_msg *msg_in; + /** incoming msg options */ + void *options_in; + /** ingoing msg options length */ + u16_t options_in_len; + /** current DHCP state machine state */ + u8_t state; + /** retries of current request */ + u8_t tries; + + struct pbuf *p_out; /* pbuf of outcoming msg */ + struct dhcp_msg *msg_out; /* outgoing msg */ + u16_t options_out_len; /* outgoing msg options length */ + u16_t request_timeout; /* #ticks with period DHCP_FINE_TIMER_SECS for request timeout */ + u16_t t1_timeout; /* #ticks with period DHCP_COARSE_TIMER_SECS for renewal time */ + u16_t t2_timeout; /* #ticks with period DHCP_COARSE_TIMER_SECS for rebind time */ + struct ip_addr server_ip_addr; /* dhcp server address that offered this lease */ + struct ip_addr offered_ip_addr; + struct ip_addr offered_sn_mask; + struct ip_addr offered_gw_addr; + struct ip_addr offered_bc_addr; +#define DHCP_MAX_DNS 2 + u32_t dns_count; /* actual number of DNS servers obtained */ + struct ip_addr offered_dns_addr[DHCP_MAX_DNS]; /* DNS server addresses */ + + u32_t offered_t0_lease; /* lease period (in seconds) */ + u32_t offered_t1_renew; /* recommended renew time (usually 50% of lease period) */ + u32_t offered_t2_rebind; /* recommended rebind time (usually 66% of lease period) */ +#if LWIP_DHCP_AUTOIP_COOP + u8_t autoip_coop_state; +#endif +/** Patch #1308 + * TODO: See dhcp.c "TODO"s + */ +#if 0 + struct ip_addr offered_si_addr; + u8_t *boot_file_name; +#endif +}; + +/* MUST be compiled with "pack structs" or equivalent! */ +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +/** minimum set of fields of any DHCP message */ +struct dhcp_msg +{ + PACK_STRUCT_FIELD(u8_t op); + PACK_STRUCT_FIELD(u8_t htype); + PACK_STRUCT_FIELD(u8_t hlen); + PACK_STRUCT_FIELD(u8_t hops); + PACK_STRUCT_FIELD(u32_t xid); + PACK_STRUCT_FIELD(u16_t secs); + PACK_STRUCT_FIELD(u16_t flags); + PACK_STRUCT_FIELD(struct ip_addr ciaddr); + PACK_STRUCT_FIELD(struct ip_addr yiaddr); + PACK_STRUCT_FIELD(struct ip_addr siaddr); + PACK_STRUCT_FIELD(struct ip_addr giaddr); +#define DHCP_CHADDR_LEN 16U + PACK_STRUCT_FIELD(u8_t chaddr[DHCP_CHADDR_LEN]); +#define DHCP_SNAME_LEN 64U + PACK_STRUCT_FIELD(u8_t sname[DHCP_SNAME_LEN]); +#define DHCP_FILE_LEN 128U + PACK_STRUCT_FIELD(u8_t file[DHCP_FILE_LEN]); + PACK_STRUCT_FIELD(u32_t cookie); +#define DHCP_MIN_OPTIONS_LEN 68U +/** make sure user does not configure this too small */ +#if ((defined(DHCP_OPTIONS_LEN)) && (DHCP_OPTIONS_LEN < DHCP_MIN_OPTIONS_LEN)) +# undef DHCP_OPTIONS_LEN +#endif +/** allow this to be configured in lwipopts.h, but not too small */ +#if (!defined(DHCP_OPTIONS_LEN)) +/** set this to be sufficient for your options in outgoing DHCP msgs */ +# define DHCP_OPTIONS_LEN DHCP_MIN_OPTIONS_LEN +#endif + PACK_STRUCT_FIELD(u8_t options[DHCP_OPTIONS_LEN]); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +/** start DHCP configuration */ +err_t dhcp_start(struct netif *netif); +/** enforce early lease renewal (not needed normally)*/ +err_t dhcp_renew(struct netif *netif); +/** release the DHCP lease, usually called before dhcp_stop()*/ +err_t dhcp_release(struct netif *netif); +/** stop DHCP configuration */ +void dhcp_stop(struct netif *netif); +/** inform server of our manual IP address */ +void dhcp_inform(struct netif *netif); +/** Handle a possible change in the network configuration */ +void dhcp_network_changed(struct netif *netif); + +/** if enabled, check whether the offered IP address is not in use, using ARP */ +#if DHCP_DOES_ARP_CHECK +void dhcp_arp_reply(struct netif *netif, struct ip_addr *addr); +#endif + +/** to be called every minute */ +void dhcp_coarse_tmr(void); +/** to be called every half second */ +void dhcp_fine_tmr(void); + +/** DHCP message item offsets and length */ +#define DHCP_MSG_OFS (UDP_DATA_OFS) + #define DHCP_OP_OFS (DHCP_MSG_OFS + 0) + #define DHCP_HTYPE_OFS (DHCP_MSG_OFS + 1) + #define DHCP_HLEN_OFS (DHCP_MSG_OFS + 2) + #define DHCP_HOPS_OFS (DHCP_MSG_OFS + 3) + #define DHCP_XID_OFS (DHCP_MSG_OFS + 4) + #define DHCP_SECS_OFS (DHCP_MSG_OFS + 8) + #define DHCP_FLAGS_OFS (DHCP_MSG_OFS + 10) + #define DHCP_CIADDR_OFS (DHCP_MSG_OFS + 12) + #define DHCP_YIADDR_OFS (DHCP_MSG_OFS + 16) + #define DHCP_SIADDR_OFS (DHCP_MSG_OFS + 20) + #define DHCP_GIADDR_OFS (DHCP_MSG_OFS + 24) + #define DHCP_CHADDR_OFS (DHCP_MSG_OFS + 28) + #define DHCP_SNAME_OFS (DHCP_MSG_OFS + 44) + #define DHCP_FILE_OFS (DHCP_MSG_OFS + 108) +#define DHCP_MSG_LEN 236 + +#define DHCP_COOKIE_OFS (DHCP_MSG_OFS + DHCP_MSG_LEN) +#define DHCP_OPTIONS_OFS (DHCP_MSG_OFS + DHCP_MSG_LEN + 4) + +#define DHCP_CLIENT_PORT 68 +#define DHCP_SERVER_PORT 67 + +/** DHCP client states */ +#define DHCP_REQUESTING 1 +#define DHCP_INIT 2 +#define DHCP_REBOOTING 3 +#define DHCP_REBINDING 4 +#define DHCP_RENEWING 5 +#define DHCP_SELECTING 6 +#define DHCP_INFORMING 7 +#define DHCP_CHECKING 8 +#define DHCP_PERMANENT 9 +#define DHCP_BOUND 10 +/** not yet implemented #define DHCP_RELEASING 11 */ +#define DHCP_BACKING_OFF 12 +#define DHCP_OFF 13 + +/** AUTOIP cooperatation flags */ +#define DHCP_AUTOIP_COOP_STATE_OFF 0 +#define DHCP_AUTOIP_COOP_STATE_ON 1 + +#define DHCP_BOOTREQUEST 1 +#define DHCP_BOOTREPLY 2 + +#define DHCP_DISCOVER 1 +#define DHCP_OFFER 2 +#define DHCP_REQUEST 3 +#define DHCP_DECLINE 4 +#define DHCP_ACK 5 +#define DHCP_NAK 6 +#define DHCP_RELEASE 7 +#define DHCP_INFORM 8 + +#define DHCP_HTYPE_ETH 1 + +#define DHCP_HLEN_ETH 6 + +#define DHCP_BROADCAST_FLAG 15 +#define DHCP_BROADCAST_MASK (1 << DHCP_FLAG_BROADCAST) + +/** BootP options */ +#define DHCP_OPTION_PAD 0 +#define DHCP_OPTION_SUBNET_MASK 1 /* RFC 2132 3.3 */ +#define DHCP_OPTION_ROUTER 3 +#define DHCP_OPTION_DNS_SERVER 6 +#define DHCP_OPTION_HOSTNAME 12 +#define DHCP_OPTION_IP_TTL 23 +#define DHCP_OPTION_MTU 26 +#define DHCP_OPTION_BROADCAST 28 +#define DHCP_OPTION_TCP_TTL 37 +#define DHCP_OPTION_END 255 + +/** DHCP options */ +#define DHCP_OPTION_REQUESTED_IP 50 /* RFC 2132 9.1, requested IP address */ +#define DHCP_OPTION_LEASE_TIME 51 /* RFC 2132 9.2, time in seconds, in 4 bytes */ +#define DHCP_OPTION_OVERLOAD 52 /* RFC2132 9.3, use file and/or sname field for options */ + +#define DHCP_OPTION_MESSAGE_TYPE 53 /* RFC 2132 9.6, important for DHCP */ +#define DHCP_OPTION_MESSAGE_TYPE_LEN 1 + + +#define DHCP_OPTION_SERVER_ID 54 /* RFC 2132 9.7, server IP address */ +#define DHCP_OPTION_PARAMETER_REQUEST_LIST 55 /* RFC 2132 9.8, requested option types */ + +#define DHCP_OPTION_MAX_MSG_SIZE 57 /* RFC 2132 9.10, message size accepted >= 576 */ +#define DHCP_OPTION_MAX_MSG_SIZE_LEN 2 + +#define DHCP_OPTION_T1 58 /* T1 renewal time */ +#define DHCP_OPTION_T2 59 /* T2 rebinding time */ +#define DHCP_OPTION_US 60 +#define DHCP_OPTION_CLIENT_ID 61 +#define DHCP_OPTION_TFTP_SERVERNAME 66 +#define DHCP_OPTION_BOOTFILE 67 + +/** possible combinations of overloading the file and sname fields with options */ +#define DHCP_OVERLOAD_NONE 0 +#define DHCP_OVERLOAD_FILE 1 +#define DHCP_OVERLOAD_SNAME 2 +#define DHCP_OVERLOAD_SNAME_FILE 3 + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_DHCP */ + +#endif /*__LWIP_DHCP_H__*/ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/dns.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/dns.h new file mode 100644 index 000000000..c1b8ae031 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/dns.h @@ -0,0 +1,99 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * lwip DNS resolver header file. + + * Author: Jim Pettinato + * April 2007 + + * ported from uIP resolv.c Copyright (c) 2002-2003, Adam Dunkels. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef __LWIP_DNS_H__ +#define __LWIP_DNS_H__ + +#include "lwip/opt.h" + +#if LWIP_DNS /* don't build if not configured for use in lwipopts.h */ + +/** DNS timer period */ +#define DNS_TMR_INTERVAL 1000 + +/** DNS field TYPE used for "Resource Records" */ +#define DNS_RRTYPE_A 1 /* a host address */ +#define DNS_RRTYPE_NS 2 /* an authoritative name server */ +#define DNS_RRTYPE_MD 3 /* a mail destination (Obsolete - use MX) */ +#define DNS_RRTYPE_MF 4 /* a mail forwarder (Obsolete - use MX) */ +#define DNS_RRTYPE_CNAME 5 /* the canonical name for an alias */ +#define DNS_RRTYPE_SOA 6 /* marks the start of a zone of authority */ +#define DNS_RRTYPE_MB 7 /* a mailbox domain name (EXPERIMENTAL) */ +#define DNS_RRTYPE_MG 8 /* a mail group member (EXPERIMENTAL) */ +#define DNS_RRTYPE_MR 9 /* a mail rename domain name (EXPERIMENTAL) */ +#define DNS_RRTYPE_NULL 10 /* a null RR (EXPERIMENTAL) */ +#define DNS_RRTYPE_WKS 11 /* a well known service description */ +#define DNS_RRTYPE_PTR 12 /* a domain name pointer */ +#define DNS_RRTYPE_HINFO 13 /* host information */ +#define DNS_RRTYPE_MINFO 14 /* mailbox or mail list information */ +#define DNS_RRTYPE_MX 15 /* mail exchange */ +#define DNS_RRTYPE_TXT 16 /* text strings */ + +/** DNS field CLASS used for "Resource Records" */ +#define DNS_RRCLASS_IN 1 /* the Internet */ +#define DNS_RRCLASS_CS 2 /* the CSNET class (Obsolete - used only for examples in some obsolete RFCs) */ +#define DNS_RRCLASS_CH 3 /* the CHAOS class */ +#define DNS_RRCLASS_HS 4 /* Hesiod [Dyer 87] */ +#define DNS_RRCLASS_FLUSH 0x800 /* Flush bit */ + +/** Callback which is invoked when a hostname is found. + * A function of this type must be implemented by the application using the DNS resolver. + * @param name pointer to the name that was looked up. + * @param ipaddr pointer to a struct ip_addr containing the IP address of the hostname, + * or NULL if the name could not be found (or on any other error). + * @param callback_arg a user-specified callback argument passed to dns_gethostbyname +*/ +typedef void (*dns_found_callback)(const char *name, struct ip_addr *ipaddr, void *callback_arg); + + +void dns_init(void); + +void dns_tmr(void); + +void dns_setserver(u8_t numdns, struct ip_addr *dnsserver); + +struct ip_addr dns_getserver(u8_t numdns); + +err_t dns_gethostbyname(const char *hostname, struct ip_addr *addr, + dns_found_callback found, void *callback_arg); + +#if DNS_LOCAL_HOSTLIST && DNS_LOCAL_HOSTLIST_IS_DYNAMIC +int dns_local_removehost(const char *hostname, const struct ip_addr *addr); +err_t dns_local_addhost(const char *hostname, const struct ip_addr *addr); +#endif /* DNS_LOCAL_HOSTLIST && DNS_LOCAL_HOSTLIST_IS_DYNAMIC */ + +#endif /* LWIP_DNS */ + +#endif /* __LWIP_DNS_H__ */ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/err.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/err.h new file mode 100644 index 000000000..792f27606 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/err.h @@ -0,0 +1,89 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_ERR_H__ +#define __LWIP_ERR_H__ + +#include "lwip/opt.h" +#include "lwip/arch.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** Define LWIP_ERR_T in cc.h if you want to use + * a different type for your platform (must be signed). */ +#ifdef LWIP_ERR_T +typedef LWIP_ERR_T err_t; +#else /* LWIP_ERR_T */ + typedef s8_t err_t; +#endif /* LWIP_ERR_T*/ + +/* Definitions for error constants. */ + +#define ERR_OK 0 /* No error, everything OK. */ +#define ERR_MEM -1 /* Out of memory error. */ +#define ERR_BUF -2 /* Buffer error. */ +#define ERR_TIMEOUT -3 /* Timeout. */ +#define ERR_RTE -4 /* Routing problem. */ + +#define ERR_IS_FATAL(e) ((e) < ERR_RTE) + +#define ERR_ABRT -5 /* Connection aborted. */ +#define ERR_RST -6 /* Connection reset. */ +#define ERR_CLSD -7 /* Connection closed. */ +#define ERR_CONN -8 /* Not connected. */ + +#define ERR_VAL -9 /* Illegal value. */ + +#define ERR_ARG -10 /* Illegal argument. */ + +#define ERR_USE -11 /* Address in use. */ + +#define ERR_IF -12 /* Low-level netif error */ +#define ERR_ISCONN -13 /* Already connected. */ + +#define ERR_INPROGRESS -14 /* Operation in progress */ + + +#ifdef LWIP_DEBUG +extern const char *lwip_strerr(err_t err); +#else +#define lwip_strerr(x) "" +#endif /* LWIP_DEBUG */ + +#ifdef __cplusplus +} +#endif + +#endif /* __LWIP_ERR_H__ */ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/init.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/init.h new file mode 100644 index 000000000..a86e0d9c8 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/init.h @@ -0,0 +1,74 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_INIT_H__ +#define __LWIP_INIT_H__ + +#include "lwip/opt.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** X.x.x: Major version of the stack */ +#define LWIP_VERSION_MAJOR 1U +/** x.X.x: Minor version of the stack */ +#define LWIP_VERSION_MINOR 3U +/** x.x.X: Revision of the stack */ +#define LWIP_VERSION_REVISION 2U +/** For release candidates, this is set to 1..254 + * For official releases, this is set to 255 (LWIP_RC_RELEASE) + * For development versions (CVS), this is set to 0 (LWIP_RC_DEVELOPMENT) */ +#define LWIP_VERSION_RC 255U + +/** LWIP_VERSION_RC is set to LWIP_RC_RELEASE for official releases */ +#define LWIP_RC_RELEASE 255U +/** LWIP_VERSION_RC is set to LWIP_RC_DEVELOPMENT for CVS versions */ +#define LWIP_RC_DEVELOPMENT 0U + +#define LWIP_VERSION_IS_RELEASE (LWIP_VERSION_RC == LWIP_RC_RELEASE) +#define LWIP_VERSION_IS_DEVELOPMENT (LWIP_VERSION_RC == LWIP_RC_DEVELOPMENT) +#define LWIP_VERSION_IS_RC ((LWIP_VERSION_RC != LWIP_RC_RELEASE) && (LWIP_VERSION_RC != LWIP_RC_DEVELOPMENT)) + +/** Provides the version of the stack */ +#define LWIP_VERSION (LWIP_VERSION_MAJOR << 24 | LWIP_VERSION_MINOR << 16 | \ + LWIP_VERSION_REVISION << 8 | LWIP_VERSION_RC) + +/* Modules initialization */ +void lwip_init(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __LWIP_INIT_H__ */ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/mem.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/mem.h new file mode 100644 index 000000000..327229e58 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/mem.h @@ -0,0 +1,109 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_MEM_H__ +#define __LWIP_MEM_H__ + +#include "lwip/opt.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#if MEM_LIBC_MALLOC + +#include /* for size_t */ + +typedef size_t mem_size_t; + +/* aliases for C library malloc() */ +#define mem_init() +/* in case C library malloc() needs extra protection, + * allow these defines to be overridden. + */ +#ifndef mem_free +#define mem_free free +#endif +#ifndef mem_malloc +#define mem_malloc malloc +#endif +#ifndef mem_calloc +#define mem_calloc calloc +#endif +#ifndef mem_realloc +static void *mem_realloc(void *mem, mem_size_t size) +{ + LWIP_UNUSED_ARG(size); + return mem; +} +#endif +#else /* MEM_LIBC_MALLOC */ + +/* MEM_SIZE would have to be aligned, but using 64000 here instead of + * 65535 leaves some room for alignment... + */ +#if MEM_SIZE > 64000l +typedef u32_t mem_size_t; +#else +typedef u16_t mem_size_t; +#endif /* MEM_SIZE > 64000 */ + +#if MEM_USE_POOLS +/** mem_init is not used when using pools instead of a heap */ +#define mem_init() +/** mem_realloc is not used when using pools instead of a heap: + we can't free part of a pool element and don't want to copy the rest */ +#define mem_realloc(mem, size) (mem) +#else /* MEM_USE_POOLS */ +/* lwIP alternative malloc */ +void mem_init(void); +void *mem_realloc(void *mem, mem_size_t size); +#endif /* MEM_USE_POOLS */ +void *mem_malloc(mem_size_t size); +void *mem_calloc(mem_size_t count, mem_size_t size); +void mem_free(void *mem); +#endif /* MEM_LIBC_MALLOC */ + +#ifndef LWIP_MEM_ALIGN_SIZE +#define LWIP_MEM_ALIGN_SIZE(size) (((size) + MEM_ALIGNMENT - 1) & ~(MEM_ALIGNMENT-1)) +#endif + +#ifndef LWIP_MEM_ALIGN +#define LWIP_MEM_ALIGN(addr) ((void *)(((mem_ptr_t)(addr) + MEM_ALIGNMENT - 1) & ~(mem_ptr_t)(MEM_ALIGNMENT-1))) +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* __LWIP_MEM_H__ */ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/memp.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/memp.h new file mode 100644 index 000000000..3de7bf9a0 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/memp.h @@ -0,0 +1,118 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#ifndef __LWIP_MEMP_H__ +#define __LWIP_MEMP_H__ + +#include "lwip/opt.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Create the list of all memory pools managed by memp. MEMP_MAX represents a NULL pool at the end */ +typedef enum { +#define LWIP_MEMPOOL(name,num,size,desc) MEMP_##name, +#include "lwip/memp_std.h" + MEMP_MAX +} memp_t; + +#if MEM_USE_POOLS +/* Use a helper type to get the start and end of the user "memory pools" for mem_malloc */ +typedef enum { + /* Get the first (via: + MEMP_POOL_HELPER_START = ((u8_t) 1*MEMP_POOL_A + 0*MEMP_POOL_B + 0*MEMP_POOL_C + 0)*/ + MEMP_POOL_HELPER_FIRST = ((u8_t) +#define LWIP_MEMPOOL(name,num,size,desc) +#define LWIP_MALLOC_MEMPOOL_START 1 +#define LWIP_MALLOC_MEMPOOL(num, size) * MEMP_POOL_##size + 0 +#define LWIP_MALLOC_MEMPOOL_END +#include "lwip/memp_std.h" + ) , + /* Get the last (via: + MEMP_POOL_HELPER_END = ((u8_t) 0 + MEMP_POOL_A*0 + MEMP_POOL_B*0 + MEMP_POOL_C*1) */ + MEMP_POOL_HELPER_LAST = ((u8_t) +#define LWIP_MEMPOOL(name,num,size,desc) +#define LWIP_MALLOC_MEMPOOL_START +#define LWIP_MALLOC_MEMPOOL(num, size) 0 + MEMP_POOL_##size * +#define LWIP_MALLOC_MEMPOOL_END 1 +#include "lwip/memp_std.h" + ) +} memp_pool_helper_t; + +/* The actual start and stop values are here (cast them over) + We use this helper type and these defines so we can avoid using const memp_t values */ +#define MEMP_POOL_FIRST ((memp_t) MEMP_POOL_HELPER_FIRST) +#define MEMP_POOL_LAST ((memp_t) MEMP_POOL_HELPER_LAST) +#endif /* MEM_USE_POOLS */ + +#if MEMP_MEM_MALLOC || MEM_USE_POOLS +extern const u16_t memp_sizes[MEMP_MAX]; +#endif /* MEMP_MEM_MALLOC || MEM_USE_POOLS */ + +#if MEMP_MEM_MALLOC + +#include "mem.h" + +#define memp_init() +#define memp_malloc(type) mem_malloc(memp_sizes[type]) +#define memp_free(type, mem) mem_free(mem) + +#else /* MEMP_MEM_MALLOC */ + +#if MEM_USE_POOLS +/** This structure is used to save the pool one element came from. */ +struct memp_malloc_helper +{ + memp_t poolnr; +}; +#endif /* MEM_USE_POOLS */ + +void memp_init(void); + +#if MEMP_OVERFLOW_CHECK +void *memp_malloc_fn(memp_t type, const char* file, const int line); +#define memp_malloc(t) memp_malloc_fn((t), __FILE__, __LINE__) +#else +void *memp_malloc(memp_t type); +#endif +void memp_free(memp_t type, void *mem); + +#endif /* MEMP_MEM_MALLOC */ + +#ifdef __cplusplus +} +#endif + +#endif /* __LWIP_MEMP_H__ */ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/memp_std.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/memp_std.h new file mode 100644 index 000000000..d8d4945dd --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/memp_std.h @@ -0,0 +1,104 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * SETUP: Make sure we define everything we will need. + * + * We have create three types of pools: + * 1) MEMPOOL - standard pools + * 2) MALLOC_MEMPOOL - to be used by mem_malloc in mem.c + * 3) PBUF_MEMPOOL - a mempool of pbuf's, so include space for the pbuf struct + * + * If the include'r doesn't require any special treatment of each of the types + * above, then will declare #2 & #3 to be just standard mempools. + */ +#ifndef LWIP_MALLOC_MEMPOOL +/* This treats "malloc pools" just like any other pool. + The pools are a little bigger to provide 'size' as the amount of user data. */ +#define LWIP_MALLOC_MEMPOOL(num, size) LWIP_MEMPOOL(POOL_##size, num, (size + sizeof(struct memp_malloc_helper)), "MALLOC_"#size) +#define LWIP_MALLOC_MEMPOOL_START +#define LWIP_MALLOC_MEMPOOL_END +#endif /* LWIP_MALLOC_MEMPOOL */ + +#ifndef LWIP_PBUF_MEMPOOL +/* This treats "pbuf pools" just like any other pool. + * Allocates buffers for a pbuf struct AND a payload size */ +#define LWIP_PBUF_MEMPOOL(name, num, payload, desc) LWIP_MEMPOOL(name, num, (MEMP_ALIGN_SIZE(sizeof(struct pbuf)) + MEMP_ALIGN_SIZE(payload)), desc) +#endif /* LWIP_PBUF_MEMPOOL */ + + +/* + * A list of internal pools used by LWIP. + * + * LWIP_MEMPOOL(pool_name, number_elements, element_size, pool_description) + * creates a pool name MEMP_pool_name. description is used in stats.c + */ +#if LWIP_RAW +LWIP_MEMPOOL(RAW_PCB, MEMP_NUM_RAW_PCB, sizeof(struct raw_pcb), "RAW_PCB") +#endif /* LWIP_RAW */ + +#if LWIP_UDP +LWIP_MEMPOOL(UDP_PCB, MEMP_NUM_UDP_PCB, sizeof(struct udp_pcb), "UDP_PCB") +#endif /* LWIP_UDP */ + +#if LWIP_TCP +LWIP_MEMPOOL(TCP_PCB, MEMP_NUM_TCP_PCB, sizeof(struct tcp_pcb), "TCP_PCB") +LWIP_MEMPOOL(TCP_PCB_LISTEN, MEMP_NUM_TCP_PCB_LISTEN, sizeof(struct tcp_pcb_listen), "TCP_PCB_LISTEN") +LWIP_MEMPOOL(TCP_SEG, MEMP_NUM_TCP_SEG, sizeof(struct tcp_seg), "TCP_SEG") +#endif /* LWIP_TCP */ + +#if IP_REASSEMBLY +LWIP_MEMPOOL(REASSDATA, MEMP_NUM_REASSDATA, sizeof(struct ip_reassdata), "REASSDATA") +#endif /* IP_REASSEMBLY */ + +#if LWIP_NETCONN +LWIP_MEMPOOL(NETBUF, MEMP_NUM_NETBUF, sizeof(struct netbuf), "NETBUF") +LWIP_MEMPOOL(NETCONN, MEMP_NUM_NETCONN, sizeof(struct netconn), "NETCONN") +#endif /* LWIP_NETCONN */ + +#if NO_SYS==0 +LWIP_MEMPOOL(TCPIP_MSG_API, MEMP_NUM_TCPIP_MSG_API, sizeof(struct tcpip_msg), "TCPIP_MSG_API") +LWIP_MEMPOOL(TCPIP_MSG_INPKT,MEMP_NUM_TCPIP_MSG_INPKT, sizeof(struct tcpip_msg), "TCPIP_MSG_INPKT") +#endif /* NO_SYS==0 */ + +#if ARP_QUEUEING +LWIP_MEMPOOL(ARP_QUEUE, MEMP_NUM_ARP_QUEUE, sizeof(struct etharp_q_entry), "ARP_QUEUE") +#endif /* ARP_QUEUEING */ + +#if LWIP_IGMP +LWIP_MEMPOOL(IGMP_GROUP, MEMP_NUM_IGMP_GROUP, sizeof(struct igmp_group), "IGMP_GROUP") +#endif /* LWIP_IGMP */ + +#if NO_SYS==0 +LWIP_MEMPOOL(SYS_TIMEOUT, MEMP_NUM_SYS_TIMEOUT, sizeof(struct sys_timeo), "SYS_TIMEOUT") +#endif /* NO_SYS==0 */ + + +/* + * A list of pools of pbuf's used by LWIP. + * + * LWIP_PBUF_MEMPOOL(pool_name, number_elements, pbuf_payload_size, pool_description) + * creates a pool name MEMP_pool_name. description is used in stats.c + * This allocates enough space for the pbuf struct and a payload. + * (Example: pbuf_payload_size=0 allocates only size for the struct) + */ +LWIP_PBUF_MEMPOOL(PBUF, MEMP_NUM_PBUF, 0, "PBUF_REF/ROM") +LWIP_PBUF_MEMPOOL(PBUF_POOL, PBUF_POOL_SIZE, PBUF_POOL_BUFSIZE, "PBUF_POOL") + + +/* + * Allow for user-defined pools; this must be explicitly set in lwipopts.h + * since the default is to NOT look for lwippools.h + */ +#if MEMP_USE_CUSTOM_POOLS +#include "lwippools.h" +#endif /* MEMP_USE_CUSTOM_POOLS */ + +/* + * REQUIRED CLEANUP: Clear up so we don't get "multiply defined" error later + * (#undef is ignored for something that is not defined) + */ +#undef LWIP_MEMPOOL +#undef LWIP_MALLOC_MEMPOOL +#undef LWIP_MALLOC_MEMPOOL_START +#undef LWIP_MALLOC_MEMPOOL_END +#undef LWIP_PBUF_MEMPOOL diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/netbuf.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/netbuf.h new file mode 100644 index 000000000..ab9ea33d1 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/netbuf.h @@ -0,0 +1,88 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_NETBUF_H__ +#define __LWIP_NETBUF_H__ + +#include "lwip/opt.h" +#include "lwip/pbuf.h" +#include "lwip/ip_addr.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct netbuf { + struct pbuf *p, *ptr; + struct ip_addr *addr; + u16_t port; +#if LWIP_NETBUF_RECVINFO + struct ip_addr *toaddr; + u16_t toport; +#endif /* LWIP_NETBUF_RECVINFO */ +}; + +/* Network buffer functions: */ +struct netbuf * netbuf_new (void); +void netbuf_delete (struct netbuf *buf); +void * netbuf_alloc (struct netbuf *buf, u16_t size); +void netbuf_free (struct netbuf *buf); +err_t netbuf_ref (struct netbuf *buf, + const void *dataptr, u16_t size); +void netbuf_chain (struct netbuf *head, + struct netbuf *tail); + +u16_t netbuf_len (struct netbuf *buf); +err_t netbuf_data (struct netbuf *buf, + void **dataptr, u16_t *len); +s8_t netbuf_next (struct netbuf *buf); +void netbuf_first (struct netbuf *buf); + + +#define netbuf_copy_partial(buf, dataptr, len, offset) \ + pbuf_copy_partial((buf)->p, (dataptr), (len), (offset)) +#define netbuf_copy(buf,dataptr,len) netbuf_copy_partial(buf, dataptr, len, 0) +#define netbuf_take(buf, dataptr, len) pbuf_take((buf)->p, dataptr, len) +#define netbuf_len(buf) ((buf)->p->tot_len) +#define netbuf_fromaddr(buf) ((buf)->addr) +#define netbuf_fromport(buf) ((buf)->port) +#if LWIP_NETBUF_RECVINFO +#define netbuf_destaddr(buf) ((buf)->toaddr) +#define netbuf_destport(buf) ((buf)->toport) +#endif /* LWIP_NETBUF_RECVINFO */ + +#ifdef __cplusplus +} +#endif + +#endif /* __LWIP_NETBUF_H__ */ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/netdb.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/netdb.h new file mode 100644 index 000000000..c59c3a442 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/netdb.h @@ -0,0 +1,113 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Simon Goldschmidt + * + */ + +#include "lwip/opt.h" + +#if LWIP_DNS && LWIP_SOCKET + +#include /* for size_t */ + +#include "lwip/sockets.h" + +/* some rarely used options */ +#ifndef LWIP_DNS_API_DECLARE_H_ERRNO +#define LWIP_DNS_API_DECLARE_H_ERRNO 1 +#endif + +#ifndef LWIP_DNS_API_DEFINE_ERRORS +#define LWIP_DNS_API_DEFINE_ERRORS 1 +#endif + +#ifndef LWIP_DNS_API_DECLARE_STRUCTS +#define LWIP_DNS_API_DECLARE_STRUCTS 1 +#endif + +#if LWIP_DNS_API_DEFINE_ERRORS +/** Errors used by the DNS API functions, h_errno can be one of them */ +#define EAI_NONAME 200 +#define EAI_SERVICE 201 +#define EAI_FAIL 202 +#define EAI_MEMORY 203 + +#define HOST_NOT_FOUND 210 +#define NO_DATA 211 +#define NO_RECOVERY 212 +#define TRY_AGAIN 213 +#endif /* LWIP_DNS_API_DEFINE_ERRORS */ + +#if LWIP_DNS_API_DECLARE_STRUCTS +struct hostent { + char *h_name; /* Official name of the host. */ + char **h_aliases; /* A pointer to an array of pointers to alternative host names, + terminated by a null pointer. */ + int h_addrtype; /* Address type. */ + int h_length; /* The length, in bytes, of the address. */ + char **h_addr_list; /* A pointer to an array of pointers to network addresses (in + network byte order) for the host, terminated by a null pointer. */ +#define h_addr h_addr_list[0] /* for backward compatibility */ +}; + +struct addrinfo { + int ai_flags; /* Input flags. */ + int ai_family; /* Address family of socket. */ + int ai_socktype; /* Socket type. */ + int ai_protocol; /* Protocol of socket. */ + socklen_t ai_addrlen; /* Length of socket address. */ + struct sockaddr *ai_addr; /* Socket address of socket. */ + char *ai_canonname; /* Canonical name of service location. */ + struct addrinfo *ai_next; /* Pointer to next in list. */ +}; +#endif /* LWIP_DNS_API_DECLARE_STRUCTS */ + +#if LWIP_DNS_API_DECLARE_H_ERRNO +/* application accessable error code set by the DNS API functions */ +extern int h_errno; +#endif /* LWIP_DNS_API_DECLARE_H_ERRNO*/ + +struct hostent *lwip_gethostbyname(const char *name); +int lwip_gethostbyname_r(const char *name, struct hostent *ret, char *buf, + size_t buflen, struct hostent **result, int *h_errnop); +void lwip_freeaddrinfo(struct addrinfo *ai); +int lwip_getaddrinfo(const char *nodename, + const char *servname, + const struct addrinfo *hints, + struct addrinfo **res); + +#if LWIP_COMPAT_SOCKETS +#define gethostbyname(name) lwip_gethostbyname(name) +#define gethostbyname_r(name, ret, buf, buflen, result, h_errnop) \ + lwip_gethostbyname_r(name, ret, buf, buflen, result, h_errnop) +#define freeaddrinfo(addrinfo) lwip_freeaddrinfo(addrinfo) +#define getaddrinfo(nodname, servname, hints, res) \ + lwip_getaddrinfo(nodname, servname, hints, res) +#endif /* LWIP_COMPAT_SOCKETS */ + +#endif /* LWIP_DNS && LWIP_SOCKET */ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/netif.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/netif.h new file mode 100644 index 000000000..8e650d74d --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/netif.h @@ -0,0 +1,265 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_NETIF_H__ +#define __LWIP_NETIF_H__ + +#include "lwip/opt.h" + +#define ENABLE_LOOPBACK (LWIP_NETIF_LOOPBACK || LWIP_HAVE_LOOPIF) + +#include "lwip/err.h" + +#include "lwip/ip_addr.h" + +#include "lwip/inet.h" +#include "lwip/pbuf.h" +#if LWIP_DHCP +struct dhcp; +#endif +#if LWIP_AUTOIP +struct autoip; +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Throughout this file, IP addresses are expected to be in + * the same byte order as in IP_PCB. */ + +/** must be the maximum of all used hardware address lengths + across all types of interfaces in use */ +#define NETIF_MAX_HWADDR_LEN 6U + +/** TODO: define the use (where, when, whom) of netif flags */ + +/** whether the network interface is 'up'. this is + * a software flag used to control whether this network + * interface is enabled and processes traffic. + */ +#define NETIF_FLAG_UP 0x01U +/** if set, the netif has broadcast capability */ +#define NETIF_FLAG_BROADCAST 0x02U +/** if set, the netif is one end of a point-to-point connection */ +#define NETIF_FLAG_POINTTOPOINT 0x04U +/** if set, the interface is configured using DHCP */ +#define NETIF_FLAG_DHCP 0x08U +/** if set, the interface has an active link + * (set by the network interface driver) */ +#define NETIF_FLAG_LINK_UP 0x10U +/** if set, the netif is an device using ARP */ +#define NETIF_FLAG_ETHARP 0x20U +/** if set, the netif has IGMP capability */ +#define NETIF_FLAG_IGMP 0x40U + +/** Generic data structure used for all lwIP network interfaces. + * The following fields should be filled in by the initialization + * function for the device driver: hwaddr_len, hwaddr[], mtu, flags */ + +struct netif { + /** pointer to next in linked list */ + struct netif *next; + + /** IP address configuration in network byte order */ + struct ip_addr ip_addr; + struct ip_addr netmask; + struct ip_addr gw; + + /** This function is called by the network device driver + * to pass a packet up the TCP/IP stack. */ + err_t (* input)(struct pbuf *p, struct netif *inp); + /** This function is called by the IP module when it wants + * to send a packet on the interface. This function typically + * first resolves the hardware address, then sends the packet. */ + err_t (* output)(struct netif *netif, struct pbuf *p, + struct ip_addr *ipaddr); + /** This function is called by the ARP module when it wants + * to send a packet on the interface. This function outputs + * the pbuf as-is on the link medium. */ + err_t (* linkoutput)(struct netif *netif, struct pbuf *p); +#if LWIP_NETIF_STATUS_CALLBACK + /** This function is called when the netif state is set to up or down + */ + void (* status_callback)(struct netif *netif); +#endif /* LWIP_NETIF_STATUS_CALLBACK */ +#if LWIP_NETIF_LINK_CALLBACK + /** This function is called when the netif link is set to up or down + */ + void (* link_callback)(struct netif *netif); +#endif /* LWIP_NETIF_LINK_CALLBACK */ + /** This field can be set by the device driver and could point + * to state information for the device. */ + void *state; +#if LWIP_DHCP + /** the DHCP client state information for this netif */ + struct dhcp *dhcp; +#endif /* LWIP_DHCP */ +#if LWIP_AUTOIP + /** the AutoIP client state information for this netif */ + struct autoip *autoip; +#endif +#if LWIP_NETIF_HOSTNAME + /* the hostname for this netif, NULL is a valid value */ + char* hostname; +#endif /* LWIP_NETIF_HOSTNAME */ + /** maximum transfer unit (in bytes) */ + u16_t mtu; + /** number of bytes used in hwaddr */ + u8_t hwaddr_len; + /** link level hardware address of this interface */ + u8_t hwaddr[NETIF_MAX_HWADDR_LEN]; + /** flags (see NETIF_FLAG_ above) */ + u8_t flags; + /** descriptive abbreviation */ + char name[2]; + /** number of this interface */ + u8_t num; +#if LWIP_SNMP + /** link type (from "snmp_ifType" enum from snmp.h) */ + u8_t link_type; + /** (estimate) link speed */ + u32_t link_speed; + /** timestamp at last change made (up/down) */ + u32_t ts; + /** counters */ + u32_t ifinoctets; + u32_t ifinucastpkts; + u32_t ifinnucastpkts; + u32_t ifindiscards; + u32_t ifoutoctets; + u32_t ifoutucastpkts; + u32_t ifoutnucastpkts; + u32_t ifoutdiscards; +#endif /* LWIP_SNMP */ +#if LWIP_IGMP + /* This function could be called to add or delete a entry in the multicast filter table of the ethernet MAC.*/ + err_t (*igmp_mac_filter)( struct netif *netif, struct ip_addr *group, u8_t action); +#endif /* LWIP_IGMP */ +#if LWIP_NETIF_HWADDRHINT + u8_t *addr_hint; +#endif /* LWIP_NETIF_HWADDRHINT */ +#if ENABLE_LOOPBACK + /* List of packets to be queued for ourselves. */ + struct pbuf *loop_first; + struct pbuf *loop_last; +#if LWIP_LOOPBACK_MAX_PBUFS + u16_t loop_cnt_current; +#endif /* LWIP_LOOPBACK_MAX_PBUFS */ +#endif /* ENABLE_LOOPBACK */ +}; + +#if LWIP_SNMP +#define NETIF_INIT_SNMP(netif, type, speed) \ + /* use "snmp_ifType" enum from snmp.h for "type", snmp_ifType_ethernet_csmacd by example */ \ + netif->link_type = type; \ + /* your link speed here (units: bits per second) */ \ + netif->link_speed = speed; \ + netif->ts = 0; \ + netif->ifinoctets = 0; \ + netif->ifinucastpkts = 0; \ + netif->ifinnucastpkts = 0; \ + netif->ifindiscards = 0; \ + netif->ifoutoctets = 0; \ + netif->ifoutucastpkts = 0; \ + netif->ifoutnucastpkts = 0; \ + netif->ifoutdiscards = 0 +#else /* LWIP_SNMP */ +#define NETIF_INIT_SNMP(netif, type, speed) +#endif /* LWIP_SNMP */ + + +/** The list of network interfaces. */ +extern struct netif *netif_list; +/** The default network interface. */ +extern struct netif *netif_default; + +#define netif_init() /* Compatibility define, not init needed. */ + +struct netif *netif_add(struct netif *netif, struct ip_addr *ipaddr, struct ip_addr *netmask, + struct ip_addr *gw, + void *state, + err_t (* init)(struct netif *netif), + err_t (* input)(struct pbuf *p, struct netif *netif)); + +void +netif_set_addr(struct netif *netif,struct ip_addr *ipaddr, struct ip_addr *netmask, + struct ip_addr *gw); +void netif_remove(struct netif * netif); + +/* Returns a network interface given its name. The name is of the form + "et0", where the first two letters are the "name" field in the + netif structure, and the digit is in the num field in the same + structure. */ +struct netif *netif_find(char *name); + +void netif_set_default(struct netif *netif); + +void netif_set_ipaddr(struct netif *netif, struct ip_addr *ipaddr); +void netif_set_netmask(struct netif *netif, struct ip_addr *netmask); +void netif_set_gw(struct netif *netif, struct ip_addr *gw); + +void netif_set_up(struct netif *netif); +void netif_set_down(struct netif *netif); +u8_t netif_is_up(struct netif *netif); + +#if LWIP_NETIF_STATUS_CALLBACK +/* + * Set callback to be called when interface is brought up/down + */ +void netif_set_status_callback(struct netif *netif, void (* status_callback)(struct netif *netif)); +#endif /* LWIP_NETIF_STATUS_CALLBACK */ + +#if LWIP_NETIF_LINK_CALLBACK +void netif_set_link_up(struct netif *netif); +void netif_set_link_down(struct netif *netif); +u8_t netif_is_link_up(struct netif *netif); +/* + * Set callback to be called when link is brought up/down + */ +void netif_set_link_callback(struct netif *netif, void (* link_callback)(struct netif *netif)); +#endif /* LWIP_NETIF_LINK_CALLBACK */ + +#ifdef __cplusplus +} +#endif + +#if ENABLE_LOOPBACK +err_t netif_loop_output(struct netif *netif, struct pbuf *p, struct ip_addr *dest_ip); +void netif_poll(struct netif *netif); +#if !LWIP_NETIF_LOOPBACK_MULTITHREADING +void netif_poll_all(void); +#endif /* !LWIP_NETIF_LOOPBACK_MULTITHREADING */ +#endif /* ENABLE_LOOPBACK */ + +#endif /* __LWIP_NETIF_H__ */ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/netifapi.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/netifapi.h new file mode 100644 index 000000000..22d8690ea --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/netifapi.h @@ -0,0 +1,107 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + */ + +#ifndef __LWIP_NETIFAPI_H__ +#define __LWIP_NETIFAPI_H__ + +#include "lwip/opt.h" + +#if LWIP_NETIF_API /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/sys.h" +#include "lwip/netif.h" +#include "lwip/dhcp.h" +#include "lwip/autoip.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct netifapi_msg_msg { +#if !LWIP_TCPIP_CORE_LOCKING + sys_sem_t sem; +#endif /* !LWIP_TCPIP_CORE_LOCKING */ + err_t err; + struct netif *netif; + union { + struct { + struct ip_addr *ipaddr; + struct ip_addr *netmask; + struct ip_addr *gw; + void *state; + err_t (* init) (struct netif *netif); + err_t (* input)(struct pbuf *p, struct netif *netif); + } add; + struct { + void (* voidfunc)(struct netif *netif); + err_t (* errtfunc)(struct netif *netif); + } common; + } msg; +}; + +struct netifapi_msg { + void (* function)(struct netifapi_msg_msg *msg); + struct netifapi_msg_msg msg; +}; + + +/* API for application */ +err_t netifapi_netif_add ( struct netif *netif, + struct ip_addr *ipaddr, + struct ip_addr *netmask, + struct ip_addr *gw, + void *state, + err_t (* init)(struct netif *netif), + err_t (* input)(struct pbuf *p, struct netif *netif) ); + +err_t netifapi_netif_set_addr ( struct netif *netif, + struct ip_addr *ipaddr, + struct ip_addr *netmask, + struct ip_addr *gw ); + +err_t netifapi_netif_common ( struct netif *netif, + void (* voidfunc)(struct netif *netif), + err_t (* errtfunc)(struct netif *netif) ); + +#define netifapi_netif_remove(n) netifapi_netif_common(n, netif_remove, NULL) +#define netifapi_netif_set_up(n) netifapi_netif_common(n, netif_set_up, NULL) +#define netifapi_netif_set_down(n) netifapi_netif_common(n, netif_set_down, NULL) +#define netifapi_netif_set_default(n) netifapi_netif_common(n, netif_set_default, NULL) +#define netifapi_dhcp_start(n) netifapi_netif_common(n, NULL, dhcp_start) +#define netifapi_dhcp_stop(n) netifapi_netif_common(n, dhcp_stop, NULL) +#define netifapi_autoip_start(n) netifapi_netif_common(n, NULL, autoip_start) +#define netifapi_autoip_stop(n) netifapi_netif_common(n, NULL, autoip_stop) + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_NETIF_API */ + +#endif /* __LWIP_NETIFAPI_H__ */ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/opt.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/opt.h new file mode 100644 index 000000000..a7cdbd8e7 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/opt.h @@ -0,0 +1,1842 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * + * lwIP Options Configuration + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_OPT_H__ +#define __LWIP_OPT_H__ + +/* + * Include user defined options first. Anything not defined in these files + * will be set to standard values. Override anything you dont like! + */ +#include "lwipopts.h" +#include "lwip/debug.h" + +/* + ----------------------------------------------- + ---------- Platform specific locking ---------- + ----------------------------------------------- +*/ + +/** + * SYS_LIGHTWEIGHT_PROT==1: if you want inter-task protection for certain + * critical regions during buffer allocation, deallocation and memory + * allocation and deallocation. + */ +#ifndef SYS_LIGHTWEIGHT_PROT +#define SYS_LIGHTWEIGHT_PROT 0 +#endif + +/** + * NO_SYS==1: Provides VERY minimal functionality. Otherwise, + * use lwIP facilities. + */ +#ifndef NO_SYS +#define NO_SYS 0 +#endif + +/** + * MEMCPY: override this if you have a faster implementation at hand than the + * one included in your C library + */ +#ifndef MEMCPY +#define MEMCPY(dst,src,len) memcpy(dst,src,len) +#endif + +/** + * SMEMCPY: override this with care! Some compilers (e.g. gcc) can inline a + * call to memcpy() if the length is known at compile time and is small. + */ +#ifndef SMEMCPY +#define SMEMCPY(dst,src,len) memcpy(dst,src,len) +#endif + +/* + ------------------------------------ + ---------- Memory options ---------- + ------------------------------------ +*/ +/** + * MEM_LIBC_MALLOC==1: Use malloc/free/realloc provided by your C-library + * instead of the lwip internal allocator. Can save code size if you + * already use it. + */ +#ifndef MEM_LIBC_MALLOC +#define MEM_LIBC_MALLOC 0 +#endif + +/** +* MEMP_MEM_MALLOC==1: Use mem_malloc/mem_free instead of the lwip pool allocator. +* Especially useful with MEM_LIBC_MALLOC but handle with care regarding execution +* speed and usage from interrupts! +*/ +#ifndef MEMP_MEM_MALLOC +#define MEMP_MEM_MALLOC 0 +#endif + +/** + * MEM_ALIGNMENT: should be set to the alignment of the CPU + * 4 byte alignment -> #define MEM_ALIGNMENT 4 + * 2 byte alignment -> #define MEM_ALIGNMENT 2 + */ +#ifndef MEM_ALIGNMENT +#define MEM_ALIGNMENT 1 +#endif + +/** + * MEM_SIZE: the size of the heap memory. If the application will send + * a lot of data that needs to be copied, this should be set high. + */ +#ifndef MEM_SIZE +#define MEM_SIZE 1600 +#endif + +/** + * MEMP_OVERFLOW_CHECK: memp overflow protection reserves a configurable + * amount of bytes before and after each memp element in every pool and fills + * it with a prominent default value. + * MEMP_OVERFLOW_CHECK == 0 no checking + * MEMP_OVERFLOW_CHECK == 1 checks each element when it is freed + * MEMP_OVERFLOW_CHECK >= 2 checks each element in every pool every time + * memp_malloc() or memp_free() is called (useful but slow!) + */ +#ifndef MEMP_OVERFLOW_CHECK +#define MEMP_OVERFLOW_CHECK 0 +#endif + +/** + * MEMP_SANITY_CHECK==1: run a sanity check after each memp_free() to make + * sure that there are no cycles in the linked lists. + */ +#ifndef MEMP_SANITY_CHECK +#define MEMP_SANITY_CHECK 0 +#endif + +/** + * MEM_USE_POOLS==1: Use an alternative to malloc() by allocating from a set + * of memory pools of various sizes. When mem_malloc is called, an element of + * the smallest pool that can provide the length needed is returned. + * To use this, MEMP_USE_CUSTOM_POOLS also has to be enabled. + */ +#ifndef MEM_USE_POOLS +#define MEM_USE_POOLS 0 +#endif + +/** + * MEM_USE_POOLS_TRY_BIGGER_POOL==1: if one malloc-pool is empty, try the next + * bigger pool - WARNING: THIS MIGHT WASTE MEMORY but it can make a system more + * reliable. */ +#ifndef MEM_USE_POOLS_TRY_BIGGER_POOL +#define MEM_USE_POOLS_TRY_BIGGER_POOL 0 +#endif + +/** + * MEMP_USE_CUSTOM_POOLS==1: whether to include a user file lwippools.h + * that defines additional pools beyond the "standard" ones required + * by lwIP. If you set this to 1, you must have lwippools.h in your + * inlude path somewhere. + */ +#ifndef MEMP_USE_CUSTOM_POOLS +#define MEMP_USE_CUSTOM_POOLS 0 +#endif + +/** + * Set this to 1 if you want to free PBUF_RAM pbufs (or call mem_free()) from + * interrupt context (or another context that doesn't allow waiting for a + * semaphore). + * If set to 1, mem_malloc will be protected by a semaphore and SYS_ARCH_PROTECT, + * while mem_free will only use SYS_ARCH_PROTECT. mem_malloc SYS_ARCH_UNPROTECTs + * with each loop so that mem_free can run. + * + * ATTENTION: As you can see from the above description, this leads to dis-/ + * enabling interrupts often, which can be slow! Also, on low memory, mem_malloc + * can need longer. + * + * If you don't want that, at least for NO_SYS=0, you can still use the following + * functions to enqueue a deallocation call which then runs in the tcpip_thread + * context: + * - pbuf_free_callback(p); + * - mem_free_callback(m); + */ +#ifndef LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT +#define LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT 0 +#endif + +/* + ------------------------------------------------ + ---------- Internal Memory Pool Sizes ---------- + ------------------------------------------------ +*/ +/** + * MEMP_NUM_PBUF: the number of memp struct pbufs (used for PBUF_ROM and PBUF_REF). + * If the application sends a lot of data out of ROM (or other static memory), + * this should be set high. + */ +#ifndef MEMP_NUM_PBUF +#define MEMP_NUM_PBUF 16 +#endif + +/** + * MEMP_NUM_RAW_PCB: Number of raw connection PCBs + * (requires the LWIP_RAW option) + */ +#ifndef MEMP_NUM_RAW_PCB +#define MEMP_NUM_RAW_PCB 4 +#endif + +/** + * MEMP_NUM_UDP_PCB: the number of UDP protocol control blocks. One + * per active UDP "connection". + * (requires the LWIP_UDP option) + */ +#ifndef MEMP_NUM_UDP_PCB +#define MEMP_NUM_UDP_PCB 4 +#endif + +/** + * MEMP_NUM_TCP_PCB: the number of simulatenously active TCP connections. + * (requires the LWIP_TCP option) + */ +#ifndef MEMP_NUM_TCP_PCB +#define MEMP_NUM_TCP_PCB 5 +#endif + +/** + * MEMP_NUM_TCP_PCB_LISTEN: the number of listening TCP connections. + * (requires the LWIP_TCP option) + */ +#ifndef MEMP_NUM_TCP_PCB_LISTEN +#define MEMP_NUM_TCP_PCB_LISTEN 8 +#endif + +/** + * MEMP_NUM_TCP_SEG: the number of simultaneously queued TCP segments. + * (requires the LWIP_TCP option) + */ +#ifndef MEMP_NUM_TCP_SEG +#define MEMP_NUM_TCP_SEG 16 +#endif + +/** + * MEMP_NUM_REASSDATA: the number of simultaneously IP packets queued for + * reassembly (whole packets, not fragments!) + */ +#ifndef MEMP_NUM_REASSDATA +#define MEMP_NUM_REASSDATA 5 +#endif + +/** + * MEMP_NUM_ARP_QUEUE: the number of simulateously queued outgoing + * packets (pbufs) that are waiting for an ARP request (to resolve + * their destination address) to finish. + * (requires the ARP_QUEUEING option) + */ +#ifndef MEMP_NUM_ARP_QUEUE +#define MEMP_NUM_ARP_QUEUE 30 +#endif + +/** + * MEMP_NUM_IGMP_GROUP: The number of multicast groups whose network interfaces + * can be members et the same time (one per netif - allsystems group -, plus one + * per netif membership). + * (requires the LWIP_IGMP option) + */ +#ifndef MEMP_NUM_IGMP_GROUP +#define MEMP_NUM_IGMP_GROUP 8 +#endif + +/** + * MEMP_NUM_SYS_TIMEOUT: the number of simulateously active timeouts. + * (requires NO_SYS==0) + */ +#ifndef MEMP_NUM_SYS_TIMEOUT +#define MEMP_NUM_SYS_TIMEOUT 3 +#endif + +/** + * MEMP_NUM_NETBUF: the number of struct netbufs. + * (only needed if you use the sequential API, like api_lib.c) + */ +#ifndef MEMP_NUM_NETBUF +#define MEMP_NUM_NETBUF 2 +#endif + +/** + * MEMP_NUM_NETCONN: the number of struct netconns. + * (only needed if you use the sequential API, like api_lib.c) + */ +#ifndef MEMP_NUM_NETCONN +#define MEMP_NUM_NETCONN 4 +#endif + +/** + * MEMP_NUM_TCPIP_MSG_API: the number of struct tcpip_msg, which are used + * for callback/timeout API communication. + * (only needed if you use tcpip.c) + */ +#ifndef MEMP_NUM_TCPIP_MSG_API +#define MEMP_NUM_TCPIP_MSG_API 8 +#endif + +/** + * MEMP_NUM_TCPIP_MSG_INPKT: the number of struct tcpip_msg, which are used + * for incoming packets. + * (only needed if you use tcpip.c) + */ +#ifndef MEMP_NUM_TCPIP_MSG_INPKT +#define MEMP_NUM_TCPIP_MSG_INPKT 8 +#endif + +/** + * PBUF_POOL_SIZE: the number of buffers in the pbuf pool. + */ +#ifndef PBUF_POOL_SIZE +#define PBUF_POOL_SIZE 16 +#endif + +/* + --------------------------------- + ---------- ARP options ---------- + --------------------------------- +*/ +/** + * LWIP_ARP==1: Enable ARP functionality. + */ +#ifndef LWIP_ARP +#define LWIP_ARP 1 +#endif + +/** + * ARP_TABLE_SIZE: Number of active MAC-IP address pairs cached. + */ +#ifndef ARP_TABLE_SIZE +#define ARP_TABLE_SIZE 10 +#endif + +/** + * ARP_QUEUEING==1: Outgoing packets are queued during hardware address + * resolution. + */ +#ifndef ARP_QUEUEING +#define ARP_QUEUEING 1 +#endif + +/** + * ETHARP_TRUST_IP_MAC==1: Incoming IP packets cause the ARP table to be + * updated with the source MAC and IP addresses supplied in the packet. + * You may want to disable this if you do not trust LAN peers to have the + * correct addresses, or as a limited approach to attempt to handle + * spoofing. If disabled, lwIP will need to make a new ARP request if + * the peer is not already in the ARP table, adding a little latency. + */ +#ifndef ETHARP_TRUST_IP_MAC +#define ETHARP_TRUST_IP_MAC 1 +#endif + +/** + * ETHARP_SUPPORT_VLAN==1: support receiving ethernet packets with VLAN header. + * Additionally, you can define ETHARP_VLAN_CHECK to an u16_t VLAN ID to check. + * If ETHARP_VLAN_CHECK is defined, only VLAN-traffic for this VLAN is accepted. + * If ETHARP_VLAN_CHECK is not defined, all traffic is accepted. + */ +#ifndef ETHARP_SUPPORT_VLAN +#define ETHARP_SUPPORT_VLAN 0 +#endif + +/* + -------------------------------- + ---------- IP options ---------- + -------------------------------- +*/ +/** + * IP_FORWARD==1: Enables the ability to forward IP packets across network + * interfaces. If you are going to run lwIP on a device with only one network + * interface, define this to 0. + */ +#ifndef IP_FORWARD +#define IP_FORWARD 0 +#endif + +/** + * IP_OPTIONS_ALLOWED: Defines the behavior for IP options. + * IP_OPTIONS_ALLOWED==0: All packets with IP options are dropped. + * IP_OPTIONS_ALLOWED==1: IP options are allowed (but not parsed). + */ +#ifndef IP_OPTIONS_ALLOWED +#define IP_OPTIONS_ALLOWED 1 +#endif + +/** + * IP_REASSEMBLY==1: Reassemble incoming fragmented IP packets. Note that + * this option does not affect outgoing packet sizes, which can be controlled + * via IP_FRAG. + */ +#ifndef IP_REASSEMBLY +#define IP_REASSEMBLY 1 +#endif + +/** + * IP_FRAG==1: Fragment outgoing IP packets if their size exceeds MTU. Note + * that this option does not affect incoming packet sizes, which can be + * controlled via IP_REASSEMBLY. + */ +#ifndef IP_FRAG +#define IP_FRAG 1 +#endif + +/** + * IP_REASS_MAXAGE: Maximum time (in multiples of IP_TMR_INTERVAL - so seconds, normally) + * a fragmented IP packet waits for all fragments to arrive. If not all fragments arrived + * in this time, the whole packet is discarded. + */ +#ifndef IP_REASS_MAXAGE +#define IP_REASS_MAXAGE 3 +#endif + +/** + * IP_REASS_MAX_PBUFS: Total maximum amount of pbufs waiting to be reassembled. + * Since the received pbufs are enqueued, be sure to configure + * PBUF_POOL_SIZE > IP_REASS_MAX_PBUFS so that the stack is still able to receive + * packets even if the maximum amount of fragments is enqueued for reassembly! + */ +#ifndef IP_REASS_MAX_PBUFS +#define IP_REASS_MAX_PBUFS 10 +#endif + +/** + * IP_FRAG_USES_STATIC_BUF==1: Use a static MTU-sized buffer for IP + * fragmentation. Otherwise pbufs are allocated and reference the original + * packet data to be fragmented. + */ +#ifndef IP_FRAG_USES_STATIC_BUF +#define IP_FRAG_USES_STATIC_BUF 1 +#endif + +/** + * IP_FRAG_MAX_MTU: Assumed max MTU on any interface for IP frag buffer + * (requires IP_FRAG_USES_STATIC_BUF==1) + */ +#if IP_FRAG_USES_STATIC_BUF && !defined(IP_FRAG_MAX_MTU) +#define IP_FRAG_MAX_MTU 1500 +#endif + +/** + * IP_DEFAULT_TTL: Default value for Time-To-Live used by transport layers. + */ +#ifndef IP_DEFAULT_TTL +#define IP_DEFAULT_TTL 255 +#endif + +/** + * IP_SOF_BROADCAST=1: Use the SOF_BROADCAST field to enable broadcast + * filter per pcb on udp and raw send operations. To enable broadcast filter + * on recv operations, you also have to set IP_SOF_BROADCAST_RECV=1. + */ +#ifndef IP_SOF_BROADCAST +#define IP_SOF_BROADCAST 0 +#endif + +/** + * IP_SOF_BROADCAST_RECV (requires IP_SOF_BROADCAST=1) enable the broadcast + * filter on recv operations. + */ +#ifndef IP_SOF_BROADCAST_RECV +#define IP_SOF_BROADCAST_RECV 0 +#endif + +/* + ---------------------------------- + ---------- ICMP options ---------- + ---------------------------------- +*/ +/** + * LWIP_ICMP==1: Enable ICMP module inside the IP stack. + * Be careful, disable that make your product non-compliant to RFC1122 + */ +#ifndef LWIP_ICMP +#define LWIP_ICMP 1 +#endif + +/** + * ICMP_TTL: Default value for Time-To-Live used by ICMP packets. + */ +#ifndef ICMP_TTL +#define ICMP_TTL (IP_DEFAULT_TTL) +#endif + +/** + * LWIP_BROADCAST_PING==1: respond to broadcast pings (default is unicast only) + */ +#ifndef LWIP_BROADCAST_PING +#define LWIP_BROADCAST_PING 0 +#endif + +/** + * LWIP_MULTICAST_PING==1: respond to multicast pings (default is unicast only) + */ +#ifndef LWIP_MULTICAST_PING +#define LWIP_MULTICAST_PING 0 +#endif + +/* + --------------------------------- + ---------- RAW options ---------- + --------------------------------- +*/ +/** + * LWIP_RAW==1: Enable application layer to hook into the IP layer itself. + */ +#ifndef LWIP_RAW +#define LWIP_RAW 1 +#endif + +/** + * LWIP_RAW==1: Enable application layer to hook into the IP layer itself. + */ +#ifndef RAW_TTL +#define RAW_TTL (IP_DEFAULT_TTL) +#endif + +/* + ---------------------------------- + ---------- DHCP options ---------- + ---------------------------------- +*/ +/** + * LWIP_DHCP==1: Enable DHCP module. + */ +#ifndef LWIP_DHCP +#define LWIP_DHCP 0 +#endif + +/** + * DHCP_DOES_ARP_CHECK==1: Do an ARP check on the offered address. + */ +#ifndef DHCP_DOES_ARP_CHECK +#define DHCP_DOES_ARP_CHECK ((LWIP_DHCP) && (LWIP_ARP)) +#endif + +/* + ------------------------------------ + ---------- AUTOIP options ---------- + ------------------------------------ +*/ +/** + * LWIP_AUTOIP==1: Enable AUTOIP module. + */ +#ifndef LWIP_AUTOIP +#define LWIP_AUTOIP 0 +#endif + +/** + * LWIP_DHCP_AUTOIP_COOP==1: Allow DHCP and AUTOIP to be both enabled on + * the same interface at the same time. + */ +#ifndef LWIP_DHCP_AUTOIP_COOP +#define LWIP_DHCP_AUTOIP_COOP 0 +#endif + +/** + * LWIP_DHCP_AUTOIP_COOP_TRIES: Set to the number of DHCP DISCOVER probes + * that should be sent before falling back on AUTOIP. This can be set + * as low as 1 to get an AutoIP address very quickly, but you should + * be prepared to handle a changing IP address when DHCP overrides + * AutoIP. + */ +#ifndef LWIP_DHCP_AUTOIP_COOP_TRIES +#define LWIP_DHCP_AUTOIP_COOP_TRIES 9 +#endif + +/* + ---------------------------------- + ---------- SNMP options ---------- + ---------------------------------- +*/ +/** + * LWIP_SNMP==1: Turn on SNMP module. UDP must be available for SNMP + * transport. + */ +#ifndef LWIP_SNMP +#define LWIP_SNMP 0 +#endif + +/** + * SNMP_CONCURRENT_REQUESTS: Number of concurrent requests the module will + * allow. At least one request buffer is required. + */ +#ifndef SNMP_CONCURRENT_REQUESTS +#define SNMP_CONCURRENT_REQUESTS 1 +#endif + +/** + * SNMP_TRAP_DESTINATIONS: Number of trap destinations. At least one trap + * destination is required + */ +#ifndef SNMP_TRAP_DESTINATIONS +#define SNMP_TRAP_DESTINATIONS 1 +#endif + +/** + * SNMP_PRIVATE_MIB: + */ +#ifndef SNMP_PRIVATE_MIB +#define SNMP_PRIVATE_MIB 0 +#endif + +/** + * Only allow SNMP write actions that are 'safe' (e.g. disabeling netifs is not + * a safe action and disabled when SNMP_SAFE_REQUESTS = 1). + * Unsafe requests are disabled by default! + */ +#ifndef SNMP_SAFE_REQUESTS +#define SNMP_SAFE_REQUESTS 1 +#endif + +/* + ---------------------------------- + ---------- IGMP options ---------- + ---------------------------------- +*/ +/** + * LWIP_IGMP==1: Turn on IGMP module. + */ +#ifndef LWIP_IGMP +#define LWIP_IGMP 0 +#endif + +/* + ---------------------------------- + ---------- DNS options ----------- + ---------------------------------- +*/ +/** + * LWIP_DNS==1: Turn on DNS module. UDP must be available for DNS + * transport. + */ +#ifndef LWIP_DNS +#define LWIP_DNS 0 +#endif + +/** DNS maximum number of entries to maintain locally. */ +#ifndef DNS_TABLE_SIZE +#define DNS_TABLE_SIZE 4 +#endif + +/** DNS maximum host name length supported in the name table. */ +#ifndef DNS_MAX_NAME_LENGTH +#define DNS_MAX_NAME_LENGTH 256 +#endif + +/** The maximum of DNS servers */ +#ifndef DNS_MAX_SERVERS +#define DNS_MAX_SERVERS 2 +#endif + +/** DNS do a name checking between the query and the response. */ +#ifndef DNS_DOES_NAME_CHECK +#define DNS_DOES_NAME_CHECK 1 +#endif + +/** DNS use a local buffer if DNS_USES_STATIC_BUF=0, a static one if + DNS_USES_STATIC_BUF=1, or a dynamic one if DNS_USES_STATIC_BUF=2. + The buffer will be of size DNS_MSG_SIZE */ +#ifndef DNS_USES_STATIC_BUF +#define DNS_USES_STATIC_BUF 1 +#endif + +/** DNS message max. size. Default value is RFC compliant. */ +#ifndef DNS_MSG_SIZE +#define DNS_MSG_SIZE 512 +#endif + +/** DNS_LOCAL_HOSTLIST: Implements a local host-to-address list. If enabled, + * you have to define + * #define DNS_LOCAL_HOSTLIST_INIT {{"host1", 0x123}, {"host2", 0x234}} + * (an array of structs name/address, where address is an u32_t in network + * byte order). + * + * Instead, you can also use an external function: + * #define DNS_LOOKUP_LOCAL_EXTERN(x) extern u32_t my_lookup_function(const char *name) + * that returns the IP address or INADDR_NONE if not found. + */ +#ifndef DNS_LOCAL_HOSTLIST +#define DNS_LOCAL_HOSTLIST 0 +#endif /* DNS_LOCAL_HOSTLIST */ + +/** If this is turned on, the local host-list can be dynamically changed + * at runtime. */ +#ifndef DNS_LOCAL_HOSTLIST_IS_DYNAMIC +#define DNS_LOCAL_HOSTLIST_IS_DYNAMIC 0 +#endif /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC */ + +/* + --------------------------------- + ---------- UDP options ---------- + --------------------------------- +*/ +/** + * LWIP_UDP==1: Turn on UDP. + */ +#ifndef LWIP_UDP +#define LWIP_UDP 1 +#endif + +/** + * LWIP_UDPLITE==1: Turn on UDP-Lite. (Requires LWIP_UDP) + */ +#ifndef LWIP_UDPLITE +#define LWIP_UDPLITE 0 +#endif + +/** + * UDP_TTL: Default Time-To-Live value. + */ +#ifndef UDP_TTL +#define UDP_TTL (IP_DEFAULT_TTL) +#endif + +/** + * LWIP_NETBUF_RECVINFO==1: append destination addr and port to every netbuf. + */ +#ifndef LWIP_NETBUF_RECVINFO +#define LWIP_NETBUF_RECVINFO 0 +#endif + +/* + --------------------------------- + ---------- TCP options ---------- + --------------------------------- +*/ +/** + * LWIP_TCP==1: Turn on TCP. + */ +#ifndef LWIP_TCP +#define LWIP_TCP 1 +#endif + +/** + * TCP_TTL: Default Time-To-Live value. + */ +#ifndef TCP_TTL +#define TCP_TTL (IP_DEFAULT_TTL) +#endif + +/** + * TCP_WND: The size of a TCP window. This must be at least + * (2 * TCP_MSS) for things to work well + */ +#ifndef TCP_WND +#define TCP_WND (4 * TCP_MSS) +#endif + +/** + * TCP_MAXRTX: Maximum number of retransmissions of data segments. + */ +#ifndef TCP_MAXRTX +#define TCP_MAXRTX 12 +#endif + +/** + * TCP_SYNMAXRTX: Maximum number of retransmissions of SYN segments. + */ +#ifndef TCP_SYNMAXRTX +#define TCP_SYNMAXRTX 6 +#endif + +/** + * TCP_QUEUE_OOSEQ==1: TCP will queue segments that arrive out of order. + * Define to 0 if your device is low on memory. + */ +#ifndef TCP_QUEUE_OOSEQ +#define TCP_QUEUE_OOSEQ (LWIP_TCP) +#endif + +/** + * TCP_MSS: TCP Maximum segment size. (default is 536, a conservative default, + * you might want to increase this.) + * For the receive side, this MSS is advertised to the remote side + * when opening a connection. For the transmit size, this MSS sets + * an upper limit on the MSS advertised by the remote host. + */ +#ifndef TCP_MSS +#define TCP_MSS 536 +#endif + +/** + * TCP_CALCULATE_EFF_SEND_MSS: "The maximum size of a segment that TCP really + * sends, the 'effective send MSS,' MUST be the smaller of the send MSS (which + * reflects the available reassembly buffer size at the remote host) and the + * largest size permitted by the IP layer" (RFC 1122) + * Setting this to 1 enables code that checks TCP_MSS against the MTU of the + * netif used for a connection and limits the MSS if it would be too big otherwise. + */ +#ifndef TCP_CALCULATE_EFF_SEND_MSS +#define TCP_CALCULATE_EFF_SEND_MSS 1 +#endif + + +/** + * TCP_SND_BUF: TCP sender buffer space (bytes). + */ +#ifndef TCP_SND_BUF +#define TCP_SND_BUF 256 +#endif + +/** + * TCP_SND_QUEUELEN: TCP sender buffer space (pbufs). This must be at least + * as much as (2 * TCP_SND_BUF/TCP_MSS) for things to work. + */ +#ifndef TCP_SND_QUEUELEN +#define TCP_SND_QUEUELEN (4 * (TCP_SND_BUF)/(TCP_MSS)) +#endif + +/** + * TCP_SNDLOWAT: TCP writable space (bytes). This must be less than or equal + * to TCP_SND_BUF. It is the amount of space which must be available in the + * TCP snd_buf for select to return writable. + */ +#ifndef TCP_SNDLOWAT +#define TCP_SNDLOWAT ((TCP_SND_BUF)/2) +#endif + +/** + * TCP_LISTEN_BACKLOG: Enable the backlog option for tcp listen pcb. + */ +#ifndef TCP_LISTEN_BACKLOG +#define TCP_LISTEN_BACKLOG 0 +#endif + +/** + * The maximum allowed backlog for TCP listen netconns. + * This backlog is used unless another is explicitly specified. + * 0xff is the maximum (u8_t). + */ +#ifndef TCP_DEFAULT_LISTEN_BACKLOG +#define TCP_DEFAULT_LISTEN_BACKLOG 0xff +#endif + +/** + * LWIP_TCP_TIMESTAMPS==1: support the TCP timestamp option. + */ +#ifndef LWIP_TCP_TIMESTAMPS +#define LWIP_TCP_TIMESTAMPS 0 +#endif + +/** + * TCP_WND_UPDATE_THRESHOLD: difference in window to trigger an + * explicit window update + */ +#ifndef TCP_WND_UPDATE_THRESHOLD +#define TCP_WND_UPDATE_THRESHOLD (TCP_WND / 4) +#endif + +/** + * LWIP_EVENT_API and LWIP_CALLBACK_API: Only one of these should be set to 1. + * LWIP_EVENT_API==1: The user defines lwip_tcp_event() to receive all + * events (accept, sent, etc) that happen in the system. + * LWIP_CALLBACK_API==1: The PCB callback function is called directly + * for the event. + */ +#ifndef LWIP_EVENT_API +#define LWIP_EVENT_API 0 +#define LWIP_CALLBACK_API 1 +#else +#define LWIP_EVENT_API 1 +#define LWIP_CALLBACK_API 0 +#endif + + +/* + ---------------------------------- + ---------- Pbuf options ---------- + ---------------------------------- +*/ +/** + * PBUF_LINK_HLEN: the number of bytes that should be allocated for a + * link level header. The default is 14, the standard value for + * Ethernet. + */ +#ifndef PBUF_LINK_HLEN +#define PBUF_LINK_HLEN 14 +#endif + +/** + * PBUF_POOL_BUFSIZE: the size of each pbuf in the pbuf pool. The default is + * designed to accomodate single full size TCP frame in one pbuf, including + * TCP_MSS, IP header, and link header. + */ +#ifndef PBUF_POOL_BUFSIZE +#define PBUF_POOL_BUFSIZE LWIP_MEM_ALIGN_SIZE(TCP_MSS+40+PBUF_LINK_HLEN) +#endif + +/* + ------------------------------------------------ + ---------- Network Interfaces options ---------- + ------------------------------------------------ +*/ +/** + * LWIP_NETIF_HOSTNAME==1: use DHCP_OPTION_HOSTNAME with netif's hostname + * field. + */ +#ifndef LWIP_NETIF_HOSTNAME +#define LWIP_NETIF_HOSTNAME 0 +#endif + +/** + * LWIP_NETIF_API==1: Support netif api (in netifapi.c) + */ +#ifndef LWIP_NETIF_API +#define LWIP_NETIF_API 0 +#endif + +/** + * LWIP_NETIF_STATUS_CALLBACK==1: Support a callback function whenever an interface + * changes its up/down status (i.e., due to DHCP IP acquistion) + */ +#ifndef LWIP_NETIF_STATUS_CALLBACK +#define LWIP_NETIF_STATUS_CALLBACK 0 +#endif + +/** + * LWIP_NETIF_LINK_CALLBACK==1: Support a callback function from an interface + * whenever the link changes (i.e., link down) + */ +#ifndef LWIP_NETIF_LINK_CALLBACK +#define LWIP_NETIF_LINK_CALLBACK 0 +#endif + +/** + * LWIP_NETIF_HWADDRHINT==1: Cache link-layer-address hints (e.g. table + * indices) in struct netif. TCP and UDP can make use of this to prevent + * scanning the ARP table for every sent packet. While this is faster for big + * ARP tables or many concurrent connections, it might be counterproductive + * if you have a tiny ARP table or if there never are concurrent connections. + */ +#ifndef LWIP_NETIF_HWADDRHINT +#define LWIP_NETIF_HWADDRHINT 0 +#endif + +/** + * LWIP_NETIF_LOOPBACK==1: Support sending packets with a destination IP + * address equal to the netif IP address, looping them back up the stack. + */ +#ifndef LWIP_NETIF_LOOPBACK +#define LWIP_NETIF_LOOPBACK 0 +#endif + +/** + * LWIP_LOOPBACK_MAX_PBUFS: Maximum number of pbufs on queue for loopback + * sending for each netif (0 = disabled) + */ +#ifndef LWIP_LOOPBACK_MAX_PBUFS +#define LWIP_LOOPBACK_MAX_PBUFS 0 +#endif + +/** + * LWIP_NETIF_LOOPBACK_MULTITHREADING: Indicates whether threading is enabled in + * the system, as netifs must change how they behave depending on this setting + * for the LWIP_NETIF_LOOPBACK option to work. + * Setting this is needed to avoid reentering non-reentrant functions like + * tcp_input(). + * LWIP_NETIF_LOOPBACK_MULTITHREADING==1: Indicates that the user is using a + * multithreaded environment like tcpip.c. In this case, netif->input() + * is called directly. + * LWIP_NETIF_LOOPBACK_MULTITHREADING==0: Indicates a polling (or NO_SYS) setup. + * The packets are put on a list and netif_poll() must be called in + * the main application loop. + */ +#ifndef LWIP_NETIF_LOOPBACK_MULTITHREADING +#define LWIP_NETIF_LOOPBACK_MULTITHREADING (!NO_SYS) +#endif + +/** + * LWIP_NETIF_TX_SINGLE_PBUF: if this is set to 1, lwIP tries to put all data + * to be sent into one single pbuf. This is for compatibility with DMA-enabled + * MACs that do not support scatter-gather. + * Beware that this might involve CPU-memcpy before transmitting that would not + * be needed without this flag! Use this only if you need to! + * + * @todo: TCP and IP-frag do not work with this, yet: + */ +#ifndef LWIP_NETIF_TX_SINGLE_PBUF +#define LWIP_NETIF_TX_SINGLE_PBUF 0 +#endif /* LWIP_NETIF_TX_SINGLE_PBUF */ + +/* + ------------------------------------ + ---------- LOOPIF options ---------- + ------------------------------------ +*/ +/** + * LWIP_HAVE_LOOPIF==1: Support loop interface (127.0.0.1) and loopif.c + */ +#ifndef LWIP_HAVE_LOOPIF +#define LWIP_HAVE_LOOPIF 0 +#endif + +/* + ------------------------------------ + ---------- SLIPIF options ---------- + ------------------------------------ +*/ +/** + * LWIP_HAVE_SLIPIF==1: Support slip interface and slipif.c + */ +#ifndef LWIP_HAVE_SLIPIF +#define LWIP_HAVE_SLIPIF 0 +#endif + +/* + ------------------------------------ + ---------- Thread options ---------- + ------------------------------------ +*/ +/** + * TCPIP_THREAD_NAME: The name assigned to the main tcpip thread. + */ +#ifndef TCPIP_THREAD_NAME +#define TCPIP_THREAD_NAME "tcpip_thread" +#endif + +/** + * TCPIP_THREAD_STACKSIZE: The stack size used by the main tcpip thread. + * The stack size value itself is platform-dependent, but is passed to + * sys_thread_new() when the thread is created. + */ +#ifndef TCPIP_THREAD_STACKSIZE +#define TCPIP_THREAD_STACKSIZE 0 +#endif + +/** + * TCPIP_THREAD_PRIO: The priority assigned to the main tcpip thread. + * The priority value itself is platform-dependent, but is passed to + * sys_thread_new() when the thread is created. + */ +#ifndef TCPIP_THREAD_PRIO +#define TCPIP_THREAD_PRIO 1 +#endif + +/** + * TCPIP_MBOX_SIZE: The mailbox size for the tcpip thread messages + * The queue size value itself is platform-dependent, but is passed to + * sys_mbox_new() when tcpip_init is called. + */ +#ifndef TCPIP_MBOX_SIZE +#define TCPIP_MBOX_SIZE 0 +#endif + +/** + * SLIPIF_THREAD_NAME: The name assigned to the slipif_loop thread. + */ +#ifndef SLIPIF_THREAD_NAME +#define SLIPIF_THREAD_NAME "slipif_loop" +#endif + +/** + * SLIP_THREAD_STACKSIZE: The stack size used by the slipif_loop thread. + * The stack size value itself is platform-dependent, but is passed to + * sys_thread_new() when the thread is created. + */ +#ifndef SLIPIF_THREAD_STACKSIZE +#define SLIPIF_THREAD_STACKSIZE 0 +#endif + +/** + * SLIPIF_THREAD_PRIO: The priority assigned to the slipif_loop thread. + * The priority value itself is platform-dependent, but is passed to + * sys_thread_new() when the thread is created. + */ +#ifndef SLIPIF_THREAD_PRIO +#define SLIPIF_THREAD_PRIO 1 +#endif + +/** + * PPP_THREAD_NAME: The name assigned to the pppMain thread. + */ +#ifndef PPP_THREAD_NAME +#define PPP_THREAD_NAME "pppMain" +#endif + +/** + * PPP_THREAD_STACKSIZE: The stack size used by the pppMain thread. + * The stack size value itself is platform-dependent, but is passed to + * sys_thread_new() when the thread is created. + */ +#ifndef PPP_THREAD_STACKSIZE +#define PPP_THREAD_STACKSIZE 0 +#endif + +/** + * PPP_THREAD_PRIO: The priority assigned to the pppMain thread. + * The priority value itself is platform-dependent, but is passed to + * sys_thread_new() when the thread is created. + */ +#ifndef PPP_THREAD_PRIO +#define PPP_THREAD_PRIO 1 +#endif + +/** + * DEFAULT_THREAD_NAME: The name assigned to any other lwIP thread. + */ +#ifndef DEFAULT_THREAD_NAME +#define DEFAULT_THREAD_NAME "lwIP" +#endif + +/** + * DEFAULT_THREAD_STACKSIZE: The stack size used by any other lwIP thread. + * The stack size value itself is platform-dependent, but is passed to + * sys_thread_new() when the thread is created. + */ +#ifndef DEFAULT_THREAD_STACKSIZE +#define DEFAULT_THREAD_STACKSIZE 0 +#endif + +/** + * DEFAULT_THREAD_PRIO: The priority assigned to any other lwIP thread. + * The priority value itself is platform-dependent, but is passed to + * sys_thread_new() when the thread is created. + */ +#ifndef DEFAULT_THREAD_PRIO +#define DEFAULT_THREAD_PRIO 1 +#endif + +/** + * DEFAULT_RAW_RECVMBOX_SIZE: The mailbox size for the incoming packets on a + * NETCONN_RAW. The queue size value itself is platform-dependent, but is passed + * to sys_mbox_new() when the recvmbox is created. + */ +#ifndef DEFAULT_RAW_RECVMBOX_SIZE +#define DEFAULT_RAW_RECVMBOX_SIZE 0 +#endif + +/** + * DEFAULT_UDP_RECVMBOX_SIZE: The mailbox size for the incoming packets on a + * NETCONN_UDP. The queue size value itself is platform-dependent, but is passed + * to sys_mbox_new() when the recvmbox is created. + */ +#ifndef DEFAULT_UDP_RECVMBOX_SIZE +#define DEFAULT_UDP_RECVMBOX_SIZE 0 +#endif + +/** + * DEFAULT_TCP_RECVMBOX_SIZE: The mailbox size for the incoming packets on a + * NETCONN_TCP. The queue size value itself is platform-dependent, but is passed + * to sys_mbox_new() when the recvmbox is created. + */ +#ifndef DEFAULT_TCP_RECVMBOX_SIZE +#define DEFAULT_TCP_RECVMBOX_SIZE 0 +#endif + +/** + * DEFAULT_ACCEPTMBOX_SIZE: The mailbox size for the incoming connections. + * The queue size value itself is platform-dependent, but is passed to + * sys_mbox_new() when the acceptmbox is created. + */ +#ifndef DEFAULT_ACCEPTMBOX_SIZE +#define DEFAULT_ACCEPTMBOX_SIZE 0 +#endif + +/* + ---------------------------------------------- + ---------- Sequential layer options ---------- + ---------------------------------------------- +*/ +/** + * LWIP_TCPIP_CORE_LOCKING: (EXPERIMENTAL!) + * Don't use it if you're not an active lwIP project member + */ +#ifndef LWIP_TCPIP_CORE_LOCKING +#define LWIP_TCPIP_CORE_LOCKING 0 +#endif + +/** + * LWIP_NETCONN==1: Enable Netconn API (require to use api_lib.c) + */ +#ifndef LWIP_NETCONN +#define LWIP_NETCONN 1 +#endif + +/* + ------------------------------------ + ---------- Socket options ---------- + ------------------------------------ +*/ +/** + * LWIP_SOCKET==1: Enable Socket API (require to use sockets.c) + */ +#ifndef LWIP_SOCKET +#define LWIP_SOCKET 1 +#endif + +/** + * LWIP_COMPAT_SOCKETS==1: Enable BSD-style sockets functions names. + * (only used if you use sockets.c) + */ +#ifndef LWIP_COMPAT_SOCKETS +#define LWIP_COMPAT_SOCKETS 1 +#endif + +/** + * LWIP_POSIX_SOCKETS_IO_NAMES==1: Enable POSIX-style sockets functions names. + * Disable this option if you use a POSIX operating system that uses the same + * names (read, write & close). (only used if you use sockets.c) + */ +#ifndef LWIP_POSIX_SOCKETS_IO_NAMES +#define LWIP_POSIX_SOCKETS_IO_NAMES 1 +#endif + +/** + * LWIP_TCP_KEEPALIVE==1: Enable TCP_KEEPIDLE, TCP_KEEPINTVL and TCP_KEEPCNT + * options processing. Note that TCP_KEEPIDLE and TCP_KEEPINTVL have to be set + * in seconds. (does not require sockets.c, and will affect tcp.c) + */ +#ifndef LWIP_TCP_KEEPALIVE +#define LWIP_TCP_KEEPALIVE 1 +#endif + +/** + * LWIP_SO_RCVTIMEO==1: Enable SO_RCVTIMEO processing. + */ +#ifndef LWIP_SO_RCVTIMEO +#define LWIP_SO_RCVTIMEO 0 +#endif + +/** + * LWIP_SO_RCVBUF==1: Enable SO_RCVBUF processing. + */ +#ifndef LWIP_SO_RCVBUF +#define LWIP_SO_RCVBUF 0 +#endif + +/** + * If LWIP_SO_RCVBUF is used, this is the default value for recv_bufsize. + */ +#ifndef RECV_BUFSIZE_DEFAULT +#define RECV_BUFSIZE_DEFAULT INT_MAX +#endif + +/** + * SO_REUSE==1: Enable SO_REUSEADDR and SO_REUSEPORT options. DO NOT USE! + */ +#ifndef SO_REUSE +#define SO_REUSE 0 +#endif + +/* + ---------------------------------------- + ---------- Statistics options ---------- + ---------------------------------------- +*/ +/** + * LWIP_STATS==1: Enable statistics collection in lwip_stats. + */ +#ifndef LWIP_STATS +#define LWIP_STATS 1 +#endif + +#if LWIP_STATS + +/** + * LWIP_STATS_DISPLAY==1: Compile in the statistics output functions. + */ +#ifndef LWIP_STATS_DISPLAY +#define LWIP_STATS_DISPLAY 0 +#endif + +/** + * LINK_STATS==1: Enable link stats. + */ +#ifndef LINK_STATS +#define LINK_STATS 1 +#endif + +/** + * ETHARP_STATS==1: Enable etharp stats. + */ +#ifndef ETHARP_STATS +#define ETHARP_STATS (LWIP_ARP) +#endif + +/** + * IP_STATS==1: Enable IP stats. + */ +#ifndef IP_STATS +#define IP_STATS 1 +#endif + +/** + * IPFRAG_STATS==1: Enable IP fragmentation stats. Default is + * on if using either frag or reass. + */ +#ifndef IPFRAG_STATS +#define IPFRAG_STATS (IP_REASSEMBLY || IP_FRAG) +#endif + +/** + * ICMP_STATS==1: Enable ICMP stats. + */ +#ifndef ICMP_STATS +#define ICMP_STATS 1 +#endif + +/** + * IGMP_STATS==1: Enable IGMP stats. + */ +#ifndef IGMP_STATS +#define IGMP_STATS (LWIP_IGMP) +#endif + +/** + * UDP_STATS==1: Enable UDP stats. Default is on if + * UDP enabled, otherwise off. + */ +#ifndef UDP_STATS +#define UDP_STATS (LWIP_UDP) +#endif + +/** + * TCP_STATS==1: Enable TCP stats. Default is on if TCP + * enabled, otherwise off. + */ +#ifndef TCP_STATS +#define TCP_STATS (LWIP_TCP) +#endif + +/** + * MEM_STATS==1: Enable mem.c stats. + */ +#ifndef MEM_STATS +#define MEM_STATS ((MEM_LIBC_MALLOC == 0) && (MEM_USE_POOLS == 0)) +#endif + +/** + * MEMP_STATS==1: Enable memp.c pool stats. + */ +#ifndef MEMP_STATS +#define MEMP_STATS (MEMP_MEM_MALLOC == 0) +#endif + +/** + * SYS_STATS==1: Enable system stats (sem and mbox counts, etc). + */ +#ifndef SYS_STATS +#define SYS_STATS (NO_SYS == 0) +#endif + +#else + +#define LINK_STATS 0 +#define IP_STATS 0 +#define IPFRAG_STATS 0 +#define ICMP_STATS 0 +#define IGMP_STATS 0 +#define UDP_STATS 0 +#define TCP_STATS 0 +#define MEM_STATS 0 +#define MEMP_STATS 0 +#define SYS_STATS 0 +#define LWIP_STATS_DISPLAY 0 + +#endif /* LWIP_STATS */ + +/* + --------------------------------- + ---------- PPP options ---------- + --------------------------------- +*/ +/** + * PPP_SUPPORT==1: Enable PPP. + */ +#ifndef PPP_SUPPORT +#define PPP_SUPPORT 0 +#endif + +/** + * PPPOE_SUPPORT==1: Enable PPP Over Ethernet + */ +#ifndef PPPOE_SUPPORT +#define PPPOE_SUPPORT 0 +#endif + +/** + * PPPOS_SUPPORT==1: Enable PPP Over Serial + */ +#ifndef PPPOS_SUPPORT +#define PPPOS_SUPPORT PPP_SUPPORT +#endif + +#if PPP_SUPPORT + +/** + * NUM_PPP: Max PPP sessions. + */ +#ifndef NUM_PPP +#define NUM_PPP 1 +#endif + +/** + * PAP_SUPPORT==1: Support PAP. + */ +#ifndef PAP_SUPPORT +#define PAP_SUPPORT 0 +#endif + +/** + * CHAP_SUPPORT==1: Support CHAP. + */ +#ifndef CHAP_SUPPORT +#define CHAP_SUPPORT 0 +#endif + +/** + * MSCHAP_SUPPORT==1: Support MSCHAP. CURRENTLY NOT SUPPORTED! DO NOT SET! + */ +#ifndef MSCHAP_SUPPORT +#define MSCHAP_SUPPORT 0 +#endif + +/** + * CBCP_SUPPORT==1: Support CBCP. CURRENTLY NOT SUPPORTED! DO NOT SET! + */ +#ifndef CBCP_SUPPORT +#define CBCP_SUPPORT 0 +#endif + +/** + * CCP_SUPPORT==1: Support CCP. CURRENTLY NOT SUPPORTED! DO NOT SET! + */ +#ifndef CCP_SUPPORT +#define CCP_SUPPORT 0 +#endif + +/** + * VJ_SUPPORT==1: Support VJ header compression. + */ +#ifndef VJ_SUPPORT +#define VJ_SUPPORT 0 +#endif + +/** + * MD5_SUPPORT==1: Support MD5 (see also CHAP). + */ +#ifndef MD5_SUPPORT +#define MD5_SUPPORT 0 +#endif + +/* + * Timeouts + */ +#ifndef FSM_DEFTIMEOUT +#define FSM_DEFTIMEOUT 6 /* Timeout time in seconds */ +#endif + +#ifndef FSM_DEFMAXTERMREQS +#define FSM_DEFMAXTERMREQS 2 /* Maximum Terminate-Request transmissions */ +#endif + +#ifndef FSM_DEFMAXCONFREQS +#define FSM_DEFMAXCONFREQS 10 /* Maximum Configure-Request transmissions */ +#endif + +#ifndef FSM_DEFMAXNAKLOOPS +#define FSM_DEFMAXNAKLOOPS 5 /* Maximum number of nak loops */ +#endif + +#ifndef UPAP_DEFTIMEOUT +#define UPAP_DEFTIMEOUT 6 /* Timeout (seconds) for retransmitting req */ +#endif + +#ifndef UPAP_DEFREQTIME +#define UPAP_DEFREQTIME 30 /* Time to wait for auth-req from peer */ +#endif + +#ifndef CHAP_DEFTIMEOUT +#define CHAP_DEFTIMEOUT 6 /* Timeout time in seconds */ +#endif + +#ifndef CHAP_DEFTRANSMITS +#define CHAP_DEFTRANSMITS 10 /* max # times to send challenge */ +#endif + +/* Interval in seconds between keepalive echo requests, 0 to disable. */ +#ifndef LCP_ECHOINTERVAL +#define LCP_ECHOINTERVAL 0 +#endif + +/* Number of unanswered echo requests before failure. */ +#ifndef LCP_MAXECHOFAILS +#define LCP_MAXECHOFAILS 3 +#endif + +/* Max Xmit idle time (in jiffies) before resend flag char. */ +#ifndef PPP_MAXIDLEFLAG +#define PPP_MAXIDLEFLAG 100 +#endif + +/* + * Packet sizes + * + * Note - lcp shouldn't be allowed to negotiate stuff outside these + * limits. See lcp.h in the pppd directory. + * (XXX - these constants should simply be shared by lcp.c instead + * of living in lcp.h) + */ +#define PPP_MTU 1500 /* Default MTU (size of Info field) */ +#ifndef PPP_MAXMTU +/* #define PPP_MAXMTU 65535 - (PPP_HDRLEN + PPP_FCSLEN) */ +#define PPP_MAXMTU 1500 /* Largest MTU we allow */ +#endif +#define PPP_MINMTU 64 +#define PPP_MRU 1500 /* default MRU = max length of info field */ +#define PPP_MAXMRU 1500 /* Largest MRU we allow */ +#ifndef PPP_DEFMRU +#define PPP_DEFMRU 296 /* Try for this */ +#endif +#define PPP_MINMRU 128 /* No MRUs below this */ + +#ifndef MAXNAMELEN +#define MAXNAMELEN 256 /* max length of hostname or name for auth */ +#endif +#ifndef MAXSECRETLEN +#define MAXSECRETLEN 256 /* max length of password or secret */ +#endif + +#endif /* PPP_SUPPORT */ + +/* + -------------------------------------- + ---------- Checksum options ---------- + -------------------------------------- +*/ +/** + * CHECKSUM_GEN_IP==1: Generate checksums in software for outgoing IP packets. + */ +#ifndef CHECKSUM_GEN_IP +#define CHECKSUM_GEN_IP 1 +#endif + +/** + * CHECKSUM_GEN_UDP==1: Generate checksums in software for outgoing UDP packets. + */ +#ifndef CHECKSUM_GEN_UDP +#define CHECKSUM_GEN_UDP 1 +#endif + +/** + * CHECKSUM_GEN_TCP==1: Generate checksums in software for outgoing TCP packets. + */ +#ifndef CHECKSUM_GEN_TCP +#define CHECKSUM_GEN_TCP 1 +#endif + +/** + * CHECKSUM_CHECK_IP==1: Check checksums in software for incoming IP packets. + */ +#ifndef CHECKSUM_CHECK_IP +#define CHECKSUM_CHECK_IP 1 +#endif + +/** + * CHECKSUM_CHECK_UDP==1: Check checksums in software for incoming UDP packets. + */ +#ifndef CHECKSUM_CHECK_UDP +#define CHECKSUM_CHECK_UDP 1 +#endif + +/** + * CHECKSUM_CHECK_TCP==1: Check checksums in software for incoming TCP packets. + */ +#ifndef CHECKSUM_CHECK_TCP +#define CHECKSUM_CHECK_TCP 1 +#endif + +/* + --------------------------------------- + ---------- Debugging options ---------- + --------------------------------------- +*/ +/** + * LWIP_DBG_MIN_LEVEL: After masking, the value of the debug is + * compared against this value. If it is smaller, then debugging + * messages are written. + */ +#ifndef LWIP_DBG_MIN_LEVEL +#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_ALL +#endif + +/** + * LWIP_DBG_TYPES_ON: A mask that can be used to globally enable/disable + * debug messages of certain types. + */ +#ifndef LWIP_DBG_TYPES_ON +#define LWIP_DBG_TYPES_ON LWIP_DBG_ON +#endif + +/** + * ETHARP_DEBUG: Enable debugging in etharp.c. + */ +#ifndef ETHARP_DEBUG +#define ETHARP_DEBUG LWIP_DBG_OFF +#endif + +/** + * NETIF_DEBUG: Enable debugging in netif.c. + */ +#ifndef NETIF_DEBUG +#define NETIF_DEBUG LWIP_DBG_OFF +#endif + +/** + * PBUF_DEBUG: Enable debugging in pbuf.c. + */ +#ifndef PBUF_DEBUG +#define PBUF_DEBUG LWIP_DBG_OFF +#endif + +/** + * API_LIB_DEBUG: Enable debugging in api_lib.c. + */ +#ifndef API_LIB_DEBUG +#define API_LIB_DEBUG LWIP_DBG_OFF +#endif + +/** + * API_MSG_DEBUG: Enable debugging in api_msg.c. + */ +#ifndef API_MSG_DEBUG +#define API_MSG_DEBUG LWIP_DBG_OFF +#endif + +/** + * SOCKETS_DEBUG: Enable debugging in sockets.c. + */ +#ifndef SOCKETS_DEBUG +#define SOCKETS_DEBUG LWIP_DBG_OFF +#endif + +/** + * ICMP_DEBUG: Enable debugging in icmp.c. + */ +#ifndef ICMP_DEBUG +#define ICMP_DEBUG LWIP_DBG_OFF +#endif + +/** + * IGMP_DEBUG: Enable debugging in igmp.c. + */ +#ifndef IGMP_DEBUG +#define IGMP_DEBUG LWIP_DBG_OFF +#endif + +/** + * INET_DEBUG: Enable debugging in inet.c. + */ +#ifndef INET_DEBUG +#define INET_DEBUG LWIP_DBG_OFF +#endif + +/** + * IP_DEBUG: Enable debugging for IP. + */ +#ifndef IP_DEBUG +#define IP_DEBUG LWIP_DBG_OFF +#endif + +/** + * IP_REASS_DEBUG: Enable debugging in ip_frag.c for both frag & reass. + */ +#ifndef IP_REASS_DEBUG +#define IP_REASS_DEBUG LWIP_DBG_OFF +#endif + +/** + * RAW_DEBUG: Enable debugging in raw.c. + */ +#ifndef RAW_DEBUG +#define RAW_DEBUG LWIP_DBG_OFF +#endif + +/** + * MEM_DEBUG: Enable debugging in mem.c. + */ +#ifndef MEM_DEBUG +#define MEM_DEBUG LWIP_DBG_OFF +#endif + +/** + * MEMP_DEBUG: Enable debugging in memp.c. + */ +#ifndef MEMP_DEBUG +#define MEMP_DEBUG LWIP_DBG_OFF +#endif + +/** + * SYS_DEBUG: Enable debugging in sys.c. + */ +#ifndef SYS_DEBUG +#define SYS_DEBUG LWIP_DBG_OFF +#endif + +/** + * TCP_DEBUG: Enable debugging for TCP. + */ +#ifndef TCP_DEBUG +#define TCP_DEBUG LWIP_DBG_OFF +#endif + +/** + * TCP_INPUT_DEBUG: Enable debugging in tcp_in.c for incoming debug. + */ +#ifndef TCP_INPUT_DEBUG +#define TCP_INPUT_DEBUG LWIP_DBG_ON +#endif + +/** + * TCP_FR_DEBUG: Enable debugging in tcp_in.c for fast retransmit. + */ +#ifndef TCP_FR_DEBUG +#define TCP_FR_DEBUG LWIP_DBG_OFF +#endif + +/** + * TCP_RTO_DEBUG: Enable debugging in TCP for retransmit + * timeout. + */ +#ifndef TCP_RTO_DEBUG +#define TCP_RTO_DEBUG LWIP_DBG_OFF +#endif + +/** + * TCP_CWND_DEBUG: Enable debugging for TCP congestion window. + */ +#ifndef TCP_CWND_DEBUG +#define TCP_CWND_DEBUG LWIP_DBG_OFF +#endif + +/** + * TCP_WND_DEBUG: Enable debugging in tcp_in.c for window updating. + */ +#ifndef TCP_WND_DEBUG +#define TCP_WND_DEBUG LWIP_DBG_OFF +#endif + +/** + * TCP_OUTPUT_DEBUG: Enable debugging in tcp_out.c output functions. + */ +#ifndef TCP_OUTPUT_DEBUG +#define TCP_OUTPUT_DEBUG LWIP_DBG_OFF +#endif + +/** + * TCP_RST_DEBUG: Enable debugging for TCP with the RST message. + */ +#ifndef TCP_RST_DEBUG +#define TCP_RST_DEBUG LWIP_DBG_OFF +#endif + +/** + * TCP_QLEN_DEBUG: Enable debugging for TCP queue lengths. + */ +#ifndef TCP_QLEN_DEBUG +#define TCP_QLEN_DEBUG LWIP_DBG_OFF +#endif + +/** + * UDP_DEBUG: Enable debugging in UDP. + */ +#ifndef UDP_DEBUG +#define UDP_DEBUG LWIP_DBG_OFF +#endif + +/** + * TCPIP_DEBUG: Enable debugging in tcpip.c. + */ +#ifndef TCPIP_DEBUG +#define TCPIP_DEBUG LWIP_DBG_OFF +#endif + +/** + * PPP_DEBUG: Enable debugging for PPP. + */ +#ifndef PPP_DEBUG +#define PPP_DEBUG LWIP_DBG_OFF +#endif + +/** + * SLIP_DEBUG: Enable debugging in slipif.c. + */ +#ifndef SLIP_DEBUG +#define SLIP_DEBUG LWIP_DBG_OFF +#endif + +/** + * DHCP_DEBUG: Enable debugging in dhcp.c. + */ +#ifndef DHCP_DEBUG +#define DHCP_DEBUG LWIP_DBG_OFF +#endif + +/** + * AUTOIP_DEBUG: Enable debugging in autoip.c. + */ +#ifndef AUTOIP_DEBUG +#define AUTOIP_DEBUG LWIP_DBG_OFF +#endif + +/** + * SNMP_MSG_DEBUG: Enable debugging for SNMP messages. + */ +#ifndef SNMP_MSG_DEBUG +#define SNMP_MSG_DEBUG LWIP_DBG_OFF +#endif + +/** + * SNMP_MIB_DEBUG: Enable debugging for SNMP MIBs. + */ +#ifndef SNMP_MIB_DEBUG +#define SNMP_MIB_DEBUG LWIP_DBG_OFF +#endif + +/** + * DNS_DEBUG: Enable debugging for DNS. + */ +#ifndef DNS_DEBUG +#define DNS_DEBUG LWIP_DBG_OFF +#endif + +#endif /* __LWIP_OPT_H__ */ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/pbuf.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/pbuf.h new file mode 100644 index 000000000..8ca61b176 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/pbuf.h @@ -0,0 +1,122 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#ifndef __LWIP_PBUF_H__ +#define __LWIP_PBUF_H__ + +#include "lwip/opt.h" +#include "lwip/err.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define PBUF_TRANSPORT_HLEN 20 +#define PBUF_IP_HLEN 20 + +typedef enum { + PBUF_TRANSPORT, + PBUF_IP, + PBUF_LINK, + PBUF_RAW +} pbuf_layer; + +typedef enum { + PBUF_RAM, /* pbuf data is stored in RAM */ + PBUF_ROM, /* pbuf data is stored in ROM */ + PBUF_REF, /* pbuf comes from the pbuf pool */ + PBUF_POOL /* pbuf payload refers to RAM */ +} pbuf_type; + + +/** indicates this packet's data should be immediately passed to the application */ +#define PBUF_FLAG_PUSH 0x01U + +struct pbuf { + /** next pbuf in singly linked pbuf chain */ + struct pbuf *next; + + /** pointer to the actual data in the buffer */ + void *payload; + + /** + * total length of this buffer and all next buffers in chain + * belonging to the same packet. + * + * For non-queue packet chains this is the invariant: + * p->tot_len == p->len + (p->next? p->next->tot_len: 0) + */ + u16_t tot_len; + + /** length of this buffer */ + u16_t len; + + /** pbuf_type as u8_t instead of enum to save space */ + u8_t /*pbuf_type*/ type; + + /** misc flags */ + u8_t flags; + + /** + * the reference count always equals the number of pointers + * that refer to this pbuf. This can be pointers from an application, + * the stack itself, or pbuf->next pointers from a chain. + */ + u16_t ref; + +}; + +/* Initializes the pbuf module. This call is empty for now, but may not be in future. */ +#define pbuf_init() + +struct pbuf *pbuf_alloc(pbuf_layer l, u16_t size, pbuf_type type); +void pbuf_realloc(struct pbuf *p, u16_t size); +u8_t pbuf_header(struct pbuf *p, s16_t header_size); +void pbuf_ref(struct pbuf *p); +void pbuf_ref_chain(struct pbuf *p); +u8_t pbuf_free(struct pbuf *p); +u8_t pbuf_clen(struct pbuf *p); +void pbuf_cat(struct pbuf *head, struct pbuf *tail); +void pbuf_chain(struct pbuf *head, struct pbuf *tail); +struct pbuf *pbuf_dechain(struct pbuf *p); +err_t pbuf_copy(struct pbuf *p_to, struct pbuf *p_from); +u16_t pbuf_copy_partial(struct pbuf *p, void *dataptr, u16_t len, u16_t offset); +err_t pbuf_take(struct pbuf *buf, const void *dataptr, u16_t len); +struct pbuf *pbuf_coalesce(struct pbuf *p, pbuf_layer layer); + +#ifdef __cplusplus +} +#endif + +#endif /* __LWIP_PBUF_H__ */ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/raw.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/raw.h new file mode 100644 index 000000000..545c43367 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/raw.h @@ -0,0 +1,99 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_RAW_H__ +#define __LWIP_RAW_H__ + +#include "lwip/opt.h" + +#if LWIP_RAW /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/pbuf.h" +#include "lwip/inet.h" +#include "lwip/ip.h" +#include "lwip/ip_addr.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct raw_pcb { +/* Common members of all PCB types */ + IP_PCB; + + struct raw_pcb *next; + + u8_t protocol; + + /* receive callback function + * @param arg user supplied argument (raw_pcb.recv_arg) + * @param pcb the raw_pcb which received data + * @param p the packet buffer that was received + * @param addr the remote IP address from which the packet was received + * @return 1 if the packet was 'eaten' (aka. deleted), + * 0 if the packet lives on + * If returning 1, the callback is responsible for freeing the pbuf + * if it's not used any more. + */ + u8_t (* recv)(void *arg, struct raw_pcb *pcb, struct pbuf *p, + struct ip_addr *addr); + /* user-supplied argument for the recv callback */ + void *recv_arg; +}; + +/* The following functions is the application layer interface to the + RAW code. */ +struct raw_pcb * raw_new (u8_t proto); +void raw_remove (struct raw_pcb *pcb); +err_t raw_bind (struct raw_pcb *pcb, struct ip_addr *ipaddr); +err_t raw_connect (struct raw_pcb *pcb, struct ip_addr *ipaddr); + +void raw_recv (struct raw_pcb *pcb, + u8_t (* recv)(void *arg, struct raw_pcb *pcb, + struct pbuf *p, + struct ip_addr *addr), + void *recv_arg); +err_t raw_sendto (struct raw_pcb *pcb, struct pbuf *p, struct ip_addr *ipaddr); +err_t raw_send (struct raw_pcb *pcb, struct pbuf *p); + +/* The following functions are the lower layer interface to RAW. */ +u8_t raw_input (struct pbuf *p, struct netif *inp); +#define raw_init() /* Compatibility define, not init needed. */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_RAW */ + +#endif /* __LWIP_RAW_H__ */ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/sio.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/sio.h new file mode 100644 index 000000000..10eabcf16 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/sio.h @@ -0,0 +1,143 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + */ + +/* + * This is the interface to the platform specific serial IO module + * It needs to be implemented by those platforms which need SLIP or PPP + */ + +#ifndef __SIO_H__ +#define __SIO_H__ + +#include "lwip/arch.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* If you want to define sio_fd_t elsewhere or differently, + define this in your cc.h file. */ +#ifndef __sio_fd_t_defined +typedef void * sio_fd_t; +#endif + +/* The following functions can be defined to something else in your cc.h file + or be implemented in your custom sio.c file. */ + +#ifndef sio_open +/** + * Opens a serial device for communication. + * + * @param devnum device number + * @return handle to serial device if successful, NULL otherwise + */ +sio_fd_t sio_open(u8_t devnum); +#endif + +#ifndef sio_send +/** + * Sends a single character to the serial device. + * + * @param c character to send + * @param fd serial device handle + * + * @note This function will block until the character can be sent. + */ +void sio_send(u8_t c, sio_fd_t fd); +#endif + +#ifndef sio_recv +/** + * Receives a single character from the serial device. + * + * @param fd serial device handle + * + * @note This function will block until a character is received. + */ +u8_t sio_recv(sio_fd_t fd); +#endif + +#ifndef sio_read +/** + * Reads from the serial device. + * + * @param fd serial device handle + * @param data pointer to data buffer for receiving + * @param len maximum length (in bytes) of data to receive + * @return number of bytes actually received - may be 0 if aborted by sio_read_abort + * + * @note This function will block until data can be received. The blocking + * can be cancelled by calling sio_read_abort(). + */ +u32_t sio_read(sio_fd_t fd, u8_t *data, u32_t len); +#endif + +#ifndef sio_tryread +/** + * Tries to read from the serial device. Same as sio_read but returns + * immediately if no data is available and never blocks. + * + * @param fd serial device handle + * @param data pointer to data buffer for receiving + * @param len maximum length (in bytes) of data to receive + * @return number of bytes actually received + */ +u32_t sio_tryread(sio_fd_t fd, u8_t *data, u32_t len); +#endif + +#ifndef sio_write +/** + * Writes to the serial device. + * + * @param fd serial device handle + * @param data pointer to data to send + * @param len length (in bytes) of data to send + * @return number of bytes actually sent + * + * @note This function will block until all data can be sent. + */ +u32_t sio_write(sio_fd_t fd, u8_t *data, u32_t len); +#endif + +#ifndef sio_read_abort +/** + * Aborts a blocking sio_read() call. + * + * @param fd serial device handle + */ +void sio_read_abort(sio_fd_t fd); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* __SIO_H__ */ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/snmp.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/snmp.h new file mode 100644 index 000000000..b87717f9a --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/snmp.h @@ -0,0 +1,366 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001, 2002 Leon Woestenberg + * Copyright (c) 2001, 2002 Axon Digital Design B.V., The Netherlands. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Leon Woestenberg + * + */ +#ifndef __LWIP_SNMP_H__ +#define __LWIP_SNMP_H__ + +#include "lwip/opt.h" +#include "lwip/netif.h" +#include "lwip/udp.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @see RFC1213, "MIB-II, 6. Definitions" + */ +enum snmp_ifType { + snmp_ifType_other=1, /* none of the following */ + snmp_ifType_regular1822, + snmp_ifType_hdh1822, + snmp_ifType_ddn_x25, + snmp_ifType_rfc877_x25, + snmp_ifType_ethernet_csmacd, + snmp_ifType_iso88023_csmacd, + snmp_ifType_iso88024_tokenBus, + snmp_ifType_iso88025_tokenRing, + snmp_ifType_iso88026_man, + snmp_ifType_starLan, + snmp_ifType_proteon_10Mbit, + snmp_ifType_proteon_80Mbit, + snmp_ifType_hyperchannel, + snmp_ifType_fddi, + snmp_ifType_lapb, + snmp_ifType_sdlc, + snmp_ifType_ds1, /* T-1 */ + snmp_ifType_e1, /* european equiv. of T-1 */ + snmp_ifType_basicISDN, + snmp_ifType_primaryISDN, /* proprietary serial */ + snmp_ifType_propPointToPointSerial, + snmp_ifType_ppp, + snmp_ifType_softwareLoopback, + snmp_ifType_eon, /* CLNP over IP [11] */ + snmp_ifType_ethernet_3Mbit, + snmp_ifType_nsip, /* XNS over IP */ + snmp_ifType_slip, /* generic SLIP */ + snmp_ifType_ultra, /* ULTRA technologies */ + snmp_ifType_ds3, /* T-3 */ + snmp_ifType_sip, /* SMDS */ + snmp_ifType_frame_relay +}; + +#if LWIP_SNMP /* don't build if not configured for use in lwipopts.h */ + +/** SNMP "sysuptime" Interval */ +#define SNMP_SYSUPTIME_INTERVAL 10 + +/** fixed maximum length for object identifier type */ +#define LWIP_SNMP_OBJ_ID_LEN 32 + +/** internal object identifier representation */ +struct snmp_obj_id +{ + u8_t len; + s32_t id[LWIP_SNMP_OBJ_ID_LEN]; +}; + +/* system */ +void snmp_set_sysdesr(u8_t* str, u8_t* len); +void snmp_set_sysobjid(struct snmp_obj_id *oid); +void snmp_get_sysobjid_ptr(struct snmp_obj_id **oid); +void snmp_inc_sysuptime(void); +void snmp_add_sysuptime(u32_t value); +void snmp_get_sysuptime(u32_t *value); +void snmp_set_syscontact(u8_t *ocstr, u8_t *ocstrlen); +void snmp_set_sysname(u8_t *ocstr, u8_t *ocstrlen); +void snmp_set_syslocation(u8_t *ocstr, u8_t *ocstrlen); + +/* network interface */ +void snmp_add_ifinoctets(struct netif *ni, u32_t value); +void snmp_inc_ifinucastpkts(struct netif *ni); +void snmp_inc_ifinnucastpkts(struct netif *ni); +void snmp_inc_ifindiscards(struct netif *ni); +void snmp_add_ifoutoctets(struct netif *ni, u32_t value); +void snmp_inc_ifoutucastpkts(struct netif *ni); +void snmp_inc_ifoutnucastpkts(struct netif *ni); +void snmp_inc_ifoutdiscards(struct netif *ni); +void snmp_inc_iflist(void); +void snmp_dec_iflist(void); + +/* ARP (for atTable and ipNetToMediaTable) */ +void snmp_insert_arpidx_tree(struct netif *ni, struct ip_addr *ip); +void snmp_delete_arpidx_tree(struct netif *ni, struct ip_addr *ip); + +/* IP */ +void snmp_inc_ipinreceives(void); +void snmp_inc_ipinhdrerrors(void); +void snmp_inc_ipinaddrerrors(void); +void snmp_inc_ipforwdatagrams(void); +void snmp_inc_ipinunknownprotos(void); +void snmp_inc_ipindiscards(void); +void snmp_inc_ipindelivers(void); +void snmp_inc_ipoutrequests(void); +void snmp_inc_ipoutdiscards(void); +void snmp_inc_ipoutnoroutes(void); +void snmp_inc_ipreasmreqds(void); +void snmp_inc_ipreasmoks(void); +void snmp_inc_ipreasmfails(void); +void snmp_inc_ipfragoks(void); +void snmp_inc_ipfragfails(void); +void snmp_inc_ipfragcreates(void); +void snmp_inc_iproutingdiscards(void); +void snmp_insert_ipaddridx_tree(struct netif *ni); +void snmp_delete_ipaddridx_tree(struct netif *ni); +void snmp_insert_iprteidx_tree(u8_t dflt, struct netif *ni); +void snmp_delete_iprteidx_tree(u8_t dflt, struct netif *ni); + +/* ICMP */ +void snmp_inc_icmpinmsgs(void); +void snmp_inc_icmpinerrors(void); +void snmp_inc_icmpindestunreachs(void); +void snmp_inc_icmpintimeexcds(void); +void snmp_inc_icmpinparmprobs(void); +void snmp_inc_icmpinsrcquenchs(void); +void snmp_inc_icmpinredirects(void); +void snmp_inc_icmpinechos(void); +void snmp_inc_icmpinechoreps(void); +void snmp_inc_icmpintimestamps(void); +void snmp_inc_icmpintimestampreps(void); +void snmp_inc_icmpinaddrmasks(void); +void snmp_inc_icmpinaddrmaskreps(void); +void snmp_inc_icmpoutmsgs(void); +void snmp_inc_icmpouterrors(void); +void snmp_inc_icmpoutdestunreachs(void); +void snmp_inc_icmpouttimeexcds(void); +void snmp_inc_icmpoutparmprobs(void); +void snmp_inc_icmpoutsrcquenchs(void); +void snmp_inc_icmpoutredirects(void); +void snmp_inc_icmpoutechos(void); +void snmp_inc_icmpoutechoreps(void); +void snmp_inc_icmpouttimestamps(void); +void snmp_inc_icmpouttimestampreps(void); +void snmp_inc_icmpoutaddrmasks(void); +void snmp_inc_icmpoutaddrmaskreps(void); + +/* TCP */ +void snmp_inc_tcpactiveopens(void); +void snmp_inc_tcppassiveopens(void); +void snmp_inc_tcpattemptfails(void); +void snmp_inc_tcpestabresets(void); +void snmp_inc_tcpinsegs(void); +void snmp_inc_tcpoutsegs(void); +void snmp_inc_tcpretranssegs(void); +void snmp_inc_tcpinerrs(void); +void snmp_inc_tcpoutrsts(void); + +/* UDP */ +void snmp_inc_udpindatagrams(void); +void snmp_inc_udpnoports(void); +void snmp_inc_udpinerrors(void); +void snmp_inc_udpoutdatagrams(void); +void snmp_insert_udpidx_tree(struct udp_pcb *pcb); +void snmp_delete_udpidx_tree(struct udp_pcb *pcb); + +/* SNMP */ +void snmp_inc_snmpinpkts(void); +void snmp_inc_snmpoutpkts(void); +void snmp_inc_snmpinbadversions(void); +void snmp_inc_snmpinbadcommunitynames(void); +void snmp_inc_snmpinbadcommunityuses(void); +void snmp_inc_snmpinasnparseerrs(void); +void snmp_inc_snmpintoobigs(void); +void snmp_inc_snmpinnosuchnames(void); +void snmp_inc_snmpinbadvalues(void); +void snmp_inc_snmpinreadonlys(void); +void snmp_inc_snmpingenerrs(void); +void snmp_add_snmpintotalreqvars(u8_t value); +void snmp_add_snmpintotalsetvars(u8_t value); +void snmp_inc_snmpingetrequests(void); +void snmp_inc_snmpingetnexts(void); +void snmp_inc_snmpinsetrequests(void); +void snmp_inc_snmpingetresponses(void); +void snmp_inc_snmpintraps(void); +void snmp_inc_snmpouttoobigs(void); +void snmp_inc_snmpoutnosuchnames(void); +void snmp_inc_snmpoutbadvalues(void); +void snmp_inc_snmpoutgenerrs(void); +void snmp_inc_snmpoutgetrequests(void); +void snmp_inc_snmpoutgetnexts(void); +void snmp_inc_snmpoutsetrequests(void); +void snmp_inc_snmpoutgetresponses(void); +void snmp_inc_snmpouttraps(void); +void snmp_get_snmpgrpid_ptr(struct snmp_obj_id **oid); +void snmp_set_snmpenableauthentraps(u8_t *value); +void snmp_get_snmpenableauthentraps(u8_t *value); + +/* LWIP_SNMP support not available */ +/* define everything to be empty */ +#else + +/* system */ +#define snmp_set_sysdesr(str, len) +#define snmp_set_sysobjid(oid); +#define snmp_get_sysobjid_ptr(oid) +#define snmp_inc_sysuptime() +#define snmp_add_sysuptime(value) +#define snmp_get_sysuptime(value) +#define snmp_set_syscontact(ocstr, ocstrlen); +#define snmp_set_sysname(ocstr, ocstrlen); +#define snmp_set_syslocation(ocstr, ocstrlen); + +/* network interface */ +#define snmp_add_ifinoctets(ni,value) +#define snmp_inc_ifinucastpkts(ni) +#define snmp_inc_ifinnucastpkts(ni) +#define snmp_inc_ifindiscards(ni) +#define snmp_add_ifoutoctets(ni,value) +#define snmp_inc_ifoutucastpkts(ni) +#define snmp_inc_ifoutnucastpkts(ni) +#define snmp_inc_ifoutdiscards(ni) +#define snmp_inc_iflist() +#define snmp_dec_iflist() + +/* ARP */ +#define snmp_insert_arpidx_tree(ni,ip) +#define snmp_delete_arpidx_tree(ni,ip) + +/* IP */ +#define snmp_inc_ipinreceives() +#define snmp_inc_ipinhdrerrors() +#define snmp_inc_ipinaddrerrors() +#define snmp_inc_ipforwdatagrams() +#define snmp_inc_ipinunknownprotos() +#define snmp_inc_ipindiscards() +#define snmp_inc_ipindelivers() +#define snmp_inc_ipoutrequests() +#define snmp_inc_ipoutdiscards() +#define snmp_inc_ipoutnoroutes() +#define snmp_inc_ipreasmreqds() +#define snmp_inc_ipreasmoks() +#define snmp_inc_ipreasmfails() +#define snmp_inc_ipfragoks() +#define snmp_inc_ipfragfails() +#define snmp_inc_ipfragcreates() +#define snmp_inc_iproutingdiscards() +#define snmp_insert_ipaddridx_tree(ni) +#define snmp_delete_ipaddridx_tree(ni) +#define snmp_insert_iprteidx_tree(dflt, ni) +#define snmp_delete_iprteidx_tree(dflt, ni) + +/* ICMP */ +#define snmp_inc_icmpinmsgs() +#define snmp_inc_icmpinerrors() +#define snmp_inc_icmpindestunreachs() +#define snmp_inc_icmpintimeexcds() +#define snmp_inc_icmpinparmprobs() +#define snmp_inc_icmpinsrcquenchs() +#define snmp_inc_icmpinredirects() +#define snmp_inc_icmpinechos() +#define snmp_inc_icmpinechoreps() +#define snmp_inc_icmpintimestamps() +#define snmp_inc_icmpintimestampreps() +#define snmp_inc_icmpinaddrmasks() +#define snmp_inc_icmpinaddrmaskreps() +#define snmp_inc_icmpoutmsgs() +#define snmp_inc_icmpouterrors() +#define snmp_inc_icmpoutdestunreachs() +#define snmp_inc_icmpouttimeexcds() +#define snmp_inc_icmpoutparmprobs() +#define snmp_inc_icmpoutsrcquenchs() +#define snmp_inc_icmpoutredirects() +#define snmp_inc_icmpoutechos() +#define snmp_inc_icmpoutechoreps() +#define snmp_inc_icmpouttimestamps() +#define snmp_inc_icmpouttimestampreps() +#define snmp_inc_icmpoutaddrmasks() +#define snmp_inc_icmpoutaddrmaskreps() +/* TCP */ +#define snmp_inc_tcpactiveopens() +#define snmp_inc_tcppassiveopens() +#define snmp_inc_tcpattemptfails() +#define snmp_inc_tcpestabresets() +#define snmp_inc_tcpinsegs() +#define snmp_inc_tcpoutsegs() +#define snmp_inc_tcpretranssegs() +#define snmp_inc_tcpinerrs() +#define snmp_inc_tcpoutrsts() + +/* UDP */ +#define snmp_inc_udpindatagrams() +#define snmp_inc_udpnoports() +#define snmp_inc_udpinerrors() +#define snmp_inc_udpoutdatagrams() +#define snmp_insert_udpidx_tree(pcb) +#define snmp_delete_udpidx_tree(pcb) + +/* SNMP */ +#define snmp_inc_snmpinpkts() +#define snmp_inc_snmpoutpkts() +#define snmp_inc_snmpinbadversions() +#define snmp_inc_snmpinbadcommunitynames() +#define snmp_inc_snmpinbadcommunityuses() +#define snmp_inc_snmpinasnparseerrs() +#define snmp_inc_snmpintoobigs() +#define snmp_inc_snmpinnosuchnames() +#define snmp_inc_snmpinbadvalues() +#define snmp_inc_snmpinreadonlys() +#define snmp_inc_snmpingenerrs() +#define snmp_add_snmpintotalreqvars(value) +#define snmp_add_snmpintotalsetvars(value) +#define snmp_inc_snmpingetrequests() +#define snmp_inc_snmpingetnexts() +#define snmp_inc_snmpinsetrequests() +#define snmp_inc_snmpingetresponses() +#define snmp_inc_snmpintraps() +#define snmp_inc_snmpouttoobigs() +#define snmp_inc_snmpoutnosuchnames() +#define snmp_inc_snmpoutbadvalues() +#define snmp_inc_snmpoutgenerrs() +#define snmp_inc_snmpoutgetrequests() +#define snmp_inc_snmpoutgetnexts() +#define snmp_inc_snmpoutsetrequests() +#define snmp_inc_snmpoutgetresponses() +#define snmp_inc_snmpouttraps() +#define snmp_get_snmpgrpid_ptr(oid) +#define snmp_set_snmpenableauthentraps(value) +#define snmp_get_snmpenableauthentraps(value) + +#endif /* LWIP_SNMP */ + +#ifdef __cplusplus +} +#endif + +#endif /* __LWIP_SNMP_H__ */ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/snmp_asn1.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/snmp_asn1.h new file mode 100644 index 000000000..a40d5ef8d --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/snmp_asn1.h @@ -0,0 +1,103 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * Abstract Syntax Notation One (ISO 8824, 8825) codec. + */ + +/* + * Copyright (c) 2006 Axon Digital Design B.V., The Netherlands. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * Author: Christiaan Simons + */ + +#ifndef __LWIP_SNMP_ASN1_H__ +#define __LWIP_SNMP_ASN1_H__ + +#include "lwip/opt.h" +#include "lwip/err.h" +#include "lwip/pbuf.h" +#include "lwip/snmp.h" + +#if LWIP_SNMP + +#ifdef __cplusplus +extern "C" { +#endif + +#define SNMP_ASN1_UNIV (!0x80 | !0x40) +#define SNMP_ASN1_APPLIC (!0x80 | 0x40) +#define SNMP_ASN1_CONTXT ( 0x80 | !0x40) + +#define SNMP_ASN1_CONSTR (0x20) +#define SNMP_ASN1_PRIMIT (!0x20) + +/* universal tags */ +#define SNMP_ASN1_INTEG 2 +#define SNMP_ASN1_OC_STR 4 +#define SNMP_ASN1_NUL 5 +#define SNMP_ASN1_OBJ_ID 6 +#define SNMP_ASN1_SEQ 16 + +/* application specific (SNMP) tags */ +#define SNMP_ASN1_IPADDR 0 /* octet string size(4) */ +#define SNMP_ASN1_COUNTER 1 /* u32_t */ +#define SNMP_ASN1_GAUGE 2 /* u32_t */ +#define SNMP_ASN1_TIMETICKS 3 /* u32_t */ +#define SNMP_ASN1_OPAQUE 4 /* octet string */ + +/* context specific (SNMP) tags */ +#define SNMP_ASN1_PDU_GET_REQ 0 +#define SNMP_ASN1_PDU_GET_NEXT_REQ 1 +#define SNMP_ASN1_PDU_GET_RESP 2 +#define SNMP_ASN1_PDU_SET_REQ 3 +#define SNMP_ASN1_PDU_TRAP 4 + +err_t snmp_asn1_dec_type(struct pbuf *p, u16_t ofs, u8_t *type); +err_t snmp_asn1_dec_length(struct pbuf *p, u16_t ofs, u8_t *octets_used, u16_t *length); +err_t snmp_asn1_dec_u32t(struct pbuf *p, u16_t ofs, u16_t len, u32_t *value); +err_t snmp_asn1_dec_s32t(struct pbuf *p, u16_t ofs, u16_t len, s32_t *value); +err_t snmp_asn1_dec_oid(struct pbuf *p, u16_t ofs, u16_t len, struct snmp_obj_id *oid); +err_t snmp_asn1_dec_raw(struct pbuf *p, u16_t ofs, u16_t len, u16_t raw_len, u8_t *raw); + +void snmp_asn1_enc_length_cnt(u16_t length, u8_t *octets_needed); +void snmp_asn1_enc_u32t_cnt(u32_t value, u16_t *octets_needed); +void snmp_asn1_enc_s32t_cnt(s32_t value, u16_t *octets_needed); +void snmp_asn1_enc_oid_cnt(u8_t ident_len, s32_t *ident, u16_t *octets_needed); +err_t snmp_asn1_enc_type(struct pbuf *p, u16_t ofs, u8_t type); +err_t snmp_asn1_enc_length(struct pbuf *p, u16_t ofs, u16_t length); +err_t snmp_asn1_enc_u32t(struct pbuf *p, u16_t ofs, u8_t octets_needed, u32_t value); +err_t snmp_asn1_enc_s32t(struct pbuf *p, u16_t ofs, u8_t octets_needed, s32_t value); +err_t snmp_asn1_enc_oid(struct pbuf *p, u16_t ofs, u8_t ident_len, s32_t *ident); +err_t snmp_asn1_enc_raw(struct pbuf *p, u16_t ofs, u8_t raw_len, u8_t *raw); + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_SNMP */ + +#endif /* __LWIP_SNMP_ASN1_H__ */ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/snmp_msg.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/snmp_msg.h new file mode 100644 index 000000000..6e50a6186 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/snmp_msg.h @@ -0,0 +1,313 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * SNMP Agent message handling structures. + */ + +/* + * Copyright (c) 2006 Axon Digital Design B.V., The Netherlands. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * Author: Christiaan Simons + */ + +#ifndef __LWIP_SNMP_MSG_H__ +#define __LWIP_SNMP_MSG_H__ + +#include "lwip/opt.h" +#include "lwip/snmp.h" +#include "lwip/snmp_structs.h" + +#if LWIP_SNMP + +#if SNMP_PRIVATE_MIB +#include "private_mib.h" +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* The listen port of the SNMP agent. Clients have to make their requests to + this port. Most standard clients won't work if you change this! */ +#ifndef SNMP_IN_PORT +#define SNMP_IN_PORT 161 +#endif +/* The remote port the SNMP agent sends traps to. Most standard trap sinks won't + work if you change this! */ +#ifndef SNMP_TRAP_PORT +#define SNMP_TRAP_PORT 162 +#endif + +#define SNMP_ES_NOERROR 0 +#define SNMP_ES_TOOBIG 1 +#define SNMP_ES_NOSUCHNAME 2 +#define SNMP_ES_BADVALUE 3 +#define SNMP_ES_READONLY 4 +#define SNMP_ES_GENERROR 5 + +#define SNMP_GENTRAP_COLDSTART 0 +#define SNMP_GENTRAP_WARMSTART 1 +#define SNMP_GENTRAP_AUTHFAIL 4 +#define SNMP_GENTRAP_ENTERPRISESPC 6 + +struct snmp_varbind +{ + /* next pointer, NULL for last in list */ + struct snmp_varbind *next; + /* previous pointer, NULL for first in list */ + struct snmp_varbind *prev; + + /* object identifier length (in s32_t) */ + u8_t ident_len; + /* object identifier array */ + s32_t *ident; + + /* object value ASN1 type */ + u8_t value_type; + /* object value length (in u8_t) */ + u8_t value_len; + /* object value */ + void *value; + + /* encoding varbind seq length length */ + u8_t seqlenlen; + /* encoding object identifier length length */ + u8_t olenlen; + /* encoding object value length length */ + u8_t vlenlen; + /* encoding varbind seq length */ + u16_t seqlen; + /* encoding object identifier length */ + u16_t olen; + /* encoding object value length */ + u16_t vlen; +}; + +struct snmp_varbind_root +{ + struct snmp_varbind *head; + struct snmp_varbind *tail; + /* number of variable bindings in list */ + u8_t count; + /* encoding varbind-list seq length length */ + u8_t seqlenlen; + /* encoding varbind-list seq length */ + u16_t seqlen; +}; + +/** output response message header length fields */ +struct snmp_resp_header_lengths +{ + /* encoding error-index length length */ + u8_t erridxlenlen; + /* encoding error-status length length */ + u8_t errstatlenlen; + /* encoding request id length length */ + u8_t ridlenlen; + /* encoding pdu length length */ + u8_t pdulenlen; + /* encoding community length length */ + u8_t comlenlen; + /* encoding version length length */ + u8_t verlenlen; + /* encoding sequence length length */ + u8_t seqlenlen; + + /* encoding error-index length */ + u16_t erridxlen; + /* encoding error-status length */ + u16_t errstatlen; + /* encoding request id length */ + u16_t ridlen; + /* encoding pdu length */ + u16_t pdulen; + /* encoding community length */ + u16_t comlen; + /* encoding version length */ + u16_t verlen; + /* encoding sequence length */ + u16_t seqlen; +}; + +/** output response message header length fields */ +struct snmp_trap_header_lengths +{ + /* encoding timestamp length length */ + u8_t tslenlen; + /* encoding specific-trap length length */ + u8_t strplenlen; + /* encoding generic-trap length length */ + u8_t gtrplenlen; + /* encoding agent-addr length length */ + u8_t aaddrlenlen; + /* encoding enterprise-id length length */ + u8_t eidlenlen; + /* encoding pdu length length */ + u8_t pdulenlen; + /* encoding community length length */ + u8_t comlenlen; + /* encoding version length length */ + u8_t verlenlen; + /* encoding sequence length length */ + u8_t seqlenlen; + + /* encoding timestamp length */ + u16_t tslen; + /* encoding specific-trap length */ + u16_t strplen; + /* encoding generic-trap length */ + u16_t gtrplen; + /* encoding agent-addr length */ + u16_t aaddrlen; + /* encoding enterprise-id length */ + u16_t eidlen; + /* encoding pdu length */ + u16_t pdulen; + /* encoding community length */ + u16_t comlen; + /* encoding version length */ + u16_t verlen; + /* encoding sequence length */ + u16_t seqlen; +}; + +/* Accepting new SNMP messages. */ +#define SNMP_MSG_EMPTY 0 +/* Search for matching object for variable binding. */ +#define SNMP_MSG_SEARCH_OBJ 1 +/* Perform SNMP operation on in-memory object. + Pass-through states, for symmetry only. */ +#define SNMP_MSG_INTERNAL_GET_OBJDEF 2 +#define SNMP_MSG_INTERNAL_GET_VALUE 3 +#define SNMP_MSG_INTERNAL_SET_TEST 4 +#define SNMP_MSG_INTERNAL_GET_OBJDEF_S 5 +#define SNMP_MSG_INTERNAL_SET_VALUE 6 +/* Perform SNMP operation on object located externally. + In theory this could be used for building a proxy agent. + Practical use is for an enterprise spc. app. gateway. */ +#define SNMP_MSG_EXTERNAL_GET_OBJDEF 7 +#define SNMP_MSG_EXTERNAL_GET_VALUE 8 +#define SNMP_MSG_EXTERNAL_SET_TEST 9 +#define SNMP_MSG_EXTERNAL_GET_OBJDEF_S 10 +#define SNMP_MSG_EXTERNAL_SET_VALUE 11 + +#define SNMP_COMMUNITY_STR_LEN 64 +struct snmp_msg_pstat +{ + /* lwIP local port (161) binding */ + struct udp_pcb *pcb; + /* source IP address */ + struct ip_addr sip; + /* source UDP port */ + u16_t sp; + /* request type */ + u8_t rt; + /* request ID */ + s32_t rid; + /* error status */ + s32_t error_status; + /* error index */ + s32_t error_index; + /* community name (zero terminated) */ + u8_t community[SNMP_COMMUNITY_STR_LEN + 1]; + /* community string length (exclusive zero term) */ + u8_t com_strlen; + /* one out of MSG_EMPTY, MSG_DEMUX, MSG_INTERNAL, MSG_EXTERNAL_x */ + u8_t state; + /* saved arguments for MSG_EXTERNAL_x */ + struct mib_external_node *ext_mib_node; + struct snmp_name_ptr ext_name_ptr; + struct obj_def ext_object_def; + struct snmp_obj_id ext_oid; + /* index into input variable binding list */ + u8_t vb_idx; + /* ptr into input variable binding list */ + struct snmp_varbind *vb_ptr; + /* list of variable bindings from input */ + struct snmp_varbind_root invb; + /* list of variable bindings to output */ + struct snmp_varbind_root outvb; + /* output response lengths used in ASN encoding */ + struct snmp_resp_header_lengths rhl; +}; + +struct snmp_msg_trap +{ + /* lwIP local port (161) binding */ + struct udp_pcb *pcb; + /* destination IP address in network order */ + struct ip_addr dip; + + /* source enterprise ID (sysObjectID) */ + struct snmp_obj_id *enterprise; + /* source IP address, raw network order format */ + u8_t sip_raw[4]; + /* generic trap code */ + u32_t gen_trap; + /* specific trap code */ + u32_t spc_trap; + /* timestamp */ + u32_t ts; + /* list of variable bindings to output */ + struct snmp_varbind_root outvb; + /* output trap lengths used in ASN encoding */ + struct snmp_trap_header_lengths thl; +}; + +/** Agent Version constant, 0 = v1 oddity */ +extern const s32_t snmp_version; +/** Agent default "public" community string */ +extern const char snmp_publiccommunity[7]; + +extern struct snmp_msg_trap trap_msg; + +/** Agent setup, start listening to port 161. */ +void snmp_init(void); +void snmp_trap_dst_enable(u8_t dst_idx, u8_t enable); +void snmp_trap_dst_ip_set(u8_t dst_idx, struct ip_addr *dst); + +/** Varbind-list functions. */ +struct snmp_varbind* snmp_varbind_alloc(struct snmp_obj_id *oid, u8_t type, u8_t len); +void snmp_varbind_free(struct snmp_varbind *vb); +void snmp_varbind_list_free(struct snmp_varbind_root *root); +void snmp_varbind_tail_add(struct snmp_varbind_root *root, struct snmp_varbind *vb); +struct snmp_varbind* snmp_varbind_tail_remove(struct snmp_varbind_root *root); + +/** Handle an internal (recv) or external (private response) event. */ +void snmp_msg_event(u8_t request_id); +err_t snmp_send_response(struct snmp_msg_pstat *m_stat); +err_t snmp_send_trap(s8_t generic_trap, struct snmp_obj_id *eoid, s32_t specific_trap); +void snmp_coldstart_trap(void); +void snmp_authfail_trap(void); + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_SNMP */ + +#endif /* __LWIP_SNMP_MSG_H__ */ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/snmp_structs.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/snmp_structs.h new file mode 100644 index 000000000..93f4ea3c1 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/snmp_structs.h @@ -0,0 +1,264 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * Generic MIB tree structures. + * + * @todo namespace prefixes + */ + +/* + * Copyright (c) 2006 Axon Digital Design B.V., The Netherlands. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * Author: Christiaan Simons + */ + +#ifndef __LWIP_SNMP_STRUCTS_H__ +#define __LWIP_SNMP_STRUCTS_H__ + +#include "lwip/opt.h" + +#if LWIP_SNMP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/snmp.h" + +#if SNMP_PRIVATE_MIB +#include "private_mib.h" +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* MIB object instance */ +#define MIB_OBJECT_NONE 0 +#define MIB_OBJECT_SCALAR 1 +#define MIB_OBJECT_TAB 2 + +/* MIB object access */ +#define MIB_OBJECT_READ_ONLY 0 +#define MIB_OBJECT_READ_WRITE 1 +#define MIB_OBJECT_WRITE_ONLY 2 +#define MIB_OBJECT_NOT_ACCESSIBLE 3 + +/** object definition returned by (get_object_def)() */ +struct obj_def +{ + /* MIB_OBJECT_NONE (0), MIB_OBJECT_SCALAR (1), MIB_OBJECT_TAB (2) */ + u8_t instance; + /* 0 read-only, 1 read-write, 2 write-only, 3 not-accessible */ + u8_t access; + /* ASN type for this object */ + u8_t asn_type; + /* value length (host length) */ + u16_t v_len; + /* length of instance part of supplied object identifier */ + u8_t id_inst_len; + /* instance part of supplied object identifier */ + s32_t *id_inst_ptr; +}; + +struct snmp_name_ptr +{ + u8_t ident_len; + s32_t *ident; +}; + +/** MIB const scalar (.0) node */ +#define MIB_NODE_SC 0x01 +/** MIB const array node */ +#define MIB_NODE_AR 0x02 +/** MIB array node (mem_malloced from RAM) */ +#define MIB_NODE_RA 0x03 +/** MIB list root node (mem_malloced from RAM) */ +#define MIB_NODE_LR 0x04 +/** MIB node for external objects */ +#define MIB_NODE_EX 0x05 + +/** node "base class" layout, the mandatory fields for a node */ +struct mib_node +{ + /** returns struct obj_def for the given object identifier */ + void (*get_object_def)(u8_t ident_len, s32_t *ident, struct obj_def *od); + /** returns object value for the given object identifier, + @note the caller must allocate at least len bytes for the value */ + void (*get_value)(struct obj_def *od, u16_t len, void *value); + /** tests length and/or range BEFORE setting */ + u8_t (*set_test)(struct obj_def *od, u16_t len, void *value); + /** sets object value, only to be called when set_test() */ + void (*set_value)(struct obj_def *od, u16_t len, void *value); + /** One out of MIB_NODE_AR, MIB_NODE_LR or MIB_NODE_EX */ + const u8_t node_type; + /* array or max list length */ + const u16_t maxlength; +}; + +/** derived node for scalars .0 index */ +typedef struct mib_node mib_scalar_node; + +/** derived node, points to a fixed size const array + of sub-identifiers plus a 'child' pointer */ +struct mib_array_node +{ + /* inherited "base class" members */ + void (* const get_object_def)(u8_t ident_len, s32_t *ident, struct obj_def *od); + void (* const get_value)(struct obj_def *od, u16_t len, void *value); + u8_t (*set_test)(struct obj_def *od, u16_t len, void *value); + void (*set_value)(struct obj_def *od, u16_t len, void *value); + + const u8_t node_type; + const u16_t maxlength; + + /* aditional struct members */ + const s32_t *objid; + struct mib_node* const *nptr; +}; + +/** derived node, points to a fixed size mem_malloced array + of sub-identifiers plus a 'child' pointer */ +struct mib_ram_array_node +{ + /* inherited "base class" members */ + void (*get_object_def)(u8_t ident_len, s32_t *ident, struct obj_def *od); + void (*get_value)(struct obj_def *od, u16_t len, void *value); + u8_t (*set_test)(struct obj_def *od, u16_t len, void *value); + void (*set_value)(struct obj_def *od, u16_t len, void *value); + + u8_t node_type; + u16_t maxlength; + + /* aditional struct members */ + s32_t *objid; + struct mib_node **nptr; +}; + +struct mib_list_node +{ + struct mib_list_node *prev; + struct mib_list_node *next; + s32_t objid; + struct mib_node *nptr; +}; + +/** derived node, points to a doubly linked list + of sub-identifiers plus a 'child' pointer */ +struct mib_list_rootnode +{ + /* inherited "base class" members */ + void (*get_object_def)(u8_t ident_len, s32_t *ident, struct obj_def *od); + void (*get_value)(struct obj_def *od, u16_t len, void *value); + u8_t (*set_test)(struct obj_def *od, u16_t len, void *value); + void (*set_value)(struct obj_def *od, u16_t len, void *value); + + u8_t node_type; + u16_t maxlength; + + /* aditional struct members */ + struct mib_list_node *head; + struct mib_list_node *tail; + /* counts list nodes in list */ + u16_t count; +}; + +/** derived node, has access functions for mib object in external memory or device + using 'tree_level' and 'idx', with a range 0 .. (level_length() - 1) */ +struct mib_external_node +{ + /* inherited "base class" members */ + void (*get_object_def)(u8_t ident_len, s32_t *ident, struct obj_def *od); + void (*get_value)(struct obj_def *od, u16_t len, void *value); + u8_t (*set_test)(struct obj_def *od, u16_t len, void *value); + void (*set_value)(struct obj_def *od, u16_t len, void *value); + + u8_t node_type; + u16_t maxlength; + + /* aditional struct members */ + /** points to an extenal (in memory) record of some sort of addressing + information, passed to and interpreted by the funtions below */ + void* addr_inf; + /** tree levels under this node */ + u8_t tree_levels; + /** number of objects at this level */ + u16_t (*level_length)(void* addr_inf, u8_t level); + /** compares object sub identifier with external id + return zero when equal, nonzero when unequal */ + s32_t (*ident_cmp)(void* addr_inf, u8_t level, u16_t idx, s32_t sub_id); + void (*get_objid)(void* addr_inf, u8_t level, u16_t idx, s32_t *sub_id); + + /** async Questions */ + void (*get_object_def_q)(void* addr_inf, u8_t rid, u8_t ident_len, s32_t *ident); + void (*get_value_q)(u8_t rid, struct obj_def *od); + void (*set_test_q)(u8_t rid, struct obj_def *od); + void (*set_value_q)(u8_t rid, struct obj_def *od, u16_t len, void *value); + /** async Answers */ + void (*get_object_def_a)(u8_t rid, u8_t ident_len, s32_t *ident, struct obj_def *od); + void (*get_value_a)(u8_t rid, struct obj_def *od, u16_t len, void *value); + u8_t (*set_test_a)(u8_t rid, struct obj_def *od, u16_t len, void *value); + void (*set_value_a)(u8_t rid, struct obj_def *od, u16_t len, void *value); + /** async Panic Close (agent returns error reply, + e.g. used for external transaction cleanup) */ + void (*get_object_def_pc)(u8_t rid, u8_t ident_len, s32_t *ident); + void (*get_value_pc)(u8_t rid, struct obj_def *od); + void (*set_test_pc)(u8_t rid, struct obj_def *od); + void (*set_value_pc)(u8_t rid, struct obj_def *od); +}; + +/** export MIB tree from mib2.c */ +extern const struct mib_array_node internet; + +/** dummy function pointers for non-leaf MIB nodes from mib2.c */ +void noleafs_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od); +void noleafs_get_value(struct obj_def *od, u16_t len, void *value); +u8_t noleafs_set_test(struct obj_def *od, u16_t len, void *value); +void noleafs_set_value(struct obj_def *od, u16_t len, void *value); + +void snmp_oidtoip(s32_t *ident, struct ip_addr *ip); +void snmp_iptooid(struct ip_addr *ip, s32_t *ident); +void snmp_ifindextonetif(s32_t ifindex, struct netif **netif); +void snmp_netiftoifindex(struct netif *netif, s32_t *ifidx); + +struct mib_list_node* snmp_mib_ln_alloc(s32_t id); +void snmp_mib_ln_free(struct mib_list_node *ln); +struct mib_list_rootnode* snmp_mib_lrn_alloc(void); +void snmp_mib_lrn_free(struct mib_list_rootnode *lrn); + +s8_t snmp_mib_node_insert(struct mib_list_rootnode *rn, s32_t objid, struct mib_list_node **insn); +s8_t snmp_mib_node_find(struct mib_list_rootnode *rn, s32_t objid, struct mib_list_node **fn); +struct mib_list_rootnode *snmp_mib_node_delete(struct mib_list_rootnode *rn, struct mib_list_node *n); + +struct mib_node* snmp_search_tree(struct mib_node *node, u8_t ident_len, s32_t *ident, struct snmp_name_ptr *np); +struct mib_node* snmp_expand_tree(struct mib_node *node, u8_t ident_len, s32_t *ident, struct snmp_obj_id *oidret); +u8_t snmp_iso_prefix_tst(u8_t ident_len, s32_t *ident); +u8_t snmp_iso_prefix_expand(u8_t ident_len, s32_t *ident, struct snmp_obj_id *oidret); + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_SNMP */ + +#endif /* __LWIP_SNMP_STRUCTS_H__ */ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/sockets.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/sockets.h new file mode 100644 index 000000000..675c1f740 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/sockets.h @@ -0,0 +1,359 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + + +#ifndef __LWIP_SOCKETS_H__ +#define __LWIP_SOCKETS_H__ + +#include "lwip/opt.h" + +#if LWIP_SOCKET /* don't build if not configured for use in lwipopts.h */ + +#include /* for size_t */ + +#include "lwip/ip_addr.h" +#include "lwip/inet.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* members are in network byte order */ +struct sockaddr_in { + u8_t sin_len; + u8_t sin_family; + u16_t sin_port; + struct in_addr sin_addr; + char sin_zero[8]; +}; + +struct sockaddr { + u8_t sa_len; + u8_t sa_family; + char sa_data[14]; +}; + +#ifndef socklen_t +# define socklen_t u32_t +#endif + +/* Socket protocol types (TCP/UDP/RAW) */ +#define SOCK_STREAM 1 +#define SOCK_DGRAM 2 +#define SOCK_RAW 3 + +/* + * Option flags per-socket. These must match the SOF_ flags in ip.h! + */ +#define SO_DEBUG 0x0001 /* Unimplemented: turn on debugging info recording */ +#define SO_ACCEPTCONN 0x0002 /* socket has had listen() */ +#define SO_REUSEADDR 0x0004 /* Unimplemented: allow local address reuse */ +#define SO_KEEPALIVE 0x0008 /* keep connections alive */ +#define SO_DONTROUTE 0x0010 /* Unimplemented: just use interface addresses */ +#define SO_BROADCAST 0x0020 /* permit to send and to receive broadcast messages (see IP_SOF_BROADCAST option) */ +#define SO_USELOOPBACK 0x0040 /* Unimplemented: bypass hardware when possible */ +#define SO_LINGER 0x0080 /* linger on close if data present */ +#define SO_OOBINLINE 0x0100 /* Unimplemented: leave received OOB data in line */ +#define SO_REUSEPORT 0x0200 /* Unimplemented: allow local address & port reuse */ + +#define SO_DONTLINGER ((int)(~SO_LINGER)) + +/* + * Additional options, not kept in so_options. + */ +#define SO_SNDBUF 0x1001 /* Unimplemented: send buffer size */ +#define SO_RCVBUF 0x1002 /* receive buffer size */ +#define SO_SNDLOWAT 0x1003 /* Unimplemented: send low-water mark */ +#define SO_RCVLOWAT 0x1004 /* Unimplemented: receive low-water mark */ +#define SO_SNDTIMEO 0x1005 /* Unimplemented: send timeout */ +#define SO_RCVTIMEO 0x1006 /* receive timeout */ +#define SO_ERROR 0x1007 /* get error status and clear */ +#define SO_TYPE 0x1008 /* get socket type */ +#define SO_CONTIMEO 0x1009 /* Unimplemented: connect timeout */ +#define SO_NO_CHECK 0x100a /* don't create UDP checksum */ + + +/* + * Structure used for manipulating linger option. + */ +struct linger { + int l_onoff; /* option on/off */ + int l_linger; /* linger time */ +}; + +/* + * Level number for (get/set)sockopt() to apply to socket itself. + */ +#define SOL_SOCKET 0xfff /* options for socket level */ + + +#define AF_UNSPEC 0 +#define AF_INET 2 +#define PF_INET AF_INET +#define PF_UNSPEC AF_UNSPEC + +#define IPPROTO_IP 0 +#define IPPROTO_TCP 6 +#define IPPROTO_UDP 17 +#define IPPROTO_UDPLITE 136 + +/* Flags we can use with send and recv. */ +#define MSG_PEEK 0x01 /* Peeks at an incoming message */ +#define MSG_WAITALL 0x02 /* Unimplemented: Requests that the function block until the full amount of data requested can be returned */ +#define MSG_OOB 0x04 /* Unimplemented: Requests out-of-band data. The significance and semantics of out-of-band data are protocol-specific */ +#define MSG_DONTWAIT 0x08 /* Nonblocking i/o for this operation only */ +#define MSG_MORE 0x10 /* Sender will send more */ + + +/* + * Options for level IPPROTO_IP + */ +#define IP_TOS 1 +#define IP_TTL 2 + +#if LWIP_TCP +/* + * Options for level IPPROTO_TCP + */ +#define TCP_NODELAY 0x01 /* don't delay send to coalesce packets */ +#define TCP_KEEPALIVE 0x02 /* send KEEPALIVE probes when idle for pcb->keep_idle milliseconds */ +#define TCP_KEEPIDLE 0x03 /* set pcb->keep_idle - Same as TCP_KEEPALIVE, but use seconds for get/setsockopt */ +#define TCP_KEEPINTVL 0x04 /* set pcb->keep_intvl - Use seconds for get/setsockopt */ +#define TCP_KEEPCNT 0x05 /* set pcb->keep_cnt - Use number of probes sent for get/setsockopt */ +#endif /* LWIP_TCP */ + +#if LWIP_UDP && LWIP_UDPLITE +/* + * Options for level IPPROTO_UDPLITE + */ +#define UDPLITE_SEND_CSCOV 0x01 /* sender checksum coverage */ +#define UDPLITE_RECV_CSCOV 0x02 /* minimal receiver checksum coverage */ +#endif /* LWIP_UDP && LWIP_UDPLITE*/ + + +#if LWIP_IGMP +/* + * Options and types for UDP multicast traffic handling + */ +#define IP_ADD_MEMBERSHIP 3 +#define IP_DROP_MEMBERSHIP 4 +#define IP_MULTICAST_TTL 5 +#define IP_MULTICAST_IF 6 +#define IP_MULTICAST_LOOP 7 + +typedef struct ip_mreq { + struct in_addr imr_multiaddr; /* IP multicast address of group */ + struct in_addr imr_interface; /* local IP address of interface */ +} ip_mreq; +#endif /* LWIP_IGMP */ + +/* + * The Type of Service provides an indication of the abstract + * parameters of the quality of service desired. These parameters are + * to be used to guide the selection of the actual service parameters + * when transmitting a datagram through a particular network. Several + * networks offer service precedence, which somehow treats high + * precedence traffic as more important than other traffic (generally + * by accepting only traffic above a certain precedence at time of high + * load). The major choice is a three way tradeoff between low-delay, + * high-reliability, and high-throughput. + * The use of the Delay, Throughput, and Reliability indications may + * increase the cost (in some sense) of the service. In many networks + * better performance for one of these parameters is coupled with worse + * performance on another. Except for very unusual cases at most two + * of these three indications should be set. + */ +#define IPTOS_TOS_MASK 0x1E +#define IPTOS_TOS(tos) ((tos) & IPTOS_TOS_MASK) +#define IPTOS_LOWDELAY 0x10 +#define IPTOS_THROUGHPUT 0x08 +#define IPTOS_RELIABILITY 0x04 +#define IPTOS_LOWCOST 0x02 +#define IPTOS_MINCOST IPTOS_LOWCOST + +/* + * The Network Control precedence designation is intended to be used + * within a network only. The actual use and control of that + * designation is up to each network. The Internetwork Control + * designation is intended for use by gateway control originators only. + * If the actual use of these precedence designations is of concern to + * a particular network, it is the responsibility of that network to + * control the access to, and use of, those precedence designations. + */ +#define IPTOS_PREC_MASK 0xe0 +#define IPTOS_PREC(tos) ((tos) & IPTOS_PREC_MASK) +#define IPTOS_PREC_NETCONTROL 0xe0 +#define IPTOS_PREC_INTERNETCONTROL 0xc0 +#define IPTOS_PREC_CRITIC_ECP 0xa0 +#define IPTOS_PREC_FLASHOVERRIDE 0x80 +#define IPTOS_PREC_FLASH 0x60 +#define IPTOS_PREC_IMMEDIATE 0x40 +#define IPTOS_PREC_PRIORITY 0x20 +#define IPTOS_PREC_ROUTINE 0x00 + + +/* + * Commands for ioctlsocket(), taken from the BSD file fcntl.h. + * lwip_ioctl only supports FIONREAD and FIONBIO, for now + * + * Ioctl's have the command encoded in the lower word, + * and the size of any in or out parameters in the upper + * word. The high 2 bits of the upper word are used + * to encode the in/out status of the parameter; for now + * we restrict parameters to at most 128 bytes. + */ +#if !defined(FIONREAD) || !defined(FIONBIO) +#define IOCPARM_MASK 0x7fU /* parameters must be < 128 bytes */ +#define IOC_VOID 0x20000000UL /* no parameters */ +#define IOC_OUT 0x40000000UL /* copy out parameters */ +#define IOC_IN 0x80000000UL /* copy in parameters */ +#define IOC_INOUT (IOC_IN|IOC_OUT) + /* 0x20000000 distinguishes new & + old ioctl's */ +#define _IO(x,y) (IOC_VOID|((x)<<8)|(y)) + +#define _IOR(x,y,t) (IOC_OUT|(((long)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y)) + +#define _IOW(x,y,t) (IOC_IN|(((long)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y)) +#endif /* !defined(FIONREAD) || !defined(FIONBIO) */ + +#ifndef FIONREAD +#define FIONREAD _IOR('f', 127, unsigned long) /* get # bytes to read */ +#endif +#ifndef FIONBIO +#define FIONBIO _IOW('f', 126, unsigned long) /* set/clear non-blocking i/o */ +#endif + +/* Socket I/O Controls: unimplemented */ +#ifndef SIOCSHIWAT +#define SIOCSHIWAT _IOW('s', 0, unsigned long) /* set high watermark */ +#define SIOCGHIWAT _IOR('s', 1, unsigned long) /* get high watermark */ +#define SIOCSLOWAT _IOW('s', 2, unsigned long) /* set low watermark */ +#define SIOCGLOWAT _IOR('s', 3, unsigned long) /* get low watermark */ +#define SIOCATMARK _IOR('s', 7, unsigned long) /* at oob mark? */ +#endif + +/* Socket flags: */ +#ifndef O_NONBLOCK +#define O_NONBLOCK 04000U +#endif + +/* FD_SET used for lwip_select */ +#ifndef FD_SET + #undef FD_SETSIZE + /* Make FD_SETSIZE match NUM_SOCKETS in socket.c */ + #define FD_SETSIZE MEMP_NUM_NETCONN + #define FD_SET(n, p) ((p)->fd_bits[(n)/8] |= (1 << ((n) & 7))) + #define FD_CLR(n, p) ((p)->fd_bits[(n)/8] &= ~(1 << ((n) & 7))) + #define FD_ISSET(n,p) ((p)->fd_bits[(n)/8] & (1 << ((n) & 7))) + #define FD_ZERO(p) memset((void*)(p),0,sizeof(*(p))) + + typedef struct fd_set { + unsigned char fd_bits [(FD_SETSIZE+7)/8]; + } fd_set; + +#endif /* FD_SET */ + +/** LWIP_TIMEVAL_PRIVATE: if you want to use the struct timeval provided + * by your system, set this to 0 and include in cc.h */ +#ifndef LWIP_TIMEVAL_PRIVATE +#define LWIP_TIMEVAL_PRIVATE 1 +#endif + +#if LWIP_TIMEVAL_PRIVATE +struct timeval { + long tv_sec; /* seconds */ + long tv_usec; /* and microseconds */ +}; +#endif /* LWIP_TIMEVAL_PRIVATE */ + +void lwip_socket_init(void); + +int lwip_accept(int s, struct sockaddr *addr, socklen_t *addrlen); +int lwip_bind(int s, const struct sockaddr *name, socklen_t namelen); +int lwip_shutdown(int s, int how); +int lwip_getpeername (int s, struct sockaddr *name, socklen_t *namelen); +int lwip_getsockname (int s, struct sockaddr *name, socklen_t *namelen); +int lwip_getsockopt (int s, int level, int optname, void *optval, socklen_t *optlen); +int lwip_setsockopt (int s, int level, int optname, const void *optval, socklen_t optlen); +int lwip_close(int s); +int lwip_connect(int s, const struct sockaddr *name, socklen_t namelen); +int lwip_listen(int s, int backlog); +int lwip_recv(int s, void *mem, size_t len, int flags); +int lwip_read(int s, void *mem, size_t len); +int lwip_recvfrom(int s, void *mem, size_t len, int flags, + struct sockaddr *from, socklen_t *fromlen); +int lwip_send(int s, const void *dataptr, size_t size, int flags); +int lwip_sendto(int s, const void *dataptr, size_t size, int flags, + const struct sockaddr *to, socklen_t tolen); +int lwip_socket(int domain, int type, int protocol); +int lwip_write(int s, const void *dataptr, size_t size); +int lwip_select(int maxfdp1, fd_set *readset, fd_set *writeset, fd_set *exceptset, + struct timeval *timeout); +int lwip_ioctl(int s, long cmd, void *argp); + +#if LWIP_COMPAT_SOCKETS +#define accept(a,b,c) lwip_accept(a,b,c) +#define bind(a,b,c) lwip_bind(a,b,c) +#define shutdown(a,b) lwip_shutdown(a,b) +#define closesocket(s) lwip_close(s) +#define connect(a,b,c) lwip_connect(a,b,c) +#define getsockname(a,b,c) lwip_getsockname(a,b,c) +#define getpeername(a,b,c) lwip_getpeername(a,b,c) +#define setsockopt(a,b,c,d,e) lwip_setsockopt(a,b,c,d,e) +#define getsockopt(a,b,c,d,e) lwip_getsockopt(a,b,c,d,e) +#define listen(a,b) lwip_listen(a,b) +#define recv(a,b,c,d) lwip_recv(a,b,c,d) +#define recvfrom(a,b,c,d,e,f) lwip_recvfrom(a,b,c,d,e,f) +#define send(a,b,c,d) lwip_send(a,b,c,d) +#define sendto(a,b,c,d,e,f) lwip_sendto(a,b,c,d,e,f) +#define socket(a,b,c) lwip_socket(a,b,c) +#define select(a,b,c,d,e) lwip_select(a,b,c,d,e) +#define ioctlsocket(a,b,c) lwip_ioctl(a,b,c) + +#if LWIP_POSIX_SOCKETS_IO_NAMES +#define read(a,b,c) lwip_read(a,b,c) +#define write(a,b,c) lwip_write(a,b,c) +#define close(s) lwip_close(s) +#endif /* LWIP_POSIX_SOCKETS_IO_NAMES */ + +#endif /* LWIP_COMPAT_SOCKETS */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_SOCKET */ + +#endif /* __LWIP_SOCKETS_H__ */ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/stats.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/stats.h new file mode 100644 index 000000000..4aec5e544 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/stats.h @@ -0,0 +1,285 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_STATS_H__ +#define __LWIP_STATS_H__ + +#include "lwip/opt.h" + +#include "lwip/mem.h" +#include "lwip/memp.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#if LWIP_STATS + +#ifndef LWIP_STATS_LARGE +#define LWIP_STATS_LARGE 0 +#endif + +#if LWIP_STATS_LARGE +#define STAT_COUNTER u32_t +#define STAT_COUNTER_F U32_F +#else +#define STAT_COUNTER u16_t +#define STAT_COUNTER_F U16_F +#endif + +struct stats_proto { + STAT_COUNTER xmit; /* Transmitted packets. */ + STAT_COUNTER recv; /* Received packets. */ + STAT_COUNTER fw; /* Forwarded packets. */ + STAT_COUNTER drop; /* Dropped packets. */ + STAT_COUNTER chkerr; /* Checksum error. */ + STAT_COUNTER lenerr; /* Invalid length error. */ + STAT_COUNTER memerr; /* Out of memory error. */ + STAT_COUNTER rterr; /* Routing error. */ + STAT_COUNTER proterr; /* Protocol error. */ + STAT_COUNTER opterr; /* Error in options. */ + STAT_COUNTER err; /* Misc error. */ + STAT_COUNTER cachehit; +}; + +struct stats_igmp { + STAT_COUNTER lenerr; /* Invalid length error. */ + STAT_COUNTER chkerr; /* Checksum error. */ + STAT_COUNTER v1_rxed; /* */ + STAT_COUNTER join_sent; /* */ + STAT_COUNTER leave_sent; /* */ + STAT_COUNTER unicast_query; /* */ + STAT_COUNTER report_sent; /* */ + STAT_COUNTER report_rxed; /* */ + STAT_COUNTER group_query_rxed; /* */ +}; + +struct stats_mem { + mem_size_t avail; + mem_size_t used; + mem_size_t max; + STAT_COUNTER err; + STAT_COUNTER illegal; +}; + +struct stats_syselem { + STAT_COUNTER used; + STAT_COUNTER max; + STAT_COUNTER err; +}; + +struct stats_sys { + struct stats_syselem sem; + struct stats_syselem mbox; +}; + +struct stats_ { +#if LINK_STATS + struct stats_proto link; +#endif +#if ETHARP_STATS + struct stats_proto etharp; +#endif +#if IPFRAG_STATS + struct stats_proto ip_frag; +#endif +#if IP_STATS + struct stats_proto ip; +#endif +#if ICMP_STATS + struct stats_proto icmp; +#endif +#if IGMP_STATS + struct stats_igmp igmp; +#endif +#if UDP_STATS + struct stats_proto udp; +#endif +#if TCP_STATS + struct stats_proto tcp; +#endif +#if MEM_STATS + struct stats_mem mem; +#endif +#if MEMP_STATS + struct stats_mem memp[MEMP_MAX]; +#endif +#if SYS_STATS + struct stats_sys sys; +#endif +}; + +extern struct stats_ lwip_stats; + +#define stats_init() /* Compatibility define, not init needed. */ + +#define STATS_INC(x) ++lwip_stats.x +#define STATS_DEC(x) --lwip_stats.x +#else +#define stats_init() +#define STATS_INC(x) +#define STATS_DEC(x) +#endif /* LWIP_STATS */ + +#if TCP_STATS +#define TCP_STATS_INC(x) STATS_INC(x) +#define TCP_STATS_DISPLAY() stats_display_proto(&lwip_stats.tcp, "TCP") +#else +#define TCP_STATS_INC(x) +#define TCP_STATS_DISPLAY() +#endif + +#if UDP_STATS +#define UDP_STATS_INC(x) STATS_INC(x) +#define UDP_STATS_DISPLAY() stats_display_proto(&lwip_stats.udp, "UDP") +#else +#define UDP_STATS_INC(x) +#define UDP_STATS_DISPLAY() +#endif + +#if ICMP_STATS +#define ICMP_STATS_INC(x) STATS_INC(x) +#define ICMP_STATS_DISPLAY() stats_display_proto(&lwip_stats.icmp, "ICMP") +#else +#define ICMP_STATS_INC(x) +#define ICMP_STATS_DISPLAY() +#endif + +#if IGMP_STATS +#define IGMP_STATS_INC(x) STATS_INC(x) +#define IGMP_STATS_DISPLAY() stats_display_igmp(&lwip_stats.igmp) +#else +#define IGMP_STATS_INC(x) +#define IGMP_STATS_DISPLAY() +#endif + +#if IP_STATS +#define IP_STATS_INC(x) STATS_INC(x) +#define IP_STATS_DISPLAY() stats_display_proto(&lwip_stats.ip, "IP") +#else +#define IP_STATS_INC(x) +#define IP_STATS_DISPLAY() +#endif + +#if IPFRAG_STATS +#define IPFRAG_STATS_INC(x) STATS_INC(x) +#define IPFRAG_STATS_DISPLAY() stats_display_proto(&lwip_stats.ip_frag, "IP_FRAG") +#else +#define IPFRAG_STATS_INC(x) +#define IPFRAG_STATS_DISPLAY() +#endif + +#if ETHARP_STATS +#define ETHARP_STATS_INC(x) STATS_INC(x) +#define ETHARP_STATS_DISPLAY() stats_display_proto(&lwip_stats.etharp, "ETHARP") +#else +#define ETHARP_STATS_INC(x) +#define ETHARP_STATS_DISPLAY() +#endif + +#if LINK_STATS +#define LINK_STATS_INC(x) STATS_INC(x) +#define LINK_STATS_DISPLAY() stats_display_proto(&lwip_stats.link, "LINK") +#else +#define LINK_STATS_INC(x) +#define LINK_STATS_DISPLAY() +#endif + +#if MEM_STATS +#define MEM_STATS_AVAIL(x, y) lwip_stats.mem.x = y +#define MEM_STATS_INC(x) STATS_INC(mem.x) +#define MEM_STATS_INC_USED(x, y) do { lwip_stats.mem.used += y; \ + if (lwip_stats.mem.max < lwip_stats.mem.used) { \ + lwip_stats.mem.max = lwip_stats.mem.used; \ + } \ + } while(0) +#define MEM_STATS_DEC_USED(x, y) lwip_stats.mem.x -= y +#define MEM_STATS_DISPLAY() stats_display_mem(&lwip_stats.mem, "HEAP") +#else +#define MEM_STATS_AVAIL(x, y) +#define MEM_STATS_INC(x) +#define MEM_STATS_INC_USED(x, y) +#define MEM_STATS_DEC_USED(x, y) +#define MEM_STATS_DISPLAY() +#endif + +#if MEMP_STATS +#define MEMP_STATS_AVAIL(x, i, y) lwip_stats.memp[i].x = y +#define MEMP_STATS_INC(x, i) STATS_INC(memp[i].x) +#define MEMP_STATS_DEC(x, i) STATS_DEC(memp[i].x) +#define MEMP_STATS_INC_USED(x, i) do { ++lwip_stats.memp[i].used; \ + if (lwip_stats.memp[i].max < lwip_stats.memp[i].used) { \ + lwip_stats.memp[i].max = lwip_stats.memp[i].used; \ + } \ + } while(0) +#define MEMP_STATS_DISPLAY(i) stats_display_memp(&lwip_stats.memp[i], i) +#else +#define MEMP_STATS_AVAIL(x, i, y) +#define MEMP_STATS_INC(x, i) +#define MEMP_STATS_DEC(x, i) +#define MEMP_STATS_INC_USED(x, i) +#define MEMP_STATS_DISPLAY(i) +#endif + +#if SYS_STATS +#define SYS_STATS_INC(x) STATS_INC(sys.x) +#define SYS_STATS_DEC(x) STATS_DEC(sys.x) +#define SYS_STATS_DISPLAY() stats_display_sys(&lwip_stats.sys) +#else +#define SYS_STATS_INC(x) +#define SYS_STATS_DEC(x) +#define SYS_STATS_DISPLAY() +#endif + +/* Display of statistics */ +#if LWIP_STATS_DISPLAY +void stats_display(void); +void stats_display_proto(struct stats_proto *proto, char *name); +void stats_display_igmp(struct stats_igmp *igmp); +void stats_display_mem(struct stats_mem *mem, char *name); +void stats_display_memp(struct stats_mem *mem, int index); +void stats_display_sys(struct stats_sys *sys); +#else +#define stats_display() +#define stats_display_proto(proto, name) +#define stats_display_igmp(igmp) +#define stats_display_mem(mem, name) +#define stats_display_memp(mem, index) +#define stats_display_sys(sys) +#endif /* LWIP_STATS_DISPLAY */ + +#ifdef __cplusplus +} +#endif + +#endif /* __LWIP_STATS_H__ */ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/sys.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/sys.h new file mode 100644 index 000000000..9a4f02abc --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/sys.h @@ -0,0 +1,245 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_SYS_H__ +#define __LWIP_SYS_H__ + +#include "lwip/opt.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#if NO_SYS + +/* For a totally minimal and standalone system, we provide null + definitions of the sys_ functions. */ +typedef u8_t sys_sem_t; +typedef u8_t sys_mbox_t; +struct sys_timeo {u8_t dummy;}; + +#define sys_init() +#define sys_timeout(m,h,a) +#define sys_untimeout(m,a) +#define sys_sem_new(c) c +#define sys_sem_signal(s) +#define sys_sem_wait(s) +#define sys_sem_wait_timeout(s,t) +#define sys_arch_sem_wait(s,t) +#define sys_sem_free(s) +#define sys_mbox_new(s) 0 +#define sys_mbox_fetch(m,d) +#define sys_mbox_tryfetch(m,d) +#define sys_mbox_post(m,d) +#define sys_mbox_trypost(m,d) +#define sys_mbox_free(m) + +#define sys_thread_new(n,t,a,s,p) + +#else /* NO_SYS */ + +/** Return code for timeouts from sys_arch_mbox_fetch and sys_arch_sem_wait */ +#define SYS_ARCH_TIMEOUT 0xffffffffUL + +/* sys_mbox_tryfetch returns SYS_MBOX_EMPTY if appropriate. + * For now we use the same magic value, but we allow this to change in future. + */ +#define SYS_MBOX_EMPTY SYS_ARCH_TIMEOUT + +#include "lwip/err.h" +#include "arch/sys_arch.h" + +typedef void (* sys_timeout_handler)(void *arg); + +struct sys_timeo { + struct sys_timeo *next; + u32_t time; + sys_timeout_handler h; + void *arg; +}; + +struct sys_timeouts { + struct sys_timeo *next; +}; + +/* sys_init() must be called before anthing else. */ +void sys_init(void); + +/* + * sys_timeout(): + * + * Schedule a timeout a specified amount of milliseconds in the + * future. When the timeout occurs, the specified timeout handler will + * be called. The handler will be passed the "arg" argument when + * called. + * + */ +void sys_timeout(u32_t msecs, sys_timeout_handler h, void *arg); +void sys_untimeout(sys_timeout_handler h, void *arg); +struct sys_timeouts *sys_arch_timeouts(void); + +/* Semaphore functions. */ +sys_sem_t sys_sem_new(u8_t count); +void sys_sem_signal(sys_sem_t sem); +u32_t sys_arch_sem_wait(sys_sem_t sem, u32_t timeout); +void sys_sem_free(sys_sem_t sem); +void sys_sem_wait(sys_sem_t sem); +int sys_sem_wait_timeout(sys_sem_t sem, u32_t timeout); + +/* Time functions. */ +#ifndef sys_msleep +void sys_msleep(u32_t ms); /* only has a (close to) 1 jiffy resolution. */ +#endif +#ifndef sys_jiffies +u32_t sys_jiffies(void); /* since power up. */ +#endif + +/* Mailbox functions. */ +sys_mbox_t sys_mbox_new(int size); +void sys_mbox_post(sys_mbox_t mbox, void *msg); +err_t sys_mbox_trypost(sys_mbox_t mbox, void *msg); +u32_t sys_arch_mbox_fetch(sys_mbox_t mbox, void **msg, u32_t timeout); +#ifndef sys_arch_mbox_tryfetch /* Allow port to override with a macro */ +u32_t sys_arch_mbox_tryfetch(sys_mbox_t mbox, void **msg); +#endif +/* For now, we map straight to sys_arch implementation. */ +#define sys_mbox_tryfetch(mbox, msg) sys_arch_mbox_tryfetch(mbox, msg) +void sys_mbox_free(sys_mbox_t mbox); +void sys_mbox_fetch(sys_mbox_t mbox, void **msg); + +/* Thread functions. */ +sys_thread_t sys_thread_new(char *name, void (* thread)(void *arg), void *arg, int stacksize, int prio); + +#endif /* NO_SYS */ + +/** Returns the current time in milliseconds. */ +u32_t sys_now(void); + +/* Critical Region Protection */ +/* These functions must be implemented in the sys_arch.c file. + In some implementations they can provide a more light-weight protection + mechanism than using semaphores. Otherwise semaphores can be used for + implementation */ +#ifndef SYS_ARCH_PROTECT +/** SYS_LIGHTWEIGHT_PROT + * define SYS_LIGHTWEIGHT_PROT in lwipopts.h if you want inter-task protection + * for certain critical regions during buffer allocation, deallocation and memory + * allocation and deallocation. + */ +#if SYS_LIGHTWEIGHT_PROT + +/** SYS_ARCH_DECL_PROTECT + * declare a protection variable. This macro will default to defining a variable of + * type sys_prot_t. If a particular port needs a different implementation, then + * this macro may be defined in sys_arch.h. + */ +#define SYS_ARCH_DECL_PROTECT(lev) sys_prot_t lev +/** SYS_ARCH_PROTECT + * Perform a "fast" protect. This could be implemented by + * disabling interrupts for an embedded system or by using a semaphore or + * mutex. The implementation should allow calling SYS_ARCH_PROTECT when + * already protected. The old protection level is returned in the variable + * "lev". This macro will default to calling the sys_arch_protect() function + * which should be implemented in sys_arch.c. If a particular port needs a + * different implementation, then this macro may be defined in sys_arch.h + */ +#define SYS_ARCH_PROTECT(lev) lev = sys_arch_protect() +/** SYS_ARCH_UNPROTECT + * Perform a "fast" set of the protection level to "lev". This could be + * implemented by setting the interrupt level to "lev" within the MACRO or by + * using a semaphore or mutex. This macro will default to calling the + * sys_arch_unprotect() function which should be implemented in + * sys_arch.c. If a particular port needs a different implementation, then + * this macro may be defined in sys_arch.h + */ +#define SYS_ARCH_UNPROTECT(lev) sys_arch_unprotect(lev) +sys_prot_t sys_arch_protect(void); +void sys_arch_unprotect(sys_prot_t pval); + +#else + +#define SYS_ARCH_DECL_PROTECT(lev) +#define SYS_ARCH_PROTECT(lev) +#define SYS_ARCH_UNPROTECT(lev) + +#endif /* SYS_LIGHTWEIGHT_PROT */ + +#endif /* SYS_ARCH_PROTECT */ + +/* + * Macros to set/get and increase/decrease variables in a thread-safe way. + * Use these for accessing variable that are used from more than one thread. + */ + +#ifndef SYS_ARCH_INC +#define SYS_ARCH_INC(var, val) do { \ + SYS_ARCH_DECL_PROTECT(old_level); \ + SYS_ARCH_PROTECT(old_level); \ + var += val; \ + SYS_ARCH_UNPROTECT(old_level); \ + } while(0) +#endif /* SYS_ARCH_INC */ + +#ifndef SYS_ARCH_DEC +#define SYS_ARCH_DEC(var, val) do { \ + SYS_ARCH_DECL_PROTECT(old_level); \ + SYS_ARCH_PROTECT(old_level); \ + var -= val; \ + SYS_ARCH_UNPROTECT(old_level); \ + } while(0) +#endif /* SYS_ARCH_DEC */ + +#ifndef SYS_ARCH_GET +#define SYS_ARCH_GET(var, ret) do { \ + SYS_ARCH_DECL_PROTECT(old_level); \ + SYS_ARCH_PROTECT(old_level); \ + ret = var; \ + SYS_ARCH_UNPROTECT(old_level); \ + } while(0) +#endif /* SYS_ARCH_GET */ + +#ifndef SYS_ARCH_SET +#define SYS_ARCH_SET(var, val) do { \ + SYS_ARCH_DECL_PROTECT(old_level); \ + SYS_ARCH_PROTECT(old_level); \ + var = val; \ + SYS_ARCH_UNPROTECT(old_level); \ + } while(0) +#endif /* SYS_ARCH_SET */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __LWIP_SYS_H__ */ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/tcp.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/tcp.h new file mode 100644 index 000000000..c1515744d --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/tcp.h @@ -0,0 +1,709 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_TCP_H__ +#define __LWIP_TCP_H__ + +#include "lwip/opt.h" + +#if LWIP_TCP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/sys.h" +#include "lwip/mem.h" +#include "lwip/pbuf.h" +#include "lwip/ip.h" +#include "lwip/icmp.h" +#include "lwip/err.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct tcp_pcb; + +/* Functions for interfacing with TCP: */ + +/* Lower layer interface to TCP: */ +#define tcp_init() /* Compatibility define, not init needed. */ +void tcp_tmr (void); /* Must be called every + TCP_TMR_INTERVAL + ms. (Typically 250 ms). */ +/* Application program's interface: */ +struct tcp_pcb * tcp_new (void); +struct tcp_pcb * tcp_alloc (u8_t prio); + +void tcp_arg (struct tcp_pcb *pcb, void *arg); +void tcp_accept (struct tcp_pcb *pcb, + err_t (* accept)(void *arg, struct tcp_pcb *newpcb, + err_t err)); +void tcp_recv (struct tcp_pcb *pcb, + err_t (* recv)(void *arg, struct tcp_pcb *tpcb, + struct pbuf *p, err_t err)); +void tcp_sent (struct tcp_pcb *pcb, + err_t (* sent)(void *arg, struct tcp_pcb *tpcb, + u16_t len)); +void tcp_poll (struct tcp_pcb *pcb, + err_t (* poll)(void *arg, struct tcp_pcb *tpcb), + u8_t interval); +void tcp_err (struct tcp_pcb *pcb, + void (* err)(void *arg, err_t err)); + +#define tcp_mss(pcb) ((pcb)->mss) +#define tcp_sndbuf(pcb) ((pcb)->snd_buf) +#define tcp_nagle_disable(pcb) ((pcb)->flags |= TF_NODELAY) +#define tcp_nagle_enable(pcb) ((pcb)->flags &= ~TF_NODELAY) +#define tcp_nagle_disabled(pcb) (((pcb)->flags & TF_NODELAY) != 0) + +#if TCP_LISTEN_BACKLOG +#define tcp_accepted(pcb) (((struct tcp_pcb_listen *)(pcb))->accepts_pending--) +#else /* TCP_LISTEN_BACKLOG */ +#define tcp_accepted(pcb) +#endif /* TCP_LISTEN_BACKLOG */ + +void tcp_recved (struct tcp_pcb *pcb, u16_t len); +err_t tcp_bind (struct tcp_pcb *pcb, struct ip_addr *ipaddr, + u16_t port); +err_t tcp_connect (struct tcp_pcb *pcb, struct ip_addr *ipaddr, + u16_t port, err_t (* connected)(void *arg, + struct tcp_pcb *tpcb, + err_t err)); + +struct tcp_pcb * tcp_listen_with_backlog(struct tcp_pcb *pcb, u8_t backlog); +#define tcp_listen(pcb) tcp_listen_with_backlog(pcb, TCP_DEFAULT_LISTEN_BACKLOG) + +void tcp_abandon (struct tcp_pcb *pcb, int reset); +#define tcp_abort(pcb) tcp_abandon((pcb), 1) +err_t tcp_close (struct tcp_pcb *pcb); + +/* Flags for "apiflags" parameter in tcp_write and tcp_enqueue */ +#define TCP_WRITE_FLAG_COPY 0x01 +#define TCP_WRITE_FLAG_MORE 0x02 + +err_t tcp_write (struct tcp_pcb *pcb, const void *dataptr, u16_t len, + u8_t apiflags); + +void tcp_setprio (struct tcp_pcb *pcb, u8_t prio); + +#define TCP_PRIO_MIN 1 +#define TCP_PRIO_NORMAL 64 +#define TCP_PRIO_MAX 127 + +/* It is also possible to call these two functions at the right + intervals (instead of calling tcp_tmr()). */ +void tcp_slowtmr (void); +void tcp_fasttmr (void); + + +/* Only used by IP to pass a TCP segment to TCP: */ +void tcp_input (struct pbuf *p, struct netif *inp); +/* Used within the TCP code only: */ +err_t tcp_send_empty_ack(struct tcp_pcb *pcb); +err_t tcp_output (struct tcp_pcb *pcb); +void tcp_rexmit (struct tcp_pcb *pcb); +void tcp_rexmit_rto (struct tcp_pcb *pcb); +void tcp_rexmit_fast (struct tcp_pcb *pcb); +u32_t tcp_update_rcv_ann_wnd(struct tcp_pcb *pcb); + +/** + * This is the Nagle algorithm: try to combine user data to send as few TCP + * segments as possible. Only send if + * - no previously transmitted data on the connection remains unacknowledged or + * - the TF_NODELAY flag is set (nagle algorithm turned off for this pcb) or + * - the only unsent segment is at least pcb->mss bytes long (or there is more + * than one unsent segment - with lwIP, this can happen although unsent->len < mss) + * - or if we are in fast-retransmit (TF_INFR) + */ +#define tcp_do_output_nagle(tpcb) ((((tpcb)->unacked == NULL) || \ + ((tpcb)->flags & (TF_NODELAY | TF_INFR)) || \ + (((tpcb)->unsent != NULL) && (((tpcb)->unsent->next != NULL) || \ + ((tpcb)->unsent->len >= (tpcb)->mss))) \ + ) ? 1 : 0) +#define tcp_output_nagle(tpcb) (tcp_do_output_nagle(tpcb) ? tcp_output(tpcb) : ERR_OK) + + +#define TCP_SEQ_LT(a,b) ((s32_t)((a)-(b)) < 0) +#define TCP_SEQ_LEQ(a,b) ((s32_t)((a)-(b)) <= 0) +#define TCP_SEQ_GT(a,b) ((s32_t)((a)-(b)) > 0) +#define TCP_SEQ_GEQ(a,b) ((s32_t)((a)-(b)) >= 0) +/* is b<=a<=c? */ +#if 0 /* see bug #10548 */ +#define TCP_SEQ_BETWEEN(a,b,c) ((c)-(b) >= (a)-(b)) +#endif +#define TCP_SEQ_BETWEEN(a,b,c) (TCP_SEQ_GEQ(a,b) && TCP_SEQ_LEQ(a,c)) +#define TCP_FIN 0x01U +#define TCP_SYN 0x02U +#define TCP_RST 0x04U +#define TCP_PSH 0x08U +#define TCP_ACK 0x10U +#define TCP_URG 0x20U +#define TCP_ECE 0x40U +#define TCP_CWR 0x80U + +#define TCP_FLAGS 0x3fU + +/* Length of the TCP header, excluding options. */ +#define TCP_HLEN 20 + +#ifndef TCP_TMR_INTERVAL +#define TCP_TMR_INTERVAL 250 /* The TCP timer interval in milliseconds. */ +#endif /* TCP_TMR_INTERVAL */ + +#ifndef TCP_FAST_INTERVAL +#define TCP_FAST_INTERVAL TCP_TMR_INTERVAL /* the fine grained timeout in milliseconds */ +#endif /* TCP_FAST_INTERVAL */ + +#ifndef TCP_SLOW_INTERVAL +#define TCP_SLOW_INTERVAL (2*TCP_TMR_INTERVAL) /* the coarse grained timeout in milliseconds */ +#endif /* TCP_SLOW_INTERVAL */ + +#define TCP_FIN_WAIT_TIMEOUT 20000 /* milliseconds */ +#define TCP_SYN_RCVD_TIMEOUT 20000 /* milliseconds */ + +#define TCP_OOSEQ_TIMEOUT 6U /* x RTO */ + +#ifndef TCP_MSL +#define TCP_MSL 60000UL /* The maximum segment lifetime in milliseconds */ +#endif + +/* Keepalive values, compliant with RFC 1122. Don't change this unless you know what you're doing */ +#ifndef TCP_KEEPIDLE_DEFAULT +#define TCP_KEEPIDLE_DEFAULT 7200000UL /* Default KEEPALIVE timer in milliseconds */ +#endif + +#ifndef TCP_KEEPINTVL_DEFAULT +#define TCP_KEEPINTVL_DEFAULT 75000UL /* Default Time between KEEPALIVE probes in milliseconds */ +#endif + +#ifndef TCP_KEEPCNT_DEFAULT +#define TCP_KEEPCNT_DEFAULT 9U /* Default Counter for KEEPALIVE probes */ +#endif + +#define TCP_MAXIDLE TCP_KEEPCNT_DEFAULT * TCP_KEEPINTVL_DEFAULT /* Maximum KEEPALIVE probe time */ + +/* Fields are (of course) in network byte order. + * Some fields are converted to host byte order in tcp_input(). + */ +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct tcp_hdr { + PACK_STRUCT_FIELD(u16_t src); + PACK_STRUCT_FIELD(u16_t dest); + PACK_STRUCT_FIELD(u32_t seqno); + PACK_STRUCT_FIELD(u32_t ackno); + PACK_STRUCT_FIELD(u16_t _hdrlen_rsvd_flags); + PACK_STRUCT_FIELD(u16_t wnd); + PACK_STRUCT_FIELD(u16_t chksum); + PACK_STRUCT_FIELD(u16_t urgp); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +#define TCPH_OFFSET(phdr) (ntohs((phdr)->_hdrlen_rsvd_flags) >> 8) +#define TCPH_HDRLEN(phdr) (ntohs((phdr)->_hdrlen_rsvd_flags) >> 12) +#define TCPH_FLAGS(phdr) (ntohs((phdr)->_hdrlen_rsvd_flags) & TCP_FLAGS) + +#define TCPH_OFFSET_SET(phdr, offset) (phdr)->_hdrlen_rsvd_flags = htons(((offset) << 8) | TCPH_FLAGS(phdr)) +#define TCPH_HDRLEN_SET(phdr, len) (phdr)->_hdrlen_rsvd_flags = htons(((len) << 12) | TCPH_FLAGS(phdr)) +#define TCPH_FLAGS_SET(phdr, flags) (phdr)->_hdrlen_rsvd_flags = (((phdr)->_hdrlen_rsvd_flags & htons((u16_t)(~(u16_t)(TCP_FLAGS)))) | htons(flags)) +#define TCPH_SET_FLAG(phdr, flags ) (phdr)->_hdrlen_rsvd_flags = ((phdr)->_hdrlen_rsvd_flags | htons(flags)) +#define TCPH_UNSET_FLAG(phdr, flags) (phdr)->_hdrlen_rsvd_flags = htons(ntohs((phdr)->_hdrlen_rsvd_flags) | (TCPH_FLAGS(phdr) & ~(flags)) ) + +#define TCP_TCPLEN(seg) ((seg)->len + ((TCPH_FLAGS((seg)->tcphdr) & (TCP_FIN | TCP_SYN)) != 0)) + +enum tcp_state { + CLOSED = 0, + LISTEN = 1, + SYN_SENT = 2, + SYN_RCVD = 3, + ESTABLISHED = 4, + FIN_WAIT_1 = 5, + FIN_WAIT_2 = 6, + CLOSE_WAIT = 7, + CLOSING = 8, + LAST_ACK = 9, + TIME_WAIT = 10 +}; + +/** Flags used on input processing, not on pcb->flags +*/ +#define TF_RESET (u8_t)0x08U /* Connection was reset. */ +#define TF_CLOSED (u8_t)0x10U /* Connection was sucessfully closed. */ +#define TF_GOT_FIN (u8_t)0x20U /* Connection was closed by the remote end. */ + + +#if LWIP_CALLBACK_API + /* Function to call when a listener has been connected. + * @param arg user-supplied argument (tcp_pcb.callback_arg) + * @param pcb a new tcp_pcb that now is connected + * @param err an error argument (TODO: that is current always ERR_OK?) + * @return ERR_OK: accept the new connection, + * any other err_t abortsthe new connection + */ +#define DEF_ACCEPT_CALLBACK err_t (* accept)(void *arg, struct tcp_pcb *newpcb, err_t err) +#else /* LWIP_CALLBACK_API */ +#define DEF_ACCEPT_CALLBACK +#endif /* LWIP_CALLBACK_API */ + +/** + * members common to struct tcp_pcb and struct tcp_listen_pcb + */ +#define TCP_PCB_COMMON(type) \ + type *next; /* for the linked list */ \ + enum tcp_state state; /* TCP state */ \ + u8_t prio; \ + void *callback_arg; \ + /* ports are in host byte order */ \ + u16_t local_port; \ + /* the accept callback for listen- and normal pcbs, if LWIP_CALLBACK_API */ \ + DEF_ACCEPT_CALLBACK + + +/* the TCP protocol control block */ +struct tcp_pcb { +/** common PCB members */ + IP_PCB; +/** protocol specific PCB members */ + TCP_PCB_COMMON(struct tcp_pcb); + + /* ports are in host byte order */ + u16_t remote_port; + + u8_t flags; +#define TF_ACK_DELAY ((u8_t)0x01U) /* Delayed ACK. */ +#define TF_ACK_NOW ((u8_t)0x02U) /* Immediate ACK. */ +#define TF_INFR ((u8_t)0x04U) /* In fast recovery. */ +#define TF_TIMESTAMP ((u8_t)0x08U) /* Timestamp option enabled */ +#define TF_FIN ((u8_t)0x20U) /* Connection was closed locally (FIN segment enqueued). */ +#define TF_NODELAY ((u8_t)0x40U) /* Disable Nagle algorithm */ +#define TF_NAGLEMEMERR ((u8_t)0x80U) /* nagle enabled, memerr, try to output to prevent delayed ACK to happen */ + + /* the rest of the fields are in host byte order + as we have to do some math with them */ + /* receiver variables */ + u32_t rcv_nxt; /* next seqno expected */ + u16_t rcv_wnd; /* receiver window available */ + u16_t rcv_ann_wnd; /* receiver window to announce */ + u32_t rcv_ann_right_edge; /* announced right edge of window */ + + /* Timers */ + u32_t tmr; + u8_t polltmr, pollinterval; + + /* Retransmission timer. */ + s16_t rtime; + + u16_t mss; /* maximum segment size */ + + /* RTT (round trip time) estimation variables */ + u32_t rttest; /* RTT estimate in 500ms ticks */ + u32_t rtseq; /* sequence number being timed */ + s16_t sa, sv; /* @todo document this */ + + s16_t rto; /* retransmission time-out */ + u8_t nrtx; /* number of retransmissions */ + + /* fast retransmit/recovery */ + u32_t lastack; /* Highest acknowledged seqno. */ + u8_t dupacks; + + /* congestion avoidance/control variables */ + u16_t cwnd; + u16_t ssthresh; + + /* sender variables */ + u32_t snd_nxt; /* next new seqno to be sent */ + u16_t snd_wnd; /* sender window */ + u32_t snd_wl1, snd_wl2; /* Sequence and acknowledgement numbers of last + window update. */ + u32_t snd_lbb; /* Sequence number of next byte to be buffered. */ + + u16_t acked; + + u16_t snd_buf; /* Available buffer space for sending (in bytes). */ +#define TCP_SNDQUEUELEN_OVERFLOW (0xffff-3) + u16_t snd_queuelen; /* Available buffer space for sending (in tcp_segs). */ + + + /* These are ordered by sequence number: */ + struct tcp_seg *unsent; /* Unsent (queued) segments. */ + struct tcp_seg *unacked; /* Sent but unacknowledged segments. */ +#if TCP_QUEUE_OOSEQ + struct tcp_seg *ooseq; /* Received out of sequence segments. */ +#endif /* TCP_QUEUE_OOSEQ */ + + struct pbuf *refused_data; /* Data previously received but not yet taken by upper layer */ + +#if LWIP_CALLBACK_API + /* Function to be called when more send buffer space is available. + * @param arg user-supplied argument (tcp_pcb.callback_arg) + * @param pcb the tcp_pcb which has send buffer space available + * @param space the amount of bytes available + * @return ERR_OK: try to send some data by calling tcp_output + */ + err_t (* sent)(void *arg, struct tcp_pcb *pcb, u16_t space); + + /* Function to be called when (in-sequence) data has arrived. + * @param arg user-supplied argument (tcp_pcb.callback_arg) + * @param pcb the tcp_pcb for which data has arrived + * @param p the packet buffer which arrived + * @param err an error argument (TODO: that is current always ERR_OK?) + * @return ERR_OK: try to send some data by calling tcp_output + */ + err_t (* recv)(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err); + + /* Function to be called when a connection has been set up. + * @param arg user-supplied argument (tcp_pcb.callback_arg) + * @param pcb the tcp_pcb that now is connected + * @param err an error argument (TODO: that is current always ERR_OK?) + * @return value is currently ignored + */ + err_t (* connected)(void *arg, struct tcp_pcb *pcb, err_t err); + + /* Function which is called periodically. + * The period can be adjusted in multiples of the TCP slow timer interval + * by changing tcp_pcb.polltmr. + * @param arg user-supplied argument (tcp_pcb.callback_arg) + * @param pcb the tcp_pcb to poll for + * @return ERR_OK: try to send some data by calling tcp_output + */ + err_t (* poll)(void *arg, struct tcp_pcb *pcb); + + /* Function to be called whenever a fatal error occurs. + * There is no pcb parameter since most of the times, the pcb is + * already deallocated (or there is no pcb) when this function is called. + * @param arg user-supplied argument (tcp_pcb.callback_arg) + * @param err an indication why the error callback is called: + * ERR_ABRT: aborted through tcp_abort or by a TCP timer + * ERR_RST: the connection was reset by the remote host + */ + void (* errf)(void *arg, err_t err); +#endif /* LWIP_CALLBACK_API */ + +#if LWIP_TCP_TIMESTAMPS + u32_t ts_lastacksent; + u32_t ts_recent; +#endif /* LWIP_TCP_TIMESTAMPS */ + + /* idle time before KEEPALIVE is sent */ + u32_t keep_idle; +#if LWIP_TCP_KEEPALIVE + u32_t keep_intvl; + u32_t keep_cnt; +#endif /* LWIP_TCP_KEEPALIVE */ + + /* Persist timer counter */ + u32_t persist_cnt; + /* Persist timer back-off */ + u8_t persist_backoff; + + /* KEEPALIVE counter */ + u8_t keep_cnt_sent; +}; + +struct tcp_pcb_listen { +/* Common members of all PCB types */ + IP_PCB; +/* Protocol specific PCB members */ + TCP_PCB_COMMON(struct tcp_pcb_listen); + +#if TCP_LISTEN_BACKLOG + u8_t backlog; + u8_t accepts_pending; +#endif /* TCP_LISTEN_BACKLOG */ +}; + +#if LWIP_EVENT_API + +enum lwip_event { + LWIP_EVENT_ACCEPT, + LWIP_EVENT_SENT, + LWIP_EVENT_RECV, + LWIP_EVENT_CONNECTED, + LWIP_EVENT_POLL, + LWIP_EVENT_ERR +}; + +err_t lwip_tcp_event(void *arg, struct tcp_pcb *pcb, + enum lwip_event, + struct pbuf *p, + u16_t size, + err_t err); + +#define TCP_EVENT_ACCEPT(pcb,err,ret) ret = lwip_tcp_event((pcb)->callback_arg, (pcb),\ + LWIP_EVENT_ACCEPT, NULL, 0, err) +#define TCP_EVENT_SENT(pcb,space,ret) ret = lwip_tcp_event((pcb)->callback_arg, (pcb),\ + LWIP_EVENT_SENT, NULL, space, ERR_OK) +#define TCP_EVENT_RECV(pcb,p,err,ret) ret = lwip_tcp_event((pcb)->callback_arg, (pcb),\ + LWIP_EVENT_RECV, (p), 0, (err)) +#define TCP_EVENT_CONNECTED(pcb,err,ret) ret = lwip_tcp_event((pcb)->callback_arg, (pcb),\ + LWIP_EVENT_CONNECTED, NULL, 0, (err)) +#define TCP_EVENT_POLL(pcb,ret) ret = lwip_tcp_event((pcb)->callback_arg, (pcb),\ + LWIP_EVENT_POLL, NULL, 0, ERR_OK) +#define TCP_EVENT_ERR(errf,arg,err) lwip_tcp_event((arg), NULL, \ + LWIP_EVENT_ERR, NULL, 0, (err)) +#else /* LWIP_EVENT_API */ + +#define TCP_EVENT_ACCEPT(pcb,err,ret) \ + do { \ + if((pcb)->accept != NULL) \ + (ret) = (pcb)->accept((pcb)->callback_arg,(pcb),(err)); \ + else (ret) = ERR_OK; \ + } while (0) + +#define TCP_EVENT_SENT(pcb,space,ret) \ + do { \ + if((pcb)->sent != NULL) \ + (ret) = (pcb)->sent((pcb)->callback_arg,(pcb),(space)); \ + else (ret) = ERR_OK; \ + } while (0) + +#define TCP_EVENT_RECV(pcb,p,err,ret) \ + do { \ + if((pcb)->recv != NULL) { \ + (ret) = (pcb)->recv((pcb)->callback_arg,(pcb),(p),(err)); \ + } else { \ + (ret) = tcp_recv_null(NULL, (pcb), (p), (err)); \ + } \ + } while (0) + +#define TCP_EVENT_CONNECTED(pcb,err,ret) \ + do { \ + if((pcb)->connected != NULL) \ + (ret) = (pcb)->connected((pcb)->callback_arg,(pcb),(err)); \ + else (ret) = ERR_OK; \ + } while (0) + +#define TCP_EVENT_POLL(pcb,ret) \ + do { \ + if((pcb)->poll != NULL) \ + (ret) = (pcb)->poll((pcb)->callback_arg,(pcb)); \ + else (ret) = ERR_OK; \ + } while (0) + +#define TCP_EVENT_ERR(errf,arg,err) \ + do { \ + if((errf) != NULL) \ + (errf)((arg),(err)); \ + } while (0) + +#endif /* LWIP_EVENT_API */ + +/* This structure represents a TCP segment on the unsent and unacked queues */ +struct tcp_seg { + struct tcp_seg *next; /* used when putting segements on a queue */ + struct pbuf *p; /* buffer containing data + TCP header */ + void *dataptr; /* pointer to the TCP data in the pbuf */ + u16_t len; /* the TCP length of this segment */ + u8_t flags; +#define TF_SEG_OPTS_MSS (u8_t)0x01U /* Include MSS option. */ +#define TF_SEG_OPTS_TS (u8_t)0x02U /* Include timestamp option. */ + struct tcp_hdr *tcphdr; /* the TCP header */ +}; + +#define LWIP_TCP_OPT_LENGTH(flags) \ + (flags & TF_SEG_OPTS_MSS ? 4 : 0) + \ + (flags & TF_SEG_OPTS_TS ? 12 : 0) + +/** This returns a TCP header option for MSS in an u32_t */ +#define TCP_BUILD_MSS_OPTION(x) (x) = htonl(((u32_t)2 << 24) | \ + ((u32_t)4 << 16) | \ + (((u32_t)TCP_MSS / 256) << 8) | \ + (TCP_MSS & 255)) + +/* Internal functions and global variables: */ +struct tcp_pcb *tcp_pcb_copy(struct tcp_pcb *pcb); +void tcp_pcb_purge(struct tcp_pcb *pcb); +void tcp_pcb_remove(struct tcp_pcb **pcblist, struct tcp_pcb *pcb); + +u8_t tcp_segs_free(struct tcp_seg *seg); +u8_t tcp_seg_free(struct tcp_seg *seg); +struct tcp_seg *tcp_seg_copy(struct tcp_seg *seg); + +#define tcp_ack(pcb) \ + do { \ + if((pcb)->flags & TF_ACK_DELAY) { \ + (pcb)->flags &= ~TF_ACK_DELAY; \ + (pcb)->flags |= TF_ACK_NOW; \ + tcp_output(pcb); \ + } \ + else { \ + (pcb)->flags |= TF_ACK_DELAY; \ + } \ + } while (0) + +#define tcp_ack_now(pcb) \ + do { \ + (pcb)->flags |= TF_ACK_NOW; \ + tcp_output(pcb); \ + } while (0) + +err_t tcp_send_ctrl(struct tcp_pcb *pcb, u8_t flags); +err_t tcp_enqueue(struct tcp_pcb *pcb, void *dataptr, u16_t len, + u8_t flags, u8_t apiflags, u8_t optflags); + +void tcp_rexmit_seg(struct tcp_pcb *pcb, struct tcp_seg *seg); + +void tcp_rst(u32_t seqno, u32_t ackno, + struct ip_addr *local_ip, struct ip_addr *remote_ip, + u16_t local_port, u16_t remote_port); + +u32_t tcp_next_iss(void); + +void tcp_keepalive(struct tcp_pcb *pcb); +void tcp_zero_window_probe(struct tcp_pcb *pcb); + +#if TCP_CALCULATE_EFF_SEND_MSS +u16_t tcp_eff_send_mss(u16_t sendmss, struct ip_addr *addr); +#endif /* TCP_CALCULATE_EFF_SEND_MSS */ + +#if LWIP_CALLBACK_API +err_t tcp_recv_null(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err); +#endif /* LWIP_CALLBACK_API */ + +extern struct tcp_pcb *tcp_input_pcb; +extern u32_t tcp_ticks; + +const char* tcp_debug_state_str(enum tcp_state s); +#if TCP_DEBUG || TCP_INPUT_DEBUG || TCP_OUTPUT_DEBUG +void tcp_debug_print(struct tcp_hdr *tcphdr); +void tcp_debug_print_flags(u8_t flags); +void tcp_debug_print_state(enum tcp_state s); +void tcp_debug_print_pcbs(void); +s16_t tcp_pcbs_sane(void); +#else +# define tcp_debug_print(tcphdr) +# define tcp_debug_print_flags(flags) +# define tcp_debug_print_state(s) +# define tcp_debug_print_pcbs() +# define tcp_pcbs_sane() 1 +#endif /* TCP_DEBUG */ + +#if NO_SYS +#define tcp_timer_needed() +#else +void tcp_timer_needed(void); +#endif + +/* The TCP PCB lists. */ +union tcp_listen_pcbs_t { /* List of all TCP PCBs in LISTEN state. */ + struct tcp_pcb_listen *listen_pcbs; + struct tcp_pcb *pcbs; +}; +extern union tcp_listen_pcbs_t tcp_listen_pcbs; +extern struct tcp_pcb *tcp_active_pcbs; /* List of all TCP PCBs that are in a + state in which they accept or send + data. */ +extern struct tcp_pcb *tcp_tw_pcbs; /* List of all TCP PCBs in TIME-WAIT. */ + +extern struct tcp_pcb *tcp_tmp_pcb; /* Only used for temporary storage. */ + +/* Axioms about the above lists: + 1) Every TCP PCB that is not CLOSED is in one of the lists. + 2) A PCB is only in one of the lists. + 3) All PCBs in the tcp_listen_pcbs list is in LISTEN state. + 4) All PCBs in the tcp_tw_pcbs list is in TIME-WAIT state. +*/ + +/* Define two macros, TCP_REG and TCP_RMV that registers a TCP PCB + with a PCB list or removes a PCB from a list, respectively. */ +#if 0 +#define TCP_REG(pcbs, npcb) do {\ + LWIP_DEBUGF(TCP_DEBUG, ("TCP_REG %p local port %d\n", npcb, npcb->local_port)); \ + for(tcp_tmp_pcb = *pcbs; \ + tcp_tmp_pcb != NULL; \ + tcp_tmp_pcb = tcp_tmp_pcb->next) { \ + LWIP_ASSERT("TCP_REG: already registered\n", tcp_tmp_pcb != npcb); \ + } \ + LWIP_ASSERT("TCP_REG: pcb->state != CLOSED", npcb->state != CLOSED); \ + npcb->next = *pcbs; \ + LWIP_ASSERT("TCP_REG: npcb->next != npcb", npcb->next != npcb); \ + *(pcbs) = npcb; \ + LWIP_ASSERT("TCP_RMV: tcp_pcbs sane", tcp_pcbs_sane()); \ + tcp_timer_needed(); \ + } while(0) +#define TCP_RMV(pcbs, npcb) do { \ + LWIP_ASSERT("TCP_RMV: pcbs != NULL", *pcbs != NULL); \ + LWIP_DEBUGF(TCP_DEBUG, ("TCP_RMV: removing %p from %p\n", npcb, *pcbs)); \ + if(*pcbs == npcb) { \ + *pcbs = (*pcbs)->next; \ + } else for(tcp_tmp_pcb = *pcbs; tcp_tmp_pcb != NULL; tcp_tmp_pcb = tcp_tmp_pcb->next) { \ + if(tcp_tmp_pcb->next == npcb) { \ + tcp_tmp_pcb->next = npcb->next; \ + break; \ + } \ + } \ + npcb->next = NULL; \ + LWIP_ASSERT("TCP_RMV: tcp_pcbs sane", tcp_pcbs_sane()); \ + LWIP_DEBUGF(TCP_DEBUG, ("TCP_RMV: removed %p from %p\n", npcb, *pcbs)); \ + } while(0) + +#else /* LWIP_DEBUG */ + +#define TCP_REG(pcbs, npcb) \ + do { \ + npcb->next = *pcbs; \ + *(pcbs) = npcb; \ + tcp_timer_needed(); \ + } while (0) + +#define TCP_RMV(pcbs, npcb) \ + do { \ + if(*(pcbs) == npcb) { \ + (*(pcbs)) = (*pcbs)->next; \ + } \ + else { \ + for(tcp_tmp_pcb = *pcbs; \ + tcp_tmp_pcb != NULL; \ + tcp_tmp_pcb = tcp_tmp_pcb->next) { \ + if(tcp_tmp_pcb->next == npcb) { \ + tcp_tmp_pcb->next = npcb->next; \ + break; \ + } \ + } \ + } \ + npcb->next = NULL; \ + } while(0) + +#endif /* LWIP_DEBUG */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_TCP */ + +#endif /* __LWIP_TCP_H__ */ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/tcpip.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/tcpip.h new file mode 100644 index 000000000..00a3ec5dc --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/tcpip.h @@ -0,0 +1,143 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_TCPIP_H__ +#define __LWIP_TCPIP_H__ + +#include "lwip/opt.h" + +#if !NO_SYS /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/api_msg.h" +#include "lwip/netifapi.h" +#include "lwip/pbuf.h" +#include "lwip/api.h" +#include "lwip/sys.h" +#include "lwip/netif.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#if LWIP_TCPIP_CORE_LOCKING +/** The global semaphore to lock the stack. */ +extern sys_sem_t lock_tcpip_core; +#define LOCK_TCPIP_CORE() sys_sem_wait(lock_tcpip_core) +#define UNLOCK_TCPIP_CORE() sys_sem_signal(lock_tcpip_core) +#define TCPIP_APIMSG(m) tcpip_apimsg_lock(m) +#define TCPIP_APIMSG_ACK(m) +#define TCPIP_NETIFAPI(m) tcpip_netifapi_lock(m) +#define TCPIP_NETIFAPI_ACK(m) +#else +#define LOCK_TCPIP_CORE() +#define UNLOCK_TCPIP_CORE() +#define TCPIP_APIMSG(m) tcpip_apimsg(m) +#define TCPIP_APIMSG_ACK(m) sys_sem_signal(m->conn->op_completed) +#define TCPIP_NETIFAPI(m) tcpip_netifapi(m) +#define TCPIP_NETIFAPI_ACK(m) sys_sem_signal(m->sem) +#endif /* LWIP_TCPIP_CORE_LOCKING */ + +void tcpip_init(void (* tcpip_init_done)(void *), void *arg); + +#if LWIP_NETCONN +err_t tcpip_apimsg(struct api_msg *apimsg); +#if LWIP_TCPIP_CORE_LOCKING +err_t tcpip_apimsg_lock(struct api_msg *apimsg); +#endif /* LWIP_TCPIP_CORE_LOCKING */ +#endif /* LWIP_NETCONN */ + +err_t tcpip_input(struct pbuf *p, struct netif *inp); + +#if LWIP_NETIF_API +err_t tcpip_netifapi(struct netifapi_msg *netifapimsg); +#if LWIP_TCPIP_CORE_LOCKING +err_t tcpip_netifapi_lock(struct netifapi_msg *netifapimsg); +#endif /* LWIP_TCPIP_CORE_LOCKING */ +#endif /* LWIP_NETIF_API */ + +err_t tcpip_callback_with_block(void (*f)(void *ctx), void *ctx, u8_t block); +#define tcpip_callback(f, ctx) tcpip_callback_with_block(f, ctx, 1) + +/* free pbufs or heap memory from another context without blocking */ +err_t pbuf_free_callback(struct pbuf *p); +err_t mem_free_callback(void *m); + +err_t tcpip_timeout(u32_t msecs, sys_timeout_handler h, void *arg); +err_t tcpip_untimeout(sys_timeout_handler h, void *arg); + +enum tcpip_msg_type { +#if LWIP_NETCONN + TCPIP_MSG_API, +#endif /* LWIP_NETCONN */ + TCPIP_MSG_INPKT, +#if LWIP_NETIF_API + TCPIP_MSG_NETIFAPI, +#endif /* LWIP_NETIF_API */ + TCPIP_MSG_CALLBACK, + TCPIP_MSG_TIMEOUT, + TCPIP_MSG_UNTIMEOUT +}; + +struct tcpip_msg { + enum tcpip_msg_type type; + sys_sem_t *sem; + union { +#if LWIP_NETCONN + struct api_msg *apimsg; +#endif /* LWIP_NETCONN */ +#if LWIP_NETIF_API + struct netifapi_msg *netifapimsg; +#endif /* LWIP_NETIF_API */ + struct { + struct pbuf *p; + struct netif *netif; + } inp; + struct { + void (*f)(void *ctx); + void *ctx; + } cb; + struct { + u32_t msecs; + sys_timeout_handler h; + void *arg; + } tmo; + } msg; +}; + +#ifdef __cplusplus +} +#endif + +#endif /* !NO_SYS */ + +#endif /* __LWIP_TCPIP_H__ */ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/udp.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/udp.h new file mode 100644 index 000000000..1269ee19c --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/udp.h @@ -0,0 +1,155 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIP_UDP_H__ +#define __LWIP_UDP_H__ + +#include "lwip/opt.h" + +#if LWIP_UDP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/pbuf.h" +#include "lwip/netif.h" +#include "lwip/ip_addr.h" +#include "lwip/ip.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define UDP_HLEN 8 + +/* Fields are (of course) in network byte order. */ +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct udp_hdr { + PACK_STRUCT_FIELD(u16_t src); + PACK_STRUCT_FIELD(u16_t dest); /* src/dest UDP ports */ + PACK_STRUCT_FIELD(u16_t len); + PACK_STRUCT_FIELD(u16_t chksum); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +#define UDP_FLAGS_NOCHKSUM 0x01U +#define UDP_FLAGS_UDPLITE 0x02U +#define UDP_FLAGS_CONNECTED 0x04U + +struct udp_pcb { +/* Common members of all PCB types */ + IP_PCB; + +/* Protocol specific PCB members */ + + struct udp_pcb *next; + + u8_t flags; + /* ports are in host byte order */ + u16_t local_port, remote_port; + +#if LWIP_IGMP + /* outgoing network interface for multicast packets */ + struct ip_addr multicast_ip; +#endif /* LWIP_IGMP */ + +#if LWIP_UDPLITE + /* used for UDP_LITE only */ + u16_t chksum_len_rx, chksum_len_tx; +#endif /* LWIP_UDPLITE */ + + /* receive callback function + * addr and port are in same byte order as in the pcb + * The callback is responsible for freeing the pbuf + * if it's not used any more. + * + * ATTENTION: Be aware that 'addr' points into the pbuf 'p' so freeing this pbuf + * makes 'addr' invalid, too. + * + * @param arg user supplied argument (udp_pcb.recv_arg) + * @param pcb the udp_pcb which received data + * @param p the packet buffer that was received + * @param addr the remote IP address from which the packet was received + * @param port the remote port from which the packet was received + */ + void (* recv)(void *arg, struct udp_pcb *pcb, struct pbuf *p, + struct ip_addr *addr, u16_t port); + /* user-supplied argument for the recv callback */ + void *recv_arg; +}; +/* udp_pcbs export for exernal reference (e.g. SNMP agent) */ +extern struct udp_pcb *udp_pcbs; + +/* The following functions is the application layer interface to the + UDP code. */ +struct udp_pcb * udp_new (void); +void udp_remove (struct udp_pcb *pcb); +err_t udp_bind (struct udp_pcb *pcb, struct ip_addr *ipaddr, + u16_t port); +err_t udp_connect (struct udp_pcb *pcb, struct ip_addr *ipaddr, + u16_t port); +void udp_disconnect (struct udp_pcb *pcb); +void udp_recv (struct udp_pcb *pcb, + void (* recv)(void *arg, struct udp_pcb *upcb, + struct pbuf *p, + struct ip_addr *addr, + u16_t port), + void *recv_arg); +err_t udp_sendto_if (struct udp_pcb *pcb, struct pbuf *p, struct ip_addr *dst_ip, u16_t dst_port, struct netif *netif); +err_t udp_sendto (struct udp_pcb *pcb, struct pbuf *p, struct ip_addr *dst_ip, u16_t dst_port); +err_t udp_send (struct udp_pcb *pcb, struct pbuf *p); + +#define udp_flags(pcb) ((pcb)->flags) +#define udp_setflags(pcb, f) ((pcb)->flags = (f)) + +/* The following functions are the lower layer interface to UDP. */ +void udp_input (struct pbuf *p, struct netif *inp); + +#define udp_init() /* Compatibility define, not init needed. */ + +#if UDP_DEBUG +void udp_debug_print(struct udp_hdr *udphdr); +#else +#define udp_debug_print(udphdr) +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_UDP */ + +#endif /* __LWIP_UDP_H__ */ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/netif/etharp.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/netif/etharp.h new file mode 100644 index 000000000..fb1542a77 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/netif/etharp.h @@ -0,0 +1,194 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2003 Swedish Institute of Computer Science. + * Copyright (c) 2003-2004 Leon Woestenberg + * Copyright (c) 2003-2004 Axon Digital Design B.V., The Netherlands. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ + +#ifndef __NETIF_ETHARP_H__ +#define __NETIF_ETHARP_H__ + +#include "lwip/opt.h" + +#if LWIP_ARP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/pbuf.h" +#include "lwip/ip_addr.h" +#include "lwip/netif.h" +#include "lwip/ip.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef ETH_PAD_SIZE +#define ETH_PAD_SIZE 0 +#endif + +#ifndef ETHARP_HWADDR_LEN +#define ETHARP_HWADDR_LEN 6 +#endif + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct eth_addr { + PACK_STRUCT_FIELD(u8_t addr[ETHARP_HWADDR_LEN]); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct eth_hdr { +#if ETH_PAD_SIZE + PACK_STRUCT_FIELD(u8_t padding[ETH_PAD_SIZE]); +#endif + PACK_STRUCT_FIELD(struct eth_addr dest); + PACK_STRUCT_FIELD(struct eth_addr src); + PACK_STRUCT_FIELD(u16_t type); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +#define SIZEOF_ETH_HDR (14 + ETH_PAD_SIZE) + +#if ETHARP_SUPPORT_VLAN + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct eth_vlan_hdr { + PACK_STRUCT_FIELD(u16_t tpid); + PACK_STRUCT_FIELD(u16_t prio_vid); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +#define SIZEOF_VLAN_HDR 4 +#define VLAN_ID(vlan_hdr) (htons((vlan_hdr)->prio_vid) & 0xFFF) + +#endif /* ETHARP_SUPPORT_VLAN */ + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +/** the ARP message */ +struct etharp_hdr { + PACK_STRUCT_FIELD(u16_t hwtype); + PACK_STRUCT_FIELD(u16_t proto); + PACK_STRUCT_FIELD(u16_t _hwlen_protolen); + PACK_STRUCT_FIELD(u16_t opcode); + PACK_STRUCT_FIELD(struct eth_addr shwaddr); + PACK_STRUCT_FIELD(struct ip_addr2 sipaddr); + PACK_STRUCT_FIELD(struct eth_addr dhwaddr); + PACK_STRUCT_FIELD(struct ip_addr2 dipaddr); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +#define SIZEOF_ETHARP_HDR 28 +#define SIZEOF_ETHARP_PACKET (SIZEOF_ETH_HDR + SIZEOF_ETHARP_HDR) + +/** 5 seconds period */ +#define ARP_TMR_INTERVAL 5000 + +#define ETHTYPE_ARP 0x0806 +#define ETHTYPE_IP 0x0800 +#define ETHTYPE_VLAN 0x8100 +#define ETHTYPE_PPPOEDISC 0x8863 /* PPP Over Ethernet Discovery Stage */ +#define ETHTYPE_PPPOE 0x8864 /* PPP Over Ethernet Session Stage */ + +/** ARP message types (opcodes) */ +#define ARP_REQUEST 1 +#define ARP_REPLY 2 + +#if ARP_QUEUEING +/** struct for queueing outgoing packets for unknown address + * defined here to be accessed by memp.h + */ +struct etharp_q_entry { + struct etharp_q_entry *next; + struct pbuf *p; +}; +#endif /* ARP_QUEUEING */ + +#define etharp_init() /* Compatibility define, not init needed. */ +void etharp_tmr(void); +s8_t etharp_find_addr(struct netif *netif, struct ip_addr *ipaddr, + struct eth_addr **eth_ret, struct ip_addr **ip_ret); +void etharp_ip_input(struct netif *netif, struct pbuf *p); +void etharp_arp_input(struct netif *netif, struct eth_addr *ethaddr, + struct pbuf *p); +err_t etharp_output(struct netif *netif, struct pbuf *q, struct ip_addr *ipaddr); +err_t etharp_query(struct netif *netif, struct ip_addr *ipaddr, struct pbuf *q); +err_t etharp_request(struct netif *netif, struct ip_addr *ipaddr); +/** For Ethernet network interfaces, we might want to send "gratuitous ARP"; + * this is an ARP packet sent by a node in order to spontaneously cause other + * nodes to update an entry in their ARP cache. + * From RFC 3220 "IP Mobility Support for IPv4" section 4.6. */ +#define etharp_gratuitous(netif) etharp_request((netif), &(netif)->ip_addr) + +err_t ethernet_input(struct pbuf *p, struct netif *netif); + +#if LWIP_AUTOIP +err_t etharp_raw(struct netif *netif, const struct eth_addr *ethsrc_addr, + const struct eth_addr *ethdst_addr, + const struct eth_addr *hwsrc_addr, const struct ip_addr *ipsrc_addr, + const struct eth_addr *hwdst_addr, const struct ip_addr *ipdst_addr, + const u16_t opcode); +#endif /* LWIP_AUTOIP */ + +#define eth_addr_cmp(addr1, addr2) (memcmp((addr1)->addr, (addr2)->addr, ETHARP_HWADDR_LEN) == 0) + +extern const struct eth_addr ethbroadcast, ethzero; + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_ARP */ + +#endif /* __NETIF_ARP_H__ */ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/netif/loopif.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/netif/loopif.h new file mode 100644 index 000000000..3f4fa62cb --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/netif/loopif.h @@ -0,0 +1,55 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __NETIF_LOOPIF_H__ +#define __NETIF_LOOPIF_H__ + +#include "lwip/opt.h" +#include "lwip/netif.h" +#include "lwip/err.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#if !LWIP_NETIF_LOOPBACK_MULTITHREADING +#define loopif_poll netif_poll +#endif /* !LWIP_NETIF_LOOPBACK_MULTITHREADING */ + +err_t loopif_init(struct netif *netif); + +#ifdef __cplusplus +} +#endif + +#endif /* __NETIF_LOOPIF_H__ */ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/netif/ppp_oe.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/netif/ppp_oe.h new file mode 100644 index 000000000..fac0a78d0 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/netif/ppp_oe.h @@ -0,0 +1,163 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/***************************************************************************** +* ppp_oe.h - PPP Over Ethernet implementation for lwIP. +* +* Copyright (c) 2006 by Marc Boucher, Services Informatiques (MBSI) inc. +* +* The authors hereby grant permission to use, copy, modify, distribute, +* and license this software and its documentation for any purpose, provided +* that existing copyright notices are retained in all copies and that this +* notice and the following disclaimer are included verbatim in any +* distributions. No written agreement, license, or royalty fee is required +* for any of the authorized uses. +* +* THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS *AS IS* AND ANY EXPRESS OR +* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +* IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +****************************************************************************** +* REVISION HISTORY +* +* 06-01-01 Marc Boucher +* Ported to lwIP. +*****************************************************************************/ + + + +/* based on NetBSD: if_pppoe.c,v 1.64 2006/01/31 23:50:15 martin Exp */ + +/*- + * Copyright (c) 2002 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Martin Husemann . + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the NetBSD + * Foundation, Inc. and its contributors. + * 4. Neither the name of The NetBSD Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef PPP_OE_H +#define PPP_OE_H + +#include "lwip/opt.h" + +#if PPPOE_SUPPORT > 0 + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct pppoehdr { + PACK_STRUCT_FIELD(u8_t vertype); + PACK_STRUCT_FIELD(u8_t code); + PACK_STRUCT_FIELD(u16_t session); + PACK_STRUCT_FIELD(u16_t plen); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/bpstruct.h" +#endif +PACK_STRUCT_BEGIN +struct pppoetag { + PACK_STRUCT_FIELD(u16_t tag); + PACK_STRUCT_FIELD(u16_t len); +} PACK_STRUCT_STRUCT; +PACK_STRUCT_END +#ifdef PACK_STRUCT_USE_INCLUDES +# include "arch/epstruct.h" +#endif + + +#define PPPOE_STATE_INITIAL 0 +#define PPPOE_STATE_PADI_SENT 1 +#define PPPOE_STATE_PADR_SENT 2 +#define PPPOE_STATE_SESSION 3 +#define PPPOE_STATE_CLOSING 4 +/* passive */ +#define PPPOE_STATE_PADO_SENT 1 + +#define PPPOE_HEADERLEN sizeof(struct pppoehdr) +#define PPPOE_VERTYPE 0x11 /* VER=1, TYPE = 1 */ + +#define PPPOE_TAG_EOL 0x0000 /* end of list */ +#define PPPOE_TAG_SNAME 0x0101 /* service name */ +#define PPPOE_TAG_ACNAME 0x0102 /* access concentrator name */ +#define PPPOE_TAG_HUNIQUE 0x0103 /* host unique */ +#define PPPOE_TAG_ACCOOKIE 0x0104 /* AC cookie */ +#define PPPOE_TAG_VENDOR 0x0105 /* vendor specific */ +#define PPPOE_TAG_RELAYSID 0x0110 /* relay session id */ +#define PPPOE_TAG_SNAME_ERR 0x0201 /* service name error */ +#define PPPOE_TAG_ACSYS_ERR 0x0202 /* AC system error */ +#define PPPOE_TAG_GENERIC_ERR 0x0203 /* gerneric error */ + +#define PPPOE_CODE_PADI 0x09 /* Active Discovery Initiation */ +#define PPPOE_CODE_PADO 0x07 /* Active Discovery Offer */ +#define PPPOE_CODE_PADR 0x19 /* Active Discovery Request */ +#define PPPOE_CODE_PADS 0x65 /* Active Discovery Session confirmation */ +#define PPPOE_CODE_PADT 0xA7 /* Active Discovery Terminate */ + +#ifndef ETHERMTU +#define ETHERMTU 1500 +#endif + +/* two byte PPP protocol discriminator, then IP data */ +#define PPPOE_MAXMTU (ETHERMTU-PPPOE_HEADERLEN-2) + +struct pppoe_softc; + + +void pppoe_init(void); + +err_t pppoe_create(struct netif *ethif, int pd, void (*linkStatusCB)(int pd, int up), struct pppoe_softc **scptr); +err_t pppoe_destroy(struct netif *ifp); + +int pppoe_connect(struct pppoe_softc *sc); +void pppoe_disconnect(struct pppoe_softc *sc); + +void pppoe_disc_input(struct netif *netif, struct pbuf *p); +void pppoe_data_input(struct netif *netif, struct pbuf *p); + +err_t pppoe_xmit(struct pppoe_softc *sc, struct pbuf *pb); + +extern int pppoe_hdrlen; + +#endif /* PPPOE_SUPPORT */ + +#endif /* PPP_OE_H */ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/netif/slipif.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/netif/slipif.h new file mode 100644 index 000000000..ddc2dfa56 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/netif/slipif.h @@ -0,0 +1,53 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __NETIF_SLIPIF_H__ +#define __NETIF_SLIPIF_H__ + +#include "lwip/netif.h" + +#ifdef __cplusplus +extern "C" { +#endif + +err_t slipif_init(struct netif * netif); +void slipif_poll(struct netif *netif); + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/netif/etharp.c b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/netif/etharp.c new file mode 100644 index 000000000..1a5d13404 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/netif/etharp.c @@ -0,0 +1,1224 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * Address Resolution Protocol module for IP over Ethernet + * + * Functionally, ARP is divided into two parts. The first maps an IP address + * to a physical address when sending a packet, and the second part answers + * requests from other machines for our physical address. + * + * This implementation complies with RFC 826 (Ethernet ARP). It supports + * Gratuitious ARP from RFC3220 (IP Mobility Support for IPv4) section 4.6 + * if an interface calls etharp_gratuitous(our_netif) upon address change. + */ + +/* + * Copyright (c) 2001-2003 Swedish Institute of Computer Science. + * Copyright (c) 2003-2004 Leon Woestenberg + * Copyright (c) 2003-2004 Axon Digital Design B.V., The Netherlands. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + */ + +#include "lwip/opt.h" + +#if LWIP_ARP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/inet.h" +#include "lwip/ip.h" +#include "lwip/stats.h" +#include "lwip/snmp.h" +#include "lwip/dhcp.h" +#include "lwip/autoip.h" +#include "netif/etharp.h" + +#if PPPOE_SUPPORT +#include "netif/ppp_oe.h" +#endif /* PPPOE_SUPPORT */ + +#include + +/** the time an ARP entry stays valid after its last update, + * for ARP_TMR_INTERVAL = 5000, this is + * (240 * 5) seconds = 20 minutes. + */ +#define ARP_MAXAGE 240 +/** the time an ARP entry stays pending after first request, + * for ARP_TMR_INTERVAL = 5000, this is + * (2 * 5) seconds = 10 seconds. + * + * @internal Keep this number at least 2, otherwise it might + * run out instantly if the timeout occurs directly after a request. + */ +#define ARP_MAXPENDING 2 + +#define HWTYPE_ETHERNET 1 + +#define ARPH_HWLEN(hdr) (ntohs((hdr)->_hwlen_protolen) >> 8) +#define ARPH_PROTOLEN(hdr) (ntohs((hdr)->_hwlen_protolen) & 0xff) + +#define ARPH_HWLEN_SET(hdr, len) (hdr)->_hwlen_protolen = htons(ARPH_PROTOLEN(hdr) | ((len) << 8)) +#define ARPH_PROTOLEN_SET(hdr, len) (hdr)->_hwlen_protolen = htons((len) | (ARPH_HWLEN(hdr) << 8)) + +enum etharp_state { + ETHARP_STATE_EMPTY = 0, + ETHARP_STATE_PENDING, + ETHARP_STATE_STABLE +}; + +struct etharp_entry { +#if ARP_QUEUEING + /** + * Pointer to queue of pending outgoing packets on this ARP entry. + */ + struct etharp_q_entry *q; +#endif + struct ip_addr ipaddr; + struct eth_addr ethaddr; + enum etharp_state state; + u8_t ctime; + struct netif *netif; +}; + +const struct eth_addr ethbroadcast = {{0xff,0xff,0xff,0xff,0xff,0xff}}; +const struct eth_addr ethzero = {{0,0,0,0,0,0}}; +static struct etharp_entry arp_table[ARP_TABLE_SIZE]; +#if !LWIP_NETIF_HWADDRHINT +static u8_t etharp_cached_entry; +#endif + +/** + * Try hard to create a new entry - we want the IP address to appear in + * the cache (even if this means removing an active entry or so). */ +#define ETHARP_TRY_HARD 1 +#define ETHARP_FIND_ONLY 2 + +#if LWIP_NETIF_HWADDRHINT +#define NETIF_SET_HINT(netif, hint) if (((netif) != NULL) && ((netif)->addr_hint != NULL)) \ + *((netif)->addr_hint) = (hint); +static s8_t find_entry(struct ip_addr *ipaddr, u8_t flags, struct netif *netif); +#else /* LWIP_NETIF_HWADDRHINT */ +static s8_t find_entry(struct ip_addr *ipaddr, u8_t flags); +#endif /* LWIP_NETIF_HWADDRHINT */ + +static err_t update_arp_entry(struct netif *netif, struct ip_addr *ipaddr, struct eth_addr *ethaddr, u8_t flags); + + +/* Some checks, instead of etharp_init(): */ +#if (LWIP_ARP && (ARP_TABLE_SIZE > 0x7f)) + #error "If you want to use ARP, ARP_TABLE_SIZE must fit in an s8_t, so, you have to reduce it in your lwipopts.h" +#endif + + +#if ARP_QUEUEING +/** + * Free a complete queue of etharp entries + * + * @param q a qeueue of etharp_q_entry's to free + */ +static void +free_etharp_q(struct etharp_q_entry *q) +{ + struct etharp_q_entry *r; + LWIP_ASSERT("q != NULL", q != NULL); + LWIP_ASSERT("q->p != NULL", q->p != NULL); + while (q) { + r = q; + q = q->next; + LWIP_ASSERT("r->p != NULL", (r->p != NULL)); + pbuf_free(r->p); + memp_free(MEMP_ARP_QUEUE, r); + } +} +#endif + +/** + * Clears expired entries in the ARP table. + * + * This function should be called every ETHARP_TMR_INTERVAL microseconds (5 seconds), + * in order to expire entries in the ARP table. + */ +void +etharp_tmr(void) +{ + u8_t i; + + LWIP_DEBUGF(ETHARP_DEBUG, ("etharp_timer\n")); + /* remove expired entries from the ARP table */ + for (i = 0; i < ARP_TABLE_SIZE; ++i) { + arp_table[i].ctime++; + if (((arp_table[i].state == ETHARP_STATE_STABLE) && + (arp_table[i].ctime >= ARP_MAXAGE)) || + ((arp_table[i].state == ETHARP_STATE_PENDING) && + (arp_table[i].ctime >= ARP_MAXPENDING))) { + /* pending or stable entry has become old! */ + LWIP_DEBUGF(ETHARP_DEBUG, ("etharp_timer: expired %s entry %"U16_F".\n", + arp_table[i].state == ETHARP_STATE_STABLE ? "stable" : "pending", (u16_t)i)); + /* clean up entries that have just been expired */ + /* remove from SNMP ARP index tree */ + snmp_delete_arpidx_tree(arp_table[i].netif, &arp_table[i].ipaddr); +#if ARP_QUEUEING + /* and empty packet queue */ + if (arp_table[i].q != NULL) { + /* remove all queued packets */ + LWIP_DEBUGF(ETHARP_DEBUG, ("etharp_timer: freeing entry %"U16_F", packet queue %p.\n", (u16_t)i, (void *)(arp_table[i].q))); + free_etharp_q(arp_table[i].q); + arp_table[i].q = NULL; + } +#endif + /* recycle entry for re-use */ + arp_table[i].state = ETHARP_STATE_EMPTY; + } +#if ARP_QUEUEING + /* still pending entry? (not expired) */ + if (arp_table[i].state == ETHARP_STATE_PENDING) { + /* resend an ARP query here? */ + } +#endif + } +} + +/** + * Search the ARP table for a matching or new entry. + * + * If an IP address is given, return a pending or stable ARP entry that matches + * the address. If no match is found, create a new entry with this address set, + * but in state ETHARP_EMPTY. The caller must check and possibly change the + * state of the returned entry. + * + * If ipaddr is NULL, return a initialized new entry in state ETHARP_EMPTY. + * + * In all cases, attempt to create new entries from an empty entry. If no + * empty entries are available and ETHARP_TRY_HARD flag is set, recycle + * old entries. Heuristic choose the least important entry for recycling. + * + * @param ipaddr IP address to find in ARP cache, or to add if not found. + * @param flags + * - ETHARP_TRY_HARD: Try hard to create a entry by allowing recycling of + * active (stable or pending) entries. + * + * @return The ARP entry index that matched or is created, ERR_MEM if no + * entry is found or could be recycled. + */ +static s8_t +#if LWIP_NETIF_HWADDRHINT +find_entry(struct ip_addr *ipaddr, u8_t flags, struct netif *netif) +#else /* LWIP_NETIF_HWADDRHINT */ +find_entry(struct ip_addr *ipaddr, u8_t flags) +#endif /* LWIP_NETIF_HWADDRHINT */ +{ + s8_t old_pending = ARP_TABLE_SIZE, old_stable = ARP_TABLE_SIZE; + s8_t empty = ARP_TABLE_SIZE; + u8_t i = 0, age_pending = 0, age_stable = 0; +#if ARP_QUEUEING + /* oldest entry with packets on queue */ + s8_t old_queue = ARP_TABLE_SIZE; + /* its age */ + u8_t age_queue = 0; +#endif + + /* First, test if the last call to this function asked for the + * same address. If so, we're really fast! */ + if (ipaddr) { + /* ipaddr to search for was given */ +#if LWIP_NETIF_HWADDRHINT + if ((netif != NULL) && (netif->addr_hint != NULL)) { + /* per-pcb cached entry was given */ + u8_t per_pcb_cache = *(netif->addr_hint); + if ((per_pcb_cache < ARP_TABLE_SIZE) && arp_table[per_pcb_cache].state == ETHARP_STATE_STABLE) { + /* the per-pcb-cached entry is stable */ + if (ip_addr_cmp(ipaddr, &arp_table[per_pcb_cache].ipaddr)) { + /* per-pcb cached entry was the right one! */ + ETHARP_STATS_INC(etharp.cachehit); + return per_pcb_cache; + } + } + } +#else /* #if LWIP_NETIF_HWADDRHINT */ + if (arp_table[etharp_cached_entry].state == ETHARP_STATE_STABLE) { + /* the cached entry is stable */ + if (ip_addr_cmp(ipaddr, &arp_table[etharp_cached_entry].ipaddr)) { + /* cached entry was the right one! */ + ETHARP_STATS_INC(etharp.cachehit); + return etharp_cached_entry; + } + } +#endif /* #if LWIP_NETIF_HWADDRHINT */ + } + + /** + * a) do a search through the cache, remember candidates + * b) select candidate entry + * c) create new entry + */ + + /* a) in a single search sweep, do all of this + * 1) remember the first empty entry (if any) + * 2) remember the oldest stable entry (if any) + * 3) remember the oldest pending entry without queued packets (if any) + * 4) remember the oldest pending entry with queued packets (if any) + * 5) search for a matching IP entry, either pending or stable + * until 5 matches, or all entries are searched for. + */ + + for (i = 0; i < ARP_TABLE_SIZE; ++i) { + /* no empty entry found yet and now we do find one? */ + if ((empty == ARP_TABLE_SIZE) && (arp_table[i].state == ETHARP_STATE_EMPTY)) { + LWIP_DEBUGF(ETHARP_DEBUG, ("find_entry: found empty entry %"U16_F"\n", (u16_t)i)); + /* remember first empty entry */ + empty = i; + } + /* pending entry? */ + else if (arp_table[i].state == ETHARP_STATE_PENDING) { + /* if given, does IP address match IP address in ARP entry? */ + if (ipaddr && ip_addr_cmp(ipaddr, &arp_table[i].ipaddr)) { + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("find_entry: found matching pending entry %"U16_F"\n", (u16_t)i)); + /* found exact IP address match, simply bail out */ +#if LWIP_NETIF_HWADDRHINT + NETIF_SET_HINT(netif, i); +#else /* #if LWIP_NETIF_HWADDRHINT */ + etharp_cached_entry = i; +#endif /* #if LWIP_NETIF_HWADDRHINT */ + return i; +#if ARP_QUEUEING + /* pending with queued packets? */ + } else if (arp_table[i].q != NULL) { + if (arp_table[i].ctime >= age_queue) { + old_queue = i; + age_queue = arp_table[i].ctime; + } +#endif + /* pending without queued packets? */ + } else { + if (arp_table[i].ctime >= age_pending) { + old_pending = i; + age_pending = arp_table[i].ctime; + } + } + } + /* stable entry? */ + else if (arp_table[i].state == ETHARP_STATE_STABLE) { + /* if given, does IP address match IP address in ARP entry? */ + if (ipaddr && ip_addr_cmp(ipaddr, &arp_table[i].ipaddr)) { + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("find_entry: found matching stable entry %"U16_F"\n", (u16_t)i)); + /* found exact IP address match, simply bail out */ +#if LWIP_NETIF_HWADDRHINT + NETIF_SET_HINT(netif, i); +#else /* #if LWIP_NETIF_HWADDRHINT */ + etharp_cached_entry = i; +#endif /* #if LWIP_NETIF_HWADDRHINT */ + return i; + /* remember entry with oldest stable entry in oldest, its age in maxtime */ + } else if (arp_table[i].ctime >= age_stable) { + old_stable = i; + age_stable = arp_table[i].ctime; + } + } + } + /* { we have no match } => try to create a new entry */ + + /* no empty entry found and not allowed to recycle? */ + if (((empty == ARP_TABLE_SIZE) && ((flags & ETHARP_TRY_HARD) == 0)) + /* or don't create new entry, only search? */ + || ((flags & ETHARP_FIND_ONLY) != 0)) { + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("find_entry: no empty entry found and not allowed to recycle\n")); + return (s8_t)ERR_MEM; + } + + /* b) choose the least destructive entry to recycle: + * 1) empty entry + * 2) oldest stable entry + * 3) oldest pending entry without queued packets + * 4) oldest pending entry with queued packets + * + * { ETHARP_TRY_HARD is set at this point } + */ + + /* 1) empty entry available? */ + if (empty < ARP_TABLE_SIZE) { + i = empty; + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("find_entry: selecting empty entry %"U16_F"\n", (u16_t)i)); + } + /* 2) found recyclable stable entry? */ + else if (old_stable < ARP_TABLE_SIZE) { + /* recycle oldest stable*/ + i = old_stable; + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("find_entry: selecting oldest stable entry %"U16_F"\n", (u16_t)i)); +#if ARP_QUEUEING + /* no queued packets should exist on stable entries */ + LWIP_ASSERT("arp_table[i].q == NULL", arp_table[i].q == NULL); +#endif + /* 3) found recyclable pending entry without queued packets? */ + } else if (old_pending < ARP_TABLE_SIZE) { + /* recycle oldest pending */ + i = old_pending; + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("find_entry: selecting oldest pending entry %"U16_F" (without queue)\n", (u16_t)i)); +#if ARP_QUEUEING + /* 4) found recyclable pending entry with queued packets? */ + } else if (old_queue < ARP_TABLE_SIZE) { + /* recycle oldest pending */ + i = old_queue; + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("find_entry: selecting oldest pending entry %"U16_F", freeing packet queue %p\n", (u16_t)i, (void *)(arp_table[i].q))); + free_etharp_q(arp_table[i].q); + arp_table[i].q = NULL; +#endif + /* no empty or recyclable entries found */ + } else { + return (s8_t)ERR_MEM; + } + + /* { empty or recyclable entry found } */ + LWIP_ASSERT("i < ARP_TABLE_SIZE", i < ARP_TABLE_SIZE); + + if (arp_table[i].state != ETHARP_STATE_EMPTY) + { + snmp_delete_arpidx_tree(arp_table[i].netif, &arp_table[i].ipaddr); + } + /* recycle entry (no-op for an already empty entry) */ + arp_table[i].state = ETHARP_STATE_EMPTY; + + /* IP address given? */ + if (ipaddr != NULL) { + /* set IP address */ + ip_addr_set(&arp_table[i].ipaddr, ipaddr); + } + arp_table[i].ctime = 0; +#if LWIP_NETIF_HWADDRHINT + NETIF_SET_HINT(netif, i); +#else /* #if LWIP_NETIF_HWADDRHINT */ + etharp_cached_entry = i; +#endif /* #if LWIP_NETIF_HWADDRHINT */ + return (err_t)i; +} + +/** + * Send an IP packet on the network using netif->linkoutput + * The ethernet header is filled in before sending. + * + * @params netif the lwIP network interface on which to send the packet + * @params p the packet to send, p->payload pointing to the (uninitialized) ethernet header + * @params src the source MAC address to be copied into the ethernet header + * @params dst the destination MAC address to be copied into the ethernet header + * @return ERR_OK if the packet was sent, any other err_t on failure + */ +static err_t +etharp_send_ip(struct netif *netif, struct pbuf *p, struct eth_addr *src, struct eth_addr *dst) +{ + struct eth_hdr *ethhdr = p->payload; + u8_t k; + + LWIP_ASSERT("netif->hwaddr_len must be the same as ETHARP_HWADDR_LEN for etharp!", + (netif->hwaddr_len == ETHARP_HWADDR_LEN)); + k = ETHARP_HWADDR_LEN; + while(k > 0) { + k--; + ethhdr->dest.addr[k] = dst->addr[k]; + ethhdr->src.addr[k] = src->addr[k]; + } + ethhdr->type = htons(ETHTYPE_IP); + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_send_ip: sending packet %p\n", (void *)p)); + /* send the packet */ + return netif->linkoutput(netif, p); +} + +/** + * Update (or insert) a IP/MAC address pair in the ARP cache. + * + * If a pending entry is resolved, any queued packets will be sent + * at this point. + * + * @param ipaddr IP address of the inserted ARP entry. + * @param ethaddr Ethernet address of the inserted ARP entry. + * @param flags Defines behaviour: + * - ETHARP_TRY_HARD Allows ARP to insert this as a new item. If not specified, + * only existing ARP entries will be updated. + * + * @return + * - ERR_OK Succesfully updated ARP cache. + * - ERR_MEM If we could not add a new ARP entry when ETHARP_TRY_HARD was set. + * - ERR_ARG Non-unicast address given, those will not appear in ARP cache. + * + * @see pbuf_free() + */ +static err_t +update_arp_entry(struct netif *netif, struct ip_addr *ipaddr, struct eth_addr *ethaddr, u8_t flags) +{ + s8_t i; + u8_t k; + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("update_arp_entry()\n")); + LWIP_ASSERT("netif->hwaddr_len == ETHARP_HWADDR_LEN", netif->hwaddr_len == ETHARP_HWADDR_LEN); + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("update_arp_entry: %"U16_F".%"U16_F".%"U16_F".%"U16_F" - %02"X16_F":%02"X16_F":%02"X16_F":%02"X16_F":%02"X16_F":%02"X16_F"\n", + ip4_addr1(ipaddr), ip4_addr2(ipaddr), ip4_addr3(ipaddr), ip4_addr4(ipaddr), + ethaddr->addr[0], ethaddr->addr[1], ethaddr->addr[2], + ethaddr->addr[3], ethaddr->addr[4], ethaddr->addr[5])); + /* non-unicast address? */ + if (ip_addr_isany(ipaddr) || + ip_addr_isbroadcast(ipaddr, netif) || + ip_addr_ismulticast(ipaddr)) { + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("update_arp_entry: will not add non-unicast IP address to ARP cache\n")); + return ERR_ARG; + } + /* find or create ARP entry */ +#if LWIP_NETIF_HWADDRHINT + i = find_entry(ipaddr, flags, netif); +#else /* LWIP_NETIF_HWADDRHINT */ + i = find_entry(ipaddr, flags); +#endif /* LWIP_NETIF_HWADDRHINT */ + /* bail out if no entry could be found */ + if (i < 0) + return (err_t)i; + + /* mark it stable */ + arp_table[i].state = ETHARP_STATE_STABLE; + /* record network interface */ + arp_table[i].netif = netif; + + /* insert in SNMP ARP index tree */ + snmp_insert_arpidx_tree(netif, &arp_table[i].ipaddr); + + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("update_arp_entry: updating stable entry %"S16_F"\n", (s16_t)i)); + /* update address */ + k = ETHARP_HWADDR_LEN; + while (k > 0) { + k--; + arp_table[i].ethaddr.addr[k] = ethaddr->addr[k]; + } + /* reset time stamp */ + arp_table[i].ctime = 0; +#if ARP_QUEUEING + /* this is where we will send out queued packets! */ + while (arp_table[i].q != NULL) { + struct pbuf *p; + /* remember remainder of queue */ + struct etharp_q_entry *q = arp_table[i].q; + /* pop first item off the queue */ + arp_table[i].q = q->next; + /* get the packet pointer */ + p = q->p; + /* now queue entry can be freed */ + memp_free(MEMP_ARP_QUEUE, q); + /* send the queued IP packet */ + etharp_send_ip(netif, p, (struct eth_addr*)(netif->hwaddr), ethaddr); + /* free the queued IP packet */ + pbuf_free(p); + } +#endif + return ERR_OK; +} + +/** + * Finds (stable) ethernet/IP address pair from ARP table + * using interface and IP address index. + * @note the addresses in the ARP table are in network order! + * + * @param netif points to interface index + * @param ipaddr points to the (network order) IP address index + * @param eth_ret points to return pointer + * @param ip_ret points to return pointer + * @return table index if found, -1 otherwise + */ +s8_t +etharp_find_addr(struct netif *netif, struct ip_addr *ipaddr, + struct eth_addr **eth_ret, struct ip_addr **ip_ret) +{ + s8_t i; + + LWIP_UNUSED_ARG(netif); + +#if LWIP_NETIF_HWADDRHINT + i = find_entry(ipaddr, ETHARP_FIND_ONLY, NULL); +#else /* LWIP_NETIF_HWADDRHINT */ + i = find_entry(ipaddr, ETHARP_FIND_ONLY); +#endif /* LWIP_NETIF_HWADDRHINT */ + if((i >= 0) && arp_table[i].state == ETHARP_STATE_STABLE) { + *eth_ret = &arp_table[i].ethaddr; + *ip_ret = &arp_table[i].ipaddr; + return i; + } + return -1; +} + +/** + * Updates the ARP table using the given IP packet. + * + * Uses the incoming IP packet's source address to update the + * ARP cache for the local network. The function does not alter + * or free the packet. This function must be called before the + * packet p is passed to the IP layer. + * + * @param netif The lwIP network interface on which the IP packet pbuf arrived. + * @param p The IP packet that arrived on netif. + * + * @return NULL + * + * @see pbuf_free() + */ +void +etharp_ip_input(struct netif *netif, struct pbuf *p) +{ + struct eth_hdr *ethhdr; + struct ip_hdr *iphdr; + LWIP_ERROR("netif != NULL", (netif != NULL), return;); + /* Only insert an entry if the source IP address of the + incoming IP packet comes from a host on the local network. */ + ethhdr = p->payload; + iphdr = (struct ip_hdr *)((u8_t*)ethhdr + SIZEOF_ETH_HDR); +#if ETHARP_SUPPORT_VLAN + if (ethhdr->type == ETHTYPE_VLAN) { + iphdr = (struct ip_hdr *)((u8_t*)ethhdr + SIZEOF_ETH_HDR + SIZEOF_VLAN_HDR); + } +#endif /* ETHARP_SUPPORT_VLAN */ + + /* source is not on the local network? */ + if (!ip_addr_netcmp(&(iphdr->src), &(netif->ip_addr), &(netif->netmask))) { + /* do nothing */ + return; + } + + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_ip_input: updating ETHARP table.\n")); + /* update ARP table */ + /* @todo We could use ETHARP_TRY_HARD if we think we are going to talk + * back soon (for example, if the destination IP address is ours. */ + update_arp_entry(netif, &(iphdr->src), &(ethhdr->src), 0); +} + + +/** + * Responds to ARP requests to us. Upon ARP replies to us, add entry to cache + * send out queued IP packets. Updates cache with snooped address pairs. + * + * Should be called for incoming ARP packets. The pbuf in the argument + * is freed by this function. + * + * @param netif The lwIP network interface on which the ARP packet pbuf arrived. + * @param ethaddr Ethernet address of netif. + * @param p The ARP packet that arrived on netif. Is freed by this function. + * + * @return NULL + * + * @see pbuf_free() + */ +void +etharp_arp_input(struct netif *netif, struct eth_addr *ethaddr, struct pbuf *p) +{ + struct etharp_hdr *hdr; + struct eth_hdr *ethhdr; + /* these are aligned properly, whereas the ARP header fields might not be */ + struct ip_addr sipaddr, dipaddr; + u8_t i; + u8_t for_us; +#if LWIP_AUTOIP + const u8_t * ethdst_hwaddr; +#endif /* LWIP_AUTOIP */ + + LWIP_ERROR("netif != NULL", (netif != NULL), return;); + + /* drop short ARP packets: we have to check for p->len instead of p->tot_len here + since a struct etharp_hdr is pointed to p->payload, so it musn't be chained! */ + if (p->len < SIZEOF_ETHARP_PACKET) { + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, + ("etharp_arp_input: packet dropped, too short (%"S16_F"/%"S16_F")\n", p->tot_len, + (s16_t)SIZEOF_ETHARP_PACKET)); + ETHARP_STATS_INC(etharp.lenerr); + ETHARP_STATS_INC(etharp.drop); + pbuf_free(p); + return; + } + + ethhdr = p->payload; + hdr = (struct etharp_hdr *)((u8_t*)ethhdr + SIZEOF_ETH_HDR); +#if ETHARP_SUPPORT_VLAN + if (ethhdr->type == ETHTYPE_VLAN) { + hdr = (struct etharp_hdr *)(((u8_t*)ethhdr) + SIZEOF_ETH_HDR + SIZEOF_VLAN_HDR); + } +#endif /* ETHARP_SUPPORT_VLAN */ + + /* RFC 826 "Packet Reception": */ + if ((hdr->hwtype != htons(HWTYPE_ETHERNET)) || + (hdr->_hwlen_protolen != htons((ETHARP_HWADDR_LEN << 8) | sizeof(struct ip_addr))) || + (hdr->proto != htons(ETHTYPE_IP)) || + (ethhdr->type != htons(ETHTYPE_ARP))) { + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, + ("etharp_arp_input: packet dropped, wrong hw type, hwlen, proto, protolen or ethernet type (%"U16_F"/%"U16_F"/%"U16_F"/%"U16_F"/%"U16_F")\n", + hdr->hwtype, ARPH_HWLEN(hdr), hdr->proto, ARPH_PROTOLEN(hdr), ethhdr->type)); + ETHARP_STATS_INC(etharp.proterr); + ETHARP_STATS_INC(etharp.drop); + pbuf_free(p); + return; + } + ETHARP_STATS_INC(etharp.recv); + +#if LWIP_AUTOIP + /* We have to check if a host already has configured our random + * created link local address and continously check if there is + * a host with this IP-address so we can detect collisions */ + autoip_arp_reply(netif, hdr); +#endif /* LWIP_AUTOIP */ + + /* Copy struct ip_addr2 to aligned ip_addr, to support compilers without + * structure packing (not using structure copy which breaks strict-aliasing rules). */ + SMEMCPY(&sipaddr, &hdr->sipaddr, sizeof(sipaddr)); + SMEMCPY(&dipaddr, &hdr->dipaddr, sizeof(dipaddr)); + + /* this interface is not configured? */ + if (netif->ip_addr.addr == 0) { + for_us = 0; + } else { + /* ARP packet directed to us? */ + for_us = ip_addr_cmp(&dipaddr, &(netif->ip_addr)); + } + + /* ARP message directed to us? */ + if (for_us) { + /* add IP address in ARP cache; assume requester wants to talk to us. + * can result in directly sending the queued packets for this host. */ + update_arp_entry(netif, &sipaddr, &(hdr->shwaddr), ETHARP_TRY_HARD); + /* ARP message not directed to us? */ + } else { + /* update the source IP address in the cache, if present */ + update_arp_entry(netif, &sipaddr, &(hdr->shwaddr), 0); + } + + /* now act on the message itself */ + switch (htons(hdr->opcode)) { + /* ARP request? */ + case ARP_REQUEST: + /* ARP request. If it asked for our address, we send out a + * reply. In any case, we time-stamp any existing ARP entry, + * and possiby send out an IP packet that was queued on it. */ + + LWIP_DEBUGF (ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_arp_input: incoming ARP request\n")); + /* ARP request for our address? */ + if (for_us) { + + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_arp_input: replying to ARP request for our IP address\n")); + /* Re-use pbuf to send ARP reply. + Since we are re-using an existing pbuf, we can't call etharp_raw since + that would allocate a new pbuf. */ + hdr->opcode = htons(ARP_REPLY); + + hdr->dipaddr = hdr->sipaddr; + SMEMCPY(&hdr->sipaddr, &netif->ip_addr, sizeof(hdr->sipaddr)); + + LWIP_ASSERT("netif->hwaddr_len must be the same as ETHARP_HWADDR_LEN for etharp!", + (netif->hwaddr_len == ETHARP_HWADDR_LEN)); + i = ETHARP_HWADDR_LEN; +#if LWIP_AUTOIP + /* If we are using Link-Local, ARP packets must be broadcast on the + * link layer. (See RFC3927 Section 2.5) */ + ethdst_hwaddr = ((netif->autoip != NULL) && (netif->autoip->state != AUTOIP_STATE_OFF)) ? (u8_t*)(ethbroadcast.addr) : hdr->shwaddr.addr; +#endif /* LWIP_AUTOIP */ + + while(i > 0) { + i--; + hdr->dhwaddr.addr[i] = hdr->shwaddr.addr[i]; +#if LWIP_AUTOIP + ethhdr->dest.addr[i] = ethdst_hwaddr[i]; +#else /* LWIP_AUTOIP */ + ethhdr->dest.addr[i] = hdr->shwaddr.addr[i]; +#endif /* LWIP_AUTOIP */ + hdr->shwaddr.addr[i] = ethaddr->addr[i]; + ethhdr->src.addr[i] = ethaddr->addr[i]; + } + + /* hwtype, hwaddr_len, proto, protolen and the type in the ethernet header + are already correct, we tested that before */ + + /* return ARP reply */ + netif->linkoutput(netif, p); + /* we are not configured? */ + } else if (netif->ip_addr.addr == 0) { + /* { for_us == 0 and netif->ip_addr.addr == 0 } */ + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_arp_input: we are unconfigured, ARP request ignored.\n")); + /* request was not directed to us */ + } else { + /* { for_us == 0 and netif->ip_addr.addr != 0 } */ + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_arp_input: ARP request was not for us.\n")); + } + break; + case ARP_REPLY: + /* ARP reply. We already updated the ARP cache earlier. */ + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_arp_input: incoming ARP reply\n")); +#if (LWIP_DHCP && DHCP_DOES_ARP_CHECK) + /* DHCP wants to know about ARP replies from any host with an + * IP address also offered to us by the DHCP server. We do not + * want to take a duplicate IP address on a single network. + * @todo How should we handle redundant (fail-over) interfaces? */ + dhcp_arp_reply(netif, &sipaddr); +#endif + break; + default: + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_arp_input: ARP unknown opcode type %"S16_F"\n", htons(hdr->opcode))); + ETHARP_STATS_INC(etharp.err); + break; + } + /* free ARP packet */ + pbuf_free(p); +} + +/** + * Resolve and fill-in Ethernet address header for outgoing IP packet. + * + * For IP multicast and broadcast, corresponding Ethernet addresses + * are selected and the packet is transmitted on the link. + * + * For unicast addresses, the packet is submitted to etharp_query(). In + * case the IP address is outside the local network, the IP address of + * the gateway is used. + * + * @param netif The lwIP network interface which the IP packet will be sent on. + * @param q The pbuf(s) containing the IP packet to be sent. + * @param ipaddr The IP address of the packet destination. + * + * @return + * - ERR_RTE No route to destination (no gateway to external networks), + * or the return type of either etharp_query() or etharp_send_ip(). + */ +err_t +etharp_output(struct netif *netif, struct pbuf *q, struct ip_addr *ipaddr) +{ + struct eth_addr *dest, mcastaddr; + + /* make room for Ethernet header - should not fail */ + if (pbuf_header(q, sizeof(struct eth_hdr)) != 0) { + /* bail out */ + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, + ("etharp_output: could not allocate room for header.\n")); + LINK_STATS_INC(link.lenerr); + return ERR_BUF; + } + + /* assume unresolved Ethernet address */ + dest = NULL; + /* Determine on destination hardware address. Broadcasts and multicasts + * are special, other IP addresses are looked up in the ARP table. */ + + /* broadcast destination IP address? */ + if (ip_addr_isbroadcast(ipaddr, netif)) { + /* broadcast on Ethernet also */ + dest = (struct eth_addr *)ðbroadcast; + /* multicast destination IP address? */ + } else if (ip_addr_ismulticast(ipaddr)) { + /* Hash IP multicast address to MAC address.*/ + mcastaddr.addr[0] = 0x01; + mcastaddr.addr[1] = 0x00; + mcastaddr.addr[2] = 0x5e; + mcastaddr.addr[3] = ip4_addr2(ipaddr) & 0x7f; + mcastaddr.addr[4] = ip4_addr3(ipaddr); + mcastaddr.addr[5] = ip4_addr4(ipaddr); + /* destination Ethernet address is multicast */ + dest = &mcastaddr; + /* unicast destination IP address? */ + } else { + /* outside local network? */ + if (!ip_addr_netcmp(ipaddr, &(netif->ip_addr), &(netif->netmask))) { + /* interface has default gateway? */ + if (netif->gw.addr != 0) { + /* send to hardware address of default gateway IP address */ + ipaddr = &(netif->gw); + /* no default gateway available */ + } else { + /* no route to destination error (default gateway missing) */ + return ERR_RTE; + } + } + /* queue on destination Ethernet address belonging to ipaddr */ + return etharp_query(netif, ipaddr, q); + } + + /* continuation for multicast/broadcast destinations */ + /* obtain source Ethernet address of the given interface */ + /* send packet directly on the link */ + return etharp_send_ip(netif, q, (struct eth_addr*)(netif->hwaddr), dest); +} + +/** + * Send an ARP request for the given IP address and/or queue a packet. + * + * If the IP address was not yet in the cache, a pending ARP cache entry + * is added and an ARP request is sent for the given address. The packet + * is queued on this entry. + * + * If the IP address was already pending in the cache, a new ARP request + * is sent for the given address. The packet is queued on this entry. + * + * If the IP address was already stable in the cache, and a packet is + * given, it is directly sent and no ARP request is sent out. + * + * If the IP address was already stable in the cache, and no packet is + * given, an ARP request is sent out. + * + * @param netif The lwIP network interface on which ipaddr + * must be queried for. + * @param ipaddr The IP address to be resolved. + * @param q If non-NULL, a pbuf that must be delivered to the IP address. + * q is not freed by this function. + * + * @note q must only be ONE packet, not a packet queue! + * + * @return + * - ERR_BUF Could not make room for Ethernet header. + * - ERR_MEM Hardware address unknown, and no more ARP entries available + * to query for address or queue the packet. + * - ERR_MEM Could not queue packet due to memory shortage. + * - ERR_RTE No route to destination (no gateway to external networks). + * - ERR_ARG Non-unicast address given, those will not appear in ARP cache. + * + */ +err_t +etharp_query(struct netif *netif, struct ip_addr *ipaddr, struct pbuf *q) +{ + struct eth_addr * srcaddr = (struct eth_addr *)netif->hwaddr; + err_t result = ERR_MEM; + s8_t i; /* ARP entry index */ + + /* non-unicast address? */ + if (ip_addr_isbroadcast(ipaddr, netif) || + ip_addr_ismulticast(ipaddr) || + ip_addr_isany(ipaddr)) { + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: will not add non-unicast IP address to ARP cache\n")); + return ERR_ARG; + } + + /* find entry in ARP cache, ask to create entry if queueing packet */ +#if LWIP_NETIF_HWADDRHINT + i = find_entry(ipaddr, ETHARP_TRY_HARD, netif); +#else /* LWIP_NETIF_HWADDRHINT */ + i = find_entry(ipaddr, ETHARP_TRY_HARD); +#endif /* LWIP_NETIF_HWADDRHINT */ + + /* could not find or create entry? */ + if (i < 0) { + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: could not create ARP entry\n")); + if (q) { + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: packet dropped\n")); + ETHARP_STATS_INC(etharp.memerr); + } + return (err_t)i; + } + + /* mark a fresh entry as pending (we just sent a request) */ + if (arp_table[i].state == ETHARP_STATE_EMPTY) { + arp_table[i].state = ETHARP_STATE_PENDING; + } + + /* { i is either a STABLE or (new or existing) PENDING entry } */ + LWIP_ASSERT("arp_table[i].state == PENDING or STABLE", + ((arp_table[i].state == ETHARP_STATE_PENDING) || + (arp_table[i].state == ETHARP_STATE_STABLE))); + + /* do we have a pending entry? or an implicit query request? */ + if ((arp_table[i].state == ETHARP_STATE_PENDING) || (q == NULL)) { + /* try to resolve it; send out ARP request */ + result = etharp_request(netif, ipaddr); + if (result != ERR_OK) { + /* ARP request couldn't be sent */ + /* We don't re-send arp request in etharp_tmr, but we still queue packets, + since this failure could be temporary, and the next packet calling + etharp_query again could lead to sending the queued packets. */ + } + } + + /* packet given? */ + if (q != NULL) { + /* stable entry? */ + if (arp_table[i].state == ETHARP_STATE_STABLE) { + /* we have a valid IP->Ethernet address mapping */ + /* send the packet */ + result = etharp_send_ip(netif, q, srcaddr, &(arp_table[i].ethaddr)); + /* pending entry? (either just created or already pending */ + } else if (arp_table[i].state == ETHARP_STATE_PENDING) { +#if ARP_QUEUEING /* queue the given q packet */ + struct pbuf *p; + int copy_needed = 0; + /* IF q includes a PBUF_REF, PBUF_POOL or PBUF_RAM, we have no choice but + * to copy the whole queue into a new PBUF_RAM (see bug #11400) + * PBUF_ROMs can be left as they are, since ROM must not get changed. */ + p = q; + while (p) { + LWIP_ASSERT("no packet queues allowed!", (p->len != p->tot_len) || (p->next == 0)); + if(p->type != PBUF_ROM) { + copy_needed = 1; + break; + } + p = p->next; + } + if(copy_needed) { + /* copy the whole packet into new pbufs */ + p = pbuf_alloc(PBUF_RAW, p->tot_len, PBUF_RAM); + if(p != NULL) { + if (pbuf_copy(p, q) != ERR_OK) { + pbuf_free(p); + p = NULL; + } + } + } else { + /* referencing the old pbuf is enough */ + p = q; + pbuf_ref(p); + } + /* packet could be taken over? */ + if (p != NULL) { + /* queue packet ... */ + struct etharp_q_entry *new_entry; + /* allocate a new arp queue entry */ + new_entry = memp_malloc(MEMP_ARP_QUEUE); + if (new_entry != NULL) { + new_entry->next = 0; + new_entry->p = p; + if(arp_table[i].q != NULL) { + /* queue was already existent, append the new entry to the end */ + struct etharp_q_entry *r; + r = arp_table[i].q; + while (r->next != NULL) { + r = r->next; + } + r->next = new_entry; + } else { + /* queue did not exist, first item in queue */ + arp_table[i].q = new_entry; + } + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: queued packet %p on ARP entry %"S16_F"\n", (void *)q, (s16_t)i)); + result = ERR_OK; + } else { + /* the pool MEMP_ARP_QUEUE is empty */ + pbuf_free(p); + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: could not queue a copy of PBUF_REF packet %p (out of memory)\n", (void *)q)); + /* { result == ERR_MEM } through initialization */ + } + } else { + ETHARP_STATS_INC(etharp.memerr); + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: could not queue a copy of PBUF_REF packet %p (out of memory)\n", (void *)q)); + /* { result == ERR_MEM } through initialization */ + } +#else /* ARP_QUEUEING == 0 */ + /* q && state == PENDING && ARP_QUEUEING == 0 => result = ERR_MEM */ + /* { result == ERR_MEM } through initialization */ + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: Ethernet destination address unknown, queueing disabled, packet %p dropped\n", (void *)q)); +#endif + } + } + return result; +} + +/** + * Send a raw ARP packet (opcode and all addresses can be modified) + * + * @param netif the lwip network interface on which to send the ARP packet + * @param ethsrc_addr the source MAC address for the ethernet header + * @param ethdst_addr the destination MAC address for the ethernet header + * @param hwsrc_addr the source MAC address for the ARP protocol header + * @param ipsrc_addr the source IP address for the ARP protocol header + * @param hwdst_addr the destination MAC address for the ARP protocol header + * @param ipdst_addr the destination IP address for the ARP protocol header + * @param opcode the type of the ARP packet + * @return ERR_OK if the ARP packet has been sent + * ERR_MEM if the ARP packet couldn't be allocated + * any other err_t on failure + */ +#if !LWIP_AUTOIP +static +#endif /* LWIP_AUTOIP */ +err_t +etharp_raw(struct netif *netif, const struct eth_addr *ethsrc_addr, + const struct eth_addr *ethdst_addr, + const struct eth_addr *hwsrc_addr, const struct ip_addr *ipsrc_addr, + const struct eth_addr *hwdst_addr, const struct ip_addr *ipdst_addr, + const u16_t opcode) +{ + struct pbuf *p; + err_t result = ERR_OK; + u8_t k; /* ARP entry index */ + struct eth_hdr *ethhdr; + struct etharp_hdr *hdr; +#if LWIP_AUTOIP + const u8_t * ethdst_hwaddr; +#endif /* LWIP_AUTOIP */ + + /* allocate a pbuf for the outgoing ARP request packet */ + p = pbuf_alloc(PBUF_RAW, SIZEOF_ETHARP_PACKET, PBUF_RAM); + /* could allocate a pbuf for an ARP request? */ + if (p == NULL) { + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, + ("etharp_raw: could not allocate pbuf for ARP request.\n")); + ETHARP_STATS_INC(etharp.memerr); + return ERR_MEM; + } + LWIP_ASSERT("check that first pbuf can hold struct etharp_hdr", + (p->len >= SIZEOF_ETHARP_PACKET)); + + ethhdr = p->payload; + hdr = (struct etharp_hdr *)((u8_t*)ethhdr + SIZEOF_ETH_HDR); + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_raw: sending raw ARP packet.\n")); + hdr->opcode = htons(opcode); + + LWIP_ASSERT("netif->hwaddr_len must be the same as ETHARP_HWADDR_LEN for etharp!", + (netif->hwaddr_len == ETHARP_HWADDR_LEN)); + k = ETHARP_HWADDR_LEN; +#if LWIP_AUTOIP + /* If we are using Link-Local, ARP packets must be broadcast on the + * link layer. (See RFC3927 Section 2.5) */ + ethdst_hwaddr = ((netif->autoip != NULL) && (netif->autoip->state != AUTOIP_STATE_OFF)) ? (u8_t*)(ethbroadcast.addr) : ethdst_addr->addr; +#endif /* LWIP_AUTOIP */ + /* Write MAC-Addresses (combined loop for both headers) */ + while(k > 0) { + k--; + /* Write the ARP MAC-Addresses */ + hdr->shwaddr.addr[k] = hwsrc_addr->addr[k]; + hdr->dhwaddr.addr[k] = hwdst_addr->addr[k]; + /* Write the Ethernet MAC-Addresses */ +#if LWIP_AUTOIP + ethhdr->dest.addr[k] = ethdst_hwaddr[k]; +#else /* LWIP_AUTOIP */ + ethhdr->dest.addr[k] = ethdst_addr->addr[k]; +#endif /* LWIP_AUTOIP */ + ethhdr->src.addr[k] = ethsrc_addr->addr[k]; + } + hdr->sipaddr = *(struct ip_addr2 *)ipsrc_addr; + hdr->dipaddr = *(struct ip_addr2 *)ipdst_addr; + + hdr->hwtype = htons(HWTYPE_ETHERNET); + hdr->proto = htons(ETHTYPE_IP); + /* set hwlen and protolen together */ + hdr->_hwlen_protolen = htons((ETHARP_HWADDR_LEN << 8) | sizeof(struct ip_addr)); + + ethhdr->type = htons(ETHTYPE_ARP); + /* send ARP query */ + result = netif->linkoutput(netif, p); + ETHARP_STATS_INC(etharp.xmit); + /* free ARP query packet */ + pbuf_free(p); + p = NULL; + /* could not allocate pbuf for ARP request */ + + return result; +} + +/** + * Send an ARP request packet asking for ipaddr. + * + * @param netif the lwip network interface on which to send the request + * @param ipaddr the IP address for which to ask + * @return ERR_OK if the request has been sent + * ERR_MEM if the ARP packet couldn't be allocated + * any other err_t on failure + */ +err_t +etharp_request(struct netif *netif, struct ip_addr *ipaddr) +{ + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_request: sending ARP request.\n")); + return etharp_raw(netif, (struct eth_addr *)netif->hwaddr, ðbroadcast, + (struct eth_addr *)netif->hwaddr, &netif->ip_addr, ðzero, + ipaddr, ARP_REQUEST); +} + +/** + * Process received ethernet frames. Using this function instead of directly + * calling ip_input and passing ARP frames through etharp in ethernetif_input, + * the ARP cache is protected from concurrent access. + * + * @param p the recevied packet, p->payload pointing to the ethernet header + * @param netif the network interface on which the packet was received + */ +err_t +ethernet_input(struct pbuf *p, struct netif *netif) +{ + struct eth_hdr* ethhdr; + u16_t type; + + /* points to packet payload, which starts with an Ethernet header */ + ethhdr = p->payload; + LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, + ("ethernet_input: dest:%02x:%02x:%02x:%02x:%02x:%02x, src:%02x:%02x:%02x:%02x:%02x:%02x, type:%2hx\n", + (unsigned)ethhdr->dest.addr[0], (unsigned)ethhdr->dest.addr[1], (unsigned)ethhdr->dest.addr[2], + (unsigned)ethhdr->dest.addr[3], (unsigned)ethhdr->dest.addr[4], (unsigned)ethhdr->dest.addr[5], + (unsigned)ethhdr->src.addr[0], (unsigned)ethhdr->src.addr[1], (unsigned)ethhdr->src.addr[2], + (unsigned)ethhdr->src.addr[3], (unsigned)ethhdr->src.addr[4], (unsigned)ethhdr->src.addr[5], + (unsigned)htons(ethhdr->type))); + + type = htons(ethhdr->type); +#if ETHARP_SUPPORT_VLAN + if (type == ETHTYPE_VLAN) { + struct eth_vlan_hdr *vlan = (struct eth_vlan_hdr*)(((char*)ethhdr) + SIZEOF_ETH_HDR); +#ifdef ETHARP_VLAN_CHECK /* if not, allow all VLANs */ + if (VLAN_ID(vlan) != ETHARP_VLAN_CHECK) { + /* silently ignore this packet: not for our VLAN */ + pbuf_free(p); + return ERR_OK; + } +#endif /* ETHARP_VLAN_CHECK */ + type = htons(vlan->tpid); + } +#endif /* ETHARP_SUPPORT_VLAN */ + + switch (type) { + /* IP packet? */ + case ETHTYPE_IP: +#if ETHARP_TRUST_IP_MAC + /* update ARP table */ + etharp_ip_input(netif, p); +#endif /* ETHARP_TRUST_IP_MAC */ + /* skip Ethernet header */ + if(pbuf_header(p, -(s16_t)SIZEOF_ETH_HDR)) { + LWIP_ASSERT("Can't move over header in packet", 0); + pbuf_free(p); + p = NULL; + } else { + /* pass to IP layer */ + ip_input(p, netif); + } + break; + + case ETHTYPE_ARP: + /* pass p to ARP module */ + etharp_arp_input(netif, (struct eth_addr*)(netif->hwaddr), p); + break; + +#if PPPOE_SUPPORT + case ETHTYPE_PPPOEDISC: /* PPP Over Ethernet Discovery Stage */ + pppoe_disc_input(netif, p); + break; + + case ETHTYPE_PPPOE: /* PPP Over Ethernet Session Stage */ + pppoe_data_input(netif, p); + break; +#endif /* PPPOE_SUPPORT */ + + default: + ETHARP_STATS_INC(etharp.proterr); + ETHARP_STATS_INC(etharp.drop); + pbuf_free(p); + p = NULL; + break; + } + + /* This means the pbuf is freed or consumed, + so the caller doesn't have to free it again */ + return ERR_OK; +} +#endif /* LWIP_ARP */ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/netif/loopif.c b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/netif/loopif.c new file mode 100644 index 000000000..b7d663294 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/netif/loopif.c @@ -0,0 +1,68 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * Loop Interface + * + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#include "lwip/opt.h" + +#if LWIP_HAVE_LOOPIF + +#include "netif/loopif.h" +#include "lwip/snmp.h" + +/** + * Initialize a lwip network interface structure for a loopback interface + * + * @param netif the lwip network interface structure for this loopif + * @return ERR_OK if the loopif is initialized + * ERR_MEM if private data couldn't be allocated + */ +err_t +loopif_init(struct netif *netif) +{ + /* initialize the snmp variables and counters inside the struct netif + * ifSpeed: no assumption can be made! + */ + NETIF_INIT_SNMP(netif, snmp_ifType_softwareLoopback, 0); + + netif->name[0] = 'l'; + netif->name[1] = 'o'; + netif->output = netif_loop_output; + return ERR_OK; +} + +#endif /* LWIP_HAVE_LOOPIF */ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/include/arch/cc.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/include/arch/cc.h new file mode 100644 index 000000000..fc9c07df3 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/include/arch/cc.h @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2001-2003 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __ARCH_CC_H__ +#define __ARCH_CC_H__ + +/* Define platform endianness */ +#ifndef BYTE_ORDER +#define BYTE_ORDER BIG_ENDIAN +#endif /* BYTE_ORDER */ + +/* Define generic types used in lwIP */ +typedef unsigned char u8_t; +typedef signed char s8_t; +typedef unsigned short u16_t; +typedef signed short s16_t; +typedef unsigned long u32_t; +typedef signed long s32_t; + +typedef u32_t mem_ptr_t; + +/* Define (sn)printf formatters for these lwIP types */ +#define U16_F "u" +#define S16_F "d" +#define X16_F "x" +#define U32_F "u" +#define S32_F "d" +#define X32_F "x" + +/* Compiler hints for packing structures */ +#define PACK_STRUCT_FIELD(x) x +#define PACK_STRUCT_STRUCT __attribute__((packed)) +#define PACK_STRUCT_BEGIN +#define PACK_STRUCT_END + +/* Plaform specific diagnostic output */ +#ifdef CONFIG_OWL +# include +# define LWIP_PLATFORM_DIAG(x) owl_printf x +# define LWIP_PLATFORM_ASSERT(x) owl_assert(x) +#else +# include +# define LWIP_PLATFORM_DIAG(x) do { printk x; } while(0) +# define LWIP_PLATFORM_ASSERT(x) do { \ + printk("Assertion \"%s\" failed at line " \ + "%d in %s\n", \ + x, __LINE__, __FILE__); while(1); \ + } while(0) +#endif + +#endif /* __ARCH_CC_H__ */ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/include/arch/perf.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/include/arch/perf.h new file mode 100644 index 000000000..49917871e --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/include/arch/perf.h @@ -0,0 +1,7 @@ +#ifndef __PERF_H__ +#define __PERF_H__ + +#define PERF_START /* null definition */ +#define PERF_STOP(x) /* null definition */ + +#endif diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/include/lwipopts.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/include/lwipopts.h new file mode 100644 index 000000000..ae4df230f --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/include/lwipopts.h @@ -0,0 +1,426 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * + * lwIP Options Configuration + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIPOPTS_H__ +#define __LWIPOPTS_H__ + +#include "wl_api.h" + +/* + ----------------------------------------------- + ---------- Platform specific locking ---------- + ----------------------------------------------- +*/ + +/** + * NO_SYS==1: Provides VERY minimal functionality. Otherwise, + * use lwIP facilities. + */ +#define NO_SYS 1 + + +/* + ------------------------------------ + ---------- Memory options ---------- + ------------------------------------ +*/ +/** + * MEM_ALIGNMENT: should be set to the alignment of the CPU + * 4 byte alignment -> #define MEM_ALIGNMENT 4 + * 2 byte alignment -> #define MEM_ALIGNMENT 2 + */ +#define MEM_ALIGNMENT 4 + +/** + * MEM_SIZE: the size of the heap memory. If the application will send + * a lot of data that needs to be copied, this should be set high. + */ +#define MEM_SIZE 16000 + + +/* + ------------------------------------------------ + ---------- Internal Memory Pool Sizes ---------- + ------------------------------------------------ +*/ +/** + * MEMP_NUM_PBUF: the number of memp struct pbufs (used for PBUF_ROM and PBUF_REF). + * If the application sends a lot of data out of ROM (or other static memory), + * this should be set high. + */ +#define MEMP_NUM_PBUF 30 + +/** + * MEMP_NUM_RAW_PCB: Number of raw connection PCBs + * (requires the LWIP_RAW option) + */ +#define MEMP_NUM_RAW_PCB 4 + +/** + * MEMP_NUM_UDP_PCB: the number of UDP protocol control blocks. One + * per active UDP "connection". + * (requires the LWIP_UDP option) + */ +#define MEMP_NUM_UDP_PCB 4 + +/** + * MEMP_NUM_TCP_PCB: the number of simulatenously active TCP connections. + * (requires the LWIP_TCP option) + */ +#define MEMP_NUM_TCP_PCB 2 + +/** + * MEMP_NUM_TCP_PCB_LISTEN: the number of listening TCP connections. + * (requires the LWIP_TCP option) + */ +#define MEMP_NUM_TCP_PCB_LISTEN 2 + +/** + * MEMP_NUM_TCP_SEG: the number of simultaneously queued TCP segments. + * (requires the LWIP_TCP option) + */ +#define MEMP_NUM_TCP_SEG 32 + +/** + * MEMP_NUM_ARP_QUEUE: the number of simulateously queued outgoing + * packets (pbufs) that are waiting for an ARP request (to resolve + * their destination address) to finish. + * (requires the ARP_QUEUEING option) + */ +#define MEMP_NUM_ARP_QUEUE 2 + +/** + * MEMP_NUM_SYS_TIMEOUT: the number of simulateously active timeouts. + * (requires NO_SYS==0) + */ +#define MEMP_NUM_SYS_TIMEOUT 0 + +/** + * MEMP_NUM_NETBUF: the number of struct netbufs. + * (only needed if you use the sequential API, like api_lib.c) + */ +#define MEMP_NUM_NETBUF 0 + +/** + * MEMP_NUM_NETCONN: the number of struct netconns. + * (only needed if you use the sequential API, like api_lib.c) + */ +#define MEMP_NUM_NETCONN 0 + +/** + * MEMP_NUM_TCPIP_MSG_API: the number of struct tcpip_msg, which are used + * for callback/timeout API communication. + * (only needed if you use tcpip.c) + */ +#define MEMP_NUM_TCPIP_MSG_API 0 + +/** + * MEMP_NUM_TCPIP_MSG_INPKT: the number of struct tcpip_msg, which are used + * for incoming packets. + * (only needed if you use tcpip.c) + */ +#define MEMP_NUM_TCPIP_MSG_INPKT 0 + +/** + * PBUF_POOL_SIZE: the number of buffers in the pbuf pool. + */ +#define PBUF_POOL_SIZE 32 + +/* + --------------------------------- + ---------- ARP options ---------- + --------------------------------- +*/ +/** + * LWIP_ARP==1: Enable ARP functionality. + */ +#define LWIP_ARP 1 + +/* + -------------------------------- + ---------- IP options ---------- + -------------------------------- +*/ +/** + * IP_FORWARD==1: Enables the ability to forward IP packets across network + * interfaces. If you are going to run lwIP on a device with only one network + * interface, define this to 0. + */ +#define IP_FORWARD 0 + +/** + * IP_OPTIONS: Defines the behavior for IP options. + * IP_OPTIONS==0_ALLOWED: All packets with IP options are dropped. + * IP_OPTIONS==1_ALLOWED: IP options are allowed (but not parsed). + */ +#define IP_OPTIONS_ALLOWED 1 + +/** + * IP_REASSEMBLY==1: Reassemble incoming fragmented IP packets. Note that + * this option does not affect outgoing packet sizes, which can be controlled + * via IP_FRAG. + */ +#define IP_REASSEMBLY 1 + +/** + * IP_FRAG==1: Fragment outgoing IP packets if their size exceeds MTU. Note + * that this option does not affect incoming packet sizes, which can be + * controlled via IP_REASSEMBLY. + */ +#define IP_FRAG 1 + +/** + * IP_REASS_MAXAGE: Maximum time (in multiples of IP_TMR_INTERVAL - so seconds, normally) + * a fragmented IP packet waits for all fragments to arrive. If not all fragments arrived + * in this time, the whole packet is discarded. + */ +#define IP_REASS_MAXAGE 3 + +/** + * IP_REASS_MAX_PBUFS: Total maximum amount of pbufs waiting to be reassembled. + * Since the received pbufs are enqueued, be sure to configure + * PBUF_POOL_SIZE > IP_REASS_MAX_PBUFS so that the stack is still able to receive + * packets even if the maximum amount of fragments is enqueued for reassembly! + */ +#define IP_REASS_MAX_PBUFS 10 + +/** + * IP_FRAG_USES_STATIC_BUF==1: Use a static MTU-sized buffer for IP + * fragmentation. Otherwise pbufs are allocated and reference the original + * packet data to be fragmented. + */ +#define IP_FRAG_USES_STATIC_BUF 0 + +/** + * IP_DEFAULT_TTL: Default value for Time-To-Live used by transport layers. + */ +#define IP_DEFAULT_TTL 255 + +/* + ---------------------------------- + ---------- ICMP options ---------- + ---------------------------------- +*/ +/** + * LWIP_ICMP==1: Enable ICMP module inside the IP stack. + * Be careful, disable that make your product non-compliant to RFC1122 + */ +#define LWIP_ICMP 1 + +/** + * ICMP_TTL: Default value for Time-To-Live used by ICMP packets. + */ +#define ICMP_TTL (IP_DEFAULT_TTL) + +/* + --------------------------------- + ---------- RAW options ---------- + --------------------------------- +*/ +/** + * LWIP_RAW==1: Enable application layer to hook into the IP layer itself. + */ +#define LWIP_RAW 1 + +/* + ---------------------------------- + ---------- DHCP options ---------- + ---------------------------------- +*/ +/** + * LWIP_DHCP==1: Enable DHCP module. + */ +#define LWIP_DHCP 1 + +/* + ------------------------------------ + ---------- AUTOIP options ---------- + ------------------------------------ +*/ +/** + * LWIP_AUTOIP==1: Enable AUTOIP module. + */ +#define LWIP_AUTOIP 0 + +/* + ---------------------------------- + ---------- SNMP options ---------- + ---------------------------------- +*/ +/** + * LWIP_SNMP==1: Turn on SNMP module. UDP must be available for SNMP + * transport. + */ +#define LWIP_SNMP 0 +#define SNMP_PRIVATE_MIB 0 + +/* + ---------------------------------- + ---------- IGMP options ---------- + ---------------------------------- +*/ +/** + * LWIP_IGMP==1: Turn on IGMP module. + */ +#define LWIP_IGMP 1 + +/* + ---------------------------------- + ---------- DNS options ----------- + ---------------------------------- +*/ +/** + * LWIP_DNS==1: Turn on DNS module. UDP must be available for DNS + * transport. + */ +#define LWIP_DNS 1 + +/* + --------------------------------- + ---------- UDP options ---------- + --------------------------------- +*/ +/** + * LWIP_UDP==1: Turn on UDP. + */ +#define LWIP_UDP 1 + +/** + * LWIP_UDPLITE==1: Turn on UDP-Lite. (Requires LWIP_UDP) + */ +#define LWIP_UDPLITE 0 + +/** + * UDP_TTL: Default Time-To-Live value. + */ +#define UDP_TTL (IP_DEFAULT_TTL) + +/* + --------------------------------- + ---------- TCP options ---------- + --------------------------------- +*/ +/** + * LWIP_TCP==1: Turn on TCP. + */ +#define LWIP_TCP 1 + +/* + ---------------------------------- + ---------- Pbuf options ---------- + ---------------------------------- +*/ +/** + * PBUF_LINK_HLEN: the number of bytes that should be allocated for a + * link level header. The default is 14, the standard value for + * Ethernet. + */ +#define PBUF_LINK_HLEN (14 + ETH_PAD_SIZE) + +/* + ------------------------------------ + ---------- LOOPIF options ---------- + ------------------------------------ +*/ +/** + * LWIP_HAVE_LOOPIF==1: Support loop interface (127.0.0.1) and loopif.c + */ +#define LWIP_HAVE_LOOPIF 1 +#define LWIP_LOOPIF_MULTITHREADING 0 + +/* + ---------------------------------------------- + ---------- Sequential layer options ---------- + ---------------------------------------------- +*/ + +/** + * LWIP_NETCONN==1: Enable Netconn API (require to use api_lib.c) + */ +#define LWIP_NETCONN 0 + +/* + ------------------------------------ + ---------- Socket options ---------- + ------------------------------------ +*/ +/** + * LWIP_SOCKET==1: Enable Socket API (require to use sockets.c) + */ +#define LWIP_SOCKET 0 + +/* + ---------------------------------------- + ---------- Statistics options ---------- + ---------------------------------------- +*/ +/** + * LWIP_STATS==1: Enable statistics collection in lwip_stats. + */ +#define LWIP_STATS 1 +#define LINK_STATS 1 + +/* Misc */ +#define LWIP_NETIF_LINK_CALLBACK 1 +#define LWIP_NETIF_STATUS_CALLBACK 1 +#define LWIP_TIMEVAL_PRIVATE 0 + +#undef DHCP_DOES_ARP_CHECK + +#if 0 +#define LWIP_DEBUG 1 +//#define NETIF_DEBUG LWIP_DBG_ON +#define DHCP_DEBUG LWIP_DBG_ON +//#define ICMP_DEBUG LWIP_DBG_ON +//#define TCP_DEBUG LWIP_DBG_ON +//#define TCP_RTO_DEBUG LWIP_DBG_ON +//#define IP_DEBUG LWIP_DBG_ON +//#define TCP_CWND_DEBUG LWIP_DBG_ON +//#define ETHARP_DEBUG LWIP_DBG_ON +//#define PBUF_DEBUG LWIP_DBG_ON +#define TCP_INPUT_DEBUG LWIP_DBG_ON +#define TCP_OUTPUT_DEBUG LWIP_DBG_ON +#endif + +#define ETH_PAD_SIZE WL_HEADER_SIZE /* size of wifiengine header */ +#define MEM_LIBC_MALLOC 1 + +#define TCP_MSS 512 +#define TCP_SND_BUF 4096 +#endif /* __LWIPOPTS_H__ */ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/include/netif/wlif.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/include/netif/wlif.h new file mode 100644 index 000000000..6354e1c91 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/include/netif/wlif.h @@ -0,0 +1,10 @@ +#ifndef __NETIF_NRWLANIF_H__ +#define __NETIF_NRWLANIF_H__ + +#include "lwip/netif.h" +#include "lwip/err.h" + +err_t wlif_init(struct netif *netif); +void wlif_poll(struct netif *netif); + +#endif diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/netif/wlif.c b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/netif/wlif.c new file mode 100644 index 000000000..55d5b6abd --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/netif/wlif.c @@ -0,0 +1,386 @@ +#include "lwip/opt.h" +#include "lwip/def.h" +#include "lwip/mem.h" +#include "lwip/pbuf.h" +#include "lwip/stats.h" +#include "lwip/sys.h" +#include "netif/etharp.h" +#include "netif/wlif.h" +#include +#include + +#define IFNAME0 'w' +#define IFNAME1 'l' + +/* the queue size will affect the tx performance when using power save. + * A small queue will quickly become filled up if we have to wake the device + * before the actual transmission can occur. When the queue is filled up, the + * packets will be discarded and retransmission will be handled by the upper + * layers. In case of TCP, the retransmission time might be quite long. + * + * If the packets can be put in the pqueue instead, all the packets + * (if possible) will be transmitted when the device wakes up, so we don't have + * to wait for retransmission from upper layers. + */ +#define PQUEUE_SIZE 8 + +struct wlif_t { + volatile uint8_t rx_pending; + + struct { + struct pbuf* buf[PQUEUE_SIZE]; + uint8_t first; + uint8_t last; + } pqueue; +}; + +#define PQUEUE_EMPTY(q) (q.last == q.first) +#define PQUEUE_FULL(q) ((q.last + 1) % PQUEUE_SIZE == q.first) +#define PQUEUE_FIRST(q) (q.buf[q.first]) +#define PQUEUE_DEQUEUE(q) \ + ({ \ + struct pbuf* __p = PQUEUE_FIRST(q); \ + q.first = (q.first + 1) % PQUEUE_SIZE; \ + __p; \ + }) +#define PQUEUE_ENQUEUE(q, p) \ + ({ \ + q.buf[q.last] = p; \ + q.last = (q.last + 1) % PQUEUE_SIZE; \ + }) + + +static err_t process_pqueue(struct netif* netif) +{ + struct pbuf *p; + struct pbuf *q; + int status; + struct wlif_t *priv = (struct wlif_t*) netif->state; + + /* queue empty? finished */ + if (PQUEUE_EMPTY(priv->pqueue)) + return ERR_OK; + + /* get first packet in queue */ + p = PQUEUE_FIRST(priv->pqueue); + + status = wl_process_tx( + p->payload + WL_HEADER_SIZE, /* ptr to eth hdr */ + p->len - WL_HEADER_SIZE, /* input buffer len */ + p->tot_len - WL_HEADER_SIZE, /* pkt len */ + p->payload, /* ptr to WE hdr */ + 0, /* prio */ + p); /* pkt handle */ + + /* if we fail due to power save mode, leave packet in queue and + * try again when target is awake again (upon WL_RX_EVENT_WAKEUP). + */ + if (status == WL_RESOURCES) + return ERR_IF; + + /* if we fail for another reason, just discard the packet */ + if (status != WL_SUCCESS) { + PQUEUE_DEQUEUE(priv->pqueue); + pbuf_free(p); + return ERR_IF; + } + + /* Send the data from the pbuf to the interface, one pbuf at a + * time. The size of the data in each pbuf is kept in the ->len + * variable. + */ + for (q = p; q != NULL; q = q->next) + wl_tx(q->payload, q->len); + + /* remove packet from queue and dec refcnt */ + PQUEUE_DEQUEUE(priv->pqueue); + pbuf_free(p); + + LINK_STATS_INC(link.xmit); + + /* tell caller to process next packet */ + return ERR_INPROGRESS; +} + + +/** + * Called in interrupt context when we can read more data from the mac. + * + */ +static void +rx_isr(void* ctx) +{ + struct netif *netif = ctx; + struct wlif_t *priv = (struct wlif_t*) netif->state; + priv->rx_pending = 1; +} + + +/** + * In this function, the hardware should be initialized. + * Called from wlif_init(). + * + * @param netif the already initialized lwip network interface structure + * for this ethernetif + */ +static err_t +low_level_init(struct netif *netif) +{ + /* device capabilities */ + netif->flags = NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP | + NETIF_FLAG_IGMP; + + /* NETIF_FLAG_LINK_UP must be set only when we have an wlan assoc */ + + /* set MAC hardware address length */ + netif->hwaddr_len = ETHARP_HWADDR_LEN; + + if (wl_get_mac_addr(netif->hwaddr) != WL_SUCCESS) + return ERR_IF; + + /* maximum transfer unit */ + netif->mtu = 1500; + + return ERR_OK; +} + + +/** + * This function should do the actual transmission of the packet. The packet is + * contained in the pbuf that is passed to the function. This pbuf + * might be chained. + * + * @param netif the lwip network interface structure for this ethernetif + * @param p the MAC packet to send (e.g. IP packet including MAC addresses and + * type) + * @return ERR_OK if the packet could be sent + * an err_t value if the packet couldn't be sent + * + * @note Returning ERR_MEM here if a DMA queue of your MAC is full can lead to + * strange results. You might consider waiting for space in the DMA queue + * to become availale since the stack doesn't retry to send a packet + * dropped because of memory failure (except for the TCP timers). + */ +static err_t +low_level_output(struct netif *netif, struct pbuf *p) +{ + struct wlif_t* priv = (struct wlif_t*) netif->state; + + /* must have a linear buffer containing up to and including + * the ethernet header + */ + if (p->len < sizeof(struct eth_hdr)) + return ERR_IF; + + /* queue full? drop packet */ + if (PQUEUE_FULL(priv->pqueue)) + return ERR_INPROGRESS; /* no one seems to check this anyway */ + + /* queue packet */ + PQUEUE_ENQUEUE(priv->pqueue, p); + pbuf_ref(p); + while (process_pqueue(netif) == ERR_INPROGRESS); + return ERR_OK; /* no one seems to check this anyway */ +} + +/** + * Should allocate a pbuf and transfer the bytes of the incoming + * packet from the interface into the pbuf. + * + * @param netif the lwip network interface structure for this ethernetif + * @return a pbuf filled with the received packet (including MAC header) + * NULL on memory error + */ +static struct pbuf * +low_level_input(struct netif *netif) +{ + struct pbuf *p; + struct wlif_t *priv = (struct wlif_t*) netif->state; + + char *stripped_pkt; + size_t stripped_pkt_len; + u16_t vlan; + u8_t rx_hdr_size; + int status; + u16_t len; + + /* maximum packet length from wl_rx() */ + len = WL_MAX_PKT_LEN; + + /* We allocate a continous pbuf */ + p = pbuf_alloc(PBUF_RAW, len, PBUF_RAM); + if (p == NULL) { + LWIP_DEBUGF(NETIF_DEBUG, ("low_level_input: fail to alloc " + "pbuf of len:%"S32_F"\n", len)); + return NULL; + } + + /* Read the entire msg */ + priv->rx_pending = 0; + wl_rx(p->payload, &len); + if (len == 0) { + LWIP_DEBUGF(NETIF_DEBUG, ("low_level_input: len was 0")); + return NULL; + } + + status = wl_process_rx( + p->payload, /* input buf */ + len, /* input buf length */ + &stripped_pkt, + &stripped_pkt_len, + &vlan); + + if (status == WL_ABSORBED) { + LWIP_DEBUGF(NETIF_DEBUG, ("low_level_input: absorbed")); + pbuf_free(p); + return NULL; + } + + /* Data packet, remove padding */ + rx_hdr_size = stripped_pkt - (char*) p->payload; + pbuf_realloc(p, stripped_pkt_len + rx_hdr_size); + + LINK_STATS_INC(link.recv); + return p; +} + + +/** + * This function will be called by wlif_poll() when a packet has been received + * from the mac. Then the type of the received packet is determined and + * the appropriate input function is called. + * + * @param netif the lwip network interface structure for this ethernetif + */ +static void +wlif_input(struct netif *netif) +{ + struct eth_hdr *ethhdr; + struct pbuf *p; + + /* move received packet into a new pbuf */ + p = low_level_input(netif); + + /* no packet could be read, silently ignore this */ + if (p == NULL) + return; + + /* points to packet payload, which starts with an Ethernet header */ + ethhdr = p->payload; + switch (htons(ethhdr->type)) { + /* IP or ARP packet? */ + case ETHTYPE_IP: + case ETHTYPE_ARP: +#if PPPOE_SUPPORT + /* PPPoE packet? */ + case ETHTYPE_PPPOEDISC: + case ETHTYPE_PPPOE: +#endif /* PPPOE_SUPPORT */ + /* full packet send to tcpip_thread to process */ + if (netif->input(p, netif) != ERR_OK) { + LWIP_DEBUGF(NETIF_DEBUG, + ("wlif_input: IP input error\n")); + pbuf_free(p); + p = NULL; + } + break; + + default: + pbuf_free(p); + p = NULL; + break; + } +} + +static ssize_t pkt_read_cb(char *dst, + void *src_handle, + size_t read_len, + int offset) { + ssize_t rc; + + rc = pbuf_copy_partial((struct pbuf *)src_handle, + dst, + read_len, + offset + WL_HEADER_SIZE); + if ( 0 == rc ) { + return -1; + } + + return rc; +} + +/** + * Should be called at the beginning of the program to set up the + * network interface. It calls the function low_level_init() to do the + * actual setup of the hardware. + * + * This function should be passed as a parameter to netif_add(). + * + * @param netif the lwip network interface structure for this ethernetif + * @return ERR_OK if the loopif is initialized + * ERR_MEM if private data couldn't be allocated + * any other err_t on error + */ +err_t +wlif_init(struct netif *netif) +{ + static struct wlif_t wlif; + + LWIP_ASSERT("netif != NULL", (netif != NULL)); + +#if LWIP_NETIF_HOSTNAME + /* Initialize interface hostname */ + if ( NULL == netif->hostname ) { + netif->hostname = "wlif"; + } +#endif /* LWIP_NETIF_HOSTNAME */ + + netif->state = &wlif; + netif->name[0] = IFNAME0; + netif->name[1] = IFNAME1; + + /* We directly use etharp_output() here to save a function call. + * You can instead declare your own function an call etharp_output() + * from it if you have to do some checks before sending (e.g. if link + * is available...) */ + netif->output = etharp_output; + netif->linkoutput = low_level_output; + + wl_register_rx_isr(rx_isr, netif); + wl_register_pkt_read_cb(pkt_read_cb); + + /* initialize the hardware */ + return low_level_init(netif); +} + + +/** + * + */ +void +wlif_poll(struct netif* netif) +{ + struct wlif_t* priv = NULL; + + /* wl api forward progress */ + wl_poll(); + + if (netif) + priv = (struct wlif_t*) netif->state; + + /* wlif_init() not called yet? */ + if (priv == NULL) + return; + + /* no packets pending? */ + if (!priv->rx_pending) + return; + + /* read the pending packet */ + wlif_input(netif); + + /* send any packets that was queued due to filled up target queue + * or power save mode. + */ + process_pqueue(netif); +} diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/readme.txt b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/readme.txt new file mode 100644 index 000000000..c95f30e72 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/readme.txt @@ -0,0 +1 @@ +This directory is specific to the WIFI H&D SPB104 components (\COMPONENTS\WIFI\HD_SPB104). diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS/ctrl_access.c b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS/ctrl_access.c new file mode 100644 index 000000000..09790c259 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS/ctrl_access.c @@ -0,0 +1,571 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Abstraction layer for memory interfaces. + * + * This module contains the interfaces: + * - MEM <-> USB; + * - MEM <-> RAM; + * - MEM <-> MEM. + * + * This module may be configured and expanded to support the following features: + * - write-protected globals; + * - password-protected data; + * - specific features; + * - etc. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +//_____ I N C L U D E S ____________________________________________________ + +#include "compiler.h" +#include "preprocessor.h" +#ifdef FREERTOS_USED +#include "FreeRTOS.h" +#include "semphr.h" +#endif +#include "ctrl_access.h" + + +//_____ D E F I N I T I O N S ______________________________________________ + +#ifdef FREERTOS_USED + +/*! \name LUN Access Protection Macros + */ +//! @{ + +/*! \brief Locks accesses to LUNs. + * + * \return \c TRUE if the access was successfully locked, else \c FALSE. + */ +#define Ctrl_access_lock() ctrl_access_lock() + +/*! \brief Unlocks accesses to LUNs. + */ +#define Ctrl_access_unlock() xSemaphoreGive(ctrl_access_semphr) + +//! @} + +//! Handle to the semaphore protecting accesses to LUNs. +static xSemaphoreHandle ctrl_access_semphr = NULL; + +#else + +/*! \name LUN Access Protection Macros + */ +//! @{ + +/*! \brief Locks accesses to LUNs. + * + * \return \c TRUE if the access was successfully locked, else \c FALSE. + */ +#define Ctrl_access_lock() TRUE + +/*! \brief Unlocks accesses to LUNs. + */ +#define Ctrl_access_unlock() + +//! @} + +#endif // FREERTOS_USED + + +#if MAX_LUN + +/*! \brief Initializes an entry of the LUN descriptor table. + * + * \param lun Logical Unit Number. + * + * \return LUN descriptor table entry initializer. + */ +#if ACCESS_USB == ENABLED && ACCESS_MEM_TO_RAM == ENABLED +#define Lun_desc_entry(lun) \ + {\ + TPASTE3(Lun_, lun, _test_unit_ready),\ + TPASTE3(Lun_, lun, _read_capacity),\ + TPASTE3(Lun_, lun, _wr_protect),\ + TPASTE3(Lun_, lun, _removal),\ + TPASTE3(Lun_, lun, _usb_read_10),\ + TPASTE3(Lun_, lun, _usb_write_10),\ + TPASTE3(Lun_, lun, _mem_2_ram),\ + TPASTE3(Lun_, lun, _ram_2_mem),\ + TPASTE3(LUN_, lun, _NAME)\ + } +#elif ACCESS_USB == ENABLED +#define Lun_desc_entry(lun) \ + {\ + TPASTE3(Lun_, lun, _test_unit_ready),\ + TPASTE3(Lun_, lun, _read_capacity),\ + TPASTE3(Lun_, lun, _wr_protect),\ + TPASTE3(Lun_, lun, _removal),\ + TPASTE3(Lun_, lun, _usb_read_10),\ + TPASTE3(Lun_, lun, _usb_write_10),\ + TPASTE3(LUN_, lun, _NAME)\ + } +#elif ACCESS_MEM_TO_RAM == ENABLED +#define Lun_desc_entry(lun) \ + {\ + TPASTE3(Lun_, lun, _test_unit_ready),\ + TPASTE3(Lun_, lun, _read_capacity),\ + TPASTE3(Lun_, lun, _wr_protect),\ + TPASTE3(Lun_, lun, _removal),\ + TPASTE3(Lun_, lun, _mem_2_ram),\ + TPASTE3(Lun_, lun, _ram_2_mem),\ + TPASTE3(LUN_, lun, _NAME)\ + } +#else +#define Lun_desc_entry(lun) \ + {\ + TPASTE3(Lun_, lun, _test_unit_ready),\ + TPASTE3(Lun_, lun, _read_capacity),\ + TPASTE3(Lun_, lun, _wr_protect),\ + TPASTE3(Lun_, lun, _removal),\ + TPASTE3(LUN_, lun, _NAME)\ + } +#endif + +//! LUN descriptor table. +static const struct +{ + Ctrl_status (*test_unit_ready)(void); + Ctrl_status (*read_capacity)(U32 *); + Bool (*wr_protect)(void); + Bool (*removal)(void); +#if ACCESS_USB == ENABLED + Ctrl_status (*usb_read_10)(U32, U16); + Ctrl_status (*usb_write_10)(U32, U16); +#endif +#if ACCESS_MEM_TO_RAM == ENABLED + Ctrl_status (*mem_2_ram)(U32, void *); + Ctrl_status (*ram_2_mem)(U32, const void *); +#endif + const char *name; +} lun_desc[MAX_LUN] = +{ +#if LUN_0 == ENABLE + Lun_desc_entry(0), +#endif +#if LUN_1 == ENABLE + Lun_desc_entry(1), +#endif +#if LUN_2 == ENABLE + Lun_desc_entry(2), +#endif +#if LUN_3 == ENABLE + Lun_desc_entry(3), +#endif +#if LUN_4 == ENABLE + Lun_desc_entry(4), +#endif +#if LUN_5 == ENABLE + Lun_desc_entry(5), +#endif +#if LUN_6 == ENABLE + Lun_desc_entry(6), +#endif +#if LUN_7 == ENABLE + Lun_desc_entry(7) +#endif +}; + +#endif + + +#if GLOBAL_WR_PROTECT == ENABLED +Bool g_wr_protect; +#endif + + +/*! \name Control Interface + */ +//! @{ + + +#ifdef FREERTOS_USED + +Bool ctrl_access_init(void) +{ + // If the handle to the protecting semaphore is not valid, + if (!ctrl_access_semphr) + { + // try to create the semaphore. + vSemaphoreCreateBinary(ctrl_access_semphr); + + // If the semaphore could not be created, there is no backup solution. + if (!ctrl_access_semphr) return FALSE; + } + + return TRUE; +} + + +/*! \brief Locks accesses to LUNs. + * + * \return \c TRUE if the access was successfully locked, else \c FALSE. + */ +static Bool ctrl_access_lock(void) +{ + // If the semaphore could not be created, there is no backup solution. + if (!ctrl_access_semphr) return FALSE; + + // Wait for the semaphore. + while (!xSemaphoreTake(ctrl_access_semphr, portMAX_DELAY)); + + return TRUE; +} + +#endif // FREERTOS_USED + + +U8 get_nb_lun(void) +{ +#if MEM_USB == ENABLE + U8 nb_lun; + + if (!Ctrl_access_lock()) return MAX_LUN; + + nb_lun = MAX_LUN + host_get_lun(); + + Ctrl_access_unlock(); + + return nb_lun; +#else + return MAX_LUN; +#endif +} + + +U8 get_cur_lun(void) +{ + return LUN_ID_0; +} + + +Ctrl_status mem_test_unit_ready(U8 lun) +{ + Ctrl_status status; + + if (!Ctrl_access_lock()) return CTRL_FAIL; + + status = +#if MAX_LUN + (lun < MAX_LUN) ? lun_desc[lun].test_unit_ready() : +#endif +#if LUN_USB == ENABLE + Lun_usb_test_unit_ready(lun - LUN_ID_USB); +#else + CTRL_FAIL; +#endif + + Ctrl_access_unlock(); + + return status; +} + + +Ctrl_status mem_read_capacity(U8 lun, U32 *u32_nb_sector) +{ + Ctrl_status status; + + if (!Ctrl_access_lock()) return CTRL_FAIL; + + status = +#if MAX_LUN + (lun < MAX_LUN) ? lun_desc[lun].read_capacity(u32_nb_sector) : +#endif +#if LUN_USB == ENABLE + Lun_usb_read_capacity(lun - LUN_ID_USB, u32_nb_sector); +#else + CTRL_FAIL; +#endif + + Ctrl_access_unlock(); + + return status; +} + + +U8 mem_sector_size(U8 lun) +{ + U8 sector_size; + + if (!Ctrl_access_lock()) return 0; + + sector_size = +#if MAX_LUN + (lun < MAX_LUN) ? 1 : +#endif +#if LUN_USB == ENABLE + Lun_usb_read_sector_size(lun - LUN_ID_USB); +#else + 0; +#endif + + Ctrl_access_unlock(); + + return sector_size; +} + + +Bool mem_wr_protect(U8 lun) +{ + Bool wr_protect; + + if (!Ctrl_access_lock()) return TRUE; + + wr_protect = +#if MAX_LUN + (lun < MAX_LUN) ? lun_desc[lun].wr_protect() : +#endif +#if LUN_USB == ENABLE + Lun_usb_wr_protect(lun - LUN_ID_USB); +#else + TRUE; +#endif + + Ctrl_access_unlock(); + + return wr_protect; +} + + +Bool mem_removal(U8 lun) +{ + Bool removal; + + if (!Ctrl_access_lock()) return TRUE; + + removal = +#if MAX_LUN + (lun < MAX_LUN) ? lun_desc[lun].removal() : +#endif +#if LUN_USB == ENABLE + Lun_usb_removal(); +#else + TRUE; +#endif + + Ctrl_access_unlock(); + + return removal; +} + + +const char *mem_name(U8 lun) +{ + return +#if MAX_LUN + (lun < MAX_LUN) ? lun_desc[lun].name : +#endif +#if LUN_USB == ENABLE + LUN_USB_NAME; +#else + NULL; +#endif +} + + +//! @} + + +#if ACCESS_USB == ENABLED + +/*! \name MEM <-> USB Interface + */ +//! @{ + + +Ctrl_status memory_2_usb(U8 lun, U32 addr, U16 nb_sector) +{ + Ctrl_status status; + + if (!Ctrl_access_lock()) return CTRL_FAIL; + + memory_start_read_action(nb_sector); + status = +#if MAX_LUN + (lun < MAX_LUN) ? lun_desc[lun].usb_read_10(addr, nb_sector) : +#endif + CTRL_FAIL; + memory_stop_read_action(); + + Ctrl_access_unlock(); + + return status; +} + + +Ctrl_status usb_2_memory(U8 lun, U32 addr, U16 nb_sector) +{ + Ctrl_status status; + + if (!Ctrl_access_lock()) return CTRL_FAIL; + + memory_start_write_action(nb_sector); + status = +#if MAX_LUN + (lun < MAX_LUN) ? lun_desc[lun].usb_write_10(addr, nb_sector) : +#endif + CTRL_FAIL; + memory_stop_write_action(); + + Ctrl_access_unlock(); + + return status; +} + + +//! @} + +#endif // ACCESS_USB == ENABLED + + +#if ACCESS_MEM_TO_RAM == ENABLED + +/*! \name MEM <-> RAM Interface + */ +//! @{ + + +Ctrl_status memory_2_ram(U8 lun, U32 addr, void *ram) +{ + Ctrl_status status; + + if (!Ctrl_access_lock()) return CTRL_FAIL; + + memory_start_read_action(1); + status = +#if MAX_LUN + (lun < MAX_LUN) ? lun_desc[lun].mem_2_ram(addr, ram) : +#endif +#if LUN_USB == ENABLE + Lun_usb_mem_2_ram(addr, ram); +#else + CTRL_FAIL; +#endif + memory_stop_read_action(); + + Ctrl_access_unlock(); + + return status; +} + + +Ctrl_status ram_2_memory(U8 lun, U32 addr, const void *ram) +{ + Ctrl_status status; + + if (!Ctrl_access_lock()) return CTRL_FAIL; + + memory_start_write_action(1); + status = +#if MAX_LUN + (lun < MAX_LUN) ? lun_desc[lun].ram_2_mem(addr, ram) : +#endif +#if LUN_USB == ENABLE + Lun_usb_ram_2_mem(addr, ram); +#else + CTRL_FAIL; +#endif + memory_stop_write_action(); + + Ctrl_access_unlock(); + + return status; +} + + +//! @} + +#endif // ACCESS_MEM_TO_RAM == ENABLED + + +#if ACCESS_STREAM == ENABLED + +/*! \name Streaming MEM <-> MEM Interface + */ +//! @{ + + + #if ACCESS_MEM_TO_MEM == ENABLED + +#include "fat.h" + +Ctrl_status stream_mem_to_mem(U8 src_lun, U32 src_addr, U8 dest_lun, U32 dest_addr, U16 nb_sector) +{ +#if (defined __GNUC__) && (defined __AVR32__) + __attribute__((__aligned__(4))) +#elif (defined __ICCAVR32__) + #pragma data_alignment = 4 +#endif + static U8 sector_buf[FS_512B]; + Ctrl_status status = CTRL_GOOD; + + while (nb_sector--) + { + if ((status = memory_2_ram(src_lun, src_addr++, sector_buf)) != CTRL_GOOD) break; + if ((status = ram_2_memory(dest_lun, dest_addr++, sector_buf)) != CTRL_GOOD) break; + } + + return status; +} + + #endif // ACCESS_MEM_TO_MEM == ENABLED + + +Ctrl_status stream_state(U8 id) +{ + return CTRL_GOOD; +} + + +U16 stream_stop(U8 id) +{ + return 0; +} + + +//! @} + +#endif // ACCESS_STREAM == ENABLED diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS/ctrl_access.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS/ctrl_access.h new file mode 100644 index 000000000..358bf6589 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS/ctrl_access.h @@ -0,0 +1,369 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Abstraction layer for memory interfaces. + * + * This module contains the interfaces: + * - MEM <-> USB; + * - MEM <-> RAM; + * - MEM <-> MEM. + * + * This module may be configured and expanded to support the following features: + * - write-protected globals; + * - password-protected data; + * - specific features; + * - etc. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _CTRL_ACCESS_H_ +#define _CTRL_ACCESS_H_ + +#include "compiler.h" +#include "conf_access.h" + + +//! Status returned by CTRL_ACCESS interfaces. +typedef enum +{ + CTRL_GOOD = PASS, //!< Success, memory ready. + CTRL_FAIL = FAIL, //!< An error occurred. + CTRL_NO_PRESENT = FAIL + 1, //!< Memory unplugged. + CTRL_BUSY = FAIL + 2 //!< Memory not initialized or changed. +} Ctrl_status; + + +// FYI: Each Logical Unit Number (LUN) corresponds to a memory. + +// Check LUN defines. +#ifndef LUN_0 + #error LUN_0 must be defined as ENABLE or DISABLE in conf_access.h +#endif +#ifndef LUN_1 + #error LUN_1 must be defined as ENABLE or DISABLE in conf_access.h +#endif +#ifndef LUN_2 + #error LUN_2 must be defined as ENABLE or DISABLE in conf_access.h +#endif +#ifndef LUN_3 + #error LUN_3 must be defined as ENABLE or DISABLE in conf_access.h +#endif +#ifndef LUN_4 + #error LUN_4 must be defined as ENABLE or DISABLE in conf_access.h +#endif +#ifndef LUN_5 + #error LUN_5 must be defined as ENABLE or DISABLE in conf_access.h +#endif +#ifndef LUN_6 + #error LUN_6 must be defined as ENABLE or DISABLE in conf_access.h +#endif +#ifndef LUN_7 + #error LUN_7 must be defined as ENABLE or DISABLE in conf_access.h +#endif +#ifndef LUN_USB + #error LUN_USB must be defined as ENABLE or DISABLE in conf_access.h +#endif + +/*! \name LUN IDs + */ +//! @{ +#define LUN_ID_0 (0) //!< First static LUN. +#define LUN_ID_1 (LUN_ID_0 + LUN_0) +#define LUN_ID_2 (LUN_ID_1 + LUN_1) +#define LUN_ID_3 (LUN_ID_2 + LUN_2) +#define LUN_ID_4 (LUN_ID_3 + LUN_3) +#define LUN_ID_5 (LUN_ID_4 + LUN_4) +#define LUN_ID_6 (LUN_ID_5 + LUN_5) +#define LUN_ID_7 (LUN_ID_6 + LUN_6) +#define MAX_LUN (LUN_ID_7 + LUN_7) //!< Number of static LUNs. +#define LUN_ID_USB (MAX_LUN) //!< First dynamic LUN (USB host mass storage). +//! @} + + +// Include LUN header files. +#if LUN_0 == ENABLE + #include LUN_0_INCLUDE +#endif +#if LUN_1 == ENABLE + #include LUN_1_INCLUDE +#endif +#if LUN_2 == ENABLE + #include LUN_2_INCLUDE +#endif +#if LUN_3 == ENABLE + #include LUN_3_INCLUDE +#endif +#if LUN_4 == ENABLE + #include LUN_4_INCLUDE +#endif +#if LUN_5 == ENABLE + #include LUN_5_INCLUDE +#endif +#if LUN_6 == ENABLE + #include LUN_6_INCLUDE +#endif +#if LUN_7 == ENABLE + #include LUN_7_INCLUDE +#endif +#if LUN_USB == ENABLE + #include LUN_USB_INCLUDE +#endif + + +// Check the configuration of write protection in conf_access.h. +#ifndef GLOBAL_WR_PROTECT + #error GLOBAL_WR_PROTECT must be defined as ENABLED or DISABLED in conf_access.h +#endif + + +#if GLOBAL_WR_PROTECT == ENABLED + +//! Write protect. +extern Bool g_wr_protect; + +#endif + + +/*! \name Control Interface + */ +//! @{ + +#ifdef FREERTOS_USED + +/*! \brief Initializes the LUN access locker. + * + * \return \c TRUE if the locker was successfully initialized, else \c FALSE. + */ +extern Bool ctrl_access_init(void); + +#endif // FREERTOS_USED + +/*! \brief Returns the number of LUNs. + * + * \return Number of LUNs in the system. + */ +extern U8 get_nb_lun(void); + +/*! \brief Returns the current LUN. + * + * \return Current LUN. + * + * \todo Implement. + */ +extern U8 get_cur_lun(void); + +/*! \brief Tests the memory state and initializes the memory if required. + * + * The TEST UNIT READY SCSI primary command allows an application client to poll + * a LUN until it is ready without having to allocate memory for returned data. + * + * This command may be used to check the media status of LUNs with removable + * media. + * + * \param lun Logical Unit Number. + * + * \return Status. + */ +extern Ctrl_status mem_test_unit_ready(U8 lun); + +/*! \brief Returns the address of the last valid sector (512 bytes) in the + * memory. + * + * \param lun Logical Unit Number. + * \param u32_nb_sector Pointer to the address of the last valid sector. + * + * \return Status. + */ +extern Ctrl_status mem_read_capacity(U8 lun, U32 *u32_nb_sector); + +/*! \brief Returns the size of the physical sector. + * + * \param lun Logical Unit Number. + * + * \return Sector size (unit: 512 bytes). + */ +extern U8 mem_sector_size(U8 lun); + +/*! \brief Returns the write-protection state of the memory. + * + * \param lun Logical Unit Number. + * + * \return \c TRUE if the memory is write-protected, else \c FALSE. + * + * \note Only used by removable memories with hardware-specific write + * protection. + */ +extern Bool mem_wr_protect(U8 lun); + +/*! \brief Tells whether the memory is removable. + * + * \param lun Logical Unit Number. + * + * \return \c TRUE if the memory is removable, else \c FALSE. + */ +extern Bool mem_removal(U8 lun); + +/*! \brief Returns a pointer to the LUN name. + * + * \param lun Logical Unit Number. + * + * \return Pointer to the LUN name string. + */ +extern const char *mem_name(U8 lun); + +//! @} + + +#if ACCESS_USB == ENABLED + +/*! \name MEM <-> USB Interface + */ +//! @{ + +/*! \brief Tranfers data from the memory to USB. + * + * \param lun Logical Unit Number. + * \param addr Address of first memory sector to read. + * \param nb_sector Number of sectors to transfer. + * + * \return Status. + */ +extern Ctrl_status memory_2_usb(U8 lun, U32 addr, U16 nb_sector); + +/*! \brief Tranfers data from USB to the memory. + * + * \param lun Logical Unit Number. + * \param addr Address of first memory sector to write. + * \param nb_sector Number of sectors to transfer. + * + * \return Status. + */ +extern Ctrl_status usb_2_memory(U8 lun, U32 addr, U16 nb_sector); + +//! @} + +#endif // ACCESS_USB == ENABLED + + +#if ACCESS_MEM_TO_RAM == ENABLED + +/*! \name MEM <-> RAM Interface + */ +//! @{ + +/*! \brief Copies 1 data sector from the memory to RAM. + * + * \param lun Logical Unit Number. + * \param addr Address of first memory sector to read. + * \param ram Pointer to RAM buffer to write. + * + * \return Status. + */ +extern Ctrl_status memory_2_ram(U8 lun, U32 addr, void *ram); + +/*! \brief Copies 1 data sector from RAM to the memory. + * + * \param lun Logical Unit Number. + * \param addr Address of first memory sector to write. + * \param ram Pointer to RAM buffer to read. + * + * \return Status. + */ +extern Ctrl_status ram_2_memory(U8 lun, U32 addr, const void *ram); + +//! @} + +#endif // ACCESS_MEM_TO_RAM == ENABLED + + +#if ACCESS_STREAM == ENABLED + +/*! \name Streaming MEM <-> MEM Interface + */ +//! @{ + +//! Erroneous streaming data transfer ID. +#define ID_STREAM_ERR 0xFF + + #if ACCESS_MEM_TO_MEM == ENABLED + +/*! \brief Copies data from one memory to another. + * + * \param src_lun Source Logical Unit Number. + * \param src_addr Source address of first memory sector to read. + * \param dest_lun Destination Logical Unit Number. + * \param dest_addr Destination address of first memory sector to write. + * \param nb_sector Number of sectors to copy. + * + * \return Status. + */ +extern Ctrl_status stream_mem_to_mem(U8 src_lun, U32 src_addr, U8 dest_lun, U32 dest_addr, U16 nb_sector); + + #endif // ACCESS_MEM_TO_MEM == ENABLED + +/*! \brief Returns the state of a streaming data transfer. + * + * \param id Transfer ID. + * + * \return Status. + * + * \todo Implement. + */ +extern Ctrl_status stream_state(U8 id); + +/*! \brief Stops a streaming data transfer. + * + * \param id Transfer ID. + * + * \return Number of remaining sectors. + * + * \todo Implement. + */ +extern U16 stream_stop(U8 id); + +//! @} + +#endif // ACCESS_STREAM == ENABLED + + +#endif // _CTRL_ACCESS_H_ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/debug.c b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/debug.c new file mode 100644 index 000000000..fe8a2a0d8 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/debug.c @@ -0,0 +1,133 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Macros and functions dedicated to debug purposes. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with a USART module can be used. + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#include "compiler.h" +#include "debug.h" +#include "util.h" + + +#if (defined __GNUC__) +# include "malloc.h" + +U32 get_heap_curr_used_size( void ) +{ + struct mallinfo my_info=mallinfo(); + return my_info.uordblks; +} + +U32 get_heap_total_used_size( void ) +{ + struct mallinfo my_info=mallinfo(); + return my_info.arena; +} +#endif + +U32 get_heap_free_size( void ) +{ + U32 high_mark= AVR32_SRAM_SIZE; + U32 low_mark = 0; + U32 size ; + void* p_mem; + + size = (high_mark + low_mark)/2; + + do + { + p_mem = malloc(size); + if( p_mem != NULL) + { // Can allocate memory + free(p_mem); + low_mark = size; + } + else + { // Can not allocate memory + high_mark = size; + } + + size = (high_mark + low_mark)/2; + } + while( (high_mark-low_mark) >1 ); + + return size; +} + +static void* round_trace_pbuf; +static U32 round_trace_size; + +void uc3_round_trace_init(void* buf, U32 size) +{ + round_trace_pbuf = buf; + (*(U32*)round_trace_pbuf)=(U32)buf+4; + round_trace_size = size; +} + +void uc3_round_trace(U32 val) +{ + //Disable_global_interrupt(); + + U32* p_wr = (U32*)(*(U32*)round_trace_pbuf); + *p_wr = val; + p_wr++; + if( ((U32)p_wr % round_trace_size) ==0 ) + p_wr= (U32*)round_trace_pbuf+1; + *p_wr = 0xdeadbeef; + *(U32*)round_trace_pbuf = (U32)p_wr; + + //Enable_global_interrupt(); +} + +void dump(char* _buf, uint16_t _count) { + + int i; + for (i = 0; i < _count; ++i) + { + printk("0x%x ", _buf[i]); + if ((i!=0)&&(i % 10 == 0)) + printk("\n\t"); + } + printk("\n"); +} + diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/debug.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/debug.h new file mode 100644 index 000000000..a832d7c9c --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/debug.h @@ -0,0 +1,116 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Macros and functions dedicated to debug purposes. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with a USART module can be used. + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _DEBUG_H_ +#define _DEBUG_H_ + +#include "stringz.h" + +/*! \brief These macros are used to add traces memory. + * + * First, initialise the trace with Uc3_trace_init(pointer), giving the start address + * of the memory location where will be stored the trace. + * Use Uc3_trace(something) to store "something" into the memory. The end of the trace + * is signaled by the "0xdeadbeef" pattern. + */ +#define Uc3_trace_init(debug_addr) \ + *(U32*)(debug_addr)=debug_addr+4 + +#define Uc3_trace(debug_addr, x) \ + *(U32*)(*(U32*)(debug_addr) ) = (U32)(x) ;\ + *(U32*)(*(U32*)(debug_addr)+4) = 0xdeadbeef ;\ + *(U32*)(debug_addr ) = *(U32*)(debug_addr)+4 + +/*! \brief This macro is used to insert labels into assembly output. + * + */ +#define Insert_label(name) \ + __asm__ __volatile__ (STRINGZ(name)":"); + +#if (defined __GNUC__) +/*! \brief Returns the number of total of used bytes allocated from the HEAP. + * + * \retval total number of used bytes. + */ +U32 get_heap_total_used_size( void ); + +/*! \brief Returns the number of bytes currently used from the HEAP. + * + * \retval total number of used bytes. + */ +U32 get_heap_curr_used_size( void ); +#endif + +/*! \brief Returns the number of free bytes in the HEAP. + * + * This funtion tries to allocate the maximum number of bytes by dichotomical method. + * + * \retval number of free bytes. + */ +extern U32 get_heap_free_size( void ); + +/*! \name Traces function using a round buffer + */ +//! @{ + +/*! \brief Initialize the trace using a round buffer. + * + * \param buf Base address of the buffer used for the trace. + * \param size Size of the round buffer. Must be a power of 2. + */ +void uc3_round_trace_init(void* buf, U32 size); + +/*! \brief Trace a data in the round buffer. + * + * The end of the trace is signaled by the "0xdeadbeef" pattern. + * \param val Data to trace; + */ +void uc3_round_trace(U32 val); + +//! @} + + +#endif // _DEBUG_H_ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/print_funcs.c b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/print_funcs.c new file mode 100644 index 000000000..99e927466 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/print_funcs.c @@ -0,0 +1,215 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Strings and integers print module for debug purposes. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with a USART module can be used. + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#include "compiler.h" +#include "gpio.h" +#include "usart.h" +#include "print_funcs.h" + + +//! ASCII representation of hexadecimal digits. +static const char HEX_DIGITS[16] = "0123456789ABCDEF"; + + +void init_dbg_rs232(long pba_hz) +{ + init_dbg_rs232_ex(DBG_USART_BAUDRATE, pba_hz); +} + + +void init_dbg_rs232_ex(unsigned long baudrate, long pba_hz) +{ + static const gpio_map_t DBG_USART_GPIO_MAP = + { + {DBG_USART_RX_PIN, DBG_USART_RX_FUNCTION}, + {DBG_USART_TX_PIN, DBG_USART_TX_FUNCTION} + }; + + // Options for debug USART. + usart_options_t dbg_usart_options = + { + .baudrate = baudrate, + .charlength = 8, + .paritytype = USART_NO_PARITY, + .stopbits = USART_1_STOPBIT, + .channelmode = USART_NORMAL_CHMODE + }; + + // Setup GPIO for debug USART. + gpio_enable_module(DBG_USART_GPIO_MAP, + sizeof(DBG_USART_GPIO_MAP) / sizeof(DBG_USART_GPIO_MAP[0])); + + // Initialize it in RS232 mode. + usart_init_rs232(DBG_USART, &dbg_usart_options, pba_hz); +} + + +void print_dbg(const char *str) +{ + // Redirection to the debug USART. + print(DBG_USART, str); +} + + +void print_dbg_char(int c) +{ + // Redirection to the debug USART. + print_char(DBG_USART, c); +} + + +void print_dbg_ulong(unsigned long n) +{ + // Redirection to the debug USART. + print_ulong(DBG_USART, n); +} + + +void print_dbg_char_hex(unsigned char n) +{ + // Redirection to the debug USART. + print_char_hex(DBG_USART, n); +} + + +void print_dbg_short_hex(unsigned short n) +{ + // Redirection to the debug USART. + print_short_hex(DBG_USART, n); +} + + +void print_dbg_hex(unsigned long n) +{ + // Redirection to the debug USART. + print_hex(DBG_USART, n); +} + + +void print(volatile avr32_usart_t *usart, const char *str) +{ + // Invoke the USART driver to transmit the input string with the given USART. + usart_write_line(usart, str); +} + + +void print_char(volatile avr32_usart_t *usart, int c) +{ + // Invoke the USART driver to transmit the input character with the given USART. + usart_putchar(usart, c); +} + + +void print_ulong(volatile avr32_usart_t *usart, unsigned long n) +{ + char tmp[11]; + int i = sizeof(tmp) - 1; + + // Convert the given number to an ASCII decimal representation. + tmp[i] = '\0'; + do + { + tmp[--i] = '0' + n % 10; + n /= 10; + } while (n); + + // Transmit the resulting string with the given USART. + print(usart, tmp + i); +} + + +void print_char_hex(volatile avr32_usart_t *usart, unsigned char n) +{ + char tmp[3]; + int i; + + // Convert the given number to an ASCII hexadecimal representation. + tmp[2] = '\0'; + for (i = 1; i >= 0; i--) + { + tmp[i] = HEX_DIGITS[n & 0xF]; + n >>= 4; + } + + // Transmit the resulting string with the given USART. + print(usart, tmp); +} + + +void print_short_hex(volatile avr32_usart_t *usart, unsigned short n) +{ + char tmp[5]; + int i; + + // Convert the given number to an ASCII hexadecimal representation. + tmp[4] = '\0'; + for (i = 3; i >= 0; i--) + { + tmp[i] = HEX_DIGITS[n & 0xF]; + n >>= 4; + } + + // Transmit the resulting string with the given USART. + print(usart, tmp); +} + + +void print_hex(volatile avr32_usart_t *usart, unsigned long n) +{ + char tmp[9]; + int i; + + // Convert the given number to an ASCII hexadecimal representation. + tmp[8] = '\0'; + for (i = 7; i >= 0; i--) + { + tmp[i] = HEX_DIGITS[n & 0xF]; + n >>= 4; + } + + // Transmit the resulting string with the given USART. + print(usart, tmp); +} diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/print_funcs.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/print_funcs.h new file mode 100644 index 000000000..38f931dc2 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/print_funcs.h @@ -0,0 +1,294 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Strings and integers print module for debug purposes. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with a USART module can be used. + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _PRINT_FUNCS_H_ +#define _PRINT_FUNCS_H_ + +#include +#include "board.h" + + +/*! \name USART Settings for the Debug Module + */ +//! @{ +#if BOARD == EVK1100 +# define DBG_USART (&AVR32_USART1) +# define DBG_USART_RX_PIN AVR32_USART1_RXD_0_0_PIN +# define DBG_USART_RX_FUNCTION AVR32_USART1_RXD_0_0_FUNCTION +# define DBG_USART_TX_PIN AVR32_USART1_TXD_0_0_PIN +# define DBG_USART_TX_FUNCTION AVR32_USART1_TXD_0_0_FUNCTION +# define DBG_USART_BAUDRATE 57600 +#elif BOARD == EVK1101 +# define DBG_USART (&AVR32_USART1) +# define DBG_USART_RX_PIN AVR32_USART1_RXD_0_0_PIN +# define DBG_USART_RX_FUNCTION AVR32_USART1_RXD_0_0_FUNCTION +# define DBG_USART_TX_PIN AVR32_USART1_TXD_0_0_PIN +# define DBG_USART_TX_FUNCTION AVR32_USART1_TXD_0_0_FUNCTION +# define DBG_USART_BAUDRATE 57600 +#elif BOARD == UC3C_EK +# define DBG_USART (&AVR32_USART2) +# define DBG_USART_RX_PIN AVR32_USART2_RXD_0_1_PIN +# define DBG_USART_RX_FUNCTION AVR32_USART2_RXD_0_1_FUNCTION +# define DBG_USART_TX_PIN AVR32_USART2_TXD_0_1_PIN +# define DBG_USART_TX_FUNCTION AVR32_USART2_TXD_0_1_FUNCTION +# define DBG_USART_BAUDRATE 57600 +#elif BOARD == EVK1104 +# define DBG_USART (&AVR32_USART1) +# define DBG_USART_RX_PIN AVR32_USART1_RXD_0_0_PIN +# define DBG_USART_RX_FUNCTION AVR32_USART1_RXD_0_0_FUNCTION +# define DBG_USART_TX_PIN AVR32_USART1_TXD_0_0_PIN +# define DBG_USART_TX_FUNCTION AVR32_USART1_TXD_0_0_FUNCTION +# define DBG_USART_BAUDRATE 57600 +#elif BOARD == EVK1105 +# define DBG_USART (&AVR32_USART0) +# define DBG_USART_RX_PIN AVR32_USART0_RXD_0_0_PIN +# define DBG_USART_RX_FUNCTION AVR32_USART0_RXD_0_0_FUNCTION +# define DBG_USART_TX_PIN AVR32_USART0_TXD_0_0_PIN +# define DBG_USART_TX_FUNCTION AVR32_USART0_TXD_0_0_FUNCTION +# define DBG_USART_BAUDRATE 57600 +#elif BOARD == STK1000 +# define DBG_USART (&AVR32_USART1) +# define DBG_USART_RX_PIN AVR32_USART1_RXD_0_PIN +# define DBG_USART_RX_FUNCTION AVR32_USART1_RXD_0_FUNCTION +# define DBG_USART_TX_PIN AVR32_USART1_TXD_0_PIN +# define DBG_USART_TX_FUNCTION AVR32_USART1_TXD_0_FUNCTION +# define DBG_USART_BAUDRATE 115200 +#elif BOARD == NGW100 +# define DBG_USART (&AVR32_USART1) +# define DBG_USART_RX_PIN AVR32_USART1_RXD_0_PIN +# define DBG_USART_RX_FUNCTION AVR32_USART1_RXD_0_FUNCTION +# define DBG_USART_TX_PIN AVR32_USART1_TXD_0_PIN +# define DBG_USART_TX_FUNCTION AVR32_USART1_TXD_0_FUNCTION +# define DBG_USART_BAUDRATE 115200 +#elif BOARD == STK600_RCUC3L0 +# define DBG_USART (&AVR32_USART1) +# define DBG_USART_RX_PIN AVR32_USART1_RXD_0_1_PIN +# define DBG_USART_RX_FUNCTION AVR32_USART1_RXD_0_1_FUNCTION +// For the RX pin, connect STK600.PORTE.PE3 to STK600.RS232 SPARE.RXD +# define DBG_USART_TX_PIN AVR32_USART1_TXD_0_1_PIN +# define DBG_USART_TX_FUNCTION AVR32_USART1_TXD_0_1_FUNCTION +// For the TX pin, connect STK600.PORTE.PE2 to STK600.RS232 SPARE.TXD +# define DBG_USART_BAUDRATE 57600 +# define DBG_USART_CLOCK_MASK AVR32_USART1_CLK_PBA +#elif BOARD == UC3L_EK +# define DBG_USART (&AVR32_USART3) +# define DBG_USART_RX_PIN AVR32_USART3_RXD_0_0_PIN +# define DBG_USART_RX_FUNCTION AVR32_USART3_RXD_0_0_FUNCTION +# define DBG_USART_TX_PIN AVR32_USART3_TXD_0_0_PIN +# define DBG_USART_TX_FUNCTION AVR32_USART3_TXD_0_0_FUNCTION +# define DBG_USART_BAUDRATE 57600 +# define DBG_USART_CLOCK_MASK AVR32_USART3_CLK_PBA +#elif BOARD == ARDUINO +# define DBG_USART (&AVR32_USART1) +# define DBG_USART_RX_PIN AVR32_USART1_RXD_0_0_PIN +# define DBG_USART_RX_FUNCTION AVR32_USART1_RXD_0_0_FUNCTION +# define DBG_USART_TX_PIN AVR32_USART1_TXD_0_0_PIN +# define DBG_USART_TX_FUNCTION AVR32_USART1_TXD_0_0_FUNCTION +# define DBG_USART_BAUDRATE 57600 +# define DBG_USART_CLOCK_MASK AVR32_USART1_CLK_PBA +#endif + +#if !defined(DBG_USART) || \ + !defined(DBG_USART_RX_PIN) || \ + !defined(DBG_USART_RX_FUNCTION) || \ + !defined(DBG_USART_TX_PIN) || \ + !defined(DBG_USART_TX_FUNCTION) || \ + !defined(DBG_USART_BAUDRATE) +# error The USART configuration to use for debug on your board is missing +#endif +//! @} + +/*! \name VT100 Common Commands + */ +//! @{ +#define CLEARSCR "\x1B[2J\x1B[;H" //!< Clear screen. +#define CLEAREOL "\x1B[K" //!< Clear end of line. +#define CLEAREOS "\x1B[J" //!< Clear end of screen. +#define CLEARLCR "\x1B[0K" //!< Clear line cursor right. +#define CLEARLCL "\x1B[1K" //!< Clear line cursor left. +#define CLEARELN "\x1B[2K" //!< Clear entire line. +#define CLEARCDW "\x1B[0J" //!< Clear cursor down. +#define CLEARCUP "\x1B[1J" //!< Clear cursor up. +#define GOTOYX "\x1B[%.2d;%.2dH" //!< Set cursor to (y, x). +#define INSERTMOD "\x1B[4h" //!< Insert mode. +#define OVERWRITEMOD "\x1B[4l" //!< Overwrite mode. +#define DELAFCURSOR "\x1B[K" //!< Erase from cursor to end of line. +#define CRLF "\r\n" //!< Carriage Return + Line Feed. +//! @} + +/*! \name VT100 Cursor Commands + */ +//! @{ +#define CURSON "\x1B[?25h" //!< Show cursor. +#define CURSOFF "\x1B[?25l" //!< Hide cursor. +//! @} + +/*! \name VT100 Character Commands + */ +//! @{ +#define NORMAL "\x1B[0m" //!< Normal. +#define BOLD "\x1B[1m" //!< Bold. +#define UNDERLINE "\x1B[4m" //!< Underline. +#define BLINKING "\x1B[5m" //!< Blink. +#define INVVIDEO "\x1B[7m" //!< Inverse video. +//! @} + +/*! \name VT100 Color Commands + */ +//! @{ +#define CL_BLACK "\033[22;30m" //!< Black. +#define CL_RED "\033[22;31m" //!< Red. +#define CL_GREEN "\033[22;32m" //!< Green. +#define CL_BROWN "\033[22;33m" //!< Brown. +#define CL_BLUE "\033[22;34m" //!< Blue. +#define CL_MAGENTA "\033[22;35m" //!< Magenta. +#define CL_CYAN "\033[22;36m" //!< Cyan. +#define CL_GRAY "\033[22;37m" //!< Gray. +#define CL_DARKGRAY "\033[01;30m" //!< Dark gray. +#define CL_LIGHTRED "\033[01;31m" //!< Light red. +#define CL_LIGHTGREEN "\033[01;32m" //!< Light green. +#define CL_YELLOW "\033[01;33m" //!< Yellow. +#define CL_LIGHTBLUE "\033[01;34m" //!< Light blue. +#define CL_LIGHTMAGENTA "\033[01;35m" //!< Light magenta. +#define CL_LIGHTCYAN "\033[01;36m" //!< Light cyan. +#define CL_WHITE "\033[01;37m" //!< White. +//! @} + + +/*! \brief Sets up DBG_USART with 8N1 at DBG_USART_BAUDRATE. + * + * \param pba_hz PBA clock frequency (Hz). + */ +extern void init_dbg_rs232(long pba_hz); + +/*! \brief Sets up DBG_USART with 8N1 at a given baud rate. + * + * \param baudrate Baud rate to set DBG_USART to. + * \param pba_hz PBA clock frequency (Hz). + */ +extern void init_dbg_rs232_ex(unsigned long baudrate, long pba_hz); + +/*! \brief Prints a string of characters to DBG_USART. + * + * \param str The string of characters to print. + */ +extern void print_dbg(const char *str); + +/*! \brief Prints a character to DBG_USART. + * + * \param c The character to print. + */ +extern void print_dbg_char(int c); + +/*! \brief Prints an integer to DBG_USART in a decimal representation. + * + * \param n The integer to print. + */ +extern void print_dbg_ulong(unsigned long n); + +/*! \brief Prints a char to DBG_USART in an hexadecimal representation. + * + * \param n The char to print. + */ +extern void print_dbg_char_hex(unsigned char n); + +/*! \brief Prints a short integer to DBG_USART in an hexadecimal representation. + * + * \param n The short integer to print. + */ +extern void print_dbg_short_hex(unsigned short n); + +/*! \brief Prints an integer to DBG_USART in an hexadecimal representation. + * + * \param n The integer to print. + */ +extern void print_dbg_hex(unsigned long n); + +/*! \brief Prints a string of characters to a given USART. + * + * \param usart Base address of the USART instance to print to. + * \param str The string of characters to print. + */ +extern void print(volatile avr32_usart_t *usart, const char *str); + +/*! \brief Prints a character to a given USART. + * + * \param usart Base address of the USART instance to print to. + * \param c The character to print. + */ +extern void print_char(volatile avr32_usart_t *usart, int c); + +/*! \brief Prints an integer to a given USART in a decimal representation. + * + * \param usart Base address of the USART instance to print to. + * \param n The integer to print. + */ +extern void print_ulong(volatile avr32_usart_t *usart, unsigned long n); + +/*! \brief Prints a char to a given USART in an hexadecimal representation. + * + * \param usart Base address of the USART instance to print to. + * \param n The char to print. + */ +extern void print_char_hex(volatile avr32_usart_t *usart, unsigned char n); + +/*! \brief Prints a short integer to a given USART in an hexadecimal + * representation. + * + * \param usart Base address of the USART instance to print to. + * \param n The short integer to print. + */ +extern void print_short_hex(volatile avr32_usart_t *usart, unsigned short n); + +/*! \brief Prints an integer to a given USART in an hexadecimal representation. + * + * \param usart Base address of the USART instance to print to. + * \param n The integer to print. + */ +extern void print_hex(volatile avr32_usart_t *usart, unsigned long n); + + +#endif // _PRINT_FUNCS_H_ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_cpu.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_cpu.h new file mode 100644 index 000000000..e3ebea7a1 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_cpu.h @@ -0,0 +1,63 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief NEWLIB_ADDONS CPU include file for AVR32. + * + * - Compiler: GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef __AVR32_NEWLIB_ADDONS_CPU_H__ +#define __AVR32_NEWLIB_ADDONS_CPU_H__ + +#include <_ansi.h> + +_BEGIN_STD_C + +#define CPU_HZ get_cpu_hz() + +void udelay(unsigned long usec); +void set_cpu_hz(unsigned int clk_hz); +unsigned int get_cpu_hz(); + +_END_STD_C + +#endif diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_exceptions.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_exceptions.h new file mode 100644 index 000000000..31caf1304 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_exceptions.h @@ -0,0 +1,120 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief NEWLIB_ADDONS exceptions include file for AVR32. + * + * - Compiler: GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef __AVR32_NEWLIB_ADDONS_EXCEPTIONS_H__ +#define __AVR32_NEWLIB_ADDONS_EXCEPTIONS_H__ + +#include <_ansi.h> + +_BEGIN_STD_C + +/* + Exception vector offsets +*/ +#define EVBA_UNRECOVERABLE 0x000 +#define EVBA_TLB_MULTIPLE 0x004 +#define EVBA_BUS_ERROR_DATA 0x008 +#define EVBA_BUS_ERROR_INSTR 0x00C +#define EVBA_NMI 0x010 +#define EVBA_INSTR_ADDR 0x014 +#define EVBA_ITLB_MISS 0x050 +#define EVBA_ITLB_PROT 0x018 +#define EVBA_BREAKPOINT 0x01C +#define EVBA_ILLEGAL_OPCODE 0x020 +#define EVBA_UNIMPLEMENTED 0x024 +#define EVBA_PRIVILEGE_VIOL 0x028 +#define EVBA_FLOATING_POINT 0x02C +#define EVBA_COP_ABSENT 0x030 +#define EVBA_SCALL 0x100 +#define EVBA_DATA_ADDR_R 0x034 +#define EVBA_DATA_ADDR_W 0x038 +#define EVBA_DTLB_MISS_R 0x060 +#define EVBA_DTLB_MISS_W 0x070 +#define EVBA_DTLB_PROT_R 0x03C +#define EVBA_DTLB_PROT_W 0x040 +#define EVBA_DTLB_MODIFIED 0x044 + + +/* + Define the form of the function used when registering exceptions. + The function should return the address which the exception should + return to after the exception processing. +*/ + +typedef unsigned int (*__exception_handler)(int /*evba_offset*/, int /*return address*/); + +/* + Define the form of the function used when registering a scall handler. +*/ + +typedef void (*__scall_handler)(int /*code*/, int /*p1*/, int /*p2*/ + , int /*p3*/, int /*p4*/); + +/* + Function for registering an exception handler for the exception with + offset given by evba_offset. +*/ +void _register_exception_handler(__exception_handler handler, int evba_offset); + +/* + Function for registering a scall handler which can be a arbirary + function which uses r8-r12 for parameters. +*/ +void _register_scall_handler(__scall_handler handler); + +/* + Initialize exceptions. Must be called before registering exception handlers + and needed to enable exceptions. 'evba' is the pointer to the exception + vector. 'handler_table' is a pointer to an array where the pointers to + the exception handlers are stored. This array must be at least 0x104 bytes + and word aligned. +*/ +void init_exceptions(void *evba, void *handler_table); + +_END_STD_C + +#endif diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_interrupts.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_interrupts.h new file mode 100644 index 000000000..76d81f737 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_interrupts.h @@ -0,0 +1,82 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief NEWLIB_ADDONS interrupts include file for AVR32. + * + * - Compiler: GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef __AVR32_NEWLIB_ADDONS_INTERRUPTS_H__ +#define __AVR32_NEWLIB_ADDONS_INTERRUPTS_H__ + +#include <_ansi.h> + +_BEGIN_STD_C + +#define INT_GRPS 64 +#define INT_LINES 32 +#define INTPR_BASE (__intc_base__ + 0x0000) +#define INTREQ_BASE (__intc_base__ + 64*4) +#define INTCAUSE_BASE (__intc_base__ + 2*64*4) + +//Register offsets +#define INTLEVEL 30 +#define AUTOVECTOR 0 +#define AUTOVECTOR_BITS 14 + +//Priorities +#define INT0 0 +#define INT1 1 +#define INT2 2 +#define INT3 3 + + +typedef void (*__newlib_int_handler)(int /* int_grp*/, void */*user_handle*/); + +__newlib_int_handler register_interrupt(__newlib_int_handler handler, int int_grp, int line, int priority, + .../* void *user_handle*/); +void init_interrupts(); +void set_interrupts_base(void *base); + +_END_STD_C + +#endif diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_io.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_io.h new file mode 100644 index 000000000..a725769fa --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_io.h @@ -0,0 +1,174 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief NEWLIB_ADDONS miscellaneous macros include file for AVR32. + * + * - Compiler: GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef __AVR32_NEWLIB_ADDONS_IO_H__ +#define __AVR32_NEWLIB_ADDONS_IO_H__ + +#include <_ansi.h> + +_BEGIN_STD_C + +typedef char u8; +typedef unsigned int u32; + +#define __raw_writeb(v,a) (*(volatile unsigned char *)(a) = (v)) +#define __raw_writew(v,a) (*(volatile unsigned short *)(a) = (v)) +#define __raw_writel(v,a) (*(volatile unsigned int *)(a) = (v)) + +#define __raw_readb(a) (*(volatile unsigned char *)(a)) +#define __raw_readw(a) (*(volatile unsigned short *)(a)) +#define __raw_readl(a) (*(volatile unsigned int *)(a)) + +/* As long as I/O is only performed in P4 (or possibly P3), we're safe */ +#define writeb(v,a) __raw_writeb(v,a) +#define writew(v,a) __raw_writew(v,a) +#define writel(v,a) __raw_writel(v,a) + +#define readb(a) __raw_readb(a) +#define readw(a) __raw_readw(a) +#define readl(a) __raw_readl(a) + +/* Memory segments when segmentation is enabled */ +#define P0SEG 0x00000000 +#define P1SEG 0x80000000 +#define P2SEG 0xa0000000 +#define P3SEG 0xc0000000 +#define P4SEG 0xe0000000 + +/* Returns the privileged segment base of a given address */ +#define PXSEG(a) (((unsigned long)(a)) & 0xe0000000) + +/* Returns the physical address of a PnSEG (n=1,2) address */ +#define PHYSADDR(a) (((unsigned long)(a)) & 0x1fffffff) + +/* + * Map an address to a certain privileged segment + */ +#define P1SEGADDR(a) ((__typeof__(a))(((unsigned long)(a) & 0x1fffffff) | P1SEG)) +#define P2SEGADDR(a) ((__typeof__(a))(((unsigned long)(a) & 0x1fffffff) | P2SEG)) +#define P3SEGADDR(a) ((__typeof__(a))(((unsigned long)(a) & 0x1fffffff) | P3SEG)) +#define P4SEGADDR(a) ((__typeof__(a))(((unsigned long)(a) & 0x1fffffff) | P4SEG)) + + +#define cached(addr) P1SEGADDR(addr) +#define uncached(addr) P2SEGADDR(addr) +#define physaddr(addr) PHYSADDR(addr) + +#define BF(field, value) \ + ({ union { \ + struct { \ + unsigned : 32 - field ## _OFFSET - field ## _SIZE ; \ + unsigned long __val: field ## _SIZE ; \ + }; \ + unsigned long __ul; \ + } __tmp; \ + __tmp.__ul = 0; \ + __tmp.__val = value; \ + __tmp.__ul;}) + +#define BF_D(field, value) \ + ({ union { \ + struct { \ + unsigned long long : 64 - field ## _OFFSET - field ## _SIZE ; \ + unsigned long long __val: field ## _SIZE ; \ + }; \ + unsigned long long __ul; \ + } __tmp; \ + __tmp.__ul = 0; \ + __tmp.__val = value; \ + __tmp.__ul;}) + +#define BFINS(var, field, value) \ + { union {\ + struct { \ + unsigned : 32 - field ## _OFFSET - field ## _SIZE ; \ + unsigned long __val: field ## _SIZE ; \ + }; \ + unsigned long __ul; \ + } __tmp; \ + __tmp.__ul = var; \ + __tmp.__val = value; \ + var = __tmp.__ul;} + +#define BFEXT(var, field) \ + ({ union {\ + struct { \ + unsigned : 32 - field ## _OFFSET - field ## _SIZE ; \ + unsigned long __val: field ## _SIZE ; \ + }; \ + unsigned long __ul; \ + } __tmp; \ + __tmp.__ul = var; \ + __tmp.__val; }) + +#define BFINS_D(var, field, value) \ + { union {\ + struct { \ + unsigned long long : 64 - field ## _OFFSET - field ## _SIZE ; \ + unsigned long long __val: field ## _SIZE ; \ + }; \ + unsigned long long __ul; \ + } __tmp; \ + __tmp.__ul = var; \ + __tmp.__val = value; \ + var = __tmp.__ul;} + +#define BFEXT_D(var, field) \ + ({ union {\ + struct { \ + unsigned long long : 64 - field ## _OFFSET - field ## _SIZE ; \ + unsigned long long __val: field ## _SIZE ; \ + }; \ + unsigned long long __ul; \ + } __tmp; \ + __tmp.__ul = var; \ + __tmp.__val; }) + + +_END_STD_C + +#endif diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_usart.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_usart.h new file mode 100644 index 000000000..6c4697d78 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_usart.h @@ -0,0 +1,208 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief NEWLIB_ADDONS USART include file for AVR32. + * + * - Compiler: GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef __AVR32_NEWLIB_ADDONS_USART_H__ +#define __AVR32_NEWLIB_ADDONS_USART_H__ + +#include <_ansi.h> + +#include "nlao_io.h" + +_BEGIN_STD_C + +struct usart3 { + volatile u32 us_cr; + volatile u32 us_mr; + volatile u32 us_ier; + volatile u32 us_idr; + volatile u32 us_imr; + volatile u32 us_csr; + volatile u32 us_rhr; + volatile u32 us_thr; + volatile u32 us_brgr; + volatile u32 us_rtor; + volatile u32 us_ttgr; + volatile u32 us_reserved[5]; + volatile u32 us_fidi; + volatile u32 us_ner; + volatile u32 us_xxr; + volatile u32 us_if; +}; + +/* Register offsets */ +#define US_CR 0x0000 +#define US_MR 0x0004 +#define US_IER 0x0008 +#define US_IDR 0x000c +#define US_IMR 0x0010 +#define US_CSR 0x0014 +#define US_RHR 0x0018 +#define US_THR 0x001c +#define US_BRGR 0x0020 +#define US_RTOR 0x0024 +#define US_TTGR 0x0028 + +#define US_FIDI 0x0040 +#define US_NER 0x0044 +#define US_XXR 0x0048 +#define US_IF 0x004c + +#define US_RPR 0x0100 +#define US_RCR 0x0104 +#define US_TPR 0x0108 +#define US_TCR 0x010c +#define US_RNPR 0x0110 +#define US_RNCR 0x0114 +#define US_TNPR 0x0118 +#define US_TNCR 0x011c +#define US_PTCR 0x0120 +#define US_PTSR 0x0124 + + + + +/* USART3 Control Register */ +#define US_CR_RSTRX (1 << 2) +#define US_CR_RSTTX (1 << 3) +#define US_CR_RXEN (1 << 4) +#define US_CR_RXDIS (1 << 5) +#define US_CR_TXEN (1 << 6) +#define US_CR_TXDIS (1 << 7) +#define US_CR_RSTSTA (1 << 8) +#define US_CR_STTBRK (1 << 9) +#define US_CR_STPBRK (1 << 10) + +#define US_CR_DTREN (1 << 16) +#define US_CR_DTRDIS (1 << 17) +#define US_CR_RTSEN (1 << 18) +#define US_CR_RTSDIS (1 << 19) + +/* USART3 Mode Register */ +#define US_MR_MODE (15 << 0) +#define US_MR_MODE_NORMAL ( 0 << 0) +#define US_MR_MODE_HWFLOW ( 2 << 0) +#define US_MR_CLKS ( 3 << 4) +#define US_MR_CLKS_CLOCK ( 0 << 4) +#define US_MR_CLKS_FDIV1 ( 1 << 4) +#define US_MR_CLKS_SLOW ( 2 << 4) +#define US_MR_CLKS_EXT ( 3 << 4) +#define US_MR_CHRL_5BITS ( 0 << 6) +#define US_MR_CHRL_6BITS ( 1 << 6) +#define US_MR_CHRL_7BITS ( 2 << 6) +#define US_MR_CHRL_8BITS ( 3 << 6) +#define US_MR_SYNC ( 1 << 8) +#define US_MR_PAR_EVEN ( 0 << 9) +#define US_MR_PAR_ODD ( 1 << 9) +#define US_MR_PAR_SPACE ( 2 << 9) +#define US_MR_PAR_MARK ( 3 << 9) +#define US_MR_PAR_NONE ( 4 << 9) +#define US_MR_PAR_MDROP ( 6 << 9) +#define US_MR_NBSTOP_1BIT ( 0 << 12) +#define US_MR_NBSTOP_1_5BIT ( 1 << 12) +#define US_MR_NBSTOP_2BITS ( 2 << 12) +#define US_MR_OVER ( 1 << 19) +#define US_MR_OVER_X16 ( 0 << 19) +#define US_MR_OVER_X8 ( 1 << 19) + +/* USART3 Channel Status Register */ +#define US_CSR_RXRDY (1 << 0) +#define US_CSR_TXRDY (1 << 1) +#define US_CSR_RXBRK (1 << 2) +#define US_CSR_ENDRX (1 << 3) +#define US_CSR_ENDTX (1 << 4) + + +#define US_CSR_OVRE (1 << 5) +#define US_CSR_FRAME (1 << 6) +#define US_CSR_PARE (1 << 7) + +#define US_CSR_TXEMPTY (1 << 9) + +#define US_CSR_TXBUFE (1 << 11) +#define US_CSR_RXBUFF (1 << 12) +#define US_CSR_RIIC (1 << 16) +#define US_CSR_DSRIC (1 << 17) +#define US_CSR_DCDIC (1 << 18) +#define US_CSR_CTSIC (1 << 19) +#define US_CSR_RI (1 << 20) +#define US_CSR_DSR (1 << 21) +#define US_CSR_DCD (1 << 22) +#define US_CSR_CTS (1 << 23) + +/* USART3 Baud Rate Generator Register */ +#define US_BRGR_CD_OFFSET 0 +#define US_BRGR_FP_OFFSET 16 + +#define US_BRGR_CD_SIZE 16 +#define US_BRGR_FP_SIZE 3 + +#define US_BRGR_CD (0xFFFF << 0) +#define US_BRGR_FP ( 7 << 16) + +/*USART3 PDC Transfer Control Register */ +#define US_PTCR_RXTEN (1 << 0) +#define US_PTCR_RXTDIS (1 << 1) +#define US_PTCR_TXTEN (1 << 8) +#define US_PTCR_TXTDIS (1 << 9) + +/*USART3 PDC Transfer Status Register */ +#define US_PTSR_RXTEN (1 << 0) +#define US_PTSR_TXTEN (1 << 8) + + +int usart_init(int baudrate); +void usart_putc(char c); +void usart_puts(const char *s); +int usart_getc(void); +int usart_tstc(void); +void usart_setbrg(int baudrate, int cpu_clock); +void set_usart_base(void *usart_base); + + +_END_STD_C + +#endif /* MERLIN_USART3_H */ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/libnewlib_addons-at32ucr2-speed_opt.a b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/libnewlib_addons-at32ucr2-speed_opt.a new file mode 100644 index 000000000..aa673eccd Binary files /dev/null and b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/libnewlib_addons-at32ucr2-speed_opt.a differ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LINKER_SCRIPTS/AT32UC3A/0512/GCC/link_uc3a0512.lds b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LINKER_SCRIPTS/AT32UC3A/0512/GCC/link_uc3a0512.lds new file mode 100644 index 000000000..59152ac0b --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LINKER_SCRIPTS/AT32UC3A/0512/GCC/link_uc3a0512.lds @@ -0,0 +1,266 @@ +/****************************************************************************** + * AVR32 AT32UC3A0512 GNU LD script file. + * + * - Compiler: GNU GCC for AVR32 + * - Supported devices: AVR32 AT32UC3A0512 + * + * - author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +OUTPUT_FORMAT("elf32-avr32", "elf32-avr32", "elf32-avr32") + +OUTPUT_ARCH(avr32:uc) + +ENTRY(_start) + +MEMORY +{ + FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 0x00080000 + INTRAM (wxa!ri) : ORIGIN = 0x00000004, LENGTH = 0x0000FFFC + USERPAGE : ORIGIN = 0x80800000, LENGTH = 0x00000200 +} + +PHDRS +{ + FLASH PT_LOAD; + INTRAM_ALIGN PT_NULL; + INTRAM_AT_FLASH PT_LOAD; + INTRAM PT_NULL; + USERPAGE PT_LOAD; +} + +SECTIONS +{ + /* If this heap size is selected, all the INTRAM space from the end of the + data area to the beginning of the stack will be allocated for the heap. */ + __max_heap_size__ = -1; + + /* Use a default heap size if heap size was not defined. */ + __heap_size__ = DEFINED(__heap_size__) ? __heap_size__ : __max_heap_size__; + + /* Use a default stack size if stack size was not defined. */ + __stack_size__ = DEFINED(__stack_size__) ? __stack_size__ : 4K; + + /* Read-only sections, merged into text segment: */ + PROVIDE (__executable_start = 0x80000000); . = 0x80000000; + .interp : { *(.interp) } >FLASH AT>FLASH :FLASH + .reset : { *(.reset) } >FLASH AT>FLASH :FLASH + .hash : { *(.hash) } >FLASH AT>FLASH :FLASH + .dynsym : { *(.dynsym) } >FLASH AT>FLASH :FLASH + .dynstr : { *(.dynstr) } >FLASH AT>FLASH :FLASH + .gnu.version : { *(.gnu.version) } >FLASH AT>FLASH :FLASH + .gnu.version_d : { *(.gnu.version_d) } >FLASH AT>FLASH :FLASH + .gnu.version_r : { *(.gnu.version_r) } >FLASH AT>FLASH :FLASH + .rel.init : { *(.rel.init) } >FLASH AT>FLASH :FLASH + .rela.init : { *(.rela.init) } >FLASH AT>FLASH :FLASH + .rel.text : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) } >FLASH AT>FLASH :FLASH + .rela.text : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) } >FLASH AT>FLASH :FLASH + .rel.fini : { *(.rel.fini) } >FLASH AT>FLASH :FLASH + .rela.fini : { *(.rela.fini) } >FLASH AT>FLASH :FLASH + .rel.rodata : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) } >FLASH AT>FLASH :FLASH + .rela.rodata : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) } >FLASH AT>FLASH :FLASH + .rel.data.rel.ro : { *(.rel.data.rel.ro*) } >FLASH AT>FLASH :FLASH + .rela.data.rel.ro : { *(.rel.data.rel.ro*) } >FLASH AT>FLASH :FLASH + .rel.data : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) } >FLASH AT>FLASH :FLASH + .rela.data : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) } >FLASH AT>FLASH :FLASH + .rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) } >FLASH AT>FLASH :FLASH + .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) } >FLASH AT>FLASH :FLASH + .rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) } >FLASH AT>FLASH :FLASH + .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) } >FLASH AT>FLASH :FLASH + .rel.ctors : { *(.rel.ctors) } >FLASH AT>FLASH :FLASH + .rela.ctors : { *(.rela.ctors) } >FLASH AT>FLASH :FLASH + .rel.dtors : { *(.rel.dtors) } >FLASH AT>FLASH :FLASH + .rela.dtors : { *(.rela.dtors) } >FLASH AT>FLASH :FLASH + .rel.got : { *(.rel.got) } >FLASH AT>FLASH :FLASH + .rela.got : { *(.rela.got) } >FLASH AT>FLASH :FLASH + .rel.bss : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) } >FLASH AT>FLASH :FLASH + .rela.bss : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) } >FLASH AT>FLASH :FLASH + .rel.plt : { *(.rel.plt) } >FLASH AT>FLASH :FLASH + .rela.plt : { *(.rela.plt) } >FLASH AT>FLASH :FLASH + .init : + { + KEEP (*(.init)) + } >FLASH AT>FLASH :FLASH =0xd703d703 + .plt : { *(.plt) } >FLASH AT>FLASH :FLASH + .text : + { + *(.text .stub .text.* .gnu.linkonce.t.*) + KEEP (*(.text.*personality*)) + /* .gnu.warning sections are handled specially by elf32.em. */ + *(.gnu.warning) + } >FLASH AT>FLASH :FLASH =0xd703d703 + .fini : + { + KEEP (*(.fini)) + } >FLASH AT>FLASH :FLASH =0xd703d703 + PROVIDE (__etext = .); + PROVIDE (_etext = .); + PROVIDE (etext = .); + .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } >FLASH AT>FLASH :FLASH + .rodata1 : { *(.rodata1) } >FLASH AT>FLASH :FLASH + .eh_frame_hdr : { *(.eh_frame_hdr) } >FLASH AT>FLASH :FLASH + .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) } >FLASH AT>FLASH :FLASH + .gcc_except_table : ONLY_IF_RO { KEEP (*(.gcc_except_table)) *(.gcc_except_table.*) } >FLASH AT>FLASH :FLASH + .lalign : { . = ALIGN(8); PROVIDE(_data_lma = .); } >FLASH AT>FLASH :FLASH + . = ORIGIN(INTRAM); + .dalign : { . = ALIGN(8); PROVIDE(_data = .); } >INTRAM AT>INTRAM :INTRAM_ALIGN + /* Exception handling */ + .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .gcc_except_table : ONLY_IF_RW { KEEP (*(.gcc_except_table)) *(.gcc_except_table.*) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + /* Thread Local Storage sections */ + .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + /* Ensure the __preinit_array_start label is properly aligned. We + could instead move the label definition inside the section, but + the linker would then create the section even if it turns out to + be empty, which isn't pretty. */ + PROVIDE (__preinit_array_start = ALIGN(32 / 8)); + .preinit_array : { KEEP (*(.preinit_array)) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + PROVIDE (__preinit_array_end = .); + PROVIDE (__init_array_start = .); + .init_array : { KEEP (*(.init_array)) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + PROVIDE (__init_array_end = .); + PROVIDE (__fini_array_start = .); + .fini_array : { KEEP (*(.fini_array)) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + PROVIDE (__fini_array_end = .); + .ctors : + { + /* gcc uses crtbegin.o to find the start of + the constructors, so we make sure it is + first. Because this is a wildcard, it + doesn't matter if the user does not + actually link against crtbegin.o; the + linker won't look for a file to match a + wildcard. The wildcard also means that it + doesn't matter which directory crtbegin.o + is in. */ + KEEP (*crtbegin*.o(.ctors)) + /* We don't want to include the .ctor section from + from the crtend.o file until after the sorted ctors. + The .ctor section from the crtend file contains the + end of ctors marker and it must be last */ + KEEP (*(EXCLUDE_FILE (*crtend*.o ) .ctors)) + KEEP (*(SORT(.ctors.*))) + KEEP (*(.ctors)) + } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .dtors : + { + KEEP (*crtbegin*.o(.dtors)) + KEEP (*(EXCLUDE_FILE (*crtend*.o ) .dtors)) + KEEP (*(SORT(.dtors.*))) + KEEP (*(.dtors)) + } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .jcr : { KEEP (*(.jcr)) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .data.rel.ro : { *(.data.rel.ro.local) *(.data.rel.ro*) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .dynamic : { *(.dynamic) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .got : { *(.got.plt) *(.got) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .ramtext : { *(.ramtext .ramtext.*) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .ddalign : { . = ALIGN(8); } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .data : + { + *(.data .data.* .gnu.linkonce.d.*) + KEEP (*(.gnu.linkonce.d.*personality*)) + SORT(CONSTRUCTORS) + } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .data1 : { *(.data1) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .balign : { . = ALIGN(8); PROVIDE(_edata = .); } >INTRAM AT>FLASH :INTRAM_AT_FLASH + PROVIDE (edata = .); + __bss_start = .; + .bss : + { + *(.dynbss) + *(.bss .bss.* .gnu.linkonce.b.*) + *(COMMON) + /* Align here to ensure that the .bss section occupies space up to + _end. Align after .bss to ensure correct alignment even if the + .bss section disappears because there are no input sections. */ + . = ALIGN(8); + } >INTRAM AT>INTRAM :INTRAM + . = ALIGN(8); + _end = .; + PROVIDE (end = .); + __heap_start__ = ALIGN(8); + .heap : + { + *(.heap) + . = (__heap_size__ == __max_heap_size__) ? + ORIGIN(INTRAM) + LENGTH(INTRAM) - __stack_size__ - ABSOLUTE(.) : + __heap_size__; + } >INTRAM AT>INTRAM :INTRAM + __heap_end__ = .; + /* Stabs debugging sections. */ + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + .comment 0 : { *(.comment) } + /* DWARF debug sections. + Symbols in the DWARF debugging sections are relative to the beginning + of the section so we begin them at 0. */ + /* DWARF 1 */ + .debug 0 : { *(.debug) } + .line 0 : { *(.line) } + /* GNU DWARF 1 extensions */ + .debug_srcinfo 0 : { *(.debug_srcinfo) } + .debug_sfnames 0 : { *(.debug_sfnames) } + /* DWARF 1.1 and DWARF 2 */ + .debug_aranges 0 : { *(.debug_aranges) } + .debug_pubnames 0 : { *(.debug_pubnames) } + /* DWARF 2 */ + .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_line 0 : { *(.debug_line) } + .debug_frame 0 : { *(.debug_frame) } + .debug_str 0 : { *(.debug_str) } + .debug_loc 0 : { *(.debug_loc) } + .debug_macinfo 0 : { *(.debug_macinfo) } + /* SGI/MIPS DWARF 2 extensions */ + .debug_weaknames 0 : { *(.debug_weaknames) } + .debug_funcnames 0 : { *(.debug_funcnames) } + .debug_typenames 0 : { *(.debug_typenames) } + .debug_varnames 0 : { *(.debug_varnames) } + .stack ORIGIN(INTRAM) + LENGTH(INTRAM) - __stack_size__ : + { + _stack = .; + *(.stack) + . = __stack_size__; + _estack = .; + } >INTRAM AT>INTRAM :INTRAM + .userpage : { *(.userpage .userpage.*) } >USERPAGE AT>USERPAGE :USERPAGE + /DISCARD/ : { *(.note.GNU-stack) } +} diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LINKER_SCRIPTS/AT32UC3A/1256/GCC/link_uc3a1256.lds b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LINKER_SCRIPTS/AT32UC3A/1256/GCC/link_uc3a1256.lds new file mode 100644 index 000000000..a5926d8be --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LINKER_SCRIPTS/AT32UC3A/1256/GCC/link_uc3a1256.lds @@ -0,0 +1,266 @@ +/****************************************************************************** + * AVR32 AT32UC3A1256 GNU LD script file. + * + * - Compiler: GNU GCC for AVR32 + * - Supported devices: AVR32 AT32UC3A1256 + * + * - author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +OUTPUT_FORMAT("elf32-avr32", "elf32-avr32", "elf32-avr32") + +OUTPUT_ARCH(avr32:uc) + +ENTRY(_start) + +MEMORY +{ + FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 0x00040000 + INTRAM (wxa!ri) : ORIGIN = 0x00000004, LENGTH = 0x0000FFFC + USERPAGE : ORIGIN = 0x80800000, LENGTH = 0x00000200 +} + +PHDRS +{ + FLASH PT_LOAD; + INTRAM_ALIGN PT_NULL; + INTRAM_AT_FLASH PT_LOAD; + INTRAM PT_NULL; + USERPAGE PT_LOAD; +} + +SECTIONS +{ + /* If this heap size is selected, all the INTRAM space from the end of the + data area to the beginning of the stack will be allocated for the heap. */ + __max_heap_size__ = -1; + + /* Use a default heap size if heap size was not defined. */ + __heap_size__ = DEFINED(__heap_size__) ? __heap_size__ : __max_heap_size__; + + /* Use a default stack size if stack size was not defined. */ + __stack_size__ = DEFINED(__stack_size__) ? __stack_size__ : 4K; + + /* Read-only sections, merged into text segment: */ + PROVIDE (__executable_start = 0x80000000); . = 0x80000000; + .interp : { *(.interp) } >FLASH AT>FLASH :FLASH + .reset : { *(.reset) } >FLASH AT>FLASH :FLASH + .hash : { *(.hash) } >FLASH AT>FLASH :FLASH + .dynsym : { *(.dynsym) } >FLASH AT>FLASH :FLASH + .dynstr : { *(.dynstr) } >FLASH AT>FLASH :FLASH + .gnu.version : { *(.gnu.version) } >FLASH AT>FLASH :FLASH + .gnu.version_d : { *(.gnu.version_d) } >FLASH AT>FLASH :FLASH + .gnu.version_r : { *(.gnu.version_r) } >FLASH AT>FLASH :FLASH + .rel.init : { *(.rel.init) } >FLASH AT>FLASH :FLASH + .rela.init : { *(.rela.init) } >FLASH AT>FLASH :FLASH + .rel.text : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) } >FLASH AT>FLASH :FLASH + .rela.text : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) } >FLASH AT>FLASH :FLASH + .rel.fini : { *(.rel.fini) } >FLASH AT>FLASH :FLASH + .rela.fini : { *(.rela.fini) } >FLASH AT>FLASH :FLASH + .rel.rodata : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) } >FLASH AT>FLASH :FLASH + .rela.rodata : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) } >FLASH AT>FLASH :FLASH + .rel.data.rel.ro : { *(.rel.data.rel.ro*) } >FLASH AT>FLASH :FLASH + .rela.data.rel.ro : { *(.rel.data.rel.ro*) } >FLASH AT>FLASH :FLASH + .rel.data : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) } >FLASH AT>FLASH :FLASH + .rela.data : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) } >FLASH AT>FLASH :FLASH + .rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) } >FLASH AT>FLASH :FLASH + .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) } >FLASH AT>FLASH :FLASH + .rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) } >FLASH AT>FLASH :FLASH + .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) } >FLASH AT>FLASH :FLASH + .rel.ctors : { *(.rel.ctors) } >FLASH AT>FLASH :FLASH + .rela.ctors : { *(.rela.ctors) } >FLASH AT>FLASH :FLASH + .rel.dtors : { *(.rel.dtors) } >FLASH AT>FLASH :FLASH + .rela.dtors : { *(.rela.dtors) } >FLASH AT>FLASH :FLASH + .rel.got : { *(.rel.got) } >FLASH AT>FLASH :FLASH + .rela.got : { *(.rela.got) } >FLASH AT>FLASH :FLASH + .rel.bss : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) } >FLASH AT>FLASH :FLASH + .rela.bss : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) } >FLASH AT>FLASH :FLASH + .rel.plt : { *(.rel.plt) } >FLASH AT>FLASH :FLASH + .rela.plt : { *(.rela.plt) } >FLASH AT>FLASH :FLASH + .init : + { + KEEP (*(.init)) + } >FLASH AT>FLASH :FLASH =0xd703d703 + .plt : { *(.plt) } >FLASH AT>FLASH :FLASH + .text : + { + *(.text .stub .text.* .gnu.linkonce.t.*) + KEEP (*(.text.*personality*)) + /* .gnu.warning sections are handled specially by elf32.em. */ + *(.gnu.warning) + } >FLASH AT>FLASH :FLASH =0xd703d703 + .fini : + { + KEEP (*(.fini)) + } >FLASH AT>FLASH :FLASH =0xd703d703 + PROVIDE (__etext = .); + PROVIDE (_etext = .); + PROVIDE (etext = .); + .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } >FLASH AT>FLASH :FLASH + .rodata1 : { *(.rodata1) } >FLASH AT>FLASH :FLASH + .eh_frame_hdr : { *(.eh_frame_hdr) } >FLASH AT>FLASH :FLASH + .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) } >FLASH AT>FLASH :FLASH + .gcc_except_table : ONLY_IF_RO { KEEP (*(.gcc_except_table)) *(.gcc_except_table.*) } >FLASH AT>FLASH :FLASH + .lalign : { . = ALIGN(8); PROVIDE(_data_lma = .); } >FLASH AT>FLASH :FLASH + . = ORIGIN(INTRAM); + .dalign : { . = ALIGN(8); PROVIDE(_data = .); } >INTRAM AT>INTRAM :INTRAM_ALIGN + /* Exception handling */ + .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .gcc_except_table : ONLY_IF_RW { KEEP (*(.gcc_except_table)) *(.gcc_except_table.*) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + /* Thread Local Storage sections */ + .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + /* Ensure the __preinit_array_start label is properly aligned. We + could instead move the label definition inside the section, but + the linker would then create the section even if it turns out to + be empty, which isn't pretty. */ + PROVIDE (__preinit_array_start = ALIGN(32 / 8)); + .preinit_array : { KEEP (*(.preinit_array)) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + PROVIDE (__preinit_array_end = .); + PROVIDE (__init_array_start = .); + .init_array : { KEEP (*(.init_array)) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + PROVIDE (__init_array_end = .); + PROVIDE (__fini_array_start = .); + .fini_array : { KEEP (*(.fini_array)) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + PROVIDE (__fini_array_end = .); + .ctors : + { + /* gcc uses crtbegin.o to find the start of + the constructors, so we make sure it is + first. Because this is a wildcard, it + doesn't matter if the user does not + actually link against crtbegin.o; the + linker won't look for a file to match a + wildcard. The wildcard also means that it + doesn't matter which directory crtbegin.o + is in. */ + KEEP (*crtbegin*.o(.ctors)) + /* We don't want to include the .ctor section from + from the crtend.o file until after the sorted ctors. + The .ctor section from the crtend file contains the + end of ctors marker and it must be last */ + KEEP (*(EXCLUDE_FILE (*crtend*.o ) .ctors)) + KEEP (*(SORT(.ctors.*))) + KEEP (*(.ctors)) + } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .dtors : + { + KEEP (*crtbegin*.o(.dtors)) + KEEP (*(EXCLUDE_FILE (*crtend*.o ) .dtors)) + KEEP (*(SORT(.dtors.*))) + KEEP (*(.dtors)) + } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .jcr : { KEEP (*(.jcr)) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .data.rel.ro : { *(.data.rel.ro.local) *(.data.rel.ro*) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .dynamic : { *(.dynamic) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .got : { *(.got.plt) *(.got) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .ramtext : { *(.ramtext .ramtext.*) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .ddalign : { . = ALIGN(8); } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .data : + { + *(.data .data.* .gnu.linkonce.d.*) + KEEP (*(.gnu.linkonce.d.*personality*)) + SORT(CONSTRUCTORS) + } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .data1 : { *(.data1) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .balign : { . = ALIGN(8); PROVIDE(_edata = .); } >INTRAM AT>FLASH :INTRAM_AT_FLASH + PROVIDE (edata = .); + __bss_start = .; + .bss : + { + *(.dynbss) + *(.bss .bss.* .gnu.linkonce.b.*) + *(COMMON) + /* Align here to ensure that the .bss section occupies space up to + _end. Align after .bss to ensure correct alignment even if the + .bss section disappears because there are no input sections. */ + . = ALIGN(8); + } >INTRAM AT>INTRAM :INTRAM + . = ALIGN(8); + _end = .; + PROVIDE (end = .); + __heap_start__ = ALIGN(8); + .heap : + { + *(.heap) + . = (__heap_size__ == __max_heap_size__) ? + ORIGIN(INTRAM) + LENGTH(INTRAM) - __stack_size__ - ABSOLUTE(.) : + __heap_size__; + } >INTRAM AT>INTRAM :INTRAM + __heap_end__ = .; + /* Stabs debugging sections. */ + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + .comment 0 : { *(.comment) } + /* DWARF debug sections. + Symbols in the DWARF debugging sections are relative to the beginning + of the section so we begin them at 0. */ + /* DWARF 1 */ + .debug 0 : { *(.debug) } + .line 0 : { *(.line) } + /* GNU DWARF 1 extensions */ + .debug_srcinfo 0 : { *(.debug_srcinfo) } + .debug_sfnames 0 : { *(.debug_sfnames) } + /* DWARF 1.1 and DWARF 2 */ + .debug_aranges 0 : { *(.debug_aranges) } + .debug_pubnames 0 : { *(.debug_pubnames) } + /* DWARF 2 */ + .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_line 0 : { *(.debug_line) } + .debug_frame 0 : { *(.debug_frame) } + .debug_str 0 : { *(.debug_str) } + .debug_loc 0 : { *(.debug_loc) } + .debug_macinfo 0 : { *(.debug_macinfo) } + /* SGI/MIPS DWARF 2 extensions */ + .debug_weaknames 0 : { *(.debug_weaknames) } + .debug_funcnames 0 : { *(.debug_funcnames) } + .debug_typenames 0 : { *(.debug_typenames) } + .debug_varnames 0 : { *(.debug_varnames) } + .stack ORIGIN(INTRAM) + LENGTH(INTRAM) - __stack_size__ : + { + _stack = .; + *(.stack) + . = __stack_size__; + _estack = .; + } >INTRAM AT>INTRAM :INTRAM + .userpage : { *(.userpage .userpage.*) } >USERPAGE AT>USERPAGE :USERPAGE + /DISCARD/ : { *(.note.GNU-stack) } +} diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/mrepeat.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/mrepeat.h new file mode 100644 index 000000000..41163b6d9 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/mrepeat.h @@ -0,0 +1,328 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Preprocessor macro repeating utils. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _MREPEAT_H_ +#define _MREPEAT_H_ + +#include "preprocessor.h" + + +//! Maximal number of repetitions supported by MREPEAT. +#define MREPEAT_LIMIT 256 + +/*! \brief Macro repeat. + * + * This macro represents a horizontal repetition construct. + * + * \param count The number of repetitious calls to macro. Valid values range from 0 to MREPEAT_LIMIT. + * \param macro A binary operation of the form macro(n, data). This macro is expanded by MREPEAT with + * the current repetition number and the auxiliary data argument. + * \param data Auxiliary data passed to macro. + * + * \return macro(0, data) macro(1, data) ... macro(count - 1, data) + */ +#define MREPEAT(count, macro, data) TPASTE2(MREPEAT, count)(macro, data) + +#define MREPEAT0( macro, data) +#define MREPEAT1( macro, data) MREPEAT0( macro, data) macro( 0, data) +#define MREPEAT2( macro, data) MREPEAT1( macro, data) macro( 1, data) +#define MREPEAT3( macro, data) MREPEAT2( macro, data) macro( 2, data) +#define MREPEAT4( macro, data) MREPEAT3( macro, data) macro( 3, data) +#define MREPEAT5( macro, data) MREPEAT4( macro, data) macro( 4, data) +#define MREPEAT6( macro, data) MREPEAT5( macro, data) macro( 5, data) +#define MREPEAT7( macro, data) MREPEAT6( macro, data) macro( 6, data) +#define MREPEAT8( macro, data) MREPEAT7( macro, data) macro( 7, data) +#define MREPEAT9( macro, data) MREPEAT8( macro, data) macro( 8, data) +#define MREPEAT10( macro, data) MREPEAT9( macro, data) macro( 9, data) +#define MREPEAT11( macro, data) MREPEAT10( macro, data) macro( 10, data) +#define MREPEAT12( macro, data) MREPEAT11( macro, data) macro( 11, data) +#define MREPEAT13( macro, data) MREPEAT12( macro, data) macro( 12, data) +#define MREPEAT14( macro, data) MREPEAT13( macro, data) macro( 13, data) +#define MREPEAT15( macro, data) MREPEAT14( macro, data) macro( 14, data) +#define MREPEAT16( macro, data) MREPEAT15( macro, data) macro( 15, data) +#define MREPEAT17( macro, data) MREPEAT16( macro, data) macro( 16, data) +#define MREPEAT18( macro, data) MREPEAT17( macro, data) macro( 17, data) +#define MREPEAT19( macro, data) MREPEAT18( macro, data) macro( 18, data) +#define MREPEAT20( macro, data) MREPEAT19( macro, data) macro( 19, data) +#define MREPEAT21( macro, data) MREPEAT20( macro, data) macro( 20, data) +#define MREPEAT22( macro, data) MREPEAT21( macro, data) macro( 21, data) +#define MREPEAT23( macro, data) MREPEAT22( macro, data) macro( 22, data) +#define MREPEAT24( macro, data) MREPEAT23( macro, data) macro( 23, data) +#define MREPEAT25( macro, data) MREPEAT24( macro, data) macro( 24, data) +#define MREPEAT26( macro, data) MREPEAT25( macro, data) macro( 25, data) +#define MREPEAT27( macro, data) MREPEAT26( macro, data) macro( 26, data) +#define MREPEAT28( macro, data) MREPEAT27( macro, data) macro( 27, data) +#define MREPEAT29( macro, data) MREPEAT28( macro, data) macro( 28, data) +#define MREPEAT30( macro, data) MREPEAT29( macro, data) macro( 29, data) +#define MREPEAT31( macro, data) MREPEAT30( macro, data) macro( 30, data) +#define MREPEAT32( macro, data) MREPEAT31( macro, data) macro( 31, data) +#define MREPEAT33( macro, data) MREPEAT32( macro, data) macro( 32, data) +#define MREPEAT34( macro, data) MREPEAT33( macro, data) macro( 33, data) +#define MREPEAT35( macro, data) MREPEAT34( macro, data) macro( 34, data) +#define MREPEAT36( macro, data) MREPEAT35( macro, data) macro( 35, data) +#define MREPEAT37( macro, data) MREPEAT36( macro, data) macro( 36, data) +#define MREPEAT38( macro, data) MREPEAT37( macro, data) macro( 37, data) +#define MREPEAT39( macro, data) MREPEAT38( macro, data) macro( 38, data) +#define MREPEAT40( macro, data) MREPEAT39( macro, data) macro( 39, data) +#define MREPEAT41( macro, data) MREPEAT40( macro, data) macro( 40, data) +#define MREPEAT42( macro, data) MREPEAT41( macro, data) macro( 41, data) +#define MREPEAT43( macro, data) MREPEAT42( macro, data) macro( 42, data) +#define MREPEAT44( macro, data) MREPEAT43( macro, data) macro( 43, data) +#define MREPEAT45( macro, data) MREPEAT44( macro, data) macro( 44, data) +#define MREPEAT46( macro, data) MREPEAT45( macro, data) macro( 45, data) +#define MREPEAT47( macro, data) MREPEAT46( macro, data) macro( 46, data) +#define MREPEAT48( macro, data) MREPEAT47( macro, data) macro( 47, data) +#define MREPEAT49( macro, data) MREPEAT48( macro, data) macro( 48, data) +#define MREPEAT50( macro, data) MREPEAT49( macro, data) macro( 49, data) +#define MREPEAT51( macro, data) MREPEAT50( macro, data) macro( 50, data) +#define MREPEAT52( macro, data) MREPEAT51( macro, data) macro( 51, data) +#define MREPEAT53( macro, data) MREPEAT52( macro, data) macro( 52, data) +#define MREPEAT54( macro, data) MREPEAT53( macro, data) macro( 53, data) +#define MREPEAT55( macro, data) MREPEAT54( macro, data) macro( 54, data) +#define MREPEAT56( macro, data) MREPEAT55( macro, data) macro( 55, data) +#define MREPEAT57( macro, data) MREPEAT56( macro, data) macro( 56, data) +#define MREPEAT58( macro, data) MREPEAT57( macro, data) macro( 57, data) +#define MREPEAT59( macro, data) MREPEAT58( macro, data) macro( 58, data) +#define MREPEAT60( macro, data) MREPEAT59( macro, data) macro( 59, data) +#define MREPEAT61( macro, data) MREPEAT60( macro, data) macro( 60, data) +#define MREPEAT62( macro, data) MREPEAT61( macro, data) macro( 61, data) +#define MREPEAT63( macro, data) MREPEAT62( macro, data) macro( 62, data) +#define MREPEAT64( macro, data) MREPEAT63( macro, data) macro( 63, data) +#define MREPEAT65( macro, data) MREPEAT64( macro, data) macro( 64, data) +#define MREPEAT66( macro, data) MREPEAT65( macro, data) macro( 65, data) +#define MREPEAT67( macro, data) MREPEAT66( macro, data) macro( 66, data) +#define MREPEAT68( macro, data) MREPEAT67( macro, data) macro( 67, data) +#define MREPEAT69( macro, data) MREPEAT68( macro, data) macro( 68, data) +#define MREPEAT70( macro, data) MREPEAT69( macro, data) macro( 69, data) +#define MREPEAT71( macro, data) MREPEAT70( macro, data) macro( 70, data) +#define MREPEAT72( macro, data) MREPEAT71( macro, data) macro( 71, data) +#define MREPEAT73( macro, data) MREPEAT72( macro, data) macro( 72, data) +#define MREPEAT74( macro, data) MREPEAT73( macro, data) macro( 73, data) +#define MREPEAT75( macro, data) MREPEAT74( macro, data) macro( 74, data) +#define MREPEAT76( macro, data) MREPEAT75( macro, data) macro( 75, data) +#define MREPEAT77( macro, data) MREPEAT76( macro, data) macro( 76, data) +#define MREPEAT78( macro, data) MREPEAT77( macro, data) macro( 77, data) +#define MREPEAT79( macro, data) MREPEAT78( macro, data) macro( 78, data) +#define MREPEAT80( macro, data) MREPEAT79( macro, data) macro( 79, data) +#define MREPEAT81( macro, data) MREPEAT80( macro, data) macro( 80, data) +#define MREPEAT82( macro, data) MREPEAT81( macro, data) macro( 81, data) +#define MREPEAT83( macro, data) MREPEAT82( macro, data) macro( 82, data) +#define MREPEAT84( macro, data) MREPEAT83( macro, data) macro( 83, data) +#define MREPEAT85( macro, data) MREPEAT84( macro, data) macro( 84, data) +#define MREPEAT86( macro, data) MREPEAT85( macro, data) macro( 85, data) +#define MREPEAT87( macro, data) MREPEAT86( macro, data) macro( 86, data) +#define MREPEAT88( macro, data) MREPEAT87( macro, data) macro( 87, data) +#define MREPEAT89( macro, data) MREPEAT88( macro, data) macro( 88, data) +#define MREPEAT90( macro, data) MREPEAT89( macro, data) macro( 89, data) +#define MREPEAT91( macro, data) MREPEAT90( macro, data) macro( 90, data) +#define MREPEAT92( macro, data) MREPEAT91( macro, data) macro( 91, data) +#define MREPEAT93( macro, data) MREPEAT92( macro, data) macro( 92, data) +#define MREPEAT94( macro, data) MREPEAT93( macro, data) macro( 93, data) +#define MREPEAT95( macro, data) MREPEAT94( macro, data) macro( 94, data) +#define MREPEAT96( macro, data) MREPEAT95( macro, data) macro( 95, data) +#define MREPEAT97( macro, data) MREPEAT96( macro, data) macro( 96, data) +#define MREPEAT98( macro, data) MREPEAT97( macro, data) macro( 97, data) +#define MREPEAT99( macro, data) MREPEAT98( macro, data) macro( 98, data) +#define MREPEAT100(macro, data) MREPEAT99( macro, data) macro( 99, data) +#define MREPEAT101(macro, data) MREPEAT100(macro, data) macro(100, data) +#define MREPEAT102(macro, data) MREPEAT101(macro, data) macro(101, data) +#define MREPEAT103(macro, data) MREPEAT102(macro, data) macro(102, data) +#define MREPEAT104(macro, data) MREPEAT103(macro, data) macro(103, data) +#define MREPEAT105(macro, data) MREPEAT104(macro, data) macro(104, data) +#define MREPEAT106(macro, data) MREPEAT105(macro, data) macro(105, data) +#define MREPEAT107(macro, data) MREPEAT106(macro, data) macro(106, data) +#define MREPEAT108(macro, data) MREPEAT107(macro, data) macro(107, data) +#define MREPEAT109(macro, data) MREPEAT108(macro, data) macro(108, data) +#define MREPEAT110(macro, data) MREPEAT109(macro, data) macro(109, data) +#define MREPEAT111(macro, data) MREPEAT110(macro, data) macro(110, data) +#define MREPEAT112(macro, data) MREPEAT111(macro, data) macro(111, data) +#define MREPEAT113(macro, data) MREPEAT112(macro, data) macro(112, data) +#define MREPEAT114(macro, data) MREPEAT113(macro, data) macro(113, data) +#define MREPEAT115(macro, data) MREPEAT114(macro, data) macro(114, data) +#define MREPEAT116(macro, data) MREPEAT115(macro, data) macro(115, data) +#define MREPEAT117(macro, data) MREPEAT116(macro, data) macro(116, data) +#define MREPEAT118(macro, data) MREPEAT117(macro, data) macro(117, data) +#define MREPEAT119(macro, data) MREPEAT118(macro, data) macro(118, data) +#define MREPEAT120(macro, data) MREPEAT119(macro, data) macro(119, data) +#define MREPEAT121(macro, data) MREPEAT120(macro, data) macro(120, data) +#define MREPEAT122(macro, data) MREPEAT121(macro, data) macro(121, data) +#define MREPEAT123(macro, data) MREPEAT122(macro, data) macro(122, data) +#define MREPEAT124(macro, data) MREPEAT123(macro, data) macro(123, data) +#define MREPEAT125(macro, data) MREPEAT124(macro, data) macro(124, data) +#define MREPEAT126(macro, data) MREPEAT125(macro, data) macro(125, data) +#define MREPEAT127(macro, data) MREPEAT126(macro, data) macro(126, data) +#define MREPEAT128(macro, data) MREPEAT127(macro, data) macro(127, data) +#define MREPEAT129(macro, data) MREPEAT128(macro, data) macro(128, data) +#define MREPEAT130(macro, data) MREPEAT129(macro, data) macro(129, data) +#define MREPEAT131(macro, data) MREPEAT130(macro, data) macro(130, data) +#define MREPEAT132(macro, data) MREPEAT131(macro, data) macro(131, data) +#define MREPEAT133(macro, data) MREPEAT132(macro, data) macro(132, data) +#define MREPEAT134(macro, data) MREPEAT133(macro, data) macro(133, data) +#define MREPEAT135(macro, data) MREPEAT134(macro, data) macro(134, data) +#define MREPEAT136(macro, data) MREPEAT135(macro, data) macro(135, data) +#define MREPEAT137(macro, data) MREPEAT136(macro, data) macro(136, data) +#define MREPEAT138(macro, data) MREPEAT137(macro, data) macro(137, data) +#define MREPEAT139(macro, data) MREPEAT138(macro, data) macro(138, data) +#define MREPEAT140(macro, data) MREPEAT139(macro, data) macro(139, data) +#define MREPEAT141(macro, data) MREPEAT140(macro, data) macro(140, data) +#define MREPEAT142(macro, data) MREPEAT141(macro, data) macro(141, data) +#define MREPEAT143(macro, data) MREPEAT142(macro, data) macro(142, data) +#define MREPEAT144(macro, data) MREPEAT143(macro, data) macro(143, data) +#define MREPEAT145(macro, data) MREPEAT144(macro, data) macro(144, data) +#define MREPEAT146(macro, data) MREPEAT145(macro, data) macro(145, data) +#define MREPEAT147(macro, data) MREPEAT146(macro, data) macro(146, data) +#define MREPEAT148(macro, data) MREPEAT147(macro, data) macro(147, data) +#define MREPEAT149(macro, data) MREPEAT148(macro, data) macro(148, data) +#define MREPEAT150(macro, data) MREPEAT149(macro, data) macro(149, data) +#define MREPEAT151(macro, data) MREPEAT150(macro, data) macro(150, data) +#define MREPEAT152(macro, data) MREPEAT151(macro, data) macro(151, data) +#define MREPEAT153(macro, data) MREPEAT152(macro, data) macro(152, data) +#define MREPEAT154(macro, data) MREPEAT153(macro, data) macro(153, data) +#define MREPEAT155(macro, data) MREPEAT154(macro, data) macro(154, data) +#define MREPEAT156(macro, data) MREPEAT155(macro, data) macro(155, data) +#define MREPEAT157(macro, data) MREPEAT156(macro, data) macro(156, data) +#define MREPEAT158(macro, data) MREPEAT157(macro, data) macro(157, data) +#define MREPEAT159(macro, data) MREPEAT158(macro, data) macro(158, data) +#define MREPEAT160(macro, data) MREPEAT159(macro, data) macro(159, data) +#define MREPEAT161(macro, data) MREPEAT160(macro, data) macro(160, data) +#define MREPEAT162(macro, data) MREPEAT161(macro, data) macro(161, data) +#define MREPEAT163(macro, data) MREPEAT162(macro, data) macro(162, data) +#define MREPEAT164(macro, data) MREPEAT163(macro, data) macro(163, data) +#define MREPEAT165(macro, data) MREPEAT164(macro, data) macro(164, data) +#define MREPEAT166(macro, data) MREPEAT165(macro, data) macro(165, data) +#define MREPEAT167(macro, data) MREPEAT166(macro, data) macro(166, data) +#define MREPEAT168(macro, data) MREPEAT167(macro, data) macro(167, data) +#define MREPEAT169(macro, data) MREPEAT168(macro, data) macro(168, data) +#define MREPEAT170(macro, data) MREPEAT169(macro, data) macro(169, data) +#define MREPEAT171(macro, data) MREPEAT170(macro, data) macro(170, data) +#define MREPEAT172(macro, data) MREPEAT171(macro, data) macro(171, data) +#define MREPEAT173(macro, data) MREPEAT172(macro, data) macro(172, data) +#define MREPEAT174(macro, data) MREPEAT173(macro, data) macro(173, data) +#define MREPEAT175(macro, data) MREPEAT174(macro, data) macro(174, data) +#define MREPEAT176(macro, data) MREPEAT175(macro, data) macro(175, data) +#define MREPEAT177(macro, data) MREPEAT176(macro, data) macro(176, data) +#define MREPEAT178(macro, data) MREPEAT177(macro, data) macro(177, data) +#define MREPEAT179(macro, data) MREPEAT178(macro, data) macro(178, data) +#define MREPEAT180(macro, data) MREPEAT179(macro, data) macro(179, data) +#define MREPEAT181(macro, data) MREPEAT180(macro, data) macro(180, data) +#define MREPEAT182(macro, data) MREPEAT181(macro, data) macro(181, data) +#define MREPEAT183(macro, data) MREPEAT182(macro, data) macro(182, data) +#define MREPEAT184(macro, data) MREPEAT183(macro, data) macro(183, data) +#define MREPEAT185(macro, data) MREPEAT184(macro, data) macro(184, data) +#define MREPEAT186(macro, data) MREPEAT185(macro, data) macro(185, data) +#define MREPEAT187(macro, data) MREPEAT186(macro, data) macro(186, data) +#define MREPEAT188(macro, data) MREPEAT187(macro, data) macro(187, data) +#define MREPEAT189(macro, data) MREPEAT188(macro, data) macro(188, data) +#define MREPEAT190(macro, data) MREPEAT189(macro, data) macro(189, data) +#define MREPEAT191(macro, data) MREPEAT190(macro, data) macro(190, data) +#define MREPEAT192(macro, data) MREPEAT191(macro, data) macro(191, data) +#define MREPEAT193(macro, data) MREPEAT192(macro, data) macro(192, data) +#define MREPEAT194(macro, data) MREPEAT193(macro, data) macro(193, data) +#define MREPEAT195(macro, data) MREPEAT194(macro, data) macro(194, data) +#define MREPEAT196(macro, data) MREPEAT195(macro, data) macro(195, data) +#define MREPEAT197(macro, data) MREPEAT196(macro, data) macro(196, data) +#define MREPEAT198(macro, data) MREPEAT197(macro, data) macro(197, data) +#define MREPEAT199(macro, data) MREPEAT198(macro, data) macro(198, data) +#define MREPEAT200(macro, data) MREPEAT199(macro, data) macro(199, data) +#define MREPEAT201(macro, data) MREPEAT200(macro, data) macro(200, data) +#define MREPEAT202(macro, data) MREPEAT201(macro, data) macro(201, data) +#define MREPEAT203(macro, data) MREPEAT202(macro, data) macro(202, data) +#define MREPEAT204(macro, data) MREPEAT203(macro, data) macro(203, data) +#define MREPEAT205(macro, data) MREPEAT204(macro, data) macro(204, data) +#define MREPEAT206(macro, data) MREPEAT205(macro, data) macro(205, data) +#define MREPEAT207(macro, data) MREPEAT206(macro, data) macro(206, data) +#define MREPEAT208(macro, data) MREPEAT207(macro, data) macro(207, data) +#define MREPEAT209(macro, data) MREPEAT208(macro, data) macro(208, data) +#define MREPEAT210(macro, data) MREPEAT209(macro, data) macro(209, data) +#define MREPEAT211(macro, data) MREPEAT210(macro, data) macro(210, data) +#define MREPEAT212(macro, data) MREPEAT211(macro, data) macro(211, data) +#define MREPEAT213(macro, data) MREPEAT212(macro, data) macro(212, data) +#define MREPEAT214(macro, data) MREPEAT213(macro, data) macro(213, data) +#define MREPEAT215(macro, data) MREPEAT214(macro, data) macro(214, data) +#define MREPEAT216(macro, data) MREPEAT215(macro, data) macro(215, data) +#define MREPEAT217(macro, data) MREPEAT216(macro, data) macro(216, data) +#define MREPEAT218(macro, data) MREPEAT217(macro, data) macro(217, data) +#define MREPEAT219(macro, data) MREPEAT218(macro, data) macro(218, data) +#define MREPEAT220(macro, data) MREPEAT219(macro, data) macro(219, data) +#define MREPEAT221(macro, data) MREPEAT220(macro, data) macro(220, data) +#define MREPEAT222(macro, data) MREPEAT221(macro, data) macro(221, data) +#define MREPEAT223(macro, data) MREPEAT222(macro, data) macro(222, data) +#define MREPEAT224(macro, data) MREPEAT223(macro, data) macro(223, data) +#define MREPEAT225(macro, data) MREPEAT224(macro, data) macro(224, data) +#define MREPEAT226(macro, data) MREPEAT225(macro, data) macro(225, data) +#define MREPEAT227(macro, data) MREPEAT226(macro, data) macro(226, data) +#define MREPEAT228(macro, data) MREPEAT227(macro, data) macro(227, data) +#define MREPEAT229(macro, data) MREPEAT228(macro, data) macro(228, data) +#define MREPEAT230(macro, data) MREPEAT229(macro, data) macro(229, data) +#define MREPEAT231(macro, data) MREPEAT230(macro, data) macro(230, data) +#define MREPEAT232(macro, data) MREPEAT231(macro, data) macro(231, data) +#define MREPEAT233(macro, data) MREPEAT232(macro, data) macro(232, data) +#define MREPEAT234(macro, data) MREPEAT233(macro, data) macro(233, data) +#define MREPEAT235(macro, data) MREPEAT234(macro, data) macro(234, data) +#define MREPEAT236(macro, data) MREPEAT235(macro, data) macro(235, data) +#define MREPEAT237(macro, data) MREPEAT236(macro, data) macro(236, data) +#define MREPEAT238(macro, data) MREPEAT237(macro, data) macro(237, data) +#define MREPEAT239(macro, data) MREPEAT238(macro, data) macro(238, data) +#define MREPEAT240(macro, data) MREPEAT239(macro, data) macro(239, data) +#define MREPEAT241(macro, data) MREPEAT240(macro, data) macro(240, data) +#define MREPEAT242(macro, data) MREPEAT241(macro, data) macro(241, data) +#define MREPEAT243(macro, data) MREPEAT242(macro, data) macro(242, data) +#define MREPEAT244(macro, data) MREPEAT243(macro, data) macro(243, data) +#define MREPEAT245(macro, data) MREPEAT244(macro, data) macro(244, data) +#define MREPEAT246(macro, data) MREPEAT245(macro, data) macro(245, data) +#define MREPEAT247(macro, data) MREPEAT246(macro, data) macro(246, data) +#define MREPEAT248(macro, data) MREPEAT247(macro, data) macro(247, data) +#define MREPEAT249(macro, data) MREPEAT248(macro, data) macro(248, data) +#define MREPEAT250(macro, data) MREPEAT249(macro, data) macro(249, data) +#define MREPEAT251(macro, data) MREPEAT250(macro, data) macro(250, data) +#define MREPEAT252(macro, data) MREPEAT251(macro, data) macro(251, data) +#define MREPEAT253(macro, data) MREPEAT252(macro, data) macro(252, data) +#define MREPEAT254(macro, data) MREPEAT253(macro, data) macro(253, data) +#define MREPEAT255(macro, data) MREPEAT254(macro, data) macro(254, data) +#define MREPEAT256(macro, data) MREPEAT255(macro, data) macro(255, data) + + +#endif // _MREPEAT_H_ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/preprocessor.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/preprocessor.h new file mode 100644 index 000000000..5b996ba11 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/preprocessor.h @@ -0,0 +1,55 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Preprocessor utils. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _PREPROCESSOR_H_ +#define _PREPROCESSOR_H_ + +#include "tpaste.h" +#include "stringz.h" +#include "mrepeat.h" + + +#endif // _PREPROCESSOR_H_ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/stringz.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/stringz.h new file mode 100644 index 000000000..3528ea0da --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/stringz.h @@ -0,0 +1,75 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Preprocessor stringizing utils. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _STRINGZ_H_ +#define _STRINGZ_H_ + + +/*! \brief Stringize. + * + * Stringize a preprocessing token, this token being allowed to be \#defined. + * + * May be used only within macros with the token passed as an argument if the token is \#defined. + * + * For example, writing STRINGZ(PIN) within a macro \#defined by PIN_NAME(PIN) + * and invoked as PIN_NAME(PIN0) with PIN0 \#defined as A0 is equivalent to + * writing "A0". + */ +#define STRINGZ(x) #x + +/*! \brief Absolute stringize. + * + * Stringize a preprocessing token, this token being allowed to be \#defined. + * + * No restriction of use if the token is \#defined. + * + * For example, writing ASTRINGZ(PIN0) anywhere with PIN0 \#defined as A0 is + * equivalent to writing "A0". + */ +#define ASTRINGZ(x) STRINGZ(x) + + +#endif // _STRINGZ_H_ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/tpaste.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/tpaste.h new file mode 100644 index 000000000..a5d7beeaa --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/tpaste.h @@ -0,0 +1,95 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Preprocessor token pasting utils. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _TPASTE_H_ +#define _TPASTE_H_ + + +/*! \name Token Paste + * + * Paste N preprocessing tokens together, these tokens being allowed to be \#defined. + * + * May be used only within macros with the tokens passed as arguments if the tokens are \#defined. + * + * For example, writing TPASTE2(U, WIDTH) within a macro \#defined by + * UTYPE(WIDTH) and invoked as UTYPE(UL_WIDTH) with UL_WIDTH \#defined as 32 is + * equivalent to writing U32. + */ +//! @{ +#define TPASTE2( a, b) a##b +#define TPASTE3( a, b, c) a##b##c +#define TPASTE4( a, b, c, d) a##b##c##d +#define TPASTE5( a, b, c, d, e) a##b##c##d##e +#define TPASTE6( a, b, c, d, e, f) a##b##c##d##e##f +#define TPASTE7( a, b, c, d, e, f, g) a##b##c##d##e##f##g +#define TPASTE8( a, b, c, d, e, f, g, h) a##b##c##d##e##f##g##h +#define TPASTE9( a, b, c, d, e, f, g, h, i) a##b##c##d##e##f##g##h##i +#define TPASTE10(a, b, c, d, e, f, g, h, i, j) a##b##c##d##e##f##g##h##i##j +//! @} + +/*! \name Absolute Token Paste + * + * Paste N preprocessing tokens together, these tokens being allowed to be \#defined. + * + * No restriction of use if the tokens are \#defined. + * + * For example, writing ATPASTE2(U, UL_WIDTH) anywhere with UL_WIDTH \#defined + * as 32 is equivalent to writing U32. + */ +//! @{ +#define ATPASTE2( a, b) TPASTE2( a, b) +#define ATPASTE3( a, b, c) TPASTE3( a, b, c) +#define ATPASTE4( a, b, c, d) TPASTE4( a, b, c, d) +#define ATPASTE5( a, b, c, d, e) TPASTE5( a, b, c, d, e) +#define ATPASTE6( a, b, c, d, e, f) TPASTE6( a, b, c, d, e, f) +#define ATPASTE7( a, b, c, d, e, f, g) TPASTE7( a, b, c, d, e, f, g) +#define ATPASTE8( a, b, c, d, e, f, g, h) TPASTE8( a, b, c, d, e, f, g, h) +#define ATPASTE9( a, b, c, d, e, f, g, h, i) TPASTE9( a, b, c, d, e, f, g, h, i) +#define ATPASTE10(a, b, c, d, e, f, g, h, i, j) TPASTE10(a, b, c, d, e, f, g, h, i, j) +//! @} + + +#endif // _TPASTE_H_ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/STARTUP_FILES/GCC/crt0.x b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/STARTUP_FILES/GCC/crt0.x new file mode 100644 index 000000000..23b658b98 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/STARTUP_FILES/GCC/crt0.x @@ -0,0 +1,121 @@ +/* This file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief AVR32UC C runtime startup file. + * + * This file has been built from the Newlib crt0.S. + * + * - Compiler: GNU GCC for AVR32 + * - Supported devices: All AVR32UC devices can be used. + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#include + + +//! @{ +//! \verbatim + + + // This must be linked @ 0x80000000 if it is to be run upon reset. + .section .reset, "ax", @progbits + + + .global _start + .type _start, @function +_start: + // Jump to the C runtime startup routine. + lda.w pc, _stext + + + // _stext is placed outside the .reset section so that the program entry point + // can be changed without affecting the C runtime startup. + .section .text._stext, "ax", @progbits + + + .global _stext + .type _stext, @function +_stext: + // Set initial stack pointer. + lda.w sp, _estack + + // Set up EVBA so interrupts can be enabled. + lda.w r0, _evba + mtsr AVR32_EVBA, r0 + + // Enable the exception processing. + csrf AVR32_SR_EM_OFFSET + + // Load initialized data having a global lifetime from the data LMA. + lda.w r0, _data + lda.w r1, _edata + cp r0, r1 + brhs idata_load_loop_end + lda.w r2, _data_lma +idata_load_loop: + ld.d r4, r2++ + st.d r0++, r4 + cp r0, r1 + brlo idata_load_loop +idata_load_loop_end: + + // Clear uninitialized data having a global lifetime in the blank static storage section. + lda.w r0, __bss_start + lda.w r1, _end + cp r0, r1 + brhs udata_clear_loop_end + mov r2, 0 + mov r3, 0 +udata_clear_loop: + st.d r0++, r2 + cp r0, r1 + brlo udata_clear_loop +udata_clear_loop_end: + +#ifdef CONFIG_FRAME_POINTER + // Safety: Set the default "return" @ to the exit routine address. + lda.w lr, exit +#endif + + // Start the show. + lda.w pc, main + + +//! \endverbatim +//! @} diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/compiler.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/compiler.h new file mode 100644 index 000000000..885be7fb9 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/compiler.h @@ -0,0 +1,1145 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Compiler file for AVR32. + * + * This file defines commonly used types and macros. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _COMPILER_H_ +#define _COMPILER_H_ + +#if ((defined __GNUC__) && (defined __AVR32__)) || (defined __ICCAVR32__ || defined __AAVR32__) +# include +#endif +#if (defined __ICCAVR32__) +# include +#endif +#include "preprocessor.h" + +#include "parts.h" + + +//_____ D E C L A R A T I O N S ____________________________________________ + +#ifdef __AVR32_ABI_COMPILER__ // Automatically defined when compiling for AVR32, not when assembling. + +#include +#include + + +#if (defined __ICCAVR32__) + +/*! \name Compiler Keywords + * + * Port of some keywords from GNU GCC for AVR32 to IAR Embedded Workbench for Atmel AVR32. + */ +//! @{ +#define __asm__ asm +#define __inline__ inline +#define __volatile__ +//! @} + +#endif + + +/*! \name Usual Types + */ +//! @{ +typedef unsigned char Bool; //!< Boolean. +#ifndef __cplusplus +#if !defined(__bool_true_false_are_defined) +typedef unsigned char bool; //!< Boolean. +#endif +#endif +typedef signed char S8 ; //!< 8-bit signed integer. +typedef unsigned char U8 ; //!< 8-bit unsigned integer. +typedef signed short int S16; //!< 16-bit signed integer. +typedef unsigned short int U16; //!< 16-bit unsigned integer. +typedef signed long int S32; //!< 32-bit signed integer. +typedef unsigned long int U32; //!< 32-bit unsigned integer. +typedef signed long long int S64; //!< 64-bit signed integer. +typedef unsigned long long int U64; //!< 64-bit unsigned integer. +typedef float F32; //!< 32-bit floating-point number. +typedef double F64; //!< 64-bit floating-point number. +//! @} + + +/*! \name Status Types + */ +//! @{ +typedef Bool Status_bool_t; //!< Boolean status. +typedef U8 Status_t; //!< 8-bit-coded status. +//! @} + + +/*! \name Aliasing Aggregate Types + */ +//! @{ + +//! 16-bit union. +typedef union +{ + S16 s16 ; + U16 u16 ; + S8 s8 [2]; + U8 u8 [2]; +} Union16; + +//! 32-bit union. +typedef union +{ + S32 s32 ; + U32 u32 ; + S16 s16[2]; + U16 u16[2]; + S8 s8 [4]; + U8 u8 [4]; +} Union32; + +//! 64-bit union. +typedef union +{ + S64 s64 ; + U64 u64 ; + S32 s32[2]; + U32 u32[2]; + S16 s16[4]; + U16 u16[4]; + S8 s8 [8]; + U8 u8 [8]; +} Union64; + +//! Union of pointers to 64-, 32-, 16- and 8-bit unsigned integers. +typedef union +{ + S64 *s64ptr; + U64 *u64ptr; + S32 *s32ptr; + U32 *u32ptr; + S16 *s16ptr; + U16 *u16ptr; + S8 *s8ptr ; + U8 *u8ptr ; +} UnionPtr; + +//! Union of pointers to volatile 64-, 32-, 16- and 8-bit unsigned integers. +typedef union +{ + volatile S64 *s64ptr; + volatile U64 *u64ptr; + volatile S32 *s32ptr; + volatile U32 *u32ptr; + volatile S16 *s16ptr; + volatile U16 *u16ptr; + volatile S8 *s8ptr ; + volatile U8 *u8ptr ; +} UnionVPtr; + +//! Union of pointers to constant 64-, 32-, 16- and 8-bit unsigned integers. +typedef union +{ + const S64 *s64ptr; + const U64 *u64ptr; + const S32 *s32ptr; + const U32 *u32ptr; + const S16 *s16ptr; + const U16 *u16ptr; + const S8 *s8ptr ; + const U8 *u8ptr ; +} UnionCPtr; + +//! Union of pointers to constant volatile 64-, 32-, 16- and 8-bit unsigned integers. +typedef union +{ + const volatile S64 *s64ptr; + const volatile U64 *u64ptr; + const volatile S32 *s32ptr; + const volatile U32 *u32ptr; + const volatile S16 *s16ptr; + const volatile U16 *u16ptr; + const volatile S8 *s8ptr ; + const volatile U8 *u8ptr ; +} UnionCVPtr; + +//! Structure of pointers to 64-, 32-, 16- and 8-bit unsigned integers. +typedef struct +{ + S64 *s64ptr; + U64 *u64ptr; + S32 *s32ptr; + U32 *u32ptr; + S16 *s16ptr; + U16 *u16ptr; + S8 *s8ptr ; + U8 *u8ptr ; +} StructPtr; + +//! Structure of pointers to volatile 64-, 32-, 16- and 8-bit unsigned integers. +typedef struct +{ + volatile S64 *s64ptr; + volatile U64 *u64ptr; + volatile S32 *s32ptr; + volatile U32 *u32ptr; + volatile S16 *s16ptr; + volatile U16 *u16ptr; + volatile S8 *s8ptr ; + volatile U8 *u8ptr ; +} StructVPtr; + +//! Structure of pointers to constant 64-, 32-, 16- and 8-bit unsigned integers. +typedef struct +{ + const S64 *s64ptr; + const U64 *u64ptr; + const S32 *s32ptr; + const U32 *u32ptr; + const S16 *s16ptr; + const U16 *u16ptr; + const S8 *s8ptr ; + const U8 *u8ptr ; +} StructCPtr; + +//! Structure of pointers to constant volatile 64-, 32-, 16- and 8-bit unsigned integers. +typedef struct +{ + const volatile S64 *s64ptr; + const volatile U64 *u64ptr; + const volatile S32 *s32ptr; + const volatile U32 *u32ptr; + const volatile S16 *s16ptr; + const volatile U16 *u16ptr; + const volatile S8 *s8ptr ; + const volatile U8 *u8ptr ; +} StructCVPtr; + +//! @} + +#endif // __AVR32_ABI_COMPILER__ + + +//_____ M A C R O S ________________________________________________________ + +/*! \name Usual Constants + */ +//! @{ +#define DISABLE 0 +#define ENABLE 1 +#define DISABLED 0 +#define ENABLED 1 +#define OFF 0 +#define ON 1 +#define FALSE 0 +#define TRUE 1 +#ifndef __cplusplus +#if !defined(__bool_true_false_are_defined) +#define false FALSE +#define true TRUE +#endif +#endif +#define KO 0 +#define OK 1 +#define PASS 0 +#define FAIL 1 +#define LOW 0 +#define HIGH 1 +#define CLR 0 +#define SET 1 +//! @} + + +#ifdef __AVR32_ABI_COMPILER__ // Automatically defined when compiling for AVR32, not when assembling. + +/*! \name Bit-Field Handling + */ +//! @{ + +/*! \brief Reads the bits of a value specified by a given bit-mask. + * + * \param value Value to read bits from. + * \param mask Bit-mask indicating bits to read. + * + * \return Read bits. + */ +#define Rd_bits( value, mask) ((value) & (mask)) + +/*! \brief Writes the bits of a C lvalue specified by a given bit-mask. + * + * \param lvalue C lvalue to write bits to. + * \param mask Bit-mask indicating bits to write. + * \param bits Bits to write. + * + * \return Resulting value with written bits. + */ +#define Wr_bits(lvalue, mask, bits) ((lvalue) = ((lvalue) & ~(mask)) |\ + ((bits ) & (mask))) + +/*! \brief Tests the bits of a value specified by a given bit-mask. + * + * \param value Value of which to test bits. + * \param mask Bit-mask indicating bits to test. + * + * \return \c 1 if at least one of the tested bits is set, else \c 0. + */ +#define Tst_bits( value, mask) (Rd_bits(value, mask) != 0) + +/*! \brief Clears the bits of a C lvalue specified by a given bit-mask. + * + * \param lvalue C lvalue of which to clear bits. + * \param mask Bit-mask indicating bits to clear. + * + * \return Resulting value with cleared bits. + */ +#define Clr_bits(lvalue, mask) ((lvalue) &= ~(mask)) + +/*! \brief Sets the bits of a C lvalue specified by a given bit-mask. + * + * \param lvalue C lvalue of which to set bits. + * \param mask Bit-mask indicating bits to set. + * + * \return Resulting value with set bits. + */ +#define Set_bits(lvalue, mask) ((lvalue) |= (mask)) + +/*! \brief Toggles the bits of a C lvalue specified by a given bit-mask. + * + * \param lvalue C lvalue of which to toggle bits. + * \param mask Bit-mask indicating bits to toggle. + * + * \return Resulting value with toggled bits. + */ +#define Tgl_bits(lvalue, mask) ((lvalue) ^= (mask)) + +/*! \brief Reads the bit-field of a value specified by a given bit-mask. + * + * \param value Value to read a bit-field from. + * \param mask Bit-mask indicating the bit-field to read. + * + * \return Read bit-field. + */ +#define Rd_bitfield( value, mask) (Rd_bits( value, mask) >> ctz(mask)) + +/*! \brief Writes the bit-field of a C lvalue specified by a given bit-mask. + * + * \param lvalue C lvalue to write a bit-field to. + * \param mask Bit-mask indicating the bit-field to write. + * \param bitfield Bit-field to write. + * + * \return Resulting value with written bit-field. + */ +#define Wr_bitfield(lvalue, mask, bitfield) (Wr_bits(lvalue, mask, (U32)(bitfield) << ctz(mask))) + +//! @} + + +/*! \brief This macro is used to test fatal errors. + * + * The macro tests if the expression is FALSE. If it is, a fatal error is + * detected and the application hangs up. + * + * \param expr Expression to evaluate and supposed to be nonzero. + */ +#ifdef _ASSERT_ENABLE_ + #define Assert(expr) \ + {\ + if (!(expr)) while (TRUE);\ + } +#else + #define Assert(expr) +#endif + + +/*! \name Zero-Bit Counting + * + * Under AVR32-GCC, __builtin_clz and __builtin_ctz behave like macros when + * applied to constant expressions (values known at compile time), so they are + * more optimized than the use of the corresponding assembly instructions and + * they can be used as constant expressions e.g. to initialize objects having + * static storage duration, and like the corresponding assembly instructions + * when applied to non-constant expressions (values unknown at compile time), so + * they are more optimized than an assembly periphrasis. Hence, clz and ctz + * ensure a possible and optimized behavior for both constant and non-constant + * expressions. + */ +//! @{ + +/*! \brief Counts the leading zero bits of the given value considered as a 32-bit integer. + * + * \param u Value of which to count the leading zero bits. + * + * \return The count of leading zero bits in \a u. + */ +#if (defined __GNUC__) + #define clz(u) __builtin_clz(u) +#elif (defined __ICCAVR32__) + #define clz(u) __count_leading_zeros(u) +#endif + +/*! \brief Counts the trailing zero bits of the given value considered as a 32-bit integer. + * + * \param u Value of which to count the trailing zero bits. + * + * \return The count of trailing zero bits in \a u. + */ +#if (defined __GNUC__) + #define ctz(u) __builtin_ctz(u) +#elif (defined __ICCAVR32__) + #define ctz(u) __count_trailing_zeros(u) +#endif + +//! @} + + +/*! \name Bit Reversing + */ +//! @{ + +/*! \brief Reverses the bits of \a u8. + * + * \param u8 U8 of which to reverse the bits. + * + * \return Value resulting from \a u8 with reversed bits. + */ +#define bit_reverse8(u8) ((U8)(bit_reverse32((U8)(u8)) >> 24)) + +/*! \brief Reverses the bits of \a u16. + * + * \param u16 U16 of which to reverse the bits. + * + * \return Value resulting from \a u16 with reversed bits. + */ +#define bit_reverse16(u16) ((U16)(bit_reverse32((U16)(u16)) >> 16)) + +/*! \brief Reverses the bits of \a u32. + * + * \param u32 U32 of which to reverse the bits. + * + * \return Value resulting from \a u32 with reversed bits. + */ +#if (defined __GNUC__) + #define bit_reverse32(u32) \ + (\ + {\ + unsigned int __value = (U32)(u32);\ + __asm__ ("brev\t%0" : "+r" (__value) : : "cc");\ + (U32)__value;\ + }\ + ) +#elif (defined __ICCAVR32__) + #define bit_reverse32(u32) ((U32)__bit_reverse((U32)(u32))) +#endif + +/*! \brief Reverses the bits of \a u64. + * + * \param u64 U64 of which to reverse the bits. + * + * \return Value resulting from \a u64 with reversed bits. + */ +#define bit_reverse64(u64) ((U64)(((U64)bit_reverse32((U64)(u64) >> 32)) |\ + ((U64)bit_reverse32((U64)(u64)) << 32))) + +//! @} + + +/*! \name Alignment + */ +//! @{ + +/*! \brief Tests alignment of the number \a val with the \a n boundary. + * + * \param val Input value. + * \param n Boundary. + * + * \return \c 1 if the number \a val is aligned with the \a n boundary, else \c 0. + */ +#define Test_align(val, n ) (!Tst_bits( val, (n) - 1 ) ) + +/*! \brief Gets alignment of the number \a val with respect to the \a n boundary. + * + * \param val Input value. + * \param n Boundary. + * + * \return Alignment of the number \a val with respect to the \a n boundary. + */ +#define Get_align( val, n ) ( Rd_bits( val, (n) - 1 ) ) + +/*! \brief Sets alignment of the lvalue number \a lval to \a alg with respect to the \a n boundary. + * + * \param lval Input/output lvalue. + * \param n Boundary. + * \param alg Alignment. + * + * \return New value of \a lval resulting from its alignment set to \a alg with respect to the \a n boundary. + */ +#define Set_align(lval, n, alg) ( Wr_bits(lval, (n) - 1, alg) ) + +/*! \brief Aligns the number \a val with the upper \a n boundary. + * + * \param val Input value. + * \param n Boundary. + * + * \return Value resulting from the number \a val aligned with the upper \a n boundary. + */ +#define Align_up( val, n ) (((val) + ((n) - 1)) & ~((n) - 1)) + +/*! \brief Aligns the number \a val with the lower \a n boundary. + * + * \param val Input value. + * \param n Boundary. + * + * \return Value resulting from the number \a val aligned with the lower \a n boundary. + */ +#define Align_down(val, n ) ( (val) & ~((n) - 1)) + +//! @} + + +/*! \name Mathematics + * + * The same considerations as for clz and ctz apply here but AVR32-GCC does not + * provide built-in functions to access the assembly instructions abs, min and + * max and it does not produce them by itself in most cases, so two sets of + * macros are defined here: + * - Abs, Min and Max to apply to constant expressions (values known at + * compile time); + * - abs, min and max to apply to non-constant expressions (values unknown at + * compile time). + */ +//! @{ + +/*! \brief Takes the absolute value of \a a. + * + * \param a Input value. + * + * \return Absolute value of \a a. + * + * \note More optimized if only used with values known at compile time. + */ +#define Abs(a) (((a) < 0 ) ? -(a) : (a)) + +/*! \brief Takes the minimal value of \a a and \a b. + * + * \param a Input value. + * \param b Input value. + * + * \return Minimal value of \a a and \a b. + * + * \note More optimized if only used with values known at compile time. + */ +#define Min(a, b) (((a) < (b)) ? (a) : (b)) + +/*! \brief Takes the maximal value of \a a and \a b. + * + * \param a Input value. + * \param b Input value. + * + * \return Maximal value of \a a and \a b. + * + * \note More optimized if only used with values known at compile time. + */ +#define Max(a, b) (((a) > (b)) ? (a) : (b)) + +/*! \brief Takes the absolute value of \a a. + * + * \param a Input value. + * + * \return Absolute value of \a a. + * + * \note More optimized if only used with values unknown at compile time. + */ +#if (defined __GNUC__) + #define abs(a) \ + (\ + {\ + int __value = (a);\ + __asm__ ("abs\t%0" : "+r" (__value) : : "cc");\ + __value;\ + }\ + ) +#elif (defined __ICCAVR32__) + #define abs(a) Abs(a) +#endif + +/*! \brief Takes the minimal value of \a a and \a b. + * + * \param a Input value. + * \param b Input value. + * + * \return Minimal value of \a a and \a b. + * + * \note More optimized if only used with values unknown at compile time. + */ +#if (defined __GNUC__) + #define min(a, b) \ + (\ + {\ + int __value, __arg_a = (a), __arg_b = (b);\ + __asm__ ("min\t%0, %1, %2" : "=r" (__value) : "r" (__arg_a), "r" (__arg_b));\ + __value;\ + }\ + ) +#elif (defined __ICCAVR32__) + #define min(a, b) __min(a, b) +#endif + +/*! \brief Takes the maximal value of \a a and \a b. + * + * \param a Input value. + * \param b Input value. + * + * \return Maximal value of \a a and \a b. + * + * \note More optimized if only used with values unknown at compile time. + */ +#if (defined __GNUC__) + #define max(a, b) \ + (\ + {\ + int __value, __arg_a = (a), __arg_b = (b);\ + __asm__ ("max\t%0, %1, %2" : "=r" (__value) : "r" (__arg_a), "r" (__arg_b));\ + __value;\ + }\ + ) +#elif (defined __ICCAVR32__) + #define max(a, b) __max(a, b) +#endif + +//! @} + + +/*! \brief Calls the routine at address \a addr. + * + * It generates a long call opcode. + * + * For example, `Long_call(0x80000000)' generates a software reset on a UC3 if + * it is invoked from the CPU supervisor mode. + * + * \param addr Address of the routine to call. + * + * \note It may be used as a long jump opcode in some special cases. + */ +#define Long_call(addr) ((*(void (*)(void))(addr))()) + +/*! \brief Resets the CPU by software. + * + * \warning It shall not be called from the CPU application mode. + */ +#if (defined __GNUC__) + #define Reset_CPU() \ + (\ + {\ + __asm__ __volatile__ (\ + "lddpc r9, 3f\n\t"\ + "mfsr r8, %[SR]\n\t"\ + "bfextu r8, r8, %[SR_M_OFFSET], %[SR_M_SIZE]\n\t"\ + "cp.w r8, 0b001\n\t"\ + "breq 0f\n\t"\ + "sub r8, pc, $ - 1f\n\t"\ + "pushm r8-r9\n\t"\ + "rete\n"\ + "0:\n\t"\ + "mtsr %[SR], r9\n"\ + "1:\n\t"\ + "mov r0, 0\n\t"\ + "mov r1, 0\n\t"\ + "mov r2, 0\n\t"\ + "mov r3, 0\n\t"\ + "mov r4, 0\n\t"\ + "mov r5, 0\n\t"\ + "mov r6, 0\n\t"\ + "mov r7, 0\n\t"\ + "mov r8, 0\n\t"\ + "mov r9, 0\n\t"\ + "mov r10, 0\n\t"\ + "mov r11, 0\n\t"\ + "mov r12, 0\n\t"\ + "mov sp, 0\n\t"\ + "stdsp sp[0], sp\n\t"\ + "ldmts sp, sp\n\t"\ + "mov lr, 0\n\t"\ + "lddpc pc, 2f\n\t"\ + ".balign 4\n"\ + "2:\n\t"\ + ".word _start\n"\ + "3:\n\t"\ + ".word %[RESET_SR]"\ + :\ + : [SR] "i" (AVR32_SR),\ + [SR_M_OFFSET] "i" (AVR32_SR_M_OFFSET),\ + [SR_M_SIZE] "i" (AVR32_SR_M_SIZE),\ + [RESET_SR] "i" (AVR32_SR_GM_MASK | AVR32_SR_EM_MASK | (AVR32_SR_M_SUP << AVR32_SR_M_OFFSET))\ + );\ + }\ + ) +#elif (defined __ICCAVR32__) + #define Reset_CPU() \ + {\ + extern void *volatile __program_start;\ + __asm__ __volatile__ (\ + "mov r7, LWRD(__program_start)\n\t"\ + "orh r7, HWRD(__program_start)\n\t"\ + "mov r9, LWRD("ASTRINGZ(AVR32_SR_GM_MASK | AVR32_SR_EM_MASK | (AVR32_SR_M_SUP << AVR32_SR_M_OFFSET))")\n\t"\ + "orh r9, HWRD("ASTRINGZ(AVR32_SR_GM_MASK | AVR32_SR_EM_MASK | (AVR32_SR_M_SUP << AVR32_SR_M_OFFSET))")\n\t"\ + "mfsr r8, "ASTRINGZ(AVR32_SR)"\n\t"\ + "bfextu r8, r8, "ASTRINGZ(AVR32_SR_M_OFFSET)", "ASTRINGZ(AVR32_SR_M_SIZE)"\n\t"\ + "cp.w r8, 001b\n\t"\ + "breq $ + 10\n\t"\ + "sub r8, pc, -12\n\t"\ + "pushm r8-r9\n\t"\ + "rete\n\t"\ + "mtsr "ASTRINGZ(AVR32_SR)", r9\n\t"\ + "mov r0, 0\n\t"\ + "mov r1, 0\n\t"\ + "mov r2, 0\n\t"\ + "mov r3, 0\n\t"\ + "mov r4, 0\n\t"\ + "mov r5, 0\n\t"\ + "mov r6, 0\n\t"\ + "st.w r0[4], r7\n\t"\ + "mov r7, 0\n\t"\ + "mov r8, 0\n\t"\ + "mov r9, 0\n\t"\ + "mov r10, 0\n\t"\ + "mov r11, 0\n\t"\ + "mov r12, 0\n\t"\ + "mov sp, 0\n\t"\ + "stdsp sp[0], sp\n\t"\ + "ldmts sp, sp\n\t"\ + "mov lr, 0\n\t"\ + "ld.w pc, lr[4]"\ + );\ + __program_start;\ + } +#endif + + +/*! \name System Register Access + */ +//! @{ + +/*! \brief Gets the value of the \a sysreg system register. + * + * \param sysreg Address of the system register of which to get the value. + * + * \return Value of the \a sysreg system register. + */ +#if (defined __GNUC__) + #define Get_system_register(sysreg) __builtin_mfsr(sysreg) +#elif (defined __ICCAVR32__) + #define Get_system_register(sysreg) __get_system_register(sysreg) +#endif + +/*! \brief Sets the value of the \a sysreg system register to \a value. + * + * \param sysreg Address of the system register of which to set the value. + * \param value Value to set the \a sysreg system register to. + */ +#if (defined __GNUC__) + #define Set_system_register(sysreg, value) __builtin_mtsr(sysreg, value) +#elif (defined __ICCAVR32__) + #define Set_system_register(sysreg, value) __set_system_register(sysreg, value) +#endif + +//! @} + + +/*! \name CPU Status Register Access + */ +//! @{ + +/*! \brief Tells whether exceptions are globally enabled. + * + * \return \c 1 if exceptions are globally enabled, else \c 0. + */ +#define Is_global_exception_enabled() (!Tst_bits(Get_system_register(AVR32_SR), AVR32_SR_EM_MASK)) + +/*! \brief Disables exceptions globally. + */ +#if (defined __GNUC__) + #define Disable_global_exception() ({__asm__ __volatile__ ("ssrf\t%0" : : "i" (AVR32_SR_EM_OFFSET));}) +#elif (defined __ICCAVR32__) + #define Disable_global_exception() (__set_status_flag(AVR32_SR_EM_OFFSET)) +#endif + +/*! \brief Enables exceptions globally. + */ +#if (defined __GNUC__) + #define Enable_global_exception() ({__asm__ __volatile__ ("csrf\t%0" : : "i" (AVR32_SR_EM_OFFSET));}) +#elif (defined __ICCAVR32__) + #define Enable_global_exception() (__clear_status_flag(AVR32_SR_EM_OFFSET)) +#endif + +/*! \brief Tells whether interrupts are globally enabled. + * + * \return \c 1 if interrupts are globally enabled, else \c 0. + */ +#define Is_global_interrupt_enabled() (!Tst_bits(Get_system_register(AVR32_SR), AVR32_SR_GM_MASK)) + +/*! \brief Disables interrupts globally. + */ +#if (defined __GNUC__) + #define Disable_global_interrupt() ({__asm__ __volatile__ ("ssrf\t%0" : : "i" (AVR32_SR_GM_OFFSET));}) +#elif (defined __ICCAVR32__) + #define Disable_global_interrupt() (__disable_interrupt()) +#endif + +/*! \brief Enables interrupts globally. + */ +#if (defined __GNUC__) + #define Enable_global_interrupt() ({__asm__ __volatile__ ("csrf\t%0" : : "i" (AVR32_SR_GM_OFFSET));}) +#elif (defined __ICCAVR32__) + #define Enable_global_interrupt() (__enable_interrupt()) +#endif + +/*! \brief Tells whether interrupt level \a int_level is enabled. + * + * \param int_level Interrupt level (0 to 3). + * + * \return \c 1 if interrupt level \a int_level is enabled, else \c 0. + */ +#define Is_interrupt_level_enabled(int_level) (!Tst_bits(Get_system_register(AVR32_SR), TPASTE3(AVR32_SR_I, int_level, M_MASK))) + +/*! \brief Disables interrupt level \a int_level. + * + * \param int_level Interrupt level to disable (0 to 3). + */ +#if (defined __GNUC__) + #define Disable_interrupt_level(int_level) ({__asm__ __volatile__ ("ssrf\t%0" : : "i" (TPASTE3(AVR32_SR_I, int_level, M_OFFSET)));}) +#elif (defined __ICCAVR32__) + #define Disable_interrupt_level(int_level) (__set_status_flag(TPASTE3(AVR32_SR_I, int_level, M_OFFSET))) +#endif + +/*! \brief Enables interrupt level \a int_level. + * + * \param int_level Interrupt level to enable (0 to 3). + */ +#if (defined __GNUC__) + #define Enable_interrupt_level(int_level) ({__asm__ __volatile__ ("csrf\t%0" : : "i" (TPASTE3(AVR32_SR_I, int_level, M_OFFSET)));}) +#elif (defined __ICCAVR32__) + #define Enable_interrupt_level(int_level) (__clear_status_flag(TPASTE3(AVR32_SR_I, int_level, M_OFFSET))) +#endif + +/*! \brief Protects subsequent code from interrupts. + */ +#define AVR32_ENTER_CRITICAL_REGION( ) \ + { \ + Bool global_interrupt_enabled = Is_global_interrupt_enabled(); \ + Disable_global_interrupt(); // Disable the appropriate interrupts. + +/*! \brief This macro must always be used in conjunction with AVR32_ENTER_CRITICAL_REGION + * so that interrupts are enabled again. + */ +#define AVR32_LEAVE_CRITICAL_REGION( ) \ + if (global_interrupt_enabled) Enable_global_interrupt(); \ + } + +//! @} + + +/*! \name Debug Register Access + */ +//! @{ + +/*! \brief Gets the value of the \a dbgreg debug register. + * + * \param dbgreg Address of the debug register of which to get the value. + * + * \return Value of the \a dbgreg debug register. + */ +#if (defined __GNUC__) + #define Get_debug_register(dbgreg) __builtin_mfdr(dbgreg) +#elif (defined __ICCAVR32__) + #define Get_debug_register(dbgreg) __get_debug_register(dbgreg) +#endif + +/*! \brief Sets the value of the \a dbgreg debug register to \a value. + * + * \param dbgreg Address of the debug register of which to set the value. + * \param value Value to set the \a dbgreg debug register to. + */ +#if (defined __GNUC__) + #define Set_debug_register(dbgreg, value) __builtin_mtdr(dbgreg, value) +#elif (defined __ICCAVR32__) + #define Set_debug_register(dbgreg, value) __set_debug_register(dbgreg, value) +#endif + +//! @} + +#endif // __AVR32_ABI_COMPILER__ + + +//! Boolean evaluating MCU little endianism. +#if ((defined __GNUC__) && (defined __AVR32__)) || ((defined __ICCAVR32__) || (defined __AAVR32__)) + #define LITTLE_ENDIAN_MCU FALSE +#else + #error If you are here, you should check what is exactly the processor you are using... + #define LITTLE_ENDIAN_MCU FALSE +#endif + +// Check that MCU endianism is correctly defined. +#ifndef LITTLE_ENDIAN_MCU + #error YOU MUST define the MCU endianism with LITTLE_ENDIAN_MCU: either FALSE or TRUE +#endif + +//! Boolean evaluating MCU big endianism. +#define BIG_ENDIAN_MCU (!LITTLE_ENDIAN_MCU) + + +#ifdef __AVR32_ABI_COMPILER__ // Automatically defined when compiling for AVR32, not when assembling. + +/*! \name MCU Endianism Handling + */ +//! @{ + +#if (LITTLE_ENDIAN_MCU==TRUE) + #define LSB(u16) (((U8 *)&(u16))[0]) //!< Least significant byte of \a u16. + #define MSB(u16) (((U8 *)&(u16))[1]) //!< Most significant byte of \a u16. + + #define LSH(u32) (((U16 *)&(u32))[0]) //!< Least significant half-word of \a u32. + #define MSH(u32) (((U16 *)&(u32))[1]) //!< Most significant half-word of \a u32. + #define LSB0W(u32) (((U8 *)&(u32))[0]) //!< Least significant byte of 1st rank of \a u32. + #define LSB1W(u32) (((U8 *)&(u32))[1]) //!< Least significant byte of 2nd rank of \a u32. + #define LSB2W(u32) (((U8 *)&(u32))[2]) //!< Least significant byte of 3rd rank of \a u32. + #define LSB3W(u32) (((U8 *)&(u32))[3]) //!< Least significant byte of 4th rank of \a u32. + #define MSB3W(u32) LSB0W(u32) //!< Most significant byte of 4th rank of \a u32. + #define MSB2W(u32) LSB1W(u32) //!< Most significant byte of 3rd rank of \a u32. + #define MSB1W(u32) LSB2W(u32) //!< Most significant byte of 2nd rank of \a u32. + #define MSB0W(u32) LSB3W(u32) //!< Most significant byte of 1st rank of \a u32. + + #define LSW(u64) (((U32 *)&(u64))[0]) //!< Least significant word of \a u64. + #define MSW(u64) (((U32 *)&(u64))[1]) //!< Most significant word of \a u64. + #define LSH0(u64) (((U16 *)&(u64))[0]) //!< Least significant half-word of 1st rank of \a u64. + #define LSH1(u64) (((U16 *)&(u64))[1]) //!< Least significant half-word of 2nd rank of \a u64. + #define LSH2(u64) (((U16 *)&(u64))[2]) //!< Least significant half-word of 3rd rank of \a u64. + #define LSH3(u64) (((U16 *)&(u64))[3]) //!< Least significant half-word of 4th rank of \a u64. + #define MSH3(u64) LSH0(u64) //!< Most significant half-word of 4th rank of \a u64. + #define MSH2(u64) LSH1(u64) //!< Most significant half-word of 3rd rank of \a u64. + #define MSH1(u64) LSH2(u64) //!< Most significant half-word of 2nd rank of \a u64. + #define MSH0(u64) LSH3(u64) //!< Most significant half-word of 1st rank of \a u64. + #define LSB0D(u64) (((U8 *)&(u64))[0]) //!< Least significant byte of 1st rank of \a u64. + #define LSB1D(u64) (((U8 *)&(u64))[1]) //!< Least significant byte of 2nd rank of \a u64. + #define LSB2D(u64) (((U8 *)&(u64))[2]) //!< Least significant byte of 3rd rank of \a u64. + #define LSB3D(u64) (((U8 *)&(u64))[3]) //!< Least significant byte of 4th rank of \a u64. + #define LSB4D(u64) (((U8 *)&(u64))[4]) //!< Least significant byte of 5th rank of \a u64. + #define LSB5D(u64) (((U8 *)&(u64))[5]) //!< Least significant byte of 6th rank of \a u64. + #define LSB6D(u64) (((U8 *)&(u64))[6]) //!< Least significant byte of 7th rank of \a u64. + #define LSB7D(u64) (((U8 *)&(u64))[7]) //!< Least significant byte of 8th rank of \a u64. + #define MSB7D(u64) LSB0D(u64) //!< Most significant byte of 8th rank of \a u64. + #define MSB6D(u64) LSB1D(u64) //!< Most significant byte of 7th rank of \a u64. + #define MSB5D(u64) LSB2D(u64) //!< Most significant byte of 6th rank of \a u64. + #define MSB4D(u64) LSB3D(u64) //!< Most significant byte of 5th rank of \a u64. + #define MSB3D(u64) LSB4D(u64) //!< Most significant byte of 4th rank of \a u64. + #define MSB2D(u64) LSB5D(u64) //!< Most significant byte of 3rd rank of \a u64. + #define MSB1D(u64) LSB6D(u64) //!< Most significant byte of 2nd rank of \a u64. + #define MSB0D(u64) LSB7D(u64) //!< Most significant byte of 1st rank of \a u64. + +#elif (BIG_ENDIAN_MCU==TRUE) + #define MSB(u16) (((U8 *)&(u16))[0]) //!< Most significant byte of \a u16. + #define LSB(u16) (((U8 *)&(u16))[1]) //!< Least significant byte of \a u16. + + #define MSH(u32) (((U16 *)&(u32))[0]) //!< Most significant half-word of \a u32. + #define LSH(u32) (((U16 *)&(u32))[1]) //!< Least significant half-word of \a u32. + #define MSB0W(u32) (((U8 *)&(u32))[0]) //!< Most significant byte of 1st rank of \a u32. + #define MSB1W(u32) (((U8 *)&(u32))[1]) //!< Most significant byte of 2nd rank of \a u32. + #define MSB2W(u32) (((U8 *)&(u32))[2]) //!< Most significant byte of 3rd rank of \a u32. + #define MSB3W(u32) (((U8 *)&(u32))[3]) //!< Most significant byte of 4th rank of \a u32. + #define LSB3W(u32) MSB0W(u32) //!< Least significant byte of 4th rank of \a u32. + #define LSB2W(u32) MSB1W(u32) //!< Least significant byte of 3rd rank of \a u32. + #define LSB1W(u32) MSB2W(u32) //!< Least significant byte of 2nd rank of \a u32. + #define LSB0W(u32) MSB3W(u32) //!< Least significant byte of 1st rank of \a u32. + + #define MSW(u64) (((U32 *)&(u64))[0]) //!< Most significant word of \a u64. + #define LSW(u64) (((U32 *)&(u64))[1]) //!< Least significant word of \a u64. + #define MSH0(u64) (((U16 *)&(u64))[0]) //!< Most significant half-word of 1st rank of \a u64. + #define MSH1(u64) (((U16 *)&(u64))[1]) //!< Most significant half-word of 2nd rank of \a u64. + #define MSH2(u64) (((U16 *)&(u64))[2]) //!< Most significant half-word of 3rd rank of \a u64. + #define MSH3(u64) (((U16 *)&(u64))[3]) //!< Most significant half-word of 4th rank of \a u64. + #define LSH3(u64) MSH0(u64) //!< Least significant half-word of 4th rank of \a u64. + #define LSH2(u64) MSH1(u64) //!< Least significant half-word of 3rd rank of \a u64. + #define LSH1(u64) MSH2(u64) //!< Least significant half-word of 2nd rank of \a u64. + #define LSH0(u64) MSH3(u64) //!< Least significant half-word of 1st rank of \a u64. + #define MSB0D(u64) (((U8 *)&(u64))[0]) //!< Most significant byte of 1st rank of \a u64. + #define MSB1D(u64) (((U8 *)&(u64))[1]) //!< Most significant byte of 2nd rank of \a u64. + #define MSB2D(u64) (((U8 *)&(u64))[2]) //!< Most significant byte of 3rd rank of \a u64. + #define MSB3D(u64) (((U8 *)&(u64))[3]) //!< Most significant byte of 4th rank of \a u64. + #define MSB4D(u64) (((U8 *)&(u64))[4]) //!< Most significant byte of 5th rank of \a u64. + #define MSB5D(u64) (((U8 *)&(u64))[5]) //!< Most significant byte of 6th rank of \a u64. + #define MSB6D(u64) (((U8 *)&(u64))[6]) //!< Most significant byte of 7th rank of \a u64. + #define MSB7D(u64) (((U8 *)&(u64))[7]) //!< Most significant byte of 8th rank of \a u64. + #define LSB7D(u64) MSB0D(u64) //!< Least significant byte of 8th rank of \a u64. + #define LSB6D(u64) MSB1D(u64) //!< Least significant byte of 7th rank of \a u64. + #define LSB5D(u64) MSB2D(u64) //!< Least significant byte of 6th rank of \a u64. + #define LSB4D(u64) MSB3D(u64) //!< Least significant byte of 5th rank of \a u64. + #define LSB3D(u64) MSB4D(u64) //!< Least significant byte of 4th rank of \a u64. + #define LSB2D(u64) MSB5D(u64) //!< Least significant byte of 3rd rank of \a u64. + #define LSB1D(u64) MSB6D(u64) //!< Least significant byte of 2nd rank of \a u64. + #define LSB0D(u64) MSB7D(u64) //!< Least significant byte of 1st rank of \a u64. + +#else + #error Unknown endianism. +#endif + +//! @} + + +/*! \name Endianism Conversion + * + * The same considerations as for clz and ctz apply here but AVR32-GCC's + * __builtin_bswap_16 and __builtin_bswap_32 do not behave like macros when + * applied to constant expressions, so two sets of macros are defined here: + * - Swap16, Swap32 and Swap64 to apply to constant expressions (values known + * at compile time); + * - swap16, swap32 and swap64 to apply to non-constant expressions (values + * unknown at compile time). + */ +//! @{ + +/*! \brief Toggles the endianism of \a u16 (by swapping its bytes). + * + * \param u16 U16 of which to toggle the endianism. + * + * \return Value resulting from \a u16 with toggled endianism. + * + * \note More optimized if only used with values known at compile time. + */ +#define Swap16(u16) ((U16)(((U16)(u16) >> 8) |\ + ((U16)(u16) << 8))) + +/*! \brief Toggles the endianism of \a u32 (by swapping its bytes). + * + * \param u32 U32 of which to toggle the endianism. + * + * \return Value resulting from \a u32 with toggled endianism. + * + * \note More optimized if only used with values known at compile time. + */ +#define Swap32(u32) ((U32)(((U32)Swap16((U32)(u32) >> 16)) |\ + ((U32)Swap16((U32)(u32)) << 16))) + +/*! \brief Toggles the endianism of \a u64 (by swapping its bytes). + * + * \param u64 U64 of which to toggle the endianism. + * + * \return Value resulting from \a u64 with toggled endianism. + * + * \note More optimized if only used with values known at compile time. + */ +#define Swap64(u64) ((U64)(((U64)Swap32((U64)(u64) >> 32)) |\ + ((U64)Swap32((U64)(u64)) << 32))) + +/*! \brief Toggles the endianism of \a u16 (by swapping its bytes). + * + * \param u16 U16 of which to toggle the endianism. + * + * \return Value resulting from \a u16 with toggled endianism. + * + * \note More optimized if only used with values unknown at compile time. + */ +#if (defined __GNUC__) + #define swap16(u16) ((U16)__builtin_bswap_16((U16)(u16))) +#elif (defined __ICCAVR32__) + #define swap16(u16) ((U16)__swap_bytes_in_halfwords((U16)(u16))) +#endif + +/*! \brief Toggles the endianism of \a u32 (by swapping its bytes). + * + * \param u32 U32 of which to toggle the endianism. + * + * \return Value resulting from \a u32 with toggled endianism. + * + * \note More optimized if only used with values unknown at compile time. + */ +#if (defined __GNUC__) + #define swap32(u32) ((U32)__builtin_bswap_32((U32)(u32))) +#elif (defined __ICCAVR32__) + #define swap32(u32) ((U32)__swap_bytes((U32)(u32))) +#endif + +/*! \brief Toggles the endianism of \a u64 (by swapping its bytes). + * + * \param u64 U64 of which to toggle the endianism. + * + * \return Value resulting from \a u64 with toggled endianism. + * + * \note More optimized if only used with values unknown at compile time. + */ +#define swap64(u64) ((U64)(((U64)swap32((U64)(u64) >> 32)) |\ + ((U64)swap32((U64)(u64)) << 32))) + +//! @} + + +/*! \name Target Abstraction + */ +//! @{ + +#define _GLOBEXT_ extern //!< extern storage-class specifier. +#define _CONST_TYPE_ const //!< const type qualifier. +#define _MEM_TYPE_SLOW_ //!< Slow memory type. +#define _MEM_TYPE_MEDFAST_ //!< Fairly fast memory type. +#define _MEM_TYPE_FAST_ //!< Fast memory type. + +typedef U8 Byte; //!< 8-bit unsigned integer. + +#define memcmp_ram2ram memcmp //!< Target-specific memcmp of RAM to RAM. +#define memcmp_code2ram memcmp //!< Target-specific memcmp of RAM to NVRAM. +#define memcpy_ram2ram memcpy //!< Target-specific memcpy from RAM to RAM. +#define memcpy_code2ram memcpy //!< Target-specific memcpy from NVRAM to RAM. + +#define LSB0(u32) LSB0W(u32) //!< Least significant byte of 1st rank of \a u32. +#define LSB1(u32) LSB1W(u32) //!< Least significant byte of 2nd rank of \a u32. +#define LSB2(u32) LSB2W(u32) //!< Least significant byte of 3rd rank of \a u32. +#define LSB3(u32) LSB3W(u32) //!< Least significant byte of 4th rank of \a u32. +#define MSB3(u32) MSB3W(u32) //!< Most significant byte of 4th rank of \a u32. +#define MSB2(u32) MSB2W(u32) //!< Most significant byte of 3rd rank of \a u32. +#define MSB1(u32) MSB1W(u32) //!< Most significant byte of 2nd rank of \a u32. +#define MSB0(u32) MSB0W(u32) //!< Most significant byte of 1st rank of \a u32. + +//! @} + +#endif // __AVR32_ABI_COMPILER__ + + +#endif // _COMPILER_H_ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/conf_isp.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/conf_isp.h new file mode 100644 index 000000000..ca516ee00 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/conf_isp.h @@ -0,0 +1,136 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ****************************************************************** + * + * \brief ISP configuration file. + * + * This file contains the possible external configuration of the ISP. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with a USB module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ***************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _CONF_ISP_H_ +#define _CONF_ISP_H_ + +#include +#include "compiler.h" + + +//_____ D E F I N I T I O N S ______________________________________________ + +#define PRODUCT_MANUFACTURER_ID 0x58 +#define PRODUCT_FAMILY_ID 0x20 + +#define ISP_VERSION 0x10 +#define ISP_ID0 0x00 +#define ISP_ID1 0x00 + +#define ISP_CFG1 (*(volatile U32 *)ISP_CFG1_ADDRESS) +#define ISP_CFG1_ADDRESS (AVR32_FLASHC_USER_PAGE_ADDRESS + ISP_CFG1_OFFSET) +#define ISP_CFG1_OFFSET 0x000001FC +#define ISP_CFG1_SIZE 4 + +#define ISP_CFG1_BOOT_KEY1 16 +#define ISP_CFG1_BOOT_KEY1_MASK 0xFFFF0000 +#define ISP_CFG1_BOOT_KEY1_OFFSET 16 +#define ISP_CFG1_BOOT_KEY1_SIZE 16 +#define ISP_CFG1_BOOT_KEY1_VALUE 0xE11E + +#define ISP_CFG1_FORCE 9 +#define ISP_CFG1_FORCE_MASK 0x00000200 +#define ISP_CFG1_FORCE_OFFSET 9 +#define ISP_CFG1_FORCE_SIZE 1 + +#define ISP_CFG1_IO_COND_EN 8 +#define ISP_CFG1_IO_COND_EN_MASK 0x00000100 +#define ISP_CFG1_IO_COND_EN_OFFSET 8 +#define ISP_CFG1_IO_COND_EN_SIZE 1 + +#define ISP_CFG1_CRC8 0 +#define ISP_CFG1_CRC8_MASK 0x000000FF +#define ISP_CFG1_CRC8_OFFSET 0 +#define ISP_CFG1_CRC8_SIZE 8 +#define ISP_CFG1_CRC8_POLYNOMIAL 0x107 + +#define ISP_CFG2 (*(volatile U32 *)ISP_CFG2_ADDRESS) +#define ISP_CFG2_ADDRESS (AVR32_FLASHC_USER_PAGE_ADDRESS + ISP_CFG2_OFFSET) +#define ISP_CFG2_OFFSET 0x000001F8 +#define ISP_CFG2_SIZE 4 + +#define ISP_CFG2_BOOT_KEY 17 +#define ISP_CFG2_BOOT_KEY_MASK 0xFFFE0000 +#define ISP_CFG2_BOOT_KEY_OFFSET 17 +#define ISP_CFG2_BOOT_KEY_SIZE 15 +#define ISP_CFG2_BOOT_KEY_VALUE 0x494F + +#define ISP_CFG2_IO_COND_LEVEL 16 +#define ISP_CFG2_IO_COND_LEVEL_MASK 0x00010000 +#define ISP_CFG2_IO_COND_LEVEL_OFFSET 16 +#define ISP_CFG2_IO_COND_LEVEL_SIZE 1 + +#define ISP_CFG2_IO_COND_PIN 8 +#define ISP_CFG2_IO_COND_PIN_MASK 0x0000FF00 +#define ISP_CFG2_IO_COND_PIN_OFFSET 8 +#define ISP_CFG2_IO_COND_PIN_SIZE 8 + +#define ISP_CFG2_CRC8 0 +#define ISP_CFG2_CRC8_MASK 0x000000FF +#define ISP_CFG2_CRC8_OFFSET 0 +#define ISP_CFG2_CRC8_SIZE 8 +#define ISP_CFG2_CRC8_POLYNOMIAL 0x107 + +#define ISP_KEY (*(volatile U32 *)ISP_KEY_ADDRESS) +#define ISP_KEY_ADDRESS (AVR32_SRAM_ADDRESS + ISP_KEY_OFFSET) +#define ISP_KEY_OFFSET 0x00000000 +#define ISP_KEY_SIZE 4 +#define ISP_KEY_VALUE ('I' << 24 | 'S' << 16 | 'P' << 8 | 'K') + +#ifndef ISP_OSC + #define ISP_OSC 0 +#endif + +#define DFU_FRAME_LENGTH 2048 + +#define PROGRAM_START_ADDRESS (AVR32_FLASH_ADDRESS + PROGRAM_START_OFFSET) +#define PROGRAM_START_OFFSET 0x00002000 + + +#endif // _CONF_ISP_H_ diff --git a/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/parts.h b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/parts.h new file mode 100644 index 000000000..6637b2f76 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/parts.h @@ -0,0 +1,203 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Arch file for AVR32. + * + * This file defines common AVR32 UC3 series. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _ARCH_H_ +#define _ARCH_H_ + +// UC3 A Series +#define UC3A0 ( defined (__GNUC__) && \ + ( defined (__AVR32_UC3A0128__) || \ + defined (__AVR32_UC3A0256__) || \ + defined (__AVR32_UC3A0512__) || \ + defined (__AVR32_UC3A0512ES__))) \ + ||((defined(__ICCAVR32__) || defined(__AAVR32__)) && \ + ( defined (__AT32UC3A0128__) || \ + defined (__AT32UC3A0256__) || \ + defined (__AT32UC3A0512__) || \ + defined (__AT32UC3A0512ES__))) + +#define UC3A1 ( defined (__GNUC__) && \ + ( defined (__AVR32_UC3A1128__) || \ + defined (__AVR32_UC3A1256__) || \ + defined (__AVR32_UC3A1512__) || \ + defined (__AVR32_UC3A1512ES__))) \ + ||((defined(__ICCAVR32__) || defined(__AAVR32__)) && \ + ( defined (__AT32UC3A1128__) || \ + defined (__AT32UC3A1256__) || \ + defined (__AT32UC3A1512__) || \ + defined (__AT32UC3A1512ES__))) + +#define UC3A3 ( defined (__GNUC__) && \ + ( defined (__AVR32_UC3A364__) || \ + defined (__AVR32_UC3A364S__) || \ + defined (__AVR32_UC3A3128__) || \ + defined (__AVR32_UC3A3128S__) || \ + defined (__AVR32_UC3A3256__) || \ + defined (__AVR32_UC3A3256S__))) \ + ||((defined(__ICCAVR32__) || defined(__AAVR32__)) && \ + ( defined (__AT32UC3A364__) || \ + defined (__AT32UC3A364S__) || \ + defined (__AT32UC3A3128__) || \ + defined (__AT32UC3A3128S__) || \ + defined (__AT32UC3A3256__) || \ + defined (__AT32UC3A3256S__))) + +#define UC3A (UC3A0 || UC3A1 || UC3A3) + +// UC3 B Series +#define UC3B0 ( defined (__GNUC__) && \ + ( defined (__AVR32_UC3B064__) || \ + defined (__AVR32_UC3B0128__) || \ + defined (__AVR32_UC3B0256__) || \ + defined (__AVR32_UC3B0256ES__) || \ + defined (__AVR32_UC3B0512__) || \ + defined (__AVR32_UC3B0512REVC_))) \ + ||((defined(__ICCAVR32__) || defined(__AAVR32__)) && \ + ( defined (__AT32UC3B064__) || \ + defined (__AT32UC3B0128__) || \ + defined (__AT32UC3B0256__) || \ + defined (__AT32UC3B0256ES__) || \ + defined (__AT32UC3B0512__) || \ + defined (__AT32UC3B0512REVC__))) + +#define UC3B1 ( defined (__GNUC__) && \ + ( defined (__AVR32_UC3B164__) || \ + defined (__AVR32_UC3B1128__) || \ + defined (__AVR32_UC3B1256__) || \ + defined (__AVR32_UC3B1256ES__) || \ + defined (__AVR32_UC3B1512__) || \ + defined (__AVR32_UC3B1512ES__))) \ + ||((defined(__ICCAVR32__) || defined(__AAVR32__)) && \ + ( defined (__AT32UC3B164__) || \ + defined (__AT32UC3B1128__) || \ + defined (__AT32UC3B1256__) || \ + defined (__AT32UC3B1256ES__) || \ + defined (__AT32UC3B1512__) || \ + defined (__AT32UC3B1512REVC__))) + +#define UC3B (UC3B0 || UC3B1 ) + +// UC3 C Series +#define UC3C0 ( defined (__GNUC__) && \ + ( defined (__AVR32_UC3C064C__) || \ + defined (__AVR32_UC3C0128C__) || \ + defined (__AVR32_UC3C0256C__) || \ + defined (__AVR32_UC3C0512CREVC__))) \ + ||((defined(__ICCAVR32__) || defined(__AAVR32__)) && \ + ( defined (__AT32UC3C064C__) || \ + defined (__AT32UC3C0128C__) || \ + defined (__AT32UC3C0256C__) || \ + defined (__AT32UC3C0512C__))) + +#define UC3C1 ( defined (__GNUC__) && \ + ( defined (__AVR32_UC3C164C__) || \ + defined (__AVR32_UC3C1128C__) || \ + defined (__AVR32_UC3C1256C__) || \ + defined (__AVR32_UC3C1512CREVC__))) \ + ||((defined(__ICCAVR32__) || defined(__AAVR32__)) && \ + ( defined (__AT32UC3C164C__) || \ + defined (__AT32UC3C1128C__) || \ + defined (__AT32UC3C1256C__) || \ + defined (__AT32UC3C1512C__))) + +#define UC3C2 ( defined (__GNUC__) && \ + ( defined (__AVR32_UC3C264C__) || \ + defined (__AVR32_UC3C2128C__) || \ + defined (__AVR32_UC3C2256C__) || \ + defined (__AVR32_UC3C2512CREVC__))) \ + ||((defined(__ICCAVR32__) || defined(__AAVR32__)) && \ + ( defined (__AT32UC3C264C__) || \ + defined (__AT32UC3C2128C__) || \ + defined (__AT32UC3C2256C__) || \ + defined (__AT32UC3C2512C__))) + +#define UC3C (UC3C0 || UC3C1 || UC3C2) + +// UC3 L Device series +#define UC3L0 ( defined (__GNUC__) && \ + ( defined (__AVR32_UC3L016__) || \ + defined (__AVR32_UC3L032__) || \ + defined (__AVR32_UC3L064__) || \ + defined (__AVR32_UC3L064REVB__))) \ + ||((defined(__ICCAVR32__) || defined(__AAVR32__)) && \ + ( defined (__AT32UC3L016__) || \ + defined (__AT32UC3L032__) || \ + defined (__AT32UC3L064__) || \ + defined (__AT32UC3L064REVB__))) + +#define UC3L1 ( defined (__GNUC__) && \ + ( defined (__AVR32_UC3L116__) || \ + defined (__AVR32_UC3L132__) || \ + defined (__AVR32_UC3L164__))) \ + ||((defined(__ICCAVR32__) || defined(__AAVR32__)) && \ + ( defined (__AT32UC3L116__) || \ + defined (__AT32UC3L132__) || \ + defined (__AT32UC3L164__))) + +#define UC3L2 ( defined (__GNUC__) && \ + ( defined (__AVR32_UC3L216__) || \ + defined (__AVR32_UC3L232__) || \ + defined (__AVR32_UC3L264__))) \ + ||((defined(__ICCAVR32__) || defined(__AAVR32__)) && \ + ( defined (__AT32UC3L216__) || \ + defined (__AT32UC3L232__) || \ + defined (__AT32UC3L264__))) + +#define UC3L3 ( defined (__GNUC__) && \ + ( defined (__AVR32_UC3L316__) || \ + defined (__AVR32_UC3L332__) || \ + defined (__AVR32_UC3L364__))) \ + ||((defined(__ICCAVR32__) || defined(__AAVR32__)) && \ + ( defined (__AT32UC3L316__) || \ + defined (__AT32UC3L332__) || \ + defined (__AT32UC3L364__))) + +#define UC3L (UC3L0 || UC3L1 || UC3L2 || UC3L3) + +#endif // _ARCH_H_ diff --git a/libraries/WiFi/extras/wifiHD/src/ard_spi.c b/libraries/WiFi/extras/wifiHD/src/ard_spi.c new file mode 100644 index 000000000..8bd288ba1 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/ard_spi.c @@ -0,0 +1,1969 @@ +/* + * ard_spi.c + * + * Created on: May 27, 2010 + * Author: mlf by Metodo2 srl + */ + +//#define _APP_DEBUG_ + +#include +#include "board.h" +#include "gpio.h" +#include "usart.h" +#include "ard_spi.h" +#include "ard_tcp.h" +#include "wifi_spi.h" +#include "wl_cm.h" +#include "ard_utils.h" +#include "intc.h" +#include "spi.h" +#include "debug.h" +#include "delay.h" +#include "eic.h" +#include "timer.h" +#include "lwip/dns.h" +#include +#include "util.h" +#include "lwip/udp.h" +#include "lwip_setup.h" + +extern const char* fwVersion; + +/*! \name USART Settings + */ +//! @{ +#if BOARD == EVK1105 +# define ARD_USART_SPI (&AVR32_USART1) +# define ARD_USART_SPI_SCK_PIN AVR32_USART1_CLK_0_PIN +# define ARD_USART_SPI_SCK_FUNCTION AVR32_USART1_CLK_0_FUNCTION +# define ARD_USART_SPI_MISO_PIN AVR32_USART1_TXD_0_0_PIN +# define ARD_USART_SPI_MISO_FUNCTION AVR32_USART1_TXD_0_0_FUNCTION +# define ARD_USART_SPI_MOSI_PIN AVR32_USART1_RXD_0_0_PIN +# define ARD_USART_SPI_MOSI_FUNCTION AVR32_USART1_RXD_0_0_FUNCTION +# define ARD_USART_SPI_NSS_PIN AVR32_USART1_CTS_0_0_PIN +# define ARD_USART_SPI_NSS_FUNCTION AVR32_USART1_CTS_0_0_FUNCTION +# define ARD_USART_SPI_IRQ AVR32_USART1_IRQ +#endif +#if BOARD == ARDUINO +# define ARD_SPI (&AVR32_SPI0) +#define EXT_INT_PIN_LINE1 AVR32_EIC_EXTINT_5_PIN +#define EXT_INT_FUNCTION_LINE1 AVR32_EIC_EXTINT_5_FUNCTION +#define EXT_INT_LINE1 EXT_INT5 +#define EXT_INT_IRQ_LINE1 AVR32_EIC_IRQ_5 +#define EXT_INT_NB_LINES 1 +#endif + +/* These defines should be adjusted to match the application */ +/*! \brief CPU core speed in Hz */ +#define CPUHZ 60000000 +/*! \brief Number of bytes in the receive buffer when operating in slave mode */ +#define BUFFERSIZE 64 +/*! \brief A adjustable delay avoiding multiple requests on the switches */ +//#define TIMEOUT 150000 +#define TIMEOUT CPUHZ/200 +/*! \brief Number of bits in each SPI package*/ +#define SPI_BITS 8 +/*! \brief SPI slave speed in Hz */ +#define SPI_SLAVE_SPEED 1000000 + + +#ifndef CMD_MAX_LEN +#define CMD_MAX_LEN 1024 +#endif +#ifndef REPLY_MAX_LEN +#define REPLY_MAX_LEN 1024 +#endif + +#define _BUFFERSIZE 100 + +extern void tcp_debug_print_pcbs(void); +extern bool ifStatus; +extern bool scanNetCompleted; + +static char buf[CMD_MAX_LEN]; +static char reply[REPLY_MAX_LEN]; +static uint16_t cmdCorr = 0; +static uint16_t count = 0; +static uint16_t replyCount = 0; +static cmd_spi_state_t state = SPI_CMD_IDLE; +int receivedChars = 0; +static uint8_t _receiveBuffer[_BUFFERSIZE]; +bool startReply = false; +bool end_write = false; //TODO only for debug + +// Signal indicating a new command is coming from SPI interface +static volatile Bool startRecvCmdSignal = FALSE; + +#define MAX_CMD_NUM 36 +typedef struct sCmd_spi_list{ + cmd_spi_cb_t cb; + char cmd_id; + cmd_spi_rcb_t reply_cb; + void* ctx; + char flags; +}tCmd_spi_list; + +static tCmd_spi_list cmd_spi_list[MAX_CMD_NUM] = { {0} }; + +#ifdef _SPI_STATS_ +typedef struct sStatSpi +{ + int timeoutIntErr; + int timeoutErr; + int txErr; + int rxErr; + int wrongFrame; + int frameDisalign; + int overrideFrame; + int lastCmd; + int lastError; + unsigned long status; +}tStatSpi; + +tStatSpi statSpi = {0}; + +void initStatSpi() +{ + statSpi.lastCmd = 0; + statSpi.lastError = 0; + statSpi.status= 0; + statSpi.txErr = 0; + statSpi.rxErr = 0; + statSpi.timeoutErr= 0; + statSpi.timeoutIntErr= 0; + statSpi.wrongFrame = 0; + statSpi.frameDisalign = 0; + statSpi.overrideFrame = 0; +} + +void printStatSpi() +{ + printk("totSpiCmds\t: 0x%x\n", cmdCorr); + printk("lastCmd \t: 0x%x\n", statSpi.lastCmd); + printk("lastErr \t: 0x%x\n", statSpi.lastError); + printk("spiStatus\t: 0x%X\n", statSpi.status); + printk("spiTxErr \t: 0x%x\n", statSpi.txErr); + printk("spiRxErr \t: 0x%x\n", statSpi.rxErr); + printk("spiTmoErr\t: 0x%x\n", statSpi.timeoutErr); + printk("spiTmoIntErr\t: 0x%x\n", statSpi.timeoutIntErr); + printk("wrongFrame\t: 0x%x\n", statSpi.wrongFrame); + printk("disalFrame\t: 0x%x\n", statSpi.frameDisalign); + printk("overrideFrame\t: 0x%x\n", statSpi.overrideFrame); +} + +cmd_state_t +cmd_statSpi(int argc, char* argv[], void* ctx) +{ + printStatSpi(); + return CMD_DONE; +} + +cmd_state_t +cmd_resetStatSpi(int argc, char* argv[], void* ctx) +{ + initStatSpi(); + return CMD_DONE; +} +#endif + +#define ARRAY_SIZE(a) sizeof(a) / sizeof(a[0]) +#define RETURN_ERR(e) return (e==WL_SUCCESS) ? WIFI_SPI_ACK : WIFI_SPI_ERR; +#define RESET_USART_CSR(usart) usart->cr = AVR32_USART_CR_RSTSTA_MASK; + +int result = WL_CONNECT_FAILED; //Store the result of the last operation + +void* mapSockTCP[MAX_SOCK_NUM][MAX_MODE_NUM]; + +//Udp RemoteIp and remote Port +static tRemoteClient remoteClients[MAX_SOCK_NUM] = {{0,0}}; + +void setRemoteClient(uint16_t sock, uint32_t _ipaddr, uint16_t _port) +{ + if (sock < MAX_SOCK_NUM) + { + remoteClients[sock].ipaddr = _ipaddr; + remoteClients[sock].port = _port; + } +} + +tRemoteClient* getRemoteClient(uint16_t sock) +{ + if (sock < MAX_SOCK_NUM) + { + return &remoteClients[sock]; + } + return NULL; +} + +struct netif* ard_netif = NULL; + +// Network list retrived in the last scanNetwork +static struct wl_network_list_t network_list = { 0 }; + +struct ip_addr _hostIpAddr; + +static bool hostIpAddrFound = false; + +void* getTTCP(uint8_t sock, uint8_t mode) +{ + if (sock < MAX_SOCK_NUM) + return mapSockTCP[sock][mode]; + return NULL; +} + +int getSock(void * _ttcp) +{ + if (_ttcp != NULL) + { + int i = 0; + for (; istart_time; + uint32_t bytes = ttcp->mode == TTCP_MODE_TRANSMIT ? ttcp->nbuf + * ttcp->buflen : ttcp->recved; + + if (ttcp->verbose) + printk("\n"); + + printk("TTCP [%p]: %d bytes processed, %d.%d KB/s (%s/%s)\n", ttcp, bytes, + bytes / ms, bytes % ms, ProtMode2Str(ttcp->udp), + Mode2Str(ttcp->mode)); +} +#endif + +void showTTCPstatus() +{ + printk("IF status: %s\n", (ifStatus) ? "UP":"DOWN"); + printk("CONN status: %s\n", (_connected) ? "UP":"DOWN"); + + int i = 0; + for (; iudp), Mode2Str(_ttcp->mode), ip2str(_ttcp->addr), _ttcp->port); + if (_ttcp->udp == TCP_MODE) + { + int j = 0; + for (; jtpcb[j]){ + printk("[%d tpcp-%p]-Status:%d\n", j, _ttcp->tpcb[j], _ttcp->tpcb[j]->state); + } + } + + if (_ttcp->lpcb){ + printk("[tlcp-%p]-Status:%d\n", _ttcp->lpcb, _ttcp->lpcb->state); + } + }else{ + if (_ttcp->upcb){ + struct ip_addr loc = _ttcp->upcb->local_ip; + printk("[upcp-%p] flags:0x%x local:%s[0x%x]-%d\n", + _ttcp->upcb, _ttcp->upcb->flags, + ip2str(loc), loc, _ttcp->upcb->local_port); + tRemoteClient remote = {0,0};; + getRemoteData(i, ii, &remote); + struct ip_addr ipaddr = { remote.ipaddr }; + printk("remote:%s(0x%x)-%d\n", ip2str(ipaddr), remote.ipaddr, remote.port); + } + } + //ard_tcp_print_stats(_ttcp); + printk("Data avail:%s\n", isAvailTcpDataByte(i)?"YES":"NO"); + printk("------------------------------\n"); + } + } + } + + tcp_debug_print_pcbs(); +} + +int write_stream(volatile avr32_spi_t *spi, const char *stream, uint16_t len) +{ + uint16_t _len = 0; + unsigned short dummy=0; + + do { + //SIGN1_DN(); + if (spi_write(spi, *stream) == SPI_ERROR_TIMEOUT) + { +#ifdef _SPI_STATS_ + statSpi.timeoutErr++; + statSpi.txErr++; + statSpi.lastError = SPI_ERROR_TIMEOUT; + statSpi.status = spi_getStatus(spi); +#endif + return SPI_ERROR_TIMEOUT; + } + else + { + stream++; + _len++; + spi_read(spi,&dummy); + } + //SIGN1_UP(); + }while (_len < len); + return SPI_OK; +} + +void sendError() +{ + AVAIL_FOR_SPI(); + if (spi_write(&AVR32_SPI, ERR_CMD) != SPI_ERROR_TIMEOUT) + { + //Wait to empty the buffer + while(!spi_writeRegisterEmptyCheck(&AVR32_SPI)); + } + BUSY_FOR_SPI(); + WARN("Send SPI error!\n"); +} + +#define ENABLE_SPI_INT() do { \ + volatile avr32_spi_t *spi = ARD_SPI; \ + Bool global_interrupt_enabled = Is_global_interrupt_enabled(); \ + if (global_interrupt_enabled) Disable_global_interrupt(); \ + spi->IER.rdrf = 1; spi->IER.rxbuff = 1; spi->IER.endrx = 1; \ + if (global_interrupt_enabled) Enable_global_interrupt(); \ +}while(0); + +#define DISABLE_SPI_INT() do { \ + volatile avr32_spi_t *spi = ARD_SPI; \ + Bool global_interrupt_enabled = Is_global_interrupt_enabled(); \ + if (global_interrupt_enabled) Disable_global_interrupt(); \ + spi->IDR.rdrf = 1; spi->IDR.rxbuff = 1; spi->IDR.endrx = 1; \ + if (global_interrupt_enabled) Enable_global_interrupt(); \ +}while(0); + +#define CLEAR_SPI_INT() do { \ + eic_clear_interrupt_line(&AVR32_EIC, AVR32_SPI0_IRQ); \ + }while(0); + +int spi_add_cmd(char _cmd_id, cmd_spi_cb_t cb, cmd_spi_rcb_t rcb, void* ctx, + char flag) { + U32 i; + for (i = 0; i < ARRAY_SIZE(cmd_spi_list); i++) + if (!cmd_spi_list[i].cb) + break; + + if (i == ARRAY_SIZE(cmd_spi_list)) + { + printk("List Commands full!\n"); + return -1; + } + cmd_spi_list[i].cmd_id = _cmd_id; + cmd_spi_list[i].cb = cb; + cmd_spi_list[i].reply_cb = rcb; + cmd_spi_list[i].ctx = ctx; + cmd_spi_list[i].flags = flag; + return 0; +} + +int set_net_cmd_cb(int numParam, char* buf, void* ctx) { + struct wl_ssid_t ssid; + wl_err_t err = WL_FAILURE; + tParam* param = (tParam*) buf; + + if (param->paramLen < WL_SSID_MAX_LENGTH) { + memcpy(ssid.ssid, ¶m->param, param->paramLen); + ssid.len = param->paramLen; + ssid.ssid[ssid.len] = 0; + INFO_SPI("SSID:%s\n", ssid.ssid); + //dump(ssid.ssid, ssid.len); + err = wl_cm_set_network(&ssid, NULL); + if (err != 1) + WARN("err=%d\n", err); + } else { + WARN("SSID len out of range"); + } + return err; +} + +extern uint8_t ascii_to_key(char *outp, const char *inp); + +int set_key_cmd_cb(int numParam, char* buf, void* ctx) { + struct wl_ssid_t ssid; + struct wl_mac_addr_t bssid; + uint8_t idx=0, len=0; + char key[13], key_hex[27]; + char keyIdx[2]; + wl_err_t err = WL_SUCCESS; + tParam* params = (tParam*) buf; + + INFO_SPI("%s params=%d\n", __FUNCTION__, numParam); + + // SSID + memset(&ssid, 0, sizeof ssid); + + if (params->paramLen < WL_SSID_MAX_LENGTH) { + memcpy(ssid.ssid, ¶ms->param, params->paramLen); + ssid.len = params->paramLen; + INFO_SPI("%s\n", ssid.ssid); + } else { + //printk("SSID len out of range"); + RETURN_ERR(WL_FAILURE) + } + + params = (tParam*)((char*)buf+PARAM_LEN_SIZE+params->paramLen); + strncpy(keyIdx, (const char*)¶ms->param, params->paramLen); + keyIdx[(uint8_t)params->paramLen]='\0'; + + idx = (uint8_t)atoi(keyIdx); + // KEY IDX + if ((params->paramLen != 1)||(idx < 0)||(idx > 3)){ + //printk("KEY IDX out of range %d\n", idx); + RETURN_ERR(WL_FAILURE) + } + + params = (tParam*)((char*)params+PARAM_LEN_SIZE+params->paramLen); + strncpy(key_hex, (const char*)¶ms->param, params->paramLen); + key_hex[(uint8_t)params->paramLen]='\0'; + len = ascii_to_key(key, key_hex); + // KEY + if (( len != 5)&&(len != 13)) + { + //printk("KEY len out of range %d", len); + RETURN_ERR(WL_FAILURE) + } +#if 0 + printk("KEY IDX = %d\n", idx); + dump(key, len); + printk("KEY len %d\n", len); +#endif + memset(&bssid.octet, 0xff, sizeof bssid.octet); + + wl_add_wep_key(idx, len, key, &bssid); + //wl_set_auth_mode(AUTH_MODE_SHARED_KEY); + wl_set_default_wep_key(idx); + + //Connect + err = wl_cm_set_network(&ssid, NULL); + if (err != 1) + WARN("err=%d\n", err); + RETURN_ERR(err) +} + +int set_passphrase_cmd_cb(int numParam, char* buf, void* ctx) { + struct wl_network_t net; + char pass[64]; + wl_err_t err = WL_SUCCESS; + tParam* params = (tParam*) buf; + + INFO_SPI("%s params=%d\n", __FUNCTION__, numParam); + + memset(&net, 0, sizeof net); + memset(net.bssid.octet, 0xFF, sizeof net.bssid.octet); + + net.enc_type = ENC_TYPE_AUTO; + + // SSID + if (params->paramLen < WL_SSID_MAX_LENGTH) { + memcpy(net.ssid.ssid, ¶ms->param, params->paramLen); + net.ssid.len = params->paramLen; + INFO_SPI("%s %d\n", net.ssid.ssid, net.ssid.len); + } else { + //printk("SSID len out of range"); + RETURN_ERR(WL_FAILURE) + } + params = (tParam*)((char*)buf+PARAM_LEN_SIZE+params->paramLen); + // PASSPHRASE + + strncpy(pass, (const char*)¶ms->param, params->paramLen); + pass[(uint8_t)params->paramLen]='\0'; + INFO_SPI("Pass: %s %d\n", pass, params->paramLen); + + if (wl_set_passphrase(&net, + pass, + params->paramLen, + ENC_TYPE_AUTO, + AUTH_MODE_AUTO) + != WL_SUCCESS) { + WARN("%s : Failed to add passphrase\n", __func__); + + RETURN_ERR(WL_FAILURE) + } + printk("Connect to network..."); + //Connect + err = wl_cm_set_network(&net.ssid, NULL); + if (err != 1) + printk("err=%d\n", err); + else + printk("OK\n"); + RETURN_ERR(err) +} + +int set_ip_config_cmd_cb(int numParam, char* buf, void* ctx) { + struct ip_addr lwip_addr; + struct ctx_server *hs = ctx; + struct net_cfg *ncfg = &(hs->net_cfg); + struct netif *nif = ncfg->netif; + uint8_t parmsToChange=0; + const uint8_t MAX_IP_CONFIG_PARAMS = 3; + + wl_err_t err = WL_SUCCESS; + tParam* params = (tParam*) buf; + + if (params->paramLen == 1) + { + GET_PARAM_NEXT(BYTE, params, _parmsToChange); + parmsToChange = _parmsToChange; + } + else + RETURN_ERR(WL_FAILURE) + + INFO_SPI("%p numParam=%d parmsToChange=%d\n", ctx, numParam, parmsToChange); + + if (parmsToChange <= MAX_IP_CONFIG_PARAMS) + { + int i=0; + for (; iparamLen == 4) + { + GET_PARAM_NEXT(LONG, params, _ip_addr); + lwip_addr.addr = _ip_addr; + INFO_SPI("%d] nif:%p lwip_addr=0x%x\n", i, nif, lwip_addr.addr); + switch (i) + { + case 0: // local_ip + { + netif_set_ipaddr(nif, &lwip_addr); + break; + } + case 1: // gateway + { + netif_set_gw(nif, &lwip_addr); + break; + } + case 2: // subnet + { + netif_set_netmask(nif, &lwip_addr); + break; + } + } + }else{ + RETURN_ERR(WL_FAILURE) + } + + } + /* Disable DHCP */ + ncfg->dhcp_enabled = STATIC_IP_CONFIG; + }else + RETURN_ERR(WL_FAILURE) + + RETURN_ERR(err) +} + +int set_dns_config_cmd_cb(int numParam, char* buf, void* ctx) { + struct ip_addr lwip_addr; + struct ctx_server *hs = ctx; + struct net_cfg *ncfg = &(hs->net_cfg); + struct netif *nif = ncfg->netif; + uint8_t parmsToChange=0; + const uint8_t MAX_DNS_CONFIG_PARAMS = 2; + + wl_err_t err = WL_SUCCESS; + tParam* params = (tParam*) buf; + + if (params->paramLen == 1) + { + GET_PARAM_NEXT(BYTE, params, _parmsToChange); + parmsToChange = _parmsToChange; + } + else + RETURN_ERR(WL_FAILURE) + + INFO_SPI("%p numParam=%d parmsToChange=%d\n", ctx, numParam, parmsToChange); + + if (parmsToChange <= MAX_DNS_CONFIG_PARAMS) + { + int i=0; + for (; iparamLen == 4) + { + GET_PARAM_NEXT(LONG, params, _ip_addr); + lwip_addr.addr = _ip_addr; + INFO_SPI("%d] nif:%p lwip_addr=0x%x\n", i, nif, lwip_addr.addr); + dns_setserver(i, &lwip_addr); + }else{ + RETURN_ERR(WL_FAILURE) + } + } + /* Disable DHCP */ + ncfg->dhcp_enabled = STATIC_IP_CONFIG; + }else + RETURN_ERR(WL_FAILURE) + + RETURN_ERR(err) +} + + + +void set_result(wl_status_t _status) +{ + result = _status; +} + + +void set_result_cmd(int err) +{ + wl_err_t _err = (wl_err_t)err; + switch (_err) + { + case WL_SUCCESS: + set_result(WL_CONNECTED); + ERROR_LED_OFF(); + break; + default: + case WL_OOM: + case WL_INVALID_LENGTH: + case WL_NOT_SUPPORTED: + case WL_ABSORBED: + case WL_RESOURCES: + case WL_BUSY: + case WL_RETRY: + case WL_FAILURE: + set_result(WL_CONNECT_FAILED); + ERROR_LED_ON(); + break; + } + INFO_SPI("%s %d\n", __FUNCTION__, result); +} + + + +extern int ttcp_start(struct ip_addr addr, uint16_t port, void *opaque, + void *done_cb, int mode, uint16_t nbuf, uint16_t buflen, int udp, int verbose); + + +int start_server_tcp(uint16_t port, uint8_t sock, uint8_t protMode) +{ + struct ip_addr addr = { 0 }; + uint16_t buflen = 1024; + uint16_t nbuf = 1024; + wl_err_t err = WL_FAILURE; + +#ifdef _APP_DEBUG_ + int verbose = 1; +#else + int verbose = 0; +#endif + int udp = protMode; + int mode = 1; //RECEIVE + void* _ttcp = NULL; + + if (sock >= MAX_SOCK_NUM) + return WIFI_SPI_ERR; + + if (_connected) + { + WARN("Still connected...wait\n"); + return WIFI_SPI_ERR; + } + + if (!ifStatus) + { + WARN_VER("IF down...wait\n"); + return WIFI_SPI_ERR; + } + + + if (ard_tcp_start(addr, port, NULL, NULL, mode, nbuf, buflen, udp, verbose, sock, &_ttcp) == 0) + { + INFO_SPI("Start Server %s [%d, %d] OK!\n", ProtMode2Str(protMode), port, sock); + setMapSock(sock, _ttcp); + err = WL_SUCCESS; + }else{ + + WARN("Start Server %s [%d, %d] FAILED!\n", ProtMode2Str(protMode), port, sock); + clearMapSockTcp(sock, TTCP_MODE_RECEIVE); + } + return err; +} + + +int start_server_tcp_cmd_cb(int numParam, char* buf, void* ctx) { + wl_err_t err = WL_FAILURE; + tParam* params = (tParam*) buf; + if (numParam == 3) + { + GET_PARAM_NEXT(INT, params, port); + GET_PARAM_NEXT(BYTE, params, sock); + GET_PARAM_NEXT(BYTE, params, protMode); + err = start_server_tcp(port, sock, protMode); + } + return (err==WL_SUCCESS) ? WIFI_SPI_ACK : WIFI_SPI_ERR; +} + +int start_client_tcp(uint32_t _addr, uint16_t port, uint8_t sock, uint8_t protMode) +{ + uint16_t buflen = 1024; + uint16_t nbuf = 1024; + wl_err_t err = WL_FAILURE; + struct ip_addr addr = { .addr = _addr}; + + INFO_SPI("Addr:0x%x, port:%d, sock:%d, prot:%s\n", _addr, port, sock, ProtMode2Str(protMode)); + + #ifdef _APP_DEBUG_ + int verbose = 1; + #else + int verbose = 0; + #endif + + int udp = protMode; + int mode = 0; //TRANSMIT + void* _ttcp = NULL; + + if (sock >= MAX_SOCK_NUM) + return WIFI_SPI_ERR; + + // Check previous connection + _ttcp = getTTCP(sock, TTCP_MODE_TRANSMIT); + if (_ttcp != NULL) + { + WARN("Previous client %p not stopped !\n", _ttcp); + ard_tcp_stop(_ttcp); + clearMapSockTcp(sock, TTCP_MODE_TRANSMIT); + } + + if (ard_tcp_start(addr, port, NULL, NULL, mode, nbuf, buflen, udp, verbose, sock, &_ttcp) == 0) + { + INFO_SPI("Start Client %s %p [0x%x, %d, %d] OK!\n", ProtMode2Str(protMode), + _ttcp, addr, port, sock); + setMapSock(sock, _ttcp); + err = WL_SUCCESS; + }else{ + INFO_SPI("Start Client %s %p [0x%x, %d, %d] FAILED!\n", ProtMode2Str(protMode), + _ttcp, addr, port, sock); + clearMapSockTcp(sock, TTCP_MODE_TRANSMIT); + } + return err; +} + + +int start_client_tcp_cmd_cb(int numParam, char* buf, void* ctx) { + wl_err_t err = WL_FAILURE; + tParam* params = (tParam*) buf; + if (numParam == 4) + { + GET_PARAM_NEXT(LONG, params, _addr); + GET_PARAM_NEXT(INT, params, port); + GET_PARAM_NEXT(BYTE, params, sock); + GET_PARAM_NEXT(BYTE, params, protMode); + err = start_client_tcp(_addr, port, sock, protMode); + } + return (err==WL_SUCCESS) ? WIFI_SPI_ACK : WIFI_SPI_ERR; +} + +int stop_client_tcp_cmd_cb(int numParam, char* buf, void* ctx) { + wl_err_t err = WL_FAILURE; + tParam* params = (tParam*) buf; + void* _ttcp = NULL; + + if (numParam == 1) + { + GET_PARAM_NEXT(BYTE, params, sock); + + INFO_SPI("Stop client sock:%d\n", sock); + + if (sock < MAX_SOCK_NUM) + { + _ttcp = getTTCP(sock, TTCP_MODE_TRANSMIT); + ard_tcp_stop(_ttcp); + err = WL_SUCCESS; + } + } + return (err==WL_SUCCESS) ? WIFI_SPI_ACK : WIFI_SPI_ERR; +} + +int insert_data_cmd_cb(int numParam, char* buf, void* ctx) { + + tDataParam* msg = (tDataParam*) buf; + if ((numParam == 2)&&(msg->dataLen == 1)) + { + GET_DATA_BYTE(sock, buf+2); + GET_DATA_INT(len, buf+3); + //printk("tcp:%p buf:%p len:%d\n", getTTCP(sock), (uint8_t*)(buf+5), len); + insertBuf(sock, (uint8_t*)(buf+5), len); + } + return WIFI_SPI_ACK; +} + +int send_data_udp_cmd_cb(int numParam, char* buf, void* ctx) { + wl_err_t err = WL_FAILURE; + + tParam* params = (tParam*) buf; + if ((numParam == 1)&&(params->paramLen == 1)) + { + GET_PARAM_NEXT(BYTE, params, sock); + uint16_t len = 0; + uint8_t* p = mergeBuf(sock, NULL, &len); + err = sendUdpData(getTTCP(sock, TTCP_MODE_TRANSMIT), p, len); + clearBuf(sock); + free(p); + } + + return (err==WL_SUCCESS) ? WIFI_SPI_ACK : WIFI_SPI_ERR; +} + + +int send_data_tcp_cmd_cb(int numParam, char* buf, void* ctx) { + wl_err_t err = WL_FAILURE; + DATA_LED_ON(); + tDataParam* msg = (tDataParam*) buf; + if ((numParam == 2)&&(msg->dataLen == 1)) + { + GET_DATA_BYTE(sock, buf+2); + GET_DATA_INT(len, buf+3); + //printk("tcp:%p buf:%p len:%d\n", getTTCP(sock), (uint8_t*)(buf+5), len); + err = sendTcpData(getTTCP(sock, TTCP_MODE_TRANSMIT), (uint8_t*)(buf+5), len); + } + DATA_LED_OFF(); + return (err==WL_SUCCESS) ? WIFI_SPI_ACK : WIFI_SPI_ERR; +} + +int ack_cmd_cb(int numParam, char* buf, void* ctx) { + return WIFI_SPI_ACK; +} + +int get_result_cmd_cb(int numParam, char* buf, void* ctx) { + INFO_SPI("ifStatus:%d result:%d\n", ifStatus, result); + return WIFI_SPI_ACK; +} + +int disconnect_cmd_cb(int numParam, char* buf, void* ctx) +{ + return ((wl_disconnect()==WL_SUCCESS)? WIFI_SPI_ACK : WIFI_SPI_ERR); +} + + +cmd_spi_state_t get_reply_cb(char* recv, char* reply, void* ctx, uint16_t* count) { + + CREATE_HEADER_REPLY(reply, recv, 1); + + reply[3] = 1; // paramLen + if (ctx != NULL) { + reply[4] = (*(uint8_t*)ctx); //param + } else { + reply[4] = (ifStatus)?WL_CONNECTED:result; //param + } + + END_HEADER_REPLY(reply, 5, *count); + + //INFO_SPI("result:%d\n", result); + return SPI_CMD_DONE; +} + +cmd_spi_state_t ack_reply_cb(char* recv, char* reply, void* ctx, uint16_t* count) { + + CREATE_HEADER_REPLY(reply, recv, 1); + + reply[3] = 1; // paramLen + if (ctx != NULL) { + reply[4] = (*(uint8_t*) ctx != 1) ? WIFI_SPI_ERR : WIFI_SPI_ACK; //param + } else { + reply[4] = WIFI_SPI_ACK; //param + } + + END_HEADER_REPLY(reply, 5, *count); + + return SPI_CMD_DONE; +} + +cmd_spi_state_t get_reply_ipaddr_cb(char* recv, char* reply, void* ctx, uint16_t* count) { + + CHECK_ARD_NETIF(recv, reply, count); + + CREATE_HEADER_REPLY(reply, recv, 3); + + PUT_LONG_IN_BYTE_NO(ard_netif->ip_addr.addr, reply, 3); + PUT_LONG_IN_BYTE_NO(ard_netif->netmask.addr, reply, 8); + PUT_LONG_IN_BYTE_NO(ard_netif->gw.addr, reply, 13); + + END_HEADER_REPLY(reply, 18, *count); + + return SPI_CMD_DONE; +} + +void getRemoteData(uint8_t sock, uint8_t mode, tRemoteClient* remoteData) +{ + if ((sock>=0) && (sockudp == UDP_MODE)) + { + if (_ttcp->mode == TTCP_MODE_RECEIVE) + { + remoteData->ipaddr = getRemoteClient(sock)->ipaddr; + remoteData->port = getRemoteClient(sock)->port; + }else{ + remoteData->ipaddr = (_ttcp->upcb) ? _ttcp->upcb->remote_ip.addr : 0; + remoteData->port = (_ttcp->upcb) ? _ttcp->upcb->remote_port : 0; + } + } + } + } +} + + +cmd_spi_state_t get_reply_remote_data_cb(char* recv, char* reply, void* ctx, uint16_t* count) { + + CHECK_ARD_NETIF(recv, reply, count); + DUMP_SPI_CMD(recv); + + GET_DATA_BYTE(sock, recv+4); + + CREATE_HEADER_REPLY(reply, recv, 2); + tRemoteClient remoteData = {0,0}; + //TODO pass the mode + getRemoteData(sock, TTCP_MODE_RECEIVE, &remoteData); + + PUT_LONG_IN_BYTE_NO(remoteData.ipaddr, reply, 3); + PUT_DATA_INT(remoteData.port, reply, 8); + + END_HEADER_REPLY(reply, 11, *count); + + return SPI_CMD_DONE; +} + + +void foundHostByName(const char *name, struct ip_addr *ipaddr, void *callback_arg) +{ + _hostIpAddr.addr = (ipaddr)?ipaddr->addr:0xffffffff; + INFO_SPI("foundHostByName: Found Host: name=%s ip=0x%x\n", name, _hostIpAddr.addr); + hostIpAddrFound = true; +} + +int req_reply_host_by_name_cb(int numParam, char* buf, void* ctx) { + + char hostName[DNS_MAX_NAME_LENGTH]; + tParam* params = (tParam*) buf; + + // HostName + if (params->paramLen < DNS_MAX_NAME_LENGTH) { + memcpy(hostName, ¶ms->param, params->paramLen); + hostName[params->paramLen]='\0'; + } else { + RETURN_ERR(WL_FAILURE) + } + + INFO_SPI("Looking for Host: name=%s\n", hostName); + _hostIpAddr.addr = 0; + hostIpAddrFound = false; + err_t err = dns_gethostbyname(hostName, &_hostIpAddr, foundHostByName, NULL); + if (err == ERR_OK) + { + INFO_SPI("Found Host: name=%s ip=0x%x\n", hostName, _hostIpAddr.addr); + hostIpAddrFound = true; + RETURN_ERR(WL_SUCCESS) + } + RETURN_ERR(WL_FAILURE) +} + +cmd_spi_state_t get_reply_host_by_name_cb(char* recv, char* reply, void* ctx, uint16_t* count) { + + u32_t addr = (hostIpAddrFound)?_hostIpAddr.addr : 0xffffffff; + INFO_SPI("Searching for Host: ip=0x%x found=%d\n", addr, hostIpAddrFound); + + CHECK_ARD_NETIF(recv, reply, count); + + CREATE_HEADER_REPLY(reply, recv, 1); + + PUT_LONG_IN_BYTE_NO(addr, reply, 3); + + END_HEADER_REPLY(reply, 8, *count); + + return SPI_CMD_DONE; +} + +cmd_spi_state_t get_reply_mac_cb(char* recv, char* reply, void* ctx, uint16_t* count) { + + CHECK_ARD_NETIF(recv, reply, count); + + CREATE_HEADER_REPLY(reply, recv, 1); + + reply[3] = WL_MAC_ADDR_LENGTH; + uint8_t mac[WL_MAC_ADDR_LENGTH]; + if (wl_get_mac_addr(mac) != WL_SUCCESS) { + RETURN_ERR_REPLY(recv, reply, count); + } + //rotate the byte order + reply[4]=mac[5]; + reply[5]=mac[4]; + reply[6]=mac[3]; + reply[7]=mac[2]; + reply[8]=mac[1]; + reply[9]=mac[0]; + END_HEADER_REPLY(reply, 10, *count); + + return SPI_CMD_DONE; +} + +cmd_spi_state_t get_reply_curr_net_cb(char* recv, char* reply, void* ctx, uint16_t* count) { + + uint32_t type = (uint32_t)ctx; + CHECK_ARD_NETIF(recv, reply, count); + + CREATE_HEADER_REPLY(reply, recv, 1); + + struct wl_network_t* net = wl_get_current_network(); + uint8_t len = 0; + if (net != NULL) + { + switch (type) + { + default: + case GET_CURR_SSID_CMD: + { + len = net->ssid.len; + PUT_BUFDATA_BYTE(net->ssid.ssid, len, reply, 3); + break; + } + case GET_CURR_BSSID_CMD: + { + len = WL_MAC_ADDR_LENGTH; ; + PUT_BUFDATA_BYTE_REV(net->bssid.octet, len, reply, 3); + break; + } + case GET_CURR_RSSI_CMD: + { + len=sizeof(net->rssi); + PUT_LONG_IN_BYTE_HO(net->rssi, reply, 3); + //printk("RSSI:%d", net->rssi); + break; + } + case GET_CURR_ENCT_CMD: + { + len = sizeof(net->enc_type); + PUT_DATA_BYTE(net->enc_type, reply, 3); + //printk("ENCT:%d", net->enc_type); + break; + } + } + }else{ + PUT_DATA_BYTE(0, reply, 3); + } + + END_HEADER_REPLY(reply, 3+len+1, *count); + + //dump(reply, *count); + + return SPI_CMD_DONE; +} + +cmd_spi_state_t get_reply_idx_net_cb(char* recv, char* reply, void* ctx, uint16_t* count) { + + uint32_t type = (uint32_t)ctx; + CHECK_ARD_NETIF(recv, reply, count); + + CREATE_HEADER_REPLY(reply, recv, 1); + + DUMP_SPI_CMD(recv); + + GET_DATA_BYTE(idx, recv+4); + + if (idx >= WL_NETWORKS_LIST_MAXNUM) + { + WARN("Index out of range: %d\n", idx); + return SPI_CMD_DONE; + } + uint8_t len = 0; + switch (type) + { + default: + case GET_IDX_SSID_CMD: + { + len = network_list.net[idx]->ssid.len; + PUT_BUFDATA_BYTE(network_list.net[idx]->ssid.ssid, len, reply, 3); + INFO_UTIL("SSID:%s\n", network_list.net[idx]->ssid.ssid); + break; + } + case GET_IDX_RSSI_CMD: + { + len = 4; + PUT_LONG_IN_BYTE_HO(network_list.net[idx]->rssi, reply, 3); + INFO_UTIL("RSSI:%d\n", network_list.net[idx]->rssi); + break; + } + case GET_IDX_ENCT_CMD: + { + len = 1; + PUT_DATA_BYTE(network_list.net[idx]->enc_type, reply, 3); + INFO_UTIL("ENCT:%d\n", network_list.net[idx]->enc_type); + break; + } + } + + + END_HEADER_REPLY(reply, 3+len+1, *count); + + DUMP(reply, *count); + + return SPI_CMD_DONE; +} + +static void copy_network_list(struct wl_network_list_t *dst, + struct wl_network_list_t *src) +{ + int i; + for (i = 0; i < dst->cnt; i++) + free(dst->net[i]); + free(dst->net); + + dst->cnt = 0; + + if (src->cnt == 0) + return; + dst->net = calloc(1, src->cnt * sizeof(struct wl_network_t *)); + if (dst->net == NULL) { + printk("could not allocate all gui net array\n"); + return; + } + + for (i = 0; i < src->cnt; i++) { + struct wl_network_t *net = src->net[i]; + dst->net[i] = malloc(sizeof(*net)); + if (dst->net[i] == NULL) { + printk("could not allocate all gui nets\n"); + return; + } + + memcpy(dst->net[i], net, sizeof(*net)); + dst->cnt++; + } +} + +int start_scan_net_cmd_cb(int numParam, char* buf, void* ctx) { + wl_err_t err = WL_FAILURE; + + INFO_SPI("Start Network Scan %d\n", numParam); + if (scanNetCompleted){ + scanNetCompleted = false; + err = wl_scan(); + if (err != WL_SUCCESS) + { + // May be busy scanning already, no fatal error + WARN("err=%d\n", err); + err = WL_SUCCESS; + } + } + return err; +} + +cmd_spi_state_t get_reply_scan_networks_cb(char* recv, char* reply, void* ctx, uint16_t* count) { + + const int8_t SCAN_NOT_YET_COMPLETED = 0; + + if (!scanNetCompleted) + { + //return empty list with an error to retry + CREATE_HEADER_REPLY(reply, recv, SCAN_NOT_YET_COMPLETED); + END_HEADER_REPLY(reply, 3, *count); + INFO_SPI("Scan not completed!\n"); + return SPI_CMD_DONE; + } + + int network_cnt = 0; + struct wl_network_list_t* wl_network_list; + + wl_get_network_list(&wl_network_list); + if (wl_network_list->cnt == 0) + { + CREATE_HEADER_REPLY(reply, recv, 0); + END_HEADER_REPLY(reply, 3, *count); + INFO_SPI("Networks not found!\n"); + return SPI_CMD_DONE; + } + + if (wl_network_list->cnt > WL_NETWORKS_LIST_MAXNUM) + { + network_cnt = WL_NETWORKS_LIST_MAXNUM ; + } + else{ + network_cnt = wl_network_list->cnt ; + } + + copy_network_list(&network_list, wl_network_list); + CREATE_HEADER_REPLY(reply, recv, network_cnt); + + uint8_t start = 3; + int ii = 0; + for (; ii < network_cnt; ii++) + { + uint8_t len = network_list.net[ii]->ssid.len+1; + network_list.net[ii]->ssid.ssid[network_list.net[ii]->ssid.len]=0; + PUT_BUFDATA_BYTE(network_list.net[ii]->ssid.ssid, len, reply, start); + start += len+1; + INFO_SPI("%d - %s [%d]- %d - %d - 0x%x\n",ii, network_list.net[ii]->ssid.ssid, + len, network_list.net[ii]->enc_type, + network_list.net[ii]->rssi, network_list.net[ii]->bssid); + } + + END_HEADER_REPLY(reply, start, *count); + //DUMP(reply, *count); + + return SPI_CMD_DONE; +} + +cmd_spi_state_t get_state_tcp_cmd_cb(char* recv, char* reply, void* ctx, uint16_t* count) { + + CHECK_ARD_NETIF(recv, reply, count); + + CREATE_HEADER_REPLY(reply, recv, PARAM_NUMS_1); + + uint8_t _state = CLOSED; + if ((recv[3]==1)&&(recv[4]>=0)&&(recv[4]=0)&&(_sock=0)&&(recv[4]=0)&&(recv[4]=0)&&(recv[4]=0)&&(sock=0)&&(recv[4]<0xFF)) + { + len = recv[4]; + int i= 0; + for (; i")); + DUMP_SPI(recv, count); + IF_SPI_DUMP(printk("<==")); + DUMP_SPI(reply, _count); + replyCount = _count; + return _result; +} + +unsigned char* getStartCmdSeq(unsigned char* _recv, int len, int *offset) +{ + int i = 0; + *offset = 0; + //DEB_PIN_UP(); + for (; inParam, + (char*) &(spiMsg->params[0]), cmd_spi_list[i].ctx); + }else + { + tSpiMsgData* spiMsg = (tSpiMsgData*) recv; + _result = cmd_spi_list[i].cb(spiMsg->nParam, + (char*) &(spiMsg->params[0]), cmd_spi_list[i].ctx); + } + + if (_result != WIFI_SPI_ACK) + return REPLY_ERR_CMD; + else + return REPLY_NO_ERR; + }else{ + if (spiMsg8(cmdId)) + { + tSpiMsg* spiMsg = (tSpiMsg*) recv; + _result = cmd_spi_list[i].cb(spiMsg->nParam, + (char*) &(spiMsg->params[0]), NULL); + }else{ + tSpiMsgData* spiMsg = (tSpiMsgData*) recv; + _result = cmd_spi_list[i].cb(spiMsg->nParam, + (char*) &(spiMsg->params[0]), NULL); + } + //Send Reply for GET commands or Immediate SET apply + if (cmd_spi_list[i].flags == CMD_GET_FLAG) { + if (sendReply(i, recv, reply, cmd_spi_list[i].ctx) != SPI_OK) + return REPLY_ERR_GET; + else + return REPLY_NO_ERR; + }else if (cmd_spi_list[i].flags == CMD_IMM_SET_FLAG) + { + if (sendReply(i, recv, reply, &_result) != SPI_OK) + return REPLY_ERR_GET; + else + return REPLY_NO_ERR; + + } + } + } + } + // Command not found + if (i==ARRAY_SIZE(cmd_spi_list)) + { + WARN("Unknown cmd 0x%x\n", cmdId); + DUMP(recv, count); + return REPLY_ERR_CMD; + } + return REPLY_NO_ERR; +} + +void init_spi_cmds(void* ctx) { + spi_add_cmd(SET_NET_CMD, set_net_cmd_cb, ack_reply_cb, NULL, CMD_SET_FLAG); + spi_add_cmd(SET_PASSPHRASE_CMD, set_passphrase_cmd_cb, ack_reply_cb, NULL, CMD_SET_FLAG); + spi_add_cmd(SET_KEY_CMD, set_key_cmd_cb, ack_reply_cb, NULL, CMD_SET_FLAG); + spi_add_cmd(SET_IP_CONFIG_CMD, set_ip_config_cmd_cb, ack_reply_cb, ctx, CMD_SET_FLAG); + spi_add_cmd(SET_DNS_CONFIG_CMD, set_dns_config_cmd_cb, ack_reply_cb, ctx, CMD_SET_FLAG); + spi_add_cmd(GET_CONN_STATUS_CMD, get_result_cmd_cb, get_reply_cb, NULL, CMD_GET_FLAG); + spi_add_cmd(GET_IPADDR_CMD, ack_cmd_cb, get_reply_ipaddr_cb, NULL, CMD_GET_FLAG); + spi_add_cmd(GET_MACADDR_CMD, ack_cmd_cb, get_reply_mac_cb, NULL, CMD_GET_FLAG); + spi_add_cmd(GET_CURR_SSID_CMD, ack_cmd_cb, get_reply_curr_net_cb, (void*)GET_CURR_SSID_CMD, CMD_GET_FLAG); + spi_add_cmd(GET_CURR_BSSID_CMD, ack_cmd_cb, get_reply_curr_net_cb, (void*)GET_CURR_BSSID_CMD, CMD_GET_FLAG); + spi_add_cmd(GET_CURR_RSSI_CMD, ack_cmd_cb, get_reply_curr_net_cb, (void*)GET_CURR_RSSI_CMD, CMD_GET_FLAG); + spi_add_cmd(GET_CURR_ENCT_CMD, ack_cmd_cb, get_reply_curr_net_cb, (void*)GET_CURR_ENCT_CMD, CMD_GET_FLAG); + spi_add_cmd(START_SCAN_NETWORKS, start_scan_net_cmd_cb, ack_reply_cb, NULL, CMD_SET_FLAG); + spi_add_cmd(SCAN_NETWORKS, ack_cmd_cb, get_reply_scan_networks_cb, NULL, CMD_GET_FLAG); + spi_add_cmd(DISCONNECT_CMD, disconnect_cmd_cb, ack_reply_cb, NULL, CMD_SET_FLAG); + spi_add_cmd(GET_IDX_ENCT_CMD, ack_cmd_cb, get_reply_idx_net_cb, (void*)GET_IDX_ENCT_CMD, CMD_GET_FLAG); + spi_add_cmd(GET_IDX_SSID_CMD, ack_cmd_cb, get_reply_idx_net_cb, (void*)GET_IDX_SSID_CMD, CMD_GET_FLAG); + spi_add_cmd(GET_IDX_RSSI_CMD, ack_cmd_cb, get_reply_idx_net_cb, (void*)GET_IDX_RSSI_CMD, CMD_GET_FLAG); + spi_add_cmd(REQ_HOST_BY_NAME_CMD, req_reply_host_by_name_cb, ack_reply_cb, NULL, CMD_SET_FLAG); + spi_add_cmd(GET_HOST_BY_NAME_CMD, ack_cmd_cb, get_reply_host_by_name_cb, NULL, CMD_GET_FLAG); + spi_add_cmd(START_SERVER_TCP_CMD, start_server_tcp_cmd_cb, ack_reply_cb, NULL, CMD_SET_FLAG); + spi_add_cmd(START_CLIENT_TCP_CMD, start_client_tcp_cmd_cb, ack_reply_cb, NULL, CMD_SET_FLAG); + spi_add_cmd(STOP_CLIENT_TCP_CMD, stop_client_tcp_cmd_cb, ack_reply_cb, NULL, CMD_SET_FLAG); + spi_add_cmd(GET_STATE_TCP_CMD, ack_cmd_cb, get_state_tcp_cmd_cb, NULL, CMD_GET_FLAG); + spi_add_cmd(GET_DATA_TCP_CMD, ack_cmd_cb, get_data_tcp_cmd_cb, NULL, CMD_GET_FLAG); + spi_add_cmd(AVAIL_DATA_TCP_CMD, ack_cmd_cb, avail_data_tcp_cmd_cb, NULL, CMD_GET_FLAG); + spi_add_cmd(SEND_DATA_TCP_CMD, send_data_tcp_cmd_cb, ack_reply_cb, NULL, CMD_IMM_SET_FLAG); + spi_add_cmd(DATA_SENT_TCP_CMD, ack_cmd_cb, data_sent_tcp_cmd_cb, NULL, CMD_GET_FLAG); + spi_add_cmd(GET_DATABUF_TCP_CMD, ack_cmd_cb, get_databuf_tcp_cmd_cb, NULL, CMD_GET_FLAG); + spi_add_cmd(GET_CLIENT_STATE_TCP_CMD, ack_cmd_cb, get_client_state_tcp_cmd_cb, NULL, CMD_GET_FLAG); + spi_add_cmd(GET_FW_VERSION_CMD, ack_cmd_cb, get_firmware_version_cmd_cb, NULL, CMD_GET_FLAG); + spi_add_cmd(GET_TEST_CMD, ack_cmd_cb, get_test_cmd_cb, NULL, CMD_GET_FLAG); + spi_add_cmd(INSERT_DATABUF_CMD, insert_data_cmd_cb, ack_reply_cb, NULL, CMD_IMM_SET_FLAG); + spi_add_cmd(SEND_DATA_UDP_CMD, send_data_udp_cmd_cb, ack_reply_cb, NULL, CMD_SET_FLAG); + spi_add_cmd(GET_REMOTE_DATA_CMD, ack_cmd_cb, get_reply_remote_data_cb, NULL, CMD_GET_FLAG); +} + + +int checkMsgParam8(unsigned char* buf) +{ + int paramLenTot=0; + tSpiMsg* spiMsg = (tSpiMsg*)buf; + tParam *param = spiMsg->params; + int i=0; + for (; inParam; ++i) + { + uint8_t _len = param->paramLen; + paramLenTot+= _len+1; + //printk("%d) len:0x%x\n", i, _len); + param = (tParam*)((char*)(param)+_len+1); + } + return paramLenTot; +} + +int checkMsgParam16(unsigned char* buf) +{ + int paramLenTot=0; + tSpiMsgData* spiMsg = (tSpiMsgData*)buf; + tDataParam* param = (tDataParam*)spiMsg->params; + int i=0; + for (; inParam; ++i) + { + uint16_t _len = param->dataLen; + paramLenTot+= _len+sizeof(param->dataLen); + //printk("%d) len:0x%x\n", i, _len); + param = (tDataParam*)((char*)(param)+_len+sizeof(param->dataLen)); + } + return paramLenTot; +} + +bool checkMsgFormat(uint8_t* _recv, int len, int* offset) +{ + + unsigned char* recv = getStartCmdSeq(_recv, len, offset); + if ((recv == NULL)||(recv!=_recv)) + { + DEB_PIN_TRIGGER(); + + IF_WARN_VER(DUMP((char*)_recv, len)); + + STATSPI_DISALIGN_ERROR(); + + if (recv == NULL) + return false; + } + tSpiMsg* spiMsg = (tSpiMsg*) recv; + if ((spiMsg->cmd == START_CMD)&&((spiMsg->tcmd & REPLY_FLAG) == 0)) + { + int paramLenTot = 0; + if (spiMsg8(spiMsg->tcmd)) + paramLenTot = checkMsgParam8(recv); + else + { + DUMP_SPI(_recv, len); + paramLenTot = checkMsgParam16(recv); + } + + //INFO_SPI("cmd:0x%x TotLen:%d\n", spiMsg->tcmd, paramLenTot); + char* p = (char*)recv + paramLenTot + sizeof(tSpiHdr); + if (*p == END_CMD) + { + return true; + }else{ + WARN("%d] Not found end cmd: 0x%x\n", cmdCorr, *p); + } + } + return false; +} + +//#define AVR32_USART_CSR_ITERATION_MASK (UNDERRUN) 0x00000400 +//#define AVR32_USART_CSR_OVRE_MASK 0x00000020 +//#define AVR32_USART_CSR_RXRDY_MASK 0x00000001 + + +void spi_poll(struct netif* netif) { + + ard_netif = netif; + + if (startReply) + { + startReply = false; + int offset = 0; + DISABLE_SPI_INT(); + if (checkMsgFormat(_receiveBuffer, receivedChars, &offset)) + { + state = SPI_CMD_INPROGRESS; + count = receivedChars-offset; + if (count >= CMD_MAX_LEN) + count = CMD_MAX_LEN; + memcpy(buf, &_receiveBuffer[offset], count); + + //mark as buffer used + _receiveBuffer[0] = 0; + + int err = call_reply_cb(buf, &reply[0]); + if (err != REPLY_NO_ERR) + { + DUMP_SPI(buf, count); + DUMP_SPI(reply, replyCount); + } + receivedChars = 0; + count = 0; + state = SPI_CMD_IDLE; + } + else + { + sendError(); + WARN("%d] Check format msg failed!\n", cmdCorr); + IF_WARN_VER(dump((char*)_receiveBuffer, receivedChars)); + state = SPI_CMD_IDLE; + count=0; + //mark as buffer used + _receiveBuffer[0] = 0; + } + CLEAR_SPI_INT(); + //Enable Spi int to receive a new command + ENABLE_SPI_INT(); + //Available for receiving a new spi data + AVAIL_FOR_SPI(); + } + +#ifdef _SPI_STATS_ + if (statSpi.lastError != 0) + { + WARN("%d] Errot=0x%x spiStatus:0x%x\n", cmdCorr, statSpi.lastError, statSpi.status); + statSpi.lastError = 0; + } +#endif +} + +inline int spi_slaveReceiveInt(volatile avr32_spi_t *spi) +{ + receivedChars=0; + int index = 0; + int err = SPI_OK; + state = SPI_CMD_INPUT; + bool endOfFrame = false; + + do { + unsigned int timeout = SPI_TIMEOUT; + err = SPI_OK; + + while ((spi->sr & (AVR32_SPI_SR_RDRF_MASK | AVR32_SPI_SR_TXEMPTY_MASK)) != + (AVR32_SPI_SR_RDRF_MASK | AVR32_SPI_SR_TXEMPTY_MASK)) { + if ((timeout--)==0) { + err=SPI_ERROR_TIMEOUT; + break; + } + } + //DEB_PIN_TG(); + #if 0 +#ifdef _SPI_STATS_ + if (spi->sr & AVR32_SPI_SR_OVRES_MASK) + { + STATSPI_OVERRIDE_ERROR(); + } +#endif +#endif + if (err == SPI_OK) { + _receiveBuffer[index] = (spi->rdr >> AVR32_SPI_RDR_RD_OFFSET) & 0x00ff; + DEB_PIN_UP(2); + if ((index==0) && (_receiveBuffer[index] != START_CMD)) + DEB_PIN_TRIGGER(); + ++index; + ++receivedChars; + }else{ +#ifdef _SPI_STATS_ + STATSPI_TIMEOUT_ERROR(); +#endif + break; + } + + /* break on buffer overflow */ + if (receivedChars >= _BUFFERSIZE) { + err = SPI_ERROR_OVERRUN_AND_MODE_FAULT; + break; + } + + if (_receiveBuffer[index - 1] == END_CMD) + { + int8_t numParams = 0; + int idx = PARAM_LEN_POS+1; + bool islen16bit = ((_receiveBuffer[CMD_POS] & DATA_FLAG) == DATA_FLAG); + if (index >= idx) + { + numParams = _receiveBuffer[PARAM_LEN_POS]; + while (((index-1) > idx)&&(numParams>0)) + { + if (islen16bit) + idx += (_receiveBuffer[idx]<<8) + _receiveBuffer[idx+1]+2; + else + idx += _receiveBuffer[idx]+1; + --numParams; + } + if (((index-1) == idx) && (numParams == 0)) + endOfFrame = true; + } + if (!endOfFrame){ + WARN("Wrong termination index:%d nParam:%d idx:%d 16bit:%d\n", index, numParams, idx, islen16bit); + #ifdef _DEBUG_ + dump((char*)_receiveBuffer, receivedChars); + while(0); + #endif + } + } + } while (!endOfFrame); + return err; +} + +#if defined (__GNUC__) +__attribute__((__interrupt__)) +#elif defined (__ICCAVR32__) +__interrupt +#endif +static void spi_int_handler(void) +{ + volatile avr32_spi_t *spi = ARD_SPI; + DEB_PIN_DN(2); + DISABLE_SPI_INT(); + + if ((spi->sr & AVR32_SPI_SR_RDRF_MASK) != 0) + { + int err = spi_slaveReceiveInt(ARD_SPI); + if (err == SPI_OK) + { + BUSY_FOR_SPI(); + startReply=true; + ++cmdCorr; + //maintain disable interrupt to send the reply command + return; + } + } + ENABLE_SPI_INT(); +} + +inline spi_status_t spi_read8(volatile avr32_spi_t *spi, unsigned char *data) +{ + unsigned int timeout = SPI_TIMEOUT; + + while ((spi->sr & (AVR32_SPI_SR_RDRF_MASK | AVR32_SPI_SR_TXEMPTY_MASK)) != + (AVR32_SPI_SR_RDRF_MASK | AVR32_SPI_SR_TXEMPTY_MASK)) { + if (!timeout--) { + return SPI_ERROR_TIMEOUT; + } + } + + *data = (spi->rdr >> AVR32_SPI_RDR_RD_OFFSET) & 0x00ff; + + return SPI_OK; +} + + +/*! + * \brief Interrupt handler of the External interrupt line "1". + */ +#if __GNUC__ +__attribute__((__interrupt__)) +#elif __ICCAVR32__ +__interrupt +#endif +static void eic_int_handler1(void) +{ + eic_clear_interrupt_line(&AVR32_EIC, EXT_INT_LINE1); + startRecvCmdSignal = TRUE; +} + +//! Structure holding the configuration parameters of the EIC module. +eic_options_t eic_options[EXT_INT_NB_LINES]; + +void initExtInt() +{ + // Enable edge-triggered interrupt. + eic_options[0].eic_mode = EIC_MODE_EDGE_TRIGGERED; + // Interrupt will trigger on falling edge. + eic_options[0].eic_edge = EIC_EDGE_FALLING_EDGE; + // Initialize in synchronous mode : interrupt is synchronized to the clock + eic_options[0].eic_async = EIC_SYNCH_MODE; + // Set the interrupt line number. + eic_options[0].eic_line = EXT_INT_LINE1; + + // Disable all interrupts. + Disable_global_interrupt(); + + INTC_register_interrupt(&eic_int_handler1, EXT_INT_IRQ_LINE1, AVR32_INTC_INT0); + + // Map the interrupt lines to the GPIO pins with the right peripheral functions. + gpio_enable_module_pin(EXT_INT_PIN_LINE1,EXT_INT_FUNCTION_LINE1); + + // Init the EIC controller with the options + eic_init(&AVR32_EIC, eic_options, EXT_INT_NB_LINES); + + // Enable the chosen lines and their corresponding interrupt feature. + eic_enable_line(&AVR32_EIC, eic_options[0].eic_line); + eic_enable_interrupt_line(&AVR32_EIC, eic_options[0].eic_line); + + // Enable all interrupts. + Enable_global_interrupt(); +} + +int initSpi(void* ctx) +{ + volatile avr32_spi_t *spi = &AVR32_SPI0; + gpio_map_t spi_piomap = { \ + {AVR32_SPI0_SCK_0_0_PIN, AVR32_SPI0_SCK_0_0_FUNCTION}, \ + {AVR32_SPI0_MISO_0_0_PIN, AVR32_SPI0_MISO_0_0_FUNCTION}, \ + {AVR32_SPI0_MOSI_0_0_PIN, AVR32_SPI0_MOSI_0_0_FUNCTION}, \ + {AVR32_SPI0_NPCS_0_0_PIN, AVR32_SPI0_NPCS_0_0_FUNCTION}, \ + }; + + INFO_INIT("SPI init...\n"); + + /* Init PIO */ + gpio_enable_module(spi_piomap, ARRAY_SIZE(spi_piomap)); + + spi_options_t spiOptions; + + spiOptions.reg = 0; + spiOptions.baudrate = SPI_SLAVE_SPEED; + spiOptions.bits = SPI_BITS; + spiOptions.spck_delay = 0; + spiOptions.trans_delay = 4; + spiOptions.stay_act = 0; + spiOptions.spi_mode = 0; + spiOptions.modfdis = 0; + + /* Initialize as slave; bits, spi_mode */ + if (spi_initSlave(spi, spiOptions.bits, spiOptions.spi_mode) != SPI_OK) + { + INFO_SPI("SPI initialization failed!"); + return 1; + } + + spi_status_t status = spi_setupChipReg(spi, &spiOptions, FPBA_HZ); + if (status == SPI_ERROR_ARGUMENT) + WARN("Error configuring SPI\n"); + + // Disable all interrupts. + Disable_global_interrupt(); + + // Register the SPI interrupt handler to the interrupt controller. + INTC_register_interrupt((__int_handler)(&spi_int_handler), AVR32_SPI0_IRQ, AVR32_INTC_INT0); + + // Enable all interrupts. + Enable_global_interrupt(); + + ENABLE_SPI_INT(); + + spi_enable(spi); +#ifdef _SPI_STATS_ + initStatSpi(); +#endif + init_spi_cmds(ctx); + + memset(_receiveBuffer, 0, sizeof(_receiveBuffer)); + memset(buf, 0, sizeof(buf)); + memset(reply, 0, sizeof(reply)); + + initMapSockTcp(); + set_result(WL_IDLE_STATUS); + + init_pBuf(); + + return 0; +} + diff --git a/libraries/WiFi/extras/wifiHD/src/ard_spi.h b/libraries/WiFi/extras/wifiHD/src/ard_spi.h new file mode 100644 index 000000000..27ec33e81 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/ard_spi.h @@ -0,0 +1,88 @@ +/* + * ard_spi.h + * + * Created on: May 27, 2010 + * Author: mlf by Metodo2 srl + */ + +#ifndef ARD_SPI_H_ +#define ARD_SPI_H_ + +#include "lwip/netif.h" +#include "console.h" +#include "wl_definitions.h" + + +typedef enum { + SPI_CMD_IDLE, + SPI_CMD_INPUT, + SPI_CMD_DONE, + SPI_CMD_INPROGRESS, + SPI_CMD_REPLING, + SPI_CMD_FAIL, +} cmd_spi_state_t; + +typedef enum { + REPLY_ERR_GET, + REPLY_ERR_SET, + REPLY_ERR_CMD, + REPLY_ERR_MSG, + REPLY_NO_ERR, +} reply_err_t; + + +typedef enum { + CMD_GET_FLAG = 0x01, + CMD_SET_FLAG = 0x02, + CMD_IMM_SET_FLAG = 0x04, +}cmd_flags; + +typedef enum eProtMode {TCP_MODE, UDP_MODE}tProtMode; + +#define TIMEOUT_SPI 200 +#define SPI_ALIGN_ERROR 0xF0 +#define SPI_OVERRIDE_ERROR 0xF1 +#define SPI_TIMEOUT_ERROR 0xF2 +#define DUMMY_DATA 0xFF + +typedef int (*cmd_spi_cb_t)(int numParam, char* buf, void* ctx); +typedef cmd_spi_state_t (*cmd_spi_rcb_t)(char* recv, char* reply, void* ctx, uint16_t* _count); + +typedef struct eRemoteClient{ + uint32_t ipaddr; + uint16_t port; +}tRemoteClient; + +void set_result_cmd(int err) ; + +void set_result(wl_status_t _status); + +int initSpi(void* ctx); + +void initExtInt(); + +void spi_poll(struct netif* netif); + +int spi_slaveReceive(volatile avr32_spi_t *spi); + +void showTTCPstatus(); + +int getSock(void * _ttcp); + +void* getTTCP(uint8_t sock, uint8_t mode); + +void setMapSockMode(uint8_t sock, void* _ttcp, uint8_t _tcp_mode); + +void clearMapSockTcp(uint8_t sock, uint8_t mode); + +int start_server_tcp(uint16_t port, uint8_t sock, uint8_t protMode); + +int start_client_tcp(uint32_t _addr, uint16_t port, uint8_t sock, uint8_t protMode); + +void setRemoteClient(uint16_t sock, uint32_t _ipaddr, uint16_t _port); + +tRemoteClient* getRemoteClient(uint16_t sock); + +void getRemoteData(uint8_t sock, uint8_t mode, tRemoteClient* remoteData); + +#endif /* ARD_SPI_H_ */ diff --git a/libraries/WiFi/extras/wifiHD/src/ard_tcp.c b/libraries/WiFi/extras/wifiHD/src/ard_tcp.c new file mode 100644 index 000000000..0a73b200d --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/ard_tcp.c @@ -0,0 +1,987 @@ +/* + * ard_tcp.c + * + * Created on: May 27, 2010 + * Author: mlf by Metodo2 srl + */ + +//#define _APP_DEBUG_ +#include "lwip/opt.h" + +#include "lwip/mem.h" +#include "lwip/raw.h" +#include "lwip/icmp.h" +#include "lwip/netif.h" +#include "lwip/sys.h" +#include "lwip/sockets.h" +#include "lwip/inet.h" +#include "lwip/inet_chksum.h" +#include "lwip/tcp.h" +#include "lwip/udp.h" + +#include "ard_tcp.h" +#include "ard_spi.h" +#include "timer.h" +#include "util.h" + +#include "getopt.h" +#include "ard_utils.h" +#include "debug.h" +#include "trace.h" + +unsigned int startTime = 0; +extern bool ifStatus; + +static err_t tcp_data_sent(void *arg, struct tcp_pcb *pcb, u16_t len); + +static void atcp_init_pend_flags(struct ttcp* _ttcp) +{ + int i = 0; + for (; ipending_close[i] = false; + } +} + +/** + * Clean up and free the ttcp structure + */ +static void ard_tcp_destroy(struct ttcp* ttcp) { + err_t err = ERR_OK; + DUMP_TCP_STATE(ttcp); + + uint8_t sock = getSock(ttcp); + if (sock == -1) + WARN("ttcp already deallocated!\n"); + + freeAllTcpData(sock); + int i = 0; + for (; itpcb[i]) { + tcp_arg(ttcp->tpcb[i], NULL); + tcp_sent(ttcp->tpcb[i], NULL); + tcp_recv(ttcp->tpcb[i], NULL); + tcp_err(ttcp->tpcb[i], NULL); + //TEMPORAQARY + //err = tcp_close(ttcp->tpcb); + INFO_TCP("Closing tpcb: state:0x%x err:%d\n", ttcp->tpcb[i]->state, err); + } + } + + if (ttcp->lpcb) { + tcp_arg(ttcp->lpcb, NULL); + tcp_accept(ttcp->lpcb, NULL); + err = tcp_close(ttcp->lpcb); + INFO_TCP("Closing lpcb: state:0x%x err:%d\n", ttcp->lpcb->state, err); + } + + if (ttcp->upcb) { + udp_disconnect(ttcp->upcb); + udp_remove(ttcp->upcb); + } + + FREE_PAYLOAD(ttcp); + free(ttcp); +} + +/** + * Invoked when transfer is done or aborted (non-zero result). + */ +static void ard_tcp_done(struct ttcp* ttcp, int result) { +// if (result == 0) +// ard_tcp_print_stats(ttcp); + + if (ttcp->done_cb) + ttcp->done_cb(ttcp->opaque, result); + + ard_tcp_destroy(ttcp); + clearMapSockTcp(getSock(ttcp), GET_TCP_MODE(ttcp)); +} + +/** + * Only used in TCP mode. + * Will transmit a maximum of pbuf->tot_len bytes. + * Called upon connect and when there's space available in the TCP send window + * + */ +static err_t tcp_send_data_pcb(struct ttcp *ttcp, struct tcp_pcb *pcb) { + err_t err = ERR_OK; + uint32_t len; + + GET_CLIENT_ID(ttcp, pcb); + + len = ttcp->left[id]; + ttcp->buff_sent[id] = 0; + + if (len == 0) return ERR_MEM; + + INFO_TCP_VER("left=%d len:%d\n", ttcp->left[id], len); + + /* don't send more than we have in the payload */ + if (len > ttcp->buflen) + len = ttcp->buflen; + + /* We cannot send more data than space available in the send + buffer. */ + if (len > tcp_sndbuf(pcb)) + len = tcp_sndbuf(pcb); + + IF_TCP(startTime = timer_get_ms()); + err = tcp_write(pcb, ttcp->payload[id], len, TCP_WRITE_FLAG_COPY); + if (err != ERR_OK) + { + INFO_TCP("tcp_write failed %p state:%d len:%d err:%d\n", + pcb, pcb->state, len, err); + ttcp->buff_sent[id] = 0; + }else{ + ttcp->buff_sent[id] = 1; + ttcp->left[id] -= len; + } + + return err; +} + + +/** + * Only used in TCP mode. + */ +static err_t tcp_connect_cb(void *arg, struct tcp_pcb *tpcb, err_t err) { + struct ttcp* _ttcp = arg; + + if (_ttcp == NULL) return ERR_ARG; + + GET_CLIENT_ID(_ttcp, tpcb); + INFO_TCP("TTCP [%p-%p]: connect %d %d\n", _ttcp, tpcb, err, tpcb->state); + + _connected = ( tpcb->state == ESTABLISHED) ? 1 : 0; + _ttcp->tcp_poll_retries[id] = 0; + + _ttcp->start_time = timer_get_ms(); + + return ERR_OK; +} + +static void cleanSockState_cb(void *ctx) { + struct ttcp* _ttcp = ctx; + + if (_ttcp == NULL) return; + + int sock = getSock(_ttcp); + if (sock != -1) + clearMapSockTcp(sock, GET_TCP_MODE(_ttcp)); + INFO_TCP("TTCP [%p]: cleanSockState_cb %d\n", _ttcp, sock); + _connected = false; +} + +/** + * Only used in TCP mode. + */ + +static err_t close_conn_pcb(struct tcp_pcb* tpcb) { + + err_t err = tcp_close(tpcb); + if (err== ERR_OK) + { + tcp_arg(tpcb, NULL); + tcp_sent(tpcb, NULL); + tcp_recv(tpcb, NULL); + } + + INFO_TCP("Closing tpcb[%p]: state:0x%x err:%d\n", tpcb, tpcb->state, err); + return err; +} + +static void atcp_conn_err_cb(void *arg, err_t err) { + struct ttcp* _ttcp = arg; + + WARN("TTCP [%p]: connection error: %d currId:%d\n", + _ttcp, err, getCurrClientConnId()); + + if (ifStatus == false) + printk("Abort connection\n"); + + if (err == ERR_ABRT) + { + removeNewClientConn(_ttcp, GET_CURR_PCB(_ttcp)); + FREE_PAYLOAD_ID(_ttcp, getCurrClientConnId()); + } +} + +static void atcp_conn_cli_err_cb(void *arg, err_t err) { + struct ttcp* _ttcp = arg; + + if (_ttcp == NULL) return; + + WARN("TTCP [%p]: connection error: %d arg:%p\n", + _ttcp, err, arg); + + if (ifStatus == false) + printk("Abort connection\n"); + + if ((_ttcp)&&(err == ERR_ABRT)) + { + WARN("TTCP [%p]: free memory\n", _ttcp); + cleanSockState_cb(_ttcp); + // TODO + FREE_PAYLOAD(_ttcp); + } + + //atcp_init_pend_flags(_ttcp); +} + +static err_t close_conn(struct ttcp *_ttcp, struct tcp_pcb* tpcb) { + + if (_ttcp == NULL) return ERR_MEM; + + GET_CLIENT_ID(_ttcp, tpcb); + + err_t err = close_conn_pcb(_ttcp->tpcb[id]); + + if (err == ERR_MEM) + { + WARN("Cannot close id:%d-%p put pending\n", id, _ttcp->tpcb[id]); + _ttcp->pending_close[id] = true; + } + else{ + _ttcp->pending_close[id] = false; + removeNewClientConn(_ttcp, _ttcp->tpcb[id]); + FREE_PAYLOAD_ID(_ttcp, id); + INFO_TCP("----------------------\n"); + } + return err; +} + +void closeConnections() +{ + int ii=0; + for (; iiudp == TCP_MODE) + { + ard_tcp_destroy(_ttcp); + clearMapSockTcp(getSock(_ttcp), GET_TCP_MODE(_ttcp)); + } + } + } + } +} + +/** + * Only used in TCP mode. + */ +static err_t atcp_recv_cb(void *arg, struct tcp_pcb *pcb, struct pbuf *p, + err_t err) { + struct ttcp* ttcp = arg; + + if (err == ERR_OK && p != NULL) { + DATA_LED_ON(); + /* for print_stats() */ + ttcp->recved += p->tot_len; + + if ((ttcp->verbose)||(verboseDebug & INFO_TCP_FLAG)) { + INFO_TCP("len:%d\n",p->tot_len); + DUMP_TCP(p->payload, p->tot_len); + ttcp->print_cnt++; + } + + uint8_t* pBufferStore = insert_pBuf(p, ttcp->sock, (void*) pcb); + INFO_TCP("sock:%d pcb:%p pbuf:%p err:%d bufStore:%p len:%d\n", + ttcp->sock, pcb, p, err, pBufferStore, p->tot_len); + pbuf_free(p); + DATA_LED_OFF(); + } + + /* p will be NULL when remote end is done */ + if (err == ERR_OK && p == NULL) { + INFO_TCP("atcp_recv_cb p=NULL on sock:%d pcb:%p\n", ttcp->sock, pcb); + close_conn(ttcp, pcb); + } + + if (err!=ERR_OK) + WARN("err=%d p=%p\n", err, p); + return ERR_OK; +} + +void ack_recved(void* pcb, int len) { + // Comment the call because it is activated on atcp_recv_cb + INFO_TCP("Received %p len:%d\n", pcb, len); + tcp_recved(pcb, len); +} + +static err_t atcp_poll(void *arg, struct tcp_pcb *pcb) { + struct ttcp* _ttcp = arg; + + if (_ttcp == NULL) return ERR_ARG; + + GET_CLIENT_ID(_ttcp, pcb); + + if (_ttcp->left[id]>0) + ++_ttcp->tcp_poll_retries[id]; + + if (_ttcp->tcp_poll_retries[id] > 4) { + WARN("ARD TCP [%p] arg=%p retries=%d abort\n", + pcb, arg, _ttcp->tcp_poll_retries[id]); + _ttcp->tcp_poll_retries[id] = 0; + tcp_abort(pcb); + _ttcp->pending_close[id] = false; + return ERR_ABRT; + } + + if (pcb) + INFO_TCP_POLL("keepAliveCnt:%d keep_idle:%d persist_cnt:%d\n", + pcb->keep_cnt_sent, pcb->keep_idle, pcb->persist_cnt); + + if (_ttcp->left[id] > 0) + INFO_TCP("ARD TCP [%p-%p] arg=%p retries=%d pend.close:%d len:%d\n", + (_ttcp)?GET_FIRST_CLIENT_TCP(_ttcp):0, pcb, arg, + _ttcp->tcp_poll_retries[id], _ttcp->pending_close[id], (_ttcp)?_ttcp->left[id]:0); + tcp_send_data_pcb(_ttcp, pcb); + + if (_ttcp->pending_close[id]) + { + err_t err = ERR_OK; + if (id >=0){ + err = tcp_close(pcb); + if (err == ERR_MEM) + { + _ttcp->pending_close[id] = true; + } + else + { + _ttcp->pending_close[id] = false; + removeNewClientConn(_ttcp, _ttcp->tpcb[id]); + FREE_PAYLOAD_ID(_ttcp, id); + INFO_TCP("----------------------\n"); + } + } + INFO_TCP("ARD TCP [%p-%p] try to close pending:%d err:%d id:%d\n", pcb, + (_ttcp)?GET_FIRST_CLIENT_TCP(_ttcp):0, _ttcp->pending_close[id], err, id); + } + return ERR_OK; +} + +static err_t atcp_poll_conn(void *arg, struct tcp_pcb *pcb) { + struct ttcp* _ttcp = arg; + + if (_ttcp == NULL) return ERR_ARG; + + GET_CLIENT_ID(_ttcp, pcb) + + INFO_TCP_POLL("ARD TCP [%p-%p] arg=%p retries=%d pend.close:%d conn:%d\n", + (_ttcp)?GET_FIRST_CLIENT_TCP(_ttcp):0, pcb, arg, + _ttcp->tcp_poll_retries[id], _ttcp->pending_close[id], _connected); + + if (id != NO_VALID_ID) + { + if (_ttcp->pending_close[id]) + ++(_ttcp->tcp_poll_retries[id]); + } + + if (_ttcp->tcp_poll_retries[id] > 8) { + WARN("ARD TCP [%p-%p] arg=%p retries=%d\n", + pcb, GET_FIRST_CLIENT_TCP(_ttcp), arg, _ttcp->tcp_poll_retries[id]); + _ttcp->tcp_poll_retries[id] = 0; + tcp_abort(pcb); + return ERR_ABRT; + } + + if ((_ttcp)&&(_connected)) tcp_send_data_pcb(_ttcp, pcb); + + if ((id != NO_VALID_ID) && (_ttcp->pending_close[id])) + { + err_t err = tcp_close(pcb); + if (err == ERR_MEM) + { + _ttcp->pending_close[id] = true; + } + else + { + cleanSockState_cb(_ttcp); + FREE_PAYLOAD_ID(_ttcp, id); + _ttcp->pending_close[id] = false; + } + + INFO_TCP("ARD TCP [%p-%p] try to close pending:%d\n", pcb, (_ttcp)?GET_FIRST_CLIENT_TCP(_ttcp):0, _ttcp->pending_close[id]); + } + return ERR_OK; +} + +int8_t currConnId = 0; + +int8_t getCurrClientConnId() { return currConnId;} + +int8_t getNewClientConnId(struct ttcp* _ttcp, struct tcp_pcb *newpcb) +{ + if (_ttcp != NULL){ + int i = 0; + for (; itpcb[idx] == newpcb) + { + INFO_TCP_VER("ttcp:%p id=%d, tpcb=%p\n", _ttcp, idx, newpcb); + return idx; + } + } + } + WARN("No Valid Id for ttcp:%p pcb:%p\n", _ttcp, newpcb); + return NO_VALID_ID; +} + +struct tcp_pcb * getFirstClient(struct ttcp* _ttcp, bool verbose) +{ + if (_ttcp != NULL){ + int i = 0; + for (; itpcb[idx] != NULL) + { + if (verbose) INFO_TCP("ttcp:%p id=%d, tpcb=%p\n", _ttcp, idx, _ttcp->tpcb[idx]); + currConnId = idx; + return _ttcp->tpcb[idx]; + } + } + } + if (verbose) WARN("No Valid client for ttcp:%p\n", _ttcp); + return NULL; +} + + +int8_t setNewClientConn(struct ttcp* _ttcp, struct tcp_pcb *newpcb, uint8_t id) +{ + if ((_ttcp != NULL)&&(id>=0)&&(idtpcb[id] = newpcb; + return id; + } + return NO_VALID_ID; +} + +int8_t insertNewClientConn(struct ttcp* _ttcp, struct tcp_pcb *newpcb) +{ + if (_ttcp != NULL){ + int i = 0; + for (; itpcb[idx] == NULL)||(_ttcp->tpcb[idx] == newpcb)) + { + INFO_TCP("ttcp:%p id=%d, tpcb=%p\n", _ttcp, idx, newpcb); + _ttcp->tpcb[idx] = newpcb; + return idx; + } + } + } + return NO_VALID_ID; +} + +int8_t removeNewClientConn(struct ttcp* _ttcp, struct tcp_pcb *newpcb) +{ + if (_ttcp != NULL){ + int i = 0; + for (; itpcb[idx] == newpcb) + { + INFO_TCP("ttcp:%p id=%d, tpcb=%p\n", _ttcp, idx, newpcb); + _ttcp->tpcb[idx] = NULL; + return idx; + } + } + } + return NO_VALID_ID; +} + +bool cleanNewClientConn(struct ttcp* _ttcp) +{ + if (_ttcp != NULL){ + int i = 0; + for (; itpcb[i] = NULL; + return true; + } + return false; +} + + +/** + * Only used in TCP mode. + */ +static err_t atcp_accept_cb(void *arg, struct tcp_pcb *newpcb, err_t err) { + struct ttcp* _ttcp = arg; + + if (_ttcp == NULL) return ERR_ARG; + + INFO_TCP("ARD TCP [%p]: accept new [%p]\n", _ttcp, newpcb); + INFO_TCP("local:%d remote:%d state:%d\n", newpcb->local_port, newpcb->remote_port, newpcb->state); + + int8_t id = insertNewClientConn(_ttcp, newpcb); + + ASSERT((_ttcp->payload[id]==NULL), "payload not freed!"); + _ttcp->payload[id] = malloc(_ttcp->buflen); + INFO_TCP("Alloc payload %d-%p\n", id, _ttcp->payload[id]); + if (_ttcp->payload[id] == NULL) { + WARN("TTCP [%p]: could not allocate payload\n", _ttcp); + return -1; + } + tcp_arg(_ttcp->tpcb[id], _ttcp); + tcp_recv(_ttcp->tpcb[id], atcp_recv_cb); + tcp_err(_ttcp->tpcb[id], atcp_conn_err_cb); + tcp_poll(_ttcp->tpcb[id], atcp_poll, 4); + // Copy the pointer to ttcp also to TRANSMIT mode for the clients connected to the server + int _sock = getSock(_ttcp); + if ((_sock != -1)&&(IS_VALID_SOCK(_sock))) + setMapSockMode(_sock, _ttcp, TTCP_MODE_TRANSMIT); + _ttcp->start_time = timer_get_ms(); + return ERR_OK; +} + +/** + * Start TCP transfer. + */ +static int atcp_start(struct ttcp* ttcp) { + err_t err = ERR_OK; + + struct tcp_pcb * p = tcp_new(); + + if (p == NULL) { + WARN("TTCP [%p]: could not allocate pcb\n", ttcp); + return -1; + } + + currConnId = 0; + tcp_arg(p, ttcp); + atcp_init_pend_flags(ttcp); + + if (ttcp->mode == TTCP_MODE_TRANSMIT) { + int8_t id = insertNewClientConn(ttcp, p); + ttcp->payload[id] = malloc(ttcp->buflen); + INFO_TCP("Alloc payload %d-%p\n", id, ttcp->payload[id]); + if (ttcp->payload[id] == NULL) { + WARN("TTCP [%p]: could not allocate payload\n", ttcp); + return -1; + } + + struct tcp_pcb * pcb = p; + tcp_err(pcb, atcp_conn_cli_err_cb); + tcp_recv(pcb, atcp_recv_cb); + tcp_sent(pcb, tcp_data_sent); + tcp_poll(pcb, atcp_poll_conn, 4); + _connected = false; + INFO_TCP("[tpcb]-%p payload:%p\n", pcb, ttcp->payload[id]); + DUMP_TCP_STATE(ttcp); + if (tcp_connect(pcb, &ttcp->addr, ttcp->port, tcp_connect_cb) + != ERR_OK) { + WARN("TTCP [%p]: tcp connect failed\n", ttcp); + return -1; + } + + } else { + INFO_TCP("BEFORE BIND ttcp:%p lpcb:%p pcb:%p\n", ttcp, ttcp->lpcb, GET_FIRST_CLIENT_TCP(ttcp)); + + err = tcp_bind(p, IP_ADDR_ANY, ttcp->port); + if (err != ERR_OK){ + WARN("TTCP [%p]: bind failed err=%d Port already used\n", ttcp, err); + return -1; + } + + ttcp->lpcb = tcp_listen(p); + if (ttcp->lpcb == NULL) { + WARN("TTCP [%p]: listen failed\n", ttcp); + return -1; + } + + DUMP_TCP_STATE(ttcp); + tcp_accept(ttcp->lpcb, atcp_accept_cb); + } + + return 0; +} + +/** + * Only used in UDP mode. Will finalize the ttcp process when an end marker + * is seen. + */ +static void audp_recv_cb(void *arg, struct udp_pcb *upcb, struct pbuf *p, + struct ip_addr *addr, u16_t port) { + struct ttcp* ttcp = arg; + + /* for print_stats() */ + ttcp->recved += p->tot_len; + DUMP(p->payload,p->tot_len); + if (ttcp->verbose) { + printk("."); + if (ttcp->print_cnt % 80 == 0) + printk("\n"); + ttcp->print_cnt++; + } + INFO_TCP("UDP Insert %p sock:%d addr:%s port:%d\n", p, ttcp->sock, + ip2str(*addr), port); + insert_pBuf(p, ttcp->sock, (void*) upcb); + setRemoteClient(ttcp->sock, addr->addr, port); + + pbuf_free(p); +} + +/** + * Start UDP transfer. + */ +static int udp_start(struct ttcp* ttcp) { + err_t err = ERR_OK; + ttcp->udp_end_marker_left = 5; + ttcp->upcb = udp_new(); + if (ttcp->upcb == NULL) { + WARN("TTCP [%p]: could not allocate pcb\n", ttcp); + return -1; + } + + INFO_TCP("%s, upcb:%p %s:%d\n", __FUNCTION__, ttcp->upcb, ip2str(ttcp->addr), ttcp->port); + if (ttcp->mode == TTCP_MODE_TRANSMIT) { + if (udp_connect(ttcp->upcb, &(ttcp->addr), ttcp->port) != ERR_OK) { + WARN("TTCP [%p]: udp connect failed\n", ttcp); + return -1; + } + udp_recv(ttcp->upcb, audp_recv_cb, ttcp); + } else { + /* bind to any IP address on port specified */ + err = udp_bind(ttcp->upcb, IP_ADDR_ANY, ttcp->port); + if (err!= ERR_OK) { + WARN("TTCP [%p]: bind failed err=%d Port already used\n", ttcp, err); + return -1; + } + // clear remote client data + setRemoteClient(ttcp->sock, 0, 0); + udp_recv(ttcp->upcb, audp_recv_cb, ttcp); + } + INFO_TCP("%s, loc:0x%x-%d rem:0x%x-%d\n", __FUNCTION__, + ttcp->upcb->local_ip.addr, ttcp->upcb->local_port, + ttcp->upcb->remote_ip.addr, ttcp->upcb->remote_port); + return 0; +} + +/** + * Start a new ttcp transfer. It should be possible to call this function + * multiple times in order to get multiple ttcp streams. done_cb() will be + * invoked upon completion. + * + */ +int ard_tcp_start(struct ip_addr addr, uint16_t port, void *opaque, + ard_tcp_done_cb_t *done_cb, int mode, uint16_t nbuf, uint16_t buflen, + int udp, int verbose, uint8_t sock, void** _ttcp) { + struct ttcp* ttcp; + int status; + + if (mode != TTCP_MODE_TRANSMIT && mode != TTCP_MODE_RECEIVE) { + WARN("TTCP [-]: invalid mode\n"); + return -1; + } + + if (nbuf == 0) { + WARN("TTCP [-]: invalid nbuf\n"); + return -1; + } + + if (buflen == 0) { + WARN("TTCP [-]: invalid buflen\n"); + return -1; + } + + ttcp = calloc(1, sizeof(struct ttcp)); + if (ttcp == NULL) { + WARN("TTCP [-]: could not allocate memory for ttcp\n"); + return -1; + } + + ttcp->addr = addr; + ttcp->port = port; + ttcp->nbuf = nbuf; + ttcp->mode = mode; + ttcp->done_cb = done_cb; + ttcp->opaque = opaque; + ttcp->udp = udp; + ttcp->verbose = verbose; + ttcp->buflen = buflen; + cleanNewClientConn(ttcp); + + if (ttcp->udp) + status = udp_start(ttcp); + else + status = atcp_start(ttcp); + + if (status) { + WARN("Start server FAILED!\n"); + goto fail; + } + INFO_TCP("TTCP [%p-%p]: nbuf=%d, buflen=%d, port=%d (%s/%s)\n", ttcp, + ((ttcp->udp==1)?(void*)ttcp->upcb:GET_FIRST_CLIENT_TCP(ttcp)), ttcp->nbuf, ttcp->buflen, + ttcp->port, ProtMode2Str(ttcp->udp), Mode2Str(ttcp->mode)); + + *_ttcp = (void*) ttcp; + ttcp->sock = sock; + + return 0; + + fail: ard_tcp_destroy(ttcp); + return -1; +} + +void ard_tcp_stop(void* ttcp) { + struct ttcp* _ttcp = (struct ttcp*) ttcp; + if (_ttcp == NULL) + { + WARN("ttcp = NULL!\n"); + return; + } + if (_ttcp->mode == TTCP_MODE_TRANSMIT) { + int i = getCurrClientConnId(); + ard_tcp_destroy(_ttcp); + clearMapSockTcp(getSock(_ttcp), GET_TCP_MODE(_ttcp)); + _ttcp->tcp_poll_retries[i] = 0; + }else{ + DUMP_TCP_STATE(_ttcp); + + int i = getCurrClientConnId(); + if ((_ttcp)&&(_ttcp->tpcb[i])&&(_ttcp->tpcb[i]->state!=LAST_ACK)&&(_ttcp->tpcb[i]->state!=CLOSED)) + { + // Flush all the data + err_t err=tcp_output(_ttcp->tpcb[i]); + INFO_TCP("flush data: tpcb:%p err:%d\n", _ttcp->tpcb[i], err); + // if any socket cannot be close stop the close connection + close_conn(_ttcp, _ttcp->tpcb[i]); + } + } +} + +uint8_t getStateTcp(void* p, bool client) { + struct ttcp* _ttcp = (struct ttcp*) p; + + if (ifStatus == false) + return CLOSED; + struct tcp_pcb * pcb = GET_FIRST_CLIENT_TCP_NV(_ttcp); + if ((_ttcp != NULL) && ((pcb != NULL) || (client==0))) { + IF_SPI_POLL(DUMP_TCP_STATE(_ttcp)); + if (client) + { + if ((pcb->state != ESTABLISHED)&&(pcb->state != CLOSED)) + DUMP_TCP_STATE(_ttcp); + return pcb->state; + } + else + { + return _ttcp->lpcb->state; + } + } else { + WARN_POLL("TCP not initialized ttcp:%p tpcb:%p lpcb:%p\n", + _ttcp, ((_ttcp)?pcb:0), ((_ttcp)?_ttcp->lpcb:0)); + } + return CLOSED; +} + +uint8_t getModeTcp(void* p) { + struct ttcp* _ttcp = (struct ttcp*) p; + + if (_ttcp != NULL) + return _ttcp->mode; + return 0; +} + +uint8_t isDataSent(void* p) { + struct ttcp *_ttcp = (struct ttcp *)p; + + int8_t id = getCurrClientConnId(); + if ((_ttcp)&&(!_ttcp->buff_sent[id])) + { + return 0; + } + + return 1; +} + +static err_t tcp_data_sent(void *arg, struct tcp_pcb *pcb, u16_t len) { + struct ttcp *_ttcp; + + LWIP_UNUSED_ARG(len); + + _ttcp = arg; + + if (_ttcp == NULL) return ERR_ARG; + + GET_CLIENT_ID(_ttcp, pcb); + _ttcp->tcp_poll_retries[id] = 0; + _ttcp->buff_sent[id] = 1; + + INFO_TCP("Packet sent pcb:%p len:%d dur:%d left:%d\n", pcb, len, timer_get_ms() - startTime, + (_ttcp)?(_ttcp->left[id]):0); + + if ((_ttcp)&&(_ttcp->left[id] > 0)) { + tcp_send_data_pcb(_ttcp, pcb); + } + + return ERR_OK; +} + +int sendTcpData(void* p, uint8_t* buf, uint16_t len) +{ + struct ttcp* _ttcp = (struct ttcp*) p; + + if (_ttcp==NULL) + { + WARN("ttcp == NULL!\n"); + return WL_FAILURE; + } + + struct tcp_pcb * pcb = GET_FIRST_CLIENT_TCP_NV(_ttcp); + GET_CLIENT_ID(_ttcp, pcb); + + INFO_TCP_VER("ttcp:%p pcb:%p buf:%p len:%d\n", _ttcp, pcb, buf, len); + DUMP_TCP(buf,len); + IF_TCP_VER(DUMP_TCP_STATE(_ttcp)); + + if ((_ttcp != NULL) && (pcb != NULL) && + (buf != NULL) && (len != 0) && (_ttcp->payload[id] != NULL)) { + if (pcb->state == ESTABLISHED || pcb->state == CLOSE_WAIT || + pcb->state == SYN_SENT || pcb->state == SYN_RCVD) { + + memcpy(_ttcp->payload[id], buf, len); + _ttcp->payload[id][len]='\0'; + INFO_TCP_VER("'%s'\n", _ttcp->payload[id]); + _ttcp->left[id] = len; + tcp_sent(pcb, tcp_data_sent); + tcp_send_data_pcb(_ttcp, pcb); + + return WL_SUCCESS; + } + } + //printk("Write failure _ttcp=%p _ttcp->tpcb=%p buf=%p len=%d\n", _ttcp, _ttcp->tpcb, buf, len); + return WL_FAILURE; +} + +int sendUdpData(void* ttcp, uint8_t* buf, uint16_t len) { + struct ttcp* _ttcp = (struct ttcp*) ttcp; + if ((_ttcp != NULL) && (buf != NULL) && (len != 0)) + { + INFO_TCP("buf:%p len:%d\n", buf, len); + DUMP_TCP(buf,len); + }else{ + return WL_FAILURE; + } + + struct pbuf* p = pbuf_alloc(PBUF_TRANSPORT, len, PBUF_RAM); + if (p == NULL) { + WARN("TTCP [%p]: could not allocate pbuf\n", ttcp); + return WL_FAILURE; + } + memcpy(p->payload, buf, len); + if (udp_send(_ttcp->upcb, p) != ERR_OK) { + WARN("TTCP [%p]: udp_send() failed\n", _ttcp); + pbuf_free(p); + return WL_FAILURE; + } + + pbuf_free(p); + return WL_SUCCESS; +} + + + +char + usage[] = + "Usage: ttcp -t/-r [-options] host\n\ + -l length of bufs written to network (default 1024)\n\ + -n number of bufs written to network (default 1024)\n\ + -p port number to send to (default 2000)\n\ + -u udp\n\ + -v verbose\n"; + +/** + * + */ +cmd_state_t cmd_ttcp(int argc, char* argv[], void* ctx) { + + int c; + int mode = TTCP_MODE_TRANSMIT; + int verbose = 0; + uint16_t buflen = 1024; + uint16_t nbuf = 1024; + uint16_t port = 2000; + int udp = 0; + struct ip_addr addr = { 0 }; + + optind = 1; + while ((c = getopt(argc, argv, "utrl:n:p:v")) != -1) { + switch (c) { + case 't': + mode = TTCP_MODE_TRANSMIT; + break; + case 'r': + mode = TTCP_MODE_RECEIVE; + break; + case 'l': + buflen = atoi(optarg); + break; + case 'v': + verbose = 1; + break; + case 'n': + nbuf = atoi(optarg); + break; + case 'u': + udp = 1; + break; + case 'p': + port = atoi(optarg); + break; + } + } + + if (mode == TTCP_MODE_TRANSMIT) { + if (optind >= argc) { + printk("%s", usage); + return CMD_DONE; + } + + addr = str2ip(argv[optind]); + if (!addr.addr) { + printk("%s", usage); + return CMD_DONE; + } + } + void* _ttcp = NULL; + if (ard_tcp_start(addr, port, NULL, NULL, mode, nbuf, buflen, udp, verbose, + 0, &_ttcp)) + return CMD_DONE; + + return CMD_DONE; +} + + +#if 0 +#include "lwip/sockets.h" + +void testlwip() +{ + int Sock; + fd_set fdsetR; + FD_ZERO(&fdsetR); + FD_SET(Sock, &fdsetR); + fd_set fdsetE = fdsetR; + + int rc; + const int cMillies = 10000; + struct timeval timeout; + timeout.tv_sec = cMillies / 1000; + timeout.tv_usec = (cMillies % 1000) * 1000; + //rc = lwip_select(Sock + 1, &fdsetR, NULL, &fdsetE, &timeout); +} +#endif diff --git a/libraries/WiFi/extras/wifiHD/src/ard_tcp.h b/libraries/WiFi/extras/wifiHD/src/ard_tcp.h new file mode 100644 index 000000000..078e0b0c5 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/ard_tcp.h @@ -0,0 +1,124 @@ +/* + * ard_tcp.h + * + * Created on: May 27, 2010 + * Author: mlf by Metodo2 srl + */ + +#ifndef ARD_TCP_H +#define ARD_TCP_H + +#include "console.h" +#include "lwip/tcp.h" + +typedef void (ard_tcp_done_cb_t)(void *opaque, int result); + +#define TTCP_MODE_TRANSMIT 0 +#define TTCP_MODE_RECEIVE 1 +#define MAX_MODE_NUM 2 + +#define GET_TCP_MODE(X) ((X!=NULL)?((struct ttcp*)(X))->mode:0) +#define IS_VALID_SOCK(SOCK) ((SOCK>=0)&&(SOCKudp:0) + +// Maximum number of client connection accepted by server +#define MAX_CLIENT_ACCEPTED 4 +#define NO_VALID_ID 0xff + +#define GET_FIRST_CLIENT_TCP(TTCP) getFirstClient(TTCP, 1) +#define GET_FIRST_CLIENT_TCP_NV(TTCP) getFirstClient(TTCP, 0) +#define GET_CLIENT_TCP(TTCP,ID) (((TTCP!=NULL)&&(ID>=0)&&(IDtpcb[ID] : NULL) +#define GET_CLIENT_ID(TTCP, PCB) uint8_t id = NO_VALID_ID; do { \ + id = getNewClientConnId(TTCP, PCB); \ + if (id == NO_VALID_ID) return ERR_MEM; \ + }while(0); +#define GET_IDX_CONN(I) ((I+currConnId)payload[id]); \ + if (TTCP->payload[id]) { \ + free(TTCP->payload[id]); \ + TTCP->payload[id] = NULL; } \ +}while(0); + +#define FREE_PAYLOAD_ID(TTCP,ID) do { \ + INFO_TCP("Freeing payload %d-%p\n", ID, TTCP->payload[ID]); \ + if (TTCP->payload[ID]) { \ + free(TTCP->payload[ID]); \ + TTCP->payload[ID] = NULL; } \ +}while(0); + + +typedef struct ttcp { + + /* options */ + struct ip_addr addr; /* host */ + uint16_t port; /* -p */ + uint16_t nbuf; /* -n */ + int mode; /* -t */ + int verbose; /* -v */ + int udp; /* -u */ + uint8_t sock; + uint8_t buff_sent[MAX_CLIENT_ACCEPTED]; + + /* common */ + uint16_t print_cnt; + uint32_t start_time; + uint32_t left[MAX_CLIENT_ACCEPTED]; + uint32_t recved; + ard_tcp_done_cb_t* done_cb; + void* opaque; + uint32_t buflen; /* -l */ + uint32_t tid; + + /* TCP specific */ + struct tcp_pcb* tpcb[MAX_CLIENT_ACCEPTED]; + struct tcp_pcb* lpcb; + char* payload[MAX_CLIENT_ACCEPTED]; + uint8_t tcp_poll_retries[MAX_CLIENT_ACCEPTED]; + bool pending_close[MAX_CLIENT_ACCEPTED]; + + /* UDP specific */ + int udp_started; + uint16_t udp_end_marker_left; + struct udp_pcb* upcb; +}ttcp_t; + +bool _connected; + +int ard_tcp_start(struct ip_addr addr, uint16_t port, void *opaque, + ard_tcp_done_cb_t *done_cb, int mode, uint16_t nbuf, uint16_t buflen, int udp, int verbose, uint8_t sock, void** _ttcp); + +void ard_tcp_stop(void* ttcp); + +uint8_t getStateTcp(void* p, bool client ); + +uint8_t getModeTcp(void* p); + +int sendTcpData(void* p, uint8_t* buf, uint16_t len); + +int sendUdpData(void* p, uint8_t* buf, uint16_t len); + +uint8_t isDataSent(void* p ); + +cmd_state_t cmd_ttcp(int argc, char* argv[], void* ctx); + +int8_t setNewClientConn(struct ttcp* _ttcp, struct tcp_pcb *newpcb, uint8_t id); + +int8_t insertNewClientConn(struct ttcp* _ttcp, struct tcp_pcb *newpcb); + +int8_t removeNewClientConn(struct ttcp* _ttcp, struct tcp_pcb *newpcb); + +bool cleanNewClientConn(struct ttcp* _ttcp); + +int8_t getNewClientConnId(struct ttcp* _ttcp, struct tcp_pcb *newpcb); + +int8_t getCurrClientConnId(); + +struct tcp_pcb * getFirstClient(struct ttcp* _ttcp, bool verbose); + +void closeConnections(); + +#endif diff --git a/libraries/WiFi/extras/wifiHD/src/ard_utils.c b/libraries/WiFi/extras/wifiHD/src/ard_utils.c new file mode 100644 index 000000000..c2937d897 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/ard_utils.c @@ -0,0 +1,347 @@ +/* + * ard_utils.c + * + * Created on: Jul 4, 2010 + * Author: mlf by Metodo2 srl + */ +//#define _APP_DEBUG_ + +#include "lwip/pbuf.h" +#include "wifi_spi.h" +#include "ard_utils.h" +#include "debug.h" +#include "ard_spi.h" +#include "ard_tcp.h" + +#define MAX_PBUF_STORED 30 + +tData pBufStore[MAX_PBUF_STORED][MAX_SOCK_NUM]; + +unsigned char headBuf[MAX_SOCK_NUM] = {0}; +unsigned char tailBuf[MAX_SOCK_NUM] = {0}; + +#define IS_BUF_AVAIL(x) (tailBuf[x] != headBuf[x]) +#define IS_BUF_EMPTY(x) ((tailBuf[x] == 0) && (headBuf[x] == 0)) + +void init_pBuf() +{ + memset(pBufStore, 0, sizeof(pBufStore)); +} + +uint8_t* insertBuf(uint8_t sock, uint8_t* buf, uint16_t len) +{ + DUMP(buf,len); + if (sock>= MAX_SOCK_NUM) + { + WARN("Sock out of range: sock=%d", sock); + return NULL; + } + if (pBufStore[headBuf[sock]][sock].data != NULL) + { + WARN("Overwriting buffer %p idx:%d!\n", pBufStore[headBuf[sock]][sock].data, headBuf[sock]); + // to avoid memory leak free the oldest buffer + freetDataIdx(headBuf[sock], sock); + } + + u8_t* p = (u8_t*)calloc(len,sizeof(u8_t)); + if(p != NULL) { + memcpy(p, buf, len); + + pBufStore[headBuf[sock]][sock].data = p; + pBufStore[headBuf[sock]][sock].len = len; + pBufStore[headBuf[sock]][sock].idx = 0; + pBufStore[headBuf[sock]][sock].pcb = getTTCP(sock, TTCP_MODE_TRANSMIT); + headBuf[sock]++; + + if (headBuf[sock] == MAX_PBUF_STORED) + headBuf[sock] = 0; + if (headBuf[sock] == tailBuf[sock]) + { + WARN("Avoid to Overwrite data [%d-%d]!\n", headBuf[sock], tailBuf[sock]); + if (headBuf[sock] != 0) + --headBuf[sock]; + else + headBuf[sock] = MAX_PBUF_STORED-1; + } + INFO_UTIL("Insert[%d]: %p:%d-%d [%d,%d]\n", sock, p, len, p[0], headBuf[sock], tailBuf[sock]); + } + return p; +} + + +uint16_t calcMergeLen(uint8_t sock) +{ + uint16_t len = 0; + + unsigned char index = tailBuf[sock]; + do { + if (pBufStore[index][sock].data != NULL) + { + len += pBufStore[index][sock].len; + len -= pBufStore[index][sock].idx; + INFO_UTIL_VER(" [%d]: len:%d idx:%d tot:%d\n", sock, pBufStore[index][sock].len, pBufStore[index][sock].idx, len); + } + ++index; + if (index == MAX_PBUF_STORED) + index = 0; + }while (index!=headBuf[sock]); + return len; +} + +uint16_t clearBuf(uint8_t sock) +{ + uint16_t len = 0; + + unsigned char index = tailBuf[sock]; + do { + if (pBufStore[index][sock].data != NULL) + { + freetDataIdx(index,sock); + } + ++index; + if (index == MAX_PBUF_STORED) + index = 0; + }while (index!=headBuf[sock]); + tailBuf[sock]=index; + return len; +} + +uint8_t* mergeBuf(uint8_t sock, uint8_t** buf, uint16_t* _len) +{ + uint16_t len = calcMergeLen(sock); + uint8_t* p = (u8_t*)calloc(len,sizeof(u8_t)); + uint8_t* _p = p; + if(p != NULL) { + unsigned char index = tailBuf[sock]; + do { + if (pBufStore[index][sock].data != NULL) + { + memcpy(p, pBufStore[index][sock].data, pBufStore[index][sock].len); + p += pBufStore[index][sock].len; + } + ++index; + if (index == MAX_PBUF_STORED) + index = 0; + }while (index!=headBuf[sock]); + } + DUMP(_p,len); + if (buf != NULL) + *buf = _p; + if (_len != NULL) + *_len = len; + return _p; +} + +uint8_t* insert_pBuf(struct pbuf* q, uint8_t sock, void* _pcb) +{ + if (q == NULL) + return NULL; + + if (pBufStore[headBuf[sock]][sock].data != NULL) + { + WARN("Overwriting buffer %p idx:%d!\n", pBufStore[headBuf[sock]][sock].data, headBuf[sock]); + // to avoid memory leak free the oldest buffer + freetDataIdx(headBuf[sock], sock); + } + + u8_t* p = (u8_t*)calloc(q->tot_len,sizeof(u8_t)); + if(p != NULL) { + if (pbuf_copy_partial(q, p, q->tot_len,0) != q->tot_len) { + WARN("pbuf_copy_partial failed: src:%p, dst:%p, len:%d\n", q, p, q->tot_len); + free(p); + p = NULL; + return p; + } + + pBufStore[headBuf[sock]][sock].data = p; + pBufStore[headBuf[sock]][sock].len = q->tot_len; + pBufStore[headBuf[sock]][sock].idx = 0; + pBufStore[headBuf[sock]][sock].pcb = _pcb; + headBuf[sock]++; + + if (headBuf[sock] == MAX_PBUF_STORED) + headBuf[sock] = 0; + if (headBuf[sock] == tailBuf[sock]) + { + WARN("Avoid to Overwrite data [%d-%d]!\n", headBuf[sock], tailBuf[sock]); + if (headBuf[sock] != 0) + --headBuf[sock]; + else + headBuf[sock] = MAX_PBUF_STORED-1; + } + INFO_UTIL("Insert[%d]: %p:%d-%d [%d,%d]\n", sock, p, q->tot_len, p[0], headBuf[sock], tailBuf[sock]); + } + return p; +} + +void dumpPbuf(uint8_t sock) +{ + unsigned char index = tailBuf[sock]; + printk("headBuf=%d tailBuf=%d\n", headBuf[sock], tailBuf[sock]); + do { + if (pBufStore[index][sock].data != NULL) + { + printk("%d] pcb:%p Buf: %p Len:%d\n", pBufStore[index][sock].idx, pBufStore[index][sock].pcb, + pBufStore[index][sock].data, pBufStore[index][sock].len); + } + ++index; + if (index == MAX_PBUF_STORED) + index = 0; + }while (index!=headBuf[sock]); +} + +tData* get_pBuf(uint8_t sock) +{ + if (IS_BUF_EMPTY(sock)) + return NULL; + + if (IS_BUF_AVAIL(sock)) + { + tData* p = &(pBufStore[tailBuf[sock]][sock]); + INFO_UTIL_VER("%p [%d,%d]\n", p, headBuf[sock], tailBuf[sock]); + return p; + } + return NULL; +} + +void freetData(void * buf, uint8_t sock) +{ + if (buf==NULL) + { + WARN("Buf == NULL!"); + return; + } + + pBufStore[tailBuf[sock]][sock].data = NULL; + pBufStore[tailBuf[sock]][sock].len = 0; + pBufStore[tailBuf[sock]][sock].idx = 0; + pBufStore[tailBuf[sock]][sock].pcb = 0; + + if (++tailBuf[sock] == MAX_PBUF_STORED) + tailBuf[sock] = 0; + INFO_UTIL("%p [%d,%d]\n", buf, headBuf[sock], tailBuf[sock]); + free(buf); +} + +void freetDataIdx(uint8_t idxBuf, uint8_t sock) +{ + if (idxBuf >=MAX_PBUF_STORED) + { + WARN("idxBuf out of range: %d\n", idxBuf); + return; + } + + void * buf = pBufStore[idxBuf][sock].data; + + INFO_UTIL("%p idx:%d\n", buf, idxBuf); + + free(buf); + + pBufStore[idxBuf][sock].data = 0; + pBufStore[idxBuf][sock].len = 0; + pBufStore[idxBuf][sock].idx = 0; + pBufStore[idxBuf][sock].pcb = 0; +} + + +void ack_recved(void* pcb, int len); + +void ackAndFreeData(void* pcb, int len, uint8_t sock, uint8_t* data) +{ + INFO_TCP("Ack pcb:%p len:%d sock:%d data:%p\n", pcb, len, sock, data); + if (!IS_UDP_SOCK(sock)) + ack_recved(pcb, len); + if (data != NULL) + freetData(data, sock); +} + + +bool isAvailTcpDataByte(uint8_t sock) +{ + tData* p = get_pBuf(sock); + + if (p != NULL) + { + INFO_UTIL_VER("check:%d %d %p\n",p->idx, p->len, p->data); + if (p->idx == p->len) + { + INFO_UTIL("Free %p other buf %d tail:%d head:%d\n", + p->data, IS_BUF_AVAIL(sock), tailBuf[sock], headBuf[sock]); + ackAndFreeData(p->pcb, p->len, sock, p->data); + return (IS_BUF_AVAIL(sock)); + }else{ + return true; + } + } + return false; +} + +uint16_t getAvailTcpDataByte(uint8_t sock) +{ + uint16_t len = calcMergeLen(sock); + INFO_UTIL_VER("Availabled data: %d\n", len); + return len; +} + + +bool getTcpDataByte(uint8_t sock, uint8_t* payload, uint8_t peek) +{ + // ref field in struct pbuf has been used as index pointer for byte data + tData* p = get_pBuf(sock); + + if (p != NULL) + { + if (p->idx < p->len) + { + uint8_t* buf = (uint8_t*)p->data; + if (peek) + *payload = buf[p->idx]; + else + *payload = buf[p->idx++]; + INFO_UTIL_VER("get:%d %p %d\n",p->idx, p->data, *payload); + if (p->idx == p->len) + ackAndFreeData(p->pcb, p->len, sock, p->data); + return true; + }else{ + ackAndFreeData(p->pcb, p->len, sock, p->data); + } + } + return false; +} + +bool getTcpData(uint8_t sock, void** payload, uint16_t* len) +{ + tData* p = NULL; + p = get_pBuf(sock); + if (p != NULL) + { + *payload = p->data; + *len = p->len; + return true; + } + return false; +} + +bool freeTcpData(uint8_t sock) +{ + tData* p = NULL; + p = get_pBuf(sock); + if (p != NULL) + { + ackAndFreeData(p->pcb, p->len, sock, p->data); + return true; + } + return false; +} + +void freeAllTcpData(uint8_t sock) +{ + tData* p = NULL; + do{ + p = get_pBuf(sock); + if (p != NULL) + freetData(p->data, sock); + }while(p!=NULL); +} + + diff --git a/libraries/WiFi/extras/wifiHD/src/ard_utils.h b/libraries/WiFi/extras/wifiHD/src/ard_utils.h new file mode 100644 index 000000000..323b32833 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/ard_utils.h @@ -0,0 +1,295 @@ +/* + * ard_utils.h + * + * Created on: Jul 4, 2010 + * Author: mlf by Metodo2 srl + */ + +#ifndef ARD_UTILS_H_ +#define ARD_UTILS_H_ + +#include "gpio.h" +#include "debug.h" +#include "ARDUINO/arduino.h" +#define INIT_SIGNAL_FOR_SPI() gpio_disable_pin_pull_up(ARDUINO_HANDSHAKE_PIN); +#define BUSY_FOR_SPI() gpio_set_gpio_pin(ARDUINO_HANDSHAKE_PIN) +#define AVAIL_FOR_SPI() gpio_clr_gpio_pin(ARDUINO_HANDSHAKE_PIN) + +#define LED0_UP() gpio_set_gpio_pin(LED0_GPIO) +#define LED0_DN() gpio_clr_gpio_pin(LED0_GPIO) +#define LED0_TL() gpio_tgl_gpio_pin(LED0_GPIO) +#define LED1_UP() gpio_set_gpio_pin(LED1_GPIO) +#define LED1_DN() gpio_clr_gpio_pin(LED1_GPIO) +#define LED1_TL() gpio_tgl_gpio_pin(LED1_GPIO) +#define LED2_UP() gpio_set_gpio_pin(LED2_GPIO) +#define LED2_DN() gpio_clr_gpio_pin(LED2_GPIO) +#define LED2_TL() gpio_tgl_gpio_pin(LED2_GPIO) + +#ifdef _DEBUG_ +#define SIGN0_UP LED0_UP +#define SIGN0_DN LED0_DN +#define SIGN0_TL LED0_TL +#define SIGN1_UP LED1_UP +#define SIGN1_DN LED1_DN +#define SIGN1_TL LED1_TL +#define SIGN2_UP LED2_UP +#define SIGN2_DN LED2_DN +#define SIGN2_TL LED2_TL + +#define DEB_PIN_UP(X) gpio_set_gpio_pin(DEB##X##_PIN_GPIO) +#define DEB_PIN_DN(X) gpio_clr_gpio_pin(DEB##X##_PIN_GPIO) +#define DEB_PIN_ENA(X) gpio_enable_gpio_pin(DEB##X##_PIN_GPIO) +#define DEB_PIN_TOGGLE(X) gpio_tgl_gpio_pin(DEB##X##_PIN_GPIO) +#define DEB_PIN_TRIGGER(X) DEB_PIN_DN(X); DEB_PIN_UP(X); + + +#else +#define SIGN0_UP() +#define SIGN0_DN() +#define SIGN0_TL() +#define SIGN1_UP() +#define SIGN1_DN() +#define SIGN1_TL() +#define SIGN2_UP() +#define SIGN2_DN() +#define SIGN2_TL() + +#define DEB_PIN_UP(X) +#define DEB_PIN_DN(X) +#define DEB_PIN_ENA(X) +#define DEB_PIN_TOGGLE(X) +#define DEB_PIN_TRIGGER(X) + +//#define TOGGLE_SIG0 +#endif + +#define DELAY_450NS asm volatile("nop") +#define DELAY_1uS DELAY_450NS; DELAY_450NS; +#define TOGGLE_SIG0() SIGN0_UP(); DELAY_450NS;SIGN0_DN(); + + +#define LINK_LED_OFF LED0_UP +#define ERROR_LED_OFF LED1_UP +#define DATA_LED_OFF LED2_UP + +#define LINK_LED_ON LED0_DN +#define ERROR_LED_ON LED1_DN +#define DATA_LED_ON LED2_DN + +#define LINK_LED_BL LED0_TL +#define ERROR_LED_BL LED1_TL +#define DATA_LED_BL LED2_TL + + +#define CREATE_HEADER_REPLY(REPLY, RECV, NUM_PARAMS)\ + REPLY[0] = RECV[0]; \ + REPLY[1] = RECV[1] | REPLY_FLAG; \ + REPLY[2] = NUM_PARAMS; + +#define CREATE_HEADER_REPLY_WAIT(REPLY, RECV, NUM_PARAMS)\ + REPLY[0] = RECV[0]; \ + REPLY[1] = RECV[1] | WAIT_FLAG; \ + REPLY[2] = NUM_PARAMS; + + +#define END_HEADER_REPLY(REPLY, TOT_LEN, COUNT)\ + REPLY[TOT_LEN] = END_CMD; \ + REPLY[TOT_LEN+1] = 0; \ + COUNT=TOT_LEN+1; + +#define RETURN_ERR_REPLY(RECV,REPLY,COUNT) \ + {uint8_t err = 0; return ack_reply_cb(RECV,REPLY,&err,COUNT);} + +#define CHECK_ARD_NETIF(RECV,REPLY,COUNT) \ + if (ard_netif == NULL) \ + { uint8_t err = 0; return ack_reply_cb(RECV,REPLY,&err,COUNT); } + +#define PUT_LONG_IN_BYTE_HO(LONG, BYTE, IDX) { \ + uint32_t _long = LONG; \ + BYTE[IDX] = 4; \ + BYTE[IDX+1] = (uint8_t)(_long & 0xff); \ + BYTE[IDX+2] = (uint8_t)((_long & 0xff00)>>8); \ + BYTE[IDX+3] = (uint8_t)((_long & 0xff0000)>>16); \ + BYTE[IDX+4] = (uint8_t)((_long & 0xff000000)>>24); \ +} + +#define PUT_LONG_IN_BYTE_NO(LONG, BYTE, IDX) { \ + uint32_t _long = LONG; \ + BYTE[IDX] = 4; \ + BYTE[IDX+4] = (uint8_t)(_long & 0xff); \ + BYTE[IDX+3] = (uint8_t)((_long & 0xff00)>>8); \ + BYTE[IDX+2] = (uint8_t)((_long & 0xff0000)>>16); \ + BYTE[IDX+1] = (uint8_t)((_long & 0xff000000)>>24); \ +} + + +#define PUT_DATA_INT(INT, BYTE, IDX) { \ + uint16_t _int = INT; \ + BYTE[IDX] = 2; \ + BYTE[IDX+1] = (uint8_t)((_int & 0xff00)>>8); \ + BYTE[IDX+2] = (uint8_t)(_int & 0xff); \ +} + +#define PUT_DATA_INT_NO(INT, BYTE, IDX) { \ + uint16_t _int = INT; \ + BYTE[IDX] = 2; \ + BYTE[IDX+2] = (uint8_t)((_int & 0xff00)>>8); \ + BYTE[IDX+1] = (uint8_t)(_int & 0xff); \ +} + +#define PUT_DATA_BYTE(DATA, BYTE, IDX) { \ + BYTE[IDX] = 1; \ + BYTE[IDX+1] = (uint8_t)DATA; \ +} + +#define PUT_BUFDATA_BYTE(BUF, BUFLEN, BYTE, IDX) { \ + BYTE[IDX] = (uint8_t)(BUFLEN & 0xff); \ + uint16_t i = 0; \ + for (; i>8); \ + BYTE[IDX+1] = (uint8_t)(BUFLEN & 0xff); \ + uint16_t i = 0; \ + for (; iparamLen == LEN)) + +#define NEXT_PARAM(PARAM) \ + do { \ + if (PARAM!=NULL){ \ + PARAM=(tParam*)((uint8_t*)PARAM+PARAM->paramLen+1); \ + GET_PARAM_BYTE(PARAM, end) \ + if (end == END_CMD) WARN("End of cmd params", PARAM); \ + } \ + }while(0); + +#define GET_PARAM_LONG(PARAM, LONG) \ + uint32_t LONG = 0; \ + if CHECK_PARAM_LEN(PARAM, 4) { \ + tLongParam* s = (tLongParam*)PARAM; \ + LONG = s->param; \ + } + +#define GET_PARAM_INT(PARAM, INT) \ + uint16_t INT = 0; \ + if CHECK_PARAM_LEN(PARAM, 2) { \ + tIntParam* s = (tIntParam*)PARAM; \ + INT = s->param; \ + } + +#define GET_PARAM_BYTE(PARAM, BYTE) \ + uint8_t BYTE = 0; \ + if CHECK_PARAM_LEN(PARAM, 1) { \ + tByteParam* s = (tByteParam*)PARAM; \ + BYTE = s->param; \ + } + +#define GET_PARAM_NEXT(TYPE, PARAM, DATA) \ + GET_PARAM_##TYPE(PARAM, DATA) \ + NEXT_PARAM(PARAM) + +#ifdef _SPI_STATS_ +#define STATSPI_TIMEOUT_ERROR() \ + statSpi.timeoutIntErr++; \ + statSpi.rxErr++; \ + statSpi.lastError = SPI_TIMEOUT_ERROR; \ + statSpi.status = spi_getStatus(ARD_SPI); + +#define STATSPI_DISALIGN_ERROR() \ + statSpi.frameDisalign++; \ + statSpi.rxErr++; \ + statSpi.lastError = SPI_ALIGN_ERROR; \ + statSpi.status = spi_getStatus(ARD_SPI); + +#define STATSPI_OVERRIDE_ERROR() \ + statSpi.overrideFrame++; \ + statSpi.rxErr++; \ + statSpi.lastError = SPI_OVERRIDE_ERROR; \ + statSpi.status = spi_getStatus(ARD_SPI); + +#define STATSPI_TX_TIMEOUT_ERROR() \ + statSpi.timeoutErr++; \ + statSpi.txErr++; \ + statSpi.lastError = SPI_ERROR_TIMEOUT; \ + statSpi.status = spi_getStatus(ARD_SPI); +#else +#define STATSPI_TIMEOUT_ERROR() +#define STATSPI_TX_TIMEOUT_ERROR() +#define STATSPI_DISALIGN_ERROR() +#define STATSPI_OVERRIDE_ERROR() +#endif + +#define DUMP_TCP_STATE(TTCP) do {\ + int i = getCurrClientConnId(); \ + INFO_TCP("%d] ttcp:%p tpcb:%p state:%d lpcb:%p state:%d left:%d sent:%d\n", \ + i, TTCP, TTCP->tpcb[i], (TTCP->tpcb[i])?TTCP->tpcb[i]->state:0, \ + TTCP->lpcb, (TTCP->lpcb)?TTCP->lpcb->state:0, \ + (TTCP->tpcb[i])?TTCP->left[i]:0, (TTCP->tpcb[i])?TTCP->buff_sent[i]:0); \ + } while(0); + +#define Mode2Str(_Mode) ((_Mode==0)?"TRANSMIT":"RECEIVE") +#define ProtMode2Str(_protMode) ((_protMode==0)?"TCP":"UDP") + +typedef struct sData +{ + uint8_t* data; + uint16_t len; + uint16_t idx; + void* pcb; +}tData; + +struct pbuf; + +void init_pBuf(); + +uint8_t* insert_pBuf(struct pbuf* q, uint8_t sock, void* _pcb); + +uint8_t* insertBuf(uint8_t sock, uint8_t* buf, uint16_t len); + +uint8_t* mergeBuf(uint8_t sock, uint8_t** buf, uint16_t* _len); + +uint16_t clearBuf(uint8_t sock); + +tData* get_pBuf(uint8_t sock); + +void freetData(void * buf, uint8_t sock); + +void freetDataIdx(uint8_t idxBuf, uint8_t sock); + +bool isBufAvail(); + +bool getTcpData(uint8_t sock, void** payload, uint16_t* len); + +bool getTcpDataByte(uint8_t sock, uint8_t* payload, uint8_t peek); + +uint16_t getAvailTcpDataByte(uint8_t sock); + +bool isAvailTcpDataByte(uint8_t sock); + +uint8_t freeTcpData(uint8_t sock); + +void freeAllTcpData(uint8_t sock); + +#endif /* ARD_UTILS_H_ */ diff --git a/libraries/WiFi/extras/wifiHD/src/avr32_spi.c b/libraries/WiFi/extras/wifiHD/src/avr32_spi.c new file mode 100644 index 000000000..739fb284c --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/avr32_spi.c @@ -0,0 +1,394 @@ +/*! \page License + * Copyright (C) 2009, H&D Wireless AB All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of H&D Wireless AB may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#include +#include +#include +#include +#include +#include +#include +#include + +#define ARRAY_SIZE(a) sizeof(a) / sizeof(a[0]) + +__attribute__((__interrupt__)) void avr32_irq_handler(void); +void owl_spi_mdelay(uint32_t ms); + +int owl_spi_init(U8 *flags) +{ +#ifdef _ASSERT_ENABLE_ /* To silence warning if Assert() macro is empty */ + volatile avr32_pm_t *pm = &AVR32_PM; +#endif + + volatile avr32_spi_t *spi = &WL_SPI; +#if WL_SPI_CS == 1 + volatile avr32_spi_csr1_t* CSR = &spi->CSR1; +#elif WL_SPI_CS == 2 + volatile avr32_spi_csr2_t* CSR = &spi->CSR2; +#elif WL_SPI_CS == 3 + volatile avr32_spi_csr3_t* CSR = &spi->CSR3; +#elif SPI_CS == 0 + volatile avr32_spi_csr0_t* CSR = &spi->CSR0; +#endif + +#ifndef WITH_NO_DMA + volatile avr32_pdca_channel_t *pdca_tx = &AVR32_PDCA.channel[0]; + volatile avr32_pdca_channel_t *pdca_rx = &AVR32_PDCA.channel[1]; +#endif + +#ifndef WL_IRQ_PIN + *flags = SPI_FLAG_POLL; +#else + *flags = 0; +#endif + + +#ifdef WL_IRQ_PIN + /* input, irq */ + gpio_enable_gpio_pin(WL_IRQ_PIN); + gpio_enable_pin_pull_up(WL_IRQ_PIN); +#endif + +//#ifdef WL_RESET_PIN +// /* reset pin */ +// gpio_enable_gpio_pin(WL_RESET_PIN); +// gpio_set_gpio_pin(WL_RESET_PIN); +//#endif + + +#ifdef WL_POWER_PIN + /* power off the device */ + gpio_enable_gpio_pin(WL_POWER_PIN); + gpio_set_gpio_pin(WL_POWER_PIN); +#endif + +#ifdef WL_SHUTDOWN_PIN + gpio_enable_gpio_pin(WL_SHUTDOWN_PIN); + +#ifdef WL_NO_INTERNAL_RESET /* never defined for SPB104/SPB105 */ + gpio_clr_gpio_pin(WL_SHUTDOWN_PIN); +#endif + +#ifdef WL_EXTERNAL_RESET + gpio_enable_gpio_pin(WL_RESET_PIN); +#endif + +#endif /* WL_SHUTDOWN_PIN */ + +#ifdef WL_POWER_PIN + /* power on the device */ + gpio_clr_gpio_pin(WL_POWER_PIN); +#endif + +#ifdef WL_SHUTDOWN_PIN + +#ifdef WL_NO_INTERNAL_RESET /* never defined for SPB104/SPB105 */ + owl_spi_mdelay(5); + gpio_set_gpio_pin(WL_SHUTDOWN_PIN); + +#elif WL_EXTERNAL_RESET + owl_spi_mdelay(5); + gpio_set_gpio_pin(WL_SHUTDOWN_PIN); + + owl_spi_mdelay(20); + //delay_ms(10); //2ms + + /* reset pin */ + gpio_set_gpio_pin(WL_RESET_PIN); + +#else + + /* The shutdown pin will go high once the device is powered */ + { +#define SHUTDOWN_TIMEOUT 350 + uint32_t shutdown_timer = 0; + while (gpio_get_pin_value(WL_SHUTDOWN_PIN) == 0) { + if (shutdown_timer > SHUTDOWN_TIMEOUT) + { + printk("Timeout WL Shutdown\n"); + return -1; + } + owl_spi_mdelay(5); + shutdown_timer += 5; + } + } +#endif /* WL_NO_INTERNAL_RESET */ + +#else + /* We need to make a guess about the time needed to power the device, + * this will depend on the hardware design. + */ + owl_spi_mdelay(5); +#endif /* WL_SHUTDOWN_PIN */ + + /* Note: SPI0 clock enabled at reset in pm->pbamask (see 13.6.3) */ + Assert(pm->pbamask & (1 << 5)); + + /* Note: GPIO clock enabled at reset in pm->pbamask (see 13.6.3) */ + Assert(pm->pbamask & (1 << 1)); +#ifdef WL_IRQ_PIN + /* 22.4.7: "In every port there are four interrupt lines + * connected to the interrupt controller. Every eigth + * interrupts in the port are ored together to form an + * interrupt line." + * + * WL_IRQ_# = (WL_IRQ_PIN / 32) * 4 + (WL_IRQ_PIN / 8) % 4 + * 62 => 1 * 4 + 3 = 7 + */ + INTC_register_interrupt(&avr32_irq_handler, WL_IRQ, AVR32_INTC_INT0); +#endif + +#ifndef WITH_NO_DMA + INTC_register_interrupt(&avr32_irq_handler, AVR32_PDCA_IRQ_0, + AVR32_INTC_INT0); + INTC_register_interrupt(&avr32_irq_handler, AVR32_PDCA_IRQ_1, + AVR32_INTC_INT0); + pdca_tx->IER.terr = 1; + pdca_rx->IER.terr = 1; +#endif + +#ifdef WL_SPI_CLOCK_DIVIDER + CSR->scbr = WL_SPI_CLOCK_DIVIDER; +#else + CSR->scbr = 2; +#endif + + /* Use max width of TDR register, 16 bit transfers */ + CSR->bits = 0x8; + + /* Make sure that we can hold CS low until transfer is completed, e.g + * LASTXFER is set in TDR. + */ + CSR->csaat = 1; + + /* NRG component requires clock polarity high */ + CSR->cpol = 1; + + +#ifdef WL_IRQ_PIN + /* make sure to clear any pending bits in ifr here. */ + gpio_clear_pin_interrupt_flag(WL_IRQ_PIN); +#endif + + return 0; +} + +#ifndef WITH_NO_DMA +static void dma_txrx(const U8* in, U8* out, U16 len) +{ + volatile avr32_pdca_channel_t *pdca_tx = &AVR32_PDCA.channel[0]; + volatile avr32_pdca_channel_t *pdca_rx = &AVR32_PDCA.channel[1]; + + /* setup tx */ + pdca_tx->mar = (U32) in; + pdca_tx->PSR.pid = WL_PDCA_PID_TX; + pdca_tx->tcr = len / 2; + pdca_tx->MR.size = 1; /* 2-byte */ + pdca_tx->IER.trc = 1; + + /* setup rx */ + pdca_rx->mar = (U32) out; + pdca_rx->PSR.pid = WL_PDCA_PID_RX; + pdca_rx->tcr = len / 2; + pdca_rx->MR.size = 1; /* 2-byte */ + pdca_rx->IER.trc = 1; + + /* start dma's. for some reason rx must be started prior to tx */ + pdca_rx->CR.ten = 1; + pdca_tx->CR.ten = 1; + + /* blocking wait until transfer is completed */ + while (!(pdca_tx->ISR.trc && pdca_rx->ISR.trc)); +} +#endif + +/* access data using byte pointers since we might get unaligned + * data from lwip. The cpu will issue a data abort if we try + * to access data which is not properly aligned. See data sheet. + * + * Note that fifo_txrx() doesn't handle the case where len is not a + * multiple of two bytes properly. + * + * However, there is no actual case where len is odd at the same time + * as the "out" pointer is non-NULL; therefore I think that in practice, + * we'll not write beyond the end of the "out" array. + * + * The extra unknown byte fetched from the in pointer will be discarded + * by the device since a length field included in the packet header will inform + * the device of the actual number of valid bytes (this implementation is + * kind of hidden inside the library). + */ +static void fifo_txrx(const U8 *in, U8* out, U16 len) +{ + volatile avr32_spi_t *spi = &WL_SPI; + UnionCPtr in_ptr; + UnionPtr out_ptr; + U32 sr; + + Assert(len); + + in_ptr.u8ptr = in; + out_ptr.u8ptr = out; + + while (len) { + U16 rdr; + union { + avr32_spi_tdr_t TDR; + U32 tdr; + } reg = { { 0 } }; + + while (!spi->SR.tdre); + while (!spi->SR.txempty); + + /* prepare tx data register contents */ + if (in_ptr.u8ptr) { + reg.TDR.td |= (in_ptr.u8ptr[0] << 8) | in_ptr.u8ptr[1]; + in_ptr.u16ptr++; + } + else + reg.TDR.td |= 0xffff; + + /* perform tx */ + spi->tdr = reg.tdr; + + /* wait until rx is ready */ + while (!spi->SR.rdrf); + + /* fetch rx data */ + rdr = spi->RDR.rd; + if (out_ptr.u8ptr) { + out_ptr.u8ptr[0] = (rdr >> 8) & 0xff; + out_ptr.u8ptr[1] = rdr & 0xff; + out_ptr.u16ptr++; + } + + if (len >= 2) + len -= 2; + else + len = 0; + } + + sr = spi->sr; + Assert(!(sr & AVR32_SPI_SR_OVRES_MASK)); + Assert(!(sr & AVR32_SPI_SR_MODF_MASK)); +} + +void owl_spi_txrx(const U8 *in, U8* out, U16 len) +{ +#ifndef WITH_NO_DMA + static uint8_t buf[MAX_BLOCK_LEN]; + + /* unaligned data or odd number of bytes, then skip dma */ + if ((U32) in % 4 || (U32) out % 4 || len % 2) { + fifo_txrx(in, out, len); + } else { + if (in == NULL) { + memset(buf, 0xff, len); + in = buf; + } else if (out == NULL) { + out = buf; + } + dma_txrx(in, out, len); + } +#else + fifo_txrx(in, out, len); +#endif +} + +void owl_spi_irq(U8 enable) +{ +#ifdef WL_IRQ_PIN + + if (enable) + gpio_enable_pin_interrupt(WL_IRQ_PIN, GPIO_PIN_CHANGE); + else + gpio_disable_pin_interrupt(WL_IRQ_PIN); +#endif +} + +void owl_spi_cs(U8 enable) +{ + volatile avr32_spi_t *spi = &WL_SPI; + + /* + * PCS = xxx0 => NPCS[3:0] = 1110 + * PCS = xx01 => NPCS[3:0] = 1101 + * PCS = x011 => NPCS[3:0] = 1011 + * PCS = 0111 => NPCS[3:0] = 0111 + * PCS = 1111 => forbidden (no peripheral is selected) + */ + + if (enable) +#if WL_SPI_CS == 2 + spi->MR.pcs = 0x3; /* cs2 */ +#elif WL_SPI_CS == 1 + spi->MR.pcs = 0x1; /* cs1 */ +#elif WL_SPI_CS == 3 + spi->MR.pcs = 0x7; /* cs3 */ +#elif WL_SPI_CS == 0 + spi->MR.pcs = 0x0; /* cs0 */ +#endif + else + spi->MR.pcs = 0xf; +} + +void owl_spi_mdelay(uint32_t ms) +{ + volatile int a = 0; + int i; + for (i = 0; i < ms * 5000; i++) + a++; +} + +__attribute__((__interrupt__)) void avr32_irq_handler(void) +{ +#ifndef WITH_NO_DMA + volatile avr32_pdca_channel_t *pdca_tx = &AVR32_PDCA.channel[0]; + volatile avr32_pdca_channel_t *pdca_rx = &AVR32_PDCA.channel[1]; + + /* tx xfer complete */ + if (pdca_tx->IMR.trc && pdca_tx->ISR.trc) { + pdca_tx->IDR.trc = 1; + pdca_tx->CR.tdis = 1; /* disable tx xfer */ + } + + /* rx xfer complete */ + if (pdca_rx->IMR.trc && pdca_rx->ISR.trc) { + pdca_rx->IDR.trc = 1; + pdca_rx->CR.tdis = 1; /* disable rx xfer */ + } +#endif + +#ifdef WL_IRQ_PIN + if (gpio_get_pin_interrupt_flag(WL_IRQ_PIN)) { + gpio_clear_pin_interrupt_flag(WL_IRQ_PIN); + wl_spi_irq(); + } +#endif + +} diff --git a/libraries/WiFi/extras/wifiHD/src/board_init.c b/libraries/WiFi/extras/wifiHD/src/board_init.c new file mode 100644 index 000000000..a2a191ea9 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/board_init.c @@ -0,0 +1,297 @@ +/*! \page License + * Copyright (C) 2009, H&D Wireless AB All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of H&D Wireless AB may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include +#ifdef WITH_SDRAM + #include +#endif +#include +#include + +#ifndef NO_SERIAL /* The bootloader does not want serial port + * code */ +#include + +int board_putchar(char c) +{ + int timeout = USART_DEFAULT_TIMEOUT; + if (c == '\n') { + do { + if (!timeout--) + return USART_FAILURE; + } while (usart_write_char(&CONFIG_CONSOLE_PORT, '\r') != + USART_SUCCESS); + + timeout = USART_DEFAULT_TIMEOUT; + } + + do { + if (!timeout--) + return USART_FAILURE; + } while (usart_write_char(&CONFIG_CONSOLE_PORT, c) != USART_SUCCESS); + + return USART_SUCCESS; +} +#endif /* NO_SERIAL */ +/** + * Initializes the MCU system clocks. + */ +static void +init_sys_clocks(void) +{ + + /* if we don't run on OSC0 don't switch to it since we don't know + * what kind of oscillator we have here + */ + +#if OSC == 0 + /* switch to OSC0 to speed up the booting */ + pm_switch_to_osc0(&AVR32_PM, FOSC0, OSC0_STARTUP); +#endif + + +#ifndef USE_PLL + return; +#endif + + /* For audio, ee have to use OSC1 on to generate the correct clockrate + * for the SSC + */ +#if OSC == 1 + /* start oscillator1 */ + pm_enable_osc1_crystal(&AVR32_PM, FOSC1); + pm_enable_clk1(&AVR32_PM, OSC1_STARTUP); +#endif + + /* configure pll multipliers */ + pm_pll_setup(&AVR32_PM, + 0, /* pll */ + PLL_MUL, /* mul */ + 1, /* div */ + OSC, /* osc */ + 16); /* lockcount */ + + /* set PLL operating range and divider (fpll = fvco/2) + * this gives PLL output = 66 MHz (62.0928 MHz for EVK1105/OSC1) + */ + pm_pll_set_option(&AVR32_PM, + 0, /* pll */ + 1, /* pll_freq */ + 1, /* pll_div2 */ + 0); /* pll_wbwdisable. */ + + + /* start PLL0 and wait for the lock */ + pm_pll_enable(&AVR32_PM, 0); + pm_wait_for_pll0_locked(&AVR32_PM); + + /* Set all peripheral clocks torun at master clock rate */ + pm_cksel(&AVR32_PM, + 0, /* pbadiv */ + 0, /* pbasel */ + 0, /* pbbdiv */ + 0, /* pbbsel */ + 0, /* hsbdiv */ + 0); /* hsbsel */ + + /* Set one waitstate for the flash */ + flashc_set_wait_state(1); + + /* Switch to PLL0 as the master clock */ + pm_switch_to_clock(&AVR32_PM, AVR32_PM_MCCTRL_MCSEL_PLL0); +} + +static void init_exceptions(void) +{ + extern void _evba; + Set_system_register(AVR32_EVBA, (int)&_evba); + Enable_global_exception(); +} + +static void init_hmatrix(void) +{ + union { + unsigned long scfg; + avr32_hmatrix_scfg_t SCFG; + } u_avr32_hmatrix_scfg = { + AVR32_HMATRIX.scfg[AVR32_HMATRIX_SLAVE_FLASH] + }; + u_avr32_hmatrix_scfg.SCFG.defmstr_type = + AVR32_HMATRIX_DEFMSTR_TYPE_LAST_DEFAULT; + AVR32_HMATRIX.scfg[AVR32_HMATRIX_SLAVE_FLASH] = + u_avr32_hmatrix_scfg.scfg; +} + +static void init_interrupts(void) +{ + INTC_init_interrupts(); + Enable_global_interrupt(); +} + +static void init_spi(void) +{ +#if defined(WL_SPI) + int i; +#endif + + +#if defined(AT45DBX_SPI) + static const gpio_map_t AT45DBX_SPI_GPIO_MAP = { + { AT45DBX_SPI_SCK_PIN, AT45DBX_SPI_SCK_FUNCTION }, + { AT45DBX_SPI_MISO_PIN, AT45DBX_SPI_MISO_FUNCTION }, + { AT45DBX_SPI_MOSI_PIN, AT45DBX_SPI_MOSI_FUNCTION }, + { AT45DBX_SPI_NPCS2_PIN, AT45DBX_SPI_NPCS2_FUNCTION }, + }; +#endif + + +#if defined(WL_SPI) + const gpio_map_t WL_SPI_GPIO_MAP = { +#if defined(WL_SPI_NPCS0) + WL_SPI_NPCS0, +#endif + WL_SPI_NPCS, WL_SPI_MISO, WL_SPI_MOSI, WL_SPI_SCK + }; +#endif + +#if defined(WL_SPI) || defined(AT45DBX_SPI) + spi_options_t spiOptions = { + .modfdis = 1 /* only param used by spi_initMaster() */ + }; +#endif + +#if defined(AT45DBX_SPI) + gpio_enable_module(AT45DBX_SPI_GPIO_MAP, + sizeof(AT45DBX_SPI_GPIO_MAP) / + sizeof(AT45DBX_SPI_GPIO_MAP[0])); + spi_initMaster(AT45DBX_SPI, &spiOptions); + spi_selectionMode(AT45DBX_SPI, 0, 0, 0); +#endif + +#if defined(WL_SPI) + /* same pins might be initialized twice here */ + gpio_enable_module(WL_SPI_GPIO_MAP, + sizeof(WL_SPI_GPIO_MAP) / + sizeof(WL_SPI_GPIO_MAP[0])); + for (i = 0; i < sizeof(WL_SPI_GPIO_MAP)/sizeof(WL_SPI_GPIO_MAP[0]); i++) + gpio_enable_pin_pull_up(WL_SPI_GPIO_MAP[i].pin); + + /* same SPI controller might be initialized again */ + spi_initMaster(&WL_SPI, &spiOptions); + spi_selectionMode(&WL_SPI, 0, 0, 0); +#endif + +#if defined(AT45DBX_SPI) + spi_enable(AT45DBX_SPI); + + /* put up flash reset pin */ + gpio_set_gpio_pin(AT45DBX_CHIP_RESET); +#endif + +#if defined(WL_SPI) + spi_enable(&WL_SPI); +#endif +} + + +static void init_rs232(void) +{ +#ifndef NO_SERIAL +#if defined(BOARD_RS232_0) + const gpio_map_t BOARD_RS232_0_GPIO_MAP = { + BOARD_RS232_0_TX, + BOARD_RS232_0_RX, +#if defined(BOARD_RS232_0_RTS) && defined (BOARD_RS232_0_CTS) + BOARD_RS232_0_RTS, + BOARD_RS232_0_CTS +#endif + + }; +#endif + +#if defined(BOARD_RS232_1) + const gpio_map_t BOARD_RS232_1_GPIO_MAP = { + BOARD_RS232_1_TX, + BOARD_RS232_1_RX +#if defined(BOARD_RS232_1_RTS) && defined (BOARD_RS232_1_CTS) + BOARD_RS232_1_RTS, + BOARD_RS232_1_CTS +#endif + }; +#endif + +#if defined(BOARD_RS232_0) + gpio_enable_module(BOARD_RS232_0_GPIO_MAP, + sizeof(BOARD_RS232_0_GPIO_MAP) / + sizeof(BOARD_RS232_0_GPIO_MAP[0])); +#endif + +#if defined(BOARD_RS232_1) + gpio_enable_module(BOARD_RS232_1_GPIO_MAP, + sizeof(BOARD_RS232_1_GPIO_MAP) / + sizeof(BOARD_RS232_1_GPIO_MAP[0])); +#endif +#endif /* NO_SERIAL */ +} + +static void init_printk(void) +{ +#ifndef NO_SERIAL +#if defined(CONFIG_CONSOLE_PORT) + const usart_options_t usart_options = { + .baudrate = 57600, + .charlength = 8, + .paritytype = USART_NO_PARITY, + .stopbits = USART_1_STOPBIT, + .channelmode = USART_NORMAL_CHMODE + }; + usart_init_rs232(&CONFIG_CONSOLE_PORT, &usart_options, FPBA_HZ); +#endif +#endif /* NO_SERIAL */ +} + +void board_init(void) +{ + + init_exceptions(); + init_hmatrix(); + init_sys_clocks(); + init_interrupts(); + + init_rs232(); + init_printk(); + +#ifdef WITH_SDRAM + sdramc_init(FHSB_HZ); +#endif + init_spi(); +} diff --git a/libraries/WiFi/extras/wifiHD/src/board_init.h b/libraries/WiFi/extras/wifiHD/src/board_init.h new file mode 100644 index 000000000..05a660998 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/board_init.h @@ -0,0 +1,313 @@ +/*! \page License + * Copyright (C) 2009, H&D Wireless AB All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of H&D Wireless AB may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef STARTUP_H +#define STARTUP_H + +#include +#include /* defines SPB104, SPB105 */ + +void board_init(void); + + + +/* + * + * EVK1100 + * --------------------------------------------------------------------------- + * + */ +#if BOARD == EVK1100 + +/* USART0 physical assignment */ +#define BOARD_RS232_0 AVR32_USART1 +#define BOARD_RS232_0_TX \ + { AVR32_USART1_TXD_0_0_PIN, AVR32_USART1_TXD_0_0_FUNCTION } +#define BOARD_RS232_0_RX \ + { AVR32_USART1_RXD_0_0_PIN, AVR32_USART1_RXD_0_0_FUNCTION } + +/* USART1 physical assignment */ +#define BOARD_RS232_1 AVR32_USART0 +#define BOARD_RS232_1_TX \ + { AVR32_USART0_TXD_0_0_PIN, AVR32_USART0_TXD_0_0_FUNCTION } +#define BOARD_RS232_1_RX \ + { AVR32_USART0_RXD_0_0_PIN, AVR32_USART0_RXD_0_0_FUNCTION }, + +/* Clocks */ +#define USE_PLL +#define OSC 0 +#define PLL_MUL 10 + +/* Wifi (SPB104 only) */ +#if defined(EXT_BOARD) +#if EXT_BOARD == SPB104 +#define WL_SPI AVR32_SPI1 /* Pin 8 NC, so no irq support if using SD-slot */ +#define WL_SPI_CLOCK_DIVIDER 3 /* due to adapter */ +#define WL_PDCA_PID_TX AVR32_PDCA_PID_SPI1_TX +#define WL_PDCA_PID_RX AVR32_PDCA_PID_SPI1_RX +#define WL_SPI_CS 1 +#define WL_SPI_NPCS0 { AVR32_SPI1_NPCS_0_0_PIN, AVR32_SPI1_NPCS_0_0_FUNCTION } +#define WL_SPI_NPCS { AVR32_SPI1_NPCS_1_0_PIN, AVR32_SPI1_NPCS_1_0_FUNCTION } +#define WL_SPI_MISO { AVR32_SPI1_MISO_0_0_PIN, AVR32_SPI1_MISO_0_0_FUNCTION } +#define WL_SPI_MOSI { AVR32_SPI1_MOSI_0_0_PIN, AVR32_SPI1_MOSI_0_0_FUNCTION } +#define WL_SPI_SCK { AVR32_SPI1_SCK_0_0_PIN, AVR32_SPI1_SCK_0_0_FUNCTION } +#endif +#endif /* EXT_BOARD */ + + + + + + +/* + * + * EVK1101 + * --------------------------------------------------------------------------- + * + */ +#elif BOARD == EVK1101 + +/* USART0 physical assignment */ +#define BOARD_RS232_0 AVR32_USART1 +#define BOARD_RS232_0_TX \ + { AVR32_USART1_TXD_0_0_PIN, AVR32_USART1_TXD_0_0_FUNCTION } +#define BOARD_RS232_0_RX \ + { AVR32_USART1_RXD_0_0_PIN, AVR32_USART1_RXD_0_0_FUNCTION } + +/* Clocks */ +#define USE_PLL +#define OSC 0 +#define PLL_MUL 9 + +/* Wifi (SPB104 only) */ +#if defined(EXT_BOARD) +#if EXT_BOARD == SPB104 /* Pin 8 NC, so no irq support if using SD-slot */ +#define WL_SPI AVR32_SPI +#define WL_SPI_CLOCK_DIVIDER 3 /* due to adapter */ +#define WL_PDCA_PID_TX AVR32_PDCA_PID_SPI_TX +#define WL_PDCA_PID_RX AVR32_PDCA_PID_SPI_RX +#define WL_SPI_CS 1 +#if EXT_BOARD == SPB105 + #define WL_SHUTDOWN_PIN AVR32_PIN_PA06 + #define WL_POWER_PIN AVR32_PIN_PA30 +#endif +#define WL_SPI_NPCS0 { AVR32_SPI_NPCS_0_0_PIN, AVR32_SPI_NPCS_0_0_FUNCTION } +#define WL_SPI_NPCS { AVR32_SPI_NPCS_1_0_PIN, AVR32_SPI_NPCS_1_0_FUNCTION } +#define WL_SPI_MISO { AVR32_SPI_MISO_0_0_PIN, AVR32_SPI_MISO_0_0_FUNCTION } +#define WL_SPI_MOSI { AVR32_SPI_MOSI_0_0_PIN, AVR32_SPI_MOSI_0_0_FUNCTION } +#define WL_SPI_SCK { AVR32_SPI_SCK_0_0_PIN, AVR32_SPI_SCK_0_0_FUNCTION } +#endif +#endif /* EXT_BOARD */ + + + + + + + +/* + * + * EVK1104 + * --------------------------------------------------------------------------- + * + */ +#elif BOARD == EVK1104 /* EVK1104 */ + +/* USART0 physical assignment */ +#define BOARD_RS232_0 AVR32_USART1 +#define BOARD_RS232_0_TX \ + { AVR32_USART1_TXD_0_0_PIN, AVR32_USART1_TXD_0_0_FUNCTION } +#define BOARD_RS232_0_RX \ + { AVR32_USART1_RXD_0_0_PIN, AVR32_USART1_RXD_0_0_FUNCTION } + +/* Clocks */ +#define USE_PLL +#define OSC 0 +#define PLL_MUL 9 /* for some reason we cant use 66 MHz */ + +/* Wifi (SDIO: SPB104 only; SPI: SPB105 only) */ +#if defined(EXT_BOARD) +#if EXT_BOARD == SPB105 + #define WL_SPI AVR32_SPI0 + #define WL_PDCA_PID_TX AVR32_PDCA_PID_SPI0_TX + #define WL_PDCA_PID_RX AVR32_PDCA_PID_SPI0_RX + #define WL_SPI_CLOCK_DIVIDER 3 /* due to adapter */ + #define WL_SHUTDOWN_PIN AVR32_PIN_PA17 /* Pin 8 on RF-head -> Pin 4 on wifi */ + #define WL_IRQ_PIN AVR32_PIN_PA18 /* Pin 6 on RF-head -> Pin 3 on wifi */ + #define WL_IRQ AVR32_GPIO_IRQ_2 + #define WL_SPI_CS 3 + #define WL_SPI_NPCS { AVR32_SPI0_NPCS_3_1_PIN, AVR32_SPI0_NPCS_3_1_FUNCTION } + #define WL_SPI_MISO { AVR32_SPI0_MISO_0_0_PIN, AVR32_SPI0_MISO_0_0_FUNCTION } + #define WL_SPI_MOSI { AVR32_SPI0_MOSI_0_0_PIN, AVR32_SPI0_MOSI_0_0_FUNCTION } + #define WL_SPI_SCK { AVR32_SPI0_SCK_0_0_PIN, AVR32_SPI0_SCK_0_0_FUNCTION } +#elif EXT_BOARD == SPB104 + #ifdef SDIO_SLOT_A + #define WL_SDIO_CLK { AVR32_MCI_CLK_0_PIN, AVR32_MCI_CLK_0_FUNCTION } + #define WL_SDIO_CMD { AVR32_MCI_CMD_0_PIN, AVR32_MCI_CMD_0_FUNCTION } + #define WL_SDIO_DAT0 { AVR32_MCI_DATA_0_PIN, AVR32_MCI_DATA_0_FUNCTION } + #define WL_SDIO_DAT1 { AVR32_MCI_DATA_1_PIN, AVR32_MCI_DATA_1_FUNCTION } + #define WL_SDIO_DAT2 { AVR32_MCI_DATA_2_PIN, AVR32_MCI_DATA_2_FUNCTION } + #define WL_SDIO_DAT3 { AVR32_MCI_DATA_3_PIN, AVR32_MCI_DATA_3_FUNCTION } + #else + #define WL_SDIO_CLK { AVR32_MCI_CLK_0_PIN, AVR32_MCI_CLK_0_FUNCTION } + #define WL_SDIO_CMD { AVR32_MCI_CMD_1_0_PIN, AVR32_MCI_CMD_1_0_FUNCTION } + #define WL_SDIO_DAT0 { AVR32_MCI_DATA_8_0_PIN, AVR32_MCI_DATA_8_0_FUNCTION } + #define WL_SDIO_DAT1 { AVR32_MCI_DATA_9_0_PIN, AVR32_MCI_DATA_9_0_FUNCTION } + #define WL_SDIO_DAT2 { AVR32_MCI_DATA_10_0_PIN, AVR32_MCI_DATA_10_0_FUNCTION } + #define WL_SDIO_DAT3 { AVR32_MCI_DATA_11_0_PIN, AVR32_MCI_DATA_11_0_FUNCTION } + #endif +#endif +#endif /* EXT_BOARD */ + + + + + + + +/* + * + * EVK1105 + * --------------------------------------------------------------------------- + * + */ +#elif BOARD == EVK1105 /* EVK1105 */ + + +/* USART0 physical assignment */ +#define BOARD_RS232_0 AVR32_USART0 +#define BOARD_RS232_0_TX \ + { AVR32_USART0_TXD_0_0_PIN, AVR32_USART0_TXD_0_0_FUNCTION } +#define BOARD_RS232_0_RX \ + { AVR32_USART0_RXD_0_0_PIN, AVR32_USART0_RXD_0_0_FUNCTION } + +/* Clocks */ +#define USE_PLL +#define OSC 1 +#define PLL_MUL 10 + +/* Wifi SPB104/SPB105 */ +#if defined(EXT_BOARD) + #define WL_SPI AVR32_SPI0 + #define WL_PDCA_PID_TX AVR32_PDCA_PID_SPI0_TX + #define WL_PDCA_PID_RX AVR32_PDCA_PID_SPI0_RX + #if EXT_BOARD == SPB105 + #define WL_SPI_CLOCK_DIVIDER 3 /* due to adapter */ + #define WL_SHUTDOWN_PIN AVR32_PIN_PB31 /* Pin 8 on RF-head -> Pin 4 on wifi */ + #define WL_IRQ_PIN AVR32_PIN_PB30 /* Pin 6 on RF-head -> Pin 3 on wifi */ + #define WL_IRQ AVR32_GPIO_IRQ_7 + #define WL_SPI_CS 2 + #elif EXT_BOARD == SPB104 + #define WL_SPI_CLOCK_DIVIDER 3 /* due to adapter */ + #define WL_SPI_CS 1 + #endif + #define WL_SPI_NPCS0 { AVR32_SPI0_NPCS_0_0_PIN, AVR32_SPI0_NPCS_0_0_FUNCTION } + #if WL_SPI_CS == 1 + #define WL_SPI_NPCS { AVR32_SPI0_NPCS_1_0_PIN, AVR32_SPI0_NPCS_1_0_FUNCTION } + #elif WL_SPI_CS == 2 + #define WL_SPI_NPCS { AVR32_SPI0_NPCS_2_0_PIN, AVR32_SPI0_NPCS_2_0_FUNCTION } + #endif + #define WL_SPI_MISO { AVR32_SPI0_MISO_0_0_PIN, AVR32_SPI0_MISO_0_0_FUNCTION } + #define WL_SPI_MOSI { AVR32_SPI0_MOSI_0_0_PIN, AVR32_SPI0_MOSI_0_0_FUNCTION } + #define WL_SPI_SCK { AVR32_SPI0_SCK_0_0_PIN, AVR32_SPI0_SCK_0_0_FUNCTION } +#endif /* EXT_BOARD */ + +/* + * + * ARDUINO + * --------------------------------------------------------------------------- + * + */ +#elif BOARD == ARDUINO /* ARDUINO */ + + +/* USART0 physical assignment */ +#define BOARD_RS232_1 AVR32_USART1 +#define BOARD_RS232_1_TX \ + { AVR32_USART1_TXD_0_0_PIN, AVR32_USART1_TXD_0_0_FUNCTION } +#define BOARD_RS232_1_RX \ + { AVR32_USART1_RXD_0_0_PIN, AVR32_USART1_RXD_0_0_FUNCTION } + +/* Clocks */ +#define USE_PLL +#define OSC 0 +#define PLL_MUL 8 + +#define WL_SPI AVR32_SPI1 +#define WL_PDCA_PID_TX AVR32_PDCA_PID_SPI1_TX +#define WL_PDCA_PID_RX AVR32_PDCA_PID_SPI1_RX + +#define WL_SHUTDOWN_PIN AVR32_PIN_PA09 +#define WL_IRQ_PIN AVR32_PIN_PA03 +/* +* WL_IRQ_# = (WL_IRQ_PIN / 32) * 4 + (WL_IRQ_PIN / 8) % 4 + * 3 => 0 * 4 + 0 = 0 +*/ +#define WL_IRQ AVR32_GPIO_IRQ_0 +#define WL_SPI_CS 0 +#define WL_RESET_PIN AVR32_PIN_PA07 +#define WL_EXTERNAL_RESET 1 + + +#define WL_SPI_NPCS { AVR32_SPI1_NPCS_0_0_PIN, AVR32_SPI1_NPCS_0_0_FUNCTION } +#define WL_SPI_MISO { AVR32_SPI1_MISO_0_0_PIN, AVR32_SPI1_MISO_0_0_FUNCTION } +#define WL_SPI_MOSI { AVR32_SPI1_MOSI_0_0_PIN, AVR32_SPI1_MOSI_0_0_FUNCTION } +#define WL_SPI_SCK { AVR32_SPI1_SCK_0_0_PIN, AVR32_SPI1_SCK_0_0_FUNCTION } + +#endif /* EVKxxxx */ + + + + + + + + + +#if OSC == 0 +# define FOSC FOSC0 /* 12 MHz */ +#else +# define FOSC FOSC1 /* 11.2896 MHz */ +#endif + +#ifdef USE_PLL +# define FMCK_HZ ((FOSC * (PLL_MUL + 1)) / 2) +#else +# define FMCK_HZ FOSC +#endif + +#define FCPU_HZ FMCK_HZ +#define FHSB_HZ FCPU_HZ +#define FPBB_HZ FMCK_HZ +#define FPBA_HZ FMCK_HZ + + +#ifndef CONFIG_CONSOLE_PORT +#define CONFIG_CONSOLE_PORT BOARD_RS232_1 +#endif + +#endif diff --git a/libraries/WiFi/extras/wifiHD/src/cmd_wl.c b/libraries/WiFi/extras/wifiHD/src/cmd_wl.c new file mode 100644 index 000000000..a210dec37 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/cmd_wl.c @@ -0,0 +1,731 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*! \page License + * Copyright (C) 2009, H&D Wireless AB All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of H&D Wireless AB may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#include +#include +#include +#include + +#include + +#include +#include +#include +#include + +#include "lwip/netif.h" +#include "lwip/dns.h" +#include "debug.h" +#include "ard_spi.h" +#include "ard_tcp.h" +#include "ard_utils.h" + +extern void showTTCPstatus(); + +#define _DNS_CMD_ + +/** + * + */ +cmd_state_t +cmd_scan(int argc, char* argv[], void* ctx) +{ + /* Note that the scan results presented will + * be from the last scan, not this one. + */ + wl_scan(); + print_network_list(); + return CMD_DONE; +} + +cmd_state_t +cmd_debug_toggle(int argc, char* argv[], void* ctx) +{ + extern uint8_t tr_data_trace; + if ( argc != 2 ) { + printk("usage: dt <1|0>\n"); + return CMD_DONE; + } + if ( '0' == argv[1][0] ) { + tr_data_trace = 0; + } + if ( '1' == argv[1][0] ) { + tr_data_trace = 1; + } + return CMD_DONE; +} + +/** + * + */ +cmd_state_t +cmd_connect(int argc, char* argv[], void* ctx) +{ + struct wl_ssid_t ssid; + char desired_ssid[WL_SSID_MAX_LENGTH]; + int len = 0; + + if (argc < 2) { + printk("usage: connect \n"); + return CMD_DONE; + } + + len = join_argv(desired_ssid, sizeof desired_ssid, argc - 1, argv + 1); + if (0 == len) { + return CMD_DONE; + } + + memcpy(ssid.ssid, desired_ssid, len); + ssid.len = len; + /* Start connection manager */ + wl_cm_set_network(&ssid, NULL); + wl_cm_start(); + return CMD_DONE; +} + +#ifdef WFE_6_12 +cmd_state_t +cmd_ibss(int argc, char* argv[], void* ctx) +{ + struct wl_ssid_t ssid; + char desired_ssid[WL_SSID_MAX_LENGTH]; + uint8_t channel; + enum wl_auth_mode amode; + int len = 0; + wl_err_t ret; + + if ( 2 == argc && ! strncmp(argv[1], "none", 4) ) { + printk("Disconnecting\n"); + wl_disconnect(); + wl_cm_stop(); + return CMD_DONE; + } + if (argc < 4) { + printk("usage: ibss \n"); + printk(" ibss none\n"); + return CMD_DONE; + } + + channel = atoi(argv[argc - 2]); + if ( *argv[argc - 1] == '0' ) { + amode = AUTH_MODE_OPEN_SYSTEM; + } else { + amode = AUTH_MODE_SHARED_KEY; + } + len = join_argv(desired_ssid, sizeof desired_ssid, argc - 3, argv + 1); + if (0 == len) { + return CMD_DONE; + } + if ( channel > 14 ) { + printk("Invalid channel %d\n", (int)channel); + return CMD_DONE; + } + printk("%s : Start with ssid \"%s\", channel %d\n", __func__, + desired_ssid, channel); + memcpy(ssid.ssid, desired_ssid, len); + ssid.len = len; + /* Stop the connection manager */ + wl_cm_stop(); + + ret = wl_start_adhoc_net(ssid, channel, amode); + switch (ret) { + case WL_BUSY: + printk("Driver is busy. Already connected?\n"); + break; + case WL_RETRY: + printk("Driver is busy. Retry operation\n"); + break; + case WL_OOM: + printk("Out of memory\n"); + break; + case WL_INVALID_ARGS: + printk("Invalid argument\n"); + break; + case WL_SUCCESS: + break; + default: + printk("Unknown error %d\n", ret); + break; + } + return CMD_DONE; +} +#endif +/** + * + */ +cmd_state_t +cmd_set_ip(int argc, char* argv[], void* ctx) +{ + struct ctx_server *hs = ctx; + struct net_cfg *ncfg = &(hs->net_cfg); + struct ip_addr lwip_addr; + struct netif *nif = ncfg->netif; + + if (argc == 2 && + (strncmp(argv[1], "none", 4) == 0)) { + ncfg->dhcp_enabled = DYNAMIC_IP_CONFIG; + + return CMD_DONE; + } + else if (argc != 4 ) { + printk("usage: ipconfig \n"); + printk(" or : ipconfig none (to enable DHCP)\n"); + return CMD_DONE; + } + + /* IP address */ + lwip_addr = str2ip(argv[1]); + INFO_SPI("nif:%p lwip_addr=0x%x\n", nif, lwip_addr.addr); + netif_set_ipaddr(nif, &lwip_addr); + /* Netmask */ + lwip_addr = str2ip(argv[2]); + netif_set_netmask(nif, &lwip_addr); + /* Default Gateway address */ + lwip_addr = str2ip(argv[3]); + netif_set_gw(nif, &lwip_addr); + /* Disable DHCP */ + ncfg->dhcp_enabled = STATIC_IP_CONFIG; + + return CMD_DONE; +} + +#ifdef WITH_WPA + +/** + * + */ +cmd_state_t +cmd_delpass(int argc, char* argv[], void* ctx) +{ + const char *usage = "usage: dpass \n"; + struct wl_network_t net; + char desired_ssid[WL_SSID_MAX_LENGTH]; + int len = 0; + + if (argc != 2) { + printk(usage); + return CMD_DONE; + } + + memset(&net, 0, sizeof net); + memset(net.bssid.octet, 0xFF, sizeof net.bssid.octet); + + len = join_argv(desired_ssid, sizeof desired_ssid, argc - 1, argv + 1); + if (0 == len) { + return CMD_DONE; + } + memcpy(net.ssid.ssid, desired_ssid, len); + net.ssid.len = len; + net.enc_type = ENC_TYPE_AUTO; + if (wl_clear_passphrase(&net) != WL_SUCCESS) { + printk("%s : Failed to delete passphrase\n", __func__); + } + + return CMD_DONE; +} + + +/** + * + */ +cmd_state_t +cmd_setpass(int argc, char* argv[], void* ctx) +{ + const char *usage = "usage: wpass \n"; + struct wl_network_t net; + char desired_ssid[WL_SSID_MAX_LENGTH]; + int len = 0; + + if (argc < 3) { + printk(usage); + return CMD_DONE; + } + /* Not really kosher, an ssid may legally contain 0-bytes but + * the console interface does not deal with that. + */ + memset(&net, 0, sizeof net); + memset(net.bssid.octet, 0xFF, sizeof net.bssid.octet); + + len = join_argv(desired_ssid, sizeof desired_ssid, argc - 2, argv + 1); + if (0 == len) { + return CMD_DONE; + } + + memcpy(net.ssid.ssid, desired_ssid, len); + net.ssid.len = len; + net.enc_type = ENC_TYPE_AUTO; + if (wl_set_passphrase(&net, + argv[argc - 1], + strlen(argv[argc - 1]), + ENC_TYPE_AUTO, + AUTH_MODE_AUTO) + != WL_SUCCESS) { + printk("%s : Failed to add passphrase\n", __func__); + } + + return CMD_DONE; +} +#endif + +#ifdef _DNS_CMD_ +void foundHost(const char *name, struct ip_addr *ipaddr, void *callback_arg) +{ + printk("Found Host: name=%s ip=0x%x\n", name, ipaddr->addr); +} + +/** + * + */ +cmd_state_t +cmd_gethostbyname(int argc, char* argv[], void* ctx) +{ + const char *usage = "usage: getHost \n"; + char hostname[DNS_MAX_NAME_LENGTH]; + struct ip_addr _addr; + int len = 0; + + if (argc < 2) { + printk(usage); + return CMD_DONE; + } + + len = join_argv(hostname, sizeof hostname, argc - 1, argv + 1); + if (0 == len) { + return CMD_DONE; + } + err_t err = dns_gethostbyname(hostname, &_addr, foundHost, NULL); + if (err == ERR_OK) + { + printk("Found Host: name=%s ip=0x%x\n", hostname, _addr.addr); + } + + return CMD_DONE; +} + +/** + * + */ +cmd_state_t +cmd_setDnsServer(int argc, char* argv[], void* ctx) +{ + const char *usage = "usage: setdns [1-2] aaa.bbb.ccc.ddd\n"; + struct ip_addr dnsIp; + int dnsIdx = 0; + + if (argc < 3) { + printk(usage); + return CMD_DONE; + } + + /* DNS IDX */ + dnsIdx = atoi(argv[1])-1; + /* IP address */ + dnsIp = str2ip(argv[2]); + + printk("Set DNS server %d to %s\n", dnsIdx, ip2str(dnsIp)); + dns_setserver(dnsIdx, &dnsIp); + struct ip_addr addr1 = dns_getserver(0); + struct ip_addr addr2 = dns_getserver(1); + + printk("==> DNS1: %s\n", ip2str(addr1), addr1); + printk("==> DNS2: %s\n", ip2str(addr2), addr2); + + return CMD_DONE; +} + +/** + * + */ +cmd_state_t +cmd_startSrv(int argc, char* argv[], void* ctx) +{ + const char *usage = "usage: startSrv \n"; + + int port = 0; + int sock = 0; + int protMode = 0; + + if (argc < 4) { + printk(usage); + return CMD_DONE; + } + + /* TCP port */ + port = atoi(argv[1]); + /* socket index */ + sock = atoi(argv[2]); + /* Protocol Mode */ + protMode = atoi(argv[3]); + + printk("Start %s server on port %d sock %d\n", ProtMode2Str(protMode), port, sock); + if (start_server_tcp(port, sock, protMode) == -1) + { + WARN("Start %s server on port %d sock %d FAILED\n", ProtMode2Str(protMode), port, sock); + } + return CMD_DONE; +} + +/** + * + */ +cmd_state_t +cmd_startCli(int argc, char* argv[], void* ctx) +{ + const char *usage = "usage: startCli \n"; + struct ip_addr addr = {0}; + int port = 0; + int sock = 0; + int protMode = 0; + + if (argc < 5) { + printk(usage); + return CMD_DONE; + } + + /* IP address */ + addr = str2ip(argv[1]); + /* TCP port */ + port = atoi(argv[2]); + /* socket index */ + sock = atoi(argv[3]); + /* Protocol Mode */ + protMode = atoi(argv[4]); + + printk("Start client on addr 0x%x, port %d sock %d mode %d\n", addr, port, sock, protMode); + if (start_client_tcp(addr.addr, port, sock, protMode) == -1) + { + WARN("Start client on port %d sock %d prot %d mode %d FAILED\n", port, sock, protMode); + } + return CMD_DONE; +} + +#endif + + +/** + * + */ +cmd_state_t +cmd_status(int argc, char* argv[], void* ctx) +{ + struct net_cfg *ncfg = ctx; + struct wl_network_t* net; + uint8_t mac[WL_MAC_ADDR_LENGTH]; + + printk("wl_api version " WL_API_RELEASE_NAME "\n"); + /* print mac address */ + if (wl_get_mac_addr(mac) != WL_SUCCESS) { + printk("failed to get mac address\n"); + }else{ + printk("hw addr: %s\n", mac2str(mac)); + } + + /* print network info */ + net = wl_get_current_network(); + printk("link status: "); + if (!net) { + printk("down\n"); + + }else{ + print_network(net); + } + + /* print ip address */ + if (netif_is_up(netif_default)) + { + printk("ip addr: %s - ", ip2str(netif_default->ip_addr)); + printk("netmask: %s - ", ip2str(netif_default->netmask)); + printk("gateway: %s\n", ip2str(netif_default->gw)); + } + else + printk("ip interface is down\n"); + printk("dhcp : "); + if (ncfg->dhcp_enabled == DYNAMIC_IP_CONFIG) { + printk("enabled\n"); + } + else { + printk("disabled\n"); + } + struct ip_addr addr1 = dns_getserver(0); + struct ip_addr addr2 = dns_getserver(1); + + printk("DNS: %s - ", ip2str(addr1)); + printk("%s\n", ip2str(addr2)); + + showTTCPstatus(); + return CMD_DONE; +} + +#ifdef ADD_CMDS +/** + * + */ +cmd_state_t +cmd_power(int argc, char* argv[], void* ctx) +{ + const char *usage = "usage: powersave \n"; + + if (argc < 2) { + printk(usage); + return CMD_DONE; + } + + if (!strcmp(argv[1], "on")) { + if (wl_enable_ps() != WL_SUCCESS) { + printk("could not enable power save\n"); + return CMD_DONE; + } + return CMD_DONE; + } + else if(!strcmp(argv[1], "off")) { + if (wl_disable_ps() != WL_SUCCESS) { + printk("could not disable power save\n"); + return CMD_DONE; + } + return CMD_DONE; + } + + printk(usage); + return CMD_DONE; +} +#endif + +#ifdef ADD_CMDS +/** + * + */ +cmd_state_t +cmd_psconf(int argc, char* argv[], void* ctx) +{ + const char *usage = + "usage: psconf (0/1 default 0)\n" \ + " ([ms] default 10)\n" \ + " ([ms] default 5000)\n"\ + " (0/1 default 1)\n"\ + " ([beacons] default 20)\n"; + + uint8_t use_ps_poll; + uint32_t traffic_timeout; + uint32_t ps_delay; + uint8_t rx_all_dtim; + uint16_t listen_interval; + + if (argc < 6) { + printk(usage); + return CMD_DONE; + } + + use_ps_poll = atoi(argv[1]); + traffic_timeout = atoi(argv[2]); + ps_delay = atoi(argv[3]); + rx_all_dtim = atoi(argv[4]); + listen_interval = atoi(argv[5]); + + if (use_ps_poll > 1) { + printk(usage); + return CMD_DONE; + } + + if (rx_all_dtim > 1) { + printk(usage); + return CMD_DONE; + } + + if (wl_conf_ps(use_ps_poll, traffic_timeout, ps_delay, + rx_all_dtim, listen_interval) != WL_SUCCESS) + printk("configuration failed\n"); + + return CMD_DONE; +} +#endif + +/** + * + */ +cmd_state_t +cmd_setkey(int argc, char* argv[], void* ctx) +{ + int idx, len; + char key[13]; + struct wl_mac_addr_t bssid; + const char *usage = "usage: setkey \n\t "\ + "or: setkey none\n"; + + memset(&bssid.octet, 0xff, sizeof bssid.octet); + if (argc == 2 && strcmp(argv[1], "none") == 0) { + printk("Deleting WEP keys\n"); + wl_delete_wep_key(0, &bssid); + wl_delete_wep_key(1, &bssid); + wl_delete_wep_key(2, &bssid); + wl_delete_wep_key(3, &bssid); + return CMD_DONE; + } + if (argc < 3) { + printk(usage); + return CMD_DONE; + } + idx = atoi(argv[1]); + len = strlen(argv[2]); + /* Pass phrase? */ + if ( 5 == len || 13 == len ) { + strncpy(key, argv[2], len); + } + /* Otherwise it's a hex string */ + else { + len = ascii_to_key(key, argv[2]); + if (0 == len || idx > 3 || idx < 0 || (idx == 0 && *argv[1] != '0')) { + printk(usage); + return CMD_DONE; + } + if (len != 5 && len != 13) { + printk(" WEP key must be 10 (WEP-40) or 26 (WEP-104) digits\n"); + return CMD_DONE; + } + } + wl_add_wep_key(idx, len, key, &bssid); + wl_set_default_wep_key(idx); + + return CMD_DONE; +} + +cmd_state_t +cmd_debug(int argc, char* argv[], void* ctx) +{ + int level; + const char *usage = "usage: debug
\n\t"\ + "section: init, cm, spi, tcp , util, warn\n\t" + "level : 0 (off), 1 (on), 2 (verbose)\n\t" + "or: debug print/on/off\n"; + + if (argc == 2 && strcmp(argv[1], "off") == 0) { + printk("Debug OFF\n"); + INIT_DEBUG_VARIABLES() + return CMD_DONE; + }else if (argc == 2 && strcmp(argv[1], "print") == 0) { + PRINT_DEBUG_VARIABLES() + return CMD_DONE; + }else if (argc == 2 && strcmp(argv[1], "on") == 0) { + printk("Debug ON\n"); + TURNON_DEBUG_VARIABLES(); + return CMD_DONE; + } + if (argc < 3) { + printk(usage); + return CMD_DONE; + } + level = atoi(argv[2]); + if (argc == 3 && strcmp(argv[1], "init") == 0) { + CHECK_DEBUG_LEVEL(level, INFO_INIT_FLAG); + }else if (argc == 3 && strcmp(argv[1], "spi") == 0) { + CHECK_DEBUG_LEVEL(level, INFO_SPI_FLAG); + }else if (argc == 3 && strcmp(argv[1], "tcp") == 0) { + CHECK_DEBUG_LEVEL(level, INFO_TCP_FLAG); + }else if (argc == 3 && strcmp(argv[1], "cm") == 0) { + CHECK_DEBUG_LEVEL(level, INFO_CM_FLAG); + }else if (argc == 3 && strcmp(argv[1], "util") == 0) { + CHECK_DEBUG_LEVEL(level, INFO_UTIL_FLAG); + }else if (argc == 3 && strcmp(argv[1], "warn") == 0) { + CHECK_DEBUG_LEVEL(level, INFO_WARN_FLAG); + } + return CMD_DONE; +} + +extern void dumpPbuf(uint8_t sock); + +/** + * + */ +cmd_state_t +cmd_dumpBuf(int argc, char* argv[], void* ctx) +{ + const char *usage = "usage: dumpPbuf [sock]\n\t"\ + "sock: socket Number\n"; + + if (argc == 2 && strcmp(argv[1], "all") == 0) { + printk("Dump All Buffers\n"); + int i = 0; + for (; i= 2) { + + uint8_t sock = atoi(argv[1]); + printk("Socket: %d\n", sock); + + if (argc >= 3) { + uint8_t patternType = atoi(argv[2]); + printk("PatternType: %d\n", patternType); + if (patternType == 1) + { + insertBuf(sock, (uint8_t*)pattern2[0], strlen(pattern2[0])); + insertBuf(sock, (uint8_t*)pattern2[1], strlen(pattern2[1])); + insertBuf(sock, (uint8_t*)pattern2[2], strlen(pattern2[2])); + } + if (patternType == 2) + { + mergeBuf(sock, NULL, NULL); + } + }else{ + if (sock < MAX_SOCK_NUM) + { + sendUdpData(getTTCP(sock, TTCP_MODE_TRANSMIT), (uint8_t*)pattern, sizeof(pattern)/sizeof(char)); + } + } + + } + return CMD_DONE; +} diff --git a/libraries/WiFi/extras/wifiHD/src/cmd_wl.h b/libraries/WiFi/extras/wifiHD/src/cmd_wl.h new file mode 100644 index 000000000..a1d1a0f37 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/cmd_wl.h @@ -0,0 +1,66 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*! \page License + * Copyright (C) 2009, H&D Wireless AB All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of H&D Wireless AB may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef CMD_CM_H +#define CMD_CM_H + +#include +#include "netif/wlif.h" + +/*! A pointer to a struct of type "struct net_cfg" should be passed as + * the ctx pointer in the callbacks below. The struct must have a + * single instance per netif. + */ +#define _DNS_CMD_ + +cmd_state_t cmd_scan(int argc, char* argv[], void* ctx); +cmd_state_t cmd_connect(int argc, char* argv[], void* ctx); +cmd_state_t cmd_set_ip(int argc, char* argv[], void* ctx); +cmd_state_t cmd_setkey(int argc, char* argv[], void* ctx); +cmd_state_t cmd_status(int argc, char* argv[], void* ctx); +cmd_state_t cmd_power(int argc, char* argv[], void* ctx); +cmd_state_t cmd_psconf(int argc, char* argv[], void* ctx); +cmd_state_t cmd_setpass(int argc, char* argv[], void* ctx); +cmd_state_t cmd_delpass(int argc, char* argv[], void* ctx); +cmd_state_t cmd_debug(int argc, char* argv[], void* ctx); +cmd_state_t cmd_debug_toggle(int argc, char* argv[], void* ctx); +cmd_state_t cmd_statSpi(int argc, char* argv[], void* ctx); +cmd_state_t cmd_resetStatSpi(int argc, char* argv[], void* ctx); +cmd_state_t cmd_gethostbyname(int argc, char* argv[], void* ctx); +cmd_state_t cmd_setDnsServer(int argc, char* argv[], void* ctx); +cmd_state_t cmd_startSrv(int argc, char* argv[], void* ctx); +cmd_state_t cmd_startCli(int argc, char* argv[], void* ctx); +cmd_state_t cmd_dumpBuf(int argc, char* argv[], void* ctx); +cmd_state_t cmd_sendUdpData(int argc, char* argv[], void* ctx); +#ifdef WFE_6_12 +cmd_state_t cmd_ibss(int argc, char* argv[], void* ctx); +#endif + + +#endif diff --git a/libraries/WiFi/extras/wifiHD/src/console.c b/libraries/WiFi/extras/wifiHD/src/console.c new file mode 100644 index 000000000..e54943f09 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/console.c @@ -0,0 +1,212 @@ +/*! \page License + * Copyright (C) 2009, H&D Wireless AB All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of H&D Wireless AB may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#define MAX_CMD_CONSOLE_NUM 15 +struct { + cmd_cb_t cb; + const char* str; + void* ctx; +} cmd_list[MAX_CMD_CONSOLE_NUM] = { { 0 } }; + +#ifndef CMD_MAX_LEN +#define CMD_MAX_LEN 80 +#endif +extern int board_putchar(char c); +int io_getc(char *c) +{ + int ci; + int status; + status = usart_read_char(&CONFIG_CONSOLE_PORT, &ci); + if (status == USART_RX_EMPTY) + return 1; + + if (status == USART_RX_ERROR) { + CONFIG_CONSOLE_PORT.cr = AVR32_USART_CR_RSTSTA_MASK; + return 1; + } + + if (ci == '\r') { + board_putchar('\n'); + /* Echo char. */ + } else if (ci == '\b') { + board_putchar(ci); + board_putchar(' '); + board_putchar(ci); + } else + board_putchar(ci); + + + *c = ci; + return 0; +} + +static uint8_t is_initialized = 0; + +char* console_gets() +{ + static char buf[CMD_MAX_LEN]; + static int pos = 0; + char c; + + for (;;) { + if (io_getc(&c)) + return NULL; + + if (c == '\r' || c == '\n') { + buf[pos] = 0; + pos = 0; + return buf; + } + if (c == '\b') { + pos -= 1; + if (pos < 0) pos = 0; + buf[pos] = 0; + } + else + buf[pos++] = c; + if (pos == sizeof(buf)) + pos = 0; + } + return NULL; +} + +int console_add_cmd(const char* str, cmd_cb_t cb, void* ctx) +{ + uint32_t i; + for (i = 0; i < ARRAY_SIZE(cmd_list); i++) + if (!cmd_list[i].cb) + break; + + if (i == ARRAY_SIZE(cmd_list)) + return -1; + + cmd_list[i].str = str; + cmd_list[i].cb = cb; + cmd_list[i].ctx = ctx; + return 0; +} + +void console_init(void) +{ + printk("\n$ "); + is_initialized = 1; +} + +void console_init_silent(void) { + is_initialized = 1; +} + +int console_schedule_cmd(char *cmd, int interactive) { +#define MAX_ARGS 16 + static int argc, i; + static char* argv[MAX_ARGS]; + static char *buf; + static enum { INPUT, RUN } state = INPUT; + + switch (state) { + case INPUT: { + char* token; + if (NULL == cmd) { + return 0; + } + buf = strdup(cmd); + if (!buf) + return 0; + if (!strlen(buf)) { + interactive ? printk("$ ") : 0; + free(buf); + return 0; + } +#ifdef WIFI_DEBUG_ON + printk("%s : Scheduling command \"%s\"\n", + __func__, + buf); +#endif + for (i = 0; i < ARRAY_SIZE(cmd_list); i++) + if(cmd_list[i].str && !strncmp(cmd_list[i].str, buf, min(strlen(cmd_list[i].str), strlen(buf)))) + break; + + if (ARRAY_SIZE(cmd_list) == 0) { + printk("No commands available. Is the WiFi card responding?\n"); + } + if (i == ARRAY_SIZE(cmd_list)) { + if (interactive) { + printk("available commands:\n"); + for (i = 0; i < ARRAY_SIZE(cmd_list); i++) + if (cmd_list[i].cb) + printk(" %s\n", cmd_list[i].str); + printk("$ "); + } + free(buf); + return 0; + } + + for (token = strtok(buf, " "); token != NULL; + token = strtok(NULL, " ")) { + argv[argc] = token; + argc++; + if (argc == MAX_ARGS) + break; + } + + state = RUN; + } /* fall through */ + + case RUN: { + cmd_state_t s = cmd_list[i].cb(argc, argv, cmd_list[i].ctx); + if (s == CMD_INPROGRESS) + return 1; + + interactive ? printk("$ ") : 0; + + argc = 0; + memset(argv, 0, sizeof argv); + free(buf); + state = INPUT; + } + } + + return 1; +} + + +void console_poll(void) +{ + char *buf; + buf = console_gets(); + console_schedule_cmd(buf, 1); +} diff --git a/libraries/WiFi/extras/wifiHD/src/console.h b/libraries/WiFi/extras/wifiHD/src/console.h new file mode 100644 index 000000000..79bfedb88 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/console.h @@ -0,0 +1,46 @@ +/*! \page License + * Copyright (C) 2009, H&D Wireless AB All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of H&D Wireless AB may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef CONSOLE_H +#define CONSOLE_H + + +typedef enum { + CMD_DONE, + CMD_INPROGRESS +} cmd_state_t; + +typedef cmd_state_t (*cmd_cb_t)(int argc, char* argv[], void* ctx); + +void console_init(void); +void console_init_silent(void); +char* console_gets(void); +int console_add_cmd(const char* str, cmd_cb_t cb, void* ctx); +int console_schedule_cmd(char *cmd, int interactive); +void console_poll(void); + +#endif diff --git a/libraries/WiFi/extras/wifiHD/src/debug.h b/libraries/WiFi/extras/wifiHD/src/debug.h new file mode 100644 index 000000000..154b79984 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/debug.h @@ -0,0 +1,191 @@ +//*********************************************/ +// +// File: debug.h +// +// Author: Domenico La Fauci +// +//********************************************/ + + +#ifndef Debug_H +#define Debug_H + +#include +#include + +#define INFO_INIT_FLAG 1 +#define INFO_TCP_FLAG 2 +#define INFO_SPI_FLAG 4 +#define INFO_CM_FLAG 8 +#define INFO_UTIL_FLAG 16 + +#define INFO_D (1<<0xD) // Debug +#define INFO_E (1<<0xE) // Error +#define INFO_WARN_FLAG (1<<0xF) // Warning +#define DEFAULT_INFO_FLAG 0 //INFO_WARN_FLAG + +#ifdef _DEBUG_ +#define DEFINE_DEBUG_VARIABLES() \ +uint16_t enableDebug = DEFAULT_INFO_FLAG | INFO_WARN_FLAG; \ +uint16_t verboseDebug = 0; \ +uint16_t dumpDebug = 0; \ +uint16_t pollDebug = 0; +#else +#define DEFINE_DEBUG_VARIABLES() \ +uint16_t enableDebug = DEFAULT_INFO_FLAG; \ +uint16_t verboseDebug = 0; \ +uint16_t dumpDebug = 0; \ +uint16_t pollDebug = 0; +#endif + +#define INIT_DEBUG_VARIABLES() \ + enableDebug = DEFAULT_INFO_FLAG | INFO_WARN_FLAG; \ + verboseDebug = 0; \ + dumpDebug = 0; pollDebug = 0; + + +#define PRINT_DEBUG_VARIABLES() \ + printk("Debug enabled: 0x%x\n", enableDebug); \ + printk("Verbose enabled: 0x%x\n", verboseDebug); \ + printk("Dump enabled: 0x%x\n", dumpDebug); \ + printk("POoll enabled: 0x%x\n", pollDebug); + +#define TURNON_DEBUG_VARIABLES() \ + enableDebug = 0xff; + +extern uint16_t enableDebug; +extern uint16_t verboseDebug; +extern uint16_t dumpDebug; +extern uint16_t pollDebug; + +#define ENABLE_DEBUG_LEVEL 1 +#define VERBOSE_DEBUG_LEVEL 2 +#define DUMP_DEBUG_LEVEL 3 +#define POLL_DEBUG_LEVEL 4 + +#define CHECK_DEBUG(VAR, LEVEL, LEVEL_LIMIT, FLAG) \ + do{ \ + if (LEVEL >= LEVEL_LIMIT) VAR |= FLAG; \ + else VAR &= ~FLAG; \ + }while(0); + +#define CHECK_ENA_DEBUG(LEVEL, FLAG) \ + CHECK_DEBUG(enableDebug, LEVEL, ENABLE_DEBUG_LEVEL, FLAG) +#define CHECK_VERB_DEBUG(LEVEL, FLAG) \ + CHECK_DEBUG(verboseDebug, LEVEL, VERBOSE_DEBUG_LEVEL, FLAG) +#define CHECK_DUMP_DEBUG(LEVEL, FLAG) \ + CHECK_DEBUG(dumpDebug, LEVEL, DUMP_DEBUG_LEVEL, FLAG) +#define CHECK_POLL_DEBUG(LEVEL, FLAG) \ + CHECK_DEBUG(pollDebug, LEVEL, POLL_DEBUG_LEVEL, FLAG) + + +#define CHECK_DEBUG_LEVEL(LEVEL, INFO_FLAG) \ + CHECK_ENA_DEBUG(LEVEL, INFO_FLAG) \ + CHECK_VERB_DEBUG(LEVEL, INFO_FLAG) \ + CHECK_DUMP_DEBUG(LEVEL, INFO_FLAG) \ + CHECK_POLL_DEBUG(LEVEL, INFO_FLAG) + +#ifdef _INFO_DEBUG_ +#define PRINT_DEBUG(msg, args...) do { \ + printk("[%s] " msg , __func__ , ##args ); \ +} while (0) + +#define INFO_DEBUG(msg, args...) do { \ + printk("I-[%s] " msg , __func__ , ##args ); \ +} while (0) + +#define WARN_DEBUG(msg, args...) do { \ + printk("W-[%s] " msg , __func__ , ##args ); \ +} while (0) + +#else +do { }while(0); +#endif + +#define IF_DEBUG(X,Y) do { \ +if (enableDebug & INFO_##X##_FLAG) \ +Y; \ +} while (0) + +#define IF_DEBUG_VER(X,Y) do { \ +if (verboseDebug & INFO_##X##_FLAG) \ +Y; \ +} while (0) + +#define IF_DEBUG_DUMP(X,Y) do { \ +if (dumpDebug & INFO_##X##_FLAG) \ +Y; \ +} while (0) + +#define IF_DEBUG_POLL(X,Y) do { \ +if (pollDebug & INFO_##X##_FLAG) {\ +Y; \ +}} while (0) + + + +#define IF_WARN(Y) IF_DEBUG(WARN,Y) +#define IF_WARN_VER(Y) IF_DEBUG_VER(WARN,Y) +#define IF_TCP(Y) IF_DEBUG(TCP,Y) +#define IF_TCP_VER(Y) IF_DEBUG_VER(TCP,Y) +#define IF_TCP_POLL(Y) IF_DEBUG_POLL(TCP,Y) +#define IF_TCP_DUMP(Y) IF_DEBUG_DUMP(TCP,Y) +#define IF_SPI(Y) IF_DEBUG(SPI,Y) +#define IF_SPI_VER(Y) IF_DEBUG_VER(SPI,Y) +#define IF_SPI_DUMP(Y) IF_DEBUG_DUMP(SPI,Y) +#define IF_SPI_POLL(Y) IF_DEBUG_POLL(SPI,Y) +#define IF_UTIL(Y) IF_DEBUG(UTIL,Y) +#define IF_UTIL_VER(Y) IF_DEBUG_VER(UTIL,Y) + +#define WARN(msg, args...) IF_DEBUG(WARN,WARN_DEBUG(msg, ##args)) +#define WARN_VER(msg, args...) IF_DEBUG_VER(WARN,WARN_DEBUG(msg, ##args)) +#define WARN_POLL(msg, args...) IF_DEBUG_POLL(WARN,WARN_DEBUG(msg, ##args)) +#if 0 // disable to reduce the size of binary +#define INFO_INIT(msg, args...) IF_DEBUG(INIT,PRINT_DEBUG(msg, ##args)) +#define INFO_INIT_VER(msg, args...) IF_DEBUG_VER(INIT,PRINT_DEBUG(msg, ##args)) +#else +#define INFO_INIT(msg, args...) +#define INFO_INIT_VER(msg, args...) +#endif +#define INFO_TCP(msg, args...) IF_DEBUG(TCP,PRINT_DEBUG(msg, ##args)) +#define INFO_TCP_VER(msg, args...) IF_DEBUG_VER(TCP,PRINT_DEBUG(msg, ##args)) +#define INFO_TCP_DUMP(msg, args...) IF_DEBUG_DUMP(TCP,PRINT_DEBUG(msg, ##args)) +#define INFO_TCP_POLL(msg, args...) IF_DEBUG_POLL(TCP,PRINT_DEBUG(msg, ##args)) +#define INFO_SPI(msg, args...) IF_DEBUG(SPI,PRINT_DEBUG(msg, ##args)) +#define INFO_SPI_VER(msg, args...) IF_DEBUG_VER(SPI,PRINT_DEBUG(msg, ##args)) +#define INFO_SPI_DUMP(msg, args...) IF_DEBUG_DUMP(SPI,PRINT_DEBUG(msg, ##args)) +#define INFO_SPI_POLL(msg, args...) IF_DEBUG_POLL(SPI,PRINT_DEBUG(msg, ##args)) +#define INFO_UTIL(msg, args...) IF_DEBUG(UTIL,PRINT_DEBUG(msg, ##args)) +#define INFO_UTIL_VER(msg, args...) IF_DEBUG_VER(UTIL,PRINT_DEBUG(msg, ##args)) +#define CM_DPRINTF(msg, args...) IF_DEBUG(CM,PRINT_DEBUG(msg, ##args)) + +extern void dump(char* _buf, uint16_t _count); + +#define _DUMP(BUF, COUNT) do { \ + printk("[%s]: ", __func__); \ + dump((char*)BUF, COUNT); \ + } while (0) + +#ifdef _APP_DEBUG_ +#define DUMP(BUF, COUNT) _DUMP(BUF, COUNT) +#else +#define DUMP(BUF, COUNT) do {} while (0) +#endif +#endif + +#define DUMP_TCP(BUF, COUNT) IF_TCP_DUMP(_DUMP(BUF, COUNT)) +#define DUMP_SPI(BUF, COUNT) IF_SPI_DUMP(_DUMP(BUF, COUNT)) + +#define DUMP_SPI_CMD(BUF) do { \ + if (dumpDebug & INFO_SPI_FLAG) { \ + int i = 0; \ + for (; i < CMD_MAX_LEN; ++i) \ + { \ + printk("0x%x ", BUF[i]); \ + if (BUF[i] == END_CMD) \ + break; \ + } \ + printk("\n"); \ + } \ +}while(0); + diff --git a/libraries/WiFi/extras/wifiHD/src/fw_download.h b/libraries/WiFi/extras/wifiHD/src/fw_download.h new file mode 100644 index 000000000..e36214f76 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/fw_download.h @@ -0,0 +1,38 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*! \page License + * Copyright (C) 2009, H&D Wireless AB All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of H&D Wireless AB may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef FW_DOWNLOAD_H +#define FW_DOWNLOAD_H + +#include +#include + +int fw_download_init(void); +size_t fw_read_cb(void *ctx, const uint8_t** buf, size_t offset, size_t len); +#endif diff --git a/libraries/WiFi/extras/wifiHD/src/fw_download_extflash.c b/libraries/WiFi/extras/wifiHD/src/fw_download_extflash.c new file mode 100644 index 000000000..d679271f2 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/fw_download_extflash.c @@ -0,0 +1,82 @@ +/*! \page License + * Copyright (C) 2009, H&D Wireless AB All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of H&D Wireless AB may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#include +#include +#include +#include +#include + +int fw_download_init(void) +{ + nvram_init(); + return 0; +} + +#define BUF_SIZE 512 + + +size_t fw_read_cb(void* ctx, + const uint8_t** buf, + size_t offset, + size_t len) +{ + static uint8_t* fw_buf = NULL; + size_t rlen; + /* when firmware download is completed, this function will be + * invoked one additional time with buf set to NULL. we can + * free the firmware buffer at this time since it's no longer + * needed. + */ + if (NULL == buf) { + if (fw_buf) { + free(fw_buf); + fw_buf = NULL; + } + return 0; + } + + /* first call? then initialize flash and allocate a buffer to hold + * firmware data. + */ + if (fw_buf == NULL) { + fw_buf = malloc(BUF_SIZE); + + if (fw_buf == NULL) { + printk("could not allocate firmware buffer\n"); + return 0; + } + } + /* read at most a full buffer */ + rlen = len > BUF_SIZE ? BUF_SIZE : len; + + /* read data and update output parameters */ + nvram_read(offset, fw_buf, rlen); + *buf = fw_buf; + + return rlen; +} diff --git a/libraries/WiFi/extras/wifiHD/src/license.txt b/libraries/WiFi/extras/wifiHD/src/license.txt new file mode 100644 index 000000000..e57439f37 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/license.txt @@ -0,0 +1,42 @@ + Copyright (C) 2009, H&D Wireless AB All rights reserved. + + The license to use this software in whole and in part and to + redistribute it in any form follows with the WiFi HW module from H&D + Wireless and is granted under the following restrictions: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + 3. The name of H&D Wireless AB may not be used to endorse or promote + products derived from this software without specific prior written + permission. + + 4. The software may only be used together with hardware from H&D + Wireless all other use is prohibited. + + 5. The license to use and redistribute the software is granted + together with the purchase of a hardware platform on a one to one + basis + + 6. The binary code may not be reversed engineered or by other means + copied to circumvent this license. + + THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY + EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT + SHALL HD WIRELESS AB BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + OF THE POSSIBILITY OF SUCH DAMAGE. + + For more information regarding this software license Contact H&D + Wireless AB (support@hd-wireless.se). diff --git a/libraries/WiFi/extras/wifiHD/src/lwip_setup.c b/libraries/WiFi/extras/wifiHD/src/lwip_setup.c new file mode 100644 index 000000000..bfa8c090a --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/lwip_setup.c @@ -0,0 +1,145 @@ +/*! \page License + * Copyright (C) 2009, H&D Wireless AB All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of H&D Wireless AB may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/*! + * \file lwIP setup code + * + * \brief Collects the lwIP setup code that an application has to + * execute in a standalone environment. + * + * \author H&D Wireless AB \n + * + */ + +#include +#include +#include +#include +#include +#include +#include + +#include "lwip_setup.h" +#include "lwip/dns.h" + + +/** + * + */ +static void +tcp_tmr_cb(void *ctx) +{ + tcp_tmr(); +} + +/** + * + */ +static void +ip_tmr_cb(void *ctx) +{ + ip_reass_tmr(); +} + +/** + * + */ +static void +dns_tmr_cb(void *ctx) +{ + dns_tmr(); +} + +/** + * + */ +static void +etharp_tmr_cb(void *ctx) +{ + etharp_tmr(); +} + + +/** + * + */ +static void +dhcp_fine_tmr_cb(void *ctx) +{ + dhcp_fine_tmr(); +} + +/** + * + */ +static void +dhcp_coarse_tmr_cb(void *ctx) +{ + dhcp_coarse_tmr(); +} + +int start_ip_stack(struct net_cfg *cfg, + struct ip_addr ipaddr, + struct ip_addr netmask, + struct ip_addr gw) { + + if (cfg->dhcp_enabled) { + IP4_ADDR(&gw, 0,0,0,0); + IP4_ADDR(&ipaddr, 0,0,0,0); + IP4_ADDR(&netmask, 0,0,0,0); + } + + /* add wl to lwip interface list and set as default */ + cfg->netif = netif_add(cfg->netif, + &ipaddr, + &netmask, + &gw, + NULL, + wlif_init, /* init */ + ethernet_input /* handles ARP and IP packets */); + + if (cfg->netif == NULL) + return -1; + netif_set_default(cfg->netif); + + /* register lwip timer callbacks for tcp, arp and dhcp protocols */ + timer_sched_timeout_cb(5000, TIMEOUT_PERIODIC, + etharp_tmr_cb, NULL); + timer_sched_timeout_cb(TCP_TMR_INTERVAL, TIMEOUT_PERIODIC, + tcp_tmr_cb, NULL); + timer_sched_timeout_cb(DHCP_FINE_TIMER_MSECS, TIMEOUT_PERIODIC, + dhcp_fine_tmr_cb, NULL); + timer_sched_timeout_cb(DHCP_COARSE_TIMER_MSECS, TIMEOUT_PERIODIC, + dhcp_coarse_tmr_cb, NULL); + timer_sched_timeout_cb(IP_TMR_INTERVAL, TIMEOUT_PERIODIC, + ip_tmr_cb, NULL); + timer_sched_timeout_cb(DNS_TMR_INTERVAL, TIMEOUT_PERIODIC, + dns_tmr_cb, NULL); + + return 1; +} diff --git a/libraries/WiFi/extras/wifiHD/src/lwip_setup.h b/libraries/WiFi/extras/wifiHD/src/lwip_setup.h new file mode 100644 index 000000000..7edf2b579 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/lwip_setup.h @@ -0,0 +1,30 @@ +#ifndef _LWIP_SETUP_H +#define _LWIP_SETUP_H + +#define INIT_IP_CONFIG 0xff +#define STATIC_IP_CONFIG 0 +#define DYNAMIC_IP_CONFIG 1 + +struct net_cfg { + struct netif *netif; /* lwip network interface */ + uint8_t dhcp_enabled; + uint8_t dhcp_running; +}; + +struct ctx_server { + struct net_cfg net_cfg; + uint8_t wl_init_complete; +}; + +/*! Start the IP stack. + * If cfg->netif must have been allocated and lwip_init() + * must have been called before this function is called + * (since the IP stack may have to be polled before this + * function can be called). + */ +int start_ip_stack(struct net_cfg *cfg, + struct ip_addr ipaddr, + struct ip_addr netmask, + struct ip_addr gw); + +#endif /* _LWIP_SETUP_H */ diff --git a/libraries/WiFi/extras/wifiHD/src/lwipopts.h b/libraries/WiFi/extras/wifiHD/src/lwipopts.h new file mode 100644 index 000000000..7b08b8489 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/lwipopts.h @@ -0,0 +1,450 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/** + * @file + * + * lwIP Options Configuration + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef __LWIPOPTS_H__ +#define __LWIPOPTS_H__ + +#include "wl_api.h" +#include + +#ifndef BOARD +#error "BOARD must be defined" +#endif + +/* + ----------------------------------------------- + ---------- Platform specific locking ---------- + ----------------------------------------------- +*/ + +/** + * NO_SYS==1: Provides VERY minimal functionality. Otherwise, + * use lwIP facilities. + */ +#define NO_SYS 1 + + +/* + ------------------------------------ + ---------- Memory options ---------- + ------------------------------------ +*/ +/** + * MEM_ALIGNMENT: should be set to the alignment of the CPU + * 4 byte alignment -> #define MEM_ALIGNMENT 4 + * 2 byte alignment -> #define MEM_ALIGNMENT 2 + */ +#define MEM_ALIGNMENT 4 + +/** + * MEM_SIZE: the size of the heap memory. If the application will send + * a lot of data that needs to be copied, this should be set high. + */ +#define MEM_SIZE 16000 + + +/* + ------------------------------------------------ + ---------- Internal Memory Pool Sizes ---------- + ------------------------------------------------ +*/ +/** + * MEMP_NUM_PBUF: the number of memp struct pbufs (used for PBUF_ROM and PBUF_REF). + * If the application sends a lot of data out of ROM (or other static memory), + * this should be set high. + */ +#if BOARD == EVK1101 /* Reduced RAM */ + #define MEMP_NUM_PBUF 4 +#else + #define MEMP_NUM_PBUF 30 +#endif +/** + * MEMP_NUM_RAW_PCB: Number of raw connection PCBs + * (requires the LWIP_RAW option) + */ +#define MEMP_NUM_RAW_PCB 4 + +/** + * MEMP_NUM_UDP_PCB: the number of UDP protocol control blocks. One + * per active UDP "connection". + * (requires the LWIP_UDP option) + */ +#define MEMP_NUM_UDP_PCB 4 + +/** + * MEMP_NUM_TCP_PCB: the number of simulatenously active TCP connections. + * (requires the LWIP_TCP option) + */ +#define MEMP_NUM_TCP_PCB 4 + +/** + * MEMP_NUM_TCP_PCB_LISTEN: the number of listening TCP connections. + * (requires the LWIP_TCP option) + */ +#define MEMP_NUM_TCP_PCB_LISTEN 2 + +/** + * MEMP_NUM_TCP_SEG: the number of simultaneously queued TCP segments. + * (requires the LWIP_TCP option) + */ +#if BOARD == EVK1101 /* Reduced RAM */ + #define MEMP_NUM_TCP_SEG 2 +#else + #define MEMP_NUM_TCP_SEG 32 +#endif + +/** + * MEMP_NUM_ARP_QUEUE: the number of simulateously queued outgoing + * packets (pbufs) that are waiting for an ARP request (to resolve + * their destination address) to finish. + * (requires the ARP_QUEUEING option) + */ +#define MEMP_NUM_ARP_QUEUE 2 + +/** + * MEMP_NUM_SYS_TIMEOUT: the number of simulateously active timeouts. + * (requires NO_SYS==0) + */ +#define MEMP_NUM_SYS_TIMEOUT 0 + +/** + * MEMP_NUM_NETBUF: the number of struct netbufs. + * (only needed if you use the sequential API, like api_lib.c) + */ +#define MEMP_NUM_NETBUF 0 + +/** + * MEMP_NUM_NETCONN: the number of struct netconns. + * (only needed if you use the sequential API, like api_lib.c) + */ +#define MEMP_NUM_NETCONN 0 + +/** + * MEMP_NUM_TCPIP_MSG_API: the number of struct tcpip_msg, which are used + * for callback/timeout API communication. + * (only needed if you use tcpip.c) + */ +#define MEMP_NUM_TCPIP_MSG_API 0 + +/** + * MEMP_NUM_TCPIP_MSG_INPKT: the number of struct tcpip_msg, which are used + * for incoming packets. + * (only needed if you use tcpip.c) + */ +#define MEMP_NUM_TCPIP_MSG_INPKT 0 + +/** + * PBUF_POOL_SIZE: the number of buffers in the pbuf pool. + */ +#if BOARD == EVK1101 /* Reduced RAM */ + #define PBUF_POOL_SIZE 2 +#else + #define PBUF_POOL_SIZE 32 +#endif +/* + --------------------------------- + ---------- ARP options ---------- + --------------------------------- +*/ +/** + * LWIP_ARP==1: Enable ARP functionality. + */ +#define LWIP_ARP 1 + +/* + -------------------------------- + ---------- IP options ---------- + -------------------------------- +*/ +/** + * IP_FORWARD==1: Enables the ability to forward IP packets across network + * interfaces. If you are going to run lwIP on a device with only one network + * interface, define this to 0. + */ +#define IP_FORWARD 0 + +/** + * IP_OPTIONS: Defines the behavior for IP options. + * IP_OPTIONS==0_ALLOWED: All packets with IP options are dropped. + * IP_OPTIONS==1_ALLOWED: IP options are allowed (but not parsed). + */ +#define IP_OPTIONS_ALLOWED 1 + +/** + * IP_REASSEMBLY==1: Reassemble incoming fragmented IP packets. Note that + * this option does not affect outgoing packet sizes, which can be controlled + * via IP_FRAG. + */ +#define IP_REASSEMBLY 1 + +/** + * IP_FRAG==1: Fragment outgoing IP packets if their size exceeds MTU. Note + * that this option does not affect incoming packet sizes, which can be + * controlled via IP_REASSEMBLY. + */ +#define IP_FRAG 1 + +/** + * IP_REASS_MAXAGE: Maximum time (in multiples of IP_TMR_INTERVAL - so seconds, normally) + * a fragmented IP packet waits for all fragments to arrive. If not all fragments arrived + * in this time, the whole packet is discarded. + */ +#define IP_REASS_MAXAGE 3 + +/** + * IP_REASS_MAX_PBUFS: Total maximum amount of pbufs waiting to be reassembled. + * Since the received pbufs are enqueued, be sure to configure + * PBUF_POOL_SIZE > IP_REASS_MAX_PBUFS so that the stack is still able to receive + * packets even if the maximum amount of fragments is enqueued for reassembly! + */ +#if BOARD == EVK1101 /* Reduced RAM */ + #define IP_REASS_MAX_PBUFS PBUF_POOL_SIZE + #define MEMP_NUM_REASSDATA PBUF_POOL_SIZE-1 +#else + #define IP_REASS_MAX_PBUFS 10 +#endif + +/** + * IP_FRAG_USES_STATIC_BUF==1: Use a static MTU-sized buffer for IP + * fragmentation. Otherwise pbufs are allocated and reference the original + * packet data to be fragmented. + */ +#define IP_FRAG_USES_STATIC_BUF 0 + +/** + * IP_DEFAULT_TTL: Default value for Time-To-Live used by transport layers. + */ +#define IP_DEFAULT_TTL 255 + +/* + ---------------------------------- + ---------- ICMP options ---------- + ---------------------------------- +*/ +/** + * LWIP_ICMP==1: Enable ICMP module inside the IP stack. + * Be careful, disable that make your product non-compliant to RFC1122 + */ +#define LWIP_ICMP 1 + +/** + * ICMP_TTL: Default value for Time-To-Live used by ICMP packets. + */ +#define ICMP_TTL (IP_DEFAULT_TTL) + +/* + --------------------------------- + ---------- RAW options ---------- + --------------------------------- +*/ +/** + * LWIP_RAW==1: Enable application layer to hook into the IP layer itself. + */ +#define LWIP_RAW 1 + +/* + ---------------------------------- + ---------- DHCP options ---------- + ---------------------------------- +*/ +/** + * LWIP_DHCP==1: Enable DHCP module. + */ +#define LWIP_DHCP 1 + +/* + ------------------------------------ + ---------- AUTOIP options ---------- + ------------------------------------ +*/ +/** + * LWIP_AUTOIP==1: Enable AUTOIP module. + */ +#define LWIP_AUTOIP 0 + +/* + ---------------------------------- + ---------- SNMP options ---------- + ---------------------------------- +*/ +/** + * LWIP_SNMP==1: Turn on SNMP module. UDP must be available for SNMP + * transport. + */ +#define LWIP_SNMP 0 +#define SNMP_PRIVATE_MIB 0 + +/* + ---------------------------------- + ---------- IGMP options ---------- + ---------------------------------- +*/ +/** + * LWIP_IGMP==1: Turn on IGMP module. + */ +#define LWIP_IGMP 0 + +/* + ---------------------------------- + ---------- DNS options ----------- + ---------------------------------- +*/ +/** + * LWIP_DNS==1: Turn on DNS module. UDP must be available for DNS + * transport. + */ +#define LWIP_DNS 1 + +/* + --------------------------------- + ---------- UDP options ---------- + --------------------------------- +*/ +/** + * LWIP_UDP==1: Turn on UDP. + */ +#define LWIP_UDP 1 + +/** + * LWIP_UDPLITE==1: Turn on UDP-Lite. (Requires LWIP_UDP) + */ +#define LWIP_UDPLITE 0 + +/** + * UDP_TTL: Default Time-To-Live value. + */ +#define UDP_TTL (IP_DEFAULT_TTL) + +/* + --------------------------------- + ---------- TCP options ---------- + --------------------------------- +*/ +/** + * LWIP_TCP==1: Turn on TCP. + */ +#define LWIP_TCP 1 + +/* + ---------------------------------- + ---------- Pbuf options ---------- + ---------------------------------- +*/ +/** + * PBUF_LINK_HLEN: the number of bytes that should be allocated for a + * link level header. The default is 14, the standard value for + * Ethernet. + */ +#define PBUF_LINK_HLEN (14 + ETH_PAD_SIZE) + +/* + ------------------------------------ + ---------- LOOPIF options ---------- + ------------------------------------ +*/ +/** + * LWIP_HAVE_LOOPIF==1: Support loop interface (127.0.0.1) and loopif.c + */ +#define LWIP_HAVE_LOOPIF 1 +#define LWIP_LOOPIF_MULTITHREADING 0 + +/* + ---------------------------------------------- + ---------- Sequential layer options ---------- + ---------------------------------------------- +*/ + +/** + * LWIP_NETCONN==1: Enable Netconn API (require to use api_lib.c) + */ +#define LWIP_NETCONN 0 + +/* + ------------------------------------ + ---------- Socket options ---------- + ------------------------------------ +*/ +/** + * LWIP_SOCKET==1: Enable Socket API (require to use sockets.c) + */ +#define LWIP_SOCKET 0 + +/* + ---------------------------------------- + ---------- Statistics options ---------- + ---------------------------------------- +*/ +/** + * LWIP_STATS==1: Enable statistics collection in lwip_stats. + */ +#define LWIP_STATS 1 +#define LINK_STATS 1 + +/* Misc */ +#define LWIP_NETIF_LINK_CALLBACK 1 +#define LWIP_NETIF_STATUS_CALLBACK 1 +#define LWIP_TIMEVAL_PRIVATE 0 + +#undef DHCP_DOES_ARP_CHECK + +#if 0 +#define LWIP_DEBUG 1 +//#define NETIF_DEBUG LWIP_DBG_ON +//#define DHCP_DEBUG LWIP_DBG_ON +//#define ICMP_DEBUG LWIP_DBG_ON +//#define TCP_DEBUG LWIP_DBG_ON +//#define TCP_RTO_DEBUG LWIP_DBG_ON +//#define IP_DEBUG LWIP_DBG_ON +//#define TCP_CWND_DEBUG LWIP_DBG_ON +//#define ETHARP_DEBUG LWIP_DBG_ON +#define PBUF_DEBUG LWIP_DBG_ON +//#define TCP_INPUT_DEBUG LWIP_DBG_ON +//#define TCP_OUTPUT_DEBUG LWIP_DBG_ON +#endif + +#define ETH_PAD_SIZE WL_HEADER_SIZE /* size of wifiengine header */ +#define MEM_LIBC_MALLOC 1 + +#define TCP_MSS 512 +#if BOARD == EVK1101 /* Reduced RAM */ + #define TCP_SND_BUF (1460*1) /* MTU (1500) - IP - TCP hdrs == 1460 */ +#else + #define TCP_SND_BUF 4096 +#endif +#endif /* __LWIPOPTS_H__ */ diff --git a/libraries/WiFi/extras/wifiHD/src/main.c b/libraries/WiFi/extras/wifiHD/src/main.c new file mode 100644 index 000000000..fffb34e48 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/main.c @@ -0,0 +1,454 @@ +/* + * main.c + * + * Created on: May 27, 2010 + * Author: mlf by Metodo2 srl + */ + +//#define _TEST_SPI_ + +#include +#include "board.h" +#include "gpio.h" + +#include +#include "wl_api.h" +#include "wl_cm.h" + +#include "lwip/init.h" +#include "lwip/dhcp.h" +#include "lwip/dns.h" +#include "lwip/tcp.h" +#include "netif/etharp.h" +#include "netif/wlif.h" + +#include "board_init.h" +#include "trace.h" + +#include "timer.h" +#include "util.h" +#include "cmd_wl.h" +#include "ping.h" +#include "ard_tcp.h" +#include "spi.h" +#include "ard_spi.h" +#include "delay.h" +#include "tc.h" +#include "debug.h" +#include "ard_utils.h" +#include + +/* FIRMWARE version */ +const char* fwVersion = "1.1.0"; + +#if BOARD == ARDUINO +#if !defined(DATAFLASH) +#include "wl_fw.h" + +int fw_download_init(void) { return 0;} +void fw_download_cb(void* ctx, uint8_t** buf, uint32_t* len) +{ + //printk("Fw download not available!\n"); + /* remember accross different calls */ + static uint8_t* _fw_buf = (uint8_t*)&fw_buf[0]; + static uint32_t offset = 0; + + /* when firmware download is completed, this function will be invoked + * on additional time with the input value of len set to 0. we can free + * the firmware buffer at this time since it's no longer needed. + */ + if (*len == 0) { + return; + } + + /* decide how much to read. we know *len bytes remains, but we only have + * room for SECTOR_SIEZ bytes in our buffer (fw_buf) + */ + uint32_t fw_len = *len; + + *buf = (_fw_buf+offset); + *len = fw_len; + + /* we need to know where to start reading upon next call */ + offset += fw_len; + +} +#else +#include "fw_download.h" +#endif +#endif + +bool ifStatus = false; +bool scanNetCompleted = false; + +static bool initSpiComplete = false; + +// variable used as enable flag for debug prints +DEFINE_DEBUG_VARIABLES(); + +/** + * + */ +static void +wl_cm_scan_cb(void* ctx) +{ + INFO_INIT("Scan Completed!\n"); + scanNetCompleted=true; +} + +/** + * + */ +static void +wl_cm_conn_cb(struct wl_network_t* net, void* ctx) +{ + struct ctx_server* hs = ctx; + + LINK_LED_ON(); + + INFO_INIT("Connection cb...\n"); + + printk("link up, connected to \"%s\"\n", ssid2str(&net->ssid)); + if ( hs->net_cfg.dhcp_enabled == DYNAMIC_IP_CONFIG ) { + INFO_INIT("Start DHCP...\n"); + printk("requesting dhcp ... "); + int8_t result = dhcp_start(hs->net_cfg.netif); + printk((result==ERR_OK)?"OK\n":"FAILED\n"); + hs->net_cfg.dhcp_running = 1; + } + else { + netif_set_up(hs->net_cfg.netif); + } + + INFO_INIT("Start DNS...\n"); + dns_init(); +} + + +/** + * + */ +static void +wl_cm_disconn_cb(void* ctx) +{ + struct ctx_server* hs = ctx; + + LINK_LED_OFF(); + INFO_INIT("Disconnection cb...\n"); + + if (hs->net_cfg.dhcp_running) { + printk("link down, release dhcp\n"); + dhcp_release(hs->net_cfg.netif); + dhcp_stop(hs->net_cfg.netif); + hs->net_cfg.dhcp_running = 0; + } else { + printk("link down\n"); + netif_set_down(hs->net_cfg.netif); + } + + set_result_cmd(WL_FAILURE); +} + +#if 0 +static void wl_cm_err_cb(void* ctx) +{ + int err = *(int*)ctx; + WARN("Error: %d\n", err); + set_result_cmd(err); +} +#endif + +/** + * + */ +static void +ip_status_cb(struct netif* netif) +{ + INFO_INIT("IP status cb...\n"); + if (netif_is_up(netif)) { + set_result_cmd(WL_SUCCESS); + printk("bound to %s\n", ip2str(netif->ip_addr)); + ifStatus = true; + }else{ + ifStatus = false; + closeConnections(); + WARN("Interface not up!\n"); + } +} + + +/** + * + */ +void +led_init(void) +{ + gpio_enable_gpio_pin(LED0_GPIO); + gpio_enable_gpio_pin(LED1_GPIO); + gpio_enable_gpio_pin(LED2_GPIO); + LINK_LED_OFF(); + ERROR_LED_OFF(); + DATA_LED_OFF(); +} + + +void tc_init(void) +{ + // The timer/counter instance and channel number are used in several functions. + // It's defined as local variable for ease-of-use causes and readability. + volatile avr32_tc_t *tc = WIFI_TC; + + // Options for waveform genration. + tc_waveform_opt_t waveform_opt = + { + .channel = WIFI_TC_CHANNEL_ID, // Channel selection. + + .bswtrg = TC_EVT_EFFECT_NOOP, // Software trigger effect on TIOB. + .beevt = TC_EVT_EFFECT_NOOP, // External event effect on TIOB. + .bcpc = TC_EVT_EFFECT_NOOP, // RC compare effect on TIOB. + .bcpb = TC_EVT_EFFECT_NOOP, // RB compare effect on TIOB. + + .aswtrg = TC_EVT_EFFECT_NOOP, // Software trigger effect on TIOA. + .aeevt = TC_EVT_EFFECT_NOOP, // External event effect on TIOA. + .acpc = TC_EVT_EFFECT_TOGGLE, // RC compare effect on TIOA: toggle. + .acpa = TC_EVT_EFFECT_TOGGLE, // RA compare effect on TIOA: toggle (other possibilities are none, set and clear). + + .wavsel = TC_WAVEFORM_SEL_UP_MODE_RC_TRIGGER,// Waveform selection: Up mode with automatic trigger(reset) on RC compare. + .enetrg = FALSE, // External event trigger enable. + .eevt = TC_EXT_EVENT_SEL_TIOB_INPUT, // External event selection. + .eevtedg = TC_SEL_NO_EDGE, // External event edge selection. + .cpcdis = FALSE, // Counter disable when RC compare. + .cpcstop = FALSE, // Counter clock stopped with RC compare. + + .burst = TC_BURST_NOT_GATED, // Burst signal selection. + .clki = TC_CLOCK_RISING_EDGE, // Clock inversion. + .tcclks = TC_CLOCK_SOURCE_TC2 // Internal source clock 3, connected to fPBA / 2. + }; + + // Assign I/O to timer/counter channel pin & function. + gpio_enable_module_pin(WIFI_TC_CHANNEL_PIN, WIFI_TC_CHANNEL_FUNCTION); + + // Initialize the timer/counter. + tc_init_waveform(tc, &waveform_opt); // Initialize the timer/counter waveform. + + // Set the compare triggers. + tc_write_ra(tc, WIFI_TC_CHANNEL_ID, 0x01A4); // Set RA value. + tc_write_rc(tc, WIFI_TC_CHANNEL_ID, 0x0348); // Set RC value. + + // Start the timer/counter. + tc_start(tc, WIFI_TC_CHANNEL_ID); + +} + +/** + * + */ +void +poll(struct ctx_server* hs) +{ + /* this will trigger any scheduled timer callbacks */ + timer_poll(); + + /* handle console input */ + console_poll(); + + /* wl api 'tick' */ + wl_tick(timer_get_ms()); + + /* lwip driver poll */ + wlif_poll(hs->net_cfg.netif); + + if (initSpiComplete) spi_poll(hs->net_cfg.netif); + +#ifdef WITH_GUI + gui_exec(timer_get_ms()); +#endif +} + +void initShell(void* ctx) +{ + /* initialize shell */ + INFO_INIT("Shell init...\n"); + console_init(); + console_add_cmd("scan", cmd_scan, NULL); + console_add_cmd("connect", cmd_connect, NULL); + console_add_cmd("setkey", cmd_setkey, NULL); + console_add_cmd("status", cmd_status, ctx); + console_add_cmd("debug", cmd_debug, NULL); + console_add_cmd("dumpBuf", cmd_dumpBuf, NULL); + console_add_cmd("ipconfig", cmd_set_ip, ctx); +#ifdef ADD_CMDS + console_add_cmd("powersave", cmd_power, NULL); + console_add_cmd("psconf", cmd_psconf, NULL); +#endif +#ifdef PING_CMD + console_add_cmd("ping", cmd_ping, NULL); +#endif + console_add_cmd("ttcp", cmd_ttcp, NULL); +#ifdef WITH_WPA + console_add_cmd("wpass", cmd_setpass, NULL); + console_add_cmd("dpass", cmd_delpass, NULL); +#endif +#ifdef _SPI_STATS_ + console_add_cmd("spiStat", cmd_statSpi, NULL); + console_add_cmd("resetSpiStat", cmd_resetStatSpi, NULL); +#endif +#ifdef _DNS_CMD_ + console_add_cmd("getHost", cmd_gethostbyname, NULL); + console_add_cmd("setDNS", cmd_setDnsServer, NULL); +#endif + console_add_cmd("startSrv", cmd_startSrv, NULL); + console_add_cmd("startCli", cmd_startCli, NULL); + console_add_cmd("sendUdp", cmd_sendUdpData, NULL); + +} + +/** + * + */ +void +wl_init_complete_cb(void* ctx) +{ + struct ctx_server *hs = ctx; + struct ip_addr ipaddr, netmask, gw; + wl_err_t wl_status; + + if (hs->net_cfg.dhcp_enabled == INIT_IP_CONFIG) + { + IP4_ADDR(&gw, 0,0,0,0); + IP4_ADDR(&ipaddr, 0,0,0,0); + IP4_ADDR(&netmask, 0,0,0,0); + + /* default is dhcp enabled */ + hs->net_cfg.dhcp_enabled = DYNAMIC_IP_CONFIG; + } + + start_ip_stack(&hs->net_cfg, + ipaddr, + netmask, + gw); + netif_set_status_callback(hs->net_cfg.netif, ip_status_cb); + + INFO_INIT("Starting CM...\n"); + /* start connection manager */ + wl_status = wl_cm_init(wl_cm_scan_cb, wl_cm_conn_cb, wl_cm_disconn_cb, hs); + ASSERT(wl_status == WL_SUCCESS, "failed to init wl conn mgr"); + wl_cm_start(); + + wl_scan(); + + if (initSpi(hs)){ + WARN("Spi not initialized\n"); + }else + { + initSpiComplete = true; + AVAIL_FOR_SPI(); + } + + hs->wl_init_complete = 1; +} + +void startup_init(void) +{ + INIT_SIGNAL_FOR_SPI(); + BUSY_FOR_SPI(); + + // if DEBUG enabled use DEB_PIN_GPIO for debug purposes + DEB_PIN_ENA(); + DEB_PIN_ENA(2); + DEB_PIN_UP(); + DEB_PIN_UP(2); +} + +const char timestamp[] = __TIMESTAMP__; + +/** + * + */ +int +main(void) +{ + wl_err_t wl_status; + int status; + struct ctx_server *hs; + enum wl_host_attention_mode mode; + + startup_init(); + + board_init(); + + led_init(); + + tc_init(); + + delay_init(FOSC0); + +#ifdef _TEST_SPI_ + for (;;) + { + /* handle console input */ + + console_poll(); + + spi_poll(NULL); + + } +#else + printk("Arduino Wifi Startup... [%s]\n", timestamp); + + size_t size_ctx_server = sizeof(struct ctx_server); + hs = calloc(1, size_ctx_server); + ASSERT(hs, "out of memory"); + + size_t size_netif = sizeof(struct netif); + hs->net_cfg.netif = calloc(1, size_netif); + ASSERT(hs->net_cfg.netif, "out of memory"); + hs->net_cfg.dhcp_enabled = INIT_IP_CONFIG; + + INFO_INIT("hs:%p size:0x%x netif:%p size:0x%x\n", hs, size_ctx_server, + hs->net_cfg.netif, size_netif); + initShell(hs); + timer_init(NULL, NULL); + lwip_init(); + + status = fw_download_init(); + ASSERT(status == 0, "failed to prepare for firmware download\n"); + + wl_status = wl_transport_init(fw_read_cb, hs, &mode); + if (wl_status != WL_SUCCESS) + goto err; + INFO_INIT("Mode: 0x%x\n", mode); + wl_status = wl_init(hs, wl_init_complete_cb, mode); + if (wl_status != WL_SUCCESS) + goto err; + + /* start main loop */ + for (;;) + poll(hs); + + +err: + /* show error message on console and display if wlan initialization fails */ + +#define WL_CARD_FAILURE_STR "Could not detect wl device, aborting\n" +#define WL_FIRMWARE_INVALID_STR "Invalid firmware data, aborting\n" +#define WL_OTHER_FAILURE_STR "Failed to start wl initialization\n" + + switch (wl_status) { + case WL_CARD_FAILURE: + printk(WL_CARD_FAILURE_STR); + break; + + case WL_FIRMWARE_INVALID: + printk(WL_FIRMWARE_INVALID_STR); + break; + + default: + printk(WL_OTHER_FAILURE_STR); + break; + } + for (;;) { + timer_poll(); + } +#endif +} diff --git a/libraries/WiFi/extras/wifiHD/src/nvram.c b/libraries/WiFi/extras/wifiHD/src/nvram.c new file mode 100644 index 000000000..2c61c5f1f --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/nvram.c @@ -0,0 +1,153 @@ +/*! \page License + * Copyright (C) 2009, H&D Wireless AB All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of H&D Wireless AB may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#include + +#include "compiler.h" +#include "preprocessor.h" +#include "board.h" +#include "power_clocks_lib.h" +#include "gpio.h" +#include "spi.h" +#include "conf_at45dbx.h" +#include "at45dbx.h" +#include +#include + + +static struct nvram { + uint8_t read; + void *data; + uint32_t len; + uint16_t off; +} PRIV; + +int nvram_init(void) +{ + spi_options_t spiOptions = { + .reg = AT45DBX_SPI_FIRST_NPCS, + .baudrate = AT45DBX_SPI_MASTER_SPEED, + .bits = AT45DBX_SPI_BITS, + .spck_delay = 0, + .trans_delay = 0, + .stay_act = 1, + .spi_mode = 0, + .modfdis = 1 + }; + + at45dbx_init(spiOptions, FPBA_HZ); + return 0; +} + + +/** + * Invoked by at45dbx driver + * + */ +void at45dbx_read_multiple_sector_callback(const void *psector) +{ + struct nvram *priv = &PRIV; + const uint8_t *buf = psector; + + if (!priv->read) + return; + + memcpy(priv->data, buf + priv->off, priv->len); +} + + +/** + * Invoked by at45dbx driver + * + */ +void at45dbx_write_multiple_sector_callback(void *psector) +{ + struct nvram *priv = &PRIV; + uint8_t *buf = psector; + memcpy(buf + priv->off, priv->data, priv->len); +} + + +/** + * Write/read any number bytes into any offset of nor flash by taking care + * of cases where the length is not aligned to the sector size or where + * the addr is not aligned to the sector offsets. + * + */ +static int nvram_rw(uint32_t addr, void *data, uint16_t len, int write) +{ + struct nvram *priv = &PRIV; + priv->read = write ? 0 : 1; + + while (len) { + uint32_t sector = addr / AT45DBX_SECTOR_SIZE; + priv->data = data; + priv->off = addr % AT45DBX_SECTOR_SIZE; + priv->len = AT45DBX_SECTOR_SIZE; + + if (len < AT45DBX_SECTOR_SIZE) + priv->len = len; + + if (priv->len > AT45DBX_SECTOR_SIZE - priv->off) + priv->len = AT45DBX_SECTOR_SIZE - priv->off; + + at45dbx_read_open(sector); + at45dbx_read_multiple_sector(1); + at45dbx_read_close(); + + if (write) { + at45dbx_write_open(sector); + at45dbx_write_multiple_sector(1); + at45dbx_write_close(); + } + + data += priv->len; + len -= priv->len; + addr += priv->len; + } + + return 0; +} + +/** + * Write any number bytes into any offset of nor flash. + * + */ +int nvram_write(uint32_t addr, const void *data, uint32_t len) +{ + return nvram_rw(addr, (void *) data, len, 1); +} + + +/** + * Read any number bytes into any offset of nor flash. + * + */ +int nvram_read(uint32_t addr, void *data, uint32_t len) +{ + return nvram_rw(addr, data, len, 0); +} diff --git a/libraries/WiFi/extras/wifiHD/src/nvram.h b/libraries/WiFi/extras/wifiHD/src/nvram.h new file mode 100644 index 000000000..888274987 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/nvram.h @@ -0,0 +1,10 @@ +#ifndef NVRAM_H +#define NVRAM_H + +#include + +int nvram_init(void); +int nvram_read(uint32_t addr, void *data, uint32_t len); +int nvram_write(uint32_t addr, const void *data, uint32_t len); + +#endif diff --git a/libraries/WiFi/extras/wifiHD/src/owl_os.c b/libraries/WiFi/extras/wifiHD/src/owl_os.c new file mode 100644 index 000000000..d17d8cec7 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/owl_os.c @@ -0,0 +1,140 @@ +#include +#include +#include +#include + +#include + +void *owl_os_alloc(size_t size) +{ + return malloc(size); +} + +void *owl_os_realloc(void *ptr, size_t size) +{ + return realloc(ptr, size); +} + +void owl_os_free(void *p) +{ + free(p); +} + +void *owl_os_memcpy(void *dst, const void *src, size_t n) +{ + return memcpy(dst, src, n); +} + +void *owl_os_memset(void *s, int c, size_t n) +{ + return memset(s, c, n); +} + +void *owl_os_memmove(void *dst, const void *src, size_t n) +{ + return memmove(dst, src, n); +} + +size_t owl_os_strlen(char *s) +{ + return strlen(s); +} + +char *owl_os_strncpy(char *dst, const char *src, size_t n) +{ + return strncpy(dst, src, n); +} + +int owl_os_strncmp(const char *s1, const char *s2, size_t n) +{ + return strncmp(s1, s2, n); +} + +int owl_os_strcmp(const char *s1, const char *s2) +{ + return strcmp(s1, s2); +} + +char *owl_os_strcpy(char *dst, const char *src) +{ + return strcpy(dst, src); +} + +char *owl_os_strdup(const char *s) +{ + return strdup(s); +} + +char *owl_os_strndup(const char *s, size_t n) +{ + return strndup(s, n); +} + +int owl_os_memcmp(const void *s1, const void *s2, size_t n) +{ + return memcmp(s1, s2, n); +} + +long int owl_os_strtol(const char *nptr, char **endptr, int base) +{ + return strtol(nptr, endptr, base); +} + +char *owl_os_strchr(const char *s, int c) +{ + return strchr(s, c); +} + +char *owl_os_strrchr(const char *s, int c) +{ + return strrchr(s, c); +} + +int owl_os_strcasecmp(const char *s1, const char *s2) +{ + return strcasecmp(s1, s2); +} + +char *owl_os_strstr(const char *haystack, const char *needle) +{ + return strstr(haystack, needle); +} + +int owl_os_snprintf(char *str, size_t size, const char *format, ...) +{ + int ret; + va_list ap; + va_start(ap, format); + ret = vsniprintf(str, size, format, ap); + va_end(ap); + return ret; +} + +/* for debugging only, never called if wl_api was built without debug */ +#ifdef CONFIG_OWL +#include "owl_env.h" +int owl_os_printf(const char *fmt, ...) +{ + char *str = NULL; + va_list args; + int len; + char *iter; + + va_start(args, fmt); + + if ((str = malloc(160)) == NULL) + return -1; + + if ((len = vsniprintf(str, 160, fmt, args)) < 0) { + free(str); + return -1; + } + + iter = str; + while (*iter) + owl_putc(*iter++); + + free(str); + return len; +} +#endif diff --git a/libraries/WiFi/extras/wifiHD/src/ping.c b/libraries/WiFi/extras/wifiHD/src/ping.c new file mode 100644 index 000000000..aba97db04 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/ping.c @@ -0,0 +1,340 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2003 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is derived from a part of the lwIP TCP/IP stack. + * + */ +#ifdef PING_CMD +#include "lwip/opt.h" + +#include "lwip/mem.h" +#include "lwip/raw.h" +#include "lwip/icmp.h" +#include "lwip/netif.h" +#include "lwip/sys.h" +#include "lwip/sockets.h" +#include "lwip/inet.h" +#include "lwip/inet_chksum.h" + +#include "ping.h" +#include "timer.h" +#include "util.h" + +#include "getopt.h" + +#define PING_ID 0xAFAF + +struct ping_info_t { + struct ip_addr destination; + uint32_t deadline; /* -w (in seconds) */ + uint32_t interval; /* -i (in ms) */ + uint32_t timeout; /* ms */ + uint32_t data_size; /* -s */ + uint32_t count; /* -c, 0 means continous ping */ + uint32_t size; + uint32_t first_tx_tm; + uint32_t last_tx_tm; + uint32_t last_rx_tm; + uint32_t num_tx; + uint32_t num_rx; + uint32_t flags; + uint16_t seq_num; + Bool quiet; /* -q */ + ping_complete_cb_t complete_cb; + void *ctx; +#define PING_REPLY (1 << 0) +}; + +static struct ping_info_t INFO; + +/** Prepare a echo ICMP request */ +static void ping_prepare_echo(struct icmp_echo_hdr *iecho, + struct ping_info_t* ping_info) +{ + int i; + + ICMPH_TYPE_SET(iecho,ICMP_ECHO); + ICMPH_CODE_SET(iecho, 0); + iecho->chksum = 0; + iecho->id = PING_ID; + iecho->seqno = htons(++ping_info->seq_num); + iecho->chksum = 0; + + /* fill the additional data buffer with some data */ + for(i = 0; i < ping_info->data_size; i++) { + ((char*)iecho)[sizeof(struct icmp_echo_hdr) + i] = i; + } + + iecho->chksum = inet_chksum(iecho, ping_info->size); +} + +/* Ping using the raw ip */ +static u8_t ping_recv(void *arg, struct raw_pcb *pcb, struct pbuf *p, + struct ip_addr *addr) +{ + struct icmp_echo_hdr *iecho; + struct ip_hdr *ip = p->payload; + struct ping_info_t* ping_info = (struct ping_info_t*) arg; + uint32_t us; + + if (pbuf_header( p, -PBUF_IP_HLEN)==0) { + iecho = p->payload; + + if ((iecho->id == PING_ID) && + (iecho->seqno == htons(ping_info->seq_num))) { + ping_info->last_rx_tm = timer_get_ms(); + ping_info->num_rx++; + us = 1000 * + (ping_info->last_rx_tm - ping_info->last_tx_tm); + + if (!ping_info->quiet) + printk("%d bytes from %s: icmp_seq=%d ttl=%d " \ + "time=%d.%03d ms\n", + p->tot_len, ip2str(ip->src), + iecho->seqno, + IPH_TTL(ip), + us / 1000, us % 1000); + + /* do some ping result processing */ + ping_info->flags |= PING_REPLY; + } + } + + pbuf_free(p); + return 1; /* eat the event */ +} + +static void ping_send(struct raw_pcb *raw, struct ping_info_t* ping_info) +{ + struct pbuf *p; + struct icmp_echo_hdr *iecho; + + if (!(p = pbuf_alloc(PBUF_IP, ping_info->size, PBUF_RAM))) { + return; + } + if ((p->len == p->tot_len) && (p->next == NULL)) { + iecho = p->payload; + + ping_prepare_echo(iecho, ping_info); + raw_sendto(raw, p, &ping_info->destination); + + if (!ping_info->first_tx_tm) + ping_info->first_tx_tm = timer_get_ms(); + ping_info->last_tx_tm = timer_get_ms(); + ping_info->num_tx++; + } + pbuf_free(p); +} + +void ping_set_callback(ping_complete_cb_t cb, void *ctx) { + INFO.complete_cb = cb; + INFO.ctx = ctx; +} + +void ping_stop(uint32_t *tx_cnt, uint32_t *rx_cnt) { + struct ping_info_t *ping_info = &INFO; + + *tx_cnt = ping_info->num_tx; + *rx_cnt = ping_info->num_rx; + ping_info->count = ping_info->num_tx; + if ( 0 == ping_info->count ) { + ping_info->count = 1; + } +} + +static int init_ping_info(int argc, char* argv[], struct ping_info_t* ping_info) +{ + int c; + ping_complete_cb_t cb; + void *ctx; + + cb = ping_info->complete_cb; + ctx = ping_info->ctx; + memset(ping_info, 0, sizeof(struct ping_info_t)); + ping_info->complete_cb = cb; + ping_info->ctx = ctx; + + ping_info->deadline = 0; + ping_info->interval = 1000; + ping_info->timeout = 3000; + ping_info->data_size = 32; + ping_info->count = 3; + ping_info->destination = + netif_default ? netif_default->gw : ip_addr_any; + + optind = 1; + while ((c = getopt(argc, argv, "c:i:s:w:q")) != -1) { + switch (c) { + case 'c': + ping_info->count = atoi(optarg); + break; + + case 'i': + ping_info->interval = atoi(optarg); + break; + + case 's': + ping_info->data_size = atoi(optarg); + break; + + case 'q': + ping_info->quiet = TRUE; + break; + + case 'w': + ping_info->deadline = atoi(optarg); + break; + } + } + + ping_info->size = sizeof(struct icmp_echo_hdr) + ping_info->data_size; + + if (optind >= argc) + return -1; + + ping_info->destination = str2ip(argv[optind]); + if (!ping_info->destination.addr) + return -1; + + + ping_info->last_rx_tm = timer_get_ms(); + + return 0; +} + +static void print_stats(struct ping_info_t* ping_info) +{ + printk("\n--- %s ping statistics ---\n", + ip2str(ping_info->destination)); + printk("%d packets transmitted, %d received, %d%% packet loss, "\ + "time %dms\n\n", + ping_info->num_tx, ping_info->num_rx, + 100 * (ping_info->num_tx - ping_info->num_rx) / + ping_info->num_tx, + timer_get_ms() - ping_info->first_tx_tm); +} + +static void ping_finalize(struct ping_info_t* ping_info) { + print_stats(ping_info); + if (ping_info->complete_cb) { + ping_info->complete_cb(ping_info->num_tx, ping_info->num_rx, ping_info->ctx); + } +} + +cmd_state_t cmd_ping(int argc, char* argv[], void* ctx) +{ + static enum { + INIT, + PING, + WAIT_REPLY + } state = INIT; + + struct ping_info_t *ping_info = &INFO; + static struct raw_pcb *pcb; + + switch (state) { + case INIT: + if (init_ping_info(argc, argv, ping_info) != 0) { + printk("Usage: ping [-c count] [-i interval] " \ + "[-s packetsize]\n " \ + "[-w deadline] [-q] destination\n"); + return CMD_DONE; + } + + if (!(pcb = raw_new(IP_PROTO_ICMP))) { + printk("could not allocate pcb\n"); + state = INIT; + return CMD_DONE; + } + raw_recv(pcb, ping_recv, ping_info); + raw_bind(pcb, IP_ADDR_ANY); + + printk("PING %s %d(%d) bytes of data\n", + ip2str(ping_info->destination), + ping_info->data_size, + ping_info->size); + state = PING; + /* fall through */ + + case PING: + if (!netif_is_up(netif_default)) { + printk("netif is down\n"); + raw_remove(pcb); + state = INIT; + return CMD_DONE; + } + + if (ping_info->count && ping_info->num_tx == ping_info->count) { + ping_finalize(ping_info); + raw_remove(pcb); + state = INIT; + return CMD_DONE; + } + + + if (timer_get_ms() < ping_info->last_rx_tm + ping_info->interval) { + return CMD_INPROGRESS; + } + ping_send(pcb, ping_info); + + state = WAIT_REPLY; + return CMD_INPROGRESS; + + case WAIT_REPLY: + if (ping_info->flags & PING_REPLY) { + ping_info->flags &= (~PING_REPLY); + state = PING; + return CMD_INPROGRESS; + } + + if (timer_get_ms() > + ping_info->last_tx_tm + ping_info->timeout) { + if (!ping_info->quiet) + printk("timeout from %s\n", + ip2str(ping_info->destination)); + state = PING; + return CMD_INPROGRESS; + } + + if (ping_info->deadline && + timer_get_ms() > + ping_info->first_tx_tm + ping_info->deadline * 1000) { + ping_finalize(ping_info); + raw_remove(pcb); + state = INIT; + return CMD_DONE; + } + + return CMD_INPROGRESS; + } + + /* unreachable */ + Assert(0); + return CMD_DONE; +} +#endif diff --git a/libraries/WiFi/extras/wifiHD/src/ping.h b/libraries/WiFi/extras/wifiHD/src/ping.h new file mode 100644 index 000000000..47d409d74 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/ping.h @@ -0,0 +1,45 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* + * Copyright (c) 2001-2003 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is derived from a part of the lwIP TCP/IP stack. + * + */ +#ifndef PING_H +#define PING_H + +#include "console.h" + +typedef void (*ping_complete_cb_t)(uint32_t tx_pkt_cnt, uint32_t rx_pkt_cnt, void *ctx); + +void ping_set_callback(ping_complete_cb_t cb, void *ctx); + +void ping_stop(uint32_t *tx_cnt, uint32_t *rx_cnt); + +cmd_state_t cmd_ping(int argc, char* argv[], void* ctx); + +#endif diff --git a/libraries/WiFi/extras/wifiHD/src/printf-stdarg.c b/libraries/WiFi/extras/wifiHD/src/printf-stdarg.c new file mode 100644 index 000000000..92eb21721 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/printf-stdarg.c @@ -0,0 +1,323 @@ +/* This source file is part of the ATMEL AVR32-SoftwareFramework-AT32UC3A-1.4.0 Release */ + +/*This file has been prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief sprintf functions to replace newlib for AVR32 UC3. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + *****************************************************************************/ + +/* Copyright (C) 2006-2008, Atmel Corporation All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of ATMEL may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + Copyright 2001, 2002 Georges Menie (www.menie.org) + stdarg version contributed by Christian Ettinger + + This program 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 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +/* + putchar is the only external dependency for this file, + if you have a working putchar, leave it commented out. + If not, uncomment the define below and + replace outbyte(c) by your own function call. + +*/ + + +#include + +static void printchar(char **str, int c) +{ + extern int board_putchar(char c); + + if (str) { + **str = c; + ++(*str); + } + else (void) board_putchar(c); +} + +#define PAD_RIGHT 1 +#define PAD_ZERO 2 + +static int prints(char **out, const char *string, int width, int pad) +{ + register int pc = 0, padchar = ' '; + + if (width > 0) { + register int len = 0; + register const char *ptr; + for (ptr = string; *ptr; ++ptr) ++len; + if (len >= width) width = 0; + else width -= len; + if (pad & PAD_ZERO) padchar = '0'; + } + if (!(pad & PAD_RIGHT)) { + for ( ; width > 0; --width) { + printchar (out, padchar); + ++pc; + } + } + for ( ; *string ; ++string) { + printchar (out, *string); + ++pc; + } + for ( ; width > 0; --width) { + printchar (out, padchar); + ++pc; + } + + return pc; +} + +/* the following should be enough for 32 bit int */ +#define PRINT_BUF_LEN 12 + +static int printi(char **out, int i, int b, int sg, int width, int pad, int letbase) +{ + char print_buf[PRINT_BUF_LEN]; + register char *s; + register int t, neg = 0, pc = 0; + register unsigned int u = i; + + if (i == 0) { + print_buf[0] = '0'; + print_buf[1] = '\0'; + return prints (out, print_buf, width, pad); + } + + if (sg && b == 10 && i < 0) { + neg = 1; + u = -i; + } + + s = print_buf + PRINT_BUF_LEN-1; + *s = '\0'; + + while (u) { + t = u % b; + if( t >= 10 ) + t += letbase - '0' - 10; + *--s = t + '0'; + u /= b; + } + + if (neg) { + if( width && (pad & PAD_ZERO) ) { + printchar (out, '-'); + ++pc; + --width; + } + else { + *--s = '-'; + } + } + + return pc + prints (out, s, width, pad); +} + +#if 0 +int fprintf(__FILE *stream, const char *format, ...) +{ +return 0; +} +#endif + +int printk_va(char **out, const char *format, va_list args ) +{ + register int width, pad; + register int pc = 0; + char scr[2]; + + for (; *format != 0; ++format) { + if (*format == '%') { + ++format; + width = pad = 0; + if (*format == '\0') break; + if (*format == '%') goto out; + if (*format == '-') { + ++format; + pad = PAD_RIGHT; + } + while (*format == '0') { + ++format; + pad |= PAD_ZERO; + } + for ( ; *format >= '0' && *format <= '9'; ++format) { + width *= 10; + width += *format - '0'; + } + if( *format == 's' ) { + register char *s = (char *)va_arg( args, int ); + pc += prints (out, s?s:"(null)", width, pad); + continue; + } + if( *format == 'd' ) { + pc += printi (out, va_arg( args, int ), 10, 1, width, pad, 'a'); + continue; + } + if( *format == 'p' ) { + pad = 8; + pc += printi (out, va_arg( args, int ), 16, 0, width, pad, 'a'); + continue; + } + if( *format == 'x' ) { + pc += printi (out, va_arg( args, int ), 16, 0, width, pad, 'a'); + continue; + } + if( *format == 'X' ) { + pc += printi (out, va_arg( args, int ), 16, 0, width, pad, 'A'); + continue; + } + if( *format == 'u' ) { + pc += printi (out, va_arg( args, int ), 10, 0, width, pad, 'a'); + continue; + } + if( *format == 'c' ) { + /* char are converted to int then pushed on the stack */ + scr[0] = (char)va_arg( args, int ); + scr[1] = '\0'; + pc += prints (out, scr, width, pad); + continue; + } + } + else { + out: + printchar (out, *format); + ++pc; + } + } + if (out) **out = '\0'; + va_end( args ); + return pc; +} + +int printk(const char *format, ...) +{ + va_list args; + + va_start( args, format ); + return printk_va( 0, format, args ); +} + +#ifndef __ARM__ +int sprintf(char *out, const char *format, ...) +{ + va_list args; + + va_start( args, format ); + return printk_va( &out, format, args ); +} +#endif + +#ifdef TEST_PRINTF +int main(void) +{ + char *ptr = "Hello world!"; + char *np = 0; + int i = 5; + unsigned int bs = sizeof(int)*8; + int mi; + char buf[80]; + + mi = (1 << (bs-1)) + 1; + printf("%s\n", ptr); + printf("printf test\n"); + printf("%s is null pointer\n", np); + printf("%d = 5\n", i); + printf("%d = - max int\n", mi); + printf("char %c = 'a'\n", 'a'); + printf("hex %x = ff\n", 0xff); + printf("hex %02x = 00\n", 0); + printf("signed %d = unsigned %u = hex %x\n", -3, -3, -3); + printf("%d %s(s)%", 0, "message"); + printf("\n"); + printf("%d %s(s) with %%\n", 0, "message"); + sprintf(buf, "justif: \"%-10s\"\n", "left"); printf("%s", buf); + sprintf(buf, "justif: \"%10s\"\n", "right"); printf("%s", buf); + sprintf(buf, " 3: %04d zero padded\n", 3); printf("%s", buf); + sprintf(buf, " 3: %-4d left justif.\n", 3); printf("%s", buf); + sprintf(buf, " 3: %4d right justif.\n", 3); printf("%s", buf); + sprintf(buf, "-3: %04d zero padded\n", -3); printf("%s", buf); + sprintf(buf, "-3: %-4d left justif.\n", -3); printf("%s", buf); + sprintf(buf, "-3: %4d right justif.\n", -3); printf("%s", buf); + + return 0; +} + +/* + * if you compile this file with + * gcc -Wall $(YOUR_C_OPTIONS) -DTEST_PRINTF -c printf.c + * you will get a normal warning: + * printf.c:214: warning: spurious trailing `%' in format + * this line is testing an invalid % at the end of the format string. + * + * this should display (on 32bit int machine) : + * + * Hello world! + * printf test + * (null) is null pointer + * 5 = 5 + * -2147483647 = - max int + * char a = 'a' + * hex ff = ff + * hex 00 = 00 + * signed -3 = unsigned 4294967293 = hex fffffffd + * 0 message(s) + * 0 message(s) with % + * justif: "left " + * justif: " right" + * 3: 0003 zero padded + * 3: 3 left justif. + * 3: 3 right justif. + * -3: -003 zero padded + * -3: -3 left justif. + * -3: -3 right justif. + */ + +#endif diff --git a/libraries/WiFi/extras/wifiHD/src/printf-stdarg.h b/libraries/WiFi/extras/wifiHD/src/printf-stdarg.h new file mode 100644 index 000000000..bce38b6f2 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/printf-stdarg.h @@ -0,0 +1,34 @@ +/*! \page License + * Copyright (C) 2009, H&D Wireless AB All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of H&D Wireless AB may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef PRINTF_STDARG_H +#define PRINTF_STDARG_H +#include + +int printk(const char *format, ...); +int printk_va(char **out, const char *format, va_list args ); +#endif diff --git a/libraries/WiFi/extras/wifiHD/src/timer.c b/libraries/WiFi/extras/wifiHD/src/timer.c new file mode 100644 index 000000000..6ffba634a --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/timer.c @@ -0,0 +1,232 @@ +/*! \page License + * Copyright (C) 2009, H&D Wireless AB All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of H&D Wireless AB may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#ifdef FREERTOS_USED +#include "FreeRTOS.h" +#include "task.h" +#endif + +#define TIMER_HZ 4 + + +struct timeout_t { + U32 tick; + U32 expire_at_tick; + Bool expired; + U8 type; + void (*cb)(void* ctx); + void* ctx; +}; + +struct timer_t { + volatile U32 tick; + struct timeout_t timeout[10]; + void (*tick_isr) (void* ctx); + const U32 MS_PER_TICK; + void *ctx; +}; + +#define ARRAY_SIZE(a) sizeof(a) / sizeof(a[0]) + + +static struct timer_t TIMER = { + .tick = 0, +#ifdef FREERTOS_USED + .MS_PER_TICK = 1 / portTICK_RATE_MS, +#else + .MS_PER_TICK = TIMER_HZ, +#endif + .timeout = { { 0 } }, +}; + +#ifdef FREERTOS_USED /* Use TICK-hook */ + +void vApplicationTickHook( void ) { + struct timer_t* priv = &TIMER; + priv->tick++; + if(priv->tick_isr) { + priv->tick_isr(priv->ctx); + } +} + +#else /* Use interrupt directly */ + +static __attribute__((__interrupt__)) void irq_handler(void) +{ + volatile avr32_rtc_t *rtc = &AVR32_RTC; + struct timer_t* priv = &TIMER; + priv->tick++; + + if(priv->tick_isr) + priv->tick_isr(priv->ctx); + + rtc->icr = AVR32_RTC_ICR_TOPI_MASK; + rtc->isr; +} + +#endif + +void timer_init(void (*tick_isr) (void* ctx), void* ctx) +{ + struct timer_t* priv = &TIMER; + uint8_t id; + +#ifndef FREERTOS_USED + INTC_register_interrupt(&irq_handler, AVR32_RTC_IRQ, AVR32_INTC_INT0); + if (!rtc_init(&AVR32_RTC, RTC_OSC_RC, 0)) + Assert(0); + + rtc_set_top_value(&AVR32_RTC, 115 * priv->MS_PER_TICK / 2); + rtc_enable_interrupt(&AVR32_RTC); + rtc_enable(&AVR32_RTC); +#else + /* With FreeRTOS we use the OS tick instead */ +#endif + priv->tick_isr = tick_isr; + priv->ctx = ctx; + + for (id = 0; id < ARRAY_SIZE(priv->timeout); id++) + priv->timeout[id].expired = TRUE; +} + + +U32 timer_get_ms(void) +{ + struct timer_t* priv = &TIMER; + return priv->tick * priv->MS_PER_TICK; +} + +void timer_delay(U32 ms) +{ + struct timer_t* priv = &TIMER; + U32 expire_at_tick = priv->tick + ms / priv->MS_PER_TICK; + while (priv->tick < expire_at_tick); +} + +/** + * Called from application main loop to invoke any scheduled timeout cbs. + * This function might be called as often as possible rather than at each tick + * to support the timeout value '0', e.g a timeout within less than one tick. + * + */ +void timer_poll(void) +{ + struct timer_t* priv = &TIMER; + U8 i; + + for (i = 0; i < ARRAY_SIZE(priv->timeout); i++) { + struct timeout_t* tmo = &priv->timeout[i]; + if (tmo->expired) + continue; + + if (tmo->expire_at_tick > priv->tick) + continue; + + if (tmo->cb) + tmo->cb(tmo->ctx); + + if (tmo->type == TIMEOUT_PERIODIC) + tmo->expire_at_tick = priv->tick + tmo->tick; + else + tmo->expired = TRUE; + } +} + +static U32 timer_sched_timeout(U32 ms, U8 type) +{ + struct timer_t* priv = &TIMER; + struct timeout_t* tmo; + U8 id; + + Assert(type == TIMEOUT_ONESHOT || type == TIMEOUT_PERIODIC); + + for (id = 0; id < ARRAY_SIZE(priv->timeout); id++) { + tmo = &priv->timeout[id]; + if (tmo->expired) + break; + } + + Assert(id != ARRAY_SIZE(priv->timeout)); + + tmo->tick = ms / priv->MS_PER_TICK; + tmo->expire_at_tick = priv->tick + tmo->tick; + tmo->type = type; + tmo->expired = FALSE; + return id; +} + +U32 timer_sched_timeout_cb(U32 ms, U8 type, void (*cb)(void *ctx), void* ctx) +{ + struct timer_t* priv = &TIMER; + struct timeout_t* tmo; + U8 id; + + Assert(cb); + id = timer_sched_timeout(ms, type); + tmo = &priv->timeout[id]; + + tmo->cb = cb; + tmo->ctx = ctx; + return id; +} + + +U32 timer_mod(U32 id, U32 ms, U8 type, void (*cb)(void *ctx), void* ctx) +{ + struct timer_t* priv = &TIMER; + + if (id != INVALID_TIMER_ID && !priv->timeout[id].expired) + timer_cancel_timeout(id); + + return timer_sched_timeout_cb(ms, type, cb, ctx); +} + +void timer_cancel_timeout(U32 id) +{ + struct timer_t* priv = &TIMER; + struct timeout_t* tmo; + + tmo = &priv->timeout[id]; + tmo->expired = TRUE; +} + +int timer_interval_passed(U32 old, U32 new, U32 diff) { + /* New did not wrap */ + if (new > old && new - old > diff) { + return 1; + } + /* New did wrap */ + else if (new < old && ( ( (U32)(-1) - old ) + new ) > diff ) { + return 1; + } + return 0; +} diff --git a/libraries/WiFi/extras/wifiHD/src/timer.h b/libraries/WiFi/extras/wifiHD/src/timer.h new file mode 100644 index 000000000..6614fbc44 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/timer.h @@ -0,0 +1,51 @@ +/*! \page License + * Copyright (C) 2009, H&D Wireless AB All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of H&D Wireless AB may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef TIMER_H +#define TIMER_H +#include + +enum { + TIMEOUT_ONESHOT, + TIMEOUT_PERIODIC +}; + +#define INVALID_TIMER_ID 0xFFFFFFFF + +/* Handle timer overflows. Return 1 if the interval has passed. */ +int timer_interval_passed(uint32_t old, uint32_t new, uint32_t diff); + +void timer_tick(); +void timer_init(void (*tick_isr) (void* ctx), void* ctx); +void timer_poll(void); +void timer_delay(uint32_t ms); +uint32_t timer_sched_timeout_cb(uint32_t ms, uint8_t type, void (*cb)(void *ctx), void* ctx); +uint32_t timer_mod(uint32_t id, uint32_t ms, uint8_t type, void (*cb)(void *ctx), void* ctx); +void timer_cancel_timeout(uint32_t id); +uint32_t timer_get_ms(void); + +#endif diff --git a/libraries/WiFi/extras/wifiHD/src/top_defs.h b/libraries/WiFi/extras/wifiHD/src/top_defs.h new file mode 100644 index 000000000..09f7c3ef8 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/top_defs.h @@ -0,0 +1,120 @@ +/*! \page License + * Copyright (C) 2009, H&D Wireless AB All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of H&D Wireless AB may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef _TOP_DEFS_H +#define _TOP_DEFS_H + +#include +#include + +#define ARRAY_SIZE(a) sizeof(a) / sizeof((a)[0]) + +#ifndef UNREF +#define UNREF(x) x = x +#endif + +#if __GNUC__ +#ifdef __KERNEL__ +#define WEAK_DECL +#else +#define WEAK_DECL __attribute__ ((__weak__)) +#endif +#define PACKED __attribute__ ((__packed__)) +#define USED __attribute__ ((__used__)) +#else + #error "Unsupported compiler" +#endif + +#ifndef TRUE +#define TRUE 1 +#endif + +#ifndef FALSE +#define FALSE 0 +#endif + + +#if 0 +#include +/* + * These functions should _NOT_ be used, call iprintf, sniprintf, iscanf, siscanf etc + * instead. Those functions do not have support for floating point formats. + * Not using these functions saves 27kB of code. + */ +extern int printf(const char *format, ...) __attribute__ ((deprecated)); +extern int sprintf(char *str, const char *format, ...) __attribute__ ((deprecated)); +extern int snprintf(char *str, size_t size, const char *format, ...) __attribute__ ((deprecated)); + +int vprintf(const char *format, va_list ap) __attribute__ ((deprecated)); +int vfprintf(FILE *stream, const char *format, va_list ap) __attribute__ ((deprecated)); +int vsprintf(char *str, const char *format, va_list ap) __attribute__ ((deprecated)); +int vsnprintf(char *str, size_t size, const char *format, va_list ap) __attribute__ ((deprecated)); + +int scanf(const char *format, ...) __attribute__ ((deprecated)); +int fscanf(FILE *stream, const char *format, ...) __attribute__ ((deprecated)); +int sscanf(const char *str, const char *format, ...) __attribute__ ((deprecated)); + +int vscanf(const char *format, va_list ap) __attribute__ ((deprecated)); +int vsscanf(const char *str, const char *format, va_list ap) __attribute__ ((deprecated)); +int vfscanf(FILE *stream, const char *format, va_list ap) __attribute__ ((deprecated)); +#endif + +#endif + + + +#if defined(__linux__) || defined(__APPLE__) + #include + #include + #define sniprintf snprintf + #define asiprintf asprintf + #define printk printf + #define siscanf sscanf + + #define WL_ASSERT(x) assert(x) + #define WL_DEBUG(args...) printf(args) + + #ifdef NO_LWIP + /* IP address representation from lwIP */ + struct ip_addr { + uint32_t addr; + } PACKED; + #endif + + #define FEAT_SOCKETS + +#else + #define WL_ASSERT(cond) do { \ + if (!(cond)) { \ + printk("%s:%d\n", __FILE__, __LINE__); \ + for(;;); \ + } \ + } while(0) + #define WL_DEBUG(args...) printk(args) + + +#endif diff --git a/libraries/WiFi/extras/wifiHD/src/trace.h b/libraries/WiFi/extras/wifiHD/src/trace.h new file mode 100644 index 000000000..984262a81 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/trace.h @@ -0,0 +1,44 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*! \page License + * Copyright (C) 2009, H&D Wireless AB All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of H&D Wireless AB may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef TRACE_H +#define TRACE_H + +#include +#include "printf-stdarg.h" + +#define ASSERT(cond, str) do { \ + if (!(cond)) { \ + printk("%s\n", str); \ + Assert(0); \ + } \ + } while(0) + + +#endif diff --git a/libraries/WiFi/extras/wifiHD/src/util.c b/libraries/WiFi/extras/wifiHD/src/util.c new file mode 100644 index 000000000..c01edebf4 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/util.c @@ -0,0 +1,260 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*! \page License + * Copyright (C) 2009, H&D Wireless AB All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of H&D Wireless AB may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +const char* ip2str(struct ip_addr addr) +{ + static char buf[16]; + +#if BYTE_ORDER == LITTLE_ENDIAN + sniprintf(buf, sizeof(buf), "%lu.%lu.%lu.%lu", + addr.addr & 0xff, + (addr.addr >> 8) & 0xff, + (addr.addr >> 16) & 0xff, + (addr.addr >> 24) & 0xff); + return buf; +#else + sniprintf(buf, sizeof(buf), "%lu.%lu.%lu.%lu", + (addr.addr >> 24) & 0xff, + (addr.addr >> 16) & 0xff, + (addr.addr >> 8) & 0xff, + (addr.addr) & 0xff); + return buf; +#endif +} + +struct ip_addr str2ip(const char* str) +{ + int a,b,c,d; + uint32_t ip = 0; + struct ip_addr addr; + + if (siscanf(str,"%d.%d.%d.%d",&a,&b,&c,&d) != 4) + goto out; + + if (a < 0 || a > 255 || b < 0 || b > 255 || + c < 0 || c > 255 || d < 0 || d > 255) { + goto out; + } + +#if BYTE_ORDER == LITTLE_ENDIAN + ip = (d << 24) | (c << 16) | (b << 8) | a; +#else + ip = (a << 24) | (b << 16) | (c << 8) | d; +#endif + + out: + addr.addr = ip; + return addr; +} + +uint8_t ascii_to_key(char *outp, const char *inp) { + char buf[3]; + int len; + buf[2] = '\0'; + len = strlen(inp); + if (len % 2) { + printk("Invalid length\n"); + } + len = 0; + while (*inp) { + if (! isxdigit(*inp) || ! isxdigit(*(inp+1)) || + len > WL_MAX_PASS_LEN) { + return 0; + } + buf[0] = *inp++; + buf[1] = *inp++; + *outp++ = strtol(buf, NULL, 16); + len++; + } + return len; +} + + + +void printbuf(const char *prefix, const void *data, size_t len) +{ + const unsigned char *s = data; + int i, j; + + for (i = 0; i < len; i += 16) + { + printk("%s ", prefix); + for(j = 0; j < 16; j++) { + if(i + j >= len) + printk(" "); + else + printk("%02X ", (uint16_t)s[i + j]); + } + printk(": "); + for(j = 0; j < 16; j++) { + if(i + j >= len) + break; + if(s[i+j] >= 32 && s[i+j] < 127) + printk("%c", s[i + j]); + else + printk("."); + } + printk("\n"); + } +} + + +void print_network(struct wl_network_t* wl_network) +{ + printk("%s ", mac2str(wl_network->bssid.octet)); + printk("\"%s\"", ssid2str(&wl_network->ssid)); + printk(" RSSI %d dBm ", wl_network->rssi); + switch(wl_network->net_type) { + case WL_CONN_TYPE_ADHOC: + printk(" Ad-Hoc "); + break; + default : + break; + } + switch (wl_network->enc_type) { + case ENC_TYPE_WEP : + printk(" (WEP encryption)"); + break; + case ENC_TYPE_TKIP : + printk(" (TKIP encryption)"); + break; + case ENC_TYPE_CCMP : + printk(" (CCMP encryption)"); + break; + case ENC_TYPE_NONE : + break; + } + printk("\n"); + +} + +void print_network_list(void) +{ + struct wl_network_list_t* wl_network_list; + uint8_t i; + + wl_get_network_list(&wl_network_list); + + if (wl_network_list->cnt == 0) + printk("no nets found\n"); + + for (i = 0; i < wl_network_list->cnt; i++) + print_network(wl_network_list->net[i]); +} + +int join_argv(char *dst, size_t dst_len, int argc, char* argv[]) { + char *p = dst; + int i; + int len = 0; + + /* Not really kosher, an ssid may legally contain 0-bytes but + * the console interface does not deal with that. + */ + for (i = 0; i < argc; i++) { + len += strlen(argv[i]); + if (len > dst_len) { + printk("ssid too long (max %d)\n", (int) dst_len); + return 0; + } + p += sniprintf(p, + dst_len - (p - dst), + "%s ", + argv[i]); + } + if (p == dst) { + return 0; + } + p--; + *p = '\0'; /* Delete last space */ + + return p - dst; +} + +const char* ssid2str(struct wl_ssid_t *ssid) { + static char buf[WL_SSID_MAX_LENGTH + 1]; + + memset(buf, 0, sizeof buf); + memcpy(buf, ssid->ssid, ssid->len); + + return buf; +} + + +const char* mac2str(uint8_t* mac) +{ + static char buf[18]; + sniprintf(buf, sizeof(buf), "%02x-%02x-%02x-%02x-%02x-%02x", + mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); + return buf; +} + + +char* enc_type2str(enum wl_enc_type enc_type) +{ + switch(enc_type) { + case ENC_TYPE_WEP: + return "WEP"; + case ENC_TYPE_CCMP: + return "CCMP"; + case ENC_TYPE_TKIP: + return "TKIP"; + default: + return ""; + }; +} + +int equal_ssid(const struct wl_ssid_t* ssid1, + const struct wl_ssid_t* ssid2) { + if (ssid1->len == ssid2->len && + (memcmp(ssid1->ssid, ssid2->ssid, ssid1->len) == 0)) { + return 1; + } + return 0; +} + +int equal_bssid(const struct wl_mac_addr_t* bssid1, + const struct wl_mac_addr_t* bssid2) { + if (memcmp(bssid1, bssid2, sizeof *bssid1) == 0) { + return 1; + } + return 0; +} + + diff --git a/libraries/WiFi/extras/wifiHD/src/util.h b/libraries/WiFi/extras/wifiHD/src/util.h new file mode 100644 index 000000000..2b3f74f83 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/util.h @@ -0,0 +1,71 @@ +/*! \page License + * Copyright (C) 2009, H&D Wireless AB All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of H&D Wireless AB may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef _UTIL_H +#define _UTIL_H +#include +#include +#include +#include "lwip/ip.h" +#include + +const char* ip2str(struct ip_addr addr); + +struct ip_addr str2ip(const char* str); + +uint8_t ascii_to_key(char *outp, const char *inp); + +void print_network(struct wl_network_t* wl_network); + +void print_network_list(void); + +int join_argv(char *dst, size_t dst_len, int argc, char* argv[]); + +void printbuf(const char *prefix, const void *data, size_t len); + +const char* ssid2str(struct wl_ssid_t *ssid); + +const char* mac2str(uint8_t mac[6]); + +char* enc_type2str(enum wl_enc_type enc_type); + +int equal_ssid(const struct wl_ssid_t* ssid1, + const struct wl_ssid_t* ssid2); + +int equal_bssid(const struct wl_mac_addr_t* bssid1, + const struct wl_mac_addr_t* bssid2); + +#define NET_SET_SSID(net, xssid, ssid_len) do { \ + DE_MEMCPY((net)->ssid.ssid, (xssid), (ssid_len)); \ + (net)->ssid.len = (ssid_len); \ + } while (0) + +#define NET_SET_BSSID(net, xbssid) do { \ + DE_MEMCPY(&(net)->bssid, &(xbssid), sizeof (xbssid)); \ + } while (0) + +#endif /* _UTIL_H */ diff --git a/libraries/WiFi/extras/wifiHD/src/wifi_spi.h b/libraries/WiFi/extras/wifiHD/src/wifi_spi.h new file mode 100644 index 000000000..e2e262c2f --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/wifi_spi.h @@ -0,0 +1,160 @@ +/* + * wifi_spi.h + * + * Created on: Jul 4, 2010 + * Author: mlf by Metodo2 srl + */ +#ifndef WiFi_Spi_h +#define WiFi_Spi_h + +#include "wl_definitions.h" + +#define CMD_FLAG 0 +#define REPLY_FLAG 1<<7 +#define DATA_FLAG 0x40 + +#define WIFI_SPI_ACK 1 +#define WIFI_SPI_ERR 0xFF + +#define TIMEOUT_CHAR 1000 + +//#define MAX_SOCK_NUM 4 /**< Maxmium number of socket */ +#define NO_SOCKET_AVAIL 255 + +#define START_CMD 0xE0 +#define END_CMD 0xEE +#define ERR_CMD 0xEF +#define CMD_POS 1 // Position of Command OpCode on SPI stream +#define PARAM_LEN_POS 2 // Position of Param len on SPI stream + +enum { + SET_NET_CMD = 0x10, + SET_PASSPHRASE_CMD = 0x11, + SET_KEY_CMD = 0x12, + TEST_CMD = 0x13, + SET_IP_CONFIG_CMD = 0x14, + SET_DNS_CONFIG_CMD = 0x15, + + GET_CONN_STATUS_CMD = 0x20, + GET_IPADDR_CMD = 0x21, + GET_MACADDR_CMD = 0x22, + GET_CURR_SSID_CMD = 0x23, + GET_CURR_BSSID_CMD = 0x24, + GET_CURR_RSSI_CMD = 0x25, + GET_CURR_ENCT_CMD = 0x26, + SCAN_NETWORKS = 0x27, + START_SERVER_TCP_CMD= 0x28, + GET_STATE_TCP_CMD = 0x29, + DATA_SENT_TCP_CMD = 0x2A, + AVAIL_DATA_TCP_CMD = 0x2B, + GET_DATA_TCP_CMD = 0x2C, + START_CLIENT_TCP_CMD= 0x2D, + STOP_CLIENT_TCP_CMD = 0x2E, + GET_CLIENT_STATE_TCP_CMD = 0x2F, + DISCONNECT_CMD = 0x30, + GET_IDX_SSID_CMD = 0x31, + GET_IDX_RSSI_CMD = 0x32, + GET_IDX_ENCT_CMD = 0x33, + REQ_HOST_BY_NAME_CMD= 0x34, + GET_HOST_BY_NAME_CMD= 0x35, + START_SCAN_NETWORKS = 0x36, + GET_FW_VERSION_CMD = 0x37, + GET_TEST_CMD = 0x38, + SEND_DATA_UDP_CMD = 0x39, + GET_REMOTE_DATA_CMD = 0x3A, + + // All command with DATA_FLAG 0x40 send a 16bit Len + + SEND_DATA_TCP_CMD = 0x44, + GET_DATABUF_TCP_CMD = 0x45, + INSERT_DATABUF_CMD = 0x46, + +}; + +#if 0 +enum wl_tcp_state { + CLOSED = 0, + LISTEN = 1, + SYN_SENT = 2, + SYN_RCVD = 3, + ESTABLISHED = 4, + FIN_WAIT_1 = 5, + FIN_WAIT_2 = 6, + CLOSE_WAIT = 7, + CLOSING = 8, + LAST_ACK = 9, + TIME_WAIT = 10 +}; +#endif + +enum numParams{ + PARAM_NUMS_0, + PARAM_NUMS_1, + PARAM_NUMS_2, + PARAM_NUMS_3, + PARAM_NUMS_4, + PARAM_NUMS_5, + MAX_PARAM_NUMS +}; + +#define MAX_PARAMS MAX_PARAM_NUMS-1 +#define PARAM_LEN_SIZE 1 + +typedef struct __attribute__((__packed__)) +{ + uint8_t paramLen; + char* param; +}tParam; + +typedef struct __attribute__((__packed__)) +{ + uint16_t dataLen; + char* data; +}tDataParam; + + +typedef struct __attribute__((__packed__)) +{ + unsigned char cmd; + unsigned char tcmd; + unsigned char nParam; + tParam params[MAX_PARAMS]; +}tSpiMsg; + +typedef struct __attribute__((__packed__)) +{ + unsigned char cmd; + unsigned char tcmd; + unsigned char nParam; + tDataParam params[MAX_PARAMS]; +}tSpiMsgData; + + +typedef struct __attribute__((__packed__)) +{ + unsigned char cmd; + unsigned char tcmd; + //unsigned char totLen; + unsigned char nParam; +}tSpiHdr; + +typedef struct __attribute__((__packed__)) +{ + uint8_t paramLen; + uint32_t param; +}tLongParam; + +typedef struct __attribute__((__packed__)) +{ + uint8_t paramLen; + uint16_t param; +}tIntParam; + +typedef struct __attribute__((__packed__)) +{ + uint8_t paramLen; + uint8_t param; +}tByteParam; + +#endif +uint8_t param; \ No newline at end of file diff --git a/libraries/WiFi/extras/wifiHD/src/wl_cm.c b/libraries/WiFi/extras/wifiHD/src/wl_cm.c new file mode 100644 index 000000000..ebc0e45dd --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/wl_cm.c @@ -0,0 +1,431 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*! \page License + * Copyright (C) 2009, H&D Wireless AB All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of H&D Wireless AB may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#include "wl_cm.h" +#include "util.h" +#include +#include "debug.h" + +/** Roaming configuration parameters **/ + +/*! The ROAMING_RSSI_THRESHOLD setting defines how bad the current + * signal strength should be before we'll consider roaming to an AP + * with better signal strength. The objective is to stay on the + * current AP as long as the RSSI is decent, even if there are other + * APs in the same BSS with better RSSI available. + * If ROAMING_RSSI_THRESHOLD is too high we might roam unecessarily. + * If ROAMING_RSSI_THRESHOLD is too low we might not roam in time to + * avoid packet loss. This also impacts power consumption, staying + * too long with an AP with poor RSSI will consume more power. + * Unit is dBm. + */ +#define ROAMING_RSSI_THRESHOLD -65 + +/*! The ROAMING_RSSI_DIFF setting defines how much better + * than the currently associated AP a new AP must be before + * we'll attempt to roam over to the new AP. + * If ROAMING_RSSI_DIFF is too high it might be too hard + * to roam (important if the STA is expected to move + * quickly through different AP coverage areas). + * If ROAMING_RSSI_DIFF is too low we might bounce between + * two APs with similar signal strengths. + * Unit is dBm. + */ +#define ROAMING_RSSI_DIFF 10 + +# include "printf-stdarg.h" +#include "ard_utils.h" +#include "debug.h" + +/** \defgroup wl_cm Connection Manager + * + * These functions are used to configure and control the WiFi connetion + * manager. + * + * + * @{ + */ + +struct cm_candidate { + struct wl_ssid_t ssid; + struct wl_mac_addr_t bssid; +}; + +struct cm { + cm_scan_cb_t *scan_cb; + cm_conn_cb_t *conn_cb; + cm_disconn_cb_t *disconn_cb; + void* ctx; + uint8_t enabled; + struct cm_candidate candidate; +}; + + +/** + * This function can be modified to pick a network based on + * application specific criteria. + * + * If the SSID can not be found in the scan list it will be + * assumed to be a hidden SSID and the wl_connect() command + * will be called to attempt to probe for the network and + * connect to it. + */ +static struct wl_network_t* +find_best_candidate(struct cm* cm) +{ + struct wl_network_list_t* netlist; + struct wl_network_t *best_net = NULL; + uint8_t i; + + if (wl_get_network_list(&netlist) != WL_SUCCESS) + return NULL; + + if (netlist->cnt == 0) + return NULL; + + for (i = 0; i < netlist->cnt; i++) { + /* match on ssid */ + if (cm->candidate.ssid.len) + if (!equal_ssid(&cm->candidate.ssid, + &netlist->net[i]->ssid)) + continue; + + /* match bssid */ + if (strncmp((char*) cm->candidate.bssid.octet, + "\xff\xff\xff\xff\xff\xff", 6)) + if (!equal_bssid(&cm->candidate.bssid, + &netlist->net[i]->bssid)) + continue; + /* check for best rssi. */ + if ( best_net && + ( best_net->rssi > netlist->net[i]->rssi) ) { + continue; + } + best_net = netlist->net[i]; + } + + return best_net; +} + + +/** + * + */ +static void +select_net(struct cm* cm) +{ + struct wl_network_t *candidate_net; + struct wl_network_t *current_net; + struct wl_ssid_t *ssid_p; + + int ret; + + /* Nothing to do */ + if (0 == cm->candidate.ssid.len) { + return; + } + + current_net = wl_get_current_network(); + candidate_net = find_best_candidate(cm); + + /* Connected to the candidate? ... */ + if ( current_net == candidate_net ) { + if ( current_net ) { + /* ...yes, dont change. */ + + return; + } + } + + /* Roaming checks */ + if (current_net && candidate_net) { + /* Are we changing BSSs? */ + if ( equal_ssid(&candidate_net->ssid, + ¤t_net->ssid)) { + + /* ...no. Does the currently connected + * net have a decent RSSI?...*/ + if ( current_net->rssi > ROAMING_RSSI_THRESHOLD ) { + /* ...yes, stay with it. */ + return; + } + /* ...no. Does the candidate have + * sufficiently better RSSI to + * motivate a switch to it? */ + if ( candidate_net->rssi < current_net->rssi + + ROAMING_RSSI_DIFF) { + return; + } + /* ...yes, try to roam to candidate_net */ + CM_DPRINTF("CM: Roaming from rssi %d to %d\n", + current_net->rssi, + candidate_net->rssi); + } + } + /* a candidate is found */ + if (candidate_net) { + /* We connect to a specific bssid here because + * find_best_candidate() might have picked a + * particulare AP among many with the same SSID. + * wl_connect() would pick one of them at random. + */ + ret = wl_connect_bssid(candidate_net->bssid); + } + /* no candidate found */ + else { + CM_DPRINTF("CM: No candidate found for ssid \"%s\"\n", + ssid2str(&cm->candidate.ssid)); + /* Might be a hidden SSID so we try to connect to it. + * wl_connect() will trigger a directed scan + * for the SSID in this case. + */ + ssid_p = &cm->candidate.ssid; + ret = wl_connect(ssid_p->ssid, ssid_p->len); + } + switch (ret) { + case WL_SUCCESS : + return; + case WL_BUSY: + wl_disconnect(); + return; + case WL_RETRY: + break; + default : + CM_DPRINTF("CM: failed to connect\n"); + break; + } + + /* some operation failed or no candidate found */ + if (wl_scan() != WL_SUCCESS) + CM_DPRINTF("CM: failed to scan\n"); +} + + +/** + * + */ +static void +wl_scan_complete_cb(void* ctx) +{ + struct cm *cm = ctx; + + CM_DPRINTF("CM: scan completed\n"); + + if (cm->scan_cb) + cm->scan_cb(cm->ctx); + + if ( 0 == cm->enabled ) { + return; + } + select_net(cm); +} + +/** + * + */ +static void +wl_media_connected_cb(void* ctx) +{ + struct cm *cm = ctx; + struct wl_network_t *net = wl_get_current_network(); + CM_DPRINTF("CM: connected to %s\n", ssid2str(&net->ssid)); + LINK_LED_ON(); + ERROR_LED_OFF(); + if (cm->conn_cb) + cm->conn_cb(net, cm->ctx); +} + + +/** + * + */ +static void +wl_conn_failure_cb(void* ctx) +{ + struct cm *cm = ctx; + CM_DPRINTF("CM: connect failed, scanning\n"); + ERROR_LED_ON(); + LINK_LED_OFF(); + + if ( 0 == cm->enabled ) { + return; + } + if (wl_scan() != WL_SUCCESS) + /* should never happen */ + CM_DPRINTF("CM: could not start scan after connect fail!\n"); +} + + +/** + * + */ +static void +wl_conn_lost_cb(void* ctx) +{ + struct cm *cm = ctx; + CM_DPRINTF("CM: connection lost, scanning\n"); + LINK_LED_OFF(); + if (cm->disconn_cb) + cm->disconn_cb(cm->ctx); + + if ( 0 == cm->enabled ) { + return; + } + if (wl_scan() != WL_SUCCESS) + /* should never happen */ + CM_DPRINTF("CM: could not start scan after connect lost!\n"); +} + + +/** + * + */ +static void +wl_event_cb(struct wl_event_t event, void* ctx) +{ + struct cm *cm = ctx; + + switch (event.id) { + case WL_EVENT_MEDIA_CONNECTED: + wl_media_connected_cb(cm); + break; + + case WL_EVENT_CONN_FAILURE: + wl_conn_failure_cb(cm); + break; + + case WL_EVENT_MEDIA_DISCONNECTED: + CM_DPRINTF("CM: disconnected\n"); + wl_conn_lost_cb(cm); + break; + + case WL_EVENT_SCAN_COMPLETE: + wl_scan_complete_cb(cm); + break; + + default: + CM_DPRINTF("CM: unhandled event\n"); + }; +} + +static struct cm *cm = NULL; + + +/** + * Doesn't actually start the CM, just initializing. CM will run whenever + * an valid ssid is set through wl_cm_set_network() and wl_cm_start() + * has been called. + */ +wl_err_t +wl_cm_init(cm_scan_cb_t scan_cb, + cm_conn_cb_t conn_cb, + cm_disconn_cb_t disconn_cb, + void* ctx) +{ + if (cm != NULL) + return WL_FAILURE; + + cm = calloc(1, sizeof(struct cm)); + if (cm == NULL) { + CM_DPRINTF("CM: out of memory\n"); + return WL_FAILURE; + } + + if (wl_register_event_cb(wl_event_cb, cm) != WL_SUCCESS) { + CM_DPRINTF("CM: could not register event cb\n"); + return WL_FAILURE; + } + + cm->scan_cb = scan_cb; + cm->conn_cb = conn_cb; + cm->disconn_cb = disconn_cb; + cm->enabled = 0; + cm->ctx = ctx; + + CM_DPRINTF("CM: initialized\n"); + return WL_SUCCESS; +} + +wl_err_t +wl_cm_start(void) { + if (NULL == cm) + return WL_FAILURE; + + cm->enabled = 1; + return WL_SUCCESS; +} + +wl_err_t +wl_cm_stop(void) { + if (NULL == cm) + return WL_FAILURE; + + cm->enabled = 0; + return WL_SUCCESS; +} + + +/** + * Set the desired network which the connection manager should try to + * connect to. + * + * The ssid and bssid of the desired network should be specified. The ssid and + * bssid will be matched against the networks found during scan. If any + * parameter is null, it will always match. If both parameters are null, + * the first found network will be chosen. + * + * @param ssid The ssid of the desired network. If null, any ssid will match. + * @param bssid The bssid of the desired network. If null, any bssid will match. + * + */ +wl_err_t +wl_cm_set_network(struct wl_ssid_t *ssid, struct wl_mac_addr_t *bssid) +{ + if (cm == NULL) + return WL_FAILURE; + + if (ssid) + memcpy(&cm->candidate.ssid, ssid, sizeof(cm->candidate.ssid)); + else + cm->candidate.ssid.len = 0; + + if (bssid) + memcpy(&cm->candidate.bssid, bssid, + sizeof(cm->candidate.bssid)); + else + memset(&cm->candidate.bssid, 0xff, sizeof(cm->candidate.bssid)); + + if (cm->candidate.ssid.len) + wl_scan(); + + return WL_SUCCESS; +} +/* + * @} + */ diff --git a/libraries/WiFi/extras/wifiHD/src/wl_cm.h b/libraries/WiFi/extras/wifiHD/src/wl_cm.h new file mode 100644 index 000000000..bbb65d979 --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/src/wl_cm.h @@ -0,0 +1,51 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*! \page License + * Copyright (C) 2009, H&D Wireless AB All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of H&D Wireless AB may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef WL_CM_H +#define WL_CM_H + +#include +#include +#include + +typedef void (cm_scan_cb_t)(void* ctx); +typedef void (cm_conn_cb_t)(struct wl_network_t *net, void* ctx); +typedef void (cm_disconn_cb_t)(void* ctx); + +wl_err_t wl_cm_set_network(struct wl_ssid_t *ssid, struct wl_mac_addr_t *bssid); + +wl_err_t wl_cm_init(cm_scan_cb_t scan_cb, + cm_conn_cb_t conn_cb, + cm_disconn_cb_t disconn_cb, + void* ctx); + +wl_err_t wl_cm_start(void); +wl_err_t wl_cm_stop(void); + +#endif diff --git a/hardware/arduino/sam/libraries/WiFi/utility/wl_definitions.h b/libraries/WiFi/extras/wifiHD/src/wl_definitions.h similarity index 70% rename from hardware/arduino/sam/libraries/WiFi/utility/wl_definitions.h rename to libraries/WiFi/extras/wifiHD/src/wl_definitions.h index 15de781fc..b07c203fc 100644 --- a/hardware/arduino/sam/libraries/WiFi/utility/wl_definitions.h +++ b/libraries/WiFi/extras/wifiHD/src/wl_definitions.h @@ -2,7 +2,7 @@ * wl_definitions.h * * Created on: Mar 6, 2011 - * Author: dlafauci + * Author: mlf by Metodo2 srl */ #ifndef WL_DEFINITIONS_H_ @@ -26,8 +26,7 @@ #define WL_MAX_ATTEMPT_CONNECTION 10 typedef enum { - WL_NO_SHIELD = 255, - WL_IDLE_STATUS = 0, + WL_IDLE_STATUS, WL_NO_SSID_AVAIL, WL_SCAN_COMPLETED, WL_CONNECTED, @@ -36,15 +35,5 @@ typedef enum { WL_DISCONNECTED } wl_status_t; -/* Encryption modes */ -enum wl_enc_type { /* Values map to 802.11 encryption suites... */ - ENC_TYPE_WEP = 5, - ENC_TYPE_TKIP = 2, - ENC_TYPE_CCMP = 4, - /* ... except these two, 7 and 8 are reserved in 802.11-2007 */ - ENC_TYPE_NONE = 7, - ENC_TYPE_AUTO = 8 -}; - #endif /* WL_DEFINITIONS_H_ */ diff --git a/libraries/WiFi/extras/wifiHD/wifiHD.cproj b/libraries/WiFi/extras/wifiHD/wifiHD.cproj new file mode 100644 index 000000000..3d15941fd --- /dev/null +++ b/libraries/WiFi/extras/wifiHD/wifiHD.cproj @@ -0,0 +1,1291 @@ + + + + 2.0 + 6.0 + com.Atmel.AVRGCC32 + 417e15db-488a-4b56-8d4e-fbe832b2b649 + wifiHD + AT32uc3a1256 + none + Importer + Executable + C + wifiHD + .elf + $(MSBuildProjectDirectory)\$(Configuration) + Native + com.atmel.avrdbg.tool.jtagicemk3 + true + + + + + + + + + + + + + + JTAG + + com.atmel.avrdbg.tool.jtagicemk3 + JTAGICE3 + J30200003078 + true + false + + + + 127.0.0.1 + 51999 + False + + + JTAG + + 250000 + 1000000 + 150000 + false + false + 0 + 0 + 0 + 0 + + + + 3.5.0 + false + + 0 + + + + + True + True + True + True + + + BOARD=ARDUINO + WITH_KEY + WITH_WPA + WITH_NO_DMA + DATAFLASH=1 + _INFO_DEBUG_=1 + + + + + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PDCA + ../src/SOFTWARE_FRAMEWORK/DRIVERS/TC + ../src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS + ../src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX + ../src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC + ../src/SOFTWARE_FRAMEWORK/DRIVERS/EBI/SMC + ../src/SOFTWARE_FRAMEWORK/UTILS/DEBUG + ../src/SOFTWARE_FRAMEWORK/SERVICES/DELAY + ../src/SOFTWARE_FRAMEWORK/DRIVERS/USART + ../src/SOFTWARE_FRAMEWORK/DRIVERS/SPI + ../src/SOFTWARE_FRAMEWORK/DRIVERS/RTC + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PM + ../src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO + ../src/SOFTWARE_FRAMEWORK/DRIVERS/EIC + ../src/CONFIG + ../src/SOFTWARE_FRAMEWORK/DRIVERS/CPU/CYCLE_COUNTER + ../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE + ../src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR + ../src/SOFTWARE_FRAMEWORK/UTILS + ../src/SOFTWARE_FRAMEWORK/DRIVERS/INTC + ../src/SOFTWARE_FRAMEWORK/BOARDS + ../src + ../src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include + ../src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4 + ../src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/include + ../src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD + + + Optimize for size (-Os) + -fdata-sections -ffunction-sections + True + True + True + True + -c -fmessage-length=0 + True + + + newlib_addons-at32ucr2-speed_opt + _ucr2_hd_spi_v2.7.0 + _ucr2_hd_wl_sta_intwpa_v2.7.0 + + + + + ../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS + ../src/SOFTWARE_FRAMEWORK/BOARDS + ../src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.7.0/UCR2/GCC + + + True + True + True + -Wl,--gc-sections -Wl,-e,_trampoline -T../src/SOFTWARE_FRAMEWORK/UTILS/LINKER_SCRIPTS/AT32UC3A/1256/GCC/link_uc3a1256.lds + + + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PDCA + ../src/SOFTWARE_FRAMEWORK/DRIVERS/TC + ../src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS + ../src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX + ../src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC + ../src/SOFTWARE_FRAMEWORK/DRIVERS/EBI/SMC + ../src/SOFTWARE_FRAMEWORK/UTILS/DEBUG + ../src/SOFTWARE_FRAMEWORK/SERVICES/DELAY + ../src/SOFTWARE_FRAMEWORK/DRIVERS/USART + ../src/SOFTWARE_FRAMEWORK/DRIVERS/SPI + ../src/SOFTWARE_FRAMEWORK/DRIVERS/RTC + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PM + ../src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO + ../src/SOFTWARE_FRAMEWORK/DRIVERS/EIC + ../src/CONFIG + ../src/SOFTWARE_FRAMEWORK/DRIVERS/CPU/CYCLE_COUNTER + ../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE + ../src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR + ../src/SOFTWARE_FRAMEWORK/UTILS + ../src/SOFTWARE_FRAMEWORK/DRIVERS/INTC + ../src/SOFTWARE_FRAMEWORK/BOARDS + + + -Wa,-g + + + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PDCA + ../src/SOFTWARE_FRAMEWORK/DRIVERS/TC + ../src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS + ../src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX + ../src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC + ../src/SOFTWARE_FRAMEWORK/DRIVERS/EBI/SMC + ../src/SOFTWARE_FRAMEWORK/UTILS/DEBUG + ../src/SOFTWARE_FRAMEWORK/SERVICES/DELAY + ../src/SOFTWARE_FRAMEWORK/DRIVERS/USART + ../src/SOFTWARE_FRAMEWORK/DRIVERS/SPI + ../src/SOFTWARE_FRAMEWORK/DRIVERS/RTC + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PM + ../src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO + ../src/SOFTWARE_FRAMEWORK/DRIVERS/EIC + ../src/CONFIG + ../src/SOFTWARE_FRAMEWORK/DRIVERS/CPU/CYCLE_COUNTER + ../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE + ../src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR + ../src/SOFTWARE_FRAMEWORK/UTILS + ../src/SOFTWARE_FRAMEWORK/DRIVERS/INTC + ../src/SOFTWARE_FRAMEWORK/BOARDS + + + + + + + + + True + True + True + True + false + false + + + BOARD=ARDUINO + NO_SYS + _DEBUG_ + _ASSERT_ENABLE_ + WITH_KEY + WITH_WPA + WITH_NO_DMA + DATAFLASH=1 + _INFO_DEBUG_=1 + + + + + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PDCA + ../src/SOFTWARE_FRAMEWORK/DRIVERS/TC + ../src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS + ../src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX + ../src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC + ../src/SOFTWARE_FRAMEWORK/DRIVERS/EBI/SMC + ../src/SOFTWARE_FRAMEWORK/UTILS/DEBUG + ../src/SOFTWARE_FRAMEWORK/SERVICES/DELAY + ../src/SOFTWARE_FRAMEWORK/DRIVERS/USART + ../src/SOFTWARE_FRAMEWORK/DRIVERS/SPI + ../src/SOFTWARE_FRAMEWORK/DRIVERS/RTC + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PM + ../src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO + ../src/SOFTWARE_FRAMEWORK/DRIVERS/EIC + ../src/CONFIG + ../src/SOFTWARE_FRAMEWORK/DRIVERS/CPU/CYCLE_COUNTER + ../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE + ../src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR + ../src/SOFTWARE_FRAMEWORK/UTILS + ../src/SOFTWARE_FRAMEWORK/DRIVERS/INTC + ../src/SOFTWARE_FRAMEWORK/BOARDS + ../src + ../src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include + ../src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4 + ../src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/include + ../src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD + + + Optimize (-O1) + -fdata-sections -ffunction-sections + true + false + false + false + false + true + true + false + false + false + Maximum (-g3) + false + false + true + false + false + false + false + -c -fmessage-length=0 + false + true + false + false + false + false + + + newlib_addons-at32ucr2-speed_opt + _ucr2_hd_spi_v2.7.0 + _ucr2_hd_wl_sta_intwpa_v2.7.0 + + + + + ../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS + ../src/SOFTWARE_FRAMEWORK/BOARDS + ../src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.7.0/UCR2/GCC + + + true + false + false + false + false + true + true + + + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PDCA + ../src/SOFTWARE_FRAMEWORK/DRIVERS/TC + ../src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS + ../src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX + ../src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC + ../src/SOFTWARE_FRAMEWORK/DRIVERS/EBI/SMC + ../src/SOFTWARE_FRAMEWORK/UTILS/DEBUG + ../src/SOFTWARE_FRAMEWORK/SERVICES/DELAY + ../src/SOFTWARE_FRAMEWORK/DRIVERS/USART + ../src/SOFTWARE_FRAMEWORK/DRIVERS/SPI + ../src/SOFTWARE_FRAMEWORK/DRIVERS/RTC + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PM + ../src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO + ../src/SOFTWARE_FRAMEWORK/DRIVERS/EIC + ../src/CONFIG + ../src/SOFTWARE_FRAMEWORK/DRIVERS/CPU/CYCLE_COUNTER + ../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE + ../src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR + ../src/SOFTWARE_FRAMEWORK/UTILS + ../src/SOFTWARE_FRAMEWORK/DRIVERS/INTC + ../src/SOFTWARE_FRAMEWORK/BOARDS + + + false + Default (-g) + -Wa,-g + + + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PDCA + ../src/SOFTWARE_FRAMEWORK/DRIVERS/TC + ../src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS + ../src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX + ../src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC + ../src/SOFTWARE_FRAMEWORK/DRIVERS/EBI/SMC + ../src/SOFTWARE_FRAMEWORK/UTILS/DEBUG + ../src/SOFTWARE_FRAMEWORK/SERVICES/DELAY + ../src/SOFTWARE_FRAMEWORK/DRIVERS/USART + ../src/SOFTWARE_FRAMEWORK/DRIVERS/SPI + ../src/SOFTWARE_FRAMEWORK/DRIVERS/RTC + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PM + ../src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO + ../src/SOFTWARE_FRAMEWORK/DRIVERS/EIC + ../src/CONFIG + ../src/SOFTWARE_FRAMEWORK/DRIVERS/CPU/CYCLE_COUNTER + ../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE + ../src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR + ../src/SOFTWARE_FRAMEWORK/UTILS + ../src/SOFTWARE_FRAMEWORK/DRIVERS/INTC + ../src/SOFTWARE_FRAMEWORK/BOARDS + + + false + false + Default (-Wa,-g) + + + + + bin\Debug_512\ + + + True + True + True + True + false + false + + + BOARD=ARDUINO + _APP_DEBUG_ + _DEBUG_ + _ASSERT_ENABLE_ + EXT_BOARD=SPB104 + WITH_KEY + WITH_WPA + WITH_NO_DMA + LWIP_DEBUG + _INFO_DEBUG_=1 + + + + + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PDCA + ../src/SOFTWARE_FRAMEWORK/DRIVERS/TC + ../src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS + ../src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX + ../src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC + ../src/SOFTWARE_FRAMEWORK/DRIVERS/EBI/SMC + ../src/SOFTWARE_FRAMEWORK/UTILS/DEBUG + ../src/SOFTWARE_FRAMEWORK/SERVICES/DELAY + ../src/SOFTWARE_FRAMEWORK/DRIVERS/USART + ../src/SOFTWARE_FRAMEWORK/DRIVERS/SPI + ../src/SOFTWARE_FRAMEWORK/DRIVERS/RTC + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PM + ../src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO + ../src/SOFTWARE_FRAMEWORK/DRIVERS/EIC + ../src/CONFIG + ../src/SOFTWARE_FRAMEWORK/DRIVERS/CPU/CYCLE_COUNTER + ../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE + ../src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR + ../src/SOFTWARE_FRAMEWORK/UTILS + ../src/SOFTWARE_FRAMEWORK/DRIVERS/INTC + ../src/SOFTWARE_FRAMEWORK/BOARDS + ../src + ../src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include + ../src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4 + ../src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/include + ../src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD + + + Optimize (-O1) + -fdata-sections + true + false + false + false + false + true + false + false + false + false + Maximum (-g3) + false + false + true + false + false + false + false + -c -fmessage-length=0 + false + true + false + false + false + false + + + newlib_addons-at32ucr2-speed_opt + _ucr2_hd_spi_standalone_v2.1.1 + _ucr2_hd_wl_standalone_v2.1.1 + + + + + ../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS + ../src/SOFTWARE_FRAMEWORK/BOARDS + ../src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.1.1/UCR2/GCC + + + true + false + false + false + false + true + true + + + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PDCA + ../src/SOFTWARE_FRAMEWORK/DRIVERS/TC + ../src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS + ../src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX + ../src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC + ../src/SOFTWARE_FRAMEWORK/DRIVERS/EBI/SMC + ../src/SOFTWARE_FRAMEWORK/UTILS/DEBUG + ../src/SOFTWARE_FRAMEWORK/SERVICES/DELAY + ../src/SOFTWARE_FRAMEWORK/DRIVERS/USART + ../src/SOFTWARE_FRAMEWORK/DRIVERS/SPI + ../src/SOFTWARE_FRAMEWORK/DRIVERS/RTC + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PM + ../src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO + ../src/SOFTWARE_FRAMEWORK/DRIVERS/EIC + ../src/CONFIG + ../src/SOFTWARE_FRAMEWORK/DRIVERS/CPU/CYCLE_COUNTER + ../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE + ../src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR + ../src/SOFTWARE_FRAMEWORK/UTILS + ../src/SOFTWARE_FRAMEWORK/DRIVERS/INTC + ../src/SOFTWARE_FRAMEWORK/BOARDS + + + false + Default (-g) + -Wa,-g + + + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PDCA + ../src/SOFTWARE_FRAMEWORK/DRIVERS/TC + ../src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS + ../src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX + ../src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC + ../src/SOFTWARE_FRAMEWORK/DRIVERS/EBI/SMC + ../src/SOFTWARE_FRAMEWORK/UTILS/DEBUG + ../src/SOFTWARE_FRAMEWORK/SERVICES/DELAY + ../src/SOFTWARE_FRAMEWORK/DRIVERS/USART + ../src/SOFTWARE_FRAMEWORK/DRIVERS/SPI + ../src/SOFTWARE_FRAMEWORK/DRIVERS/RTC + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PM + ../src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO + ../src/SOFTWARE_FRAMEWORK/DRIVERS/EIC + ../src/CONFIG + ../src/SOFTWARE_FRAMEWORK/DRIVERS/CPU/CYCLE_COUNTER + ../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE + ../src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR + ../src/SOFTWARE_FRAMEWORK/UTILS + ../src/SOFTWARE_FRAMEWORK/DRIVERS/INTC + ../src/SOFTWARE_FRAMEWORK/BOARDS + + + false + false + Default (-Wa,-g) + + + + + bin\Release_512\ + + + True + True + True + True + false + false + + + BOARD=ARDUINO + _ASSERT_ENABLE_ + EXT_BOARD=SPB104 + WITH_KEY + WITH_WPA + WITH_NO_DMA + LWIP_DEBUG + _INFO_DEBUG_=1 + + + + + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PDCA + ../src/SOFTWARE_FRAMEWORK/DRIVERS/TC + ../src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS + ../src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX + ../src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC + ../src/SOFTWARE_FRAMEWORK/DRIVERS/EBI/SMC + ../src/SOFTWARE_FRAMEWORK/UTILS/DEBUG + ../src/SOFTWARE_FRAMEWORK/SERVICES/DELAY + ../src/SOFTWARE_FRAMEWORK/DRIVERS/USART + ../src/SOFTWARE_FRAMEWORK/DRIVERS/SPI + ../src/SOFTWARE_FRAMEWORK/DRIVERS/RTC + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PM + ../src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO + ../src/SOFTWARE_FRAMEWORK/DRIVERS/EIC + ../src/CONFIG + ../src/SOFTWARE_FRAMEWORK/DRIVERS/CPU/CYCLE_COUNTER + ../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE + ../src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR + ../src/SOFTWARE_FRAMEWORK/UTILS + ../src/SOFTWARE_FRAMEWORK/DRIVERS/INTC + ../src/SOFTWARE_FRAMEWORK/BOARDS + ../src + ../src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include + ../src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4 + ../src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/include + ../src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD + + + -fdata-sections + true + false + false + false + false + true + false + false + false + false + false + false + true + false + false + false + false + -c -fmessage-length=0 + false + true + false + false + false + false + + + newlib_addons-at32ucr2-speed_opt + _ucr2_hd_spi_standalone_v2.1.1 + _ucr2_hd_wl_standalone_v2.1.1 + + + + + ../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS + ../src/SOFTWARE_FRAMEWORK/BOARDS + ../src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.1.1/UCR2/GCC + + + true + false + false + false + false + true + true + + + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PDCA + ../src/SOFTWARE_FRAMEWORK/DRIVERS/TC + ../src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS + ../src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX + ../src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC + ../src/SOFTWARE_FRAMEWORK/DRIVERS/EBI/SMC + ../src/SOFTWARE_FRAMEWORK/UTILS/DEBUG + ../src/SOFTWARE_FRAMEWORK/SERVICES/DELAY + ../src/SOFTWARE_FRAMEWORK/DRIVERS/USART + ../src/SOFTWARE_FRAMEWORK/DRIVERS/SPI + ../src/SOFTWARE_FRAMEWORK/DRIVERS/RTC + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PM + ../src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO + ../src/SOFTWARE_FRAMEWORK/DRIVERS/EIC + ../src/CONFIG + ../src/SOFTWARE_FRAMEWORK/DRIVERS/CPU/CYCLE_COUNTER + ../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE + ../src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR + ../src/SOFTWARE_FRAMEWORK/UTILS + ../src/SOFTWARE_FRAMEWORK/DRIVERS/INTC + ../src/SOFTWARE_FRAMEWORK/BOARDS + + + false + -Wa,-g + + + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PDCA + ../src/SOFTWARE_FRAMEWORK/DRIVERS/TC + ../src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS + ../src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX + ../src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC + ../src/SOFTWARE_FRAMEWORK/DRIVERS/EBI/SMC + ../src/SOFTWARE_FRAMEWORK/UTILS/DEBUG + ../src/SOFTWARE_FRAMEWORK/SERVICES/DELAY + ../src/SOFTWARE_FRAMEWORK/DRIVERS/USART + ../src/SOFTWARE_FRAMEWORK/DRIVERS/SPI + ../src/SOFTWARE_FRAMEWORK/DRIVERS/RTC + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PM + ../src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO + ../src/SOFTWARE_FRAMEWORK/DRIVERS/EIC + ../src/CONFIG + ../src/SOFTWARE_FRAMEWORK/DRIVERS/CPU/CYCLE_COUNTER + ../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE + ../src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR + ../src/SOFTWARE_FRAMEWORK/UTILS + ../src/SOFTWARE_FRAMEWORK/DRIVERS/INTC + ../src/SOFTWARE_FRAMEWORK/BOARDS + + + false + false + + + + + + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + + compile + + + compile + + + + + compile + + + + compile + + + compile + + + + compile + + + compile + + + compile + + + + + + + + + compile + + + compile + + + compile + + + compile + + + compile + + + + compile + + + compile + + + compile + + + + + compile + + + compile + + + compile + + + + + compile + + + compile + + + compile + + + + + + compile + + + + + compile + + + compile + + + + compile + + + compile + + + + compile + + + compile + + + + compile + + + compile + + + compile + + + + compile + + + compile + + + + compile + + + compile + + + compile + + + compile + + + compile + + + + compile + + + compile + + + + compile + + + compile + + + + compile + + + compile + + + + compile + + + compile + + + + + compile + + + compile + + + + + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + + compile + + + compile + + + compile + + + compile + + + + compile + + + compile + + + + + compile + + + + + compile + + + + compile + + + compile + + + + compile + + + + compile + + + + + compile + + + compile + + + + compile + + + compile + + + compile + + + + compile + + + compile + + + compile + + + compile + + + + + compile + + + + compile + + + compile + + + compile + + + compile + + + compile + + + + + + + compile + + + + + compile + + + + compile + + + compile + + + compile + + + compile + + + + + compile + + + \ No newline at end of file diff --git a/libraries/WiFi/extras/wifi_dnld/.cproject b/libraries/WiFi/extras/wifi_dnld/.cproject new file mode 100644 index 000000000..286dad7b9 --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/.cproject @@ -0,0 +1,1281 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libraries/WiFi/extras/wifi_dnld/.project b/libraries/WiFi/extras/wifi_dnld/.project new file mode 100644 index 000000000..aa3047b51 --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/.project @@ -0,0 +1,70 @@ + + + wifi_dnld + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + ?name? + + + + org.eclipse.cdt.make.core.append_environment + true + + + org.eclipse.cdt.make.core.buildArguments + + + + org.eclipse.cdt.make.core.buildCommand + make + + + org.eclipse.cdt.make.core.buildLocation + ${workspace_loc:/wifi_dnld/Debug} + + + org.eclipse.cdt.make.core.contents + org.eclipse.cdt.make.core.activeConfigSettings + + + org.eclipse.cdt.make.core.enableAutoBuild + false + + + org.eclipse.cdt.make.core.enableCleanBuild + true + + + org.eclipse.cdt.make.core.enableFullBuild + true + + + org.eclipse.cdt.make.core.stopOnError + true + + + org.eclipse.cdt.make.core.useDefaultBuildCmd + true + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + + + + + + com.atmel.avr32.core.nature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + diff --git a/libraries/WiFi/extras/wifi_dnld/Release/wifi_dnld.elf b/libraries/WiFi/extras/wifi_dnld/Release/wifi_dnld.elf new file mode 100644 index 000000000..11ec3ddc7 Binary files /dev/null and b/libraries/WiFi/extras/wifi_dnld/Release/wifi_dnld.elf differ diff --git a/libraries/WiFi/extras/wifi_dnld/src/CONFIG/conf_access.h b/libraries/WiFi/extras/wifi_dnld/src/CONFIG/conf_access.h new file mode 100644 index 000000000..23e9b3450 --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/CONFIG/conf_access.h @@ -0,0 +1,170 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Memory access control configuration file. + * + * This file contains the possible external configuration of the memory access + * control. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _CONF_ACCESS_H_ +#define _CONF_ACCESS_H_ + +#include "compiler.h" +#include "board.h" + + +/*! \name Activation of Logical Unit Numbers + */ +//! @{ +#define LUN_0 DISABLE //!< On-Chip Virtual Memory. +#define LUN_1 ENABLE //!< AT45DBX Data Flash. +#define LUN_2 DISABLE //!< SD/MMC Card over SPI. +#define LUN_3 DISABLE +#define LUN_4 DISABLE +#define LUN_5 DISABLE +#define LUN_6 DISABLE +#define LUN_7 DISABLE +#define LUN_USB DISABLE //!< Host Mass-Storage Memory. +//! @} + +/*! \name LUN 0 Definitions + */ +//! @{ +#define VIRTUAL_MEM LUN_0 +#define LUN_ID_VIRTUAL_MEM LUN_ID_0 +#define LUN_0_INCLUDE "virtual_mem.h" +#define Lun_0_test_unit_ready virtual_test_unit_ready +#define Lun_0_read_capacity virtual_read_capacity +#define Lun_0_wr_protect virtual_wr_protect +#define Lun_0_removal virtual_removal +#define Lun_0_usb_read_10 virtual_usb_read_10 +#define Lun_0_usb_write_10 virtual_usb_write_10 +#define Lun_0_mem_2_ram virtual_mem_2_ram +#define Lun_0_ram_2_mem virtual_ram_2_mem +#define LUN_0_NAME "\"On-Chip Virtual Memory\"" +//! @} + +/*! \name LUN 1 Definitions + */ +//! @{ +#define AT45DBX_MEM LUN_1 +#define LUN_ID_AT45DBX_MEM LUN_ID_1 +#define LUN_1_INCLUDE "at45dbx_mem.h" +#define Lun_1_test_unit_ready at45dbx_test_unit_ready +#define Lun_1_read_capacity at45dbx_read_capacity +#define Lun_1_wr_protect at45dbx_wr_protect +#define Lun_1_removal at45dbx_removal +#define Lun_1_usb_read_10 at45dbx_usb_read_10 +#define Lun_1_usb_write_10 at45dbx_usb_write_10 +#define Lun_1_mem_2_ram at45dbx_df_2_ram +#define Lun_1_ram_2_mem at45dbx_ram_2_df +#define LUN_1_NAME "\"AT45DBX Data Flash\"" +//! @} + +/*! \name LUN 2 Definitions + */ +//! @{ +#define SD_MMC_SPI_MEM LUN_2 +#define LUN_ID_SD_MMC_SPI_MEM LUN_ID_2 +#define LUN_2_INCLUDE "sd_mmc_spi_mem.h" +#define Lun_2_test_unit_ready sd_mmc_spi_test_unit_ready +#define Lun_2_read_capacity sd_mmc_spi_read_capacity +#define Lun_2_wr_protect sd_mmc_spi_wr_protect +#define Lun_2_removal sd_mmc_spi_removal +#define Lun_2_usb_read_10 sd_mmc_spi_usb_read_10 +#define Lun_2_usb_write_10 sd_mmc_spi_usb_write_10 +#define Lun_2_mem_2_ram sd_mmc_spi_mem_2_ram +#define Lun_2_ram_2_mem sd_mmc_spi_ram_2_mem +#define LUN_2_NAME "\"SD/MMC Card over SPI\"" +//! @} + +/*! \name USB LUNs Definitions + */ +//! @{ +#define MEM_USB LUN_USB +#define LUN_ID_MEM_USB LUN_ID_USB +#define LUN_USB_INCLUDE "host_mem.h" +#define Lun_usb_test_unit_ready(lun) host_test_unit_ready(lun) +#define Lun_usb_read_capacity(lun, nb_sect) host_read_capacity(lun, nb_sect) +#define Lun_usb_read_sector_size(lun) host_read_sector_size(lun) +#define Lun_usb_wr_protect(lun) host_wr_protect(lun) +#define Lun_usb_removal() host_removal() +#define Lun_usb_mem_2_ram(addr, ram) host_read_10_ram(addr, ram) +#define Lun_usb_ram_2_mem(addr, ram) host_write_10_ram(addr, ram) +#define LUN_USB_NAME "\"Host Mass-Storage Memory\"" +//! @} + +/*! \name Actions Associated with Memory Accesses + * + * Write here the action to associate with each memory access. + * + * \warning Be careful not to waste time in order not to disturb the functions. + */ +//! @{ +#define memory_start_read_action(nb_sectors) +#define memory_stop_read_action() +#define memory_start_write_action(nb_sectors) +#define memory_stop_write_action() +//! @} + +/*! \name Activation of Interface Features + */ +//! @{ +#define ACCESS_USB DISABLED //!< MEM <-> USB interface. +#define ACCESS_MEM_TO_RAM ENABLED //!< MEM <-> RAM interface. +#define ACCESS_STREAM DISABLED //!< Streaming MEM <-> MEM interface. +#define ACCESS_STREAM_RECORD DISABLED //!< Streaming MEM <-> MEM interface in record mode. +#define ACCESS_MEM_TO_MEM DISABLED //!< MEM <-> MEM interface. +#define ACCESS_CODEC DISABLED //!< Codec interface. +//! @} + +/*! \name Specific Options for Access Control + */ +//! @{ +#define GLOBAL_WR_PROTECT DISABLED //!< Management of a global write protection. +//! @} + + +#endif // _CONF_ACCESS_H_ diff --git a/libraries/WiFi/extras/wifi_dnld/src/CONFIG/conf_at45dbx.h b/libraries/WiFi/extras/wifi_dnld/src/CONFIG/conf_at45dbx.h new file mode 100644 index 000000000..3280e4fc1 --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/CONFIG/conf_at45dbx.h @@ -0,0 +1,83 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief AT45DBX configuration file. + * + * This file contains the possible external configuration of the AT45DBX. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with an SPI module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _CONF_AT45DBX_H_ +#define _CONF_AT45DBX_H_ + + +#include "conf_access.h" + +#if AT45DBX_MEM == DISABLE + #error conf_at45dbx.h is #included although AT45DBX_MEM is disabled +#endif + + +#include "at45dbx.h" + + +//_____ D E F I N I T I O N S ______________________________________________ + +//! Size of AT45DBX data flash memories to manage. +#define AT45DBX_MEM_SIZE AT45DBX_1MB + +//! Number of AT45DBX components to manage. +#define AT45DBX_MEM_CNT 1 + +//! First chip select used by AT45DBX components on the SPI module instance. +//! AT45DBX_SPI_NPCS0_PIN always corresponds to this first NPCS, whatever it is. +#define AT45DBX_SPI_FIRST_NPCS AT45DBX_SPI_NPCS + +//! SPI master speed in Hz. +#define AT45DBX_SPI_MASTER_SPEED 12000000 + +//! Number of bits in each SPI transfer. +#define AT45DBX_SPI_BITS 8 + + +#endif // _CONF_AT45DBX_H_ diff --git a/libraries/WiFi/extras/wifi_dnld/src/Doc/SPB104 product brief.pdf b/libraries/WiFi/extras/wifi_dnld/src/Doc/SPB104 product brief.pdf new file mode 100644 index 000000000..8705cb148 Binary files /dev/null and b/libraries/WiFi/extras/wifi_dnld/src/Doc/SPB104 product brief.pdf differ diff --git a/libraries/WiFi/extras/wifi_dnld/src/Doc/gettingstarted.pdf b/libraries/WiFi/extras/wifi_dnld/src/Doc/gettingstarted.pdf new file mode 100644 index 000000000..7c37693b5 Binary files /dev/null and b/libraries/WiFi/extras/wifi_dnld/src/Doc/gettingstarted.pdf differ diff --git a/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/ASM/trampoline.x b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/ASM/trampoline.x new file mode 100644 index 000000000..c12712150 --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/ASM/trampoline.x @@ -0,0 +1,74 @@ +/* This file is part of the ATMEL AVR32-SoftwareFramework-AT32UC3A-1.4.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief AVR32 UC3 ISP trampoline. + * + * In order to be able to program a project with both BatchISP and JTAGICE mkII + * without having to take the general-purpose fuses into consideration, add this + * file to the project and change the program entry point to _trampoline. + * + * The pre-programmed ISP will be erased if JTAGICE mkII is used. + * + * - Compiler: GNU GCC for AVR32 + * - Supported devices: All AVR32UC devices can be used. + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (C) 2006-2008, Atmel Corporation All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of ATMEL may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + +#include "conf_isp.h" + + +//! @{ +//! \verbatim + + + // This must be linked @ 0x80000000 if it is to be run upon reset. + .section .reset, "ax", @progbits + + + .global _trampoline + .type _trampoline, @function +_trampoline: + // Jump to program start. + rjmp program_start + + .org PROGRAM_START_OFFSET +program_start: + // Jump to the C runtime startup routine. + lda.w pc, _stext + + +//! \endverbatim +//! @} diff --git a/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/ARDUINO/arduino.h b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/ARDUINO/arduino.h new file mode 100644 index 000000000..fbdd466ef --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/ARDUINO/arduino.h @@ -0,0 +1,234 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief AT32UC3A EVK1100 board header file. + * + * This file contains definitions and services related to the features of the + * EVK1100 board rev. B and C. + * + * To use this board, define BOARD=EVK1100. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 AT32UC3A devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _ARDUINO_H_ +#define _ARDUINO_H_ + +#include "compiler.h" + +#ifdef __AVR32_ABI_COMPILER__ // Automatically defined when compiling for AVR32, not when assembling. +# include "led.h" +#endif // __AVR32_ABI_COMPILER__ + + +/*! \name Oscillator Definitions + */ +//! @{ + +// RCOsc has no custom calibration by default. Set the following definition to +// the appropriate value if a custom RCOsc calibration has been applied to your +// part. +//#define FRCOSC AVR32_PM_RCOSC_FREQUENCY //!< RCOsc frequency: Hz. + +#define FOSC32 32768 //!< Osc32 frequency: Hz. +#define OSC32_STARTUP AVR32_PM_OSCCTRL32_STARTUP_8192_RCOSC //!< Osc32 startup time: RCOsc periods. + +#define FOSC0 12000000 //!< Osc0 frequency: Hz. +#define OSC0_STARTUP AVR32_PM_OSCCTRL0_STARTUP_2048_RCOSC //!< Osc0 startup time: RCOsc periods. + +// Osc1 crystal is not mounted by default. Set the following definitions to the +// appropriate values if a custom Osc1 crystal is mounted on your board. +//#define FOSC1 12000000 //!< Osc1 frequency: Hz. +//#define OSC1_STARTUP AVR32_PM_OSCCTRL1_STARTUP_2048_RCOSC //!< Osc1 startup time: RCOsc periods. + +//! @} + + +//! Number of LEDs. +#define LED_COUNT 3 + +/*! \name GPIO Connections of LEDs + */ +//! @{ +#define LED0_GPIO AVR32_PIN_PB19 +#define LED1_GPIO AVR32_PIN_PB20 +#define LED2_GPIO AVR32_PIN_PB21 +//! @} + +/*! \name PWM Channels of LEDs + */ +//! @{ +#define LED0_PWM 0 +#define LED1_PWM 1 +#define LED2_PWM 2 +//! @} + +/*! \name PWM Functions of LEDs + */ +//! @{ +#define LED0_PWM_FUNCTION AVR32_PWM_0_FUNCTION +#define LED1_PWM_FUNCTION AVR32_PWM_1_FUNCTION +#define LED2_PWM_FUNCTION AVR32_PWM_2_FUNCTION +//! @} + +/*! \name Color Identifiers of LEDs to Use with LED Functions + */ +//! @{ +#define LED_MONO0_GREEN LED0 +#define LED_MONO1_GREEN LED1 +#define LED_MONO2_GREEN LED2 +//! @} + +#if 0 +/*! \name SPI Connections of the DIP204 LCD + */ +//! @{ +#define DIP204_SPI (&AVR32_SPI1) +#define DIP204_SPI_NPCS 2 +#define DIP204_SPI_SCK_PIN AVR32_SPI1_SCK_0_0_PIN +#define DIP204_SPI_SCK_FUNCTION AVR32_SPI1_SCK_0_0_FUNCTION +#define DIP204_SPI_MISO_PIN AVR32_SPI1_MISO_0_0_PIN +#define DIP204_SPI_MISO_FUNCTION AVR32_SPI1_MISO_0_0_FUNCTION +#define DIP204_SPI_MOSI_PIN AVR32_SPI1_MOSI_0_0_PIN +#define DIP204_SPI_MOSI_FUNCTION AVR32_SPI1_MOSI_0_0_FUNCTION +#define DIP204_SPI_NPCS_PIN AVR32_SPI1_NPCS_2_0_PIN +#define DIP204_SPI_NPCS_FUNCTION AVR32_SPI1_NPCS_2_0_FUNCTION +//! @} + +/*! \name GPIO and PWM Connections of the DIP204 LCD Backlight + */ +//! @{ +#define DIP204_BACKLIGHT_PIN AVR32_PIN_PB18 +#define DIP204_PWM_CHANNEL 6 +#define DIP204_PWM_PIN AVR32_PWM_6_PIN +#define DIP204_PWM_FUNCTION AVR32_PWM_6_FUNCTION +//! @} +#endif + +/*! \name SPI Connections of the AT45DBX Data Flash Memory + */ +//! @{ +#define AT45DBX_SPI (&AVR32_SPI1) +#define AT45DBX_SPI_NPCS 2 +#define AT45DBX_SPI_SCK_PIN AVR32_SPI1_SCK_0_0_PIN +#define AT45DBX_SPI_SCK_FUNCTION AVR32_SPI1_SCK_0_0_FUNCTION +#define AT45DBX_SPI_MISO_PIN AVR32_SPI1_MISO_0_0_PIN +#define AT45DBX_SPI_MISO_FUNCTION AVR32_SPI1_MISO_0_0_FUNCTION +#define AT45DBX_SPI_MOSI_PIN AVR32_SPI1_MOSI_0_0_PIN +#define AT45DBX_SPI_MOSI_FUNCTION AVR32_SPI1_MOSI_0_0_FUNCTION +#define AT45DBX_SPI_NPCS2_PIN AVR32_SPI1_NPCS_2_0_PIN +#define AT45DBX_SPI_NPCS2_FUNCTION AVR32_SPI1_NPCS_2_0_FUNCTION +#define AT45DBX_CHIP_RESET AVR32_PIN_PA02 +//! @} + + +/*! \name GPIO and SPI Connections of the SD/MMC Connector + */ +//! @{ +//#define SD_MMC_CARD_DETECT_PIN AVR32_PIN_PA02 +//#define SD_MMC_WRITE_PROTECT_PIN AVR32_PIN_PA07 +#define SD_MMC_SPI (&AVR32_SPI1) +#define SD_MMC_SPI_NPCS 1 +#define SD_MMC_SPI_SCK_PIN AVR32_SPI1_SCK_0_0_PIN +#define SD_MMC_SPI_SCK_FUNCTION AVR32_SPI1_SCK_0_0_FUNCTION +#define SD_MMC_SPI_MISO_PIN AVR32_SPI1_MISO_0_0_PIN +#define SD_MMC_SPI_MISO_FUNCTION AVR32_SPI1_MISO_0_0_FUNCTION +#define SD_MMC_SPI_MOSI_PIN AVR32_SPI1_MOSI_0_0_PIN +#define SD_MMC_SPI_MOSI_FUNCTION AVR32_SPI1_MOSI_0_0_FUNCTION +#define SD_MMC_SPI_NPCS_PIN AVR32_SPI1_NPCS_1_0_PIN +#define SD_MMC_SPI_NPCS_FUNCTION AVR32_SPI1_NPCS_1_0_FUNCTION +//! @} + +/* Timer Counter to generate clock for WiFi chip*/ +# define WIFI_TC (&AVR32_TC) +# define WIFI_TC_CHANNEL_ID 0 +# define WIFI_TC_CHANNEL_PIN AVR32_TC_A0_0_0_PIN +# define WIFI_TC_CHANNEL_FUNCTION AVR32_TC_A0_0_0_FUNCTION +// Note that TC_A0_0_0 pin is pin 6 (PB23) on AT32UC3A1512 QFP100. + +/* Pin related to WiFi chip communication */ +#ifndef USE_POLL + #define USE_POLL +#endif + #define SPI_CS 0 + #define AVR32_SPI AVR32_SPI1 + #define GPIO_IRQ_PIN AVR32_PIN_PA03 + #define GPIO_IRQ AVR32_GPIO_IRQ_7 + #define GPIO_W_RESET_PIN AVR32_PIN_PA07 + #define GPIO_W_SHUTDOWN_PIN AVR32_PIN_PA09 + +/* Pin related to shield communication */ + #define ARDUINO_HANDSHAKE_PIN AVR32_PIN_PA25 + + #define AVR32_PDCA_PID_TX AVR32_PDCA_PID_SPI1_TX + #define AVR32_PDCA_PID_RX AVR32_PDCA_PID_SPI1_RX + + +#if 0 +/*! \name TWI Connections of the Spare TWI Connector + */ +//! @{ +#define SPARE_TWI (&AVR32_TWI) +#define SPARE_TWI_SCL_PIN AVR32_TWI_SCL_0_0_PIN +#define SPARE_TWI_SCL_FUNCTION AVR32_TWI_SCL_0_0_FUNCTION +#define SPARE_TWI_SDA_PIN AVR32_TWI_SDA_0_0_PIN +#define SPARE_TWI_SDA_FUNCTION AVR32_TWI_SDA_0_0_FUNCTION +//! @} + + +/*! \name SPI Connections of the Spare SPI Connector + */ +//! @{ +#define SPARE_SPI (&AVR32_SPI0) +#define SPARE_SPI_NPCS 0 +#define SPARE_SPI_SCK_PIN AVR32_SPI0_SCK_0_0_PIN +#define SPARE_SPI_SCK_FUNCTION AVR32_SPI0_SCK_0_0_FUNCTION +#define SPARE_SPI_MISO_PIN AVR32_SPI0_MISO_0_0_PIN +#define SPARE_SPI_MISO_FUNCTION AVR32_SPI0_MISO_0_0_FUNCTION +#define SPARE_SPI_MOSI_PIN AVR32_SPI0_MOSI_0_0_PIN +#define SPARE_SPI_MOSI_FUNCTION AVR32_SPI0_MOSI_0_0_FUNCTION +#define SPARE_SPI_NPCS_PIN AVR32_SPI0_NPCS_0_0_PIN +#define SPARE_SPI_NPCS_FUNCTION AVR32_SPI0_NPCS_0_0_FUNCTION +//! @} +#endif + +#endif // _ARDUINO_H_ diff --git a/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/ARDUINO/led.c b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/ARDUINO/led.c new file mode 100644 index 000000000..d7cd439db --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/ARDUINO/led.c @@ -0,0 +1,346 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief AT32UC3A EVK1100 board LEDs support package. + * + * This file contains definitions and services related to the LED features of + * the EVK1100 board. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 AT32UC3A devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#include +#include "preprocessor.h" +#include "compiler.h" +#include "arduino.h" +#include "led.h" + + +//! Structure describing LED hardware connections. +typedef const struct +{ + struct + { + U32 PORT; //!< LED GPIO port. + U32 PIN_MASK; //!< Bit-mask of LED pin in GPIO port. + } GPIO; //!< LED GPIO descriptor. + struct + { + S32 CHANNEL; //!< LED PWM channel (< 0 if N/A). + S32 FUNCTION; //!< LED pin PWM function (< 0 if N/A). + } PWM; //!< LED PWM descriptor. +} tLED_DESCRIPTOR; + + +//! Hardware descriptors of all LEDs. +static tLED_DESCRIPTOR LED_DESCRIPTOR[LED_COUNT] = +{ +#define INSERT_LED_DESCRIPTOR(LED_NO, unused) \ + { \ + {LED##LED_NO##_GPIO / 32, 1 << (LED##LED_NO##_GPIO % 32)},\ + {LED##LED_NO##_PWM, LED##LED_NO##_PWM_FUNCTION } \ + }, + MREPEAT(LED_COUNT, INSERT_LED_DESCRIPTOR, ~) +#undef INSERT_LED_DESCRIPTOR +}; + + +//! Saved state of all LEDs. +static volatile U32 LED_State = (1 << LED_COUNT) - 1; + + +U32 LED_Read_Display(void) +{ + return LED_State; +} + + +void LED_Display(U32 leds) +{ + // Use the LED descriptors to get the connections of a given LED to the MCU. + tLED_DESCRIPTOR *led_descriptor; + volatile avr32_gpio_port_t *led_gpio_port; + + // Make sure only existing LEDs are specified. + leds &= (1 << LED_COUNT) - 1; + + // Update the saved state of all LEDs with the requested changes. + LED_State = leds; + + // For all LEDs... + for (led_descriptor = &LED_DESCRIPTOR[0]; + led_descriptor < LED_DESCRIPTOR + LED_COUNT; + led_descriptor++) + { + // Set the LED to the requested state. + led_gpio_port = &AVR32_GPIO.port[led_descriptor->GPIO.PORT]; + if (leds & 1) + { + led_gpio_port->ovrc = led_descriptor->GPIO.PIN_MASK; + } + else + { + led_gpio_port->ovrs = led_descriptor->GPIO.PIN_MASK; + } + led_gpio_port->oders = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->gpers = led_descriptor->GPIO.PIN_MASK; + leds >>= 1; + } +} + + +U32 LED_Read_Display_Mask(U32 mask) +{ + return Rd_bits(LED_State, mask); +} + + +void LED_Display_Mask(U32 mask, U32 leds) +{ + // Use the LED descriptors to get the connections of a given LED to the MCU. + tLED_DESCRIPTOR *led_descriptor = &LED_DESCRIPTOR[0] - 1; + volatile avr32_gpio_port_t *led_gpio_port; + U8 led_shift; + + // Make sure only existing LEDs are specified. + mask &= (1 << LED_COUNT) - 1; + + // Update the saved state of all LEDs with the requested changes. + Wr_bits(LED_State, mask, leds); + + // While there are specified LEDs left to manage... + while (mask) + { + // Select the next specified LED and set it to the requested state. + led_shift = 1 + ctz(mask); + led_descriptor += led_shift; + led_gpio_port = &AVR32_GPIO.port[led_descriptor->GPIO.PORT]; + leds >>= led_shift - 1; + if (leds & 1) + { + led_gpio_port->ovrc = led_descriptor->GPIO.PIN_MASK; + } + else + { + led_gpio_port->ovrs = led_descriptor->GPIO.PIN_MASK; + } + led_gpio_port->oders = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->gpers = led_descriptor->GPIO.PIN_MASK; + leds >>= 1; + mask >>= led_shift; + } +} + + +Bool LED_Test(U32 leds) +{ + return Tst_bits(LED_State, leds); +} + + +void LED_Off(U32 leds) +{ + // Use the LED descriptors to get the connections of a given LED to the MCU. + tLED_DESCRIPTOR *led_descriptor = &LED_DESCRIPTOR[0] - 1; + volatile avr32_gpio_port_t *led_gpio_port; + U8 led_shift; + + // Make sure only existing LEDs are specified. + leds &= (1 << LED_COUNT) - 1; + + // Update the saved state of all LEDs with the requested changes. + Clr_bits(LED_State, leds); + + // While there are specified LEDs left to manage... + while (leds) + { + // Select the next specified LED and turn it off. + led_shift = 1 + ctz(leds); + led_descriptor += led_shift; + led_gpio_port = &AVR32_GPIO.port[led_descriptor->GPIO.PORT]; + led_gpio_port->ovrs = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->oders = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->gpers = led_descriptor->GPIO.PIN_MASK; + leds >>= led_shift; + } +} + + +void LED_On(U32 leds) +{ + // Use the LED descriptors to get the connections of a given LED to the MCU. + tLED_DESCRIPTOR *led_descriptor = &LED_DESCRIPTOR[0] - 1; + volatile avr32_gpio_port_t *led_gpio_port; + U8 led_shift; + + // Make sure only existing LEDs are specified. + leds &= (1 << LED_COUNT) - 1; + + // Update the saved state of all LEDs with the requested changes. + Set_bits(LED_State, leds); + + // While there are specified LEDs left to manage... + while (leds) + { + // Select the next specified LED and turn it on. + led_shift = 1 + ctz(leds); + led_descriptor += led_shift; + led_gpio_port = &AVR32_GPIO.port[led_descriptor->GPIO.PORT]; + led_gpio_port->ovrc = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->oders = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->gpers = led_descriptor->GPIO.PIN_MASK; + leds >>= led_shift; + } +} + + +void LED_Toggle(U32 leds) +{ + // Use the LED descriptors to get the connections of a given LED to the MCU. + tLED_DESCRIPTOR *led_descriptor = &LED_DESCRIPTOR[0] - 1; + volatile avr32_gpio_port_t *led_gpio_port; + U8 led_shift; + + // Make sure only existing LEDs are specified. + leds &= (1 << LED_COUNT) - 1; + + // Update the saved state of all LEDs with the requested changes. + Tgl_bits(LED_State, leds); + + // While there are specified LEDs left to manage... + while (leds) + { + // Select the next specified LED and toggle it. + led_shift = 1 + ctz(leds); + led_descriptor += led_shift; + led_gpio_port = &AVR32_GPIO.port[led_descriptor->GPIO.PORT]; + led_gpio_port->ovrt = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->oders = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->gpers = led_descriptor->GPIO.PIN_MASK; + leds >>= led_shift; + } +} + + +U32 LED_Read_Display_Field(U32 field) +{ + return Rd_bitfield(LED_State, field); +} + + +void LED_Display_Field(U32 field, U32 leds) +{ + // Move the bit-field to the appropriate position for the bit-mask. + LED_Display_Mask(field, leds << ctz(field)); +} + + +U8 LED_Get_Intensity(U32 led) +{ + tLED_DESCRIPTOR *led_descriptor; + + // Check that the argument value is valid. + led = ctz(led); + led_descriptor = &LED_DESCRIPTOR[led]; + if (led >= LED_COUNT || led_descriptor->PWM.CHANNEL < 0) return 0; + + // Return the duty cycle value if the LED PWM channel is enabled, else 0. + return (AVR32_PWM.sr & (1 << led_descriptor->PWM.CHANNEL)) ? + AVR32_PWM.channel[led_descriptor->PWM.CHANNEL].cdty : 0; +} + + +void LED_Set_Intensity(U32 leds, U8 intensity) +{ + tLED_DESCRIPTOR *led_descriptor = &LED_DESCRIPTOR[0] - 1; + volatile avr32_pwm_channel_t *led_pwm_channel; + volatile avr32_gpio_port_t *led_gpio_port; + U8 led_shift; + + // For each specified LED... + for (leds &= (1 << LED_COUNT) - 1; leds; leds >>= led_shift) + { + // Select the next specified LED and check that it has a PWM channel. + led_shift = 1 + ctz(leds); + led_descriptor += led_shift; + if (led_descriptor->PWM.CHANNEL < 0) continue; + + // Initialize or update the LED PWM channel. + led_pwm_channel = &AVR32_PWM.channel[led_descriptor->PWM.CHANNEL]; + if (!(AVR32_PWM.sr & (1 << led_descriptor->PWM.CHANNEL))) + { + led_pwm_channel->cmr = (AVR32_PWM_CPRE_MCK << AVR32_PWM_CPRE_OFFSET) & + ~(AVR32_PWM_CALG_MASK | + AVR32_PWM_CPOL_MASK | + AVR32_PWM_CPD_MASK); + led_pwm_channel->cprd = 0x000000FF; + led_pwm_channel->cdty = intensity; + AVR32_PWM.ena = 1 << led_descriptor->PWM.CHANNEL; + } + else + { + AVR32_PWM.isr; + while (!(AVR32_PWM.isr & (1 << led_descriptor->PWM.CHANNEL))); + led_pwm_channel->cupd = intensity; + } + + // Switch the LED pin to its PWM function. + led_gpio_port = &AVR32_GPIO.port[led_descriptor->GPIO.PORT]; + if (led_descriptor->PWM.FUNCTION & 0x1) + { + led_gpio_port->pmr0s = led_descriptor->GPIO.PIN_MASK; + } + else + { + led_gpio_port->pmr0c = led_descriptor->GPIO.PIN_MASK; + } + if (led_descriptor->PWM.FUNCTION & 0x2) + { + led_gpio_port->pmr1s = led_descriptor->GPIO.PIN_MASK; + } + else + { + led_gpio_port->pmr1c = led_descriptor->GPIO.PIN_MASK; + } + led_gpio_port->gperc = led_descriptor->GPIO.PIN_MASK; + } +} diff --git a/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/ARDUINO/led.h b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/ARDUINO/led.h new file mode 100644 index 000000000..a577124ff --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/ARDUINO/led.h @@ -0,0 +1,191 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief AT32UC3A EVK1100 board LEDs support package. + * + * This file contains definitions and services related to the LED features of + * the EVK1100 board. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 AT32UC3A devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _LED_H_ +#define _LED_H_ + +#include "compiler.h" + + +/*! \name Identifiers of LEDs to Use with LED Functions + */ +//! @{ +#define LED0 0x01 +#define LED1 0x02 +#define LED2 0x04 +#define LED3 0x08 +#define LED4 0x10 +#define LED5 0x20 +#define LED6 0x40 +#define LED7 0x80 +//! @} + + +/*! \brief Gets the last state of all LEDs set through the LED API. + * + * \return State of all LEDs (1 bit per LED). + * + * \note The GPIO pin configuration of all LEDs is left unchanged. + */ +extern U32 LED_Read_Display(void); + +/*! \brief Sets the state of all LEDs. + * + * \param leds New state of all LEDs (1 bit per LED). + * + * \note The pins of all LEDs are set to GPIO output mode. + */ +extern void LED_Display(U32 leds); + +/*! \brief Gets the last state of the specified LEDs set through the LED API. + * + * \param mask LEDs of which to get the state (1 bit per LED). + * + * \return State of the specified LEDs (1 bit per LED). + * + * \note The GPIO pin configuration of all LEDs is left unchanged. + */ +extern U32 LED_Read_Display_Mask(U32 mask); + +/*! \brief Sets the state of the specified LEDs. + * + * \param mask LEDs of which to set the state (1 bit per LED). + * + * \param leds New state of the specified LEDs (1 bit per LED). + * + * \note The pins of the specified LEDs are set to GPIO output mode. + */ +extern void LED_Display_Mask(U32 mask, U32 leds); + +/*! \brief Tests the last state of the specified LEDs set through the LED API. + * + * \param leds LEDs of which to test the state (1 bit per LED). + * + * \return \c TRUE if at least one of the specified LEDs has a state on, else + * \c FALSE. + * + * \note The GPIO pin configuration of all LEDs is left unchanged. + */ +extern Bool LED_Test(U32 leds); + +/*! \brief Turns off the specified LEDs. + * + * \param leds LEDs to turn off (1 bit per LED). + * + * \note The pins of the specified LEDs are set to GPIO output mode. + */ +extern void LED_Off(U32 leds); + +/*! \brief Turns on the specified LEDs. + * + * \param leds LEDs to turn on (1 bit per LED). + * + * \note The pins of the specified LEDs are set to GPIO output mode. + */ +extern void LED_On(U32 leds); + +/*! \brief Toggles the specified LEDs. + * + * \param leds LEDs to toggle (1 bit per LED). + * + * \note The pins of the specified LEDs are set to GPIO output mode. + */ +extern void LED_Toggle(U32 leds); + +/*! \brief Gets as a bit-field the last state of the specified LEDs set through + * the LED API. + * + * \param field LEDs of which to get the state (1 bit per LED). + * + * \return State of the specified LEDs (1 bit per LED, beginning with the first + * specified LED). + * + * \note The GPIO pin configuration of all LEDs is left unchanged. + */ +extern U32 LED_Read_Display_Field(U32 field); + +/*! \brief Sets as a bit-field the state of the specified LEDs. + * + * \param field LEDs of which to set the state (1 bit per LED). + * \param leds New state of the specified LEDs (1 bit per LED, beginning with + * the first specified LED). + * + * \note The pins of the specified LEDs are set to GPIO output mode. + */ +extern void LED_Display_Field(U32 field, U32 leds); + +/*! \brief Gets the intensity of the specified LED. + * + * \param led LED of which to get the intensity (1 bit per LED; only the least + * significant set bit is used). + * + * \return Intensity of the specified LED (0x00 to 0xFF). + * + * \warning The PWM channel of the specified LED is supposed to be used only by + * this module. + * + * \note The GPIO pin configuration of all LEDs is left unchanged. + */ +extern U8 LED_Get_Intensity(U32 led); + +/*! \brief Sets the intensity of the specified LEDs. + * + * \param leds LEDs of which to set the intensity (1 bit per LED). + * \param intensity New intensity of the specified LEDs (0x00 to 0xFF). + * + * \warning The PWM channels of the specified LEDs are supposed to be used only + * by this module. + * + * \note The pins of the specified LEDs are set to PWM output mode. + */ +extern void LED_Set_Intensity(U32 leds, U8 intensity); + + +#endif // _LED_H_ diff --git a/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/EVK1105/evk1105.h b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/EVK1105/evk1105.h new file mode 100644 index 000000000..edda44cb3 --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/EVK1105/evk1105.h @@ -0,0 +1,433 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief AT32UC3A EVK1105 board header file. + * + * This file contains definitions and services related to the features of the + * EVK1105 board rev. B. + * + * To use this board, define BOARD=EVK1105. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 AT32UC3A devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _EVK1105_H_ +#define _EVK1105_H_ + +#ifdef EVK1105_REV3 +# include "evk1105_rev3.h" +#else + +#include "compiler.h" + +#ifdef __AVR32_ABI_COMPILER__ // Automatically defined when compiling for AVR32, not when assembling. +# include "led.h" +#endif // __AVR32_ABI_COMPILER__ + + +/*! \name Oscillator Definitions + */ +//! @{ + +// RCOsc has no custom calibration by default. Set the following definition to +// the appropriate value if a custom RCOsc calibration has been applied to your +// part. +//#define FRCOSC AVR32_PM_RCOSC_FREQUENCY //!< RCOsc frequency: Hz. + +#define FOSC32 32768 //!< Osc32 frequency: Hz. +#define OSC32_STARTUP AVR32_PM_OSCCTRL32_STARTUP_8192_RCOSC //!< Osc32 startup time: RCOsc periods. + +#define FOSC0 12000000 //!< Osc0 frequency: Hz. +#define OSC0_STARTUP AVR32_PM_OSCCTRL0_STARTUP_2048_RCOSC //!< Osc0 startup time: RCOsc periods. + +#define FOSC1 11289600 //!< Osc1 frequency: Hz +#define OSC1_STARTUP AVR32_PM_OSCCTRL1_STARTUP_2048_RCOSC //!< Osc1 startup time: RCOsc periods. + + +//! @} + + +/*! \name SDRAM Definitions + */ +//! @{ + +//! Part header file of used SDRAM(s). +#define SDRAM_PART_HDR "MT48LC16M16A2TG7E/mt48lc16m16a2tg7e.h" + +//! Data bus width to use the SDRAM(s) with (16 or 32 bits; always 16 bits on +//! UC3). +#define SDRAM_DBW 16 +//! @} + + +/*! \name USB Definitions + */ +//! @{ +//! Multiplexed pin used for USB_ID: AVR32_USBB_USB_ID_x_x. +//! To be selected according to the AVR32_USBB_USB_ID_x_x_PIN and +//! AVR32_USBB_USB_ID_x_x_FUNCTION definitions from . +#define AVR32_USBB_USB_ID_0_2_PIN 21 +#define AVR32_USBB_USB_ID_0_2_FUNCTION 2 +#define USB_ID AVR32_USBB_USB_ID_0_2 + +//! Multiplexed pin used for USB_VBOF: AVR32_USBB_USB_VBOF_x_x. +//! To be selected according to the AVR32_USBB_USB_VBOF_x_x_PIN and +//! AVR32_USBB_USB_VBOF_x_x_FUNCTION definitions from . +# define USB_VBOF AVR32_USBB_USB_VBOF_0_1 + + +//! Active level of the USB_VBOF output pin. +# define USB_VBOF_ACTIVE_LEVEL LOW + +//! USB overcurrent detection pin. +# define USB_OVERCURRENT_DETECT_PIN AVR32_PIN_PX15 + +//! @} + + +//! GPIO connection of the MAC PHY PWR_DOWN/INT signal. +# define MACB_INTERRUPT_PIN AVR32_PIN_PA26 + + + +//! Number of LEDs. +#define LED_COUNT 4 + +/*! \name GPIO Connections of LEDs + */ +//! @{ +# define LED0_GPIO AVR32_PIN_PB27 +# define LED1_GPIO AVR32_PIN_PB28 +# define LED2_GPIO AVR32_PIN_PA05 +# define LED3_GPIO AVR32_PIN_PA06 +//! @} + +/*! \name Color Identifiers of LEDs to Use with LED Functions + */ +//! @{ +#define LED_MONO0_GREEN LED0 +#define LED_MONO1_GREEN LED1 +#define LED_MONO2_GREEN LED2 +#define LED_MONO3_GREEN LED3 +//! @} + +/*! \name PWM Channels of LEDs + */ +//! @{ +#define LED0_PWM 4 +#define LED1_PWM 5 +#define LED2_PWM (-1) +#define LED3_PWM (-1) +//! @} + +/*! \name PWM Functions of LEDs + */ +//! @{ +/* TODO: Implement PWM functionality */ +#define LED0_PWM_FUNCTION (-1)//AVR32_PWM_0_FUNCTION +#define LED1_PWM_FUNCTION (-1)//AVR32_PWM_1_FUNCTION +#define LED2_PWM_FUNCTION (-1) +#define LED3_PWM_FUNCTION (-1) +//! @} + +//! External interrupt connection of touch sensor. +#define QT1081_EIC_EXTINT_PIN AVR32_EIC_EXTINT_1_PIN +#define QT1081_EIC_EXTINT_FUNCTION AVR32_EIC_EXTINT_1_FUNCTION +#define QT1081_EIC_EXTINT_IRQ AVR32_EIC_IRQ_1 +#define QT1081_EIC_EXTINT_INT AVR32_EIC_INT1 +/*! \name Touch sensor low power mode select + */ +#define QT1081_LP_MODE AVR32_PIN_PB29 + +/*! \name GPIO Connections of touch buttons + */ +//! @{ +#define QT1081_TOUCH_SENSOR_0 AVR32_PIN_PB22 +#define QT1081_TOUCH_SENSOR_0_PRESSED 1 +#define QT1081_TOUCH_SENSOR_1 AVR32_PIN_PB23 +#define QT1081_TOUCH_SENSOR_1_PRESSED 1 +#define QT1081_TOUCH_SENSOR_2 AVR32_PIN_PB24 +#define QT1081_TOUCH_SENSOR_2_PRESSED 1 +#define QT1081_TOUCH_SENSOR_3 AVR32_PIN_PB25 +#define QT1081_TOUCH_SENSOR_3_PRESSED 1 +#define QT1081_TOUCH_SENSOR_4 AVR32_PIN_PB26 +#define QT1081_TOUCH_SENSOR_4_PRESSED 1 + +#define QT1081_TOUCH_SENSOR_ENTER QT1081_TOUCH_SENSOR_4 +#define QT1081_TOUCH_SENSOR_ENTER_PRESSED QT1081_TOUCH_SENSOR_4_PRESSED +#define QT1081_TOUCH_SENSOR_LEFT QT1081_TOUCH_SENSOR_3 +#define QT1081_TOUCH_SENSOR_LEFT_PRESSED QT1081_TOUCH_SENSOR_3_PRESSED +#define QT1081_TOUCH_SENSOR_RIGHT QT1081_TOUCH_SENSOR_2 +#define QT1081_TOUCH_SENSOR_RIGHT_PRESSED QT1081_TOUCH_SENSOR_2_PRESSED +#define QT1081_TOUCH_SENSOR_UP QT1081_TOUCH_SENSOR_0 +#define QT1081_TOUCH_SENSOR_UP_PRESSED QT1081_TOUCH_SENSOR_0_PRESSED +#define QT1081_TOUCH_SENSOR_DOWN QT1081_TOUCH_SENSOR_1 +#define QT1081_TOUCH_SENSOR_DOWN_PRESSED QT1081_TOUCH_SENSOR_1_PRESSED +//! @} + +/*! \name SPI Connections of the AT45DBX Data Flash Memory + */ +//! @{ +#define AT45DBX_SPI (&AVR32_SPI0) +#define AT45DBX_SPI_NPCS 0 +#define AT45DBX_SPI_SCK_PIN AVR32_SPI0_SCK_0_0_PIN +#define AT45DBX_SPI_SCK_FUNCTION AVR32_SPI0_SCK_0_0_FUNCTION +#define AT45DBX_SPI_MISO_PIN AVR32_SPI0_MISO_0_0_PIN +#define AT45DBX_SPI_MISO_FUNCTION AVR32_SPI0_MISO_0_0_FUNCTION +#define AT45DBX_SPI_MOSI_PIN AVR32_SPI0_MOSI_0_0_PIN +#define AT45DBX_SPI_MOSI_FUNCTION AVR32_SPI0_MOSI_0_0_FUNCTION +#define AT45DBX_SPI_NPCS0_PIN AVR32_SPI0_NPCS_0_0_PIN +#define AT45DBX_SPI_NPCS0_FUNCTION AVR32_SPI0_NPCS_0_0_FUNCTION +//! @} + +/*! \name GPIO and SPI Connections of the SD/MMC Connector + */ +//! @{ +#define SD_MMC_CARD_DETECT_PIN AVR32_PIN_PA02 +#define SD_MMC_WRITE_PROTECT_PIN AVR32_PIN_PA18 +#define SD_MMC_SPI (&AVR32_SPI0) +#define SD_MMC_SPI_NPCS 1 +#define SD_MMC_SPI_SCK_PIN AVR32_SPI0_SCK_0_0_PIN +#define SD_MMC_SPI_SCK_FUNCTION AVR32_SPI0_SCK_0_0_FUNCTION +#define SD_MMC_SPI_MISO_PIN AVR32_SPI0_MISO_0_0_PIN +#define SD_MMC_SPI_MISO_FUNCTION AVR32_SPI0_MISO_0_0_FUNCTION +#define SD_MMC_SPI_MOSI_PIN AVR32_SPI0_MOSI_0_0_PIN +#define SD_MMC_SPI_MOSI_FUNCTION AVR32_SPI0_MOSI_0_0_FUNCTION +#define SD_MMC_SPI_NPCS_PIN AVR32_SPI0_NPCS_1_0_PIN +#define SD_MMC_SPI_NPCS_FUNCTION AVR32_SPI0_NPCS_1_0_FUNCTION +//! @} + + +/*! \name TWI expansion + */ +//! @{ +#define EXPANSION_TWI (&AVR32_TWI) +#define EXPANSION_RESET AVR32_PIN_PX16 +#define EXPANSION_TWI_SCL_PIN AVR32_TWI_SCL_0_0_PIN +#define EXPANSION_TWI_SCL_FUNCTION AVR32_TWI_SCL_0_0_FUNCTION +#define EXPANSION_TWI_SDA_PIN AVR32_TWI_SDA_0_0_PIN +#define EXPANSION_TWI_SDA_FUNCTION AVR32_TWI_SDA_0_0_FUNCTION +//! @} + +/*! \name Wireless expansion + */ + +#define WEXPANSION_EXTINT_PIN AVR32_EIC_EXTINT_8_PIN +#define WEXPANSION_EXTINT_FUNCTION AVR32_EIC_EXTINT_8_FUNCTION +#define WEXPANSION_GPIO1 AVR32_PIN_PB30 +#define WEXPANSION_GPIO2 AVR32_PIN_PB31 + +#define WEXPANSION_SPI (&AVR32_SPI0) +#define WEXPANSION_SPI_NPCS 2 +#define WEXPANSION_SPI_SCK_PIN AVR32_SPI0_SCK_0_0_PIN +#define WEXPANSION_SPI_SCK_FUNCTION AVR32_SPI0_SCK_0_0_FUNCTION +#define WEXPANSION_SPI_MISO_PIN AVR32_SPI0_MISO_0_0_PIN +#define WEXPANSION_SPI_MISO_FUNCTION AVR32_SPI0_MISO_0_0_FUNCTION +#define WEXPANSION_SPI_MOSI_PIN AVR32_SPI0_MOSI_0_0_PIN +#define WEXPANSION_SPI_MOSI_FUNCTION AVR32_SPI0_MOSI_0_0_FUNCTION +#define WEXPANSION_SPI_NPCS_PIN AVR32_SPI0_NPCS_2_0_PIN +#define WEXPANSION_SPI_NPCS_FUNCTION AVR32_SPI0_NPCS_2_0_FUNCTION + +//! @} + +/*! \name ET024006DHU TFT display + */ +//! @{ + +#define ET024006DHU_TE_PIN AVR32_PIN_PX19 +#define ET024006DHU_RESET_PIN AVR32_PIN_PX22 +#define ET024006DHU_BL_PIN AVR32_PWM_6_PIN +#define ET024006DHU_BL_FUNCTION AVR32_PWM_6_FUNCTION +#define ET024006DHU_DNC_PIN AVR32_EBI_ADDR_21_1_PIN +#define ET024006DHU_DNC_FUNCTION AVR32_EBI_ADDR_21_1_FUNCTION +#define ET024006DHU_EBI_NCS_PIN AVR32_EBI_NCS_0_1_PIN +#define ET024006DHU_EBI_NCS_FUNCTION AVR32_EBI_NCS_0_1_FUNCTION + +//! @} +/*! \name Optional SPI connection to the TFT + */ +//! @{ + +#define ET024006DHU_SPI (&AVR32_SPI0) +#define ET024006DHU_SPI_NPCS 3 +#define ET024006DHU_SPI_SCK_PIN AVR32_SPI0_SCK_0_0_PIN +#define ET024006DHU_SPI_SCK_FUNCTION AVR32_SPI0_SCK_0_0_FUNCTION +#define ET024006DHU_SPI_MISO_PIN AVR32_SPI0_MISO_0_0_PIN +#define ET024006DHU_SPI_MISO_FUNCTION AVR32_SPI0_MISO_0_0_FUNCTION +#define ET024006DHU_SPI_MOSI_PIN AVR32_SPI0_MOSI_0_0_PIN +#define ET024006DHU_SPI_MOSI_FUNCTION AVR32_SPI0_MOSI_0_0_FUNCTION +#define ET024006DHU_SPI_NPCS_PIN AVR32_SPI1_NPCS_3_0_PIN +#define ET024006DHU_SPI_NPCS_FUNCTION AVR32_SPI1_NPCS_3_0_FUNCTION + +//! @} + + +/*! \name Audio amplifier connection to the DAC + */ +//! @{ + +#define TPA6130_ABDAC (&AVR32_ABDAC) + +#define TPA6130_DATA0_PIN AVR32_ABDAC_DATA_0_1_PIN +#define TPA6130_DATA0_FUNCTION AVR32_ABDAC_DATA_0_1_FUNCTION +#define TPA6130_DATAN0_PIN AVR32_ABDAC_DATAN_0_1_PIN +#define TPA6130_DATAN0_FUNCTION AVR32_ABDAC_DATAN_0_1_FUNCTION +#define TPA6130_DATA1_PIN AVR32_ABDAC_DATA_1_1_PIN +#define TPA6130_DATA1_FUNCTION AVR32_ABDAC_DATA_1_1_FUNCTION +#define TPA6130_DATAN1_PIN AVR32_ABDAC_DATAN_1_1_PIN +#define TPA6130_DATAN1_FUNCTION AVR32_ABDAC_DATAN_1_1_FUNCTION + +#define TPA6130_ABDAC_PDCA_PID AVR32_PDCA_PID_ABDAC_TX +#define TPA6130_ABDAC_PDCA_CHANNEL 0 +#define TPA6130_ABDAC_PDCA_IRQ AVR32_PDCA_IRQ_0 +#define TPA6130_ABDAC_PDCA_INT_LEVEL AVR32_INTC_INT3 + +#define TPA6130_TWI (&AVR32_TWI) +#define TPA6130_TWI_SCL_PIN AVR32_TWI_SCL_0_0_PIN +#define TPA6130_TWI_SCL_FUNCTION AVR32_TWI_SCL_0_0_FUNCTION +#define TPA6130_TWI_SDA_PIN AVR32_TWI_SDA_0_0_PIN +#define TPA6130_TWI_SDA_FUNCTION AVR32_TWI_SDA_0_0_FUNCTION + +//! }@ +/*! \name TI TLV320AIC23B sound chip + */ +//! @{ +#define TLV320_SSC (&AVR32_SSC) +#define TLV320_SSC_TX_CLOCK_PIN AVR32_SSC_TX_CLOCK_0_PIN +#define TLV320_SSC_TX_CLOCK_FUNCTION AVR32_SSC_TX_CLOCK_0_FUNCTION +#define TLV320_SSC_TX_DATA_PIN AVR32_SSC_TX_DATA_0_PIN +#define TLV320_SSC_TX_DATA_FUNCTION AVR32_SSC_TX_DATA_0_FUNCTION +#define TLV320_SSC_TX_FRAME_SYNC_PIN AVR32_SSC_TX_FRAME_SYNC_0_PIN +#define TLV320_SSC_TX_FRAME_SYNC_FUNCTION AVR32_SSC_TX_FRAME_SYNC_0_FUNCTION + +#define TLV320_TWI (&AVR32_TWI) +#define TLV320_TWI_SCL_PIN AVR32_TWI_SCL_0_0_PIN +#define TLV320_TWI_SCL_FUNCTION AVR32_TWI_SCL_0_0_FUNCTION +#define TLV320_TWI_SDA_PIN AVR32_TWI_SDA_0_0_PIN +#define TLV320_TWI_SDA_FUNCTION AVR32_TWI_SDA_0_0_FUNCTION + +#define TLV320_PM_GCLK_PIN AVR32_PM_GCLK_0_0_PIN +#define TLV320_PM_GCLK_FUNCTION AVR32_PM_GCLK_0_0_FUNCTION +//! @} + +////! \name SPI: Apple Authentication Chip Hardware Connections +////! @{ +#define IPOD_AUTH_CHIP_SPI (&AVR32_SPI0) +#define IPOD_AUTH_CHIP_SPI_IRQ AVR32_SPI0_IRQ +#define IPOD_AUTH_CHIP_SPI_NPCS 2 +#define IPOD_AUTH_CHIP_SPI_SCK_PIN AVR32_SPI0_SCK_0_0_PIN +#define IPOD_AUTH_CHIP_SPI_SCK_FUNCTION AVR32_SPI0_SCK_0_0_FUNCTION +#define IPOD_AUTH_CHIP_SPI_MISO_PIN AVR32_SPI0_MISO_0_0_PIN +#define IPOD_AUTH_CHIP_SPI_MISO_FUNCTION AVR32_SPI0_MISO_0_0_FUNCTION +#define IPOD_AUTH_CHIP_SPI_MOSI_PIN AVR32_SPI0_MOSI_0_0_PIN +#define IPOD_AUTH_CHIP_SPI_MOSI_FUNCTION AVR32_SPI0_MOSI_0_0_FUNCTION +#define IPOD_AUTH_CHIP_SPI_NPCS_PIN AVR32_SPI0_NPCS_2_0_PIN +#define IPOD_AUTH_CHIP_SPI_NPCS_FUNCTION AVR32_SPI0_NPCS_2_0_FUNCTION +#define IPOD_AUTH_CHIP_SPI_N_RESET_PIN AVR32_PIN_PB30 +#define IPOD_AUTH_CHIP_SPI_CP_READY_PIN AVR32_PIN_PB31 +//! }@ + +/*! \name Connections of the iPOD Authentication Coprocessor + */ +//! @{ + +#define IPOD_AUTH_CHIP_TWI (&AVR32_TWI) +#define IPOD_AUTH_CHIP_TWI_SCL_PIN AVR32_TWI_SCL_0_0_PIN +#define IPOD_AUTH_CHIP_TWI_SCL_FUNCTION AVR32_TWI_SCL_0_0_FUNCTION +#define IPOD_AUTH_CHIP_TWI_SDA_PIN AVR32_TWI_SDA_0_0_PIN +#define IPOD_AUTH_CHIP_TWI_SDA_FUNCTION AVR32_TWI_SDA_0_0_FUNCTION +#define IPOD_AUTH_CHIP_TWI_N_RESET_PIN AVR32_PIN_PX16 + +//! @} + +/*! \name USART connection to the UC3B board controller + */ +//! @{ + +#define USART0_RXD_PIN AVR32_USART0_RXD_0_0_PIN +#define USART0_RXD_FUNCTION AVR32_USART0_RXD_0_0_FUNCTION +#define USART0_TXD_PIN AVR32_USART0_TXD_0_0_PIN +#define USART0_TXD_FUNCTION AVR32_USART0_TXD_0_0_FUNCTION +#define USART0_RTS_PIN AVR32_USART0_RTS_0_0_PIN +#define USART0_RTS_FUNCTION AVR32_USART0_RTS_0_0_FUNCTION +#define USART0_CTS_PIN AVR32_USART0_CTS_0_0_PIN +#define USART0_CTS_FUNCTION AVR32_USART0_CTS_0_0_FUNCTION + +//! @} + +#define ADC_VEXT_PIN AVR32_ADC_AD_7_PIN +#define ADC_VEXT_FUNCTION AVR32_ADC_AD_7_FUNCTION + +/*! \name LCD Connections of the ET024006DHU display + */ +//! @{ +#define ET024006DHU_SMC_USE_NCS 0 +#define ET024006DHU_SMC_COMPONENT_CS "smc_et024006dhu.h" + +#define ET024006DHU_EBI_DATA_0 AVR32_EBI_DATA_0 +#define ET024006DHU_EBI_DATA_1 AVR32_EBI_DATA_1 +#define ET024006DHU_EBI_DATA_2 AVR32_EBI_DATA_2 +#define ET024006DHU_EBI_DATA_3 AVR32_EBI_DATA_3 +#define ET024006DHU_EBI_DATA_4 AVR32_EBI_DATA_4 +#define ET024006DHU_EBI_DATA_5 AVR32_EBI_DATA_5 +#define ET024006DHU_EBI_DATA_6 AVR32_EBI_DATA_6 +#define ET024006DHU_EBI_DATA_7 AVR32_EBI_DATA_7 +#define ET024006DHU_EBI_DATA_8 AVR32_EBI_DATA_8 +#define ET024006DHU_EBI_DATA_9 AVR32_EBI_DATA_9 +#define ET024006DHU_EBI_DATA_10 AVR32_EBI_DATA_10 +#define ET024006DHU_EBI_DATA_11 AVR32_EBI_DATA_11 +#define ET024006DHU_EBI_DATA_12 AVR32_EBI_DATA_12 +#define ET024006DHU_EBI_DATA_13 AVR32_EBI_DATA_13 +#define ET024006DHU_EBI_DATA_14 AVR32_EBI_DATA_14 +#define ET024006DHU_EBI_DATA_15 AVR32_EBI_DATA_15 + +#define ET024006DHU_EBI_ADDR_21 AVR32_EBI_ADDR_21_1 + +#define ET024006DHU_EBI_NWE AVR32_EBI_NWE0_0 +#define ET024006DHU_EBI_NRD AVR32_EBI_NRD_0 +#define ET024006DHU_EBI_NCS AVR32_EBI_NCS_0_1 +//! @} + + +#endif // !EVK1105_REVA + +#endif // _EVK1105_H_ diff --git a/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/EVK1105/led.c b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/EVK1105/led.c new file mode 100644 index 000000000..561652aeb --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/EVK1105/led.c @@ -0,0 +1,346 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief AT32UC3A EVK1105 board LEDs support package. + * + * This file contains definitions and services related to the LED features of + * the EVK1105 board. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 AT32UC3A devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#include +#include "preprocessor.h" +#include "compiler.h" +#include "evk1105.h" +#include "led.h" + + +//! Structure describing LED hardware connections. +typedef const struct +{ + struct + { + U32 PORT; //!< LED GPIO port. + U32 PIN_MASK; //!< Bit-mask of LED pin in GPIO port. + } GPIO; //!< LED GPIO descriptor. + struct + { + S32 CHANNEL; //!< LED PWM channel (< 0 if N/A). + S32 FUNCTION; //!< LED pin PWM function (< 0 if N/A). + } PWM; //!< LED PWM descriptor. +} tLED_DESCRIPTOR; + + +//! Hardware descriptors of all LEDs. +static tLED_DESCRIPTOR LED_DESCRIPTOR[LED_COUNT] = +{ +#define INSERT_LED_DESCRIPTOR(LED_NO, unused) \ + { \ + {LED##LED_NO##_GPIO / 32, 1 << (LED##LED_NO##_GPIO % 32)},\ + {LED##LED_NO##_PWM, LED##LED_NO##_PWM_FUNCTION } \ + }, + MREPEAT(LED_COUNT, INSERT_LED_DESCRIPTOR, ~) +#undef INSERT_LED_DESCRIPTOR +}; + + +//! Saved state of all LEDs. +static volatile U32 LED_State = (1 << LED_COUNT) - 1; + + +U32 LED_Read_Display(void) +{ + return LED_State; +} + + +void LED_Display(U32 leds) +{ + // Use the LED descriptors to get the connections of a given LED to the MCU. + tLED_DESCRIPTOR *led_descriptor; + volatile avr32_gpio_port_t *led_gpio_port; + + // Make sure only existing LEDs are specified. + leds &= (1 << LED_COUNT) - 1; + + // Update the saved state of all LEDs with the requested changes. + LED_State = leds; + + // For all LEDs... + for (led_descriptor = &LED_DESCRIPTOR[0]; + led_descriptor < LED_DESCRIPTOR + LED_COUNT; + led_descriptor++) + { + // Set the LED to the requested state. + led_gpio_port = &AVR32_GPIO.port[led_descriptor->GPIO.PORT]; + if (leds & 1) + { + led_gpio_port->ovrc = led_descriptor->GPIO.PIN_MASK; + } + else + { + led_gpio_port->ovrs = led_descriptor->GPIO.PIN_MASK; + } + led_gpio_port->oders = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->gpers = led_descriptor->GPIO.PIN_MASK; + leds >>= 1; + } +} + + +U32 LED_Read_Display_Mask(U32 mask) +{ + return Rd_bits(LED_State, mask); +} + + +void LED_Display_Mask(U32 mask, U32 leds) +{ + // Use the LED descriptors to get the connections of a given LED to the MCU. + tLED_DESCRIPTOR *led_descriptor = &LED_DESCRIPTOR[0] - 1; + volatile avr32_gpio_port_t *led_gpio_port; + U8 led_shift; + + // Make sure only existing LEDs are specified. + mask &= (1 << LED_COUNT) - 1; + + // Update the saved state of all LEDs with the requested changes. + Wr_bits(LED_State, mask, leds); + + // While there are specified LEDs left to manage... + while (mask) + { + // Select the next specified LED and set it to the requested state. + led_shift = 1 + ctz(mask); + led_descriptor += led_shift; + led_gpio_port = &AVR32_GPIO.port[led_descriptor->GPIO.PORT]; + leds >>= led_shift - 1; + if (leds & 1) + { + led_gpio_port->ovrc = led_descriptor->GPIO.PIN_MASK; + } + else + { + led_gpio_port->ovrs = led_descriptor->GPIO.PIN_MASK; + } + led_gpio_port->oders = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->gpers = led_descriptor->GPIO.PIN_MASK; + leds >>= 1; + mask >>= led_shift; + } +} + + +Bool LED_Test(U32 leds) +{ + return Tst_bits(LED_State, leds); +} + + +void LED_Off(U32 leds) +{ + // Use the LED descriptors to get the connections of a given LED to the MCU. + tLED_DESCRIPTOR *led_descriptor = &LED_DESCRIPTOR[0] - 1; + volatile avr32_gpio_port_t *led_gpio_port; + U8 led_shift; + + // Make sure only existing LEDs are specified. + leds &= (1 << LED_COUNT) - 1; + + // Update the saved state of all LEDs with the requested changes. + Clr_bits(LED_State, leds); + + // While there are specified LEDs left to manage... + while (leds) + { + // Select the next specified LED and turn it off. + led_shift = 1 + ctz(leds); + led_descriptor += led_shift; + led_gpio_port = &AVR32_GPIO.port[led_descriptor->GPIO.PORT]; + led_gpio_port->ovrs = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->oders = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->gpers = led_descriptor->GPIO.PIN_MASK; + leds >>= led_shift; + } +} + + +void LED_On(U32 leds) +{ + // Use the LED descriptors to get the connections of a given LED to the MCU. + tLED_DESCRIPTOR *led_descriptor = &LED_DESCRIPTOR[0] - 1; + volatile avr32_gpio_port_t *led_gpio_port; + U8 led_shift; + + // Make sure only existing LEDs are specified. + leds &= (1 << LED_COUNT) - 1; + + // Update the saved state of all LEDs with the requested changes. + Set_bits(LED_State, leds); + + // While there are specified LEDs left to manage... + while (leds) + { + // Select the next specified LED and turn it on. + led_shift = 1 + ctz(leds); + led_descriptor += led_shift; + led_gpio_port = &AVR32_GPIO.port[led_descriptor->GPIO.PORT]; + led_gpio_port->ovrc = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->oders = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->gpers = led_descriptor->GPIO.PIN_MASK; + leds >>= led_shift; + } +} + + +void LED_Toggle(U32 leds) +{ + // Use the LED descriptors to get the connections of a given LED to the MCU. + tLED_DESCRIPTOR *led_descriptor = &LED_DESCRIPTOR[0] - 1; + volatile avr32_gpio_port_t *led_gpio_port; + U8 led_shift; + + // Make sure only existing LEDs are specified. + leds &= (1 << LED_COUNT) - 1; + + // Update the saved state of all LEDs with the requested changes. + Tgl_bits(LED_State, leds); + + // While there are specified LEDs left to manage... + while (leds) + { + // Select the next specified LED and toggle it. + led_shift = 1 + ctz(leds); + led_descriptor += led_shift; + led_gpio_port = &AVR32_GPIO.port[led_descriptor->GPIO.PORT]; + led_gpio_port->ovrt = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->oders = led_descriptor->GPIO.PIN_MASK; + led_gpio_port->gpers = led_descriptor->GPIO.PIN_MASK; + leds >>= led_shift; + } +} + + +U32 LED_Read_Display_Field(U32 field) +{ + return Rd_bitfield(LED_State, field); +} + + +void LED_Display_Field(U32 field, U32 leds) +{ + // Move the bit-field to the appropriate position for the bit-mask. + LED_Display_Mask(field, leds << ctz(field)); +} + + +U8 LED_Get_Intensity(U32 led) +{ + tLED_DESCRIPTOR *led_descriptor; + + // Check that the argument value is valid. + led = ctz(led); + led_descriptor = &LED_DESCRIPTOR[led]; + if (led >= LED_COUNT || led_descriptor->PWM.CHANNEL < 0) return 0; + + // Return the duty cycle value if the LED PWM channel is enabled, else 0. + return (AVR32_PWM.sr & (1 << led_descriptor->PWM.CHANNEL)) ? + AVR32_PWM.channel[led_descriptor->PWM.CHANNEL].cdty : 0; +} + + +void LED_Set_Intensity(U32 leds, U8 intensity) +{ + tLED_DESCRIPTOR *led_descriptor = &LED_DESCRIPTOR[0] - 1; + volatile avr32_pwm_channel_t *led_pwm_channel; + volatile avr32_gpio_port_t *led_gpio_port; + U8 led_shift; + + // For each specified LED... + for (leds &= (1 << LED_COUNT) - 1; leds; leds >>= led_shift) + { + // Select the next specified LED and check that it has a PWM channel. + led_shift = 1 + ctz(leds); + led_descriptor += led_shift; + if (led_descriptor->PWM.CHANNEL < 0) continue; + + // Initialize or update the LED PWM channel. + led_pwm_channel = &AVR32_PWM.channel[led_descriptor->PWM.CHANNEL]; + if (!(AVR32_PWM.sr & (1 << led_descriptor->PWM.CHANNEL))) + { + led_pwm_channel->cmr = (AVR32_PWM_CPRE_MCK << AVR32_PWM_CPRE_OFFSET) & + ~(AVR32_PWM_CALG_MASK | + AVR32_PWM_CPOL_MASK | + AVR32_PWM_CPD_MASK); + led_pwm_channel->cprd = 0x000000FF; + led_pwm_channel->cdty = intensity; + AVR32_PWM.ena = 1 << led_descriptor->PWM.CHANNEL; + } + else + { + AVR32_PWM.isr; + while (!(AVR32_PWM.isr & (1 << led_descriptor->PWM.CHANNEL))); + led_pwm_channel->cupd = intensity; + } + + // Switch the LED pin to its PWM function. + led_gpio_port = &AVR32_GPIO.port[led_descriptor->GPIO.PORT]; + if (led_descriptor->PWM.FUNCTION & 0x1) + { + led_gpio_port->pmr0s = led_descriptor->GPIO.PIN_MASK; + } + else + { + led_gpio_port->pmr0c = led_descriptor->GPIO.PIN_MASK; + } + if (led_descriptor->PWM.FUNCTION & 0x2) + { + led_gpio_port->pmr1s = led_descriptor->GPIO.PIN_MASK; + } + else + { + led_gpio_port->pmr1c = led_descriptor->GPIO.PIN_MASK; + } + led_gpio_port->gperc = led_descriptor->GPIO.PIN_MASK; + } +} diff --git a/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/EVK1105/led.h b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/EVK1105/led.h new file mode 100644 index 000000000..7766b6a76 --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/EVK1105/led.h @@ -0,0 +1,187 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief AT32UC3A EVK1105 board LEDs support package. + * + * This file contains definitions and services related to the LED features of + * the EVK1105 board. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 AT32UC3A devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _LED_H_ +#define _LED_H_ + +#include "compiler.h" + + +/*! \name Identifiers of LEDs to Use with LED Functions + */ +//! @{ +#define LED0 0x01 +#define LED1 0x02 +#define LED2 0x04 +#define LED3 0x08 +//! @} + + +/*! \brief Gets the last state of all LEDs set through the LED API. + * + * \return State of all LEDs (1 bit per LED). + * + * \note The GPIO pin configuration of all LEDs is left unchanged. + */ +extern U32 LED_Read_Display(void); + +/*! \brief Sets the state of all LEDs. + * + * \param leds New state of all LEDs (1 bit per LED). + * + * \note The pins of all LEDs are set to GPIO output mode. + */ +extern void LED_Display(U32 leds); + +/*! \brief Gets the last state of the specified LEDs set through the LED API. + * + * \param mask LEDs of which to get the state (1 bit per LED). + * + * \return State of the specified LEDs (1 bit per LED). + * + * \note The GPIO pin configuration of all LEDs is left unchanged. + */ +extern U32 LED_Read_Display_Mask(U32 mask); + +/*! \brief Sets the state of the specified LEDs. + * + * \param mask LEDs of which to set the state (1 bit per LED). + * + * \param leds New state of the specified LEDs (1 bit per LED). + * + * \note The pins of the specified LEDs are set to GPIO output mode. + */ +extern void LED_Display_Mask(U32 mask, U32 leds); + +/*! \brief Tests the last state of the specified LEDs set through the LED API. + * + * \param leds LEDs of which to test the state (1 bit per LED). + * + * \return \c TRUE if at least one of the specified LEDs has a state on, else + * \c FALSE. + * + * \note The GPIO pin configuration of all LEDs is left unchanged. + */ +extern Bool LED_Test(U32 leds); + +/*! \brief Turns off the specified LEDs. + * + * \param leds LEDs to turn off (1 bit per LED). + * + * \note The pins of the specified LEDs are set to GPIO output mode. + */ +extern void LED_Off(U32 leds); + +/*! \brief Turns on the specified LEDs. + * + * \param leds LEDs to turn on (1 bit per LED). + * + * \note The pins of the specified LEDs are set to GPIO output mode. + */ +extern void LED_On(U32 leds); + +/*! \brief Toggles the specified LEDs. + * + * \param leds LEDs to toggle (1 bit per LED). + * + * \note The pins of the specified LEDs are set to GPIO output mode. + */ +extern void LED_Toggle(U32 leds); + +/*! \brief Gets as a bit-field the last state of the specified LEDs set through + * the LED API. + * + * \param field LEDs of which to get the state (1 bit per LED). + * + * \return State of the specified LEDs (1 bit per LED, beginning with the first + * specified LED). + * + * \note The GPIO pin configuration of all LEDs is left unchanged. + */ +extern U32 LED_Read_Display_Field(U32 field); + +/*! \brief Sets as a bit-field the state of the specified LEDs. + * + * \param field LEDs of which to set the state (1 bit per LED). + * \param leds New state of the specified LEDs (1 bit per LED, beginning with + * the first specified LED). + * + * \note The pins of the specified LEDs are set to GPIO output mode. + */ +extern void LED_Display_Field(U32 field, U32 leds); + +/*! \brief Gets the intensity of the specified LED. + * + * \param led LED of which to get the intensity (1 bit per LED; only the least + * significant set bit is used). + * + * \return Intensity of the specified LED (0x00 to 0xFF). + * + * \warning The PWM channel of the specified LED is supposed to be used only by + * this module. + * + * \note The GPIO pin configuration of all LEDs is left unchanged. + */ +extern U8 LED_Get_Intensity(U32 led); + +/*! \brief Sets the intensity of the specified LEDs. + * + * \param leds LEDs of which to set the intensity (1 bit per LED). + * \param intensity New intensity of the specified LEDs (0x00 to 0xFF). + * + * \warning The PWM channels of the specified LEDs are supposed to be used only + * by this module. + * + * \note The pins of the specified LEDs are set to PWM output mode. + */ +extern void LED_Set_Intensity(U32 leds, U8 intensity); + + +#endif // _LED_H_ diff --git a/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/board.h b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/board.h new file mode 100644 index 000000000..78ee91e75 --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/board.h @@ -0,0 +1,120 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Standard board header file. + * + * This file includes the appropriate board header file according to the + * defined board. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _BOARD_H_ +#define _BOARD_H_ + +#include + +/*! \name Base Boards + */ +//! @{ +#define EVK1100 1 //!< AT32UC3A EVK1100 board. +#define EVK1101 2 //!< AT32UC3B EVK1101 board. +#define UC3C_EK 3 //!< AT32UC3C UC3C_EK board. +#define EVK1104 4 //!< AT32UC3A3 EVK1104 board. +#define EVK1105 5 //!< AT32UC3A EVK1105 board. +#define STK1000 6 //!< AT32AP7000 STK1000 board. +#define NGW100 7 //!< AT32AP7000 NGW100 board. +#define STK600_RCUC3L0 8 //!< STK600 RCUC3L0 board. +#define UC3L_EK 9 //!< AT32UC3L-EK board. +#define USER_BOARD 99 //!< User-reserved board (if any). +//! @} + +/*! \name Extension Boards + */ +//! @{ +#define EXT1102 1 //!< AT32UC3B EXT1102 board. +#define MC300 2 //!< AT32UC3 MC300 board. +#define USER_EXT_BOARD 99 //!< User-reserved extension board (if any). +//! @} + +#if BOARD == EVK1100 + #include "EVK1100/evk1100.h" +#elif BOARD == EVK1101 + #include "EVK1101/evk1101.h" +#elif BOARD == UC3C_EK + #include "UC3C_EK/uc3c_ek.h" +#elif BOARD == EVK1104 + #include "EVK1104/evk1104.h" +#elif BOARD == EVK1105 + #include "EVK1105/evk1105.h" +#elif BOARD == STK1000 + #include "STK1000/stk1000.h" +#elif BOARD == NGW100 + #include "NGW100/ngw100.h" +#elif BOARD == STK600_RCUC3L0 + #include "STK600/RCUC3L0/stk600_rcuc3l0.h" +#elif BOARD == UC3L_EK + #include "UC3L_EK/uc3l_ek.h" +#elif BOARD == ARDUINO + #include "ARDUINO/arduino.h" +#else + #error No known AVR32 board defined +#endif + +#if (defined EXT_BOARD) + #if EXT_BOARD == EXT1102 + #include "EXT1102/ext1102.h" + #elif EXT_BOARD == MC300 + #include "MC300/mc300.h" + #elif EXT_BOARD == USER_EXT_BOARD + // User-reserved area: #include the header file of your extension board here + // (if any). + #endif +#endif + + +#ifndef FRCOSC + #define FRCOSC AVR32_PM_RCOSC_FREQUENCY //!< Default RCOsc frequency. +#endif + + +#endif // _BOARD_H_ diff --git a/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/board.h.ori b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/board.h.ori new file mode 100644 index 000000000..30052c8ab --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/board.h.ori @@ -0,0 +1,121 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Standard board header file. + * + * This file includes the appropriate board header file according to the + * defined board. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _BOARD_H_ +#define _BOARD_H_ + +#include + +/*! \name Base Boards + */ +//! @{ +#define EVK1100 1 //!< AT32UC3A EVK1100 board. +#define EVK1101 2 //!< AT32UC3B EVK1101 board. +#define UC3C_EK 3 //!< AT32UC3C UC3C_EK board. +#define EVK1104 4 //!< AT32UC3A3 EVK1104 board. +#define EVK1105 5 //!< AT32UC3A EVK1105 board. +#define STK1000 6 //!< AT32AP7000 STK1000 board. +#define NGW100 7 //!< AT32AP7000 NGW100 board. +#define STK600_RCUC3L0 8 //!< STK600 RCUC3L0 board. +#define UC3L_EK 9 //!< AT32UC3L-EK board. +#define USER_BOARD 99 //!< User-reserved board (if any). +//! @} + +/*! \name Extension Boards + */ +//! @{ +#define EXT1102 1 //!< AT32UC3B EXT1102 board. +#define MC300 2 //!< AT32UC3 MC300 board. +#define USER_EXT_BOARD 99 //!< User-reserved extension board (if any). +//! @} + +#if BOARD == EVK1100 + #include "EVK1100/evk1100.h" +#elif BOARD == EVK1101 + #include "EVK1101/evk1101.h" +#elif BOARD == UC3C_EK + #include "UC3C_EK/uc3c_ek.h" +#elif BOARD == EVK1104 + #include "EVK1104/evk1104.h" +#elif BOARD == EVK1105 + #include "EVK1105/evk1105.h" +#elif BOARD == STK1000 + #include "STK1000/stk1000.h" +#elif BOARD == NGW100 + #include "NGW100/ngw100.h" +#elif BOARD == STK600_RCUC3L0 + #include "STK600/RCUC3L0/stk600_rcuc3l0.h" +#elif BOARD == UC3L_EK + #include "UC3L_EK/uc3l_ek.h" +#elif BOARD == USER_BOARD + // User-reserved area: #include the header file of your board here (if any). + #include "user_board.h" +#else + #error No known AVR32 board defined +#endif + +#if (defined EXT_BOARD) + #if EXT_BOARD == EXT1102 + #include "EXT1102/ext1102.h" + #elif EXT_BOARD == MC300 + #include "MC300/mc300.h" + #elif EXT_BOARD == USER_EXT_BOARD + // User-reserved area: #include the header file of your extension board here + // (if any). + #endif +#endif + + +#ifndef FRCOSC + #define FRCOSC AVR32_PM_RCOSC_FREQUENCY //!< Default RCOsc frequency. +#endif + + +#endif // _BOARD_H_ diff --git a/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx.c b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx.c new file mode 100644 index 000000000..d4b1b730f --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx.c @@ -0,0 +1,672 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Management of the AT45DBX data flash controller through SPI. + * + * This file manages the accesses to the AT45DBX data flash components. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with an SPI module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +//_____ I N C L U D E S ___________________________________________________ + +#include "conf_access.h" + + +#if AT45DBX_MEM == ENABLE + +#include "compiler.h" +#include "board.h" +#include "gpio.h" +#include "spi.h" +#include "conf_at45dbx.h" +#include "at45dbx.h" +#include "printf-stdarg.h" + +#if AT45DBX_MEM_CNT > 4 + #error AT45DBX_MEM_CNT must not exceed 4 +#endif + + +//_____ D E F I N I T I O N S ______________________________________________ + +/*! \name AT45DBX Group A Commands + */ +//! @{ +#define AT45DBX_CMDA_RD_PAGE 0xD2 //!< Main Memory Page Read (Serial/8-bit Mode). +#define AT45DBX_CMDA_RD_ARRAY_LEG 0xE8 //!< Continuous Array Read, Legacy Command (Serial/8-bit Mode). +#define AT45DBX_CMDA_RD_ARRAY_LF_SM 0x03 //!< Continuous Array Read, Low-Frequency Mode (Serial Mode). +#define AT45DBX_CMDA_RD_ARRAY_AF_SM 0x0B //!< Continuous Array Read, Any-Frequency Mode (Serial Mode). +#define AT45DBX_CMDA_RD_SECTOR_PROT_REG 0x32 //!< Read Sector Protection Register (Serial/8-bit Mode). +#define AT45DBX_CMDA_RD_SECTOR_LKDN_REG 0x35 //!< Read Sector Lockdown Register (Serial/8-bit Mode). +#define AT45DBX_CMDA_RD_SECURITY_REG 0x77 //!< Read Security Register (Serial/8-bit Mode). +//! @} + +/*! \name AT45DBX Group B Commands + */ +//! @{ +#define AT45DBX_CMDB_ER_PAGE 0x81 //!< Page Erase (Serial/8-bit Mode). +#define AT45DBX_CMDB_ER_BLOCK 0x50 //!< Block Erase (Serial/8-bit Mode). +#define AT45DBX_CMDB_ER_SECTOR 0x7C //!< Sector Erase (Serial/8-bit Mode). +#define AT45DBX_CMDB_ER_CHIP 0xC794809A //!< Chip Erase (Serial/8-bit Mode). +#define AT45DBX_CMDB_XFR_PAGE_TO_BUF1 0x53 //!< Main Memory Page to Buffer 1 Transfer (Serial/8-bit Mode). +#define AT45DBX_CMDB_XFR_PAGE_TO_BUF2 0x55 //!< Main Memory Page to Buffer 2 Transfer (Serial/8-bit Mode). +#define AT45DBX_CMDB_CMP_PAGE_TO_BUF1 0x60 //!< Main Memory Page to Buffer 1 Compare (Serial/8-bit Mode). +#define AT45DBX_CMDB_CMP_PAGE_TO_BUF2 0x61 //!< Main Memory Page to Buffer 2 Compare (Serial/8-bit Mode). +#define AT45DBX_CMDB_PR_BUF1_TO_PAGE_ER 0x83 //!< Buffer 1 to Main Memory Page Program with Built-in Erase (Serial/8-bit Mode). +#define AT45DBX_CMDB_PR_BUF2_TO_PAGE_ER 0x86 //!< Buffer 2 to Main Memory Page Program with Built-in Erase (Serial/8-bit Mode). +#define AT45DBX_CMDB_PR_BUF1_TO_PAGE 0x88 //!< Buffer 1 to Main Memory Page Program without Built-in Erase (Serial/8-bit Mode). +#define AT45DBX_CMDB_PR_BUF2_TO_PAGE 0x89 //!< Buffer 2 to Main Memory Page Program without Built-in Erase (Serial/8-bit Mode). +#define AT45DBX_CMDB_PR_PAGE_TH_BUF1 0x82 //!< Main Memory Page Program through Buffer 1 (Serial/8-bit Mode). +#define AT45DBX_CMDB_PR_PAGE_TH_BUF2 0x85 //!< Main Memory Page Program through Buffer 2 (Serial/8-bit Mode). +#define AT45DBX_CMDB_RWR_PAGE_TH_BUF1 0x58 //!< Auto Page Rewrite through Buffer 1 (Serial/8-bit Mode). +#define AT45DBX_CMDB_RWR_PAGE_TH_BUF2 0x59 //!< Auto Page Rewrite through Buffer 2 (Serial/8-bit Mode). +//! @} + +/*! \name AT45DBX Group C Commands + */ +//! @{ +#define AT45DBX_CMDC_RD_BUF1_LF_SM 0xD1 //!< Buffer 1 Read, Low-Frequency Mode (Serial Mode). +#define AT45DBX_CMDC_RD_BUF2_LF_SM 0xD3 //!< Buffer 2 Read, Low-Frequency Mode (Serial Mode). +#define AT45DBX_CMDC_RD_BUF1_AF_SM 0xD4 //!< Buffer 1 Read, Any-Frequency Mode (Serial Mode). +#define AT45DBX_CMDC_RD_BUF2_AF_SM 0xD6 //!< Buffer 2 Read, Any-Frequency Mode (Serial Mode). +#define AT45DBX_CMDC_RD_BUF1_AF_8M 0x54 //!< Buffer 1 Read, Any-Frequency Mode (8-bit Mode). +#define AT45DBX_CMDC_RD_BUF2_AF_8M 0x56 //!< Buffer 2 Read, Any-Frequency Mode (8-bit Mode). +#define AT45DBX_CMDC_WR_BUF1 0x84 //!< Buffer 1 Write (Serial/8-bit Mode). +#define AT45DBX_CMDC_WR_BUF2 0x87 //!< Buffer 2 Write (Serial/8-bit Mode). +#define AT45DBX_CMDC_RD_STATUS_REG 0xD7 //!< Status Register Read (Serial/8-bit Mode). +#define AT45DBX_CMDC_RD_MNFCT_DEV_ID_SM 0x9F //!< Manufacturer and Device ID Read (Serial Mode). +//! @} + +/*! \name AT45DBX Group D Commands + */ +//! @{ +#define AT45DBX_CMDD_EN_SECTOR_PROT 0x3D2A7FA9 //!< Enable Sector Protection (Serial/8-bit Mode). +#define AT45DBX_CMDD_DIS_SECTOR_PROT 0x3D2A7F9A //!< Disable Sector Protection (Serial/8-bit Mode). +#define AT45DBX_CMDD_ER_SECTOR_PROT_REG 0x3D2A7FCF //!< Erase Sector Protection Register (Serial/8-bit Mode). +#define AT45DBX_CMDD_PR_SECTOR_PROT_REG 0x3D2A7FFC //!< Program Sector Protection Register (Serial/8-bit Mode). +#define AT45DBX_CMDD_LKDN_SECTOR 0x3D2A7F30 //!< Sector Lockdown (Serial/8-bit Mode). +#define AT45DBX_CMDD_PR_SECURITY_REG 0x9B000000 //!< Program Security Register (Serial/8-bit Mode). +#define AT45DBX_CMDD_PR_CONF_REG 0x3D2A80A6 //!< Program Configuration Register (Serial/8-bit Mode). +#define AT45DBX_CMDD_DEEP_PWR_DN 0xB9 //!< Deep Power-down (Serial/8-bit Mode). +#define AT45DBX_CMDD_RSM_DEEP_PWR_DN 0xAB //!< Resume from Deep Power-down (Serial/8-bit Mode). +//! @} + + +/*! \name Bit-Masks and Values for the Status Register + */ +//! @{ +#define AT45DBX_MSK_BUSY 0x80 //!< Busy status bit-mask. +#define AT45DBX_BUSY 0x00 //!< Busy status value (0x00 when busy, 0x80 when ready). +#define AT45DBX_MSK_DENSITY 0x3C //!< Device density bit-mask. +//! @} +#if AT45DBX_MEM_SIZE == AT45DBX_1MB + +/*! \name AT45DB081 Memories + */ +//! @{ +#define AT45DB021D_DENSITY 0x14 //!< Device density value. +#define AT45DBX_DENSITY 0x24 //!< Device density value. +#define AT45DBX_BYTE_ADDR_BITS 9 //!< Address bits for byte position within buffer. + +//! @} +#elif AT45DBX_MEM_SIZE == AT45DBX_2MB +/*! \name AT45DB021D Memories + */ +//! @{ +#define AT45DBX_DENSITY 0x21 //!< Device density value. +#define AT45DBX_BYTE_ADDR_BITS 10 //!< Address bits for byte position within buffer. + +//! @} +#if 0 +/*! \name AT45DB161 Memories + */ +//! @{ +#define AT45DBX_DENSITY 0x2C //!< Device density value. +#define AT45DBX_BYTE_ADDR_BITS 10 //!< Address bits for byte position within buffer. + +//! @} +#endif + +#elif AT45DBX_MEM_SIZE == AT45DBX_4MB + +/*! \name AT45DB321 Memories + */ +//! @{ +#define AT45DBX_DENSITY 0x34 //!< Device density value. +#define AT45DBX_BYTE_ADDR_BITS 10 //!< Address bits for byte position within buffer. + +//! @} + +#elif AT45DBX_MEM_SIZE == AT45DBX_8MB + +/*! \name AT45DB642 Memories + */ +//! @{ +#define AT45DBX_DENSITY 0x3C //!< Device density value. +#define AT45DBX_BYTE_ADDR_BITS 11 //!< Address bits for byte position within buffer. + + +//! @} + +#else + #error AT45DBX_MEM_SIZE is not defined to a supported value +#endif + + + +//! Address bits for page selection. +#define AT45DBX_PAGE_ADDR_BITS (AT45DBX_MEM_SIZE - AT45DBX_PAGE_BITS) + +//! Number of bits for addresses within pages. +#define AT45DBX_PAGE_BITS (AT45DBX_BYTE_ADDR_BITS - 1) + +//! Page size in bytes. +#define AT45DBX_PAGE_SIZE (1 << AT45DBX_PAGE_BITS) + +//! Bit-mask for byte position within buffer in \ref gl_ptr_mem. +#define AT45DBX_MSK_PTR_BYTE ((1 << AT45DBX_PAGE_BITS) - 1) + +//! Bit-mask for page selection in \ref gl_ptr_mem. +#define AT45DBX_MSK_PTR_PAGE (((1 << AT45DBX_PAGE_ADDR_BITS) - 1) << AT45DBX_PAGE_BITS) + +//! Bit-mask for byte position within sector in \ref gl_ptr_mem. +#define AT45DBX_MSK_PTR_SECTOR ((1 << AT45DBX_SECTOR_BITS) - 1) + + +/*! \brief Sends a dummy byte through SPI. + */ +#define spi_write_dummy() spi_write(AT45DBX_SPI, 0xFF) + + +//! Boolean indicating whether memory is in busy state. +static Bool at45dbx_busy; + +//! Memory data pointer. +static U32 gl_ptr_mem; + +//! Sector buffer. +static U8 sector_buf[AT45DBX_SECTOR_SIZE]; + + +/*! \name Control Functions + */ +//! @{ + + +Bool at45dbx_init(spi_options_t spiOptions, unsigned int pba_hz) +{ + // Setup SPI registers according to spiOptions. + for (spiOptions.reg = AT45DBX_SPI_FIRST_NPCS; + spiOptions.reg < AT45DBX_SPI_FIRST_NPCS + AT45DBX_MEM_CNT; + spiOptions.reg++) + { + if (spi_setupChipReg(AT45DBX_SPI, &spiOptions, pba_hz) != SPI_OK) return KO; + } + + // Memory ready. + at45dbx_busy = FALSE; + + return OK; +} + + +/*! \brief Selects or unselects a DF memory. + * + * \param memidx Memory ID of DF to select or unselect. + * \param bSelect Boolean indicating whether the DF memory has to be selected. + */ +static void at45dbx_chipselect_df(U8 memidx, Bool bSelect) +{ + if (bSelect) + { + // Select SPI chip. + spi_selectChip(AT45DBX_SPI, AT45DBX_SPI_FIRST_NPCS + memidx); + } + else + { + // Unselect SPI chip. + spi_unselectChip(AT45DBX_SPI, AT45DBX_SPI_FIRST_NPCS + memidx); + } +} + + +Bool at45dbx_mem_check(void) +{ + U8 df; + U16 status = 0; + + // DF memory check. + for (df = 0; df < AT45DBX_MEM_CNT; df++) + { + // Select the DF memory to check. + at45dbx_chipselect_df(df, TRUE); + + // Send the Status Register Read command. + spi_write(AT45DBX_SPI, AT45DBX_CMDC_RD_STATUS_REG); + + // Send a dummy byte to read the status register. + spi_write_dummy(); + spi_read(AT45DBX_SPI, &status); + + // Unselect the checked DF memory. + at45dbx_chipselect_df(df, FALSE); + + // Unexpected device density value. + if ((status & AT45DBX_MSK_DENSITY) < AT45DB021D_DENSITY) + { + printk("Unexpected device density value: %d (0x%x)\n", (status & AT45DBX_MSK_DENSITY), status); + return KO; + } + } + + return OK; +} + + +/*! \brief Waits until the DF is ready. + */ +static void at45dbx_wait_ready(void) +{ + U16 status; + + // Select the DF memory gl_ptr_mem points to. + at45dbx_chipselect_df(gl_ptr_mem >> AT45DBX_MEM_SIZE, TRUE); + + // Send the Status Register Read command. + spi_write(AT45DBX_SPI, AT45DBX_CMDC_RD_STATUS_REG); + + // Read the status register until the DF is ready. + do + { + // Send a dummy byte to read the status register. + spi_write_dummy(); + spi_read(AT45DBX_SPI, &status); + } while ((status & AT45DBX_MSK_BUSY) == AT45DBX_BUSY); + + // Unselect the DF memory gl_ptr_mem points to. + at45dbx_chipselect_df(gl_ptr_mem >> AT45DBX_MEM_SIZE, FALSE); +} + + +Bool at45dbx_read_open(U32 sector) +{ + U32 addr; + + // Set the global memory pointer to a byte address. + gl_ptr_mem = sector << AT45DBX_SECTOR_BITS; // gl_ptr_mem = sector * AT45DBX_SECTOR_SIZE. + + // If the DF memory is busy, wait until it's ready. + if (at45dbx_busy) at45dbx_wait_ready(); + at45dbx_busy = FALSE; + + // Select the DF memory gl_ptr_mem points to. + at45dbx_chipselect_df(gl_ptr_mem >> AT45DBX_MEM_SIZE, TRUE); + + // Initiate a page read at a given sector. + + // Send the Main Memory Page Read command. + spi_write(AT45DBX_SPI, AT45DBX_CMDA_RD_PAGE); + + // Send the three address bytes, which comprise: + // - (24 - (AT45DBX_PAGE_ADDR_BITS + AT45DBX_BYTE_ADDR_BITS)) reserved bits; + // - then AT45DBX_PAGE_ADDR_BITS bits specifying the page in main memory to be read; + // - then AT45DBX_BYTE_ADDR_BITS bits specifying the starting byte address within that page. + // NOTE: The bits of gl_ptr_mem above the AT45DBX_MEM_SIZE bits are useless for the local + // DF addressing. They are used for DF discrimination when there are several DFs. + addr = (Rd_bitfield(gl_ptr_mem, AT45DBX_MSK_PTR_PAGE) << AT45DBX_BYTE_ADDR_BITS) | + Rd_bitfield(gl_ptr_mem, AT45DBX_MSK_PTR_BYTE); + spi_write(AT45DBX_SPI, LSB2W(addr)); + spi_write(AT45DBX_SPI, LSB1W(addr)); + spi_write(AT45DBX_SPI, LSB0W(addr)); + + // Send 32 don't care clock cycles to initialize the read operation. + spi_write_dummy(); + spi_write_dummy(); + spi_write_dummy(); + spi_write_dummy(); + + return OK; +} + + +void at45dbx_read_close(void) +{ + // Unselect the DF memory gl_ptr_mem points to. + at45dbx_chipselect_df(gl_ptr_mem >> AT45DBX_MEM_SIZE, FALSE); + + // Memory ready. + at45dbx_busy = FALSE; +} + + +Bool at45dbx_write_open(U32 sector) +{ + U32 addr; + + // Set the global memory pointer to a byte address. + gl_ptr_mem = sector << AT45DBX_SECTOR_BITS; // gl_ptr_mem = sector * AT45DBX_SECTOR_SIZE. + + // If the DF memory is busy, wait until it's ready. + if (at45dbx_busy) at45dbx_wait_ready(); + at45dbx_busy = FALSE; + +#if AT45DBX_PAGE_SIZE > AT45DBX_SECTOR_SIZE + // Select the DF memory gl_ptr_mem points to. + at45dbx_chipselect_df(gl_ptr_mem >> AT45DBX_MEM_SIZE, TRUE); + + // Transfer the content of the current page to buffer 1. + + // Send the Main Memory Page to Buffer 1 Transfer command. + spi_write(AT45DBX_SPI, AT45DBX_CMDB_XFR_PAGE_TO_BUF1); + + // Send the three address bytes, which comprise: + // - (24 - (AT45DBX_PAGE_ADDR_BITS + AT45DBX_BYTE_ADDR_BITS)) reserved bits; + // - then AT45DBX_PAGE_ADDR_BITS bits specifying the page in main memory to be read; + // - then AT45DBX_BYTE_ADDR_BITS don't care bits. + // NOTE: The bits of gl_ptr_mem above the AT45DBX_MEM_SIZE bits are useless for the local + // DF addressing. They are used for DF discrimination when there are several DFs. + addr = Rd_bitfield(gl_ptr_mem, AT45DBX_MSK_PTR_PAGE) << AT45DBX_BYTE_ADDR_BITS; + spi_write(AT45DBX_SPI, LSB2W(addr)); + spi_write(AT45DBX_SPI, LSB1W(addr)); + spi_write(AT45DBX_SPI, LSB0W(addr)); + + // Unselect the DF memory gl_ptr_mem points to. + at45dbx_chipselect_df(gl_ptr_mem >> AT45DBX_MEM_SIZE, FALSE); + + // Wait for end of page transfer. + at45dbx_wait_ready(); +#endif + + // Select the DF memory gl_ptr_mem points to. + at45dbx_chipselect_df(gl_ptr_mem >> AT45DBX_MEM_SIZE, TRUE); + + // Initiate a page write at a given sector. + + // Send the Main Memory Page Program through Buffer 1 command. + spi_write(AT45DBX_SPI, AT45DBX_CMDB_PR_PAGE_TH_BUF1); + + // Send the three address bytes, which comprise: + // - (24 - (AT45DBX_PAGE_ADDR_BITS + AT45DBX_BYTE_ADDR_BITS)) reserved bits; + // - then AT45DBX_PAGE_ADDR_BITS bits specifying the page in main memory to be written; + // - then AT45DBX_BYTE_ADDR_BITS bits specifying the starting byte address within that page. + // NOTE: The bits of gl_ptr_mem above the AT45DBX_MEM_SIZE bits are useless for the local + // DF addressing. They are used for DF discrimination when there are several DFs. + addr = (Rd_bitfield(gl_ptr_mem, AT45DBX_MSK_PTR_PAGE) << AT45DBX_BYTE_ADDR_BITS) | + Rd_bitfield(gl_ptr_mem, AT45DBX_MSK_PTR_BYTE); + spi_write(AT45DBX_SPI, LSB2W(addr)); + spi_write(AT45DBX_SPI, LSB1W(addr)); + spi_write(AT45DBX_SPI, LSB0W(addr)); + + return OK; +} + + +void at45dbx_write_close(void) +{ + // While end of logical sector not reached, zero-fill remaining memory bytes. + while (Rd_bitfield(gl_ptr_mem, AT45DBX_MSK_PTR_SECTOR)) + { + spi_write(AT45DBX_SPI, 0x00); + gl_ptr_mem++; + } + + // Unselect the DF memory gl_ptr_mem points to. + at45dbx_chipselect_df(gl_ptr_mem >> AT45DBX_MEM_SIZE, FALSE); + + // Memory busy. + at45dbx_busy = TRUE; +} + + +//! @} + + +/*! \name Single-Byte Access Functions + */ +//! @{ + + +U8 at45dbx_read_byte(void) +{ + U16 data; + + // Memory busy. + if (at45dbx_busy) + { + // Being here, we know that we previously finished a page read. + // => We have to access the next page. + + // Memory ready. + at45dbx_busy = FALSE; + + // Eventually select the next DF and open the next page. + // NOTE: at45dbx_read_open input parameter is a sector. + at45dbx_read_open(gl_ptr_mem >> AT45DBX_SECTOR_BITS); // gl_ptr_mem / AT45DBX_SECTOR_SIZE. + } + + // Send a dummy byte to read the next data byte. + spi_write_dummy(); + spi_read(AT45DBX_SPI, &data); + gl_ptr_mem++; + + // If end of page reached, + if (!Rd_bitfield(gl_ptr_mem, AT45DBX_MSK_PTR_BYTE)) + { + // unselect the DF memory gl_ptr_mem points to. + at45dbx_chipselect_df(gl_ptr_mem >> AT45DBX_MEM_SIZE, FALSE); + + // Memory busy. + at45dbx_busy = TRUE; + } + + return data; +} + + +Bool at45dbx_write_byte(U8 b) +{ + // Memory busy. + if (at45dbx_busy) + { + // Being here, we know that we previously launched a page programming. + // => We have to access the next page. + + // Eventually select the next DF and open the next page. + // NOTE: at45dbx_write_open input parameter is a sector. + at45dbx_write_open(gl_ptr_mem >> AT45DBX_SECTOR_BITS); // gl_ptr_mem / AT45DBX_SECTOR_SIZE. + } + + // Write the next data byte. + spi_write(AT45DBX_SPI, b); + gl_ptr_mem++; + + // If end of page reached, + if (!Rd_bitfield(gl_ptr_mem, AT45DBX_MSK_PTR_BYTE)) + { + // unselect the DF memory gl_ptr_mem points to in order to program the page. + at45dbx_chipselect_df(gl_ptr_mem >> AT45DBX_MEM_SIZE, FALSE); + + // Memory busy. + at45dbx_busy = TRUE; + } + + return OK; +} + + +//! @} + + +/*! \name Multiple-Sector Access Functions + */ +//! @{ + + +Bool at45dbx_read_multiple_sector(U16 nb_sector) +{ + while (nb_sector--) + { + // Read the next sector. + at45dbx_read_sector_2_ram(sector_buf); + at45dbx_read_multiple_sector_callback(sector_buf); + } + + return OK; +} + + +Bool at45dbx_write_multiple_sector(U16 nb_sector) +{ + while (nb_sector--) + { + // Write the next sector. + at45dbx_write_multiple_sector_callback(sector_buf); + at45dbx_write_sector_from_ram(sector_buf); + } + + return OK; +} + + +//! @} + + +/*! \name Single-Sector Access Functions + */ +//! @{ + + +Bool at45dbx_read_sector_2_ram(void *ram) +{ + U8 *_ram = ram; + U16 i; + U16 data; + + // Memory busy. + if (at45dbx_busy) + { + // Being here, we know that we previously finished a page read. + // => We have to access the next page. + + // Memory ready. + at45dbx_busy = FALSE; + + // Eventually select the next DF and open the next page. + // NOTE: at45dbx_read_open input parameter is a sector. + at45dbx_read_open(gl_ptr_mem >> AT45DBX_SECTOR_BITS); // gl_ptr_mem / AT45DBX_SECTOR_SIZE. + } + + // Read the next sector. + for (i = AT45DBX_SECTOR_SIZE; i; i--) + { + // Send a dummy byte to read the next data byte. + spi_write_dummy(); + spi_read(AT45DBX_SPI, &data); + *_ram++ = data; + } + + // Update the memory pointer. + gl_ptr_mem += AT45DBX_SECTOR_SIZE; + +#if AT45DBX_PAGE_SIZE > AT45DBX_SECTOR_SIZE + // If end of page reached, + if (!Rd_bitfield(gl_ptr_mem, AT45DBX_MSK_PTR_BYTE)) +#endif + { + // unselect the DF memory gl_ptr_mem points to. + at45dbx_chipselect_df(gl_ptr_mem >> AT45DBX_MEM_SIZE, FALSE); + + // Memory busy. + at45dbx_busy = TRUE; + } + + return OK; +} + + +Bool at45dbx_write_sector_from_ram(const void *ram) +{ + const U8 *_ram = ram; + U16 i; + + // Memory busy. + if (at45dbx_busy) + { + // Being here, we know that we previously launched a page programming. + // => We have to access the next page. + + // Eventually select the next DF and open the next page. + // NOTE: at45dbx_write_open input parameter is a sector. + at45dbx_write_open(gl_ptr_mem >> AT45DBX_SECTOR_BITS); // gl_ptr_mem / AT45DBX_SECTOR_SIZE. + } + + // Write the next sector. + for (i = AT45DBX_SECTOR_SIZE; i; i--) + { + // Write the next data byte. + spi_write(AT45DBX_SPI, *_ram++); + } + + // Update the memory pointer. + gl_ptr_mem += AT45DBX_SECTOR_SIZE; + +#if AT45DBX_PAGE_SIZE > AT45DBX_SECTOR_SIZE + // If end of page reached, + if (!Rd_bitfield(gl_ptr_mem, AT45DBX_MSK_PTR_BYTE)) +#endif + { + // unselect the DF memory gl_ptr_mem points to in order to program the page. + at45dbx_chipselect_df(gl_ptr_mem >> AT45DBX_MEM_SIZE, FALSE); + + // Memory busy. + at45dbx_busy = TRUE; + } + + return OK; +} + + +//! @} + + +#endif // AT45DBX_MEM == ENABLE diff --git a/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx.h b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx.h new file mode 100644 index 000000000..5816b618b --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx.h @@ -0,0 +1,269 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Management of the AT45DBX data flash controller through SPI. + * + * This file manages the accesses to the AT45DBX data flash components. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with an SPI module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _AT45DBX_H_ +#define _AT45DBX_H_ + + +#include "conf_access.h" + +#if AT45DBX_MEM == DISABLE + #error at45dbx.h is #included although AT45DBX_MEM is disabled +#endif + + +#include "spi.h" + + +//_____ D E F I N I T I O N S ______________________________________________ + +/*! \name Available AT45DBX Sizes + * + * Number of address bits of available AT45DBX data flash memories. + * + * \note Only memories with page sizes of at least 512 bytes (sector size) are + * supported. + */ +//! @{ +#define AT45DBX_1MB 20 +#define AT45DBX_2MB 21 +#define AT45DBX_4MB 22 +#define AT45DBX_8MB 23 +//! @} + +// AT45DBX_1MB +#define AT45DBX_SECTOR_BITS 8 //! Number of bits for addresses within sectors. +// AT45DBX_2MB AT45DBX_4MB AT45DBX_8MB +//#define AT45DBX_SECTOR_BITS 9 //! Number of bits for addresses within sectors. + +//! Sector size in bytes. +#define AT45DBX_SECTOR_SIZE (1 << AT45DBX_SECTOR_BITS) + +//_____ D E C L A R A T I O N S ____________________________________________ + +/*! \name Control Functions + */ +//! @{ + +/*! \brief Initializes the data flash controller and the SPI channel by which + * the DF is controlled. + * + * \param spiOptions Initialization options of the DF SPI channel. + * \param pba_hz SPI module input clock frequency (PBA clock, Hz). + * + * \retval OK Success. + * \retval KO Failure. + */ +extern Bool at45dbx_init(spi_options_t spiOptions, unsigned int pba_hz); + +/*! \brief Performs a memory check on all DFs. + * + * \retval OK Success. + * \retval KO Failure. + */ +extern Bool at45dbx_mem_check(void); + +/*! \brief Opens a DF memory in read mode at a given sector. + * + * \param sector Start sector. + * + * \retval OK Success. + * \retval KO Failure. + * + * \note Sector may be page-unaligned (depending on the DF page size). + */ +extern Bool at45dbx_read_open(U32 sector); + +/*! \brief Unselects the current DF memory. + */ +extern void at45dbx_read_close(void); + +/*! \brief This function opens a DF memory in write mode at a given sector. + * + * \param sector Start sector. + * + * \retval OK Success. + * \retval KO Failure. + * + * \note Sector may be page-unaligned (depending on the DF page size). + * + * \note If \ref AT45DBX_PAGE_SIZE > \ref AT45DBX_SECTOR_SIZE, page content is + * first loaded in buffer to then be partially updated by write byte or + * write sector functions. + */ +extern Bool at45dbx_write_open(U32 sector); + +/*! \brief Fills the end of the current logical sector and launches page programming. + */ +extern void at45dbx_write_close(void); + +//! @} + + +/*! \name Single-Byte Access Functions + */ +//! @{ + +/*! \brief Performs a single byte read from DF memory. + * + * \return The read byte. + * + * \note First call must be preceded by a call to the \ref at45dbx_read_open + * function. + */ +extern U8 at45dbx_read_byte(void); + +/*! \brief Performs a single byte write to DF memory. + * + * \param b The byte to write. + * + * \retval OK Success. + * \retval KO Failure. + * + * \note First call must be preceded by a call to the \ref at45dbx_write_open + * function. + */ +extern Bool at45dbx_write_byte(U8 b); + +//! @} + + +/*! \name Multiple-Sector Access Functions + */ +//! @{ + +/*! \brief Reads \a nb_sector sectors from DF memory. + * + * Data flow is: DF -> callback. + * + * \param nb_sector Number of contiguous sectors to read. + * + * \retval OK Success. + * \retval KO Failure. + * + * \note First call must be preceded by a call to the \ref at45dbx_read_open + * function. + * + * \note As \ref AT45DBX_PAGE_SIZE is always a multiple of + * \ref AT45DBX_SECTOR_SIZE, there is no need to check page end for each + * byte. + */ +extern Bool at45dbx_read_multiple_sector(U16 nb_sector); + +/*! \brief Callback function invoked after each sector read during + * \ref at45dbx_read_multiple_sector. + * + * \param psector Pointer to read sector. + */ +extern void at45dbx_read_multiple_sector_callback(const void *psector); + +/*! \brief Writes \a nb_sector sectors to DF memory. + * + * Data flow is: callback -> DF. + * + * \param nb_sector Number of contiguous sectors to write. + * + * \retval OK Success. + * \retval KO Failure. + * + * \note First call must be preceded by a call to the \ref at45dbx_write_open + * function. + * + * \note As \ref AT45DBX_PAGE_SIZE is always a multiple of + * \ref AT45DBX_SECTOR_SIZE, there is no need to check page end for each + * byte. + */ +extern Bool at45dbx_write_multiple_sector(U16 nb_sector); + +/*! \brief Callback function invoked before each sector write during + * \ref at45dbx_write_multiple_sector. + * + * \param psector Pointer to sector to write. + */ +extern void at45dbx_write_multiple_sector_callback(void *psector); + +//! @} + + +/*! \name Single-Sector Access Functions + */ +//! @{ + +/*! \brief Reads 1 DF sector to a RAM buffer. + * + * Data flow is: DF -> RAM. + * + * \param ram Pointer to RAM buffer. + * + * \retval OK Success. + * \retval KO Failure. + * + * \note First call must be preceded by a call to the \ref at45dbx_read_open + * function. + */ +extern Bool at45dbx_read_sector_2_ram(void *ram); + +/*! \brief Writes 1 DF sector from a RAM buffer. + * + * Data flow is: RAM -> DF. + * + * \param ram Pointer to RAM buffer. + * + * \retval OK Success. + * \retval KO Failure. + * + * \note First call must be preceded by a call to the \ref at45dbx_write_open + * function. + */ +extern Bool at45dbx_write_sector_from_ram(const void *ram); + +//! @} + + +#endif // _AT45DBX_H_ diff --git a/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx_mem.c b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx_mem.c new file mode 100644 index 000000000..4c0ace2f5 --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx_mem.c @@ -0,0 +1,234 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief CTRL_ACCESS interface for the AT45DBX data flash controller. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with an SPI module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +//_____ I N C L U D E S ___________________________________________________ + +#include "conf_access.h" + + +#if AT45DBX_MEM == ENABLE + +#include "conf_at45dbx.h" +#include "at45dbx.h" +#include "at45dbx_mem.h" + + +//_____ D E F I N I T I O N S ______________________________________________ + +//! Whether to detect write accesses to the memory. +#define AT45DBX_MEM_TEST_CHANGE_STATE ENABLED + + +#if (ACCESS_USB == ENABLED || ACCESS_MEM_TO_RAM == ENABLED) && AT45DBX_MEM_TEST_CHANGE_STATE == ENABLED + +//! Memory data modified flag. +static volatile Bool s_b_data_modify = FALSE; + +#endif + + +/*! \name Control Interface + */ +//! @{ + + +Ctrl_status at45dbx_test_unit_ready(void) +{ + return (at45dbx_mem_check() == OK) ? CTRL_GOOD : CTRL_NO_PRESENT; +} + + +Ctrl_status at45dbx_read_capacity(U32 *u32_nb_sector) +{ + *u32_nb_sector = (AT45DBX_MEM_CNT << (AT45DBX_MEM_SIZE - AT45DBX_SECTOR_BITS)) - 1; + + return CTRL_GOOD; +} + + +Bool at45dbx_wr_protect(void) +{ + return FALSE; +} + + +Bool at45dbx_removal(void) +{ + return FALSE; +} + + +//! @} + + +#if ACCESS_USB == ENABLED + +#include "usb_drv.h" +#include "scsi_decoder.h" + + +/*! \name MEM <-> USB Interface + */ +//! @{ + + +Ctrl_status at45dbx_usb_read_10(U32 addr, U16 nb_sector) +{ + if (addr + nb_sector > AT45DBX_MEM_CNT << (AT45DBX_MEM_SIZE - AT45DBX_SECTOR_BITS)) return CTRL_FAIL; + + at45dbx_read_open(addr); + at45dbx_read_multiple_sector(nb_sector); + at45dbx_read_close(); + + return CTRL_GOOD; +} + + +void at45dbx_read_multiple_sector_callback(const void *psector) +{ + U16 data_to_transfer = AT45DBX_SECTOR_SIZE; + + // Transfer read sector to the USB interface. + while (data_to_transfer) + { + while (!Is_usb_in_ready(g_scsi_ep_ms_in)) + { + if(!Is_usb_endpoint_enabled(g_scsi_ep_ms_in)) + return; // USB Reset + } + + Usb_reset_endpoint_fifo_access(g_scsi_ep_ms_in); + data_to_transfer = usb_write_ep_txpacket(g_scsi_ep_ms_in, psector, + data_to_transfer, &psector); + Usb_ack_in_ready_send(g_scsi_ep_ms_in); + } +} + + +Ctrl_status at45dbx_usb_write_10(U32 addr, U16 nb_sector) +{ + if (addr + nb_sector > AT45DBX_MEM_CNT << (AT45DBX_MEM_SIZE - AT45DBX_SECTOR_BITS)) return CTRL_FAIL; + +#if AT45DBX_MEM_TEST_CHANGE_STATE == ENABLED + if (nb_sector) s_b_data_modify = TRUE; +#endif + + at45dbx_write_open(addr); + at45dbx_write_multiple_sector(nb_sector); + at45dbx_write_close(); + + return CTRL_GOOD; +} + + +void at45dbx_write_multiple_sector_callback(void *psector) +{ + U16 data_to_transfer = AT45DBX_SECTOR_SIZE; + + // Transfer sector to write from the USB interface. + while (data_to_transfer) + { + while (!Is_usb_out_received(g_scsi_ep_ms_out)) + { + if(!Is_usb_endpoint_enabled(g_scsi_ep_ms_out)) + return; // USB Reset + } + + Usb_reset_endpoint_fifo_access(g_scsi_ep_ms_out); + data_to_transfer = usb_read_ep_rxpacket(g_scsi_ep_ms_out, psector, + data_to_transfer, &psector); + Usb_ack_out_received_free(g_scsi_ep_ms_out); + } +} + + +//! @} + +#endif // ACCESS_USB == ENABLED + + +#if ACCESS_MEM_TO_RAM == ENABLED + +/*! \name MEM <-> RAM Interface + */ +//! @{ + + +Ctrl_status at45dbx_df_2_ram(U32 addr, void *ram) +{ + if (addr + 1 > AT45DBX_MEM_CNT << (AT45DBX_MEM_SIZE - AT45DBX_SECTOR_BITS)) return CTRL_FAIL; + + at45dbx_read_open(addr); + at45dbx_read_sector_2_ram(ram); + at45dbx_read_close(); + + return CTRL_GOOD; +} + + +Ctrl_status at45dbx_ram_2_df(U32 addr, const void *ram) +{ + if (addr + 1 > AT45DBX_MEM_CNT << (AT45DBX_MEM_SIZE - AT45DBX_SECTOR_BITS)) return CTRL_FAIL; + +#if AT45DBX_MEM_TEST_CHANGE_STATE == ENABLED + s_b_data_modify = TRUE; +#endif + + at45dbx_write_open(addr); + at45dbx_write_sector_from_ram(ram); + at45dbx_write_close(); + + return CTRL_GOOD; +} + + +//! @} + +#endif // ACCESS_MEM_TO_RAM == ENABLED + + +#endif // AT45DBX_MEM == ENABLE diff --git a/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx_mem.h b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx_mem.h new file mode 100644 index 000000000..de24fa371 --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx_mem.h @@ -0,0 +1,164 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief CTRL_ACCESS interface for the AT45DBX data flash controller. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with an SPI module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _AT45DBX_MEM_H_ +#define _AT45DBX_MEM_H_ + + +#include "conf_access.h" + +#if AT45DBX_MEM == DISABLE + #error at45dbx_mem.h is #included although AT45DBX_MEM is disabled +#endif + + +#include "ctrl_access.h" + + +//_____ D E C L A R A T I O N S ____________________________________________ + +/*! \name Control Interface + */ +//! @{ + +/*! \brief Tests the memory state and initializes the memory if required. + * + * The TEST UNIT READY SCSI primary command allows an application client to poll + * a LUN until it is ready without having to allocate memory for returned data. + * + * This command may be used to check the media status of LUNs with removable + * media. + * + * \return Status. + */ +extern Ctrl_status at45dbx_test_unit_ready(void); + +/*! \brief Returns the address of the last valid sector in the memory. + * + * \param u32_nb_sector Pointer to the address of the last valid sector. + * + * \return Status. + */ +extern Ctrl_status at45dbx_read_capacity(U32 *u32_nb_sector); + +/*! \brief Returns the write-protection state of the memory. + * + * \return \c TRUE if the memory is write-protected, else \c FALSE. + * + * \note Only used by removable memories with hardware-specific write + * protection. + */ +extern Bool at45dbx_wr_protect(void); + +/*! \brief Tells whether the memory is removable. + * + * \return \c TRUE if the memory is removable, else \c FALSE. + */ +extern Bool at45dbx_removal(void); + +//! @} + + +#if ACCESS_USB == ENABLED + +/*! \name MEM <-> USB Interface + */ +//! @{ + +/*! \brief Tranfers data from the memory to USB. + * + * \param addr Address of first memory sector to read. + * \param nb_sector Number of sectors to transfer. + * + * \return Status. + */ +extern Ctrl_status at45dbx_usb_read_10(U32 addr, U16 nb_sector); + +/*! \brief Tranfers data from USB to the memory. + * + * \param addr Address of first memory sector to write. + * \param nb_sector Number of sectors to transfer. + * + * \return Status. + */ +extern Ctrl_status at45dbx_usb_write_10(U32 addr, U16 nb_sector); + +//! @} + +#endif + + +#if ACCESS_MEM_TO_RAM == ENABLED + +/*! \name MEM <-> RAM Interface + */ +//! @{ + +/*! \brief Copies 1 data sector from the memory to RAM. + * + * \param addr Address of first memory sector to read. + * \param ram Pointer to RAM buffer to write. + * + * \return Status. + */ +extern Ctrl_status at45dbx_df_2_ram(U32 addr, void *ram); + +/*! \brief Copies 1 data sector from RAM to the memory. + * + * \param addr Address of first memory sector to write. + * \param ram Pointer to RAM buffer to read. + * + * \return Status. + */ +extern Ctrl_status at45dbx_ram_2_df(U32 addr, const void *ram); + +//! @} + +#endif + + +#endif // _AT45DBX_MEM_H_ diff --git a/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC/flashc.c b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC/flashc.c new file mode 100644 index 000000000..2eee15c0a --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC/flashc.c @@ -0,0 +1,1117 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief FLASHC driver for AVR32 UC3. + * + * AVR32 Flash Controller driver module. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with a FLASHC module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#include +#include +#include "compiler.h" +#include "flashc.h" + + +/*! \name FLASHC Writable Bit-Field Registers + */ +//! @{ + +typedef union +{ + unsigned long fcr; + avr32_flashc_fcr_t FCR; +} u_avr32_flashc_fcr_t; + +typedef union +{ + unsigned long fcmd; + avr32_flashc_fcmd_t FCMD; +} u_avr32_flashc_fcmd_t; + +//! @} + + +/*! \name Flash Properties + */ +//! @{ + + +unsigned int flashc_get_flash_size(void) +{ +#if (defined AVR32_FLASHC_300_H_INCLUDED) + static const unsigned int FLASH_SIZE[1 << AVR32_FLASHC_PR_FSZ_SIZE] = + { + 32 << 10, + 64 << 10, + 128 << 10, + 256 << 10, + 384 << 10, + 512 << 10, + 768 << 10, + 1024 << 10 + }; + return FLASH_SIZE[(AVR32_FLASHC.pr & AVR32_FLASHC_PR_FSZ_MASK) >> AVR32_FLASHC_PR_FSZ_OFFSET]; +#else + static const unsigned int FLASH_SIZE[1 << AVR32_FLASHC_FSR_FSZ_SIZE] = + { + 32 << 10, + 64 << 10, + 128 << 10, + 256 << 10, + 384 << 10, + 512 << 10, + 768 << 10, + 1024 << 10 + }; + return FLASH_SIZE[(AVR32_FLASHC.fsr & AVR32_FLASHC_FSR_FSZ_MASK) >> AVR32_FLASHC_FSR_FSZ_OFFSET]; +#endif +} + + +unsigned int flashc_get_page_count(void) +{ + return flashc_get_flash_size() / AVR32_FLASHC_PAGE_SIZE; +} + + +unsigned int flashc_get_page_count_per_region(void) +{ + return flashc_get_page_count() / AVR32_FLASHC_REGIONS; +} + + +unsigned int flashc_get_page_region(int page_number) +{ + return ((page_number >= 0) ? page_number : flashc_get_page_number()) / flashc_get_page_count_per_region(); +} + + +unsigned int flashc_get_region_first_page_number(unsigned int region) +{ + return region * flashc_get_page_count_per_region(); +} + + +//! @} + + +/*! \name FLASHC Control + */ +//! @{ + + +unsigned int flashc_get_wait_state(void) +{ + return (AVR32_FLASHC.fcr & AVR32_FLASHC_FCR_FWS_MASK) >> AVR32_FLASHC_FCR_FWS_OFFSET; +} + + +void flashc_set_wait_state(unsigned int wait_state) +{ + u_avr32_flashc_fcr_t u_avr32_flashc_fcr = {AVR32_FLASHC.fcr}; + u_avr32_flashc_fcr.FCR.fws = wait_state; + AVR32_FLASHC.fcr = u_avr32_flashc_fcr.fcr; +} + + +Bool flashc_is_ready_int_enabled(void) +{ + return ((AVR32_FLASHC.fcr & AVR32_FLASHC_FCR_FRDY_MASK) != 0); +} + + +void flashc_enable_ready_int(Bool enable) +{ + u_avr32_flashc_fcr_t u_avr32_flashc_fcr = {AVR32_FLASHC.fcr}; + u_avr32_flashc_fcr.FCR.frdy = (enable != FALSE); + AVR32_FLASHC.fcr = u_avr32_flashc_fcr.fcr; +} + + +Bool flashc_is_lock_error_int_enabled(void) +{ + return ((AVR32_FLASHC.fcr & AVR32_FLASHC_FCR_LOCKE_MASK) != 0); +} + + +void flashc_enable_lock_error_int(Bool enable) +{ + u_avr32_flashc_fcr_t u_avr32_flashc_fcr = {AVR32_FLASHC.fcr}; + u_avr32_flashc_fcr.FCR.locke = (enable != FALSE); + AVR32_FLASHC.fcr = u_avr32_flashc_fcr.fcr; +} + + +Bool flashc_is_prog_error_int_enabled(void) +{ + return ((AVR32_FLASHC.fcr & AVR32_FLASHC_FCR_PROGE_MASK) != 0); +} + + +void flashc_enable_prog_error_int(Bool enable) +{ + u_avr32_flashc_fcr_t u_avr32_flashc_fcr = {AVR32_FLASHC.fcr}; + u_avr32_flashc_fcr.FCR.proge = (enable != FALSE); + AVR32_FLASHC.fcr = u_avr32_flashc_fcr.fcr; +} + + +//! @} + + +/*! \name FLASHC Status + */ +//! @{ + + +Bool flashc_is_ready(void) +{ + return ((AVR32_FLASHC.fsr & AVR32_FLASHC_FSR_FRDY_MASK) != 0); +} + + +void flashc_default_wait_until_ready(void) +{ + while (!flashc_is_ready()); +} + + +void (*volatile flashc_wait_until_ready)(void) = flashc_default_wait_until_ready; + + +/*! \brief Gets the error status of the FLASHC. + * + * \return The error status of the FLASHC built up from + * \c AVR32_FLASHC_FSR_LOCKE_MASK and \c AVR32_FLASHC_FSR_PROGE_MASK. + * + * \warning This hardware error status is cleared by all functions reading the + * Flash Status Register (FSR). This function is therefore not part of + * the driver's API which instead presents \ref flashc_is_lock_error + * and \ref flashc_is_programming_error. + */ +static unsigned int flashc_get_error_status(void) +{ + return AVR32_FLASHC.fsr & (AVR32_FLASHC_FSR_LOCKE_MASK | + AVR32_FLASHC_FSR_PROGE_MASK); +} + + +//! Sticky error status of the FLASHC. +//! This variable is updated by functions that issue FLASHC commands. It +//! contains the cumulated FLASHC error status of all the FLASHC commands issued +//! by a function. +static unsigned int flashc_error_status = 0; + + +Bool flashc_is_lock_error(void) +{ + return ((flashc_error_status & AVR32_FLASHC_FSR_LOCKE_MASK) != 0); +} + + +Bool flashc_is_programming_error(void) +{ + return ((flashc_error_status & AVR32_FLASHC_FSR_PROGE_MASK) != 0); +} + + +//! @} + + +/*! \name FLASHC Command Control + */ +//! @{ + + +unsigned int flashc_get_command(void) +{ + return (AVR32_FLASHC.fcmd & AVR32_FLASHC_FCMD_CMD_MASK) >> AVR32_FLASHC_FCMD_CMD_OFFSET; +} + + +unsigned int flashc_get_page_number(void) +{ + return (AVR32_FLASHC.fcmd & AVR32_FLASHC_FCMD_PAGEN_MASK) >> AVR32_FLASHC_FCMD_PAGEN_OFFSET; +} + + +void flashc_issue_command(unsigned int command, int page_number) +{ + u_avr32_flashc_fcmd_t u_avr32_flashc_fcmd; + flashc_wait_until_ready(); + u_avr32_flashc_fcmd.fcmd = AVR32_FLASHC.fcmd; + u_avr32_flashc_fcmd.FCMD.cmd = command; + if (page_number >= 0) u_avr32_flashc_fcmd.FCMD.pagen = page_number; + u_avr32_flashc_fcmd.FCMD.key = AVR32_FLASHC_FCMD_KEY_KEY; + AVR32_FLASHC.fcmd = u_avr32_flashc_fcmd.fcmd; + flashc_error_status = flashc_get_error_status(); + flashc_wait_until_ready(); +} + + +//! @} + + +/*! \name FLASHC Global Commands + */ +//! @{ + + +void flashc_no_operation(void) +{ + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_NOP, -1); +} + + +void flashc_erase_all(void) +{ + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_EA, -1); +} + + +//! @} + + +/*! \name FLASHC Protection Mechanisms + */ +//! @{ + + +Bool flashc_is_security_bit_active(void) +{ + return ((AVR32_FLASHC.fsr & AVR32_FLASHC_FSR_SECURITY_MASK) != 0); +} + + +void flashc_activate_security_bit(void) +{ + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_SSB, -1); +} + + +unsigned int flashc_get_bootloader_protected_size(void) +{ + unsigned int bootprot = (1 << AVR32_FLASHC_FGPFRLO_BOOTPROT_SIZE) - 1 - + flashc_read_gp_fuse_bitfield(AVR32_FLASHC_FGPFRLO_BOOTPROT_OFFSET, + AVR32_FLASHC_FGPFRLO_BOOTPROT_SIZE); + return (bootprot) ? AVR32_FLASHC_PAGE_SIZE << bootprot : 0; +} + + +unsigned int flashc_set_bootloader_protected_size(unsigned int bootprot_size) +{ + flashc_set_gp_fuse_bitfield(AVR32_FLASHC_FGPFRLO_BOOTPROT_OFFSET, + AVR32_FLASHC_FGPFRLO_BOOTPROT_SIZE, + (1 << AVR32_FLASHC_FGPFRLO_BOOTPROT_SIZE) - 1 - + ((bootprot_size) ? + 32 - clz((((min(max(bootprot_size, AVR32_FLASHC_PAGE_SIZE << 1), + AVR32_FLASHC_PAGE_SIZE << + ((1 << AVR32_FLASHC_FGPFRLO_BOOTPROT_SIZE) - 1)) + + AVR32_FLASHC_PAGE_SIZE - 1) / + AVR32_FLASHC_PAGE_SIZE) << 1) - 1) - 1 : + 0)); + return flashc_get_bootloader_protected_size(); +} + + +Bool flashc_is_external_privileged_fetch_locked(void) +{ + return (!flashc_read_gp_fuse_bit(AVR32_FLASHC_FGPFRLO_EPFL_OFFSET)); +} + + +void flashc_lock_external_privileged_fetch(Bool lock) +{ + flashc_set_gp_fuse_bit(AVR32_FLASHC_FGPFRLO_EPFL_OFFSET, !lock); +} + + +Bool flashc_is_page_region_locked(int page_number) +{ + return flashc_is_region_locked(flashc_get_page_region(page_number)); +} + + +Bool flashc_is_region_locked(unsigned int region) +{ + return ((AVR32_FLASHC.fsr & AVR32_FLASHC_FSR_LOCK0_MASK << (region & (AVR32_FLASHC_REGIONS - 1))) != 0); +} + + +void flashc_lock_page_region(int page_number, Bool lock) +{ + flashc_issue_command((lock) ? AVR32_FLASHC_FCMD_CMD_LP : AVR32_FLASHC_FCMD_CMD_UP, page_number); +} + + +void flashc_lock_region(unsigned int region, Bool lock) +{ + flashc_lock_page_region(flashc_get_region_first_page_number(region), lock); +} + + +void flashc_lock_all_regions(Bool lock) +{ + unsigned int error_status = 0; + unsigned int region = AVR32_FLASHC_REGIONS; + while (region) + { + flashc_lock_region(--region, lock); + error_status |= flashc_error_status; + } + flashc_error_status = error_status; +} + + +//! @} + + +/*! \name Access to General-Purpose Fuses + */ +//! @{ + + +Bool flashc_read_gp_fuse_bit(unsigned int gp_fuse_bit) +{ + return ((flashc_read_all_gp_fuses() & 1ULL << (gp_fuse_bit & 0x3F)) != 0); +} + + +U64 flashc_read_gp_fuse_bitfield(unsigned int pos, unsigned int width) +{ + return flashc_read_all_gp_fuses() >> (pos & 0x3F) & ((1ULL << min(width, 64)) - 1); +} + + +U8 flashc_read_gp_fuse_byte(unsigned int gp_fuse_byte) +{ + return flashc_read_all_gp_fuses() >> ((gp_fuse_byte & 0x07) << 3); +} + + +U64 flashc_read_all_gp_fuses(void) +{ + return AVR32_FLASHC.fgpfrlo | (U64)AVR32_FLASHC.fgpfrhi << 32; +} + + +Bool flashc_erase_gp_fuse_bit(unsigned int gp_fuse_bit, Bool check) +{ + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_EGPB, gp_fuse_bit & 0x3F); + return (check) ? flashc_read_gp_fuse_bit(gp_fuse_bit) : TRUE; +} + + +Bool flashc_erase_gp_fuse_bitfield(unsigned int pos, unsigned int width, Bool check) +{ + unsigned int error_status = 0; + unsigned int gp_fuse_bit; + pos &= 0x3F; + width = min(width, 64); + for (gp_fuse_bit = pos; gp_fuse_bit < pos + width; gp_fuse_bit++) + { + flashc_erase_gp_fuse_bit(gp_fuse_bit, FALSE); + error_status |= flashc_error_status; + } + flashc_error_status = error_status; + return (check) ? (flashc_read_gp_fuse_bitfield(pos, width) == (1ULL << width) - 1) : TRUE; +} + + +Bool flashc_erase_gp_fuse_byte(unsigned int gp_fuse_byte, Bool check) +{ + unsigned int error_status; + unsigned int current_gp_fuse_byte; + U64 value = flashc_read_all_gp_fuses(); + flashc_erase_all_gp_fuses(FALSE); + error_status = flashc_error_status; + for (current_gp_fuse_byte = 0; current_gp_fuse_byte < 8; current_gp_fuse_byte++, value >>= 8) + { + if (current_gp_fuse_byte != gp_fuse_byte) + { + flashc_write_gp_fuse_byte(current_gp_fuse_byte, value); + error_status |= flashc_error_status; + } + } + flashc_error_status = error_status; + return (check) ? (flashc_read_gp_fuse_byte(gp_fuse_byte) == 0xFF) : TRUE; +} + + +Bool flashc_erase_all_gp_fuses(Bool check) +{ + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_EAGPF, -1); + return (check) ? (flashc_read_all_gp_fuses() == 0xFFFFFFFFFFFFFFFFULL) : TRUE; +} + + +void flashc_write_gp_fuse_bit(unsigned int gp_fuse_bit, Bool value) +{ + if (!value) + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_WGPB, gp_fuse_bit & 0x3F); +} + + +void flashc_write_gp_fuse_bitfield(unsigned int pos, unsigned int width, U64 value) +{ + unsigned int error_status = 0; + unsigned int gp_fuse_bit; + pos &= 0x3F; + width = min(width, 64); + for (gp_fuse_bit = pos; gp_fuse_bit < pos + width; gp_fuse_bit++, value >>= 1) + { + flashc_write_gp_fuse_bit(gp_fuse_bit, value & 0x01); + error_status |= flashc_error_status; + } + flashc_error_status = error_status; +} + + +void flashc_write_gp_fuse_byte(unsigned int gp_fuse_byte, U8 value) +{ + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_PGPFB, (gp_fuse_byte & 0x07) | value << 3); +} + + +void flashc_write_all_gp_fuses(U64 value) +{ + unsigned int error_status = 0; + unsigned int gp_fuse_byte; + for (gp_fuse_byte = 0; gp_fuse_byte < 8; gp_fuse_byte++, value >>= 8) + { + flashc_write_gp_fuse_byte(gp_fuse_byte, value); + error_status |= flashc_error_status; + } + flashc_error_status = error_status; +} + + +void flashc_set_gp_fuse_bit(unsigned int gp_fuse_bit, Bool value) +{ + if (value) + flashc_erase_gp_fuse_bit(gp_fuse_bit, FALSE); + else + flashc_write_gp_fuse_bit(gp_fuse_bit, FALSE); +} + + +void flashc_set_gp_fuse_bitfield(unsigned int pos, unsigned int width, U64 value) +{ + unsigned int error_status = 0; + unsigned int gp_fuse_bit; + pos &= 0x3F; + width = min(width, 64); + for (gp_fuse_bit = pos; gp_fuse_bit < pos + width; gp_fuse_bit++, value >>= 1) + { + flashc_set_gp_fuse_bit(gp_fuse_bit, value & 0x01); + error_status |= flashc_error_status; + } + flashc_error_status = error_status; +} + + +void flashc_set_gp_fuse_byte(unsigned int gp_fuse_byte, U8 value) +{ + unsigned int error_status; + switch (value) + { + case 0xFF: + flashc_erase_gp_fuse_byte(gp_fuse_byte, FALSE); + break; + case 0x00: + flashc_write_gp_fuse_byte(gp_fuse_byte, 0x00); + break; + default: + flashc_erase_gp_fuse_byte(gp_fuse_byte, FALSE); + error_status = flashc_error_status; + flashc_write_gp_fuse_byte(gp_fuse_byte, value); + flashc_error_status |= error_status; + } +} + + +void flashc_set_all_gp_fuses(U64 value) +{ + unsigned int error_status; + switch (value) + { + case 0xFFFFFFFFFFFFFFFFULL: + flashc_erase_all_gp_fuses(FALSE); + break; + case 0x0000000000000000ULL: + flashc_write_all_gp_fuses(0x0000000000000000ULL); + break; + default: + flashc_erase_all_gp_fuses(FALSE); + error_status = flashc_error_status; + flashc_write_all_gp_fuses(value); + flashc_error_status |= error_status; + } +} + + +//! @} + + +/*! \name Access to Flash Pages + */ +//! @{ + + +void flashc_clear_page_buffer(void) +{ + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_CPB, -1); +} + + +Bool flashc_is_page_erased(void) +{ + return ((AVR32_FLASHC.fsr & AVR32_FLASHC_FSR_QPRR_MASK) != 0); +} + + +Bool flashc_quick_page_read(int page_number) +{ + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_QPR, page_number); + return flashc_is_page_erased(); +} + + +Bool flashc_erase_page(int page_number, Bool check) +{ + Bool page_erased = TRUE; + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_EP, page_number); + if (check) + { + unsigned int error_status = flashc_error_status; + page_erased = flashc_quick_page_read(-1); + flashc_error_status |= error_status; + } + return page_erased; +} + + +Bool flashc_erase_all_pages(Bool check) +{ + Bool all_pages_erased = TRUE; + unsigned int error_status = 0; + unsigned int page_number = flashc_get_page_count(); + while (page_number) + { + all_pages_erased &= flashc_erase_page(--page_number, check); + error_status |= flashc_error_status; + } + flashc_error_status = error_status; + return all_pages_erased; +} + + +void flashc_write_page(int page_number) +{ + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_WP, page_number); +} + + +Bool flashc_quick_user_page_read(void) +{ + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_QPRUP, -1); + return flashc_is_page_erased(); +} + + +Bool flashc_erase_user_page(Bool check) +{ + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_EUP, -1); + return (check) ? flashc_quick_user_page_read() : TRUE; +} + + +void flashc_write_user_page(void) +{ + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_WUP, -1); +} + + +volatile void *flashc_memset8(volatile void *dst, U8 src, size_t nbytes, Bool erase) +{ + return flashc_memset16(dst, src | (U16)src << 8, nbytes, erase); +} + + +volatile void *flashc_memset16(volatile void *dst, U16 src, size_t nbytes, Bool erase) +{ + return flashc_memset32(dst, src | (U32)src << 16, nbytes, erase); +} + + +volatile void *flashc_memset32(volatile void *dst, U32 src, size_t nbytes, Bool erase) +{ + return flashc_memset64(dst, src | (U64)src << 32, nbytes, erase); +} + + +volatile void *flashc_memset64(volatile void *dst, U64 src, size_t nbytes, Bool erase) +{ + // Use aggregated pointers to have several alignments available for a same address. + UnionCVPtr flash_array_end; + UnionVPtr dest; + Union64 source = {0}; + StructCVPtr dest_end; + UnionCVPtr flash_page_source_end; + Bool incomplete_flash_page_end; + Union64 flash_dword; + UnionVPtr tmp; + unsigned int error_status = 0; + unsigned int i; + + // Reformat arguments. + flash_array_end.u8ptr = AVR32_FLASH + flashc_get_flash_size(); + dest.u8ptr = dst; + for (i = (Get_align((U32)dest.u8ptr, sizeof(U64)) - 1) & (sizeof(U64) - 1); + src; i = (i - 1) & (sizeof(U64) - 1)) + { + source.u8[i] = src; + src >>= 8; + } + dest_end.u8ptr = dest.u8ptr + nbytes; + + // If destination is outside flash, go to next flash page if any. + if (dest.u8ptr < AVR32_FLASH) + { + dest.u8ptr = AVR32_FLASH; + } + else if (flash_array_end.u8ptr <= dest.u8ptr && dest.u8ptr < AVR32_FLASHC_USER_PAGE) + { + dest.u8ptr = AVR32_FLASHC_USER_PAGE; + } + + // If end of destination is outside flash, move it to the end of the previous flash page if any. + if (dest_end.u8ptr > AVR32_FLASHC_USER_PAGE + AVR32_FLASHC_USER_PAGE_SIZE) + { + dest_end.u8ptr = AVR32_FLASHC_USER_PAGE + AVR32_FLASHC_USER_PAGE_SIZE; + } + else if (AVR32_FLASHC_USER_PAGE >= dest_end.u8ptr && dest_end.u8ptr > flash_array_end.u8ptr) + { + dest_end.u8ptr = flash_array_end.u8ptr; + } + + // Align each end of destination pointer with its natural boundary. + dest_end.u16ptr = (U16 *)Align_down((U32)dest_end.u8ptr, sizeof(U16)); + dest_end.u32ptr = (U32 *)Align_down((U32)dest_end.u16ptr, sizeof(U32)); + dest_end.u64ptr = (U64 *)Align_down((U32)dest_end.u32ptr, sizeof(U64)); + + // While end of destination is not reached... + while (dest.u8ptr < dest_end.u8ptr) + { + // Clear the page buffer in order to prepare data for a flash page write. + flashc_clear_page_buffer(); + error_status |= flashc_error_status; + + // Determine where the source data will end in the current flash page. + flash_page_source_end.u64ptr = + (U64 *)min((U32)dest_end.u64ptr, + Align_down((U32)dest.u8ptr, AVR32_FLASHC_PAGE_SIZE) + AVR32_FLASHC_PAGE_SIZE); + + // Determine if the current destination page has an incomplete end. + incomplete_flash_page_end = (Align_down((U32)dest.u8ptr, AVR32_FLASHC_PAGE_SIZE) >= + Align_down((U32)dest_end.u8ptr, AVR32_FLASHC_PAGE_SIZE)); + + // Use a flash double-word buffer to manage unaligned accesses. + flash_dword.u64 = source.u64; + + // If destination does not point to the beginning of the current flash page... + if (!Test_align((U32)dest.u8ptr, AVR32_FLASHC_PAGE_SIZE)) + { + // Fill the beginning of the page buffer with the current flash page data. + // This is required by the hardware, even if page erase is not requested, + // in order to be able to write successfully to erased parts of flash + // pages that have already been written to. + for (tmp.u8ptr = (U8 *)Align_down((U32)dest.u8ptr, AVR32_FLASHC_PAGE_SIZE); + tmp.u64ptr < (U64 *)Align_down((U32)dest.u8ptr, sizeof(U64)); + tmp.u64ptr++) + *tmp.u64ptr = *tmp.u64ptr; + + // If destination is not 64-bit aligned... + if (!Test_align((U32)dest.u8ptr, sizeof(U64))) + { + // Fill the beginning of the flash double-word buffer with the current + // flash page data. + // This is required by the hardware, even if page erase is not + // requested, in order to be able to write successfully to erased parts + // of flash pages that have already been written to. + for (i = 0; i < Get_align((U32)dest.u8ptr, sizeof(U64)); i++) + flash_dword.u8[i] = *tmp.u8ptr++; + + // Align the destination pointer with its 64-bit boundary. + dest.u64ptr = (U64 *)Align_down((U32)dest.u8ptr, sizeof(U64)); + + // If the current destination double-word is not the last one... + if (dest.u64ptr < dest_end.u64ptr) + { + // Write the flash double-word buffer to the page buffer and reinitialize it. + *dest.u64ptr++ = flash_dword.u64; + flash_dword.u64 = source.u64; + } + } + } + + // Write the source data to the page buffer with 64-bit alignment. + for (i = flash_page_source_end.u64ptr - dest.u64ptr; i; i--) + *dest.u64ptr++ = source.u64; + + // If the current destination page has an incomplete end... + if (incomplete_flash_page_end) + { + // This is required by the hardware, even if page erase is not requested, + // in order to be able to write successfully to erased parts of flash + // pages that have already been written to. + { + tmp.u8ptr = (volatile U8 *)dest_end.u8ptr; + + // If end of destination is not 64-bit aligned... + if (!Test_align((U32)dest_end.u8ptr, sizeof(U64))) + { + // Fill the end of the flash double-word buffer with the current flash page data. + for (i = Get_align((U32)dest_end.u8ptr, sizeof(U64)); i < sizeof(U64); i++) + flash_dword.u8[i] = *tmp.u8ptr++; + + // Write the flash double-word buffer to the page buffer. + *dest.u64ptr++ = flash_dword.u64; + } + + // Fill the end of the page buffer with the current flash page data. + for (; !Test_align((U32)tmp.u64ptr, AVR32_FLASHC_PAGE_SIZE); tmp.u64ptr++) + *tmp.u64ptr = *tmp.u64ptr; + } + } + + // If the current flash page is in the flash array... + if (dest.u8ptr <= AVR32_FLASHC_USER_PAGE) + { + // Erase the current page if requested and write it from the page buffer. + if (erase) + { + flashc_erase_page(-1, FALSE); + error_status |= flashc_error_status; + } + flashc_write_page(-1); + error_status |= flashc_error_status; + + // If the end of the flash array is reached, go to the User page. + if (dest.u8ptr >= flash_array_end.u8ptr) + dest.u8ptr = AVR32_FLASHC_USER_PAGE; + } + // If the current flash page is the User page... + else + { + // Erase the User page if requested and write it from the page buffer. + if (erase) + { + flashc_erase_user_page(FALSE); + error_status |= flashc_error_status; + } + flashc_write_user_page(); + error_status |= flashc_error_status; + } + } + + // Update the FLASHC error status. + flashc_error_status = error_status; + + // Return the initial destination pointer as the standard memset function does. + return dst; +} + + +volatile void *flashc_memcpy(volatile void *dst, const void *src, size_t nbytes, Bool erase) +{ + // Use aggregated pointers to have several alignments available for a same address. + UnionCVPtr flash_array_end; + UnionVPtr dest; + UnionCPtr source; + StructCVPtr dest_end; + UnionCVPtr flash_page_source_end; + Bool incomplete_flash_page_end; + Union64 flash_dword; + Bool flash_dword_pending = FALSE; + UnionVPtr tmp; + unsigned int error_status = 0; + unsigned int i, j; + + // Reformat arguments. + flash_array_end.u8ptr = AVR32_FLASH + flashc_get_flash_size(); + dest.u8ptr = dst; + source.u8ptr = src; + dest_end.u8ptr = dest.u8ptr + nbytes; + + // If destination is outside flash, go to next flash page if any. + if (dest.u8ptr < AVR32_FLASH) + { + source.u8ptr += AVR32_FLASH - dest.u8ptr; + dest.u8ptr = AVR32_FLASH; + } + else if (flash_array_end.u8ptr <= dest.u8ptr && dest.u8ptr < AVR32_FLASHC_USER_PAGE) + { + source.u8ptr += AVR32_FLASHC_USER_PAGE - dest.u8ptr; + dest.u8ptr = AVR32_FLASHC_USER_PAGE; + } + + // If end of destination is outside flash, move it to the end of the previous flash page if any. + if (dest_end.u8ptr > AVR32_FLASHC_USER_PAGE + AVR32_FLASHC_USER_PAGE_SIZE) + { + dest_end.u8ptr = AVR32_FLASHC_USER_PAGE + AVR32_FLASHC_USER_PAGE_SIZE; + } + else if (AVR32_FLASHC_USER_PAGE >= dest_end.u8ptr && dest_end.u8ptr > flash_array_end.u8ptr) + { + dest_end.u8ptr = flash_array_end.u8ptr; + } + + // Align each end of destination pointer with its natural boundary. + dest_end.u16ptr = (U16 *)Align_down((U32)dest_end.u8ptr, sizeof(U16)); + dest_end.u32ptr = (U32 *)Align_down((U32)dest_end.u16ptr, sizeof(U32)); + dest_end.u64ptr = (U64 *)Align_down((U32)dest_end.u32ptr, sizeof(U64)); + + // While end of destination is not reached... + while (dest.u8ptr < dest_end.u8ptr) + { + // Clear the page buffer in order to prepare data for a flash page write. + flashc_clear_page_buffer(); + error_status |= flashc_error_status; + + // Determine where the source data will end in the current flash page. + flash_page_source_end.u64ptr = + (U64 *)min((U32)dest_end.u64ptr, + Align_down((U32)dest.u8ptr, AVR32_FLASHC_PAGE_SIZE) + AVR32_FLASHC_PAGE_SIZE); + + // Determine if the current destination page has an incomplete end. + incomplete_flash_page_end = (Align_down((U32)dest.u8ptr, AVR32_FLASHC_PAGE_SIZE) >= + Align_down((U32)dest_end.u8ptr, AVR32_FLASHC_PAGE_SIZE)); + + // If destination does not point to the beginning of the current flash page... + if (!Test_align((U32)dest.u8ptr, AVR32_FLASHC_PAGE_SIZE)) + { + // Fill the beginning of the page buffer with the current flash page data. + // This is required by the hardware, even if page erase is not requested, + // in order to be able to write successfully to erased parts of flash + // pages that have already been written to. + for (tmp.u8ptr = (U8 *)Align_down((U32)dest.u8ptr, AVR32_FLASHC_PAGE_SIZE); + tmp.u64ptr < (U64 *)Align_down((U32)dest.u8ptr, sizeof(U64)); + tmp.u64ptr++) + *tmp.u64ptr = *tmp.u64ptr; + + // If destination is not 64-bit aligned... + if (!Test_align((U32)dest.u8ptr, sizeof(U64))) + { + // Fill the beginning of the flash double-word buffer with the current + // flash page data. + // This is required by the hardware, even if page erase is not + // requested, in order to be able to write successfully to erased parts + // of flash pages that have already been written to. + for (i = 0; i < Get_align((U32)dest.u8ptr, sizeof(U64)); i++) + flash_dword.u8[i] = *tmp.u8ptr++; + + // Fill the end of the flash double-word buffer with the source data. + for (; i < sizeof(U64); i++) + flash_dword.u8[i] = *source.u8ptr++; + + // Align the destination pointer with its 64-bit boundary. + dest.u64ptr = (U64 *)Align_down((U32)dest.u8ptr, sizeof(U64)); + + // If the current destination double-word is not the last one... + if (dest.u64ptr < dest_end.u64ptr) + { + // Write the flash double-word buffer to the page buffer. + *dest.u64ptr++ = flash_dword.u64; + } + // If the current destination double-word is the last one, the flash + // double-word buffer must be kept for later. + else flash_dword_pending = TRUE; + } + } + + // Read the source data with the maximal possible alignment and write it to + // the page buffer with 64-bit alignment. + switch (Get_align((U32)source.u8ptr, sizeof(U32))) + { + case 0: + for (i = flash_page_source_end.u64ptr - dest.u64ptr; i; i--) + *dest.u64ptr++ = *source.u64ptr++; + break; + + case sizeof(U16): + for (i = flash_page_source_end.u64ptr - dest.u64ptr; i; i--) + { + for (j = 0; j < sizeof(U64) / sizeof(U16); j++) flash_dword.u16[j] = *source.u16ptr++; + *dest.u64ptr++ = flash_dword.u64; + } + break; + + default: + for (i = flash_page_source_end.u64ptr - dest.u64ptr; i; i--) + { + for (j = 0; j < sizeof(U64); j++) flash_dword.u8[j] = *source.u8ptr++; + *dest.u64ptr++ = flash_dword.u64; + } + } + + // If the current destination page has an incomplete end... + if (incomplete_flash_page_end) + { + // If the flash double-word buffer is in use, do not initialize it. + if (flash_dword_pending) i = Get_align((U32)dest_end.u8ptr, sizeof(U64)); + // If the flash double-word buffer is free... + else + { + // Fill the beginning of the flash double-word buffer with the source data. + for (i = 0; i < Get_align((U32)dest_end.u8ptr, sizeof(U64)); i++) + flash_dword.u8[i] = *source.u8ptr++; + } + + // This is required by the hardware, even if page erase is not requested, + // in order to be able to write successfully to erased parts of flash + // pages that have already been written to. + { + tmp.u8ptr = (volatile U8 *)dest_end.u8ptr; + + // If end of destination is not 64-bit aligned... + if (!Test_align((U32)dest_end.u8ptr, sizeof(U64))) + { + // Fill the end of the flash double-word buffer with the current flash page data. + for (; i < sizeof(U64); i++) + flash_dword.u8[i] = *tmp.u8ptr++; + + // Write the flash double-word buffer to the page buffer. + *dest.u64ptr++ = flash_dword.u64; + } + + // Fill the end of the page buffer with the current flash page data. + for (; !Test_align((U32)tmp.u64ptr, AVR32_FLASHC_PAGE_SIZE); tmp.u64ptr++) + *tmp.u64ptr = *tmp.u64ptr; + } + } + + // If the current flash page is in the flash array... + if (dest.u8ptr <= AVR32_FLASHC_USER_PAGE) + { + // Erase the current page if requested and write it from the page buffer. + if (erase) + { + flashc_erase_page(-1, FALSE); + error_status |= flashc_error_status; + } + flashc_write_page(-1); + error_status |= flashc_error_status; + + // If the end of the flash array is reached, go to the User page. + if (dest.u8ptr >= flash_array_end.u8ptr) + { + source.u8ptr += AVR32_FLASHC_USER_PAGE - dest.u8ptr; + dest.u8ptr = AVR32_FLASHC_USER_PAGE; + } + } + // If the current flash page is the User page... + else + { + // Erase the User page if requested and write it from the page buffer. + if (erase) + { + flashc_erase_user_page(FALSE); + error_status |= flashc_error_status; + } + flashc_write_user_page(); + error_status |= flashc_error_status; + } + } + + // Update the FLASHC error status. + flashc_error_status = error_status; + + // Return the initial destination pointer as the standard memcpy function does. + return dst; +} + + +#if UC3C +void flashc_set_flash_waitstate_and_readmode(unsigned long cpu_f_hz) +{ + //! Device-specific data + #undef AVR32_FLASHC_FWS_0_MAX_FREQ + #undef AVR32_FLASHC_FWS_1_MAX_FREQ + #undef AVR32_FLASHC_HSEN_FWS_0_MAX_FREQ + #undef AVR32_FLASHC_HSEN_FWS_1_MAX_FREQ + #define AVR32_FLASHC_FWS_0_MAX_FREQ 33000000 + #define AVR32_FLASHC_FWS_1_MAX_FREQ 66000000 + #define AVR32_FLASHC_HSEN_FWS_0_MAX_FREQ 33000000 + #define AVR32_FLASHC_HSEN_FWS_1_MAX_FREQ 72000000 + // These defines are missing from or wrong in the toolchain header files uc3cxxx.h + // Put a Bugzilla + + if(cpu_f_hz > AVR32_FLASHC_HSEN_FWS_0_MAX_FREQ) // > 33MHz + { + // Set a wait-state + flashc_set_wait_state(1); + if(cpu_f_hz <= AVR32_FLASHC_FWS_1_MAX_FREQ) // <= 66MHz and >33Mhz + { + // Disable the high-speed read mode. + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_HSDIS, -1); + } + else // > 66Mhz + { + // Enable the high-speed read mode. + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_HSEN, -1); + } + } + else // <= 33 MHz + { + // Disable wait-state + flashc_set_wait_state(0); + + // Disable the high-speed read mode. + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_HSDIS, -1); + + } +} +#endif // UC3C device-specific implementation + +//! @} diff --git a/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC/flashc.h b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC/flashc.h new file mode 100644 index 000000000..9f2547a6e --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC/flashc.h @@ -0,0 +1,1002 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief FLASHC driver for AVR32 UC3. + * + * AVR32 Flash Controller driver module. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with a FLASHC module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _FLASHC_H_ +#define _FLASHC_H_ + +#include +#include +#include "compiler.h" + +//! Number of flash regions defined by the FLASHC. +#define AVR32_FLASHC_REGIONS (AVR32_FLASHC_FLASH_SIZE /\ + (AVR32_FLASHC_PAGES_PR_REGION * AVR32_FLASHC_PAGE_SIZE)) + + +/*! \name Flash Properties + */ +//! @{ + +/*! \brief Gets the size of the whole flash array. + * + * \return The size of the whole flash array in bytes. + */ +extern unsigned int flashc_get_flash_size(void); + +/*! \brief Gets the total number of pages in the flash array. + * + * \return The total number of pages in the flash array. + */ +extern unsigned int flashc_get_page_count(void); + +/*! \brief Gets the number of pages in each flash region. + * + * \return The number of pages in each flash region. + */ +extern unsigned int flashc_get_page_count_per_region(void); + +/*! \brief Gets the region number of a page. + * + * \param page_number The page number: + * \arg \c 0 to (flashc_get_page_count() - 1): a page number within + * the flash array; + * \arg < 0: the current page number. + * + * \return The region number of the specified page. + */ +extern unsigned int flashc_get_page_region(int page_number); + +/*! \brief Gets the number of the first page of a region. + * + * \param region The region number: \c 0 to (AVR32_FLASHC_REGIONS - 1). + * + * \return The number of the first page of the specified region. + */ +extern unsigned int flashc_get_region_first_page_number(unsigned int region); + +//! @} + + +/*! \name FLASHC Control + */ +//! @{ + +/*! \brief Gets the number of wait states of flash read accesses. + * + * \return The number of wait states of flash read accesses. + */ +extern unsigned int flashc_get_wait_state(void); + +/*! \brief Sets the number of wait states of flash read accesses. + * + * \param wait_state The number of wait states of flash read accesses: \c 0 to + * \c 1. + */ +extern void flashc_set_wait_state(unsigned int wait_state); + +/*! \brief Tells whether the Flash Ready interrupt is enabled. + * + * \return Whether the Flash Ready interrupt is enabled. + */ +extern Bool flashc_is_ready_int_enabled(void); + +/*! \brief Enables or disables the Flash Ready interrupt. + * + * \param enable Whether to enable the Flash Ready interrupt: \c TRUE or + * \c FALSE. + */ +extern void flashc_enable_ready_int(Bool enable); + +/*! \brief Tells whether the Lock Error interrupt is enabled. + * + * \return Whether the Lock Error interrupt is enabled. + */ +extern Bool flashc_is_lock_error_int_enabled(void); + +/*! \brief Enables or disables the Lock Error interrupt. + * + * \param enable Whether to enable the Lock Error interrupt: \c TRUE or + * \c FALSE. + */ +extern void flashc_enable_lock_error_int(Bool enable); + +/*! \brief Tells whether the Programming Error interrupt is enabled. + * + * \return Whether the Programming Error interrupt is enabled. + */ +extern Bool flashc_is_prog_error_int_enabled(void); + +/*! \brief Enables or disables the Programming Error interrupt. + * + * \param enable Whether to enable the Programming Error interrupt: \c TRUE or + * \c FALSE. + */ +extern void flashc_enable_prog_error_int(Bool enable); + +//! @} + + +/*! \name FLASHC Status + */ +//! @{ + +/*! \brief Tells whether the FLASHC is ready to run a new command. + * + * \return Whether the FLASHC is ready to run a new command. + */ +extern Bool flashc_is_ready(void); + +/*! \brief Waits actively until the FLASHC is ready to run a new command. + * + * This is the default function assigned to \ref flashc_wait_until_ready. + */ +extern void flashc_default_wait_until_ready(void); + +//! Pointer to the function used by the driver when it needs to wait until the +//! FLASHC is ready to run a new command. +//! The default function is \ref flashc_default_wait_until_ready. +//! The user may change this pointer to use another implementation. +extern void (*volatile flashc_wait_until_ready)(void); + +/*! \brief Tells whether a Lock Error has occurred during the last function + * called that issued one or more FLASHC commands. + * + * \return Whether a Lock Error has occurred during the last function called + * that issued one or more FLASHC commands. + */ +extern Bool flashc_is_lock_error(void); + +/*! \brief Tells whether a Programming Error has occurred during the last + * function called that issued one or more FLASHC commands. + * + * \return Whether a Programming Error has occurred during the last function + * called that issued one or more FLASHC commands. + */ +extern Bool flashc_is_programming_error(void); + +//! @} + + +/*! \name FLASHC Command Control + */ +//! @{ + +/*! \brief Gets the last issued FLASHC command. + * + * \return The last issued FLASHC command. + */ +extern unsigned int flashc_get_command(void); + +/*! \brief Gets the current FLASHC page number. + * + * \return The current FLASHC page number. + */ +extern unsigned int flashc_get_page_number(void); + +/*! \brief Issues a FLASHC command. + * + * \param command The command: \c AVR32_FLASHC_FCMD_CMD_x. + * \param page_number The page number to apply the command to: + * \arg \c 0 to (flashc_get_page_count() - 1): a page number within + * the flash array; + * \arg < 0: use this to apply the command to the current page number + * or if the command does not apply to any page number; + * \arg this argument may have other meanings according to the command. See + * the FLASHC chapter of the MCU datasheet. + * + * \warning A Lock Error is issued if the command violates the protection + * mechanism. + * + * \warning A Programming Error is issued if the command is invalid. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern void flashc_issue_command(unsigned int command, int page_number); + +//! @} + + +/*! \name FLASHC Global Commands + */ +//! @{ + +/*! \brief Issues a No Operation command to the FLASHC. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern void flashc_no_operation(void); + +/*! \brief Issues an Erase All command to the FLASHC. + * + * This command erases all bits in the flash array, the general-purpose fuse + * bits and the Security bit. The User page is not erased. + * + * This command also ensures that all volatile memories, such as register file + * and RAMs, are erased before the Security bit is erased, i.e. deactivated. + * + * \warning A Lock Error is issued if at least one region is locked or the + * bootloader protection is active. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note An erase operation can only set bits. + */ +extern void flashc_erase_all(void); + +//! @} + + +/*! \name FLASHC Protection Mechanisms + */ +//! @{ + +/*! \brief Tells whether the Security bit is active. + * + * \return Whether the Security bit is active. + */ +extern Bool flashc_is_security_bit_active(void); + +/*! \brief Activates the Security bit. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern void flashc_activate_security_bit(void); + +/*! \brief Gets the bootloader protected size. + * + * \return The bootloader protected size in bytes. + */ +extern unsigned int flashc_get_bootloader_protected_size(void); + +/*! \brief Sets the bootloader protected size. + * + * \param bootprot_size The wanted bootloader protected size in bytes. If this + * size is not supported, the actual size will be the + * nearest greater available size or the maximal possible + * size if the requested size is too large. + * + * \return The actual bootloader protected size in bytes. + * + * \warning A Lock Error is issued if the Security bit is active. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern unsigned int flashc_set_bootloader_protected_size(unsigned int bootprot_size); + +/*! \brief Tells whether external privileged fetch is locked. + * + * \return Whether external privileged fetch is locked. + */ +extern Bool flashc_is_external_privileged_fetch_locked(void); + +/*! \brief Locks or unlocks external privileged fetch. + * + * \param lock Whether to lock external privileged fetch: \c TRUE or \c FALSE. + * + * \warning A Lock Error is issued if the Security bit is active. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern void flashc_lock_external_privileged_fetch(Bool lock); + +/*! \brief Tells whether the region of a page is locked. + * + * \param page_number The page number: + * \arg \c 0 to (flashc_get_page_count() - 1): a page number within + * the flash array; + * \arg < 0: the current page number. + * + * \return Whether the region of the specified page is locked. + */ +extern Bool flashc_is_page_region_locked(int page_number); + +/*! \brief Tells whether a region is locked. + * + * \param region The region number: \c 0 to (AVR32_FLASHC_REGIONS - 1). + * + * \return Whether the specified region is locked. + */ +extern Bool flashc_is_region_locked(unsigned int region); + +/*! \brief Locks or unlocks the region of a page. + * + * \param page_number The page number: + * \arg \c 0 to (flashc_get_page_count() - 1): a page number within + * the flash array; + * \arg < 0: the current page number. + * \param lock Whether to lock the region of the specified page: \c TRUE or + * \c FALSE. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern void flashc_lock_page_region(int page_number, Bool lock); + +/*! \brief Locks or unlocks a region. + * + * \param region The region number: \c 0 to (AVR32_FLASHC_REGIONS - 1). + * \param lock Whether to lock the specified region: \c TRUE or \c FALSE. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern void flashc_lock_region(unsigned int region, Bool lock); + +/*! \brief Locks or unlocks all regions. + * + * \param lock Whether to lock the regions: \c TRUE or \c FALSE. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern void flashc_lock_all_regions(Bool lock); + +//! @} + + +/*! \name Access to General-Purpose Fuses + */ +//! @{ + +/*! \brief Reads a general-purpose fuse bit. + * + * \param gp_fuse_bit The general-purpose fuse bit: \c 0 to \c 63. + * + * \return The value of the specified general-purpose fuse bit. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern Bool flashc_read_gp_fuse_bit(unsigned int gp_fuse_bit); + +/*! \brief Reads a general-purpose fuse bit-field. + * + * \param pos The bit-position of the general-purpose fuse bit-field: \c 0 to + * \c 63. + * \param width The bit-width of the general-purpose fuse bit-field: \c 0 to + * \c 64. + * + * \return The value of the specified general-purpose fuse bit-field. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern U64 flashc_read_gp_fuse_bitfield(unsigned int pos, unsigned int width); + +/*! \brief Reads a general-purpose fuse byte. + * + * \param gp_fuse_byte The general-purpose fuse byte: \c 0 to \c 7. + * + * \return The value of the specified general-purpose fuse byte. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern U8 flashc_read_gp_fuse_byte(unsigned int gp_fuse_byte); + +/*! \brief Reads all general-purpose fuses. + * + * \return The value of all general-purpose fuses as a word. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern U64 flashc_read_all_gp_fuses(void); + +/*! \brief Erases a general-purpose fuse bit. + * + * \param gp_fuse_bit The general-purpose fuse bit: \c 0 to \c 63. + * \param check Whether to check erase: \c TRUE or \c FALSE. + * + * \return Whether the erase succeeded or always \c TRUE if erase check was not + * requested. + * + * \warning A Lock Error is issued if the Security bit is active and the command + * is applied to BOOTPROT or EPFL fuses. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note An erase operation can only set bits. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern Bool flashc_erase_gp_fuse_bit(unsigned int gp_fuse_bit, Bool check); + +/*! \brief Erases a general-purpose fuse bit-field. + * + * \param pos The bit-position of the general-purpose fuse bit-field: \c 0 to + * \c 63. + * \param width The bit-width of the general-purpose fuse bit-field: \c 0 to + * \c 64. + * \param check Whether to check erase: \c TRUE or \c FALSE. + * + * \return Whether the erase succeeded or always \c TRUE if erase check was not + * requested. + * + * \warning A Lock Error is issued if the Security bit is active and the command + * is applied to BOOTPROT or EPFL fuses. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note An erase operation can only set bits. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern Bool flashc_erase_gp_fuse_bitfield(unsigned int pos, unsigned int width, Bool check); + +/*! \brief Erases a general-purpose fuse byte. + * + * \param gp_fuse_byte The general-purpose fuse byte: \c 0 to \c 7. + * \param check Whether to check erase: \c TRUE or \c FALSE. + * + * \return Whether the erase succeeded or always \c TRUE if erase check was not + * requested. + * + * \warning A Lock Error is issued if the Security bit is active. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note An erase operation can only set bits. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern Bool flashc_erase_gp_fuse_byte(unsigned int gp_fuse_byte, Bool check); + +/*! \brief Erases all general-purpose fuses. + * + * \param check Whether to check erase: \c TRUE or \c FALSE. + * + * \return Whether the erase succeeded or always \c TRUE if erase check was not + * requested. + * + * \warning A Lock Error is issued if the Security bit is active. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note An erase operation can only set bits. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern Bool flashc_erase_all_gp_fuses(Bool check); + +/*! \brief Writes a general-purpose fuse bit. + * + * \param gp_fuse_bit The general-purpose fuse bit: \c 0 to \c 63. + * \param value The value of the specified general-purpose fuse bit. + * + * \warning A Lock Error is issued if the Security bit is active and the command + * is applied to BOOTPROT or EPFL fuses. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note A write operation can only clear bits. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern void flashc_write_gp_fuse_bit(unsigned int gp_fuse_bit, Bool value); + +/*! \brief Writes a general-purpose fuse bit-field. + * + * \param pos The bit-position of the general-purpose fuse bit-field: \c 0 to + * \c 63. + * \param width The bit-width of the general-purpose fuse bit-field: \c 0 to + * \c 64. + * \param value The value of the specified general-purpose fuse bit-field. + * + * \warning A Lock Error is issued if the Security bit is active and the command + * is applied to BOOTPROT or EPFL fuses. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note A write operation can only clear bits. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern void flashc_write_gp_fuse_bitfield(unsigned int pos, unsigned int width, U64 value); + +/*! \brief Writes a general-purpose fuse byte. + * + * \param gp_fuse_byte The general-purpose fuse byte: \c 0 to \c 7. + * \param value The value of the specified general-purpose fuse byte. + * + * \warning A Lock Error is issued if the Security bit is active. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note A write operation can only clear bits. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern void flashc_write_gp_fuse_byte(unsigned int gp_fuse_byte, U8 value); + +/*! \brief Writes all general-purpose fuses. + * + * \param value The value of all general-purpose fuses as a word. + * + * \warning A Lock Error is issued if the Security bit is active. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note A write operation can only clear bits. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern void flashc_write_all_gp_fuses(U64 value); + +/*! \brief Sets a general-purpose fuse bit with the appropriate erase and write + * operations. + * + * \param gp_fuse_bit The general-purpose fuse bit: \c 0 to \c 63. + * \param value The value of the specified general-purpose fuse bit. + * + * \warning A Lock Error is issued if the Security bit is active and the command + * is applied to BOOTPROT or EPFL fuses. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern void flashc_set_gp_fuse_bit(unsigned int gp_fuse_bit, Bool value); + +/*! \brief Sets a general-purpose fuse bit-field with the appropriate erase and + * write operations. + * + * \param pos The bit-position of the general-purpose fuse bit-field: \c 0 to + * \c 63. + * \param width The bit-width of the general-purpose fuse bit-field: \c 0 to + * \c 64. + * \param value The value of the specified general-purpose fuse bit-field. + * + * \warning A Lock Error is issued if the Security bit is active and the command + * is applied to BOOTPROT or EPFL fuses. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern void flashc_set_gp_fuse_bitfield(unsigned int pos, unsigned int width, U64 value); + +/*! \brief Sets a general-purpose fuse byte with the appropriate erase and write + * operations. + * + * \param gp_fuse_byte The general-purpose fuse byte: \c 0 to \c 7. + * \param value The value of the specified general-purpose fuse byte. + * + * \warning A Lock Error is issued if the Security bit is active. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern void flashc_set_gp_fuse_byte(unsigned int gp_fuse_byte, U8 value); + +/*! \brief Sets all general-purpose fuses with the appropriate erase and write + * operations. + * + * \param value The value of all general-purpose fuses as a word. + * + * \warning A Lock Error is issued if the Security bit is active. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note The actual number of general-purpose fuse bits implemented by hardware + * is given by \c AVR32_FLASHC_GPF_NUM. The other bits among the 64 are + * fixed at 1 by hardware. + */ +extern void flashc_set_all_gp_fuses(U64 value); + +//! @} + + +/*! \name Access to Flash Pages + */ +//! @{ + +/*! \brief Clears the page buffer. + * + * This command resets all bits in the page buffer to one. Write accesses to the + * page buffer can only change page buffer bits from one to zero. + * + * \warning The page buffer is not automatically reset after a page write. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern void flashc_clear_page_buffer(void); + +/*! \brief Tells whether the page to which the last Quick Page Read or Quick + * Page Read User Page command was applied was erased. + * + * \return Whether the page to which the last Quick Page Read or Quick Page Read + * User Page command was applied was erased. + */ +extern Bool flashc_is_page_erased(void); + +/*! \brief Applies the Quick Page Read command to a page. + * + * \param page_number The page number: + * \arg \c 0 to (flashc_get_page_count() - 1): a page number within + * the flash array; + * \arg < 0: the current page number. + * + * \return Whether the specified page is erased. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern Bool flashc_quick_page_read(int page_number); + +/*! \brief Erases a page. + * + * \param page_number The page number: + * \arg \c 0 to (flashc_get_page_count() - 1): a page number within + * the flash array; + * \arg < 0: the current page number. + * \param check Whether to check erase: \c TRUE or \c FALSE. + * + * \return Whether the erase succeeded or always \c TRUE if erase check was not + * requested. + * + * \warning A Lock Error is issued if the command is applied to a page belonging + * to a locked region or to the bootloader protected area. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note An erase operation can only set bits. + */ +extern Bool flashc_erase_page(int page_number, Bool check); + +/*! \brief Erases all pages within the flash array. + * + * \param check Whether to check erase: \c TRUE or \c FALSE. + * + * \return Whether the erase succeeded or always \c TRUE if erase check was not + * requested. + * + * \warning A Lock Error is issued if at least one region is locked or the + * bootloader protection is active. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note An erase operation can only set bits. + */ +extern Bool flashc_erase_all_pages(Bool check); + +/*! \brief Writes a page from the page buffer. + * + * \param page_number The page number: + * \arg \c 0 to (flashc_get_page_count() - 1): a page number within + * the flash array; + * \arg < 0: the current page number. + * + * \warning A Lock Error is issued if the command is applied to a page belonging + * to a locked region or to the bootloader protected area. + * + * \warning The page buffer is not automatically reset after a page write. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note A write operation can only clear bits. + */ +extern void flashc_write_page(int page_number); + +/*! \brief Issues a Quick Page Read User Page command to the FLASHC. + * + * \return Whether the User page is erased. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern Bool flashc_quick_user_page_read(void); + +/*! \brief Erases the User page. + * + * \param check Whether to check erase: \c TRUE or \c FALSE. + * + * \return Whether the erase succeeded or always \c TRUE if erase check was not + * requested. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note An erase operation can only set bits. + */ +extern Bool flashc_erase_user_page(Bool check); + +/*! \brief Writes the User page from the page buffer. + * + * \warning The page buffer is not automatically reset after a page write. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + * + * \note A write operation can only clear bits. + */ +extern void flashc_write_user_page(void); + +/*! \brief Copies \a nbytes bytes to the flash destination pointed to by \a dst + * from the repeated \a src source byte. + * + * The destination areas that are not within the flash array or the User page + * are ignored. + * + * All pointer and size alignments are supported. + * + * \param dst Pointer to flash destination. + * \param src Source byte. + * \param nbytes Number of bytes to set. + * \param erase Whether to erase before writing: \c TRUE or \c FALSE. + * + * \return The value of \a dst. + * + * \warning This function may be called with \a erase set to \c FALSE only if + * the destination consists only of erased words, i.e. this function + * can not be used to write only one bit of a previously written word. + * E.g., if \c 0x00000001 then \c 0xFFFFFFFE are written to a word, the + * resulting value in flash may be different from \c 0x00000000. + * + * \warning A Lock Error is issued if the command is applied to pages belonging + * to a locked region or to the bootloader protected area. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern volatile void *flashc_memset8(volatile void *dst, U8 src, size_t nbytes, Bool erase); + +/*! \brief Copies \a nbytes bytes to the flash destination pointed to by \a dst + * from the repeated \a src big-endian source half-word. + * + * The destination areas that are not within the flash array or the User page + * are ignored. + * + * All pointer and size alignments are supported. + * + * \param dst Pointer to flash destination. + * \param src Source half-word. + * \param nbytes Number of bytes to set. + * \param erase Whether to erase before writing: \c TRUE or \c FALSE. + * + * \return The value of \a dst. + * + * \warning This function may be called with \a erase set to \c FALSE only if + * the destination consists only of erased words, i.e. this function + * can not be used to write only one bit of a previously written word. + * E.g., if \c 0x00000001 then \c 0xFFFFFFFE are written to a word, the + * resulting value in flash may be different from \c 0x00000000. + * + * \warning A Lock Error is issued if the command is applied to pages belonging + * to a locked region or to the bootloader protected area. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern volatile void *flashc_memset16(volatile void *dst, U16 src, size_t nbytes, Bool erase); + +/*! \brief Copies \a nbytes bytes to the flash destination pointed to by \a dst + * from the repeated \a src big-endian source word. + * + * The destination areas that are not within the flash array or the User page + * are ignored. + * + * All pointer and size alignments are supported. + * + * \param dst Pointer to flash destination. + * \param src Source word. + * \param nbytes Number of bytes to set. + * \param erase Whether to erase before writing: \c TRUE or \c FALSE. + * + * \return The value of \a dst. + * + * \warning This function may be called with \a erase set to \c FALSE only if + * the destination consists only of erased words, i.e. this function + * can not be used to write only one bit of a previously written word. + * E.g., if \c 0x00000001 then \c 0xFFFFFFFE are written to a word, the + * resulting value in flash may be different from \c 0x00000000. + * + * \warning A Lock Error is issued if the command is applied to pages belonging + * to a locked region or to the bootloader protected area. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern volatile void *flashc_memset32(volatile void *dst, U32 src, size_t nbytes, Bool erase); + +/*! \brief Copies \a nbytes bytes to the flash destination pointed to by \a dst + * from the repeated \a src big-endian source double-word. + * + * The destination areas that are not within the flash array or the User page + * are ignored. + * + * All pointer and size alignments are supported. + * + * \param dst Pointer to flash destination. + * \param src Source double-word. + * \param nbytes Number of bytes to set. + * \param erase Whether to erase before writing: \c TRUE or \c FALSE. + * + * \return The value of \a dst. + * + * \warning This function may be called with \a erase set to \c FALSE only if + * the destination consists only of erased words, i.e. this function + * can not be used to write only one bit of a previously written word. + * E.g., if \c 0x00000001 then \c 0xFFFFFFFE are written to a word, the + * resulting value in flash may be different from \c 0x00000000. + * + * \warning A Lock Error is issued if the command is applied to pages belonging + * to a locked region or to the bootloader protected area. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern volatile void *flashc_memset64(volatile void *dst, U64 src, size_t nbytes, Bool erase); + +/*! \brief Copies \a nbytes bytes to the flash destination pointed to by \a dst + * from the repeated \a src big-endian source pattern. + * + * The destination areas that are not within the flash array or the User page + * are ignored. + * + * All pointer and size alignments are supported. + * + * \param dst Pointer to flash destination. + * \param src Source double-word. + * \param src_width \a src width in bits: 8, 16, 32 or 64. + * \param nbytes Number of bytes to set. + * \param erase Whether to erase before writing: \c TRUE or \c FALSE. + * + * \return The value of \a dst. + * + * \warning This function may be called with \a erase set to \c FALSE only if + * the destination consists only of erased words, i.e. this function + * can not be used to write only one bit of a previously written word. + * E.g., if \c 0x00000001 then \c 0xFFFFFFFE are written to a word, the + * resulting value in flash may be different from \c 0x00000000. + * + * \warning A Lock Error is issued if the command is applied to pages belonging + * to a locked region or to the bootloader protected area. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +#define flashc_memset(dst, src, src_width, nbytes, erase) \ + TPASTE2(flashc_memset, src_width)((dst), (src), (nbytes), (erase)) + +/*! \brief Copies \a nbytes bytes to the flash destination pointed to by \a dst + * from the source pointed to by \a src. + * + * The destination areas that are not within the flash array or the User page + * are ignored. + * + * All pointer and size alignments are supported. + * + * \param dst Pointer to flash destination. + * \param src Pointer to source data. + * \param nbytes Number of bytes to copy. + * \param erase Whether to erase before writing: \c TRUE or \c FALSE. + * + * \return The value of \a dst. + * + * \warning If copying takes place between areas that overlap, the behavior is + * undefined. + * + * \warning This function may be called with \a erase set to \c FALSE only if + * the destination consists only of erased words, i.e. this function + * can not be used to write only one bit of a previously written word. + * E.g., if \c 0x00000001 then \c 0xFFFFFFFE are written to a word, the + * resulting value in flash may be different from \c 0x00000000. + * + * \warning A Lock Error is issued if the command is applied to pages belonging + * to a locked region or to the bootloader protected area. + * + * \note The FLASHC error status returned by \ref flashc_is_lock_error and + * \ref flashc_is_programming_error is updated. + */ +extern volatile void *flashc_memcpy(volatile void *dst, const void *src, size_t nbytes, Bool erase); + +#if UC3C + +/*! \brief Depednding to the CPU frequency, set the wait states of flash read + * accesses and enable or disable the High speed read mode. + * + * \param cpu_f_hz The CPU frequency + */ +void flashc_set_flash_waitstate_and_readmode(unsigned long cpu_f_hz); +#endif // UC3C device-specific implementation + +//! @} + + +#endif // _FLASHC_H_ diff --git a/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO/gpio.c b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO/gpio.c new file mode 100644 index 000000000..b6b83c73f --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO/gpio.c @@ -0,0 +1,458 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file has been prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief GPIO driver for AVR32 UC3. + * + * This file defines a useful set of functions for the GPIO. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with a GPIO module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + *****************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#include "gpio.h" + +//! GPIO module instance. +#define GPIO AVR32_GPIO + + +/*! \name Peripheral Bus Interface + */ +//! @{ + + +int gpio_enable_module(const gpio_map_t gpiomap, unsigned int size) +{ + int status = GPIO_SUCCESS; + unsigned int i; + + for (i = 0; i < size; i++) + { + status |= gpio_enable_module_pin(gpiomap->pin, gpiomap->function); + gpiomap++; + } + + return status; +} + + +int gpio_enable_module_pin(unsigned int pin, unsigned int function) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + + // Enable the correct function. + switch (function) + { + case 0: // A function. + gpio_port->pmr0c = 1 << (pin & 0x1F); + gpio_port->pmr1c = 1 << (pin & 0x1F); +#if defined(AVR32_GPIO_210_H_INCLUDED) || defined(AVR32_GPIO_211_H_INCLUDED) + gpio_port->pmr2c = 1 << (pin & 0x1F); +#endif + break; + + case 1: // B function. + gpio_port->pmr0s = 1 << (pin & 0x1F); + gpio_port->pmr1c = 1 << (pin & 0x1F); +#if defined(AVR32_GPIO_210_H_INCLUDED) || defined(AVR32_GPIO_211_H_INCLUDED) + gpio_port->pmr2c = 1 << (pin & 0x1F); +#endif + break; + + case 2: // C function. + gpio_port->pmr0c = 1 << (pin & 0x1F); + gpio_port->pmr1s = 1 << (pin & 0x1F); +#if defined(AVR32_GPIO_210_H_INCLUDED) || defined(AVR32_GPIO_211_H_INCLUDED) + gpio_port->pmr2c = 1 << (pin & 0x1F); +#endif + break; + + case 3: // D function. + gpio_port->pmr0s = 1 << (pin & 0x1F); + gpio_port->pmr1s = 1 << (pin & 0x1F); +#if defined(AVR32_GPIO_210_H_INCLUDED) || defined(AVR32_GPIO_211_H_INCLUDED) + gpio_port->pmr2c = 1 << (pin & 0x1F); +#endif + break; + +#if defined(AVR32_GPIO_210_H_INCLUDED) || defined(AVR32_GPIO_211_H_INCLUDED) + case 4: // E function. + gpio_port->pmr0c = 1 << (pin & 0x1F); + gpio_port->pmr1c = 1 << (pin & 0x1F); + gpio_port->pmr2s = 1 << (pin & 0x1F); + break; + + case 5: // F function. + gpio_port->pmr0s = 1 << (pin & 0x1F); + gpio_port->pmr1c = 1 << (pin & 0x1F); + gpio_port->pmr2s = 1 << (pin & 0x1F); + break; + + case 6: // G function. + gpio_port->pmr0c = 1 << (pin & 0x1F); + gpio_port->pmr1s = 1 << (pin & 0x1F); + gpio_port->pmr2s = 1 << (pin & 0x1F); + break; + + case 7: // H function. + gpio_port->pmr0s = 1 << (pin & 0x1F); + gpio_port->pmr1s = 1 << (pin & 0x1F); + gpio_port->pmr2s = 1 << (pin & 0x1F); + break; +#endif + + default: + return GPIO_INVALID_ARGUMENT; + } + + // Disable GPIO control. + gpio_port->gperc = 1 << (pin & 0x1F); + + return GPIO_SUCCESS; +} + + +void gpio_enable_gpio(const gpio_map_t gpiomap, unsigned int size) +{ + unsigned int i; + + for (i = 0; i < size; i++) + { + gpio_enable_gpio_pin(gpiomap->pin); + gpiomap++; + } +} + + +void gpio_enable_gpio_pin(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + gpio_port->oderc = 1 << (pin & 0x1F); + gpio_port->gpers = 1 << (pin & 0x1F); +} + + +// The open-drain mode is not synthesized on the current AVR32 products. +// If one day some AVR32 products have this feature, the corresponding part +// numbers should be listed in the #if below. +// Note that other functions are available in this driver to use pins with open +// drain in GPIO mode. The advantage of the open-drain mode functions over these +// other functions is that they can be used not only in GPIO mode but also in +// module mode. +#if 0 + + +void gpio_enable_pin_open_drain(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + gpio_port->odmers = 1 << (pin & 0x1F); +} + + +void gpio_disable_pin_open_drain(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + gpio_port->odmerc = 1 << (pin & 0x1F); +} + + +#endif + + +void gpio_enable_pin_pull_up(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + gpio_port->puers = 1 << (pin & 0x1F); +#if defined(AVR32_GPIO_200_H_INCLUDED) || defined(AVR32_GPIO_210_H_INCLUDED) || defined(AVR32_GPIO_211_H_INCLUDED) + gpio_port->pderc = 1 << (pin & 0x1F); +#endif +} + + +void gpio_disable_pin_pull_up(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + gpio_port->puerc = 1 << (pin & 0x1F); +} + +#if defined(AVR32_GPIO_200_H_INCLUDED) || defined(AVR32_GPIO_210_H_INCLUDED) || defined(AVR32_GPIO_211_H_INCLUDED) +// Added support of Pull-up Resistor, Pull-down Resistor and Buskeeper Control. + +/*! \brief Enables the pull-down resistor of a pin. + * + * \param pin The pin number. + */ +void gpio_enable_pin_pull_down(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + gpio_port->puerc = 1 << (pin & 0x1F); + gpio_port->pders = 1 << (pin & 0x1F); +} + +/*! \brief Disables the pull-down resistor of a pin. + * + * \param pin The pin number. + */ +void gpio_disable_pin_pull_down(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + gpio_port->pderc = 1 << (pin & 0x1F); +} + +/*! \brief Enables the buskeeper functionality on a pin. + * + * \param pin The pin number. + */ +void gpio_enable_pin_buskeeper(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + gpio_port->puers = 1 << (pin & 0x1F); + gpio_port->pders = 1 << (pin & 0x1F); +} + +/*! \brief Disables the buskeeper functionality on a pin. + * + * \param pin The pin number. + */ +void gpio_disable_pin_buskeeper(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + gpio_port->puerc = 1 << (pin & 0x1F); + gpio_port->pderc = 1 << (pin & 0x1F); +} + +#endif + +int gpio_get_pin_value(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + return (gpio_port->pvr >> (pin & 0x1F)) & 1; +} + + +int gpio_get_gpio_pin_output_value(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + return (gpio_port->ovr >> (pin & 0x1F)) & 1; +} + + +int gpio_get_gpio_open_drain_pin_output_value(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + return ((gpio_port->oder >> (pin & 0x1F)) & 1) ^ 1; +} + + +void gpio_set_gpio_pin(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + + gpio_port->ovrs = 1 << (pin & 0x1F); // Value to be driven on the I/O line: 1. + gpio_port->oders = 1 << (pin & 0x1F); // The GPIO output driver is enabled for that pin. + gpio_port->gpers = 1 << (pin & 0x1F); // The GPIO module controls that pin. +} + + +void gpio_clr_gpio_pin(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + + gpio_port->ovrc = 1 << (pin & 0x1F); // Value to be driven on the I/O line: 0. + gpio_port->oders = 1 << (pin & 0x1F); // The GPIO output driver is enabled for that pin. + gpio_port->gpers = 1 << (pin & 0x1F); // The GPIO module controls that pin. +} + + +void gpio_tgl_gpio_pin(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + + gpio_port->ovrt = 1 << (pin & 0x1F); // Toggle the I/O line. + gpio_port->oders = 1 << (pin & 0x1F); // The GPIO output driver is enabled for that pin. + gpio_port->gpers = 1 << (pin & 0x1F); // The GPIO module controls that pin. +} + + +void gpio_set_gpio_open_drain_pin(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + + gpio_port->oderc = 1 << (pin & 0x1F); // The GPIO output driver is disabled for that pin. + gpio_port->gpers = 1 << (pin & 0x1F); // The GPIO module controls that pin. +} + + +void gpio_clr_gpio_open_drain_pin(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + + gpio_port->ovrc = 1 << (pin & 0x1F); // Value to be driven on the I/O line: 0. + gpio_port->oders = 1 << (pin & 0x1F); // The GPIO output driver is enabled for that pin. + gpio_port->gpers = 1 << (pin & 0x1F); // The GPIO module controls that pin. +} + + +void gpio_tgl_gpio_open_drain_pin(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + + gpio_port->ovrc = 1 << (pin & 0x1F); // Value to be driven on the I/O line if the GPIO output driver is enabled: 0. + gpio_port->odert = 1 << (pin & 0x1F); // The GPIO output driver is toggled for that pin. + gpio_port->gpers = 1 << (pin & 0x1F); // The GPIO module controls that pin. +} + + +void gpio_enable_pin_glitch_filter(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + gpio_port->gfers = 1 << (pin & 0x1F); +} + + +void gpio_disable_pin_glitch_filter(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + gpio_port->gferc = 1 << (pin & 0x1F); +} + +/*! \brief Configure the edge detector of an input pin + * + * \param pin The pin number. + * \param mode The edge detection mode (\ref GPIO_PIN_CHANGE, \ref GPIO_RISING_EDGE + * or \ref GPIO_FALLING_EDGE). + * + * \return \ref GPIO_SUCCESS or \ref GPIO_INVALID_ARGUMENT. + */ +static int gpio_configure_edge_detector(unsigned int pin, unsigned int mode) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + + // Configure the edge detector. + switch (mode) + { + case GPIO_PIN_CHANGE: + gpio_port->imr0c = 1 << (pin & 0x1F); + gpio_port->imr1c = 1 << (pin & 0x1F); + break; + + case GPIO_RISING_EDGE: + gpio_port->imr0s = 1 << (pin & 0x1F); + gpio_port->imr1c = 1 << (pin & 0x1F); + break; + + case GPIO_FALLING_EDGE: + gpio_port->imr0c = 1 << (pin & 0x1F); + gpio_port->imr1s = 1 << (pin & 0x1F); + break; + + default: + return GPIO_INVALID_ARGUMENT; + } + + return GPIO_SUCCESS; +} + + +int gpio_enable_pin_interrupt(unsigned int pin, unsigned int mode) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + + // Enable the glitch filter. + gpio_port->gfers = 1 << (pin & 0x1F); + + // Configure the edge detector. + if(GPIO_INVALID_ARGUMENT == gpio_configure_edge_detector(pin, mode)) + return(GPIO_INVALID_ARGUMENT); + + // Enable interrupt. + gpio_port->iers = 1 << (pin & 0x1F); + + return GPIO_SUCCESS; +} + + +void gpio_disable_pin_interrupt(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + gpio_port->ierc = 1 << (pin & 0x1F); +} + + +int gpio_get_pin_interrupt_flag(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + return (gpio_port->ifr >> (pin & 0x1F)) & 1; +} + + +void gpio_clear_pin_interrupt_flag(unsigned int pin) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + gpio_port->ifrc = 1 << (pin & 0x1F); +} + + +//# +//# Peripheral Event System Support. +//# +#if UC3L +int gpio_configure_pin_periph_event_mode(unsigned int pin, unsigned int mode, unsigned int use_igf) +{ + volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5]; + + if(TRUE == use_igf) + { + // Enable the glitch filter. + gpio_port->gfers = 1 << (pin & 0x1F); + } + else + { + // Disable the glitch filter. + gpio_port->gferc = 1 << (pin & 0x1F); + } + + // Configure the edge detector. + return(gpio_configure_edge_detector(pin, mode)); +} + +#endif + +//! @} diff --git a/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO/gpio.h b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO/gpio.h new file mode 100644 index 000000000..f0b5fd884 --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO/gpio.h @@ -0,0 +1,583 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file has been prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief GPIO header for AVR32 UC3. + * + * This file contains basic GPIO driver functions. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with a GPIO module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + *****************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _GPIO_H_ +#define _GPIO_H_ + +#include +#include "compiler.h" + +/*! \name Return Values of the GPIO API + */ +//! @{ +#define GPIO_SUCCESS 0 //!< Function successfully completed. +#define GPIO_INVALID_ARGUMENT 1 //!< Input parameters are out of range. +//! @} + + +/*! \name Interrupt Trigger Modes + */ +//! @{ +#define GPIO_PIN_CHANGE 0 //!< Interrupt triggered upon pin change. +#define GPIO_RISING_EDGE 1 //!< Interrupt triggered upon rising edge. +#define GPIO_FALLING_EDGE 2 //!< Interrupt triggered upon falling edge. +//! @} + + +//! A type definition of pins and modules connectivity. +typedef struct +{ + unsigned char pin; //!< Module pin. + unsigned char function; //!< Module function. +} gpio_map_t[]; + + +/*! \name Peripheral Bus Interface + * + * Low-speed interface with a non-deterministic number of clock cycles per + * access. + * + * This interface operates with lower clock frequencies (fPB <= fCPU), and its + * timing is not deterministic since it needs to access a shared bus which may + * be heavily loaded. + * + * \note This interface is immediately available without initialization. + */ +//! @{ + +/*! \brief Enables specific module modes for a set of pins. + * + * \param gpiomap The pin map. + * \param size The number of pins in \a gpiomap. + * + * \return \ref GPIO_SUCCESS or \ref GPIO_INVALID_ARGUMENT. + */ +extern int gpio_enable_module(const gpio_map_t gpiomap, unsigned int size); + +/*! \brief Enables a specific module mode for a pin. + * + * \param pin The pin number.\n + * Refer to the product header file `uc3x.h' (where x is the part + * number; e.g. x = a0512) for module pins. E.g., to enable a PWM + * channel output, the pin number can be AVR32_PWM_3_PIN for PWM + * channel 3. + * \param function The pin function.\n + * Refer to the product header file `uc3x.h' (where x is the + * part number; e.g. x = a0512) for module pin functions. E.g., + * to enable a PWM channel output, the pin function can be + * AVR32_PWM_3_FUNCTION for PWM channel 3. + * + * \return \ref GPIO_SUCCESS or \ref GPIO_INVALID_ARGUMENT. + */ +extern int gpio_enable_module_pin(unsigned int pin, unsigned int function); + +/*! \brief Enables the GPIO mode of a set of pins. + * + * \param gpiomap The pin map. + * \param size The number of pins in \a gpiomap. + */ +extern void gpio_enable_gpio(const gpio_map_t gpiomap, unsigned int size); + +/*! \brief Enables the GPIO mode of a pin. + * + * \param pin The pin number.\n + * Refer to the product header file `uc3x.h' (where x is the part + * number; e.g. x = a0512) for pin definitions. E.g., to enable the + * GPIO mode of PX21, AVR32_PIN_PX21 can be used. Module pins such as + * AVR32_PWM_3_PIN for PWM channel 3 can also be used to release + * module pins for GPIO. + */ +extern void gpio_enable_gpio_pin(unsigned int pin); + +// The open-drain mode is not synthesized on the current AVR32 products. +// If one day some AVR32 products have this feature, the corresponding part +// numbers should be listed in the #if below. +// Note that other functions are available in this driver to use pins with open +// drain in GPIO mode. The advantage of the open-drain mode functions over these +// other functions is that they can be used not only in GPIO mode but also in +// module mode. +#if 0 + +/*! \brief Enables the open-drain mode of a pin. + * + * \param pin The pin number. + */ +extern void gpio_enable_pin_open_drain(unsigned int pin); + +/*! \brief Disables the open-drain mode of a pin. + * + * \param pin The pin number. + */ +extern void gpio_disable_pin_open_drain(unsigned int pin); + +#endif + +/*! \brief Enables the pull-up resistor of a pin. + * + * \param pin The pin number. + */ +extern void gpio_enable_pin_pull_up(unsigned int pin); + +/*! \brief Disables the pull-up resistor of a pin. + * + * \param pin The pin number. + */ +extern void gpio_disable_pin_pull_up(unsigned int pin); + +#if defined(AVR32_GPIO_200_H_INCLUDED) || defined(AVR32_GPIO_210_H_INCLUDED) || defined(AVR32_GPIO_211_H_INCLUDED) +// Added support of Pull-up Resistor, Pull-down Resistor and Buskeeper Control. + +/*! \brief Enables the pull-down resistor of a pin. + * + * \param pin The pin number. + */ +extern void gpio_enable_pin_pull_down(unsigned int pin); + +/*! \brief Disables the pull-down resistor of a pin. + * + * \param pin The pin number. + */ +extern void gpio_disable_pin_pull_down(unsigned int pin); + +/*! \brief Enables the buskeeper functionality on a pin. + * + * \param pin The pin number. + */ +extern void gpio_enable_pin_buskeeper(unsigned int pin); + +/*! \brief Disables the buskeeper functionality on a pin. + * + * \param pin The pin number. + */ +extern void gpio_disable_pin_buskeeper(unsigned int pin); + +#endif + +/*! \brief Returns the value of a pin. + * + * \param pin The pin number. + * + * \return The pin value. + */ +extern int gpio_get_pin_value(unsigned int pin); + +/*! \brief Returns the output value set for a GPIO pin. + * + * \param pin The pin number. + * + * \return The pin output value. + * + * \note This function must be used in conjunction with \ref gpio_set_gpio_pin, + * \ref gpio_clr_gpio_pin and \ref gpio_tgl_gpio_pin. + */ +extern int gpio_get_gpio_pin_output_value(unsigned int pin); + +/*! \brief Returns the output value set for a GPIO pin using open drain. + * + * \param pin The pin number. + * + * \return The pin output value. + * + * \note This function must be used in conjunction with + * \ref gpio_set_gpio_open_drain_pin, \ref gpio_clr_gpio_open_drain_pin + * and \ref gpio_tgl_gpio_open_drain_pin. + */ +extern int gpio_get_gpio_open_drain_pin_output_value(unsigned int pin); + +/*! \brief Drives a GPIO pin to 1. + * + * \param pin The pin number. + */ +extern void gpio_set_gpio_pin(unsigned int pin); + +/*! \brief Drives a GPIO pin to 0. + * + * \param pin The pin number. + */ +extern void gpio_clr_gpio_pin(unsigned int pin); + +/*! \brief Toggles a GPIO pin. + * + * \param pin The pin number. + */ +extern void gpio_tgl_gpio_pin(unsigned int pin); + +/*! \brief Drives a GPIO pin to 1 using open drain. + * + * \param pin The pin number. + */ +extern void gpio_set_gpio_open_drain_pin(unsigned int pin); + +/*! \brief Drives a GPIO pin to 0 using open drain. + * + * \param pin The pin number. + */ +extern void gpio_clr_gpio_open_drain_pin(unsigned int pin); + +/*! \brief Toggles a GPIO pin using open drain. + * + * \param pin The pin number. + */ +extern void gpio_tgl_gpio_open_drain_pin(unsigned int pin); + +/*! \brief Enables the glitch filter of a pin. + * + * When the glitch filter is enabled, a glitch with duration of less than 1 + * clock cycle is automatically rejected, while a pulse with duration of 2 clock + * cycles or more is accepted. For pulse durations between 1 clock cycle and 2 + * clock cycles, the pulse may or may not be taken into account, depending on + * the precise timing of its occurrence. Thus for a pulse to be guaranteed + * visible it must exceed 2 clock cycles, whereas for a glitch to be reliably + * filtered out, its duration must not exceed 1 clock cycle. The filter + * introduces 2 clock cycles latency. + * + * \param pin The pin number. + */ +extern void gpio_enable_pin_glitch_filter(unsigned int pin); + +/*! \brief Disables the glitch filter of a pin. + * + * \param pin The pin number. + */ +extern void gpio_disable_pin_glitch_filter(unsigned int pin); + +/*! \brief Enables the interrupt of a pin with the specified settings. + * + * \param pin The pin number. + * \param mode The trigger mode (\ref GPIO_PIN_CHANGE, \ref GPIO_RISING_EDGE or + * \ref GPIO_FALLING_EDGE). + * + * \return \ref GPIO_SUCCESS or \ref GPIO_INVALID_ARGUMENT. + */ +extern int gpio_enable_pin_interrupt(unsigned int pin, unsigned int mode); + +/*! \brief Disables the interrupt of a pin. + * + * \param pin The pin number. + */ +extern void gpio_disable_pin_interrupt(unsigned int pin); + +/*! \brief Gets the interrupt flag of a pin. + * + * \param pin The pin number. + * + * \return The pin interrupt flag. + */ +extern int gpio_get_pin_interrupt_flag(unsigned int pin); + +/*! \brief Clears the interrupt flag of a pin. + * + * \param pin The pin number. + */ +extern void gpio_clear_pin_interrupt_flag(unsigned int pin); + +//! @} + + +#if (defined AVR32_GPIO_LOCAL_ADDRESS) +/*! \name Local Bus Interface + * + * High-speed interface with only one clock cycle per access. + * + * This interface operates with high clock frequency (fCPU), and its timing is + * deterministic since it does not need to access a shared bus which may be + * heavily loaded. + * + * \warning To use this interface, the clock frequency of the peripheral bus on + * which the GPIO peripheral is connected must be set to the CPU clock + * frequency (fPB = fCPU). + * + * \note This interface has to be initialized in order to be available. + */ +//! @{ + +/*! \brief Enables the local bus interface for GPIO. + * + * \note This function must have been called at least once before using other + * functions in this interface. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void gpio_local_init(void) +{ + Set_system_register(AVR32_CPUCR, + Get_system_register(AVR32_CPUCR) | AVR32_CPUCR_LOCEN_MASK); +} + +/*! \brief Enables the output driver of a pin. + * + * \param pin The pin number. + * + * \note \ref gpio_local_init must have been called beforehand. + * + * \note This function does not enable the GPIO mode of the pin. + * \ref gpio_enable_gpio_pin can be called for this purpose. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void gpio_local_enable_pin_output_driver(unsigned int pin) +{ + AVR32_GPIO_LOCAL.port[pin >> 5].oders = 1 << (pin & 0x1F); +} + +/*! \brief Disables the output driver of a pin. + * + * \param pin The pin number. + * + * \note \ref gpio_local_init must have been called beforehand. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void gpio_local_disable_pin_output_driver(unsigned int pin) +{ + AVR32_GPIO_LOCAL.port[pin >> 5].oderc = 1 << (pin & 0x1F); +} + +/*! \brief Returns the value of a pin. + * + * \param pin The pin number. + * + * \return The pin value. + * + * \note \ref gpio_local_init must have been called beforehand. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ int gpio_local_get_pin_value(unsigned int pin) +{ + return (AVR32_GPIO_LOCAL.port[pin >> 5].pvr >> (pin & 0x1F)) & 1; +} + +/*! \brief Drives a GPIO pin to 1. + * + * \param pin The pin number. + * + * \note \ref gpio_local_init must have been called beforehand. + * + * \note This function does not enable the GPIO mode of the pin nor its output + * driver. \ref gpio_enable_gpio_pin and + * \ref gpio_local_enable_pin_output_driver can be called for this + * purpose. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void gpio_local_set_gpio_pin(unsigned int pin) +{ + AVR32_GPIO_LOCAL.port[pin >> 5].ovrs = 1 << (pin & 0x1F); +} + +/*! \brief Drives a GPIO pin to 0. + * + * \param pin The pin number. + * + * \note \ref gpio_local_init must have been called beforehand. + * + * \note This function does not enable the GPIO mode of the pin nor its output + * driver. \ref gpio_enable_gpio_pin and + * \ref gpio_local_enable_pin_output_driver can be called for this + * purpose. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void gpio_local_clr_gpio_pin(unsigned int pin) +{ + AVR32_GPIO_LOCAL.port[pin >> 5].ovrc = 1 << (pin & 0x1F); +} + +/*! \brief Toggles a GPIO pin. + * + * \param pin The pin number. + * + * \note \ref gpio_local_init must have been called beforehand. + * + * \note This function does not enable the GPIO mode of the pin nor its output + * driver. \ref gpio_enable_gpio_pin and + * \ref gpio_local_enable_pin_output_driver can be called for this + * purpose. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void gpio_local_tgl_gpio_pin(unsigned int pin) +{ + AVR32_GPIO_LOCAL.port[pin >> 5].ovrt = 1 << (pin & 0x1F); +} + +/*! \brief Initializes the configuration of a GPIO pin so that it can be used + * with GPIO open-drain functions. + * + * \note This function must have been called at least once before using + * \ref gpio_local_set_gpio_open_drain_pin, + * \ref gpio_local_clr_gpio_open_drain_pin or + * \ref gpio_local_tgl_gpio_open_drain_pin. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void gpio_local_init_gpio_open_drain_pin(unsigned int pin) +{ + AVR32_GPIO_LOCAL.port[pin >> 5].ovrc = 1 << (pin & 0x1F); +} + +/*! \brief Drives a GPIO pin to 1 using open drain. + * + * \param pin The pin number. + * + * \note \ref gpio_local_init and \ref gpio_local_init_gpio_open_drain_pin must + * have been called beforehand. + * + * \note This function does not enable the GPIO mode of the pin. + * \ref gpio_enable_gpio_pin can be called for this purpose. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void gpio_local_set_gpio_open_drain_pin(unsigned int pin) +{ + AVR32_GPIO_LOCAL.port[pin >> 5].oderc = 1 << (pin & 0x1F); +} + +/*! \brief Drives a GPIO pin to 0 using open drain. + * + * \param pin The pin number. + * + * \note \ref gpio_local_init and \ref gpio_local_init_gpio_open_drain_pin must + * have been called beforehand. + * + * \note This function does not enable the GPIO mode of the pin. + * \ref gpio_enable_gpio_pin can be called for this purpose. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void gpio_local_clr_gpio_open_drain_pin(unsigned int pin) +{ + AVR32_GPIO_LOCAL.port[pin >> 5].oders = 1 << (pin & 0x1F); +} + +/*! \brief Toggles a GPIO pin using open drain. + * + * \param pin The pin number. + * + * \note \ref gpio_local_init and \ref gpio_local_init_gpio_open_drain_pin must + * have been called beforehand. + * + * \note This function does not enable the GPIO mode of the pin. + * \ref gpio_enable_gpio_pin can be called for this purpose. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void gpio_local_tgl_gpio_open_drain_pin(unsigned int pin) +{ + AVR32_GPIO_LOCAL.port[pin >> 5].odert = 1 << (pin & 0x1F); +} + +//! @} +#endif // AVR32_GPIO_LOCAL_ADDRESS + +#if UC3L +//! @{ +/*! \name Peripheral Event System support + * + * The GPIO can be programmed to output peripheral events whenever an interrupt + * condition is detected, such as pin value change, or only when a rising or + * falling edge is detected. + * + */ + +/*! \brief Enables the peripheral event generation of a pin. + * + * \param pin The pin number. + * + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void gpio_enable_pin_periph_event(unsigned int pin) +{ + AVR32_GPIO.port[pin >> 5].oderc = 1 << (pin & 0x1F); // The GPIO output driver is disabled for that pin. + AVR32_GPIO.port[pin >> 5].evers = 1 << (pin & 0x1F); +} + +/*! \brief Disables the peripheral event generation of a pin. + * + * \param pin The pin number. + * + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void gpio_disable_pin_periph_event(unsigned int pin) +{ + AVR32_GPIO.port[pin >> 5].everc = 1 << (pin & 0x1F); +} + +/*! \brief Configure the peripheral event trigger mode of a pin + * + * \param pin The pin number. + * \param mode The trigger mode (\ref GPIO_PIN_CHANGE, \ref GPIO_RISING_EDGE or + * \ref GPIO_FALLING_EDGE). + * \param use_igf use the Input Glitch Filter (TRUE) or not (FALSE). + * + * \return \ref GPIO_SUCCESS or \ref GPIO_INVALID_ARGUMENT. + */ +extern int gpio_configure_pin_periph_event_mode(unsigned int pin, unsigned int mode, unsigned int use_igf); + +//! @} +#endif + + +#endif // _GPIO_H_ diff --git a/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/INTC/exception.x b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/INTC/exception.x new file mode 100644 index 000000000..ec4109d46 --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/INTC/exception.x @@ -0,0 +1,239 @@ +/* This file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Exception and interrupt vectors. + * + * This file maps all events supported by an AVR32. + * + * - Compiler: GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with an INTC module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#if !__AVR32_UC__ && !__AVR32_AP__ + #error Implementation of the AVR32 architecture not supported by the INTC driver. +#endif + + +#include + + +//! @{ +//! \verbatim + + + .section .exception, "ax", @progbits + + +// Start of Exception Vector Table. + + // EVBA must be aligned with a power of two strictly greater than the EVBA- + // relative offset of the last vector. + .balign 0x200 + + // Export symbol. + .global _evba + .type _evba, @function +_evba: + + .org 0x000 + // Unrecoverable Exception. +_handle_Unrecoverable_Exception: + rjmp $ + + .org 0x004 + // TLB Multiple Hit. +_handle_TLB_Multiple_Hit: + rjmp $ + + .org 0x008 + // Bus Error Data Fetch. +_handle_Bus_Error_Data_Fetch: + rjmp $ + + .org 0x00C + // Bus Error Instruction Fetch. +_handle_Bus_Error_Instruction_Fetch: + rjmp $ + + .org 0x010 + // NMI. +_handle_NMI: + rjmp $ + + .org 0x014 + // Instruction Address. +_handle_Instruction_Address: + rjmp $ + + .org 0x018 + // ITLB Protection. +_handle_ITLB_Protection: + rjmp $ + + .org 0x01C + // Breakpoint. +_handle_Breakpoint: + rjmp $ + + .org 0x020 + // Illegal Opcode. +_handle_Illegal_Opcode: + rjmp $ + + .org 0x024 + // Unimplemented Instruction. +_handle_Unimplemented_Instruction: + rjmp $ + + .org 0x028 + // Privilege Violation. +_handle_Privilege_Violation: + rjmp $ + + .org 0x02C + // Floating-Point: UNUSED IN AVR32UC and AVR32AP. +_handle_Floating_Point: + rjmp $ + + .org 0x030 + // Coprocessor Absent: UNUSED IN AVR32UC. +_handle_Coprocessor_Absent: + rjmp $ + + .org 0x034 + // Data Address (Read). +_handle_Data_Address_Read: + rjmp $ + + .org 0x038 + // Data Address (Write). +_handle_Data_Address_Write: + rjmp $ + + .org 0x03C + // DTLB Protection (Read). +_handle_DTLB_Protection_Read: + rjmp $ + + .org 0x040 + // DTLB Protection (Write). +_handle_DTLB_Protection_Write: + rjmp $ + + .org 0x044 + // DTLB Modified: UNUSED IN AVR32UC. +_handle_DTLB_Modified: + rjmp $ + + .org 0x050 + // ITLB Miss. +_handle_ITLB_Miss: + rjmp $ + + .org 0x060 + // DTLB Miss (Read). +_handle_DTLB_Miss_Read: + rjmp $ + + .org 0x070 + // DTLB Miss (Write). +_handle_DTLB_Miss_Write: + rjmp $ + + .org 0x100 + // Supervisor Call. +_handle_Supervisor_Call: + rjmp $ + + +// Interrupt support. +// The interrupt controller must provide the offset address relative to EVBA. +// Important note: +// All interrupts call a C function named _get_interrupt_handler. +// This function will read group and interrupt line number to then return in +// R12 a pointer to a user-provided interrupt handler. + + .balign 4 + + .irp priority, 0, 1, 2, 3 +_int\priority: +#if __AVR32_UC__ + // R8-R12, LR, PC and SR are automatically pushed onto the system stack by the + // CPU upon interrupt entry. No other register is saved by hardware. +#elif __AVR32_AP__ + // PC and SR are automatically saved in respectively RAR_INTx and RSR_INTx by + // the CPU upon interrupt entry. No other register is saved by hardware. + pushm r8-r12, lr +#endif + mov r12, \priority // Pass the int_level parameter to the _get_interrupt_handler function. + call _get_interrupt_handler + cp.w r12, 0 // Get the pointer to the interrupt handler returned by the function. +#if __AVR32_UC__ + movne pc, r12 // If this was not a spurious interrupt (R12 != NULL), jump to the handler. +#elif __AVR32_AP__ + breq spint\priority // If this was a spurious interrupt (R12 == NULL), branch. + st.w --sp, r12 // Push the pointer to the interrupt handler onto the system stack since no register may be altered. + popm r8-r12, lr, pc // Restore registers and jump to the handler. +spint\priority: + popm r8-r12, lr +#endif + rete // If this was a spurious interrupt (R12 == NULL), return from event handler. + .endr + + +// Constant data area. + + .balign 4 + + // Values to store in the interrupt priority registers for the various interrupt priority levels. + // The interrupt priority registers contain the interrupt priority level and + // the EVBA-relative interrupt vector offset. + .global ipr_val + .type ipr_val, @object +ipr_val: + .word (AVR32_INTC_INT0 << AVR32_INTC_IPR_INTLEVEL_OFFSET) | (_int0 - _evba),\ + (AVR32_INTC_INT1 << AVR32_INTC_IPR_INTLEVEL_OFFSET) | (_int1 - _evba),\ + (AVR32_INTC_INT2 << AVR32_INTC_IPR_INTLEVEL_OFFSET) | (_int2 - _evba),\ + (AVR32_INTC_INT3 << AVR32_INTC_IPR_INTLEVEL_OFFSET) | (_int3 - _evba) + + +//! \endverbatim +//! @} diff --git a/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/INTC/intc.c b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/INTC/intc.c new file mode 100644 index 000000000..84d498d1a --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/INTC/intc.c @@ -0,0 +1,214 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief INTC driver for AVR32 UC3. + * + * AVR32 Interrupt Controller driver module. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with an INTC module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#include +#include "compiler.h" +#include "preprocessor.h" +#include "intc.h" + +// define _evba from exception.S +extern void _evba; + +//! Values to store in the interrupt priority registers for the various interrupt priority levels. +extern const unsigned int ipr_val[AVR32_INTC_NUM_INT_LEVELS]; + +//! Creates a table of interrupt line handlers per interrupt group in order to optimize RAM space. +//! Each line handler table contains a set of pointers to interrupt handlers. +#if (defined __GNUC__) +#define DECL_INT_LINE_HANDLER_TABLE(GRP, unused) \ +static volatile __int_handler _int_line_handler_table_##GRP[Max(AVR32_INTC_NUM_IRQS_PER_GRP##GRP, 1)]; +#elif (defined __ICCAVR32__) +#define DECL_INT_LINE_HANDLER_TABLE(GRP, unused) \ +static volatile __no_init __int_handler _int_line_handler_table_##GRP[Max(AVR32_INTC_NUM_IRQS_PER_GRP##GRP, 1)]; +#endif +MREPEAT(AVR32_INTC_NUM_INT_GRPS, DECL_INT_LINE_HANDLER_TABLE, ~); +#undef DECL_INT_LINE_HANDLER_TABLE + +//! Table containing for each interrupt group the number of interrupt request +//! lines and a pointer to the table of interrupt line handlers. +static const struct +{ + unsigned int num_irqs; + volatile __int_handler *_int_line_handler_table; +} _int_handler_table[AVR32_INTC_NUM_INT_GRPS] = +{ +#define INSERT_INT_LINE_HANDLER_TABLE(GRP, unused) \ + {AVR32_INTC_NUM_IRQS_PER_GRP##GRP, _int_line_handler_table_##GRP}, + MREPEAT(AVR32_INTC_NUM_INT_GRPS, INSERT_INT_LINE_HANDLER_TABLE, ~) +#undef INSERT_INT_LINE_HANDLER_TABLE +}; + + +/*! \brief Default interrupt handler. + * + * \note Taken and adapted from Newlib. + */ +#if (defined __GNUC__) +__attribute__((__interrupt__)) +#elif (defined __ICCAVR32__) +__interrupt +#endif +static void _unhandled_interrupt(void) +{ + // Catch unregistered interrupts. + while (TRUE); +} + + +/*! \brief Gets the interrupt handler of the current event at the \a int_level + * interrupt priority level (called from exception.S). + * + * \param int_level Interrupt priority level to handle. + * + * \return Interrupt handler to execute. + * + * \note Taken and adapted from Newlib. + */ +__int_handler _get_interrupt_handler(unsigned int int_level) +{ + // ICR3 is mapped first, ICR0 last. + // Code in exception.S puts int_level in R12 which is used by AVR32-GCC to + // pass a single argument to a function. + unsigned int int_grp = AVR32_INTC.icr[AVR32_INTC_INT3 - int_level]; + unsigned int int_req = AVR32_INTC.irr[int_grp]; + + // As an interrupt may disappear while it is being fetched by the CPU + // (spurious interrupt caused by a delayed response from an MCU peripheral to + // an interrupt flag clear or interrupt disable instruction), check if there + // are remaining interrupt lines to process. + // If a spurious interrupt occurs, the status register (SR) contains an + // execution mode and interrupt level masks corresponding to a level 0 + // interrupt, whatever the interrupt priority level causing the spurious + // event. This behavior has been chosen because a spurious interrupt has not + // to be a priority one and because it may not cause any trouble to other + // interrupts. + // However, these spurious interrupts place the hardware in an unstable state + // and could give problems in other/future versions of the CPU, so the + // software has to be written so that they never occur. The only safe way of + // achieving this is to always clear or disable peripheral interrupts with the + // following sequence: + // 1: Mask the interrupt in the CPU by setting GM (or IxM) in SR. + // 2: Perform the bus access to the peripheral register that clears or + // disables the interrupt. + // 3: Wait until the interrupt has actually been cleared or disabled by the + // peripheral. This is usually performed by reading from a register in the + // same peripheral (it DOES NOT have to be the same register that was + // accessed in step 2, but it MUST be in the same peripheral), what takes + // bus system latencies into account, but peripheral internal latencies + // (generally 0 cycle) also have to be considered. + // 4: Unmask the interrupt in the CPU by clearing GM (or IxM) in SR. + // Note that steps 1 and 4 are useless inside interrupt handlers as the + // corresponding interrupt level is automatically masked by IxM (unless IxM is + // explicitly cleared by the software). + // + // Get the right IRQ handler. + // + // If several interrupt lines are active in the group, the interrupt line with + // the highest number is selected. This is to be coherent with the + // prioritization of interrupt groups performed by the hardware interrupt + // controller. + // + // If no handler has been registered for the pending interrupt, + // _unhandled_interrupt will be selected thanks to the initialization of + // _int_line_handler_table_x by INTC_init_interrupts. + // + // exception.S will provide the interrupt handler with a clean interrupt stack + // frame, with nothing more pushed onto the stack. The interrupt handler must + // manage the `rete' instruction, what can be done thanks to pure assembly, + // inline assembly or the `__attribute__((__interrupt__))' C function + // attribute. + return (int_req) ? _int_handler_table[int_grp]._int_line_handler_table[32 - clz(int_req) - 1] : NULL; +} + +//! Init EVBA address. This sequence might also be done in the UTILS/STARTUP/GCC/crt0.S +static __inline__ void INTC_init_evba(void) +{ + Set_system_register(AVR32_EVBA, (int)&_evba ); +} + +void INTC_init_interrupts(void) +{ + unsigned int int_grp, int_req; + + INTC_init_evba(); + + // For all interrupt groups, + for (int_grp = 0; int_grp < AVR32_INTC_NUM_INT_GRPS; int_grp++) + { + // For all interrupt request lines of each group, + for (int_req = 0; int_req < _int_handler_table[int_grp].num_irqs; int_req++) + { + // Assign _unhandled_interrupt as default interrupt handler. + _int_handler_table[int_grp]._int_line_handler_table[int_req] = &_unhandled_interrupt; + } + + // Set the interrupt group priority register to its default value. + // By default, all interrupt groups are linked to the interrupt priority + // level 0 and to the interrupt vector _int0. + AVR32_INTC.ipr[int_grp] = ipr_val[AVR32_INTC_INT0]; + } +} + + +void INTC_register_interrupt(__int_handler handler, unsigned int irq, unsigned int int_level) +{ + // Determine the group of the IRQ. + unsigned int int_grp = irq / AVR32_INTC_MAX_NUM_IRQS_PER_GRP; + + // Store in _int_line_handler_table_x the pointer to the interrupt handler, so + // that _get_interrupt_handler can retrieve it when the interrupt is vectored. + _int_handler_table[int_grp]._int_line_handler_table[irq % AVR32_INTC_MAX_NUM_IRQS_PER_GRP] = handler; + + // Program the corresponding IPRX register to set the interrupt priority level + // and the interrupt vector offset that will be fetched by the core interrupt + // system. + // NOTE: The _intx functions are intermediate assembly functions between the + // core interrupt system and the user interrupt handler. + AVR32_INTC.ipr[int_grp] = ipr_val[int_level & (AVR32_INTC_IPR_INTLEVEL_MASK >> AVR32_INTC_IPR_INTLEVEL_OFFSET)]; +} diff --git a/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/INTC/intc.h b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/INTC/intc.h new file mode 100644 index 000000000..31a4fc16b --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/INTC/intc.h @@ -0,0 +1,100 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief INTC driver for AVR32 UC3. + * + * AVR32 Interrupt Controller driver module. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with an INTC module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _INTC_H_ +#define _INTC_H_ + +#include "compiler.h" + + +//! Maximal number of interrupt request lines per group. +#define AVR32_INTC_MAX_NUM_IRQS_PER_GRP 32 + +//! Number of interrupt priority levels. +#define AVR32_INTC_NUM_INT_LEVELS (1 << AVR32_INTC_IPR_INTLEVEL_SIZE) + + +#ifdef __AVR32_ABI_COMPILER__ // Automatically defined when compiling for AVR32, not when assembling. + +//! Pointer to interrupt handler. +#if (defined __GNUC__) +typedef void (*__int_handler)(void); +#elif (defined __ICCAVR32__) +typedef void (__interrupt *__int_handler)(void); +#endif + + +/*! \brief Initializes the hardware interrupt controller driver. + * + * \note Taken and adapted from Newlib. + */ +extern void INTC_init_interrupts(void); + +/*! \brief Registers an interrupt handler. + * + * \param handler Interrupt handler to register. + * \param irq IRQ of the interrupt handler to register. + * \param int_level Interrupt priority level to assign to the group of this IRQ. + * + * \warning The interrupt handler must manage the `rete' instruction, what can + * be done thanks to pure assembly, inline assembly or the + * `__attribute__((__interrupt__))' C function attribute. + * + * \warning If several interrupt handlers of a same group are registered with + * different priority levels, only the latest priority level set will + * be effective. + * + * \note Taken and adapted from Newlib. + */ +extern void INTC_register_interrupt(__int_handler handler, unsigned int irq, unsigned int int_level); + +#endif // __AVR32_ABI_COMPILER__ + + +#endif // _INTC_H_ diff --git a/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/pm.c b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/pm.c new file mode 100644 index 000000000..76d9268b4 --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/pm.c @@ -0,0 +1,546 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file has been prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Power Manager driver. + * + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + *****************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#include "compiler.h" +#include "pm.h" + + +/*! \name PM Writable Bit-Field Registers + */ +//! @{ + +typedef union +{ + unsigned long mcctrl; + avr32_pm_mcctrl_t MCCTRL; +} u_avr32_pm_mcctrl_t; + +typedef union +{ + unsigned long cksel; + avr32_pm_cksel_t CKSEL; +} u_avr32_pm_cksel_t; + +typedef union +{ + unsigned long pll; + avr32_pm_pll_t PLL; +} u_avr32_pm_pll_t; + +typedef union +{ + unsigned long oscctrl0; + avr32_pm_oscctrl0_t OSCCTRL0; +} u_avr32_pm_oscctrl0_t; + +typedef union +{ + unsigned long oscctrl1; + avr32_pm_oscctrl1_t OSCCTRL1; +} u_avr32_pm_oscctrl1_t; + +typedef union +{ + unsigned long oscctrl32; + avr32_pm_oscctrl32_t OSCCTRL32; +} u_avr32_pm_oscctrl32_t; + +typedef union +{ + unsigned long ier; + avr32_pm_ier_t IER; +} u_avr32_pm_ier_t; + +typedef union +{ + unsigned long idr; + avr32_pm_idr_t IDR; +} u_avr32_pm_idr_t; + +typedef union +{ + unsigned long icr; + avr32_pm_icr_t ICR; +} u_avr32_pm_icr_t; + +typedef union +{ + unsigned long gcctrl; + avr32_pm_gcctrl_t GCCTRL; +} u_avr32_pm_gcctrl_t; + +typedef union +{ + unsigned long rccr; + avr32_pm_rccr_t RCCR; +} u_avr32_pm_rccr_t; + +typedef union +{ + unsigned long bgcr; + avr32_pm_bgcr_t BGCR; +} u_avr32_pm_bgcr_t; + +typedef union +{ + unsigned long vregcr; + avr32_pm_vregcr_t VREGCR; +} u_avr32_pm_vregcr_t; + +typedef union +{ + unsigned long bod; + avr32_pm_bod_t BOD; +} u_avr32_pm_bod_t; + +//! @} + + +/*! \brief Sets the mode of the oscillator 0. + * + * \param pm Base address of the Power Manager (i.e. &AVR32_PM). + * \param mode Oscillator 0 mode (i.e. AVR32_PM_OSCCTRL0_MODE_x). + */ +static void pm_set_osc0_mode(volatile avr32_pm_t *pm, unsigned int mode) +{ + // Read + u_avr32_pm_oscctrl0_t u_avr32_pm_oscctrl0 = {pm->oscctrl0}; + // Modify + u_avr32_pm_oscctrl0.OSCCTRL0.mode = mode; + // Write + pm->oscctrl0 = u_avr32_pm_oscctrl0.oscctrl0; +} + + +void pm_enable_osc0_ext_clock(volatile avr32_pm_t *pm) +{ + pm_set_osc0_mode(pm, AVR32_PM_OSCCTRL0_MODE_EXT_CLOCK); +} + + +void pm_enable_osc0_crystal(volatile avr32_pm_t *pm, unsigned int fosc0) +{ + pm_set_osc0_mode(pm, (fosc0 < 900000) ? AVR32_PM_OSCCTRL0_MODE_CRYSTAL_G0 : + (fosc0 < 3000000) ? AVR32_PM_OSCCTRL0_MODE_CRYSTAL_G1 : + (fosc0 < 8000000) ? AVR32_PM_OSCCTRL0_MODE_CRYSTAL_G2 : + AVR32_PM_OSCCTRL0_MODE_CRYSTAL_G3); +} + + +void pm_enable_clk0(volatile avr32_pm_t *pm, unsigned int startup) +{ + pm_enable_clk0_no_wait(pm, startup); + pm_wait_for_clk0_ready(pm); +} + + +void pm_disable_clk0(volatile avr32_pm_t *pm) +{ + pm->mcctrl &= ~AVR32_PM_MCCTRL_OSC0EN_MASK; +} + + +void pm_enable_clk0_no_wait(volatile avr32_pm_t *pm, unsigned int startup) +{ + // Read register + u_avr32_pm_oscctrl0_t u_avr32_pm_oscctrl0 = {pm->oscctrl0}; + // Modify + u_avr32_pm_oscctrl0.OSCCTRL0.startup = startup; + // Write back + pm->oscctrl0 = u_avr32_pm_oscctrl0.oscctrl0; + + pm->mcctrl |= AVR32_PM_MCCTRL_OSC0EN_MASK; +} + + +void pm_wait_for_clk0_ready(volatile avr32_pm_t *pm) +{ + while (!(pm->poscsr & AVR32_PM_POSCSR_OSC0RDY_MASK)); +} + + +/*! \brief Sets the mode of the oscillator 1. + * + * \param pm Base address of the Power Manager (i.e. &AVR32_PM). + * \param mode Oscillator 1 mode (i.e. AVR32_PM_OSCCTRL1_MODE_x). + */ +static void pm_set_osc1_mode(volatile avr32_pm_t *pm, unsigned int mode) +{ + // Read + u_avr32_pm_oscctrl1_t u_avr32_pm_oscctrl1 = {pm->oscctrl1}; + // Modify + u_avr32_pm_oscctrl1.OSCCTRL1.mode = mode; + // Write + pm->oscctrl1 = u_avr32_pm_oscctrl1.oscctrl1; +} + + +void pm_enable_osc1_ext_clock(volatile avr32_pm_t *pm) +{ + pm_set_osc1_mode(pm, AVR32_PM_OSCCTRL1_MODE_EXT_CLOCK); +} + + +void pm_enable_osc1_crystal(volatile avr32_pm_t *pm, unsigned int fosc1) +{ + pm_set_osc1_mode(pm, (fosc1 < 900000) ? AVR32_PM_OSCCTRL1_MODE_CRYSTAL_G0 : + (fosc1 < 3000000) ? AVR32_PM_OSCCTRL1_MODE_CRYSTAL_G1 : + (fosc1 < 8000000) ? AVR32_PM_OSCCTRL1_MODE_CRYSTAL_G2 : + AVR32_PM_OSCCTRL1_MODE_CRYSTAL_G3); +} + + +void pm_enable_clk1(volatile avr32_pm_t *pm, unsigned int startup) +{ + pm_enable_clk1_no_wait(pm, startup); + pm_wait_for_clk1_ready(pm); +} + + +void pm_disable_clk1(volatile avr32_pm_t *pm) +{ + pm->mcctrl &= ~AVR32_PM_MCCTRL_OSC1EN_MASK; +} + + +void pm_enable_clk1_no_wait(volatile avr32_pm_t *pm, unsigned int startup) +{ + // Read register + u_avr32_pm_oscctrl1_t u_avr32_pm_oscctrl1 = {pm->oscctrl1}; + // Modify + u_avr32_pm_oscctrl1.OSCCTRL1.startup = startup; + // Write back + pm->oscctrl1 = u_avr32_pm_oscctrl1.oscctrl1; + + pm->mcctrl |= AVR32_PM_MCCTRL_OSC1EN_MASK; +} + + +void pm_wait_for_clk1_ready(volatile avr32_pm_t *pm) +{ + while (!(pm->poscsr & AVR32_PM_POSCSR_OSC1RDY_MASK)); +} + + +/*! \brief Sets the mode of the 32-kHz oscillator. + * + * \param pm Base address of the Power Manager (i.e. &AVR32_PM). + * \param mode 32-kHz oscillator mode (i.e. AVR32_PM_OSCCTRL32_MODE_x). + */ +static void pm_set_osc32_mode(volatile avr32_pm_t *pm, unsigned int mode) +{ + // Read + u_avr32_pm_oscctrl32_t u_avr32_pm_oscctrl32 = {pm->oscctrl32}; + // Modify + u_avr32_pm_oscctrl32.OSCCTRL32.mode = mode; + // Write + pm->oscctrl32 = u_avr32_pm_oscctrl32.oscctrl32; +} + + +void pm_enable_osc32_ext_clock(volatile avr32_pm_t *pm) +{ + pm_set_osc32_mode(pm, AVR32_PM_OSCCTRL32_MODE_EXT_CLOCK); +} + + +void pm_enable_osc32_crystal(volatile avr32_pm_t *pm) +{ + pm_set_osc32_mode(pm, AVR32_PM_OSCCTRL32_MODE_CRYSTAL); +} + + +void pm_enable_clk32(volatile avr32_pm_t *pm, unsigned int startup) +{ + pm_enable_clk32_no_wait(pm, startup); + pm_wait_for_clk32_ready(pm); +} + + +void pm_disable_clk32(volatile avr32_pm_t *pm) +{ + pm->oscctrl32 &= ~AVR32_PM_OSCCTRL32_OSC32EN_MASK; +} + + +void pm_enable_clk32_no_wait(volatile avr32_pm_t *pm, unsigned int startup) +{ + // Read register + u_avr32_pm_oscctrl32_t u_avr32_pm_oscctrl32 = {pm->oscctrl32}; + // Modify + u_avr32_pm_oscctrl32.OSCCTRL32.osc32en = 1; + u_avr32_pm_oscctrl32.OSCCTRL32.startup = startup; + // Write back + pm->oscctrl32 = u_avr32_pm_oscctrl32.oscctrl32; +} + + +void pm_wait_for_clk32_ready(volatile avr32_pm_t *pm) +{ + while (!(pm->poscsr & AVR32_PM_POSCSR_OSC32RDY_MASK)); +} + + +void pm_cksel(volatile avr32_pm_t *pm, + unsigned int pbadiv, + unsigned int pbasel, + unsigned int pbbdiv, + unsigned int pbbsel, + unsigned int hsbdiv, + unsigned int hsbsel) +{ + u_avr32_pm_cksel_t u_avr32_pm_cksel = {0}; + + u_avr32_pm_cksel.CKSEL.cpusel = hsbsel; + u_avr32_pm_cksel.CKSEL.cpudiv = hsbdiv; + u_avr32_pm_cksel.CKSEL.hsbsel = hsbsel; + u_avr32_pm_cksel.CKSEL.hsbdiv = hsbdiv; + u_avr32_pm_cksel.CKSEL.pbasel = pbasel; + u_avr32_pm_cksel.CKSEL.pbadiv = pbadiv; + u_avr32_pm_cksel.CKSEL.pbbsel = pbbsel; + u_avr32_pm_cksel.CKSEL.pbbdiv = pbbdiv; + + pm->cksel = u_avr32_pm_cksel.cksel; + + // Wait for ckrdy bit and then clear it + while (!(pm->poscsr & AVR32_PM_POSCSR_CKRDY_MASK)); +} + + +void pm_gc_setup(volatile avr32_pm_t *pm, + unsigned int gc, + unsigned int osc_or_pll, // Use Osc (=0) or PLL (=1) + unsigned int pll_osc, // Sel Osc0/PLL0 or Osc1/PLL1 + unsigned int diven, + unsigned int div) +{ + u_avr32_pm_gcctrl_t u_avr32_pm_gcctrl = {0}; + + u_avr32_pm_gcctrl.GCCTRL.oscsel = pll_osc; + u_avr32_pm_gcctrl.GCCTRL.pllsel = osc_or_pll; + u_avr32_pm_gcctrl.GCCTRL.diven = diven; + u_avr32_pm_gcctrl.GCCTRL.div = div; + + pm->gcctrl[gc] = u_avr32_pm_gcctrl.gcctrl; +} + + +void pm_gc_enable(volatile avr32_pm_t *pm, + unsigned int gc) +{ + pm->gcctrl[gc] |= AVR32_PM_GCCTRL_CEN_MASK; +} + + +void pm_gc_disable(volatile avr32_pm_t *pm, + unsigned int gc) +{ + pm->gcctrl[gc] &= ~AVR32_PM_GCCTRL_CEN_MASK; +} + + +void pm_pll_setup(volatile avr32_pm_t *pm, + unsigned int pll, + unsigned int mul, + unsigned int div, + unsigned int osc, + unsigned int lockcount) +{ + u_avr32_pm_pll_t u_avr32_pm_pll = {0}; + + u_avr32_pm_pll.PLL.pllosc = osc; + u_avr32_pm_pll.PLL.plldiv = div; + u_avr32_pm_pll.PLL.pllmul = mul; + u_avr32_pm_pll.PLL.pllcount = lockcount; + + pm->pll[pll] = u_avr32_pm_pll.pll; +} + + +void pm_pll_set_option(volatile avr32_pm_t *pm, + unsigned int pll, + unsigned int pll_freq, + unsigned int pll_div2, + unsigned int pll_wbwdisable) +{ + u_avr32_pm_pll_t u_avr32_pm_pll = {pm->pll[pll]}; + u_avr32_pm_pll.PLL.pllopt = pll_freq | (pll_div2 << 1) | (pll_wbwdisable << 2); + pm->pll[pll] = u_avr32_pm_pll.pll; +} + + +unsigned int pm_pll_get_option(volatile avr32_pm_t *pm, + unsigned int pll) +{ + return (pm->pll[pll] & AVR32_PM_PLLOPT_MASK) >> AVR32_PM_PLLOPT_OFFSET; +} + + +void pm_pll_enable(volatile avr32_pm_t *pm, + unsigned int pll) +{ + pm->pll[pll] |= AVR32_PM_PLLEN_MASK; +} + + +void pm_pll_disable(volatile avr32_pm_t *pm, + unsigned int pll) +{ + pm->pll[pll] &= ~AVR32_PM_PLLEN_MASK; +} + + +void pm_wait_for_pll0_locked(volatile avr32_pm_t *pm) +{ + while (!(pm->poscsr & AVR32_PM_POSCSR_LOCK0_MASK)); +} + + +void pm_wait_for_pll1_locked(volatile avr32_pm_t *pm) +{ + while (!(pm->poscsr & AVR32_PM_POSCSR_LOCK1_MASK)); +} + + +void pm_switch_to_clock(volatile avr32_pm_t *pm, unsigned long clock) +{ + // Read + u_avr32_pm_mcctrl_t u_avr32_pm_mcctrl = {pm->mcctrl}; + // Modify + u_avr32_pm_mcctrl.MCCTRL.mcsel = clock; + // Write back + pm->mcctrl = u_avr32_pm_mcctrl.mcctrl; +} + + +void pm_switch_to_osc0(volatile avr32_pm_t *pm, unsigned int fosc0, unsigned int startup) +{ + pm_enable_osc0_crystal(pm, fosc0); // Enable the Osc0 in crystal mode + pm_enable_clk0(pm, startup); // Crystal startup time - This parameter is critical and depends on the characteristics of the crystal + pm_switch_to_clock(pm, AVR32_PM_MCSEL_OSC0); // Then switch main clock to Osc0 +} + + +void pm_bod_enable_irq(volatile avr32_pm_t *pm) +{ + pm->ier = AVR32_PM_IER_BODDET_MASK; +} + + +void pm_bod_disable_irq(volatile avr32_pm_t *pm) +{ + Bool global_interrupt_enabled = Is_global_interrupt_enabled(); + + if (global_interrupt_enabled) Disable_global_interrupt(); + pm->idr = AVR32_PM_IDR_BODDET_MASK; + pm->isr; + if (global_interrupt_enabled) Enable_global_interrupt(); +} + + +void pm_bod_clear_irq(volatile avr32_pm_t *pm) +{ + pm->icr = AVR32_PM_ICR_BODDET_MASK; +} + + +unsigned long pm_bod_get_irq_status(volatile avr32_pm_t *pm) +{ + return ((pm->isr & AVR32_PM_ISR_BODDET_MASK) != 0); +} + + +unsigned long pm_bod_get_irq_enable_bit(volatile avr32_pm_t *pm) +{ + return ((pm->imr & AVR32_PM_IMR_BODDET_MASK) != 0); +} + + +unsigned long pm_bod_get_level(volatile avr32_pm_t *pm) +{ + return (pm->bod & AVR32_PM_BOD_LEVEL_MASK) >> AVR32_PM_BOD_LEVEL_OFFSET; +} + + +unsigned long pm_read_gplp(volatile avr32_pm_t *pm, unsigned long gplp) +{ + return pm->gplp[gplp]; +} + + +void pm_write_gplp(volatile avr32_pm_t *pm, unsigned long gplp, unsigned long value) +{ + pm->gplp[gplp] = value; +} + + +long pm_enable_module(volatile avr32_pm_t *pm, unsigned long module) +{ + unsigned long domain = module>>5; + unsigned long *regptr = (unsigned long*)(&(pm->cpumask) + domain); + + // Implementation-specific shortcut: the ckMASK registers are contiguous and + // memory-mapped in that order: CPUMASK, HSBMASK, PBAMASK, PBBMASK. + + *regptr |= (1<<(module%32)); + + return PASS; +} + +long pm_disable_module(volatile avr32_pm_t *pm, unsigned long module) +{ + unsigned long domain = module>>5; + unsigned long *regptr = (unsigned long*)(&(pm->cpumask) + domain); + + // Implementation-specific shortcut: the ckMASK registers are contiguous and + // memory-mapped in that order: CPUMASK, HSBMASK, PBAMASK, PBBMASK. + + *regptr &= ~(1<<(module%32)); + + return PASS; +} diff --git a/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/pm.h b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/pm.h new file mode 100644 index 000000000..ca679f734 --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/pm.h @@ -0,0 +1,493 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file has been prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Power Manager driver. + * + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + *****************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _PM_H_ +#define _PM_H_ + +#include +#include "compiler.h" +#include "preprocessor.h" + + +/*! \brief Sets the MCU in the specified sleep mode. + * + * \param mode Sleep mode: + * \arg \c AVR32_PM_SMODE_IDLE: Idle; + * \arg \c AVR32_PM_SMODE_FROZEN: Frozen; + * \arg \c AVR32_PM_SMODE_STANDBY: Standby; + * \arg \c AVR32_PM_SMODE_STOP: Stop; + * \arg \c AVR32_PM_SMODE_DEEP_STOP: DeepStop; + * \arg \c AVR32_PM_SMODE_STATIC: Static. + */ +#define SLEEP(mode) {__asm__ __volatile__ ("sleep "STRINGZ(mode));} + + +//! Input and output parameters when initializing PM clocks using pm_configure_clocks(). +typedef struct +{ + //! CPU frequency (input/output argument). + unsigned long cpu_f; + + //! PBA frequency (input/output argument). + unsigned long pba_f; + + //! Oscillator 0's external crystal(or external clock) frequency (board dependant) (input argument). + unsigned long osc0_f; + + //! Oscillator 0's external crystal(or external clock) startup time: AVR32_PM_OSCCTRL0_STARTUP_x_RCOSC (input argument). + unsigned long osc0_startup; +} pm_freq_param_t; + +#define PM_FREQ_STATUS_FAIL (-1) +#define PM_FREQ_STATUS_OK (0) + + +/*! \brief Gets the MCU reset cause. + * + * \param pm Base address of the Power Manager instance (i.e. &AVR32_PM). + * + * \return The MCU reset cause which can be masked with the + * \c AVR32_PM_RCAUSE_x_MASK bit-masks to isolate specific causes. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ unsigned int pm_get_reset_cause(volatile avr32_pm_t *pm) +{ + return pm->rcause; +} + + +/*! + * \brief This function will enable the external clock mode of the oscillator 0. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + */ +extern void pm_enable_osc0_ext_clock(volatile avr32_pm_t *pm); + + +/*! + * \brief This function will enable the crystal mode of the oscillator 0. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param fosc0 Oscillator 0 crystal frequency (Hz) + */ +extern void pm_enable_osc0_crystal(volatile avr32_pm_t *pm, unsigned int fosc0); + + +/*! + * \brief This function will enable the oscillator 0 to be used with a startup time. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param startup Clock 0 startup time. AVR32_PM_OSCCTRL0_STARTUP_x_RCOSC. + */ +extern void pm_enable_clk0(volatile avr32_pm_t *pm, unsigned int startup); + + +/*! + * \brief This function will disable the oscillator 0. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + */ +extern void pm_disable_clk0(volatile avr32_pm_t *pm); + + +/*! + * \brief This function will enable the oscillator 0 to be used with no startup time. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param startup Clock 0 startup time, for which the function does not wait. AVR32_PM_OSCCTRL0_STARTUP_x_RCOSC. + */ +extern void pm_enable_clk0_no_wait(volatile avr32_pm_t *pm, unsigned int startup); + + +/*! + * \brief This function will wait until the Osc0 clock is ready. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + */ +extern void pm_wait_for_clk0_ready(volatile avr32_pm_t *pm); + + +/*! + * \brief This function will enable the external clock mode of the oscillator 1. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + */ +extern void pm_enable_osc1_ext_clock(volatile avr32_pm_t *pm); + + +/*! + * \brief This function will enable the crystal mode of the oscillator 1. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param fosc1 Oscillator 1 crystal frequency (Hz) + */ +extern void pm_enable_osc1_crystal(volatile avr32_pm_t *pm, unsigned int fosc1); + + +/*! + * \brief This function will enable the oscillator 1 to be used with a startup time. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param startup Clock 1 startup time. AVR32_PM_OSCCTRL1_STARTUP_x_RCOSC. + */ +extern void pm_enable_clk1(volatile avr32_pm_t *pm, unsigned int startup); + + +/*! + * \brief This function will disable the oscillator 1. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + */ +extern void pm_disable_clk1(volatile avr32_pm_t *pm); + + +/*! + * \brief This function will enable the oscillator 1 to be used with no startup time. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param startup Clock 1 startup time, for which the function does not wait. AVR32_PM_OSCCTRL1_STARTUP_x_RCOSC. + */ +extern void pm_enable_clk1_no_wait(volatile avr32_pm_t *pm, unsigned int startup); + + +/*! + * \brief This function will wait until the Osc1 clock is ready. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + */ +extern void pm_wait_for_clk1_ready(volatile avr32_pm_t *pm); + + +/*! + * \brief This function will enable the external clock mode of the 32-kHz oscillator. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + */ +extern void pm_enable_osc32_ext_clock(volatile avr32_pm_t *pm); + + +/*! + * \brief This function will enable the crystal mode of the 32-kHz oscillator. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + */ +extern void pm_enable_osc32_crystal(volatile avr32_pm_t *pm); + + +/*! + * \brief This function will enable the oscillator 32 to be used with a startup time. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param startup Clock 32 kHz startup time. AVR32_PM_OSCCTRL32_STARTUP_x_RCOSC. + */ +extern void pm_enable_clk32(volatile avr32_pm_t *pm, unsigned int startup); + + +/*! + * \brief This function will disable the oscillator 32. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + */ +extern void pm_disable_clk32(volatile avr32_pm_t *pm); + + +/*! + * \brief This function will enable the oscillator 32 to be used with no startup time. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param startup Clock 32 kHz startup time, for which the function does not wait. AVR32_PM_OSCCTRL32_STARTUP_x_RCOSC. + */ +extern void pm_enable_clk32_no_wait(volatile avr32_pm_t *pm, unsigned int startup); + + +/*! + * \brief This function will wait until the osc32 clock is ready. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + */ +extern void pm_wait_for_clk32_ready(volatile avr32_pm_t *pm); + + +/*! + * \brief This function will select all the power manager clocks. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param pbadiv Peripheral Bus A clock divisor enable + * \param pbasel Peripheral Bus A select + * \param pbbdiv Peripheral Bus B clock divisor enable + * \param pbbsel Peripheral Bus B select + * \param hsbdiv High Speed Bus clock divisor enable (CPU clock = HSB clock) + * \param hsbsel High Speed Bus select (CPU clock = HSB clock ) + */ +extern void pm_cksel(volatile avr32_pm_t *pm, unsigned int pbadiv, unsigned int pbasel, unsigned int pbbdiv, unsigned int pbbsel, unsigned int hsbdiv, unsigned int hsbsel); + + +/*! + * \brief This function will setup a generic clock. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param gc generic clock number (0 for gc0...) + * \param osc_or_pll Use OSC (=0) or PLL (=1) + * \param pll_osc Select Osc0/PLL0 or Osc1/PLL1 + * \param diven Generic clock divisor enable + * \param div Generic clock divisor + */ +extern void pm_gc_setup(volatile avr32_pm_t *pm, unsigned int gc, unsigned int osc_or_pll, unsigned int pll_osc, unsigned int diven, unsigned int div); + + +/*! + * \brief This function will enable a generic clock. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param gc generic clock number (0 for gc0...) + */ +extern void pm_gc_enable(volatile avr32_pm_t *pm, unsigned int gc); + + +/*! + * \brief This function will disable a generic clock. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param gc generic clock number (0 for gc0...) + */ +extern void pm_gc_disable(volatile avr32_pm_t *pm, unsigned int gc); + + +/*! + * \brief This function will setup a PLL. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param pll PLL number(0 for PLL0, 1 for PLL1) + * \param mul PLL MUL in the PLL formula + * \param div PLL DIV in the PLL formula + * \param osc OSC number (0 for osc0, 1 for osc1) + * \param lockcount PLL lockount + */ +extern void pm_pll_setup(volatile avr32_pm_t *pm, unsigned int pll, unsigned int mul, unsigned int div, unsigned int osc, unsigned int lockcount); + + +/*! + * \brief This function will set a PLL option. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param pll PLL number(0 for PLL0, 1 for PLL1) + * \param pll_freq Set to 1 for VCO frequency range 80-180MHz, set to 0 for VCO frequency range 160-240Mhz. + * \param pll_div2 Divide the PLL output frequency by 2 (this settings does not change the FVCO value) + * \param pll_wbwdisable 1 Disable the Wide-Bandith Mode (Wide-Bandwith mode allow a faster startup time and out-of-lock time). 0 to enable the Wide-Bandith Mode. + */ +extern void pm_pll_set_option(volatile avr32_pm_t *pm, unsigned int pll, unsigned int pll_freq, unsigned int pll_div2, unsigned int pll_wbwdisable); + + +/*! + * \brief This function will get a PLL option. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param pll PLL number(0 for PLL0, 1 for PLL1) + * \return Option + */ +extern unsigned int pm_pll_get_option(volatile avr32_pm_t *pm, unsigned int pll); + + +/*! + * \brief This function will enable a PLL. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param pll PLL number(0 for PLL0, 1 for PLL1) + */ +extern void pm_pll_enable(volatile avr32_pm_t *pm, unsigned int pll); + + +/*! + * \brief This function will disable a PLL. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param pll PLL number(0 for PLL0, 1 for PLL1) + */ +extern void pm_pll_disable(volatile avr32_pm_t *pm, unsigned int pll); + + +/*! + * \brief This function will wait for PLL0 locked + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + */ +extern void pm_wait_for_pll0_locked(volatile avr32_pm_t *pm); + + +/*! + * \brief This function will wait for PLL1 locked + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + */ +extern void pm_wait_for_pll1_locked(volatile avr32_pm_t *pm); + + +/*! + * \brief This function will switch the power manager main clock. + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param clock Clock to be switched on. AVR32_PM_MCSEL_SLOW for RCOsc, AVR32_PM_MCSEL_OSC0 for Osc0, AVR32_PM_MCSEL_PLL0 for PLL0. + */ +extern void pm_switch_to_clock(volatile avr32_pm_t *pm, unsigned long clock); + + +/*! + * \brief Switch main clock to clock Osc0 (crystal mode) + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param fosc0 Oscillator 0 crystal frequency (Hz) + * \param startup Crystal 0 startup time. AVR32_PM_OSCCTRL0_STARTUP_x_RCOSC. + */ +extern void pm_switch_to_osc0(volatile avr32_pm_t *pm, unsigned int fosc0, unsigned int startup); + + +/*! \brief Enables the Brown-Out Detector interrupt. + * + * \param pm Base address of the Power Manager (i.e. &AVR32_PM). + */ +extern void pm_bod_enable_irq(volatile avr32_pm_t *pm); + + +/*! \brief Disables the Brown-Out Detector interrupt. + * + * \param pm Base address of the Power Manager (i.e. &AVR32_PM). + */ +extern void pm_bod_disable_irq(volatile avr32_pm_t *pm); + + +/*! \brief Clears the Brown-Out Detector interrupt flag. + * + * \param pm Base address of the Power Manager (i.e. &AVR32_PM). + */ +extern void pm_bod_clear_irq(volatile avr32_pm_t *pm); + + +/*! \brief Gets the Brown-Out Detector interrupt flag. + * + * \param pm Base address of the Power Manager (i.e. &AVR32_PM). + * + * \retval 0 No BOD interrupt. + * \retval 1 BOD interrupt pending. + */ +extern unsigned long pm_bod_get_irq_status(volatile avr32_pm_t *pm); + + +/*! \brief Gets the Brown-Out Detector interrupt enable status. + * + * \param pm Base address of the Power Manager (i.e. &AVR32_PM). + * + * \retval 0 BOD interrupt disabled. + * \retval 1 BOD interrupt enabled. + */ +extern unsigned long pm_bod_get_irq_enable_bit(volatile avr32_pm_t *pm); + + +/*! \brief Gets the triggering threshold of the Brown-Out Detector. + * + * \param pm Base address of the Power Manager (i.e. &AVR32_PM). + * + * \return Triggering threshold of the BOD. See the electrical characteristics + * in the part datasheet for actual voltage levels. + */ +extern unsigned long pm_bod_get_level(volatile avr32_pm_t *pm); + + +/*! + * \brief Read the content of the PM GPLP registers + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param gplp GPLP register index (0,1,... depending on the number of GPLP registers for a given part) + * + * \return The content of the chosen GPLP register. + */ +extern unsigned long pm_read_gplp(volatile avr32_pm_t *pm, unsigned long gplp); + + +/*! + * \brief Write into the PM GPLP registers + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param gplp GPLP register index (0,1,... depending on the number of GPLP registers for a given part) + * \param value Value to write + */ +extern void pm_write_gplp(volatile avr32_pm_t *pm, unsigned long gplp, unsigned long value); + + +/*! \brief Enable the clock of a module. + * + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param module The module to clock (use one of the defines in the part-specific + * header file under "toolchain folder"/avr32/inc(lude)/avr32/; depending on the + * clock domain, look for the sections "CPU clocks", "HSB clocks", "PBx clocks") + * + * \return Status. + * \retval 0 Success. + * \retval <0 An error occured. + */ +extern long pm_enable_module(volatile avr32_pm_t *pm, unsigned long module); + +/*! \brief Disable the clock of a module. + * + * \param pm Base address of the Power Manager (i.e. &AVR32_PM) + * \param module The module to shut down (use one of the defines in the part-specific + * header file under "toolchain folder"/avr32/inc(lude)/avr32/; depending on the + * clock domain, look for the sections "CPU clocks", "HSB clocks", "PBx clocks") + * + * \return Status. + * \retval 0 Success. + * \retval <0 An error occured. + */ +extern long pm_disable_module(volatile avr32_pm_t *pm, unsigned long module); + + + +/*! \brief Automatically configure the CPU, PBA, PBB, and HSB clocks + * according to the user wishes. + * + * This function needs some parameters stored in a pm_freq_param_t structure: + * - cpu_f and pba_f are the wanted frequencies, + * - osc0_f is the oscillator 0 on-board frequency (e.g. FOSC0), + * - osc0_startup is the oscillator 0 startup time (e.g. OSC0_STARTUP). + * + * The function will then configure the clocks using the following rules: + * - It first try to find a valid PLL frequency (the highest possible value to avoid jitter) in order + * to satisfy the CPU frequency, + * - It optimizes the configuration depending the various divide stages, + * - Then, the PBA frequency is configured from the CPU freq. + * - Note that HSB and PBB are configured with the same frequency as CPU. + * - Note also that the number of wait states of the flash read accesses is automatically set-up depending + * the CPU frequency. As a consequence, the application needs the FLASHC driver to compile. + * + * The CPU, HSB and PBA frequencies programmed after configuration are stored back into cpu_f and pba_f. + * + * \param param pointer on the configuration structure. + * + * \retval PM_FREQ_STATUS_OK Mode successfully initialized. + * \retval PM_FREQ_STATUS_FAIL The configuration can not be done. + */ +extern int pm_configure_clocks(pm_freq_param_t *param); + + +/*! \brief Automatically configure the USB clock. + * + * USB clock is configured to 48MHz, using the PLL1 from the Oscillator0, assuming + * a 12 MHz crystal is connected to it. + */ +extern void pm_configure_usb_clock(void); + + +#endif // _PM_H_ diff --git a/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/pm_conf_clocks.c b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/pm_conf_clocks.c new file mode 100644 index 000000000..8beb83b20 --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/pm_conf_clocks.c @@ -0,0 +1,268 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file has been prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Power Manager clocks configuration helper. + * + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + *****************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#include +#include "compiler.h" +#include "pm.h" + +extern void flashc_set_wait_state(unsigned int wait_state); +#if (defined AVR32_FLASHC_210_H_INCLUDED) +extern void flashc_issue_command(unsigned int command, int page_number); +#endif + + +#define PM_MAX_MUL ((1 << AVR32_PM_PLL0_PLLMUL_SIZE) - 1) + + +int pm_configure_clocks(pm_freq_param_t *param) +{ + // Supported frequencies: + // Fosc0 mul div PLL div2_en cpu_f pba_f Comment + // 12 15 1 192 1 12 12 + // 12 9 3 40 1 20 20 PLL out of spec + // 12 15 1 192 1 24 12 + // 12 9 1 120 1 30 15 + // 12 9 3 40 0 40 20 PLL out of spec + // 12 15 1 192 1 48 12 + // 12 15 1 192 1 48 24 + // 12 8 1 108 1 54 27 + // 12 9 1 120 1 60 15 + // 12 9 1 120 1 60 30 + // 12 10 1 132 1 66 16.5 + // + unsigned long in_cpu_f = param->cpu_f; + unsigned long in_osc0_f = param->osc0_f; + unsigned long mul, div, div2_en = 0, div2_cpu = 0, div2_pba = 0; + unsigned long pll_freq, rest; + Bool b_div2_pba, b_div2_cpu; + + // Switch to external Oscillator 0 + pm_switch_to_osc0(&AVR32_PM, in_osc0_f, param->osc0_startup); + + // Start with CPU freq config + if (in_cpu_f == in_osc0_f) + { + param->cpu_f = in_osc0_f; + param->pba_f = in_osc0_f; + return PM_FREQ_STATUS_OK; + } + else if (in_cpu_f < in_osc0_f) + { + // TBD + } + + rest = in_cpu_f % in_osc0_f; + + for (div = 1; div < 32; div++) + { + if ((div * rest) % in_osc0_f == 0) + break; + } + if (div == 32) + return PM_FREQ_STATUS_FAIL; + + mul = (in_cpu_f * div) / in_osc0_f; + + if (mul > PM_MAX_MUL) + return PM_FREQ_STATUS_FAIL; + + // export 2power from PLL div to div2_cpu + while (!(div % 2)) + { + div /= 2; + div2_cpu++; + } + + // Here we know the mul and div parameter of the PLL config. + // . Check out if the PLL has a valid in_cpu_f. + // . Try to have for the PLL frequency (VCO output) the highest possible value + // to reduce jitter. + while (in_osc0_f * 2 * mul / div < AVR32_PM_PLL_VCO_RANGE0_MAX_FREQ) + { + if (2 * mul > PM_MAX_MUL) + break; + mul *= 2; + div2_cpu++; + } + + if (div2_cpu != 0) + { + div2_cpu--; + div2_en = 1; + } + + pll_freq = in_osc0_f * mul / (div * (1 << div2_en)); + + // Update real CPU Frequency + param->cpu_f = pll_freq / (1 << div2_cpu); + mul--; + + pm_pll_setup(&AVR32_PM + , 0 // pll + , mul // mul + , div // div + , 0 // osc + , 16 // lockcount + ); + + pm_pll_set_option(&AVR32_PM + , 0 // pll + // PLL clock is lower than 160MHz: need to set pllopt. + , (pll_freq < AVR32_PM_PLL_VCO_RANGE0_MIN_FREQ) ? 1 : 0 // pll_freq + , div2_en // pll_div2 + , 0 // pll_wbwdisable + ); + + rest = pll_freq; + while (rest > AVR32_PM_PBA_MAX_FREQ || + rest != param->pba_f) + { + div2_pba++; + rest = pll_freq / (1 << div2_pba); + if (rest < param->pba_f) + break; + } + + // Update real PBA Frequency + param->pba_f = pll_freq / (1 << div2_pba); + + // Enable PLL0 + pm_pll_enable(&AVR32_PM, 0); + + // Wait for PLL0 locked + pm_wait_for_pll0_locked(&AVR32_PM); + + if (div2_cpu) + { + b_div2_cpu = TRUE; + div2_cpu--; + } + else + b_div2_cpu = FALSE; + + if (div2_pba) + { + b_div2_pba = TRUE; + div2_pba--; + } + else + b_div2_pba = FALSE; + + pm_cksel(&AVR32_PM + , b_div2_pba, div2_pba // PBA + , b_div2_cpu, div2_cpu // PBB + , b_div2_cpu, div2_cpu // HSB + ); + + if (param->cpu_f > AVR32_FLASHC_FWS_0_MAX_FREQ) + { + flashc_set_wait_state(1); +#if (defined AVR32_FLASHC_210_H_INCLUDED) + if (param->cpu_f > AVR32_FLASHC_HSEN_FWS_1_MAX_FREQ) + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_HSEN, -1); + else + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_HSDIS, -1); +#endif + } + else + { + flashc_set_wait_state(0); +#if (defined AVR32_FLASHC_210_H_INCLUDED) + if (param->cpu_f > AVR32_FLASHC_HSEN_FWS_0_MAX_FREQ) + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_HSEN, -1); + else + flashc_issue_command(AVR32_FLASHC_FCMD_CMD_HSDIS, -1); +#endif + } + + pm_switch_to_clock(&AVR32_PM, AVR32_PM_MCCTRL_MCSEL_PLL0); + + return PM_FREQ_STATUS_OK; +} + + +void pm_configure_usb_clock(void) +{ +#if UC3A3 + + // Setup USB GCLK. + pm_gc_setup(&AVR32_PM, AVR32_PM_GCLK_USBB, // gc + 0, // osc_or_pll: use Osc (if 0) or PLL (if 1) + 0, // pll_osc: select Osc0/PLL0 or Osc1/PLL1 + 0, // diven + 0); // div + + // Enable USB GCLK. + pm_gc_enable(&AVR32_PM, AVR32_PM_GCLK_USBB); +#else + // Use 12MHz from OSC0 and generate 96 MHz + pm_pll_setup(&AVR32_PM, 1, // pll. + 7, // mul. + 1, // div. + 0, // osc. + 16); // lockcount. + + pm_pll_set_option(&AVR32_PM, 1, // pll. + 1, // pll_freq: choose the range 80-180MHz. + 1, // pll_div2. + 0); // pll_wbwdisable. + + // start PLL1 and wait forl lock + pm_pll_enable(&AVR32_PM, 1); + + // Wait for PLL1 locked. + pm_wait_for_pll1_locked(&AVR32_PM); + + pm_gc_setup(&AVR32_PM, AVR32_PM_GCLK_USBB, // gc. + 1, // osc_or_pll: use Osc (if 0) or PLL (if 1). + 1, // pll_osc: select Osc0/PLL0 or Osc1/PLL1. + 0, // diven. + 0); // div. + pm_gc_enable(&AVR32_PM, AVR32_PM_GCLK_USBB); +#endif +} diff --git a/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/power_clocks_lib.c b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/power_clocks_lib.c new file mode 100644 index 000000000..f5fc1553d --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/power_clocks_lib.c @@ -0,0 +1,566 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file has been prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief High-level library abstracting features such as oscillators/pll/dfll + * configuration, clock configuration, System-sensible parameters + * configuration, buses clocks configuration, sleep mode, reset. + * + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + *****************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ +#include "power_clocks_lib.h" + + +//! Device-specific data +#if UC3L +static long int pcl_configure_clocks_uc3l(pcl_freq_param_t *param); // FORWARD declaration +#endif + +#if UC3C +static long int pcl_configure_clocks_uc3c(pcl_freq_param_t *param); // FORWARD declaration +#endif + +long int pcl_configure_clocks(pcl_freq_param_t *param) +{ +#ifndef AVR32_PM_VERSION_RESETVALUE + // Implementation for UC3A, UC3A3, UC3B parts. + return(pm_configure_clocks(param)); +#else + #ifdef AVR32_PM_410_H_INCLUDED + // Implementation for UC3C parts. + return(pcl_configure_clocks_uc3c(param)); + #else + // Implementation for UC3L parts. + return(pcl_configure_clocks_uc3l(param)); + #endif +#endif +} + + +//! Device-specific implementation +#if UC3L +// FORWARD declaration +static long int pcl_configure_synchronous_clocks( pm_clk_src_t main_clk_src, + unsigned long main_clock_freq_hz, + pcl_freq_param_t *param); + +long int pcl_configure_clocks_rcsys(pcl_freq_param_t *param) +{ + // Supported main clock sources: PCL_MC_RCSYS + + // Supported synchronous clocks frequencies if RCSYS is the main clock source: + // 115200Hz, 57600Hz, 28800Hz, 14400Hz, 7200Hz, 3600Hz, 1800Hz, 900Hz, 450Hz. + + // NOTE: by default, this implementation doesn't perform thorough checks on the + // input parameters. To enable the checks, define AVR32SFW_INPUT_CHECK. + +#ifdef AVR32SFW_INPUT_CHECK + // Verify that fCPU >= fPBx + if((param->cpu_f < param->pba_f) || (param->cpu_f < param->pbb_f)) + return(-1); +#endif + +#ifdef AVR32SFW_INPUT_CHECK + // Verify that the target frequencies are reachable. + if((param->cpu_f > SCIF_SLOWCLOCK_FREQ_HZ) || (param->pba_f > SCIF_SLOWCLOCK_FREQ_HZ) + || (param->pbb_f > SCIF_SLOWCLOCK_FREQ_HZ)) + return(-1); +#endif + + return(pcl_configure_synchronous_clocks(PM_CLK_SRC_SLOW, SCIF_SLOWCLOCK_FREQ_HZ, param)); +} + + +long int pcl_configure_clocks_rc120m(pcl_freq_param_t *param) +{ + // Supported main clock sources: PCL_MC_RC120M + + // Supported synchronous clocks frequencies if RC120M is the main clock source: + // 30MHz, 15MHz, 7.5MHz, 3.75MHz, 1.875MHz, 937.5kHz, 468.75kHz. + + // NOTE: by default, this implementation doesn't perform thorough checks on the + // input parameters. To enable the checks, define AVR32SFW_INPUT_CHECK. + +#ifdef AVR32SFW_INPUT_CHECK + // Verify that fCPU >= fPBx + if((param->cpu_f < param->pba_f) || (param->cpu_f < param->pbb_f)) + return(-1); +#endif + +#ifdef AVR32SFW_INPUT_CHECK + // Verify that the target frequencies are reachable. + if((param->cpu_f > SCIF_RC120M_FREQ_HZ) || (param->pba_f > SCIF_RC120M_FREQ_HZ) + || (param->pbb_f > SCIF_RC120M_FREQ_HZ)) + return(-1); +#endif + + // Start the 120MHz internal RCosc (RC120M) clock + scif_start_rc120M(); + + return(pcl_configure_synchronous_clocks(PM_CLK_SRC_RC120M, SCIF_RC120M_FREQ_HZ, param)); +} + + +long int pcl_configure_clocks_osc0(pcl_freq_param_t *param) +{ + // Supported main clock sources: PCL_MC_OSC0 + + // Supported synchronous clocks frequencies if OSC0 is the main clock source: + // (these obviously depend on the OSC0 frequency; we'll take 16MHz as an example) + // 16MHz, 8MHz, 4MHz, 2MHz, 1MHz, 500kHz, 250kHz, 125kHz, 62.5kHz. + + // NOTE: by default, this implementation doesn't perform thorough checks on the + // input parameters. To enable the checks, define AVR32SFW_INPUT_CHECK. + + unsigned long main_clock_freq; + + +#ifdef AVR32SFW_INPUT_CHECK + // Verify that fCPU >= fPBx + if((param->cpu_f < param->pba_f) || (param->cpu_f < param->pbb_f)) + return(-1); +#endif + + main_clock_freq = param->osc0_f; +#ifdef AVR32SFW_INPUT_CHECK + // Verify that the target frequencies are reachable. + if((param->cpu_f > main_clock_freq) || (param->pba_f > main_clock_freq) + || (param->pbb_f > main_clock_freq)) + return(-1); +#endif + // Configure OSC0 in crystal mode, external crystal with a fcrystal Hz frequency. + scif_configure_osc_crystalmode(SCIF_OSC0, main_clock_freq); + // Enable the OSC0 + scif_enable_osc(SCIF_OSC0, param->osc0_startup, true); + + return(pcl_configure_synchronous_clocks(PM_CLK_SRC_OSC0, main_clock_freq, param)); +} + + +long int pcl_configure_clocks_dfll0(pcl_freq_param_t *param) +{ + // Supported main clock sources: PCL_MC_DFLL + + // Supported synchronous clocks frequencies if DFLL is the main clock source: + // (these obviously depend on the DFLL target frequency; we'll take 100MHz as an example) + // 50MHz, 25MHz, 12.5MHz, 6.25MHz, 3.125MHz, 1562.5kHz, 781.25kHz, 390.625kHz. + + // NOTE: by default, this implementation doesn't perform thorough checks on the + // input parameters. To enable the checks, define AVR32SFW_INPUT_CHECK. + + unsigned long main_clock_freq; + scif_gclk_opt_t *pgc_dfllif_ref_opt; + + +#ifdef AVR32SFW_INPUT_CHECK + // Verify that fCPU >= fPBx + if((param->cpu_f < param->pba_f) || (param->cpu_f < param->pbb_f)) + return(-1); +#endif + + main_clock_freq = param->dfll_f; +#ifdef AVR32SFW_INPUT_CHECK + // Verify that the target DFLL output frequency is in the correct range. + if((main_clock_freq > SCIF_DFLL_MAXFREQ_HZ) || (main_clock_freq < SCIF_DFLL_MINFREQ_HZ)) + return(-1); + // Verify that the target frequencies are reachable. + if((param->cpu_f > main_clock_freq) || (param->pba_f > main_clock_freq) + || (param->pbb_f > main_clock_freq)) + return(-1); +#endif + pgc_dfllif_ref_opt = (scif_gclk_opt_t *)param->pextra_params; + // Implementation note: this implementation configures the DFLL in closed-loop + // mode (because it gives the best accuracy) which enables the generic clock CLK_DFLLIF_REF + // as a reference (RCSYS being used as the generic clock source, undivided). + scif_dfll0_closedloop_configure_and_start(pgc_dfllif_ref_opt, main_clock_freq, TRUE); + + return(pcl_configure_synchronous_clocks(PM_CLK_SRC_DFLL0, main_clock_freq, param)); +} + + +static long int pcl_configure_clocks_uc3l(pcl_freq_param_t *param) +{ + // Supported main clock sources: PCL_MC_RCSYS, PCL_MC_OSC0, PCL_MC_DFLL0, PCL_MC_RC120M + + // Supported synchronous clocks frequencies if RCSYS is the main clock source: + // 115200Hz, 57600Hz, 28800Hz, 14400Hz, 7200Hz, 3600Hz, 1800Hz, 900Hz, 450Hz. + + // Supported synchronous clocks frequencies if RC120M is the main clock source: + // 30MHz, 15MHz, 7.5MHz, 3.75MHz, 1.875MHz, 937.5kHz, 468.75kHz. + + // Supported synchronous clocks frequencies if OSC0 is the main clock source: + // (these obviously depend on the OSC0 frequency; we'll take 16MHz as an example) + // 16MHz, 8MHz, 4MHz, 2MHz, 1MHz, 500kHz, 250kHz, 125kHz, 62.5kHz. + + // Supported synchronous clocks frequencies if DFLL is the main clock source: + // (these obviously depend on the DFLL target frequency; we'll take 100MHz as an example) + // 50MHz, 25MHz, 12.5MHz, 6.25MHz, 3.125MHz, 1562.5kHz, 781.25kHz, 390.625kHz. + + // NOTE: by default, this implementation doesn't perform thorough checks on the + // input parameters. To enable the checks, define AVR32SFW_INPUT_CHECK. + + +#ifdef AVR32SFW_INPUT_CHECK + // Verify that fCPU >= fPBx + if((param->cpu_f < param->pba_f) || (param->cpu_f < param->pbb_f)) + return(-1); +#endif + + if(PCL_MC_RCSYS == param->main_clk_src) + { + return(pcl_configure_clocks_rcsys(param)); + } + else if(PCL_MC_RC120M == param->main_clk_src) + { + return(pcl_configure_clocks_rc120m(param)); + } + else if(PCL_MC_OSC0 == param->main_clk_src) + { + return(pcl_configure_clocks_osc0(param)); + } + else // PCL_MC_DFLL0 == param->main_clk_src + { + return(pcl_configure_clocks_dfll0(param)); + } +} + +static long int pcl_configure_synchronous_clocks(pm_clk_src_t main_clk_src, unsigned long main_clock_freq_hz, pcl_freq_param_t *param) +{ + //# + //# Set the Synchronous clock division ratio for each clock domain + //# + pm_set_all_cksel(main_clock_freq_hz, param->cpu_f, param->pba_f, param->pbb_f); + + //# + //# Set the Flash wait state and the speed read mode (depending on the target CPU frequency). + //# +#if UC3L + flashcdw_set_flash_waitstate_and_readmode(param->cpu_f); +#elif UC3C + flashc_set_flash_waitstate_and_readmode(param->cpu_f); +#endif + + + //# + //# Switch the main clock source to the selected clock. + //# + pm_set_mclk_source(main_clk_src); + + return PASS; +} + +#endif // UC3L device-specific implementation + +//! UC3C Device-specific implementation +#if UC3C +static long int pcl_configure_clocks_uc3c(pcl_freq_param_t *param) +{ + #define PM_MAX_MUL ((1 << AVR32_SCIF_PLLMUL_SIZE) - 1) + #define AVR32_PM_PBA_MAX_FREQ 66000000 + #define AVR32_PM_PLL_VCO_RANGE0_MAX_FREQ 240000000 + #define AVR32_PM_PLL_VCO_RANGE0_MIN_FREQ 160000000 + + // Implementation for UC3C parts. + // Supported frequencies: + // Fosc0 mul div PLL div2_en cpu_f pba_f Comment + // 12 15 1 192 1 12 12 + // 12 9 3 40 1 20 20 PLL out of spec + // 12 15 1 192 1 24 12 + // 12 9 1 120 1 30 15 + // 12 9 3 40 0 40 20 PLL out of spec + // 12 15 1 192 1 48 12 + // 12 15 1 192 1 48 24 + // 12 8 1 108 1 54 27 + // 12 9 1 120 1 60 15 + // 12 9 1 120 1 60 30 + // 12 10 1 132 1 66 16.5 + // + unsigned long in_cpu_f = param->cpu_f; + unsigned long in_osc0_f = param->osc0_f; + unsigned long mul, div, div2_en = 0, div2_cpu = 0, div2_pba = 0; + unsigned long pll_freq, rest; + Bool b_div2_pba, b_div2_cpu; + + // Configure OSC0 in crystal mode, external crystal with a FOSC0 Hz frequency. + scif_configure_osc_crystalmode(SCIF_OSC0, in_osc0_f); + // Enable the OSC0 + scif_enable_osc(SCIF_OSC0, param->osc0_startup, true); + // Set the main clock source as being OSC0. + pm_set_mclk_source(PM_CLK_SRC_OSC0); + + // Start with CPU freq config + if (in_cpu_f == in_osc0_f) + { + param->cpu_f = in_osc0_f; + param->pba_f = in_osc0_f; + return PASS; + } + else if (in_cpu_f < in_osc0_f) + { + // TBD + } + + rest = in_cpu_f % in_osc0_f; + + for (div = 1; div < 32; div++) + { + if ((div * rest) % in_osc0_f == 0) + break; + } + if (div == 32) + return FAIL; + + mul = (in_cpu_f * div) / in_osc0_f; + + if (mul > PM_MAX_MUL) + return FAIL; + + // export 2power from PLL div to div2_cpu + while (!(div % 2)) + { + div /= 2; + div2_cpu++; + } + + // Here we know the mul and div parameter of the PLL config. + // . Check out if the PLL has a valid in_cpu_f. + // . Try to have for the PLL frequency (VCO output) the highest possible value + // to reduce jitter. + while (in_osc0_f * 2 * mul / div < AVR32_PM_PLL_VCO_RANGE0_MAX_FREQ) + { + if (2 * mul > PM_MAX_MUL) + break; + mul *= 2; + div2_cpu++; + } + + if (div2_cpu != 0) + { + div2_cpu--; + div2_en = 1; + } + + pll_freq = in_osc0_f * mul / (div * (1 << div2_en)); + + // Update real CPU Frequency + param->cpu_f = pll_freq / (1 << div2_cpu); + mul--; + + scif_pll_opt_t opt; + + opt.osc = SCIF_OSC0, // Sel Osc0 or Osc1 + opt.lockcount = 16, // lockcount in main clock for the PLL wait lock + opt.div = div, // DIV=1 in the formula + opt.mul = mul, // MUL=7 in the formula + opt.pll_div2 = div2_en, // pll_div2 Divide the PLL output frequency by 2 (this settings does not change the FVCO value) + opt.pll_wbwdisable = 0, //pll_wbwdisable 1 Disable the Wide-Bandith Mode (Wide-Bandwith mode allow a faster startup time and out-of-lock time). 0 to enable the Wide-Bandith Mode. + opt.pll_freq = (pll_freq < AVR32_PM_PLL_VCO_RANGE0_MIN_FREQ) ? 1 : 0, // Set to 1 for VCO frequency range 80-180MHz, set to 0 for VCO frequency range 160-240Mhz. + + + scif_pll_setup(SCIF_PLL0, opt); // lockcount in main clock for the PLL wait lock + + /* Enable PLL0 */ + scif_pll_enable(SCIF_PLL0); + + /* Wait for PLL0 locked */ + scif_wait_for_pll_locked(SCIF_PLL0) ; + + rest = pll_freq; + while (rest > AVR32_PM_PBA_MAX_FREQ || + rest != param->pba_f) + { + div2_pba++; + rest = pll_freq / (1 << div2_pba); + if (rest < param->pba_f) + break; + } + + // Update real PBA Frequency + param->pba_f = pll_freq / (1 << div2_pba); + + + if (div2_cpu) + { + b_div2_cpu = TRUE; + div2_cpu--; + } + else + b_div2_cpu = FALSE; + + if (div2_pba) + { + b_div2_pba = TRUE; + div2_pba--; + } + else + b_div2_pba = FALSE; + + if (b_div2_cpu == TRUE ) + { + pm_set_clk_domain_div(PM_CLK_DOMAIN_0, (pm_divratio_t) div2_cpu); // CPU + pm_set_clk_domain_div(PM_CLK_DOMAIN_1, (pm_divratio_t) div2_cpu); // HSB + pm_set_clk_domain_div(PM_CLK_DOMAIN_3, (pm_divratio_t) div2_cpu); // PBB + } + if (b_div2_pba == TRUE ) + { + pm_set_clk_domain_div(PM_CLK_DOMAIN_2, (pm_divratio_t) div2_pba); // PBA + pm_set_clk_domain_div(PM_CLK_DOMAIN_4, (pm_divratio_t) div2_pba); // PBC + } + + // Set Flashc Wait State + flashc_set_flash_waitstate_and_readmode(param->cpu_f); + + // Set the main clock source as being PLL0. + pm_set_mclk_source(PM_CLK_SRC_PLL0); + + return PASS; +} +#endif // UC3C device-specific implementation + +long int pcl_switch_to_osc(pcl_osc_t osc, unsigned int fcrystal, unsigned int startup) +{ +#ifndef AVR32_PM_VERSION_RESETVALUE +// Implementation for UC3A, UC3A3, UC3B parts. + if(PCL_OSC0 == osc) + { + // Configure OSC0 in crystal mode, external crystal with a FOSC0 Hz frequency, + // enable the OSC0, set the main clock source as being OSC0. + pm_switch_to_osc0(&AVR32_PM, fcrystal, startup); + } + else + { + return PCL_NOT_SUPPORTED; + } +#else +// Implementation for UC3C, UC3L parts. + #if AVR32_PM_VERSION_RESETVALUE < 0x400 + return PCL_NOT_SUPPORTED; + #else + if(PCL_OSC0 == osc) + { + // Configure OSC0 in crystal mode, external crystal with a fcrystal Hz frequency. + scif_configure_osc_crystalmode(SCIF_OSC0, fcrystal); + // Enable the OSC0 + scif_enable_osc(SCIF_OSC0, startup, true); + // Set the Flash wait state and the speed read mode (depending on the target CPU frequency). +#if UC3L + flashcdw_set_flash_waitstate_and_readmode(fcrystal); +#elif UC3C + flashc_set_flash_waitstate_and_readmode(fcrystal); +#endif + // Set the main clock source as being OSC0. + pm_set_mclk_source(PM_CLK_SRC_OSC0); + } + else + { + return PCL_NOT_SUPPORTED; + } + #endif +#endif + return PASS; +} + +long int pcl_configure_usb_clock(void) +{ +#ifndef AVR32_PM_VERSION_RESETVALUE +// Implementation for UC3A, UC3A3, UC3B parts. + pm_configure_usb_clock(); + return PASS; +#else + #ifdef AVR32_PM_410_H_INCLUDED + const scif_pll_opt_t opt = { + .osc = SCIF_OSC0, // Sel Osc0 or Osc1 + .lockcount = 16, // lockcount in main clock for the PLL wait lock + .div = 1, // DIV=1 in the formula + .mul = 5, // MUL=7 in the formula + .pll_div2 = 1, // pll_div2 Divide the PLL output frequency by 2 (this settings does not change the FVCO value) + .pll_wbwdisable = 0, //pll_wbwdisable 1 Disable the Wide-Bandith Mode (Wide-Bandwith mode allow a faster startup time and out-of-lock time). 0 to enable the Wide-Bandith Mode. + .pll_freq = 1, // Set to 1 for VCO frequency range 80-180MHz, set to 0 for VCO frequency range 160-240Mhz. + }; + + /* Setup PLL1 on Osc0, mul=7 ,no divisor, lockcount=16, ie. 16Mhzx6 = 96MHz output */ + scif_pll_setup(SCIF_PLL1, opt); // lockcount in main clock for the PLL wait lock + + /* Enable PLL1 */ + scif_pll_enable(SCIF_PLL1); + + /* Wait for PLL1 locked */ + scif_wait_for_pll_locked(SCIF_PLL1) ; + + // Implementation for UC3C parts. + // Setup the generic clock for USB + scif_gc_setup(AVR32_SCIF_GCLK_USB, + SCIF_GCCTRL_PLL1, + AVR32_SCIF_GC_NO_DIV_CLOCK, + 0); + // Now enable the generic clock + scif_gc_enable(AVR32_SCIF_GCLK_USB); + return PASS; + #else + return PCL_NOT_SUPPORTED; + #endif +#endif +} + + +#if UC3L +#else +void pcl_write_gplp(unsigned long gplp, unsigned long value) +{ +#ifndef AVR32_PM_VERSION_RESETVALUE +// Implementation for UC3A, UC3A3, UC3B parts. + pm_write_gplp(&AVR32_PM,gplp,value); +#else + scif_write_gplp(gplp,value); +#endif +} + +unsigned long pcl_read_gplp(unsigned long gplp) +{ +#ifndef AVR32_PM_VERSION_RESETVALUE +// Implementation for UC3A, UC3A3, UC3B parts. + return pm_read_gplp(&AVR32_PM,gplp); +#else + return scif_read_gplp(gplp); +#endif +} +#endif diff --git a/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/power_clocks_lib.h b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/power_clocks_lib.h new file mode 100644 index 000000000..28c5888da --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/power_clocks_lib.h @@ -0,0 +1,379 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file has been prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief High-level library abstracting features such as oscillators/pll/dfll + * configuration, clock configuration, System-sensible parameters + * configuration, buses clocks configuration, sleep mode, reset. + * + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + *****************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _POWER_CLOCKS_LIB_H_ +#define _POWER_CLOCKS_LIB_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include "compiler.h" + +#ifndef AVR32_PM_VERSION_RESETVALUE +// Support for UC3A, UC3A3, UC3B parts. + #include "pm.h" +#else +//! Device-specific data +#if UC3L + #include "pm_uc3l.h" + #include "scif_uc3l.h" + #include "flashcdw.h" +#elif UC3C + #include "pm_uc3c.h" + #include "scif_uc3c.h" + #include "flashc.h" +#endif +#endif + +/*! \name Clocks Management + */ +//! @{ + +//! The different oscillators +typedef enum +{ + PCL_OSC0 = 0, + PCL_OSC1 = 1 +} pcl_osc_t; + +//! The different DFLLs +typedef enum +{ + PCL_DFLL0 = 0, + PCL_DFLL1 = 1 +} pcl_dfll_t; + +//! Possible Main Clock Sources +typedef enum +{ + PCL_MC_RCSYS, // Default main clock source, supported by all (aka Slow Clock) + PCL_MC_OSC0, // Supported by all + PCL_MC_OSC1, // Supported by UC3C only + PCL_MC_OSC0_PLL0, // Supported by UC3A, UC3B, UC3A3, UC3C (the main clock source is PLL0 with OSC0 as reference) + PCL_MC_OSC1_PLL0, // Supported by UC3A, UC3B, UC3A3, UC3C (the main clock source is PLL0 with OSC1 as reference) + PCL_MC_OSC0_PLL1, // Supported by UC3C (the main clock source is PLL1 with OSC0 as reference) + PCL_MC_OSC1_PLL1, // Supported by UC3C (the main clock source is PLL1 with OSC1 as reference) + PCL_MC_DFLL0, // Supported by UC3L + PCL_MC_DFLL1, // Not supported yet + PCL_MC_RC120M, // Supported by UC3L, UC3C + PCL_MC_RC8M, // Supported by UC3C + PCL_MC_CRIPOSC // Supported by UC3C +} pcl_mainclk_t; + +//! Input and output parameters to configure clocks with pcl_configure_clocks(). +// NOTE: regarding the frequency settings, always abide by the datasheet rules and min & max supported frequencies. +#ifndef AVR32_PM_VERSION_RESETVALUE +// Support for UC3A, UC3A3, UC3B parts. +#define pcl_freq_param_t pm_freq_param_t // See pm.h +#else +// Support for UC3C, UC3L parts. +typedef struct +{ + //! Main clock source selection (input argument). + pcl_mainclk_t main_clk_src; + + //! Target CPU frequency (input/output argument). + unsigned long cpu_f; + + //! Target PBA frequency (input/output argument). + unsigned long pba_f; + + //! Target PBB frequency (input/output argument). + unsigned long pbb_f; + + //! Target PBC frequency (input/output argument). + unsigned long pbc_f; + + //! Oscillator 0's external crystal(or external clock) frequency (board dependant) (input argument). + unsigned long osc0_f; + + //! Oscillator 0's external crystal(or external clock) startup time: AVR32_PM_OSCCTRL0_STARTUP_x_RCOSC (input argument). + unsigned long osc0_startup; + + //! DFLL target frequency (input/output argument) (NOTE: the bigger, the most stable the frequency) + unsigned long dfll_f; + + //! Other parameters that might be necessary depending on the device (implementation-dependent). + // For the UC3L DFLL setup, this parameter should be pointing to a structure of + // type (scif_gclk_opt_t *). + void *pextra_params; +} pcl_freq_param_t; +#endif + +//! Define "not supported" for the lib. +#define PCL_NOT_SUPPORTED (-10000) + +/*! \brief Automatically configure the CPU, PBA, PBB, and HSB clocks + * + * This function needs some parameters stored in a pcl_freq_param_t structure: + * - main_clk_src is the id of the main clock source to use, + * - cpu_f and pba_f and pbb_f are the wanted frequencies, + * - osc0_f is the oscillator 0's external crystal (or external clock) on-board frequency (e.g. FOSC0), + * - osc0_startup is the oscillator 0's external crystal (or external clock) startup time (e.g. OSC0_STARTUP). + * - dfll_f is the target DFLL frequency to set-up if main_clk_src is the dfll. + * + * The CPU, HSB and PBA frequencies programmed after configuration are stored back into cpu_f and pba_f. + * + * \note: since it is dynamically computing the appropriate field values of the + * configuration registers from the parameters structure, this function is not + * optimal in terms of code size. For a code size optimal solution, it is better + * to create a new function from pcl_configure_clocks() and modify it to use + * preprocessor computation from pre-defined target frequencies. + * + * \param param pointer on the configuration structure. + * + * \retval 0 Success. + * \retval <0 The configuration cannot be performed. + */ +extern long int pcl_configure_clocks(pcl_freq_param_t *param); + +/*! \brief Automatically configure the CPU, PBA, PBB, and HSB clocks using the RCSYS osc as main source clock. + * + * This function needs some parameters stored in a pcl_freq_param_t structure: + * - cpu_f and pba_f and pbb_f are the wanted frequencies + * + * Supported main clock sources: PCL_MC_RCSYS + * + * Supported synchronous clocks frequencies: + * 115200Hz, 57600Hz, 28800Hz, 14400Hz, 7200Hz, 3600Hz, 1800Hz, 900Hz, 450Hz. + * + * \note: by default, this implementation doesn't perform thorough checks on the + * input parameters. To enable the checks, define AVR32SFW_INPUT_CHECK. + * + * \note: since it is dynamically computing the appropriate field values of the + * configuration registers from the parameters structure, this function is not + * optimal in terms of code size. For a code size optimal solution, it is better + * to create a new function from pcl_configure_clocks_rcsys() and modify it to use + * preprocessor computation from pre-defined target frequencies. + * + * \param param pointer on the configuration structure. + * + * \retval 0 Success. + * \retval <0 The configuration cannot be performed. + */ +extern long int pcl_configure_clocks_rcsys(pcl_freq_param_t *param); + +/*! \brief Automatically configure the CPU, PBA, PBB, and HSB clocks using the RC120M osc as main source clock. + * + * This function needs some parameters stored in a pcl_freq_param_t structure: + * - cpu_f and pba_f and pbb_f are the wanted frequencies + * + * Supported main clock sources: PCL_MC_RC120M + * + * Supported synchronous clocks frequencies: + * 30MHz, 15MHz, 7.5MHz, 3.75MHz, 1.875MHz, 937.5kHz, 468.75kHz. + * + * \note: by default, this implementation doesn't perform thorough checks on the + * input parameters. To enable the checks, define AVR32SFW_INPUT_CHECK. + * + * \note: since it is dynamically computing the appropriate field values of the + * configuration registers from the parameters structure, this function is not + * optimal in terms of code size. For a code size optimal solution, it is better + * to create a new function from pcl_configure_clocks_rc120m() and modify it to + * use preprocessor computation from pre-defined target frequencies. + * + * \param param pointer on the configuration structure. + * + * \retval 0 Success. + * \retval <0 The configuration cannot be performed. + */ +extern long int pcl_configure_clocks_rc120m(pcl_freq_param_t *param); + +/*! \brief Automatically configure the CPU, PBA, PBB, and HSB clocks using the OSC0 osc as main source clock + * + * This function needs some parameters stored in a pcl_freq_param_t structure: + * - cpu_f and pba_f and pbb_f are the wanted frequencies, + * - osc0_f is the oscillator 0's external crystal (or external clock) on-board frequency (e.g. FOSC0), + * - osc0_startup is the oscillator 0's external crystal (or external clock) startup time (e.g. OSC0_STARTUP). + * + * Supported main clock sources: PCL_MC_OSC0 + * + * Supported synchronous clocks frequencies: + * (these obviously depend on the OSC0 frequency; we'll take 16MHz as an example) + * 16MHz, 8MHz, 4MHz, 2MHz, 1MHz, 500kHz, 250kHz, 125kHz, 62.5kHz. + * + * \note: by default, this implementation doesn't perform thorough checks on the + * input parameters. To enable the checks, define AVR32SFW_INPUT_CHECK. + * + * \note: since it is dynamically computing the appropriate field values of the + * configuration registers from the parameters structure, this function is not + * optimal in terms of code size. For a code size optimal solution, it is better + * to create a new function from pcl_configure_clocks_osc0() and modify it to use + * preprocessor computation from pre-defined target frequencies. + * + * \param param pointer on the configuration structure. + * + * \retval 0 Success. + * \retval <0 The configuration cannot be performed. + */ +extern long int pcl_configure_clocks_osc0(pcl_freq_param_t *param); + +/*! \brief Automatically configure the CPU, PBA, PBB, and HSB clocks using the DFLL0 as main source clock + * + * This function needs some parameters stored in a pcl_freq_param_t structure: + * - cpu_f and pba_f and pbb_f are the wanted frequencies, + * - dfll_f is the target DFLL frequency to set-up + * + * \note: when the DFLL0 is to be used as main source clock for the synchronous clocks, + * the target frequency of the DFLL should be chosen to be as high as possible + * within the specification range (for stability reasons); the target cpu and pbx + * frequencies will then be reached by appropriate division ratio. + * + * Supported main clock sources: PCL_MC_DFLL0 + * + * Supported synchronous clocks frequencies: + * (these obviously depend on the DFLL target frequency; we'll take 100MHz as an example) + * 50MHz, 25MHz, 12.5MHz, 6.25MHz, 3.125MHz, 1562.5kHz, 781.25kHz, 390.625kHz. + * + * \note: by default, this implementation doesn't perform thorough checks on the + * input parameters. To enable the checks, define AVR32SFW_INPUT_CHECK. + * + * \note: since it is dynamically computing the appropriate field values of the + * configuration registers from the parameters structure, this function is not + * optimal in terms of code size. For a code size optimal solution, it is better + * to create a new function from pcl_configure_clocks_dfll0() and modify it to + * use preprocessor computation from pre-defined target frequencies. + * + * \param param pointer on the configuration structure. + * + * \retval 0 Success. + * \retval <0 The configuration cannot be performed. + */ +extern long int pcl_configure_clocks_dfll0(pcl_freq_param_t *param); + +/*! \brief Switch the main clock source to Osc0 configured in crystal mode + * + * \param osc The oscillator to enable and switch to. + * \param fcrystal Oscillator external crystal frequency (Hz) + * \param startup Oscillator startup time. + * + * \return Status. + * \retval 0 Success. + * \retval <0 An error occured. + */ +extern long int pcl_switch_to_osc(pcl_osc_t osc, unsigned int fcrystal, unsigned int startup); + +/*! \brief Enable the clock of a module. + * + * \param module The module to clock (use one of the defines in the part-specific + * header file under "toolchain folder"/avr32/inc(lude)/avr32/; depending on the + * clock domain, look for the sections "CPU clocks", "HSB clocks", "PBx clocks" + * or look in the module section). + * + * \return Status. + * \retval 0 Success. + * \retval <0 An error occured. + */ +#ifndef AVR32_PM_VERSION_RESETVALUE +// Implementation for UC3A, UC3A3, UC3B parts. +#define pcl_enable_module(module) pm_enable_module(&AVR32_PM, module) +#else +// Implementation for UC3C, UC3L parts. +#define pcl_enable_module(module) pm_enable_module(module) +#endif + +/*! \brief Disable the clock of a module. + * + * \param module The module to shut down (use one of the defines in the part-specific + * header file under "toolchain folder"/avr32/inc(lude)/avr32/; depending on the + * clock domain, look for the sections "CPU clocks", "HSB clocks", "PBx clocks" + * or look in the module section). + * + * \return Status. + * \retval 0 Success. + * \retval <0 An error occured. + */ +#ifndef AVR32_PM_VERSION_RESETVALUE +// Implementation for UC3A, UC3A3, UC3B parts. +#define pcl_disable_module(module) pm_disable_module(&AVR32_PM, module) +#else +// Implementation for UC3C, UC3L parts. +#define pcl_disable_module(module) pm_disable_module(module) +#endif + +/*! \brief Configure the USB Clock + * + * + * \return Status. + * \retval 0 Success. + * \retval <0 An error occured. + */ +extern long int pcl_configure_usb_clock(void); + +//! @} + +/*! \name Power Management + */ +//! @{ +/*! + * \brief Read the content of the GPLP registers + * \param gplp GPLP register index (0,1,... depending on the number of GPLP registers for a given part) + * + * \return The content of the chosen GPLP register. + */ +extern unsigned long pcl_read_gplp(unsigned long gplp); + + +/*! + * \brief Write into the GPLP registers + * \param gplp GPLP register index (0,1,... depending on the number of GPLP registers for a given part) + * \param value Value to write + */ +extern void pcl_write_gplp(unsigned long gplp, unsigned long value); + +//! @} + +#ifdef __cplusplus +} +#endif + +#endif // _POWER_CLOCKS_LIB_H_ diff --git a/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/SPI/spi.c b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/SPI/spi.c new file mode 100644 index 000000000..cadb8b15e --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/SPI/spi.c @@ -0,0 +1,443 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief SPI driver for AVR32 UC3. + * + * This file defines a useful set of functions for the SPI interface on AVR32 + * devices. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with an SPI module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#include "spi.h" + +#ifdef FREERTOS_USED + +#include "FreeRTOS.h" +#include "semphr.h" + +#endif + + +/*! \name SPI Writable Bit-Field Registers + */ +//! @{ + +typedef union +{ + unsigned long cr; + avr32_spi_cr_t CR; +} u_avr32_spi_cr_t; + +typedef union +{ + unsigned long mr; + avr32_spi_mr_t MR; +} u_avr32_spi_mr_t; + +typedef union +{ + unsigned long tdr; + avr32_spi_tdr_t TDR; +} u_avr32_spi_tdr_t; + +typedef union +{ + unsigned long ier; + avr32_spi_ier_t IER; +} u_avr32_spi_ier_t; + +typedef union +{ + unsigned long idr; + avr32_spi_idr_t IDR; +} u_avr32_spi_idr_t; + +typedef union +{ + unsigned long csr; + avr32_spi_csr0_t CSR; +} u_avr32_spi_csr_t; + +//! @} + + +#ifdef FREERTOS_USED + +//! The SPI mutex. +static xSemaphoreHandle xSPIMutex; + +#endif + + +/*! \brief Calculates the baudrate divider. + * + * \param options Pointer to a structure containing initialization options for + * an SPI channel. + * \param pba_hz SPI module input clock frequency (PBA clock, Hz). + * + * \return Divider or error code. + * \retval >=0 Success. + * \retval <0 Error. + */ +static int getBaudDiv(const spi_options_t *options, unsigned int pba_hz) +{ + int baudDiv = (pba_hz + options->baudrate / 2) / options->baudrate; + + if (baudDiv <= 0 || baudDiv > 255) { + return -1; + } + + return baudDiv; +} + + +void spi_reset(volatile avr32_spi_t *spi) +{ + spi->cr = AVR32_SPI_CR_SWRST_MASK; +} + + +spi_status_t spi_initSlave(volatile avr32_spi_t *spi, + unsigned char bits, + unsigned char spi_mode) +{ + if (spi_mode > 3 || + bits < 8 || bits > 16) { + return SPI_ERROR_ARGUMENT; + } + + // Reset. + spi->cr = AVR32_SPI_CR_SWRST_MASK; + + // Will use CSR0 offsets; these are the same for CSR0 to CSR3. + spi->csr0 = ((spi_mode >> 1) << AVR32_SPI_CSR0_CPOL_OFFSET) | + (((spi_mode & 0x1) ^ 0x1) << AVR32_SPI_CSR0_NCPHA_OFFSET) | + ((bits - 8) << AVR32_SPI_CSR0_BITS_OFFSET); + + return SPI_OK; +} + + +spi_status_t spi_initTest(volatile avr32_spi_t *spi) +{ + // Reset. + spi->cr = AVR32_SPI_CR_SWRST_MASK; + spi->mr |= AVR32_SPI_MR_MSTR_MASK | // Master Mode. + AVR32_SPI_MR_LLB_MASK; // Local Loopback. + + return SPI_OK; +} + + +spi_status_t spi_initMaster(volatile avr32_spi_t *spi, const spi_options_t *options) +{ + u_avr32_spi_mr_t u_avr32_spi_mr; + + if (options->modfdis > 1) { + return SPI_ERROR_ARGUMENT; + } + + // Reset. + spi->cr = AVR32_SPI_CR_SWRST_MASK; + + // Master Mode. + u_avr32_spi_mr.mr = spi->mr; + u_avr32_spi_mr.MR.mstr = 1; + u_avr32_spi_mr.MR.modfdis = options->modfdis; + u_avr32_spi_mr.MR.llb = 0; + u_avr32_spi_mr.MR.pcs = (1 << AVR32_SPI_MR_PCS_SIZE) - 1; + spi->mr = u_avr32_spi_mr.mr; + + return SPI_OK; +} + + +spi_status_t spi_selectionMode(volatile avr32_spi_t *spi, + unsigned char variable_ps, + unsigned char pcs_decode, + unsigned char delay) +{ + u_avr32_spi_mr_t u_avr32_spi_mr; + + if (variable_ps > 1 || + pcs_decode > 1) { + return SPI_ERROR_ARGUMENT; + } + + u_avr32_spi_mr.mr = spi->mr; + u_avr32_spi_mr.MR.ps = variable_ps; + u_avr32_spi_mr.MR.pcsdec = pcs_decode; + u_avr32_spi_mr.MR.dlybcs = delay; + spi->mr = u_avr32_spi_mr.mr; + + return SPI_OK; +} + + +spi_status_t spi_selectChip(volatile avr32_spi_t *spi, unsigned char chip) +{ +#ifdef FREERTOS_USED + while (pdFALSE == xSemaphoreTake(xSPIMutex, 20)); +#endif + + // Assert all lines; no peripheral is selected. + spi->mr |= AVR32_SPI_MR_PCS_MASK; + + if (spi->mr & AVR32_SPI_MR_PCSDEC_MASK) { + // The signal is decoded; allow up to 15 chips. + if (chip > 14) { + return SPI_ERROR_ARGUMENT; + } + + spi->mr &= ~AVR32_SPI_MR_PCS_MASK | (chip << AVR32_SPI_MR_PCS_OFFSET); + } else { + if (chip > 3) { + return SPI_ERROR_ARGUMENT; + } + + spi->mr &= ~(1 << (AVR32_SPI_MR_PCS_OFFSET + chip)); + } + + return SPI_OK; +} + + +spi_status_t spi_unselectChip(volatile avr32_spi_t *spi, unsigned char chip) +{ + unsigned int timeout = SPI_TIMEOUT; + + while (!(spi->sr & AVR32_SPI_SR_TXEMPTY_MASK)) { + if (!timeout--) { + return SPI_ERROR_TIMEOUT; + } + } + + // Assert all lines; no peripheral is selected. + spi->mr |= AVR32_SPI_MR_PCS_MASK; + + // Last transfer, so deassert the current NPCS if CSAAT is set. + spi->cr = AVR32_SPI_CR_LASTXFER_MASK; + +#ifdef FREERTOS_USED + xSemaphoreGive(xSPIMutex); +#endif + + return SPI_OK; +} + + +spi_status_t spi_setupChipReg(volatile avr32_spi_t *spi, + const spi_options_t *options, + unsigned int pba_hz) +{ + u_avr32_spi_csr_t u_avr32_spi_csr; + + if (options->spi_mode > 3 || + options->stay_act > 1 || + options->bits < 8 || options->bits > 16) { + return SPI_ERROR_ARGUMENT; + } + + int baudDiv = getBaudDiv(options, pba_hz); + + if (baudDiv < 0) { + return SPI_ERROR_ARGUMENT; + } + + // Will use CSR0 offsets; these are the same for CSR0 to CSR3. + u_avr32_spi_csr.csr = 0; + u_avr32_spi_csr.CSR.cpol = options->spi_mode >> 1; + u_avr32_spi_csr.CSR.ncpha = (options->spi_mode & 0x1) ^ 0x1; + u_avr32_spi_csr.CSR.csaat = options->stay_act; + u_avr32_spi_csr.CSR.bits = options->bits - 8; + u_avr32_spi_csr.CSR.scbr = baudDiv; + u_avr32_spi_csr.CSR.dlybs = options->spck_delay; + u_avr32_spi_csr.CSR.dlybct = options->trans_delay; + + switch(options->reg) { + case 0: + spi->csr0 = u_avr32_spi_csr.csr; + break; + case 1: + spi->csr1 = u_avr32_spi_csr.csr; + break; + case 2: + spi->csr2 = u_avr32_spi_csr.csr; + break; + case 3: + spi->csr3 = u_avr32_spi_csr.csr; + break; + default: + return SPI_ERROR_ARGUMENT; + } + +#ifdef FREERTOS_USED + if (!xSPIMutex) + { + // Create the SPI mutex. + vSemaphoreCreateBinary(xSPIMutex); + if (!xSPIMutex) + { + while(1); + } + } +#endif + + return SPI_OK; +} + + +void spi_enable(volatile avr32_spi_t *spi) +{ + spi->cr = AVR32_SPI_CR_SPIEN_MASK; +} + + +void spi_disable(volatile avr32_spi_t *spi) +{ + spi->cr = AVR32_SPI_CR_SPIDIS_MASK; +} + + +int spi_is_enabled(volatile avr32_spi_t *spi) +{ + return (spi->sr & AVR32_SPI_SR_SPIENS_MASK) != 0; +} + + +unsigned char spi_writeRegisterEmptyCheck(volatile avr32_spi_t *spi) +{ + return ((spi->sr & AVR32_SPI_SR_TDRE_MASK) != 0); +} + + +spi_status_t spi_write(volatile avr32_spi_t *spi, unsigned short data) +{ + unsigned int timeout = SPI_TIMEOUT; + + while (!(spi->sr & AVR32_SPI_SR_TDRE_MASK)) { + if (!timeout--) { + return SPI_ERROR_TIMEOUT; + } + } + + spi->tdr = data << AVR32_SPI_TDR_TD_OFFSET; + + return SPI_OK; +} + + +spi_status_t spi_variableSlaveWrite(volatile avr32_spi_t *spi, unsigned short data, + unsigned char pcs, unsigned char lastxfer) +{ + unsigned int timeout = SPI_TIMEOUT; + + if (pcs > 14 || lastxfer > 1) { + return SPI_ERROR_ARGUMENT; + } + + while (!(spi->sr & AVR32_SPI_SR_TDRE_MASK)) { + if (!timeout--) { + return SPI_ERROR_TIMEOUT; + } + } + + spi->tdr = (data << AVR32_SPI_TDR_TD_OFFSET) | + (pcs << AVR32_SPI_TDR_PCS_OFFSET) | + (lastxfer << AVR32_SPI_TDR_LASTXFER_OFFSET); + + return SPI_OK; +} + + +unsigned char spi_writeEndCheck(volatile avr32_spi_t *spi) +{ + return ((spi->sr & AVR32_SPI_SR_TXEMPTY_MASK) != 0); +} + + +unsigned char spi_readRegisterFullCheck(volatile avr32_spi_t *spi) +{ + return ((spi->sr & AVR32_SPI_SR_RDRF_MASK) != 0); +} + + +spi_status_t spi_read(volatile avr32_spi_t *spi, unsigned short *data) +{ + unsigned int timeout = SPI_TIMEOUT; + + while ((spi->sr & (AVR32_SPI_SR_RDRF_MASK | AVR32_SPI_SR_TXEMPTY_MASK)) != + (AVR32_SPI_SR_RDRF_MASK | AVR32_SPI_SR_TXEMPTY_MASK)) { + if (!timeout--) { + return SPI_ERROR_TIMEOUT; + } + } + + *data = spi->rdr >> AVR32_SPI_RDR_RD_OFFSET; + + return SPI_OK; +} + + +unsigned char spi_getStatus(volatile avr32_spi_t *spi) +{ + spi_status_t ret = SPI_OK; + unsigned long sr = spi->sr; + + if (sr & AVR32_SPI_SR_OVRES_MASK) { + ret = SPI_ERROR_OVERRUN; + } + + if (sr & AVR32_SPI_SR_MODF_MASK) { + ret += SPI_ERROR_MODE_FAULT; + } + + if (ret == (SPI_ERROR_OVERRUN + SPI_ERROR_MODE_FAULT)) { + return SPI_ERROR_OVERRUN_AND_MODE_FAULT; + } + else if (ret > 0) { + return ret; + } else { + return SPI_OK; + } +} diff --git a/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/SPI/spi.h b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/SPI/spi.h new file mode 100644 index 000000000..6dcc92848 --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/SPI/spi.h @@ -0,0 +1,342 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief SPI driver for AVR32 UC3. + * + * This file defines a useful set of functions for the SPI interface on AVR32 + * devices. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with an SPI module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _SPI_H_ +#define _SPI_H_ + +#include + + +//! Time-out value (number of attempts). +#define SPI_TIMEOUT 10000 + + +//! Status codes used by the SPI driver. +typedef enum +{ + SPI_ERROR = -1, + SPI_OK = 0, + SPI_ERROR_TIMEOUT = 1, + SPI_ERROR_ARGUMENT, + SPI_ERROR_OVERRUN, + SPI_ERROR_MODE_FAULT, + SPI_ERROR_OVERRUN_AND_MODE_FAULT +} spi_status_t; + +//! Option structure for SPI channels. +typedef struct +{ + //! The SPI channel to set up. + unsigned char reg; + + //! Preferred baudrate for the SPI. + unsigned int baudrate; + + //! Number of bits in each character (8 to 16). + unsigned char bits; + + //! Delay before first clock pulse after selecting slave (in PBA clock periods). + unsigned char spck_delay; + + //! Delay between each transfer/character (in PBA clock periods). + unsigned char trans_delay; + + //! Sets this chip to stay active after last transfer to it. + unsigned char stay_act; + + //! Which SPI mode to use when transmitting. + unsigned char spi_mode; + + //! Disables the mode fault detection. + //! With this bit cleared, the SPI master mode will disable itself if another + //! master tries to address it. + unsigned char modfdis; +} spi_options_t; + + +/*! \brief Resets the SPI controller. + * + * \param spi Base address of the SPI instance. + */ +extern void spi_reset(volatile avr32_spi_t *spi); + +/*! \brief Initializes the SPI in slave mode. + * + * \param spi Base address of the SPI instance. + * \param bits Number of bits in each transmitted character (8 to 16). + * \param spi_mode Clock polarity and phase. + * + * \return Status. + * \retval SPI_OK Success. + * \retval SPI_ERROR_ARGUMENT Invalid argument(s) passed. + */ +extern spi_status_t spi_initSlave(volatile avr32_spi_t *spi, + unsigned char bits, + unsigned char spi_mode); + +/*! \brief Sets up the SPI in a test mode where the transmitter is connected to + * the receiver (local loopback). + * + * \param spi Base address of the SPI instance. + * + * \return Status. + * \retval SPI_OK Success. + */ +extern spi_status_t spi_initTest(volatile avr32_spi_t *spi); + +/*! \brief Initializes the SPI in master mode. + * + * \param spi Base address of the SPI instance. + * \param options Pointer to a structure containing initialization options. + * + * \return Status. + * \retval SPI_OK Success. + * \retval SPI_ERROR_ARGUMENT Invalid argument(s) passed. + */ +extern spi_status_t spi_initMaster(volatile avr32_spi_t *spi, const spi_options_t *options); + +/*! \brief Sets up how and when the slave chips are selected (master mode only). + * + * \param spi Base address of the SPI instance. + * \param variable_ps Target slave is selected in transfer register for every + * character to transmit. + * \param pcs_decode The four chip select lines are decoded externally. Values + * 0 to 14 can be given to \ref spi_selectChip. + * \param delay Delay in PBA periods between chip selects. + * + * \return Status. + * \retval SPI_OK Success. + * \retval SPI_ERROR_ARGUMENT Invalid argument(s) passed. + */ +extern spi_status_t spi_selectionMode(volatile avr32_spi_t *spi, + unsigned char variable_ps, + unsigned char pcs_decode, + unsigned char delay); + +/*! \brief Selects slave chip. + * + * \param spi Base address of the SPI instance. + * \param chip Slave chip number (normal: 0 to 3, extarnally decoded signal: 0 + * to 14). + * + * \return Status. + * \retval SPI_OK Success. + * \retval SPI_ERROR_ARGUMENT Invalid argument(s) passed. + */ +extern spi_status_t spi_selectChip(volatile avr32_spi_t *spi, unsigned char chip); + +/*! \brief Unselects slave chip. + * + * \param spi Base address of the SPI instance. + * \param chip Slave chip number (normal: 0 to 3, extarnally decoded signal: 0 + * to 14). + * + * \return Status. + * \retval SPI_OK Success. + * \retval SPI_ERROR_TIMEOUT Time-out. + * + * \note Will block program execution until time-out occurs if last transmission + * is not complete. Invoke \ref spi_writeEndCheck beforehand if needed. + */ +extern spi_status_t spi_unselectChip(volatile avr32_spi_t *spi, unsigned char chip); + +/*! \brief Sets options for a specific slave chip. + * + * The baudrate field has to be written before transfer in master mode. Four + * similar registers exist, one for each slave. When using encoded slave + * addressing, reg=0 sets options for slaves 0 to 3, reg=1 for slaves 4 to 7 and + * so on. + * + * \param spi Base address of the SPI instance. + * \param options Pointer to a structure containing initialization options for + * an SPI channel. + * \param pba_hz SPI module input clock frequency (PBA clock, Hz). + * + * \return Status. + * \retval SPI_OK Success. + * \retval SPI_ERROR_ARGUMENT Invalid argument(s) passed. + */ +extern spi_status_t spi_setupChipReg(volatile avr32_spi_t *spi, + const spi_options_t *options, + unsigned int pba_hz); + +/*! \brief Enables the SPI. + * + * \param spi Base address of the SPI instance. + */ +extern void spi_enable(volatile avr32_spi_t *spi); + +/*! \brief Disables the SPI. + * + * Ensures that nothing is transferred while setting up buffers. + * + * \param spi Base address of the SPI instance. + * + * \warning This may cause data loss if used on a slave SPI. + */ +extern void spi_disable(volatile avr32_spi_t *spi); + +/*! \brief Tests if the SPI is enabled. + * + * \param spi Base address of the SPI instance. + * + * \return \c 1 if the SPI is enabled, otherwise \c 0. + */ +extern int spi_is_enabled(volatile avr32_spi_t *spi); + +/*! \brief Checks if there is no data in the transmit register. + * + * \param spi Base address of the SPI instance. + * + * \return Status. + * \retval 1 No data in TDR. + * \retval 0 Some data in TDR. + */ +extern unsigned char spi_writeRegisterEmptyCheck(volatile avr32_spi_t *spi); + +/*! \brief Writes one data word in master fixed peripheral select mode or in + * slave mode. + * + * \param spi Base address of the SPI instance. + * \param data The data word to write. + * + * \return Status. + * \retval SPI_OK Success. + * \retval SPI_ERROR_TIMEOUT Time-out. + * + * \note Will block program execution until time-out occurs if transmitter is + * busy and transmit buffer is full. Invoke + * \ref spi_writeRegisterEmptyCheck beforehand if needed. + * + * \note Once the data has been written to the transmit buffer, the end of + * transmission is not waited for. Invoke \ref spi_writeEndCheck if + * needed. + */ +extern spi_status_t spi_write(volatile avr32_spi_t *spi, unsigned short data); + +/*! \brief Selects a slave in master variable peripheral select mode and writes + * one data word to it. + * + * \param spi Base address of the SPI instance. + * \param data The data word to write. + * \param pcs Slave selector (bit 0 -> nCS line 0, bit 1 -> nCS line 1, + * etc.). + * \param lastxfer Boolean indicating whether this is the last data word + * transfer. + * + * \return Status. + * \retval SPI_OK Success. + * \retval SPI_ERROR_TIMEOUT Time-out. + * \retval SPI_ERROR_ARGUMENT Invalid argument(s) passed. + * + * \note Will block program execution until time-out occurs if transmitter is + * busy and transmit buffer is full. Invoke + * \ref spi_writeRegisterEmptyCheck beforehand if needed. + * + * \note Once the data has been written to the transmit buffer, the end of + * transmission is not waited for. Invoke \ref spi_writeEndCheck if + * needed. + */ +extern spi_status_t spi_variableSlaveWrite(volatile avr32_spi_t *spi, + unsigned short data, + unsigned char pcs, + unsigned char lastxfer); + +/*! \brief Checks if all transmissions are complete. + * + * \param spi Base address of the SPI instance. + * + * \return Status. + * \retval 1 All transmissions complete. + * \retval 0 Transmissions not complete. + */ +extern unsigned char spi_writeEndCheck(volatile avr32_spi_t *spi); + +/*! \brief Checks if there is data in the receive register. + * + * \param spi Base address of the SPI instance. + * + * \return Status. + * \retval 1 Some data in RDR. + * \retval 0 No data in RDR. + */ +extern unsigned char spi_readRegisterFullCheck(volatile avr32_spi_t *spi); + +/*! \brief Reads one data word in master mode or in slave mode. + * + * \param spi Base address of the SPI instance. + * \param data Pointer to the location where to store the received data word. + * + * \return Status. + * \retval SPI_OK Success. + * \retval SPI_ERROR_TIMEOUT Time-out. + * + * \note Will block program execution until time-out occurs if no data is + * received or last transmission is not complete. Invoke + * \ref spi_writeEndCheck or \ref spi_readRegisterFullCheck beforehand if + * needed. + */ +extern spi_status_t spi_read(volatile avr32_spi_t *spi, unsigned short *data); + +/*! \brief Gets status information from the SPI. + * + * \param spi Base address of the SPI instance. + * + * \return Status. + * \retval SPI_OK Success. + * \retval SPI_ERROR_OVERRUN Overrun error. + * \retval SPI_ERROR_MODE_FAULT Mode fault (SPI addressed as slave + * while in master mode). + * \retval SPI_ERROR_OVERRUN_AND_MODE_FAULT Overrun error and mode fault. + */ +extern unsigned char spi_getStatus(volatile avr32_spi_t *spi); + + +#endif // _SPI_H_ diff --git a/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/USART/usart.c b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/USART/usart.c new file mode 100644 index 000000000..b95882a75 --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/USART/usart.c @@ -0,0 +1,914 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief USART driver for AVR32 UC3. + * + * This file contains basic functions for the AVR32 USART, with support for all + * modes, settings and clock speeds. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with a USART module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#include "compiler.h" +#include "usart.h" + + +//------------------------------------------------------------------------------ +/*! \name Private Functions + */ +//! @{ + + +/*! \brief Checks if the USART is in multidrop mode. + * + * \param usart Base address of the USART instance. + * + * \return \c 1 if the USART is in multidrop mode, otherwise \c 0. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +static __inline__ int usart_mode_is_multidrop(volatile avr32_usart_t *usart) +{ + return ((usart->mr >> AVR32_USART_MR_PAR_OFFSET) & AVR32_USART_MR_PAR_MULTI) == AVR32_USART_MR_PAR_MULTI; +} + + +/*! \brief Calculates a clock divider (\e CD) and a fractional part (\e FP) for + * the USART asynchronous modes to generate a baud rate as close as + * possible to the baud rate set point. + * + * Baud rate calculation: + * \f$ Baudrate = \frac{SelectedClock}{Over \times (CD + \frac{FP}{8})} \f$, \e Over being 16 or 8. + * The maximal oversampling is selected if it allows to generate a baud rate close to the set point. + * + * \param usart Base address of the USART instance. + * \param baudrate Baud rate set point. + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + * \retval USART_SUCCESS Baud rate successfully initialized. + * \retval USART_INVALID_INPUT Baud rate set point is out of range for the given input clock frequency. + */ +static int usart_set_async_baudrate(volatile avr32_usart_t *usart, unsigned int baudrate, unsigned long pba_hz) +{ + unsigned int over = (pba_hz >= 16 * baudrate) ? 16 : 8; + unsigned int cd_fp = ((1 << AVR32_USART_BRGR_FP_SIZE) * pba_hz + (over * baudrate) / 2) / (over * baudrate); + unsigned int cd = cd_fp >> AVR32_USART_BRGR_FP_SIZE; + unsigned int fp = cd_fp & ((1 << AVR32_USART_BRGR_FP_SIZE) - 1); + + if (cd < 1 || cd > (1 << AVR32_USART_BRGR_CD_SIZE) - 1) + return USART_INVALID_INPUT; + + usart->mr = (usart->mr & ~(AVR32_USART_MR_USCLKS_MASK | + AVR32_USART_MR_SYNC_MASK | + AVR32_USART_MR_OVER_MASK)) | + AVR32_USART_MR_USCLKS_MCK << AVR32_USART_MR_USCLKS_OFFSET | + ((over == 16) ? AVR32_USART_MR_OVER_X16 : AVR32_USART_MR_OVER_X8) << AVR32_USART_MR_OVER_OFFSET; + + usart->brgr = cd << AVR32_USART_BRGR_CD_OFFSET | + fp << AVR32_USART_BRGR_FP_OFFSET; + + return USART_SUCCESS; +} + + +/*! \brief Calculates a clock divider (\e CD) for the USART synchronous master + * modes to generate a baud rate as close as possible to the baud rate + * set point. + * + * Baud rate calculation: + * \f$ Baudrate = \frac{SelectedClock}{CD} \f$. + * + * \param usart Base address of the USART instance. + * \param baudrate Baud rate set point. + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + * \retval USART_SUCCESS Baud rate successfully initialized. + * \retval USART_INVALID_INPUT Baud rate set point is out of range for the given input clock frequency. + */ +static int usart_set_sync_master_baudrate(volatile avr32_usart_t *usart, unsigned int baudrate, unsigned long pba_hz) +{ + unsigned int cd = (pba_hz + baudrate / 2) / baudrate; + + if (cd < 1 || cd > (1 << AVR32_USART_BRGR_CD_SIZE) - 1) + return USART_INVALID_INPUT; + + usart->mr = (usart->mr & ~AVR32_USART_MR_USCLKS_MASK) | + AVR32_USART_MR_USCLKS_MCK << AVR32_USART_MR_USCLKS_OFFSET | + AVR32_USART_MR_SYNC_MASK; + + usart->brgr = cd << AVR32_USART_BRGR_CD_OFFSET; + + return USART_SUCCESS; +} + + +/*! \brief Selects the SCK pin as the source of baud rate for the USART + * synchronous slave modes. + * + * \param usart Base address of the USART instance. + * + * \retval USART_SUCCESS Baud rate successfully initialized. + */ +static int usart_set_sync_slave_baudrate(volatile avr32_usart_t *usart) +{ + usart->mr = (usart->mr & ~AVR32_USART_MR_USCLKS_MASK) | + AVR32_USART_MR_USCLKS_SCK << AVR32_USART_MR_USCLKS_OFFSET | + AVR32_USART_MR_SYNC_MASK; + + return USART_SUCCESS; +} + + +/*! \brief Calculates a clock divider (\e CD) for the USART ISO7816 mode to + * generate an ISO7816 clock as close as possible to the clock set point. + * + * ISO7816 clock calculation: + * \f$ Clock = \frac{SelectedClock}{CD} \f$. + * + * \param usart Base address of the USART instance. + * \param clock ISO7816 clock set point. + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + * \retval USART_SUCCESS ISO7816 clock successfully initialized. + * \retval USART_INVALID_INPUT ISO7816 clock set point is out of range for the given input clock frequency. + */ +static int usart_set_iso7816_clock(volatile avr32_usart_t *usart, unsigned int clock, unsigned long pba_hz) +{ + unsigned int cd = (pba_hz + clock / 2) / clock; + + if (cd < 1 || cd > (1 << AVR32_USART_BRGR_CD_SIZE) - 1) + return USART_INVALID_INPUT; + + usart->mr = (usart->mr & ~(AVR32_USART_MR_USCLKS_MASK | + AVR32_USART_MR_SYNC_MASK | + AVR32_USART_MR_OVER_MASK)) | + AVR32_USART_MR_USCLKS_MCK << AVR32_USART_MR_USCLKS_OFFSET | + AVR32_USART_MR_OVER_X16 << AVR32_USART_MR_OVER_OFFSET; + + usart->brgr = cd << AVR32_USART_BRGR_CD_OFFSET; + + return USART_SUCCESS; +} + + +#if defined(AVR32_USART_400_H_INCLUDED) || \ + defined(AVR32_USART_410_H_INCLUDED) || \ + defined(AVR32_USART_420_H_INCLUDED) || \ + defined(AVR32_USART_440_H_INCLUDED) || \ + defined(AVR32_USART_602_H_INCLUDED) + + +/*! \brief Calculates a clock divider (\e CD) for the USART SPI master mode to + * generate a baud rate as close as possible to the baud rate set point. + * + * Baud rate calculation: + * \f$ Baudrate = \frac{SelectedClock}{CD} \f$. + * + * \param usart Base address of the USART instance. + * \param baudrate Baud rate set point. + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + * \retval USART_SUCCESS Baud rate successfully initialized. + * \retval USART_INVALID_INPUT Baud rate set point is out of range for the given input clock frequency. + */ +static int usart_set_spi_master_baudrate(volatile avr32_usart_t *usart, unsigned int baudrate, unsigned long pba_hz) +{ + unsigned int cd = (pba_hz + baudrate / 2) / baudrate; + + if (cd < 4 || cd > (1 << AVR32_USART_BRGR_CD_SIZE) - 1) + return USART_INVALID_INPUT; + + usart->mr = (usart->mr & ~AVR32_USART_MR_USCLKS_MASK) | + AVR32_USART_MR_USCLKS_MCK << AVR32_USART_MR_USCLKS_OFFSET; + + usart->brgr = cd << AVR32_USART_BRGR_CD_OFFSET; + + return USART_SUCCESS; +} + + +/*! \brief Selects the SCK pin as the source of baud rate for the USART SPI + * slave mode. + * + * \param usart Base address of the USART instance. + * + * \retval USART_SUCCESS Baud rate successfully initialized. + */ +static int usart_set_spi_slave_baudrate(volatile avr32_usart_t *usart) +{ + usart->mr = (usart->mr & ~AVR32_USART_MR_USCLKS_MASK) | + AVR32_USART_MR_USCLKS_SCK << AVR32_USART_MR_USCLKS_OFFSET; + + return USART_SUCCESS; +} + + +#endif // USART rev. >= 4.0.0 + + +//! @} + + +//------------------------------------------------------------------------------ +/*! \name Initialization Functions + */ +//! @{ + + +void usart_reset(volatile avr32_usart_t *usart) +{ + Bool global_interrupt_enabled = Is_global_interrupt_enabled(); + + // Disable all USART interrupts. + // Interrupts needed should be set explicitly on every reset. + if (global_interrupt_enabled) Disable_global_interrupt(); + usart->idr = 0xFFFFFFFF; + usart->csr; + if (global_interrupt_enabled) Enable_global_interrupt(); + + // Reset mode and other registers that could cause unpredictable behavior after reset. + usart->mr = 0; + usart->rtor = 0; + usart->ttgr = 0; + + // Shutdown TX and RX (will be re-enabled when setup has successfully completed), + // reset status bits and turn off DTR and RTS. + usart->cr = AVR32_USART_CR_RSTRX_MASK | + AVR32_USART_CR_RSTTX_MASK | + AVR32_USART_CR_RSTSTA_MASK | + AVR32_USART_CR_RSTIT_MASK | + AVR32_USART_CR_RSTNACK_MASK | +#ifndef AVR32_USART_440_H_INCLUDED +// Note: Modem Signal Management DTR-DSR-DCD-RI are not included in USART rev.440. + AVR32_USART_CR_DTRDIS_MASK | +#endif + AVR32_USART_CR_RTSDIS_MASK; +} + + +int usart_init_rs232(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz) +{ + // Reset the USART and shutdown TX and RX. + usart_reset(usart); + + // Check input values. + if (!opt || // Null pointer. + opt->charlength < 5 || opt->charlength > 9 || + opt->paritytype > 7 || + opt->stopbits > 2 + 255 || + opt->channelmode > 3 || + usart_set_async_baudrate(usart, opt->baudrate, pba_hz) == USART_INVALID_INPUT) + return USART_INVALID_INPUT; + + if (opt->charlength == 9) + { + // Character length set to 9 bits. MODE9 dominates CHRL. + usart->mr |= AVR32_USART_MR_MODE9_MASK; + } + else + { + // CHRL gives the character length (- 5) when MODE9 = 0. + usart->mr |= (opt->charlength - 5) << AVR32_USART_MR_CHRL_OFFSET; + } + + usart->mr |= opt->paritytype << AVR32_USART_MR_PAR_OFFSET | + opt->channelmode << AVR32_USART_MR_CHMODE_OFFSET; + + if (opt->stopbits > USART_2_STOPBITS) + { + // Set two stop bits + usart->mr |= AVR32_USART_MR_NBSTOP_2 << AVR32_USART_MR_NBSTOP_OFFSET; + // and a timeguard period gives the rest. + usart->ttgr = opt->stopbits - USART_2_STOPBITS; + } + else + // Insert 1, 1.5 or 2 stop bits. + usart->mr |= opt->stopbits << AVR32_USART_MR_NBSTOP_OFFSET; + + // Set normal mode. + usart->mr = (usart->mr & ~AVR32_USART_MR_MODE_MASK) | + AVR32_USART_MR_MODE_NORMAL << AVR32_USART_MR_MODE_OFFSET; + + // Setup complete; enable communication. + // Enable input and output. + usart->cr = AVR32_USART_CR_RXEN_MASK | + AVR32_USART_CR_TXEN_MASK; + + return USART_SUCCESS; +} + + +int usart_init_rs232_tx_only(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz) +{ + // Reset the USART and shutdown TX and RX. + usart_reset(usart); + + // Check input values. + if (!opt || // Null pointer. + opt->charlength < 5 || opt->charlength > 9 || + opt->paritytype > 7 || + opt->stopbits == 1 || opt->stopbits > 2 + 255 || + opt->channelmode > 3 || + usart_set_sync_master_baudrate(usart, opt->baudrate, pba_hz) == USART_INVALID_INPUT) + return USART_INVALID_INPUT; + + if (opt->charlength == 9) + { + // Character length set to 9 bits. MODE9 dominates CHRL. + usart->mr |= AVR32_USART_MR_MODE9_MASK; + } + else + { + // CHRL gives the character length (- 5) when MODE9 = 0. + usart->mr |= (opt->charlength - 5) << AVR32_USART_MR_CHRL_OFFSET; + } + + usart->mr |= opt->paritytype << AVR32_USART_MR_PAR_OFFSET | + opt->channelmode << AVR32_USART_MR_CHMODE_OFFSET; + + if (opt->stopbits > USART_2_STOPBITS) + { + // Set two stop bits + usart->mr |= AVR32_USART_MR_NBSTOP_2 << AVR32_USART_MR_NBSTOP_OFFSET; + // and a timeguard period gives the rest. + usart->ttgr = opt->stopbits - USART_2_STOPBITS; + } + else + // Insert 1 or 2 stop bits. + usart->mr |= opt->stopbits << AVR32_USART_MR_NBSTOP_OFFSET; + + // Set normal mode. + usart->mr = (usart->mr & ~AVR32_USART_MR_MODE_MASK) | + AVR32_USART_MR_MODE_NORMAL << AVR32_USART_MR_MODE_OFFSET; + + // Setup complete; enable communication. + // Enable only output as input is not possible in synchronous mode without + // transferring clock. + usart->cr = AVR32_USART_CR_TXEN_MASK; + + return USART_SUCCESS; +} + + +int usart_init_hw_handshaking(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz) +{ + // First: Setup standard RS232. + if (usart_init_rs232(usart, opt, pba_hz) == USART_INVALID_INPUT) + return USART_INVALID_INPUT; + + // Set hardware handshaking mode. + usart->mr = (usart->mr & ~AVR32_USART_MR_MODE_MASK) | + AVR32_USART_MR_MODE_HARDWARE << AVR32_USART_MR_MODE_OFFSET; + + return USART_SUCCESS; +} + + +int usart_init_modem(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz) +{ + // First: Setup standard RS232. + if (usart_init_rs232(usart, opt, pba_hz) == USART_INVALID_INPUT) + return USART_INVALID_INPUT; + + // Set modem mode. + usart->mr = (usart->mr & ~AVR32_USART_MR_MODE_MASK) | + AVR32_USART_MR_MODE_MODEM << AVR32_USART_MR_MODE_OFFSET; + + return USART_SUCCESS; +} + + +int usart_init_sync_master(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz) +{ + // Reset the USART and shutdown TX and RX. + usart_reset(usart); + + // Check input values. + if (!opt || // Null pointer. + opt->charlength < 5 || opt->charlength > 9 || + opt->paritytype > 7 || + opt->stopbits == 1 || opt->stopbits > 2 + 255 || + opt->channelmode > 3 || + usart_set_sync_master_baudrate(usart, opt->baudrate, pba_hz) == USART_INVALID_INPUT) + return USART_INVALID_INPUT; + + if (opt->charlength == 9) + { + // Character length set to 9 bits. MODE9 dominates CHRL. + usart->mr |= AVR32_USART_MR_MODE9_MASK; + } + else + { + // CHRL gives the character length (- 5) when MODE9 = 0. + usart->mr |= (opt->charlength - 5) << AVR32_USART_MR_CHRL_OFFSET; + } + + usart->mr |= opt->paritytype << AVR32_USART_MR_PAR_OFFSET | + opt->channelmode << AVR32_USART_MR_CHMODE_OFFSET; + + if (opt->stopbits > USART_2_STOPBITS) + { + // Set two stop bits + usart->mr |= AVR32_USART_MR_NBSTOP_2 << AVR32_USART_MR_NBSTOP_OFFSET; + // and a timeguard period gives the rest. + usart->ttgr = opt->stopbits - USART_2_STOPBITS; + } + else + // Insert 1 or 2 stop bits. + usart->mr |= opt->stopbits << AVR32_USART_MR_NBSTOP_OFFSET; + + // Set normal mode. + usart->mr = (usart->mr & ~AVR32_USART_MR_MODE_MASK) | + AVR32_USART_MR_MODE_NORMAL << AVR32_USART_MR_MODE_OFFSET | + AVR32_USART_MR_CLKO_MASK; + + // Setup complete; enable communication. + // Enable input and output. + usart->cr = AVR32_USART_CR_RXEN_MASK | + AVR32_USART_CR_TXEN_MASK; + + return USART_SUCCESS; +} + + +int usart_init_sync_slave(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz) +{ + // Reset the USART and shutdown TX and RX. + usart_reset(usart); + + // Check input values. + if (!opt || // Null pointer. + opt->charlength < 5 || opt->charlength > 9 || + opt->paritytype > 7 || + opt->stopbits == 1 || opt->stopbits > 2 + 255 || + opt->channelmode > 3 || + usart_set_sync_slave_baudrate(usart) == USART_INVALID_INPUT) + return USART_INVALID_INPUT; + + if (opt->charlength == 9) + { + // Character length set to 9 bits. MODE9 dominates CHRL. + usart->mr |= AVR32_USART_MR_MODE9_MASK; + } + else + { + // CHRL gives the character length (- 5) when MODE9 = 0. + usart->mr |= (opt->charlength - 5) << AVR32_USART_MR_CHRL_OFFSET; + } + + usart->mr |= opt->paritytype << AVR32_USART_MR_PAR_OFFSET | + opt->channelmode << AVR32_USART_MR_CHMODE_OFFSET; + + if (opt->stopbits > USART_2_STOPBITS) + { + // Set two stop bits + usart->mr |= AVR32_USART_MR_NBSTOP_2 << AVR32_USART_MR_NBSTOP_OFFSET; + // and a timeguard period gives the rest. + usart->ttgr = opt->stopbits - USART_2_STOPBITS; + } + else + // Insert 1 or 2 stop bits. + usart->mr |= opt->stopbits << AVR32_USART_MR_NBSTOP_OFFSET; + + // Set normal mode. + usart->mr = (usart->mr & ~AVR32_USART_MR_MODE_MASK) | + AVR32_USART_MR_MODE_NORMAL << AVR32_USART_MR_MODE_OFFSET; + + // Setup complete; enable communication. + // Enable input and output. + usart->cr = AVR32_USART_CR_RXEN_MASK | + AVR32_USART_CR_TXEN_MASK; + + return USART_SUCCESS; +} + + +int usart_init_rs485(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz) +{ + // First: Setup standard RS232. + if (usart_init_rs232(usart, opt, pba_hz) == USART_INVALID_INPUT) + return USART_INVALID_INPUT; + + // Set RS485 mode. + usart->mr = (usart->mr & ~AVR32_USART_MR_MODE_MASK) | + AVR32_USART_MR_MODE_RS485 << AVR32_USART_MR_MODE_OFFSET; + + return USART_SUCCESS; +} + + +int usart_init_IrDA(volatile avr32_usart_t *usart, const usart_options_t *opt, + long pba_hz, unsigned char irda_filter) +{ + // First: Setup standard RS232. + if (usart_init_rs232(usart, opt, pba_hz) == USART_INVALID_INPUT) + return USART_INVALID_INPUT; + + // Set IrDA filter. + usart->ifr = irda_filter; + + // Set IrDA mode and activate filtering of input. + usart->mr = (usart->mr & ~AVR32_USART_MR_MODE_MASK) | + AVR32_USART_MODE_IRDA << AVR32_USART_MR_MODE_OFFSET | + AVR32_USART_MR_FILTER_MASK; + + return USART_SUCCESS; +} + + +int usart_init_iso7816(volatile avr32_usart_t *usart, const usart_iso7816_options_t *opt, int t, long pba_hz) +{ + // Reset the USART and shutdown TX and RX. + usart_reset(usart); + + // Check input values. + if (!opt || // Null pointer. + opt->paritytype > 1) + return USART_INVALID_INPUT; + + if (t == 0) + { + // Set USART mode to ISO7816, T=0. + // The T=0 protocol always uses 2 stop bits. + usart->mr = AVR32_USART_MR_MODE_ISO7816_T0 << AVR32_USART_MR_MODE_OFFSET | + AVR32_USART_MR_NBSTOP_2 << AVR32_USART_MR_NBSTOP_OFFSET | + opt->bit_order << AVR32_USART_MR_MSBF_OFFSET; // Allow MSBF in T=0. + } + else if (t == 1) + { + // Only LSB first in the T=1 protocol. + // max_iterations field is only used in T=0 mode. + if (opt->bit_order != 0 || + opt->max_iterations != 0) + return USART_INVALID_INPUT; + + // Set USART mode to ISO7816, T=1. + // The T=1 protocol always uses 1 stop bit. + usart->mr = AVR32_USART_MR_MODE_ISO7816_T1 << AVR32_USART_MR_MODE_OFFSET | + AVR32_USART_MR_NBSTOP_1 << AVR32_USART_MR_NBSTOP_OFFSET; + } + else + return USART_INVALID_INPUT; + + if (usart_set_iso7816_clock(usart, opt->iso7816_hz, pba_hz) == USART_INVALID_INPUT) + return USART_INVALID_INPUT; + + // Set FIDI register: bit rate = selected clock/FI_DI_ratio/16. + usart->fidi = opt->fidi_ratio; + + // Set ISO7816 spesific options in the MODE register. + usart->mr |= opt->paritytype << AVR32_USART_MR_PAR_OFFSET | + AVR32_USART_MR_CLKO_MASK | // Enable clock output. + opt->inhibit_nack << AVR32_USART_MR_INACK_OFFSET | + opt->dis_suc_nack << AVR32_USART_MR_DSNACK_OFFSET | + opt->max_iterations << AVR32_USART_MR_MAX_ITERATION_OFFSET; + + // Setup complete; enable the receiver by default. + usart_iso7816_enable_receiver(usart); + + return USART_SUCCESS; +} + + +#if defined(AVR32_USART_400_H_INCLUDED) || \ + defined(AVR32_USART_410_H_INCLUDED) || \ + defined(AVR32_USART_420_H_INCLUDED) || \ + defined(AVR32_USART_440_H_INCLUDED) || \ + defined(AVR32_USART_602_H_INCLUDED) + + +int usart_init_lin_master(volatile avr32_usart_t *usart, unsigned long baudrate, long pba_hz) +{ + // Reset the USART and shutdown TX and RX. + usart_reset(usart); + + // Check input values. + if (usart_set_async_baudrate(usart, baudrate, pba_hz) == USART_INVALID_INPUT) + return USART_INVALID_INPUT; + + usart->mr |= AVR32_USART_MR_MODE_LIN_MASTER << AVR32_USART_MR_MODE_OFFSET; // LIN master mode. + + // Setup complete; enable communication. + // Enable input and output. + usart->cr = AVR32_USART_CR_RXEN_MASK | + AVR32_USART_CR_TXEN_MASK; + + return USART_SUCCESS; +} + + +int usart_init_lin_slave(volatile avr32_usart_t *usart, unsigned long baudrate, long pba_hz) +{ + // Reset the USART and shutdown TX and RX. + usart_reset(usart); + + // Check input values. + if (usart_set_async_baudrate(usart, baudrate, pba_hz) == USART_INVALID_INPUT) + return USART_INVALID_INPUT; + + usart->mr |= AVR32_USART_MR_MODE_LIN_SLAVE << AVR32_USART_MR_MODE_OFFSET; // LIN slave mode. + + // Setup complete; enable communication. + // Enable input and output. + usart->cr = AVR32_USART_CR_RXEN_MASK | + AVR32_USART_CR_TXEN_MASK; + + return USART_SUCCESS; +} + + +int usart_init_spi_master(volatile avr32_usart_t *usart, const usart_spi_options_t *opt, long pba_hz) +{ + // Reset the USART and shutdown TX and RX. + usart_reset(usart); + + // Check input values. + if (!opt || // Null pointer. + opt->charlength < 5 || opt->charlength > 9 || + opt->spimode > 3 || + opt->channelmode > 3 || + usart_set_spi_master_baudrate(usart, opt->baudrate, pba_hz) == USART_INVALID_INPUT) + return USART_INVALID_INPUT; + + if (opt->charlength == 9) + { + // Character length set to 9 bits. MODE9 dominates CHRL. + usart->mr |= AVR32_USART_MR_MODE9_MASK; + } + else + { + // CHRL gives the character length (- 5) when MODE9 = 0. + usart->mr |= (opt->charlength - 5) << AVR32_USART_MR_CHRL_OFFSET; + } + + usart->mr |= AVR32_USART_MR_MODE_SPI_MASTER << AVR32_USART_MR_MODE_OFFSET | // SPI master mode. + ((opt->spimode & 0x1) ^ 0x1) << AVR32_USART_MR_SYNC_OFFSET | // SPI clock phase. + opt->channelmode << AVR32_USART_MR_CHMODE_OFFSET | // Channel mode. + (opt->spimode >> 1) << AVR32_USART_MR_MSBF_OFFSET | // SPI clock polarity. + AVR32_USART_MR_CLKO_MASK; // Drive SCK pin. + + // Setup complete; enable communication. + // Enable input and output. + usart->cr = AVR32_USART_CR_RXEN_MASK | + AVR32_USART_CR_TXEN_MASK; + + return USART_SUCCESS; +} + + +int usart_init_spi_slave(volatile avr32_usart_t *usart, const usart_spi_options_t *opt, long pba_hz) +{ + // Reset the USART and shutdown TX and RX. + usart_reset(usart); + + // Check input values. + if (!opt || // Null pointer. + opt->charlength < 5 || opt->charlength > 9 || + opt->spimode > 3 || + opt->channelmode > 3 || + usart_set_spi_slave_baudrate(usart) == USART_INVALID_INPUT) + return USART_INVALID_INPUT; + + if (opt->charlength == 9) + { + // Character length set to 9 bits. MODE9 dominates CHRL. + usart->mr |= AVR32_USART_MR_MODE9_MASK; + } + else + { + // CHRL gives the character length (- 5) when MODE9 = 0. + usart->mr |= (opt->charlength - 5) << AVR32_USART_MR_CHRL_OFFSET; + } + + usart->mr |= AVR32_USART_MR_MODE_SPI_SLAVE << AVR32_USART_MR_MODE_OFFSET | // SPI slave mode. + ((opt->spimode & 0x1) ^ 0x1) << AVR32_USART_MR_SYNC_OFFSET | // SPI clock phase. + opt->channelmode << AVR32_USART_MR_CHMODE_OFFSET | // Channel mode. + (opt->spimode >> 1) << AVR32_USART_MR_MSBF_OFFSET; // SPI clock polarity. + + // Setup complete; enable communication. + // Enable input and output. + usart->cr = AVR32_USART_CR_RXEN_MASK | + AVR32_USART_CR_TXEN_MASK; + + return USART_SUCCESS; +} + + +#endif // USART rev. >= 4.0.0 + + +//! @} + + +//------------------------------------------------------------------------------ +#if defined(AVR32_USART_400_H_INCLUDED) || \ + defined(AVR32_USART_410_H_INCLUDED) || \ + defined(AVR32_USART_420_H_INCLUDED) || \ + defined(AVR32_USART_440_H_INCLUDED) || \ + defined(AVR32_USART_602_H_INCLUDED) + + +/*! \name SPI Control Functions + */ +//! @{ + + +int usart_spi_selectChip(volatile avr32_usart_t *usart) +{ + // Force the SPI chip select. + usart->cr = AVR32_USART_CR_RTSEN_MASK; + + return USART_SUCCESS; +} + + +int usart_spi_unselectChip(volatile avr32_usart_t *usart) +{ + int timeout = USART_DEFAULT_TIMEOUT; + + do + { + if (!timeout--) return USART_FAILURE; + } while (!usart_tx_empty(usart)); + + // Release the SPI chip select. + usart->cr = AVR32_USART_CR_RTSDIS_MASK; + + return USART_SUCCESS; +} + + +//! @} + + +#endif // USART rev. >= 4.0.0 + + +//------------------------------------------------------------------------------ +/*! \name Transmit/Receive Functions + */ +//! @{ + + +int usart_send_address(volatile avr32_usart_t *usart, int address) +{ + // Check if USART is in multidrop / RS485 mode. + if (!usart_mode_is_multidrop(usart)) return USART_MODE_FAULT; + + // Prepare to send an address. + usart->cr = AVR32_USART_CR_SENDA_MASK; + + // Write the address to TX. + usart_bw_write_char(usart, address); + + return USART_SUCCESS; +} + + +int usart_write_char(volatile avr32_usart_t *usart, int c) +{ + if (usart_tx_ready(usart)) + { + usart->thr = (c << AVR32_USART_THR_TXCHR_OFFSET) & AVR32_USART_THR_TXCHR_MASK; + return USART_SUCCESS; + } + else + return USART_TX_BUSY; +} + + +int usart_putchar(volatile avr32_usart_t *usart, int c) +{ + int timeout = USART_DEFAULT_TIMEOUT; + + if (c == '\n') + { + do + { + if (!timeout--) return USART_FAILURE; + } while (usart_write_char(usart, '\r') != USART_SUCCESS); + + timeout = USART_DEFAULT_TIMEOUT; + } + + do + { + if (!timeout--) return USART_FAILURE; + } while (usart_write_char(usart, c) != USART_SUCCESS); + + return USART_SUCCESS; +} + + +int usart_read_char(volatile avr32_usart_t *usart, int *c) +{ + // Check for errors: frame, parity and overrun. In RS485 mode, a parity error + // would mean that an address char has been received. + if (usart->csr & (AVR32_USART_CSR_OVRE_MASK | + AVR32_USART_CSR_FRAME_MASK | + AVR32_USART_CSR_PARE_MASK)) + return USART_RX_ERROR; + + // No error; if we really did receive a char, read it and return SUCCESS. + if (usart_test_hit(usart)) + { + *c = (usart->rhr & AVR32_USART_RHR_RXCHR_MASK) >> AVR32_USART_RHR_RXCHR_OFFSET; + return USART_SUCCESS; + } + else + return USART_RX_EMPTY; +} + + +int usart_getchar(volatile avr32_usart_t *usart) +{ + int c, ret; + + while ((ret = usart_read_char(usart, &c)) == USART_RX_EMPTY); + + if (ret == USART_RX_ERROR) + return USART_FAILURE; + + return c; +} + + +void usart_write_line(volatile avr32_usart_t *usart, const char *string) +{ + while (*string != '\0') + usart_putchar(usart, *string++); +} + + +int usart_get_echo_line(volatile avr32_usart_t *usart) +{ + int rx_char; + int retval = USART_SUCCESS; + + while (1) + { + rx_char = usart_getchar(usart); + if (rx_char == USART_FAILURE) + { + usart_write_line(usart, "Error!!!\n"); + retval = USART_FAILURE; + break; + } + if (rx_char == '\x03') + { + retval = USART_FAILURE; + break; + } + usart_putchar(usart, rx_char); + if (rx_char == '\r') + { + usart_putchar(usart, '\n'); + break; + } + } + + return retval; +} + + +//! @} diff --git a/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/USART/usart.h b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/USART/usart.h new file mode 100644 index 000000000..bc1c100f8 --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/USART/usart.h @@ -0,0 +1,889 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief USART driver for AVR32 UC3. + * + * This file contains basic functions for the AVR32 USART, with support for all + * modes, settings and clock speeds. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with a USART module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _USART_H_ +#define _USART_H_ + +#include +#include "compiler.h" + + +/*! \name Return Values + */ +//! @{ +#define USART_SUCCESS 0 //!< Successful completion. +#define USART_FAILURE -1 //!< Failure because of some unspecified reason. +#define USART_INVALID_INPUT 1 //!< Input value out of range. +#define USART_INVALID_ARGUMENT -1 //!< Argument value out of range. +#define USART_TX_BUSY 2 //!< Transmitter was busy. +#define USART_RX_EMPTY 3 //!< Nothing was received. +#define USART_RX_ERROR 4 //!< Transmission error occurred. +#define USART_MODE_FAULT 5 //!< USART not in the appropriate mode. +//! @} + +//! Default time-out value (number of attempts). +#define USART_DEFAULT_TIMEOUT 10000 + +/*! \name Parity Settings + */ +//! @{ +#define USART_EVEN_PARITY AVR32_USART_MR_PAR_EVEN //!< Use even parity on character transmission. +#define USART_ODD_PARITY AVR32_USART_MR_PAR_ODD //!< Use odd parity on character transmission. +#define USART_SPACE_PARITY AVR32_USART_MR_PAR_SPACE //!< Use a space as parity bit. +#define USART_MARK_PARITY AVR32_USART_MR_PAR_MARK //!< Use a mark as parity bit. +#define USART_NO_PARITY AVR32_USART_MR_PAR_NONE //!< Don't use a parity bit. +#define USART_MULTIDROP_PARITY AVR32_USART_MR_PAR_MULTI //!< Parity bit is used to flag address characters. +//! @} + +/*! \name Stop Bits Settings + */ +//! @{ +#define USART_1_STOPBIT AVR32_USART_MR_NBSTOP_1 //!< Use 1 stop bit. +#define USART_1_5_STOPBITS AVR32_USART_MR_NBSTOP_1_5 //!< Use 1.5 stop bits. +#define USART_2_STOPBITS AVR32_USART_MR_NBSTOP_2 //!< Use 2 stop bits (for more, just give the number of bits). +//! @} + +/*! \name Channel Modes + */ +//! @{ +#define USART_NORMAL_CHMODE AVR32_USART_MR_CHMODE_NORMAL //!< Normal communication. +#define USART_AUTO_ECHO AVR32_USART_MR_CHMODE_ECHO //!< Echo data. +#define USART_LOCAL_LOOPBACK AVR32_USART_MR_CHMODE_LOCAL_LOOP //!< Local loopback. +#define USART_REMOTE_LOOPBACK AVR32_USART_MR_CHMODE_REMOTE_LOOP //!< Remote loopback. +//! @} + +#if defined(AVR32_USART_400_H_INCLUDED) || \ + defined(AVR32_USART_410_H_INCLUDED) || \ + defined(AVR32_USART_420_H_INCLUDED) || \ + defined(AVR32_USART_440_H_INCLUDED) || \ + defined(AVR32_USART_602_H_INCLUDED) + +/*! \name LIN Node Actions + */ +//! @{ +#define USART_LIN_PUBLISH_ACTION AVR32_USART_LINMR_NACT_PUBLISH //!< The USART transmits the response. +#define USART_LIN_SUBSCRIBE_ACTION AVR32_USART_LINMR_NACT_SUBSCRIBE //!< The USART receives the response. +#define USART_LIN_IGNORE_ACTION AVR32_USART_LINMR_NACT_IGNORE //!< The USART does not transmit and does not receive the reponse. +//! @} + +/*! \name LIN Checksum Types + */ +//! @{ +#define USART_LIN_ENHANCED_CHECKSUM 0 //!< LIN 2.0 "enhanced" checksum. +#define USART_LIN_CLASSIC_CHECKSUM 1 //!< LIN 1.3 "classic" checksum. +//! @} + +#endif // USART rev. >= 4.0.0 + + +//! Input parameters when initializing RS232 and similar modes. +typedef struct +{ + //! Set baud rate of the USART (unused in slave modes). + unsigned long baudrate; + + //! Number of bits to transmit as a character (5 to 9). + unsigned char charlength; + + //! How to calculate the parity bit: \ref USART_EVEN_PARITY, \ref USART_ODD_PARITY, + //! \ref USART_SPACE_PARITY, \ref USART_MARK_PARITY, \ref USART_NO_PARITY or + //! \ref USART_MULTIDROP_PARITY. + unsigned char paritytype; + + //! Number of stop bits between two characters: \ref USART_1_STOPBIT, + //! \ref USART_1_5_STOPBITS, \ref USART_2_STOPBITS or any number from 3 to 257 + //! which will result in a time guard period of that length between characters. + //! \note \ref USART_1_5_STOPBITS is supported in asynchronous modes only. + unsigned short stopbits; + + //! Run the channel in testmode: \ref USART_NORMAL_CHMODE, \ref USART_AUTO_ECHO, + //! \ref USART_LOCAL_LOOPBACK or \ref USART_REMOTE_LOOPBACK. + unsigned char channelmode; +} usart_options_t; + +//! Input parameters when initializing ISO7816 mode. +typedef struct +{ + //! Set the frequency of the ISO7816 clock. + unsigned long iso7816_hz; + + //! The number of ISO7816 clock ticks in every bit period (1 to 2047, 0 = disable clock). + //! Bit rate = \ref iso7816_hz / \ref fidi_ratio. + unsigned short fidi_ratio; + + //! How to calculate the parity bit: \ref USART_EVEN_PARITY for normal mode or + //! \ref USART_ODD_PARITY for inverse mode. + unsigned char paritytype; + + //! Inhibit Non Acknowledge:\n + //! - 0: the NACK is generated;\n + //! - 1: the NACK is not generated. + //! + //! \note This bit will be used only in ISO7816 mode, protocol T = 0 receiver. + int inhibit_nack; + + //! Disable successive NACKs. + //! Successive parity errors are counted up to the value in the \ref max_iterations field. + //! These parity errors generate a NACK on the ISO line. As soon as this value is reached, + //! no addititional NACK is sent on the ISO line. The ITERATION flag is asserted. + int dis_suc_nack; + + //! Max number of repetitions (0 to 7). + unsigned char max_iterations; + + //! Bit order in transmitted characters:\n + //! - 0: LSB first;\n + //! - 1: MSB first. + int bit_order; +} usart_iso7816_options_t; + +#if defined(AVR32_USART_400_H_INCLUDED) || \ + defined(AVR32_USART_410_H_INCLUDED) || \ + defined(AVR32_USART_420_H_INCLUDED) || \ + defined(AVR32_USART_440_H_INCLUDED) || \ + defined(AVR32_USART_602_H_INCLUDED) + +//! Input parameters when initializing SPI mode. +typedef struct +{ + //! Set the frequency of the SPI clock (unused in slave mode). + unsigned long baudrate; + + //! Number of bits to transmit as a character (5 to 9). + unsigned char charlength; + + //! Which SPI mode to use. + unsigned char spimode; + + //! Run the channel in testmode: \ref USART_NORMAL_CHMODE, \ref USART_AUTO_ECHO, + //! \ref USART_LOCAL_LOOPBACK or \ref USART_REMOTE_LOOPBACK. + unsigned char channelmode; +} usart_spi_options_t; + +#endif // USART rev. >= 4.0.0 + + +//------------------------------------------------------------------------------ +/*! \name Initialization Functions + */ +//! @{ + +/*! \brief Resets the USART and disables TX and RX. + * + * \param usart Base address of the USART instance. + */ +extern void usart_reset(volatile avr32_usart_t *usart); + +/*! \brief Sets up the USART to use the standard RS232 protocol. + * + * \param usart Base address of the USART instance. + * \param opt Options needed to set up RS232 communication (see \ref usart_options_t). + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + * \retval USART_SUCCESS Mode successfully initialized. + * \retval USART_INVALID_INPUT One or more of the arguments is out of valid range. + */ +extern int usart_init_rs232(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz); + +/*! \brief Sets up the USART to use the standard RS232 protocol in TX-only mode. + * + * Compared to \ref usart_init_rs232, this function allows very high baud rates + * (up to \a pba_hz instead of \a pba_hz / \c 8) at the expense of full duplex. + * + * \param usart Base address of the USART instance. + * \param opt Options needed to set up RS232 communication (see \ref usart_options_t). + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + * \retval USART_SUCCESS Mode successfully initialized. + * \retval USART_INVALID_INPUT One or more of the arguments is out of valid range. + * + * \note The \c 1.5 stop bit is not supported in this mode. + */ +extern int usart_init_rs232_tx_only(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz); + +/*! \brief Sets up the USART to use hardware handshaking. + * + * \param usart Base address of the USART instance. + * \param opt Options needed to set up RS232 communication (see \ref usart_options_t). + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + * \retval USART_SUCCESS Mode successfully initialized. + * \retval USART_INVALID_INPUT One or more of the arguments is out of valid range. + * + * \note \ref usart_init_rs232 does not need to be invoked before this function. + */ +extern int usart_init_hw_handshaking(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz); + +/*! \brief Sets up the USART to use the modem protocol, activating dedicated inputs/outputs. + * + * \param usart Base address of the USART instance. + * \param opt Options needed to set up RS232 communication (see \ref usart_options_t). + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + * \retval USART_SUCCESS Mode successfully initialized. + * \retval USART_INVALID_INPUT One or more of the arguments is out of valid range. + */ +extern int usart_init_modem(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz); + +/*! \brief Sets up the USART to use a synchronous RS232-like protocol in master mode. + * + * \param usart Base address of the USART instance. + * \param opt Options needed to set up RS232 communication (see \ref usart_options_t). + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + * \retval USART_SUCCESS Mode successfully initialized. + * \retval USART_INVALID_INPUT One or more of the arguments is out of valid range. + */ +extern int usart_init_sync_master(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz); + +/*! \brief Sets up the USART to use a synchronous RS232-like protocol in slave mode. + * + * \param usart Base address of the USART instance. + * \param opt Options needed to set up RS232 communication (see \ref usart_options_t). + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + * \retval USART_SUCCESS Mode successfully initialized. + * \retval USART_INVALID_INPUT One or more of the arguments is out of valid range. + */ +extern int usart_init_sync_slave(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz); + +/*! \brief Sets up the USART to use the RS485 protocol. + * + * \param usart Base address of the USART instance. + * \param opt Options needed to set up RS232 communication (see \ref usart_options_t). + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + * \retval USART_SUCCESS Mode successfully initialized. + * \retval USART_INVALID_INPUT One or more of the arguments is out of valid range. + */ +extern int usart_init_rs485(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz); + +/*! \brief Sets up the USART to use the IrDA protocol. + * + * \param usart Base address of the USART instance. + * \param opt Options needed to set up RS232 communication (see \ref usart_options_t). + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * \param irda_filter Counter used to distinguish received ones from zeros. + * + * \retval USART_SUCCESS Mode successfully initialized. + * \retval USART_INVALID_INPUT One or more of the arguments is out of valid range. + */ +extern int usart_init_IrDA(volatile avr32_usart_t *usart, const usart_options_t *opt, + long pba_hz, unsigned char irda_filter); + +/*! \brief Sets up the USART to use the ISO7816 T=0 or T=1 smartcard protocols. + * + * The receiver is enabled by default. \ref usart_iso7816_enable_receiver and + * \ref usart_iso7816_enable_transmitter can be called to change the half-duplex + * communication direction. + * + * \param usart Base address of the USART instance. + * \param opt Options needed to set up ISO7816 communication (see \ref usart_iso7816_options_t). + * \param t ISO7816 mode to use (T=0 or T=1). + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + * \retval USART_SUCCESS Mode successfully initialized. + * \retval USART_INVALID_INPUT One or more of the arguments is out of valid range. + */ +extern int usart_init_iso7816(volatile avr32_usart_t *usart, const usart_iso7816_options_t *opt, int t, long pba_hz); + +#if defined(AVR32_USART_400_H_INCLUDED) || \ + defined(AVR32_USART_410_H_INCLUDED) || \ + defined(AVR32_USART_420_H_INCLUDED) || \ + defined(AVR32_USART_440_H_INCLUDED) || \ + defined(AVR32_USART_602_H_INCLUDED) + +/*! \brief Sets up the USART to use the LIN master mode. + * + * \param usart Base address of the USART instance. + * \param baudrate Baud rate. + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + */ +extern int usart_init_lin_master(volatile avr32_usart_t *usart, unsigned long baudrate, long pba_hz); + +/*! \brief Sets up the USART to use the LIN slave mode. + * + * \param usart Base address of the USART instance. + * \param baudrate Baud rate. + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + */ +extern int usart_init_lin_slave(volatile avr32_usart_t *usart, unsigned long baudrate, long pba_hz); + +/*! \brief Sets up the USART to use the SPI master mode. + * + * \ref usart_spi_selectChip and \ref usart_spi_unselectChip can be called to + * select or unselect the SPI slave chip. + * + * \param usart Base address of the USART instance. + * \param opt Options needed to set up SPI mode (see \ref usart_spi_options_t). + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + * \retval USART_SUCCESS Mode successfully initialized. + * \retval USART_INVALID_INPUT One or more of the arguments is out of valid range. + */ +extern int usart_init_spi_master(volatile avr32_usart_t *usart, const usart_spi_options_t *opt, long pba_hz); + +/*! \brief Sets up the USART to use the SPI slave mode. + * + * \param usart Base address of the USART instance. + * \param opt Options needed to set up SPI mode (see \ref usart_spi_options_t). + * \param pba_hz USART module input clock frequency (PBA clock, Hz). + * + * \retval USART_SUCCESS Mode successfully initialized. + * \retval USART_INVALID_INPUT One or more of the arguments is out of valid range. + */ +extern int usart_init_spi_slave(volatile avr32_usart_t *usart, const usart_spi_options_t *opt, long pba_hz); + +#endif // USART rev. >= 4.0.0 + +//! @} + + +//------------------------------------------------------------------------------ +/*! \name Read and Reset Error Status Bits + */ +//! @{ + +/*! \brief Resets the error status. + * + * This function resets the status bits indicating that a parity error, + * framing error or overrun has occurred. The RXBRK bit, indicating + * a start/end of break condition on the RX line, is also reset. + * + * \param usart Base address of the USART instance. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void usart_reset_status(volatile avr32_usart_t *usart) +{ + usart->cr = AVR32_USART_CR_RSTSTA_MASK; +} + +/*! \brief Checks if a parity error has occurred since last status reset. + * + * \param usart Base address of the USART instance. + * + * \return \c 1 if a parity error has been detected, otherwise \c 0. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ int usart_parity_error(volatile avr32_usart_t *usart) +{ + return (usart->csr & AVR32_USART_CSR_PARE_MASK) != 0; +} + +/*! \brief Checks if a framing error has occurred since last status reset. + * + * \param usart Base address of the USART instance. + * + * \return \c 1 if a framing error has been detected, otherwise \c 0. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ int usart_framing_error(volatile avr32_usart_t *usart) +{ + return (usart->csr & AVR32_USART_CSR_FRAME_MASK) != 0; +} + +/*! \brief Checks if an overrun error has occurred since last status reset. + * + * \param usart Base address of the USART instance. + * + * \return \c 1 if a overrun error has been detected, otherwise \c 0. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ int usart_overrun_error(volatile avr32_usart_t *usart) +{ + return (usart->csr & AVR32_USART_CSR_OVRE_MASK) != 0; +} + +#if defined(AVR32_USART_400_H_INCLUDED) || \ + defined(AVR32_USART_410_H_INCLUDED) || \ + defined(AVR32_USART_420_H_INCLUDED) || \ + defined(AVR32_USART_440_H_INCLUDED) || \ + defined(AVR32_USART_602_H_INCLUDED) + +/*! \brief Get LIN Error Status + * + * \param usart Base address of the USART instance. + * + * \retval The binary value of the error field. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ int usart_lin_get_error(volatile avr32_usart_t *usart) +{ + return (usart->csr & (AVR32_USART_CSR_LINSNRE_MASK | + AVR32_USART_CSR_LINCE_MASK | + AVR32_USART_CSR_LINIPE_MASK | + AVR32_USART_CSR_LINISFE_MASK | + AVR32_USART_CSR_LINBE_MASK)) >> AVR32_USART_CSR_LINBE_OFFSET; +} + +#endif // USART rev. >= 4.0.0 + +//! @} + + +//------------------------------------------------------------------------------ +/*! \name ISO7816 Control Functions + */ +//! @{ + +/*! \brief Enables the ISO7816 receiver. + * + * The ISO7816 transmitter is disabled. + * + * \param usart Base address of the USART instance. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void usart_iso7816_enable_receiver(volatile avr32_usart_t *usart) +{ + usart->cr = AVR32_USART_CR_TXDIS_MASK | AVR32_USART_CR_RXEN_MASK; +} + +/*! \brief Enables the ISO7816 transmitter. + * + * The ISO7816 receiver is disabled. + * + * \param usart Base address of the USART instance. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void usart_iso7816_enable_transmitter(volatile avr32_usart_t *usart) +{ + usart->cr = AVR32_USART_CR_RXDIS_MASK | AVR32_USART_CR_TXEN_MASK; +} + +//! @} + + +//------------------------------------------------------------------------------ +#if defined(AVR32_USART_400_H_INCLUDED) || \ + defined(AVR32_USART_410_H_INCLUDED) || \ + defined(AVR32_USART_420_H_INCLUDED) || \ + defined(AVR32_USART_440_H_INCLUDED) || \ + defined(AVR32_USART_602_H_INCLUDED) + +/*! \name LIN Control Functions + */ +//! @{ + +/*! \brief Sets the node action. + * + * \param usart Base address of the USART instance. + * \param action The node action: \ref USART_LIN_PUBLISH_ACTION, + * \ref USART_LIN_SUBSCRIBE_ACTION or + * \ref USART_LIN_IGNORE_ACTION. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void usart_lin_set_node_action(volatile avr32_usart_t *usart, unsigned char action) +{ + usart->linmr = (usart->linmr & ~AVR32_USART_LINMR_NACT_MASK) | + action << AVR32_USART_LINMR_NACT_OFFSET; +} + +/*! \brief Enables or disables the Identifier parity. + * + * \param usart Base address of the USART instance. + * \param parity Whether to enable the Identifier parity: \c TRUE or \c FALSE. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void usart_lin_enable_parity(volatile avr32_usart_t *usart, unsigned char parity) +{ + usart->linmr = (usart->linmr & ~AVR32_USART_LINMR_PARDIS_MASK) | + !parity << AVR32_USART_LINMR_PARDIS_OFFSET; +} + +/*! \brief Enables or disables the checksum. + * + * \param usart Base address of the USART instance. + * \param parity Whether to enable the checksum: \c TRUE or \c FALSE. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void usart_lin_enable_checksum(volatile avr32_usart_t *usart, unsigned char checksum) +{ + usart->linmr = (usart->linmr & ~AVR32_USART_LINMR_CHKDIS_MASK) | + !checksum << AVR32_USART_LINMR_CHKDIS_OFFSET; +} + +/*! \brief Sets the checksum type. + * + * \param usart Base address of the USART instance. + * \param chktyp The checksum type: \ref USART_LIN_ENHANCED_CHEKSUM or + * \ref USART_LIN_CLASSIC_CHECKSUM. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void usart_lin_set_checksum(volatile avr32_usart_t *usart, unsigned char chktyp) +{ + usart->linmr = (usart->linmr & ~AVR32_USART_LINMR_CHKTYP_MASK) | + chktyp << AVR32_USART_LINMR_CHKTYP_OFFSET; +} + +/*! \brief Gets the response data length. + * + * \param usart Base address of the USART instance. + * + * \return The response data length. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ unsigned char usart_lin_get_data_length(volatile avr32_usart_t *usart) +{ + if (usart->linmr & AVR32_USART_LINMR_DLM_MASK) + { + unsigned char data_length = 1 << ((usart->linir >> (AVR32_USART_LINIR_IDCHR_OFFSET + 4)) & 0x03); + if (data_length == 1) + data_length = 2; + return data_length; + } + else + return ((usart->linmr & AVR32_USART_LINMR_DLC_MASK) >> AVR32_USART_LINMR_DLC_OFFSET) + 1; +} + +/*! \brief Sets the response data length for LIN 1.x. + * + * \param usart Base address of the USART instance. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void usart_lin_set_data_length_lin1x(volatile avr32_usart_t *usart) +{ + usart->linmr |= AVR32_USART_LINMR_DLM_MASK; +} + +/*! \brief Sets the response data length for LIN 2.x. + * + * \param usart Base address of the USART instance. + * \param data_length The response data length. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void usart_lin_set_data_length_lin2x(volatile avr32_usart_t *usart, unsigned char data_length) +{ + usart->linmr = (usart->linmr & ~(AVR32_USART_LINMR_DLC_MASK | + AVR32_USART_LINMR_DLM_MASK)) | + (data_length - 1) << AVR32_USART_LINMR_DLC_OFFSET; +} + +/*! \brief Enables or disables the frame slot mode. + * + * \param usart Base address of the USART instance. + * \param frameslot Whether to enable the frame slot mode: \c TRUE or + * \c FALSE. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void usart_lin_enable_frameslot(volatile avr32_usart_t *usart, unsigned char frameslot) +{ + usart->linmr = (usart->linmr & ~AVR32_USART_LINMR_FSDIS_MASK) | + !frameslot << AVR32_USART_LINMR_FSDIS_OFFSET; +} + +/*! \brief Gets the Identifier character. + * + * \param usart Base address of the USART instance. + * + * \return The Identifier character. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ unsigned char usart_lin_get_id_char(volatile avr32_usart_t *usart) +{ + return (usart->linir & AVR32_USART_LINIR_IDCHR_MASK) >> AVR32_USART_LINIR_IDCHR_OFFSET; +} + +/*! \brief Sets the Identifier character. + * + * \param usart Base address of the USART instance. + * \param id_char The Identifier character. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void usart_lin_set_id_char(volatile avr32_usart_t *usart, unsigned char id_char) +{ + usart->linir = (usart->linir & ~AVR32_USART_LINIR_IDCHR_MASK) | + id_char << AVR32_USART_LINIR_IDCHR_OFFSET; +} + +//! @} + +#endif // USART rev. >= 4.0.0 + + +//------------------------------------------------------------------------------ +#if defined(AVR32_USART_400_H_INCLUDED) || \ + defined(AVR32_USART_410_H_INCLUDED) || \ + defined(AVR32_USART_420_H_INCLUDED) || \ + defined(AVR32_USART_440_H_INCLUDED) || \ + defined(AVR32_USART_602_H_INCLUDED) + +/*! \name SPI Control Functions + */ +//! @{ + +/*! \brief Selects SPI slave chip. + * + * \param usart Base address of the USART instance. + * + * \retval USART_SUCCESS Success. + */ +extern int usart_spi_selectChip(volatile avr32_usart_t *usart); + +/*! \brief Unselects SPI slave chip. + * + * \param usart Base address of the USART instance. + * + * \retval USART_SUCCESS Success. + * \retval USART_FAILURE Time-out. + */ +extern int usart_spi_unselectChip(volatile avr32_usart_t *usart); + +//! @} + +#endif // USART rev. >= 4.0.0 + + +//------------------------------------------------------------------------------ +/*! \name Transmit/Receive Functions + */ +//! @{ + +/*! \brief Addresses a receiver. + * + * While in RS485 mode, receivers only accept data addressed to them. + * A packet/char with the address tag set has to precede any data. + * This function is used to address a receiver. This receiver should read + * all the following data, until an address packet addresses another receiver. + * + * \param usart Base address of the USART instance. + * \param address Address of the target device. + * + * \retval USART_SUCCESS Address successfully sent (if current mode is RS485). + * \retval USART_MODE_FAULT Wrong operating mode. + */ +extern int usart_send_address(volatile avr32_usart_t *usart, int address); + +/*! \brief Tests if the USART is ready to transmit a character. + * + * \param usart Base address of the USART instance. + * + * \return \c 1 if the USART Transmit Holding Register is free, otherwise \c 0. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ int usart_tx_ready(volatile avr32_usart_t *usart) +{ + return (usart->csr & AVR32_USART_CSR_TXRDY_MASK) != 0; +} + +/*! \brief Writes the given character to the TX buffer if the transmitter is ready. + * + * \param usart Base address of the USART instance. + * \param c The character (up to 9 bits) to transmit. + * + * \retval USART_SUCCESS The transmitter was ready. + * \retval USART_TX_BUSY The transmitter was busy. + */ +extern int usart_write_char(volatile avr32_usart_t *usart, int c); + +/*! \brief An active wait writing a character to the USART. + * + * \param usart Base address of the USART instance. + * \param c The character (up to 9 bits) to transmit. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void usart_bw_write_char(volatile avr32_usart_t *usart, int c) +{ + while (usart_write_char(usart, c) != USART_SUCCESS); +} + +/*! \brief Sends a character with the USART. + * + * \param usart Base address of the USART instance. + * \param c Character to write. + * + * \retval USART_SUCCESS The character was written. + * \retval USART_FAILURE The function timed out before the USART transmitter became ready to send. + */ +extern int usart_putchar(volatile avr32_usart_t *usart, int c); + +/*! \brief Tests if all requested USART transmissions are over. + * + * \param usart Base address of the USART instance. + * + * \return \c 1 if the USART Transmit Shift Register and the USART Transmit + * Holding Register are free, otherwise \c 0. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ int usart_tx_empty(volatile avr32_usart_t *usart) +{ + return (usart->csr & AVR32_USART_CSR_TXEMPTY_MASK) != 0; +} + +/*! \brief Tests if the USART contains a received character. + * + * \param usart Base address of the USART instance. + * + * \return \c 1 if the USART Receive Holding Register is full, otherwise \c 0. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ int usart_test_hit(volatile avr32_usart_t *usart) +{ + return (usart->csr & AVR32_USART_CSR_RXRDY_MASK) != 0; +} + +/*! \brief Checks the RX buffer for a received character, and stores it at the + * given memory location. + * + * \param usart Base address of the USART instance. + * \param c Pointer to the where the read character should be stored + * (must be at least short in order to accept 9-bit characters). + * + * \retval USART_SUCCESS The character was read successfully. + * \retval USART_RX_EMPTY The RX buffer was empty. + * \retval USART_RX_ERROR An error was deteceted. + */ +extern int usart_read_char(volatile avr32_usart_t *usart, int *c); + +/*! \brief Waits until a character is received, and returns it. + * + * \param usart Base address of the USART instance. + * + * \return The received character, or \ref USART_FAILURE upon error. + */ +extern int usart_getchar(volatile avr32_usart_t *usart); + +/*! \brief Writes one character string to the USART. + * + * \param usart Base address of the USART instance. + * \param string String to be written. + */ +extern void usart_write_line(volatile avr32_usart_t *usart, const char *string); + +/*! \brief Gets and echoes characters until end of line. + * + * \param usart Base address of the USART instance. + * + * \retval USART_SUCCESS Success. + * \retval USART_FAILURE Low-level error detected or ETX character received. + */ +extern int usart_get_echo_line(volatile avr32_usart_t *usart); + +#if defined(AVR32_USART_400_H_INCLUDED) || \ + defined(AVR32_USART_410_H_INCLUDED) || \ + defined(AVR32_USART_420_H_INCLUDED) || \ + defined(AVR32_USART_440_H_INCLUDED) || \ + defined(AVR32_USART_602_H_INCLUDED) + +/*! \brief Abort LIN transmission. + * + * \param usart Base address of the USART instance. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ void usart_lin_abort(volatile avr32_usart_t *usart) +{ + usart->cr = AVR32_USART_LINABT_MASK; +} + +/*! \brief Tests if a LIN transfer has been completed. + * + * \param usart Base address of the USART instance. + * + * \return \c 1 if a LIN transfer has been completed, otherwise \c 0. + */ +#if (defined __GNUC__) +__attribute__((__always_inline__)) +#endif +extern __inline__ int usart_lin_transfer_completed(volatile avr32_usart_t *usart) +{ + return (usart->csr & AVR32_USART_CSR_LINTC_MASK) != 0; +} + +#endif // USART rev. >= 4.0.0 + +//! @} + + +#endif // _USART_H_ diff --git a/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS/ctrl_access.c b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS/ctrl_access.c new file mode 100644 index 000000000..09790c259 --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS/ctrl_access.c @@ -0,0 +1,571 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Abstraction layer for memory interfaces. + * + * This module contains the interfaces: + * - MEM <-> USB; + * - MEM <-> RAM; + * - MEM <-> MEM. + * + * This module may be configured and expanded to support the following features: + * - write-protected globals; + * - password-protected data; + * - specific features; + * - etc. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +//_____ I N C L U D E S ____________________________________________________ + +#include "compiler.h" +#include "preprocessor.h" +#ifdef FREERTOS_USED +#include "FreeRTOS.h" +#include "semphr.h" +#endif +#include "ctrl_access.h" + + +//_____ D E F I N I T I O N S ______________________________________________ + +#ifdef FREERTOS_USED + +/*! \name LUN Access Protection Macros + */ +//! @{ + +/*! \brief Locks accesses to LUNs. + * + * \return \c TRUE if the access was successfully locked, else \c FALSE. + */ +#define Ctrl_access_lock() ctrl_access_lock() + +/*! \brief Unlocks accesses to LUNs. + */ +#define Ctrl_access_unlock() xSemaphoreGive(ctrl_access_semphr) + +//! @} + +//! Handle to the semaphore protecting accesses to LUNs. +static xSemaphoreHandle ctrl_access_semphr = NULL; + +#else + +/*! \name LUN Access Protection Macros + */ +//! @{ + +/*! \brief Locks accesses to LUNs. + * + * \return \c TRUE if the access was successfully locked, else \c FALSE. + */ +#define Ctrl_access_lock() TRUE + +/*! \brief Unlocks accesses to LUNs. + */ +#define Ctrl_access_unlock() + +//! @} + +#endif // FREERTOS_USED + + +#if MAX_LUN + +/*! \brief Initializes an entry of the LUN descriptor table. + * + * \param lun Logical Unit Number. + * + * \return LUN descriptor table entry initializer. + */ +#if ACCESS_USB == ENABLED && ACCESS_MEM_TO_RAM == ENABLED +#define Lun_desc_entry(lun) \ + {\ + TPASTE3(Lun_, lun, _test_unit_ready),\ + TPASTE3(Lun_, lun, _read_capacity),\ + TPASTE3(Lun_, lun, _wr_protect),\ + TPASTE3(Lun_, lun, _removal),\ + TPASTE3(Lun_, lun, _usb_read_10),\ + TPASTE3(Lun_, lun, _usb_write_10),\ + TPASTE3(Lun_, lun, _mem_2_ram),\ + TPASTE3(Lun_, lun, _ram_2_mem),\ + TPASTE3(LUN_, lun, _NAME)\ + } +#elif ACCESS_USB == ENABLED +#define Lun_desc_entry(lun) \ + {\ + TPASTE3(Lun_, lun, _test_unit_ready),\ + TPASTE3(Lun_, lun, _read_capacity),\ + TPASTE3(Lun_, lun, _wr_protect),\ + TPASTE3(Lun_, lun, _removal),\ + TPASTE3(Lun_, lun, _usb_read_10),\ + TPASTE3(Lun_, lun, _usb_write_10),\ + TPASTE3(LUN_, lun, _NAME)\ + } +#elif ACCESS_MEM_TO_RAM == ENABLED +#define Lun_desc_entry(lun) \ + {\ + TPASTE3(Lun_, lun, _test_unit_ready),\ + TPASTE3(Lun_, lun, _read_capacity),\ + TPASTE3(Lun_, lun, _wr_protect),\ + TPASTE3(Lun_, lun, _removal),\ + TPASTE3(Lun_, lun, _mem_2_ram),\ + TPASTE3(Lun_, lun, _ram_2_mem),\ + TPASTE3(LUN_, lun, _NAME)\ + } +#else +#define Lun_desc_entry(lun) \ + {\ + TPASTE3(Lun_, lun, _test_unit_ready),\ + TPASTE3(Lun_, lun, _read_capacity),\ + TPASTE3(Lun_, lun, _wr_protect),\ + TPASTE3(Lun_, lun, _removal),\ + TPASTE3(LUN_, lun, _NAME)\ + } +#endif + +//! LUN descriptor table. +static const struct +{ + Ctrl_status (*test_unit_ready)(void); + Ctrl_status (*read_capacity)(U32 *); + Bool (*wr_protect)(void); + Bool (*removal)(void); +#if ACCESS_USB == ENABLED + Ctrl_status (*usb_read_10)(U32, U16); + Ctrl_status (*usb_write_10)(U32, U16); +#endif +#if ACCESS_MEM_TO_RAM == ENABLED + Ctrl_status (*mem_2_ram)(U32, void *); + Ctrl_status (*ram_2_mem)(U32, const void *); +#endif + const char *name; +} lun_desc[MAX_LUN] = +{ +#if LUN_0 == ENABLE + Lun_desc_entry(0), +#endif +#if LUN_1 == ENABLE + Lun_desc_entry(1), +#endif +#if LUN_2 == ENABLE + Lun_desc_entry(2), +#endif +#if LUN_3 == ENABLE + Lun_desc_entry(3), +#endif +#if LUN_4 == ENABLE + Lun_desc_entry(4), +#endif +#if LUN_5 == ENABLE + Lun_desc_entry(5), +#endif +#if LUN_6 == ENABLE + Lun_desc_entry(6), +#endif +#if LUN_7 == ENABLE + Lun_desc_entry(7) +#endif +}; + +#endif + + +#if GLOBAL_WR_PROTECT == ENABLED +Bool g_wr_protect; +#endif + + +/*! \name Control Interface + */ +//! @{ + + +#ifdef FREERTOS_USED + +Bool ctrl_access_init(void) +{ + // If the handle to the protecting semaphore is not valid, + if (!ctrl_access_semphr) + { + // try to create the semaphore. + vSemaphoreCreateBinary(ctrl_access_semphr); + + // If the semaphore could not be created, there is no backup solution. + if (!ctrl_access_semphr) return FALSE; + } + + return TRUE; +} + + +/*! \brief Locks accesses to LUNs. + * + * \return \c TRUE if the access was successfully locked, else \c FALSE. + */ +static Bool ctrl_access_lock(void) +{ + // If the semaphore could not be created, there is no backup solution. + if (!ctrl_access_semphr) return FALSE; + + // Wait for the semaphore. + while (!xSemaphoreTake(ctrl_access_semphr, portMAX_DELAY)); + + return TRUE; +} + +#endif // FREERTOS_USED + + +U8 get_nb_lun(void) +{ +#if MEM_USB == ENABLE + U8 nb_lun; + + if (!Ctrl_access_lock()) return MAX_LUN; + + nb_lun = MAX_LUN + host_get_lun(); + + Ctrl_access_unlock(); + + return nb_lun; +#else + return MAX_LUN; +#endif +} + + +U8 get_cur_lun(void) +{ + return LUN_ID_0; +} + + +Ctrl_status mem_test_unit_ready(U8 lun) +{ + Ctrl_status status; + + if (!Ctrl_access_lock()) return CTRL_FAIL; + + status = +#if MAX_LUN + (lun < MAX_LUN) ? lun_desc[lun].test_unit_ready() : +#endif +#if LUN_USB == ENABLE + Lun_usb_test_unit_ready(lun - LUN_ID_USB); +#else + CTRL_FAIL; +#endif + + Ctrl_access_unlock(); + + return status; +} + + +Ctrl_status mem_read_capacity(U8 lun, U32 *u32_nb_sector) +{ + Ctrl_status status; + + if (!Ctrl_access_lock()) return CTRL_FAIL; + + status = +#if MAX_LUN + (lun < MAX_LUN) ? lun_desc[lun].read_capacity(u32_nb_sector) : +#endif +#if LUN_USB == ENABLE + Lun_usb_read_capacity(lun - LUN_ID_USB, u32_nb_sector); +#else + CTRL_FAIL; +#endif + + Ctrl_access_unlock(); + + return status; +} + + +U8 mem_sector_size(U8 lun) +{ + U8 sector_size; + + if (!Ctrl_access_lock()) return 0; + + sector_size = +#if MAX_LUN + (lun < MAX_LUN) ? 1 : +#endif +#if LUN_USB == ENABLE + Lun_usb_read_sector_size(lun - LUN_ID_USB); +#else + 0; +#endif + + Ctrl_access_unlock(); + + return sector_size; +} + + +Bool mem_wr_protect(U8 lun) +{ + Bool wr_protect; + + if (!Ctrl_access_lock()) return TRUE; + + wr_protect = +#if MAX_LUN + (lun < MAX_LUN) ? lun_desc[lun].wr_protect() : +#endif +#if LUN_USB == ENABLE + Lun_usb_wr_protect(lun - LUN_ID_USB); +#else + TRUE; +#endif + + Ctrl_access_unlock(); + + return wr_protect; +} + + +Bool mem_removal(U8 lun) +{ + Bool removal; + + if (!Ctrl_access_lock()) return TRUE; + + removal = +#if MAX_LUN + (lun < MAX_LUN) ? lun_desc[lun].removal() : +#endif +#if LUN_USB == ENABLE + Lun_usb_removal(); +#else + TRUE; +#endif + + Ctrl_access_unlock(); + + return removal; +} + + +const char *mem_name(U8 lun) +{ + return +#if MAX_LUN + (lun < MAX_LUN) ? lun_desc[lun].name : +#endif +#if LUN_USB == ENABLE + LUN_USB_NAME; +#else + NULL; +#endif +} + + +//! @} + + +#if ACCESS_USB == ENABLED + +/*! \name MEM <-> USB Interface + */ +//! @{ + + +Ctrl_status memory_2_usb(U8 lun, U32 addr, U16 nb_sector) +{ + Ctrl_status status; + + if (!Ctrl_access_lock()) return CTRL_FAIL; + + memory_start_read_action(nb_sector); + status = +#if MAX_LUN + (lun < MAX_LUN) ? lun_desc[lun].usb_read_10(addr, nb_sector) : +#endif + CTRL_FAIL; + memory_stop_read_action(); + + Ctrl_access_unlock(); + + return status; +} + + +Ctrl_status usb_2_memory(U8 lun, U32 addr, U16 nb_sector) +{ + Ctrl_status status; + + if (!Ctrl_access_lock()) return CTRL_FAIL; + + memory_start_write_action(nb_sector); + status = +#if MAX_LUN + (lun < MAX_LUN) ? lun_desc[lun].usb_write_10(addr, nb_sector) : +#endif + CTRL_FAIL; + memory_stop_write_action(); + + Ctrl_access_unlock(); + + return status; +} + + +//! @} + +#endif // ACCESS_USB == ENABLED + + +#if ACCESS_MEM_TO_RAM == ENABLED + +/*! \name MEM <-> RAM Interface + */ +//! @{ + + +Ctrl_status memory_2_ram(U8 lun, U32 addr, void *ram) +{ + Ctrl_status status; + + if (!Ctrl_access_lock()) return CTRL_FAIL; + + memory_start_read_action(1); + status = +#if MAX_LUN + (lun < MAX_LUN) ? lun_desc[lun].mem_2_ram(addr, ram) : +#endif +#if LUN_USB == ENABLE + Lun_usb_mem_2_ram(addr, ram); +#else + CTRL_FAIL; +#endif + memory_stop_read_action(); + + Ctrl_access_unlock(); + + return status; +} + + +Ctrl_status ram_2_memory(U8 lun, U32 addr, const void *ram) +{ + Ctrl_status status; + + if (!Ctrl_access_lock()) return CTRL_FAIL; + + memory_start_write_action(1); + status = +#if MAX_LUN + (lun < MAX_LUN) ? lun_desc[lun].ram_2_mem(addr, ram) : +#endif +#if LUN_USB == ENABLE + Lun_usb_ram_2_mem(addr, ram); +#else + CTRL_FAIL; +#endif + memory_stop_write_action(); + + Ctrl_access_unlock(); + + return status; +} + + +//! @} + +#endif // ACCESS_MEM_TO_RAM == ENABLED + + +#if ACCESS_STREAM == ENABLED + +/*! \name Streaming MEM <-> MEM Interface + */ +//! @{ + + + #if ACCESS_MEM_TO_MEM == ENABLED + +#include "fat.h" + +Ctrl_status stream_mem_to_mem(U8 src_lun, U32 src_addr, U8 dest_lun, U32 dest_addr, U16 nb_sector) +{ +#if (defined __GNUC__) && (defined __AVR32__) + __attribute__((__aligned__(4))) +#elif (defined __ICCAVR32__) + #pragma data_alignment = 4 +#endif + static U8 sector_buf[FS_512B]; + Ctrl_status status = CTRL_GOOD; + + while (nb_sector--) + { + if ((status = memory_2_ram(src_lun, src_addr++, sector_buf)) != CTRL_GOOD) break; + if ((status = ram_2_memory(dest_lun, dest_addr++, sector_buf)) != CTRL_GOOD) break; + } + + return status; +} + + #endif // ACCESS_MEM_TO_MEM == ENABLED + + +Ctrl_status stream_state(U8 id) +{ + return CTRL_GOOD; +} + + +U16 stream_stop(U8 id) +{ + return 0; +} + + +//! @} + +#endif // ACCESS_STREAM == ENABLED diff --git a/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS/ctrl_access.h b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS/ctrl_access.h new file mode 100644 index 000000000..358bf6589 --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS/ctrl_access.h @@ -0,0 +1,369 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Abstraction layer for memory interfaces. + * + * This module contains the interfaces: + * - MEM <-> USB; + * - MEM <-> RAM; + * - MEM <-> MEM. + * + * This module may be configured and expanded to support the following features: + * - write-protected globals; + * - password-protected data; + * - specific features; + * - etc. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _CTRL_ACCESS_H_ +#define _CTRL_ACCESS_H_ + +#include "compiler.h" +#include "conf_access.h" + + +//! Status returned by CTRL_ACCESS interfaces. +typedef enum +{ + CTRL_GOOD = PASS, //!< Success, memory ready. + CTRL_FAIL = FAIL, //!< An error occurred. + CTRL_NO_PRESENT = FAIL + 1, //!< Memory unplugged. + CTRL_BUSY = FAIL + 2 //!< Memory not initialized or changed. +} Ctrl_status; + + +// FYI: Each Logical Unit Number (LUN) corresponds to a memory. + +// Check LUN defines. +#ifndef LUN_0 + #error LUN_0 must be defined as ENABLE or DISABLE in conf_access.h +#endif +#ifndef LUN_1 + #error LUN_1 must be defined as ENABLE or DISABLE in conf_access.h +#endif +#ifndef LUN_2 + #error LUN_2 must be defined as ENABLE or DISABLE in conf_access.h +#endif +#ifndef LUN_3 + #error LUN_3 must be defined as ENABLE or DISABLE in conf_access.h +#endif +#ifndef LUN_4 + #error LUN_4 must be defined as ENABLE or DISABLE in conf_access.h +#endif +#ifndef LUN_5 + #error LUN_5 must be defined as ENABLE or DISABLE in conf_access.h +#endif +#ifndef LUN_6 + #error LUN_6 must be defined as ENABLE or DISABLE in conf_access.h +#endif +#ifndef LUN_7 + #error LUN_7 must be defined as ENABLE or DISABLE in conf_access.h +#endif +#ifndef LUN_USB + #error LUN_USB must be defined as ENABLE or DISABLE in conf_access.h +#endif + +/*! \name LUN IDs + */ +//! @{ +#define LUN_ID_0 (0) //!< First static LUN. +#define LUN_ID_1 (LUN_ID_0 + LUN_0) +#define LUN_ID_2 (LUN_ID_1 + LUN_1) +#define LUN_ID_3 (LUN_ID_2 + LUN_2) +#define LUN_ID_4 (LUN_ID_3 + LUN_3) +#define LUN_ID_5 (LUN_ID_4 + LUN_4) +#define LUN_ID_6 (LUN_ID_5 + LUN_5) +#define LUN_ID_7 (LUN_ID_6 + LUN_6) +#define MAX_LUN (LUN_ID_7 + LUN_7) //!< Number of static LUNs. +#define LUN_ID_USB (MAX_LUN) //!< First dynamic LUN (USB host mass storage). +//! @} + + +// Include LUN header files. +#if LUN_0 == ENABLE + #include LUN_0_INCLUDE +#endif +#if LUN_1 == ENABLE + #include LUN_1_INCLUDE +#endif +#if LUN_2 == ENABLE + #include LUN_2_INCLUDE +#endif +#if LUN_3 == ENABLE + #include LUN_3_INCLUDE +#endif +#if LUN_4 == ENABLE + #include LUN_4_INCLUDE +#endif +#if LUN_5 == ENABLE + #include LUN_5_INCLUDE +#endif +#if LUN_6 == ENABLE + #include LUN_6_INCLUDE +#endif +#if LUN_7 == ENABLE + #include LUN_7_INCLUDE +#endif +#if LUN_USB == ENABLE + #include LUN_USB_INCLUDE +#endif + + +// Check the configuration of write protection in conf_access.h. +#ifndef GLOBAL_WR_PROTECT + #error GLOBAL_WR_PROTECT must be defined as ENABLED or DISABLED in conf_access.h +#endif + + +#if GLOBAL_WR_PROTECT == ENABLED + +//! Write protect. +extern Bool g_wr_protect; + +#endif + + +/*! \name Control Interface + */ +//! @{ + +#ifdef FREERTOS_USED + +/*! \brief Initializes the LUN access locker. + * + * \return \c TRUE if the locker was successfully initialized, else \c FALSE. + */ +extern Bool ctrl_access_init(void); + +#endif // FREERTOS_USED + +/*! \brief Returns the number of LUNs. + * + * \return Number of LUNs in the system. + */ +extern U8 get_nb_lun(void); + +/*! \brief Returns the current LUN. + * + * \return Current LUN. + * + * \todo Implement. + */ +extern U8 get_cur_lun(void); + +/*! \brief Tests the memory state and initializes the memory if required. + * + * The TEST UNIT READY SCSI primary command allows an application client to poll + * a LUN until it is ready without having to allocate memory for returned data. + * + * This command may be used to check the media status of LUNs with removable + * media. + * + * \param lun Logical Unit Number. + * + * \return Status. + */ +extern Ctrl_status mem_test_unit_ready(U8 lun); + +/*! \brief Returns the address of the last valid sector (512 bytes) in the + * memory. + * + * \param lun Logical Unit Number. + * \param u32_nb_sector Pointer to the address of the last valid sector. + * + * \return Status. + */ +extern Ctrl_status mem_read_capacity(U8 lun, U32 *u32_nb_sector); + +/*! \brief Returns the size of the physical sector. + * + * \param lun Logical Unit Number. + * + * \return Sector size (unit: 512 bytes). + */ +extern U8 mem_sector_size(U8 lun); + +/*! \brief Returns the write-protection state of the memory. + * + * \param lun Logical Unit Number. + * + * \return \c TRUE if the memory is write-protected, else \c FALSE. + * + * \note Only used by removable memories with hardware-specific write + * protection. + */ +extern Bool mem_wr_protect(U8 lun); + +/*! \brief Tells whether the memory is removable. + * + * \param lun Logical Unit Number. + * + * \return \c TRUE if the memory is removable, else \c FALSE. + */ +extern Bool mem_removal(U8 lun); + +/*! \brief Returns a pointer to the LUN name. + * + * \param lun Logical Unit Number. + * + * \return Pointer to the LUN name string. + */ +extern const char *mem_name(U8 lun); + +//! @} + + +#if ACCESS_USB == ENABLED + +/*! \name MEM <-> USB Interface + */ +//! @{ + +/*! \brief Tranfers data from the memory to USB. + * + * \param lun Logical Unit Number. + * \param addr Address of first memory sector to read. + * \param nb_sector Number of sectors to transfer. + * + * \return Status. + */ +extern Ctrl_status memory_2_usb(U8 lun, U32 addr, U16 nb_sector); + +/*! \brief Tranfers data from USB to the memory. + * + * \param lun Logical Unit Number. + * \param addr Address of first memory sector to write. + * \param nb_sector Number of sectors to transfer. + * + * \return Status. + */ +extern Ctrl_status usb_2_memory(U8 lun, U32 addr, U16 nb_sector); + +//! @} + +#endif // ACCESS_USB == ENABLED + + +#if ACCESS_MEM_TO_RAM == ENABLED + +/*! \name MEM <-> RAM Interface + */ +//! @{ + +/*! \brief Copies 1 data sector from the memory to RAM. + * + * \param lun Logical Unit Number. + * \param addr Address of first memory sector to read. + * \param ram Pointer to RAM buffer to write. + * + * \return Status. + */ +extern Ctrl_status memory_2_ram(U8 lun, U32 addr, void *ram); + +/*! \brief Copies 1 data sector from RAM to the memory. + * + * \param lun Logical Unit Number. + * \param addr Address of first memory sector to write. + * \param ram Pointer to RAM buffer to read. + * + * \return Status. + */ +extern Ctrl_status ram_2_memory(U8 lun, U32 addr, const void *ram); + +//! @} + +#endif // ACCESS_MEM_TO_RAM == ENABLED + + +#if ACCESS_STREAM == ENABLED + +/*! \name Streaming MEM <-> MEM Interface + */ +//! @{ + +//! Erroneous streaming data transfer ID. +#define ID_STREAM_ERR 0xFF + + #if ACCESS_MEM_TO_MEM == ENABLED + +/*! \brief Copies data from one memory to another. + * + * \param src_lun Source Logical Unit Number. + * \param src_addr Source address of first memory sector to read. + * \param dest_lun Destination Logical Unit Number. + * \param dest_addr Destination address of first memory sector to write. + * \param nb_sector Number of sectors to copy. + * + * \return Status. + */ +extern Ctrl_status stream_mem_to_mem(U8 src_lun, U32 src_addr, U8 dest_lun, U32 dest_addr, U16 nb_sector); + + #endif // ACCESS_MEM_TO_MEM == ENABLED + +/*! \brief Returns the state of a streaming data transfer. + * + * \param id Transfer ID. + * + * \return Status. + * + * \todo Implement. + */ +extern Ctrl_status stream_state(U8 id); + +/*! \brief Stops a streaming data transfer. + * + * \param id Transfer ID. + * + * \return Number of remaining sectors. + * + * \todo Implement. + */ +extern U16 stream_stop(U8 id); + +//! @} + +#endif // ACCESS_STREAM == ENABLED + + +#endif // _CTRL_ACCESS_H_ diff --git a/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/debug.c b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/debug.c new file mode 100644 index 000000000..c7c0a03e5 --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/debug.c @@ -0,0 +1,119 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Macros and functions dedicated to debug purposes. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with a USART module can be used. + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#include "compiler.h" +#include "debug.h" + + +#if (defined __GNUC__) +# include "malloc.h" + +U32 get_heap_curr_used_size( void ) +{ + struct mallinfo my_info=mallinfo(); + return my_info.uordblks; +} + +U32 get_heap_total_used_size( void ) +{ + struct mallinfo my_info=mallinfo(); + return my_info.arena; +} +#endif + +U32 get_heap_free_size( void ) +{ + U32 high_mark= AVR32_SRAM_SIZE; + U32 low_mark = 0; + U32 size ; + void* p_mem; + + size = (high_mark + low_mark)/2; + + do + { + p_mem = malloc(size); + if( p_mem != NULL) + { // Can allocate memory + free(p_mem); + low_mark = size; + } + else + { // Can not allocate memory + high_mark = size; + } + + size = (high_mark + low_mark)/2; + } + while( (high_mark-low_mark) >1 ); + + return size; +} + +static void* round_trace_pbuf; +static U32 round_trace_size; + +void uc3_round_trace_init(void* buf, U32 size) +{ + round_trace_pbuf = buf; + (*(U32*)round_trace_pbuf)=(U32)buf+4; + round_trace_size = size; +} + +void uc3_round_trace(U32 val) +{ + //Disable_global_interrupt(); + + U32* p_wr = (U32*)(*(U32*)round_trace_pbuf); + *p_wr = val; + p_wr++; + if( ((U32)p_wr % round_trace_size) ==0 ) + p_wr= (U32*)round_trace_pbuf+1; + *p_wr = 0xdeadbeef; + *(U32*)round_trace_pbuf = (U32)p_wr; + + //Enable_global_interrupt(); +} diff --git a/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/debug.h b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/debug.h new file mode 100644 index 000000000..a832d7c9c --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/debug.h @@ -0,0 +1,116 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Macros and functions dedicated to debug purposes. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with a USART module can be used. + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _DEBUG_H_ +#define _DEBUG_H_ + +#include "stringz.h" + +/*! \brief These macros are used to add traces memory. + * + * First, initialise the trace with Uc3_trace_init(pointer), giving the start address + * of the memory location where will be stored the trace. + * Use Uc3_trace(something) to store "something" into the memory. The end of the trace + * is signaled by the "0xdeadbeef" pattern. + */ +#define Uc3_trace_init(debug_addr) \ + *(U32*)(debug_addr)=debug_addr+4 + +#define Uc3_trace(debug_addr, x) \ + *(U32*)(*(U32*)(debug_addr) ) = (U32)(x) ;\ + *(U32*)(*(U32*)(debug_addr)+4) = 0xdeadbeef ;\ + *(U32*)(debug_addr ) = *(U32*)(debug_addr)+4 + +/*! \brief This macro is used to insert labels into assembly output. + * + */ +#define Insert_label(name) \ + __asm__ __volatile__ (STRINGZ(name)":"); + +#if (defined __GNUC__) +/*! \brief Returns the number of total of used bytes allocated from the HEAP. + * + * \retval total number of used bytes. + */ +U32 get_heap_total_used_size( void ); + +/*! \brief Returns the number of bytes currently used from the HEAP. + * + * \retval total number of used bytes. + */ +U32 get_heap_curr_used_size( void ); +#endif + +/*! \brief Returns the number of free bytes in the HEAP. + * + * This funtion tries to allocate the maximum number of bytes by dichotomical method. + * + * \retval number of free bytes. + */ +extern U32 get_heap_free_size( void ); + +/*! \name Traces function using a round buffer + */ +//! @{ + +/*! \brief Initialize the trace using a round buffer. + * + * \param buf Base address of the buffer used for the trace. + * \param size Size of the round buffer. Must be a power of 2. + */ +void uc3_round_trace_init(void* buf, U32 size); + +/*! \brief Trace a data in the round buffer. + * + * The end of the trace is signaled by the "0xdeadbeef" pattern. + * \param val Data to trace; + */ +void uc3_round_trace(U32 val); + +//! @} + + +#endif // _DEBUG_H_ diff --git a/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/print_funcs.c b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/print_funcs.c new file mode 100644 index 000000000..99e927466 --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/print_funcs.c @@ -0,0 +1,215 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Strings and integers print module for debug purposes. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with a USART module can be used. + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#include "compiler.h" +#include "gpio.h" +#include "usart.h" +#include "print_funcs.h" + + +//! ASCII representation of hexadecimal digits. +static const char HEX_DIGITS[16] = "0123456789ABCDEF"; + + +void init_dbg_rs232(long pba_hz) +{ + init_dbg_rs232_ex(DBG_USART_BAUDRATE, pba_hz); +} + + +void init_dbg_rs232_ex(unsigned long baudrate, long pba_hz) +{ + static const gpio_map_t DBG_USART_GPIO_MAP = + { + {DBG_USART_RX_PIN, DBG_USART_RX_FUNCTION}, + {DBG_USART_TX_PIN, DBG_USART_TX_FUNCTION} + }; + + // Options for debug USART. + usart_options_t dbg_usart_options = + { + .baudrate = baudrate, + .charlength = 8, + .paritytype = USART_NO_PARITY, + .stopbits = USART_1_STOPBIT, + .channelmode = USART_NORMAL_CHMODE + }; + + // Setup GPIO for debug USART. + gpio_enable_module(DBG_USART_GPIO_MAP, + sizeof(DBG_USART_GPIO_MAP) / sizeof(DBG_USART_GPIO_MAP[0])); + + // Initialize it in RS232 mode. + usart_init_rs232(DBG_USART, &dbg_usart_options, pba_hz); +} + + +void print_dbg(const char *str) +{ + // Redirection to the debug USART. + print(DBG_USART, str); +} + + +void print_dbg_char(int c) +{ + // Redirection to the debug USART. + print_char(DBG_USART, c); +} + + +void print_dbg_ulong(unsigned long n) +{ + // Redirection to the debug USART. + print_ulong(DBG_USART, n); +} + + +void print_dbg_char_hex(unsigned char n) +{ + // Redirection to the debug USART. + print_char_hex(DBG_USART, n); +} + + +void print_dbg_short_hex(unsigned short n) +{ + // Redirection to the debug USART. + print_short_hex(DBG_USART, n); +} + + +void print_dbg_hex(unsigned long n) +{ + // Redirection to the debug USART. + print_hex(DBG_USART, n); +} + + +void print(volatile avr32_usart_t *usart, const char *str) +{ + // Invoke the USART driver to transmit the input string with the given USART. + usart_write_line(usart, str); +} + + +void print_char(volatile avr32_usart_t *usart, int c) +{ + // Invoke the USART driver to transmit the input character with the given USART. + usart_putchar(usart, c); +} + + +void print_ulong(volatile avr32_usart_t *usart, unsigned long n) +{ + char tmp[11]; + int i = sizeof(tmp) - 1; + + // Convert the given number to an ASCII decimal representation. + tmp[i] = '\0'; + do + { + tmp[--i] = '0' + n % 10; + n /= 10; + } while (n); + + // Transmit the resulting string with the given USART. + print(usart, tmp + i); +} + + +void print_char_hex(volatile avr32_usart_t *usart, unsigned char n) +{ + char tmp[3]; + int i; + + // Convert the given number to an ASCII hexadecimal representation. + tmp[2] = '\0'; + for (i = 1; i >= 0; i--) + { + tmp[i] = HEX_DIGITS[n & 0xF]; + n >>= 4; + } + + // Transmit the resulting string with the given USART. + print(usart, tmp); +} + + +void print_short_hex(volatile avr32_usart_t *usart, unsigned short n) +{ + char tmp[5]; + int i; + + // Convert the given number to an ASCII hexadecimal representation. + tmp[4] = '\0'; + for (i = 3; i >= 0; i--) + { + tmp[i] = HEX_DIGITS[n & 0xF]; + n >>= 4; + } + + // Transmit the resulting string with the given USART. + print(usart, tmp); +} + + +void print_hex(volatile avr32_usart_t *usart, unsigned long n) +{ + char tmp[9]; + int i; + + // Convert the given number to an ASCII hexadecimal representation. + tmp[8] = '\0'; + for (i = 7; i >= 0; i--) + { + tmp[i] = HEX_DIGITS[n & 0xF]; + n >>= 4; + } + + // Transmit the resulting string with the given USART. + print(usart, tmp); +} diff --git a/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/print_funcs.h b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/print_funcs.h new file mode 100644 index 000000000..38f931dc2 --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/print_funcs.h @@ -0,0 +1,294 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Strings and integers print module for debug purposes. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with a USART module can be used. + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _PRINT_FUNCS_H_ +#define _PRINT_FUNCS_H_ + +#include +#include "board.h" + + +/*! \name USART Settings for the Debug Module + */ +//! @{ +#if BOARD == EVK1100 +# define DBG_USART (&AVR32_USART1) +# define DBG_USART_RX_PIN AVR32_USART1_RXD_0_0_PIN +# define DBG_USART_RX_FUNCTION AVR32_USART1_RXD_0_0_FUNCTION +# define DBG_USART_TX_PIN AVR32_USART1_TXD_0_0_PIN +# define DBG_USART_TX_FUNCTION AVR32_USART1_TXD_0_0_FUNCTION +# define DBG_USART_BAUDRATE 57600 +#elif BOARD == EVK1101 +# define DBG_USART (&AVR32_USART1) +# define DBG_USART_RX_PIN AVR32_USART1_RXD_0_0_PIN +# define DBG_USART_RX_FUNCTION AVR32_USART1_RXD_0_0_FUNCTION +# define DBG_USART_TX_PIN AVR32_USART1_TXD_0_0_PIN +# define DBG_USART_TX_FUNCTION AVR32_USART1_TXD_0_0_FUNCTION +# define DBG_USART_BAUDRATE 57600 +#elif BOARD == UC3C_EK +# define DBG_USART (&AVR32_USART2) +# define DBG_USART_RX_PIN AVR32_USART2_RXD_0_1_PIN +# define DBG_USART_RX_FUNCTION AVR32_USART2_RXD_0_1_FUNCTION +# define DBG_USART_TX_PIN AVR32_USART2_TXD_0_1_PIN +# define DBG_USART_TX_FUNCTION AVR32_USART2_TXD_0_1_FUNCTION +# define DBG_USART_BAUDRATE 57600 +#elif BOARD == EVK1104 +# define DBG_USART (&AVR32_USART1) +# define DBG_USART_RX_PIN AVR32_USART1_RXD_0_0_PIN +# define DBG_USART_RX_FUNCTION AVR32_USART1_RXD_0_0_FUNCTION +# define DBG_USART_TX_PIN AVR32_USART1_TXD_0_0_PIN +# define DBG_USART_TX_FUNCTION AVR32_USART1_TXD_0_0_FUNCTION +# define DBG_USART_BAUDRATE 57600 +#elif BOARD == EVK1105 +# define DBG_USART (&AVR32_USART0) +# define DBG_USART_RX_PIN AVR32_USART0_RXD_0_0_PIN +# define DBG_USART_RX_FUNCTION AVR32_USART0_RXD_0_0_FUNCTION +# define DBG_USART_TX_PIN AVR32_USART0_TXD_0_0_PIN +# define DBG_USART_TX_FUNCTION AVR32_USART0_TXD_0_0_FUNCTION +# define DBG_USART_BAUDRATE 57600 +#elif BOARD == STK1000 +# define DBG_USART (&AVR32_USART1) +# define DBG_USART_RX_PIN AVR32_USART1_RXD_0_PIN +# define DBG_USART_RX_FUNCTION AVR32_USART1_RXD_0_FUNCTION +# define DBG_USART_TX_PIN AVR32_USART1_TXD_0_PIN +# define DBG_USART_TX_FUNCTION AVR32_USART1_TXD_0_FUNCTION +# define DBG_USART_BAUDRATE 115200 +#elif BOARD == NGW100 +# define DBG_USART (&AVR32_USART1) +# define DBG_USART_RX_PIN AVR32_USART1_RXD_0_PIN +# define DBG_USART_RX_FUNCTION AVR32_USART1_RXD_0_FUNCTION +# define DBG_USART_TX_PIN AVR32_USART1_TXD_0_PIN +# define DBG_USART_TX_FUNCTION AVR32_USART1_TXD_0_FUNCTION +# define DBG_USART_BAUDRATE 115200 +#elif BOARD == STK600_RCUC3L0 +# define DBG_USART (&AVR32_USART1) +# define DBG_USART_RX_PIN AVR32_USART1_RXD_0_1_PIN +# define DBG_USART_RX_FUNCTION AVR32_USART1_RXD_0_1_FUNCTION +// For the RX pin, connect STK600.PORTE.PE3 to STK600.RS232 SPARE.RXD +# define DBG_USART_TX_PIN AVR32_USART1_TXD_0_1_PIN +# define DBG_USART_TX_FUNCTION AVR32_USART1_TXD_0_1_FUNCTION +// For the TX pin, connect STK600.PORTE.PE2 to STK600.RS232 SPARE.TXD +# define DBG_USART_BAUDRATE 57600 +# define DBG_USART_CLOCK_MASK AVR32_USART1_CLK_PBA +#elif BOARD == UC3L_EK +# define DBG_USART (&AVR32_USART3) +# define DBG_USART_RX_PIN AVR32_USART3_RXD_0_0_PIN +# define DBG_USART_RX_FUNCTION AVR32_USART3_RXD_0_0_FUNCTION +# define DBG_USART_TX_PIN AVR32_USART3_TXD_0_0_PIN +# define DBG_USART_TX_FUNCTION AVR32_USART3_TXD_0_0_FUNCTION +# define DBG_USART_BAUDRATE 57600 +# define DBG_USART_CLOCK_MASK AVR32_USART3_CLK_PBA +#elif BOARD == ARDUINO +# define DBG_USART (&AVR32_USART1) +# define DBG_USART_RX_PIN AVR32_USART1_RXD_0_0_PIN +# define DBG_USART_RX_FUNCTION AVR32_USART1_RXD_0_0_FUNCTION +# define DBG_USART_TX_PIN AVR32_USART1_TXD_0_0_PIN +# define DBG_USART_TX_FUNCTION AVR32_USART1_TXD_0_0_FUNCTION +# define DBG_USART_BAUDRATE 57600 +# define DBG_USART_CLOCK_MASK AVR32_USART1_CLK_PBA +#endif + +#if !defined(DBG_USART) || \ + !defined(DBG_USART_RX_PIN) || \ + !defined(DBG_USART_RX_FUNCTION) || \ + !defined(DBG_USART_TX_PIN) || \ + !defined(DBG_USART_TX_FUNCTION) || \ + !defined(DBG_USART_BAUDRATE) +# error The USART configuration to use for debug on your board is missing +#endif +//! @} + +/*! \name VT100 Common Commands + */ +//! @{ +#define CLEARSCR "\x1B[2J\x1B[;H" //!< Clear screen. +#define CLEAREOL "\x1B[K" //!< Clear end of line. +#define CLEAREOS "\x1B[J" //!< Clear end of screen. +#define CLEARLCR "\x1B[0K" //!< Clear line cursor right. +#define CLEARLCL "\x1B[1K" //!< Clear line cursor left. +#define CLEARELN "\x1B[2K" //!< Clear entire line. +#define CLEARCDW "\x1B[0J" //!< Clear cursor down. +#define CLEARCUP "\x1B[1J" //!< Clear cursor up. +#define GOTOYX "\x1B[%.2d;%.2dH" //!< Set cursor to (y, x). +#define INSERTMOD "\x1B[4h" //!< Insert mode. +#define OVERWRITEMOD "\x1B[4l" //!< Overwrite mode. +#define DELAFCURSOR "\x1B[K" //!< Erase from cursor to end of line. +#define CRLF "\r\n" //!< Carriage Return + Line Feed. +//! @} + +/*! \name VT100 Cursor Commands + */ +//! @{ +#define CURSON "\x1B[?25h" //!< Show cursor. +#define CURSOFF "\x1B[?25l" //!< Hide cursor. +//! @} + +/*! \name VT100 Character Commands + */ +//! @{ +#define NORMAL "\x1B[0m" //!< Normal. +#define BOLD "\x1B[1m" //!< Bold. +#define UNDERLINE "\x1B[4m" //!< Underline. +#define BLINKING "\x1B[5m" //!< Blink. +#define INVVIDEO "\x1B[7m" //!< Inverse video. +//! @} + +/*! \name VT100 Color Commands + */ +//! @{ +#define CL_BLACK "\033[22;30m" //!< Black. +#define CL_RED "\033[22;31m" //!< Red. +#define CL_GREEN "\033[22;32m" //!< Green. +#define CL_BROWN "\033[22;33m" //!< Brown. +#define CL_BLUE "\033[22;34m" //!< Blue. +#define CL_MAGENTA "\033[22;35m" //!< Magenta. +#define CL_CYAN "\033[22;36m" //!< Cyan. +#define CL_GRAY "\033[22;37m" //!< Gray. +#define CL_DARKGRAY "\033[01;30m" //!< Dark gray. +#define CL_LIGHTRED "\033[01;31m" //!< Light red. +#define CL_LIGHTGREEN "\033[01;32m" //!< Light green. +#define CL_YELLOW "\033[01;33m" //!< Yellow. +#define CL_LIGHTBLUE "\033[01;34m" //!< Light blue. +#define CL_LIGHTMAGENTA "\033[01;35m" //!< Light magenta. +#define CL_LIGHTCYAN "\033[01;36m" //!< Light cyan. +#define CL_WHITE "\033[01;37m" //!< White. +//! @} + + +/*! \brief Sets up DBG_USART with 8N1 at DBG_USART_BAUDRATE. + * + * \param pba_hz PBA clock frequency (Hz). + */ +extern void init_dbg_rs232(long pba_hz); + +/*! \brief Sets up DBG_USART with 8N1 at a given baud rate. + * + * \param baudrate Baud rate to set DBG_USART to. + * \param pba_hz PBA clock frequency (Hz). + */ +extern void init_dbg_rs232_ex(unsigned long baudrate, long pba_hz); + +/*! \brief Prints a string of characters to DBG_USART. + * + * \param str The string of characters to print. + */ +extern void print_dbg(const char *str); + +/*! \brief Prints a character to DBG_USART. + * + * \param c The character to print. + */ +extern void print_dbg_char(int c); + +/*! \brief Prints an integer to DBG_USART in a decimal representation. + * + * \param n The integer to print. + */ +extern void print_dbg_ulong(unsigned long n); + +/*! \brief Prints a char to DBG_USART in an hexadecimal representation. + * + * \param n The char to print. + */ +extern void print_dbg_char_hex(unsigned char n); + +/*! \brief Prints a short integer to DBG_USART in an hexadecimal representation. + * + * \param n The short integer to print. + */ +extern void print_dbg_short_hex(unsigned short n); + +/*! \brief Prints an integer to DBG_USART in an hexadecimal representation. + * + * \param n The integer to print. + */ +extern void print_dbg_hex(unsigned long n); + +/*! \brief Prints a string of characters to a given USART. + * + * \param usart Base address of the USART instance to print to. + * \param str The string of characters to print. + */ +extern void print(volatile avr32_usart_t *usart, const char *str); + +/*! \brief Prints a character to a given USART. + * + * \param usart Base address of the USART instance to print to. + * \param c The character to print. + */ +extern void print_char(volatile avr32_usart_t *usart, int c); + +/*! \brief Prints an integer to a given USART in a decimal representation. + * + * \param usart Base address of the USART instance to print to. + * \param n The integer to print. + */ +extern void print_ulong(volatile avr32_usart_t *usart, unsigned long n); + +/*! \brief Prints a char to a given USART in an hexadecimal representation. + * + * \param usart Base address of the USART instance to print to. + * \param n The char to print. + */ +extern void print_char_hex(volatile avr32_usart_t *usart, unsigned char n); + +/*! \brief Prints a short integer to a given USART in an hexadecimal + * representation. + * + * \param usart Base address of the USART instance to print to. + * \param n The short integer to print. + */ +extern void print_short_hex(volatile avr32_usart_t *usart, unsigned short n); + +/*! \brief Prints an integer to a given USART in an hexadecimal representation. + * + * \param usart Base address of the USART instance to print to. + * \param n The integer to print. + */ +extern void print_hex(volatile avr32_usart_t *usart, unsigned long n); + + +#endif // _PRINT_FUNCS_H_ diff --git a/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_cpu.h b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_cpu.h new file mode 100644 index 000000000..e3ebea7a1 --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_cpu.h @@ -0,0 +1,63 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief NEWLIB_ADDONS CPU include file for AVR32. + * + * - Compiler: GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef __AVR32_NEWLIB_ADDONS_CPU_H__ +#define __AVR32_NEWLIB_ADDONS_CPU_H__ + +#include <_ansi.h> + +_BEGIN_STD_C + +#define CPU_HZ get_cpu_hz() + +void udelay(unsigned long usec); +void set_cpu_hz(unsigned int clk_hz); +unsigned int get_cpu_hz(); + +_END_STD_C + +#endif diff --git a/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_exceptions.h b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_exceptions.h new file mode 100644 index 000000000..31caf1304 --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_exceptions.h @@ -0,0 +1,120 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief NEWLIB_ADDONS exceptions include file for AVR32. + * + * - Compiler: GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef __AVR32_NEWLIB_ADDONS_EXCEPTIONS_H__ +#define __AVR32_NEWLIB_ADDONS_EXCEPTIONS_H__ + +#include <_ansi.h> + +_BEGIN_STD_C + +/* + Exception vector offsets +*/ +#define EVBA_UNRECOVERABLE 0x000 +#define EVBA_TLB_MULTIPLE 0x004 +#define EVBA_BUS_ERROR_DATA 0x008 +#define EVBA_BUS_ERROR_INSTR 0x00C +#define EVBA_NMI 0x010 +#define EVBA_INSTR_ADDR 0x014 +#define EVBA_ITLB_MISS 0x050 +#define EVBA_ITLB_PROT 0x018 +#define EVBA_BREAKPOINT 0x01C +#define EVBA_ILLEGAL_OPCODE 0x020 +#define EVBA_UNIMPLEMENTED 0x024 +#define EVBA_PRIVILEGE_VIOL 0x028 +#define EVBA_FLOATING_POINT 0x02C +#define EVBA_COP_ABSENT 0x030 +#define EVBA_SCALL 0x100 +#define EVBA_DATA_ADDR_R 0x034 +#define EVBA_DATA_ADDR_W 0x038 +#define EVBA_DTLB_MISS_R 0x060 +#define EVBA_DTLB_MISS_W 0x070 +#define EVBA_DTLB_PROT_R 0x03C +#define EVBA_DTLB_PROT_W 0x040 +#define EVBA_DTLB_MODIFIED 0x044 + + +/* + Define the form of the function used when registering exceptions. + The function should return the address which the exception should + return to after the exception processing. +*/ + +typedef unsigned int (*__exception_handler)(int /*evba_offset*/, int /*return address*/); + +/* + Define the form of the function used when registering a scall handler. +*/ + +typedef void (*__scall_handler)(int /*code*/, int /*p1*/, int /*p2*/ + , int /*p3*/, int /*p4*/); + +/* + Function for registering an exception handler for the exception with + offset given by evba_offset. +*/ +void _register_exception_handler(__exception_handler handler, int evba_offset); + +/* + Function for registering a scall handler which can be a arbirary + function which uses r8-r12 for parameters. +*/ +void _register_scall_handler(__scall_handler handler); + +/* + Initialize exceptions. Must be called before registering exception handlers + and needed to enable exceptions. 'evba' is the pointer to the exception + vector. 'handler_table' is a pointer to an array where the pointers to + the exception handlers are stored. This array must be at least 0x104 bytes + and word aligned. +*/ +void init_exceptions(void *evba, void *handler_table); + +_END_STD_C + +#endif diff --git a/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_interrupts.h b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_interrupts.h new file mode 100644 index 000000000..76d81f737 --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_interrupts.h @@ -0,0 +1,82 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief NEWLIB_ADDONS interrupts include file for AVR32. + * + * - Compiler: GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef __AVR32_NEWLIB_ADDONS_INTERRUPTS_H__ +#define __AVR32_NEWLIB_ADDONS_INTERRUPTS_H__ + +#include <_ansi.h> + +_BEGIN_STD_C + +#define INT_GRPS 64 +#define INT_LINES 32 +#define INTPR_BASE (__intc_base__ + 0x0000) +#define INTREQ_BASE (__intc_base__ + 64*4) +#define INTCAUSE_BASE (__intc_base__ + 2*64*4) + +//Register offsets +#define INTLEVEL 30 +#define AUTOVECTOR 0 +#define AUTOVECTOR_BITS 14 + +//Priorities +#define INT0 0 +#define INT1 1 +#define INT2 2 +#define INT3 3 + + +typedef void (*__newlib_int_handler)(int /* int_grp*/, void */*user_handle*/); + +__newlib_int_handler register_interrupt(__newlib_int_handler handler, int int_grp, int line, int priority, + .../* void *user_handle*/); +void init_interrupts(); +void set_interrupts_base(void *base); + +_END_STD_C + +#endif diff --git a/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_io.h b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_io.h new file mode 100644 index 000000000..a725769fa --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_io.h @@ -0,0 +1,174 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief NEWLIB_ADDONS miscellaneous macros include file for AVR32. + * + * - Compiler: GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef __AVR32_NEWLIB_ADDONS_IO_H__ +#define __AVR32_NEWLIB_ADDONS_IO_H__ + +#include <_ansi.h> + +_BEGIN_STD_C + +typedef char u8; +typedef unsigned int u32; + +#define __raw_writeb(v,a) (*(volatile unsigned char *)(a) = (v)) +#define __raw_writew(v,a) (*(volatile unsigned short *)(a) = (v)) +#define __raw_writel(v,a) (*(volatile unsigned int *)(a) = (v)) + +#define __raw_readb(a) (*(volatile unsigned char *)(a)) +#define __raw_readw(a) (*(volatile unsigned short *)(a)) +#define __raw_readl(a) (*(volatile unsigned int *)(a)) + +/* As long as I/O is only performed in P4 (or possibly P3), we're safe */ +#define writeb(v,a) __raw_writeb(v,a) +#define writew(v,a) __raw_writew(v,a) +#define writel(v,a) __raw_writel(v,a) + +#define readb(a) __raw_readb(a) +#define readw(a) __raw_readw(a) +#define readl(a) __raw_readl(a) + +/* Memory segments when segmentation is enabled */ +#define P0SEG 0x00000000 +#define P1SEG 0x80000000 +#define P2SEG 0xa0000000 +#define P3SEG 0xc0000000 +#define P4SEG 0xe0000000 + +/* Returns the privileged segment base of a given address */ +#define PXSEG(a) (((unsigned long)(a)) & 0xe0000000) + +/* Returns the physical address of a PnSEG (n=1,2) address */ +#define PHYSADDR(a) (((unsigned long)(a)) & 0x1fffffff) + +/* + * Map an address to a certain privileged segment + */ +#define P1SEGADDR(a) ((__typeof__(a))(((unsigned long)(a) & 0x1fffffff) | P1SEG)) +#define P2SEGADDR(a) ((__typeof__(a))(((unsigned long)(a) & 0x1fffffff) | P2SEG)) +#define P3SEGADDR(a) ((__typeof__(a))(((unsigned long)(a) & 0x1fffffff) | P3SEG)) +#define P4SEGADDR(a) ((__typeof__(a))(((unsigned long)(a) & 0x1fffffff) | P4SEG)) + + +#define cached(addr) P1SEGADDR(addr) +#define uncached(addr) P2SEGADDR(addr) +#define physaddr(addr) PHYSADDR(addr) + +#define BF(field, value) \ + ({ union { \ + struct { \ + unsigned : 32 - field ## _OFFSET - field ## _SIZE ; \ + unsigned long __val: field ## _SIZE ; \ + }; \ + unsigned long __ul; \ + } __tmp; \ + __tmp.__ul = 0; \ + __tmp.__val = value; \ + __tmp.__ul;}) + +#define BF_D(field, value) \ + ({ union { \ + struct { \ + unsigned long long : 64 - field ## _OFFSET - field ## _SIZE ; \ + unsigned long long __val: field ## _SIZE ; \ + }; \ + unsigned long long __ul; \ + } __tmp; \ + __tmp.__ul = 0; \ + __tmp.__val = value; \ + __tmp.__ul;}) + +#define BFINS(var, field, value) \ + { union {\ + struct { \ + unsigned : 32 - field ## _OFFSET - field ## _SIZE ; \ + unsigned long __val: field ## _SIZE ; \ + }; \ + unsigned long __ul; \ + } __tmp; \ + __tmp.__ul = var; \ + __tmp.__val = value; \ + var = __tmp.__ul;} + +#define BFEXT(var, field) \ + ({ union {\ + struct { \ + unsigned : 32 - field ## _OFFSET - field ## _SIZE ; \ + unsigned long __val: field ## _SIZE ; \ + }; \ + unsigned long __ul; \ + } __tmp; \ + __tmp.__ul = var; \ + __tmp.__val; }) + +#define BFINS_D(var, field, value) \ + { union {\ + struct { \ + unsigned long long : 64 - field ## _OFFSET - field ## _SIZE ; \ + unsigned long long __val: field ## _SIZE ; \ + }; \ + unsigned long long __ul; \ + } __tmp; \ + __tmp.__ul = var; \ + __tmp.__val = value; \ + var = __tmp.__ul;} + +#define BFEXT_D(var, field) \ + ({ union {\ + struct { \ + unsigned long long : 64 - field ## _OFFSET - field ## _SIZE ; \ + unsigned long long __val: field ## _SIZE ; \ + }; \ + unsigned long long __ul; \ + } __tmp; \ + __tmp.__ul = var; \ + __tmp.__val; }) + + +_END_STD_C + +#endif diff --git a/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_usart.h b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_usart.h new file mode 100644 index 000000000..6c4697d78 --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_usart.h @@ -0,0 +1,208 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief NEWLIB_ADDONS USART include file for AVR32. + * + * - Compiler: GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef __AVR32_NEWLIB_ADDONS_USART_H__ +#define __AVR32_NEWLIB_ADDONS_USART_H__ + +#include <_ansi.h> + +#include "nlao_io.h" + +_BEGIN_STD_C + +struct usart3 { + volatile u32 us_cr; + volatile u32 us_mr; + volatile u32 us_ier; + volatile u32 us_idr; + volatile u32 us_imr; + volatile u32 us_csr; + volatile u32 us_rhr; + volatile u32 us_thr; + volatile u32 us_brgr; + volatile u32 us_rtor; + volatile u32 us_ttgr; + volatile u32 us_reserved[5]; + volatile u32 us_fidi; + volatile u32 us_ner; + volatile u32 us_xxr; + volatile u32 us_if; +}; + +/* Register offsets */ +#define US_CR 0x0000 +#define US_MR 0x0004 +#define US_IER 0x0008 +#define US_IDR 0x000c +#define US_IMR 0x0010 +#define US_CSR 0x0014 +#define US_RHR 0x0018 +#define US_THR 0x001c +#define US_BRGR 0x0020 +#define US_RTOR 0x0024 +#define US_TTGR 0x0028 + +#define US_FIDI 0x0040 +#define US_NER 0x0044 +#define US_XXR 0x0048 +#define US_IF 0x004c + +#define US_RPR 0x0100 +#define US_RCR 0x0104 +#define US_TPR 0x0108 +#define US_TCR 0x010c +#define US_RNPR 0x0110 +#define US_RNCR 0x0114 +#define US_TNPR 0x0118 +#define US_TNCR 0x011c +#define US_PTCR 0x0120 +#define US_PTSR 0x0124 + + + + +/* USART3 Control Register */ +#define US_CR_RSTRX (1 << 2) +#define US_CR_RSTTX (1 << 3) +#define US_CR_RXEN (1 << 4) +#define US_CR_RXDIS (1 << 5) +#define US_CR_TXEN (1 << 6) +#define US_CR_TXDIS (1 << 7) +#define US_CR_RSTSTA (1 << 8) +#define US_CR_STTBRK (1 << 9) +#define US_CR_STPBRK (1 << 10) + +#define US_CR_DTREN (1 << 16) +#define US_CR_DTRDIS (1 << 17) +#define US_CR_RTSEN (1 << 18) +#define US_CR_RTSDIS (1 << 19) + +/* USART3 Mode Register */ +#define US_MR_MODE (15 << 0) +#define US_MR_MODE_NORMAL ( 0 << 0) +#define US_MR_MODE_HWFLOW ( 2 << 0) +#define US_MR_CLKS ( 3 << 4) +#define US_MR_CLKS_CLOCK ( 0 << 4) +#define US_MR_CLKS_FDIV1 ( 1 << 4) +#define US_MR_CLKS_SLOW ( 2 << 4) +#define US_MR_CLKS_EXT ( 3 << 4) +#define US_MR_CHRL_5BITS ( 0 << 6) +#define US_MR_CHRL_6BITS ( 1 << 6) +#define US_MR_CHRL_7BITS ( 2 << 6) +#define US_MR_CHRL_8BITS ( 3 << 6) +#define US_MR_SYNC ( 1 << 8) +#define US_MR_PAR_EVEN ( 0 << 9) +#define US_MR_PAR_ODD ( 1 << 9) +#define US_MR_PAR_SPACE ( 2 << 9) +#define US_MR_PAR_MARK ( 3 << 9) +#define US_MR_PAR_NONE ( 4 << 9) +#define US_MR_PAR_MDROP ( 6 << 9) +#define US_MR_NBSTOP_1BIT ( 0 << 12) +#define US_MR_NBSTOP_1_5BIT ( 1 << 12) +#define US_MR_NBSTOP_2BITS ( 2 << 12) +#define US_MR_OVER ( 1 << 19) +#define US_MR_OVER_X16 ( 0 << 19) +#define US_MR_OVER_X8 ( 1 << 19) + +/* USART3 Channel Status Register */ +#define US_CSR_RXRDY (1 << 0) +#define US_CSR_TXRDY (1 << 1) +#define US_CSR_RXBRK (1 << 2) +#define US_CSR_ENDRX (1 << 3) +#define US_CSR_ENDTX (1 << 4) + + +#define US_CSR_OVRE (1 << 5) +#define US_CSR_FRAME (1 << 6) +#define US_CSR_PARE (1 << 7) + +#define US_CSR_TXEMPTY (1 << 9) + +#define US_CSR_TXBUFE (1 << 11) +#define US_CSR_RXBUFF (1 << 12) +#define US_CSR_RIIC (1 << 16) +#define US_CSR_DSRIC (1 << 17) +#define US_CSR_DCDIC (1 << 18) +#define US_CSR_CTSIC (1 << 19) +#define US_CSR_RI (1 << 20) +#define US_CSR_DSR (1 << 21) +#define US_CSR_DCD (1 << 22) +#define US_CSR_CTS (1 << 23) + +/* USART3 Baud Rate Generator Register */ +#define US_BRGR_CD_OFFSET 0 +#define US_BRGR_FP_OFFSET 16 + +#define US_BRGR_CD_SIZE 16 +#define US_BRGR_FP_SIZE 3 + +#define US_BRGR_CD (0xFFFF << 0) +#define US_BRGR_FP ( 7 << 16) + +/*USART3 PDC Transfer Control Register */ +#define US_PTCR_RXTEN (1 << 0) +#define US_PTCR_RXTDIS (1 << 1) +#define US_PTCR_TXTEN (1 << 8) +#define US_PTCR_TXTDIS (1 << 9) + +/*USART3 PDC Transfer Status Register */ +#define US_PTSR_RXTEN (1 << 0) +#define US_PTSR_TXTEN (1 << 8) + + +int usart_init(int baudrate); +void usart_putc(char c); +void usart_puts(const char *s); +int usart_getc(void); +int usart_tstc(void); +void usart_setbrg(int baudrate, int cpu_clock); +void set_usart_base(void *usart_base); + + +_END_STD_C + +#endif /* MERLIN_USART3_H */ diff --git a/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/libnewlib_addons-at32ucr2-speed_opt.a b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/libnewlib_addons-at32ucr2-speed_opt.a new file mode 100644 index 000000000..aa673eccd Binary files /dev/null and b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/libnewlib_addons-at32ucr2-speed_opt.a differ diff --git a/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LINKER_SCRIPTS/AT32UC3A/0512/GCC/link_uc3a0512.lds b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LINKER_SCRIPTS/AT32UC3A/0512/GCC/link_uc3a0512.lds new file mode 100644 index 000000000..59152ac0b --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LINKER_SCRIPTS/AT32UC3A/0512/GCC/link_uc3a0512.lds @@ -0,0 +1,266 @@ +/****************************************************************************** + * AVR32 AT32UC3A0512 GNU LD script file. + * + * - Compiler: GNU GCC for AVR32 + * - Supported devices: AVR32 AT32UC3A0512 + * + * - author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +OUTPUT_FORMAT("elf32-avr32", "elf32-avr32", "elf32-avr32") + +OUTPUT_ARCH(avr32:uc) + +ENTRY(_start) + +MEMORY +{ + FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 0x00080000 + INTRAM (wxa!ri) : ORIGIN = 0x00000004, LENGTH = 0x0000FFFC + USERPAGE : ORIGIN = 0x80800000, LENGTH = 0x00000200 +} + +PHDRS +{ + FLASH PT_LOAD; + INTRAM_ALIGN PT_NULL; + INTRAM_AT_FLASH PT_LOAD; + INTRAM PT_NULL; + USERPAGE PT_LOAD; +} + +SECTIONS +{ + /* If this heap size is selected, all the INTRAM space from the end of the + data area to the beginning of the stack will be allocated for the heap. */ + __max_heap_size__ = -1; + + /* Use a default heap size if heap size was not defined. */ + __heap_size__ = DEFINED(__heap_size__) ? __heap_size__ : __max_heap_size__; + + /* Use a default stack size if stack size was not defined. */ + __stack_size__ = DEFINED(__stack_size__) ? __stack_size__ : 4K; + + /* Read-only sections, merged into text segment: */ + PROVIDE (__executable_start = 0x80000000); . = 0x80000000; + .interp : { *(.interp) } >FLASH AT>FLASH :FLASH + .reset : { *(.reset) } >FLASH AT>FLASH :FLASH + .hash : { *(.hash) } >FLASH AT>FLASH :FLASH + .dynsym : { *(.dynsym) } >FLASH AT>FLASH :FLASH + .dynstr : { *(.dynstr) } >FLASH AT>FLASH :FLASH + .gnu.version : { *(.gnu.version) } >FLASH AT>FLASH :FLASH + .gnu.version_d : { *(.gnu.version_d) } >FLASH AT>FLASH :FLASH + .gnu.version_r : { *(.gnu.version_r) } >FLASH AT>FLASH :FLASH + .rel.init : { *(.rel.init) } >FLASH AT>FLASH :FLASH + .rela.init : { *(.rela.init) } >FLASH AT>FLASH :FLASH + .rel.text : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) } >FLASH AT>FLASH :FLASH + .rela.text : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) } >FLASH AT>FLASH :FLASH + .rel.fini : { *(.rel.fini) } >FLASH AT>FLASH :FLASH + .rela.fini : { *(.rela.fini) } >FLASH AT>FLASH :FLASH + .rel.rodata : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) } >FLASH AT>FLASH :FLASH + .rela.rodata : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) } >FLASH AT>FLASH :FLASH + .rel.data.rel.ro : { *(.rel.data.rel.ro*) } >FLASH AT>FLASH :FLASH + .rela.data.rel.ro : { *(.rel.data.rel.ro*) } >FLASH AT>FLASH :FLASH + .rel.data : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) } >FLASH AT>FLASH :FLASH + .rela.data : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) } >FLASH AT>FLASH :FLASH + .rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) } >FLASH AT>FLASH :FLASH + .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) } >FLASH AT>FLASH :FLASH + .rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) } >FLASH AT>FLASH :FLASH + .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) } >FLASH AT>FLASH :FLASH + .rel.ctors : { *(.rel.ctors) } >FLASH AT>FLASH :FLASH + .rela.ctors : { *(.rela.ctors) } >FLASH AT>FLASH :FLASH + .rel.dtors : { *(.rel.dtors) } >FLASH AT>FLASH :FLASH + .rela.dtors : { *(.rela.dtors) } >FLASH AT>FLASH :FLASH + .rel.got : { *(.rel.got) } >FLASH AT>FLASH :FLASH + .rela.got : { *(.rela.got) } >FLASH AT>FLASH :FLASH + .rel.bss : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) } >FLASH AT>FLASH :FLASH + .rela.bss : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) } >FLASH AT>FLASH :FLASH + .rel.plt : { *(.rel.plt) } >FLASH AT>FLASH :FLASH + .rela.plt : { *(.rela.plt) } >FLASH AT>FLASH :FLASH + .init : + { + KEEP (*(.init)) + } >FLASH AT>FLASH :FLASH =0xd703d703 + .plt : { *(.plt) } >FLASH AT>FLASH :FLASH + .text : + { + *(.text .stub .text.* .gnu.linkonce.t.*) + KEEP (*(.text.*personality*)) + /* .gnu.warning sections are handled specially by elf32.em. */ + *(.gnu.warning) + } >FLASH AT>FLASH :FLASH =0xd703d703 + .fini : + { + KEEP (*(.fini)) + } >FLASH AT>FLASH :FLASH =0xd703d703 + PROVIDE (__etext = .); + PROVIDE (_etext = .); + PROVIDE (etext = .); + .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } >FLASH AT>FLASH :FLASH + .rodata1 : { *(.rodata1) } >FLASH AT>FLASH :FLASH + .eh_frame_hdr : { *(.eh_frame_hdr) } >FLASH AT>FLASH :FLASH + .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) } >FLASH AT>FLASH :FLASH + .gcc_except_table : ONLY_IF_RO { KEEP (*(.gcc_except_table)) *(.gcc_except_table.*) } >FLASH AT>FLASH :FLASH + .lalign : { . = ALIGN(8); PROVIDE(_data_lma = .); } >FLASH AT>FLASH :FLASH + . = ORIGIN(INTRAM); + .dalign : { . = ALIGN(8); PROVIDE(_data = .); } >INTRAM AT>INTRAM :INTRAM_ALIGN + /* Exception handling */ + .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .gcc_except_table : ONLY_IF_RW { KEEP (*(.gcc_except_table)) *(.gcc_except_table.*) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + /* Thread Local Storage sections */ + .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + /* Ensure the __preinit_array_start label is properly aligned. We + could instead move the label definition inside the section, but + the linker would then create the section even if it turns out to + be empty, which isn't pretty. */ + PROVIDE (__preinit_array_start = ALIGN(32 / 8)); + .preinit_array : { KEEP (*(.preinit_array)) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + PROVIDE (__preinit_array_end = .); + PROVIDE (__init_array_start = .); + .init_array : { KEEP (*(.init_array)) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + PROVIDE (__init_array_end = .); + PROVIDE (__fini_array_start = .); + .fini_array : { KEEP (*(.fini_array)) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + PROVIDE (__fini_array_end = .); + .ctors : + { + /* gcc uses crtbegin.o to find the start of + the constructors, so we make sure it is + first. Because this is a wildcard, it + doesn't matter if the user does not + actually link against crtbegin.o; the + linker won't look for a file to match a + wildcard. The wildcard also means that it + doesn't matter which directory crtbegin.o + is in. */ + KEEP (*crtbegin*.o(.ctors)) + /* We don't want to include the .ctor section from + from the crtend.o file until after the sorted ctors. + The .ctor section from the crtend file contains the + end of ctors marker and it must be last */ + KEEP (*(EXCLUDE_FILE (*crtend*.o ) .ctors)) + KEEP (*(SORT(.ctors.*))) + KEEP (*(.ctors)) + } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .dtors : + { + KEEP (*crtbegin*.o(.dtors)) + KEEP (*(EXCLUDE_FILE (*crtend*.o ) .dtors)) + KEEP (*(SORT(.dtors.*))) + KEEP (*(.dtors)) + } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .jcr : { KEEP (*(.jcr)) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .data.rel.ro : { *(.data.rel.ro.local) *(.data.rel.ro*) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .dynamic : { *(.dynamic) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .got : { *(.got.plt) *(.got) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .ramtext : { *(.ramtext .ramtext.*) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .ddalign : { . = ALIGN(8); } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .data : + { + *(.data .data.* .gnu.linkonce.d.*) + KEEP (*(.gnu.linkonce.d.*personality*)) + SORT(CONSTRUCTORS) + } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .data1 : { *(.data1) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .balign : { . = ALIGN(8); PROVIDE(_edata = .); } >INTRAM AT>FLASH :INTRAM_AT_FLASH + PROVIDE (edata = .); + __bss_start = .; + .bss : + { + *(.dynbss) + *(.bss .bss.* .gnu.linkonce.b.*) + *(COMMON) + /* Align here to ensure that the .bss section occupies space up to + _end. Align after .bss to ensure correct alignment even if the + .bss section disappears because there are no input sections. */ + . = ALIGN(8); + } >INTRAM AT>INTRAM :INTRAM + . = ALIGN(8); + _end = .; + PROVIDE (end = .); + __heap_start__ = ALIGN(8); + .heap : + { + *(.heap) + . = (__heap_size__ == __max_heap_size__) ? + ORIGIN(INTRAM) + LENGTH(INTRAM) - __stack_size__ - ABSOLUTE(.) : + __heap_size__; + } >INTRAM AT>INTRAM :INTRAM + __heap_end__ = .; + /* Stabs debugging sections. */ + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + .comment 0 : { *(.comment) } + /* DWARF debug sections. + Symbols in the DWARF debugging sections are relative to the beginning + of the section so we begin them at 0. */ + /* DWARF 1 */ + .debug 0 : { *(.debug) } + .line 0 : { *(.line) } + /* GNU DWARF 1 extensions */ + .debug_srcinfo 0 : { *(.debug_srcinfo) } + .debug_sfnames 0 : { *(.debug_sfnames) } + /* DWARF 1.1 and DWARF 2 */ + .debug_aranges 0 : { *(.debug_aranges) } + .debug_pubnames 0 : { *(.debug_pubnames) } + /* DWARF 2 */ + .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_line 0 : { *(.debug_line) } + .debug_frame 0 : { *(.debug_frame) } + .debug_str 0 : { *(.debug_str) } + .debug_loc 0 : { *(.debug_loc) } + .debug_macinfo 0 : { *(.debug_macinfo) } + /* SGI/MIPS DWARF 2 extensions */ + .debug_weaknames 0 : { *(.debug_weaknames) } + .debug_funcnames 0 : { *(.debug_funcnames) } + .debug_typenames 0 : { *(.debug_typenames) } + .debug_varnames 0 : { *(.debug_varnames) } + .stack ORIGIN(INTRAM) + LENGTH(INTRAM) - __stack_size__ : + { + _stack = .; + *(.stack) + . = __stack_size__; + _estack = .; + } >INTRAM AT>INTRAM :INTRAM + .userpage : { *(.userpage .userpage.*) } >USERPAGE AT>USERPAGE :USERPAGE + /DISCARD/ : { *(.note.GNU-stack) } +} diff --git a/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LINKER_SCRIPTS/AT32UC3A/1256/GCC/link_uc3a1256.lds b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LINKER_SCRIPTS/AT32UC3A/1256/GCC/link_uc3a1256.lds new file mode 100644 index 000000000..a5926d8be --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LINKER_SCRIPTS/AT32UC3A/1256/GCC/link_uc3a1256.lds @@ -0,0 +1,266 @@ +/****************************************************************************** + * AVR32 AT32UC3A1256 GNU LD script file. + * + * - Compiler: GNU GCC for AVR32 + * - Supported devices: AVR32 AT32UC3A1256 + * + * - author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +OUTPUT_FORMAT("elf32-avr32", "elf32-avr32", "elf32-avr32") + +OUTPUT_ARCH(avr32:uc) + +ENTRY(_start) + +MEMORY +{ + FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 0x00040000 + INTRAM (wxa!ri) : ORIGIN = 0x00000004, LENGTH = 0x0000FFFC + USERPAGE : ORIGIN = 0x80800000, LENGTH = 0x00000200 +} + +PHDRS +{ + FLASH PT_LOAD; + INTRAM_ALIGN PT_NULL; + INTRAM_AT_FLASH PT_LOAD; + INTRAM PT_NULL; + USERPAGE PT_LOAD; +} + +SECTIONS +{ + /* If this heap size is selected, all the INTRAM space from the end of the + data area to the beginning of the stack will be allocated for the heap. */ + __max_heap_size__ = -1; + + /* Use a default heap size if heap size was not defined. */ + __heap_size__ = DEFINED(__heap_size__) ? __heap_size__ : __max_heap_size__; + + /* Use a default stack size if stack size was not defined. */ + __stack_size__ = DEFINED(__stack_size__) ? __stack_size__ : 4K; + + /* Read-only sections, merged into text segment: */ + PROVIDE (__executable_start = 0x80000000); . = 0x80000000; + .interp : { *(.interp) } >FLASH AT>FLASH :FLASH + .reset : { *(.reset) } >FLASH AT>FLASH :FLASH + .hash : { *(.hash) } >FLASH AT>FLASH :FLASH + .dynsym : { *(.dynsym) } >FLASH AT>FLASH :FLASH + .dynstr : { *(.dynstr) } >FLASH AT>FLASH :FLASH + .gnu.version : { *(.gnu.version) } >FLASH AT>FLASH :FLASH + .gnu.version_d : { *(.gnu.version_d) } >FLASH AT>FLASH :FLASH + .gnu.version_r : { *(.gnu.version_r) } >FLASH AT>FLASH :FLASH + .rel.init : { *(.rel.init) } >FLASH AT>FLASH :FLASH + .rela.init : { *(.rela.init) } >FLASH AT>FLASH :FLASH + .rel.text : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) } >FLASH AT>FLASH :FLASH + .rela.text : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) } >FLASH AT>FLASH :FLASH + .rel.fini : { *(.rel.fini) } >FLASH AT>FLASH :FLASH + .rela.fini : { *(.rela.fini) } >FLASH AT>FLASH :FLASH + .rel.rodata : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) } >FLASH AT>FLASH :FLASH + .rela.rodata : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) } >FLASH AT>FLASH :FLASH + .rel.data.rel.ro : { *(.rel.data.rel.ro*) } >FLASH AT>FLASH :FLASH + .rela.data.rel.ro : { *(.rel.data.rel.ro*) } >FLASH AT>FLASH :FLASH + .rel.data : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) } >FLASH AT>FLASH :FLASH + .rela.data : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) } >FLASH AT>FLASH :FLASH + .rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) } >FLASH AT>FLASH :FLASH + .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) } >FLASH AT>FLASH :FLASH + .rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) } >FLASH AT>FLASH :FLASH + .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) } >FLASH AT>FLASH :FLASH + .rel.ctors : { *(.rel.ctors) } >FLASH AT>FLASH :FLASH + .rela.ctors : { *(.rela.ctors) } >FLASH AT>FLASH :FLASH + .rel.dtors : { *(.rel.dtors) } >FLASH AT>FLASH :FLASH + .rela.dtors : { *(.rela.dtors) } >FLASH AT>FLASH :FLASH + .rel.got : { *(.rel.got) } >FLASH AT>FLASH :FLASH + .rela.got : { *(.rela.got) } >FLASH AT>FLASH :FLASH + .rel.bss : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) } >FLASH AT>FLASH :FLASH + .rela.bss : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) } >FLASH AT>FLASH :FLASH + .rel.plt : { *(.rel.plt) } >FLASH AT>FLASH :FLASH + .rela.plt : { *(.rela.plt) } >FLASH AT>FLASH :FLASH + .init : + { + KEEP (*(.init)) + } >FLASH AT>FLASH :FLASH =0xd703d703 + .plt : { *(.plt) } >FLASH AT>FLASH :FLASH + .text : + { + *(.text .stub .text.* .gnu.linkonce.t.*) + KEEP (*(.text.*personality*)) + /* .gnu.warning sections are handled specially by elf32.em. */ + *(.gnu.warning) + } >FLASH AT>FLASH :FLASH =0xd703d703 + .fini : + { + KEEP (*(.fini)) + } >FLASH AT>FLASH :FLASH =0xd703d703 + PROVIDE (__etext = .); + PROVIDE (_etext = .); + PROVIDE (etext = .); + .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } >FLASH AT>FLASH :FLASH + .rodata1 : { *(.rodata1) } >FLASH AT>FLASH :FLASH + .eh_frame_hdr : { *(.eh_frame_hdr) } >FLASH AT>FLASH :FLASH + .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) } >FLASH AT>FLASH :FLASH + .gcc_except_table : ONLY_IF_RO { KEEP (*(.gcc_except_table)) *(.gcc_except_table.*) } >FLASH AT>FLASH :FLASH + .lalign : { . = ALIGN(8); PROVIDE(_data_lma = .); } >FLASH AT>FLASH :FLASH + . = ORIGIN(INTRAM); + .dalign : { . = ALIGN(8); PROVIDE(_data = .); } >INTRAM AT>INTRAM :INTRAM_ALIGN + /* Exception handling */ + .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .gcc_except_table : ONLY_IF_RW { KEEP (*(.gcc_except_table)) *(.gcc_except_table.*) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + /* Thread Local Storage sections */ + .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + /* Ensure the __preinit_array_start label is properly aligned. We + could instead move the label definition inside the section, but + the linker would then create the section even if it turns out to + be empty, which isn't pretty. */ + PROVIDE (__preinit_array_start = ALIGN(32 / 8)); + .preinit_array : { KEEP (*(.preinit_array)) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + PROVIDE (__preinit_array_end = .); + PROVIDE (__init_array_start = .); + .init_array : { KEEP (*(.init_array)) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + PROVIDE (__init_array_end = .); + PROVIDE (__fini_array_start = .); + .fini_array : { KEEP (*(.fini_array)) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + PROVIDE (__fini_array_end = .); + .ctors : + { + /* gcc uses crtbegin.o to find the start of + the constructors, so we make sure it is + first. Because this is a wildcard, it + doesn't matter if the user does not + actually link against crtbegin.o; the + linker won't look for a file to match a + wildcard. The wildcard also means that it + doesn't matter which directory crtbegin.o + is in. */ + KEEP (*crtbegin*.o(.ctors)) + /* We don't want to include the .ctor section from + from the crtend.o file until after the sorted ctors. + The .ctor section from the crtend file contains the + end of ctors marker and it must be last */ + KEEP (*(EXCLUDE_FILE (*crtend*.o ) .ctors)) + KEEP (*(SORT(.ctors.*))) + KEEP (*(.ctors)) + } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .dtors : + { + KEEP (*crtbegin*.o(.dtors)) + KEEP (*(EXCLUDE_FILE (*crtend*.o ) .dtors)) + KEEP (*(SORT(.dtors.*))) + KEEP (*(.dtors)) + } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .jcr : { KEEP (*(.jcr)) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .data.rel.ro : { *(.data.rel.ro.local) *(.data.rel.ro*) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .dynamic : { *(.dynamic) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .got : { *(.got.plt) *(.got) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .ramtext : { *(.ramtext .ramtext.*) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .ddalign : { . = ALIGN(8); } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .data : + { + *(.data .data.* .gnu.linkonce.d.*) + KEEP (*(.gnu.linkonce.d.*personality*)) + SORT(CONSTRUCTORS) + } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .data1 : { *(.data1) } >INTRAM AT>FLASH :INTRAM_AT_FLASH + .balign : { . = ALIGN(8); PROVIDE(_edata = .); } >INTRAM AT>FLASH :INTRAM_AT_FLASH + PROVIDE (edata = .); + __bss_start = .; + .bss : + { + *(.dynbss) + *(.bss .bss.* .gnu.linkonce.b.*) + *(COMMON) + /* Align here to ensure that the .bss section occupies space up to + _end. Align after .bss to ensure correct alignment even if the + .bss section disappears because there are no input sections. */ + . = ALIGN(8); + } >INTRAM AT>INTRAM :INTRAM + . = ALIGN(8); + _end = .; + PROVIDE (end = .); + __heap_start__ = ALIGN(8); + .heap : + { + *(.heap) + . = (__heap_size__ == __max_heap_size__) ? + ORIGIN(INTRAM) + LENGTH(INTRAM) - __stack_size__ - ABSOLUTE(.) : + __heap_size__; + } >INTRAM AT>INTRAM :INTRAM + __heap_end__ = .; + /* Stabs debugging sections. */ + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + .comment 0 : { *(.comment) } + /* DWARF debug sections. + Symbols in the DWARF debugging sections are relative to the beginning + of the section so we begin them at 0. */ + /* DWARF 1 */ + .debug 0 : { *(.debug) } + .line 0 : { *(.line) } + /* GNU DWARF 1 extensions */ + .debug_srcinfo 0 : { *(.debug_srcinfo) } + .debug_sfnames 0 : { *(.debug_sfnames) } + /* DWARF 1.1 and DWARF 2 */ + .debug_aranges 0 : { *(.debug_aranges) } + .debug_pubnames 0 : { *(.debug_pubnames) } + /* DWARF 2 */ + .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_line 0 : { *(.debug_line) } + .debug_frame 0 : { *(.debug_frame) } + .debug_str 0 : { *(.debug_str) } + .debug_loc 0 : { *(.debug_loc) } + .debug_macinfo 0 : { *(.debug_macinfo) } + /* SGI/MIPS DWARF 2 extensions */ + .debug_weaknames 0 : { *(.debug_weaknames) } + .debug_funcnames 0 : { *(.debug_funcnames) } + .debug_typenames 0 : { *(.debug_typenames) } + .debug_varnames 0 : { *(.debug_varnames) } + .stack ORIGIN(INTRAM) + LENGTH(INTRAM) - __stack_size__ : + { + _stack = .; + *(.stack) + . = __stack_size__; + _estack = .; + } >INTRAM AT>INTRAM :INTRAM + .userpage : { *(.userpage .userpage.*) } >USERPAGE AT>USERPAGE :USERPAGE + /DISCARD/ : { *(.note.GNU-stack) } +} diff --git a/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/mrepeat.h b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/mrepeat.h new file mode 100644 index 000000000..41163b6d9 --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/mrepeat.h @@ -0,0 +1,328 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Preprocessor macro repeating utils. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _MREPEAT_H_ +#define _MREPEAT_H_ + +#include "preprocessor.h" + + +//! Maximal number of repetitions supported by MREPEAT. +#define MREPEAT_LIMIT 256 + +/*! \brief Macro repeat. + * + * This macro represents a horizontal repetition construct. + * + * \param count The number of repetitious calls to macro. Valid values range from 0 to MREPEAT_LIMIT. + * \param macro A binary operation of the form macro(n, data). This macro is expanded by MREPEAT with + * the current repetition number and the auxiliary data argument. + * \param data Auxiliary data passed to macro. + * + * \return macro(0, data) macro(1, data) ... macro(count - 1, data) + */ +#define MREPEAT(count, macro, data) TPASTE2(MREPEAT, count)(macro, data) + +#define MREPEAT0( macro, data) +#define MREPEAT1( macro, data) MREPEAT0( macro, data) macro( 0, data) +#define MREPEAT2( macro, data) MREPEAT1( macro, data) macro( 1, data) +#define MREPEAT3( macro, data) MREPEAT2( macro, data) macro( 2, data) +#define MREPEAT4( macro, data) MREPEAT3( macro, data) macro( 3, data) +#define MREPEAT5( macro, data) MREPEAT4( macro, data) macro( 4, data) +#define MREPEAT6( macro, data) MREPEAT5( macro, data) macro( 5, data) +#define MREPEAT7( macro, data) MREPEAT6( macro, data) macro( 6, data) +#define MREPEAT8( macro, data) MREPEAT7( macro, data) macro( 7, data) +#define MREPEAT9( macro, data) MREPEAT8( macro, data) macro( 8, data) +#define MREPEAT10( macro, data) MREPEAT9( macro, data) macro( 9, data) +#define MREPEAT11( macro, data) MREPEAT10( macro, data) macro( 10, data) +#define MREPEAT12( macro, data) MREPEAT11( macro, data) macro( 11, data) +#define MREPEAT13( macro, data) MREPEAT12( macro, data) macro( 12, data) +#define MREPEAT14( macro, data) MREPEAT13( macro, data) macro( 13, data) +#define MREPEAT15( macro, data) MREPEAT14( macro, data) macro( 14, data) +#define MREPEAT16( macro, data) MREPEAT15( macro, data) macro( 15, data) +#define MREPEAT17( macro, data) MREPEAT16( macro, data) macro( 16, data) +#define MREPEAT18( macro, data) MREPEAT17( macro, data) macro( 17, data) +#define MREPEAT19( macro, data) MREPEAT18( macro, data) macro( 18, data) +#define MREPEAT20( macro, data) MREPEAT19( macro, data) macro( 19, data) +#define MREPEAT21( macro, data) MREPEAT20( macro, data) macro( 20, data) +#define MREPEAT22( macro, data) MREPEAT21( macro, data) macro( 21, data) +#define MREPEAT23( macro, data) MREPEAT22( macro, data) macro( 22, data) +#define MREPEAT24( macro, data) MREPEAT23( macro, data) macro( 23, data) +#define MREPEAT25( macro, data) MREPEAT24( macro, data) macro( 24, data) +#define MREPEAT26( macro, data) MREPEAT25( macro, data) macro( 25, data) +#define MREPEAT27( macro, data) MREPEAT26( macro, data) macro( 26, data) +#define MREPEAT28( macro, data) MREPEAT27( macro, data) macro( 27, data) +#define MREPEAT29( macro, data) MREPEAT28( macro, data) macro( 28, data) +#define MREPEAT30( macro, data) MREPEAT29( macro, data) macro( 29, data) +#define MREPEAT31( macro, data) MREPEAT30( macro, data) macro( 30, data) +#define MREPEAT32( macro, data) MREPEAT31( macro, data) macro( 31, data) +#define MREPEAT33( macro, data) MREPEAT32( macro, data) macro( 32, data) +#define MREPEAT34( macro, data) MREPEAT33( macro, data) macro( 33, data) +#define MREPEAT35( macro, data) MREPEAT34( macro, data) macro( 34, data) +#define MREPEAT36( macro, data) MREPEAT35( macro, data) macro( 35, data) +#define MREPEAT37( macro, data) MREPEAT36( macro, data) macro( 36, data) +#define MREPEAT38( macro, data) MREPEAT37( macro, data) macro( 37, data) +#define MREPEAT39( macro, data) MREPEAT38( macro, data) macro( 38, data) +#define MREPEAT40( macro, data) MREPEAT39( macro, data) macro( 39, data) +#define MREPEAT41( macro, data) MREPEAT40( macro, data) macro( 40, data) +#define MREPEAT42( macro, data) MREPEAT41( macro, data) macro( 41, data) +#define MREPEAT43( macro, data) MREPEAT42( macro, data) macro( 42, data) +#define MREPEAT44( macro, data) MREPEAT43( macro, data) macro( 43, data) +#define MREPEAT45( macro, data) MREPEAT44( macro, data) macro( 44, data) +#define MREPEAT46( macro, data) MREPEAT45( macro, data) macro( 45, data) +#define MREPEAT47( macro, data) MREPEAT46( macro, data) macro( 46, data) +#define MREPEAT48( macro, data) MREPEAT47( macro, data) macro( 47, data) +#define MREPEAT49( macro, data) MREPEAT48( macro, data) macro( 48, data) +#define MREPEAT50( macro, data) MREPEAT49( macro, data) macro( 49, data) +#define MREPEAT51( macro, data) MREPEAT50( macro, data) macro( 50, data) +#define MREPEAT52( macro, data) MREPEAT51( macro, data) macro( 51, data) +#define MREPEAT53( macro, data) MREPEAT52( macro, data) macro( 52, data) +#define MREPEAT54( macro, data) MREPEAT53( macro, data) macro( 53, data) +#define MREPEAT55( macro, data) MREPEAT54( macro, data) macro( 54, data) +#define MREPEAT56( macro, data) MREPEAT55( macro, data) macro( 55, data) +#define MREPEAT57( macro, data) MREPEAT56( macro, data) macro( 56, data) +#define MREPEAT58( macro, data) MREPEAT57( macro, data) macro( 57, data) +#define MREPEAT59( macro, data) MREPEAT58( macro, data) macro( 58, data) +#define MREPEAT60( macro, data) MREPEAT59( macro, data) macro( 59, data) +#define MREPEAT61( macro, data) MREPEAT60( macro, data) macro( 60, data) +#define MREPEAT62( macro, data) MREPEAT61( macro, data) macro( 61, data) +#define MREPEAT63( macro, data) MREPEAT62( macro, data) macro( 62, data) +#define MREPEAT64( macro, data) MREPEAT63( macro, data) macro( 63, data) +#define MREPEAT65( macro, data) MREPEAT64( macro, data) macro( 64, data) +#define MREPEAT66( macro, data) MREPEAT65( macro, data) macro( 65, data) +#define MREPEAT67( macro, data) MREPEAT66( macro, data) macro( 66, data) +#define MREPEAT68( macro, data) MREPEAT67( macro, data) macro( 67, data) +#define MREPEAT69( macro, data) MREPEAT68( macro, data) macro( 68, data) +#define MREPEAT70( macro, data) MREPEAT69( macro, data) macro( 69, data) +#define MREPEAT71( macro, data) MREPEAT70( macro, data) macro( 70, data) +#define MREPEAT72( macro, data) MREPEAT71( macro, data) macro( 71, data) +#define MREPEAT73( macro, data) MREPEAT72( macro, data) macro( 72, data) +#define MREPEAT74( macro, data) MREPEAT73( macro, data) macro( 73, data) +#define MREPEAT75( macro, data) MREPEAT74( macro, data) macro( 74, data) +#define MREPEAT76( macro, data) MREPEAT75( macro, data) macro( 75, data) +#define MREPEAT77( macro, data) MREPEAT76( macro, data) macro( 76, data) +#define MREPEAT78( macro, data) MREPEAT77( macro, data) macro( 77, data) +#define MREPEAT79( macro, data) MREPEAT78( macro, data) macro( 78, data) +#define MREPEAT80( macro, data) MREPEAT79( macro, data) macro( 79, data) +#define MREPEAT81( macro, data) MREPEAT80( macro, data) macro( 80, data) +#define MREPEAT82( macro, data) MREPEAT81( macro, data) macro( 81, data) +#define MREPEAT83( macro, data) MREPEAT82( macro, data) macro( 82, data) +#define MREPEAT84( macro, data) MREPEAT83( macro, data) macro( 83, data) +#define MREPEAT85( macro, data) MREPEAT84( macro, data) macro( 84, data) +#define MREPEAT86( macro, data) MREPEAT85( macro, data) macro( 85, data) +#define MREPEAT87( macro, data) MREPEAT86( macro, data) macro( 86, data) +#define MREPEAT88( macro, data) MREPEAT87( macro, data) macro( 87, data) +#define MREPEAT89( macro, data) MREPEAT88( macro, data) macro( 88, data) +#define MREPEAT90( macro, data) MREPEAT89( macro, data) macro( 89, data) +#define MREPEAT91( macro, data) MREPEAT90( macro, data) macro( 90, data) +#define MREPEAT92( macro, data) MREPEAT91( macro, data) macro( 91, data) +#define MREPEAT93( macro, data) MREPEAT92( macro, data) macro( 92, data) +#define MREPEAT94( macro, data) MREPEAT93( macro, data) macro( 93, data) +#define MREPEAT95( macro, data) MREPEAT94( macro, data) macro( 94, data) +#define MREPEAT96( macro, data) MREPEAT95( macro, data) macro( 95, data) +#define MREPEAT97( macro, data) MREPEAT96( macro, data) macro( 96, data) +#define MREPEAT98( macro, data) MREPEAT97( macro, data) macro( 97, data) +#define MREPEAT99( macro, data) MREPEAT98( macro, data) macro( 98, data) +#define MREPEAT100(macro, data) MREPEAT99( macro, data) macro( 99, data) +#define MREPEAT101(macro, data) MREPEAT100(macro, data) macro(100, data) +#define MREPEAT102(macro, data) MREPEAT101(macro, data) macro(101, data) +#define MREPEAT103(macro, data) MREPEAT102(macro, data) macro(102, data) +#define MREPEAT104(macro, data) MREPEAT103(macro, data) macro(103, data) +#define MREPEAT105(macro, data) MREPEAT104(macro, data) macro(104, data) +#define MREPEAT106(macro, data) MREPEAT105(macro, data) macro(105, data) +#define MREPEAT107(macro, data) MREPEAT106(macro, data) macro(106, data) +#define MREPEAT108(macro, data) MREPEAT107(macro, data) macro(107, data) +#define MREPEAT109(macro, data) MREPEAT108(macro, data) macro(108, data) +#define MREPEAT110(macro, data) MREPEAT109(macro, data) macro(109, data) +#define MREPEAT111(macro, data) MREPEAT110(macro, data) macro(110, data) +#define MREPEAT112(macro, data) MREPEAT111(macro, data) macro(111, data) +#define MREPEAT113(macro, data) MREPEAT112(macro, data) macro(112, data) +#define MREPEAT114(macro, data) MREPEAT113(macro, data) macro(113, data) +#define MREPEAT115(macro, data) MREPEAT114(macro, data) macro(114, data) +#define MREPEAT116(macro, data) MREPEAT115(macro, data) macro(115, data) +#define MREPEAT117(macro, data) MREPEAT116(macro, data) macro(116, data) +#define MREPEAT118(macro, data) MREPEAT117(macro, data) macro(117, data) +#define MREPEAT119(macro, data) MREPEAT118(macro, data) macro(118, data) +#define MREPEAT120(macro, data) MREPEAT119(macro, data) macro(119, data) +#define MREPEAT121(macro, data) MREPEAT120(macro, data) macro(120, data) +#define MREPEAT122(macro, data) MREPEAT121(macro, data) macro(121, data) +#define MREPEAT123(macro, data) MREPEAT122(macro, data) macro(122, data) +#define MREPEAT124(macro, data) MREPEAT123(macro, data) macro(123, data) +#define MREPEAT125(macro, data) MREPEAT124(macro, data) macro(124, data) +#define MREPEAT126(macro, data) MREPEAT125(macro, data) macro(125, data) +#define MREPEAT127(macro, data) MREPEAT126(macro, data) macro(126, data) +#define MREPEAT128(macro, data) MREPEAT127(macro, data) macro(127, data) +#define MREPEAT129(macro, data) MREPEAT128(macro, data) macro(128, data) +#define MREPEAT130(macro, data) MREPEAT129(macro, data) macro(129, data) +#define MREPEAT131(macro, data) MREPEAT130(macro, data) macro(130, data) +#define MREPEAT132(macro, data) MREPEAT131(macro, data) macro(131, data) +#define MREPEAT133(macro, data) MREPEAT132(macro, data) macro(132, data) +#define MREPEAT134(macro, data) MREPEAT133(macro, data) macro(133, data) +#define MREPEAT135(macro, data) MREPEAT134(macro, data) macro(134, data) +#define MREPEAT136(macro, data) MREPEAT135(macro, data) macro(135, data) +#define MREPEAT137(macro, data) MREPEAT136(macro, data) macro(136, data) +#define MREPEAT138(macro, data) MREPEAT137(macro, data) macro(137, data) +#define MREPEAT139(macro, data) MREPEAT138(macro, data) macro(138, data) +#define MREPEAT140(macro, data) MREPEAT139(macro, data) macro(139, data) +#define MREPEAT141(macro, data) MREPEAT140(macro, data) macro(140, data) +#define MREPEAT142(macro, data) MREPEAT141(macro, data) macro(141, data) +#define MREPEAT143(macro, data) MREPEAT142(macro, data) macro(142, data) +#define MREPEAT144(macro, data) MREPEAT143(macro, data) macro(143, data) +#define MREPEAT145(macro, data) MREPEAT144(macro, data) macro(144, data) +#define MREPEAT146(macro, data) MREPEAT145(macro, data) macro(145, data) +#define MREPEAT147(macro, data) MREPEAT146(macro, data) macro(146, data) +#define MREPEAT148(macro, data) MREPEAT147(macro, data) macro(147, data) +#define MREPEAT149(macro, data) MREPEAT148(macro, data) macro(148, data) +#define MREPEAT150(macro, data) MREPEAT149(macro, data) macro(149, data) +#define MREPEAT151(macro, data) MREPEAT150(macro, data) macro(150, data) +#define MREPEAT152(macro, data) MREPEAT151(macro, data) macro(151, data) +#define MREPEAT153(macro, data) MREPEAT152(macro, data) macro(152, data) +#define MREPEAT154(macro, data) MREPEAT153(macro, data) macro(153, data) +#define MREPEAT155(macro, data) MREPEAT154(macro, data) macro(154, data) +#define MREPEAT156(macro, data) MREPEAT155(macro, data) macro(155, data) +#define MREPEAT157(macro, data) MREPEAT156(macro, data) macro(156, data) +#define MREPEAT158(macro, data) MREPEAT157(macro, data) macro(157, data) +#define MREPEAT159(macro, data) MREPEAT158(macro, data) macro(158, data) +#define MREPEAT160(macro, data) MREPEAT159(macro, data) macro(159, data) +#define MREPEAT161(macro, data) MREPEAT160(macro, data) macro(160, data) +#define MREPEAT162(macro, data) MREPEAT161(macro, data) macro(161, data) +#define MREPEAT163(macro, data) MREPEAT162(macro, data) macro(162, data) +#define MREPEAT164(macro, data) MREPEAT163(macro, data) macro(163, data) +#define MREPEAT165(macro, data) MREPEAT164(macro, data) macro(164, data) +#define MREPEAT166(macro, data) MREPEAT165(macro, data) macro(165, data) +#define MREPEAT167(macro, data) MREPEAT166(macro, data) macro(166, data) +#define MREPEAT168(macro, data) MREPEAT167(macro, data) macro(167, data) +#define MREPEAT169(macro, data) MREPEAT168(macro, data) macro(168, data) +#define MREPEAT170(macro, data) MREPEAT169(macro, data) macro(169, data) +#define MREPEAT171(macro, data) MREPEAT170(macro, data) macro(170, data) +#define MREPEAT172(macro, data) MREPEAT171(macro, data) macro(171, data) +#define MREPEAT173(macro, data) MREPEAT172(macro, data) macro(172, data) +#define MREPEAT174(macro, data) MREPEAT173(macro, data) macro(173, data) +#define MREPEAT175(macro, data) MREPEAT174(macro, data) macro(174, data) +#define MREPEAT176(macro, data) MREPEAT175(macro, data) macro(175, data) +#define MREPEAT177(macro, data) MREPEAT176(macro, data) macro(176, data) +#define MREPEAT178(macro, data) MREPEAT177(macro, data) macro(177, data) +#define MREPEAT179(macro, data) MREPEAT178(macro, data) macro(178, data) +#define MREPEAT180(macro, data) MREPEAT179(macro, data) macro(179, data) +#define MREPEAT181(macro, data) MREPEAT180(macro, data) macro(180, data) +#define MREPEAT182(macro, data) MREPEAT181(macro, data) macro(181, data) +#define MREPEAT183(macro, data) MREPEAT182(macro, data) macro(182, data) +#define MREPEAT184(macro, data) MREPEAT183(macro, data) macro(183, data) +#define MREPEAT185(macro, data) MREPEAT184(macro, data) macro(184, data) +#define MREPEAT186(macro, data) MREPEAT185(macro, data) macro(185, data) +#define MREPEAT187(macro, data) MREPEAT186(macro, data) macro(186, data) +#define MREPEAT188(macro, data) MREPEAT187(macro, data) macro(187, data) +#define MREPEAT189(macro, data) MREPEAT188(macro, data) macro(188, data) +#define MREPEAT190(macro, data) MREPEAT189(macro, data) macro(189, data) +#define MREPEAT191(macro, data) MREPEAT190(macro, data) macro(190, data) +#define MREPEAT192(macro, data) MREPEAT191(macro, data) macro(191, data) +#define MREPEAT193(macro, data) MREPEAT192(macro, data) macro(192, data) +#define MREPEAT194(macro, data) MREPEAT193(macro, data) macro(193, data) +#define MREPEAT195(macro, data) MREPEAT194(macro, data) macro(194, data) +#define MREPEAT196(macro, data) MREPEAT195(macro, data) macro(195, data) +#define MREPEAT197(macro, data) MREPEAT196(macro, data) macro(196, data) +#define MREPEAT198(macro, data) MREPEAT197(macro, data) macro(197, data) +#define MREPEAT199(macro, data) MREPEAT198(macro, data) macro(198, data) +#define MREPEAT200(macro, data) MREPEAT199(macro, data) macro(199, data) +#define MREPEAT201(macro, data) MREPEAT200(macro, data) macro(200, data) +#define MREPEAT202(macro, data) MREPEAT201(macro, data) macro(201, data) +#define MREPEAT203(macro, data) MREPEAT202(macro, data) macro(202, data) +#define MREPEAT204(macro, data) MREPEAT203(macro, data) macro(203, data) +#define MREPEAT205(macro, data) MREPEAT204(macro, data) macro(204, data) +#define MREPEAT206(macro, data) MREPEAT205(macro, data) macro(205, data) +#define MREPEAT207(macro, data) MREPEAT206(macro, data) macro(206, data) +#define MREPEAT208(macro, data) MREPEAT207(macro, data) macro(207, data) +#define MREPEAT209(macro, data) MREPEAT208(macro, data) macro(208, data) +#define MREPEAT210(macro, data) MREPEAT209(macro, data) macro(209, data) +#define MREPEAT211(macro, data) MREPEAT210(macro, data) macro(210, data) +#define MREPEAT212(macro, data) MREPEAT211(macro, data) macro(211, data) +#define MREPEAT213(macro, data) MREPEAT212(macro, data) macro(212, data) +#define MREPEAT214(macro, data) MREPEAT213(macro, data) macro(213, data) +#define MREPEAT215(macro, data) MREPEAT214(macro, data) macro(214, data) +#define MREPEAT216(macro, data) MREPEAT215(macro, data) macro(215, data) +#define MREPEAT217(macro, data) MREPEAT216(macro, data) macro(216, data) +#define MREPEAT218(macro, data) MREPEAT217(macro, data) macro(217, data) +#define MREPEAT219(macro, data) MREPEAT218(macro, data) macro(218, data) +#define MREPEAT220(macro, data) MREPEAT219(macro, data) macro(219, data) +#define MREPEAT221(macro, data) MREPEAT220(macro, data) macro(220, data) +#define MREPEAT222(macro, data) MREPEAT221(macro, data) macro(221, data) +#define MREPEAT223(macro, data) MREPEAT222(macro, data) macro(222, data) +#define MREPEAT224(macro, data) MREPEAT223(macro, data) macro(223, data) +#define MREPEAT225(macro, data) MREPEAT224(macro, data) macro(224, data) +#define MREPEAT226(macro, data) MREPEAT225(macro, data) macro(225, data) +#define MREPEAT227(macro, data) MREPEAT226(macro, data) macro(226, data) +#define MREPEAT228(macro, data) MREPEAT227(macro, data) macro(227, data) +#define MREPEAT229(macro, data) MREPEAT228(macro, data) macro(228, data) +#define MREPEAT230(macro, data) MREPEAT229(macro, data) macro(229, data) +#define MREPEAT231(macro, data) MREPEAT230(macro, data) macro(230, data) +#define MREPEAT232(macro, data) MREPEAT231(macro, data) macro(231, data) +#define MREPEAT233(macro, data) MREPEAT232(macro, data) macro(232, data) +#define MREPEAT234(macro, data) MREPEAT233(macro, data) macro(233, data) +#define MREPEAT235(macro, data) MREPEAT234(macro, data) macro(234, data) +#define MREPEAT236(macro, data) MREPEAT235(macro, data) macro(235, data) +#define MREPEAT237(macro, data) MREPEAT236(macro, data) macro(236, data) +#define MREPEAT238(macro, data) MREPEAT237(macro, data) macro(237, data) +#define MREPEAT239(macro, data) MREPEAT238(macro, data) macro(238, data) +#define MREPEAT240(macro, data) MREPEAT239(macro, data) macro(239, data) +#define MREPEAT241(macro, data) MREPEAT240(macro, data) macro(240, data) +#define MREPEAT242(macro, data) MREPEAT241(macro, data) macro(241, data) +#define MREPEAT243(macro, data) MREPEAT242(macro, data) macro(242, data) +#define MREPEAT244(macro, data) MREPEAT243(macro, data) macro(243, data) +#define MREPEAT245(macro, data) MREPEAT244(macro, data) macro(244, data) +#define MREPEAT246(macro, data) MREPEAT245(macro, data) macro(245, data) +#define MREPEAT247(macro, data) MREPEAT246(macro, data) macro(246, data) +#define MREPEAT248(macro, data) MREPEAT247(macro, data) macro(247, data) +#define MREPEAT249(macro, data) MREPEAT248(macro, data) macro(248, data) +#define MREPEAT250(macro, data) MREPEAT249(macro, data) macro(249, data) +#define MREPEAT251(macro, data) MREPEAT250(macro, data) macro(250, data) +#define MREPEAT252(macro, data) MREPEAT251(macro, data) macro(251, data) +#define MREPEAT253(macro, data) MREPEAT252(macro, data) macro(252, data) +#define MREPEAT254(macro, data) MREPEAT253(macro, data) macro(253, data) +#define MREPEAT255(macro, data) MREPEAT254(macro, data) macro(254, data) +#define MREPEAT256(macro, data) MREPEAT255(macro, data) macro(255, data) + + +#endif // _MREPEAT_H_ diff --git a/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/preprocessor.h b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/preprocessor.h new file mode 100644 index 000000000..5b996ba11 --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/preprocessor.h @@ -0,0 +1,55 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Preprocessor utils. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _PREPROCESSOR_H_ +#define _PREPROCESSOR_H_ + +#include "tpaste.h" +#include "stringz.h" +#include "mrepeat.h" + + +#endif // _PREPROCESSOR_H_ diff --git a/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/stringz.h b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/stringz.h new file mode 100644 index 000000000..3528ea0da --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/stringz.h @@ -0,0 +1,75 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Preprocessor stringizing utils. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _STRINGZ_H_ +#define _STRINGZ_H_ + + +/*! \brief Stringize. + * + * Stringize a preprocessing token, this token being allowed to be \#defined. + * + * May be used only within macros with the token passed as an argument if the token is \#defined. + * + * For example, writing STRINGZ(PIN) within a macro \#defined by PIN_NAME(PIN) + * and invoked as PIN_NAME(PIN0) with PIN0 \#defined as A0 is equivalent to + * writing "A0". + */ +#define STRINGZ(x) #x + +/*! \brief Absolute stringize. + * + * Stringize a preprocessing token, this token being allowed to be \#defined. + * + * No restriction of use if the token is \#defined. + * + * For example, writing ASTRINGZ(PIN0) anywhere with PIN0 \#defined as A0 is + * equivalent to writing "A0". + */ +#define ASTRINGZ(x) STRINGZ(x) + + +#endif // _STRINGZ_H_ diff --git a/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/tpaste.h b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/tpaste.h new file mode 100644 index 000000000..a5d7beeaa --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/tpaste.h @@ -0,0 +1,95 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Preprocessor token pasting utils. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _TPASTE_H_ +#define _TPASTE_H_ + + +/*! \name Token Paste + * + * Paste N preprocessing tokens together, these tokens being allowed to be \#defined. + * + * May be used only within macros with the tokens passed as arguments if the tokens are \#defined. + * + * For example, writing TPASTE2(U, WIDTH) within a macro \#defined by + * UTYPE(WIDTH) and invoked as UTYPE(UL_WIDTH) with UL_WIDTH \#defined as 32 is + * equivalent to writing U32. + */ +//! @{ +#define TPASTE2( a, b) a##b +#define TPASTE3( a, b, c) a##b##c +#define TPASTE4( a, b, c, d) a##b##c##d +#define TPASTE5( a, b, c, d, e) a##b##c##d##e +#define TPASTE6( a, b, c, d, e, f) a##b##c##d##e##f +#define TPASTE7( a, b, c, d, e, f, g) a##b##c##d##e##f##g +#define TPASTE8( a, b, c, d, e, f, g, h) a##b##c##d##e##f##g##h +#define TPASTE9( a, b, c, d, e, f, g, h, i) a##b##c##d##e##f##g##h##i +#define TPASTE10(a, b, c, d, e, f, g, h, i, j) a##b##c##d##e##f##g##h##i##j +//! @} + +/*! \name Absolute Token Paste + * + * Paste N preprocessing tokens together, these tokens being allowed to be \#defined. + * + * No restriction of use if the tokens are \#defined. + * + * For example, writing ATPASTE2(U, UL_WIDTH) anywhere with UL_WIDTH \#defined + * as 32 is equivalent to writing U32. + */ +//! @{ +#define ATPASTE2( a, b) TPASTE2( a, b) +#define ATPASTE3( a, b, c) TPASTE3( a, b, c) +#define ATPASTE4( a, b, c, d) TPASTE4( a, b, c, d) +#define ATPASTE5( a, b, c, d, e) TPASTE5( a, b, c, d, e) +#define ATPASTE6( a, b, c, d, e, f) TPASTE6( a, b, c, d, e, f) +#define ATPASTE7( a, b, c, d, e, f, g) TPASTE7( a, b, c, d, e, f, g) +#define ATPASTE8( a, b, c, d, e, f, g, h) TPASTE8( a, b, c, d, e, f, g, h) +#define ATPASTE9( a, b, c, d, e, f, g, h, i) TPASTE9( a, b, c, d, e, f, g, h, i) +#define ATPASTE10(a, b, c, d, e, f, g, h, i, j) TPASTE10(a, b, c, d, e, f, g, h, i, j) +//! @} + + +#endif // _TPASTE_H_ diff --git a/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/STARTUP_FILES/GCC/crt0.x b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/STARTUP_FILES/GCC/crt0.x new file mode 100644 index 000000000..23b658b98 --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/STARTUP_FILES/GCC/crt0.x @@ -0,0 +1,121 @@ +/* This file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief AVR32UC C runtime startup file. + * + * This file has been built from the Newlib crt0.S. + * + * - Compiler: GNU GCC for AVR32 + * - Supported devices: All AVR32UC devices can be used. + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#include + + +//! @{ +//! \verbatim + + + // This must be linked @ 0x80000000 if it is to be run upon reset. + .section .reset, "ax", @progbits + + + .global _start + .type _start, @function +_start: + // Jump to the C runtime startup routine. + lda.w pc, _stext + + + // _stext is placed outside the .reset section so that the program entry point + // can be changed without affecting the C runtime startup. + .section .text._stext, "ax", @progbits + + + .global _stext + .type _stext, @function +_stext: + // Set initial stack pointer. + lda.w sp, _estack + + // Set up EVBA so interrupts can be enabled. + lda.w r0, _evba + mtsr AVR32_EVBA, r0 + + // Enable the exception processing. + csrf AVR32_SR_EM_OFFSET + + // Load initialized data having a global lifetime from the data LMA. + lda.w r0, _data + lda.w r1, _edata + cp r0, r1 + brhs idata_load_loop_end + lda.w r2, _data_lma +idata_load_loop: + ld.d r4, r2++ + st.d r0++, r4 + cp r0, r1 + brlo idata_load_loop +idata_load_loop_end: + + // Clear uninitialized data having a global lifetime in the blank static storage section. + lda.w r0, __bss_start + lda.w r1, _end + cp r0, r1 + brhs udata_clear_loop_end + mov r2, 0 + mov r3, 0 +udata_clear_loop: + st.d r0++, r2 + cp r0, r1 + brlo udata_clear_loop +udata_clear_loop_end: + +#ifdef CONFIG_FRAME_POINTER + // Safety: Set the default "return" @ to the exit routine address. + lda.w lr, exit +#endif + + // Start the show. + lda.w pc, main + + +//! \endverbatim +//! @} diff --git a/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/compiler.h b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/compiler.h new file mode 100644 index 000000000..885be7fb9 --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/compiler.h @@ -0,0 +1,1145 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Compiler file for AVR32. + * + * This file defines commonly used types and macros. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _COMPILER_H_ +#define _COMPILER_H_ + +#if ((defined __GNUC__) && (defined __AVR32__)) || (defined __ICCAVR32__ || defined __AAVR32__) +# include +#endif +#if (defined __ICCAVR32__) +# include +#endif +#include "preprocessor.h" + +#include "parts.h" + + +//_____ D E C L A R A T I O N S ____________________________________________ + +#ifdef __AVR32_ABI_COMPILER__ // Automatically defined when compiling for AVR32, not when assembling. + +#include +#include + + +#if (defined __ICCAVR32__) + +/*! \name Compiler Keywords + * + * Port of some keywords from GNU GCC for AVR32 to IAR Embedded Workbench for Atmel AVR32. + */ +//! @{ +#define __asm__ asm +#define __inline__ inline +#define __volatile__ +//! @} + +#endif + + +/*! \name Usual Types + */ +//! @{ +typedef unsigned char Bool; //!< Boolean. +#ifndef __cplusplus +#if !defined(__bool_true_false_are_defined) +typedef unsigned char bool; //!< Boolean. +#endif +#endif +typedef signed char S8 ; //!< 8-bit signed integer. +typedef unsigned char U8 ; //!< 8-bit unsigned integer. +typedef signed short int S16; //!< 16-bit signed integer. +typedef unsigned short int U16; //!< 16-bit unsigned integer. +typedef signed long int S32; //!< 32-bit signed integer. +typedef unsigned long int U32; //!< 32-bit unsigned integer. +typedef signed long long int S64; //!< 64-bit signed integer. +typedef unsigned long long int U64; //!< 64-bit unsigned integer. +typedef float F32; //!< 32-bit floating-point number. +typedef double F64; //!< 64-bit floating-point number. +//! @} + + +/*! \name Status Types + */ +//! @{ +typedef Bool Status_bool_t; //!< Boolean status. +typedef U8 Status_t; //!< 8-bit-coded status. +//! @} + + +/*! \name Aliasing Aggregate Types + */ +//! @{ + +//! 16-bit union. +typedef union +{ + S16 s16 ; + U16 u16 ; + S8 s8 [2]; + U8 u8 [2]; +} Union16; + +//! 32-bit union. +typedef union +{ + S32 s32 ; + U32 u32 ; + S16 s16[2]; + U16 u16[2]; + S8 s8 [4]; + U8 u8 [4]; +} Union32; + +//! 64-bit union. +typedef union +{ + S64 s64 ; + U64 u64 ; + S32 s32[2]; + U32 u32[2]; + S16 s16[4]; + U16 u16[4]; + S8 s8 [8]; + U8 u8 [8]; +} Union64; + +//! Union of pointers to 64-, 32-, 16- and 8-bit unsigned integers. +typedef union +{ + S64 *s64ptr; + U64 *u64ptr; + S32 *s32ptr; + U32 *u32ptr; + S16 *s16ptr; + U16 *u16ptr; + S8 *s8ptr ; + U8 *u8ptr ; +} UnionPtr; + +//! Union of pointers to volatile 64-, 32-, 16- and 8-bit unsigned integers. +typedef union +{ + volatile S64 *s64ptr; + volatile U64 *u64ptr; + volatile S32 *s32ptr; + volatile U32 *u32ptr; + volatile S16 *s16ptr; + volatile U16 *u16ptr; + volatile S8 *s8ptr ; + volatile U8 *u8ptr ; +} UnionVPtr; + +//! Union of pointers to constant 64-, 32-, 16- and 8-bit unsigned integers. +typedef union +{ + const S64 *s64ptr; + const U64 *u64ptr; + const S32 *s32ptr; + const U32 *u32ptr; + const S16 *s16ptr; + const U16 *u16ptr; + const S8 *s8ptr ; + const U8 *u8ptr ; +} UnionCPtr; + +//! Union of pointers to constant volatile 64-, 32-, 16- and 8-bit unsigned integers. +typedef union +{ + const volatile S64 *s64ptr; + const volatile U64 *u64ptr; + const volatile S32 *s32ptr; + const volatile U32 *u32ptr; + const volatile S16 *s16ptr; + const volatile U16 *u16ptr; + const volatile S8 *s8ptr ; + const volatile U8 *u8ptr ; +} UnionCVPtr; + +//! Structure of pointers to 64-, 32-, 16- and 8-bit unsigned integers. +typedef struct +{ + S64 *s64ptr; + U64 *u64ptr; + S32 *s32ptr; + U32 *u32ptr; + S16 *s16ptr; + U16 *u16ptr; + S8 *s8ptr ; + U8 *u8ptr ; +} StructPtr; + +//! Structure of pointers to volatile 64-, 32-, 16- and 8-bit unsigned integers. +typedef struct +{ + volatile S64 *s64ptr; + volatile U64 *u64ptr; + volatile S32 *s32ptr; + volatile U32 *u32ptr; + volatile S16 *s16ptr; + volatile U16 *u16ptr; + volatile S8 *s8ptr ; + volatile U8 *u8ptr ; +} StructVPtr; + +//! Structure of pointers to constant 64-, 32-, 16- and 8-bit unsigned integers. +typedef struct +{ + const S64 *s64ptr; + const U64 *u64ptr; + const S32 *s32ptr; + const U32 *u32ptr; + const S16 *s16ptr; + const U16 *u16ptr; + const S8 *s8ptr ; + const U8 *u8ptr ; +} StructCPtr; + +//! Structure of pointers to constant volatile 64-, 32-, 16- and 8-bit unsigned integers. +typedef struct +{ + const volatile S64 *s64ptr; + const volatile U64 *u64ptr; + const volatile S32 *s32ptr; + const volatile U32 *u32ptr; + const volatile S16 *s16ptr; + const volatile U16 *u16ptr; + const volatile S8 *s8ptr ; + const volatile U8 *u8ptr ; +} StructCVPtr; + +//! @} + +#endif // __AVR32_ABI_COMPILER__ + + +//_____ M A C R O S ________________________________________________________ + +/*! \name Usual Constants + */ +//! @{ +#define DISABLE 0 +#define ENABLE 1 +#define DISABLED 0 +#define ENABLED 1 +#define OFF 0 +#define ON 1 +#define FALSE 0 +#define TRUE 1 +#ifndef __cplusplus +#if !defined(__bool_true_false_are_defined) +#define false FALSE +#define true TRUE +#endif +#endif +#define KO 0 +#define OK 1 +#define PASS 0 +#define FAIL 1 +#define LOW 0 +#define HIGH 1 +#define CLR 0 +#define SET 1 +//! @} + + +#ifdef __AVR32_ABI_COMPILER__ // Automatically defined when compiling for AVR32, not when assembling. + +/*! \name Bit-Field Handling + */ +//! @{ + +/*! \brief Reads the bits of a value specified by a given bit-mask. + * + * \param value Value to read bits from. + * \param mask Bit-mask indicating bits to read. + * + * \return Read bits. + */ +#define Rd_bits( value, mask) ((value) & (mask)) + +/*! \brief Writes the bits of a C lvalue specified by a given bit-mask. + * + * \param lvalue C lvalue to write bits to. + * \param mask Bit-mask indicating bits to write. + * \param bits Bits to write. + * + * \return Resulting value with written bits. + */ +#define Wr_bits(lvalue, mask, bits) ((lvalue) = ((lvalue) & ~(mask)) |\ + ((bits ) & (mask))) + +/*! \brief Tests the bits of a value specified by a given bit-mask. + * + * \param value Value of which to test bits. + * \param mask Bit-mask indicating bits to test. + * + * \return \c 1 if at least one of the tested bits is set, else \c 0. + */ +#define Tst_bits( value, mask) (Rd_bits(value, mask) != 0) + +/*! \brief Clears the bits of a C lvalue specified by a given bit-mask. + * + * \param lvalue C lvalue of which to clear bits. + * \param mask Bit-mask indicating bits to clear. + * + * \return Resulting value with cleared bits. + */ +#define Clr_bits(lvalue, mask) ((lvalue) &= ~(mask)) + +/*! \brief Sets the bits of a C lvalue specified by a given bit-mask. + * + * \param lvalue C lvalue of which to set bits. + * \param mask Bit-mask indicating bits to set. + * + * \return Resulting value with set bits. + */ +#define Set_bits(lvalue, mask) ((lvalue) |= (mask)) + +/*! \brief Toggles the bits of a C lvalue specified by a given bit-mask. + * + * \param lvalue C lvalue of which to toggle bits. + * \param mask Bit-mask indicating bits to toggle. + * + * \return Resulting value with toggled bits. + */ +#define Tgl_bits(lvalue, mask) ((lvalue) ^= (mask)) + +/*! \brief Reads the bit-field of a value specified by a given bit-mask. + * + * \param value Value to read a bit-field from. + * \param mask Bit-mask indicating the bit-field to read. + * + * \return Read bit-field. + */ +#define Rd_bitfield( value, mask) (Rd_bits( value, mask) >> ctz(mask)) + +/*! \brief Writes the bit-field of a C lvalue specified by a given bit-mask. + * + * \param lvalue C lvalue to write a bit-field to. + * \param mask Bit-mask indicating the bit-field to write. + * \param bitfield Bit-field to write. + * + * \return Resulting value with written bit-field. + */ +#define Wr_bitfield(lvalue, mask, bitfield) (Wr_bits(lvalue, mask, (U32)(bitfield) << ctz(mask))) + +//! @} + + +/*! \brief This macro is used to test fatal errors. + * + * The macro tests if the expression is FALSE. If it is, a fatal error is + * detected and the application hangs up. + * + * \param expr Expression to evaluate and supposed to be nonzero. + */ +#ifdef _ASSERT_ENABLE_ + #define Assert(expr) \ + {\ + if (!(expr)) while (TRUE);\ + } +#else + #define Assert(expr) +#endif + + +/*! \name Zero-Bit Counting + * + * Under AVR32-GCC, __builtin_clz and __builtin_ctz behave like macros when + * applied to constant expressions (values known at compile time), so they are + * more optimized than the use of the corresponding assembly instructions and + * they can be used as constant expressions e.g. to initialize objects having + * static storage duration, and like the corresponding assembly instructions + * when applied to non-constant expressions (values unknown at compile time), so + * they are more optimized than an assembly periphrasis. Hence, clz and ctz + * ensure a possible and optimized behavior for both constant and non-constant + * expressions. + */ +//! @{ + +/*! \brief Counts the leading zero bits of the given value considered as a 32-bit integer. + * + * \param u Value of which to count the leading zero bits. + * + * \return The count of leading zero bits in \a u. + */ +#if (defined __GNUC__) + #define clz(u) __builtin_clz(u) +#elif (defined __ICCAVR32__) + #define clz(u) __count_leading_zeros(u) +#endif + +/*! \brief Counts the trailing zero bits of the given value considered as a 32-bit integer. + * + * \param u Value of which to count the trailing zero bits. + * + * \return The count of trailing zero bits in \a u. + */ +#if (defined __GNUC__) + #define ctz(u) __builtin_ctz(u) +#elif (defined __ICCAVR32__) + #define ctz(u) __count_trailing_zeros(u) +#endif + +//! @} + + +/*! \name Bit Reversing + */ +//! @{ + +/*! \brief Reverses the bits of \a u8. + * + * \param u8 U8 of which to reverse the bits. + * + * \return Value resulting from \a u8 with reversed bits. + */ +#define bit_reverse8(u8) ((U8)(bit_reverse32((U8)(u8)) >> 24)) + +/*! \brief Reverses the bits of \a u16. + * + * \param u16 U16 of which to reverse the bits. + * + * \return Value resulting from \a u16 with reversed bits. + */ +#define bit_reverse16(u16) ((U16)(bit_reverse32((U16)(u16)) >> 16)) + +/*! \brief Reverses the bits of \a u32. + * + * \param u32 U32 of which to reverse the bits. + * + * \return Value resulting from \a u32 with reversed bits. + */ +#if (defined __GNUC__) + #define bit_reverse32(u32) \ + (\ + {\ + unsigned int __value = (U32)(u32);\ + __asm__ ("brev\t%0" : "+r" (__value) : : "cc");\ + (U32)__value;\ + }\ + ) +#elif (defined __ICCAVR32__) + #define bit_reverse32(u32) ((U32)__bit_reverse((U32)(u32))) +#endif + +/*! \brief Reverses the bits of \a u64. + * + * \param u64 U64 of which to reverse the bits. + * + * \return Value resulting from \a u64 with reversed bits. + */ +#define bit_reverse64(u64) ((U64)(((U64)bit_reverse32((U64)(u64) >> 32)) |\ + ((U64)bit_reverse32((U64)(u64)) << 32))) + +//! @} + + +/*! \name Alignment + */ +//! @{ + +/*! \brief Tests alignment of the number \a val with the \a n boundary. + * + * \param val Input value. + * \param n Boundary. + * + * \return \c 1 if the number \a val is aligned with the \a n boundary, else \c 0. + */ +#define Test_align(val, n ) (!Tst_bits( val, (n) - 1 ) ) + +/*! \brief Gets alignment of the number \a val with respect to the \a n boundary. + * + * \param val Input value. + * \param n Boundary. + * + * \return Alignment of the number \a val with respect to the \a n boundary. + */ +#define Get_align( val, n ) ( Rd_bits( val, (n) - 1 ) ) + +/*! \brief Sets alignment of the lvalue number \a lval to \a alg with respect to the \a n boundary. + * + * \param lval Input/output lvalue. + * \param n Boundary. + * \param alg Alignment. + * + * \return New value of \a lval resulting from its alignment set to \a alg with respect to the \a n boundary. + */ +#define Set_align(lval, n, alg) ( Wr_bits(lval, (n) - 1, alg) ) + +/*! \brief Aligns the number \a val with the upper \a n boundary. + * + * \param val Input value. + * \param n Boundary. + * + * \return Value resulting from the number \a val aligned with the upper \a n boundary. + */ +#define Align_up( val, n ) (((val) + ((n) - 1)) & ~((n) - 1)) + +/*! \brief Aligns the number \a val with the lower \a n boundary. + * + * \param val Input value. + * \param n Boundary. + * + * \return Value resulting from the number \a val aligned with the lower \a n boundary. + */ +#define Align_down(val, n ) ( (val) & ~((n) - 1)) + +//! @} + + +/*! \name Mathematics + * + * The same considerations as for clz and ctz apply here but AVR32-GCC does not + * provide built-in functions to access the assembly instructions abs, min and + * max and it does not produce them by itself in most cases, so two sets of + * macros are defined here: + * - Abs, Min and Max to apply to constant expressions (values known at + * compile time); + * - abs, min and max to apply to non-constant expressions (values unknown at + * compile time). + */ +//! @{ + +/*! \brief Takes the absolute value of \a a. + * + * \param a Input value. + * + * \return Absolute value of \a a. + * + * \note More optimized if only used with values known at compile time. + */ +#define Abs(a) (((a) < 0 ) ? -(a) : (a)) + +/*! \brief Takes the minimal value of \a a and \a b. + * + * \param a Input value. + * \param b Input value. + * + * \return Minimal value of \a a and \a b. + * + * \note More optimized if only used with values known at compile time. + */ +#define Min(a, b) (((a) < (b)) ? (a) : (b)) + +/*! \brief Takes the maximal value of \a a and \a b. + * + * \param a Input value. + * \param b Input value. + * + * \return Maximal value of \a a and \a b. + * + * \note More optimized if only used with values known at compile time. + */ +#define Max(a, b) (((a) > (b)) ? (a) : (b)) + +/*! \brief Takes the absolute value of \a a. + * + * \param a Input value. + * + * \return Absolute value of \a a. + * + * \note More optimized if only used with values unknown at compile time. + */ +#if (defined __GNUC__) + #define abs(a) \ + (\ + {\ + int __value = (a);\ + __asm__ ("abs\t%0" : "+r" (__value) : : "cc");\ + __value;\ + }\ + ) +#elif (defined __ICCAVR32__) + #define abs(a) Abs(a) +#endif + +/*! \brief Takes the minimal value of \a a and \a b. + * + * \param a Input value. + * \param b Input value. + * + * \return Minimal value of \a a and \a b. + * + * \note More optimized if only used with values unknown at compile time. + */ +#if (defined __GNUC__) + #define min(a, b) \ + (\ + {\ + int __value, __arg_a = (a), __arg_b = (b);\ + __asm__ ("min\t%0, %1, %2" : "=r" (__value) : "r" (__arg_a), "r" (__arg_b));\ + __value;\ + }\ + ) +#elif (defined __ICCAVR32__) + #define min(a, b) __min(a, b) +#endif + +/*! \brief Takes the maximal value of \a a and \a b. + * + * \param a Input value. + * \param b Input value. + * + * \return Maximal value of \a a and \a b. + * + * \note More optimized if only used with values unknown at compile time. + */ +#if (defined __GNUC__) + #define max(a, b) \ + (\ + {\ + int __value, __arg_a = (a), __arg_b = (b);\ + __asm__ ("max\t%0, %1, %2" : "=r" (__value) : "r" (__arg_a), "r" (__arg_b));\ + __value;\ + }\ + ) +#elif (defined __ICCAVR32__) + #define max(a, b) __max(a, b) +#endif + +//! @} + + +/*! \brief Calls the routine at address \a addr. + * + * It generates a long call opcode. + * + * For example, `Long_call(0x80000000)' generates a software reset on a UC3 if + * it is invoked from the CPU supervisor mode. + * + * \param addr Address of the routine to call. + * + * \note It may be used as a long jump opcode in some special cases. + */ +#define Long_call(addr) ((*(void (*)(void))(addr))()) + +/*! \brief Resets the CPU by software. + * + * \warning It shall not be called from the CPU application mode. + */ +#if (defined __GNUC__) + #define Reset_CPU() \ + (\ + {\ + __asm__ __volatile__ (\ + "lddpc r9, 3f\n\t"\ + "mfsr r8, %[SR]\n\t"\ + "bfextu r8, r8, %[SR_M_OFFSET], %[SR_M_SIZE]\n\t"\ + "cp.w r8, 0b001\n\t"\ + "breq 0f\n\t"\ + "sub r8, pc, $ - 1f\n\t"\ + "pushm r8-r9\n\t"\ + "rete\n"\ + "0:\n\t"\ + "mtsr %[SR], r9\n"\ + "1:\n\t"\ + "mov r0, 0\n\t"\ + "mov r1, 0\n\t"\ + "mov r2, 0\n\t"\ + "mov r3, 0\n\t"\ + "mov r4, 0\n\t"\ + "mov r5, 0\n\t"\ + "mov r6, 0\n\t"\ + "mov r7, 0\n\t"\ + "mov r8, 0\n\t"\ + "mov r9, 0\n\t"\ + "mov r10, 0\n\t"\ + "mov r11, 0\n\t"\ + "mov r12, 0\n\t"\ + "mov sp, 0\n\t"\ + "stdsp sp[0], sp\n\t"\ + "ldmts sp, sp\n\t"\ + "mov lr, 0\n\t"\ + "lddpc pc, 2f\n\t"\ + ".balign 4\n"\ + "2:\n\t"\ + ".word _start\n"\ + "3:\n\t"\ + ".word %[RESET_SR]"\ + :\ + : [SR] "i" (AVR32_SR),\ + [SR_M_OFFSET] "i" (AVR32_SR_M_OFFSET),\ + [SR_M_SIZE] "i" (AVR32_SR_M_SIZE),\ + [RESET_SR] "i" (AVR32_SR_GM_MASK | AVR32_SR_EM_MASK | (AVR32_SR_M_SUP << AVR32_SR_M_OFFSET))\ + );\ + }\ + ) +#elif (defined __ICCAVR32__) + #define Reset_CPU() \ + {\ + extern void *volatile __program_start;\ + __asm__ __volatile__ (\ + "mov r7, LWRD(__program_start)\n\t"\ + "orh r7, HWRD(__program_start)\n\t"\ + "mov r9, LWRD("ASTRINGZ(AVR32_SR_GM_MASK | AVR32_SR_EM_MASK | (AVR32_SR_M_SUP << AVR32_SR_M_OFFSET))")\n\t"\ + "orh r9, HWRD("ASTRINGZ(AVR32_SR_GM_MASK | AVR32_SR_EM_MASK | (AVR32_SR_M_SUP << AVR32_SR_M_OFFSET))")\n\t"\ + "mfsr r8, "ASTRINGZ(AVR32_SR)"\n\t"\ + "bfextu r8, r8, "ASTRINGZ(AVR32_SR_M_OFFSET)", "ASTRINGZ(AVR32_SR_M_SIZE)"\n\t"\ + "cp.w r8, 001b\n\t"\ + "breq $ + 10\n\t"\ + "sub r8, pc, -12\n\t"\ + "pushm r8-r9\n\t"\ + "rete\n\t"\ + "mtsr "ASTRINGZ(AVR32_SR)", r9\n\t"\ + "mov r0, 0\n\t"\ + "mov r1, 0\n\t"\ + "mov r2, 0\n\t"\ + "mov r3, 0\n\t"\ + "mov r4, 0\n\t"\ + "mov r5, 0\n\t"\ + "mov r6, 0\n\t"\ + "st.w r0[4], r7\n\t"\ + "mov r7, 0\n\t"\ + "mov r8, 0\n\t"\ + "mov r9, 0\n\t"\ + "mov r10, 0\n\t"\ + "mov r11, 0\n\t"\ + "mov r12, 0\n\t"\ + "mov sp, 0\n\t"\ + "stdsp sp[0], sp\n\t"\ + "ldmts sp, sp\n\t"\ + "mov lr, 0\n\t"\ + "ld.w pc, lr[4]"\ + );\ + __program_start;\ + } +#endif + + +/*! \name System Register Access + */ +//! @{ + +/*! \brief Gets the value of the \a sysreg system register. + * + * \param sysreg Address of the system register of which to get the value. + * + * \return Value of the \a sysreg system register. + */ +#if (defined __GNUC__) + #define Get_system_register(sysreg) __builtin_mfsr(sysreg) +#elif (defined __ICCAVR32__) + #define Get_system_register(sysreg) __get_system_register(sysreg) +#endif + +/*! \brief Sets the value of the \a sysreg system register to \a value. + * + * \param sysreg Address of the system register of which to set the value. + * \param value Value to set the \a sysreg system register to. + */ +#if (defined __GNUC__) + #define Set_system_register(sysreg, value) __builtin_mtsr(sysreg, value) +#elif (defined __ICCAVR32__) + #define Set_system_register(sysreg, value) __set_system_register(sysreg, value) +#endif + +//! @} + + +/*! \name CPU Status Register Access + */ +//! @{ + +/*! \brief Tells whether exceptions are globally enabled. + * + * \return \c 1 if exceptions are globally enabled, else \c 0. + */ +#define Is_global_exception_enabled() (!Tst_bits(Get_system_register(AVR32_SR), AVR32_SR_EM_MASK)) + +/*! \brief Disables exceptions globally. + */ +#if (defined __GNUC__) + #define Disable_global_exception() ({__asm__ __volatile__ ("ssrf\t%0" : : "i" (AVR32_SR_EM_OFFSET));}) +#elif (defined __ICCAVR32__) + #define Disable_global_exception() (__set_status_flag(AVR32_SR_EM_OFFSET)) +#endif + +/*! \brief Enables exceptions globally. + */ +#if (defined __GNUC__) + #define Enable_global_exception() ({__asm__ __volatile__ ("csrf\t%0" : : "i" (AVR32_SR_EM_OFFSET));}) +#elif (defined __ICCAVR32__) + #define Enable_global_exception() (__clear_status_flag(AVR32_SR_EM_OFFSET)) +#endif + +/*! \brief Tells whether interrupts are globally enabled. + * + * \return \c 1 if interrupts are globally enabled, else \c 0. + */ +#define Is_global_interrupt_enabled() (!Tst_bits(Get_system_register(AVR32_SR), AVR32_SR_GM_MASK)) + +/*! \brief Disables interrupts globally. + */ +#if (defined __GNUC__) + #define Disable_global_interrupt() ({__asm__ __volatile__ ("ssrf\t%0" : : "i" (AVR32_SR_GM_OFFSET));}) +#elif (defined __ICCAVR32__) + #define Disable_global_interrupt() (__disable_interrupt()) +#endif + +/*! \brief Enables interrupts globally. + */ +#if (defined __GNUC__) + #define Enable_global_interrupt() ({__asm__ __volatile__ ("csrf\t%0" : : "i" (AVR32_SR_GM_OFFSET));}) +#elif (defined __ICCAVR32__) + #define Enable_global_interrupt() (__enable_interrupt()) +#endif + +/*! \brief Tells whether interrupt level \a int_level is enabled. + * + * \param int_level Interrupt level (0 to 3). + * + * \return \c 1 if interrupt level \a int_level is enabled, else \c 0. + */ +#define Is_interrupt_level_enabled(int_level) (!Tst_bits(Get_system_register(AVR32_SR), TPASTE3(AVR32_SR_I, int_level, M_MASK))) + +/*! \brief Disables interrupt level \a int_level. + * + * \param int_level Interrupt level to disable (0 to 3). + */ +#if (defined __GNUC__) + #define Disable_interrupt_level(int_level) ({__asm__ __volatile__ ("ssrf\t%0" : : "i" (TPASTE3(AVR32_SR_I, int_level, M_OFFSET)));}) +#elif (defined __ICCAVR32__) + #define Disable_interrupt_level(int_level) (__set_status_flag(TPASTE3(AVR32_SR_I, int_level, M_OFFSET))) +#endif + +/*! \brief Enables interrupt level \a int_level. + * + * \param int_level Interrupt level to enable (0 to 3). + */ +#if (defined __GNUC__) + #define Enable_interrupt_level(int_level) ({__asm__ __volatile__ ("csrf\t%0" : : "i" (TPASTE3(AVR32_SR_I, int_level, M_OFFSET)));}) +#elif (defined __ICCAVR32__) + #define Enable_interrupt_level(int_level) (__clear_status_flag(TPASTE3(AVR32_SR_I, int_level, M_OFFSET))) +#endif + +/*! \brief Protects subsequent code from interrupts. + */ +#define AVR32_ENTER_CRITICAL_REGION( ) \ + { \ + Bool global_interrupt_enabled = Is_global_interrupt_enabled(); \ + Disable_global_interrupt(); // Disable the appropriate interrupts. + +/*! \brief This macro must always be used in conjunction with AVR32_ENTER_CRITICAL_REGION + * so that interrupts are enabled again. + */ +#define AVR32_LEAVE_CRITICAL_REGION( ) \ + if (global_interrupt_enabled) Enable_global_interrupt(); \ + } + +//! @} + + +/*! \name Debug Register Access + */ +//! @{ + +/*! \brief Gets the value of the \a dbgreg debug register. + * + * \param dbgreg Address of the debug register of which to get the value. + * + * \return Value of the \a dbgreg debug register. + */ +#if (defined __GNUC__) + #define Get_debug_register(dbgreg) __builtin_mfdr(dbgreg) +#elif (defined __ICCAVR32__) + #define Get_debug_register(dbgreg) __get_debug_register(dbgreg) +#endif + +/*! \brief Sets the value of the \a dbgreg debug register to \a value. + * + * \param dbgreg Address of the debug register of which to set the value. + * \param value Value to set the \a dbgreg debug register to. + */ +#if (defined __GNUC__) + #define Set_debug_register(dbgreg, value) __builtin_mtdr(dbgreg, value) +#elif (defined __ICCAVR32__) + #define Set_debug_register(dbgreg, value) __set_debug_register(dbgreg, value) +#endif + +//! @} + +#endif // __AVR32_ABI_COMPILER__ + + +//! Boolean evaluating MCU little endianism. +#if ((defined __GNUC__) && (defined __AVR32__)) || ((defined __ICCAVR32__) || (defined __AAVR32__)) + #define LITTLE_ENDIAN_MCU FALSE +#else + #error If you are here, you should check what is exactly the processor you are using... + #define LITTLE_ENDIAN_MCU FALSE +#endif + +// Check that MCU endianism is correctly defined. +#ifndef LITTLE_ENDIAN_MCU + #error YOU MUST define the MCU endianism with LITTLE_ENDIAN_MCU: either FALSE or TRUE +#endif + +//! Boolean evaluating MCU big endianism. +#define BIG_ENDIAN_MCU (!LITTLE_ENDIAN_MCU) + + +#ifdef __AVR32_ABI_COMPILER__ // Automatically defined when compiling for AVR32, not when assembling. + +/*! \name MCU Endianism Handling + */ +//! @{ + +#if (LITTLE_ENDIAN_MCU==TRUE) + #define LSB(u16) (((U8 *)&(u16))[0]) //!< Least significant byte of \a u16. + #define MSB(u16) (((U8 *)&(u16))[1]) //!< Most significant byte of \a u16. + + #define LSH(u32) (((U16 *)&(u32))[0]) //!< Least significant half-word of \a u32. + #define MSH(u32) (((U16 *)&(u32))[1]) //!< Most significant half-word of \a u32. + #define LSB0W(u32) (((U8 *)&(u32))[0]) //!< Least significant byte of 1st rank of \a u32. + #define LSB1W(u32) (((U8 *)&(u32))[1]) //!< Least significant byte of 2nd rank of \a u32. + #define LSB2W(u32) (((U8 *)&(u32))[2]) //!< Least significant byte of 3rd rank of \a u32. + #define LSB3W(u32) (((U8 *)&(u32))[3]) //!< Least significant byte of 4th rank of \a u32. + #define MSB3W(u32) LSB0W(u32) //!< Most significant byte of 4th rank of \a u32. + #define MSB2W(u32) LSB1W(u32) //!< Most significant byte of 3rd rank of \a u32. + #define MSB1W(u32) LSB2W(u32) //!< Most significant byte of 2nd rank of \a u32. + #define MSB0W(u32) LSB3W(u32) //!< Most significant byte of 1st rank of \a u32. + + #define LSW(u64) (((U32 *)&(u64))[0]) //!< Least significant word of \a u64. + #define MSW(u64) (((U32 *)&(u64))[1]) //!< Most significant word of \a u64. + #define LSH0(u64) (((U16 *)&(u64))[0]) //!< Least significant half-word of 1st rank of \a u64. + #define LSH1(u64) (((U16 *)&(u64))[1]) //!< Least significant half-word of 2nd rank of \a u64. + #define LSH2(u64) (((U16 *)&(u64))[2]) //!< Least significant half-word of 3rd rank of \a u64. + #define LSH3(u64) (((U16 *)&(u64))[3]) //!< Least significant half-word of 4th rank of \a u64. + #define MSH3(u64) LSH0(u64) //!< Most significant half-word of 4th rank of \a u64. + #define MSH2(u64) LSH1(u64) //!< Most significant half-word of 3rd rank of \a u64. + #define MSH1(u64) LSH2(u64) //!< Most significant half-word of 2nd rank of \a u64. + #define MSH0(u64) LSH3(u64) //!< Most significant half-word of 1st rank of \a u64. + #define LSB0D(u64) (((U8 *)&(u64))[0]) //!< Least significant byte of 1st rank of \a u64. + #define LSB1D(u64) (((U8 *)&(u64))[1]) //!< Least significant byte of 2nd rank of \a u64. + #define LSB2D(u64) (((U8 *)&(u64))[2]) //!< Least significant byte of 3rd rank of \a u64. + #define LSB3D(u64) (((U8 *)&(u64))[3]) //!< Least significant byte of 4th rank of \a u64. + #define LSB4D(u64) (((U8 *)&(u64))[4]) //!< Least significant byte of 5th rank of \a u64. + #define LSB5D(u64) (((U8 *)&(u64))[5]) //!< Least significant byte of 6th rank of \a u64. + #define LSB6D(u64) (((U8 *)&(u64))[6]) //!< Least significant byte of 7th rank of \a u64. + #define LSB7D(u64) (((U8 *)&(u64))[7]) //!< Least significant byte of 8th rank of \a u64. + #define MSB7D(u64) LSB0D(u64) //!< Most significant byte of 8th rank of \a u64. + #define MSB6D(u64) LSB1D(u64) //!< Most significant byte of 7th rank of \a u64. + #define MSB5D(u64) LSB2D(u64) //!< Most significant byte of 6th rank of \a u64. + #define MSB4D(u64) LSB3D(u64) //!< Most significant byte of 5th rank of \a u64. + #define MSB3D(u64) LSB4D(u64) //!< Most significant byte of 4th rank of \a u64. + #define MSB2D(u64) LSB5D(u64) //!< Most significant byte of 3rd rank of \a u64. + #define MSB1D(u64) LSB6D(u64) //!< Most significant byte of 2nd rank of \a u64. + #define MSB0D(u64) LSB7D(u64) //!< Most significant byte of 1st rank of \a u64. + +#elif (BIG_ENDIAN_MCU==TRUE) + #define MSB(u16) (((U8 *)&(u16))[0]) //!< Most significant byte of \a u16. + #define LSB(u16) (((U8 *)&(u16))[1]) //!< Least significant byte of \a u16. + + #define MSH(u32) (((U16 *)&(u32))[0]) //!< Most significant half-word of \a u32. + #define LSH(u32) (((U16 *)&(u32))[1]) //!< Least significant half-word of \a u32. + #define MSB0W(u32) (((U8 *)&(u32))[0]) //!< Most significant byte of 1st rank of \a u32. + #define MSB1W(u32) (((U8 *)&(u32))[1]) //!< Most significant byte of 2nd rank of \a u32. + #define MSB2W(u32) (((U8 *)&(u32))[2]) //!< Most significant byte of 3rd rank of \a u32. + #define MSB3W(u32) (((U8 *)&(u32))[3]) //!< Most significant byte of 4th rank of \a u32. + #define LSB3W(u32) MSB0W(u32) //!< Least significant byte of 4th rank of \a u32. + #define LSB2W(u32) MSB1W(u32) //!< Least significant byte of 3rd rank of \a u32. + #define LSB1W(u32) MSB2W(u32) //!< Least significant byte of 2nd rank of \a u32. + #define LSB0W(u32) MSB3W(u32) //!< Least significant byte of 1st rank of \a u32. + + #define MSW(u64) (((U32 *)&(u64))[0]) //!< Most significant word of \a u64. + #define LSW(u64) (((U32 *)&(u64))[1]) //!< Least significant word of \a u64. + #define MSH0(u64) (((U16 *)&(u64))[0]) //!< Most significant half-word of 1st rank of \a u64. + #define MSH1(u64) (((U16 *)&(u64))[1]) //!< Most significant half-word of 2nd rank of \a u64. + #define MSH2(u64) (((U16 *)&(u64))[2]) //!< Most significant half-word of 3rd rank of \a u64. + #define MSH3(u64) (((U16 *)&(u64))[3]) //!< Most significant half-word of 4th rank of \a u64. + #define LSH3(u64) MSH0(u64) //!< Least significant half-word of 4th rank of \a u64. + #define LSH2(u64) MSH1(u64) //!< Least significant half-word of 3rd rank of \a u64. + #define LSH1(u64) MSH2(u64) //!< Least significant half-word of 2nd rank of \a u64. + #define LSH0(u64) MSH3(u64) //!< Least significant half-word of 1st rank of \a u64. + #define MSB0D(u64) (((U8 *)&(u64))[0]) //!< Most significant byte of 1st rank of \a u64. + #define MSB1D(u64) (((U8 *)&(u64))[1]) //!< Most significant byte of 2nd rank of \a u64. + #define MSB2D(u64) (((U8 *)&(u64))[2]) //!< Most significant byte of 3rd rank of \a u64. + #define MSB3D(u64) (((U8 *)&(u64))[3]) //!< Most significant byte of 4th rank of \a u64. + #define MSB4D(u64) (((U8 *)&(u64))[4]) //!< Most significant byte of 5th rank of \a u64. + #define MSB5D(u64) (((U8 *)&(u64))[5]) //!< Most significant byte of 6th rank of \a u64. + #define MSB6D(u64) (((U8 *)&(u64))[6]) //!< Most significant byte of 7th rank of \a u64. + #define MSB7D(u64) (((U8 *)&(u64))[7]) //!< Most significant byte of 8th rank of \a u64. + #define LSB7D(u64) MSB0D(u64) //!< Least significant byte of 8th rank of \a u64. + #define LSB6D(u64) MSB1D(u64) //!< Least significant byte of 7th rank of \a u64. + #define LSB5D(u64) MSB2D(u64) //!< Least significant byte of 6th rank of \a u64. + #define LSB4D(u64) MSB3D(u64) //!< Least significant byte of 5th rank of \a u64. + #define LSB3D(u64) MSB4D(u64) //!< Least significant byte of 4th rank of \a u64. + #define LSB2D(u64) MSB5D(u64) //!< Least significant byte of 3rd rank of \a u64. + #define LSB1D(u64) MSB6D(u64) //!< Least significant byte of 2nd rank of \a u64. + #define LSB0D(u64) MSB7D(u64) //!< Least significant byte of 1st rank of \a u64. + +#else + #error Unknown endianism. +#endif + +//! @} + + +/*! \name Endianism Conversion + * + * The same considerations as for clz and ctz apply here but AVR32-GCC's + * __builtin_bswap_16 and __builtin_bswap_32 do not behave like macros when + * applied to constant expressions, so two sets of macros are defined here: + * - Swap16, Swap32 and Swap64 to apply to constant expressions (values known + * at compile time); + * - swap16, swap32 and swap64 to apply to non-constant expressions (values + * unknown at compile time). + */ +//! @{ + +/*! \brief Toggles the endianism of \a u16 (by swapping its bytes). + * + * \param u16 U16 of which to toggle the endianism. + * + * \return Value resulting from \a u16 with toggled endianism. + * + * \note More optimized if only used with values known at compile time. + */ +#define Swap16(u16) ((U16)(((U16)(u16) >> 8) |\ + ((U16)(u16) << 8))) + +/*! \brief Toggles the endianism of \a u32 (by swapping its bytes). + * + * \param u32 U32 of which to toggle the endianism. + * + * \return Value resulting from \a u32 with toggled endianism. + * + * \note More optimized if only used with values known at compile time. + */ +#define Swap32(u32) ((U32)(((U32)Swap16((U32)(u32) >> 16)) |\ + ((U32)Swap16((U32)(u32)) << 16))) + +/*! \brief Toggles the endianism of \a u64 (by swapping its bytes). + * + * \param u64 U64 of which to toggle the endianism. + * + * \return Value resulting from \a u64 with toggled endianism. + * + * \note More optimized if only used with values known at compile time. + */ +#define Swap64(u64) ((U64)(((U64)Swap32((U64)(u64) >> 32)) |\ + ((U64)Swap32((U64)(u64)) << 32))) + +/*! \brief Toggles the endianism of \a u16 (by swapping its bytes). + * + * \param u16 U16 of which to toggle the endianism. + * + * \return Value resulting from \a u16 with toggled endianism. + * + * \note More optimized if only used with values unknown at compile time. + */ +#if (defined __GNUC__) + #define swap16(u16) ((U16)__builtin_bswap_16((U16)(u16))) +#elif (defined __ICCAVR32__) + #define swap16(u16) ((U16)__swap_bytes_in_halfwords((U16)(u16))) +#endif + +/*! \brief Toggles the endianism of \a u32 (by swapping its bytes). + * + * \param u32 U32 of which to toggle the endianism. + * + * \return Value resulting from \a u32 with toggled endianism. + * + * \note More optimized if only used with values unknown at compile time. + */ +#if (defined __GNUC__) + #define swap32(u32) ((U32)__builtin_bswap_32((U32)(u32))) +#elif (defined __ICCAVR32__) + #define swap32(u32) ((U32)__swap_bytes((U32)(u32))) +#endif + +/*! \brief Toggles the endianism of \a u64 (by swapping its bytes). + * + * \param u64 U64 of which to toggle the endianism. + * + * \return Value resulting from \a u64 with toggled endianism. + * + * \note More optimized if only used with values unknown at compile time. + */ +#define swap64(u64) ((U64)(((U64)swap32((U64)(u64) >> 32)) |\ + ((U64)swap32((U64)(u64)) << 32))) + +//! @} + + +/*! \name Target Abstraction + */ +//! @{ + +#define _GLOBEXT_ extern //!< extern storage-class specifier. +#define _CONST_TYPE_ const //!< const type qualifier. +#define _MEM_TYPE_SLOW_ //!< Slow memory type. +#define _MEM_TYPE_MEDFAST_ //!< Fairly fast memory type. +#define _MEM_TYPE_FAST_ //!< Fast memory type. + +typedef U8 Byte; //!< 8-bit unsigned integer. + +#define memcmp_ram2ram memcmp //!< Target-specific memcmp of RAM to RAM. +#define memcmp_code2ram memcmp //!< Target-specific memcmp of RAM to NVRAM. +#define memcpy_ram2ram memcpy //!< Target-specific memcpy from RAM to RAM. +#define memcpy_code2ram memcpy //!< Target-specific memcpy from NVRAM to RAM. + +#define LSB0(u32) LSB0W(u32) //!< Least significant byte of 1st rank of \a u32. +#define LSB1(u32) LSB1W(u32) //!< Least significant byte of 2nd rank of \a u32. +#define LSB2(u32) LSB2W(u32) //!< Least significant byte of 3rd rank of \a u32. +#define LSB3(u32) LSB3W(u32) //!< Least significant byte of 4th rank of \a u32. +#define MSB3(u32) MSB3W(u32) //!< Most significant byte of 4th rank of \a u32. +#define MSB2(u32) MSB2W(u32) //!< Most significant byte of 3rd rank of \a u32. +#define MSB1(u32) MSB1W(u32) //!< Most significant byte of 2nd rank of \a u32. +#define MSB0(u32) MSB0W(u32) //!< Most significant byte of 1st rank of \a u32. + +//! @} + +#endif // __AVR32_ABI_COMPILER__ + + +#endif // _COMPILER_H_ diff --git a/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/conf_isp.h b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/conf_isp.h new file mode 100644 index 000000000..ca516ee00 --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/conf_isp.h @@ -0,0 +1,136 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ****************************************************************** + * + * \brief ISP configuration file. + * + * This file contains the possible external configuration of the ISP. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices with a USB module can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ***************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _CONF_ISP_H_ +#define _CONF_ISP_H_ + +#include +#include "compiler.h" + + +//_____ D E F I N I T I O N S ______________________________________________ + +#define PRODUCT_MANUFACTURER_ID 0x58 +#define PRODUCT_FAMILY_ID 0x20 + +#define ISP_VERSION 0x10 +#define ISP_ID0 0x00 +#define ISP_ID1 0x00 + +#define ISP_CFG1 (*(volatile U32 *)ISP_CFG1_ADDRESS) +#define ISP_CFG1_ADDRESS (AVR32_FLASHC_USER_PAGE_ADDRESS + ISP_CFG1_OFFSET) +#define ISP_CFG1_OFFSET 0x000001FC +#define ISP_CFG1_SIZE 4 + +#define ISP_CFG1_BOOT_KEY1 16 +#define ISP_CFG1_BOOT_KEY1_MASK 0xFFFF0000 +#define ISP_CFG1_BOOT_KEY1_OFFSET 16 +#define ISP_CFG1_BOOT_KEY1_SIZE 16 +#define ISP_CFG1_BOOT_KEY1_VALUE 0xE11E + +#define ISP_CFG1_FORCE 9 +#define ISP_CFG1_FORCE_MASK 0x00000200 +#define ISP_CFG1_FORCE_OFFSET 9 +#define ISP_CFG1_FORCE_SIZE 1 + +#define ISP_CFG1_IO_COND_EN 8 +#define ISP_CFG1_IO_COND_EN_MASK 0x00000100 +#define ISP_CFG1_IO_COND_EN_OFFSET 8 +#define ISP_CFG1_IO_COND_EN_SIZE 1 + +#define ISP_CFG1_CRC8 0 +#define ISP_CFG1_CRC8_MASK 0x000000FF +#define ISP_CFG1_CRC8_OFFSET 0 +#define ISP_CFG1_CRC8_SIZE 8 +#define ISP_CFG1_CRC8_POLYNOMIAL 0x107 + +#define ISP_CFG2 (*(volatile U32 *)ISP_CFG2_ADDRESS) +#define ISP_CFG2_ADDRESS (AVR32_FLASHC_USER_PAGE_ADDRESS + ISP_CFG2_OFFSET) +#define ISP_CFG2_OFFSET 0x000001F8 +#define ISP_CFG2_SIZE 4 + +#define ISP_CFG2_BOOT_KEY 17 +#define ISP_CFG2_BOOT_KEY_MASK 0xFFFE0000 +#define ISP_CFG2_BOOT_KEY_OFFSET 17 +#define ISP_CFG2_BOOT_KEY_SIZE 15 +#define ISP_CFG2_BOOT_KEY_VALUE 0x494F + +#define ISP_CFG2_IO_COND_LEVEL 16 +#define ISP_CFG2_IO_COND_LEVEL_MASK 0x00010000 +#define ISP_CFG2_IO_COND_LEVEL_OFFSET 16 +#define ISP_CFG2_IO_COND_LEVEL_SIZE 1 + +#define ISP_CFG2_IO_COND_PIN 8 +#define ISP_CFG2_IO_COND_PIN_MASK 0x0000FF00 +#define ISP_CFG2_IO_COND_PIN_OFFSET 8 +#define ISP_CFG2_IO_COND_PIN_SIZE 8 + +#define ISP_CFG2_CRC8 0 +#define ISP_CFG2_CRC8_MASK 0x000000FF +#define ISP_CFG2_CRC8_OFFSET 0 +#define ISP_CFG2_CRC8_SIZE 8 +#define ISP_CFG2_CRC8_POLYNOMIAL 0x107 + +#define ISP_KEY (*(volatile U32 *)ISP_KEY_ADDRESS) +#define ISP_KEY_ADDRESS (AVR32_SRAM_ADDRESS + ISP_KEY_OFFSET) +#define ISP_KEY_OFFSET 0x00000000 +#define ISP_KEY_SIZE 4 +#define ISP_KEY_VALUE ('I' << 24 | 'S' << 16 | 'P' << 8 | 'K') + +#ifndef ISP_OSC + #define ISP_OSC 0 +#endif + +#define DFU_FRAME_LENGTH 2048 + +#define PROGRAM_START_ADDRESS (AVR32_FLASH_ADDRESS + PROGRAM_START_OFFSET) +#define PROGRAM_START_OFFSET 0x00002000 + + +#endif // _CONF_ISP_H_ diff --git a/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/parts.h b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/parts.h new file mode 100644 index 000000000..6637b2f76 --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/parts.h @@ -0,0 +1,203 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*This file is prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief Arch file for AVR32. + * + * This file defines common AVR32 UC3 series. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + ******************************************************************************/ + +/* Copyright (c) 2009 Atmel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an Atmel + * AVR product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + * + */ + +#ifndef _ARCH_H_ +#define _ARCH_H_ + +// UC3 A Series +#define UC3A0 ( defined (__GNUC__) && \ + ( defined (__AVR32_UC3A0128__) || \ + defined (__AVR32_UC3A0256__) || \ + defined (__AVR32_UC3A0512__) || \ + defined (__AVR32_UC3A0512ES__))) \ + ||((defined(__ICCAVR32__) || defined(__AAVR32__)) && \ + ( defined (__AT32UC3A0128__) || \ + defined (__AT32UC3A0256__) || \ + defined (__AT32UC3A0512__) || \ + defined (__AT32UC3A0512ES__))) + +#define UC3A1 ( defined (__GNUC__) && \ + ( defined (__AVR32_UC3A1128__) || \ + defined (__AVR32_UC3A1256__) || \ + defined (__AVR32_UC3A1512__) || \ + defined (__AVR32_UC3A1512ES__))) \ + ||((defined(__ICCAVR32__) || defined(__AAVR32__)) && \ + ( defined (__AT32UC3A1128__) || \ + defined (__AT32UC3A1256__) || \ + defined (__AT32UC3A1512__) || \ + defined (__AT32UC3A1512ES__))) + +#define UC3A3 ( defined (__GNUC__) && \ + ( defined (__AVR32_UC3A364__) || \ + defined (__AVR32_UC3A364S__) || \ + defined (__AVR32_UC3A3128__) || \ + defined (__AVR32_UC3A3128S__) || \ + defined (__AVR32_UC3A3256__) || \ + defined (__AVR32_UC3A3256S__))) \ + ||((defined(__ICCAVR32__) || defined(__AAVR32__)) && \ + ( defined (__AT32UC3A364__) || \ + defined (__AT32UC3A364S__) || \ + defined (__AT32UC3A3128__) || \ + defined (__AT32UC3A3128S__) || \ + defined (__AT32UC3A3256__) || \ + defined (__AT32UC3A3256S__))) + +#define UC3A (UC3A0 || UC3A1 || UC3A3) + +// UC3 B Series +#define UC3B0 ( defined (__GNUC__) && \ + ( defined (__AVR32_UC3B064__) || \ + defined (__AVR32_UC3B0128__) || \ + defined (__AVR32_UC3B0256__) || \ + defined (__AVR32_UC3B0256ES__) || \ + defined (__AVR32_UC3B0512__) || \ + defined (__AVR32_UC3B0512REVC_))) \ + ||((defined(__ICCAVR32__) || defined(__AAVR32__)) && \ + ( defined (__AT32UC3B064__) || \ + defined (__AT32UC3B0128__) || \ + defined (__AT32UC3B0256__) || \ + defined (__AT32UC3B0256ES__) || \ + defined (__AT32UC3B0512__) || \ + defined (__AT32UC3B0512REVC__))) + +#define UC3B1 ( defined (__GNUC__) && \ + ( defined (__AVR32_UC3B164__) || \ + defined (__AVR32_UC3B1128__) || \ + defined (__AVR32_UC3B1256__) || \ + defined (__AVR32_UC3B1256ES__) || \ + defined (__AVR32_UC3B1512__) || \ + defined (__AVR32_UC3B1512ES__))) \ + ||((defined(__ICCAVR32__) || defined(__AAVR32__)) && \ + ( defined (__AT32UC3B164__) || \ + defined (__AT32UC3B1128__) || \ + defined (__AT32UC3B1256__) || \ + defined (__AT32UC3B1256ES__) || \ + defined (__AT32UC3B1512__) || \ + defined (__AT32UC3B1512REVC__))) + +#define UC3B (UC3B0 || UC3B1 ) + +// UC3 C Series +#define UC3C0 ( defined (__GNUC__) && \ + ( defined (__AVR32_UC3C064C__) || \ + defined (__AVR32_UC3C0128C__) || \ + defined (__AVR32_UC3C0256C__) || \ + defined (__AVR32_UC3C0512CREVC__))) \ + ||((defined(__ICCAVR32__) || defined(__AAVR32__)) && \ + ( defined (__AT32UC3C064C__) || \ + defined (__AT32UC3C0128C__) || \ + defined (__AT32UC3C0256C__) || \ + defined (__AT32UC3C0512C__))) + +#define UC3C1 ( defined (__GNUC__) && \ + ( defined (__AVR32_UC3C164C__) || \ + defined (__AVR32_UC3C1128C__) || \ + defined (__AVR32_UC3C1256C__) || \ + defined (__AVR32_UC3C1512CREVC__))) \ + ||((defined(__ICCAVR32__) || defined(__AAVR32__)) && \ + ( defined (__AT32UC3C164C__) || \ + defined (__AT32UC3C1128C__) || \ + defined (__AT32UC3C1256C__) || \ + defined (__AT32UC3C1512C__))) + +#define UC3C2 ( defined (__GNUC__) && \ + ( defined (__AVR32_UC3C264C__) || \ + defined (__AVR32_UC3C2128C__) || \ + defined (__AVR32_UC3C2256C__) || \ + defined (__AVR32_UC3C2512CREVC__))) \ + ||((defined(__ICCAVR32__) || defined(__AAVR32__)) && \ + ( defined (__AT32UC3C264C__) || \ + defined (__AT32UC3C2128C__) || \ + defined (__AT32UC3C2256C__) || \ + defined (__AT32UC3C2512C__))) + +#define UC3C (UC3C0 || UC3C1 || UC3C2) + +// UC3 L Device series +#define UC3L0 ( defined (__GNUC__) && \ + ( defined (__AVR32_UC3L016__) || \ + defined (__AVR32_UC3L032__) || \ + defined (__AVR32_UC3L064__) || \ + defined (__AVR32_UC3L064REVB__))) \ + ||((defined(__ICCAVR32__) || defined(__AAVR32__)) && \ + ( defined (__AT32UC3L016__) || \ + defined (__AT32UC3L032__) || \ + defined (__AT32UC3L064__) || \ + defined (__AT32UC3L064REVB__))) + +#define UC3L1 ( defined (__GNUC__) && \ + ( defined (__AVR32_UC3L116__) || \ + defined (__AVR32_UC3L132__) || \ + defined (__AVR32_UC3L164__))) \ + ||((defined(__ICCAVR32__) || defined(__AAVR32__)) && \ + ( defined (__AT32UC3L116__) || \ + defined (__AT32UC3L132__) || \ + defined (__AT32UC3L164__))) + +#define UC3L2 ( defined (__GNUC__) && \ + ( defined (__AVR32_UC3L216__) || \ + defined (__AVR32_UC3L232__) || \ + defined (__AVR32_UC3L264__))) \ + ||((defined(__ICCAVR32__) || defined(__AAVR32__)) && \ + ( defined (__AT32UC3L216__) || \ + defined (__AT32UC3L232__) || \ + defined (__AT32UC3L264__))) + +#define UC3L3 ( defined (__GNUC__) && \ + ( defined (__AVR32_UC3L316__) || \ + defined (__AVR32_UC3L332__) || \ + defined (__AVR32_UC3L364__))) \ + ||((defined(__ICCAVR32__) || defined(__AAVR32__)) && \ + ( defined (__AT32UC3L316__) || \ + defined (__AT32UC3L332__) || \ + defined (__AT32UC3L364__))) + +#define UC3L (UC3L0 || UC3L1 || UC3L2 || UC3L3) + +#endif // _ARCH_H_ diff --git a/libraries/WiFi/extras/wifi_dnld/src/clocks.c b/libraries/WiFi/extras/wifi_dnld/src/clocks.c new file mode 100644 index 000000000..cdd07fabe --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/clocks.c @@ -0,0 +1,101 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*! \page License + * Copyright (C) 2009, H&D Wireless AB All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of H&D Wireless AB may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + +#include +#include "board.h" +#include "clocks.h" +#include "pm.h" +#include "flashc.h" +#include "gpio.h" + +/** + * Initializes the MCU system clocks. + */ +void +init_sys_clocks(void) +{ + /* switch to OSC0 to speed up the booting */ + pm_switch_to_osc0(&AVR32_PM, FOSC0, OSC0_STARTUP); + +#ifndef USE_PLL + return; +#endif + + /* For audio, ee have to use OSC1 on to generate the correct clockrate + * for the SSC + */ +#if OSC == 1 + /* start oscillator1 */ + pm_enable_osc1_crystal(&AVR32_PM, FOSC1); + pm_enable_clk1(&AVR32_PM, OSC1_STARTUP); +#endif + + /* configure pll multipliers */ + pm_pll_setup(&AVR32_PM, + 0, /* pll */ + PLL_MUL, /* mul */ + 1, /* div */ + OSC, /* osc */ + 16); /* lockcount */ + + /* set PLL operating range and divider (fpll = fvco/2) + * this gives PLL output = 66 MHz (62.0928 MHz for EVK1105/OSC1) + */ + pm_pll_set_option(&AVR32_PM, + 0, /* pll */ + 1, /* pll_freq */ + 1, /* pll_div2 */ + 0); /* pll_wbwdisable. */ + + + /* start PLL0 and wait for the lock */ + pm_pll_enable(&AVR32_PM, 0); + pm_wait_for_pll0_locked(&AVR32_PM); + + /* Set all peripheral clocks torun at master clock rate */ + pm_cksel(&AVR32_PM, + 0, /* pbadiv */ + 0, /* pbasel */ + 0, /* pbbdiv */ + 0, /* pbbsel */ + 0, /* hsbdiv */ + 0); /* hsbsel */ + + /* Set one waitstate for the flash */ + flashc_set_wait_state(1); + + /* Switch to PLL0 as the master clock */ + pm_switch_to_clock(&AVR32_PM, AVR32_PM_MCCTRL_MCSEL_PLL0); + +#if OSC == 1 + pm_configure_usb_clock(); +#endif +} diff --git a/libraries/WiFi/extras/wifi_dnld/src/clocks.h b/libraries/WiFi/extras/wifi_dnld/src/clocks.h new file mode 100644 index 000000000..cceda2903 --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/clocks.h @@ -0,0 +1,78 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*! \page License + * Copyright (C) 2009, H&D Wireless AB All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of H&D Wireless AB may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef CLOCKS_H +#define CLOCKS_H + +#include "board.h" + + +#if BOARD == EVK1100 +# define USE_PLL +# define OSC 0 +# define PLL_MUL 10 +#elif BOARD == EVK1101 +# define USE_PLL +# define OSC 0 +# define PLL_MUL 9 +#elif BOARD == EVK1104 +# define USE_PLL +# define OSC 0 +# define PLL_MUL 9 /* for some reason we cant use 66 MHz */ +#elif BOARD == EVK1105 +# define USE_PLL +# define OSC 1 +# define PLL_MUL 10 +#elif BOARD == ARDUINO +# define USE_PLL +# define OSC 0 +# define PLL_MUL 8 +#endif + +#if OSC == 0 +# define FOSC FOSC0 /* 12 MHz */ +#else +# define FOSC FOSC1 /* 11.2896 MHz */ +#endif + +#ifdef USE_PLL +# define FMCK_HZ ((FOSC * (PLL_MUL + 1)) / 2) +#else +# define FMCK_HZ FOSC +#endif + +#define FCPU_HZ FMCK_HZ +#define FHSB_HZ FCPU_HZ +#define FPBB_HZ FMCK_HZ +#define FPBA_HZ FMCK_HZ + +void init_sys_clocks(void); + +#endif diff --git a/libraries/WiFi/extras/wifi_dnld/src/flash_fw.c b/libraries/WiFi/extras/wifi_dnld/src/flash_fw.c new file mode 100644 index 000000000..75d35f6bf --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/flash_fw.c @@ -0,0 +1,125 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*! \page License + * Copyright (C) 2009, H&D Wireless AB All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of H&D Wireless AB may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#include + +#include "printf-stdarg.h" +#include "wl_fw.h" +#include "startup.h" +#include "nor_flash.h" +#include "gpio.h" + +#define GREEN_OFF() gpio_set_gpio_pin(LED0_GPIO) +#define GREEN_ON() gpio_clr_gpio_pin(LED0_GPIO) +#define GREEN_BLINK() gpio_tgl_gpio_pin(LED0_GPIO) +#define RED_OFF() gpio_set_gpio_pin(LED1_GPIO) +#define RED_ON() gpio_clr_gpio_pin(LED1_GPIO) +#define RED_BLINK() gpio_tgl_gpio_pin(LED1_GPIO) +#define BLUE_OFF() gpio_set_gpio_pin(LED2_GPIO) +#define BLUE_ON() gpio_clr_gpio_pin(LED2_GPIO) +#define BLUE_BLINK() gpio_tgl_gpio_pin(LED2_GPIO) + + +/** + * + */ +void +led_init(void) +{ + gpio_enable_gpio_pin(LED0_GPIO); + gpio_enable_gpio_pin(LED1_GPIO); + gpio_enable_gpio_pin(LED2_GPIO); + GREEN_OFF(); + RED_OFF(); + BLUE_OFF(); +} + + +int main(void) +{ + U32 pos, len; + + startup_init(); + printk("*** HD chip firmware upgrade ver 2.7 ***\n"); + led_init(); + flash_init(); + GREEN_ON(); + if (at45dbx_mem_check() == OK) + { + printk("Memory check... [ OK ]\n"); + } + else + { + RED_ON(); + GREEN_OFF(); + printk("Memory check... [FAIL]\n"); + return 0; + } + printk("Writing firmware data to flash\n"); + pos = 0; + while (pos < fw_len) { + if (fw_len - pos > SECTOR_SIZE) + len = SECTOR_SIZE; + else + len = fw_len - pos; + + flash_write(pos, fw_buf + pos, len); + pos += len; + } + + printk("Verifying firmware data\n"); + pos = 0; + while (pos < fw_len) { + static U8 page_buf[SECTOR_SIZE]; + U32 i; + + if (fw_len - pos > SECTOR_SIZE) + len = SECTOR_SIZE; + else + len = fw_len - pos; + + flash_read(pos, page_buf, len); + + for (i = 0; i < len; i++) + if (*(page_buf + i) != *(fw_buf + pos + i)) { + RED_ON(); + GREEN_OFF(); + printk("Verify failed at byte %d, 0x%02x != 0x%02x\n", + pos + i, *(page_buf + i), *(fw_buf + pos + i)); + return 0; + } + + + pos += len; + } + GREEN_OFF(); + BLUE_ON(); + printk("Firmware successfully stored in flash!\n"); + return 0; +} diff --git a/libraries/WiFi/extras/wifi_dnld/src/license.txt b/libraries/WiFi/extras/wifi_dnld/src/license.txt new file mode 100644 index 000000000..e57439f37 --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/license.txt @@ -0,0 +1,42 @@ + Copyright (C) 2009, H&D Wireless AB All rights reserved. + + The license to use this software in whole and in part and to + redistribute it in any form follows with the WiFi HW module from H&D + Wireless and is granted under the following restrictions: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + 3. The name of H&D Wireless AB may not be used to endorse or promote + products derived from this software without specific prior written + permission. + + 4. The software may only be used together with hardware from H&D + Wireless all other use is prohibited. + + 5. The license to use and redistribute the software is granted + together with the purchase of a hardware platform on a one to one + basis + + 6. The binary code may not be reversed engineered or by other means + copied to circumvent this license. + + THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY + EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT + SHALL HD WIRELESS AB BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + OF THE POSSIBILITY OF SUCH DAMAGE. + + For more information regarding this software license Contact H&D + Wireless AB (support@hd-wireless.se). diff --git a/libraries/WiFi/extras/wifi_dnld/src/nor_flash.c b/libraries/WiFi/extras/wifi_dnld/src/nor_flash.c new file mode 100644 index 000000000..011594923 --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/nor_flash.c @@ -0,0 +1,99 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*! \page License + * Copyright (C) 2009, H&D Wireless AB All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of H&D Wireless AB may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#include +#include "compiler.h" +#include "preprocessor.h" +#include "board.h" +#include "power_clocks_lib.h" +#include "gpio.h" +#include "spi.h" +#include "conf_at45dbx.h" +#include "at45dbx.h" +#include "clocks.h" + + +void flash_init(void) +{ + static const gpio_map_t AT45DBX_SPI_GPIO_MAP = { + { AT45DBX_SPI_SCK_PIN, AT45DBX_SPI_SCK_FUNCTION }, + { AT45DBX_SPI_MISO_PIN, AT45DBX_SPI_MISO_FUNCTION }, + { AT45DBX_SPI_MOSI_PIN, AT45DBX_SPI_MOSI_FUNCTION }, + { AT45DBX_SPI_NPCS2_PIN, AT45DBX_SPI_NPCS2_FUNCTION }, + }; + + spi_options_t spiOptions = { + .reg = AT45DBX_SPI_FIRST_NPCS, + .baudrate = AT45DBX_SPI_MASTER_SPEED, + .bits = AT45DBX_SPI_BITS, + .spck_delay = 0, + .trans_delay = 0, + .stay_act = 1, + .spi_mode = 0, + .modfdis = 1 + }; + + gpio_enable_module(AT45DBX_SPI_GPIO_MAP, + sizeof(AT45DBX_SPI_GPIO_MAP) / + sizeof(AT45DBX_SPI_GPIO_MAP[0])); + + spi_initMaster(AT45DBX_SPI, &spiOptions); + + spi_selectionMode(AT45DBX_SPI, 0, 0, 0); + spi_enable(AT45DBX_SPI); + + /* put up flash reset pin */ + gpio_set_gpio_pin(AT45DBX_CHIP_RESET); + + at45dbx_init(spiOptions, FPBA_HZ); +} + +void flash_write(U32 addr, const U8* buf, U32 len) +{ + U32 sector = addr / AT45DBX_SECTOR_SIZE; + U32 i; + Assert(addr % AT45DBX_SECTOR_SIZE == 0); + + at45dbx_write_open(sector); + for (i = 0; i < len; i++) + at45dbx_write_byte(buf[i]); + at45dbx_write_close(); +} + +void flash_read(U32 addr, U8* buf, U32 len) +{ + U32 sector = addr / AT45DBX_SECTOR_SIZE; + U32 i; + Assert(addr % AT45DBX_SECTOR_SIZE == 0); + + at45dbx_read_open(sector); + for (i = 0; i < len; i++) + buf[i] = at45dbx_read_byte(); + at45dbx_read_close(); +} diff --git a/libraries/WiFi/extras/wifi_dnld/src/nor_flash.h b/libraries/WiFi/extras/wifi_dnld/src/nor_flash.h new file mode 100644 index 000000000..52a4a200a --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/nor_flash.h @@ -0,0 +1,41 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*! \page License + * Copyright (C) 2009, H&D Wireless AB All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of H&D Wireless AB may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef NOR_FLASH_H +#define NOR_FLASH_H + +#include "at45dbx.h" + +#define SECTOR_SIZE AT45DBX_SECTOR_SIZE + +void flash_init(void); +void flash_write(U32 addr, const U8* buf, U32 len); +void flash_read(U32 addr, U8* buf, U32 len); + +#endif diff --git a/libraries/WiFi/extras/wifi_dnld/src/printf-stdarg.c b/libraries/WiFi/extras/wifi_dnld/src/printf-stdarg.c new file mode 100644 index 000000000..86ab88e09 --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/printf-stdarg.c @@ -0,0 +1,323 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/* This source file is part of the ATMEL AVR32-SoftwareFramework-AT32UC3A-1.4.0 Release */ + +/*This file has been prepared for Doxygen automatic documentation generation.*/ +/*! \file ********************************************************************* + * + * \brief sprintf functions to replace newlib for AVR32 UC3. + * + * - Compiler: IAR EWAVR32 and GNU GCC for AVR32 + * - Supported devices: All AVR32 devices can be used. + * - AppNote: + * + * \author Atmel Corporation: http://www.atmel.com \n + * Support and FAQ: http://support.atmel.no/ + * + *****************************************************************************/ + +/* Copyright (C) 2006-2008, Atmel Corporation All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of ATMEL may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + Copyright 2001, 2002 Georges Menie (www.menie.org) + stdarg version contributed by Christian Ettinger + + This program 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 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +/* + putchar is the only external dependency for this file, + if you have a working putchar, leave it commented out. + If not, uncomment the define below and + replace outbyte(c) by your own function call. + +*/ + + +#include +#include + +#define putchar(c) print_dbg_char(c) + +static void printchar(char **str, int c) +{ + extern int putchar(int c); + + if (str) { + **str = c; + ++(*str); + } + else (void)putchar(c); +} + +#define PAD_RIGHT 1 +#define PAD_ZERO 2 + +static int prints(char **out, const char *string, int width, int pad) +{ + register int pc = 0, padchar = ' '; + + if (width > 0) { + register int len = 0; + register const char *ptr; + for (ptr = string; *ptr; ++ptr) ++len; + if (len >= width) width = 0; + else width -= len; + if (pad & PAD_ZERO) padchar = '0'; + } + if (!(pad & PAD_RIGHT)) { + for ( ; width > 0; --width) { + printchar (out, padchar); + ++pc; + } + } + for ( ; *string ; ++string) { + printchar (out, *string); + ++pc; + } + for ( ; width > 0; --width) { + printchar (out, padchar); + ++pc; + } + + return pc; +} + +/* the following should be enough for 32 bit int */ +#define PRINT_BUF_LEN 12 + +static int printi(char **out, int i, int b, int sg, int width, int pad, int letbase) +{ + char print_buf[PRINT_BUF_LEN]; + register char *s; + register int t, neg = 0, pc = 0; + register unsigned int u = i; + + if (i == 0) { + print_buf[0] = '0'; + print_buf[1] = '\0'; + return prints (out, print_buf, width, pad); + } + + if (sg && b == 10 && i < 0) { + neg = 1; + u = -i; + } + + s = print_buf + PRINT_BUF_LEN-1; + *s = '\0'; + + while (u) { + t = u % b; + if( t >= 10 ) + t += letbase - '0' - 10; + *--s = t + '0'; + u /= b; + } + + if (neg) { + if( width && (pad & PAD_ZERO) ) { + printchar (out, '-'); + ++pc; + --width; + } + else { + *--s = '-'; + } + } + + return pc + prints (out, s, width, pad); +} + +int fprintf(__FILE *stream, const char *format, ...) +{ +return 0; +} +int printk_va(char **out, const char *format, va_list args ) +{ + register int width, pad; + register int pc = 0; + char scr[2]; + + for (; *format != 0; ++format) { + if (*format == '%') { + ++format; + width = pad = 0; + if (*format == '\0') break; + if (*format == '%') goto out; + if (*format == '-') { + ++format; + pad = PAD_RIGHT; + } + while (*format == '0') { + ++format; + pad |= PAD_ZERO; + } + for ( ; *format >= '0' && *format <= '9'; ++format) { + width *= 10; + width += *format - '0'; + } + if( *format == 's' ) { + register char *s = (char *)va_arg( args, int ); + pc += prints (out, s?s:"(null)", width, pad); + continue; + } + if( *format == 'd' ) { + pc += printi (out, va_arg( args, int ), 10, 1, width, pad, 'a'); + continue; + } + if( *format == 'p' ) { + pad = 8; + pc += printi (out, va_arg( args, int ), 16, 0, width, pad, 'a'); + continue; + } + if( *format == 'x' ) { + pc += printi (out, va_arg( args, int ), 16, 0, width, pad, 'a'); + continue; + } + if( *format == 'X' ) { + pc += printi (out, va_arg( args, int ), 16, 0, width, pad, 'A'); + continue; + } + if( *format == 'u' ) { + pc += printi (out, va_arg( args, int ), 10, 0, width, pad, 'a'); + continue; + } + if( *format == 'c' ) { + /* char are converted to int then pushed on the stack */ + scr[0] = (char)va_arg( args, int ); + scr[1] = '\0'; + pc += prints (out, scr, width, pad); + continue; + } + } + else { + out: + printchar (out, *format); + ++pc; + } + } + if (out) **out = '\0'; + va_end( args ); + return pc; +} + +int printk(const char *format, ...) +{ + va_list args; + + va_start( args, format ); + return printk_va( 0, format, args ); +} + +int sprintf(char *out, const char *format, ...) +{ + va_list args; + + va_start( args, format ); + return printk_va( &out, format, args ); +} + +#ifdef TEST_PRINTF +int main(void) +{ + char *ptr = "Hello world!"; + char *np = 0; + int i = 5; + unsigned int bs = sizeof(int)*8; + int mi; + char buf[80]; + + mi = (1 << (bs-1)) + 1; + printf("%s\n", ptr); + printf("printf test\n"); + printf("%s is null pointer\n", np); + printf("%d = 5\n", i); + printf("%d = - max int\n", mi); + printf("char %c = 'a'\n", 'a'); + printf("hex %x = ff\n", 0xff); + printf("hex %02x = 00\n", 0); + printf("signed %d = unsigned %u = hex %x\n", -3, -3, -3); + printf("%d %s(s)%", 0, "message"); + printf("\n"); + printf("%d %s(s) with %%\n", 0, "message"); + sprintf(buf, "justif: \"%-10s\"\n", "left"); printf("%s", buf); + sprintf(buf, "justif: \"%10s\"\n", "right"); printf("%s", buf); + sprintf(buf, " 3: %04d zero padded\n", 3); printf("%s", buf); + sprintf(buf, " 3: %-4d left justif.\n", 3); printf("%s", buf); + sprintf(buf, " 3: %4d right justif.\n", 3); printf("%s", buf); + sprintf(buf, "-3: %04d zero padded\n", -3); printf("%s", buf); + sprintf(buf, "-3: %-4d left justif.\n", -3); printf("%s", buf); + sprintf(buf, "-3: %4d right justif.\n", -3); printf("%s", buf); + + return 0; +} + +/* + * if you compile this file with + * gcc -Wall $(YOUR_C_OPTIONS) -DTEST_PRINTF -c printf.c + * you will get a normal warning: + * printf.c:214: warning: spurious trailing `%' in format + * this line is testing an invalid % at the end of the format string. + * + * this should display (on 32bit int machine) : + * + * Hello world! + * printf test + * (null) is null pointer + * 5 = 5 + * -2147483647 = - max int + * char a = 'a' + * hex ff = ff + * hex 00 = 00 + * signed -3 = unsigned 4294967293 = hex fffffffd + * 0 message(s) + * 0 message(s) with % + * justif: "left " + * justif: " right" + * 3: 0003 zero padded + * 3: 3 left justif. + * 3: 3 right justif. + * -3: -003 zero padded + * -3: -3 left justif. + * -3: -3 right justif. + */ + +#endif diff --git a/libraries/WiFi/extras/wifi_dnld/src/printf-stdarg.h b/libraries/WiFi/extras/wifi_dnld/src/printf-stdarg.h new file mode 100644 index 000000000..f6bd66476 --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/printf-stdarg.h @@ -0,0 +1,36 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*! \page License + * Copyright (C) 2009, H&D Wireless AB All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of H&D Wireless AB may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef PRINTF_STDARG_H +#define PRINTF_STDARG_H +#include + +int printk(const char *format, ...); +int printk_va(char **out, const char *format, va_list args ); +#endif diff --git a/libraries/WiFi/extras/wifi_dnld/src/startup.c b/libraries/WiFi/extras/wifi_dnld/src/startup.c new file mode 100644 index 000000000..fa2a8c01e --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/startup.c @@ -0,0 +1,75 @@ +/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*! \page License + * Copyright (C) 2009, H&D Wireless AB All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of H&D Wireless AB may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#include "startup.h" +#include "pm.h" +#include "intc.h" +#include "board.h" +#include "print_funcs.h" +#include "clocks.h" + + +static void init_exceptions(void) +{ + extern void _evba; + Set_system_register(AVR32_EVBA, (int)&_evba); + Enable_global_exception(); +} + +static void init_hmatrix(void) +{ + union { + unsigned long scfg; + avr32_hmatrix_scfg_t SCFG; + } u_avr32_hmatrix_scfg = { + AVR32_HMATRIX.scfg[AVR32_HMATRIX_SLAVE_FLASH] + }; + u_avr32_hmatrix_scfg.SCFG.defmstr_type = + AVR32_HMATRIX_DEFMSTR_TYPE_LAST_DEFAULT; + AVR32_HMATRIX.scfg[AVR32_HMATRIX_SLAVE_FLASH] = + u_avr32_hmatrix_scfg.scfg; +} + +static void init_interrupts(void) +{ + INTC_init_interrupts(); + + //initExtInt(); + + Enable_global_interrupt(); +} + +void startup_init(void) +{ + init_exceptions(); + init_hmatrix(); + init_sys_clocks(); + init_interrupts(); + init_dbg_rs232(FPBA_HZ); +} diff --git a/libraries/WiFi/extras/wifi_dnld/src/startup.h b/libraries/WiFi/extras/wifi_dnld/src/startup.h new file mode 100644 index 000000000..a9adc60ba --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/startup.h @@ -0,0 +1,35 @@ +/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ + +/*! \page License + * Copyright (C) 2009, H&D Wireless AB All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of H&D Wireless AB may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef STARTUP_H +#define STARTUP_H + +void startup_init(void); + +#endif diff --git a/libraries/WiFi/extras/wifi_dnld/src/wl_fw.h b/libraries/WiFi/extras/wifi_dnld/src/wl_fw.h new file mode 100644 index 000000000..5be5f3762 --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/src/wl_fw.h @@ -0,0 +1,19287 @@ +/* + * Programming interface for wl_api. + * Copyright (C) 2010 HD Wireless AB + * + * You should have received a copy of the license along with this library. + */ + +#ifndef WITHOUT_STDINT +#include +#endif +const uint8_t fw_buf[154188] = { + 0x10, 0x61, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x10, 0x61, 0x04, 0x00, + 0x38, 0x61, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x20, 0x61, 0x04, 0x00, + 0x30, 0x61, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x30, 0x61, 0x04, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x61, 0x04, 0x00, + 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xee, 0xee, + 0xee, 0xee, 0x18, 0xf0, 0x9f, 0xe5, 0x18, 0xf0, + 0x9f, 0xe5, 0x18, 0xf0, 0x9f, 0xe5, 0x18, 0xf0, + 0x9f, 0xe5, 0x00, 0x00, 0xa0, 0xe1, 0x18, 0xf0, + 0x9f, 0xe5, 0x18, 0xf0, 0x9f, 0xe5, 0x44, 0x00, + 0x00, 0x00, 0xb4, 0x08, 0x00, 0x00, 0xb4, 0x08, + 0x00, 0x00, 0xb4, 0x08, 0x00, 0x00, 0xb4, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe4, 0x08, + 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x00, 0x00, + 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0f, 0xe1, 0x1f, 0x00, 0xc0, 0xe3, + 0x13, 0x00, 0x80, 0xe3, 0xc0, 0x00, 0x80, 0xe3, + 0x00, 0xf0, 0x2f, 0xe1, 0x1c, 0xf0, 0x9f, 0xe5, + 0x3d, 0x02, 0x00, 0xeb, 0x5a, 0x02, 0x00, 0xeb, + 0x8d, 0x02, 0x00, 0xeb, 0x01, 0x00, 0x8f, 0xe2, + 0x10, 0xff, 0x2f, 0xe1, 0x41, 0xf0, 0xde, 0xfb, + 0x01, 0xf0, 0xdc, 0xfd, 0x3c, 0x00, 0x78, 0x00, + 0x00, 0x00, 0xfe, 0xe7, 0x00, 0x00, 0x5c, 0x00, + 0x00, 0x00, 0x78, 0x47, 0xc0, 0x46, 0x01, 0x00, + 0x00, 0xea, 0x78, 0x47, 0xc0, 0x46, 0x17, 0x00, + 0x00, 0xea, 0x8c, 0x11, 0x9f, 0xe5, 0x00, 0x20, + 0x91, 0xe5, 0x00, 0x30, 0x0f, 0xe1, 0x84, 0x11, + 0x9f, 0xe5, 0xfd, 0x20, 0xa1, 0xe8, 0x80, 0x01, + 0x9f, 0xe5, 0x80, 0x21, 0x9f, 0xe5, 0x01, 0x20, + 0x42, 0xe0, 0x0d, 0x00, 0x40, 0xe0, 0x3c, 0x00, + 0xb4, 0x00, 0x00, 0x00, 0x02, 0x00, 0x50, 0xe1, + 0x28, 0x00, 0x00, 0xaa, 0x68, 0x01, 0x9f, 0xe5, + 0x0d, 0x00, 0x50, 0xe1, 0x02, 0x00, 0x00, 0xba, + 0x04, 0x20, 0x10, 0xe4, 0x04, 0x20, 0x81, 0xe4, + 0xfa, 0xff, 0xff, 0xea, 0x58, 0x11, 0x9f, 0xe5, + 0x58, 0x01, 0x9f, 0xe5, 0x00, 0x00, 0x81, 0xe5, + 0x3c, 0x11, 0x9f, 0xe5, 0x50, 0x01, 0x9f, 0xe5, + 0x00, 0x00, 0x81, 0xe5, 0x1e, 0xff, 0x2f, 0xe1, + 0x3c, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x48, 0x11, + 0x9f, 0xe5, 0x00, 0x00, 0x91, 0xe5, 0x24, 0x11, + 0x9f, 0xe5, 0x00, 0x00, 0x81, 0xe5, 0x2c, 0x11, + 0x9f, 0xe5, 0x38, 0x01, 0x9f, 0xe5, 0x00, 0x00, + 0x81, 0xe5, 0x1e, 0xff, 0x2f, 0xe1, 0x74, 0x02, + 0x00, 0xeb, 0x10, 0x01, 0x9f, 0xe5, 0x28, 0x11, + 0x9f, 0xe5, 0x04, 0x20, 0x91, 0xe4, 0x04, 0x20, + 0x00, 0xe4, 0x04, 0x21, 0x9f, 0xe5, 0x02, 0x00, + 0x51, 0xe1, 0x3c, 0x00, 0x2c, 0x01, 0x00, 0x00, + 0xfa, 0xff, 0xff, 0x1a, 0xf0, 0x10, 0x9f, 0xe5, + 0xfd, 0x20, 0xb1, 0xe8, 0x03, 0xf0, 0x2f, 0xe1, + 0xe0, 0x10, 0x9f, 0xe5, 0x00, 0x20, 0x81, 0xe5, + 0xe8, 0x10, 0x9f, 0xe5, 0xf4, 0x20, 0x9f, 0xe5, + 0x00, 0x20, 0x81, 0xe5, 0x02, 0x10, 0x80, 0xe2, + 0x00, 0x00, 0x20, 0xe0, 0x01, 0x00, 0x40, 0xe2, + 0x11, 0xff, 0x2f, 0xe1, 0x01, 0x00, 0x8f, 0xe2, + 0x10, 0xff, 0x2f, 0xe1, 0x3c, 0x00, 0x68, 0x01, + 0x00, 0x00, 0x01, 0xf0, 0x9c, 0xf8, 0x78, 0x47, + 0x00, 0x00, 0x01, 0x00, 0x8f, 0xe2, 0x10, 0xff, + 0x2f, 0xe1, 0x01, 0xf0, 0x94, 0xf8, 0x78, 0x47, + 0x00, 0x00, 0x03, 0x00, 0x2d, 0xe9, 0x00, 0x10, + 0x0f, 0xe1, 0x00, 0x10, 0x80, 0xe5, 0xb8, 0x10, + 0x9f, 0xe5, 0x04, 0x10, 0x80, 0xe5, 0x00, 0x10, + 0xa0, 0xe1, 0x10, 0x00, 0x80, 0xe2, 0xfc, 0x1f, + 0xa0, 0xe8, 0x00, 0x20, 0xa0, 0xe1, 0x3c, 0x00, + 0xa4, 0x01, 0x00, 0x00, 0x01, 0x30, 0xa0, 0xe1, + 0x03, 0x00, 0xbd, 0xe8, 0x08, 0x00, 0x83, 0xe5, + 0x0c, 0x10, 0x83, 0xe5, 0xd3, 0x00, 0xa0, 0xe3, + 0x00, 0xf0, 0x21, 0xe1, 0x00, 0x60, 0xa2, 0xe8, + 0x00, 0x10, 0x4f, 0xe1, 0x04, 0x10, 0x82, 0xe4, + 0xd2, 0x00, 0xa0, 0xe3, 0x00, 0xf0, 0x21, 0xe1, + 0x00, 0x60, 0xa2, 0xe8, 0x00, 0x10, 0x4f, 0xe1, + 0x04, 0x10, 0x82, 0xe4, 0xd1, 0x00, 0xa0, 0xe3, + 0x3c, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x00, 0xf0, + 0x21, 0xe1, 0x00, 0x7f, 0xa2, 0xe8, 0x00, 0x10, + 0x4f, 0xe1, 0x04, 0x10, 0x82, 0xe4, 0xd7, 0x00, + 0xa0, 0xe3, 0x00, 0xf0, 0x21, 0xe1, 0x00, 0x60, + 0xa2, 0xe8, 0x00, 0x10, 0x4f, 0xe1, 0x04, 0x10, + 0x82, 0xe4, 0xdb, 0x00, 0xa0, 0xe3, 0x00, 0xf0, + 0x21, 0xe1, 0x00, 0x60, 0xa2, 0xe8, 0x00, 0x10, + 0x4f, 0xe1, 0x00, 0x10, 0x82, 0xe5, 0x00, 0x00, + 0x93, 0xe5, 0x3c, 0x00, 0x1c, 0x02, 0x00, 0x00, + 0x00, 0xf0, 0x2f, 0xe1, 0x1e, 0xff, 0x2f, 0xe1, + 0x20, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x00, + 0x20, 0xee, 0x01, 0x00, 0xd8, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0xf0, 0x9f, 0xe5, + 0x10, 0x01, 0x00, 0x00, 0x08, 0x03, 0x00, 0x00, + 0xee, 0xee, 0xee, 0xee, 0x24, 0x03, 0x00, 0x00, + 0x20, 0x02, 0x00, 0x00, 0xb0, 0xb5, 0x04, 0x1c, + 0x63, 0x1c, 0x0b, 0x4d, 0x3c, 0x00, 0x58, 0x02, + 0x00, 0x00, 0x01, 0xd1, 0x6c, 0x69, 0x10, 0xe0, + 0x00, 0xf0, 0x6c, 0xfb, 0x09, 0x48, 0xff, 0xf7, + 0x0c, 0xff, 0xec, 0x60, 0x08, 0x4a, 0x51, 0x68, + 0x50, 0x68, 0x88, 0x42, 0xfc, 0xd0, 0x02, 0x20, + 0x28, 0x70, 0x01, 0x21, 0x8a, 0x20, 0x01, 0xf0, + 0x12, 0xf8, 0x20, 0x1c, 0xb0, 0xbd, 0x30, 0x00, + 0x07, 0x00, 0x51, 0x02, 0x00, 0x00, 0x00, 0x03, + 0x07, 0x00, 0xb0, 0xb5, 0x05, 0x1c, 0x3c, 0x00, + 0x94, 0x02, 0x00, 0x00, 0x00, 0x24, 0x00, 0xf0, + 0x50, 0xfb, 0x14, 0x48, 0xff, 0xf7, 0xf0, 0xfe, + 0x13, 0x49, 0x14, 0x48, 0xc1, 0x60, 0x01, 0x21, + 0x13, 0x4a, 0x49, 0x03, 0x91, 0x60, 0x13, 0x49, + 0xca, 0x78, 0x08, 0x23, 0x9a, 0x43, 0xca, 0x70, + 0xca, 0x78, 0x04, 0x23, 0x1a, 0x43, 0xca, 0x70, + 0x6b, 0x1c, 0x0d, 0xd0, 0x0e, 0x4b, 0x5a, 0x68, + 0x59, 0x68, 0x91, 0x42, 0xfc, 0xd0, 0xbe, 0x21, + 0x3c, 0x00, 0xd0, 0x02, 0x00, 0x00, 0x19, 0x73, + 0x19, 0x7a, 0x11, 0x22, 0x91, 0x43, 0x19, 0x72, + 0x19, 0x7a, 0xc9, 0x07, 0xfc, 0xd4, 0x02, 0x21, + 0x01, 0x70, 0xff, 0xf7, 0xd0, 0xfe, 0x20, 0x1c, + 0xb0, 0xbd, 0x91, 0x02, 0x00, 0x00, 0xff, 0xff, + 0xff, 0x00, 0x30, 0x00, 0x07, 0x00, 0x00, 0x10, + 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x03, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x0c, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x48, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x84, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, + 0x08, 0x47, 0x10, 0x47, 0x18, 0x47, 0x20, 0x47, + 0x28, 0x47, 0x30, 0x47, 0x38, 0x47, 0x10, 0xb5, + 0x04, 0x1c, 0x10, 0x1c, 0x00, 0xf0, 0x23, 0xf9, + 0x03, 0xc4, 0x10, 0xbc, 0x08, 0xbc, 0x18, 0x47, + 0x00, 0x00, 0x3c, 0x00, 0xfc, 0x03, 0x00, 0x00, + 0x10, 0xb4, 0x04, 0x2a, 0x0e, 0xd3, 0x03, 0x1c, + 0x0b, 0x43, 0x9b, 0x07, 0x0a, 0xd1, 0x08, 0xc8, + 0x10, 0xc9, 0xa3, 0x42, 0x02, 0xd1, 0x04, 0x3a, + 0x04, 0x2a, 0xf8, 0xd2, 0xa3, 0x42, 0x01, 0xd0, + 0x04, 0x38, 0x04, 0x39, 0x00, 0x2a, 0x02, 0xd1, + 0x00, 0x20, 0x10, 0xbc, 0x70, 0x47, 0xd3, 0x07, + 0x01, 0xd5, 0x01, 0x32, 0x05, 0xe0, 0x03, 0x78, + 0x0c, 0x78, 0x01, 0x31, 0x3c, 0x00, 0x38, 0x04, + 0x00, 0x00, 0x01, 0x30, 0xa3, 0x42, 0x07, 0xd1, + 0x03, 0x78, 0x0c, 0x78, 0x01, 0x31, 0x01, 0x30, + 0xa3, 0x42, 0x01, 0xd1, 0x02, 0x3a, 0xf1, 0xd1, + 0x18, 0x1b, 0xe9, 0xe7, 0x00, 0x00, 0x78, 0x47, + 0x00, 0x00, 0x00, 0x20, 0xa0, 0xe3, 0x04, 0x00, + 0x51, 0xe3, 0x08, 0x00, 0x00, 0x3a, 0x03, 0xc0, + 0x10, 0xe2, 0x0d, 0x00, 0x00, 0x0a, 0x04, 0xc0, + 0x6c, 0xe2, 0x02, 0x00, 0x5c, 0xe3, 0x3c, 0x00, + 0x74, 0x04, 0x00, 0x00, 0x01, 0x20, 0xc0, 0xe4, + 0x01, 0x20, 0xc0, 0xa4, 0x01, 0x20, 0xc0, 0xc4, + 0x0c, 0x10, 0x41, 0xe0, 0x06, 0x00, 0x00, 0xea, + 0x81, 0xcf, 0xb0, 0xe1, 0x01, 0x20, 0xc0, 0x24, + 0x01, 0x20, 0xc0, 0x24, 0x01, 0x20, 0xc0, 0x44, + 0x1e, 0xff, 0x2f, 0xe1, 0x78, 0x47, 0x00, 0x00, + 0x00, 0x20, 0xa0, 0xe3, 0x00, 0x40, 0x2d, 0xe9, + 0x02, 0x30, 0xa0, 0xe1, 0x02, 0xc0, 0xa0, 0xe1, + 0x3c, 0x00, 0xb0, 0x04, 0x00, 0x00, 0x02, 0xe0, + 0xa0, 0xe1, 0x20, 0x10, 0x51, 0xe2, 0x0c, 0x50, + 0xa0, 0x28, 0x0c, 0x50, 0xa0, 0x28, 0x20, 0x10, + 0x51, 0x22, 0xfb, 0xff, 0xff, 0x2a, 0x01, 0x1e, + 0xb0, 0xe1, 0x0c, 0x50, 0xa0, 0x28, 0x0c, 0x00, + 0xa0, 0x48, 0x00, 0x40, 0xbd, 0xe8, 0x01, 0x11, + 0xb0, 0xe1, 0x04, 0x20, 0x80, 0x24, 0x1e, 0xff, + 0x2f, 0x01, 0x01, 0x20, 0xc0, 0x44, 0x01, 0x20, + 0xc0, 0x44, 0x3c, 0x00, 0xec, 0x04, 0x00, 0x00, + 0x40, 0x04, 0x11, 0xe3, 0x01, 0x20, 0xc0, 0x14, + 0x1e, 0xff, 0x2f, 0xe1, 0x78, 0x47, 0x00, 0x00, + 0x03, 0x00, 0x52, 0xe3, 0x3e, 0x00, 0x00, 0x9a, + 0x03, 0xc0, 0x10, 0xe2, 0x08, 0x00, 0x00, 0x0a, + 0x01, 0x30, 0xd1, 0xe4, 0x02, 0x00, 0x5c, 0xe3, + 0x0c, 0x20, 0x82, 0xe0, 0x01, 0xc0, 0xd1, 0x94, + 0x01, 0x30, 0xc0, 0xe4, 0x01, 0x30, 0xd1, 0x34, + 0x04, 0x20, 0x42, 0xe2, 0x3c, 0x00, 0x28, 0x05, + 0x00, 0x00, 0x01, 0xc0, 0xc0, 0x94, 0x01, 0x30, + 0xc0, 0x34, 0x03, 0x30, 0x11, 0xe2, 0x1e, 0x00, + 0x00, 0x0a, 0x04, 0x20, 0x52, 0xe2, 0x2f, 0x00, + 0x00, 0x3a, 0x03, 0xc0, 0x31, 0xe7, 0x02, 0x00, + 0x53, 0xe3, 0x08, 0x00, 0x00, 0x0a, 0x0f, 0x00, + 0x00, 0x8a, 0x2c, 0x34, 0xa0, 0xe1, 0x04, 0xc0, + 0xb1, 0xe5, 0x04, 0x20, 0x52, 0xe2, 0x0c, 0x3c, + 0x83, 0xe1, 0x04, 0x30, 0x80, 0xe4, 0x3c, 0x00, + 0x64, 0x05, 0x00, 0x00, 0xf9, 0xff, 0xff, 0x2a, + 0x01, 0x10, 0x81, 0xe2, 0x23, 0x00, 0x00, 0xea, + 0x2c, 0x38, 0xa0, 0xe1, 0x04, 0xc0, 0xb1, 0xe5, + 0x04, 0x20, 0x52, 0xe2, 0x0c, 0x38, 0x83, 0xe1, + 0x04, 0x30, 0x80, 0xe4, 0xf9, 0xff, 0xff, 0x2a, + 0x02, 0x10, 0x81, 0xe2, 0x1b, 0x00, 0x00, 0xea, + 0x2c, 0x3c, 0xa0, 0xe1, 0x04, 0xc0, 0xb1, 0xe5, + 0x04, 0x20, 0x52, 0xe2, 0x0c, 0x34, 0x83, 0xe1, + 0x3c, 0x00, 0xa0, 0x05, 0x00, 0x00, 0x04, 0x30, + 0x80, 0xe4, 0xf9, 0xff, 0xff, 0x2a, 0x03, 0x10, + 0x81, 0xe2, 0x13, 0x00, 0x00, 0xea, 0x78, 0x47, + 0x00, 0x00, 0x10, 0x40, 0x2d, 0xe9, 0x20, 0x20, + 0x52, 0xe2, 0x05, 0x00, 0x00, 0x3a, 0x18, 0x50, + 0xb1, 0x28, 0x18, 0x50, 0xa0, 0x28, 0x18, 0x50, + 0xb1, 0x28, 0x18, 0x50, 0xa0, 0x28, 0x20, 0x20, + 0x52, 0x22, 0xf9, 0xff, 0xff, 0x2a, 0x02, 0xce, + 0xb0, 0xe1, 0x3c, 0x00, 0xdc, 0x05, 0x00, 0x00, + 0x18, 0x50, 0xb1, 0x28, 0x18, 0x50, 0xa0, 0x28, + 0x18, 0x00, 0xb1, 0x48, 0x18, 0x00, 0xa0, 0x48, + 0x10, 0x40, 0xbd, 0xe8, 0x02, 0xcf, 0xb0, 0xe1, + 0x04, 0x30, 0x91, 0x24, 0x04, 0x30, 0x80, 0x24, + 0x1e, 0xff, 0x2f, 0x01, 0x82, 0x2f, 0xb0, 0xe1, + 0x01, 0x20, 0xd1, 0x44, 0x01, 0x30, 0xd1, 0x24, + 0x01, 0xc0, 0xd1, 0x24, 0x01, 0x20, 0xc0, 0x44, + 0x01, 0x30, 0xc0, 0x24, 0x3c, 0x00, 0x18, 0x06, + 0x00, 0x00, 0x01, 0xc0, 0xc0, 0x24, 0x1e, 0xff, + 0x2f, 0xe1, 0x78, 0x47, 0x00, 0x00, 0xff, 0x30, + 0x01, 0xe2, 0x02, 0x10, 0xa0, 0xe1, 0x03, 0x24, + 0x83, 0xe1, 0x02, 0x28, 0x82, 0xe1, 0x88, 0xff, + 0xff, 0xea, 0x78, 0x47, 0x00, 0x00, 0x80, 0x24, + 0x10, 0xe2, 0x00, 0x00, 0x60, 0x42, 0x41, 0x30, + 0x32, 0xe0, 0x00, 0x10, 0x61, 0x22, 0xa1, 0xc1, + 0x70, 0xe0, 0x20, 0x00, 0x00, 0x3a, 0x3c, 0x00, + 0x54, 0x06, 0x00, 0x00, 0x21, 0xc4, 0x70, 0xe0, + 0x0f, 0x00, 0x00, 0x3a, 0x00, 0x04, 0xa0, 0xe1, + 0xff, 0x24, 0x82, 0xe3, 0x21, 0xc2, 0x70, 0xe0, + 0x17, 0x00, 0x00, 0x3a, 0x21, 0xc4, 0x70, 0xe0, + 0x09, 0x00, 0x00, 0x3a, 0x00, 0x04, 0xa0, 0xe1, + 0xff, 0x28, 0x82, 0xe3, 0x21, 0xc4, 0x70, 0xe0, + 0x00, 0x04, 0xa0, 0x21, 0xff, 0x2c, 0x82, 0x23, + 0x21, 0xc2, 0x70, 0xe0, 0x0e, 0x00, 0x00, 0x3a, + 0x3c, 0x00, 0x90, 0x06, 0x00, 0x00, 0x00, 0xc0, + 0x70, 0xe2, 0x83, 0x00, 0x00, 0x2a, 0x20, 0x04, + 0xa0, 0x21, 0xa1, 0xc3, 0x70, 0xe0, 0x80, 0x13, + 0x41, 0x20, 0x02, 0x20, 0xa2, 0xe0, 0x21, 0xc3, + 0x70, 0xe0, 0x00, 0x13, 0x41, 0x20, 0x02, 0x20, + 0xa2, 0xe0, 0xa1, 0xc2, 0x70, 0xe0, 0x80, 0x12, + 0x41, 0x20, 0x02, 0x20, 0xa2, 0xe0, 0x21, 0xc2, + 0x70, 0xe0, 0x00, 0x12, 0x41, 0x20, 0x02, 0x20, + 0xa2, 0xe0, 0x3c, 0x00, 0xcc, 0x06, 0x00, 0x00, + 0xa1, 0xc1, 0x70, 0xe0, 0x80, 0x11, 0x41, 0x20, + 0x02, 0x20, 0xa2, 0xe0, 0x21, 0xc1, 0x70, 0xe0, + 0x00, 0x11, 0x41, 0x20, 0x02, 0x20, 0xa2, 0xe0, + 0xa1, 0xc0, 0x70, 0xe0, 0x80, 0x10, 0x41, 0x20, + 0x02, 0x20, 0xa2, 0xe0, 0x01, 0xc0, 0x70, 0xe0, + 0x00, 0x10, 0x41, 0x20, 0x02, 0x20, 0xb2, 0xe0, + 0xe5, 0xff, 0xff, 0x2a, 0xc3, 0x0f, 0x32, 0xe0, + 0xa3, 0x0f, 0x80, 0xe0, 0x3c, 0x00, 0x08, 0x07, + 0x00, 0x00, 0x00, 0x10, 0x61, 0x22, 0x1e, 0xff, + 0x2f, 0xe1, 0x78, 0x47, 0x00, 0x00, 0x00, 0x20, + 0xa0, 0xe3, 0xa1, 0xc1, 0x70, 0xe0, 0x20, 0x00, + 0x00, 0x3a, 0x21, 0xc4, 0x70, 0xe0, 0x0f, 0x00, + 0x00, 0x3a, 0x00, 0x04, 0xa0, 0xe1, 0xff, 0x24, + 0x82, 0xe3, 0x21, 0xc2, 0x70, 0xe0, 0x17, 0x00, + 0x00, 0x3a, 0x21, 0xc4, 0x70, 0xe0, 0x09, 0x00, + 0x00, 0x3a, 0x00, 0x04, 0xa0, 0xe1, 0x3c, 0x00, + 0x44, 0x07, 0x00, 0x00, 0xff, 0x28, 0x82, 0xe3, + 0x21, 0xc4, 0x70, 0xe0, 0x00, 0x04, 0xa0, 0x21, + 0xff, 0x2c, 0x82, 0x23, 0x21, 0xc2, 0x70, 0xe0, + 0x0e, 0x00, 0x00, 0x3a, 0x00, 0xc0, 0x70, 0xe2, + 0x50, 0x00, 0x00, 0x2a, 0x20, 0x04, 0xa0, 0x21, + 0xa1, 0xc3, 0x70, 0xe0, 0x80, 0x13, 0x41, 0x20, + 0x02, 0x20, 0xa2, 0xe0, 0x21, 0xc3, 0x70, 0xe0, + 0x00, 0x13, 0x41, 0x20, 0x02, 0x20, 0xa2, 0xe0, + 0x3c, 0x00, 0x80, 0x07, 0x00, 0x00, 0xa1, 0xc2, + 0x70, 0xe0, 0x80, 0x12, 0x41, 0x20, 0x02, 0x20, + 0xa2, 0xe0, 0x21, 0xc2, 0x70, 0xe0, 0x00, 0x12, + 0x41, 0x20, 0x02, 0x20, 0xa2, 0xe0, 0xa1, 0xc1, + 0x70, 0xe0, 0x80, 0x11, 0x41, 0x20, 0x02, 0x20, + 0xa2, 0xe0, 0x21, 0xc1, 0x70, 0xe0, 0x00, 0x11, + 0x41, 0x20, 0x02, 0x20, 0xa2, 0xe0, 0xa1, 0xc0, + 0x70, 0xe0, 0x80, 0x10, 0x41, 0x20, 0x02, 0x20, + 0xa2, 0xe0, 0x3c, 0x00, 0xbc, 0x07, 0x00, 0x00, + 0x01, 0xc0, 0x70, 0xe0, 0x00, 0x10, 0x41, 0x20, + 0x02, 0x20, 0xb2, 0xe0, 0xe5, 0xff, 0xff, 0x2a, + 0x02, 0x00, 0xa0, 0xe1, 0x1e, 0xff, 0x2f, 0xe1, + 0x78, 0x47, 0x00, 0x00, 0x0a, 0x10, 0x40, 0xe2, + 0x20, 0x01, 0x40, 0xe0, 0x20, 0x02, 0x80, 0xe0, + 0x20, 0x04, 0x80, 0xe0, 0x20, 0x08, 0x80, 0xe0, + 0xa0, 0x01, 0xa0, 0xe1, 0x00, 0x21, 0x80, 0xe0, + 0x82, 0x10, 0x51, 0xe0, 0x3c, 0x00, 0xf8, 0x07, + 0x00, 0x00, 0x01, 0x00, 0x80, 0x52, 0x0a, 0x10, + 0x81, 0x42, 0x1e, 0xff, 0x2f, 0xe1, 0x30, 0xb4, + 0x44, 0x1c, 0x81, 0x07, 0x08, 0xd0, 0x01, 0x78, + 0x01, 0x30, 0x00, 0x29, 0x02, 0xd1, 0x00, 0x1b, + 0x30, 0xbc, 0x70, 0x47, 0x81, 0x07, 0xf6, 0xd1, + 0x0b, 0x4a, 0xd5, 0x01, 0x02, 0xc8, 0x8b, 0x1a, + 0x8b, 0x43, 0x2b, 0x40, 0xfa, 0xd0, 0x00, 0x1b, + 0x0a, 0x06, 0x01, 0xd1, 0x03, 0x38, 0x3c, 0x00, + 0x34, 0x08, 0x00, 0x00, 0xef, 0xe7, 0x0a, 0x04, + 0x12, 0x0e, 0x01, 0xd1, 0x02, 0x38, 0xea, 0xe7, + 0x09, 0x02, 0x09, 0x0e, 0xe7, 0xd1, 0x01, 0x38, + 0xe5, 0xe7, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, + 0xf0, 0xb4, 0x03, 0x1c, 0x04, 0x1c, 0x0c, 0x43, + 0xa4, 0x07, 0x0c, 0xd1, 0x10, 0x4d, 0xef, 0x01, + 0x02, 0xe0, 0x04, 0x31, 0x04, 0x3a, 0x10, 0xc3, + 0x04, 0x2a, 0x04, 0xd3, 0x0c, 0x68, 0x66, 0x1b, + 0x3c, 0x00, 0x70, 0x08, 0x00, 0x00, 0xa6, 0x43, + 0x3e, 0x40, 0xf5, 0xd0, 0x00, 0x2a, 0x07, 0xd0, + 0x0c, 0x78, 0x01, 0x31, 0x1c, 0x70, 0x01, 0x33, + 0x00, 0x2c, 0x03, 0xd0, 0x01, 0x3a, 0xf7, 0xd1, + 0xf0, 0xbc, 0x70, 0x47, 0x01, 0x2a, 0xfb, 0xd9, + 0x51, 0x1e, 0x00, 0x22, 0x1a, 0x70, 0x01, 0x33, + 0x01, 0x39, 0xfb, 0xd1, 0xf4, 0xe7, 0x01, 0x01, + 0x01, 0x01, 0x78, 0x47, 0x00, 0x00, 0x02, 0x00, + 0xa0, 0xe3, 0x3c, 0x00, 0xac, 0x08, 0x00, 0x00, + 0x02, 0x10, 0xa0, 0xe3, 0x2e, 0xfe, 0xff, 0xea, + 0x1f, 0x40, 0x2d, 0xe9, 0x00, 0x00, 0x0f, 0xe1, + 0xc0, 0x00, 0x80, 0xe3, 0x00, 0xf0, 0x2f, 0xe1, + 0x81, 0x00, 0xa0, 0xe3, 0x02, 0x10, 0xa0, 0xe3, + 0x01, 0x20, 0x8f, 0xe2, 0x12, 0xff, 0x2f, 0xe1, + 0x00, 0xf0, 0xe6, 0xfc, 0x78, 0x47, 0x00, 0x00, + 0x1f, 0x40, 0xbd, 0xe8, 0xfe, 0xff, 0xff, 0xea, + 0x1f, 0x50, 0x2d, 0xe9, 0x3c, 0x00, 0xe8, 0x08, + 0x00, 0x00, 0x01, 0x00, 0x8f, 0xe2, 0x10, 0xff, + 0x2f, 0xe1, 0x00, 0xf0, 0x40, 0xfb, 0x78, 0x47, + 0x00, 0x00, 0x1f, 0x50, 0xbd, 0xe8, 0x04, 0xf0, + 0x5e, 0xe2, 0x1f, 0x50, 0x2d, 0xe9, 0x01, 0x00, + 0x8f, 0xe2, 0x10, 0xff, 0x2f, 0xe1, 0x00, 0xf0, + 0x18, 0xfb, 0x78, 0x47, 0x00, 0x00, 0x1f, 0x50, + 0xbd, 0xe8, 0x04, 0xf0, 0x5e, 0xe2, 0x00, 0xbd, + 0x01, 0xb5, 0x00, 0xa0, 0x00, 0x47, 0x3c, 0x00, + 0x24, 0x09, 0x00, 0x00, 0x00, 0x30, 0x0f, 0xe1, + 0xc0, 0x30, 0xc3, 0xe3, 0x03, 0xf0, 0x21, 0xe1, + 0x01, 0x00, 0x8f, 0xe2, 0x10, 0xff, 0x2f, 0xe1, + 0x01, 0xbd, 0x01, 0xb5, 0x00, 0xa0, 0x00, 0x47, + 0x00, 0x30, 0x0f, 0xe1, 0xc0, 0x30, 0x83, 0xe3, + 0x03, 0xf0, 0x21, 0xe1, 0x01, 0x00, 0x8f, 0xe2, + 0x10, 0xff, 0x2f, 0xe1, 0x01, 0xbd, 0x00, 0x00, + 0x18, 0x00, 0x9f, 0xe5, 0x04, 0x10, 0x90, 0xe4, + 0x3c, 0x00, 0x60, 0x09, 0x00, 0x00, 0x00, 0x00, + 0x51, 0xe3, 0x02, 0x00, 0x00, 0x0a, 0x04, 0x20, + 0x90, 0xe4, 0x00, 0x20, 0x81, 0xe5, 0xf9, 0xff, + 0xff, 0xea, 0x0e, 0xf0, 0xa0, 0xe1, 0x7c, 0x09, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, + 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0xd8, 0x03, + 0x00, 0x00, 0xd8, 0x03, 0x00, 0x00, 0xd8, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x9c, 0x09, 0x00, 0x00, + 0x44, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, + 0x44, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, + 0x00, 0x80, 0x01, 0x00, 0x10, 0x8e, 0x01, 0x00, + 0x10, 0x8e, 0x01, 0x00, 0x88, 0xf8, 0x01, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x10, 0x04, 0x00, + 0xc4, 0x33, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0e, 0x50, 0xa0, 0xe1, + 0x58, 0x40, 0x9f, 0xe5, 0x3c, 0x00, 0xd8, 0x09, + 0x00, 0x00, 0x04, 0x00, 0x94, 0xe4, 0x01, 0x00, + 0x50, 0xe3, 0x05, 0xf0, 0xa0, 0x01, 0x04, 0x10, + 0x94, 0xe4, 0x04, 0x20, 0x94, 0xe4, 0x03, 0x00, + 0x00, 0xeb, 0x04, 0x00, 0x94, 0xe4, 0x04, 0x10, + 0x94, 0xe4, 0x07, 0x00, 0x00, 0xeb, 0xf5, 0xff, + 0xff, 0xea, 0x01, 0x00, 0x50, 0xe1, 0x0e, 0xf0, + 0xa0, 0x01, 0x02, 0x00, 0x51, 0xe1, 0x04, 0x30, + 0x90, 0x14, 0x04, 0x30, 0x81, 0x14, 0x3c, 0x00, + 0x14, 0x0a, 0x00, 0x00, 0xfb, 0xff, 0xff, 0x1a, + 0x0e, 0xf0, 0xa0, 0xe1, 0x14, 0x20, 0x9f, 0xe5, + 0x00, 0x20, 0x92, 0xe5, 0x01, 0x00, 0x50, 0xe1, + 0x04, 0x20, 0x80, 0x14, 0xfc, 0xff, 0xff, 0x1a, + 0x0e, 0xf0, 0xa0, 0xe1, 0x80, 0x09, 0x00, 0x00, + 0xcc, 0x09, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, + 0x20, 0xe6, 0x01, 0x00, 0x13, 0x00, 0x00, 0x00, + 0x53, 0x56, 0x43, 0x5f, 0x00, 0x04, 0x00, 0x00, + 0x3c, 0x00, 0x50, 0x0a, 0x00, 0x00, 0x20, 0xee, + 0x01, 0x00, 0x12, 0x00, 0x00, 0x00, 0x49, 0x52, + 0x51, 0x5f, 0x00, 0x02, 0x00, 0x00, 0x20, 0xf2, + 0x01, 0x00, 0x11, 0x00, 0x00, 0x00, 0x46, 0x49, + 0x51, 0x5f, 0x80, 0x00, 0x00, 0x00, 0x20, 0xf4, + 0x01, 0x00, 0x17, 0x00, 0x00, 0x00, 0x41, 0x42, + 0x54, 0x5f, 0x00, 0x00, 0x00, 0x00, 0xa0, 0xf4, + 0x01, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x55, 0x4e, + 0x44, 0x5f, 0x3c, 0x00, 0x8c, 0x0a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xa0, 0xf4, 0x01, 0x00, + 0x1f, 0x00, 0x00, 0x00, 0x55, 0x53, 0x52, 0x5f, + 0x01, 0x00, 0x00, 0x00, 0x0e, 0x50, 0xa0, 0xe1, + 0x00, 0x60, 0x0f, 0xe1, 0x8c, 0x40, 0x9f, 0xe5, + 0x04, 0x10, 0x94, 0xe4, 0x01, 0x00, 0x51, 0xe3, + 0x09, 0x00, 0x00, 0x0a, 0x04, 0x00, 0x94, 0xe4, + 0x01, 0x10, 0x80, 0xe0, 0x03, 0x10, 0xc1, 0xe3, + 0x04, 0x20, 0x94, 0xe4, 0x3c, 0x00, 0xc8, 0x0a, + 0x00, 0x00, 0xc0, 0x20, 0x82, 0xe3, 0x02, 0xf0, + 0x2f, 0xe1, 0x04, 0xd0, 0x41, 0xe2, 0x04, 0x20, + 0x94, 0xe4, 0x13, 0x00, 0x00, 0xeb, 0xf2, 0xff, + 0xff, 0xea, 0x06, 0xf0, 0x2f, 0xe1, 0x05, 0xf0, + 0xa0, 0xe1, 0x0e, 0x50, 0xa0, 0xe1, 0x00, 0x60, + 0x0f, 0xe1, 0x44, 0x40, 0x9f, 0xe5, 0x04, 0x10, + 0x94, 0xe4, 0x01, 0x00, 0x51, 0xe3, 0x08, 0x00, + 0x00, 0x0a, 0x04, 0x00, 0x94, 0xe4, 0x3c, 0x00, + 0x04, 0x0b, 0x00, 0x00, 0x01, 0x10, 0x80, 0xe0, + 0x03, 0x10, 0xc1, 0xe3, 0x04, 0x20, 0x94, 0xe4, + 0xc0, 0x20, 0x82, 0xe3, 0x02, 0xf0, 0x2f, 0xe1, + 0x04, 0xd0, 0x41, 0xe2, 0x04, 0x20, 0x94, 0xe4, + 0xf3, 0xff, 0xff, 0xea, 0x06, 0xf0, 0x2f, 0xe1, + 0x05, 0xf0, 0xa0, 0xe1, 0x01, 0x00, 0x50, 0xe1, + 0x04, 0x20, 0x80, 0x14, 0xfc, 0xff, 0xff, 0x1a, + 0x0e, 0xf0, 0xa0, 0xe1, 0x3c, 0x0a, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0x0b, 0x00, 0x00, 0x01, 0x60, + 0xc0, 0x46, 0xc0, 0x46, 0xc0, 0x46, 0x70, 0x47, + 0x00, 0x00, 0x10, 0x1e, 0x10, 0xee, 0x02, 0x00, + 0x11, 0xe3, 0xfc, 0xff, 0xff, 0x1a, 0x10, 0x0e, + 0x01, 0xee, 0x10, 0x1e, 0x10, 0xee, 0x02, 0x00, + 0x11, 0xe3, 0xfc, 0xff, 0xff, 0x1a, 0x1e, 0xff, + 0x2f, 0xe1, 0x10, 0x1e, 0x10, 0xee, 0x01, 0x00, + 0x11, 0xe3, 0x03, 0x00, 0x00, 0x0a, 0x10, 0x1e, + 0x11, 0xee, 0x3c, 0x00, 0x7c, 0x0b, 0x00, 0x00, + 0x00, 0x10, 0x80, 0xe5, 0x01, 0x00, 0xa0, 0xe3, + 0x1e, 0xff, 0x2f, 0xe1, 0x00, 0x00, 0x20, 0xe0, + 0x1e, 0xff, 0x2f, 0xe1, 0x8d, 0x46, 0x97, 0x46, + 0x78, 0x47, 0xc0, 0x46, 0x78, 0xfd, 0xff, 0xea, + 0x10, 0xb5, 0x04, 0x1c, 0x03, 0x28, 0x01, 0xd9, + 0x00, 0xf0, 0xac, 0xfb, 0x0c, 0x48, 0x40, 0x68, + 0x00, 0x28, 0x00, 0xd0, 0x03, 0x24, 0x0b, 0x48, + 0x01, 0x68, 0x09, 0x48, 0x3c, 0x00, 0xb8, 0x0b, + 0x00, 0x00, 0x12, 0x30, 0x00, 0x29, 0x05, 0xd0, + 0x06, 0x21, 0x61, 0x43, 0x40, 0x5c, 0xc3, 0x00, + 0x18, 0x18, 0x04, 0xe0, 0x06, 0x21, 0x61, 0x43, + 0x40, 0x5c, 0x14, 0x23, 0x58, 0x43, 0x0a, 0x30, + 0x00, 0x06, 0x00, 0x0e, 0x10, 0xbd, 0xd4, 0x7a, + 0x01, 0x00, 0xa8, 0x69, 0x01, 0x00, 0x80, 0xb5, + 0x09, 0x4a, 0x09, 0x49, 0x03, 0x20, 0x00, 0xf0, + 0xf2, 0xf9, 0x08, 0x49, 0x08, 0x20, 0x3c, 0x00, + 0xf4, 0x0b, 0x00, 0x00, 0x08, 0x60, 0x48, 0x60, + 0x07, 0x49, 0x1d, 0x20, 0x01, 0xf0, 0xb2, 0xfc, + 0x06, 0x49, 0x1e, 0x20, 0x01, 0xf0, 0xae, 0xfc, + 0x80, 0xbd, 0x00, 0x00, 0x00, 0x6c, 0x01, 0x00, + 0x31, 0x27, 0x00, 0x00, 0x00, 0x10, 0x07, 0x00, + 0x29, 0x25, 0x00, 0x00, 0x31, 0x25, 0x00, 0x00, + 0x05, 0x49, 0x80, 0xb5, 0x08, 0x20, 0x88, 0x60, + 0x1d, 0x20, 0x01, 0xf0, 0xbf, 0xfc, 0x1e, 0x20, + 0x3c, 0x00, 0x30, 0x0c, 0x00, 0x00, 0x01, 0xf0, + 0xbc, 0xfc, 0x80, 0xbd, 0x00, 0x00, 0x00, 0x10, + 0x07, 0x00, 0x02, 0x1c, 0x08, 0x1c, 0xd1, 0x2a, + 0x80, 0xb5, 0x01, 0xd1, 0x05, 0xf0, 0x19, 0xfc, + 0x80, 0xbd, 0x03, 0x49, 0x80, 0xb5, 0x00, 0x20, + 0x08, 0x80, 0x05, 0x20, 0x05, 0xf0, 0xd5, 0xfb, + 0x80, 0xbd, 0xb0, 0x74, 0x01, 0x00, 0x80, 0xb5, + 0x54, 0x28, 0x01, 0xd1, 0x06, 0xf0, 0xcd, 0xf8, + 0x80, 0xbd, 0x3c, 0x00, 0x6c, 0x0c, 0x00, 0x00, + 0xb0, 0xb5, 0x10, 0x4d, 0x02, 0x1c, 0x01, 0x24, + 0x01, 0x2a, 0x0d, 0x48, 0x29, 0x68, 0x06, 0xd0, + 0xc4, 0x2a, 0x03, 0xd1, 0x6a, 0x68, 0x00, 0x2a, + 0x05, 0xd0, 0xac, 0x60, 0xb0, 0xbd, 0x0e, 0xf0, + 0x89, 0xfb, 0x6c, 0x60, 0x08, 0xe0, 0x00, 0x22, + 0xaa, 0x60, 0x6c, 0x60, 0x0e, 0xf0, 0x82, 0xfb, + 0x00, 0x21, 0x04, 0x20, 0x12, 0xf0, 0xc8, 0xfc, + 0x06, 0xf0, 0xd8, 0xf8, 0x3c, 0x00, 0xa8, 0x0c, + 0x00, 0x00, 0xb0, 0xbd, 0x00, 0x00, 0xc4, 0x60, + 0x01, 0x00, 0xbc, 0x74, 0x01, 0x00, 0x05, 0x4a, + 0x51, 0x69, 0x08, 0x1a, 0x11, 0x69, 0x09, 0x68, + 0x10, 0x31, 0x81, 0x42, 0x01, 0xd8, 0x50, 0x61, + 0x70, 0x47, 0x00, 0x20, 0x70, 0x47, 0x8c, 0x6e, + 0x01, 0x00, 0x01, 0x49, 0x49, 0x68, 0x40, 0x1a, + 0x70, 0x47, 0x8c, 0x6e, 0x01, 0x00, 0x01, 0x48, + 0x40, 0x69, 0x70, 0x47, 0x00, 0x00, 0x3c, 0x00, + 0xe4, 0x0c, 0x00, 0x00, 0x8c, 0x6e, 0x01, 0x00, + 0x02, 0x4a, 0x51, 0x69, 0x08, 0x18, 0x50, 0x61, + 0x70, 0x47, 0x00, 0x00, 0x8c, 0x6e, 0x01, 0x00, + 0x0e, 0x49, 0x0f, 0x48, 0x10, 0xb5, 0x19, 0x22, + 0x92, 0x01, 0x41, 0x60, 0x89, 0x18, 0xc1, 0x60, + 0x0b, 0x49, 0x00, 0x22, 0x0c, 0x31, 0x01, 0x60, + 0x0a, 0x49, 0x82, 0x60, 0x09, 0x68, 0x01, 0x23, + 0xdb, 0x03, 0xc9, 0x18, 0x08, 0x4c, 0x41, 0x61, + 0x3c, 0x00, 0x20, 0x0d, 0x00, 0x00, 0x21, 0x68, + 0x00, 0x29, 0x02, 0xd0, 0x07, 0x49, 0x01, 0x61, + 0x01, 0xe0, 0x00, 0xf0, 0x0c, 0xf8, 0x22, 0x60, + 0x10, 0xbd, 0x44, 0xdc, 0x01, 0x00, 0x8c, 0x6e, + 0x01, 0x00, 0xc8, 0x09, 0x00, 0x00, 0x34, 0x58, + 0x01, 0x00, 0xc4, 0x09, 0x00, 0x00, 0x01, 0x48, + 0x02, 0x49, 0x08, 0x61, 0x70, 0x47, 0xc8, 0x09, + 0x00, 0x00, 0x8c, 0x6e, 0x01, 0x00, 0x08, 0x28, + 0x05, 0xd2, 0x3c, 0x00, 0x5c, 0x0d, 0x00, 0x00, + 0x03, 0x4b, 0x80, 0x00, 0x19, 0x50, 0x02, 0x49, + 0x20, 0x31, 0x0a, 0x50, 0x70, 0x47, 0x00, 0x00, + 0x64, 0x6d, 0x01, 0x00, 0x70, 0xb5, 0x06, 0x1c, + 0x0d, 0x48, 0x0d, 0x1c, 0x00, 0x68, 0x14, 0x1c, + 0x00, 0x28, 0x03, 0xd1, 0x20, 0x1c, 0x00, 0xf0, + 0x09, 0xfc, 0x70, 0xbd, 0x28, 0x06, 0x01, 0xd5, + 0x00, 0xf0, 0x22, 0xfe, 0x22, 0x1c, 0x29, 0x1c, + 0x30, 0x1c, 0x08, 0xf0, 0x3c, 0x00, 0x98, 0x0d, + 0x00, 0x00, 0xdd, 0xfd, 0x01, 0x1c, 0x03, 0x48, + 0x54, 0x30, 0x43, 0x69, 0x32, 0x1c, 0xff, 0xf7, + 0x1b, 0xfb, 0x70, 0xbd, 0x00, 0x00, 0x50, 0x6d, + 0x01, 0x00, 0xf8, 0xb5, 0x06, 0x1c, 0x0d, 0x48, + 0x1f, 0x1c, 0x00, 0x68, 0x15, 0x1c, 0x0c, 0x1c, + 0x00, 0x28, 0x02, 0xd1, 0x28, 0x1c, 0x00, 0xf0, + 0xe8, 0xfb, 0x20, 0x06, 0x01, 0xd5, 0x00, 0xf0, + 0x02, 0xfe, 0x2a, 0x1c, 0x21, 0x1c, 0x3c, 0x00, + 0xd4, 0x0d, 0x00, 0x00, 0x30, 0x1c, 0x08, 0xf0, + 0xbd, 0xfd, 0x01, 0x1c, 0x03, 0x48, 0x54, 0x30, + 0x43, 0x69, 0x3a, 0x1c, 0xff, 0xf7, 0xfb, 0xfa, + 0xf8, 0xbd, 0x00, 0x00, 0x50, 0x6d, 0x01, 0x00, + 0xf8, 0xb5, 0xf1, 0x28, 0x4e, 0xd1, 0x2a, 0x48, + 0x69, 0x46, 0x82, 0x69, 0xff, 0xf7, 0xee, 0xfa, + 0x27, 0x49, 0x00, 0x26, 0x54, 0x39, 0xc8, 0x68, + 0x8b, 0x68, 0xc2, 0x00, 0x01, 0x30, 0xd5, 0x18, + 0x3c, 0x00, 0x10, 0x0e, 0x00, 0x00, 0x07, 0x28, + 0xc8, 0x60, 0x00, 0xd1, 0xce, 0x60, 0x22, 0x48, + 0x6c, 0x68, 0x00, 0x68, 0x00, 0x28, 0x03, 0xd0, + 0x00, 0x21, 0x20, 0x1c, 0x08, 0xf0, 0x3b, 0xfb, + 0x6e, 0x60, 0x25, 0x68, 0x20, 0x89, 0xa9, 0x78, + 0x02, 0x39, 0x40, 0x1a, 0xe9, 0x78, 0x40, 0x1a, + 0x20, 0x81, 0xa8, 0x78, 0x28, 0x18, 0x02, 0x38, + 0x20, 0x60, 0x6e, 0x78, 0x28, 0x78, 0x08, 0x28, + 0x17, 0xd2, 0x3c, 0x00, 0x4c, 0x0e, 0x00, 0x00, + 0x30, 0x06, 0x07, 0xd5, 0x27, 0x1c, 0x20, 0x1c, + 0x00, 0xf0, 0x7a, 0xfc, 0x04, 0x1c, 0x38, 0x1c, + 0x00, 0xf0, 0x9c, 0xfb, 0x28, 0x78, 0x0f, 0x49, + 0x40, 0x39, 0x80, 0x00, 0x0a, 0x58, 0x00, 0x2a, + 0x04, 0xd0, 0x31, 0x1c, 0x20, 0x1c, 0xff, 0xf7, + 0xb3, 0xfa, 0x08, 0xe0, 0x05, 0x21, 0x00, 0xe0, + 0x04, 0x21, 0x06, 0x20, 0x00, 0xf0, 0x10, 0xfa, + 0x20, 0x1c, 0x00, 0xf0, 0x3c, 0x00, 0x88, 0x0e, + 0x00, 0x00, 0x87, 0xfb, 0x30, 0x06, 0x01, 0xd5, + 0x00, 0xf0, 0xa1, 0xfd, 0xf8, 0xbd, 0x01, 0x21, + 0x06, 0x20, 0x00, 0xf0, 0x04, 0xfa, 0xf9, 0xe7, + 0x00, 0x00, 0xa4, 0x6d, 0x01, 0x00, 0xcc, 0x5c, + 0x01, 0x00, 0xf8, 0xb5, 0x1a, 0x4d, 0x19, 0x4f, + 0x01, 0x24, 0x54, 0x35, 0x29, 0x1c, 0x03, 0x20, + 0x7c, 0x60, 0x17, 0x4b, 0x18, 0x4a, 0x05, 0xf0, + 0xf4, 0xfb, 0x00, 0x28, 0x02, 0xd0, 0x3c, 0x00, + 0xc4, 0x0e, 0x00, 0x00, 0x00, 0x20, 0x38, 0x60, + 0x1f, 0xe0, 0x3c, 0x60, 0x07, 0x21, 0x28, 0x1c, + 0xea, 0x69, 0xff, 0xf7, 0x83, 0xfa, 0x38, 0x20, + 0x00, 0xf0, 0x80, 0xfc, 0x00, 0x24, 0xb8, 0x60, + 0xb8, 0x68, 0xe6, 0x00, 0x35, 0x18, 0x68, 0x46, + 0x02, 0x21, 0x00, 0xf0, 0x75, 0xfb, 0x28, 0x60, + 0x28, 0x1c, 0x00, 0xf0, 0xa5, 0xfd, 0xb8, 0x68, + 0x81, 0x59, 0x06, 0x48, 0x54, 0x30, 0x02, 0x6a, + 0x3c, 0x00, 0x00, 0x0f, 0x00, 0x00, 0xff, 0xf7, + 0x6c, 0xfa, 0x01, 0x34, 0x07, 0x2c, 0xea, 0xdb, + 0x00, 0x20, 0xf8, 0x60, 0x38, 0x61, 0xf8, 0xbd, + 0x00, 0x00, 0x50, 0x6d, 0x01, 0x00, 0x81, 0x9a, + 0x00, 0x00, 0x61, 0x9a, 0x00, 0x00, 0x05, 0x48, + 0x80, 0xb5, 0x00, 0x68, 0x00, 0x28, 0x05, 0xd0, + 0x03, 0x48, 0x54, 0x30, 0x42, 0x6a, 0x00, 0x21, + 0xff, 0xf7, 0x53, 0xfa, 0x80, 0xbd, 0x50, 0x6d, + 0x01, 0x00, 0x3c, 0x00, 0x3c, 0x0f, 0x00, 0x00, + 0x70, 0x47, 0x00, 0x00, 0x70, 0xb5, 0x0a, 0x4e, + 0x09, 0x4d, 0x08, 0x4c, 0x08, 0x3e, 0xa1, 0x69, + 0x00, 0x29, 0x07, 0xd0, 0x30, 0x68, 0x41, 0x60, + 0x00, 0x7b, 0x81, 0x00, 0x69, 0x58, 0xff, 0xf7, + 0x3e, 0xfa, 0xf4, 0xe7, 0x03, 0x49, 0x02, 0x20, + 0x08, 0x70, 0x70, 0xbd, 0x00, 0x10, 0x07, 0x00, + 0xe0, 0x7e, 0x01, 0x00, 0x00, 0x02, 0x07, 0x00, + 0x70, 0xb5, 0x0a, 0x4e, 0x3c, 0x00, 0x78, 0x0f, + 0x00, 0x00, 0x09, 0x4d, 0x08, 0x4c, 0x08, 0x3e, + 0xe1, 0x69, 0x00, 0x29, 0x07, 0xd0, 0x70, 0x68, + 0x41, 0x60, 0x00, 0x7b, 0x81, 0x00, 0x69, 0x58, + 0xff, 0xf7, 0x24, 0xfa, 0xf4, 0xe7, 0x03, 0x49, + 0x02, 0x20, 0x08, 0x70, 0x70, 0xbd, 0x00, 0x10, + 0x07, 0x00, 0xe0, 0x7e, 0x01, 0x00, 0x00, 0x02, + 0x07, 0x00, 0xb0, 0xb5, 0x09, 0x4d, 0x04, 0x1c, + 0x28, 0x1c, 0x20, 0x22, 0x40, 0x30, 0x3c, 0x00, + 0xb4, 0x0f, 0x00, 0x00, 0x05, 0x49, 0xff, 0xf7, + 0x9f, 0xfa, 0xe0, 0x68, 0xe8, 0x60, 0x20, 0x69, + 0x28, 0x61, 0xa0, 0x6a, 0xa8, 0x62, 0x60, 0x68, + 0x68, 0x60, 0xb0, 0xbd, 0x70, 0x52, 0x01, 0x00, + 0x00, 0x10, 0x07, 0x00, 0xf8, 0xb5, 0x00, 0x24, + 0x00, 0x23, 0x20, 0x28, 0x01, 0xdb, 0x01, 0x24, + 0x07, 0xe0, 0x08, 0x4e, 0x80, 0x00, 0x35, 0x58, + 0x07, 0x4f, 0xbd, 0x42, 0x00, 0xd0, 0x2b, 0x1c, + 0x3c, 0x00, 0xf0, 0x0f, 0x00, 0x00, 0x31, 0x50, + 0x13, 0x60, 0x00, 0x2c, 0x03, 0xd0, 0x21, 0x1c, + 0x82, 0x20, 0x00, 0xf0, 0x52, 0xf9, 0x20, 0x1c, + 0xf8, 0xbd, 0xe0, 0x7e, 0x01, 0x00, 0x75, 0x75, + 0x00, 0x00, 0xb0, 0xb5, 0x0b, 0x4d, 0x04, 0x1c, + 0x28, 0x68, 0x00, 0x28, 0x0f, 0xd0, 0x20, 0x1c, + 0x12, 0xf0, 0xb7, 0xfd, 0x00, 0x28, 0x0a, 0xd0, + 0x21, 0x7a, 0x28, 0x7a, 0x0a, 0x07, 0x00, 0x07, + 0x00, 0x0f, 0x3c, 0x00, 0x2c, 0x10, 0x00, 0x00, + 0x12, 0x0f, 0x90, 0x42, 0x29, 0x72, 0x01, 0xd0, + 0x01, 0x20, 0xb0, 0xbd, 0x00, 0x20, 0xb0, 0xbd, + 0x70, 0x78, 0x01, 0x00, 0xf0, 0xb5, 0x42, 0x4e, + 0x05, 0x1c, 0x30, 0x68, 0x85, 0xb0, 0x00, 0x28, + 0x63, 0xd0, 0x00, 0x24, 0x00, 0x20, 0x00, 0x2d, + 0x06, 0xd0, 0x69, 0x78, 0x18, 0x29, 0x03, 0xd1, + 0xe9, 0x79, 0x01, 0x29, 0x00, 0xd1, 0x01, 0x20, + 0x00, 0x28, 0x45, 0xd0, 0x3c, 0x00, 0x68, 0x10, + 0x00, 0x00, 0x00, 0x20, 0xb0, 0x72, 0x81, 0x00, + 0x4a, 0x19, 0x93, 0x7a, 0x59, 0x06, 0x89, 0x0f, + 0xdb, 0x06, 0x04, 0xd5, 0xb3, 0x7a, 0x01, 0x27, + 0x8f, 0x40, 0x3b, 0x43, 0xb3, 0x72, 0xd2, 0x7a, + 0x13, 0x09, 0x12, 0x07, 0x12, 0x0f, 0x93, 0x42, + 0x05, 0xd3, 0x01, 0x22, 0x8a, 0x40, 0x14, 0x43, + 0x01, 0xaa, 0x89, 0x00, 0x50, 0x50, 0x01, 0x30, + 0x04, 0x28, 0xe4, 0xdb, 0xb0, 0x7a, 0x3c, 0x00, + 0xa4, 0x10, 0x00, 0x00, 0x20, 0x40, 0x01, 0x07, + 0x0d, 0xd5, 0x41, 0x07, 0x09, 0xd5, 0xc1, 0x07, + 0x05, 0xd5, 0x81, 0x07, 0x01, 0xd5, 0x00, 0x24, + 0x05, 0xe0, 0x02, 0x99, 0x02, 0xe0, 0x01, 0x99, + 0x00, 0xe0, 0x03, 0x99, 0x04, 0x91, 0x41, 0x07, + 0x09, 0xd5, 0xc1, 0x07, 0x05, 0xd5, 0x81, 0x07, + 0x01, 0xd5, 0x00, 0x24, 0x03, 0xe0, 0x02, 0x99, + 0x00, 0xe0, 0x01, 0x99, 0x03, 0x91, 0xc1, 0x07, + 0x3c, 0x00, 0xe0, 0x10, 0x00, 0x00, 0x05, 0xd5, + 0x81, 0x07, 0x01, 0xd5, 0x00, 0x24, 0x01, 0xe0, + 0x02, 0x99, 0x01, 0x91, 0x80, 0x07, 0x01, 0xd5, + 0x00, 0x24, 0x22, 0xe0, 0x0f, 0x2c, 0x20, 0xd1, + 0x70, 0x68, 0x00, 0x28, 0x0b, 0xd0, 0x04, 0x9a, + 0x02, 0xab, 0x00, 0x92, 0x0a, 0xcb, 0x01, 0x9a, + 0x28, 0x1c, 0x0b, 0xf0, 0x8a, 0xfb, 0x00, 0x20, + 0x70, 0x60, 0x10, 0xe0, 0x17, 0xe0, 0x30, 0x7a, + 0x29, 0x7a, 0x3c, 0x00, 0x1c, 0x11, 0x00, 0x00, + 0x00, 0x07, 0x09, 0x07, 0x09, 0x0f, 0x00, 0x0f, + 0x88, 0x42, 0x07, 0xd0, 0x04, 0x9a, 0x02, 0xab, + 0x00, 0x92, 0x0a, 0xcb, 0x01, 0x9a, 0x28, 0x1c, + 0x0b, 0xf0, 0x76, 0xfb, 0x28, 0x7a, 0x30, 0x72, + 0x01, 0x20, 0x0f, 0x2c, 0x00, 0xd0, 0x00, 0x20, + 0x05, 0xb0, 0xf0, 0xbd, 0x01, 0x20, 0xfb, 0xe7, + 0x70, 0x78, 0x01, 0x00, 0x0d, 0x4a, 0x70, 0xb5, + 0x11, 0x68, 0x00, 0x20, 0x3c, 0x00, 0x58, 0x11, + 0x00, 0x00, 0x00, 0x29, 0x0e, 0xd0, 0x11, 0x7a, + 0x09, 0x06, 0x0b, 0xd5, 0x53, 0x7a, 0x94, 0x7a, + 0x03, 0x21, 0x01, 0x25, 0x2a, 0x1c, 0x8a, 0x40, + 0x1e, 0x1c, 0x16, 0x40, 0x03, 0xd0, 0x22, 0x40, + 0x01, 0xd1, 0x01, 0x20, 0x70, 0xbd, 0xff, 0x31, + 0x09, 0x06, 0x09, 0x16, 0xf2, 0xd5, 0x70, 0xbd, + 0x00, 0x00, 0x70, 0x78, 0x01, 0x00, 0x10, 0xb5, + 0x08, 0x4c, 0x20, 0x68, 0x00, 0x28, 0x3c, 0x00, + 0x94, 0x11, 0x00, 0x00, 0x04, 0xd0, 0x60, 0x68, + 0x00, 0x28, 0x01, 0xd1, 0x0b, 0xf0, 0xc0, 0xfb, + 0x00, 0x20, 0x00, 0x21, 0x00, 0x22, 0x07, 0xc4, + 0x0c, 0x3c, 0x01, 0x20, 0x60, 0x60, 0x10, 0xbd, + 0x70, 0x78, 0x01, 0x00, 0x01, 0x49, 0x01, 0x20, + 0x08, 0x60, 0x70, 0x47, 0x70, 0x78, 0x01, 0x00, + 0xf8, 0xb5, 0x0e, 0x4d, 0x04, 0x1c, 0x00, 0x20, + 0x68, 0x72, 0x20, 0x1c, 0x12, 0xf0, 0xde, 0xfc, + 0x3c, 0x00, 0xd0, 0x11, 0x00, 0x00, 0x00, 0x28, + 0x12, 0xd0, 0x00, 0x20, 0x03, 0x21, 0x01, 0x22, + 0x0f, 0x1a, 0x16, 0x1c, 0x23, 0x7a, 0xbe, 0x40, + 0x33, 0x40, 0x04, 0xd0, 0x6b, 0x7a, 0x16, 0x1c, + 0x86, 0x40, 0x33, 0x43, 0x6b, 0x72, 0x01, 0x30, + 0x00, 0x06, 0x00, 0x0e, 0x03, 0x28, 0xef, 0xd9, + 0xf8, 0xbd, 0x70, 0x78, 0x01, 0x00, 0x92, 0x00, + 0x51, 0x18, 0x8a, 0x7a, 0x12, 0x07, 0x12, 0x0f, + 0x02, 0x70, 0x3c, 0x00, 0x0c, 0x12, 0x00, 0x00, + 0xca, 0x7a, 0x12, 0x07, 0x12, 0x0f, 0x42, 0x70, + 0xca, 0x7a, 0x12, 0x09, 0x82, 0x70, 0x09, 0x7b, + 0x81, 0x80, 0x70, 0x47, 0x03, 0x4a, 0x0f, 0x21, + 0x52, 0x7a, 0x01, 0x20, 0x91, 0x43, 0x00, 0xd0, + 0x00, 0x20, 0x70, 0x47, 0x70, 0x78, 0x01, 0x00, + 0x40, 0x07, 0x05, 0x49, 0x40, 0x0f, 0x05, 0x4a, + 0x09, 0x56, 0x52, 0x7a, 0x01, 0x20, 0x0a, 0x40, + 0x00, 0xd1, 0x00, 0x20, 0x3c, 0x00, 0x48, 0x12, + 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, 0x5e, 0x46, + 0x01, 0x00, 0x70, 0x78, 0x01, 0x00, 0x12, 0x4a, + 0x70, 0xb5, 0x53, 0x7a, 0x94, 0x7a, 0xff, 0x20, + 0x03, 0x21, 0x01, 0x25, 0x2a, 0x1c, 0x8a, 0x40, + 0x1e, 0x1c, 0x16, 0x40, 0x14, 0xd0, 0x22, 0x40, + 0x12, 0xd1, 0x08, 0x06, 0x00, 0x0e, 0x07, 0xd0, + 0x01, 0x28, 0x07, 0xd0, 0x02, 0x28, 0x07, 0xd0, + 0x03, 0x28, 0x07, 0xd1, 0x07, 0x20, 0x3c, 0x00, + 0x84, 0x12, 0x00, 0x00, 0x70, 0xbd, 0x03, 0x20, + 0x70, 0xbd, 0x01, 0x20, 0x70, 0xbd, 0x05, 0x20, + 0x70, 0xbd, 0xff, 0x20, 0x70, 0xbd, 0xff, 0x31, + 0x09, 0x06, 0x09, 0x16, 0xe1, 0xd5, 0x70, 0xbd, + 0x70, 0x78, 0x01, 0x00, 0xf8, 0xb5, 0x04, 0x1c, + 0x13, 0x48, 0x0d, 0x1c, 0x81, 0x68, 0x00, 0x29, + 0x05, 0xd0, 0x01, 0x7b, 0x00, 0x29, 0x01, 0xd1, + 0x04, 0x73, 0x45, 0x73, 0xf8, 0xbd, 0x0f, 0x4e, + 0x3c, 0x00, 0xc0, 0x12, 0x00, 0x00, 0x31, 0x1c, + 0x20, 0x31, 0x8a, 0x79, 0x00, 0xab, 0x1a, 0x70, + 0xc9, 0x79, 0x59, 0x70, 0x42, 0x68, 0x00, 0x2a, + 0x07, 0xd0, 0x20, 0x02, 0x28, 0x43, 0x01, 0x1c, + 0x00, 0x20, 0xff, 0xf7, 0x7e, 0xf8, 0x00, 0x28, + 0x04, 0xd1, 0x2a, 0x1c, 0x21, 0x1c, 0x00, 0x20, + 0x11, 0xf0, 0x0f, 0xf8, 0x00, 0xab, 0x18, 0x88, + 0xf0, 0x84, 0xe2, 0xe7, 0x00, 0x00, 0x88, 0x5a, + 0x01, 0x00, 0x3c, 0x00, 0xfc, 0x12, 0x00, 0x00, + 0x00, 0x10, 0x07, 0x00, 0x80, 0xb5, 0x01, 0x21, + 0x81, 0x20, 0xff, 0xf7, 0xcd, 0xff, 0x80, 0xbd, + 0x01, 0x49, 0x01, 0x20, 0x88, 0x60, 0x70, 0x47, + 0x88, 0x5a, 0x01, 0x00, 0x05, 0x49, 0x80, 0xb5, + 0x00, 0x20, 0x88, 0x60, 0x08, 0x7b, 0x00, 0x28, + 0x02, 0xd0, 0x49, 0x7b, 0xff, 0xf7, 0xbc, 0xff, + 0x80, 0xbd, 0x00, 0x00, 0x88, 0x5a, 0x01, 0x00, + 0x02, 0x4a, 0x01, 0x1c, 0x3c, 0x00, 0x38, 0x13, + 0x00, 0x00, 0x50, 0x68, 0x51, 0x60, 0x70, 0x47, + 0x00, 0x00, 0x88, 0x5a, 0x01, 0x00, 0x10, 0xb5, + 0x0c, 0x1c, 0x07, 0xf0, 0x64, 0xfa, 0x04, 0x61, + 0x00, 0x20, 0x10, 0xbd, 0x00, 0x00, 0xff, 0xb5, + 0x0e, 0x1c, 0x1f, 0x1c, 0x38, 0x20, 0x81, 0xb0, + 0x00, 0xf0, 0x3d, 0xfa, 0x1d, 0x49, 0x04, 0x1c, + 0x48, 0x69, 0x00, 0x28, 0x01, 0xd1, 0x4c, 0x61, + 0x00, 0xe0, 0x04, 0x60, 0x30, 0x01, 0x3c, 0x00, + 0x74, 0x13, 0x00, 0x00, 0x00, 0x90, 0x00, 0x04, + 0x00, 0x0c, 0x00, 0xf0, 0x15, 0xfa, 0x05, 0x1c, + 0x00, 0x99, 0xff, 0xf7, 0x8b, 0xf8, 0x00, 0x20, + 0x73, 0x1e, 0x04, 0xe0, 0x01, 0x01, 0x4a, 0x19, + 0x10, 0x32, 0x6a, 0x50, 0x01, 0x30, 0x98, 0x42, + 0xf8, 0xd3, 0x00, 0x01, 0x2d, 0x50, 0x38, 0x21, + 0x20, 0x1c, 0xff, 0xf7, 0x7b, 0xf8, 0xa5, 0x60, + 0x65, 0x60, 0xe6, 0x85, 0x0c, 0x20, 0x60, 0x86, + 0x3c, 0x00, 0xb0, 0x13, 0x00, 0x00, 0xaf, 0x20, + 0x80, 0x01, 0xe0, 0x61, 0x0e, 0x20, 0xe0, 0x86, + 0x00, 0x20, 0x20, 0x60, 0x01, 0x98, 0xe0, 0x60, + 0x38, 0x68, 0x60, 0x61, 0x03, 0x99, 0x04, 0x48, + 0x08, 0x60, 0x04, 0x48, 0x38, 0x60, 0x05, 0xb0, + 0x00, 0x20, 0xf0, 0xbd, 0x00, 0x00, 0xfc, 0x5a, + 0x01, 0x00, 0xdd, 0x15, 0x01, 0x00, 0xfd, 0x16, + 0x01, 0x00, 0x02, 0x1c, 0x08, 0x1c, 0xf0, 0x2a, + 0x80, 0xb5, 0x3c, 0x00, 0xec, 0x13, 0x00, 0x00, + 0x04, 0xd0, 0xf1, 0x2a, 0x07, 0xd1, 0x06, 0xf0, + 0x09, 0xfb, 0x80, 0xbd, 0x07, 0xf0, 0x0c, 0xfa, + 0x0d, 0xf0, 0xa8, 0xfa, 0x80, 0xbd, 0x01, 0x21, + 0x02, 0x20, 0xff, 0xf7, 0x4d, 0xff, 0x80, 0xbd, + 0x01, 0x49, 0x00, 0x20, 0x48, 0x61, 0x70, 0x47, + 0xfc, 0x5a, 0x01, 0x00, 0x00, 0x28, 0x02, 0xd0, + 0x00, 0x29, 0x00, 0xd0, 0xc1, 0x60, 0x70, 0x47, + 0xf8, 0xb5, 0x17, 0x1c, 0x3c, 0x00, 0x28, 0x14, + 0x00, 0x00, 0x0e, 0x1c, 0x05, 0x1c, 0x1c, 0x1c, + 0x1c, 0x30, 0x07, 0xf0, 0xc8, 0xf8, 0x01, 0x69, + 0x42, 0x69, 0x80, 0x68, 0x89, 0x19, 0x89, 0x1a, + 0x81, 0x42, 0x06, 0xd2, 0x23, 0x1c, 0x3a, 0x1c, + 0x31, 0x1c, 0x28, 0x1c, 0x00, 0xf0, 0x05, 0xf8, + 0xf8, 0xbd, 0x00, 0x20, 0x38, 0x60, 0x20, 0x60, + 0xfa, 0xe7, 0xff, 0xb5, 0x85, 0xb0, 0x05, 0x98, + 0x01, 0x27, 0x0e, 0x1c, 0x1c, 0x30, 0x3c, 0x00, + 0x64, 0x14, 0x00, 0x00, 0x07, 0xf0, 0xae, 0xf8, + 0x04, 0x1c, 0x80, 0x88, 0x04, 0x30, 0x03, 0x90, + 0x2c, 0x48, 0x04, 0x90, 0x80, 0x79, 0x02, 0x90, + 0xa0, 0x69, 0xb0, 0x42, 0x17, 0xd2, 0x35, 0x1a, + 0x11, 0xe0, 0x03, 0x98, 0xff, 0xf7, 0x16, 0xfc, + 0x00, 0x28, 0x06, 0xd1, 0x01, 0x21, 0x8e, 0x20, + 0xff, 0xf7, 0x08, 0xff, 0x00, 0x25, 0x00, 0x27, + 0x05, 0xe0, 0x21, 0x68, 0x01, 0x60, 0x20, 0x60, + 0x3c, 0x00, 0xa0, 0x14, 0x00, 0x00, 0xa0, 0x69, + 0x01, 0x30, 0xa0, 0x61, 0x01, 0x3d, 0xeb, 0xd2, + 0x00, 0x2f, 0x35, 0xd0, 0xa0, 0x69, 0x80, 0x1b, + 0xa0, 0x61, 0x20, 0x69, 0x80, 0x19, 0x20, 0x61, + 0x61, 0x69, 0x40, 0x1a, 0xe1, 0x68, 0x88, 0x42, + 0x03, 0xd9, 0x07, 0x21, 0x8e, 0x20, 0xff, 0xf7, + 0xec, 0xfe, 0x25, 0x68, 0x2f, 0x1c, 0x70, 0x1e, + 0x01, 0x95, 0x00, 0xe0, 0x3f, 0x68, 0x01, 0x38, + 0xfc, 0xd2, 0x3c, 0x00, 0xdc, 0x14, 0x00, 0x00, + 0x38, 0x68, 0x20, 0x60, 0x02, 0x98, 0x04, 0x99, + 0x88, 0x71, 0x2e, 0x68, 0x2c, 0x60, 0x32, 0x1d, + 0x00, 0x92, 0x29, 0x1c, 0x20, 0x31, 0x01, 0x22, + 0x28, 0x1d, 0x05, 0x9b, 0x08, 0xf0, 0x7a, 0xfc, + 0xbd, 0x42, 0x01, 0xd0, 0x35, 0x1c, 0xf0, 0xe7, + 0x00, 0x20, 0x38, 0x61, 0x01, 0x98, 0x07, 0x99, + 0x04, 0x30, 0x08, 0x60, 0x08, 0x98, 0x04, 0x37, + 0x07, 0x60, 0x09, 0xb0, 0x3c, 0x00, 0x18, 0x15, + 0x00, 0x00, 0xf0, 0xbd, 0x02, 0x98, 0x04, 0x99, + 0x88, 0x71, 0xf9, 0xe7, 0x00, 0x00, 0x20, 0x10, + 0x07, 0x00, 0x38, 0xb5, 0x04, 0x1c, 0x15, 0x1c, + 0x00, 0x20, 0x0c, 0x60, 0x09, 0xe0, 0xe2, 0x68, + 0x20, 0x1c, 0x00, 0x92, 0xa3, 0x8a, 0x21, 0x68, + 0xa2, 0x69, 0x08, 0xf0, 0x56, 0xfc, 0x20, 0x1c, + 0xe4, 0x68, 0x00, 0x2c, 0xf3, 0xd1, 0x28, 0x60, + 0x38, 0xbd, 0x80, 0xb5, 0x0c, 0xe0, 0x3c, 0x00, + 0x54, 0x15, 0x00, 0x00, 0xc2, 0x68, 0x8a, 0x42, + 0x08, 0xd1, 0x00, 0x21, 0xc1, 0x60, 0x00, 0x28, + 0x03, 0xd1, 0x06, 0x21, 0x8e, 0x20, 0xff, 0xf7, + 0x9d, 0xfe, 0x80, 0xbd, 0x10, 0x1c, 0x00, 0x28, + 0xf7, 0xd0, 0xef, 0xe7, 0x10, 0xb5, 0x04, 0x1c, + 0x0c, 0xd0, 0xa0, 0x69, 0x00, 0x28, 0x06, 0xd1, + 0x20, 0x69, 0x00, 0x28, 0x03, 0xd0, 0x06, 0xf0, + 0xf7, 0xfd, 0x00, 0x20, 0x20, 0x61, 0x20, 0x1c, + 0x3c, 0x00, 0x90, 0x15, 0x00, 0x00, 0x06, 0xf0, + 0xf2, 0xfd, 0x10, 0xbd, 0x00, 0x00, 0x10, 0xb5, + 0x00, 0x28, 0x09, 0xd0, 0xc4, 0x68, 0x03, 0xe0, + 0xff, 0xf7, 0xe7, 0xff, 0x20, 0x1c, 0xf9, 0xe7, + 0x00, 0x2c, 0xf9, 0xd1, 0xff, 0xf7, 0xe1, 0xff, + 0x10, 0xbd, 0x01, 0x1c, 0x00, 0x20, 0x04, 0xe0, + 0x0a, 0x89, 0xc9, 0x68, 0x10, 0x18, 0x00, 0x04, + 0x00, 0x0c, 0x00, 0x29, 0xf8, 0xd1, 0x70, 0x47, + 0x00, 0x00, 0x3c, 0x00, 0xcc, 0x15, 0x00, 0x00, + 0x00, 0xe0, 0x08, 0x1c, 0xc1, 0x68, 0x00, 0x29, + 0xfb, 0xd1, 0x70, 0x47, 0xf8, 0xb5, 0x06, 0x1c, + 0x0c, 0x1c, 0x1c, 0x20, 0x00, 0xf0, 0x68, 0xfa, + 0x05, 0x1c, 0x00, 0x2e, 0x01, 0xd1, 0x00, 0x2c, + 0x02, 0xd1, 0x30, 0x1c, 0x01, 0x21, 0x03, 0xe0, + 0x20, 0x1c, 0x00, 0xf0, 0x5d, 0xfa, 0x00, 0x21, + 0x00, 0x22, 0x00, 0x92, 0x0a, 0x1c, 0x01, 0x1c, + 0x23, 0x1c, 0x28, 0x1c, 0x3c, 0x00, 0x08, 0x16, + 0x00, 0x00, 0x08, 0xf0, 0xf2, 0xfb, 0x28, 0x1c, + 0xf8, 0xbd, 0xb0, 0xb5, 0x03, 0x32, 0x92, 0x08, + 0x92, 0x00, 0x14, 0x04, 0x24, 0x0c, 0x09, 0x19, + 0x1d, 0x1c, 0xc9, 0x18, 0x09, 0x04, 0x09, 0x0c, + 0xff, 0xf7, 0xd7, 0xff, 0x01, 0x89, 0x02, 0x68, + 0x12, 0x19, 0x09, 0x1b, 0x49, 0x1b, 0x02, 0x60, + 0x01, 0x81, 0xb0, 0xbd, 0x00, 0x00, 0xf8, 0xb5, + 0x0a, 0x4c, 0xa0, 0x21, 0x20, 0x1c, 0x3c, 0x00, + 0x44, 0x16, 0x00, 0x00, 0xfe, 0xf7, 0x2a, 0xff, + 0x00, 0x20, 0x26, 0x1c, 0xa0, 0x36, 0x07, 0x4d, + 0x07, 0xe0, 0x0c, 0x21, 0x41, 0x43, 0x49, 0x19, + 0x0e, 0xc9, 0x27, 0x1d, 0x0e, 0xc7, 0x20, 0x34, + 0x01, 0x30, 0xa6, 0x42, 0xf5, 0xd1, 0xf8, 0xbd, + 0xd0, 0x5c, 0x01, 0x00, 0xc8, 0x3f, 0x01, 0x00, + 0xf7, 0xb5, 0xc4, 0x68, 0x06, 0x1c, 0x00, 0x25, + 0x00, 0x2c, 0x82, 0xb0, 0x23, 0xd0, 0x20, 0x89, + 0x3c, 0x00, 0x80, 0x16, 0x00, 0x00, 0x90, 0x42, + 0x20, 0xd3, 0xe1, 0x68, 0x87, 0x1a, 0x01, 0x91, + 0x00, 0x21, 0xe1, 0x60, 0x03, 0x99, 0x00, 0x20, + 0xff, 0xf7, 0xa1, 0xff, 0x05, 0x1c, 0x20, 0x89, + 0xc0, 0x1b, 0x20, 0x81, 0x2a, 0x68, 0x03, 0x99, + 0x30, 0x1c, 0x00, 0xf0, 0x16, 0xf8, 0x20, 0x89, + 0xc0, 0x19, 0x20, 0x81, 0x01, 0x99, 0x20, 0x1c, + 0xff, 0xf7, 0xb1, 0xfe, 0x21, 0x1c, 0x28, 0x1c, + 0xff, 0xf7, 0x3c, 0x00, 0xbc, 0x16, 0x00, 0x00, + 0xad, 0xfe, 0x29, 0x1c, 0x30, 0x1c, 0xff, 0xf7, + 0xa9, 0xfe, 0x01, 0x20, 0x00, 0x2d, 0x00, 0xd1, + 0x00, 0x20, 0x05, 0xb0, 0xf0, 0xbd, 0x00, 0x00, + 0xf7, 0xb5, 0x04, 0x1c, 0x0e, 0x1c, 0x00, 0x20, + 0x01, 0xe0, 0x20, 0x1c, 0x0c, 0x1c, 0xe1, 0x68, + 0x00, 0x29, 0xfa, 0xd1, 0x27, 0x89, 0xb7, 0x42, + 0x0a, 0xd3, 0xb8, 0x1b, 0x00, 0x04, 0x00, 0x0c, + 0x20, 0x81, 0x21, 0x68, 0x3c, 0x00, 0xf8, 0x16, + 0x00, 0x00, 0x09, 0x18, 0x02, 0x98, 0x32, 0x1c, + 0xfe, 0xf7, 0xfb, 0xfe, 0xfe, 0xbd, 0xf1, 0x1b, + 0x0d, 0x04, 0x2d, 0x0c, 0x00, 0x28, 0x19, 0xd0, + 0x01, 0x89, 0xa9, 0x42, 0x16, 0xd3, 0x49, 0x1b, + 0x09, 0x04, 0x09, 0x0c, 0x01, 0x81, 0x00, 0x68, + 0x41, 0x18, 0x02, 0x98, 0x2a, 0x1c, 0xfe, 0xf7, + 0xe8, 0xfe, 0x21, 0x68, 0x02, 0x98, 0x72, 0x1b, + 0x40, 0x19, 0xfe, 0xf7, 0xe2, 0xfe, 0x3c, 0x00, + 0x34, 0x17, 0x00, 0x00, 0x20, 0x89, 0xc0, 0x1b, + 0x20, 0x81, 0x20, 0x68, 0xc0, 0x19, 0x20, 0x60, + 0xdf, 0xe7, 0x03, 0x21, 0x8e, 0x20, 0xff, 0xf7, + 0xad, 0xfd, 0xda, 0xe7, 0xf8, 0xb5, 0x04, 0x1c, + 0x00, 0x26, 0x13, 0xe0, 0x21, 0x89, 0x00, 0x20, + 0xff, 0xf7, 0x3e, 0xff, 0x05, 0x1c, 0x22, 0x89, + 0x21, 0x68, 0x00, 0x68, 0xfe, 0xf7, 0xc8, 0xfe, + 0x00, 0x2e, 0x01, 0xd1, 0x2e, 0x1c, 0x03, 0xe0, + 0x3c, 0x00, 0x70, 0x17, 0x00, 0x00, 0x29, 0x1c, + 0x38, 0x1c, 0xff, 0xf7, 0x50, 0xfe, 0xe4, 0x68, + 0x2f, 0x1c, 0x00, 0x2c, 0xe9, 0xd1, 0x30, 0x1c, + 0xf8, 0xbd, 0xb0, 0xb5, 0x04, 0x1c, 0x00, 0x89, + 0x40, 0x1a, 0x05, 0x04, 0x20, 0x68, 0x2d, 0x0c, + 0x40, 0x18, 0x29, 0x1c, 0xff, 0xf7, 0x1f, 0xff, + 0x21, 0x89, 0x49, 0x1b, 0x21, 0x81, 0xe1, 0x68, + 0xc1, 0x60, 0xe0, 0x60, 0xb0, 0xbd, 0x10, 0xb5, + 0x03, 0x30, 0x3c, 0x00, 0xac, 0x17, 0x00, 0x00, + 0x09, 0x4a, 0x81, 0x08, 0x10, 0x68, 0x3d, 0x24, + 0x08, 0x4b, 0x64, 0x01, 0x89, 0x00, 0x09, 0x18, + 0x1b, 0x19, 0x99, 0x42, 0x01, 0xd8, 0x11, 0x60, + 0x10, 0xbd, 0x0f, 0x21, 0x80, 0x20, 0xff, 0xf7, + 0x6b, 0xfd, 0x00, 0x20, 0x10, 0xbd, 0x00, 0x00, + 0xb4, 0xcf, 0x01, 0x00, 0x14, 0xc8, 0x01, 0x00, + 0x10, 0xb5, 0x11, 0xf0, 0x61, 0xff, 0x04, 0x1c, + 0x03, 0xd1, 0x0d, 0x21, 0x3c, 0x00, 0xe8, 0x17, + 0x00, 0x00, 0x80, 0x20, 0xff, 0xf7, 0x5b, 0xfd, + 0x20, 0x1c, 0x10, 0xbd, 0x00, 0x00, 0xb0, 0xb5, + 0x01, 0x1f, 0x0b, 0x68, 0x0d, 0x48, 0x00, 0x22, + 0x83, 0x42, 0x04, 0xd0, 0x01, 0x32, 0x10, 0x30, + 0x03, 0x2a, 0xf9, 0xd3, 0x01, 0xe0, 0x03, 0x2a, + 0x06, 0xd3, 0x09, 0x24, 0x21, 0x1c, 0x80, 0x20, + 0xff, 0xf7, 0x45, 0xfd, 0x20, 0x1c, 0xb0, 0xbd, + 0x05, 0x4b, 0x00, 0x24, 0x9a, 0x79, 0x3c, 0x00, + 0x24, 0x18, 0x00, 0x00, 0x85, 0x68, 0x0d, 0x60, + 0x81, 0x60, 0x9a, 0x71, 0xf5, 0xe7, 0x00, 0x00, + 0x20, 0x57, 0x01, 0x00, 0x20, 0x10, 0x07, 0x00, + 0xb0, 0xb5, 0x00, 0x21, 0x10, 0x4a, 0x00, 0x23, + 0xd4, 0x68, 0x84, 0x42, 0x04, 0xd2, 0x01, 0x33, + 0x10, 0x32, 0x03, 0x2b, 0xf8, 0xd3, 0x01, 0xe0, + 0x03, 0x2b, 0x01, 0xd3, 0x04, 0x21, 0x0e, 0xe0, + 0x0a, 0x4c, 0xa3, 0x79, 0x90, 0x68, 0x00, 0x28, + 0x3c, 0x00, 0x60, 0x18, 0x00, 0x00, 0x02, 0xd1, + 0xa3, 0x71, 0x03, 0x21, 0x06, 0xe0, 0x05, 0x68, + 0x95, 0x60, 0xa3, 0x71, 0x00, 0x29, 0x01, 0xd1, + 0x04, 0xc0, 0xb0, 0xbd, 0x80, 0x20, 0xff, 0xf7, + 0x14, 0xfd, 0x00, 0x20, 0xb0, 0xbd, 0x20, 0x57, + 0x01, 0x00, 0x20, 0x10, 0x07, 0x00, 0xa0, 0x30, + 0x00, 0x8a, 0x40, 0x07, 0x40, 0x0f, 0x08, 0x28, + 0x0f, 0xd2, 0x01, 0xa3, 0x1b, 0x5c, 0x5b, 0x00, + 0x9f, 0x44, 0x3c, 0x00, 0x9c, 0x18, 0x00, 0x00, + 0x05, 0x03, 0x03, 0x05, 0x07, 0x07, 0x09, 0x09, + 0x01, 0x20, 0x70, 0x47, 0x00, 0x20, 0x70, 0x47, + 0x02, 0x20, 0x70, 0x47, 0x03, 0x20, 0x70, 0x47, + 0x04, 0x20, 0x70, 0x47, 0xb0, 0xb5, 0x10, 0x4d, + 0x68, 0x69, 0x00, 0x28, 0x07, 0xd0, 0x0e, 0x49, + 0x00, 0x22, 0x2c, 0x31, 0x03, 0xc9, 0x01, 0x43, + 0x03, 0x20, 0x06, 0xf0, 0xcf, 0xff, 0x0b, 0x4c, + 0x00, 0x22, 0x03, 0xcc, 0x3c, 0x00, 0xd8, 0x18, + 0x00, 0x00, 0x08, 0x3c, 0x01, 0x43, 0x03, 0x20, + 0x06, 0xf0, 0xaf, 0xff, 0x03, 0xcc, 0x08, 0x43, + 0x07, 0x49, 0x4a, 0x68, 0x02, 0x43, 0x4a, 0x60, + 0x8a, 0x68, 0x10, 0x43, 0x88, 0x60, 0x01, 0x20, + 0x68, 0x61, 0xb0, 0xbd, 0x00, 0x00, 0x64, 0x73, + 0x01, 0x00, 0xb0, 0x58, 0x01, 0x00, 0x10, 0x00, + 0x07, 0x00, 0xb0, 0xb5, 0x0c, 0x1c, 0x0f, 0xf0, + 0xa8, 0xfa, 0x05, 0x4d, 0xe8, 0x6a, 0x3c, 0x00, + 0x14, 0x19, 0x00, 0x00, 0x00, 0x28, 0x06, 0xd1, + 0x00, 0x2c, 0x04, 0xd0, 0x20, 0x1c, 0x0f, 0xf0, + 0xb7, 0xfd, 0x01, 0x20, 0x28, 0x70, 0xb0, 0xbd, + 0xf4, 0x6e, 0x01, 0x00, 0x05, 0x49, 0x80, 0xb5, + 0x88, 0x6a, 0x00, 0x28, 0x04, 0xda, 0x00, 0x20, + 0x88, 0x62, 0x01, 0x21, 0x0d, 0xf0, 0x42, 0xfd, + 0x80, 0xbd, 0x00, 0x00, 0xac, 0x7e, 0x01, 0x00, + 0xf8, 0xb5, 0x1e, 0x4d, 0x04, 0x1c, 0x00, 0x20, + 0x3c, 0x00, 0x50, 0x19, 0x00, 0x00, 0x68, 0x62, + 0xa8, 0x70, 0x1c, 0x48, 0x00, 0x78, 0xc0, 0x07, + 0x22, 0xd5, 0xb8, 0x20, 0x03, 0x59, 0x1a, 0x48, + 0x00, 0x78, 0x0e, 0x28, 0x09, 0xd1, 0x0a, 0x1c, + 0x80, 0x32, 0x06, 0xd0, 0x18, 0x4e, 0x0d, 0x20, + 0x32, 0x5c, 0x8a, 0x42, 0x01, 0xdd, 0x01, 0x38, + 0xfa, 0xd1, 0x59, 0x1e, 0x0b, 0x06, 0x1b, 0x0e, + 0xab, 0x70, 0xab, 0x62, 0x0e, 0x28, 0x0b, 0xd2, + 0x08, 0xe0, 0x3c, 0x00, 0x8c, 0x19, 0x00, 0x00, + 0x62, 0x18, 0xb0, 0x32, 0x12, 0x7b, 0x82, 0x42, + 0x02, 0xd8, 0x58, 0x1a, 0xa8, 0x62, 0x02, 0xe0, + 0x01, 0x39, 0x00, 0x29, 0xf4, 0xda, 0x0e, 0xf0, + 0x35, 0xf9, 0x00, 0x90, 0x00, 0xab, 0x18, 0x78, + 0x59, 0x78, 0x81, 0x42, 0x00, 0xd9, 0x58, 0x78, + 0xed, 0x30, 0xe8, 0x70, 0x01, 0x21, 0x20, 0x1c, + 0x0d, 0xf0, 0x02, 0xfd, 0xf8, 0xbd, 0x00, 0x00, + 0xac, 0x7e, 0x01, 0x00, 0x3c, 0x00, 0xc8, 0x19, + 0x00, 0x00, 0x1d, 0x75, 0x01, 0x00, 0x11, 0x67, + 0x01, 0x00, 0xc7, 0x52, 0x01, 0x00, 0x0e, 0x49, + 0x10, 0xb5, 0x08, 0x69, 0x8b, 0x68, 0xc2, 0x00, + 0xd4, 0x18, 0x62, 0x68, 0x00, 0x2a, 0x0f, 0xd1, + 0x01, 0x30, 0x08, 0x61, 0x07, 0x28, 0x01, 0xd1, + 0x00, 0x20, 0x08, 0x61, 0x20, 0x1c, 0x00, 0xf0, + 0x24, 0xf8, 0x05, 0x48, 0x21, 0x68, 0x54, 0x30, + 0x02, 0x6a, 0xfe, 0xf7, 0xec, 0xfc, 0x3c, 0x00, + 0x04, 0x1a, 0x00, 0x00, 0x10, 0xbd, 0x06, 0x21, + 0x06, 0x20, 0xff, 0xf7, 0x4b, 0xfc, 0x10, 0xbd, + 0x50, 0x6d, 0x01, 0x00, 0x08, 0x49, 0x09, 0x79, + 0xc9, 0x07, 0x08, 0x4a, 0x08, 0xd4, 0x00, 0xe0, + 0x08, 0x1c, 0xc1, 0x68, 0x00, 0x29, 0xfb, 0xd1, + 0x01, 0x89, 0x04, 0x31, 0x01, 0x81, 0x00, 0xe0, + 0x00, 0x20, 0xd0, 0x62, 0x70, 0x47, 0x00, 0x00, + 0x60, 0x80, 0x07, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x3c, 0x00, 0x40, 0x1a, 0x00, 0x00, 0x10, 0xb5, + 0x04, 0x1c, 0x19, 0x21, 0x89, 0x01, 0x00, 0x20, + 0xff, 0xf7, 0xc5, 0xfd, 0x01, 0x1c, 0x60, 0x60, + 0x20, 0x68, 0xff, 0xf7, 0xe0, 0xfc, 0x60, 0x68, + 0x21, 0x68, 0x08, 0x30, 0x08, 0x60, 0x10, 0xbd, + 0x00, 0x00, 0x0a, 0x28, 0x01, 0xda, 0x04, 0x20, + 0x04, 0xe0, 0x50, 0x28, 0x01, 0xda, 0x05, 0x20, + 0x00, 0xe0, 0x07, 0x20, 0x04, 0x4a, 0x11, 0x78, + 0x38, 0x23, 0x3c, 0x00, 0x7c, 0x1a, 0x00, 0x00, + 0xc0, 0x00, 0x18, 0x40, 0x99, 0x43, 0x08, 0x43, + 0x10, 0x70, 0x70, 0x47, 0x88, 0x00, 0x07, 0x00, + 0xb0, 0xb5, 0x05, 0x1c, 0x07, 0x48, 0x40, 0x68, + 0x08, 0xe0, 0x01, 0x69, 0xa9, 0x42, 0x04, 0xd1, + 0x44, 0x68, 0x05, 0xf0, 0xc7, 0xfd, 0x20, 0x1c, + 0x00, 0xe0, 0x40, 0x68, 0x00, 0x28, 0xf4, 0xd1, + 0xb0, 0xbd, 0x00, 0x00, 0x58, 0x75, 0x01, 0x00, + 0xf8, 0xb5, 0x00, 0x25, 0x3c, 0x00, 0xb8, 0x1a, + 0x00, 0x00, 0x06, 0xf0, 0x84, 0xfd, 0x11, 0x4f, + 0x04, 0x1c, 0xbe, 0x79, 0x20, 0x68, 0x00, 0x28, + 0x07, 0xd1, 0xa0, 0x88, 0x04, 0x30, 0xff, 0xf7, + 0xf2, 0xf8, 0x00, 0x28, 0x06, 0xd1, 0x01, 0x21, + 0x0f, 0xe0, 0x01, 0x68, 0x21, 0x60, 0xa1, 0x69, + 0x01, 0x39, 0xa1, 0x61, 0x10, 0xc0, 0x05, 0x1c, + 0x20, 0x69, 0x01, 0x30, 0x20, 0x61, 0x61, 0x69, + 0x40, 0x1a, 0xe1, 0x68, 0x88, 0x42, 0x3c, 0x00, + 0xf4, 0x1a, 0x00, 0x00, 0x03, 0xd9, 0x07, 0x21, + 0x8e, 0x20, 0xff, 0xf7, 0xd3, 0xfb, 0xbe, 0x71, + 0x28, 0x1c, 0xf8, 0xbd, 0x20, 0x10, 0x07, 0x00, + 0xb0, 0xb5, 0x09, 0xf0, 0xbb, 0xff, 0x2f, 0x4c, + 0x00, 0x28, 0x20, 0x74, 0x03, 0xd0, 0x01, 0x21, + 0x01, 0x20, 0x0a, 0xf0, 0x71, 0xfc, 0x2b, 0x4d, + 0x14, 0x35, 0x28, 0x68, 0x00, 0x28, 0x4d, 0xd0, + 0x01, 0x21, 0x0f, 0x20, 0x11, 0xf0, 0x82, 0xfd, + 0x3c, 0x00, 0x30, 0x1b, 0x00, 0x00, 0x28, 0x89, + 0x08, 0xf0, 0xfb, 0xff, 0x01, 0x1c, 0x01, 0x22, + 0x0f, 0x20, 0x11, 0xf0, 0x40, 0xfd, 0xe0, 0x78, + 0x01, 0x25, 0x02, 0x28, 0x36, 0xd1, 0x0a, 0xf0, + 0xc6, 0xf8, 0x00, 0x28, 0x0a, 0xd0, 0x0b, 0xf0, + 0x92, 0xfb, 0x1e, 0x49, 0x09, 0x68, 0x40, 0x18, + 0x11, 0xf0, 0x5f, 0xf8, 0x00, 0x28, 0x01, 0xd1, + 0x02, 0x20, 0x2f, 0xe0, 0xe0, 0x78, 0x02, 0x28, + 0x24, 0xd1, 0x3c, 0x00, 0x6c, 0x1b, 0x00, 0x00, + 0x60, 0x70, 0x25, 0x70, 0x60, 0x68, 0x01, 0x28, + 0x1c, 0xd0, 0x15, 0x48, 0x10, 0x38, 0x81, 0x7b, + 0x00, 0x29, 0x04, 0xd1, 0x85, 0x73, 0x0f, 0x20, + 0x13, 0x49, 0x10, 0xf0, 0x01, 0xfc, 0x08, 0xf0, + 0x4f, 0xfe, 0x00, 0x28, 0x07, 0xd0, 0x0e, 0x48, + 0x01, 0x21, 0x98, 0x38, 0x00, 0x69, 0x01, 0xf0, + 0xb7, 0xfd, 0x00, 0x28, 0x05, 0xd0, 0x01, 0x20, + 0x0e, 0xf0, 0x0c, 0xfd, 0x3c, 0x00, 0xa8, 0x1b, + 0x00, 0x00, 0x01, 0x20, 0x0e, 0xf0, 0x1d, 0xfc, + 0xb0, 0xbd, 0x05, 0xf0, 0xdc, 0xfe, 0xb0, 0xbd, + 0xe0, 0x78, 0x00, 0x28, 0x01, 0xd1, 0x25, 0x70, + 0xf7, 0xe7, 0x03, 0x20, 0x00, 0xe0, 0x04, 0x20, + 0x0d, 0xf0, 0x8d, 0xfa, 0xb0, 0xbd, 0x84, 0x66, + 0x01, 0x00, 0x6c, 0x57, 0x01, 0x00, 0xe9, 0x03, + 0x01, 0x00, 0x70, 0xb5, 0x04, 0x1c, 0x00, 0x21, + 0x00, 0x20, 0x0a, 0x4d, 0x00, 0xe0, 0x3c, 0x00, + 0xe4, 0x1b, 0x00, 0x00, 0x01, 0x31, 0xcb, 0x00, + 0x5a, 0x19, 0x16, 0x79, 0x01, 0x2e, 0x02, 0xd0, + 0x52, 0x79, 0xa2, 0x42, 0x02, 0xd0, 0x0b, 0x29, + 0xf4, 0xd3, 0x70, 0xbd, 0x0b, 0x29, 0xfc, 0xd2, + 0xc8, 0x00, 0x01, 0x21, 0x5a, 0x19, 0x28, 0x58, + 0x11, 0x71, 0x70, 0xbd, 0x38, 0x58, 0x01, 0x00, + 0x05, 0x48, 0x80, 0xb5, 0x00, 0x7f, 0x24, 0x23, + 0x04, 0x49, 0x58, 0x43, 0x40, 0x18, 0x00, 0x6a, + 0x3c, 0x00, 0x20, 0x1c, 0x00, 0x00, 0xfe, 0xf7, + 0xda, 0xfb, 0x80, 0xbd, 0x00, 0x00, 0xd4, 0x79, + 0x01, 0x00, 0x94, 0x46, 0x01, 0x00, 0x80, 0xb5, + 0x04, 0xf0, 0x37, 0xff, 0x00, 0x20, 0x11, 0xf0, + 0x84, 0xfc, 0x00, 0x20, 0x80, 0xbd, 0xb0, 0xb5, + 0x05, 0x4c, 0x05, 0x1c, 0x20, 0x6b, 0xe1, 0x6a, + 0x02, 0xf0, 0xe3, 0xfd, 0x29, 0x1c, 0xa0, 0x6a, + 0x02, 0xf0, 0x11, 0xfb, 0xb0, 0xbd, 0xa4, 0x6c, + 0x01, 0x00, 0x3c, 0x00, 0x5c, 0x1c, 0x00, 0x00, + 0xb0, 0xb5, 0x03, 0x1c, 0x08, 0x1c, 0x14, 0x1c, + 0x00, 0x2b, 0x0c, 0x4d, 0x09, 0xd0, 0x69, 0x69, + 0x89, 0x00, 0x01, 0x31, 0x0a, 0x04, 0x12, 0x0c, + 0x22, 0x80, 0x29, 0x1c, 0xfe, 0xf7, 0x3e, 0xfc, + 0x0a, 0xe0, 0x01, 0x1c, 0x28, 0x1c, 0x22, 0x88, + 0xfe, 0xf7, 0x38, 0xfc, 0x20, 0x88, 0x01, 0x28, + 0x02, 0xd9, 0x80, 0x08, 0x01, 0x38, 0x68, 0x61, + 0x01, 0x20, 0xb0, 0xbd, 0x3c, 0x00, 0x98, 0x1c, + 0x00, 0x00, 0x20, 0x6e, 0x01, 0x00, 0xf1, 0xb5, + 0x00, 0x98, 0x00, 0x26, 0xc1, 0x68, 0x08, 0x68, + 0x09, 0x89, 0x1c, 0x29, 0x34, 0xd3, 0xc1, 0x88, + 0xff, 0x23, 0x01, 0x33, 0x99, 0x42, 0x2f, 0xd1, + 0x01, 0x88, 0xc9, 0x1a, 0x2c, 0xd1, 0x41, 0x88, + 0x08, 0x29, 0x29, 0xd1, 0x01, 0x79, 0x06, 0x29, + 0x26, 0xd1, 0x41, 0x79, 0x04, 0x29, 0x23, 0xd1, + 0x00, 0x25, 0x00, 0x24, 0x07, 0x1c, 0x3c, 0x00, + 0xd4, 0x1c, 0x00, 0x00, 0x18, 0x37, 0x0b, 0xe0, + 0xa0, 0x00, 0x41, 0x18, 0x04, 0x31, 0x04, 0x22, + 0x38, 0x1c, 0xfe, 0xf7, 0x8b, 0xfb, 0x00, 0x28, + 0x01, 0xd1, 0x01, 0x25, 0x04, 0xe0, 0x01, 0x34, + 0x0a, 0x49, 0x48, 0x69, 0xa0, 0x42, 0xef, 0xd8, + 0x08, 0x49, 0x08, 0x78, 0x00, 0x28, 0x0a, 0xd0, + 0x01, 0x28, 0x01, 0xd0, 0x02, 0x28, 0x06, 0xd1, + 0x00, 0x2d, 0x04, 0xd1, 0x00, 0x98, 0xc0, 0x68, + 0x3c, 0x00, 0x10, 0x1d, 0x00, 0x00, 0xff, 0xf7, + 0x42, 0xfc, 0x01, 0x26, 0x30, 0x1c, 0xf8, 0xbd, + 0x00, 0x00, 0x20, 0x6e, 0x01, 0x00, 0x01, 0x48, + 0x40, 0x68, 0x70, 0x47, 0x00, 0x00, 0x20, 0x6e, + 0x01, 0x00, 0x02, 0x49, 0x48, 0x60, 0x01, 0x20, + 0x48, 0x61, 0x70, 0x47, 0x00, 0x00, 0x20, 0x6e, + 0x01, 0x00, 0x70, 0xb5, 0x04, 0x1c, 0x01, 0x26, + 0x03, 0xf0, 0xef, 0xfa, 0x25, 0x1c, 0x10, 0x35, + 0x00, 0x28, 0x3c, 0x00, 0x4c, 0x1d, 0x00, 0x00, + 0x04, 0xd0, 0x00, 0x20, 0x20, 0x77, 0x03, 0xf0, + 0xf1, 0xfb, 0x07, 0xe0, 0x03, 0xf0, 0x38, 0xfd, + 0x00, 0x28, 0x09, 0xd0, 0x01, 0x20, 0x20, 0x77, + 0x03, 0xf0, 0xce, 0xfc, 0x01, 0x1c, 0x06, 0x22, + 0x28, 0x1c, 0xfe, 0xf7, 0xc3, 0xfb, 0x02, 0xe0, + 0x02, 0x20, 0x20, 0x77, 0x00, 0x26, 0x30, 0x1c, + 0x70, 0xbd, 0x00, 0x00, 0x03, 0x48, 0x80, 0x7a, + 0xc0, 0x07, 0x03, 0x49, 0x3c, 0x00, 0x88, 0x1d, + 0x00, 0x00, 0xc0, 0x0f, 0x88, 0x62, 0x70, 0x47, + 0x00, 0x00, 0x40, 0x90, 0x07, 0x00, 0xa4, 0x6c, + 0x01, 0x00, 0x01, 0x49, 0x01, 0x20, 0x88, 0x62, + 0x70, 0x47, 0xa4, 0x6c, 0x01, 0x00, 0x06, 0x48, + 0x80, 0x7a, 0xc1, 0x07, 0x06, 0x4a, 0xc9, 0x0f, + 0x91, 0x62, 0x20, 0x21, 0x80, 0x07, 0x00, 0xd4, + 0x00, 0x21, 0xa0, 0x32, 0x11, 0x70, 0x70, 0x47, + 0x00, 0x00, 0x40, 0x90, 0x07, 0x00, 0x3c, 0x00, + 0xc4, 0x1d, 0x00, 0x00, 0xa4, 0x6c, 0x01, 0x00, + 0x07, 0x4a, 0x12, 0x68, 0x07, 0x4b, 0x9b, 0x69, + 0x1a, 0x40, 0x01, 0xd0, 0x01, 0x22, 0x00, 0xe0, + 0x00, 0x22, 0x0a, 0x60, 0x01, 0x21, 0x00, 0x2a, + 0x00, 0xd0, 0x00, 0x21, 0x01, 0x60, 0x70, 0x47, + 0x10, 0x00, 0x07, 0x00, 0xa4, 0x6c, 0x01, 0x00, + 0x01, 0x22, 0x02, 0x60, 0x0a, 0x60, 0x70, 0x47, + 0xb0, 0xb5, 0x0d, 0x1c, 0x01, 0x1c, 0x58, 0x31, + 0x3c, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x04, 0x1c, + 0x06, 0x22, 0x28, 0x1d, 0xfe, 0xf7, 0x77, 0xfb, + 0x21, 0x1c, 0x5e, 0x31, 0x06, 0x22, 0x28, 0x1c, + 0x0a, 0x30, 0xfe, 0xf7, 0x70, 0xfb, 0x21, 0x1c, + 0x64, 0x31, 0x06, 0x22, 0x28, 0x1c, 0x10, 0x30, + 0xfe, 0xf7, 0x69, 0xfb, 0xb0, 0xbd, 0xfe, 0xb5, + 0x00, 0x25, 0x1d, 0x72, 0x17, 0x1c, 0x0e, 0x1c, + 0xb2, 0x6d, 0x00, 0x21, 0x92, 0x19, 0x50, 0x32, + 0xd2, 0x7a, 0x3c, 0x00, 0x3c, 0x1e, 0x00, 0x00, + 0x1c, 0x1c, 0x5a, 0x72, 0x00, 0x78, 0x32, 0x1c, + 0x80, 0x32, 0xc0, 0x07, 0xc0, 0x17, 0x01, 0x30, + 0x01, 0x90, 0x08, 0x98, 0x02, 0x92, 0x00, 0x28, + 0x01, 0xd1, 0x30, 0x7f, 0x2b, 0xe0, 0x37, 0x48, + 0x00, 0x68, 0x00, 0x28, 0x00, 0xdd, 0x01, 0x1c, + 0x01, 0x98, 0x00, 0x28, 0x02, 0xd0, 0x08, 0x98, + 0x01, 0x28, 0x10, 0xd1, 0x02, 0x9a, 0x90, 0x6b, + 0x00, 0x28, 0x06, 0xd0, 0x3c, 0x00, 0x78, 0x1e, + 0x00, 0x00, 0x88, 0x42, 0x01, 0xd9, 0x45, 0x1a, + 0x01, 0x3d, 0x70, 0x19, 0xb0, 0x30, 0x03, 0xe0, + 0xb5, 0x6d, 0x01, 0x3d, 0x70, 0x19, 0x50, 0x30, + 0x00, 0x7b, 0x0f, 0xe0, 0x02, 0x9a, 0x10, 0x6a, + 0x00, 0x28, 0x07, 0xd0, 0x88, 0x42, 0x01, 0xd9, + 0x45, 0x1a, 0x01, 0x3d, 0x70, 0x19, 0xa0, 0x30, + 0x00, 0x79, 0x03, 0xe0, 0xbd, 0x69, 0x01, 0x3d, + 0x78, 0x19, 0x00, 0x7f, 0xa0, 0x72, 0x3c, 0x00, + 0xb4, 0x1e, 0x00, 0x00, 0x0e, 0xf0, 0x0c, 0xf8, + 0x0e, 0x28, 0x11, 0xd1, 0xa0, 0x7a, 0x08, 0xf0, + 0x67, 0xff, 0x00, 0x28, 0x0c, 0xd0, 0x78, 0x68, + 0x00, 0x28, 0x05, 0xd1, 0x1b, 0x48, 0x00, 0x25, + 0x00, 0x78, 0x08, 0xf0, 0x4b, 0xff, 0x02, 0xe0, + 0x45, 0x1e, 0x78, 0x19, 0x00, 0x7a, 0xa0, 0x72, + 0x02, 0x9a, 0x50, 0x69, 0x00, 0x28, 0x17, 0xd0, + 0x08, 0x98, 0x01, 0x28, 0x14, 0xd0, 0xa0, 0x7a, + 0x3c, 0x00, 0xf0, 0x1e, 0x00, 0x00, 0x08, 0xf0, + 0x4e, 0xff, 0x00, 0x28, 0x0f, 0xd0, 0x01, 0x98, + 0x00, 0x28, 0x07, 0xd0, 0x02, 0x20, 0x20, 0x72, + 0x70, 0x6c, 0x80, 0x19, 0x40, 0x30, 0xc0, 0x79, + 0x60, 0x72, 0x04, 0xe0, 0x7d, 0x68, 0x01, 0x3d, + 0x78, 0x19, 0x00, 0x7a, 0xa0, 0x72, 0x02, 0x9a, + 0xa0, 0x7a, 0x91, 0x69, 0x08, 0xf0, 0x51, 0xff, + 0x20, 0x60, 0x02, 0x9a, 0x60, 0x7a, 0x91, 0x69, + 0x08, 0xf0, 0x3c, 0x00, 0x2c, 0x1f, 0x00, 0x00, + 0x4b, 0xff, 0x60, 0x60, 0xa0, 0x7a, 0xe0, 0x72, + 0x25, 0x73, 0xfe, 0xbd, 0xd4, 0x7e, 0x01, 0x00, + 0x90, 0x57, 0x01, 0x00, 0x00, 0x06, 0x00, 0x0e, + 0x00, 0x2a, 0x8c, 0xb5, 0x01, 0xd0, 0x8a, 0x22, + 0x00, 0xe0, 0x88, 0x22, 0x00, 0xab, 0x1a, 0x80, + 0x0c, 0xf0, 0xc2, 0xf8, 0x01, 0x90, 0x68, 0x46, + 0x0b, 0xf0, 0xbc, 0xfa, 0x8c, 0xbd, 0x00, 0x00, + 0x01, 0x1c, 0x08, 0x48, 0x3c, 0x00, 0x68, 0x1f, + 0x00, 0x00, 0x80, 0xb5, 0x00, 0x68, 0x00, 0x28, + 0x09, 0xd0, 0x49, 0x68, 0x02, 0x20, 0x00, 0x29, + 0x00, 0xd1, 0x01, 0x20, 0x01, 0x06, 0x09, 0x0e, + 0x00, 0x20, 0x06, 0xf0, 0xd8, 0xff, 0x80, 0xbd, + 0x00, 0x00, 0x20, 0x67, 0x01, 0x00, 0x1c, 0xb5, + 0x01, 0x90, 0x04, 0x1c, 0x44, 0x30, 0x01, 0xaa, + 0x69, 0x46, 0x11, 0xf0, 0xb8, 0xfd, 0x00, 0x28, + 0x0b, 0xd0, 0xa0, 0x69, 0x00, 0x21, 0x3c, 0x00, + 0xa4, 0x1f, 0x00, 0x00, 0xc2, 0x07, 0xd2, 0x0f, + 0x02, 0x20, 0xff, 0xf7, 0xc9, 0xff, 0x00, 0x21, + 0x20, 0x1c, 0x0f, 0xf0, 0xd9, 0xfe, 0x1c, 0xbd, + 0x04, 0x21, 0x98, 0x20, 0xff, 0xf7, 0x72, 0xf9, + 0xf9, 0xe7, 0x00, 0x00, 0x8c, 0xb5, 0x00, 0xab, + 0x84, 0x21, 0x19, 0x80, 0x05, 0x4b, 0x02, 0x1c, + 0x18, 0x1c, 0x99, 0x8a, 0x0c, 0xf0, 0x8e, 0xf8, + 0x01, 0x90, 0x68, 0x46, 0x0b, 0xf0, 0x7c, 0xfa, + 0x3c, 0x00, 0xe0, 0x1f, 0x00, 0x00, 0x8c, 0xbd, + 0x00, 0x00, 0x70, 0x7c, 0x01, 0x00, 0x70, 0x47, + 0x00, 0x00, 0x06, 0x49, 0x80, 0xb5, 0xc9, 0x68, + 0x14, 0x23, 0x40, 0x31, 0x89, 0x7a, 0x04, 0x4a, + 0x59, 0x43, 0x89, 0x18, 0x80, 0x00, 0x08, 0x58, + 0xfe, 0xf7, 0xe9, 0xf9, 0x80, 0xbd, 0x70, 0x7c, + 0x01, 0x00, 0x54, 0x47, 0x01, 0x00, 0x80, 0xb5, + 0x00, 0x20, 0xff, 0xf7, 0xd6, 0xff, 0x80, 0xbd, + 0x00, 0x00, 0x3c, 0x00, 0x1c, 0x20, 0x00, 0x00, + 0x80, 0xb5, 0x12, 0x48, 0x11, 0x49, 0x80, 0x8a, + 0x0a, 0x8b, 0x00, 0x21, 0x00, 0x28, 0xc2, 0xb0, + 0x0c, 0xd1, 0x01, 0x2a, 0x05, 0xd0, 0x02, 0x2a, + 0x15, 0xd0, 0x00, 0xab, 0x5a, 0x80, 0x0e, 0x22, + 0x07, 0xe0, 0x02, 0x22, 0x00, 0xab, 0x5a, 0x80, + 0x99, 0x80, 0x04, 0xe0, 0x00, 0xab, 0x5a, 0x80, + 0x0d, 0x22, 0x00, 0xab, 0x9a, 0x80, 0x00, 0xab, + 0x18, 0x80, 0xff, 0x20, 0x3c, 0x00, 0x58, 0x20, + 0x00, 0x00, 0x98, 0x71, 0xd9, 0x71, 0x68, 0x46, + 0x00, 0xf0, 0xd1, 0xf9, 0x42, 0xb0, 0x80, 0xbd, + 0x00, 0x00, 0x70, 0x7c, 0x01, 0x00, 0x10, 0xb5, + 0x09, 0xf0, 0x5f, 0xfc, 0x00, 0x20, 0x05, 0xf0, + 0x2a, 0xf9, 0x03, 0x4c, 0xe0, 0x8a, 0x05, 0xf0, + 0x36, 0xf9, 0x20, 0x1c, 0x0f, 0xf0, 0xb3, 0xfe, + 0x10, 0xbd, 0x70, 0x7c, 0x01, 0x00, 0x1c, 0xb5, + 0x09, 0xf0, 0x4f, 0xfc, 0x07, 0x20, 0x3c, 0x00, + 0x94, 0x20, 0x00, 0x00, 0x00, 0xab, 0x07, 0x4c, + 0x18, 0x80, 0xe1, 0x8a, 0x20, 0x1c, 0x0c, 0xf0, + 0x0b, 0xf8, 0x01, 0x90, 0x68, 0x46, 0x0b, 0xf0, + 0x17, 0xfa, 0x20, 0x1c, 0x0f, 0xf0, 0x9e, 0xfe, + 0x1c, 0xbd, 0x00, 0x00, 0x70, 0x7c, 0x01, 0x00, + 0x80, 0xb5, 0x02, 0x21, 0x98, 0x20, 0xff, 0xf7, + 0xf1, 0xf8, 0x80, 0xbd, 0x10, 0xb5, 0x15, 0x4c, + 0xc2, 0xb0, 0xa0, 0x8a, 0x00, 0x28, 0x03, 0xd0, + 0x3c, 0x00, 0xd0, 0x20, 0x00, 0x00, 0x01, 0x28, + 0x1e, 0xd1, 0x02, 0x20, 0x00, 0xe0, 0x01, 0x20, + 0xe1, 0x68, 0x40, 0x31, 0x88, 0x72, 0x20, 0x69, + 0x08, 0xf0, 0x23, 0xfd, 0x02, 0x1c, 0x0c, 0x48, + 0x18, 0x38, 0x80, 0x88, 0xe1, 0x68, 0x0f, 0xf0, + 0xa4, 0xfe, 0xa0, 0x8a, 0x00, 0xab, 0x18, 0x80, + 0x01, 0x20, 0x58, 0x80, 0x00, 0x20, 0x98, 0x80, + 0xff, 0x21, 0x99, 0x71, 0xd8, 0x71, 0x68, 0x46, + 0x00, 0xf0, 0x3c, 0x00, 0x0c, 0x21, 0x00, 0x00, + 0x7b, 0xf9, 0x42, 0xb0, 0x10, 0xbd, 0x03, 0x21, + 0x98, 0x20, 0xff, 0xf7, 0xc5, 0xf8, 0xf8, 0xe7, + 0x70, 0x7c, 0x01, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x80, 0xb5, 0x03, 0x48, 0x0f, 0xf0, 0x60, 0xfe, + 0x00, 0x20, 0x05, 0xf0, 0xcd, 0xf8, 0x80, 0xbd, + 0x70, 0x7c, 0x01, 0x00, 0x80, 0xb5, 0x02, 0x48, + 0x0f, 0xf0, 0x56, 0xfe, 0x80, 0xbd, 0x00, 0x00, + 0x70, 0x7c, 0x01, 0x00, 0x3c, 0x00, 0x48, 0x21, + 0x00, 0x00, 0x80, 0xb5, 0x02, 0x21, 0x98, 0x20, + 0xff, 0xf7, 0xa9, 0xf8, 0x80, 0xbd, 0x80, 0xb5, + 0x03, 0x20, 0xff, 0xf7, 0x34, 0xff, 0x80, 0xbd, + 0x00, 0x00, 0xf0, 0xb5, 0x21, 0x4e, 0x00, 0x27, + 0xb1, 0x8a, 0x30, 0x1c, 0x00, 0x25, 0x04, 0x24, + 0x00, 0x29, 0x00, 0x8b, 0xc3, 0xb0, 0x1e, 0xd1, + 0x01, 0x28, 0x07, 0xd0, 0x31, 0x1c, 0x49, 0x8b, + 0x02, 0x28, 0x12, 0xd1, 0x00, 0x29, 0x3c, 0x00, + 0x84, 0x21, 0x00, 0x00, 0x07, 0xd1, 0x00, 0x24, + 0x05, 0xe0, 0x00, 0x24, 0x01, 0x25, 0x02, 0x20, + 0x00, 0xab, 0xd8, 0x80, 0x1f, 0x81, 0x0f, 0xf0, + 0x7f, 0xff, 0x00, 0x2c, 0x10, 0xd1, 0xf1, 0x68, + 0x05, 0x20, 0x40, 0x31, 0x88, 0x72, 0x0e, 0xe0, + 0x00, 0x29, 0x1a, 0xd1, 0x00, 0xab, 0xd8, 0x80, + 0x0e, 0x20, 0x02, 0xe0, 0x00, 0xab, 0xd8, 0x80, + 0x0d, 0x20, 0x00, 0xab, 0x18, 0x81, 0x07, 0xe0, + 0x3c, 0x00, 0xc0, 0x21, 0x00, 0x00, 0x30, 0x1c, + 0x0f, 0xf0, 0x13, 0xfe, 0x20, 0x1c, 0xff, 0xf7, + 0xfc, 0xfe, 0x00, 0x2d, 0x08, 0xd0, 0xb0, 0x8a, + 0x00, 0xab, 0x98, 0x80, 0xff, 0x20, 0x98, 0x72, + 0xdf, 0x72, 0x01, 0xa8, 0x00, 0xf0, 0x11, 0xf9, + 0x43, 0xb0, 0xf0, 0xbd, 0x00, 0x00, 0x70, 0x7c, + 0x01, 0x00, 0x10, 0xb5, 0x00, 0x20, 0x05, 0xf0, + 0x6c, 0xf8, 0x04, 0x4c, 0xe0, 0x8a, 0x05, 0xf0, + 0x78, 0xf8, 0x3c, 0x00, 0xfc, 0x21, 0x00, 0x00, + 0x0f, 0xf0, 0x4c, 0xff, 0x20, 0x1c, 0x0f, 0xf0, + 0xf3, 0xfd, 0x10, 0xbd, 0x70, 0x7c, 0x01, 0x00, + 0x80, 0xb5, 0x04, 0x20, 0xff, 0xf7, 0xd8, 0xfe, + 0x01, 0x48, 0x0f, 0xf0, 0xe9, 0xfd, 0x80, 0xbd, + 0x70, 0x7c, 0x01, 0x00, 0x80, 0xb5, 0x02, 0x20, + 0xff, 0xf7, 0xce, 0xfe, 0x01, 0x20, 0x05, 0xf0, + 0x5f, 0xf8, 0x02, 0x48, 0x0f, 0xf0, 0xdc, 0xfd, + 0x80, 0xbd, 0x00, 0x00, 0x3c, 0x00, 0x38, 0x22, + 0x00, 0x00, 0x70, 0x7c, 0x01, 0x00, 0x80, 0xb5, + 0x03, 0x20, 0xff, 0xf7, 0xc0, 0xfe, 0x80, 0xbd, + 0x00, 0x00, 0xb0, 0xb5, 0x1d, 0x4d, 0xc2, 0xb0, + 0x28, 0x8b, 0x00, 0xab, 0xff, 0x21, 0x58, 0x80, + 0x99, 0x71, 0x00, 0x21, 0xd9, 0x71, 0xaa, 0x8a, + 0x00, 0x24, 0x01, 0x2a, 0x18, 0xd1, 0x2a, 0x1c, + 0x52, 0x8b, 0x02, 0x28, 0x0f, 0xd1, 0x00, 0x2a, + 0x16, 0xd1, 0x03, 0x20, 0x58, 0x80, 0x3c, 0x00, + 0x74, 0x22, 0x00, 0x00, 0x99, 0x80, 0x2c, 0x1c, + 0xff, 0x22, 0x98, 0x1d, 0xe9, 0x69, 0xfe, 0xf7, + 0x3b, 0xf9, 0xe1, 0x68, 0x04, 0x20, 0x40, 0x31, + 0x88, 0x72, 0x10, 0xe0, 0x00, 0x2a, 0x06, 0xd1, + 0x01, 0x24, 0x0e, 0x20, 0x01, 0xe0, 0x01, 0x24, + 0x0d, 0x20, 0x00, 0xab, 0x98, 0x80, 0x28, 0x1c, + 0x0f, 0xf0, 0xa4, 0xfd, 0x04, 0x20, 0xff, 0xf7, + 0x8d, 0xfe, 0x00, 0x2c, 0x05, 0xd0, 0xa8, 0x8a, + 0x3c, 0x00, 0xb0, 0x22, 0x00, 0x00, 0x00, 0xab, + 0x18, 0x80, 0x68, 0x46, 0x00, 0xf0, 0xa5, 0xf8, + 0x42, 0xb0, 0xb0, 0xbd, 0x00, 0x00, 0x70, 0x7c, + 0x01, 0x00, 0x10, 0xb5, 0x00, 0x20, 0x05, 0xf0, + 0x00, 0xf8, 0x03, 0x4c, 0xe0, 0x8a, 0x05, 0xf0, + 0x0c, 0xf8, 0x20, 0x1c, 0x0f, 0xf0, 0x89, 0xfd, + 0x10, 0xbd, 0x70, 0x7c, 0x01, 0x00, 0x80, 0xb5, + 0x04, 0x20, 0xff, 0xf7, 0x6e, 0xfe, 0x01, 0x48, + 0x0f, 0xf0, 0x3c, 0x00, 0xec, 0x22, 0x00, 0x00, + 0x7f, 0xfd, 0x80, 0xbd, 0x70, 0x7c, 0x01, 0x00, + 0x80, 0xb5, 0x02, 0x20, 0xff, 0xf7, 0x64, 0xfe, + 0x01, 0x20, 0x04, 0xf0, 0xf5, 0xff, 0x02, 0x48, + 0x0f, 0xf0, 0x72, 0xfd, 0x80, 0xbd, 0x00, 0x00, + 0x70, 0x7c, 0x01, 0x00, 0x80, 0xb5, 0x03, 0x20, + 0xff, 0xf7, 0x56, 0xfe, 0x80, 0xbd, 0x00, 0x00, + 0xb0, 0xb5, 0x19, 0x4d, 0x04, 0x24, 0xa9, 0x8a, + 0x28, 0x1c, 0x02, 0x8b, 0x3c, 0x00, 0x28, 0x23, + 0x00, 0x00, 0xc2, 0xb0, 0x01, 0x29, 0x14, 0xd1, + 0x40, 0x8b, 0x04, 0x2a, 0x0b, 0xd1, 0x00, 0x28, + 0x00, 0xd1, 0x00, 0x24, 0x0f, 0xf0, 0xad, 0xfe, + 0x00, 0x2c, 0x19, 0xd1, 0xe9, 0x68, 0x05, 0x20, + 0x40, 0x31, 0x88, 0x72, 0x17, 0xe0, 0x00, 0x28, + 0x10, 0xd1, 0x00, 0xab, 0x5a, 0x80, 0x0e, 0x20, + 0x02, 0xe0, 0x00, 0xab, 0x5a, 0x80, 0x0d, 0x20, + 0x00, 0xab, 0x98, 0x80, 0x19, 0x80, 0x3c, 0x00, + 0x64, 0x23, 0x00, 0x00, 0xff, 0x20, 0x98, 0x71, + 0x00, 0x20, 0xd8, 0x71, 0x68, 0x46, 0x00, 0xf0, + 0x49, 0xf8, 0x42, 0xb0, 0xb0, 0xbd, 0x28, 0x1c, + 0x0f, 0xf0, 0x38, 0xfd, 0x20, 0x1c, 0xff, 0xf7, + 0x21, 0xfe, 0xf6, 0xe7, 0x70, 0x7c, 0x01, 0x00, + 0x10, 0xb5, 0x00, 0x20, 0x04, 0xf0, 0x9e, 0xff, + 0x03, 0x4c, 0xe0, 0x8a, 0x04, 0xf0, 0xaa, 0xff, + 0x20, 0x1c, 0x0f, 0xf0, 0x27, 0xfd, 0x10, 0xbd, + 0x3c, 0x00, 0xa0, 0x23, 0x00, 0x00, 0x70, 0x7c, + 0x01, 0x00, 0x80, 0xb5, 0x04, 0x20, 0xff, 0xf7, + 0x0c, 0xfe, 0x01, 0x48, 0x0f, 0xf0, 0x1d, 0xfd, + 0x80, 0xbd, 0x70, 0x7c, 0x01, 0x00, 0x80, 0xb5, + 0x02, 0x20, 0xff, 0xf7, 0x02, 0xfe, 0x01, 0x20, + 0x04, 0xf0, 0x93, 0xff, 0x02, 0x48, 0x0f, 0xf0, + 0x10, 0xfd, 0x80, 0xbd, 0x00, 0x00, 0x70, 0x7c, + 0x01, 0x00, 0xb0, 0xb5, 0x0a, 0x4d, 0x01, 0x1c, + 0x44, 0x31, 0x3c, 0x00, 0xdc, 0x23, 0x00, 0x00, + 0x04, 0x1c, 0x06, 0x22, 0x28, 0x1c, 0xfe, 0xf7, + 0x89, 0xf8, 0xec, 0x60, 0x20, 0x69, 0x03, 0xf0, + 0x97, 0xf8, 0x01, 0x1c, 0x06, 0x22, 0xa8, 0x18, + 0xfe, 0xf7, 0x80, 0xf8, 0x04, 0x20, 0xff, 0xf7, + 0xf7, 0xfd, 0xb0, 0xbd, 0x70, 0x7c, 0x01, 0x00, + 0x90, 0xb5, 0x04, 0x1c, 0x80, 0x88, 0x93, 0xb0, + 0x00, 0x28, 0x06, 0xd0, 0x15, 0x49, 0x06, 0x22, + 0x48, 0x80, 0x18, 0x31, 0x3c, 0x00, 0x18, 0x24, + 0x00, 0x00, 0x88, 0x1f, 0xfe, 0xf7, 0x6d, 0xf8, + 0x68, 0x46, 0x0c, 0xf0, 0x14, 0xf8, 0x20, 0x88, + 0x01, 0x28, 0x08, 0xd1, 0x60, 0x88, 0x03, 0x28, + 0x05, 0xd1, 0xa0, 0x88, 0x00, 0x28, 0x02, 0xd1, + 0x06, 0x20, 0x0c, 0xa9, 0x08, 0x70, 0xa0, 0x79, + 0x06, 0x21, 0xff, 0x28, 0x04, 0xd0, 0xe0, 0x79, + 0x00, 0x28, 0x01, 0xd0, 0x01, 0x1c, 0x08, 0x31, + 0x0b, 0x20, 0x08, 0xaa, 0x50, 0x72, 0x3c, 0x00, + 0x54, 0x24, 0x00, 0x00, 0x20, 0x1c, 0x08, 0xf0, + 0x3b, 0xff, 0x03, 0x90, 0x68, 0x46, 0x0b, 0xf0, + 0x31, 0xf8, 0x13, 0xb0, 0x90, 0xbd, 0x00, 0x00, + 0x58, 0x7c, 0x01, 0x00, 0x07, 0x4b, 0x1a, 0x78, + 0x82, 0x42, 0x01, 0xd0, 0x00, 0x29, 0x07, 0xd0, + 0xff, 0x20, 0x18, 0x70, 0x04, 0x48, 0x01, 0x88, + 0x01, 0x22, 0x52, 0x03, 0x91, 0x43, 0x01, 0x80, + 0x70, 0x47, 0x00, 0x00, 0x4c, 0x7b, 0x01, 0x00, + 0x3c, 0x00, 0x90, 0x24, 0x00, 0x00, 0x32, 0x80, + 0x07, 0x00, 0x10, 0xb5, 0x04, 0x1c, 0x0c, 0x23, + 0x07, 0x49, 0x58, 0x43, 0x40, 0x18, 0x00, 0x79, + 0x0a, 0xf0, 0x4f, 0xf9, 0x01, 0x20, 0x03, 0x49, + 0xa0, 0x40, 0x08, 0x39, 0x0a, 0x78, 0x10, 0x43, + 0x08, 0x70, 0x10, 0xbd, 0x00, 0x00, 0x74, 0x7a, + 0x01, 0x00, 0x03, 0x4a, 0x00, 0x21, 0x11, 0x54, + 0x80, 0x00, 0x30, 0x32, 0x10, 0x58, 0x01, 0x70, + 0x70, 0x47, 0x3c, 0x00, 0xcc, 0x24, 0x00, 0x00, + 0xe0, 0x7a, 0x01, 0x00, 0x10, 0xb5, 0x04, 0x1c, + 0x05, 0x28, 0x01, 0xd3, 0xfe, 0xf7, 0x12, 0xff, + 0x20, 0x1c, 0xff, 0xf7, 0xed, 0xff, 0x00, 0x21, + 0x20, 0x1c, 0x0e, 0xf0, 0x89, 0xfb, 0x10, 0xbd, + 0x05, 0x49, 0x80, 0xb5, 0x88, 0x60, 0x08, 0x7f, + 0x24, 0x23, 0x04, 0x49, 0x58, 0x43, 0x08, 0x58, + 0xfd, 0xf7, 0x6c, 0xff, 0x80, 0xbd, 0x00, 0x00, + 0xd4, 0x79, 0x01, 0x00, 0x3c, 0x00, 0x08, 0x25, + 0x00, 0x00, 0x94, 0x46, 0x01, 0x00, 0x80, 0xb5, + 0x01, 0x21, 0x91, 0x20, 0xfe, 0xf7, 0xc7, 0xfe, + 0x80, 0xbd, 0x02, 0x4a, 0x11, 0x68, 0x81, 0x43, + 0x11, 0x60, 0x70, 0x47, 0x00, 0x00, 0x78, 0x6e, + 0x01, 0x00, 0x80, 0xb5, 0xfe, 0xf7, 0xe9, 0xfe, + 0x80, 0xbd, 0x80, 0xb5, 0xfe, 0xf7, 0xe5, 0xfe, + 0x80, 0xbd, 0x80, 0xb5, 0x00, 0xf0, 0x31, 0xfa, + 0x80, 0xbd, 0x03, 0x49, 0x80, 0xb5, 0x3c, 0x00, + 0x44, 0x25, 0x00, 0x00, 0x04, 0x20, 0x88, 0x60, + 0x00, 0xf0, 0xd0, 0xf9, 0x80, 0xbd, 0x00, 0x00, + 0x00, 0x30, 0x07, 0x00, 0x80, 0xb5, 0x00, 0xf0, + 0x99, 0xfa, 0x80, 0xbd, 0x80, 0xb5, 0x00, 0xf0, + 0x99, 0xfb, 0x80, 0xbd, 0x38, 0xb5, 0x20, 0x28, + 0x15, 0xd2, 0x0d, 0x4c, 0x22, 0x1c, 0x20, 0x32, + 0x95, 0x79, 0x00, 0xab, 0x1d, 0x70, 0xd2, 0x79, + 0x5a, 0x70, 0x0a, 0x4b, 0x82, 0x00, 0x99, 0x50, + 0x3c, 0x00, 0x80, 0x25, 0x00, 0x00, 0x01, 0x21, + 0x81, 0x40, 0x08, 0x48, 0x01, 0x60, 0x42, 0x68, + 0x11, 0x43, 0x41, 0x60, 0x00, 0xab, 0x18, 0x88, + 0xe0, 0x84, 0x38, 0xbd, 0x01, 0x21, 0xff, 0x20, + 0xfe, 0xf7, 0x83, 0xfe, 0xf9, 0xe7, 0x00, 0x10, + 0x07, 0x00, 0x30, 0x74, 0x01, 0x00, 0x00, 0x40, + 0x07, 0x00, 0x20, 0x28, 0x09, 0xd2, 0x05, 0x49, + 0x06, 0x4b, 0x82, 0x00, 0x99, 0x50, 0x05, 0x4a, + 0x51, 0x68, 0x3c, 0x00, 0xbc, 0x25, 0x00, 0x00, + 0x01, 0x23, 0x83, 0x40, 0x99, 0x43, 0x51, 0x60, + 0x70, 0x47, 0x00, 0x00, 0xa9, 0x75, 0x00, 0x00, + 0x30, 0x74, 0x01, 0x00, 0x00, 0x40, 0x07, 0x00, + 0x02, 0x4a, 0x11, 0x68, 0x08, 0x43, 0x10, 0x60, + 0x70, 0x47, 0x00, 0x00, 0x78, 0x6e, 0x01, 0x00, + 0x0b, 0x48, 0x01, 0x68, 0x03, 0x22, 0x12, 0x04, + 0x11, 0x43, 0x01, 0x60, 0x01, 0x68, 0x07, 0x22, + 0x12, 0x06, 0x91, 0x43, 0x3c, 0x00, 0xf8, 0x25, + 0x00, 0x00, 0x01, 0x22, 0x52, 0x06, 0x89, 0x18, + 0x01, 0x60, 0x01, 0x68, 0x12, 0x0c, 0x11, 0x43, + 0x01, 0x60, 0x01, 0x68, 0x52, 0x08, 0x11, 0x43, + 0x01, 0x60, 0x70, 0x47, 0x00, 0x00, 0x80, 0x00, + 0x07, 0x00, 0xfe, 0xb5, 0x1c, 0x4e, 0x05, 0x1c, + 0xb0, 0x8a, 0xf2, 0x68, 0x12, 0xd0, 0x01, 0x24, + 0x00, 0x29, 0x09, 0xd1, 0x11, 0x6d, 0x02, 0xaa, + 0x01, 0xab, 0xfe, 0xf7, 0xf8, 0xfe, 0x3c, 0x00, + 0x34, 0x26, 0x00, 0x00, 0x02, 0x98, 0x00, 0x28, + 0x01, 0xd0, 0x00, 0x24, 0x0b, 0xe0, 0x01, 0xaa, + 0x02, 0xa9, 0x28, 0x1c, 0xfe, 0xf7, 0x70, 0xff, + 0x05, 0xe0, 0x11, 0x6d, 0x02, 0xaa, 0x00, 0x24, + 0x01, 0xab, 0xfe, 0xf7, 0x01, 0xff, 0x0e, 0x49, + 0x08, 0x1c, 0x20, 0x30, 0x82, 0x79, 0x00, 0xab, + 0x1a, 0x70, 0xc0, 0x79, 0x58, 0x70, 0x30, 0x68, + 0x00, 0x28, 0x02, 0xd1, 0x02, 0x98, 0x30, 0x60, + 0x3c, 0x00, 0x70, 0x26, 0x00, 0x00, 0x02, 0xe0, + 0x02, 0x98, 0x72, 0x68, 0xd0, 0x60, 0x01, 0x98, + 0x00, 0xab, 0x70, 0x60, 0x18, 0x88, 0xc8, 0x84, + 0xf0, 0x68, 0xc0, 0x6c, 0xf0, 0x60, 0x20, 0x1c, + 0xfe, 0xbd, 0x24, 0x7e, 0x01, 0x00, 0x00, 0x10, + 0x07, 0x00, 0xf8, 0xb5, 0x04, 0x1c, 0x54, 0x27, + 0x1d, 0x4e, 0x00, 0x20, 0x30, 0x60, 0x70, 0x60, + 0x67, 0x43, 0x38, 0x04, 0x15, 0x1c, 0x00, 0x0c, + 0xb1, 0x82, 0x3c, 0x00, 0xac, 0x26, 0x00, 0x00, + 0xff, 0xf7, 0x96, 0xf8, 0x08, 0x21, 0x30, 0x61, + 0x00, 0x26, 0x17, 0x4a, 0x14, 0xe0, 0x03, 0x1c, + 0x24, 0x33, 0x42, 0x61, 0x03, 0x61, 0xc6, 0x61, + 0x01, 0x83, 0x08, 0x33, 0x03, 0x60, 0xb1, 0x23, + 0x43, 0x60, 0x03, 0x1c, 0x64, 0x33, 0xc3, 0x60, + 0x0c, 0x23, 0x03, 0x81, 0x03, 0x1c, 0x54, 0x33, + 0x4c, 0x30, 0x28, 0xc0, 0x01, 0x3c, 0x18, 0x1c, + 0x00, 0x2c, 0xe8, 0xd1, 0x3c, 0x00, 0xe8, 0x26, + 0x00, 0x00, 0x09, 0x4e, 0x07, 0x22, 0x30, 0x69, + 0xd2, 0x43, 0xc1, 0x19, 0x50, 0x50, 0x02, 0x1c, + 0x10, 0x32, 0x80, 0x39, 0x8a, 0x63, 0xf0, 0x60, + 0xb0, 0x60, 0x00, 0x21, 0x00, 0x20, 0xff, 0xf7, + 0x88, 0xff, 0x30, 0x69, 0xf0, 0x60, 0xb0, 0x60, + 0xf8, 0xbd, 0x24, 0x7e, 0x01, 0x00, 0x91, 0x00, + 0x05, 0x00, 0x01, 0x48, 0x40, 0x6a, 0x70, 0x47, + 0x00, 0x00, 0xe8, 0x7d, 0x01, 0x00, 0x3c, 0x00, + 0x24, 0x27, 0x00, 0x00, 0x01, 0x48, 0x00, 0x88, + 0x70, 0x47, 0x00, 0x00, 0xfc, 0x6b, 0x01, 0x00, + 0x06, 0x49, 0x80, 0xb5, 0x08, 0x88, 0x01, 0x30, + 0x08, 0x80, 0x05, 0x49, 0x08, 0x20, 0x08, 0x60, + 0x04, 0x49, 0x88, 0x69, 0x88, 0x61, 0x00, 0xf0, + 0x21, 0xf8, 0x80, 0xbd, 0xfc, 0x6b, 0x01, 0x00, + 0x00, 0x10, 0x07, 0x00, 0x00, 0x30, 0x07, 0x00, + 0x03, 0x4a, 0x01, 0x20, 0x12, 0x1d, 0x06, 0xca, + 0x3c, 0x00, 0x60, 0x27, 0x00, 0x00, 0x91, 0x42, + 0x00, 0xd1, 0x00, 0x20, 0x70, 0x47, 0xe8, 0x7d, + 0x01, 0x00, 0x06, 0x48, 0x00, 0xb5, 0xc0, 0x7c, + 0x00, 0x28, 0x03, 0xd1, 0xff, 0xf7, 0xef, 0xff, + 0x00, 0x28, 0x01, 0xd0, 0x01, 0x20, 0x00, 0xbd, + 0x00, 0x20, 0x00, 0xbd, 0x00, 0x00, 0xa0, 0x80, + 0x07, 0x00, 0x10, 0xb5, 0x04, 0x1c, 0x80, 0x07, + 0x02, 0xd5, 0x06, 0xf0, 0x3e, 0xfd, 0x03, 0xe0, + 0xe0, 0x07, 0x3c, 0x00, 0x9c, 0x27, 0x00, 0x00, + 0x01, 0xd5, 0x06, 0xf0, 0xe3, 0xfd, 0x60, 0x07, + 0x01, 0xd5, 0xfe, 0xf7, 0xab, 0xfd, 0x10, 0xbd, + 0x02, 0x4a, 0x01, 0x1c, 0x10, 0x68, 0x11, 0x60, + 0x70, 0x47, 0x00, 0x00, 0xe8, 0x7d, 0x01, 0x00, + 0x38, 0xb5, 0x20, 0x4d, 0x2c, 0x1c, 0x20, 0x34, + 0xa0, 0x79, 0x00, 0xab, 0x18, 0x70, 0xe0, 0x79, + 0x58, 0x70, 0xfe, 0xf7, 0x27, 0xfa, 0x00, 0xab, + 0x18, 0x88, 0xe8, 0x84, 0x3c, 0x00, 0xd8, 0x27, + 0x00, 0x00, 0x1a, 0x48, 0x81, 0x78, 0x08, 0x22, + 0x91, 0x43, 0x81, 0x70, 0x81, 0x78, 0x11, 0x43, + 0x81, 0x70, 0x17, 0x48, 0x41, 0x68, 0x80, 0x22, + 0x91, 0x43, 0x41, 0x60, 0x01, 0x68, 0x11, 0x43, + 0x01, 0x60, 0x00, 0x20, 0x01, 0x30, 0x64, 0x28, + 0xfc, 0xd3, 0xa0, 0x79, 0x0f, 0x4d, 0x00, 0xab, + 0x18, 0x70, 0xe0, 0x79, 0x10, 0x4c, 0x58, 0x70, + 0x20, 0x1c, 0x10, 0x30, 0x00, 0xf0, 0x3c, 0x00, + 0x14, 0x28, 0x00, 0x00, 0xdf, 0xfb, 0x00, 0x20, + 0xc0, 0x43, 0xa0, 0x61, 0xff, 0xf7, 0x9c, 0xff, + 0x00, 0x28, 0x09, 0xd0, 0x0a, 0x49, 0x08, 0x69, + 0x01, 0x30, 0x08, 0x61, 0x00, 0x20, 0x3c, 0x31, + 0x89, 0x68, 0x48, 0x63, 0x06, 0xf0, 0xee, 0xfc, + 0x00, 0xab, 0x18, 0x88, 0xe8, 0x84, 0x38, 0xbd, + 0x00, 0x10, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, + 0xf4, 0x00, 0x07, 0x00, 0x00, 0x30, 0x07, 0x00, + 0x3c, 0x00, 0x50, 0x28, 0x00, 0x00, 0xe8, 0x7d, + 0x01, 0x00, 0x0a, 0x48, 0x80, 0xb5, 0x00, 0x6a, + 0x00, 0x28, 0x01, 0xd0, 0xfe, 0xf7, 0xc1, 0xf9, + 0x07, 0x48, 0x07, 0x49, 0x3c, 0x30, 0x80, 0x68, + 0x10, 0x30, 0x48, 0x61, 0x01, 0x20, 0x08, 0x61, + 0x05, 0x49, 0x08, 0x68, 0x80, 0x22, 0x90, 0x43, + 0x08, 0x60, 0x80, 0xbd, 0x00, 0x00, 0xe8, 0x7d, + 0x01, 0x00, 0x00, 0x30, 0x07, 0x00, 0xf4, 0x00, + 0x07, 0x00, 0x3c, 0x00, 0x8c, 0x28, 0x00, 0x00, + 0x80, 0xb5, 0x0c, 0xf0, 0xcb, 0xfe, 0x06, 0xf0, + 0xbf, 0xfc, 0x80, 0xbd, 0x01, 0x49, 0xc8, 0x62, + 0x70, 0x47, 0x00, 0x00, 0xe8, 0x7d, 0x01, 0x00, + 0x02, 0x4a, 0x91, 0x6a, 0x08, 0x43, 0x90, 0x62, + 0x70, 0x47, 0x00, 0x00, 0xe8, 0x7d, 0x01, 0x00, + 0x18, 0x23, 0x06, 0x49, 0x58, 0x43, 0x40, 0x18, + 0x00, 0x21, 0x02, 0x79, 0x03, 0x68, 0x1a, 0x70, + 0x01, 0x31, 0x08, 0x30, 0x3c, 0x00, 0xc8, 0x28, + 0x00, 0x00, 0x03, 0x29, 0xf8, 0xd3, 0x70, 0x47, + 0x00, 0x00, 0x28, 0x52, 0x01, 0x00, 0x03, 0x49, + 0x00, 0x28, 0x00, 0xd0, 0x01, 0x1c, 0x02, 0x48, + 0x81, 0x62, 0x70, 0x47, 0x00, 0x00, 0x85, 0x75, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0xf8, 0xb5, + 0xff, 0xf7, 0x33, 0xff, 0x28, 0x4f, 0x00, 0x28, + 0x04, 0xd0, 0xff, 0xf7, 0xc8, 0xff, 0x38, 0x6a, + 0x01, 0x30, 0x38, 0x62, 0xf8, 0x6a, 0x3c, 0x00, + 0x04, 0x29, 0x00, 0x00, 0x00, 0x28, 0x02, 0xd0, + 0x01, 0x89, 0x04, 0x39, 0x01, 0x81, 0x38, 0x6b, + 0x00, 0x25, 0x00, 0x28, 0x08, 0xd0, 0x0b, 0x20, + 0x3d, 0x63, 0x10, 0xf0, 0xe5, 0xfa, 0x1e, 0x49, + 0x08, 0x68, 0x21, 0x22, 0x90, 0x43, 0x08, 0x60, + 0x38, 0x78, 0x3c, 0x21, 0x1b, 0x4a, 0x41, 0x43, + 0x8c, 0x18, 0xff, 0x22, 0x79, 0x6a, 0x3a, 0x70, + 0x00, 0x29, 0x0c, 0xd0, 0xb9, 0x69, 0x01, 0x31, + 0x3c, 0x00, 0x40, 0x29, 0x00, 0x00, 0xb9, 0x61, + 0x7d, 0x62, 0xbd, 0x68, 0x00, 0x2d, 0x04, 0xd0, + 0x63, 0x6b, 0x7a, 0x6b, 0x00, 0x21, 0xfd, 0xf7, + 0x47, 0xfd, 0xf8, 0xbd, 0x04, 0x28, 0x03, 0xd3, + 0x01, 0x21, 0x84, 0x20, 0xfe, 0xf7, 0xa1, 0xfc, + 0x38, 0x69, 0x26, 0x1c, 0x01, 0x30, 0x38, 0x61, + 0x20, 0x36, 0x30, 0x78, 0x02, 0x28, 0x03, 0xd0, + 0x0c, 0x21, 0x84, 0x20, 0xfe, 0xf7, 0x95, 0xfc, + 0x35, 0x70, 0x3c, 0x00, 0x7c, 0x29, 0x00, 0x00, + 0xa1, 0x69, 0x00, 0x29, 0xe8, 0xd0, 0x63, 0x6b, + 0x30, 0x34, 0x20, 0x78, 0x0c, 0x1c, 0x00, 0x21, + 0x7a, 0x6b, 0xfd, 0xf7, 0x27, 0xfd, 0xdf, 0xe7, + 0x04, 0x6c, 0x01, 0x00, 0xf4, 0x00, 0x07, 0x00, + 0x18, 0xdb, 0x01, 0x00, 0x10, 0xb5, 0x0b, 0x4c, + 0x60, 0x6a, 0x00, 0x28, 0x0e, 0xd0, 0x0a, 0x48, + 0x00, 0xf0, 0x12, 0xfb, 0x00, 0x20, 0x60, 0x62, + 0xa4, 0x68, 0x00, 0x2c, 0x3c, 0x00, 0xb8, 0x29, + 0x00, 0x00, 0x05, 0xd0, 0x7e, 0x23, 0xdb, 0x43, + 0x00, 0x22, 0x01, 0x21, 0xfd, 0xf7, 0x0d, 0xfd, + 0x10, 0xbd, 0xe0, 0x69, 0x01, 0x30, 0xe0, 0x61, + 0x10, 0xbd, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x30, + 0x07, 0x00, 0x09, 0x48, 0x41, 0x68, 0x3f, 0x22, + 0x12, 0x04, 0x91, 0x43, 0x0d, 0x22, 0x12, 0x04, + 0x89, 0x18, 0x41, 0x60, 0x41, 0x68, 0x01, 0x22, + 0x52, 0x02, 0x91, 0x43, 0x41, 0x60, 0x3c, 0x00, + 0xf4, 0x29, 0x00, 0x00, 0x03, 0x48, 0x81, 0x78, + 0x81, 0x70, 0x81, 0x78, 0x81, 0x70, 0x70, 0x47, + 0x80, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, + 0xf0, 0xb5, 0x01, 0x25, 0x08, 0x24, 0x00, 0x20, + 0x0e, 0x4a, 0x0f, 0x49, 0x00, 0x26, 0x3c, 0x23, + 0x43, 0x43, 0xd1, 0x52, 0x9b, 0x18, 0x5d, 0x71, + 0x9b, 0x60, 0x5e, 0x61, 0x1c, 0x82, 0xc0, 0x27, + 0xdf, 0x60, 0x20, 0x27, 0xfe, 0x54, 0x9e, 0x61, + 0x3c, 0x00, 0x30, 0x2a, 0x00, 0x00, 0x30, 0x27, + 0xfe, 0x54, 0x07, 0x4f, 0x3f, 0x18, 0x20, 0x37, + 0x01, 0x30, 0x05, 0x28, 0x9f, 0x63, 0xe9, 0xd3, + 0x05, 0x48, 0xff, 0x32, 0x01, 0x32, 0x90, 0x62, + 0xf0, 0xbd, 0x18, 0xdb, 0x01, 0x00, 0xbe, 0xba, + 0x00, 0x00, 0x30, 0x80, 0x07, 0x00, 0x06, 0x6c, + 0x01, 0x00, 0x01, 0x49, 0x48, 0x60, 0x70, 0x47, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x05, 0x49, + 0x08, 0x5c, 0x3c, 0x00, 0x6c, 0x2a, 0x00, 0x00, + 0x05, 0x49, 0x49, 0x68, 0x40, 0x18, 0xc0, 0x06, + 0xc0, 0x0e, 0x04, 0x49, 0x20, 0x30, 0x48, 0x72, + 0x70, 0x47, 0x00, 0x00, 0xa0, 0x57, 0x01, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x80, 0x07, 0x00, + 0x80, 0xb5, 0x15, 0x21, 0x84, 0x20, 0xfe, 0xf7, + 0x07, 0xfc, 0x80, 0xbd, 0xf8, 0xb5, 0x43, 0x48, + 0x84, 0x68, 0x03, 0x34, 0x42, 0x4d, 0x04, 0xe0, + 0x20, 0x1c, 0x10, 0xf0, 0x3c, 0x00, 0xa8, 0x2a, + 0x00, 0x00, 0xb9, 0xf8, 0x00, 0x28, 0x71, 0xd1, + 0x28, 0x69, 0xc0, 0x07, 0xf7, 0xd5, 0x3e, 0x48, + 0x28, 0x60, 0x3e, 0x4a, 0x14, 0x1c, 0x20, 0x34, + 0x20, 0x79, 0x00, 0x90, 0x3c, 0x23, 0x3c, 0x49, + 0x58, 0x43, 0x45, 0x18, 0x28, 0x79, 0xff, 0xf7, + 0xcc, 0xff, 0x28, 0x1c, 0x3a, 0x49, 0x08, 0x30, + 0x48, 0x60, 0x01, 0x26, 0x08, 0x1c, 0x06, 0x60, + 0x68, 0x6a, 0x00, 0x28, 0x0d, 0xd0, 0x3c, 0x00, + 0xe4, 0x2a, 0x00, 0x00, 0xa9, 0x6a, 0x92, 0x6a, + 0x35, 0x4b, 0x9f, 0x68, 0xd7, 0x1b, 0x1a, 0x68, + 0x51, 0x18, 0x79, 0x18, 0x8a, 0x42, 0x5a, 0x68, + 0x00, 0xd8, 0x00, 0xe0, 0x01, 0x32, 0x06, 0xc0, + 0xe8, 0x6a, 0xfe, 0xf7, 0x87, 0xff, 0x2d, 0x49, + 0xe8, 0x6a, 0x48, 0x60, 0x30, 0x1c, 0x0e, 0x60, + 0x66, 0x79, 0x1f, 0xe0, 0x2b, 0x48, 0x46, 0x61, + 0x04, 0x7f, 0x29, 0x49, 0x20, 0x1c, 0x50, 0x39, + 0x3c, 0x00, 0x20, 0x2b, 0x00, 0x00, 0x89, 0x6a, + 0xfd, 0xf7, 0x5a, 0xfc, 0x00, 0x98, 0x84, 0x42, + 0x10, 0xd0, 0x3c, 0x20, 0x22, 0x49, 0x60, 0x43, + 0x40, 0x18, 0x87, 0x69, 0x00, 0x2f, 0x09, 0xd0, + 0x00, 0x21, 0x20, 0x30, 0x01, 0x70, 0x7e, 0x23, + 0xdb, 0x43, 0x02, 0x21, 0x00, 0x22, 0x20, 0x1c, + 0xfd, 0xf7, 0x4c, 0xfc, 0x01, 0x20, 0xa0, 0x40, + 0x86, 0x43, 0x00, 0x2e, 0xdd, 0xd1, 0xe9, 0x69, + 0x00, 0x29, 0x3c, 0x00, 0x5c, 0x2b, 0x00, 0x00, + 0x03, 0xd0, 0x30, 0x20, 0x40, 0x5d, 0xfd, 0xf7, + 0x3a, 0xfc, 0x16, 0x4c, 0x50, 0x3c, 0x60, 0x6a, + 0x00, 0x28, 0x03, 0xd0, 0x0a, 0x21, 0x84, 0x20, + 0xfe, 0xf7, 0x96, 0xfb, 0x20, 0x35, 0x28, 0x78, + 0x01, 0x28, 0x03, 0xd0, 0x0b, 0x21, 0x84, 0x20, + 0xfe, 0xf7, 0x8e, 0xfb, 0x02, 0x20, 0x28, 0x70, + 0xe0, 0x68, 0x01, 0x30, 0x00, 0xe0, 0x07, 0xe0, + 0xe0, 0x60, 0x00, 0x98, 0x3c, 0x00, 0x98, 0x2b, + 0x00, 0x00, 0x20, 0x70, 0x00, 0x98, 0x60, 0x70, + 0x0a, 0x48, 0x00, 0x68, 0x60, 0x63, 0xf8, 0xbd, + 0x00, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x40, + 0x07, 0x00, 0x01, 0x00, 0x00, 0x01, 0x30, 0x80, + 0x07, 0x00, 0x18, 0xdb, 0x01, 0x00, 0x00, 0x30, + 0x07, 0x00, 0x54, 0x6c, 0x01, 0x00, 0x00, 0xa0, + 0x07, 0x00, 0x78, 0x6e, 0x01, 0x00, 0x3c, 0x22, + 0x3c, 0x23, 0x4a, 0x43, 0x09, 0x49, 0x3c, 0x00, + 0xd4, 0x2b, 0x00, 0x00, 0xb0, 0xb5, 0x54, 0x18, + 0x58, 0x43, 0x45, 0x18, 0x21, 0x1c, 0x38, 0x22, + 0x28, 0x1c, 0xfd, 0xf7, 0xe5, 0xfc, 0xa0, 0x6b, + 0x00, 0x78, 0xa9, 0x6b, 0x08, 0x70, 0x00, 0x20, + 0x20, 0x34, 0x20, 0x70, 0xb0, 0xbd, 0x00, 0x00, + 0x18, 0xdb, 0x01, 0x00, 0x3c, 0x23, 0x07, 0x49, + 0x58, 0x43, 0x10, 0xb5, 0x44, 0x18, 0x20, 0x34, + 0x20, 0x78, 0x02, 0x28, 0x03, 0xd1, 0x0d, 0x21, + 0x3c, 0x00, 0x10, 0x2c, 0x00, 0x00, 0x84, 0x20, + 0xfe, 0xf7, 0x47, 0xfb, 0x00, 0x20, 0x20, 0x70, + 0x10, 0xbd, 0x18, 0xdb, 0x01, 0x00, 0xff, 0xb5, + 0x3c, 0x20, 0x48, 0x43, 0x1a, 0x49, 0x81, 0xb0, + 0x44, 0x18, 0x26, 0x1c, 0x20, 0x36, 0x30, 0x78, + 0x15, 0x1c, 0x0f, 0x9f, 0x02, 0x28, 0x03, 0xd1, + 0x04, 0x21, 0x84, 0x20, 0xfe, 0xf7, 0x31, 0xfb, + 0x01, 0x20, 0x30, 0x70, 0x25, 0x71, 0x0b, 0x99, + 0x30, 0x22, 0x3c, 0x00, 0x4c, 0x2c, 0x00, 0x00, + 0x61, 0x80, 0x0a, 0x99, 0xe1, 0x62, 0x0d, 0x99, + 0xa1, 0x61, 0x0c, 0x99, 0xe1, 0x61, 0x0e, 0x99, + 0x61, 0x62, 0xa7, 0x62, 0x01, 0x99, 0x11, 0x55, + 0x7e, 0x21, 0xc9, 0x43, 0x61, 0x63, 0x04, 0x99, + 0x00, 0x29, 0x00, 0xd1, 0x00, 0x20, 0x06, 0x1c, + 0x28, 0x1c, 0x08, 0xf0, 0x8b, 0xf8, 0x00, 0x28, + 0x01, 0xd0, 0x02, 0x20, 0x00, 0xe0, 0x00, 0x20, + 0xa1, 0x6b, 0x30, 0x43, 0x3c, 0x00, 0x88, 0x2c, + 0x00, 0x00, 0x08, 0x70, 0x05, 0xb0, 0xf0, 0xbd, + 0x00, 0x00, 0x18, 0xdb, 0x01, 0x00, 0x80, 0xb5, + 0x14, 0x21, 0x84, 0x20, 0xfe, 0xf7, 0x03, 0xfb, + 0x80, 0xbd, 0x01, 0x48, 0x40, 0x78, 0x70, 0x47, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x02, 0x48, + 0x00, 0x69, 0xc0, 0x07, 0xc0, 0x0f, 0x70, 0x47, + 0x00, 0x00, 0x00, 0x40, 0x07, 0x00, 0x01, 0x1c, + 0x3c, 0x23, 0x04, 0x4a, 0x59, 0x43, 0x3c, 0x00, + 0xc4, 0x2c, 0x00, 0x00, 0x89, 0x18, 0x20, 0x31, + 0x09, 0x78, 0x01, 0x20, 0x00, 0x29, 0x00, 0xd0, + 0x00, 0x20, 0x70, 0x47, 0x18, 0xdb, 0x01, 0x00, + 0x08, 0x48, 0x40, 0x6a, 0x00, 0x28, 0x0a, 0xd1, + 0x07, 0x4a, 0x00, 0x21, 0x20, 0x23, 0x9b, 0x5c, + 0x02, 0x2b, 0x04, 0xd0, 0x01, 0x31, 0x3c, 0x32, + 0x05, 0x29, 0xf7, 0xd3, 0x70, 0x47, 0x01, 0x20, + 0x70, 0x47, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x3c, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x18, 0xdb, + 0x01, 0x00, 0xf8, 0xb5, 0x0e, 0x1c, 0x04, 0x1c, + 0x17, 0x1c, 0xfe, 0xf7, 0x82, 0xfe, 0x20, 0x1c, + 0x11, 0x4c, 0x60, 0x60, 0x01, 0x20, 0x20, 0x60, + 0x10, 0x4d, 0x68, 0x69, 0x01, 0x30, 0x68, 0x61, + 0x68, 0x6a, 0x00, 0x28, 0x03, 0xd0, 0x07, 0x21, + 0x84, 0x20, 0xfe, 0xf7, 0xba, 0xfa, 0xa0, 0x68, + 0x40, 0x07, 0x03, 0xd5, 0x06, 0x21, 0x84, 0x20, + 0xfe, 0xf7, 0x3c, 0x00, 0x3c, 0x2d, 0x00, 0x00, + 0xb3, 0xfa, 0x08, 0x48, 0x00, 0x69, 0x00, 0x28, + 0x03, 0xda, 0xaa, 0x21, 0x84, 0x20, 0xfe, 0xf7, + 0xab, 0xfa, 0x02, 0x20, 0x68, 0x62, 0xae, 0x60, + 0x2f, 0x70, 0xf8, 0xbd, 0x00, 0x30, 0x07, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x40, 0x07, 0x00, + 0x04, 0x4a, 0x51, 0x80, 0x10, 0x71, 0x03, 0x48, + 0x03, 0x49, 0x08, 0x30, 0x48, 0x60, 0x01, 0x20, + 0x08, 0x60, 0x70, 0x47, 0x3c, 0x00, 0x78, 0x2d, + 0x00, 0x00, 0x3c, 0x6c, 0x01, 0x00, 0x00, 0x30, + 0x07, 0x00, 0x00, 0x21, 0x00, 0x23, 0x05, 0xe0, + 0x02, 0x89, 0x43, 0x60, 0xc0, 0x68, 0x51, 0x18, + 0x09, 0x04, 0x09, 0x0c, 0x00, 0x28, 0xf7, 0xd1, + 0x04, 0x31, 0x08, 0x04, 0x00, 0x0c, 0x70, 0x47, + 0x00, 0x00, 0x02, 0x4a, 0x51, 0x6b, 0x08, 0x43, + 0x50, 0x63, 0x70, 0x47, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x38, 0xb5, 0x0a, 0x4c, 0x3c, 0x00, + 0xb4, 0x2d, 0x00, 0x00, 0x22, 0x1c, 0x20, 0x32, + 0x95, 0x79, 0x00, 0xab, 0x1d, 0x70, 0xd2, 0x79, + 0x5a, 0x70, 0x03, 0x68, 0x40, 0x68, 0x06, 0x4a, + 0x50, 0x65, 0x05, 0x48, 0x13, 0x65, 0x50, 0x30, + 0x81, 0x60, 0x00, 0xab, 0x18, 0x88, 0xe0, 0x84, + 0x38, 0xbd, 0x00, 0x00, 0x00, 0x10, 0x07, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x98, 0xb5, 0x0d, 0x4c, + 0x20, 0x1c, 0x20, 0x30, 0x81, 0x79, 0x00, 0xab, + 0x3c, 0x00, 0xf0, 0x2d, 0x00, 0x00, 0x19, 0x70, + 0xc0, 0x79, 0x58, 0x70, 0x0a, 0x48, 0x00, 0xf0, + 0xec, 0xf8, 0x09, 0x49, 0x00, 0x20, 0x48, 0x62, + 0xff, 0xf7, 0x69, 0xff, 0x00, 0x28, 0x03, 0xd0, + 0x12, 0x21, 0x84, 0x20, 0xfe, 0xf7, 0x49, 0xfa, + 0x00, 0xab, 0x18, 0x88, 0xe0, 0x84, 0x98, 0xbd, + 0x00, 0x00, 0x00, 0x10, 0x07, 0x00, 0x00, 0x30, + 0x07, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x03, 0x48, + 0x01, 0x7a, 0x3c, 0x00, 0x2c, 0x2e, 0x00, 0x00, + 0xfe, 0x22, 0x91, 0x43, 0x0a, 0x31, 0x01, 0x72, + 0x70, 0x47, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, + 0x90, 0xb5, 0x0e, 0x4c, 0x85, 0xb0, 0xa0, 0x78, + 0x02, 0x28, 0x14, 0xd1, 0x03, 0x20, 0xa0, 0x70, + 0x0b, 0x49, 0x00, 0x20, 0x00, 0x22, 0x04, 0x92, + 0x02, 0x90, 0x03, 0x91, 0xe1, 0x88, 0x01, 0x22, + 0x01, 0x92, 0x00, 0x91, 0x61, 0x78, 0x20, 0x78, + 0x22, 0x69, 0xe3, 0x68, 0x3c, 0x00, 0x68, 0x2e, + 0x00, 0x00, 0x08, 0xf0, 0x94, 0xfd, 0x04, 0x48, + 0x09, 0xf0, 0x7f, 0xf9, 0x05, 0xb0, 0x90, 0xbd, + 0x00, 0x00, 0xb4, 0x79, 0x01, 0x00, 0xad, 0xb6, + 0x00, 0x00, 0x71, 0xb6, 0x00, 0x00, 0xb0, 0xb5, + 0x0c, 0x4d, 0xac, 0x79, 0x0c, 0x49, 0x09, 0x78, + 0x00, 0x29, 0x03, 0xd0, 0x01, 0x29, 0x0e, 0xd0, + 0x02, 0x29, 0x08, 0xd1, 0xc2, 0x88, 0x00, 0x2a, + 0x09, 0xd0, 0x01, 0x23, 0x81, 0x68, 0x3c, 0x00, + 0xa4, 0x2e, 0x00, 0x00, 0x02, 0x20, 0x0f, 0xf0, + 0xc1, 0xf8, 0x03, 0xe0, 0x02, 0x21, 0x86, 0x20, + 0xfe, 0xf7, 0xf8, 0xf9, 0xac, 0x71, 0xb0, 0xbd, + 0x20, 0x10, 0x07, 0x00, 0xa0, 0x79, 0x01, 0x00, + 0x80, 0xb5, 0x02, 0x68, 0x07, 0x49, 0x4a, 0x60, + 0x03, 0x79, 0xca, 0x78, 0xcb, 0x70, 0x00, 0x79, + 0x90, 0x42, 0x06, 0xd0, 0x03, 0x48, 0x14, 0x30, + 0x00, 0x89, 0x07, 0xf0, 0x27, 0xfe, 0x06, 0xf0, + 0x3c, 0x00, 0xe0, 0x2e, 0x00, 0x00, 0xab, 0xfa, + 0x80, 0xbd, 0x84, 0x66, 0x01, 0x00, 0x70, 0xb5, + 0x16, 0x4c, 0x15, 0x4d, 0xa0, 0x78, 0x00, 0x26, + 0x98, 0x3d, 0x01, 0x28, 0x03, 0xd1, 0x28, 0x69, + 0x08, 0xf0, 0xfb, 0xfc, 0xa6, 0x70, 0x60, 0x68, + 0x01, 0x28, 0x03, 0xd0, 0x00, 0x21, 0x28, 0x69, + 0x00, 0xf0, 0xff, 0xfb, 0x0e, 0x48, 0x29, 0x69, + 0x0c, 0xf0, 0x31, 0xfa, 0x01, 0x20, 0x0c, 0xf0, + 0xe4, 0xf8, 0x3c, 0x00, 0x1c, 0x2f, 0x00, 0x00, + 0xe0, 0x78, 0x01, 0x28, 0x02, 0xd0, 0x01, 0x20, + 0x60, 0x70, 0x00, 0xe0, 0x66, 0x70, 0x06, 0x48, + 0x14, 0x30, 0x41, 0x68, 0x01, 0x29, 0x06, 0xd1, + 0x06, 0x60, 0x41, 0x6f, 0x00, 0x29, 0x02, 0xd0, + 0x00, 0x20, 0xfd, 0xf7, 0x4c, 0xfa, 0x70, 0xbd, + 0x84, 0x66, 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, + 0x30, 0xb5, 0x00, 0x22, 0x00, 0x23, 0x01, 0x25, + 0x2c, 0x1c, 0x94, 0x40, 0x3c, 0x00, 0x58, 0x2f, + 0x00, 0x00, 0x04, 0x40, 0x01, 0xd0, 0xca, 0x54, + 0x01, 0x33, 0x01, 0x32, 0x0e, 0x2a, 0xf6, 0xdb, + 0x18, 0x1c, 0x30, 0xbd, 0x00, 0x00, 0xff, 0xb5, + 0x01, 0x27, 0x00, 0x26, 0x05, 0x1c, 0x02, 0x20, + 0x81, 0xb0, 0x00, 0x90, 0x00, 0x2d, 0x18, 0xd0, + 0x28, 0x78, 0xff, 0x28, 0x15, 0xd0, 0x00, 0x24, + 0x10, 0xe0, 0x28, 0x19, 0x80, 0x78, 0x0a, 0x99, + 0x00, 0x29, 0x01, 0xd0, 0x01, 0x06, 0x3c, 0x00, + 0x94, 0x2f, 0x00, 0x00, 0x08, 0xd5, 0x07, 0xf0, + 0xe9, 0xfe, 0x0e, 0x28, 0x03, 0xd0, 0x01, 0x21, + 0x81, 0x40, 0x0e, 0x43, 0x00, 0xe0, 0x00, 0x27, + 0x01, 0x34, 0x68, 0x78, 0xa0, 0x42, 0xeb, 0xdc, + 0x00, 0x98, 0x02, 0x9d, 0x01, 0x38, 0x00, 0x90, + 0xdf, 0xd1, 0x03, 0x98, 0x31, 0x1c, 0x81, 0x43, + 0x02, 0xd0, 0x03, 0x98, 0x06, 0x40, 0x00, 0x27, + 0x04, 0x98, 0x06, 0x60, 0x05, 0xb0, 0x38, 0x1c, + 0x3c, 0x00, 0xd0, 0x2f, 0x00, 0x00, 0xf0, 0xbd, + 0x00, 0x00, 0x02, 0x21, 0x01, 0x60, 0x64, 0x21, + 0x01, 0xe0, 0x01, 0x39, 0x02, 0xd0, 0x02, 0x68, + 0x92, 0x07, 0xfa, 0xd4, 0x01, 0x20, 0x00, 0x29, + 0x00, 0xd1, 0x00, 0x20, 0x70, 0x47, 0x10, 0xb5, + 0x00, 0x20, 0xc4, 0x43, 0x05, 0x4b, 0x02, 0x22, + 0x01, 0x01, 0x5a, 0x50, 0xc9, 0x18, 0x8c, 0x60, + 0x01, 0x30, 0x08, 0x28, 0xf8, 0xdb, 0x10, 0xbd, + 0x00, 0x00, 0x3c, 0x00, 0x0c, 0x30, 0x00, 0x00, + 0x00, 0x30, 0x07, 0x00, 0xf0, 0xb5, 0x05, 0x1c, + 0x60, 0x35, 0xc7, 0x6a, 0x04, 0x1c, 0x28, 0x7b, + 0x00, 0x2f, 0x8b, 0xb0, 0x15, 0xd0, 0x08, 0x28, + 0x15, 0xd2, 0x02, 0xa3, 0x1b, 0x5c, 0x5b, 0x00, + 0x9f, 0x44, 0x00, 0x00, 0x07, 0x04, 0x04, 0x07, + 0x09, 0x09, 0x0c, 0x0c, 0x01, 0x26, 0x00, 0x21, + 0x09, 0xe0, 0x00, 0x26, 0x06, 0xe0, 0x02, 0x26, + 0x02, 0x21, 0x04, 0xe0, 0x3c, 0x00, 0x48, 0x30, + 0x00, 0x00, 0x03, 0x26, 0x03, 0x21, 0x01, 0xe0, + 0x04, 0x26, 0x01, 0x21, 0x8c, 0x22, 0x12, 0x59, + 0x07, 0x91, 0x26, 0x49, 0x06, 0x90, 0x04, 0x91, + 0x00, 0x20, 0x03, 0x90, 0x05, 0x97, 0x08, 0x92, + 0xe0, 0x69, 0x22, 0x69, 0x21, 0x1c, 0x70, 0x31, + 0x01, 0x91, 0x21, 0x49, 0x00, 0x90, 0x70, 0x00, + 0x40, 0x18, 0x60, 0x30, 0x02, 0x92, 0x03, 0x88, + 0x59, 0x1c, 0x01, 0x80, 0x1e, 0x48, 0x3c, 0x00, + 0x84, 0x30, 0x00, 0x00, 0x02, 0x88, 0xa1, 0x68, + 0x0a, 0xa8, 0x09, 0xf0, 0xe1, 0xff, 0x60, 0x60, + 0xe8, 0x7a, 0xa1, 0x6a, 0xc9, 0x07, 0x00, 0x07, + 0x00, 0x0e, 0xc9, 0x0d, 0x08, 0x43, 0x61, 0x6a, + 0x22, 0x69, 0xc9, 0x07, 0x89, 0x0d, 0x01, 0x43, + 0x01, 0x20, 0x00, 0x2a, 0x00, 0xd1, 0x00, 0x20, + 0x80, 0x03, 0x08, 0x43, 0x21, 0x6a, 0xc9, 0x03, + 0x08, 0x43, 0x08, 0x21, 0x08, 0x43, 0x0a, 0x99, + 0x3c, 0x00, 0xc0, 0x30, 0x00, 0x00, 0x08, 0x80, + 0x20, 0x1c, 0xfe, 0xf7, 0x98, 0xfe, 0x20, 0x69, + 0x00, 0x28, 0x04, 0xd1, 0x20, 0x1c, 0x0a, 0xf0, + 0x82, 0xf9, 0x0b, 0xb0, 0xf0, 0xbd, 0x80, 0x79, + 0x06, 0x28, 0x01, 0xd9, 0xfe, 0xf7, 0x0f, 0xf9, + 0x20, 0x69, 0x06, 0x49, 0x80, 0x79, 0x80, 0x00, + 0x09, 0x58, 0x20, 0x1c, 0xfd, 0xf7, 0x74, 0xf9, + 0xef, 0xe7, 0x79, 0x2f, 0x01, 0x00, 0xc4, 0x69, + 0x01, 0x00, 0x3c, 0x00, 0xfc, 0x30, 0x00, 0x00, + 0x08, 0x61, 0x01, 0x00, 0x74, 0x57, 0x01, 0x00, + 0x10, 0xb5, 0x04, 0x1c, 0x58, 0x30, 0x8a, 0xb0, + 0x0e, 0xf0, 0x7c, 0xfe, 0x22, 0x1c, 0x80, 0x32, + 0x51, 0x68, 0x00, 0x29, 0x01, 0xd0, 0x11, 0x7a, + 0x07, 0xe0, 0x00, 0x28, 0x04, 0xd0, 0x80, 0x69, + 0x80, 0x07, 0x01, 0xd5, 0x03, 0x21, 0x00, 0xe0, + 0x01, 0x21, 0xd2, 0x68, 0x07, 0x91, 0x22, 0x49, + 0x00, 0x20, 0x08, 0x92, 0x3c, 0x00, 0x38, 0x31, + 0x00, 0x00, 0x04, 0x91, 0x00, 0x22, 0x05, 0x92, + 0x06, 0x90, 0x03, 0x90, 0xe0, 0x69, 0x22, 0x69, + 0x00, 0x90, 0x21, 0x1c, 0x70, 0x31, 0x1c, 0x48, + 0x01, 0x91, 0x02, 0x92, 0x03, 0x89, 0x59, 0x1c, + 0x01, 0x81, 0x1a, 0x48, 0x02, 0x88, 0xa1, 0x68, + 0x09, 0xa8, 0x09, 0xf0, 0x76, 0xff, 0x60, 0x60, + 0x6b, 0x20, 0x00, 0x5d, 0xa1, 0x6a, 0x22, 0x69, + 0xc9, 0x07, 0x00, 0x07, 0x00, 0x0e, 0x3c, 0x00, + 0x74, 0x31, 0x00, 0x00, 0xc9, 0x0d, 0x01, 0x43, + 0x01, 0x20, 0x00, 0x2a, 0x00, 0xd1, 0x00, 0x20, + 0x80, 0x03, 0x08, 0x43, 0x09, 0x99, 0x08, 0x80, + 0x20, 0x1c, 0xfe, 0xf7, 0x35, 0xfe, 0x20, 0x69, + 0x00, 0x28, 0x04, 0xd1, 0x20, 0x1c, 0x0a, 0xf0, + 0x1f, 0xf9, 0x0a, 0xb0, 0x10, 0xbd, 0x80, 0x79, + 0x06, 0x28, 0x01, 0xd9, 0xfe, 0xf7, 0xac, 0xf8, + 0x20, 0x69, 0x07, 0x49, 0x80, 0x79, 0x80, 0x00, + 0x3c, 0x00, 0xb0, 0x31, 0x00, 0x00, 0x09, 0x58, + 0x20, 0x1c, 0xfd, 0xf7, 0x11, 0xf9, 0xef, 0xe7, + 0x00, 0x00, 0xbd, 0x2f, 0x01, 0x00, 0x24, 0x6a, + 0x01, 0x00, 0x08, 0x61, 0x01, 0x00, 0x74, 0x57, + 0x01, 0x00, 0x3e, 0xb5, 0x05, 0x1c, 0x00, 0x69, + 0x04, 0x21, 0x07, 0xf0, 0xd2, 0xfa, 0x00, 0x28, + 0x09, 0xd0, 0x42, 0x78, 0x02, 0x32, 0x01, 0x1c, + 0x68, 0x46, 0xfd, 0xf7, 0x88, 0xf9, 0xe8, 0x6a, + 0x6c, 0x46, 0x3c, 0x00, 0xec, 0x31, 0x00, 0x00, + 0x02, 0x90, 0x00, 0xe0, 0x00, 0x24, 0x28, 0x1c, + 0x14, 0x30, 0x02, 0xf0, 0x03, 0xfb, 0x00, 0x28, + 0x04, 0xd0, 0x21, 0x1c, 0x28, 0x1c, 0x05, 0xf0, + 0xa5, 0xfe, 0x3e, 0xbd, 0x00, 0x2c, 0xfc, 0xd0, + 0x02, 0x49, 0x20, 0x1c, 0x49, 0x69, 0xfd, 0xf7, + 0xe2, 0xf8, 0xf6, 0xe7, 0x44, 0x7d, 0x01, 0x00, + 0x70, 0xb5, 0x1e, 0x1c, 0x18, 0x23, 0x58, 0x43, + 0x06, 0x4b, 0x04, 0x9d, 0x3c, 0x00, 0x28, 0x32, + 0x00, 0x00, 0x19, 0x50, 0xc4, 0x18, 0x00, 0x20, + 0x60, 0x61, 0x62, 0x60, 0xa6, 0x60, 0xe5, 0x60, + 0x0f, 0xf0, 0xb9, 0xfd, 0x20, 0x61, 0x70, 0xbd, + 0x00, 0x00, 0xb8, 0x7d, 0x01, 0x00, 0x02, 0x4a, + 0x01, 0x1c, 0x90, 0x69, 0x91, 0x61, 0x70, 0x47, + 0x00, 0x00, 0x44, 0x7d, 0x01, 0x00, 0x01, 0x48, + 0x40, 0x6b, 0x70, 0x47, 0x00, 0x00, 0x44, 0x7d, + 0x01, 0x00, 0x04, 0x49, 0x04, 0x4b, 0x3c, 0x00, + 0x64, 0x32, 0x00, 0x00, 0xca, 0x68, 0x09, 0x69, + 0x5c, 0x3b, 0x5b, 0x68, 0xc9, 0x1a, 0x41, 0x43, + 0x50, 0x18, 0x70, 0x47, 0xa0, 0x7d, 0x01, 0x00, + 0x01, 0x48, 0x00, 0x78, 0x70, 0x47, 0x00, 0x00, + 0x78, 0x69, 0x01, 0x00, 0x80, 0xb5, 0x06, 0x22, + 0x01, 0x49, 0xfd, 0xf7, 0x35, 0xf9, 0x80, 0xbd, + 0xfe, 0x67, 0x01, 0x00, 0xf0, 0xb5, 0x89, 0xb0, + 0x00, 0x93, 0x16, 0x4f, 0x13, 0x1c, 0x0e, 0x1c, + 0x3c, 0x00, 0xa0, 0x32, 0x00, 0x00, 0x04, 0x1c, + 0x3a, 0x1c, 0x01, 0xf0, 0x62, 0xff, 0x01, 0xa9, + 0x06, 0xa8, 0xa2, 0x68, 0x02, 0xf0, 0x0b, 0xf9, + 0x01, 0xaa, 0x06, 0xa9, 0x38, 0x1c, 0x63, 0x6a, + 0x02, 0xf0, 0x81, 0xfc, 0x05, 0x1c, 0x01, 0x28, + 0x14, 0xd1, 0x0c, 0x48, 0xfc, 0x21, 0xc8, 0x51, + 0x38, 0x1c, 0x02, 0xf0, 0x0c, 0xf8, 0x03, 0x21, + 0x30, 0x1c, 0x07, 0xf0, 0x52, 0xfa, 0x00, 0x28, + 0x07, 0xd0, 0x3c, 0x00, 0xdc, 0x32, 0x00, 0x00, + 0x80, 0x78, 0x00, 0xf0, 0x33, 0xfc, 0x20, 0x1c, + 0x10, 0x30, 0x0e, 0xf0, 0x47, 0xfd, 0x00, 0xe0, + 0x00, 0x25, 0x28, 0x1c, 0x09, 0xb0, 0xf0, 0xbd, + 0xf4, 0x67, 0x01, 0x00, 0xc1, 0x38, 0x00, 0x00, + 0x10, 0xb5, 0x07, 0x4c, 0x06, 0x48, 0x06, 0x22, + 0x21, 0x1d, 0x08, 0x38, 0xfd, 0xf7, 0xf6, 0xf8, + 0x01, 0xf0, 0xfc, 0xff, 0x00, 0xf0, 0x42, 0xfc, + 0x20, 0x1c, 0x02, 0xf0, 0x3c, 0x00, 0x18, 0x33, + 0x00, 0x00, 0x27, 0xfc, 0x10, 0xbd, 0xf4, 0x67, + 0x01, 0x00, 0x08, 0x49, 0xc9, 0x68, 0x00, 0x29, + 0x0a, 0xd0, 0x06, 0x4a, 0x01, 0x32, 0x51, 0x78, + 0x12, 0x78, 0x48, 0x43, 0x00, 0x2a, 0x01, 0xd1, + 0x08, 0x18, 0x70, 0x47, 0x10, 0x18, 0x70, 0x47, + 0x01, 0x30, 0x70, 0x47, 0x00, 0x00, 0x44, 0x7d, + 0x01, 0x00, 0x04, 0x4b, 0x05, 0x49, 0x00, 0x28, + 0x5a, 0x69, 0x00, 0xd0, 0x01, 0x1c, 0x3c, 0x00, + 0x54, 0x33, 0x00, 0x00, 0x10, 0x1c, 0x59, 0x61, + 0x70, 0x47, 0x00, 0x00, 0x44, 0x7d, 0x01, 0x00, + 0xb9, 0x75, 0x00, 0x00, 0x07, 0x49, 0x00, 0x20, + 0x0a, 0x78, 0x02, 0x2a, 0x09, 0xd1, 0x0a, 0x7c, + 0x00, 0x2a, 0x05, 0xd1, 0xca, 0x68, 0x00, 0x2a, + 0x03, 0xd0, 0x49, 0x69, 0x00, 0x29, 0x00, 0xd0, + 0x01, 0x20, 0x70, 0x47, 0x78, 0x69, 0x01, 0x00, + 0x0c, 0x4a, 0x80, 0xb5, 0x01, 0x21, 0x51, 0x60, + 0x3c, 0x00, 0x90, 0x33, 0x00, 0x00, 0x09, 0xf0, + 0x6a, 0xf8, 0x09, 0x48, 0x1c, 0x30, 0x81, 0x69, + 0x00, 0x29, 0x07, 0xd0, 0x00, 0x23, 0x83, 0x61, + 0x00, 0x22, 0x00, 0x21, 0x00, 0x20, 0x00, 0xf0, + 0xd2, 0xf8, 0x80, 0xbd, 0x00, 0x22, 0x00, 0x21, + 0x03, 0x48, 0x00, 0xf0, 0x5c, 0xf9, 0x80, 0xbd, + 0x00, 0x00, 0x5c, 0x69, 0x01, 0x00, 0x51, 0x35, + 0x00, 0x00, 0xb0, 0xb5, 0x0c, 0x1c, 0x01, 0x28, + 0x16, 0xd1, 0x3c, 0x00, 0xcc, 0x33, 0x00, 0x00, + 0x0e, 0x4d, 0x02, 0x2c, 0x09, 0xd1, 0x00, 0xf0, + 0x2b, 0xfa, 0x00, 0x28, 0x0e, 0xd0, 0x68, 0x69, + 0x00, 0x28, 0x0b, 0xd1, 0x21, 0x1c, 0x13, 0x20, + 0x0c, 0xe0, 0x03, 0x2c, 0xfa, 0xd1, 0x00, 0xf0, + 0xf9, 0xf9, 0x00, 0x28, 0x02, 0xd0, 0x28, 0x7c, + 0x00, 0x28, 0xf3, 0xd0, 0xb0, 0xbd, 0x21, 0x1c, + 0x00, 0x06, 0x00, 0x0e, 0x04, 0xf0, 0x62, 0xfc, + 0xb0, 0xbd, 0x00, 0x00, 0x3c, 0x00, 0x08, 0x34, + 0x00, 0x00, 0x78, 0x69, 0x01, 0x00, 0xb0, 0xb5, + 0x0c, 0x4c, 0x00, 0x25, 0x25, 0x74, 0x65, 0x61, + 0xe5, 0x60, 0x00, 0xf0, 0x3c, 0xfa, 0x00, 0xf0, + 0x34, 0xfa, 0x07, 0x48, 0x1c, 0x38, 0x05, 0x61, + 0x09, 0xf0, 0x33, 0xff, 0x20, 0x78, 0x00, 0x28, + 0x02, 0xd1, 0x04, 0xf0, 0x6e, 0xfa, 0xb0, 0xbd, + 0x02, 0x28, 0xfc, 0xd1, 0x04, 0xf0, 0xa5, 0xfb, + 0xb0, 0xbd, 0x78, 0x69, 0x01, 0x00, 0x3c, 0x00, + 0x44, 0x34, 0x00, 0x00, 0x0c, 0x48, 0x80, 0xb5, + 0x01, 0x78, 0x00, 0x29, 0x12, 0xd0, 0xc0, 0x68, + 0x00, 0x28, 0x0f, 0xd1, 0x08, 0x48, 0x1c, 0x38, + 0x40, 0x69, 0x00, 0x28, 0x0a, 0xd1, 0x07, 0x48, + 0x00, 0x68, 0x00, 0x28, 0x06, 0xd0, 0x00, 0x22, + 0x07, 0x21, 0x10, 0x20, 0x10, 0xf0, 0xa0, 0xf9, + 0x02, 0xf0, 0x2c, 0xfc, 0x80, 0xbd, 0x00, 0x00, + 0x78, 0x69, 0x01, 0x00, 0xd4, 0x67, 0x01, 0x00, + 0x3c, 0x00, 0x80, 0x34, 0x00, 0x00, 0xf8, 0xb5, + 0x1d, 0x4e, 0x1c, 0x4d, 0x04, 0x1c, 0xf0, 0x68, + 0x02, 0x27, 0x1c, 0x3d, 0x00, 0x28, 0x07, 0xd0, + 0xe8, 0x68, 0x00, 0x28, 0x04, 0xd0, 0xfd, 0xf7, + 0xc2, 0xfe, 0x00, 0x28, 0x00, 0xd0, 0xbc, 0x43, + 0x00, 0x2c, 0x14, 0xd0, 0x37, 0x70, 0xf0, 0x68, + 0x14, 0x4f, 0x00, 0x28, 0x10, 0xd0, 0xe0, 0x07, + 0x17, 0xd4, 0xfd, 0xf7, 0xb4, 0xfe, 0x00, 0x28, + 0x13, 0xd0, 0x3c, 0x00, 0xbc, 0x34, 0x00, 0x00, + 0x70, 0x69, 0x00, 0x28, 0x06, 0xd1, 0xe8, 0x68, + 0x00, 0x28, 0x01, 0xd0, 0xfd, 0xf7, 0x1a, 0xff, + 0x0d, 0xf0, 0x0a, 0xfa, 0xf8, 0xbd, 0x68, 0x69, + 0x00, 0x28, 0x05, 0xd1, 0x09, 0x48, 0x00, 0x68, + 0x00, 0x28, 0x01, 0xd0, 0x01, 0x2c, 0x04, 0xd1, + 0x39, 0x1c, 0x20, 0x1c, 0x0e, 0xf0, 0x52, 0xfd, + 0xf0, 0xe7, 0x04, 0xf0, 0x1d, 0xfb, 0x02, 0xf0, + 0xeb, 0xfb, 0xeb, 0xe7, 0x3c, 0x00, 0xf8, 0x34, + 0x00, 0x00, 0x78, 0x69, 0x01, 0x00, 0x50, 0xc3, + 0x00, 0x00, 0xd4, 0x67, 0x01, 0x00, 0x05, 0x48, + 0x41, 0x69, 0x00, 0x29, 0x04, 0xd0, 0x40, 0x6a, + 0x00, 0x28, 0x01, 0xd0, 0x01, 0x20, 0x70, 0x47, + 0x00, 0x20, 0x70, 0x47, 0x00, 0x00, 0x78, 0x69, + 0x01, 0x00, 0x10, 0xb5, 0x04, 0x1c, 0x06, 0x49, + 0x00, 0x20, 0x48, 0x60, 0x08, 0x60, 0x88, 0x60, + 0x08, 0xf0, 0x9b, 0xff, 0x07, 0x21, 0x3c, 0x00, + 0x34, 0x35, 0x00, 0x00, 0x12, 0x20, 0x22, 0x79, + 0x10, 0xf0, 0x3a, 0xf9, 0x10, 0xbd, 0x00, 0x00, + 0x5c, 0x69, 0x01, 0x00, 0x01, 0x49, 0x01, 0x20, + 0x08, 0x60, 0x70, 0x47, 0xe8, 0x67, 0x01, 0x00, + 0xf8, 0xb5, 0x07, 0x1c, 0x0e, 0x1c, 0x08, 0xf0, + 0xa3, 0xfa, 0x13, 0x4d, 0x04, 0x1c, 0x68, 0x68, + 0x00, 0x28, 0x17, 0xd0, 0x00, 0x2f, 0x02, 0xd0, + 0xa8, 0x68, 0x03, 0x28, 0x13, 0xd3, 0x00, 0x20, + 0x3c, 0x00, 0x70, 0x35, 0x00, 0x00, 0xa8, 0x60, + 0x68, 0x60, 0x21, 0x1c, 0x0f, 0x20, 0x0e, 0xf0, + 0xf0, 0xfe, 0x28, 0x68, 0x00, 0x28, 0x03, 0xd0, + 0x00, 0x2c, 0x06, 0xd1, 0x01, 0x20, 0x02, 0xe0, + 0x01, 0x2c, 0x02, 0xd1, 0x00, 0x20, 0xff, 0xf7, + 0xfa, 0xfe, 0xf8, 0xbd, 0x72, 0x1c, 0x00, 0x21, + 0x04, 0x48, 0x00, 0xf0, 0x68, 0xf8, 0xa8, 0x68, + 0x01, 0x30, 0xa8, 0x60, 0xf5, 0xe7, 0x5c, 0x69, + 0x01, 0x00, 0x3c, 0x00, 0xac, 0x35, 0x00, 0x00, + 0x51, 0x35, 0x00, 0x00, 0x0a, 0x49, 0x80, 0xb5, + 0xca, 0x68, 0x00, 0x2a, 0x0b, 0xd0, 0x42, 0x68, + 0x00, 0x2a, 0x09, 0xd0, 0x00, 0x22, 0x4a, 0x62, + 0x02, 0x68, 0x0a, 0x62, 0x02, 0x68, 0x07, 0x21, + 0x17, 0x20, 0x10, 0xf0, 0xef, 0xf8, 0x80, 0xbd, + 0x01, 0x20, 0x48, 0x62, 0x80, 0xbd, 0x00, 0x00, + 0x78, 0x69, 0x01, 0x00, 0x70, 0xb5, 0x14, 0x4d, + 0x84, 0x6c, 0xe9, 0x68, 0x3c, 0x00, 0xe8, 0x35, + 0x00, 0x00, 0x00, 0x29, 0x17, 0xd0, 0x40, 0x30, + 0xec, 0x61, 0x40, 0x78, 0x00, 0x28, 0x01, 0xd1, + 0x01, 0x20, 0x68, 0x62, 0x28, 0x6a, 0x0e, 0x4e, + 0x00, 0x1b, 0xb0, 0x42, 0x0c, 0xd2, 0x08, 0xf0, + 0x3a, 0xfe, 0x29, 0x6a, 0x40, 0x1a, 0xb0, 0x42, + 0x03, 0xd2, 0x02, 0x22, 0x07, 0x21, 0x13, 0x20, + 0x09, 0xe0, 0x04, 0xf0, 0xb6, 0xfa, 0x70, 0xbd, + 0x07, 0x48, 0xa9, 0x68, 0x0b, 0xf0, 0x3c, 0x00, + 0x24, 0x36, 0x00, 0x00, 0xbd, 0xfe, 0x22, 0x1c, + 0x07, 0x21, 0x16, 0x20, 0x10, 0xf0, 0xc0, 0xf8, + 0x70, 0xbd, 0x00, 0x00, 0x78, 0x69, 0x01, 0x00, + 0xa0, 0x86, 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, + 0x0a, 0x49, 0x80, 0xb5, 0x00, 0x20, 0x88, 0x61, + 0x08, 0x69, 0x00, 0x28, 0x0c, 0xd0, 0x07, 0x48, + 0x1c, 0x30, 0x00, 0x78, 0x00, 0x28, 0x07, 0xd0, + 0x01, 0xf0, 0xd2, 0xff, 0x02, 0x28, 0x03, 0xd1, + 0x3c, 0x00, 0x60, 0x36, 0x00, 0x00, 0x00, 0xf0, + 0x12, 0xf9, 0x00, 0xf0, 0xbc, 0xf8, 0x80, 0xbd, + 0x00, 0x00, 0x5c, 0x69, 0x01, 0x00, 0xf0, 0xb5, + 0x06, 0x1c, 0x0c, 0x1c, 0x15, 0x1c, 0x91, 0xb0, + 0x01, 0xa8, 0x40, 0x21, 0xfc, 0xf7, 0x0d, 0xff, + 0x00, 0x21, 0x68, 0x46, 0xfd, 0xf7, 0xa7, 0xff, + 0x04, 0x90, 0x01, 0xa8, 0x06, 0x22, 0x08, 0x49, + 0xfc, 0xf7, 0x31, 0xff, 0x06, 0x22, 0x02, 0xa8, + 0x02, 0x30, 0x3c, 0x00, 0x9c, 0x36, 0x00, 0x00, + 0x06, 0x49, 0xfc, 0xf7, 0x2b, 0xff, 0x00, 0xab, + 0xdc, 0x76, 0x0c, 0x95, 0x31, 0x1c, 0x01, 0xa8, + 0x07, 0xf0, 0x4e, 0xf8, 0x11, 0xb0, 0xf0, 0xbd, + 0x12, 0x61, 0x01, 0x00, 0xf8, 0x67, 0x01, 0x00, + 0x03, 0x1c, 0x08, 0x1c, 0x19, 0x1c, 0x11, 0x4b, + 0x80, 0xb5, 0x06, 0xd0, 0x04, 0x21, 0x11, 0x80, + 0x04, 0x22, 0x19, 0x1c, 0xfc, 0xf7, 0x12, 0xff, + 0x16, 0xe0, 0x04, 0x22, 0x3c, 0x00, 0xd8, 0x36, + 0x00, 0x00, 0x01, 0x1c, 0x18, 0x1c, 0xfc, 0xf7, + 0x0c, 0xff, 0x09, 0x48, 0x10, 0x38, 0x00, 0x69, + 0x00, 0x28, 0x0c, 0xd0, 0x07, 0x48, 0x0c, 0x30, + 0x00, 0x78, 0x00, 0x28, 0x07, 0xd0, 0x01, 0xf0, + 0x84, 0xff, 0x02, 0x28, 0x03, 0xd1, 0x00, 0xf0, + 0xc4, 0xf8, 0x00, 0xf0, 0x6e, 0xf8, 0x01, 0x20, + 0x80, 0xbd, 0x6c, 0x69, 0x01, 0x00, 0xf8, 0xb5, + 0x04, 0x1c, 0x0f, 0x1c, 0x00, 0x25, 0x3c, 0x00, + 0x14, 0x37, 0x00, 0x00, 0x00, 0x26, 0x01, 0xf0, + 0x73, 0xff, 0x02, 0x28, 0x2f, 0xd1, 0x19, 0x49, + 0x01, 0x2f, 0x08, 0x68, 0x07, 0xd1, 0x02, 0x1c, + 0x22, 0x40, 0x0a, 0xd1, 0x20, 0x43, 0x08, 0x60, + 0xa0, 0x42, 0x06, 0xd1, 0x04, 0xe0, 0x00, 0x28, + 0x03, 0xd0, 0xa0, 0x43, 0x08, 0x60, 0x00, 0xd1, + 0x01, 0x25, 0x48, 0x68, 0x00, 0x28, 0x1a, 0xd1, + 0x00, 0x2d, 0x17, 0xd0, 0x01, 0x20, 0x48, 0x60, + 0x3c, 0x00, 0x50, 0x37, 0x00, 0x00, 0x38, 0x1c, + 0x08, 0xf0, 0x89, 0xfe, 0x0b, 0x48, 0x1c, 0x30, + 0x81, 0x69, 0x00, 0x29, 0x07, 0xd0, 0x00, 0x23, + 0x83, 0x61, 0x00, 0x22, 0x00, 0x21, 0x00, 0x20, + 0xff, 0xf7, 0xf1, 0xfe, 0x06, 0xe0, 0x00, 0x22, + 0x00, 0x21, 0x04, 0x48, 0xff, 0xf7, 0x7b, 0xff, + 0x00, 0xe0, 0x01, 0x26, 0x30, 0x1c, 0xf8, 0xbd, + 0x00, 0x00, 0x5c, 0x69, 0x01, 0x00, 0x51, 0x35, + 0x00, 0x00, 0x3c, 0x00, 0x8c, 0x37, 0x00, 0x00, + 0x03, 0x1c, 0x08, 0x1c, 0x19, 0x1c, 0x12, 0x4b, + 0x80, 0xb5, 0x06, 0xd0, 0x04, 0x21, 0x11, 0x80, + 0x04, 0x22, 0x19, 0x1c, 0xfc, 0xf7, 0xaa, 0xfe, + 0x18, 0xe0, 0x04, 0x22, 0x01, 0x1c, 0x18, 0x1c, + 0xfc, 0xf7, 0xa4, 0xfe, 0x0a, 0x48, 0x10, 0x30, + 0xc1, 0x68, 0x00, 0x29, 0x0e, 0xd0, 0x00, 0x78, + 0x00, 0x28, 0x0b, 0xd0, 0x01, 0xf0, 0x1e, 0xff, + 0x02, 0x28, 0x07, 0xd1, 0x3c, 0x00, 0xc8, 0x37, + 0x00, 0x00, 0x00, 0xf0, 0x64, 0xf8, 0x00, 0xf0, + 0x2e, 0xf8, 0x00, 0x28, 0x01, 0xd1, 0x09, 0xf0, + 0x7a, 0xfd, 0x01, 0x20, 0x80, 0xbd, 0x68, 0x69, + 0x01, 0x00, 0x10, 0xb5, 0x0a, 0x4c, 0x20, 0x69, + 0x00, 0x28, 0x09, 0xd0, 0xa1, 0x69, 0x00, 0x29, + 0x06, 0xd1, 0x7d, 0x21, 0xc9, 0x00, 0x41, 0x43, + 0x03, 0x22, 0x07, 0x20, 0x0f, 0xf0, 0xe1, 0xfe, + 0x21, 0x69, 0x01, 0x20, 0x00, 0x29, 0x3c, 0x00, + 0x04, 0x38, 0x00, 0x00, 0x00, 0xd1, 0x00, 0x20, + 0x10, 0xbd, 0x00, 0x00, 0x5c, 0x69, 0x01, 0x00, + 0x10, 0xb5, 0x05, 0x4c, 0x00, 0x28, 0x03, 0xd0, + 0xfd, 0xf7, 0x9a, 0xfc, 0xe0, 0x60, 0x10, 0xbd, + 0x01, 0x20, 0x00, 0x21, 0xe1, 0x60, 0x10, 0xbd, + 0x78, 0x69, 0x01, 0x00, 0x0a, 0x48, 0x0a, 0x49, + 0x10, 0xb5, 0xc0, 0x68, 0x1c, 0x39, 0xc9, 0x68, + 0x00, 0x28, 0x03, 0xd0, 0x00, 0x29, 0x01, 0xd0, + 0x3c, 0x00, 0x40, 0x38, 0x00, 0x00, 0x01, 0x24, + 0x00, 0xe0, 0x00, 0x24, 0x00, 0x2c, 0x03, 0xd0, + 0x02, 0x22, 0x07, 0x20, 0x0f, 0xf0, 0xb7, 0xfe, + 0x20, 0x1c, 0x10, 0xbd, 0x00, 0x00, 0x78, 0x69, + 0x01, 0x00, 0x10, 0xb5, 0x09, 0x4c, 0x00, 0x20, + 0x21, 0x69, 0x00, 0x29, 0x0c, 0xd0, 0x06, 0x49, + 0x1c, 0x31, 0x09, 0x78, 0x00, 0x29, 0x07, 0xd0, + 0x00, 0xf0, 0x09, 0xf8, 0x01, 0x20, 0xa0, 0x61, + 0x20, 0x69, 0x3c, 0x00, 0x7c, 0x38, 0x00, 0x00, + 0x7d, 0x23, 0xdb, 0x00, 0x58, 0x43, 0x10, 0xbd, + 0x5c, 0x69, 0x01, 0x00, 0x80, 0xb5, 0x03, 0x21, + 0x07, 0x20, 0x0f, 0xf0, 0xd1, 0xfe, 0x80, 0xbd, + 0x80, 0xb5, 0x02, 0x21, 0x07, 0x20, 0x0f, 0xf0, + 0xcb, 0xfe, 0x80, 0xbd, 0x06, 0x48, 0x80, 0xb5, + 0x00, 0x78, 0x00, 0x28, 0x01, 0xd0, 0xfd, 0xf7, + 0x29, 0xfd, 0x00, 0x22, 0x07, 0x21, 0x11, 0x20, + 0x0f, 0xf0, 0x7c, 0xff, 0x3c, 0x00, 0xb8, 0x38, + 0x00, 0x00, 0x80, 0xbd, 0x00, 0x00, 0x78, 0x69, + 0x01, 0x00, 0x10, 0xb5, 0x04, 0x1c, 0x10, 0x1c, + 0x06, 0x4a, 0x51, 0x61, 0x00, 0xf0, 0xa3, 0xf8, + 0x10, 0x20, 0x00, 0x2c, 0x00, 0xd1, 0x11, 0x20, + 0x00, 0x22, 0x07, 0x21, 0x0f, 0xf0, 0x69, 0xff, + 0x10, 0xbd, 0x5c, 0x69, 0x01, 0x00, 0x01, 0x49, + 0x48, 0x62, 0x70, 0x47, 0x00, 0x00, 0x44, 0x7d, + 0x01, 0x00, 0x10, 0xb5, 0x09, 0x4c, 0x3c, 0x00, + 0xf4, 0x38, 0x00, 0x00, 0xe0, 0x69, 0x00, 0x28, + 0x0c, 0xd1, 0xe0, 0x62, 0x01, 0x20, 0xe0, 0x61, + 0x0b, 0xf0, 0x08, 0xfd, 0x0b, 0xf0, 0x74, 0xfe, + 0x01, 0x20, 0x00, 0xf0, 0xb5, 0xf8, 0x0f, 0xf0, + 0x4d, 0xfa, 0x60, 0x63, 0x10, 0xbd, 0x00, 0x00, + 0x44, 0x7d, 0x01, 0x00, 0x05, 0x49, 0x80, 0xb5, + 0x00, 0x20, 0xc8, 0x61, 0x88, 0x63, 0x00, 0xf0, + 0x89, 0xf8, 0x00, 0xf0, 0x01, 0xf9, 0x02, 0xf0, + 0x3c, 0x00, 0x30, 0x39, 0x00, 0x00, 0x91, 0xfb, + 0x80, 0xbd, 0x44, 0x7d, 0x01, 0x00, 0x10, 0xb5, + 0x01, 0x28, 0x38, 0xd1, 0x08, 0x06, 0x00, 0x0e, + 0x05, 0x28, 0x32, 0xd1, 0x1d, 0x4c, 0x20, 0x78, + 0x01, 0x28, 0x09, 0xd0, 0x02, 0x28, 0x1b, 0xd0, + 0x03, 0x28, 0x2a, 0xd1, 0x02, 0xf0, 0x7d, 0xfb, + 0x00, 0xf0, 0x6f, 0xf8, 0x01, 0x20, 0x10, 0xe0, + 0x17, 0x48, 0x21, 0x6b, 0x0b, 0xf0, 0x1b, 0xfd, + 0x0b, 0xf0, 0x3c, 0x00, 0x6c, 0x39, 0x00, 0x00, + 0x41, 0xfe, 0x15, 0x48, 0x00, 0x69, 0x03, 0x28, + 0x01, 0xd3, 0xc0, 0x07, 0x03, 0xd5, 0x01, 0x21, + 0x20, 0x6b, 0x07, 0xf0, 0x19, 0xff, 0x02, 0x20, + 0x00, 0xf0, 0x78, 0xf8, 0x10, 0xbd, 0x0f, 0x48, + 0x00, 0x68, 0x20, 0x64, 0x0a, 0x48, 0x5c, 0x30, + 0xc1, 0x68, 0x02, 0x69, 0x89, 0x18, 0xc1, 0x60, + 0x03, 0xf0, 0xcc, 0xfc, 0x03, 0x20, 0x00, 0xf0, + 0x69, 0xf8, 0x01, 0x20, 0x3c, 0x00, 0xa8, 0x39, + 0x00, 0x00, 0xe0, 0x62, 0x10, 0xbd, 0x09, 0x21, + 0x00, 0xe0, 0x08, 0x21, 0x09, 0x20, 0xfd, 0xf7, + 0x76, 0xfc, 0x10, 0xbd, 0x00, 0x00, 0x44, 0x7d, + 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, 0xf4, 0x68, + 0x01, 0x00, 0x78, 0x6e, 0x01, 0x00, 0xb0, 0xb5, + 0x0f, 0x4c, 0x20, 0x78, 0x65, 0x1e, 0x01, 0x28, + 0x0f, 0xd1, 0x00, 0x20, 0xff, 0xf7, 0xa1, 0xfc, + 0x0c, 0x49, 0x09, 0x88, 0x49, 0x08, 0x3c, 0x00, + 0xe4, 0x39, 0x00, 0x00, 0x40, 0x1a, 0x0f, 0xf0, + 0x19, 0xf9, 0x00, 0x28, 0x04, 0xd0, 0x28, 0x78, + 0x01, 0x28, 0x07, 0xd0, 0x02, 0x28, 0x05, 0xd0, + 0x20, 0x78, 0x00, 0x28, 0x04, 0xd1, 0x28, 0x78, + 0x03, 0x28, 0x01, 0xd1, 0x01, 0x20, 0xb0, 0xbd, + 0x00, 0x20, 0xb0, 0xbd, 0x45, 0x7d, 0x01, 0x00, + 0xf4, 0x67, 0x01, 0x00, 0x01, 0x49, 0xc8, 0x64, + 0x70, 0x47, 0x00, 0x00, 0x44, 0x7d, 0x01, 0x00, + 0x3c, 0x00, 0x20, 0x3a, 0x00, 0x00, 0x04, 0x49, + 0x05, 0x4a, 0x89, 0x68, 0x12, 0x6d, 0x01, 0x20, + 0x91, 0x42, 0x00, 0xd3, 0x00, 0x20, 0x70, 0x47, + 0x00, 0x00, 0xf4, 0x68, 0x01, 0x00, 0x44, 0x7d, + 0x01, 0x00, 0x10, 0xb5, 0x06, 0x4c, 0x20, 0x6b, + 0x07, 0xf0, 0xf9, 0xfe, 0xa0, 0x6b, 0x00, 0x28, + 0x03, 0xd1, 0x03, 0x48, 0x21, 0x6b, 0x0b, 0xf0, + 0x92, 0xfc, 0x10, 0xbd, 0x00, 0x00, 0x44, 0x7d, + 0x01, 0x00, 0x3c, 0x00, 0x5c, 0x3a, 0x00, 0x00, + 0x34, 0x63, 0x01, 0x00, 0x04, 0x48, 0x00, 0x78, + 0x02, 0x28, 0x01, 0xd0, 0x03, 0x28, 0x01, 0xd1, + 0x01, 0x20, 0x70, 0x47, 0x00, 0x20, 0x70, 0x47, + 0x44, 0x7d, 0x01, 0x00, 0xf8, 0xb5, 0x07, 0x1c, + 0xff, 0xf7, 0xd0, 0xff, 0x06, 0x1c, 0x01, 0x2f, + 0x26, 0x4d, 0x1f, 0xd0, 0x02, 0x2f, 0x45, 0xd0, + 0x03, 0x2f, 0x12, 0xd1, 0x24, 0x48, 0x25, 0x4b, + 0x00, 0x69, 0x6a, 0x69, 0x3c, 0x00, 0x98, 0x3a, + 0x00, 0x00, 0x41, 0x08, 0x5a, 0x43, 0x23, 0x4b, + 0xd4, 0x18, 0x8c, 0x42, 0x00, 0xd9, 0x0c, 0x1c, + 0x00, 0x2e, 0x05, 0xd0, 0x1e, 0x49, 0x5b, 0x39, + 0x09, 0x78, 0x00, 0x29, 0x00, 0xd1, 0x04, 0x1c, + 0x05, 0x22, 0x21, 0x1c, 0x09, 0x20, 0x0f, 0xf0, + 0x80, 0xfd, 0x18, 0x4a, 0x5c, 0x3a, 0x17, 0x70, + 0xf8, 0xbd, 0xff, 0xf7, 0xd6, 0xfb, 0x00, 0x28, + 0x02, 0xd0, 0x28, 0x69, 0x00, 0x28, 0x3c, 0x00, + 0xd4, 0x3a, 0x00, 0x00, 0x0e, 0xd0, 0x04, 0xf0, + 0xcf, 0xfb, 0x13, 0x4b, 0x69, 0x69, 0x11, 0x4a, + 0x59, 0x43, 0x5c, 0x3a, 0xd2, 0x6b, 0x89, 0x18, + 0x88, 0x42, 0x01, 0xd9, 0x44, 0x1a, 0x04, 0xe0, + 0x00, 0x24, 0x02, 0xe0, 0x04, 0xf0, 0xae, 0xfd, + 0x04, 0x1c, 0x00, 0x2e, 0xdb, 0xd0, 0x09, 0x48, + 0x5b, 0x38, 0x00, 0x78, 0x01, 0x28, 0xd6, 0xd1, + 0x08, 0x4b, 0x9c, 0x42, 0x02, 0xd9, 0x58, 0x42, + 0x3c, 0x00, 0x10, 0x3b, 0x00, 0x00, 0x24, 0x18, + 0xd0, 0xe7, 0x00, 0x24, 0xce, 0xe7, 0x04, 0xf0, + 0xae, 0xfb, 0xca, 0xe7, 0x00, 0x00, 0xf4, 0x68, + 0x01, 0x00, 0xa0, 0x7d, 0x01, 0x00, 0x98, 0x3a, + 0x00, 0x00, 0x88, 0x13, 0x00, 0x00, 0x80, 0xb5, + 0x05, 0x21, 0x09, 0x20, 0x0f, 0xf0, 0x7d, 0xfd, + 0x02, 0x49, 0x00, 0x20, 0x08, 0x70, 0x80, 0xbd, + 0x00, 0x00, 0x44, 0x7d, 0x01, 0x00, 0x70, 0xb5, + 0x06, 0x1c, 0x3c, 0x00, 0x4c, 0x3b, 0x00, 0x00, + 0x0d, 0xf0, 0xbc, 0xfa, 0xff, 0xf7, 0xce, 0xfe, + 0x09, 0x4c, 0x0a, 0x48, 0x21, 0x6b, 0x0b, 0xf0, + 0x21, 0xfc, 0x01, 0x25, 0x01, 0x21, 0x30, 0x06, + 0x00, 0x0e, 0xa5, 0x63, 0x07, 0xf0, 0x3a, 0xfe, + 0x05, 0x48, 0x29, 0x02, 0x09, 0x58, 0x00, 0x29, + 0x00, 0xd1, 0x05, 0x61, 0x70, 0xbd, 0x00, 0x00, + 0x44, 0x7d, 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, + 0xf4, 0x67, 0x01, 0x00, 0x3c, 0x00, 0x88, 0x3b, + 0x00, 0x00, 0x02, 0x4a, 0x11, 0x6c, 0x08, 0x43, + 0x10, 0x64, 0x70, 0x47, 0x00, 0x00, 0x44, 0x7d, + 0x01, 0x00, 0x80, 0xb5, 0xff, 0xf7, 0xbf, 0xfe, + 0x0b, 0xf0, 0xa1, 0xfb, 0x80, 0xbd, 0x02, 0x4a, + 0x01, 0x1c, 0x10, 0x69, 0x11, 0x61, 0x70, 0x47, + 0x00, 0x00, 0x44, 0x7d, 0x01, 0x00, 0xf3, 0xb5, + 0x06, 0x1c, 0x00, 0x20, 0x89, 0xb0, 0xf8, 0x4c, + 0x08, 0x90, 0xe2, 0x69, 0x08, 0x25, 0x3c, 0x00, + 0xc4, 0x3b, 0x00, 0x00, 0x00, 0x2a, 0x03, 0xd0, + 0x06, 0xa9, 0x07, 0xa8, 0xfc, 0xf7, 0x06, 0xfc, + 0x30, 0x1c, 0xf3, 0x4e, 0x00, 0x27, 0x20, 0x36, + 0x82, 0x28, 0x6f, 0xd0, 0x15, 0xdc, 0x01, 0x28, + 0x18, 0xd0, 0x80, 0x28, 0x6b, 0xd1, 0xee, 0x4d, + 0x80, 0x3d, 0xa8, 0x68, 0x01, 0x28, 0x67, 0xd1, + 0x68, 0x68, 0x0f, 0xf0, 0x1b, 0xf8, 0x00, 0x28, + 0x63, 0xd1, 0x01, 0x21, 0x01, 0x20, 0x0d, 0xf0, + 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x9d, 0xf8, + 0x08, 0xf0, 0xdb, 0xfd, 0x0b, 0xb0, 0xf0, 0xbd, + 0x83, 0x28, 0x6d, 0xd0, 0x84, 0x28, 0x55, 0xd1, + 0xe7, 0xe0, 0x0a, 0x98, 0x0a, 0x28, 0x04, 0xd2, + 0x03, 0xa3, 0x1b, 0x18, 0x1b, 0x5a, 0x5b, 0x00, + 0x9f, 0x44, 0xf6, 0xe0, 0x00, 0x00, 0xee, 0x00, + 0x0b, 0x00, 0xf7, 0x00, 0xf7, 0x00, 0xf7, 0x00, + 0xf7, 0x00, 0x2f, 0x00, 0x88, 0x00, 0x8b, 0x00, + 0xad, 0x00, 0x3c, 0x00, 0x3c, 0x3c, 0x00, 0x00, + 0x00, 0xf0, 0x56, 0xfe, 0x00, 0x28, 0x17, 0xd0, + 0xd6, 0x4a, 0x80, 0x3a, 0xd1, 0x6a, 0x06, 0x98, + 0x81, 0x42, 0x16, 0xd0, 0x06, 0x21, 0x00, 0x28, + 0x00, 0xd1, 0x07, 0x21, 0x0d, 0x06, 0x2d, 0x0e, + 0x00, 0x28, 0x0e, 0xd0, 0xcf, 0x4a, 0x01, 0x20, + 0x80, 0x3a, 0x50, 0x65, 0x0f, 0xf0, 0xa0, 0xf8, + 0xcc, 0x4a, 0x80, 0x3a, 0x50, 0x66, 0x04, 0xe0, + 0x00, 0x21, 0x16, 0x20, 0x3c, 0x00, 0x78, 0x3c, + 0x00, 0x00, 0x0f, 0xf0, 0xdc, 0xfc, 0x01, 0x25, + 0x02, 0x20, 0x05, 0x90, 0x2e, 0xe2, 0xc6, 0x48, + 0x80, 0x38, 0x40, 0x6d, 0x00, 0x28, 0x2e, 0xd0, + 0xc6, 0x49, 0x20, 0x69, 0xc4, 0x4d, 0x40, 0x18, + 0x0e, 0xf0, 0xc1, 0xff, 0x00, 0x28, 0x12, 0xd0, + 0x0f, 0xf0, 0x85, 0xf8, 0xc1, 0x49, 0x49, 0x42, + 0x40, 0x18, 0xbd, 0x49, 0x20, 0x61, 0x80, 0x39, + 0x48, 0x6e, 0x40, 0x19, 0x0e, 0xf0, 0x3c, 0x00, + 0xb4, 0x3c, 0x00, 0x00, 0xbb, 0xff, 0x00, 0x28, + 0x11, 0xd0, 0x0a, 0xe0, 0xf7, 0xe0, 0x17, 0xe2, + 0xb2, 0xe0, 0xb0, 0xe0, 0xb6, 0x49, 0x20, 0x69, + 0x80, 0x39, 0x49, 0x6e, 0x40, 0x1a, 0xa8, 0x42, + 0x05, 0xdb, 0xb3, 0x49, 0xb5, 0x4d, 0x80, 0x39, + 0x4f, 0x65, 0x03, 0xf0, 0x27, 0xfb, 0x06, 0x22, + 0x29, 0x1c, 0x16, 0x20, 0x0f, 0xf0, 0x72, 0xfc, + 0x47, 0xe0, 0x95, 0xe0, 0x00, 0xf0, 0xfe, 0xfd, + 0x3c, 0x00, 0xf0, 0x3c, 0x00, 0x00, 0x00, 0x28, + 0x42, 0xd1, 0xaa, 0x4d, 0xc4, 0x3d, 0xef, 0x60, + 0x08, 0xf0, 0x19, 0xfd, 0x03, 0xf0, 0x15, 0xfb, + 0xa8, 0x6a, 0x00, 0x28, 0x02, 0xd0, 0xff, 0xf7, + 0x4c, 0xff, 0xaf, 0x62, 0xa4, 0x48, 0x80, 0x38, + 0x00, 0x68, 0x00, 0x21, 0xff, 0xf7, 0xf9, 0xfc, + 0x08, 0xf0, 0x3f, 0xf9, 0x09, 0x21, 0x16, 0x20, + 0x0f, 0xf0, 0x87, 0xfc, 0x00, 0x22, 0x16, 0x21, + 0x83, 0x20, 0x3c, 0x00, 0x2c, 0x3d, 0x00, 0x00, + 0x0f, 0xf0, 0x40, 0xfd, 0xff, 0xf7, 0x86, 0xfc, + 0x21, 0xe0, 0x00, 0xf0, 0x1b, 0xfe, 0x1e, 0xe0, + 0x06, 0xf0, 0x54, 0xfa, 0x97, 0x4d, 0x80, 0x3d, + 0xa9, 0x6f, 0x40, 0x1a, 0x04, 0x90, 0x06, 0x98, + 0x00, 0x28, 0x01, 0xd0, 0xaf, 0x65, 0x02, 0xe0, + 0xa8, 0x6d, 0x00, 0x28, 0x08, 0xd1, 0x91, 0x48, + 0xc4, 0x38, 0x00, 0x78, 0x80, 0x07, 0x03, 0xd5, + 0x92, 0x48, 0x47, 0x60, 0x3c, 0x00, 0x68, 0x3d, + 0x00, 0x00, 0x00, 0xf0, 0x02, 0xfe, 0x04, 0x98, + 0xff, 0x38, 0x23, 0x38, 0x14, 0x28, 0x02, 0xd2, + 0x01, 0x20, 0xe8, 0x63, 0x53, 0xe0, 0xef, 0x63, + 0x51, 0xe0, 0x87, 0x4a, 0xb5, 0x7a, 0x80, 0x3a, + 0x00, 0x2d, 0x4c, 0xd0, 0x0d, 0xf0, 0x71, 0xff, + 0x00, 0xf0, 0xad, 0xfd, 0x07, 0x1c, 0x82, 0x48, + 0x80, 0x38, 0x40, 0x6f, 0xff, 0x30, 0x5f, 0x30, + 0x0e, 0xf0, 0x3d, 0xff, 0x02, 0x1c, 0x3c, 0x00, + 0xa4, 0x3d, 0x00, 0x00, 0x7e, 0x48, 0x80, 0x38, + 0x40, 0x6d, 0x00, 0x28, 0x1a, 0xd1, 0x00, 0xf0, + 0xf1, 0xfd, 0x00, 0x28, 0x16, 0xd1, 0x04, 0x2d, + 0x02, 0xd1, 0x00, 0x2f, 0x12, 0xd1, 0x1b, 0xe0, + 0x00, 0x2f, 0x06, 0xd0, 0x02, 0x2d, 0x14, 0xd0, + 0x79, 0x48, 0x40, 0x68, 0x00, 0x28, 0x09, 0xd0, + 0x12, 0xe0, 0x00, 0x2a, 0x10, 0xd1, 0x4b, 0x21, + 0xc9, 0x00, 0x01, 0x23, 0x09, 0x22, 0x16, 0x20, + 0x3c, 0x00, 0xe0, 0x3d, 0x00, 0x00, 0x0f, 0xf0, + 0xd6, 0xfc, 0x6e, 0x4a, 0x73, 0x48, 0x80, 0x3a, + 0x11, 0x68, 0x0b, 0xf0, 0xd8, 0xfa, 0x18, 0xe0, + 0x01, 0x21, 0x00, 0x20, 0x01, 0xe0, 0x01, 0x21, + 0x01, 0x20, 0x00, 0xf0, 0x2a, 0xfe, 0x10, 0xe0, + 0x67, 0x4a, 0x6c, 0x49, 0x80, 0x3a, 0x90, 0x6e, + 0x40, 0x18, 0x90, 0x66, 0x01, 0x25, 0x08, 0x95, + 0x8b, 0xe1, 0x04, 0x21, 0x6c, 0xe1, 0x61, 0x4a, + 0x66, 0x48, 0x3c, 0x00, 0x1c, 0x3e, 0x00, 0x00, + 0x80, 0x3a, 0x11, 0x68, 0x0b, 0xf0, 0xaa, 0xfa, + 0x88, 0xe1, 0xaf, 0x60, 0xa8, 0x6f, 0xe8, 0x67, + 0x63, 0x48, 0x01, 0x6d, 0xa9, 0x67, 0x07, 0x9a, + 0x14, 0x20, 0x00, 0x2a, 0x00, 0xd1, 0x00, 0x20, + 0x08, 0x18, 0x12, 0x30, 0xa8, 0x66, 0x70, 0x78, + 0xb0, 0x70, 0x30, 0x78, 0x70, 0x70, 0x02, 0x20, + 0x30, 0x70, 0xa0, 0x69, 0xfc, 0xf7, 0xc2, 0xfa, + 0xef, 0x64, 0xa8, 0x6f, 0x3c, 0x00, 0x58, 0x3e, + 0x00, 0x00, 0xe9, 0x6f, 0x59, 0x4b, 0x40, 0x1a, + 0x98, 0x42, 0x12, 0xd2, 0x68, 0x6d, 0x06, 0x99, + 0x88, 0x42, 0x0e, 0xd0, 0x30, 0x78, 0x02, 0x28, + 0x0b, 0xd8, 0x0e, 0xf0, 0x9c, 0xff, 0xa9, 0x6f, + 0x08, 0x22, 0x40, 0x1a, 0x52, 0x49, 0x09, 0x1a, + 0x3b, 0x1c, 0x16, 0x20, 0x0f, 0xf0, 0x85, 0xfc, + 0x00, 0xe0, 0xaf, 0x65, 0x01, 0x20, 0x05, 0x90, + 0x08, 0x90, 0x43, 0x48, 0x02, 0x25, 0x3c, 0x00, + 0x94, 0x3e, 0x00, 0x00, 0xc4, 0x38, 0xc1, 0x68, + 0x00, 0x29, 0x72, 0xd1, 0x01, 0x21, 0xc1, 0x60, + 0x49, 0x48, 0x00, 0x6b, 0x00, 0x28, 0x6c, 0xd0, + 0x08, 0xf0, 0x66, 0xfc, 0x69, 0xe0, 0x3c, 0x48, + 0x00, 0x22, 0x01, 0x92, 0x80, 0x38, 0x80, 0x68, + 0x01, 0x28, 0x04, 0xd1, 0x38, 0x48, 0x80, 0x38, + 0x87, 0x60, 0x01, 0x20, 0x48, 0xe1, 0x3a, 0x48, + 0x01, 0x23, 0x43, 0x60, 0x34, 0x48, 0xc4, 0x38, + 0x3c, 0x00, 0xd0, 0x3e, 0x00, 0x00, 0x00, 0x78, + 0x00, 0x28, 0x0a, 0xd1, 0x00, 0xf0, 0x25, 0xfe, + 0x00, 0x28, 0x06, 0xd0, 0xff, 0x21, 0x91, 0x31, + 0x01, 0x23, 0x09, 0x22, 0x16, 0x20, 0x0f, 0xf0, + 0x52, 0xfc, 0x2c, 0x49, 0x80, 0x39, 0x48, 0x6f, + 0x89, 0x6f, 0x42, 0x1a, 0x03, 0x92, 0x06, 0xf0, + 0x76, 0xf9, 0x28, 0x49, 0x80, 0x39, 0x89, 0x6f, + 0x03, 0x9a, 0x40, 0x1a, 0x02, 0x90, 0x37, 0x20, + 0x00, 0x01, 0x3c, 0x00, 0x0c, 0x3f, 0x00, 0x00, + 0x10, 0x1a, 0x50, 0x28, 0x0d, 0xd2, 0x23, 0x48, + 0x80, 0x38, 0x40, 0x6d, 0x00, 0x28, 0x04, 0xd1, + 0x02, 0x98, 0xff, 0x38, 0x55, 0x38, 0x14, 0x28, + 0x01, 0xd2, 0x01, 0x22, 0x00, 0xe0, 0x00, 0x22, + 0x01, 0x92, 0x03, 0x9a, 0x01, 0x20, 0xff, 0x3a, + 0x0b, 0x3a, 0x50, 0x2a, 0x00, 0xd3, 0x00, 0x20, + 0x04, 0x90, 0x00, 0x28, 0x0a, 0xd0, 0x17, 0x48, + 0x80, 0x38, 0xc0, 0x6f, 0x3c, 0x00, 0x48, 0x3f, + 0x00, 0x00, 0x08, 0x1a, 0x9b, 0x21, 0xc9, 0x00, + 0x40, 0x1a, 0x14, 0x28, 0x01, 0xd2, 0x01, 0x22, + 0x00, 0xe0, 0x00, 0x22, 0x00, 0x92, 0x00, 0x2a, + 0x11, 0xd0, 0x0f, 0x4d, 0x01, 0x20, 0x80, 0x3d, + 0x68, 0x65, 0x0e, 0xf0, 0x20, 0xff, 0x68, 0x66, + 0x01, 0x25, 0x01, 0x21, 0x16, 0x20, 0x0f, 0xf0, + 0x5e, 0xfb, 0x00, 0x21, 0x16, 0x20, 0x0f, 0xf0, + 0x5a, 0xfb, 0x00, 0xe0, 0xba, 0xe0, 0x3c, 0x00, + 0x84, 0x3f, 0x00, 0x00, 0xf0, 0x79, 0x02, 0x28, + 0x3c, 0xd8, 0x05, 0x4a, 0x80, 0x3a, 0x51, 0x6c, + 0x00, 0x29, 0x37, 0xd1, 0x13, 0x6c, 0x11, 0x1c, + 0x00, 0x2b, 0x33, 0xd1, 0x16, 0xe0, 0x00, 0x00, + 0x24, 0x6d, 0x01, 0x00, 0x50, 0xc3, 0x00, 0x00, + 0xc0, 0x5c, 0x15, 0x00, 0x70, 0x99, 0x14, 0x00, + 0xb0, 0x57, 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, + 0xe2, 0x04, 0x00, 0x00, 0x00, 0x90, 0x07, 0x00, + 0x3c, 0x00, 0xc0, 0x3f, 0x00, 0x00, 0x53, 0x07, + 0x00, 0x00, 0x1e, 0x02, 0x00, 0x00, 0xc8, 0x57, + 0x01, 0x00, 0x4a, 0x6d, 0x00, 0x2a, 0x02, 0xd0, + 0xb2, 0x7a, 0x02, 0x2a, 0x15, 0xd1, 0x00, 0x9a, + 0x00, 0x2a, 0x03, 0xd0, 0xca, 0x6d, 0x01, 0x32, + 0xca, 0x65, 0x00, 0xe0, 0xcf, 0x65, 0x01, 0x9a, + 0x00, 0x2a, 0x0b, 0xd0, 0x8a, 0x6f, 0xcb, 0x6f, + 0xd2, 0x1a, 0x5a, 0x4b, 0x9a, 0x42, 0x02, 0xd2, + 0x8a, 0x6d, 0x3c, 0x00, 0xfc, 0x3f, 0x00, 0x00, + 0x01, 0x32, 0x00, 0xe0, 0x01, 0x22, 0x8a, 0x65, + 0x00, 0xe0, 0x8f, 0x65, 0x04, 0x99, 0x00, 0x29, + 0x01, 0xd1, 0x02, 0x28, 0x0b, 0xd9, 0x54, 0x4a, + 0x02, 0x28, 0x1e, 0xd9, 0xd0, 0x6f, 0x61, 0x68, + 0x88, 0x42, 0x1a, 0xd1, 0x91, 0x6f, 0x08, 0x1a, + 0x50, 0x49, 0x88, 0x42, 0x15, 0xdd, 0x4e, 0x4b, + 0x98, 0x6f, 0xe1, 0x68, 0x40, 0x1a, 0x7d, 0x21, + 0xc9, 0x00, 0x88, 0x42, 0x3c, 0x00, 0x38, 0x40, + 0x00, 0x00, 0x0b, 0xdd, 0x61, 0x69, 0x40, 0x1a, + 0x00, 0x28, 0x04, 0xdd, 0x02, 0x11, 0x40, 0x11, + 0x10, 0x18, 0x40, 0x18, 0x01, 0xe0, 0x80, 0x10, + 0x08, 0x18, 0x60, 0x61, 0x58, 0x6f, 0xe0, 0x60, + 0x03, 0x98, 0xff, 0x38, 0x23, 0x38, 0x14, 0x28, + 0x09, 0xd2, 0x02, 0x98, 0xff, 0x38, 0x23, 0x38, + 0x14, 0x28, 0x04, 0xd2, 0x3e, 0x4a, 0x90, 0x6f, + 0x50, 0x64, 0x90, 0x6a, 0x90, 0x64, 0x3c, 0x00, + 0x74, 0x40, 0x00, 0x00, 0x0e, 0xf0, 0x9a, 0xfe, + 0x3a, 0x49, 0x49, 0x6c, 0x40, 0x1a, 0x3b, 0x49, + 0x88, 0x42, 0x01, 0xd9, 0x37, 0x49, 0x4f, 0x64, + 0x39, 0x49, 0x03, 0x98, 0x40, 0x18, 0x14, 0x28, + 0x07, 0xd2, 0x34, 0x49, 0xc8, 0x6b, 0x00, 0x28, + 0x03, 0xd0, 0x88, 0x6f, 0x08, 0x64, 0x88, 0x6a, + 0x88, 0x64, 0x0e, 0xf0, 0x83, 0xfe, 0x2f, 0x49, + 0x09, 0x6c, 0x40, 0x1a, 0x31, 0x49, 0x88, 0x42, + 0x3c, 0x00, 0xb0, 0x40, 0x00, 0x00, 0x01, 0xd9, + 0x2c, 0x48, 0x07, 0x64, 0x04, 0x20, 0x05, 0x90, + 0x08, 0x21, 0x16, 0x20, 0x0f, 0xf0, 0xb9, 0xfa, + 0x28, 0x48, 0x40, 0x6d, 0x00, 0x28, 0x02, 0xd0, + 0x04, 0x99, 0x00, 0x29, 0x08, 0xd0, 0x29, 0x49, + 0x00, 0x28, 0x00, 0xd1, 0x29, 0x49, 0x3b, 0x1c, + 0x06, 0x22, 0x16, 0x20, 0x0f, 0xf0, 0x57, 0xfb, + 0x02, 0x2d, 0x09, 0xd0, 0x06, 0x2d, 0x0a, 0xd0, + 0x07, 0x2d, 0x3c, 0x00, 0xec, 0x40, 0x00, 0x00, + 0x13, 0xd1, 0x07, 0xe0, 0x01, 0x21, 0x16, 0x20, + 0xfd, 0xf7, 0xd6, 0xf8, 0x1e, 0xe0, 0x1a, 0x4a, + 0x57, 0x63, 0x97, 0x63, 0x18, 0x4a, 0x06, 0x98, + 0xd0, 0x62, 0x07, 0x99, 0x11, 0x63, 0x53, 0x6b, + 0x18, 0x43, 0x50, 0x63, 0x90, 0x6b, 0x08, 0x43, + 0x90, 0x63, 0x05, 0x98, 0x00, 0x28, 0x05, 0xd0, + 0x05, 0x98, 0x0c, 0xf0, 0x5f, 0xfa, 0x05, 0x98, + 0x0c, 0xf0, 0xd2, 0xf9, 0x3c, 0x00, 0x28, 0x41, + 0x00, 0x00, 0x08, 0x2d, 0x05, 0xd0, 0x0d, 0x48, + 0x44, 0x38, 0x85, 0x70, 0x28, 0x1c, 0x03, 0xf0, + 0xdc, 0xfd, 0x11, 0x49, 0xe0, 0x69, 0x88, 0x42, + 0x00, 0xd1, 0x61, 0xe5, 0x08, 0x98, 0x00, 0x28, + 0xfb, 0xd0, 0xb0, 0x7a, 0x02, 0x28, 0xf8, 0xd1, + 0x01, 0x21, 0x16, 0x20, 0x0f, 0xf0, 0x6f, 0xfa, + 0x02, 0x20, 0x0d, 0xf0, 0xe8, 0xfe, 0x53, 0xe5, + 0x00, 0x00, 0x53, 0x07, 0x00, 0x00, 0x3c, 0x00, + 0x64, 0x41, 0x00, 0x00, 0xa4, 0x6c, 0x01, 0x00, + 0x20, 0xa1, 0x07, 0x00, 0x20, 0x4e, 0x00, 0x00, + 0x3f, 0xfb, 0xff, 0xff, 0xa0, 0x86, 0x01, 0x00, + 0x50, 0xc3, 0x00, 0x00, 0xc0, 0x5c, 0x15, 0x00, + 0xf1, 0x1d, 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x70, 0x47, 0x00, 0x00, 0xf8, 0xb5, 0x21, 0x48, + 0x00, 0x68, 0x21, 0x4d, 0x69, 0x69, 0x08, 0x40, + 0x01, 0xd1, 0x01, 0x27, 0x00, 0xe0, 0x00, 0x27, + 0x3c, 0x00, 0xa0, 0x41, 0x00, 0x00, 0x1d, 0x4d, + 0x01, 0x26, 0x69, 0x6a, 0x00, 0x29, 0x00, 0xd0, + 0x00, 0x26, 0x1b, 0x4d, 0x1a, 0x48, 0x2c, 0x1c, + 0xa0, 0x30, 0x02, 0x7a, 0x28, 0x1c, 0x40, 0x30, + 0x80, 0x34, 0x10, 0x23, 0xb7, 0x42, 0x10, 0xd1, + 0x01, 0x25, 0xc5, 0x80, 0x00, 0x29, 0x00, 0xd0, + 0x00, 0x23, 0x1a, 0x43, 0x11, 0x1c, 0x01, 0x73, + 0x01, 0x20, 0x0e, 0xf0, 0x88, 0xfe, 0x08, 0x20, + 0x20, 0x70, 0x3c, 0x00, 0xdc, 0x41, 0x00, 0x00, + 0x00, 0x22, 0x16, 0x21, 0x80, 0x20, 0x13, 0xe0, + 0x11, 0x27, 0xc7, 0x80, 0x2e, 0x1c, 0x0b, 0x4d, + 0x00, 0x29, 0x00, 0xd1, 0x00, 0x23, 0x1a, 0x43, + 0x11, 0x1c, 0x01, 0x73, 0x01, 0x20, 0x0e, 0xf0, + 0x75, 0xfe, 0x08, 0x20, 0x20, 0x70, 0x30, 0x6d, + 0x00, 0x22, 0x16, 0x21, 0x68, 0x67, 0x82, 0x20, + 0x0f, 0xf0, 0xd0, 0xfa, 0xf8, 0xbd, 0x00, 0x00, + 0x10, 0x00, 0x07, 0x00, 0x3c, 0x00, 0x18, 0x42, + 0x00, 0x00, 0xa4, 0x6c, 0x01, 0x00, 0x00, 0x90, + 0x07, 0x00, 0xb0, 0xb5, 0x0f, 0x4d, 0x04, 0x1c, + 0xaa, 0x7a, 0x01, 0x21, 0x08, 0x1c, 0x00, 0x2a, + 0x00, 0xd0, 0x00, 0x20, 0x00, 0x2c, 0x00, 0xd0, + 0x00, 0x21, 0x88, 0x42, 0x0a, 0xd0, 0x00, 0x2c, + 0x04, 0xd1, 0x00, 0xf0, 0x42, 0xfb, 0x00, 0xf0, + 0xd6, 0xfa, 0x03, 0xe0, 0x00, 0xf0, 0xd9, 0xfa, + 0x00, 0xf0, 0x09, 0xf8, 0xa8, 0x7a, 0x3c, 0x00, + 0x54, 0x42, 0x00, 0x00, 0x02, 0x49, 0xe4, 0x39, + 0x48, 0x71, 0xac, 0x72, 0xb0, 0xbd, 0x00, 0x00, + 0x44, 0x6d, 0x01, 0x00, 0x80, 0xb5, 0x3e, 0xf0, + 0x55, 0xf8, 0x02, 0x49, 0x01, 0x20, 0x08, 0x70, + 0x80, 0xbd, 0x00, 0x00, 0x68, 0x7e, 0x01, 0x00, + 0xf3, 0xb5, 0x01, 0x20, 0x8d, 0xb0, 0x0f, 0x1c, + 0x01, 0x24, 0x08, 0x90, 0x0e, 0xf0, 0x92, 0xfd, + 0x06, 0x1c, 0x00, 0xf0, 0xb5, 0xfa, 0x09, 0x90, + 0x3c, 0x00, 0x90, 0x42, 0x00, 0x00, 0x00, 0xf0, + 0x80, 0xfb, 0x07, 0x90, 0xfe, 0xf7, 0x3f, 0xfa, + 0x05, 0x1c, 0x00, 0x21, 0x0c, 0x91, 0x08, 0xf0, + 0xf0, 0xfb, 0x00, 0x28, 0x01, 0xd1, 0x01, 0x20, + 0x00, 0xe0, 0x00, 0x20, 0x0a, 0x90, 0xfe, 0xf7, + 0x12, 0xfd, 0x05, 0xf0, 0xe0, 0xfe, 0x0b, 0x90, + 0x00, 0x2d, 0x23, 0xd0, 0x28, 0x88, 0x41, 0x07, + 0x20, 0xd4, 0x29, 0x1d, 0x04, 0x91, 0x0a, 0x35, + 0x00, 0x06, 0x3c, 0x00, 0xcc, 0x42, 0x00, 0x00, + 0x80, 0x0e, 0x01, 0x21, 0x20, 0x28, 0x03, 0x95, + 0x00, 0xd0, 0x00, 0x21, 0x0d, 0x1c, 0x04, 0x98, + 0x06, 0xf0, 0x38, 0xfd, 0x0c, 0x90, 0x04, 0x98, + 0x06, 0xf0, 0x10, 0xfd, 0x00, 0x28, 0x08, 0xd0, + 0x03, 0x98, 0x01, 0xf0, 0x87, 0xfa, 0x00, 0x28, + 0x03, 0xd0, 0x00, 0x2d, 0x01, 0xd1, 0x01, 0x20, + 0x00, 0xe0, 0x00, 0x20, 0x0c, 0x99, 0x01, 0x43, + 0x0c, 0x91, 0xfc, 0xf7, 0x3c, 0x00, 0x08, 0x43, + 0x00, 0x00, 0x23, 0xff, 0x00, 0x28, 0x2f, 0xd0, + 0x07, 0xf0, 0x99, 0xff, 0x05, 0x1c, 0x07, 0xf0, + 0xb2, 0xff, 0x04, 0x90, 0xff, 0xf7, 0xf3, 0xf8, + 0x0c, 0x99, 0x01, 0x43, 0x00, 0x2d, 0x06, 0xd0, + 0x04, 0x98, 0xf0, 0x4a, 0x30, 0x1a, 0x90, 0x42, + 0x01, 0xd2, 0x01, 0x20, 0x00, 0xe0, 0x00, 0x20, + 0x08, 0x43, 0x0c, 0x90, 0x0b, 0x98, 0x0a, 0x9b, + 0x18, 0x43, 0x01, 0x1c, 0x0b, 0x91, 0x3c, 0x00, + 0x44, 0x43, 0x00, 0x00, 0x05, 0xf0, 0xce, 0xfe, + 0x00, 0x28, 0x1a, 0xd1, 0x00, 0x2d, 0x06, 0xd0, + 0x04, 0x98, 0xe7, 0x49, 0x30, 0x1a, 0x88, 0x42, + 0x01, 0xd2, 0x01, 0x20, 0x00, 0xe0, 0x00, 0x20, + 0x0c, 0x99, 0x08, 0x43, 0x05, 0x1c, 0x00, 0xf0, + 0x1f, 0xfb, 0x28, 0x43, 0x03, 0xe0, 0x00, 0xf0, + 0x1b, 0xfb, 0x0c, 0x99, 0x08, 0x43, 0x0c, 0x90, + 0x00, 0xf0, 0xd4, 0xfb, 0x0b, 0x99, 0x01, 0x43, + 0x3c, 0x00, 0x80, 0x43, 0x00, 0x00, 0x0b, 0x91, + 0xdc, 0x49, 0xc8, 0x68, 0x00, 0x28, 0x01, 0xd0, + 0x01, 0x38, 0xc8, 0x60, 0x08, 0xf0, 0xe7, 0xfb, + 0x06, 0x90, 0x08, 0xf0, 0x90, 0xfd, 0x31, 0x1a, + 0x05, 0x91, 0x06, 0x99, 0xd6, 0x48, 0x81, 0x42, + 0x08, 0xd8, 0x00, 0x2f, 0x08, 0xd1, 0x05, 0x99, + 0x40, 0x08, 0x81, 0x42, 0x04, 0xd9, 0x06, 0x99, + 0x81, 0x42, 0x01, 0xd9, 0x00, 0x24, 0x8b, 0xe0, + 0xd0, 0x48, 0x3c, 0x00, 0xbc, 0x43, 0x00, 0x00, + 0x05, 0x99, 0xd0, 0x4d, 0x81, 0x42, 0x26, 0xd2, + 0xe8, 0x79, 0x10, 0x28, 0x06, 0xd2, 0x00, 0x2f, + 0x21, 0xd1, 0xcc, 0x48, 0xa0, 0x38, 0x80, 0x6a, + 0x00, 0x28, 0x1c, 0xd1, 0x09, 0xf0, 0x62, 0xff, + 0x04, 0x90, 0x00, 0x28, 0x02, 0xd1, 0x00, 0x20, + 0xc3, 0x49, 0x13, 0xe0, 0x09, 0xf0, 0x10, 0xfe, + 0x00, 0x28, 0x03, 0xd0, 0xc4, 0x48, 0xc0, 0x69, + 0x00, 0x28, 0xf4, 0xd0, 0x3c, 0x00, 0xf8, 0x43, + 0x00, 0x00, 0x04, 0x98, 0x05, 0x28, 0x03, 0xd0, + 0xc1, 0x48, 0x00, 0x6a, 0x00, 0x28, 0x65, 0xd1, + 0xbb, 0x49, 0x48, 0x6a, 0x00, 0x28, 0x23, 0xd0, + 0x01, 0x38, 0x48, 0x62, 0x00, 0xf0, 0x87, 0xff, + 0x00, 0x28, 0x11, 0xd0, 0xbb, 0x48, 0x05, 0x99, + 0x81, 0x42, 0x0d, 0xd2, 0x01, 0xf0, 0x9b, 0xf8, + 0x04, 0x30, 0x0d, 0xf0, 0xee, 0xfc, 0x40, 0x30, + 0xc1, 0x7a, 0x01, 0x29, 0x4e, 0xd0, 0x3c, 0x00, + 0x34, 0x44, 0x00, 0x00, 0x80, 0x7a, 0x00, 0x28, + 0x01, 0xd0, 0x05, 0x28, 0x49, 0xd3, 0x01, 0xf0, + 0xdf, 0xf8, 0x02, 0x28, 0x10, 0xd0, 0x00, 0x2f, + 0x02, 0xd1, 0x06, 0x98, 0x00, 0x28, 0x40, 0xd1, + 0x00, 0x20, 0x08, 0x90, 0x82, 0xe1, 0xaa, 0x48, + 0xa0, 0x38, 0xc0, 0x68, 0x00, 0x28, 0x38, 0xd0, + 0xa8, 0x48, 0x80, 0x69, 0x48, 0x62, 0x34, 0xe0, + 0x0a, 0xa9, 0x03, 0xc9, 0x08, 0x43, 0x45, 0xd0, + 0x3c, 0x00, 0x70, 0x44, 0x00, 0x00, 0xa3, 0x48, + 0x29, 0x78, 0xa0, 0x38, 0x02, 0x29, 0x40, 0xd8, + 0x40, 0x6d, 0x00, 0x28, 0x0a, 0xd0, 0x9f, 0x48, + 0xa2, 0x49, 0x20, 0x38, 0xc0, 0x68, 0x40, 0x18, + 0x0e, 0xf0, 0xc7, 0xfb, 0x00, 0x28, 0x01, 0xd0, + 0x01, 0x21, 0x00, 0xe0, 0x00, 0x21, 0x96, 0x4a, + 0x90, 0x6a, 0x00, 0x28, 0x02, 0xda, 0x64, 0x08, + 0x64, 0x00, 0x2a, 0xe0, 0x00, 0x29, 0x09, 0xd1, + 0x95, 0x4b, 0x3c, 0x00, 0xac, 0x44, 0x00, 0x00, + 0xa0, 0x3b, 0x5b, 0x6d, 0x00, 0x2b, 0x02, 0xd0, + 0x05, 0x28, 0x0d, 0xdb, 0x01, 0xe0, 0x07, 0x28, + 0x0a, 0xdb, 0x01, 0x20, 0xc0, 0x43, 0x90, 0x62, + 0x64, 0x08, 0x8e, 0x49, 0x64, 0x00, 0x00, 0x20, + 0xa0, 0x39, 0x88, 0x65, 0x14, 0xe0, 0xd1, 0xe0, + 0x39, 0x43, 0x11, 0xd1, 0x89, 0x49, 0xa0, 0x39, + 0xcb, 0x6d, 0x00, 0x2b, 0x02, 0xd1, 0x89, 0x6d, + 0x01, 0x29, 0x09, 0xd9, 0x3c, 0x00, 0xe8, 0x44, + 0x00, 0x00, 0x07, 0x9b, 0x00, 0x2b, 0x01, 0xd1, + 0x07, 0x28, 0x01, 0xdb, 0x64, 0x08, 0x64, 0x00, + 0x01, 0x30, 0x90, 0x62, 0xbd, 0xe0, 0x7d, 0x49, + 0x88, 0x69, 0x04, 0x90, 0x00, 0x20, 0x88, 0x61, + 0x0c, 0x98, 0x00, 0x28, 0x2c, 0xd0, 0x07, 0xf0, + 0x66, 0xfc, 0x00, 0x28, 0x02, 0xd0, 0x02, 0x20, + 0x04, 0x43, 0x25, 0xe0, 0x7a, 0x48, 0xc0, 0x6a, + 0x00, 0x28, 0x04, 0xd1, 0x77, 0x48, 0x3c, 0x00, + 0x24, 0x45, 0x00, 0x00, 0xa0, 0x38, 0xc0, 0x68, + 0x00, 0x28, 0x1c, 0xd1, 0x04, 0x98, 0x00, 0x28, + 0x0d, 0xd1, 0x28, 0x78, 0x10, 0x28, 0x02, 0xd3, + 0xe8, 0x78, 0x02, 0x28, 0x02, 0xd9, 0x28, 0x79, + 0x10, 0x28, 0x04, 0xd3, 0x04, 0x24, 0x6b, 0x49, + 0x01, 0x22, 0x8a, 0x61, 0x94, 0xe0, 0x6c, 0x48, + 0xa0, 0x38, 0x40, 0x6d, 0x00, 0x28, 0x71, 0xd0, + 0x05, 0xf0, 0xa2, 0xfd, 0x00, 0x28, 0x6d, 0xd0, + 0x3c, 0x00, 0x60, 0x45, 0x00, 0x00, 0x64, 0x08, + 0x64, 0x00, 0x88, 0xe0, 0xff, 0xf7, 0x5b, 0xfa, + 0x00, 0x28, 0x1a, 0xd0, 0x68, 0x48, 0x00, 0x78, + 0x02, 0x28, 0x01, 0xd1, 0x00, 0x2f, 0x14, 0xd1, + 0x00, 0x20, 0xfe, 0xf7, 0x70, 0xfe, 0x30, 0x1a, + 0x04, 0x90, 0xff, 0xf7, 0x6c, 0xfa, 0x00, 0x28, + 0x07, 0xd0, 0xff, 0xf7, 0x1e, 0xfa, 0x00, 0x28, + 0x03, 0xd0, 0x5d, 0x49, 0x04, 0x98, 0x88, 0x42, + 0x4f, 0xd3, 0x3c, 0x00, 0x9c, 0x45, 0x00, 0x00, + 0x05, 0xf0, 0x6c, 0xfd, 0x00, 0x28, 0x4b, 0xd1, + 0x53, 0x49, 0x08, 0x78, 0x03, 0x28, 0x08, 0xd1, + 0x88, 0x68, 0x01, 0x22, 0xd2, 0x07, 0x30, 0x1a, + 0x90, 0x42, 0x41, 0xd2, 0x01, 0x22, 0x0a, 0x70, + 0x57, 0xe0, 0x54, 0x48, 0x00, 0x78, 0x02, 0x28, + 0x01, 0xd1, 0x00, 0x2f, 0x51, 0xd1, 0x4a, 0x49, + 0x88, 0x68, 0x51, 0x49, 0x80, 0x1b, 0x88, 0x42, + 0x07, 0xd9, 0x01, 0x20, 0x3c, 0x00, 0xd8, 0x45, + 0x00, 0x00, 0xfe, 0xf7, 0x42, 0xfe, 0x7d, 0x21, + 0x09, 0x01, 0x40, 0x18, 0x44, 0x49, 0x88, 0x60, + 0x4a, 0x48, 0x00, 0x78, 0x02, 0x28, 0x04, 0xd1, + 0x07, 0x9b, 0x00, 0x2b, 0x01, 0xd1, 0x01, 0x20, + 0x00, 0xe0, 0x00, 0x20, 0x47, 0x4b, 0x47, 0x49, + 0x58, 0x43, 0x40, 0x18, 0x3c, 0x49, 0x89, 0x68, + 0x89, 0x1b, 0x88, 0x42, 0x30, 0xd9, 0x07, 0x9b, + 0x00, 0x20, 0x03, 0x93, 0x00, 0xf0, 0x3c, 0x00, + 0x14, 0x46, 0x00, 0x00, 0x79, 0xff, 0x02, 0x90, + 0xff, 0xf7, 0xd8, 0xf9, 0x04, 0x90, 0x01, 0xf0, + 0x57, 0xf8, 0x04, 0x99, 0x02, 0x9a, 0x51, 0x43, + 0x48, 0x43, 0x01, 0x90, 0x00, 0xf0, 0xdc, 0xff, + 0x41, 0x1c, 0x01, 0x98, 0x01, 0x22, 0x48, 0x43, + 0x11, 0x1c, 0x00, 0xe0, 0x1b, 0xe0, 0x31, 0x4b, + 0x5b, 0x6a, 0x83, 0x42, 0x00, 0xd3, 0x00, 0x21, + 0x03, 0x9b, 0x01, 0x22, 0x00, 0x2b, 0x00, 0xd0, + 0x3c, 0x00, 0x50, 0x46, 0x00, 0x00, 0x00, 0x22, + 0x2c, 0x4b, 0x51, 0x43, 0x9b, 0x6a, 0x01, 0x22, + 0x83, 0x42, 0x00, 0xd3, 0x00, 0x22, 0x50, 0x00, + 0x08, 0x18, 0x03, 0xd0, 0x23, 0x49, 0x03, 0x20, + 0x08, 0x70, 0x03, 0xe0, 0x09, 0x98, 0xc0, 0x68, + 0x06, 0x28, 0x08, 0xd9, 0x02, 0x24, 0x08, 0x98, + 0x00, 0x28, 0x6e, 0xd0, 0x1d, 0x49, 0x00, 0x20, + 0xc8, 0x61, 0x48, 0x61, 0xa5, 0xe0, 0x1a, 0x49, + 0x48, 0x69, 0x3c, 0x00, 0x8c, 0x46, 0x00, 0x00, + 0x00, 0x28, 0x0a, 0xd1, 0x00, 0x2f, 0x05, 0xd0, + 0x01, 0x22, 0x4a, 0x61, 0xc8, 0x69, 0x80, 0x18, + 0xc8, 0x61, 0x0a, 0xe0, 0x00, 0x20, 0xc8, 0x61, + 0x03, 0xe0, 0x00, 0x2f, 0x05, 0xd1, 0x00, 0x20, + 0x48, 0x61, 0x0d, 0x98, 0x00, 0x28, 0x00, 0xd1, + 0xc8, 0x68, 0x00, 0x20, 0x08, 0x90, 0x08, 0x78, + 0x01, 0x28, 0x2f, 0xd0, 0x02, 0x28, 0x4b, 0xd1, + 0x00, 0x2f, 0x08, 0xd1, 0x3c, 0x00, 0xc8, 0x46, + 0x00, 0x00, 0xe8, 0x78, 0x00, 0x28, 0x02, 0xd1, + 0x28, 0x78, 0x10, 0x28, 0x43, 0xd2, 0x28, 0x79, + 0x10, 0x28, 0x40, 0xd2, 0x48, 0x68, 0x0a, 0x69, + 0x30, 0x1a, 0x90, 0x42, 0x67, 0xd3, 0x01, 0x22, + 0x0a, 0x70, 0x38, 0xe0, 0x00, 0x00, 0xe2, 0x04, + 0x00, 0x00, 0x10, 0x27, 0x00, 0x00, 0x68, 0x7e, + 0x01, 0x00, 0xa0, 0x86, 0x01, 0x00, 0x88, 0x13, + 0x00, 0x00, 0x44, 0x6d, 0x01, 0x00, 0x3c, 0x00, + 0x04, 0x47, 0x00, 0x00, 0xc8, 0x57, 0x01, 0x00, + 0x50, 0xc3, 0x00, 0x00, 0x98, 0x3a, 0x00, 0x00, + 0xc0, 0x57, 0x01, 0x00, 0x40, 0x0d, 0x03, 0x00, + 0xc4, 0x09, 0x00, 0x00, 0xb2, 0x0c, 0x00, 0x00, + 0x00, 0x20, 0x0b, 0x9a, 0x0a, 0x9b, 0xc0, 0x43, + 0x1a, 0x43, 0x37, 0xd0, 0x00, 0x2f, 0x35, 0xd1, + 0x07, 0x9b, 0x00, 0x2b, 0x08, 0xd0, 0x6a, 0x78, + 0x02, 0x2a, 0x2f, 0xd9, 0x2a, 0x78, 0x10, 0x2a, + 0x3c, 0x00, 0x40, 0x47, 0x00, 0x00, 0x2c, 0xd2, + 0x2a, 0x79, 0x10, 0x2a, 0x29, 0xd2, 0x25, 0x4b, + 0x1a, 0x6c, 0x00, 0x2a, 0x06, 0xd0, 0x9a, 0x6a, + 0x9f, 0x6c, 0xba, 0x42, 0x02, 0xd1, 0x1f, 0x20, + 0x1f, 0xe0, 0x2e, 0xe0, 0x20, 0x4b, 0x5a, 0x6c, + 0x00, 0x2a, 0x03, 0xd0, 0x1f, 0x4f, 0xb3, 0x1a, + 0xbb, 0x42, 0x16, 0xd3, 0x1c, 0x4b, 0x00, 0x2a, + 0x05, 0xd0, 0x9a, 0x6a, 0x9f, 0x6c, 0xba, 0x42, + 0x01, 0xd1, 0x3c, 0x00, 0x7c, 0x47, 0x00, 0x00, + 0x0f, 0x20, 0x0d, 0xe0, 0x07, 0x9a, 0x00, 0x2a, + 0x04, 0xd0, 0xea, 0x79, 0x20, 0x2a, 0x01, 0xd1, + 0x00, 0x20, 0x05, 0xe0, 0xea, 0x79, 0x10, 0x2a, + 0x01, 0xd3, 0x03, 0x20, 0x00, 0xe0, 0x9a, 0x6a, + 0x12, 0x4a, 0x12, 0x68, 0x02, 0x40, 0x0b, 0xd1, + 0x01, 0x20, 0x08, 0x90, 0x02, 0x20, 0x08, 0x70, + 0x0f, 0x48, 0x08, 0x61, 0x4e, 0x60, 0x64, 0xe7, + 0xff, 0xe7, 0x01, 0x20, 0x3c, 0x00, 0xb8, 0x47, + 0x00, 0x00, 0x08, 0x90, 0x60, 0xe7, 0x0c, 0x49, + 0x88, 0x6a, 0x00, 0x28, 0x01, 0xda, 0x01, 0x30, + 0x02, 0xe0, 0x00, 0x28, 0x01, 0xdd, 0x00, 0x20, + 0x88, 0x62, 0x00, 0x20, 0x08, 0x62, 0x08, 0x99, + 0x20, 0x04, 0x08, 0x43, 0x0f, 0xb0, 0xf0, 0xbd, + 0x00, 0x00, 0xa4, 0x6c, 0x01, 0x00, 0x71, 0x02, + 0x00, 0x00, 0x08, 0x20, 0x07, 0x00, 0x53, 0x07, + 0x00, 0x00, 0x68, 0x7e, 0x01, 0x00, 0x3c, 0x00, + 0xf4, 0x47, 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x00, 0x48, 0x70, 0x47, 0x50, 0x7e, 0x01, 0x00, + 0x80, 0xb5, 0x3d, 0xf0, 0x7f, 0xfd, 0x02, 0x49, + 0x01, 0x20, 0x08, 0x70, 0x80, 0xbd, 0x00, 0x00, + 0x3c, 0x7e, 0x01, 0x00, 0xf8, 0xb5, 0x0d, 0x1c, + 0x0e, 0xf0, 0xc8, 0xfa, 0x26, 0x49, 0x04, 0x1c, + 0x88, 0x6a, 0x26, 0x4e, 0x00, 0x28, 0x01, 0xd0, + 0x04, 0x20, 0x03, 0xe0, 0x70, 0x6a, 0x00, 0x28, + 0x3c, 0x00, 0x30, 0x48, 0x00, 0x00, 0x01, 0xd0, + 0x01, 0x38, 0x70, 0x62, 0x00, 0x27, 0x00, 0x2d, + 0x02, 0xd0, 0xb7, 0x61, 0xf7, 0x61, 0x0a, 0xe0, + 0xb0, 0x69, 0x1c, 0x49, 0x01, 0x30, 0xb0, 0x61, + 0x49, 0x6d, 0x00, 0x29, 0x03, 0xd0, 0x03, 0x28, + 0x01, 0xd9, 0x01, 0x20, 0xf0, 0x61, 0xb4, 0x60, + 0xf1, 0x68, 0x00, 0x91, 0x08, 0xf0, 0xf7, 0xfc, + 0xf0, 0x60, 0x00, 0x99, 0x88, 0x42, 0x02, 0xd0, + 0x30, 0x62, 0x3c, 0x00, 0x6c, 0x48, 0x00, 0x00, + 0x34, 0x61, 0x0b, 0xe0, 0x00, 0xf0, 0x90, 0xf8, + 0x00, 0x28, 0x01, 0xd0, 0x11, 0x48, 0x00, 0xe0, + 0x11, 0x48, 0x31, 0x69, 0x61, 0x1a, 0x81, 0x42, + 0x00, 0xd9, 0x37, 0x62, 0x0b, 0x4a, 0x0c, 0x48, + 0xd1, 0x6c, 0x20, 0x30, 0x00, 0x29, 0x01, 0xd0, + 0x0a, 0x21, 0x03, 0xe0, 0x01, 0x7a, 0x00, 0x29, + 0x01, 0xd0, 0xff, 0x31, 0x01, 0x72, 0x00, 0x2d, + 0x03, 0xd1, 0x01, 0x7a, 0x3c, 0x00, 0xa8, 0x48, + 0x00, 0x00, 0x00, 0x29, 0x00, 0xd0, 0x91, 0x6a, + 0x00, 0x7a, 0x00, 0x28, 0x00, 0xd1, 0x17, 0x65, + 0xf8, 0xbd, 0xa4, 0x6c, 0x01, 0x00, 0x3c, 0x7e, + 0x01, 0x00, 0xa6, 0x0e, 0x00, 0x00, 0xa8, 0x61, + 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, 0x06, 0x49, + 0x80, 0xb5, 0x89, 0x68, 0x00, 0x29, 0x07, 0xd0, + 0x05, 0x21, 0x00, 0x28, 0x00, 0xd1, 0x04, 0x21, + 0x08, 0x06, 0x00, 0x0e, 0x03, 0xf0, 0x3c, 0x00, + 0xe4, 0x48, 0x00, 0x00, 0x05, 0xfa, 0x80, 0xbd, + 0x60, 0x6c, 0x01, 0x00, 0x07, 0x48, 0x00, 0x68, + 0x07, 0x49, 0x4a, 0x69, 0x10, 0x40, 0x01, 0xd0, + 0x01, 0x20, 0x00, 0xe0, 0x00, 0x20, 0x49, 0x6a, + 0x88, 0x42, 0x01, 0xd1, 0x01, 0x20, 0x70, 0x47, + 0x00, 0x20, 0x70, 0x47, 0x10, 0x00, 0x07, 0x00, + 0xa4, 0x6c, 0x01, 0x00, 0x70, 0xb5, 0x0e, 0xf0, + 0x49, 0xfa, 0x02, 0x1c, 0x00, 0xf0, 0x3a, 0xf8, + 0x3c, 0x00, 0x20, 0x49, 0x00, 0x00, 0x10, 0x49, + 0x00, 0x28, 0x0e, 0xd0, 0x08, 0x1c, 0xa0, 0x31, + 0x0e, 0x78, 0x0e, 0x4b, 0x10, 0x2e, 0x01, 0xd3, + 0x80, 0x6f, 0x03, 0xe0, 0x49, 0x78, 0x10, 0x29, + 0x0e, 0xd3, 0xc0, 0x6f, 0xc0, 0x18, 0x84, 0x1a, + 0x0a, 0xe0, 0x08, 0x1c, 0x80, 0x30, 0x45, 0x69, + 0x08, 0x49, 0x8d, 0x42, 0x01, 0xd9, 0x0c, 0x1c, + 0x05, 0xe0, 0xc0, 0x68, 0x10, 0x1a, 0x2c, 0x1a, + 0x00, 0x2c, 0x3c, 0x00, 0x5c, 0x49, 0x00, 0x00, + 0x00, 0xda, 0x64, 0x19, 0x20, 0x1c, 0x70, 0xbd, + 0xa4, 0x6c, 0x01, 0x00, 0xa6, 0x0e, 0x00, 0x00, + 0x50, 0xc3, 0x00, 0x00, 0x80, 0xb5, 0x05, 0xf0, + 0xb7, 0xfb, 0x00, 0x28, 0x02, 0xd0, 0x07, 0xf0, + 0x1f, 0xff, 0x80, 0xbd, 0x03, 0x48, 0x00, 0x78, + 0x00, 0x28, 0xfa, 0xd0, 0x07, 0xf0, 0x70, 0xfb, + 0x80, 0xbd, 0x00, 0x00, 0x60, 0x6c, 0x01, 0x00, + 0x03, 0x49, 0x01, 0x20, 0x3c, 0x00, 0x98, 0x49, + 0x00, 0x00, 0x49, 0x69, 0x03, 0x29, 0x00, 0xd8, + 0x00, 0x20, 0x70, 0x47, 0x00, 0x00, 0x60, 0x6c, + 0x01, 0x00, 0xb0, 0xb5, 0x0a, 0x4d, 0x00, 0x24, + 0x28, 0x78, 0x01, 0x28, 0x03, 0xd0, 0x05, 0xf0, + 0x6a, 0xfb, 0x04, 0x06, 0x24, 0x0e, 0xfe, 0xf7, + 0xd2, 0xfc, 0x00, 0x02, 0x20, 0x43, 0x02, 0xd1, + 0x68, 0x6a, 0x00, 0x28, 0x01, 0xd1, 0x01, 0x20, + 0xb0, 0xbd, 0x00, 0x20, 0xb0, 0xbd, 0x3c, 0x00, + 0xd4, 0x49, 0x00, 0x00, 0x60, 0x6c, 0x01, 0x00, + 0x01, 0x21, 0x01, 0x28, 0x00, 0xd0, 0x00, 0x21, + 0x01, 0x48, 0x41, 0x62, 0x70, 0x47, 0x00, 0x00, + 0x60, 0x6c, 0x01, 0x00, 0x15, 0x48, 0x10, 0xb5, + 0x04, 0x68, 0x15, 0x48, 0x00, 0x6a, 0x00, 0x28, + 0x14, 0xd0, 0xff, 0xf7, 0xcb, 0xff, 0x00, 0x28, + 0x0e, 0xd1, 0x11, 0x48, 0x11, 0x49, 0xc4, 0x30, + 0x40, 0x69, 0x88, 0x42, 0x08, 0xd2, 0xcc, 0x08, + 0x3c, 0x00, 0x10, 0x4a, 0x00, 0x00, 0xa0, 0x42, + 0x05, 0xd3, 0xff, 0xf7, 0x7e, 0xff, 0xa0, 0x42, + 0x01, 0xda, 0x0c, 0x4c, 0x01, 0xe0, 0xff, 0x24, + 0x91, 0x34, 0x7d, 0x20, 0x00, 0x01, 0x84, 0x42, + 0x04, 0xd9, 0x00, 0x22, 0x16, 0x21, 0x83, 0x20, + 0x0e, 0xf0, 0xbd, 0xfe, 0x01, 0x23, 0x09, 0x22, + 0x21, 0x1c, 0x16, 0x20, 0x0e, 0xf0, 0xa7, 0xfe, + 0x10, 0xbd, 0xb0, 0x57, 0x01, 0x00, 0x60, 0x6c, + 0x01, 0x00, 0x3c, 0x00, 0x4c, 0x4a, 0x00, 0x00, + 0xc0, 0x5d, 0x00, 0x00, 0x10, 0x27, 0x00, 0x00, + 0x70, 0xb5, 0x05, 0x1c, 0x0e, 0x1c, 0x00, 0xf0, + 0x43, 0xf8, 0x00, 0x28, 0x0f, 0xd0, 0x08, 0x4c, + 0x20, 0x78, 0xc0, 0x07, 0x03, 0xd4, 0x05, 0xf0, + 0xab, 0xf9, 0x09, 0xf0, 0x31, 0xfe, 0x00, 0x2d, + 0x05, 0xd0, 0x20, 0x78, 0x80, 0x07, 0x02, 0xd4, + 0x30, 0x1c, 0x02, 0xf0, 0xfd, 0xfe, 0x70, 0xbd, + 0x60, 0x6c, 0x01, 0x00, 0x3c, 0x00, 0x88, 0x4a, + 0x00, 0x00, 0xb0, 0xb5, 0x00, 0x28, 0x18, 0xd0, + 0x11, 0x48, 0x81, 0x42, 0x15, 0xd2, 0x10, 0x48, + 0x0c, 0x1c, 0x0d, 0x18, 0x07, 0xf0, 0xdf, 0xfa, + 0x81, 0x00, 0x09, 0x18, 0xa1, 0x42, 0x01, 0xd2, + 0x40, 0x00, 0x03, 0xe0, 0x41, 0x00, 0x09, 0x18, + 0xa1, 0x42, 0x01, 0xd2, 0x24, 0x1a, 0x06, 0xe0, + 0x41, 0x00, 0xa1, 0x42, 0x03, 0xd2, 0x40, 0x08, + 0xf8, 0xe7, 0x06, 0x4d, 0x07, 0x4c, 0x3c, 0x00, + 0xc4, 0x4a, 0x00, 0x00, 0x0e, 0xf0, 0x72, 0xf9, + 0x00, 0x19, 0x29, 0x1c, 0x07, 0xf0, 0xdc, 0xfa, + 0xb0, 0xbd, 0x00, 0x00, 0x80, 0xb9, 0x2a, 0x00, + 0x53, 0x07, 0x00, 0x00, 0x4c, 0x1d, 0x00, 0x00, + 0x88, 0x13, 0x00, 0x00, 0xb0, 0xb5, 0x05, 0xf0, + 0xfd, 0xfa, 0x00, 0x28, 0x13, 0xd1, 0xfe, 0xf7, + 0xb5, 0xfe, 0x0a, 0x4c, 0x0a, 0x4d, 0x00, 0x28, + 0x60, 0x63, 0x00, 0xd0, 0x28, 0x60, 0x0e, 0xf0, + 0x3c, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x55, 0xf9, + 0x21, 0x6a, 0x00, 0x29, 0x04, 0xd1, 0xe1, 0x69, + 0x40, 0x1a, 0x29, 0x68, 0x88, 0x42, 0x01, 0xd9, + 0x01, 0x20, 0xb0, 0xbd, 0x00, 0x20, 0xb0, 0xbd, + 0x00, 0x00, 0x60, 0x6c, 0x01, 0x00, 0xb0, 0x57, + 0x01, 0x00, 0x80, 0xb5, 0xff, 0xf7, 0xdd, 0xff, + 0x00, 0x28, 0x05, 0xd0, 0x05, 0xf0, 0xb7, 0xfa, + 0x00, 0x28, 0x01, 0xd1, 0x01, 0x20, 0x80, 0xbd, + 0x00, 0x20, 0x3c, 0x00, 0x3c, 0x4b, 0x00, 0x00, + 0x80, 0xbd, 0x00, 0x00, 0x10, 0xb5, 0x0a, 0x4c, + 0x00, 0x21, 0xa2, 0x68, 0x00, 0x2a, 0x03, 0xd0, + 0xa1, 0x60, 0x02, 0xf0, 0x83, 0xf9, 0x10, 0xbd, + 0x61, 0x60, 0x01, 0x1c, 0x00, 0x22, 0x04, 0x20, + 0x0e, 0xf0, 0x36, 0xfd, 0x03, 0x48, 0x21, 0x68, + 0x0a, 0xf0, 0x08, 0xfc, 0x10, 0xbd, 0x00, 0x00, + 0xbc, 0x74, 0x01, 0x00, 0xc4, 0x60, 0x01, 0x00, + 0x70, 0xb5, 0x05, 0x1c, 0x3c, 0x00, 0x78, 0x4b, + 0x00, 0x00, 0x01, 0xd1, 0xfc, 0xf7, 0xc1, 0xfb, + 0x20, 0x4c, 0xe0, 0x6a, 0x00, 0x28, 0x15, 0xd0, + 0x1f, 0x4b, 0xa0, 0x69, 0x58, 0x43, 0xc6, 0x0b, + 0x20, 0x88, 0x46, 0x43, 0xf0, 0x00, 0x80, 0x19, + 0xe6, 0x60, 0xfb, 0xf7, 0x1c, 0xfe, 0xa8, 0x42, + 0x05, 0xd8, 0x30, 0x1c, 0xfb, 0xf7, 0x17, 0xfe, + 0x80, 0x19, 0xa8, 0x42, 0x02, 0xd2, 0x00, 0x20, + 0xe0, 0x60, 0x20, 0xe0, 0xe5, 0x60, 0x3c, 0x00, + 0xb4, 0x4b, 0x00, 0x00, 0x00, 0x2d, 0x1d, 0xd0, + 0x26, 0x88, 0xa0, 0x69, 0x70, 0x43, 0xc1, 0x03, + 0x28, 0x1c, 0xfb, 0xf7, 0xa5, 0xfd, 0x60, 0x61, + 0x0d, 0x48, 0x32, 0x1c, 0x29, 0x1c, 0x30, 0x30, + 0xfb, 0xf7, 0x0a, 0xfc, 0x0c, 0x4b, 0x60, 0x69, + 0x58, 0x43, 0xc0, 0x0b, 0x60, 0x62, 0x01, 0xf0, + 0xb7, 0xfd, 0xa0, 0x62, 0xe0, 0x68, 0x00, 0x28, + 0x04, 0xd0, 0x20, 0x69, 0xa1, 0x68, 0xfb, 0xf7, + 0x3c, 0x00, 0xf0, 0x4b, 0x00, 0x00, 0xf4, 0xfb, + 0x70, 0xbd, 0x05, 0x48, 0xa1, 0x68, 0xfb, 0xf7, + 0xef, 0xfb, 0x70, 0xbd, 0x00, 0x00, 0xc8, 0x74, + 0x01, 0x00, 0x40, 0x42, 0x0f, 0x00, 0xc0, 0xc6, + 0x2d, 0x00, 0x88, 0x13, 0x00, 0x00, 0xf1, 0xb5, + 0x3e, 0x48, 0x00, 0xab, 0x81, 0x78, 0xc0, 0x78, + 0x3e, 0x4f, 0x0a, 0x07, 0x04, 0x07, 0x58, 0x78, + 0x3b, 0x49, 0x12, 0x0f, 0x08, 0x5c, 0x14, 0x39, + 0x24, 0x0f, 0x3c, 0x00, 0x2c, 0x4c, 0x00, 0x00, + 0x80, 0x18, 0x78, 0x60, 0x01, 0x30, 0xb8, 0x60, + 0x18, 0x78, 0x35, 0x4d, 0x08, 0x5c, 0x00, 0x19, + 0xb8, 0x61, 0x01, 0x30, 0xf8, 0x61, 0xeb, 0x78, + 0x33, 0x48, 0x1e, 0x09, 0x33, 0x4b, 0x18, 0x38, + 0x81, 0x78, 0x5e, 0x43, 0xab, 0x78, 0x1d, 0x09, + 0xc8, 0x23, 0x6b, 0x43, 0x00, 0x29, 0x08, 0xd1, + 0x2b, 0x4d, 0x2d, 0x78, 0x3d, 0x60, 0xc5, 0x60, + 0x7d, 0x25, 0xed, 0x00, 0x3c, 0x00, 0x68, 0x4c, + 0x00, 0x00, 0x5d, 0x1b, 0x2c, 0x4b, 0x07, 0xe0, + 0x27, 0x4d, 0x6d, 0x78, 0x3d, 0x60, 0xc5, 0x60, + 0x4b, 0x25, 0x2d, 0x01, 0x5d, 0x1b, 0x28, 0x4b, + 0xf6, 0x18, 0x02, 0x20, 0x00, 0xf0, 0x57, 0xf8, + 0x28, 0x1a, 0xf8, 0x60, 0x22, 0x48, 0x22, 0x1c, + 0x18, 0x38, 0x81, 0x78, 0x03, 0x20, 0x00, 0xf0, + 0x4e, 0xf8, 0x30, 0x1a, 0x38, 0x62, 0x39, 0x68, + 0x00, 0xab, 0x79, 0x61, 0x5a, 0x78, 0x3c, 0x00, + 0xa4, 0x4c, 0x00, 0x00, 0x56, 0x23, 0xf9, 0x68, + 0x5a, 0x43, 0x89, 0x1a, 0xf9, 0x60, 0xc8, 0x31, + 0x39, 0x61, 0x18, 0x49, 0x18, 0x39, 0x89, 0x78, + 0x00, 0x29, 0xb9, 0x69, 0x11, 0xd1, 0x00, 0xab, + 0x1a, 0x78, 0x13, 0x4b, 0x14, 0x3b, 0x9a, 0x5c, + 0x53, 0x1c, 0x59, 0x43, 0x0a, 0x23, 0x59, 0x43, + 0x14, 0x4b, 0x59, 0x1a, 0x51, 0x43, 0x0a, 0x23, + 0x59, 0x43, 0x40, 0x1a, 0x38, 0x62, 0x12, 0x49, + 0x3c, 0x00, 0xe0, 0x4c, 0x00, 0x00, 0x10, 0xe0, + 0x00, 0xab, 0x1a, 0x78, 0x0a, 0x4b, 0x14, 0x3b, + 0x9a, 0x5c, 0x53, 0x1c, 0x59, 0x43, 0x0a, 0x23, + 0x59, 0x43, 0x0d, 0x4b, 0x59, 0x1a, 0x51, 0x43, + 0x0a, 0x23, 0x59, 0x43, 0x40, 0x1a, 0x0b, 0x49, + 0x38, 0x62, 0x40, 0x18, 0x78, 0x62, 0xf8, 0xbd, + 0x00, 0x00, 0x0c, 0x5a, 0x01, 0x00, 0x66, 0x5a, + 0x01, 0x00, 0x94, 0x78, 0x01, 0x00, 0xa0, 0x86, + 0x01, 0x00, 0x3c, 0x00, 0x1c, 0x4d, 0x00, 0x00, + 0x00, 0x48, 0x71, 0x00, 0xb0, 0xd6, 0x8c, 0x00, + 0x88, 0x10, 0x00, 0x00, 0x80, 0x38, 0x01, 0x00, + 0x58, 0x12, 0x00, 0x00, 0x70, 0x11, 0x01, 0x00, + 0x30, 0xb5, 0x19, 0x4b, 0x02, 0x28, 0xdd, 0x68, + 0x06, 0xd1, 0x00, 0x29, 0x04, 0xd1, 0x2b, 0x1c, + 0x0c, 0x33, 0x9c, 0x1a, 0x64, 0x23, 0x5c, 0x43, + 0x02, 0x28, 0x09, 0xd1, 0x01, 0x29, 0x07, 0xd1, + 0x64, 0x23, 0x7d, 0x24, 0x3c, 0x00, 0x58, 0x4d, + 0x00, 0x00, 0xe4, 0x00, 0x6b, 0x43, 0x1c, 0x19, + 0xa0, 0x23, 0x53, 0x43, 0xe4, 0x1a, 0x0a, 0x23, + 0x5a, 0x43, 0x03, 0x28, 0x09, 0xd1, 0x00, 0x29, + 0x07, 0xd1, 0x13, 0x23, 0xff, 0x24, 0xe4, 0x00, + 0x6b, 0x43, 0x1b, 0x19, 0x9b, 0x1a, 0x1c, 0x1c, + 0x5c, 0x43, 0x03, 0x28, 0x08, 0xd1, 0x01, 0x29, + 0x06, 0xd1, 0x0e, 0x20, 0x05, 0x49, 0x68, 0x43, + 0x40, 0x18, 0x80, 0x1a, 0x04, 0x1c, 0x3c, 0x00, + 0x94, 0x4d, 0x00, 0x00, 0x44, 0x43, 0x20, 0x1c, + 0x30, 0xbd, 0x00, 0x00, 0x7c, 0x78, 0x01, 0x00, + 0x84, 0x08, 0x00, 0x00, 0x10, 0xb5, 0x07, 0x4c, + 0x0c, 0x23, 0x60, 0x78, 0x05, 0x49, 0x14, 0x31, + 0x58, 0x43, 0x40, 0x18, 0x40, 0x68, 0x01, 0xf0, + 0x4f, 0xfc, 0x00, 0x21, 0x60, 0x78, 0x02, 0xf0, + 0x4b, 0xff, 0x10, 0xbd, 0x4c, 0x7b, 0x01, 0x00, + 0x0c, 0x48, 0xf8, 0xb5, 0x40, 0x78, 0x0c, 0x23, + 0x3c, 0x00, 0xd0, 0x4d, 0x00, 0x00, 0x0a, 0x49, + 0x58, 0x43, 0x14, 0x31, 0x44, 0x18, 0x26, 0x1d, + 0x60, 0xce, 0x30, 0x1c, 0x0b, 0xf0, 0x0b, 0xfd, + 0x00, 0x27, 0x41, 0x20, 0x47, 0x55, 0x05, 0x48, + 0x29, 0x1c, 0x02, 0xf0, 0xf0, 0xfe, 0x28, 0x1c, + 0x01, 0xf0, 0x31, 0xfc, 0x04, 0x34, 0xc0, 0xc4, + 0xf8, 0xbd, 0x4c, 0x7b, 0x01, 0x00, 0x55, 0x80, + 0x00, 0x00, 0xb0, 0xb5, 0x0a, 0x4d, 0x4c, 0x21, + 0x28, 0x78, 0x3c, 0x00, 0x0c, 0x4e, 0x00, 0x00, + 0x09, 0x4a, 0x41, 0x43, 0x8c, 0x18, 0x22, 0x68, + 0x01, 0x21, 0xfb, 0xf7, 0xe1, 0xfa, 0x28, 0x78, + 0x01, 0xf0, 0xfa, 0xfb, 0x3c, 0x23, 0xe0, 0x56, + 0x41, 0x1e, 0x01, 0x20, 0x07, 0xf0, 0x34, 0xfb, + 0xb0, 0xbd, 0x00, 0x00, 0x3c, 0x7c, 0x01, 0x00, + 0x58, 0xe3, 0x01, 0x00, 0x0c, 0x23, 0x07, 0x49, + 0x58, 0x43, 0x40, 0x18, 0x80, 0xb5, 0x40, 0x68, + 0x41, 0x6b, 0x00, 0x29, 0x3c, 0x00, 0x48, 0x4e, + 0x00, 0x00, 0x02, 0xd0, 0x0b, 0xf0, 0xfb, 0xfd, + 0x80, 0xbd, 0x0b, 0xf0, 0x2c, 0xfd, 0x80, 0xbd, + 0x00, 0x00, 0x60, 0x7b, 0x01, 0x00, 0x38, 0x22, + 0x0a, 0x4b, 0x42, 0x43, 0xd2, 0x18, 0x00, 0x29, + 0x80, 0xb5, 0x04, 0xd0, 0x02, 0x29, 0x07, 0xd1, + 0x0b, 0xf0, 0xfb, 0xfc, 0x80, 0xbd, 0xd2, 0x6a, + 0x01, 0x21, 0xfb, 0xf7, 0xb0, 0xfa, 0x80, 0xbd, + 0x03, 0x21, 0x86, 0x20, 0xfc, 0xf7, 0x3c, 0x00, + 0x84, 0x4e, 0x00, 0x00, 0x0f, 0xfa, 0x80, 0xbd, + 0xd4, 0xe4, 0x01, 0x00, 0xb0, 0xb5, 0x04, 0x06, + 0x24, 0x0e, 0x0c, 0x20, 0x0e, 0x49, 0x60, 0x43, + 0x40, 0x18, 0x45, 0x68, 0xa8, 0x6b, 0x00, 0x28, + 0x03, 0xd1, 0x00, 0x21, 0x20, 0x1c, 0xfd, 0xf7, + 0xe1, 0xfa, 0x20, 0x1c, 0x07, 0xf0, 0xf2, 0xff, + 0x00, 0x28, 0x08, 0xd0, 0x28, 0x1c, 0x60, 0x30, + 0xc1, 0x79, 0x01, 0x29, 0x03, 0xd9, 0xff, 0x31, + 0x3c, 0x00, 0xc0, 0x4e, 0x00, 0x00, 0xc1, 0x71, + 0xff, 0x31, 0x81, 0x71, 0x01, 0x21, 0x20, 0x1c, + 0x02, 0xf0, 0xc5, 0xfe, 0xb0, 0xbd, 0x60, 0x7b, + 0x01, 0x00, 0x70, 0xb5, 0x00, 0x06, 0x00, 0x0e, + 0x05, 0x1c, 0x4c, 0x23, 0x0a, 0x49, 0x58, 0x43, + 0x44, 0x18, 0x3c, 0x20, 0x00, 0x5d, 0xff, 0x30, + 0x06, 0x06, 0x36, 0x16, 0x28, 0x1c, 0x01, 0xf0, + 0x90, 0xfb, 0x00, 0x21, 0x28, 0x1c, 0x22, 0x68, + 0xfb, 0xf7, 0x3c, 0x00, 0xfc, 0x4e, 0x00, 0x00, + 0x6f, 0xfa, 0x31, 0x1c, 0x00, 0x20, 0x07, 0xf0, + 0xc7, 0xfa, 0x70, 0xbd, 0x58, 0xe3, 0x01, 0x00, + 0x0c, 0x22, 0x0f, 0x4b, 0x42, 0x43, 0xd2, 0x18, + 0x10, 0xb5, 0x54, 0x68, 0x00, 0x29, 0x0d, 0xd0, + 0x02, 0x29, 0x0f, 0xd1, 0x2c, 0x20, 0x00, 0x5d, + 0x00, 0x28, 0x03, 0xd0, 0x07, 0x21, 0x0c, 0x20, + 0xfc, 0xf7, 0xba, 0xf9, 0x20, 0x1c, 0x0b, 0xf0, + 0xbb, 0xfc, 0x10, 0xbd, 0x3c, 0x00, 0x38, 0x4f, + 0x00, 0x00, 0x00, 0x21, 0x02, 0xf0, 0x8d, 0xfe, + 0x10, 0xbd, 0x04, 0x21, 0x0c, 0x20, 0xfc, 0xf7, + 0xae, 0xf9, 0x10, 0xbd, 0x00, 0x00, 0x60, 0x7b, + 0x01, 0x00, 0x80, 0xb5, 0x00, 0x29, 0x07, 0xd0, + 0x0c, 0x23, 0x05, 0x49, 0x58, 0x43, 0x40, 0x18, + 0x40, 0x68, 0x0b, 0xf0, 0x4a, 0xfc, 0x80, 0xbd, + 0x01, 0x21, 0x02, 0xf0, 0x76, 0xfe, 0x80, 0xbd, + 0x00, 0x00, 0x60, 0x7b, 0x01, 0x00, 0x3c, 0x00, + 0x74, 0x4f, 0x00, 0x00, 0x10, 0xb5, 0x04, 0x1c, + 0x00, 0x29, 0x05, 0xd0, 0x02, 0x29, 0x1a, 0xd1, + 0x20, 0x1c, 0x0b, 0xf0, 0xeb, 0xfc, 0x10, 0xbd, + 0x0d, 0x48, 0x04, 0x70, 0x0d, 0x48, 0x07, 0xf0, + 0x07, 0xf9, 0x0d, 0x48, 0x01, 0x88, 0x01, 0x22, + 0x12, 0x03, 0x11, 0x43, 0x01, 0x80, 0x4c, 0x20, + 0x0a, 0x49, 0x60, 0x43, 0x40, 0x18, 0x40, 0x30, + 0x00, 0x78, 0xfd, 0xf7, 0x5d, 0xfd, 0x20, 0x1c, + 0x3c, 0x00, 0xb0, 0x4f, 0x00, 0x00, 0x0a, 0xf0, + 0xd4, 0xf8, 0x10, 0xbd, 0x03, 0x21, 0x86, 0x20, + 0xfc, 0xf7, 0x73, 0xf9, 0x10, 0xbd, 0x3c, 0x7c, + 0x01, 0x00, 0x05, 0x4e, 0x00, 0x00, 0x32, 0x80, + 0x07, 0x00, 0x58, 0xe3, 0x01, 0x00, 0xff, 0xb5, + 0x05, 0x1c, 0x01, 0x20, 0x83, 0xb0, 0x01, 0x90, + 0x0c, 0x20, 0x5d, 0x4a, 0x68, 0x43, 0x86, 0x18, + 0x01, 0x27, 0x00, 0x29, 0x74, 0x68, 0x0e, 0xd0, + 0x02, 0x29, 0x3c, 0x00, 0xec, 0x4f, 0x00, 0x00, + 0x6a, 0xd1, 0x2c, 0x20, 0x00, 0x5d, 0x00, 0x28, + 0x03, 0xd0, 0x06, 0x21, 0x0c, 0x20, 0xfc, 0xf7, + 0x53, 0xf9, 0x20, 0x1c, 0x0b, 0xf0, 0x20, 0xfd, + 0x07, 0xb0, 0xf0, 0xbd, 0x52, 0x48, 0x14, 0x38, + 0x45, 0x70, 0xa0, 0x6b, 0x00, 0x28, 0x07, 0xd0, + 0x50, 0x48, 0x07, 0xf0, 0x7f, 0xf8, 0x01, 0x21, + 0x28, 0x1c, 0xfd, 0xf7, 0x25, 0xfa, 0x1c, 0xe0, + 0x4d, 0x48, 0x07, 0xf0, 0x3c, 0x00, 0x28, 0x50, + 0x00, 0x00, 0x77, 0xf8, 0x4a, 0x48, 0x14, 0x38, + 0x05, 0x70, 0x4b, 0x48, 0x01, 0x88, 0x01, 0x22, + 0x52, 0x03, 0x11, 0x43, 0x01, 0x80, 0x40, 0x20, + 0x00, 0x5d, 0xfd, 0xf7, 0x12, 0xfd, 0xb0, 0x68, + 0x00, 0x28, 0x09, 0xd1, 0x28, 0x1c, 0x07, 0xf0, + 0x64, 0xff, 0xb0, 0x60, 0x00, 0x28, 0x03, 0xd1, + 0x09, 0x21, 0x0c, 0x20, 0xfc, 0xf7, 0x23, 0xf9, + 0x05, 0x98, 0x00, 0x28, 0x03, 0xd0, 0x3c, 0x00, + 0x64, 0x50, 0x00, 0x00, 0xe0, 0x6c, 0x01, 0x30, + 0xe0, 0x64, 0x0e, 0xe0, 0x67, 0x20, 0x00, 0x5d, + 0x00, 0x28, 0x07, 0xd1, 0xe0, 0x6c, 0x00, 0x28, + 0x04, 0xd1, 0x39, 0x48, 0x02, 0x38, 0xc0, 0x6a, + 0xa0, 0x64, 0x09, 0xe0, 0x20, 0x6d, 0x00, 0x28, + 0x01, 0xd0, 0x00, 0x27, 0x04, 0xe0, 0x28, 0x1c, + 0x07, 0xf0, 0x00, 0xff, 0x00, 0x28, 0xe5, 0xd1, + 0x05, 0x98, 0x20, 0x65, 0x20, 0x1c, 0x20, 0x30, + 0x3c, 0x00, 0xa0, 0x50, 0x00, 0x00, 0x62, 0x6a, + 0x02, 0x90, 0x81, 0x7b, 0x28, 0x1c, 0x07, 0xf0, + 0x78, 0xff, 0x00, 0x2f, 0x19, 0xd0, 0x20, 0x1c, + 0x60, 0x30, 0xc1, 0x79, 0x4a, 0x1c, 0xc2, 0x71, + 0x80, 0x79, 0x81, 0x42, 0x02, 0xd2, 0x01, 0x20, + 0x01, 0xe0, 0x40, 0xe0, 0x00, 0x20, 0x01, 0x90, + 0x00, 0x28, 0x0a, 0xd0, 0x25, 0x48, 0x00, 0x78, + 0x80, 0x07, 0x06, 0xd5, 0x00, 0xf0, 0x0d, 0xfb, + 0x01, 0x1c, 0x3c, 0x00, 0xdc, 0x50, 0x00, 0x00, + 0x20, 0x1c, 0x0b, 0xf0, 0x15, 0xfd, 0x01, 0x90, + 0x01, 0x98, 0x00, 0x28, 0x0f, 0xd0, 0x02, 0x98, + 0x00, 0x7b, 0x02, 0x28, 0x03, 0xd1, 0x20, 0x1c, + 0x04, 0xf0, 0xd0, 0xfe, 0x84, 0xe7, 0x01, 0x28, + 0x00, 0xd0, 0x7e, 0xe7, 0x21, 0x1c, 0x30, 0x1c, + 0x04, 0xf0, 0xe2, 0xfe, 0x7c, 0xe7, 0x25, 0x1c, + 0x60, 0x35, 0xe8, 0x79, 0xff, 0x30, 0xa8, 0x71, + 0x68, 0x7a, 0x06, 0xf0, 0x3c, 0x00, 0x18, 0x51, + 0x00, 0x00, 0x9d, 0xfc, 0x0d, 0xf0, 0x47, 0xfe, + 0x07, 0x1c, 0x05, 0xf0, 0x12, 0xff, 0x3f, 0x18, + 0x02, 0x98, 0x81, 0x7b, 0x20, 0x69, 0x04, 0x30, + 0x00, 0xf0, 0x35, 0xfa, 0x61, 0x6a, 0x05, 0xf0, + 0xea, 0xfe, 0x39, 0x18, 0x6b, 0x7a, 0x30, 0x88, + 0x80, 0x31, 0x09, 0x4a, 0x0d, 0xf0, 0x91, 0xfe, + 0x5d, 0xe7, 0x03, 0x21, 0x0c, 0x20, 0xfc, 0xf7, + 0xaa, 0xf8, 0x58, 0xe7, 0x00, 0x00, 0x3c, 0x00, + 0x54, 0x51, 0x00, 0x00, 0x60, 0x7b, 0x01, 0x00, + 0xa5, 0x4d, 0x00, 0x00, 0xc9, 0x4d, 0x00, 0x00, + 0x32, 0x80, 0x07, 0x00, 0x1d, 0x75, 0x01, 0x00, + 0x8d, 0x4e, 0x00, 0x00, 0xff, 0xb5, 0x81, 0xb0, + 0x1f, 0x1c, 0x05, 0x1c, 0x14, 0x1c, 0x10, 0x1c, + 0x0a, 0x9e, 0x00, 0xf0, 0xf5, 0xfc, 0x29, 0x1c, + 0x10, 0x31, 0x20, 0x1d, 0x06, 0x22, 0xfb, 0xf7, + 0xb7, 0xf9, 0xa8, 0x8e, 0x20, 0x80, 0xe8, 0x8e, + 0x3c, 0x00, 0x90, 0x51, 0x00, 0x00, 0x60, 0x80, + 0x02, 0x99, 0x20, 0x1c, 0x00, 0xf0, 0x07, 0xf9, + 0xff, 0x34, 0x01, 0x34, 0x66, 0x60, 0x27, 0x60, + 0x05, 0xb0, 0xf0, 0xbd, 0x00, 0x00, 0xf8, 0xb5, + 0x0f, 0x1c, 0x1e, 0x1c, 0x05, 0x1c, 0x14, 0x1c, + 0x10, 0x1c, 0x00, 0xf0, 0xd8, 0xfc, 0xa8, 0x88, + 0x39, 0x1c, 0x20, 0x80, 0x28, 0x89, 0x60, 0x80, + 0x20, 0x1c, 0x00, 0xf0, 0xf0, 0xf8, 0xff, 0x34, + 0x01, 0x34, 0x3c, 0x00, 0xcc, 0x51, 0x00, 0x00, + 0x66, 0x60, 0xf8, 0xbd, 0x70, 0xb5, 0x04, 0x1c, + 0xc0, 0x68, 0x05, 0x68, 0x20, 0x1c, 0x14, 0x30, + 0x06, 0x1c, 0x00, 0xf0, 0x0f, 0xfb, 0x00, 0x28, + 0x16, 0xd0, 0x01, 0x22, 0x02, 0x21, 0x20, 0x69, + 0x05, 0xf0, 0xf8, 0xfa, 0x00, 0x28, 0x01, 0xd0, + 0xfb, 0xf7, 0x24, 0xff, 0x00, 0x22, 0x02, 0x21, + 0x20, 0x69, 0x05, 0xf0, 0xef, 0xfa, 0x00, 0x28, + 0x06, 0xd0, 0xfb, 0xf7, 0x3c, 0x00, 0x08, 0x52, + 0x00, 0x00, 0x01, 0xff, 0x00, 0x28, 0x02, 0xd0, + 0x30, 0x1c, 0x0b, 0xf0, 0x7c, 0xfb, 0x68, 0x89, + 0x80, 0x07, 0xc0, 0x0f, 0x03, 0xf0, 0xa7, 0xf8, + 0x18, 0x23, 0x04, 0x49, 0x58, 0x43, 0x40, 0x18, + 0xc1, 0x68, 0x00, 0x29, 0x02, 0xd0, 0x20, 0x1c, + 0xfb, 0xf7, 0xd4, 0xf8, 0x70, 0xbd, 0x94, 0x67, + 0x01, 0x00, 0xf8, 0xb5, 0x04, 0x1c, 0x10, 0x1c, + 0x0d, 0x1c, 0x19, 0x1c, 0xff, 0x22, 0x3c, 0x00, + 0x44, 0x52, 0x00, 0x00, 0x00, 0x27, 0xff, 0x2d, + 0x25, 0xd0, 0x00, 0x29, 0x05, 0xd0, 0x4b, 0x88, + 0x00, 0x2b, 0x02, 0xd0, 0x00, 0xf0, 0x50, 0xfc, + 0x15, 0xe0, 0x00, 0x21, 0x10, 0x4e, 0x4b, 0x00, + 0x9e, 0x19, 0x02, 0x23, 0xf6, 0x5e, 0x86, 0x42, + 0x01, 0xdd, 0x0a, 0x1c, 0x04, 0xe0, 0x01, 0x31, + 0x09, 0x06, 0x09, 0x0e, 0x26, 0x29, 0xf1, 0xd3, + 0x09, 0x4e, 0x50, 0x00, 0x80, 0x19, 0x4e, 0x23, + 0x3c, 0x00, 0x80, 0x52, 0x00, 0x00, 0xc0, 0x5e, + 0x27, 0x2a, 0x07, 0xd2, 0x06, 0x49, 0x20, 0x39, + 0x49, 0x57, 0x47, 0x31, 0x40, 0x1a, 0x20, 0x60, + 0x01, 0x27, 0x02, 0xe0, 0x7e, 0x20, 0xc0, 0x43, + 0x20, 0x60, 0x38, 0x1c, 0xf8, 0xbd, 0xfa, 0x47, + 0x01, 0x00, 0xb0, 0xb5, 0x0c, 0x1c, 0x7e, 0x21, + 0x05, 0x1c, 0x00, 0x20, 0xc9, 0x43, 0x00, 0x2c, + 0x0f, 0xd0, 0x10, 0x1c, 0x05, 0xf0, 0x6b, 0xfd, + 0x00, 0x28, 0x3c, 0x00, 0xbc, 0x52, 0x00, 0x00, + 0x02, 0xd0, 0x21, 0x1c, 0xc9, 0x39, 0x01, 0xe0, + 0x21, 0x1c, 0x86, 0x39, 0x02, 0x20, 0xc0, 0x43, + 0xfb, 0xf7, 0xb4, 0xf9, 0x01, 0x1c, 0x01, 0x20, + 0x29, 0x60, 0xb0, 0xbd, 0x98, 0xb5, 0x14, 0x1c, + 0x00, 0x22, 0x00, 0x92, 0x22, 0x1c, 0xfd, 0xf7, + 0x43, 0xfe, 0x98, 0xbd, 0x05, 0x49, 0x80, 0xb5, + 0x08, 0x60, 0x05, 0x49, 0x01, 0x20, 0xc8, 0x61, + 0x01, 0x21, 0x00, 0x20, 0x3c, 0x00, 0xf8, 0x52, + 0x00, 0x00, 0x03, 0xf0, 0x1c, 0xfe, 0x80, 0xbd, + 0x00, 0x00, 0x20, 0x67, 0x01, 0x00, 0xac, 0x7c, + 0x01, 0x00, 0x80, 0xb5, 0x00, 0x21, 0x00, 0x20, + 0x03, 0xf0, 0x11, 0xfe, 0x06, 0xf0, 0x0d, 0xfb, + 0x02, 0x49, 0x00, 0x20, 0x08, 0x60, 0x80, 0xbd, + 0x00, 0x00, 0x20, 0x67, 0x01, 0x00, 0x03, 0x49, + 0x01, 0x20, 0x09, 0x69, 0x00, 0x29, 0x00, 0xd1, + 0x00, 0x20, 0x70, 0x47, 0x00, 0x00, 0x3c, 0x00, + 0x34, 0x53, 0x00, 0x00, 0x10, 0x67, 0x01, 0x00, + 0x03, 0x48, 0x00, 0x69, 0x00, 0x28, 0x01, 0xd0, + 0x40, 0x69, 0x70, 0x47, 0x00, 0x20, 0x70, 0x47, + 0x10, 0x67, 0x01, 0x00, 0x70, 0xb5, 0x16, 0x1c, + 0x0d, 0x1c, 0x04, 0x1c, 0x00, 0x28, 0x01, 0xd0, + 0x01, 0x2c, 0x07, 0xd1, 0x00, 0xf0, 0x36, 0xfa, + 0x00, 0x28, 0x05, 0xd0, 0x13, 0xf0, 0xca, 0xf9, + 0x00, 0x28, 0x01, 0xd1, 0x01, 0x20, 0x70, 0xbd, + 0x3c, 0x00, 0x70, 0x53, 0x00, 0x00, 0x01, 0x20, + 0x00, 0x2c, 0x00, 0xd0, 0x00, 0x20, 0x0a, 0x4c, + 0x04, 0x34, 0x61, 0xc4, 0x10, 0x3c, 0x00, 0xf0, + 0x24, 0xfa, 0x00, 0x28, 0x02, 0xd0, 0x00, 0xf0, + 0xc6, 0xf9, 0x01, 0xe0, 0x00, 0xf0, 0xe5, 0xf8, + 0xc0, 0x30, 0xc3, 0x6b, 0x22, 0x1d, 0x07, 0xca, + 0xfb, 0xf7, 0x20, 0xf8, 0x00, 0x20, 0x70, 0xbd, + 0x00, 0x00, 0xd4, 0x67, 0x01, 0x00, 0xf8, 0xb5, + 0x0d, 0x1c, 0x3c, 0x00, 0xac, 0x53, 0x00, 0x00, + 0x00, 0x21, 0x04, 0x1c, 0x28, 0x1c, 0x05, 0xf0, + 0xe3, 0xf9, 0x23, 0x1c, 0xff, 0x33, 0x21, 0x33, + 0xff, 0x27, 0x00, 0x28, 0x05, 0xd0, 0x22, 0x22, + 0x01, 0x1c, 0x18, 0x1c, 0xfb, 0xf7, 0x96, 0xf8, + 0x00, 0xe0, 0x1f, 0x70, 0x03, 0x21, 0x28, 0x1c, + 0x05, 0xf0, 0xd2, 0xf9, 0x26, 0x1c, 0xff, 0x36, + 0x41, 0x36, 0x00, 0x28, 0x05, 0xd0, 0x03, 0x22, + 0x01, 0x1c, 0xb0, 0x1c, 0x3c, 0x00, 0xe8, 0x53, + 0x00, 0x00, 0xfb, 0xf7, 0x86, 0xf8, 0x00, 0xe0, + 0xb7, 0x70, 0x01, 0x21, 0x28, 0x1c, 0x05, 0xf0, + 0xc2, 0xf9, 0x00, 0x28, 0x07, 0xd0, 0x01, 0x1c, + 0x20, 0x1c, 0xff, 0x30, 0x0a, 0x22, 0x46, 0x30, + 0xfb, 0xf7, 0x77, 0xf8, 0x00, 0xe0, 0x77, 0x71, + 0x32, 0x21, 0x28, 0x1c, 0x05, 0xf0, 0xb3, 0xf9, + 0x00, 0x28, 0x07, 0xd0, 0x01, 0x1c, 0x20, 0x1c, + 0xff, 0x30, 0x12, 0x22, 0x50, 0x30, 0x3c, 0x00, + 0x24, 0x54, 0x00, 0x00, 0xfb, 0xf7, 0x68, 0xf8, + 0x00, 0xe0, 0xf7, 0x73, 0x06, 0x21, 0x28, 0x1c, + 0x05, 0xf0, 0xa4, 0xf9, 0x00, 0x28, 0x07, 0xd0, + 0x01, 0x1c, 0x20, 0x1c, 0xff, 0x30, 0x04, 0x22, + 0x63, 0x30, 0xfb, 0xf7, 0x59, 0xf8, 0xf8, 0xbd, + 0xff, 0x34, 0x61, 0x34, 0xa7, 0x70, 0xfa, 0xe7, + 0x08, 0x49, 0x80, 0xb5, 0x09, 0x68, 0x00, 0x28, + 0x01, 0xd1, 0x07, 0x48, 0x01, 0x68, 0x08, 0x1c, + 0x3c, 0x00, 0x60, 0x54, 0x00, 0x00, 0x05, 0xd1, + 0x03, 0x21, 0x90, 0x20, 0xfb, 0xf7, 0x1d, 0xff, + 0x00, 0x20, 0x80, 0xbd, 0x01, 0xf0, 0xd7, 0xfb, + 0x80, 0xbd, 0x1c, 0x67, 0x01, 0x00, 0x20, 0x67, + 0x01, 0x00, 0x80, 0xb5, 0xff, 0xf7, 0xe7, 0xff, + 0x80, 0xbd, 0xf0, 0xb5, 0x00, 0x24, 0x84, 0x46, + 0x00, 0x20, 0x0b, 0xe0, 0x87, 0x40, 0x17, 0x40, + 0x07, 0xd0, 0x14, 0x23, 0x0b, 0x4d, 0x43, 0x43, + 0x5b, 0x19, 0x3c, 0x00, 0x9c, 0x54, 0x00, 0x00, + 0x1b, 0x7c, 0x65, 0x46, 0x2b, 0x55, 0x01, 0x34, + 0x01, 0x30, 0x01, 0x27, 0x3b, 0x1c, 0x0e, 0x28, + 0x00, 0xd3, 0x00, 0x23, 0x0e, 0x88, 0x3d, 0x1c, + 0xa6, 0x42, 0x00, 0xdc, 0x00, 0x25, 0x2b, 0x40, + 0xe7, 0xd1, 0x0c, 0x80, 0xf0, 0xbd, 0x00, 0x00, + 0x74, 0x40, 0x01, 0x00, 0x78, 0xb5, 0x04, 0x1c, + 0x01, 0x20, 0x20, 0x70, 0x08, 0x20, 0x00, 0xab, + 0x0d, 0x1c, 0x18, 0x80, 0x3c, 0x00, 0xd8, 0x54, + 0x00, 0x00, 0x16, 0x1c, 0xa0, 0x1c, 0x69, 0x46, + 0xff, 0xf7, 0xd1, 0xff, 0x00, 0xab, 0x00, 0x22, + 0xd2, 0x43, 0x19, 0x88, 0x82, 0x40, 0x61, 0x70, + 0x32, 0x20, 0x28, 0x70, 0x10, 0x20, 0x18, 0x80, + 0x32, 0x40, 0xa8, 0x1c, 0x69, 0x46, 0xff, 0xf7, + 0xc2, 0xff, 0x00, 0xab, 0x18, 0x88, 0x68, 0x70, + 0x78, 0xbd, 0x80, 0xb5, 0x02, 0xf0, 0x35, 0xff, + 0x00, 0x21, 0x00, 0x28, 0x00, 0xd0, 0x3c, 0x00, + 0x14, 0x55, 0x00, 0x00, 0x01, 0x69, 0x08, 0x1c, + 0x80, 0xbd, 0x00, 0x00, 0x05, 0x49, 0x00, 0x28, + 0x01, 0xd0, 0xc8, 0x68, 0x00, 0xe0, 0x08, 0x69, + 0x00, 0x28, 0x01, 0xd0, 0x04, 0x30, 0x70, 0x47, + 0x00, 0x20, 0x70, 0x47, 0x10, 0x67, 0x01, 0x00, + 0x03, 0x48, 0x00, 0x69, 0x00, 0x28, 0x01, 0xd0, + 0x04, 0x30, 0x70, 0x47, 0x00, 0x20, 0x70, 0x47, + 0x10, 0x67, 0x01, 0x00, 0x02, 0x48, 0x00, 0x69, + 0x3c, 0x00, 0x50, 0x55, 0x00, 0x00, 0x00, 0x28, + 0xff, 0xd1, 0x70, 0x47, 0x00, 0x00, 0x10, 0x67, + 0x01, 0x00, 0x10, 0xb5, 0x05, 0x4c, 0x20, 0x69, + 0x00, 0x28, 0x03, 0xd1, 0x04, 0x21, 0x90, 0x20, + 0xfb, 0xf7, 0x9b, 0xfe, 0x20, 0x69, 0x10, 0xbd, + 0x00, 0x00, 0x10, 0x67, 0x01, 0x00, 0x10, 0xb5, + 0x04, 0x1c, 0x00, 0xf0, 0x40, 0xf9, 0x00, 0x28, + 0x01, 0xd0, 0x00, 0x20, 0x10, 0xbd, 0x20, 0x1c, + 0x00, 0xf0, 0x3c, 0x00, 0x8c, 0x55, 0x00, 0x00, + 0x57, 0xf9, 0x00, 0x28, 0x01, 0xd0, 0x01, 0x20, + 0x10, 0xbd, 0x02, 0x20, 0x10, 0xbd, 0x00, 0x00, + 0x70, 0xb5, 0x0f, 0x4e, 0x04, 0x1c, 0x30, 0x68, + 0x0d, 0x1c, 0x00, 0x28, 0x07, 0xd0, 0x21, 0x1c, + 0x04, 0x30, 0x05, 0xf0, 0xc1, 0xfb, 0x00, 0x28, + 0x01, 0xd0, 0x30, 0x68, 0x0b, 0xe0, 0x09, 0x4a, + 0x10, 0x68, 0x00, 0x28, 0x09, 0xd0, 0x21, 0x1c, + 0x14, 0x1c, 0x04, 0x30, 0x3c, 0x00, 0xc8, 0x55, + 0x00, 0x00, 0x05, 0xf0, 0xb4, 0xfb, 0x00, 0x28, + 0x02, 0xd0, 0x20, 0x68, 0x9c, 0x30, 0x00, 0xe0, + 0x03, 0x48, 0x40, 0x5d, 0x70, 0xbd, 0x20, 0x67, + 0x01, 0x00, 0x1c, 0x67, 0x01, 0x00, 0xcc, 0x47, + 0x01, 0x00, 0x04, 0x49, 0x00, 0x20, 0x09, 0x69, + 0x00, 0x29, 0x02, 0xd0, 0xff, 0x31, 0x01, 0x31, + 0x88, 0x69, 0x70, 0x47, 0x00, 0x00, 0x10, 0x67, + 0x01, 0x00, 0x01, 0x48, 0x00, 0x7a, 0x3c, 0x00, + 0x04, 0x56, 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, + 0xac, 0x7c, 0x01, 0x00, 0xfe, 0xb5, 0x06, 0x1c, + 0x00, 0x20, 0x1f, 0x1c, 0x14, 0x1c, 0x00, 0x29, + 0x02, 0x90, 0x19, 0xd0, 0x01, 0x29, 0x26, 0xd0, + 0x02, 0x29, 0x47, 0xd1, 0x26, 0x48, 0x00, 0x78, + 0x05, 0xf0, 0xa0, 0xfb, 0xa0, 0x72, 0x0a, 0xf0, + 0x4f, 0xfc, 0x0e, 0x28, 0x09, 0xd1, 0xa0, 0x7a, + 0x05, 0xf0, 0xaa, 0xfb, 0x00, 0x28, 0x04, 0xd0, + 0x3c, 0x00, 0x40, 0x56, 0x00, 0x00, 0x20, 0x48, + 0x00, 0x78, 0x05, 0xf0, 0x92, 0xfb, 0xa0, 0x72, + 0x00, 0x20, 0x20, 0x72, 0x2f, 0xe0, 0x1d, 0x4d, + 0x28, 0x68, 0x00, 0x28, 0x01, 0xd1, 0xfb, 0xf7, + 0x52, 0xfe, 0x00, 0x97, 0x2a, 0x68, 0x23, 0x1c, + 0x18, 0x32, 0x11, 0x1c, 0x30, 0x1c, 0xfc, 0xf7, + 0xde, 0xfb, 0x26, 0xe0, 0x30, 0x1c, 0x0c, 0xf0, + 0xca, 0xfb, 0x05, 0x1c, 0x02, 0xd0, 0xa8, 0x68, + 0x00, 0x28, 0x3c, 0x00, 0x7c, 0x56, 0x00, 0x00, + 0x08, 0xd1, 0x13, 0x48, 0x00, 0x68, 0x00, 0x28, + 0x01, 0xd1, 0xfb, 0xf7, 0x3b, 0xfe, 0x10, 0x48, + 0x00, 0x68, 0x18, 0x30, 0x02, 0x1c, 0x0e, 0x48, + 0x00, 0x97, 0x01, 0x68, 0x23, 0x1c, 0x18, 0x31, + 0x30, 0x1c, 0xfc, 0xf7, 0xc3, 0xfb, 0x00, 0x2d, + 0x0a, 0xd0, 0x40, 0x35, 0x28, 0x88, 0x80, 0x06, + 0x06, 0xd4, 0x00, 0x20, 0x20, 0x60, 0x03, 0xe0, + 0x01, 0x21, 0x90, 0x20, 0x3c, 0x00, 0xb8, 0x56, + 0x00, 0x00, 0xfb, 0xf7, 0xf4, 0xfd, 0x02, 0x98, + 0xfe, 0xbd, 0xb0, 0x69, 0x01, 0x00, 0x90, 0x57, + 0x01, 0x00, 0x20, 0x67, 0x01, 0x00, 0x1c, 0x67, + 0x01, 0x00, 0x80, 0xb5, 0x00, 0x20, 0x02, 0xf0, + 0x4a, 0xfe, 0x18, 0x23, 0x05, 0x4a, 0x58, 0x43, + 0x80, 0x18, 0x40, 0x69, 0x01, 0x21, 0x00, 0x28, + 0x00, 0xd0, 0x41, 0x78, 0x08, 0x1c, 0x80, 0xbd, + 0x00, 0x00, 0x94, 0x67, 0x01, 0x00, 0x3c, 0x00, + 0xf4, 0x56, 0x00, 0x00, 0x02, 0x49, 0x08, 0x69, + 0x00, 0x28, 0x00, 0xd1, 0xc8, 0x68, 0x70, 0x47, + 0x10, 0x67, 0x01, 0x00, 0x03, 0x48, 0xc0, 0x68, + 0x00, 0x28, 0x01, 0xd0, 0x04, 0x30, 0x70, 0x47, + 0x00, 0x20, 0x70, 0x47, 0x10, 0x67, 0x01, 0x00, + 0x10, 0xb5, 0x05, 0x4c, 0xe0, 0x68, 0x00, 0x28, + 0x03, 0xd1, 0x05, 0x21, 0x90, 0x20, 0xfb, 0xf7, + 0xbd, 0xfd, 0xe0, 0x68, 0x10, 0xbd, 0x00, 0x00, + 0x3c, 0x00, 0x30, 0x57, 0x00, 0x00, 0x10, 0x67, + 0x01, 0x00, 0xf8, 0xb5, 0x0d, 0x1c, 0x00, 0x2a, + 0x03, 0xd0, 0x11, 0x49, 0x12, 0x4f, 0x0e, 0x78, + 0x01, 0xe0, 0x11, 0x4f, 0x0c, 0x26, 0x08, 0x2e, + 0x01, 0xd2, 0x34, 0x1c, 0x00, 0xe0, 0x08, 0x24, + 0x01, 0x21, 0x01, 0x70, 0x44, 0x70, 0x39, 0x1c, + 0x22, 0x1c, 0x02, 0x30, 0xfa, 0xf7, 0xcb, 0xfe, + 0x32, 0x1b, 0x00, 0x2a, 0x07, 0xdd, 0x32, 0x20, + 0x28, 0x70, 0x3c, 0x00, 0x6c, 0x57, 0x00, 0x00, + 0x39, 0x19, 0xa8, 0x1c, 0x6a, 0x70, 0xfa, 0xf7, + 0xc1, 0xfe, 0xf8, 0xbd, 0xff, 0x20, 0x28, 0x70, + 0x00, 0x20, 0x68, 0x70, 0xf9, 0xe7, 0x00, 0x00, + 0xa4, 0x69, 0x01, 0x00, 0xb0, 0x69, 0x01, 0x00, + 0x90, 0x57, 0x01, 0x00, 0x01, 0x49, 0x48, 0x62, + 0x70, 0x47, 0x00, 0x00, 0x94, 0x67, 0x01, 0x00, + 0x03, 0x49, 0x80, 0xb5, 0x08, 0x60, 0x01, 0x21, + 0x01, 0x20, 0x03, 0xf0, 0x3c, 0x00, 0xa8, 0x57, + 0x00, 0x00, 0xc5, 0xfb, 0x80, 0xbd, 0x1c, 0x67, + 0x01, 0x00, 0x80, 0xb5, 0x00, 0x21, 0x01, 0x20, + 0x03, 0xf0, 0xbd, 0xfb, 0x06, 0xf0, 0xb9, 0xf8, + 0x02, 0x49, 0x00, 0x20, 0x08, 0x60, 0x80, 0xbd, + 0x00, 0x00, 0x1c, 0x67, 0x01, 0x00, 0x03, 0x49, + 0x01, 0x20, 0xc9, 0x68, 0x00, 0x29, 0x00, 0xd1, + 0x00, 0x20, 0x70, 0x47, 0x00, 0x00, 0x10, 0x67, + 0x01, 0x00, 0x03, 0x48, 0xc0, 0x68, 0x3c, 0x00, + 0xe4, 0x57, 0x00, 0x00, 0x00, 0x28, 0x01, 0xd0, + 0x40, 0x69, 0x70, 0x47, 0x00, 0x20, 0x70, 0x47, + 0x10, 0x67, 0x01, 0x00, 0x80, 0xb5, 0x02, 0x21, + 0x01, 0x20, 0x03, 0xf0, 0x9b, 0xfb, 0x80, 0xbd, + 0x05, 0x4a, 0x80, 0xb5, 0x12, 0x69, 0x00, 0x21, + 0x00, 0x2a, 0x03, 0xd0, 0x11, 0x1d, 0x05, 0xf0, + 0x91, 0xfa, 0x01, 0x1c, 0x08, 0x1c, 0x80, 0xbd, + 0x10, 0x67, 0x01, 0x00, 0x06, 0x4a, 0x80, 0xb5, + 0x3c, 0x00, 0x20, 0x58, 0x00, 0x00, 0x12, 0x69, + 0x00, 0x21, 0x00, 0x2a, 0x05, 0xd0, 0x11, 0x1c, + 0xff, 0x31, 0x21, 0x31, 0x05, 0xf0, 0x8b, 0xfa, + 0x01, 0x1c, 0x08, 0x1c, 0x80, 0xbd, 0x10, 0x67, + 0x01, 0x00, 0x05, 0x4a, 0x80, 0xb5, 0xd2, 0x68, + 0x00, 0x21, 0x00, 0x2a, 0x03, 0xd0, 0x11, 0x1d, + 0x05, 0xf0, 0x73, 0xfa, 0x01, 0x1c, 0x08, 0x1c, + 0x80, 0xbd, 0x10, 0x67, 0x01, 0x00, 0x06, 0x4a, + 0x80, 0xb5, 0x3c, 0x00, 0x5c, 0x58, 0x00, 0x00, + 0xd2, 0x68, 0x00, 0x21, 0x00, 0x2a, 0x05, 0xd0, + 0x11, 0x1c, 0xff, 0x31, 0x21, 0x31, 0x05, 0xf0, + 0x6d, 0xfa, 0x01, 0x1c, 0x08, 0x1c, 0x80, 0xbd, + 0x10, 0x67, 0x01, 0x00, 0xff, 0xb5, 0x0d, 0x1c, + 0x1f, 0x1c, 0x87, 0xb0, 0x10, 0x9e, 0x00, 0x24, + 0x02, 0xf0, 0x72, 0xfd, 0x18, 0x23, 0x13, 0x49, + 0x58, 0x43, 0x08, 0x58, 0x00, 0x28, 0x19, 0xd0, + 0x04, 0x1c, 0x33, 0x1c, 0x3c, 0x00, 0x98, 0x58, + 0x00, 0x00, 0x3a, 0x1c, 0x28, 0x1c, 0x09, 0x99, + 0xfa, 0xf7, 0x9f, 0xfd, 0x04, 0x1c, 0x14, 0xd0, + 0x18, 0x20, 0x00, 0xab, 0x18, 0x80, 0xaa, 0x68, + 0x01, 0xa8, 0x69, 0x46, 0xff, 0xf7, 0xe7, 0xfd, + 0x6a, 0x46, 0x01, 0xa9, 0x00, 0x20, 0x07, 0xf0, + 0x44, 0xfe, 0x00, 0x28, 0x05, 0xd1, 0x0a, 0x21, + 0x00, 0xe0, 0x0f, 0x21, 0x90, 0x20, 0xfb, 0xf7, + 0xea, 0xfc, 0x20, 0x1c, 0x0b, 0xb0, 0x3c, 0x00, + 0xd4, 0x58, 0x00, 0x00, 0xf0, 0xbd, 0x00, 0x00, + 0x94, 0x67, 0x01, 0x00, 0x10, 0xb5, 0x00, 0x24, + 0x02, 0xf0, 0x44, 0xfd, 0x18, 0x23, 0x05, 0x49, + 0x58, 0x43, 0x40, 0x18, 0x80, 0x68, 0x00, 0x28, + 0x02, 0xd0, 0xfa, 0xf7, 0x71, 0xfd, 0x01, 0x24, + 0x20, 0x1c, 0x10, 0xbd, 0x94, 0x67, 0x01, 0x00, + 0x80, 0xb5, 0x02, 0x4b, 0x00, 0xf0, 0x4e, 0xf8, + 0x80, 0xbd, 0x00, 0x00, 0x10, 0x67, 0x01, 0x00, + 0x3c, 0x00, 0x10, 0x59, 0x00, 0x00, 0x80, 0xb5, + 0x02, 0x4b, 0x00, 0xf0, 0x46, 0xf8, 0x80, 0xbd, + 0x00, 0x00, 0x11, 0x67, 0x01, 0x00, 0xf8, 0xb5, + 0x0e, 0x1c, 0x15, 0x1c, 0x00, 0x28, 0x1c, 0x49, + 0x10, 0xd0, 0x48, 0x68, 0x1c, 0x4a, 0x28, 0x80, + 0x00, 0x20, 0x07, 0xe0, 0x0b, 0x18, 0x1c, 0x7a, + 0x14, 0x23, 0x63, 0x43, 0x9b, 0x18, 0x1b, 0x7c, + 0x33, 0x54, 0x01, 0x30, 0x2b, 0x88, 0x83, 0x42, + 0xf4, 0xdc, 0x3c, 0x00, 0x4c, 0x59, 0x00, 0x00, + 0x24, 0xe0, 0x00, 0x20, 0x0f, 0x1c, 0x00, 0x24, + 0x08, 0x60, 0x0f, 0xe0, 0x30, 0x5d, 0x05, 0xf0, + 0x07, 0xfa, 0x0e, 0x28, 0x01, 0xd1, 0x00, 0x20, + 0xf8, 0xbd, 0x39, 0x19, 0x08, 0x72, 0x01, 0x22, + 0x39, 0x68, 0x82, 0x40, 0x11, 0x43, 0x08, 0x1c, + 0x38, 0x60, 0x01, 0x34, 0x28, 0x88, 0xa0, 0x42, + 0xec, 0xdc, 0x28, 0x88, 0x78, 0x60, 0xff, 0xf7, + 0xb7, 0xfe, 0x00, 0x28, 0x3c, 0x00, 0x88, 0x59, + 0x00, 0x00, 0x06, 0xd0, 0x01, 0x69, 0x00, 0x29, + 0x03, 0xd0, 0x7f, 0x21, 0xc9, 0x43, 0x0b, 0xf0, + 0x52, 0xfb, 0x01, 0x20, 0xe3, 0xe7, 0x2c, 0x7d, + 0x01, 0x00, 0x74, 0x40, 0x01, 0x00, 0x10, 0xb5, + 0x1c, 0x1c, 0x00, 0x28, 0x0b, 0xd0, 0x20, 0x78, + 0x0e, 0x28, 0x05, 0xd2, 0x14, 0x23, 0x0c, 0x4a, + 0x58, 0x43, 0x80, 0x18, 0x00, 0x7c, 0x00, 0xe0, + 0x00, 0x20, 0x08, 0x70, 0x0e, 0xe0, 0x3c, 0x00, + 0xc4, 0x59, 0x00, 0x00, 0x08, 0x78, 0x05, 0xf0, + 0xd1, 0xf9, 0x20, 0x70, 0xff, 0xf7, 0x92, 0xfe, + 0x00, 0x28, 0x06, 0xd0, 0x01, 0x69, 0x00, 0x29, + 0x03, 0xd0, 0x7f, 0x21, 0xc9, 0x43, 0x0b, 0xf0, + 0x2d, 0xfb, 0x01, 0x20, 0x10, 0xbd, 0x00, 0x00, + 0x74, 0x40, 0x01, 0x00, 0x80, 0xb5, 0x27, 0x20, + 0xc0, 0x43, 0x09, 0xf0, 0x31, 0xfc, 0x80, 0xbd, + 0x80, 0xb5, 0x27, 0x20, 0xc0, 0x43, 0x09, 0xf0, + 0x3c, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x39, 0xfc, + 0x80, 0xbd, 0x80, 0xb5, 0x28, 0x20, 0x09, 0xf0, + 0x42, 0xfc, 0x80, 0xbd, 0x00, 0x00, 0x80, 0xb5, + 0x28, 0x20, 0x09, 0xf0, 0x4a, 0xfc, 0x80, 0xbd, + 0x00, 0x00, 0xb0, 0xb5, 0x01, 0x28, 0x28, 0xd1, + 0x01, 0x29, 0x01, 0xd0, 0xfb, 0xf7, 0x6b, 0xfc, + 0xff, 0xf7, 0xe9, 0xfd, 0x02, 0x28, 0x1a, 0xd1, + 0x07, 0xf0, 0x13, 0xfc, 0x12, 0x4c, 0x21, 0x69, + 0x88, 0x42, 0x3c, 0x00, 0x3c, 0x5a, 0x00, 0x00, + 0x15, 0xd0, 0x07, 0xf0, 0x0d, 0xfc, 0x20, 0x61, + 0x20, 0x68, 0x7d, 0x24, 0xe4, 0x00, 0x44, 0x43, + 0x0d, 0xf0, 0xae, 0xf9, 0x05, 0x1c, 0x07, 0xf0, + 0x0b, 0xfc, 0x28, 0x1a, 0x84, 0x42, 0x00, 0xd9, + 0x24, 0x1a, 0x01, 0x22, 0x21, 0x1c, 0x0a, 0x20, + 0x0d, 0xf0, 0xb2, 0xfd, 0xb0, 0xbd, 0x00, 0x21, + 0x09, 0x20, 0x0c, 0xf0, 0x75, 0xfc, 0xb0, 0xbd, + 0x07, 0x21, 0x0a, 0x20, 0x3c, 0x00, 0x78, 0x5a, + 0x00, 0x00, 0xfb, 0xf7, 0x14, 0xfc, 0xb0, 0xbd, + 0x00, 0x00, 0xd4, 0x67, 0x01, 0x00, 0x7d, 0x20, + 0x02, 0x49, 0x00, 0x01, 0x08, 0x60, 0x70, 0x47, + 0x00, 0x00, 0xd4, 0x67, 0x01, 0x00, 0x10, 0xb5, + 0x81, 0x6d, 0x04, 0x1c, 0xff, 0x30, 0x46, 0x30, + 0x0c, 0xf0, 0xd1, 0xfc, 0x20, 0x1c, 0xff, 0x30, + 0x50, 0x30, 0xa1, 0x6d, 0x0c, 0xf0, 0xcb, 0xfc, + 0x10, 0xbd, 0xb0, 0xb5, 0x04, 0x1c, 0x3c, 0x00, + 0xb4, 0x5a, 0x00, 0x00, 0x0d, 0x1c, 0x02, 0xf0, + 0x59, 0xfc, 0x20, 0x1c, 0x02, 0xf0, 0x56, 0xfc, + 0x18, 0x23, 0x04, 0x49, 0x58, 0x43, 0x40, 0x18, + 0x18, 0x22, 0x29, 0x1c, 0xfa, 0xf7, 0x70, 0xfd, + 0xb0, 0xbd, 0x00, 0x00, 0x94, 0x67, 0x01, 0x00, + 0x10, 0xb5, 0x04, 0x1c, 0x09, 0xf0, 0xbc, 0xfb, + 0x20, 0x1c, 0x09, 0xf0, 0xc7, 0xfb, 0x10, 0xbd, + 0x10, 0xb5, 0x04, 0x1c, 0x09, 0xf0, 0xd0, 0xfb, + 0x3c, 0x00, 0xf0, 0x5a, 0x00, 0x00, 0x20, 0x1c, + 0x09, 0xf0, 0xdb, 0xfb, 0x10, 0xbd, 0x70, 0xb5, + 0x0c, 0x78, 0x06, 0x1c, 0x48, 0x88, 0x4d, 0x78, + 0xe2, 0x00, 0x80, 0x1a, 0xe9, 0x00, 0x40, 0x1a, + 0x01, 0x1c, 0x41, 0x43, 0x12, 0x31, 0x24, 0x20, + 0xfa, 0xf7, 0x91, 0xfd, 0x21, 0x1c, 0x61, 0x43, + 0xc9, 0x00, 0x40, 0x18, 0x29, 0x1c, 0x69, 0x43, + 0xc9, 0x00, 0x42, 0x18, 0x0c, 0x49, 0x88, 0x79, + 0x0c, 0x4b, 0x3c, 0x00, 0x2c, 0x5b, 0x00, 0x00, + 0x53, 0x43, 0x0c, 0x4a, 0x13, 0x60, 0x53, 0x7b, + 0x34, 0x02, 0x14, 0x60, 0x52, 0x7b, 0x88, 0x71, + 0x01, 0x33, 0x58, 0x10, 0x08, 0x4b, 0x80, 0x1a, + 0x01, 0x21, 0x49, 0x02, 0x58, 0x43, 0x00, 0x28, + 0x00, 0xda, 0x49, 0x42, 0x08, 0x18, 0x80, 0x12, + 0x21, 0x38, 0x70, 0xbd, 0x20, 0x10, 0x07, 0x00, + 0xec, 0x04, 0x00, 0x00, 0x00, 0xa0, 0x07, 0x00, + 0x03, 0x03, 0x00, 0x00, 0x3c, 0x00, 0x68, 0x5b, + 0x00, 0x00, 0x10, 0xb5, 0x04, 0x1c, 0x06, 0x21, + 0x04, 0x30, 0xfa, 0xf7, 0x70, 0xfc, 0xff, 0x20, + 0x21, 0x30, 0xff, 0x21, 0x01, 0x55, 0x20, 0x1c, + 0xff, 0x30, 0x41, 0x30, 0x81, 0x70, 0x41, 0x71, + 0xc1, 0x73, 0xff, 0x20, 0x63, 0x30, 0x01, 0x55, + 0x00, 0x20, 0x20, 0x61, 0x60, 0x61, 0xff, 0x34, + 0x01, 0x34, 0xa0, 0x60, 0xe0, 0x60, 0x10, 0xbd, + 0x00, 0x00, 0x70, 0xb5, 0x06, 0x1c, 0x3c, 0x00, + 0xa4, 0x5b, 0x00, 0x00, 0x08, 0x1c, 0x58, 0x60, + 0x9a, 0x60, 0x1c, 0x1c, 0x1e, 0x60, 0x15, 0x1c, + 0x9b, 0x8a, 0xe2, 0x8a, 0x31, 0x1c, 0x02, 0xf0, + 0xa1, 0xfc, 0x28, 0x1a, 0xe0, 0x60, 0x70, 0xbd, + 0x70, 0xb5, 0x04, 0x1c, 0x08, 0x1c, 0x11, 0x1c, + 0x1e, 0x1c, 0x00, 0x25, 0xeb, 0x43, 0x22, 0x1c, + 0x18, 0x32, 0x0b, 0xf0, 0xf7, 0xfb, 0x22, 0x1c, + 0xff, 0x32, 0x50, 0x32, 0x11, 0x1c, 0x0a, 0x39, + 0x3c, 0x00, 0xe0, 0x5b, 0x00, 0x00, 0x01, 0x23, + 0x20, 0x1c, 0x00, 0xf0, 0xc6, 0xf8, 0x0c, 0x28, + 0x10, 0xd0, 0x01, 0x25, 0x20, 0x1c, 0x0b, 0xf0, + 0xac, 0xfa, 0x20, 0x1c, 0x00, 0xf0, 0x19, 0xf8, + 0x20, 0x1c, 0x00, 0xf0, 0x0a, 0xf8, 0x20, 0x1c, + 0x00, 0xf0, 0x29, 0xf8, 0x31, 0x1c, 0x20, 0x1c, + 0x0b, 0xf0, 0x17, 0xfa, 0x28, 0x1c, 0x70, 0xbd, + 0x00, 0x00, 0xff, 0x21, 0x1d, 0x31, 0x09, 0x58, + 0x80, 0x30, 0x3c, 0x00, 0x1c, 0x5c, 0x00, 0x00, + 0x89, 0x07, 0x00, 0x29, 0x01, 0xda, 0x01, 0x21, + 0x00, 0xe0, 0x00, 0x21, 0xc1, 0x62, 0x70, 0x47, + 0x01, 0x1c, 0x80, 0x31, 0x00, 0x22, 0x0a, 0x63, + 0x07, 0x4a, 0x12, 0x68, 0x00, 0x2a, 0x09, 0xd0, + 0x42, 0x88, 0x92, 0x06, 0x06, 0xd5, 0xff, 0x30, + 0x01, 0x30, 0xc0, 0x69, 0x40, 0x07, 0x01, 0xd4, + 0x01, 0x20, 0x08, 0x63, 0x70, 0x47, 0x00, 0x00, + 0xac, 0x69, 0x01, 0x00, 0x3c, 0x00, 0x58, 0x5c, + 0x00, 0x00, 0x80, 0xb5, 0x01, 0x1c, 0x4a, 0x88, + 0x00, 0x20, 0x52, 0x05, 0x05, 0xd5, 0xff, 0x31, + 0x01, 0x31, 0xc9, 0x69, 0x49, 0x07, 0x00, 0xd4, + 0x01, 0x20, 0x06, 0xf0, 0xec, 0xfb, 0x80, 0xbd, + 0x00, 0x00, 0xf8, 0xb5, 0x05, 0x1c, 0x98, 0x68, + 0x17, 0x1c, 0x0e, 0x1c, 0x1c, 0x1c, 0x00, 0x28, + 0x02, 0xd1, 0x20, 0x1c, 0x0c, 0xf0, 0x31, 0xf8, + 0xab, 0x69, 0x39, 0x1c, 0x30, 0x1c, 0x3c, 0x00, + 0x94, 0x5c, 0x00, 0x00, 0xa2, 0x68, 0x0b, 0xf0, + 0x95, 0xfb, 0xf8, 0xbd, 0xf8, 0xb5, 0x16, 0x1c, + 0x0d, 0x1c, 0x1f, 0x1c, 0x00, 0x24, 0x02, 0xf0, + 0x61, 0xfb, 0x18, 0x23, 0x06, 0x49, 0x58, 0x43, + 0x40, 0x18, 0x43, 0x68, 0x00, 0x2b, 0x05, 0xd0, + 0x3a, 0x1c, 0x31, 0x1c, 0x28, 0x1c, 0xfa, 0xf7, + 0x8e, 0xfb, 0x01, 0x24, 0x20, 0x1c, 0xf8, 0xbd, + 0x94, 0x67, 0x01, 0x00, 0x80, 0xb5, 0x07, 0xf0, + 0x3c, 0x00, 0xd0, 0x5c, 0x00, 0x00, 0xc5, 0xfa, + 0x09, 0x49, 0x08, 0x61, 0x08, 0x68, 0x00, 0x28, + 0x02, 0xd1, 0x7d, 0x20, 0x00, 0x01, 0x08, 0x60, + 0x08, 0x68, 0x7d, 0x21, 0xc9, 0x00, 0x41, 0x43, + 0x00, 0x23, 0x01, 0x22, 0x0a, 0x20, 0x0d, 0xf0, + 0x4e, 0xfd, 0x80, 0xbd, 0x00, 0x00, 0xd4, 0x67, + 0x01, 0x00, 0x80, 0xb5, 0x01, 0x21, 0x0a, 0x20, + 0x0d, 0xf0, 0x97, 0xfc, 0x80, 0xbd, 0xf8, 0xb5, + 0x0e, 0x1c, 0x3c, 0x00, 0x0c, 0x5d, 0x00, 0x00, + 0x51, 0x68, 0x14, 0x1c, 0x12, 0x68, 0xa5, 0x68, + 0x0b, 0x1c, 0x75, 0x1b, 0x57, 0x19, 0x97, 0x42, + 0x00, 0xd2, 0x01, 0x31, 0x42, 0x68, 0x00, 0x25, + 0x8a, 0x42, 0x02, 0xdd, 0x01, 0x25, 0x62, 0x60, + 0x05, 0xe0, 0x9a, 0x42, 0x03, 0xd1, 0x01, 0x68, + 0xb9, 0x42, 0x00, 0xd9, 0x01, 0x25, 0x00, 0x2d, + 0x09, 0xd0, 0x01, 0x68, 0x21, 0x60, 0xa6, 0x60, + 0xa3, 0x8a, 0xe2, 0x8a, 0x3c, 0x00, 0x48, 0x5d, + 0x00, 0x00, 0x60, 0x68, 0x02, 0xf0, 0xd7, 0xfb, + 0x30, 0x1a, 0xe0, 0x60, 0x28, 0x1c, 0xf8, 0xbd, + 0x00, 0x00, 0x80, 0xb5, 0x02, 0xf0, 0x07, 0xfb, + 0x18, 0x23, 0x03, 0x49, 0x58, 0x43, 0x40, 0x18, + 0x18, 0x21, 0xfa, 0xf7, 0x98, 0xfb, 0x80, 0xbd, + 0x00, 0x00, 0x94, 0x67, 0x01, 0x00, 0xfe, 0xb5, + 0x04, 0x1c, 0x08, 0x1c, 0x11, 0x1c, 0x1e, 0x1c, + 0x0c, 0x25, 0x01, 0x22, 0x00, 0x92, 0x3c, 0x00, + 0x84, 0x5d, 0x00, 0x00, 0xa2, 0x69, 0x02, 0xab, + 0xfd, 0xf7, 0xf0, 0xf8, 0x00, 0x28, 0x45, 0xd0, + 0x02, 0x98, 0x27, 0x21, 0x02, 0x1c, 0x0a, 0x40, + 0x01, 0xd1, 0x08, 0x43, 0x02, 0x90, 0x21, 0x49, + 0xa0, 0x69, 0x08, 0x40, 0x06, 0xd0, 0x02, 0x98, + 0x01, 0x40, 0x03, 0xd1, 0x49, 0x21, 0xc9, 0x00, + 0x08, 0x43, 0x02, 0x90, 0xa0, 0x6d, 0x02, 0x99, + 0x88, 0x42, 0x30, 0xd0, 0x00, 0x2e, 0x2d, 0xd0, + 0x3c, 0x00, 0xc0, 0x5d, 0x00, 0x00, 0x40, 0x21, + 0x20, 0x1c, 0x58, 0x30, 0xfa, 0xf7, 0x69, 0xfb, + 0x02, 0x98, 0x00, 0x25, 0x00, 0x26, 0x37, 0x1c, + 0xa0, 0x65, 0x19, 0xe0, 0xc0, 0x07, 0x11, 0xd5, + 0xf0, 0x19, 0x00, 0x19, 0x70, 0x30, 0x05, 0x71, + 0x28, 0x1c, 0x04, 0xf0, 0xd4, 0xff, 0x00, 0x28, + 0x04, 0xd0, 0xa0, 0x19, 0x80, 0x30, 0x05, 0x72, + 0x01, 0x36, 0x03, 0xe0, 0xe0, 0x19, 0x60, 0x30, + 0x05, 0x70, 0x3c, 0x00, 0xfc, 0x5d, 0x00, 0x00, + 0x01, 0x37, 0x01, 0x35, 0x2d, 0x06, 0x02, 0x98, + 0x2d, 0x0e, 0x40, 0x08, 0x02, 0x90, 0x02, 0x98, + 0x00, 0x28, 0xe2, 0xd1, 0x84, 0x20, 0x06, 0x51, + 0xf0, 0x19, 0x20, 0x67, 0xe7, 0x65, 0x00, 0x25, + 0x00, 0xe0, 0x0b, 0x25, 0x28, 0x1c, 0xfe, 0xbd, + 0xd8, 0x3a, 0x00, 0x00, 0x38, 0xb5, 0x05, 0x1c, + 0x08, 0x1c, 0x11, 0x1c, 0x00, 0x24, 0xe2, 0x43, + 0x6b, 0x46, 0xff, 0xf7, 0x3c, 0x00, 0x38, 0x5e, + 0x00, 0x00, 0x4f, 0xfa, 0x00, 0x28, 0x05, 0xd0, + 0xa8, 0x69, 0x00, 0x99, 0x01, 0x40, 0x81, 0x42, + 0x00, 0xd1, 0x01, 0x24, 0x20, 0x1c, 0x38, 0xbd, + 0x00, 0x00, 0x7c, 0xb5, 0x05, 0x6a, 0x86, 0x69, + 0x04, 0x1c, 0xc0, 0x68, 0xfb, 0xf7, 0xb7, 0xfb, + 0xe1, 0x69, 0xfb, 0xf7, 0xda, 0xfa, 0x20, 0x1c, + 0xe2, 0x69, 0x40, 0x30, 0xc1, 0x8b, 0x12, 0x89, + 0x89, 0x18, 0xc1, 0x83, 0x06, 0x49, 0x3c, 0x00, + 0x74, 0x5e, 0x00, 0x00, 0x01, 0x94, 0x00, 0x91, + 0x28, 0x69, 0x33, 0x1c, 0x82, 0x88, 0x01, 0x68, + 0xe0, 0x68, 0xc0, 0x68, 0x00, 0xf0, 0xf2, 0xf9, + 0x7c, 0xbd, 0x00, 0x00, 0x91, 0x5e, 0x00, 0x00, + 0xb0, 0xb5, 0xd1, 0x68, 0x55, 0x69, 0xc8, 0x68, + 0x14, 0x1c, 0x14, 0x4b, 0x0c, 0xe0, 0x02, 0x68, + 0x9a, 0x42, 0x07, 0xd1, 0xc2, 0x68, 0xca, 0x60, + 0x00, 0x21, 0xc1, 0x60, 0x01, 0x60, 0xfb, 0xf7, + 0x3c, 0x00, 0xb0, 0x5e, 0x00, 0x00, 0x73, 0xfb, + 0x03, 0xe0, 0x01, 0x1c, 0xc0, 0x68, 0x00, 0x28, + 0xf0, 0xd1, 0xe0, 0x68, 0xc0, 0x68, 0xe8, 0x60, + 0xe0, 0x68, 0xc5, 0x60, 0x20, 0x1c, 0x40, 0x30, + 0xc1, 0x8b, 0x2a, 0x89, 0x89, 0x18, 0xc1, 0x83, + 0x20, 0x68, 0x00, 0x28, 0x02, 0xd0, 0xff, 0xf7, + 0xba, 0xff, 0xb0, 0xbd, 0x04, 0x48, 0x04, 0xf0, + 0x4e, 0xf9, 0x00, 0x6a, 0x07, 0xf0, 0x77, 0xfa, + 0xb0, 0xbd, 0x3c, 0x00, 0xec, 0x5e, 0x00, 0x00, + 0xa0, 0x7e, 0x01, 0x00, 0xa0, 0x6a, 0x01, 0x00, + 0xf1, 0xb5, 0x82, 0xb0, 0x02, 0x98, 0x06, 0x69, + 0x01, 0x1c, 0x08, 0x36, 0x60, 0x31, 0x45, 0x68, + 0x01, 0x91, 0x82, 0xe0, 0x10, 0x21, 0x00, 0x20, + 0x2f, 0x69, 0xfb, 0xf7, 0x63, 0xfb, 0x68, 0x61, + 0x01, 0x89, 0x08, 0x39, 0x09, 0x04, 0x09, 0x0c, + 0x01, 0x81, 0x68, 0x69, 0x00, 0x68, 0x40, 0x18, + 0x08, 0x21, 0xfb, 0xf7, 0x3c, 0x00, 0x28, 0x5f, + 0x00, 0x00, 0x57, 0xfb, 0xe8, 0x61, 0x68, 0x69, + 0x71, 0x88, 0x00, 0x68, 0x20, 0x22, 0x01, 0x80, + 0x71, 0x68, 0x41, 0x60, 0x01, 0x99, 0x49, 0x7b, + 0x89, 0x01, 0x11, 0x43, 0xc1, 0x70, 0x00, 0x21, + 0x81, 0x70, 0x28, 0x20, 0xfb, 0xf7, 0x75, 0xfc, + 0x39, 0x88, 0x04, 0x1c, 0xc1, 0x81, 0xa8, 0x6b, + 0x00, 0x28, 0x03, 0xd1, 0x01, 0x20, 0x80, 0x02, + 0x08, 0x43, 0xe0, 0x81, 0x06, 0x22, 0x3c, 0x00, + 0x64, 0x5f, 0x00, 0x00, 0x39, 0x1d, 0x20, 0x1c, + 0x10, 0x30, 0xfa, 0xf7, 0xc5, 0xfa, 0x39, 0x1c, + 0x0a, 0x31, 0x06, 0x22, 0x20, 0x1c, 0x16, 0x30, + 0x00, 0x90, 0xfa, 0xf7, 0xbd, 0xfa, 0x39, 0x1c, + 0x10, 0x31, 0x06, 0x22, 0x20, 0x1c, 0x1c, 0x30, + 0xfa, 0xf7, 0xb6, 0xfa, 0xe1, 0x89, 0x25, 0x4a, + 0x5c, 0x20, 0x11, 0x40, 0x01, 0x22, 0x92, 0x03, + 0x11, 0x43, 0x40, 0x5b, 0xe1, 0x81, 0x0f, 0x21, + 0x3c, 0x00, 0xa0, 0x5f, 0x00, 0x00, 0x08, 0x40, + 0x60, 0x84, 0x20, 0x1c, 0x20, 0x30, 0x16, 0x21, + 0x81, 0x71, 0x00, 0x21, 0x21, 0x70, 0xe9, 0x6b, + 0x00, 0x29, 0x07, 0xd0, 0x29, 0x69, 0x09, 0x8b, + 0x09, 0x07, 0x09, 0x0f, 0x21, 0x70, 0xa1, 0x84, + 0x18, 0x21, 0x81, 0x71, 0x06, 0x22, 0x60, 0x1c, + 0x00, 0x99, 0xfa, 0xf7, 0x94, 0xfa, 0x70, 0x68, + 0x00, 0x0e, 0xe0, 0x71, 0x70, 0x68, 0x00, 0x02, + 0x00, 0x0e, 0x3c, 0x00, 0xdc, 0x5f, 0x00, 0x00, + 0x20, 0x72, 0x70, 0x68, 0x00, 0x04, 0x00, 0x0e, + 0x60, 0x72, 0x70, 0x68, 0xa0, 0x72, 0x70, 0x88, + 0x00, 0x0a, 0xe0, 0x72, 0x70, 0x88, 0x20, 0x73, + 0x70, 0x88, 0x01, 0x30, 0x00, 0x04, 0x00, 0x0c, + 0x70, 0x80, 0x02, 0xd1, 0x70, 0x68, 0x01, 0x30, + 0x70, 0x60, 0xac, 0x61, 0x02, 0x98, 0x28, 0x62, + 0x2d, 0x68, 0x00, 0x2d, 0x00, 0xd0, 0x79, 0xe7, + 0x02, 0x98, 0x04, 0x49, 0x3c, 0x00, 0x18, 0x60, + 0x00, 0x00, 0x42, 0x68, 0x04, 0x48, 0x04, 0xf0, + 0x74, 0xf8, 0xfe, 0xbd, 0x00, 0x00, 0x8f, 0xc7, + 0xff, 0xff, 0x3d, 0xda, 0x00, 0x00, 0xa0, 0x6a, + 0x01, 0x00, 0xb0, 0xb5, 0x07, 0x4d, 0x28, 0x78, + 0x03, 0x28, 0x08, 0xd0, 0x00, 0x24, 0x2c, 0x70, + 0x69, 0x68, 0x00, 0x29, 0x03, 0xd0, 0x01, 0x20, + 0xfa, 0xf7, 0xc8, 0xf9, 0x6c, 0x60, 0xb0, 0xbd, + 0x00, 0x00, 0x9c, 0x73, 0x01, 0x00, 0x3c, 0x00, + 0x54, 0x60, 0x00, 0x00, 0xf8, 0xb5, 0x2b, 0x4b, + 0xd8, 0x6a, 0x00, 0x28, 0x50, 0xd0, 0x2a, 0x48, + 0x01, 0x1c, 0xff, 0x31, 0x01, 0x31, 0xca, 0x68, + 0x01, 0x32, 0xca, 0x60, 0x1a, 0x6c, 0x00, 0x2a, + 0x02, 0xd1, 0x4a, 0x69, 0x01, 0x32, 0x4a, 0x61, + 0x0a, 0x69, 0x01, 0x32, 0x0a, 0x61, 0xda, 0x68, + 0x00, 0x2a, 0x04, 0xd0, 0x1f, 0x4a, 0x01, 0x32, + 0x12, 0x78, 0x00, 0x2a, 0x02, 0xd1, 0x8a, 0x69, + 0x3c, 0x00, 0x90, 0x60, 0x00, 0x00, 0x01, 0x32, + 0x8a, 0x61, 0x00, 0x25, 0x07, 0x1d, 0x18, 0x26, + 0x1a, 0x4a, 0x6e, 0x43, 0x74, 0x32, 0x90, 0x59, + 0x00, 0x28, 0x29, 0xd0, 0xb4, 0x18, 0x60, 0x69, + 0x00, 0x28, 0x25, 0xd1, 0x60, 0x68, 0x00, 0x28, + 0x02, 0xd0, 0x01, 0x68, 0x00, 0x29, 0x05, 0xd1, + 0xa1, 0x68, 0x00, 0x29, 0x1c, 0xd0, 0x09, 0x68, + 0x00, 0x29, 0x19, 0xd0, 0x00, 0x28, 0x05, 0xd0, + 0xe1, 0x68, 0x3c, 0x00, 0xcc, 0x60, 0x00, 0x00, + 0x01, 0x31, 0xe1, 0x60, 0x00, 0x68, 0x81, 0x42, + 0x11, 0xd3, 0xa0, 0x68, 0x00, 0x28, 0x06, 0xd0, + 0x21, 0x69, 0x00, 0x68, 0x08, 0x18, 0x0c, 0xf0, + 0xa3, 0xfd, 0x00, 0x28, 0x07, 0xd0, 0x06, 0x4a, + 0x01, 0x20, 0x60, 0x61, 0x74, 0x32, 0x91, 0x59, + 0x38, 0x1c, 0xfa, 0xf7, 0x70, 0xf9, 0x01, 0x35, + 0x02, 0x2d, 0xcb, 0xdb, 0xf8, 0xbd, 0x00, 0x00, + 0x44, 0x7d, 0x01, 0x00, 0x3c, 0x00, 0x08, 0x61, + 0x00, 0x00, 0xf4, 0x67, 0x01, 0x00, 0xf8, 0xb5, + 0x0f, 0x1c, 0x00, 0x25, 0x04, 0x1c, 0x00, 0x28, + 0x25, 0xd0, 0x20, 0x1c, 0x04, 0xf0, 0x03, 0xfe, + 0x00, 0x28, 0x06, 0xd0, 0xff, 0xf7, 0xff, 0xf8, + 0x04, 0x1c, 0xff, 0xf7, 0x50, 0xfb, 0x06, 0x1c, + 0x07, 0xe0, 0x20, 0x1c, 0xff, 0xf7, 0x91, 0xfb, + 0x06, 0x1c, 0x20, 0x1c, 0xff, 0xf7, 0x6f, 0xfb, + 0x04, 0x1c, 0x00, 0x2e, 0x06, 0xd0, 0x3c, 0x00, + 0x44, 0x61, 0x00, 0x00, 0xff, 0xf7, 0x4c, 0xfb, + 0x00, 0x28, 0x02, 0xd0, 0x01, 0x25, 0x01, 0x20, + 0x07, 0xe0, 0x00, 0x2c, 0x06, 0xd0, 0xff, 0xf7, + 0xef, 0xf8, 0x00, 0x28, 0x02, 0xd0, 0x01, 0x25, + 0x00, 0x20, 0x38, 0x60, 0x28, 0x1c, 0xf8, 0xbd, + 0xb0, 0xb5, 0xc5, 0x68, 0x04, 0x1c, 0x0d, 0xf0, + 0x8f, 0xfc, 0x20, 0x7e, 0xc1, 0x07, 0x08, 0xd5, + 0xe1, 0x68, 0xa9, 0x42, 0x05, 0xd9, 0x22, 0x69, + 0x3c, 0x00, 0x80, 0x61, 0x00, 0x00, 0x91, 0x42, + 0x02, 0xd3, 0xe1, 0x8a, 0x01, 0x31, 0xe1, 0x82, + 0x81, 0x07, 0x08, 0xd5, 0xe1, 0x68, 0xa9, 0x42, + 0x05, 0xd2, 0x22, 0x69, 0x91, 0x42, 0x02, 0xd8, + 0xe1, 0x8a, 0x01, 0x31, 0xe1, 0x82, 0x40, 0x07, + 0x06, 0xd5, 0xe0, 0x68, 0x21, 0x69, 0x88, 0x42, + 0x02, 0xd1, 0xe0, 0x8a, 0x01, 0x30, 0xe0, 0x82, + 0xe0, 0x8a, 0xa1, 0x8a, 0x88, 0x42, 0x0d, 0xd3, + 0x60, 0x7e, 0x3c, 0x00, 0xbc, 0x61, 0x00, 0x00, + 0x02, 0x28, 0x0b, 0xd0, 0x20, 0x68, 0xe1, 0x68, + 0x04, 0x22, 0x07, 0xf0, 0x65, 0xfb, 0x60, 0x7e, + 0x00, 0x28, 0x03, 0xd1, 0x20, 0x68, 0x08, 0xf0, + 0xab, 0xff, 0xb0, 0xbd, 0x00, 0x20, 0xe0, 0x82, + 0xb0, 0xbd, 0x00, 0x00, 0x70, 0xb5, 0x06, 0x1c, + 0x0c, 0x23, 0x20, 0x49, 0x58, 0x43, 0x45, 0x18, + 0x00, 0x20, 0xa8, 0x60, 0x30, 0x1c, 0x06, 0xf0, + 0x91, 0xfe, 0x04, 0x1c, 0x3c, 0x00, 0xf8, 0x61, + 0x00, 0x00, 0x68, 0x60, 0x33, 0xd0, 0x01, 0x20, + 0xa8, 0x70, 0x2c, 0x20, 0x00, 0x5d, 0x02, 0x28, + 0x03, 0xd1, 0x20, 0x1c, 0x03, 0xf0, 0x45, 0xfe, + 0x10, 0xe0, 0x61, 0x6b, 0x00, 0x29, 0x0a, 0xd0, + 0x01, 0x28, 0x04, 0xd1, 0x21, 0x1c, 0x28, 0x1c, + 0x03, 0xf0, 0x55, 0xfe, 0x06, 0xe0, 0x20, 0x1c, + 0x0a, 0xf0, 0x0d, 0xfc, 0x02, 0xe0, 0x20, 0x1c, + 0x0a, 0xf0, 0x3d, 0xfb, 0x0d, 0x48, 0x3c, 0x00, + 0x34, 0x62, 0x00, 0x00, 0x14, 0x38, 0x41, 0x68, + 0x00, 0x29, 0x10, 0xd0, 0x20, 0x1c, 0x40, 0x30, + 0x02, 0x8b, 0x12, 0x07, 0x92, 0x0f, 0x01, 0x2a, + 0x09, 0xd0, 0x80, 0x8b, 0x32, 0x02, 0x00, 0x09, + 0x00, 0x04, 0x10, 0x43, 0x81, 0x22, 0x02, 0x43, + 0x0c, 0x20, 0x0d, 0xf0, 0xb7, 0xf9, 0x0c, 0xf0, + 0xa5, 0xfd, 0x60, 0x64, 0x70, 0xbd, 0x00, 0x00, + 0x60, 0x7b, 0x01, 0x00, 0xff, 0xb5, 0x08, 0x1c, + 0x3c, 0x00, 0x70, 0x62, 0x00, 0x00, 0x11, 0x1c, + 0x0c, 0x32, 0x20, 0x24, 0x14, 0x43, 0x0c, 0x4a, + 0x83, 0xb0, 0x0c, 0xae, 0x52, 0x68, 0x60, 0xce, + 0x94, 0x70, 0x00, 0x24, 0xd4, 0x70, 0x93, 0x63, + 0x0d, 0x23, 0x40, 0x27, 0xbb, 0x52, 0x94, 0x61, + 0x14, 0x84, 0x01, 0x22, 0x02, 0x92, 0x32, 0x1c, + 0x00, 0x90, 0x01, 0x91, 0x23, 0x1c, 0x29, 0x1c, + 0x03, 0x98, 0x00, 0xf0, 0x66, 0xf9, 0x07, 0xb0, + 0xf0, 0xbd, 0x3c, 0x00, 0xac, 0x62, 0x00, 0x00, + 0xa0, 0x7e, 0x01, 0x00, 0xf8, 0xb5, 0x04, 0x1c, + 0x00, 0x27, 0x11, 0x4e, 0x1d, 0xe0, 0xe0, 0x68, + 0x00, 0x28, 0x70, 0x68, 0x0c, 0xd1, 0x80, 0x88, + 0x00, 0x07, 0x0d, 0xd1, 0x01, 0x21, 0x0c, 0x48, + 0xfb, 0xf7, 0x84, 0xf9, 0xc4, 0x60, 0xe8, 0x60, + 0x70, 0x68, 0x81, 0x88, 0x01, 0x31, 0x02, 0xe0, + 0x81, 0x88, 0x22, 0x89, 0x89, 0x18, 0x81, 0x80, + 0xe0, 0x68, 0x39, 0x1c, 0x3c, 0x00, 0xe8, 0x62, + 0x00, 0x00, 0x00, 0x28, 0x01, 0xd1, 0x71, 0x68, + 0xc9, 0x6d, 0x25, 0x1c, 0x61, 0x60, 0x04, 0x1c, + 0x00, 0x2c, 0xdf, 0xd1, 0xf8, 0xbd, 0xa0, 0x7e, + 0x01, 0x00, 0x06, 0x49, 0x10, 0xb5, 0x49, 0x68, + 0x00, 0x23, 0x05, 0xe0, 0x8a, 0x88, 0x04, 0x89, + 0x12, 0x19, 0x8a, 0x80, 0x43, 0x60, 0xc0, 0x68, + 0x00, 0x28, 0xf7, 0xd1, 0x10, 0xbd, 0xa0, 0x7e, + 0x01, 0x00, 0x10, 0xb5, 0x09, 0x49, 0x3c, 0x00, + 0x24, 0x63, 0x00, 0x00, 0x00, 0x24, 0x49, 0x68, + 0x0a, 0xe0, 0x8a, 0x88, 0x03, 0x89, 0xd2, 0x18, + 0x8a, 0x80, 0xc3, 0x68, 0x22, 0x1c, 0x00, 0x2b, + 0x00, 0xd1, 0xca, 0x6d, 0x42, 0x60, 0x18, 0x1c, + 0x00, 0x28, 0xf2, 0xd1, 0x10, 0xbd, 0x00, 0x00, + 0xa0, 0x7e, 0x01, 0x00, 0x01, 0x1c, 0x13, 0x48, + 0x10, 0xb5, 0x40, 0x68, 0x00, 0x23, 0x09, 0xe0, + 0x82, 0x88, 0x0c, 0x89, 0x12, 0x19, 0x82, 0x80, + 0x3c, 0x00, 0x60, 0x63, 0x00, 0x00, 0x4b, 0x60, + 0xca, 0x68, 0x00, 0x2a, 0x00, 0xd1, 0x41, 0x66, + 0xc9, 0x68, 0x00, 0x29, 0xf3, 0xd1, 0x01, 0x1c, + 0x68, 0x31, 0x81, 0x64, 0xc3, 0x64, 0x43, 0x65, + 0x82, 0x88, 0x08, 0x23, 0x11, 0x1c, 0x08, 0x31, + 0x89, 0x07, 0x89, 0x0f, 0x59, 0x1a, 0x50, 0x23, + 0x19, 0x52, 0x51, 0x18, 0x81, 0x80, 0x01, 0x1c, + 0x40, 0x6e, 0x48, 0x31, 0xc1, 0x60, 0x10, 0xbd, + 0x00, 0x00, 0x3c, 0x00, 0x9c, 0x63, 0x00, 0x00, + 0xa0, 0x7e, 0x01, 0x00, 0x10, 0xb5, 0x07, 0x49, + 0x00, 0x24, 0x4b, 0x68, 0x06, 0xe0, 0xc2, 0x68, + 0x21, 0x1c, 0x00, 0x2a, 0x00, 0xd1, 0xd9, 0x6d, + 0x41, 0x60, 0x10, 0x1c, 0x00, 0x28, 0xf6, 0xd1, + 0x10, 0xbd, 0x00, 0x00, 0xa0, 0x7e, 0x01, 0x00, + 0x70, 0x47, 0x00, 0x00, 0xfe, 0xb5, 0x06, 0x1c, + 0x0c, 0x48, 0x0c, 0x1c, 0x40, 0x68, 0x80, 0x21, + 0x81, 0x70, 0x00, 0x21, 0x3c, 0x00, 0xd8, 0x63, + 0x00, 0x00, 0xc1, 0x70, 0x15, 0x1c, 0x40, 0x22, + 0x81, 0x63, 0x11, 0x52, 0x81, 0x61, 0x01, 0x84, + 0x00, 0x20, 0x04, 0x22, 0x02, 0x92, 0x00, 0x90, + 0x01, 0x91, 0x29, 0x1c, 0x20, 0x1c, 0x1a, 0x1c, + 0x33, 0x1c, 0x00, 0xf0, 0xbc, 0xf8, 0xfe, 0xbd, + 0x00, 0x00, 0xa0, 0x7e, 0x01, 0x00, 0x70, 0xb5, + 0x06, 0x1c, 0x17, 0x48, 0x80, 0x78, 0x02, 0x21, + 0x16, 0x4a, 0x88, 0x43, 0x90, 0x70, 0x3c, 0x00, + 0x14, 0x64, 0x00, 0x00, 0x10, 0x1c, 0x80, 0x78, + 0x08, 0x43, 0x11, 0x1c, 0x88, 0x70, 0x13, 0x48, + 0x00, 0x24, 0xc4, 0x70, 0x70, 0x20, 0xfb, 0xf7, + 0xd9, 0xf9, 0x11, 0x4d, 0x70, 0x21, 0x68, 0x60, + 0xfa, 0xf7, 0x34, 0xf8, 0x30, 0x07, 0x00, 0x0f, + 0x69, 0x68, 0x90, 0x30, 0xc8, 0x65, 0x0d, 0x48, + 0x68, 0x22, 0x08, 0x80, 0x08, 0x1c, 0x28, 0x30, + 0x89, 0x60, 0x48, 0x61, 0x08, 0x20, 0x08, 0x82, + 0x3c, 0x00, 0x50, 0x64, 0x00, 0x00, 0x08, 0x1c, + 0x38, 0x30, 0x48, 0x63, 0x20, 0x38, 0x48, 0x64, + 0x5a, 0x20, 0x50, 0x54, 0x06, 0x48, 0x08, 0x31, + 0x41, 0x64, 0x44, 0x65, 0x70, 0xbd, 0x00, 0x00, + 0x07, 0x00, 0x58, 0x00, 0x07, 0x00, 0xa0, 0x7e, + 0x01, 0x00, 0xde, 0xc0, 0x00, 0x00, 0x00, 0x30, + 0x07, 0x00, 0x0a, 0x4b, 0x10, 0xb5, 0x58, 0x6d, + 0x0a, 0x49, 0x00, 0x22, 0x49, 0x68, 0x00, 0x24, + 0x4a, 0x62, 0x3c, 0x00, 0x8c, 0x64, 0x00, 0x00, + 0x5c, 0x65, 0x4b, 0x6e, 0x00, 0x2b, 0x01, 0xd0, + 0xda, 0x60, 0x4a, 0x66, 0x8b, 0x6d, 0x00, 0x2b, + 0x03, 0xd0, 0x0a, 0x6e, 0x00, 0x21, 0xf9, 0xf7, + 0x9c, 0xff, 0x10, 0xbd, 0x00, 0x30, 0x07, 0x00, + 0xa0, 0x7e, 0x01, 0x00, 0x09, 0x49, 0x10, 0xb5, + 0x08, 0x88, 0x01, 0x30, 0x08, 0x80, 0x01, 0x20, + 0x07, 0x49, 0x80, 0x02, 0x08, 0x60, 0x07, 0x4c, + 0xa2, 0x6d, 0x00, 0x2a, 0x3c, 0x00, 0xc8, 0x64, + 0x00, 0x00, 0x05, 0xd0, 0x05, 0x21, 0xd1, 0x20, + 0x0d, 0xf0, 0x6f, 0xf9, 0x01, 0x20, 0xa0, 0x65, + 0x10, 0xbd, 0xb0, 0x74, 0x01, 0x00, 0x00, 0x10, + 0x07, 0x00, 0x00, 0x30, 0x07, 0x00, 0xff, 0xb5, + 0x83, 0xb0, 0x0c, 0xae, 0x86, 0x46, 0x8c, 0x46, + 0x0e, 0x4a, 0x43, 0xce, 0x0f, 0xad, 0x0f, 0x1c, + 0x52, 0x68, 0x0c, 0x37, 0x30, 0xcd, 0x97, 0x70, + 0xd3, 0x70, 0x96, 0x63, 0x0d, 0x26, 0x3c, 0x00, + 0x04, 0x65, 0x00, 0x00, 0x40, 0x27, 0xbe, 0x52, + 0x05, 0x9e, 0x96, 0x61, 0x13, 0x84, 0x00, 0x22, + 0x02, 0x92, 0x2a, 0x1c, 0x00, 0x90, 0x01, 0x91, + 0x21, 0x1c, 0x60, 0x46, 0x73, 0x46, 0x00, 0xf0, + 0x29, 0xf8, 0x07, 0xb0, 0xf0, 0xbd, 0x00, 0x00, + 0xa0, 0x7e, 0x01, 0x00, 0xff, 0xb5, 0x10, 0x1c, + 0x1a, 0x1c, 0x0c, 0x1c, 0x19, 0x1c, 0x60, 0x23, + 0xff, 0x32, 0x13, 0x43, 0x0c, 0x4a, 0x83, 0xb0, + 0x3c, 0x00, 0x40, 0x65, 0x00, 0x00, 0x0c, 0xae, + 0x52, 0x68, 0x60, 0xce, 0x93, 0x70, 0x00, 0x23, + 0xd3, 0x70, 0x93, 0x63, 0x40, 0x27, 0xbb, 0x52, + 0x93, 0x61, 0x13, 0x84, 0x03, 0x22, 0x02, 0x92, + 0x01, 0x91, 0x29, 0x1c, 0x32, 0x1c, 0x00, 0x90, + 0x20, 0x1c, 0x03, 0x9b, 0x00, 0xf0, 0x05, 0xf8, + 0x07, 0xb0, 0xf0, 0xbd, 0x00, 0x00, 0xa0, 0x7e, + 0x01, 0x00, 0xf8, 0xb5, 0x05, 0x1c, 0x11, 0x48, + 0x1c, 0x1c, 0x3c, 0x00, 0x7c, 0x65, 0x00, 0x00, + 0x08, 0x9b, 0x07, 0x9f, 0x40, 0x68, 0xde, 0x00, + 0x81, 0x65, 0x02, 0x66, 0x00, 0x21, 0x81, 0x80, + 0x0d, 0x48, 0x81, 0x59, 0x20, 0x1c, 0xf9, 0xf7, + 0x22, 0xff, 0x0b, 0x48, 0x30, 0x18, 0x41, 0x68, + 0x28, 0x1c, 0xf9, 0xf7, 0x1c, 0xff, 0x07, 0x49, + 0x06, 0x98, 0x49, 0x68, 0x00, 0x2c, 0x88, 0x62, + 0x0f, 0x86, 0x00, 0xd1, 0x2c, 0x1c, 0x05, 0x48, + 0x4c, 0x62, 0x45, 0x65, 0x3c, 0x00, 0xb8, 0x65, + 0x00, 0x00, 0x01, 0x21, 0x01, 0x65, 0x01, 0x64, + 0xf8, 0xbd, 0xa0, 0x7e, 0x01, 0x00, 0x90, 0x52, + 0x01, 0x00, 0x00, 0x30, 0x07, 0x00, 0xff, 0xb5, + 0x83, 0xb0, 0x0d, 0xae, 0x60, 0xce, 0x0c, 0x9f, + 0x08, 0x1c, 0x11, 0x1c, 0xd2, 0x19, 0xff, 0x32, + 0x40, 0x24, 0x14, 0x43, 0x0b, 0x4a, 0x52, 0x68, + 0x94, 0x70, 0x00, 0x24, 0xd4, 0x70, 0x93, 0x63, + 0x40, 0x23, 0x9f, 0x52, 0x94, 0x61, 0x3c, 0x00, + 0xf4, 0x65, 0x00, 0x00, 0x14, 0x84, 0x02, 0x22, + 0x02, 0x92, 0x32, 0x1c, 0x00, 0x90, 0x01, 0x91, + 0x23, 0x1c, 0x29, 0x1c, 0x03, 0x98, 0xff, 0xf7, + 0xb5, 0xff, 0x07, 0xb0, 0xf0, 0xbd, 0x00, 0x00, + 0xa0, 0x7e, 0x01, 0x00, 0x4c, 0x21, 0x0d, 0x4a, + 0x41, 0x43, 0x10, 0xb5, 0x8c, 0x18, 0x0c, 0x49, + 0x09, 0x78, 0x88, 0x42, 0x07, 0xd1, 0x05, 0xf0, + 0xc7, 0xfd, 0x0a, 0x48, 0x01, 0x88, 0x01, 0x22, + 0x3c, 0x00, 0x30, 0x66, 0x00, 0x00, 0x12, 0x03, + 0x91, 0x43, 0x01, 0x80, 0x20, 0x1c, 0x30, 0x30, + 0x0c, 0x23, 0xc1, 0x56, 0x40, 0x7b, 0x81, 0x42, + 0x02, 0xdd, 0x20, 0x8d, 0x0c, 0xf0, 0xe5, 0xfb, + 0x10, 0xbd, 0x58, 0xe3, 0x01, 0x00, 0x3c, 0x7c, + 0x01, 0x00, 0x32, 0x80, 0x07, 0x00, 0x01, 0x1c, + 0x60, 0x31, 0x80, 0xb5, 0xca, 0x79, 0x8b, 0x79, + 0x9a, 0x42, 0x07, 0xd9, 0x48, 0x7a, 0x0c, 0x23, + 0x07, 0x49, 0x3c, 0x00, 0x6c, 0x66, 0x00, 0x00, + 0x58, 0x43, 0x08, 0x5a, 0x0c, 0xf0, 0xd0, 0xfb, + 0x80, 0xbd, 0x20, 0x30, 0x00, 0x7b, 0x01, 0x28, + 0xfa, 0xd1, 0x48, 0x7a, 0x05, 0xf0, 0x40, 0xfd, + 0x80, 0xbd, 0x00, 0x00, 0x60, 0x7b, 0x01, 0x00, + 0x10, 0xb5, 0x04, 0x1c, 0x1c, 0x21, 0xf9, 0xf7, + 0x03, 0xff, 0x03, 0x48, 0xa0, 0x80, 0xe0, 0x80, + 0x20, 0x81, 0x60, 0x81, 0xa0, 0x81, 0x10, 0xbd, + 0xff, 0xff, 0x00, 0x00, 0x3c, 0x00, 0xa8, 0x66, + 0x00, 0x00, 0xff, 0xb5, 0x04, 0x1c, 0x00, 0x20, + 0x83, 0xb0, 0x0d, 0x1c, 0x06, 0x2c, 0x02, 0x90, + 0x38, 0xd2, 0x1f, 0x4a, 0xff, 0x26, 0xc1, 0x00, + 0x89, 0x18, 0x89, 0x78, 0xa1, 0x42, 0x03, 0xd1, + 0xc0, 0x00, 0x80, 0x18, 0x46, 0x78, 0x04, 0xe0, + 0x01, 0x30, 0x00, 0x06, 0x00, 0x16, 0x06, 0x28, + 0xf1, 0xdb, 0xff, 0x2e, 0x24, 0xd0, 0x01, 0x93, + 0x20, 0x1c, 0x0d, 0xf0, 0xe8, 0xf9, 0x3c, 0x00, + 0xe4, 0x66, 0x00, 0x00, 0x00, 0x28, 0x05, 0xd0, + 0x24, 0x21, 0x28, 0x1c, 0x01, 0xab, 0x02, 0xaa, + 0xfa, 0xf7, 0x30, 0xfe, 0x10, 0x49, 0xf0, 0x00, + 0x30, 0x39, 0x0f, 0x58, 0x31, 0x06, 0x09, 0x16, + 0x28, 0x1c, 0x05, 0x9a, 0x01, 0x9b, 0xf9, 0xf7, + 0x6e, 0xfe, 0x06, 0x1c, 0x10, 0xd1, 0x20, 0x1c, + 0x0d, 0xf0, 0xd0, 0xf9, 0x00, 0x28, 0x0b, 0xd0, + 0x28, 0x1c, 0x69, 0x69, 0xfa, 0xf7, 0x12, 0xfe, + 0x3c, 0x00, 0x20, 0x67, 0x00, 0x00, 0x02, 0x98, + 0x68, 0x61, 0x04, 0xe0, 0x06, 0x2c, 0x01, 0xd3, + 0x07, 0x26, 0x00, 0xe0, 0x08, 0x26, 0x30, 0x1c, + 0x07, 0xb0, 0xf0, 0xbd, 0x00, 0x00, 0xcc, 0x5a, + 0x01, 0x00, 0x10, 0xb5, 0x0c, 0x1c, 0x09, 0xf0, + 0x86, 0xf8, 0x00, 0x28, 0x02, 0xd0, 0x20, 0x1c, + 0x09, 0xf0, 0xb5, 0xf8, 0x10, 0xbd, 0xfe, 0xb5, + 0x13, 0x4d, 0x04, 0x1c, 0xae, 0x69, 0x00, 0x2e, + 0x1c, 0xd0, 0x3c, 0x00, 0x5c, 0x67, 0x00, 0x00, + 0x10, 0x4f, 0x30, 0x37, 0x78, 0x68, 0x60, 0x43, + 0x01, 0x1c, 0x28, 0x88, 0xf9, 0xf7, 0xd2, 0xff, + 0x39, 0x68, 0x61, 0x43, 0x41, 0x18, 0x01, 0xa8, + 0x32, 0x1c, 0xf9, 0xf7, 0x37, 0xfe, 0x02, 0x98, + 0x29, 0x6a, 0x40, 0x18, 0x28, 0x62, 0x0b, 0xd4, + 0xe9, 0x69, 0x88, 0x42, 0x08, 0xd9, 0xa9, 0x69, + 0x40, 0x1a, 0x28, 0x62, 0x01, 0x98, 0x01, 0x30, + 0x01, 0xe0, 0x00, 0x20, 0x3c, 0x00, 0x98, 0x67, + 0x00, 0x00, 0x02, 0x90, 0x01, 0x90, 0x01, 0x98, + 0xfe, 0xbd, 0xc8, 0x74, 0x01, 0x00, 0xf8, 0xb5, + 0x00, 0x28, 0x28, 0xd0, 0x00, 0x24, 0x14, 0x4d, + 0x00, 0xe0, 0x01, 0x34, 0x61, 0x00, 0x09, 0x19, + 0x49, 0x19, 0x49, 0x78, 0x00, 0x29, 0xf8, 0xd1, + 0x63, 0x00, 0x1b, 0x19, 0x03, 0x33, 0x07, 0x22, + 0x69, 0x46, 0x03, 0xf0, 0xd4, 0xfb, 0x00, 0x2c, + 0x0f, 0xd0, 0x00, 0x20, 0x00, 0x99, 0x3c, 0x00, + 0xd4, 0x67, 0x00, 0x00, 0x0a, 0xe0, 0x42, 0x00, + 0x12, 0x18, 0xae, 0x5c, 0x53, 0x18, 0x52, 0x19, + 0x5e, 0x71, 0x56, 0x78, 0x01, 0x30, 0x9e, 0x71, + 0x92, 0x78, 0xda, 0x71, 0xa0, 0x42, 0xf2, 0xdb, + 0x00, 0x98, 0x03, 0x22, 0x02, 0x30, 0x03, 0x49, + 0xf9, 0xf7, 0x7e, 0xfe, 0xf8, 0xbd, 0x00, 0x00, + 0xeb, 0x62, 0x01, 0x00, 0xe8, 0x62, 0x01, 0x00, + 0xb0, 0xb5, 0x05, 0x1c, 0x08, 0x1c, 0xfa, 0xf7, + 0x3c, 0x00, 0x10, 0x68, 0x00, 0x00, 0x9d, 0xff, + 0x04, 0x1c, 0x28, 0x1c, 0xfa, 0xf7, 0xd9, 0xfe, + 0x21, 0x1c, 0xfa, 0xf7, 0xfc, 0xfd, 0x20, 0x1c, + 0xb0, 0xbd, 0xf3, 0xb5, 0x44, 0x48, 0x0c, 0x1c, + 0x00, 0x78, 0x81, 0xb0, 0x01, 0x28, 0x72, 0xd1, + 0xfa, 0xf7, 0x82, 0xf8, 0x41, 0x4d, 0xe8, 0x6a, + 0x41, 0x49, 0x08, 0x60, 0xe8, 0x6b, 0x48, 0x60, + 0x40, 0x48, 0xfa, 0xf7, 0xa6, 0xf9, 0xe8, 0x6a, + 0x00, 0x28, 0x3c, 0x00, 0x4c, 0x68, 0x00, 0x00, + 0xfc, 0xda, 0x22, 0x1c, 0x0f, 0x20, 0x01, 0x99, + 0x0a, 0xf0, 0xa4, 0xf8, 0x38, 0x4d, 0x02, 0x27, + 0x2f, 0x63, 0x38, 0x4a, 0x64, 0x26, 0x00, 0x20, + 0xaa, 0x21, 0x08, 0x32, 0x13, 0x18, 0x01, 0x30, + 0x00, 0x04, 0x00, 0x0c, 0x64, 0x28, 0x19, 0x74, + 0xf8, 0xd3, 0x16, 0x81, 0x00, 0x20, 0x50, 0x60, + 0x10, 0x1c, 0x10, 0x30, 0x10, 0x60, 0x00, 0x25, + 0x17, 0x1c, 0xd2, 0x60, 0x3c, 0x00, 0x88, 0x68, + 0x00, 0x00, 0x08, 0xe0, 0x28, 0x1c, 0xf9, 0xf7, + 0xa2, 0xff, 0x41, 0x31, 0x78, 0x19, 0x01, 0x35, + 0x2d, 0x04, 0x2d, 0x0c, 0x01, 0x74, 0xb5, 0x42, + 0xf4, 0xd3, 0x26, 0x4d, 0x6f, 0x63, 0x01, 0x20, + 0x28, 0x63, 0x24, 0x4d, 0xe8, 0x6a, 0x00, 0x28, + 0xfb, 0xda, 0x0b, 0x22, 0x3b, 0x1c, 0x24, 0x4e, + 0x03, 0xe0, 0x01, 0x32, 0x64, 0x2a, 0x00, 0xd1, + 0x00, 0x22, 0x10, 0x1c, 0x0c, 0x21, 0x3c, 0x00, + 0xc4, 0x68, 0x00, 0x00, 0x01, 0x39, 0x75, 0x5c, + 0x1f, 0x18, 0x3f, 0x7c, 0xbd, 0x42, 0xf3, 0xd1, + 0x01, 0x38, 0x00, 0xd5, 0x63, 0x20, 0x00, 0x29, + 0xf4, 0xd1, 0x18, 0x4e, 0x50, 0x1c, 0xf1, 0x6b, + 0x1a, 0x4a, 0x10, 0x1c, 0x01, 0x38, 0xfd, 0xd1, + 0xf0, 0x6b, 0x88, 0x42, 0x01, 0xd0, 0x01, 0x1c, + 0xf7, 0xe7, 0x02, 0x27, 0x37, 0x63, 0x16, 0x4d, + 0x90, 0x21, 0x28, 0x1c, 0xf9, 0xf7, 0xce, 0xfd, + 0x3c, 0x00, 0x00, 0x69, 0x00, 0x00, 0x28, 0x1c, + 0x28, 0x30, 0x28, 0x60, 0x28, 0x1c, 0x10, 0x30, + 0x2f, 0x81, 0xe8, 0x60, 0x28, 0x1c, 0x20, 0x30, + 0x28, 0x61, 0x04, 0x21, 0x00, 0xe0, 0x0c, 0xe0, + 0x29, 0x83, 0xe8, 0x61, 0xed, 0x62, 0x75, 0x63, + 0x01, 0x20, 0x30, 0x63, 0x22, 0x1c, 0x89, 0x20, + 0x01, 0x99, 0x0a, 0xf0, 0x38, 0xf8, 0x00, 0x20, + 0x28, 0x63, 0xfe, 0xbd, 0x00, 0x00, 0x08, 0x57, + 0x01, 0x00, 0x3c, 0x00, 0x3c, 0x69, 0x00, 0x00, + 0x00, 0x30, 0x07, 0x00, 0x10, 0x8e, 0x01, 0x00, + 0x74, 0xff, 0x01, 0x00, 0x09, 0x57, 0x01, 0x00, + 0x20, 0x4e, 0x00, 0x00, 0xe4, 0xfe, 0x01, 0x00, + 0x80, 0xb5, 0x13, 0x28, 0x1e, 0xd0, 0xf0, 0x28, + 0x16, 0xd1, 0x09, 0xf0, 0xb5, 0xf9, 0x00, 0x28, + 0x13, 0xd1, 0x0d, 0xf0, 0xbf, 0xfa, 0x11, 0xf0, + 0x0d, 0xfc, 0x00, 0x22, 0x04, 0x21, 0xc4, 0x20, + 0x0c, 0xf0, 0x1c, 0xff, 0x3c, 0x00, 0x78, 0x69, + 0x00, 0x00, 0x09, 0x48, 0x00, 0x21, 0x00, 0x78, + 0x05, 0xf0, 0x3f, 0xfd, 0x05, 0xf0, 0x93, 0xf8, + 0x07, 0x49, 0x01, 0x20, 0x08, 0x60, 0x80, 0xbd, + 0x01, 0x1c, 0x01, 0x20, 0xfa, 0xf7, 0x87, 0xfc, + 0x80, 0xbd, 0x00, 0xf0, 0x32, 0xf8, 0x80, 0xbd, + 0x00, 0x00, 0x6a, 0x57, 0x01, 0x00, 0x3c, 0xd9, + 0x01, 0x00, 0xb0, 0xb5, 0x0c, 0xf0, 0xff, 0xf9, + 0x0b, 0x49, 0x02, 0x24, 0x48, 0x60, 0x3c, 0x00, + 0xb4, 0x69, 0x00, 0x00, 0x0a, 0x48, 0x04, 0x61, + 0x01, 0x20, 0x77, 0x21, 0x09, 0x03, 0x08, 0x61, + 0x08, 0x4d, 0x68, 0x68, 0x80, 0x07, 0x02, 0xd4, + 0x68, 0x68, 0x20, 0x43, 0x68, 0x60, 0x09, 0xf0, + 0xc7, 0xf9, 0x68, 0x68, 0xa0, 0x43, 0x68, 0x60, + 0x00, 0x20, 0xb0, 0xbd, 0xe0, 0x60, 0x01, 0x00, + 0x00, 0x30, 0x07, 0x00, 0x00, 0x01, 0x07, 0x00, + 0x80, 0xb5, 0x01, 0x23, 0x03, 0x22, 0x00, 0x21, + 0x3c, 0x00, 0xf0, 0x69, 0x00, 0x00, 0x02, 0x20, + 0x3c, 0xf0, 0xf1, 0xfa, 0x00, 0x28, 0x01, 0xd0, + 0xfa, 0xf7, 0x81, 0xfc, 0x80, 0xbd, 0x1c, 0xb5, + 0xfc, 0xf7, 0xf5, 0xfa, 0xfa, 0xf7, 0x19, 0xfe, + 0x01, 0xf0, 0x03, 0xf9, 0x00, 0x24, 0x21, 0x1c, + 0x68, 0x46, 0x01, 0xf0, 0xe2, 0xfb, 0x00, 0xab, + 0x18, 0x78, 0x01, 0x28, 0x03, 0xd0, 0x02, 0x28, + 0x01, 0xd0, 0x03, 0x28, 0x01, 0xd1, 0x0c, 0xf0, + 0xb2, 0xfc, 0x3c, 0x00, 0x2c, 0x6a, 0x00, 0x00, + 0x01, 0x34, 0x24, 0x06, 0x24, 0x16, 0x06, 0x2c, + 0xec, 0xdb, 0xfa, 0xf7, 0x09, 0xf9, 0xfa, 0xf7, + 0xe7, 0xfc, 0xfa, 0xf7, 0x33, 0xfa, 0xfa, 0xf7, + 0x6d, 0xfa, 0xfb, 0xf7, 0xdf, 0xff, 0x05, 0xf0, + 0x4d, 0xfb, 0x06, 0xf0, 0x81, 0xfc, 0x0b, 0xf0, + 0x7d, 0xf9, 0x07, 0xf0, 0x29, 0xfc, 0x11, 0x48, + 0x10, 0x21, 0x01, 0x60, 0x09, 0x01, 0x01, 0x60, + 0xc9, 0x02, 0x01, 0x60, 0x3c, 0x00, 0x68, 0x6a, + 0x00, 0x00, 0x89, 0x00, 0x01, 0x60, 0x20, 0x21, + 0x01, 0x60, 0x04, 0x21, 0x01, 0x60, 0x08, 0x21, + 0x01, 0x60, 0x40, 0x21, 0x01, 0x60, 0x80, 0x21, + 0x01, 0x60, 0x89, 0x00, 0x01, 0x60, 0x49, 0x00, + 0x01, 0x60, 0x49, 0x00, 0x01, 0x60, 0x49, 0x00, + 0x01, 0x60, 0xc9, 0x03, 0x01, 0x60, 0x89, 0x0b, + 0x01, 0x60, 0xf9, 0xf7, 0x41, 0xff, 0x1c, 0xbd, + 0x00, 0x00, 0x00, 0x10, 0x07, 0x00, 0x3c, 0x00, + 0xa4, 0x6a, 0x00, 0x00, 0x80, 0xb5, 0x3b, 0xf0, + 0x4f, 0xf8, 0x3b, 0xf0, 0x7d, 0xf9, 0xfa, 0xf7, + 0x4b, 0xf9, 0x80, 0xbd, 0xf8, 0xb5, 0x00, 0x25, + 0x00, 0x24, 0x00, 0x22, 0x00, 0x28, 0x71, 0xd0, + 0x43, 0x4f, 0xb9, 0x68, 0x0b, 0x1a, 0xbb, 0x60, + 0xf8, 0x68, 0x39, 0x1c, 0x01, 0x30, 0xf8, 0x60, + 0x89, 0x6a, 0x00, 0x2b, 0x1e, 0xdc, 0x02, 0x24, + 0x00, 0x29, 0x06, 0xda, 0xfb, 0x69, 0x98, 0x42, + 0x3c, 0x00, 0xe0, 0x6a, 0x00, 0x00, 0x06, 0xdd, + 0x3b, 0x69, 0x98, 0x42, 0x09, 0xdd, 0x07, 0xe0, + 0xbb, 0x69, 0x98, 0x42, 0x01, 0xdc, 0x01, 0x24, + 0x03, 0xe0, 0x7b, 0x69, 0x98, 0x42, 0x00, 0xdd, + 0x03, 0x24, 0x78, 0x6a, 0x00, 0x28, 0x08, 0xd0, + 0x00, 0x20, 0x78, 0x62, 0x03, 0x2c, 0x01, 0xd1, + 0x02, 0x24, 0x02, 0xe0, 0x02, 0x2c, 0x00, 0xd1, + 0x01, 0x24, 0x2e, 0x48, 0x01, 0x2c, 0x00, 0x79, + 0x18, 0xd1, 0x3c, 0x00, 0x1c, 0x6b, 0x00, 0x00, + 0xbb, 0x78, 0x99, 0x42, 0x15, 0xda, 0x3b, 0x78, + 0x7b, 0x70, 0x39, 0x70, 0x01, 0x31, 0xb9, 0x62, + 0x01, 0xd5, 0x01, 0x31, 0xb9, 0x62, 0xb9, 0x6a, + 0x01, 0x25, 0x99, 0x42, 0x03, 0xd1, 0x04, 0x28, + 0x04, 0xd2, 0x01, 0x30, 0x00, 0xe0, 0x00, 0x20, + 0x38, 0x71, 0x01, 0x22, 0x00, 0x29, 0x33, 0xda, + 0x27, 0xe0, 0x03, 0x2c, 0x35, 0xd1, 0x00, 0x26, + 0x00, 0x28, 0x07, 0xd0, 0x3c, 0x00, 0x58, 0x6b, + 0x00, 0x00, 0x1e, 0x49, 0x81, 0x40, 0x38, 0x6a, + 0x08, 0x18, 0x0c, 0xf0, 0x5c, 0xf8, 0x00, 0x28, + 0x2c, 0xd0, 0x1b, 0x48, 0x00, 0x78, 0x40, 0x07, + 0x05, 0xd5, 0xf8, 0x68, 0x39, 0x69, 0x88, 0x42, + 0x01, 0xdb, 0x03, 0x23, 0xfe, 0x56, 0xb8, 0x6a, + 0xb0, 0x42, 0x12, 0xdd, 0x01, 0x21, 0x79, 0x62, + 0x39, 0x78, 0x01, 0x25, 0x79, 0x70, 0x38, 0x70, + 0x01, 0x38, 0xb8, 0x62, 0x88, 0x42, 0x3c, 0x00, + 0x94, 0x6b, 0x00, 0x00, 0x01, 0xd0, 0x00, 0x21, + 0x39, 0x71, 0x00, 0x28, 0x0c, 0xda, 0x07, 0x20, + 0x38, 0x71, 0x00, 0xe0, 0x12, 0xe0, 0x07, 0xe0, + 0x38, 0x79, 0x00, 0x28, 0x09, 0xd0, 0xff, 0x30, + 0x38, 0x71, 0x06, 0xe0, 0x00, 0x2a, 0x02, 0xd0, + 0x0c, 0xf0, 0xf8, 0xf8, 0x38, 0x62, 0x00, 0x2c, + 0x04, 0xd0, 0xfe, 0xf7, 0x97, 0xfd, 0x29, 0x1c, + 0x08, 0xf0, 0xfc, 0xfb, 0xf8, 0xbd, 0x00, 0x00, + 0x3c, 0x00, 0xd0, 0x6b, 0x00, 0x00, 0xac, 0x7e, + 0x01, 0x00, 0x50, 0xc3, 0x00, 0x00, 0x1d, 0x75, + 0x01, 0x00, 0x80, 0xb5, 0x10, 0x68, 0x00, 0x28, + 0x02, 0xd0, 0x00, 0xf0, 0x0a, 0xf8, 0x80, 0xbd, + 0x03, 0x48, 0xc0, 0x69, 0x80, 0x68, 0x08, 0xf0, + 0xb2, 0xf9, 0x80, 0xbd, 0x00, 0x00, 0x84, 0x6a, + 0x01, 0x00, 0x10, 0xb5, 0x04, 0x1c, 0xc0, 0x68, + 0xc0, 0x68, 0x00, 0x28, 0x01, 0xd1, 0xfa, 0xf7, + 0x7a, 0xfb, 0x3c, 0x00, 0x0c, 0x6c, 0x00, 0x00, + 0xe0, 0x68, 0xe1, 0x69, 0xc0, 0x68, 0x23, 0x1c, + 0x01, 0x4a, 0xff, 0xf7, 0xd7, 0xfb, 0x10, 0xbd, + 0xdd, 0x6b, 0x00, 0x00, 0xb0, 0xb5, 0x05, 0x1c, + 0x0c, 0x21, 0x00, 0x20, 0xfa, 0xf7, 0xd6, 0xfc, + 0x04, 0x1c, 0x00, 0x68, 0x00, 0x21, 0x41, 0x60, + 0x01, 0x60, 0x29, 0x88, 0x01, 0x81, 0x69, 0x88, + 0x41, 0x81, 0x29, 0x1c, 0xff, 0x31, 0x21, 0x31, + 0x20, 0x1c, 0x03, 0xf0, 0x3c, 0x00, 0x48, 0x6c, + 0x00, 0x00, 0x77, 0xf9, 0x29, 0x1c, 0xff, 0x31, + 0x46, 0x31, 0x20, 0x1c, 0x03, 0xf0, 0x71, 0xf9, + 0x29, 0x1c, 0xff, 0x31, 0x50, 0x31, 0x20, 0x1c, + 0x03, 0xf0, 0x6b, 0xf9, 0x29, 0x1c, 0xff, 0x31, + 0x43, 0x31, 0x20, 0x1c, 0x03, 0xf0, 0x65, 0xf9, + 0x29, 0x1c, 0xff, 0x31, 0x63, 0x31, 0x20, 0x1c, + 0x03, 0xf0, 0x5f, 0xf9, 0x04, 0x48, 0x00, 0x68, + 0x00, 0x28, 0x02, 0xd0, 0x20, 0x1c, 0x3c, 0x00, + 0x84, 0x6c, 0x00, 0x00, 0xff, 0xf7, 0x8e, 0xfd, + 0x20, 0x1c, 0xb0, 0xbd, 0xe4, 0x62, 0x01, 0x00, + 0xf8, 0xb5, 0x05, 0x1c, 0x0c, 0x1c, 0x04, 0xd1, + 0x05, 0x21, 0x18, 0x20, 0xfa, 0xf7, 0x02, 0xfb, + 0x4d, 0xe0, 0x29, 0x1c, 0x12, 0x31, 0x06, 0x22, + 0x60, 0x1c, 0xf9, 0xf7, 0x25, 0xfc, 0x22, 0x1c, + 0x30, 0x32, 0x00, 0x26, 0x00, 0x21, 0x00, 0x20, + 0x16, 0x70, 0x34, 0x4b, 0x1b, 0x5c, 0x2f, 0x8a, + 0x3c, 0x00, 0xc0, 0x6c, 0x00, 0x00, 0xdf, 0x40, + 0xff, 0x07, 0x07, 0xd5, 0x17, 0x78, 0x01, 0x33, + 0x01, 0x37, 0x17, 0x70, 0x67, 0x18, 0x30, 0x37, + 0x7b, 0x70, 0x01, 0x31, 0x01, 0x30, 0x0e, 0x28, + 0xee, 0xdb, 0xa8, 0x7b, 0x60, 0x72, 0x10, 0x78, + 0x00, 0x28, 0x2b, 0xd0, 0x2a, 0x48, 0x1e, 0x21, + 0x09, 0x5c, 0x27, 0x1c, 0x10, 0x37, 0x21, 0x72, + 0x01, 0x68, 0x61, 0x81, 0xc1, 0x89, 0x21, 0x77, + 0x81, 0x89, 0x3c, 0x00, 0xfc, 0x6c, 0x00, 0x00, + 0x79, 0x73, 0xc1, 0x8a, 0xa1, 0x81, 0x01, 0x8b, + 0xe1, 0x81, 0x42, 0x8a, 0x21, 0x1c, 0x60, 0x31, + 0x4a, 0x80, 0x82, 0x8a, 0x8a, 0x80, 0x1f, 0x49, + 0x2c, 0x31, 0x09, 0x7a, 0x00, 0x29, 0x09, 0xd0, + 0x02, 0x29, 0x0a, 0xd1, 0x01, 0x22, 0x62, 0x62, + 0x62, 0x72, 0x42, 0x8b, 0xa2, 0x81, 0x80, 0x8b, + 0xe0, 0x81, 0x03, 0xe0, 0x01, 0x21, 0x66, 0x62, + 0x00, 0xe0, 0x00, 0x21, 0x3c, 0x00, 0x38, 0x6d, + 0x00, 0x00, 0xe8, 0x7b, 0x08, 0x40, 0x01, 0xd1, + 0x00, 0x20, 0xf8, 0xbd, 0xa8, 0x68, 0x43, 0x1c, + 0x09, 0xd0, 0x22, 0x1c, 0x12, 0x32, 0x00, 0x92, + 0x93, 0x1d, 0x02, 0x32, 0x21, 0x1c, 0x01, 0xf0, + 0x9c, 0xfa, 0xa0, 0x62, 0x00, 0xe0, 0xa6, 0x62, + 0x68, 0x7b, 0x29, 0x1c, 0x1d, 0x31, 0x20, 0x74, + 0x0b, 0x48, 0x20, 0x22, 0x20, 0x62, 0x20, 0x1c, + 0x42, 0x30, 0xbe, 0x73, 0xf9, 0xf7, 0x3c, 0x00, + 0x74, 0x6d, 0x00, 0x00, 0xc1, 0xfb, 0x40, 0x34, + 0x26, 0x70, 0x68, 0x7e, 0x04, 0x49, 0x60, 0x70, + 0x68, 0x68, 0x2c, 0x31, 0x48, 0x60, 0x01, 0x20, + 0xda, 0xe7, 0x00, 0x00, 0x90, 0x58, 0x01, 0x00, + 0xc8, 0x6e, 0x01, 0x00, 0x91, 0x02, 0x01, 0x00, + 0x70, 0xb5, 0x16, 0x1c, 0x0d, 0x1c, 0x04, 0x1c, + 0x00, 0x28, 0x06, 0xd0, 0x0c, 0x20, 0xfa, 0xf7, + 0x47, 0xfd, 0x30, 0xc0, 0x08, 0x38, 0x06, 0x72, + 0x3c, 0x00, 0xb0, 0x6d, 0x00, 0x00, 0x70, 0xbd, + 0x00, 0x20, 0x70, 0xbd, 0x00, 0x00, 0x01, 0x1c, + 0x05, 0x48, 0x80, 0xb5, 0x00, 0x68, 0x01, 0xd0, + 0x01, 0x21, 0x00, 0xe0, 0x00, 0x21, 0xfc, 0xf7, + 0xa0, 0xfc, 0x80, 0xbd, 0x00, 0x00, 0x0c, 0x79, + 0x01, 0x00, 0x70, 0xb5, 0x0e, 0x1c, 0x04, 0x1c, + 0x00, 0x28, 0x01, 0xd1, 0xfa, 0xf7, 0x8f, 0xfa, + 0x06, 0x4d, 0x28, 0x68, 0x00, 0x28, 0x01, 0xd0, + 0xfa, 0xf7, 0x3c, 0x00, 0xec, 0x6d, 0x00, 0x00, + 0x89, 0xfa, 0x04, 0x48, 0x2e, 0x60, 0xc4, 0x60, + 0x01, 0x21, 0x01, 0x70, 0x70, 0xbd, 0x00, 0x00, + 0xa8, 0x7e, 0x01, 0x00, 0x30, 0x00, 0x07, 0x00, + 0x10, 0xb5, 0x07, 0x4c, 0x20, 0x68, 0x00, 0x28, + 0x01, 0xd1, 0xfa, 0xf7, 0x77, 0xfa, 0x05, 0x48, + 0x00, 0x69, 0x21, 0x68, 0xf9, 0xf7, 0xdf, 0xfa, + 0x00, 0x20, 0x20, 0x60, 0x10, 0xbd, 0x00, 0x00, + 0xa8, 0x7e, 0x01, 0x00, 0x3c, 0x00, 0x28, 0x6e, + 0x00, 0x00, 0x30, 0x00, 0x07, 0x00, 0x01, 0x20, + 0x05, 0x49, 0xc0, 0x06, 0x80, 0xb5, 0x08, 0x60, + 0x00, 0x22, 0x03, 0x21, 0x54, 0x20, 0x0c, 0xf0, + 0xb8, 0xfc, 0x80, 0xbd, 0x00, 0x00, 0x00, 0x10, + 0x07, 0x00, 0x80, 0xb5, 0x00, 0x22, 0x04, 0x21, + 0xc4, 0x20, 0x0c, 0xf0, 0xae, 0xfc, 0x80, 0xbd, + 0x00, 0x00, 0x04, 0x48, 0x80, 0xb5, 0x00, 0x88, + 0x02, 0x49, 0xff, 0xf7, 0xb8, 0xff, 0x3c, 0x00, + 0x64, 0x6e, 0x00, 0x00, 0x80, 0xbd, 0x00, 0x00, + 0x75, 0x4b, 0x00, 0x00, 0xc8, 0x74, 0x01, 0x00, + 0xf8, 0xb5, 0x06, 0x1c, 0x31, 0x48, 0x00, 0x25, + 0xc0, 0x68, 0x0c, 0x1c, 0x00, 0x28, 0x30, 0xd0, + 0x2e, 0x48, 0x2f, 0x4f, 0x04, 0x30, 0x00, 0x78, + 0x38, 0x76, 0x2c, 0x48, 0x04, 0x30, 0x40, 0x78, + 0x38, 0x81, 0x00, 0x2a, 0x0b, 0xd0, 0xf9, 0xf7, + 0xa5, 0xfa, 0x1f, 0x20, 0xb8, 0x76, 0x20, 0x1c, + 0x3c, 0x00, 0xa0, 0x6e, 0x00, 0x00, 0xf9, 0xf7, + 0xf6, 0xf9, 0x25, 0x48, 0x04, 0x30, 0x80, 0x78, + 0xb8, 0x76, 0x43, 0xe0, 0x25, 0x48, 0x22, 0x49, + 0x84, 0x42, 0x4d, 0x69, 0x02, 0xd2, 0x6c, 0x43, + 0xe4, 0x0b, 0x0f, 0xe0, 0x1f, 0x48, 0x21, 0x1c, + 0x80, 0x6a, 0x00, 0x90, 0xf9, 0xf7, 0x23, 0xfc, + 0x00, 0x99, 0x02, 0x1c, 0x4a, 0x43, 0xa1, 0x1a, + 0x1a, 0x4a, 0x69, 0x43, 0x52, 0x6a, 0xc9, 0x0b, + 0x50, 0x43, 0x3c, 0x00, 0xdc, 0x6e, 0x00, 0x00, + 0x44, 0x18, 0x02, 0x2c, 0x01, 0xd8, 0x00, 0x20, + 0xf8, 0xbd, 0xf9, 0xf7, 0x7d, 0xfa, 0x1f, 0x20, + 0xb8, 0x76, 0x20, 0x1c, 0xf9, 0xf7, 0xae, 0xf9, + 0x04, 0x1c, 0x11, 0x48, 0x04, 0x30, 0x80, 0x78, + 0xb8, 0x76, 0x0f, 0x4f, 0x7d, 0x6a, 0xac, 0x42, + 0x04, 0xd2, 0x20, 0x1c, 0xff, 0xf7, 0x22, 0xfc, + 0x05, 0x1c, 0x12, 0xe0, 0x21, 0x1c, 0x28, 0x1c, + 0xf9, 0xf7, 0xfc, 0xfb, 0x3c, 0x00, 0x18, 0x6f, + 0x00, 0x00, 0x06, 0x1c, 0x68, 0x43, 0x20, 0x1a, + 0xff, 0xf7, 0x17, 0xfc, 0x05, 0x1c, 0x00, 0x24, + 0x04, 0xe0, 0x78, 0x6a, 0xff, 0xf7, 0x11, 0xfc, + 0x45, 0x19, 0x01, 0x34, 0xb4, 0x42, 0xf8, 0xd3, + 0x28, 0x1c, 0xd4, 0xe7, 0x00, 0x00, 0xc8, 0x74, + 0x01, 0x00, 0x30, 0x00, 0x07, 0x00, 0xc0, 0xc6, + 0x2d, 0x00, 0x01, 0x1c, 0x7d, 0x20, 0x80, 0xb5, + 0xc0, 0x00, 0xf9, 0xf7, 0x72, 0xfb, 0x3c, 0x00, + 0x54, 0x6f, 0x00, 0x00, 0x02, 0x49, 0x88, 0x61, + 0x40, 0x08, 0xc8, 0x61, 0x80, 0xbd, 0x00, 0x00, + 0xc8, 0x74, 0x01, 0x00, 0x10, 0xb5, 0x06, 0x4c, + 0x21, 0x1c, 0x00, 0x20, 0x0b, 0xf0, 0x42, 0xfa, + 0x21, 0x1c, 0x00, 0x20, 0x0b, 0xf0, 0x0a, 0xfa, + 0x00, 0xf0, 0x68, 0xfe, 0x10, 0xbd, 0x00, 0x00, + 0x85, 0x6f, 0x00, 0x00, 0x30, 0xb5, 0x0f, 0x4d, + 0x2a, 0x78, 0x04, 0x2a, 0x19, 0xd8, 0x00, 0x2a, + 0x3c, 0x00, 0x90, 0x6f, 0x00, 0x00, 0x17, 0xd0, + 0x00, 0x21, 0x07, 0xe0, 0x4b, 0x00, 0x5b, 0x18, + 0x5c, 0x19, 0x01, 0x23, 0xe4, 0x56, 0x84, 0x42, + 0x02, 0xda, 0x01, 0x31, 0x8a, 0x42, 0xf5, 0xdc, + 0x8a, 0x42, 0x00, 0xd1, 0x01, 0x39, 0x48, 0x00, + 0x40, 0x18, 0x40, 0x19, 0x81, 0x78, 0x02, 0x4a, + 0x34, 0x3a, 0x11, 0x70, 0xc0, 0x78, 0x50, 0x70, + 0x30, 0xbd, 0x00, 0x75, 0x01, 0x00, 0x30, 0xb5, + 0x11, 0x1c, 0x3c, 0x00, 0xcc, 0x6f, 0x00, 0x00, + 0x38, 0x31, 0x85, 0xb0, 0x91, 0x62, 0x08, 0x21, + 0x11, 0x86, 0x00, 0x23, 0x14, 0x1c, 0x01, 0x1c, + 0x53, 0x63, 0xc0, 0x68, 0x15, 0x4d, 0x0b, 0xe0, + 0x02, 0x68, 0xaa, 0x42, 0x06, 0xd1, 0xc2, 0x68, + 0xca, 0x60, 0xc3, 0x60, 0x03, 0x60, 0xfa, 0xf7, + 0xd1, 0xfa, 0x03, 0xe0, 0x01, 0x1c, 0xc0, 0x68, + 0x00, 0x28, 0xf1, 0xd1, 0x22, 0x1c, 0x40, 0x32, + 0x08, 0x21, 0x20, 0x68, 0x3c, 0x00, 0x08, 0x70, + 0x00, 0x00, 0xfa, 0xf7, 0x64, 0xfb, 0x0b, 0x49, + 0x20, 0x1c, 0x48, 0x30, 0x02, 0x90, 0x04, 0x94, + 0x03, 0x91, 0xe0, 0x69, 0x82, 0x88, 0x01, 0x68, + 0x6e, 0x20, 0x01, 0x92, 0x00, 0x91, 0x22, 0x1c, + 0x56, 0x32, 0x03, 0x5d, 0x21, 0x1c, 0x28, 0x31, + 0x20, 0x68, 0xff, 0xf7, 0x58, 0xfa, 0x05, 0xb0, + 0x30, 0xbd, 0xa0, 0x7e, 0x01, 0x00, 0xd5, 0x70, + 0x00, 0x00, 0x1c, 0xb5, 0x07, 0x49, 0x3c, 0x00, + 0x44, 0x70, 0x00, 0x00, 0x02, 0x1c, 0x01, 0x90, + 0x00, 0x91, 0xc0, 0x69, 0x13, 0x1c, 0x84, 0x88, + 0x01, 0x68, 0x10, 0x68, 0x48, 0x33, 0x22, 0x1c, + 0xff, 0xf7, 0x08, 0xf9, 0x1c, 0xbd, 0x00, 0x00, + 0xc9, 0x6f, 0x00, 0x00, 0x10, 0xb5, 0x14, 0x1c, + 0x18, 0x48, 0x03, 0xf0, 0x89, 0xf8, 0xa0, 0x42, + 0x01, 0xd0, 0xfa, 0xf7, 0x45, 0xf9, 0x04, 0x22, + 0x20, 0x1c, 0x40, 0x30, 0xa1, 0x6a, 0xf9, 0xf7, + 0x3c, 0x00, 0x80, 0x70, 0x00, 0x00, 0xbd, 0xf9, + 0x00, 0x28, 0x02, 0xd1, 0x01, 0x20, 0x20, 0x62, + 0x05, 0xe0, 0x00, 0x20, 0x20, 0x62, 0x84, 0x20, + 0x00, 0x5d, 0x00, 0x28, 0x03, 0xd1, 0x20, 0x1c, + 0x09, 0xf0, 0x23, 0xfb, 0x05, 0xe0, 0x20, 0x68, + 0xfa, 0xf7, 0x79, 0xfa, 0x20, 0x1c, 0xfa, 0xf7, + 0xa4, 0xfb, 0xe0, 0x69, 0x80, 0x79, 0x06, 0x28, + 0x06, 0xd1, 0x20, 0x6a, 0x06, 0x49, 0x00, 0x28, + 0x03, 0xd0, 0x3c, 0x00, 0xbc, 0x70, 0x00, 0x00, + 0x08, 0x69, 0x01, 0x30, 0x08, 0x61, 0x10, 0xbd, + 0x48, 0x69, 0x01, 0x30, 0x48, 0x61, 0x10, 0xbd, + 0xa0, 0x6a, 0x01, 0x00, 0x28, 0x61, 0x01, 0x00, + 0x1c, 0xb5, 0x14, 0x1c, 0x15, 0x48, 0x03, 0xf0, + 0x51, 0xf8, 0xa0, 0x42, 0x01, 0xd0, 0xfa, 0xf7, + 0x0d, 0xf9, 0x20, 0x1c, 0x4f, 0x30, 0x02, 0x79, + 0x41, 0x79, 0x00, 0xab, 0x12, 0x02, 0x11, 0x43, + 0xc2, 0x78, 0x12, 0x04, 0x3c, 0x00, 0xf8, 0x70, + 0x00, 0x00, 0x11, 0x43, 0x82, 0x78, 0x12, 0x06, + 0x11, 0x43, 0x00, 0x91, 0x01, 0x78, 0x40, 0x78, + 0x09, 0x02, 0x08, 0x43, 0x98, 0x80, 0x20, 0x1c, + 0x69, 0x46, 0x06, 0xf0, 0x3c, 0xf9, 0x00, 0x28, + 0x03, 0xd1, 0x20, 0x1c, 0x09, 0xf0, 0xe3, 0xfa, + 0x1c, 0xbd, 0x20, 0x68, 0xfa, 0xf7, 0x39, 0xfa, + 0x20, 0x1c, 0xfa, 0xf7, 0x64, 0xfb, 0xf7, 0xe7, + 0x00, 0x00, 0xa0, 0x6a, 0x01, 0x00, 0x3c, 0x00, + 0x34, 0x71, 0x00, 0x00, 0xbc, 0xb5, 0x1f, 0x4d, + 0x14, 0x1c, 0x28, 0x1c, 0xdc, 0x30, 0x03, 0xf0, + 0x1f, 0xf8, 0xa0, 0x42, 0x01, 0xd0, 0xfa, 0xf7, + 0xdb, 0xf8, 0xa0, 0x6c, 0x00, 0xab, 0x02, 0x78, + 0x81, 0x78, 0x12, 0x02, 0x11, 0x43, 0x02, 0x79, + 0x12, 0x04, 0x11, 0x43, 0x42, 0x79, 0x12, 0x06, + 0x11, 0x43, 0x00, 0x91, 0x81, 0x79, 0xc0, 0x79, + 0x00, 0x02, 0x08, 0x43, 0x98, 0x80, 0x20, 0x1c, + 0x3c, 0x00, 0x70, 0x71, 0x00, 0x00, 0x69, 0x46, + 0x06, 0xf0, 0x0b, 0xf9, 0x00, 0x28, 0x17, 0xd0, + 0x01, 0x28, 0x0e, 0xd1, 0xed, 0x6c, 0x00, 0x2d, + 0x0b, 0xd0, 0x80, 0x20, 0x02, 0x5d, 0xe0, 0x6c, + 0x01, 0x21, 0x00, 0x28, 0x00, 0xd1, 0x00, 0x21, + 0x60, 0x68, 0x6b, 0x46, 0x0a, 0x30, 0xf9, 0xf7, + 0x23, 0xf9, 0x20, 0x68, 0xfa, 0xf7, 0xfb, 0xf9, + 0x20, 0x1c, 0xfa, 0xf7, 0x26, 0xfb, 0xbc, 0xbd, + 0x20, 0x1c, 0x3c, 0x00, 0xac, 0x71, 0x00, 0x00, + 0x00, 0xf0, 0x8e, 0xfe, 0xfa, 0xe7, 0x00, 0x00, + 0xc4, 0x69, 0x01, 0x00, 0xbc, 0xb5, 0x04, 0x1c, + 0x40, 0x6a, 0x00, 0x25, 0x00, 0x28, 0x03, 0xd0, + 0x60, 0x68, 0x00, 0x8b, 0x05, 0x07, 0x2d, 0x0f, + 0x22, 0x1c, 0x40, 0x32, 0x08, 0x21, 0x20, 0x68, + 0xfa, 0xf7, 0x7e, 0xfa, 0xa1, 0x68, 0x01, 0x95, + 0x00, 0x91, 0x21, 0x1c, 0x22, 0x1c, 0x60, 0x32, + 0x20, 0x68, 0x50, 0x31, 0x3c, 0x00, 0xe8, 0x71, + 0x00, 0x00, 0x0d, 0x1c, 0xe3, 0x68, 0x09, 0xf0, + 0xe2, 0xff, 0xe0, 0x69, 0x80, 0x6b, 0x00, 0x28, + 0x03, 0xd1, 0xfe, 0xf7, 0xe8, 0xfa, 0x00, 0x28, + 0x01, 0xd0, 0x18, 0x20, 0x00, 0xe0, 0x10, 0x20, + 0x06, 0x49, 0x01, 0x94, 0x00, 0x91, 0xe1, 0x69, + 0x08, 0x23, 0x09, 0x68, 0x0a, 0x18, 0x21, 0x1c, + 0x28, 0x31, 0x28, 0x1c, 0xff, 0xf7, 0x87, 0xf9, + 0xbc, 0xbd, 0x35, 0x71, 0x00, 0x00, 0x3c, 0x00, + 0x24, 0x72, 0x00, 0x00, 0x10, 0xb5, 0x10, 0x1c, + 0x38, 0x30, 0x90, 0x62, 0x04, 0x20, 0x10, 0x86, + 0x00, 0x20, 0x50, 0x63, 0x10, 0x68, 0x14, 0x1c, + 0x40, 0x32, 0x04, 0x21, 0xfa, 0xf7, 0x4a, 0xfa, + 0x23, 0x1c, 0x21, 0x1c, 0x28, 0x31, 0x02, 0x4a, + 0x20, 0x68, 0xff, 0xf7, 0xbd, 0xf8, 0x10, 0xbd, + 0x65, 0x70, 0x00, 0x00, 0x0e, 0xb5, 0xc3, 0x69, + 0x02, 0x1c, 0x98, 0x88, 0x05, 0x49, 0x02, 0x92, + 0x3c, 0x00, 0x60, 0x72, 0x00, 0x00, 0x01, 0x91, + 0x00, 0x90, 0x1b, 0x68, 0x10, 0x68, 0x91, 0x69, + 0x03, 0x22, 0xff, 0xf7, 0xae, 0xf9, 0x0e, 0xbd, + 0x00, 0x00, 0x25, 0x72, 0x00, 0x00, 0x0e, 0xb5, + 0x02, 0x1c, 0x06, 0x49, 0x10, 0x20, 0x00, 0x90, + 0x02, 0x92, 0x13, 0x1c, 0x01, 0x91, 0x10, 0x68, + 0x00, 0x22, 0x70, 0x33, 0x00, 0x21, 0xff, 0xf7, + 0x9c, 0xf9, 0x0e, 0xbd, 0x00, 0x00, 0x25, 0x72, + 0x00, 0x00, 0x3c, 0x00, 0x9c, 0x72, 0x00, 0x00, + 0x10, 0xb5, 0x03, 0x1c, 0x00, 0x21, 0x00, 0x20, + 0x08, 0x4c, 0x00, 0xe0, 0x01, 0x31, 0xca, 0x00, + 0xa2, 0x58, 0x9a, 0x42, 0x02, 0xd0, 0x0b, 0x29, + 0xf8, 0xd3, 0x10, 0xbd, 0x0b, 0x29, 0xfc, 0xd2, + 0xc9, 0x00, 0x09, 0x19, 0x00, 0x20, 0x08, 0x71, + 0x01, 0x20, 0x10, 0xbd, 0x38, 0x58, 0x01, 0x00, + 0x8c, 0xb5, 0x00, 0xab, 0x86, 0x21, 0x19, 0x80, + 0x01, 0x1c, 0x04, 0x48, 0x3c, 0x00, 0xd8, 0x72, + 0x00, 0x00, 0x06, 0xf0, 0xee, 0xfe, 0x01, 0x90, + 0x68, 0x46, 0x06, 0xf0, 0xfa, 0xf8, 0x8c, 0xbd, + 0x00, 0x00, 0x70, 0x7c, 0x01, 0x00, 0x10, 0xb5, + 0x04, 0x1c, 0x0d, 0x48, 0x0d, 0x49, 0x94, 0xb0, + 0x04, 0x80, 0x06, 0x22, 0x18, 0x31, 0x0c, 0x30, + 0xf9, 0xf7, 0xfb, 0xf8, 0x01, 0xa8, 0x07, 0xf0, + 0xa2, 0xf8, 0x0c, 0x20, 0x09, 0xa9, 0x48, 0x72, + 0x00, 0xab, 0x1c, 0x80, 0x02, 0x21, 0x3c, 0x00, + 0x14, 0x73, 0x00, 0x00, 0x68, 0x46, 0x03, 0xf0, + 0xdb, 0xff, 0x04, 0x90, 0x01, 0xa8, 0x06, 0xf0, + 0xd1, 0xf8, 0x14, 0xb0, 0x10, 0xbd, 0x00, 0x00, + 0x58, 0x7c, 0x01, 0x00, 0x80, 0xb5, 0x04, 0xf0, + 0x45, 0xfe, 0x05, 0xf0, 0x53, 0xfa, 0x80, 0xbd, + 0x10, 0xb5, 0x19, 0x4c, 0xe0, 0x68, 0x00, 0x28, + 0x06, 0xd0, 0x61, 0x1c, 0x08, 0x78, 0x00, 0x28, + 0x03, 0xd1, 0x48, 0x78, 0xff, 0x30, 0x08, 0x70, + 0x3c, 0x00, 0x50, 0x73, 0x00, 0x00, 0x10, 0xbd, + 0xff, 0x30, 0x00, 0x06, 0x00, 0x0e, 0x08, 0x70, + 0xa1, 0x68, 0x00, 0x29, 0xf7, 0xd0, 0x00, 0x28, + 0xf5, 0xd1, 0x0e, 0x48, 0x54, 0x30, 0x81, 0x78, + 0x00, 0x29, 0x03, 0xd1, 0xc1, 0x78, 0xff, 0x31, + 0x81, 0x70, 0x10, 0xbd, 0xff, 0x31, 0x09, 0x06, + 0x09, 0x0e, 0x81, 0x70, 0xf9, 0xd1, 0xa1, 0x69, + 0x00, 0x29, 0xf6, 0xd0, 0x80, 0x88, 0x03, 0xf0, + 0xd0, 0xfb, 0x3c, 0x00, 0x8c, 0x73, 0x00, 0x00, + 0x04, 0x4a, 0x01, 0x1c, 0x5c, 0x32, 0x0c, 0x32, + 0x05, 0xca, 0x80, 0x1a, 0xa2, 0x69, 0xf9, 0xf7, + 0x1f, 0xf8, 0x10, 0xbd, 0x44, 0x7d, 0x01, 0x00, + 0xf0, 0xb5, 0x04, 0x1c, 0x40, 0x68, 0x00, 0x25, + 0x01, 0x79, 0x00, 0x22, 0x85, 0xb0, 0xc9, 0x07, + 0xcb, 0x17, 0x69, 0x49, 0x01, 0x33, 0x89, 0x6a, + 0x10, 0x29, 0x05, 0xd3, 0x66, 0x49, 0xc0, 0x39, + 0x08, 0x6b, 0x01, 0x30, 0x3c, 0x00, 0xc8, 0x73, + 0x00, 0x00, 0x08, 0x63, 0x8e, 0xe0, 0x21, 0x68, + 0x0e, 0x68, 0xf6, 0x78, 0xb7, 0x06, 0xff, 0x0f, + 0xb6, 0x09, 0x00, 0x2b, 0x04, 0x97, 0x06, 0xd0, + 0x63, 0x69, 0x1f, 0x1c, 0x1b, 0x6a, 0x50, 0x37, + 0x9f, 0x42, 0x00, 0xd1, 0x01, 0x25, 0x00, 0x2d, + 0x02, 0xd0, 0x63, 0x69, 0x1b, 0x6a, 0x04, 0xe0, + 0x3c, 0x23, 0x59, 0x4f, 0x73, 0x43, 0xdb, 0x19, + 0x04, 0x33, 0xe3, 0x61, 0x9f, 0x88, 0x3c, 0x00, + 0x04, 0x74, 0x00, 0x00, 0x00, 0x2f, 0x70, 0xd0, + 0x9b, 0x79, 0x02, 0x2b, 0x6e, 0xd0, 0x04, 0x2b, + 0x17, 0xd0, 0x06, 0x2b, 0x69, 0xd1, 0x08, 0x68, + 0xa0, 0x61, 0x08, 0x89, 0x04, 0x38, 0x08, 0x81, + 0x20, 0x68, 0x01, 0x68, 0x04, 0x31, 0x01, 0x60, + 0x4e, 0x49, 0x00, 0x29, 0x5d, 0xd0, 0x04, 0x9f, + 0xba, 0x42, 0x5a, 0xd1, 0x49, 0x48, 0x22, 0x1c, + 0x1c, 0x30, 0x02, 0xf0, 0x65, 0xfe, 0x05, 0xb0, + 0x3c, 0x00, 0x40, 0x74, 0x00, 0x00, 0xf0, 0xbd, + 0x09, 0x68, 0x25, 0x1c, 0xca, 0x79, 0x40, 0x35, + 0x26, 0x1c, 0xea, 0x73, 0x8b, 0x79, 0x22, 0x1c, + 0x50, 0x32, 0x13, 0x70, 0x4b, 0x79, 0x60, 0x36, + 0x53, 0x70, 0x0b, 0x79, 0x93, 0x70, 0x4b, 0x78, + 0xd3, 0x70, 0x09, 0x78, 0x11, 0x71, 0x00, 0x21, + 0x29, 0x72, 0x16, 0x21, 0xb1, 0x73, 0x61, 0x6a, + 0x00, 0x29, 0x06, 0xd0, 0x01, 0x8b, 0x09, 0x07, + 0x09, 0x0f, 0x3c, 0x00, 0x7c, 0x74, 0x00, 0x00, + 0x29, 0x72, 0xb1, 0x81, 0x18, 0x21, 0xb1, 0x73, + 0x01, 0x1c, 0x0a, 0x31, 0x20, 0x1c, 0x06, 0x22, + 0x49, 0x30, 0xf9, 0xf7, 0x33, 0xf8, 0x60, 0x68, + 0x14, 0x22, 0x01, 0x88, 0xe9, 0x82, 0x01, 0x1d, + 0x20, 0x1c, 0x58, 0x30, 0xf9, 0xf7, 0x2a, 0xf8, + 0xe8, 0x8a, 0x30, 0x49, 0x08, 0x40, 0x01, 0x21, + 0x89, 0x03, 0x08, 0x43, 0xe8, 0x82, 0x70, 0x89, + 0x0f, 0x21, 0x08, 0x40, 0x3c, 0x00, 0xb8, 0x74, + 0x00, 0x00, 0x70, 0x81, 0x20, 0x68, 0x01, 0x89, + 0x08, 0x39, 0x01, 0x81, 0x20, 0x68, 0x01, 0x68, + 0x08, 0x31, 0x01, 0x60, 0x08, 0x21, 0x00, 0x20, + 0xfa, 0xf7, 0x83, 0xf8, 0x05, 0x1c, 0x02, 0x68, + 0x20, 0x68, 0x08, 0x21, 0xfa, 0xf7, 0xfb, 0xf8, + 0x20, 0x68, 0xfa, 0xf7, 0x74, 0xf8, 0x21, 0x49, + 0xc5, 0x60, 0x2f, 0xe0, 0x30, 0xe0, 0xff, 0xe7, + 0x21, 0x68, 0x60, 0x68, 0x0a, 0x68, 0x3c, 0x00, + 0xf4, 0x74, 0x00, 0x00, 0x80, 0x23, 0xa2, 0x64, + 0x1e, 0x55, 0xe5, 0x64, 0x55, 0x79, 0x13, 0x79, + 0x2d, 0x02, 0x5b, 0x19, 0x95, 0x79, 0x2d, 0x04, + 0x5b, 0x19, 0xd5, 0x79, 0x2d, 0x06, 0x5b, 0x19, + 0x95, 0x78, 0x12, 0x78, 0x12, 0x02, 0xaa, 0x18, + 0x15, 0x04, 0x0a, 0x89, 0x2d, 0x0c, 0x08, 0x3a, + 0x0a, 0x81, 0x21, 0x68, 0x0a, 0x68, 0x08, 0x32, + 0x0a, 0x60, 0xe1, 0x69, 0x02, 0x1c, 0x0a, 0x32, + 0x3c, 0x00, 0x30, 0x75, 0x00, 0x00, 0x01, 0xa8, + 0x09, 0x68, 0x0b, 0xf0, 0x3e, 0xf9, 0xe0, 0x69, + 0x2b, 0x1c, 0x01, 0x68, 0x20, 0x1c, 0x70, 0x30, + 0x01, 0xaa, 0x0b, 0xf0, 0x86, 0xf9, 0x09, 0x49, + 0x01, 0x22, 0x6d, 0xe7, 0x20, 0x68, 0xfa, 0xf7, + 0x22, 0xf8, 0x20, 0x1c, 0xfa, 0xf7, 0x4d, 0xf9, + 0x70, 0xe7, 0x84, 0x6a, 0x01, 0x00, 0x68, 0x61, + 0x01, 0x00, 0x55, 0x72, 0x00, 0x00, 0x8f, 0xc7, + 0xff, 0xff, 0x3c, 0x00, 0x6c, 0x75, 0x00, 0x00, + 0x41, 0x70, 0x00, 0x00, 0x79, 0x72, 0x00, 0x00, + 0x80, 0xb5, 0x02, 0x21, 0x82, 0x20, 0xf9, 0xf7, + 0x93, 0xfe, 0x80, 0xbd, 0x70, 0x47, 0x00, 0x00, + 0x70, 0x47, 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x70, 0x47, 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x70, 0x47, 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x80, 0xb5, 0xc0, 0x68, 0xf9, 0xf7, 0xfa, 0xff, + 0x01, 0x20, 0x80, 0xbd, 0x3c, 0x00, 0xa8, 0x75, + 0x00, 0x00, 0x80, 0xb5, 0x00, 0x21, 0xff, 0x20, + 0xf9, 0xf7, 0x79, 0xfe, 0x80, 0xbd, 0x70, 0x47, + 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, 0x01, 0x20, + 0x70, 0x47, 0x70, 0x47, 0x00, 0x00, 0x70, 0x47, + 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, 0x70, 0x47, + 0x00, 0x00, 0x80, 0xb5, 0x06, 0x21, 0x99, 0x20, + 0xf9, 0xf7, 0x65, 0xfe, 0x80, 0xbd, 0xb0, 0xb5, + 0x00, 0x25, 0x01, 0x29, 0x12, 0x4c, 0x3c, 0x00, + 0xe4, 0x75, 0x00, 0x00, 0x0f, 0xd1, 0x0a, 0xf0, + 0x0f, 0xfc, 0x00, 0x28, 0x1d, 0xd0, 0x61, 0x78, + 0x3c, 0x23, 0x59, 0x43, 0x09, 0x19, 0x04, 0x31, + 0x01, 0x62, 0x61, 0x1c, 0x41, 0x62, 0x84, 0x62, + 0x04, 0x1c, 0x50, 0x34, 0x06, 0xe0, 0x00, 0x29, + 0x0f, 0xd1, 0x3c, 0x20, 0x50, 0x43, 0x25, 0x70, + 0x04, 0x19, 0x04, 0x34, 0x00, 0x2c, 0x08, 0xd0, + 0x20, 0x68, 0x00, 0x28, 0x02, 0xd0, 0x20, 0x21, + 0x3c, 0x00, 0x20, 0x76, 0x00, 0x00, 0xf8, 0xf7, + 0x18, 0xff, 0xa5, 0x80, 0x07, 0x20, 0xa0, 0x71, + 0xb0, 0xbd, 0x68, 0x61, 0x01, 0x00, 0x70, 0xb5, + 0x04, 0x1c, 0x00, 0x21, 0x01, 0xf0, 0x41, 0xfc, + 0x60, 0x68, 0x00, 0x28, 0x01, 0xd0, 0x21, 0x68, + 0x01, 0x60, 0x20, 0x68, 0x00, 0x28, 0x01, 0xd0, + 0x61, 0x68, 0x41, 0x60, 0x12, 0x4e, 0x70, 0x68, + 0xa0, 0x42, 0x01, 0xd1, 0x60, 0x68, 0x70, 0x60, + 0xe0, 0x68, 0x3c, 0x00, 0x5c, 0x76, 0x00, 0x00, + 0x00, 0x28, 0x0b, 0xd0, 0x00, 0x25, 0x06, 0xe0, + 0xe0, 0x68, 0xe9, 0x00, 0x41, 0x18, 0x14, 0x20, + 0x0b, 0xf0, 0xe2, 0xff, 0x01, 0x35, 0x30, 0x88, + 0x85, 0x42, 0xf5, 0xdb, 0x06, 0x21, 0x20, 0x1c, + 0x44, 0x30, 0xf8, 0xf7, 0xe9, 0xfe, 0x20, 0x6b, + 0x00, 0x28, 0x01, 0xd0, 0xf9, 0xf7, 0x86, 0xff, + 0xe0, 0x69, 0x00, 0x28, 0x01, 0xd0, 0xfa, 0xf7, + 0xaf, 0xf8, 0x70, 0xbd, 0x3c, 0x00, 0x98, 0x76, + 0x00, 0x00, 0x58, 0x75, 0x01, 0x00, 0xf0, 0xb5, + 0x1d, 0x4f, 0x05, 0x9d, 0x3f, 0x68, 0x01, 0x26, + 0x1c, 0x1c, 0x33, 0x1c, 0x00, 0x2f, 0x00, 0xd0, + 0x2b, 0x1c, 0x1d, 0x06, 0x2d, 0x0e, 0x00, 0x29, + 0x06, 0xd0, 0x11, 0x78, 0x0e, 0x23, 0x16, 0x4f, + 0x09, 0x18, 0x09, 0x7a, 0x6b, 0x43, 0x10, 0xe0, + 0x21, 0x78, 0x00, 0x29, 0x13, 0xd0, 0xff, 0x31, + 0x0d, 0xe0, 0x01, 0x29, 0x01, 0xd9, 0x3c, 0x00, + 0xd4, 0x76, 0x00, 0x00, 0x01, 0x31, 0x11, 0x70, + 0x11, 0x78, 0x0e, 0x23, 0x0f, 0x4f, 0x49, 0x08, + 0x11, 0x70, 0x09, 0x18, 0x09, 0x7a, 0x6b, 0x43, + 0xdb, 0x19, 0x59, 0x5c, 0x21, 0x70, 0x21, 0x78, + 0x00, 0x29, 0x02, 0xd1, 0x11, 0x78, 0x00, 0x29, + 0xea, 0xd1, 0x09, 0x48, 0xc0, 0x68, 0x00, 0x28, + 0x05, 0xd0, 0x21, 0x78, 0x30, 0x1c, 0x00, 0x29, + 0x00, 0xd1, 0x00, 0x20, 0xf0, 0xbd, 0x01, 0x20, + 0x3c, 0x00, 0x10, 0x77, 0x00, 0x00, 0xf0, 0xbd, + 0x00, 0x00, 0x18, 0x67, 0x01, 0x00, 0x24, 0x67, + 0x01, 0x00, 0x5c, 0x67, 0x01, 0x00, 0xac, 0x7c, + 0x01, 0x00, 0x84, 0x46, 0x00, 0x20, 0xf0, 0xb5, + 0x00, 0x29, 0x09, 0xd0, 0x11, 0x78, 0x1a, 0x4e, + 0xb1, 0x70, 0x19, 0x4e, 0xb1, 0x78, 0x71, 0x70, + 0x31, 0x70, 0x01, 0x21, 0x31, 0x61, 0x27, 0xe0, + 0x16, 0x4e, 0x01, 0x23, 0xf1, 0x56, 0x63, 0x46, + 0x5f, 0x68, 0x3c, 0x00, 0x4c, 0x77, 0x00, 0x00, + 0x00, 0x23, 0xf6, 0x56, 0x01, 0x25, 0xcc, 0x0f, + 0xb7, 0x42, 0x00, 0xd9, 0x00, 0x25, 0x00, 0x2c, + 0x01, 0xd0, 0x00, 0x2d, 0xe8, 0xd1, 0x0e, 0x4f, + 0x3b, 0x69, 0x00, 0x2b, 0x03, 0xd0, 0x00, 0x2d, + 0x01, 0xd1, 0x16, 0x70, 0x02, 0xe0, 0x1c, 0x43, + 0x01, 0xd1, 0x11, 0x70, 0x01, 0x20, 0x01, 0x24, + 0x00, 0x2b, 0x00, 0xd0, 0x00, 0x24, 0x3c, 0x61, + 0x00, 0x2c, 0x02, 0xd0, 0x3c, 0x00, 0x88, 0x77, + 0x00, 0x00, 0x71, 0x1c, 0x39, 0x70, 0x01, 0xe0, + 0xff, 0x31, 0x79, 0x70, 0x00, 0x28, 0xd5, 0xd0, + 0x01, 0x20, 0xf0, 0xbd, 0x00, 0x00, 0xac, 0x7c, + 0x01, 0x00, 0x90, 0xb5, 0x0a, 0x4c, 0x00, 0x20, + 0x93, 0xb0, 0x20, 0x61, 0x03, 0x90, 0x68, 0x46, + 0x00, 0x21, 0x08, 0xf0, 0x84, 0xfd, 0x20, 0x7a, + 0x02, 0x28, 0x01, 0xd1, 0xe0, 0x6b, 0x00, 0xe0, + 0x20, 0x6c, 0xe0, 0x61, 0x01, 0x20, 0x3c, 0x00, + 0xc4, 0x77, 0x00, 0x00, 0x08, 0xf0, 0x8a, 0xfd, + 0x13, 0xb0, 0x90, 0xbd, 0xf4, 0x6e, 0x01, 0x00, + 0xf7, 0xb5, 0x05, 0x1c, 0x88, 0x88, 0x0c, 0x1c, + 0x82, 0xb0, 0x1f, 0x4f, 0x00, 0x28, 0x00, 0xd1, + 0x00, 0x27, 0x04, 0x98, 0x00, 0x28, 0x01, 0xd1, + 0xf9, 0xf7, 0x8a, 0xfd, 0x1b, 0x48, 0x3b, 0x1c, + 0x00, 0x68, 0x21, 0x1c, 0x02, 0x68, 0x28, 0x1c, + 0x00, 0x92, 0x04, 0x9a, 0xfe, 0xf7, 0x3c, 0xf8, + 0x3c, 0x00, 0x00, 0x78, 0x00, 0x00, 0x06, 0x1c, + 0x22, 0xd0, 0x03, 0x21, 0x04, 0x98, 0x02, 0xf0, + 0xb8, 0xff, 0x00, 0x28, 0x1b, 0xd0, 0x80, 0x78, + 0x01, 0x21, 0x03, 0xf0, 0xe4, 0xff, 0xa0, 0x88, + 0xa1, 0x8e, 0x48, 0x43, 0x00, 0x04, 0x0f, 0x49, + 0x00, 0x0c, 0x08, 0x80, 0x03, 0xf0, 0x81, 0xf9, + 0x01, 0x22, 0x00, 0x2d, 0x00, 0xd1, 0x00, 0x22, + 0x01, 0x1c, 0x0e, 0x20, 0x0b, 0xf0, 0xc9, 0xfe, + 0x00, 0x2f, 0x3c, 0x00, 0x3c, 0x78, 0x00, 0x00, + 0x08, 0xd1, 0x00, 0x21, 0x28, 0x1c, 0x02, 0xf0, + 0xbd, 0xfc, 0x03, 0xe0, 0x00, 0x26, 0x28, 0x1c, + 0x00, 0xf0, 0x0a, 0xf8, 0x30, 0x1c, 0x05, 0xb0, + 0xf0, 0xbd, 0x00, 0x00, 0xc1, 0xa1, 0x00, 0x00, + 0xe4, 0x65, 0x01, 0x00, 0xa8, 0x7c, 0x01, 0x00, + 0x10, 0xb5, 0x04, 0x1c, 0xfe, 0xf7, 0x38, 0xf8, + 0x01, 0x21, 0x00, 0x2c, 0x00, 0xd1, 0x00, 0x21, + 0x0e, 0x20, 0x0b, 0xf0, 0x3c, 0x00, 0x78, 0x78, + 0x00, 0x00, 0xdd, 0xfe, 0x10, 0xbd, 0xf8, 0xb5, + 0x07, 0x1c, 0x0b, 0xf0, 0x94, 0xfa, 0xfd, 0xf7, + 0xbc, 0xfe, 0x00, 0x26, 0x02, 0x28, 0x1e, 0x4d, + 0x01, 0xd0, 0x2e, 0x70, 0xf8, 0xbd, 0xfd, 0xf7, + 0x3e, 0xf8, 0x04, 0x1c, 0xf9, 0xf7, 0x59, 0xfc, + 0x00, 0x28, 0x14, 0xd0, 0xfd, 0xf7, 0x77, 0xf8, + 0x00, 0x28, 0x10, 0xd0, 0x02, 0xf0, 0xf9, 0xfb, + 0x00, 0x28, 0x01, 0xd0, 0x00, 0x24, 0x3c, 0x00, + 0xb4, 0x78, 0x00, 0x00, 0x00, 0xe0, 0x15, 0x4c, + 0x33, 0x1c, 0x21, 0x1c, 0x07, 0x22, 0x16, 0x20, + 0x0b, 0xf0, 0x66, 0xff, 0x68, 0x78, 0x80, 0x21, + 0x08, 0x43, 0x68, 0x70, 0x02, 0xf0, 0x0a, 0xfc, + 0x00, 0x28, 0xde, 0xd1, 0x28, 0x78, 0x80, 0x07, + 0xdb, 0xd4, 0xfd, 0xf7, 0x23, 0xf9, 0x00, 0x28, + 0x05, 0xd1, 0x28, 0x78, 0xc0, 0x07, 0x02, 0xd5, + 0xfd, 0xf7, 0x42, 0xf8, 0xd1, 0xe7, 0x02, 0xf0, + 0x3c, 0x00, 0xf0, 0x78, 0x00, 0x00, 0xcd, 0xfb, + 0x00, 0x28, 0xcd, 0xd0, 0x28, 0x78, 0x02, 0x21, + 0x08, 0x43, 0x28, 0x70, 0x21, 0x1c, 0x38, 0x1c, + 0xfd, 0xf7, 0xc1, 0xf8, 0xc4, 0xe7, 0x60, 0x6c, + 0x01, 0x00, 0x71, 0x02, 0x00, 0x00, 0x10, 0xb5, + 0x12, 0x4c, 0x01, 0x20, 0x20, 0x70, 0xfe, 0xf7, + 0xf0, 0xf9, 0x01, 0x21, 0xa0, 0x68, 0xfb, 0xf7, + 0xf4, 0xfe, 0xa0, 0x68, 0x03, 0xf0, 0x87, 0xff, + 0x0d, 0x48, 0x3c, 0x00, 0x2c, 0x79, 0x00, 0x00, + 0xa1, 0x68, 0x07, 0xf0, 0x23, 0xfd, 0xfb, 0xf7, + 0x55, 0xff, 0xe0, 0x68, 0x00, 0x28, 0x0d, 0xd0, + 0x09, 0x49, 0x06, 0x20, 0x0a, 0xf0, 0x24, 0xfd, + 0x08, 0x49, 0x05, 0x20, 0x0a, 0xf0, 0x20, 0xfd, + 0xfb, 0xf7, 0x6e, 0xff, 0x00, 0x28, 0x01, 0xd0, + 0x05, 0xf0, 0xf8, 0xfc, 0x10, 0xbd, 0x00, 0x00, + 0x78, 0x69, 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, + 0xe1, 0x35, 0x00, 0x00, 0x3c, 0x00, 0x68, 0x79, + 0x00, 0x00, 0xb1, 0x35, 0x00, 0x00, 0xf0, 0xb5, + 0x24, 0x4d, 0x23, 0x4c, 0x68, 0x7c, 0x20, 0x3c, + 0x9b, 0xb0, 0x00, 0x28, 0x08, 0xd0, 0x02, 0x28, + 0x03, 0xd8, 0x20, 0x89, 0x01, 0x38, 0x20, 0x81, + 0x37, 0xe0, 0x00, 0x27, 0x6f, 0x74, 0x34, 0xe0, + 0x1c, 0x4e, 0x68, 0x22, 0x14, 0x36, 0x31, 0x1c, + 0x0c, 0x31, 0x01, 0xa8, 0xf8, 0xf7, 0x09, 0xfe, + 0x18, 0x48, 0x33, 0x89, 0x01, 0x21, 0x3c, 0x00, + 0xa4, 0x79, 0x00, 0x00, 0x44, 0x30, 0x0a, 0x1c, + 0x00, 0x2b, 0x00, 0x7b, 0x00, 0xd1, 0x02, 0x1c, + 0x12, 0x06, 0x12, 0x0e, 0x0d, 0xaf, 0x3a, 0x70, + 0x94, 0x46, 0xaa, 0x7b, 0x93, 0x19, 0x30, 0x33, + 0x5b, 0x7b, 0x7b, 0x70, 0xea, 0x73, 0x01, 0x32, + 0x12, 0x06, 0x12, 0x0e, 0x00, 0x27, 0x82, 0x42, + 0xaa, 0x73, 0x01, 0xd3, 0xaf, 0x73, 0x04, 0xe0, + 0x62, 0x46, 0x01, 0x2a, 0x01, 0xd1, 0x77, 0x60, + 0x3c, 0x00, 0xe0, 0x79, 0x00, 0x00, 0x00, 0xe0, + 0x71, 0x60, 0x06, 0x48, 0x07, 0x4a, 0x80, 0x38, + 0x81, 0x67, 0x42, 0x67, 0x68, 0x22, 0x01, 0xa9, + 0xf8, 0xf7, 0xdd, 0xfd, 0x27, 0x81, 0x08, 0xf0, + 0x12, 0xfd, 0x1b, 0xb0, 0xf0, 0xbd, 0x84, 0x66, + 0x01, 0x00, 0xe9, 0x2e, 0x00, 0x00, 0xf1, 0xb5, + 0x86, 0xb0, 0x06, 0x99, 0x00, 0x20, 0x88, 0x61, + 0x06, 0x98, 0x84, 0x68, 0x80, 0x8d, 0x65, 0x68, + 0x01, 0x28, 0x3c, 0x00, 0x1c, 0x7a, 0x00, 0x00, + 0x4c, 0xd9, 0x35, 0x49, 0x49, 0x68, 0x05, 0x91, + 0x00, 0x29, 0x47, 0xd0, 0x00, 0x22, 0x00, 0x21, + 0x00, 0x23, 0x03, 0x90, 0x28, 0x1c, 0x96, 0x46, + 0x94, 0x46, 0x06, 0x68, 0x04, 0x96, 0xf2, 0x78, + 0x80, 0x26, 0xb2, 0x43, 0x3f, 0x2a, 0x2e, 0xd8, + 0xd7, 0x06, 0xff, 0x0e, 0x01, 0x26, 0xbe, 0x40, + 0x37, 0x1c, 0x04, 0x9e, 0x52, 0x09, 0xb6, 0x78, + 0x76, 0x00, 0xb2, 0x18, 0x3c, 0x00, 0x58, 0x7a, + 0x00, 0x00, 0x26, 0x4e, 0x92, 0x00, 0x1c, 0x36, + 0xb2, 0x58, 0x3a, 0x40, 0x1e, 0xd0, 0x03, 0xe0, + 0x02, 0x90, 0x02, 0x89, 0xc0, 0x68, 0x51, 0x18, + 0x00, 0x28, 0xf9, 0xd1, 0x05, 0x98, 0x81, 0x42, + 0x14, 0xd8, 0x70, 0x46, 0x01, 0x30, 0x86, 0x46, + 0x00, 0x2b, 0x04, 0xd0, 0x60, 0x46, 0xd8, 0x60, + 0x01, 0x98, 0x62, 0x46, 0xd0, 0x60, 0x03, 0x98, + 0x01, 0x38, 0x03, 0x90, 0x06, 0xd0, 0x3c, 0x00, + 0x94, 0x7a, 0x00, 0x00, 0x23, 0x1c, 0x24, 0x68, + 0x60, 0x68, 0x02, 0x9a, 0x01, 0x90, 0x94, 0x46, + 0xc9, 0xe7, 0x70, 0x46, 0x01, 0x28, 0x07, 0xd9, + 0x2a, 0x1c, 0x00, 0x21, 0x3f, 0x20, 0x01, 0xf0, + 0x51, 0xff, 0x05, 0x1c, 0x06, 0x98, 0x85, 0x61, + 0x28, 0x1c, 0x01, 0xf0, 0xb3, 0xff, 0x0e, 0x48, + 0x00, 0x68, 0x00, 0x28, 0x07, 0xd0, 0x28, 0x68, + 0x01, 0x88, 0x40, 0x79, 0x02, 0x31, 0x09, 0x1a, + 0x3c, 0x00, 0xd0, 0x7a, 0x00, 0x00, 0x28, 0x1c, + 0x01, 0xf0, 0xe5, 0xfc, 0xa2, 0x68, 0x06, 0x98, + 0xc0, 0x68, 0x06, 0x99, 0x0b, 0x69, 0x29, 0x1c, + 0xf8, 0xf7, 0x7c, 0xfc, 0x03, 0x49, 0x08, 0x69, + 0x01, 0x30, 0x08, 0x61, 0x07, 0xb0, 0xf0, 0xbd, + 0x00, 0x00, 0xfc, 0x5a, 0x01, 0x00, 0xcc, 0x5c, + 0x01, 0x00, 0x10, 0xb5, 0x09, 0x4a, 0x80, 0x00, + 0x12, 0x58, 0xd0, 0x06, 0xc0, 0x0e, 0x01, 0x30, + 0x07, 0x4b, 0x3c, 0x00, 0x0c, 0x7b, 0x00, 0x00, + 0x1c, 0x68, 0x00, 0x2c, 0xfc, 0xdb, 0x5a, 0x60, + 0x20, 0x22, 0x12, 0x1a, 0x91, 0x40, 0x19, 0x60, + 0x19, 0x68, 0x00, 0x29, 0xfc, 0xdb, 0x10, 0xbd, + 0xe8, 0x60, 0x01, 0x00, 0x30, 0x20, 0x07, 0x00, + 0xb0, 0xb5, 0x12, 0x4c, 0x00, 0x25, 0x25, 0x70, + 0xa1, 0x68, 0x11, 0x48, 0x07, 0xf0, 0x32, 0xfc, + 0x65, 0x61, 0xfb, 0xf7, 0xa3, 0xfe, 0xe0, 0x68, + 0x00, 0x28, 0x0d, 0xd0, 0x3c, 0x00, 0x48, 0x7b, + 0x00, 0x00, 0xfb, 0xf7, 0xa4, 0xfe, 0x01, 0x21, + 0x07, 0x20, 0x0b, 0xf0, 0x70, 0xfd, 0x0a, 0x49, + 0x06, 0x20, 0x0a, 0xf0, 0x4c, 0xfc, 0x09, 0x49, + 0x05, 0x20, 0x0a, 0xf0, 0x48, 0xfc, 0xa0, 0x68, + 0x03, 0xf0, 0x67, 0xfe, 0x00, 0x21, 0xa0, 0x68, + 0xfb, 0xf7, 0xcd, 0xfd, 0x05, 0xf0, 0xab, 0xfb, + 0xb0, 0xbd, 0x78, 0x69, 0x01, 0x00, 0x34, 0x63, + 0x01, 0x00, 0xe1, 0x35, 0x00, 0x00, 0x3c, 0x00, + 0x84, 0x7b, 0x00, 0x00, 0xb1, 0x35, 0x00, 0x00, + 0x10, 0xb5, 0x0f, 0x4c, 0x20, 0x7c, 0x00, 0x28, + 0x19, 0xd1, 0x60, 0x69, 0x00, 0x28, 0x16, 0xd1, + 0xe0, 0x68, 0x00, 0x28, 0x06, 0xd0, 0x0a, 0x48, + 0x1c, 0x38, 0xc0, 0x68, 0x00, 0x28, 0x01, 0xd0, + 0x05, 0xf0, 0xce, 0xfb, 0x01, 0x21, 0x07, 0x20, + 0x0b, 0xf0, 0x40, 0xfd, 0xa0, 0x68, 0x03, 0xf0, + 0x3f, 0xfe, 0x04, 0x48, 0xa1, 0x68, 0x07, 0xf0, + 0x3c, 0x00, 0xc0, 0x7b, 0x00, 0x00, 0xdb, 0xfb, + 0x01, 0x20, 0x20, 0x70, 0x10, 0xbd, 0x78, 0x69, + 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, 0x70, 0xb5, + 0x0e, 0x4c, 0x01, 0x22, 0xa3, 0x68, 0xe5, 0x68, + 0x26, 0x8a, 0x5d, 0x1b, 0xb5, 0x42, 0x01, 0xd1, + 0x00, 0x22, 0x06, 0xe0, 0x25, 0x68, 0x01, 0x33, + 0x2e, 0x68, 0xa3, 0x60, 0x26, 0x60, 0x04, 0x35, + 0x03, 0xc5, 0x00, 0x2a, 0x04, 0xd1, 0x01, 0x21, + 0x9d, 0x20, 0x3c, 0x00, 0xfc, 0x7b, 0x00, 0x00, + 0xf9, 0xf7, 0x52, 0xfb, 0x70, 0xbd, 0x03, 0x49, + 0x02, 0x20, 0x08, 0x60, 0x70, 0xbd, 0x00, 0x00, + 0x44, 0xe3, 0x01, 0x00, 0x40, 0x20, 0x07, 0x00, + 0x80, 0xb5, 0x02, 0xf0, 0xb9, 0xf8, 0x80, 0xbd, + 0x80, 0xb5, 0x02, 0x21, 0x2d, 0x20, 0xf9, 0xf7, + 0x3f, 0xfb, 0x00, 0x20, 0x80, 0xbd, 0x00, 0x00, + 0x80, 0xb5, 0x02, 0x21, 0x2a, 0x20, 0xf9, 0xf7, + 0x37, 0xfb, 0x00, 0x20, 0x3c, 0x00, 0x38, 0x7c, + 0x00, 0x00, 0x80, 0xbd, 0x00, 0x00, 0x80, 0xb5, + 0x01, 0x21, 0x2b, 0x20, 0xf9, 0xf7, 0x2f, 0xfb, + 0x02, 0x20, 0x80, 0xbd, 0x00, 0x00, 0x01, 0x49, + 0x01, 0x20, 0x08, 0x61, 0x70, 0x47, 0x7c, 0x78, + 0x01, 0x00, 0xf8, 0xb5, 0x06, 0x1c, 0x0c, 0x23, + 0x0f, 0x1c, 0x17, 0x49, 0x58, 0x43, 0x45, 0x18, + 0x6c, 0x68, 0x30, 0x1c, 0x0b, 0xf0, 0x3f, 0xfe, + 0x00, 0x2f, 0x09, 0xd1, 0x30, 0x1c, 0x3c, 0x00, + 0x74, 0x7c, 0x00, 0x00, 0x03, 0xf0, 0xee, 0xfe, + 0x41, 0x20, 0x07, 0x55, 0x11, 0x48, 0x21, 0x1c, + 0xff, 0xf7, 0xa6, 0xff, 0xf8, 0xbd, 0x41, 0x20, + 0x07, 0x55, 0xa0, 0x6b, 0x00, 0x28, 0x03, 0xd0, + 0x20, 0x1c, 0x00, 0xf0, 0xdf, 0xf9, 0xf5, 0xe7, + 0x20, 0x1c, 0x00, 0xf0, 0xdb, 0xf9, 0xac, 0x68, + 0x00, 0x2c, 0x02, 0xd0, 0x00, 0x20, 0xa8, 0x60, + 0xed, 0xe7, 0x30, 0x1c, 0x05, 0xf0, 0x34, 0xf9, + 0x3c, 0x00, 0xb0, 0x7c, 0x00, 0x00, 0x04, 0x1c, + 0xe8, 0xd1, 0x08, 0x21, 0x0c, 0x20, 0xf9, 0xf7, + 0xf4, 0xfa, 0xe3, 0xe7, 0x00, 0x00, 0x60, 0x7b, + 0x01, 0x00, 0x55, 0x80, 0x00, 0x00, 0x07, 0x4a, + 0x80, 0xb5, 0x50, 0x70, 0x51, 0x60, 0x12, 0x78, + 0x06, 0x4b, 0x80, 0x00, 0x52, 0x01, 0xd2, 0x18, + 0x10, 0x18, 0x40, 0x38, 0x02, 0x68, 0x08, 0x1c, + 0xf8, 0xf7, 0x7b, 0xfb, 0x80, 0xbd, 0x78, 0x69, + 0x01, 0x00, 0x3c, 0x00, 0xec, 0x7c, 0x00, 0x00, + 0xfc, 0x42, 0x01, 0x00, 0xb0, 0xb5, 0x0a, 0x49, + 0x04, 0x1c, 0xc8, 0x70, 0x08, 0x4d, 0xe4, 0x35, + 0xa8, 0x7a, 0x08, 0x71, 0x08, 0x2c, 0x01, 0xd3, + 0xf9, 0xf7, 0xfc, 0xfa, 0xa8, 0x7a, 0x05, 0x49, + 0x40, 0x01, 0x40, 0x18, 0xa1, 0x00, 0x40, 0x58, + 0xf8, 0xf7, 0x60, 0xfb, 0xb0, 0xbd, 0x00, 0x00, + 0x60, 0x6c, 0x01, 0x00, 0x80, 0x43, 0x01, 0x00, + 0x80, 0xb5, 0x00, 0x28, 0x3c, 0x00, 0x28, 0x7d, + 0x00, 0x00, 0x01, 0xd0, 0x09, 0xf0, 0x1d, 0xf9, + 0x80, 0xbd, 0xb0, 0xb5, 0x05, 0x1c, 0x0c, 0x1c, + 0x00, 0x20, 0x08, 0x60, 0x68, 0x68, 0x09, 0xf0, + 0x36, 0xfb, 0x6c, 0x60, 0xb0, 0xbd, 0x10, 0xb5, + 0x04, 0x1c, 0x09, 0xf0, 0x34, 0xfb, 0x21, 0x68, + 0x00, 0x29, 0x00, 0xd1, 0x64, 0x60, 0x10, 0xbd, + 0x00, 0x00, 0x00, 0x21, 0x01, 0x60, 0x40, 0x60, + 0x70, 0x47, 0xf8, 0xb5, 0x46, 0x68, 0x3c, 0x00, + 0x64, 0x7d, 0x00, 0x00, 0x04, 0x1c, 0x40, 0x6a, + 0x35, 0x1c, 0x0a, 0x35, 0x00, 0x28, 0x04, 0xd0, + 0x20, 0x1c, 0xf9, 0xf7, 0x89, 0xfd, 0x07, 0x1c, + 0x00, 0xe0, 0x04, 0x27, 0x29, 0x1c, 0x60, 0x69, + 0x00, 0xf0, 0xf6, 0xfc, 0x79, 0x00, 0x0f, 0x18, + 0xba, 0x88, 0xf1, 0x8a, 0x05, 0x1c, 0x8a, 0x42, + 0x05, 0xd1, 0x30, 0x88, 0x00, 0x05, 0x02, 0xd5, + 0x04, 0xf0, 0xbe, 0xfb, 0x3c, 0xe0, 0x28, 0x68, + 0x3c, 0x00, 0xa0, 0x7d, 0x00, 0x00, 0x00, 0x28, + 0x0f, 0xd0, 0x01, 0x32, 0x8a, 0x42, 0x04, 0xd1, + 0xf9, 0xf7, 0x0f, 0xfc, 0x21, 0x68, 0xc1, 0x60, + 0x0b, 0xe0, 0xf9, 0xf7, 0xf0, 0xfb, 0xf0, 0x8a, + 0x00, 0x07, 0x04, 0xd0, 0x00, 0x21, 0x29, 0x60, + 0x29, 0xe0, 0x08, 0x07, 0x27, 0xd1, 0x20, 0x68, + 0x28, 0x60, 0xf0, 0x8a, 0xb8, 0x80, 0x13, 0x48, + 0x01, 0x68, 0x01, 0x31, 0x01, 0x60, 0x31, 0x88, + 0x49, 0x05, 0x3c, 0x00, 0xdc, 0x7d, 0x00, 0x00, + 0x18, 0xd4, 0x29, 0x68, 0x21, 0x60, 0x00, 0x21, + 0x29, 0x60, 0xe1, 0x69, 0x00, 0x29, 0x0d, 0xd0, + 0x89, 0x79, 0x02, 0x29, 0x0a, 0xd1, 0x08, 0x21, + 0x21, 0x86, 0x21, 0x1c, 0x38, 0x31, 0xa1, 0x62, + 0x22, 0x1c, 0xdc, 0x30, 0x08, 0x49, 0x02, 0xf0, + 0x81, 0xf9, 0xf8, 0xbd, 0x20, 0x1c, 0x00, 0xf0, + 0x5f, 0xf8, 0xfa, 0xe7, 0x20, 0x1c, 0xf9, 0xf7, + 0xef, 0xfc, 0xf6, 0xe7, 0x3c, 0x00, 0x18, 0x7e, + 0x00, 0x00, 0x20, 0x68, 0xf9, 0xf7, 0xbd, 0xfb, + 0xf7, 0xe7, 0xc4, 0x69, 0x01, 0x00, 0xb9, 0x71, + 0x00, 0x00, 0xf8, 0xb5, 0x0f, 0x1c, 0x09, 0x78, + 0x01, 0x24, 0xc9, 0x07, 0x21, 0xd5, 0x02, 0xf0, + 0x8c, 0xff, 0x00, 0x28, 0x01, 0xd0, 0x00, 0x24, + 0x1b, 0xe0, 0x0e, 0x4e, 0x75, 0x6e, 0x00, 0x2d, + 0x17, 0xd0, 0x34, 0x6e, 0x06, 0x22, 0x31, 0x1c, + 0x38, 0x1c, 0xf8, 0xf7, 0xd4, 0xfa, 0x3c, 0x00, + 0x54, 0x7e, 0x00, 0x00, 0x00, 0x28, 0x05, 0xd1, + 0x01, 0x20, 0x00, 0x2c, 0x00, 0xd0, 0x00, 0x20, + 0x04, 0x1c, 0x03, 0xe0, 0x01, 0x3d, 0x06, 0x36, + 0x00, 0x2d, 0xee, 0xd1, 0x00, 0x2c, 0x03, 0xd1, + 0x02, 0x4e, 0xb0, 0x6e, 0x01, 0x30, 0xb0, 0x66, + 0x20, 0x1c, 0xf8, 0xbd, 0x10, 0x79, 0x01, 0x00, + 0x30, 0xb5, 0x05, 0x1c, 0x00, 0x20, 0x06, 0x49, + 0x00, 0x22, 0x1c, 0x23, 0xcc, 0x56, 0xac, 0x42, + 0x3c, 0x00, 0x90, 0x7e, 0x00, 0x00, 0x01, 0xd1, + 0x08, 0x1c, 0x30, 0xbd, 0x01, 0x32, 0x48, 0x31, + 0x01, 0x2a, 0xf5, 0xd3, 0x30, 0xbd, 0xcc, 0x6d, + 0x01, 0x00, 0x10, 0xb5, 0x08, 0x4c, 0x00, 0x22, + 0x1c, 0x23, 0x53, 0x43, 0xe3, 0x58, 0x83, 0x42, + 0x04, 0xd1, 0x1c, 0x20, 0x50, 0x43, 0x00, 0x19, + 0x0a, 0x60, 0x10, 0xbd, 0x01, 0x32, 0x0e, 0x2a, + 0xf2, 0xd3, 0x00, 0x20, 0x10, 0xbd, 0xdc, 0x71, + 0x01, 0x00, 0x3c, 0x00, 0xcc, 0x7e, 0x00, 0x00, + 0xf0, 0xb5, 0x41, 0x68, 0x95, 0xb0, 0x07, 0x1c, + 0x90, 0x37, 0x13, 0x91, 0x04, 0x1c, 0xf8, 0x78, + 0x25, 0x1c, 0x80, 0x35, 0xc6, 0x07, 0x28, 0x79, + 0xf6, 0x0f, 0x4a, 0x49, 0x02, 0x28, 0x4d, 0xd1, + 0x0a, 0x6d, 0x00, 0x2a, 0x4a, 0xd0, 0x48, 0x68, + 0x01, 0x30, 0x48, 0x60, 0x0a, 0xf0, 0x58, 0xff, + 0x44, 0x49, 0x08, 0x61, 0x48, 0x61, 0x13, 0x99, + 0x09, 0x79, 0xc9, 0x07, 0x3c, 0x00, 0x08, 0x7f, + 0x00, 0x00, 0x01, 0xd4, 0x41, 0x49, 0x88, 0x61, + 0x20, 0x68, 0x06, 0x22, 0x06, 0x90, 0xa1, 0x68, + 0x03, 0xa8, 0xf8, 0xf7, 0xee, 0xfa, 0x06, 0x22, + 0x04, 0xa8, 0x02, 0x30, 0xe1, 0x68, 0xf8, 0xf7, + 0xe8, 0xfa, 0x07, 0xa8, 0x06, 0x22, 0x21, 0x69, + 0xf8, 0xf7, 0xe3, 0xfa, 0xb8, 0x78, 0x08, 0xab, + 0x00, 0x21, 0x98, 0x70, 0x0c, 0x96, 0x63, 0x6a, + 0x20, 0x1c, 0xa0, 0x30, 0x0a, 0x1c, 0x3c, 0x00, + 0x44, 0x7f, 0x00, 0x00, 0x00, 0x2b, 0x02, 0xd0, + 0x02, 0x8a, 0x52, 0x07, 0x52, 0x0f, 0x08, 0xab, + 0xda, 0x70, 0x00, 0xab, 0x99, 0x84, 0x13, 0x99, + 0x09, 0x88, 0xc9, 0x0b, 0xd9, 0x84, 0x69, 0x6b, + 0x10, 0xab, 0x10, 0x91, 0xa9, 0x6b, 0x11, 0x91, + 0x80, 0x8b, 0x29, 0x49, 0x18, 0x81, 0x09, 0x6d, + 0x03, 0xa8, 0xf8, 0xf7, 0x32, 0xfa, 0x29, 0x79, + 0x68, 0x6b, 0x0b, 0xf0, 0x4d, 0xfd, 0x29, 0x79, + 0x3c, 0x00, 0x80, 0x7f, 0x00, 0x00, 0xa8, 0x6b, + 0x0b, 0xf0, 0x67, 0xfd, 0x3d, 0xe0, 0x00, 0x28, + 0x38, 0xd1, 0x48, 0x6d, 0x14, 0x90, 0x00, 0x28, + 0x34, 0xd0, 0x20, 0x68, 0x06, 0x22, 0x03, 0x90, + 0xa1, 0x68, 0x68, 0x46, 0xf8, 0xf7, 0xab, 0xfa, + 0x06, 0x22, 0x68, 0x46, 0x80, 0x18, 0xe1, 0x68, + 0xf8, 0xf7, 0xa5, 0xfa, 0x05, 0xa8, 0x06, 0x22, + 0x21, 0x69, 0xf8, 0xf7, 0xa0, 0xfa, 0x00, 0x21, + 0x04, 0x91, 0x3c, 0x00, 0xbc, 0x7f, 0x00, 0x00, + 0xb9, 0x78, 0x08, 0xa8, 0x10, 0xab, 0x01, 0x72, + 0x08, 0x96, 0xe9, 0x68, 0x0b, 0x91, 0x69, 0x79, + 0x41, 0x72, 0x68, 0x6b, 0x0e, 0x90, 0xa8, 0x6b, + 0x10, 0x90, 0x28, 0x8d, 0xd8, 0x80, 0x68, 0x8d, + 0x18, 0x81, 0xe1, 0x69, 0x0c, 0xa8, 0x00, 0x29, + 0x04, 0xd0, 0x89, 0x79, 0x01, 0x70, 0x20, 0x6a, + 0x0d, 0x90, 0x01, 0xe0, 0x07, 0x21, 0x01, 0x70, + 0x68, 0x46, 0x14, 0x99, 0x3c, 0x00, 0xf8, 0x7f, + 0x00, 0x00, 0xf8, 0xf7, 0xef, 0xf9, 0x02, 0xe0, + 0x20, 0x68, 0xf9, 0xf7, 0xca, 0xfa, 0x20, 0x1c, + 0xf9, 0xf7, 0xf5, 0xfb, 0x15, 0xb0, 0xf0, 0xbd, + 0x00, 0x00, 0xc4, 0x69, 0x01, 0x00, 0xb0, 0xb5, + 0x04, 0x1c, 0xc0, 0x68, 0x06, 0x22, 0x01, 0x89, + 0x0c, 0x31, 0x01, 0x81, 0x05, 0x68, 0x21, 0x1c, + 0x0c, 0x3d, 0x05, 0x60, 0xa8, 0x18, 0xf8, 0xf7, + 0x64, 0xfa, 0x06, 0x22, 0xa1, 0x18, 0x3c, 0x00, + 0x34, 0x80, 0x00, 0x00, 0x28, 0x1c, 0xf8, 0xf7, + 0x5f, 0xfa, 0xa0, 0x8f, 0x00, 0x09, 0xe0, 0x62, + 0x20, 0x63, 0x03, 0x48, 0x01, 0x69, 0x20, 0x1c, + 0xf8, 0xf7, 0xc7, 0xf9, 0xb0, 0xbd, 0x00, 0x00, + 0x7c, 0x79, 0x01, 0x00, 0xf8, 0xb5, 0x06, 0x1c, + 0x60, 0x36, 0x05, 0x1c, 0x70, 0x7a, 0x0c, 0x23, + 0x25, 0x49, 0x58, 0x43, 0x44, 0x18, 0xa8, 0x6b, + 0x00, 0x27, 0x00, 0x28, 0x06, 0xd0, 0xa0, 0x78, + 0x3c, 0x00, 0x70, 0x80, 0x00, 0x00, 0x01, 0x28, + 0x03, 0xd1, 0xa7, 0x70, 0x70, 0x7a, 0x0a, 0xf0, + 0xb6, 0xfd, 0x2a, 0x1c, 0x0c, 0x21, 0x80, 0x20, + 0x0b, 0xf0, 0x95, 0xfb, 0xa8, 0x6b, 0x00, 0x28, + 0x33, 0xd0, 0xa0, 0x78, 0x02, 0x28, 0x0b, 0xd0, + 0x04, 0x28, 0x22, 0xd1, 0xa7, 0x70, 0x2f, 0x1c, + 0x40, 0x37, 0x78, 0x78, 0x02, 0x28, 0x0c, 0xd1, + 0x70, 0x7a, 0x0a, 0xf0, 0xa0, 0xfd, 0x18, 0xe0, + 0x03, 0x20, 0x3c, 0x00, 0xac, 0x80, 0x00, 0x00, + 0xa0, 0x70, 0x12, 0x49, 0x00, 0x20, 0x14, 0x39, + 0x09, 0x69, 0xf8, 0xf7, 0x90, 0xf9, 0x0f, 0xe0, + 0x2c, 0x1c, 0x07, 0xe0, 0x78, 0x78, 0x41, 0x21, + 0x22, 0x1c, 0x08, 0x55, 0x0c, 0x21, 0x80, 0x20, + 0x0b, 0xf0, 0x70, 0xfb, 0x60, 0x34, 0x60, 0x7a, + 0x04, 0xf0, 0x20, 0xff, 0x04, 0x1c, 0xf1, 0xd1, + 0x70, 0x7a, 0x40, 0x35, 0xa9, 0x8b, 0x00, 0x02, + 0x09, 0x09, 0x09, 0x04, 0x3c, 0x00, 0xe8, 0x80, + 0x00, 0x00, 0x08, 0x43, 0x81, 0x21, 0x01, 0x43, + 0x0c, 0x20, 0x0b, 0xf0, 0xa0, 0xfa, 0xf8, 0xbd, + 0x00, 0x00, 0x60, 0x7b, 0x01, 0x00, 0xf8, 0xb5, + 0x1c, 0x49, 0x05, 0x1c, 0x88, 0x6a, 0x01, 0x30, + 0x88, 0x62, 0x28, 0x1c, 0x0b, 0xf0, 0x7d, 0xfd, + 0x04, 0x1c, 0x11, 0xd0, 0x2b, 0x1c, 0x20, 0x33, + 0x1e, 0x1c, 0x5a, 0x79, 0x20, 0x1c, 0xb4, 0x30, + 0x19, 0x79, 0x14, 0x4f, 0xfd, 0xf7, 0x3c, 0x00, + 0x24, 0x81, 0x00, 0x00, 0x89, 0xf8, 0xaa, 0x7a, + 0x20, 0x1c, 0xb8, 0x30, 0xb1, 0x79, 0xfd, 0xf7, + 0xb9, 0xf8, 0x00, 0x2f, 0x04, 0xd1, 0x01, 0x21, + 0x28, 0x68, 0xfa, 0xf7, 0x6d, 0xfa, 0xf8, 0xbd, + 0x60, 0x68, 0xbc, 0x21, 0xc0, 0x8a, 0x08, 0x53, + 0x28, 0x68, 0x00, 0x21, 0xfa, 0xf7, 0x64, 0xfa, + 0x00, 0x28, 0x09, 0xd0, 0x06, 0x49, 0xc8, 0x6a, + 0x01, 0x30, 0xc8, 0x62, 0x00, 0x2c, 0xee, 0xd0, + 0x3c, 0x00, 0x60, 0x81, 0x00, 0x00, 0x20, 0x1c, + 0xf9, 0xf7, 0x47, 0xfb, 0xea, 0xe7, 0x20, 0x1c, + 0xf8, 0xf7, 0x3c, 0xf9, 0xe6, 0xe7, 0xc4, 0x69, + 0x01, 0x00, 0xa1, 0xff, 0x00, 0x00, 0xf8, 0xb5, + 0x16, 0x4c, 0x05, 0x1f, 0x00, 0x22, 0x21, 0x1c, + 0xa0, 0x31, 0x03, 0xe0, 0x28, 0x68, 0xa0, 0x42, + 0x09, 0xd0, 0x20, 0x34, 0xa1, 0x42, 0xf9, 0xd1, + 0x00, 0x2a, 0x04, 0xd1, 0x02, 0x21, 0x8e, 0x20, + 0xf9, 0xf7, 0x3c, 0x00, 0x9c, 0x81, 0x00, 0x00, + 0x83, 0xf8, 0xf8, 0xbd, 0x0d, 0x4f, 0xbe, 0x79, + 0x60, 0x69, 0x01, 0x30, 0x60, 0x61, 0xf8, 0xf7, + 0x97, 0xfd, 0xa8, 0x42, 0x07, 0xd1, 0xa0, 0x88, + 0x04, 0x30, 0xf8, 0xf7, 0x97, 0xfd, 0xe0, 0x69, + 0x01, 0x30, 0xe0, 0x61, 0x05, 0xe0, 0x20, 0x68, + 0x28, 0x60, 0x25, 0x60, 0xa0, 0x69, 0x01, 0x30, + 0xa0, 0x61, 0xbe, 0x71, 0xe5, 0xe7, 0x00, 0x00, + 0xd0, 0x5c, 0x01, 0x00, 0x3c, 0x00, 0xd8, 0x81, + 0x00, 0x00, 0x20, 0x10, 0x07, 0x00, 0x00, 0x29, + 0x01, 0xdb, 0x06, 0x29, 0x01, 0xdb, 0x02, 0x20, + 0x70, 0x47, 0x06, 0x4b, 0xc9, 0x00, 0x5a, 0x5c, + 0xc9, 0x18, 0x02, 0x70, 0x4a, 0x78, 0x42, 0x70, + 0x8a, 0x78, 0x82, 0x70, 0x49, 0x68, 0x41, 0x60, + 0x00, 0x20, 0x70, 0x47, 0x00, 0x00, 0xcc, 0x5a, + 0x01, 0x00, 0xb0, 0xb5, 0x0d, 0x1c, 0x04, 0x1c, + 0x05, 0x28, 0x01, 0xd3, 0xf9, 0xf7, 0x3c, 0x00, + 0x14, 0x82, 0x00, 0x00, 0x75, 0xf8, 0x10, 0x48, + 0x40, 0x68, 0x00, 0x28, 0x00, 0xd0, 0x03, 0x24, + 0x10, 0x2d, 0x00, 0xd3, 0x0f, 0x25, 0x06, 0x20, + 0x0b, 0x49, 0x60, 0x43, 0x12, 0x31, 0x40, 0x18, + 0x41, 0x78, 0x80, 0x78, 0x49, 0x19, 0x09, 0x06, + 0x09, 0x0e, 0x88, 0x42, 0x00, 0xd2, 0x01, 0x1c, + 0x01, 0x20, 0x88, 0x40, 0x05, 0x49, 0x01, 0x38, + 0x09, 0x68, 0x08, 0x40, 0x00, 0x04, 0x00, 0x0c, + 0x3c, 0x00, 0x50, 0x82, 0x00, 0x00, 0x02, 0xf0, + 0x44, 0xfe, 0xb0, 0xbd, 0x00, 0x00, 0xd4, 0x7a, + 0x01, 0x00, 0x08, 0x20, 0x07, 0x00, 0xb0, 0xb5, + 0x04, 0x1c, 0x0d, 0x1c, 0x09, 0xf0, 0xcf, 0xfd, + 0x00, 0x28, 0x03, 0xd1, 0x20, 0x1c, 0x09, 0xf0, + 0x82, 0xfd, 0x05, 0x61, 0xb0, 0xbd, 0x80, 0xb5, + 0x0a, 0xf0, 0x97, 0xfd, 0x03, 0x4a, 0x0c, 0x32, + 0x06, 0xca, 0x89, 0x18, 0x08, 0x1a, 0x80, 0xbd, + 0x00, 0x00, 0x3c, 0x00, 0x8c, 0x82, 0x00, 0x00, + 0xa0, 0x7d, 0x01, 0x00, 0x70, 0xb5, 0x0b, 0x4c, + 0x04, 0x9e, 0x64, 0x68, 0x0d, 0xe0, 0x65, 0x68, + 0x85, 0x42, 0x09, 0xd1, 0x20, 0x7a, 0x08, 0x70, + 0xe0, 0x68, 0x10, 0x60, 0x20, 0x69, 0x18, 0x60, + 0x20, 0x7d, 0x30, 0x80, 0x01, 0x20, 0x70, 0xbd, + 0x24, 0x68, 0x00, 0x2c, 0xef, 0xd1, 0x00, 0x20, + 0x70, 0xbd, 0x00, 0x00, 0xa4, 0x6e, 0x01, 0x00, + 0x10, 0xb5, 0x04, 0x1c, 0x3c, 0x00, 0xc8, 0x82, + 0x00, 0x00, 0x20, 0x30, 0x81, 0x7b, 0x20, 0x69, + 0x04, 0x30, 0xfd, 0xf7, 0x64, 0xf9, 0x01, 0x1c, + 0x62, 0x20, 0x02, 0x5b, 0x63, 0x6a, 0x40, 0x34, + 0x20, 0x78, 0x02, 0xf0, 0xce, 0xfd, 0x10, 0xbd, + 0x00, 0x00, 0x0b, 0x49, 0x10, 0xb5, 0x08, 0x88, + 0x8a, 0x69, 0x0a, 0x23, 0x50, 0x43, 0x58, 0x43, + 0x0e, 0xd0, 0x08, 0x4a, 0x53, 0x89, 0x94, 0x88, + 0xd2, 0x88, 0x1b, 0x19, 0x52, 0x04, 0x3c, 0x00, + 0x04, 0x83, 0x00, 0x00, 0x52, 0x0c, 0x9a, 0x18, + 0xc9, 0x68, 0x06, 0x32, 0x4a, 0x43, 0x0a, 0x21, + 0x51, 0x43, 0xf8, 0xf7, 0xfd, 0xf9, 0x10, 0xbd, + 0xc8, 0x74, 0x01, 0x00, 0x30, 0x00, 0x07, 0x00, + 0x10, 0xb5, 0x43, 0x1c, 0x01, 0xd1, 0x10, 0x48, + 0x10, 0xbd, 0x0f, 0x4a, 0x0e, 0x4b, 0x94, 0x3a, + 0x12, 0x68, 0x44, 0x3b, 0x1b, 0x7a, 0x10, 0xe0, + 0x54, 0x68, 0x84, 0x42, 0x0c, 0xd1, 0x00, 0x29, + 0x3c, 0x00, 0x40, 0x83, 0x00, 0x00, 0x0f, 0xd1, + 0x02, 0x2b, 0x03, 0xd1, 0xd4, 0x7b, 0x02, 0x2c, + 0x0a, 0xd2, 0x04, 0xe0, 0x00, 0x2b, 0x05, 0xd1, + 0xd4, 0x7b, 0xe4, 0x07, 0x04, 0xd4, 0x12, 0x68, + 0x00, 0x2a, 0xec, 0xd1, 0x00, 0x20, 0x10, 0xbd, + 0x10, 0x1c, 0x10, 0xbd, 0x00, 0x00, 0x38, 0x6f, + 0x01, 0x00, 0x01, 0x1c, 0x01, 0x20, 0x01, 0x29, + 0x00, 0xd0, 0x00, 0x20, 0x70, 0x47, 0x00, 0xb5, + 0x02, 0x1c, 0x3c, 0x00, 0x7c, 0x83, 0x00, 0x00, + 0xfd, 0xf7, 0xce, 0xf8, 0x00, 0x28, 0x08, 0xd0, + 0x10, 0x1c, 0xff, 0xf7, 0xf1, 0xff, 0x18, 0x23, + 0x03, 0x49, 0x58, 0x43, 0x40, 0x18, 0x00, 0x69, + 0x00, 0xbd, 0x00, 0x20, 0x00, 0xbd, 0x00, 0x00, + 0x94, 0x67, 0x01, 0x00, 0x80, 0xb5, 0x00, 0x28, + 0x00, 0xd1, 0x08, 0x48, 0x07, 0x49, 0x00, 0x68, + 0x50, 0x31, 0x09, 0x7a, 0x00, 0x29, 0x02, 0xd0, + 0x02, 0x29, 0x04, 0xd1, 0x3c, 0x00, 0xb8, 0x83, + 0x00, 0x00, 0x00, 0xe0, 0x01, 0x21, 0x00, 0xf0, + 0x06, 0xf8, 0x80, 0xbd, 0x00, 0x20, 0x80, 0xbd, + 0x00, 0x00, 0xa4, 0x6e, 0x01, 0x00, 0x12, 0x4a, + 0x12, 0x4b, 0x12, 0x7a, 0x2c, 0x3b, 0x00, 0x2a, + 0x03, 0xd1, 0x5a, 0x68, 0x00, 0x2a, 0x18, 0xd1, + 0x04, 0xe0, 0x02, 0x2a, 0x02, 0xd1, 0x9a, 0x68, + 0x00, 0x2a, 0x12, 0xd1, 0x00, 0x20, 0x70, 0x47, + 0xc2, 0x7b, 0x8a, 0x42, 0x01, 0xd0, 0x3c, 0x00, + 0xf4, 0x83, 0x00, 0x00, 0x03, 0x2a, 0x0a, 0xd1, + 0x82, 0x7e, 0x01, 0x2a, 0x07, 0xd1, 0x02, 0x7f, + 0x01, 0x32, 0x12, 0x06, 0x12, 0x0e, 0x02, 0x77, + 0xc3, 0x7e, 0x9a, 0x42, 0xee, 0xd2, 0x00, 0x68, + 0x00, 0x28, 0xec, 0xd1, 0x70, 0x47, 0x00, 0x00, + 0xf4, 0x6e, 0x01, 0x00, 0xf7, 0xb5, 0x84, 0x46, + 0x00, 0x20, 0x01, 0x27, 0x00, 0x24, 0x00, 0x25, + 0x88, 0xb0, 0x07, 0xe0, 0x62, 0x46, 0x52, 0x5d, + 0x3c, 0x00, 0x30, 0x84, 0x00, 0x00, 0x00, 0x2a, + 0x05, 0xd0, 0xab, 0x00, 0x6e, 0x46, 0xf2, 0x50, + 0x01, 0x35, 0x8d, 0x42, 0xf5, 0xd3, 0x00, 0x2d, + 0x00, 0xd0, 0x01, 0x20, 0x00, 0x28, 0x28, 0xd0, + 0x00, 0x27, 0x16, 0x4c, 0x6e, 0x46, 0x22, 0xe0, + 0x20, 0x1c, 0x00, 0xf0, 0x30, 0xf8, 0x01, 0x28, + 0x01, 0xd0, 0x07, 0x28, 0x06, 0xd1, 0x00, 0x21, + 0x20, 0x1c, 0x00, 0xf0, 0x34, 0xf8, 0x31, 0x68, + 0x88, 0x42, 0x3c, 0x00, 0x6c, 0x84, 0x00, 0x00, + 0x01, 0xd2, 0x02, 0x27, 0x14, 0xe0, 0x20, 0x68, + 0xc9, 0x00, 0x0c, 0x18, 0x08, 0x3c, 0x20, 0x1c, + 0x00, 0xf0, 0x1c, 0xf8, 0x07, 0x28, 0x07, 0xd1, + 0x01, 0x20, 0x01, 0x2d, 0x00, 0xd0, 0x00, 0x20, + 0x24, 0x68, 0x00, 0x28, 0x00, 0xd1, 0x08, 0x34, + 0x01, 0x3d, 0x04, 0x36, 0x00, 0x2d, 0xda, 0xd1, + 0x0a, 0x98, 0x04, 0x60, 0x0b, 0xb0, 0x38, 0x1c, + 0xf0, 0xbd, 0x00, 0x00, 0x3c, 0x00, 0xa8, 0x84, + 0x00, 0x00, 0x20, 0x52, 0x01, 0x00, 0x00, 0x68, + 0x00, 0x29, 0x01, 0xd0, 0x80, 0x02, 0x80, 0x0a, + 0x70, 0x47, 0x10, 0xb5, 0x40, 0x68, 0x80, 0x00, + 0x44, 0x0f, 0x08, 0x2c, 0x03, 0xd3, 0x02, 0x21, + 0x87, 0x20, 0xf8, 0xf7, 0xec, 0xfe, 0x20, 0x1c, + 0x10, 0xbd, 0x00, 0x29, 0x02, 0xd0, 0x00, 0x68, + 0x80, 0x0d, 0x70, 0x47, 0x40, 0x68, 0x80, 0x05, + 0x80, 0x0d, 0x70, 0x47, 0x00, 0x00, 0x3c, 0x00, + 0xe4, 0x84, 0x00, 0x00, 0x10, 0xb5, 0x40, 0x68, + 0x40, 0x01, 0x44, 0x0f, 0x05, 0x2c, 0x03, 0xd3, + 0x05, 0x21, 0x87, 0x20, 0xf8, 0xf7, 0xd6, 0xfe, + 0x20, 0x1c, 0x10, 0xbd, 0xf8, 0xb5, 0x05, 0x1c, + 0x88, 0x0a, 0x00, 0x90, 0x1c, 0x48, 0x8e, 0x05, + 0xc0, 0x69, 0xb6, 0x0d, 0x17, 0x1c, 0x1c, 0x1c, + 0x00, 0x28, 0x05, 0xd1, 0x18, 0x48, 0x81, 0x69, + 0x8d, 0x42, 0x1d, 0xd0, 0x85, 0x61, 0x11, 0xe0, + 0x3c, 0x00, 0x20, 0x85, 0x00, 0x00, 0xfd, 0xf7, + 0xe8, 0xf8, 0x15, 0x49, 0x09, 0x78, 0x0e, 0x29, + 0x07, 0xd1, 0x00, 0x28, 0x05, 0xd0, 0x11, 0x49, + 0x50, 0x31, 0x06, 0x23, 0xc9, 0x56, 0xf9, 0xf7, + 0x06, 0xfa, 0x0e, 0x49, 0x00, 0x20, 0xc8, 0x61, + 0x8d, 0x61, 0x29, 0x1c, 0x20, 0x1c, 0xf8, 0xf7, + 0xe2, 0xf8, 0x79, 0x43, 0x20, 0x1c, 0xf8, 0xf7, + 0xde, 0xf8, 0x08, 0x48, 0x41, 0x61, 0x20, 0x1c, + 0x00, 0x99, 0x3c, 0x00, 0x5c, 0x85, 0x00, 0x00, + 0xf8, 0xf7, 0xd8, 0xf8, 0x05, 0x48, 0x40, 0x69, + 0x0a, 0x18, 0xa2, 0x42, 0x01, 0xd2, 0x40, 0x18, + 0x01, 0xe0, 0x40, 0x18, 0x00, 0x1b, 0x80, 0x02, + 0x80, 0x19, 0xf8, 0xbd, 0xac, 0x7c, 0x01, 0x00, + 0x11, 0x67, 0x01, 0x00, 0xf8, 0xb5, 0x0f, 0x1c, + 0x06, 0x1c, 0x14, 0x1c, 0x1d, 0x1c, 0x07, 0xf0, + 0xa1, 0xfc, 0x0e, 0x28, 0x09, 0xd1, 0x20, 0x1c, + 0x02, 0xf0, 0xfc, 0xfb, 0x3c, 0x00, 0x98, 0x85, + 0x00, 0x00, 0x00, 0x28, 0x04, 0xd0, 0x08, 0x48, + 0x00, 0x78, 0x02, 0xf0, 0xe4, 0xfb, 0x04, 0x1c, + 0x01, 0x21, 0x00, 0x2e, 0xac, 0x72, 0x00, 0xd0, + 0x39, 0x1c, 0x20, 0x1c, 0x02, 0xf0, 0x07, 0xfc, + 0x28, 0x60, 0x00, 0x20, 0x28, 0x72, 0x6c, 0x72, + 0xf8, 0xbd, 0x90, 0x57, 0x01, 0x00, 0x03, 0x1c, + 0x0a, 0x48, 0x10, 0xb5, 0x00, 0x24, 0x02, 0x1c, + 0xa0, 0x32, 0x03, 0xe0, 0x81, 0x88, 0x3c, 0x00, + 0xd4, 0x85, 0x00, 0x00, 0x99, 0x42, 0x09, 0xd2, + 0x20, 0x30, 0x82, 0x42, 0xf9, 0xd1, 0x00, 0x2c, + 0x04, 0xd1, 0x02, 0x21, 0x8e, 0x20, 0xf8, 0xf7, + 0x5d, 0xfe, 0x00, 0x20, 0x10, 0xbd, 0x00, 0x00, + 0xd0, 0x5c, 0x01, 0x00, 0xff, 0xb5, 0x06, 0x1c, + 0x00, 0x20, 0x81, 0xb0, 0x10, 0x60, 0x1f, 0x1c, + 0x01, 0x25, 0x14, 0x1c, 0x30, 0x1c, 0xff, 0xf7, + 0x6d, 0xff, 0x05, 0x28, 0x12, 0xd2, 0x02, 0xa3, + 0x3c, 0x00, 0x10, 0x86, 0x00, 0x00, 0x1b, 0x5c, + 0x5b, 0x00, 0x9f, 0x44, 0x00, 0x00, 0x03, 0x03, + 0x03, 0x03, 0x08, 0x00, 0x39, 0x1c, 0x30, 0x1c, + 0xff, 0xf7, 0x55, 0xff, 0x03, 0xe0, 0x02, 0x98, + 0xf8, 0xf7, 0xeb, 0xf8, 0x01, 0x30, 0x20, 0x60, + 0x04, 0xe0, 0x05, 0x21, 0x87, 0x20, 0xf8, 0xf7, + 0x34, 0xfe, 0x00, 0x25, 0x20, 0x68, 0x80, 0x28, + 0x04, 0xd9, 0x06, 0x21, 0x87, 0x20, 0xf8, 0xf7, + 0x2c, 0xfe, 0x3c, 0x00, 0x4c, 0x86, 0x00, 0x00, + 0x00, 0x25, 0x28, 0x1c, 0x05, 0xb0, 0xf0, 0xbd, + 0x70, 0xb5, 0x17, 0x4c, 0x60, 0x6c, 0x00, 0x28, + 0x01, 0xd0, 0x01, 0x20, 0x1d, 0xe0, 0x16, 0x4e, + 0x14, 0x4d, 0x31, 0x88, 0xa0, 0x6c, 0x00, 0x28, + 0x08, 0xd0, 0x28, 0x78, 0x81, 0x42, 0x05, 0xd9, + 0xf8, 0xf7, 0x4c, 0xf8, 0x01, 0x38, 0xfa, 0xf7, + 0x51, 0xfe, 0x0e, 0xe0, 0xe0, 0x6c, 0x00, 0x28, + 0x0a, 0xd0, 0x00, 0x20, 0x3c, 0x00, 0x88, 0x86, + 0x00, 0x00, 0xfa, 0xf7, 0x4a, 0xfe, 0x29, 0x78, + 0x32, 0x88, 0x91, 0x42, 0x04, 0xd9, 0x90, 0x42, + 0x02, 0xd9, 0x10, 0x1c, 0x00, 0xe0, 0x08, 0x1c, + 0xfa, 0xf7, 0xdf, 0xfd, 0xe1, 0x6b, 0x44, 0x1a, + 0x0a, 0xf0, 0x81, 0xfb, 0x20, 0x1a, 0x00, 0xd5, + 0x00, 0x20, 0x70, 0xbd, 0x00, 0x00, 0x44, 0x7d, + 0x01, 0x00, 0xf8, 0x60, 0x01, 0x00, 0xfc, 0x60, + 0x01, 0x00, 0xff, 0xb5, 0x27, 0x4e, 0x3c, 0x00, + 0xc4, 0x86, 0x00, 0x00, 0x04, 0x1c, 0xb0, 0x79, + 0x0f, 0x1c, 0x15, 0x1c, 0x81, 0xb0, 0x00, 0x90, + 0x0a, 0xf0, 0x6c, 0xfb, 0xc1, 0x19, 0x23, 0x48, + 0x07, 0x68, 0x00, 0x2f, 0x05, 0xd1, 0x0a, 0x21, + 0x80, 0x20, 0xf8, 0xf7, 0xdf, 0xfd, 0x05, 0xb0, + 0xf0, 0xbd, 0x1e, 0x48, 0x40, 0x68, 0x84, 0x46, + 0x00, 0x28, 0x01, 0xd1, 0x00, 0x22, 0x0e, 0xe0, + 0x82, 0x68, 0x03, 0x68, 0xab, 0x42, 0x07, 0xd1, + 0x3c, 0x00, 0x00, 0x87, 0x00, 0x00, 0x03, 0x79, + 0xa3, 0x42, 0x04, 0xd1, 0x0b, 0x21, 0x80, 0x20, + 0xf8, 0xf7, 0xcb, 0xfd, 0x23, 0xe0, 0xc0, 0x68, + 0x00, 0x28, 0xf1, 0xd1, 0x13, 0x4b, 0xf8, 0x68, + 0x18, 0x60, 0x3d, 0x60, 0x3c, 0x71, 0xb9, 0x60, + 0x04, 0x98, 0x8d, 0x1a, 0x38, 0x61, 0x60, 0x46, + 0x00, 0x23, 0x05, 0xe0, 0x84, 0x68, 0xa4, 0x1a, + 0xac, 0x42, 0x03, 0xda, 0x03, 0x1c, 0xc0, 0x68, + 0x00, 0x28, 0x3c, 0x00, 0x3c, 0x87, 0x00, 0x00, + 0xf7, 0xd1, 0xf8, 0x60, 0x00, 0x2b, 0x08, 0xd1, + 0x07, 0x48, 0x3b, 0x1c, 0x47, 0x60, 0x08, 0x48, + 0x06, 0x4a, 0x00, 0x88, 0x0a, 0xf0, 0x8a, 0xfb, + 0x00, 0xe0, 0xdf, 0x60, 0x00, 0x98, 0xb0, 0x71, + 0xc3, 0xe7, 0x00, 0x00, 0x20, 0x10, 0x07, 0x00, + 0x7c, 0x5d, 0x01, 0x00, 0x21, 0x38, 0x01, 0x00, + 0x2c, 0x74, 0x01, 0x00, 0xf3, 0xb5, 0x83, 0xb0, + 0x04, 0x1c, 0x09, 0xd0, 0x3c, 0x00, 0x78, 0x87, + 0x00, 0x00, 0x20, 0x1c, 0x04, 0x99, 0x09, 0xf0, + 0x8e, 0xfb, 0x00, 0x28, 0x03, 0xd0, 0x20, 0x1c, + 0x30, 0x30, 0x05, 0xb0, 0xf0, 0xbd, 0x0a, 0xf0, + 0x0e, 0xfb, 0x1e, 0x4a, 0x00, 0x26, 0x04, 0x9f, + 0x01, 0x96, 0x00, 0x90, 0x02, 0x92, 0x02, 0x9c, + 0x00, 0x25, 0x39, 0x1c, 0x20, 0x1c, 0x14, 0x30, + 0x02, 0xf0, 0xc5, 0xfa, 0x00, 0x28, 0x01, 0xd0, + 0x26, 0x1c, 0x03, 0xe0, 0x01, 0x35, 0x3c, 0x00, + 0xb4, 0x87, 0x00, 0x00, 0x1c, 0x34, 0x04, 0x2d, + 0xf2, 0xd3, 0x00, 0x2e, 0x22, 0xd1, 0x01, 0x98, + 0x13, 0x4f, 0x01, 0x30, 0x01, 0x90, 0x02, 0x28, + 0xe8, 0xd3, 0x01, 0x21, 0xc9, 0x06, 0x02, 0x9a, + 0x00, 0x20, 0x13, 0x69, 0x00, 0x9c, 0xe3, 0x1a, + 0x8b, 0x42, 0x01, 0xdd, 0x19, 0x1c, 0x16, 0x1c, + 0x01, 0x30, 0x1c, 0x32, 0x04, 0x28, 0xf4, 0xd3, + 0x30, 0x68, 0x00, 0x28, 0x01, 0xd0, 0xf8, 0xf7, + 0x3c, 0x00, 0xf0, 0x87, 0x00, 0x00, 0xd3, 0xfe, + 0x30, 0x1c, 0xfd, 0xf7, 0x4a, 0xff, 0x30, 0x1c, + 0x14, 0x30, 0x06, 0x22, 0x04, 0x99, 0xf7, 0xf7, + 0x7a, 0xfe, 0x00, 0x9c, 0x30, 0x1c, 0x34, 0x61, + 0xbd, 0xe7, 0x30, 0x6a, 0x01, 0x00, 0x34, 0x42, + 0x01, 0x00, 0x09, 0x49, 0x10, 0xb5, 0x4c, 0x69, + 0x03, 0xe0, 0xe1, 0x68, 0x81, 0x42, 0x03, 0xd0, + 0x24, 0x68, 0x00, 0x2c, 0xf9, 0xd1, 0x01, 0xe0, + 0x00, 0x2c, 0x3c, 0x00, 0x2c, 0x88, 0x00, 0x00, + 0x03, 0xd1, 0x02, 0x21, 0x02, 0x20, 0xf8, 0xf7, + 0x37, 0xfd, 0x20, 0x1c, 0x10, 0xbd, 0x00, 0x00, + 0xfc, 0x5a, 0x01, 0x00, 0x10, 0xb5, 0xc3, 0x07, + 0x06, 0xd5, 0x08, 0x4b, 0x5c, 0x69, 0x0c, 0x43, + 0x5c, 0x61, 0x1c, 0x7e, 0x14, 0x43, 0x1c, 0x76, + 0x80, 0x07, 0x06, 0xd5, 0x04, 0x48, 0x43, 0x69, + 0x19, 0x43, 0x41, 0x61, 0x01, 0x7e, 0x11, 0x43, + 0x01, 0x76, 0x10, 0xbd, 0x3c, 0x00, 0x68, 0x88, + 0x00, 0x00, 0xfc, 0x57, 0x01, 0x00, 0x18, 0x58, + 0x01, 0x00, 0x70, 0xb5, 0x0d, 0x1c, 0x04, 0x1c, + 0x16, 0x1c, 0x00, 0xf0, 0x08, 0xf8, 0xa0, 0x07, + 0xc0, 0x17, 0x01, 0x30, 0x32, 0x1c, 0x29, 0x1c, + 0x00, 0xf0, 0x21, 0xf8, 0x70, 0xbd, 0x10, 0xb5, + 0xc3, 0x07, 0x06, 0xd5, 0x08, 0x4b, 0x5c, 0x69, + 0x8c, 0x43, 0x5c, 0x61, 0x1c, 0x7e, 0x94, 0x43, + 0x1c, 0x76, 0x80, 0x07, 0x06, 0xd5, 0x3c, 0x00, + 0xa4, 0x88, 0x00, 0x00, 0x04, 0x48, 0x43, 0x69, + 0x8b, 0x43, 0x43, 0x61, 0x01, 0x7e, 0x91, 0x43, + 0x01, 0x76, 0x10, 0xbd, 0xfc, 0x57, 0x01, 0x00, + 0x18, 0x58, 0x01, 0x00, 0x03, 0x22, 0x11, 0x1f, + 0x80, 0xb5, 0x01, 0x20, 0x00, 0xf0, 0x02, 0xf8, + 0x80, 0xbd, 0x00, 0x00, 0x30, 0xb5, 0x15, 0x1c, + 0x0c, 0x1c, 0x00, 0x28, 0x87, 0xb0, 0x02, 0xd0, + 0x1c, 0x22, 0x22, 0x49, 0x01, 0xe0, 0x22, 0x49, + 0x3c, 0x00, 0xe0, 0x88, 0x00, 0x00, 0x1c, 0x22, + 0x68, 0x46, 0xf7, 0xf7, 0x64, 0xfe, 0x05, 0x99, + 0x00, 0xab, 0x1a, 0x7e, 0x8c, 0x43, 0x20, 0x1c, + 0x95, 0x43, 0x02, 0x9a, 0x29, 0x1c, 0x02, 0x40, + 0x02, 0x92, 0x01, 0x9a, 0x02, 0x40, 0x01, 0x92, + 0x00, 0x9a, 0x02, 0x40, 0x00, 0x92, 0x03, 0x9a, + 0x02, 0x40, 0x03, 0x92, 0x98, 0x7c, 0x08, 0x40, + 0x98, 0x74, 0x58, 0x7c, 0x08, 0x40, 0x58, 0x74, + 0x18, 0x7c, 0x3c, 0x00, 0x1c, 0x89, 0x00, 0x00, + 0x08, 0x40, 0x18, 0x74, 0xd8, 0x7c, 0x08, 0x40, + 0xd8, 0x74, 0x02, 0x99, 0x10, 0x48, 0x41, 0x61, + 0x01, 0xaa, 0x06, 0xca, 0x91, 0x43, 0x81, 0x61, + 0x81, 0x68, 0x01, 0x9a, 0x11, 0x43, 0x81, 0x60, + 0x81, 0x68, 0x00, 0x9a, 0x91, 0x43, 0x81, 0x60, + 0x00, 0xaa, 0x06, 0xca, 0x11, 0x43, 0x42, 0x68, + 0x11, 0x43, 0x41, 0x60, 0x41, 0x68, 0x03, 0x9a, + 0x91, 0x43, 0x41, 0x60, 0x3c, 0x00, 0x58, 0x89, + 0x00, 0x00, 0x04, 0xa8, 0x0b, 0xf0, 0x01, 0xf8, + 0x07, 0xb0, 0x30, 0xbd, 0x00, 0x00, 0xfc, 0x57, + 0x01, 0x00, 0x18, 0x58, 0x01, 0x00, 0x10, 0x00, + 0x07, 0x00, 0x10, 0xb5, 0x04, 0x1c, 0x01, 0x1c, + 0x01, 0x20, 0x08, 0xf0, 0xe0, 0xf9, 0x00, 0x2c, + 0x02, 0xd0, 0x03, 0xf0, 0x1c, 0xff, 0x10, 0xbd, + 0xfe, 0xf7, 0xd1, 0xfc, 0x10, 0xbd, 0xf0, 0xb5, + 0x0c, 0x1c, 0x01, 0x0e, 0x01, 0x23, 0x3c, 0x00, + 0x94, 0x89, 0x00, 0x00, 0x1b, 0x06, 0x09, 0x06, + 0x99, 0x42, 0x9f, 0xb0, 0x28, 0xd1, 0x17, 0x49, + 0x08, 0x40, 0x00, 0x21, 0x1a, 0x28, 0x00, 0xd3, + 0x02, 0x21, 0x00, 0x29, 0x19, 0xd1, 0xc5, 0x00, + 0x13, 0x4f, 0x10, 0xa8, 0xee, 0x19, 0xb2, 0x88, + 0x21, 0x68, 0xf7, 0xf7, 0x9d, 0xfd, 0x20, 0x1c, + 0xf8, 0xf7, 0xea, 0xfd, 0x7a, 0x59, 0x01, 0xa9, + 0x10, 0xa8, 0xf7, 0xf7, 0x07, 0xfd, 0x00, 0x28, + 0x3c, 0x00, 0xd0, 0x89, 0x00, 0x00, 0x05, 0xd0, + 0x10, 0x98, 0x01, 0xa9, 0x01, 0x90, 0xb0, 0x79, + 0x00, 0xf0, 0x9d, 0xf8, 0x1f, 0xb0, 0xf0, 0xbd, + 0x2a, 0x20, 0xf8, 0xf7, 0x5e, 0xfc, 0x20, 0x1c, + 0xf8, 0xf7, 0xd5, 0xfd, 0xf6, 0xe7, 0x03, 0x21, + 0x2a, 0x20, 0xf8, 0xf7, 0x56, 0xfc, 0xf1, 0xe7, + 0x00, 0x00, 0x7f, 0xff, 0xff, 0x00, 0x24, 0x45, + 0x01, 0x00, 0x10, 0xb5, 0x0c, 0x1c, 0x80, 0x28, + 0x02, 0xd0, 0x3c, 0x00, 0x0c, 0x8a, 0x00, 0x00, + 0x81, 0x28, 0x08, 0xd1, 0x03, 0xe0, 0x20, 0x1c, + 0x00, 0xf0, 0x06, 0xf9, 0x10, 0xbd, 0x20, 0x1c, + 0xf8, 0xf7, 0xbc, 0xfd, 0x10, 0xbd, 0x03, 0x21, + 0x2c, 0x20, 0xf8, 0xf7, 0x3d, 0xfc, 0xf6, 0xe7, + 0xf0, 0xb5, 0x0c, 0x1c, 0x00, 0x21, 0x8b, 0xb0, + 0x0a, 0x91, 0x01, 0x0e, 0x01, 0x23, 0x1b, 0x06, + 0x09, 0x06, 0x99, 0x42, 0x2a, 0xd1, 0x18, 0x49, + 0x08, 0x40, 0x06, 0x1c, 0x3c, 0x00, 0x48, 0x8a, + 0x00, 0x00, 0x06, 0x2e, 0x01, 0xd3, 0x07, 0x21, + 0x24, 0xe0, 0x20, 0x89, 0xf8, 0xf7, 0xf1, 0xfe, + 0x22, 0x89, 0x21, 0x68, 0x05, 0x1c, 0xf7, 0xf7, + 0x4c, 0xfd, 0x20, 0x1c, 0xf8, 0xf7, 0x99, 0xfd, + 0xf4, 0x00, 0x0f, 0x4e, 0x28, 0x1c, 0x0a, 0xaa, + 0x69, 0x46, 0x33, 0x59, 0xf7, 0xf7, 0xb4, 0xfc, + 0x00, 0x28, 0x01, 0xd0, 0x01, 0x28, 0x07, 0xd1, + 0x28, 0x68, 0x69, 0x46, 0x00, 0x90, 0x3c, 0x00, + 0x84, 0x8a, 0x00, 0x00, 0xa0, 0x19, 0x00, 0x79, + 0x0a, 0x9a, 0x00, 0xf0, 0x09, 0xf9, 0x28, 0x1c, + 0xf8, 0xf7, 0xb0, 0xfe, 0x0b, 0xb0, 0xf0, 0xbd, + 0x01, 0x21, 0x2b, 0x20, 0xf8, 0xf7, 0x02, 0xfc, + 0xf8, 0xe7, 0x00, 0x00, 0x7f, 0xff, 0xff, 0x00, + 0x28, 0x46, 0x01, 0x00, 0x0a, 0x1c, 0x01, 0x0e, + 0x01, 0x23, 0x1b, 0x06, 0x09, 0x06, 0x99, 0x42, + 0x80, 0xb5, 0x08, 0xd0, 0x5b, 0x00, 0x99, 0x42, + 0x3c, 0x00, 0xc0, 0x8a, 0x00, 0x00, 0x0b, 0xd1, + 0x00, 0x06, 0x00, 0x0e, 0x11, 0x1c, 0x00, 0xf0, + 0x0e, 0xf9, 0x80, 0xbd, 0x05, 0x49, 0x01, 0x40, + 0x10, 0x1c, 0x05, 0xf0, 0xa2, 0xf9, 0x80, 0xbd, + 0x01, 0x21, 0x2d, 0x20, 0xf8, 0xf7, 0xe1, 0xfb, + 0x80, 0xbd, 0x7f, 0xff, 0xff, 0x00, 0x80, 0xb5, + 0x01, 0x1c, 0x0f, 0x20, 0x00, 0xf0, 0x13, 0xf8, + 0x80, 0xbd, 0x80, 0xb5, 0x01, 0x1c, 0x04, 0x20, + 0x00, 0xf0, 0x3c, 0x00, 0xfc, 0x8a, 0x00, 0x00, + 0x0d, 0xf8, 0x80, 0xbd, 0x80, 0xb5, 0x01, 0x1c, + 0x17, 0x20, 0x00, 0xf0, 0x07, 0xf8, 0x80, 0xbd, + 0x80, 0xb5, 0x01, 0x1c, 0x01, 0x20, 0x00, 0xf0, + 0x01, 0xf8, 0x80, 0xbd, 0xf8, 0xb5, 0x04, 0x1c, + 0x06, 0x1c, 0x80, 0x20, 0x84, 0x43, 0x0f, 0x1c, + 0x19, 0x2c, 0x01, 0xd3, 0xf8, 0xf7, 0xea, 0xfb, + 0x08, 0x48, 0x04, 0x5d, 0x21, 0x1c, 0x00, 0x20, + 0xf8, 0xf7, 0x50, 0xfd, 0x3c, 0x00, 0x38, 0x8b, + 0x00, 0x00, 0x05, 0x1c, 0x22, 0x1c, 0x39, 0x1c, + 0x00, 0x68, 0xf7, 0xf7, 0xda, 0xfc, 0x2a, 0x1c, + 0x31, 0x1c, 0x07, 0x20, 0xf8, 0xf7, 0x11, 0xf9, + 0xf8, 0xbd, 0xf4, 0x45, 0x01, 0x00, 0xf8, 0xb5, + 0x0d, 0x1c, 0x16, 0x1c, 0x04, 0x1c, 0x1f, 0x1c, + 0x08, 0x21, 0x00, 0x20, 0xf8, 0xf7, 0x39, 0xfd, + 0x14, 0x22, 0x01, 0x68, 0x0e, 0x4b, 0x72, 0x43, + 0xd2, 0x18, 0x0c, 0x71, 0x12, 0x7c, 0x3c, 0x00, + 0x74, 0x8b, 0x00, 0x00, 0x4a, 0x71, 0x0d, 0x60, + 0x0b, 0x4a, 0x8f, 0x71, 0x12, 0x68, 0x7f, 0x2a, + 0x03, 0xd9, 0x52, 0x05, 0x52, 0x0e, 0x80, 0x23, + 0x1a, 0x43, 0xca, 0x71, 0x07, 0x4a, 0x00, 0x23, + 0x51, 0x68, 0x01, 0x31, 0x51, 0x60, 0x02, 0x1c, + 0x81, 0x21, 0x00, 0x20, 0xf8, 0xf7, 0x08, 0xf9, + 0xf8, 0xbd, 0x00, 0x00, 0x74, 0x40, 0x01, 0x00, + 0xfc, 0x5a, 0x01, 0x00, 0x80, 0x6e, 0x01, 0x00, + 0x3c, 0x00, 0xb0, 0x8b, 0x00, 0x00, 0xb0, 0xb5, + 0x04, 0x1c, 0x08, 0x21, 0x00, 0x20, 0xf8, 0xf7, + 0x0e, 0xfd, 0x21, 0x8b, 0xe2, 0x7d, 0x05, 0x1c, + 0x09, 0x05, 0x52, 0x07, 0x52, 0x0f, 0x49, 0x0c, + 0x00, 0x68, 0x11, 0x43, 0x81, 0x80, 0xa1, 0x7d, + 0x14, 0x23, 0x0e, 0x4a, 0x59, 0x43, 0x89, 0x18, + 0x09, 0x7c, 0xc1, 0x71, 0xe1, 0x6a, 0x01, 0x60, + 0xe1, 0x68, 0x28, 0x1c, 0xf8, 0xf7, 0x17, 0xfc, + 0x0a, 0x48, 0x3c, 0x00, 0xec, 0x8b, 0x00, 0x00, + 0x00, 0x68, 0x00, 0x28, 0x01, 0xd0, 0xf7, 0xf7, + 0xf1, 0xfb, 0x07, 0x49, 0x04, 0x31, 0x88, 0x68, + 0x01, 0x30, 0x88, 0x60, 0x00, 0x21, 0x2a, 0x1c, + 0x00, 0x20, 0x23, 0x6b, 0xf8, 0xf7, 0xd2, 0xf8, + 0x01, 0x20, 0xb0, 0xbd, 0x74, 0x40, 0x01, 0x00, + 0x7c, 0x6e, 0x01, 0x00, 0x01, 0x48, 0x80, 0x68, + 0x70, 0x47, 0x00, 0x00, 0x80, 0x6e, 0x01, 0x00, + 0x10, 0xb5, 0x04, 0x1c, 0x3c, 0x00, 0x28, 0x8c, + 0x00, 0x00, 0x92, 0xb0, 0x01, 0x68, 0x68, 0x46, + 0x08, 0x22, 0xf7, 0xf7, 0x62, 0xfc, 0x00, 0xab, + 0x98, 0x88, 0x40, 0x07, 0x40, 0x0f, 0xd8, 0x77, + 0x98, 0x88, 0x40, 0x04, 0x00, 0x0d, 0x18, 0x84, + 0xd8, 0x88, 0x58, 0x84, 0x00, 0x98, 0x0d, 0x90, + 0x05, 0x94, 0x20, 0x89, 0x08, 0x38, 0x20, 0x81, + 0x05, 0x98, 0x01, 0x68, 0x08, 0x31, 0x01, 0x60, + 0x00, 0x20, 0x0a, 0x90, 0x0c, 0x90, 0x3c, 0x00, + 0x64, 0x8c, 0x00, 0x00, 0x00, 0x21, 0x11, 0x20, + 0x09, 0xf0, 0x78, 0xfb, 0x05, 0x49, 0x06, 0x4a, + 0x08, 0x68, 0x01, 0x30, 0x08, 0x60, 0x02, 0x21, + 0x02, 0xa8, 0x01, 0xf0, 0xcd, 0xfc, 0x12, 0xb0, + 0x10, 0xbd, 0x00, 0x00, 0x80, 0x6e, 0x01, 0x00, + 0x55, 0x8b, 0x00, 0x00, 0x02, 0x1c, 0x01, 0x20, + 0x00, 0x06, 0x08, 0x43, 0x80, 0xb5, 0x2b, 0x21, + 0x0a, 0xf0, 0x8a, 0xfd, 0x80, 0xbd, 0x00, 0x00, + 0x3c, 0x00, 0xa0, 0x8c, 0x00, 0x00, 0xf7, 0xb5, + 0x04, 0x1c, 0x06, 0x1c, 0x80, 0x20, 0x84, 0x43, + 0x17, 0x1c, 0x06, 0x2c, 0x01, 0xd3, 0xf8, 0xf7, + 0x26, 0xfb, 0x0b, 0x48, 0x05, 0x5d, 0x29, 0x1c, + 0x00, 0x20, 0xf8, 0xf7, 0x8c, 0xfc, 0x04, 0x1c, + 0x00, 0x68, 0x01, 0x99, 0x2a, 0x1c, 0xf7, 0xf7, + 0x16, 0xfc, 0x39, 0x1c, 0x20, 0x1c, 0xf8, 0xf7, + 0xa2, 0xfb, 0x22, 0x1c, 0x31, 0x1c, 0x00, 0x23, + 0x02, 0x20, 0x3c, 0x00, 0xdc, 0x8c, 0x00, 0x00, + 0xf8, 0xf7, 0x68, 0xf8, 0xfe, 0xbd, 0x00, 0x00, + 0x20, 0x46, 0x01, 0x00, 0x0a, 0x1c, 0x01, 0x1c, + 0x80, 0xb5, 0x00, 0x23, 0x01, 0x20, 0xf8, 0xf7, + 0x5d, 0xf8, 0x80, 0xbd, 0xff, 0xb5, 0x9f, 0xb0, + 0x1f, 0x1c, 0x05, 0x1c, 0x0a, 0x30, 0x1e, 0x90, + 0x1c, 0xaa, 0x1d, 0xa9, 0x0a, 0xf0, 0x00, 0xff, + 0x00, 0x28, 0x71, 0xd0, 0x00, 0x2f, 0x09, 0xd0, + 0x0a, 0x21, 0x00, 0x20, 0x3c, 0x00, 0x18, 0x8d, + 0x00, 0x00, 0xf8, 0xf7, 0x5e, 0xfc, 0x06, 0x68, + 0x04, 0x1c, 0x30, 0x1d, 0xfa, 0xf7, 0xaf, 0xfa, + 0x05, 0xe0, 0x04, 0x21, 0x00, 0x20, 0xf8, 0xf7, + 0x54, 0xfc, 0x06, 0x68, 0x04, 0x1c, 0x28, 0x89, + 0x36, 0x49, 0x01, 0x22, 0x08, 0x80, 0x70, 0x80, + 0xe8, 0x88, 0x14, 0xa9, 0x30, 0x80, 0x19, 0xa8, + 0xfc, 0xf7, 0xf5, 0xfc, 0xfc, 0xf7, 0xff, 0xfb, + 0x01, 0x1c, 0xff, 0x31, 0x21, 0x31, 0x3c, 0x00, + 0x54, 0x8d, 0x00, 0x00, 0x20, 0x1c, 0x01, 0xf0, + 0xef, 0xf8, 0x19, 0xa9, 0x20, 0x1c, 0x01, 0xf0, + 0xeb, 0xf8, 0x14, 0xa9, 0x20, 0x1c, 0x01, 0xf0, + 0xe7, 0xf8, 0x20, 0x1c, 0x20, 0x99, 0xfd, 0xf7, + 0x4b, 0xfd, 0x00, 0x22, 0x02, 0x21, 0x01, 0xf0, + 0x33, 0xfd, 0x06, 0x1c, 0x1c, 0x99, 0x00, 0x20, + 0x88, 0x61, 0x30, 0x1c, 0xf8, 0xf7, 0x1c, 0xfa, + 0x00, 0x2e, 0x0b, 0xd0, 0x30, 0x7a, 0x00, 0x28, + 0x3c, 0x00, 0x90, 0x8d, 0x00, 0x00, 0x02, 0xd0, + 0x40, 0x21, 0x08, 0x43, 0x30, 0x72, 0x1c, 0x98, + 0x02, 0x22, 0x81, 0x69, 0x11, 0x43, 0x81, 0x61, + 0x04, 0xe0, 0x1c, 0x99, 0x02, 0x22, 0x88, 0x69, + 0x90, 0x43, 0x88, 0x61, 0x1d, 0xaa, 0x06, 0xca, + 0x01, 0xa8, 0x05, 0xf0, 0x58, 0xfb, 0x09, 0xa8, + 0x00, 0x2f, 0x02, 0xd0, 0x02, 0x22, 0x42, 0x72, + 0x01, 0xe0, 0x00, 0x21, 0x41, 0x72, 0x04, 0x94, + 0x01, 0xa8, 0x3c, 0x00, 0xcc, 0x8d, 0x00, 0x00, + 0x04, 0xf0, 0x7a, 0xfb, 0x01, 0x21, 0x1c, 0x98, + 0x08, 0xf0, 0xc8, 0xff, 0x00, 0x2f, 0x04, 0xd0, + 0x1c, 0x98, 0x01, 0x22, 0x81, 0x69, 0x11, 0x43, + 0x81, 0x61, 0xa8, 0x88, 0x1c, 0x9c, 0x01, 0xf0, + 0x9f, 0xfe, 0x02, 0x1c, 0x21, 0x1c, 0x00, 0xe0, + 0x04, 0xe0, 0x07, 0x48, 0x40, 0x88, 0x09, 0xf0, + 0x1f, 0xf8, 0x04, 0xe0, 0x3a, 0x1c, 0x00, 0x21, + 0x05, 0x20, 0xf9, 0xf7, 0x3c, 0x00, 0x08, 0x8e, + 0x00, 0x00, 0x9b, 0xf8, 0x00, 0x20, 0x23, 0xb0, + 0xf0, 0xbd, 0xfc, 0x60, 0x01, 0x00, 0x98, 0x7c, + 0x01, 0x00, 0xf8, 0xb5, 0x04, 0x1c, 0xc0, 0x68, + 0x05, 0x68, 0xa0, 0x1d, 0x01, 0xf0, 0x95, 0xff, + 0x00, 0x28, 0x45, 0xd0, 0x21, 0x1c, 0x14, 0x31, + 0x20, 0x1c, 0x6a, 0x46, 0x0a, 0xf0, 0x55, 0xfe, + 0x00, 0x28, 0x3d, 0xd0, 0xfc, 0xf7, 0x7d, 0xfa, + 0x00, 0x28, 0x39, 0xd1, 0x00, 0x98, 0x3c, 0x00, + 0x44, 0x8e, 0x00, 0x00, 0x4b, 0x21, 0x09, 0x5c, + 0x01, 0x29, 0x34, 0xd1, 0x04, 0x26, 0x09, 0xf0, + 0x19, 0xf9, 0x68, 0x88, 0x00, 0x28, 0x1b, 0xd1, + 0xa8, 0x88, 0x03, 0x21, 0x89, 0x03, 0x88, 0x43, + 0x15, 0x49, 0x00, 0x26, 0x08, 0x80, 0x01, 0x22, + 0x02, 0x21, 0x20, 0x69, 0x01, 0xf0, 0xb8, 0xfc, + 0x04, 0x1c, 0x14, 0xd0, 0x00, 0x98, 0x80, 0x69, + 0x80, 0x07, 0x10, 0xd5, 0xf8, 0xf7, 0x9a, 0xf9, + 0x3c, 0x00, 0x80, 0x8e, 0x00, 0x00, 0x20, 0x1c, + 0xf8, 0xf7, 0xdd, 0xf8, 0x00, 0x28, 0x09, 0xd1, + 0xf8, 0xf7, 0x7f, 0xf9, 0x01, 0x26, 0x00, 0x98, + 0x02, 0x22, 0x81, 0x69, 0x91, 0x43, 0x81, 0x61, + 0x00, 0x21, 0x01, 0xe0, 0x00, 0x98, 0x02, 0x21, + 0x08, 0xf0, 0x61, 0xff, 0x00, 0x98, 0x80, 0x69, + 0xa9, 0x88, 0xc2, 0x07, 0xd2, 0x0f, 0x30, 0x1c, + 0xf9, 0xf7, 0x45, 0xf8, 0xf8, 0xbd, 0xfa, 0x60, + 0x01, 0x00, 0x3c, 0x00, 0xbc, 0x8e, 0x00, 0x00, + 0x1c, 0xb5, 0x04, 0x69, 0x00, 0x23, 0x00, 0x22, + 0x00, 0x2c, 0x13, 0xd1, 0x4b, 0x24, 0x24, 0x5c, + 0x02, 0x2c, 0x03, 0xd1, 0x02, 0x29, 0x05, 0xd0, + 0x01, 0x22, 0x03, 0xe0, 0x02, 0x29, 0x01, 0xd1, + 0x01, 0x22, 0x01, 0x23, 0x00, 0x2a, 0x05, 0xd0, + 0x00, 0x90, 0x04, 0x20, 0x01, 0x93, 0x69, 0x46, + 0x09, 0xf0, 0x36, 0xfa, 0x1c, 0xbd, 0x00, 0x00, + 0xb0, 0xb5, 0x04, 0x1c, 0x3c, 0x00, 0xf8, 0x8e, + 0x00, 0x00, 0xf2, 0x21, 0x0f, 0x20, 0x0c, 0x4d, + 0x0a, 0xf0, 0x99, 0xfb, 0x28, 0x78, 0x08, 0x28, + 0x0b, 0xd2, 0x01, 0xa3, 0x1b, 0x5c, 0x5b, 0x00, + 0x9f, 0x44, 0x07, 0x03, 0x03, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x00, 0x2c, 0x01, 0xd1, 0x05, 0xf0, + 0xbc, 0xfb, 0xb0, 0xbd, 0x01, 0x2c, 0xfc, 0xd1, + 0xff, 0x20, 0x07, 0xf0, 0x38, 0xfa, 0xb0, 0xbd, + 0x00, 0x00, 0x74, 0x66, 0x01, 0x00, 0x3c, 0x00, + 0x34, 0x8f, 0x00, 0x00, 0x8c, 0xb5, 0x05, 0x4a, + 0x00, 0xab, 0x11, 0x72, 0x00, 0x90, 0x19, 0x71, + 0x69, 0x46, 0x08, 0x20, 0x09, 0xf0, 0x0a, 0xfa, + 0x8c, 0xbd, 0x00, 0x00, 0xac, 0x7c, 0x01, 0x00, + 0xf3, 0xb5, 0x04, 0x1c, 0xc0, 0x68, 0x06, 0x27, + 0x85, 0xb0, 0x06, 0x68, 0x09, 0xf0, 0x26, 0xff, + 0x98, 0x49, 0x48, 0x63, 0x20, 0x69, 0x03, 0x21, + 0x01, 0xf0, 0x08, 0xfc, 0x96, 0x4d, 0x00, 0x28, + 0x3c, 0x00, 0x70, 0x8f, 0x00, 0x00, 0x4d, 0xd0, + 0x95, 0x49, 0x40, 0x31, 0x09, 0x79, 0x80, 0x78, + 0x81, 0x42, 0x47, 0xd1, 0x01, 0x21, 0x20, 0x69, + 0x01, 0xf0, 0xfb, 0xfb, 0x02, 0x90, 0x20, 0x69, + 0x32, 0x21, 0x01, 0xf0, 0xf6, 0xfb, 0x01, 0x90, + 0x02, 0x1c, 0x8d, 0x48, 0x02, 0x99, 0xfc, 0xf7, + 0x46, 0xff, 0x00, 0x28, 0x36, 0xd0, 0x00, 0x23, + 0x8a, 0x48, 0x02, 0x99, 0x01, 0x9a, 0xfc, 0xf7, + 0xe4, 0xfe, 0x3c, 0x00, 0xac, 0x8f, 0x00, 0x00, + 0x0b, 0x28, 0x2e, 0xd1, 0x86, 0x4a, 0x51, 0x88, + 0x70, 0x89, 0x41, 0x40, 0x03, 0x91, 0x0b, 0x1c, + 0x84, 0x49, 0x0b, 0x40, 0x25, 0xd1, 0x50, 0x80, + 0x03, 0x99, 0x17, 0x1c, 0x00, 0x29, 0x0b, 0xd0, + 0x03, 0x99, 0x48, 0x05, 0x02, 0xd5, 0x38, 0x1c, + 0xfc, 0xf7, 0x40, 0xfe, 0x03, 0x99, 0x88, 0x06, + 0x02, 0xd5, 0x38, 0x1c, 0xfc, 0xf7, 0x24, 0xfe, + 0x2a, 0x21, 0x20, 0x69, 0x3c, 0x00, 0xe8, 0x8f, + 0x00, 0x00, 0x01, 0xf0, 0xc8, 0xfb, 0x00, 0x28, + 0x0d, 0xd0, 0x80, 0x78, 0xe9, 0x69, 0x81, 0x42, + 0x09, 0xd0, 0xe8, 0x61, 0x38, 0x1c, 0xfc, 0xf7, + 0x16, 0xfe, 0x38, 0x1c, 0xfc, 0xf7, 0x07, 0xfe, + 0x38, 0x1c, 0xfc, 0xf7, 0x26, 0xfe, 0x00, 0x27, + 0x20, 0x1c, 0x20, 0x30, 0x04, 0x90, 0x40, 0x7a, + 0x08, 0x28, 0x71, 0xd1, 0x0a, 0xf0, 0xd1, 0xfc, + 0x00, 0x20, 0x68, 0x61, 0x00, 0x23, 0x3c, 0x00, + 0x24, 0x90, 0x00, 0x00, 0x2b, 0x61, 0xa8, 0x68, + 0x66, 0x49, 0x01, 0x30, 0xa8, 0x60, 0x30, 0x89, + 0x5c, 0x31, 0x88, 0x82, 0x01, 0xf0, 0x7a, 0xfd, + 0x62, 0x49, 0x5c, 0x31, 0x08, 0x61, 0x22, 0x6a, + 0x04, 0x98, 0x18, 0x21, 0x00, 0x7a, 0x01, 0xf0, + 0x33, 0xfe, 0xe1, 0x6a, 0x40, 0x18, 0x03, 0x90, + 0x5c, 0x48, 0x00, 0x6a, 0x00, 0x28, 0x0d, 0xd0, + 0x00, 0x2f, 0x0b, 0xd1, 0x59, 0x48, 0x01, 0x23, + 0x3c, 0x00, 0x60, 0x90, 0x00, 0x00, 0x5c, 0x30, + 0x01, 0x68, 0x1b, 0x07, 0x00, 0x22, 0x30, 0x68, + 0x09, 0xf0, 0x49, 0xff, 0x00, 0x28, 0x00, 0xd1, + 0x05, 0x27, 0x00, 0x21, 0xa0, 0x6b, 0x0a, 0xf0, + 0xce, 0xfc, 0x00, 0x21, 0x20, 0x6c, 0x0a, 0xf0, + 0xe8, 0xfc, 0x4f, 0x4b, 0x03, 0xce, 0x03, 0x9a, + 0x5c, 0x33, 0xfc, 0xf7, 0x88, 0xfd, 0x00, 0x20, + 0x4c, 0x4e, 0x05, 0x21, 0xb0, 0x63, 0x20, 0x69, + 0x01, 0xf0, 0x3c, 0x00, 0x9c, 0x90, 0x00, 0x00, + 0x6f, 0xfb, 0x01, 0x1c, 0x01, 0xd1, 0xf0, 0x60, + 0x1c, 0xe0, 0x01, 0x20, 0xf0, 0x60, 0x88, 0x78, + 0x45, 0x4a, 0x01, 0x32, 0x10, 0x70, 0xc8, 0x78, + 0x50, 0x70, 0x47, 0x4a, 0x10, 0x70, 0x30, 0x69, + 0x00, 0x28, 0x0a, 0xd0, 0x4a, 0x78, 0x08, 0x79, + 0x05, 0x31, 0x09, 0xf0, 0xdd, 0xfa, 0x31, 0x69, + 0xf7, 0xf7, 0x85, 0xf9, 0xf0, 0x68, 0x00, 0x28, + 0x04, 0xd0, 0x3b, 0x4a, 0x3c, 0x00, 0xd8, 0x90, + 0x00, 0x00, 0x01, 0x32, 0x10, 0x78, 0x00, 0x28, + 0x08, 0xd1, 0x00, 0x20, 0xa8, 0x61, 0x71, 0x6a, + 0x00, 0x29, 0x03, 0xd0, 0x20, 0x1c, 0x14, 0x30, + 0xf7, 0xf7, 0x74, 0xf9, 0x34, 0x4a, 0x5c, 0x32, + 0x10, 0x69, 0x31, 0x6a, 0x41, 0x18, 0x00, 0xe0, + 0x20, 0xe0, 0x0a, 0x23, 0xd0, 0x68, 0x0a, 0x22, + 0x09, 0xf0, 0xfb, 0xfe, 0x00, 0x28, 0x07, 0xd0, + 0x2d, 0x4a, 0x31, 0x6a, 0x5c, 0x32, 0x3c, 0x00, + 0x14, 0x91, 0x00, 0x00, 0xd0, 0x68, 0x40, 0x1a, + 0x11, 0x69, 0x40, 0x1a, 0x70, 0x60, 0x29, 0x4a, + 0x5c, 0x32, 0xd0, 0x68, 0x30, 0x62, 0xf0, 0x69, + 0x00, 0x28, 0x04, 0xd0, 0xfa, 0xf7, 0x00, 0xfd, + 0x01, 0x20, 0xfa, 0xf7, 0xa1, 0xfc, 0xfa, 0xf7, + 0x81, 0xfc, 0x27, 0x48, 0x00, 0x68, 0x03, 0xf0, + 0x07, 0xf9, 0x06, 0x98, 0x00, 0x28, 0x03, 0xd1, + 0x1e, 0x4e, 0x00, 0x23, 0xb3, 0x60, 0x16, 0xe0, + 0x3c, 0x00, 0x50, 0x91, 0x00, 0x00, 0x1c, 0x4e, + 0x01, 0x20, 0xb0, 0x60, 0x06, 0x98, 0x01, 0x68, + 0x40, 0x68, 0xb0, 0x65, 0x19, 0x48, 0x71, 0x65, + 0x54, 0x30, 0xc0, 0x88, 0x00, 0x28, 0x09, 0xd0, + 0xb1, 0x69, 0x00, 0x29, 0x06, 0xd0, 0x01, 0xf0, + 0xdc, 0xfc, 0x01, 0x1c, 0xe0, 0x6a, 0xb2, 0x69, + 0xf7, 0xf7, 0x2f, 0xf9, 0x00, 0x2f, 0x15, 0xd1, + 0x12, 0x48, 0x01, 0x69, 0x00, 0x29, 0x08, 0xd1, + 0x01, 0x21, 0x3c, 0x00, 0x8c, 0x91, 0x00, 0x00, + 0x01, 0x61, 0x2a, 0x68, 0x00, 0x2a, 0x03, 0xd0, + 0x00, 0x21, 0x00, 0x20, 0xf7, 0xf7, 0x20, 0xf9, + 0x09, 0x49, 0x00, 0x23, 0xcb, 0x62, 0x2b, 0x61, + 0x6b, 0x61, 0x06, 0xf0, 0xb5, 0xf8, 0x07, 0xb0, + 0xf0, 0xbd, 0x6b, 0x68, 0x06, 0x48, 0x00, 0x2b, + 0xf9, 0xd0, 0x02, 0x1d, 0x11, 0x1c, 0x38, 0x1c, + 0xf7, 0xf7, 0x0f, 0xf9, 0xf3, 0xe7, 0x00, 0x00, + 0x44, 0x7d, 0x01, 0x00, 0x3c, 0x00, 0xc8, 0x91, + 0x00, 0x00, 0xf4, 0x68, 0x01, 0x00, 0xf4, 0x67, + 0x01, 0x00, 0x03, 0x08, 0x00, 0x00, 0xf8, 0x60, + 0x01, 0x00, 0xc4, 0x67, 0x01, 0x00, 0x08, 0xb5, + 0xf8, 0xf7, 0x2f, 0xfd, 0x00, 0x90, 0x00, 0xab, + 0x18, 0x88, 0x00, 0x28, 0x0c, 0xd0, 0x05, 0xf0, + 0x50, 0xff, 0x00, 0xab, 0x59, 0x88, 0x18, 0x88, + 0x05, 0xf0, 0x6d, 0xf9, 0xfe, 0xf7, 0x97, 0xf8, + 0x03, 0x20, 0xfb, 0xf7, 0x0e, 0xf8, 0x3c, 0x00, + 0x04, 0x92, 0x00, 0x00, 0x08, 0xbd, 0x01, 0x20, + 0xff, 0xf7, 0xb2, 0xfb, 0x00, 0x20, 0x08, 0xf0, + 0x8d, 0xfe, 0xf7, 0xe7, 0xf8, 0xb5, 0x4f, 0x49, + 0x8c, 0x68, 0x20, 0x6a, 0x00, 0x68, 0x05, 0x78, + 0xfc, 0xf7, 0x68, 0xfa, 0x00, 0x28, 0x12, 0xd0, + 0x2a, 0x07, 0x92, 0x0f, 0x01, 0x21, 0x01, 0x2a, + 0x00, 0xd0, 0x00, 0x21, 0x00, 0x29, 0x03, 0xd0, + 0x29, 0x06, 0x09, 0x0f, 0x0b, 0x29, 0x06, 0xd1, + 0x3c, 0x00, 0x40, 0x92, 0x00, 0x00, 0x2a, 0x21, + 0x09, 0x5d, 0x08, 0x18, 0x90, 0x30, 0x00, 0x7b, + 0xf9, 0xf7, 0x0d, 0xfc, 0x41, 0x4f, 0x3c, 0x3f, + 0xb8, 0x6b, 0x79, 0x6b, 0xf7, 0xf7, 0xc0, 0xf8, + 0xa0, 0x6c, 0x00, 0x26, 0xc6, 0x60, 0x60, 0x6b, + 0x80, 0x08, 0x04, 0xd0, 0xb8, 0x69, 0x01, 0x30, + 0xb8, 0x61, 0x06, 0xf0, 0xdc, 0xf9, 0x39, 0x4d, + 0x28, 0x69, 0x80, 0x05, 0x80, 0x0f, 0x08, 0xd1, + 0x78, 0x69, 0x3c, 0x00, 0x7c, 0x92, 0x00, 0x00, + 0x04, 0x21, 0x01, 0x30, 0x78, 0x61, 0x60, 0x6b, + 0x40, 0x08, 0x40, 0x00, 0x08, 0x43, 0x60, 0x63, + 0xb8, 0x6a, 0x00, 0x28, 0x03, 0xd0, 0x60, 0x6b, + 0x08, 0x21, 0x08, 0x43, 0x60, 0x63, 0x20, 0x1c, + 0x20, 0x30, 0x00, 0x90, 0x39, 0x68, 0xf7, 0xf7, + 0x9a, 0xf8, 0x03, 0x20, 0x00, 0x02, 0x28, 0x60, + 0x2b, 0x49, 0x88, 0x68, 0xa0, 0x63, 0xc8, 0x68, + 0xe0, 0x63, 0x08, 0x79, 0x3c, 0x00, 0xb8, 0x92, + 0x00, 0x00, 0xc0, 0x06, 0xc0, 0x0e, 0x25, 0x1c, + 0x40, 0x35, 0x28, 0x71, 0x48, 0x79, 0x68, 0x71, + 0x23, 0x48, 0x3c, 0x38, 0x46, 0x62, 0x00, 0x98, + 0x80, 0x7a, 0x01, 0xf0, 0x5e, 0xfd, 0x00, 0x21, + 0x00, 0x28, 0x21, 0x4a, 0x01, 0xd0, 0x11, 0x78, + 0x03, 0xe0, 0x93, 0x78, 0xdb, 0x07, 0x00, 0xd5, + 0x51, 0x78, 0xa9, 0x71, 0x00, 0x28, 0x04, 0xd0, + 0x1b, 0x49, 0x14, 0x31, 0x08, 0x68, 0x3c, 0x00, + 0xf4, 0x92, 0x00, 0x00, 0x20, 0x64, 0x00, 0xe0, + 0x6e, 0x80, 0xb8, 0x6a, 0xc0, 0x07, 0x02, 0xd5, + 0xff, 0x20, 0x28, 0x71, 0xae, 0x71, 0xe6, 0x61, + 0xb8, 0x68, 0x01, 0x30, 0xb8, 0x60, 0x79, 0x68, + 0x88, 0x42, 0x03, 0xd0, 0x0b, 0x21, 0x85, 0x20, + 0xf7, 0xf7, 0xc4, 0xff, 0x0d, 0x49, 0x88, 0x68, + 0xc0, 0x6c, 0x88, 0x60, 0xfb, 0x6a, 0x00, 0x2b, + 0x0c, 0xd0, 0x0e, 0x4a, 0xd4, 0x7b, 0x00, 0x2b, + 0x3c, 0x00, 0x30, 0x93, 0x00, 0x00, 0x02, 0xdd, + 0x7f, 0x2c, 0x05, 0xd2, 0x01, 0xe0, 0x00, 0x2c, + 0x02, 0xd0, 0xd4, 0x7b, 0xe3, 0x18, 0xd3, 0x73, + 0xfe, 0x62, 0xc9, 0x68, 0x88, 0x42, 0x03, 0xd1, + 0x05, 0x21, 0x85, 0x20, 0xf7, 0xf7, 0xa9, 0xff, + 0xf8, 0xbd, 0x24, 0x7e, 0x01, 0x00, 0x00, 0x40, + 0x07, 0x00, 0xa0, 0x80, 0x07, 0x00, 0xe8, 0x80, + 0x07, 0x00, 0x40, 0x00, 0x07, 0x00, 0xfe, 0xb5, + 0x30, 0x4c, 0x3c, 0x00, 0x6c, 0x93, 0x00, 0x00, + 0xa0, 0x6b, 0x21, 0x6b, 0xf7, 0xf7, 0x33, 0xf8, + 0x2d, 0x49, 0x3c, 0x31, 0x8e, 0x68, 0x70, 0x8b, + 0x06, 0x28, 0x04, 0xd2, 0xe0, 0x69, 0x01, 0x30, + 0xe0, 0x61, 0x0e, 0x20, 0x30, 0x85, 0x28, 0x49, + 0x3c, 0x31, 0x0d, 0x68, 0x00, 0x2d, 0x03, 0xd1, + 0x03, 0x21, 0x85, 0x20, 0xf7, 0xf7, 0x84, 0xff, + 0x24, 0x48, 0x45, 0x61, 0x35, 0x62, 0x31, 0x8d, + 0xef, 0x68, 0x04, 0x39, 0x3c, 0x00, 0xa8, 0x93, + 0x00, 0x00, 0x0c, 0x04, 0x01, 0x21, 0x02, 0x91, + 0x24, 0x0c, 0x00, 0x21, 0x01, 0x91, 0x1d, 0x48, + 0x3c, 0x30, 0x80, 0x8a, 0xa0, 0x42, 0x03, 0xd3, + 0x2c, 0x81, 0xee, 0x60, 0x00, 0x24, 0x0b, 0xe0, + 0x00, 0x2f, 0x04, 0xd1, 0x03, 0x21, 0x85, 0x20, + 0xf7, 0xf7, 0x69, 0xff, 0x04, 0xe0, 0x3d, 0x1c, + 0x20, 0x1a, 0x04, 0x04, 0xff, 0x68, 0x24, 0x0c, + 0x02, 0x98, 0x00, 0x28, 0x04, 0xd0, 0x3c, 0x00, + 0xe4, 0x93, 0x00, 0x00, 0x12, 0x49, 0x01, 0x20, + 0x08, 0x61, 0x00, 0x20, 0x02, 0x90, 0x01, 0x98, + 0x01, 0x30, 0x01, 0x90, 0x00, 0x2c, 0xdd, 0xd1, + 0x0c, 0x48, 0x0c, 0x4c, 0x3c, 0x30, 0x07, 0x60, + 0x01, 0x98, 0x30, 0x65, 0xb5, 0x64, 0x30, 0x6a, + 0x00, 0x68, 0x60, 0x62, 0x60, 0x68, 0x01, 0x30, + 0x60, 0x60, 0xa1, 0x68, 0x01, 0x31, 0x88, 0x42, + 0x03, 0xd0, 0x0a, 0x21, 0x85, 0x20, 0xf7, 0xf7, + 0x3c, 0x00, 0x20, 0x94, 0x00, 0x00, 0x41, 0xff, + 0x04, 0x48, 0x00, 0x68, 0xa0, 0x62, 0xfe, 0xbd, + 0x00, 0x00, 0xe8, 0x7d, 0x01, 0x00, 0x00, 0x30, + 0x07, 0x00, 0x78, 0x6e, 0x01, 0x00, 0xb0, 0xb5, + 0x05, 0x1c, 0x01, 0x21, 0x0f, 0x20, 0x0a, 0xf0, + 0xf8, 0xf8, 0xf2, 0x21, 0x0f, 0x20, 0x0a, 0xf0, + 0xf4, 0xf8, 0x0c, 0x48, 0x0c, 0x4c, 0x00, 0x68, + 0x14, 0x3c, 0x00, 0x28, 0x0c, 0xd0, 0xe0, 0x78, + 0x01, 0x28, 0x3c, 0x00, 0x5c, 0x94, 0x00, 0x00, + 0x09, 0xd0, 0x01, 0x22, 0x29, 0x1c, 0x0f, 0x20, + 0x0a, 0xf0, 0xac, 0xf8, 0x60, 0x78, 0x02, 0x28, + 0x06, 0xd0, 0x01, 0x20, 0x03, 0xe0, 0x60, 0x78, + 0x02, 0x28, 0x01, 0xd0, 0x00, 0x20, 0x60, 0x70, + 0xb0, 0xbd, 0x00, 0x00, 0x98, 0x66, 0x01, 0x00, + 0x02, 0x22, 0x00, 0x28, 0x80, 0xb5, 0x00, 0xd1, + 0x03, 0x22, 0x03, 0x49, 0x0e, 0x20, 0x0a, 0xf0, + 0x9b, 0xf8, 0x00, 0x20, 0x3c, 0x00, 0x98, 0x94, + 0x00, 0x00, 0x80, 0xbd, 0x00, 0x00, 0x50, 0xc3, + 0x00, 0x00, 0xf8, 0xb5, 0x00, 0x23, 0x00, 0x22, + 0x00, 0x28, 0x2e, 0xd0, 0x06, 0x89, 0x04, 0x68, + 0x75, 0x1e, 0x2d, 0x04, 0xb6, 0x1a, 0xf6, 0x07, + 0x2d, 0x0c, 0xf6, 0x0f, 0xb4, 0x46, 0x0e, 0xe0, + 0xa7, 0x5c, 0xa6, 0x18, 0x02, 0x33, 0x00, 0x97, + 0x77, 0x78, 0xa7, 0x54, 0x02, 0x32, 0x12, 0x04, + 0x00, 0x9f, 0x12, 0x0c, 0x00, 0x29, 0x3c, 0x00, + 0xd4, 0x94, 0x00, 0x00, 0x77, 0x70, 0x01, 0xdd, + 0x8b, 0x42, 0x15, 0xda, 0xaa, 0x42, 0xee, 0xd3, + 0xc0, 0x68, 0x00, 0x28, 0x10, 0xd0, 0x02, 0x89, + 0x00, 0x2a, 0xf9, 0xd0, 0x62, 0x46, 0x00, 0x2a, + 0x0b, 0xd0, 0x02, 0x68, 0x66, 0x5d, 0x17, 0x78, + 0x02, 0x33, 0x67, 0x55, 0x16, 0x70, 0x01, 0x22, + 0x00, 0x29, 0xd2, 0xdd, 0x8b, 0x42, 0xd0, 0xdb, + 0xf8, 0xbd, 0x00, 0x22, 0xcd, 0xe7, 0x00, 0x00, + 0x3c, 0x00, 0x10, 0x95, 0x00, 0x00, 0xb0, 0xb5, + 0x04, 0x1c, 0x0d, 0x1c, 0x01, 0x20, 0xf8, 0xf7, + 0x5e, 0xfb, 0x0d, 0x49, 0x00, 0x28, 0xc8, 0x61, + 0x14, 0xd0, 0x62, 0x68, 0x42, 0x60, 0xa2, 0x7c, + 0x02, 0x72, 0xa2, 0x68, 0xc2, 0x60, 0xe2, 0x68, + 0x02, 0x61, 0x22, 0x8a, 0x02, 0x75, 0x0a, 0x1d, + 0x0a, 0x62, 0x12, 0x68, 0x00, 0x2a, 0xff, 0xd1, + 0x02, 0x60, 0x48, 0x60, 0x00, 0x20, 0xa8, 0x60, + 0x01, 0x20, 0x3c, 0x00, 0x4c, 0x95, 0x00, 0x00, + 0xb0, 0xbd, 0x01, 0x20, 0xfa, 0xe7, 0x00, 0x00, + 0xa4, 0x6e, 0x01, 0x00, 0xb0, 0xb5, 0x04, 0x1c, + 0x40, 0x68, 0x0d, 0x1c, 0x43, 0x1c, 0x02, 0xd1, + 0x21, 0x1c, 0x09, 0x48, 0x08, 0xe0, 0x00, 0x20, + 0xf8, 0xf7, 0x34, 0xfb, 0x06, 0x49, 0x94, 0x39, + 0x08, 0x61, 0x00, 0x28, 0x03, 0xd0, 0x21, 0x1c, + 0x00, 0xf0, 0x48, 0xfe, 0x00, 0xe0, 0x01, 0x20, + 0xa8, 0x60, 0x01, 0x20, 0x3c, 0x00, 0x88, 0x95, + 0x00, 0x00, 0xb0, 0xbd, 0x00, 0x00, 0x38, 0x6f, + 0x01, 0x00, 0x80, 0xb5, 0x01, 0x21, 0x97, 0x20, + 0xf7, 0xf7, 0x85, 0xfe, 0x00, 0x20, 0x80, 0xbd, + 0x00, 0x00, 0x38, 0xb5, 0x0a, 0x1c, 0x14, 0x32, + 0x00, 0x92, 0x13, 0x1f, 0x05, 0x1c, 0x08, 0x3a, + 0x0c, 0x1c, 0x16, 0x31, 0x40, 0x68, 0xfe, 0xf7, + 0x6c, 0xfe, 0x00, 0x28, 0x01, 0xd0, 0x00, 0x20, + 0x00, 0xe0, 0x01, 0x20, 0x69, 0x68, 0x3c, 0x00, + 0xc4, 0x95, 0x00, 0x00, 0xa0, 0x60, 0x61, 0x60, + 0x01, 0x20, 0x38, 0xbd, 0x10, 0xb5, 0x0c, 0x1c, + 0x01, 0x7a, 0x00, 0x29, 0x0f, 0xd0, 0x01, 0x29, + 0x09, 0xd0, 0x02, 0x29, 0x03, 0xd1, 0x00, 0x21, + 0x00, 0x20, 0x0a, 0xf0, 0x73, 0xfc, 0x00, 0x20, + 0x20, 0x71, 0x01, 0x20, 0x10, 0xbd, 0x41, 0x68, + 0x01, 0x20, 0x0a, 0xf0, 0x6b, 0xfc, 0x00, 0xf0, + 0x0d, 0xf9, 0xf4, 0xe7, 0x80, 0xb5, 0x04, 0x49, + 0x3c, 0x00, 0x00, 0x96, 0x00, 0x00, 0x48, 0x68, + 0x01, 0x38, 0x48, 0x60, 0x01, 0xd1, 0x07, 0xf0, + 0x6e, 0xfb, 0x00, 0x20, 0x80, 0xbd, 0xac, 0x79, + 0x01, 0x00, 0xb0, 0xb5, 0x05, 0x1c, 0x0c, 0x1c, + 0x00, 0xf0, 0x4f, 0xfe, 0xa0, 0x60, 0x68, 0x68, + 0x60, 0x60, 0x01, 0x20, 0xb0, 0xbd, 0xb0, 0xb5, + 0x05, 0x1c, 0x0c, 0x1c, 0x00, 0xf0, 0x6f, 0xfe, + 0xa0, 0x60, 0x68, 0x68, 0x60, 0x60, 0x01, 0x20, + 0xb0, 0xbd, 0x3c, 0x00, 0x3c, 0x96, 0x00, 0x00, + 0x08, 0x1c, 0x00, 0x21, 0x00, 0x22, 0x00, 0x23, + 0x0e, 0xc0, 0x08, 0xc0, 0x01, 0x20, 0x70, 0x47, + 0xf8, 0xb5, 0x0f, 0x1c, 0x04, 0x1c, 0x20, 0x79, + 0x20, 0x28, 0x01, 0xd2, 0x20, 0x20, 0x20, 0x71, + 0x66, 0x79, 0x00, 0x2e, 0x02, 0xd1, 0x25, 0x79, + 0x00, 0x22, 0x0d, 0xe0, 0x25, 0x79, 0x29, 0x1c, + 0x30, 0x1c, 0xf7, 0xf7, 0x4f, 0xf8, 0x00, 0x29, + 0x01, 0xd1, 0x32, 0x1c, 0x3c, 0x00, 0x78, 0x96, + 0x00, 0x00, 0x04, 0xe0, 0x70, 0x43, 0x80, 0x19, + 0x05, 0x06, 0x2d, 0x0e, 0x32, 0x1c, 0xe0, 0x79, + 0x29, 0x1c, 0x00, 0xf0, 0xf2, 0xf9, 0x20, 0x7a, + 0x2f, 0x49, 0xc0, 0x07, 0xc0, 0x0f, 0x08, 0x60, + 0x2e, 0x48, 0x00, 0x78, 0xc0, 0x07, 0x43, 0xd5, + 0xa1, 0x79, 0x2c, 0x4a, 0xc8, 0x07, 0x48, 0xd4, + 0x2c, 0x4e, 0x16, 0x60, 0x8b, 0x07, 0x2b, 0x48, + 0x08, 0xd5, 0xcc, 0x08, 0x01, 0x23, 0x3c, 0x00, + 0xb4, 0x96, 0x00, 0x00, 0xa3, 0x40, 0x03, 0x60, + 0x49, 0x07, 0x04, 0xd5, 0x28, 0x49, 0x11, 0x60, + 0x01, 0xe0, 0x40, 0x21, 0x01, 0x60, 0x13, 0x68, + 0x26, 0x4a, 0xb3, 0x42, 0x10, 0xd1, 0x54, 0x68, + 0x01, 0x68, 0x0c, 0x43, 0x54, 0x60, 0x14, 0x68, + 0x0c, 0x40, 0x01, 0xd0, 0x51, 0x61, 0x00, 0xe0, + 0x91, 0x61, 0x54, 0x68, 0x0c, 0x43, 0x54, 0x60, + 0x94, 0x68, 0x21, 0x43, 0x91, 0x60, 0x13, 0xe0, + 0x3c, 0x00, 0xf0, 0x96, 0x00, 0x00, 0x54, 0x7c, + 0x01, 0x68, 0x0c, 0x43, 0x54, 0x74, 0x14, 0x7c, + 0x0c, 0x40, 0x03, 0xd0, 0x14, 0x7c, 0x0c, 0x43, + 0x14, 0x74, 0x02, 0xe0, 0x14, 0x7c, 0x8c, 0x43, + 0x14, 0x74, 0x54, 0x7c, 0x0c, 0x43, 0x54, 0x74, + 0x94, 0x7c, 0x21, 0x43, 0x91, 0x74, 0xb3, 0x42, + 0x05, 0xd1, 0x00, 0x22, 0x01, 0x68, 0x03, 0x20, + 0xff, 0xf7, 0x8d, 0xf8, 0x09, 0xe0, 0x00, 0x68, + 0x00, 0x21, 0x3c, 0x00, 0x2c, 0x97, 0x00, 0x00, + 0x02, 0x06, 0x12, 0x0e, 0x03, 0x20, 0xff, 0xf7, + 0x85, 0xf8, 0x01, 0xe0, 0x0b, 0x48, 0x10, 0x60, + 0x00, 0x20, 0x38, 0x71, 0x7d, 0x71, 0xf7, 0xf7, + 0xe9, 0xfd, 0x01, 0x20, 0xf8, 0xbd, 0x00, 0x00, + 0xcc, 0x5c, 0x01, 0x00, 0x04, 0x00, 0x07, 0x00, + 0x5c, 0x5b, 0x01, 0x00, 0xb9, 0x9b, 0x00, 0x00, + 0x58, 0x5b, 0x01, 0x00, 0x95, 0x9b, 0x00, 0x00, + 0x10, 0x00, 0x07, 0x00, 0x3c, 0x00, 0x68, 0x97, + 0x00, 0x00, 0x55, 0x9b, 0x00, 0x00, 0xb0, 0xb5, + 0x0d, 0x1c, 0x04, 0x30, 0x00, 0x24, 0xfe, 0xf7, + 0xd6, 0xfa, 0x01, 0x20, 0x6c, 0x60, 0xb0, 0xbd, + 0x00, 0x00, 0xf0, 0xb5, 0x07, 0x7a, 0x43, 0x68, + 0x04, 0x1c, 0x0e, 0x48, 0x0e, 0x1c, 0x00, 0x68, + 0x01, 0x25, 0x01, 0x1c, 0x9b, 0xb0, 0x06, 0xe0, + 0x4a, 0x68, 0x9a, 0x42, 0x02, 0xd1, 0x8f, 0x76, + 0x00, 0x25, 0x02, 0xe0, 0x09, 0x68, 0x3c, 0x00, + 0xa4, 0x97, 0x00, 0x00, 0x00, 0x29, 0xf6, 0xd1, + 0x00, 0x2d, 0x05, 0xd1, 0x21, 0x7a, 0x01, 0x29, + 0x02, 0xd1, 0x01, 0xa9, 0xf8, 0xf7, 0xa8, 0xf8, + 0x60, 0x68, 0x04, 0x36, 0x21, 0xc6, 0x1b, 0xb0, + 0x01, 0x20, 0xf0, 0xbd, 0xa4, 0x6e, 0x01, 0x00, + 0x10, 0xb5, 0x0c, 0x1c, 0x08, 0xf0, 0xae, 0xfc, + 0x60, 0x60, 0x01, 0x20, 0x10, 0xbd, 0x00, 0x00, + 0x10, 0xb5, 0x0c, 0x1c, 0x07, 0xf0, 0x84, 0xfa, + 0x3c, 0x00, 0xe0, 0x97, 0x00, 0x00, 0x04, 0xf0, + 0x54, 0xff, 0x00, 0x20, 0x60, 0x60, 0x01, 0x20, + 0x10, 0xbd, 0x00, 0x20, 0xc0, 0x43, 0x48, 0x60, + 0x01, 0x20, 0x70, 0x47, 0x00, 0x00, 0x10, 0xb5, + 0x0c, 0x1c, 0x00, 0x79, 0xfa, 0xf7, 0x07, 0xf8, + 0x00, 0x28, 0x01, 0xd0, 0x00, 0x20, 0x00, 0xe0, + 0x02, 0x20, 0x60, 0x60, 0x01, 0x20, 0x10, 0xbd, + 0x00, 0x00, 0x1c, 0xb5, 0x06, 0x4c, 0x20, 0x68, + 0x00, 0x28, 0x3c, 0x00, 0x1c, 0x98, 0x00, 0x00, + 0x07, 0xd0, 0x09, 0xf0, 0xc5, 0xfa, 0x01, 0x90, + 0x20, 0x68, 0x41, 0x68, 0x68, 0x46, 0xf6, 0xf7, + 0xd6, 0xfd, 0x1c, 0xbd, 0xac, 0x79, 0x01, 0x00, + 0x01, 0x49, 0x08, 0x60, 0x70, 0x47, 0x00, 0x00, + 0xac, 0x79, 0x01, 0x00, 0x0e, 0xb5, 0x06, 0x4b, + 0x1b, 0x68, 0x00, 0x2b, 0x06, 0xd0, 0x02, 0x90, + 0x00, 0x91, 0x01, 0x92, 0x68, 0x46, 0xd9, 0x68, + 0xf6, 0xf7, 0xc1, 0xfd, 0x3c, 0x00, 0x58, 0x98, + 0x00, 0x00, 0x0e, 0xbd, 0x00, 0x00, 0xac, 0x79, + 0x01, 0x00, 0x1c, 0xb5, 0x04, 0x1c, 0x07, 0xf0, + 0x4c, 0xfa, 0x06, 0x48, 0x41, 0x68, 0x01, 0x31, + 0x41, 0x60, 0x00, 0x94, 0x00, 0x21, 0x01, 0x91, + 0x00, 0x68, 0x01, 0x68, 0x68, 0x46, 0xf6, 0xf7, + 0xad, 0xfd, 0x1c, 0xbd, 0x00, 0x00, 0xac, 0x79, + 0x01, 0x00, 0x80, 0xb5, 0xf8, 0xf7, 0xa3, 0xf8, + 0x80, 0xbd, 0x80, 0xb5, 0x02, 0x1c, 0x3c, 0x00, + 0x94, 0x98, 0x00, 0x00, 0x80, 0x21, 0x03, 0x20, + 0x00, 0xf0, 0x5c, 0xf8, 0x01, 0x1c, 0x03, 0x48, + 0x00, 0x22, 0x43, 0x69, 0xf6, 0xf7, 0x9b, 0xfd, + 0x80, 0xbd, 0x00, 0x00, 0xa4, 0x6d, 0x01, 0x00, + 0xf8, 0xb5, 0x0c, 0x1c, 0x13, 0x49, 0x05, 0x1c, + 0x08, 0x68, 0x16, 0x1c, 0x01, 0x30, 0x08, 0x60, + 0x00, 0x20, 0x20, 0x61, 0x22, 0x1c, 0x10, 0x32, + 0x28, 0x1d, 0x00, 0x21, 0x07, 0x1c, 0x00, 0x92, + 0x3c, 0x00, 0xd0, 0x98, 0x00, 0x00, 0x03, 0xf0, + 0xde, 0xfe, 0x20, 0x71, 0x20, 0x69, 0x00, 0x28, + 0x10, 0xd0, 0x01, 0x04, 0x09, 0x0c, 0x00, 0x20, + 0xf7, 0xf7, 0x79, 0xfe, 0x30, 0x60, 0x29, 0x1d, + 0x03, 0xc9, 0xa0, 0x60, 0xe1, 0x60, 0x30, 0x68, + 0x01, 0x68, 0x00, 0x9a, 0x38, 0x1c, 0x03, 0xf0, + 0xca, 0xfe, 0x20, 0x71, 0x01, 0x20, 0xf8, 0xbd, + 0x00, 0x00, 0x10, 0x75, 0x01, 0x00, 0x80, 0xb5, + 0x02, 0x1c, 0x3c, 0x00, 0x0c, 0x99, 0x00, 0x00, + 0x08, 0x21, 0x04, 0x20, 0x09, 0xf0, 0x4e, 0xff, + 0x03, 0x20, 0x80, 0xbd, 0x10, 0xb5, 0x07, 0x4a, + 0x0c, 0x1c, 0x51, 0x68, 0x01, 0x31, 0x51, 0x60, + 0x01, 0x1c, 0x10, 0x31, 0xc2, 0x68, 0x04, 0x30, + 0x03, 0xf0, 0xf0, 0xfe, 0x20, 0x71, 0x00, 0x20, + 0x10, 0xbd, 0x00, 0x00, 0x10, 0x75, 0x01, 0x00, + 0x04, 0x49, 0x80, 0xb5, 0x81, 0x61, 0x08, 0x21, + 0x02, 0x1c, 0x03, 0x20, 0x3c, 0x00, 0x48, 0x99, + 0x00, 0x00, 0x09, 0xf0, 0x32, 0xff, 0x03, 0x20, + 0x80, 0xbd, 0x95, 0xd8, 0x00, 0x00, 0xf7, 0xb5, + 0x07, 0x1c, 0x16, 0x1c, 0x06, 0x21, 0x00, 0x20, + 0x82, 0xb0, 0xf7, 0xf7, 0x3a, 0xfe, 0x05, 0x1c, + 0x20, 0x48, 0x00, 0x78, 0x06, 0x28, 0x00, 0xd9, + 0x28, 0x81, 0x2c, 0x68, 0x00, 0x20, 0xa7, 0x70, + 0x03, 0x99, 0xe1, 0x70, 0x31, 0x1c, 0x03, 0xe0, + 0x0a, 0x89, 0x10, 0x18, 0x0f, 0x1c, 0x3c, 0x00, + 0x84, 0x99, 0x00, 0x00, 0xc9, 0x68, 0x00, 0x29, + 0xf9, 0xd1, 0x6b, 0x46, 0x01, 0xaa, 0x21, 0x1d, + 0x00, 0xf0, 0x34, 0xf8, 0x00, 0xab, 0x18, 0x78, + 0x60, 0x71, 0x18, 0x78, 0x00, 0x28, 0x17, 0xd0, + 0x11, 0x48, 0x40, 0x68, 0x00, 0x28, 0x08, 0xd0, + 0x19, 0x78, 0x00, 0x20, 0xf7, 0xf7, 0x14, 0xfe, + 0x01, 0x1c, 0x38, 0x1c, 0xf7, 0xf7, 0x30, 0xfd, + 0x0a, 0xe0, 0x38, 0x68, 0x00, 0x28, 0x02, 0xd1, + 0x3c, 0x00, 0xc0, 0x99, 0x00, 0x00, 0x3f, 0x60, + 0x01, 0x20, 0xb8, 0x61, 0x00, 0xab, 0x19, 0x78, + 0x38, 0x89, 0x40, 0x18, 0x38, 0x81, 0x00, 0xab, + 0x98, 0x88, 0x31, 0x1c, 0x02, 0x38, 0x20, 0x80, + 0x28, 0x1c, 0xf7, 0xf7, 0x1c, 0xfd, 0x28, 0x1c, + 0x05, 0xb0, 0xf0, 0xbd, 0x00, 0x00, 0xc8, 0x5c, + 0x01, 0x00, 0x01, 0x79, 0x42, 0x79, 0x00, 0x88, + 0x89, 0x18, 0x02, 0x39, 0x40, 0x1a, 0x70, 0x47, + 0x00, 0x00, 0x3c, 0x00, 0xfc, 0x99, 0x00, 0x00, + 0x70, 0xb5, 0x08, 0x4d, 0x2c, 0x78, 0xad, 0x78, + 0x20, 0x18, 0x06, 0x1c, 0x00, 0x2d, 0x03, 0xd0, + 0x70, 0x19, 0x01, 0x38, 0x01, 0x3d, 0xa8, 0x43, + 0x10, 0x80, 0x80, 0x1b, 0x18, 0x70, 0x0c, 0x70, + 0x70, 0xbd, 0x00, 0x00, 0xc8, 0x5c, 0x01, 0x00, + 0xb0, 0xb5, 0x04, 0x68, 0x0c, 0x4a, 0x21, 0x88, + 0x52, 0x78, 0x02, 0x31, 0x91, 0x42, 0x11, 0xd2, + 0x55, 0x1a, 0xf7, 0xf7, 0x3c, 0x00, 0x38, 0x9a, + 0x00, 0x00, 0xc9, 0xfd, 0x01, 0x68, 0x00, 0x29, + 0x02, 0xd1, 0x00, 0x60, 0x01, 0x21, 0x81, 0x61, + 0x01, 0x89, 0x49, 0x19, 0x01, 0x81, 0x20, 0x88, + 0x40, 0x19, 0x20, 0x80, 0x60, 0x79, 0x40, 0x19, + 0x60, 0x71, 0xb0, 0xbd, 0x00, 0x00, 0xc8, 0x5c, + 0x01, 0x00, 0x80, 0xb5, 0x00, 0x22, 0x06, 0x21, + 0xf1, 0x20, 0x09, 0xf0, 0xa2, 0xfe, 0x80, 0xbd, + 0x00, 0x00, 0x03, 0x1c, 0x02, 0x48, 0x3c, 0x00, + 0x74, 0x9a, 0x00, 0x00, 0x03, 0x70, 0x41, 0x70, + 0x82, 0x70, 0x70, 0x47, 0xc8, 0x5c, 0x01, 0x00, + 0xb0, 0xb5, 0x08, 0x1c, 0x09, 0x68, 0x15, 0x1c, + 0x8c, 0x78, 0xf7, 0xf7, 0x85, 0xfd, 0x04, 0x49, + 0xa0, 0x00, 0x09, 0x58, 0x00, 0x29, 0x02, 0xd0, + 0x28, 0x1c, 0xf6, 0xf7, 0x9e, 0xfc, 0xb0, 0xbd, + 0x84, 0x6d, 0x01, 0x00, 0xfe, 0xb5, 0x04, 0x1c, + 0xc0, 0x7a, 0xa1, 0x7a, 0xc6, 0x07, 0xf6, 0x0f, + 0x3c, 0x00, 0xb0, 0x9a, 0x00, 0x00, 0x32, 0x1c, + 0x20, 0x1d, 0x01, 0xf0, 0x3c, 0xf8, 0x60, 0x69, + 0x25, 0x4f, 0xc1, 0x07, 0x37, 0xd5, 0xb8, 0x69, + 0x00, 0x28, 0x01, 0xd0, 0xf6, 0xf7, 0x87, 0xfc, + 0x20, 0x68, 0x05, 0x68, 0x28, 0x88, 0x80, 0x07, + 0x34, 0xd1, 0x01, 0xaa, 0x02, 0xa9, 0x28, 0x1c, + 0x01, 0xf0, 0x0b, 0xfc, 0x28, 0x1c, 0x01, 0xf0, + 0x12, 0xfc, 0x00, 0x78, 0xc0, 0x07, 0x0a, 0xd4, + 0x60, 0x69, 0x3c, 0x00, 0xec, 0x9a, 0x00, 0x00, + 0x80, 0x07, 0x26, 0xd4, 0x33, 0x1c, 0x29, 0x1c, + 0xa2, 0x7a, 0x20, 0x69, 0x7d, 0x69, 0xf6, 0xf7, + 0x72, 0xfc, 0x1e, 0xe0, 0x00, 0xab, 0x18, 0x7a, + 0x00, 0x28, 0x03, 0xd0, 0x01, 0x28, 0x06, 0xd0, + 0x02, 0x28, 0x16, 0xd1, 0x28, 0x1c, 0x79, 0x6a, + 0xf6, 0xf7, 0x61, 0xfc, 0x11, 0xe0, 0x00, 0xab, + 0x18, 0x79, 0x0e, 0x28, 0x01, 0xd0, 0x0f, 0x28, + 0x0b, 0xd1, 0x28, 0x1c, 0x3c, 0x00, 0x28, 0x9b, + 0x00, 0x00, 0x39, 0x6a, 0xf6, 0xf7, 0x56, 0xfc, + 0x06, 0xe0, 0x00, 0x07, 0x80, 0x0f, 0x03, 0xd1, + 0x20, 0x69, 0xf9, 0x69, 0xf6, 0xf7, 0x4e, 0xfc, + 0x78, 0x6b, 0x21, 0x21, 0x01, 0x30, 0x78, 0x63, + 0x22, 0x1c, 0x80, 0x20, 0x09, 0xf0, 0x31, 0xfe, + 0xfe, 0xbd, 0x28, 0x7a, 0x01, 0x00, 0x0b, 0x49, + 0x18, 0xb5, 0x08, 0x78, 0xc0, 0x07, 0x11, 0xd5, + 0x0a, 0x4a, 0x10, 0x1c, 0x20, 0x30, 0x3c, 0x00, + 0x64, 0x9b, 0x00, 0x00, 0x84, 0x79, 0x00, 0xab, + 0x1c, 0x70, 0xc0, 0x79, 0x58, 0x70, 0x08, 0x78, + 0x40, 0x23, 0x18, 0x43, 0x08, 0x70, 0x05, 0x48, + 0x00, 0x78, 0x08, 0x70, 0x00, 0xab, 0x18, 0x88, + 0xd0, 0x84, 0x18, 0xbd, 0x04, 0x00, 0x07, 0x00, + 0x00, 0x10, 0x07, 0x00, 0xe0, 0x60, 0x01, 0x00, + 0x70, 0x47, 0x00, 0x00, 0x05, 0x49, 0x10, 0xb5, + 0x88, 0x79, 0x05, 0x4b, 0x1a, 0x7c, 0x05, 0x4c, + 0x3c, 0x00, 0xa0, 0x9b, 0x00, 0x00, 0x24, 0x68, + 0x62, 0x40, 0x1a, 0x74, 0x88, 0x71, 0x10, 0xbd, + 0x00, 0x00, 0x20, 0x10, 0x07, 0x00, 0x10, 0x00, + 0x07, 0x00, 0x58, 0x5b, 0x01, 0x00, 0x04, 0x49, + 0x0a, 0x68, 0x04, 0x48, 0x00, 0x68, 0x02, 0x40, + 0x01, 0xd0, 0x88, 0x61, 0x70, 0x47, 0x48, 0x61, + 0x70, 0x47, 0x10, 0x00, 0x07, 0x00, 0x58, 0x5b, + 0x01, 0x00, 0x02, 0x1c, 0x01, 0x20, 0x00, 0x06, + 0x08, 0x43, 0x3c, 0x00, 0xdc, 0x9b, 0x00, 0x00, + 0x80, 0xb5, 0x2a, 0x21, 0x09, 0xf0, 0xe6, 0xfd, + 0x80, 0xbd, 0x00, 0x00, 0x10, 0xb5, 0x04, 0x1c, + 0x00, 0x29, 0x03, 0xd0, 0x81, 0x29, 0x07, 0xd1, + 0x81, 0x20, 0x00, 0xe0, 0x80, 0x20, 0x22, 0x1c, + 0x2c, 0x21, 0x09, 0xf0, 0xd7, 0xfd, 0x10, 0xbd, + 0x02, 0x21, 0x2c, 0x20, 0xf7, 0xf7, 0x4c, 0xfb, + 0x20, 0x1c, 0xf7, 0xf7, 0xc3, 0xfc, 0x10, 0xbd, + 0x80, 0xb5, 0xb4, 0xb0, 0x3c, 0x00, 0x18, 0x9c, + 0x00, 0x00, 0x01, 0x28, 0x06, 0xd0, 0x82, 0x28, + 0x1c, 0xd1, 0x1a, 0xa8, 0x07, 0xf0, 0x35, 0xfc, + 0x34, 0xb0, 0x80, 0xbd, 0x81, 0x29, 0x13, 0xd1, + 0x0d, 0x48, 0x0c, 0x4a, 0x81, 0x69, 0x00, 0x68, + 0x50, 0x32, 0x81, 0x42, 0x02, 0xd0, 0xd1, 0x6a, + 0x01, 0x29, 0x02, 0xd0, 0x11, 0x78, 0x02, 0x29, + 0x02, 0xd1, 0x07, 0xf0, 0x0a, 0xf9, 0xeb, 0xe7, + 0x69, 0x46, 0xf7, 0xf7, 0x5a, 0xfe, 0x3c, 0x00, + 0x54, 0x9c, 0x00, 0x00, 0xe7, 0xe7, 0x01, 0x21, + 0x00, 0xe0, 0x02, 0x21, 0x18, 0x20, 0xf7, 0xf7, + 0x21, 0xfb, 0xe0, 0xe7, 0xa4, 0x6e, 0x01, 0x00, + 0xb0, 0xb5, 0x04, 0x1c, 0x00, 0x68, 0x17, 0x4d, + 0x9a, 0xb0, 0x68, 0x63, 0x08, 0xf0, 0x3e, 0xfa, + 0x20, 0x79, 0x14, 0x49, 0x13, 0x4a, 0x50, 0x39, + 0x2c, 0x3a, 0x02, 0x28, 0x0a, 0xd1, 0x90, 0x68, + 0x80, 0x02, 0xa8, 0x61, 0xc8, 0x68, 0xe8, 0x61, + 0x3c, 0x00, 0x90, 0x9c, 0x00, 0x00, 0x02, 0x20, + 0x28, 0x72, 0x07, 0xf0, 0xe4, 0xf8, 0x1a, 0xb0, + 0xb0, 0xbd, 0x03, 0x1c, 0x00, 0x20, 0x00, 0x2b, + 0x0b, 0xd1, 0x52, 0x68, 0x92, 0x02, 0xaa, 0x61, + 0x0a, 0x1c, 0x89, 0x68, 0xe9, 0x61, 0x28, 0x72, + 0x10, 0x68, 0x69, 0x46, 0xf7, 0xf7, 0x27, 0xfe, + 0xed, 0xe7, 0xa8, 0x61, 0x01, 0x20, 0x28, 0x72, + 0x28, 0x70, 0x00, 0x20, 0x06, 0xf0, 0x7d, 0xfa, + 0xe5, 0xe7, 0x3c, 0x00, 0xcc, 0x9c, 0x00, 0x00, + 0xf4, 0x6e, 0x01, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x70, 0x47, 0x00, 0x00, 0x80, 0xb5, 0x01, 0x21, + 0x07, 0x20, 0xf7, 0xf7, 0xe1, 0xfa, 0x80, 0xbd, + 0x70, 0x47, 0x00, 0x00, 0xf8, 0xb5, 0x00, 0x24, + 0x19, 0x4a, 0x00, 0x26, 0xd5, 0x68, 0x11, 0x68, + 0x04, 0x35, 0x08, 0x1c, 0x91, 0x60, 0x02, 0xe0, + 0x01, 0x1c, 0x40, 0x19, 0x08, 0x60, 0x53, 0x68, + 0x83, 0x42, 0xf9, 0xd8, 0x3c, 0x00, 0x08, 0x9d, + 0x00, 0x00, 0x01, 0x34, 0x10, 0x32, 0x03, 0x2c, + 0x0e, 0x60, 0xee, 0xd3, 0xf6, 0xf7, 0xf1, 0xff, + 0x10, 0x48, 0x10, 0x49, 0x12, 0x4c, 0x08, 0x60, + 0x10, 0x49, 0x00, 0x20, 0x01, 0x22, 0x19, 0x23, + 0x5b, 0x01, 0x0c, 0x25, 0x43, 0x43, 0x1b, 0x19, + 0x45, 0x43, 0x4a, 0x51, 0x1f, 0x1c, 0x6d, 0x18, + 0xab, 0x60, 0x6b, 0x60, 0x00, 0x25, 0x1e, 0x1c, + 0x14, 0x36, 0x9e, 0x60, 0x33, 0x1c, 0x3c, 0x00, + 0x44, 0x9d, 0x00, 0x00, 0x01, 0x35, 0x27, 0x2d, + 0xf8, 0xdb, 0x01, 0x30, 0x03, 0x28, 0x9f, 0x60, + 0xe8, 0xdb, 0xf8, 0xbd, 0x20, 0x57, 0x01, 0x00, + 0x14, 0xc8, 0x01, 0x00, 0xb4, 0xcf, 0x01, 0x00, + 0x18, 0xd9, 0x01, 0x00, 0xb8, 0xcf, 0x01, 0x00, + 0xb0, 0xb5, 0x07, 0x4c, 0x25, 0x1c, 0xc0, 0x35, + 0x28, 0x6b, 0x1e, 0x21, 0x00, 0xf0, 0xf2, 0xf9, + 0xa2, 0x6b, 0x20, 0x1c, 0xdc, 0x30, 0x29, 0x6b, + 0x3c, 0x00, 0x80, 0x9d, 0x00, 0x00, 0x00, 0xf0, + 0xb6, 0xf9, 0xb0, 0xbd, 0x00, 0x00, 0xc4, 0x69, + 0x01, 0x00, 0x00, 0x20, 0x10, 0x22, 0x10, 0xb5, + 0x0a, 0x49, 0x05, 0xe0, 0x0c, 0x23, 0x43, 0x43, + 0x5c, 0x18, 0x0c, 0x34, 0xcc, 0x50, 0x01, 0x30, + 0x0f, 0x28, 0xf7, 0xd3, 0x0c, 0x23, 0x58, 0x43, + 0x09, 0x50, 0x04, 0x48, 0x41, 0x60, 0x01, 0x60, + 0x02, 0x82, 0x00, 0x21, 0x81, 0x60, 0xc1, 0x60, + 0x10, 0xbd, 0x3c, 0x00, 0xbc, 0x9d, 0x00, 0x00, + 0x84, 0xe2, 0x01, 0x00, 0x44, 0xe3, 0x01, 0x00, + 0x10, 0xb5, 0x08, 0x4c, 0xa0, 0x6a, 0x00, 0x28, + 0x03, 0xd1, 0x07, 0x48, 0xf9, 0xf7, 0xe8, 0xfe, + 0xa0, 0x62, 0x04, 0x48, 0x44, 0x30, 0x00, 0x68, + 0x01, 0x21, 0xf9, 0xf7, 0x95, 0xfc, 0x60, 0x62, + 0x10, 0xbd, 0x00, 0x00, 0x60, 0x6c, 0x01, 0x00, + 0xcd, 0x26, 0x01, 0x00, 0xff, 0xb5, 0x0d, 0x1c, + 0x04, 0x1c, 0x1e, 0x1c, 0x3c, 0x00, 0xf8, 0x9d, + 0x00, 0x00, 0x81, 0xb0, 0x0a, 0x9f, 0x1c, 0x21, + 0xf6, 0xf7, 0x4d, 0xfb, 0x03, 0x98, 0xa0, 0x61, + 0x25, 0x60, 0x25, 0x61, 0x26, 0x81, 0xa6, 0x82, + 0xe7, 0x60, 0x05, 0xb0, 0xf0, 0xbd, 0x70, 0xb5, + 0x0d, 0x1c, 0xa4, 0x21, 0x04, 0x1c, 0x08, 0x30, + 0xf6, 0xf7, 0x3d, 0xfb, 0x20, 0x1c, 0x44, 0x30, + 0x06, 0x22, 0x29, 0x1c, 0xf6, 0xf7, 0x65, 0xfb, + 0x18, 0x48, 0x3c, 0x23, 0x41, 0x1c, 0x3c, 0x00, + 0x34, 0x9e, 0x00, 0x00, 0x61, 0x62, 0x41, 0x78, + 0x59, 0x43, 0x09, 0x18, 0x89, 0x7a, 0x06, 0x29, + 0x01, 0xd1, 0xa0, 0x62, 0x02, 0xe0, 0x21, 0x1c, + 0x4d, 0x31, 0xa1, 0x62, 0x41, 0x78, 0x3c, 0x23, + 0x59, 0x43, 0x08, 0x18, 0x04, 0x30, 0x0f, 0x49, + 0x20, 0x62, 0x0b, 0x88, 0x00, 0x2b, 0x15, 0xd0, + 0xac, 0x20, 0x00, 0x5d, 0x0b, 0x4a, 0x18, 0x32, + 0x00, 0x02, 0x80, 0x18, 0xb0, 0x30, 0xe0, 0x60, + 0x3c, 0x00, 0x70, 0x9e, 0x00, 0x00, 0x8d, 0x68, + 0x00, 0x20, 0x08, 0xe0, 0xe2, 0x68, 0xc1, 0x00, + 0x54, 0x50, 0xe6, 0x68, 0x82, 0x00, 0x52, 0x19, + 0x71, 0x18, 0x4a, 0x60, 0x01, 0x30, 0x98, 0x42, + 0xf4, 0xdb, 0x70, 0xbd, 0x00, 0x00, 0x68, 0x61, + 0x01, 0x00, 0x58, 0x75, 0x01, 0x00, 0x1f, 0xb5, + 0x04, 0x1c, 0x60, 0x34, 0x61, 0x7a, 0x03, 0x1c, + 0x80, 0x6a, 0x08, 0x4a, 0x02, 0x91, 0x01, 0x90, + 0x03, 0x92, 0x3c, 0x00, 0xac, 0x9e, 0x00, 0x00, + 0xe2, 0x79, 0x18, 0x1c, 0x20, 0x30, 0x00, 0x92, + 0x44, 0x7b, 0x82, 0x7b, 0x5e, 0x20, 0xc1, 0x5a, + 0x18, 0x69, 0x04, 0x30, 0x23, 0x1c, 0x02, 0xf0, + 0x7f, 0xfe, 0x1f, 0xbd, 0x39, 0x4e, 0x00, 0x00, + 0xb0, 0xb5, 0x0b, 0x1c, 0x01, 0x88, 0x69, 0x20, + 0xc0, 0x5c, 0x86, 0xb0, 0x0e, 0x4a, 0x04, 0x91, + 0x03, 0x90, 0x05, 0x92, 0x0d, 0x4d, 0x59, 0x6a, + 0x9a, 0x6a, 0x2d, 0x68, 0x3c, 0x00, 0xe8, 0x9e, + 0x00, 0x00, 0x01, 0x24, 0x00, 0x2d, 0x00, 0xd0, + 0x04, 0x1c, 0x0a, 0x48, 0x00, 0x5d, 0x01, 0x91, + 0x02, 0x92, 0x00, 0x90, 0x18, 0x1c, 0x20, 0x30, + 0x44, 0x7b, 0x82, 0x7b, 0x5e, 0x20, 0xc1, 0x5a, + 0x18, 0x69, 0x04, 0x30, 0x23, 0x1c, 0x02, 0xf0, + 0xa4, 0xfe, 0x06, 0xb0, 0xb0, 0xbd, 0x51, 0x4f, + 0x00, 0x00, 0x18, 0x67, 0x01, 0x00, 0x0a, 0x61, + 0x01, 0x00, 0x01, 0x89, 0x8a, 0x1c, 0x3c, 0x00, + 0x24, 0x9f, 0x00, 0x00, 0x02, 0x81, 0x02, 0x68, + 0x02, 0x3a, 0x02, 0x60, 0x08, 0x0a, 0x09, 0x02, + 0x08, 0x43, 0x10, 0x80, 0x70, 0x47, 0x00, 0x00, + 0x70, 0xb5, 0x05, 0x1c, 0x08, 0x78, 0x0e, 0x1c, + 0xff, 0x28, 0x14, 0xd0, 0x71, 0x78, 0x02, 0x31, + 0x00, 0x20, 0xf7, 0xf7, 0x45, 0xfb, 0x04, 0x1c, + 0x02, 0x89, 0x00, 0x68, 0x31, 0x1c, 0xf6, 0xf7, + 0xcf, 0xfa, 0x00, 0x2d, 0x06, 0xd0, 0x28, 0x1c, + 0x3c, 0x00, 0x60, 0x9f, 0x00, 0x00, 0xf7, 0xf7, + 0x34, 0xfb, 0x21, 0x1c, 0xf7, 0xf7, 0x57, 0xfa, + 0x00, 0xe0, 0x25, 0x1c, 0x28, 0x1c, 0x70, 0xbd, + 0x00, 0x00, 0xff, 0xb5, 0x0f, 0x1c, 0x1e, 0x1c, + 0x04, 0x1c, 0x98, 0x1c, 0x01, 0x04, 0x09, 0x0c, + 0x00, 0x20, 0x81, 0xb0, 0xf7, 0xf7, 0x27, 0xfb, + 0x05, 0x1c, 0x00, 0x68, 0x00, 0x2c, 0x38, 0x60, + 0x03, 0x99, 0x01, 0x70, 0x38, 0x68, 0x46, 0x70, + 0x06, 0xd0, 0x3c, 0x00, 0x9c, 0x9f, 0x00, 0x00, + 0x20, 0x1c, 0xf7, 0xf7, 0x15, 0xfb, 0x29, 0x1c, + 0xf7, 0xf7, 0x38, 0xfa, 0x00, 0xe0, 0x2c, 0x1c, + 0x20, 0x1c, 0x05, 0xb0, 0xf0, 0xbd, 0x00, 0x00, + 0x70, 0xb5, 0x10, 0x48, 0x04, 0x68, 0x04, 0x60, + 0x0f, 0x49, 0x20, 0x20, 0x08, 0x60, 0xa0, 0x05, + 0x0e, 0x4e, 0x02, 0xd5, 0x70, 0x6a, 0xf6, 0xf7, + 0x05, 0xfa, 0xe0, 0x01, 0x02, 0xd5, 0x30, 0x6e, + 0xf6, 0xf7, 0x00, 0xfa, 0x3c, 0x00, 0xd8, 0x9f, + 0x00, 0x00, 0x0a, 0x48, 0x04, 0x40, 0x00, 0x25, + 0x07, 0xe0, 0xe0, 0x07, 0x03, 0xd5, 0xa8, 0x00, + 0x30, 0x58, 0xf6, 0xf7, 0xf6, 0xf9, 0x01, 0x35, + 0x64, 0x08, 0x00, 0x2c, 0xf5, 0xd1, 0x70, 0xbd, + 0x00, 0x00, 0x00, 0x40, 0x07, 0x00, 0x00, 0x10, + 0x07, 0x00, 0x30, 0x74, 0x01, 0x00, 0xff, 0xfd, + 0xff, 0xfe, 0x80, 0xb5, 0x07, 0x21, 0x80, 0x20, + 0xf7, 0xf7, 0x49, 0xf9, 0x80, 0xbd, 0x3c, 0x00, + 0x14, 0xa0, 0x00, 0x00, 0xf8, 0xb5, 0x14, 0x4b, + 0x82, 0x00, 0x9c, 0x58, 0xca, 0x06, 0x01, 0x27, + 0x39, 0x1c, 0xd2, 0x0e, 0x91, 0x40, 0x11, 0x4a, + 0x11, 0x60, 0x11, 0x4e, 0x40, 0x00, 0x85, 0x19, + 0x15, 0xe0, 0x60, 0x60, 0x20, 0x7b, 0xc1, 0x00, + 0x89, 0x19, 0x10, 0x31, 0x0a, 0x78, 0x0d, 0x23, + 0x9a, 0x43, 0x0a, 0x70, 0x39, 0x1c, 0x81, 0x40, + 0x31, 0x73, 0x07, 0x49, 0x00, 0x01, 0x08, 0x31, + 0x3c, 0x00, 0x50, 0xa0, 0x00, 0x00, 0x40, 0x18, + 0x08, 0x4a, 0x41, 0x68, 0x42, 0x60, 0x80, 0x68, + 0xf6, 0xf7, 0xbe, 0xf9, 0x28, 0x7b, 0x00, 0x28, + 0xe6, 0xd1, 0xf8, 0xbd, 0x00, 0x00, 0xa4, 0x73, + 0x01, 0x00, 0x00, 0x10, 0x07, 0x00, 0x00, 0x60, + 0x07, 0x00, 0xd1, 0x75, 0x00, 0x00, 0x03, 0x49, + 0x01, 0x20, 0x09, 0x7a, 0x00, 0x29, 0x00, 0xd1, + 0x00, 0x20, 0x70, 0x47, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x3c, 0x00, 0x8c, 0xa0, 0x00, 0x00, + 0x03, 0x49, 0x01, 0x20, 0x89, 0x7a, 0x00, 0x29, + 0x00, 0xd1, 0x00, 0x20, 0x70, 0x47, 0x00, 0x00, + 0x14, 0x7a, 0x01, 0x00, 0xb0, 0xb5, 0x00, 0x24, + 0xfa, 0xf7, 0x76, 0xfc, 0x00, 0x28, 0x14, 0xd0, + 0x01, 0x24, 0x08, 0xf0, 0x7d, 0xfe, 0x0a, 0x4d, + 0x0a, 0x4b, 0x00, 0x21, 0x5a, 0x18, 0xa0, 0x32, + 0x12, 0x78, 0x10, 0x2a, 0x06, 0xd3, 0x8a, 0x00, + 0xd2, 0x18, 0x92, 0x6f, 0x3c, 0x00, 0xc8, 0xa0, + 0x00, 0x00, 0x82, 0x1a, 0xaa, 0x42, 0x00, 0xd2, + 0x00, 0x24, 0x01, 0x31, 0x03, 0x29, 0xf0, 0xd3, + 0x20, 0x1c, 0xb0, 0xbd, 0x00, 0x00, 0x8b, 0x08, + 0x00, 0x00, 0xa4, 0x6c, 0x01, 0x00, 0x01, 0x48, + 0xc0, 0x68, 0x70, 0x47, 0x00, 0x00, 0x78, 0x69, + 0x01, 0x00, 0x70, 0xb5, 0x0d, 0x1c, 0x04, 0x1c, + 0x16, 0x1c, 0xfd, 0xf7, 0x2e, 0xfe, 0x00, 0x20, + 0xe0, 0x60, 0x26, 0x61, 0xa5, 0x60, 0x3c, 0x00, + 0x04, 0xa1, 0x00, 0x00, 0x70, 0xbd, 0x00, 0x00, + 0xf8, 0xb5, 0x17, 0x1c, 0x0e, 0x1c, 0x04, 0x1c, + 0x00, 0x28, 0x01, 0xd0, 0x00, 0x2e, 0x01, 0xd1, + 0xf7, 0xf7, 0xf2, 0xf8, 0xa0, 0x68, 0x07, 0xf0, + 0x49, 0xf9, 0x05, 0x1c, 0x01, 0xd1, 0xf7, 0xf7, + 0xeb, 0xf8, 0x29, 0x1c, 0x6e, 0x60, 0xaf, 0x60, + 0x20, 0x1c, 0xfd, 0xf7, 0xfd, 0xfd, 0xe0, 0x68, + 0x41, 0x1c, 0xe1, 0x60, 0x00, 0x28, 0x03, 0xd1, + 0x3c, 0x00, 0x40, 0xa1, 0x00, 0x00, 0x05, 0x48, + 0x21, 0x69, 0x05, 0xf0, 0x2c, 0xf9, 0x20, 0x68, + 0xa8, 0x42, 0x02, 0xd1, 0x38, 0x1c, 0xf6, 0xf7, + 0x48, 0xf9, 0xf8, 0xbd, 0x00, 0x00, 0xc4, 0x60, + 0x01, 0x00, 0x00, 0x22, 0x01, 0x39, 0x10, 0xb5, + 0x05, 0xe0, 0x0c, 0x23, 0x53, 0x43, 0x1c, 0x18, + 0x0c, 0x34, 0xc4, 0x50, 0x01, 0x32, 0x8a, 0x42, + 0xf7, 0xd3, 0x00, 0x21, 0x0c, 0x23, 0x5a, 0x43, + 0x81, 0x50, 0x3c, 0x00, 0x7c, 0xa1, 0x00, 0x00, + 0x10, 0xbd, 0x00, 0x00, 0xb0, 0xb5, 0x04, 0x1c, + 0x01, 0xd1, 0xf7, 0xf7, 0xbb, 0xf8, 0x20, 0x1c, + 0xfd, 0xf7, 0xda, 0xfd, 0x01, 0x1c, 0x85, 0x68, + 0xa0, 0x68, 0x07, 0xf0, 0x09, 0xf9, 0xe0, 0x68, + 0x01, 0x38, 0xe0, 0x60, 0x03, 0xd1, 0x06, 0x48, + 0x21, 0x69, 0x05, 0xf0, 0xe7, 0xf8, 0x21, 0x68, + 0x00, 0x29, 0x03, 0xd0, 0x88, 0x68, 0x49, 0x68, + 0xf6, 0xf7, 0x11, 0xf9, 0x3c, 0x00, 0xb8, 0xa1, + 0x00, 0x00, 0x28, 0x1c, 0xb0, 0xbd, 0xc4, 0x60, + 0x01, 0x00, 0x01, 0x21, 0x00, 0x28, 0x8c, 0xb5, + 0x00, 0xd1, 0x00, 0x21, 0x0e, 0x20, 0x09, 0xf0, + 0x32, 0xfa, 0x83, 0x20, 0x00, 0xab, 0x18, 0x80, + 0x00, 0x20, 0x04, 0xf0, 0x0c, 0xf8, 0x01, 0x90, + 0x68, 0x46, 0x03, 0xf0, 0x7a, 0xf9, 0x8c, 0xbd, + 0x00, 0x00, 0x80, 0xb5, 0x08, 0xf0, 0xdf, 0xfd, + 0x06, 0x49, 0x0a, 0x89, 0x06, 0x49, 0x3c, 0x00, + 0xf4, 0xa1, 0x00, 0x00, 0x09, 0x6e, 0x41, 0x1a, + 0x0b, 0x0c, 0x59, 0x18, 0x89, 0x1a, 0x09, 0x04, + 0x09, 0x0c, 0x40, 0x1a, 0x80, 0xbd, 0x00, 0x00, + 0x00, 0x90, 0x07, 0x00, 0xa4, 0x6c, 0x01, 0x00, + 0x70, 0xb5, 0x04, 0x1c, 0x88, 0x7e, 0x0d, 0x1c, + 0x20, 0x28, 0x03, 0xd9, 0x03, 0x21, 0x18, 0x20, + 0xf7, 0xf7, 0x40, 0xf8, 0x00, 0x26, 0x26, 0x76, + 0xa8, 0x7e, 0x29, 0x1c, 0x1b, 0x31, 0x60, 0x76, + 0x3c, 0x00, 0x30, 0xa2, 0x00, 0x00, 0x20, 0x1c, + 0x1d, 0x30, 0xaa, 0x7e, 0xf6, 0xf7, 0x5f, 0xf9, + 0x68, 0x68, 0x29, 0x1c, 0x60, 0x60, 0xa8, 0x68, + 0x13, 0x31, 0xa0, 0x60, 0xa8, 0x7b, 0x06, 0x22, + 0x20, 0x73, 0xe8, 0x7b, 0x60, 0x73, 0x28, 0x7c, + 0xa0, 0x73, 0x68, 0x7c, 0xe0, 0x73, 0xa8, 0x89, + 0x20, 0x82, 0xa8, 0x7c, 0xe0, 0x76, 0x26, 0x77, + 0x20, 0x1c, 0x12, 0x30, 0xa6, 0x76, 0xf6, 0xf7, + 0x46, 0xf9, 0x3c, 0x00, 0x6c, 0xa2, 0x00, 0x00, + 0x60, 0x68, 0x43, 0x1c, 0x1d, 0xd0, 0x11, 0x4d, + 0x6d, 0x61, 0x28, 0x68, 0x00, 0x28, 0x1a, 0xd0, + 0x22, 0x7b, 0x01, 0x1c, 0x0b, 0x7b, 0x9a, 0x42, + 0x01, 0xd3, 0x20, 0x60, 0x14, 0xe0, 0x0b, 0x1c, + 0x09, 0x68, 0x00, 0x29, 0x0b, 0xd0, 0x0e, 0x7b, + 0xb2, 0x42, 0x08, 0xd2, 0x0b, 0x68, 0x00, 0x2b, + 0xf0, 0xd0, 0x1e, 0x7b, 0xb2, 0x42, 0xed, 0xd3, + 0x23, 0x60, 0x0c, 0x60, 0x3c, 0x00, 0xa8, 0xa2, + 0x00, 0x00, 0x01, 0xe0, 0x21, 0x60, 0x1c, 0x60, + 0x00, 0x20, 0x70, 0xbd, 0x26, 0x60, 0x2c, 0x60, + 0xfa, 0xe7, 0xa4, 0x6e, 0x01, 0x00, 0x13, 0x4a, + 0xb0, 0xb5, 0x51, 0x68, 0x01, 0x24, 0x00, 0x29, + 0x1e, 0xd0, 0x13, 0x1d, 0xd1, 0x61, 0x13, 0x62, + 0x43, 0x68, 0x04, 0xe0, 0x10, 0x62, 0x00, 0x68, + 0xd0, 0x61, 0x00, 0x28, 0x14, 0xd0, 0xd0, 0x69, + 0x45, 0x68, 0x9d, 0x42, 0xf6, 0xd1, 0x3c, 0x00, + 0xe4, 0xa2, 0x00, 0x00, 0x10, 0x6a, 0x81, 0x42, + 0x04, 0xd1, 0x51, 0x60, 0xd0, 0x69, 0x00, 0x68, + 0x08, 0x60, 0x02, 0xe0, 0xd1, 0x69, 0x09, 0x68, + 0x01, 0x60, 0xd0, 0x69, 0xfc, 0xf7, 0xce, 0xff, + 0x00, 0x28, 0x00, 0xd0, 0x00, 0x24, 0x20, 0x1c, + 0xb0, 0xbd, 0x00, 0x00, 0xa4, 0x6e, 0x01, 0x00, + 0xb0, 0xb5, 0x17, 0x4d, 0x01, 0x24, 0x29, 0x68, + 0x00, 0x29, 0x27, 0xd0, 0x6d, 0x61, 0x29, 0x61, + 0x3c, 0x00, 0x20, 0xa3, 0x00, 0x00, 0x43, 0x68, + 0x04, 0xe0, 0x68, 0x61, 0x00, 0x68, 0x28, 0x61, + 0x00, 0x28, 0x1d, 0xd0, 0x28, 0x69, 0x42, 0x68, + 0x9a, 0x42, 0xf6, 0xd1, 0xaa, 0x69, 0x2b, 0x69, + 0x9a, 0x42, 0x00, 0xd1, 0xa9, 0x61, 0x6a, 0x69, + 0x91, 0x42, 0x03, 0xd1, 0x29, 0x60, 0x00, 0x68, + 0x08, 0x60, 0x06, 0xe0, 0x00, 0x68, 0x10, 0x60, + 0x28, 0x68, 0x00, 0x28, 0x01, 0xd1, 0x07, 0xf0, + 0xcc, 0xfe, 0x3c, 0x00, 0x5c, 0xa3, 0x00, 0x00, + 0x28, 0x69, 0xfc, 0xf7, 0x9d, 0xff, 0x00, 0x28, + 0x02, 0xd0, 0x00, 0x24, 0x00, 0xe0, 0x01, 0x24, + 0x20, 0x1c, 0xb0, 0xbd, 0xa4, 0x6e, 0x01, 0x00, + 0xb0, 0xb5, 0x05, 0x1c, 0x07, 0x48, 0x44, 0x68, + 0x07, 0xe0, 0x21, 0x1c, 0x44, 0x31, 0x28, 0x1c, + 0x00, 0xf0, 0xd6, 0xfc, 0x00, 0x28, 0x02, 0xd1, + 0x64, 0x68, 0x00, 0x2c, 0xf5, 0xd1, 0x20, 0x1c, + 0xb0, 0xbd, 0x00, 0x00, 0x3c, 0x00, 0x98, 0xa3, + 0x00, 0x00, 0x58, 0x75, 0x01, 0x00, 0x70, 0xb5, + 0x0d, 0x1c, 0x14, 0x1c, 0x00, 0x28, 0x0b, 0x4e, + 0x08, 0xd0, 0x70, 0x6e, 0x06, 0x23, 0x58, 0x43, + 0x02, 0x04, 0x12, 0x0c, 0x31, 0x1c, 0x28, 0x1c, + 0x22, 0x80, 0x07, 0xe0, 0x21, 0x88, 0x06, 0x20, + 0xf6, 0xf7, 0xa7, 0xf9, 0x70, 0x66, 0x22, 0x88, + 0x29, 0x1c, 0x30, 0x1c, 0xf6, 0xf7, 0x95, 0xf8, + 0x01, 0x20, 0x70, 0xbd, 0x00, 0x00, 0x3c, 0x00, + 0xd4, 0xa3, 0x00, 0x00, 0x10, 0x79, 0x01, 0x00, + 0x80, 0xb5, 0x03, 0x28, 0x03, 0xd8, 0x04, 0x4a, + 0xc0, 0x00, 0x11, 0x50, 0x80, 0xbd, 0x01, 0x21, + 0x26, 0x20, 0xf6, 0xf7, 0x5b, 0xff, 0x80, 0xbd, + 0x7c, 0x79, 0x01, 0x00, 0xb0, 0xb5, 0x05, 0x1c, + 0xc0, 0x68, 0x01, 0x89, 0x39, 0x29, 0x39, 0xd3, + 0x04, 0x68, 0xa0, 0x79, 0x88, 0x28, 0x35, 0xd1, + 0xe0, 0x79, 0x8e, 0x28, 0x32, 0xd1, 0x20, 0x7a, + 0x3c, 0x00, 0x10, 0xa4, 0x00, 0x00, 0x01, 0x28, + 0x2f, 0xd1, 0x60, 0x7a, 0x03, 0x28, 0x2c, 0xd1, + 0x20, 0x7b, 0x02, 0x28, 0x01, 0xd0, 0xfe, 0x28, + 0x27, 0xd1, 0x60, 0x7b, 0x1d, 0x21, 0x08, 0x40, + 0x01, 0x28, 0x22, 0xd1, 0xa0, 0x7b, 0xc8, 0x21, + 0x08, 0x40, 0x08, 0x28, 0x1d, 0xd1, 0xa8, 0x1d, + 0xfb, 0xf7, 0xe1, 0xf9, 0x00, 0x28, 0x18, 0xd0, + 0x19, 0x20, 0x21, 0x5c, 0x00, 0x29, 0x14, 0xd1, + 0x01, 0x30, 0x3c, 0x00, 0x4c, 0xa4, 0x00, 0x00, + 0x39, 0x28, 0xf9, 0xdb, 0x68, 0x8b, 0x04, 0x21, + 0x08, 0x43, 0x68, 0x83, 0x03, 0xf0, 0xd6, 0xfe, + 0x00, 0x28, 0x09, 0xd1, 0x00, 0x23, 0x00, 0x22, + 0x26, 0x20, 0x04, 0x49, 0x09, 0xf0, 0x92, 0xf9, + 0x03, 0x48, 0x00, 0x68, 0x01, 0xf0, 0x84, 0xf9, + 0xb0, 0xbd, 0x00, 0x00, 0x50, 0xc3, 0x00, 0x00, + 0x0c, 0x79, 0x01, 0x00, 0xb0, 0xb5, 0x08, 0x4c, + 0xa3, 0x68, 0x01, 0x33, 0x3c, 0x00, 0x88, 0xa4, + 0x00, 0x00, 0xa3, 0x60, 0x0c, 0x1c, 0x09, 0xd0, + 0x25, 0x68, 0x00, 0x2d, 0x03, 0xd0, 0x23, 0x7a, + 0x61, 0x68, 0xf5, 0xf7, 0xa3, 0xff, 0x20, 0x1c, + 0xf7, 0xf7, 0xa9, 0xf9, 0xb0, 0xbd, 0x94, 0x79, + 0x01, 0x00, 0x70, 0xb5, 0x04, 0x1c, 0xc0, 0x68, + 0x01, 0x89, 0x05, 0x68, 0x08, 0x29, 0x53, 0xd3, + 0x06, 0x22, 0x28, 0x1c, 0x55, 0x49, 0xf5, 0xf7, + 0x9e, 0xff, 0x00, 0x28, 0x37, 0xd1, 0x3c, 0x00, + 0xc4, 0xa4, 0x00, 0x00, 0xe9, 0x88, 0x52, 0x4e, + 0x04, 0x3e, 0x81, 0x29, 0x24, 0xd1, 0xe5, 0x68, + 0x29, 0x68, 0x08, 0x7a, 0x4a, 0x7a, 0x00, 0x02, + 0x80, 0x18, 0x00, 0x04, 0x00, 0x0c, 0x42, 0x0b, + 0x00, 0x05, 0x00, 0x0d, 0xe2, 0x75, 0x20, 0x83, + 0x4b, 0x89, 0x00, 0x20, 0x42, 0x00, 0xb2, 0x5a, + 0x9a, 0x42, 0x06, 0xd1, 0x28, 0x89, 0x0c, 0x38, + 0x02, 0x0a, 0x00, 0x02, 0x10, 0x43, 0x48, 0x81, + 0x3c, 0x00, 0x00, 0xa5, 0x00, 0x00, 0x02, 0xe0, + 0x01, 0x30, 0x02, 0x28, 0xf1, 0xd3, 0xe0, 0x68, + 0x01, 0x89, 0x0a, 0x39, 0x01, 0x81, 0xe0, 0x68, + 0x01, 0x68, 0x0a, 0x31, 0x1c, 0xe0, 0x00, 0x22, + 0x00, 0x20, 0x43, 0x00, 0xf3, 0x5a, 0x8b, 0x42, + 0x01, 0xd1, 0x01, 0x22, 0x02, 0xe0, 0x01, 0x30, + 0x02, 0x28, 0xf6, 0xd3, 0x00, 0x2a, 0x11, 0xd1, + 0x07, 0xe0, 0x36, 0x49, 0x06, 0x22, 0x06, 0x31, + 0x28, 0x1c, 0x3c, 0x00, 0x3c, 0xa5, 0x00, 0x00, + 0xf5, 0xf7, 0x5e, 0xff, 0x00, 0x28, 0x08, 0xd1, + 0xe0, 0x68, 0x01, 0x89, 0x06, 0x39, 0x01, 0x81, + 0xe0, 0x68, 0x01, 0x68, 0x06, 0x31, 0x01, 0x60, + 0x10, 0xe0, 0xe0, 0x68, 0xff, 0xf7, 0xe2, 0xfc, + 0x0c, 0xe0, 0x02, 0x31, 0x01, 0x81, 0xe0, 0x68, + 0x01, 0x68, 0x02, 0x39, 0x01, 0x60, 0xe0, 0x68, + 0x00, 0x89, 0x02, 0x38, 0x02, 0x0a, 0x00, 0x02, + 0x10, 0x43, 0x08, 0x80, 0x3c, 0x00, 0x78, 0xa5, + 0x00, 0x00, 0xe0, 0x68, 0x03, 0x25, 0x02, 0x89, + 0x01, 0x68, 0x24, 0x4e, 0x02, 0x2a, 0x10, 0xd9, + 0x09, 0x88, 0x08, 0x29, 0x05, 0xd0, 0xc1, 0x23, + 0xdb, 0x00, 0x99, 0x42, 0x03, 0xd1, 0x01, 0x25, + 0x02, 0xe0, 0x00, 0x25, 0x00, 0xe0, 0x02, 0x25, + 0xe9, 0x00, 0x71, 0x58, 0x00, 0x29, 0x00, 0xd1, + 0x02, 0x25, 0xf7, 0xf7, 0x04, 0xf8, 0xe9, 0x00, + 0x89, 0x19, 0x89, 0x88, 0x88, 0x42, 0x3c, 0x00, + 0xb4, 0xa5, 0x00, 0x00, 0x00, 0xd9, 0x03, 0x25, + 0xa1, 0x1d, 0x20, 0x1c, 0xfd, 0xf7, 0x34, 0xfc, + 0x00, 0x28, 0x00, 0xd1, 0x03, 0x25, 0x02, 0x2d, + 0x05, 0xd0, 0x03, 0x2d, 0x07, 0xd1, 0xe0, 0x68, + 0xf6, 0xf7, 0xe2, 0xff, 0x70, 0xbd, 0x20, 0x1c, + 0xfd, 0xf7, 0x1c, 0xfd, 0x70, 0xbd, 0xe0, 0x68, + 0x01, 0x89, 0x02, 0x39, 0x01, 0x81, 0xe0, 0x68, + 0x01, 0x68, 0x02, 0x31, 0x01, 0x60, 0xe8, 0x00, + 0x3c, 0x00, 0xf0, 0xa5, 0x00, 0x00, 0x31, 0x58, + 0x20, 0x1c, 0xf5, 0xf7, 0xf1, 0xfe, 0x00, 0x28, + 0xef, 0xd1, 0xe0, 0x68, 0x01, 0x89, 0x02, 0x31, + 0x01, 0x81, 0xe0, 0x68, 0x01, 0x68, 0x02, 0x39, + 0x01, 0x60, 0xe3, 0xe7, 0x00, 0x00, 0x6a, 0x46, + 0x01, 0x00, 0x7c, 0x79, 0x01, 0x00, 0x70, 0xb5, + 0x0e, 0x1c, 0x04, 0x1c, 0x15, 0x1c, 0xf7, 0xf7, + 0x8c, 0xfb, 0x00, 0x28, 0x2a, 0xd0, 0x1b, 0x49, + 0x08, 0x68, 0x3c, 0x00, 0x2c, 0xa6, 0x00, 0x00, + 0x01, 0x30, 0x08, 0x60, 0x00, 0x2e, 0x0a, 0xd0, + 0x01, 0x2e, 0x0b, 0xd0, 0x02, 0x2e, 0x0f, 0xd1, + 0x20, 0x1c, 0x04, 0xf0, 0xcd, 0xf8, 0x20, 0x1c, + 0xff, 0xf7, 0xd6, 0xfe, 0x0c, 0xe0, 0x08, 0x21, + 0xe0, 0x68, 0x02, 0xe0, 0xc1, 0x21, 0xe0, 0x68, + 0xc9, 0x00, 0x04, 0xf0, 0x35, 0xf9, 0x03, 0xe0, + 0x02, 0x21, 0x26, 0x20, 0xf6, 0xf7, 0x20, 0xfe, + 0xe2, 0x7d, 0xe1, 0x6a, 0x3c, 0x00, 0x68, 0xa6, + 0x00, 0x00, 0x28, 0x1c, 0xfc, 0xf7, 0x95, 0xfb, + 0x20, 0x63, 0x00, 0x20, 0x20, 0x62, 0xa0, 0x62, + 0x20, 0x1c, 0x00, 0xf0, 0x6c, 0xfe, 0x70, 0xbd, + 0xe0, 0x68, 0xf6, 0xf7, 0x8a, 0xff, 0x00, 0x2d, + 0xf9, 0xd0, 0xe3, 0x7d, 0x00, 0x22, 0x01, 0x20, + 0xe1, 0x6a, 0xf5, 0xf7, 0xa7, 0xfe, 0x70, 0xbd, + 0x00, 0x00, 0x94, 0x79, 0x01, 0x00, 0x80, 0xb5, + 0x01, 0x28, 0x04, 0xd1, 0x05, 0x48, 0x3c, 0x00, + 0xa4, 0xa6, 0x00, 0x00, 0x00, 0x68, 0x01, 0xf0, + 0x09, 0xf9, 0x80, 0xbd, 0x03, 0x21, 0x26, 0x20, + 0xf6, 0xf7, 0xf8, 0xfd, 0x80, 0xbd, 0x00, 0x00, + 0x0c, 0x79, 0x01, 0x00, 0xf8, 0xb5, 0x06, 0x1c, + 0x80, 0x79, 0x00, 0x24, 0xc0, 0x07, 0x2d, 0xd5, + 0xf0, 0x68, 0x00, 0x68, 0x41, 0x7a, 0x11, 0x29, + 0x28, 0xd1, 0xc1, 0x88, 0x0a, 0x0a, 0x09, 0x02, + 0x11, 0x43, 0xc9, 0x04, 0x22, 0xd1, 0x01, 0x78, + 0x3c, 0x00, 0xe0, 0xa6, 0x00, 0x00, 0x11, 0x4f, + 0x09, 0x07, 0x89, 0x0e, 0x08, 0x18, 0x41, 0x88, + 0x0a, 0x0a, 0x09, 0x02, 0x11, 0x43, 0x0d, 0x04, + 0x2d, 0x0c, 0x43, 0x2d, 0x39, 0x68, 0x01, 0xd1, + 0xca, 0x07, 0x0e, 0xd4, 0x44, 0x2d, 0x06, 0xd1, + 0xc9, 0x07, 0x04, 0xd5, 0x24, 0x30, 0x00, 0xf0, + 0x22, 0xfb, 0x00, 0x28, 0x05, 0xd0, 0x06, 0x48, + 0x85, 0x42, 0x06, 0xd1, 0x38, 0x68, 0x80, 0x07, + 0x03, 0xd5, 0x3c, 0x00, 0x1c, 0xa7, 0x00, 0x00, + 0x01, 0x24, 0xf0, 0x68, 0xf6, 0xf7, 0x3a, 0xff, + 0x20, 0x1c, 0xf8, 0xbd, 0x7c, 0x5a, 0x01, 0x00, + 0x6c, 0x07, 0x00, 0x00, 0x80, 0xb5, 0x00, 0x28, + 0x07, 0xd0, 0x00, 0x21, 0x26, 0x20, 0x08, 0xf0, + 0x7b, 0xff, 0x02, 0x48, 0x00, 0x68, 0x01, 0xf0, + 0xbb, 0xf8, 0x80, 0xbd, 0x0c, 0x79, 0x01, 0x00, + 0x10, 0xb5, 0x04, 0x1c, 0x09, 0x4a, 0x08, 0x1c, + 0x51, 0x68, 0x01, 0x31, 0x3c, 0x00, 0x58, 0xa7, + 0x00, 0x00, 0x51, 0x60, 0x00, 0x21, 0x21, 0x62, + 0xa1, 0x62, 0xe2, 0x7d, 0xe1, 0x6a, 0xfc, 0xf7, + 0x18, 0xfb, 0x20, 0x63, 0x20, 0x1c, 0xf7, 0xf7, + 0xe6, 0xfa, 0x20, 0x1c, 0x00, 0xf0, 0xef, 0xfd, + 0x10, 0xbd, 0x94, 0x79, 0x01, 0x00, 0x0c, 0xb5, + 0x02, 0x1c, 0x08, 0x1c, 0x00, 0x21, 0x01, 0x91, + 0x00, 0x92, 0x6a, 0x46, 0x01, 0xa9, 0x00, 0xf0, + 0x02, 0xf8, 0x0c, 0xbd, 0x00, 0x00, 0x3c, 0x00, + 0x94, 0xa7, 0x00, 0x00, 0x70, 0xb5, 0x13, 0x68, + 0x00, 0x2b, 0x1e, 0xd0, 0x00, 0x26, 0x0b, 0x68, + 0x00, 0x2b, 0x02, 0xd1, 0x13, 0x68, 0x1b, 0x68, + 0x0b, 0x60, 0x13, 0x68, 0x1c, 0x68, 0x1b, 0x89, + 0xe5, 0x18, 0x08, 0xe0, 0x5c, 0x78, 0x1c, 0x19, + 0x02, 0x34, 0x0c, 0x60, 0x1c, 0x78, 0x84, 0x42, + 0x01, 0xd1, 0x18, 0x1c, 0x70, 0xbd, 0x0b, 0x68, + 0xab, 0x42, 0xf3, 0xd3, 0x13, 0x68, 0xdb, 0x68, + 0x3c, 0x00, 0xd0, 0xa7, 0x00, 0x00, 0x13, 0x60, + 0x0e, 0x60, 0x13, 0x68, 0x00, 0x2b, 0xe1, 0xd1, + 0x00, 0x20, 0x70, 0xbd, 0x00, 0x00, 0x70, 0xb5, + 0x03, 0x1c, 0x20, 0xd0, 0x18, 0x68, 0x1e, 0x89, + 0x05, 0x1c, 0x16, 0xe0, 0x04, 0x78, 0xdd, 0x2c, + 0x10, 0xd1, 0x84, 0x78, 0x00, 0x2c, 0x0d, 0xd1, + 0xc4, 0x78, 0x50, 0x2c, 0x0a, 0xd1, 0x04, 0x79, + 0xf2, 0x2c, 0x07, 0xd1, 0x44, 0x79, 0x8c, 0x42, + 0x04, 0xd1, 0x3c, 0x00, 0x0c, 0xa8, 0x00, 0x00, + 0x02, 0x29, 0x0c, 0xd1, 0x84, 0x79, 0x94, 0x42, + 0x09, 0xd0, 0x44, 0x78, 0x20, 0x18, 0x02, 0x30, + 0x44, 0x1b, 0xb4, 0x42, 0xe5, 0xdb, 0xdb, 0x68, + 0x00, 0x2b, 0xde, 0xd1, 0x00, 0x20, 0x70, 0xbd, + 0x04, 0x49, 0x80, 0xb5, 0x0a, 0x78, 0x0a, 0x20, + 0x00, 0x2a, 0x00, 0xd0, 0x48, 0x6a, 0x00, 0xf0, + 0xd1, 0xf8, 0x80, 0xbd, 0x1c, 0x75, 0x01, 0x00, + 0xb0, 0xb5, 0x17, 0x4c, 0x3c, 0x00, 0x48, 0xa8, + 0x00, 0x00, 0x20, 0x68, 0x00, 0x28, 0x29, 0xd0, + 0x16, 0x4d, 0xe8, 0x69, 0x00, 0x28, 0x25, 0xd1, + 0x01, 0xf0, 0x3f, 0xfa, 0x00, 0x28, 0x21, 0xd1, + 0xff, 0xf7, 0x41, 0xfc, 0x00, 0x28, 0x1d, 0xd1, + 0x20, 0x68, 0xa9, 0x69, 0x40, 0x18, 0x08, 0xf0, + 0xd6, 0xf9, 0x00, 0x28, 0x16, 0xd0, 0x02, 0xf0, + 0x06, 0xfd, 0x21, 0x68, 0x40, 0x18, 0x08, 0xf0, + 0xce, 0xf9, 0x00, 0x28, 0x0e, 0xd0, 0x3c, 0x00, + 0x84, 0xa8, 0x00, 0x00, 0x01, 0x20, 0xe8, 0x61, + 0x00, 0x22, 0x25, 0x21, 0x80, 0x20, 0x08, 0xf0, + 0x8f, 0xff, 0x06, 0x48, 0x29, 0x6a, 0x04, 0xf0, + 0x83, 0xfd, 0x01, 0x21, 0x28, 0x6a, 0x00, 0xf0, + 0x89, 0xff, 0xb0, 0xbd, 0xe8, 0x59, 0x01, 0x00, + 0x1c, 0x75, 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, + 0x70, 0xb5, 0x05, 0x1c, 0x00, 0x24, 0xfa, 0xf7, + 0x0b, 0xff, 0x18, 0x4e, 0x71, 0x6a, 0x40, 0x18, + 0x3c, 0x00, 0xc0, 0xa8, 0x00, 0x00, 0x00, 0xf0, + 0x8e, 0xf8, 0x00, 0x28, 0x0b, 0xd1, 0x04, 0xf0, + 0xfe, 0xfb, 0x00, 0x21, 0x25, 0x20, 0x08, 0xf0, + 0xb0, 0xfe, 0x03, 0x22, 0x29, 0x1c, 0x28, 0x1c, + 0x00, 0xf0, 0xaf, 0xf8, 0x18, 0xe0, 0x70, 0x6a, + 0x44, 0x1e, 0x00, 0xf0, 0x7c, 0xf8, 0x00, 0x28, + 0x12, 0xd1, 0x0c, 0x48, 0x31, 0x6a, 0x04, 0xf0, + 0x56, 0xfd, 0x01, 0x21, 0x30, 0x6a, 0x00, 0xf0, + 0x5c, 0xff, 0x3c, 0x00, 0xfc, 0xa8, 0x00, 0x00, + 0x00, 0x20, 0xfa, 0xf7, 0x0d, 0xfe, 0x06, 0xf0, + 0x03, 0xf8, 0x00, 0x23, 0x00, 0x22, 0x25, 0x20, + 0x05, 0x49, 0x08, 0xf0, 0x3f, 0xff, 0x20, 0x1c, + 0x07, 0xf0, 0xfc, 0xfa, 0x70, 0xbd, 0x00, 0x00, + 0x1c, 0x75, 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, + 0x10, 0x27, 0x00, 0x00, 0x80, 0xb5, 0x01, 0x28, + 0x07, 0xd0, 0x80, 0x28, 0x0d, 0xd1, 0x00, 0x22, + 0x00, 0x21, 0x08, 0x48, 0x3c, 0x00, 0x38, 0xa9, + 0x00, 0x00, 0xf8, 0xf7, 0x9a, 0xfe, 0x80, 0xbd, + 0x01, 0x29, 0x02, 0xd1, 0x06, 0x49, 0x00, 0x20, + 0xc8, 0x61, 0x04, 0xf0, 0xbe, 0xfb, 0x80, 0xbd, + 0x05, 0x21, 0x25, 0x20, 0xf6, 0xf7, 0xa7, 0xfc, + 0x80, 0xbd, 0x61, 0xa9, 0x00, 0x00, 0x1c, 0x75, + 0x01, 0x00, 0x00, 0x21, 0x00, 0x28, 0x80, 0xb5, + 0x01, 0xd1, 0x03, 0x48, 0x41, 0x68, 0x01, 0x22, + 0x25, 0x20, 0x08, 0xf0, 0x2c, 0xfe, 0x3c, 0x00, + 0x74, 0xa9, 0x00, 0x00, 0x80, 0xbd, 0x00, 0x00, + 0xe8, 0x59, 0x01, 0x00, 0x02, 0x49, 0xc8, 0x68, + 0x01, 0x38, 0x48, 0x62, 0x70, 0x47, 0x00, 0x00, + 0x1c, 0x75, 0x01, 0x00, 0x38, 0xb5, 0x03, 0x1c, + 0x08, 0x1c, 0x19, 0x1c, 0x11, 0x4b, 0x06, 0xd0, + 0x01, 0x21, 0x11, 0x80, 0x0a, 0x1c, 0x19, 0x1c, + 0xf5, 0xf7, 0xaa, 0xfd, 0x17, 0xe0, 0x0d, 0x4d, + 0x01, 0x1c, 0x2c, 0x78, 0x12, 0x88, 0x18, 0x1c, + 0x3c, 0x00, 0xb0, 0xa9, 0x00, 0x00, 0xf5, 0xf7, + 0xa2, 0xfd, 0x28, 0x78, 0x84, 0x42, 0x0d, 0xd0, + 0x00, 0x23, 0x6b, 0x61, 0x00, 0x28, 0x03, 0xd0, + 0x00, 0x20, 0x07, 0xf0, 0xa4, 0xfa, 0x05, 0xe0, + 0x00, 0x22, 0x00, 0x21, 0x00, 0x20, 0x00, 0x92, + 0xf8, 0xf7, 0x23, 0xfc, 0x01, 0x20, 0x38, 0xbd, + 0x00, 0x00, 0x1c, 0x75, 0x01, 0x00, 0x70, 0xb5, + 0x04, 0x1c, 0x01, 0x26, 0x08, 0xf0, 0xe1, 0xf9, + 0x05, 0x1c, 0x3c, 0x00, 0xec, 0xa9, 0x00, 0x00, + 0x00, 0x20, 0xfa, 0xf7, 0x8b, 0xfd, 0x44, 0x43, + 0x02, 0xf0, 0x40, 0xfc, 0x02, 0xf0, 0x3e, 0xfc, + 0x01, 0x1c, 0x23, 0x1c, 0x00, 0x22, 0x28, 0x1c, + 0x08, 0xf0, 0x7c, 0xfa, 0x00, 0x28, 0x13, 0xd1, + 0x0a, 0x48, 0x23, 0x1c, 0x00, 0x22, 0x81, 0x69, + 0x28, 0x1c, 0x08, 0xf0, 0x73, 0xfa, 0x00, 0x28, + 0x0a, 0xd1, 0xf8, 0xf7, 0x19, 0xfc, 0x01, 0x1c, + 0x23, 0x1c, 0x00, 0x22, 0x3c, 0x00, 0x28, 0xaa, + 0x00, 0x00, 0x28, 0x1c, 0x08, 0xf0, 0x69, 0xfa, + 0x00, 0x28, 0x00, 0xd1, 0x00, 0x26, 0x30, 0x1c, + 0x70, 0xbd, 0x1c, 0x75, 0x01, 0x00, 0x70, 0xb5, + 0x0d, 0x1c, 0x04, 0x1c, 0x16, 0x1c, 0x07, 0xf0, + 0x76, 0xf9, 0x00, 0x28, 0x0d, 0xd0, 0xfa, 0xf7, + 0x52, 0xfe, 0x00, 0x28, 0x09, 0xd0, 0xff, 0x30, + 0x01, 0x30, 0x43, 0x68, 0x00, 0x2b, 0x04, 0xd0, + 0x22, 0x1c, 0x29, 0x1c, 0x30, 0x1c, 0x3c, 0x00, + 0x64, 0xaa, 0x00, 0x00, 0xf5, 0xf7, 0xbb, 0xfc, + 0x70, 0xbd, 0x00, 0x00, 0x80, 0xb5, 0x01, 0x21, + 0x1d, 0x20, 0x08, 0xf0, 0xdf, 0xfd, 0x07, 0x4a, + 0x07, 0x48, 0x11, 0x69, 0x01, 0x60, 0x51, 0x69, + 0x41, 0x60, 0x06, 0x49, 0x49, 0x68, 0x81, 0x60, + 0x00, 0x21, 0xc1, 0x60, 0x03, 0xf0, 0x74, 0xfc, + 0x80, 0xbd, 0x00, 0x00, 0x28, 0x61, 0x01, 0x00, + 0x48, 0x75, 0x01, 0x00, 0x90, 0x5c, 0x01, 0x00, + 0x3c, 0x00, 0xa0, 0xaa, 0x00, 0x00, 0x70, 0xb5, + 0x04, 0x1c, 0x40, 0x6b, 0x00, 0x28, 0x35, 0xd0, + 0x1d, 0x4d, 0x00, 0x26, 0x28, 0x78, 0x00, 0x28, + 0x24, 0xd0, 0x41, 0x20, 0x00, 0x5d, 0x00, 0x28, + 0x03, 0xd1, 0x08, 0xf0, 0x76, 0xf9, 0xa8, 0x61, + 0x1b, 0xe0, 0x69, 0x69, 0x01, 0x31, 0x69, 0x61, + 0xa8, 0x68, 0x00, 0x28, 0x08, 0xd0, 0x81, 0x42, + 0x06, 0xd1, 0x20, 0x69, 0x01, 0x1c, 0x10, 0x31, + 0x04, 0x30, 0x3c, 0x00, 0xdc, 0xaa, 0x00, 0x00, + 0x82, 0x22, 0xff, 0xf7, 0xad, 0xff, 0x68, 0x68, + 0x00, 0x28, 0x0a, 0xd0, 0x69, 0x69, 0x81, 0x42, + 0x07, 0xd1, 0x20, 0x69, 0x01, 0x1c, 0x10, 0x31, + 0x04, 0x30, 0x02, 0x22, 0xff, 0xf7, 0xa0, 0xff, + 0x6e, 0x61, 0x68, 0x78, 0x05, 0x21, 0x08, 0x40, + 0x08, 0xd0, 0x07, 0x48, 0x00, 0x78, 0x0e, 0x28, + 0x03, 0xd3, 0x60, 0x34, 0xe0, 0x79, 0xfb, 0xf7, + 0xcf, 0xff, 0x70, 0xbd, 0x3c, 0x00, 0x18, 0xab, + 0x00, 0x00, 0x03, 0x48, 0x06, 0x60, 0x70, 0xbd, + 0x00, 0x00, 0x1c, 0x75, 0x01, 0x00, 0x10, 0x67, + 0x01, 0x00, 0xd4, 0x7e, 0x01, 0x00, 0x80, 0x02, + 0x70, 0x47, 0x14, 0x23, 0x30, 0xb5, 0x09, 0x4d, + 0x4b, 0x43, 0x5b, 0x19, 0x5b, 0x68, 0x08, 0x24, + 0x00, 0x2b, 0x00, 0xd1, 0x02, 0x24, 0x38, 0x23, + 0x5a, 0x43, 0x05, 0x4b, 0x89, 0x00, 0xd2, 0x18, + 0x51, 0x5a, 0x02, 0x68, 0x09, 0x19, 0x3c, 0x00, + 0x54, 0xab, 0x00, 0x00, 0x51, 0x1a, 0x01, 0x60, + 0x30, 0xbd, 0x00, 0x00, 0x74, 0x40, 0x01, 0x00, + 0x8c, 0x41, 0x01, 0x00, 0xf8, 0xb5, 0x07, 0x1c, + 0x2c, 0x48, 0x14, 0x1c, 0x2c, 0x4a, 0x48, 0x43, + 0x86, 0x46, 0x80, 0x18, 0x80, 0x0d, 0x84, 0x46, + 0x2b, 0x48, 0x2a, 0x4a, 0x06, 0x26, 0x1d, 0x1c, + 0x48, 0x43, 0x4a, 0x43, 0x0e, 0x2f, 0x40, 0xd2, + 0x01, 0xa3, 0xdb, 0x5d, 0x5b, 0x00, 0x9f, 0x44, + 0x3c, 0x00, 0x90, 0xab, 0x00, 0x00, 0x06, 0x08, + 0x0a, 0x0f, 0x14, 0x18, 0x1d, 0x20, 0x27, 0x24, + 0x27, 0x2b, 0x2f, 0x31, 0xc8, 0x00, 0x1f, 0xe0, + 0x88, 0x00, 0x1d, 0xe0, 0x21, 0x49, 0x70, 0x46, + 0x40, 0x18, 0x00, 0x0d, 0x18, 0xe0, 0x1f, 0x4a, + 0x80, 0x18, 0x80, 0x0d, 0x40, 0x18, 0x21, 0xe0, + 0x1e, 0x48, 0x10, 0x18, 0x00, 0x0d, 0x1d, 0xe0, + 0x1d, 0x49, 0x70, 0x46, 0x40, 0x18, 0x40, 0x0d, + 0x0a, 0xe0, 0x3c, 0x00, 0xcc, 0xab, 0x00, 0x00, + 0x1b, 0x49, 0x40, 0x18, 0x01, 0xe0, 0x1b, 0x48, + 0x10, 0x18, 0x40, 0x0d, 0x11, 0xe0, 0x1a, 0x49, + 0x40, 0x18, 0x05, 0xe0, 0x60, 0x46, 0x20, 0x80, + 0x00, 0x20, 0x16, 0xe0, 0x17, 0x48, 0x10, 0x18, + 0x80, 0x0d, 0x06, 0xe0, 0x16, 0x49, 0x02, 0xe0, + 0x16, 0x48, 0x48, 0x43, 0x16, 0x49, 0x40, 0x18, + 0xc0, 0x0d, 0x03, 0x30, 0x80, 0x08, 0x80, 0x00, + 0x20, 0x80, 0x2e, 0x80, 0x3c, 0x00, 0x08, 0xac, + 0x00, 0x00, 0xf8, 0xbd, 0xff, 0x21, 0xff, 0x20, + 0xf6, 0xf7, 0x49, 0xfb, 0x00, 0x20, 0x20, 0x80, + 0x28, 0x80, 0xf6, 0xe7, 0x00, 0x00, 0xd1, 0x45, + 0x17, 0x00, 0xff, 0xff, 0x3f, 0x00, 0xe3, 0x38, + 0x0e, 0x00, 0x55, 0x55, 0x15, 0x00, 0xff, 0xff, + 0x0f, 0x00, 0xa9, 0xaa, 0x2a, 0x01, 0x70, 0x1c, + 0x37, 0x00, 0xff, 0xff, 0x1f, 0x00, 0xcb, 0xcc, + 0x4c, 0x00, 0x70, 0x1c, 0x47, 0x00, 0x3c, 0x00, + 0x44, 0xac, 0x00, 0x00, 0xa9, 0xaa, 0x7a, 0x00, + 0x70, 0x1c, 0x67, 0x00, 0xa9, 0xaa, 0xba, 0x00, + 0x84, 0xf6, 0x12, 0x00, 0xec, 0x25, 0xb4, 0x00, + 0x04, 0x49, 0x00, 0x28, 0x01, 0xd0, 0x09, 0x22, + 0x00, 0xe0, 0x14, 0x22, 0x4a, 0x80, 0x48, 0x60, + 0x70, 0x47, 0x00, 0x00, 0xa4, 0x69, 0x01, 0x00, + 0x80, 0xb5, 0x06, 0x22, 0xf5, 0xf7, 0x40, 0xfc, + 0x80, 0xbd, 0x00, 0x00, 0xbc, 0xb5, 0x15, 0x1c, + 0x3c, 0x00, 0x80, 0xac, 0x00, 0x00, 0x04, 0x1c, + 0x04, 0x31, 0x09, 0x04, 0x09, 0x0c, 0x01, 0xaa, + 0x6b, 0x46, 0xff, 0xf7, 0x6a, 0xff, 0x38, 0x20, + 0x06, 0x49, 0x68, 0x43, 0x40, 0x18, 0xa1, 0x00, + 0x40, 0x5a, 0x00, 0xab, 0x99, 0x88, 0x40, 0x18, + 0x19, 0x88, 0x40, 0x18, 0x00, 0x04, 0x00, 0x0c, + 0xbc, 0xbd, 0x8c, 0x41, 0x01, 0x00, 0xbc, 0xb5, + 0x04, 0x1c, 0x15, 0x1c, 0x01, 0xaa, 0x6b, 0x46, + 0xff, 0xf7, 0x3c, 0x00, 0xbc, 0xac, 0x00, 0x00, + 0x53, 0xff, 0x38, 0x20, 0x05, 0x49, 0x68, 0x43, + 0x40, 0x18, 0xa1, 0x00, 0x40, 0x5a, 0x00, 0xab, + 0x99, 0x88, 0x40, 0x18, 0x00, 0x04, 0x00, 0x0c, + 0xbc, 0xbd, 0x00, 0x00, 0x8c, 0x41, 0x01, 0x00, + 0x80, 0xb5, 0x00, 0x28, 0x0f, 0xd0, 0x00, 0x29, + 0x0d, 0xd0, 0x02, 0x78, 0x0b, 0x78, 0x9a, 0x42, + 0x09, 0xd1, 0xff, 0x2a, 0x05, 0xd0, 0x42, 0x78, + 0x02, 0x32, 0xf5, 0xf7, 0x3c, 0x00, 0xf8, 0xac, + 0x00, 0x00, 0x81, 0xfb, 0x00, 0x28, 0x01, 0xd1, + 0x01, 0x20, 0x80, 0xbd, 0x00, 0x20, 0x80, 0xbd, + 0x00, 0x00, 0x80, 0xb5, 0x06, 0x22, 0x04, 0x49, + 0xf5, 0xf7, 0x75, 0xfb, 0x00, 0x28, 0x01, 0xd1, + 0x01, 0x20, 0x80, 0xbd, 0x00, 0x20, 0x80, 0xbd, + 0x00, 0x00, 0x5e, 0x40, 0x01, 0x00, 0x01, 0x1c, + 0x49, 0x78, 0x01, 0x20, 0x00, 0x29, 0x00, 0xd0, + 0x00, 0x20, 0x70, 0x47, 0x00, 0x00, 0x3c, 0x00, + 0x34, 0xad, 0x00, 0x00, 0x80, 0xb5, 0x06, 0x22, + 0xf5, 0xf7, 0x60, 0xfb, 0x00, 0x28, 0x01, 0xd1, + 0x01, 0x20, 0x80, 0xbd, 0x00, 0x20, 0x80, 0xbd, + 0x80, 0xb5, 0xff, 0xf7, 0xc7, 0xff, 0x80, 0xbd, + 0x80, 0xb5, 0x06, 0x22, 0x04, 0x49, 0xf5, 0xf7, + 0x51, 0xfb, 0x00, 0x28, 0x01, 0xd1, 0x01, 0x20, + 0x80, 0xbd, 0x00, 0x20, 0x80, 0xbd, 0x00, 0x00, + 0x12, 0x61, 0x01, 0x00, 0x01, 0x1c, 0x80, 0x20, + 0x3c, 0x00, 0x70, 0xad, 0x00, 0x00, 0x81, 0x43, + 0x8a, 0x08, 0x0e, 0x20, 0x1c, 0x2a, 0x10, 0xb5, + 0x06, 0xd2, 0x03, 0x4c, 0x52, 0x00, 0xa3, 0x5c, + 0x8b, 0x42, 0x01, 0xd1, 0x10, 0x19, 0x40, 0x78, + 0x10, 0xbd, 0xfc, 0x41, 0x01, 0x00, 0x14, 0x23, + 0x02, 0x49, 0x58, 0x43, 0x40, 0x18, 0x40, 0x68, + 0x70, 0x47, 0x74, 0x40, 0x01, 0x00, 0x20, 0x22, + 0x01, 0x1c, 0x80, 0xb5, 0x02, 0x48, 0xf5, 0xf7, + 0x52, 0xfd, 0x3c, 0x00, 0xac, 0xad, 0x00, 0x00, + 0x80, 0xbd, 0x00, 0x00, 0x48, 0x61, 0x01, 0x00, + 0x08, 0x06, 0x00, 0x0e, 0x02, 0x28, 0x01, 0xd1, + 0x00, 0x20, 0x70, 0x47, 0x01, 0x20, 0x70, 0x47, + 0x00, 0x29, 0x0c, 0xd0, 0x07, 0x49, 0x09, 0x68, + 0x00, 0x29, 0x08, 0xd0, 0x14, 0x23, 0x06, 0x49, + 0x58, 0x43, 0x40, 0x18, 0xc0, 0x68, 0x00, 0x28, + 0x01, 0xd0, 0x01, 0x20, 0x70, 0x47, 0x00, 0x20, + 0x70, 0x47, 0x00, 0x00, 0x3c, 0x00, 0xe8, 0xad, + 0x00, 0x00, 0xac, 0x69, 0x01, 0x00, 0x74, 0x40, + 0x01, 0x00, 0x10, 0xb5, 0x04, 0x1c, 0x06, 0x22, + 0x01, 0x1c, 0x04, 0x48, 0xf5, 0xf7, 0x7d, 0xfb, + 0x06, 0x22, 0x21, 0x1c, 0x03, 0x48, 0xf5, 0xf7, + 0x78, 0xfb, 0x10, 0xbd, 0x00, 0x00, 0x12, 0x61, + 0x01, 0x00, 0x40, 0x80, 0x07, 0x00, 0x00, 0x29, + 0x01, 0xd1, 0x00, 0x20, 0x70, 0x47, 0x38, 0x23, + 0x5a, 0x43, 0x07, 0x4b, 0xd2, 0x18, 0x3c, 0x00, + 0x24, 0xae, 0x00, 0x00, 0x83, 0x00, 0xd2, 0x5a, + 0x14, 0x23, 0x58, 0x43, 0x05, 0x4b, 0xc0, 0x18, + 0x40, 0x88, 0x10, 0x18, 0x08, 0x1a, 0x0a, 0x38, + 0x00, 0x04, 0x00, 0x0c, 0x70, 0x47, 0x00, 0x00, + 0x8c, 0x41, 0x01, 0x00, 0x74, 0x40, 0x01, 0x00, + 0xf8, 0xb5, 0x07, 0x1c, 0x08, 0x1c, 0x16, 0x1c, + 0x1c, 0x1c, 0x19, 0x1c, 0x00, 0xf0, 0x5a, 0xf8, + 0x05, 0x1c, 0x14, 0x35, 0x22, 0x1c, 0x31, 0x1c, + 0x3c, 0x00, 0x60, 0xae, 0x00, 0x00, 0x38, 0x1c, + 0xff, 0xf7, 0x0b, 0xff, 0x28, 0x18, 0x00, 0x04, + 0x00, 0x0c, 0xf8, 0xbd, 0x00, 0x00, 0x00, 0xb5, + 0x00, 0xf0, 0x4b, 0xf8, 0x0a, 0x30, 0x00, 0x04, + 0x00, 0x0c, 0x00, 0xbd, 0x00, 0x00, 0xf8, 0xb5, + 0x07, 0x1c, 0x08, 0x1c, 0x16, 0x1c, 0x1c, 0x1c, + 0x19, 0x1c, 0x00, 0xf0, 0x3e, 0xf8, 0x45, 0x00, + 0x1e, 0x35, 0x22, 0x1c, 0x31, 0x1c, 0x38, 0x1c, + 0xff, 0xf7, 0x3c, 0x00, 0x9c, 0xae, 0x00, 0x00, + 0xef, 0xfe, 0x28, 0x18, 0x00, 0x04, 0x00, 0x0c, + 0xf8, 0xbd, 0x00, 0x00, 0xff, 0xb5, 0x0f, 0x1c, + 0x81, 0xb0, 0x0a, 0xa9, 0x14, 0x1c, 0x1e, 0x1c, + 0x03, 0xc9, 0x00, 0xf0, 0x29, 0xf8, 0x05, 0x1c, + 0x1e, 0x35, 0x21, 0x1c, 0x30, 0x1c, 0x00, 0xf0, + 0x23, 0xf8, 0x2d, 0x18, 0x22, 0x1c, 0x39, 0x1c, + 0x01, 0x98, 0xff, 0xf7, 0xd5, 0xfe, 0x28, 0x18, + 0x00, 0x04, 0x00, 0x0c, 0x3c, 0x00, 0xd8, 0xae, + 0x00, 0x00, 0x05, 0xb0, 0xf0, 0xbd, 0x0a, 0x49, + 0x80, 0xb5, 0x09, 0x88, 0x09, 0x29, 0x04, 0xd0, + 0x14, 0x29, 0x07, 0xd1, 0x01, 0x01, 0x80, 0x00, + 0x00, 0xe0, 0xc1, 0x00, 0x08, 0x18, 0x00, 0x04, + 0x00, 0x0c, 0x80, 0xbd, 0xff, 0x21, 0xff, 0x20, + 0xf6, 0xf7, 0xd1, 0xf9, 0x00, 0x20, 0x80, 0xbd, + 0x00, 0x00, 0xa6, 0x69, 0x01, 0x00, 0x38, 0x23, + 0x59, 0x43, 0x06, 0x4a, 0x14, 0x23, 0x3c, 0x00, + 0x14, 0xaf, 0x00, 0x00, 0x89, 0x18, 0x82, 0x00, + 0x89, 0x5a, 0x05, 0x4a, 0x58, 0x43, 0x80, 0x18, + 0x40, 0x88, 0x08, 0x18, 0x00, 0x04, 0x00, 0x0c, + 0x70, 0x47, 0x00, 0x00, 0x8c, 0x41, 0x01, 0x00, + 0x74, 0x40, 0x01, 0x00, 0x02, 0x48, 0x03, 0x49, + 0x00, 0x68, 0x40, 0x00, 0x08, 0x5a, 0x70, 0x47, + 0xa8, 0x69, 0x01, 0x00, 0x54, 0x40, 0x01, 0x00, + 0x0a, 0x20, 0x70, 0x47, 0x10, 0xb5, 0x04, 0x1c, + 0x3c, 0x00, 0x50, 0xaf, 0x00, 0x00, 0xfd, 0xf7, + 0x62, 0xff, 0x20, 0x1c, 0x10, 0xbd, 0xb0, 0xb5, + 0x04, 0x1c, 0xc0, 0x68, 0x05, 0x68, 0xa0, 0x1d, + 0xff, 0xf7, 0xf5, 0xfe, 0x00, 0x28, 0x18, 0xd0, + 0x21, 0x1c, 0x14, 0x31, 0x20, 0x1c, 0x08, 0xf0, + 0xe2, 0xfd, 0x00, 0x28, 0x11, 0xd0, 0x29, 0x88, + 0x09, 0x48, 0x20, 0x22, 0x81, 0x82, 0x69, 0x88, + 0x01, 0x83, 0xa9, 0x88, 0x06, 0x35, 0x41, 0x83, + 0xc5, 0x61, 0x3c, 0x00, 0x8c, 0xaf, 0x00, 0x00, + 0x30, 0x21, 0x09, 0x5d, 0x11, 0x54, 0x61, 0x6b, + 0x41, 0x62, 0x01, 0x20, 0xf7, 0xf7, 0x28, 0xf8, + 0x20, 0x1c, 0xb0, 0xbd, 0x70, 0x7c, 0x01, 0x00, + 0x70, 0xb5, 0x04, 0x1c, 0xc0, 0x68, 0x21, 0x1c, + 0x14, 0x31, 0x05, 0x68, 0x20, 0x1c, 0x08, 0xf0, + 0xc1, 0xfd, 0x00, 0x28, 0x08, 0xd0, 0x05, 0x4e, + 0xf0, 0x68, 0x02, 0xf0, 0xcf, 0xfd, 0x28, 0x88, + 0xf0, 0x82, 0x03, 0x20, 0x3c, 0x00, 0xc8, 0xaf, + 0x00, 0x00, 0xf7, 0xf7, 0x10, 0xf8, 0x20, 0x1c, + 0x70, 0xbd, 0x70, 0x7c, 0x01, 0x00, 0x3e, 0xb5, + 0x04, 0x1c, 0xc0, 0x68, 0x05, 0x68, 0xa0, 0x1d, + 0xff, 0xf7, 0xb7, 0xfe, 0x00, 0x28, 0x21, 0xd0, + 0x21, 0x1c, 0x14, 0x31, 0x20, 0x1c, 0x02, 0xaa, + 0x08, 0xf0, 0x77, 0xfd, 0x00, 0x28, 0x19, 0xd0, + 0x02, 0x98, 0x4b, 0x21, 0x09, 0x5c, 0x00, 0x29, + 0x10, 0xd0, 0x01, 0x29, 0x14, 0xd0, 0x3c, 0x00, + 0x04, 0xb0, 0x00, 0x00, 0x02, 0x29, 0x0c, 0xd1, + 0x29, 0x88, 0x0d, 0x20, 0x00, 0xab, 0x18, 0x80, + 0x20, 0x1c, 0x03, 0xf0, 0x51, 0xf8, 0x01, 0x90, + 0x68, 0x46, 0x02, 0xf0, 0x5d, 0xfa, 0xf6, 0xf7, + 0xb5, 0xf8, 0x00, 0x21, 0x02, 0x98, 0x06, 0xf0, + 0x9f, 0xfe, 0x20, 0x1c, 0x3e, 0xbd, 0x07, 0xf0, + 0x29, 0xf8, 0x02, 0x98, 0x00, 0x21, 0x80, 0x69, + 0xc2, 0x07, 0xd2, 0x0f, 0x04, 0x20, 0xf6, 0xf7, + 0x3c, 0x00, 0x40, 0xb0, 0x00, 0x00, 0x7f, 0xff, + 0xee, 0xe7, 0x10, 0xb5, 0x04, 0x1c, 0xfd, 0xf7, + 0xe6, 0xfe, 0x20, 0x1c, 0x10, 0xbd, 0x3e, 0xb5, + 0x05, 0x1c, 0x00, 0xf0, 0x40, 0xfe, 0x00, 0x28, + 0x15, 0xd1, 0x28, 0x1c, 0x14, 0x30, 0xfa, 0xf7, + 0xce, 0xfb, 0x00, 0x28, 0x0f, 0xd0, 0x05, 0x21, + 0x28, 0x69, 0xff, 0xf7, 0x86, 0xfb, 0x04, 0x1c, + 0x09, 0xd0, 0x05, 0x22, 0x21, 0x1c, 0x68, 0x46, + 0xf5, 0xf7, 0x3c, 0x00, 0x7c, 0xb0, 0x00, 0x00, + 0x3d, 0xfa, 0x05, 0x34, 0x02, 0x94, 0x68, 0x46, + 0x03, 0xf0, 0x1a, 0xfb, 0x2a, 0x1c, 0x0d, 0x21, + 0x8f, 0x20, 0x08, 0xf0, 0x8f, 0xfb, 0x00, 0x20, + 0x3e, 0xbd, 0x00, 0x00, 0x10, 0xb5, 0x04, 0x1c, + 0xfa, 0xf7, 0x98, 0xf8, 0x20, 0x1c, 0x05, 0xf0, + 0xe5, 0xf8, 0x20, 0x1c, 0x10, 0xbd, 0x00, 0x00, + 0xb0, 0xb5, 0x04, 0x1c, 0x00, 0x69, 0x00, 0x21, + 0x94, 0xb0, 0xff, 0xf7, 0x3c, 0x00, 0xb8, 0xb0, + 0x00, 0x00, 0x61, 0xfb, 0x69, 0x46, 0xfb, 0xf7, + 0x26, 0xf8, 0x00, 0x28, 0x1e, 0xd0, 0x00, 0x98, + 0xfa, 0xf7, 0x29, 0xfa, 0x01, 0x1c, 0x01, 0xa8, + 0x02, 0xf0, 0xd7, 0xf9, 0x00, 0x98, 0xfa, 0xf7, + 0xd2, 0xf9, 0x04, 0x90, 0x05, 0x20, 0x09, 0xad, + 0x68, 0x72, 0x02, 0xa8, 0x21, 0x1c, 0x06, 0x22, + 0x02, 0x30, 0xf5, 0xf7, 0x06, 0xfa, 0x01, 0x20, + 0x08, 0x90, 0x21, 0x6a, 0x0a, 0x90, 0x3c, 0x00, + 0xf4, 0xb0, 0x00, 0x00, 0x28, 0x20, 0x09, 0x91, + 0x00, 0x5d, 0x28, 0x72, 0x01, 0xa8, 0x00, 0xf0, + 0x69, 0xf8, 0x20, 0x1c, 0x14, 0xb0, 0xb0, 0xbd, + 0xff, 0xb5, 0x16, 0x1c, 0x1f, 0x1c, 0x81, 0xb0, + 0x0a, 0x9d, 0x4c, 0x20, 0xf6, 0xf7, 0x90, 0xfb, + 0x04, 0x1c, 0x14, 0x30, 0x06, 0x22, 0x02, 0x99, + 0xf5, 0xf7, 0xea, 0xf9, 0x20, 0x1c, 0x06, 0x22, + 0x01, 0x99, 0xf5, 0xf7, 0xe5, 0xf9, 0x28, 0x20, + 0x3c, 0x00, 0x30, 0xb1, 0x00, 0x00, 0x00, 0x21, + 0x06, 0x55, 0xe1, 0x60, 0x27, 0x62, 0x00, 0x2d, + 0x01, 0xd0, 0x8e, 0x20, 0x00, 0xe0, 0x8d, 0x20, + 0x22, 0x1c, 0x0d, 0x21, 0x08, 0xf0, 0x33, 0xfb, + 0x05, 0xb0, 0xf0, 0xbd, 0x00, 0x00, 0xb0, 0xb5, + 0x05, 0x1c, 0x4c, 0x20, 0xf6, 0xf7, 0x6f, 0xfb, + 0x04, 0x1c, 0x4c, 0x22, 0x29, 0x1c, 0xf5, 0xf7, + 0x26, 0xfa, 0x29, 0x20, 0x40, 0x5d, 0x0d, 0x28, + 0x2c, 0xd2, 0x3c, 0x00, 0x6c, 0xb1, 0x00, 0x00, + 0x01, 0xa3, 0x1b, 0x5c, 0x5b, 0x00, 0x9f, 0x44, + 0x28, 0x1a, 0x28, 0x1e, 0x06, 0x0a, 0x28, 0x28, + 0x0e, 0x28, 0x22, 0x12, 0x16, 0x00, 0x22, 0x1c, + 0x0d, 0x21, 0x8c, 0x20, 0x1a, 0xe0, 0x22, 0x1c, + 0x0d, 0x21, 0x83, 0x20, 0x16, 0xe0, 0x22, 0x1c, + 0x0d, 0x21, 0x84, 0x20, 0x12, 0xe0, 0x22, 0x1c, + 0x0d, 0x21, 0x85, 0x20, 0x0e, 0xe0, 0x22, 0x1c, + 0x0d, 0x21, 0x86, 0x20, 0x3c, 0x00, 0xa8, 0xb1, + 0x00, 0x00, 0x0a, 0xe0, 0x22, 0x1c, 0x0d, 0x21, + 0x87, 0x20, 0x06, 0xe0, 0x22, 0x1c, 0x0d, 0x21, + 0x89, 0x20, 0x02, 0xe0, 0x22, 0x1c, 0x0d, 0x21, + 0x8b, 0x20, 0x08, 0xf0, 0xf6, 0xfa, 0xb0, 0xbd, + 0xe8, 0x68, 0xf6, 0xf7, 0xe6, 0xf9, 0x20, 0x1c, + 0xf6, 0xf7, 0x11, 0xfb, 0xb0, 0xbd, 0xfe, 0xb5, + 0x05, 0x1c, 0x90, 0x20, 0xf6, 0xf7, 0x2d, 0xfb, + 0x04, 0x1c, 0x90, 0x21, 0xf5, 0xf7, 0x3c, 0x00, + 0xe4, 0xb1, 0x00, 0x00, 0x5b, 0xf9, 0x37, 0x4e, + 0x01, 0x27, 0xf0, 0x69, 0x04, 0x28, 0x03, 0xd9, + 0x70, 0x6b, 0x01, 0x30, 0x70, 0x63, 0x4d, 0xe0, + 0x33, 0x48, 0xb1, 0x6b, 0x04, 0xf0, 0xd0, 0xf8, + 0x01, 0x20, 0x20, 0x62, 0xa8, 0x7e, 0x21, 0x1c, + 0x80, 0x31, 0x02, 0x91, 0x08, 0x70, 0x22, 0x1c, + 0x60, 0x32, 0x01, 0x92, 0x00, 0x20, 0x2f, 0x1c, + 0x20, 0x37, 0x90, 0x72, 0x78, 0x7a, 0x2b, 0x1c, + 0x3c, 0x00, 0x20, 0xb2, 0x00, 0x00, 0x14, 0x33, + 0xd0, 0x72, 0xe8, 0x68, 0xaa, 0x1d, 0xa0, 0x60, + 0xe8, 0x6b, 0x48, 0x60, 0x44, 0x20, 0x40, 0x5d, + 0x08, 0x72, 0x29, 0x1c, 0x20, 0x1c, 0x05, 0xf0, + 0xaa, 0xfc, 0x68, 0x6a, 0x00, 0x28, 0x0a, 0xd1, + 0x01, 0x9a, 0x20, 0x1c, 0x93, 0x7a, 0x02, 0x99, + 0x22, 0x1c, 0x70, 0x32, 0x58, 0x30, 0x09, 0x78, + 0xfa, 0xf7, 0xdb, 0xf9, 0x06, 0xe0, 0x3a, 0x7a, + 0x23, 0x1c, 0x3c, 0x00, 0x5c, 0xb2, 0x00, 0x00, + 0xe8, 0x69, 0x29, 0x6a, 0x70, 0x33, 0xfd, 0xf7, + 0x8d, 0xf9, 0x30, 0x20, 0x40, 0x5d, 0x18, 0x49, + 0x07, 0x28, 0x0b, 0xd1, 0x58, 0x20, 0x00, 0x5d, + 0xc0, 0x07, 0xc0, 0x17, 0x01, 0x30, 0xe0, 0x61, + 0x00, 0x20, 0x20, 0x61, 0x20, 0x1c, 0xf7, 0xf7, + 0x3f, 0xff, 0x18, 0xe0, 0x01, 0x22, 0x20, 0x1c, + 0x05, 0xf0, 0xac, 0xff, 0x07, 0x1c, 0x12, 0xd0, + 0x03, 0xf0, 0x06, 0xff, 0x3c, 0x00, 0x98, 0xb2, + 0x00, 0x00, 0xf3, 0x6d, 0x00, 0x2b, 0x06, 0xd0, + 0x60, 0x68, 0x20, 0x30, 0x82, 0x7b, 0x61, 0x6b, + 0x38, 0x1c, 0xf5, 0xf7, 0x99, 0xf8, 0xe8, 0x68, + 0xf6, 0xf7, 0x73, 0xf9, 0x20, 0x1c, 0xf6, 0xf7, + 0x9e, 0xfa, 0xfe, 0xbd, 0xf0, 0x69, 0x01, 0x30, + 0xf0, 0x61, 0xfa, 0xe7, 0x00, 0x00, 0xc4, 0x69, + 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, 0x05, 0x31, + 0x00, 0x00, 0x70, 0xb5, 0x06, 0x1c, 0x3c, 0x00, + 0xd4, 0xb2, 0x00, 0x00, 0x0d, 0x1c, 0x09, 0x04, + 0x09, 0x0c, 0x00, 0x20, 0xf6, 0xf7, 0x7c, 0xf9, + 0x04, 0x1c, 0x2a, 0x1c, 0x31, 0x1c, 0x00, 0x68, + 0xf5, 0xf7, 0x06, 0xf9, 0x20, 0x1c, 0x70, 0xbd, + 0x40, 0x88, 0x70, 0x47, 0x03, 0x78, 0x1b, 0x07, + 0x9b, 0x0f, 0x0b, 0x70, 0x00, 0x78, 0x00, 0x09, + 0x10, 0x70, 0x70, 0x47, 0x04, 0x30, 0x70, 0x47, + 0x04, 0x30, 0x70, 0x47, 0xd4, 0x21, 0x01, 0x70, + 0x3c, 0x00, 0x10, 0xb3, 0x00, 0x00, 0x00, 0x21, + 0x41, 0x70, 0x70, 0x47, 0x00, 0x00, 0xc4, 0x21, + 0x01, 0x70, 0x00, 0x21, 0x41, 0x70, 0x70, 0x47, + 0x00, 0x00, 0xb4, 0x21, 0x01, 0x70, 0x00, 0x21, + 0x41, 0x70, 0x70, 0x47, 0x00, 0x00, 0x01, 0x49, + 0x48, 0x65, 0x70, 0x47, 0x00, 0x00, 0xc4, 0x69, + 0x01, 0x00, 0x01, 0x49, 0x08, 0x65, 0x70, 0x47, + 0x00, 0x00, 0xc4, 0x69, 0x01, 0x00, 0x01, 0x49, + 0x88, 0x65, 0x3c, 0x00, 0x4c, 0xb3, 0x00, 0x00, + 0x70, 0x47, 0x00, 0x00, 0xc4, 0x69, 0x01, 0x00, + 0xf8, 0xb5, 0x5f, 0x4f, 0x05, 0x1c, 0xb8, 0x68, + 0x01, 0x30, 0xb8, 0x60, 0x07, 0xf0, 0x24, 0xfd, + 0x38, 0x61, 0x90, 0x20, 0xf6, 0xf7, 0x66, 0xfa, + 0x04, 0x1c, 0x90, 0x21, 0xf5, 0xf7, 0x94, 0xf8, + 0x28, 0x6b, 0x27, 0x1c, 0x60, 0x63, 0x68, 0x8b, + 0x80, 0x37, 0x26, 0x1c, 0xc0, 0x07, 0xc0, 0x0f, + 0x20, 0x62, 0x68, 0x8b, 0x3c, 0x00, 0x88, 0xb3, + 0x00, 0x00, 0x60, 0x36, 0x02, 0x21, 0x40, 0x07, + 0xc0, 0x0f, 0x20, 0x63, 0x68, 0x8b, 0x80, 0x07, + 0xc0, 0x0f, 0xf8, 0x60, 0x28, 0x7f, 0x38, 0x70, + 0xb1, 0x72, 0x00, 0x28, 0x08, 0xd1, 0xf9, 0xf7, + 0xc8, 0xff, 0x00, 0x28, 0x02, 0xd0, 0x01, 0x20, + 0x60, 0x62, 0x01, 0xe0, 0x01, 0x20, 0xa0, 0x62, + 0xf8, 0x68, 0x00, 0x28, 0x03, 0xd0, 0x00, 0x21, + 0x02, 0x20, 0x06, 0xf0, 0xcc, 0xff, 0x3c, 0x00, + 0xc4, 0xb3, 0x00, 0x00, 0x2b, 0x1c, 0x10, 0x33, + 0xaa, 0x1d, 0x29, 0x1c, 0x20, 0x1c, 0x05, 0xf0, + 0xdf, 0xfb, 0xa8, 0x6a, 0x00, 0x28, 0x0c, 0xd1, + 0x39, 0x78, 0x02, 0x29, 0x07, 0xd0, 0x22, 0x1c, + 0x70, 0x32, 0x20, 0x1c, 0x58, 0x30, 0xb3, 0x7a, + 0xfa, 0xf7, 0x10, 0xf9, 0x08, 0xe0, 0x01, 0x26, + 0x5e, 0xe0, 0xaa, 0x7d, 0x23, 0x1c, 0x28, 0x6a, + 0x69, 0x6a, 0x70, 0x33, 0xfd, 0xf7, 0xc0, 0xf8, + 0x3c, 0x00, 0x00, 0xb4, 0x00, 0x00, 0xe9, 0x68, + 0x00, 0x20, 0x09, 0x89, 0x00, 0x29, 0x00, 0xd1, + 0x04, 0x20, 0xf0, 0x72, 0x38, 0x78, 0x01, 0x28, + 0x14, 0xd1, 0x00, 0x27, 0x00, 0x90, 0x00, 0x20, + 0x06, 0xe0, 0x29, 0x69, 0x01, 0x29, 0x03, 0xd1, + 0xa9, 0x69, 0x01, 0x27, 0x89, 0x07, 0x1a, 0xd5, + 0x06, 0xf0, 0x79, 0xfc, 0x00, 0x28, 0xf4, 0xd1, + 0x01, 0x2f, 0x14, 0xd1, 0x00, 0x98, 0x01, 0x28, + 0x11, 0xd1, 0x3c, 0x00, 0x3c, 0xb4, 0x00, 0x00, + 0x08, 0xe0, 0x20, 0x1c, 0x58, 0x30, 0x06, 0xf0, + 0xe1, 0xfc, 0x00, 0x28, 0x0a, 0xd0, 0x80, 0x69, + 0x80, 0x07, 0x07, 0xd5, 0xf0, 0x7a, 0x08, 0x21, + 0x08, 0x43, 0xf0, 0x72, 0x01, 0x20, 0xe0, 0x62, + 0xe8, 0x7d, 0x30, 0x73, 0xe8, 0x68, 0xa0, 0x60, + 0xe0, 0x6a, 0x00, 0x28, 0x12, 0xd0, 0x1a, 0x4f, + 0xf8, 0x6b, 0x00, 0x28, 0x0e, 0xd0, 0x30, 0x7b, + 0xf5, 0xf7, 0xde, 0xfe, 0x3c, 0x00, 0x78, 0xb4, + 0x00, 0x00, 0x00, 0x28, 0x09, 0xd0, 0x21, 0x1c, + 0x38, 0x1c, 0x40, 0x30, 0xfc, 0xf7, 0x55, 0xfc, + 0x14, 0x48, 0xb9, 0x6b, 0x03, 0xf0, 0x89, 0xff, + 0xf8, 0xbd, 0x10, 0x4f, 0x12, 0x48, 0xb9, 0x6b, + 0x03, 0xf0, 0x83, 0xff, 0x00, 0x22, 0x20, 0x1c, + 0x10, 0x49, 0x05, 0xf0, 0xa2, 0xfe, 0x06, 0x1c, + 0x03, 0xd1, 0x38, 0x6a, 0x01, 0x30, 0x38, 0x62, + 0xee, 0xe7, 0x20, 0x1c, 0xf6, 0xf7, 0x3c, 0x00, + 0xb4, 0xb4, 0x00, 0x00, 0x9f, 0xf9, 0xe8, 0x68, + 0xf6, 0xf7, 0x6e, 0xf8, 0x03, 0xf0, 0xf2, 0xfd, + 0x04, 0x48, 0x83, 0x6d, 0x00, 0x2b, 0xe2, 0xd0, + 0x00, 0x22, 0x30, 0x1c, 0x29, 0x6b, 0xf4, 0xf7, + 0x86, 0xff, 0xdc, 0xe7, 0xc4, 0x69, 0x01, 0x00, + 0xc4, 0x60, 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, + 0x11, 0x30, 0x00, 0x00, 0x10, 0xb5, 0x0a, 0x20, + 0x07, 0xf0, 0xfe, 0xfc, 0x07, 0xf0, 0x5e, 0xfc, + 0x3c, 0x00, 0xf0, 0xb4, 0x00, 0x00, 0x0b, 0x49, + 0x44, 0x18, 0x0c, 0xe0, 0x20, 0x1c, 0x07, 0xf0, + 0x90, 0xfb, 0x00, 0x28, 0x07, 0xd0, 0xf7, 0xf7, + 0x34, 0xf9, 0x00, 0x28, 0x03, 0xd0, 0x12, 0x21, + 0x86, 0x20, 0xf5, 0xf7, 0xca, 0xfe, 0xf7, 0xf7, + 0x2c, 0xf9, 0x00, 0x28, 0xee, 0xd1, 0x01, 0xf0, + 0x80, 0xfd, 0x10, 0xbd, 0x00, 0x00, 0x40, 0x9c, + 0x00, 0x00, 0x10, 0xb5, 0x0c, 0x1c, 0x01, 0x1c, + 0x17, 0x4a, 0x3c, 0x00, 0x2c, 0xb5, 0x00, 0x00, + 0x01, 0x29, 0x50, 0x69, 0x04, 0xd0, 0x80, 0x29, + 0x1d, 0xd0, 0x81, 0x29, 0x21, 0xd1, 0x1c, 0xe0, + 0x91, 0x78, 0x01, 0x29, 0x15, 0xd1, 0x02, 0x21, + 0x91, 0x70, 0x14, 0x1c, 0x01, 0x1c, 0x10, 0x48, + 0x03, 0xf0, 0x28, 0xff, 0x01, 0x21, 0x60, 0x69, + 0x00, 0xf0, 0x2e, 0xf9, 0x60, 0x69, 0x01, 0xf0, + 0x5f, 0xfc, 0x20, 0x70, 0xa0, 0x88, 0xa1, 0x69, + 0x00, 0x23, 0x0a, 0x4a, 0x3c, 0x00, 0x68, 0xb5, + 0x00, 0x00, 0x07, 0xf0, 0x7e, 0xfc, 0x10, 0xbd, + 0x22, 0x21, 0x06, 0xe0, 0x01, 0xf0, 0x1d, 0xfc, + 0x20, 0x1c, 0x00, 0xf0, 0x4a, 0xf8, 0x10, 0xbd, + 0x1c, 0x21, 0x20, 0x20, 0xf5, 0xf7, 0x8f, 0xfe, + 0x10, 0xbd, 0xb4, 0x79, 0x01, 0x00, 0x34, 0x63, + 0x01, 0x00, 0x3d, 0x2e, 0x00, 0x00, 0x70, 0xb5, + 0x1c, 0x4c, 0xa0, 0x78, 0x00, 0x28, 0x32, 0xd0, + 0x05, 0x28, 0x30, 0xd0, 0x60, 0x69, 0x3c, 0x00, + 0xa4, 0xb5, 0x00, 0x00, 0x00, 0xf0, 0xea, 0xf8, + 0x18, 0x4e, 0xb5, 0x79, 0xa0, 0x78, 0x01, 0x28, + 0x0b, 0xd0, 0x02, 0x28, 0x0e, 0xd0, 0x03, 0x28, + 0x10, 0xd0, 0x04, 0x28, 0x17, 0xd1, 0x42, 0x1f, + 0x80, 0x21, 0x20, 0x20, 0x08, 0xf0, 0x08, 0xf8, + 0x0e, 0xe0, 0x00, 0x21, 0x20, 0x20, 0x08, 0xf0, + 0x31, 0xf8, 0x0c, 0xe0, 0xa0, 0x88, 0x07, 0xf0, + 0x1d, 0xfc, 0x05, 0xe0, 0x20, 0x78, 0x00, 0xf0, + 0x3c, 0x00, 0xe0, 0xb5, 0x00, 0x00, 0x39, 0xfa, + 0x00, 0x20, 0x00, 0xf0, 0xc4, 0xfd, 0x60, 0x69, + 0x01, 0xf0, 0xe1, 0xfb, 0x05, 0x20, 0xa0, 0x70, + 0xb5, 0x71, 0x60, 0x69, 0x00, 0xf0, 0x61, 0xf9, + 0x00, 0x22, 0x20, 0x21, 0x81, 0x20, 0x08, 0xf0, + 0xd6, 0xf8, 0x70, 0xbd, 0x00, 0x00, 0xb4, 0x79, + 0x01, 0x00, 0x20, 0x10, 0x07, 0x00, 0xb0, 0xb5, + 0x0d, 0x4d, 0x04, 0x1c, 0xa8, 0x78, 0x00, 0x28, + 0x14, 0xd0, 0x3c, 0x00, 0x1c, 0xb6, 0x00, 0x00, + 0x68, 0x69, 0x00, 0xf0, 0x0b, 0xf9, 0x0a, 0x48, + 0x69, 0x69, 0x03, 0xf0, 0xa7, 0xfe, 0xa8, 0x88, + 0x07, 0xf0, 0x9e, 0xfb, 0x00, 0x2c, 0x02, 0xd0, + 0x68, 0x78, 0x00, 0xf0, 0x79, 0xff, 0x00, 0x20, + 0xa8, 0x70, 0xa9, 0x68, 0x20, 0x1c, 0xf4, 0xf7, + 0xca, 0xfe, 0xb0, 0xbd, 0xb4, 0x79, 0x01, 0x00, + 0x34, 0x63, 0x01, 0x00, 0x06, 0x4b, 0x80, 0xb5, + 0x99, 0x78, 0x03, 0x29, 0x3c, 0x00, 0x58, 0xb6, + 0x00, 0x00, 0x06, 0xd1, 0x04, 0x21, 0x99, 0x70, + 0x20, 0x21, 0x02, 0x1c, 0x80, 0x20, 0x08, 0xf0, + 0xa4, 0xf8, 0x80, 0xbd, 0x00, 0x00, 0xb4, 0x79, + 0x01, 0x00, 0x10, 0xb5, 0x0c, 0x4c, 0xa1, 0x78, + 0x03, 0x29, 0x0f, 0xd1, 0x10, 0x30, 0xfa, 0xf7, + 0xde, 0xf8, 0x00, 0x28, 0x09, 0xd0, 0x20, 0x78, + 0x00, 0xf0, 0xe5, 0xf9, 0x00, 0x20, 0x00, 0xf0, + 0x70, 0xfd, 0x00, 0x21, 0x05, 0x48, 0x3c, 0x00, + 0x94, 0xb6, 0x00, 0x00, 0xfc, 0xf7, 0x9c, 0xfa, + 0x10, 0xbd, 0x1b, 0x21, 0x20, 0x20, 0xf5, 0xf7, + 0x01, 0xfe, 0x10, 0xbd, 0xb4, 0x79, 0x01, 0x00, + 0x51, 0xb6, 0x00, 0x00, 0x09, 0x49, 0x80, 0xb5, + 0x89, 0x78, 0x03, 0x29, 0x09, 0xd1, 0x00, 0xf0, + 0xcd, 0xf9, 0x00, 0x20, 0x00, 0xf0, 0x58, 0xfd, + 0x01, 0x21, 0x05, 0x48, 0xfc, 0xf7, 0x84, 0xfa, + 0x80, 0xbd, 0x17, 0x21, 0x20, 0x20, 0xf5, 0xf7, + 0x3c, 0x00, 0xd0, 0xb6, 0x00, 0x00, 0xe9, 0xfd, + 0x80, 0xbd, 0xb4, 0x79, 0x01, 0x00, 0x51, 0xb6, + 0x00, 0x00, 0x70, 0xb5, 0x10, 0x4c, 0x1d, 0x1c, + 0xa3, 0x78, 0x06, 0x1c, 0x04, 0x98, 0x00, 0x2b, + 0x18, 0xd1, 0x01, 0x23, 0xa3, 0x70, 0x22, 0x61, + 0xe6, 0x60, 0x61, 0x70, 0xa0, 0x60, 0xa5, 0x61, + 0x00, 0x20, 0x07, 0xf0, 0xac, 0xfa, 0xa0, 0x80, + 0x30, 0x1c, 0xf7, 0xf7, 0x3c, 0xfb, 0xe0, 0x80, + 0x07, 0xf0, 0x3c, 0x00, 0x0c, 0xb7, 0x00, 0x00, + 0x4f, 0xfb, 0xc7, 0x21, 0xc9, 0x00, 0x28, 0x1a, + 0x41, 0x1a, 0x00, 0x22, 0x20, 0x20, 0x07, 0xf0, + 0x57, 0xff, 0x70, 0xbd, 0xb4, 0x79, 0x01, 0x00, + 0xb0, 0xb5, 0x04, 0x1c, 0x0d, 0x1c, 0x00, 0xf0, + 0x09, 0xf8, 0x20, 0x1c, 0x00, 0xf0, 0x24, 0xf8, + 0x00, 0x2d, 0x01, 0xd0, 0xff, 0xf7, 0xd4, 0xfe, + 0xb0, 0xbd, 0x00, 0x00, 0xb0, 0xb5, 0x0c, 0x4c, + 0x05, 0x1c, 0xa0, 0x68, 0x3c, 0x00, 0x48, 0xb7, + 0x00, 0x00, 0x00, 0x28, 0x0f, 0xd1, 0x0a, 0x48, + 0x01, 0x7e, 0x02, 0x22, 0x11, 0x40, 0x61, 0x60, + 0x01, 0x7e, 0x11, 0x43, 0x01, 0x76, 0x07, 0x20, + 0x03, 0xf0, 0x49, 0xfc, 0x20, 0x60, 0x03, 0xf0, + 0x98, 0xff, 0x03, 0xf0, 0xee, 0xff, 0xa0, 0x68, + 0x28, 0x43, 0xa0, 0x60, 0xb0, 0xbd, 0x40, 0x7c, + 0x01, 0x00, 0x0c, 0x80, 0x07, 0x00, 0x0a, 0x49, + 0x38, 0xb5, 0x0a, 0x1c, 0x20, 0x32, 0x3c, 0x00, + 0x84, 0xb7, 0x00, 0x00, 0x94, 0x79, 0x00, 0xab, + 0x1c, 0x70, 0xd2, 0x79, 0x07, 0x4c, 0x5a, 0x70, + 0xe2, 0x68, 0x00, 0x2a, 0x02, 0xd1, 0x06, 0x4d, + 0x01, 0x23, 0x6b, 0x70, 0x10, 0x43, 0xe0, 0x60, + 0x00, 0xab, 0x18, 0x88, 0xc8, 0x84, 0x38, 0xbd, + 0x00, 0x10, 0x07, 0x00, 0x40, 0x7c, 0x01, 0x00, + 0x00, 0x50, 0x07, 0x00, 0xb0, 0xb5, 0x05, 0x1c, + 0x00, 0x29, 0x01, 0xd0, 0x00, 0xf0, 0x28, 0xf8, + 0x3c, 0x00, 0xc0, 0xb7, 0x00, 0x00, 0x06, 0x4c, + 0x60, 0x78, 0x21, 0x69, 0x08, 0x43, 0x03, 0xd1, + 0x01, 0x21, 0x0e, 0x20, 0x06, 0xf0, 0xc5, 0xfd, + 0x20, 0x69, 0x28, 0x43, 0x20, 0x61, 0xb0, 0xbd, + 0x00, 0x00, 0x18, 0x63, 0x01, 0x00, 0xb0, 0xb5, + 0x0a, 0x4c, 0x05, 0x1c, 0x22, 0x69, 0x00, 0x20, + 0x00, 0x2a, 0x0c, 0xd1, 0x00, 0x29, 0x00, 0xd0, + 0x04, 0xe0, 0x60, 0x78, 0x00, 0x28, 0x02, 0xd1, + 0x04, 0xf0, 0x3c, 0x00, 0xfc, 0xb7, 0x00, 0x00, + 0x69, 0xfb, 0x60, 0x70, 0x28, 0x1c, 0x06, 0xf0, + 0xef, 0xfc, 0x01, 0x20, 0xb0, 0xbd, 0x00, 0x00, + 0x18, 0x63, 0x01, 0x00, 0x10, 0xb5, 0x08, 0x4c, + 0x60, 0x78, 0x00, 0x28, 0x0a, 0xd0, 0x06, 0xf0, + 0xe3, 0xfc, 0x00, 0x20, 0x60, 0x70, 0x20, 0x69, + 0x00, 0x28, 0x03, 0xd0, 0x01, 0x21, 0x0e, 0x20, + 0x06, 0xf0, 0x96, 0xfd, 0x10, 0xbd, 0x00, 0x00, + 0x18, 0x63, 0x01, 0x00, 0x3c, 0x00, 0x38, 0xb8, + 0x00, 0x00, 0x09, 0x49, 0x80, 0xb5, 0x0b, 0x69, + 0x83, 0x42, 0x04, 0xd1, 0x4a, 0x78, 0x00, 0x2a, + 0x01, 0xd1, 0x01, 0x22, 0x00, 0xe0, 0x00, 0x22, + 0x83, 0x43, 0x0b, 0x61, 0x00, 0x2a, 0x03, 0xd0, + 0x00, 0x21, 0x0e, 0x20, 0x06, 0xf0, 0x7f, 0xfd, + 0x80, 0xbd, 0x18, 0x63, 0x01, 0x00, 0x80, 0xb5, + 0x01, 0x20, 0xf6, 0xf7, 0x56, 0xfe, 0x80, 0xbd, + 0x00, 0x00, 0x10, 0xb5, 0x04, 0x1c, 0x3c, 0x00, + 0x74, 0xb8, 0x00, 0x00, 0x00, 0xf0, 0x04, 0xf8, + 0x20, 0x1c, 0x00, 0xf0, 0x1f, 0xf8, 0x10, 0xbd, + 0xb0, 0xb5, 0x0c, 0x4d, 0x04, 0x1c, 0xa8, 0x68, + 0xa0, 0x42, 0x0f, 0xd1, 0x07, 0x20, 0x29, 0x68, + 0x08, 0xf0, 0x8c, 0xfb, 0x68, 0x68, 0x02, 0x22, + 0x07, 0x49, 0x00, 0x28, 0x08, 0x7e, 0x01, 0xd0, + 0x10, 0x43, 0x00, 0xe0, 0x90, 0x43, 0x08, 0x76, + 0x04, 0xf0, 0xc4, 0xf8, 0xa8, 0x68, 0xa0, 0x43, + 0x3c, 0x00, 0xb0, 0xb8, 0x00, 0x00, 0xa8, 0x60, + 0xb0, 0xbd, 0x40, 0x7c, 0x01, 0x00, 0x0c, 0x80, + 0x07, 0x00, 0x0a, 0x49, 0x38, 0xb5, 0x0a, 0x1c, + 0x20, 0x32, 0x94, 0x79, 0x00, 0xab, 0x1c, 0x70, + 0xd2, 0x79, 0x07, 0x4c, 0x5a, 0x70, 0xe2, 0x68, + 0x82, 0x42, 0x02, 0xd1, 0x06, 0x4d, 0x00, 0x23, + 0x6b, 0x70, 0x82, 0x43, 0xe2, 0x60, 0x00, 0xab, + 0x18, 0x88, 0xc8, 0x84, 0x38, 0xbd, 0x00, 0x10, + 0x07, 0x00, 0x3c, 0x00, 0xec, 0xb8, 0x00, 0x00, + 0x40, 0x7c, 0x01, 0x00, 0x00, 0x50, 0x07, 0x00, + 0xb0, 0xb5, 0x05, 0x1c, 0x0a, 0x4c, 0x00, 0x21, + 0x60, 0x69, 0xff, 0xf7, 0x11, 0xff, 0x04, 0x20, + 0x01, 0xf0, 0x46, 0xf9, 0x01, 0xf0, 0x88, 0xfb, + 0x00, 0x22, 0x04, 0x21, 0x04, 0x20, 0x01, 0xf0, + 0x8b, 0xf8, 0x28, 0x1c, 0x01, 0xf0, 0x4a, 0xfa, + 0x60, 0x69, 0xff, 0xf7, 0xa7, 0xff, 0xb0, 0xbd, + 0x40, 0x7c, 0x01, 0x00, 0x3c, 0x00, 0x28, 0xb9, + 0x00, 0x00, 0x80, 0xb5, 0x01, 0xf0, 0x77, 0xfa, + 0x80, 0xbd, 0xb0, 0xb5, 0x0d, 0x4d, 0x01, 0x21, + 0x28, 0x69, 0xff, 0xf7, 0xf4, 0xfe, 0xff, 0xf7, + 0x2a, 0xfe, 0x00, 0xf0, 0x2c, 0xfb, 0x00, 0xf0, + 0x84, 0xfa, 0x00, 0x24, 0x00, 0x22, 0x04, 0x21, + 0x20, 0x1c, 0x01, 0xf0, 0x6c, 0xf8, 0x01, 0x34, + 0x24, 0x06, 0x24, 0x0e, 0x04, 0x2c, 0xf5, 0xd3, + 0x28, 0x69, 0xff, 0xf7, 0x86, 0xff, 0x3c, 0x00, + 0x64, 0xb9, 0x00, 0x00, 0xb0, 0xbd, 0x00, 0x00, + 0x40, 0x7c, 0x01, 0x00, 0xf8, 0xb5, 0x05, 0x1c, + 0x0e, 0x1c, 0x07, 0x4c, 0x17, 0x1c, 0x01, 0x21, + 0x20, 0x69, 0xff, 0xf7, 0xd3, 0xfe, 0x3a, 0x1c, + 0x31, 0x1c, 0x28, 0x1c, 0x01, 0xf0, 0x52, 0xf8, + 0x20, 0x69, 0xff, 0xf7, 0x71, 0xff, 0xf8, 0xbd, + 0x40, 0x7c, 0x01, 0x00, 0xff, 0xb5, 0x89, 0xb0, + 0x06, 0x1c, 0x16, 0x98, 0x1d, 0x1c, 0x00, 0x28, + 0x3c, 0x00, 0xa0, 0xb9, 0x00, 0x00, 0x01, 0xd0, + 0x29, 0x48, 0x14, 0x90, 0x28, 0x68, 0x00, 0x88, + 0x00, 0x06, 0x80, 0x0e, 0x20, 0x28, 0x01, 0xd0, + 0x14, 0x28, 0x17, 0xd1, 0x0a, 0xaa, 0x18, 0x24, + 0x18, 0x21, 0x05, 0xca, 0xff, 0xf7, 0x77, 0xf9, + 0x07, 0x1c, 0x28, 0x1c, 0x01, 0x89, 0xa1, 0x42, + 0x02, 0xdd, 0x00, 0x68, 0x01, 0x19, 0x0b, 0xe0, + 0xc0, 0x68, 0x64, 0x1a, 0x00, 0x28, 0xf5, 0xd1, + 0x0f, 0x21, 0x3c, 0x00, 0xdc, 0xb9, 0x00, 0x00, + 0x86, 0x20, 0xf5, 0xf7, 0x61, 0xfc, 0x00, 0x21, + 0x01, 0xe0, 0x00, 0x21, 0x00, 0x27, 0x18, 0x48, + 0x08, 0x90, 0x80, 0x79, 0x07, 0x90, 0x0c, 0x20, + 0x16, 0x4a, 0x70, 0x43, 0x80, 0x18, 0x04, 0x79, + 0x04, 0x91, 0x12, 0x99, 0x15, 0x98, 0x14, 0x9a, + 0x01, 0x91, 0x03, 0x90, 0x05, 0x97, 0x00, 0x95, + 0x0a, 0xab, 0x02, 0x92, 0x21, 0x1c, 0x30, 0x1c, + 0x0c, 0xcb, 0xf7, 0xf7, 0x3c, 0x00, 0x18, 0xba, + 0x00, 0x00, 0x03, 0xf9, 0x01, 0x25, 0xb5, 0x40, + 0x0c, 0x4e, 0x08, 0x3e, 0x30, 0x78, 0x28, 0x40, + 0x06, 0xd0, 0x20, 0x1c, 0x00, 0xf0, 0xc9, 0xfd, + 0x30, 0x78, 0xa8, 0x43, 0x30, 0x70, 0x03, 0xe0, + 0x20, 0x1c, 0x13, 0x99, 0x00, 0xf0, 0x43, 0xff, + 0x07, 0xa9, 0x03, 0xc9, 0x88, 0x71, 0x0d, 0xb0, + 0xf0, 0xbd, 0x95, 0x24, 0x00, 0x00, 0x20, 0x10, + 0x07, 0x00, 0x74, 0x7a, 0x01, 0x00, 0x3c, 0x00, + 0x54, 0xba, 0x00, 0x00, 0xb0, 0xb5, 0x04, 0x1c, + 0x0c, 0x23, 0x09, 0x49, 0x58, 0x43, 0x40, 0x18, + 0x00, 0x79, 0x05, 0x1c, 0x00, 0xf0, 0x92, 0xfe, + 0x28, 0x1c, 0xf7, 0xf7, 0xc7, 0xf8, 0x01, 0x20, + 0x03, 0x4a, 0xa0, 0x40, 0x08, 0x3a, 0x11, 0x78, + 0x81, 0x43, 0x11, 0x70, 0xb0, 0xbd, 0x00, 0x00, + 0x74, 0x7a, 0x01, 0x00, 0x10, 0xb5, 0x05, 0x4c, + 0x20, 0x78, 0x00, 0x28, 0x03, 0xd1, 0x1a, 0x21, + 0x3c, 0x00, 0x90, 0xba, 0x00, 0x00, 0x86, 0x20, + 0xf5, 0xf7, 0x07, 0xfc, 0x20, 0x78, 0x10, 0xbd, + 0x00, 0x00, 0x18, 0x63, 0x01, 0x00, 0x01, 0x48, + 0x40, 0x78, 0x70, 0x47, 0x00, 0x00, 0x2c, 0x63, + 0x01, 0x00, 0x80, 0xb5, 0xf6, 0xf7, 0xd1, 0xfe, + 0x00, 0xf0, 0x1b, 0xf9, 0x80, 0xbd, 0xfe, 0xb5, + 0x01, 0x68, 0x05, 0x1c, 0x0c, 0x68, 0x0e, 0x1c, + 0x21, 0x78, 0x88, 0x07, 0x71, 0xd1, 0x68, 0x69, + 0xc2, 0x07, 0x3c, 0x00, 0xcc, 0xba, 0x00, 0x00, + 0x6e, 0xd5, 0x80, 0x07, 0x6d, 0xd5, 0xe8, 0x7a, + 0xc2, 0x07, 0x08, 0x07, 0x09, 0x09, 0x02, 0x91, + 0x45, 0x49, 0x80, 0x0f, 0xd2, 0x0f, 0x00, 0x28, + 0x4f, 0x68, 0x05, 0xd0, 0x01, 0x28, 0x09, 0xd0, + 0x02, 0x28, 0x21, 0xd0, 0x03, 0x28, 0x5b, 0xd1, + 0xff, 0x23, 0x20, 0x1c, 0xa9, 0x7a, 0xf4, 0xf7, + 0x74, 0xfc, 0x55, 0xe0, 0x02, 0x98, 0x0b, 0x28, + 0x0a, 0xd0, 0x0c, 0x28, 0x3c, 0x00, 0x08, 0xbb, + 0x00, 0x00, 0x0f, 0xd0, 0x0d, 0x28, 0x4e, 0xd1, + 0x39, 0x4f, 0xf8, 0x68, 0xf4, 0xf7, 0x61, 0xfc, + 0x00, 0x20, 0xc0, 0x43, 0x5a, 0xe0, 0x35, 0x4f, + 0xa9, 0x7a, 0xbb, 0x68, 0x20, 0x1c, 0xf4, 0xf7, + 0x5b, 0xfc, 0x40, 0xe0, 0x32, 0x4f, 0x38, 0x69, + 0xf4, 0xf7, 0x53, 0xfc, 0x3b, 0xe0, 0x00, 0x21, + 0x01, 0x91, 0x02, 0x99, 0x00, 0x20, 0xff, 0x23, + 0x09, 0x07, 0x01, 0xd4, 0x01, 0x20, 0x3c, 0x00, + 0x44, 0xbb, 0x00, 0x00, 0x13, 0xe0, 0x31, 0x89, + 0x19, 0x29, 0x01, 0xd3, 0x26, 0x7e, 0x07, 0xe0, + 0x15, 0x29, 0x04, 0xd3, 0x18, 0x26, 0x71, 0x1a, + 0x49, 0x19, 0x0e, 0x7b, 0x00, 0xe0, 0x00, 0x26, + 0xb1, 0x06, 0x02, 0xd4, 0x01, 0x20, 0x73, 0x07, + 0x5b, 0x0f, 0x01, 0x21, 0x01, 0x91, 0x00, 0x28, + 0x03, 0xd0, 0xa9, 0x7a, 0x20, 0x1c, 0xf4, 0xf7, + 0x36, 0xfc, 0x01, 0x99, 0x01, 0x29, 0x15, 0xd1, + 0x3c, 0x00, 0x80, 0xbb, 0x00, 0x00, 0xf0, 0x06, + 0xc6, 0x0f, 0x20, 0x88, 0x1b, 0x4f, 0xe4, 0x8a, + 0xf9, 0x6b, 0x00, 0x05, 0xc0, 0x0f, 0x00, 0x29, + 0x1a, 0xd0, 0x4b, 0x1c, 0x18, 0xd0, 0x00, 0x2e, + 0x0a, 0xd0, 0x00, 0x28, 0x08, 0xd0, 0x38, 0x88, + 0x84, 0x42, 0x13, 0xd0, 0x02, 0x98, 0x0c, 0x28, + 0x01, 0xe0, 0x1d, 0xe0, 0x12, 0xe0, 0x0d, 0xd0, + 0x08, 0x1c, 0x01, 0xf0, 0x76, 0xf9, 0x00, 0x28, + 0x03, 0xd1, 0x3c, 0x00, 0xbc, 0xbb, 0x00, 0x00, + 0x00, 0xf0, 0xa6, 0xfa, 0xf4, 0xf7, 0x0a, 0xfc, + 0x00, 0x20, 0xc0, 0x43, 0xf8, 0x63, 0x00, 0x2e, + 0x0d, 0xd0, 0x3c, 0x80, 0x00, 0x20, 0xf8, 0x63, + 0x09, 0xe0, 0x20, 0x88, 0x00, 0x06, 0x80, 0x0e, + 0x20, 0x28, 0x04, 0xd1, 0x04, 0x4f, 0x20, 0x1c, + 0xb9, 0x6a, 0xf4, 0xf7, 0xf8, 0xfb, 0x29, 0x1c, + 0x02, 0x48, 0xfb, 0xf7, 0xef, 0xff, 0xfe, 0xbd, + 0x28, 0x7a, 0x01, 0x00, 0x3c, 0x00, 0xf8, 0xbb, + 0x00, 0x00, 0xa5, 0x9a, 0x00, 0x00, 0x03, 0x48, + 0x80, 0xb5, 0x00, 0x78, 0x00, 0x21, 0x00, 0xf0, + 0xfc, 0xfb, 0x80, 0xbd, 0x00, 0x00, 0x18, 0x63, + 0x01, 0x00, 0x04, 0x4b, 0x05, 0x49, 0x00, 0x28, + 0x1a, 0x68, 0x00, 0xd0, 0x01, 0x1c, 0x10, 0x1c, + 0x19, 0x60, 0x70, 0x47, 0x00, 0x00, 0xd4, 0x79, + 0x01, 0x00, 0x95, 0x75, 0x00, 0x00, 0x05, 0x48, + 0x80, 0xb5, 0x00, 0x7f, 0x24, 0x23, 0x3c, 0x00, + 0x34, 0xbc, 0x00, 0x00, 0x04, 0x49, 0x58, 0x43, + 0x40, 0x18, 0xc0, 0x69, 0xf4, 0xf7, 0xcc, 0xfb, + 0x80, 0xbd, 0x00, 0x00, 0xd4, 0x79, 0x01, 0x00, + 0x94, 0x46, 0x01, 0x00, 0x02, 0x1c, 0x06, 0x48, + 0x80, 0xb5, 0x81, 0x62, 0x82, 0x60, 0x00, 0x7f, + 0x24, 0x23, 0x04, 0x49, 0x58, 0x43, 0x40, 0x18, + 0x80, 0x69, 0xf4, 0xf7, 0xb9, 0xfb, 0x80, 0xbd, + 0xd4, 0x79, 0x01, 0x00, 0x94, 0x46, 0x01, 0x00, + 0x3c, 0x00, 0x70, 0xbc, 0x00, 0x00, 0x80, 0xb5, + 0x00, 0x20, 0x00, 0xf0, 0x3c, 0xfb, 0x00, 0x20, + 0x00, 0xf0, 0x6d, 0xfa, 0x00, 0xf0, 0x65, 0xfa, + 0x04, 0x49, 0xc8, 0x6a, 0x01, 0x30, 0xc8, 0x62, + 0x08, 0x1f, 0x00, 0x88, 0x07, 0xf0, 0xc1, 0xf8, + 0x80, 0xbd, 0xd4, 0x79, 0x01, 0x00, 0x06, 0x48, + 0x80, 0xb5, 0x00, 0x21, 0x01, 0x77, 0xc1, 0x6a, + 0x01, 0x31, 0xc1, 0x62, 0x04, 0x38, 0x00, 0x88, + 0x07, 0xf0, 0x3c, 0x00, 0xac, 0xbc, 0x00, 0x00, + 0xb3, 0xf8, 0x03, 0xf0, 0xd1, 0xf9, 0x80, 0xbd, + 0xd4, 0x79, 0x01, 0x00, 0x80, 0xb5, 0x05, 0xf0, + 0xe9, 0xfa, 0x80, 0xbd, 0x80, 0xb5, 0x00, 0x28, + 0x03, 0xd1, 0x01, 0x20, 0x04, 0xf0, 0x22, 0xfa, + 0x80, 0xbd, 0x01, 0x20, 0x03, 0xf0, 0xe6, 0xfb, + 0x80, 0xbd, 0x00, 0x00, 0x03, 0x49, 0x01, 0x20, + 0x49, 0x78, 0x00, 0x29, 0x00, 0xd0, 0x00, 0x20, + 0x70, 0x47, 0x00, 0x00, 0x3c, 0x00, 0xe8, 0xbc, + 0x00, 0x00, 0x2c, 0x63, 0x01, 0x00, 0x70, 0xb5, + 0x13, 0x4d, 0x28, 0x78, 0x00, 0x28, 0x20, 0xd1, + 0x01, 0x21, 0x2e, 0x1c, 0x70, 0x68, 0xff, 0xf7, + 0x12, 0xfd, 0x00, 0x21, 0x07, 0x20, 0x06, 0xf0, + 0x2a, 0xfb, 0x0d, 0x48, 0x00, 0x24, 0x04, 0x71, + 0x04, 0xf0, 0xed, 0xf8, 0x06, 0xf0, 0xd5, 0xf9, + 0x01, 0x20, 0x28, 0x70, 0x0a, 0x48, 0x04, 0x60, + 0x44, 0x60, 0xf6, 0xf7, 0x4c, 0xfd, 0x3c, 0x00, + 0x24, 0xbd, 0x00, 0x00, 0xf7, 0xf7, 0x5e, 0xf8, + 0xff, 0xf7, 0xa2, 0xff, 0x00, 0xf0, 0xa8, 0xfd, + 0x05, 0x48, 0x71, 0x68, 0x03, 0xf0, 0x20, 0xfb, + 0x01, 0x20, 0x70, 0xbd, 0x2c, 0x63, 0x01, 0x00, + 0x50, 0x00, 0x07, 0x00, 0x80, 0x00, 0x07, 0x00, + 0xc4, 0x60, 0x01, 0x00, 0xb0, 0xb5, 0x1e, 0x4c, + 0x20, 0x78, 0x01, 0x28, 0x35, 0xd1, 0x25, 0x1c, + 0x69, 0x68, 0x1c, 0x48, 0x03, 0xf0, 0x20, 0xfb, + 0x3c, 0x00, 0x60, 0xbd, 0x00, 0x00, 0x04, 0xf0, + 0xf0, 0xf8, 0x1a, 0x48, 0x01, 0x68, 0x49, 0x08, + 0x49, 0x00, 0x01, 0x60, 0x01, 0x68, 0x01, 0x22, + 0x11, 0x43, 0x01, 0x60, 0x00, 0xf0, 0x2b, 0xfe, + 0x00, 0xf0, 0x1b, 0xfc, 0x06, 0xf0, 0x99, 0xf8, + 0xf6, 0xf7, 0x29, 0xfe, 0xf6, 0xf7, 0x2d, 0xfc, + 0x00, 0x20, 0x20, 0x70, 0xff, 0xf7, 0x83, 0xff, + 0x00, 0xf0, 0x8b, 0xfd, 0x0f, 0x48, 0x81, 0x78, + 0x08, 0x22, 0x3c, 0x00, 0x9c, 0xbd, 0x00, 0x00, + 0x91, 0x43, 0x81, 0x70, 0x81, 0x78, 0x11, 0x43, + 0x81, 0x70, 0x0c, 0x49, 0x10, 0x20, 0x08, 0x71, + 0x68, 0x68, 0xff, 0xf7, 0x5f, 0xfd, 0xf7, 0xf7, + 0x39, 0xf8, 0xf6, 0xf7, 0x4d, 0xfd, 0x01, 0x21, + 0x07, 0x20, 0x06, 0xf0, 0xcd, 0xfa, 0x01, 0x20, + 0xb0, 0xbd, 0x00, 0x00, 0x2c, 0x63, 0x01, 0x00, + 0xc4, 0x60, 0x01, 0x00, 0xf0, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x3c, 0x00, 0xd8, 0xbd, + 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x03, 0x49, + 0x01, 0x20, 0x89, 0x7a, 0x01, 0x29, 0x00, 0xd0, + 0x00, 0x20, 0x70, 0x47, 0x00, 0x00, 0x14, 0x7a, + 0x01, 0x00, 0xb0, 0xb5, 0x15, 0x4d, 0x04, 0x1c, + 0x28, 0x7a, 0x00, 0x28, 0x20, 0xd1, 0xf9, 0xf7, + 0x00, 0xfc, 0x02, 0x28, 0x1c, 0xd1, 0x01, 0x20, + 0x28, 0x72, 0xe8, 0x68, 0x00, 0x28, 0x10, 0xd0, + 0x20, 0x68, 0x29, 0x68, 0x08, 0x60, 0x3c, 0x00, + 0x14, 0xbe, 0x00, 0x00, 0x69, 0x68, 0x0d, 0x48, + 0x03, 0xf0, 0xc2, 0xfa, 0x01, 0x21, 0x68, 0x68, + 0xff, 0xf7, 0xc8, 0xfc, 0x00, 0x22, 0x24, 0x20, + 0x61, 0x68, 0x07, 0xf0, 0xcf, 0xfb, 0xb0, 0xbd, + 0x00, 0x20, 0x28, 0x72, 0x21, 0x68, 0x01, 0x20, + 0xf4, 0xf7, 0xcf, 0xfa, 0xb0, 0xbd, 0x00, 0x20, + 0x21, 0x68, 0xf4, 0xf7, 0xca, 0xfa, 0xb0, 0xbd, + 0x04, 0x7a, 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, + 0x3c, 0x00, 0x50, 0xbe, 0x00, 0x00, 0x04, 0x48, + 0x80, 0xb5, 0x00, 0x7a, 0x01, 0x28, 0x02, 0xd1, + 0x00, 0x20, 0x02, 0xf0, 0xf0, 0xfe, 0x80, 0xbd, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x80, 0xb5, + 0x01, 0x28, 0x07, 0xd0, 0x80, 0x28, 0x09, 0xd1, + 0x07, 0x48, 0x00, 0x7a, 0x00, 0x28, 0x04, 0xd0, + 0x01, 0x20, 0x00, 0xe0, 0x00, 0x20, 0x02, 0xf0, + 0xde, 0xfe, 0x80, 0xbd, 0x0e, 0x21, 0x24, 0x20, + 0xf5, 0xf7, 0x3c, 0x00, 0x8c, 0xbe, 0x00, 0x00, + 0x0b, 0xfa, 0x80, 0xbd, 0x04, 0x7a, 0x01, 0x00, + 0xf8, 0xb5, 0x3a, 0x4e, 0x05, 0x1c, 0xb0, 0x7a, + 0x00, 0x28, 0x69, 0xd1, 0xf9, 0xf7, 0xae, 0xfb, + 0x02, 0x28, 0x65, 0xd1, 0x36, 0x48, 0x00, 0x68, + 0x00, 0x28, 0x61, 0xd0, 0x35, 0x48, 0x71, 0x68, + 0x03, 0xf0, 0x74, 0xfa, 0x01, 0x21, 0x70, 0x68, + 0xff, 0xf7, 0x7a, 0xfc, 0x6c, 0x20, 0xf5, 0xf7, + 0xb9, 0xfc, 0x04, 0x1c, 0x3c, 0x00, 0xc8, 0xbe, + 0x00, 0x00, 0x6c, 0x21, 0xf4, 0xf7, 0xe7, 0xfa, + 0x30, 0x68, 0x2c, 0x22, 0x04, 0x60, 0x29, 0x68, + 0x81, 0x60, 0x69, 0x68, 0xc1, 0x60, 0x00, 0x21, + 0x11, 0x54, 0x81, 0x62, 0xa9, 0x68, 0x00, 0x29, + 0x02, 0xd0, 0xe9, 0x68, 0x01, 0x61, 0x05, 0xe0, + 0x06, 0xf0, 0x5d, 0xff, 0x69, 0x68, 0x40, 0x18, + 0x31, 0x68, 0x08, 0x61, 0x70, 0x68, 0xff, 0xf7, + 0x14, 0xfd, 0x69, 0x21, 0x08, 0x55, 0x3c, 0x00, + 0x04, 0xbf, 0x00, 0x00, 0x00, 0x20, 0xf9, 0xf7, + 0x09, 0xfb, 0x01, 0x27, 0x3b, 0x1c, 0x06, 0x1c, + 0x22, 0x1c, 0x24, 0x32, 0x00, 0x21, 0xf9, 0xf7, + 0x79, 0xfb, 0x1c, 0x48, 0x03, 0x21, 0x00, 0x88, + 0x89, 0x03, 0x08, 0x43, 0x21, 0x1c, 0x40, 0x31, + 0x00, 0x91, 0x48, 0x83, 0x18, 0x48, 0x10, 0x21, + 0x60, 0x60, 0x18, 0x48, 0xa0, 0x60, 0xa7, 0x63, + 0x67, 0x63, 0x00, 0x20, 0xf5, 0xf7, 0x4c, 0xfb, + 0x3c, 0x00, 0x40, 0xbf, 0x00, 0x00, 0xe0, 0x60, + 0x02, 0x89, 0x00, 0x99, 0xca, 0x83, 0x07, 0x68, + 0x31, 0x1c, 0x38, 0x1d, 0x27, 0x61, 0xfe, 0xf7, + 0x8e, 0xfe, 0x38, 0x1c, 0x0a, 0x30, 0x0f, 0x49, + 0xfe, 0xf7, 0x89, 0xfe, 0xa4, 0x20, 0x38, 0x80, + 0x00, 0x20, 0x04, 0xf0, 0xde, 0xfb, 0x00, 0x22, + 0x1f, 0x20, 0x69, 0x68, 0x07, 0xf0, 0x2d, 0xfb, + 0xf8, 0xbd, 0xff, 0xe7, 0x00, 0x20, 0x29, 0x68, + 0xf4, 0xf7, 0x3c, 0x00, 0x7c, 0xbf, 0x00, 0x00, + 0x2e, 0xfa, 0xf8, 0xe7, 0x14, 0x7a, 0x01, 0x00, + 0x80, 0x5a, 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, + 0xfa, 0x60, 0x01, 0x00, 0x99, 0xec, 0x00, 0x00, + 0x15, 0xed, 0x00, 0x00, 0x12, 0x61, 0x01, 0x00, + 0x06, 0x48, 0x80, 0xb5, 0x81, 0x7a, 0x00, 0x29, + 0x07, 0xd0, 0x00, 0x68, 0x04, 0x22, 0x20, 0x30, + 0x01, 0x7b, 0x11, 0x43, 0x01, 0x73, 0x02, 0xf0, + 0x6b, 0xfd, 0x80, 0xbd, 0x3c, 0x00, 0xb8, 0xbf, + 0x00, 0x00, 0x14, 0x7a, 0x01, 0x00, 0x10, 0xb5, + 0x04, 0x4c, 0xa0, 0x7a, 0x01, 0x28, 0x03, 0xd1, + 0x06, 0xf0, 0xf1, 0xfe, 0x21, 0x68, 0x88, 0x61, + 0x10, 0xbd, 0x14, 0x7a, 0x01, 0x00, 0x03, 0x1c, + 0x08, 0x1c, 0x1f, 0x49, 0x70, 0xb5, 0x0a, 0x68, + 0x01, 0x2b, 0x1c, 0xd0, 0x80, 0x2b, 0x05, 0xd0, + 0x83, 0x2b, 0x30, 0xd1, 0x88, 0x7a, 0x00, 0x28, + 0x14, 0xd0, 0x29, 0xe0, 0x53, 0x69, 0x3c, 0x00, + 0xf4, 0xbf, 0x00, 0x00, 0x00, 0x2b, 0x0e, 0xd0, + 0x94, 0x69, 0xd5, 0x69, 0x2e, 0x1b, 0x0c, 0x69, + 0x5d, 0x1b, 0x36, 0x1b, 0xb6, 0x10, 0xa4, 0x19, + 0x0c, 0x61, 0xcc, 0x68, 0x2d, 0x1b, 0xad, 0x10, + 0x64, 0x19, 0xcc, 0x60, 0x93, 0x61, 0x02, 0xf0, + 0x81, 0xfd, 0x70, 0xbd, 0x02, 0x28, 0x12, 0xd1, + 0x90, 0x6a, 0x0c, 0x1c, 0x00, 0x28, 0xf8, 0xd0, + 0x07, 0xf0, 0x0e, 0xfa, 0xa0, 0x7a, 0x01, 0x28, + 0x3c, 0x00, 0x30, 0xc0, 0x00, 0x00, 0xf3, 0xd1, + 0x20, 0x68, 0x81, 0x6a, 0x00, 0x29, 0xef, 0xd1, + 0x20, 0x30, 0x01, 0x7b, 0x08, 0x22, 0x11, 0x43, + 0x01, 0x73, 0x70, 0xbd, 0x02, 0xf0, 0x21, 0xfd, + 0x70, 0xbd, 0x0e, 0x21, 0x1f, 0x20, 0xf5, 0xf7, + 0x28, 0xf9, 0x70, 0xbd, 0x00, 0x00, 0x14, 0x7a, + 0x01, 0x00, 0x02, 0x49, 0x0c, 0x31, 0x03, 0xc9, + 0x40, 0x18, 0x70, 0x47, 0x00, 0x00, 0x14, 0x7a, + 0x01, 0x00, 0x3c, 0x00, 0x6c, 0xc0, 0x00, 0x00, + 0x05, 0x48, 0x80, 0xb5, 0x00, 0x68, 0x04, 0x22, + 0x20, 0x30, 0x01, 0x7b, 0x11, 0x43, 0x01, 0x73, + 0x07, 0xf0, 0xe4, 0xf9, 0x80, 0xbd, 0x00, 0x00, + 0x14, 0x7a, 0x01, 0x00, 0x70, 0xb5, 0x16, 0x4c, + 0x0e, 0x1c, 0xa1, 0x7a, 0x00, 0x29, 0x1c, 0xd0, + 0x21, 0x68, 0x08, 0x61, 0x07, 0xf0, 0x32, 0xfa, + 0x00, 0x28, 0x17, 0xd0, 0x20, 0x68, 0x00, 0x25, + 0x05, 0x62, 0x00, 0x22, 0x3c, 0x00, 0xa8, 0xc0, + 0x00, 0x00, 0x83, 0x21, 0x1f, 0x20, 0x07, 0xf0, + 0x94, 0xfa, 0x60, 0x68, 0xff, 0xf7, 0x03, 0xfc, + 0x21, 0x68, 0x04, 0x22, 0x20, 0x31, 0x08, 0x7b, + 0x2b, 0x1c, 0x90, 0x43, 0x08, 0x73, 0x31, 0x1c, + 0x00, 0x22, 0x1f, 0x20, 0x07, 0xf0, 0x61, 0xfb, + 0x70, 0xbd, 0x20, 0x68, 0x08, 0x22, 0x20, 0x30, + 0x01, 0x7b, 0x11, 0x43, 0x01, 0x73, 0x02, 0xf0, + 0xd6, 0xfc, 0x70, 0xbd, 0x00, 0x00, 0x3c, 0x00, + 0xe4, 0xc0, 0x00, 0x00, 0x14, 0x7a, 0x01, 0x00, + 0x80, 0xb5, 0x00, 0xf0, 0x77, 0xfc, 0x00, 0xf0, + 0x6f, 0xfc, 0x00, 0xf0, 0x29, 0xff, 0x00, 0xf0, + 0x5d, 0xfa, 0x00, 0xf0, 0xc5, 0xf8, 0x00, 0xf0, + 0x85, 0xff, 0x80, 0xbd, 0x80, 0xb5, 0xfa, 0xf7, + 0x85, 0xfa, 0x80, 0xbd, 0x01, 0x48, 0xc0, 0x68, + 0x70, 0x47, 0x00, 0x00, 0x28, 0x7a, 0x01, 0x00, + 0x03, 0x49, 0x00, 0x28, 0x00, 0xd0, 0x01, 0x1c, + 0x3c, 0x00, 0x20, 0xc1, 0x00, 0x00, 0x02, 0x48, + 0xc1, 0x60, 0x70, 0x47, 0x00, 0x00, 0x81, 0x75, + 0x00, 0x00, 0x28, 0x7a, 0x01, 0x00, 0x01, 0x48, + 0x02, 0x49, 0xc8, 0x60, 0x70, 0x47, 0x81, 0x75, + 0x00, 0x00, 0x28, 0x7a, 0x01, 0x00, 0x01, 0x49, + 0x88, 0x61, 0x70, 0x47, 0x00, 0x00, 0x28, 0x7a, + 0x01, 0x00, 0x01, 0x49, 0x00, 0x20, 0x88, 0x61, + 0x70, 0x47, 0x28, 0x7a, 0x01, 0x00, 0x03, 0x49, + 0x00, 0x28, 0x3c, 0x00, 0x5c, 0xc1, 0x00, 0x00, + 0x00, 0xd0, 0x01, 0x1c, 0x02, 0x48, 0xc1, 0x61, + 0x70, 0x47, 0x00, 0x00, 0x89, 0x75, 0x00, 0x00, + 0x28, 0x7a, 0x01, 0x00, 0x03, 0x49, 0x00, 0x28, + 0x00, 0xd0, 0x01, 0x1c, 0x02, 0x48, 0x81, 0x62, + 0x70, 0x47, 0x00, 0x00, 0x8d, 0x75, 0x00, 0x00, + 0x28, 0x7a, 0x01, 0x00, 0x03, 0x49, 0x00, 0x28, + 0x00, 0xd0, 0x01, 0x1c, 0x02, 0x48, 0x01, 0x62, + 0x70, 0x47, 0x00, 0x00, 0x3c, 0x00, 0x98, 0xc1, + 0x00, 0x00, 0x91, 0x75, 0x00, 0x00, 0x28, 0x7a, + 0x01, 0x00, 0x03, 0x49, 0x00, 0x28, 0x00, 0xd0, + 0x01, 0x1c, 0x02, 0x48, 0x01, 0x61, 0x70, 0x47, + 0x00, 0x00, 0x99, 0x75, 0x00, 0x00, 0x28, 0x7a, + 0x01, 0x00, 0x01, 0x48, 0x02, 0x49, 0x08, 0x61, + 0x70, 0x47, 0x81, 0x75, 0x00, 0x00, 0x28, 0x7a, + 0x01, 0x00, 0x02, 0x1c, 0x08, 0x1c, 0x80, 0x2a, + 0x80, 0xb5, 0x02, 0xd1, 0x00, 0xf0, 0x3c, 0x00, + 0xd4, 0xc1, 0x00, 0x00, 0x07, 0xf8, 0x80, 0xbd, + 0x1e, 0x21, 0x21, 0x20, 0xf5, 0xf7, 0x62, 0xf8, + 0x80, 0xbd, 0x00, 0x00, 0xb0, 0xb5, 0x10, 0x4d, + 0x04, 0x1c, 0xa8, 0x6b, 0x01, 0x30, 0xa8, 0x63, + 0x69, 0x6b, 0x09, 0x1a, 0x28, 0x1c, 0x00, 0x6b, + 0x0c, 0x29, 0x03, 0xd9, 0x00, 0x21, 0xff, 0xf7, + 0x91, 0xfa, 0x03, 0xe0, 0x08, 0x29, 0x01, 0xd1, + 0xff, 0xf7, 0x32, 0xfb, 0x20, 0x1c, 0x00, 0xf0, + 0x3c, 0x00, 0x10, 0xc2, 0x00, 0x00, 0x4d, 0xf9, + 0x60, 0x69, 0x40, 0x07, 0x01, 0xd5, 0x03, 0xf0, + 0x0c, 0xfc, 0x20, 0x1c, 0xe9, 0x6a, 0xf4, 0xf7, + 0xdb, 0xf8, 0xb0, 0xbd, 0x00, 0x00, 0x28, 0x7a, + 0x01, 0x00, 0x03, 0x49, 0x00, 0x28, 0x00, 0xd0, + 0x01, 0x1c, 0x02, 0x48, 0x41, 0x62, 0x70, 0x47, + 0x00, 0x00, 0xb5, 0x75, 0x00, 0x00, 0x28, 0x7a, + 0x01, 0x00, 0x03, 0x49, 0x01, 0x20, 0x09, 0x6c, + 0x00, 0x29, 0x3c, 0x00, 0x4c, 0xc2, 0x00, 0x00, + 0x00, 0xd1, 0x00, 0x20, 0x70, 0x47, 0x00, 0x00, + 0x28, 0x7a, 0x01, 0x00, 0x10, 0xb5, 0x07, 0x4c, + 0xe1, 0x6b, 0x00, 0x29, 0x01, 0xd1, 0xe0, 0x63, + 0x04, 0xe0, 0x81, 0x42, 0x02, 0xd0, 0x00, 0x20, + 0xc0, 0x43, 0xf8, 0xe7, 0x06, 0xf0, 0x9c, 0xfd, + 0x20, 0x64, 0x10, 0xbd, 0x28, 0x7a, 0x01, 0x00, + 0x01, 0x48, 0x00, 0x6c, 0x70, 0x47, 0x00, 0x00, + 0x28, 0x7a, 0x01, 0x00, 0x3c, 0x00, 0x88, 0xc2, + 0x00, 0x00, 0x05, 0x49, 0x80, 0xb5, 0x00, 0x20, + 0x48, 0x63, 0x88, 0x63, 0xff, 0x21, 0x09, 0x31, + 0x15, 0x22, 0x10, 0x20, 0xf6, 0xf7, 0xfb, 0xf9, + 0x80, 0xbd, 0x28, 0x7a, 0x01, 0x00, 0x03, 0x49, + 0x00, 0x28, 0x00, 0xd0, 0x01, 0x1c, 0x02, 0x48, + 0x81, 0x60, 0x70, 0x47, 0x00, 0x00, 0xc1, 0x75, + 0x00, 0x00, 0x28, 0x7a, 0x01, 0x00, 0x03, 0x49, + 0x00, 0x28, 0x00, 0xd0, 0x01, 0x1c, 0x3c, 0x00, + 0xc4, 0xc2, 0x00, 0x00, 0x02, 0x48, 0xc1, 0x62, + 0x70, 0x47, 0x00, 0x00, 0xc5, 0x75, 0x00, 0x00, + 0x28, 0x7a, 0x01, 0x00, 0x04, 0x4b, 0x05, 0x49, + 0x00, 0x28, 0x5a, 0x68, 0x00, 0xd0, 0x01, 0x1c, + 0x10, 0x1c, 0x59, 0x60, 0x70, 0x47, 0x00, 0x00, + 0x28, 0x7a, 0x01, 0x00, 0xc9, 0x75, 0x00, 0x00, + 0x03, 0x49, 0x00, 0x28, 0x00, 0xd0, 0x01, 0x1c, + 0x02, 0x48, 0x41, 0x61, 0x70, 0x47, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0xc3, 0x00, 0x00, 0xcd, 0x75, + 0x00, 0x00, 0x28, 0x7a, 0x01, 0x00, 0x0f, 0x4b, + 0x10, 0xb5, 0xd9, 0x68, 0x00, 0x29, 0x19, 0xd0, + 0x0e, 0x4c, 0x00, 0x21, 0xca, 0x00, 0x12, 0x19, + 0x40, 0x3a, 0xd2, 0x6b, 0x82, 0x42, 0x02, 0xda, + 0x01, 0x31, 0x03, 0x29, 0xf6, 0xd3, 0x48, 0x1c, + 0x1a, 0x78, 0x00, 0x06, 0x00, 0x0e, 0x90, 0x42, + 0x08, 0xd0, 0x18, 0x70, 0x08, 0x06, 0x00, 0x0e, + 0x04, 0x1c, 0x3c, 0x00, 0x3c, 0xc3, 0x00, 0x00, + 0xf6, 0xf7, 0xba, 0xfa, 0x20, 0x1c, 0x03, 0xf0, + 0x1b, 0xfd, 0x10, 0xbd, 0x18, 0x63, 0x01, 0x00, + 0x3c, 0x42, 0x01, 0x00, 0x10, 0xb5, 0x14, 0x4c, + 0xe1, 0x68, 0x00, 0x29, 0x22, 0xd0, 0x21, 0x78, + 0x12, 0x4b, 0xca, 0x00, 0xd2, 0x18, 0x40, 0x3a, + 0xd3, 0x6b, 0x83, 0x42, 0x02, 0xda, 0x48, 0x1c, + 0x20, 0x70, 0x0b, 0xe0, 0x92, 0x6b, 0x82, 0x42, + 0x14, 0xdd, 0xff, 0x31, 0x3c, 0x00, 0x78, 0xc3, + 0x00, 0x00, 0x08, 0x06, 0x00, 0x0e, 0x20, 0x70, + 0x03, 0xd1, 0x19, 0x21, 0x86, 0x20, 0xf4, 0xf7, + 0x8e, 0xff, 0x20, 0x78, 0xff, 0x30, 0x00, 0x06, + 0x00, 0x0e, 0xf6, 0xf7, 0x90, 0xfa, 0x20, 0x78, + 0xff, 0x30, 0x00, 0x06, 0x00, 0x0e, 0x03, 0xf0, + 0xee, 0xfc, 0x10, 0xbd, 0x00, 0x00, 0x18, 0x63, + 0x01, 0x00, 0x3c, 0x42, 0x01, 0x00, 0x09, 0x48, + 0x00, 0x21, 0x01, 0x81, 0x41, 0x81, 0x3c, 0x00, + 0xb4, 0xc3, 0x00, 0x00, 0x81, 0x81, 0xc1, 0x81, + 0x07, 0x4a, 0x02, 0x80, 0x01, 0x23, 0xdb, 0x02, + 0x43, 0x80, 0x82, 0x80, 0xc2, 0x80, 0x41, 0x76, + 0x31, 0x21, 0x81, 0x76, 0x01, 0x21, 0x01, 0x76, + 0x70, 0x47, 0x00, 0x00, 0x30, 0x80, 0x07, 0x00, + 0xff, 0xff, 0x00, 0x00, 0x80, 0xb5, 0x01, 0x20, + 0xf6, 0xf7, 0xf8, 0xf8, 0x01, 0x20, 0xf6, 0xf7, + 0xdb, 0xfc, 0x01, 0x20, 0xf6, 0xf7, 0x5a, 0xfa, + 0x3c, 0x00, 0xf0, 0xc3, 0x00, 0x00, 0x01, 0x20, + 0x00, 0xf0, 0xf1, 0xfd, 0x01, 0x20, 0xf7, 0xf7, + 0xc6, 0xfb, 0x80, 0xbd, 0x00, 0x00, 0x10, 0xb5, + 0x11, 0x4c, 0x00, 0x29, 0x07, 0xd1, 0x00, 0x28, + 0x02, 0xd1, 0x01, 0x20, 0xe0, 0x60, 0x06, 0xe0, + 0x00, 0x21, 0xe1, 0x60, 0x03, 0xe0, 0x01, 0x29, + 0x07, 0xd1, 0x00, 0x28, 0x01, 0xd0, 0x20, 0x70, + 0x03, 0xe0, 0x18, 0x21, 0x86, 0x20, 0xf4, 0xf7, + 0x3c, 0xff, 0x3c, 0x00, 0x2c, 0xc4, 0x00, 0x00, + 0x20, 0x78, 0xff, 0x30, 0x00, 0x06, 0x00, 0x0e, + 0xf6, 0xf7, 0x3e, 0xfa, 0x20, 0x78, 0xff, 0x30, + 0x00, 0x06, 0x00, 0x0e, 0x03, 0xf0, 0x9c, 0xfc, + 0x10, 0xbd, 0x00, 0x00, 0x18, 0x63, 0x01, 0x00, + 0x05, 0x49, 0x80, 0xb5, 0x09, 0x68, 0x88, 0x42, + 0x05, 0xd0, 0xfe, 0xf7, 0xff, 0xfb, 0x00, 0xf0, + 0x87, 0xfa, 0xff, 0xf7, 0x2b, 0xfc, 0x80, 0xbd, + 0xa8, 0x69, 0x01, 0x00, 0x3c, 0x00, 0x68, 0xc4, + 0x00, 0x00, 0x01, 0x49, 0x48, 0x70, 0x70, 0x47, + 0x00, 0x00, 0x2c, 0x63, 0x01, 0x00, 0x01, 0x49, + 0xc8, 0x60, 0x70, 0x47, 0x00, 0x00, 0x4c, 0x7b, + 0x01, 0x00, 0x03, 0x49, 0x01, 0x20, 0x09, 0x78, + 0x00, 0x29, 0x00, 0xd0, 0x00, 0x20, 0x70, 0x47, + 0x00, 0x00, 0x2c, 0x63, 0x01, 0x00, 0x04, 0x4a, + 0x00, 0x28, 0x02, 0xd0, 0x90, 0x69, 0x01, 0x30, + 0x90, 0x61, 0xd0, 0x69, 0x40, 0x18, 0x3c, 0x00, + 0xa4, 0xc4, 0x00, 0x00, 0xd0, 0x61, 0x70, 0x47, + 0x90, 0x5c, 0x01, 0x00, 0xfe, 0xb5, 0x04, 0x1c, + 0x00, 0x68, 0x05, 0x68, 0x28, 0x1c, 0xfe, 0xf7, + 0x27, 0xff, 0x07, 0x1c, 0x60, 0x69, 0x15, 0x4e, + 0xc0, 0x07, 0xc0, 0x0f, 0x21, 0xd0, 0x01, 0xaa, + 0x02, 0xa9, 0x28, 0x1c, 0xfe, 0xf7, 0x12, 0xff, + 0x38, 0x78, 0xc0, 0x07, 0x0c, 0xd4, 0x60, 0x69, + 0x80, 0x07, 0x08, 0xd5, 0x00, 0xab, 0x18, 0x7a, + 0x3c, 0x00, 0xe0, 0xc4, 0x00, 0x00, 0x00, 0x28, + 0x01, 0xd0, 0x02, 0x28, 0x02, 0xd1, 0x70, 0x6a, + 0x01, 0x30, 0x70, 0x62, 0xfe, 0xbd, 0x00, 0xab, + 0x18, 0x7a, 0x00, 0x28, 0x01, 0xd0, 0x02, 0x28, + 0xf8, 0xd1, 0x70, 0x6a, 0x01, 0x30, 0x70, 0x62, + 0xb0, 0x6a, 0x01, 0x30, 0xb0, 0x62, 0xf1, 0xe7, + 0xf0, 0x6a, 0x01, 0x30, 0xf0, 0x62, 0xed, 0xe7, + 0x00, 0x00, 0x90, 0x5c, 0x01, 0x00, 0x02, 0x49, + 0x48, 0x69, 0x3c, 0x00, 0x1c, 0xc5, 0x00, 0x00, + 0x01, 0x30, 0x48, 0x61, 0x70, 0x47, 0x00, 0x00, + 0x90, 0x5c, 0x01, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x70, 0x47, 0x00, 0x00, 0x01, 0x1c, 0x40, 0x31, + 0x10, 0xb5, 0x0a, 0x8b, 0x12, 0x07, 0x92, 0x0f, + 0x01, 0x2a, 0x33, 0xd0, 0x4a, 0x78, 0x1a, 0x49, + 0x04, 0x1c, 0x60, 0x34, 0x00, 0x2a, 0x0b, 0x6a, + 0x22, 0xd1, 0xe2, 0x79, 0x01, 0x2a, 0x02, 0xd9, + 0xcc, 0x68, 0x01, 0x34, 0x3c, 0x00, 0x58, 0xc5, + 0x00, 0x00, 0xcc, 0x60, 0x02, 0x2a, 0x02, 0xd9, + 0x0c, 0x69, 0x01, 0x34, 0x0c, 0x61, 0x0c, 0x68, + 0x01, 0x34, 0x0c, 0x60, 0x44, 0x6b, 0x00, 0x2c, + 0x03, 0xd0, 0x04, 0x69, 0x24, 0x7c, 0xe4, 0x07, + 0x02, 0xd5, 0x4c, 0x68, 0x01, 0x34, 0x4c, 0x60, + 0x80, 0x6b, 0x00, 0x28, 0x02, 0xd0, 0x08, 0x6b, + 0x01, 0x30, 0x08, 0x63, 0x00, 0x2a, 0x0c, 0xd0, + 0x98, 0x18, 0x01, 0x38, 0x08, 0xe0, 0x3c, 0x00, + 0x94, 0xc5, 0x00, 0x00, 0x01, 0x2a, 0x01, 0xd0, + 0x02, 0x2a, 0x02, 0xd1, 0x88, 0x68, 0x01, 0x30, + 0x88, 0x60, 0xe0, 0x79, 0x18, 0x18, 0x08, 0x62, + 0x10, 0xbd, 0x00, 0x00, 0x90, 0x5c, 0x01, 0x00, + 0x70, 0x47, 0x00, 0x00, 0x01, 0x49, 0x0a, 0x20, + 0x08, 0x81, 0x70, 0x47, 0xc4, 0x7a, 0x01, 0x00, + 0xf0, 0xb5, 0x32, 0x4f, 0x04, 0x1c, 0x78, 0x78, + 0x85, 0xb0, 0xc0, 0x07, 0xc0, 0x0f, 0x03, 0x90, + 0x3c, 0x00, 0xd0, 0xc5, 0x00, 0x00, 0xb8, 0x78, + 0x02, 0x90, 0x01, 0x20, 0xa0, 0x40, 0x04, 0x90, + 0x39, 0x1c, 0x88, 0x70, 0x2c, 0x48, 0x00, 0x88, + 0x06, 0xf0, 0x0b, 0xfc, 0x01, 0x90, 0xfe, 0xf7, + 0xae, 0xfc, 0x04, 0x30, 0x29, 0x4e, 0xa5, 0x00, + 0x71, 0x59, 0x09, 0x79, 0x88, 0x42, 0x06, 0xd0, + 0xfe, 0xf7, 0xa5, 0xfc, 0x71, 0x59, 0x04, 0x30, + 0x08, 0x71, 0x01, 0x20, 0x78, 0x70, 0x00, 0x20, + 0x78, 0x70, 0x3c, 0x00, 0x0c, 0xc6, 0x00, 0x00, + 0x21, 0x48, 0x01, 0x21, 0x20, 0x4e, 0x30, 0x38, + 0x01, 0x55, 0x71, 0x59, 0x03, 0x20, 0x08, 0x70, + 0x06, 0xf0, 0xc6, 0xfb, 0x06, 0x1c, 0xfe, 0xf7, + 0x91, 0xfc, 0x36, 0x18, 0x0e, 0x36, 0x09, 0xe0, + 0x30, 0x1c, 0x06, 0xf0, 0xf5, 0xfa, 0x00, 0x28, + 0x04, 0xd0, 0x23, 0x21, 0x86, 0x20, 0xf4, 0xf7, + 0x33, 0xfe, 0x03, 0xe0, 0xf6, 0xf7, 0x34, 0xfb, + 0x00, 0x28, 0xf1, 0xd0, 0x3c, 0x00, 0x48, 0xc6, + 0x00, 0x00, 0x12, 0x48, 0x13, 0x49, 0x3c, 0x38, + 0x00, 0x78, 0x08, 0x72, 0x20, 0x1c, 0xf4, 0xf7, + 0xa2, 0xfa, 0x0e, 0x4e, 0x71, 0x59, 0x08, 0x71, + 0x03, 0x98, 0x00, 0x28, 0x01, 0xd0, 0x01, 0x21, + 0x79, 0x70, 0x09, 0x48, 0x00, 0x88, 0x01, 0x99, + 0x06, 0xf0, 0xbd, 0xfb, 0x02, 0x98, 0xb8, 0x70, + 0x09, 0x49, 0x49, 0x79, 0x04, 0x98, 0x88, 0x42, + 0x03, 0xd0, 0x24, 0x21, 0x86, 0x20, 0x3c, 0x00, + 0x84, 0xc6, 0x00, 0x00, 0xf4, 0xf7, 0x0e, 0xfe, + 0x05, 0xb0, 0xf0, 0xbd, 0x00, 0x50, 0x07, 0x00, + 0xd0, 0x79, 0x01, 0x00, 0x10, 0x7b, 0x01, 0x00, + 0x80, 0x80, 0x07, 0x00, 0x50, 0x80, 0x07, 0x00, + 0xb0, 0xb5, 0x0d, 0x1c, 0x04, 0x1c, 0x05, 0x28, + 0x01, 0xd3, 0xf4, 0xf7, 0x29, 0xfe, 0x05, 0x2d, + 0x01, 0xd3, 0xf4, 0xf7, 0x25, 0xfe, 0x0b, 0x4a, + 0xa8, 0x00, 0x11, 0x58, 0xa0, 0x00, 0x10, 0x58, + 0x3c, 0x00, 0xc0, 0xc6, 0x00, 0x00, 0x0e, 0xc9, + 0x0e, 0xc0, 0x06, 0x21, 0x06, 0x22, 0x06, 0x48, + 0x69, 0x43, 0x2a, 0x38, 0x09, 0x18, 0x62, 0x43, + 0x10, 0x18, 0x06, 0x22, 0xf3, 0xf7, 0x0f, 0xff, + 0x02, 0x48, 0x30, 0x38, 0x41, 0x5d, 0x01, 0x55, + 0xb0, 0xbd, 0x10, 0x7b, 0x01, 0x00, 0xb0, 0xb5, + 0x04, 0x1c, 0x0e, 0x48, 0x0d, 0x1c, 0x80, 0x78, + 0x01, 0x21, 0xa1, 0x40, 0x08, 0x40, 0x03, 0xd0, + 0x01, 0x21, 0x3c, 0x00, 0xfc, 0xc6, 0x00, 0x00, + 0x86, 0x20, 0xf4, 0xf7, 0xd1, 0xfd, 0x06, 0x21, + 0x06, 0x22, 0x09, 0x48, 0x69, 0x43, 0x09, 0x18, + 0x62, 0x43, 0x10, 0x18, 0x06, 0x22, 0xf3, 0xf7, + 0xf1, 0xfe, 0x20, 0x1c, 0xf4, 0xf7, 0x40, 0xfa, + 0x03, 0x4a, 0xa1, 0x00, 0x2a, 0x32, 0x51, 0x58, + 0x08, 0x71, 0xb0, 0xbd, 0x00, 0x50, 0x07, 0x00, + 0xe6, 0x7a, 0x01, 0x00, 0x03, 0x49, 0x80, 0xb5, + 0x00, 0x20, 0x48, 0x60, 0x3c, 0x00, 0x38, 0xc7, + 0x00, 0x00, 0x07, 0xf0, 0x32, 0xf9, 0x80, 0xbd, + 0x00, 0x00, 0xd4, 0x7a, 0x01, 0x00, 0x10, 0xb5, + 0x04, 0x1c, 0x05, 0x28, 0x01, 0xd3, 0xf4, 0xf7, + 0xd8, 0xfd, 0x07, 0x49, 0x08, 0x7a, 0x07, 0x4a, + 0x10, 0x70, 0x01, 0x20, 0x08, 0x72, 0xfe, 0xf7, + 0xf4, 0xfb, 0x04, 0x4a, 0x04, 0x30, 0xa1, 0x00, + 0x3c, 0x32, 0x51, 0x58, 0x08, 0x71, 0x10, 0xbd, + 0x00, 0x00, 0x80, 0x80, 0x07, 0x00, 0x3c, 0x00, + 0x74, 0xc7, 0x00, 0x00, 0xd4, 0x7a, 0x01, 0x00, + 0x03, 0x49, 0x80, 0xb5, 0x01, 0x20, 0x48, 0x60, + 0x07, 0xf0, 0x0e, 0xf9, 0x80, 0xbd, 0x00, 0x00, + 0xd4, 0x7a, 0x01, 0x00, 0x10, 0xb5, 0x04, 0x1c, + 0x05, 0x28, 0x01, 0xd3, 0xf4, 0xf7, 0xb4, 0xfd, + 0x20, 0x1c, 0xf5, 0xf7, 0x8f, 0xfe, 0x00, 0x21, + 0x20, 0x1c, 0xfb, 0xf7, 0x31, 0xfd, 0x01, 0x21, + 0x00, 0x28, 0x00, 0xd0, 0x01, 0x1c, 0x09, 0x04, + 0x3c, 0x00, 0xb0, 0xc7, 0x00, 0x00, 0x09, 0x0c, + 0x20, 0x1c, 0x04, 0xf0, 0x22, 0xfa, 0x10, 0xbd, + 0x00, 0x00, 0x06, 0x49, 0x01, 0x20, 0x05, 0x4b, + 0x88, 0x60, 0x00, 0x20, 0x3c, 0x33, 0x00, 0x21, + 0x82, 0x00, 0x9a, 0x58, 0x11, 0x70, 0x01, 0x30, + 0x05, 0x28, 0xf9, 0xdb, 0x70, 0x47, 0xd4, 0x7a, + 0x01, 0x00, 0x0f, 0x49, 0x38, 0xb5, 0x00, 0x20, + 0x88, 0x60, 0x0e, 0x48, 0x01, 0x1c, 0x20, 0x31, + 0x8a, 0x79, 0x3c, 0x00, 0xec, 0xc7, 0x00, 0x00, + 0x00, 0xab, 0x1a, 0x70, 0xc9, 0x79, 0x0a, 0x4c, + 0x09, 0x4d, 0x59, 0x70, 0x0c, 0x34, 0x3c, 0x35, + 0x00, 0x21, 0x03, 0x22, 0x63, 0x5c, 0x00, 0x2b, + 0x02, 0xd0, 0x8b, 0x00, 0xeb, 0x58, 0x1a, 0x70, + 0x01, 0x31, 0x05, 0x29, 0xf6, 0xdb, 0x00, 0xab, + 0x19, 0x88, 0xc1, 0x84, 0x38, 0xbd, 0x00, 0x00, + 0xd4, 0x7a, 0x01, 0x00, 0x00, 0x10, 0x07, 0x00, + 0xff, 0xb5, 0x14, 0x4f, 0x3c, 0x00, 0x28, 0xc8, + 0x00, 0x00, 0x04, 0x1c, 0xbe, 0x79, 0x0d, 0x1c, + 0x81, 0xb0, 0x0f, 0x20, 0x00, 0xf0, 0xb9, 0xf8, + 0x2a, 0x1c, 0x10, 0x4d, 0x00, 0x90, 0x21, 0x1c, + 0x28, 0x1c, 0xf4, 0xf7, 0xde, 0xfc, 0x21, 0x1c, + 0xa8, 0x1d, 0x03, 0x9a, 0xf4, 0xf7, 0xd9, 0xfc, + 0x21, 0x1c, 0x28, 0x1c, 0x0c, 0x30, 0x04, 0x9a, + 0xf4, 0xf7, 0xd3, 0xfc, 0x21, 0x1c, 0x28, 0x1c, + 0x12, 0x30, 0x0a, 0x9a, 0xf4, 0xf7, 0x3c, 0x00, + 0x64, 0xc8, 0x00, 0x00, 0xcd, 0xfc, 0x07, 0xf0, + 0x9b, 0xf8, 0x00, 0x98, 0x00, 0xf0, 0x76, 0xf8, + 0xbe, 0x71, 0x05, 0xb0, 0xf0, 0xbd, 0x00, 0x00, + 0x20, 0x10, 0x07, 0x00, 0xe6, 0x7a, 0x01, 0x00, + 0x10, 0xb5, 0x00, 0x20, 0xf6, 0xf7, 0x26, 0xf8, + 0x07, 0x49, 0x88, 0x78, 0x00, 0x09, 0x00, 0x01, + 0x88, 0x70, 0x00, 0x24, 0x20, 0x1c, 0xf5, 0xf7, + 0x11, 0xfe, 0x01, 0x34, 0x24, 0x06, 0x24, 0x0e, + 0x3c, 0x00, 0xa0, 0xc8, 0x00, 0x00, 0x04, 0x2c, + 0xf7, 0xd3, 0x10, 0xbd, 0x00, 0x00, 0x00, 0x50, + 0x07, 0x00, 0x80, 0xb5, 0x02, 0xf0, 0xe3, 0xfb, + 0x03, 0x48, 0x81, 0x78, 0x0f, 0x22, 0x11, 0x43, + 0x81, 0x70, 0x80, 0xbd, 0x00, 0x00, 0x00, 0x50, + 0x07, 0x00, 0xf8, 0xb5, 0x0d, 0x1c, 0x04, 0x1c, + 0x05, 0x28, 0x01, 0xd3, 0xf4, 0xf7, 0x17, 0xfd, + 0xa6, 0x00, 0x00, 0x2d, 0x11, 0x4f, 0x07, 0xd1, + 0xb8, 0x59, 0x3c, 0x00, 0xdc, 0xc8, 0x00, 0x00, + 0x81, 0x68, 0x00, 0x29, 0x0e, 0xd1, 0x40, 0x78, + 0x00, 0x28, 0x0b, 0xd0, 0x02, 0xe0, 0xff, 0x35, + 0x2d, 0x06, 0x2d, 0x0e, 0x29, 0x1c, 0x20, 0x1c, + 0xfb, 0xf7, 0x88, 0xfc, 0x01, 0x1c, 0x20, 0x1c, + 0x04, 0xf0, 0x7e, 0xf9, 0x06, 0x49, 0x01, 0x20, + 0x30, 0x39, 0x08, 0x55, 0x04, 0x48, 0x3c, 0x38, + 0x80, 0x68, 0x00, 0x28, 0x02, 0xd1, 0xb9, 0x59, + 0x03, 0x20, 0x08, 0x70, 0x3c, 0x00, 0x18, 0xc9, + 0x00, 0x00, 0xf8, 0xbd, 0x00, 0x00, 0x10, 0x7b, + 0x01, 0x00, 0x80, 0xb5, 0x04, 0xf0, 0xcd, 0xf9, + 0x80, 0xbd, 0x10, 0xb5, 0x04, 0x1c, 0x05, 0x28, + 0x01, 0xd3, 0xf4, 0xf7, 0xe6, 0xfc, 0x20, 0x1c, + 0xf5, 0xf7, 0xc1, 0xfd, 0x00, 0x20, 0x05, 0x4a, + 0xa1, 0x00, 0x51, 0x58, 0x88, 0x60, 0x04, 0x49, + 0x88, 0x78, 0x01, 0x22, 0xa2, 0x40, 0x10, 0x43, + 0x88, 0x70, 0x10, 0xbd, 0x00, 0x00, 0x3c, 0x00, + 0x54, 0xc9, 0x00, 0x00, 0x10, 0x7b, 0x01, 0x00, + 0x00, 0x50, 0x07, 0x00, 0x02, 0x4a, 0x91, 0x78, + 0x08, 0x43, 0x90, 0x70, 0x70, 0x47, 0x00, 0x00, + 0x00, 0x50, 0x07, 0x00, 0xf8, 0xb5, 0x0c, 0x4f, + 0xbe, 0x79, 0x0f, 0x20, 0x00, 0xf0, 0x18, 0xf8, + 0x05, 0x1c, 0x00, 0x24, 0x20, 0x1c, 0xf4, 0xf7, + 0x0d, 0xf9, 0x08, 0x4a, 0xa1, 0x00, 0x51, 0x58, + 0x08, 0x71, 0x01, 0x34, 0x24, 0x06, 0x24, 0x0e, + 0x3c, 0x00, 0x90, 0xc9, 0x00, 0x00, 0x04, 0x2c, + 0xf3, 0xd3, 0x28, 0x1c, 0xff, 0xf7, 0xe1, 0xff, + 0xbe, 0x71, 0xf8, 0xbd, 0x00, 0x00, 0x20, 0x10, + 0x07, 0x00, 0x10, 0x7b, 0x01, 0x00, 0xb0, 0xb5, + 0x08, 0x49, 0x8d, 0x78, 0x8a, 0x78, 0x05, 0x40, + 0x82, 0x43, 0x8a, 0x70, 0x06, 0xf0, 0xf9, 0xf9, + 0x04, 0x1c, 0x0a, 0x34, 0x20, 0x1c, 0x06, 0xf0, + 0x34, 0xf9, 0x00, 0x28, 0xfa, 0xd0, 0x28, 0x1c, + 0xb0, 0xbd, 0x3c, 0x00, 0xcc, 0xc9, 0x00, 0x00, + 0x00, 0x50, 0x07, 0x00, 0x01, 0x49, 0x0a, 0x20, + 0x08, 0x81, 0x70, 0x47, 0x38, 0x7b, 0x01, 0x00, + 0xf8, 0xb5, 0x10, 0x48, 0x04, 0x26, 0x04, 0x1c, + 0xe0, 0x34, 0x05, 0x1c, 0x38, 0x3d, 0x00, 0x27, + 0x20, 0x1c, 0x1c, 0x30, 0xe4, 0x60, 0xa0, 0x61, + 0x27, 0x61, 0x0b, 0x48, 0xa6, 0x82, 0xe0, 0x61, + 0x27, 0x62, 0xa7, 0x62, 0x06, 0x20, 0xa0, 0x84, + 0x20, 0x1c, 0xfe, 0xf7, 0x3c, 0x00, 0x08, 0xca, + 0x00, 0x00, 0x87, 0xfc, 0x20, 0x1c, 0x0c, 0x30, + 0xf6, 0xf7, 0xb7, 0xf9, 0x05, 0x49, 0x38, 0x3c, + 0xac, 0x42, 0x08, 0x80, 0xe7, 0xd1, 0xf8, 0xbd, + 0x00, 0x00, 0xd4, 0xe4, 0x01, 0x00, 0x12, 0x61, + 0x01, 0x00, 0x48, 0x7b, 0x01, 0x00, 0xf7, 0xb5, + 0x05, 0x1c, 0x0c, 0x23, 0x0f, 0x1c, 0x12, 0x49, + 0x58, 0x43, 0x44, 0x18, 0x20, 0x88, 0x06, 0xf0, + 0xea, 0xf9, 0xa0, 0x78, 0x01, 0x28, 0x3c, 0x00, + 0x44, 0xca, 0x00, 0x00, 0x1a, 0xd1, 0x66, 0x68, + 0x02, 0x2f, 0x05, 0xd1, 0x5c, 0x20, 0x80, 0x5b, + 0x02, 0x99, 0x00, 0x09, 0x88, 0x42, 0x11, 0xd1, + 0x28, 0x1c, 0xfe, 0xf7, 0xfb, 0xff, 0x30, 0x1c, + 0xf9, 0xf7, 0xfa, 0xfd, 0x04, 0x20, 0xa0, 0x70, + 0x39, 0x1c, 0x28, 0x1c, 0xfb, 0xf7, 0xf4, 0xf8, + 0x03, 0x4a, 0xe8, 0x00, 0x3c, 0x32, 0x11, 0x58, + 0x01, 0x31, 0x11, 0x50, 0xfe, 0xbd, 0x00, 0x00, + 0x3c, 0x00, 0x80, 0xca, 0x00, 0x00, 0x60, 0x7b, + 0x01, 0x00, 0x01, 0x20, 0x06, 0x4a, 0x00, 0x21, + 0x0c, 0x23, 0x4b, 0x43, 0x9b, 0x18, 0x9b, 0x78, + 0x00, 0x2b, 0x00, 0xd0, 0x00, 0x20, 0x01, 0x31, + 0x04, 0x29, 0xf5, 0xdb, 0x70, 0x47, 0x60, 0x7b, + 0x01, 0x00, 0x70, 0xb5, 0x04, 0x1c, 0xff, 0xf7, + 0xea, 0xfc, 0x00, 0x28, 0x03, 0xd1, 0x20, 0x21, + 0x0c, 0x20, 0xf4, 0xf7, 0xf6, 0xfb, 0x26, 0x1c, + 0x60, 0x36, 0x3c, 0x00, 0xbc, 0xca, 0x00, 0x00, + 0x00, 0x21, 0xf1, 0x71, 0xe1, 0x64, 0x60, 0x6b, + 0x25, 0x1c, 0x40, 0x35, 0x00, 0x28, 0x31, 0xd0, + 0xff, 0xf7, 0x04, 0xf9, 0x01, 0x22, 0x12, 0x03, + 0x00, 0x28, 0x20, 0x69, 0x01, 0x88, 0x01, 0xd0, + 0x91, 0x43, 0x00, 0xe0, 0x11, 0x43, 0x01, 0x80, + 0x20, 0x69, 0x01, 0x22, 0x00, 0x88, 0xd2, 0x02, + 0x28, 0x83, 0x20, 0x1c, 0x58, 0x30, 0x01, 0x88, + 0x91, 0x43, 0x01, 0x80, 0x3c, 0x00, 0xf8, 0xca, + 0x00, 0x00, 0xa3, 0x6b, 0x52, 0x08, 0x00, 0x2b, + 0x10, 0xd0, 0x91, 0x43, 0x01, 0x80, 0x28, 0x8b, + 0x00, 0x07, 0x80, 0x0f, 0x01, 0x28, 0x15, 0xd0, + 0x2e, 0x20, 0x01, 0x5d, 0x20, 0x69, 0x04, 0x30, + 0xf8, 0xf7, 0x41, 0xfd, 0x61, 0x6a, 0xfe, 0xf7, + 0xa8, 0xf9, 0x04, 0xe0, 0x11, 0x43, 0x01, 0x80, + 0x20, 0x1c, 0xfb, 0xf7, 0xcc, 0xfb, 0x68, 0x83, + 0x04, 0xe0, 0x20, 0x69, 0x41, 0x80, 0x3c, 0x00, + 0x34, 0xcb, 0x00, 0x00, 0xa8, 0x8b, 0x21, 0x69, + 0xc8, 0x82, 0xe0, 0x68, 0xf6, 0xf7, 0x20, 0xf9, + 0x30, 0x80, 0x60, 0x6d, 0x00, 0x28, 0x04, 0xd0, + 0x00, 0x22, 0x03, 0x21, 0x70, 0x7a, 0xfe, 0xf7, + 0x0d, 0xff, 0x20, 0x1c, 0x00, 0xf0, 0xb6, 0xf9, + 0x70, 0x7a, 0x06, 0xf0, 0x45, 0xf8, 0x70, 0xbd, + 0xb0, 0xb5, 0x00, 0x24, 0x06, 0xf0, 0x22, 0xf9, + 0x09, 0x4a, 0x00, 0x21, 0x0c, 0x23, 0x4b, 0x43, + 0x3c, 0x00, 0x70, 0xcb, 0x00, 0x00, 0x9d, 0x18, + 0x6b, 0x68, 0x5b, 0x6c, 0xad, 0x78, 0xc3, 0x1a, + 0x01, 0x2d, 0x02, 0xd1, 0xa3, 0x42, 0x00, 0xdd, + 0x1c, 0x1c, 0x01, 0x31, 0x05, 0x29, 0xf0, 0xd3, + 0x20, 0x1c, 0xb0, 0xbd, 0x00, 0x00, 0x60, 0x7b, + 0x01, 0x00, 0xb0, 0xb5, 0x04, 0x1c, 0x06, 0xf0, + 0xa8, 0xfe, 0x0c, 0x20, 0x08, 0x49, 0x60, 0x43, + 0x45, 0x18, 0x28, 0x88, 0x06, 0xf0, 0x35, 0xf9, + 0x68, 0x68, 0x3c, 0x00, 0xac, 0xcb, 0x00, 0x00, + 0x00, 0x28, 0x06, 0xd0, 0x20, 0x30, 0x00, 0x7b, + 0x01, 0x28, 0x02, 0xd1, 0x20, 0x1c, 0xff, 0xf7, + 0xa3, 0xfa, 0xb0, 0xbd, 0x60, 0x7b, 0x01, 0x00, + 0xff, 0xb5, 0x85, 0xb0, 0x0f, 0xae, 0x60, 0xce, + 0x38, 0x20, 0x1e, 0x49, 0x70, 0x43, 0x17, 0x1c, + 0x44, 0x18, 0xff, 0xf7, 0x7f, 0xf8, 0x01, 0x22, + 0x12, 0x03, 0x00, 0x28, 0x03, 0xd0, 0x20, 0x88, + 0x90, 0x43, 0x20, 0x80, 0x3c, 0x00, 0xe8, 0xcb, + 0x00, 0x00, 0x02, 0xe0, 0x21, 0x88, 0x11, 0x43, + 0x21, 0x80, 0x11, 0x98, 0x39, 0x1c, 0xe0, 0x62, + 0x05, 0x98, 0xf8, 0xf7, 0xd0, 0xfc, 0x01, 0x1c, + 0x2b, 0x1c, 0x38, 0x1c, 0x06, 0x9a, 0xfe, 0xf7, + 0x20, 0xf9, 0x60, 0x80, 0x06, 0x22, 0x20, 0x1d, + 0x0f, 0x49, 0xf3, 0xf7, 0x72, 0xfc, 0x23, 0x1c, + 0x08, 0x98, 0x30, 0x33, 0x18, 0x70, 0x0e, 0x98, + 0x0c, 0x49, 0x58, 0x70, 0x65, 0x63, 0x3c, 0x00, + 0x24, 0xcc, 0x00, 0x00, 0x00, 0x20, 0x02, 0x90, + 0x01, 0x22, 0x04, 0x92, 0x09, 0x48, 0x03, 0x91, + 0x5a, 0x78, 0x01, 0x88, 0x01, 0x92, 0x00, 0x91, + 0x19, 0x78, 0x24, 0x3b, 0x30, 0x1c, 0x62, 0x6b, + 0xfe, 0xf7, 0xa8, 0xfe, 0x09, 0xb0, 0xf0, 0xbd, + 0xd4, 0xe4, 0x01, 0x00, 0x12, 0x61, 0x01, 0x00, + 0x5d, 0x4e, 0x00, 0x00, 0x48, 0x7b, 0x01, 0x00, + 0xff, 0xb5, 0x87, 0xb0, 0x10, 0x98, 0x12, 0xaf, + 0x3c, 0x00, 0x60, 0xcc, 0x00, 0x00, 0x8c, 0x46, + 0xa2, 0xcf, 0x4c, 0x23, 0x30, 0x4c, 0x6b, 0x43, + 0x1c, 0x19, 0x16, 0x1c, 0x15, 0x9a, 0x27, 0x85, + 0x27, 0x1c, 0x30, 0x37, 0x06, 0x97, 0x05, 0x97, + 0x00, 0x23, 0x3b, 0x73, 0x05, 0x9f, 0x78, 0x73, + 0x11, 0x98, 0x27, 0x1c, 0x60, 0x64, 0x61, 0x60, + 0x22, 0x60, 0x40, 0x37, 0x3e, 0x70, 0x61, 0x46, + 0x61, 0x87, 0x07, 0x98, 0x31, 0x1c, 0xf8, 0xf7, + 0x80, 0xfc, 0x3c, 0x00, 0x9c, 0xcc, 0x00, 0x00, + 0x05, 0x99, 0xc8, 0x73, 0x0a, 0x98, 0x78, 0x70, + 0x30, 0x1c, 0xfe, 0xf7, 0x73, 0xf8, 0x00, 0x28, + 0x01, 0xd0, 0x01, 0x20, 0x00, 0xe0, 0x00, 0x20, + 0x41, 0x00, 0x02, 0x20, 0x01, 0x40, 0x11, 0x9a, + 0x01, 0x20, 0x00, 0x2a, 0x00, 0xd1, 0x00, 0x20, + 0x08, 0x43, 0x38, 0x72, 0x20, 0x1c, 0x2e, 0x30, + 0x07, 0x99, 0xfd, 0xf7, 0xcf, 0xff, 0x28, 0x1c, + 0x04, 0xf0, 0xae, 0xf8, 0x3c, 0x00, 0xd8, 0xcc, + 0x00, 0x00, 0xfe, 0xf7, 0xfe, 0xff, 0x4c, 0x22, + 0x12, 0x4b, 0x6a, 0x43, 0xd2, 0x18, 0x01, 0x21, + 0x09, 0x03, 0x2a, 0x32, 0x00, 0x28, 0x04, 0xd0, + 0x10, 0x1c, 0x12, 0x88, 0x8a, 0x43, 0x02, 0x80, + 0x02, 0xe0, 0x10, 0x88, 0x08, 0x43, 0x10, 0x80, + 0x0b, 0x49, 0x00, 0x20, 0x03, 0x91, 0x06, 0x99, + 0x02, 0x90, 0x00, 0x22, 0x04, 0x92, 0x08, 0x48, + 0x0a, 0x7b, 0x41, 0x88, 0x23, 0x1c, 0x3c, 0x00, + 0x14, 0xcd, 0x00, 0x00, 0x01, 0x92, 0x00, 0x91, + 0x79, 0x78, 0x08, 0x33, 0x28, 0x1c, 0x62, 0x68, + 0xfe, 0xf7, 0x38, 0xfe, 0x0b, 0xb0, 0xf0, 0xbd, + 0x58, 0xe3, 0x01, 0x00, 0x75, 0x4f, 0x00, 0x00, + 0x3c, 0x7c, 0x01, 0x00, 0xb0, 0xb5, 0x0c, 0x1c, + 0x01, 0x28, 0x27, 0xd0, 0x80, 0x28, 0x30, 0xd1, + 0xe0, 0x6c, 0x00, 0x28, 0x08, 0xd0, 0x69, 0x20, + 0x00, 0x5d, 0x18, 0x49, 0xc0, 0x00, 0x40, 0x18, + 0x3c, 0x00, 0x50, 0xcd, 0x00, 0x00, 0x04, 0x30, + 0x01, 0x68, 0x01, 0x31, 0x01, 0x60, 0x20, 0x1c, + 0xff, 0xf7, 0xe9, 0xfb, 0x13, 0x4d, 0x50, 0x3d, + 0xe8, 0x68, 0x00, 0x28, 0x05, 0xd0, 0x2e, 0x20, + 0x00, 0x5d, 0xfe, 0xf7, 0x10, 0xf8, 0x02, 0xf0, + 0x42, 0xfe, 0x20, 0x1c, 0x61, 0x68, 0xf3, 0xf7, + 0x2f, 0xfb, 0x40, 0x34, 0x60, 0x78, 0x00, 0x28, + 0x02, 0xd1, 0x06, 0xf0, 0x12, 0xf8, 0xa8, 0x60, + 0xb0, 0xbd, 0x3c, 0x00, 0x8c, 0xcd, 0x00, 0x00, + 0x20, 0x06, 0x00, 0x0e, 0x81, 0x28, 0xfa, 0xd1, + 0x22, 0x0c, 0x20, 0x04, 0x00, 0x0e, 0x02, 0x21, + 0xfe, 0xf7, 0xe6, 0xfd, 0xb0, 0xbd, 0x0a, 0x21, + 0x0c, 0x20, 0xf4, 0xf7, 0x7d, 0xfa, 0xb0, 0xbd, + 0x9c, 0x7b, 0x01, 0x00, 0xf8, 0xb5, 0x18, 0x4e, + 0x18, 0x4f, 0x05, 0x1c, 0x34, 0x79, 0xb8, 0x79, + 0x00, 0x90, 0x20, 0x1c, 0xf5, 0xf7, 0x7c, 0xff, + 0x00, 0x28, 0x06, 0xd0, 0x3c, 0x00, 0xc8, 0xcd, + 0x00, 0x00, 0x12, 0x48, 0x38, 0x38, 0x40, 0x68, + 0x85, 0x42, 0x01, 0xd1, 0x00, 0x2d, 0x03, 0xd1, + 0x10, 0x21, 0x86, 0x20, 0xf4, 0xf7, 0x63, 0xfa, + 0x0d, 0x49, 0x00, 0x20, 0x38, 0x39, 0x48, 0x60, + 0x04, 0x21, 0x20, 0x1c, 0xff, 0xf7, 0x59, 0xfc, + 0x04, 0x21, 0x20, 0x1c, 0xf5, 0xf7, 0xeb, 0xfe, + 0x0c, 0x21, 0x06, 0x4a, 0x61, 0x43, 0x30, 0x3a, + 0x89, 0x18, 0x0c, 0x71, 0x04, 0x20, 0x3c, 0x00, + 0x04, 0xce, 0x00, 0x00, 0x30, 0x71, 0x00, 0x98, + 0xb8, 0x71, 0x0f, 0x20, 0xff, 0xf7, 0xa6, 0xfd, + 0xf8, 0xbd, 0x00, 0x00, 0xa4, 0x7a, 0x01, 0x00, + 0x20, 0x10, 0x07, 0x00, 0xf8, 0xb5, 0x04, 0x1c, + 0x0f, 0x20, 0xff, 0xf7, 0xc1, 0xfd, 0xf5, 0xf7, + 0x3b, 0xff, 0x01, 0x25, 0x00, 0x28, 0x00, 0xd0, + 0x00, 0x25, 0x16, 0x4e, 0xb0, 0x79, 0x16, 0x4f, + 0x00, 0x90, 0x38, 0x79, 0x04, 0x28, 0x01, 0xd1, + 0x3c, 0x00, 0x40, 0xce, 0x00, 0x00, 0x00, 0x2c, + 0x03, 0xd1, 0x11, 0x21, 0x86, 0x20, 0xf4, 0xf7, + 0x2c, 0xfa, 0x10, 0x48, 0x29, 0x06, 0x38, 0x38, + 0x44, 0x60, 0x09, 0x0e, 0x0c, 0x1c, 0x04, 0x20, + 0xff, 0xf7, 0x21, 0xfc, 0x03, 0x21, 0x20, 0x1c, + 0xff, 0xf7, 0x41, 0xfc, 0x21, 0x1c, 0x04, 0x20, + 0xf5, 0xf7, 0xaf, 0xfe, 0x0c, 0x21, 0x07, 0x4a, + 0x69, 0x43, 0x04, 0x20, 0x30, 0x3a, 0x89, 0x18, + 0x08, 0x71, 0x3c, 0x00, 0x7c, 0xce, 0x00, 0x00, + 0x3c, 0x71, 0x00, 0x98, 0xb0, 0x71, 0x20, 0x1c, + 0xff, 0xf7, 0x50, 0xfd, 0x04, 0x20, 0xf8, 0xbd, + 0x20, 0x10, 0x07, 0x00, 0xa4, 0x7a, 0x01, 0x00, + 0x0c, 0x23, 0x02, 0x49, 0x58, 0x43, 0x40, 0x18, + 0x80, 0x68, 0x70, 0x47, 0x74, 0x7a, 0x01, 0x00, + 0x60, 0x30, 0xc1, 0x79, 0x80, 0x79, 0x81, 0x42, + 0x01, 0xd9, 0x01, 0x20, 0x70, 0x47, 0x00, 0x20, + 0x70, 0x47, 0x00, 0x00, 0x3c, 0x00, 0xb8, 0xce, + 0x00, 0x00, 0x01, 0x48, 0x80, 0x68, 0x70, 0x47, + 0x00, 0x00, 0x4c, 0x7b, 0x01, 0x00, 0x38, 0xb5, + 0x69, 0x21, 0x09, 0x5c, 0x18, 0x23, 0x10, 0x4a, + 0x59, 0x43, 0x89, 0x18, 0x8a, 0x68, 0x01, 0x32, + 0x8a, 0x60, 0x4b, 0x69, 0xd2, 0x1a, 0xcb, 0x68, + 0x93, 0x42, 0x00, 0xd2, 0xca, 0x60, 0x00, 0x22, + 0x0b, 0x4c, 0x02, 0x60, 0x22, 0x1c, 0x20, 0x32, + 0x95, 0x79, 0x00, 0xab, 0x1d, 0x70, 0x3c, 0x00, + 0xf4, 0xce, 0x00, 0x00, 0xd2, 0x79, 0x5a, 0x70, + 0x0a, 0x68, 0x00, 0x2a, 0x01, 0xd1, 0x48, 0x60, + 0x00, 0xe0, 0x10, 0x60, 0x00, 0xab, 0x08, 0x60, + 0x18, 0x88, 0xe0, 0x84, 0x38, 0xbd, 0x00, 0x00, + 0xc4, 0x7b, 0x01, 0x00, 0x00, 0x10, 0x07, 0x00, + 0x18, 0x23, 0x0a, 0x49, 0x58, 0x43, 0x41, 0x18, + 0x08, 0x69, 0x01, 0x30, 0x08, 0x61, 0x48, 0x68, + 0x00, 0x28, 0x09, 0xd0, 0x48, 0x69, 0x01, 0x30, + 0x3c, 0x00, 0x30, 0xcf, 0x00, 0x00, 0x48, 0x61, + 0x48, 0x68, 0x02, 0x68, 0x4a, 0x60, 0x00, 0x2a, + 0x00, 0xd1, 0x0a, 0x60, 0x70, 0x47, 0x00, 0x20, + 0x70, 0x47, 0xc4, 0x7b, 0x01, 0x00, 0xf8, 0xb5, + 0x12, 0x4e, 0x10, 0x4d, 0x0f, 0x4c, 0x0a, 0x27, + 0x21, 0x1c, 0x00, 0x20, 0xe0, 0x60, 0x2a, 0x31, + 0x22, 0x1c, 0x18, 0x32, 0xa1, 0x60, 0x62, 0x61, + 0x27, 0x82, 0x0c, 0x4a, 0xe0, 0x61, 0xa2, 0x61, + 0x60, 0x62, 0x3c, 0x00, 0x6c, 0xcf, 0x00, 0x00, + 0x06, 0x20, 0x20, 0x84, 0x08, 0x1c, 0xfe, 0xf7, + 0xd7, 0xf9, 0x20, 0x1c, 0x08, 0x30, 0xf5, 0xf7, + 0x01, 0xff, 0x4c, 0x3c, 0xac, 0x42, 0x70, 0x80, + 0xe5, 0xd1, 0xff, 0x20, 0x30, 0x70, 0xf8, 0xbd, + 0x88, 0xe4, 0x01, 0x00, 0x0c, 0xe3, 0x01, 0x00, + 0x3c, 0x7c, 0x01, 0x00, 0x12, 0x61, 0x01, 0x00, + 0xf8, 0xb5, 0x04, 0x1c, 0x0b, 0x48, 0x0e, 0x1c, + 0x17, 0x1c, 0x44, 0x70, 0x3c, 0x00, 0xa8, 0xcf, + 0x00, 0x00, 0x05, 0xf0, 0x00, 0xff, 0x05, 0x1c, + 0x39, 0x1c, 0x30, 0x1c, 0xfd, 0xf7, 0xab, 0xff, + 0x0c, 0x21, 0x05, 0x4a, 0x28, 0x18, 0x0a, 0x30, + 0x61, 0x43, 0x08, 0x32, 0x50, 0x50, 0x03, 0x48, + 0x89, 0x18, 0x00, 0x68, 0x88, 0x60, 0xf8, 0xbd, + 0x00, 0x00, 0x6c, 0x7a, 0x01, 0x00, 0x78, 0x6e, + 0x01, 0x00, 0x70, 0xb5, 0x0b, 0x4e, 0x05, 0x1c, + 0x70, 0x78, 0xff, 0x28, 0x0f, 0xd0, 0x3c, 0x00, + 0xe4, 0xcf, 0x00, 0x00, 0x0c, 0x23, 0x08, 0x4c, + 0x58, 0x43, 0x08, 0x34, 0x20, 0x58, 0x05, 0xf0, + 0x1d, 0xfe, 0x00, 0x28, 0x06, 0xd1, 0x70, 0x78, + 0x0c, 0x23, 0x58, 0x43, 0x00, 0x19, 0x81, 0x68, + 0x29, 0x43, 0x81, 0x60, 0x70, 0xbd, 0x00, 0x00, + 0x6c, 0x7a, 0x01, 0x00, 0x80, 0xb5, 0x30, 0x21, + 0x01, 0x48, 0xf3, 0xf7, 0x43, 0xfa, 0x80, 0xbd, + 0xec, 0xe5, 0x01, 0x00, 0x10, 0xb5, 0x05, 0xf0, + 0x3c, 0x00, 0x20, 0xd0, 0x00, 0x00, 0xc5, 0xfe, + 0x0a, 0x49, 0x44, 0x18, 0x0c, 0xe0, 0x20, 0x1c, + 0x05, 0xf0, 0xf7, 0xfd, 0x00, 0x28, 0x07, 0xd0, + 0xf5, 0xf7, 0x51, 0xfe, 0x00, 0x28, 0x03, 0xd0, + 0x13, 0x21, 0x86, 0x20, 0xf4, 0xf7, 0x31, 0xf9, + 0xf5, 0xf7, 0x49, 0xfe, 0x00, 0x28, 0xee, 0xd1, + 0x10, 0xbd, 0xb0, 0x36, 0x00, 0x00, 0xff, 0xb5, + 0x8b, 0xb0, 0x19, 0x9b, 0x0d, 0x1c, 0x04, 0x1c, + 0x1a, 0x20, 0x3c, 0x00, 0x5c, 0xd0, 0x00, 0x00, + 0x00, 0x2b, 0x16, 0x99, 0x00, 0xd1, 0x18, 0x20, + 0x01, 0x90, 0x14, 0x98, 0x00, 0x28, 0x27, 0xd0, + 0xff, 0x20, 0x19, 0x9b, 0x01, 0x30, 0x00, 0x2b, + 0x01, 0xd1, 0x18, 0x23, 0x00, 0xe0, 0x1a, 0x23, + 0x04, 0x33, 0x82, 0x42, 0x04, 0xd3, 0xd0, 0x1a, + 0x40, 0x08, 0x40, 0x00, 0x00, 0x04, 0x00, 0x0c, + 0x0d, 0x90, 0x6a, 0x48, 0x00, 0x88, 0xc2, 0x1a, + 0x12, 0x04, 0x12, 0x0c, 0x3c, 0x00, 0x98, 0xd0, + 0x00, 0x00, 0x04, 0x92, 0x00, 0x29, 0x08, 0xd0, + 0x89, 0x79, 0x66, 0x4a, 0x49, 0x00, 0x51, 0x5a, + 0x04, 0x9a, 0x51, 0x1a, 0x0a, 0x04, 0x12, 0x0c, + 0x04, 0x92, 0x04, 0x9a, 0x82, 0x42, 0x05, 0xd9, + 0x00, 0x20, 0x04, 0x90, 0x02, 0xe0, 0x60, 0x48, + 0x04, 0x90, 0x0d, 0x90, 0x01, 0x98, 0x01, 0x04, + 0x09, 0x0c, 0x0a, 0x91, 0x00, 0x20, 0xf4, 0xf7, + 0x84, 0xfa, 0x00, 0x90, 0x00, 0x68, 0x3c, 0x00, + 0xd4, 0xd0, 0x00, 0x00, 0x00, 0x26, 0x06, 0x90, + 0x20, 0x60, 0x00, 0x20, 0x05, 0x90, 0x0e, 0x98, + 0x00, 0x24, 0x00, 0x05, 0x00, 0x0c, 0x09, 0x90, + 0x1a, 0x98, 0x0d, 0x9f, 0x40, 0x07, 0x40, 0x0f, + 0x08, 0x90, 0x07, 0x94, 0x03, 0x95, 0x00, 0x2d, + 0x0d, 0xd0, 0x28, 0x89, 0xb8, 0x42, 0x04, 0xd8, + 0x36, 0x18, 0x3f, 0x1a, 0x07, 0xd0, 0xed, 0x68, + 0xf5, 0xe7, 0x39, 0x04, 0x09, 0x0c, 0x28, 0x1c, + 0x3c, 0x00, 0x10, 0xd1, 0x00, 0x00, 0xf4, 0xf7, + 0x38, 0xfb, 0xef, 0xe7, 0x00, 0x2e, 0x02, 0xd1, + 0x07, 0x99, 0x00, 0x29, 0x71, 0xd1, 0x27, 0x1c, + 0x6c, 0x20, 0xf4, 0xf7, 0x88, 0xfb, 0x07, 0x99, + 0x04, 0x1c, 0x00, 0x29, 0x20, 0xd1, 0x07, 0x94, + 0x00, 0x20, 0xa0, 0x61, 0x18, 0x98, 0x27, 0x1c, + 0x60, 0x60, 0x17, 0x98, 0x24, 0x37, 0xa0, 0x60, + 0x06, 0x98, 0x20, 0x61, 0x15, 0x98, 0x0f, 0xc8, + 0x0f, 0xc7, 0x3c, 0x00, 0x4c, 0xd1, 0x00, 0x00, + 0x14, 0x98, 0x5c, 0x21, 0x60, 0x63, 0x09, 0x98, + 0x08, 0x53, 0x19, 0x98, 0x69, 0x21, 0xe0, 0x63, + 0x1b, 0x98, 0x08, 0x55, 0x1c, 0x98, 0x60, 0x65, + 0x19, 0x98, 0x00, 0x28, 0x23, 0xd0, 0x08, 0x98, + 0x06, 0x99, 0x08, 0x83, 0x1f, 0xe0, 0x6c, 0x22, + 0x20, 0x1c, 0x07, 0x99, 0xf3, 0xf7, 0x1a, 0xfa, + 0x3c, 0x60, 0x01, 0x98, 0x62, 0x21, 0x30, 0x18, + 0xc8, 0x53, 0x15, 0x98, 0x3c, 0x00, 0x88, 0xd1, + 0x00, 0x00, 0x40, 0x21, 0x80, 0x7a, 0xc8, 0x55, + 0x00, 0x20, 0xb8, 0x63, 0x06, 0x98, 0x0a, 0x99, + 0xf4, 0xf7, 0x1f, 0xfa, 0xf8, 0x60, 0x02, 0x99, + 0xf4, 0xf7, 0x3b, 0xf9, 0x20, 0x1c, 0x40, 0x30, + 0x81, 0x8b, 0x05, 0x9a, 0x12, 0x07, 0x12, 0x0f, + 0x11, 0x43, 0x81, 0x83, 0x03, 0x98, 0x5e, 0x21, + 0x02, 0x90, 0x01, 0x98, 0x22, 0x4a, 0x30, 0x18, + 0x08, 0x53, 0x12, 0x68, 0x01, 0x21, 0x3c, 0x00, + 0xc4, 0xd1, 0x00, 0x00, 0x08, 0x1c, 0x00, 0x2a, + 0x00, 0xd0, 0x1b, 0x98, 0x00, 0x06, 0x04, 0x9a, + 0x00, 0x0e, 0x96, 0x42, 0x03, 0xd9, 0x2c, 0x22, + 0x11, 0x55, 0x1b, 0x49, 0x04, 0xe0, 0x15, 0x99, + 0x2c, 0x22, 0x09, 0x7a, 0x11, 0x55, 0x19, 0x49, + 0x08, 0x5c, 0x66, 0x21, 0x08, 0x55, 0x1c, 0x98, + 0x00, 0x28, 0x01, 0xd0, 0x1f, 0x20, 0x08, 0x55, + 0x00, 0x2d, 0x03, 0xd0, 0xe8, 0x68, 0x03, 0x90, + 0x3c, 0x00, 0x00, 0xd2, 0x00, 0x00, 0x00, 0x20, + 0x00, 0xe0, 0x09, 0xe0, 0xe8, 0x60, 0x05, 0x98, + 0x00, 0x26, 0x01, 0x30, 0x00, 0x04, 0x00, 0x0c, + 0x0d, 0x9f, 0x05, 0x90, 0x03, 0x9d, 0x6d, 0xe7, + 0x00, 0x98, 0xe0, 0x60, 0x02, 0x99, 0xf4, 0xf7, + 0xfa, 0xf8, 0x00, 0x20, 0x20, 0x60, 0x01, 0x21, + 0xa1, 0x63, 0x60, 0x34, 0x60, 0x80, 0x07, 0x98, + 0x0f, 0xb0, 0xf0, 0xbd, 0x00, 0x00, 0x06, 0x61, + 0x01, 0x00, 0x3c, 0x00, 0x3c, 0xd2, 0x00, 0x00, + 0x5c, 0x43, 0x01, 0x00, 0x38, 0x09, 0x00, 0x00, + 0x18, 0x67, 0x01, 0x00, 0x0e, 0x61, 0x01, 0x00, + 0x0a, 0x61, 0x01, 0x00, 0x01, 0x48, 0x00, 0x68, + 0x70, 0x47, 0x00, 0x00, 0xc4, 0x6a, 0x01, 0x00, + 0x02, 0x49, 0x09, 0x1d, 0x03, 0xc9, 0x40, 0x18, + 0x70, 0x47, 0x00, 0x00, 0xc4, 0x69, 0x01, 0x00, + 0x01, 0x48, 0x00, 0x69, 0x70, 0x47, 0x00, 0x00, + 0xc4, 0x69, 0x01, 0x00, 0x3c, 0x00, 0x78, 0xd2, + 0x00, 0x00, 0x01, 0x48, 0x40, 0x69, 0x70, 0x47, + 0x00, 0x00, 0xc4, 0x69, 0x01, 0x00, 0x01, 0x48, + 0x80, 0x69, 0x70, 0x47, 0x00, 0x00, 0xc4, 0x69, + 0x01, 0x00, 0x70, 0xb5, 0x0d, 0x4e, 0x00, 0x20, + 0x35, 0x1c, 0x40, 0x35, 0xf0, 0x63, 0x0d, 0xe0, + 0xa0, 0x68, 0xf4, 0xf7, 0x7a, 0xf9, 0xb3, 0x6d, + 0x00, 0x2b, 0x04, 0xd0, 0x00, 0x22, 0x01, 0x20, + 0x61, 0x6b, 0xf3, 0xf7, 0x95, 0xf8, 0x3c, 0x00, + 0xb4, 0xd2, 0x00, 0x00, 0x20, 0x1c, 0xf4, 0xf7, + 0x9d, 0xfa, 0x28, 0x1c, 0xfa, 0xf7, 0x42, 0xfd, + 0x04, 0x1c, 0xec, 0xd1, 0x70, 0xbd, 0x00, 0x00, + 0xc4, 0x69, 0x01, 0x00, 0xf8, 0xb5, 0x1a, 0x4f, + 0x00, 0x26, 0xf8, 0x6b, 0x00, 0x28, 0x2c, 0xd0, + 0x38, 0x1c, 0x40, 0x30, 0x00, 0x90, 0x1d, 0xe0, + 0x16, 0x48, 0xb9, 0x6b, 0x02, 0xf0, 0x5c, 0xf8, + 0x00, 0x22, 0x20, 0x1c, 0x14, 0x49, 0x03, 0xf0, + 0x3c, 0x00, 0xf0, 0xd2, 0x00, 0x00, 0x7b, 0xff, + 0x05, 0x1c, 0x04, 0xd1, 0x38, 0x6a, 0x01, 0x30, + 0x38, 0x62, 0x01, 0x36, 0x0d, 0xe0, 0xa0, 0x68, + 0xf4, 0xf7, 0x49, 0xf9, 0xbb, 0x6d, 0x00, 0x2b, + 0x04, 0xd0, 0x00, 0x22, 0x28, 0x1c, 0x61, 0x6b, + 0xf3, 0xf7, 0x64, 0xf8, 0x20, 0x1c, 0xf4, 0xf7, + 0x6c, 0xfa, 0x00, 0x98, 0xfa, 0xf7, 0x11, 0xfd, + 0x04, 0x1c, 0xdc, 0xd1, 0x07, 0x48, 0xb9, 0x6b, + 0x02, 0xf0, 0x3c, 0x00, 0x2c, 0xd3, 0x00, 0x00, + 0x25, 0xf8, 0x00, 0x20, 0xf8, 0x63, 0x30, 0x1c, + 0xf8, 0xbd, 0x00, 0x00, 0xc4, 0x69, 0x01, 0x00, + 0x34, 0x63, 0x01, 0x00, 0x11, 0x30, 0x00, 0x00, + 0xc4, 0x60, 0x01, 0x00, 0x01, 0x49, 0x01, 0x20, + 0xc8, 0x63, 0x70, 0x47, 0xc4, 0x69, 0x01, 0x00, + 0x80, 0xb5, 0x00, 0x20, 0x05, 0x4a, 0x00, 0x21, + 0x1c, 0x23, 0x43, 0x43, 0x9b, 0x18, 0x01, 0x30, + 0x04, 0x28, 0xd9, 0x66, 0x3c, 0x00, 0x68, 0xd3, + 0x00, 0x00, 0xf8, 0xdb, 0xfc, 0xf7, 0xfd, 0xfc, + 0x80, 0xbd, 0xc4, 0x69, 0x01, 0x00, 0x01, 0x49, + 0xc8, 0x64, 0x70, 0x47, 0x00, 0x00, 0xc4, 0x69, + 0x01, 0x00, 0x01, 0x49, 0x88, 0x64, 0x70, 0x47, + 0x00, 0x00, 0xc4, 0x69, 0x01, 0x00, 0xb0, 0xb5, + 0x04, 0x1c, 0x0d, 0x1c, 0x21, 0x1c, 0x02, 0x8e, + 0x80, 0x6a, 0x40, 0x31, 0xf3, 0xf7, 0x2f, 0xf8, + 0x00, 0x28, 0x16, 0xd1, 0x02, 0x21, 0x3c, 0x00, + 0xa4, 0xd3, 0x00, 0x00, 0x20, 0x1c, 0xf4, 0xf7, + 0x6f, 0xfa, 0xe2, 0x69, 0xc0, 0x00, 0x10, 0x18, + 0x82, 0x8b, 0xab, 0x88, 0x9a, 0x42, 0x04, 0xd1, + 0x82, 0x69, 0x2b, 0x68, 0x9a, 0x42, 0x08, 0xd2, + 0x01, 0xe0, 0x9a, 0x42, 0x05, 0xd2, 0x00, 0x21, + 0x18, 0x30, 0x0c, 0xcd, 0x0c, 0xc0, 0x00, 0xe0, + 0x01, 0x21, 0x08, 0x1c, 0xb0, 0xbd, 0x00, 0x00, + 0xf8, 0xb5, 0x06, 0x1c, 0x00, 0x27, 0x44, 0x68, + 0x3c, 0x00, 0xe0, 0xd3, 0x00, 0x00, 0x0f, 0xe0, + 0x09, 0x49, 0x48, 0x6a, 0x01, 0x30, 0x48, 0x62, + 0xa0, 0x69, 0x00, 0x28, 0x02, 0xd0, 0xf4, 0xf7, + 0x00, 0xfa, 0xa7, 0x61, 0x26, 0x62, 0x25, 0x68, + 0x20, 0x1c, 0xff, 0xf7, 0x52, 0xfb, 0x2c, 0x1c, + 0x00, 0x2c, 0xed, 0xd1, 0xf8, 0xbd, 0xc4, 0x69, + 0x01, 0x00, 0x03, 0x30, 0x07, 0x4a, 0x81, 0x08, + 0x13, 0x68, 0x50, 0x68, 0x1b, 0x68, 0x89, 0x00, + 0x09, 0x18, 0x3c, 0x00, 0x1c, 0xd4, 0x00, 0x00, + 0x8b, 0x42, 0x01, 0xd3, 0x51, 0x60, 0x00, 0xe0, + 0x00, 0x20, 0x90, 0x60, 0x70, 0x47, 0x00, 0x00, + 0x8c, 0x6e, 0x01, 0x00, 0x70, 0xb5, 0x12, 0x4e, + 0x80, 0x38, 0xc5, 0x00, 0x70, 0x59, 0x0c, 0x1c, + 0x00, 0x28, 0x04, 0xd1, 0x01, 0x21, 0x0d, 0x20, + 0xf3, 0xf7, 0x2e, 0xff, 0x0d, 0xe0, 0x20, 0x69, + 0x00, 0x28, 0x05, 0xd1, 0xa8, 0x19, 0x81, 0x88, + 0xe0, 0x68, 0x01, 0xf0, 0x3c, 0x00, 0x58, 0xd4, + 0x00, 0x00, 0x47, 0xfa, 0x20, 0x61, 0x71, 0x59, + 0x20, 0x1c, 0xf2, 0xf7, 0xbb, 0xff, 0x04, 0x1c, + 0x00, 0x2c, 0x07, 0xd0, 0xe0, 0x68, 0x00, 0x28, + 0x01, 0xd0, 0xf4, 0xf7, 0x92, 0xf8, 0x20, 0x1c, + 0xf4, 0xf7, 0xbd, 0xf9, 0x70, 0xbd, 0x54, 0x42, + 0x01, 0x00, 0x70, 0xb5, 0x04, 0x1c, 0x0d, 0x1c, + 0x0e, 0x49, 0x06, 0x22, 0xf3, 0xf7, 0x35, 0xf8, + 0x00, 0x26, 0xe6, 0x61, 0x66, 0x62, 0x3c, 0x00, + 0x94, 0xd4, 0x00, 0x00, 0x07, 0x20, 0x30, 0x21, + 0x08, 0x55, 0xe6, 0x63, 0x28, 0x1c, 0xf8, 0xf7, + 0x6b, 0xf8, 0xa0, 0x76, 0x20, 0x1c, 0x14, 0x30, + 0x06, 0x22, 0x29, 0x1c, 0xf3, 0xf7, 0x24, 0xf8, + 0x06, 0x22, 0x29, 0x1c, 0xa0, 0x18, 0xf3, 0xf7, + 0x1f, 0xf8, 0x26, 0x61, 0x70, 0xbd, 0x00, 0x00, + 0x12, 0x61, 0x01, 0x00, 0x80, 0xb5, 0xfd, 0xf7, + 0x85, 0xfe, 0x80, 0xbd, 0x01, 0x49, 0x48, 0x60, + 0x3c, 0x00, 0xd0, 0xd4, 0x00, 0x00, 0x70, 0x47, + 0x00, 0x00, 0xe4, 0x65, 0x01, 0x00, 0x02, 0x49, + 0x80, 0xb5, 0x49, 0x68, 0xf2, 0xf7, 0x7c, 0xff, + 0x80, 0xbd, 0xe4, 0x65, 0x01, 0x00, 0x80, 0xb5, + 0xf4, 0xf7, 0xe5, 0xf9, 0x07, 0x49, 0x07, 0x48, + 0x0e, 0xc9, 0x0e, 0xc0, 0x18, 0x38, 0x00, 0x68, + 0x00, 0x28, 0x02, 0xd0, 0x02, 0xf0, 0xb7, 0xfa, + 0x80, 0xbd, 0x02, 0xf0, 0x9e, 0xfa, 0x80, 0xbd, + 0x00, 0x00, 0x3c, 0x00, 0x0c, 0xd5, 0x00, 0x00, + 0xb0, 0x58, 0x01, 0x00, 0x90, 0x73, 0x01, 0x00, + 0x05, 0x49, 0x80, 0xb5, 0x89, 0x68, 0x00, 0x20, + 0x00, 0x29, 0x00, 0xd1, 0x03, 0x20, 0x00, 0x06, + 0x00, 0x0e, 0xfa, 0xf7, 0xe3, 0xfb, 0x80, 0xbd, + 0x60, 0x6c, 0x01, 0x00, 0x80, 0xb5, 0x03, 0x48, + 0x06, 0x22, 0x03, 0x49, 0xf2, 0xf7, 0xde, 0xff, + 0x80, 0xbd, 0x00, 0x00, 0x40, 0x80, 0x07, 0x00, + 0x12, 0x61, 0x01, 0x00, 0x3c, 0x00, 0x48, 0xd5, + 0x00, 0x00, 0xb0, 0xb5, 0x04, 0x1c, 0x0c, 0x4d, + 0x0b, 0x1c, 0x21, 0x1c, 0x00, 0x20, 0x0c, 0x3d, + 0x00, 0x29, 0x09, 0x4c, 0x05, 0xd0, 0x28, 0x78, + 0x21, 0x1c, 0x10, 0x80, 0x02, 0x1c, 0x18, 0x1c, + 0x07, 0xe0, 0x11, 0x88, 0x0e, 0x29, 0x07, 0xd8, + 0x0a, 0x06, 0x12, 0x0e, 0x19, 0x1c, 0x20, 0x1c, + 0x2a, 0x70, 0xf2, 0xf7, 0xbe, 0xff, 0x01, 0x20, + 0xb0, 0xbd, 0xb0, 0x69, 0x01, 0x00, 0x3c, 0x00, + 0x84, 0xd5, 0x00, 0x00, 0x10, 0xb5, 0x00, 0x20, + 0x0a, 0x4a, 0x01, 0x21, 0x11, 0x60, 0x0a, 0x4c, + 0x0a, 0xe0, 0x02, 0x1c, 0x01, 0x6a, 0x50, 0x32, + 0x91, 0x42, 0x05, 0xd0, 0x61, 0x78, 0x3c, 0x23, + 0x59, 0x43, 0x09, 0x19, 0x04, 0x31, 0x01, 0x62, + 0x04, 0xf0, 0xba, 0xfb, 0x00, 0x28, 0xf0, 0xd1, + 0x10, 0xbd, 0x00, 0x00, 0xdc, 0x62, 0x01, 0x00, + 0x68, 0x61, 0x01, 0x00, 0x04, 0x48, 0x80, 0xb5, + 0x3c, 0x00, 0xc0, 0xd5, 0x00, 0x00, 0x00, 0x68, + 0x00, 0x28, 0x03, 0xd0, 0x01, 0x1c, 0x10, 0x20, + 0x04, 0xf0, 0xc7, 0xfe, 0x80, 0xbd, 0x28, 0x61, + 0x01, 0x00, 0x03, 0x22, 0x11, 0x1f, 0x80, 0xb5, + 0x00, 0x20, 0xfb, 0xf7, 0x76, 0xf9, 0x80, 0xbd, + 0x00, 0x00, 0x80, 0xb5, 0x0b, 0xf0, 0xb9, 0xfa, + 0x80, 0xbd, 0xff, 0xb5, 0x83, 0xb0, 0x16, 0x1c, + 0x00, 0x21, 0x01, 0x91, 0x1f, 0x1c, 0x08, 0x21, + 0x02, 0xaa, 0x3c, 0x00, 0xfc, 0xd5, 0x00, 0x00, + 0xfa, 0xf7, 0x0e, 0xff, 0x04, 0x1c, 0x2a, 0xd1, + 0x02, 0x98, 0x41, 0x68, 0x49, 0x00, 0x01, 0xd4, + 0x09, 0x24, 0x24, 0xe0, 0xfa, 0xf7, 0x52, 0xff, + 0x38, 0x60, 0x02, 0x98, 0x41, 0x68, 0x49, 0x02, + 0xcd, 0x0f, 0x29, 0x1c, 0xfa, 0xf7, 0x44, 0xff, + 0x01, 0x1c, 0x30, 0x60, 0x38, 0x68, 0x00, 0x06, + 0x00, 0x0e, 0x00, 0xf0, 0x1b, 0xf8, 0x00, 0x28, + 0x01, 0xd1, 0x0a, 0x24, 0x3c, 0x00, 0x38, 0xd6, + 0x00, 0x00, 0x0f, 0xe0, 0x31, 0x68, 0x02, 0x98, + 0x2b, 0x1c, 0x01, 0xaa, 0xfa, 0xf7, 0xd7, 0xff, + 0x00, 0x28, 0x06, 0xd0, 0x01, 0x98, 0x00, 0x28, + 0x04, 0xd0, 0x04, 0x99, 0x09, 0x68, 0x81, 0x42, + 0x00, 0xd2, 0x03, 0x24, 0x01, 0x98, 0x04, 0x99, + 0x08, 0x60, 0x07, 0xb0, 0x20, 0x1c, 0xf0, 0xbd, + 0x00, 0x00, 0x70, 0xb5, 0x05, 0x1c, 0x0e, 0x1c, + 0x01, 0x24, 0x00, 0xf0, 0x84, 0xff, 0x3c, 0x00, + 0x74, 0xd6, 0x00, 0x00, 0x00, 0x28, 0x08, 0xd0, + 0x03, 0x2d, 0x01, 0xd0, 0x04, 0x2d, 0x04, 0xd1, + 0x03, 0x20, 0xc0, 0x03, 0x86, 0x42, 0x00, 0xd3, + 0x00, 0x24, 0x20, 0x1c, 0x70, 0xbd, 0x00, 0x00, + 0x7c, 0xb5, 0x15, 0x1c, 0x06, 0x1c, 0x0c, 0x1c, + 0x29, 0x1c, 0x6a, 0x46, 0x01, 0xab, 0xff, 0xf7, + 0xa5, 0xff, 0x00, 0x28, 0x02, 0xd1, 0x00, 0x2c, + 0x01, 0xd1, 0x03, 0x20, 0x7c, 0xbd, 0x17, 0x48, + 0x3c, 0x00, 0xb0, 0xd6, 0x00, 0x00, 0x00, 0xab, + 0x06, 0x60, 0x18, 0x79, 0x07, 0x28, 0x21, 0xd2, + 0x02, 0xa3, 0x1b, 0x5c, 0x5b, 0x00, 0x9f, 0x44, + 0x00, 0x00, 0x1d, 0x04, 0x04, 0x06, 0x10, 0x17, + 0x13, 0x00, 0x04, 0x20, 0xed, 0xe7, 0x2a, 0x1c, + 0x21, 0x1c, 0x01, 0x20, 0x00, 0x9b, 0xf2, 0xf7, + 0x81, 0xfe, 0x00, 0x28, 0x12, 0xd1, 0x06, 0x20, + 0xe3, 0xe7, 0x2a, 0x68, 0x00, 0x99, 0x05, 0xe0, + 0x00, 0x98, 0x3c, 0x00, 0xec, 0xd6, 0x00, 0x00, + 0x42, 0x78, 0x81, 0x1c, 0x01, 0xe0, 0x2a, 0x68, + 0x69, 0x46, 0x20, 0x1c, 0xf2, 0xf7, 0xfe, 0xfe, + 0x03, 0xe0, 0x04, 0x21, 0x87, 0x20, 0xf3, 0xf7, + 0xcf, 0xfd, 0x00, 0x20, 0xd0, 0xe7, 0x00, 0x00, + 0xf8, 0x6b, 0x01, 0x00, 0xf7, 0xb5, 0x86, 0xb0, + 0x0e, 0x1c, 0x08, 0x21, 0x05, 0xaa, 0x06, 0x98, + 0xfa, 0xf7, 0x7e, 0xfe, 0x04, 0x1c, 0x45, 0xd1, + 0x05, 0x98, 0x41, 0x68, 0x3c, 0x00, 0x28, 0xd7, + 0x00, 0x00, 0x02, 0x90, 0x49, 0x02, 0xc9, 0x0f, + 0x00, 0x25, 0x04, 0x95, 0x03, 0x91, 0x08, 0x9f, + 0xfa, 0xf7, 0xd5, 0xfe, 0x01, 0x90, 0x02, 0xa9, + 0x03, 0xc9, 0xfa, 0xf7, 0xc6, 0xfe, 0x01, 0x99, + 0x05, 0x29, 0x14, 0xd2, 0x02, 0xa3, 0x5b, 0x5c, + 0x5b, 0x00, 0x9f, 0x44, 0x00, 0x00, 0x0e, 0x03, + 0x06, 0x0c, 0x03, 0x00, 0x87, 0x42, 0x0e, 0xd8, + 0x07, 0xe0, 0x87, 0x42, 0x0b, 0xd8, 0x3c, 0x00, + 0x64, 0xd7, 0x00, 0x00, 0x01, 0x25, 0xc0, 0x1b, + 0x04, 0x90, 0x07, 0xe0, 0x87, 0x42, 0x05, 0xd1, + 0x01, 0x25, 0x03, 0xe0, 0x05, 0x21, 0x87, 0x20, + 0xf3, 0xf7, 0x94, 0xfd, 0x00, 0x2d, 0x01, 0xd1, + 0x03, 0x24, 0x15, 0xe0, 0x05, 0x98, 0x41, 0x68, + 0x00, 0x29, 0x69, 0xda, 0x3a, 0x4a, 0x06, 0x99, + 0x11, 0x60, 0xfa, 0xf7, 0x91, 0xfe, 0x07, 0x1c, + 0x05, 0x98, 0x03, 0x99, 0xfa, 0xf7, 0x86, 0xfe, + 0x3c, 0x00, 0xa0, 0xd7, 0x00, 0x00, 0x05, 0x1c, + 0x01, 0x1c, 0x38, 0x1c, 0xff, 0xf7, 0x5f, 0xff, + 0x00, 0x28, 0x01, 0xd1, 0x0a, 0x24, 0x5e, 0xe0, + 0x07, 0x2f, 0x57, 0xd2, 0x02, 0xa3, 0xdb, 0x5d, + 0x5b, 0x00, 0x9f, 0x44, 0x00, 0x00, 0x53, 0x04, + 0x04, 0x06, 0x2e, 0x50, 0x48, 0x00, 0x04, 0x24, + 0x51, 0xe0, 0x04, 0x98, 0x00, 0x28, 0x01, 0xd1, + 0x00, 0x27, 0x14, 0xe0, 0x08, 0x99, 0x08, 0x18, + 0x00, 0x04, 0x3c, 0x00, 0xdc, 0xd7, 0x00, 0x00, + 0x00, 0x0c, 0xf4, 0xf7, 0x2b, 0xf8, 0x07, 0x1c, + 0x31, 0x1c, 0x08, 0x9a, 0xf2, 0xf7, 0x86, 0xfe, + 0x08, 0x98, 0x04, 0x99, 0x38, 0x18, 0xf2, 0xf7, + 0x2f, 0xfe, 0x08, 0x98, 0x04, 0x99, 0x3e, 0x1c, + 0x40, 0x18, 0x08, 0x90, 0x31, 0x1c, 0x00, 0x20, + 0x08, 0xaa, 0xf2, 0xf7, 0xec, 0xfd, 0x00, 0x28, + 0x00, 0xd1, 0x05, 0x24, 0x00, 0x2f, 0x2d, 0xd0, + 0x38, 0x1c, 0xf3, 0xf7, 0x3c, 0x00, 0x18, 0xd8, + 0x00, 0x00, 0xed, 0xff, 0x29, 0xe0, 0x03, 0x99, + 0x00, 0x29, 0x04, 0xd0, 0x05, 0x98, 0x40, 0x68, + 0x87, 0x02, 0xbf, 0x0a, 0x00, 0xe0, 0x00, 0x27, + 0x31, 0x1c, 0x28, 0x1c, 0x08, 0x9a, 0xf2, 0xf7, + 0x60, 0xfe, 0x04, 0x99, 0x00, 0x29, 0x03, 0xd0, + 0x08, 0x98, 0x28, 0x18, 0xf2, 0xf7, 0x07, 0xfe, + 0x00, 0x2f, 0x12, 0xd0, 0xf2, 0xf7, 0xcc, 0xfd, + 0x0f, 0xe0, 0x31, 0x1c, 0xa8, 0x1c, 0x3c, 0x00, + 0x54, 0xd8, 0x00, 0x00, 0x08, 0x9a, 0xf2, 0xf7, + 0x4f, 0xfe, 0x08, 0x98, 0x68, 0x70, 0x07, 0xe0, + 0xff, 0xe7, 0x07, 0x24, 0x04, 0xe0, 0x08, 0x24, + 0x03, 0x21, 0x87, 0x20, 0xf3, 0xf7, 0x1a, 0xfd, + 0x20, 0x1c, 0x09, 0xb0, 0xf0, 0xbd, 0x00, 0x00, + 0xf8, 0x6b, 0x01, 0x00, 0x9e, 0xb5, 0x1c, 0x1c, + 0x00, 0xab, 0x19, 0x72, 0x00, 0x92, 0x00, 0x22, + 0x01, 0x94, 0x69, 0x46, 0xfb, 0xf7, 0x08, 0xfa, + 0x3c, 0x00, 0x90, 0xd8, 0x00, 0x00, 0x9e, 0xbd, + 0x00, 0x00, 0x8f, 0xb5, 0x02, 0x92, 0x00, 0x22, + 0x00, 0x90, 0x01, 0x90, 0x03, 0x91, 0x69, 0x46, + 0x04, 0x20, 0xfb, 0xf7, 0xfc, 0xf9, 0x8f, 0xbd, + 0x00, 0x00, 0xb0, 0xb5, 0x0c, 0x1c, 0x01, 0x28, + 0x0a, 0xd0, 0x03, 0x28, 0x19, 0xd0, 0x04, 0x28, + 0x2c, 0xd1, 0x60, 0x68, 0x01, 0xf0, 0x35, 0xfc, + 0x01, 0x1c, 0x83, 0x20, 0x0c, 0xcc, 0x22, 0xe0, + 0x1c, 0x20, 0x3c, 0x00, 0xcc, 0xd8, 0x00, 0x00, + 0x14, 0x49, 0x60, 0x43, 0x40, 0x18, 0x14, 0x49, + 0x45, 0x18, 0x28, 0x1c, 0xf8, 0xf7, 0x46, 0xfc, + 0xa9, 0x68, 0x00, 0x29, 0x03, 0xd0, 0x22, 0x1c, + 0x08, 0x20, 0x05, 0xf0, 0x71, 0xfe, 0xb0, 0xbd, + 0x20, 0x8c, 0xc8, 0x28, 0x01, 0xd3, 0x04, 0x20, + 0x04, 0xe0, 0x65, 0x28, 0x01, 0xd3, 0x02, 0x20, + 0x00, 0xe0, 0x01, 0x20, 0x20, 0x84, 0x20, 0x1c, + 0x03, 0xf0, 0xdc, 0xfa, 0x3c, 0x00, 0x08, 0xd9, + 0x00, 0x00, 0x22, 0x68, 0xe3, 0x68, 0x01, 0x1c, + 0x82, 0x20, 0xff, 0xf7, 0xb4, 0xff, 0xb0, 0xbd, + 0xa0, 0x21, 0x08, 0x20, 0xf3, 0xf7, 0xc3, 0xfc, + 0xb0, 0xbd, 0xdc, 0x71, 0x01, 0x00, 0x64, 0xee, + 0xff, 0xff, 0x03, 0x48, 0x04, 0x4a, 0x81, 0x68, + 0x51, 0x61, 0xc0, 0x68, 0x90, 0x61, 0x70, 0x47, + 0x00, 0x00, 0xf4, 0x68, 0x01, 0x00, 0xc0, 0x71, + 0x01, 0x00, 0x03, 0x49, 0x04, 0x4a, 0x3c, 0x00, + 0x44, 0xd9, 0x00, 0x00, 0x08, 0x6b, 0x90, 0x60, + 0x88, 0x68, 0xd0, 0x60, 0x70, 0x47, 0x00, 0x00, + 0x90, 0x5c, 0x01, 0x00, 0xc0, 0x71, 0x01, 0x00, + 0x00, 0xb5, 0xff, 0xf7, 0xf1, 0xff, 0xff, 0xf7, + 0xe3, 0xff, 0x00, 0xbd, 0xb0, 0xb5, 0x0d, 0x1c, + 0x00, 0x28, 0x14, 0xd0, 0x0b, 0x49, 0x0c, 0x4c, + 0x88, 0x68, 0x62, 0x69, 0xc9, 0x68, 0x80, 0x1a, + 0xa2, 0x69, 0x89, 0x1a, 0x40, 0x18, 0x04, 0xd0, + 0x3c, 0x00, 0x80, 0xd9, 0x00, 0x00, 0x64, 0x23, + 0x59, 0x43, 0xf2, 0xf7, 0xc4, 0xfe, 0x20, 0x61, + 0xff, 0xf7, 0xcd, 0xff, 0x20, 0x69, 0x28, 0x60, + 0x01, 0x20, 0xb0, 0xbd, 0x00, 0x20, 0xb0, 0xbd, + 0x00, 0x00, 0xf4, 0x68, 0x01, 0x00, 0xc0, 0x71, + 0x01, 0x00, 0xb0, 0xb5, 0x0d, 0x1c, 0x00, 0x28, + 0x17, 0xd0, 0x0c, 0x49, 0x0d, 0x4c, 0x08, 0x6b, + 0xa2, 0x68, 0x89, 0x68, 0x80, 0x1a, 0xe2, 0x68, + 0x89, 0x1a, 0x3c, 0x00, 0xbc, 0xd9, 0x00, 0x00, + 0x40, 0x18, 0x07, 0xd0, 0x22, 0x88, 0x90, 0x42, + 0x04, 0xd9, 0x64, 0x23, 0x59, 0x43, 0xf2, 0xf7, + 0xa1, 0xfe, 0x60, 0x60, 0xff, 0xf7, 0xb6, 0xff, + 0x60, 0x68, 0x28, 0x60, 0x01, 0x20, 0xb0, 0xbd, + 0x00, 0x20, 0xb0, 0xbd, 0x90, 0x5c, 0x01, 0x00, + 0xc0, 0x71, 0x01, 0x00, 0x7c, 0xb5, 0x10, 0x68, + 0x00, 0x28, 0x02, 0xd0, 0x00, 0xf0, 0x24, 0xf8, + 0x7c, 0xbd, 0x0f, 0x48, 0x3c, 0x00, 0xf8, 0xd9, + 0x00, 0x00, 0xc0, 0x69, 0x84, 0x68, 0xe0, 0x68, + 0x25, 0x6a, 0xa6, 0x69, 0xf3, 0xf7, 0xe3, 0xfd, + 0xe1, 0x69, 0xf3, 0xf7, 0x06, 0xfd, 0x20, 0x1c, + 0xe2, 0x69, 0x40, 0x30, 0xc1, 0x8b, 0x12, 0x89, + 0x89, 0x18, 0xc1, 0x83, 0x07, 0x49, 0x01, 0x94, + 0x00, 0x91, 0x28, 0x69, 0x33, 0x1c, 0x82, 0x88, + 0x01, 0x68, 0xe0, 0x68, 0xc0, 0x68, 0xf8, 0xf7, + 0x1e, 0xfc, 0xe0, 0xe7, 0x00, 0x00, 0x3c, 0x00, + 0x34, 0xda, 0x00, 0x00, 0x84, 0x6a, 0x01, 0x00, + 0x91, 0x5e, 0x00, 0x00, 0xf0, 0xb5, 0x85, 0x69, + 0x06, 0x6a, 0x04, 0x1c, 0xc0, 0x68, 0x85, 0xb0, + 0xc0, 0x68, 0x00, 0x28, 0x01, 0xd1, 0xf3, 0xf7, + 0x57, 0xfc, 0x0a, 0x49, 0x02, 0x95, 0x04, 0x94, + 0x03, 0x91, 0x30, 0x69, 0x82, 0x88, 0x01, 0x68, + 0x26, 0x20, 0x01, 0x92, 0x00, 0x91, 0x43, 0x5d, + 0xe0, 0x68, 0xe1, 0x69, 0x2a, 0x1c, 0x0e, 0x32, + 0x3c, 0x00, 0x70, 0xda, 0x00, 0x00, 0xc0, 0x68, + 0xf8, 0xf7, 0x37, 0xfd, 0x05, 0xb0, 0xf0, 0xbd, + 0x00, 0x00, 0xe9, 0xd9, 0x00, 0x00, 0x10, 0xb5, + 0x14, 0x1c, 0x05, 0x48, 0xfc, 0xf7, 0x7b, 0xfb, + 0xa0, 0x68, 0xf3, 0xf7, 0x9e, 0xfd, 0xe1, 0x68, + 0xc1, 0x60, 0x20, 0x1c, 0xf5, 0xf7, 0xbb, 0xfa, + 0x10, 0xbd, 0xa0, 0x6a, 0x01, 0x00, 0x7c, 0xb5, + 0x04, 0x1c, 0x60, 0x30, 0x02, 0x7b, 0xa1, 0x69, + 0x00, 0x91, 0x3c, 0x00, 0xac, 0xda, 0x00, 0x00, + 0x01, 0x92, 0x22, 0x1c, 0x21, 0x1c, 0x38, 0x31, + 0xa0, 0x68, 0x48, 0x32, 0x0d, 0x1c, 0x63, 0x69, + 0x03, 0xf0, 0x7a, 0xfb, 0x08, 0x21, 0x00, 0x20, + 0xf3, 0xf7, 0x88, 0xfd, 0xe0, 0x60, 0x26, 0x69, + 0xb1, 0x6b, 0x00, 0x29, 0x01, 0xd0, 0x10, 0x23, + 0x00, 0xe0, 0x18, 0x23, 0x05, 0x49, 0x01, 0x94, + 0x00, 0x91, 0x31, 0x68, 0xca, 0x18, 0x08, 0x23, + 0x01, 0x1c, 0x28, 0x1c, 0x3c, 0x00, 0xe8, 0xda, + 0x00, 0x00, 0xf8, 0xf7, 0x20, 0xfd, 0x7c, 0xbd, + 0x00, 0x00, 0x81, 0xda, 0x00, 0x00, 0xf0, 0xb5, + 0x46, 0x68, 0x17, 0x1c, 0x04, 0x1c, 0x01, 0x21, + 0x30, 0x1c, 0x9b, 0xb0, 0xfa, 0xf7, 0x0d, 0xfc, + 0x00, 0x25, 0x00, 0x28, 0x03, 0xd0, 0x13, 0x49, + 0x0a, 0x7a, 0x01, 0x2a, 0x01, 0xd1, 0x01, 0x25, + 0x1c, 0xe0, 0x88, 0x62, 0x4e, 0x61, 0x20, 0x89, + 0xc8, 0x61, 0x60, 0x89, 0x00, 0x28, 0x3c, 0x00, + 0x24, 0xdb, 0x00, 0x00, 0x03, 0xd0, 0x00, 0x20, + 0x08, 0x84, 0x48, 0x84, 0x04, 0xe0, 0xe0, 0x68, + 0x08, 0x84, 0x20, 0x8a, 0x48, 0x84, 0x60, 0x8a, + 0x88, 0x84, 0x08, 0x6b, 0x00, 0x28, 0x03, 0xd1, + 0x01, 0xa8, 0x03, 0xf0, 0x77, 0xfc, 0x04, 0xe0, + 0x01, 0x20, 0x08, 0x61, 0x00, 0x20, 0x02, 0xf0, + 0x39, 0xfb, 0x3d, 0x71, 0x1b, 0xb0, 0x01, 0x20, + 0xf0, 0xbd, 0x00, 0x00, 0xf4, 0x6e, 0x01, 0x00, + 0x3c, 0x00, 0x60, 0xdb, 0x00, 0x00, 0x10, 0xb5, + 0x04, 0x1c, 0xf7, 0xf7, 0xe8, 0xfb, 0x00, 0x28, + 0x11, 0xd1, 0x4b, 0x20, 0x00, 0x5d, 0x01, 0x28, + 0x0d, 0xd1, 0x20, 0x1c, 0x04, 0xf0, 0x85, 0xfa, + 0x00, 0x21, 0x20, 0x1c, 0x04, 0xf0, 0xf3, 0xf8, + 0xa0, 0x69, 0x00, 0x21, 0xc2, 0x07, 0xd2, 0x0f, + 0x04, 0x20, 0xf4, 0xf7, 0xd8, 0xf9, 0x10, 0xbd, + 0x00, 0x00, 0x38, 0xb5, 0x04, 0x1c, 0x04, 0xf0, + 0x36, 0xf9, 0x3c, 0x00, 0x9c, 0xdb, 0x00, 0x00, + 0x00, 0x28, 0x03, 0xd0, 0x40, 0x30, 0x80, 0x7a, + 0x00, 0x28, 0x25, 0xd1, 0x0c, 0x20, 0x29, 0x21, + 0x08, 0x55, 0x21, 0x1c, 0x06, 0x22, 0xa0, 0x18, + 0xf2, 0xf7, 0xa0, 0xfc, 0x20, 0x1c, 0x06, 0x22, + 0x0e, 0x49, 0xf2, 0xf7, 0x9b, 0xfc, 0x01, 0x20, + 0xe0, 0x61, 0x60, 0x62, 0x07, 0x20, 0x30, 0x21, + 0x08, 0x55, 0x00, 0x25, 0xe5, 0x63, 0x06, 0x20, + 0x00, 0xab, 0x18, 0x80, 0x3c, 0x00, 0xd8, 0xdb, + 0x00, 0x00, 0xe0, 0x68, 0x00, 0x28, 0x01, 0xd0, + 0xf3, 0xf7, 0xdb, 0xfc, 0x02, 0x21, 0x68, 0x46, + 0xfd, 0xf7, 0x73, 0xfb, 0xe0, 0x60, 0x20, 0x1c, + 0xff, 0xf7, 0x69, 0xfc, 0xe5, 0x60, 0x20, 0x1c, + 0x38, 0xbd, 0x12, 0x61, 0x01, 0x00, 0xfe, 0xb5, + 0x05, 0x1c, 0x0e, 0x1c, 0x15, 0x20, 0x00, 0xab, + 0x98, 0x80, 0x14, 0x21, 0x17, 0x1c, 0x00, 0x20, + 0xf3, 0xf7, 0xe3, 0xfc, 0x02, 0x90, 0x3c, 0x00, + 0x14, 0xdc, 0x00, 0x00, 0x04, 0x68, 0x06, 0x22, + 0x31, 0x1c, 0x60, 0x1d, 0x25, 0x71, 0xf2, 0xf7, + 0x6b, 0xfc, 0x06, 0x22, 0x39, 0x1c, 0x20, 0x1c, + 0x0b, 0x30, 0xf2, 0xf7, 0x65, 0xfc, 0x01, 0xa8, + 0xff, 0xf7, 0x52, 0xfc, 0xfe, 0xbd, 0x00, 0x00, + 0x80, 0xb5, 0x00, 0x23, 0xfb, 0xf7, 0x5c, 0xf8, + 0x80, 0xbd, 0x00, 0x00, 0x70, 0xb5, 0x05, 0x1c, + 0x08, 0x35, 0x0f, 0x4e, 0x29, 0x1c, 0x04, 0x1c, + 0x3c, 0x00, 0x50, 0xdc, 0x00, 0x00, 0x06, 0x22, + 0x30, 0x1c, 0xf2, 0xf7, 0x50, 0xfc, 0xa0, 0x88, + 0xb0, 0x82, 0x28, 0x1c, 0x05, 0xf0, 0xa1, 0xff, + 0x00, 0x28, 0x0b, 0xd0, 0xe0, 0x88, 0x30, 0x61, + 0x28, 0x1c, 0x04, 0xf0, 0xcc, 0xf8, 0xa1, 0x88, + 0x40, 0x30, 0x41, 0x80, 0x00, 0x20, 0xf4, 0xf7, + 0xb8, 0xf9, 0x02, 0xe0, 0x04, 0x20, 0xf4, 0xf7, + 0xa0, 0xf9, 0x00, 0x20, 0x70, 0xbd, 0x70, 0x7c, + 0x01, 0x00, 0x3c, 0x00, 0x8c, 0xdc, 0x00, 0x00, + 0x80, 0xb5, 0x00, 0x20, 0xfb, 0xf7, 0xf8, 0xfb, + 0x80, 0xbd, 0x00, 0x00, 0x70, 0xb5, 0x04, 0x1c, + 0x04, 0x30, 0x05, 0x1c, 0xfd, 0xf7, 0x32, 0xf8, + 0x00, 0x28, 0x09, 0xd0, 0x00, 0x20, 0xf7, 0xf7, + 0x37, 0xfc, 0x00, 0x28, 0x04, 0xd0, 0x06, 0x22, + 0x01, 0x1c, 0x28, 0x1c, 0xf2, 0xf7, 0x1e, 0xfc, + 0x0a, 0x4e, 0x06, 0x22, 0x29, 0x1c, 0x30, 0x1c, + 0xf2, 0xf7, 0x18, 0xfc, 0x3c, 0x00, 0xc8, 0xdc, + 0x00, 0x00, 0x60, 0x89, 0xf0, 0x82, 0x28, 0x1c, + 0x05, 0xf0, 0x69, 0xff, 0x00, 0x28, 0x03, 0xd0, + 0x02, 0x20, 0xf4, 0xf7, 0x88, 0xf9, 0x02, 0xe0, + 0x05, 0x20, 0xf9, 0xf7, 0xf4, 0xfa, 0x00, 0x20, + 0x70, 0xbd, 0x70, 0x7c, 0x01, 0x00, 0x10, 0xb5, + 0x04, 0x1c, 0x00, 0x79, 0x04, 0x28, 0x1c, 0xd2, + 0x60, 0x79, 0x01, 0x28, 0x01, 0xd0, 0x03, 0x28, + 0x04, 0xd1, 0x00, 0x22, 0x01, 0x21, 0x3c, 0x00, + 0x04, 0xdd, 0x00, 0x00, 0xa0, 0x1d, 0xf9, 0xf7, + 0x69, 0xfc, 0x60, 0x79, 0x00, 0x28, 0x04, 0xd1, + 0x22, 0x79, 0x00, 0x21, 0xf9, 0xf7, 0x62, 0xfc, + 0x0a, 0xe0, 0x03, 0x28, 0x08, 0xd1, 0x00, 0x24, + 0x22, 0x1c, 0x00, 0x21, 0x00, 0x20, 0xf9, 0xf7, + 0x59, 0xfc, 0x01, 0x34, 0x04, 0x2c, 0xf7, 0xdb, + 0x01, 0x20, 0x10, 0xbd, 0xf0, 0xb5, 0x97, 0xb0, + 0x17, 0x1c, 0x05, 0x1c, 0x04, 0x30, 0x04, 0x1c, + 0x3c, 0x00, 0x40, 0xdd, 0x00, 0x00, 0x15, 0xaa, + 0x16, 0xa9, 0x05, 0xf0, 0xe2, 0xfe, 0x00, 0x28, + 0x2e, 0xd0, 0x15, 0x98, 0x4b, 0x21, 0x09, 0x5c, + 0x00, 0x29, 0x23, 0xd0, 0x01, 0x29, 0x02, 0xd0, + 0x02, 0x29, 0x1f, 0xd1, 0x01, 0xe0, 0x04, 0xf0, + 0x90, 0xf9, 0xad, 0x7a, 0x13, 0x48, 0x16, 0x9e, + 0x05, 0x80, 0x06, 0x22, 0x21, 0x1c, 0x08, 0x30, + 0xf2, 0xf7, 0xc1, 0xfb, 0x22, 0x1c, 0x31, 0x1c, + 0x02, 0xa8, 0x3c, 0x00, 0x7c, 0xdd, 0x00, 0x00, + 0x00, 0xf0, 0x74, 0xfb, 0x0a, 0x20, 0x0a, 0xa9, + 0x48, 0x72, 0x00, 0xab, 0x9d, 0x80, 0x02, 0x21, + 0x01, 0xa8, 0xfd, 0xf7, 0x9f, 0xfa, 0x05, 0x90, + 0x02, 0xa8, 0xff, 0xf7, 0x95, 0xfb, 0xf3, 0xf7, + 0xf7, 0xf9, 0x00, 0x21, 0x15, 0x98, 0x03, 0xf0, + 0xe1, 0xff, 0x00, 0x20, 0x00, 0xe0, 0x01, 0x20, + 0x38, 0x71, 0x17, 0xb0, 0x01, 0x20, 0xf0, 0xbd, + 0x98, 0x7c, 0x01, 0x00, 0x3c, 0x00, 0xb8, 0xdd, + 0x00, 0x00, 0x80, 0xb5, 0x01, 0x20, 0xfb, 0xf7, + 0x62, 0xfb, 0x80, 0xbd, 0x00, 0x00, 0xb0, 0xb5, + 0x04, 0x1c, 0x80, 0x7d, 0x15, 0x1c, 0x0a, 0x1c, + 0xc0, 0x07, 0xc0, 0x17, 0x01, 0x30, 0x21, 0x1c, + 0xf9, 0xf7, 0xfb, 0xfc, 0x00, 0x28, 0x03, 0xd1, + 0x04, 0x20, 0x28, 0x71, 0x01, 0x20, 0xb0, 0xbd, + 0x20, 0x6a, 0xf7, 0xf7, 0x76, 0xfe, 0x60, 0x6a, + 0xf7, 0xf7, 0x7b, 0xfe, 0x20, 0x6a, 0x3c, 0x00, + 0xf4, 0xdd, 0x00, 0x00, 0xfe, 0xf7, 0x88, 0xfa, + 0x00, 0x20, 0xb0, 0xbd, 0x10, 0xb5, 0x14, 0x1c, + 0xc2, 0x79, 0x81, 0x79, 0x80, 0x88, 0xf7, 0xf7, + 0xa1, 0xfa, 0x20, 0x71, 0x01, 0x20, 0x10, 0xbd, + 0x80, 0xb5, 0x01, 0x23, 0xfa, 0xf7, 0x70, 0xff, + 0x80, 0xbd, 0x00, 0x00, 0xf0, 0xb5, 0x04, 0x1c, + 0x08, 0x1c, 0x00, 0x21, 0x0f, 0x28, 0x91, 0xb0, + 0x00, 0xd3, 0x02, 0x21, 0x00, 0x29, 0x41, 0xd1, + 0x3c, 0x00, 0x30, 0xde, 0x00, 0x00, 0xc0, 0x00, + 0x24, 0x4f, 0x10, 0x90, 0xc6, 0x19, 0xb2, 0x88, + 0x21, 0x68, 0x02, 0xa8, 0xf2, 0xf7, 0x5b, 0xfb, + 0x21, 0x89, 0xb0, 0x88, 0x09, 0x1a, 0x00, 0x29, + 0x07, 0xdd, 0x09, 0x04, 0x22, 0x68, 0x09, 0x0c, + 0x10, 0x18, 0xf3, 0xf7, 0xc0, 0xfb, 0x05, 0x1c, + 0x00, 0xe0, 0x00, 0x25, 0xb0, 0x79, 0x80, 0x21, + 0x88, 0x43, 0x17, 0x49, 0x78, 0x31, 0x09, 0x5c, + 0x00, 0x20, 0x3c, 0x00, 0x6c, 0xde, 0x00, 0x00, + 0xf3, 0xf7, 0xb4, 0xfb, 0x07, 0x1c, 0x00, 0x68, + 0x13, 0x49, 0x01, 0x90, 0x10, 0x98, 0x0b, 0x58, + 0x01, 0x9a, 0x29, 0x1c, 0x02, 0xa8, 0xf2, 0xf7, + 0xac, 0xfa, 0x00, 0x90, 0x28, 0x1c, 0xf3, 0xf7, + 0x73, 0xfb, 0x20, 0x1c, 0xf3, 0xf7, 0x82, 0xfb, + 0x00, 0x98, 0x00, 0x28, 0x08, 0xd0, 0x02, 0x98, + 0x01, 0x99, 0x08, 0x60, 0xb0, 0x79, 0x39, 0x1c, + 0xfa, 0xf7, 0x20, 0xff, 0x3c, 0x00, 0xa8, 0xde, + 0x00, 0x00, 0x11, 0xb0, 0xf0, 0xbd, 0x38, 0x1c, + 0xf3, 0xf7, 0x61, 0xfb, 0xf9, 0xe7, 0x2d, 0x20, + 0xf3, 0xf7, 0xf5, 0xf9, 0x20, 0x1c, 0xf3, 0xf7, + 0x6c, 0xfb, 0xf2, 0xe7, 0x00, 0x00, 0x24, 0x44, + 0x01, 0x00, 0x70, 0xb5, 0x05, 0x1c, 0x20, 0x35, + 0x06, 0x1c, 0xa8, 0x79, 0x04, 0x28, 0x48, 0xd2, + 0xe9, 0x79, 0x01, 0x29, 0x13, 0xd1, 0x30, 0x1c, + 0x28, 0x30, 0x03, 0xf0, 0x92, 0xff, 0x3c, 0x00, + 0xe4, 0xde, 0x00, 0x00, 0x00, 0x28, 0x3f, 0xd0, + 0x01, 0x1c, 0x8c, 0x31, 0x01, 0x65, 0xa9, 0x79, + 0x4c, 0x22, 0x04, 0x1c, 0x11, 0x54, 0x81, 0x18, + 0x41, 0x62, 0x50, 0x34, 0x04, 0x62, 0xe1, 0x1e, + 0x81, 0x62, 0x0b, 0xe0, 0x00, 0x29, 0x2f, 0xd1, + 0x3c, 0x22, 0x18, 0x49, 0x42, 0x43, 0x54, 0x18, + 0x17, 0x4a, 0x04, 0x34, 0x12, 0x68, 0x00, 0x2a, + 0x00, 0xd1, 0x48, 0x70, 0x00, 0x2c, 0x23, 0xd0, + 0x3c, 0x00, 0x20, 0xdf, 0x00, 0x00, 0x35, 0x1c, + 0x30, 0x35, 0xe8, 0x79, 0x01, 0x28, 0x01, 0xd0, + 0x05, 0x28, 0x01, 0xd1, 0x06, 0x20, 0xe8, 0x71, + 0x20, 0x22, 0x31, 0x1d, 0x20, 0x68, 0xf2, 0xf7, + 0xde, 0xfa, 0xb0, 0x8c, 0xa0, 0x80, 0xe8, 0x79, + 0xa0, 0x71, 0xa8, 0x79, 0x00, 0x25, 0xa0, 0x63, + 0x01, 0x20, 0x60, 0x81, 0x00, 0x20, 0xe0, 0x60, + 0x2e, 0x36, 0xe8, 0x00, 0x00, 0x19, 0x18, 0x30, + 0x08, 0x22, 0x3c, 0x00, 0x5c, 0xdf, 0x00, 0x00, + 0x31, 0x1c, 0xf2, 0xf7, 0xcb, 0xfa, 0x01, 0x35, + 0x04, 0x2d, 0xf5, 0xd3, 0x01, 0x20, 0x70, 0xbd, + 0x68, 0x61, 0x01, 0x00, 0xdc, 0x62, 0x01, 0x00, + 0x10, 0xb5, 0x04, 0x1c, 0xc0, 0x7a, 0x01, 0x28, + 0x01, 0xd0, 0x03, 0x28, 0x07, 0xd1, 0x20, 0x1d, + 0x03, 0xf0, 0x40, 0xff, 0x00, 0x28, 0x02, 0xd0, + 0xa1, 0x7a, 0x40, 0x30, 0x41, 0x73, 0xe0, 0x7a, + 0x00, 0x28, 0x01, 0xd0, 0x3c, 0x00, 0x98, 0xdf, + 0x00, 0x00, 0x03, 0x28, 0x02, 0xd1, 0xa0, 0x7a, + 0x02, 0x49, 0x08, 0x70, 0x01, 0x20, 0x10, 0xbd, + 0x00, 0x00, 0x68, 0x61, 0x01, 0x00, 0x70, 0xb5, + 0x0e, 0x1c, 0x03, 0x21, 0x04, 0x1c, 0x30, 0x1c, + 0xfc, 0xf7, 0xe1, 0xfb, 0x00, 0x28, 0x01, 0xd0, + 0x85, 0x78, 0x00, 0xe0, 0x00, 0x25, 0x0b, 0x48, + 0x32, 0x1c, 0x00, 0x68, 0x03, 0x68, 0x20, 0x7c, + 0x80, 0x07, 0xc0, 0x0f, 0x21, 0x1c, 0x3c, 0x00, + 0xd4, 0xdf, 0x00, 0x00, 0xf7, 0xf7, 0x62, 0xfe, + 0x00, 0x28, 0x05, 0xd0, 0x01, 0x21, 0x28, 0x1c, + 0xfd, 0xf7, 0xfe, 0xfb, 0x00, 0x20, 0x00, 0xe0, + 0x08, 0x20, 0x03, 0xf0, 0xc5, 0xff, 0x00, 0x20, + 0x70, 0xbd, 0x00, 0x00, 0xe4, 0x65, 0x01, 0x00, + 0x80, 0xb5, 0x42, 0x68, 0x00, 0x88, 0x01, 0x21, + 0x49, 0x06, 0x08, 0x43, 0x2d, 0x21, 0x05, 0xf0, + 0xd3, 0xfb, 0x80, 0xbd, 0x03, 0x49, 0x01, 0x20, + 0x3c, 0x00, 0x10, 0xe0, 0x00, 0x00, 0x49, 0x78, + 0x02, 0x29, 0x00, 0xd0, 0x00, 0x20, 0x70, 0x47, + 0x00, 0x00, 0x84, 0x66, 0x01, 0x00, 0x8c, 0xb5, + 0x01, 0x28, 0x1f, 0xd1, 0x00, 0x29, 0x0d, 0xd0, + 0x01, 0x29, 0x0b, 0xd0, 0x02, 0x29, 0x01, 0xd0, + 0x03, 0x29, 0x16, 0xd1, 0x00, 0x20, 0xf9, 0xf7, + 0x14, 0xfc, 0x93, 0x20, 0x00, 0xab, 0x18, 0x80, + 0x00, 0x20, 0x08, 0xe0, 0x01, 0x29, 0x00, 0xd0, + 0x00, 0x20, 0x3c, 0x00, 0x4c, 0xe0, 0x00, 0x00, + 0xf9, 0xf7, 0x0a, 0xfc, 0x83, 0x20, 0x00, 0xab, + 0x18, 0x80, 0x02, 0x20, 0x00, 0xf0, 0xcc, 0xf8, + 0x01, 0x90, 0x68, 0x46, 0xff, 0xf7, 0x3a, 0xfa, + 0x8c, 0xbd, 0x01, 0x21, 0x0e, 0x20, 0xf3, 0xf7, + 0x1b, 0xf9, 0xf9, 0xe7, 0xff, 0xb5, 0x17, 0x1c, + 0x1e, 0x1c, 0x14, 0x21, 0x00, 0x20, 0x83, 0xb0, + 0xf3, 0xf7, 0xac, 0xfa, 0x05, 0x1c, 0x04, 0x68, + 0x12, 0x20, 0x00, 0xab, 0x3c, 0x00, 0x88, 0xe0, + 0x00, 0x00, 0x98, 0x80, 0x06, 0x22, 0x60, 0x1d, + 0x03, 0x99, 0xf2, 0xf7, 0x32, 0xfa, 0x00, 0x20, + 0x20, 0x71, 0x27, 0x73, 0x04, 0x99, 0x20, 0x1c, + 0xe1, 0x72, 0x31, 0x1c, 0x06, 0x22, 0x0d, 0x30, + 0xf2, 0xf7, 0x27, 0xfa, 0x02, 0x95, 0x01, 0xa8, + 0xff, 0xf7, 0x13, 0xfa, 0x07, 0xb0, 0xf0, 0xbd, + 0x00, 0x00, 0xf8, 0xb5, 0x06, 0x1c, 0x0f, 0x1c, + 0x0c, 0x21, 0x00, 0x20, 0xf3, 0xf7, 0x3c, 0x00, + 0xc4, 0xe0, 0x00, 0x00, 0x89, 0xfa, 0x05, 0x68, + 0x04, 0x1c, 0x28, 0x1d, 0x06, 0x22, 0x31, 0x1c, + 0xf2, 0xf7, 0x12, 0xfa, 0x6f, 0x81, 0x20, 0x1c, + 0xf8, 0xbd, 0x00, 0x00, 0xb0, 0xb5, 0x04, 0x1c, + 0x0d, 0x1c, 0x08, 0x21, 0x00, 0x20, 0xf3, 0xf7, + 0x77, 0xfa, 0x01, 0x68, 0x8c, 0x71, 0x8d, 0x80, + 0xb0, 0xbd, 0x00, 0x00, 0xf7, 0xb5, 0x0e, 0x1c, + 0x10, 0x21, 0x17, 0x1c, 0x00, 0x20, 0xf3, 0xf7, + 0x3c, 0x00, 0x00, 0xe1, 0x00, 0x00, 0x6b, 0xfa, + 0x04, 0x68, 0x05, 0x1c, 0x20, 0x1d, 0x06, 0x22, + 0x00, 0x99, 0xf2, 0xf7, 0xf4, 0xf9, 0x66, 0x81, + 0xa7, 0x81, 0x28, 0x1c, 0xfe, 0xbd, 0xf3, 0xb5, + 0x0c, 0x1c, 0x08, 0x21, 0x00, 0x20, 0x85, 0xb0, + 0xf3, 0xf7, 0x59, 0xfa, 0x06, 0x1c, 0x07, 0x68, + 0xe0, 0x68, 0x00, 0x28, 0x02, 0xd0, 0x05, 0x99, + 0x01, 0x29, 0x04, 0xd1, 0x05, 0x98, 0x38, 0x71, + 0x00, 0x20, 0x3c, 0x00, 0x3c, 0xe1, 0x00, 0x00, + 0x78, 0x71, 0x56, 0xe0, 0x03, 0x68, 0x01, 0x21, + 0x03, 0x93, 0x20, 0x69, 0x02, 0x90, 0xfc, 0xf7, + 0x17, 0xfb, 0x05, 0x1c, 0x02, 0x98, 0x32, 0x21, + 0xfc, 0xf7, 0x12, 0xfb, 0x00, 0x22, 0xd2, 0x43, + 0x01, 0x1c, 0x28, 0x1c, 0x04, 0xab, 0xf7, 0xf7, + 0xb9, 0xf8, 0x00, 0x28, 0x04, 0xd1, 0x30, 0x1c, + 0xf3, 0xf7, 0x02, 0xfa, 0x00, 0x26, 0x3c, 0xe0, + 0x00, 0x2d, 0x05, 0xd0, 0x3c, 0x00, 0x78, 0xe1, + 0x00, 0x00, 0x68, 0x78, 0x09, 0x38, 0x07, 0x28, + 0x01, 0xd8, 0x32, 0x20, 0x28, 0x70, 0x1c, 0x21, + 0x00, 0x20, 0xf3, 0xf7, 0x26, 0xfa, 0x01, 0x90, + 0x05, 0x68, 0x01, 0x1c, 0x30, 0x1c, 0xf3, 0xf7, + 0x40, 0xf9, 0xe0, 0x68, 0xf3, 0xf7, 0x0b, 0xfa, + 0xa8, 0x61, 0xe1, 0x68, 0x01, 0x98, 0xf3, 0xf7, + 0x38, 0xf9, 0x00, 0x20, 0xe0, 0x60, 0x05, 0x98, + 0x80, 0x21, 0x08, 0x43, 0x38, 0x71, 0x3c, 0x00, + 0xb4, 0xe1, 0x00, 0x00, 0x01, 0x20, 0x21, 0x1c, + 0x14, 0x31, 0x78, 0x71, 0x28, 0x1c, 0x06, 0x22, + 0xf2, 0xf7, 0x9a, 0xf9, 0x02, 0x9a, 0x29, 0x20, + 0x00, 0x92, 0x00, 0x5d, 0x01, 0x21, 0xe2, 0x6a, + 0x08, 0x28, 0x00, 0xd0, 0x00, 0x21, 0x28, 0x1c, + 0x03, 0x9b, 0x02, 0xf0, 0x9d, 0xff, 0xa0, 0x6b, + 0x28, 0x61, 0x20, 0x6c, 0x68, 0x61, 0x7f, 0x30, + 0x01, 0xd1, 0x0f, 0x20, 0x68, 0x61, 0x30, 0x1c, + 0x3c, 0x00, 0xf0, 0xe1, 0x00, 0x00, 0x07, 0xb0, + 0xf0, 0xbd, 0x10, 0xb5, 0x04, 0x1c, 0x08, 0x21, + 0x00, 0x20, 0xf3, 0xf7, 0xec, 0xf9, 0x01, 0x68, + 0x0c, 0x71, 0x10, 0xbd, 0x00, 0x00, 0x01, 0x48, + 0x00, 0x68, 0x70, 0x47, 0x00, 0x00, 0x28, 0x61, + 0x01, 0x00, 0x01, 0x49, 0x08, 0x60, 0x70, 0x47, + 0x00, 0x00, 0xe4, 0x65, 0x01, 0x00, 0x02, 0x1c, + 0x01, 0x20, 0x00, 0x06, 0x08, 0x43, 0x80, 0xb5, + 0x2d, 0x21, 0x3c, 0x00, 0x2c, 0xe2, 0x00, 0x00, + 0x05, 0xf0, 0xc0, 0xfa, 0x80, 0xbd, 0x00, 0x00, + 0x80, 0xb5, 0x01, 0x28, 0x07, 0xd0, 0xf1, 0x28, + 0x25, 0xd0, 0xf3, 0x28, 0x27, 0xd1, 0x02, 0x20, + 0x02, 0xf0, 0xbc, 0xf9, 0x80, 0xbd, 0x00, 0x29, + 0x1a, 0xd0, 0x01, 0x29, 0x03, 0xd0, 0xf2, 0x29, + 0xf8, 0xd1, 0x88, 0x21, 0x1c, 0xe0, 0x10, 0x48, + 0x01, 0x78, 0x00, 0x29, 0x05, 0xd1, 0x40, 0x78, + 0x01, 0x28, 0xef, 0xd1, 0x3c, 0x00, 0x68, 0xe2, + 0x00, 0x00, 0x00, 0xf0, 0x16, 0xfa, 0x80, 0xbd, + 0x0b, 0x48, 0x14, 0x30, 0x00, 0x89, 0xfc, 0xf7, + 0x5a, 0xfc, 0x01, 0x1c, 0x01, 0x22, 0x0f, 0x20, + 0x05, 0xf0, 0x9f, 0xf9, 0x80, 0xbd, 0x04, 0xf0, + 0x52, 0xfa, 0x80, 0xbd, 0x00, 0x20, 0xfa, 0xf7, + 0x32, 0xfe, 0x80, 0xbd, 0x02, 0x21, 0x0f, 0x20, + 0xf3, 0xf7, 0x05, 0xf8, 0x80, 0xbd, 0x84, 0x66, + 0x01, 0x00, 0x01, 0x48, 0x00, 0x78, 0x3c, 0x00, + 0xa4, 0xe2, 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x74, 0x66, 0x01, 0x00, 0x01, 0x49, 0x00, 0x20, + 0x48, 0x60, 0x70, 0x47, 0xec, 0x65, 0x01, 0x00, + 0xf8, 0xb5, 0x0e, 0x1c, 0x13, 0x4d, 0x01, 0x1c, + 0x14, 0x1c, 0x68, 0x22, 0x28, 0x1c, 0x1f, 0x1c, + 0x0c, 0x30, 0xf2, 0xf7, 0x71, 0xf9, 0x0f, 0x49, + 0x00, 0x20, 0xac, 0x39, 0x48, 0x60, 0x01, 0x21, + 0x29, 0x60, 0x19, 0x21, 0x19, 0x2c, 0x6e, 0x67, + 0x3c, 0x00, 0xe0, 0xe2, 0x00, 0x00, 0x00, 0xd3, + 0x21, 0x1c, 0x29, 0x81, 0x09, 0x49, 0x14, 0x39, + 0x88, 0x73, 0x8f, 0x74, 0xc8, 0x78, 0x01, 0x28, + 0x08, 0xd0, 0x01, 0x21, 0x0f, 0x20, 0x05, 0xf0, + 0x9c, 0xf9, 0x19, 0x20, 0xfc, 0xf7, 0x15, 0xfc, + 0xfb, 0xf7, 0x99, 0xf8, 0x01, 0x20, 0xf8, 0xbd, + 0x00, 0x00, 0x98, 0x66, 0x01, 0x00, 0x80, 0xb5, + 0x01, 0x28, 0x02, 0xd1, 0x00, 0xf0, 0x2f, 0xf8, + 0x80, 0xbd, 0x3c, 0x00, 0x1c, 0xe3, 0x00, 0x00, + 0x01, 0x21, 0x1d, 0x20, 0xf2, 0xf7, 0xc0, 0xff, + 0x80, 0xbd, 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x01, 0x20, 0x07, 0x49, 0x00, 0x05, 0x80, 0xb5, + 0x88, 0x60, 0x00, 0x22, 0x80, 0x21, 0x16, 0x20, + 0x05, 0xf0, 0x4c, 0xf9, 0x04, 0xf0, 0x34, 0xfd, + 0x02, 0x49, 0x08, 0x61, 0x80, 0xbd, 0x00, 0x00, + 0x00, 0x10, 0x07, 0x00, 0x24, 0x6d, 0x01, 0x00, + 0x06, 0x4a, 0x80, 0xb5, 0x3c, 0x00, 0x58, 0xe3, + 0x00, 0x00, 0xd1, 0x6a, 0x81, 0x42, 0x07, 0xd1, + 0x10, 0x7f, 0x24, 0x23, 0x04, 0x49, 0x58, 0x43, + 0x40, 0x18, 0xc0, 0x68, 0xf2, 0xf7, 0x35, 0xf8, + 0x80, 0xbd, 0xd4, 0x79, 0x01, 0x00, 0x94, 0x46, + 0x01, 0x00, 0x1d, 0x48, 0x1c, 0xb5, 0x00, 0x78, + 0x00, 0x28, 0x2d, 0xd0, 0x1c, 0x48, 0x00, 0x68, + 0x00, 0x28, 0x29, 0xd0, 0x1a, 0x4a, 0x1a, 0x4b, + 0x04, 0x32, 0x11, 0x68, 0x1c, 0x69, 0x3c, 0x00, + 0x94, 0xe3, 0x00, 0x00, 0xa1, 0x42, 0x22, 0xd1, + 0x51, 0x68, 0x5b, 0x69, 0x99, 0x42, 0x1f, 0xd1, + 0x16, 0x49, 0x49, 0x68, 0x93, 0x68, 0xc9, 0x1a, + 0x81, 0x42, 0x19, 0xd2, 0xd0, 0x68, 0x14, 0x49, + 0x01, 0x30, 0xd0, 0x60, 0x09, 0x68, 0x88, 0x42, + 0x0c, 0xd9, 0x06, 0x22, 0xff, 0x21, 0x68, 0x46, + 0xf2, 0xf7, 0x2e, 0xf9, 0xf3, 0xf7, 0xac, 0xfc, + 0x01, 0x1c, 0x00, 0x23, 0x00, 0x22, 0x68, 0x46, + 0x3c, 0x00, 0xd0, 0xe3, 0x00, 0x00, 0x02, 0xf0, + 0xce, 0xf9, 0x01, 0x22, 0x1d, 0x20, 0x0a, 0x49, + 0x05, 0xf0, 0xf7, 0xf8, 0x1c, 0xbd, 0xf7, 0xf7, + 0x88, 0xf9, 0x04, 0x22, 0x81, 0x18, 0x08, 0x1c, + 0xfc, 0xf7, 0x27, 0xfb, 0xf6, 0xe7, 0x1c, 0x75, + 0x01, 0x00, 0x44, 0x75, 0x01, 0x00, 0x28, 0x61, + 0x01, 0x00, 0x90, 0x5c, 0x01, 0x00, 0xf0, 0x59, + 0x01, 0x00, 0xa0, 0x86, 0x01, 0x00, 0x80, 0xb5, + 0x01, 0x68, 0x3c, 0x00, 0x0c, 0xe4, 0x00, 0x00, + 0x00, 0x29, 0x15, 0xd1, 0x00, 0x79, 0x02, 0x28, + 0x12, 0xd1, 0x08, 0x1c, 0xf7, 0xf7, 0x80, 0xf8, + 0x00, 0x28, 0x0d, 0xd0, 0x03, 0xf0, 0xf2, 0xfc, + 0x08, 0x30, 0x41, 0x8f, 0x00, 0x29, 0x07, 0xd1, + 0x80, 0x69, 0x00, 0x28, 0x04, 0xd0, 0x80, 0x79, + 0x06, 0x28, 0x01, 0xd1, 0xfc, 0xf7, 0x18, 0xfb, + 0x80, 0xbd, 0x00, 0x00, 0x01, 0x49, 0x00, 0x20, + 0x88, 0x62, 0x70, 0x47, 0x3c, 0x00, 0x48, 0xe4, + 0x00, 0x00, 0x78, 0x69, 0x01, 0x00, 0xb0, 0xb5, + 0x05, 0x4d, 0x04, 0x1c, 0xa9, 0x1d, 0xff, 0xf7, + 0x14, 0xf8, 0x06, 0x22, 0x29, 0x1c, 0xa0, 0x18, + 0xf2, 0xf7, 0x4b, 0xf8, 0xb0, 0xbd, 0x70, 0x7c, + 0x01, 0x00, 0xb0, 0xb5, 0x04, 0x1c, 0x15, 0x1c, + 0xff, 0xf7, 0x07, 0xf8, 0x06, 0x22, 0x29, 0x1c, + 0xa0, 0x18, 0xf2, 0xf7, 0x3e, 0xf8, 0xb0, 0xbd, + 0x00, 0x00, 0x80, 0xb5, 0x0a, 0x30, 0x3c, 0x00, + 0x84, 0xe4, 0x00, 0x00, 0xf7, 0xf7, 0xbc, 0xf9, + 0x01, 0x23, 0x00, 0x28, 0x03, 0xd0, 0x05, 0x48, + 0x00, 0x78, 0x01, 0x28, 0x04, 0xd1, 0x00, 0x22, + 0x00, 0x21, 0x00, 0x20, 0x03, 0xf0, 0xc6, 0xfd, + 0x80, 0xbd, 0x00, 0x00, 0xa0, 0x79, 0x01, 0x00, + 0x80, 0xb5, 0x00, 0x23, 0x00, 0x22, 0x00, 0x21, + 0x00, 0x20, 0x03, 0xf0, 0xbb, 0xfd, 0x80, 0xbd, + 0xb0, 0xb5, 0x05, 0x4d, 0xac, 0x79, 0x0a, 0x1c, + 0x3c, 0x00, 0xc0, 0xe4, 0x00, 0x00, 0x01, 0x1c, + 0x01, 0x23, 0x01, 0x20, 0x03, 0xf0, 0xb1, 0xfd, + 0xac, 0x71, 0xb0, 0xbd, 0x00, 0x00, 0x20, 0x10, + 0x07, 0x00, 0xf8, 0xb5, 0x06, 0x1c, 0x0c, 0x1c, + 0x88, 0x07, 0x02, 0xd5, 0xf6, 0xf7, 0x47, 0xfa, + 0x10, 0xe0, 0x60, 0x07, 0x0e, 0xd5, 0x17, 0x4f, + 0xa3, 0x20, 0xc0, 0x5d, 0x15, 0x4d, 0x10, 0x28, + 0x00, 0xd3, 0x15, 0x4d, 0x04, 0xf0, 0x59, 0xfc, + 0xb9, 0x6f, 0x3c, 0x00, 0xfc, 0xe4, 0x00, 0x00, + 0x40, 0x1a, 0x29, 0x1a, 0x01, 0x20, 0xf6, 0xf7, + 0xc1, 0xfa, 0xe0, 0x07, 0x11, 0x49, 0xc0, 0x0f, + 0x48, 0x60, 0x0c, 0xd0, 0x0d, 0x4c, 0x44, 0x3c, + 0x20, 0x78, 0x03, 0x28, 0x0f, 0xd1, 0x00, 0x2e, + 0x06, 0xd0, 0xf6, 0xf7, 0xf9, 0xf9, 0x01, 0x1c, + 0x01, 0x20, 0xf6, 0xf7, 0xaf, 0xfa, 0xf8, 0xbd, + 0x09, 0x49, 0x01, 0x20, 0xf6, 0xf7, 0xaa, 0xfa, + 0x01, 0x20, 0x20, 0x70, 0x3c, 0x00, 0x38, 0xe5, + 0x00, 0x00, 0xf7, 0xe7, 0x01, 0x21, 0x30, 0x1c, + 0xf6, 0xf7, 0x89, 0xfa, 0xf2, 0xe7, 0xa6, 0x0e, + 0x00, 0x00, 0xa4, 0x6c, 0x01, 0x00, 0xc4, 0x09, + 0x00, 0x00, 0xb0, 0x57, 0x01, 0x00, 0x40, 0x42, + 0x0f, 0x00, 0x80, 0xb5, 0x06, 0x28, 0x04, 0xdb, + 0x05, 0x21, 0xff, 0x20, 0xf2, 0xf7, 0x9f, 0xfe, + 0x80, 0xbd, 0x03, 0x4a, 0xc0, 0x00, 0x11, 0x50, + 0x01, 0x21, 0x80, 0x18, 0x01, 0x71, 0x3c, 0x00, + 0x74, 0xe5, 0x00, 0x00, 0x80, 0xbd, 0x00, 0x00, + 0x9c, 0x5a, 0x01, 0x00, 0x01, 0x48, 0x80, 0x68, + 0x70, 0x47, 0x00, 0x00, 0xd0, 0x60, 0x01, 0x00, + 0xb0, 0xb5, 0x08, 0x4c, 0x25, 0x1d, 0x28, 0x1c, + 0x21, 0x68, 0x00, 0xf0, 0xf1, 0xfe, 0x00, 0x28, + 0x03, 0xd1, 0x01, 0x21, 0x04, 0x48, 0xf2, 0xf7, + 0xcf, 0xfa, 0x28, 0x1c, 0x21, 0x68, 0x00, 0xf0, + 0xfb, 0xfe, 0xb0, 0xbd, 0xc0, 0x60, 0x01, 0x00, + 0x3c, 0x00, 0xb0, 0xe5, 0x00, 0x00, 0x2c, 0x10, + 0x07, 0x00, 0xb0, 0xb5, 0x10, 0x4d, 0x0c, 0x1c, + 0xa8, 0x68, 0x00, 0x28, 0x02, 0xd1, 0x04, 0xf0, + 0xf4, 0xfb, 0x28, 0x60, 0x20, 0x1c, 0x04, 0xf0, + 0x38, 0xfb, 0x01, 0x21, 0x03, 0x20, 0x03, 0xf0, + 0xc4, 0xfe, 0x04, 0xf0, 0xf0, 0xfb, 0xa8, 0x68, + 0x00, 0x28, 0x0b, 0xd1, 0x04, 0xf0, 0xe5, 0xfb, + 0x29, 0x68, 0x00, 0x1b, 0x40, 0x1a, 0x69, 0x68, + 0x40, 0x18, 0x3c, 0x00, 0xec, 0xe5, 0x00, 0x00, + 0x41, 0x08, 0x40, 0x18, 0x28, 0x60, 0x01, 0x20, + 0xa8, 0x60, 0xb0, 0xbd, 0xd0, 0x60, 0x01, 0x00, + 0xf8, 0xb5, 0x1f, 0x4e, 0x00, 0x24, 0xb0, 0x68, + 0x00, 0x28, 0x02, 0xd1, 0x04, 0xf0, 0xd0, 0xfb, + 0x70, 0x60, 0x05, 0xf0, 0x61, 0xf8, 0x04, 0xf0, + 0x8f, 0xfb, 0x05, 0x1c, 0xf9, 0xf7, 0x66, 0xfe, + 0x31, 0x68, 0x18, 0x4a, 0x41, 0x18, 0x12, 0x68, + 0xe8, 0x0b, 0x00, 0x2a, 0x3c, 0x00, 0x28, 0xe6, + 0x00, 0x00, 0x00, 0xd1, 0xa8, 0x0a, 0x40, 0x18, + 0x85, 0x42, 0x1f, 0xd9, 0x14, 0x4f, 0x2d, 0x1a, + 0x38, 0x1c, 0x20, 0x30, 0x81, 0x79, 0x00, 0xab, + 0x19, 0x70, 0xc0, 0x79, 0x58, 0x70, 0x05, 0xf0, + 0x6e, 0xf8, 0x00, 0x28, 0x03, 0xd1, 0x02, 0x21, + 0x8f, 0x20, 0xf2, 0xf7, 0x28, 0xfe, 0x29, 0x1c, + 0x0c, 0x48, 0xf2, 0x68, 0xf8, 0xf7, 0x09, 0xfc, + 0x00, 0x28, 0x04, 0xd0, 0x01, 0x1c, 0x3c, 0x00, + 0x64, 0xe6, 0x00, 0x00, 0x28, 0x1c, 0xff, 0xf7, + 0xa5, 0xff, 0x01, 0x24, 0x00, 0xab, 0x18, 0x88, + 0xf8, 0x84, 0x05, 0xf0, 0x47, 0xf8, 0x20, 0x1c, + 0xf8, 0xbd, 0x00, 0x00, 0xd0, 0x60, 0x01, 0x00, + 0xf4, 0x74, 0x01, 0x00, 0x00, 0x10, 0x07, 0x00, + 0x89, 0x13, 0x01, 0x00, 0x01, 0x49, 0x01, 0x20, + 0xc8, 0x60, 0x70, 0x47, 0xd0, 0x60, 0x01, 0x00, + 0x06, 0x48, 0x80, 0xb5, 0x00, 0x68, 0x01, 0x28, + 0x3c, 0x00, 0xa0, 0xe6, 0x00, 0x00, 0x07, 0xd1, + 0x04, 0x48, 0xac, 0x38, 0x01, 0x69, 0x03, 0x48, + 0x00, 0xf0, 0x79, 0xfe, 0xf3, 0xf7, 0x2b, 0xfa, + 0x80, 0xbd, 0x98, 0x66, 0x01, 0x00, 0x34, 0x63, + 0x01, 0x00, 0x80, 0xb5, 0x42, 0x78, 0x81, 0x68, + 0x00, 0x79, 0x03, 0xf0, 0xde, 0xff, 0x00, 0x28, + 0x01, 0xd1, 0xf5, 0xf7, 0xb6, 0xf9, 0x80, 0xbd, + 0x00, 0x00, 0x1f, 0xb5, 0x04, 0xf0, 0x69, 0xfb, + 0xf6, 0xf7, 0x3c, 0x00, 0xdc, 0xe6, 0x00, 0x00, + 0x91, 0xff, 0x16, 0x4c, 0x02, 0x28, 0x03, 0xd1, + 0xff, 0xf7, 0xdc, 0xfd, 0x04, 0x28, 0x02, 0xd3, + 0x00, 0x20, 0x20, 0x70, 0x1f, 0xbd, 0xfb, 0xf7, + 0xf7, 0xfc, 0x00, 0x28, 0xfa, 0xd1, 0x60, 0x6a, + 0x00, 0x28, 0xf7, 0xd0, 0x20, 0x78, 0x80, 0x07, + 0xf4, 0xd4, 0x09, 0x21, 0x16, 0x20, 0x04, 0xf0, + 0x93, 0xff, 0x01, 0x20, 0x20, 0x70, 0x0b, 0x4c, + 0x09, 0x49, 0x02, 0x90, 0x3c, 0x00, 0x18, 0xe7, + 0x00, 0x00, 0x01, 0x94, 0x00, 0x91, 0x04, 0xf0, + 0x46, 0xfb, 0x00, 0x19, 0x03, 0x90, 0x68, 0x46, + 0xfd, 0xf7, 0xb5, 0xfb, 0x00, 0x22, 0x16, 0x21, + 0x84, 0x20, 0x05, 0xf0, 0x3e, 0xf8, 0xdc, 0xe7, + 0x00, 0x00, 0x60, 0x6c, 0x01, 0x00, 0x61, 0xed, + 0x00, 0x00, 0x40, 0x42, 0x0f, 0x00, 0x23, 0x48, + 0x70, 0xb5, 0x80, 0x78, 0x9c, 0xb0, 0x01, 0x28, + 0x3e, 0xd1, 0x20, 0x4c, 0x09, 0xa8, 0x3c, 0x00, + 0x54, 0xe7, 0x00, 0x00, 0x80, 0x3c, 0x61, 0x1c, + 0xfe, 0xf7, 0x92, 0xfe, 0x04, 0x20, 0x11, 0xad, + 0x68, 0x72, 0xa0, 0x6f, 0x19, 0xa9, 0x18, 0x90, + 0x7c, 0x20, 0x00, 0x5d, 0x01, 0x26, 0x08, 0x71, + 0x1d, 0x20, 0x00, 0x5d, 0x00, 0x28, 0x06, 0xd0, + 0x10, 0x96, 0x12, 0x96, 0xfc, 0xf7, 0xf6, 0xfa, + 0x28, 0x72, 0x20, 0x7a, 0x11, 0x90, 0xf3, 0xf7, + 0xcd, 0xff, 0x6a, 0x21, 0x08, 0x53, 0x40, 0x34, + 0x3c, 0x00, 0x90, 0xe7, 0x00, 0x00, 0x00, 0x22, + 0x01, 0xa9, 0x06, 0xa8, 0xf6, 0xf7, 0xcd, 0xff, + 0x21, 0x1c, 0x00, 0x20, 0xfb, 0xf7, 0xcb, 0xfb, + 0x06, 0xa9, 0xfb, 0xf7, 0xc8, 0xfb, 0x01, 0xa9, + 0xfb, 0xf7, 0xc5, 0xfb, 0x0a, 0x49, 0x09, 0x68, + 0x00, 0x29, 0x07, 0xd0, 0x33, 0x1c, 0x0a, 0x22, + 0x69, 0x46, 0xfb, 0xf7, 0xda, 0xfb, 0x00, 0x9a, + 0x07, 0x21, 0x91, 0x70, 0x0c, 0x90, 0x09, 0xa8, + 0xfe, 0xf7, 0x3c, 0x00, 0xcc, 0xe7, 0x00, 0x00, + 0x7b, 0xfe, 0x1c, 0xb0, 0x70, 0xbd, 0x00, 0x00, + 0x84, 0x66, 0x01, 0x00, 0xe4, 0x62, 0x01, 0x00, + 0xf8, 0xb5, 0x04, 0x1c, 0xc0, 0x68, 0xff, 0x22, + 0x01, 0x68, 0x12, 0x02, 0x0e, 0x1c, 0x08, 0x7b, + 0x49, 0x7b, 0x09, 0x02, 0x11, 0x40, 0x08, 0x43, + 0x05, 0x1c, 0x31, 0x1c, 0x06, 0x22, 0xa0, 0x18, + 0xf1, 0xf7, 0x7c, 0xfe, 0x06, 0x22, 0xb1, 0x18, + 0x20, 0x1c, 0xf1, 0xf7, 0x3c, 0x00, 0x08, 0xe8, + 0x00, 0x00, 0x77, 0xfe, 0x28, 0x0a, 0x29, 0x02, + 0x08, 0x43, 0x00, 0x04, 0x03, 0x21, 0x49, 0x02, + 0x00, 0x0c, 0x88, 0x42, 0x08, 0xd2, 0xe0, 0x68, + 0x01, 0x89, 0x0e, 0x39, 0x01, 0x81, 0xe0, 0x68, + 0x01, 0x68, 0x0e, 0x31, 0x01, 0x60, 0xf8, 0xbd, + 0x00, 0x26, 0x20, 0x1c, 0x10, 0x30, 0x03, 0xf0, + 0xe8, 0xfa, 0x21, 0x8b, 0x00, 0x29, 0x05, 0xd1, + 0xe1, 0x7d, 0x00, 0x29, 0x0b, 0xd0, 0x3c, 0x00, + 0x44, 0xe8, 0x00, 0x00, 0x80, 0x69, 0x80, 0x07, + 0x08, 0xd4, 0xe0, 0x68, 0x01, 0x26, 0x01, 0x89, + 0x02, 0x39, 0x01, 0x81, 0xe0, 0x68, 0x01, 0x68, + 0x02, 0x31, 0x06, 0xe0, 0xe0, 0x68, 0x01, 0x89, + 0x06, 0x39, 0x01, 0x81, 0xe0, 0x68, 0x01, 0x68, + 0x06, 0x31, 0x01, 0x60, 0x14, 0x49, 0x00, 0x20, + 0x0b, 0x1f, 0x42, 0x00, 0x9a, 0x5a, 0xaa, 0x42, + 0x02, 0xd1, 0x11, 0x49, 0x06, 0x31, 0x02, 0xe0, + 0x3c, 0x00, 0x80, 0xe8, 0x00, 0x00, 0x01, 0x30, + 0x02, 0x28, 0xf5, 0xd3, 0xe0, 0x68, 0x06, 0x22, + 0x00, 0x68, 0xf1, 0xf7, 0x34, 0xfe, 0x01, 0x2e, + 0xcb, 0xd1, 0x81, 0x20, 0x00, 0xab, 0x18, 0x80, + 0xe1, 0x7d, 0x20, 0x8b, 0x49, 0x03, 0x08, 0x43, + 0x31, 0x03, 0x08, 0x43, 0x00, 0x04, 0x00, 0x0c, + 0x01, 0x0a, 0x00, 0x02, 0x08, 0x43, 0x58, 0x80, + 0xe0, 0x68, 0x19, 0x88, 0x00, 0x68, 0xc1, 0x80, + 0x59, 0x88, 0x3c, 0x00, 0xbc, 0xe8, 0x00, 0x00, + 0x01, 0x81, 0xb5, 0xe7, 0x6a, 0x46, 0x01, 0x00, + 0xb0, 0xb5, 0x0d, 0x1c, 0x01, 0x89, 0x06, 0x22, + 0x08, 0x31, 0x01, 0x81, 0x04, 0x68, 0x04, 0x49, + 0x08, 0x3c, 0x04, 0x60, 0x20, 0x1c, 0xf1, 0xf7, + 0x0d, 0xfe, 0xe5, 0x80, 0xb0, 0xbd, 0x00, 0x00, + 0x6a, 0x46, 0x01, 0x00, 0xf8, 0xb5, 0x00, 0x29, + 0x01, 0xd0, 0x00, 0x28, 0x01, 0xd1, 0x00, 0x20, + 0xf8, 0xbd, 0x09, 0x04, 0x3c, 0x00, 0xf8, 0xe8, + 0x00, 0x00, 0x09, 0x0c, 0xf2, 0xf7, 0x43, 0xff, + 0x06, 0x1c, 0x05, 0x1c, 0x00, 0x27, 0x20, 0xe0, + 0x2c, 0x89, 0x29, 0x68, 0x02, 0x2c, 0x01, 0xd2, + 0x02, 0x20, 0x01, 0xe0, 0x48, 0x78, 0x02, 0x30, + 0x84, 0x42, 0x02, 0xdd, 0x24, 0x1a, 0x09, 0x18, + 0xf4, 0xe7, 0x84, 0x42, 0x10, 0xd0, 0x01, 0x1b, + 0x0a, 0x04, 0x01, 0x04, 0x09, 0x0c, 0x12, 0x0c, + 0x28, 0x1c, 0xf2, 0xf7, 0x9e, 0xfe, 0x3c, 0x00, + 0x34, 0xe9, 0x00, 0x00, 0x00, 0x28, 0x06, 0xd1, + 0xe8, 0x68, 0xf2, 0xf7, 0x2d, 0xfe, 0xef, 0x60, + 0x28, 0x89, 0x00, 0x1b, 0x28, 0x81, 0xed, 0x68, + 0x00, 0x2d, 0xdc, 0xd1, 0x30, 0x1c, 0xd1, 0xe7, + 0xf8, 0xb5, 0x85, 0x68, 0x04, 0x1c, 0x80, 0x69, + 0x2e, 0x1c, 0x00, 0x28, 0x0d, 0xd0, 0x71, 0x68, + 0xf2, 0xf7, 0xf6, 0xfd, 0xa0, 0x69, 0xf2, 0xf7, + 0x17, 0xfe, 0x06, 0xe0, 0x00, 0x21, 0xc1, 0x60, + 0x3c, 0x00, 0x70, 0xe9, 0x00, 0x00, 0xf1, 0x60, + 0xa0, 0x8d, 0x36, 0x68, 0x01, 0x38, 0xa0, 0x85, + 0xf0, 0x68, 0x00, 0x28, 0xf5, 0xd1, 0x30, 0x68, + 0xa0, 0x60, 0xa0, 0x8d, 0x01, 0x38, 0x00, 0x04, + 0x00, 0x0c, 0xa0, 0x85, 0x02, 0xd0, 0x20, 0x1c, + 0xf9, 0xf7, 0x39, 0xf8, 0x2a, 0x4f, 0x2a, 0x48, + 0x00, 0x68, 0x00, 0x28, 0x03, 0xd0, 0x06, 0x21, + 0x68, 0x68, 0xfa, 0xf7, 0x7c, 0xfd, 0x68, 0x68, + 0x00, 0x68, 0x3c, 0x00, 0xac, 0xe9, 0x00, 0x00, + 0x81, 0x78, 0x00, 0x29, 0x2b, 0xd1, 0xc1, 0x78, + 0x00, 0x29, 0x30, 0xd1, 0x21, 0x8e, 0x01, 0x39, + 0x21, 0x86, 0xfb, 0xf7, 0x15, 0xf8, 0xa1, 0x6a, + 0x08, 0x1a, 0xa0, 0x62, 0xe1, 0x69, 0x88, 0x42, + 0x03, 0xd9, 0x04, 0x21, 0x02, 0x20, 0xf2, 0xf7, + 0x67, 0xfc, 0xb8, 0x68, 0x00, 0x28, 0x1e, 0xd0, + 0x1a, 0x49, 0x20, 0x8e, 0x49, 0x68, 0x0c, 0x22, + 0x52, 0x1a, 0x90, 0x42, 0x3c, 0x00, 0xe8, 0xe9, + 0x00, 0x00, 0x08, 0xd3, 0x19, 0x23, 0x9b, 0x01, + 0xaf, 0x22, 0x92, 0x01, 0x59, 0x43, 0xa0, 0x6a, + 0x51, 0x1a, 0x88, 0x42, 0x0e, 0xd2, 0x00, 0x21, + 0x0c, 0x20, 0x03, 0xf0, 0xac, 0xfc, 0x00, 0x20, + 0xb8, 0x60, 0x07, 0xe0, 0x01, 0x29, 0x05, 0xd1, + 0xc0, 0x78, 0x17, 0x28, 0x02, 0xd1, 0xa0, 0x8e, + 0x01, 0x38, 0xa0, 0x86, 0x2a, 0x1d, 0x06, 0xca, + 0xe0, 0x68, 0x63, 0x69, 0xf1, 0xf7, 0x3c, 0x00, + 0x24, 0xea, 0x00, 0x00, 0xdc, 0xfc, 0xb5, 0x42, + 0x01, 0xd0, 0x2d, 0x68, 0xb4, 0xe7, 0xa0, 0x8d, + 0x00, 0x28, 0x03, 0xd1, 0x05, 0x48, 0xb9, 0x69, + 0x00, 0xf0, 0x9e, 0xfc, 0xf8, 0xbd, 0x00, 0x00, + 0xfc, 0x5a, 0x01, 0x00, 0xcc, 0x5c, 0x01, 0x00, + 0x18, 0x57, 0x01, 0x00, 0xc4, 0x60, 0x01, 0x00, + 0x89, 0x07, 0x07, 0x4b, 0xca, 0x0f, 0x80, 0xb5, + 0x19, 0x7c, 0x00, 0x29, 0x06, 0xd0, 0x81, 0x43, + 0x3c, 0x00, 0x60, 0xea, 0x00, 0x00, 0x19, 0x74, + 0x03, 0xd1, 0x07, 0x21, 0x15, 0x20, 0x04, 0xf0, + 0xa2, 0xfe, 0x80, 0xbd, 0x00, 0x00, 0x78, 0x69, + 0x01, 0x00, 0x80, 0xb5, 0x01, 0x1c, 0x01, 0x20, + 0xff, 0xf7, 0xe9, 0xff, 0x80, 0xbd, 0x80, 0xb5, + 0x01, 0x1c, 0x02, 0x20, 0xff, 0xf7, 0xe3, 0xff, + 0x80, 0xbd, 0xb0, 0xb5, 0x1b, 0x4c, 0x60, 0x68, + 0xfc, 0xf7, 0x2f, 0xff, 0x20, 0x68, 0x00, 0x25, + 0x40, 0x68, 0x3c, 0x00, 0x9c, 0xea, 0x00, 0x00, + 0x00, 0x28, 0x03, 0xd0, 0xfd, 0xf7, 0x18, 0xfc, + 0x20, 0x68, 0x45, 0x60, 0x60, 0x68, 0xfc, 0xf7, + 0xc5, 0xfe, 0x14, 0x48, 0x61, 0x68, 0x00, 0xf0, + 0x61, 0xfc, 0xa0, 0x7a, 0x01, 0x28, 0x05, 0xd0, + 0x02, 0x28, 0x03, 0xd0, 0x20, 0x68, 0x00, 0x68, + 0x00, 0xf0, 0xde, 0xf8, 0x01, 0x21, 0x1f, 0x20, + 0x04, 0xf0, 0xb2, 0xfd, 0x00, 0x21, 0x1f, 0x20, + 0x04, 0xf0, 0xae, 0xfd, 0x3c, 0x00, 0xd8, 0xea, + 0x00, 0x00, 0x02, 0x21, 0x1f, 0x20, 0x04, 0xf0, + 0xaa, 0xfd, 0xa5, 0x72, 0x21, 0x68, 0x2c, 0x20, + 0x40, 0x5c, 0x89, 0x68, 0xf1, 0xf7, 0x76, 0xfc, + 0x60, 0x68, 0xfc, 0xf7, 0xe4, 0xfe, 0x20, 0x68, + 0x05, 0x62, 0xb0, 0xbd, 0x00, 0x00, 0x14, 0x7a, + 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, 0x04, 0x49, + 0x0a, 0x68, 0xc8, 0x68, 0x92, 0x6a, 0x00, 0x2a, + 0x01, 0xd0, 0x09, 0x69, 0x08, 0x18, 0x3c, 0x00, + 0x14, 0xeb, 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x14, 0x7a, 0x01, 0x00, 0xb0, 0xb5, 0x13, 0x4c, + 0x05, 0x1c, 0xa0, 0x7a, 0x01, 0x38, 0x02, 0x28, + 0x19, 0xd8, 0x01, 0x21, 0x1f, 0x20, 0x04, 0xf0, + 0x81, 0xfd, 0x20, 0x68, 0xfc, 0x23, 0x01, 0x1c, + 0x20, 0x30, 0x02, 0x7b, 0x1a, 0x40, 0x02, 0x73, + 0x00, 0x2d, 0x0f, 0xd0, 0x01, 0x23, 0x1a, 0x43, + 0x02, 0x73, 0xa0, 0x7a, 0x03, 0x28, 0x07, 0xd1, + 0x3c, 0x00, 0x50, 0xeb, 0x00, 0x00, 0x01, 0x20, + 0x01, 0xf0, 0xe7, 0xfd, 0x00, 0x28, 0x01, 0xd1, + 0xff, 0xf7, 0x97, 0xff, 0xb0, 0xbd, 0x4b, 0x62, + 0xb0, 0xbd, 0x02, 0x21, 0x11, 0x43, 0x01, 0x73, + 0xf6, 0xe7, 0x14, 0x7a, 0x01, 0x00, 0x10, 0xb5, + 0x04, 0x1c, 0x0a, 0x30, 0xf6, 0xf7, 0x43, 0xfe, + 0x00, 0x28, 0x0c, 0xd0, 0x22, 0x88, 0x0a, 0x49, + 0x0b, 0x7a, 0x90, 0x04, 0xc0, 0x0f, 0x00, 0x2b, + 0x06, 0xd1, 0x3c, 0x00, 0x8c, 0xeb, 0x00, 0x00, + 0x12, 0x06, 0x92, 0x0e, 0x20, 0x2a, 0x00, 0xd1, + 0x01, 0x20, 0xc8, 0x60, 0x10, 0xbd, 0x00, 0x28, + 0xfc, 0xd1, 0x00, 0x22, 0x24, 0x21, 0x80, 0x20, + 0x04, 0xf0, 0x04, 0xfe, 0x10, 0xbd, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x80, 0xb5, 0x02, 0x1c, + 0x1f, 0x21, 0x80, 0x20, 0x04, 0xf0, 0xfa, 0xfd, + 0x80, 0xbd, 0x00, 0x00, 0xf8, 0xb5, 0x1d, 0x4e, + 0x04, 0x1c, 0x30, 0x68, 0x3c, 0x00, 0xc8, 0xeb, + 0x00, 0x00, 0x1d, 0x1c, 0x47, 0x68, 0x20, 0x1c, + 0xf1, 0xf7, 0x0a, 0xfc, 0xfb, 0xf7, 0x87, 0xfa, + 0x00, 0x28, 0x04, 0xd0, 0x28, 0x1c, 0xf2, 0xf7, + 0x2a, 0xfb, 0x00, 0x28, 0x28, 0xd1, 0x20, 0x88, + 0x40, 0x05, 0x25, 0xd4, 0x30, 0x68, 0x00, 0x68, + 0xfe, 0xf7, 0x59, 0xf9, 0x00, 0x28, 0x03, 0xd1, + 0xfd, 0xf7, 0x89, 0xfa, 0xf1, 0xf7, 0xed, 0xfb, + 0x30, 0x68, 0x00, 0x25, 0x40, 0x68, 0x3c, 0x00, + 0x04, 0xec, 0x00, 0x00, 0x00, 0x28, 0x03, 0xd0, + 0xfd, 0xf7, 0x64, 0xfb, 0x30, 0x68, 0x45, 0x60, + 0x20, 0x88, 0x00, 0x09, 0x00, 0x07, 0x03, 0xd1, + 0x04, 0xf0, 0xc8, 0xf8, 0x61, 0x88, 0x45, 0x18, + 0x30, 0x68, 0x45, 0x61, 0x81, 0x6a, 0x01, 0x31, + 0x81, 0x62, 0x20, 0x88, 0x80, 0x04, 0xc1, 0x0f, + 0x02, 0x48, 0xf8, 0xf7, 0xcd, 0xff, 0xf8, 0xbd, + 0x14, 0x7a, 0x01, 0x00, 0xb1, 0xeb, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0xec, 0x00, 0x00, 0xb0, 0xb5, + 0x0e, 0x4c, 0x05, 0x1c, 0x60, 0x68, 0xfc, 0xf7, + 0xf6, 0xfd, 0x0c, 0x48, 0x61, 0x68, 0x00, 0xf0, + 0x92, 0xfb, 0x00, 0x21, 0x24, 0x20, 0x04, 0xf0, + 0xec, 0xfc, 0x00, 0x22, 0xd2, 0x43, 0x80, 0x21, + 0x24, 0x20, 0x04, 0xf0, 0xb8, 0xfc, 0x00, 0x20, + 0xe0, 0x60, 0x20, 0x72, 0x20, 0x68, 0x01, 0x68, + 0x28, 0x06, 0x00, 0x0e, 0xf1, 0xf7, 0xb0, 0xfb, + 0xb0, 0xbd, 0x3c, 0x00, 0x7c, 0xec, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, + 0x10, 0xb5, 0x04, 0x1c, 0xc0, 0x68, 0xf2, 0xf7, + 0x85, 0xfc, 0x20, 0x1c, 0xf2, 0xf7, 0xb0, 0xfd, + 0x10, 0xbd, 0x00, 0x00, 0x70, 0xb5, 0x1c, 0x4e, + 0x05, 0x1c, 0xb0, 0x7a, 0x2c, 0x1c, 0x40, 0x34, + 0x02, 0x28, 0x26, 0xd1, 0xa0, 0x8b, 0x31, 0x89, + 0x88, 0x42, 0x22, 0xd1, 0x30, 0x68, 0x41, 0x6a, + 0x00, 0x29, 0x08, 0xd0, 0x3c, 0x00, 0xb8, 0xec, + 0x00, 0x00, 0x20, 0x30, 0x00, 0x7b, 0xc0, 0x07, + 0x04, 0xd5, 0x01, 0x20, 0x01, 0xf0, 0x2f, 0xfd, + 0x00, 0x28, 0x18, 0xd1, 0x60, 0x78, 0x00, 0x28, + 0x09, 0xd1, 0x30, 0x68, 0x02, 0x23, 0x20, 0x30, + 0x02, 0x7b, 0x0d, 0x49, 0x52, 0x08, 0x52, 0x00, + 0x1a, 0x43, 0x02, 0x73, 0x01, 0xe0, 0xff, 0x21, + 0xf5, 0x31, 0x01, 0x22, 0x1f, 0x20, 0x04, 0xf0, + 0x6e, 0xfc, 0x03, 0x20, 0xb0, 0x72, 0x3c, 0x00, + 0xf4, 0xec, 0x00, 0x00, 0x02, 0xe0, 0x28, 0x1c, + 0xff, 0xf7, 0xc4, 0xff, 0x60, 0x78, 0x00, 0x28, + 0x03, 0xd1, 0x29, 0x1c, 0x01, 0x20, 0x03, 0xf0, + 0x29, 0xfb, 0x70, 0xbd, 0x14, 0x7a, 0x01, 0x00, + 0x50, 0xc3, 0x00, 0x00, 0xb0, 0xb5, 0x04, 0x1c, + 0x60, 0x34, 0xe0, 0x79, 0x0e, 0x4d, 0x00, 0x28, + 0x0a, 0xd1, 0x02, 0x20, 0xa8, 0x72, 0x28, 0x68, + 0x40, 0x68, 0x00, 0x28, 0x04, 0xd1, 0x0b, 0x48, + 0x3c, 0x00, 0x30, 0xed, 0x00, 0x00, 0xfd, 0xf7, + 0xd0, 0xfa, 0x29, 0x68, 0x48, 0x60, 0x04, 0xf0, + 0x38, 0xf8, 0x29, 0x68, 0xc8, 0x61, 0xff, 0xf7, + 0xe0, 0xfe, 0x29, 0x68, 0x09, 0x69, 0x08, 0x1a, + 0x03, 0xf0, 0x6f, 0xff, 0x00, 0x28, 0x01, 0xd0, + 0xe0, 0x79, 0xa0, 0x71, 0xb0, 0xbd, 0x14, 0x7a, + 0x01, 0x00, 0xc1, 0xeb, 0x00, 0x00, 0xf8, 0xb5, + 0x04, 0x1c, 0x00, 0x26, 0x04, 0xf0, 0x21, 0xf8, + 0x05, 0x1c, 0x3c, 0x00, 0x6c, 0xed, 0x00, 0x00, + 0x22, 0x48, 0x00, 0x27, 0x07, 0x70, 0xa1, 0x07, + 0x04, 0xd0, 0xe1, 0x07, 0xc9, 0x0f, 0x01, 0x62, + 0xc5, 0x61, 0x01, 0x26, 0x41, 0x6b, 0x00, 0x29, + 0x34, 0xd1, 0x00, 0x2e, 0x32, 0xd0, 0x06, 0x1c, + 0xf9, 0xf7, 0x44, 0xff, 0x31, 0x6b, 0x1a, 0x4b, + 0x41, 0x1a, 0xa2, 0x07, 0x12, 0xd5, 0xda, 0x68, + 0x00, 0x2a, 0x08, 0xdd, 0x91, 0x42, 0x1a, 0x68, + 0x02, 0xda, 0x14, 0x09, 0x3c, 0x00, 0xa8, 0xed, + 0x00, 0x00, 0xa2, 0x18, 0x06, 0xe0, 0x14, 0x09, + 0x12, 0x1b, 0x03, 0xe0, 0x0a, 0x43, 0x02, 0xd1, + 0x1a, 0x68, 0x52, 0x00, 0x1a, 0x60, 0xb7, 0x63, + 0x0a, 0xe0, 0xb2, 0x6b, 0x01, 0x32, 0xb2, 0x63, + 0x02, 0x2a, 0x1a, 0x68, 0x01, 0xdd, 0x94, 0x08, + 0x00, 0xe0, 0x14, 0x09, 0x12, 0x1b, 0x1a, 0x60, + 0xd9, 0x60, 0x30, 0x63, 0xf5, 0x62, 0x18, 0x68, + 0x08, 0x49, 0x88, 0x42, 0x01, 0xd9, 0x3c, 0x00, + 0xe4, 0xed, 0x00, 0x00, 0x19, 0x60, 0x03, 0xe0, + 0x64, 0x28, 0x01, 0xd2, 0x64, 0x20, 0x18, 0x60, + 0xf5, 0xf7, 0xfc, 0xfd, 0xf8, 0xbd, 0x00, 0x00, + 0x60, 0x6c, 0x01, 0x00, 0xb0, 0x57, 0x01, 0x00, + 0x20, 0xa1, 0x07, 0x00, 0xfe, 0xb5, 0x04, 0x1c, + 0x00, 0x20, 0x50, 0x4d, 0x00, 0x21, 0x68, 0x61, + 0x20, 0x69, 0xfb, 0xf7, 0xb3, 0xfc, 0x07, 0x1c, + 0x20, 0x69, 0x03, 0x21, 0xfb, 0xf7, 0xae, 0xfc, + 0x3c, 0x00, 0x20, 0xee, 0x00, 0x00, 0x00, 0x28, + 0x03, 0xd0, 0x80, 0x78, 0x29, 0x78, 0x88, 0x42, + 0x63, 0xd1, 0x47, 0x4d, 0x20, 0x1c, 0x14, 0x30, + 0x39, 0x1c, 0x06, 0x1c, 0x2a, 0x78, 0x02, 0xf0, + 0x5a, 0xfa, 0x00, 0x28, 0x59, 0xd1, 0xe0, 0x68, + 0x05, 0x68, 0x41, 0x48, 0x01, 0x95, 0x58, 0x30, + 0x02, 0x90, 0xfb, 0xf7, 0x6a, 0xff, 0x3e, 0x4d, + 0x19, 0x35, 0x00, 0x28, 0x0b, 0xd0, 0x28, 0x1c, + 0xfb, 0xf7, 0x3c, 0x00, 0x5c, 0xee, 0x00, 0x00, + 0x55, 0xff, 0x00, 0x28, 0x1e, 0xd1, 0x31, 0x1c, + 0x28, 0x1c, 0xfb, 0xf7, 0x65, 0xff, 0x00, 0x28, + 0x42, 0xd0, 0x17, 0xe0, 0x28, 0x1c, 0xfb, 0xf7, + 0x49, 0xff, 0x00, 0x28, 0x06, 0xd0, 0x39, 0x1c, + 0x02, 0x98, 0xfb, 0xf7, 0x63, 0xff, 0x00, 0x28, + 0x36, 0xd0, 0x0b, 0xe0, 0x39, 0x1c, 0x02, 0x98, + 0xfb, 0xf7, 0x5c, 0xff, 0x00, 0x28, 0x2f, 0xd0, + 0x31, 0x1c, 0x28, 0x1c, 0x3c, 0x00, 0x98, 0xee, + 0x00, 0x00, 0xfb, 0xf7, 0x4c, 0xff, 0x00, 0x28, + 0x29, 0xd0, 0x30, 0x1c, 0xf6, 0xf7, 0xad, 0xfc, + 0x29, 0x4a, 0x18, 0x32, 0x11, 0x7c, 0x00, 0x29, + 0x04, 0xd0, 0x51, 0x6a, 0x00, 0x29, 0x01, 0xd0, + 0x00, 0x28, 0x1c, 0xd1, 0x90, 0x6a, 0x00, 0x28, + 0x3b, 0xd0, 0x13, 0x78, 0x01, 0x9d, 0x01, 0x21, + 0x6d, 0x89, 0x01, 0x20, 0x2b, 0x40, 0x9b, 0x07, + 0x11, 0xd0, 0xa3, 0x6b, 0x1e, 0x4e, 0x3c, 0x00, + 0xd4, 0xee, 0x00, 0x00, 0x1d, 0x1c, 0x7f, 0x35, + 0x98, 0x36, 0x00, 0x2d, 0x14, 0xd0, 0x55, 0x8a, + 0x00, 0x2d, 0x08, 0xd1, 0x55, 0x69, 0xab, 0x42, + 0x0f, 0xda, 0x00, 0x20, 0x17, 0x4d, 0x01, 0x23, + 0x6b, 0x61, 0x0a, 0xe0, 0x29, 0xe0, 0xf5, 0x78, + 0x02, 0x2d, 0x06, 0xd1, 0x14, 0x4f, 0x55, 0x69, + 0x3f, 0x68, 0xed, 0x19, 0xab, 0x42, 0x00, 0xda, + 0x00, 0x20, 0x23, 0x6c, 0x1d, 0x1c, 0x7f, 0x35, + 0x3c, 0x00, 0x10, 0xef, 0x00, 0x00, 0x10, 0xd0, + 0x55, 0x8a, 0x00, 0x2d, 0x03, 0xd1, 0x95, 0x69, + 0xab, 0x42, 0x0a, 0xd2, 0x08, 0xe0, 0xf5, 0x78, + 0x02, 0x2d, 0x06, 0xd1, 0x0b, 0x4e, 0x95, 0x69, + 0x36, 0x68, 0xad, 0x19, 0xab, 0x42, 0x00, 0xd2, + 0x00, 0x21, 0x08, 0x43, 0x08, 0xd0, 0x10, 0x6a, + 0x00, 0x28, 0x01, 0xd0, 0xf1, 0xf7, 0x4b, 0xfa, + 0x00, 0x21, 0x20, 0x1c, 0x01, 0xf0, 0xb9, 0xf9, + 0xfe, 0xbd, 0x3c, 0x00, 0x4c, 0xef, 0x00, 0x00, + 0xec, 0x65, 0x01, 0x00, 0xc4, 0x67, 0x01, 0x00, + 0xcc, 0x67, 0x01, 0x00, 0x3e, 0xb5, 0x05, 0x6a, + 0x04, 0x1c, 0xc0, 0x68, 0xf2, 0xf7, 0x34, 0xfb, + 0xe1, 0x69, 0xf2, 0xf7, 0x57, 0xfa, 0x20, 0x1c, + 0x40, 0x30, 0xc1, 0x8b, 0x04, 0x31, 0xc1, 0x83, + 0x2b, 0x69, 0x10, 0x49, 0x98, 0x79, 0x06, 0x28, + 0x0a, 0xd1, 0x98, 0x88, 0x01, 0x91, 0x02, 0x94, + 0x00, 0x90, 0x60, 0x69, 0x3c, 0x00, 0x88, 0xef, + 0x00, 0x00, 0x1b, 0x68, 0x01, 0x68, 0xe0, 0x68, + 0x03, 0x22, 0xc0, 0x68, 0x0a, 0xe0, 0x02, 0x28, + 0x0b, 0xd1, 0x10, 0x20, 0x00, 0x90, 0x01, 0x91, + 0x02, 0x94, 0xe0, 0x68, 0xa3, 0x69, 0xc0, 0x68, + 0x00, 0x22, 0x00, 0x21, 0xf7, 0xf7, 0x0f, 0xfb, + 0x3e, 0xbd, 0xf2, 0xf7, 0xa6, 0xf9, 0xfb, 0xe7, + 0x00, 0x00, 0xbd, 0xef, 0x00, 0x00, 0x80, 0xb5, + 0xd1, 0x68, 0x50, 0x69, 0xc9, 0x68, 0x3c, 0x00, + 0xc4, 0xef, 0x00, 0x00, 0xc1, 0x60, 0xd1, 0x68, + 0xc8, 0x60, 0x11, 0x1c, 0x40, 0x31, 0xcb, 0x8b, + 0x00, 0x89, 0x18, 0x18, 0xc8, 0x83, 0x10, 0x68, + 0x00, 0x28, 0x02, 0xd0, 0xff, 0xf7, 0xbc, 0xff, + 0x80, 0xbd, 0x03, 0x48, 0xfb, 0xf7, 0xcc, 0xf8, + 0x00, 0x6a, 0xfe, 0xf7, 0xf5, 0xf9, 0x80, 0xbd, + 0xa0, 0x6a, 0x01, 0x00, 0xf8, 0xb5, 0x06, 0x1c, + 0x0a, 0x24, 0x30, 0x07, 0x01, 0x09, 0xa0, 0x07, + 0x3c, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x01, 0x43, + 0x0f, 0x1c, 0x0a, 0x4d, 0x2f, 0x60, 0x04, 0xf0, + 0xfa, 0xfe, 0xad, 0x68, 0x28, 0x01, 0x00, 0x0f, + 0xb0, 0x42, 0x05, 0xd0, 0x01, 0x3c, 0xf4, 0xd2, + 0x01, 0x21, 0x9b, 0x20, 0xf2, 0xf7, 0x41, 0xf9, + 0x28, 0x02, 0x00, 0x0a, 0x08, 0x2e, 0x01, 0xd1, + 0x31, 0x05, 0x08, 0x43, 0xf8, 0xbd, 0x60, 0x00, + 0x07, 0x00, 0x01, 0x22, 0xd2, 0x05, 0x80, 0xb5, + 0x00, 0x21, 0x3c, 0x00, 0x3c, 0xf0, 0x00, 0x00, + 0x04, 0x20, 0x04, 0xf0, 0xdd, 0xfc, 0x0f, 0x20, + 0xff, 0xf7, 0xd6, 0xff, 0x0f, 0x21, 0x09, 0x04, + 0x08, 0x40, 0x00, 0x0c, 0x80, 0xbd, 0x00, 0x00, + 0x80, 0xb5, 0x05, 0x48, 0xfd, 0xf7, 0x4a, 0xf9, + 0x04, 0x48, 0xfd, 0xf7, 0x7b, 0xf8, 0x04, 0x48, + 0xfd, 0xf7, 0x6c, 0xf8, 0x80, 0xbd, 0x00, 0x00, + 0x89, 0x34, 0x01, 0x00, 0xed, 0x24, 0x00, 0x00, + 0x11, 0x1c, 0x00, 0x00, 0x3c, 0x00, 0x78, 0xf0, + 0x00, 0x00, 0x80, 0xb5, 0x02, 0x48, 0xf3, 0xf7, + 0x2a, 0xfc, 0x80, 0xbd, 0x00, 0x00, 0xd1, 0x24, + 0x00, 0x00, 0x80, 0xb5, 0xf2, 0xf7, 0x53, 0xf9, + 0x80, 0xbd, 0x80, 0xb5, 0x00, 0x21, 0x00, 0x20, + 0x01, 0xf0, 0x51, 0xfe, 0x03, 0x20, 0x02, 0xf0, + 0x46, 0xff, 0x80, 0xbd, 0x00, 0x00, 0x06, 0x48, + 0x80, 0xb5, 0xc1, 0x69, 0x00, 0x29, 0x06, 0xd1, + 0x01, 0x6a, 0x00, 0x29, 0x03, 0xd1, 0x3c, 0x00, + 0xb4, 0xf0, 0x00, 0x00, 0x81, 0x6b, 0x03, 0x48, + 0x00, 0xf0, 0x5e, 0xf9, 0x80, 0xbd, 0x00, 0x00, + 0xc4, 0x69, 0x01, 0x00, 0x34, 0x63, 0x01, 0x00, + 0x10, 0xb5, 0x04, 0x4c, 0x20, 0x6a, 0xfc, 0xf7, + 0xb3, 0xfb, 0x03, 0x48, 0x21, 0x6a, 0x00, 0xf0, + 0x4f, 0xf9, 0x10, 0xbd, 0x1c, 0x75, 0x01, 0x00, + 0x34, 0x63, 0x01, 0x00, 0xb0, 0xb5, 0x0d, 0x4c, + 0x20, 0x7c, 0x00, 0x28, 0x02, 0xd0, 0x01, 0x21, + 0x3c, 0x00, 0xf0, 0xf0, 0x00, 0x00, 0xfd, 0xf7, + 0x86, 0xf9, 0x00, 0x25, 0x25, 0x70, 0xa0, 0x68, + 0x01, 0x28, 0x03, 0xd1, 0x00, 0x20, 0xa5, 0x60, + 0x01, 0xf0, 0x8f, 0xf8, 0xa0, 0x78, 0x01, 0x28, + 0x05, 0xd1, 0x03, 0x48, 0x98, 0x38, 0x00, 0x69, + 0xfc, 0xf7, 0xef, 0xfb, 0xa5, 0x70, 0xb0, 0xbd, + 0x00, 0x00, 0x84, 0x66, 0x01, 0x00, 0x80, 0xb5, + 0x00, 0x21, 0x01, 0x20, 0x01, 0xf0, 0x09, 0xfe, + 0x80, 0xbd, 0x3c, 0x00, 0x2c, 0xf1, 0x00, 0x00, + 0x38, 0xb5, 0x69, 0x46, 0x00, 0x25, 0xf8, 0xf7, + 0xb7, 0xfe, 0x04, 0x1c, 0x01, 0xd1, 0x01, 0x20, + 0x38, 0xbd, 0xa0, 0x68, 0x00, 0x28, 0x04, 0xd0, + 0x00, 0x99, 0xa1, 0x31, 0x08, 0x20, 0x04, 0xf0, + 0x73, 0xfa, 0x1c, 0x21, 0x20, 0x1c, 0xf1, 0xf7, + 0xa3, 0xf9, 0x28, 0x1c, 0xf0, 0xe7, 0x00, 0x00, + 0xfe, 0xb5, 0x07, 0x1c, 0x4c, 0x23, 0x39, 0x49, + 0x58, 0x43, 0x44, 0x18, 0x3c, 0x00, 0x68, 0xf1, + 0x00, 0x00, 0x25, 0x1c, 0x40, 0x35, 0x28, 0x7a, + 0x37, 0x49, 0x48, 0x76, 0x21, 0x1c, 0x30, 0x31, + 0x02, 0x91, 0x0c, 0x23, 0xc8, 0x56, 0x42, 0x1c, + 0x0a, 0x73, 0x49, 0x7b, 0x88, 0x42, 0x46, 0xda, + 0x32, 0x48, 0x00, 0x78, 0x80, 0x07, 0x3e, 0xd5, + 0x00, 0x20, 0x01, 0x90, 0xf6, 0xf7, 0xaf, 0xfa, + 0x00, 0x28, 0x2e, 0xd0, 0xac, 0x21, 0x09, 0x58, + 0x00, 0x29, 0x01, 0xd0, 0xe4, 0x30, 0x3c, 0x00, + 0xa4, 0xf1, 0x00, 0x00, 0x00, 0xe0, 0xcc, 0x30, + 0x06, 0x1c, 0x40, 0x68, 0x00, 0x28, 0x25, 0xd0, + 0x02, 0x99, 0x08, 0x7b, 0x01, 0x28, 0x11, 0xd1, + 0x20, 0x1c, 0x2e, 0x30, 0x29, 0x78, 0xf6, 0xf7, + 0xed, 0xf9, 0x71, 0x68, 0x03, 0xe0, 0x72, 0x18, + 0x12, 0x7a, 0x82, 0x42, 0x03, 0xd9, 0xff, 0x31, + 0x09, 0x06, 0x09, 0x0e, 0xf7, 0xd1, 0xa9, 0x70, + 0x01, 0x20, 0x01, 0x90, 0x23, 0x1c, 0x3e, 0x33, + 0x3c, 0x00, 0xe0, 0xf1, 0x00, 0x00, 0x1a, 0x1d, + 0x30, 0x1c, 0x00, 0x97, 0x01, 0x99, 0xf8, 0xf7, + 0x58, 0xfa, 0x00, 0x28, 0x11, 0xd0, 0xa8, 0x78, + 0x80, 0x19, 0x00, 0x7a, 0x00, 0xe0, 0x00, 0x20, + 0x68, 0x70, 0x68, 0x78, 0x01, 0x21, 0xfb, 0xf7, + 0xe0, 0xfd, 0x60, 0x60, 0x38, 0x1c, 0x01, 0xf0, + 0x14, 0xfe, 0x38, 0x1c, 0x01, 0xf0, 0xa5, 0xfb, + 0xfe, 0xbd, 0x02, 0x99, 0x08, 0x7b, 0xff, 0x30, + 0x48, 0x73, 0x3c, 0x00, 0x1c, 0xf2, 0x00, 0x00, + 0x38, 0x1c, 0xfc, 0xf7, 0x19, 0xfc, 0x03, 0xf0, + 0xc3, 0xfd, 0x06, 0x1c, 0xfb, 0xf7, 0x8e, 0xfe, + 0x41, 0x00, 0x76, 0x18, 0x68, 0x78, 0x61, 0x68, + 0xfb, 0xf7, 0x6a, 0xfe, 0x31, 0x18, 0x20, 0x8d, + 0x3b, 0x1c, 0x05, 0x4a, 0x03, 0xf0, 0x12, 0xfe, + 0xe5, 0xe7, 0x00, 0x00, 0x58, 0xe3, 0x01, 0x00, + 0x30, 0x80, 0x07, 0x00, 0x1d, 0x75, 0x01, 0x00, + 0xd5, 0x4e, 0x00, 0x00, 0x3c, 0x00, 0x58, 0xf2, + 0x00, 0x00, 0x03, 0x1c, 0x04, 0x48, 0x80, 0xb5, + 0x02, 0x79, 0x20, 0x30, 0x03, 0x49, 0x00, 0xf0, + 0x30, 0xf8, 0x80, 0xbd, 0x00, 0x00, 0xac, 0x7c, + 0x01, 0x00, 0xc4, 0x67, 0x01, 0x00, 0x03, 0x1c, + 0x04, 0x48, 0x80, 0xb5, 0xc2, 0x78, 0x38, 0x30, + 0x03, 0x49, 0x00, 0xf0, 0x22, 0xf8, 0x80, 0xbd, + 0x00, 0x00, 0xac, 0x7c, 0x01, 0x00, 0xc8, 0x67, + 0x01, 0x00, 0x03, 0x1c, 0x04, 0x48, 0x3c, 0x00, + 0x94, 0xf2, 0x00, 0x00, 0x80, 0xb5, 0x82, 0x79, + 0x50, 0x30, 0x03, 0x49, 0x00, 0xf0, 0x14, 0xf8, + 0x80, 0xbd, 0x00, 0x00, 0xac, 0x7c, 0x01, 0x00, + 0xcc, 0x67, 0x01, 0x00, 0x03, 0x1c, 0x04, 0x48, + 0x80, 0xb5, 0x42, 0x79, 0x68, 0x30, 0x03, 0x49, + 0x00, 0xf0, 0x06, 0xf8, 0x80, 0xbd, 0x00, 0x00, + 0xac, 0x7c, 0x01, 0x00, 0xd0, 0x67, 0x01, 0x00, + 0x10, 0xb5, 0x00, 0x24, 0x84, 0x80, 0x0b, 0x60, + 0x3c, 0x00, 0xd0, 0xf2, 0x00, 0x00, 0x19, 0x1c, + 0x51, 0x43, 0x01, 0x60, 0x19, 0x06, 0x09, 0x16, + 0x10, 0x22, 0x06, 0x30, 0xf1, 0xf7, 0x9f, 0xf9, + 0x10, 0xbd, 0xb0, 0xb5, 0x06, 0x4d, 0x00, 0x24, + 0xac, 0x60, 0xec, 0x60, 0xec, 0x61, 0x2c, 0x62, + 0x02, 0xf0, 0xf1, 0xfc, 0x00, 0xf0, 0x0d, 0xf8, + 0xec, 0x62, 0x2c, 0x70, 0xb0, 0xbd, 0x44, 0x7d, + 0x01, 0x00, 0x80, 0xb5, 0x80, 0x21, 0x01, 0x48, + 0xf1, 0xf7, 0x3c, 0x00, 0x0c, 0xf3, 0x00, 0x00, + 0xc7, 0xf8, 0x80, 0xbd, 0x04, 0x66, 0x01, 0x00, + 0xf8, 0xb5, 0x07, 0x4f, 0x00, 0x24, 0x00, 0x26, + 0x18, 0x20, 0x60, 0x43, 0xc5, 0x19, 0xee, 0x60, + 0x03, 0xf0, 0x42, 0xfd, 0x10, 0x35, 0x01, 0x34, + 0x02, 0x2c, 0x41, 0xc5, 0xf4, 0xdb, 0xf8, 0xbd, + 0xb8, 0x7d, 0x01, 0x00, 0x00, 0x23, 0x03, 0x60, + 0x04, 0x4b, 0x00, 0x29, 0x00, 0xd1, 0x19, 0x1c, + 0x41, 0x60, 0x00, 0x2a, 0x3c, 0x00, 0x48, 0xf3, + 0x00, 0x00, 0x00, 0xd1, 0x1a, 0x1c, 0x82, 0x60, + 0x70, 0x47, 0xbd, 0x75, 0x00, 0x00, 0x10, 0xb5, + 0x07, 0x4c, 0x20, 0x68, 0x01, 0x30, 0x20, 0x60, + 0x20, 0x28, 0x03, 0xd9, 0x58, 0x21, 0x58, 0x20, + 0xf1, 0xf7, 0x9d, 0xff, 0x21, 0x68, 0x01, 0x20, + 0x01, 0x39, 0x88, 0x40, 0x10, 0xbd, 0x60, 0x5b, + 0x01, 0x00, 0xb0, 0xb5, 0x0d, 0x1c, 0x04, 0x1c, + 0x21, 0x68, 0x00, 0x20, 0x00, 0x29, 0x3c, 0x00, + 0x84, 0xf3, 0x00, 0x00, 0x0a, 0xd0, 0xa9, 0x43, + 0x21, 0x60, 0x07, 0xd1, 0xa0, 0x68, 0xf1, 0xf7, + 0x23, 0xf8, 0x00, 0x28, 0x02, 0xd1, 0x21, 0x68, + 0x29, 0x43, 0x21, 0x60, 0xb0, 0xbd, 0x00, 0x00, + 0xb0, 0xb5, 0x0d, 0x1c, 0x04, 0x1c, 0x21, 0x68, + 0x00, 0x20, 0x29, 0x43, 0x21, 0x60, 0xa9, 0x42, + 0x07, 0xd1, 0x60, 0x68, 0xf1, 0xf7, 0x10, 0xf8, + 0x00, 0x28, 0x02, 0xd1, 0x21, 0x68, 0xa9, 0x43, + 0x3c, 0x00, 0xc0, 0xf3, 0x00, 0x00, 0x21, 0x60, + 0xb0, 0xbd, 0x1a, 0x4b, 0xb0, 0xb5, 0x9a, 0x6a, + 0x00, 0x28, 0x0b, 0xd0, 0x00, 0x2a, 0x07, 0xdb, + 0xb8, 0x24, 0x24, 0x58, 0x01, 0x3c, 0xa4, 0x1a, + 0x00, 0x19, 0xb0, 0x30, 0x00, 0x7b, 0x02, 0xe0, + 0x0e, 0x20, 0x00, 0xe0, 0x0d, 0x20, 0x5d, 0x6a, + 0x12, 0x4c, 0x00, 0x2d, 0x01, 0xd0, 0x20, 0x78, + 0x00, 0xe0, 0x20, 0x5c, 0xff, 0x24, 0xa8, 0x34, + 0xc4, 0x40, 0x3c, 0x00, 0xfc, 0xf3, 0x00, 0x00, + 0x9c, 0x60, 0xf5, 0x24, 0xc4, 0x40, 0x9c, 0x61, + 0xfd, 0x24, 0xc4, 0x40, 0xdc, 0x61, 0xff, 0x24, + 0x29, 0x34, 0xc4, 0x40, 0x5c, 0x61, 0xff, 0x24, + 0x53, 0x34, 0xc4, 0x40, 0x00, 0x20, 0x0c, 0x33, + 0x11, 0xc3, 0x00, 0x29, 0x05, 0xd0, 0x00, 0x2a, + 0x03, 0xdc, 0x02, 0x21, 0x50, 0x42, 0x00, 0xf0, + 0x65, 0xfb, 0xb0, 0xbd, 0xac, 0x7e, 0x01, 0x00, + 0xb8, 0x52, 0x01, 0x00, 0x3c, 0x00, 0x38, 0xf4, + 0x00, 0x00, 0x10, 0xb5, 0x13, 0x4c, 0x13, 0x48, + 0x21, 0x1c, 0xff, 0x31, 0x69, 0x31, 0x0e, 0xc9, + 0x0e, 0xc0, 0x21, 0x1c, 0xff, 0x31, 0x24, 0x22, + 0x75, 0x31, 0x0f, 0x48, 0xf1, 0xf7, 0x51, 0xf8, + 0x21, 0x1c, 0xff, 0x31, 0x3c, 0x22, 0x99, 0x31, + 0x0d, 0x48, 0xf1, 0xf7, 0xa6, 0xf8, 0xfc, 0xf7, + 0xa2, 0xff, 0x21, 0x1c, 0xff, 0x31, 0x10, 0x22, + 0xd5, 0x31, 0x09, 0x48, 0xf1, 0xf7, 0x3c, 0x00, + 0x74, 0xf4, 0x00, 0x00, 0x41, 0xf8, 0x21, 0x1c, + 0xff, 0x31, 0x28, 0x22, 0xe5, 0x31, 0x07, 0x48, + 0xf1, 0xf7, 0x96, 0xf8, 0x10, 0xbd, 0x00, 0x00, + 0x40, 0x63, 0x01, 0x00, 0x00, 0x80, 0x07, 0x00, + 0x0c, 0x80, 0x07, 0x00, 0x30, 0x80, 0x07, 0x00, + 0x80, 0x80, 0x07, 0x00, 0xa0, 0x80, 0x07, 0x00, + 0xf8, 0xb5, 0x00, 0x28, 0x59, 0xd0, 0x04, 0xf0, + 0x4b, 0xf9, 0xf8, 0xf7, 0xb3, 0xfb, 0x00, 0x22, + 0x3c, 0x00, 0xb0, 0xf4, 0x00, 0x00, 0x01, 0x21, + 0x13, 0x20, 0x04, 0xf0, 0x7c, 0xf9, 0x2a, 0x49, + 0x29, 0x48, 0x49, 0x6c, 0x01, 0x60, 0x00, 0x21, + 0x29, 0x48, 0xc9, 0x43, 0x41, 0x60, 0x26, 0x4c, + 0x14, 0x34, 0x61, 0x6c, 0x81, 0x60, 0xa1, 0x6c, + 0xc1, 0x60, 0x00, 0x20, 0x25, 0x4d, 0x02, 0x26, + 0x01, 0x01, 0x6e, 0x50, 0x0a, 0x19, 0x4f, 0x19, + 0x50, 0x32, 0x04, 0x37, 0x0e, 0xca, 0x01, 0x30, + 0x08, 0x28, 0x3c, 0x00, 0xec, 0xf4, 0x00, 0x00, + 0x0e, 0xc7, 0xf4, 0xdb, 0x14, 0x22, 0x21, 0x1c, + 0xcc, 0x31, 0x1e, 0x48, 0xf1, 0xf7, 0x5a, 0xf8, + 0x1d, 0x48, 0x81, 0x78, 0x09, 0x09, 0x09, 0x01, + 0x81, 0x70, 0x00, 0x21, 0xc1, 0x70, 0x41, 0x70, + 0x21, 0x1c, 0xe0, 0x31, 0x0a, 0x78, 0x02, 0x70, + 0x49, 0x78, 0x41, 0x70, 0x21, 0x1c, 0xe8, 0x31, + 0x30, 0x22, 0x08, 0x30, 0xf1, 0xf7, 0x46, 0xf8, + 0x21, 0x1c, 0xff, 0x31, 0x3c, 0x00, 0x28, 0xf5, + 0x00, 0x00, 0x50, 0x22, 0x19, 0x31, 0x12, 0x48, + 0xf1, 0xf7, 0x3f, 0xf8, 0x83, 0x20, 0x80, 0x00, + 0x14, 0x22, 0x21, 0x18, 0x10, 0x48, 0xf1, 0xf7, + 0x38, 0xf8, 0x11, 0x20, 0x40, 0x01, 0x84, 0x22, + 0x21, 0x18, 0x0d, 0x48, 0xf1, 0xf7, 0x31, 0xf8, + 0xff, 0xf7, 0x73, 0xff, 0x20, 0x1c, 0xf1, 0xf7, + 0x28, 0xfd, 0xf8, 0xbd, 0xff, 0xf7, 0x6d, 0xff, + 0xfb, 0xe7, 0x08, 0x20, 0x07, 0x00, 0x3c, 0x00, + 0x64, 0xf5, 0x00, 0x00, 0x2c, 0x63, 0x01, 0x00, + 0x40, 0x20, 0x07, 0x00, 0x00, 0x30, 0x07, 0x00, + 0x00, 0x40, 0x07, 0x00, 0x00, 0x50, 0x07, 0x00, + 0x00, 0x60, 0x07, 0x00, 0x10, 0x00, 0x07, 0x00, + 0x00, 0x90, 0x07, 0x00, 0xf8, 0xb5, 0x05, 0x1c, + 0x18, 0x48, 0xc0, 0x68, 0x00, 0x28, 0x25, 0xd0, + 0x16, 0x4e, 0x01, 0x36, 0x74, 0x78, 0x30, 0x78, + 0x27, 0x1a, 0x79, 0x19, 0x20, 0x1c, 0xf1, 0xf7, + 0x3c, 0x00, 0xa0, 0xf5, 0x00, 0x00, 0x4b, 0xf8, + 0x00, 0x90, 0x29, 0x1c, 0x20, 0x1c, 0xf1, 0xf7, + 0xb2, 0xf8, 0xc1, 0x19, 0x20, 0x1c, 0xf1, 0xf7, + 0x42, 0xf8, 0x60, 0x1a, 0x30, 0x70, 0x70, 0x1e, + 0x80, 0x68, 0x00, 0x28, 0x0d, 0xd0, 0x53, 0x36, + 0xf4, 0x78, 0x00, 0x99, 0x20, 0x1c, 0xf1, 0xf7, + 0xa2, 0xf8, 0xb1, 0x78, 0x61, 0x1a, 0x41, 0x18, + 0x20, 0x1c, 0xf1, 0xf7, 0x9c, 0xf8, 0x60, 0x1a, + 0xb0, 0x70, 0x3c, 0x00, 0xdc, 0xf5, 0x00, 0x00, + 0x03, 0x48, 0x5c, 0x30, 0x01, 0x69, 0xc2, 0x68, + 0x69, 0x43, 0x51, 0x18, 0xc1, 0x60, 0xf8, 0xbd, + 0x44, 0x7d, 0x01, 0x00, 0xb0, 0xb5, 0x0c, 0x4d, + 0xe8, 0x68, 0x29, 0x69, 0x40, 0x18, 0x7d, 0x21, + 0x09, 0x01, 0x44, 0x18, 0x20, 0x1c, 0x03, 0xf0, + 0x0b, 0xfb, 0x00, 0x28, 0x0a, 0xd0, 0x03, 0xf0, + 0xcf, 0xfb, 0x01, 0x1b, 0x28, 0x69, 0xf1, 0xf7, + 0x7d, 0xf8, 0x01, 0x30, 0x3c, 0x00, 0x18, 0xf6, + 0x00, 0x00, 0x00, 0x04, 0x00, 0x0c, 0xff, 0xf7, + 0xb2, 0xff, 0xb0, 0xbd, 0x00, 0x00, 0xa0, 0x7d, + 0x01, 0x00, 0x70, 0xb5, 0x10, 0x4c, 0x60, 0x68, + 0x80, 0x25, 0xa8, 0x43, 0x60, 0x60, 0x20, 0x68, + 0x28, 0x43, 0x20, 0x60, 0x0d, 0x4e, 0x30, 0x1c, + 0x10, 0x30, 0xf3, 0xf7, 0xc8, 0xfc, 0x00, 0x28, + 0x03, 0xd1, 0x07, 0x21, 0x85, 0x20, 0xf1, 0xf7, + 0x2a, 0xfe, 0x08, 0x48, 0x00, 0x21, 0x3c, 0x00, + 0x54, 0xf6, 0x00, 0x00, 0x80, 0x68, 0x41, 0x63, + 0xc0, 0x6c, 0x10, 0x30, 0x70, 0x61, 0x01, 0x20, + 0x30, 0x61, 0x20, 0x68, 0xa8, 0x43, 0x20, 0x60, + 0x70, 0xbd, 0x00, 0x00, 0xf4, 0x00, 0x07, 0x00, + 0x00, 0x30, 0x07, 0x00, 0x24, 0x7e, 0x01, 0x00, + 0x01, 0x1c, 0x00, 0x20, 0x05, 0x29, 0x80, 0xb5, + 0x09, 0xd2, 0x02, 0xa3, 0x5b, 0x5c, 0x5b, 0x00, + 0x9f, 0x44, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, + 0x3c, 0x00, 0x90, 0xf6, 0x00, 0x00, 0x03, 0x00, + 0xff, 0xf7, 0xcf, 0xfc, 0x80, 0xbd, 0x01, 0x22, + 0x92, 0x02, 0x80, 0xb5, 0x00, 0x21, 0x07, 0x20, + 0x04, 0xf0, 0xab, 0xf9, 0x80, 0xbd, 0x80, 0xb5, + 0x40, 0x22, 0x00, 0x21, 0x00, 0x20, 0x04, 0xf0, + 0xa4, 0xf9, 0x03, 0x22, 0x00, 0x21, 0x00, 0x20, + 0x04, 0xf0, 0x9f, 0xf9, 0x80, 0xbd, 0x70, 0xb5, + 0x0e, 0x1c, 0x05, 0x1c, 0x14, 0x1c, 0x08, 0x28, + 0x0e, 0xd1, 0x3c, 0x00, 0xcc, 0xf6, 0x00, 0x00, + 0x00, 0xf0, 0x00, 0xfc, 0x0e, 0x28, 0x01, 0xd1, + 0x14, 0x20, 0x00, 0xe0, 0x10, 0x20, 0xe1, 0x03, + 0x00, 0xd5, 0x01, 0x38, 0xc0, 0x06, 0x0a, 0x49, + 0xc0, 0x0e, 0x88, 0x71, 0x08, 0xe0, 0x09, 0x2d, + 0x06, 0xd1, 0xa0, 0x04, 0x01, 0xd5, 0x00, 0x20, + 0x00, 0xe0, 0x01, 0x20, 0xf3, 0xf7, 0xb0, 0xf9, + 0x34, 0x40, 0x21, 0x1c, 0x32, 0x1c, 0x28, 0x1c, + 0x04, 0xf0, 0x7a, 0xf9, 0x3c, 0x00, 0x08, 0xf7, + 0x00, 0x00, 0x70, 0xbd, 0x00, 0x00, 0x00, 0x80, + 0x07, 0x00, 0x70, 0xb5, 0x00, 0x24, 0x13, 0x29, + 0x11, 0xd8, 0x00, 0x28, 0x01, 0xd1, 0x08, 0x4e, + 0x08, 0x25, 0x01, 0x28, 0x01, 0xd1, 0x07, 0x4e, + 0x09, 0x25, 0x00, 0xf0, 0x78, 0xfa, 0x00, 0x28, + 0x05, 0xd0, 0x02, 0x1c, 0x31, 0x1c, 0x28, 0x1c, + 0xff, 0xf7, 0xc3, 0xff, 0x01, 0x24, 0x20, 0x1c, + 0x70, 0xbd, 0xf8, 0xff, 0x07, 0x00, 0x3c, 0x00, + 0x44, 0xf7, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, + 0x01, 0x22, 0xd2, 0x02, 0x80, 0xb5, 0x00, 0x21, + 0x07, 0x20, 0x04, 0xf0, 0x53, 0xf9, 0x80, 0xbd, + 0x0f, 0x22, 0x12, 0x04, 0x07, 0x21, 0x49, 0x04, + 0x80, 0xb5, 0x09, 0x20, 0x04, 0xf0, 0x4a, 0xf9, + 0x80, 0xbd, 0x00, 0x00, 0x80, 0xb5, 0x00, 0x21, + 0x04, 0x20, 0x04, 0xf0, 0x1b, 0xfc, 0x40, 0x21, + 0x00, 0x20, 0x04, 0xf0, 0x17, 0xfc, 0x04, 0x49, + 0x3c, 0x00, 0x80, 0xf7, 0x00, 0x00, 0x00, 0x20, + 0x88, 0x60, 0x02, 0x48, 0x09, 0x69, 0x20, 0x30, + 0xff, 0xf7, 0x09, 0xfe, 0x80, 0xbd, 0x64, 0x73, + 0x01, 0x00, 0xb0, 0xb5, 0x60, 0x21, 0x00, 0x20, + 0x04, 0xf0, 0x07, 0xfc, 0x11, 0x4d, 0x00, 0x24, + 0x00, 0x22, 0x04, 0x20, 0x29, 0x5d, 0x04, 0xf0, + 0x28, 0xf9, 0x0c, 0x20, 0x03, 0xf0, 0x9b, 0xfb, + 0x01, 0x34, 0x24, 0x06, 0x24, 0x0e, 0x05, 0x2c, + 0xf2, 0xd3, 0x3c, 0x00, 0xbc, 0xf7, 0x00, 0x00, + 0x0f, 0x22, 0x00, 0x21, 0x0a, 0x20, 0x04, 0xf0, + 0x1b, 0xf9, 0x61, 0x21, 0x00, 0x20, 0x04, 0xf0, + 0xef, 0xfb, 0x06, 0x49, 0x01, 0x20, 0x88, 0x60, + 0x04, 0x48, 0x09, 0x69, 0x20, 0x30, 0xff, 0xf7, + 0xcd, 0xfd, 0xff, 0x20, 0x2d, 0x30, 0xb0, 0xbd, + 0xa8, 0x58, 0x01, 0x00, 0x64, 0x73, 0x01, 0x00, + 0xf8, 0xb5, 0x06, 0x1c, 0x12, 0x48, 0xc6, 0x70, + 0x01, 0x20, 0xff, 0xf7, 0x3c, 0x00, 0xf8, 0xf7, + 0x00, 0x00, 0xfd, 0xfb, 0x01, 0x27, 0xbf, 0x02, + 0x04, 0x1c, 0xb8, 0x43, 0x01, 0x1c, 0x01, 0x20, + 0x04, 0xf0, 0xd1, 0xfb, 0x03, 0x20, 0xff, 0xf7, + 0xf2, 0xfb, 0x05, 0x1c, 0xb8, 0x43, 0x01, 0x1c, + 0x03, 0x20, 0x04, 0xf0, 0xc8, 0xfb, 0x30, 0x1c, + 0x00, 0xf0, 0x9f, 0xf9, 0x00, 0xf0, 0x57, 0xf8, + 0x21, 0x1c, 0x01, 0x20, 0x04, 0xf0, 0xbf, 0xfb, + 0x29, 0x1c, 0x03, 0x20, 0x04, 0xf0, 0x3c, 0x00, + 0x34, 0xf8, 0x00, 0x00, 0xbb, 0xfb, 0x00, 0x20, + 0xf8, 0xbd, 0x00, 0x00, 0x64, 0x73, 0x01, 0x00, + 0x80, 0xb5, 0x00, 0x22, 0x40, 0x21, 0x00, 0x20, + 0x04, 0xf0, 0xd8, 0xf8, 0x80, 0xbd, 0x00, 0x00, + 0x70, 0xb5, 0x05, 0x1c, 0x01, 0x24, 0x09, 0x20, + 0xff, 0xf7, 0xcc, 0xfb, 0x0f, 0x21, 0x09, 0x04, + 0x88, 0x43, 0x03, 0x21, 0x89, 0x04, 0xe2, 0x04, + 0x05, 0x2d, 0x12, 0x4e, 0x20, 0xd2, 0x02, 0xa3, + 0x3c, 0x00, 0x70, 0xf8, 0x00, 0x00, 0x5b, 0x5d, + 0x5b, 0x00, 0x9f, 0x44, 0x00, 0x00, 0x06, 0x09, + 0x0c, 0x10, 0x03, 0x00, 0x03, 0x21, 0x09, 0x04, + 0x0c, 0xe0, 0x01, 0x21, 0x09, 0x04, 0x09, 0xe0, + 0x01, 0x21, 0x49, 0x04, 0x06, 0xe0, 0xf3, 0x68, + 0x04, 0x2b, 0x05, 0xd9, 0x02, 0xe0, 0xf3, 0x68, + 0x04, 0x2b, 0x01, 0xd8, 0x01, 0x43, 0x01, 0xe0, + 0x10, 0x43, 0x01, 0x1c, 0x09, 0x20, 0x04, 0xf0, + 0x80, 0xfb, 0x3c, 0x00, 0xac, 0xf8, 0x00, 0x00, + 0x20, 0x1c, 0x70, 0xbd, 0x00, 0x24, 0xfb, 0xe7, + 0x64, 0x73, 0x01, 0x00, 0x01, 0x21, 0xc9, 0x05, + 0x00, 0x28, 0x80, 0xb5, 0x02, 0xd0, 0x0a, 0x1c, + 0x00, 0x21, 0x00, 0xe0, 0x00, 0x22, 0x04, 0x20, + 0x04, 0xf0, 0x96, 0xf8, 0x80, 0xbd, 0x00, 0x00, + 0xf0, 0xb5, 0x91, 0xb0, 0x00, 0x26, 0x40, 0x21, + 0x01, 0xa8, 0xf0, 0xf7, 0xdd, 0xfd, 0x2a, 0x4f, + 0xb8, 0x79, 0x01, 0x22, 0x3c, 0x00, 0xe8, 0xf8, + 0x00, 0x00, 0x52, 0x03, 0x00, 0x90, 0x00, 0x21, + 0x06, 0x20, 0x04, 0xf0, 0x84, 0xf8, 0x60, 0x21, + 0x00, 0x20, 0x04, 0xf0, 0x58, 0xfb, 0x61, 0x21, + 0x00, 0x20, 0x04, 0xf0, 0x54, 0xfb, 0x08, 0x20, + 0x03, 0xf0, 0xef, 0xfa, 0x00, 0x24, 0x0f, 0x20, + 0xff, 0xf7, 0x71, 0xfb, 0x40, 0x05, 0x05, 0x0f, + 0xa8, 0x00, 0x01, 0xa9, 0x09, 0x58, 0x01, 0xaa, + 0x01, 0x31, 0x01, 0x34, 0x0c, 0x2c, 0x3c, 0x00, + 0x24, 0xf9, 0x00, 0x00, 0x11, 0x50, 0xf1, 0xd3, + 0x00, 0x20, 0x81, 0x00, 0x01, 0xaa, 0x51, 0x58, + 0xb1, 0x42, 0x01, 0xd9, 0x0e, 0x1c, 0x05, 0x1c, + 0x01, 0x30, 0x10, 0x28, 0xf5, 0xd3, 0x06, 0x20, + 0xff, 0xf7, 0x58, 0xfb, 0x0f, 0x21, 0x49, 0x02, + 0x88, 0x43, 0x69, 0x02, 0x08, 0x43, 0x01, 0x21, + 0x49, 0x03, 0x01, 0x43, 0x06, 0x20, 0x04, 0xf0, + 0x29, 0xfb, 0x0d, 0x48, 0x84, 0x68, 0x64, 0x34, + 0x3c, 0x00, 0x60, 0xf9, 0x00, 0x00, 0x08, 0xe0, + 0x20, 0x1c, 0x03, 0xf0, 0x5a, 0xf9, 0x00, 0x28, + 0x03, 0xd0, 0x01, 0x21, 0x95, 0x20, 0xf1, 0xf7, + 0x98, 0xfc, 0x0f, 0x20, 0xff, 0xf7, 0x3d, 0xfb, + 0x00, 0x04, 0xf1, 0xd5, 0x87, 0x20, 0x03, 0xf0, + 0xb2, 0xfa, 0x00, 0x98, 0xb8, 0x71, 0x11, 0xb0, + 0xf0, 0xbd, 0x20, 0x10, 0x07, 0x00, 0x00, 0x01, + 0x07, 0x00, 0x10, 0xb5, 0x17, 0x4c, 0x61, 0x69, + 0x00, 0x29, 0x3c, 0x00, 0x9c, 0xf9, 0x00, 0x00, + 0x04, 0xd0, 0x0a, 0x21, 0x13, 0x20, 0x03, 0xf0, + 0x47, 0xfe, 0x10, 0xbd, 0x01, 0x1c, 0x12, 0x48, + 0x01, 0x29, 0x00, 0x78, 0x0c, 0xd0, 0x11, 0x29, + 0xf7, 0xd1, 0x05, 0x28, 0x03, 0xd1, 0x01, 0x21, + 0x13, 0x20, 0xf1, 0xf7, 0x71, 0xfc, 0x20, 0x78, + 0x07, 0x28, 0xee, 0xd1, 0x02, 0x21, 0x0a, 0xe0, + 0x05, 0x28, 0x07, 0xd0, 0x06, 0x28, 0x0a, 0xd0, + 0x07, 0x28, 0xf7, 0xd0, 0x3c, 0x00, 0xd8, 0xf9, + 0x00, 0x00, 0x08, 0x28, 0xe4, 0xd1, 0x00, 0x20, + 0x05, 0xe0, 0x01, 0x21, 0x13, 0x20, 0xf1, 0xf7, + 0x5e, 0xfc, 0x10, 0xbd, 0x01, 0x20, 0x02, 0xf0, + 0x6c, 0xfd, 0x10, 0xbd, 0x00, 0x00, 0x7c, 0x78, + 0x01, 0x00, 0x0d, 0x49, 0x80, 0xb5, 0x09, 0x78, + 0x03, 0x29, 0x01, 0xd1, 0x00, 0x28, 0x0b, 0xd0, + 0x07, 0x29, 0x01, 0xd1, 0x00, 0x28, 0x07, 0xd0, + 0x02, 0x29, 0x01, 0xd1, 0x00, 0x28, 0x3c, 0x00, + 0x14, 0xfa, 0x00, 0x00, 0x03, 0xd1, 0x05, 0x29, + 0x09, 0xd1, 0x00, 0x28, 0x07, 0xd0, 0x00, 0x20, + 0xfc, 0xf7, 0x28, 0xfd, 0x00, 0x22, 0x13, 0x21, + 0x11, 0x20, 0x03, 0xf0, 0xc1, 0xfe, 0x80, 0xbd, + 0x7c, 0x78, 0x01, 0x00, 0x80, 0xb5, 0x06, 0x22, + 0x08, 0x21, 0x00, 0x20, 0x03, 0xf0, 0xde, 0xff, + 0x80, 0xbd, 0x00, 0x00, 0x07, 0x48, 0x80, 0xb5, + 0x40, 0x69, 0x00, 0x28, 0x01, 0xd1, 0xf1, 0xf7, + 0x3c, 0x00, 0x50, 0xfa, 0x00, 0x00, 0x33, 0xff, + 0x05, 0x49, 0x05, 0x4a, 0x08, 0x68, 0x50, 0x61, + 0x48, 0x68, 0x90, 0x61, 0x01, 0x20, 0x80, 0xbd, + 0x00, 0x00, 0x64, 0x73, 0x01, 0x00, 0xb0, 0x58, + 0x01, 0x00, 0x10, 0x00, 0x07, 0x00, 0x07, 0x48, + 0x80, 0xb5, 0x40, 0x69, 0x00, 0x28, 0x01, 0xd1, + 0xf1, 0xf7, 0x1d, 0xff, 0x05, 0x49, 0x05, 0x4a, + 0x08, 0x68, 0x90, 0x61, 0x48, 0x68, 0x50, 0x61, + 0x01, 0x20, 0x3c, 0x00, 0x8c, 0xfa, 0x00, 0x00, + 0x80, 0xbd, 0x00, 0x00, 0x64, 0x73, 0x01, 0x00, + 0xb0, 0x58, 0x01, 0x00, 0x10, 0x00, 0x07, 0x00, + 0x11, 0xb5, 0x00, 0xab, 0x59, 0x78, 0x14, 0x48, + 0x01, 0x23, 0xc0, 0x56, 0x00, 0x22, 0x09, 0x18, + 0x0b, 0x06, 0x1b, 0x16, 0x13, 0x21, 0x13, 0x2b, + 0x02, 0xdd, 0x00, 0xab, 0x59, 0x70, 0x07, 0xe0, + 0x00, 0x2b, 0x02, 0xda, 0x00, 0xab, 0x5a, 0x70, + 0x02, 0xe0, 0x1c, 0x1c, 0x3c, 0x00, 0xc8, 0xfa, + 0x00, 0x00, 0x00, 0xab, 0x5c, 0x70, 0x00, 0xab, + 0x1b, 0x78, 0x18, 0x18, 0x00, 0x06, 0x00, 0x16, + 0x13, 0x28, 0x02, 0xdd, 0x00, 0xab, 0x19, 0x70, + 0x06, 0xe0, 0x00, 0x28, 0x02, 0xda, 0x00, 0xab, + 0x1a, 0x70, 0x01, 0xe0, 0x00, 0xab, 0x18, 0x70, + 0x00, 0x98, 0x18, 0xbd, 0x00, 0x00, 0x64, 0x73, + 0x01, 0x00, 0x38, 0xb5, 0x0c, 0x1c, 0x15, 0x49, + 0x00, 0xab, 0x49, 0x68, 0x13, 0x25, 0x3c, 0x00, + 0x04, 0xfb, 0x00, 0x00, 0x00, 0x91, 0x59, 0x78, + 0x09, 0x18, 0x59, 0x70, 0x19, 0x78, 0x08, 0x18, + 0x18, 0x70, 0x19, 0x88, 0x10, 0x48, 0x02, 0x2c, + 0xc1, 0x80, 0x01, 0xd0, 0x00, 0x2c, 0x0b, 0xd1, + 0x00, 0xab, 0x18, 0x78, 0x13, 0x28, 0x00, 0xd9, + 0x1d, 0x70, 0x00, 0xab, 0x19, 0x78, 0x00, 0x20, + 0xff, 0xf7, 0xee, 0xfd, 0x02, 0x2c, 0x01, 0xd0, + 0x01, 0x2c, 0x09, 0xd1, 0x00, 0xab, 0x58, 0x78, + 0x3c, 0x00, 0x40, 0xfb, 0x00, 0x00, 0x13, 0x28, + 0x00, 0xd9, 0x5d, 0x70, 0x00, 0xab, 0x59, 0x78, + 0x01, 0x20, 0xff, 0xf7, 0xe0, 0xfd, 0x38, 0xbd, + 0x00, 0x00, 0x64, 0x73, 0x01, 0x00, 0xa0, 0x58, + 0x01, 0x00, 0x70, 0x47, 0x00, 0x00, 0xb0, 0xb5, + 0x04, 0x1c, 0x0e, 0x28, 0x13, 0x4d, 0x04, 0xd0, + 0x12, 0x49, 0xa0, 0x00, 0x00, 0x19, 0x4d, 0x39, + 0x45, 0x18, 0x06, 0x20, 0xff, 0xf7, 0x3d, 0xfa, + 0x0f, 0x49, 0x3c, 0x00, 0x7c, 0xfb, 0x00, 0x00, + 0xe0, 0x22, 0x09, 0x19, 0x10, 0x39, 0xc9, 0x7b, + 0x90, 0x43, 0x49, 0x01, 0x11, 0x40, 0x01, 0x43, + 0x06, 0x20, 0x04, 0xf0, 0x0d, 0xfa, 0x29, 0x1c, + 0x05, 0x20, 0x09, 0x4a, 0x03, 0xf0, 0x30, 0xff, + 0x08, 0x48, 0x1f, 0x22, 0x00, 0x19, 0x10, 0x38, + 0xc0, 0x7b, 0xc1, 0x04, 0xd2, 0x04, 0x08, 0x20, + 0x03, 0xf0, 0x26, 0xff, 0xb0, 0xbd, 0x00, 0x00, + 0xb4, 0x09, 0x00, 0x00, 0x3c, 0x00, 0xb8, 0xfb, + 0x00, 0x00, 0x14, 0x45, 0x01, 0x00, 0xff, 0x0f, + 0x00, 0x00, 0xc0, 0x58, 0x01, 0x00, 0x70, 0x47, + 0x00, 0x00, 0x80, 0xb5, 0x06, 0x49, 0x00, 0x28, + 0x01, 0xd1, 0x08, 0x68, 0x80, 0xbd, 0x01, 0x28, + 0x01, 0xd1, 0x48, 0x68, 0x80, 0xbd, 0xf1, 0xf7, + 0x90, 0xfb, 0x00, 0x20, 0x80, 0xbd, 0x7c, 0x73, + 0x01, 0x00, 0x01, 0x48, 0x40, 0x68, 0x70, 0x47, + 0x00, 0x00, 0xa0, 0x58, 0x01, 0x00, 0x3c, 0x00, + 0xf4, 0xfb, 0x00, 0x00, 0x04, 0x48, 0x01, 0x23, + 0x04, 0x49, 0xc0, 0x56, 0xc9, 0x56, 0x40, 0x18, + 0x00, 0x04, 0x00, 0x0c, 0x70, 0x47, 0x00, 0x00, + 0xa0, 0x58, 0x01, 0x00, 0xa2, 0x58, 0x01, 0x00, + 0x01, 0x48, 0x40, 0x68, 0x70, 0x47, 0x00, 0x00, + 0x64, 0x73, 0x01, 0x00, 0xf8, 0xb5, 0x05, 0x1c, + 0x0e, 0x1c, 0x00, 0xf0, 0x55, 0xf9, 0x04, 0x1c, + 0x00, 0xf0, 0x58, 0xf9, 0x00, 0x28, 0x2c, 0xd0, + 0x3c, 0x00, 0x30, 0xfc, 0x00, 0x00, 0xb3, 0x00, + 0x60, 0x1e, 0x00, 0x2d, 0x1c, 0x4e, 0x19, 0x49, + 0x1a, 0x4a, 0x06, 0xd1, 0x0b, 0x25, 0x0e, 0x2c, + 0x00, 0xd1, 0x19, 0x4a, 0xd2, 0x58, 0x08, 0x56, + 0x08, 0xe0, 0x01, 0x2d, 0x1c, 0xd1, 0x9a, 0x18, + 0x04, 0x36, 0x08, 0x18, 0x08, 0x25, 0x0e, 0x23, + 0x12, 0x6d, 0xc0, 0x56, 0x07, 0x1c, 0x47, 0x43, + 0xfb, 0x00, 0xdf, 0x19, 0x12, 0x4b, 0x3f, 0x21, + 0x58, 0x43, 0x3c, 0x00, 0x6c, 0xfc, 0x00, 0x00, + 0x11, 0x4b, 0xa9, 0x40, 0x0c, 0x1c, 0x38, 0x18, + 0xc0, 0x18, 0x14, 0x40, 0xec, 0x40, 0xc0, 0x11, + 0x60, 0x43, 0x1b, 0x0a, 0xc0, 0x18, 0x80, 0x12, + 0x03, 0xd1, 0x01, 0x20, 0x04, 0xe0, 0x00, 0x20, + 0xf8, 0xbd, 0x3f, 0x28, 0x00, 0xdd, 0x3f, 0x20, + 0x30, 0x60, 0xa8, 0x40, 0x08, 0x40, 0x8a, 0x43, + 0x10, 0x43, 0xf5, 0xe7, 0xcc, 0x59, 0x01, 0x00, + 0xdc, 0x58, 0x01, 0x00, 0x3c, 0x00, 0xa8, 0xfc, + 0x00, 0x00, 0x7c, 0x73, 0x01, 0x00, 0x7c, 0x59, + 0x01, 0x00, 0x06, 0x06, 0x00, 0x00, 0x26, 0x00, + 0x02, 0x00, 0x03, 0x48, 0x08, 0xb5, 0xc0, 0x88, + 0x00, 0xab, 0x18, 0x80, 0x00, 0x98, 0x08, 0xbd, + 0x00, 0x00, 0xa0, 0x58, 0x01, 0x00, 0xb0, 0xb5, + 0x0b, 0x4d, 0x09, 0x4c, 0x0e, 0x20, 0x6c, 0x60, + 0xff, 0xf7, 0x8d, 0xf9, 0x09, 0x49, 0x02, 0x1c, + 0xc8, 0x60, 0x01, 0x06, 0x09, 0x0e, 0x3c, 0x00, + 0xe4, 0xfc, 0x00, 0x00, 0x13, 0x3a, 0x02, 0x2a, + 0x02, 0xd9, 0x17, 0x38, 0x04, 0x28, 0x00, 0xd8, + 0x00, 0x21, 0x08, 0x1c, 0x6c, 0x60, 0xb0, 0xbd, + 0x04, 0x18, 0x02, 0x00, 0x60, 0x00, 0x07, 0x00, + 0x64, 0x73, 0x01, 0x00, 0x0a, 0x48, 0x98, 0xb5, + 0x02, 0x78, 0x13, 0x21, 0x14, 0x2a, 0x00, 0xd3, + 0x01, 0x70, 0x42, 0x78, 0x14, 0x2a, 0x00, 0xd3, + 0x41, 0x70, 0x06, 0x4c, 0x60, 0x68, 0xff, 0xf7, + 0x3c, 0x00, 0x20, 0xfd, 0x00, 0x00, 0xbd, 0xfe, + 0x00, 0x90, 0x00, 0xab, 0x18, 0x88, 0xe0, 0x80, + 0x00, 0xf0, 0x75, 0xff, 0x98, 0xbd, 0xa4, 0x58, + 0x01, 0x00, 0xa0, 0x58, 0x01, 0x00, 0x03, 0x48, + 0x80, 0xb5, 0x41, 0x78, 0x01, 0x20, 0xff, 0xf7, + 0xe6, 0xfc, 0x80, 0xbd, 0x00, 0x00, 0xa6, 0x58, + 0x01, 0x00, 0x03, 0x48, 0x80, 0xb5, 0x01, 0x78, + 0x00, 0x20, 0xff, 0xf7, 0xdc, 0xfc, 0x80, 0xbd, + 0x00, 0x00, 0x3c, 0x00, 0x5c, 0xfd, 0x00, 0x00, + 0xa6, 0x58, 0x01, 0x00, 0xb0, 0xb5, 0x05, 0x4d, + 0x00, 0x24, 0x20, 0x1c, 0xff, 0xf7, 0x44, 0xf9, + 0x01, 0x34, 0x10, 0x2c, 0x01, 0xc5, 0xf8, 0xd3, + 0xb0, 0xbd, 0x00, 0x00, 0xd4, 0x44, 0x01, 0x00, + 0x04, 0x49, 0x80, 0xb5, 0x88, 0x70, 0x04, 0x49, + 0x80, 0x00, 0x09, 0x58, 0x07, 0x20, 0x04, 0xf0, + 0x0f, 0xf9, 0x80, 0xbd, 0x64, 0x73, 0x01, 0x00, + 0xd0, 0x58, 0x01, 0x00, 0x3c, 0x00, 0x98, 0xfd, + 0x00, 0x00, 0xb0, 0xb5, 0x3f, 0x24, 0x02, 0x1c, + 0x00, 0x2a, 0x01, 0xd1, 0x08, 0x20, 0x0b, 0x23, + 0x01, 0x2a, 0x01, 0xd1, 0x09, 0x20, 0x08, 0x23, + 0x25, 0x1c, 0x9d, 0x40, 0x00, 0x29, 0x00, 0xd1, + 0x01, 0x21, 0x3f, 0x29, 0x00, 0xd9, 0x21, 0x1c, + 0x99, 0x40, 0x0a, 0x1c, 0x29, 0x1c, 0xff, 0xf7, + 0x7c, 0xfc, 0xb0, 0xbd, 0x00, 0x00, 0x91, 0xb5, + 0x12, 0x49, 0x00, 0xab, 0x1a, 0x78, 0x3c, 0x00, + 0xd4, 0xfd, 0x00, 0x00, 0x08, 0x78, 0x11, 0x4c, + 0x80, 0x18, 0x00, 0x06, 0x00, 0x0e, 0x20, 0x70, + 0x49, 0x78, 0x5a, 0x78, 0x89, 0x18, 0x09, 0x06, + 0x09, 0x0e, 0x13, 0x22, 0x13, 0x28, 0x61, 0x70, + 0x00, 0xd9, 0x22, 0x70, 0x13, 0x29, 0x00, 0xd9, + 0x62, 0x70, 0x08, 0x49, 0x08, 0x48, 0x06, 0x39, + 0xc9, 0x88, 0x81, 0x80, 0x21, 0x78, 0x00, 0x20, + 0xff, 0xf7, 0x82, 0xfc, 0x61, 0x78, 0x01, 0x20, + 0x3c, 0x00, 0x10, 0xfe, 0x00, 0x00, 0xff, 0xf7, + 0x7e, 0xfc, 0x98, 0xbd, 0x00, 0x00, 0xa4, 0x58, + 0x01, 0x00, 0xa6, 0x58, 0x01, 0x00, 0x64, 0x73, + 0x01, 0x00, 0x70, 0xb5, 0x1d, 0x4d, 0x04, 0x1c, + 0x28, 0x78, 0x0e, 0x1c, 0x03, 0x28, 0x03, 0xd1, + 0x02, 0x21, 0x11, 0x20, 0xf1, 0xf7, 0x35, 0xfa, + 0x20, 0x1c, 0x00, 0xf0, 0x4e, 0xf8, 0x00, 0x28, + 0x25, 0xd0, 0x28, 0x78, 0x01, 0x28, 0x0a, 0xd1, + 0x68, 0x68, 0x3c, 0x00, 0x4c, 0xfe, 0x00, 0x00, + 0x00, 0x28, 0x07, 0xd0, 0x01, 0x21, 0x11, 0x20, + 0x03, 0xf0, 0xee, 0xfb, 0x01, 0x20, 0x69, 0x68, + 0xf0, 0xf7, 0xbd, 0xfa, 0x6c, 0x70, 0x6e, 0x60, + 0x20, 0x1c, 0xff, 0xf7, 0xc1, 0xfc, 0x04, 0x1c, + 0x00, 0xf0, 0xd4, 0xfe, 0x00, 0x2c, 0x02, 0xd0, + 0x68, 0x68, 0x00, 0x28, 0x02, 0xd1, 0xf6, 0xf7, + 0xd9, 0xf8, 0x70, 0xbd, 0x01, 0x20, 0x28, 0x70, + 0x01, 0x22, 0x21, 0x1c, 0x3c, 0x00, 0x88, 0xfe, + 0x00, 0x00, 0x11, 0x20, 0x03, 0xf0, 0x9f, 0xfb, + 0x70, 0xbd, 0x02, 0x21, 0x11, 0x20, 0xf1, 0xf7, + 0x06, 0xfa, 0x70, 0xbd, 0x00, 0x00, 0x9c, 0x73, + 0x01, 0x00, 0x80, 0xb5, 0x01, 0x28, 0x05, 0xd1, + 0x00, 0x29, 0x04, 0xd0, 0x01, 0x29, 0x01, 0xd1, + 0xf6, 0xf7, 0xbf, 0xf8, 0x80, 0xbd, 0x05, 0x49, + 0x08, 0x78, 0x03, 0x28, 0x02, 0xd0, 0x00, 0x20, + 0x08, 0x70, 0x80, 0xbd, 0x03, 0x21, 0x3c, 0x00, + 0xc4, 0xfe, 0x00, 0x00, 0x11, 0x20, 0xf1, 0xf7, + 0xed, 0xf9, 0x80, 0xbd, 0x9c, 0x73, 0x01, 0x00, + 0x01, 0x48, 0x40, 0x78, 0x70, 0x47, 0x00, 0x00, + 0x9c, 0x73, 0x01, 0x00, 0x01, 0x1c, 0x01, 0x39, + 0x01, 0x20, 0x0e, 0x29, 0x00, 0xd3, 0x00, 0x20, + 0x70, 0x47, 0x00, 0x00, 0x10, 0xb5, 0x13, 0x4c, + 0x20, 0x78, 0x01, 0x28, 0x0e, 0xd1, 0x60, 0x68, + 0x00, 0x28, 0x0d, 0xd0, 0x01, 0x21, 0x11, 0x20, + 0x3c, 0x00, 0x00, 0xff, 0x00, 0x00, 0x03, 0xf0, + 0x98, 0xfb, 0x01, 0x20, 0x61, 0x68, 0xf0, 0xf7, + 0x67, 0xfa, 0x00, 0x20, 0x60, 0x60, 0x20, 0x70, + 0x01, 0xe0, 0x03, 0x28, 0x0e, 0xd0, 0x00, 0x21, + 0x11, 0x20, 0x03, 0xf0, 0x8a, 0xfb, 0xff, 0xf7, + 0x24, 0xfc, 0xff, 0xf7, 0xc0, 0xfb, 0x05, 0x49, + 0x08, 0x7b, 0x40, 0x08, 0x40, 0x00, 0x08, 0x73, + 0x03, 0x20, 0x20, 0x70, 0x01, 0x20, 0x10, 0xbd, + 0x00, 0x00, 0x3c, 0x00, 0x3c, 0xff, 0x00, 0x00, + 0x9c, 0x73, 0x01, 0x00, 0x88, 0x00, 0x07, 0x00, + 0x10, 0xb5, 0x0d, 0x4c, 0x20, 0x78, 0x03, 0x28, + 0x13, 0xd1, 0x00, 0x20, 0x20, 0x70, 0x0b, 0x48, + 0x01, 0x7b, 0x01, 0x22, 0x11, 0x43, 0x01, 0x73, + 0xff, 0xf7, 0x70, 0xfc, 0xff, 0xf7, 0x18, 0xfc, + 0x00, 0x28, 0x06, 0xd0, 0x02, 0x21, 0x21, 0x70, + 0x01, 0x1c, 0x00, 0x22, 0x11, 0x20, 0x03, 0xf0, + 0x2b, 0xfb, 0x01, 0x20, 0x3c, 0x00, 0x78, 0xff, + 0x00, 0x00, 0x10, 0xbd, 0x00, 0x00, 0x9c, 0x73, + 0x01, 0x00, 0x88, 0x00, 0x07, 0x00, 0x80, 0xb5, + 0x05, 0x49, 0x00, 0x28, 0x04, 0xd0, 0x00, 0x20, + 0x08, 0x60, 0x03, 0xf0, 0x5a, 0xfa, 0x80, 0xbd, + 0x01, 0x20, 0x08, 0x60, 0x80, 0xbd, 0x80, 0x5a, + 0x01, 0x00, 0xfe, 0xb5, 0x05, 0x1c, 0x80, 0x35, + 0x04, 0x1c, 0xa8, 0x68, 0x29, 0x79, 0x06, 0x68, + 0x20, 0x1c, 0xa0, 0x30, 0x02, 0x29, 0x3c, 0x00, + 0xb4, 0xff, 0x00, 0x00, 0x1c, 0xd1, 0x69, 0x79, + 0x08, 0x29, 0x01, 0xd0, 0x0c, 0x29, 0x17, 0xd1, + 0x01, 0x21, 0x61, 0x62, 0xa9, 0x68, 0x09, 0x68, + 0x09, 0x8b, 0x01, 0x82, 0xa9, 0x69, 0x01, 0x91, + 0x00, 0x8a, 0xc0, 0x06, 0x05, 0xd5, 0x60, 0x68, + 0x00, 0x88, 0x40, 0x05, 0x01, 0xd4, 0x01, 0x20, + 0x00, 0xe0, 0x00, 0x20, 0x02, 0x90, 0x05, 0x20, + 0x01, 0xa9, 0x02, 0xf0, 0xb7, 0xf9, 0x02, 0xe0, + 0x3c, 0x00, 0xf0, 0xff, 0x00, 0x00, 0x00, 0x21, + 0x61, 0x62, 0x01, 0x82, 0xa9, 0x68, 0x1a, 0x23, + 0x0a, 0x89, 0x67, 0x6a, 0x18, 0x1c, 0x00, 0x2f, + 0x00, 0xd1, 0x18, 0x20, 0x10, 0x1a, 0x08, 0x81, + 0xa8, 0x68, 0x01, 0x68, 0x62, 0x6a, 0x00, 0x2a, + 0x00, 0xd1, 0x18, 0x23, 0xc9, 0x18, 0x01, 0x60, + 0xa8, 0x68, 0x41, 0xc4, 0x30, 0x88, 0x08, 0x3c, + 0x40, 0x04, 0x03, 0xd5, 0x20, 0x1c, 0xf7, 0xf7, + 0xbc, 0xf9, 0x3c, 0x00, 0x2c, 0x00, 0x01, 0x00, + 0xfe, 0xbd, 0x00, 0x21, 0xe1, 0x61, 0x30, 0x79, + 0xc0, 0x07, 0x03, 0xd4, 0x20, 0x1c, 0xf7, 0xf7, + 0x91, 0xfe, 0xf5, 0xe7, 0x20, 0x1c, 0xf7, 0xf7, + 0x43, 0xff, 0xf1, 0xe7, 0xf7, 0xb5, 0x05, 0x1c, + 0x0a, 0x30, 0x06, 0x1c, 0xf5, 0xf7, 0xa4, 0xfa, + 0x14, 0x4f, 0x04, 0x1c, 0x39, 0x88, 0xf2, 0xf7, + 0x83, 0xfe, 0x32, 0x88, 0x78, 0x68, 0x02, 0x80, + 0x72, 0x88, 0x02, 0x30, 0x3c, 0x00, 0x68, 0x00, + 0x01, 0x00, 0x02, 0x80, 0xb1, 0x88, 0x41, 0x80, + 0x69, 0x88, 0x02, 0x9a, 0x20, 0x1c, 0xfa, 0xf7, + 0xce, 0xfe, 0x0b, 0x4d, 0x08, 0x35, 0x68, 0x80, + 0xfb, 0xf7, 0x2b, 0xfe, 0x01, 0x21, 0x09, 0x03, + 0x00, 0x28, 0x28, 0x88, 0x01, 0xd0, 0x88, 0x43, + 0x00, 0xe0, 0x08, 0x43, 0x28, 0x80, 0x04, 0x48, + 0x00, 0x22, 0x00, 0x21, 0x14, 0x30, 0xf2, 0xf7, + 0x32, 0xfe, 0x20, 0x1c, 0xfc, 0xf7, 0x3c, 0x00, + 0xa4, 0x00, 0x01, 0x00, 0x85, 0xfa, 0xfe, 0xbd, + 0x24, 0x7b, 0x01, 0x00, 0x10, 0xb5, 0x13, 0x4c, + 0x11, 0x49, 0x20, 0x1c, 0xff, 0x30, 0x69, 0x30, + 0x0e, 0xc9, 0x0e, 0xc0, 0x20, 0x1c, 0xff, 0x30, + 0x24, 0x22, 0x75, 0x30, 0x0e, 0x49, 0xf0, 0xf7, + 0x17, 0xfa, 0x20, 0x1c, 0xff, 0x30, 0x3c, 0x22, + 0x99, 0x30, 0x0c, 0x49, 0xf0, 0xf7, 0x6c, 0xfa, + 0x20, 0x1c, 0xff, 0x30, 0x10, 0x22, 0xd5, 0x30, + 0x3c, 0x00, 0xe0, 0x00, 0x01, 0x00, 0x09, 0x49, + 0xf0, 0xf7, 0x09, 0xfa, 0x20, 0x1c, 0xff, 0x30, + 0x28, 0x22, 0xe5, 0x30, 0x07, 0x49, 0xf0, 0xf7, + 0x5e, 0xfa, 0x10, 0xbd, 0x00, 0x00, 0x00, 0x80, + 0x07, 0x00, 0x40, 0x63, 0x01, 0x00, 0x0c, 0x80, + 0x07, 0x00, 0x30, 0x80, 0x07, 0x00, 0x80, 0x80, + 0x07, 0x00, 0xa0, 0x80, 0x07, 0x00, 0xb0, 0xb5, + 0x00, 0x28, 0x3f, 0xd0, 0x21, 0x48, 0x41, 0x68, + 0x21, 0x4c, 0x3c, 0x00, 0x1c, 0x01, 0x01, 0x00, + 0x61, 0x60, 0xc1, 0x68, 0xe1, 0x60, 0x01, 0x69, + 0x21, 0x61, 0x80, 0x6a, 0xa0, 0x62, 0x1e, 0x49, + 0x1c, 0x48, 0x09, 0x68, 0x14, 0x38, 0x41, 0x64, + 0x1c, 0x48, 0x25, 0x1c, 0x3c, 0x35, 0x0f, 0xc8, + 0x0f, 0xc5, 0x20, 0x1c, 0x80, 0x22, 0x4c, 0x30, + 0x19, 0x49, 0xf0, 0xf7, 0x33, 0xfa, 0x14, 0x22, + 0x20, 0x1c, 0xcc, 0x30, 0x17, 0x49, 0xf0, 0xf7, + 0x2d, 0xfa, 0x38, 0x22, 0x3c, 0x00, 0x58, 0x01, + 0x01, 0x00, 0x20, 0x1c, 0xe0, 0x30, 0x15, 0x49, + 0xf0, 0xf7, 0x27, 0xfa, 0x20, 0x1c, 0xff, 0x30, + 0x50, 0x22, 0x19, 0x30, 0x13, 0x49, 0xf0, 0xf7, + 0x20, 0xfa, 0x83, 0x20, 0x80, 0x00, 0x14, 0x22, + 0x20, 0x18, 0x10, 0x49, 0xf0, 0xf7, 0x19, 0xfa, + 0x11, 0x20, 0x40, 0x01, 0x84, 0x22, 0x20, 0x18, + 0x0e, 0x49, 0xf0, 0xf7, 0x12, 0xfa, 0xff, 0xf7, + 0x8e, 0xff, 0xf8, 0xf7, 0x94, 0xfb, 0x3c, 0x00, + 0x94, 0x01, 0x01, 0x00, 0xb0, 0xbd, 0xff, 0xf7, + 0x89, 0xff, 0xb0, 0xbd, 0x00, 0x10, 0x07, 0x00, + 0x40, 0x63, 0x01, 0x00, 0x08, 0x20, 0x07, 0x00, + 0x40, 0x20, 0x07, 0x00, 0x00, 0x30, 0x07, 0x00, + 0x00, 0x40, 0x07, 0x00, 0x00, 0x50, 0x07, 0x00, + 0x00, 0x60, 0x07, 0x00, 0x10, 0x00, 0x07, 0x00, + 0x00, 0x90, 0x07, 0x00, 0x0c, 0x49, 0x80, 0xb5, + 0x01, 0x20, 0x48, 0x60, 0x0a, 0x48, 0x14, 0x38, + 0x3c, 0x00, 0xd0, 0x01, 0x01, 0x00, 0x00, 0x78, + 0x01, 0x28, 0x04, 0xd0, 0x08, 0x48, 0x94, 0x38, + 0x40, 0x6f, 0x00, 0x28, 0x03, 0xd0, 0x00, 0x20, + 0x00, 0xf0, 0x1f, 0xf8, 0x80, 0xbd, 0x08, 0x68, + 0x00, 0x28, 0xfb, 0xd0, 0x03, 0x48, 0xf2, 0xf7, + 0x7a, 0xfe, 0x80, 0xbd, 0x00, 0x00, 0x98, 0x66, + 0x01, 0x00, 0xff, 0xff, 0x00, 0x00, 0x80, 0xb5, + 0x00, 0x28, 0x09, 0xd1, 0xf2, 0x21, 0x0f, 0x20, + 0x03, 0xf0, 0x3c, 0x00, 0x0c, 0x02, 0x01, 0x00, + 0x13, 0xfa, 0x00, 0x22, 0x0f, 0x21, 0xf1, 0x20, + 0x03, 0xf0, 0xcc, 0xfa, 0x80, 0xbd, 0x01, 0x20, + 0xf8, 0xf7, 0x6a, 0xfe, 0x80, 0xbd, 0x00, 0x00, + 0x10, 0xb5, 0x04, 0x1c, 0x03, 0x20, 0x00, 0xf0, + 0xc9, 0xf9, 0x00, 0x21, 0x0f, 0x20, 0x03, 0xf0, + 0xff, 0xf9, 0xff, 0xf7, 0x65, 0xf8, 0x0b, 0x49, + 0x00, 0x20, 0x48, 0x74, 0xfb, 0xf7, 0xe6, 0xfa, + 0x09, 0x48, 0x00, 0x68, 0x3c, 0x00, 0x48, 0x02, + 0x01, 0x00, 0x00, 0x28, 0x03, 0xdc, 0x02, 0x21, + 0x40, 0x42, 0xff, 0xf7, 0x52, 0xfc, 0x04, 0x48, + 0x14, 0x30, 0x00, 0x68, 0x00, 0x28, 0x02, 0xd0, + 0x20, 0x1c, 0xf2, 0xf7, 0x42, 0xfe, 0x10, 0xbd, + 0x00, 0x00, 0x84, 0x66, 0x01, 0x00, 0xd4, 0x7e, + 0x01, 0x00, 0x06, 0x49, 0x80, 0xb5, 0x09, 0x78, + 0x04, 0x29, 0x05, 0xd0, 0x05, 0x29, 0x03, 0xd0, + 0x06, 0x29, 0x01, 0xd0, 0x07, 0x29, 0x3c, 0x00, + 0x84, 0x02, 0x01, 0x00, 0x01, 0xd1, 0xfe, 0xf7, + 0xbd, 0xfd, 0x80, 0xbd, 0x74, 0x66, 0x01, 0x00, + 0x10, 0xb5, 0x09, 0x4c, 0xe0, 0x68, 0x00, 0x28, + 0x0b, 0xd1, 0x07, 0x48, 0x2c, 0x38, 0x00, 0x8a, + 0xc0, 0x07, 0x04, 0xd5, 0x00, 0x21, 0x01, 0x20, + 0x62, 0x68, 0xf9, 0xf7, 0xc9, 0xfa, 0x01, 0x20, + 0xe0, 0x60, 0x01, 0x20, 0x10, 0xbd, 0x00, 0x00, + 0xf4, 0x6e, 0x01, 0x00, 0x8c, 0xb5, 0x02, 0x1c, + 0x3c, 0x00, 0xc0, 0x02, 0x01, 0x00, 0x08, 0x1c, + 0x11, 0x1c, 0xfd, 0xf7, 0x28, 0xff, 0x01, 0x90, + 0x00, 0x28, 0x05, 0xd0, 0x17, 0x20, 0x00, 0xab, + 0x18, 0x80, 0x68, 0x46, 0xfd, 0xf7, 0xff, 0xf8, + 0x8c, 0xbd, 0xf1, 0xb5, 0x2e, 0x4c, 0xae, 0xb0, + 0x00, 0x25, 0x25, 0x63, 0x20, 0x69, 0x01, 0x28, + 0x03, 0xd1, 0x01, 0xa8, 0x01, 0xf0, 0xa1, 0xf8, + 0x4e, 0xe0, 0x01, 0x26, 0x28, 0x4f, 0x26, 0x70, + 0x50, 0x3f, 0x3c, 0x00, 0xfc, 0x02, 0x01, 0x00, + 0xb8, 0x69, 0xf8, 0xf7, 0x4f, 0xf8, 0x25, 0x49, + 0x2c, 0x39, 0x00, 0x28, 0x1d, 0xd0, 0xe0, 0x6a, + 0x01, 0x28, 0x1a, 0xd1, 0x08, 0x8a, 0x0f, 0x1c, + 0x80, 0x07, 0x04, 0xd5, 0x00, 0x21, 0x02, 0x20, + 0x62, 0x68, 0xf9, 0xf7, 0x8f, 0xfa, 0x38, 0x8a, + 0x00, 0x07, 0x07, 0xd5, 0xe0, 0x68, 0x01, 0x28, + 0x04, 0xd1, 0x00, 0x21, 0x08, 0x20, 0x62, 0x68, + 0xf9, 0xf7, 0x84, 0xfa, 0x3c, 0x00, 0x38, 0x03, + 0x01, 0x00, 0x00, 0x22, 0x18, 0x21, 0x82, 0x20, + 0x26, 0x63, 0x03, 0xf0, 0x36, 0xfa, 0x25, 0xe0, + 0x08, 0x8a, 0x0e, 0x1c, 0x80, 0x07, 0x04, 0xd5, + 0x00, 0x21, 0x02, 0x20, 0x62, 0x68, 0xf9, 0xf7, + 0x74, 0xfa, 0x30, 0x8a, 0x00, 0x07, 0x07, 0xd5, + 0xe0, 0x68, 0x01, 0x28, 0x04, 0xd1, 0x00, 0x21, + 0x08, 0x20, 0x62, 0x68, 0xf9, 0xf7, 0x69, 0xfa, + 0x30, 0x8a, 0x40, 0x07, 0x04, 0xd5, 0x3c, 0x00, + 0x74, 0x03, 0x01, 0x00, 0x00, 0x22, 0x00, 0x21, + 0x04, 0x20, 0xf9, 0xf7, 0x61, 0xfa, 0x2e, 0x98, + 0x01, 0x28, 0x04, 0xd0, 0x1e, 0x95, 0x09, 0x21, + 0x1b, 0xa8, 0xff, 0xf7, 0x97, 0xff, 0xe5, 0x62, + 0xbd, 0x61, 0xe5, 0x60, 0x2f, 0xb0, 0xf0, 0xbd, + 0xf4, 0x6e, 0x01, 0x00, 0x80, 0xb5, 0x07, 0x20, + 0xfe, 0xf7, 0xa0, 0xfe, 0x00, 0x21, 0x0f, 0x20, + 0x03, 0xf0, 0x44, 0xf9, 0x0c, 0x48, 0x01, 0x78, + 0x3c, 0x00, 0xb0, 0x03, 0x01, 0x00, 0x00, 0x29, + 0x0f, 0xd0, 0x02, 0x21, 0x01, 0x70, 0x88, 0x38, + 0x00, 0x78, 0x00, 0x28, 0x04, 0xd0, 0x07, 0x49, + 0x10, 0x31, 0x48, 0x7c, 0x01, 0x30, 0x48, 0x74, + 0xf2, 0x22, 0x0f, 0x20, 0x05, 0x49, 0x03, 0xf0, + 0xfc, 0xf8, 0x00, 0x22, 0x0f, 0x21, 0xf3, 0x20, + 0x03, 0xf0, 0xe9, 0xf9, 0x80, 0xbd, 0x74, 0x66, + 0x01, 0x00, 0x80, 0x84, 0x1e, 0x00, 0x10, 0xb5, + 0x04, 0x1c, 0x3c, 0x00, 0xec, 0x03, 0x01, 0x00, + 0xf2, 0x21, 0x0f, 0x20, 0x03, 0xf0, 0x20, 0xf9, + 0x01, 0x2c, 0x0a, 0xd1, 0x08, 0x48, 0x08, 0x49, + 0x00, 0x68, 0x14, 0x39, 0x00, 0x28, 0x05, 0xd0, + 0xc8, 0x78, 0x02, 0x28, 0x02, 0xd1, 0xf7, 0xf7, + 0xaf, 0xfa, 0x10, 0xbd, 0x00, 0x20, 0x48, 0x70, + 0x05, 0x20, 0xfe, 0xf7, 0x65, 0xfe, 0x10, 0xbd, + 0x98, 0x66, 0x01, 0x00, 0xf8, 0xb5, 0x28, 0x4e, + 0x30, 0x21, 0x35, 0x1c, 0x3c, 0x00, 0x28, 0x04, + 0x01, 0x00, 0x60, 0x35, 0x28, 0x89, 0x89, 0x5d, + 0x88, 0x42, 0x03, 0xd1, 0x00, 0x20, 0xff, 0xf7, + 0xf6, 0xfe, 0xf8, 0xbd, 0x34, 0x1c, 0x70, 0x34, + 0x01, 0x21, 0x21, 0x70, 0x41, 0x18, 0x80, 0x19, + 0x30, 0x30, 0x29, 0x81, 0x40, 0x78, 0x1d, 0x4f, + 0x18, 0x3f, 0x38, 0x70, 0x00, 0x28, 0x08, 0xd0, + 0x00, 0x21, 0xfb, 0xf7, 0xc2, 0xf9, 0x00, 0x28, + 0x07, 0xd1, 0x20, 0x78, 0xff, 0xf7, 0x3c, 0x00, + 0x64, 0x04, 0x01, 0x00, 0x9b, 0xff, 0xe7, 0xe7, + 0x01, 0x21, 0x0f, 0x20, 0xf0, 0xf7, 0x1a, 0xff, + 0x14, 0x48, 0x01, 0x21, 0x80, 0x30, 0x81, 0x70, + 0x38, 0x69, 0xfb, 0xf7, 0x55, 0xfa, 0x20, 0x73, + 0x00, 0x21, 0x0f, 0x20, 0x03, 0xf0, 0xd6, 0xf8, + 0x70, 0x7a, 0x01, 0x28, 0x0e, 0xd1, 0x0e, 0x48, + 0x00, 0x68, 0x00, 0x28, 0x04, 0xd0, 0x38, 0x78, + 0x02, 0xf0, 0xda, 0xfa, 0x00, 0x28, 0x05, 0xd0, + 0x3c, 0x00, 0xa0, 0x04, 0x01, 0x00, 0x30, 0x7f, + 0x60, 0x73, 0x03, 0x20, 0x20, 0x70, 0x71, 0x89, + 0x05, 0xe0, 0x05, 0x20, 0x20, 0x70, 0xa8, 0x88, + 0xfa, 0xf7, 0x3b, 0xfb, 0x01, 0x1c, 0x00, 0x22, + 0x0f, 0x20, 0x03, 0xf0, 0x86, 0xf8, 0xba, 0xe7, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0xe4, 0x62, + 0x01, 0x00, 0x70, 0xb5, 0x04, 0x1c, 0x02, 0xf0, + 0x6c, 0xfc, 0x36, 0x4b, 0x19, 0x1c, 0xa0, 0x31, + 0x0a, 0x78, 0x3c, 0x00, 0xdc, 0x04, 0x01, 0x00, + 0x10, 0x2a, 0x02, 0xd2, 0x0a, 0x79, 0x10, 0x2a, + 0x01, 0xd3, 0x01, 0x25, 0x00, 0xe0, 0x00, 0x25, + 0x30, 0x4e, 0xca, 0x79, 0x80, 0x36, 0x01, 0x2c, + 0x12, 0xd0, 0x00, 0x25, 0x02, 0x2c, 0x2e, 0xd0, + 0x04, 0x2c, 0x3c, 0xd1, 0x5c, 0x6b, 0x00, 0x2c, + 0x39, 0xd1, 0x9c, 0x6f, 0x00, 0x1b, 0x2a, 0x4c, + 0xa0, 0x42, 0x34, 0xd9, 0xb2, 0x68, 0x98, 0x6a, + 0x82, 0x42, 0x31, 0xd0, 0x3c, 0x00, 0x18, 0x05, + 0x01, 0x00, 0x4d, 0x72, 0x34, 0xe0, 0xb0, 0x68, + 0x9c, 0x6a, 0x02, 0x22, 0xa0, 0x42, 0x21, 0xd1, + 0x58, 0x6b, 0x00, 0x28, 0x1e, 0xd1, 0x00, 0x2d, + 0x1c, 0xd1, 0x48, 0x7a, 0x19, 0x28, 0x20, 0xd0, + 0x34, 0x68, 0x98, 0x6f, 0x64, 0x00, 0x00, 0x1b, + 0x74, 0x68, 0x00, 0x19, 0xff, 0x30, 0x1c, 0x4c, + 0x39, 0x30, 0xa0, 0x42, 0x16, 0xd2, 0x48, 0x79, + 0x8c, 0x79, 0x00, 0x19, 0x30, 0x28, 0x3c, 0x00, + 0x54, 0x05, 0x01, 0x00, 0x11, 0xd3, 0x10, 0x22, + 0x0f, 0xe0, 0x5c, 0x6b, 0x01, 0x2c, 0x06, 0xd1, + 0xb0, 0x68, 0x9a, 0x6a, 0x90, 0x42, 0x00, 0xd1, + 0x4d, 0x72, 0x00, 0x22, 0x05, 0xe0, 0x9c, 0x6f, + 0x00, 0x1b, 0x12, 0x4c, 0xa0, 0x42, 0x00, 0xd3, + 0x20, 0x22, 0x06, 0xe0, 0x4a, 0x7a, 0x19, 0x2a, + 0x01, 0xd2, 0x01, 0x32, 0x4a, 0x72, 0x20, 0x22, + 0xb0, 0x60, 0x30, 0x68, 0x9b, 0x6f, 0x98, 0x42, + 0x3c, 0x00, 0x90, 0x05, 0x01, 0x00, 0x04, 0xd1, + 0x00, 0x2a, 0x00, 0xd1, 0x48, 0x79, 0x4a, 0x71, + 0x06, 0xe0, 0x10, 0x2a, 0x04, 0xd3, 0x70, 0x60, + 0x33, 0x60, 0x48, 0x79, 0x88, 0x71, 0xf6, 0xe7, + 0xca, 0x71, 0x70, 0xbd, 0x00, 0x00, 0xa4, 0x6c, + 0x01, 0x00, 0xa3, 0x04, 0x00, 0x00, 0x71, 0x02, + 0x00, 0x00, 0x35, 0x0c, 0x00, 0x00, 0x05, 0x48, + 0x80, 0xb5, 0x81, 0x7b, 0x00, 0x29, 0x05, 0xd0, + 0x00, 0x21, 0x3c, 0x00, 0xcc, 0x05, 0x01, 0x00, + 0x81, 0x73, 0x03, 0x49, 0x0f, 0x20, 0x01, 0xf0, + 0x0f, 0xff, 0x80, 0xbd, 0x74, 0x66, 0x01, 0x00, + 0xe9, 0x03, 0x01, 0x00, 0xf8, 0xb5, 0x04, 0x1c, + 0x02, 0xf0, 0xe2, 0xfb, 0x05, 0x1c, 0x38, 0x4e, + 0x20, 0x1c, 0x37, 0x49, 0x34, 0x1c, 0xa0, 0x34, + 0x10, 0x22, 0x44, 0x39, 0x01, 0x28, 0x2c, 0xd0, + 0x04, 0x28, 0x4e, 0xd1, 0x37, 0x1c, 0x74, 0x36, + 0x09, 0xce, 0x26, 0x78, 0x3c, 0x00, 0x08, 0x06, + 0x01, 0x00, 0xc0, 0x1a, 0x20, 0x2e, 0x04, 0xd1, + 0x30, 0x4e, 0xb0, 0x42, 0x01, 0xd9, 0x00, 0x26, + 0x4e, 0x61, 0x3e, 0x1c, 0x3f, 0x6c, 0x00, 0x2f, + 0x48, 0xd1, 0x77, 0x6c, 0x00, 0x2f, 0x45, 0xd1, + 0xb7, 0x6a, 0x00, 0x2f, 0x3d, 0xd0, 0x77, 0x6b, + 0x00, 0x2f, 0x3a, 0xd0, 0x27, 0x4f, 0xb8, 0x42, + 0x37, 0xd2, 0x60, 0x78, 0x10, 0x28, 0x06, 0xd3, + 0xf0, 0x6f, 0x18, 0x1a, 0x24, 0x4b, 0x3c, 0x00, + 0x44, 0x06, 0x01, 0x00, 0x98, 0x42, 0x01, 0xd2, + 0xe2, 0x70, 0xf5, 0x66, 0x48, 0x69, 0x06, 0x28, + 0x2f, 0xd2, 0x01, 0x30, 0x2c, 0xe0, 0x20, 0x78, + 0x20, 0x28, 0x01, 0xd1, 0x06, 0x23, 0x4b, 0x61, + 0x02, 0x23, 0x23, 0x71, 0xb3, 0x6a, 0x00, 0x2b, + 0x19, 0xd0, 0x49, 0x69, 0x03, 0x29, 0x16, 0xd9, + 0x71, 0x6b, 0x73, 0x6d, 0x59, 0x40, 0x12, 0xd0, + 0xe1, 0x78, 0x10, 0x29, 0x10, 0xd3, 0x61, 0x78, + 0x3c, 0x00, 0x80, 0x06, 0x01, 0x00, 0x33, 0x1c, + 0x10, 0x29, 0x0c, 0xd3, 0xd9, 0x6f, 0x69, 0x1a, + 0x13, 0x4d, 0xa9, 0x42, 0x07, 0xd2, 0x58, 0x6c, + 0x00, 0x28, 0x02, 0xd0, 0x98, 0x6c, 0x00, 0x28, + 0x00, 0xd1, 0x22, 0x71, 0xf8, 0xbd, 0x02, 0x28, + 0xfc, 0xd1, 0x22, 0x70, 0xfa, 0xe7, 0x48, 0x69, + 0x00, 0x28, 0x01, 0xd0, 0x01, 0x38, 0x48, 0x61, + 0x0a, 0x49, 0xf0, 0x6e, 0x40, 0x18, 0x02, 0xf0, + 0xb0, 0xfa, 0x3c, 0x00, 0xbc, 0x06, 0x01, 0x00, + 0x00, 0x28, 0xee, 0xd0, 0x01, 0x20, 0xe0, 0x70, + 0x06, 0x48, 0x28, 0x18, 0xf0, 0x66, 0xe8, 0xe7, + 0xa4, 0x6c, 0x01, 0x00, 0xe2, 0x04, 0x00, 0x00, + 0x1a, 0x06, 0x00, 0x00, 0x53, 0x07, 0x00, 0x00, + 0x00, 0x2d, 0x31, 0x01, 0x00, 0x5a, 0x62, 0x02, + 0x80, 0xb5, 0x41, 0x68, 0x09, 0x79, 0xc9, 0x07, + 0x13, 0xd5, 0xc1, 0x69, 0x00, 0x29, 0x0d, 0xd0, + 0x89, 0x79, 0x02, 0x29, 0x3c, 0x00, 0xf8, 0x06, + 0x01, 0x00, 0x0a, 0xd1, 0x08, 0x21, 0x01, 0x86, + 0x01, 0x1c, 0x38, 0x31, 0x81, 0x62, 0x02, 0x1c, + 0x06, 0x48, 0x04, 0x49, 0xf9, 0xf7, 0xfd, 0xfc, + 0x80, 0xbd, 0xf7, 0xf7, 0xdc, 0xfb, 0x80, 0xbd, + 0xf7, 0xf7, 0x23, 0xfb, 0x80, 0xbd, 0xb9, 0x71, + 0x00, 0x00, 0xa0, 0x6a, 0x01, 0x00, 0x10, 0xb5, + 0x00, 0x24, 0x00, 0x28, 0x03, 0xd0, 0x02, 0xf0, + 0xe8, 0xfe, 0x00, 0x28, 0x17, 0xd0, 0x3c, 0x00, + 0x34, 0x07, 0x01, 0x00, 0x0c, 0x4c, 0x01, 0x20, + 0xa0, 0x72, 0x20, 0x68, 0x00, 0x21, 0x41, 0x62, + 0x0a, 0x49, 0x02, 0x68, 0xc9, 0x78, 0x60, 0x32, + 0x91, 0x71, 0x21, 0x89, 0x01, 0x31, 0x21, 0x81, + 0x00, 0x68, 0x40, 0x30, 0x81, 0x83, 0xfb, 0xf7, + 0x31, 0xfc, 0x20, 0x68, 0x00, 0x68, 0xfc, 0xf7, + 0xa1, 0xf9, 0x01, 0x24, 0x20, 0x1c, 0x10, 0xbd, + 0x14, 0x7a, 0x01, 0x00, 0x0e, 0x61, 0x01, 0x00, + 0x3c, 0x00, 0x70, 0x07, 0x01, 0x00, 0x7f, 0xb5, + 0x06, 0x1c, 0x1e, 0x48, 0x1d, 0x1c, 0x43, 0x88, + 0x02, 0x88, 0x1c, 0x21, 0x00, 0x20, 0x90, 0xb0, + 0xf0, 0xf7, 0x45, 0xff, 0x03, 0x90, 0x04, 0x68, + 0xff, 0x21, 0x01, 0x31, 0x21, 0x80, 0x08, 0x20, + 0x60, 0x80, 0x06, 0x20, 0x20, 0x71, 0x04, 0x20, + 0x60, 0x71, 0xc0, 0x01, 0x00, 0x2d, 0x00, 0xd1, + 0x08, 0x1c, 0xe0, 0x80, 0x01, 0xa8, 0x02, 0x30, + 0x31, 0x1c, 0x3c, 0x00, 0xac, 0x07, 0x01, 0x00, + 0x05, 0x1c, 0xfa, 0xf7, 0x5f, 0xfa, 0x10, 0x49, + 0x68, 0x46, 0xfa, 0xf7, 0x5b, 0xfa, 0x20, 0x1c, + 0x08, 0x30, 0x69, 0x46, 0xfa, 0xf7, 0x56, 0xfa, + 0x29, 0x1c, 0x20, 0x1c, 0x12, 0x30, 0xfa, 0xf7, + 0x51, 0xfa, 0x10, 0xab, 0x98, 0x88, 0x00, 0x22, + 0x01, 0x21, 0x20, 0x83, 0xd8, 0x88, 0x60, 0x83, + 0x18, 0x89, 0xe0, 0x81, 0x58, 0x89, 0x20, 0x82, + 0x68, 0x46, 0xf9, 0xf7, 0x3c, 0x00, 0xe8, 0x07, + 0x01, 0x00, 0x17, 0xff, 0x14, 0xb0, 0x70, 0xbd, + 0x00, 0x00, 0x14, 0x6e, 0x01, 0x00, 0x12, 0x61, + 0x01, 0x00, 0xb0, 0xb5, 0x04, 0x1c, 0x18, 0x48, + 0x25, 0x1c, 0x00, 0x78, 0x60, 0x35, 0x80, 0x07, + 0x00, 0x28, 0x08, 0xda, 0xe8, 0x79, 0x00, 0x28, + 0x05, 0xd0, 0xf4, 0xf7, 0x70, 0xff, 0x01, 0x1c, + 0x20, 0x1c, 0x00, 0xf0, 0x78, 0xf9, 0x29, 0x88, + 0x2e, 0x20, 0x00, 0x5d, 0xf2, 0xf7, 0x3c, 0x00, + 0x24, 0x08, 0x01, 0x00, 0x9f, 0xfa, 0xe8, 0x79, + 0x00, 0x28, 0x0b, 0xd1, 0x20, 0x1c, 0x40, 0x30, + 0x01, 0x8b, 0x22, 0x69, 0x11, 0x80, 0x41, 0x8b, + 0x22, 0x69, 0x51, 0x80, 0x80, 0x8b, 0x21, 0x69, + 0xc8, 0x82, 0x07, 0xe0, 0x01, 0x28, 0x05, 0xd1, + 0x20, 0x69, 0x01, 0x22, 0x01, 0x88, 0xd2, 0x02, + 0x11, 0x43, 0x01, 0x80, 0x6a, 0x7a, 0xe0, 0x68, + 0x02, 0x49, 0xf2, 0xf7, 0x53, 0xfa, 0xb0, 0xbd, + 0x3c, 0x00, 0x60, 0x08, 0x01, 0x00, 0x1d, 0x75, + 0x01, 0x00, 0xd1, 0x4f, 0x00, 0x00, 0x90, 0xb5, + 0x04, 0x1c, 0x38, 0x23, 0x0c, 0x49, 0x58, 0x43, + 0x43, 0x18, 0x85, 0xb0, 0x00, 0x20, 0x0a, 0x49, + 0x02, 0x90, 0x18, 0x1c, 0x01, 0x22, 0x03, 0x91, + 0x09, 0x49, 0x04, 0x92, 0x30, 0x30, 0x42, 0x78, + 0x09, 0x88, 0x01, 0x92, 0x00, 0x91, 0x01, 0x78, + 0x5a, 0x6b, 0x0c, 0x33, 0x20, 0x1c, 0xfb, 0xf7, + 0x7c, 0xf8, 0x3c, 0x00, 0x9c, 0x08, 0x01, 0x00, + 0x05, 0xb0, 0x90, 0xbd, 0xd4, 0xe4, 0x01, 0x00, + 0x5d, 0x4e, 0x00, 0x00, 0x48, 0x7b, 0x01, 0x00, + 0x90, 0xb5, 0x85, 0xb0, 0x03, 0x1c, 0x00, 0x20, + 0x02, 0x90, 0x0a, 0x49, 0x18, 0x1c, 0x00, 0x22, + 0x04, 0x92, 0x60, 0x30, 0x03, 0x91, 0xc2, 0x79, + 0x01, 0x88, 0x01, 0x92, 0x00, 0x91, 0x5a, 0x6a, + 0xdc, 0x68, 0x20, 0x33, 0x99, 0x7b, 0x40, 0x7a, + 0x23, 0x1c, 0xfb, 0xf7, 0x3c, 0x00, 0xd8, 0x08, + 0x01, 0x00, 0x5d, 0xf8, 0x05, 0xb0, 0x90, 0xbd, + 0x00, 0x00, 0x0d, 0x4f, 0x00, 0x00, 0x07, 0x49, + 0x80, 0xb5, 0x88, 0x6a, 0x00, 0x28, 0x08, 0xd1, + 0x01, 0x20, 0x88, 0x62, 0xf0, 0xf7, 0xaf, 0xfc, + 0x01, 0x1c, 0x03, 0x48, 0x00, 0x22, 0xf2, 0xf7, + 0xb8, 0xfe, 0x80, 0xbd, 0x00, 0x00, 0x78, 0x69, + 0x01, 0x00, 0x41, 0xe4, 0x00, 0x00, 0xf0, 0xb5, + 0x9b, 0xb0, 0x00, 0x28, 0x20, 0xd0, 0x3c, 0x00, + 0x14, 0x09, 0x01, 0x00, 0x01, 0x1c, 0x08, 0xa8, + 0xfc, 0xf7, 0xb2, 0xfd, 0x01, 0x20, 0x11, 0x90, + 0x03, 0x20, 0x10, 0xad, 0x28, 0x72, 0x04, 0x20, + 0x68, 0x72, 0x05, 0xa8, 0x00, 0x22, 0x69, 0x46, + 0xf4, 0xf7, 0x00, 0xff, 0x00, 0x24, 0x00, 0x26, + 0x05, 0xa9, 0x00, 0x20, 0xf9, 0xf7, 0xfc, 0xfa, + 0x69, 0x46, 0xf9, 0xf7, 0xf9, 0xfa, 0x0b, 0x90, + 0x08, 0xa8, 0xfc, 0xf7, 0xbb, 0xfd, 0x01, 0x34, + 0x3c, 0x00, 0x50, 0x09, 0x01, 0x00, 0x02, 0x2c, + 0x2e, 0x72, 0xf0, 0xdb, 0x1b, 0xb0, 0xf0, 0xbd, + 0x00, 0x00, 0x90, 0xb5, 0x04, 0x1c, 0x4c, 0x23, + 0x0c, 0x49, 0x58, 0x43, 0x43, 0x18, 0x85, 0xb0, + 0x00, 0x20, 0x0a, 0x49, 0x02, 0x90, 0x00, 0x22, + 0x04, 0x92, 0x3c, 0x20, 0x03, 0x91, 0xc2, 0x5c, + 0x08, 0x48, 0x41, 0x88, 0x01, 0x92, 0x41, 0x20, + 0x00, 0x91, 0xc1, 0x5c, 0x5a, 0x68, 0x08, 0x33, + 0x20, 0x1c, 0x3c, 0x00, 0x8c, 0x09, 0x01, 0x00, + 0xfb, 0xf7, 0x02, 0xf8, 0x05, 0xb0, 0x90, 0xbd, + 0x58, 0xe3, 0x01, 0x00, 0x75, 0x4f, 0x00, 0x00, + 0x3c, 0x7c, 0x01, 0x00, 0xf8, 0xb5, 0x0e, 0x1c, + 0x22, 0x4c, 0x38, 0x21, 0x17, 0x1c, 0x05, 0x1c, + 0x20, 0x1c, 0xef, 0xf7, 0x75, 0xfd, 0x23, 0x1c, + 0x25, 0x33, 0x21, 0x1c, 0x24, 0x31, 0x10, 0x20, + 0x6a, 0x46, 0xf9, 0xf7, 0x1d, 0xf8, 0x00, 0xab, + 0x18, 0x88, 0x07, 0x21, 0x3c, 0x00, 0xc8, 0x09, + 0x01, 0x00, 0x1a, 0x4a, 0x02, 0x38, 0x20, 0x84, + 0x20, 0x1c, 0x20, 0x30, 0x81, 0x70, 0xc5, 0x70, + 0x11, 0x1c, 0x06, 0x73, 0x47, 0x73, 0x34, 0x31, + 0x21, 0x63, 0x30, 0x32, 0x62, 0x63, 0x01, 0x79, + 0x25, 0x1c, 0x10, 0x35, 0x21, 0x81, 0x20, 0x60, + 0xe5, 0x60, 0x18, 0x88, 0x40, 0x1a, 0x20, 0x83, + 0x20, 0x1c, 0x28, 0x30, 0x20, 0x61, 0x20, 0x1c, + 0xf9, 0xf7, 0x11, 0xf8, 0x0d, 0x48, 0x3c, 0x00, + 0x04, 0x0a, 0x01, 0x00, 0x00, 0x68, 0x00, 0x28, + 0x07, 0xd0, 0x06, 0x21, 0x20, 0x1c, 0xf8, 0xf7, + 0x47, 0xfd, 0x10, 0x21, 0x28, 0x1c, 0xf8, 0xf7, + 0x43, 0xfd, 0x08, 0x48, 0x02, 0x21, 0x01, 0x62, + 0x44, 0x62, 0x01, 0x21, 0x01, 0x62, 0x06, 0x48, + 0x00, 0x68, 0xef, 0xf7, 0xd5, 0xfc, 0xf8, 0xbd, + 0x8c, 0x8e, 0x01, 0x00, 0xe4, 0xfe, 0x01, 0x00, + 0xcc, 0x5c, 0x01, 0x00, 0x00, 0x30, 0x07, 0x00, + 0x3c, 0x00, 0x40, 0x0a, 0x01, 0x00, 0x5c, 0x5b, + 0x01, 0x00, 0xf0, 0xb5, 0x06, 0x1c, 0x40, 0x36, + 0x31, 0x8b, 0x04, 0x1c, 0x25, 0x1c, 0x08, 0x07, + 0x80, 0x0f, 0x60, 0x35, 0x01, 0x28, 0x85, 0xb0, + 0x3b, 0xd0, 0xe8, 0x79, 0x00, 0x28, 0x05, 0xd1, + 0x20, 0x69, 0x01, 0x80, 0xb0, 0x8b, 0x21, 0x69, + 0xc8, 0x82, 0x07, 0xe0, 0x01, 0x28, 0x05, 0xd1, + 0x20, 0x69, 0x01, 0x22, 0x01, 0x88, 0xd2, 0x02, + 0x11, 0x43, 0x3c, 0x00, 0x7c, 0x0a, 0x01, 0x00, + 0x01, 0x80, 0x20, 0x48, 0x00, 0x78, 0x80, 0x07, + 0x26, 0xd5, 0xe8, 0x79, 0x00, 0x28, 0x23, 0xd0, + 0xa0, 0x6b, 0x00, 0x28, 0x1c, 0xd0, 0xf4, 0xf7, + 0x2f, 0xfe, 0x00, 0x28, 0x09, 0xd0, 0xb8, 0x21, + 0x09, 0x58, 0x00, 0x29, 0x05, 0xd0, 0x30, 0x21, + 0x09, 0x5d, 0xb4, 0x30, 0x08, 0x18, 0x07, 0x7a, + 0x00, 0xe0, 0x00, 0x27, 0x01, 0x21, 0x38, 0x1c, + 0xfa, 0xf7, 0x86, 0xf9, 0x3c, 0x00, 0xb8, 0x0a, + 0x01, 0x00, 0x04, 0x90, 0x20, 0x69, 0x04, 0x30, + 0x39, 0x1c, 0xf4, 0xf7, 0x6c, 0xfd, 0x04, 0x99, + 0xfa, 0xf7, 0xd3, 0xf9, 0x02, 0xe0, 0x20, 0x1c, + 0xf7, 0xf7, 0xf9, 0xfb, 0x70, 0x83, 0x70, 0x8b, + 0x21, 0x69, 0x00, 0x22, 0x48, 0x80, 0x09, 0x49, + 0x0a, 0x48, 0x04, 0x92, 0x03, 0x91, 0x02, 0x90, + 0xea, 0x79, 0x29, 0x88, 0x01, 0x92, 0x00, 0x91, + 0x62, 0x6a, 0xe3, 0x68, 0x20, 0x34, 0x3c, 0x00, + 0xf4, 0x0a, 0x01, 0x00, 0xa1, 0x7b, 0x68, 0x7a, + 0xfa, 0xf7, 0x4c, 0xff, 0x05, 0xb0, 0xf0, 0xbd, + 0x1d, 0x75, 0x01, 0x00, 0xd1, 0x4f, 0x00, 0x00, + 0xdd, 0x2f, 0x01, 0x00, 0xfe, 0xb5, 0x04, 0x1c, + 0x26, 0x1c, 0x01, 0x20, 0x20, 0x36, 0x00, 0x29, + 0x02, 0x90, 0x2e, 0xd0, 0x58, 0x20, 0x00, 0x5b, + 0x00, 0x07, 0x80, 0x0f, 0x01, 0x28, 0x01, 0xd1, + 0xcc, 0x31, 0x00, 0xe0, 0xb4, 0x31, 0x48, 0x68, + 0x3c, 0x00, 0x30, 0x0b, 0x01, 0x00, 0x0d, 0x1c, + 0x00, 0x28, 0x24, 0xd0, 0x20, 0x1c, 0x60, 0x30, + 0xc2, 0x79, 0x01, 0x21, 0x01, 0x2a, 0x00, 0xd0, + 0x00, 0x21, 0x27, 0x1c, 0x62, 0x6d, 0x30, 0x37, + 0x00, 0x2a, 0x04, 0xd0, 0x3a, 0x1c, 0x28, 0x1c, + 0xf6, 0xf7, 0xe7, 0xfd, 0x07, 0xe0, 0x42, 0x7a, + 0x23, 0x1c, 0x68, 0x33, 0x00, 0x92, 0x3a, 0x1c, + 0x28, 0x1c, 0xf6, 0xf7, 0x9a, 0xfd, 0x02, 0x90, + 0x38, 0x78, 0x3c, 0x00, 0x6c, 0x0b, 0x01, 0x00, + 0x40, 0x19, 0x00, 0x7a, 0x01, 0x21, 0xb0, 0x73, + 0xfa, 0xf7, 0x26, 0xf9, 0x01, 0xe0, 0x00, 0x20, + 0xb0, 0x73, 0x60, 0x62, 0xb0, 0x7b, 0x0d, 0x28, + 0x01, 0xd9, 0xf0, 0xf7, 0xbb, 0xfb, 0x02, 0x98, + 0xfe, 0xbd, 0x00, 0x00, 0xff, 0xb5, 0x04, 0x1c, + 0x80, 0x30, 0x25, 0x1c, 0x5e, 0x35, 0x00, 0x78, + 0xae, 0x1d, 0xaf, 0x1f, 0x00, 0x28, 0x83, 0xb0, + 0x12, 0xd1, 0xf4, 0xf7, 0x3c, 0x00, 0xa8, 0x0b, + 0x01, 0x00, 0xc7, 0xfb, 0x00, 0x28, 0x07, 0xd0, + 0x06, 0x98, 0x05, 0x99, 0x02, 0x90, 0x04, 0x98, + 0x01, 0x90, 0xa6, 0x61, 0x67, 0x61, 0x0d, 0xe0, + 0x04, 0x98, 0x06, 0x99, 0x02, 0x90, 0x05, 0x98, + 0x01, 0x90, 0x66, 0x61, 0x05, 0xe0, 0x04, 0xa9, + 0x03, 0xc9, 0x02, 0x90, 0x06, 0x98, 0x01, 0x90, + 0x67, 0x61, 0xa5, 0x61, 0x06, 0x22, 0x38, 0x1c, + 0xef, 0xf7, 0x8b, 0xfc, 0x06, 0x22, 0x3c, 0x00, + 0xe4, 0x0b, 0x01, 0x00, 0x28, 0x1c, 0x02, 0x99, + 0xef, 0xf7, 0x86, 0xfc, 0x06, 0x22, 0x30, 0x1c, + 0x01, 0x99, 0xef, 0xf7, 0x81, 0xfc, 0x07, 0xb0, + 0xf0, 0xbd, 0x00, 0x00, 0xb0, 0xb5, 0x0d, 0x1c, + 0x04, 0x1c, 0x05, 0x28, 0x01, 0xd3, 0xf0, 0xf7, + 0x7b, 0xfb, 0x02, 0x49, 0xa0, 0x00, 0x08, 0x58, + 0x85, 0x60, 0xb0, 0xbd, 0x10, 0x7b, 0x01, 0x00, + 0xf8, 0xb5, 0xff, 0xf7, 0x59, 0xf9, 0x05, 0x1c, + 0x3c, 0x00, 0x20, 0x0c, 0x01, 0x00, 0xfe, 0xf7, + 0xe8, 0xff, 0x04, 0x1c, 0x28, 0x1c, 0xff, 0xf7, + 0x58, 0xf9, 0x00, 0x28, 0x42, 0xd0, 0x69, 0x1e, + 0x21, 0x4d, 0x4a, 0x00, 0x20, 0x4b, 0x1c, 0x3d, + 0xae, 0x5c, 0x98, 0x5c, 0x30, 0x40, 0xd6, 0x18, + 0x01, 0x23, 0xf6, 0x56, 0x52, 0x19, 0xd2, 0x56, + 0x96, 0x42, 0x01, 0xdd, 0x15, 0x1c, 0x00, 0xe0, + 0x35, 0x1c, 0x18, 0x4b, 0x2a, 0x3b, 0x59, 0x56, + 0x51, 0x18, 0x3c, 0x00, 0x5c, 0x0c, 0x01, 0x00, + 0xb1, 0x42, 0x00, 0xdb, 0x31, 0x1c, 0x0e, 0x1c, + 0x00, 0x28, 0x26, 0xd0, 0xfe, 0xf7, 0xbe, 0xff, + 0x00, 0x90, 0x00, 0xab, 0x18, 0x78, 0x12, 0x49, + 0x00, 0x23, 0xc9, 0x56, 0x00, 0xab, 0x15, 0x22, + 0x10, 0x1a, 0x5b, 0x78, 0x00, 0x1b, 0x40, 0x18, + 0xd2, 0x1a, 0x12, 0x1b, 0x51, 0x18, 0x00, 0x22, + 0x85, 0x42, 0x02, 0xdb, 0x00, 0xab, 0x1a, 0x70, + 0x02, 0xe0, 0x40, 0x1b, 0x3c, 0x00, 0x98, 0x0c, + 0x01, 0x00, 0x00, 0xab, 0x18, 0x70, 0x8e, 0x42, + 0x02, 0xdb, 0x00, 0xab, 0x5a, 0x70, 0x02, 0xe0, + 0x88, 0x1b, 0x00, 0xab, 0x58, 0x70, 0x00, 0x98, + 0xff, 0xf7, 0x8d, 0xf8, 0x01, 0xf0, 0xff, 0xf8, + 0xf8, 0xbd, 0xe6, 0x78, 0x01, 0x00, 0x65, 0x73, + 0x01, 0x00, 0x70, 0xb5, 0x08, 0x4e, 0x06, 0x4d, + 0x00, 0x24, 0x06, 0x20, 0x60, 0x43, 0x80, 0x19, + 0x06, 0x22, 0x29, 0x1c, 0xef, 0xf7, 0x3c, 0x00, + 0xd4, 0x0c, 0x01, 0x00, 0x11, 0xfc, 0x01, 0x34, + 0x05, 0x2c, 0xf5, 0xdb, 0x70, 0xbd, 0x00, 0x00, + 0x4e, 0x47, 0x01, 0x00, 0xe6, 0x7a, 0x01, 0x00, + 0x03, 0x48, 0x80, 0xb5, 0x01, 0x68, 0x03, 0x48, + 0xfe, 0xf7, 0x42, 0xfb, 0x80, 0xbd, 0x00, 0x00, + 0xa8, 0x79, 0x01, 0x00, 0xc4, 0x60, 0x01, 0x00, + 0x03, 0x48, 0x80, 0xb5, 0x01, 0x68, 0x03, 0x48, + 0xfe, 0xf7, 0x4a, 0xfb, 0x80, 0xbd, 0x00, 0x00, + 0x3c, 0x00, 0x10, 0x0d, 0x01, 0x00, 0xa8, 0x79, + 0x01, 0x00, 0xc4, 0x60, 0x01, 0x00, 0x10, 0xb5, + 0x00, 0x28, 0x0a, 0xd0, 0x06, 0x4c, 0xa1, 0x69, + 0x00, 0x29, 0x01, 0xd1, 0x00, 0x20, 0x00, 0xe0, + 0x09, 0x68, 0xf7, 0xf7, 0x38, 0xfb, 0xa0, 0x61, + 0x10, 0xbd, 0x00, 0x20, 0x10, 0xbd, 0xa4, 0x6e, + 0x01, 0x00, 0xf3, 0xb5, 0x37, 0x48, 0x83, 0xb0, + 0x02, 0x90, 0x80, 0x79, 0x0e, 0x1c, 0x00, 0x27, + 0x01, 0x90, 0x3c, 0x00, 0x4c, 0x0d, 0x01, 0x00, + 0x34, 0x48, 0x35, 0x4a, 0x01, 0x6a, 0x03, 0x9c, + 0x03, 0x1c, 0x1b, 0x69, 0xa1, 0x42, 0x01, 0xd0, + 0x93, 0x61, 0x00, 0xe0, 0x53, 0x61, 0x31, 0x49, + 0x8a, 0x68, 0x96, 0x42, 0x3f, 0xd0, 0x2d, 0x48, + 0x8e, 0x60, 0xc1, 0x68, 0x00, 0x24, 0x25, 0x1c, + 0x00, 0x29, 0x2d, 0x48, 0x09, 0xd0, 0x00, 0x2e, + 0x0b, 0xd0, 0x28, 0x48, 0x01, 0x24, 0xc0, 0x6a, + 0x24, 0x03, 0x00, 0x28, 0x3c, 0x00, 0x88, 0x0d, + 0x01, 0x00, 0x06, 0xd0, 0x01, 0x27, 0x04, 0xe0, + 0x00, 0x2e, 0x01, 0xd0, 0x05, 0x1c, 0xf9, 0xe7, + 0x04, 0x1c, 0x00, 0x2f, 0x06, 0xd0, 0xfb, 0xf7, + 0x1e, 0xfb, 0x1f, 0x48, 0x01, 0x68, 0x22, 0x48, + 0xfe, 0xf7, 0xfb, 0xfa, 0x20, 0x1c, 0x28, 0x43, + 0x0e, 0xd0, 0x2a, 0x1c, 0x21, 0x1c, 0x01, 0x20, + 0x02, 0xf0, 0x21, 0xfe, 0x2a, 0x1c, 0x21, 0x1c, + 0x02, 0x20, 0x02, 0xf0, 0x1c, 0xfe, 0x3c, 0x00, + 0xc4, 0x0d, 0x01, 0x00, 0x2a, 0x1c, 0x21, 0x1c, + 0x03, 0x20, 0x02, 0xf0, 0x17, 0xfe, 0x00, 0x2f, + 0x06, 0xd1, 0x13, 0x48, 0x01, 0x68, 0x16, 0x48, + 0xfe, 0xf7, 0xce, 0xfa, 0xfa, 0xf7, 0x42, 0xfd, + 0x03, 0x9c, 0x00, 0x2c, 0x01, 0xd1, 0x01, 0xf0, + 0xe1, 0xff, 0x01, 0xa9, 0x03, 0xc9, 0x88, 0x71, + 0x01, 0xf0, 0xdc, 0xff, 0x0a, 0x4c, 0x0a, 0x4b, + 0x44, 0x3c, 0xa1, 0x69, 0x22, 0x69, 0x08, 0x3b, + 0x3c, 0x00, 0x00, 0x0e, 0x01, 0x00, 0x41, 0x1a, + 0x00, 0x2a, 0x03, 0xd0, 0x1a, 0x68, 0x51, 0x18, + 0x19, 0x60, 0x02, 0xe0, 0x5a, 0x68, 0x51, 0x18, + 0x59, 0x60, 0xa0, 0x61, 0x26, 0x61, 0x05, 0xb0, + 0xf0, 0xbd, 0x20, 0x10, 0x07, 0x00, 0xa4, 0x6c, + 0x01, 0x00, 0x10, 0x00, 0x07, 0x00, 0xb0, 0x57, + 0x01, 0x00, 0x00, 0x10, 0x60, 0x00, 0x84, 0x73, + 0x01, 0x00, 0x1c, 0xb5, 0x4c, 0x23, 0x08, 0x49, + 0x58, 0x43, 0x3c, 0x00, 0x3c, 0x0e, 0x01, 0x00, + 0x44, 0x18, 0x20, 0x1c, 0x40, 0x30, 0x41, 0x78, + 0x62, 0x68, 0x00, 0x91, 0x01, 0x92, 0x3f, 0x21, + 0x0b, 0x5d, 0x61, 0x8f, 0x00, 0x78, 0x62, 0x6c, + 0xfa, 0xf7, 0x28, 0xf8, 0xa0, 0x85, 0x1c, 0xbd, + 0x58, 0xe3, 0x01, 0x00, 0xb0, 0xb5, 0x16, 0x4d, + 0xa9, 0x69, 0x00, 0x29, 0x25, 0xd0, 0x2c, 0x1c, + 0x30, 0x34, 0x20, 0x7a, 0x00, 0x28, 0x20, 0xd0, + 0x00, 0x23, 0x81, 0x22, 0x3c, 0x00, 0x78, 0x0e, + 0x01, 0x00, 0x18, 0x20, 0x02, 0xf0, 0x89, 0xfc, + 0x20, 0x7a, 0xff, 0x30, 0x00, 0x06, 0x00, 0x0e, + 0x20, 0x72, 0x12, 0xd1, 0x0c, 0x48, 0x28, 0x21, + 0x2c, 0x38, 0x09, 0x5c, 0x21, 0x72, 0x29, 0x7a, + 0x00, 0x29, 0x01, 0xd1, 0x00, 0x6a, 0x00, 0xe0, + 0x40, 0x6a, 0xa9, 0x69, 0x80, 0x02, 0x81, 0x42, + 0x03, 0xd2, 0x49, 0x00, 0x81, 0x42, 0x01, 0xd2, + 0xa9, 0x61, 0xb0, 0xbd, 0xa8, 0x61, 0x3c, 0x00, + 0xb4, 0x0e, 0x01, 0x00, 0xb0, 0xbd, 0x01, 0xf0, + 0x1d, 0xf9, 0xb0, 0xbd, 0xf4, 0x6e, 0x01, 0x00, + 0x7f, 0xb5, 0x05, 0x1c, 0x04, 0x20, 0x6b, 0x46, + 0x1b, 0x18, 0x02, 0x90, 0x00, 0x26, 0x28, 0x18, + 0x6a, 0x46, 0x02, 0xa9, 0xfc, 0xf7, 0x8a, 0xfb, + 0x00, 0x28, 0x06, 0xd1, 0x00, 0xab, 0x18, 0x79, + 0x04, 0x28, 0x08, 0xd0, 0x18, 0x79, 0x03, 0x28, + 0x05, 0xd0, 0x00, 0xab, 0x18, 0x79, 0x10, 0x21, + 0x3c, 0x00, 0xf0, 0x0e, 0x01, 0x00, 0x08, 0x43, + 0x04, 0xb0, 0x70, 0xbd, 0x03, 0xa9, 0xe8, 0x68, + 0xf6, 0xf7, 0xd3, 0xff, 0x00, 0x28, 0x05, 0xd0, + 0x03, 0x98, 0x20, 0x21, 0x08, 0x43, 0x00, 0x06, + 0x00, 0x0e, 0xf1, 0xe7, 0x03, 0xa9, 0x00, 0x20, + 0xf6, 0xf7, 0xc7, 0xff, 0x04, 0x1c, 0x01, 0xd1, + 0x02, 0x20, 0xe9, 0xe7, 0xe8, 0x68, 0x00, 0xab, + 0x20, 0x60, 0x00, 0x98, 0x60, 0x60, 0x18, 0x79, + 0xa0, 0x76, 0x3c, 0x00, 0x2c, 0x0f, 0x01, 0x00, + 0xa8, 0x8c, 0x60, 0x76, 0xe8, 0x69, 0x20, 0x61, + 0x68, 0x8c, 0xa0, 0x82, 0x28, 0x8c, 0x20, 0x76, + 0x69, 0x69, 0x09, 0x48, 0x81, 0x42, 0x00, 0xd9, + 0x08, 0x1c, 0xa0, 0x60, 0x20, 0x1c, 0x02, 0xf0, + 0xa1, 0xfd, 0xa1, 0x68, 0x00, 0x29, 0x04, 0xd0, + 0x03, 0x9a, 0xa1, 0x32, 0x08, 0x20, 0x02, 0xf0, + 0x37, 0xfb, 0x30, 0x1c, 0xc7, 0xe7, 0x00, 0x00, + 0xa0, 0x86, 0x01, 0x00, 0x3c, 0x00, 0x68, 0x0f, + 0x01, 0x00, 0xfe, 0xb5, 0x06, 0x1c, 0x40, 0x78, + 0x01, 0x24, 0x06, 0x28, 0x50, 0xd3, 0xc1, 0x1e, + 0x03, 0x20, 0xef, 0xf7, 0x5e, 0xfb, 0x00, 0x90, + 0x0e, 0x28, 0x49, 0xd8, 0x00, 0x20, 0x0a, 0xe0, + 0x41, 0x00, 0x09, 0x18, 0x89, 0x19, 0x4a, 0x79, + 0x89, 0x79, 0x51, 0x18, 0x01, 0x39, 0x0e, 0x29, + 0x00, 0xd9, 0x00, 0x24, 0x01, 0x30, 0x00, 0x99, + 0x88, 0x42, 0xf1, 0xdb, 0x00, 0x2c, 0x3c, 0x00, + 0xa4, 0x0f, 0x01, 0x00, 0x37, 0xd0, 0x03, 0x22, + 0xb1, 0x1c, 0x1b, 0x48, 0xef, 0xf7, 0xa4, 0xfa, + 0x1a, 0x4c, 0x1c, 0x21, 0x20, 0x1c, 0xef, 0xf7, + 0x4d, 0xfa, 0x00, 0x25, 0x28, 0xe0, 0x69, 0x00, + 0x49, 0x19, 0x02, 0x91, 0x8a, 0x19, 0x53, 0x79, + 0x15, 0x48, 0x43, 0x54, 0x93, 0x79, 0x0f, 0x18, + 0x7b, 0x70, 0xd3, 0x79, 0xbb, 0x70, 0x07, 0x23, + 0xd2, 0x56, 0x01, 0x92, 0x44, 0x5c, 0x0f, 0xe0, + 0x3c, 0x00, 0xe0, 0x0f, 0x01, 0x00, 0x20, 0x1c, + 0xfe, 0xf7, 0x7b, 0xff, 0x00, 0x28, 0x07, 0xd0, + 0x0c, 0x4a, 0x60, 0x00, 0x80, 0x18, 0x01, 0x21, + 0x10, 0x38, 0x81, 0x73, 0x01, 0x99, 0xc1, 0x73, + 0x01, 0x34, 0x24, 0x06, 0x24, 0x0e, 0x07, 0x48, + 0x02, 0x99, 0x40, 0x5c, 0x79, 0x78, 0x40, 0x18, + 0xa0, 0x42, 0xe8, 0xd8, 0x01, 0x35, 0x00, 0x98, + 0x85, 0x42, 0xd3, 0xdb, 0xfe, 0xbd, 0xe8, 0x62, + 0x01, 0x00, 0x3c, 0x00, 0x1c, 0x10, 0x01, 0x00, + 0xe6, 0x78, 0x01, 0x00, 0xeb, 0x62, 0x01, 0x00, + 0x01, 0x68, 0x0f, 0x29, 0x01, 0xdd, 0x0f, 0x21, + 0x01, 0x60, 0x01, 0x68, 0x00, 0x29, 0x01, 0xda, + 0x00, 0x21, 0x01, 0x60, 0x70, 0x47, 0x00, 0x00, + 0xf8, 0xb5, 0x04, 0x1c, 0x1e, 0x48, 0x22, 0x1d, + 0x05, 0x68, 0x00, 0x92, 0x16, 0x1c, 0x23, 0x1c, + 0x0f, 0x1c, 0xcc, 0x33, 0x2a, 0x1c, 0x20, 0x1c, + 0x70, 0x30, 0xa1, 0x6d, 0x3c, 0x00, 0x58, 0x10, + 0x01, 0x00, 0x00, 0xf0, 0x3e, 0xf9, 0x00, 0x96, + 0xa1, 0x6d, 0x27, 0x20, 0x01, 0x40, 0x23, 0x1c, + 0xe4, 0x33, 0x20, 0x1c, 0x2a, 0x1c, 0x5c, 0x30, + 0x00, 0xf0, 0x33, 0xf9, 0x13, 0x48, 0x00, 0x78, + 0x0e, 0x28, 0x01, 0xd2, 0x01, 0x25, 0x85, 0x40, + 0x11, 0x48, 0xa1, 0x69, 0x00, 0x78, 0x29, 0x40, + 0x00, 0x07, 0x0b, 0xd4, 0x48, 0x07, 0x03, 0xd5, + 0x08, 0x07, 0x01, 0xd5, 0x04, 0x20, 0x3c, 0x00, + 0x94, 0x10, 0x01, 0x00, 0x81, 0x43, 0x88, 0x06, + 0x03, 0xd5, 0x48, 0x06, 0x01, 0xd5, 0x20, 0x20, + 0x81, 0x43, 0x23, 0x1c, 0xb4, 0x33, 0x2a, 0x1c, + 0x20, 0x1c, 0x30, 0x30, 0x00, 0x96, 0x00, 0xf0, + 0x13, 0xf9, 0x39, 0x1c, 0x20, 0x1c, 0xf0, 0xf7, + 0x47, 0xfc, 0xf8, 0xbd, 0x2c, 0x7d, 0x01, 0x00, + 0x10, 0x67, 0x01, 0x00, 0x1d, 0x75, 0x01, 0x00, + 0xb0, 0xb5, 0xf2, 0xf7, 0x27, 0xfc, 0xfe, 0xf7, + 0x3c, 0x00, 0xd0, 0x10, 0x01, 0x00, 0x09, 0xf9, + 0x0f, 0x48, 0x00, 0x25, 0x45, 0x70, 0x0e, 0x48, + 0x0d, 0x4c, 0x00, 0x88, 0x5b, 0x34, 0xa0, 0x82, + 0xf9, 0xf7, 0x23, 0xfd, 0x20, 0x61, 0xa0, 0x8a, + 0x00, 0x28, 0x04, 0xd0, 0x01, 0x21, 0x89, 0x05, + 0xef, 0xf7, 0x0d, 0xfb, 0xe1, 0x82, 0x05, 0x48, + 0x01, 0x38, 0x45, 0x60, 0x01, 0xf0, 0x55, 0xfe, + 0x02, 0x1c, 0x23, 0x1c, 0x00, 0x21, 0x00, 0x20, + 0xf4, 0xf7, 0x3c, 0x00, 0x0c, 0x11, 0x01, 0x00, + 0x49, 0xfd, 0xb0, 0xbd, 0x45, 0x7d, 0x01, 0x00, + 0xf4, 0x67, 0x01, 0x00, 0x70, 0xb5, 0x16, 0x1c, + 0x5a, 0x89, 0x04, 0x1c, 0x04, 0x98, 0x92, 0x07, + 0x92, 0x0f, 0x00, 0x25, 0x00, 0x29, 0xa2, 0x71, + 0x09, 0xd0, 0x05, 0x21, 0xf9, 0xf7, 0x24, 0xfb, + 0x00, 0x28, 0x01, 0xd0, 0xc0, 0x78, 0x00, 0xe0, + 0x01, 0x20, 0xe0, 0x71, 0x00, 0xe0, 0xe5, 0x71, + 0xe5, 0x60, 0xa6, 0x60, 0x3c, 0x00, 0x48, 0x11, + 0x01, 0x00, 0x70, 0xbd, 0x00, 0x00, 0xfe, 0xb5, + 0x05, 0x1c, 0x0e, 0x22, 0x9c, 0x30, 0x16, 0x49, + 0xef, 0xf7, 0xcf, 0xf9, 0x29, 0x1c, 0x28, 0x1c, + 0x80, 0x30, 0x88, 0x31, 0x00, 0x24, 0x2f, 0x1c, + 0x60, 0x37, 0x02, 0x91, 0x01, 0x90, 0x20, 0x06, + 0x00, 0x0e, 0x06, 0x1c, 0xf9, 0xf7, 0x0d, 0xfe, + 0x00, 0x28, 0x03, 0xd0, 0x01, 0x98, 0x42, 0x68, + 0x02, 0x99, 0x01, 0xe0, 0xea, 0x6d, 0x3c, 0x00, + 0x84, 0x11, 0x01, 0x00, 0x39, 0x1c, 0x00, 0x2a, + 0x0d, 0xd0, 0x00, 0x20, 0x03, 0xe0, 0x0b, 0x5c, + 0xb3, 0x42, 0x02, 0xd8, 0x01, 0x30, 0x90, 0x42, + 0xf9, 0xdb, 0x08, 0x18, 0x10, 0x38, 0xc0, 0x7b, + 0x29, 0x19, 0x90, 0x31, 0x08, 0x73, 0x01, 0x34, + 0x0e, 0x2c, 0xdf, 0xd3, 0xfe, 0xbd, 0x00, 0x00, + 0xcc, 0x47, 0x01, 0x00, 0xff, 0xb5, 0x81, 0xb0, + 0x14, 0x1c, 0x10, 0x1c, 0x06, 0x22, 0x0d, 0x1c, + 0x3c, 0x00, 0xc0, 0x11, 0x01, 0x00, 0x19, 0x1c, + 0x0b, 0x9e, 0x0a, 0x9f, 0xef, 0xf7, 0x97, 0xf9, + 0x06, 0x22, 0x39, 0x1c, 0xa0, 0x18, 0xef, 0xf7, + 0x92, 0xf9, 0xe6, 0x60, 0x2c, 0x60, 0x10, 0x20, + 0x28, 0x81, 0x6e, 0x60, 0x01, 0x98, 0xe8, 0x60, + 0x05, 0xb0, 0xf0, 0xbd, 0x00, 0x00, 0x70, 0xb5, + 0x04, 0x1c, 0x00, 0x20, 0x20, 0x61, 0x58, 0x20, + 0x00, 0x5d, 0x0e, 0x1c, 0x15, 0x1c, 0xc0, 0x07, + 0xc0, 0x17, 0x3c, 0x00, 0xfc, 0x11, 0x01, 0x00, + 0x01, 0x30, 0xe0, 0x61, 0x21, 0x6b, 0x00, 0x29, + 0x36, 0xd1, 0x1e, 0x49, 0x09, 0x68, 0x29, 0x43, + 0x32, 0xd0, 0xa1, 0x68, 0x89, 0x8a, 0x00, 0x29, + 0x2e, 0xd0, 0x00, 0x28, 0x0b, 0xd0, 0x20, 0x1c, + 0x58, 0x30, 0x00, 0xf0, 0xf3, 0xfd, 0x00, 0x28, + 0x1b, 0xd0, 0x81, 0x6a, 0x02, 0x6a, 0x40, 0x6a, + 0x09, 0x78, 0x00, 0x78, 0x06, 0xe0, 0x14, 0x4a, + 0x3c, 0x23, 0x11, 0x78, 0x3c, 0x00, 0x38, 0x12, + 0x01, 0x00, 0x50, 0x78, 0x43, 0x43, 0x9a, 0x18, + 0x04, 0x32, 0x00, 0x2d, 0x03, 0xd1, 0x02, 0x29, + 0x01, 0xd0, 0x03, 0x29, 0x02, 0xd1, 0x6d, 0x21, + 0x22, 0x61, 0x08, 0x55, 0x20, 0x69, 0x00, 0x28, + 0x0d, 0xd0, 0x81, 0x88, 0x00, 0x29, 0x01, 0xd1, + 0x01, 0x20, 0x70, 0xbd, 0x80, 0x79, 0x02, 0x28, + 0x05, 0xd1, 0x22, 0x1c, 0x07, 0x49, 0x07, 0x48, + 0xf8, 0xf7, 0x4b, 0xff, 0x02, 0xe0, 0x3c, 0x00, + 0x74, 0x12, 0x01, 0x00, 0x20, 0x1c, 0xef, 0xf7, + 0xb5, 0xf8, 0x00, 0x20, 0x70, 0xbd, 0x00, 0x00, + 0x28, 0x61, 0x01, 0x00, 0x68, 0x61, 0x01, 0x00, + 0xa1, 0xda, 0x00, 0x00, 0xa0, 0x6a, 0x01, 0x00, + 0x10, 0xb5, 0x00, 0x21, 0x00, 0x20, 0xf9, 0xf7, + 0x39, 0xfe, 0xc4, 0x00, 0xf9, 0xf7, 0x54, 0xfe, + 0x24, 0x18, 0xf9, 0xf7, 0x47, 0xfe, 0x08, 0x49, + 0x20, 0x18, 0x09, 0x88, 0x08, 0x4c, 0x40, 0x18, + 0x3c, 0x00, 0xb0, 0x12, 0x01, 0x00, 0x06, 0x49, + 0x09, 0x88, 0x40, 0x18, 0x60, 0x61, 0xf9, 0xf7, + 0x46, 0xfe, 0x05, 0x49, 0x09, 0x88, 0x40, 0x18, + 0x40, 0x00, 0xa0, 0x61, 0x10, 0xbd, 0x02, 0x61, + 0x01, 0x00, 0x04, 0x61, 0x01, 0x00, 0xd4, 0x79, + 0x01, 0x00, 0xa6, 0x69, 0x01, 0x00, 0x11, 0x40, + 0x08, 0x1c, 0x10, 0xb5, 0x1c, 0x1c, 0x19, 0x1c, + 0x08, 0x31, 0x18, 0x60, 0xf1, 0xf7, 0x31, 0xfe, + 0x60, 0x60, 0x3c, 0x00, 0xec, 0x12, 0x01, 0x00, + 0x10, 0xbd, 0x00, 0x00, 0xf8, 0xb5, 0x06, 0x1c, + 0x22, 0x48, 0x0f, 0x1c, 0x41, 0x68, 0x91, 0x42, + 0x03, 0xd0, 0x00, 0x21, 0x81, 0x60, 0xc1, 0x60, + 0x42, 0x60, 0xc4, 0x68, 0x15, 0xe0, 0x28, 0x20, + 0x1d, 0x49, 0x60, 0x43, 0x40, 0x18, 0x05, 0x1c, + 0x06, 0x22, 0x31, 0x1c, 0xef, 0xf7, 0x70, 0xf8, + 0x00, 0x28, 0x07, 0xd1, 0xa8, 0x1d, 0x39, 0x1c, + 0xf9, 0xf7, 0x10, 0xfd, 0x3c, 0x00, 0x28, 0x13, + 0x01, 0x00, 0x00, 0x28, 0x01, 0xd0, 0x01, 0x20, + 0xf8, 0xbd, 0x01, 0x34, 0x24, 0x07, 0x24, 0x0f, + 0x12, 0x48, 0x80, 0x68, 0x84, 0x42, 0xe5, 0xd1, + 0x10, 0x4c, 0x28, 0x23, 0xa0, 0x68, 0x0f, 0x4d, + 0x58, 0x43, 0x40, 0x19, 0x06, 0x22, 0x31, 0x1c, + 0xef, 0xf7, 0xd3, 0xf8, 0xa0, 0x68, 0x28, 0x23, + 0x58, 0x43, 0x40, 0x19, 0x06, 0x30, 0x22, 0x22, + 0x39, 0x1c, 0xef, 0xf7, 0xca, 0xf8, 0x3c, 0x00, + 0x64, 0x13, 0x01, 0x00, 0xa0, 0x68, 0x01, 0x30, + 0x00, 0x07, 0x00, 0x0f, 0xa0, 0x60, 0xe1, 0x68, + 0x81, 0x42, 0x03, 0xd1, 0x01, 0x31, 0x08, 0x07, + 0x00, 0x0f, 0xe0, 0x60, 0x00, 0x20, 0xd6, 0xe7, + 0xec, 0x65, 0x01, 0x00, 0xa0, 0xf4, 0x01, 0x00, + 0x10, 0xb5, 0x00, 0x21, 0x03, 0x20, 0x00, 0xf0, + 0xe5, 0xff, 0x05, 0x4c, 0xa0, 0x68, 0x00, 0x28, + 0x04, 0xd1, 0x01, 0xf0, 0x07, 0xfd, 0x61, 0x68, + 0x3c, 0x00, 0xa0, 0x13, 0x01, 0x00, 0x40, 0x1a, + 0x60, 0x60, 0x10, 0xbd, 0x00, 0x00, 0xd0, 0x60, + 0x01, 0x00, 0x02, 0x68, 0x0a, 0x60, 0x01, 0x60, + 0x70, 0x47, 0x01, 0x1c, 0x00, 0x68, 0x00, 0x28, + 0x01, 0xd0, 0x02, 0x68, 0x0a, 0x60, 0x70, 0x47, + 0x00, 0x00, 0xfe, 0xb5, 0x14, 0x1c, 0x1d, 0x1c, + 0x00, 0x22, 0xd2, 0x43, 0x01, 0xab, 0xf3, 0xf7, + 0x82, 0xff, 0x01, 0x98, 0x00, 0x26, 0x28, 0x40, + 0x01, 0x90, 0x3c, 0x00, 0xdc, 0x13, 0x01, 0x00, + 0x00, 0x25, 0x00, 0x27, 0x20, 0x60, 0x1e, 0xe0, + 0x01, 0x21, 0xb9, 0x40, 0x0a, 0x1c, 0x02, 0x40, + 0x18, 0xd0, 0x88, 0x43, 0x01, 0x90, 0x39, 0x06, + 0x09, 0x0e, 0x70, 0x19, 0x00, 0x19, 0x02, 0x91, + 0x01, 0x77, 0x08, 0x1c, 0xf9, 0xf7, 0xc6, 0xfc, + 0x00, 0x28, 0x06, 0xd0, 0x30, 0x1c, 0x00, 0x19, + 0x01, 0x36, 0x02, 0x99, 0x30, 0x30, 0x01, 0x70, + 0x04, 0xe0, 0x28, 0x1c, 0x3c, 0x00, 0x18, 0x14, + 0x01, 0x00, 0x01, 0x35, 0x02, 0x99, 0x00, 0x19, + 0x01, 0x72, 0x01, 0x37, 0x01, 0x98, 0x00, 0x28, + 0xdd, 0xd1, 0x70, 0x19, 0xa0, 0x61, 0x65, 0x60, + 0xe6, 0x62, 0xfe, 0xbd, 0x00, 0x00, 0xb0, 0xb5, + 0x14, 0x4d, 0x04, 0x1c, 0x28, 0x7a, 0x01, 0x28, + 0x02, 0xd1, 0x04, 0x20, 0xf6, 0xf7, 0xad, 0xf9, + 0x21, 0x1c, 0xa8, 0x6a, 0xf5, 0xf7, 0x21, 0xfc, + 0x00, 0x28, 0x03, 0xd1, 0x04, 0x20, 0x3c, 0x00, + 0x54, 0x14, 0x01, 0x00, 0xf6, 0xf7, 0xa4, 0xf9, + 0xb0, 0xbd, 0x02, 0x20, 0x28, 0x70, 0x28, 0x8c, + 0x00, 0x28, 0x00, 0xd0, 0x60, 0x81, 0x68, 0x8c, + 0x00, 0x28, 0x00, 0xd0, 0xa0, 0x81, 0xa8, 0x8c, + 0x00, 0x28, 0x00, 0xd0, 0xe0, 0x81, 0xe8, 0x69, + 0x01, 0x23, 0x02, 0x04, 0x12, 0x0c, 0x20, 0x1c, + 0x02, 0x49, 0xfc, 0xf7, 0x19, 0xff, 0xb0, 0xbd, + 0xf4, 0x6e, 0x01, 0x00, 0xa1, 0x77, 0x00, 0x00, + 0x3c, 0x00, 0x90, 0x14, 0x01, 0x00, 0xf8, 0xb5, + 0x19, 0x4e, 0x05, 0x1c, 0xb0, 0x69, 0x00, 0x28, + 0x00, 0xd1, 0x30, 0x68, 0xff, 0xf7, 0x3b, 0xfc, + 0x15, 0x4f, 0x04, 0x1c, 0x50, 0x37, 0x00, 0x28, + 0x0b, 0xd0, 0x60, 0x68, 0x29, 0x1c, 0x78, 0x60, + 0x01, 0x20, 0x38, 0x63, 0x20, 0x1c, 0xf5, 0xf7, + 0xea, 0xfb, 0x00, 0x28, 0x04, 0xd1, 0x00, 0x20, + 0xf8, 0xbd, 0x00, 0x23, 0xfb, 0x62, 0xfa, 0xe7, + 0x00, 0x23, 0x3c, 0x00, 0xcc, 0x14, 0x01, 0x00, + 0x23, 0x77, 0xf8, 0x6a, 0x00, 0x28, 0x01, 0xd1, + 0x01, 0x20, 0xf8, 0x62, 0x38, 0x7a, 0x01, 0x28, + 0x07, 0xd0, 0xf8, 0x69, 0x06, 0x49, 0x02, 0x04, + 0x12, 0x0c, 0x28, 0x1c, 0xfc, 0xf7, 0xe6, 0xfe, + 0x01, 0xe0, 0xfb, 0x62, 0xb3, 0x61, 0x01, 0x20, + 0xe5, 0xe7, 0x00, 0x00, 0xa4, 0x6e, 0x01, 0x00, + 0xdd, 0x02, 0x01, 0x00, 0x70, 0xb5, 0x0d, 0x1c, + 0x04, 0x1c, 0x16, 0x1c, 0x3c, 0x00, 0x08, 0x15, + 0x01, 0x00, 0x04, 0x2c, 0x1b, 0xd2, 0x10, 0x48, + 0x83, 0x42, 0x07, 0xd2, 0x58, 0x00, 0x0f, 0x49, + 0xef, 0xf7, 0xfb, 0xf8, 0xff, 0x30, 0x00, 0x0a, + 0x01, 0x38, 0x00, 0xe0, 0x00, 0x20, 0x1f, 0x35, + 0xea, 0x06, 0x61, 0x07, 0x09, 0x0e, 0xd2, 0x0e, + 0x11, 0x43, 0x72, 0x07, 0x52, 0x0d, 0x11, 0x43, + 0x00, 0x06, 0x00, 0x0a, 0x08, 0x43, 0x06, 0x4a, + 0xa1, 0x00, 0x50, 0x50, 0x70, 0xbd, 0x3c, 0x00, + 0x44, 0x15, 0x01, 0x00, 0x01, 0x21, 0x8d, 0x20, + 0xef, 0xf7, 0xac, 0xfe, 0x70, 0xbd, 0x00, 0x00, + 0x40, 0x9c, 0x00, 0x00, 0x00, 0x80, 0x38, 0x01, + 0xe8, 0x60, 0x01, 0x00, 0x09, 0x4a, 0x80, 0x00, + 0x10, 0x58, 0x40, 0x09, 0x40, 0x01, 0x07, 0x22, + 0x02, 0x43, 0x07, 0x48, 0x03, 0x68, 0x00, 0x2b, + 0xfc, 0xdb, 0x42, 0x60, 0x09, 0x06, 0x01, 0x60, + 0x01, 0x68, 0x00, 0x29, 0xfc, 0xdb, 0x08, 0x20, + 0x3c, 0x00, 0x80, 0x15, 0x01, 0x00, 0x70, 0x47, + 0x00, 0x00, 0xe8, 0x60, 0x01, 0x00, 0x30, 0x20, + 0x07, 0x00, 0xb0, 0xb5, 0x04, 0x1c, 0x0d, 0x1c, + 0x07, 0x49, 0xa0, 0x00, 0x08, 0x58, 0x00, 0x28, + 0x03, 0xd1, 0x02, 0x21, 0x8d, 0x20, 0xef, 0xf7, + 0x80, 0xfe, 0x29, 0x1c, 0x20, 0x1c, 0xf6, 0xf7, + 0xa8, 0xfa, 0xb0, 0xbd, 0x00, 0x00, 0xe8, 0x60, + 0x01, 0x00, 0xb0, 0xb5, 0x04, 0x1c, 0x0d, 0x1c, + 0x07, 0x49, 0x3c, 0x00, 0xbc, 0x15, 0x01, 0x00, + 0xa0, 0x00, 0x08, 0x58, 0x00, 0x28, 0x03, 0xd1, + 0x02, 0x21, 0x8d, 0x20, 0xef, 0xf7, 0x6c, 0xfe, + 0x29, 0x1c, 0x20, 0x1c, 0xff, 0xf7, 0xc4, 0xff, + 0xb0, 0xbd, 0x00, 0x00, 0xe8, 0x60, 0x01, 0x00, + 0xf8, 0xb5, 0x0d, 0x1c, 0x16, 0x1c, 0xf7, 0xf7, + 0x17, 0xf9, 0x04, 0x1c, 0x28, 0x68, 0x40, 0x4f, + 0x81, 0x78, 0x00, 0x29, 0x3b, 0xd1, 0xc1, 0x78, + 0x00, 0x29, 0x58, 0xd1, 0x3c, 0x00, 0xf8, 0x15, + 0x01, 0x00, 0xf8, 0xf7, 0xf8, 0xf9, 0x22, 0x8e, + 0x61, 0x8e, 0x8a, 0x42, 0x04, 0xd0, 0xa1, 0x6a, + 0x09, 0x18, 0xe0, 0x69, 0x81, 0x42, 0x10, 0xd9, + 0x38, 0x49, 0x32, 0x1c, 0x48, 0x6b, 0x01, 0x30, + 0x48, 0x63, 0x20, 0x6a, 0x01, 0x30, 0x20, 0x62, + 0x38, 0x68, 0x01, 0x30, 0x38, 0x60, 0xe0, 0x68, + 0x63, 0x69, 0x29, 0x1c, 0xee, 0xf7, 0xd8, 0xfe, + 0xf8, 0xbd, 0x01, 0x32, 0x12, 0x04, 0x3c, 0x00, + 0x34, 0x16, 0x01, 0x00, 0x12, 0x0c, 0x22, 0x86, + 0xa1, 0x62, 0xb8, 0x68, 0x00, 0x28, 0x34, 0xd1, + 0x2c, 0x48, 0x0c, 0x23, 0x00, 0x68, 0x1b, 0x1a, + 0x9a, 0x42, 0x07, 0xd2, 0x19, 0x23, 0x9b, 0x01, + 0xaf, 0x22, 0x92, 0x01, 0x58, 0x43, 0x10, 0x1a, + 0x81, 0x42, 0x26, 0xd3, 0x01, 0x20, 0xb8, 0x60, + 0x01, 0x21, 0x0c, 0x20, 0x00, 0xf0, 0x7a, 0xfe, + 0x1f, 0xe0, 0x01, 0x29, 0x1d, 0xd1, 0xc0, 0x78, + 0x3c, 0x00, 0x70, 0x16, 0x01, 0x00, 0x17, 0x28, + 0x1a, 0xd1, 0xa0, 0x8e, 0xe1, 0x8e, 0x88, 0x42, + 0x14, 0xd3, 0xe9, 0x68, 0x09, 0x68, 0x09, 0x79, + 0x09, 0x06, 0x0f, 0xd5, 0x60, 0x6a, 0x32, 0x1c, + 0x01, 0x30, 0x60, 0x62, 0xe0, 0x68, 0x63, 0x69, + 0x29, 0x1c, 0xee, 0xf7, 0xa3, 0xfe, 0xe8, 0x68, + 0x01, 0x68, 0x08, 0x31, 0x0b, 0x20, 0x00, 0xf0, + 0x5c, 0xfe, 0xc3, 0xe7, 0x01, 0x30, 0xa0, 0x86, + 0xa0, 0x8d, 0x3c, 0x00, 0xac, 0x16, 0x01, 0x00, + 0xe1, 0x8d, 0x88, 0x42, 0x04, 0xd1, 0x03, 0x21, + 0x02, 0x20, 0xef, 0xf7, 0xf5, 0xfd, 0xb8, 0xe7, + 0x60, 0x68, 0x45, 0x60, 0x86, 0x60, 0x00, 0x68, + 0x60, 0x60, 0xf8, 0x68, 0x01, 0x30, 0xf8, 0x60, + 0xa0, 0x8d, 0x41, 0x1c, 0xa1, 0x85, 0x00, 0x28, + 0xab, 0xd1, 0x08, 0x48, 0xb9, 0x69, 0xfd, 0xf7, + 0x61, 0xfe, 0x22, 0x1c, 0x02, 0x21, 0xf1, 0x20, + 0x02, 0xf0, 0x64, 0xf8, 0x3c, 0x00, 0xe8, 0x16, + 0x01, 0x00, 0xa1, 0xe7, 0x00, 0x00, 0xfc, 0x5a, + 0x01, 0x00, 0x90, 0x5c, 0x01, 0x00, 0x18, 0x57, + 0x01, 0x00, 0xc4, 0x60, 0x01, 0x00, 0x80, 0xb5, + 0x02, 0x1c, 0x02, 0x21, 0xf0, 0x20, 0x02, 0xf0, + 0x54, 0xf8, 0x80, 0xbd, 0x00, 0x00, 0x00, 0x28, + 0x03, 0xd1, 0x02, 0x48, 0x41, 0x78, 0xc9, 0x07, + 0xfc, 0xd5, 0x70, 0x47, 0x00, 0x00, 0x04, 0x00, + 0x07, 0x00, 0x80, 0xb5, 0x00, 0x06, 0x3c, 0x00, + 0x24, 0x17, 0x01, 0x00, 0x01, 0xd1, 0xf1, 0xf7, + 0x71, 0xfe, 0x80, 0xbd, 0x80, 0xb5, 0xf4, 0xf7, + 0xe5, 0xfa, 0x80, 0xbd, 0x80, 0xb5, 0xf6, 0xf7, + 0xeb, 0xf8, 0x80, 0xbd, 0x01, 0x49, 0x00, 0x20, + 0x08, 0x74, 0x70, 0x47, 0x78, 0x69, 0x01, 0x00, + 0x80, 0xb5, 0xc0, 0x07, 0x03, 0xd5, 0x02, 0x49, + 0x01, 0x20, 0x00, 0xf0, 0x1d, 0xfc, 0x80, 0xbd, + 0x50, 0xc3, 0x00, 0x00, 0x00, 0x06, 0x00, 0x0e, + 0x3c, 0x00, 0x60, 0x17, 0x01, 0x00, 0x01, 0x28, + 0x80, 0xb5, 0x02, 0xd1, 0xf6, 0xf7, 0xe1, 0xf9, + 0x80, 0xbd, 0x00, 0x28, 0xfc, 0xd1, 0xf1, 0xf7, + 0x4c, 0xfe, 0x80, 0xbd, 0x00, 0x00, 0x80, 0xb5, + 0xf6, 0xf7, 0xd7, 0xf9, 0x80, 0xbd, 0x03, 0x49, + 0x80, 0xb5, 0x00, 0x20, 0x08, 0x74, 0xf6, 0xf7, + 0xfe, 0xf9, 0x80, 0xbd, 0x00, 0x00, 0x78, 0x69, + 0x01, 0x00, 0x80, 0xb5, 0x00, 0x06, 0x00, 0x0e, + 0xf1, 0xf7, 0x3c, 0x00, 0x9c, 0x17, 0x01, 0x00, + 0x71, 0xfe, 0x80, 0xbd, 0x10, 0xb5, 0x01, 0x28, + 0x08, 0xd0, 0x02, 0x28, 0x03, 0xd0, 0x03, 0x28, + 0x01, 0xd0, 0xef, 0xf7, 0xa7, 0xfd, 0xf6, 0xf7, + 0xe9, 0xf9, 0x10, 0xbd, 0x01, 0xf0, 0xf8, 0xfa, + 0x04, 0x1c, 0xfa, 0xf7, 0x5d, 0xfd, 0x24, 0x1a, + 0xfa, 0xf7, 0x3e, 0xfd, 0x08, 0x49, 0x00, 0x28, + 0x0b, 0xd0, 0x48, 0x6a, 0x00, 0x28, 0x08, 0xd0, + 0x06, 0x48, 0x84, 0x42, 0x3c, 0x00, 0xd8, 0x17, + 0x01, 0x00, 0x05, 0xd2, 0x01, 0x1b, 0x01, 0x22, + 0x07, 0x20, 0x01, 0xf0, 0xf4, 0xfe, 0xe5, 0xe7, + 0x00, 0x20, 0x48, 0x61, 0xe2, 0xe7, 0x78, 0x69, + 0x01, 0x00, 0x50, 0xc3, 0x00, 0x00, 0x09, 0x49, + 0x80, 0xb5, 0x48, 0x69, 0x00, 0x28, 0x0c, 0xd0, + 0x08, 0x6a, 0xca, 0x69, 0x80, 0x1a, 0x00, 0x28, + 0x07, 0xdd, 0x00, 0x20, 0x48, 0x61, 0x01, 0x21, + 0x07, 0x20, 0x01, 0xf0, 0x10, 0xff, 0x3c, 0x00, + 0x14, 0x18, 0x01, 0x00, 0xf6, 0xf7, 0xb8, 0xf9, + 0x80, 0xbd, 0x00, 0x00, 0x78, 0x69, 0x01, 0x00, + 0x80, 0xb5, 0x00, 0xf0, 0xe7, 0xfb, 0x80, 0xbd, + 0x80, 0xb5, 0x00, 0xf0, 0x3f, 0xfc, 0x00, 0x20, + 0xf7, 0xf7, 0xd4, 0xfc, 0x80, 0xbd, 0x00, 0x00, + 0x80, 0xb5, 0x00, 0xf0, 0x37, 0xfc, 0xfd, 0xf7, + 0x6f, 0xfc, 0xf5, 0xf7, 0x73, 0xfd, 0x30, 0xf0, + 0x47, 0xfb, 0x80, 0xbd, 0x04, 0x48, 0x80, 0xb5, + 0x3c, 0x00, 0x50, 0x18, 0x01, 0x00, 0xc1, 0x6a, + 0x00, 0x6b, 0xf2, 0xf7, 0xde, 0xff, 0x01, 0x20, + 0xf7, 0xf7, 0x89, 0xf8, 0x80, 0xbd, 0xa4, 0x6c, + 0x01, 0x00, 0x10, 0xb5, 0xf3, 0xf7, 0x41, 0xf8, + 0x0d, 0x4c, 0x00, 0x28, 0x04, 0xd0, 0x01, 0x20, + 0xe0, 0x64, 0xf7, 0xf7, 0xb2, 0xfc, 0x10, 0xbd, + 0x01, 0x21, 0x01, 0x20, 0xf3, 0xf7, 0xe9, 0xf8, + 0xfd, 0xf7, 0x4d, 0xfc, 0x60, 0x6d, 0x00, 0x28, + 0x03, 0xd0, 0x3c, 0x00, 0x8c, 0x18, 0x01, 0x00, + 0xf3, 0xf7, 0x82, 0xf8, 0x00, 0x28, 0x01, 0xd0, + 0xf5, 0xf7, 0x4a, 0xfd, 0x01, 0x20, 0xf2, 0xf7, + 0xc1, 0xfc, 0x10, 0xbd, 0xa4, 0x6c, 0x01, 0x00, + 0x04, 0x48, 0x80, 0xb5, 0xc1, 0x6a, 0x00, 0x6b, + 0xf2, 0xf7, 0xb2, 0xff, 0x01, 0x20, 0xf7, 0xf7, + 0x5d, 0xf8, 0x80, 0xbd, 0xa4, 0x6c, 0x01, 0x00, + 0x80, 0xb5, 0x00, 0xf0, 0xf5, 0xfb, 0xf5, 0xf7, + 0x33, 0xfd, 0xfc, 0xf7, 0x3c, 0x00, 0xc8, 0x18, + 0x01, 0x00, 0x31, 0xfd, 0xf9, 0xf7, 0xcb, 0xff, + 0x04, 0x20, 0xf2, 0xf7, 0xa6, 0xfc, 0x80, 0xbd, + 0x00, 0x00, 0x03, 0x48, 0x80, 0xb5, 0xc1, 0x6a, + 0x00, 0x6b, 0xf2, 0xf7, 0x98, 0xff, 0x80, 0xbd, + 0x00, 0x00, 0xa4, 0x6c, 0x01, 0x00, 0x80, 0xb5, + 0x00, 0xf0, 0xdd, 0xfb, 0x00, 0x20, 0xf7, 0xf7, + 0x3c, 0xf8, 0x30, 0xf0, 0xee, 0xfa, 0x80, 0xbd, + 0x00, 0x00, 0x80, 0xb5, 0x00, 0x21, 0x3c, 0x00, + 0x04, 0x19, 0x01, 0x00, 0x01, 0x20, 0xff, 0xf7, + 0x19, 0xfa, 0x01, 0x20, 0xf2, 0xf7, 0x88, 0xfc, + 0x80, 0xbd, 0x00, 0x00, 0x80, 0xb5, 0x00, 0xf0, + 0xc9, 0xfb, 0xfc, 0xf7, 0x07, 0xfd, 0x01, 0x21, + 0x01, 0x20, 0xff, 0xf7, 0x0b, 0xfa, 0x04, 0x20, + 0xf2, 0xf7, 0x7a, 0xfc, 0x80, 0xbd, 0x00, 0x00, + 0x80, 0xb5, 0x00, 0x22, 0x00, 0x21, 0x00, 0x20, + 0x00, 0xf0, 0x8a, 0xfb, 0x80, 0xbd, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0x19, 0x01, 0x00, 0x03, 0x48, + 0x80, 0xb5, 0x82, 0x6a, 0x01, 0x21, 0x04, 0x20, + 0x00, 0xf0, 0x81, 0xfb, 0x80, 0xbd, 0xd4, 0x79, + 0x01, 0x00, 0x80, 0xb5, 0x00, 0x22, 0x00, 0x21, + 0x03, 0x20, 0x00, 0xf0, 0x78, 0xfb, 0x80, 0xbd, + 0x00, 0x00, 0x03, 0x48, 0x80, 0xb5, 0x82, 0x6a, + 0x01, 0x21, 0x04, 0x20, 0x00, 0xf0, 0x6f, 0xfb, + 0x80, 0xbd, 0xd4, 0x79, 0x01, 0x00, 0x80, 0xb5, + 0x00, 0x22, 0x3c, 0x00, 0x7c, 0x19, 0x01, 0x00, + 0x00, 0x21, 0x03, 0x20, 0x00, 0xf0, 0x66, 0xfb, + 0x80, 0xbd, 0x00, 0x00, 0x06, 0x48, 0x80, 0xb5, + 0x81, 0x68, 0x42, 0x69, 0x00, 0x69, 0x51, 0x18, + 0x81, 0x42, 0x03, 0xd9, 0x01, 0x21, 0x01, 0x20, + 0x00, 0xf0, 0x58, 0xfb, 0x80, 0xbd, 0x00, 0x00, + 0xd4, 0x79, 0x01, 0x00, 0x06, 0x48, 0x80, 0xb5, + 0x82, 0x88, 0x81, 0x68, 0x00, 0x69, 0x51, 0x18, + 0x81, 0x42, 0x03, 0xd9, 0x3c, 0x00, 0xb8, 0x19, + 0x01, 0x00, 0x01, 0x21, 0x02, 0x20, 0x00, 0xf0, + 0x48, 0xfb, 0x80, 0xbd, 0x00, 0x00, 0xd4, 0x79, + 0x01, 0x00, 0x10, 0xb5, 0x08, 0x4c, 0x20, 0x7b, + 0x21, 0x6a, 0xf9, 0xf7, 0x9c, 0xfa, 0xa1, 0x69, + 0x42, 0x18, 0xa0, 0x68, 0x21, 0x69, 0x80, 0x18, + 0x88, 0x42, 0x03, 0xd9, 0x01, 0x21, 0x02, 0x20, + 0x00, 0xf0, 0x33, 0xfb, 0x10, 0xbd, 0xd4, 0x79, + 0x01, 0x00, 0x80, 0xb5, 0x00, 0x22, 0x3c, 0x00, + 0xf4, 0x19, 0x01, 0x00, 0x00, 0x21, 0x00, 0x20, + 0x00, 0xf0, 0x2a, 0xfb, 0x80, 0xbd, 0x00, 0x00, + 0x00, 0x06, 0x00, 0x0e, 0x01, 0x28, 0x80, 0xb5, + 0x02, 0xd1, 0xf6, 0xf7, 0x8f, 0xf8, 0x80, 0xbd, + 0x00, 0x28, 0xfc, 0xd1, 0xf1, 0xf7, 0xfa, 0xfc, + 0x80, 0xbd, 0x00, 0x00, 0x80, 0xb5, 0xf6, 0xf7, + 0x85, 0xf8, 0x80, 0xbd, 0x80, 0xb5, 0x00, 0x06, + 0x00, 0x0e, 0xf1, 0xf7, 0x29, 0xfd, 0x80, 0xbd, + 0x3c, 0x00, 0x30, 0x1a, 0x01, 0x00, 0xb0, 0xb5, + 0x02, 0x25, 0x02, 0x28, 0x10, 0x4c, 0x0b, 0xd1, + 0xfb, 0xf7, 0x47, 0xfc, 0x00, 0x28, 0x01, 0xd1, + 0xfe, 0xf7, 0x4f, 0xff, 0x25, 0x70, 0xa1, 0x68, + 0x0c, 0x48, 0xfd, 0xf7, 0xa8, 0xfc, 0xb0, 0xbd, + 0x03, 0x28, 0x0d, 0xd1, 0x08, 0x48, 0x7d, 0x23, + 0x1c, 0x38, 0x00, 0x69, 0xdb, 0x00, 0x58, 0x43, + 0x19, 0x1c, 0x40, 0x18, 0x41, 0x08, 0x02, 0x20, + 0x00, 0xf0, 0x3c, 0x00, 0x6c, 0x1a, 0x01, 0x00, + 0x91, 0xfa, 0x25, 0x70, 0xb0, 0xbd, 0xf8, 0xf7, + 0x31, 0xf9, 0xb0, 0xbd, 0x78, 0x69, 0x01, 0x00, + 0x34, 0x63, 0x01, 0x00, 0x10, 0xb5, 0x05, 0x4c, + 0xe0, 0x68, 0x00, 0x28, 0x01, 0xd1, 0xef, 0xf7, + 0x39, 0xfc, 0x02, 0x20, 0x20, 0x70, 0x00, 0xf0, + 0xaf, 0xfa, 0x10, 0xbd, 0x78, 0x69, 0x01, 0x00, + 0x03, 0x48, 0x80, 0xb5, 0x82, 0x6a, 0x01, 0x21, + 0x04, 0x20, 0x00, 0xf0, 0x3c, 0x00, 0xa8, 0x1a, + 0x01, 0x00, 0xd3, 0xfa, 0x80, 0xbd, 0xd4, 0x79, + 0x01, 0x00, 0x80, 0xb5, 0x00, 0x22, 0x00, 0x21, + 0x03, 0x20, 0x00, 0xf0, 0xca, 0xfa, 0x80, 0xbd, + 0x00, 0x00, 0x80, 0xb5, 0x00, 0x22, 0x00, 0x21, + 0x00, 0x20, 0x00, 0xf0, 0xc2, 0xfa, 0x80, 0xbd, + 0x00, 0x00, 0x03, 0x48, 0x80, 0xb5, 0x42, 0x69, + 0x01, 0x21, 0x01, 0x20, 0x00, 0xf0, 0xb9, 0xfa, + 0x80, 0xbd, 0xd4, 0x79, 0x01, 0x00, 0x3c, 0x00, + 0xe4, 0x1a, 0x01, 0x00, 0x06, 0x48, 0x80, 0xb5, + 0x82, 0x88, 0x00, 0x2a, 0x02, 0xd0, 0x01, 0x21, + 0x02, 0x20, 0x02, 0xe0, 0x00, 0x22, 0x00, 0x21, + 0x00, 0x20, 0x00, 0xf0, 0xa9, 0xfa, 0x80, 0xbd, + 0xd4, 0x79, 0x01, 0x00, 0x10, 0xb5, 0x06, 0x4c, + 0x20, 0x7b, 0x21, 0x6a, 0xf9, 0xf7, 0xfe, 0xf9, + 0xa1, 0x69, 0x42, 0x18, 0x01, 0x21, 0x02, 0x20, + 0x00, 0xf0, 0x9a, 0xfa, 0x10, 0xbd, 0x00, 0x00, + 0x3c, 0x00, 0x20, 0x1b, 0x01, 0x00, 0xd4, 0x79, + 0x01, 0x00, 0x80, 0xb5, 0x00, 0x22, 0x00, 0x21, + 0x00, 0x20, 0x00, 0xf0, 0x90, 0xfa, 0x80, 0xbd, + 0x00, 0x00, 0x38, 0xb5, 0xfa, 0xf7, 0x41, 0xfe, + 0x00, 0x20, 0xf0, 0xf7, 0x80, 0xf8, 0x00, 0x90, + 0x00, 0xab, 0x1c, 0x88, 0x5d, 0x88, 0xf8, 0xf7, + 0x3c, 0xf9, 0x00, 0x2c, 0x02, 0xd0, 0xfd, 0xf7, + 0x9e, 0xfa, 0x02, 0xe0, 0x01, 0x20, 0xf6, 0xf7, + 0x0a, 0xff, 0x3c, 0x00, 0x5c, 0x1b, 0x01, 0x00, + 0x29, 0x1c, 0x20, 0x1c, 0xfc, 0xf7, 0xb8, 0xfc, + 0x00, 0x2c, 0x02, 0xd0, 0xf5, 0xf7, 0xe0, 0xfb, + 0x02, 0xe0, 0x00, 0x20, 0x00, 0xf0, 0xdc, 0xf9, + 0x03, 0x20, 0x00, 0x2c, 0x00, 0xd1, 0x02, 0x20, + 0x00, 0x06, 0x00, 0x0e, 0xf2, 0xf7, 0x4e, 0xfb, + 0x38, 0xbd, 0x00, 0x00, 0x03, 0x48, 0x80, 0xb5, + 0x82, 0x6a, 0x01, 0x21, 0x04, 0x20, 0x00, 0xf0, + 0x5d, 0xfa, 0x80, 0xbd, 0x3c, 0x00, 0x98, 0x1b, + 0x01, 0x00, 0xd4, 0x79, 0x01, 0x00, 0x80, 0xb5, + 0x30, 0xf0, 0x9b, 0xf9, 0x80, 0xbd, 0x80, 0xb5, + 0x00, 0x22, 0x00, 0x21, 0x03, 0x20, 0x00, 0xf0, + 0x50, 0xfa, 0x80, 0xbd, 0x00, 0x00, 0x03, 0x48, + 0x80, 0xb5, 0x42, 0x69, 0x01, 0x21, 0x01, 0x20, + 0x00, 0xf0, 0x47, 0xfa, 0x80, 0xbd, 0xd4, 0x79, + 0x01, 0x00, 0x04, 0x48, 0x80, 0xb5, 0x82, 0x88, + 0x00, 0x2a, 0x03, 0xd0, 0x01, 0x21, 0x3c, 0x00, + 0xd4, 0x1b, 0x01, 0x00, 0x02, 0x20, 0x00, 0xf0, + 0x3b, 0xfa, 0x80, 0xbd, 0xd4, 0x79, 0x01, 0x00, + 0x10, 0xb5, 0x06, 0x4c, 0x20, 0x7b, 0x21, 0x6a, + 0xf9, 0xf7, 0x90, 0xf9, 0xa1, 0x69, 0x42, 0x18, + 0x01, 0x21, 0x02, 0x20, 0x00, 0xf0, 0x2c, 0xfa, + 0x10, 0xbd, 0x00, 0x00, 0xd4, 0x79, 0x01, 0x00, + 0x80, 0xb5, 0xfc, 0xf7, 0x93, 0xfb, 0x01, 0x21, + 0x01, 0x20, 0xff, 0xf7, 0x97, 0xf8, 0x04, 0x20, + 0x3c, 0x00, 0x10, 0x1c, 0x01, 0x00, 0xf2, 0xf7, + 0x06, 0xfb, 0x80, 0xbd, 0x00, 0x00, 0x80, 0xb5, + 0x2f, 0xf0, 0x6b, 0xfb, 0x00, 0x28, 0x0a, 0xd0, + 0x01, 0x20, 0xf2, 0xf7, 0xfc, 0xfa, 0xfa, 0xf7, + 0x2a, 0xfc, 0x00, 0x28, 0x02, 0xd1, 0x04, 0x20, + 0xf6, 0xf7, 0x5d, 0xf8, 0x80, 0xbd, 0x03, 0x21, + 0x16, 0x20, 0xef, 0xf7, 0x32, 0xfb, 0x80, 0xbd, + 0x00, 0x00, 0x02, 0x48, 0x80, 0xb5, 0x00, 0x68, + 0xee, 0xf7, 0x3c, 0x00, 0x4c, 0x1c, 0x01, 0x00, + 0xc5, 0xfb, 0x80, 0xbd, 0xd4, 0x79, 0x01, 0x00, + 0x03, 0x48, 0x80, 0xb5, 0x42, 0x69, 0x01, 0x21, + 0x01, 0x20, 0x00, 0xf0, 0xf7, 0xf9, 0x80, 0xbd, + 0xd4, 0x79, 0x01, 0x00, 0x80, 0xb5, 0x30, 0xf0, + 0x35, 0xf9, 0x80, 0xbd, 0xb0, 0xb5, 0x18, 0x4c, + 0xaa, 0x20, 0x00, 0x5d, 0x04, 0x28, 0x19, 0xd1, + 0x01, 0x25, 0xe5, 0x62, 0x25, 0x63, 0x01, 0xf0, + 0x93, 0xf8, 0xa0, 0x66, 0x3c, 0x00, 0x88, 0x1c, + 0x01, 0x00, 0x01, 0xf0, 0xfc, 0xfd, 0xf2, 0xf7, + 0x2e, 0xfe, 0x00, 0x28, 0x0e, 0xd0, 0x02, 0x20, + 0xf2, 0xf7, 0xc3, 0xfa, 0xa5, 0x60, 0x01, 0xf0, + 0x86, 0xf8, 0x64, 0x30, 0x60, 0x60, 0xfa, 0xf7, + 0x8a, 0xfd, 0x01, 0x21, 0x01, 0x20, 0xff, 0xf7, + 0x46, 0xf8, 0xb0, 0xbd, 0x01, 0x20, 0xf2, 0xf7, + 0xb4, 0xfa, 0x00, 0x20, 0xa0, 0x60, 0x00, 0x21, + 0x01, 0x20, 0xff, 0xf7, 0x3c, 0xf8, 0x3c, 0x00, + 0xc4, 0x1c, 0x01, 0x00, 0xf2, 0xf7, 0x66, 0xfe, + 0x00, 0x28, 0xf1, 0xd0, 0xfa, 0xf7, 0x76, 0xfd, + 0xb0, 0xbd, 0x00, 0x00, 0xa4, 0x6c, 0x01, 0x00, + 0x80, 0xb5, 0x00, 0x20, 0xef, 0xf7, 0xd6, 0xfe, + 0x80, 0xbd, 0x00, 0x00, 0x80, 0xb5, 0x01, 0x20, + 0xef, 0xf7, 0xd0, 0xfe, 0x80, 0xbd, 0x00, 0x00, + 0xac, 0x21, 0x09, 0x5c, 0x02, 0x4a, 0x09, 0x02, + 0x89, 0x18, 0xc0, 0x31, 0x81, 0x60, 0x70, 0x47, + 0x3c, 0x00, 0x00, 0x1d, 0x01, 0x00, 0x70, 0x75, + 0x01, 0x00, 0x80, 0xb5, 0x01, 0x28, 0x04, 0xd1, + 0x03, 0xc9, 0x09, 0x68, 0xee, 0xf7, 0x64, 0xfb, + 0x80, 0xbd, 0x01, 0x21, 0x14, 0x20, 0xef, 0xf7, + 0xc4, 0xfa, 0x80, 0xbd, 0x00, 0x00, 0x00, 0x28, + 0x02, 0xd1, 0x02, 0x48, 0x40, 0x68, 0x70, 0x47, + 0x40, 0x68, 0x70, 0x47, 0x00, 0x00, 0x58, 0x75, + 0x01, 0x00, 0x10, 0xb5, 0x00, 0x24, 0xf8, 0xf7, + 0x1c, 0xfb, 0x3c, 0x00, 0x3c, 0x1d, 0x01, 0x00, + 0x00, 0x28, 0x04, 0xd0, 0x40, 0x30, 0x80, 0x7a, + 0x05, 0x28, 0x00, 0xd1, 0x01, 0x24, 0x20, 0x1c, + 0x10, 0xbd, 0x00, 0x00, 0x04, 0x48, 0x00, 0x21, + 0x40, 0x68, 0x01, 0xe0, 0x01, 0x63, 0x40, 0x68, + 0x00, 0x28, 0xfb, 0xd1, 0x70, 0x47, 0x00, 0x00, + 0x58, 0x75, 0x01, 0x00, 0xb0, 0xb5, 0x04, 0x1c, + 0x0d, 0x1c, 0xf7, 0xf7, 0xa5, 0xf8, 0x40, 0x34, + 0xe5, 0x72, 0xb0, 0xbd, 0x3c, 0x00, 0x78, 0x1d, + 0x01, 0x00, 0xf8, 0xb5, 0x07, 0x1c, 0xf8, 0xf7, + 0xfa, 0xfa, 0x04, 0x1c, 0x04, 0xd0, 0x05, 0x21, + 0x14, 0x20, 0xef, 0xf7, 0x8c, 0xfa, 0x28, 0xe0, + 0x00, 0x25, 0x14, 0x49, 0x28, 0x02, 0x46, 0x18, + 0x30, 0x1c, 0x44, 0x30, 0x06, 0x22, 0x12, 0x49, + 0xee, 0xf7, 0x2d, 0xfb, 0x00, 0x28, 0x02, 0xd1, + 0xac, 0x20, 0x85, 0x55, 0x34, 0x1c, 0x01, 0x35, + 0x03, 0x2d, 0xee, 0xd3, 0x00, 0x2c, 0x3c, 0x00, + 0xb4, 0x1d, 0x01, 0x00, 0x14, 0xd0, 0x39, 0x1c, + 0x20, 0x1c, 0xf8, 0xf7, 0x2b, 0xf8, 0x09, 0x49, + 0x00, 0x20, 0x20, 0x60, 0x18, 0x39, 0x48, 0x68, + 0x60, 0x60, 0x00, 0x28, 0x00, 0xd0, 0x04, 0x60, + 0x4c, 0x60, 0xca, 0x68, 0x00, 0x2a, 0x03, 0xd0, + 0x01, 0x21, 0x20, 0x1c, 0xee, 0xf7, 0xfe, 0xfa, + 0x20, 0x1c, 0xf8, 0xbd, 0x70, 0x75, 0x01, 0x00, + 0x58, 0x46, 0x01, 0x00, 0x80, 0xb5, 0xf8, 0xf7, + 0x3c, 0x00, 0xf0, 0x1d, 0x01, 0x00, 0xc1, 0xfa, + 0x00, 0x28, 0x04, 0xd1, 0x06, 0x21, 0x14, 0x20, + 0xef, 0xf7, 0x53, 0xfa, 0x80, 0xbd, 0xf5, 0xf7, + 0x16, 0xfc, 0x80, 0xbd, 0x00, 0x00, 0x80, 0xb5, + 0xf8, 0xf7, 0xb3, 0xfa, 0x80, 0xbd, 0x10, 0xb5, + 0x09, 0x4c, 0x21, 0x88, 0x02, 0x29, 0x03, 0xd1, + 0x14, 0x20, 0xef, 0xf7, 0x42, 0xfa, 0x04, 0xe0, + 0xa3, 0x68, 0x8a, 0x00, 0x98, 0x50, 0x48, 0x1c, + 0x20, 0x80, 0x3c, 0x00, 0x2c, 0x1e, 0x01, 0x00, + 0x20, 0x88, 0x01, 0x38, 0x00, 0x04, 0x00, 0x0c, + 0x10, 0xbd, 0x00, 0x00, 0x58, 0x75, 0x01, 0x00, + 0x0b, 0x1c, 0x11, 0x1c, 0x08, 0x4a, 0x80, 0xb5, + 0x12, 0x88, 0x90, 0x42, 0x06, 0xd2, 0xda, 0x68, + 0xc0, 0x00, 0x12, 0x18, 0x14, 0x20, 0x01, 0xf0, + 0xbb, 0xfb, 0x80, 0xbd, 0x03, 0x21, 0x14, 0x20, + 0xef, 0xf7, 0x22, 0xfa, 0x80, 0xbd, 0x00, 0x00, + 0x58, 0x75, 0x01, 0x00, 0x3c, 0x00, 0x68, 0x1e, + 0x01, 0x00, 0x08, 0x4a, 0x80, 0xb5, 0x12, 0x88, + 0x90, 0x42, 0x06, 0xd2, 0xc9, 0x68, 0xc0, 0x00, + 0x09, 0x18, 0x14, 0x20, 0x01, 0xf0, 0xdb, 0xfb, + 0x80, 0xbd, 0x04, 0x21, 0x14, 0x20, 0xef, 0xf7, + 0x0e, 0xfa, 0x80, 0xbd, 0x00, 0x00, 0x58, 0x75, + 0x01, 0x00, 0x01, 0x49, 0xc8, 0x60, 0x70, 0x47, + 0x00, 0x00, 0x58, 0x75, 0x01, 0x00, 0x80, 0xb5, + 0x06, 0x22, 0x44, 0x30, 0xee, 0xf7, 0x3c, 0x00, + 0xa4, 0x1e, 0x01, 0x00, 0xab, 0xfa, 0x00, 0x28, + 0x01, 0xd1, 0x01, 0x20, 0x80, 0xbd, 0x00, 0x20, + 0x80, 0xbd, 0x00, 0x00, 0x1c, 0xb5, 0x14, 0x4c, + 0x20, 0x69, 0x00, 0x28, 0x23, 0xd0, 0x20, 0x78, + 0x0a, 0x28, 0x01, 0xd0, 0x00, 0xf0, 0xfc, 0xf8, + 0x00, 0x20, 0x60, 0x61, 0x0f, 0x48, 0x40, 0x79, + 0xa0, 0x70, 0x00, 0x28, 0x01, 0xd0, 0x01, 0x28, + 0x15, 0xd1, 0xfd, 0xf7, 0xed, 0xfe, 0x01, 0x90, + 0x3c, 0x00, 0xe0, 0x1e, 0x01, 0x00, 0xfd, 0xf7, + 0x82, 0xfe, 0x00, 0x90, 0x00, 0xab, 0x18, 0x79, + 0x19, 0x78, 0x40, 0x1a, 0x18, 0x71, 0x58, 0x79, + 0x59, 0x78, 0x40, 0x1a, 0x58, 0x71, 0x01, 0x98, + 0xf2, 0xf7, 0x89, 0xfe, 0x05, 0x20, 0x20, 0x70, + 0x00, 0xf0, 0xbf, 0xf9, 0x1c, 0xbd, 0x7c, 0x78, + 0x01, 0x00, 0x0c, 0x5a, 0x01, 0x00, 0x08, 0xb5, + 0x04, 0x4a, 0x00, 0x90, 0x14, 0x32, 0x00, 0x20, + 0x02, 0x4b, 0x3c, 0x00, 0x1c, 0x1f, 0x01, 0x00, + 0x02, 0x49, 0xf1, 0xf7, 0x7d, 0xf9, 0x08, 0xbd, + 0x2c, 0x75, 0x01, 0x00, 0xb1, 0xa8, 0x00, 0x00, + 0xb0, 0xb5, 0x00, 0x28, 0x06, 0xd0, 0x01, 0x28, + 0x06, 0xd0, 0x02, 0x28, 0x07, 0xd1, 0x0c, 0x4c, + 0x01, 0x25, 0x07, 0xe0, 0x0b, 0x4c, 0x04, 0xe0, + 0x0a, 0x4c, 0x2a, 0x3c, 0x01, 0xe0, 0x08, 0x4c, + 0xb6, 0x34, 0x00, 0x25, 0x00, 0xf0, 0x2c, 0xff, + 0x07, 0x49, 0x89, 0x6e, 0x3c, 0x00, 0x58, 0x1f, + 0x01, 0x00, 0x09, 0x19, 0x09, 0x1a, 0xa1, 0x42, + 0x00, 0xd9, 0x00, 0x21, 0x2a, 0x1c, 0x16, 0x20, + 0x01, 0xf0, 0x31, 0xfb, 0xb0, 0xbd, 0x71, 0x02, + 0x00, 0x00, 0x0c, 0x05, 0x00, 0x00, 0xa4, 0x6c, + 0x01, 0x00, 0x8c, 0xb5, 0x00, 0xab, 0x8e, 0x21, + 0x19, 0x80, 0xfc, 0xf7, 0x38, 0xf9, 0x01, 0x90, + 0x68, 0x46, 0xfb, 0xf7, 0xa6, 0xfa, 0x8c, 0xbd, + 0x00, 0x00, 0xbf, 0xb5, 0x13, 0x4a, 0x3c, 0x00, + 0x94, 0x1f, 0x01, 0x00, 0x01, 0x91, 0x0d, 0x1c, + 0x11, 0x7c, 0x88, 0x43, 0x04, 0x1c, 0x21, 0x43, + 0x08, 0x1c, 0x10, 0x74, 0xa0, 0x07, 0x0b, 0xd5, + 0x0e, 0x48, 0x00, 0x90, 0x01, 0x20, 0x02, 0x90, + 0x00, 0xf0, 0xfc, 0xfe, 0x0c, 0x49, 0x40, 0x18, + 0x03, 0x90, 0x68, 0x46, 0xf9, 0xf7, 0x6a, 0xff, + 0xe0, 0x07, 0x0c, 0xd5, 0xf1, 0xf7, 0x2c, 0xfd, + 0x00, 0x28, 0x03, 0xd0, 0x07, 0x48, 0x85, 0x42, + 0x3c, 0x00, 0xd0, 0x1f, 0x01, 0x00, 0x00, 0xd2, + 0x01, 0x90, 0x06, 0x48, 0x00, 0x90, 0x68, 0x46, + 0xf9, 0xf7, 0x09, 0xff, 0xbf, 0xbd, 0x78, 0x69, + 0x01, 0x00, 0x81, 0xea, 0x00, 0x00, 0x10, 0x27, + 0x00, 0x00, 0xa0, 0x86, 0x01, 0x00, 0x75, 0xea, + 0x00, 0x00, 0x10, 0xb5, 0x0a, 0x4c, 0x60, 0x69, + 0x00, 0x28, 0x0e, 0xd1, 0x01, 0x20, 0x60, 0x61, + 0xa1, 0x68, 0x07, 0x48, 0xfd, 0xf7, 0xcb, 0xf9, + 0x00, 0x21, 0x3c, 0x00, 0x0c, 0x20, 0x01, 0x00, + 0xa0, 0x68, 0xf9, 0xf7, 0xd1, 0xfb, 0x01, 0x22, + 0x07, 0x20, 0x04, 0x49, 0x01, 0xf0, 0xd8, 0xfa, + 0x10, 0xbd, 0x00, 0x00, 0x78, 0x69, 0x01, 0x00, + 0x34, 0x63, 0x01, 0x00, 0x98, 0x3a, 0x00, 0x00, + 0x10, 0xb5, 0x0c, 0x1c, 0x11, 0x1c, 0x06, 0x4a, + 0x00, 0x2b, 0x10, 0x70, 0x03, 0xd0, 0x00, 0x28, + 0x02, 0xd1, 0xf9, 0xf7, 0xf5, 0xfd, 0x10, 0xbd, + 0x20, 0x1c, 0xf9, 0xf7, 0x3c, 0x00, 0x48, 0x20, + 0x01, 0x00, 0x01, 0xfe, 0x10, 0xbd, 0xa0, 0x79, + 0x01, 0x00, 0xb0, 0xb5, 0x0a, 0x4c, 0x05, 0x1c, + 0xe3, 0x6a, 0x20, 0x1f, 0x01, 0x33, 0xe3, 0x62, + 0x00, 0x88, 0x00, 0x29, 0x06, 0xd0, 0xa1, 0x68, + 0x89, 0x18, 0x21, 0x61, 0x05, 0x4a, 0x00, 0xf0, + 0xfc, 0xfe, 0x01, 0xe0, 0x00, 0xf0, 0xcf, 0xfe, + 0x25, 0x77, 0xb0, 0xbd, 0x00, 0x00, 0xd4, 0x79, + 0x01, 0x00, 0x55, 0xe3, 0x00, 0x00, 0x3c, 0x00, + 0x84, 0x20, 0x01, 0x00, 0x01, 0x1c, 0x03, 0x48, + 0x80, 0xb5, 0x40, 0x88, 0xff, 0xf7, 0xec, 0xfe, + 0x80, 0xbd, 0x00, 0x00, 0x98, 0x7c, 0x01, 0x00, + 0x03, 0x48, 0x80, 0xb5, 0xc1, 0x68, 0x18, 0x38, + 0x80, 0x88, 0xff, 0xf7, 0xe1, 0xfe, 0x80, 0xbd, + 0x70, 0x7c, 0x01, 0x00, 0x80, 0xb5, 0x00, 0x21, + 0x16, 0x20, 0x01, 0xf0, 0xbf, 0xfa, 0x01, 0x21, + 0x16, 0x20, 0x01, 0xf0, 0xbb, 0xfa, 0x80, 0xbd, + 0x3c, 0x00, 0xc0, 0x20, 0x01, 0x00, 0x10, 0xb5, + 0x0b, 0x4c, 0x20, 0x78, 0x0a, 0x28, 0x10, 0xd0, + 0x01, 0x20, 0x60, 0x61, 0x0a, 0x21, 0x13, 0x20, + 0x01, 0xf0, 0xaf, 0xfa, 0x0a, 0x20, 0x60, 0x70, + 0x20, 0x70, 0xfd, 0xf7, 0x3c, 0xfb, 0x01, 0x20, + 0xfd, 0xf7, 0xe9, 0xfb, 0x00, 0x20, 0xfa, 0xf7, + 0xc4, 0xf9, 0x10, 0xbd, 0x00, 0x00, 0x7c, 0x78, + 0x01, 0x00, 0x10, 0xb5, 0x0c, 0x4c, 0x00, 0x20, + 0x0b, 0x49, 0x3c, 0x00, 0xfc, 0x20, 0x01, 0x00, + 0x20, 0x63, 0xe0, 0x62, 0x50, 0x39, 0x88, 0x61, + 0x20, 0x70, 0x08, 0x48, 0x38, 0x21, 0x0c, 0x38, + 0x00, 0x7a, 0x08, 0x55, 0x81, 0x21, 0x18, 0x20, + 0x01, 0xf0, 0x8e, 0xfa, 0x20, 0x69, 0x01, 0x28, + 0x02, 0xd1, 0x00, 0x20, 0xf5, 0xf7, 0x3e, 0xfb, + 0x10, 0xbd, 0x00, 0x00, 0xf4, 0x6e, 0x01, 0x00, + 0xb0, 0xb5, 0x1c, 0x4c, 0x00, 0x25, 0x2c, 0x22, + 0x01, 0x1d, 0x20, 0x1c, 0x3c, 0x00, 0x38, 0x21, + 0x01, 0x00, 0x9a, 0xb0, 0xee, 0xf7, 0x39, 0xfa, + 0x18, 0x49, 0x2c, 0x31, 0x08, 0x1c, 0x00, 0x7a, + 0x8a, 0x69, 0x00, 0x2a, 0x13, 0xd1, 0x02, 0x28, + 0x03, 0xd1, 0xa0, 0x68, 0x00, 0x28, 0x20, 0xd0, + 0x04, 0xe0, 0x00, 0x28, 0x1d, 0xd1, 0x60, 0x68, + 0x00, 0x28, 0x1a, 0xd0, 0x80, 0x02, 0x88, 0x61, + 0x0e, 0x48, 0x69, 0x46, 0x24, 0x38, 0x00, 0x68, + 0xef, 0xf7, 0xcb, 0xfb, 0x11, 0xe0, 0x3c, 0x00, + 0x74, 0x21, 0x01, 0x00, 0x00, 0x22, 0x02, 0x28, + 0x03, 0xd1, 0xa0, 0x68, 0x00, 0x28, 0x09, 0xd1, + 0x04, 0xe0, 0x00, 0x28, 0x08, 0xd1, 0x60, 0x68, + 0x00, 0x28, 0x03, 0xd1, 0x8a, 0x61, 0xff, 0xf7, + 0xb1, 0xff, 0x01, 0xe0, 0x80, 0x02, 0x88, 0x61, + 0x28, 0x1c, 0x1a, 0xb0, 0xb0, 0xbd, 0x00, 0x00, + 0xc8, 0x6e, 0x01, 0x00, 0xf8, 0xb5, 0x0c, 0x49, + 0x02, 0x20, 0x48, 0x60, 0x0b, 0x49, 0x00, 0x05, + 0x3c, 0x00, 0xb0, 0x21, 0x01, 0x00, 0x08, 0x60, + 0x0b, 0x4f, 0xb8, 0x68, 0xf9, 0x68, 0x7c, 0x68, + 0x45, 0x1a, 0x2e, 0x1c, 0x04, 0xe0, 0xa0, 0x68, + 0x61, 0x68, 0xee, 0xf7, 0x09, 0xf9, 0x24, 0x68, + 0x01, 0x3d, 0xf8, 0xd2, 0x7c, 0x60, 0xf8, 0x68, + 0x80, 0x19, 0xf8, 0x60, 0xf8, 0xbd, 0x40, 0x20, + 0x07, 0x00, 0x00, 0x10, 0x07, 0x00, 0x44, 0xe3, + 0x01, 0x00, 0xf8, 0xb5, 0x1f, 0x4e, 0x04, 0x1c, + 0x30, 0x69, 0x3c, 0x00, 0xec, 0x21, 0x01, 0x00, + 0x01, 0x21, 0xf9, 0xf7, 0x99, 0xfa, 0x1d, 0x49, + 0x60, 0x00, 0x40, 0x18, 0x10, 0x38, 0x81, 0x7b, + 0x1b, 0x4a, 0x51, 0x72, 0xc0, 0x7b, 0x10, 0x74, + 0x1a, 0x4f, 0x1b, 0x4d, 0x0e, 0x2c, 0x0a, 0xd1, + 0x01, 0x22, 0x02, 0x21, 0x08, 0x20, 0x01, 0xf0, + 0xf3, 0xfb, 0x03, 0x20, 0xff, 0x21, 0x41, 0x31, + 0x39, 0x86, 0x14, 0x21, 0x08, 0xe0, 0x02, 0x22, + 0x01, 0x21, 0x08, 0x20, 0x3c, 0x00, 0x28, 0x22, + 0x01, 0x00, 0x01, 0xf0, 0xe8, 0xfb, 0x12, 0x49, + 0x02, 0x20, 0x39, 0x86, 0x10, 0x21, 0xa9, 0x71, + 0xe8, 0x71, 0x10, 0x48, 0x11, 0x4a, 0x00, 0x19, + 0x10, 0x38, 0xc0, 0x7b, 0x00, 0x28, 0x03, 0xd0, + 0x01, 0x21, 0x51, 0x73, 0x10, 0x73, 0x01, 0xe0, + 0x00, 0x20, 0x50, 0x73, 0x00, 0x21, 0x20, 0x1c, + 0xfd, 0xf7, 0xe5, 0xfd, 0x30, 0x69, 0xf9, 0xf7, + 0x08, 0xfb, 0xf8, 0xbd, 0x00, 0x00, 0x3c, 0x00, + 0x64, 0x22, 0x01, 0x00, 0x40, 0x7c, 0x01, 0x00, + 0x76, 0x46, 0x01, 0x00, 0x0c, 0x80, 0x07, 0x00, + 0x30, 0x80, 0x07, 0x00, 0x00, 0x80, 0x07, 0x00, + 0xff, 0x01, 0x00, 0x00, 0x5c, 0x57, 0x01, 0x00, + 0xd0, 0x80, 0x07, 0x00, 0x10, 0xb5, 0x15, 0x4c, + 0x14, 0x4a, 0x21, 0x78, 0x00, 0x20, 0x18, 0x32, + 0x05, 0x29, 0x1d, 0xd0, 0x06, 0x29, 0x1b, 0xd0, + 0x07, 0x29, 0x01, 0xd0, 0x08, 0x29, 0x06, 0xd1, + 0x3c, 0x00, 0xa0, 0x22, 0x01, 0x00, 0x91, 0x68, + 0x05, 0x20, 0x10, 0x29, 0x00, 0xdb, 0x06, 0x20, + 0x20, 0x70, 0x01, 0x20, 0xa1, 0x78, 0x00, 0x28, + 0x61, 0x70, 0x0b, 0xd0, 0x00, 0x20, 0xfa, 0xf7, + 0xdc, 0xf8, 0x00, 0x21, 0x60, 0x78, 0xf4, 0xf7, + 0x3c, 0xfa, 0x0a, 0x22, 0x1e, 0x21, 0x13, 0x20, + 0x01, 0xf0, 0x7f, 0xf9, 0x10, 0xbd, 0xd1, 0x69, + 0x07, 0x20, 0x10, 0x29, 0xe8, 0xdb, 0x08, 0x20, + 0xe6, 0xe7, 0x3c, 0x00, 0xdc, 0x22, 0x01, 0x00, + 0x7c, 0x78, 0x01, 0x00, 0xb0, 0xb5, 0x0d, 0x1c, + 0x01, 0x1c, 0x04, 0x1c, 0x44, 0x31, 0x00, 0x20, + 0xf6, 0xf7, 0x40, 0xfa, 0x30, 0x34, 0x00, 0x2d, + 0x07, 0xd0, 0x0e, 0xc8, 0x0e, 0xc4, 0x08, 0xc8, + 0x10, 0x38, 0x08, 0xc4, 0xf4, 0xf7, 0xc4, 0xf9, + 0xb0, 0xbd, 0x1e, 0xcc, 0x1e, 0xc0, 0xb0, 0xbd, + 0xf8, 0xb5, 0x08, 0x1c, 0x11, 0x1c, 0xf4, 0xf7, + 0x87, 0xfa, 0x08, 0x4c, 0x3c, 0x00, 0x18, 0x23, + 0x01, 0x00, 0x00, 0x25, 0x08, 0x4e, 0x08, 0x4f, + 0x06, 0xe0, 0x30, 0x6b, 0x00, 0x28, 0x03, 0xd0, + 0x35, 0x63, 0x20, 0x68, 0xee, 0xf7, 0x55, 0xf8, + 0x38, 0x68, 0x00, 0x28, 0xf5, 0xd0, 0xf8, 0xbd, + 0x00, 0x00, 0x5c, 0x5b, 0x01, 0x00, 0xe4, 0xfe, + 0x01, 0x00, 0x84, 0x5a, 0x01, 0x00, 0x80, 0xb5, + 0x00, 0x06, 0x00, 0x0e, 0x00, 0xf0, 0x07, 0xf8, + 0x80, 0xbd, 0x80, 0xb5, 0x0a, 0x1c, 0x3c, 0x00, + 0x54, 0x23, 0x01, 0x00, 0x23, 0x21, 0x01, 0xf0, + 0x2b, 0xfa, 0x80, 0xbd, 0xb0, 0xb5, 0x0d, 0x1c, + 0x04, 0x1c, 0x12, 0x28, 0x03, 0xd3, 0x01, 0x21, + 0x23, 0x20, 0xee, 0xf7, 0x9b, 0xff, 0x06, 0x49, + 0xa0, 0x00, 0x08, 0x58, 0x04, 0xe0, 0x12, 0xc8, + 0x28, 0x1c, 0xee, 0xf7, 0x2e, 0xf8, 0x20, 0x1c, + 0x00, 0x28, 0xf8, 0xd1, 0xb0, 0xbd, 0x00, 0x00, + 0x68, 0x5b, 0x01, 0x00, 0xf8, 0xb5, 0x0e, 0x1c, + 0x3c, 0x00, 0x90, 0x23, 0x01, 0x00, 0x00, 0x25, + 0x04, 0x1c, 0x12, 0x28, 0x03, 0xd3, 0x01, 0x21, + 0x23, 0x20, 0xee, 0xf7, 0x82, 0xff, 0x13, 0x48, + 0xa7, 0x00, 0xc4, 0x59, 0x08, 0xe0, 0x20, 0x68, + 0xb0, 0x42, 0x03, 0xd1, 0x03, 0x21, 0x23, 0x20, + 0xee, 0xf7, 0x77, 0xff, 0x25, 0x1c, 0x64, 0x68, + 0x00, 0x2c, 0xf4, 0xd1, 0x0c, 0x4a, 0x04, 0x3a, + 0x10, 0x68, 0x00, 0x28, 0x01, 0xd0, 0x41, 0x68, + 0x11, 0x60, 0x3c, 0x00, 0xcc, 0x23, 0x01, 0x00, + 0x00, 0x28, 0x04, 0xd1, 0x02, 0x21, 0x23, 0x20, + 0xee, 0xf7, 0x66, 0xff, 0xf8, 0xbd, 0x00, 0x21, + 0x41, 0x60, 0x06, 0x60, 0x00, 0x2d, 0x01, 0xd0, + 0x68, 0x60, 0xf7, 0xe7, 0x01, 0x49, 0xc8, 0x51, + 0xf4, 0xe7, 0x00, 0x00, 0x68, 0x5b, 0x01, 0x00, + 0x70, 0xb5, 0x0e, 0x1c, 0x05, 0x1c, 0x00, 0x24, + 0x12, 0x28, 0x03, 0xd3, 0x01, 0x21, 0x23, 0x20, + 0xee, 0xf7, 0x4e, 0xff, 0x3c, 0x00, 0x08, 0x24, + 0x01, 0x00, 0x0d, 0x4b, 0xaa, 0x00, 0x98, 0x58, + 0x04, 0xe0, 0x01, 0x68, 0xb1, 0x42, 0x04, 0xd0, + 0x04, 0x1c, 0x40, 0x68, 0x00, 0x28, 0xf8, 0xd1, + 0x70, 0xbd, 0x00, 0x28, 0xfc, 0xd0, 0x00, 0x2c, + 0x41, 0x68, 0x01, 0xd1, 0x99, 0x50, 0x00, 0xe0, + 0x61, 0x60, 0x00, 0x21, 0x03, 0x4a, 0x01, 0x60, + 0x04, 0x3a, 0x11, 0x68, 0x41, 0x60, 0x10, 0x60, + 0x70, 0xbd, 0x68, 0x5b, 0x01, 0x00, 0x3c, 0x00, + 0x44, 0x24, 0x01, 0x00, 0xf3, 0xb5, 0x81, 0xb0, + 0x00, 0x28, 0x17, 0xd0, 0x01, 0x78, 0xff, 0x29, + 0x14, 0xd0, 0x45, 0x78, 0x44, 0x19, 0x02, 0x34, + 0x80, 0x27, 0x01, 0x3c, 0x26, 0x78, 0x01, 0x3d, + 0xbe, 0x43, 0x30, 0x1c, 0xf8, 0xf7, 0x82, 0xfc, + 0x01, 0x21, 0x81, 0x40, 0x02, 0x98, 0x01, 0x40, + 0x02, 0xd0, 0x3e, 0x43, 0x30, 0x1c, 0x20, 0x70, + 0x00, 0x2d, 0xee, 0xd1, 0xfe, 0xbd, 0x00, 0x00, + 0x3c, 0x00, 0x80, 0x24, 0x01, 0x00, 0x10, 0x4b, + 0x10, 0xb5, 0x59, 0x68, 0x41, 0x1a, 0x0f, 0x29, + 0x0d, 0xdc, 0x0e, 0x22, 0xd2, 0x43, 0x91, 0x42, + 0x09, 0xdb, 0x1a, 0x1c, 0x92, 0x68, 0x00, 0x29, + 0x01, 0xdd, 0x00, 0x2a, 0x03, 0xda, 0x00, 0x29, + 0x0d, 0xda, 0x00, 0x2a, 0x0b, 0xdc, 0x04, 0x33, + 0x03, 0xc3, 0xfd, 0xf7, 0x10, 0xfd, 0x04, 0x1c, + 0xfd, 0xf7, 0x13, 0xfd, 0x00, 0x28, 0x02, 0xd0, + 0x20, 0x1c, 0x3c, 0x00, 0xbc, 0x24, 0x01, 0x00, + 0xff, 0xf7, 0x92, 0xfe, 0x10, 0xbd, 0x00, 0x00, + 0x18, 0x63, 0x01, 0x00, 0xf8, 0xb5, 0x64, 0x4c, + 0x07, 0x1c, 0x60, 0x78, 0xa1, 0x78, 0x88, 0x42, + 0x0f, 0xd1, 0x08, 0x1c, 0xfd, 0xf7, 0xce, 0xf8, + 0xe0, 0x60, 0x04, 0x20, 0x60, 0x70, 0x0a, 0x22, + 0x1e, 0x21, 0x13, 0x20, 0x01, 0xf0, 0x70, 0xf8, + 0x00, 0x21, 0x60, 0x78, 0xf4, 0xf7, 0x24, 0xf9, + 0xf8, 0xbd, 0x04, 0x28, 0x3c, 0x00, 0xf8, 0x24, + 0x01, 0x00, 0x6e, 0xd1, 0x58, 0x4e, 0xfd, 0xf7, + 0xbc, 0xf8, 0x00, 0x90, 0x71, 0x78, 0x04, 0x1c, + 0x00, 0x20, 0x05, 0x29, 0x21, 0xd2, 0x01, 0xa3, + 0x5b, 0x5c, 0x5b, 0x00, 0x9f, 0x44, 0x0b, 0x0f, + 0x14, 0x1a, 0x02, 0x00, 0x51, 0x48, 0x51, 0x49, + 0x60, 0x43, 0x41, 0x18, 0x7d, 0x20, 0xc0, 0x00, + 0xee, 0xf7, 0x87, 0xf8, 0x11, 0xe0, 0x87, 0x20, + 0x60, 0x43, 0x4d, 0x49, 0x02, 0xe0, 0x3c, 0x00, + 0x34, 0x25, 0x01, 0x00, 0x45, 0x20, 0x4d, 0x49, + 0x60, 0x43, 0x40, 0x18, 0x08, 0xe0, 0x4c, 0x48, + 0xcd, 0x21, 0x09, 0x01, 0x60, 0x43, 0x40, 0x1a, + 0x02, 0xe0, 0x46, 0x20, 0x60, 0x43, 0x82, 0x38, + 0x06, 0x06, 0x48, 0x48, 0x07, 0x21, 0x00, 0x79, + 0x36, 0x16, 0x08, 0x1a, 0x00, 0x19, 0x00, 0x90, + 0x68, 0x46, 0xfe, 0xf7, 0x5f, 0xfd, 0x38, 0x1c, + 0xfd, 0xf7, 0x2e, 0xfb, 0x00, 0x99, 0x42, 0x4a, + 0x3c, 0x00, 0x70, 0x25, 0x01, 0x00, 0x49, 0x00, + 0x51, 0x5a, 0x48, 0x43, 0x39, 0x49, 0x04, 0x1c, + 0x88, 0x78, 0x00, 0x28, 0x01, 0xd0, 0x01, 0x28, + 0x1e, 0xd1, 0x35, 0x49, 0x00, 0x28, 0x03, 0xd1, + 0x3a, 0x48, 0x05, 0x78, 0x04, 0x20, 0x02, 0xe0, + 0x38, 0x48, 0x45, 0x78, 0x0c, 0x20, 0x30, 0x49, + 0xc9, 0x68, 0x49, 0x1b, 0x08, 0x18, 0x00, 0x90, + 0x68, 0x46, 0xfe, 0xf7, 0x3e, 0xfd, 0x00, 0x98, + 0x33, 0x49, 0x3c, 0x00, 0xac, 0x25, 0x01, 0x00, + 0x40, 0x00, 0x20, 0x31, 0x08, 0x5a, 0x2a, 0x49, + 0x44, 0x43, 0xc8, 0x68, 0xa8, 0x42, 0x01, 0xd9, + 0x01, 0x25, 0x00, 0xe0, 0x00, 0x25, 0x2e, 0x48, + 0x21, 0x18, 0x40, 0x00, 0xee, 0xf7, 0xa2, 0xf8, + 0x04, 0x1c, 0x00, 0x2d, 0x03, 0xd0, 0xfd, 0xf7, + 0xc3, 0xfa, 0x02, 0xe0, 0x3d, 0xe0, 0xfd, 0xf7, + 0xf3, 0xfa, 0x00, 0x2f, 0x02, 0xd1, 0x25, 0x48, + 0x0e, 0x38, 0x01, 0xe0, 0x3c, 0x00, 0xe8, 0x25, + 0x01, 0x00, 0x23, 0x48, 0x0a, 0x38, 0x01, 0x68, + 0x61, 0x1a, 0xcb, 0x1c, 0x01, 0xdb, 0x03, 0x29, + 0x00, 0xdd, 0x04, 0x60, 0x01, 0x68, 0xa1, 0x42, + 0x01, 0xd2, 0x01, 0x31, 0x04, 0xe0, 0xa1, 0x42, + 0x03, 0xd9, 0x00, 0x29, 0x01, 0xd0, 0x01, 0x39, + 0x01, 0x60, 0x01, 0x68, 0x38, 0x1c, 0xfd, 0xf7, + 0xc0, 0xfb, 0x10, 0x4c, 0x0a, 0x20, 0x60, 0x70, + 0x0a, 0x22, 0x13, 0x20, 0xa1, 0x68, 0x3c, 0x00, + 0x24, 0x26, 0x01, 0x00, 0x00, 0xf0, 0xd2, 0xff, + 0x60, 0x68, 0x00, 0xf0, 0xf7, 0xfa, 0x00, 0x28, + 0x00, 0xd1, 0x5f, 0xe7, 0x00, 0xf0, 0xba, 0xfb, + 0x11, 0x49, 0x00, 0x23, 0x40, 0x18, 0x0e, 0x49, + 0x60, 0x60, 0x1e, 0x39, 0xc8, 0x56, 0xb0, 0x42, + 0xf3, 0xd0, 0x0e, 0x70, 0x31, 0x1c, 0x00, 0x20, + 0xff, 0xf7, 0x84, 0xfe, 0x4e, 0xe7, 0xff, 0xf7, + 0x15, 0xfe, 0x4b, 0xe7, 0x7c, 0x78, 0x01, 0x00, + 0x3c, 0x00, 0x60, 0x26, 0x01, 0x00, 0x60, 0xd7, + 0xff, 0xff, 0x60, 0x8f, 0x01, 0x00, 0x54, 0x0b, + 0x00, 0x00, 0xc9, 0x09, 0x00, 0x00, 0x8e, 0xfe, + 0xff, 0xff, 0x0c, 0x5a, 0x01, 0x00, 0x12, 0x5a, + 0x01, 0x00, 0x20, 0xa1, 0x07, 0x00, 0x40, 0x42, + 0x0f, 0x00, 0x30, 0xb5, 0x0c, 0x4b, 0xfe, 0x24, + 0x1b, 0x88, 0x04, 0x40, 0xc0, 0x07, 0x5d, 0x07, + 0x6d, 0x0f, 0xdb, 0x08, 0xc0, 0x0f, 0x9c, 0x42, + 0x0b, 0xd8, 0x3c, 0x00, 0x9c, 0x26, 0x01, 0x00, + 0xa2, 0x18, 0x04, 0x3a, 0x9a, 0x42, 0x07, 0xd3, + 0x1a, 0x1b, 0x89, 0x5c, 0x01, 0x22, 0xaa, 0x40, + 0x11, 0x40, 0x01, 0xd0, 0x02, 0x21, 0x08, 0x43, + 0x30, 0xbd, 0x00, 0x00, 0xfa, 0x60, 0x01, 0x00, + 0x80, 0xb5, 0x00, 0x28, 0x03, 0xd0, 0x01, 0x1c, + 0x14, 0x20, 0xf5, 0xf7, 0xff, 0xfa, 0x80, 0xbd, + 0xb0, 0xb5, 0x04, 0x1c, 0xf7, 0xf7, 0x08, 0xfd, + 0x13, 0x4d, 0x00, 0x28, 0x3c, 0x00, 0xd8, 0x26, + 0x01, 0x00, 0x1d, 0xd1, 0xa0, 0x07, 0x16, 0xd5, + 0x02, 0x20, 0x84, 0x43, 0x11, 0x48, 0x01, 0x22, + 0x2a, 0x62, 0x40, 0x68, 0x00, 0x28, 0x13, 0xd0, + 0xf2, 0xf7, 0x51, 0xf9, 0x00, 0x28, 0x0f, 0xd1, + 0x0b, 0x48, 0xe4, 0x30, 0x80, 0x7a, 0x01, 0x28, + 0x00, 0xd0, 0x00, 0x22, 0x11, 0x1c, 0x01, 0x20, + 0xf2, 0xf7, 0xa5, 0xf9, 0x04, 0xe0, 0x00, 0xf0, + 0x4e, 0xfb, 0xe8, 0x61, 0xf2, 0xf7, 0x3c, 0x00, + 0x14, 0x27, 0x01, 0x00, 0x6b, 0xf9, 0xa9, 0x6a, + 0x00, 0x29, 0x02, 0xd0, 0x20, 0x1c, 0xed, 0xf7, + 0x5c, 0xfe, 0xb0, 0xbd, 0x60, 0x6c, 0x01, 0x00, + 0xb0, 0x57, 0x01, 0x00, 0x20, 0x48, 0xb0, 0xb5, + 0x81, 0x68, 0x01, 0x29, 0x04, 0xd1, 0x00, 0x78, + 0x00, 0x28, 0x01, 0xd1, 0xfd, 0xf7, 0x72, 0xfd, + 0x1b, 0x4d, 0x80, 0x3d, 0x2c, 0x1c, 0x70, 0x34, + 0x20, 0x78, 0x03, 0x38, 0x05, 0x28, 0x18, 0xd2, + 0x3c, 0x00, 0x50, 0x27, 0x01, 0x00, 0x01, 0xa3, + 0x1b, 0x5c, 0x5b, 0x00, 0x9f, 0x44, 0x04, 0x15, + 0x27, 0x27, 0x27, 0x00, 0xfb, 0xf7, 0xf1, 0xff, + 0x60, 0x7b, 0x01, 0x1c, 0xff, 0x31, 0x61, 0x73, + 0x00, 0x28, 0xf7, 0xd1, 0x04, 0x20, 0x20, 0x70, + 0xa8, 0x89, 0xf8, 0xf7, 0xda, 0xf9, 0x01, 0x1c, + 0x00, 0x22, 0x0f, 0x20, 0x00, 0xf0, 0x25, 0xff, + 0xb0, 0xbd, 0xef, 0xf7, 0xce, 0xff, 0x6a, 0x21, + 0x49, 0x5b, 0x3c, 0x00, 0x8c, 0x27, 0x01, 0x00, + 0x88, 0x42, 0x0b, 0xd0, 0xe8, 0x89, 0xf8, 0xf7, + 0xcb, 0xf9, 0x01, 0x1c, 0x00, 0x23, 0x00, 0x22, + 0x0f, 0x20, 0x00, 0xf0, 0xf7, 0xff, 0x07, 0x20, + 0x20, 0x70, 0xb0, 0xbd, 0xfd, 0xf7, 0x3a, 0xfe, + 0xb0, 0xbd, 0x00, 0x00, 0x84, 0x66, 0x01, 0x00, + 0xf0, 0xb5, 0x85, 0xb0, 0x04, 0x1c, 0x03, 0x80, + 0x18, 0x0c, 0x60, 0x80, 0x0d, 0x1c, 0x51, 0x78, + 0x10, 0x78, 0x09, 0x02, 0x3c, 0x00, 0xc8, 0x27, + 0x01, 0x00, 0x48, 0x40, 0xa0, 0x80, 0xd1, 0x78, + 0x90, 0x78, 0x09, 0x02, 0x48, 0x40, 0xe0, 0x80, + 0x51, 0x79, 0x10, 0x79, 0x09, 0x02, 0x48, 0x40, + 0x20, 0x81, 0x68, 0x46, 0x1a, 0x49, 0x14, 0x22, + 0xed, 0xf7, 0xe3, 0xfe, 0x00, 0x23, 0x00, 0x20, + 0xd9, 0x07, 0xc9, 0x0f, 0x8c, 0x46, 0x42, 0x00, + 0x56, 0x07, 0x76, 0x0f, 0x61, 0x46, 0x89, 0x19, + 0x49, 0x00, 0x6e, 0x5c, 0x49, 0x19, 0x3c, 0x00, + 0x04, 0x28, 0x01, 0x00, 0x49, 0x78, 0x6f, 0x46, + 0x09, 0x02, 0x4e, 0x40, 0x81, 0x00, 0x79, 0x58, + 0x0f, 0x4f, 0x49, 0x00, 0x61, 0x5a, 0x01, 0x30, + 0x4e, 0x40, 0x31, 0x06, 0x36, 0x0a, 0x76, 0x00, + 0xc9, 0x0d, 0x79, 0x5a, 0xf6, 0x19, 0x01, 0x27, + 0x7f, 0x02, 0xf6, 0x19, 0x36, 0x88, 0x71, 0x40, + 0xa6, 0x5a, 0x89, 0x19, 0xa1, 0x52, 0x05, 0x28, + 0xdc, 0xdb, 0x20, 0x89, 0xc0, 0x18, 0x01, 0x33, + 0x3c, 0x00, 0x40, 0x28, 0x01, 0x00, 0x08, 0x2b, + 0x20, 0x81, 0xd2, 0xdb, 0x05, 0xb0, 0xf0, 0xbd, + 0x00, 0x00, 0xd8, 0x56, 0x01, 0x00, 0xd8, 0x52, + 0x01, 0x00, 0xf0, 0xb5, 0x05, 0x1c, 0x0c, 0x1c, + 0x1e, 0x1c, 0x00, 0x20, 0x89, 0xb0, 0x41, 0x00, + 0x53, 0x5a, 0x01, 0x30, 0x06, 0xaf, 0x7b, 0x52, + 0x05, 0x28, 0xf8, 0xdb, 0x10, 0x89, 0x00, 0xab, + 0x3a, 0x49, 0x80, 0x19, 0x58, 0x84, 0x68, 0x46, + 0x18, 0x22, 0x3c, 0x00, 0x7c, 0x28, 0x01, 0x00, + 0xed, 0xf7, 0x98, 0xfe, 0x00, 0x20, 0x41, 0x00, + 0x0a, 0x19, 0x52, 0x78, 0x63, 0x5c, 0x6f, 0x46, + 0x12, 0x02, 0x53, 0x40, 0x82, 0x00, 0xba, 0x58, + 0x06, 0xaf, 0x52, 0x00, 0xba, 0x5a, 0x31, 0x4f, + 0x01, 0x30, 0x53, 0x40, 0x1a, 0x06, 0x1b, 0x0a, + 0x5b, 0x00, 0xd2, 0x0d, 0xba, 0x5a, 0xdb, 0x19, + 0x01, 0x27, 0x7f, 0x02, 0xdb, 0x19, 0x1b, 0x88, + 0x5a, 0x40, 0x06, 0xab, 0x3c, 0x00, 0xb8, 0x28, + 0x01, 0x00, 0x5b, 0x5a, 0xd2, 0x18, 0x06, 0xab, + 0x5a, 0x52, 0x06, 0x28, 0xde, 0xdb, 0x61, 0x7b, + 0x20, 0x7b, 0x00, 0xab, 0x09, 0x02, 0x48, 0x40, + 0x59, 0x8c, 0x48, 0x40, 0x41, 0x08, 0xc0, 0x03, + 0x48, 0x40, 0x19, 0x8b, 0x40, 0x18, 0x18, 0x83, + 0xe1, 0x7b, 0xa0, 0x7b, 0x09, 0x02, 0x48, 0x40, + 0x19, 0x8b, 0x48, 0x40, 0x41, 0x08, 0xc0, 0x03, + 0x48, 0x40, 0x59, 0x8b, 0x40, 0x18, 0x3c, 0x00, + 0xf4, 0x28, 0x01, 0x00, 0x58, 0x83, 0x02, 0x20, + 0x41, 0x00, 0x06, 0xaa, 0x8a, 0x18, 0x20, 0x3a, + 0xd2, 0x8b, 0x01, 0x30, 0x53, 0x08, 0xd2, 0x03, + 0x5a, 0x40, 0x06, 0xab, 0x5b, 0x5a, 0xd2, 0x18, + 0x06, 0xab, 0x5a, 0x52, 0x06, 0x28, 0xef, 0xdb, + 0x30, 0x0a, 0x28, 0x70, 0x70, 0x04, 0x40, 0x0e, + 0x20, 0x21, 0x08, 0x43, 0x68, 0x70, 0xae, 0x70, + 0x61, 0x78, 0x20, 0x78, 0x00, 0xab, 0x09, 0x02, + 0x3c, 0x00, 0x30, 0x29, 0x01, 0x00, 0x48, 0x40, + 0x59, 0x8c, 0x48, 0x40, 0xc0, 0x05, 0x00, 0x0e, + 0xe8, 0x70, 0x00, 0x20, 0x41, 0x00, 0x06, 0xaa, + 0x53, 0x5a, 0x4a, 0x19, 0x01, 0x30, 0x13, 0x71, + 0x06, 0xab, 0x59, 0x5a, 0x09, 0x0a, 0x51, 0x71, + 0x06, 0x28, 0xf3, 0xdb, 0x09, 0xb0, 0xf0, 0xbd, + 0x00, 0x00, 0xec, 0x56, 0x01, 0x00, 0xd8, 0x52, + 0x01, 0x00, 0xf0, 0xb5, 0x46, 0x68, 0x05, 0x1c, + 0x60, 0x30, 0x3c, 0x00, 0x6c, 0x29, 0x01, 0x00, + 0x85, 0xb0, 0x04, 0x90, 0x60, 0xe0, 0x68, 0x68, + 0x0c, 0x21, 0x07, 0x69, 0x00, 0x20, 0xee, 0xf7, + 0x2d, 0xfe, 0x70, 0x61, 0x01, 0x89, 0x04, 0x39, + 0x09, 0x04, 0x09, 0x0c, 0x01, 0x81, 0x70, 0x69, + 0x00, 0x68, 0x40, 0x18, 0x04, 0x21, 0xee, 0xf7, + 0x21, 0xfe, 0xf0, 0x61, 0x70, 0x69, 0x20, 0x21, + 0x04, 0x68, 0x04, 0x98, 0x04, 0x22, 0x40, 0x7b, + 0x80, 0x01, 0x08, 0x43, 0x3c, 0x00, 0xa8, 0x29, + 0x01, 0x00, 0xe0, 0x70, 0x28, 0x69, 0x40, 0x89, + 0xa0, 0x70, 0x28, 0x69, 0x40, 0x89, 0x00, 0x0a, + 0x20, 0x70, 0x29, 0x69, 0x0c, 0x31, 0xa0, 0x18, + 0xed, 0xf7, 0x9b, 0xfd, 0x20, 0x78, 0x20, 0x21, + 0x40, 0x06, 0x40, 0x0e, 0x08, 0x43, 0x60, 0x70, + 0x28, 0x69, 0x0a, 0x30, 0x01, 0x88, 0x01, 0x31, + 0x09, 0x04, 0x09, 0x0c, 0x01, 0x80, 0x04, 0xd1, + 0x28, 0x69, 0x0c, 0x30, 0x01, 0x68, 0x3c, 0x00, + 0xe4, 0x29, 0x01, 0x00, 0x01, 0x31, 0x01, 0x60, + 0x35, 0x62, 0x61, 0x79, 0x20, 0x79, 0x09, 0x02, + 0x40, 0x18, 0xa1, 0x79, 0x09, 0x04, 0x40, 0x18, + 0xe1, 0x79, 0x09, 0x06, 0x43, 0x18, 0x00, 0x93, + 0xa0, 0x78, 0x21, 0x78, 0x09, 0x02, 0x40, 0x18, + 0x04, 0x04, 0x24, 0x0c, 0x10, 0x20, 0xee, 0xf7, + 0x13, 0xff, 0xb0, 0x61, 0x28, 0x69, 0x3a, 0x1c, + 0x01, 0x68, 0x00, 0x9b, 0x01, 0xa8, 0x0a, 0x32, + 0x3c, 0x00, 0x20, 0x2a, 0x01, 0x00, 0xff, 0xf7, + 0xc8, 0xfe, 0x28, 0x69, 0x23, 0x1c, 0x01, 0x68, + 0xb0, 0x69, 0x01, 0xaa, 0xff, 0xf7, 0x11, 0xff, + 0x36, 0x68, 0x00, 0x2e, 0x9c, 0xd1, 0x03, 0x49, + 0x04, 0x48, 0x6a, 0x68, 0xf7, 0xf7, 0x63, 0xfb, + 0x05, 0xb0, 0xf0, 0xbd, 0x00, 0x00, 0xfd, 0x6b, + 0x00, 0x00, 0xa0, 0x6a, 0x01, 0x00, 0x01, 0x38, + 0x07, 0x49, 0x40, 0x00, 0x09, 0x5c, 0x00, 0x29, + 0x06, 0xd0, 0x3c, 0x00, 0x5c, 0x2a, 0x01, 0x00, + 0x04, 0x49, 0x1c, 0x39, 0x08, 0x5c, 0x00, 0x28, + 0x01, 0xd0, 0x01, 0x20, 0x70, 0x47, 0x00, 0x20, + 0x70, 0x47, 0x00, 0x00, 0xe6, 0x78, 0x01, 0x00, + 0xfe, 0xb5, 0x05, 0x1c, 0x00, 0x20, 0x02, 0x90, + 0x13, 0x48, 0x17, 0x1c, 0x00, 0x68, 0x0c, 0x1c, + 0x86, 0x78, 0x30, 0x1c, 0xfd, 0xf7, 0x28, 0xfa, + 0x00, 0x28, 0x01, 0xd1, 0x02, 0x98, 0xfe, 0xbd, + 0x00, 0x2d, 0x08, 0xd1, 0x3c, 0x00, 0x98, 0x2a, + 0x01, 0x00, 0x20, 0x68, 0x00, 0xab, 0x18, 0x71, + 0x60, 0x68, 0x58, 0x71, 0xa0, 0x68, 0x98, 0x71, + 0x03, 0x20, 0x38, 0x80, 0x29, 0x1c, 0x30, 0x1c, + 0x01, 0xaa, 0x00, 0xf0, 0x0e, 0xf8, 0x00, 0x2d, + 0xec, 0xd0, 0x00, 0xab, 0x19, 0x79, 0x21, 0x60, + 0x59, 0x79, 0x61, 0x60, 0x99, 0x79, 0xa1, 0x60, + 0x0c, 0x21, 0x39, 0x80, 0xe2, 0xe7, 0xf8, 0x6b, + 0x01, 0x00, 0xf8, 0xb5, 0x15, 0x1c, 0x3c, 0x00, + 0xd4, 0x2a, 0x01, 0x00, 0x42, 0x1e, 0x01, 0x38, + 0x47, 0x00, 0x3f, 0x18, 0x1f, 0x48, 0x3e, 0x18, + 0x00, 0x29, 0x06, 0xd0, 0x01, 0x24, 0x03, 0x22, + 0x31, 0x1c, 0x28, 0x1c, 0xed, 0xf7, 0x04, 0xfd, + 0x32, 0xe0, 0x68, 0x78, 0x01, 0x24, 0x00, 0x28, + 0x05, 0xd0, 0x29, 0x78, 0x08, 0x18, 0x01, 0x38, + 0x0e, 0x28, 0x00, 0xd9, 0x00, 0x24, 0x00, 0x2c, + 0x26, 0xd0, 0x00, 0x2a, 0x07, 0xd1, 0x2a, 0x21, + 0x3c, 0x00, 0x10, 0x2b, 0x01, 0x00, 0x12, 0x48, + 0xed, 0xf7, 0x9f, 0xfc, 0x1c, 0x21, 0x11, 0x48, + 0xed, 0xf7, 0x9b, 0xfc, 0x0f, 0x48, 0x03, 0x22, + 0x29, 0x1c, 0x30, 0x1c, 0xed, 0xf7, 0xe7, 0xfc, + 0x0c, 0x48, 0x71, 0x78, 0xc0, 0x5d, 0xb2, 0x78, + 0x00, 0x29, 0x0e, 0xd0, 0x00, 0x2a, 0x0c, 0xd0, + 0x01, 0x22, 0x43, 0x18, 0x08, 0x4d, 0x06, 0xe0, + 0x41, 0x00, 0x49, 0x19, 0x10, 0x39, 0x8a, 0x73, + 0xb7, 0x78, 0x3c, 0x00, 0x4c, 0x2b, 0x01, 0x00, + 0x01, 0x30, 0xcf, 0x73, 0x83, 0x42, 0xf6, 0xd8, + 0xfe, 0xf7, 0x60, 0xf8, 0x20, 0x1c, 0xf8, 0xbd, + 0xeb, 0x62, 0x01, 0x00, 0xca, 0x78, 0x01, 0x00, + 0x70, 0xb5, 0x05, 0x1c, 0x1c, 0x48, 0x00, 0x23, + 0xc0, 0x56, 0x43, 0x1c, 0x32, 0xd1, 0xa8, 0x7a, + 0xf8, 0xf7, 0x0c, 0xf9, 0x00, 0x26, 0x00, 0x28, + 0x18, 0x4c, 0x08, 0xd0, 0xe8, 0x69, 0xe1, 0x6b, + 0x00, 0x29, 0x0b, 0xd1, 0x3c, 0x00, 0x88, 0x2b, + 0x01, 0x00, 0x66, 0x63, 0x01, 0x21, 0xe1, 0x63, + 0xa6, 0x63, 0x06, 0xe0, 0xa8, 0x69, 0xe1, 0x6b, + 0x00, 0x29, 0x02, 0xd0, 0x66, 0x63, 0xa6, 0x63, + 0xe6, 0x63, 0xa1, 0x6b, 0x01, 0x31, 0xa1, 0x63, + 0x82, 0x03, 0x01, 0xd5, 0x0e, 0x4a, 0x10, 0x43, + 0xe2, 0x6b, 0x00, 0x2a, 0x00, 0xd0, 0x40, 0x42, + 0x62, 0x6b, 0x10, 0x18, 0x60, 0x63, 0x08, 0x29, + 0x0b, 0xd1, 0x00, 0x28, 0x01, 0xdd, 0x3c, 0x00, + 0xc4, 0x2b, 0x01, 0x00, 0x01, 0x20, 0x03, 0xe0, + 0x00, 0x28, 0x03, 0xda, 0x00, 0x20, 0xc0, 0x43, + 0xef, 0xf7, 0x62, 0xfe, 0x66, 0x63, 0xa6, 0x63, + 0x70, 0xbd, 0x00, 0x00, 0xf4, 0x6b, 0x01, 0x00, + 0x84, 0x6a, 0x01, 0x00, 0x00, 0x00, 0xfe, 0xff, + 0x0c, 0x21, 0x05, 0x4a, 0x41, 0x43, 0x89, 0x18, + 0x80, 0xb5, 0x89, 0x78, 0x00, 0x29, 0x01, 0xd1, + 0xf3, 0xf7, 0xf2, 0xfa, 0x80, 0xbd, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0x2c, 0x01, 0x00, 0x60, 0x7b, + 0x01, 0x00, 0x80, 0xb5, 0x01, 0x1c, 0x00, 0x20, + 0xf7, 0xf7, 0x03, 0xfa, 0x80, 0xbd, 0x80, 0xb5, + 0x01, 0x1c, 0x01, 0x20, 0xf7, 0xf7, 0xfd, 0xf9, + 0x80, 0xbd, 0x02, 0x49, 0x89, 0x68, 0x40, 0x1a, + 0xc0, 0x0f, 0x70, 0x47, 0x00, 0x00, 0x00, 0x01, + 0x07, 0x00, 0x02, 0x49, 0x89, 0x68, 0x08, 0x1a, + 0xc0, 0x17, 0x01, 0x30, 0x70, 0x47, 0x00, 0x01, + 0x07, 0x00, 0x3c, 0x00, 0x3c, 0x2c, 0x01, 0x00, + 0x05, 0x49, 0x4a, 0x68, 0x01, 0x23, 0x1a, 0x43, + 0x4a, 0x60, 0x8a, 0x68, 0x10, 0x18, 0x88, 0x60, + 0x48, 0x68, 0x98, 0x43, 0x48, 0x60, 0x70, 0x47, + 0x00, 0x01, 0x07, 0x00, 0x10, 0xb5, 0x15, 0x4b, + 0x00, 0x21, 0x0a, 0x01, 0x9a, 0x58, 0x00, 0x2a, + 0x17, 0xd1, 0x01, 0x24, 0x0a, 0x01, 0x9c, 0x50, + 0xd2, 0x18, 0x10, 0x73, 0x00, 0x23, 0x53, 0x73, + 0x02, 0x23, 0x01, 0x28, 0x3c, 0x00, 0x78, 0x2c, + 0x01, 0x00, 0x0e, 0x4a, 0x05, 0xd1, 0xc8, 0x00, + 0x80, 0x18, 0x10, 0x30, 0x02, 0x78, 0x9a, 0x43, + 0x04, 0xe0, 0xc8, 0x00, 0x80, 0x18, 0x10, 0x30, + 0x02, 0x78, 0x1a, 0x43, 0x02, 0x70, 0x02, 0xe0, + 0x01, 0x31, 0x08, 0x29, 0xe0, 0xdb, 0x08, 0x29, + 0x04, 0xd1, 0x01, 0x21, 0x99, 0x20, 0xee, 0xf7, + 0xfe, 0xfa, 0x03, 0x49, 0x08, 0x04, 0x00, 0x0c, + 0x10, 0xbd, 0xac, 0x73, 0x01, 0x00, 0x3c, 0x00, + 0xb4, 0x2c, 0x01, 0x00, 0x00, 0x60, 0x07, 0x00, + 0xff, 0xff, 0x00, 0x00, 0xf7, 0xb5, 0x19, 0x4f, + 0x19, 0x4e, 0x0c, 0x1c, 0xc1, 0x00, 0xc9, 0x19, + 0xb2, 0x68, 0x10, 0x31, 0x81, 0xb0, 0x01, 0x3a, + 0x4a, 0x60, 0x0b, 0x78, 0x1d, 0x1c, 0x0d, 0x22, + 0x93, 0x43, 0x0b, 0x70, 0x01, 0x22, 0x82, 0x40, + 0x3a, 0x73, 0x12, 0x4b, 0x00, 0x01, 0x03, 0x9a, + 0xc0, 0x18, 0x82, 0x60, 0x10, 0x4a, 0x10, 0x1c, + 0x3c, 0x00, 0xf0, 0x2c, 0x01, 0x00, 0x20, 0x30, + 0x87, 0x79, 0x00, 0xab, 0x1f, 0x70, 0xc0, 0x79, + 0x58, 0x70, 0xb0, 0x68, 0x03, 0x30, 0x00, 0x23, + 0x26, 0x1a, 0x01, 0xd5, 0x04, 0x1c, 0x01, 0x23, + 0x4c, 0x60, 0x0d, 0x70, 0x00, 0x2b, 0x04, 0xd0, + 0x20, 0x1c, 0xff, 0xf7, 0x8a, 0xff, 0x00, 0x28, + 0xfa, 0xd0, 0x00, 0xab, 0x18, 0x88, 0xd0, 0x84, + 0xff, 0xbd, 0x00, 0x60, 0x07, 0x00, 0x00, 0x01, + 0x07, 0x00, 0x3c, 0x00, 0x2c, 0x2d, 0x01, 0x00, + 0xac, 0x73, 0x01, 0x00, 0x00, 0x10, 0x07, 0x00, + 0x30, 0xb5, 0x00, 0x20, 0xc0, 0x43, 0x0b, 0x4c, + 0x09, 0x4b, 0x00, 0x22, 0xd1, 0x00, 0x09, 0x19, + 0x0d, 0x7c, 0xed, 0x07, 0x07, 0xd5, 0x49, 0x69, + 0x9d, 0x68, 0x49, 0x1b, 0x00, 0xd5, 0x00, 0x21, + 0x81, 0x42, 0x00, 0xd2, 0x08, 0x1c, 0x01, 0x32, + 0x08, 0x2a, 0xef, 0xdb, 0x30, 0xbd, 0x00, 0x00, + 0x00, 0x01, 0x07, 0x00, 0x3c, 0x00, 0x68, 0x2d, + 0x01, 0x00, 0x00, 0x60, 0x07, 0x00, 0xb0, 0xb5, + 0x08, 0x28, 0x0b, 0xd2, 0x08, 0x4d, 0x04, 0x01, + 0x29, 0x59, 0x00, 0x29, 0x04, 0xd0, 0x00, 0xf0, + 0x4a, 0xf8, 0x00, 0x20, 0x28, 0x51, 0xb0, 0xbd, + 0x02, 0x21, 0x00, 0xe0, 0x03, 0x21, 0x99, 0x20, + 0xee, 0xf7, 0x89, 0xfa, 0xb0, 0xbd, 0xac, 0x73, + 0x01, 0x00, 0x03, 0x49, 0x00, 0x01, 0x40, 0x18, + 0x41, 0x7b, 0x08, 0x22, 0x11, 0x43, 0x3c, 0x00, + 0xa4, 0x2d, 0x01, 0x00, 0x41, 0x73, 0x70, 0x47, + 0xac, 0x73, 0x01, 0x00, 0x01, 0x48, 0x80, 0x68, + 0x70, 0x47, 0x00, 0x00, 0x00, 0x01, 0x07, 0x00, + 0x70, 0xb5, 0x0b, 0x4e, 0x09, 0x4d, 0x00, 0x22, + 0xd0, 0x00, 0x84, 0x19, 0x20, 0x7c, 0xc0, 0x07, + 0x07, 0xd5, 0x60, 0x69, 0xff, 0xf7, 0x26, 0xff, + 0x00, 0x28, 0x02, 0xd0, 0xa8, 0x68, 0x32, 0x30, + 0x60, 0x61, 0x01, 0x32, 0x08, 0x2a, 0xef, 0xdb, + 0x3c, 0x00, 0xe0, 0x2d, 0x01, 0x00, 0x70, 0xbd, + 0x00, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x60, + 0x07, 0x00, 0x02, 0x4a, 0xc0, 0x00, 0x80, 0x18, + 0x01, 0x74, 0x70, 0x47, 0x00, 0x00, 0x00, 0x60, + 0x07, 0x00, 0x04, 0x49, 0xc0, 0x00, 0x41, 0x18, + 0x08, 0x7c, 0x08, 0x23, 0x02, 0x1c, 0x9a, 0x43, + 0x0a, 0x74, 0x70, 0x47, 0x00, 0x00, 0x00, 0x60, + 0x07, 0x00, 0x70, 0xb5, 0x08, 0x28, 0x17, 0xd2, + 0x0e, 0x49, 0x3c, 0x00, 0x1c, 0x2e, 0x01, 0x00, + 0x8a, 0x68, 0x0e, 0x4d, 0x01, 0x3a, 0xc1, 0x00, + 0x49, 0x19, 0x4a, 0x61, 0x0c, 0x4b, 0x9a, 0x79, + 0x10, 0x31, 0x0c, 0x78, 0x0d, 0x26, 0xb4, 0x43, + 0x0c, 0x70, 0x01, 0x21, 0x81, 0x40, 0x29, 0x73, + 0x9a, 0x71, 0x09, 0x4a, 0x07, 0x49, 0x00, 0x01, + 0x80, 0x18, 0x41, 0x60, 0x70, 0xbd, 0x05, 0x21, + 0x99, 0x20, 0xee, 0xf7, 0x29, 0xfa, 0x70, 0xbd, + 0x00, 0x01, 0x07, 0x00, 0x3c, 0x00, 0x58, 0x2e, + 0x01, 0x00, 0x00, 0x60, 0x07, 0x00, 0x20, 0x10, + 0x07, 0x00, 0xd1, 0x75, 0x00, 0x00, 0xac, 0x73, + 0x01, 0x00, 0xf8, 0xb5, 0x9e, 0x46, 0x1a, 0x4b, + 0x94, 0x46, 0x9b, 0x68, 0x1a, 0x4c, 0xc2, 0x00, + 0x12, 0x19, 0x01, 0x3b, 0x53, 0x61, 0x15, 0x1c, + 0x18, 0x4c, 0xa6, 0x79, 0x2a, 0x1c, 0x10, 0x32, + 0x13, 0x78, 0x0d, 0x27, 0xbb, 0x43, 0x13, 0x70, + 0x01, 0x27, 0x12, 0x4b, 0x87, 0x40, 0x3c, 0x00, + 0x94, 0x2e, 0x01, 0x00, 0x1f, 0x73, 0xa6, 0x71, + 0x12, 0x4e, 0x00, 0x01, 0x80, 0x19, 0x63, 0x46, + 0x43, 0x60, 0x73, 0x46, 0x83, 0x60, 0x13, 0x78, + 0x40, 0x7b, 0xa6, 0x79, 0x01, 0x27, 0x18, 0x43, + 0x38, 0x43, 0x14, 0x35, 0x00, 0xab, 0x1e, 0x70, + 0xe4, 0x79, 0x5c, 0x70, 0x06, 0x4b, 0x9b, 0x68, + 0x03, 0x33, 0xcc, 0x1a, 0x00, 0xd5, 0x19, 0x1c, + 0x29, 0x60, 0x10, 0x70, 0x00, 0xab, 0x18, 0x88, + 0x3c, 0x00, 0xd0, 0x2e, 0x01, 0x00, 0x03, 0x4c, + 0x20, 0x3c, 0xe0, 0x84, 0xf8, 0xbd, 0x00, 0x01, + 0x07, 0x00, 0x00, 0x60, 0x07, 0x00, 0x20, 0x10, + 0x07, 0x00, 0xac, 0x73, 0x01, 0x00, 0x00, 0xb5, + 0x01, 0x1c, 0xff, 0xf7, 0x5e, 0xff, 0x42, 0x18, + 0x10, 0x1c, 0xff, 0xf7, 0x92, 0xfe, 0x00, 0x28, + 0xfa, 0xd0, 0x00, 0xbd, 0x00, 0x00, 0x89, 0x1a, + 0x40, 0x1a, 0x99, 0x18, 0x88, 0x42, 0x01, 0xd8, + 0x01, 0x20, 0x3c, 0x00, 0x0c, 0x2f, 0x01, 0x00, + 0x70, 0x47, 0x00, 0x20, 0x70, 0x47, 0x00, 0x00, + 0xf8, 0xb5, 0x0f, 0x1c, 0x04, 0x1c, 0x00, 0x28, + 0x01, 0xd1, 0xee, 0xf7, 0xef, 0xf9, 0x21, 0x1c, + 0x01, 0x20, 0xff, 0xf7, 0x19, 0xfa, 0x41, 0x20, + 0x00, 0x5d, 0x00, 0x28, 0x01, 0xd1, 0x00, 0x25, + 0x04, 0xe0, 0x02, 0x28, 0x01, 0xd1, 0x05, 0x25, + 0x00, 0xe0, 0x01, 0x25, 0xe0, 0x68, 0xee, 0xf7, + 0x29, 0xfb, 0xa6, 0x6b, 0x3c, 0x00, 0x48, 0x2f, + 0x01, 0x00, 0x00, 0x2e, 0x10, 0xd0, 0x00, 0x2f, + 0x06, 0xd0, 0x2f, 0x20, 0x02, 0x5d, 0x20, 0x6a, + 0x41, 0x6b, 0x28, 0x1c, 0xed, 0xf7, 0x44, 0xfa, + 0xa0, 0x69, 0x00, 0x28, 0x01, 0xd0, 0xee, 0xf7, + 0x46, 0xfc, 0x20, 0x6a, 0xee, 0xf7, 0x43, 0xfc, + 0x20, 0x1c, 0xee, 0xf7, 0x40, 0xfc, 0x30, 0x1c, + 0xf8, 0xbd, 0xb0, 0xb5, 0x04, 0x1c, 0xc0, 0x6b, + 0x00, 0x28, 0x09, 0xd0, 0x20, 0x69, 0x3c, 0x00, + 0x84, 0x2f, 0x01, 0x00, 0x00, 0x8b, 0xee, 0xf7, + 0x55, 0xf9, 0x00, 0x28, 0x03, 0xd0, 0x21, 0x1c, + 0x06, 0x20, 0xff, 0xf7, 0xe3, 0xf9, 0x08, 0x4d, + 0x20, 0x1c, 0xa9, 0x6d, 0xff, 0xf7, 0xba, 0xff, + 0x00, 0x28, 0x07, 0xd0, 0xe8, 0x68, 0x01, 0x30, + 0xe8, 0x60, 0x28, 0x6a, 0x01, 0x38, 0x28, 0x62, + 0xfc, 0xf7, 0x78, 0xf8, 0xb0, 0xbd, 0x00, 0x00, + 0xc4, 0x69, 0x01, 0x00, 0x10, 0xb5, 0x06, 0x4c, + 0x3c, 0x00, 0xc0, 0x2f, 0x01, 0x00, 0xe1, 0x6d, + 0xff, 0xf7, 0xa7, 0xff, 0x00, 0x28, 0x04, 0xd0, + 0xe0, 0x69, 0x01, 0x38, 0xe0, 0x61, 0xfc, 0xf7, + 0x68, 0xf8, 0x10, 0xbd, 0x00, 0x00, 0xc4, 0x69, + 0x01, 0x00, 0x0c, 0x23, 0x0c, 0x49, 0x58, 0x43, + 0x40, 0x18, 0x10, 0xb5, 0x44, 0x68, 0xa1, 0x68, + 0x00, 0x29, 0x02, 0xd0, 0x20, 0x1c, 0xed, 0xf7, + 0xf3, 0xf9, 0xe0, 0x6b, 0x00, 0x28, 0x08, 0xd0, + 0x20, 0x69, 0x3c, 0x00, 0xfc, 0x2f, 0x01, 0x00, + 0x00, 0x8b, 0xee, 0xf7, 0x19, 0xf9, 0x00, 0x28, + 0x02, 0xd0, 0x20, 0x1c, 0xf9, 0xf7, 0x26, 0xf9, + 0x10, 0xbd, 0x00, 0x00, 0x60, 0x7b, 0x01, 0x00, + 0xf8, 0xb5, 0x22, 0x49, 0x48, 0x68, 0x80, 0x00, + 0x06, 0xd4, 0x01, 0x20, 0x40, 0x07, 0x08, 0x60, + 0x4a, 0x69, 0x92, 0x00, 0x00, 0xd4, 0x48, 0x60, + 0x1d, 0x4f, 0x78, 0x7e, 0xc3, 0x06, 0x01, 0x20, + 0x02, 0x1c, 0xdb, 0x0e, 0x3c, 0x00, 0x38, 0x30, + 0x01, 0x00, 0x9a, 0x40, 0x0a, 0x60, 0x79, 0x69, + 0x8c, 0x68, 0x8c, 0x60, 0x21, 0x07, 0x89, 0x0f, + 0x09, 0xd0, 0x21, 0x07, 0x04, 0xd5, 0x0b, 0x21, + 0x9e, 0x20, 0xee, 0xf7, 0x28, 0xf9, 0x00, 0xe0, + 0x78, 0x64, 0x0c, 0x20, 0x84, 0x43, 0x12, 0x48, + 0x3d, 0x68, 0x06, 0x5d, 0x6c, 0x68, 0x2c, 0x34, + 0x06, 0xe0, 0xa0, 0x68, 0x00, 0x68, 0xa0, 0x60, + 0xe9, 0x68, 0x28, 0x1c, 0xed, 0xf7, 0x3c, 0x00, + 0x74, 0x30, 0x01, 0x00, 0xb2, 0xf9, 0x01, 0x3e, + 0xf6, 0xd2, 0xa0, 0x68, 0x80, 0x68, 0x00, 0x28, + 0x0d, 0xd0, 0x40, 0x89, 0x00, 0x28, 0x0a, 0xd0, + 0x78, 0x6c, 0x00, 0x28, 0x07, 0xd1, 0x78, 0x69, + 0x80, 0x68, 0x80, 0x07, 0x03, 0xd1, 0x0c, 0x21, + 0x9e, 0x20, 0xee, 0xf7, 0x03, 0xf9, 0xf8, 0xbd, + 0x00, 0x10, 0x07, 0x00, 0xcc, 0x6d, 0x01, 0x00, + 0xb4, 0x44, 0x01, 0x00, 0x09, 0x49, 0x80, 0xb5, + 0x3c, 0x00, 0xb0, 0x30, 0x01, 0x00, 0x08, 0x7e, + 0xc2, 0x06, 0xd2, 0x0e, 0x01, 0x20, 0x90, 0x40, + 0x07, 0x4a, 0x10, 0x60, 0x00, 0x20, 0x0a, 0x69, + 0xc0, 0x43, 0x90, 0x60, 0x08, 0x68, 0x24, 0x31, + 0x06, 0xc9, 0x03, 0x69, 0xed, 0xf7, 0x86, 0xf9, + 0x80, 0xbd, 0xcc, 0x6d, 0x01, 0x00, 0x00, 0x10, + 0x07, 0x00, 0xf8, 0xb5, 0x44, 0x68, 0x06, 0x1c, + 0x2c, 0x34, 0x20, 0x68, 0x0d, 0x1c, 0x80, 0x68, + 0x00, 0x90, 0x3c, 0x00, 0xec, 0x30, 0x01, 0x00, + 0x00, 0x28, 0x00, 0xd0, 0xc5, 0x60, 0x20, 0x68, + 0x00, 0x68, 0x20, 0x60, 0x40, 0x68, 0x00, 0x28, + 0x03, 0xd0, 0x0a, 0x21, 0x9e, 0x20, 0xee, 0xf7, + 0xcf, 0xf8, 0x20, 0x68, 0x45, 0x60, 0x28, 0x1c, + 0x02, 0xe0, 0x00, 0x22, 0x42, 0x60, 0x08, 0x1c, + 0xc1, 0x68, 0x00, 0x29, 0xf9, 0xd1, 0x71, 0x68, + 0x60, 0x27, 0x0b, 0x1c, 0x40, 0x33, 0x9c, 0x46, + 0x9b, 0x78, 0xca, 0x7e, 0x3c, 0x00, 0x28, 0x31, + 0x01, 0x00, 0x5b, 0x01, 0x12, 0x07, 0x12, 0x0f, + 0x3b, 0x40, 0x1a, 0x43, 0x8b, 0x8f, 0xff, 0x27, + 0x3f, 0x04, 0x1b, 0x04, 0x3b, 0x40, 0x1a, 0x43, + 0x90, 0x23, 0x1a, 0x43, 0x42, 0x60, 0x63, 0x46, + 0x9a, 0x78, 0x01, 0x32, 0xd2, 0x07, 0xd2, 0x0f, + 0x9a, 0x70, 0x89, 0x6b, 0xc1, 0x60, 0x21, 0x68, + 0x88, 0x60, 0x00, 0x98, 0x00, 0x28, 0x01, 0xd0, + 0x00, 0x98, 0xc5, 0x60, 0x0a, 0x4f, 0x3c, 0x00, + 0x64, 0x31, 0x01, 0x00, 0xbd, 0x79, 0xa0, 0x69, + 0x00, 0x28, 0x0c, 0xd0, 0x00, 0x22, 0xa2, 0x61, + 0x74, 0x68, 0x60, 0x69, 0xef, 0xf7, 0x2e, 0xff, + 0xe0, 0x6a, 0x61, 0x69, 0x40, 0x68, 0x48, 0x60, + 0x61, 0x69, 0x01, 0x20, 0x08, 0x60, 0xbd, 0x71, + 0xf8, 0xbd, 0x00, 0x00, 0x20, 0x10, 0x07, 0x00, + 0xfe, 0xb5, 0x44, 0x68, 0x0f, 0x1c, 0x01, 0x94, + 0x2c, 0x34, 0x20, 0x1c, 0x12, 0x30, 0x02, 0x90, + 0x3c, 0x00, 0xa0, 0x31, 0x01, 0x00, 0x2c, 0xe0, + 0x0c, 0x20, 0xee, 0xf7, 0x00, 0xfb, 0x05, 0x1c, + 0x60, 0x68, 0x00, 0x28, 0x1d, 0xd1, 0x02, 0x98, + 0x00, 0x21, 0x00, 0x90, 0x00, 0x20, 0xee, 0xf7, + 0x0e, 0xfa, 0x06, 0x1c, 0x00, 0x98, 0x04, 0x21, + 0xee, 0xf7, 0x09, 0xfa, 0x01, 0x1c, 0x01, 0x98, + 0xc0, 0x7e, 0x00, 0x07, 0x00, 0x0f, 0xd0, 0x30, + 0x70, 0x60, 0x01, 0x98, 0xc0, 0x7e, 0x00, 0x07, + 0x00, 0x0f, 0x3c, 0x00, 0xdc, 0x31, 0x01, 0x00, + 0xf0, 0x30, 0x48, 0x60, 0x30, 0x1c, 0xee, 0xf7, + 0x19, 0xf9, 0x65, 0x60, 0xe6, 0x60, 0x01, 0xe0, + 0x20, 0x68, 0x05, 0x60, 0x60, 0x68, 0x28, 0x60, + 0x25, 0x60, 0x00, 0x20, 0x68, 0x60, 0xa8, 0x60, + 0x38, 0x1c, 0xff, 0x30, 0x00, 0x06, 0x00, 0x0e, + 0x39, 0x1c, 0x07, 0x1c, 0x00, 0x29, 0xca, 0xd1, + 0x60, 0x68, 0xa0, 0x60, 0xfe, 0xbd, 0x00, 0x00, + 0xff, 0xb5, 0x05, 0x1c, 0x3c, 0x00, 0x18, 0x32, + 0x01, 0x00, 0x08, 0x1c, 0x00, 0x26, 0x81, 0xb0, + 0xf4, 0xf7, 0x2f, 0xfe, 0x04, 0x1c, 0x02, 0xd0, + 0x60, 0x68, 0xff, 0x28, 0x01, 0xd1, 0x06, 0x26, + 0x28, 0xe0, 0x21, 0x1c, 0x20, 0x31, 0x0a, 0x78, + 0x01, 0x2a, 0x01, 0xd1, 0x03, 0x26, 0x21, 0xe0, + 0x01, 0x27, 0x25, 0x60, 0x0f, 0x70, 0x11, 0xc5, + 0x1d, 0x48, 0x08, 0x3d, 0x68, 0x61, 0x03, 0x98, + 0x6a, 0x46, 0xe8, 0x60, 0x04, 0x98, 0x3c, 0x00, + 0x54, 0x32, 0x01, 0x00, 0x28, 0x61, 0x1a, 0x48, + 0xa8, 0x61, 0x1a, 0x48, 0xe8, 0x61, 0x1a, 0x48, + 0x28, 0x62, 0x1a, 0x48, 0x68, 0x62, 0x20, 0x7e, + 0xa1, 0x68, 0xed, 0xf7, 0xb3, 0xfe, 0x00, 0x28, + 0x06, 0xd1, 0x60, 0x7e, 0xe1, 0x68, 0x6a, 0x46, + 0xed, 0xf7, 0xac, 0xfe, 0x00, 0x28, 0x07, 0xd0, + 0x04, 0x26, 0x31, 0x1c, 0x9e, 0x20, 0xee, 0xf7, + 0x0d, 0xf8, 0x30, 0x1c, 0x05, 0xb0, 0xf0, 0xbd, + 0x3c, 0x00, 0x90, 0x32, 0x01, 0x00, 0x6a, 0x46, + 0x0f, 0x49, 0x1d, 0x20, 0xed, 0xf7, 0x9d, 0xfe, + 0x01, 0x21, 0x0d, 0x48, 0x49, 0x07, 0x01, 0x60, + 0x22, 0x7e, 0x3b, 0x1c, 0xd2, 0x06, 0xd2, 0x0e, + 0x93, 0x40, 0x43, 0x60, 0x62, 0x7e, 0xd2, 0x06, + 0xd2, 0x0e, 0x97, 0x40, 0x47, 0x60, 0x41, 0x60, + 0xe6, 0xe7, 0x31, 0x33, 0x01, 0x00, 0xd9, 0x32, + 0x01, 0x00, 0x91, 0x31, 0x01, 0x00, 0xdd, 0x30, + 0x01, 0x00, 0x3c, 0x00, 0xcc, 0x32, 0x01, 0x00, + 0xfd, 0x32, 0x01, 0x00, 0x71, 0x33, 0x01, 0x00, + 0x00, 0x10, 0x07, 0x00, 0x42, 0x68, 0x2c, 0x32, + 0x50, 0x68, 0x43, 0x68, 0x0b, 0x60, 0x81, 0x68, + 0x4b, 0x89, 0x0b, 0x81, 0x83, 0x68, 0x00, 0x21, + 0xd9, 0x60, 0x41, 0x60, 0x81, 0x60, 0x00, 0x68, + 0x50, 0x60, 0x00, 0x20, 0x70, 0x47, 0x00, 0x00, + 0x70, 0xb5, 0x42, 0x68, 0xff, 0x26, 0x91, 0x87, + 0x10, 0x6b, 0x0c, 0x04, 0x3c, 0x00, 0x08, 0x33, + 0x01, 0x00, 0x05, 0x1c, 0x36, 0x04, 0x34, 0x40, + 0x43, 0x68, 0x59, 0x68, 0xb1, 0x43, 0x21, 0x43, + 0x59, 0x60, 0x00, 0x68, 0xa8, 0x42, 0xf7, 0xd1, + 0x10, 0x6b, 0x51, 0x69, 0x40, 0x68, 0x48, 0x60, + 0x51, 0x69, 0x01, 0x20, 0x08, 0x60, 0x70, 0xbd, + 0x00, 0x00, 0xb0, 0xb5, 0x43, 0x68, 0x08, 0x1c, + 0x59, 0x62, 0x9a, 0x62, 0x00, 0x25, 0x0a, 0xe0, + 0x45, 0x81, 0xc4, 0x68, 0x2a, 0x1c, 0x3c, 0x00, + 0x44, 0x33, 0x01, 0x00, 0x00, 0x2c, 0x03, 0xd1, + 0x9a, 0x7e, 0x12, 0x07, 0x12, 0x0f, 0x10, 0x32, + 0x42, 0x60, 0x20, 0x1c, 0x00, 0x28, 0xf2, 0xd1, + 0x18, 0x69, 0x41, 0x60, 0x19, 0x69, 0x01, 0x20, + 0x08, 0x60, 0x02, 0x48, 0x00, 0x68, 0xed, 0xf7, + 0x37, 0xf8, 0xb0, 0xbd, 0x5c, 0x5b, 0x01, 0x00, + 0x01, 0x20, 0x05, 0x49, 0x40, 0x07, 0x80, 0xb5, + 0x88, 0x60, 0x04, 0x48, 0x01, 0x68, 0x0d, 0x20, + 0x3c, 0x00, 0x80, 0x33, 0x01, 0x00, 0xfe, 0xf7, + 0xe6, 0xff, 0x80, 0xbd, 0x00, 0x00, 0x00, 0x10, + 0x07, 0x00, 0xc4, 0x60, 0x01, 0x00, 0xf8, 0xb5, + 0x0e, 0x4f, 0x0c, 0x4e, 0x00, 0x24, 0x48, 0x20, + 0x60, 0x43, 0xc5, 0x19, 0x48, 0x21, 0x28, 0x1c, + 0xed, 0xf7, 0x7b, 0xf8, 0x1c, 0x20, 0x60, 0x43, + 0x81, 0x19, 0x28, 0x1d, 0x1c, 0x22, 0xed, 0xf7, + 0xfe, 0xf8, 0x1c, 0x23, 0xe8, 0x56, 0x05, 0x49, + 0xfb, 0xf7, 0x3c, 0x00, 0xbc, 0x33, 0x01, 0x00, + 0xcd, 0xf8, 0x01, 0x34, 0x01, 0x2c, 0xe9, 0xd3, + 0xf8, 0xbd, 0x00, 0x00, 0xb8, 0x44, 0x01, 0x00, + 0xcc, 0x6d, 0x01, 0x00, 0x15, 0x32, 0x01, 0x00, + 0xff, 0xb5, 0x05, 0x1c, 0x0a, 0x30, 0x06, 0x1c, + 0x81, 0xb0, 0xf2, 0xf7, 0xdd, 0xf8, 0x18, 0x4f, + 0x04, 0x1c, 0x39, 0x88, 0xef, 0xf7, 0xbc, 0xfc, + 0x32, 0x88, 0x78, 0x68, 0x02, 0x80, 0x72, 0x88, + 0x02, 0x30, 0x02, 0x80, 0x3c, 0x00, 0xf8, 0x33, + 0x01, 0x00, 0xb1, 0x88, 0x12, 0x4e, 0x41, 0x80, + 0x28, 0x88, 0x08, 0x36, 0x40, 0x05, 0x00, 0x28, + 0x05, 0xda, 0x69, 0x88, 0x03, 0x9a, 0x20, 0x1c, + 0xf7, 0xf7, 0x01, 0xfd, 0x00, 0xe0, 0x00, 0x20, + 0x70, 0x80, 0xf8, 0xf7, 0x5e, 0xfc, 0x01, 0x21, + 0x09, 0x03, 0x00, 0x28, 0x30, 0x88, 0x01, 0xd0, + 0x88, 0x43, 0x00, 0xe0, 0x08, 0x43, 0x30, 0x80, + 0x05, 0x48, 0x00, 0x22, 0x00, 0x21, 0x3c, 0x00, + 0x34, 0x34, 0x01, 0x00, 0x14, 0x30, 0xef, 0xf7, + 0x65, 0xfc, 0x20, 0x1c, 0xf9, 0xf7, 0x74, 0xf8, + 0x05, 0xb0, 0xf0, 0xbd, 0xb0, 0x7a, 0x01, 0x00, + 0x10, 0xb5, 0x0e, 0x4c, 0x60, 0x68, 0xf8, 0xf7, + 0x95, 0xf9, 0x20, 0x68, 0x00, 0x6a, 0x00, 0x28, + 0x13, 0xd1, 0xf8, 0xf7, 0xbf, 0xfc, 0x00, 0x28, + 0x08, 0xd0, 0x21, 0x68, 0x01, 0x20, 0x08, 0x62, + 0x1f, 0x21, 0x00, 0x22, 0x83, 0x20, 0x00, 0xf0, + 0x3c, 0x00, 0x70, 0x34, 0x01, 0x00, 0x9f, 0xf9, + 0x02, 0xe0, 0x60, 0x68, 0xf8, 0xf7, 0x21, 0xfa, + 0xff, 0xf7, 0x97, 0xfc, 0x21, 0x68, 0x08, 0x61, + 0x10, 0xbd, 0x14, 0x7a, 0x01, 0x00, 0xfe, 0xb5, + 0x1b, 0x4e, 0x0f, 0x1c, 0x1d, 0x1c, 0x14, 0x1c, + 0xb0, 0x60, 0x08, 0x1c, 0xf7, 0xf7, 0x2b, 0xff, + 0xb0, 0x80, 0x34, 0x73, 0x35, 0x62, 0x38, 0x1c, + 0x01, 0xaa, 0x02, 0xa9, 0xf7, 0xf7, 0x25, 0xff, + 0x00, 0xab, 0x3c, 0x00, 0xac, 0x34, 0x01, 0x00, + 0x18, 0x7a, 0x01, 0x28, 0x18, 0xd1, 0x18, 0x79, + 0x0b, 0x28, 0x08, 0xd1, 0x30, 0x7f, 0x24, 0x23, + 0x0f, 0x49, 0x58, 0x43, 0x40, 0x18, 0x80, 0x68, + 0xec, 0xf7, 0x88, 0xff, 0xfe, 0xbd, 0x00, 0xab, + 0x18, 0x79, 0x0a, 0x28, 0x08, 0xd1, 0xf7, 0xf7, + 0x39, 0xfd, 0x07, 0x1c, 0x29, 0x1c, 0x20, 0x1c, + 0xf7, 0xf7, 0x16, 0xfd, 0x38, 0x18, 0xb0, 0x80, + 0x30, 0x7f, 0x24, 0x23, 0x3c, 0x00, 0xe8, 0x34, + 0x01, 0x00, 0x04, 0x49, 0x58, 0x43, 0x40, 0x18, + 0x40, 0x68, 0xec, 0xf7, 0x72, 0xff, 0xe8, 0xe7, + 0x00, 0x00, 0xd4, 0x79, 0x01, 0x00, 0x94, 0x46, + 0x01, 0x00, 0xb0, 0xb5, 0xff, 0xf7, 0x53, 0xfc, + 0x04, 0x1c, 0xfb, 0xf7, 0xfc, 0xfa, 0x0c, 0x4d, + 0x29, 0x68, 0x09, 0x69, 0x09, 0x1b, 0x0c, 0x1a, + 0x02, 0x21, 0x1f, 0x20, 0x00, 0xf0, 0x8b, 0xf8, + 0x14, 0x2c, 0x06, 0xdd, 0x02, 0x22, 0x3c, 0x00, + 0x24, 0x35, 0x01, 0x00, 0x21, 0x1c, 0x1f, 0x20, + 0x00, 0xf0, 0x50, 0xf8, 0x01, 0x20, 0xb0, 0xbd, + 0x29, 0x68, 0x01, 0x20, 0x89, 0x6a, 0x00, 0x29, + 0xf9, 0xd0, 0x00, 0x20, 0xb0, 0xbd, 0x00, 0x00, + 0x14, 0x7a, 0x01, 0x00, 0xf8, 0xb5, 0x1a, 0x4d, + 0x07, 0x1c, 0xae, 0x79, 0x01, 0x21, 0x19, 0x4c, + 0x00, 0x20, 0x22, 0x68, 0x00, 0x2a, 0x14, 0xd1, + 0xae, 0x71, 0xa2, 0x68, 0xd0, 0x68, 0x06, 0xca, + 0x3c, 0x00, 0x60, 0x35, 0x01, 0x00, 0xec, 0xf7, + 0x3c, 0xff, 0xae, 0x79, 0x00, 0x21, 0x13, 0x4a, + 0x50, 0x69, 0x01, 0x30, 0x50, 0x61, 0xa0, 0x68, + 0x80, 0x68, 0xa0, 0x60, 0x62, 0x68, 0x90, 0x42, + 0x06, 0xd1, 0x01, 0x20, 0x20, 0x60, 0x03, 0xe0, + 0x01, 0x30, 0x0c, 0x34, 0x03, 0x28, 0xe3, 0xdb, + 0x00, 0x2f, 0x08, 0xd1, 0x00, 0x29, 0x0a, 0xd0, + 0x0a, 0x48, 0x40, 0x68, 0x00, 0x28, 0x06, 0xd0, + 0xfa, 0xf7, 0x3c, 0x00, 0x9c, 0x35, 0x01, 0x00, + 0xf5, 0xff, 0x03, 0xe0, 0x01, 0x2f, 0x03, 0xd0, + 0x00, 0x29, 0x01, 0xd1, 0xae, 0x71, 0xce, 0xe7, + 0xae, 0x71, 0xf8, 0xbd, 0x20, 0x10, 0x07, 0x00, + 0x18, 0xd9, 0x01, 0x00, 0xa8, 0x60, 0x01, 0x00, + 0x70, 0x5d, 0x01, 0x00, 0x80, 0xb5, 0x01, 0x23, + 0xf5, 0xf7, 0x7c, 0xf8, 0x80, 0xbd, 0x00, 0x00, + 0x80, 0xb5, 0x00, 0x23, 0xf5, 0xf7, 0x76, 0xf8, + 0x80, 0xbd, 0x00, 0x00, 0x3c, 0x00, 0xd8, 0x35, + 0x01, 0x00, 0xf8, 0xb5, 0x13, 0x4b, 0x00, 0x24, + 0x1b, 0x88, 0x98, 0x42, 0x1b, 0xd2, 0x11, 0x4b, + 0xc0, 0x00, 0xc0, 0x18, 0x45, 0x68, 0x06, 0x68, + 0x28, 0x68, 0x00, 0x28, 0x17, 0xd1, 0x0e, 0x4f, + 0xa8, 0x68, 0x43, 0x68, 0xb3, 0x42, 0x09, 0xd1, + 0xc3, 0x68, 0x8b, 0x42, 0x06, 0xd1, 0x03, 0x68, + 0x93, 0x42, 0x01, 0xd0, 0x53, 0x1c, 0x01, 0xd1, + 0x01, 0x24, 0x47, 0x60, 0x80, 0x68, 0x3c, 0x00, + 0x14, 0x36, 0x01, 0x00, 0x6b, 0x68, 0x83, 0x42, + 0xee, 0xd1, 0x03, 0xe0, 0x01, 0x21, 0x80, 0x20, + 0xed, 0xf7, 0x40, 0xfe, 0x20, 0x1c, 0xf8, 0xbd, + 0x56, 0x57, 0x01, 0x00, 0x84, 0x5d, 0x01, 0x00, + 0x29, 0xe3, 0x00, 0x00, 0xf8, 0xb5, 0x17, 0x4f, + 0x0a, 0x1c, 0xbe, 0x79, 0x16, 0x4d, 0x00, 0x23, + 0x6c, 0x68, 0x07, 0xe0, 0x21, 0x68, 0x91, 0x42, + 0x02, 0xd1, 0x21, 0x79, 0x81, 0x42, 0x04, 0xd0, + 0x3c, 0x00, 0x50, 0x36, 0x01, 0x00, 0x23, 0x1c, + 0xe4, 0x68, 0x00, 0x2c, 0xf5, 0xd1, 0x17, 0xe0, + 0x00, 0x2c, 0x15, 0xd0, 0x00, 0x2b, 0x0d, 0xd1, + 0xe3, 0x68, 0x0d, 0x48, 0x6b, 0x60, 0x00, 0x88, + 0x00, 0x2b, 0x02, 0xd1, 0xff, 0xf7, 0xd1, 0xfb, + 0x06, 0xe0, 0x0a, 0x4a, 0x99, 0x68, 0xff, 0xf7, + 0xf6, 0xfb, 0x01, 0xe0, 0xe0, 0x68, 0xd8, 0x60, + 0x28, 0x68, 0xe0, 0x60, 0x2c, 0x60, 0x02, 0xe0, + 0x01, 0x21, 0x3c, 0x00, 0x8c, 0x36, 0x01, 0x00, + 0xff, 0xf7, 0xa4, 0xff, 0xbe, 0x71, 0xf8, 0xbd, + 0x20, 0x10, 0x07, 0x00, 0x7c, 0x5d, 0x01, 0x00, + 0x2c, 0x74, 0x01, 0x00, 0x21, 0x38, 0x01, 0x00, + 0x70, 0xb5, 0x09, 0x4e, 0xb5, 0x79, 0xf9, 0xf7, + 0xaf, 0xfe, 0x04, 0x1c, 0x09, 0xd0, 0x20, 0x1c, + 0xed, 0xf7, 0x0c, 0xfb, 0x05, 0x49, 0x8a, 0x68, + 0x80, 0x18, 0x88, 0x60, 0x08, 0x68, 0x01, 0x30, + 0x08, 0x60, 0xb5, 0x71, 0x3c, 0x00, 0xc8, 0x36, + 0x01, 0x00, 0x20, 0x1c, 0x70, 0xbd, 0x20, 0x10, + 0x07, 0x00, 0xa8, 0x60, 0x01, 0x00, 0x09, 0x48, + 0x80, 0xb5, 0x40, 0x68, 0x02, 0x1c, 0x0b, 0xe0, + 0x01, 0x69, 0x00, 0x29, 0x07, 0xd0, 0x82, 0x42, + 0x04, 0xd0, 0x81, 0x68, 0x05, 0x48, 0x00, 0x88, + 0xff, 0xf7, 0xe5, 0xfa, 0x80, 0xbd, 0xc0, 0x68, + 0x00, 0x28, 0xf1, 0xd1, 0x80, 0xbd, 0x7c, 0x5d, + 0x01, 0x00, 0x2c, 0x74, 0x01, 0x00, 0x3c, 0x00, + 0x04, 0x37, 0x01, 0x00, 0x05, 0x48, 0x80, 0xb5, + 0x42, 0x68, 0x00, 0x2a, 0x04, 0xd0, 0x04, 0x48, + 0x00, 0x88, 0x91, 0x68, 0xff, 0xf7, 0xd2, 0xfa, + 0x80, 0xbd, 0x00, 0x00, 0x7c, 0x5d, 0x01, 0x00, + 0x2c, 0x74, 0x01, 0x00, 0x05, 0x48, 0x01, 0x68, + 0x00, 0x29, 0x04, 0xd0, 0xc0, 0x68, 0x00, 0x28, + 0x01, 0xd0, 0x01, 0x20, 0x70, 0x47, 0x00, 0x20, + 0x70, 0x47, 0x00, 0x00, 0x18, 0xd9, 0x01, 0x00, + 0x3c, 0x00, 0x40, 0x37, 0x01, 0x00, 0x80, 0xb5, + 0xf6, 0xf7, 0xd1, 0xfa, 0x80, 0xbd, 0x13, 0x1c, + 0x0d, 0x4a, 0xb0, 0xb5, 0x12, 0x88, 0x90, 0x42, + 0x0f, 0xd2, 0x03, 0x29, 0x0d, 0xd2, 0x0a, 0x4a, + 0xc0, 0x00, 0x14, 0x58, 0x0a, 0x4d, 0xac, 0x42, + 0x07, 0xd1, 0x13, 0x50, 0x0c, 0x23, 0x59, 0x43, + 0x08, 0x4b, 0xc9, 0x18, 0x80, 0x18, 0x41, 0x60, + 0xb0, 0xbd, 0x02, 0x21, 0x80, 0x20, 0xed, 0xf7, + 0x94, 0xfd, 0x3c, 0x00, 0x7c, 0x37, 0x01, 0x00, + 0xb0, 0xbd, 0x00, 0x00, 0x56, 0x57, 0x01, 0x00, + 0x84, 0x5d, 0x01, 0x00, 0x09, 0xa0, 0x00, 0x00, + 0x18, 0xd9, 0x01, 0x00, 0xf8, 0xb5, 0x0f, 0x1c, + 0x1e, 0x1c, 0x15, 0x1c, 0x04, 0x1c, 0x11, 0x1c, + 0xff, 0xf7, 0x4a, 0xff, 0x33, 0x1c, 0x2a, 0x1c, + 0x39, 0x1c, 0x20, 0x1c, 0xf4, 0xf7, 0x8a, 0xff, + 0xf8, 0xbd, 0x00, 0x00, 0xf7, 0xb5, 0x94, 0x46, + 0xff, 0x29, 0x21, 0xd0, 0x3c, 0x00, 0xb8, 0x37, + 0x01, 0x00, 0x15, 0x48, 0x00, 0x88, 0x81, 0x42, + 0x21, 0xd2, 0x14, 0x4a, 0x15, 0x4e, 0xc8, 0x00, + 0x85, 0x18, 0xb4, 0x79, 0x68, 0x68, 0x02, 0x68, + 0x00, 0x2a, 0x03, 0xd1, 0x03, 0x1d, 0x0c, 0xcb, + 0x9a, 0x42, 0x11, 0xd0, 0x43, 0x68, 0x9a, 0x68, + 0x42, 0x60, 0x0e, 0x4a, 0x17, 0x69, 0x01, 0x37, + 0x17, 0x61, 0xb4, 0x71, 0x00, 0x22, 0x02, 0x60, + 0x00, 0x98, 0xd8, 0x60, 0x60, 0x46, 0x3c, 0x00, + 0xf4, 0x37, 0x01, 0x00, 0x18, 0x60, 0x19, 0x74, + 0x28, 0x68, 0x58, 0x60, 0xfe, 0xbd, 0xb4, 0x71, + 0x06, 0x21, 0x00, 0xe0, 0x07, 0x21, 0x80, 0x20, + 0xed, 0xf7, 0x4c, 0xfd, 0xf6, 0xe7, 0x00, 0x00, + 0x56, 0x57, 0x01, 0x00, 0x84, 0x5d, 0x01, 0x00, + 0x20, 0x10, 0x07, 0x00, 0xa8, 0x60, 0x01, 0x00, + 0xb0, 0xb5, 0x14, 0x4d, 0x6c, 0x68, 0x00, 0x2c, + 0x01, 0xd0, 0x84, 0x42, 0x04, 0xd0, 0x0c, 0x21, + 0x3c, 0x00, 0x30, 0x38, 0x01, 0x00, 0x80, 0x20, + 0xed, 0xf7, 0x37, 0xfd, 0xb0, 0xbd, 0xff, 0xf7, + 0xb8, 0xfa, 0xa1, 0x68, 0x40, 0x1a, 0x0d, 0x49, + 0x88, 0x42, 0x03, 0xda, 0x10, 0x21, 0x80, 0x20, + 0xed, 0xf7, 0x2b, 0xfd, 0x21, 0x79, 0x22, 0x68, + 0x01, 0x20, 0xff, 0xf7, 0xac, 0xff, 0xe3, 0x68, + 0x6b, 0x60, 0x00, 0x2b, 0x05, 0xd0, 0x07, 0x48, + 0x06, 0x4a, 0x00, 0x88, 0x99, 0x68, 0xff, 0xf7, + 0xfe, 0xfa, 0x3c, 0x00, 0x6c, 0x38, 0x01, 0x00, + 0x28, 0x68, 0xe0, 0x60, 0x2c, 0x60, 0xb0, 0xbd, + 0x7c, 0x5d, 0x01, 0x00, 0x18, 0xfc, 0xff, 0xff, + 0x21, 0x38, 0x01, 0x00, 0x2c, 0x74, 0x01, 0x00, + 0xb0, 0xb5, 0x15, 0x4c, 0x08, 0x20, 0x21, 0x1c, + 0x80, 0x31, 0x08, 0x70, 0x13, 0x4a, 0x41, 0x04, + 0x11, 0x60, 0x13, 0x48, 0x00, 0x68, 0x13, 0x4d, + 0x6b, 0x69, 0x18, 0x40, 0x01, 0xd1, 0x10, 0x20, + 0x00, 0xe0, 0x00, 0x20, 0x3c, 0x00, 0xa8, 0x38, + 0x01, 0x00, 0xa8, 0x23, 0x5b, 0x5d, 0x18, 0x43, + 0x23, 0x1c, 0x40, 0x33, 0x18, 0x73, 0x51, 0x60, + 0x20, 0x78, 0x80, 0x08, 0x80, 0x00, 0x20, 0x70, + 0x00, 0x20, 0xff, 0xf7, 0x12, 0xfb, 0xff, 0xf7, + 0x72, 0xfa, 0x64, 0x30, 0x28, 0x66, 0x01, 0x38, + 0xa0, 0x61, 0x20, 0x78, 0x03, 0x21, 0x08, 0x43, + 0x20, 0x70, 0xb0, 0xbd, 0x00, 0x00, 0x00, 0x90, + 0x07, 0x00, 0x00, 0x10, 0x07, 0x00, 0x3c, 0x00, + 0xe4, 0x38, 0x01, 0x00, 0x10, 0x00, 0x07, 0x00, + 0xa4, 0x6c, 0x01, 0x00, 0x38, 0xb5, 0x0a, 0x4c, + 0x21, 0x1c, 0x20, 0x31, 0x8a, 0x79, 0x00, 0xab, + 0x1a, 0x70, 0xc9, 0x79, 0x07, 0x4d, 0x59, 0x70, + 0x69, 0x78, 0x88, 0x42, 0x03, 0xd1, 0xf8, 0xf7, + 0x13, 0xfc, 0xff, 0x20, 0x68, 0x70, 0x00, 0xab, + 0x18, 0x88, 0xe0, 0x84, 0x38, 0xbd, 0x00, 0x00, + 0x00, 0x10, 0x07, 0x00, 0x4c, 0x7b, 0x01, 0x00, + 0x3c, 0x00, 0x20, 0x39, 0x01, 0x00, 0xf8, 0xb5, + 0x0b, 0x1c, 0x06, 0x1c, 0x04, 0x1d, 0x7f, 0x33, + 0x14, 0xd0, 0x33, 0x68, 0x5d, 0x18, 0x35, 0x60, + 0x23, 0x88, 0x1f, 0x18, 0x06, 0x23, 0xff, 0x56, + 0xeb, 0x1b, 0x33, 0x60, 0x23, 0x88, 0x18, 0x18, + 0x81, 0x71, 0x20, 0x88, 0x01, 0x30, 0x00, 0x04, + 0x00, 0x0c, 0x20, 0x80, 0x90, 0x42, 0x01, 0xd3, + 0x00, 0x20, 0x20, 0x80, 0x10, 0x1c, 0x31, 0x68, + 0xec, 0xf7, 0x3c, 0x00, 0x5c, 0x39, 0x01, 0x00, + 0x6d, 0xfe, 0xf8, 0xbd, 0x0e, 0x49, 0x0a, 0x7c, + 0x83, 0x78, 0x1a, 0x43, 0x0a, 0x74, 0x42, 0x78, + 0x83, 0x78, 0x9a, 0x43, 0x0b, 0x7c, 0x93, 0x43, + 0x0b, 0x74, 0x8a, 0x7c, 0x43, 0x78, 0x1a, 0x43, + 0x8a, 0x74, 0x8a, 0x7c, 0x03, 0x78, 0x9a, 0x43, + 0x8a, 0x74, 0x02, 0x78, 0x43, 0x78, 0x1a, 0x43, + 0x4b, 0x7c, 0x1a, 0x43, 0x4a, 0x74, 0x4a, 0x7c, + 0xc0, 0x78, 0x82, 0x43, 0x3c, 0x00, 0x98, 0x39, + 0x01, 0x00, 0x4a, 0x74, 0x70, 0x47, 0x10, 0x00, + 0x07, 0x00, 0xb0, 0xb5, 0x06, 0x4d, 0x00, 0x24, + 0x20, 0x06, 0x00, 0x0e, 0xed, 0xf7, 0xf7, 0xf8, + 0xa1, 0x00, 0x69, 0x58, 0x08, 0x71, 0x01, 0x34, + 0x04, 0x2c, 0xf5, 0xdb, 0xb0, 0xbd, 0x10, 0x7b, + 0x01, 0x00, 0x0b, 0x48, 0x0c, 0x49, 0x7d, 0x23, + 0x42, 0x69, 0xdb, 0x00, 0x00, 0x2a, 0xc8, 0x6b, + 0x07, 0xd0, 0xc0, 0x18, 0x1a, 0x01, 0x3c, 0x00, + 0xd4, 0x39, 0x01, 0x00, 0x90, 0x42, 0xc8, 0x63, + 0x01, 0xd9, 0x07, 0x48, 0xc8, 0x63, 0x70, 0x47, + 0xff, 0x38, 0xf5, 0x38, 0xc8, 0x63, 0x98, 0x42, + 0xf9, 0xd2, 0xcb, 0x63, 0x70, 0x47, 0x00, 0x00, + 0xf4, 0x68, 0x01, 0x00, 0x44, 0x7d, 0x01, 0x00, + 0x70, 0x17, 0x00, 0x00, 0x70, 0xb5, 0x0d, 0x1c, + 0x04, 0x1c, 0x16, 0x1c, 0xfb, 0xf7, 0xf6, 0xfa, + 0xb0, 0x43, 0x28, 0x43, 0x01, 0x1c, 0x20, 0x1c, + 0x3c, 0x00, 0x10, 0x3a, 0x01, 0x00, 0x00, 0xf0, + 0xcc, 0xfa, 0x70, 0xbd, 0x00, 0x00, 0x80, 0xb5, + 0x0b, 0x4a, 0x00, 0x29, 0x09, 0xd0, 0x02, 0x29, + 0x0f, 0xd1, 0x01, 0x1c, 0x08, 0x48, 0xd2, 0x78, + 0x38, 0x30, 0xff, 0xf7, 0x78, 0xff, 0x06, 0x49, + 0x06, 0xe0, 0x01, 0x1c, 0x04, 0x48, 0x12, 0x79, + 0x20, 0x30, 0xff, 0xf7, 0x70, 0xff, 0x03, 0x49, + 0x08, 0x60, 0x80, 0xbd, 0x00, 0x00, 0xac, 0x7c, + 0x01, 0x00, 0x3c, 0x00, 0x4c, 0x3a, 0x01, 0x00, + 0xc8, 0x67, 0x01, 0x00, 0xc4, 0x67, 0x01, 0x00, + 0x80, 0xb5, 0x0b, 0x4a, 0x00, 0x29, 0x09, 0xd0, + 0x02, 0x29, 0x0f, 0xd1, 0x01, 0x1c, 0x08, 0x48, + 0x52, 0x79, 0x68, 0x30, 0xff, 0xf7, 0x5a, 0xff, + 0x06, 0x49, 0x06, 0xe0, 0x01, 0x1c, 0x04, 0x48, + 0x92, 0x79, 0x50, 0x30, 0xff, 0xf7, 0x52, 0xff, + 0x03, 0x49, 0x08, 0x60, 0x80, 0xbd, 0x00, 0x00, + 0xac, 0x7c, 0x01, 0x00, 0x3c, 0x00, 0x88, 0x3a, + 0x01, 0x00, 0xd0, 0x67, 0x01, 0x00, 0xcc, 0x67, + 0x01, 0x00, 0x08, 0xb5, 0x04, 0x21, 0x00, 0x91, + 0x81, 0x7e, 0x43, 0x68, 0x03, 0x29, 0x06, 0xd1, + 0x01, 0x1c, 0x0c, 0x31, 0x01, 0x20, 0x6a, 0x46, + 0xec, 0xf7, 0x9a, 0xfc, 0x08, 0xbd, 0x19, 0x68, + 0xc1, 0x60, 0xfb, 0xe7, 0x00, 0x00, 0x10, 0xb5, + 0x03, 0x1c, 0x00, 0x20, 0x08, 0x4c, 0x00, 0x21, + 0xca, 0x00, 0x12, 0x19, 0x92, 0x78, 0x3c, 0x00, + 0xc4, 0x3a, 0x01, 0x00, 0x9a, 0x42, 0x03, 0xd1, + 0xc8, 0x00, 0x00, 0x19, 0x40, 0x68, 0x10, 0xbd, + 0x01, 0x31, 0x09, 0x06, 0x09, 0x16, 0x06, 0x29, + 0xf1, 0xdb, 0x10, 0xbd, 0xcc, 0x5a, 0x01, 0x00, + 0xf8, 0xb5, 0x0f, 0x1c, 0x16, 0x1c, 0x00, 0x25, + 0xfe, 0xf7, 0x8e, 0xf9, 0x04, 0x1c, 0x0a, 0xd0, + 0x4a, 0x20, 0x00, 0x5d, 0x05, 0x28, 0x06, 0xd1, + 0x38, 0x1c, 0xf1, 0xf7, 0x81, 0xfe, 0x00, 0x28, + 0x3c, 0x00, 0x00, 0x3b, 0x01, 0x00, 0x01, 0xd0, + 0x01, 0x25, 0x34, 0x60, 0x28, 0x1c, 0xf8, 0xbd, + 0x00, 0x00, 0x70, 0xb5, 0x0d, 0x1c, 0x16, 0x1c, + 0x00, 0x24, 0xfe, 0xf7, 0x78, 0xf9, 0x00, 0x28, + 0x0b, 0xd0, 0x4a, 0x21, 0x09, 0x5c, 0x05, 0x29, + 0x07, 0xd1, 0x01, 0x69, 0x00, 0x29, 0x04, 0xd1, + 0x30, 0x60, 0xf1, 0xf7, 0x04, 0xfd, 0x01, 0x24, + 0x28, 0x60, 0x20, 0x1c, 0x70, 0xbd, 0xf8, 0xb5, + 0x06, 0x1c, 0x3c, 0x00, 0x3c, 0x3b, 0x01, 0x00, + 0x00, 0x25, 0x0c, 0x1c, 0x08, 0x1c, 0xf1, 0xf7, + 0x5d, 0xfe, 0x00, 0x28, 0x01, 0xd0, 0x00, 0x21, + 0x05, 0xe0, 0x20, 0x1c, 0xf1, 0xf7, 0x74, 0xfe, + 0x00, 0x28, 0x14, 0xd0, 0x01, 0x21, 0x30, 0x1c, + 0xf4, 0xf7, 0x80, 0xfb, 0x00, 0x90, 0x00, 0x28, + 0x0d, 0xd0, 0x08, 0x4f, 0x01, 0x25, 0x06, 0x22, + 0x31, 0x1c, 0x38, 0x1c, 0xec, 0xf7, 0xc2, 0xfc, + 0x06, 0x22, 0x21, 0x1c, 0x3c, 0x00, 0x78, 0x3b, + 0x01, 0x00, 0xb8, 0x18, 0xec, 0xf7, 0xbd, 0xfc, + 0x00, 0x98, 0xf8, 0x60, 0x28, 0x1c, 0xf8, 0xbd, + 0x00, 0x00, 0x70, 0x7c, 0x01, 0x00, 0x00, 0x21, + 0x00, 0x28, 0x06, 0xd0, 0x42, 0x78, 0x07, 0x2a, + 0x03, 0xd1, 0xc0, 0x79, 0x01, 0x28, 0x00, 0xd1, + 0x01, 0x21, 0x08, 0x1c, 0x70, 0x47, 0xf8, 0xb5, + 0x05, 0x1c, 0x00, 0x27, 0x16, 0x4e, 0xf1, 0xf7, + 0x28, 0xfe, 0x00, 0x28, 0x07, 0xd0, 0x3c, 0x00, + 0xb4, 0x3b, 0x01, 0x00, 0xf1, 0xf7, 0xc0, 0xfb, + 0x00, 0x28, 0x10, 0xd1, 0x00, 0x24, 0xf1, 0xf7, + 0xbb, 0xfc, 0x06, 0xe0, 0xf1, 0xf7, 0x02, 0xfe, + 0x00, 0x28, 0x08, 0xd0, 0x01, 0x24, 0xf1, 0xf7, + 0x99, 0xfd, 0x01, 0x1c, 0x06, 0x22, 0x30, 0x1c, + 0xec, 0xf7, 0x8e, 0xfc, 0x01, 0x27, 0x00, 0x2f, + 0x0d, 0xd0, 0x21, 0x1c, 0x28, 0x1c, 0xf4, 0xf7, + 0x3b, 0xfb, 0x01, 0x1c, 0x05, 0x48, 0x06, 0x22, + 0x3c, 0x00, 0xf0, 0x3b, 0x01, 0x00, 0x06, 0x38, + 0xc1, 0x60, 0x29, 0x1c, 0xec, 0xf7, 0x7f, 0xfc, + 0x01, 0x20, 0xf8, 0xbd, 0x00, 0x20, 0xfc, 0xe7, + 0x00, 0x00, 0x76, 0x7c, 0x01, 0x00, 0xf0, 0xb5, + 0x07, 0x1c, 0x00, 0x68, 0x02, 0x21, 0x04, 0x68, + 0x78, 0x69, 0x87, 0xb0, 0x01, 0x40, 0x00, 0x25, + 0x00, 0x29, 0x05, 0x91, 0x74, 0x4e, 0x12, 0xd0, + 0x22, 0x88, 0x01, 0x21, 0x13, 0x05, 0x02, 0xd4, + 0xc0, 0x07, 0x3c, 0x00, 0x2c, 0x3c, 0x01, 0x00, + 0xc1, 0x17, 0x01, 0x31, 0x6f, 0x48, 0x00, 0x29, + 0x00, 0x68, 0x01, 0xd0, 0x01, 0x30, 0x04, 0xe0, + 0x11, 0x06, 0x89, 0x0e, 0x2d, 0x29, 0x01, 0xd1, + 0x03, 0x30, 0x30, 0x60, 0x20, 0x88, 0x80, 0x07, + 0x67, 0xd1, 0x78, 0x69, 0xc0, 0x07, 0x64, 0xd5, + 0x03, 0xaa, 0x04, 0xa9, 0x20, 0x1c, 0xf7, 0xf7, + 0x4b, 0xfb, 0x00, 0xab, 0x18, 0x7c, 0x00, 0x28, + 0x07, 0xd0, 0x18, 0x7c, 0x3c, 0x00, 0x68, 0x3c, + 0x01, 0x00, 0x02, 0x28, 0x58, 0xd1, 0x18, 0x7b, + 0x40, 0x07, 0x40, 0x0f, 0x04, 0x28, 0x53, 0xd8, + 0x20, 0x79, 0x05, 0x99, 0xc0, 0x07, 0xc0, 0x17, + 0x01, 0x30, 0x02, 0x90, 0x00, 0x29, 0x02, 0xd1, + 0x02, 0x98, 0x00, 0x28, 0x48, 0xd1, 0x05, 0x99, + 0x00, 0x29, 0x04, 0xd0, 0x20, 0x88, 0x00, 0x05, + 0x01, 0xd4, 0x00, 0x20, 0x30, 0x60, 0xc0, 0x20, + 0xed, 0xf7, 0xcb, 0xfd, 0x05, 0x1c, 0x3c, 0x00, + 0xa4, 0x3c, 0x01, 0x00, 0x20, 0x1c, 0x0a, 0x30, + 0x06, 0x90, 0xfe, 0xf7, 0xad, 0xf8, 0x06, 0x1c, + 0x28, 0x1c, 0x08, 0x30, 0x23, 0x88, 0x02, 0x1d, + 0x11, 0x1d, 0xdb, 0x05, 0x06, 0xd5, 0x06, 0x9b, + 0x03, 0x60, 0x20, 0x1c, 0x10, 0x30, 0x10, 0x60, + 0x20, 0x1d, 0x0e, 0xe0, 0x23, 0x1d, 0x13, 0x60, + 0x22, 0x88, 0x92, 0x05, 0x05, 0xd5, 0x22, 0x1c, + 0x10, 0x32, 0x02, 0x60, 0x06, 0x9b, 0x0b, 0x60, + 0x3c, 0x00, 0xe0, 0x3c, 0x01, 0x00, 0x04, 0xe0, + 0x06, 0x9b, 0x03, 0x60, 0x20, 0x1c, 0x10, 0x30, + 0x08, 0x60, 0x28, 0x69, 0xf1, 0xf7, 0x43, 0xfc, + 0x00, 0x28, 0x08, 0xd0, 0x01, 0x28, 0x12, 0xd0, + 0x02, 0x28, 0x58, 0xd1, 0x00, 0xab, 0x18, 0x7c, + 0x00, 0x28, 0x54, 0xd1, 0x12, 0xe0, 0x00, 0xab, + 0x18, 0x7c, 0x02, 0x28, 0x0b, 0xd1, 0x00, 0x2e, + 0x4d, 0xd0, 0x4b, 0x20, 0x80, 0x5d, 0x02, 0x28, + 0x49, 0xd1, 0x3c, 0x00, 0x1c, 0x3d, 0x01, 0x00, + 0x07, 0xe0, 0x63, 0xe0, 0x00, 0xab, 0x18, 0x7c, + 0x00, 0x28, 0x02, 0xd1, 0x38, 0x1c, 0xfe, 0xf7, + 0x1b, 0xff, 0x20, 0x88, 0x41, 0x04, 0x30, 0x48, + 0x11, 0xd5, 0x00, 0x2e, 0x52, 0xd0, 0x00, 0xab, + 0x19, 0x7c, 0x00, 0x29, 0x26, 0xd0, 0x02, 0x99, + 0x00, 0x29, 0x02, 0xd0, 0xb0, 0x6a, 0x00, 0x78, + 0x00, 0xe0, 0x00, 0x78, 0x01, 0x28, 0x1d, 0xd0, + 0x03, 0x28, 0x43, 0xd1, 0x3c, 0x00, 0x58, 0x3d, + 0x01, 0x00, 0x1a, 0xe0, 0x00, 0xab, 0x19, 0x7c, + 0x02, 0x29, 0x16, 0xd1, 0x19, 0x7b, 0x04, 0x29, + 0x13, 0xd0, 0x19, 0x7b, 0x0c, 0x29, 0x10, 0xd0, + 0x22, 0x49, 0x09, 0x68, 0x00, 0x29, 0x0c, 0xd0, + 0x00, 0x2e, 0x0a, 0xd0, 0x02, 0x99, 0x00, 0x29, + 0x02, 0xd0, 0xb0, 0x6a, 0x00, 0x78, 0x00, 0xe0, + 0x00, 0x78, 0x01, 0x28, 0x29, 0xd0, 0x03, 0x28, + 0x27, 0xd0, 0x28, 0x22, 0x39, 0x1c, 0x3c, 0x00, + 0x94, 0x3d, 0x01, 0x00, 0x28, 0x1c, 0x88, 0x30, + 0xec, 0xf7, 0x0a, 0xfc, 0x00, 0xab, 0x19, 0x7c, + 0x28, 0x1c, 0x80, 0x30, 0x01, 0x71, 0x19, 0x7b, + 0x41, 0x71, 0x6c, 0x60, 0x6e, 0x61, 0x1b, 0xe0, + 0x05, 0x99, 0x00, 0x29, 0x14, 0xd0, 0x11, 0x48, + 0x84, 0x6c, 0x00, 0x2c, 0x10, 0xd0, 0x00, 0x22, + 0x00, 0x2e, 0x04, 0xd0, 0x40, 0x36, 0xb0, 0x7a, + 0x05, 0x28, 0x00, 0xd1, 0x01, 0x22, 0x00, 0x92, + 0x3c, 0x00, 0xd0, 0x3d, 0x01, 0x00, 0xf8, 0x7a, + 0xba, 0x7a, 0x29, 0x69, 0xc3, 0x07, 0xdb, 0x0f, + 0x06, 0x98, 0xec, 0xf7, 0x00, 0xfb, 0x28, 0x1c, + 0xed, 0xf7, 0x07, 0xfd, 0x00, 0x25, 0x28, 0x1c, + 0x07, 0xb0, 0xf0, 0xbd, 0x00, 0x00, 0xc4, 0x6a, + 0x01, 0x00, 0x68, 0x61, 0x01, 0x00, 0x28, 0x61, + 0x01, 0x00, 0xc4, 0x69, 0x01, 0x00, 0x80, 0xb5, + 0x02, 0x20, 0xff, 0xf7, 0x70, 0xf8, 0x80, 0xbd, + 0x00, 0x00, 0x3c, 0x00, 0x0c, 0x3e, 0x01, 0x00, + 0xb0, 0xb5, 0x1d, 0x4d, 0x01, 0x28, 0x17, 0xd0, + 0xa2, 0x28, 0x06, 0xd0, 0xa3, 0x28, 0x03, 0xd1, + 0x01, 0x21, 0x15, 0x20, 0xff, 0xf7, 0x08, 0xfc, + 0xb0, 0xbd, 0x00, 0x29, 0x01, 0xd1, 0x17, 0x48, + 0x02, 0xe0, 0x7d, 0x20, 0xc0, 0x00, 0x48, 0x43, + 0x00, 0x23, 0x01, 0x22, 0x01, 0x1c, 0x28, 0x60, + 0x15, 0x20, 0xff, 0xf7, 0xa7, 0xfc, 0xb0, 0xbd, + 0x01, 0x29, 0x04, 0xd0, 0x3c, 0x00, 0x48, 0x3e, + 0x01, 0x00, 0x02, 0x29, 0xfa, 0xd1, 0x00, 0xf0, + 0x2a, 0xf8, 0xb0, 0xbd, 0x6c, 0x68, 0xf5, 0xf7, + 0xde, 0xfc, 0xfe, 0xf7, 0xa8, 0xff, 0x68, 0x60, + 0x00, 0x2c, 0x09, 0xd0, 0x29, 0x68, 0x0a, 0x23, + 0x59, 0x43, 0x00, 0x1b, 0x88, 0x42, 0x03, 0xd9, + 0x01, 0x21, 0x15, 0x20, 0xed, 0xf7, 0x17, 0xfa, + 0x01, 0x22, 0x15, 0x20, 0x29, 0x68, 0xff, 0xf7, + 0xa6, 0xfb, 0xb0, 0xbd, 0x00, 0x00, 0x3c, 0x00, + 0x84, 0x3e, 0x01, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x87, 0x93, 0x03, 0x01, 0x20, 0x04, 0x49, + 0x40, 0x03, 0x80, 0xb5, 0x08, 0x60, 0x03, 0x21, + 0x15, 0x20, 0xed, 0xf7, 0x03, 0xfa, 0x80, 0xbd, + 0x00, 0x10, 0x07, 0x00, 0x07, 0x48, 0x80, 0xb5, + 0xbe, 0x21, 0x01, 0x73, 0x01, 0x7a, 0x10, 0x22, + 0x11, 0x43, 0x01, 0x72, 0x00, 0x23, 0x02, 0x22, + 0x15, 0x20, 0x03, 0x49, 0xff, 0xf7, 0x68, 0xfc, + 0x3c, 0x00, 0xc0, 0x3e, 0x01, 0x00, 0x80, 0xbd, + 0x00, 0x00, 0x00, 0x03, 0x07, 0x00, 0x80, 0x9f, + 0xd5, 0x00, 0x80, 0xb5, 0x00, 0x28, 0x03, 0xd0, + 0x0a, 0x1c, 0x15, 0x21, 0xa2, 0x20, 0x02, 0xe0, + 0x00, 0x22, 0x15, 0x21, 0xa3, 0x20, 0xff, 0xf7, + 0x66, 0xfc, 0x80, 0xbd, 0x00, 0x00, 0x10, 0xb5, + 0x00, 0xf0, 0x19, 0xf8, 0x0a, 0x48, 0xbe, 0x21, + 0x01, 0x73, 0x03, 0x7a, 0x10, 0x22, 0x93, 0x43, + 0x01, 0x24, 0x3c, 0x00, 0xfc, 0x3e, 0x01, 0x00, + 0x23, 0x43, 0x03, 0x72, 0x01, 0x73, 0x01, 0x7a, + 0x91, 0x43, 0x20, 0x22, 0x11, 0x43, 0x01, 0x72, + 0x02, 0x22, 0x15, 0x20, 0x02, 0x49, 0xff, 0xf7, + 0x5b, 0xfb, 0x10, 0xbd, 0x00, 0x03, 0x07, 0x00, + 0x80, 0x9f, 0xd5, 0x00, 0x80, 0xb5, 0x02, 0x21, + 0x15, 0x20, 0xff, 0xf7, 0x85, 0xfb, 0x04, 0x48, + 0xbe, 0x21, 0x01, 0x73, 0x01, 0x7a, 0x11, 0x22, + 0x91, 0x43, 0x01, 0x72, 0x3c, 0x00, 0x38, 0x3f, + 0x01, 0x00, 0x80, 0xbd, 0x00, 0x00, 0x00, 0x03, + 0x07, 0x00, 0xf8, 0xb5, 0x06, 0x1c, 0x05, 0x1c, + 0x60, 0x36, 0x00, 0x27, 0x44, 0x68, 0x22, 0xe0, + 0x08, 0x21, 0x00, 0x20, 0xed, 0xf7, 0x41, 0xfb, + 0x60, 0x61, 0x01, 0x89, 0x04, 0x39, 0x09, 0x04, + 0x09, 0x0c, 0x01, 0x81, 0x60, 0x69, 0x00, 0x68, + 0x40, 0x18, 0x04, 0x21, 0xed, 0xf7, 0x35, 0xfb, + 0xe0, 0x61, 0x60, 0x69, 0x71, 0x7b, 0x3c, 0x00, + 0x74, 0x3f, 0x01, 0x00, 0x00, 0x68, 0x89, 0x01, + 0xc1, 0x70, 0x29, 0x69, 0x0c, 0x31, 0x03, 0x22, + 0xec, 0xf7, 0xba, 0xfa, 0x28, 0x69, 0x0c, 0x30, + 0x01, 0x68, 0x01, 0x31, 0x01, 0x60, 0x25, 0x62, + 0xa7, 0x61, 0x24, 0x68, 0x00, 0x2c, 0xda, 0xd1, + 0x02, 0x49, 0x03, 0x48, 0x6a, 0x68, 0xf6, 0xf7, + 0xb3, 0xf8, 0xf8, 0xbd, 0xfd, 0x6b, 0x00, 0x00, + 0xa0, 0x6a, 0x01, 0x00, 0x80, 0xb5, 0x00, 0x07, + 0x3c, 0x00, 0xb0, 0x3f, 0x01, 0x00, 0x00, 0x09, + 0x09, 0x02, 0x09, 0x0a, 0x08, 0x43, 0x02, 0x49, + 0x08, 0x60, 0xff, 0xf7, 0x20, 0xff, 0x80, 0xbd, + 0x00, 0x00, 0x60, 0x00, 0x07, 0x00, 0x08, 0x00, + 0x14, 0x00, 0xc8, 0x00, 0x00, 0x00, 0xe8, 0x03, + 0x00, 0x00, 0x10, 0x00, 0x14, 0x00, 0xc8, 0x00, + 0x00, 0x00, 0xe8, 0x03, 0x00, 0x00, 0x1c, 0x00, + 0x14, 0x00, 0xc8, 0x00, 0x00, 0x00, 0xe8, 0x03, + 0x00, 0x00, 0x3c, 0x00, 0xec, 0x3f, 0x01, 0x00, + 0x24, 0x01, 0x07, 0x00, 0x32, 0x00, 0x00, 0x00, + 0xe8, 0x03, 0x00, 0x00, 0x40, 0x06, 0x01, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x41, 0x6e, 0x62, 0x69, 0x7e, 0x64, 0x61, 0x6f, + 0x6f, 0x00, 0x00, 0x00, 0x52, 0x65, 0x6c, 0x65, + 0x61, 0x73, 0x65, 0x20, 0x36, 0x5f, 0x37, 0x5f, + 0x31, 0x35, 0x20, 0x42, 0x75, 0x69, 0x6c, 0x64, + 0x20, 0x32, 0x3a, 0x35, 0x3c, 0x00, 0x28, 0x40, + 0x01, 0x00, 0x32, 0x39, 0x38, 0x20, 0x53, 0x65, + 0x70, 0x20, 0x30, 0x34, 0x20, 0x32, 0x30, 0x30, + 0x39, 0x20, 0x31, 0x37, 0x3a, 0x31, 0x33, 0x3a, + 0x32, 0x30, 0x20, 0x28, 0x48, 0x57, 0x3d, 0x34, + 0x3a, 0x33, 0x2c, 0x42, 0x54, 0x43, 0x4f, 0x45, + 0x58, 0x29, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, + 0x1c, 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3c, 0x00, + 0x64, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xe8, 0x03, 0x70, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0xd0, 0x07, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x7c, 0x15, 0x15, 0x00, + 0x3c, 0x00, 0xa0, 0x40, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x70, 0x17, + 0x1e, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, + 0x00, 0x00, 0x28, 0x23, 0x16, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0xf8, 0x2a, + 0x0b, 0x00, 0x3c, 0x00, 0xdc, 0x40, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, + 0xe0, 0x2e, 0x12, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x00, 0x50, 0x46, 0x0e, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, + 0xf0, 0x55, 0x08, 0x00, 0x3c, 0x00, 0x18, 0x41, + 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2c, 0x00, + 0x00, 0x00, 0xc0, 0x5d, 0x0e, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0xe8, 0x80, + 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x42, 0x00, + 0x00, 0x00, 0xa0, 0x8c, 0x0a, 0x00, 0x3c, 0x00, + 0x54, 0x41, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x48, 0x00, 0x00, 0x00, 0x80, 0xbb, 0x0a, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0xf0, 0xd2, 0x0a, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x6c, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x90, 0x00, + 0x3c, 0x00, 0x90, 0x41, 0x01, 0x00, 0xc0, 0x00, + 0x90, 0x00, 0xc0, 0x00, 0x90, 0x00, 0x14, 0x00, + 0x10, 0x00, 0x14, 0x00, 0x10, 0x00, 0xc0, 0x00, + 0x90, 0x00, 0x14, 0x00, 0x10, 0x00, 0x14, 0x00, + 0x10, 0x00, 0xc0, 0x00, 0x90, 0x00, 0x14, 0x00, + 0x10, 0x00, 0xc0, 0x00, 0x90, 0x00, 0x14, 0x00, + 0x10, 0x00, 0x14, 0x00, 0x10, 0x00, 0x14, 0x00, + 0x10, 0x00, 0xc0, 0x00, 0x90, 0x00, 0x60, 0x00, + 0x48, 0x00, 0x3c, 0x00, 0xcc, 0x41, 0x01, 0x00, + 0x60, 0x00, 0x48, 0x00, 0x14, 0x00, 0x10, 0x00, + 0x14, 0x00, 0x10, 0x00, 0x60, 0x00, 0x48, 0x00, + 0x14, 0x00, 0x10, 0x00, 0x14, 0x00, 0x10, 0x00, + 0x60, 0x00, 0x48, 0x00, 0x14, 0x00, 0x10, 0x00, + 0x60, 0x00, 0x48, 0x00, 0x14, 0x00, 0x10, 0x00, + 0x14, 0x00, 0x10, 0x00, 0x14, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x04, 0x01, 0x0b, 0x02, 0x0c, 0x03, + 0x12, 0x04, 0x16, 0x05, 0x3c, 0x00, 0x08, 0x42, + 0x01, 0x00, 0x18, 0x06, 0x00, 0x0e, 0x00, 0x0e, + 0x24, 0x07, 0x00, 0x0e, 0x2c, 0x08, 0x30, 0x09, + 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x42, 0x0a, + 0x00, 0x0e, 0x48, 0x0b, 0x00, 0x0e, 0x00, 0x0e, + 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x60, 0x0c, + 0x00, 0x0e, 0x00, 0x0e, 0x6c, 0x0d, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0xc0, 0xff, 0xff, 0xff, 0x3c, 0x00, + 0x44, 0x42, 0x01, 0x00, 0xb6, 0xff, 0xff, 0xff, + 0xd3, 0xff, 0xff, 0xff, 0xc9, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x51, 0xb0, 0x00, 0x00, + 0x0c, 0x00, 0x00, 0x00, 0x51, 0xb0, 0x00, 0x00, + 0x0c, 0x00, 0x00, 0x00, 0x59, 0xaf, 0x00, 0x00, + 0x3c, 0x00, 0x80, 0x42, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xa5, 0xaf, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x45, 0xb0, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xd5, 0xaf, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xad, 0xb0, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xbc, 0x42, 0x01, 0x00, + 0x95, 0xdb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x95, 0xdb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x99, 0xb0, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xf8, 0x42, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x17, + 0x01, 0x00, 0x35, 0x17, 0x01, 0x00, 0x21, 0x17, + 0x01, 0x00, 0xd9, 0x9c, 0x00, 0x00, 0x49, 0x17, + 0x01, 0x00, 0x3d, 0x17, 0x01, 0x00, 0xd1, 0x9c, + 0x00, 0x00, 0xd1, 0x9c, 0x00, 0x00, 0x1d, 0x1a, + 0x01, 0x00, 0xd1, 0x9c, 0x00, 0x00, 0x01, 0x1a, + 0x01, 0x00, 0x31, 0x1a, 0x01, 0x00, 0x25, 0x1a, + 0x01, 0x00, 0x3d, 0x17, 0x01, 0x00, 0x3c, 0x00, + 0x34, 0x43, 0x01, 0x00, 0x81, 0x1a, 0x01, 0x00, + 0xd1, 0x9c, 0x00, 0x00, 0x79, 0x17, 0x01, 0x00, + 0xd9, 0x9c, 0x00, 0x00, 0x5d, 0x17, 0x01, 0x00, + 0xa1, 0x17, 0x01, 0x00, 0x95, 0x17, 0x01, 0x00, + 0x81, 0x17, 0x01, 0x00, 0x21, 0x18, 0x01, 0x00, + 0xf5, 0x17, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, + 0x0c, 0x00, 0x00, 0x00, 0x10, 0x00, 0x08, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x70, 0x43, 0x01, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, + 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x19, 0x1c, + 0x01, 0x00, 0x89, 0x41, 0x00, 0x00, 0x89, 0x41, + 0x00, 0x00, 0x85, 0x41, 0x00, 0x00, 0x85, 0x41, + 0x00, 0x00, 0x85, 0x41, 0x00, 0x00, 0x85, 0x41, + 0x00, 0x00, 0x89, 0x41, 0x00, 0x00, 0x85, 0x41, + 0x00, 0x00, 0x85, 0x41, 0x00, 0x00, 0x35, 0x1b, + 0x01, 0x00, 0x3c, 0x00, 0xac, 0x43, 0x01, 0x00, + 0x9d, 0x1b, 0x01, 0x00, 0x01, 0x1c, 0x01, 0x00, + 0x89, 0x41, 0x00, 0x00, 0x89, 0x41, 0x00, 0x00, + 0x89, 0x41, 0x00, 0x00, 0x85, 0x41, 0x00, 0x00, + 0x65, 0x18, 0x01, 0x00, 0x29, 0x18, 0x01, 0x00, + 0x39, 0x18, 0x01, 0x00, 0xbd, 0x18, 0x01, 0x00, + 0x89, 0x41, 0x00, 0x00, 0x4d, 0x18, 0x01, 0x00, + 0xa5, 0x18, 0x01, 0x00, 0x85, 0x41, 0x00, 0x00, + 0x01, 0x19, 0x01, 0x00, 0x3c, 0x00, 0xe8, 0x43, + 0x01, 0x00, 0xd9, 0x18, 0x01, 0x00, 0xed, 0x18, + 0x01, 0x00, 0x15, 0x19, 0x01, 0x00, 0x89, 0x41, + 0x00, 0x00, 0x89, 0x41, 0x00, 0x00, 0x89, 0x41, + 0x00, 0x00, 0x85, 0x41, 0x00, 0x00, 0x89, 0x41, + 0x00, 0x00, 0x89, 0x41, 0x00, 0x00, 0x69, 0x1c, + 0x01, 0x00, 0x89, 0x41, 0x00, 0x00, 0x71, 0x1c, + 0x01, 0x00, 0x89, 0x41, 0x00, 0x00, 0x89, 0x41, + 0x00, 0x00, 0xfd, 0xdb, 0x00, 0x00, 0x3c, 0x00, + 0x24, 0x44, 0x01, 0x00, 0x1d, 0x7c, 0x00, 0x00, + 0x00, 0x00, 0x80, 0x00, 0xf5, 0xda, 0x00, 0x00, + 0x14, 0x00, 0x81, 0x00, 0xfd, 0xdd, 0x00, 0x00, + 0x08, 0x00, 0x82, 0x00, 0xc5, 0xdd, 0x00, 0x00, + 0x38, 0x00, 0x83, 0x00, 0x45, 0xdc, 0x00, 0x00, + 0x10, 0x00, 0x84, 0x00, 0x99, 0xdc, 0x00, 0x00, + 0x0c, 0x00, 0x86, 0x00, 0x39, 0xdc, 0x00, 0x00, + 0x10, 0x00, 0x88, 0x00, 0x11, 0xde, 0x00, 0x00, + 0x3c, 0x00, 0x60, 0x44, 0x01, 0x00, 0x10, 0x00, + 0x8a, 0x00, 0x35, 0xdd, 0x00, 0x00, 0x0c, 0x00, + 0x8c, 0x00, 0xad, 0xdf, 0x00, 0x00, 0x1c, 0x00, + 0x8e, 0x00, 0xc9, 0xde, 0x00, 0x00, 0x38, 0x00, + 0x8f, 0x00, 0xed, 0xdc, 0x00, 0x00, 0x38, 0x00, + 0x90, 0x00, 0x75, 0xdf, 0x00, 0x00, 0x0c, 0x00, + 0x91, 0x00, 0x8d, 0xdc, 0x00, 0x00, 0x0c, 0x00, + 0x93, 0x00, 0xb9, 0xdd, 0x00, 0x00, 0x0c, 0x00, + 0x94, 0x00, 0x3c, 0x00, 0x9c, 0x44, 0x01, 0x00, + 0x00, 0x08, 0x08, 0x08, 0x10, 0x0c, 0x0c, 0x0c, + 0x08, 0x0c, 0x08, 0x0c, 0x08, 0x0c, 0x08, 0x08, + 0x08, 0x08, 0x14, 0x08, 0x08, 0x14, 0x00, 0x30, + 0x00, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, + 0xad, 0x30, 0x01, 0x00, 0x15, 0x30, 0x01, 0x00, + 0x20, 0x30, 0x07, 0x00, 0x30, 0x30, 0x07, 0x00, + 0x06, 0x07, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xd8, 0x44, + 0x01, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0xc9, 0x02, 0x00, 0x94, 0x3f, + 0x03, 0x00, 0xe0, 0x8b, 0x5a, 0x00, 0x05, 0x3a, + 0x85, 0x00, 0xc8, 0xf2, 0x06, 0x00, 0xf8, 0x4c, + 0x56, 0x00, 0x20, 0xa7, 0x3d, 0x00, 0xb7, 0x4a, + 0x00, 0x00, 0xb7, 0x4a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x14, 0x45, 0x01, 0x00, 0x01, 0x01, 0x01, 0x02, + 0x02, 0x02, 0x03, 0x03, 0x03, 0x04, 0x04, 0x04, + 0x05, 0x06, 0x00, 0x00, 0x2d, 0x7c, 0x00, 0x00, + 0x00, 0x00, 0xff, 0x00, 0xfd, 0x95, 0x00, 0x00, + 0x08, 0x00, 0xff, 0x00, 0xed, 0x97, 0x00, 0x00, + 0x08, 0x00, 0x82, 0x00, 0xcd, 0x95, 0x00, 0x00, + 0x0c, 0x00, 0x83, 0x00, 0x4d, 0x96, 0x00, 0x00, + 0x0c, 0x00, 0x85, 0x00, 0x2d, 0x7c, 0x00, 0x00, + 0x3c, 0x00, 0x50, 0x45, 0x01, 0x00, 0x00, 0x00, + 0xff, 0x00, 0x2d, 0x7c, 0x00, 0x00, 0x00, 0x00, + 0xff, 0x00, 0x2d, 0x7c, 0x00, 0x00, 0x00, 0x00, + 0xff, 0x00, 0x3d, 0x96, 0x00, 0x00, 0x0c, 0x00, + 0x89, 0x00, 0xd9, 0x97, 0x00, 0x00, 0x08, 0x00, + 0x8a, 0x00, 0x91, 0x95, 0x00, 0x00, 0x08, 0x00, + 0xff, 0x00, 0x2d, 0x7c, 0x00, 0x00, 0x00, 0x00, + 0xff, 0x00, 0x2d, 0x7c, 0x00, 0x00, 0x00, 0x00, + 0xff, 0x00, 0x3c, 0x00, 0x8c, 0x45, 0x01, 0x00, + 0xf9, 0x97, 0x00, 0x00, 0x08, 0x00, 0x8d, 0x00, + 0x2d, 0x7c, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, + 0x2d, 0x7c, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, + 0xc9, 0x97, 0x00, 0x00, 0x30, 0x00, 0x90, 0x00, + 0x11, 0x95, 0x00, 0x00, 0x18, 0x00, 0x91, 0x00, + 0x15, 0x96, 0x00, 0x00, 0x08, 0x00, 0x92, 0x00, + 0x59, 0x95, 0x00, 0x00, 0x3c, 0x00, 0x93, 0x00, + 0x29, 0x96, 0x00, 0x00, 0x3c, 0x00, 0xc8, 0x45, + 0x01, 0x00, 0x08, 0x00, 0x94, 0x00, 0xa1, 0x95, + 0x00, 0x00, 0x08, 0x00, 0x95, 0x00, 0x81, 0x97, + 0x00, 0x00, 0x0c, 0x00, 0x96, 0x00, 0x6d, 0x97, + 0x00, 0x00, 0x10, 0x00, 0x98, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x10, + 0x08, 0x00, 0x00, 0x08, 0x00, 0x10, 0x3c, 0x00, + 0x04, 0x46, 0x01, 0x00, 0x08, 0x0c, 0x0c, 0x0c, + 0x0c, 0x1c, 0x0c, 0x0c, 0x08, 0x00, 0x00, 0x00, + 0x0d, 0x8b, 0x00, 0x00, 0xf5, 0x8a, 0x00, 0x00, + 0xe9, 0x8a, 0x00, 0x00, 0x01, 0x8b, 0x00, 0x00, + 0x14, 0x08, 0x0c, 0x0c, 0x10, 0x0c, 0x00, 0x00, + 0xb1, 0x98, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, + 0x19, 0x99, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, + 0x3d, 0x7c, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0x46, 0x01, 0x00, 0x3d, 0x99, + 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x09, 0x99, + 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x3d, 0x7c, + 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x02, 0x01, + 0x04, 0x04, 0x08, 0x08, 0x81, 0x37, 0x80, 0xf3, + 0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00, 0xaa, 0xaa, + 0x03, 0x00, 0x00, 0xf8, 0x6d, 0xa9, 0x6d, 0xa9, + 0x6e, 0xa9, 0x3c, 0x00, 0x7c, 0x46, 0x01, 0x00, + 0x6e, 0xa8, 0x6e, 0xa8, 0x6e, 0xa8, 0x6f, 0xa7, + 0x6f, 0xa7, 0x6f, 0xa7, 0x6f, 0xa6, 0x6f, 0xa6, + 0x70, 0xa6, 0x70, 0xa5, 0x70, 0xa4, 0x00, 0x00, + 0xb5, 0x1b, 0x01, 0x00, 0xc9, 0x1b, 0x01, 0x00, + 0xe1, 0x1b, 0x01, 0x00, 0xe5, 0x9c, 0x00, 0x00, + 0xa5, 0x1b, 0x01, 0x00, 0xe5, 0x9c, 0x00, 0x00, + 0x89, 0x1b, 0x01, 0x00, 0xd5, 0x9c, 0x00, 0x00, + 0xd5, 0x9c, 0x00, 0x00, 0x3c, 0x00, 0xb8, 0x46, + 0x01, 0x00, 0xd1, 0x1a, 0x01, 0x00, 0xe5, 0x1a, + 0x01, 0x00, 0x05, 0x1b, 0x01, 0x00, 0x25, 0x1b, + 0x01, 0x00, 0xb1, 0x1a, 0x01, 0x00, 0xe5, 0x9c, + 0x00, 0x00, 0x9d, 0x1a, 0x01, 0x00, 0xd5, 0x9c, + 0x00, 0x00, 0xc1, 0x1a, 0x01, 0x00, 0x89, 0x19, + 0x01, 0x00, 0xa9, 0x19, 0x01, 0x00, 0xc9, 0x19, + 0x01, 0x00, 0xf1, 0x19, 0x01, 0x00, 0x79, 0x19, + 0x01, 0x00, 0xe5, 0x9c, 0x00, 0x00, 0x3c, 0x00, + 0xf4, 0x46, 0x01, 0x00, 0x65, 0x19, 0x01, 0x00, + 0xd5, 0x9c, 0x00, 0x00, 0xd5, 0x9c, 0x00, 0x00, + 0xd5, 0x9c, 0x00, 0x00, 0xd5, 0x9c, 0x00, 0x00, + 0xd5, 0x9c, 0x00, 0x00, 0xd5, 0x9c, 0x00, 0x00, + 0xd5, 0x9c, 0x00, 0x00, 0x55, 0x1c, 0x01, 0x00, + 0x45, 0x1c, 0x01, 0x00, 0x45, 0x1c, 0x01, 0x00, + 0xd5, 0x9c, 0x00, 0x00, 0xd5, 0x9c, 0x00, 0x00, + 0xd5, 0x9c, 0x00, 0x00, 0xd5, 0x9c, 0x00, 0x00, + 0x3c, 0x00, 0x30, 0x47, 0x01, 0x00, 0xd5, 0x9c, + 0x00, 0x00, 0x55, 0x19, 0x01, 0x00, 0xe5, 0x9c, + 0x00, 0x00, 0x41, 0x19, 0x01, 0x00, 0x31, 0x19, + 0x01, 0x00, 0xd5, 0x9c, 0x00, 0x00, 0x02, 0x05, + 0x0a, 0x00, 0x00, 0x00, 0x02, 0x04, 0x0a, 0x00, + 0x00, 0x00, 0xc5, 0x20, 0x00, 0x00, 0x21, 0x21, + 0x00, 0x00, 0x25, 0x21, 0x00, 0x00, 0x39, 0x21, + 0x00, 0x00, 0x49, 0x21, 0x00, 0x00, 0x55, 0x21, + 0x00, 0x00, 0x3c, 0x00, 0x6c, 0x47, 0x01, 0x00, + 0x61, 0x21, 0x00, 0x00, 0xed, 0x21, 0x00, 0x00, + 0x0d, 0x22, 0x00, 0x00, 0x21, 0x22, 0x00, 0x00, + 0x3d, 0x22, 0x00, 0x00, 0x49, 0x22, 0x00, 0x00, + 0xc5, 0x22, 0x00, 0x00, 0xe1, 0x22, 0x00, 0x00, + 0xf5, 0x22, 0x00, 0x00, 0xe9, 0x1f, 0x00, 0x00, + 0xe9, 0x1f, 0x00, 0x00, 0xe9, 0x1f, 0x00, 0x00, + 0xe9, 0x1f, 0x00, 0x00, 0xe9, 0x1f, 0x00, 0x00, + 0x11, 0x23, 0x00, 0x00, 0x3c, 0x00, 0xa8, 0x47, + 0x01, 0x00, 0x1d, 0x23, 0x00, 0x00, 0x89, 0x23, + 0x00, 0x00, 0xa5, 0x23, 0x00, 0x00, 0xb9, 0x23, + 0x00, 0x00, 0x11, 0x20, 0x00, 0x00, 0x1d, 0x20, + 0x00, 0x00, 0x6d, 0x20, 0x00, 0x00, 0x8d, 0x20, + 0x00, 0x00, 0xb9, 0x20, 0x00, 0x00, 0x00, 0x01, + 0x02, 0x03, 0x03, 0x05, 0x06, 0x06, 0x08, 0x09, + 0x08, 0x09, 0x09, 0x09, 0xc4, 0x80, 0xca, 0x80, + 0x80, 0x80, 0x80, 0x80, 0xd0, 0x80, 0x3c, 0x00, + 0xe4, 0x47, 0x01, 0x00, 0xd6, 0xd9, 0xdc, 0xdf, + 0xe2, 0x80, 0x80, 0x80, 0xe5, 0xe8, 0x80, 0x80, + 0x80, 0x80, 0xeb, 0xee, 0xf1, 0xf4, 0xf7, 0xfa, + 0xfd, 0x00, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, + 0x04, 0x00, 0x05, 0x00, 0x06, 0x00, 0x07, 0x00, + 0x08, 0x00, 0x09, 0x00, 0x0a, 0x00, 0x0b, 0x00, + 0x0c, 0x00, 0x0e, 0x00, 0x10, 0x00, 0x11, 0x00, + 0x13, 0x00, 0x16, 0x00, 0x18, 0x00, 0x1b, 0x00, + 0x3c, 0x00, 0x20, 0x48, 0x01, 0x00, 0x1e, 0x00, + 0x22, 0x00, 0x26, 0x00, 0x2b, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x3c, 0x00, 0x44, 0x00, 0x4c, 0x00, + 0x55, 0x00, 0x5f, 0x00, 0x6b, 0x00, 0x78, 0x00, + 0x86, 0x00, 0x97, 0x00, 0xa9, 0x00, 0xbe, 0x00, + 0xd5, 0x00, 0xef, 0x00, 0xff, 0x7f, 0x0c, 0x00, + 0x06, 0x00, 0x02, 0x00, 0x00, 0x00, 0xfe, 0xff, + 0xfc, 0xff, 0xfb, 0xff, 0xfa, 0xff, 0xf9, 0xff, + 0xf8, 0xff, 0x3c, 0x00, 0x5c, 0x48, 0x01, 0x00, + 0xf7, 0xff, 0xf6, 0xff, 0xf5, 0xff, 0xf4, 0xff, + 0xf3, 0xff, 0xf2, 0xff, 0xf1, 0xff, 0xf0, 0xff, + 0xef, 0xff, 0xee, 0xff, 0xed, 0xff, 0xec, 0xff, + 0xeb, 0xff, 0xea, 0xff, 0xe9, 0xff, 0xe8, 0xff, + 0xe7, 0xff, 0xe6, 0xff, 0xe5, 0xff, 0xe4, 0xff, + 0xe3, 0xff, 0xe2, 0xff, 0xe1, 0xff, 0xe0, 0xff, + 0xdf, 0xff, 0xde, 0xff, 0xdd, 0xff, 0xdc, 0xff, + 0xdc, 0xff, 0x00, 0x00, 0x3c, 0x00, 0x98, 0x48, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xb1, 0x7c, 0x41, 0x00, 0x11, 0x5a, + 0x40, 0xe2, 0xb2, 0x7c, 0x41, 0x00, 0x05, 0x5a, + 0x40, 0xe2, 0xaf, 0x7c, 0x41, 0x00, 0xf9, 0x59, + 0x40, 0xe2, 0xb0, 0x7c, 0x41, 0x00, 0xed, 0x59, + 0x40, 0xe2, 0x24, 0x67, 0x01, 0x00, 0x0e, 0x00, + 0x00, 0xe3, 0x5c, 0x67, 0x01, 0x00, 0x0e, 0x00, + 0x00, 0xe3, 0x0a, 0x61, 0x01, 0x00, 0x3c, 0x00, + 0xd4, 0x48, 0x01, 0x00, 0x01, 0x00, 0x00, 0xe3, + 0x0e, 0x61, 0x01, 0x00, 0x01, 0x00, 0x00, 0xe3, + 0x32, 0x67, 0x01, 0x00, 0x0e, 0x00, 0x00, 0xe3, + 0x6a, 0x67, 0x01, 0x00, 0x0e, 0x00, 0x00, 0xe3, + 0x0b, 0x61, 0x01, 0x00, 0x01, 0x00, 0x00, 0xe3, + 0x0f, 0x61, 0x01, 0x00, 0x01, 0x00, 0x00, 0xe3, + 0x40, 0x67, 0x01, 0x00, 0x0e, 0x00, 0x00, 0xe3, + 0x78, 0x67, 0x01, 0x00, 0x0e, 0x00, 0x00, 0xe3, + 0x3c, 0x00, 0x10, 0x49, 0x01, 0x00, 0x0c, 0x61, + 0x01, 0x00, 0x01, 0x00, 0x00, 0xe3, 0x10, 0x61, + 0x01, 0x00, 0x01, 0x00, 0x00, 0xe3, 0x4e, 0x67, + 0x01, 0x00, 0x0e, 0x00, 0x00, 0xe3, 0x86, 0x67, + 0x01, 0x00, 0x0e, 0x00, 0x00, 0xe3, 0x0d, 0x61, + 0x01, 0x00, 0x01, 0x00, 0x00, 0xe3, 0x11, 0x61, + 0x01, 0x00, 0x01, 0x00, 0x00, 0xe3, 0xc0, 0x48, + 0x01, 0x00, 0x04, 0x00, 0x00, 0x0a, 0xe0, 0x48, + 0x01, 0x00, 0x3c, 0x00, 0x4c, 0x49, 0x01, 0x00, + 0x04, 0x00, 0x00, 0x0a, 0x00, 0x49, 0x01, 0x00, + 0x04, 0x00, 0x00, 0x0a, 0x20, 0x49, 0x01, 0x00, + 0x04, 0x00, 0x00, 0x0a, 0x18, 0x67, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x28, 0x75, 0x01, 0x01, + 0x7d, 0xa9, 0x40, 0xe2, 0x2c, 0x75, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x20, 0x75, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x44, 0x75, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x3c, 0x00, 0x88, 0x49, + 0x01, 0x00, 0xf0, 0x59, 0x01, 0x00, 0x04, 0x00, + 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x24, 0x75, 0x01, 0x00, 0x04, 0x00, + 0x00, 0xe2, 0xb8, 0x7c, 0x01, 0x00, 0x04, 0x00, + 0x00, 0xe2, 0x8d, 0xa9, 0x00, 0x00, 0x01, 0x00, + 0x00, 0xda, 0x1d, 0x75, 0x01, 0x00, 0x01, 0x00, + 0x00, 0xe2, 0xc4, 0x67, 0x01, 0x00, 0x3c, 0x00, + 0xc4, 0x49, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x21, 0x59, 0x00, 0x00, 0x0e, 0x00, 0x00, 0xd9, + 0xc8, 0x67, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0xcc, 0x67, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0xd0, 0x67, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0x65, 0xd9, 0x00, 0x00, 0x04, 0x00, 0x00, 0xda, + 0xa5, 0xd9, 0x00, 0x00, 0x04, 0x00, 0x00, 0xda, + 0x3c, 0x00, 0x00, 0x4a, 0x01, 0x00, 0x01, 0x59, + 0x00, 0x00, 0x01, 0x00, 0x00, 0xda, 0x32, 0x67, + 0x01, 0x00, 0x0e, 0x00, 0x00, 0xe3, 0x6a, 0x67, + 0x01, 0x00, 0x0e, 0x00, 0x00, 0xe3, 0x11, 0x59, + 0x00, 0x00, 0x01, 0x00, 0x00, 0xda, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x48, + 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, 0xa0, 0x48, + 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, 0x40, 0x49, + 0x01, 0x00, 0x3c, 0x00, 0x3c, 0x4a, 0x01, 0x00, + 0x05, 0x00, 0x00, 0x0a, 0x68, 0x49, 0x01, 0x00, + 0x09, 0x00, 0x00, 0x0a, 0x6c, 0x57, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x38, 0x61, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xac, 0x6e, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0xb0, 0x6e, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x70, 0x57, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x3c, 0x00, 0x78, 0x4a, + 0x01, 0x00, 0xe8, 0x59, 0x01, 0x00, 0x08, 0x00, + 0x00, 0xe3, 0xdc, 0x58, 0x01, 0x14, 0x4d, 0xfd, + 0x40, 0xe3, 0x2c, 0x59, 0x01, 0x14, 0x39, 0xfd, + 0x40, 0xe3, 0xc0, 0x58, 0x01, 0x00, 0x0e, 0x00, + 0x00, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x64, 0x73, 0x41, 0x00, 0x3d, 0x2e, + 0x44, 0xe2, 0x7c, 0x59, 0x01, 0x14, 0x3c, 0x00, + 0xb4, 0x4a, 0x01, 0x00, 0x9d, 0x2f, 0x44, 0xe3, + 0x5c, 0x57, 0x01, 0x00, 0x0e, 0x00, 0x00, 0xe2, + 0x79, 0x2e, 0x04, 0x00, 0x01, 0x00, 0x00, 0xdb, + 0xa0, 0x58, 0x01, 0x00, 0x02, 0x00, 0x00, 0xe3, + 0xa2, 0x58, 0x01, 0x00, 0x02, 0x00, 0x00, 0xe3, + 0xa0, 0x57, 0x01, 0x00, 0x0e, 0x00, 0x00, 0xe3, + 0xd1, 0x88, 0x01, 0x00, 0x01, 0x00, 0x00, 0xda, + 0x1d, 0x89, 0x01, 0x00, 0x04, 0x00, 0x00, 0xda, + 0x3c, 0x00, 0xf0, 0x4a, 0x01, 0x00, 0x95, 0x88, + 0x01, 0x00, 0x04, 0x00, 0x00, 0xdb, 0x31, 0x2f, + 0x04, 0x00, 0x0e, 0x00, 0x00, 0xd9, 0xc5, 0x2e, + 0x04, 0x00, 0x0e, 0x00, 0x00, 0xd9, 0x68, 0x6c, + 0x01, 0x01, 0x15, 0xd5, 0x40, 0xe2, 0xc0, 0x57, + 0x01, 0x00, 0x08, 0x00, 0x00, 0xe3, 0xc8, 0x57, + 0x01, 0x00, 0x34, 0x00, 0x00, 0xe3, 0x9c, 0x6c, + 0x01, 0x00, 0x08, 0x00, 0x00, 0xe3, 0xb0, 0x58, + 0x01, 0x03, 0x3c, 0x00, 0x2c, 0x4b, 0x01, 0x00, + 0xe9, 0xd4, 0x40, 0xe2, 0xbc, 0x58, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x9d, 0xa3, 0x00, 0x00, + 0x60, 0x00, 0x00, 0xd9, 0x70, 0x79, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x78, 0x79, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x7c, 0x5a, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x5d, 0x1c, 0x00, 0x00, + 0x11, 0x00, 0x00, 0xd9, 0x24, 0x6e, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x3c, 0x00, 0x68, 0x4b, + 0x01, 0x00, 0x18, 0x58, 0x01, 0x05, 0xd5, 0xd5, + 0x40, 0xe3, 0xfc, 0x57, 0x01, 0x00, 0x14, 0x00, + 0x00, 0xe3, 0x04, 0x8e, 0x01, 0x03, 0xe5, 0xd5, + 0x40, 0xe3, 0x00, 0x5b, 0x01, 0x00, 0x04, 0x00, + 0x00, 0xe2, 0x18, 0x5b, 0x01, 0x00, 0x40, 0x00, + 0x00, 0xe2, 0xd4, 0x67, 0x01, 0x00, 0x04, 0x00, + 0x00, 0xe2, 0x8d, 0x37, 0x00, 0x00, 0x04, 0x00, + 0x00, 0xdb, 0xbd, 0x36, 0x00, 0x00, 0x3c, 0x00, + 0xa4, 0x4b, 0x01, 0x00, 0x04, 0x00, 0x00, 0xdb, + 0xfc, 0x60, 0x01, 0x00, 0x02, 0x00, 0x00, 0xe2, + 0x90, 0x7d, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0x70, 0x69, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb0, 0x49, 0x01, 0x00, 0x1a, 0x00, 0x00, 0x0a, + 0x90, 0x4b, 0x01, 0x00, 0x06, 0x00, 0x00, 0x0a, + 0xa4, 0x58, 0x81, 0x00, 0x05, 0xfd, 0x40, 0xe3, + 0x3c, 0x00, 0xe0, 0x4b, 0x01, 0x00, 0x80, 0x4a, + 0x01, 0x00, 0x0c, 0x00, 0x00, 0x0a, 0x0c, 0x5a, + 0x81, 0x01, 0x25, 0x2d, 0x44, 0xe3, 0xe0, 0x4a, + 0x01, 0x00, 0x03, 0x00, 0x00, 0x0a, 0x18, 0x63, + 0x41, 0x00, 0xfd, 0xbb, 0x40, 0xe2, 0x08, 0x57, + 0x01, 0x00, 0x01, 0x00, 0x00, 0xe2, 0x9c, 0x48, + 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x4a, + 0x01, 0x00, 0x3c, 0x00, 0x1c, 0x4c, 0x01, 0x00, + 0x02, 0x00, 0x00, 0x0a, 0xcc, 0x74, 0x01, 0x00, + 0x03, 0x00, 0x00, 0xe3, 0x65, 0x73, 0x41, 0x00, + 0xa9, 0x2e, 0x44, 0xe2, 0xf6, 0x59, 0x01, 0x01, + 0xd1, 0x2c, 0x44, 0xe3, 0x08, 0x4b, 0x01, 0x00, + 0x04, 0x00, 0x00, 0x0a, 0x07, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x6a, 0x28, 0x4b, 0x01, 0x00, + 0x02, 0x00, 0x00, 0x0a, 0x88, 0x7d, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x3c, 0x00, 0x58, 0x4c, + 0x01, 0x00, 0x00, 0x75, 0x01, 0x04, 0x65, 0x6f, + 0x40, 0xe3, 0xbc, 0x78, 0x01, 0x00, 0x0e, 0x00, + 0x00, 0xe3, 0x38, 0x4b, 0x01, 0x00, 0x04, 0x00, + 0x00, 0x0a, 0x04, 0x57, 0x01, 0x00, 0x04, 0x00, + 0x00, 0x62, 0x58, 0x4b, 0x01, 0x00, 0x02, 0x00, + 0x00, 0x0a, 0x80, 0x4b, 0x01, 0x00, 0x02, 0x00, + 0x00, 0x0a, 0x68, 0x4b, 0x01, 0x00, 0x03, 0x00, + 0x00, 0x0a, 0x8c, 0x7d, 0x01, 0x00, 0x3c, 0x00, + 0x94, 0x4c, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0x39, 0x2d, 0x04, 0x00, 0x04, 0x00, 0x00, 0xdb, + 0x94, 0x7d, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x64, + 0xa8, 0x4c, 0x01, 0x00, 0x04, 0x00, 0x00, 0x0a, + 0x3c, 0x00, 0xd0, 0x4c, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x4c, + 0x01, 0x00, 0x01, 0x00, 0x00, 0x0a, 0xd0, 0x4c, + 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe7, 0x7a, + 0x01, 0x00, 0x01, 0x00, 0x00, 0xe2, 0xe8, 0x7a, + 0x01, 0x00, 0x01, 0x00, 0x00, 0xe2, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xed, 0x7a, + 0x01, 0x00, 0x3c, 0x00, 0x0c, 0x4d, 0x01, 0x00, + 0x01, 0x00, 0x00, 0xe2, 0xee, 0x7a, 0x01, 0x00, + 0x01, 0x00, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xf3, 0x7a, 0x01, 0x00, + 0x01, 0x00, 0x00, 0xe2, 0xf4, 0x7a, 0x01, 0x00, + 0x01, 0x00, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xf9, 0x7a, 0x01, 0x00, + 0x01, 0x00, 0x00, 0xe2, 0xfa, 0x7a, 0x01, 0x00, + 0x01, 0x00, 0x00, 0xe2, 0x3c, 0x00, 0x48, 0x4d, + 0x01, 0x00, 0xe8, 0x4c, 0x01, 0x00, 0x03, 0x00, + 0x00, 0x0a, 0x00, 0x4d, 0x01, 0x00, 0x03, 0x00, + 0x00, 0x0a, 0x18, 0x4d, 0x01, 0x00, 0x03, 0x00, + 0x00, 0x0a, 0x30, 0x4d, 0x01, 0x00, 0x03, 0x00, + 0x00, 0x0a, 0x90, 0x5c, 0x01, 0x00, 0x04, 0x00, + 0x00, 0xe2, 0x94, 0x5c, 0x01, 0x00, 0x04, 0x00, + 0x00, 0xe2, 0x98, 0x5c, 0x01, 0x00, 0x04, 0x00, + 0x00, 0xe2, 0x9c, 0x5c, 0x01, 0x00, 0x3c, 0x00, + 0x84, 0x4d, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0xa0, 0x5c, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0xa4, 0x5c, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0xa8, 0x5c, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0xac, 0x5c, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0xb0, 0x5c, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0xb4, 0x5c, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0xb8, 0x5c, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0x3c, 0x00, 0xc0, 0x4d, 0x01, 0x00, 0xbc, 0x5c, + 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, 0xc0, 0x5c, + 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, 0xc4, 0x5c, + 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, 0x90, 0x5c, + 0x01, 0x00, 0x38, 0x00, 0x00, 0xe3, 0x68, 0x4d, + 0x01, 0x00, 0x0e, 0x00, 0x00, 0x0a, 0xd8, 0x4d, + 0x01, 0x00, 0x02, 0x00, 0x00, 0xfa, 0x12, 0x61, + 0x81, 0x01, 0x31, 0xd5, 0x40, 0xe3, 0x06, 0x61, + 0x01, 0x00, 0x3c, 0x00, 0xfc, 0x4d, 0x01, 0x00, + 0x02, 0x00, 0x00, 0xe2, 0x0b, 0x61, 0x01, 0x00, + 0x01, 0x00, 0x00, 0xe3, 0x0f, 0x61, 0x01, 0x00, + 0x01, 0x00, 0x00, 0xe3, 0x08, 0x61, 0x01, 0x00, + 0x02, 0x00, 0x00, 0xe2, 0x50, 0x7b, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0x01, 0x00, + 0x0e, 0x00, 0x00, 0x64, 0x9c, 0x57, 0x01, 0x01, + 0x91, 0x88, 0x41, 0xe3, 0x3c, 0x00, 0x38, 0x4e, + 0x01, 0x00, 0x6e, 0x41, 0x67, 0x6f, 0xe2, 0x65, + 0x60, 0x69, 0x6f, 0x20, 0x41, 0x42, 0x00, 0x00, + 0x00, 0x00, 0xf0, 0x4d, 0x01, 0x00, 0x09, 0x00, + 0x00, 0x0a, 0x48, 0x4e, 0x01, 0x00, 0x01, 0x00, + 0x00, 0x0a, 0xe8, 0x4d, 0x01, 0x00, 0x01, 0x00, + 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x48, 0x4d, 0x01, 0x00, 0x04, 0x00, + 0x00, 0x0a, 0x28, 0x61, 0x01, 0x01, 0x3c, 0x00, + 0x74, 0x4e, 0x01, 0x00, 0xbd, 0xd5, 0x40, 0xe2, + 0x69, 0x61, 0x41, 0x00, 0x85, 0xd5, 0x40, 0xe2, + 0x30, 0x61, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0x34, 0x61, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0x3c, 0x61, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0x34, 0x61, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0x44, 0x61, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, + 0x3c, 0x00, 0xb0, 0x4e, 0x01, 0x00, 0x70, 0x4e, + 0x01, 0x00, 0x08, 0x00, 0x00, 0x0a, 0x18, 0x61, + 0x01, 0x00, 0x02, 0x00, 0x00, 0xe2, 0x1c, 0x61, + 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, 0x20, 0x61, + 0x01, 0x00, 0x02, 0x00, 0x00, 0xe2, 0x24, 0x61, + 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, 0xb8, 0x4e, + 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, 0xc8, 0x4e, + 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, 0xd8, 0x4e, + 0x01, 0x00, 0x3c, 0x00, 0xec, 0x4e, 0x01, 0x00, + 0x02, 0x00, 0x00, 0x0a, 0x96, 0x48, 0x01, 0x00, + 0x06, 0x00, 0x00, 0xe3, 0xe0, 0x62, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x6a, 0x9b, 0x7d, 0x01, 0x00, + 0x01, 0x00, 0x00, 0x62, 0x9c, 0x7d, 0x01, 0x00, + 0x02, 0x00, 0x00, 0x62, 0x60, 0x7c, 0x01, 0x00, + 0x04, 0x00, 0x00, 0xe2, 0x01, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x6a, 0x3c, 0x00, 0x28, 0x4f, + 0x01, 0x00, 0x2d, 0x63, 0x01, 0x00, 0x01, 0x00, + 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x49, 0xd5, 0x00, 0x00, 0x0e, 0x00, + 0x00, 0xd9, 0xf4, 0x67, 0x01, 0x00, 0x02, 0x00, + 0x00, 0x62, 0x46, 0x7d, 0x01, 0x00, 0x01, 0x00, + 0x00, 0x62, 0x9c, 0x7c, 0x01, 0x00, 0x04, 0x00, + 0x00, 0xe2, 0x98, 0x7c, 0x01, 0x00, 0x3c, 0x00, + 0x64, 0x4f, 0x01, 0x00, 0x02, 0x00, 0x00, 0x62, + 0xa0, 0x7c, 0x01, 0x00, 0x06, 0x00, 0x00, 0x62, + 0x58, 0x7c, 0x01, 0x00, 0x02, 0x00, 0x00, 0x62, + 0x64, 0x7c, 0x01, 0x00, 0x06, 0x00, 0x00, 0x62, + 0x5a, 0x7c, 0x01, 0x00, 0x02, 0x00, 0x00, 0x62, + 0x6a, 0x7c, 0x01, 0x00, 0x06, 0x00, 0x00, 0x62, + 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, + 0xe4, 0x62, 0x01, 0x00, 0x04, 0x00, 0x00, 0xe2, + 0x3c, 0x00, 0xa0, 0x4f, 0x01, 0x00, 0xe8, 0x62, + 0x01, 0x00, 0x03, 0x00, 0x00, 0xe2, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, 0x01, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xdc, 0x4f, 0x01, 0x00, + 0x04, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x6a, 0x3c, 0x00, 0x18, 0x50, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x6a, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x6a, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x6a, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x6a, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x6a, 0xf0, 0x4e, 0x01, 0x00, 0x2a, 0x00, + 0x00, 0x0a, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x6a, 0x75, 0x2a, 0x01, 0x00, 0x3c, 0x00, + 0x54, 0x50, 0x01, 0x00, 0x0c, 0x00, 0x00, 0xdb, + 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, + 0x75, 0x2a, 0x01, 0x00, 0x0c, 0x00, 0x00, 0xdb, + 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, + 0x75, 0x2a, 0x01, 0x00, 0x0c, 0x00, 0x00, 0xdb, + 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, + 0x75, 0x2a, 0x01, 0x00, 0x0c, 0x00, 0x00, 0xdb, + 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, + 0x3c, 0x00, 0x90, 0x50, 0x01, 0x00, 0x75, 0x2a, + 0x01, 0x00, 0x0c, 0x00, 0x00, 0xdb, 0x06, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, 0x75, 0x2a, + 0x01, 0x00, 0x0c, 0x00, 0x00, 0xdb, 0x07, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, 0x75, 0x2a, + 0x01, 0x00, 0x0c, 0x00, 0x00, 0xdb, 0x08, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x6a, 0x75, 0x2a, + 0x01, 0x00, 0x0c, 0x00, 0x00, 0xdb, 0x09, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xcc, 0x50, 0x01, 0x00, + 0x04, 0x00, 0x00, 0x6a, 0x75, 0x2a, 0x01, 0x00, + 0x0c, 0x00, 0x00, 0xdb, 0x0a, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x6a, 0x75, 0x2a, 0x01, 0x00, + 0x0c, 0x00, 0x00, 0xdb, 0x0b, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x6a, 0x75, 0x2a, 0x01, 0x00, + 0x0c, 0x00, 0x00, 0xdb, 0x0c, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x6a, 0x75, 0x2a, 0x01, 0x00, + 0x0c, 0x00, 0x00, 0xdb, 0x3c, 0x00, 0x08, 0x51, + 0x01, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x6a, 0x75, 0x2a, 0x01, 0x00, 0x0c, 0x00, + 0x00, 0xdb, 0x0e, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x6a, 0x75, 0x2a, 0x01, 0x00, 0x0c, 0x00, + 0x00, 0xdb, 0x48, 0x50, 0x01, 0x00, 0x02, 0x00, + 0x00, 0x0a, 0x58, 0x50, 0x01, 0x00, 0x02, 0x00, + 0x00, 0x0a, 0x68, 0x50, 0x01, 0x00, 0x02, 0x00, + 0x00, 0x0a, 0x78, 0x50, 0x01, 0x00, 0x3c, 0x00, + 0x44, 0x51, 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, + 0x88, 0x50, 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, + 0x98, 0x50, 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, + 0xa8, 0x50, 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, + 0xb8, 0x50, 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, + 0xc8, 0x50, 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, + 0xd8, 0x50, 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, + 0xe8, 0x50, 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, + 0x3c, 0x00, 0x80, 0x51, 0x01, 0x00, 0xf8, 0x50, + 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, 0x08, 0x51, + 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, 0x18, 0x51, + 0x01, 0x00, 0x02, 0x00, 0x00, 0x0a, 0x40, 0x50, + 0x01, 0x00, 0x01, 0x00, 0x00, 0x0a, 0xe8, 0x4e, + 0x01, 0x00, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x4e, + 0x01, 0x00, 0x3c, 0x00, 0xbc, 0x51, 0x01, 0x00, + 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x28, 0x51, 0x01, 0x00, + 0x0e, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xf8, 0x51, + 0x01, 0x00, 0x98, 0x51, 0x01, 0x00, 0x0c, 0x00, + 0x00, 0x0a, 0x50, 0x4e, 0x01, 0x00, 0x04, 0x00, + 0x00, 0x0a, 0xe0, 0x4c, 0x01, 0x00, 0x01, 0x00, + 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xc0, 0x4b, 0x01, 0x00, 0x1d, 0x00, + 0x00, 0x0a, 0xf8, 0x51, 0x01, 0x00, 0x05, 0x00, + 0x00, 0x0a, 0x24, 0x80, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x1d, 0x80, 0x07, 0x00, 0x3c, 0x00, + 0x34, 0x52, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x2a, 0x80, 0x07, 0x00, 0x5c, 0x00, 0x00, 0x00, + 0x24, 0x80, 0x07, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x1d, 0x80, 0x07, 0x00, 0x20, 0x00, 0x00, 0x00, + 0x2a, 0x80, 0x07, 0x00, 0x6a, 0x00, 0x00, 0x00, + 0x24, 0x80, 0x07, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x1d, 0x80, 0x07, 0x00, 0x20, 0x00, 0x00, 0x00, + 0x2a, 0x80, 0x07, 0x00, 0x6a, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x70, 0x52, 0x01, 0x00, 0x00, 0x01, + 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, + 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, + 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, + 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x01, 0x63, + 0x00, 0x00, 0xa1, 0x63, 0x00, 0x00, 0xc5, 0x63, + 0x00, 0x00, 0xb1, 0x62, 0x00, 0x00, 0xc5, 0x63, + 0x00, 0x00, 0x21, 0x63, 0x00, 0x00, 0x4d, 0x63, + 0x00, 0x00, 0x3c, 0x00, 0xac, 0x52, 0x01, 0x00, + 0xa1, 0x63, 0x00, 0x00, 0x01, 0x63, 0x00, 0x00, + 0xa1, 0x63, 0x00, 0x00, 0x06, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x03, 0x05, 0x06, 0x07, 0x08, 0x09, + 0x0a, 0x0a, 0x0c, 0x0d, 0x0e, 0x0f, 0x0f, 0x10, + 0x11, 0x00, 0x00, 0x00, 0xa5, 0xc6, 0x84, 0xf8, + 0x99, 0xee, 0x8d, 0xf6, 0x0d, 0xff, 0xbd, 0xd6, + 0xb1, 0xde, 0x54, 0x91, 0x3c, 0x00, 0xe8, 0x52, + 0x01, 0x00, 0x50, 0x60, 0x03, 0x02, 0xa9, 0xce, + 0x7d, 0x56, 0x19, 0xe7, 0x62, 0xb5, 0xe6, 0x4d, + 0x9a, 0xec, 0x45, 0x8f, 0x9d, 0x1f, 0x40, 0x89, + 0x87, 0xfa, 0x15, 0xef, 0xeb, 0xb2, 0xc9, 0x8e, + 0x0b, 0xfb, 0xec, 0x41, 0x67, 0xb3, 0xfd, 0x5f, + 0xea, 0x45, 0xbf, 0x23, 0xf7, 0x53, 0x96, 0xe4, + 0x5b, 0x9b, 0xc2, 0x75, 0x1c, 0xe1, 0xae, 0x3d, + 0x6a, 0x4c, 0x5a, 0x6c, 0x41, 0x7e, 0x3c, 0x00, + 0x24, 0x53, 0x01, 0x00, 0x02, 0xf5, 0x4f, 0x83, + 0x5c, 0x68, 0xf4, 0x51, 0x34, 0xd1, 0x08, 0xf9, + 0x93, 0xe2, 0x73, 0xab, 0x53, 0x62, 0x3f, 0x2a, + 0x0c, 0x08, 0x52, 0x95, 0x65, 0x46, 0x5e, 0x9d, + 0x28, 0x30, 0xa1, 0x37, 0x0f, 0x0a, 0xb5, 0x2f, + 0x09, 0x0e, 0x36, 0x24, 0x9b, 0x1b, 0x3d, 0xdf, + 0x26, 0xcd, 0x69, 0x4e, 0xcd, 0x7f, 0x9f, 0xea, + 0x1b, 0x12, 0x9e, 0x1d, 0x74, 0x58, 0x2e, 0x34, + 0x3c, 0x00, 0x60, 0x53, 0x01, 0x00, 0x2d, 0x36, + 0xb2, 0xdc, 0xee, 0xb4, 0xfb, 0x5b, 0xf6, 0xa4, + 0x4d, 0x76, 0x61, 0xb7, 0xce, 0x7d, 0x7b, 0x52, + 0x3e, 0xdd, 0x71, 0x5e, 0x97, 0x13, 0xf5, 0xa6, + 0x68, 0xb9, 0x00, 0x00, 0x2c, 0xc1, 0x60, 0x40, + 0x1f, 0xe3, 0xc8, 0x79, 0xed, 0xb6, 0xbe, 0xd4, + 0x46, 0x8d, 0xd9, 0x67, 0x4b, 0x72, 0xde, 0x94, + 0xd4, 0x98, 0xe8, 0xb0, 0x4a, 0x85, 0x6b, 0xbb, + 0x2a, 0xc5, 0x3c, 0x00, 0x9c, 0x53, 0x01, 0x00, + 0xe5, 0x4f, 0x16, 0xed, 0xc5, 0x86, 0xd7, 0x9a, + 0x55, 0x66, 0x94, 0x11, 0xcf, 0x8a, 0x10, 0xe9, + 0x06, 0x04, 0x81, 0xfe, 0xf0, 0xa0, 0x44, 0x78, + 0xba, 0x25, 0xe3, 0x4b, 0xf3, 0xa2, 0xfe, 0x5d, + 0xc0, 0x80, 0x8a, 0x05, 0xad, 0x3f, 0xbc, 0x21, + 0x48, 0x70, 0x04, 0xf1, 0xdf, 0x63, 0xc1, 0x77, + 0x75, 0xaf, 0x63, 0x42, 0x30, 0x20, 0x1a, 0xe5, + 0x0e, 0xfd, 0x6d, 0xbf, 0x3c, 0x00, 0xd8, 0x53, + 0x01, 0x00, 0x4c, 0x81, 0x14, 0x18, 0x35, 0x26, + 0x2f, 0xc3, 0xe1, 0xbe, 0xa2, 0x35, 0xcc, 0x88, + 0x39, 0x2e, 0x57, 0x93, 0xf2, 0x55, 0x82, 0xfc, + 0x47, 0x7a, 0xac, 0xc8, 0xe7, 0xba, 0x2b, 0x32, + 0x95, 0xe6, 0xa0, 0xc0, 0x98, 0x19, 0xd1, 0x9e, + 0x7f, 0xa3, 0x66, 0x44, 0x7e, 0x54, 0xab, 0x3b, + 0x83, 0x0b, 0xca, 0x8c, 0x29, 0xc7, 0xd3, 0x6b, + 0x3c, 0x28, 0x79, 0xa7, 0xe2, 0xbc, 0x3c, 0x00, + 0x14, 0x54, 0x01, 0x00, 0x1d, 0x16, 0x76, 0xad, + 0x3b, 0xdb, 0x56, 0x64, 0x4e, 0x74, 0x1e, 0x14, + 0xdb, 0x92, 0x0a, 0x0c, 0x6c, 0x48, 0xe4, 0xb8, + 0x5d, 0x9f, 0x6e, 0xbd, 0xef, 0x43, 0xa6, 0xc4, + 0xa8, 0x39, 0xa4, 0x31, 0x37, 0xd3, 0x8b, 0xf2, + 0x32, 0xd5, 0x43, 0x8b, 0x59, 0x6e, 0xb7, 0xda, + 0x8c, 0x01, 0x64, 0xb1, 0xd2, 0x9c, 0xe0, 0x49, + 0xb4, 0xd8, 0xfa, 0xac, 0x07, 0xf3, 0x25, 0xcf, + 0x3c, 0x00, 0x50, 0x54, 0x01, 0x00, 0xaf, 0xca, + 0x8e, 0xf4, 0xe9, 0x47, 0x18, 0x10, 0xd5, 0x6f, + 0x88, 0xf0, 0x6f, 0x4a, 0x72, 0x5c, 0x24, 0x38, + 0xf1, 0x57, 0xc7, 0x73, 0x51, 0x97, 0x23, 0xcb, + 0x7c, 0xa1, 0x9c, 0xe8, 0x21, 0x3e, 0xdd, 0x96, + 0xdc, 0x61, 0x86, 0x0d, 0x85, 0x0f, 0x90, 0xe0, + 0x42, 0x7c, 0xc4, 0x71, 0xaa, 0xcc, 0xd8, 0x90, + 0x05, 0x06, 0x01, 0xf7, 0x12, 0x1c, 0xa3, 0xc2, + 0x5f, 0x6a, 0x3c, 0x00, 0x8c, 0x54, 0x01, 0x00, + 0xf9, 0xae, 0xd0, 0x69, 0x91, 0x17, 0x58, 0x99, + 0x27, 0x3a, 0xb9, 0x27, 0x38, 0xd9, 0x13, 0xeb, + 0xb3, 0x2b, 0x33, 0x22, 0xbb, 0xd2, 0x70, 0xa9, + 0x89, 0x07, 0xa7, 0x33, 0xb6, 0x2d, 0x22, 0x3c, + 0x92, 0x15, 0x20, 0xc9, 0x49, 0x87, 0xff, 0xaa, + 0x78, 0x50, 0x7a, 0xa5, 0x8f, 0x03, 0xf8, 0x59, + 0x80, 0x09, 0x17, 0x1a, 0xda, 0x65, 0x31, 0xd7, + 0xc6, 0x84, 0xb8, 0xd0, 0x3c, 0x00, 0xc8, 0x54, + 0x01, 0x00, 0xc3, 0x82, 0xb0, 0x29, 0x77, 0x5a, + 0x11, 0x1e, 0xcb, 0x7b, 0xfc, 0xa8, 0xd6, 0x6d, + 0x3a, 0x2c, 0xc6, 0xa5, 0xf8, 0x84, 0xee, 0x99, + 0xf6, 0x8d, 0xff, 0x0d, 0xd6, 0xbd, 0xde, 0xb1, + 0x91, 0x54, 0x60, 0x50, 0x02, 0x03, 0xce, 0xa9, + 0x56, 0x7d, 0xe7, 0x19, 0xb5, 0x62, 0x4d, 0xe6, + 0xec, 0x9a, 0x8f, 0x45, 0x1f, 0x9d, 0x89, 0x40, + 0xfa, 0x87, 0xef, 0x15, 0xb2, 0xeb, 0x3c, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x8e, 0xc9, 0xfb, 0x0b, + 0x41, 0xec, 0xb3, 0x67, 0x5f, 0xfd, 0x45, 0xea, + 0x23, 0xbf, 0x53, 0xf7, 0xe4, 0x96, 0x9b, 0x5b, + 0x75, 0xc2, 0xe1, 0x1c, 0x3d, 0xae, 0x4c, 0x6a, + 0x6c, 0x5a, 0x7e, 0x41, 0xf5, 0x02, 0x83, 0x4f, + 0x68, 0x5c, 0x51, 0xf4, 0xd1, 0x34, 0xf9, 0x08, + 0xe2, 0x93, 0xab, 0x73, 0x62, 0x53, 0x2a, 0x3f, + 0x08, 0x0c, 0x95, 0x52, 0x46, 0x65, 0x9d, 0x5e, + 0x3c, 0x00, 0x40, 0x55, 0x01, 0x00, 0x30, 0x28, + 0x37, 0xa1, 0x0a, 0x0f, 0x2f, 0xb5, 0x0e, 0x09, + 0x24, 0x36, 0x1b, 0x9b, 0xdf, 0x3d, 0xcd, 0x26, + 0x4e, 0x69, 0x7f, 0xcd, 0xea, 0x9f, 0x12, 0x1b, + 0x1d, 0x9e, 0x58, 0x74, 0x34, 0x2e, 0x36, 0x2d, + 0xdc, 0xb2, 0xb4, 0xee, 0x5b, 0xfb, 0xa4, 0xf6, + 0x76, 0x4d, 0xb7, 0x61, 0x7d, 0xce, 0x52, 0x7b, + 0xdd, 0x3e, 0x5e, 0x71, 0x13, 0x97, 0xa6, 0xf5, + 0xb9, 0x68, 0x3c, 0x00, 0x7c, 0x55, 0x01, 0x00, + 0x00, 0x00, 0xc1, 0x2c, 0x40, 0x60, 0xe3, 0x1f, + 0x79, 0xc8, 0xb6, 0xed, 0xd4, 0xbe, 0x8d, 0x46, + 0x67, 0xd9, 0x72, 0x4b, 0x94, 0xde, 0x98, 0xd4, + 0xb0, 0xe8, 0x85, 0x4a, 0xbb, 0x6b, 0xc5, 0x2a, + 0x4f, 0xe5, 0xed, 0x16, 0x86, 0xc5, 0x9a, 0xd7, + 0x66, 0x55, 0x11, 0x94, 0x8a, 0xcf, 0xe9, 0x10, + 0x04, 0x06, 0xfe, 0x81, 0xa0, 0xf0, 0x78, 0x44, + 0x25, 0xba, 0x4b, 0xe3, 0x3c, 0x00, 0xb8, 0x55, + 0x01, 0x00, 0xa2, 0xf3, 0x5d, 0xfe, 0x80, 0xc0, + 0x05, 0x8a, 0x3f, 0xad, 0x21, 0xbc, 0x70, 0x48, + 0xf1, 0x04, 0x63, 0xdf, 0x77, 0xc1, 0xaf, 0x75, + 0x42, 0x63, 0x20, 0x30, 0xe5, 0x1a, 0xfd, 0x0e, + 0xbf, 0x6d, 0x81, 0x4c, 0x18, 0x14, 0x26, 0x35, + 0xc3, 0x2f, 0xbe, 0xe1, 0x35, 0xa2, 0x88, 0xcc, + 0x2e, 0x39, 0x93, 0x57, 0x55, 0xf2, 0xfc, 0x82, + 0x7a, 0x47, 0xc8, 0xac, 0xba, 0xe7, 0x3c, 0x00, + 0xf4, 0x55, 0x01, 0x00, 0x32, 0x2b, 0xe6, 0x95, + 0xc0, 0xa0, 0x19, 0x98, 0x9e, 0xd1, 0xa3, 0x7f, + 0x44, 0x66, 0x54, 0x7e, 0x3b, 0xab, 0x0b, 0x83, + 0x8c, 0xca, 0xc7, 0x29, 0x6b, 0xd3, 0x28, 0x3c, + 0xa7, 0x79, 0xbc, 0xe2, 0x16, 0x1d, 0xad, 0x76, + 0xdb, 0x3b, 0x64, 0x56, 0x74, 0x4e, 0x14, 0x1e, + 0x92, 0xdb, 0x0c, 0x0a, 0x48, 0x6c, 0xb8, 0xe4, + 0x9f, 0x5d, 0xbd, 0x6e, 0x43, 0xef, 0xc4, 0xa6, + 0x3c, 0x00, 0x30, 0x56, 0x01, 0x00, 0x39, 0xa8, + 0x31, 0xa4, 0xd3, 0x37, 0xf2, 0x8b, 0xd5, 0x32, + 0x8b, 0x43, 0x6e, 0x59, 0xda, 0xb7, 0x01, 0x8c, + 0xb1, 0x64, 0x9c, 0xd2, 0x49, 0xe0, 0xd8, 0xb4, + 0xac, 0xfa, 0xf3, 0x07, 0xcf, 0x25, 0xca, 0xaf, + 0xf4, 0x8e, 0x47, 0xe9, 0x10, 0x18, 0x6f, 0xd5, + 0xf0, 0x88, 0x4a, 0x6f, 0x5c, 0x72, 0x38, 0x24, + 0x57, 0xf1, 0x73, 0xc7, 0x97, 0x51, 0xcb, 0x23, + 0xa1, 0x7c, 0x3c, 0x00, 0x6c, 0x56, 0x01, 0x00, + 0xe8, 0x9c, 0x3e, 0x21, 0x96, 0xdd, 0x61, 0xdc, + 0x0d, 0x86, 0x0f, 0x85, 0xe0, 0x90, 0x7c, 0x42, + 0x71, 0xc4, 0xcc, 0xaa, 0x90, 0xd8, 0x06, 0x05, + 0xf7, 0x01, 0x1c, 0x12, 0xc2, 0xa3, 0x6a, 0x5f, + 0xae, 0xf9, 0x69, 0xd0, 0x17, 0x91, 0x99, 0x58, + 0x3a, 0x27, 0x27, 0xb9, 0xd9, 0x38, 0xeb, 0x13, + 0x2b, 0xb3, 0x22, 0x33, 0xd2, 0xbb, 0xa9, 0x70, + 0x07, 0x89, 0x33, 0xa7, 0x3c, 0x00, 0xa8, 0x56, + 0x01, 0x00, 0x2d, 0xb6, 0x3c, 0x22, 0x15, 0x92, + 0xc9, 0x20, 0x87, 0x49, 0xaa, 0xff, 0x50, 0x78, + 0xa5, 0x7a, 0x03, 0x8f, 0x59, 0xf8, 0x09, 0x80, + 0x1a, 0x17, 0x65, 0xda, 0xd7, 0x31, 0x84, 0xc6, + 0xd0, 0xb8, 0x82, 0xc3, 0x29, 0xb0, 0x5a, 0x77, + 0x1e, 0x11, 0x7b, 0xcb, 0xa8, 0xfc, 0x6d, 0xd6, + 0x2c, 0x3a, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xe4, 0x56, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x72, 0x65, 0x71, 0x45, 0x72, 0x72, 0x52, + 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x20, 0x57, 0x01, 0x00, 0xc4, 0x8e, + 0x01, 0x00, 0x24, 0x9a, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x24, 0x9a, + 0x01, 0x00, 0xa4, 0xb2, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0xa4, 0xb2, + 0x01, 0x00, 0x14, 0xc8, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x10, 0x20, + 0x30, 0x40, 0x50, 0xbb, 0x30, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x5c, 0x57, 0x01, 0x00, + 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e, 0x20, 0x22, + 0x24, 0x26, 0x28, 0x2a, 0x2b, 0x2c, 0x01, 0x00, + 0x70, 0x17, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0d, 0x25, 0x00, 0x00, 0x41, 0x3f, 0x01, 0x00, + 0x65, 0x29, 0x01, 0x00, 0x0d, 0x25, 0x00, 0x00, + 0xf5, 0x5e, 0x00, 0x00, 0x41, 0x3f, 0x01, 0x00, + 0x41, 0x3f, 0x01, 0x00, 0x02, 0x04, 0x0b, 0x0c, + 0x12, 0x16, 0x18, 0x24, 0x3c, 0x00, 0x98, 0x57, + 0x01, 0x00, 0x30, 0x48, 0x60, 0x6c, 0x01, 0x00, + 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x02, 0x10, 0x12, 0x11, 0x00, + 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xd4, 0x57, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xe0, 0x93, 0x04, 0x00, + 0x40, 0x42, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0xdf, 0x40, 0xcf, 0xfd, 0x00, 0x40, 0x83, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, + 0x3c, 0x00, 0x10, 0x58, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x40, 0x00, 0x80, 0x81, 0x00, 0x00, + 0x80, 0x00, 0xbf, 0xff, 0x7f, 0x7e, 0x01, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x78, 0x6f, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x6f, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x6f, + 0x01, 0x00, 0x3c, 0x00, 0x4c, 0x58, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x70, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x78, 0x70, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xb8, 0x70, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xf8, 0x70, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x71, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x78, 0x71, 0x01, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x90, 0x71, 0x01, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x3c, 0x00, 0x88, 0x58, + 0x01, 0x00, 0xa8, 0x71, 0x01, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x05, 0x0a, 0x01, 0x06, 0x0b, + 0x02, 0x07, 0x0c, 0x03, 0x08, 0x0d, 0x04, 0x09, + 0x00, 0x00, 0x03, 0x03, 0x01, 0x01, 0x00, 0x04, + 0x00, 0x04, 0x04, 0x06, 0x16, 0x1e, 0x1f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, + 0xff, 0xff, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, + 0xc4, 0x58, 0x01, 0x00, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, + 0x61, 0x8b, 0x4a, 0x00, 0x61, 0x8f, 0x4a, 0x00, + 0x61, 0x8b, 0x4a, 0x00, 0x05, 0xe3, 0xc0, 0x00, + 0x05, 0xcb, 0xc0, 0x00, 0x05, 0xbb, 0xc0, 0x00, + 0x85, 0xba, 0xc0, 0x00, 0x85, 0xa2, 0xc0, 0x00, + 0x85, 0x92, 0xc0, 0x00, 0x85, 0x8a, 0xc0, 0x00, + 0x85, 0x7a, 0xc0, 0x00, 0x45, 0x89, 0xc0, 0x00, + 0x3c, 0x00, 0x00, 0x59, 0x01, 0x00, 0x45, 0x71, + 0xc0, 0x00, 0x45, 0x69, 0xc0, 0x00, 0x45, 0x61, + 0xc0, 0x00, 0x45, 0x59, 0xc0, 0x00, 0x45, 0x51, + 0xc0, 0x00, 0x45, 0x49, 0xc0, 0x00, 0x45, 0x41, + 0xc0, 0x00, 0x45, 0x39, 0xc0, 0x00, 0x45, 0x31, + 0xc0, 0x00, 0x45, 0x29, 0xc0, 0x00, 0x45, 0x21, + 0xc0, 0x00, 0x60, 0x2d, 0x06, 0x00, 0x60, 0x2d, + 0x06, 0x00, 0x60, 0x2d, 0x06, 0x00, 0x60, 0x2d, + 0x06, 0x00, 0x3c, 0x00, 0x3c, 0x59, 0x01, 0x00, + 0x60, 0x2d, 0x06, 0x00, 0x60, 0x28, 0x06, 0x00, + 0x50, 0x26, 0x06, 0x00, 0x50, 0x21, 0x06, 0x00, + 0x50, 0x1f, 0x06, 0x00, 0x50, 0x1c, 0x06, 0x00, + 0x50, 0x1a, 0x06, 0x00, 0x50, 0x18, 0x06, 0x00, + 0x50, 0x16, 0x06, 0x00, 0x50, 0x14, 0x06, 0x00, + 0x50, 0x12, 0x06, 0x00, 0x50, 0x10, 0x06, 0x00, + 0x50, 0x0e, 0x06, 0x00, 0x50, 0x0c, 0x06, 0x00, + 0x50, 0x0a, 0x06, 0x00, 0x3c, 0x00, 0x78, 0x59, + 0x01, 0x00, 0x2b, 0x0b, 0x06, 0x00, 0x1d, 0x75, + 0xc0, 0x00, 0x1d, 0x75, 0xc0, 0x00, 0x1d, 0x75, + 0xc0, 0x00, 0x1d, 0x75, 0xc0, 0x00, 0x1d, 0x75, + 0xc0, 0x00, 0x1d, 0x75, 0xc0, 0x00, 0x1d, 0x6d, + 0xc0, 0x00, 0xdd, 0x5b, 0xc0, 0x00, 0xdd, 0x4b, + 0xc0, 0x00, 0xdd, 0x43, 0xc0, 0x00, 0xdd, 0x3b, + 0xc0, 0x00, 0xdd, 0x33, 0xc0, 0x00, 0xdd, 0x2b, + 0xc0, 0x00, 0xdd, 0x23, 0xc0, 0x00, 0x3c, 0x00, + 0xb4, 0x59, 0x01, 0x00, 0xdd, 0x1b, 0xc0, 0x00, + 0xdd, 0x13, 0xc0, 0x00, 0xdd, 0x13, 0xc0, 0x00, + 0xdd, 0x13, 0xc0, 0x00, 0xdd, 0x13, 0xc0, 0x00, + 0xdd, 0x13, 0xc0, 0x00, 0x05, 0x05, 0x05, 0x04, + 0x04, 0x03, 0x03, 0x02, 0x02, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x05, 0x05, 0x05, 0x04, 0x04, 0x03, + 0x03, 0x02, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x88, 0x13, 0x00, 0x00, + 0x3c, 0x00, 0xf0, 0x59, 0x01, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x80, 0x00, 0x5b, 0x00, 0x40, 0x02, + 0xe0, 0xfd, 0xf2, 0x00, 0xb8, 0xfc, 0xa4, 0x01, + 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0f, 0x00, + 0x00, 0x00, 0x03, 0x0b, 0x9f, 0x5f, 0x07, 0x01, + 0x2a, 0x04, 0x21, 0x04, 0x17, 0x04, 0x0e, 0x04, + 0x04, 0x04, 0xfb, 0x03, 0xf1, 0x03, 0xe8, 0x03, + 0xc9, 0x03, 0xaa, 0x03, 0x8a, 0x03, 0x6b, 0x03, + 0x4c, 0x03, 0x3c, 0x00, 0x2c, 0x5a, 0x01, 0x00, + 0x2d, 0x03, 0x0e, 0x03, 0xee, 0x02, 0xec, 0x02, + 0x01, 0x03, 0x16, 0x03, 0x2b, 0x03, 0x40, 0x03, + 0x55, 0x03, 0x6a, 0x03, 0x7f, 0x03, 0x94, 0x03, + 0xa9, 0x03, 0xbe, 0x03, 0xd3, 0x03, 0xe8, 0x03, + 0xbe, 0x03, 0x94, 0x03, 0x6a, 0x03, 0x00, 0x02, + 0x04, 0x06, 0x07, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x00, 0x03, 0x3c, 0x00, 0x68, 0x5a, + 0x01, 0x00, 0x05, 0x08, 0x0b, 0x0e, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xa4, 0x5a, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xe0, 0x5a, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x1c, 0x5b, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x58, 0x5b, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x94, 0x5b, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xd0, 0x5b, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x0c, 0x5c, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x48, 0x5c, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x84, 0x5c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xc0, 0x5c, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xfc, 0x5c, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x38, 0x5d, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x74, 0x5d, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xb0, 0x5d, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xec, 0x5d, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x28, 0x5e, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x64, 0x5e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xa0, 0x5e, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xdc, 0x5e, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x18, 0x5f, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x54, 0x5f, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x90, 0x5f, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xcc, 0x5f, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x08, 0x60, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x44, 0x60, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x80, 0x60, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xbc, 0x60, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xf8, 0x60, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x34, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x70, 0x61, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xac, 0x61, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xe8, 0x61, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x24, 0x62, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x60, 0x62, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x9c, 0x62, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xd8, 0x62, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x14, 0x63, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x50, 0x63, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x8c, 0x63, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xc8, 0x63, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0x64, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x7c, 0x64, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xb8, 0x64, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xf4, 0x64, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x30, 0x65, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x6c, 0x65, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xa8, 0x65, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xe4, 0x65, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x20, 0x66, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x5c, 0x66, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x98, 0x66, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xd4, 0x66, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x10, 0x67, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x4c, 0x67, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x88, 0x67, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xc4, 0x67, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0x68, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x68, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x78, 0x68, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xb4, 0x68, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xf0, 0x68, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x2c, 0x69, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x68, 0x69, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xa4, 0x69, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xe0, 0x69, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x1c, 0x6a, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x58, 0x6a, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x94, 0x6a, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xd0, 0x6a, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x0c, 0x6b, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x48, 0x6b, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x84, 0x6b, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xc0, 0x6b, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xfc, 0x6b, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x38, 0x6c, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x74, 0x6c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xb0, 0x6c, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xec, 0x6c, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x28, 0x6d, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x64, 0x6d, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xa0, 0x6d, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xdc, 0x6d, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x18, 0x6e, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x54, 0x6e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x90, 0x6e, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xcc, 0x6e, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x08, 0x6f, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x44, 0x6f, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x80, 0x6f, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xbc, 0x6f, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xf8, 0x6f, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x34, 0x70, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x70, 0x70, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xac, 0x70, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xe8, 0x70, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x24, 0x71, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x60, 0x71, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x9c, 0x71, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xd8, 0x71, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x14, 0x72, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x50, 0x72, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x8c, 0x72, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xc8, 0x72, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0x73, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x7c, 0x73, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xb8, 0x73, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xf4, 0x73, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x30, 0x74, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x6c, 0x74, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xa8, 0x74, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xe4, 0x74, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x20, 0x75, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x5c, 0x75, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x98, 0x75, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xd4, 0x75, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x10, 0x76, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x4c, 0x76, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x88, 0x76, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xc4, 0x76, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0x77, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x77, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x78, 0x77, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xb4, 0x77, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xf0, 0x77, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x2c, 0x78, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x68, 0x78, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xa4, 0x78, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xe0, 0x78, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x1c, 0x79, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x58, 0x79, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x94, 0x79, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xd0, 0x79, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x0c, 0x7a, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x48, 0x7a, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x84, 0x7a, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xc0, 0x7a, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xfc, 0x7a, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x38, 0x7b, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x74, 0x7b, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xb0, 0x7b, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xec, 0x7b, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x28, 0x7c, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x64, 0x7c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xa0, 0x7c, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xdc, 0x7c, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x18, 0x7d, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x54, 0x7d, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x90, 0x7d, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xcc, 0x7d, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x08, 0x7e, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x44, 0x7e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x80, 0x7e, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xbc, 0x7e, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xf8, 0x7e, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x34, 0x7f, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x70, 0x7f, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xac, 0x7f, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xe8, 0x7f, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x70, 0xb5, 0x01, 0x25, 0x07, 0x4e, + 0xad, 0x03, 0x75, 0x61, 0x0a, 0x20, 0xfa, 0xf7, + 0x6c, 0xff, 0x30, 0x68, 0x80, 0x03, 0xc4, 0x0f, + 0xb5, 0x61, 0x0a, 0x20, 0xfa, 0xf7, 0x65, 0xff, + 0x20, 0x1c, 0x70, 0xbd, 0x00, 0x00, 0x3c, 0x00, + 0x24, 0x80, 0x01, 0x00, 0x10, 0x00, 0x07, 0x00, + 0x70, 0xb5, 0x01, 0x25, 0x6d, 0x04, 0x00, 0x28, + 0x10, 0x4c, 0x01, 0xd0, 0x65, 0x61, 0x00, 0xe0, + 0xa5, 0x61, 0x60, 0x68, 0x28, 0x43, 0x60, 0x60, + 0xa0, 0x68, 0x28, 0x43, 0xa0, 0x60, 0x0a, 0x20, + 0xfa, 0xf7, 0x4e, 0xff, 0x01, 0x26, 0xb6, 0x03, + 0x66, 0x61, 0x0a, 0x20, 0xfa, 0xf7, 0x48, 0xff, + 0xa6, 0x61, 0x01, 0x20, 0xfa, 0xf7, 0x44, 0xff, + 0x3c, 0x00, 0x60, 0x80, 0x01, 0x00, 0xa0, 0x68, + 0xa8, 0x43, 0xa0, 0x60, 0x60, 0x68, 0x28, 0x43, + 0x60, 0x60, 0x0a, 0x20, 0xfa, 0xf7, 0x3b, 0xff, + 0x70, 0xbd, 0x10, 0x00, 0x07, 0x00, 0x70, 0xb5, + 0x01, 0x25, 0x10, 0x4c, 0x6d, 0x04, 0x65, 0x61, + 0x60, 0x68, 0x28, 0x43, 0x60, 0x60, 0xa0, 0x68, + 0x28, 0x43, 0xa0, 0x60, 0xee, 0x08, 0xa6, 0x61, + 0x0a, 0x20, 0xfa, 0xf7, 0x28, 0xff, 0x66, 0x61, + 0x0a, 0x20, 0x3c, 0x00, 0x9c, 0x80, 0x01, 0x00, + 0xfa, 0xf7, 0x24, 0xff, 0xa5, 0x61, 0x0a, 0x20, + 0xfa, 0xf7, 0x20, 0xff, 0xa6, 0x61, 0x0a, 0x20, + 0xfa, 0xf7, 0x1c, 0xff, 0xa0, 0x68, 0xa8, 0x43, + 0xa0, 0x60, 0x60, 0x68, 0x28, 0x43, 0x60, 0x60, + 0x70, 0xbd, 0x00, 0x00, 0x10, 0x00, 0x07, 0x00, + 0x70, 0xb5, 0x01, 0x25, 0x0e, 0x4c, 0x6d, 0x04, + 0xa5, 0x61, 0x60, 0x68, 0x28, 0x43, 0x60, 0x60, + 0xa0, 0x68, 0x28, 0x43, 0x3c, 0x00, 0xd8, 0x80, + 0x01, 0x00, 0xa0, 0x60, 0xee, 0x08, 0x66, 0x61, + 0x0a, 0x20, 0xfa, 0xf7, 0x02, 0xff, 0x65, 0x61, + 0x0a, 0x20, 0xfa, 0xf7, 0xfe, 0xfe, 0xa6, 0x61, + 0x0a, 0x20, 0xfa, 0xf7, 0xfa, 0xfe, 0xa0, 0x68, + 0xa8, 0x43, 0xa0, 0x60, 0x60, 0x68, 0x28, 0x43, + 0x60, 0x60, 0x70, 0xbd, 0x00, 0x00, 0x10, 0x00, + 0x07, 0x00, 0x70, 0xb5, 0x05, 0x1c, 0x00, 0x24, + 0x80, 0x26, 0x28, 0x1c, 0x30, 0x40, 0x3c, 0x00, + 0x14, 0x81, 0x01, 0x00, 0xff, 0xf7, 0x88, 0xff, + 0x68, 0x06, 0x05, 0x0e, 0x01, 0x34, 0x08, 0x2c, + 0xf6, 0xdb, 0xff, 0xf7, 0x6d, 0xff, 0x70, 0xbd, + 0x80, 0xb5, 0x02, 0x1c, 0x0b, 0x21, 0x80, 0x20, + 0xfb, 0xf7, 0x3e, 0xfb, 0x80, 0xbd, 0x00, 0x00, + 0xf8, 0xb5, 0x12, 0x48, 0x00, 0x25, 0x07, 0x1c, + 0xff, 0x37, 0x06, 0x1d, 0x01, 0x37, 0x28, 0x1c, + 0xf9, 0xf7, 0xea, 0xfd, 0x04, 0x1c, 0x17, 0xd0, + 0x3c, 0x00, 0x50, 0x81, 0x01, 0x00, 0x20, 0x69, + 0x00, 0x28, 0x04, 0xd0, 0xe0, 0x6a, 0x00, 0x28, + 0x03, 0xd0, 0x00, 0x20, 0xe0, 0x62, 0x25, 0x1c, + 0xf0, 0xe7, 0x7b, 0x68, 0x00, 0x2b, 0x05, 0xd0, + 0x32, 0x1c, 0x21, 0x1c, 0x44, 0x31, 0x01, 0x20, + 0xe8, 0xf7, 0x34, 0xf9, 0x20, 0x1c, 0x44, 0x30, + 0xf9, 0xf7, 0x37, 0xfe, 0xe2, 0xe7, 0xf8, 0xbd, + 0x00, 0x00, 0x20, 0xf7, 0x01, 0x00, 0x11, 0x48, + 0x70, 0xb5, 0x3c, 0x00, 0x8c, 0x81, 0x01, 0x00, + 0x00, 0x68, 0xff, 0x28, 0x1d, 0xd1, 0xff, 0x20, + 0x32, 0x30, 0xfa, 0xf7, 0xa7, 0xfe, 0x0e, 0x4d, + 0x6c, 0x68, 0x0e, 0x48, 0xfa, 0xf7, 0xa2, 0xfe, + 0x68, 0x68, 0x24, 0x1a, 0x01, 0x20, 0x00, 0xf0, + 0x95, 0xfd, 0x6e, 0x68, 0x09, 0x48, 0xfa, 0xf7, + 0x99, 0xfe, 0x68, 0x68, 0x21, 0x1c, 0x0a, 0x39, + 0x30, 0x1a, 0x88, 0x42, 0x02, 0xd3, 0x0a, 0x34, + 0xa0, 0x42, 0x02, 0xd9, 0x3c, 0x00, 0xc8, 0x81, + 0x01, 0x00, 0x00, 0x20, 0x00, 0xf0, 0x85, 0xfd, + 0x70, 0xbd, 0xf4, 0x74, 0x01, 0x00, 0x00, 0x03, + 0x07, 0x00, 0x93, 0x03, 0x00, 0x00, 0x70, 0xb5, + 0x00, 0xf0, 0x4d, 0xf8, 0x01, 0x20, 0xed, 0xf7, + 0x34, 0xf9, 0x11, 0x4d, 0x18, 0x21, 0x68, 0x60, + 0x00, 0x20, 0xe9, 0xf7, 0xf2, 0xf9, 0x28, 0x60, + 0x04, 0x68, 0x80, 0x20, 0x20, 0x80, 0x00, 0x26, + 0x06, 0x22, 0xff, 0x21, 0x20, 0x1d, 0x3c, 0x00, + 0x04, 0x82, 0x01, 0x00, 0x66, 0x80, 0xe8, 0xf7, + 0x0b, 0xfa, 0x20, 0x1c, 0x0a, 0x30, 0x09, 0x49, + 0xf2, 0xf7, 0x2e, 0xfd, 0x20, 0x1c, 0x10, 0x30, + 0x07, 0x49, 0xf2, 0xf7, 0x29, 0xfd, 0xe6, 0x82, + 0x03, 0xcd, 0xe9, 0xf7, 0xf9, 0xf8, 0x02, 0x49, + 0x01, 0x20, 0x14, 0x39, 0x88, 0x60, 0x70, 0xbd, + 0x90, 0xd9, 0x01, 0x00, 0x12, 0x61, 0x01, 0x00, + 0x24, 0xf7, 0x01, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0x82, 0x01, 0x00, 0x10, 0xb5, + 0x06, 0x4c, 0x00, 0x22, 0x02, 0x20, 0xe1, 0x68, + 0xf0, 0xf7, 0x11, 0xfb, 0x60, 0x78, 0x02, 0x28, + 0x01, 0xd1, 0x00, 0xf0, 0x1a, 0xf9, 0x10, 0xbd, + 0x00, 0x00, 0x40, 0xd9, 0x01, 0x00, 0x80, 0xb5, + 0xa1, 0x20, 0xff, 0xf7, 0x50, 0xff, 0x80, 0xbd, + 0x00, 0x00, 0x40, 0x00, 0x0e, 0x21, 0x08, 0x40, + 0x80, 0xb5, 0xa0, 0x30, 0xff, 0xf7, 0x47, 0xff, + 0x80, 0xbd, 0x3c, 0x00, 0x7c, 0x82, 0x01, 0x00, + 0x10, 0xb5, 0x05, 0x4c, 0x20, 0x68, 0x00, 0x28, + 0x04, 0xd0, 0xe9, 0xf7, 0x87, 0xf9, 0x00, 0x20, + 0x20, 0x60, 0x60, 0x60, 0x10, 0xbd, 0x00, 0x00, + 0x90, 0xd9, 0x01, 0x00, 0x10, 0xb5, 0x07, 0x4c, + 0x01, 0x21, 0x07, 0x4a, 0x21, 0x61, 0x02, 0x20, + 0x10, 0x70, 0x61, 0x61, 0x00, 0xf0, 0xd6, 0xfc, + 0x00, 0xf0, 0xc8, 0xfb, 0x20, 0x1c, 0xed, 0xf7, + 0x9f, 0xfa, 0x10, 0xbd, 0x3c, 0x00, 0xb8, 0x82, + 0x01, 0x00, 0x20, 0xf7, 0x01, 0x00, 0x7c, 0xd9, + 0x01, 0x00, 0x70, 0xb5, 0x02, 0x1c, 0x08, 0x1c, + 0x02, 0x25, 0x00, 0x2a, 0x13, 0x4e, 0x14, 0xd0, + 0x00, 0xf0, 0x11, 0xfc, 0x30, 0x78, 0x01, 0x21, + 0x08, 0x43, 0x30, 0x70, 0x30, 0x78, 0x28, 0x43, + 0x30, 0x70, 0x00, 0x20, 0x7d, 0x21, 0x49, 0x01, + 0xb2, 0x79, 0x92, 0x07, 0x00, 0xd5, 0x01, 0x34, + 0x01, 0x30, 0x88, 0x42, 0xf8, 0xdb, 0x3c, 0x00, + 0xf4, 0x82, 0x01, 0x00, 0x20, 0x1c, 0x70, 0xbd, + 0x30, 0x78, 0xa8, 0x43, 0x30, 0x70, 0x30, 0x78, + 0x40, 0x08, 0x40, 0x00, 0x30, 0x70, 0x05, 0x49, + 0x48, 0x68, 0x01, 0x22, 0x12, 0x04, 0x90, 0x43, + 0x48, 0x60, 0x01, 0x20, 0x70, 0xbd, 0x00, 0x00, + 0x88, 0x00, 0x07, 0x00, 0x6c, 0x00, 0x07, 0x00, + 0xff, 0xb5, 0x09, 0xae, 0x00, 0x20, 0x60, 0xce, + 0x28, 0x60, 0x00, 0x23, 0x9c, 0x46, 0x30, 0x60, + 0x3c, 0x00, 0x30, 0x83, 0x01, 0x00, 0x69, 0x46, + 0x01, 0xaa, 0x17, 0xe0, 0xdb, 0x07, 0x0e, 0xd5, + 0x12, 0x4b, 0x1c, 0x56, 0x63, 0x1c, 0x0a, 0xd0, + 0x01, 0x27, 0x2b, 0x68, 0xa7, 0x40, 0x3b, 0x43, + 0x2b, 0x60, 0x13, 0x68, 0xdb, 0x07, 0x02, 0xd5, + 0x33, 0x68, 0x3b, 0x43, 0x33, 0x60, 0x0b, 0x68, + 0x5b, 0x08, 0x0b, 0x60, 0x13, 0x68, 0x5b, 0x08, + 0x13, 0x60, 0x01, 0x30, 0x0b, 0x68, 0x00, 0x2b, + 0x01, 0xd0, 0x3c, 0x00, 0x6c, 0x83, 0x01, 0x00, + 0x22, 0x28, 0xe2, 0xd3, 0x63, 0x46, 0x01, 0x33, + 0x20, 0x20, 0x02, 0x2b, 0x9c, 0x46, 0x02, 0xa9, + 0x03, 0xaa, 0xf2, 0xdb, 0xff, 0xbd, 0x00, 0x00, + 0xb4, 0x8d, 0x01, 0x00, 0xb0, 0xb5, 0x04, 0x1c, + 0x0d, 0x1c, 0x1e, 0x21, 0x00, 0x22, 0x03, 0x20, + 0x05, 0x4b, 0xf9, 0xf7, 0xb3, 0xf8, 0x21, 0x1c, + 0x03, 0x20, 0xf9, 0xf7, 0xf5, 0xf8, 0x29, 0x1c, + 0x03, 0x20, 0xf9, 0xf7, 0x3c, 0x00, 0xa8, 0x83, + 0x01, 0x00, 0xf1, 0xf8, 0xb0, 0xbd, 0x80, 0x38, + 0x01, 0x00, 0xb0, 0xb5, 0x1c, 0x4c, 0x1c, 0x4d, + 0x21, 0x78, 0x02, 0x29, 0x09, 0xd0, 0x03, 0x29, + 0x19, 0xd0, 0x04, 0x29, 0x1f, 0xd0, 0x05, 0x29, + 0x23, 0xd1, 0x00, 0x20, 0x00, 0xf0, 0x17, 0xfb, + 0x23, 0xe0, 0x68, 0x61, 0x14, 0x48, 0x1c, 0x30, + 0xc1, 0x68, 0x02, 0x69, 0x89, 0x18, 0xc1, 0x60, + 0x00, 0xf0, 0x2f, 0xfb, 0xe0, 0x68, 0x3c, 0x00, + 0xe4, 0x83, 0x01, 0x00, 0x01, 0x38, 0xe0, 0x60, + 0x16, 0xd1, 0x32, 0x20, 0xe0, 0x60, 0xff, 0xf7, + 0xa3, 0xfe, 0x11, 0xe0, 0x00, 0x20, 0x00, 0xf0, + 0x01, 0xfb, 0x00, 0xf0, 0x2d, 0xfc, 0x01, 0x20, + 0x20, 0x70, 0x09, 0xe0, 0x00, 0x20, 0x00, 0xf0, + 0xf9, 0xfa, 0xff, 0xf7, 0x45, 0xff, 0x03, 0xe0, + 0x05, 0x21, 0x0b, 0x20, 0xe8, 0xf7, 0x46, 0xff, + 0x68, 0x69, 0x61, 0x68, 0xe7, 0xf7, 0xdd, 0xff, + 0x3c, 0x00, 0x20, 0x84, 0x01, 0x00, 0xb0, 0xbd, + 0x00, 0x00, 0x7c, 0xd9, 0x01, 0x00, 0x20, 0xf7, + 0x01, 0x00, 0xf7, 0xb5, 0x04, 0x1c, 0x17, 0x1c, + 0xff, 0xf7, 0x21, 0xfe, 0x20, 0x0a, 0xff, 0xf7, + 0x18, 0xff, 0x20, 0x06, 0x00, 0x0e, 0xff, 0xf7, + 0x62, 0xfe, 0xff, 0xf7, 0x18, 0xfe, 0xa1, 0x20, + 0xff, 0xf7, 0x5d, 0xfe, 0x00, 0x25, 0x16, 0xe0, + 0x00, 0x20, 0x00, 0x24, 0x40, 0x06, 0x06, 0x0e, + 0xff, 0xf7, 0x3c, 0x00, 0x5c, 0x84, 0x01, 0x00, + 0xd1, 0xfd, 0x00, 0x06, 0x00, 0x0e, 0x30, 0x43, + 0x01, 0x34, 0x08, 0x2c, 0xf5, 0xdb, 0x29, 0x1c, + 0x01, 0x9a, 0x01, 0x35, 0xbd, 0x42, 0x50, 0x54, + 0x01, 0xda, 0x00, 0x20, 0x00, 0xe0, 0x01, 0x20, + 0xff, 0xf7, 0xd4, 0xfd, 0xbd, 0x42, 0xe6, 0xdb, + 0xff, 0xf7, 0x1e, 0xfe, 0xfe, 0xbd, 0x00, 0x00, + 0x80, 0xb5, 0xff, 0xf7, 0x19, 0xfe, 0x09, 0x21, + 0x89, 0x03, 0x00, 0x22, 0x3c, 0x00, 0x98, 0x84, + 0x01, 0x00, 0x02, 0x20, 0xf0, 0xf7, 0xe9, 0xf9, + 0x80, 0xbd, 0x09, 0x21, 0x89, 0x03, 0x80, 0xb5, + 0x00, 0x22, 0x02, 0x20, 0xf0, 0xf7, 0xc9, 0xf9, + 0x01, 0x21, 0x09, 0x48, 0x89, 0x03, 0x81, 0x61, + 0x42, 0x68, 0x0a, 0x43, 0x42, 0x60, 0x82, 0x68, + 0x11, 0x43, 0x81, 0x60, 0x01, 0x21, 0x49, 0x04, + 0x81, 0x61, 0x82, 0x68, 0x8a, 0x43, 0x82, 0x60, + 0x42, 0x68, 0x11, 0x43, 0x41, 0x60, 0x3c, 0x00, + 0xd4, 0x84, 0x01, 0x00, 0x80, 0xbd, 0x00, 0x00, + 0x10, 0x00, 0x07, 0x00, 0xf0, 0xb5, 0x04, 0x1c, + 0xc0, 0x68, 0x7b, 0x4e, 0x05, 0x68, 0x30, 0x78, + 0x85, 0xb0, 0x01, 0x28, 0x01, 0xd0, 0x02, 0x28, + 0x72, 0xd1, 0x00, 0x21, 0x20, 0x69, 0xf2, 0xf7, + 0x41, 0xf9, 0x76, 0x49, 0xf2, 0xf7, 0x24, 0xfc, + 0x00, 0x28, 0x69, 0xd0, 0x20, 0x1c, 0x20, 0x30, + 0x41, 0x7a, 0x08, 0x29, 0x02, 0xd1, 0x72, 0x4a, + 0x3c, 0x00, 0x10, 0x85, 0x01, 0x00, 0x00, 0x21, + 0x51, 0x61, 0x00, 0x7a, 0x22, 0x6a, 0x18, 0x21, + 0xf2, 0xf7, 0xc9, 0xfb, 0xe1, 0x6a, 0x37, 0x1c, + 0x40, 0x18, 0x6c, 0x49, 0x02, 0x90, 0x30, 0x78, + 0x0e, 0x1c, 0xff, 0x36, 0x0a, 0x1d, 0x01, 0x36, + 0x01, 0x28, 0x04, 0x92, 0x07, 0xd0, 0x65, 0x4a, + 0x02, 0x99, 0x1c, 0x32, 0x28, 0x1c, 0xed, 0xf7, + 0xe2, 0xfb, 0x00, 0x28, 0x6b, 0xd0, 0x32, 0x21, + 0x20, 0x69, 0x3c, 0x00, 0x4c, 0x85, 0x01, 0x00, + 0xf2, 0xf7, 0x16, 0xf9, 0x01, 0x90, 0x20, 0x69, + 0x01, 0x21, 0xf2, 0xf7, 0x11, 0xf9, 0x01, 0x1c, + 0x5e, 0x48, 0x01, 0x23, 0x01, 0x9a, 0xed, 0xf7, + 0x07, 0xfc, 0x00, 0x28, 0x04, 0xd1, 0x5b, 0x48, + 0xed, 0xf7, 0x92, 0xfa, 0x00, 0x21, 0xb9, 0x60, + 0x56, 0x48, 0x1c, 0x30, 0x81, 0x68, 0xea, 0xf7, + 0x19, 0xfc, 0x20, 0x1c, 0x14, 0x30, 0x03, 0x90, + 0x04, 0x99, 0xf2, 0xf7, 0x3c, 0x00, 0x88, 0x85, + 0x01, 0x00, 0xd5, 0xfb, 0x00, 0x28, 0x05, 0xd1, + 0x00, 0x22, 0xba, 0x60, 0x04, 0x98, 0x03, 0x99, + 0xf2, 0xf7, 0x6b, 0xfb, 0x4f, 0x49, 0x28, 0x89, + 0x09, 0x88, 0x88, 0x42, 0x03, 0xd0, 0x00, 0x22, + 0x4c, 0x49, 0xba, 0x60, 0x08, 0x80, 0x03, 0x21, + 0x20, 0x69, 0xf2, 0xf7, 0xe4, 0xf8, 0x00, 0x28, + 0x10, 0xd0, 0x46, 0x49, 0x82, 0x78, 0x20, 0x31, + 0x0b, 0x79, 0x94, 0x46, 0x9a, 0x42, 0x3c, 0x00, + 0xc4, 0x85, 0x01, 0x00, 0x09, 0xd0, 0x00, 0x22, + 0xba, 0x60, 0x62, 0x46, 0x0a, 0x71, 0x80, 0x78, + 0x01, 0x21, 0xf3, 0xf7, 0x05, 0xf9, 0x00, 0xe0, + 0x77, 0xe0, 0x06, 0x21, 0x20, 0x69, 0xf2, 0xf7, + 0xcd, 0xf8, 0x00, 0x28, 0x08, 0xd0, 0x81, 0x78, + 0x3a, 0x48, 0x40, 0x30, 0x82, 0x88, 0x91, 0x42, + 0x02, 0xd0, 0x00, 0x22, 0xba, 0x60, 0x81, 0x80, + 0x2a, 0x21, 0x20, 0x69, 0xf2, 0xf7, 0xbe, 0xf8, + 0x3c, 0x00, 0x00, 0x86, 0x01, 0x00, 0x00, 0x28, + 0x0d, 0xd0, 0x80, 0x78, 0xf1, 0x69, 0x33, 0x4a, + 0x81, 0x42, 0x08, 0xd0, 0x00, 0x21, 0xb9, 0x60, + 0xf0, 0x61, 0x10, 0x1c, 0xed, 0xf7, 0x09, 0xfb, + 0x2f, 0x48, 0xed, 0xf7, 0xfa, 0xfa, 0x38, 0x78, + 0x3b, 0x1c, 0x01, 0x28, 0x17, 0xd1, 0x02, 0x20, + 0x18, 0x70, 0x2a, 0x4f, 0x01, 0x23, 0x3b, 0x61, + 0x27, 0x4b, 0x03, 0xcd, 0x1c, 0x33, 0x08, 0x3d, + 0x02, 0x9a, 0x3c, 0x00, 0x3c, 0x86, 0x01, 0x00, + 0xed, 0xf7, 0xb0, 0xfa, 0x38, 0x1c, 0xed, 0xf7, + 0xd7, 0xf8, 0x32, 0x68, 0x00, 0x2a, 0x03, 0xd0, + 0x00, 0x21, 0x01, 0x20, 0xe7, 0xf7, 0xc4, 0xfe, + 0x00, 0xf0, 0xf4, 0xf9, 0x20, 0x1c, 0xf9, 0xf7, + 0xd5, 0xfb, 0x07, 0x1c, 0x11, 0xd1, 0x20, 0x1c, + 0xf9, 0xf7, 0x88, 0xfb, 0x07, 0x1c, 0x2e, 0xd0, + 0x01, 0x23, 0x3b, 0x61, 0x68, 0x89, 0x40, 0x21, + 0xc8, 0x53, 0x73, 0x68, 0x3c, 0x00, 0x78, 0x86, + 0x01, 0x00, 0x00, 0x2b, 0x04, 0xd0, 0x21, 0x1c, + 0x00, 0x20, 0x04, 0x9a, 0xe7, 0xf7, 0xac, 0xfe, + 0x01, 0x23, 0xfb, 0x62, 0x20, 0x69, 0x32, 0x21, + 0xf2, 0xf7, 0x75, 0xf8, 0x05, 0x1c, 0x20, 0x69, + 0x01, 0x21, 0xf2, 0xf7, 0x70, 0xf8, 0x0e, 0x4e, + 0x01, 0x1c, 0x2a, 0x1c, 0x30, 0x1c, 0xed, 0xf7, + 0xc0, 0xfb, 0x00, 0x28, 0x0e, 0xd1, 0x32, 0x21, + 0x20, 0x69, 0xf2, 0xf7, 0x64, 0xf8, 0x3c, 0x00, + 0xb4, 0x86, 0x01, 0x00, 0x05, 0x1c, 0x20, 0x69, + 0x01, 0x21, 0xf2, 0xf7, 0x5f, 0xf8, 0x01, 0x1c, + 0x3b, 0x1c, 0x2a, 0x1c, 0x30, 0x1c, 0xed, 0xf7, + 0xd7, 0xfa, 0x05, 0xb0, 0xf0, 0xbd, 0x00, 0x00, + 0x7c, 0xd9, 0x01, 0x00, 0x40, 0xf8, 0x01, 0x00, + 0x20, 0xf7, 0x01, 0x00, 0x02, 0x1c, 0x08, 0x1c, + 0x80, 0x2a, 0x80, 0xb5, 0x06, 0xd0, 0x81, 0x2a, + 0x03, 0xd0, 0x04, 0x21, 0x0b, 0x20, 0xe8, 0xf7, + 0x3c, 0x00, 0xf0, 0x86, 0x01, 0x00, 0xd9, 0xfd, + 0x80, 0xbd, 0xff, 0xf7, 0x5c, 0xfe, 0x80, 0xbd, + 0x00, 0x00, 0x03, 0x48, 0x81, 0x78, 0xff, 0x29, + 0x01, 0xd0, 0x00, 0x79, 0x70, 0x47, 0x00, 0x20, + 0x70, 0x47, 0x80, 0xf8, 0x01, 0x00, 0x30, 0xb5, + 0x89, 0xb0, 0x00, 0x93, 0x0e, 0x4d, 0x13, 0x1c, + 0x04, 0x1c, 0x2a, 0x1c, 0xec, 0xf7, 0x25, 0xfd, + 0x01, 0xa9, 0x06, 0xa8, 0xa2, 0x68, 0xec, 0xf7, + 0xce, 0xfe, 0x3c, 0x00, 0x2c, 0x87, 0x01, 0x00, + 0x01, 0xaa, 0x06, 0xa9, 0x28, 0x1c, 0x63, 0x6a, + 0xed, 0xf7, 0x44, 0xfa, 0x04, 0x1c, 0x01, 0x28, + 0x04, 0xd1, 0x28, 0x1c, 0xed, 0xf7, 0x2c, 0xf8, + 0x00, 0xf0, 0x4a, 0xf8, 0x20, 0x1c, 0x09, 0xb0, + 0x30, 0xbd, 0x00, 0x00, 0x20, 0xf7, 0x01, 0x00, + 0x80, 0xb5, 0xed, 0xf7, 0x2b, 0xf8, 0x00, 0xf0, + 0x7d, 0xf8, 0x02, 0x48, 0xed, 0xf7, 0x02, 0xfa, + 0x80, 0xbd, 0x00, 0x00, 0x3c, 0x00, 0x68, 0x87, + 0x01, 0x00, 0x20, 0xf7, 0x01, 0x00, 0x80, 0xb5, + 0x00, 0x28, 0x0b, 0xd1, 0x06, 0x48, 0xed, 0xf7, + 0xf8, 0xf9, 0x00, 0xf0, 0x6e, 0xf8, 0x01, 0x20, + 0xed, 0xf7, 0xeb, 0xfa, 0x03, 0x49, 0x03, 0x20, + 0xf9, 0xf7, 0x35, 0xfe, 0x80, 0xbd, 0x20, 0xf7, + 0x01, 0x00, 0x6d, 0x87, 0x01, 0x00, 0xb0, 0xb5, + 0x10, 0x4d, 0x04, 0x1c, 0x13, 0x1c, 0x2a, 0x1c, + 0x88, 0xb0, 0xec, 0xf7, 0x02, 0xfd, 0x3c, 0x00, + 0xa4, 0x87, 0x01, 0x00, 0x21, 0x1c, 0x0a, 0x31, + 0x06, 0x22, 0x28, 0x1d, 0xe7, 0xf7, 0xa4, 0xfe, + 0x69, 0x46, 0x05, 0xa8, 0x62, 0x69, 0xec, 0xf7, + 0x87, 0xfe, 0x28, 0x1c, 0xec, 0xf7, 0xee, 0xff, + 0x7f, 0x23, 0xdb, 0x43, 0x28, 0x1c, 0x6a, 0x46, + 0x05, 0xa9, 0xed, 0xf7, 0xf9, 0xf9, 0x00, 0xf0, + 0x1d, 0xf8, 0x08, 0xb0, 0xb0, 0xbd, 0x00, 0x00, + 0x20, 0xf7, 0x01, 0x00, 0x0a, 0x48, 0x80, 0xb5, + 0x3c, 0x00, 0xe0, 0x87, 0x01, 0x00, 0x01, 0x78, + 0x00, 0x29, 0x06, 0xd0, 0x02, 0x29, 0x01, 0xd0, + 0x05, 0x29, 0x07, 0xd1, 0x03, 0x21, 0x01, 0x70, + 0x80, 0xbd, 0x01, 0x21, 0x01, 0x70, 0x00, 0xf0, + 0x2e, 0xfa, 0x80, 0xbd, 0x03, 0x21, 0x0b, 0x20, + 0xe8, 0xf7, 0x4f, 0xfd, 0x80, 0xbd, 0x7c, 0xd9, + 0x01, 0x00, 0x09, 0x49, 0x80, 0xb5, 0x08, 0x78, + 0x00, 0x28, 0x06, 0xd0, 0x02, 0x28, 0x01, 0xd0, + 0x05, 0x28, 0x3c, 0x00, 0x1c, 0x88, 0x01, 0x00, + 0x05, 0xd1, 0x04, 0x20, 0x08, 0x70, 0x80, 0xbd, + 0xff, 0xf7, 0x38, 0xfd, 0x80, 0xbd, 0x02, 0x21, + 0x0b, 0x20, 0xe8, 0xf7, 0x39, 0xfd, 0x80, 0xbd, + 0x7c, 0xd9, 0x01, 0x00, 0x80, 0xb5, 0x02, 0x21, + 0x0b, 0x20, 0x04, 0x4a, 0xfa, 0xf7, 0x82, 0xff, + 0xf6, 0xf7, 0x86, 0xfd, 0x02, 0x49, 0x08, 0x61, + 0x80, 0xbd, 0x00, 0x00, 0xdd, 0x86, 0x01, 0x00, + 0x7c, 0xd9, 0x01, 0x00, 0x3c, 0x00, 0x58, 0x88, + 0x01, 0x00, 0x0c, 0x48, 0x80, 0xb5, 0x01, 0x78, + 0x06, 0x29, 0x0e, 0xd2, 0x02, 0xa3, 0x5b, 0x5c, + 0x5b, 0x00, 0x9f, 0x44, 0x00, 0x00, 0x06, 0x03, + 0x07, 0x07, 0x07, 0x06, 0x00, 0x20, 0x00, 0xf0, + 0xc2, 0xf8, 0x80, 0xbd, 0x05, 0x21, 0x01, 0x70, + 0x80, 0xbd, 0x04, 0x21, 0x0b, 0x20, 0xe8, 0xf7, + 0x0e, 0xfd, 0x80, 0xbd, 0x00, 0x00, 0x7c, 0xd9, + 0x01, 0x00, 0x70, 0x47, 0x00, 0x00, 0x3c, 0x00, + 0x94, 0x88, 0x01, 0x00, 0x10, 0xb5, 0x0d, 0x4b, + 0x04, 0x1c, 0x18, 0x1c, 0x10, 0x30, 0x00, 0x2c, + 0x08, 0xd0, 0xdb, 0x88, 0x5b, 0x04, 0x5b, 0x0c, + 0x0b, 0x80, 0x80, 0x7b, 0x48, 0x80, 0x04, 0x20, + 0x10, 0x80, 0x08, 0xe0, 0xda, 0x88, 0x01, 0x24, + 0xe4, 0x03, 0x22, 0x40, 0x0c, 0x88, 0x22, 0x43, + 0xda, 0x80, 0x49, 0x88, 0x81, 0x73, 0x01, 0x20, + 0x10, 0xbd, 0x00, 0x00, 0x30, 0x00, 0x07, 0x00, + 0x3c, 0x00, 0xd0, 0x88, 0x01, 0x00, 0x70, 0xb5, + 0x10, 0x4e, 0x02, 0x1c, 0x00, 0x23, 0xf0, 0x56, + 0x00, 0x2a, 0x02, 0xd0, 0x08, 0x70, 0x01, 0x24, + 0x15, 0xe0, 0x00, 0x23, 0xcd, 0x56, 0x85, 0x42, + 0x01, 0xd1, 0x01, 0x20, 0x70, 0xbd, 0x28, 0x1c, + 0x00, 0xf0, 0x5f, 0xf9, 0x04, 0x1c, 0x0a, 0xd0, + 0x07, 0x48, 0x35, 0x70, 0x00, 0x68, 0x00, 0x28, + 0x03, 0xd0, 0x00, 0x21, 0x0a, 0x20, 0xf9, 0xf7, + 0x28, 0xfd, 0x3c, 0x00, 0x0c, 0x89, 0x01, 0x00, + 0x00, 0xf0, 0x16, 0xfa, 0x20, 0x1c, 0x70, 0xbd, + 0xf4, 0x6b, 0x01, 0x00, 0x3c, 0xd9, 0x01, 0x00, + 0x03, 0x1c, 0x08, 0x1c, 0x00, 0x2b, 0x80, 0xb5, + 0x06, 0xd0, 0x04, 0x21, 0x11, 0x80, 0x04, 0x22, + 0x04, 0x49, 0xe7, 0xf7, 0xe3, 0xfd, 0x02, 0xe0, + 0x00, 0x68, 0x00, 0xf0, 0xcf, 0xf9, 0x01, 0x20, + 0x80, 0xbd, 0x00, 0x00, 0xf4, 0x74, 0x01, 0x00, + 0x10, 0xb5, 0xff, 0xf7, 0x3c, 0x00, 0x48, 0x89, + 0x01, 0x00, 0x97, 0xfb, 0xff, 0xf7, 0x89, 0xfc, + 0x04, 0x1c, 0xff, 0xf7, 0xb8, 0xfb, 0xff, 0xf7, + 0x84, 0xfc, 0x00, 0x2c, 0x02, 0xd1, 0x01, 0x28, + 0x00, 0xd1, 0x10, 0xbd, 0x00, 0x20, 0x10, 0xbd, + 0x00, 0x00, 0xf8, 0xb5, 0x20, 0x4f, 0x04, 0x1c, + 0x78, 0x78, 0x0e, 0x1c, 0x02, 0x28, 0x2e, 0xd0, + 0x1e, 0x4a, 0xf9, 0x68, 0x91, 0x61, 0x14, 0x23, + 0x1d, 0x49, 0x58, 0x43, 0x40, 0x18, 0x3c, 0x00, + 0x84, 0x89, 0x01, 0x00, 0x41, 0x7b, 0xb8, 0x78, + 0xf8, 0xf7, 0x14, 0xfe, 0x00, 0xf0, 0x8a, 0xf9, + 0x00, 0x25, 0x04, 0xe0, 0x00, 0x21, 0xb8, 0x78, + 0xf8, 0xf7, 0x0c, 0xfe, 0x01, 0x35, 0x78, 0x78, + 0x14, 0x23, 0x14, 0x49, 0x58, 0x43, 0x40, 0x18, + 0x80, 0x7a, 0xa8, 0x42, 0xf2, 0xdc, 0x00, 0x25, + 0x08, 0xe0, 0x00, 0x21, 0xb8, 0x78, 0xf8, 0xf7, + 0xfd, 0xfd, 0x0f, 0x48, 0x00, 0x68, 0x20, 0x70, + 0x3c, 0x00, 0xc0, 0x89, 0x01, 0x00, 0x01, 0x34, + 0x01, 0x35, 0xb5, 0x42, 0xf4, 0xdb, 0x09, 0x4a, + 0xf8, 0x68, 0x50, 0x61, 0x78, 0x78, 0x02, 0x28, + 0x06, 0xd1, 0xb8, 0x68, 0x32, 0x1c, 0x21, 0x1c, + 0x00, 0x04, 0x00, 0x0c, 0xff, 0xf7, 0x25, 0xfd, + 0xb8, 0x68, 0x80, 0x19, 0xb8, 0x60, 0xf8, 0xbd, + 0x00, 0x00, 0x40, 0xd9, 0x01, 0x00, 0x10, 0x00, + 0x07, 0x00, 0x64, 0x8d, 0x01, 0x00, 0x30, 0x20, + 0x07, 0x00, 0x3c, 0x00, 0xfc, 0x89, 0x01, 0x00, + 0x70, 0xb5, 0x06, 0x1c, 0x0c, 0x4d, 0x00, 0x24, + 0x2c, 0x70, 0xff, 0xf7, 0x39, 0xfc, 0x0a, 0x48, + 0x18, 0x21, 0x1c, 0x30, 0xac, 0x60, 0xe7, 0xf7, + 0x43, 0xfd, 0x08, 0x48, 0x44, 0x61, 0xf9, 0xf7, + 0x63, 0xf9, 0x00, 0x2e, 0x06, 0xd1, 0x06, 0x48, + 0x29, 0x69, 0xf6, 0xf7, 0xa7, 0xfc, 0x00, 0x20, + 0xec, 0xf7, 0xb0, 0xfe, 0x70, 0xbd, 0x00, 0x00, + 0x7c, 0xd9, 0x01, 0x00, 0x3c, 0x00, 0x38, 0x8a, + 0x01, 0x00, 0x20, 0xf7, 0x01, 0x00, 0x34, 0x63, + 0x01, 0x00, 0x30, 0xb5, 0x12, 0x4c, 0x85, 0xb0, + 0x20, 0x68, 0x00, 0x28, 0x1c, 0xd0, 0x0f, 0x48, + 0x14, 0x38, 0x80, 0x68, 0x00, 0x28, 0x01, 0xd1, + 0xff, 0xf7, 0xc1, 0xfb, 0x20, 0x68, 0x00, 0x23, + 0x00, 0x68, 0x01, 0xaa, 0x04, 0x30, 0x01, 0x21, + 0xec, 0xf7, 0xd1, 0xfd, 0x08, 0x49, 0x08, 0x4a, + 0x08, 0x31, 0x0c, 0x31, 0x00, 0x92, 0x3c, 0x00, + 0x74, 0x8a, 0x01, 0x00, 0x03, 0xc9, 0x00, 0xab, + 0x45, 0x18, 0x99, 0x7b, 0x01, 0x9a, 0x20, 0x68, + 0x2b, 0x1c, 0xf2, 0xf7, 0x2b, 0xfe, 0x05, 0xb0, + 0x30, 0xbd, 0x00, 0x00, 0x90, 0xd9, 0x01, 0x00, + 0x29, 0x81, 0x01, 0x00, 0x10, 0xb5, 0x13, 0x4c, + 0x14, 0x23, 0x60, 0x70, 0x58, 0x43, 0x12, 0x4b, + 0xc1, 0x18, 0x8a, 0x88, 0xe2, 0x80, 0x18, 0x58, + 0xe0, 0x60, 0x08, 0x7a, 0xa0, 0x70, 0xff, 0x28, + 0x3c, 0x00, 0xb0, 0x8a, 0x01, 0x00, 0x12, 0xd0, + 0x00, 0x22, 0x08, 0x21, 0x0d, 0x4b, 0xf8, 0xf7, + 0x22, 0xfd, 0x00, 0x22, 0x02, 0x20, 0xe1, 0x68, + 0xef, 0xf7, 0xbd, 0xfe, 0x0a, 0x49, 0xe0, 0x68, + 0x48, 0x61, 0x4a, 0x68, 0x02, 0x43, 0x4a, 0x60, + 0x8a, 0x68, 0x10, 0x43, 0x88, 0x60, 0x60, 0x78, + 0x02, 0x28, 0x01, 0xd1, 0xff, 0xf7, 0xdf, 0xfc, + 0x10, 0xbd, 0x40, 0xd9, 0x01, 0x00, 0x64, 0x8d, + 0x01, 0x00, 0x3c, 0x00, 0xec, 0x8a, 0x01, 0x00, + 0xb8, 0x0b, 0x00, 0x00, 0x10, 0x00, 0x07, 0x00, + 0xfe, 0x30, 0x00, 0x06, 0x00, 0x0e, 0x06, 0x21, + 0x15, 0x4b, 0x41, 0x43, 0x58, 0x5c, 0x82, 0x06, + 0x14, 0x48, 0x92, 0x0e, 0x42, 0x71, 0xc9, 0x18, + 0x4a, 0x78, 0xd2, 0x06, 0xd2, 0x0e, 0x02, 0x71, + 0x42, 0x78, 0x0c, 0x23, 0x1a, 0x43, 0x42, 0x70, + 0x42, 0x78, 0x8b, 0x78, 0x92, 0x08, 0x92, 0x00, + 0x9b, 0x07, 0x9b, 0x0f, 0x3c, 0x00, 0x28, 0x8b, + 0x01, 0x00, 0x1a, 0x43, 0x42, 0x70, 0x02, 0x78, + 0xc0, 0x23, 0x9a, 0x43, 0x40, 0x32, 0x02, 0x70, + 0x02, 0x78, 0x38, 0x23, 0x1a, 0x43, 0x02, 0x70, + 0x02, 0x78, 0xc9, 0x78, 0x04, 0x23, 0x9a, 0x43, + 0x89, 0x00, 0x19, 0x40, 0x11, 0x43, 0x01, 0x70, + 0x01, 0x20, 0x70, 0x47, 0x00, 0x00, 0xd8, 0x8d, + 0x01, 0x00, 0x88, 0x00, 0x07, 0x00, 0x8f, 0xb5, + 0x00, 0x20, 0x02, 0x90, 0x03, 0x90, 0x3c, 0x00, + 0x64, 0x8b, 0x01, 0x00, 0x07, 0x48, 0x02, 0xaa, + 0x03, 0xa9, 0x00, 0x91, 0x01, 0x92, 0x43, 0x89, + 0x02, 0x89, 0x03, 0xc8, 0xff, 0xf7, 0xd4, 0xfb, + 0x03, 0x98, 0x02, 0x99, 0xff, 0xf7, 0x04, 0xfc, + 0x8f, 0xbd, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, + 0x08, 0x49, 0x4a, 0x78, 0x00, 0x2a, 0x03, 0xd1, + 0x88, 0x80, 0x00, 0x20, 0x88, 0x60, 0x70, 0x47, + 0x14, 0x23, 0x5a, 0x43, 0x04, 0x4b, 0xd2, 0x18, + 0x3c, 0x00, 0xa0, 0x8b, 0x01, 0x00, 0xd2, 0x88, + 0x42, 0x43, 0xc8, 0x88, 0x42, 0x43, 0x8a, 0x60, + 0x70, 0x47, 0x40, 0xd9, 0x01, 0x00, 0x64, 0x8d, + 0x01, 0x00, 0xf8, 0xb5, 0x25, 0x4e, 0x04, 0x1c, + 0x30, 0x7a, 0x40, 0x08, 0x40, 0x00, 0x30, 0x72, + 0xb0, 0x7a, 0x00, 0x20, 0xb0, 0x72, 0x01, 0x27, + 0x01, 0x2c, 0x20, 0x4d, 0x01, 0xd0, 0xfc, 0x42, + 0x13, 0xd1, 0x30, 0x7b, 0x38, 0x43, 0x30, 0x73, + 0x00, 0x22, 0x3c, 0x00, 0xdc, 0x8b, 0x01, 0x00, + 0x21, 0x1c, 0x00, 0x20, 0xff, 0xf7, 0x6e, 0xfb, + 0x63, 0x1c, 0x01, 0xd1, 0x3f, 0x21, 0xe9, 0x73, + 0xb1, 0x7a, 0xa0, 0x22, 0x11, 0x43, 0xb1, 0x72, + 0x31, 0x7a, 0x39, 0x43, 0x31, 0x72, 0xf8, 0xbd, + 0x30, 0x7b, 0x40, 0x08, 0x40, 0x00, 0x30, 0x73, + 0x01, 0x22, 0x21, 0x1c, 0x01, 0x20, 0xff, 0xf7, + 0x59, 0xfb, 0x01, 0x20, 0x00, 0x21, 0xe9, 0x73, + 0xb1, 0x7a, 0x02, 0x22, 0x3c, 0x00, 0x18, 0x8c, + 0x01, 0x00, 0x11, 0x43, 0xb1, 0x72, 0xb1, 0x7a, + 0x04, 0x22, 0x11, 0x43, 0xb1, 0x72, 0xb1, 0x7a, + 0x30, 0x22, 0x11, 0x43, 0xb1, 0x72, 0x31, 0x7a, + 0x39, 0x43, 0x31, 0x72, 0x08, 0x49, 0x4a, 0x68, + 0x80, 0x23, 0x9a, 0x43, 0x4a, 0x60, 0x0a, 0x68, + 0x1a, 0x43, 0x0a, 0x60, 0x31, 0x7b, 0x39, 0x43, + 0x31, 0x73, 0xd7, 0xe7, 0x00, 0x00, 0x88, 0x00, + 0x07, 0x00, 0x40, 0x00, 0x07, 0x00, 0x3c, 0x00, + 0x54, 0x8c, 0x01, 0x00, 0x6c, 0x00, 0x07, 0x00, + 0xb0, 0xb5, 0x0e, 0x4d, 0x0e, 0x48, 0x29, 0x69, + 0xf6, 0xf7, 0x9e, 0xfb, 0x0d, 0x48, 0xec, 0xf7, + 0x93, 0xfd, 0x0d, 0x48, 0x09, 0x4c, 0x00, 0x88, + 0x1c, 0x34, 0xa0, 0x82, 0xf1, 0xf7, 0x5a, 0xff, + 0x20, 0x61, 0xfa, 0xf7, 0x97, 0xf8, 0x02, 0x1c, + 0x23, 0x1c, 0x00, 0x21, 0x00, 0x20, 0xec, 0xf7, + 0x8b, 0xff, 0x32, 0x20, 0xe8, 0x60, 0xff, 0xf7, + 0x3c, 0x00, 0x90, 0x8c, 0x01, 0x00, 0xa5, 0xfa, + 0xb0, 0xbd, 0x7c, 0xd9, 0x01, 0x00, 0x34, 0x63, + 0x01, 0x00, 0xdd, 0x84, 0x01, 0x00, 0x20, 0xf7, + 0x01, 0x00, 0xb0, 0xb5, 0x0a, 0x4d, 0x68, 0x78, + 0x00, 0x28, 0x0e, 0xd0, 0x14, 0x23, 0x08, 0x49, + 0x58, 0x43, 0x40, 0x18, 0x44, 0x7a, 0x06, 0xe0, + 0xa8, 0x68, 0xe0, 0x40, 0x01, 0x06, 0x09, 0x0e, + 0xa8, 0x78, 0xf8, 0xf7, 0x76, 0xfc, 0x08, 0x3c, + 0xf6, 0xd5, 0x3c, 0x00, 0xcc, 0x8c, 0x01, 0x00, + 0xb0, 0xbd, 0x00, 0x00, 0x40, 0xd9, 0x01, 0x00, + 0x64, 0x8d, 0x01, 0x00, 0x01, 0x1c, 0x14, 0x48, + 0xb0, 0xb5, 0x01, 0x60, 0x13, 0x48, 0x02, 0x7f, + 0x02, 0x23, 0x9a, 0x43, 0x02, 0x77, 0x02, 0x7f, + 0x01, 0x24, 0x22, 0x43, 0x02, 0x77, 0x10, 0x4d, + 0x00, 0x29, 0x0c, 0xd0, 0x01, 0x22, 0x00, 0x21, + 0x03, 0x20, 0xef, 0xf7, 0x9f, 0xfd, 0x0d, 0x49, + 0x48, 0x7c, 0xa0, 0x43, 0x3c, 0x00, 0x08, 0x8d, + 0x01, 0x00, 0x48, 0x74, 0x68, 0x7a, 0x20, 0x43, + 0x68, 0x72, 0xb0, 0xbd, 0x01, 0x7f, 0x21, 0x43, + 0x01, 0x77, 0x68, 0x7a, 0x40, 0x08, 0x40, 0x00, + 0x68, 0x72, 0x01, 0x22, 0x00, 0x21, 0x03, 0x20, + 0xef, 0xf7, 0xb1, 0xfd, 0xb0, 0xbd, 0xf4, 0x74, + 0x01, 0x00, 0x30, 0x00, 0x07, 0x00, 0x88, 0x00, + 0x07, 0x00, 0x10, 0x00, 0x07, 0x00, 0x10, 0xb5, + 0x07, 0x4c, 0x21, 0x1c, 0x00, 0x20, 0x3c, 0x00, + 0x44, 0x8d, 0x01, 0x00, 0xf9, 0xf7, 0x56, 0xfb, + 0x05, 0x48, 0x00, 0x23, 0xc0, 0x56, 0x01, 0x28, + 0x03, 0xdd, 0x21, 0x1c, 0x00, 0x20, 0xf9, 0xf7, + 0x19, 0xfb, 0x10, 0xbd, 0x65, 0x1a, 0x00, 0x00, + 0xf4, 0x6b, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x08, 0x01, 0x01, 0x00, 0x02, 0x18, 0x04, 0xff, + 0x82, 0xe8, 0xd7, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, + 0x3c, 0x00, 0x80, 0x8d, 0x01, 0x00, 0x00, 0x18, + 0x00, 0x06, 0x02, 0x03, 0x05, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, + 0x01, 0x00, 0xff, 0x10, 0x00, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x20, 0x00, 0x01, 0x00, 0x02, 0x10, + 0x00, 0x06, 0x02, 0x03, 0x05, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x04, 0x05, 0x06, 0x07, 0x08, 0x0c, + 0x0d, 0x0e, 0x3c, 0x00, 0xbc, 0x8d, 0x01, 0x00, + 0xff, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1b, + 0x1c, 0x1d, 0xff, 0x1a, 0x11, 0x13, 0x12, 0x0f, + 0x10, 0xff, 0x02, 0x00, 0xff, 0x01, 0x03, 0x09, + 0x0a, 0x0b, 0x00, 0x00, 0x30, 0x0d, 0x02, 0x00, + 0x00, 0x00, 0x28, 0x0e, 0x03, 0x00, 0x00, 0x00, + 0x1e, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x30, 0x0d, + 0x02, 0x01, 0x00, 0x00, 0x1e, 0x0c, 0x00, 0x01, + 0x00, 0x00, 0x23, 0x0d, 0x3c, 0x00, 0xf8, 0x8d, + 0x01, 0x00, 0x02, 0x01, 0x00, 0x00, 0x1d, 0x0d, + 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfe, + 0xfb, 0x6d, 0x00, 0x00, 0x80, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x34, 0x8e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x70, 0x8e, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xac, 0x8e, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xe8, 0x8e, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x24, 0x8f, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x60, 0x8f, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x9c, 0x8f, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xd8, 0x8f, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x14, 0x90, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x50, 0x90, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x8c, 0x90, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xc8, 0x90, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x04, 0x91, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0x91, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x7c, 0x91, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xb8, 0x91, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xf4, 0x91, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x30, 0x92, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x6c, 0x92, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xa8, 0x92, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xe4, 0x92, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x20, 0x93, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x5c, 0x93, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x98, 0x93, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xd4, 0x93, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x10, 0x94, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x4c, 0x94, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x88, 0x94, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xc4, 0x94, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x95, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x78, 0x95, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xb4, 0x95, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xf0, 0x95, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x2c, 0x96, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x68, 0x96, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xa4, 0x96, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xe0, 0x96, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x1c, 0x97, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x58, 0x97, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x94, 0x97, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xd0, 0x97, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x0c, 0x98, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x48, 0x98, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x84, 0x98, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xc0, 0x98, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xfc, 0x98, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x38, 0x99, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x74, 0x99, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xb0, 0x99, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xec, 0x99, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x28, 0x9a, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x64, 0x9a, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xa0, 0x9a, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xdc, 0x9a, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x18, 0x9b, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x54, 0x9b, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x90, 0x9b, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xcc, 0x9b, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x08, 0x9c, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x44, 0x9c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x80, 0x9c, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xbc, 0x9c, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xf8, 0x9c, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x34, 0x9d, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x70, 0x9d, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xac, 0x9d, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xe8, 0x9d, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x24, 0x9e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x60, 0x9e, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x9c, 0x9e, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xd8, 0x9e, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x14, 0x9f, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x50, 0x9f, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x8c, 0x9f, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xc8, 0x9f, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x04, 0xa0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0xa0, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x7c, 0xa0, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xb8, 0xa0, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xf4, 0xa0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x30, 0xa1, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x6c, 0xa1, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xa8, 0xa1, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xe4, 0xa1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x20, 0xa2, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x5c, 0xa2, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x98, 0xa2, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xd4, 0xa2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x10, 0xa3, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x4c, 0xa3, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x88, 0xa3, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xc4, 0xa3, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0xa4, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x3c, 0xa4, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x78, 0xa4, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xb4, 0xa4, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xf0, 0xa4, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x2c, 0xa5, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x68, 0xa5, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xa4, 0xa5, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xe0, 0xa5, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x1c, 0xa6, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x58, 0xa6, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x94, 0xa6, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xd0, 0xa6, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x0c, 0xa7, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x48, 0xa7, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x84, 0xa7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xc0, 0xa7, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xfc, 0xa7, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x38, 0xa8, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x74, 0xa8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xb0, 0xa8, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xec, 0xa8, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x28, 0xa9, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x64, 0xa9, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xa0, 0xa9, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xdc, 0xa9, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x18, 0xaa, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x54, 0xaa, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x90, 0xaa, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xcc, 0xaa, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x08, 0xab, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x44, 0xab, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x80, 0xab, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xbc, 0xab, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xf8, 0xab, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x34, 0xac, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x70, 0xac, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xac, 0xac, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xe8, 0xac, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x24, 0xad, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x60, 0xad, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x9c, 0xad, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xd8, 0xad, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x14, 0xae, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x50, 0xae, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x8c, 0xae, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xc8, 0xae, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x04, 0xaf, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0xaf, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x7c, 0xaf, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xb8, 0xaf, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xf4, 0xaf, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x30, 0xb0, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x6c, 0xb0, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xa8, 0xb0, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xe4, 0xb0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x20, 0xb1, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x5c, 0xb1, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x98, 0xb1, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xd4, 0xb1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x10, 0xb2, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x4c, 0xb2, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x88, 0xb2, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xc4, 0xb2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0xb3, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x3c, 0xb3, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x78, 0xb3, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xb4, 0xb3, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xf0, 0xb3, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x2c, 0xb4, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x68, 0xb4, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xa4, 0xb4, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xe0, 0xb4, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x1c, 0xb5, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x58, 0xb5, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x94, 0xb5, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xd0, 0xb5, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x0c, 0xb6, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x48, 0xb6, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x84, 0xb6, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xc0, 0xb6, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xfc, 0xb6, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x38, 0xb7, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x74, 0xb7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xb0, 0xb7, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xec, 0xb7, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x28, 0xb8, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x64, 0xb8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xa0, 0xb8, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xdc, 0xb8, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x18, 0xb9, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x54, 0xb9, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x90, 0xb9, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xcc, 0xb9, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x08, 0xba, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x44, 0xba, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x80, 0xba, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xbc, 0xba, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xf8, 0xba, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x34, 0xbb, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x70, 0xbb, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xac, 0xbb, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xe8, 0xbb, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x24, 0xbc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x60, 0xbc, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x9c, 0xbc, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xd8, 0xbc, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x14, 0xbd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x50, 0xbd, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x8c, 0xbd, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xc8, 0xbd, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x04, 0xbe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0xbe, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x7c, 0xbe, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xb8, 0xbe, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xf4, 0xbe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x30, 0xbf, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x6c, 0xbf, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xa8, 0xbf, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xe4, 0xbf, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x20, 0xc0, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x5c, 0xc0, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x98, 0xc0, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xd4, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x10, 0xc1, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x4c, 0xc1, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x88, 0xc1, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xc4, 0xc1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0xc2, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x3c, 0xc2, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x78, 0xc2, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xb4, 0xc2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xf0, 0xc2, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x2c, 0xc3, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x68, 0xc3, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xa4, 0xc3, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xe0, 0xc3, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x1c, 0xc4, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x58, 0xc4, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x94, 0xc4, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xd0, 0xc4, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x0c, 0xc5, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x48, 0xc5, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x84, 0xc5, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xc0, 0xc5, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xfc, 0xc5, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x38, 0xc6, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x74, 0xc6, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xb0, 0xc6, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xec, 0xc6, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x28, 0xc7, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x64, 0xc7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xa0, 0xc7, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xdc, 0xc7, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x18, 0xc8, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x54, 0xc8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x90, 0xc8, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xcc, 0xc8, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x08, 0xc9, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x44, 0xc9, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x80, 0xc9, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xbc, 0xc9, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xf8, 0xc9, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x34, 0xca, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x70, 0xca, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xac, 0xca, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xe8, 0xca, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x24, 0xcb, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x60, 0xcb, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x9c, 0xcb, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xd8, 0xcb, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x14, 0xcc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x50, 0xcc, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x8c, 0xcc, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xc8, 0xcc, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x04, 0xcd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0xcd, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x7c, 0xcd, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xb8, 0xcd, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xf4, 0xcd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x30, 0xce, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x6c, 0xce, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xa8, 0xce, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xe4, 0xce, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x20, 0xcf, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x5c, 0xcf, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x98, 0xcf, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xd4, 0xcf, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x10, 0xd0, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x4c, 0xd0, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x88, 0xd0, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xc4, 0xd0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0xd1, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x3c, 0xd1, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x78, 0xd1, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xb4, 0xd1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xf0, 0xd1, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x2c, 0xd2, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x68, 0xd2, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xa4, 0xd2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xe0, 0xd2, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x1c, 0xd3, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x58, 0xd3, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x94, 0xd3, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xd0, 0xd3, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x0c, 0xd4, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x48, 0xd4, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x84, 0xd4, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xc0, 0xd4, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xfc, 0xd4, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x38, 0xd5, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x74, 0xd5, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xb0, 0xd5, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xec, 0xd5, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x28, 0xd6, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x64, 0xd6, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xa0, 0xd6, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xdc, 0xd6, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x18, 0xd7, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x54, 0xd7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x90, 0xd7, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xcc, 0xd7, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x08, 0xd8, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x44, 0xd8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x80, 0xd8, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xbc, 0xd8, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xf8, 0xd8, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x34, 0xd9, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x70, 0xd9, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xac, 0xd9, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xe8, 0xd9, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x24, 0xda, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x60, 0xda, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x9c, 0xda, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xd8, 0xda, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x14, 0xdb, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x50, 0xdb, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x8c, 0xdb, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xc8, 0xdb, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x04, 0xdc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0xdc, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x7c, 0xdc, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xb8, 0xdc, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xf4, 0xdc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x30, 0xdd, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x6c, 0xdd, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xa8, 0xdd, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xe4, 0xdd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x20, 0xde, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x5c, 0xde, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x98, 0xde, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xd4, 0xde, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x10, 0xdf, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x4c, 0xdf, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x88, 0xdf, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xc4, 0xdf, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x3c, 0xe0, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x78, 0xe0, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xb4, 0xe0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xf0, 0xe0, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x2c, 0xe1, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x68, 0xe1, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xa4, 0xe1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xe0, 0xe1, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x1c, 0xe2, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x58, 0xe2, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x94, 0xe2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xd0, 0xe2, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x0c, 0xe3, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x48, 0xe3, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x84, 0xe3, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xc0, 0xe3, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xfc, 0xe3, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x38, 0xe4, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x74, 0xe4, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xb0, 0xe4, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xec, 0xe4, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x28, 0xe5, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x64, 0xe5, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xa0, 0xe5, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xdc, 0xe5, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x18, 0xe6, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x54, 0xe6, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x90, 0xe6, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xcc, 0xe6, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x08, 0xe7, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x44, 0xe7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x80, 0xe7, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xbc, 0xe7, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xf8, 0xe7, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x34, 0xe8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x70, 0xe8, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xac, 0xe8, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xe8, 0xe8, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x24, 0xe9, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x60, 0xe9, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x9c, 0xe9, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xd8, 0xe9, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x14, 0xea, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x50, 0xea, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x8c, 0xea, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xc8, 0xea, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x04, 0xeb, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0xeb, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x7c, 0xeb, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xb8, 0xeb, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xf4, 0xeb, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x30, 0xec, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x6c, 0xec, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xa8, 0xec, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xe4, 0xec, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x20, 0xed, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x5c, 0xed, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x98, 0xed, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xd4, 0xed, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x10, 0xee, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x4c, 0xee, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x88, 0xee, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xc4, 0xee, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0xef, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x3c, 0xef, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x78, 0xef, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xb4, 0xef, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xf0, 0xef, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x2c, 0xf0, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x68, 0xf0, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xa4, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xe0, 0xf0, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x1c, 0xf1, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x58, 0xf1, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x94, 0xf1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xd0, 0xf1, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x0c, 0xf2, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x48, 0xf2, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x84, 0xf2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xc0, 0xf2, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xfc, 0xf2, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x38, 0xf3, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x74, 0xf3, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xb0, 0xf3, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xec, 0xf3, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x28, 0xf4, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x64, 0xf4, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xa0, 0xf4, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xdc, 0xf4, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x18, 0xf5, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x54, 0xf5, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x90, 0xf5, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xcc, 0xf5, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x08, 0xf6, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x44, 0xf6, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x80, 0xf6, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xbc, 0xf6, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xf8, 0xf6, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x34, 0xf7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x70, 0xf7, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0xac, 0xf7, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xe8, 0xf7, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x24, 0xf8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x60, 0xf8, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x9c, 0xf8, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xd8, 0xf8, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x14, 0xf9, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x50, 0xf9, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x8c, 0xf9, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xc8, 0xf9, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x04, 0xfa, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x40, 0xfa, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x7c, 0xfa, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xb8, 0xfa, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xf4, 0xfa, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x30, 0xfb, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x6c, 0xfb, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xa8, 0xfb, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xe4, 0xfb, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x20, 0xfc, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x5c, 0xfc, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x98, 0xfc, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xd4, 0xfc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x10, 0xfd, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x4c, 0xfd, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x88, 0xfd, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xc4, 0xfd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x3c, 0xfe, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x78, 0xfe, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0xb4, 0xfe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0xf0, 0xfe, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x2c, 0xff, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x68, 0xff, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x00, 0x10, 0x04, 0x00, 0x70, 0xb5, 0x2b, 0x48, + 0x06, 0x21, 0x81, 0x75, 0xc1, 0x75, 0x01, 0x7e, + 0x49, 0x08, 0x49, 0x00, 0x01, 0x76, 0x01, 0x7e, + 0x02, 0x22, 0x91, 0x43, 0x01, 0x76, 0x26, 0x49, + 0x0b, 0x78, 0x5b, 0x08, 0x5b, 0x00, 0x0b, 0x70, + 0x04, 0x23, 0x8b, 0x70, 0x0c, 0x23, 0x43, 0x76, + 0x20, 0x23, 0x03, 0x75, 0x1a, 0x24, 0x44, 0x75, + 0x24, 0x24, 0x84, 0x76, 0x10, 0x24, 0xc4, 0x76, + 0x3c, 0x00, 0x3c, 0x10, 0x04, 0x00, 0x2a, 0x25, + 0x4d, 0x70, 0x05, 0x7a, 0x30, 0x26, 0xb5, 0x43, + 0x20, 0x35, 0x05, 0x72, 0x85, 0x7a, 0x6d, 0x08, + 0x6d, 0x00, 0x85, 0x72, 0x85, 0x7a, 0x95, 0x43, + 0x85, 0x72, 0x85, 0x7a, 0x04, 0x26, 0x35, 0x43, + 0x85, 0x72, 0x85, 0x7a, 0x08, 0x26, 0x35, 0x43, + 0x85, 0x72, 0x85, 0x7a, 0xa5, 0x43, 0x85, 0x72, + 0x05, 0x7b, 0x2c, 0x43, 0x04, 0x73, 0x04, 0x7b, + 0x1c, 0x43, 0x3c, 0x00, 0x78, 0x10, 0x04, 0x00, + 0x04, 0x73, 0x04, 0x7b, 0x40, 0x25, 0x2c, 0x43, + 0x04, 0x73, 0x84, 0x7a, 0x23, 0x43, 0x83, 0x72, + 0x83, 0x7a, 0xab, 0x43, 0x83, 0x72, 0x03, 0x7b, + 0x80, 0x24, 0x23, 0x43, 0x03, 0x73, 0x08, 0x78, + 0x90, 0x43, 0x08, 0x70, 0x08, 0x78, 0x01, 0x22, + 0x10, 0x43, 0x08, 0x70, 0x08, 0x78, 0x04, 0x22, + 0x90, 0x43, 0x08, 0x70, 0x70, 0xbd, 0x00, 0x00, + 0x0c, 0x80, 0x07, 0x00, 0x3c, 0x00, 0xb4, 0x10, + 0x04, 0x00, 0x80, 0x80, 0x07, 0x00, 0x01, 0x49, + 0x04, 0x20, 0x48, 0x73, 0x70, 0x47, 0x40, 0x80, + 0x07, 0x00, 0x03, 0x49, 0x80, 0xb5, 0x00, 0x20, + 0x08, 0x80, 0x00, 0xf0, 0x0a, 0xfb, 0x80, 0xbd, + 0x00, 0x00, 0xfc, 0x6b, 0x01, 0x00, 0x70, 0x47, + 0x00, 0x00, 0x80, 0xb5, 0x00, 0xf0, 0x67, 0xfb, + 0x80, 0xbd, 0x80, 0xb5, 0x0a, 0x49, 0x18, 0x20, + 0xc1, 0xf7, 0x3b, 0xfa, 0x09, 0x49, 0x3c, 0x00, + 0xf0, 0x10, 0x04, 0x00, 0x02, 0x20, 0xc1, 0xf7, + 0x37, 0xfa, 0x08, 0x49, 0x1f, 0x20, 0xc1, 0xf7, + 0x33, 0xfa, 0x07, 0x49, 0x1c, 0x20, 0xc1, 0xf7, + 0x2f, 0xfa, 0x06, 0x49, 0x03, 0x20, 0xc1, 0xf7, + 0x2b, 0xfa, 0x80, 0xbd, 0x99, 0x2a, 0x00, 0x00, + 0x41, 0x25, 0x00, 0x00, 0x55, 0x25, 0x00, 0x00, + 0x5d, 0x25, 0x00, 0x00, 0x39, 0x25, 0x00, 0x00, + 0x80, 0xb5, 0xbf, 0xf7, 0x91, 0xfd, 0x80, 0xbd, + 0x3c, 0x00, 0x2c, 0x11, 0x04, 0x00, 0x80, 0xb5, + 0x05, 0x4a, 0x05, 0x49, 0x0a, 0x20, 0xbf, 0xf7, + 0x4e, 0xff, 0x01, 0x20, 0x04, 0x49, 0x80, 0x02, + 0x08, 0x60, 0x48, 0x60, 0x80, 0xbd, 0xb4, 0x74, + 0x01, 0x00, 0xb1, 0x64, 0x00, 0x00, 0x00, 0x10, + 0x07, 0x00, 0x80, 0xb5, 0x00, 0xf0, 0x91, 0xfe, + 0x80, 0xbd, 0x80, 0xb5, 0x05, 0x4a, 0x05, 0x49, + 0x1b, 0x20, 0xbf, 0xf7, 0x38, 0xff, 0x01, 0x20, + 0x04, 0x49, 0x3c, 0x00, 0x68, 0x11, 0x04, 0x00, + 0xc0, 0x06, 0x08, 0x60, 0x48, 0x60, 0x80, 0xbd, + 0xb8, 0x74, 0x01, 0x00, 0x2d, 0x6e, 0x00, 0x00, + 0x00, 0x10, 0x07, 0x00, 0x80, 0xb5, 0x04, 0x48, + 0x00, 0xf0, 0x80, 0xfe, 0x03, 0x49, 0x00, 0x20, + 0x48, 0x60, 0x88, 0x60, 0x80, 0xbd, 0x00, 0x00, + 0x41, 0x4b, 0x00, 0x00, 0xbc, 0x74, 0x01, 0x00, + 0x80, 0xb5, 0xc5, 0xf7, 0xd5, 0xfe, 0xce, 0xf7, + 0xd9, 0xf8, 0x03, 0x49, 0x3c, 0x00, 0xa4, 0x11, + 0x04, 0x00, 0x08, 0x60, 0x03, 0x49, 0x0a, 0x20, + 0xd1, 0xf7, 0xef, 0xf8, 0x80, 0xbd, 0xbc, 0x74, + 0x01, 0x00, 0x49, 0x6e, 0x00, 0x00, 0x80, 0xb5, + 0x01, 0x22, 0x20, 0x21, 0x06, 0x20, 0xc8, 0xf7, + 0x56, 0xfc, 0xbf, 0xf7, 0x70, 0xfe, 0x03, 0x49, + 0x00, 0x20, 0x08, 0x60, 0x20, 0x21, 0x02, 0x48, + 0xbf, 0xf7, 0x63, 0xf9, 0x80, 0xbd, 0xcc, 0x5c, + 0x01, 0x00, 0x64, 0x6d, 0x01, 0x00, 0x3c, 0x00, + 0xe0, 0x11, 0x04, 0x00, 0x08, 0x48, 0x80, 0xb5, + 0x00, 0x68, 0x00, 0x28, 0x05, 0xd0, 0x06, 0x48, + 0x54, 0x30, 0x42, 0x6a, 0x00, 0x21, 0xbf, 0xf7, + 0xf3, 0xf8, 0x04, 0x4a, 0x04, 0x49, 0x03, 0x20, + 0xbf, 0xf7, 0xac, 0xfd, 0x80, 0xbd, 0x00, 0x00, + 0x50, 0x6d, 0x01, 0x00, 0x89, 0x98, 0x00, 0x00, + 0x91, 0x98, 0x00, 0x00, 0x80, 0xb5, 0x00, 0xf0, + 0x03, 0xf8, 0x00, 0xf0, 0x19, 0xf8, 0x80, 0xbd, + 0x3c, 0x00, 0x1c, 0x12, 0x04, 0x00, 0x10, 0xb5, + 0x09, 0x4c, 0x60, 0x21, 0x20, 0x1c, 0xbf, 0xf7, + 0x3a, 0xf9, 0x00, 0x20, 0xc0, 0x43, 0xa0, 0x60, + 0x20, 0x60, 0xff, 0x20, 0x02, 0x30, 0xe0, 0x84, + 0x20, 0x22, 0x20, 0x1c, 0x40, 0x30, 0x02, 0x49, + 0xbf, 0xf7, 0x5b, 0xf9, 0x10, 0xbd, 0x00, 0x10, + 0x07, 0x00, 0x70, 0x52, 0x01, 0x00, 0x00, 0x20, + 0x0a, 0x49, 0xc0, 0x43, 0x88, 0x60, 0x09, 0x4b, + 0x0a, 0x49, 0x3c, 0x00, 0x58, 0x12, 0x04, 0x00, + 0x00, 0x20, 0x82, 0x00, 0x01, 0x30, 0x00, 0x06, + 0x00, 0x0e, 0x20, 0x28, 0x99, 0x50, 0xf8, 0xd3, + 0x06, 0x49, 0x04, 0x4a, 0x08, 0x1c, 0x10, 0x30, + 0x08, 0x3a, 0x03, 0xc2, 0x70, 0x47, 0x00, 0x00, + 0x00, 0x10, 0x07, 0x00, 0xe0, 0x7e, 0x01, 0x00, + 0x75, 0x75, 0x00, 0x00, 0x00, 0xa0, 0x07, 0x00, + 0x04, 0x48, 0x00, 0x21, 0x00, 0x22, 0x00, 0x23, + 0x0e, 0xc0, 0x0c, 0x38, 0x3c, 0x00, 0x94, 0x12, + 0x04, 0x00, 0x01, 0x21, 0x41, 0x60, 0x70, 0x47, + 0x00, 0x00, 0x70, 0x78, 0x01, 0x00, 0x70, 0x47, + 0x00, 0x00, 0x03, 0x48, 0x00, 0x21, 0x00, 0x22, + 0x00, 0x23, 0x0e, 0xc0, 0x08, 0xc0, 0x70, 0x47, + 0x00, 0x00, 0x88, 0x5a, 0x01, 0x00, 0x04, 0x49, + 0x80, 0xb5, 0x00, 0x20, 0x48, 0x61, 0x02, 0x48, + 0x40, 0x21, 0x1c, 0x30, 0xbf, 0xf7, 0xe9, 0xf8, + 0x80, 0xbd, 0xfc, 0x5a, 0x01, 0x00, 0x3c, 0x00, + 0xd0, 0x12, 0x04, 0x00, 0x80, 0xb5, 0xce, 0xf7, + 0x3f, 0xf8, 0x03, 0x49, 0x88, 0x61, 0x03, 0x49, + 0x03, 0x20, 0xd1, 0xf7, 0x55, 0xf8, 0x80, 0xbd, + 0xfc, 0x5a, 0x01, 0x00, 0x0d, 0x17, 0x01, 0x00, + 0x80, 0xb5, 0xc0, 0xf7, 0xa5, 0xf9, 0x80, 0xbd, + 0xfe, 0xb5, 0x6c, 0x49, 0x00, 0x20, 0x00, 0x90, + 0xc8, 0x78, 0x6b, 0x4c, 0x6b, 0x4f, 0x43, 0x07, + 0xc0, 0x06, 0xc0, 0x17, 0xdb, 0x0e, 0xe3, 0x58, + 0x3c, 0x00, 0x0c, 0x13, 0x04, 0x00, 0x01, 0x30, + 0x38, 0x62, 0x3b, 0x61, 0x08, 0x1c, 0x80, 0x78, + 0x66, 0x4e, 0x03, 0x22, 0x41, 0x07, 0xa0, 0x36, + 0x02, 0x96, 0x49, 0x0f, 0x31, 0x72, 0x89, 0x00, + 0x61, 0x58, 0x3c, 0x1c, 0x61, 0x61, 0x01, 0x91, + 0xc0, 0x06, 0xc0, 0x0f, 0x78, 0x62, 0x20, 0x1c, + 0x00, 0x27, 0x87, 0x61, 0x00, 0x20, 0x21, 0x1c, + 0xc8, 0x61, 0x59, 0x48, 0x59, 0x49, 0x00, 0x78, + 0x09, 0x79, 0x3c, 0x00, 0x48, 0x13, 0x04, 0x00, + 0x5a, 0x4c, 0x4e, 0x07, 0x76, 0x0f, 0x71, 0x1c, + 0x8c, 0x46, 0xb1, 0x00, 0x8e, 0x46, 0x56, 0x49, + 0x80, 0x31, 0x00, 0x28, 0x24, 0xd0, 0x52, 0x4f, + 0x01, 0x28, 0x7f, 0x78, 0x1a, 0xd0, 0x02, 0x28, + 0x71, 0xd1, 0x4f, 0x48, 0x00, 0x2f, 0x0c, 0xd0, + 0x01, 0x2f, 0x6c, 0xd1, 0x40, 0x79, 0x4d, 0x4d, + 0x40, 0x07, 0x40, 0x0f, 0x82, 0x00, 0xaa, 0x58, + 0x4b, 0x4d, 0x01, 0x30, 0x3c, 0x00, 0x84, 0x13, + 0x04, 0x00, 0xea, 0x61, 0xa0, 0x73, 0x04, 0x22, + 0x4b, 0x48, 0x48, 0x4d, 0xc8, 0x61, 0x4a, 0x48, + 0x00, 0x2f, 0x00, 0xd0, 0x4a, 0x48, 0x2f, 0x1c, + 0x11, 0xe0, 0x42, 0x48, 0x00, 0x2f, 0x55, 0xd1, + 0x07, 0x70, 0x02, 0x27, 0x47, 0x70, 0x3f, 0x48, + 0x40, 0x78, 0x00, 0x28, 0x10, 0xd0, 0x01, 0x28, + 0x01, 0xd0, 0x02, 0x28, 0x4a, 0xd1, 0x3f, 0x48, + 0x3d, 0x4f, 0xc8, 0x61, 0x3f, 0x48, 0x3c, 0x00, + 0xc0, 0x13, 0x04, 0x00, 0x88, 0x61, 0x3a, 0x49, + 0x70, 0x46, 0x08, 0x58, 0x35, 0x1c, 0xb8, 0x61, + 0x60, 0x46, 0x60, 0x73, 0x04, 0xe0, 0x3c, 0x48, + 0x02, 0x22, 0x88, 0x61, 0x3b, 0x48, 0xc8, 0x61, + 0x00, 0x20, 0x32, 0x49, 0x06, 0xe0, 0x0e, 0x18, + 0xb6, 0x78, 0x76, 0x07, 0x76, 0x0f, 0x04, 0x2e, + 0x2f, 0xd8, 0x01, 0x30, 0x90, 0x42, 0xf6, 0xd3, + 0xc8, 0x79, 0x2e, 0x4f, 0xc0, 0x07, 0xc0, 0x0f, + 0x3c, 0x00, 0xfc, 0x13, 0x04, 0x00, 0xf8, 0x60, + 0x33, 0x48, 0x41, 0x68, 0x19, 0x43, 0x41, 0x60, + 0x81, 0x68, 0x19, 0x43, 0x81, 0x60, 0x01, 0x9a, + 0xb9, 0x69, 0x8c, 0x46, 0x11, 0x43, 0xfa, 0x69, + 0x86, 0x68, 0x11, 0x43, 0x8e, 0x43, 0x86, 0x60, + 0x46, 0x68, 0x31, 0x43, 0x41, 0x60, 0x01, 0x99, + 0x0b, 0x43, 0x18, 0x1c, 0x61, 0x46, 0x08, 0x43, + 0x10, 0x43, 0x01, 0x1c, 0x00, 0x22, 0x02, 0x20, + 0xc7, 0xf7, 0x3c, 0x00, 0x38, 0x14, 0x04, 0x00, + 0x03, 0xfa, 0x1e, 0x4e, 0x40, 0x3e, 0x70, 0x78, + 0xc0, 0x08, 0xc0, 0x00, 0x28, 0x43, 0x70, 0x70, + 0x70, 0x1c, 0x01, 0x78, 0x00, 0xe0, 0x29, 0xe0, + 0x08, 0x25, 0xa9, 0x43, 0x01, 0x70, 0x01, 0x20, + 0xc0, 0x43, 0xb0, 0x80, 0x00, 0x21, 0x01, 0x20, + 0xcf, 0xf7, 0x6c, 0xfc, 0x30, 0x1c, 0x80, 0x30, + 0x81, 0x78, 0x09, 0x09, 0x09, 0x01, 0x81, 0x70, + 0x0f, 0x21, 0x01, 0x70, 0x3c, 0x00, 0x74, 0x14, + 0x04, 0x00, 0x16, 0x4a, 0x69, 0x04, 0x11, 0x60, + 0x51, 0x60, 0x02, 0x9e, 0x10, 0x21, 0x32, 0x7a, + 0x7b, 0x6a, 0x00, 0x2b, 0x00, 0xd1, 0x00, 0x21, + 0x11, 0x43, 0x21, 0x73, 0x81, 0x78, 0x29, 0x43, + 0x81, 0x70, 0xe0, 0x78, 0x01, 0x21, 0x08, 0x43, + 0xe0, 0x70, 0xd2, 0xf7, 0xf2, 0xf9, 0x01, 0x20, + 0x00, 0x90, 0x00, 0x98, 0xfe, 0xbd, 0xc0, 0x57, + 0x01, 0x00, 0x6c, 0x43, 0x01, 0x00, 0x3c, 0x00, + 0xb0, 0x14, 0x04, 0x00, 0xa4, 0x6c, 0x01, 0x00, + 0x40, 0x90, 0x07, 0x00, 0xc9, 0x1d, 0x00, 0x00, + 0x81, 0x1d, 0x00, 0x00, 0xa5, 0x1d, 0x00, 0x00, + 0x99, 0x1d, 0x00, 0x00, 0xf1, 0x1d, 0x00, 0x00, + 0x10, 0x00, 0x07, 0x00, 0x00, 0x10, 0x07, 0x00, + 0x03, 0x49, 0x00, 0x20, 0x88, 0x62, 0x08, 0x70, + 0x48, 0x70, 0x08, 0x71, 0x08, 0x62, 0x70, 0x47, + 0xac, 0x7e, 0x01, 0x00, 0x80, 0xb5, 0x01, 0x21, + 0x3c, 0x00, 0xec, 0x14, 0x04, 0x00, 0x00, 0x20, + 0xcd, 0xf7, 0x69, 0xff, 0x80, 0xbd, 0xb0, 0xb5, + 0x0f, 0x48, 0xc0, 0xf7, 0x18, 0xfc, 0x0e, 0x4d, + 0x03, 0x20, 0x28, 0x70, 0x0d, 0x49, 0x0d, 0x48, + 0x0c, 0x39, 0x48, 0x60, 0x0d, 0x48, 0x0a, 0x4c, + 0x88, 0x60, 0x40, 0x21, 0x18, 0x34, 0x20, 0x1c, + 0xbe, 0xf7, 0xc1, 0xff, 0xff, 0x21, 0x68, 0x68, + 0x09, 0x06, 0x08, 0x43, 0x20, 0x60, 0xff, 0x21, + 0x06, 0x22, 0x3c, 0x00, 0x28, 0x15, 0x04, 0x00, + 0x20, 0x1d, 0xbf, 0xf7, 0x79, 0xf8, 0x01, 0x20, + 0xe0, 0x60, 0xb0, 0xbd, 0xc0, 0xa8, 0x13, 0x0a, + 0x20, 0x6e, 0x01, 0x00, 0xc0, 0xa8, 0x13, 0x01, + 0xff, 0xff, 0xff, 0x00, 0x80, 0xb5, 0x02, 0x49, + 0x01, 0x20, 0xc8, 0xf7, 0x45, 0xff, 0x80, 0xbd, + 0x9d, 0x1c, 0x00, 0x00, 0x98, 0xb5, 0x0c, 0x4c, + 0x00, 0x20, 0x60, 0x60, 0xe0, 0x60, 0x0b, 0x4b, + 0x0b, 0x49, 0x82, 0x00, 0x3c, 0x00, 0x64, 0x15, + 0x04, 0x00, 0x01, 0x30, 0x20, 0x28, 0x99, 0x50, + 0xfa, 0xdb, 0x6a, 0x46, 0x09, 0x49, 0x05, 0x20, + 0xbf, 0xf7, 0x2f, 0xfd, 0x00, 0x20, 0xc0, 0x43, + 0x20, 0x60, 0x06, 0x49, 0x20, 0x20, 0x08, 0x60, + 0x48, 0x60, 0x98, 0xbd, 0x00, 0x00, 0x00, 0x40, + 0x07, 0x00, 0x30, 0x74, 0x01, 0x00, 0xa9, 0x75, + 0x00, 0x00, 0xb5, 0x9f, 0x00, 0x00, 0x00, 0x10, + 0x07, 0x00, 0x05, 0x49, 0x00, 0x20, 0x3c, 0x00, + 0xa0, 0x15, 0x04, 0x00, 0x08, 0x60, 0x05, 0x48, + 0x81, 0x78, 0x28, 0x22, 0x91, 0x43, 0x81, 0x70, + 0x81, 0x78, 0x11, 0x43, 0x81, 0x70, 0x70, 0x47, + 0x78, 0x6e, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x70, 0x47, 0x00, 0x00, 0x41, 0x48, 0x10, 0xb5, + 0x00, 0x68, 0x02, 0x21, 0x88, 0x43, 0x3f, 0x49, + 0x08, 0x60, 0x08, 0x1c, 0x00, 0x68, 0x02, 0x21, + 0x08, 0x43, 0x3c, 0x49, 0x08, 0x60, 0x3c, 0x48, + 0x3c, 0x00, 0xdc, 0x15, 0x04, 0x00, 0x40, 0x68, + 0x80, 0x21, 0x88, 0x43, 0x3a, 0x49, 0x48, 0x60, + 0x08, 0x1c, 0x00, 0x68, 0x80, 0x21, 0x08, 0x43, + 0x37, 0x49, 0x08, 0x60, 0x37, 0x48, 0x01, 0x7a, + 0x01, 0x24, 0x21, 0x43, 0x01, 0x72, 0x01, 0x7a, + 0x02, 0x22, 0x11, 0x43, 0x01, 0x72, 0x01, 0x7a, + 0x04, 0x22, 0x91, 0x43, 0x01, 0x72, 0x01, 0x7a, + 0x08, 0x22, 0x11, 0x43, 0x01, 0x72, 0x01, 0x7b, + 0x21, 0x43, 0x3c, 0x00, 0x18, 0x16, 0x04, 0x00, + 0x01, 0x73, 0x01, 0x7b, 0x02, 0x22, 0x11, 0x43, + 0x01, 0x73, 0x01, 0x7b, 0x04, 0x22, 0x11, 0x43, + 0x01, 0x73, 0x01, 0x7b, 0x08, 0x22, 0x11, 0x43, + 0x01, 0x73, 0x2e, 0x21, 0x41, 0x73, 0x81, 0x7b, + 0x38, 0x22, 0x91, 0x43, 0x28, 0x31, 0x81, 0x73, + 0x20, 0x21, 0x41, 0x74, 0x81, 0x7b, 0xc9, 0x08, + 0xc9, 0x00, 0x03, 0x31, 0x81, 0x73, 0x22, 0x21, + 0xc1, 0x73, 0x20, 0x49, 0x3c, 0x00, 0x54, 0x16, + 0x04, 0x00, 0x09, 0x7a, 0x41, 0x72, 0x1e, 0x49, + 0x49, 0x7a, 0x01, 0x74, 0x3c, 0x22, 0x02, 0x77, + 0x01, 0x1c, 0x10, 0x31, 0x4a, 0x73, 0x50, 0x23, + 0x8b, 0x73, 0x5a, 0x23, 0xcb, 0x73, 0x0d, 0x23, + 0x01, 0x1c, 0x20, 0x31, 0x0b, 0x70, 0x17, 0x4b, + 0x43, 0x84, 0x0e, 0x23, 0x4b, 0x70, 0x00, 0x21, + 0x41, 0x82, 0x30, 0x21, 0x01, 0x70, 0x05, 0x21, + 0x41, 0x70, 0x04, 0x21, 0x41, 0x71, 0x3c, 0x00, + 0x90, 0x16, 0x04, 0x00, 0x84, 0x71, 0xc4, 0x71, + 0x0c, 0x21, 0x01, 0x71, 0xf8, 0x21, 0x41, 0x80, + 0x0f, 0x49, 0xca, 0x72, 0x8a, 0x72, 0x03, 0x22, + 0x0a, 0x72, 0x09, 0x22, 0x4a, 0x72, 0x08, 0x22, + 0x0a, 0x73, 0x02, 0x7a, 0x40, 0x23, 0x1a, 0x43, + 0x02, 0x72, 0x4c, 0x73, 0xff, 0xf7, 0xa2, 0xfc, + 0x08, 0x48, 0x01, 0x78, 0x21, 0x43, 0x01, 0x70, + 0x10, 0xbd, 0x00, 0x00, 0xf0, 0x00, 0x07, 0x00, + 0x3c, 0x00, 0xcc, 0x16, 0x04, 0x00, 0xf4, 0x00, + 0x07, 0x00, 0x0c, 0x80, 0x07, 0x00, 0x76, 0x46, + 0x01, 0x00, 0x24, 0x09, 0x00, 0x00, 0x80, 0x80, + 0x07, 0x00, 0xa0, 0x80, 0x07, 0x00, 0x80, 0xb5, + 0x18, 0x21, 0x09, 0x48, 0xbe, 0xf7, 0xd7, 0xfe, + 0x08, 0x48, 0x00, 0x21, 0x3c, 0x38, 0x41, 0x60, + 0x81, 0x60, 0xc1, 0x60, 0x01, 0x61, 0x41, 0x61, + 0x81, 0x61, 0x01, 0x21, 0x01, 0x62, 0xff, 0xf7, + 0x5c, 0xff, 0x3c, 0x00, 0x08, 0x17, 0x04, 0x00, + 0xc0, 0xf7, 0x6c, 0xff, 0x80, 0xbd, 0x00, 0x00, + 0x24, 0x7e, 0x01, 0x00, 0xb0, 0xb5, 0x21, 0x48, + 0x00, 0x68, 0x40, 0x08, 0x1f, 0x49, 0x40, 0x00, + 0x08, 0x60, 0x08, 0x1c, 0x00, 0x68, 0x01, 0x21, + 0x08, 0x43, 0x1c, 0x49, 0x08, 0x60, 0x1c, 0x4a, + 0x10, 0x79, 0x01, 0x21, 0x08, 0x43, 0x10, 0x71, + 0x10, 0x79, 0x02, 0x21, 0x88, 0x43, 0x10, 0x71, + 0x00, 0xf0, 0x6c, 0xf8, 0x3c, 0x00, 0x44, 0x17, + 0x04, 0x00, 0x10, 0x7a, 0x01, 0x21, 0x08, 0x43, + 0x10, 0x72, 0x10, 0x7a, 0xfe, 0x21, 0x88, 0x43, + 0x0a, 0x30, 0x10, 0x72, 0x28, 0x20, 0x90, 0x72, + 0x5a, 0x20, 0xd0, 0x72, 0x11, 0x4d, 0x14, 0x20, + 0x28, 0x77, 0x2c, 0x1c, 0x10, 0x34, 0xa0, 0x73, + 0x16, 0x20, 0xa8, 0x75, 0x18, 0x20, 0xe8, 0x75, + 0xff, 0xf7, 0xa1, 0xfc, 0x0c, 0x48, 0x68, 0x86, + 0xe0, 0x7b, 0x40, 0x06, 0x40, 0x0e, 0x3c, 0x00, + 0x80, 0x17, 0x04, 0x00, 0x0e, 0x21, 0x08, 0x43, + 0xe0, 0x73, 0xe0, 0x7b, 0x80, 0x21, 0x08, 0x43, + 0xe0, 0x73, 0x07, 0x48, 0x41, 0x79, 0x04, 0x22, + 0x11, 0x43, 0x41, 0x71, 0xb0, 0xbd, 0x00, 0x00, + 0xf0, 0x00, 0x07, 0x00, 0x00, 0x80, 0x07, 0x00, + 0x30, 0x80, 0x07, 0x00, 0xff, 0x01, 0x00, 0x00, + 0x50, 0x00, 0x07, 0x00, 0x80, 0xb5, 0xff, 0xf7, + 0xaf, 0xff, 0x00, 0x20, 0x14, 0x49, 0xc0, 0x43, + 0x3c, 0x00, 0xbc, 0x17, 0x04, 0x00, 0x88, 0x60, + 0xc1, 0xf7, 0x0b, 0xf9, 0x13, 0x49, 0x00, 0x20, + 0x48, 0x62, 0xc8, 0x60, 0x48, 0x61, 0x08, 0x61, + 0x88, 0x61, 0xc8, 0x61, 0x0f, 0x4b, 0x08, 0x62, + 0x0f, 0x4a, 0x08, 0x63, 0x38, 0x33, 0x1a, 0x80, + 0x01, 0x22, 0x5a, 0x71, 0x0b, 0x4a, 0x40, 0x32, + 0xd0, 0x60, 0x13, 0x60, 0x08, 0x23, 0x13, 0x81, + 0x50, 0x60, 0x09, 0x4a, 0x8a, 0x62, 0xff, 0x22, + 0x0a, 0x70, 0x3c, 0x00, 0xf8, 0x17, 0x04, 0x00, + 0x48, 0x70, 0x05, 0x48, 0x00, 0x21, 0x00, 0x22, + 0x50, 0x30, 0x00, 0x23, 0x0e, 0xc0, 0xc1, 0xf7, + 0xff, 0xf8, 0x80, 0xbd, 0x00, 0x30, 0x07, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0xbe, 0xba, 0x00, 0x00, + 0x85, 0x75, 0x00, 0x00, 0x03, 0x48, 0x10, 0x21, + 0x81, 0x71, 0x02, 0x21, 0xc1, 0x71, 0x30, 0x21, + 0x41, 0x72, 0x70, 0x47, 0x00, 0x80, 0x07, 0x00, + 0x70, 0x47, 0x00, 0x00, 0x3c, 0x00, 0x34, 0x18, + 0x04, 0x00, 0x00, 0xb5, 0xc1, 0xf7, 0xdb, 0xfb, + 0x00, 0xbd, 0x70, 0x47, 0x00, 0x00, 0x80, 0xb5, + 0xcd, 0xf7, 0x87, 0xfd, 0x01, 0x49, 0x88, 0x60, + 0x80, 0xbd, 0x50, 0xd9, 0x01, 0x00, 0x80, 0xb5, + 0x06, 0x21, 0x05, 0x48, 0xbe, 0xf7, 0xfd, 0xfd, + 0x04, 0x49, 0x00, 0x20, 0x04, 0x39, 0x08, 0x60, + 0x00, 0xf0, 0x67, 0xf8, 0x00, 0xf0, 0x03, 0xf8, + 0x80, 0xbd, 0xec, 0x67, 0x01, 0x00, 0x3c, 0x00, + 0x70, 0x18, 0x04, 0x00, 0x10, 0xb5, 0x07, 0x4c, + 0x2c, 0x21, 0x20, 0x1c, 0xbe, 0xf7, 0x10, 0xfe, + 0x01, 0x20, 0x20, 0x70, 0x03, 0x49, 0x00, 0x20, + 0x1c, 0x39, 0xc8, 0x60, 0x08, 0x61, 0x88, 0x61, + 0x10, 0xbd, 0x00, 0x00, 0x78, 0x69, 0x01, 0x00, + 0x80, 0xb5, 0xcd, 0xf7, 0x5d, 0xfd, 0x09, 0x49, + 0x88, 0x60, 0x09, 0x49, 0x08, 0x20, 0xd0, 0xf7, + 0x73, 0xfd, 0x08, 0x49, 0x09, 0x20, 0xd0, 0xf7, + 0x3c, 0x00, 0xac, 0x18, 0x04, 0x00, 0x6f, 0xfd, + 0x07, 0x49, 0x11, 0x20, 0xd0, 0xf7, 0x6b, 0xfd, + 0x06, 0x48, 0xc2, 0xf7, 0x74, 0xf9, 0x80, 0xbd, + 0x00, 0x00, 0x78, 0x69, 0x01, 0x00, 0x21, 0x35, + 0x00, 0x00, 0xa1, 0x38, 0x00, 0x00, 0x45, 0x34, + 0x00, 0x00, 0xbd, 0x26, 0x01, 0x00, 0x80, 0xb5, + 0x86, 0xb0, 0x0f, 0x48, 0xc4, 0xf7, 0x45, 0xf9, + 0x00, 0xf0, 0x45, 0xf8, 0xff, 0xf7, 0xd7, 0xff, + 0xff, 0xf7, 0x3c, 0x00, 0xe8, 0x18, 0x04, 0x00, + 0xab, 0xff, 0x0c, 0x49, 0x03, 0x20, 0xd0, 0xf7, + 0x4d, 0xfd, 0x0b, 0x48, 0x69, 0x46, 0x00, 0x90, + 0x00, 0x20, 0x01, 0x90, 0x09, 0x48, 0x04, 0x90, + 0x09, 0x48, 0x02, 0x90, 0x09, 0x48, 0x03, 0x90, + 0x09, 0x48, 0x05, 0x90, 0x00, 0x20, 0xc4, 0xf7, + 0xcf, 0xf8, 0x06, 0xb0, 0x80, 0xbd, 0x00, 0x00, + 0xf4, 0x67, 0x01, 0x00, 0x45, 0x35, 0x00, 0x00, + 0x95, 0x32, 0x00, 0x00, 0x3c, 0x00, 0x24, 0x19, + 0x04, 0x00, 0xa0, 0x7d, 0x01, 0x00, 0xfd, 0x32, + 0x00, 0x00, 0xcd, 0x31, 0x00, 0x00, 0x45, 0x7d, + 0x01, 0x00, 0x10, 0xb5, 0xcd, 0xf7, 0xd5, 0xfc, + 0x09, 0x48, 0x09, 0x4c, 0x30, 0x21, 0x60, 0x61, + 0x08, 0x48, 0x74, 0x30, 0xbe, 0xf7, 0xa9, 0xfd, + 0x00, 0x20, 0xa0, 0x62, 0x06, 0x49, 0x20, 0x61, + 0xe1, 0x63, 0x60, 0x64, 0xa0, 0x64, 0x14, 0x21, + 0x21, 0x65, 0x60, 0x62, 0x10, 0xbd, 0x3c, 0x00, + 0x60, 0x19, 0x04, 0x00, 0xb9, 0x75, 0x00, 0x00, + 0x44, 0x7d, 0x01, 0x00, 0x70, 0x17, 0x00, 0x00, + 0x80, 0xb5, 0x02, 0x21, 0x09, 0x20, 0x04, 0x4a, + 0xd1, 0xf7, 0xe8, 0xfe, 0xcd, 0xf7, 0xec, 0xfc, + 0x02, 0x49, 0x08, 0x63, 0x80, 0xbd, 0x00, 0x00, + 0x39, 0x39, 0x00, 0x00, 0x44, 0x7d, 0x01, 0x00, + 0x80, 0xb5, 0xac, 0x21, 0x03, 0x48, 0xbe, 0xf7, + 0x83, 0xfd, 0x00, 0xf0, 0x51, 0xf8, 0x00, 0xf0, + 0x3c, 0x00, 0x9c, 0x19, 0x04, 0x00, 0x49, 0xf8, + 0x80, 0xbd, 0xa4, 0x6c, 0x01, 0x00, 0x08, 0xb5, + 0x00, 0xf0, 0x4d, 0xf8, 0x00, 0xf0, 0x45, 0xf8, + 0x00, 0x21, 0x16, 0x20, 0x18, 0x4a, 0xd1, 0xf7, + 0xc8, 0xfe, 0x17, 0x4a, 0x04, 0x21, 0x10, 0x1c, + 0x40, 0x30, 0x01, 0x70, 0x00, 0x21, 0x81, 0x70, + 0x11, 0x21, 0xc1, 0x80, 0x14, 0x49, 0x01, 0x81, + 0x10, 0x1c, 0x80, 0x30, 0xc1, 0x78, 0x08, 0x22, + 0x91, 0x43, 0x3c, 0x00, 0xd8, 0x19, 0x04, 0x00, + 0xc1, 0x70, 0xc1, 0x78, 0x11, 0x43, 0xc1, 0x70, + 0x6a, 0x46, 0x0f, 0x49, 0x14, 0x20, 0xbf, 0xf7, + 0xf5, 0xfa, 0x0e, 0x49, 0x07, 0x20, 0xd0, 0xf7, + 0xcd, 0xfc, 0x0d, 0x49, 0x0f, 0x20, 0xd0, 0xf7, + 0xc9, 0xfc, 0xcd, 0xf7, 0xab, 0xfc, 0x0b, 0x49, + 0x08, 0x60, 0x0a, 0x48, 0x44, 0x38, 0x80, 0x68, + 0x00, 0x28, 0x02, 0xd0, 0x00, 0x20, 0xc6, 0xf7, + 0x6f, 0xf9, 0x08, 0xbd, 0x3c, 0x00, 0x14, 0x1a, + 0x04, 0x00, 0xb5, 0x3b, 0x00, 0x00, 0x00, 0x90, + 0x07, 0x00, 0xe7, 0xfd, 0x00, 0x00, 0x8d, 0x41, + 0x00, 0x00, 0xcd, 0x48, 0x00, 0x00, 0xd9, 0x49, + 0x00, 0x00, 0xa4, 0x6c, 0x01, 0x00, 0x80, 0xb5, + 0x00, 0xf0, 0x6f, 0xfc, 0x80, 0xbd, 0x70, 0x47, + 0x00, 0x00, 0x80, 0xb5, 0x00, 0xf0, 0x61, 0xfc, + 0x80, 0xbd, 0x70, 0x47, 0x00, 0x00, 0xb0, 0xb5, + 0x30, 0x21, 0x0c, 0x48, 0xbe, 0xf7, 0x3c, 0x00, + 0x50, 0x1a, 0x04, 0x00, 0x25, 0xfd, 0x0b, 0x4c, + 0x00, 0x25, 0x0a, 0x48, 0x84, 0x3c, 0x38, 0x22, + 0x03, 0x21, 0x70, 0x38, 0x65, 0x60, 0xbe, 0xf7, + 0xdd, 0xfd, 0x06, 0x48, 0x38, 0x22, 0x01, 0x21, + 0x38, 0x38, 0xbe, 0xf7, 0xd7, 0xfd, 0x0e, 0x20, + 0xa5, 0x60, 0x60, 0x70, 0x20, 0x70, 0x00, 0xf0, + 0x1d, 0xf8, 0xb0, 0xbd, 0x94, 0x67, 0x01, 0x00, + 0x04, 0x49, 0x00, 0xb5, 0x01, 0x20, 0x48, 0x60, + 0x3c, 0x00, 0x8c, 0x1a, 0x04, 0x00, 0x88, 0x60, + 0xc8, 0x60, 0xc3, 0xf7, 0xf8, 0xff, 0x00, 0xbd, + 0x00, 0x00, 0xd4, 0x67, 0x01, 0x00, 0x80, 0xb5, + 0x02, 0x21, 0x0a, 0x20, 0x02, 0x4a, 0xd1, 0xf7, + 0x50, 0xfe, 0x80, 0xbd, 0x00, 0x00, 0x1d, 0x5a, + 0x00, 0x00, 0x80, 0xb5, 0x00, 0xf0, 0x05, 0xf8, + 0x80, 0xbd, 0x80, 0xb5, 0x00, 0xf0, 0xfd, 0xfb, + 0x80, 0xbd, 0x80, 0xb5, 0x02, 0x49, 0x04, 0x20, + 0xd0, 0xf7, 0x3c, 0x00, 0xc8, 0x1a, 0x04, 0x00, + 0x61, 0xfc, 0x80, 0xbd, 0x65, 0x1f, 0x00, 0x00, + 0x00, 0x21, 0x17, 0x48, 0xc9, 0x43, 0x80, 0xb5, + 0x16, 0x4b, 0x01, 0x70, 0x18, 0x1c, 0x10, 0x22, + 0x20, 0x30, 0x02, 0x71, 0x00, 0x22, 0x10, 0x33, + 0x9a, 0x73, 0x42, 0x79, 0x04, 0x23, 0x1a, 0x43, + 0x42, 0x71, 0x42, 0x79, 0x18, 0x23, 0x9a, 0x43, + 0x08, 0x32, 0x42, 0x71, 0x08, 0x1c, 0xd7, 0xf7, + 0x59, 0xf8, 0x00, 0x28, 0x3c, 0x00, 0x04, 0x1b, + 0x04, 0x00, 0x03, 0xd1, 0x01, 0x21, 0x9a, 0x20, + 0xbf, 0xf7, 0xcb, 0xfb, 0x50, 0x20, 0x09, 0x49, + 0x50, 0x22, 0x0a, 0x60, 0xc8, 0x60, 0x88, 0x60, + 0x48, 0x60, 0x08, 0x61, 0x01, 0x20, 0x48, 0x61, + 0x00, 0x20, 0xd7, 0xf7, 0xd8, 0xf8, 0x04, 0x49, + 0xff, 0x20, 0x08, 0x60, 0x80, 0xbd, 0xf4, 0x6b, + 0x01, 0x00, 0x30, 0x00, 0x07, 0x00, 0x04, 0x02, + 0x07, 0x00, 0xf4, 0x74, 0x01, 0x00, 0x3c, 0x00, + 0x40, 0x1b, 0x04, 0x00, 0x80, 0xb5, 0xd7, 0xf7, + 0xfb, 0xf8, 0x80, 0xbd, 0x10, 0xb5, 0xff, 0xf7, + 0xab, 0xfb, 0xbf, 0xf7, 0xdd, 0xfb, 0x81, 0x48, + 0xcd, 0xf7, 0x98, 0xfa, 0x00, 0x24, 0x23, 0x1c, + 0x04, 0x22, 0x04, 0x21, 0x00, 0x20, 0x01, 0xf0, + 0x39, 0xfa, 0x00, 0x28, 0x01, 0xd0, 0xbf, 0xf7, + 0xc9, 0xfb, 0x23, 0x1c, 0x00, 0x22, 0xff, 0x21, + 0x00, 0x20, 0x01, 0xf0, 0x2f, 0xfa, 0x00, 0x28, + 0x3c, 0x00, 0x7c, 0x1b, 0x04, 0x00, 0x01, 0xd0, + 0xbf, 0xf7, 0xbf, 0xfb, 0x23, 0x1c, 0x00, 0x22, + 0xff, 0x21, 0x00, 0x20, 0x01, 0xf0, 0x25, 0xfa, + 0x00, 0x28, 0x01, 0xd0, 0xbf, 0xf7, 0xb5, 0xfb, + 0xc4, 0xf7, 0x27, 0xff, 0x70, 0x48, 0x84, 0x70, + 0x6f, 0x49, 0x7f, 0x20, 0x88, 0x70, 0x6e, 0x49, + 0x0c, 0x60, 0x03, 0x20, 0x08, 0x60, 0x6b, 0x48, + 0x44, 0x70, 0x6c, 0x48, 0x04, 0x80, 0x69, 0x48, + 0xc0, 0x78, 0x3c, 0x00, 0xb8, 0x1b, 0x04, 0x00, + 0x08, 0x21, 0x08, 0x43, 0x67, 0x49, 0xc8, 0x70, + 0x08, 0x1c, 0xc0, 0x78, 0x04, 0x21, 0x08, 0x43, + 0x64, 0x49, 0xc8, 0x70, 0x01, 0xf0, 0x7e, 0xfa, + 0xff, 0xf7, 0x7e, 0xff, 0xff, 0xf7, 0x2c, 0xfe, + 0x01, 0xf0, 0x46, 0xfb, 0xff, 0xf7, 0x18, 0xfb, + 0x01, 0xf0, 0x52, 0xfa, 0xff, 0xf7, 0x82, 0xfb, + 0x5f, 0x48, 0xc1, 0x68, 0x10, 0x22, 0x91, 0x43, + 0xc1, 0x60, 0x01, 0x69, 0x3c, 0x00, 0xf4, 0x1b, + 0x04, 0x00, 0x5d, 0x4a, 0x11, 0x43, 0x01, 0x61, + 0x01, 0x69, 0xd2, 0x0a, 0x91, 0x43, 0x01, 0x61, + 0xc1, 0x68, 0x5a, 0x4a, 0x11, 0x43, 0xc1, 0x60, + 0x81, 0x6a, 0x59, 0x4a, 0x11, 0x43, 0x81, 0x62, + 0x00, 0xf0, 0x77, 0xf9, 0x01, 0xf0, 0x1f, 0xf8, + 0x00, 0xf0, 0x93, 0xfa, 0x01, 0xf0, 0x99, 0xfb, + 0x00, 0xf0, 0xf1, 0xff, 0x00, 0xf0, 0x99, 0xfc, + 0x00, 0xf0, 0xdd, 0xfc, 0x00, 0xf0, 0x3c, 0x00, + 0x30, 0x1c, 0x04, 0x00, 0x83, 0xfc, 0xff, 0xf7, + 0xb3, 0xfc, 0x01, 0xf0, 0x31, 0xfa, 0x01, 0xf0, + 0x71, 0xfa, 0xff, 0xf7, 0x87, 0xfa, 0xff, 0xf7, + 0x9b, 0xfa, 0x01, 0x21, 0x01, 0x20, 0x4b, 0x4a, + 0xd1, 0xf7, 0x7c, 0xfd, 0x01, 0x21, 0x02, 0x20, + 0x49, 0x4a, 0xd1, 0xf7, 0x77, 0xfd, 0x02, 0x21, + 0x03, 0x20, 0x48, 0x4a, 0xd1, 0xf7, 0x72, 0xfd, + 0x02, 0x21, 0x04, 0x20, 0x46, 0x4a, 0xd1, 0xf7, + 0x3c, 0x00, 0x6c, 0x1c, 0x04, 0x00, 0x6d, 0xfd, + 0x02, 0x21, 0x05, 0x20, 0x45, 0x4a, 0xd1, 0xf7, + 0x68, 0xfd, 0x02, 0x21, 0x06, 0x20, 0x43, 0x4a, + 0xd1, 0xf7, 0x63, 0xfd, 0x01, 0x21, 0x07, 0x20, + 0x42, 0x4a, 0xd1, 0xf7, 0x5e, 0xfd, 0x02, 0x21, + 0x17, 0x20, 0x40, 0x4a, 0xd1, 0xf7, 0x59, 0xfd, + 0x02, 0x21, 0x08, 0x20, 0x3f, 0x4a, 0xd1, 0xf7, + 0x54, 0xfd, 0xff, 0xf7, 0xc8, 0xfd, 0x3d, 0x48, + 0x04, 0x60, 0x3c, 0x00, 0xa8, 0x1c, 0x04, 0x00, + 0x44, 0x60, 0xff, 0xf7, 0x17, 0xfa, 0xff, 0xf7, + 0x09, 0xfa, 0xff, 0xf7, 0x4f, 0xfc, 0x00, 0xf0, + 0x43, 0xf9, 0xff, 0xf7, 0x33, 0xfa, 0xff, 0xf7, + 0xfb, 0xfa, 0x01, 0xf0, 0x85, 0xf8, 0x01, 0xf0, + 0xeb, 0xf9, 0x01, 0xf0, 0x23, 0xfa, 0x01, 0xf0, + 0x71, 0xf9, 0x00, 0xf0, 0xe3, 0xff, 0xff, 0xf7, + 0x6f, 0xfa, 0x00, 0xf0, 0xaf, 0xf9, 0x00, 0xf0, + 0xbd, 0xf9, 0x00, 0xf0, 0x3c, 0x00, 0xe4, 0x1c, + 0x04, 0x00, 0xad, 0xfc, 0x00, 0xf0, 0x9b, 0xfe, + 0xff, 0xf7, 0xcd, 0xfa, 0xff, 0xf7, 0xab, 0xfe, + 0x00, 0xf0, 0xc3, 0xf9, 0xff, 0xf7, 0xab, 0xfd, + 0x00, 0xf0, 0x8d, 0xff, 0x00, 0xf0, 0x21, 0xff, + 0x00, 0xf0, 0x65, 0xf9, 0x00, 0xf0, 0x97, 0xf9, + 0x00, 0xf0, 0xfd, 0xfe, 0x00, 0xf0, 0xe5, 0xfe, + 0x00, 0xf0, 0x3f, 0xf9, 0x00, 0xf0, 0x73, 0xf9, + 0xff, 0xf7, 0x37, 0xfe, 0x00, 0xf0, 0x3c, 0x00, + 0x20, 0x1d, 0x04, 0x00, 0x21, 0xf9, 0x00, 0xf0, + 0x73, 0xfb, 0xff, 0xf7, 0xe5, 0xfb, 0x00, 0xf0, + 0xd3, 0xfb, 0xff, 0xf7, 0xa9, 0xfe, 0x00, 0xf0, + 0xbb, 0xfb, 0x00, 0xf0, 0x09, 0xff, 0x00, 0xf0, + 0xdb, 0xf9, 0x18, 0x48, 0xc9, 0xf7, 0x56, 0xf8, + 0x17, 0x48, 0xc9, 0xf7, 0x2b, 0xf8, 0x00, 0x22, + 0x01, 0x21, 0xf0, 0x20, 0xd1, 0xf7, 0x2e, 0xfd, + 0x00, 0x20, 0x10, 0xbd, 0xa9, 0x69, 0x00, 0x00, + 0x3c, 0x00, 0x5c, 0x1d, 0x04, 0x00, 0x00, 0x00, + 0x07, 0x00, 0xf0, 0x00, 0x07, 0x00, 0x2c, 0x00, + 0x07, 0x00, 0x00, 0x10, 0x07, 0x00, 0x3c, 0x00, + 0x08, 0x00, 0xc0, 0x3f, 0x74, 0x38, 0xfc, 0xdf, + 0x7f, 0x38, 0x55, 0x69, 0x00, 0x00, 0xe5, 0x13, + 0x00, 0x00, 0x61, 0x0c, 0x00, 0x00, 0x6d, 0x0c, + 0x00, 0x00, 0x3d, 0x0c, 0x00, 0x00, 0xf1, 0x0d, + 0x00, 0x00, 0xc5, 0x33, 0x00, 0x00, 0x3d, 0x0f, + 0x00, 0x00, 0x3c, 0x00, 0x98, 0x1d, 0x04, 0x00, + 0xad, 0xd8, 0x00, 0x00, 0x80, 0x00, 0x07, 0x00, + 0x50, 0x57, 0x01, 0x00, 0x04, 0x40, 0x01, 0x00, + 0x80, 0xb5, 0x01, 0xf0, 0xa9, 0xf9, 0x00, 0xf0, + 0xc9, 0xf8, 0xff, 0xf7, 0xc5, 0xfe, 0x01, 0xf0, + 0x03, 0xfb, 0x01, 0xf0, 0x93, 0xfa, 0xff, 0xf7, + 0xcb, 0xf9, 0x2c, 0x48, 0xff, 0xf7, 0xe8, 0xf9, + 0x00, 0xf0, 0xaa, 0xf8, 0x00, 0xf0, 0x58, 0xff, + 0xff, 0xf7, 0x34, 0xfd, 0x3c, 0x00, 0xd4, 0x1d, + 0x04, 0x00, 0xff, 0xf7, 0xf2, 0xfb, 0xff, 0xf7, + 0x7a, 0xfa, 0xff, 0xf7, 0x00, 0xfa, 0x00, 0xf0, + 0x34, 0xf9, 0x00, 0xf0, 0x3c, 0xf9, 0x01, 0xf0, + 0xe2, 0xf8, 0xff, 0xf7, 0x7a, 0xf9, 0xff, 0xf7, + 0x72, 0xf9, 0xff, 0xf7, 0x9a, 0xf9, 0x01, 0xf0, + 0x66, 0xf9, 0x01, 0xf0, 0x8e, 0xf9, 0x01, 0xf0, + 0xe0, 0xf8, 0x00, 0xf0, 0x06, 0xff, 0x00, 0xf0, + 0xf0, 0xfb, 0x00, 0xf0, 0x46, 0xfb, 0x3c, 0x00, + 0x10, 0x1e, 0x04, 0x00, 0x00, 0xf0, 0xbc, 0xff, + 0x00, 0xf0, 0xe4, 0xfc, 0x00, 0xf0, 0x20, 0xfe, + 0xff, 0xf7, 0x40, 0xfa, 0xff, 0xf7, 0x46, 0xfe, + 0xff, 0xf7, 0x56, 0xfd, 0x00, 0xf0, 0x2c, 0xf9, + 0x00, 0xf0, 0xfa, 0xfe, 0x00, 0xf0, 0x8a, 0xfe, + 0x00, 0xf0, 0xd4, 0xf8, 0x00, 0xf0, 0xb4, 0xf8, + 0x00, 0xf0, 0x78, 0xfe, 0x00, 0xf0, 0x4e, 0xfe, + 0x00, 0xf0, 0xde, 0xf8, 0xff, 0xf7, 0xac, 0xfd, + 0x3c, 0x00, 0x4c, 0x1e, 0x04, 0x00, 0x00, 0xf0, + 0x8c, 0xf8, 0x00, 0xf0, 0xf8, 0xfa, 0xff, 0xf7, + 0x76, 0xfb, 0xff, 0xf7, 0x20, 0xfe, 0x01, 0xf0, + 0xa6, 0xfa, 0x00, 0xf0, 0x48, 0xfb, 0x00, 0xf0, + 0x7c, 0xfe, 0x00, 0xf0, 0x5c, 0xf9, 0xbe, 0xf7, + 0x57, 0xfd, 0x00, 0x20, 0x80, 0xbd, 0x80, 0x38, + 0x01, 0x00, 0x01, 0x49, 0x00, 0x20, 0x08, 0x60, + 0x70, 0x47, 0xa8, 0x7e, 0x01, 0x00, 0x10, 0xb5, + 0x04, 0x1c, 0x3c, 0x00, 0x88, 0x1e, 0x04, 0x00, + 0x01, 0xd1, 0xbf, 0xf7, 0x39, 0xfa, 0x0f, 0x48, + 0x7d, 0x21, 0xc9, 0x00, 0x84, 0x60, 0x01, 0x80, + 0x0d, 0x49, 0x01, 0x61, 0x80, 0x21, 0x41, 0x80, + 0x00, 0x21, 0xc1, 0x60, 0x01, 0x62, 0x0b, 0x48, + 0x41, 0x80, 0x14, 0x21, 0x81, 0x80, 0x07, 0x21, + 0x41, 0x81, 0x06, 0x4a, 0x46, 0x23, 0x04, 0x32, + 0x05, 0x24, 0x13, 0x70, 0x54, 0x70, 0x0a, 0x21, + 0x91, 0x70, 0x81, 0x76, 0x3c, 0x00, 0xc4, 0x1e, + 0x04, 0x00, 0x03, 0x76, 0x04, 0x81, 0x10, 0xbd, + 0x00, 0x00, 0xc8, 0x74, 0x01, 0x00, 0x00, 0x87, + 0x93, 0x03, 0x30, 0x00, 0x07, 0x00, 0x09, 0x48, + 0x80, 0xb5, 0x01, 0x69, 0x42, 0x69, 0x11, 0x43, + 0x82, 0x69, 0xc0, 0x69, 0x11, 0x43, 0x01, 0x43, + 0x00, 0x22, 0x03, 0x20, 0xc6, 0xf7, 0xbf, 0xfc, + 0xcc, 0xf7, 0x1b, 0xfa, 0x00, 0x20, 0xc2, 0xf7, + 0x92, 0xf9, 0x80, 0xbd, 0x00, 0x00, 0x3c, 0x00, + 0x00, 0x1f, 0x04, 0x00, 0xa4, 0x6c, 0x01, 0x00, + 0x05, 0x48, 0x80, 0xb5, 0x00, 0x21, 0x81, 0x60, + 0x02, 0x21, 0xc1, 0x60, 0x03, 0x39, 0x41, 0x60, + 0xc7, 0xf7, 0x3a, 0xff, 0x80, 0xbd, 0x00, 0x00, + 0x40, 0x20, 0x07, 0x00, 0x08, 0xb5, 0x6a, 0x46, + 0x04, 0x49, 0x15, 0x20, 0xbf, 0xf7, 0x54, 0xf8, + 0x01, 0x20, 0x03, 0x49, 0x40, 0x05, 0x08, 0x60, + 0x48, 0x60, 0x08, 0xbd, 0xa5, 0x21, 0x01, 0x00, + 0x3c, 0x00, 0x3c, 0x1f, 0x04, 0x00, 0x00, 0x10, + 0x07, 0x00, 0x70, 0x47, 0x00, 0x00, 0x06, 0x48, + 0x80, 0xb5, 0x80, 0x68, 0xc0, 0x01, 0x80, 0x0f, + 0x05, 0xd1, 0x03, 0x22, 0xc1, 0x43, 0xc6, 0xf7, + 0xba, 0xfc, 0xd6, 0xf7, 0x00, 0xfe, 0x80, 0xbd, + 0x00, 0x00, 0x10, 0x00, 0x07, 0x00, 0x70, 0x47, + 0x00, 0x00, 0x80, 0xb5, 0x02, 0x21, 0x2a, 0x20, + 0x06, 0x4a, 0xd1, 0xf7, 0xea, 0xfb, 0x00, 0x22, + 0x07, 0x20, 0x3c, 0x00, 0x78, 0x1f, 0x04, 0x00, + 0x04, 0x49, 0xbe, 0xf7, 0xed, 0xfe, 0x04, 0x48, + 0xc7, 0xf7, 0x58, 0xfc, 0x80, 0xbd, 0x00, 0x00, + 0x8d, 0x89, 0x00, 0x00, 0xd5, 0x9b, 0x00, 0x00, + 0x10, 0x46, 0x01, 0x00, 0x02, 0x48, 0x00, 0x21, + 0x00, 0x22, 0x00, 0x23, 0x0e, 0xc0, 0x70, 0x47, + 0x80, 0x6e, 0x01, 0x00, 0x80, 0xb5, 0x02, 0x21, + 0x2c, 0x20, 0x06, 0x4a, 0xd1, 0xf7, 0xcc, 0xfb, + 0x00, 0x22, 0x00, 0x20, 0x3c, 0x00, 0xb4, 0x1f, + 0x04, 0x00, 0x04, 0x49, 0xbe, 0xf7, 0xcf, 0xfe, + 0x04, 0x49, 0x02, 0x20, 0xc8, 0xf7, 0x0b, 0xfa, + 0x80, 0xbd, 0x05, 0x8a, 0x00, 0x00, 0xe9, 0x9b, + 0x00, 0x00, 0xb1, 0x8b, 0x00, 0x00, 0x02, 0x48, + 0x00, 0x21, 0x00, 0x22, 0x00, 0x23, 0x0e, 0xc0, + 0x70, 0x47, 0x10, 0x75, 0x01, 0x00, 0x80, 0xb5, + 0x02, 0x21, 0x2b, 0x20, 0x04, 0x4a, 0xd1, 0xf7, + 0xae, 0xfb, 0x00, 0x22, 0x02, 0x20, 0x3c, 0x00, + 0xf0, 0x1f, 0x04, 0x00, 0x02, 0x49, 0xbe, 0xf7, + 0xb1, 0xfe, 0x80, 0xbd, 0x2d, 0x8a, 0x00, 0x00, + 0x8d, 0x8c, 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x80, 0xb5, 0x02, 0x21, 0x2d, 0x20, 0x07, 0x4a, + 0xd1, 0xf7, 0x9c, 0xfb, 0x00, 0x22, 0x01, 0x20, + 0x05, 0x49, 0xbe, 0xf7, 0x9f, 0xfe, 0x05, 0x48, + 0xcb, 0xf7, 0x56, 0xfa, 0x04, 0x48, 0xcc, 0xf7, + 0xf7, 0xf8, 0x80, 0xbd, 0xad, 0x8a, 0x00, 0x00, + 0x3c, 0x00, 0x2c, 0x20, 0x04, 0x00, 0x21, 0xe2, + 0x00, 0x00, 0xf9, 0xdf, 0x00, 0x00, 0x20, 0x44, + 0x01, 0x00, 0x70, 0x47, 0x00, 0x00, 0x02, 0x49, + 0x00, 0x20, 0x08, 0x60, 0x01, 0x20, 0x48, 0x60, + 0x70, 0x47, 0xac, 0x79, 0x01, 0x00, 0x80, 0xb5, + 0x02, 0x49, 0x0d, 0x20, 0xd0, 0xf7, 0x9b, 0xf9, + 0x80, 0xbd, 0x61, 0x98, 0x00, 0x00, 0x70, 0x47, + 0x00, 0x00, 0x80, 0xb5, 0xcd, 0xf7, 0x77, 0xf9, + 0x03, 0x49, 0x3c, 0x00, 0x68, 0x20, 0x04, 0x00, + 0x08, 0x60, 0x01, 0x1c, 0x02, 0x48, 0xcd, 0xf7, + 0x97, 0xf9, 0x80, 0xbd, 0xa8, 0x79, 0x01, 0x00, + 0xc4, 0x60, 0x01, 0x00, 0x80, 0xb5, 0x00, 0xf0, + 0x29, 0xf8, 0x80, 0xbd, 0x80, 0xb5, 0x86, 0xb0, + 0x0c, 0x48, 0xc3, 0xf7, 0x6d, 0xfd, 0xd6, 0xf7, + 0xd3, 0xfb, 0x0b, 0x48, 0x0d, 0x49, 0x00, 0x90, + 0x0a, 0x48, 0x04, 0x91, 0x01, 0x90, 0x0a, 0x48, + 0x69, 0x46, 0x02, 0x90, 0x3c, 0x00, 0xa4, 0x20, + 0x04, 0x00, 0x00, 0x20, 0x03, 0x90, 0x05, 0x90, + 0x01, 0x20, 0xc3, 0xf7, 0x00, 0xfd, 0x07, 0x49, + 0x03, 0x20, 0xd0, 0xf7, 0x6a, 0xf9, 0x06, 0xb0, + 0x80, 0xbd, 0x20, 0xf7, 0x01, 0x00, 0x11, 0x87, + 0x01, 0x00, 0x95, 0x87, 0x01, 0x00, 0x55, 0x87, + 0x01, 0x00, 0x98, 0xd9, 0x01, 0x00, 0x6d, 0x87, + 0x01, 0x00, 0x80, 0xb5, 0x01, 0x20, 0xd6, 0xf7, + 0x90, 0xfc, 0x03, 0x49, 0x00, 0x20, 0x3c, 0x00, + 0xe0, 0x20, 0x04, 0x00, 0x08, 0x60, 0x48, 0x60, + 0x02, 0x48, 0x14, 0x39, 0x48, 0x60, 0x80, 0xbd, + 0x90, 0xd9, 0x01, 0x00, 0x3d, 0x82, 0x01, 0x00, + 0x70, 0xb5, 0x00, 0x26, 0x09, 0x4c, 0x09, 0x4d, + 0x26, 0x60, 0x66, 0x60, 0x44, 0x21, 0x50, 0x35, + 0x28, 0x1c, 0xa6, 0x61, 0xbe, 0xf7, 0xc8, 0xf9, + 0x14, 0x20, 0xe0, 0x60, 0xe8, 0x63, 0x28, 0x20, + 0xe8, 0x61, 0xa0, 0x60, 0x28, 0x64, 0x2e, 0x70, + 0x3c, 0x00, 0x1c, 0x21, 0x04, 0x00, 0x70, 0xbd, + 0x00, 0x00, 0xa4, 0x6e, 0x01, 0x00, 0x80, 0xb5, + 0x02, 0x21, 0x18, 0x20, 0x04, 0x4a, 0xd1, 0xf7, + 0x0c, 0xfb, 0x03, 0x49, 0x08, 0x20, 0xd0, 0xf7, + 0x2a, 0xf9, 0x80, 0xbd, 0x00, 0x00, 0x15, 0x9c, + 0x00, 0x00, 0x69, 0x9c, 0x00, 0x00, 0xfe, 0xb5, + 0x26, 0x4d, 0x28, 0x78, 0xc0, 0x07, 0x0c, 0xd4, + 0x25, 0x49, 0x00, 0x20, 0x08, 0x70, 0x28, 0x70, + 0x24, 0x48, 0x3c, 0x00, 0x58, 0x21, 0x04, 0x00, + 0x81, 0x78, 0x49, 0x08, 0x49, 0x00, 0x81, 0x70, + 0x81, 0x78, 0x01, 0x22, 0x11, 0x43, 0x81, 0x70, + 0x00, 0x24, 0xff, 0x26, 0x1f, 0x4f, 0x01, 0x36, + 0x21, 0x1c, 0x01, 0xa8, 0xc6, 0xf7, 0x32, 0xf8, + 0x00, 0xab, 0x18, 0x79, 0x01, 0x28, 0x1f, 0xd0, + 0x02, 0x28, 0x19, 0xd0, 0x03, 0x28, 0x1e, 0xd1, + 0xb8, 0x68, 0x00, 0x21, 0xb0, 0x43, 0xb8, 0x60, + 0x78, 0x68, 0x30, 0x43, 0x3c, 0x00, 0x94, 0x21, + 0x04, 0x00, 0x78, 0x60, 0x3a, 0x68, 0x32, 0x40, + 0xa0, 0x20, 0x05, 0xe0, 0x3b, 0x68, 0x33, 0x40, + 0x93, 0x42, 0x01, 0xd0, 0x01, 0x21, 0x01, 0xe0, + 0x01, 0x38, 0xf7, 0xd2, 0x78, 0x68, 0xb0, 0x43, + 0x78, 0x60, 0x00, 0x29, 0x03, 0xd0, 0x01, 0xa8, + 0x00, 0xf0, 0x27, 0xff, 0x02, 0xe0, 0x01, 0xa8, + 0x00, 0xf0, 0x45, 0xff, 0x01, 0x34, 0x24, 0x06, + 0x24, 0x16, 0x06, 0x2c, 0xcf, 0xdb, 0x3c, 0x00, + 0xd0, 0x21, 0x04, 0x00, 0x04, 0x49, 0x02, 0x22, + 0x08, 0x78, 0x10, 0x43, 0x08, 0x70, 0x28, 0x70, + 0xfe, 0xbd, 0x00, 0x00, 0x04, 0x00, 0x07, 0x00, + 0xe0, 0x60, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x10, 0x00, 0x07, 0x00, 0xb0, 0xb5, 0x00, 0x20, + 0x15, 0x23, 0x14, 0x49, 0x01, 0x25, 0x42, 0x00, + 0x8d, 0x54, 0x52, 0x18, 0x01, 0x30, 0x0e, 0x28, + 0x53, 0x70, 0xf8, 0xd3, 0x0f, 0x48, 0x1c, 0x22, + 0x3c, 0x00, 0x0c, 0x22, 0x04, 0x00, 0x1c, 0x38, + 0xbe, 0xf7, 0x73, 0xf9, 0x0d, 0x48, 0x0e, 0x21, + 0x2a, 0x38, 0xbe, 0xf7, 0x1c, 0xf9, 0x0b, 0x49, + 0x00, 0x20, 0x08, 0x60, 0x0b, 0x4c, 0x2a, 0x21, + 0x20, 0x1c, 0xbe, 0xf7, 0x14, 0xf9, 0x25, 0x70, + 0x0e, 0x20, 0x60, 0x70, 0x17, 0x20, 0xa0, 0x70, + 0x07, 0x48, 0x53, 0x21, 0x01, 0x70, 0x45, 0x21, + 0x41, 0x70, 0x20, 0x21, 0x81, 0x70, 0xb0, 0xbd, + 0x00, 0x00, 0x3c, 0x00, 0x48, 0x22, 0x04, 0x00, + 0xe6, 0x78, 0x01, 0x00, 0xe4, 0x62, 0x01, 0x00, + 0xeb, 0x62, 0x01, 0x00, 0xe8, 0x62, 0x01, 0x00, + 0x0c, 0x49, 0x0d, 0x48, 0x00, 0x22, 0x41, 0x60, + 0x0c, 0x49, 0x81, 0x60, 0x0c, 0x49, 0xc1, 0x60, + 0x0c, 0x49, 0x01, 0x61, 0x0c, 0x49, 0x41, 0x61, + 0x0c, 0x49, 0x82, 0x61, 0xc1, 0x61, 0x0c, 0x49, + 0x01, 0x62, 0x0c, 0x49, 0x41, 0x62, 0x0c, 0x49, + 0x81, 0x62, 0x0c, 0x49, 0x3c, 0x00, 0x84, 0x22, + 0x04, 0x00, 0xc1, 0x62, 0xc2, 0x63, 0x70, 0x47, + 0x00, 0x00, 0xc9, 0x75, 0x00, 0x00, 0x28, 0x7a, + 0x01, 0x00, 0xc1, 0x75, 0x00, 0x00, 0x81, 0x75, + 0x00, 0x00, 0x99, 0x75, 0x00, 0x00, 0xcd, 0x75, + 0x00, 0x00, 0x89, 0x75, 0x00, 0x00, 0x91, 0x75, + 0x00, 0x00, 0xb5, 0x75, 0x00, 0x00, 0x8d, 0x75, + 0x00, 0x00, 0xc5, 0x75, 0x00, 0x00, 0xb0, 0xb5, + 0x0e, 0x48, 0x0e, 0x49, 0x08, 0x60, 0x3c, 0x00, + 0xc0, 0x22, 0x04, 0x00, 0x08, 0x31, 0xc0, 0xf7, + 0x43, 0xfe, 0x0c, 0x49, 0x00, 0x25, 0x48, 0x60, + 0x0b, 0x48, 0x0a, 0x4c, 0x05, 0x60, 0x0b, 0x48, + 0x80, 0x3c, 0x05, 0x60, 0x10, 0x20, 0x20, 0x71, + 0xe0, 0x70, 0xa0, 0x71, 0x60, 0x71, 0x27, 0x20, + 0xc0, 0x43, 0xc3, 0xf7, 0xf7, 0xfb, 0x28, 0x20, + 0xc3, 0xf7, 0xfc, 0xfb, 0x25, 0x72, 0xb0, 0xbd, + 0xff, 0x3f, 0x00, 0x00, 0x2c, 0x7d, 0x01, 0x00, + 0x3c, 0x00, 0xfc, 0x22, 0x04, 0x00, 0x1c, 0x67, + 0x01, 0x00, 0x20, 0x67, 0x01, 0x00, 0x80, 0xb5, + 0x2c, 0x21, 0x01, 0x48, 0xbe, 0xf7, 0xc7, 0xf8, + 0x80, 0xbd, 0x3c, 0x7e, 0x01, 0x00, 0x80, 0xb5, + 0x38, 0x21, 0x01, 0x48, 0xbe, 0xf7, 0xbf, 0xf8, + 0x80, 0xbd, 0x68, 0x7e, 0x01, 0x00, 0x80, 0xb5, + 0x02, 0x21, 0x0e, 0x20, 0x02, 0x4a, 0xd1, 0xf7, + 0x0c, 0xfa, 0x80, 0xbd, 0x00, 0x00, 0x21, 0xe0, + 0x00, 0x00, 0x3c, 0x00, 0x38, 0x23, 0x04, 0x00, + 0x70, 0x47, 0x00, 0x00, 0xf0, 0xb5, 0x85, 0xb0, + 0x00, 0x27, 0x00, 0xab, 0x2f, 0x4e, 0x1f, 0x81, + 0x00, 0x25, 0x00, 0x24, 0x28, 0x1c, 0xd6, 0xf7, + 0xa1, 0xfb, 0x02, 0x2d, 0x03, 0xd1, 0xd6, 0xf7, + 0xf5, 0xfa, 0x00, 0x28, 0x0c, 0xd0, 0x01, 0x24, + 0x01, 0x2d, 0x03, 0xd1, 0x07, 0x20, 0x00, 0xab, + 0x18, 0x71, 0x01, 0xe0, 0x00, 0xab, 0x1f, 0x71, + 0x00, 0xab, 0x18, 0x79, 0x3c, 0x00, 0x74, 0x23, + 0x04, 0x00, 0xd6, 0xf7, 0x08, 0xfc, 0x00, 0x2c, + 0x39, 0xd0, 0x08, 0x21, 0x03, 0xa8, 0xd6, 0xf7, + 0xf2, 0xfa, 0x00, 0xab, 0x18, 0x7b, 0xfe, 0x28, + 0x31, 0xd1, 0x58, 0x7b, 0x01, 0x28, 0x2a, 0xd1, + 0x02, 0x21, 0x02, 0xa8, 0xd6, 0xf7, 0xe7, 0xfa, + 0x00, 0xab, 0x18, 0x89, 0x00, 0x28, 0x26, 0xd0, + 0x18, 0x89, 0x18, 0x49, 0x88, 0x42, 0x22, 0xd0, + 0x19, 0x89, 0x00, 0x20, 0xbf, 0xf7, 0x3c, 0x00, + 0xb0, 0x23, 0x04, 0x00, 0x13, 0xf9, 0x04, 0x1c, + 0x00, 0x69, 0x00, 0xab, 0x19, 0x89, 0xd6, 0xf7, + 0xd5, 0xfa, 0x20, 0x68, 0x00, 0xab, 0x1a, 0x89, + 0x01, 0x1c, 0x08, 0x31, 0x08, 0x3a, 0xcb, 0xf7, + 0xa1, 0xf9, 0x00, 0x28, 0x06, 0xd0, 0x02, 0x28, + 0x04, 0xd0, 0x02, 0x21, 0x94, 0x20, 0x37, 0x60, + 0xbe, 0xf7, 0x62, 0xff, 0x20, 0x1c, 0xbf, 0xf7, + 0xc7, 0xf8, 0xd4, 0xe7, 0x01, 0x21, 0x94, 0x20, + 0x3c, 0x00, 0xec, 0x23, 0x04, 0x00, 0xbe, 0xf7, + 0x5a, 0xff, 0xd5, 0xf7, 0x26, 0xff, 0x01, 0x35, + 0x2d, 0x06, 0x2d, 0x0e, 0x04, 0x2d, 0xa5, 0xd3, + 0x05, 0xb0, 0xf0, 0xbd, 0x00, 0x00, 0x58, 0x57, + 0x01, 0x00, 0xff, 0xff, 0x00, 0x00, 0x0a, 0x48, + 0x00, 0x21, 0x02, 0x1c, 0x18, 0x32, 0x80, 0xb5, + 0x09, 0x4b, 0x02, 0xe0, 0x01, 0x60, 0x83, 0x80, + 0x08, 0x30, 0x82, 0x42, 0xfa, 0xd1, 0x04, 0x48, + 0x6c, 0x21, 0x3c, 0x00, 0x28, 0x24, 0x04, 0x00, + 0x6c, 0x38, 0xbe, 0xf7, 0x37, 0xf8, 0x04, 0x49, + 0x02, 0x20, 0xc7, 0xf7, 0xd1, 0xff, 0x80, 0xbd, + 0x7c, 0x79, 0x01, 0x00, 0xfc, 0x05, 0x00, 0x00, + 0x9d, 0x75, 0x00, 0x00, 0x80, 0xb5, 0x02, 0x21, + 0x26, 0x20, 0x0d, 0x4a, 0xd1, 0xf7, 0x7c, 0xf9, + 0x0c, 0x48, 0xc8, 0xf7, 0x73, 0xff, 0x0c, 0x48, + 0xc8, 0xf7, 0x76, 0xff, 0x0b, 0x49, 0x10, 0x20, + 0xcf, 0xf7, 0x94, 0xff, 0x3c, 0x00, 0x64, 0x24, + 0x04, 0x00, 0x0a, 0x49, 0x0c, 0x20, 0xcf, 0xf7, + 0x90, 0xff, 0x09, 0x49, 0x00, 0x20, 0xc7, 0xf7, + 0xb2, 0xff, 0xcc, 0xf7, 0x6e, 0xff, 0x07, 0x49, + 0x08, 0x60, 0x80, 0xbd, 0x00, 0x00, 0x9d, 0xa6, + 0x00, 0x00, 0xa9, 0xa4, 0x00, 0x00, 0x81, 0xa4, + 0x00, 0x00, 0x31, 0xa7, 0x00, 0x00, 0xb9, 0x6d, + 0x00, 0x00, 0xbd, 0xa6, 0x00, 0x00, 0x0c, 0x79, + 0x01, 0x00, 0x02, 0x49, 0x08, 0x78, 0x3c, 0x00, + 0xa0, 0x24, 0x04, 0x00, 0x40, 0x08, 0x40, 0x00, + 0x08, 0x70, 0x70, 0x47, 0x58, 0x00, 0x07, 0x00, + 0x00, 0x21, 0x08, 0x48, 0x80, 0xb5, 0x41, 0x61, + 0x81, 0x61, 0x01, 0x70, 0x41, 0x70, 0x41, 0x60, + 0x81, 0x60, 0x14, 0x22, 0xc2, 0x60, 0x01, 0x61, + 0x42, 0x62, 0xc1, 0x61, 0xff, 0xf7, 0x04, 0xf8, + 0x80, 0xbd, 0x00, 0x00, 0x1c, 0x75, 0x01, 0x00, + 0x80, 0xb5, 0x02, 0x21, 0x1d, 0x20, 0x04, 0x4a, + 0x3c, 0x00, 0xdc, 0x24, 0x04, 0x00, 0xd1, 0xf7, + 0x34, 0xf9, 0x03, 0x49, 0x08, 0x20, 0xcf, 0xf7, + 0x52, 0xff, 0x80, 0xbd, 0x00, 0x00, 0x11, 0xe3, + 0x00, 0x00, 0x09, 0xe4, 0x00, 0x00, 0x80, 0xb5, + 0x01, 0x21, 0x25, 0x20, 0x0a, 0x4a, 0xd1, 0xf7, + 0x24, 0xf9, 0xcc, 0xf7, 0x28, 0xff, 0x08, 0x49, + 0x08, 0x62, 0x08, 0x49, 0x01, 0x20, 0xcf, 0xf7, + 0x3e, 0xff, 0x07, 0x49, 0x02, 0x20, 0xcf, 0xf7, + 0x3a, 0xff, 0x3c, 0x00, 0x18, 0x25, 0x04, 0x00, + 0xfe, 0xf7, 0xe6, 0xff, 0x05, 0x48, 0xc1, 0xf7, + 0xe1, 0xf9, 0x80, 0xbd, 0x29, 0xa9, 0x00, 0x00, + 0x1c, 0x75, 0x01, 0x00, 0xa1, 0xaa, 0x00, 0x00, + 0x2d, 0x19, 0x00, 0x00, 0x45, 0xa8, 0x00, 0x00, + 0x10, 0xb5, 0x06, 0x4c, 0x0c, 0x22, 0x22, 0x70, + 0xa0, 0x18, 0x05, 0x49, 0xbd, 0xf7, 0xd8, 0xff, + 0x00, 0x20, 0xc8, 0xf7, 0x85, 0xfb, 0x01, 0x20, + 0xa0, 0x60, 0x10, 0xbd, 0x3c, 0x00, 0x54, 0x25, + 0x04, 0x00, 0xa4, 0x69, 0x01, 0x00, 0x90, 0x57, + 0x01, 0x00, 0xb0, 0xb5, 0x1f, 0x4c, 0x00, 0x25, + 0x65, 0x80, 0x01, 0x20, 0x20, 0x70, 0x0a, 0x20, + 0xa0, 0x80, 0x90, 0x20, 0xe0, 0x80, 0x30, 0x20, + 0x20, 0x81, 0x90, 0x20, 0x60, 0x81, 0x30, 0x20, + 0xa0, 0x81, 0x17, 0x48, 0x04, 0x22, 0x07, 0x21, + 0x12, 0x30, 0xbe, 0xf7, 0x4c, 0xf8, 0x14, 0x48, + 0x04, 0x22, 0x05, 0x21, 0x16, 0x30, 0x3c, 0x00, + 0x90, 0x25, 0x04, 0x00, 0xbe, 0xf7, 0x46, 0xf8, + 0x12, 0x48, 0x11, 0x4a, 0xe0, 0x81, 0x20, 0x82, + 0x70, 0x32, 0x15, 0x70, 0x55, 0x70, 0x00, 0x20, + 0x3c, 0x23, 0x41, 0x01, 0x43, 0x43, 0x89, 0x18, + 0xf4, 0x31, 0x9b, 0x18, 0x01, 0x30, 0x04, 0x28, + 0x59, 0x60, 0xf5, 0xdb, 0x08, 0x48, 0x06, 0x22, + 0x1a, 0x30, 0x09, 0x49, 0xbd, 0xf7, 0x9a, 0xff, + 0x07, 0x48, 0x05, 0x4c, 0x0c, 0x30, 0x0f, 0xc8, + 0x3c, 0x00, 0xcc, 0x25, 0x04, 0x00, 0x20, 0x34, + 0x0f, 0xc4, 0x20, 0x21, 0x20, 0x1c, 0xbd, 0xf7, + 0x62, 0xff, 0xb0, 0xbd, 0x00, 0x00, 0xf8, 0x60, + 0x01, 0x00, 0x2c, 0x09, 0x00, 0x00, 0x58, 0x40, + 0x01, 0x00, 0x70, 0x47, 0x00, 0x00, 0x07, 0x48, + 0x10, 0xb5, 0x00, 0x68, 0x00, 0x28, 0x08, 0xd0, + 0x06, 0x48, 0xbe, 0xf7, 0x9c, 0xfe, 0x04, 0x1c, + 0xff, 0xf7, 0x9d, 0xfe, 0x20, 0x1c, 0xbe, 0xf7, + 0x96, 0xfe, 0x3c, 0x00, 0x08, 0x26, 0x04, 0x00, + 0x10, 0xbd, 0x00, 0x00, 0x58, 0x57, 0x01, 0x00, + 0xb5, 0xad, 0x00, 0x00, 0x04, 0x49, 0x80, 0xb5, + 0x00, 0x20, 0x88, 0x70, 0x02, 0x21, 0x20, 0x20, + 0x02, 0x4a, 0xd1, 0xf7, 0x91, 0xf8, 0x80, 0xbd, + 0xb4, 0x79, 0x01, 0x00, 0x25, 0xb5, 0x00, 0x00, + 0x80, 0xb5, 0xcc, 0xf7, 0x8f, 0xfe, 0x01, 0x49, + 0x48, 0x61, 0x80, 0xbd, 0xb4, 0x79, 0x01, 0x00, + 0x80, 0xb5, 0x18, 0x21, 0x3c, 0x00, 0x44, 0x26, + 0x04, 0x00, 0x14, 0x48, 0xbd, 0xf7, 0x29, 0xff, + 0x14, 0x48, 0x01, 0x21, 0x01, 0x70, 0x00, 0x21, + 0xc1, 0x60, 0x41, 0x70, 0x01, 0x61, 0x00, 0xf0, + 0x02, 0xf9, 0x00, 0xf0, 0xaa, 0xf8, 0x00, 0xf0, + 0x1e, 0xf8, 0x00, 0xf0, 0xba, 0xf9, 0x00, 0xf0, + 0xcc, 0xf9, 0x00, 0xf0, 0x20, 0xf9, 0x00, 0xf0, + 0x64, 0xf9, 0x00, 0xf0, 0xce, 0xf9, 0x00, 0xf0, + 0xfc, 0xf8, 0x00, 0xf0, 0x82, 0xf9, 0x3c, 0x00, + 0x80, 0x26, 0x04, 0x00, 0x00, 0xf0, 0x28, 0xf8, + 0x00, 0xf0, 0x6e, 0xf8, 0x00, 0xf0, 0x4a, 0xf8, + 0xff, 0xf7, 0xc2, 0xff, 0x00, 0xf0, 0x72, 0xf9, + 0x80, 0xbd, 0x00, 0x00, 0x40, 0x7c, 0x01, 0x00, + 0x18, 0x63, 0x01, 0x00, 0xb0, 0xb5, 0x08, 0x4c, + 0x00, 0x25, 0x08, 0x48, 0x25, 0x77, 0x20, 0x60, + 0xce, 0xf7, 0xf0, 0xfd, 0x00, 0x20, 0xe5, 0x62, + 0xd0, 0xf7, 0xd0, 0xfa, 0x21, 0x1f, 0x08, 0x80, + 0x3c, 0x00, 0xbc, 0x26, 0x04, 0x00, 0xd0, 0xf7, + 0x6c, 0xfb, 0xb0, 0xbd, 0x00, 0x00, 0xd4, 0x79, + 0x01, 0x00, 0x95, 0x75, 0x00, 0x00, 0x80, 0xb5, + 0xcc, 0xf7, 0xc1, 0xfc, 0x80, 0xbd, 0x05, 0x49, + 0x80, 0xb5, 0x00, 0x20, 0x08, 0x70, 0x48, 0x70, + 0x03, 0x48, 0x04, 0x49, 0x03, 0x4a, 0x08, 0x30, + 0xcc, 0xf7, 0x27, 0xfe, 0x80, 0xbd, 0x2c, 0x63, + 0x01, 0x00, 0xed, 0xbc, 0x00, 0x00, 0x4d, 0xbd, + 0x00, 0x00, 0x3c, 0x00, 0xf8, 0x26, 0x04, 0x00, + 0x80, 0xb5, 0xcc, 0xf7, 0x2b, 0xfe, 0x05, 0x49, + 0x48, 0x60, 0x01, 0x1c, 0x04, 0x48, 0xcc, 0xf7, + 0x4b, 0xfe, 0x04, 0x49, 0x03, 0x20, 0xcf, 0xf7, + 0x3d, 0xfe, 0x80, 0xbd, 0x2c, 0x63, 0x01, 0x00, + 0xc4, 0x60, 0x01, 0x00, 0xc1, 0xbc, 0x00, 0x00, + 0x04, 0x48, 0x00, 0x21, 0x00, 0x22, 0x00, 0x23, + 0x0e, 0xc0, 0x08, 0xc0, 0x02, 0x49, 0x10, 0x38, + 0x01, 0x60, 0x70, 0x47, 0x3c, 0x00, 0x34, 0x27, + 0x04, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x1c, 0xe6, + 0x01, 0x00, 0x80, 0xb5, 0xcc, 0xf7, 0x09, 0xfe, + 0x05, 0x49, 0x05, 0x4a, 0x48, 0x60, 0x02, 0x21, + 0x24, 0x20, 0xd0, 0xf7, 0xfc, 0xff, 0x03, 0x48, + 0xc9, 0xf7, 0x6b, 0xfd, 0x80, 0xbd, 0x04, 0x7a, + 0x01, 0x00, 0x69, 0xbe, 0x00, 0x00, 0x71, 0xeb, + 0x00, 0x00, 0x10, 0xb5, 0x04, 0x4c, 0x14, 0x21, + 0x20, 0x1c, 0xbd, 0xf7, 0x96, 0xfe, 0x3c, 0x00, + 0x70, 0x27, 0x04, 0x00, 0x02, 0x48, 0x20, 0x60, + 0x10, 0xbd, 0x00, 0x00, 0x14, 0x7a, 0x01, 0x00, + 0xec, 0xe5, 0x01, 0x00, 0x80, 0xb5, 0xcc, 0xf7, + 0xe7, 0xfd, 0x07, 0x49, 0x07, 0x4a, 0x48, 0x60, + 0x02, 0x21, 0x1f, 0x20, 0xd0, 0xf7, 0xda, 0xff, + 0x05, 0x49, 0x01, 0x20, 0x08, 0x60, 0x05, 0x49, + 0x0c, 0x20, 0xcf, 0xf7, 0xf5, 0xfd, 0x80, 0xbd, + 0x14, 0x7a, 0x01, 0x00, 0xd5, 0xbf, 0x00, 0x00, + 0x3c, 0x00, 0xac, 0x27, 0x04, 0x00, 0x80, 0x5a, + 0x01, 0x00, 0x85, 0xff, 0x00, 0x00, 0x80, 0xb5, + 0xff, 0xf7, 0x4f, 0xfd, 0x01, 0x21, 0x21, 0x20, + 0x02, 0x4a, 0xd0, 0xf7, 0xc2, 0xff, 0x80, 0xbd, + 0x00, 0x00, 0xc9, 0xc1, 0x00, 0x00, 0x80, 0xb5, + 0xcc, 0xf7, 0xc1, 0xfd, 0x02, 0x49, 0x08, 0x63, + 0xc9, 0xf7, 0x57, 0xfd, 0x80, 0xbd, 0x28, 0x7a, + 0x01, 0x00, 0x10, 0xb5, 0xcc, 0xf7, 0xb7, 0xfd, + 0x16, 0x4c, 0x3c, 0x00, 0xe8, 0x27, 0x04, 0x00, + 0x20, 0x61, 0xcc, 0xf7, 0xb3, 0xfd, 0x60, 0x61, + 0x14, 0x48, 0x15, 0x49, 0x08, 0x60, 0x16, 0x49, + 0x14, 0x48, 0x08, 0x60, 0xcc, 0xf7, 0xaa, 0xfd, + 0x14, 0x49, 0x08, 0x60, 0x00, 0xf0, 0x34, 0xf8, + 0xff, 0xf7, 0xe0, 0xff, 0xff, 0xf7, 0x5e, 0xff, + 0x00, 0xf0, 0x04, 0xf9, 0x00, 0xf0, 0x8e, 0xf8, + 0xff, 0xf7, 0x6e, 0xff, 0xff, 0xf7, 0xb0, 0xff, + 0xff, 0xf7, 0x8c, 0xff, 0x3c, 0x00, 0x24, 0x28, + 0x04, 0x00, 0xff, 0xf7, 0x04, 0xff, 0x00, 0xf0, + 0xaa, 0xf8, 0x0a, 0x48, 0xbf, 0xf7, 0xbd, 0xff, + 0xc9, 0xf7, 0xbb, 0xfd, 0x09, 0x49, 0x00, 0x20, + 0xcf, 0xf7, 0xa7, 0xfd, 0x10, 0xbd, 0x40, 0x7c, + 0x01, 0x00, 0x7d, 0xb7, 0x00, 0x00, 0x18, 0x7e, + 0x01, 0x00, 0xbd, 0xb8, 0x00, 0x00, 0x1c, 0x7e, + 0x01, 0x00, 0x20, 0x7e, 0x01, 0x00, 0xb9, 0xba, + 0x00, 0x00, 0x81, 0x24, 0x01, 0x00, 0x3c, 0x00, + 0x60, 0x28, 0x04, 0x00, 0x80, 0xb5, 0x38, 0x21, + 0x01, 0x48, 0xbd, 0xf7, 0x19, 0xfe, 0x80, 0xbd, + 0x90, 0x5c, 0x01, 0x00, 0x70, 0x47, 0x00, 0x00, + 0xb0, 0xb5, 0x0c, 0x4c, 0x0b, 0x4d, 0x00, 0x20, + 0x0c, 0x34, 0x60, 0x60, 0x25, 0x60, 0xe0, 0x60, + 0x0a, 0x20, 0x20, 0x81, 0x28, 0x1c, 0xc8, 0xf7, + 0x3f, 0xfd, 0x28, 0x1c, 0xc8, 0xf7, 0x3a, 0xfd, + 0x08, 0x3d, 0x68, 0x60, 0x04, 0x48, 0xc9, 0xf7, + 0x3c, 0x00, 0x9c, 0x28, 0x04, 0x00, 0x1b, 0xfd, + 0x20, 0x1c, 0xc0, 0xf7, 0x6e, 0xfa, 0x28, 0x80, + 0xb0, 0xbd, 0xb8, 0x7a, 0x01, 0x00, 0xd5, 0x33, + 0x01, 0x00, 0xf8, 0xb5, 0x1f, 0x4e, 0x1d, 0x4c, + 0x00, 0x20, 0x0c, 0x21, 0x41, 0x43, 0x82, 0x00, + 0x01, 0x30, 0x09, 0x19, 0x08, 0x31, 0x00, 0x06, + 0x00, 0x0e, 0x04, 0x28, 0xb1, 0x50, 0xf4, 0xd3, + 0x18, 0x48, 0x0c, 0x38, 0x30, 0x61, 0xce, 0xf7, + 0xf4, 0xf9, 0x3c, 0x00, 0xd8, 0x28, 0x04, 0x00, + 0x14, 0x4c, 0xa0, 0x78, 0x00, 0x09, 0x00, 0x01, + 0xa0, 0x70, 0x00, 0x27, 0xe7, 0x70, 0x67, 0x70, + 0x00, 0x24, 0xa5, 0x00, 0x70, 0x59, 0x07, 0x70, + 0x20, 0x1c, 0xbe, 0xf7, 0x53, 0xf9, 0x71, 0x59, + 0x08, 0x71, 0x00, 0x21, 0x20, 0x1c, 0xce, 0xf7, + 0x7d, 0xf9, 0x01, 0x34, 0x24, 0x06, 0x24, 0x0e, + 0x04, 0x2c, 0xee, 0xd3, 0x07, 0x4c, 0x20, 0x78, + 0x00, 0x09, 0x00, 0x01, 0x3c, 0x00, 0x14, 0x29, + 0x04, 0x00, 0x0a, 0x30, 0x20, 0x70, 0x20, 0x78, + 0xf0, 0x21, 0x88, 0x43, 0x30, 0x30, 0x20, 0x70, + 0xa0, 0x78, 0x0f, 0x21, 0x08, 0x43, 0xa0, 0x70, + 0xf8, 0xbd, 0x00, 0x50, 0x07, 0x00, 0x10, 0x7b, + 0x01, 0x00, 0x80, 0xb5, 0xcc, 0xf7, 0x9f, 0xfb, + 0x80, 0xbd, 0xb0, 0xb5, 0x0c, 0x4c, 0x0b, 0x4d, + 0x00, 0x20, 0x0c, 0x34, 0x60, 0x60, 0x25, 0x60, + 0xe0, 0x60, 0x0a, 0x20, 0x20, 0x81, 0x3c, 0x00, + 0x50, 0x29, 0x04, 0x00, 0x28, 0x1c, 0xc8, 0xf7, + 0xe1, 0xfc, 0x28, 0x1c, 0xc8, 0xf7, 0xd4, 0xfc, + 0x08, 0x3d, 0x68, 0x60, 0x20, 0x1c, 0xc0, 0xf7, + 0x0d, 0xfa, 0x28, 0x80, 0x02, 0x48, 0xc9, 0xf7, + 0x9b, 0xfc, 0xb0, 0xbd, 0x2c, 0x7b, 0x01, 0x00, + 0x49, 0x00, 0x01, 0x00, 0x80, 0xb5, 0xca, 0xf7, + 0x2f, 0xf8, 0x80, 0xbd, 0x70, 0x47, 0x00, 0x00, + 0xb0, 0xb5, 0x12, 0x4d, 0x3c, 0x21, 0x28, 0x1c, + 0x3c, 0x00, 0x8c, 0x29, 0x04, 0x00, 0xbd, 0xf7, + 0x86, 0xfd, 0x0f, 0x48, 0x28, 0x21, 0x3c, 0x30, + 0xbd, 0xf7, 0x81, 0xfd, 0x0d, 0x48, 0x00, 0x21, + 0x14, 0x38, 0x01, 0x61, 0xc1, 0x60, 0xff, 0x21, + 0x01, 0x70, 0x41, 0x70, 0x0a, 0x49, 0x0a, 0x4a, + 0x41, 0x60, 0x01, 0x21, 0x0c, 0x20, 0xd0, 0xf7, + 0xc8, 0xfe, 0x2c, 0x1c, 0x30, 0x34, 0x0c, 0x3d, + 0x00, 0x20, 0xd0, 0xf7, 0x4a, 0xf9, 0x20, 0x80, + 0x0c, 0x3c, 0x3c, 0x00, 0xc8, 0x29, 0x04, 0x00, + 0xac, 0x42, 0xf8, 0xd1, 0xb0, 0xbd, 0x00, 0x00, + 0x60, 0x7b, 0x01, 0x00, 0x20, 0xa1, 0x07, 0x00, + 0x35, 0xcd, 0x00, 0x00, 0x08, 0x49, 0x00, 0x20, + 0x0c, 0x22, 0x42, 0x43, 0x52, 0x18, 0x10, 0x71, + 0x01, 0x30, 0x05, 0x28, 0xf8, 0xdb, 0x04, 0x48, + 0x00, 0x21, 0x08, 0x38, 0x01, 0x70, 0x41, 0x60, + 0xff, 0x21, 0x41, 0x70, 0x70, 0x47, 0x00, 0x00, + 0x74, 0x7a, 0x01, 0x00, 0x3c, 0x00, 0x04, 0x2a, + 0x04, 0x00, 0x80, 0xb5, 0x78, 0x21, 0x01, 0x48, + 0xbd, 0xf7, 0x47, 0xfd, 0x80, 0xbd, 0xc4, 0x7b, + 0x01, 0x00, 0x80, 0xb5, 0xca, 0xf7, 0x97, 0xfa, + 0x80, 0xbd, 0x70, 0x47, 0x00, 0x00, 0x10, 0xb5, + 0x0b, 0x4c, 0xff, 0x21, 0x05, 0x31, 0x20, 0x1c, + 0xbd, 0xf7, 0x37, 0xfd, 0x09, 0x48, 0xf0, 0x21, + 0x08, 0x51, 0x20, 0x1c, 0x40, 0x30, 0xc5, 0xf7, + 0x8e, 0xf9, 0x6c, 0x21, 0x06, 0x48, 0x3c, 0x00, + 0x40, 0x2a, 0x04, 0x00, 0xbd, 0xf7, 0x2c, 0xfd, + 0x04, 0x48, 0xc0, 0x21, 0x6c, 0x30, 0xbd, 0xf7, + 0x27, 0xfd, 0x10, 0xbd, 0xc4, 0x69, 0x01, 0x00, + 0xb0, 0xd9, 0x01, 0x00, 0xc8, 0x6a, 0x01, 0x00, + 0xb0, 0xb5, 0x0b, 0x4d, 0x00, 0x24, 0x1c, 0x20, + 0x60, 0x43, 0x40, 0x19, 0x6c, 0x30, 0xc3, 0xf7, + 0x0f, 0xfe, 0x01, 0x34, 0x04, 0x2c, 0xf6, 0xdb, + 0xcc, 0xf7, 0x6e, 0xfc, 0xa8, 0x63, 0xc7, 0xf7, + 0x3c, 0x00, 0x7c, 0x2a, 0x04, 0x00, 0x75, 0xf9, + 0x04, 0x48, 0xc9, 0xf7, 0x1c, 0xfc, 0x03, 0x48, + 0xcf, 0xf7, 0x03, 0xfa, 0xb0, 0xbd, 0xc4, 0x69, + 0x01, 0x00, 0xfd, 0x80, 0x00, 0x00, 0xe1, 0x22, + 0x01, 0x00, 0x10, 0xb5, 0x05, 0x4c, 0x00, 0x20, + 0x20, 0x80, 0x03, 0x48, 0x06, 0x21, 0x08, 0x30, + 0xbd, 0xf7, 0xd5, 0xfc, 0x14, 0x20, 0x60, 0x60, + 0x10, 0xbd, 0x98, 0x7c, 0x01, 0x00, 0x10, 0xb5, + 0x08, 0x4c, 0x3c, 0x00, 0xb8, 0x2a, 0x04, 0x00, + 0x00, 0x20, 0x20, 0x80, 0x60, 0x80, 0x06, 0x48, + 0x06, 0x21, 0x0c, 0x30, 0xbd, 0xf7, 0xc6, 0xfc, + 0x03, 0x48, 0x06, 0x21, 0x12, 0x30, 0xbd, 0xf7, + 0xc1, 0xfc, 0x14, 0x20, 0xa0, 0x60, 0x10, 0xbd, + 0x58, 0x7c, 0x01, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x80, 0xb5, 0x02, 0x21, 0x0d, 0x20, 0x05, 0x4a, + 0xd0, 0xf7, 0x2e, 0xfe, 0x04, 0x48, 0xc8, 0xf7, + 0x1f, 0xfc, 0x04, 0x48, 0x3c, 0x00, 0xf4, 0x2a, + 0x04, 0x00, 0xca, 0xf7, 0x44, 0xfc, 0x80, 0xbd, + 0x00, 0x00, 0x31, 0xd4, 0x00, 0x00, 0x51, 0xb1, + 0x00, 0x00, 0x09, 0xb1, 0x00, 0x00, 0x08, 0x49, + 0x80, 0xb5, 0x00, 0x20, 0x08, 0x60, 0xff, 0xf7, + 0xd0, 0xff, 0xff, 0xf7, 0xc0, 0xff, 0xff, 0xf7, + 0x04, 0xfc, 0x00, 0xf0, 0x4a, 0xf8, 0xff, 0xf7, + 0x0a, 0xfc, 0x00, 0xf0, 0x3c, 0xf8, 0x80, 0xbd, + 0x00, 0x00, 0xe4, 0x65, 0x01, 0x00, 0x3c, 0x00, + 0x30, 0x2b, 0x04, 0x00, 0x80, 0xb5, 0x00, 0xf0, + 0x29, 0xf8, 0x00, 0xf0, 0x1b, 0xf8, 0x00, 0xf0, + 0x51, 0xf8, 0x00, 0xf0, 0x31, 0xf8, 0x80, 0xbd, + 0x70, 0x47, 0x00, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x80, 0xb5, 0xff, 0x21, 0x89, 0x31, 0x02, 0x48, + 0xbd, 0xf7, 0xa2, 0xfc, 0x80, 0xbd, 0x00, 0x00, + 0xdc, 0x71, 0x01, 0x00, 0x80, 0xb5, 0x02, 0x49, + 0x08, 0x20, 0xcf, 0xf7, 0x11, 0xfc, 0x80, 0xbd, + 0x3c, 0x00, 0x6c, 0x2b, 0x04, 0x00, 0x59, 0xd9, + 0x00, 0x00, 0x80, 0xb5, 0x03, 0x48, 0xcf, 0xf7, + 0x4c, 0xf9, 0x02, 0x49, 0x48, 0x80, 0x80, 0xbd, + 0x00, 0x00, 0x8d, 0x1f, 0x00, 0x00, 0x98, 0x7c, + 0x01, 0x00, 0x80, 0xb5, 0x03, 0x48, 0xcf, 0xf7, + 0x40, 0xf9, 0x02, 0x49, 0x88, 0x80, 0x80, 0xbd, + 0x00, 0x00, 0xd5, 0x23, 0x00, 0x00, 0x58, 0x7c, + 0x01, 0x00, 0x70, 0x47, 0x00, 0x00, 0x80, 0xb5, + 0x02, 0x48, 0x3c, 0x00, 0xa8, 0x2b, 0x04, 0x00, + 0xca, 0xf7, 0xe4, 0xfb, 0x80, 0xbd, 0x00, 0x00, + 0x71, 0xe0, 0x00, 0x00, 0x80, 0xb5, 0xcc, 0xf7, + 0xa5, 0xfb, 0x02, 0x21, 0x0f, 0x20, 0x06, 0x4a, + 0xd0, 0xf7, 0xc2, 0xfd, 0x14, 0x21, 0x05, 0x48, + 0xbd, 0xf7, 0x68, 0xfc, 0x03, 0x48, 0x78, 0x21, + 0x14, 0x30, 0xbd, 0xf7, 0x63, 0xfc, 0x80, 0xbd, + 0x35, 0xe2, 0x00, 0x00, 0x84, 0x66, 0x01, 0x00, + 0x80, 0xb5, 0xcc, 0xf7, 0x3c, 0x00, 0xe4, 0x2b, + 0x04, 0x00, 0xb7, 0xfb, 0x05, 0x49, 0x08, 0x61, + 0x05, 0x49, 0x0e, 0x20, 0xcf, 0xf7, 0xcd, 0xfb, + 0x04, 0x49, 0x08, 0x20, 0xcf, 0xf7, 0xc9, 0xfb, + 0x80, 0xbd, 0xec, 0x65, 0x01, 0x00, 0x01, 0x02, + 0x01, 0x00, 0xc1, 0x2e, 0x00, 0x00, 0x01, 0x49, + 0x00, 0x20, 0x08, 0x70, 0x70, 0x47, 0x40, 0xd9, + 0x01, 0x00, 0x70, 0x47, 0x00, 0x00, 0x01, 0x49, + 0x00, 0x20, 0x08, 0x70, 0x70, 0x47, 0x3c, 0x00, + 0x20, 0x2c, 0x04, 0x00, 0xa0, 0x79, 0x01, 0x00, + 0x80, 0xb5, 0x07, 0x48, 0xc8, 0xf7, 0xf2, 0xff, + 0x06, 0x49, 0x48, 0x60, 0x06, 0x48, 0xc0, 0xf7, + 0x07, 0xfb, 0x06, 0x48, 0xc0, 0xf7, 0x86, 0xfb, + 0x05, 0x48, 0xc9, 0xf7, 0xa3, 0xfa, 0x80, 0xbd, + 0xa9, 0xe4, 0x00, 0x00, 0xa0, 0x79, 0x01, 0x00, + 0xb9, 0xe4, 0x00, 0x00, 0x85, 0x2e, 0x00, 0x00, + 0x81, 0xe4, 0x00, 0x00, 0x07, 0x48, 0x80, 0xb5, + 0x3c, 0x00, 0x5c, 0x2c, 0x04, 0x00, 0x00, 0x21, + 0x00, 0x22, 0x00, 0x23, 0x0e, 0xc0, 0x08, 0xc0, + 0x10, 0x38, 0xc8, 0x21, 0x01, 0x60, 0x00, 0x21, + 0x0c, 0x38, 0x02, 0x4a, 0xcc, 0xf7, 0x61, 0xfb, + 0x80, 0xbd, 0xd0, 0x60, 0x01, 0x00, 0xfd, 0xe5, + 0x00, 0x00, 0x80, 0xb5, 0xcc, 0xf7, 0x67, 0xfb, + 0x04, 0x49, 0x08, 0x60, 0x01, 0x1c, 0x02, 0x48, + 0x04, 0x30, 0xcc, 0xf7, 0x86, 0xfb, 0x80, 0xbd, + 0x00, 0x00, 0x3c, 0x00, 0x98, 0x2c, 0x04, 0x00, + 0xc0, 0x60, 0x01, 0x00, 0x09, 0x48, 0x80, 0xb5, + 0x0a, 0x21, 0x01, 0x70, 0x41, 0x70, 0x08, 0x49, + 0x08, 0x4a, 0x81, 0x60, 0x00, 0x21, 0xc1, 0x60, + 0x52, 0x79, 0x82, 0x70, 0x01, 0x61, 0x41, 0x61, + 0x28, 0x21, 0x18, 0x30, 0xbd, 0xf7, 0xee, 0xfb, + 0x80, 0xbd, 0x00, 0x00, 0x7c, 0x78, 0x01, 0x00, + 0xa0, 0x86, 0x01, 0x00, 0x0c, 0x5a, 0x01, 0x00, + 0xf8, 0xb5, 0x0f, 0x49, 0x3c, 0x00, 0xd4, 0x2c, + 0x04, 0x00, 0x0f, 0x48, 0x0d, 0x88, 0x4f, 0x88, + 0x06, 0x79, 0x00, 0x24, 0x30, 0x1b, 0x68, 0x43, + 0x68, 0x23, 0x0c, 0x49, 0x58, 0x43, 0x41, 0x18, + 0x7d, 0x20, 0xc0, 0x00, 0xbd, 0xf7, 0x0f, 0xfd, + 0x61, 0x00, 0x09, 0x4a, 0xa6, 0x42, 0x50, 0x52, + 0x00, 0xd1, 0x3d, 0x1c, 0x01, 0x34, 0x24, 0x06, + 0x24, 0x0e, 0x10, 0x2c, 0xea, 0xd3, 0x05, 0x49, + 0x01, 0x20, 0x08, 0x61, 0xf8, 0xbd, 0x3c, 0x00, + 0x10, 0x2d, 0x04, 0x00, 0xf6, 0x59, 0x01, 0x00, + 0x0c, 0x5a, 0x01, 0x00, 0x34, 0x44, 0x0f, 0x00, + 0x12, 0x5a, 0x01, 0x00, 0x7c, 0x78, 0x01, 0x00, + 0x80, 0xb5, 0x00, 0xf0, 0xe7, 0xfa, 0x02, 0x49, + 0x01, 0x20, 0x08, 0x61, 0x80, 0xbd, 0x00, 0x00, + 0x7c, 0x78, 0x01, 0x00, 0x10, 0xb5, 0x04, 0x1c, + 0x08, 0x1c, 0x0f, 0x49, 0x49, 0x79, 0x00, 0x29, + 0x01, 0xd1, 0x0e, 0x4b, 0x00, 0xe0, 0x0e, 0x4b, + 0x3c, 0x00, 0x4c, 0x2d, 0x04, 0x00, 0x00, 0x2c, + 0x07, 0xd0, 0x04, 0x21, 0x11, 0x80, 0x0a, 0x1c, + 0x01, 0x24, 0x19, 0x1c, 0xbd, 0xf7, 0xcd, 0xfb, + 0x0a, 0xe0, 0x01, 0x24, 0x01, 0x1c, 0x18, 0x1c, + 0x12, 0x88, 0xbd, 0xf7, 0xc6, 0xfb, 0x00, 0xf0, + 0xc4, 0xfa, 0x05, 0x49, 0x01, 0x20, 0x08, 0x61, + 0x20, 0x1c, 0x10, 0xbd, 0x00, 0x00, 0x0c, 0x5a, + 0x01, 0x00, 0xfe, 0x59, 0x01, 0x00, 0xfa, 0x59, + 0x01, 0x00, 0x3c, 0x00, 0x88, 0x2d, 0x04, 0x00, + 0x7c, 0x78, 0x01, 0x00, 0x0d, 0x48, 0x8c, 0xb5, + 0xc1, 0x88, 0x00, 0xab, 0x0c, 0x4a, 0x99, 0x80, + 0x01, 0x89, 0x04, 0x20, 0xd9, 0x80, 0x18, 0x80, + 0x02, 0x21, 0x13, 0x20, 0xd0, 0xf7, 0xd0, 0xfc, + 0x00, 0xf0, 0xa6, 0xfa, 0x07, 0x49, 0x01, 0x20, + 0x08, 0x61, 0xff, 0xf7, 0x8d, 0xff, 0x6a, 0x46, + 0x01, 0xa9, 0x00, 0x20, 0xff, 0xf7, 0xbc, 0xff, + 0x8c, 0xbd, 0x00, 0x00, 0x3c, 0x00, 0xc4, 0x2d, + 0x04, 0x00, 0xf4, 0x59, 0x01, 0x00, 0x95, 0xf9, + 0x00, 0x00, 0x7c, 0x78, 0x01, 0x00, 0xf8, 0xb5, + 0x13, 0x4e, 0x01, 0x25, 0xb5, 0x70, 0x05, 0x20, + 0xf0, 0x70, 0x11, 0x49, 0x10, 0x48, 0x0e, 0xc9, + 0x2c, 0x30, 0x0e, 0xc0, 0x00, 0x20, 0x70, 0x61, + 0x0f, 0x48, 0x0f, 0x49, 0x10, 0x4f, 0x00, 0x24, + 0x48, 0x60, 0xa0, 0x00, 0x39, 0x58, 0x20, 0x1c, + 0xd1, 0xf7, 0xd7, 0xf8, 0x01, 0x34, 0x3c, 0x00, + 0x00, 0x2e, 0x04, 0x00, 0x10, 0x2c, 0xf7, 0xd3, + 0x06, 0x4c, 0x0b, 0x4a, 0x20, 0x34, 0x20, 0x1c, + 0x0a, 0x49, 0xb5, 0x60, 0xcc, 0xf7, 0x92, 0xfa, + 0xcc, 0xf7, 0x9e, 0xfa, 0x30, 0x61, 0x20, 0x60, + 0xf8, 0xbd, 0x00, 0x00, 0x64, 0x73, 0x01, 0x00, + 0xb0, 0x58, 0x01, 0x00, 0x04, 0x18, 0x02, 0x00, + 0x60, 0x00, 0x07, 0x00, 0xd4, 0x44, 0x01, 0x00, + 0x45, 0xfa, 0x00, 0x00, 0x71, 0xfa, 0x00, 0x00, + 0x3c, 0x00, 0x3c, 0x2e, 0x04, 0x00, 0x0c, 0x49, + 0x30, 0xb5, 0x00, 0x23, 0xcc, 0x56, 0x0b, 0x4b, + 0x00, 0x20, 0xf0, 0x25, 0x1a, 0x5c, 0x11, 0x07, + 0x09, 0x0f, 0x09, 0x19, 0x0f, 0x29, 0x01, 0xdd, + 0x0f, 0x21, 0x02, 0xe0, 0x00, 0x29, 0x00, 0xda, + 0x00, 0x21, 0x2a, 0x40, 0x51, 0x18, 0x19, 0x54, + 0x01, 0x30, 0x0e, 0x28, 0xee, 0xdb, 0x30, 0xbd, + 0x00, 0x00, 0x64, 0x73, 0x01, 0x00, 0xc0, 0x58, + 0x01, 0x00, 0x3c, 0x00, 0x78, 0x2e, 0x04, 0x00, + 0xb0, 0xb5, 0x0d, 0x1c, 0x00, 0x28, 0x08, 0xd0, + 0x01, 0x24, 0x14, 0x80, 0x05, 0x20, 0xcc, 0xf7, + 0xb5, 0xf8, 0x80, 0x03, 0xc0, 0x0f, 0x28, 0x70, + 0x07, 0xe0, 0x28, 0x78, 0x01, 0x22, 0x41, 0x04, + 0x52, 0x04, 0x05, 0x20, 0xd0, 0xf7, 0xae, 0xfd, + 0x01, 0x24, 0x20, 0x1c, 0xb0, 0xbd, 0x00, 0x00, + 0x98, 0xb5, 0x05, 0x4c, 0x60, 0x68, 0xcc, 0xf7, + 0xf5, 0xfd, 0x00, 0x90, 0x3c, 0x00, 0xb4, 0x2e, + 0x04, 0x00, 0x00, 0xab, 0x18, 0x88, 0xe0, 0x80, + 0xce, 0xf7, 0xfb, 0xff, 0x98, 0xbd, 0xa0, 0x58, + 0x01, 0x00, 0x38, 0xb5, 0x03, 0x1c, 0x08, 0x1c, + 0x00, 0x24, 0x00, 0x2b, 0x17, 0x4d, 0x07, 0xd0, + 0x0e, 0x21, 0x11, 0x80, 0x0a, 0x1c, 0x01, 0x24, + 0x29, 0x1c, 0xbd, 0xf7, 0x0c, 0xfb, 0x22, 0xe0, + 0x11, 0x88, 0x04, 0x29, 0x17, 0xd1, 0x01, 0x1c, + 0x68, 0x46, 0x12, 0x88, 0xbd, 0xf7, 0x3c, 0x00, + 0xf0, 0x2e, 0x04, 0x00, 0x03, 0xfb, 0x00, 0x98, + 0x00, 0x28, 0x01, 0xdb, 0x32, 0x30, 0x00, 0xe0, + 0x32, 0x38, 0x00, 0x90, 0x01, 0x1c, 0x64, 0x20, + 0xbd, 0xf7, 0x98, 0xfb, 0x01, 0x06, 0x09, 0x16, + 0x00, 0x90, 0x0e, 0x22, 0x28, 0x1c, 0xbd, 0xf7, + 0x85, 0xfb, 0x06, 0xe0, 0x0e, 0x29, 0x05, 0xd1, + 0x0a, 0x1c, 0x01, 0x1c, 0x28, 0x1c, 0xbd, 0xf7, + 0xe9, 0xfa, 0x01, 0x24, 0x20, 0x1c, 0x38, 0xbd, + 0x3c, 0x00, 0x2c, 0x2f, 0x04, 0x00, 0xda, 0x59, + 0x01, 0x00, 0x38, 0xb5, 0x03, 0x1c, 0x08, 0x1c, + 0x00, 0x24, 0x00, 0x2b, 0x17, 0x4d, 0x07, 0xd0, + 0x0e, 0x21, 0x11, 0x80, 0x0a, 0x1c, 0x01, 0x24, + 0x29, 0x1c, 0xbd, 0xf7, 0xd6, 0xfa, 0x22, 0xe0, + 0x11, 0x88, 0x04, 0x29, 0x17, 0xd1, 0x01, 0x1c, + 0x68, 0x46, 0x12, 0x88, 0xbd, 0xf7, 0xcd, 0xfa, + 0x00, 0x98, 0x00, 0x28, 0x01, 0xdb, 0x32, 0x30, + 0x00, 0xe0, 0x3c, 0x00, 0x68, 0x2f, 0x04, 0x00, + 0x32, 0x38, 0x00, 0x90, 0x01, 0x1c, 0x64, 0x20, + 0xbd, 0xf7, 0x62, 0xfb, 0x01, 0x06, 0x09, 0x16, + 0x00, 0x90, 0x0e, 0x22, 0x28, 0x1c, 0xbd, 0xf7, + 0x4f, 0xfb, 0x06, 0xe0, 0x0e, 0x29, 0x05, 0xd1, + 0x0a, 0x1c, 0x01, 0x1c, 0x28, 0x1c, 0xbd, 0xf7, + 0xb3, 0xfa, 0x01, 0x24, 0x20, 0x1c, 0x38, 0xbd, + 0xcc, 0x59, 0x01, 0x00, 0x03, 0x48, 0x80, 0xb5, + 0x01, 0x78, 0x00, 0x20, 0x3c, 0x00, 0xa4, 0x2f, + 0x04, 0x00, 0xcc, 0xf7, 0xb4, 0xfb, 0x80, 0xbd, + 0x00, 0x00, 0xa6, 0x58, 0x01, 0x00, 0x70, 0x47, + 0x00, 0x00, 0x02, 0x49, 0x03, 0x20, 0x08, 0x70, + 0x00, 0x20, 0x48, 0x70, 0x70, 0x47, 0x9c, 0x73, + 0x01, 0x00, 0x80, 0xb5, 0x02, 0x21, 0x11, 0x20, + 0x02, 0x4a, 0xd0, 0xf7, 0xbc, 0xfb, 0x80, 0xbd, + 0x00, 0x00, 0xa1, 0xfe, 0x00, 0x00, 0xf0, 0xb5, + 0x0b, 0x4f, 0x1c, 0x1c, 0x00, 0x23, 0x3c, 0x00, + 0xe0, 0x2f, 0x04, 0x00, 0xfd, 0x56, 0x2b, 0x1c, + 0x06, 0x2d, 0x01, 0xd1, 0x01, 0x20, 0xf0, 0xbd, + 0x06, 0x4e, 0x05, 0x1c, 0xd8, 0x00, 0x34, 0x36, + 0x35, 0x54, 0x80, 0x19, 0x41, 0x70, 0x82, 0x70, + 0x44, 0x60, 0x58, 0x1c, 0x38, 0x70, 0x00, 0x20, + 0xf0, 0xbd, 0x00, 0x00, 0x98, 0x5a, 0x01, 0x00, + 0x10, 0xb5, 0x04, 0x1c, 0x0c, 0x48, 0x00, 0xf0, + 0x21, 0xf9, 0x60, 0x78, 0xff, 0x28, 0x04, 0xd0, + 0x3c, 0x00, 0x1c, 0x30, 0x04, 0x00, 0x01, 0x23, + 0xe0, 0x56, 0x06, 0x21, 0x00, 0xf0, 0xcd, 0xf8, + 0x08, 0x4a, 0x01, 0x21, 0x10, 0x78, 0x08, 0x43, + 0x07, 0x49, 0x08, 0x70, 0x20, 0x23, 0x18, 0x43, + 0x08, 0x70, 0x80, 0x23, 0x18, 0x43, 0x10, 0x70, + 0x08, 0x70, 0x10, 0xbd, 0x00, 0x00, 0x91, 0x9b, + 0x00, 0x00, 0xe0, 0x60, 0x01, 0x00, 0x04, 0x00, + 0x07, 0x00, 0x10, 0xb5, 0x0a, 0x49, 0x04, 0x1c, + 0x08, 0x78, 0x3c, 0x00, 0x58, 0x30, 0x04, 0x00, + 0x40, 0x08, 0x40, 0x00, 0x08, 0x70, 0x08, 0x49, + 0x08, 0x70, 0x08, 0x48, 0x00, 0xf0, 0xf8, 0xf8, + 0x60, 0x78, 0xff, 0x28, 0x04, 0xd0, 0x01, 0x23, + 0xe0, 0x56, 0x05, 0x21, 0x00, 0xf0, 0xa4, 0xf8, + 0x10, 0xbd, 0x00, 0x00, 0xe0, 0x60, 0x01, 0x00, + 0x04, 0x00, 0x07, 0x00, 0x91, 0x9b, 0x00, 0x00, + 0x03, 0x48, 0x00, 0x21, 0x00, 0x22, 0x00, 0x23, + 0x0e, 0xc0, 0x08, 0xc0, 0x3c, 0x00, 0x94, 0x30, + 0x04, 0x00, 0x70, 0x47, 0x00, 0x00, 0xe8, 0x60, + 0x01, 0x00, 0x70, 0x47, 0x00, 0x00, 0x10, 0xb5, + 0x07, 0x4c, 0x00, 0x20, 0x60, 0x60, 0x20, 0x80, + 0xe0, 0x60, 0x02, 0x21, 0x14, 0x20, 0x04, 0x4a, + 0xd0, 0xf7, 0x49, 0xfb, 0x02, 0x48, 0x10, 0x30, + 0xa0, 0x60, 0x10, 0xbd, 0x00, 0x00, 0x58, 0x75, + 0x01, 0x00, 0x05, 0x1d, 0x01, 0x00, 0x70, 0x47, + 0x00, 0x00, 0x10, 0xb5, 0x48, 0x21, 0x3c, 0x00, + 0xd0, 0x30, 0x04, 0x00, 0x0a, 0x48, 0xbd, 0xf7, + 0xe3, 0xf9, 0x09, 0x4c, 0xe0, 0x21, 0x48, 0x34, + 0x20, 0x1c, 0xbd, 0xf7, 0xdd, 0xf9, 0x00, 0x20, + 0xc1, 0x00, 0x09, 0x19, 0x0a, 0x1c, 0x08, 0x32, + 0x01, 0x30, 0x1b, 0x28, 0x4a, 0x60, 0xf7, 0xd3, + 0x01, 0x48, 0x04, 0x38, 0x04, 0x60, 0x10, 0xbd, + 0x68, 0x5b, 0x01, 0x00, 0x80, 0xb5, 0x02, 0x21, + 0x23, 0x20, 0x02, 0x4a, 0xd0, 0xf7, 0x1e, 0xfb, + 0x3c, 0x00, 0x0c, 0x31, 0x04, 0x00, 0x80, 0xbd, + 0x00, 0x00, 0x45, 0x23, 0x01, 0x00, 0x80, 0xb5, + 0xff, 0xf7, 0x6b, 0xf8, 0x80, 0xbd, 0x70, 0x47, + 0x00, 0x00, 0xf8, 0xb5, 0x01, 0x20, 0x1d, 0x49, + 0xc0, 0x07, 0x48, 0x60, 0x1d, 0x49, 0xff, 0x20, + 0x08, 0x73, 0x1c, 0x4e, 0x10, 0x20, 0x30, 0x60, + 0x05, 0x01, 0x35, 0x60, 0x1b, 0x4c, 0x80, 0x21, + 0x20, 0x1c, 0xbd, 0xf7, 0xac, 0xf9, 0x00, 0x21, + 0x19, 0x4a, 0x3c, 0x00, 0x48, 0x31, 0x04, 0x00, + 0x15, 0x4f, 0x00, 0x20, 0x0b, 0x01, 0x1b, 0x19, + 0x5a, 0x60, 0xcb, 0x00, 0xdb, 0x19, 0x18, 0x74, + 0x01, 0x31, 0x08, 0x29, 0xf6, 0xdb, 0x0f, 0x4c, + 0xfa, 0x21, 0x21, 0x80, 0x12, 0x49, 0x61, 0x80, + 0xa0, 0x60, 0x6a, 0x46, 0x11, 0x49, 0x04, 0x20, + 0xbd, 0xf7, 0x30, 0xff, 0x6a, 0x46, 0x10, 0x49, + 0x08, 0x20, 0xbd, 0xf7, 0x2b, 0xff, 0x10, 0x20, + 0x70, 0x60, 0x75, 0x60, 0x3c, 0x00, 0x84, 0x31, + 0x04, 0x00, 0x60, 0x68, 0x02, 0x21, 0x08, 0x43, + 0x60, 0x60, 0x0b, 0x49, 0x06, 0x4a, 0x08, 0x1c, + 0x10, 0x30, 0x08, 0x3a, 0x03, 0xc2, 0xf8, 0xbd, + 0x00, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x60, + 0x07, 0x00, 0x00, 0x10, 0x07, 0x00, 0xac, 0x73, + 0x01, 0x00, 0xd1, 0x75, 0x00, 0x00, 0x20, 0x4e, + 0x00, 0x00, 0x05, 0x2c, 0x01, 0x00, 0x11, 0x2c, + 0x01, 0x00, 0x00, 0xa0, 0x07, 0x00, 0x3c, 0x00, + 0xc0, 0x31, 0x04, 0x00, 0x70, 0xb5, 0x0e, 0x1c, + 0x00, 0x24, 0xc4, 0xf7, 0x5b, 0xfe, 0x00, 0x28, + 0x3b, 0xd0, 0x45, 0x68, 0xff, 0x2d, 0x38, 0xd0, + 0x0c, 0x2e, 0x28, 0xd2, 0x01, 0xa3, 0x9b, 0x5d, + 0x5b, 0x00, 0x9f, 0x44, 0x05, 0x07, 0x09, 0x0b, + 0x0d, 0x10, 0x13, 0x16, 0x18, 0x1b, 0x1e, 0x21, + 0x18, 0x24, 0x20, 0xe0, 0x30, 0x24, 0x1e, 0xe0, + 0x60, 0x24, 0x1c, 0xe0, 0xc0, 0x24, 0x1a, 0xe0, + 0x3c, 0x00, 0xfc, 0x31, 0x04, 0x00, 0xff, 0x24, + 0x81, 0x34, 0x17, 0xe0, 0x09, 0x24, 0xa4, 0x01, + 0x14, 0xe0, 0x09, 0x24, 0xe4, 0x01, 0x11, 0xe0, + 0x0f, 0x4c, 0x0f, 0xe0, 0x09, 0x24, 0x24, 0x02, + 0x0c, 0xe0, 0x09, 0x24, 0x64, 0x02, 0x09, 0xe0, + 0x03, 0x24, 0xe4, 0x02, 0x06, 0xe0, 0x09, 0x24, + 0xa4, 0x02, 0x03, 0xe0, 0x09, 0x21, 0x9e, 0x20, + 0xbe, 0xf7, 0x39, 0xf8, 0x60, 0x00, 0x00, 0x19, + 0x40, 0x08, 0x3c, 0x00, 0x38, 0x32, 0x04, 0x00, + 0x05, 0x49, 0x80, 0x04, 0x40, 0x18, 0x05, 0x4a, + 0xa9, 0x00, 0x89, 0x18, 0x48, 0x60, 0x64, 0x20, + 0x60, 0x43, 0x70, 0xbd, 0xdc, 0x07, 0x00, 0x00, + 0x80, 0x38, 0x01, 0x00, 0x04, 0x00, 0x07, 0x00, + 0x02, 0x49, 0x80, 0xb5, 0x08, 0x60, 0xd0, 0xf7, + 0x97, 0xf8, 0x80, 0xbd, 0x5c, 0x5b, 0x01, 0x00, + 0xf8, 0xb5, 0x00, 0x26, 0x17, 0x4c, 0x17, 0x4b, + 0x19, 0x49, 0x26, 0x70, 0x3c, 0x00, 0x74, 0x32, + 0x04, 0x00, 0x00, 0x20, 0x14, 0x33, 0x0d, 0x88, + 0x15, 0x4e, 0x15, 0x4a, 0x04, 0xe0, 0xc1, 0x00, + 0xcf, 0x18, 0x7a, 0x60, 0x5e, 0x50, 0x01, 0x30, + 0xa8, 0x42, 0xf8, 0xdb, 0xc6, 0xf7, 0x2b, 0xfd, + 0xff, 0x21, 0x11, 0x4d, 0xa5, 0x31, 0x28, 0x1c, + 0xbd, 0xf7, 0xff, 0xf8, 0x00, 0x21, 0x28, 0x1c, + 0x02, 0x1c, 0x14, 0x32, 0xc2, 0x60, 0x10, 0x1c, + 0x01, 0x31, 0x14, 0x29, 0xf8, 0xdb, 0x3c, 0x00, + 0xb0, 0x32, 0x04, 0x00, 0x00, 0x26, 0xc6, 0x60, + 0x05, 0x48, 0x0c, 0x30, 0x60, 0xc0, 0x09, 0x48, + 0x18, 0x21, 0xbd, 0xf7, 0xed, 0xf8, 0x01, 0x20, + 0x04, 0x34, 0x41, 0xc4, 0x00, 0x20, 0xf8, 0xbd, + 0x70, 0x5d, 0x01, 0x00, 0x09, 0xa0, 0x00, 0x00, + 0x30, 0xd9, 0x01, 0x00, 0x56, 0x57, 0x01, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0xa8, 0x60, 0x01, 0x00, + 0x80, 0xb5, 0x00, 0x20, 0xcf, 0xf7, 0xb6, 0xfc, + 0x3c, 0x00, 0xec, 0x32, 0x04, 0x00, 0x01, 0x49, + 0x08, 0x80, 0x80, 0xbd, 0x00, 0x00, 0x2c, 0x74, + 0x01, 0x00, 0x11, 0x48, 0xf8, 0xb5, 0x41, 0x79, + 0x00, 0x29, 0x02, 0xd1, 0x05, 0x78, 0x0f, 0x4e, + 0x01, 0xe0, 0x45, 0x78, 0x0f, 0x4e, 0x02, 0x23, + 0xf7, 0x5e, 0x00, 0x24, 0x60, 0x1b, 0x78, 0x43, + 0x64, 0x23, 0x0c, 0x49, 0x58, 0x43, 0x41, 0x18, + 0x7d, 0x20, 0xc0, 0x00, 0xbd, 0xf7, 0xf5, 0xf9, + 0x61, 0x00, 0x3c, 0x00, 0x28, 0x33, 0x04, 0x00, + 0x09, 0x4a, 0xac, 0x42, 0x50, 0x52, 0x01, 0xd1, + 0x00, 0x23, 0xf7, 0x5e, 0x01, 0x34, 0x24, 0x06, + 0x24, 0x0e, 0x10, 0x2c, 0xe9, 0xd3, 0xf8, 0xbd, + 0x0c, 0x5a, 0x01, 0x00, 0xfe, 0x59, 0x01, 0x00, + 0xfa, 0x59, 0x01, 0x00, 0x34, 0x44, 0x0f, 0x00, + 0x32, 0x5a, 0x01, 0x00, 0x38, 0xb5, 0x10, 0x4c, + 0xbe, 0x25, 0x25, 0x73, 0x20, 0x7a, 0x18, 0x21, + 0x88, 0x43, 0x20, 0x72, 0x3c, 0x00, 0x64, 0x33, + 0x04, 0x00, 0x6a, 0x46, 0x0d, 0x49, 0x0d, 0x20, + 0xbd, 0xf7, 0x33, 0xfe, 0x01, 0x20, 0x0b, 0x49, + 0x40, 0x03, 0x08, 0x60, 0x48, 0x60, 0x25, 0x73, + 0x2d, 0x20, 0xc0, 0x03, 0x20, 0x60, 0x25, 0x73, + 0x20, 0x7a, 0x10, 0x21, 0x08, 0x43, 0x20, 0x72, + 0x06, 0x48, 0x06, 0x49, 0x08, 0x60, 0x00, 0x20, + 0x48, 0x60, 0x38, 0xbd, 0x00, 0x00, 0x00, 0x03, + 0x07, 0x00, 0x8d, 0x3e, 0x01, 0x00, 0x24, 0x00, + 0xa0, 0x33, 0x04, 0x00, 0x00, 0x10, 0x07, 0x00, + 0x00, 0x87, 0x93, 0x03, 0x04, 0x79, 0x01, 0x00, + 0x80, 0xb5, 0x02, 0x21, 0x15, 0x20, 0x02, 0x4a, + 0xd0, 0xf7, 0xc8, 0xf9, 0x80, 0xbd, 0x00, 0x00, + 0x0d, 0x3e, 0x01, 0x00, 0x70, 0x47, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x44, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x40, 0x20, 0x07, 0x00, + 0xff, 0xff, 0xff, 0xff, +}; +const uint32_t fw_len = sizeof(fw_buf) / sizeof(fw_buf[0]); diff --git a/libraries/WiFi/extras/wifi_dnld/wifi_dnld.cproj b/libraries/WiFi/extras/wifi_dnld/wifi_dnld.cproj new file mode 100644 index 000000000..790db3c67 --- /dev/null +++ b/libraries/WiFi/extras/wifi_dnld/wifi_dnld.cproj @@ -0,0 +1,495 @@ + + + + 2.0 + 6.0 + com.Atmel.AVRGCC32 + eb9606bc-de32-4edd-9cda-ae3bf36977a2 + wifi_dnld + AT32uc3a1256 + none + Importer + Executable + C + wifi_dnld + .elf + $(MSBuildProjectDirectory)\$(Configuration) + Native + + true + false + + 0 + 3.5.0 + + + + + True + True + True + True + false + false + + + BOARD=ARDUINO + + + + + ../src/SOFTWARE_FRAMEWORK/UTILS/DEBUG + ../src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS + ../src/CONFIG + ../src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX + ../src/SOFTWARE_FRAMEWORK/DRIVERS/USART + ../src/SOFTWARE_FRAMEWORK/DRIVERS/SPI + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PM + ../src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO + ../src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC + ../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE + ../src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR + ../src/SOFTWARE_FRAMEWORK/UTILS + ../src/SOFTWARE_FRAMEWORK/DRIVERS/INTC + ../src/SOFTWARE_FRAMEWORK/BOARDS + ../src + + + -fdata-sections + true + false + false + false + false + true + false + false + false + false + + false + false + true + false + false + false + false + -c -fmessage-length=0 + false + true + false + false + false + false + + + newlib_addons-at32ucr2-speed_opt + + + + + ../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS + ../src/SOFTWARE_FRAMEWORK/BOARDS + + + true + false + false + false + false + true + true + + + ../src/SOFTWARE_FRAMEWORK/UTILS/DEBUG + ../src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS + ../src/CONFIG + ../src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX + ../src/SOFTWARE_FRAMEWORK/DRIVERS/USART + ../src/SOFTWARE_FRAMEWORK/DRIVERS/SPI + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PM + ../src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO + ../src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC + ../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE + ../src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR + ../src/SOFTWARE_FRAMEWORK/UTILS + ../src/SOFTWARE_FRAMEWORK/DRIVERS/INTC + ../src/SOFTWARE_FRAMEWORK/BOARDS + + + false + -Wa,-g + + + ../src/SOFTWARE_FRAMEWORK/UTILS/DEBUG + ../src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS + ../src/CONFIG + ../src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX + ../src/SOFTWARE_FRAMEWORK/DRIVERS/USART + ../src/SOFTWARE_FRAMEWORK/DRIVERS/SPI + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PM + ../src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO + ../src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC + ../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE + ../src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR + ../src/SOFTWARE_FRAMEWORK/UTILS + ../src/SOFTWARE_FRAMEWORK/DRIVERS/INTC + ../src/SOFTWARE_FRAMEWORK/BOARDS + + + false + false + + + + + + + True + True + True + True + false + false + + + BOARD=ARDUINO + + + + + ../src/SOFTWARE_FRAMEWORK/UTILS/DEBUG + ../src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS + ../src/CONFIG + ../src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX + ../src/SOFTWARE_FRAMEWORK/DRIVERS/USART + ../src/SOFTWARE_FRAMEWORK/DRIVERS/SPI + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PM + ../src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO + ../src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC + ../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE + ../src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR + ../src/SOFTWARE_FRAMEWORK/UTILS + ../src/SOFTWARE_FRAMEWORK/DRIVERS/INTC + ../src/SOFTWARE_FRAMEWORK/BOARDS + ../src + + + -fdata-sections + true + false + false + false + false + true + false + false + false + false + Maximum (-g3) + + false + false + true + false + false + false + false + -c -fmessage-length=0 + false + true + false + false + false + false + + + newlib_addons-at32ucr2-speed_opt + + + + + ../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS + ../src/SOFTWARE_FRAMEWORK/BOARDS + + + true + false + false + false + false + true + true + + + ../src/SOFTWARE_FRAMEWORK/UTILS/DEBUG + ../src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS + ../src/CONFIG + ../src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX + ../src/SOFTWARE_FRAMEWORK/DRIVERS/USART + ../src/SOFTWARE_FRAMEWORK/DRIVERS/SPI + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PM + ../src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO + ../src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC + ../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE + ../src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR + ../src/SOFTWARE_FRAMEWORK/UTILS + ../src/SOFTWARE_FRAMEWORK/DRIVERS/INTC + ../src/SOFTWARE_FRAMEWORK/BOARDS + + + false + Default (-g) + -Wa,-g + + + ../src/SOFTWARE_FRAMEWORK/UTILS/DEBUG + ../src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS + ../src/CONFIG + ../src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX + ../src/SOFTWARE_FRAMEWORK/DRIVERS/USART + ../src/SOFTWARE_FRAMEWORK/DRIVERS/SPI + ../src/SOFTWARE_FRAMEWORK/DRIVERS/PM + ../src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO + ../src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC + ../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE + ../src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR + ../src/SOFTWARE_FRAMEWORK/UTILS + ../src/SOFTWARE_FRAMEWORK/DRIVERS/INTC + ../src/SOFTWARE_FRAMEWORK/BOARDS + + + false + false + Default (-Wa,-g) + + + + + + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + compile + + + + compile + + + compile + + + + compile + + + compile + + + + + compile + + + + compile + + + compile + + + + compile + + + compile + + + compile + + + + + + + compile + + + compile + + + compile + + + compile + + + + + compile + + + compile + + + + compile + + + compile + + + + compile + + + compile + + + compile + + + + compile + + + compile + + + compile + + + compile + + + compile + + + + compile + + + compile + + + + compile + + + compile + + + + + + compile + + + compile + + + + compile + + + compile + + + compile + + + + compile + + + compile + + + compile + + + compile + + + + + compile + + + + compile + + + compile + + + compile + + + compile + + + compile + + + + + + + compile + + + + + compile + + + + compile + + + compile + + + compile + + + compile + + + + + compile + + + \ No newline at end of file diff --git a/libraries/WiFi/extras/wifishield.atsln b/libraries/WiFi/extras/wifishield.atsln new file mode 100644 index 000000000..e9a149ba1 --- /dev/null +++ b/libraries/WiFi/extras/wifishield.atsln @@ -0,0 +1,36 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Atmel Studio Solution File, Format Version 11.00 +Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "wifi_dnld", "wifi_dnld\wifi_dnld.cproj", "{EB9606BC-DE32-4EDD-9CDA-AE3BF36977A2}" +EndProject +Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "wifiHD", "wifiHD\wifiHD.cproj", "{417E15DB-488A-4B56-8D4E-FBE832B2B649}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug_512|AVR = Debug_512|AVR + Debug|AVR = Debug|AVR + Release_512|AVR = Release_512|AVR + Release|AVR = Release|AVR + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {EB9606BC-DE32-4EDD-9CDA-AE3BF36977A2}.Debug_512|AVR.ActiveCfg = Debug|AVR + {EB9606BC-DE32-4EDD-9CDA-AE3BF36977A2}.Debug_512|AVR.Build.0 = Debug|AVR + {EB9606BC-DE32-4EDD-9CDA-AE3BF36977A2}.Debug|AVR.ActiveCfg = Debug|AVR + {EB9606BC-DE32-4EDD-9CDA-AE3BF36977A2}.Debug|AVR.Build.0 = Debug|AVR + {EB9606BC-DE32-4EDD-9CDA-AE3BF36977A2}.Release_512|AVR.ActiveCfg = Release|AVR + {EB9606BC-DE32-4EDD-9CDA-AE3BF36977A2}.Release_512|AVR.Build.0 = Release|AVR + {EB9606BC-DE32-4EDD-9CDA-AE3BF36977A2}.Release|AVR.ActiveCfg = Release|AVR + {EB9606BC-DE32-4EDD-9CDA-AE3BF36977A2}.Release|AVR.Build.0 = Release|AVR + {417E15DB-488A-4B56-8D4E-FBE832B2B649}.Debug_512|AVR.ActiveCfg = Debug_512|AVR + {417E15DB-488A-4B56-8D4E-FBE832B2B649}.Debug_512|AVR.Build.0 = Debug_512|AVR + {417E15DB-488A-4B56-8D4E-FBE832B2B649}.Debug|AVR.ActiveCfg = Debug|AVR + {417E15DB-488A-4B56-8D4E-FBE832B2B649}.Debug|AVR.Build.0 = Debug|AVR + {417E15DB-488A-4B56-8D4E-FBE832B2B649}.Release_512|AVR.ActiveCfg = Release_512|AVR + {417E15DB-488A-4B56-8D4E-FBE832B2B649}.Release_512|AVR.Build.0 = Release_512|AVR + {417E15DB-488A-4B56-8D4E-FBE832B2B649}.Release|AVR.ActiveCfg = Release|AVR + {417E15DB-488A-4B56-8D4E-FBE832B2B649}.Release|AVR.Build.0 = Release|AVR + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/hardware/arduino/avr/libraries/WiFi/keywords.txt b/libraries/WiFi/keywords.txt similarity index 86% rename from hardware/arduino/avr/libraries/WiFi/keywords.txt rename to libraries/WiFi/keywords.txt index 4106a7d47..7a6f0bc05 100644 --- a/hardware/arduino/avr/libraries/WiFi/keywords.txt +++ b/libraries/WiFi/keywords.txt @@ -2,11 +2,17 @@ # Syntax Coloring Map For WiFi ####################################### +####################################### +# Library (KEYWORD3) +####################################### + +WiFi KEYWORD3 +WiFiUdp KEYWORD3 + ####################################### # Datatypes (KEYWORD1) ####################################### -WiFi KEYWORD1 Client KEYWORD1 Server KEYWORD1 @@ -14,6 +20,7 @@ Server KEYWORD1 # Methods and Functions (KEYWORD2) ####################################### +firmwareVersion KEYWORD2 status KEYWORD2 connect KEYWORD2 write KEYWORD2 @@ -45,6 +52,7 @@ parsePacket KEYWORD2 remoteIP KEYWORD2 remotePort KEYWORD2 + ####################################### # Constants (LITERAL1) ####################################### diff --git a/libraries/WiFi/library.properties b/libraries/WiFi/library.properties new file mode 100644 index 000000000..619690785 --- /dev/null +++ b/libraries/WiFi/library.properties @@ -0,0 +1,10 @@ +name=WiFi +author=Arduino +email=info@arduino.cc +sentence=The libary to use with the Arduino WiFi shield. +paragraph=With this library you can instantiate Servers, Clients and send/receive UDP packets through WiFi. The shield can connect either to open or encrypted networks (WEP, WPA). The IP address can be assigned statically or through a DHCP. The library can also manage DNS. +url=http:http://arduino.cc/en/Reference/WiFi +architectures=avr, sam +version=1.2 +dependencies=SPI, IPAddress +core-dependencies=arduino (>=1.5.0) diff --git a/hardware/arduino/avr/libraries/WiFi/WiFi.cpp b/libraries/WiFi/src/WiFi.cpp old mode 100644 new mode 100755 similarity index 98% rename from hardware/arduino/avr/libraries/WiFi/WiFi.cpp rename to libraries/WiFi/src/WiFi.cpp index f209280fd..5d6cd121b --- a/hardware/arduino/avr/libraries/WiFi/WiFi.cpp +++ b/libraries/WiFi/src/WiFi.cpp @@ -1,10 +1,10 @@ -#include "wifi_drv.h" +#include "utility/wifi_drv.h" #include "WiFi.h" extern "C" { #include "utility/wl_definitions.h" #include "utility/wl_types.h" - #include "debug.h" + #include "utility/debug.h" } // XXX: don't make assumptions about the value of MAX_SOCK_NUM. diff --git a/hardware/arduino/avr/libraries/WiFi/WiFi.h b/libraries/WiFi/src/WiFi.h old mode 100644 new mode 100755 similarity index 100% rename from hardware/arduino/avr/libraries/WiFi/WiFi.h rename to libraries/WiFi/src/WiFi.h diff --git a/hardware/arduino/avr/libraries/WiFi/WiFiClient.h b/libraries/WiFi/src/WiFiClient.h old mode 100644 new mode 100755 similarity index 100% rename from hardware/arduino/avr/libraries/WiFi/WiFiClient.h rename to libraries/WiFi/src/WiFiClient.h diff --git a/hardware/arduino/avr/libraries/WiFi/WiFiServer.cpp b/libraries/WiFi/src/WiFiServer.cpp similarity index 98% rename from hardware/arduino/avr/libraries/WiFi/WiFiServer.cpp rename to libraries/WiFi/src/WiFiServer.cpp index 2f03bc1c1..2dc2dfa20 100644 --- a/hardware/arduino/avr/libraries/WiFi/WiFiServer.cpp +++ b/libraries/WiFi/src/WiFiServer.cpp @@ -1,5 +1,5 @@ #include -#include "server_drv.h" +#include "utility/server_drv.h" extern "C" { #include "utility/debug.h" diff --git a/hardware/arduino/avr/libraries/WiFi/WiFiServer.h b/libraries/WiFi/src/WiFiServer.h old mode 100644 new mode 100755 similarity index 100% rename from hardware/arduino/avr/libraries/WiFi/WiFiServer.h rename to libraries/WiFi/src/WiFiServer.h diff --git a/hardware/arduino/avr/libraries/WiFi/WiFiUdp.h b/libraries/WiFi/src/WiFiUdp.h similarity index 100% rename from hardware/arduino/avr/libraries/WiFi/WiFiUdp.h rename to libraries/WiFi/src/WiFiUdp.h diff --git a/hardware/arduino/avr/libraries/WiFi/utility/debug.h b/libraries/WiFi/src/utility/debug.h similarity index 100% rename from hardware/arduino/avr/libraries/WiFi/utility/debug.h rename to libraries/WiFi/src/utility/debug.h diff --git a/hardware/arduino/avr/libraries/WiFi/utility/server_drv.cpp b/libraries/WiFi/src/utility/server_drv.cpp similarity index 98% rename from hardware/arduino/avr/libraries/WiFi/utility/server_drv.cpp rename to libraries/WiFi/src/utility/server_drv.cpp index 4a6d2932b..14c2a7877 100644 --- a/hardware/arduino/avr/libraries/WiFi/utility/server_drv.cpp +++ b/libraries/WiFi/src/utility/server_drv.cpp @@ -1,25 +1,25 @@ //#define _DEBUG_ -#include "server_drv.h" +#include "utility/server_drv.h" #include "Arduino.h" -#include "spi_drv.h" +#include "utility/spi_drv.h" extern "C" { -#include "wl_types.h" -#include "debug.h" +#include "utility/wl_types.h" +#include "utility/debug.h" } // Start server TCP on port specified -void ServerDrv::startServer(uint16_t port, uint8_t sock, uint8_t protMode) +void ServerDrv::startServer(uint16_t port, uint8_t sock, uint8_t protMode) { WAIT_FOR_SLAVE_SELECT(); // Send Command - SpiDrv::sendCmd(START_SERVER_TCP_CMD, PARAM_NUMS_3); + SpiDrv::sendCmd(START_SERVER_TCP_CMD, PARAM_NUMS_3); SpiDrv::sendParam(port); - SpiDrv::sendParam(&sock, 1); - SpiDrv::sendParam(&protMode, 1, LAST_PARAM); + SpiDrv::sendParam(&sock, 1); + SpiDrv::sendParam(&protMode, 1, LAST_PARAM); //Wait the reply elaboration SpiDrv::waitForSlaveReady(); @@ -35,15 +35,15 @@ void ServerDrv::startServer(uint16_t port, uint8_t sock, uint8_t protMode) } // Start server TCP on port specified -void ServerDrv::startClient(uint32_t ipAddress, uint16_t port, uint8_t sock, uint8_t protMode) +void ServerDrv::startClient(uint32_t ipAddress, uint16_t port, uint8_t sock, uint8_t protMode) { WAIT_FOR_SLAVE_SELECT(); // Send Command - SpiDrv::sendCmd(START_CLIENT_TCP_CMD, PARAM_NUMS_4); + SpiDrv::sendCmd(START_CLIENT_TCP_CMD, PARAM_NUMS_4); SpiDrv::sendParam((uint8_t*)&ipAddress, sizeof(ipAddress)); SpiDrv::sendParam(port); - SpiDrv::sendParam(&sock, 1); - SpiDrv::sendParam(&protMode, 1, LAST_PARAM); + SpiDrv::sendParam(&sock, 1); + SpiDrv::sendParam(&protMode, 1, LAST_PARAM); //Wait the reply elaboration SpiDrv::waitForSlaveReady(); @@ -193,57 +193,57 @@ bool ServerDrv::getDataBuf(uint8_t sock, uint8_t *_data, uint16_t *_dataLen) return false; } -bool ServerDrv::insertDataBuf(uint8_t sock, const uint8_t *data, uint16_t _len) -{ - WAIT_FOR_SLAVE_SELECT(); - // Send Command - SpiDrv::sendCmd(INSERT_DATABUF_CMD, PARAM_NUMS_2); - SpiDrv::sendBuffer(&sock, sizeof(sock)); - SpiDrv::sendBuffer((uint8_t *)data, _len, LAST_PARAM); - - //Wait the reply elaboration - SpiDrv::waitForSlaveReady(); - - // Wait for reply - uint8_t _data = 0; - uint8_t _dataLen = 0; - if (!SpiDrv::waitResponseData8(INSERT_DATABUF_CMD, &_data, &_dataLen)) - { - WARN("error waitResponse"); - } - SpiDrv::spiSlaveDeselect(); - if (_dataLen!=0) - { - return (_data == 1); - } - return false; -} - -bool ServerDrv::sendUdpData(uint8_t sock) -{ - WAIT_FOR_SLAVE_SELECT(); - // Send Command - SpiDrv::sendCmd(SEND_DATA_UDP_CMD, PARAM_NUMS_1); - SpiDrv::sendParam(&sock, sizeof(sock), LAST_PARAM); - - //Wait the reply elaboration - SpiDrv::waitForSlaveReady(); - - // Wait for reply - uint8_t _data = 0; - uint8_t _dataLen = 0; - if (!SpiDrv::waitResponseData8(SEND_DATA_UDP_CMD, &_data, &_dataLen)) - { - WARN("error waitResponse"); - } - SpiDrv::spiSlaveDeselect(); - if (_dataLen!=0) - { - return (_data == 1); - } - return false; -} - +bool ServerDrv::insertDataBuf(uint8_t sock, const uint8_t *data, uint16_t _len) +{ + WAIT_FOR_SLAVE_SELECT(); + // Send Command + SpiDrv::sendCmd(INSERT_DATABUF_CMD, PARAM_NUMS_2); + SpiDrv::sendBuffer(&sock, sizeof(sock)); + SpiDrv::sendBuffer((uint8_t *)data, _len, LAST_PARAM); + + //Wait the reply elaboration + SpiDrv::waitForSlaveReady(); + + // Wait for reply + uint8_t _data = 0; + uint8_t _dataLen = 0; + if (!SpiDrv::waitResponseData8(INSERT_DATABUF_CMD, &_data, &_dataLen)) + { + WARN("error waitResponse"); + } + SpiDrv::spiSlaveDeselect(); + if (_dataLen!=0) + { + return (_data == 1); + } + return false; +} + +bool ServerDrv::sendUdpData(uint8_t sock) +{ + WAIT_FOR_SLAVE_SELECT(); + // Send Command + SpiDrv::sendCmd(SEND_DATA_UDP_CMD, PARAM_NUMS_1); + SpiDrv::sendParam(&sock, sizeof(sock), LAST_PARAM); + + //Wait the reply elaboration + SpiDrv::waitForSlaveReady(); + + // Wait for reply + uint8_t _data = 0; + uint8_t _dataLen = 0; + if (!SpiDrv::waitResponseData8(SEND_DATA_UDP_CMD, &_data, &_dataLen)) + { + WARN("error waitResponse"); + } + SpiDrv::spiSlaveDeselect(); + if (_dataLen!=0) + { + return (_data == 1); + } + return false; +} + bool ServerDrv::sendData(uint8_t sock, const uint8_t *data, uint16_t len) { diff --git a/hardware/arduino/avr/libraries/WiFi/utility/server_drv.h b/libraries/WiFi/src/utility/server_drv.h similarity index 97% rename from hardware/arduino/avr/libraries/WiFi/utility/server_drv.h rename to libraries/WiFi/src/utility/server_drv.h index 50ba7e396..c8b234418 100644 --- a/hardware/arduino/avr/libraries/WiFi/utility/server_drv.h +++ b/libraries/WiFi/src/utility/server_drv.h @@ -2,18 +2,18 @@ #define Server_Drv_h #include -#include "wifi_spi.h" +#include "utility/wifi_spi.h" + +typedef enum eProtMode {TCP_MODE, UDP_MODE}tProtMode; -typedef enum eProtMode {TCP_MODE, UDP_MODE}tProtMode; - class ServerDrv { public: - - // Start server TCP on port specified - static void startServer(uint16_t port, uint8_t sock, uint8_t protMode=TCP_MODE); - static void startClient(uint32_t ipAddress, uint16_t port, uint8_t sock, uint8_t protMode=TCP_MODE); + // Start server TCP on port specified + static void startServer(uint16_t port, uint8_t sock, uint8_t protMode=TCP_MODE); + + static void startClient(uint32_t ipAddress, uint16_t port, uint8_t sock, uint8_t protMode=TCP_MODE); static void stopClient(uint8_t sock); @@ -25,12 +25,12 @@ public: static bool getDataBuf(uint8_t sock, uint8_t *data, uint16_t *len); - static bool insertDataBuf(uint8_t sock, const uint8_t *_data, uint16_t _dataLen); - + static bool insertDataBuf(uint8_t sock, const uint8_t *_data, uint16_t _dataLen); + static bool sendData(uint8_t sock, const uint8_t *data, uint16_t len); - static bool sendUdpData(uint8_t sock); - + static bool sendUdpData(uint8_t sock); + static uint16_t availData(uint8_t sock); static uint8_t checkDataSent(uint8_t sock); diff --git a/hardware/arduino/sam/libraries/WiFi/utility/socket.c b/libraries/WiFi/src/utility/socket.c similarity index 95% rename from hardware/arduino/sam/libraries/WiFi/utility/socket.c rename to libraries/WiFi/src/utility/socket.c index 665073b04..acf2777ea 100644 --- a/hardware/arduino/sam/libraries/WiFi/utility/socket.c +++ b/libraries/WiFi/src/utility/socket.c @@ -5,7 +5,7 @@ * */ #include -#include "socket.h" +#include "utility/socket.h" SOCKET socket(uint8 protocol) {return 0;} // Opens a socket(TCP or UDP or IP_RAW mode) void close(SOCKET s) {} // Close socket diff --git a/hardware/arduino/avr/libraries/WiFi/utility/spi_drv.h b/libraries/WiFi/src/utility/spi_drv.h similarity index 98% rename from hardware/arduino/avr/libraries/WiFi/utility/spi_drv.h rename to libraries/WiFi/src/utility/spi_drv.h index b7e4cb72e..048c6b0c5 100644 --- a/hardware/arduino/avr/libraries/WiFi/utility/spi_drv.h +++ b/libraries/WiFi/src/utility/spi_drv.h @@ -2,9 +2,9 @@ #define SPI_Drv_h #include -#include "wifi_spi.h" +#include "utility/wifi_spi.h" -#define SPI_START_CMD_DELAY 10 +#define SPI_START_CMD_DELAY 10 #define NO_LAST_PARAM 0 #define LAST_PARAM 1 diff --git a/hardware/arduino/avr/libraries/WiFi/utility/wifi_drv.cpp b/libraries/WiFi/src/utility/wifi_drv.cpp similarity index 98% rename from hardware/arduino/avr/libraries/WiFi/utility/wifi_drv.cpp rename to libraries/WiFi/src/utility/wifi_drv.cpp index ccd5f254f..8786dada1 100644 --- a/hardware/arduino/avr/libraries/WiFi/utility/wifi_drv.cpp +++ b/libraries/WiFi/src/utility/wifi_drv.cpp @@ -3,15 +3,15 @@ #include #include "Arduino.h" -#include "spi_drv.h" -#include "wifi_drv.h" +#include "utility/spi_drv.h" +#include "utility/wifi_drv.h" #define _DEBUG_ extern "C" { -#include "wifi_spi.h" -#include "wl_types.h" -#include "debug.h" +#include "utility/wifi_spi.h" +#include "utility/wl_types.h" +#include "utility/debug.h" } // Array of data to cache the information related to the networks discovered @@ -53,26 +53,26 @@ void WiFiDrv::getNetworkData(uint8_t *ip, uint8_t *mask, uint8_t *gwip) SpiDrv::spiSlaveDeselect(); } -void WiFiDrv::getRemoteData(uint8_t sock, uint8_t *ip, uint8_t *port) -{ - tParam params[PARAM_NUMS_2] = { {0, (char*)ip}, {0, (char*)port} }; - - WAIT_FOR_SLAVE_SELECT(); - - // Send Command - SpiDrv::sendCmd(GET_REMOTE_DATA_CMD, PARAM_NUMS_1); - SpiDrv::sendParam(&sock, sizeof(sock), LAST_PARAM); - - //Wait the reply elaboration - SpiDrv::waitForSlaveReady(); - - // Wait for reply - SpiDrv::waitResponseParams(GET_REMOTE_DATA_CMD, PARAM_NUMS_2, params); - - SpiDrv::spiSlaveDeselect(); -} - - +void WiFiDrv::getRemoteData(uint8_t sock, uint8_t *ip, uint8_t *port) +{ + tParam params[PARAM_NUMS_2] = { {0, (char*)ip}, {0, (char*)port} }; + + WAIT_FOR_SLAVE_SELECT(); + + // Send Command + SpiDrv::sendCmd(GET_REMOTE_DATA_CMD, PARAM_NUMS_1); + SpiDrv::sendParam(&sock, sizeof(sock), LAST_PARAM); + + //Wait the reply elaboration + SpiDrv::waitForSlaveReady(); + + // Wait for reply + SpiDrv::waitResponseParams(GET_REMOTE_DATA_CMD, PARAM_NUMS_2, params); + + SpiDrv::spiSlaveDeselect(); +} + + // Public Methods diff --git a/hardware/arduino/avr/libraries/WiFi/utility/wifi_drv.h b/libraries/WiFi/src/utility/wifi_drv.h similarity index 99% rename from hardware/arduino/avr/libraries/WiFi/utility/wifi_drv.h rename to libraries/WiFi/src/utility/wifi_drv.h index d6ec029de..61e9a3943 100644 --- a/hardware/arduino/avr/libraries/WiFi/utility/wifi_drv.h +++ b/libraries/WiFi/src/utility/wifi_drv.h @@ -2,9 +2,9 @@ #define WiFi_Drv_h #include -#include "wifi_spi.h" +#include "utility/wifi_spi.h" #include "IPAddress.h" -#include "../WiFiUdp.h" +#include "WiFiUdp.h" // Key index length #define KEY_IDX_LEN 1 @@ -41,11 +41,11 @@ private: static int getHostByName(IPAddress& aResult); - /* - * Get remote Data information on UDP socket - */ - static void getRemoteData(uint8_t sock, uint8_t *ip, uint8_t *port); - + /* + * Get remote Data information on UDP socket + */ + static void getRemoteData(uint8_t sock, uint8_t *ip, uint8_t *port); + public: /* @@ -239,8 +239,8 @@ public: */ static char* getFwVersion(); - friend class WiFiUDP; - + friend class WiFiUDP; + }; extern WiFiDrv wiFiDrv; diff --git a/hardware/arduino/avr/libraries/WiFi/utility/wl_definitions.h b/libraries/WiFi/src/utility/wl_definitions.h similarity index 98% rename from hardware/arduino/avr/libraries/WiFi/utility/wl_definitions.h rename to libraries/WiFi/src/utility/wl_definitions.h index 1ec8e712c..44d0525a4 100644 --- a/hardware/arduino/avr/libraries/WiFi/utility/wl_definitions.h +++ b/libraries/WiFi/src/utility/wl_definitions.h @@ -28,7 +28,7 @@ #define WL_MAX_ATTEMPT_CONNECTION 10 typedef enum { - WL_NO_SHIELD = 255, + WL_NO_SHIELD = 255, WL_IDLE_STATUS = 0, WL_NO_SSID_AVAIL, WL_SCAN_COMPLETED, diff --git a/hardware/arduino/avr/libraries/WiFi/utility/wl_types.h b/libraries/WiFi/src/utility/wl_types.h similarity index 100% rename from hardware/arduino/avr/libraries/WiFi/utility/wl_types.h rename to libraries/WiFi/src/utility/wl_types.h