Twitter

by acls us

Electric IMP based Gateway for Ruuvi Tags IoT Sensors

RuuviElectric IMPGrafanaZabbix 

In this article I will show how to use an Electric Imp (IMP004m) as a Gateway for collecting the Sensor data using BLE and delivering it via the impCentral infrastructure, collected by Zabbix and display on a Grafana Dashboard.RuuviTags are an inexpensive environmental monitoring Sensors created on an Open Source platform. The Sensors (in their default configuration) broadcast Bluetooth (BLE) adverts of the data they collect (Humidity, Temperature, Pressure, 3D accelerometer) together with their internal battery voltage. There is a Smart Phone App to collect and display this data (also with an option to post the data to an URL) but options for collecting the data and sending it directly to a Cloud Server are limited.

Ruuvi-Imp Diagram

Electric Imp manufacture a small range of IoT devices with various external interfacing options. In particular, the IMP004m has the Bluetooth BLE supported required to receive the RuuviTag Sensor broadcast data when used in conjunction with the IMP004m Breakout board. The Electric Imp infrastructure uses code that executes on the device itself that communicates with an Agent that executes on the Cloud Servers (impCentral). The Agent can then either send out data or be queried to retrieve the collected data. In the implementation described in this article the later approach has been taken for simplicity. Zabbix has been used to collected data from the Electric Imp Agent via a simple REST (HTTP GET) interface with the data being returned by the Agent in a string that can be parsed using RegEx in Zabbix. A Grafana Dashboard is then used to display the results (a Grafana plugin that uses the Zabbix API to read the data from Zabbix).

Details on setting up a device on impCentral can be found on the Electric Imp web site.

The IMP004m needs a small hardware modification to connect the Bluetooth chip to the internal communications on the IMP004m. Details here.

An example of the Grafana Dashboard can be seen here.

The IMP004m Device/Agent code.

The Device code (see below) has been written to save the Ruuvi Sensor data as it arrives allowing the Agent code to get all the Sensor data at one go and return it via Zabbix queries.

IMP004m Device Code...

