{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# M17 Modulator\n",
"\n",
" This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.\n",
"\n",
"Please attribute the work to *Rob Riggs, WX9O, Mobilinkd LLC*.\n",
"\n",
"This notebook contains the lab notes on implementing an M17 baseband\n",
"encoder and modulator. There are a few key components of this, and\n",
"more complex implementations, ones that are designed to handle more\n",
"than just voice communication, may have many more components.\n",
"\n",
"The hope is that, by publishing these notes, they will serve to help\n",
"others implement the M17 over the air (OTA) standard, and that the\n",
"implementation will provide a reference point for M17 interoperability.\n",
"\n",
"The goal here is not to provide an overview of what M17 is in any\n",
"detail. The target audience are amater radio operators that know\n",
"what M17 is and are interested in how an M17 modulator might be\n",
"implemented.\n",
"\n",
"If you would like to learn about the M17 project, please start here:\n",
"https://m17project.org/\n",
"\n",
"## References\n",
"\n",
"https://m17-protocol-specification.readthedocs.io/_/downloads/en/latest/pdf/\n",
"https://www.qsl.net/kb9mwr/projects/dv/dmr/Roger%20Kane_Understanding%20and%20testing%20of%20DMR%20standard.pdf\n",
"\n",
"## Overview\n",
"\n",
"M17 is a digital transmission mode designed for voice and data. It is\n",
"similar to DMR or D-Star in this respect. This implementation focuses on\n",
"the voice component.\n",
"\n",
" * M17 voice uses Codec2 at either a 3200bps or a 1600bps coding rate.\n",
" * M17 voice uses fixed 384-bit (48 byte) blocks of raw data, streamed back to back.\n",
" * M17 streams data at 25 blocks per second (40ms each), 4800 symbols per second, 9600 bits per second.\n",
" * M17 uses a punctured convolutional FEC (k=5) for data.\n",
" * M17 uses a enhanced Golay(12,24, 8) code for link information.\n",
" * M17 uses a polynomial interleaver.\n",
" * M17 uses an XOR-based bit randomizer (to prevent long runs of 0s or 1s).\n",
" * M17 uses a 4-FSK modulation scheme.\n",
" * M17 uses a 6.25KHz (narrow) channel bandwidth and 12.5KHz channel spacing.\n",
" * M17 provides 3200bps encoded data throughtput.\n",
"\n",
"We will review the basic requirements before going into a simple implementation.\n",
"For the details, please review the spec linked above in the [References](#References)\n",
"section."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Populating the interactive namespace from numpy and matplotlib\n"
]
}
],
"source": [
"%pylab inline\n",
"\n",
"import scipy\n",
"import scipy.signal\n",
"import scipy.io.wavfile\n",
"\n",
"import numpy as np\n",
"import pygraphviz as pgv\n",
"from IPython.display import Image\n",
"import numba\n",
"\n",
"def draw(dot):\n",
" return Image(pgv.AGraph(dot).draw(format='png', prog='dot'))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Glossary\n",
"\n",
"This is a glossary of terms used in this document. It differs slightly from the terminology used in the curent version of the M17 spec as it attempts to reduce ambiguity and favor specificity and a common vocabulary.\n",
"\n",
" * `encrypt`: the use of ciphers to hide the contents of a message from all but the intended recipient(s).\n",
" * `decrypt`: decode a message encrypted with a cipher.\n",
" * `scramble`: the use of a specific algorithm to obscure the contents of the message.\n",
" * `preamble`: the beginning part of a transmission used to syncronize a receiver with a transmitter.\n",
" * `interleave`: use a reversable algorithm to re-order the bits so that they are no longer correlated in time. The purpose of interleaving is to ensure that a burst error affects uncorrelated bits. This improves error correction.\n",
" * `randomize`: the use of a sequence of bits which are XORed with the payload in order to prevent long runs of the same bit (1 or 0). This is also called *de-correlation* or *frequency whitening*. The purpose is to increase the frequency of symbol transitions, reducing the low frequency component of the baseband signal.\n",
" * `FEC`: forward error correction; encoding the data in such a way that redundant information is added which can be used to correct errors in the received bit stream.\n",
" * `CRC`: cyclic redundancy check; a checksum of the bits in a complete packet. A CRC is used to ensure that the packet that was decoded has been received correctly. In M17, the FEC algorithms used can increase the likelyhood of correcting errors but it cannot tell you that all errors have been corrected.\n",
" * `encode`: the act of converting information from one form into another. Generally we use the term \"encode\" when modulating a signal, and \"decode\" when demodulating a signal. \n",
" * `encoding`: a specific data format. It is a defined way of representing specific data. Almost universally this requires a specifier to indicate what information is being encoded, whether audio data (audio encoding) or call sign (ID encoding).\n",
" * `modulate`: encoding binary data in an analog form. In general we differentiate between *baseband modulation* which is what this document focuses on and *RF modulation* which involves modulating an RF carrier with a baseband signal.\n",
" * `demodulate`: the inverse of modulation; converting an analog signal back into a digital form. This is also differentiated between *RF demodulation*, converting a radio signal into baseband modulation, and *baseband demodulation* which is to convert the baseband analog signal back into a digital signal.\n",
" * `decode`: the inverse of encode; the act of converting information from one form into another. We generally use \"decode\" when referring to demodulation. We decode symbols into bits, and encode bits into symbols.\n",
" * `baseband`: the analog data at (or at least near) the frequency of the data being transmitted.\n",
" * `LICH`: link information channel, a side channel separate from the main data payload designed to carry link information data.\n",
" * `superframe`: partial data about the current transmission sent with each data frame in the LICH. The complete link information (link setup frame) is spread across 5 sequential packets.\n",
"\n",
"\n",
"## 4-FSK\n",
"\n",
"The bits in a digital message are packaged into 2-bit symbols. These symbols\n",
"are encoded into a 4-level baseband signal. This is filtered using a root-raised\n",
"cosine filter. This is the baseband signal which is passed to the RF modulator.\n",
"\n",
"The mapping of 2-bit symbols into 4-FSK symbols is:\n",
"\n",
"|Bits|Symbol|\n",
"|----|------|\n",
"| 01|+3 |\n",
"| 00|+1 |\n",
"| 10|-1 |\n",
"| 11|-3 |\n",
"\n",
"## Streaming vs Packet Mode\n",
"\n",
"Audio is transmitted using the streaming mode. That is what we will focus on\n",
"here. Packet mode has not be well defined in the M17 specification at this\n",
"time (Sept 2020). It is not clear that it is really necessary.\n",
"\n",
"## Preamble\n",
"\n",
"The preamble is a series of alternating +3/-3 symbols that result in a 40ms\n",
"pulse of a 2400Hz sine wave. The stream starts with a preamble. It is sent\n",
"just once at the start of the stream.\n",
"\n",
"## Packetization\n",
"\n",
"Voice is digitally encoded and sent in packets or frames. Each packet is\n",
"368 bits in length, and is preceded by a 16-bit sync symbol. The sync symbol\n",
"is used to identify the start of each packet. This is necessayr to maintain\n",
"synchronization between the transmitter and receiver. It allows late-joiners\n",
"to be able to synchronize their decoders with the packet stream.\n",
"\n",
"Note that \"late joiners\" can refer to anyone, including the primary participants\n",
"in a conversation whose links are interrupted by interference or loss of signal.\n",
"\n",
"## Link Setup\n",
"\n",
"The first packet in a stream is responsible for link setup, identifying the\n",
"source, the destination and data type.\n",
"\n",
"The link information is repeated piecemeal in the stream so that late joiners\n",
"can reproduce the link information in the Link Setup frame.\n",
"\n",
"## Addressing\n",
"\n",
"Addresses are base-40 compressed 48-bit address.\n",
"\n",
"The broadcast address is 0xFFFFFFFFFFFF.\n",
"\n",
"Please see the spec for details on callsign and SSID encoding.\n",
"\n",
"## Codec2\n",
"\n",
"Audio data is encoded at either 1600bps or 3200bps using Codec2.\n",
"We will focus here exclusively on 3200bps mode (voice only).\n",
"\n",
"## Data\n",
"\n",
"Data frames follow the Link Setup frame and contain a 48-bit LICH\n",
"(link information channel) payload, a 16-bit sequential frame\n",
"number (FN), and the data payload. Each data frame contains 128\n",
"bits of raw data. This provides 3200 bits per second throughput.\n",
"\n",
"## CRC\n",
"\n",
"A 16-bit CRC is appended to the frame. The frane number and data\n",
"feed into the CRC. The CRC provides a message integrity check to\n",
"validate the frame contents.\n",
"\n",
"## Forward Error Correction\n",
"\n",
"Forward error correction (FEC) is data integrity scheme where the data\n",
"is encoded in a way which allows errors to be detected and corrected\n",
"using redundant information. There are two FEC schemes used in M17.\n",
"\n",
"The primary scheme is a k=5 convolutional code with different puncture\n",
"matrices for link setup and audio data. The Link Setup frame and the\n",
"data portions of the Data frame are encoded using this scheme.\n",
"\n",
"The LICH in each data frame are encoded using a Golay(24,12,8) code.\n",
"48 raw bits of LICH data are encoded in 96 FEC bits.\n",
"\n",
"The purpose of encoding the LICH with Golay is to reduce the decoding\n",
"complexity, since it is expected that idle stations will monitor a\n",
"stream, decoding the LICH to see if there is traffic of interest. \n",
"They will not have to bear the cost of decoding the entire frame using\n",
"a trellis decoder.\n",
"\n",
"There are two puncturing matrices, one for the Link Setup frame and one\n",
"for the data channel. This is because the entire 240 bits of the link\n",
"setup frame is convolutionally coded whereas only 144 bits of the data\n",
"frame are encoded. Also, the data frame retains more FEC bits than the\n",
"link setup frame.\n",
"\n",
"The Golay code provides both error correction and parity information. It\n",
"does not provide the same strong message integrity guarantees that a CRC\n",
"provides.\n",
"\n",
"## Interleaving\n",
"\n",
"The 368 bits in each frame are interleaved to spread the bits evenly\n",
"across the 368 bit frame. This provides increased immunity from error\n",
"bursts. Bits corrupted in a burst are unlikely to be correlated when\n",
"run through their respective FEC decoders.\n",
"\n",
"## Randomization\n",
"\n",
"The bit stream is further randomized to avoid long runs of the same\n",
"symbol. This is undesireable as it impairs synchronization in the\n",
"demodulator and adds a low-frequency component to the baseband signal.\n",
"Randomization is done using a pre-defined array of bits which are\n",
"XORed with the interleaved bit stream."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Implementation\n",
"\n",
"We will now go through the implemenation of the encoder/modulator.\n",
"To keep things simple, so we are not having to deal with real-time\n",
"audio, we will encode a pre-recorded WAV file.\n",
"\n",
" 1. Construct the preamble\n",
" 1. Split the bits into symbols\n",
" 1. Modulate the symbols\n",
" 1. Filter the modulated data\n",
" 1. Construct the Link Setup frame\n",
" 1. Encode the sender and receiver call signs (MYCALL, TOCALL)\n",
" 1. Add the link flags\n",
" 1. Compute the CRC\n",
" 1. FEC encode the data\n",
" 1. Puncture the data\n",
" 1. Interleave the bits\n",
" 1. Randomize the bits\n",
" 1. Prepend the sync word\n",
" 1. Split the bits into symbols\n",
" 1. Modulate the symbols\n",
" 1. Filter the modulated data\n",
" 1. Construct LICH segments from the link setup frame\n",
" 1. Golay encode the LICH segments\n",
" 1. Read the audio data\n",
" 1. Encode the audio using Codec2\n",
" 1. Split the audio into 128-bit (16 byte) chunks\n",
" 1. Send the chunks one at a time\n",
" 1. Combine frame number and audio chunk\n",
" 1. Compute CRC from FN and chunk\n",
" 1. FEC encode the data (FN, chunk, CRC)\n",
" 1. Puncture the data\n",
" 1. Interleave and randomize the data\n",
" 1. Prepend the sync word\n",
" 1. Modulate and filter the Data frames\n",
"\n",
"At the very basic level, the digital to analog modulator looks\n",
"like this."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"g1 = \"\"\"digraph top {\n",
" label = \"4-FSK Modulator\";\n",
" \n",
" Bits -> Symbols -> Interpolate -> RRC_Filter -> Output;\n",
"}\"\"\"\n",
"\n",
"draw(g1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"And a complete M17 transmission looks like this."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAnsAAAEvCAYAAAA9wwfrAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nOzdd1xT9/4/8FfYe8geygZBkKGoVCxD8Gol4LWKVr+irVZuh9Jhi9XWUlehdlxstVV7reKo1XqL4mgFxYFIARFUQEAgiMqIssMM+fz+6I9cUayowGG8n49HHpDD4ZxXIDl55UweY4yBEEIIIYQMRltluE5ACCGEEEJ6D5U9QgghhJBBjMoeIYQQQsggJsd1AEIIeZhEIkFtbS3q6urQ0NCA5uZmiEQitLa2SsdpampCc3Oz9L6MjAw0NTU7TUdbW1s6XFNTE2pqalBUVOyzx0EIIf0BlT1CSK9rb2/H3bt3IRAIUFZWhsrKSgiFQlRUVKCiogJCoRBCoRC1tbVoaGiASCTqtSzy8vJQV1eHlpYWhg0bBn19fejp6cHAwAAGBgbS70eMGAFzc3MoKSn1WhZCCOkLPDoalxDSE1pbW5GXl4fc3Fzk5+ejuLgYAoEAAoEApaWlaGtrAwDweDzo6elBT08P+vr6MDIykt7vWPumpqYGLS0tqKurQ01NDcrKylBSUoKysrJ0foqKilBRUZHeb2trQ0NDg/S+WCxGfX299GtNTQ0aGhqkt5qaGty/f19aPMvLy1FZWYnKyspOaxCNjIxgbm4uvVlZWcHBwQH29vbQ0tLqg78sIYQ8l61U9gghT624uBhpaWnIzMzEjRs3kJ2djaKiIojFYsjJycHc3BwWFhYwNzeHmZmZtChZWFjAwMAAsrKyXD+Ev1VVVYVbt25Jy6pAIJCW18LCQumaR2NjY2nxc3R0hLu7OxwdHSEvL8/xIyCEECkqe4SQv1ddXY2LFy8iLS1Nert37x7k5ORgZ2cnLTujRo3CyJEjYWdnN6j3i2OMQSAQSEvujRs3cP36dWRnZ6OhoQHKyspwcXGBu7s73N3d8cILL8DS0pLr2ISQoYvKHiGkM5FIhEuXLiEhIQFJSUlITU1FW1sbjIyMMGbMGIwZMwaenp544YUXOm1GJUBRURGSkpJw+fJl6a25uRlGRkbw9PSEn58f/P39YWFhwXVUQsjQQWWPEALk5eXhyJEjOHLkCFJTU9He3o5Ro0bB19cXPj4+ePHFFzFs2DCuYw44ra2tSE1NxZkzZ5CYmIiUlBQ0NzfD2toafD4fgYGBmDRpUr/frE0IGdCo7BEyVKWnp+Pw4cOIjY3FjRs3oKurCz6fj2nTpsHb2xt6enpcRxx0mpubcenSJcTHx+PIkSPIycmBjo4OAgICMGPGDEybNm1QbwInhHCCyh4hQ0lZWRkOHjyIXbt2ITMzE2ZmZggKCgKfz4eXlxcdWNDHiouLcfToURw7dgxnz56FmpoagoODsWDBAnh6enIdjxAyOFDZI2SwY4zhxIkT2LJlC06dOgUNDQ3MnTsXISEhmDBhAtfxyP93+/Zt7NmzB7t370ZeXh5GjRqF0NBQvPbaa1BVVeU6HiFk4KKyR8hg1draiv379+PLL79ETk4O/P39sXjxYgQGBtKJgvu5S5cuYdeuXdi7dy+UlJTwxhtvYNmyZTAwMOA6GiFk4KGyR8hgIxaLsWPHDqxfvx737t3D3LlzsWLFCjg5OXEdjTyl+/fvY+vWrfjuu+9QV1eHJUuWYM2aNbQ/JSHkaVDZI2QwOXHiBFasWIHCwkK8+eabeP/992Fqasp1LPKcmpubsWvXLqxbtw4ikQirVq3C8uXLaQ0tIaQ7tspwnYAQ8vzu3LmDqVOnYvr06XBwcEBOTg6++eYbKnqDhJKSEv71r38hPz8fYWFh+Oyzz+Dg4IAzZ85wHY0QMgBQ2SNkgDt8+DBGjx4NgUCA8+fP49dff4WVlRXXsUgvUFVVxWeffYb8/Hy4ubnB398fH3zwAVpaWriORgjpx6jsETJAicVi/Otf/8KsWbMwa9YsXL58GZMmTeI6FukDJiYm+PXXX/Hjjz9i27ZtmDBhAm7dusV1LEJIP0Vlj5ABqLm5GS+//DL27t2L3377Ddu2bevR03O4uLiAx+N1+7Z+/foemzfpvldffRVXrlyBRCLBpEmTkJeXx3UkQkg/RGWPkAFGJBJh2rRpSEpKQkJCAmbMmNEr8zl06BAYY9JbaGgoAODkyZOdhs+ZM6dX5t/fNTQ0wMbGBgEBAZzmsLKywtmzZ2FqaooXX3wRWVlZnOYhhPQ/VPYIGWDeeOMNZGdn49y5c3RSZA4xxiCRSCCRSB75mZqaWp9eAUNbWxunTp2Co6MjZsyYgerq6j6bNyGk/5PjOgAhpPv+85//YN++fTh+/DgcHR17bT6ZmZndHvfAgQO9lqM/U1dXR2FhIdcxpFRVVXHo0CG4ubkhJCQER48eBY/H4zoWIaQfoDV7hAwQZWVlCAsLQ3h4OKZOncp1HNIPDRs2DPv378fvv/+OvXv3ch2HENJPUNkjZIDYtGkThg0bhjVr1nAd5RGxsbGdDtjIy8tDcHAwdHR0pMPu3bsHsViMX375Bf7+/jA0NISysjKcnJwQHR3daXPow9MTCASYM2cOtLS0oKOjg4CAgEfWqrW0tGDNmjUYOXIkVFRUMGzYMPD5fBw9ehTt7e1dTrekpARz5syBuro6dHR0sGDBAlRXV0MgEIDP50NdXR1GRkZ4/fXXUV9f/9h8zc3NAIAvv/wSPB4PIpEIFy9elP5cTq7vNqK88MILWLhwIdauXQs6Zz4hBADACCH9nlgsZnp6emzDhg2cZQgNDWUA2MmTJx87TlBQEAPAvLy8WGJiIhOJRCwlJYXJysoyoVDI4uLiGAC2ceNGVlVVxYRCIdu8eTOTkZFhK1aseOz0goKCWHJyMmtoaGDx8fFMWVmZubu7dxp3yZIlTFNTk506dYo1Njay8vJytmLFCgaAJSYmdjndmTNnsvT0dNbQ0MBiYmIYADZt2jQWFBTErly5wurr69kPP/zAALB33333sfmampo6DVdVVWUTJ058ir9uz7p27RoDwM6dO8dZBkJIv7GF1uwRMgBcu3YNQqEQgYGBXEfplvDwcHh7e0NFRQXjx4+HWCyGrq4uAMDb2xsfffQRtLW1oauri2XLlmHevHmIjo5GXV1dl9NbsmQJPDw8oKqqCj8/P0yfPh1paWm4d++edJzTp09j1KhR8Pf3h7KyMgwMDLBp0ybY2to+NufixYsxZswYqKqqYsGCBRg1ahROnjyJ9957Dy4uLlBTU0NoaCgsLCxw4sSJnv0j9SJHR0dYW1vTFTYIIQBoMy4hA0J+fj5kZGRgb2/PdZRuGTduXJfDAwICkJiY+MhwZ2dntLW1ITs7u8vfc3d373R/+PDhAIC7d+9Kh02dOhXJyclYunQpUlJSpJtu8/Ly4O3t3eV0x44d2+m+sbFxl8NNTEw6zWsgcHR0RH5+PtcxCCH9AJU9QgaAxsZGKCkpQVZWluso3fK4EzzX1tZizZo1cHJygra2tnSftg8++ADAX4+zK5qamp3uKygoAECn/fy2bNmCmJgYFBUVYfLkydDQ0MDUqVPx22+/PTanhoZGp/syMjKQlZWFiopKp+GysrJdnmKlP1NVVYVIJOI6BiGkH6CyR8gAoKOjg8bGxgH/5s3n87Fu3Tq8/vrryM/Ph0QiAWMM33zzDQA81wEFPB4PCxYsQEJCAmpqahAbGwvGGGbOnImvv/66px5Ct7NwrbKyUrrpnBAytFHZI2QAcHV1BQCkpKRwnOTZtbe34+LFizA0NMTy5cuhp6cnLUVNTU3PPX0tLS3cuHEDACAvLw9/f3/pUbPHjx9/7uk/DRUVFbS2tkrv29nZYfv27X02f7FYjPT0dOnzhhAytFHZI2QAMDU1haurK/bv3891lGcmKysLb29vlJeXY9OmTbh37x6ampqQmJiIH374oUfm8a9//QtXr15FS0sLKisr8cUXX4AxBl9f3x6Zfne5ubkhPz8fpaWluHTpEoqKijBp0qQ+m//x48dRW1vL+aXcCCH9BLdHAxNCumv79u1MQUGBFRUV9el8f/rpJwbgkVt9fb10nEuXLnU5zsOEQiELDQ1lw4cPZ/Ly8szAwIAtWrSIrVy5Uvo7Y8aM6XJ6q1evZoyxR4ZPnz6dMcZYZmYmCw0NZfb29kxFRYUNGzaMTZgwge3YsYNJJJLH5ly9ejVLS0t7ZPjnn3/OLly48MjwTz/9lP3222+PDJ8/f770cd64cYNNmjSJqaqqsuHDh7MtW7b05r+oE4lEwsaNG8cCAgL6bJ6EkH5tC48xOusmIQNBW1sbXF1doa2tjcTExD49US8ZOCIjI/Hpp58iNTUVzs7OXMchhHBvK23GJWSAkJeXx+HDh5GVlYWPP/6Y6zikHzp//jw++eQTbNq0iYoeIUSKVg0QMoDY2dnhu+++w6JFi6Cnp4f333+f60ikn0hNTcXMmTMRFBSEZcuWcR2HENKPUNkjZIAJCQlBfX09li9fDqFQiMjISK4jEY6dO3cOgYGBmDRpEvbs2dMvTv1CCOk/aDMuIQPQW2+9hZ07d+Krr77CK6+8gpqaGq4jEQ4wxrB582ZMnToV06dPx2+//QZlZWWuYxFC+hkqe4QMUAsXLsSJEydw7tw5ODs749y5c1xHIn2orKwM06ZNw/vvv4+PPvoIe/fuhby8PNexCCH9EJU9QgYwf39/XL16Fa6urvD19cWbb74JoVDIdSzSi8RiMb7//ns4OTmhsLAQSUlJWLNmDWRkaHFOCOkaLR0IGeB0dXURGxuLnTt3IjY2FjY2Nti0aRNaWlq4jkZ62MmTJ+Hs7Ix33nkHCxcuxJUrVzB+/HiuYxFC+jkqe4QMEgsXLkRBQQHCwsIQEREBOzs7bN68GQ0NDVxHI8+BMYbjx4/D29sbL730EkaOHIns7Gx89dVXUFNT4zoeIWQAoLJHyCCiqqqKzz77DHl5eeDz+Vi1ahXMzMywevVqlJeXcx2PPIXW1lb89NNPcHJyAp/Ph4qKCi5cuIDDhw/D2tqa63iEkAGErqBByCBWW1uLXbt24YsvvkBFRQV8fHywdOlSzJgxg3bm76eys7OxZ88e/PTTT6iursbcuXPx4YcfwtHRketohJCBaSuVPUKGgObmZhw8eBC7du3CuXPnoKuri/nz5+OVV17B2LFj6bxsHCstLcXhw4exa9cuZGVlwcbGBgsXLsSiRYtgYmLCdTxCyMBGZY+QoUYgECAmJgYxMTEoLCyEiYkJAgMDMWPGDHh7e0NBQYHriEPC1atXceTIERw5cgQZGRlQV1fH7NmzsWjRIkycOJEKOCGkp1DZI2Qou3LlCo4ePYojR47gypUr0NTUhK+vL3x8fODr6wsHBwcqHT2kvLwciYmJSExMREJCAoqLi2FsbAw+n4+goCD4+vpCUVGR65iEkMGHyh4h5C+3bt3C0aNHER8fj/Pnz6OmpgYGBgbw9vbGiy++iPHjx2P06NG0r183FRYWIi0tDUlJSThy5Ahu374NeXl5jBs3Dr6+vggICIC7uzuVaUJIb6OyRwh5VHt7Oy5fvoxvv/0WsbGxYIxBJBJBUVERzs7OcHd3x9ixY+Hq6oqRI0cO6TVSjDEIBAJkZWUhPT0daWlpSE9PR1VVFeTl5eHi4oL8/Hw0NTVh4cKFWL16NczMzLiOTQgZOqjsEUI6Y4zhv//9Lz799FPcuHED8+bNw9q1a9HU1CQtM2lpacjMzERzczNkZWVhaWkJR0dH2NvbY9SoUbCzs4OFhQWGDRvG9cPpMU1NTRAIBCgoKEBOTo70lpubi8bGRsjIyMDW1hbu7u7SMuzi4gJlZWW0trbiwIEDWLduHUpKSjB37lysXr0adnZ2XD8sQsjgR2WPEPI/CQkJWLlyJTIyMjB9+nSsX78ezs7OXY7b1taGvLy8TsUnJycH+fn5aGtrAwCoq6vD3NxcejMzM4OhoSEMDQ1hYGAAPT096OnpcX6pr7q6OpSVlUEoFEIoFOLOnTsoLS1FSUkJBAIBSkpKOp2n0MzMDCNHjuxUcB0cHKChofG382lra8PPP/+MjRs3oqCgAC+//DIiIiLg4ODQ2w+REDJ0UdkjhPxV8lavXo3U1FT4+fkhKioKbm5uzzSttrY2FBcXS4tSR1kSCAQoLi5GZWUlxGKxdHwZGRno6+tDT08PGhoaUFNTg4aGBjQ1NaGmpia9AYCWlpZ0HzcZGRloampKp9PY2NjpEnH19fUQi8VoaWlBQ0MDamtrUVdXh4aGBjQ0NKCurk5a7pqbmzs9Bl1dXQwfPhxmZmadyqq5uTksLS2hrq7+TH+bDhKJBMePH0dERAQyMzPx0ksv4dNPP8XYsWOfa7qEENIFKnuEDGVJSUlYs2YNEhMT4efnh88//7xPCkdHyRIKhSgvL0dlZSWEQqG0jNXV1aG2thb19fVoaGiASCSCRCJBbW2tdBptbW2dLgWnqKgIFRUV6X0VFRUoKipCQUEBampq0NLSgrq6OtTV1aGmpgZ1dXXpmkV9fX0YGhpKS2dfHYTCGMOxY8ewbt06pKWlwc/PD+vWrcOECRP6ZP6EkCGByh4hQ9GlS5fwySef4PTp05g4cSI2bNgALy8vrmM9NYlEAllZWRw6dAizZs3iOs5zSUhIwCeffIKUlBRMnDgRn332GSZPnsx1LELIwLeVro1LyBCSmpoKPp+PF154Ac3NzTh9+jSSkpIGZNEbbPz8/HDp0iVcuHAB2tra8PPzg6enJ+Li4riORggZ4KjsETIEXL9+HcHBwZgwYQLu3buHo0ePIikpCb6+vlxHIw/pKHhJSUnQ1tZGUFAQXF1dcejQIdCGGELIs6CyR8gglpOTg5CQEDg7O+PGjRv45ZdfkJycDD6fz3U08gQTJ05EXFwcMjIyYGNjgzlz5sDFxQUxMTFob2/nOh4hZAChskfIIFRcXIzQ0FCMHj0aGRkZOHDgALKysjB79my6YsMA4+LigoMHDyIrKwvOzs547bXX4OzsjJiYmE5HNRNCyONQ2SNkECkpKUFoaChsbW1x4cIF7Ny5k0reIOHk5ISYmBjk5eVh4sSJWLx4MWxtbREdHd3plDOEEPIwKnuEDAKlpaUICwuDnZ0dTp06hS1btuDatWsICQmBrKws1/FID7KyssK2bduQn58PPp+P8PBw2NnZITo6Gk1NTVzHI4T0Q1T2CBnAKisrsXLlStja2iI2NhabN29GQUEBli5dSiVvkLOwsEB0dDTy8/MRFBSEjz76CBYWFoiKikJjYyPX8Qgh/QiVPUIGoHv37mHlypUwNzfHvn37EBkZifz8fCxduhRycnJcxyN9aMSIEYiOjoZAIMCiRYuwdu1amJubIyIiotNJqAkhQxeVPUIGkPv37yMiIgJWVlbYuXMnPv30U+Tn5yMsLAyKiopcxyMc0tfXR2RkJEpKSvDmm28iOjoaI0aMwMqVK1FdXc11PEIIh6jsETIA1NfXIyoqClZWVvjuu++watUqCAQChIeHQ1lZmet4pB/R1dVFREQESkpKsGrVKuzYsQNmZmYICwtDeXk51/EIIRygskdIP9bQ0ICoqCiYmZnhiy++wDvvvIPCwkKEh4d3ug4sIQ/T0NBAeHg4SkpKsG7dOhw6dAjW1tYICwvD3bt3uY5HCOlDVPYI6YcaGxsRHR0Na2trrF+/HkuXLkVhYSEiIiKgqanJdTwygKipqSEsLAwFBQXYsGEDDh8+DAsLC4SGhqK0tJTreISQPkBlj5B+pLW1Fdu3b4e1tTVWr16NOXPmoLCwEJGRkdDS0uI6HhnAVFVVERYWhqKiIuzYsQOnT5+GlZUVQkJCkJ+fz3U8QkgvorJHSD/Q1taG7du3w9LSEsuXLwefz8fNmzcRHR0NfX19ruORQURBQQEhISHIzc3Fjz/+iD///BP29vYIDg5Gbm4u1/EIIb2Ayh4hHGpra0NMTAzs7e2xbNkyTJ8+HUVFRdi2bRsMDQ25jkcGMXl5eWnpO3DgAK5fvw5HR0fw+XxcvnyZ63iEkB5EZY8QDkgkEhw6dAijRo3CkiVL8MILLyA3Nxfbtm2DsbEx1/HIECIjI4PZs2fj+vXriI2NRVlZGdzd3cHn85Gamsp1PEJID6CyR0gferDkzZ07Fy4uLsjJyUFMTAwsLS25jkeGMBkZGfD5fKSnp+PUqVMQCoUYP348PD09cebMGa7jEUKeA5U9QvoAYwxxcXEYO3Ys5s6dCycnJ+Tm5uLgwYOwtrbmOh4hnfj5+SElJQUXLlyAkpISJk+eDE9PT8TFxXEdjRDyDKjsEdLLEhISMG7cOAQFBcHExAQZGRk4ePAgbG1tuY5GyN/y9PREQkICLly4AG1tbQQGBmLixImIi4sDY4zreISQbqKyR0gvSUpKgpeXF/z9/aGlpYX09HTExcXB2dmZ62iEPJWOtXrJyckYNmwYgoKC4OrqipiYGEgkEq7jEUKegMoeIT3s4sWL8PX1xaRJk6CgoIDU1FTEx8fDzc2N62iEPBcPDw/ExcUhMzMTo0ePxmuvvQZnZ2fExMSgvb2d63iEkMegskdID0lJSQGfz4enpydaW1tx9uxZxMfHw93dnetohPSo0aNHIyYmBllZWXB1dcXixYtha2uL7du3QywWcx2PEPIQKnuEPKerV68iODgYHh4eqKqqQkJCgnQTLiGD2ahRoxATE4O8vDz4+fnh7bffho2NDaKjo9Hc3Mx1PELI/0dlj5BndP36dQQHB8PFxQW3bt3CmjVrIBQK8Y9//IPraENSdXU1fvjhB/j6+mLYsGFQVlaGjY0N5s+fj6ysLK7jDWqWlpbYtm0bCgoKEBgYiJUrV8LW1hbR0dFoamriLBdjDBcvXsRbb70FW1tbKCoqQl9fH56enti7dy8dZEKGDCp7hDyl3NxchISEwNnZGTdu3MDmzZuhr6+P2NhYVFRUcB1vyPrggw+wbNkyBAUFIScnB/fv38fOnTuRmZmJMWPGIDY2luuIg56ZmRmio6MhEAgwb948rFq1CmZmZoiIiEBdXV2f58nLy4Onpyfy8/Px66+/ora2FikpKRgxYgQWLFiADz74oM8zEcIFHqOPNoR0S3FxMSIjI/Gf//wHI0eOxKeffopZs2Zh/vz5GD16NFasWAFzc3OUl5fTfkt9RCKRQFZWFocOHcLvv/8OWVlZbNu2rdM4WVlZcHFxgY2NDfLz8zlKOjQJhUJs2bIF//73vyEvL4+33noL77zzDrS0tPpk/jdu3ICTkxMqKyuhra0tHd7a2gpjY2M0NDSgtrYWioqKfZKHEI5spbJHyBOUlJRg48aN2LlzJ6ytrfHRRx9h/vz5kJWVBQA0NTVBWVkZAGBqakplrw89WPZmzZr12PFUVFTQ0tICsVgMHo/XhwkJANy/fx/ffvstNm/eDLFYjDfffBMffvghhg0bxlkmV1dXZGZmoqamBpqampzlIKQPbKXNuIQ8RmlpKcLCwmBnZ4dTp05hy5YtuHbtGkJCQqRFD4C06JH+SSQSoampCY6OjlT0OKKjo4OIiAiUlJRg3bp12L17N8zMzBAWFoaysrI+z1NTU4OCggK4urpS0SNDApU9Qh4iFAqlO5jHxsZi8+bNKCgowNKlSyEnJ8d1PPKUDh06BABYvXo1x0mIuro6wsLCcPPmTaxfvx6//vorLCwsEBoaitu3b/f6/Ovq6nDx4kUEBgbC0NAQMTExzzyt2NhY8Hg86U0gEGDOnDnQ0tKCjo4OAgICUFhY2IPpCXkOjBDCGGNMKBSy8PBwpqKiwvT19VlkZCRramp6qmmYmJgwWVnZXkpIHtbe3s4AsEOHDnX58/LycmZgYMCWLFnSx8lIdzQ3N7Nt27YxU1NTpqCgwBYsWMAKCgp6ZV7r1q1jABgA5u3tza5evdoj0w0KCmIAWFBQEEtOTmYNDQ0sPj6eKSsrM3d39x6ZByHPaQut2SNDXlVVFSIiImBlZYWdO3dizZo1EAgECA8Ph5KSEtfxyDO6f/8+pk6dCm9vb/zwww9cxyFdUFRUxNKlS1FYWIgdO3YgJSUFDg4OCAkJQV5eXo/O6+OPP0ZLSwtyc3MxcuRIuLq6Yt26dT02/SVLlsDDwwOqqqrw8/PD9OnTkZaWhnv37vXYPAh5VlT2yJDV0NCAqKgoWFlZ4bvvvsO7776LwsJChIeH0354A5xIJMI//vEPODg4YN++fZ32sST9j4KCAkJCQnDjxg3s27cPaWlpcHBwAJ/Px5UrV3p0PiNHjsT333+PwMBArFmzBgkJCT0y7YevlDN8+HAAwN27d3tk+oQ8Dyp7ZMgRiUSIiorCiBEjsGHDBoSGhqKwsBARERFQV1fnOh55TmKxGLNnz4aJiQl2795NRW8AkZGRwezZs5GdnY3Y2FjcvXsXY8aMAZ/PR1paWo/Oi8/nAwCOHTvWI9N7+EAPBQUFAH8dMU4I16jskSGjsbER0dHRsLa2xvr167F06VKUlJQgMjKSjsgbREJDQ9HS0oKDBw92OqDG2toaKSkpHCYj3SUjIwM+n4/09HQcOXIEFRUVGDduHPz9/Xvsf9hxbr2qqqoemR4h/RmVPTLotba2Yvv27bCxscHq1asRHByMmzdvIjIystOJVsnAFxERgezsbBw5coROlDsI8Hg88Pl8pKamIj4+HiKRCB4eHvD09ERcXNwTf3/FihX4v//7vy5/dvLkSQCPbn4lZDCiskcGrba2Nmzfvh1WVlZYtmwZAgICUFBQgOjoaBgYGHAdj/SwXbt24bPPPsOff/4JdXX1TqfF4PF4dBqMAc7Pzw/Jycm4cOECtLW1ERgY2K3St3//fqxduxYCgQAtLS3Sg6/27t2LMWPGYMmSJdJxBQIBZGVlwePxkJGR8cThhAwUVPbIoCORSHDo0CHY29tj2bJleOmll1BUVIRt27bByMiox+d37NgxaaG4c+cO2tvbpfd//PHHHp8f6dqvv/7KdQTSBzoKXlJSErS1tREUFARXV1ccOnQI7KELQq1ZswY7duxAcnIyfHx8oKGhAScnJ5w+fRqff/45LmbaPh0AACAASURBVFy40OXBWDweD/Ly8n87PCUlBTweD0eOHAHw18nVP/74Y+l4UVFRAP66UkdAQECP/g0IeVp0uTQyaEgkEhw+fBgff/wxiouLMXfuXERERMDS0pLraKSXdPdyaWTwysrKwoYNG/Drr7/C0dERK1as6HQ5Q0IIXS6NDAKMMcTFxcHNzQ1z586Fs7MzcnJyEBMTQ0WPkEHO2dkZBw8exNWrV+Hi4oLXXnsNo0ePRkxMDF2jmpD/j8oeGdASEhIwduxYzJgxA7a2tsjJycHBgwdhbW3NdTRCSB9ydHRETEwM8vLy4OnpicWLF8PW1hbR0dFoaWnhOh4hnKKyRwakhIQEuLu7Y8qUKTA2Nsbly5dx8OBB2NnZcR2NEMIhKysrbNu2DQUFBeDz+dLrXEdHR6OpqYnreIRwgsoeGVCSkpLg7e0Nf39/aGlpIS0tDXFxcXBxceE6GiGkHzE3N0d0dDTy8vIwY8YMfPTRRzA3N0dUVBQaGxu5jkdIn6KyRwaEixcvYvLkyZg0aRLk5eXx559/Ij4+HmPGjOE6GiGkHxsxYgSio6MhEAjwxhtvYOPGjTAzM0NERARqamq4jkdIn6CyR/q1lJQU8Pl8eHp6oqWlBYmJiYiPj8e4ceO4jkYIGUD09fURERGBwsJCvPXWW4iOjoaZmRlWrlxJV9Eggx6VPdIvXbt2DcHBwXjhhRdw//59JCQkSDfhEkLIs9LV1UVERARu3bqFVatWYceOHTAzM0NYWBjKy8u5jkdIr6CyR/qV7OxsBAcHw9nZGSUlJThy5AiSk5MxefJkrqMRQgYRdXV1hIeHo6SkBOvXr8ehQ4dgbW2NsLAw3Llzh+t4hPQoKnukX8jNzUVISAicnZ2Rm5uLX375RboJlxBCeouamhrCwsJQXFyMr7/+GocPH4alpSVCQkLoEntk0KCyRzglEAgQGhoKJycnXL58GTt37kRWVhZmz54NHo/HdTxCyBChqKiIpUuXoqioCDt27MClS5dgb2+PkJAQ5Ofncx2PkOdCZY9w4tatWwgNDYWNjQ3i4+OxdetWXL16FSEhIZCRoaclIYQbCgoKCAkJQU5ODn788UekpqbC3t4ewcHByM3N5ToeIc+E3lVJn7p9+zbCwsJga2uLP/74A1u2bEF+fj6WLl1K17IkhPQb8vLy0tJ34MABZGdnw9HREXw+H5cvX+Y6HiFPhcoe6RNCoVB6JvvffvsNUVFRyMvLw9KlSyEnJ8d1PEII6ZKMjAxmz56Na9euITY2FuXl5Rg7diz8/f3x559/ch2PkG6hskd61f3797Fy5UqYm5vjp59+wqeffor8/HyEhYVBUVGR63iEENItMjIy4PP5SEtLQ3x8PBoaGjBhwgR4enrizJkzXMcj5G/xGGOM6xBk8KmqqsLmzZvx73//G/Ly8lixYgWWL18OZWVlrqORAez9999HaWmp9D5jDKdPn8bo0aOhr6/fadzo6GgYGRn1dUQyhCQlJSEiIgKnT5/GxIkTER4eTmcQIP3RVip7pEc1NDRgy5YtiIyMhKysLN5++22899570NDQ4DoaGQRWrlyJqKioJ45nZmYGgUDQ+4EIwV+lLyoqCseOHYOHhwc++ugjBAQE0BkFSH+xlTbjkh4hEokQHR0NKysrbNiwAaGhoSgsLERERAQVPdJjXnnllSeOo6CggEWLFvV+GEL+P09PT8TFxSEjIwOmpqYICgqCi4sLYmJi0N7eznU8QmifPfJ8WlpasH37dlhbW+Pjjz/Gq6++ipKSEkRGRkJTU5PreGSQcXZ2ho2Nzd+O09raiuDg4D5KRMj/uLq64uDBg8jMzISzszNee+01ODs7IyYmBmKxmOt4ZAijskeeSWtrK7Zv3w5LS0u8++67CA4Oxs2bNxEZGQltbW2u45FBLCQkBPLy8l3+jMfjwcnJCQ4ODn2cipD/GT16NGJiYpCVlQU3NzcsXrwYdnZ22L59O9ra2riOR4YgKnvkqbS1tSEmJgb29vZYtmwZAgICcPPmTURHR8PAwIDreGQImDdv3mPXksjJyWHhwoV9nIiQro0aNQoxMTHIz89HQEAAli9fDhsbG0RHR6O5uZnreGQIobI3xN26datb40kkEhw6dAgODg5YsmQJ/Pz8UFRUhG3bttERj6RPWVpawtXVtcsrrYjFYsyZM4eDVIQ8noWFBaKjo5GXl4egoCDp6aiioqLQ2NjYrWmcPXu2d0OSQY3K3hCWkpICJycn5OTkPHacjpJnb2+P+fPnw8PDA7m5udi2bRtMTEz6MC0h/9PVZfVkZGTg4eEBU1NTjlIR8vfMzMwQHR0NgUCARYsWYe3atTA3N0dERARqa2sf+3uVlZV46aWX8N577/VhWjKYUNkbojIzMzFlyhTU1dXhk08+eeTnjDHExcXBzc0Nc+fOhbOzM7KzsxETEwMrKysOEhPyP3PmzIFEIuk0jMfjISQkhKNEhHSfgYEBIiMjIRAI8Oabb+Lf//43rKysEBERgerq6kfG//rrr9Ha2oro6Gi8//77HCQmAx2dZ28IKigogIeHB2prayEWi8Hj8XDlyhU4OzsDABISEhAeHo7MzEy8/PLLWLduHezs7DhOTUhnPj4+uHDhgvTUFrKysqioqICOjg7HyQh5Ovfv38e3336LzZs3QywW49VXX8WqVatgYGCAqqoqmJqaoqmpCcBfa7DDwsLw9ddfc5yaDCB0nr2h5tatW/D29pYWPeCvndo/+eQTJCQkYNy4cZgyZQqMjY2Rnp6OgwcPUtEj/dKCBQuk38vKysLf35+KHhmQdHR0EBERgeLiYoSHh2P//v2wtrbGhx9+iI0bN3Y6glcikdAaPvLUaM3eEHLnzh14eHigvLy8y8P/FRQUMGXKFKxduxaurq4cJCSk++rq6qCrq4u2tjbIyMhgz549mDdvHtexCHluIpEIP/74I6KiolBbW9vlQRwyMjJ499138eWXX3KQkAwwtGZvqBAKhfDx8Xls0ZOTk8OECRMQFxdHRY8MCBoaGpg6dSp4PB7k5eURGBjIdSRCeoSqqirCwsLwxhtvoLW1tctxJBIJvvnmG3zwwQd9nI4MRHJcB+hP2tra0NDQgOrqaohEIrS2tkq/dugY9iA1NbVOJ3lVUFCAqqoqFBQUoKamBi0trUfG6Uu1tbXw8/ODQCB47Ak9xWIxzp8/jwsXLmDSpEl9nJAMJYwx1NTUAPjrWsptbW2PvK5qa2sfOQCjQ0tLi3RNh7W1NRhjGDNmDE6ePAkAkJeXh5qa2mPnr66uDjk5uUfG1dLSAo/Hg4qKChQVFZ//gRLyHEQiEb7++uu/vfKGRCLBV199BR6Phy+++KIP0z2qoaEBzc3NqKurQ2NjI1paWqTvqQ/q6j0UwCMn4+fxeNDS0gLw12tWUVERGhoa0vdW8nQG9Wbc8vJy3Lp1C2VlZbh37x7Ky8tx79493Lt3D0KhEBUVFairq+tU7nrTg+VPU1MTBgYG0NXVhZ6eHnR1dWFoaAhdXV0YGRlhxIgRPXKSYpFIhMmTJyMjI+OJZ26Xk5ODp6cnEhMTn3u+ZOBjjKG6uhpVVVWorq5GbW0tampq0NjYCJFIhLq6OtTX10vvV1dXS7+vr69HXV0d2tvbUV9fD7FY3KmkDQRycnJQV1cHAGhqakJGRgaamppQUVGBqqoqNDU1oaamBlVVVaiqqkJLS0v6Mw0NDairq0NdXR3Dhg2DtrY2hg0bRm9SpNu++uorhIeHd+vaujweDx988AGioqKea55isRjl5eUoLS3FvXv3UFVVhfv376Oqqkp66xheW1uL+vp6NDc3o76+/rnm+7Qefi0OGzYMw4YNg46OjvT7B+8bGxvDyMgIurq6fZqzH9k6oMteQ0MD8vPzkZeXh4KCApSUlODWrVvS24NnKFdXV4eBgQH09PSk5crAwACamprQ1taWLrA7ypiqqioUFRWhpKQEZWVl6XRkZWWhoaHRKcfDayE6PtU0NzdDJBJJXxQikQiNjY2orq5GTU0NKioqpOWzsrISFRUVnT4FKSkpwczMDCNGjMCIESNgZmYGGxsb2Nraws7ODqqqqn/792lqasKUKVPw559/PtUles6ePQsvL69uj0/6P7FYjMrKSgiFQpSVlUm/71iAP1jqOr52dQoIAFBWVoaKispjy86DP5OXl5d+Ev+7tWgPFisAf7t27cFP/AAQFhaGTZs2SYtUx+uvKxKJpNP5zDoK6IPDHy6nD66J7Ci0jY2Nj5Tdh4twVzremDrK38Nf9fT0oK+vD319fRgaGsLAwKDT8ocMDc3NzRg+fDju3bvX7d/h8XhYs2YNIiIiHjtOWVkZioqKUFRUhOLiYpSXl+P27du4e/cu7t69i4qKik7vZSoqKo8UJx0dHejo6EBTUxPq6upQUlKCuro6VFVVoaSkBE1NTSgrK0NJSUlayh7U1bD29vZHXjNisVhaIuvq6tDS0oL6+no0NDSgpaVFui+jSCR6pJQ++P2Da0aVlJRgbGwMY2NjmJiYwMjICMOHD4eFhQUsLS1haWnZaTk0iAyMstfU1ISsrCxcuXIF2dnZyMvLQ15eHkpLSwH8tSnGwsKiUzEyNzeXfm9sbAwlJSWOH0X3NDc3486dO9LCKhAIOhXY4uJitLW1gcfjYfjw4bCzs8PIkSPh4OAAV1dXODs7Q0lJCa2trQgICEBiYmKXmwHk5eXB4/E6rc3U1dWFtbU15s+fj7fffrsvHzZ5Rs3NzSgtLUVpaSlu376N0tJSCIVCVFZWoqysTPq9UCjs9HtKSkrQ09ODjo7OY4vHw8M0NTWlJa0/EYlET/zgw4WOtZsdxflxpfrBrxUVFY+sJVFTU5MWPz09Pen3hoaGMDU1hZmZGUxNTema1INITk4Ovv76a5SUlEAgEKC0tLTTBxh5eXnIysqira3tkTV/4eHhmDp1KnJyclBQUCAtd4WFhdLTtygqKsLc3BxGRkYwNTXtVIA6vurr6w+KDxo1NTUoKyvD3bt3cefOHWmxvX37tnTr3927d9FRhfT09GBlZSUtf3Z2dhg1ahQcHBwG8u4d/a/stba2Ij09Henp6cjIyEBGRgZyc3MhFouhpaUFBwcH2Nvbw9bWFiNHjsTIkSNhaWkp3QdnsGtra0NRURFyc3OlpTc3Nxe5ubmora2FnJwc7O3tUVdXh5KSkk6/KysrC2NjY9jZ2cHW1hZWVladboPhhT3YlJeX4+bNm7h16xZu376N27dvo6SkRPp9ZWWldFwlJSWYmJhIS4GRkdEja4k6hj+8dpr0H83NzY+U9QfXxt69e1f6tWONI/DXWkMzMzMMHz4cpqamGD58OEaMGAFTU1NYWlrCzMxsyCwnB6P79++jtLQUt27dkpbAa9euoaCgAJWVlWhqasKDb+fa2tqwsbGRFpcHv5qYmPS7D21camlpQXFxMQoLC6XFuKioCDdv3kRhYSFaW1shJycHKysrODk5YdSoUXB0dISLiwusra25jt8d3Je9xsZGZGRk4OLFi0hISMDFixfR1NQEDQ0NODk5YcyYMdKbvb19l9fDJH+5e/cuLl++jG+//RbXrl2T7iirqKgIR0dH+Pr6YtKkSfDy8qI3+36kuroa2dnZyMnJkX4KLyoqQkFBQadNG9ra2tJPm0ZGRjA2Nu70vbm5Ob0+hpjm5mbpmooHN9F13L9586Z087ScnBxGjBghfQ49eLOzs/vbg1oI94qKipCUlITLly9Lb83NzVBQUIC1tTUcHBxgamoKQ0NDKCoq4pVXXumR/b6HOrFYjFu3bkmX0dnZ2bh8+TLy8vLQ3t7eqat4enrixRdf7I9/d27K3vXr13Hs2DGcOHECKSkpaGtrg6WlpbSIeHp6wsbGpq9jDUr5+fm4cOECzp8/j/Pnz0MgEEBBQQETJkzA9OnTERAQAAcHB65jDnptbW3Iz89HdnY2rl+/jpycHFy/fh3FxcXSTemamprStazW1tadvhobG1ORI8+kqqqq01qKwsJC3Lx5Ezdv3kRZWRmAv/b3MjExgb29PRwdHeHg4AAnJyfY29vTB0MOtLe348qVKzhz5gwSExORnJyMuro6KCkpwdXVFe7u7nB3d8e4ceNgbW1NywYONDU1ITMzE6mpqUhLS0Nqaipu3rwJxhjMzc3h5eUFX19f+Pj4YPjw4VzH7ZuyJxaLcfr0acTFxeH48eMQCATQ19fHSy+9BH9/f3h5ecHExKS3YxAApaWlOHfuHOLj43Hy5EkIhUJYWFhg+vTpCAwMhK+vL2RlZbmOOaDdunULGRkZuH79Oq5fv47s7Gzk5+ejtbUVsrKy0k0B9vb2sLOzkxY6PT09rqOTIaaxsVFaAm/evCn9EJKbmys9PYaZmZm0/HXsG+zg4ECbhHtYXl4e/vjjD5w5cwbnzp1DTU0NDAwM4OPjgxdffBHjx4+Hk5MTZ6fwIk9WXV2NtLQ0pKSkIDExESkpKWhuboaNjQ18fHzg6+uLKVOmcLF/be+WvezsbOzZswe7d+9GeXk5HBwcwOfz4efnB29vb1pYcEwikeDKlStISEhAXFwckpOToa2tjVmzZmHBggWYOHEi7dfxBNXV1bh8+bJ080p6ejrKy8sBAEZGRtIdezu+urm5QUVFhePUhDzZ3bt3pZutOr5euXIFjY2NkJeXh42NDTw9PTFx4kTazeYZdCx/4+LicOjQIeTk5EBNTQ0TJkyAn58f/Pz84ObmRsvgAUwsFiMrKwsJCQlISEjA+fPn0d7ejgkTJoDP5+Of//wnbG1t+yJKz5e9iooKbNu2DTExMSgsLISDgwPmzZuHefPmwcLCoidnRXpYYWEh9u/fj3379iEvLw82NjZYuHAhli5dSmud8NcLNyMjA+fOncPFixeRnp6OO3fugMfjwcrKCmPHjpXe3NzcBush/GQIE4vFyMnJkR5El56ejqysLLS2tkJDQwNubm4YP368dHcceg10xhjDhQsXsGfPHhw9ehSVlZWwtrbGjBkzEBgYiBdeeIG2rAxitbW1OHnyJGJjY3Hy5EnU1dXB1dUVM2fOREhICEaMGNFbs+65speRkYHNmzfjwIEDUFdXx8KFCzF//ny69NYAlZ6ejn379iEmJgaNjY2YN28eli9fDmdnZ66j9ZkHy93Zs2dx4cIF1NfXQ19fH56ennB3d5eWuwfP+0bIUNLW1oarV69Ky19ycjJycnIgJycHNzc3eHt7w8vLC5MmTRqy5e/WrVvYvXs3du/ejcLCQri6umL27NkICgqifaaHqNbWVpw9exaxsbE4dOgQqqqqMHnyZCxcuBAzZ87s6bNjbAV7TufOnWNeXl4MAHNycmI7duxgjY2NzztZ0k+IRCL2ww8/MAcHBwaA+fr6sosXL3Idq9fcvXuXbdu2jfH5fKaurs4AMAMDAxYcHMy2bNnCsrOzuY5ISL9XXl7OfvnlF/bmm29Klx1ycnJs3LhxLCIigmVkZHAdsU/88ccfbMqUKUxGRobp6+uzd955h2VlZXEdi/QzLS0t7L///S/j8/lMTk6OaWpqsmXLlrHi4uKemsWWZy57WVlZ7KWXXmIA2OTJk9np06d7KhTphyQSCTt16pS02AcGBrLr169zHatHXL16lW3YsIGNGzeO8Xg8pqqqyv75z3+yrVu3spycHK7jETLgdZS/0NBQZmJiwgCwESNGsLfffpudOnWKtbS0cB2xx7S1tbH9+/czFxcXBoD5+/uz2NhY1traynU0MgCUl5ezTZs2MTMzMyYnJ8fmzZvHMjMzn3eyT1/2qqur2WuvvcZkZGTY2LFj2alTp543BBlgTpw4wVxcXJisrCwLDQ1ltbW1XEd6aoWFhezjjz9mFhYWDAAzMjJiS5cuZceOHWNNTU1cxyNk0JJIJCwtLY198skn0kKkqanJFixYwM6ePcskEgnXEZ+JRCJh+/fvZxYWFkxWVpbNnTt3yKzBJD2vtbWV7dmzh40ePZrxeDw2ffp0lpub+6yTe7qy9/vvvzNTU1NmaGjIDhw4MGBflOT5tbe3sz179jB9fX02YsQIFh8fz3WkJ2pqamJ79+5lvr6+jMfjMRMTExYeHs7+/PNP1t7eznU8QoYkgUDANm/ezMaNG8cAMBsbG7Zx40Z2584drqN125UrV9ikSZOYjIwMW7x4MSssLOQ6EhkkJBKJdAWLvLw8e//9959lBUv3yl5bWxt78803GY/HY3PnzmX37t17+sRkUKqsrGSzZs1iPB6PLVu2jLW1tXEd6RECgYCFhYUxbW1tJi8vz2bMmMHi4uKYWCzmOhoh5AFXr15lYWFhTEdHh8nJybHAwEB29uxZrmM9VlNTE1u+fDmTlZVlHh4eLC0tjetIZJASi8Xshx9+YLq6uszAwIAdPnz4aX79yWWvvr6eTZ06lampqbGDBw8+e9InUFVVZQAeufF4PKarq8uCgoJYampqr82fC5s2bZI+ThMTkx4fvy/t27ePqaiosICAANbQ0MB1HMYYY8XFxWzhwoVMXl6ejRgxgkVFRbHy8nJOsnT1/N60aVOvzrO3ni9isZh9//33zMPDg2loaDA5OTlmZGTEpk2bxr799tue3Km4X3rcsqqr244dO7iOOyA1NzezX375RbqPsIeHR7/bZaioqIiNGTOGaWpqsl27dvX5lq78/HwGgI0fP75X5/Pzzz9Ln8+Kioq9Oq/H6eo1x+PxmJaWFhs9ejR74403WHp6OifZ+lpVVRV7/fXXGY/HY++991539wX9+7JXWVnJ3NzcmKGhYZ/8Ia9cucIAsKCgIOmwmpoa9t///pfp6+szeXn5AbG58Gk5Ozs/1Zvx047fV1JSUpienh4bN24cu3//Pmc56urq2Pvvv88UFRWZra0t2717d7/YObqr5/fj1NfXM2trazZ9+vTnnm9PP19eeeUVJiMjw6KiolhpaSlrampiN2/eZKtWrWI8Ho/p6Oj02Lz6q+78L728vKjs9YDk5GQ2ffp0BoD94x//6BcHTZ04cYJpa2szFxcXVlBQwEmGjz76SFp8+uIsAZMnT36k7PXkcupJHn7NicViVl5ezmJjY5mPjw8DwBYtWsREIlGvZ+kP9u3bx1RVVZmnp2d3VmJseezpzsViMYKDg1FTU4Pk5GSMGTPmWc/v8lw0NTXxz3/+E19//TXa2trwzjvvcJKDPNn48eORnJyMiooKzJ07F+3t7X2eIT4+Hk5OTti9eze++uorXL9+HSEhIQPuEkOMMUgkEkgkEq6jdJKWloaff/4ZixcvxocffghTU1MoKSnBysoKGzZswBtvvPHc81BTU4Onp2cPpCWDgYeHB44dO4bExEQIhUK4ubnh888/52T5AgC//fYbgoKCwOfzkZycDGtr6z7PIJFIEBMTIz2P7U8//dTnGQBul1OysrIwMDBAUFAQzpw5gw8//BC7du3CK6+8AvYcpw8eKMufefPmITU1FRUVFfDx8ZFeuelxHlv2PvzwQ6SlpeHIkSP94soXPj4+AP66BFtNTQ3HacjjWFtb48iRI7h48SI+/vjjPpsvYwyff/45pk6divHjxyM7OxtvvfXWgCt5HdTV1VFYWIgTJ05wHaWT7OxsAICdnV2XPw8ODu7LOP3a2bNnsWTJEq5jDBre3t5ITU3F2rVrsXbtWgQEBPT5e8Gff/6JefPmYcmSJdi1a1dPn/i2206dOgU5OTls374dALBnzx6IxeI+z9GfllORkZEYP348jh49igMHDnAdp084ODjg7NmzaG9vR2BgIJqamh47bpdl78yZM/jmm2/w448/wtHRsdeCPo0HmzpdK7B/c3Z2xvfff4+oqCgkJSX1yTzDw8OxZs0abNy4Eb/88gv09fX7ZL5DjYGBAYC/1qB2xcvLC/fu3evLSP3O22+/TVsgeomsrCw++OADJCcnIzc3F15eXqiqquqTeTc0NCA4OBi+vr747rvvOH0f2rlzJxYtWoSxY8di9OjRqKio6BeFi0s8Hg9vv/02AGDr1q0cp+k7xsbGOHbsGG7evInw8PDHjtdl2Vu1ahWmT5+OuXPn9lrAp3X27FkAwKhRo6CpqYnY2FjweDzpLS8vD8HBwdDR0ZEO63jTEQqFWL58OczNzaGgoAA9PT3MnDkTmZmZneYhFovxyy+/wN/fH4aGhlBWVoaTkxOio6M7raZ+eN4lJSWYM2cO1NXVoaOjgwULFqC6uhoCgQB8Ph/q6uowMjLC66+/jvr6+sc+xhs3bmD69OnQ1NSEiooKfHx8cPHixW7/jbr7OPtCSEgI/Pz8sHr16l6f11dffYVvvvkGP//8898+2QeKh59fzc3NXQ4XCASYM2cOtLS0oKOjg4CAABQWFj5x+nv37u00HR6P98RNAB0mTZoEQ0ND/PHHH5g2bRrOnj3brU043Xlufvnll+DxeBCJRLh48aI0m5ycHABg/fr10mEPbmb5/fffpcN1dXUfmR6Px4OpqSnS0tIwefJkqKurP9Pr61l1d1nF1fKnPy03usvV1RXnzp1DTU0NXn755T7ZjLhx40aIRCL89NNPkJF57EaxXldVVYW4uDgsXLgQAPDqq68C+KsAPuhpXy8dbty4gRkzZkBTUxOqqqqYNGlSlx/aH7ec6nD//n289957sLKygoKCArS1tTFt2jQkJiY+99/gcToeZ0pKCtra2gB0/339Scufp5lWX7OxscE333yDrVu34tq1a12P9PBefFevXmUA2Pnz53t8h8In6Wqn59ra2r89QCMoKIgBYF5eXiwxMZGJRCKWkpLCZGVlmVAoZHfv3mVmZmbMwMCAHT9+nNXX17Pr168zLy8vpqSkxJKTk6XTiouLYwDYxo0bWVVVFRMKhWzz5s1MRkaGrVix4pG8HfOeOXMmS09PZw0NDSwmJoYBYNOmTWNBQUHsypUrrL6+nv3www8MAHv33XcfmY6zszPT1NRkPj4+LCkpidXX17O06EkhRQAAIABJREFUtDQ2evRopqCg8MipB7ra4f5pHmdfiY+PZwCe50SQT1RQUMAUFRVZZGRkr82jpzzNARqM/e/59fBJnjuGBwUFseTkZNbQ0MDi4+OZsrIyc3d3f2Q6Dz9fxGIxe++995i/vz+rqqp66sdx4cIFNnz4cOnO4fr6+mz+/Pls//79Xe4c/bTPTVVVVTZx4sTHzv9xPx8zZkyXB4c4OzszVVVV5uHhIf17/d3rqzs6/pePu4WFhT3yO09aVnGx/OmPy42nkZmZyRQUFNi3337bq/MRiURMS0uLbdy4sVfn0x3ffvst8/Hxkd4XCoVMXl6eycnJsYqKikfGf5rXS0FBAdPS0mImJibs1KlTrL6+nl29epVNmTKFmZubd3k0blfLqbKyMmZhYcEMDAxYXFwcq62tZXl5eWzmzJmMx+M904FL3Vl+NjU1SV+Dd+/eZYw9/fv63y1/nnZafUkikTBHR0f26quvdvXjR4/G/fLLL5m+vj4nJ0zuagHacXRfYGBgl6de6XiinThxostpLly4kAFg+/bt6zS8rKyMKSoqsjFjxkiHxcXFMW9v70em8X//939MXl7+kRMZdsz7+PHjnYaPGjWKAWDnzp3rNNzCwoLZ2dk9Mn1nZ2cGgF26dKnT8I7i7ezs/Mj4D5e9p3mcfaW9vZ1pa2v36oL4nXfeYVZWVgPinHk9Xfbi4uI6DZ81axYDwIT/j737jmvqbPsA/ksIBAhh7ylDQZCqgAtB666KBW2lA9uiVu2y+rRV1PZ59H061LZv1ToepbXDPVoXddWtYK0KThBUENkbQhhh5X7/8M15CAQFBQ7j+n4++SQ5OeM6Sc7Jlfs+933n56tNr/99KS4uZuPGjWPz5s17pvdMoVCwX3/9lQUHB3NjCANgZmZmbOfOnWrztvS72RbJHgB27do1telNHV/N8bjP8v33339sstfUuYqP809HPG+01Lx585iLi0ubdox+7NgxJhAIOkRHzz4+PmzLli1q0yZPnswAsG+//bbR/C05XqZOncoAsN9++01temZmJhOLxc1O9sLDwxmARucChULBbG1tmZ6eXou7wWrO+bOiokJjsteS4+pJyV5L1tXevvnmG2ZhYaHpWGjcGvfu3bvw9vbm9XqE4OBgMMa4lj4FBQU4ePAgBgwY0OQyAwcO1Dj9wIEDEAqFCAoKUptubW0NLy8vxMbGIiMjAwAQFBSksYi5b9++qKmp4S5Ob8jPz0/tua2trcbpdnZ2yMrK0rgOXV1dDBo0SG2at7c3bG1tcePGDWRnZ2tcTqUl+9lehEIhvL29kZSU1GbbOHfuHF566SVoaWm12TY6qobHg4ODAwA0+R1LSkrCoEGDIBQKsXr16md6z8RiMd58800cOHAARUVFOHXqFF599VUUFhZi2rRpuHbtGjdvR/huSiQS9OvXT21aS46v1tTUuYqP809H+Gye1SuvvIKUlBSkpaW12TZu3boFe3t77r3ly82bN3Hv3j289NJLatNVVbnP2ir32LFjAIBx48apTbe1tUWvXr2avZ79+/cDACZOnKg2XSwWY9SoUaisrMTx48efKVZNVMextrY2V0X9tMeVJq25rrYwaNAg5Ofna7wsR9RwQnl5OSQSSbsE1po0xVxVVQWZTAbgURcuTbl37x7s7e0hk8nwv//7v9i/fz8yMjIatfSqqKjQuLyhoaHac6FQCC0tLejr66tN19LSarJeX3X9TkOWlpbIyspCXl4ebGxsNC7b0v1sTwYGBigrK2uz9RcWFsLCwqLN1t+RNfysdXR0AEDjd6y4uBghISGwt7fH0aNHsW3bNkybNq1V4hCJRBg5ciRGjhwJJycnrFy5Er/99hv69+/fYb6bxsbGGqc35/hqqXXr1j329abOr+19/ukon82zUjXGKiwsRI8ePdpkG2VlZY3eZz789NNPkMvlTX6H4uPjcfny5Sb/UDxOVVUV5HI5dHV1YWBg0Oh1S0tL3L17t1nrkclk0NXVhVQqbfS6qpFXc68TbgnVtYVDhgzhemJ42uNKk9ZcV1tQfUc1XZvbqGTP3Nwcubm5bR9VOxCLxTA2NoZIJEJNTQ1XWtjwpurWZdKkSfj8888xa9Ys3L17F0qlEowxrFq1CgCeqe+eJ1GddBvKy8sDgMe2Lm3pfrannJwcjRcBtxZnZ2fe/011BiKRCCdPnsTBgwfh7e2NWbNm4cqVKy1eT0xMDHey1kT1HSsuLgbwdN/NJ9UqCIVCVFdXN5r+uG44CgsLNR6/zTm+2kt7n3868nmjJW7fvg2BQNCmXYSp/hTweRF+TU0Ntm/fjpiYGI2fk6oFeMPSveYeL2KxGFKpFAqFQuMf9Oa2ehaLxTAyMoJCodCYdKjyC2tr62atr7mUSiXWr18PAHj//fe56S09rh53/uEzR2iOjIwMCAQCjefoRsmej48Prl+/jvLy8nYJrq1NmTIFtbW1GlvdrVy5Eo6OjqitrUVdXR1iYmJgbW2NDz/8EBYWFtyH/ri+a1pLWVkZbty4oTbt1q1byMrKQt++fZ9Y6tDc/WxPpaWluHXrVpt2yD116lT89ttv7VoN15ZEIhESExNbfb1SqRR2dnYwMDDAoUOHYGBggJCQkBa/b4wx5OXl4dKlSxpfv3r1KgBwnb0CLf9u6uvrq/04ubu7c/2JAYCNjQ0yMzPV1pOTk/PYajyFQtEouW3J8dXW+Dr/dMTzRkswxrB27VqMHj0apqambbYdf39/FBcXc99vPkRFRcHc3Bz+/v4aX585cyYAYOfOnWrfmZYcL+PHjwfw3+pclYKCghZdjjN58mQAwOHDh9WmV1VV4dSpU9DT02tUVfysFi9ejMuXL2Py5MmYOnUqgKc7rpo6//CdIzTHiRMn4Onpqbkmo+FVfPn5+UwsFrPNmzc/y3WCT6WlF7Az1vRF7Cq5ubnM1dWVubi4sCNHjrCSkhJWWFjINm7cyPT19dnu3bu5eUeOHMkAsK+//prl5+eziooKdvr0aebo6MgANNkSuOG2x40bx7S0tBrFMnz4cCaRSBpNV7UWDAgIYJcuXXpia0FNDTRasp/tZcOGDUxPT48VFxe32TbKysqYm5sbGz9+PKupqWmz7bSG5ny/tbS0uNbLT2qg0XB6RESExoYImr4vZ8+eZdra2mzw4MFMoVA0ex8uXLjAADAHBwe2fft2lpmZyRQKBXvw4AH75ptvmI6ODvP19VVbZ0u/my+88AIzMjJiaWlp7OLFi0wkEqkNkfXBBx8wAGzt2rVMLpez+/fvs9DQUGZnZ9dkAw0jIyM2atSoVm+N25rnKj7OPx3xvNESa9euZVpaWm3ealjV0nHatGltup3HCQoKYl9//fVj5xk4cCADwLZt28ZNa8nxcv/+fWZqaqrWGjc+Pp6NGzeOWVpaPnVr3NLSUrXWuJGRkS3e/4bHXF1dHcvNzWUHDhzgjp0ZM2awiooKteVaelw97vzT0nW1p+LiYmZsbMyWL1+u6WXNY+POmDGDOTs7N3lSaguaBjrW1HJV5a+//tLY5YEmhYWF7KOPPmIuLi5MW1ubWVhYsLFjxzb6YPLz89mcOXOYg4MD09bWZlZWViw8PJwtWrSIW7+vr6/GbX/66afsypUrjaYvX76c+4Gsf1u6dGmjgeovX77MRowYwQwMDJienh4bPnw4i46O5uKrP3/97bZ0P9tDeXk5c3BwYO+++26bb+vSpUtMIpGwsLCwDjEGriaavt9N3ZYvX95oWlhYWJPfO8ZYo+kTJ05UG8BcdVu1apXG9YSFhTVrP+rq6lh0dDT75JNP2KBBg5itrS0TiURMKpUyPz8/9tVXX2nsfqUl383ExEQWGBjIJBIJc3BwYOvXr1d7vaSkhL399tvMxsaG6enpsYCAAHblyhXm6+vL7U9ERAQ3vyrZTUhIYOPGjWNSqVTj8dVcmj5LKyurJudv7rmqvc8/T/PZdCRbt25lWlpa7Msvv2yX7e3Zs4cJBIJGrZzbWnp6utpnN2jQoEbzPHjwoMnvZEuPl6SkJBYSEsIMDQ257pz++OMPNmrUKG7+mTNnsv379z/2PFJQUMDmz5/PnJ2dmba2NjMyMmLjxo1jp06davF7oOmYEwgEzMjIiHl7e7N3332XxcbGaly2uceVyuPOPy1dV3uaM2cOs7S0bKpwRXOyl5GRwUxMTNiMGTPaNjrSZb333nvMxMSEZWdnt8v2Tpw4wQwMDNjw4cNb3KSfdG2aSjZJ51VTU8MWL17MBAIBW7RoUbtuOzg4mNna2rKMjIx23S4hj7NlyxYmEAgeVxLfuOsV4FET/W3btuGXX37Bxo0bNc1CSJMiIyPxn//8B5s2bWr1i3CbMnr0aFy8eBEZGRnw8vLCtm3b2mW7hJD2c/PmTQwZMgSrVq3C5s2bsXz58nbd/q+//gpjY2OMHj26y1wnTDq3ffv2YebMmVi4cOFjxyZvcsyXCRMmYNmyZZg7d26jYVgIacrGjRvx3nvv4V//+hd3kWx78fb2xs2bN/H222/jrbfewuDBg3HhwoV2jYEQ0voKCgowb948+Pr6QltbG3FxcVzfcu3JyMgIJ0+eBPCoT7OmGioR0tYYY1ixYgVCQ0MxZ86cJ//xeVLx4IoVKxrV6RPSkFKpZEuXLmUCgUDteiC+XLlyhT3//PMMAHvhhRfa/TqbzgbNuJawI3yuLfGka1wb6orvQWf38OFDNnfuXKavr88cHBzYr7/+2qYjZTSXTCZjkydPZiKRqFMM1dhR0TH3dGQyGXvppZe4718zRjzTfM1eQz/88AMTiUTs5ZdfZnl5ec8eKelScnJyWEhICNPW1mY///wz3+GoOXbsGBs2bBh34ez69evbtHUwIeTZ1NbWsj/++INNmTKFaWtrM0dHR/b99983amXJN6VSyT7//HOmpaXFxo8fz5KSkvgOiXQDe/bsYY6OjszOzo7FxMQ0d7HmJXuMMXbq1Cnm5OTELC0t2e+///50UZIuZ9euXczc3Jw5Ozs/VRcW7eXixYvsrbfeYhKJhOnp6bFp06ax06dP8zIGNCGksXv37rElS5YwOzs7JhAI2IgRI9i2bds6bAt7lfPnz3Pd+CxcuJCVlpbyHRLpgm7cuMGef/55JhAIWHh4eEsL3pqf7DH2qOjw7bffZgKBgIWEhKj1fUW6l1u3brGJEycygUDA3n33XSaXy/kOqVlkMhmLjIxkgwcPZgBYjx492Pz589np06c7fD99hHQ1CQkJbMWKFWzIkCFMIBAwe3t79tlnn7H79+/zHVqL1NbWsvXr1zNTU1NmZWXFVq5cyWQyGd9hkS7g1q1b7I033mBaWlps4MCB7O+//36a1bQs2VP5888/2XPPPce0tLTYjBkzWFpa2tOshnRCqamp7K233mJCoZD5+Piw06dP8x3SU7t9+zZbsmQJ69OnDwPATE1NWVhYGNuzZw/9OyekDdTW1rJz586xjz/+mPXs2ZMBYJaWlmzGjBnsyJEjrLa2lu8Qn0lBQQFbuHAhMzQ0ZEZGRmzhwoUsKyuL77BIJ3Tu3DmuQMXLy4tt3br1WWqini7ZY+xR56pbt25lzs7OTFdXl82aNYvdunXraVdHOrjr16+zGTNmMLFYzFxdXdnOnTu7VBVocnIy++6779iIESOYSCRiYrGYDRs2jC1dupSdPn26w10vREhnUFdXx27cuMHWrFnDJk+ezMzMzBjwqMP8hQsXsujo6A7R4KK1lZSUsBUrVjAbGxsmFovZq6++yo4ePdrpk1nStgoLC9m6deu4Dq8DAgLYoUOHWuO3dr2AsWcbube6uho//fQTVq9ejaSkJIwaNQrz5s3DxIkTIRQ22bML6QTq6upw6NAhfP/99zh79iw8PT0xf/58hIeHQ1tbm+/w2kxRURGOHj2K06dP49y5c0hOToZYLMbAgQMxYsQIDB8+HIMHD4a+vj7foRLSoSiVSty6dQtnz57FuXPncP78eRQWFsLY2BiBgYEYMWIEJkyYAHd3d75DbRdVVVXYsWMHfvrpJ8TExMDOzg5vvPEGwsPD0atXL77DIx1AXV0d/vzzT/zyyy84ePAgRCIRXnrpJcyZM6fJcZCfwoZnTvbqi46OxsqVK3H48GHY2tripZdewtSpUxEQENBamyDtID4+Hnv37sWvv/6KtLQ0jBw5Eh9++CGCgoK4gZ+7k5ycHFy4cAEnT55EdHQ0EhISoKWlBXd3d/j6+nI3Pz8/6Orq8h0uIe0mKysLsbGx3O3ixYsoKiqCVCrFoEGDMHr0aAwdOhSDBg3q0n8QmyMtLQ07d+7Epk2b8ODBA3h6emLSpEkICgrC0KFDu+W5tbuqrKxETEwMoqKisHfvXmRnZ8PX1xezZ8/Ga6+9BqlU2tqbbN1kTyUpKQlbt27F9u3bkZqaij59+iAsLAxTpkyhfzMdVFJSEn7//Xfs2LED8fHxcHFxQVhYGN588024ubnxHV6HkpGRgZiYGFy9ehVXr15FbGws5HI5xGIx+vbtCz8/P/j6+sLb2xuenp6QSCR8h0zIM6mtrUVycjJu376NuLg47rtfVFQEkUgELy8vDBgwAH5+fhg8eDC8vb2pZqcJSqUSZ8+exYEDB3Dw4EGkpaXBwcEBL774IoKCghAYGEjnjC4oPT0dJ06cQFRUFP78808oFAoMHjwYwcHBePnll+Hi4tKWm2+bZE+FMYaLFy9i+/bt2LNnDwoLC9GzZ09MnDgREydOxLBhw6Cjo9NWmyePUVVVhXPnzuHw4cM4fPgwkpOTYWFhgdDQULz++usYMmQI/dNsJqVSiaSkJO4H8MqVK7h+/ToqKyshEAjQo0cPeHl5wcvLC3369IGnpyd69+4NPT09vkMnRI1SqURKSgri4+ORkJCAW7du4c6dO7hz5w6qqqogFArh7u4OPz8/+Pn5YcCAAejXrx99l59BXFwcDh06hIMHD+L69evQ1tbmLhkZMWIE/P39qcagE8rJycGZM2e42/3796Grq4tRo0YhODgYL774IqysrNornLZN9uqrq6vDxYsXueTi9u3bkEqleP755zFs2DAEBgbC19cXIpGoPcLpdmpqahAbG4tz584hOjoaZ8+eRVlZGZ577jlMmDABQUFBGDx4MLS0tPgOtUuoq6tDSkoKbt++jYSEBO4+MTER1dXV0NLSgrOzM3r16gU3Nze4ubnB1dUVbm5u6NGjB/0JIm0qIyMDycnJuH//Pnd///59JCYmcn9SnJycuD8pqlvv3r3pWtU21FSCMHDgQLWbk5MT36GSempqanDz5k1cvnwZly9fxt9//407d+50pMS9/ZK9hlJTU3HkyBGcPn0aFy5cQF5eHgwMDDBkyBAMGzYMAwcOhI+PD8zNzfkIr9PLy8tDXFwcLl++jAsXLuCvv/5CeXk5tLS04OnpienTp+Oll16Co6Mj36F2K7W1tbh37x5XcnLv3j3uBzc/Px8AoKWlBUdHR7UE0MHBAfb29nBycoK1tTUl5eSxCgoKkJmZibS0NKSnpyMlJUUtuausrAQA6Ovrq33PPDw80KdPH/Tu3bstrhsiLZSWloYzZ84gOjoaly9fRkJCAmpra2Fubo7+/fsjICAAffv2RZ8+feDs7ExV5+2gsrKS+wMfFxeHK1eu4Nq1a1AoFDA0NISfnx8GDRrEFWJ1kCp5/pK9hu7cuYPz58/jwoULOH/+PNLT0wEAjo6O8PHxga+vL3x8fODl5QVHR0eqYvx/SqUSDx8+RHx8POLi4rib6v1zcnJCYGAghg0bBmdnZ+zduxfbtm2DSCTC9OnT8cEHH9A1eR2ETCZDcnJyoxKX5ORkZGdno66uDgAgEolgY2MDR0dH2Nvbw97eHg4ODnB0dISNjQ1sbW1hYWFBVWtdUF1dHfLy8pCfn4+MjAzulpaWpvZYlcwBgJmZGZydnbmkTpXYubm5wcbGhse9IS3BGMPx48fxzTff4Ny5c+jVqxcUCgVSU1PBGIO+vj48PT25Ulhvb2/07NkTTk5OVGP2FORyOZKTk5GYmIjbt28jPj4et2/fRkpKCpRKJcRiMby9vbnS1gEDBsDDw6OjJtwdJ9lrSFUyVf/24MEDAI/+jbq7u8PDwwO9e/eGu7s7evXqBUdHR5iamvIcedsoLCxEWloa7t69i8TERO6WlJTEndhdXV3h4+OjdtNUMlpaWoqff/4Za9aswcOHD7t9a9vOoLa2FtnZ2VxJTUZGBtLT09V+5HNyctSWkUqlXOJnZWUFGxsb7rG1tTUsLS1hamoKExMTmJqa0g8CT0pKSlBcXIzCwkLk5+cjLy8Pubm5yMnJUXuseq3+KdvQ0JBL9FWJv5OTE+zs7LjHlPR3bqWlpdi1axfWrVuHW7duca02p02bBn19fcjlcty5cwe3bt3iEpL4+HhkZWUBePTn0MnJCa6urnBxceESfmdnZ9jY2LTndWMdSnV1NXJyctRKvuvf8vLyADx6/3r27Ik+ffqoJdKurq6d6ZzZcZM9TYqLi5GYmIg7d+6oJTwPHjxAbW0tAMDAwACOjo5wcnKCo6MjHB0dYWdnB3Nzc1hYWMDa2hrm5uYd5rqTiooK5OfnIycnBwUFBdw/dtUPeVpaGh4+fIjy8nIAj754zs7O6N27Nzw8PODu7g5PT094eHjA2Ni4RdtWKpU4ffo01qxZg8OHD8PV1RVvv/025syZ0+J1Ef5VVVUhJycH2dnZjZKEnJwctcclJSWNlpdKpVziZ2JiovGxgYEB9PX1IZVKYWRkBH19fejr68PY2BgSiaTbXWtYXFyM8vJyVFRUQC6Xo7S0FBUVFSgvL0dJSQnkcjmKi4tRVFSE4uJijY8bnoL19PRgaWkJGxsbWFpaco9V5y9ra2tYWFjA1tYWhoaGPO05aWuxsbGIjIzE9u3bIRQK8dprr+Gdd95B//79m7V8cXExVzOQnJysltBkZmZy3zsdHR1YWVnBwcEB1tbWsLe355JAMzMzmJqawtTUlHvckbvQKS8vR1FREQoLC7n7/Px85ObmIjMzk0vuVH+kVMRiMZydnblEuH5S7Orq2hXOa50r2WtKdXU1UlJS1BKk1NRUrhQkKytLrVoDACQSCSwsLGBmZgapVAqJRAKJRAJjY2MYGBhwzwHAyMhIrWi2/vO6ujqUlpZyrymVSshkMgCPvnjl5eUoKytDSUkJ91wul3OJXUVFhVpc+vr6sLW15f6t9+jRA46OjtxzZ2fnNvniJSUlYcOGDdi8eTN3Ypk/fz569+7d6tsi/KuqqkJeXt4TExHVY9XzsrIyVFdXN7lebW1tGBgYcImgnp4eNw0AjI2NIRAIoK+vD7FYDJFIxF0b1vA4U82jSVOv1T/+GmKMNUpyS0tLUVdXB4VCgcrKSrXl5XI5amtrUVVVhYqKCu5YVyV0DY/d+gQCAYyNjTUm0I9LqK2srLj3inQ/CoUCUVFRWL16NS5evAgPDw+Eh4dj9uzZMDExadXtPHz4EDk5OcjIyEB2djYyMzORlZXF3efl5XGFDPUZGhpyyZ+enh50dXVhYmICsVgMfX19GBoaQldXl/se6+rqNipdNjQ0VLvuuLKyEgqFQm0emUwGpVLJHbeqeUpKSlBVVYXy8nKUlpaisrKSS+4argMAzM3NYWVlBVtbW9ja2sLOzg42Njawt7eHtbU1HBwcYGNj01GrX1tL10j2mqO8vBx5eXnc9S4FBQXIy8tDUVER5HI5ysrKUF5eDplMBrlczv1bb/gDoekHo+FBWP8HTSKRQCqVciUfqudmZmawsLCAhYUF92W0sLDg/WJOmUyGX375BatXr6YOlYlGtbW1kMvlkMlkXCmW6rhRPS8uLkZFRQWqqqq4ZKn+sVNWVoaamhpUV1dzPyjFxcVq21Gd7DV53GsNf0jqk0qlalUvBgYG0NbWho6ODnfsqY5nVUmlKlkVCoUwMjJS+zOoOq5VP3KGhoaQSCRUdUpaJCkpCT///DN++OEHlJeX48UXX8Ts2bMxevRoXuOqqqriEqn6JWaqx6oErLi4mPvDJJPJoFAouOO6vLy80R/Ehsd6/eNPRXVsAo+OSVXSaGRkBF1dXUgkEhgaGkJPT09jCaTqMf1uAehOyR5pGaVSicOHD+P777/HqVOn4Obmhvfffx8zZ86kkgfSYSiVSmhpaWHv3r14+eWX+Q6HkGarrq7GwYMHERkZiVOnTnGX0cycOZN6oSCtbUOXLrckT08oFGLSpEk4ceIE7ty5g/Hjx2PJkiWws7PDnDlzkJiYyHeIhBDS6SQnJ2PRokWwt7fHa6+9BgA4ePAg7t69i4iICEr0SJugZI88kbu7O9asWYOsrCz8+9//xvHjx+Hl5YUxY8YgKiqq0QXmhBBC/kupVOLkyZMIDQ2Fu7s7tm7dihkzZiAlJQUnTpzApEmTqLqRtClK9kizGRkZYd68eUhJScGBAwcAAMHBwfDw8MCaNWs0XsxLCCHdVXZ2NlauXAkXFxeMGzcOxcXF2LlzJx4+fIgVK1ZQp/ak3VCyR1qsfhVvXFwcnn/+eSxZsgS2traYN28e1x8iIYR0N/VL8ZycnPDdd9/h1Vdfxb1793DixAlMnTq1M/XPRroISvbIM+nXrx82bdrEVfEePHgQbm5uVMVLCOlWSkpKEBkZCW9vb4wZMwYpKSlYt24dUlNTsWLFCri4uPAdIunGKNkjrUJTFe+LL75IVbyEkC4tNjYWc+bMga2tLRYsWICAgADcvHkTV69exezZs6kbHtIhULJHWlX9Kt5r165xVbx2dnaYN28eUlNT+Q6REEKeSWlpKSIjI9G3b1/4+fkhNjYWq1evRlZWFjZt2gRvb2++QyREDSV7pM2oqngzMzPxP//zPzhw4ABcXV2pipcQ0impSvFUf17d3d0RHR3NleLx3Sk+IU2hZI+0OWNjY67hRv0q3t69e1MVLyGkQ1MoFNi7dy/GjBkDPz8/nDt3Dp999hlbeujvAAAgAElEQVQyMzOxZ88eDB06lO8QCXkiSvZIu2nYinf48OFYvHgxVfESQjqcu3fvcp0fT5s2DSYmJlwn8xERETA1NeU7REKajZI9wov+/ftj06ZNSE1NxeLFi7kq3kmTJuHkyZNUxUsIaXfV1dVcKZ6Hhwd+++03LFiwABkZGdizZw9Gjx5NnR+TTomSPcIrS0tLREREcK14FQoFxowZw1XxVlRU8B0iIaSLy8zMxLJly+Dg4IBXX30VALB7924kJSUhIiICFhYWPEdIyLOhZI90CFpaWlwVb2xsLFfFq+qo+eHDh3yHSAjpQhp2fhwZGYnp06dzQ5hNnToVWlpafIdJSKugZI90OD4+PmpVvPv374eLiwtV8RJCnllOTg5WrlwJV1dXjUOYOTk58R0iIa2Okj3SYamqeJOTk7Fr1y6uitfHxweRkZFUxUsIabbo6GiEhobC0dERK1aswNixY3Hr1i2uFE9bW5vvEAlpM5TskQ5PW1sbU6dOxYkTJ3D16lUMHDgQ8+fP51rxUhUvIUQT1RBmffr0QWBgIDeEmarzY09PT75DJKRdULJHOhVfX1+uinfRokXYt2+fWhUvIYTU7/x4wYIFGDp0KK5fv05DmJFui5I90ik1rOItLi6mKl5CujG5XI7IyEj0798ffn5+uHr1KlatWoXMzExs2rQJffv25TtEQnhDyR7p1HR0dDB16lRuyKIBAwZg3rx56NGjBxYtWoS0tDS+QySEtKE7d+5g3rx5XMv9nj17cq36Z8+eDQMDA75DJIR3lOyRLqN+Fe/HH3+M7du3UxUvIV1QVVUV1/mxp6cnjh07hs8++0yt82NCyH9Rske6HCsrK66Kd+fOnSgqKlKr4q2srOQ7RELIU7h3757GIcwSExMREREBMzMzvkMkpEOiZI90Waoq3piYGI1VvOnp6XyHSAh5grq6OkRFRWHMmDFwd3fHtm3bMHPmTCQnJ9MQZoQ0EyV7pFuoX8X70UcfYdu2bXB2dqYqXkI6qKysLKxcuRLOzs4ICQkB8GgIM1Xnx/b29jxHSEjnQcke6VZUVbwpKSlqVby+vr5UxUsIzxoOYbZ69Wq8/vrrSE5OpiHMCHkGlOyRbqlhFa+Xlxc++OADquIlhAe5ublYuXIl3NzcMGbMGGRlZWHHjh1IS0vDihUr0KNHD75DJKRTo2SPdHu+vr7YsmUL0tLSuCpeNzc3hIaGUhUvIW0oNjYWb775JhwcHLB8+XKMGTMGt2/fRnR0NA1hRkgromSPkP9nbW3NVfFu27YNGRkZGDNmDPz8/KiKl5BWIpPJEBkZCW9vb/j5+SEhIUFtCDMvLy++QySky6Fkj5AGVFW8Fy9exNWrV+Hp6YkPPvgAzs7OWLRoETIyMvgOkZBOp/4QZp988gn8/f1x7do1bggzfX19vkMkpMuiZI+Qx6hfxfvOO+/gp59+gqurK0JDQxETE8N3eIR0aAqFAlu2bIGPjw/8/Pxw4cIF/POf/8TDhw+xadMm9OvXj+8QCekWKNkjpBmsra2xbNkypKenY9u2bUhPT0dAQABXxatQKPgOkZAOIzExEYsWLYKtrS1mz54NNzc3nDhxAgkJCYiIiICJiQnfIRLSrVCyR0gLiMViTJ06FX/99ZdaFa+qFS9V8ZLuqv4QZr1798a+ffsQERFBQ5gR0gFQskfIU1JV8T58+BDvvPMONm/ezFXxXrx4ke/wCGkX9+/fx6JFi+Dg4IDXXnsNurq6OHHiBJKSkhAREQFzc3O+QySk26Nkj5BnZGNjg2XLliEjIwM//PAD7t69i6FDh8LPzw9btmxBTU0N3yES0qrq6upw8uRJTJo0Cb169cLWrVsxY8YMPHjwAFFRUTSEGSEdjIAxxvgOgpCuJjY2FmvWrMHOnTthbm6Ot956C3PnzoWdnR3foXVqmzZtQklJCfecMYbFixcjLCwM3t7eavNOnz4dlpaW7R1il5aVlYWtW7diw4YNyMjIwMiRIzF79mxMnjwZIpGI7/AIIZptoGSPkDaUnZ2NTZs2Yf369SgtLUVwcDD+8Y9/YMiQIXyH1inNmjULmzdvho6ODjeNMaZWilRbWwsjIyPk5uZSAtIKlEolTp8+jcjISOzfvx9mZmYIDw/HnDlz4OzszHd4hJAn20DVuIS0IU1VvP7+/lTF+5Ree+01MMZQVVXF3aqrq9WeC4VCvP7665ToPaPi4mKsWbMGPXv2xJgxY5CSkoL169cjNTUVK1asoESPkE6ESvYIaWeaqng//PBD2Nra8h1ah6dUKmFtbY38/PzHzhcTEwN/f/92iqpriY2NRWRkJLZu3QodHR288sormDt3Lvr06cN3aISQp0Mle4S0t/qteOfMmYMff/wRzs7OCA0NxaVLl/gOr0MTCoUICwt77JipNjY2VE3eQqWlpYiMjETfvn3h5+eH2NhYrF69GpmZmdi0aRMleoR0cpTsEcITW1tbLFu2DJmZmfjhhx+QlJSEIUOGUBXvE7z22mtNvjfa2toIDw+nlqDNpBrCzNbWFvPmzUPfvn0RFxfHDWEmkUj4DpEQ0gqoGpeQDiQ6Ohrff/899u/fDwsLC8yePRvvv/8+LCwsmrV8QkICLC0tu3zfZj169MDDhw81vnbz5s1GLXO7qoaNU5pDoVAgKioKa9asQUxMDDw8PBAeHo5Zs2bB1NS0jSIlhPCIqnEJ6UgCAgKwZ88ePHz4ELNnz8a6devg4ODQ7CrepUuXYvDgwUhLS2uHaPnz5ptvaqzKdXNz6zaJXnJyMiZOnIjm/l9PSkrCokWLYGdnhzfeeAO2trZqQ5hRokdI10XJHiEdkKqKNyMjA5GRkUhMTHxiFW9GRgb279+PBw8eYODAgUhISOAh8vbx+uuvN3oPtLW1MX36dJ4ial8XL16Er68vjh49ijNnzjQ5X3V1tdoQZr///jsWLlyI9PR0bggzqvImpOujZI+QDkxXVxdvvvkmbt68iQsXLsDFxQUzZ86Ek5MTli1bhoKCAm7eDRs2QCgUQqlUorCwEIMHD+6yw7Z5eHjAy8tLLVGpqalBaGgoj1G1j/3792PEiBEoKyuDSCTC+vXrG82TkZGBZcuWwcHBAa+++ioA4ODBg7h79y4iIiKafVkAIaRroGv2COlkHjx4gE2bNuGHH35AeXk5QkNDMXfuXIwbNw7FxcXcfFpaWtDW1sa+ffswfvx4HiNuG19//TU+/fRT1NbWQiAQwNfXF1euXOE7rDb1448/Ys6cOQAedUMDPPqc09LSYG1tzXV+vG/fPlhaWuLNN9/Ee++9B0dHRz7DJoTwi0bQIKSzKi8vx5YtW7B27VokJiZCIBBwCYCKUCiEUCjE1q1buRKeriI9PR1OTk5gjEEkEuG7777D3Llz+Q6rTTDGsGzZMvz73/9u9Jq2tjaGDRuGpKQkZGVlYezYsXjnnXcQFBQELS0tHqIlhHQwlOwR0tkxxuDu7o7k5ORGyZ6KQCDAt99+i48++qido2tb/v7+uHTpEgQCATIzM2Ftbc13SK2uuroa4eHh2L17d5Ofr66uLj788EPMmTMHLi4u7RwhIaSDo9a4hHR258+fx71795pMBIBHCeHHH3+MRYsWtWNkbe+NN94AYwzDhw/vkomeXC7HxIkTsWfPnsd+vlVVVRg2bBgleoQQjahkj5BObsqUKfjjjz+a1QmzUCjErFmzuMYcraWyshJyuRylpaWQyWSQyWQoLS3lpsnlcpSUlKC2thZyufyJ98CjBLWkpETj9ioqKlBVVaVx/4yMjDQuI5FIoKOjA+BRSZient4T7yUSCaRSKQwNDSGVSmFiYsI9rn/fFlRVsnfv3n3iZ6ulpYUxY8bg6NGjbRILIaRTo2pcQjqz9PR09OjR47GlPg0JhUJMmTIF27dv55Kf+hQKBXJzc5Gbm4uCggIUFhaioKAABQUFyMvL4x6rppeUlDSZjOjq6sLQ0BCGhoYwMjKCtrY2DAwMuHuRSASpVAotLS0YGho2StakUilEIlGj9aqWB4Bvv/0W7777LiQSCaqrq1FeXq4xFplMxr1PlZWVUCgU3L3qcVVVFSoqKrj1VFRUqCWtTTExMYGJiQksLCxgbm4Oc3NzmJmZwcLCQm2aubk5rK2tm0xIVeLj4zFmzBgUFBQ0eyQVgUCAlJQU9OjRo1nzE0K6DUr2COnMduzYgeXLl6OgoAAymQyVlZWN5hEKhRCJRFwDjtraWu46v5CQEOTm5iInJwcZGRnIzs5GYWGh2vK6urowMzODubk5LC0tYWFhwT03NzeHsbGxWimXkZERjIyMYGho+NgxbFtLRkYG7O3t23w7AFBcXMwlfvWTwOLiYhQVFSE/P18tOc7Pz0d+fj5XWqmir68Pe3t72NjYNLrPzc3FokWLUFlZ2WSHyUKhEFpaWlzpLGMM1dXV+PTTT/HFF1+0+ftACOlUKNkjpCuRyWS4fv06bt++jXv37iElJYVL4goKClBbW8vNKxKJYGBgAD8/P9jZ2cHBwQHW1tZwcHCAlZUVl9ipStDI06uqquJKQ7OyspCTk4P09HS1JDszMxM5OTlqpbSqRF0sFkNfXx9mZmYwMzODlZUVzMzMYGxsDKlUCgMDA0gkEjg7O2PUqFE87ikhpAOiZI+Qzig9PR2JiYm4c+cOEhISuMd5eXncPNbW1nB2doaLi4vavb29Pezs7KCnp8fjHpCGGGO4f/8+ysvLIZPJkJubi5SUFDx48AApKSlISUlBeno6V61rYGCAXr16oXfv3vD09ISHhwc8PT3h6uraLiWqhJBOg5I9QjqykpISxMXFIS4uDvHx8Vxip7p+zNzcHJ6enujduzc8PDzg6urKJXX6+vo8R09aW21tLdLT07nk7+7du0hISMCdO3fw8OFDKJVKaGtro2fPnlwS2L9/f/j4+MDJyYnv8Akh/KBkj5COorCwEHFxcYiNjeUSvOTkZACPSumee+45tcTO09MT5ubmPEdNOoqKigokJSUhMTER8fHxSExM5KrzlUolzMzM4OvrCx8fH+7m6urKd9iEkLZHyR4hfElKSkJ0dDQuXLiA6OhoLrGzt7eHj4+P2g+zra0tz9GSzkoul+P69evcH4jY2FgkJiairq4OpqamGDp0KAICAhAQEAA/Pz+NLbQJIZ0aJXuEtAfGGK5fv45z585xyV1eXh709fUxaNAgBAYGYvDgwfD19YWlpSXf4ZIurqKiAjdu3MDly5cRHR2N6Oho5OTkQE9PDwMHDsSwYcMQEBCAYcOGQVdXl+9wCSHPhpI9QtpKeXk5Tp8+jT/++ANHjhxBRkYGDA0NMXDgQK40JTAwEGKxmO9QCUFWVhZiYmJw8uRJREdH486dO9DV1cXQoUMxevRoBAcHw8PDg+8wCSEtR8keIa0pNTUVe/fuxZEjRxATEwOlUolBgwZhwoQJmDBhAvr16weBQMB3mIQ8UWZmJo4ePYojR47g5MmTkMvl6N27NyZMmIDJkyfD39+fvsuEdA6U7BHyrAoLC7Fnzx5s374dFy9ehKmpKV544QVMnDgRY8eOhZmZGd8hEvJMqqurceHCBRw9ehR//PEHkpKS0KNHD4SFheH111+Hp6cn3yESQppGyR4hT6Ourg4HDhzAL7/8guPHj0NbWxvBwcF4/fXXMW7cOOrnjHRpN27cwPbt27Fz505kZGSgX79+eOONNzB9+nSYmJjwHR4hRB0le4S0RFlZGTZv3ow1a9bg4cOHGDt2LMLCwhASEkIjTZBuR6lU4vz589i+fTv27t2Luro6TJ8+HfPnz4eLiwvf4RFCHqFkj5DmyMvLw3fffYdNmzahpqYG4eHhmD9/Ptzc3PgOjZAOQS6Xc3+E0tPTERISgkWLFsHPz4/v0Ajp7jYI+Y6AkI6spqYGq1evRq9evbBlyxYsXLgQaWlpWLduHSV6hNQjlUoxf/583L9/Hzt27EB6ejoGDhyIGTNmIDc3l+/wCOnWKNkjpAlnzpyBr68vIiIi8NZbbyEpKQmLFy+Gqalpu8VgYGAAgUDQrNuPP/7ILVdXV4eNGzfC398fRkZG0NbWhq2tLSZMmIB169YhNTX1idv59ttvudc9PDzUXgsICGhW/GVlZY3W+9dffz1xuQULFqgt88UXXzTvDXuCXbt2cet8lv7jvv32W2499vb2rRJbV6GlpYXQ0FD8/fffOHjwIM6cOQNXV1csW7YM1dXVfIdHSPfECCFqampqWEREBBMIBCwoKIglJyfzGs+1a9cYABYcHNzkPMOHD2c//PAD9/y1115jQqGQrVy5kqWnp7PKykp2//59tmTJEiYQCJiZmVmLtpOVlcX69evHwsPDWU1NzVPvAwA2fvz4x85bUFDADAwMGAAWFhbW4m01x6hRo5hYLH7m9fTt25fZ2dm1QkRdV0VFBVu6dCnT1dVlfn5+LCUlhe+QCOlu1lPJHiH1yGQyjBgxAhs2bMDOnTsRFRXV6S40v3LlCnbu3ImZM2di4cKFsLe3h66uLlxdXfHll1/i3XffbdH6EhMT4e/vj6CgIPz8888QiURPFZeenh6cnJxw9OhRXL16tcn5Vq1aBQcHh6faRmdkYGDQ7JLSzkhPTw/Lli3DtWvXoFAoMHDgQFy5coXvsAjpVijZI+T/lZeXY/To0Xjw4AEuXbqEV155he+Qmu3s2bN4++23AQDx8fEAAHd3d43zhoaGNnu9MTExGD58OBYvXozPP//8mWIUCoVYtGgRADRZLVtSUoL//Oc/iIiIeKZtkY7Hw8MDf//9NwYMGIBRo0Y9NuEnhLQuSvYI+X/h4eFIS0vDuXPnOk0nsR988AHmz5+vNs3KygoAcOLECY3LDB8+HAUFBU9c9759+xAcHIzNmzdj9uzZzx4sgOnTp8POzg6HDh3CzZs3G73+/fffY8KECXB1dW2V7ZGORV9fHwcOHIC/vz9CQkKQn5/Pd0iEdAuU7BEC4NChQ/j999+xa9euTp9oBAYGwtraGsePH8f48eNx9uxZKJXKFq1j3bp1eO+993DkyBEEBQW1WmxisRgLFiwAYwxffvml2mtlZWVYu3YtlixZ8th1FBYW4qOPPoKrqyt0dHRgYmKC8ePH48yZM43mTUxMREhICIyMjCCRSBAYGIjo6OhG833xxRcaG58cO3aMm25ubt6sfaytrcXu3bsxZswYWFtbQ09PD97e3lizZo3a56Bq5FFeXo6YmBhuOw2ryZuzvwcOHFBr0JKUlITQ0FCYmZlx05qT4LcHHR0d7N69G0KhEIsXL+Y7HEK6B76vGiSkIxg2bBibMmUK32FoVL9xg6bbvHnzGi1z4cIF5uDgwM1jaWnJwsLC2I4dO1h5efljt6NqHPHxxx+36j5IJBLG2KML9q2srJhQKGQJCQncPCtWrGChoaFc/NDQQCM7O5s5OzszKysrFhUVxWQyGUtKSmJTpkxhAoFArZHKvXv3mLGxMbOzs2N//vknk8vl7ObNm2zs2LGsR48eGhtoSCQSNnTo0EbTfX19NTZq0dRAIyoqigFgX331FSsqKmL5+fns+++/Z0KhkH3yySfN3mZL95cxxoKDgxkANnz4cHbmzBlWXl7OLl26xLS0tFh+fr7GbfBly5YtTCQSsby8PL5DIaSrW0/JHun2SktLmVAoZPv27eM7FI0e10r2/fff15jsMcaYQqFgv/76KwsODmZSqZRL/MzMzNjOnTub3I67uzszNDRkANg333zTavugSvYYY2zlypUMAJs2bRpjjLHy8nJmZWXFbty4wRhrOtkLDw9nABrFr1AomK2tLdPT02M5OTmMMcamTp3KALDffvtNbd7MzEwmFovbNNl7/vnnG807bdo0pq2tzWQyWbO22dL9Zey/yd6RI0c0rq8jqaioYLq6umzr1q18h0JIV0etcQnJzMyEUqns9NW3DYnFYrz55ps4cOAAioqKcOrUKbz66qsoLCzEtGnTcO3aNY3LeXh44NixY5BKpViwYAG+++67Vo/tvffeg5mZGXbu3In79+9j06ZNGDx4MJ577rnHLrd//34AwMSJE9Wmi8VijBo1CpWVlTh+/DiAR1WwADBu3Di1eW1tbdGrV6/W2pVGgoKCNFYp9+3bFzU1NVwDmuZoyf7WN3DgwBZG3f709PRgb2+P9PR0vkMhpMujZI90e6qB24uKiniOpOXWrVuH1atXP3E+kUiEkSNHYufOnYiIiEBdXR1+++23JucfMmQIjh49CgMDA3z88cfN2kZLGBgYYP78+airq8PSpUvx7bff4rPPPnvsMlVVVZDJZNDV1YVUKm30uqphSk5ODqqqqiCXy6Grq6txzGJLS8vW2RENZDIZ/vWvf8Hb2xsmJibcNXMLFiwAAFRUVDRrPS3Z34YkEskz7EH7YIyhqKiIO/4IIW2Hkj3S7VlaWsLV1RVHjx7lO5RWERMTwyUCmowYMQIAUFxc/Nj1DB06FEeOHIFEIsE//vEPrF27tlXjnDt3LoyMjLBjxw707dv3iWOoisViGBkZQaFQQC6XN3pdNSSXtbU1xGIxpFIpFAoFysrKGs3bVGIvFAo1jvJQUlLSnF0CAEyaNAmff/45Zs2ahbt370KpVIIxhlWrVgF4lOTUJxAINK6nJfvbGf31118oKiqCv78/36EQ0uVRske6PYFAgJkzZ2Ljxo3Izs7mO5xnxhhDXl4eLl26pPF1Vf9m/fv3f+K6AgMDcfjwYejr6+PDDz/E+vXrWy1OIyMjfPTRRzAyMnpiqZ7K5MmTAQCHDx9Wm15VVYVTp05BT0+Pq7YdP348gP9W56oUFBQgKSlJ4/ptbGyQmZmpNi0nJwdpaWnNiq+urg4xMTGwtrbGhx9+CAsLCy6Zq6ys1LiMvr6+WoLp7u6OyMjIFu9vZ7N06VIMGjToiVX3hJBWwO81g4R0DBUVFczV1ZU9//zzrLq6mu9w1DRnuLT6VI0bHBwc2Pbt21lmZiZTKBTswYMH7JtvvmE6OjrM19eXKRSKZm/n9OnTTE9PjwFg69evf6p9qN9Ao7n78KTWuKWlpWqtUyMjI7l579+/z0xNTdVa48bHx7Nx48YxS0tLjQ00PvjgAwaArV27lsnlcnb//n0WGhrK7Ozsmt1AY+TIkQwA+/rrr1l+fj6rqKhgp0+fZo6OjgwAO3HihNr8L7zwAjMyMmJpaWns4sWLTCQSca2UW7K/jP23gUZlZWWz32s+rFy5kolEInbp0iW+QyGkO6DWuISo3Lx5k0mlUhYSEtIoEeKLRCJp1NWKlZXVY5epq6tj0dHR7JNPPmGDBg1itra2TCQSMalUyvz8/NhXX33VqPsVTdtp2BL35MmTXMIHgH3++edPtQ/jxo177PwN41AlXyoFBQVs/vz5zNnZmWlrazMjIyM2btw4durUqUbrSkpKYiEhIczQ0JDp6emxAQMGsD/++IONGjWKW/fMmTO5+UtKStjbb7/NbGxsmJ6eHgsICGBXrlxhvr6+3PwRERHsm2++aRTjp59+yhhjLD8/n82ZM4c5ODgwbW1tZmVlxcLDw9miRYu4eX19fbltJiYmssDAQCaRSJiDg0OjZLo5+/vXX39pfN86og0bNjChUMhWr17NdyiEdBfrBYw1uICEkG4sJiYGQUFB8Pb2xq5du2Bra8t3SIR0CTU1NVi8eDG+++47fP755/j000/5DomQ7mIDXbNHSD1Dhw7FhQsXkJ+fj/79+2PLli2NLqgnhLRMXFwcAgICsHHjRvz666+U6BHSzijZI6SBPn364MqVK3j55ZcxY8YMBAQEIC4uju+wCOl0CgsL8c4772DAgAHQ0dHB5cuX8cYbb/AdFiHdDiV7hGhgYGCA9evX4+rVqxAKhRgwYABmzpzZZCvO7qj+WKxN3ZYtW8Z3mIQHMpkM33zzDXr16oWoqChs2bIF58+fh6enJ9+hEdIt0TV7hDwBYww7duzAsmXLkJKSggkTJuCjjz7i+qsjhDySmpqKNWvWYPPmzRAIBHjvvfewZMkSjZ1CE0LaDV2zR8iTCAQChIWFISkpCb///jtkMhlGjhwJX19f/Pjjjy3qcJeQrqa2thbHjh1DaGgo3NzcsG/fPixduhRpaWlYvnw5JXqEdABUskfIU7hy5QpWrVqF/fv3gzGGCRMmICwsDBMnToSuri7f4RHS5v7++2/s2LEDu3fvRm5uLvz9/TF37ly8/PLLEIlEfIdHCPmvDZTsEfIMZDIZ9u3bh+3bt+PMmTMwNDTElClTMGnSJIwePVrjuKyEdEZ1dXW4fPkyDh8+jN27d+P+/ftwd3fH66+/jrCwMLi6uvIdIiFEM0r2CGktWVlZ2LVrF3bv3o2rV69CJBJh2LBhGD9+PCZMmAAPDw++QySkRQoKCnD8+HEcOXIEx48fR2FhIZycnDB58mSEhYU9cTxjQkiHQMkeIW0hPz8fx44dw5EjR/Dnn3+iqKgILi4uGDVqFAIDAxEYGIgePXrwHSYhakpKShATE4Po6GicPXsWV65cgZaWFgICArg/LdSilpBOh5I9QtpaXV0dLl26hKNHj+Ls2bO4evUqqqqqYG9vj8DAQAQEBCAwMBBeXl4QCqnNFGk/WVlZuHDhAqKjo3H+/Hncvn0bjDF4eHhg2LBhGDt2LMaMGUONLAjp3CjZI6S91dbW4saNG4iOjkZMTAxOnjyJ4uJiSKVSPPfcc/D19YWXlxc8PT0xcOBA6Ojo8B0y6QKysrIQGxuLhIQExMfHc4+1tLTg7u6OgIAAjB49Gs8//zwsLCz4DpcQ0noo2SOEb3V1dbh58yb+/vtvxMXFIS4uDrdu3UJ1dTX09fXRt29f+Pj44LnnnkPv3r3h6ekJMzMzvsMmHVRlZSUSExORmJiIW7du4dq1a4iLi0NeXh4EAgFcXV3h4+MDHx8f+Pn5YdCgQdSQiJCujZI9Qjqimpoa3L59m0v+4uLiEB8fD7lcDgCwsLCAl5cXPDw80A+jiIsAAA6USURBVLt3b/Tu3RseHh6wt7eHQCDgOXrSHoqLi3H37l3Ex8cjMTERCQkJuHPnDlJTU6FUKqGtrY2ePXuif//+XHLXv39/GBkZ8R06IaR9UbJHSGdSXFyM+Ph4ripOdZ+dnQ0A0NHRgb29PVxcXBrdXF1dYWxszPMekOaqqalBeno6UlJSNN6Ki4sBPPrM3dzc4OXlBRcXF3h6esLLywteXl7U5yMhBKBkj5CuoaCgAHfu3EFKSgoePHigdp+dnQ3VYW5qago7Ozs4ODjAxsYG9vb2sLW1ha2tLezt7WFjYwMrKyue96brKysrQ3p6OrKzs5GZmYnMzExkZWUhIyMD2dnZ3GtKpRIAYGJiAmdnZ7i4uMDZ2Zm79erVCz169KCGPYSQx6Fkj5CuTqFQIDU1lUsA6ycXqgSjtLSUm19HRwdWVlawtLSEhYUFzM3NYWZmBnNzc5ibm8PS0lJtmrGxMcRiMY97yC+lUomSkhIUFBSgsLBQ7T4vLw8FBQVq07KyslBWVsYtr6ur2yjhdnBwgKOjI5fcUYksIeQZULJHCAHKy8uRnp6OnJwcZGRkICcnR2OiUlBQgKKiokbL6+jowNDQEIaGhjAxMYFUKuWeqx6bmJhAS0sLhoaGEAqFMDIygkAg4BIZExMTtXsAEIvF0NfX17g9iUTSaHpNTY1aItXU9LKyMtTU1KC8vBzV1dXcfUVFBaqqqlBZWQmFQoGysjLI5XKUlpaitLQUMpkMJSUlatPKy8sbbU8ikcDMzIxLjOsnxzY2NlxCZ21tTS1fCSFtjZI9QkjL1NbWqpVgyWQyLvEpLS1FSUkJ97h+UlRSUsKVgjHGUFJSwveuNKKvr88lmGKxGAYGBmpJq5GREYyNjRsls8bGxlwyZ2ZmBj09Pb53hRBCVCjZI4TwR5X0NbxXUZXANaQqgWuofklhQ/VLDCUSCVc6qKOjwyV3hBDSBW0Q8R0BIaT7EggEXBJmamrKczSEENI1URMuQgghhJAujJI9QgghhJAujJI9QgghhJAujJI9QgghhJAujJI9QppQVlYGgUCgdvvrr7+euNyCBQvUlvniiy8azXPkyBH06tULIlHTbaQ2btzYaPsNb+PHj2/xft27dw8CgQCDBw9u8bItsWvXLi7O9hq2q1+/fk98z5702RBCSFdDyR4hTTAwMABjDNeuXeOmff75549dprCwEBs3bgQAhIWFgTGGzz77jHs9OTkZL774IhYvXozc3NxnjtHf37/Fy/z8888AgL///hsJCQnPHENTXn31VTDGMGrUqEavlZWVoWfPnggKCmr17e7duxeMMe42Z84cAMDRo0fVpr/yyiutvu3OoC3fez62Qwh5Mkr2CGkGPT09ODk54ejRo7h69WqT861atQoODg5Nvv7Pf/4T/v7+iI2NhVQqfeJ2g4OD1RIU1e3u3bsQi8WYNWtWi/ZDqVRiy5Yt6N+/P4D/Jn7tjTEGpVLJjf1K2k97vff0GRPScVA/e4Q0g1AoxKJFi/Duu+/iiy++wIEDBxrNU1JSgv/85z/47rvvEB4ernE9mzdvbvboCm5ubggMDNT42tq1axESEgJra+tm7wMA/PnnnxCJRIiMjMSAAQOwdetWLF++/LHVyW1BKpUiOTm51dd7/fr1Zs+7a9euVt9+Z9BW7z1f2yGEPBmV7BHSTNOnT4ednR0OHTqEmzdvNnr9+++/x4QJE+Dq6trkOloyjNbo0aPx8ccfN5oul8vx66+/4r333mv2ulR++uknhIeHw8/PD8899xxyc3Nx5MiRFq+HEEJI50HJHiHNJBaLsWDBAjDG8OWXX6q9VlZWhrVr12LJkiVtHsfPP/8MR0dHDBs2rEXLFRUVISoqCm+99RaAR8kr8CgBrO+LL77gGjAEBARw048dO8ZNNzc3b7T+xMREhISEwMjICBKJBIGBgYiOjm4034EDB9QaSSgUCrXXCwsL8dFHH8HV1RU6OjowMTHB+PHjcebMmRbtb3M0jCUpKQmhoaEwMzPjphUUFKC2tha7d+/GmDFjYG1tDT09PXh7e2PNmjVq1ZQN15eamopXXnmFGzs3KCioUWlXVVUV/vWvf8HDwwP6+vowNTXFpEmTcOjQIdTV1Wlc78OHD/HKK69AKpXCzMwMb7zxBoqLi5GamopJkyZBKpXCxsYGs2bNglwub9Z735w4njbep/mMn+a9JIQ0gRFCHuvatWtMIpEwxhirqKhgVlZWTCgUsoSEBG6eFStWsNDQUMYYYxcuXGAAWFhY2GPXa2dnx7S0tFoUi1KpZL169WIbNmxo4V4wtnbtWjZixAjueX5+PtPW1mYikYjl5uY2ml8ikbChQ4c2mu7r68vMzMzUpt27d48ZGxszOzs79ueffzK5XM5u3rzJxo4dy3r06MHEYnGj9QQHBzMArLKykpuWnZ3NnJ2dmZWVFYuKimIymYwlJSWxKVOmMIFAwH744YcW7/ecOXMYAHb06NEm51HFMnz4cHbmzBlWXl7OLl26xLS0tFh+fj6LiopiANhXX33FioqK/q+9uwuJamvjAP5XzzSOX7vsY9LoYiCMPoVMk4iQpDSsTKubsJC0jKKawigQ9CJIKimyfCmChIHy4o0M1ChNpAstMqgEI+0LCm1IiZlmUifR5714mcF9ZtuZDz2nM/x/MBf7mbXXPHttwYdZe62RgYEBqa6ulvDwcCktLZ20v9zcXOno6BCn0yktLS1iMBgkNTVV1ba4uFgURZHm5mYZGhoSq9UqpaWlAkDa2to0+83Pz5fnz5+L0+kUi8UiAGTz5s2Sm5srL168EIfDIdeuXRMAcvz48Unzmzj2vuYRSL7B3GN/xpKINNWw2CP6CxOLPRGRc+fOCQApKCgQEZEfP36I0WiUV69eicj0FntNTU0SGxsrDofDz6sQWbVqlVgsFlUsLy9PAEhVVZVXe3+KvV27dgkAuXPnjire19cner3e52KvsLBQAEhdXZ2q7cjIiCQmJorBYBCr1frXFzuBP8Xe/fv3Nd9vaGiQjIwMr3hBQYHodDqx2+2a/TU0NKjiO3fuFAAyMDDgiZlMJlm7dq1X30lJSZMWT01NTar4smXLBIA8fvxYFTeZTLJ48eJJr3fi2PuaRyD5BnOP/RlLItJUw2lcIj8dOnQIs2fPRl1dHd69e4fr168jPT0dK1eunPbPrq6uxt69exETE+PXeV1dXXj79i127NihiruncoNdlfvgwQMAQFZWliqemJiIpKQkn/upr68HAOTk5Kjier0emZmZGB4exsOHD4PK9VfS0tI041u2bNGcRk5OTsbo6Ci6u7s1z0tNTVUdu1dq9/f3e2LZ2dno6OjAgQMH8PTpU89UaE9PDzIyMjT7Xb16teo4MTFRM75gwQLVZ/2Kr3kEku9Egd5jX8aSiLSx2CPyU0xMDMxmM8bGxlBRUYGqqirVXnrTpbe3F83NzQEvzHA4HIiOjlY9B7Vt2zYAQHd3N549exZQXi6XCw6HA5GRkZpF6Lx583zux263IzIyUnNbGqPRCACwWq0B5emL6Ohozbjdbkd5eTlWrFiBWbNmecbv5MmTAIChoSHN8xRFUR3PmDEDAFTP+dXU1MBiseDDhw/IzMxEXFwcsrOzPUWRlri4ONVxeHg4IiIiEBUVpYpHRET4vPWJr3kEkq9bMPfYl7EkIm0s9ogCcOTIESiKgtu3byM5OdnrG5XpUF1djfXr12Pp0qV+nTc6Oopbt26hvb1dc88+s9kMwPvbvfDwcPz8+dOrP5vNpjrW6/WIjY3FyMgInE6nV/tv3775lKder4eiKBgZGVEtKnBzb0Lt73YzU2Hr1q04c+YM9u/fj97eXoyPj0NEcOnSJQD/31MuUGFhYdizZw8ePXoEm82Ge/fuQUSQn5+PixcvTtUlTFkeweT7O99jolDGYo8oAIqi4MSJE1AU5W/5Vu/79++wWCw4fPiw3+c2NDRgzpw5k/7aRlFREQCgrq4Ow8PDnnhCQgL6+vpUba1WKz59+uTVh/tn29zTuW6Dg4Po6enxOde8vDwAQFNTkyrucrnQ2toKg8HgNVU83cbGxtDe3o758+fj6NGjmDt3LsLCwgBANV6BmjlzJt68eQMA0Ol02Lhxo2cl6p/HYTr5mkew+f6O95go1LHYIwpQeXk5bDZbQD9Z5q+bN28iJibG84/SH7W1tdi3b9+k7y9fvhxpaWmw2+24e/euJ75p0yb09/fj6tWrcDqdeP/+PY4dO6Y5LXv27FnEx8fDbDajpaUFTqcTr1+/RkFBgV/PF1ZWVsJkMsFsNqOxsREOhwO9vb3YvXs3vnz5gsuXL3um+v4uERERyMjIgNVqxYULFzA4OIjh4WG0tbV5fhovWAcPHkRXVxdcLhe+fv2K8+fPQ0SwYcOGKel/qvMIJt/f8R4Thbx/ZF0I0b9EdHS0APC8srKyftl+Ylv368qVK5733Vt4aL0m21ZkfHxcFi1aJOXl5X7l/vnzZ1X/a9as8Wrz8eNHrzyMRqOIiNhsNikuLpaEhAQxGAyybt066ezslJSUFE/bU6dOefrq6emR7du3S1xcnGdbjMbGRsnMzPS0Lyoqkvr6eq/PnLhyeXBwUMxms5hMJtHpdKIoimRlZUlra6tf119bW6s5zhNXMj958kSzzZ8NDAxISUmJLFy4UHQ6nRiNRiksLJTTp097zklJSdHsr6ysTES8/zZycnJEROTly5dSUlIiS5YskaioKImPj5f09HS5ceOGjI+PT5pnWVmZdHZ2esUrKys9K8InvioqKn459r7k4Wu7qbjHgYwlEWmqCRMJ4mETIiIiIvqd/YfTuEREREQhjMUeERERUQhjsUdEREQUwljsEREREYUwFntEREREIYzFHhEREVEIY7FHREREFMJY7BERERGFMBZ7RERERCGMxR4RERFRCGOxR0RERBTCWOwRERERhTAWe0REREQhjMUeERERUQj7A8B//+kkiIiIiGhavPgf9eqnx0893rYAAAAASUVORK5CYII=\n",
"text/plain": [
""
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"g2 = \"\"\"digraph top {\n",
" label = \"M17 Audio Transmission\";\n",
" \n",
" Transmit -> Preamble [label=\"1\"];\n",
" Transmit -> Link_Setup_Frame [label=\"2\"];\n",
" Transmit -> Audio_Data [label=\"3..n\"];\n",
" Preamble -> FSK_Modulator;\n",
" Link_Setup_Frame -> FSK_Modulator;\n",
" Audio_Data -> FSK_Modulator;\n",
"}\"\"\"\n",
"\n",
"draw(g2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Preamble\n",
"\n",
"The preamble is the easiest place to start with the modulator. It will\n",
"allow us to build up the core 4-FSK baseband modulator.\n",
"\n",
"The preamble consists of alternating +3,-3 (01,11) symbols. The specification\n",
"defines this as 40ms in duration, which is equivalent to 192 symbols or 384\n",
"bits. This is also equivalent to 48 bytes of 0x77. We are going to start by\n",
"creating a preamble based on bytes.\n",
"\n",
"We will then convert bytes to two-bit values (or dibits) with the values 0\n",
"through 3, and then map those values to the 4-FSK symbols [-3, -1, 1, 3].\n",
"We will feed in 48 bytes and get back 192 4-FSK symbols."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ 3 -3 3 -3 3 -3 3 -3 3 -3 3 -3 3 -3 3 -3 3 -3 3 -3 3 -3 3 -3\n",
" 3 -3 3 -3 3 -3 3 -3 3 -3 3 -3 3 -3 3 -3 3 -3 3 -3 3 -3 3 -3\n",
" 3 -3 3 -3 3 -3 3 -3 3 -3 3 -3 3 -3 3 -3 3 -3 3 -3 3 -3 3 -3\n",
" 3 -3 3 -3 3 -3 3 -3 3 -3 3 -3 3 -3 3 -3 3 -3 3 -3 3 -3 3 -3\n",
" 3 -3 3 -3 3 -3 3 -3 3 -3 3 -3 3 -3 3 -3 3 -3 3 -3 3 -3 3 -3\n",
" 3 -3 3 -3 3 -3 3 -3 3 -3 3 -3 3 -3 3 -3 3 -3 3 -3 3 -3 3 -3\n",
" 3 -3 3 -3 3 -3 3 -3 3 -3 3 -3 3 -3 3 -3 3 -3 3 -3 3 -3 3 -3\n",
" 3 -3 3 -3 3 -3 3 -3 3 -3 3 -3 3 -3 3 -3 3 -3 3 -3 3 -3 3 -3]\n"
]
}
],
"source": [
"def to_4fsk(symbol):\n",
" \"\"\"Convert a pair of bits to a 4-FSK symbol.\"\"\"\n",
" if symbol == 0: return 1\n",
" elif symbol == 1: return 3\n",
" elif symbol == 2: return -1\n",
" elif symbol == 3: return -3\n",
" else: raise ValueError(\"not a value 4-FSK symbol\")\n",
" \n",
"def binary_to_symbols(bits):\n",
" \"\"\"Return an array of binary symbols (bit pairs) to 4-FSK symbols.\"\"\"\n",
" return np.array([to_4fsk(x) for x in bits], dtype=np.int8)\n",
"\n",
"def byte_to_symbols(data):\n",
" \"\"\"Convert byte to big endian symbol stream.\"\"\"\n",
" result = np.zeros(4, dtype=np.uint8)\n",
" for i in range(4):\n",
" result[i] = (data & 0xC0) >> 6\n",
" data = data << 2\n",
" return result\n",
" \n",
"def bytes_to_symbols(data):\n",
" binary_symbols = np.concatenate(np.array([byte_to_symbols(x) for x in data]))\n",
" return binary_to_symbols(binary_symbols)\n",
"\n",
"preamble_bytes = np.array([0x77]*48, dtype=np.uint8)\n",
"preamble_symbols = bytes_to_symbols(preamble_bytes)\n",
"print(preamble_symbols)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Filtering\n",
"\n",
"We now have 192 4-FSK symbols. These symbols need to be filtered with\n",
"a root raised cosine filter ($\\alpha=0.5$). Let's discuss what we need\n",
"from this filter.\n",
"\n",
"We are going to want to output a signed 16-bit, 48kHz signal. We can feed\n",
"such a signal into an sound card or DAC. And we would like to stay in the\n",
"integer domain, avoiding floating point if possible.\n",
"\n",
"We need to take our 4800 symbols per second radio and up-convert it by 10x. \n",
"We want our output to be in the range 32767 to -32768.\n",
"\n",
"See also:\n",
"\n",
" * https://stackoverflow.com/a/28951239/854133\n",
" * https://www.analog.com/media/en/technical-documentation/application-notes/AN-922.pdf\n",
" * https://gist.github.com/philpem/b24bfb98f1fd39e856ea794a3f9f36e6\n",
" * http://commpy.readthedocs.org/en/latest/generated/commpy.filters.rrcosfilter.html\n",
"\n",
"Note that after upgrading scikit-commpy to 0.5.0, RRC is a bit broken.\n",
"The filter coefficients are no longer symmetric and requesting an even\n",
"number of taps will result in no error, but can result a very bad\n",
"filter response.\n",
"\n",
"### Upsampling / Interpolation\n",
"\n",
"We need to increase the sample rate from 4800 symbols per second to\n",
"48000 samples per second, a 10x increase. We can do this one of two\n",
"ways.\n",
"\n",
" 1. Insert n-1 0s between each symbol\n",
" 1. Replicate the symbol n times\n",
"\n",
"The result after filtering will be the same, with just a different\n",
"gain. We are going to use the second method."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"def upsample(input, n, gain = 1):\n",
" \"\"\"Upsample (interpolate) the input by the 'n'. This does\n",
" nothing more that duplicate each symbol n times. It can\n",
" also provide a gain factor.\"\"\"\n",
" \n",
" return np.concatenate([np.array([x] * n, dtype = input.dtype) for x in input]) * gain"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Filter Coefficients\n",
"\n",
"We are now going to generate the filter coefficients. These coefficients\n",
"are going to be scaled so that we produce a 16-bit values suitable for\n",
"audio (WAV format) output."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"