const IMP004M_BT_FIRMWARE = "\x4C\xFC\x46\x00\x17\x21\x00\x42\x52\x43\x4D\x63\x66\x67\x53\x00\x00\x00\x00\x32\x00\x00\x00\x01\x01\x04\x18\x92\x00\x00\x00\x03\x06\xAC\x1F\x12\xA1\x43\x43\x00\x01\x1C\x42\x17\x21\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFE\x00\x00\x4C\xFC\xFF\x42\x17\x21\x00\x42\x52\x43\x4D\x63\x66\x67\x44\x00\x00\x00\x00\xF1\x39\x00\x00\x03\x03\x22\x42\x43\x4D\x34\x33\x34\x33\x41\x31\x20\x55\x41\x52\x54\x20\x33\x37\x2E\x34\x20\x4D\x48\x7A\x20\x77\x6C\x62\x67\x61\x5F\x72\x65\x66\x00\x16\x03\x02\x1C\x00\x02\x01\x98\x03\x08\x01\x32\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x32\x00\xFF\x0F\x00\x00\x62\x08\x00\x00\x70\x00\x64\x00\x80\x00\x00\x00\x80\x00\x00\x00\xAC\x00\x32\x00\xFF\xFF\xFF\x01\x00\x00\x2F\x00\x8C\x00\x32\x00\x00\xF0\xFF\x0F\x00\x10\x11\x01\x78\x00\x32\x00\xFF\xFF\xFF\xFF\xB9\xB8\xB8\xB8\x60\x2C\x20\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x10\x01\x32\x00\x00\x00\xFF\xFF\x00\x00\x18\x18\x6C\x01\x60\x00\xFF\xFF\xFF\xFF\x0B\x00\x00\x00\x70\x01\x60\x00\xFF\xFF\xFF\xFF\x10\x00\x00\x00\x74\x01\x60\x00\xFF\xFF\xFF\xFF\x15\x00\x00\x00\x78\x01\x60\x00\xFF\xFF\xFF\xFF\x19\x00\x00\x00\x7C\x01\x60\x00\xFF\xFF\x00\x00\x1D\x00\x00\x00\x84\x01\x60\x00\xFF\xFF\xFF\xFF\x21\x00\x00\x00\x60\x06\x41\x00\xFF\xFF\x00\x00\x33\x03\x00\x00\x64\x06\x41\x00\xFF\xFF\x00\x00\x29\x4C\xFC\xFF\x3D\x18\x21\x00\x3A\x00\x00\x64\x06\x41\x00\xFF\xFF\x00\x00\x29\x3A\x00\x00\x68\x06\x41\x00\xFF\xFF\x00\x00\x68\x05\x00\x00\x6C\x06\x41\x00\xFF\xFF\x00\x00\xA8\x30\x00\x00\x70\x06\x41\x00\xFF\xFF\x00\x00\xE8\x3E\x00\x00\x74\x06\x41\x00\xFF\xFF\x00\x00\x1C\x32\x00\x00\x78\x06\x41\x00\xFF\xFF\x00\x00\xBB\x33\x00\x00\x7C\x06\x41\x00\xFF\xFF\x00\x00\x30\x09\x00\x00\x40\x01\x41\x00\xFF\xFF\x00\x00\x10\x05\x00\x00\x44\x01\x41\x00\xFF\xFF\x00\x00\x09\x09\x00\x00\x4C\x01\x41\x00\xFF\xFF\x00\x00\x09\x08\x00\x00\x50\x01\x41\x00\xFF\xFF\x00\x00\x0F\x07\x00\x00\x54\x01\x41\x00\xFF\xFF\x00\x00\x05\x08\x00\x00\x5C\x01\x41\x00\xFF\xFF\x00\x00\x0E\x09\x00\x00\x60\x01\x41\x00\xFF\xFF\x00\x00\x05\x09\x00\x00\x64\x01\x41\x00\xFF\xFF\x00\x00\x10\x0A\x00\x00\xE0\x06\x41\x00\xFF\xFF\x00\x00\x71\x20\x00\x00\x9C\x01\x60\x00\xFF\x00\x00\x00\x03\x00\x00\x00\x64\x01\x60\x00\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x09\x01\x04\x02\x01\x00\x00\x22\x03\x02\x01\x00\xF0\x01\x28\x04\x00\x00\x00\x20\x15\x32\x00\xFF\xFF\xFA\xFF\xD9\x03\x3E\xFE\x28\x4C\xFC\xFF\x38\x19\x21\x00\x15\x32\x00\x00\x00\x7F\xFE\x34\x10\x28\x02\x2C\x09\x64\x00\x0E\x00\x00\x00\x0C\x00\x00\x00\xF0\x01\x28\x01\x00\x00\x00\x20\x15\x32\x00\xFF\xFF\xFA\xFF\xDD\x03\x3E\xFE\x28\x15\x32\x00\x00\x00\x7F\xFE\x34\x10\x28\x02\x2C\x09\x64\x00\x0E\x00\x00\x00\x0C\x00\x00\x00\xF0\x01\x28\x02\x00\x00\x00\x20\x15\x32\x00\xFF\xFF\xFA\xFF\xD9\x03\x3E\xFE\x28\x15\x32\x00\x00\x00\x7F\xFE\x34\x10\x28\x02\x2C\x09\x64\x00\x0E\x00\x00\x00\x0C\x00\x00\x00\xF0\x01\xA0\x01\x03\x00\x00\x00\x10\x15\x32\x00\x00\x00\x00\x00\xF0\xF0\xF0\x00\x14\x15\x32\x00\x00\x00\x00\x00\xF0\xF0\xF0\x00\x18\x15\x32\x00\x00\x00\x00\x00\xF0\xF0\xF0\x00\x1C\x15\x32\x00\x00\x00\x00\x00\x4C\x4C\x00\x00\x20\x15\x32\x00\xFF\xFF\xFA\xFF\xDD\x03\x3E\xFE\x24\x15\x32\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x15\x32\x00\x00\x00\x7F\xFE\x34\x10\x28\x02\x34\x15\x32\x00\x00\x00\x00\x00\xF0\x00\x00\x00\x38\x15\x32\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x15\x32\x00\x00\x00\x00\x00\xCA\x06\x00\x00\x2C\x09\x64\x00\x0E\x00\x00\x00\x0C\x00\x00\x00\xF8\x00\x4C\xFC\xFF\x33\x1A\x21\x00\x64\x00\x51\x00\x00\x00\x10\x00\x00\x00\x78\x08\x64\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01\x07\xB5\x03\x04\x06\x0A\x23\x3C\x5A\x6E\x7D\x05\x38\x04\x88\x04\x9C\x04\x88\x04\xD8\x04\x74\x04\xC4\x04\xD8\x04\xC4\x04\x14\x05\xB0\x04\x00\x05\x14\x05\x00\x05\x50\x05\xF6\x04\x46\x05\x5A\x05\x46\x05\x96\x05\x3C\x05\x8C\x05\xA0\x05\x8C\x05\xDC\x05\x82\x05\xD2\x05\xE6\x05\xD2\x05\x22\x06\x14\xFF\x14\xFF\x14\xFF\x14\xFF\x14\xFF\x14\xFF\xA8\x02\xA8\x02\xA8\x02\xA8\x02\xA8\x02\xE4\x02\xE4\x02\xE4\x02\xE4\x02\xE4\x02\x20\x03\x20\x03\x20\x03\x20\x03\x20\x03\x66\x03\x66\x03\x66\x03\x66\x03\x66\x03\xAC\x03\xAC\x03\xAC\x03\xAC\x03\xAC\x03\xF2\x03\xF2\x03\xF2\x03\xF2\x03\xF2\x03\x14\xFF\x14\xFF\x14\xFF\x14\xFF\x14\xFF\x14\xFF\x06\x00\x00\x00\x60\x00\x05\x9C\x02\xFF\xA0\x02\xFF\xA4\x02\xFF\xA8\x02\xFF\xAC\x02\xFF\x00\x00\x60\x00\x05\xC8\x02\xFF\xCC\x02\xFF\xD0\x02\xFF\xD4\x02\xFF\xD8\x02\xFF\x00\x00\x60\x00\x05\x88\x03\xFF\x8C\x03\xFF\x90\x03\xFF\x94\x03\xFF\x98\x03\xFF\x00\x00\x60\x00\x05\x9C\x03\xFF\xA0\x03\x4C\xFC\xFF\x2E\x1B\x21\x00\xFF\xA4\x03\xFF\xA8\x03\xFF\xAC\x03\xFF\x00\x00\x60\x00\x05\x80\x03\xFF\x84\x03\xFF\xA0\x06\xFF\xB4\x02\xFF\x38\x07\xFF\x00\x00\x60\x00\x03\xA4\x06\xFF\x5C\x06\xFF\x98\x06\xFF\x4C\x4C\x4C\x4C\x4C\x41\x41\x41\x41\x41\x85\x85\x85\x85\x84\xA6\xA5\xA5\xA5\xA5\xA4\xF4\x18\x03\xFA\x65\x03\xCC\x5F\x5F\x5F\x5F\x5F\x4D\x4D\x4D\x4D\x4D\x84\x84\x84\x84\x83\xA5\xA4\xA4\xA4\xA4\xA4\xF4\x1A\x03\xFA\x66\x03\xCC\x6C\x6C\x6C\x6C\x6C\x58\x58\x58\x58\x58\x84\x84\x84\x84\x83\xA5\xA4\xA4\xA4\xA4\xA4\xF4\x1F\x03\xFA\x66\x03\xCC\x85\x85\x85\x85\x85\x69\x69\x69\x69\x69\x84\x84\x84\x84\x83\xA5\xA4\xA4\xA4\xA4\xA4\xF4\x1F\x03\xFA\x66\x03\xCC\x99\x99\x99\x99\x99\x74\x74\x74\x74\x74\x84\x84\x84\x84\x83\xA5\xA4\xA4\xA4\xA4\xA4\xF4\x1F\x03\xFA\x67\x03\xCC\xB3\xB3\xB3\xB3\xB3\x82\x82\x82\x82\x82\x84\x84\x84\x84\x83\xA5\xA4\xA4\xA4\xA4\xA4\xF4\x1F\x03\xFA\x67\x23\xFF\x01\x07\xB5\x03\x00\x06\x0A\x23\x3C\x5A\x6E\x7D\x05\x5C\x03\x3E\x03\x48\x03\x5C\x03\x48\x03\x98\x03\x7A\x03\x84\x03\x98\x03\x84\x03\xD4\x03\xB6\x03\xC0\x03\x4C\xFC\xFF\x29\x1C\x21\x00\xD4\x03\xC0\x03\x1A\x04\xFC\x03\x06\x04\x1A\x04\x06\x04\x60\x04\x42\x04\x4C\x04\x60\x04\x4C\x04\xA6\x04\x88\x04\x92\x04\xA6\x04\x92\x04\x14\xFF\x14\xFF\x14\xFF\x14\xFF\x14\xFF\x14\xFF\x44\x02\x30\x02\x26\x02\x12\x02\x1C\x02\x80\x02\x6C\x02\x62\x02\x4E\x02\x58\x02\xBC\x02\xA8\x02\x9E\x02\x8A\x02\x94\x02\x02\x03\xEE\x02\xE4\x02\xD0\x02\xDA\x02\x48\x03\x34\x03\x2A\x03\x16\x03\x20\x03\x8E\x03\x7A\x03\x70\x03\x5C\x03\x66\x03\x14\xFF\x14\xFF\x14\xFF\x14\xFF\x14\xFF\x14\xFF\x06\x00\x00\x00\x60\x00\x05\x9C\x02\xFF\xA0\x02\xFF\xA4\x02\xFF\xA8\x02\xFF\xAC\x02\xFF\x00\x00\x60\x00\x05\xC8\x02\xFF\xCC\x02\xFF\xD0\x02\xFF\xD4\x02\xFF\xD8\x02\xFF\x00\x00\x60\x00\x05\x88\x03\xFF\x8C\x03\xFF\x90\x03\xFF\x94\x03\xFF\x98\x03\xFF\x00\x00\x60\x00\x05\x9C\x03\xFF\xA0\x03\xFF\xA4\x03\xFF\xA8\x03\xFF\xAC\x03\xFF\x00\x00\x60\x00\x05\x80\x03\xFF\x84\x03\xFF\xA0\x06\xFF\xB4\x02\xFF\x38\x07\xFF\x00\x00\x60\x00\x03\xA4\x06\xFF\x5C\x06\xFF\x98\x06\xFF\x43\x39\x37\x37\x38\x38\x35\x35\x36\x35\x88\x86\x86\x86\x85\xA8\xA6\x4C\xFC\xFF\x24\x1D\x21\x00\xA6\xA6\xA4\xA4\xF4\x18\x03\xFA\x65\x03\xCC\x4C\x45\x41\x42\x43\x40\x3C\x3B\x3B\x3C\x88\x86\x86\x86\x85\xA8\xA6\xA6\xA6\xA4\xA4\xF4\x1A\x03\xFA\x66\x03\xCC\x5C\x52\x52\x52\x52\x4B\x47\x47\x47\x47\x88\x86\x86\x86\x85\xA8\xA6\xA6\xA6\xA4\xA4\xF4\x1F\x03\xFA\x66\x03\xCC\x6A\x63\x5F\x5F\x64\x57\x53\x52\x52\x53\x88\x86\x86\x86\x85\xA8\xA6\xA6\xA6\xA4\xA4\xF4\x1F\x03\xFA\x66\x03\xCC\x7C\x71\x6E\x6E\x71\x61\x5D\x5C\x5C\x5D\x88\x86\x86\x86\x85\xA8\xA6\xA6\xA6\xA4\xA4\xF4\x1F\x03\xFA\x67\x03\xCC\x8C\x81\x7F\x7F\x81\x6F\x68\x67\x67\x68\x88\x86\x86\x86\x85\xA8\xA6\xA6\xA6\xA4\xA4\xF4\x1F\x03\xFA\x67\x23\xFF\x02\x07\x7F\x04\x06\x05\x38\x04\x88\x04\x9C\x04\x88\x04\xD8\x04\x74\x04\xC4\x04\xD8\x04\xC4\x04\x14\x05\xB0\x04\x00\x05\x14\x05\x00\x05\x50\x05\xF6\x04\x46\x05\x5A\x05\x46\x05\x96\x05\x3C\x05\x8C\x05\xA0\x05\x8C\x05\xDC\x05\x82\x05\xD2\x05\xE6\x05\xD2\x05\x22\x06\x14\xFF\x14\xFF\x14\xFF\x14\xFF\x14\xFF\x14\xFF\x01\x00\x00\x00\x60\x00\x05\x9C\x02\xFF\xA0\x02\xFF\xA4\x02\xFF\xA8\x02\xFF\xAC\x02\xFF\x4C\xFC\xFF\x1F\x1E\x21\x00\x4C\x4C\x4C\x4C\x4C\x5F\x5F\x5F\x5F\x5F\x6C\x6C\x6C\x6C\x6C\x85\x85\x85\x85\x85\x99\x99\x99\x99\x99\xB3\xB3\xB3\xB3\xB3\x02\x07\x7F\x00\x06\x05\x5C\x03\x3E\x03\x48\x03\x5C\x03\x48\x03\x98\x03\x7A\x03\x84\x03\x98\x03\x84\x03\xD4\x03\xB6\x03\xC0\x03\xD4\x03\xC0\x03\x1A\x04\xFC\x03\x06\x04\x1A\x04\x06\x04\x60\x04\x42\x04\x4C\x04\x60\x04\x4C\x04\xA6\x04\x88\x04\x92\x04\xA6\x04\x92\x04\x14\xFF\x14\xFF\x14\xFF\x14\xFF\x14\xFF\x14\xFF\x01\x00\x00\x00\x60\x00\x05\x9C\x02\xFF\xA0\x02\xFF\xA4\x02\xFF\xA8\x02\xFF\xAC\x02\xFF\x43\x39\x37\x37\x38\x4C\x45\x41\x42\x43\x5C\x53\x52\x52\x52\x6A\x63\x5F\x5F\x64\x7C\x71\x6E\x6E\x71\x8C\x81\x7F\x7F\x81\x00\x07\x04\x3F\x00\x00\x00\x03\x01\xC4\x01\x08\x0A\x20\x00\x08\x08\x00\x00\x04\x04\x00\x00\x10\x10\x00\x00\x08\x08\x00\x00\x18\x18\x00\x00\x28\x28\x00\x00\x20\x20\x00\x00\x2C\x2C\x00\x00\x28\x28\x00\x00\x30\x30\x00\x00\x41\x41\x00\x00\x34\x34\x00\x00\x49\x49\x00\x00\x20\x20\x01\x01\x50\x50\x00\x00\x24\x24\x01\x01\x58\x58\x00\x00\x40\x40\x01\x01\x8A\x8A\x00\x00\x4C\xFC\xFF\x1A\x1F\x21\x00\x60\x60\x01\x01\x8B\x8B\x00\x00\x64\x64\x01\x01\x8C\x8C\x00\x00\x60\x60\x02\x02\x8D\x8D\x00\x00\x64\x64\x02\x02\x8E\x8E\x00\x00\x68\x68\x02\x02\x8F\x8F\x00\x00\x6C\x6C\x02\x02\x96\x96\x00\x00\x70\x70\x02\x02\xA5\xA5\x00\x00\x50\x50\x03\x03\xA6\xA6\x00\x00\x54\x54\x03\x03\xDD\xDD\x00\x00\x74\x74\x03\x03\xE5\xE5\x00\x00\x78\x78\x03\x03\xED\xED\x00\x00\x98\x98\x03\x03\xEE\xEE\x00\x00\xFC\xFC\x03\x03\xEF\xEF\x00\x00\xBC\xBC\x03\x03\xEF\xEF\x00\x00\xBC\xBC\x03\x03\x03\x01\x64\xC8\x0A\x20\x00\x40\x00\x00\x01\x40\x00\x00\x01\x40\x00\x00\x01\x40\x00\x00\x01\x40\x00\x00\x01\x41\x00\x04\x01\x49\x00\x24\x01\x50\x00\x40\x01\x58\x00\x60\x01\x52\x00\x48\x01\x53\x00\x4C\x01\x54\x00\x50\x01\x55\x00\x54\x01\x56\x00\x58\x01\x57\x00\x5C\x01\x66\x00\x98\x01\x6E\x00\xB8\x01\x76\x00\xD8\x01\x7E\x00\xF8\x01\x7F\x00\xFC\x01\x7F\x00\xFC\x01\x7F\x00\xFC\x01\x7F\x00\xFC\x01\x7F\x00\xFC\x01\x03\x01\x3A\x28\x0B\x20\x00\x01\x00\x00\x01\x00\x00\x05\x00\x00\x0D\x00\x00\x1D\x00\x00\x0E\x00\x00\x1E\x00\x00\x3E\x00\x00\x0F\x4C\xFC\xFF\x15\x20\x21\x00\x00\x00\x1F\x00\x00\x3F\x00\x00\x7F\x00\x00\xFF\x00\x00\xFF\x00\x00\xFF\x00\x00\xFF\x00\x00\xFF\x00\x00\xFF\x00\x00\x03\x01\x05\x08\x08\x20\x00\x06\x03\x01\x05\x0C\x08\x20\x00\x05\x03\x01\x05\x10\x08\x20\x00\x0B\x03\x01\x05\x14\x08\x20\x00\x0A\x04\x07\x98\x01\x04\x32\x1F\x00\x00\x1D\x00\x00\x1C\x01\x00\x1A\x02\x00\x17\x02\x00\x15\x12\x00\x13\x55\x00\x11\x64\x00\x0F\x11\x00\x0E\x03\x00\x0D\x14\x00\x0B\x50\x00\x0A\x64\x00\x09\x23\x00\x08\x23\x00\x07\x03\x00\x07\x16\x00\x06\x15\x00\x05\x13\x00\x05\x16\x00\x04\x13\x00\x04\x26\x00\x04\x19\x00\x03\x05\x00\x03\x08\x00\x03\x2A\x00\x02\x03\x00\x02\x16\x00\x02\x09\x00\x02\x2B\x00\x02\x3D\x00\x02\x3F\x00\x01\x02\x00\x01\x15\x00\x01\x18\x00\x01\x3A\x00\x01\x1D\x00\x01\x1F\x00\x01\x8F\x00\x01\xEF\x00\x01\x3F\x01\x01\x8F\x01\x01\xCF\x01\x01\x0F\x02\x01\x4F\x02\x01\x7F\x02\x01\xAF\x02\x01\xCF\x02\x01\x00\x00\x01\x00\x00\x04\x07\x98\x01\x00\x32\x1F\x00\x00\x1D\x00\x00\x1C\x01\x00\x1A\x02\x00\x17\x02\x00\x15\x12\x00\x13\x55\x00\x11\x64\x00\x0F\x11\x00\x0E\x4C\xFC\xFF\x10\x21\x21\x00\x03\x00\x0D\x14\x00\x0B\x50\x00\x0A\x64\x00\x09\x23\x00\x08\x23\x00\x07\x03\x00\x07\x16\x00\x06\x15\x00\x05\x13\x00\x05\x16\x00\x04\x13\x00\x04\x26\x00\x04\x19\x00\x03\x05\x00\x03\x08\x00\x03\x2A\x00\x02\x03\x00\x02\x16\x00\x02\x09\x00\x02\x2B\x00\x02\x3D\x00\x02\x3F\x00\x01\x02\x00\x01\x15\x00\x01\x18\x00\x01\x3A\x00\x01\x1D\x00\x01\x1F\x00\x01\x8F\x00\x01\xEF\x00\x01\x3F\x01\x01\x8F\x01\x01\xCF\x01\x01\x0F\x02\x01\x4F\x02\x01\x7F\x02\x01\xAF\x02\x01\xCF\x02\x01\x00\x00\x01\x00\x00\x03\x07\x2B\x01\x00\x00\x00\x01\x00\x00\x00\x00\x14\x0A\x00\x04\x00\x00\x00\x00\x00\x00\x0A\x02\xFE\x0B\xE4\xFE\x1C\x01\xE4\xFE\x1C\x01\x0A\x02\xFE\x0B\xF1\xFF\x0F\x00\xF1\xFF\x0F\x00\x0F\x03\x28\x02\x78\x14\x7F\x5A\x00\x14\x02\x14\x1E\x00\x02\x03\x00\x1E\xAA\x33\x19\x05\xCF\x00\x80\x0A\x92\x00\x00\x00\x00\x07\x00\x00\xA2\x00\x00\x00\x00\x00\x00\x00\x00\x03\x01\x05\x18\x13\x21\x00\x90\x03\x01\x0C\xDC\x1D\x20\x00\x01\x01\x30\x00\x02\x0A\x0A\x00\x03\x01\x05\x48\x2C\x20\x00\x01\x03\x01\x05\x24\x33\x20\x00\x00\x03\x4C\xFC\xFF\x0B\x22\x21\x00\x01\x05\x4E\x05\x20\x00\x00\x03\x01\x14\x00\x02\x0D\x00\x8F\xB0\x00\x24\x01\x48\xC4\x61\x6D\xF7\x90\xBC\x00\x3F\x20\x00\x03\x01\x0E\x10\x02\x0D\x00\x10\x22\xA8\xF7\x9D\xFD\xA9\xF7\x53\xB8\x03\x01\x12\x1A\x02\x0D\x00\x02\xD5\x20\x46\x00\xF0\x81\xF8\xA8\xF7\xCF\xBB\x00\x00\x03\x01\x0C\x28\x02\x0D\x00\x00\xF0\xDE\xF8\x10\xBD\x00\x00\x03\x01\x0C\x30\x02\x0D\x00\x73\xF7\xC0\xFC\x72\xF7\xA6\xBA\x03\x01\x0C\x38\x02\x0D\x00\x00\xF0\xF4\xF8\x10\xBD\x00\x00\x03\x01\x18\x40\x02\x0D\x00\x20\x46\x29\x46\x00\xF0\xF8\xF9\x08\xB1\x4F\xF7\x57\xBF\x4F\xF7\x69\xBF\x00\x00\x03\x01\x24\x54\x02\x0D\x00\x04\x70\x7D\xF7\xA6\xFC\x5E\xF7\x57\xFD\x5B\xF7\x11\xFD\x5B\xF7\x67\xFD\x00\xF0\xF6\xF8\x4F\xF4\xC0\x20\x00\x21\x5B\xF7\xAE\xBC\x03\x01\x14\x74\x02\x0D\x00\x15\x7F\x06\x2D\x01\xD0\xC2\xF8\x1A\x40\x86\xF7\xD1\xBC\x00\x00\x03\x01\x10\x84\x02\x0D\x00\xE8\x60\x01\x20\xA8\x76\x99\xF7\x49\xBF\x00\x00\x03\x01\x10\x90\x02\x0D\x00\xC8\xF8\x08\x10\x00\xF0\xDE\xFB\x73\xF7\x7C\xB8\x03\x01\x0C\x9C\x02\x0D\x00\x00\xF0\x88\xFC\x4C\xFC\xFF\x06\x23\x21\x00\xBD\xE8\xF0\x81\x03\x01\x0C\xA4\x02\x0D\x00\x01\xF0\x66\xFA\xBD\xE8\xF0\x81\x03\x01\x0C\xAC\x02\x0D\x00\xBD\xE8\xF0\x4F\x01\xF0\xD9\xBB\x03\x01\x10\xB4\x02\x0D\x00\x62\xF7\xAF\xFD\xAD\xF8\x0C\x00\x64\xF7\x5C\xBD\x03\x01\x0C\xC0\x02\x0D\x00\x01\xF0\x52\xFD\x70\xBD\x00\x00\x03\x01\x18\xC8\x02\x0D\x00\x01\x20\x60\xF3\x0F\x24\x04\xF0\xFE\x00\x5C\xF7\xBE\xFF\x5D\xF7\x14\xB8\x00\x00\x03\x01\x10\xDC\x02\x0D\x00\x28\x46\x02\xF0\x0F\xFB\xBD\xE8\xF0\x81\x00\x00\x03\x01\x14\xE8\x02\x0D\x00\x20\x46\x02\x49\x32\xF7\xF3\xFE\xA6\xF7\xFD\xBE\x25\x2A\x0D\x00\x03\x01\x0C\xF8\x02\x0D\x00\x02\xF0\xCB\xFB\x32\xF7\x2C\xBE\x03\x01\x1C\x00\x03\x0D\x00\x04\x46\x0D\x46\x02\xF0\xCF\xFB\x10\xB1\x02\x4A\x32\xF7\x6B\xBF\x70\xBD\x00\x00\xC4\x18\x20\x00\x03\x01\x10\x18\x03\x0D\x00\x02\x28\x01\xD9\x4B\xF7\x70\xB9\x4B\xF7\x71\xB9\x03\x01\xC8\x01\x24\x03\x0D\x00\x2D\xE9\xF0\x47\x04\x46\x90\xF8\xD2\x00\x00\xF0\x6B\xF8\x06\x46\xB4\xF8\x48\x00\xB4\xF8\x4A\x10\x88\x42\x03\xD0\x94\xF8\x20\x21\xA8\xF7\xB2\xFA\x45\x00\x35\x80\x4A\x4C\xFC\xFF\x01\x24\x21\x00\xD0\xB4\xF8\x22\x11\x20\x46\x64\xF7\xEF\xFD\x82\x46\x20\x6C\x00\x26\x20\xF4\x80\x20\x4F\xF6\xFF\x79\x20\x64\x04\xEB\x46\x07\xB7\xF8\x28\x01\x48\x45\x37\xD0\x41\x00\x50\x46\x70\xF7\x3E\xFB\xB0\xFB\xF5\xF1\x80\x46\x05\xFB\x11\x80\xA7\xF8\x28\x01\x5F\xEA\x48\x10\x15\xD4\x94\xF8\xD2\x00\x66\xF7\x5C\xFD\x40\x01\x20\xD5\x4F\xF0\x80\x60\xB0\xFB\xF5\xF1\x69\x43\x40\x46\x70\xF7\xAD\xFC\xB0\xFB\xF5\xF1\x05\xFB\x11\x01\xA7\xF8\x28\x11\x40\x01\x10\xD5\xB7\xF8\x28\x01\x02\x23\x2A\x46\x00\x21\x64\xF7\x41\xFA\xA7\xF8\x28\x01\x01\x20\xB0\x40\x21\x6C\xC0\xF3\x00\x00\x41\xEA\x80\x40\x20\x64\x76\x1C\x06\x2E\xC1\xD3\xBD\xE8\xF0\x87\x03\x01\x24\xE8\x03\x0D\x00\x05\x48\x00\x68\x00\x06\x04\xD5\x04\x48\x01\x68\x21\xF0\x02\x01\x01\x60\x00\xF0\x2C\xB8\x00\x00\xFC\x32\x20\x00\x6C\x01\x32\x00\x03\x01\x20\x08\x04\x0D\x00\x04\x49\x09\x78\x88\x42\x03\xD2\x03\x49\x01\xEB\x40\x00\x70\x47\x00\x20\x70\x47\x49\x29\x20\x00\xE0\x30\x0D\x00\x03\x01\x2C\x24\x04\x0D\x00\x06\x4A\x12\x78\x3A\xB1\x06\x4A\x12\x68\x92\x05\x05\xD5\x05\x4C\xFC\xFF\xFC\x24\x21\x00\x4A\x12\x78\x00\x2A\x01\xD0\x80\xF8\x56\x10\x70\x47\xAC\x30\x0D\x00\xFC\x32\x20\x00\xF3\x32\x20\x00\x03\x01\x0E\x4C\x04\x0D\x00\x1F\x48\x00\x21\x01\x60\x08\x46\x70\x47\x03\x01\xAA\x01\x56\x04\x0D\x00\x70\xB5\x1D\x4D\x28\x68\x00\x28\x33\xD0\x1C\x49\x1D\x4C\x09\x78\x22\x78\x51\x43\x74\xF7\xC1\xFF\x00\x20\xFF\x22\x29\x68\x03\xE0\x01\xEB\x00\x13\x40\x1C\x1A\x71\x23\x78\x98\x42\xF8\xD3\x15\x48\x01\x24\x01\x78\x15\x48\x00\x68\x00\xF8\x01\x1B\x14\x49\x08\x60\x14\x49\x0A\x78\x02\x70\x13\x48\x02\x78\x13\x48\x00\x68\x00\xF8\x01\x2B\x12\x4A\x10\x60\x0B\x78\x04\xEB\x43\x03\x03\x70\x10\x68\x10\x4A\x09\x78\x12\x78\xBD\xE8\x70\x40\x10\x44\xFF\x22\xA4\xF7\xF8\xBA\x70\xBD\x00\x00\xA2\x34\x20\x00\xA8\x34\x20\x00\x99\x34\x20\x00\x98\x34\x20\x00\x68\x33\x20\x00\xAC\x34\x20\x00\xB0\x34\x20\x00\x9E\x34\x20\x00\x69\x33\x20\x00\xB4\x34\x20\x00\xB8\x34\x20\x00\x9B\x34\x20\x00\x03\x01\xC0\x02\xFC\x04\x0D\x00\x2D\xE9\xF7\x4F\x82\xB0\x04\x00\x18\xD0\xB4\xF8\x50\x10\xB4\xF8\x4E\x00\x0D\x1A\x95\x42\x00\xD9\x15\x46\x28\x4C\xFC\xFF\xF7\x25\x21\x00\x44\xA4\xF8\x4E\x00\x20\x6C\xA9\x46\x28\x44\x20\x64\x61\x6A\x04\xF1\x10\x00\x4F\xF0\x00\x0A\x00\x90\x51\xB9\x83\xF7\x01\xF9\x18\xB1\x00\x20\x05\xB0\xBD\xE8\xF0\x8F\x20\x69\x60\x62\xC4\xF8\x2C\xA0\xD4\xF8\x24\x80\x04\xF1\x55\x0B\x57\xE0\xB4\xF8\x4C\x10\xE0\x6A\x0E\x1A\xAE\x42\x00\xD9\x2E\x46\xA1\x69\x08\xF1\x0C\x07\x38\x44\x0B\x68\x32\x46\x03\x99\x98\x47\x03\x90\x94\xF8\x54\x00\x30\xB1\xE0\x6A\x32\x46\xC1\x19\x58\x46\x96\xF7\x57\xFD\x08\xE0\x94\xF8\x55\x00\x28\xB1\xE0\x6A\x32\x46\xC1\x19\x58\x46\x96\xF7\x35\xFD\xE0\x6A\xAD\x1B\x30\x44\xE0\x62\xB4\xF8\x4C\x10\x88\x42\x2C\xD1\x40\x46\x83\xF7\xC0\xF8\x04\xF1\x08\x01\x40\x46\x83\xF7\xB7\xF8\xC4\xF8\x2C\xA0\x00\x98\x83\xF7\xBB\xF8\xD8\xB1\xC4\xF8\x24\xA0\x5D\xB1\xB4\xF8\x4E\x00\xA9\xEB\x05\x09\xA0\xEB\x05\x00\xA4\xF8\x4E\x00\x20\x6C\xA0\xEB\x05\x00\x20\x64\xE0\x69\xB4\xF8\x4E\x20\x81\x68\xD9\xB1\xC1\x8B\xCB\x06\x18\xD5\xC1\xF3\x01\x03\x01\x2B\x06\xD0\x08\xE0\x20\x69\x60\x62\x80\x46\x00\x2D\xA5\xD1\xEC\xE7\x83\x8B\x93\x42\x04\xD9\x8B\x07\x08\xD1\x4C\xFC\xFF\xF2\x26\x21\x00\x83\x8B\x93\x42\x05\xD3\x21\xF0\x10\x01\xC1\x83\x82\x68\x81\x69\x90\x47\xA0\x69\xC1\x8B\x41\xF0\x10\x01\xC1\x83\x20\x46\x96\xF7\xC0\xFB\x48\x46\x80\xE7\x03\x01\x38\x38\x06\x0D\x00\x70\xB5\x05\x46\x08\x46\x01\x26\x90\xF8\xA3\x00\xB5\xF8\x0B\x40\xA9\x7A\x40\x09\x00\x22\x48\xF7\xD3\xFD\x00\x28\x09\xD0\x40\x88\xA0\x42\x00\xD2\x04\x46\x2A\x7A\x21\x46\x30\x46\x4F\xF7\x3E\xF9\x01\x20\x70\xBD\x03\x01\x84\x02\x6C\x06\x0D\x00\x2D\xE9\xF0\x4F\x87\xB0\x17\x46\x00\xF1\x09\x04\x53\xF7\x6E\xFF\x74\xF7\x16\xF8\x74\xF7\xEB\xFE\x06\x90\x01\x20\x89\xF7\x84\xFC\x47\x4D\x28\x69\x40\xF0\x01\x00\x28\x61\x28\x68\x40\xF0\x01\x00\x28\x60\x4F\xF4\x48\x1B\xDB\xF8\x00\x00\x42\x4E\x00\x90\x30\x68\x01\x90\x41\x48\x00\x68\x02\x90\x56\xF8\xB8\x0C\xDF\xF8\xFC\x90\x03\x90\xD9\xF8\x00\x00\xDF\xF8\xF8\x80\x04\x90\xD8\xF8\x00\x00\x4F\xF0\x00\x0A\x05\x90\xCB\xF8\x00\xA0\x4F\xF0\x64\x00\x4C\xF7\x18\xFF\x01\x20\x30\x60\x34\x48\xD4\xF8\x06\x10\x01\x60\xE0\x78\x40\xF0\x80\x00\x46\xF8\xB8\x0C\x4F\xF4\xC0\x41\xC8\xF8\x00\x10\xC8\x20\x4C\xFC\xFF\xED\x27\x21\x00\x4C\xF7\x06\xFF\xA0\x88\x40\xF4\x00\x51\xC9\xF8\x00\x10\x41\xF2\x88\x30\x4C\xF7\xFD\xFE\xA1\x88\xC9\xF8\x00\x10\xC8\xF8\x00\xA0\x00\x98\xCB\xF8\x00\x00\x01\x98\x30\x60\x22\x49\x02\x98\x08\x60\x03\x98\x46\xF8\xB8\x0C\x04\x98\xC9\xF8\x00\x00\x05\x98\xC8\xF8\x00\x00\x89\xF7\x52\xFC\x28\x69\x20\xF0\x01\x00\x28\x61\x28\x68\x20\xF0\x01\x00\x28\x60\x06\x98\x74\xF7\x84\xFE\x53\xF7\x1B\xFF\x87\xF8\x05\xA0\x0E\x20\x38\x70\x07\xB0\xBD\xE8\xF0\x8F\x03\x01\x5C\x6C\x07\x0D\x00\x10\xB5\x04\x46\x00\x21\x13\x20\x81\xF7\x51\xFC\x11\x49\x00\x22\xC1\xE9\x0A\x22\x8E\xF7\x44\xFA\x73\xF7\xC7\xF9\x18\xB1\xBD\xE8\x10\x40\x8B\xF7\xF5\xBF\x01\x20\x5B\xF7\xF5\xF9\xB4\xF8\x09\x00\x00\x21\x32\xF7\x53\xFF\xBD\xE8\x10\x40\x00\xF0\xD5\xBF\x00\x00\x60\x01\x65\x00\xBC\x01\x60\x00\x9C\x04\x32\x00\xA0\x04\x32\x00\xFC\x04\x41\x00\x18\x41\x20\x00\x03\x01\x14\xC4\x07\x0D\x00\x12\x48\x81\x68\xC2\xF8\x06\x10\xC0\x68\xC2\xF8\x0A\x00\x70\x47\x03\x01\x50\xD4\x07\x0D\x00\x70\xB5\x0F\x4C\x0E\x46\x00\xF1\x09\x05\xA1\x69\x31\xB1\xB0\xF8\x4C\xFC\xFF\xE8\x28\x21\x00\x09\x00\xBD\xE8\x70\x40\x0C\x21\x32\xF7\x2C\xBF\x09\x48\x73\xF7\x99\xFB\xAB\xF7\x02\xFB\x08\x48\xA5\x61\xC4\xE9\x02\x04\x05\x48\x73\xF7\x96\xFB\x00\x20\x30\x70\x70\xBD\x00\x00\x10\x82\x20\x00\xF4\xEF\x20\x00\x88\x29\x20\x00\x63\x85\x01\x00\x03\x01\x9A\x01\x20\x08\x0D\x00\x2D\xE9\xF0\x41\x00\xF1\x09\x01\x05\x7B\x40\x7B\x4E\x79\x10\x72\x95\x71\xC0\xF3\x41\x01\x14\x46\x00\xF0\x01\x07\xD6\x71\x03\x29\x05\xD0\x29\x06\x05\xD5\x11\x20\x50\x71\xBD\xE8\xF0\x81\x12\x20\xFA\xE7\x04\x2D\x01\xD2\x60\x49\x01\xE0\x5F\x49\x09\x1D\xAB\x07\x4F\xEA\xD3\x6C\x0A\x68\xFF\x23\x03\xFA\x0C\xF3\x9A\x43\x00\xFA\x0C\xF0\x10\x43\x59\x4A\x08\x60\x10\x68\x4F\xEA\x85\x03\x4F\xF0\x0F\x01\x01\xFA\x03\xF1\x20\xEA\x01\x00\x10\x60\x87\xF0\x01\x02\x4F\xF0\x00\x01\x28\x46\x91\xF7\x27\xFE\x27\xB1\x28\x46\x91\xF7\x14\xFE\xC6\xB2\x03\xE0\x31\x46\x28\x46\x91\xF7\x00\xFE\xE6\x71\x00\x20\x60\x71\xC9\xE7\x03\x01\x2C\xB6\x08\x0D\x00\x70\xB5\x00\xF1\x09\x05\x00\x7B\x02\x21\x14\x46\xB1\xEB\xD0\x0F\x02\xD8\x30\x20\x50\x71\x70\xBD\x91\xF7\x4C\xFC\xFF\xE3\x29\x21\x00\xFC\xFD\xE0\x71\xE8\x78\xA0\x71\x00\x20\x60\x71\x70\xBD\x03\x01\x2A\xDE\x08\x0D\x00\x10\xB5\x04\x46\x74\xF7\xBA\xFD\x3E\x4A\xD2\xF8\x00\x11\x14\xB1\x41\xF4\x00\x01\x01\xE0\x21\xF4\x00\x01\xC2\xF8\x00\x11\xBD\xE8\x10\x40\x74\xF7\xAF\xBD\x03\x01\x4E\x04\x09\x0D\x00\x70\xB5\x04\x46\x0D\x46\x74\xF7\xA6\xFD\x35\x4B\x01\x46\xD3\xF8\x94\x20\x24\xB1\x01\x2C\x05\xD0\x02\x2C\x06\xD0\x09\xE0\x22\xF0\x01\x02\x06\xE0\x42\xF0\x03\x02\x03\xE0\x22\xF0\x02\x00\x40\xF0\x80\x02\x22\xF4\x70\x10\x0D\xB1\x00\xF5\x80\x20\xC3\xF8\x94\x00\xBD\xE8\x70\x40\x08\x46\x74\xF7\x8A\xBD\x03\x01\x2C\x4E\x09\x0D\x00\x10\xB5\x24\x4C\x38\xB1\x00\x20\x62\xF7\x78\xF8\x20\x68\x40\xF0\x04\x00\x20\x60\x10\xBD\x20\x68\x20\xF0\x04\x00\x20\x60\xBD\xE8\x10\x40\x00\x20\x62\xF7\x05\xB9\x03\x01\x44\x76\x09\x0D\x00\x10\xB5\x04\x46\x1B\x48\x02\x78\x5A\xB1\x01\x2A\x17\xD1\x21\x46\x01\x20\xFF\xF7\xBC\xFF\x4F\xF0\x00\x00\x54\xB1\x5F\xF7\x99\xFE\x09\xE0\x21\x46\x00\x20\xFF\xF7\xB2\xFF\x20\x46\xBD\xE8\x10\x40\xD2\xE7\x5F\xF7\xB9\xFE\x20\x46\xBD\x4C\xFC\xFF\xDE\x2A\x21\x00\xE8\x10\x40\x94\xE7\x10\xBD\x03\x01\x16\xB6\x09\x0D\x00\x0D\x49\x02\x7B\xC8\x7C\x62\xF3\x86\x10\xC8\x74\xC0\xF3\x80\x10\xD6\xE7\x03\x01\x2C\xC8\x09\x0D\x00\x08\x48\xC0\x7C\xC0\xF3\x80\x10\x90\x71\x00\x20\x50\x71\x70\x47\x68\x00\x32\x00\x88\x00\x32\x00\x00\x20\x35\x00\x00\x10\x35\x00\x60\x2C\x20\x00\x18\x41\x20\x00\x03\x01\x30\xF0\x09\x0D\x00\x10\xB5\x04\x46\x00\x6D\x48\xB1\x07\x4A\xB4\xF8\x9C\x10\x40\xF2\x71\x23\x12\x78\x5A\x43\x51\x43\x74\xF7\xBF\xFB\x20\x46\xBD\xE8\x10\x40\x4E\xF7\x8B\xBF\x00\x00\x37\x31\x20\x00\x03\x01\x3C\x1C\x0A\x0D\x00\x10\xB5\x09\x4C\x20\x21\x09\x48\x9A\xF7\xAB\xFB\x08\x48\x74\xF7\xD5\xFB\x20\x46\x6A\xF7\xD9\xFC\x08\xB1\x8E\xF7\x0B\xFE\x05\x49\x8B\x20\x08\x60\x10\xBD\x00\x00\xC8\xD9\x20\x00\x88\x60\x20\x00\xA8\x60\x20\x00\xEC\x8A\x31\x00\x03\x01\x0E\x54\x0A\x0D\x00\x11\x48\x00\x21\xC0\xE9\x0C\x11\x70\x47\x03\x01\x4A\x5E\x0A\x0D\x00\x70\xB5\x00\x22\x0F\x4D\x10\x46\x11\x46\x53\x23\x4B\x43\x05\xEB\x83\x03\xDC\x69\xE6\x02\x0A\xD5\x93\xF8\x9B\x60\x04\x2E\x06\xD0\xC4\xF3\x4C\xFC\xFF\xD9\x2B\x21\x00\xC4\x04\x08\x2C\x02\xD1\xB3\xF8\x64\x00\x52\x1C\x49\x1C\x0B\x29\xEA\xDB\x01\x2A\x00\xD0\x00\x20\x70\xBD\x00\x00\x18\x41\x20\x00\x68\x42\x20\x00\x03\x01\x20\xA4\x0A\x0D\x00\x05\x48\x10\xB5\x80\x7B\x20\xB9\x8E\xF7\x95\xF8\x08\xB1\x02\x20\x10\xBD\x00\x20\x10\xBD\x00\x00\xF8\x5B\x20\x00\x03\x01\xF4\x01\xC0\x0A\x0D\x00\x70\xB5\x32\x4D\x28\x68\x80\x7B\x70\xF7\x95\xF9\x29\x68\xC9\x6E\x70\xF7\x19\xF9\x29\x68\x2E\x4E\x2E\x4B\x91\xF8\xED\x20\xC2\xB1\x91\xF8\xE5\x20\x9A\xB9\x2C\x4C\xD1\xF8\xC8\x20\x24\x68\x22\x42\x06\xD0\x91\xF8\x94\x40\x24\x06\x09\xD4\x34\x78\xA0\x42\x06\xD8\x26\x48\x27\x4C\x00\x68\x24\x68\x20\x43\x02\x42\x01\xD0\x9C\x78\x00\xE0\x5C\x78\x91\xF8\xE5\x00\x18\xB1\x18\x5C\xA0\x42\x00\xD9\x04\x46\x20\x48\x00\x68\x00\x07\x00\xD5\xDC\x78\xD1\xF8\xC0\x00\x40\x1C\x16\xD0\x88\x7B\x70\xF7\x5E\xF9\x29\x68\xD1\xF8\xC0\x10\x70\xF7\xE9\xF8\x18\x49\x00\x28\x07\xDB\x2A\x68\x4F\xF0\xFF\x30\xC2\xF8\xC0\x00\x3F\x20\x08\x70\x03\xE0\x08\x78\x84\x42\x00\xD2\x04\x46\x70\x78\x40\xB1\x45\x2C\x06\xD1\x28\x68\x4C\xFC\xFF\xD4\x2C\x21\x00\x90\xF8\xA8\x00\x4F\xF7\xCF\xF9\x00\xB1\x0F\x24\x21\x46\x28\x68\x6B\xF7\xF8\xFB\x0A\x48\x00\x78\x85\xF8\x34\x00\x70\xBD\x00\x00\xF0\x6E\x20\x00\xAD\x30\x0D\x00\x30\x24\x20\x00\x00\x26\x20\x00\xB4\x30\x20\x00\x2C\x24\x20\x00\x38\x1E\x20\x00\x18\x24\x20\x00\x20\x24\x20\x00\x03\x01\xE4\x04\xB0\x0B\x0D\x00\x2D\xE9\xF0\x41\x04\x46\x81\x7B\x4F\xF4\x46\x18\x08\xF5\x00\x70\x01\x60\x41\x68\x21\xF0\x80\x01\x41\x60\x87\x48\x00\x68\x30\xB9\x86\x48\x90\xF8\x30\x00\x10\xB1\x6F\xF7\xD0\xFB\x78\xB1\x20\x46\x6A\xF7\xE5\xFB\x00\x21\x20\x46\x6A\xF7\x96\xFF\x94\xF8\x61\x10\x80\xB2\x8A\x1C\x82\x42\x0D\xD8\x40\x1A\x87\xB2\x11\xE0\xA0\x7B\x9A\xF7\xB2\xFD\xA0\x7B\x9A\xF7\x58\xFE\x40\xF2\x71\x21\xB0\xFB\xF1\xF0\xEB\xE7\x94\xF8\x62\x20\x8A\x42\x71\xD8\x82\x42\x6F\xD8\x02\x27\x00\x26\x84\xF8\x60\x60\xA0\x7B\x70\xF7\xE9\xF8\x80\x1C\x20\xF0\x01\x00\x81\xB2\x94\xF8\x5B\x00\x90\xB1\xB4\xF8\x50\x00\x47\xF6\xFF\x72\x08\x1A\x21\x8D\x08\x1A\x20\xF0\x01\x00\x80\xB2\x81\x1E\x91\x42\x00\xD3\x02\x20\xB8\x42\x00\xD3\x38\x46\x60\x4C\xFC\xFF\xCF\x2D\x21\x00\x85\x7D\xE0\xA0\x8D\x40\xB1\x62\x4B\x22\x68\x1B\x68\x9A\x42\x09\xD1\x60\x4A\x12\x68\x12\x07\x05\xD5\x20\x8D\xB8\x42\x00\xD2\x07\x46\x67\x85\x6C\xE0\x22\x8D\xBA\x42\x00\xD2\x17\x46\x67\x85\xB4\xF8\x50\x20\x03\x23\x89\x1A\xCA\x17\x01\xEB\x12\x72\x22\xF0\x0F\x02\x89\x1A\x8D\xB2\x94\xF8\x62\x10\x02\x29\x09\xD0\x03\xFA\x05\xF1\x94\xF8\x58\x20\x89\xB2\x32\xB3\x31\xEA\x00\x00\x06\xD0\x30\xE0\x01\x20\xA8\x40\x84\xF8\x58\x60\x81\xB2\x1C\xE0\x4A\x4A\x94\xF8\x59\x00\x12\x78\x90\x42\x14\xD2\x94\xF8\x5A\x00\x02\x28\x00\xD3\x7D\xB1\x6F\xF7\xE3\xFA\x94\xF8\x59\x00\x40\x1C\x84\xF8\x59\x00\x00\x2D\x03\xD1\x14\xF8\x5A\x0F\x40\x1C\x20\x70\xBD\xE8\xF0\x81\x18\xE0\x84\xF8\x58\x60\x00\x20\x04\xEB\x40\x02\x92\x8D\x31\xEA\x02\x02\x02\xD1\x40\x1C\x10\x28\xF6\xD3\x10\x28\x0A\xD0\x84\xF8\x60\x00\x94\xF8\x60\x00\x02\x26\x04\xEB\x40\x00\x4F\xF6\xFF\x72\x80\x8D\x12\xE0\xBD\xE8\xF0\x41\x6F\xF7\xB8\xBA\x03\xFA\x05\xF1\x01\x43\xAD\x1C\x88\xB2\x05\xF0\x0F\x05\x03\xFA\x05\xF1\x89\xB2\x90\x42\x10\xD0\x81\x43\x0E\xD0\xB6\x1C\x4C\xFC\xFF\xCA\x2E\x21\x00\xB7\x42\xEE\xD8\x61\x8D\x40\xF2\x71\x22\x01\xFB\x02\xF0\x94\xF8\x5C\x20\x42\xB1\x49\x1C\x61\x85\x22\x49\x05\xE0\xB7\x42\x00\xD2\x3E\x46\x66\x85\xEE\xE7\x1F\x49\x09\x88\x08\x44\x1F\x49\x08\x60\x04\xF1\x56\x04\xD8\xF8\x88\x00\x61\x7A\xA2\x7A\x01\xEB\x10\x31\x01\xF0\x10\x00\x11\x44\x01\xF0\x0F\x01\x40\xEA\x01\x00\x14\xF8\x56\x19\x09\xB1\x80\xF0\x10\x00\x15\x49\x0A\x68\x22\xF0\x1F\x02\x02\x43\x0A\x60\x13\x48\x90\xF9\x06\x00\x81\xF7\x86\xFD\x00\x21\xA9\xF7\xC7\xF8\x94\xF8\x57\x00\x00\x21\x6F\xF7\x9C\xF8\x6F\xF7\x44\xFC\x00\x28\x8D\xD1\x32\x20\xA0\x74\x8A\xE7\x00\x00\x74\x2B\x0D\x00\xF8\x5B\x20\x00\xE4\x30\x20\x00\x38\x1E\x20\x00\xED\x30\x20\x00\xF2\x30\x20\x00\xF0\x30\x20\x00\x0C\x8B\x31\x00\xAC\x86\x31\x00\x4B\x1E\x20\x00\x03\x01\x52\x10\x0E\x0D\x00\x70\xB5\x27\x49\x25\x4C\x09\x78\x00\x29\x1D\xD0\x08\x30\x01\x22\xE1\x8B\x82\x40\x23\x48\x11\x43\xE1\x83\x90\xF8\x30\x00\x2E\x25\x98\xB1\x21\x49\xB4\xF9\x1C\x00\x09\x78\x88\x42\x06\xDC\x40\x42\x88\x42\x03\xDC\x94\xF8\x36\x00\x00\x28\x05\xD0\x20\x46\x4C\xFC\xFF\xC5\x2F\x21\x00\x61\xF7\xD6\xF8\x00\x28\x00\xD0\xA5\x74\x70\xBD\xA0\x8B\xF4\xE7\x03\x01\x62\x5E\x0E\x0D\x00\x70\xB5\x12\x4C\x01\x22\x82\x40\xE1\x8B\x04\xEB\x40\x00\x11\x43\xE1\x83\x00\x21\x41\x84\x0F\x48\x2E\x25\x90\xF8\x30\x00\x98\xB1\x0E\x49\xB4\xF9\x1C\x00\x09\x78\x88\x42\x06\xDC\x40\x42\x88\x42\x03\xDC\x94\xF8\x36\x00\x00\x28\x05\xD0\x20\x46\x61\xF7\xB0\xF8\x00\x28\x00\xD0\xA5\x74\x70\xBD\xA0\x8B\xF4\xE7\x00\x00\x9C\x5B\x20\x00\x1F\x23\x20\x00\xF8\x5B\x20\x00\x20\x23\x20\x00\x03\x01\xE4\x01\xBC\x0E\x0D\x00\x70\xB5\x04\x46\x6A\xF7\x1A\xFE\x00\x26\x01\x25\x58\xB1\x8E\x48\x00\x21\x06\x70\x20\x46\x9F\xF7\xB7\xF8\x20\x46\x9F\xF7\xF7\xF8\x84\xF8\x5B\x50\x70\xBD\x20\x46\x6A\xF7\xE5\xFF\x00\x28\xF9\xD0\x20\x46\xE1\x8B\x9F\xF7\xA8\xF8\xA0\x7B\x6F\xF7\x7E\xFF\xA1\x69\x6F\xF7\x03\xFF\xE1\x8B\x89\x1E\x88\x42\x0C\xD8\x20\x46\x9E\xF7\x03\xFF\x7E\x49\x08\x60\x7E\x49\x08\x60\x7E\x48\x05\x60\x6F\xF7\x55\xFF\x7D\x49\x08\x60\x94\xF8\x5B\x00\x98\xB1\x5D\xF7\x94\xFE\x4C\xF7\xBF\xFA\x01\x28\x0B\xD1\x20\x46\x5D\xF7\x34\xFB\x4C\xFC\xFF\xC0\x30\x21\x00\x38\xB1\x94\xF8\x6F\x00\x20\xB1\x84\xF8\x6E\x50\x20\x46\x9D\xF7\x7E\xFE\x84\xF8\x5B\x60\x94\xF8\x6B\x00\xE8\xB9\x94\xF8\x28\x00\x01\x28\x0D\xD0\x94\xF8\x24\x00\x94\xF8\x2C\x10\xC0\xF3\x02\x00\xC1\xF3\x02\x01\x88\x42\x03\xD1\x94\xF8\x29\x00\x02\x28\x0B\xD0\x20\x46\x5D\xF7\x11\xFB\x38\xB1\x94\xF8\x6F\x00\x20\xB1\x84\xF8\x6E\x50\x20\x46\x9D\xF7\x5B\xFE\x20\x46\xBD\xE8\x70\x40\x9F\xF7\x17\xB8\x03\x01\x1E\x9C\x0F\x0D\x00\x10\xB5\x5F\x48\x5D\x4C\x2C\x22\x04\x60\x5E\x49\x20\x46\x89\xF7\xEF\xFD\xAF\xF2\xF3\x00\x60\x60\x10\xBD\x03\x01\xFA\x02\xB6\x0F\x0D\x00\x2D\xE9\xF0\x41\x5A\x49\x8A\xB0\x04\x46\x09\x68\x00\x29\x7E\xD1\x58\x48\x90\xF8\x30\x10\x00\x29\x79\xD0\xD0\xF8\xC0\x10\x19\xB9\xD0\xF8\xC4\x00\x00\x28\x7A\xD0\xE0\x7B\x01\x28\x77\xD0\xA0\x89\x00\x28\x74\xD1\x94\xF8\x69\x00\x94\xF8\x68\x10\x40\x1A\xC7\xB2\xA0\x7B\x6F\xF7\xFD\xFE\x01\x21\x6F\xF7\xFB\xFC\x20\xF0\x01\x08\xA0\x69\x40\x00\x02\x90\xE0\x7B\x30\xB9\x94\xF8\x30\x00\x41\x00\x02\x98\x6F\xF7\x46\xFC\x02\x90\x00\x25\x03\x95\x94\xF8\x2A\x00\x4C\xFC\xFF\xBB\x31\x21\x00\x41\x00\x02\x98\x6F\xF7\x3D\xFC\xCD\xE9\x06\x05\xA0\x7B\x08\xA9\x6F\xF7\x00\xFF\xA0\x7B\x08\xAB\x02\x46\x02\xA9\x6F\xF7\x7F\xFD\xA0\x7B\x08\xAB\x02\x46\x06\xA9\x6F\xF7\x79\xFD\xDD\xE9\x02\x01\xCD\xE9\x00\x01\xDD\xE9\x06\x01\xCD\xE9\x04\x01\xE0\x8B\x68\x43\x41\x00\x00\x98\x6F\xF7\x1D\xFC\x00\x90\xE0\x8B\x68\x43\x41\x00\x04\x98\x6F\xF7\x16\xFC\x00\x26\x04\x90\x1A\xE0\x04\xA9\x68\x46\x9E\xF7\xAE\xFD\x38\xB3\x04\xF1\x2A\x04\xA0\x79\x21\x78\x08\x44\x4F\xEA\x40\x01\x00\x98\x6F\xF7\x04\xFC\x00\x90\xA0\x79\x14\xF8\x2A\x19\x08\x44\x41\x00\x04\x98\x6F\xF7\xFB\xFB\x76\x1C\xF6\xB2\x04\x90\x94\xF8\x30\x00\x94\xF8\x2A\x10\x08\x44\x00\xE0\x06\xE0\x70\x43\xB8\x42\xDA\xD9\x6D\x1C\xED\xB2\x02\x2D\xBE\xD3\x00\x20\x0A\xB0\xBD\xE8\xF0\x81\x02\x21\x40\x46\x6F\xF7\x8A\xFC\x01\x46\x00\x98\x40\x08\x6F\xF7\x14\xFE\x00\x28\xEC\xDB\x00\x98\x41\x46\x80\x08\x40\x00\x6F\xF7\x04\xFE\x40\x08\xE9\xE7\x00\x00\xFC\x26\x20\x00\x08\x27\x20\x00\xA0\x1C\x20\x00\x9C\x1C\x20\x00\xA4\x1C\x20\x00\xE0\x31\x0D\x00\x04\x27\x20\x00\x3C\x4C\xFC\xFF\xB6\x32\x21\x00\x99\x08\x00\x74\x2B\x0D\x00\xF8\x5B\x20\x00\x03\x01\xCA\x01\x2C\x11\x0D\x00\xF0\xB5\xF3\x48\x02\x78\x02\x2A\x5C\xD1\x04\x21\x00\x24\x4F\xF4\xCA\x00\x01\x64\xC0\xF8\xB0\x41\x49\x1C\x08\x29\xF9\xD3\xC1\x68\x41\xF0\x02\x01\xC1\x60\x04\x64\xD0\xF8\x04\x52\xE9\x49\x0F\x27\x4B\x78\x4F\xEA\x83\x0C\x0B\x79\x07\xFA\x0C\xF6\x9B\x00\x9F\x40\x3E\x43\xB5\x43\x8E\x78\x4F\x79\x06\xFA\x0C\xF6\x9F\x40\x3E\x43\x2E\x43\x04\x64\xC0\xF8\x00\x62\xC3\x68\x23\xF0\x02\x03\xC3\x60\x0B\x78\x9D\x08\x05\x64\x46\x6C\x9D\x07\xED\x0E\x4F\xF0\xFF\x0C\x0C\xFA\x05\xF7\xBE\x43\x11\x27\xAF\x40\x37\x43\x47\x64\x04\x64\x42\xEA\x03\x13\x43\xF4\x80\x63\xC0\xF8\x18\x32\xC9\x78\x8B\x08\x03\x64\x45\x6C\x8B\x07\xDB\x0E\x0C\xFA\x03\xFC\x02\x26\x25\xEA\x0C\x05\x9E\x40\x2E\x43\x46\x64\x04\x64\x42\xEA\x01\x11\x41\xF4\x80\x31\xC0\xF8\x1C\x12\x4F\xF0\x01\x11\xC0\xF8\x20\x12\x01\x21\xC0\xF8\x24\x12\xF0\xBD\x03\x01\x54\xF2\x11\x0D\x00\x10\xB5\x84\xF7\x97\xFF\xFF\xF7\x98\xFF\xC0\x48\xC1\x49\x00\x22\x02\x61\x0B\x68\x43\xF0\x40\x03\x0B\x60\xBE\x4C\xFC\xFF\xB1\x33\x21\x00\x49\xC9\x69\xC9\x06\x15\xD5\x01\x21\x81\x71\xBC\x4B\xC2\x71\x42\x7A\x1A\x70\x00\x7A\x20\xB1\xBA\x48\x02\x69\x42\xF4\x00\x62\x02\x61\x4F\xF4\xCA\x00\x01\x64\xD0\xF8\x80\x11\x41\xF0\x20\x01\xC0\xF8\x80\x11\x10\xBD\x03\x01\xFA\x01\x42\x12\x0D\x00\x2D\xE9\xF0\x5F\xB0\x49\xC9\x69\xCA\x06\x72\xD5\xAC\x4E\xAA\x4A\xDF\xF8\xC0\x92\xAE\x4F\xDF\xF8\xB0\xA2\xDF\xF8\xB8\xB2\x4F\xF4\xCA\x04\x00\x25\x30\x61\x98\xB3\x02\x26\x16\x70\x84\xF7\x60\xFE\xD9\xF8\x00\x00\x84\xF7\xBB\xFE\x84\xF7\x7A\xFE\xFF\xF7\x55\xFF\x25\x64\xD4\xF8\x1C\x02\x40\xF4\x80\x70\xC4\xF8\x1C\x02\x38\x69\x0B\xF1\x30\x04\x20\xF4\x00\x60\x38\x61\x8A\xF8\x00\x50\x01\x27\x27\x70\x47\xF2\x30\x50\xAB\xF8\x36\x00\x0B\xF1\x98\x01\x4F\xF0\x00\x00\x6F\xF7\x50\xFD\xA5\x80\x66\x70\x40\xF2\xE2\x40\x20\x81\x84\xF8\x48\x50\x47\xF2\x4E\x00\x60\x81\x84\xF8\x49\x70\x2C\xE0\xFF\xE7\x01\xF0\x07\x01\x90\x46\x11\x70\x84\xF7\x29\xFE\xD9\xF8\x00\x00\x84\xF7\x84\xFE\x84\xF7\x43\xFE\xFF\xF7\x1E\xFF\x98\xF8\x00\x00\x07\x28\x07\xD1\xE0\x68\x20\xF0\x70\x00\xE0\x60\x4C\xFC\xFF\xAC\x34\x21\x00\xE0\x68\x20\xF0\x04\x00\xE0\x60\x25\x64\xD4\xF8\x1C\x02\x20\xF4\x80\x70\xC4\xF8\x1C\x02\x71\x7A\x8A\xF8\x00\x10\x30\x7A\x18\xB1\x38\x69\x40\xF4\x00\x60\x38\x61\x8B\xF8\x30\x50\xBD\xE8\xF0\x5F\x8E\xF7\xC1\xB8\xBD\xE8\xF0\x9F\x03\x01\x7A\x38\x13\x0D\x00\x70\xB5\x4F\xF4\xCA\x05\x00\x22\x68\x69\xA9\x69\x75\x4B\x1B\x68\x9B\x02\x2C\xD4\x89\x02\x2A\xD5\x80\x02\x28\xD5\x4F\xF4\x00\x10\x68\x61\x2C\x6D\x4F\xF0\xFF\x36\xE0\x07\x01\xD0\xC5\xF8\xE0\x60\xA0\x07\x14\xD5\xD5\xF8\xE4\x00\xC5\xF8\xE4\x60\x10\xF4\x7E\x4F\x00\xD0\x01\x22\x62\x49\xC9\x69\xC9\x06\x03\xD5\x80\x06\x01\xD5\x42\xF0\x02\x02\x1A\xB1\x02\x21\x00\x20\x85\xF7\xB0\xF8\xE0\x03\x01\xD5\xC5\xF8\x20\x61\xA0\x03\x01\xD5\xC5\xF8\x24\x61\xBD\xE8\x70\x40\x85\xF7\xB1\xB8\x03\x01\x3E\xAE\x13\x0D\x00\x70\xB5\x81\x78\xC4\x78\x5A\x4D\x4F\xF4\xCA\x00\x01\x29\x02\xD0\x02\x29\x10\xD1\x02\xE0\x00\x6E\x28\x60\x0C\xE0\x40\x6E\x68\x60\xE0\x07\x01\xD0\x8A\xF7\x01\xFC\xA0\x07\x04\xD5\x68\x68\xC0\xF3\x40\x10\xFF\xF7\x2F\xFF\x01\x20\x70\xBD\x03\x01\xC0\x01\xE8\x4C\xFC\xFF\xA7\x35\x21\x00\x13\x0D\x00\x2D\xE9\xF0\x41\x44\x4D\x00\x24\x45\x4F\xA8\x79\x26\x46\x4F\xF4\xCA\x08\xC0\xB1\xE8\x79\x40\x1C\xC0\xB2\xE8\x71\x03\x28\x12\xD1\xAE\x71\xEE\x71\xF8\x69\xC0\x06\x0D\xD5\xD8\xF8\x60\x20\x42\x49\x0A\x60\xD8\xF8\x64\x00\x48\x60\x80\x06\x04\xD5\x02\x22\x11\x46\x00\x20\x85\xF7\x64\xF8\xF8\x69\xC0\x06\x35\xD5\x28\x69\x48\xB1\xA9\x7A\x3A\x48\x49\x1C\x01\xF0\x0F\x01\xA9\x72\x90\xF8\x33\x20\xFE\x2A\x16\xD0\xAE\x81\x36\x4D\x28\x68\xC0\xF3\x80\x10\xA0\x42\x22\xD0\x73\xF7\xFE\xFF\x29\x68\x04\xF0\x01\x02\x21\xF0\x40\x01\x41\xEA\x82\x11\x29\x60\xC8\xF8\x60\x11\xBD\xE8\xF0\x41\x73\xF7\xF4\xBF\x90\xF8\x34\x20\x01\x20\x00\xFA\x01\xF0\xA9\x89\x12\xB1\x08\x43\xA8\x81\x01\xE0\x81\x43\xA9\x81\xA8\x89\x4C\xF7\x14\xF8\x08\x28\xD8\xD9\x01\x24\xD6\xE7\xBD\xE8\xF0\x81\x03\x01\x36\xA4\x14\x0D\x00\x21\x49\x09\x78\x00\x29\x13\xD0\x1A\x49\x91\xF8\x30\x10\x00\x29\x0E\xD0\x12\x49\x09\x69\x00\x29\x0A\xD1\x1A\x4A\x00\xF0\x01\x00\x11\x68\x21\xF0\x10\x01\x41\xEA\x00\x10\x18\x49\x10\x60\x08\x60\x70\x47\x03\x01\x6A\x4C\xFC\xFF\xA2\x36\x21\x00\xD6\x14\x0D\x00\x17\x48\x00\x68\x50\xB1\xAF\xF2\xED\x21\x01\x60\x0E\x49\x0A\x68\x22\xF4\x00\x12\x0A\x60\xAF\xF2\xB7\x11\x81\x61\xAF\xF2\x45\x10\x10\x49\x08\x60\x70\x47\x7B\x1C\x20\x00\x64\x2B\x0D\x00\x90\x1C\x20\x00\x10\x1E\x20\x00\x04\x23\x20\x00\xF8\x3F\x20\x00\xAC\x1C\x20\x00\xF8\x5B\x20\x00\x88\x1C\x20\x00\xB4\x1C\x20\x00\x9C\x5B\x20\x00\xBC\x1C\x20\x00\x6C\x24\x20\x00\x60\x01\x65\x00\x04\x1D\x20\x00\x84\x1C\x20\x00\x03\x01\xF0\x03\x3C\x15\x0D\x00\x2D\xE9\xF8\x4F\x7E\x4F\x05\x46\x4F\xF0\x00\x08\x38\x68\x20\xB9\x28\x78\x00\x28\x7E\xD1\x73\xF7\xAB\xF8\x73\xF7\x80\xFF\x00\x90\x78\x48\x22\x21\x01\x60\x4F\xF4\x46\x19\x00\x26\xC9\xF8\x00\x62\x04\x21\xC9\xF8\x04\x12\x4F\xF4\x48\x14\x26\x66\xC9\xF8\x00\x60\x32\x20\x4B\xF7\xC6\xFF\x70\x48\xE0\x65\x4F\xF4\x45\x11\x4F\xF0\x80\x0B\xC1\xF8\x0C\xB0\xC8\x20\x4B\xF7\xBB\xFF\x28\x78\x4F\xF4\xCA\x0A\x4F\xF4\xC0\x04\xE0\xB1\xC4\xF8\xBC\x61\x67\x48\x06\x60\xD4\xF8\xFC\x02\x20\xF0\x0C\x00\xC4\xF8\xFC\x02\x38\x68\x48\xB1\x0A\xF5\xB0\x70\x01\x69\x21\xF0\x01\x4C\xFC\xFF\x9D\x37\x21\x00\x01\x01\x61\x01\x68\x21\xF0\x01\x01\x01\x60\x00\x98\x73\xF7\x46\xFF\x28\x78\x34\x46\xD0\xB3\x98\xE0\x00\x20\x88\xF7\xD8\xFC\x01\x21\x0A\xF5\xB0\x70\x39\x60\x02\x69\x42\xF0\x01\x02\x02\x61\x02\x68\x42\xF0\x01\x02\x02\x60\x48\x46\xC9\xF8\x00\x62\xC9\xF8\x04\xB2\xEA\x78\x00\x2A\xD4\xF8\xFC\x22\x02\xD0\x42\xF0\x0C\x02\x03\xE0\x22\xF0\x0C\x02\x42\xF0\x08\x02\xC4\xF8\xFC\x22\x49\x4A\x89\x46\x11\x60\x69\x78\x47\x4A\x89\x1E\x08\x32\x11\x60\x69\x78\x89\x1E\x12\x1F\x11\x60\x44\x49\x01\x60\x00\x20\x4F\xF4\x7A\x73\x4F\xF4\x45\x12\x01\x46\x40\x1C\x99\x42\x01\xE0\x67\xE0\x0E\xE0\x02\xD8\xD1\x68\x09\x06\xF5\xD5\x4F\xF4\x48\x10\x4F\xF4\x00\x31\x01\x66\xC8\x20\x4B\xF7\x51\xFF\xC4\xF8\xBC\x91\xAE\xE7\xE0\xB2\xA9\x78\x40\xF0\x01\x00\x60\xF3\x07\x04\x06\x29\x19\xD2\xDF\xE8\x01\xF0\x03\x07\x0E\x27\x2A\x2E\x20\xF0\x1C\x00\x18\x30\x0E\xE0\xC4\xF3\x07\x20\x40\xF0\x01\x00\x60\xF3\x0F\x24\x09\xE0\xC4\xF3\x07\x21\x41\xF0\x01\x01\x61\xF3\x0F\x24\x40\xF0\x02\x00\x60\xF3\x07\x04\xE9\x78\xC4\xF3\x07\x20\x61\xF3\x83\x00\x4C\xFC\xFF\x98\x38\x21\x00\x60\xF3\x0F\x24\x28\x79\x07\x28\x0F\xD8\x00\x06\x80\x0D\x40\x42\x40\xB2\x11\xE0\x20\xF0\xE0\x00\xEB\xE7\x20\xF0\xE0\x00\x20\x30\xE7\xE7\x20\xF0\xE0\x00\xA0\x30\xE3\xE7\x08\x28\x02\xD0\x09\x28\x05\xD0\x08\xE0\x95\xF9\x05\x00\x81\xF7\xEC\xF8\x02\xE0\xA8\x79\x80\xF7\x80\xFD\x80\x46\x08\xF0\xFF\x01\x11\x48\x98\xF7\x4E\xFA\x0B\x48\x04\x60\x28\x78\x20\xB1\x38\x68\x10\xB1\x72\xF7\x41\xFE\x3E\x60\x01\x20\xBD\xE8\xF8\x8F\x03\x01\x30\x28\x17\x0D\x00\x10\xB5\x14\x46\x0C\x30\xFF\xF7\x05\xFF\x00\x28\x01\xD1\x12\x20\x60\x71\x10\xBD\x78\x2B\x0D\x00\xC0\x04\x41\x00\x00\x02\x0C\x00\x10\x84\x31\x00\x01\x00\x80\x00\x0C\x01\x60\x00\x03\x01\x24\x54\x17\x0D\x00\x10\xB5\x88\xF7\x54\xFC\x88\xF7\x45\xFC\x04\x48\x01\x68\x41\xF0\x01\x01\x01\x60\xBD\xE8\x10\x40\x88\xF7\xF7\xBB\x04\x2C\x20\x00\x03\x01\xB8\x01\x74\x17\x0D\x00\x2D\xE9\xF0\x41\x0D\x46\x26\x49\xDF\xF8\x98\xC0\x00\x23\x89\x78\x1C\xF8\x03\x40\xA1\x42\x03\xD8\x5C\x1E\x06\x2B\x04\xD2\x06\xE0\x5B\x1C\xDB\xB2\x06\x2B\xF3\xD3\x05\x23\x04\x24\x02\xE0\x0B\xB9\x01\x4C\xFC\xFF\x93\x39\x21\x00\x23\x00\x24\x1C\x4E\x05\xEB\x85\x05\x80\xB1\x1B\x48\xC3\xEB\x03\x17\x07\x44\x2F\x44\x17\x44\x97\xF8\xA2\x70\xF7\x60\xC4\xEB\x04\x17\x38\x44\x28\x44\x10\x44\x90\xF8\xA2\x00\x11\xE0\x14\x48\x03\xEB\x83\x07\x00\xEB\xC7\x07\x2F\x44\x17\x44\x97\xF8\x6D\x71\xF7\x60\x04\xEB\x84\x07\x00\xEB\xC7\x00\x28\x44\x10\x44\x90\xF8\x6D\x01\xB0\x60\x1C\xF8\x03\x00\x70\x60\x1C\xF8\x04\x00\x30\x60\x05\x48\x54\xF7\x1C\xFC\xFF\x28\x00\xD9\xFF\x20\xBD\xE8\xF0\x81\xBD\x1E\x20\x00\x10\x13\x20\x00\x2C\x51\x20\x00\xEB\x15\x20\x00\x16\x13\x20\x00\x03\x01\xC2\x04\x28\x18\x0D\x00\x2D\xE9\xF0\x4F\x87\xB0\x00\x26\x04\x46\x05\x96\x90\xF8\xD2\x00\xFE\xF7\xE6\xFD\x80\x46\x8D\xF7\xE5\xF9\x94\xF8\xD2\x70\x04\xA9\x1E\x37\x38\x46\x62\xF7\xE2\xF8\xDF\xF8\x4C\xB3\x05\x00\x0A\xD0\x04\x98\x00\xEB\x40\x01\xDB\xF8\x00\x00\x00\xEB\x81\x00\x06\x60\x46\x60\x86\x60\x03\xE0\x04\xA8\x62\xF7\xBC\xF8\xF0\xB3\x08\x20\x8D\xF8\x0A\x00\x4F\xF0\x01\x0A\x8D\xF8\x0B\xA0\x8D\xF8\x07\x70\x94\xF8\xD0\x00\xAD\xF8\x00\x60\x8D\xF8\x08\x00\xAD\xF8\x02\x60\x4C\xFC\xFF\x8E\x3A\x21\x00\x62\xF7\xB7\xF9\x8D\xF8\x09\x00\xB4\xF8\x4C\x00\x4F\xF0\x02\x09\x40\x1C\x20\xF0\x01\x00\x80\xB2\xAD\xF8\x04\x00\x02\x28\x01\xD2\xAD\xF8\x04\x90\xB4\xF8\x4E\x00\xBD\xF8\x04\x10\x40\x1C\x20\xF0\x01\x00\x88\x42\x01\xD9\x40\x1A\x05\x90\x94\xF8\xD2\x00\xA8\xF7\xE4\xF9\x05\x99\x6F\xF0\x01\x02\x08\x44\x05\x90\xB4\xF8\x48\x10\x02\xEB\x41\x02\x82\x42\x03\xD8\x48\x00\x00\xE0\x12\xE0\x80\x1E\x8D\xF8\x06\x00\x94\xF8\xD1\x00\xB0\xB1\x00\x2D\x7E\xD0\xB4\xF8\xC8\x00\xAD\xF8\x00\x00\xB4\xF8\xCA\x00\xAD\xF8\x02\x00\x94\xF8\xD5\x00\x89\xE0\x00\x23\x6B\x22\x40\xF2\xA1\x31\x9F\x48\x72\xF7\xDA\xFF\x07\xB0\xBD\xE8\xF0\x8F\x01\x27\x5C\xF7\x49\xFE\x18\xB1\x60\xF7\x22\xFF\x00\xB9\x00\x27\xB4\xF8\x44\x00\x40\x05\x05\xD5\xB8\xF8\x00\x00\x10\xB1\xAD\xF8\x02\x00\x09\xE0\xB4\xF8\x4A\x00\x3B\x46\x42\x00\xB4\xF8\x48\x00\x41\x00\x68\x46\x62\xF7\x28\xFA\xBD\xF8\x02\x00\x01\x28\x0A\xD9\x8D\x49\x49\x68\x40\x1E\xB1\xFB\xF0\xF2\x00\xFB\x12\x10\x20\xF0\x01\x00\xAD\xF8\x00\x00\x94\xF8\xD2\x00\x05\xAA\x69\x46\xA8\xF7\xAD\xF9\x48\x4C\xFC\xFF\x89\x3B\x21\x00\xBB\xB4\xF8\x44\x00\x40\x05\x19\xD5\xB8\xF8\x00\x00\xB0\xB1\x4A\x46\x21\x46\x68\x46\xCD\xF8\x0C\x90\x62\xF7\x19\xFB\xD0\xB9\x52\x46\x21\x46\x68\x46\xCD\xF8\x0C\xA0\x62\xF7\x11\xFB\x90\xB9\x32\x46\x21\x46\x68\x46\x03\x96\x62\xF7\x0A\xFB\x58\xB9\x03\xA9\x68\x46\x62\xF7\xD0\xF9\x30\xB9\xAD\xF8\x00\x60\xB4\xF8\x4A\x00\x40\x00\xAD\xF8\x02\x00\xBD\xF8\x00\x00\x5D\xB1\xA4\xF8\xC8\x00\xBD\xF8\x02\x00\xA4\xF8\xCA\x00\x9D\xF8\x09\x00\x84\xF8\xD5\x00\x17\xE0\x0A\xE0\xA4\xF8\xC4\x00\xBD\xF8\x02\x00\xA4\xF8\xC6\x00\x9D\xF8\x09\x00\x84\xF8\xD4\x00\x0B\xE0\xB4\xF8\xC4\x00\xAD\xF8\x00\x00\xB4\xF8\xC6\x00\xAD\xF8\x02\x00\x94\xF8\xD4\x00\x8D\xF8\x09\x00\x04\x98\xDB\xF8\x00\x10\x00\xEB\x40\x02\x01\xEB\x82\x00\x00\x9A\x02\x60\x01\x9A\x42\x60\x02\x9A\x82\x60\x00\x2D\x7F\xF4\x6B\xAF\x04\x98\x00\xEB\x40\x00\x01\xEB\x80\x00\x80\x79\x84\xF8\xD6\x00\x61\xE7\x03\x01\xCA\x02\x66\x1A\x0D\x00\x2D\xE9\xF0\x4F\x05\x46\x90\xF8\xD2\x00\x8B\xB0\x8A\x46\x90\x46\x9B\x46\x1E\x30\x04\xA9\x61\xF7\xCA\xFF\x00\x28\x78\xD0\x8D\xF7\x4C\xFC\xFF\x84\x3C\x21\x00\xC2\xF8\x04\x98\x00\xEB\x40\x01\x44\x48\x00\x68\x00\xEB\x81\x01\x08\x68\x00\x90\x48\x68\x01\x90\x88\x68\x02\x90\x0C\x68\x06\x94\x48\x68\x07\x90\x88\x68\x08\x90\x00\x20\x08\x60\x48\x60\x88\x60\x05\xA9\x68\x46\x62\xF7\x44\xFD\xB5\xF8\x4E\x20\xB5\xF8\x4C\x10\x68\x46\x63\xF7\x65\xF8\x02\x25\x4F\xF0\x00\x09\x20\x0C\x4F\x46\x09\x90\xBA\xF8\x02\x00\x09\x99\x40\x04\x00\x0C\xAD\xF8\x02\x00\x81\x42\x05\xD1\x05\x98\x85\x42\x02\xD2\x4F\xF0\x00\x09\x40\xE0\x00\x26\xB8\xF1\x00\x0F\x01\xD0\x00\x24\x1E\xE0\x03\xA9\x68\x46\x62\xF7\x37\xF9\x01\x28\x1A\xD1\x03\x98\xA8\x42\x17\xD1\x4F\xF0\x01\x09\x29\xE0\x0B\xEB\x84\x00\xBD\xF8\x02\x10\x00\x68\xB0\xFB\xF1\xF2\x01\xFB\x12\x00\xAD\xF8\x00\x00\x03\xA9\x68\x46\x62\xF7\x07\xFD\x03\x98\xA8\x42\xEA\xD0\x64\x1C\x44\x45\xEA\xD3\xBD\xF8\x02\x00\x80\x1E\x80\xB2\xAD\xF8\x02\x00\xBA\xF8\x00\x10\xB0\xEB\x41\x0F\x02\xD3\x76\x1C\x0C\x2E\xCB\xD3\x7F\x1C\x6D\x1E\x03\x2F\xB7\xD3\xB9\xF1\x00\x0F\x04\xD0\x14\x98\x03\x99\x01\x60\x03\xE0\x10\xE0\x14\x99\x00\x20\x08\x60\x04\x98\x00\x4C\xFC\xFF\x7F\x3D\x21\x00\xEB\x40\x01\x06\x48\x00\x68\x00\xEB\x81\x00\x06\x99\x01\x60\x07\x99\x41\x60\x08\x99\x81\x60\x48\x46\x0B\xB0\xC6\xE6\x00\x00\x50\x31\x20\x00\x07\x00\x02\x00\x00\xA0\x32\x00\x03\x01\x94\x03\xAC\x1B\x0D\x00\x2D\xE9\xF8\x4F\x00\x24\x26\x46\x4F\xF0\x01\x09\x84\xF7\x5C\xFE\x05\x46\x4F\xF7\x83\xFD\x5A\x4F\x38\x68\x00\xF0\xE0\x01\x59\x48\x02\x78\x02\xF0\x1F\x02\x11\x43\x39\x60\x39\x1F\x0A\x68\x43\x78\x02\xF0\xE0\x02\x03\xF0\x1F\x03\x1A\x43\x0A\x60\x3A\x1D\x13\x68\x90\xF8\x02\xC0\x03\xF0\xE0\x03\x0C\xF0\x1F\x0C\x43\xEA\x0C\x03\x13\x60\x4D\x4A\x13\x68\x90\xF8\x03\xC0\x03\xF0\xE0\x03\x0C\xF0\x1F\x0C\x43\xEA\x0C\x03\x13\x60\xDF\xF8\x1C\xA1\x0A\xF1\x08\x0A\xDA\xF8\x00\xC0\x00\x79\x0C\xF0\xE0\x0C\x00\xF0\x1F\x00\x4C\xEA\x00\x0C\xCA\xF8\x00\xC0\x38\x68\xDF\xF8\xF4\xC0\x00\xF0\x1F\x00\x0C\xF1\x54\x0C\x0C\xF1\x04\x08\x03\x28\x03\xD3\x80\x1E\xCC\xF8\x00\x00\x04\xE0\x00\x23\xCC\xF8\x00\x30\x18\xB1\x40\x1E\xC8\xF8\x00\x00\x01\xE0\xC8\xF8\x00\x30\xED\xB3\x04\x2D\x49\xD0\x10\x68\x00\xF0\x1F\x00\x08\x30\xDA\xF8\x4C\xFC\xFF\x7A\x3E\x21\x00\x00\x20\x60\xF3\x04\x02\xCA\xF8\x00\x20\x2D\x4B\x40\x33\x1A\x68\x00\xF0\x10\x00\x22\xF0\x10\x02\x02\x43\x1A\x60\x45\xB3\x03\x2D\x37\xD0\x08\x68\x04\x2D\x00\xD0\x80\x1E\x38\x60\x33\xF7\xD8\xFB\x00\x28\x3E\xD0\x6A\x46\x02\x21\x6E\x20\x33\xF7\xA3\xFB\xBD\xF8\x00\x00\xC1\xB2\x41\xEA\x10\x20\x01\x06\x01\xD5\x4F\xF0\xFF\x39\x00\xF0\x7F\x00\x00\xFB\x09\xF0\x40\xB2\x00\x28\x29\xD0\x19\x4A\x02\xEB\x84\x01\x91\xF9\x00\x30\x83\x42\x1A\xDC\x01\xE0\x0C\xE0\x0F\xE0\x91\xF9\x01\x10\x81\x42\x13\xDD\x6D\xB1\x04\x2D\x0B\xD0\x02\xEB\x84\x00\x90\xF9\x02\x60\x0F\xE0\x10\x68\x00\xF0\x1F\x00\xB5\xE7\x08\x68\x40\x1E\xC8\xE7\x02\xEB\x84\x00\x90\xF9\x03\x60\x03\xE0\x64\x1C\xE4\xB2\x09\x2C\xDA\xD3\x38\x68\x30\x44\xC0\xB2\x38\x60\xBD\xE8\xF8\x8F\x00\x00\x10\x04\x60\x00\x9C\x07\x20\x00\x00\x07\x60\x00\xAF\x30\x0D\x00\x03\x01\x1A\x3C\x1D\x0D\x00\x2F\x48\x01\x68\x2F\x48\x01\x60\x2F\x49\x09\x68\x41\x60\x2F\x49\x49\x68\x81\x60\x70\x47\x03\x01\x1A\x52\x1D\x0D\x00\x2E\x48\x01\x68\x2A\x48\x01\x60\x2D\x49\x09\x68\x41\x60\x29\x4C\xFC\xFF\x75\x3F\x21\x00\x49\x09\x68\x81\x60\x70\x47\x03\x01\x84\x01\x68\x1D\x0D\x00\x70\xB5\x2A\x48\x06\x26\x00\x25\x80\x68\x29\x4C\x01\x7C\x22\x29\x2E\xD0\x08\xDC\x01\x29\x10\xD0\x06\x29\x19\xD0\x10\x29\x25\xD0\x21\x29\x06\xD1\x27\xE0\x28\x29\x17\xD0\x2A\x29\x1B\xD0\x2B\x29\x1C\xD0\x25\x60\xBD\xE8\x70\x40\xD7\xE7\x90\xF8\xA9\x00\x1C\xE0\xFF\xF7\xC8\xFF\x26\x60\x70\xBD\xFF\xF7\xCF\xFF\x25\x60\x70\xBD\x90\xF8\x39\x00\x03\x28\xF7\xD1\xF2\xE7\x40\x8F\x43\xF2\x06\x31\x08\x42\xF1\xD0\xEC\xE7\x90\xF8\x60\x00\x06\xE0\x40\x6A\xE4\xE7\x90\xF8\x65\x00\x01\xE0\x90\xF8\x59\x00\x01\x28\xE4\xD1\xDF\xE7\x03\x01\x38\xE8\x1D\x0D\x00\x10\xB5\x88\xF7\x79\xF9\x54\xF7\xB7\xF8\xBD\xE8\x10\x40\x4A\xF7\xB3\xBA\x00\x00\x0C\x08\x20\x00\x68\x01\x60\x00\x14\x08\x20\x00\xD4\x30\x0D\x00\x08\x08\x20\x00\x10\x08\x20\x00\x00\x3F\x20\x00\x64\x08\x64\x00\x03\x01\x16\x1C\x1E\x0D\x00\x10\xB5\xC8\x4A\xC8\x49\xC9\x48\x53\xF7\x82\xFF\xC8\x49\x08\x70\x10\xBD\x03\x01\x16\x2E\x1E\x0D\x00\xC5\x49\xC7\x48\xDC\x39\xC8\x60\xC7\x49\x00\xF5\x98\x60\x08\x60\x70\x4C\xFC\xFF\x70\x40\x21\x00\x47\x03\x01\x2C\x40\x1E\x0D\x00\xC5\x4A\xC6\x4B\x01\x28\x03\xD0\x02\x28\x09\xD1\x18\x88\x06\xE0\x10\x68\x18\x80\x48\x78\x01\x28\x03\xD0\x43\xF6\x02\x10\x10\x60\x70\x47\x43\xF6\x0E\x10\xFA\xE7\x03\x01\x48\x68\x1E\x0D\x00\x10\xB5\xBB\x4A\xBC\x4C\x08\x32\x40\xF6\xA2\x63\x01\x28\x03\xD0\x02\x28\x12\xD1\x20\x88\x0F\xE0\x10\x68\x80\xB2\x20\x80\x49\x78\x01\x29\x0B\xD0\xAD\x49\xDC\x39\xC9\x88\xC1\xF5\x80\x51\x89\xB2\x61\xF3\x1F\x10\x40\xF0\x08\x00\x10\x60\x10\xBD\x10\x68\x63\xF3\x1F\x10\xF7\xE7\x03\x01\x70\xAC\x1E\x0D\x00\x70\xB5\xA4\x4A\xA4\x4B\xA9\x4C\x12\x78\xDC\x3B\x02\xEB\x82\x02\x03\xEB\xC2\x02\xA8\x4D\x52\x7D\x94\x3C\xA8\x4E\x4F\xF4\xC0\x03\x01\x28\x09\xD0\x02\x28\x06\xD1\x48\x78\x01\x28\x1A\xD0\x30\x88\x20\x60\x01\x20\x58\x60\x70\xBD\x20\x68\x80\xB2\x30\x80\xD3\xF8\x04\x61\x2E\x60\x49\x78\x01\x29\x09\xD0\x48\xF2\xFF\x01\x08\x40\x02\xF0\x7F\x01\x40\xEA\x01\x20\x20\x60\x00\x20\x58\x60\xC3\xF8\x04\x21\x70\xBD\x28\x68\xC3\xF8\x04\x01\x70\xBD\x03\x01\x3C\x18\x1F\x0D\x00\x10\xB5\x94\x49\x94\x4B\x4C\xFC\xFF\x6B\x41\x21\x00\x95\x4A\x95\x4C\x01\x28\x06\xD0\x02\x28\x03\xD1\x18\x68\x08\x60\x20\x68\x10\x60\x10\xBD\x08\x68\x18\x60\x10\x68\x20\x60\x08\x68\x20\xF0\x3F\x00\x40\xF0\x48\x00\x08\x60\x10\x68\x20\xF0\x02\x00\xEF\xE7\x03\x01\x24\x50\x1F\x0D\x00\x8A\x4A\x4F\xF4\xC0\x01\x01\x28\x04\xD0\x02\x28\x01\xD1\x10\x68\x88\x61\x70\x47\x88\x69\x10\x60\x88\x69\x20\xF0\x02\x00\xF7\xE7\x03\x01\x46\x70\x1F\x0D\x00\x4F\xF4\xC0\x02\x01\x28\x06\xD0\x02\x28\x14\xD1\xD2\xF8\xFC\x02\x20\xF0\x0C\x00\x0D\xE0\x48\x78\x01\x28\x0D\xD0\x00\x28\x0A\xD1\x88\x78\x01\x28\x08\xD0\xD2\xF8\xFC\x02\x20\xF0\x0C\x00\x40\xF0\x08\x00\xC2\xF8\xFC\x02\x70\x47\xD2\xF8\xFC\x02\x40\xF0\x0C\x00\xF7\xE7\x03\x01\x30\xB2\x1F\x0D\x00\x69\x4A\x72\x4B\x18\x32\x01\x28\x03\xD0\x02\x28\x0A\xD1\x18\x68\x07\xE0\x10\x68\x18\x60\x48\x78\x01\x28\x10\x68\x03\xD0\x40\xF4\x80\x40\x10\x60\x70\x47\x20\xF4\x80\x40\xFA\xE7\x03\x01\x30\xDE\x1F\x0D\x00\x69\x4B\x69\x4A\x01\x28\x03\xD0\x02\x28\x0A\xD1\x18\x68\x07\xE0\x10\x68\x18\x60\x48\x78\x01\x28\x10\x68\x03\xD0\x40\xF4\x80\x4C\xFC\xFF\x66\x42\x21\x00\x60\x10\x60\x70\x47\x4F\xF6\xFF\x31\x08\x40\xF9\xE7\x03\x01\x24\x0A\x20\x0D\x00\x5A\x49\x5F\x4A\x1C\x39\x01\x28\x04\xD0\x02\x28\x01\xD1\x10\x68\x08\x60\x70\x47\x08\x68\x10\x60\x08\x68\x00\xF0\x03\x00\xF7\xE7\x03\x01\x98\x01\x2A\x20\x0D\x00\x2D\xE9\xF0\x41\x58\x4F\x55\x4E\x01\x28\x18\xD0\x02\x28\x14\xD1\x30\x68\x39\x68\x20\xF4\x00\x70\x21\xF4\x00\x51\x40\xF4\x80\x74\x41\xF4\x80\x45\x34\x60\x3D\x60\x32\x20\x72\xF7\xCF\xFF\x24\xF4\x80\x70\x25\xF4\x80\x41\x30\x60\x39\x60\xBD\xE8\xF0\x81\x48\x78\x01\x28\x16\xD0\x30\x68\x39\x68\x20\xF4\x00\x70\x40\xF4\x80\x70\x21\xF4\x00\x51\x41\xF4\x80\x41\x30\x60\x39\x60\x40\xF4\x00\x70\x41\xF4\x00\x51\x30\x60\x39\x60\xBD\xE8\xF0\x41\xC8\x20\x72\xF7\xAD\xBF\x4F\xF4\x80\x40\x38\x60\x30\x68\x4F\xF6\xFF\x41\x08\x40\x30\x60\x4F\xF4\xC0\x40\x38\x60\x30\x68\x80\xB2\x40\xF4\x40\x70\x30\x60\xD2\xE7\x03\x01\x5C\xBE\x20\x0D\x00\x30\xB5\x25\x4A\x25\x4B\x33\x4D\x34\x4C\x7C\x3A\x60\x33\x01\x28\x09\xD0\x02\x28\x06\xD1\x48\x78\x01\x28\x03\xD1\x28\x68\x10\x60\x20\x68\x18\x60\x4C\xFC\xFF\x61\x43\x21\x00\x30\xBD\x10\x68\x28\x60\x18\x68\x20\x60\x48\x78\x01\x28\xF7\xD1\x13\x48\x13\x4C\xC9\x78\x00\x78\xDC\x3C\x00\xEB\x80\x00\x04\xEB\xC0\x00\x29\xB1\x01\x29\x03\xD0\x80\x8C\x10\x60\x00\x20\xE6\xE7\xC0\x8A\xFA\xE7\x03\x01\x8E\x01\x16\x21\x0D\x00\x1E\x4A\x20\x4B\x74\x3A\x01\x28\x03\xD0\x02\x28\x09\xD1\x18\x88\x06\xE0\x10\x68\x18\x80\x48\x78\x01\x28\x03\xD0\x4F\xF4\x00\x60\x10\x60\x70\x47\x25\x20\xFB\xE7\x00\x00\xA0\x1E\x20\x00\x2C\x11\x20\x00\x2C\x2E\x0D\x00\xB4\x2B\x20\x00\x7C\x2B\x0D\x00\xBC\x2B\x20\x00\xAC\x06\x41\x00\x28\x10\x20\x00\x26\x10\x20\x00\x2C\x10\x20\x00\x24\x10\x20\x00\xDC\x04\x60\x00\x44\x10\x20\x00\x64\x06\x60\x00\x48\x10\x20\x00\x30\x10\x20\x00\x34\x10\x20\x00\x38\x10\x20\x00\xE8\x07\x41\x00\x4C\x10\x20\x00\xFC\x04\x41\x00\x3C\x10\x20\x00\x40\x10\x20\x00\x2A\x10\x20\x00\x03\x01\x90\x01\xA0\x21\x0D\x00\x02\x46\x00\x20\x11\x2A\x3A\xD2\xDF\xE8\x02\xF0\x09\x34\x32\x2B\x29\x25\x0B\x30\x0D\x30\x32\x29\x34\x34\x25\x25\x37\x00\x5B\xF7\x8C\xB8\x5A\xF7\xC0\xBF\x17\x4A\x13\x68\x6F\xF3\x0F\x4C\xFC\xFF\x5C\x44\x21\x00\x03\x42\xF8\x90\x39\x05\x29\x0F\xD2\xDF\xE8\x01\xF0\x0F\x03\x0F\x0F\x0F\x00\x02\xF1\x7C\x02\x51\x69\x48\xF6\x88\x03\x41\xEA\x03\x01\x51\x61\x4F\xF0\xBB\x31\x11\x60\x70\x47\x0B\x49\xD1\x67\x70\x47\x5A\xF7\xB4\xBF\x09\xB1\x5A\xF7\xE5\xBF\x5B\xF7\x03\xB8\x02\x20\x70\x47\x5A\xF7\xB8\xBF\x08\x46\x5B\xF7\x1C\xB8\x5A\xF7\xCC\xBF\x01\x20\x70\x47\x00\x00\x90\x00\x32\x00\xB9\xB9\xBB\xB9\x03\x01\x4A\x2C\x22\x0D\x00\x04\x28\x1E\xD1\x22\x49\x21\x48\x08\x60\x23\x49\x21\x48\x08\x60\x23\x49\x22\x48\x08\x60\x24\x49\x22\x48\x08\x60\x24\x49\x23\x48\x88\x60\x24\x49\x4F\xF0\xFF\x30\x88\x60\x23\x48\x00\x69\x01\x05\x22\x48\x01\xD5\x01\x21\x00\xE0\x00\x21\x01\x70\x21\x49\x20\x48\x48\x60\x00\x20\x70\x47\x03\x01\x0C\x72\x22\x0D\x00\x04\x21\x08\x20\x5B\xF7\x85\xB8\x03\x01\x0C\x7A\x22\x0D\x00\x03\x21\x08\x20\x5B\xF7\x81\xB8\x03\x01\x92\x01\x82\x22\x0D\x00\x10\xB5\xAF\xF2\x5B\x00\x1A\x49\x08\x60\xFF\xF7\xCF\xFD\x1A\x48\x19\x49\x81\x64\x1A\x49\xC0\xF8\x68\x11\xAF\xF2\x25\x01\x18\x48\x41\x60\xAF\xF2\x35\x01\x81\x60\x49\x4C\xFC\xFF\x57\x45\x21\x00\xF7\x7D\xFB\x16\x48\x16\x49\x00\x78\x08\x70\x10\xBD\xE1\x23\x0D\x00\x88\x23\x20\x00\x39\x24\x0D\x00\xC4\x23\x20\x00\x3D\x24\x0D\x00\xFC\x25\x20\x00\x19\x23\x0D\x00\x54\x32\x20\x00\x09\x29\x0D\x00\x78\xD3\x20\x00\x10\x82\x20\x00\xF8\x3F\x20\x00\x6C\x2B\x0D\x00\xA5\x0A\x0D\x00\xE4\x5C\x20\x00\xB4\x39\x20\x00\x67\x24\x0D\x00\x18\x52\x20\x00\x4D\x04\x0D\x00\x0C\x32\x0D\x00\x04\x23\x20\x00\x6D\x2B\x0D\x00\x03\x01\x0C\x10\x23\x0D\x00\x31\x49\x00\x7B\x08\x70\x70\x47\x03\x01\xCC\x01\x18\x23\x0D\x00\x30\xB4\x00\x24\x0C\x60\x2F\x4C\x05\x2B\x53\xD0\x06\xDC\x01\x2B\x50\xD0\x02\x2B\x4E\xD0\x03\x2B\x4C\xD1\x06\xE0\x06\x2B\x49\xD0\x08\x2B\x08\xD0\x3F\x2B\x45\xD1\x11\xE0\x03\x2A\x42\xD1\x25\x68\x0D\x60\x64\x68\x3A\xE0\x17\x2A\x05\xD0\x1C\x2A\x3A\xD1\x25\x6B\x0D\x60\x64\x6B\x32\xE0\x25\x6C\x0D\x60\x64\x6C\x2E\xE0\x25\x2A\x21\xD0\x08\xDC\x14\x2A\x22\xD0\x19\x2A\x10\xD0\x1A\x2A\x12\xD0\x24\x2A\x27\xD1\x13\xE0\x85\x2A\x1D\xD0\xE9\x2A\x22\xD0\xA2\xF5\x80\x75\x45\x3D\x1E\xD1\xA5\x68\x0D\x60\xE4\x68\x16\xE0\x25\x4C\xFC\xFF\x52\x46\x21\x00\x69\x0D\x60\x64\x69\x12\xE0\xA5\x69\x0D\x60\xE4\x69\x0E\xE0\x25\x6A\x0D\x60\x64\x6A\x0A\xE0\xA5\x6A\x0D\x60\xE4\x6A\x06\xE0\xA5\x6B\x0D\x60\xE4\x6B\x02\xE0\xA5\x6C\x0D\x60\xE4\x6C\x4C\x60\x0C\x68\x00\x2C\x02\xD1\x30\xBC\x49\xF7\x29\xBE\x30\xBC\x70\x47\x00\x00\xDD\x30\x0D\x00\x5C\x30\x0D\x00\x03\x01\x5C\xE0\x23\x0D\x00\x10\xB5\x04\x46\x01\x29\x02\xD0\x02\x29\x1B\xD0\x1C\xE0\xA4\xF5\xE0\x40\x0A\x38\x0F\xD1\x89\xF7\x97\xFF\x0C\x49\x0C\x48\x84\xF7\xE1\xFA\x0A\x48\x0B\x49\x00\x88\x01\xEB\x80\x00\x01\x68\x07\x48\x88\x47\x00\x24\x08\xE0\xA4\xF5\xE0\x40\x06\x38\x04\xD1\xFE\xF7\xE3\xFF\x01\xE0\x8C\xF7\xC2\xFC\x20\x46\x10\xBD\xA4\x23\x20\x00\x0C\x60\x20\x00\x3C\x92\x08\x00\x03\x01\x08\x38\x24\x0D\x00\x00\x20\x70\x47\x03\x01\x1C\x3C\x24\x0D\x00\x08\x7B\x42\x08\x00\x20\x7F\x2A\x03\xD0\x07\x2A\x01\xD1\x01\x4A\x8A\x60\x70\x47\xF1\x09\x0D\x00\x03\x01\x16\x54\x24\x0D\x00\x2E\x28\x01\xD3\x01\x20\x70\x47\x1C\x4A\x42\xF8\x20\x10\x00\x20\x70\x47\x03\x01\x82\x01\x66\x24\x0D\x00\x10\xB5\x1A\x49\x04\x20\xFF\xF7\x4C\xFC\xFF\x4D\x47\x21\x00\xF2\xFF\x19\x49\x93\x20\x08\x60\x19\x48\xCF\x21\x01\x60\x4F\xF0\xE6\x01\x41\x60\x81\x60\x4F\xF0\x17\x01\xC1\x60\x4F\xF0\x40\x01\x01\x61\x4F\xF0\x01\x01\x41\x61\x4F\xF0\xF2\x02\x82\x61\x4F\xF0\xCE\x02\xC2\x61\x4F\xF0\xD0\x02\x02\x62\x4F\xF0\xE8\x02\x82\x64\x4F\xF0\xC8\x02\x40\xF8\x90\x2C\x4F\xF0\xEC\x02\x40\xF8\x8C\x2C\x40\xF8\x88\x1C\x07\x49\x4F\xF0\x04\x00\x08\x60\x4F\xF0\x00\x00\x10\xBD\x58\x15\x21\x00\xE5\x24\x0D\x00\x4C\x0D\x42\x00\x94\x01\x42\x00\x7C\x37\x42\x00\x03\x01\xA0\x08\xE4\x24\x0D\x00\x2D\xE9\xF7\x4F\x07\x46\xDF\x48\xDF\xF8\x74\xA3\x00\x68\x07\xF5\x7A\x44\x00\xF0\x03\x02\x4F\xF4\x7A\x70\x44\x43\xDA\x48\xDF\xF8\x6C\x93\x52\x1C\x05\x68\x04\xEB\x55\x00\xB0\xFB\xF5\xF6\x06\xFB\x05\xF0\x80\x46\xC9\xF8\x00\x00\xD5\x48\x05\xFB\x02\xF1\x90\xF8\x00\xB0\x01\xFB\x0B\xF0\x88\xF7\x8E\xFD\x00\x22\xD1\x4B\x88\xF7\x5D\xFB\x00\x22\xD0\x4B\x88\xF7\x01\xFC\x00\x22\xCF\x4B\x88\xF7\x85\xFE\x88\xF7\x53\xFD\xCE\x49\x08\x80\xCE\x48\x80\x68\x4F\xF4\x80\x42\xC0\xF3\x13\x00\xA5\xFB\x00\x01\x80\x18\x41\x4C\xFC\xFF\x48\x48\x21\x00\xF1\x00\x01\xC2\x0B\xC9\x48\x42\xEA\x41\x42\x02\x60\x4F\xF4\x48\x10\x00\x68\xC6\x49\xC0\xF3\x02\x10\x4F\xF0\x01\x0C\x02\x23\x70\xB3\x01\x28\x2E\xD0\x02\x28\x2E\xD0\x03\x28\x2E\xD0\x04\x28\x2E\xD0\x05\x28\x2E\xD0\x06\x28\x2E\xD0\xC1\xF8\x00\xC0\x08\x68\xBC\x4B\x04\xFB\x00\xF1\x01\xEB\x52\x01\xB1\xFB\xF2\xF1\x02\xFB\x01\xF2\x02\xEB\x50\x02\xB2\xFB\xF0\xF0\x18\x60\x00\x1B\x00\xD5\x40\x42\xB5\x4A\x12\x68\x90\x42\x1B\xD8\xB8\xEB\x04\x00\x00\xD5\x40\x42\x90\x42\x15\xD8\x00\x20\xB1\x42\x10\xD9\x18\x60\x10\xE0\x0B\x60\xDC\xE7\x03\x20\x08\xE0\x04\x20\x06\xE0\x06\x20\x04\xE0\x08\x20\x02\xE0\x10\x20\x00\xE0\x18\x20\x08\x60\xCF\xE7\xC9\xF8\x00\x00\xDD\xE9\x01\x06\x88\xF7\x20\xFD\xA4\x4B\x00\x22\x88\xF7\x75\xFD\x89\x46\x80\x46\x07\xF5\x7A\x40\x4F\xF4\x7A\x71\x48\x43\x88\xF7\x13\xFD\x4B\x46\x42\x46\x01\x2E\x0B\xD0\x88\xF7\x10\xFE\x88\xF7\xDE\xFC\x01\x46\x9A\x48\x02\x68\x9A\x48\x94\x42\x04\xD3\x1E\x22\x2D\xE0\x88\xF7\xD4\xFA\xF2\xE7\x97\x4A\x12\x68\x94\x42\x01\xD3\x23\x22\x24\xE0\x95\x4A\x12\x68\x94\x42\x4C\xFC\xFF\x43\x49\x21\x00\x01\xD3\x28\x22\x1E\xE0\x93\x4A\x12\x68\x94\x42\x01\xD3\x2D\x22\x18\xE0\x91\x4A\x12\x68\x94\x42\x01\xD3\x46\x22\x12\xE0\x8F\x4A\x12\x68\x94\x42\x01\xD3\x50\x22\x0C\xE0\x8D\x4A\x12\x68\x94\x42\x01\xD3\x5A\x22\x06\xE0\x8B\x4A\x12\x68\x94\x42\x01\xD3\x64\x22\x00\xE0\x6E\x22\x02\x60\x0A\x22\xB1\xFB\xF2\xF1\x86\x4A\xD0\xF8\x00\x80\x01\xFB\x08\xF1\x12\x78\x88\x00\x00\x21\x91\x46\xAE\xF7\x43\xFF\x82\x4B\x6A\x00\x1B\x68\x5F\x00\x38\x18\x41\xF1\x00\x03\xD9\x03\x41\xEA\x50\x41\xC0\x03\x40\x19\x41\xF1\x00\x01\x00\x23\x58\xF7\xD0\xFE\xA0\xFB\x05\x36\x01\xFB\x05\x61\x00\x22\x00\xFB\x02\x11\x9A\x0B\x42\xEA\x81\x42\x89\x0B\xD5\x1B\x61\xF1\x00\x06\x73\x49\x08\x60\x73\x48\x31\x46\x05\x60\x28\x46\x88\xF7\xB2\xFC\x00\x22\x5A\x4B\x88\xF7\x6E\xFA\x00\x22\x59\x4B\x88\xF7\x12\xFB\x88\xF7\x68\xFC\x6C\x49\x00\xFB\x0B\xF0\x40\x1C\x40\x08\x08\x60\x0A\x21\xB8\xFB\xF1\xF2\x00\x23\x31\x46\x28\x46\x58\xF7\xA2\xFE\x04\x27\x27\xFA\x09\xF7\xFB\x17\x3A\x46\x58\xF7\x9B\xFE\x63\x49\x07\x46\x08\x60\x00\x1B\x00\xD5\x40\x42\xDF\x4C\xFC\xFF\x3E\x4A\x21\x00\xF8\x84\x81\x4F\xF0\x09\x0B\x81\x46\x5A\x46\x88\xF8\x00\xB0\x00\x23\x28\x46\x31\x46\x58\xF7\x88\xFE\x80\x08\x40\xEA\x81\x70\xC0\x1B\x00\xD5\x40\x42\x58\x49\x0C\x68\xA0\x42\x21\xD2\x08\x22\x88\xF8\x00\x20\x00\x23\x28\x46\x31\x46\x58\xF7\x76\xFE\x80\x08\x40\xEA\x81\x70\xC0\x1B\x00\xD5\x40\x42\xA0\x42\x11\xD2\x0A\x22\x88\xF8\x00\x20\x00\x23\x28\x46\x31\x46\x58\xF7\x66\xFE\x80\x08\x40\xEA\x81\x70\xC0\x1B\x00\xD5\x40\x42\xA0\x42\x01\xD2\x88\xF8\x00\xB0\x98\xF8\x00\x20\x00\x23\x28\x46\x31\x46\x58\xF7\x55\xFE\x4D\x08\x4F\xEA\x30\x04\x41\x48\x52\x46\x00\x23\x04\x60\x40\x48\x00\x19\x45\xF1\x00\x01\x58\xF7\x48\xFE\x3E\x49\x1F\x28\x08\x60\x01\xD9\x1F\x20\x08\x60\x02\x46\x00\x23\x20\x46\x29\x46\x58\xF7\x3C\xFE\x04\x46\x39\x48\x00\x21\xC9\x05\x04\x60\x4F\xEA\xC9\x50\x65\x08\x41\xEA\x59\x21\x40\x19\x41\xF1\x00\x01\x22\x46\x00\x23\x58\xF7\x2B\xFE\x32\x49\x22\x46\x00\x23\x08\x60\x4F\xF0\xE0\x50\x00\x21\x28\x18\x41\xF1\x25\x01\x58\xF7\x1F\xFE\x2D\x49\x22\x46\x00\x23\x08\x60\x4F\xF0\xA8\x40\x00\x21\x28\x18\x4C\xFC\xFF\x39\x4B\x21\x00\x41\xF1\x6F\x01\x58\xF7\x13\xFE\x28\x49\x08\x60\x01\x20\xBD\xE8\xFE\x8F\x00\x80\xBB\x00\x18\x37\x42\x00\xFC\x0F\x21\x00\xE8\x11\x21\x00\xA8\x11\x21\x00\x80\x84\x1E\x41\x80\x84\x2E\x41\x00\x00\xF0\x3F\xAC\x11\x21\x00\x00\x10\x32\x00\x10\x12\x21\x00\x0C\x12\x21\x00\x08\x12\x21\x00\x20\x13\x21\x00\x00\x40\x8F\x40\xB8\x11\x21\x00\xF4\x11\x21\x00\xBC\x11\x21\x00\xC0\x11\x21\x00\xC4\x11\x21\x00\xC8\x11\x21\x00\xCC\x11\x21\x00\xD0\x11\x21\x00\xD4\x11\x21\x00\xA9\x11\x21\x00\xD8\x11\x21\x00\xDC\x11\x21\x00\xEC\x11\x21\x00\xFC\x11\x21\x00\xB0\x11\x21\x00\xAA\x11\x21\x00\xE0\x11\x21\x00\xB4\x11\x21\x00\x00\xC0\x5D\x00\xF8\x11\x21\x00\xE4\x11\x21\x00\xF0\x11\x21\x00\x00\x12\x21\x00\x04\x12\x21\x00\x03\x01\x0C\x00\x29\x0D\x00\x01\x21\x81\x70\x59\xF7\x84\xB9\x03\x01\x20\x08\x29\x0D\x00\x04\x28\x03\xD0\x03\x28\x07\xD3\x5B\xF7\x51\xBC\x4F\xF4\x48\x11\x4F\xF4\x00\x50\xC8\x65\xF7\xE7\x70\x47\x00\x00\x03\x01\x80\x01\x24\x29\x0D\x00\x2D\xE9\xF0\x41\x1A\x48\x00\x68\xC0\x07\x2E\xD0\x19\x48\x01\x68\x41\xF0\x01\x4C\xFC\xFF\x34\x4C\x21\x00\x01\x01\x60\x17\x4F\x7C\x3F\x38\x68\x40\xF0\x80\x00\x38\x60\x15\x4E\x01\x20\x30\x60\x48\xF7\x16\xFB\x3D\x68\x25\xF0\x80\x00\x38\x60\x0F\x48\x74\x38\x01\x68\x41\xF0\x20\x01\x01\x60\x01\x68\x21\xF0\x20\x01\x01\x60\x00\x24\x04\xE0\x30\x20\x48\xF7\x6F\xFA\x04\xF1\x01\x04\x30\x68\x80\x07\x01\xD4\x32\x2C\xF5\xD3\x45\xF0\x80\x00\x38\x60\x00\x20\x30\x60\xBD\xE8\xF0\x81\x00\x00\x60\x18\x20\x00\x7C\x08\x64\x00\xB4\x04\x32\x00\x03\x01\x88\x01\xA0\x29\x0D\x00\x30\xB5\x1B\x4C\x24\x78\x01\x2C\x07\xD1\xB0\xF5\xE1\x3F\x07\xD0\x18\x4C\x25\x68\x45\xF0\x01\x05\x25\x60\x17\x4C\xA0\x42\x01\xD8\x16\x4C\x00\xE0\x16\x4C\xB4\xFB\xF0\xF0\x10\x28\x0C\xDB\xC4\x17\x00\xEB\x14\x74\x25\x11\x24\xF0\x0F\x04\x04\x1B\x18\x68\x20\xF0\x08\x00\x40\xF0\x80\x00\x06\xE0\x05\x46\x18\x68\x00\x24\x20\xF0\x80\x00\x40\xF0\x08\x00\x18\x60\xC5\xF5\x80\x70\x10\x60\x04\xEB\xD4\x70\x40\x10\x22\x1A\x42\xEA\x00\x10\x08\x60\x30\xBD\x00\x00\xDC\x30\x0D\x00\x1C\x04\x36\x00\x60\xE3\x16\x00\x00\x36\x6E\x01\x00\x6C\xDC\x02\x03\x01\x72\x24\x2A\x0D\x4C\xFC\xFF\x2F\x4D\x21\x00\x00\xD0\xF8\xD8\x20\x05\x46\x00\x21\x90\x47\x48\x4E\x48\x4C\x05\xF1\xB0\x09\x48\x46\x80\xF7\x29\xFA\x07\x46\xB0\x78\x08\xB3\x72\xF7\x0A\xFD\x80\x46\x20\x78\xC1\x06\x07\xD5\x40\xF0\x08\x00\x20\x70\x72\xF7\xEC\xFA\x3F\x49\x08\x60\x10\xE0\x40\xF0\x10\x00\x20\x70\x3D\x48\x72\xF7\xB7\xFB\xB1\x78\x43\xF2\xD4\x00\x41\x43\x3A\x48\x72\xF7\x89\xFB\x20\x78\x20\xF0\x08\x00\x20\x70\x40\x46\x72\xF7\xEE\xFC\xD5\xF8\xD8\x20\x39\x46\x28\x46\x90\x47\xD1\xE7\x03\x01\x18\x92\x2A\x0D\x00\x2F\x48\x10\xB5\x40\x79\x18\xB1\x30\xF7\x26\xFA\x00\x28\x00\xD0\x01\x20\x10\xBD\x03\x01\xC2\x01\xA6\x2A\x0D\x00\x2D\xE9\xF0\x41\xDF\xF8\xB4\x80\x0E\x46\x98\xF8\x00\x00\xF0\xB3\xE6\xB3\xC0\x07\x3A\xD0\x71\x68\x06\xF1\x08\x00\xA1\xF5\xE0\x42\x84\x3A\x0F\xD1\x45\x88\x04\x46\x05\xF1\x09\x00\x72\xF7\xB3\xFD\x07\x46\x2A\x46\x21\x1D\x09\x30\x72\xF7\xA1\xFE\x3C\x46\x47\xF2\x3F\x00\x1D\xE0\xA1\xF5\xE0\x42\x41\x3A\x1F\xD1\x05\x46\xFD\xF7\xB3\xFF\x07\x00\x1A\xD0\x28\x78\x13\x28\x17\xD0\x68\x78\x00\x1D\x42\xF7\x36\xFB\x69\x78\xA0\xF1\x08\x4C\xFC\xFF\x2A\x4E\x21\x00\x04\x89\x1C\x41\x80\x20\xF8\x04\x7B\x6A\x78\x29\x46\x92\x1C\x72\xF7\x81\xFE\x47\xF2\x82\x00\x60\x60\x58\xF7\x94\xFE\x21\x46\x30\xF7\x16\xFB\x00\xE0\x09\xE0\x98\xF8\x00\x00\x40\x07\x05\xD5\x30\x46\x72\xF7\x35\xFE\x00\x20\xBD\xE8\xF0\x81\x01\x20\xFB\xE7\x00\x00\xC4\x18\x20\x00\x16\x1D\x20\x00\x1C\x1D\x20\x00\xF0\x50\x20\x00\xDD\x30\x0D\x00\x10\x01\x0F\x00\x28\xDB\x03\x00\x92\xF0\x6A\xBB\x00\x00\x00\x02\x0D\x00\x10\x01\x0F\x01\xBC\x92\x07\x00\x56\xF0\xA8\xBF\x00\x00\x10\x02\x0D\x00\x10\x01\x0F\x02\x04\x89\x07\x00\x57\xF0\x89\xBC\x00\x00\x1A\x02\x0D\x00\x10\x01\x0F\x03\xCC\x2A\x07\x00\x5D\xF0\xAC\xBB\x00\x00\x28\x02\x0D\x00\x10\x01\x0F\x04\x70\x27\x04\x00\x8D\xF0\x5E\xBD\x00\x00\x30\x02\x0D\x00\x10\x01\x0F\x05\xCC\x54\x03\x00\x02\x21\x00\xE0\x00\x00\x00\x00\x00\x00\x10\x01\x0F\x06\x9C\x7B\x07\x00\x58\xF0\x4C\xBB\x00\x00\x38\x02\x0D\x00\x10\x01\x0F\x07\x64\x70\x06\x00\x69\xF0\x4A\xBA\x00\x00\xFC\x04\x0D\x00\x10\x01\x0F\x08\xE0\x00\x02\x00\xB0\xF0\xAE\xB8\x00\x00\x40\x02\x0D\x00\x10\x01\x0F\x09\x4C\xFC\xFF\x25\x4F\x21\x00\xB8\xBB\x02\x00\xA4\xF0\x4C\xBB\x00\x00\x54\x02\x0D\x00\x10\x01\x0F\x0A\x78\x3A\x00\x00\x01\x20\x20\xB9\x00\x00\x00\x00\x00\x00\x10\x01\x0F\x0B\x20\x6C\x05\x00\x79\xF0\x28\xBB\x00\x00\x74\x02\x0D\x00\x10\x01\x0F\x0C\x20\x65\x06\x00\x0C\x20\x50\x43\x00\x00\x00\x00\x00\x00\x10\x01\x0F\x0D\xE0\x9B\x06\x00\x66\xF0\x1C\xBF\x00\x00\x1C\x0A\x0D\x00\x10\x01\x0F\x0E\x1C\xA1\x06\x00\x66\xF0\xB2\xB8\x00\x00\x84\x02\x0D\x00\x10\x01\x0F\x0F\x90\x33\x04\x00\x8C\xF0\x7E\xBF\x00\x00\x90\x02\x0D\x00\x10\x01\x0F\x10\xCC\xEF\x03\x00\x91\xF0\x78\xBD\x00\x00\xC0\x0A\x0D\x00\x10\x01\x0F\x11\x20\x74\x07\x00\x58\xF0\x3C\xBF\x00\x00\x9C\x02\x0D\x00\x10\x01\x0F\x12\x24\x20\x03\x00\x9E\xF0\xF4\xBE\x00\x00\x10\x0E\x0D\x00\x10\x01\x0F\x13\x6C\x20\x03\x00\x9E\xF0\xF7\xBE\x00\x00\x5E\x0E\x0D\x00\x06\x01\x04\x9C\x0F\x0D\x00\x10\x01\x0F\x14\x14\xFD\x06\x00\x61\xF0\x4F\xB9\x00\x00\xB6\x0F\x0D\x00\x10\x01\x0F\x15\xA8\x67\x05\x00\x7A\xF0\x7C\xBE\x00\x00\xA4\x14\x0D\x00\x06\x01\x04\xD6\x14\x0D\x00\x10\x01\x0F\x16\x84\x1B\x02\x4C\xFC\xFF\x20\x50\x21\x00\x00\xAE\xF0\x8E\xBB\x00\x00\xA4\x02\x0D\x00\x10\x01\x0F\x17\x4C\x40\x03\x00\x9D\xF0\xEC\xBB\x00\x00\x28\x18\x0D\x00\x10\x01\x0F\x18\xD0\x4B\x03\x00\x9B\xF0\x6C\xBB\x00\x00\xAC\x02\x0D\x00\x10\x01\x0F\x19\x74\x4D\x03\x00\x9B\xF0\x9E\xBA\x00\x00\xB4\x02\x0D\x00\x10\x01\x0F\x1A\xEC\x17\x02\x00\xB0\xF0\xDE\xB9\x00\x00\xAC\x1B\x0D\x00\x10\x01\x0F\x1B\x38\xC7\x01\x00\xB3\xF0\xC2\xBD\x00\x00\xC0\x02\x0D\x00\x10\x01\x0F\x1C\x10\x44\x00\x00\xCD\xF0\xEA\xBC\x00\x00\xE8\x1D\x0D\x00\x10\x01\x0F\x1D\x84\xD3\x02\x00\xA4\xF0\x0C\xBF\x00\x00\xA0\x21\x0D\x00\x10\x01\x0F\x1E\xF0\xD2\x02\x00\xA2\xF0\xEA\xBF\x00\x00\xC8\x02\x0D\x00\x06\x01\x04\x82\x22\x0D\x00\x10\x01\x0F\x1F\xF4\xD7\x08\x00\x42\xF0\x72\xBD\x00\x00\xDC\x02\x0D\x00\x10\x01\x0F\x20\xF0\xAF\x01\x00\xB7\xF0\x98\xBC\x00\x00\x24\x29\x0D\x00\x10\x01\x0F\x21\x64\x39\x08\x00\x4F\xF0\x1C\xB8\x00\x00\xA0\x29\x0D\x00\x10\x01\x0F\x22\xE8\x70\x07\x00\x59\xF0\xFE\xB8\x00\x00\xE8\x02\x0D\x00\x10\x01\x0F\x23\x54\x2F\x00\x00\xCD\xF0\xD0\xB9\x00\x00\xF8\x02\x0D\x4C\xFC\x2C\x1B\x51\x21\x00\x00\x10\x01\x0F\x24\xE0\x31\x00\x00\xCD\xF0\x8E\xB8\x00\x00\x00\x03\x0D\x00\x10\x01\x0F\x25\xFC\xB5\x01\x00\xB4\xF0\x8C\xBE\x00\x00\x18\x03\x0D\x00\xFE\x00\x00\x4C\xFC\xFF\x64\x2B\x0D\x00\x01\x02\x04\x00\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x70\x01\x65\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x60\x01\x65\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\xC0\x04\x41\x00\x00\x00\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\xAD\x1E\x0D\x00\xBC\xBC\xBC\xBC\x43\x43\x43\x43\x00\x00\x00\x00\xBC\x01\x60\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x21\xB6\x02\x00\xBC\xBC\xBC\xBC\x43\x43\x43\x43\x00\x00\x00\x00\x20\x00\x60\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x1C\x00\x60\x00\x40\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x18\x00\x60\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x14\x00\x60\x00\xF0\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\xC0\x04\x41\x00\x01\x00\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\x2C\x00\x60\x00\x30\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x24\x00\x60\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x19\x1F\x0D\x00\xBC\xBC\xBC\xBC\x43\x43\x43\x43\x00\x00\x00\x00\xE8\x02\x60\x4C\xFC\xFF\x5F\x2C\x0D\x00\x00\x40\x00\x00\x00\xF0\x00\x00\x00\x00\x00\x00\x00\x64\x04\x41\x00\xBA\x40\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\x60\x04\x41\x00\xC0\x50\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\x41\x1E\x0D\x00\xBC\xBC\xBC\xBC\x43\x43\x43\x43\x00\x00\x00\x00\x34\x06\x41\x00\x80\x18\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\x60\x01\x60\x00\x55\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x30\x04\x41\x00\xE9\x02\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\xDC\x06\x41\x00\xF1\x82\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\xC0\x04\x41\x00\x21\x00\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\x88\x04\x41\x00\x00\x00\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\xB3\x1F\x0D\x00\xBC\xBC\xBC\xBC\x43\x43\x43\x43\x00\x00\x00\x00\xDF\x1F\x0D\x00\xBC\xBC\xBC\xBC\x43\x43\x43\x43\x00\x00\x00\x00\x51\x1F\x0D\x00\xBC\xBC\xBC\xBC\x43\x43\x43\x43\x00\x00\x00\x00\x9C\x02\x60\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\xA0\x02\x60\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\xA4\x02\x60\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x4C\xFC\xFF\x5A\x2D\x0D\x00\x00\x00\xA8\x02\x60\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\xAC\x02\x60\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\xC8\x02\x60\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\xCC\x02\x60\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\xD0\x02\x60\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\xD4\x02\x60\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\xD8\x02\x60\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x69\x1E\x0D\x00\xBC\xBC\xBC\xBC\x43\x43\x43\x43\x00\x00\x00\x00\x81\xB7\x02\x00\xBC\xBC\xBC\xBC\x43\x43\x43\x43\x00\x00\x00\x00\xF0\x00\x64\x00\x01\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\xE4\x00\x64\x00\x0C\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\xE0\x00\x64\x00\x30\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFC\x02\x60\x00\x01\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\xBC\x01\x60\x00\x01\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\xAD\x1E\x0D\x00\xBC\xBC\xBC\xBC\x43\x4C\xFC\xFF\x55\x2E\x0D\x00\x43\x43\x43\x00\x00\x00\x00\x0C\x01\x60\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x0B\x20\x0D\x00\xBC\xBC\xBC\xBC\x43\x43\x43\x43\x00\x00\x00\x00\x60\x01\x65\x00\x01\x00\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\x70\x01\x65\x00\x01\x00\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\xF8\x00\x64\x00\xDF\x00\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\xC8\x00\x64\x00\x18\x00\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\x20\x00\x60\x00\xBE\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x1C\x00\x60\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x18\x00\x60\x00\x0F\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x14\x00\x60\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x24\x00\x60\x00\xFF\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x2C\x00\x60\x00\x30\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\xDC\x04\x60\x00\x08\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\xE8\x04\x41\x00\x02\xC2\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x64\x04\x41\x00\xBA\x40\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\x34\x06\x41\x00\x4C\xFC\xFF\x50\x2F\x0D\x00\x00\x48\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\xE8\x02\x60\x00\x45\x00\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\xB3\x1F\x0D\x00\xBC\xBC\xBC\xBC\x43\x43\x43\x43\x00\x00\x00\x00\xDF\x1F\x0D\x00\xBC\xBC\xBC\xBC\x43\x43\x43\x43\x00\x00\x00\x00\x41\x1E\x0D\x00\xBC\xBC\xBC\xBC\x43\x43\x43\x43\x00\x00\x00\x00\x69\x1E\x0D\x00\xBC\xBC\xBC\xBC\x43\x43\x43\x43\x00\x00\x00\x00\x17\x21\x0D\x00\xBC\xBC\xBC\xBC\x43\x43\x43\x43\x00\x00\x00\x00\x2B\x20\x0D\x00\xBC\xBC\xBC\xBC\x43\x43\x43\x43\x00\x00\x00\x00\xC0\x04\x41\x00\x21\x00\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\xBF\x20\x0D\x00\xBC\xBC\xBC\xBC\x43\x43\x43\x43\x00\x00\x00\x00\x71\x1F\x0D\x00\xBC\xBC\xBC\xBC\x43\x43\x43\x43\x00\x00\x00\x00\xF0\x00\x64\x00\x01\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\xE4\x00\x64\x00\x0C\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\xE0\x00\x64\x00\x30\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0B\xA0\x02\x00\x1D\x1E\x0D\x00\x39\xA0\x02\x00\x57\xA0\x02\x4C\xFC\x65\x4B\x30\x0D\x00\x00\xD3\xA0\x02\x00\x7B\xA1\x02\x00\xB5\xA1\x02\x00\xC5\xA2\x02\x00\x6D\x07\x0D\x00\x03\x00\x00\x00\x6D\x06\x0D\x00\x0A\x00\x06\x00\x21\x08\x0D\x00\x06\x00\x09\x00\xB7\x08\x0D\x00\x04\x00\x08\x00\xB7\x09\x0D\x00\x04\x00\x06\x00\xC9\x09\x0D\x00\x03\x00\x07\x00\xC5\x07\x0D\x00\x00\x00\x0E\x00\x29\x17\x0D\x00\x0A\x00\x06\x00\xD5\x07\x0D\x00\x23\x00\x00\x00\x11\x23\x0D\x00\x04\x00\x06\x00\x4C\xFC\x05\xDD\x30\x0D\x00\x00\x4C\xFC\x05\xDC\x30\x0D\x00\x00\x4C\xFC\x0C\xD4\x30\x0D\x00\x10\x00\x00\x00\x0F\x00\x00\x00\x4C\xFC\x28\xAF\x30\x0D\x00\x52\x66\xFC\xFC\x3E\x52\xFD\xFD\x2A\x3E\xFE\xFE\x16\x2A\xFF\xFF\x02\x16\x00\x00\xEE\x02\x01\x01\xDA\xEE\x02\x02\xC6\xDA\x03\x03\xB2\xC6\x04\x04\x4C\xFC\x05\xAE\x30\x0D\x00\x01\x4C\xFC\x05\xAD\x30\x0D\x00\x28\x4C\xFC\x05\xAC\x30\x0D\x00\x01\x4E\xFC\x04\xFF\xFF\xFF\xFF";
Gdebug <- 0;
/*
* Free memory query
*/
function queryFreeRam(param) {
local result = imp.getmemoryfree();
if (Gdebug) server.log("queryFreeRam "+result);
agent.send("queryFreeRam", result);
}
/*
* Light sensor query
*/
function queryDeviceLight(prefix) {
local result = hardware.lightlevel();
result = prefix + result;
if (Gdebug) server.log("queryDeviceLight "+result);
agent.send("queryDeviceLight", result);
}
/*
* Network query
*/
function queryDeviceIP(prefix) {
local info = imp.net.info();
local IP = "IP=" + info.ipv4.address
if (Gdebug) server.log("queryDeviceIP "+IP);
agent.send("queryDeviceIP", IP);
}
/*
* WiFi query
*/
function queryDeviceSSID(prefix) {
local info = imp.net.info();
local SSID = "";
if (info.interface[info.active].type == "wifi") {
SSID = info.interface[info.active].ssid;
}
SSID = prefix + SSID;
if (Gdebug) server.log("queryDeviceSSID "+SSID);
agent.send("queryDeviceSSID", SSID);
}
function queryDeviceRSSI(prefix) {
local info = imp.net.info();
local RSSI = 0;
if (info.interface[info.active].type == "wifi") {
RSSI = info.interface[info.active].rssi;
}
RSSI = prefix + RSSI;
if (Gdebug) server.log("queryDeviceRSSI "+RSSI);
agent.send("queryDeviceRSSI", RSSI);
}
/*
* Bluetooth Control and query
*/
bt <- null; // BlueTooth instance
bt_uart <- null; // BlueTooth uart
bt_lpo_in <- null; // CYW43438 LPO_IN pin
bt_reg_on <- null; // CYW43438 BT_REG_ON pin
bt_sensors <- []; // Sensor data array
// Calculate an Acceleration value
function BTaccel(data, pos) {
local accel = (data[pos] * 256) + data[pos+1];
if (accel > 32767) accel -= 65536;
return (accel / 1000.0);
}
// Callback to fire all BT Adverts at
function BTadverts(adverts) {

foreach (advert in adverts) {

if (advert.type != 3) continue; // Ignore all but type 3

local payload = "";
for (local i = 0 ; i < advert.data.len() ; i++) {
payload = payload + format("%02x", advert.data[i]);
}
if (payload.slice(0,6) != "020106") continue; // (length and flag) Ignore all but BLE disoverable
if (payload.slice(8,10) != "ff") continue; // (data type) Ignore all but manufacturer specific
if (payload.slice(10,14) != "9904") continue; // (manufacture) Ignore all but Ruuvi
if (payload.slice(14,16) != "03") continue; // (header-destination) Ignore all but Ruuvi Broadcast

// Work out the Sensor values
local new_sensor = {};
new_sensor.time <- time();
new_sensor.address <- advert.address;
new_sensor.rssi <- advert.rssi;
new_sensor.humidity <- advert.data[8] / 2.0;
new_sensor.temperature <- advert.data[9] + (advert.data[10] / 100.0);
new_sensor.pressure <- (50000 + (advert.data[11] * 256) + advert.data[12]) / 100.0;
new_sensor.accelerationX <- BTaccel(advert.data, 13);
new_sensor.accelerationY <- BTaccel(advert.data, 15);
new_sensor.accelerationZ <- BTaccel(advert.data, 17);
new_sensor.voltage <- ((advert.data[19] * 256) + advert.data[20]) / 1000.0;

// Add or update array of sensors
local sensor_found = false;
foreach (sensor in bt_sensors) {
if (new_sensor.address == sensor.address) {
sensor_found = true;
sensor.time = new_sensor.time;
sensor.rssi = new_sensor.rssi;
sensor.humidity = new_sensor.humidity;
sensor.temperature = new_sensor.temperature;
sensor.pressure = new_sensor.pressure;
sensor.accelerationX = new_sensor.accelerationX;
sensor.accelerationY = new_sensor.accelerationY;
sensor.accelerationZ = new_sensor.accelerationZ;
sensor.voltage = new_sensor.voltage;
}
}
if (!sensor_found) {
bt_sensors.append(new_sensor);
server.log("New Sensor found " + new_sensor.address);
}

if (Gdebug) server.log("m=" + new_sensor.address + " h=" + new_sensor.humidity + " t=" + new_sensor.temperature + " p=" + new_sensor.pressure + " aX=" + new_sensor.accelerationX + " aY=" + new_sensor.accelerationY + " aZ=" + new_sensor.accelerationZ + " v=" + new_sensor.voltage + " r=" + new_sensor.rssi);
}

}
// Initialise BT sub-system
function BTinit() {
bt_sensors.clear();
server.setsendtimeoutpolicy(RETURN_ON_ERROR);
// Alias the relevant UART bus, LPO and power-on pins
bt_uart <- hardware.uartFGJH;
bt_lpo_in <- hardware.pinE;
bt_reg_on <- hardware.pinJ;
// Boot up Bluetooth: ground LPO_IN and set BT_REG_ON to High
bt_lpo_in.configure(DIGITAL_OUT, 0);
bt_reg_on.configure(DIGITAL_OUT, 1);
// Pause while BT boots...
imp.sleep(0.1);
// Instantiate BT
bt = hardware.bluetooth.open(bt_uart, IMP004M_BT_FIRMWARE);
// Set scan parameters for passive scanning
bt.setscanparams(false, 100, 100);
// Start scan
bt.startscan(BTadverts);
// All done
if (Gdebug) server.log("BT initialised");
}
// Get the sensor table
function queryRuuviTag(param) {
local reply = bt_sensors;
if (Gdebug) server.log("queryRuuviTag "+reply);
agent.send("queryRuuviTag", reply);
}
/*
* Initialisation
*/
BTinit();
agent.on("queryFreeRam", queryFreeRam);
agent.on("queryDeviceLight", queryDeviceLight);
agent.on("queryDeviceIP", queryDeviceIP);
agent.on("queryDeviceSSID", queryDeviceSSID);
agent.on("queryDeviceRSSI", queryDeviceRSSI);
agent.on("queryRuuviTag", queryRuuviTag);

server.log("Initisation completed");

IMP004m Agent Code...

Gdebug <- 0;
// Results cache
GqueryFreeRam <- 0;
GqueryDeviceLight <- 0;
GqueryDeviceIP <- null;
GqueryDeviceSSID <- null;
GqueryDeviceRSSI <- 0;
GqueryRuuviTag <- [];
// HTTP request handler
function requestHandler(request, response) {

try {

if ("queryConnected" in request.query) {
local reply = (device.isconnected()) ? "1" : "0";
reply = "Connected="+reply;
if (Gdebug) server.log(reply);
response.send(200, reply);
return;
}
if ("queryIP" in request.query) {
local info = device.info();
local reply = "IP="+info.ipaddress;
if (Gdebug) server.log(reply);
response.send(200, reply);
return;
}

if ("queryFreeRam" in request.query) {
local reply = "FreeRam="+GqueryFreeRam;
if (Gdebug) server.log("queryFreeRam "+reply);
response.send(200, reply);
return;
}
if ("queryDeviceLight" in request.query) {
local reply = "Light="+GqueryDeviceLight;
if (Gdebug) server.log("queryDeviceLight "+reply);
response.send(200, reply);
return;
}

if ("queryDeviceIP" in request.query) {
local reply = "IP="+GqueryDeviceIP;
if (Gdebug) server.log("queryDeviceIP "+reply);
response.send(200, reply);
return;
}

if ("queryDeviceSSID" in request.query) {
local reply = "SSID="+GqueryDeviceSSID;
if (Gdebug) server.log("queryDeviceSSID "+reply);
response.send(200, reply);
return;
}

if ("queryDeviceRSSI" in request.query) {
local reply = "RSSI="+GqueryDeviceRSSI;
if (Gdebug) server.log("queryDeviceRSSI "+reply);
response.send(200, reply);
return;
}
if ("queryRuuviTag" in request.query) {
local mac = request.query.mac;
local reply = "M="+mac;
local found = false;
foreach (tag in GqueryRuuviTag) {
if (mac == tag.address) {
found = true;
local age = time()-tag.time;
reply += " C="+tag.time+" A="+age+" R="+tag.rssi+" H="+tag.humidity+" T="+tag.temperature+" P="+tag.pressure+" AX="+tag.accelerationX+" AY="+tag.accelerationY+" AZ="+tag.accelerationZ+" V="+tag.voltage;
}
}
if (!found) reply += " C="+time()+" A=1 R=-120 H=0 T=0 P=0 AX=0 AY=0 AZ=0 V=0";
if (Gdebug) server.log("queryRuuviTag "+reply);
response.send(200, reply);
return;
}

if (Gdebug) server.log("Bad request");
response.send(400, "Bad reguest");
return;

} catch (error) {
server.log(error);
response.send(500, error);
}

}
// Functions to pass query to device
function queryFreeRam(param) {
GqueryFreeRam = param;
if (Gdebug) server.log("queryFreeRam "+param);
}
function queryDeviceLight(param) {
GqueryDeviceLight = param;
if (Gdebug) server.log("queryDeviceLight "+param);
}
function queryDeviceIP(param) {
GqueryDeviceIP = param;
if (Gdebug) server.log("queryDeviceIP "+param);
}
function queryDeviceSSID(param) {
GqueryDeviceSSID = param;
if (Gdebug) server.log("queryDeviceSSID "+param);
}
function queryDeviceRSSI(param) {
GqueryDeviceRSSI = param;
if (Gdebug) server.log("queryDeviceRSSI "+param);
}
function queryRuuviTag(param) {
GqueryRuuviTag = param;
if (Gdebug) server.log("queryRuuviTag ("+param.len()+") "+param);
}
// Timer callback, send queries to device, reset timer
function timerPop() {
if (Gdebug) server.log("timerPop");
if (device.isconnected()) {
device.send("queryFreeRam","");
device.send("queryDeviceLight","");
device.send("queryDeviceIP","");
device.send("queryDeviceSSID","");
device.send("queryDeviceRSSI","");
device.send("queryRuuviTag","");
}
imp.wakeup(30,timerPop);
}
// Register the handler functions as callbacks
device.on("queryFreeRam",queryFreeRam);
device.on("queryDeviceLight",queryDeviceLight);
device.on("queryDeviceIP",queryDeviceIP);
device.on("queryDeviceSSID",queryDeviceSSID);
device.on("queryDeviceRSSI",queryDeviceRSSI);
device.on("queryRuuviTag",queryRuuviTag);
// Start polling queries
if (Gdebug) server.log("Waiting before reading device");
imp.sleep(10);
timerPop();
// Start listening for query requests
http.onrequest(requestHandler);
server.log("Initisation completed");