tag:blogger.com,1999:blog-57492570855434718462024-03-13T15:15:37.401+11:00Nick D'AdemoUnknownnoreply@blogger.comBlogger11125tag:blogger.com,1999:blog-5749257085543471846.post-27457188298124974112017-02-17T10:18:00.002+11:002020-07-28T15:22:06.508+10:00Altium Unified Components - Catch 'Em All!Until recently, the <a href="http://www.altium.com/altium-designer" target="_blank">Altium Designer</a> "official" component libraries (known as "<a href="https://designcontent.live.altium.com/UnifiedComponents" target="_blank">Unified Components</a>") were only available to Altium subscribers - they are now however available to anyone by filling out a short survey (no registration or subscription required). After doing this, you receive an email with a download link. This process gets old and tedious very quickly every time you need a new component library... Yes, that's right: Altium does not offer a single download for <b>all </b>the libraries! So I decided to take matters into my own hands and wrote a Python script that uses some XPath and <a href="http://www.seleniumhq.org/" target="_blank">Selenium </a>magic to automatically download all 578 libraries in less than 5 minutes :) <i>This script actually relies on the fact that the library download links are contained in the page source! Thanks Altium!</i><br />
<br />
<div style="text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXDHtZYRo7hfTxZwqStahe31GSW5-NAQ2D1hT9QqAhunvG4ib4-r2bowQ0UiPM1REZsfynRpnJK4nAqC9tt3YUumcBhDBuPh_oT4OxOKTiIU_0AN66aBdmzk0JaQFuBuoytP3exdy7_ziJ/s1600/index.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="111" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXDHtZYRo7hfTxZwqStahe31GSW5-NAQ2D1hT9QqAhunvG4ib4-r2bowQ0UiPM1REZsfynRpnJK4nAqC9tt3YUumcBhDBuPh_oT4OxOKTiIU_0AN66aBdmzk0JaQFuBuoytP3exdy7_ziJ/s320/index.png" width="320" /></a></div>
<b>Requirements:</b><br />
<ul>
<li><a href="https://www.python.org/" target="_blank">Python 3.4.4</a></li>
<li><a href="http://phantomjs.org/" target="_blank">PhantomJS 2.1.1</a></li>
<li><a href="http://www.seleniumhq.org/" target="_blank">Selenium 3.0.2</a></li>
</ul>
<b>Usage (Windows):</b><br />
1. <a href="https://www.python.org/downloads/windows/" target="_blank">Download</a> and install Python. <br />
2. Install Selenium:<br />
<pre><code class='bash'>pip install selenium</code></pre>
3. Download the <a href="https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-windows.zip" target="_blank">PhantomJS pre-built executable</a> and place in the same directory as script.<br />
4. Run Python script:<br />
<pre><code class='bash'>python download_all_altium_unified_components.py</code></pre>
<ul>
</ul>
<br />
I am of course providing the script source for educational purposes only... :)<br />
Any suggestions or feedback on this script are welcome too.<br />
<br />
<a href="https://drive.google.com/file/d/1iGJhT3Djl_puJ39euJnOZbvQOjSWXVvd/view?usp=sharing"><b>download_all_altium_unified_components.py</b></a><br />
<br />
<pre><code class='python'>from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import re
import concurrent.futures
import urllib.request
import urllib.parse
import posixpath
import os
BASE_URL = "https://designcontent.live.altium.com/"
START_URL = BASE_URL + "UnifiedComponents/"
PAGE_LOAD_WAIT_S = 20
DOWNLOAD_TIMEOUT_S = 60
MAX_DOWNLOAD_WORKERS = 8
def wait_for_page_to_load(driver, timeout_s):
WebDriverWait(driver, timeout_s).until(EC.presence_of_element_located((By.ID, "xUCS_frmItemsView")))
def get_next_page_url(driver):
try:
link = driver.find_element_by_xpath("//div[@id='xUCS_frmItemsView']//div[@id='UCS_frmItemsView_TextLabel2']/div/div[1]/following-sibling::a[1][@class='HijaxLink']")
return BASE_URL + link.get_attribute("href").replace(START_URL, "")
except:
return ""
def get_content_urls(driver):
divs = driver.find_elements_by_xpath("//div[contains(@id, 'UCS_frmItemsView_Fields') and @id!='UCS_frmItemsView_FieldsPopup']")
return [re.search('ZipURL`(.*\.zip)`[\S+\n\r\s]+', div.get_attribute("title")).group(1) for div in divs]
def download(url, timeout):
with urllib.request.urlopen(url, timeout=timeout) as conn:
return conn.read()
# Start WebDriver (choose one!)
print("Starting WebDriver...")
#driver = webdriver.Firefox()
driver = webdriver.PhantomJS(service_args=['--load-images=no'])
print("WebDriver started.")
# Open page
driver.get(START_URL)
# Wait for page to load
wait_for_page_to_load(driver, PAGE_LOAD_WAIT_S)
# Get URLs
urls_all = list()
urls = get_content_urls(driver)
urls_all += urls
print("%r: ZIP download links retrieved from page: %d (Total: %d)" % (driver.current_url, len(urls), len(urls_all)))
# Do remaining pages
next_page_url = get_next_page_url(driver)
while next_page_url != "":
# Open page
driver.get(next_page_url)
# Wait for page to load
wait_for_page_to_load(driver, PAGE_LOAD_WAIT_S)
# Get URLs
urls = get_content_urls(driver);
urls_all += urls
print("%r: ZIP download links retrieved from page: %d (Total: %d)" % (driver.current_url, len(urls), len(urls_all)))
# Get next page URL (if any)
next_page_url = get_next_page_url(driver)
# Quit WebDriver
driver.quit()
# Write URLs to file
urls_file = open('altium_unified_components_urls.txt', 'w')
for url in urls_all:
urls_file.write("%s\n" % url)
urls_file.close()
# Download all URLs
error_count = 0
print("%d files will be downloaded..." % len(urls_all))
with concurrent.futures.ThreadPoolExecutor(max_workers=MAX_DOWNLOAD_WORKERS) as executor:
# Start the download operations and mark each future with its URL
future_to_url = {executor.submit(download, url, DOWNLOAD_TIMEOUT_S): url for url in urls_all}
for future in concurrent.futures.as_completed(future_to_url):
url = future_to_url[future]
try:
data = future.result()
print('%r file is %d bytes' % (url, len(data)))
# Get filename from URL
path = urllib.parse.urlsplit(url).path
filename = urllib.parse.unquote(posixpath.basename(path))
# Save file
savepath = "download/" + filename
os.makedirs(os.path.dirname(savepath), exist_ok=True)
with open(savepath, "wb") as file:
file.write(data)
except Exception as e:
print('%r generated an exception: %s' % (url, e))
error_count += 1
# Done!
if error_count == 0:
print("Finished successfully.")
else:
print("Finished with %d error(s)." % error_count)
</code></pre>
<br />
<b>Update 1 (June 25 2017):</b><br />
Download <a href="https://drive.google.com/open?id=0B5ePPdvtw5M2eFU2MGZxSk0xZ2M" target="_blank">link</a> for Unified Components archive as obtained from the above script. Enjoy!<br />
<br />
<b>Update 2 (December 9 2017):</b><br />
14 new libraries have since been added by Altium bringing the total to 592 (updated library archive <a href="https://drive.google.com/open?id=1Q2lp3Y3-LWjU178_js4qmu415LZkO6Qw" target="_blank">download link</a>). New libraries:<br />
<i>TE_Connectivity_ D-Shaped_Connectors.zip<br />TE_Connectivity_Audio,_Video_and_High_Speed_Serial_Connectors.zip<br />TE_Connectivity_Automotive_Connectors_(Car,_Truck,_Bus,_and_Off-Road).zip<br />TE_Connectivity_Card_Edge_Connectors_and_Sockets.zip<br />TE_Connectivity_Humidity_Sensors.zip<br />TE_Connectivity_Modular_Jacks_and_Plugs_(RJ45,_RJ11,_RJ25).zip<br />TE_Connectivity_Passive_Components.zip<br />TE_Connectivity_PCB_Connectors.zip<br />TE_Connectivity_PCB_Terminals.zip<br />TE_Connectivity_Power_Connectors,_Contacts,_and_Terminals.zip<br />TE_Connectivity_Pressure_Sensors.zip<br />TE_Connectivity_Relays,_Contactors_and_Switches.zip<br />TE_Connectivity_RF_and_Coax_Connectors.zip<br />TE_Connectivity_Terminal_Blocks_and_Strips.zip </i><br />
<br />
<b>Update 3 (January 13 2018)<i>:</i></b><br />
I have slightly modified the script to download all available online content: <i>Unified Components</i>, <i>NanoBoard Examples </i>and <i>Reference Designs </i>(Note: <i>Template Designs</i> seem to only be available via Altium Vault).<i> </i><br />
<a href="https://drive.google.com/file/d/1SVwAgSvGvELQDYFz0e6L61TRk0Yi6ZHH/view?usp=sharing">download_altium_design_content.py</a><br />
<a href="https://drive.google.com/file/d/1hysVwmA32XII39pF4VaJXcVfEJMxNJc2/view?usp=sharing">altium_design_content_20180113.zip</a> [888 libraries, 1.34 GB]Unknownnoreply@blogger.com2tag:blogger.com,1999:blog-5749257085543471846.post-43840884791010716492016-01-07T09:09:00.001+11:002020-07-28T15:23:16.903+10:00Python + xlwt + xlrd: Auto-formatting specific text in an Excel documentA short Python script I wrote for a friend which highlights (in red) all text in an Excel file which matches a certain regular expression.
Tested with: Python 2.7.10, xlrd 0.9.4, xlwt 1.0.0
<br />
<pre><code class='python'>import xlrd
import xlwt
import re
book = xlrd.open_workbook("input.xls")
sh = book.sheet_by_index(0)
wb = xlwt.Workbook()
ws = wb.add_sheet('Sheet1')
red_font = xlwt.easyfont('color_index red')
normal_font = xlwt.easyfont('')
style = xlwt.XFStyle()
style.alignment.wrap = 1
for rx in range(sh.nrows):
cell = sh.cell(rx, 0) # Text is contained in Column 0 (first column)
text = cell.value
strings = list()
match_count = 0
pattern = '\\bwenn\\b|\\bWenn\\b'
indexes = [m.start() for m in re.finditer(pattern, text)]
matches = [m.group(0) for m in re.finditer(pattern, text)]
# Word found
if len(indexes) > 0:
prevIndex = 0
for i, c in enumerate(text):
# Are we at the start of matched text?
if i in indexes:
match_length = len(matches[match_count])
strings.append(((text[prevIndex:i]), normal_font))
strings.append((text[i:i + match_length], red_font))
prevIndex = i + match_length
match_count += 1
if prevIndex > 0 and prevIndex <= (len(text) - 1):
strings.append((text[prevIndex:len(text)], normal_font))
# Word not found in cell
else:
strings.append((text, normal_font))
# Write data
ws.write_rich_text(rx, 0, strings, style)
first_col = ws.col(0)
first_col.width = 256 * 100 # 100 characters wide
wb.save('output.xls')</code></pre>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-5749257085543471846.post-53801429039353531002015-03-25T18:52:00.002+11:002020-07-28T15:24:37.114+10:00CMake: Always running the post-build stepAs the name suggests, the <i>POST_BUILD</i> option in CMake's <a href="http://www.cmake.org/cmake/help/v3.0/command/add_custom_command.html" target="_blank"><i>add_custom_command()</i></a> runs <b>after </b>building is complete and as a consequence, if the project target does not need to be re-built (as it has no changes), the post-build step will not be run. However, in some projects you may want to always run the post-build step; for example if you need to copy <b>module </b>libraries (i.e. which do not depend on the main project target but have been modified) to the main target's output directory so the application can run. Luckily there is a simple workaround to achieve this:<br />
<br />
1. Add an empty header file (.h) to your project with the following name: <i>always_do_post_build.h</i><br />
2. Ensure that this file is monitored by CMake by including it in <i>add_executable()</i>:<br />
<pre><code class='bash'>add_executable(${CMAKE_PROJECT_NAME}
${SOURCE_FILES}
${HEADER_FILES}
always_do_post_build.h
)</code></pre>
3. Also add the following to your <i>CMakeLists.txt</i> file:
<br />
<pre><code class='bash'>add_custom_target(ALWAYS_DO_POST_BUILD
COMMAND ${CMAKE_COMMAND} -E echo touching always_do_post_build.h
COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_SOURCE_DIR}/always_do_post_build.h
)
add_dependencies(${CMAKE_PROJECT_NAME} ALWAYS_DO_POST_BUILD)
</code></pre>
<br />
<h3>
How does it work?</h3>
An extra dummy target <i>(ALWAYS_DO_POST_BUILD)</i> is created which depends on the main project target <i>(CMAKE_PROJECT_NAME).</i> Due to this dependency, the dummy target will run before the main project target and ensures that the <i>always_do_post_build.h</i> file (which is monitored by the main project target) is always "out of date" via the <i>touch</i> command. This will trigger the main project target to perform a re-build and thus run the post-build step as required. <b>NOTE: A header file (.h) is used so that no code is compiled in the process.</b><br />
<br />
<h3>
<b>Update (August 16, 2015)</b></h3>
An alternative to the above is to simply add the following to each module library's <i>CMakeLists.txt </i>file:<br />
<br />
<pre><code class='bash'>
# Post-Build Step: Create required directory
add_custom_command(TARGET ${LIBRARY_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory
$<TARGET_FILE_DIR:${CMAKE_PROJECT_NAME}>/path/to/where/module/should/be
COMMENT "Creating directory: " $<TARGET_FILE_DIR:${CMAKE_PROJECT_NAME}>/path/to/where/module/should/be
)
# Post-Build Step: Copy library DLL to runtime directory
add_custom_command(TARGET ${LIBRARY_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
$<TARGET_FILE:${LIBRARY_NAME}>
$<TARGET_FILE_DIR:${CMAKE_PROJECT_NAME}>/path/to/where/module/should/be
COMMENT "Copying file to Runtime directory: " $<TARGET_FILE:${LIBRARY_NAME}>
)
</code></pre>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-5749257085543471846.post-49572248164643617222015-03-13T00:54:00.003+11:002020-07-28T15:26:13.973+10:00XMEGA 32E5: One-shot pulse using the XCL moduleAs the XCL (short for <i>XMEGA Custom Logic</i>) module found in the new XMEGA E series is a completely new peripheral not found in any previous Atmel chips, documentation and example code is fairly scarce. After taking the plunge and attempting to implement a one-shot pulse as described in <a href="http://www.atmel.com/Images/Atmel-42083-XMEGA-E-Using-the-XCL-Module_Application-Note_AT01084.pdf" target="_blank">AT01084</a> (Section 4.8.4), I found that the latest <a href="http://asf.atmel.com/docs/latest/" target="_blank">Atmel Software Framework</a> (v3.22.0) has forgotten this particular XCL timer/counter operating mode! Perhaps it just isn't as popular as the other modes? But it's incredibly useful if you need a simple way to send a pulse to turn on an external device such as a PC (without using software delays or interrupts in your code).<br />
<br />
Anyway, to be more specific on the omission: ASF is <a href="http://asf.atmel.com/docs/3.22.0/xmegae/html/group__xcl__tc__group.html#ga8370ee630a1847e66c88dc634366fac2" target="_blank">missing</a> the <b>One-Shot PWM</b> mode enumeration in the <i>xcl_tc_mode_t</i> enum type (<a href="http://asf.atmel.com/bugzilla/show_bug.cgi?id=3539" target="_blank">bug report</a>).<br />
<br />
Here are the modes listed in <a href="http://www.atmel.com/Images/Atmel-42083-XMEGA-E-Using-the-XCL-Module_Application-Note_AT01084.pdf" target="_blank">AT01084</a> (Section 4.8):<img alt="" height="110" src="data:image/png;base64,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" width="400" /><br />
<br />
Not a big deal - we just need to manually specify the MODE mask <b>(0x03)</b> when calling the <i>xcl_tc_mode() </i>ASF function. After that, it's smooth sailing!<br />
<br />
In the below example, we will output a logic-low pulse with a fixed duration (after a certain optional delay) on Port D Pin 2.<br />
<br />
A few notes before we get into it:<br />
<ul>
<li>With a 2 MHz peripheral clock:</li>
<ul>
<li><b>16-bit</b> XCL timer/counter allows a pulse length of up to <b>~33.5 seconds.</b></li>
<li><b>8-bit </b>XCL timer/counter allows a pulse length of up to <b>~131 milliseconds.</b></li>
</ul>
<li>Pulses can be output on either PD2 and/or PD3:</li>
<ul>
<li><b>16-bit </b>XCL timer/counter: the pulse can be outputted on PD2 <u><b>only</b></u>.</li>
<li><b>8-bit</b> XCL timer/counter: in this case, as we have two separate timers, two independent pulses with different timing characteristics can be outputted on PD2 and PD3.</li>
</ul>
</ul>
<img alt="" height="256" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABRcAAAILCAIAAAD9lDx8AAAgAElEQVR4nOy9728c15kuWH+FyAYWE0xmPwhQ8sV9AUEESAsYM9gkwN4YlDGEGMhGJvfK1nB2vAJDyLCdvbweSEro9cyAudSlbM1MQlkS7WiiBSMpjKW1KBNhvGHMmKbtoVqiQ0kmmDBCRhJNpmEQvR/q16mqU9XVVefU26ff58HzQSKL1ed9+q1T5zk/rRoAAAAAAAAAAAAAAOlgURcAAAAAAAAAAAAAAIwBXDQAAAAAAAAAAAAApAVcNAAAAAAAAAAAAACkBVw0AAAAAAAAAAAAAKQFXDQAAAAAAAAAAAAApAVcNAAAAAAAAAAAAACkBVw0AAAAAAAAAAAAAKQFXDQAAAAAAAAAAAAApAVcNAAAAAAAAAAAAACkBVw0AAAAAAAAAAAAAKQFXDQAAAAAAAAAAAAApIVCF337/IG/sJLxF8Nzn9e7zer5A2kudi9Lc8tEbD9cunpq8CtOCUsHhs/PrW6HLlmdu3BycG8p6RoJtpZOPZFRhEbhiRZGae/gqatL9yV/8nDp6vnXhw98yb/0wPCbFyJxxd7ZsqyvDJ6anFutupfmSIDYTwl9hBZsL51yv36rNHhVJpYbmo7vrknx+er5g0lf5YHzq9RFdMHw2wEAAAAAAAAowdxFV1ev/re9kWKWvnX+rmcmH35wSrCa/jUH/vXjh8lOev3qYDmjCI0iyetalvX14bk/CldvP1w673cKhLD3ufOi665zZ8sq/c35u7bL1eGi7Y/41qmPZd5WDYKdHaXnrt6Pfq0xPu3hx+dPvd00ZlKAgoI1s4u+v3T+9aur3jcBFw0AAAAAAAAUCt4u+uG7w7aZ3Pvfrq5Wa9t3rz5nj0p+6Vvnf7tdq9Vq1bvn/6ZkWZZV2vvcz1e3a7Xa/Y9Pfcv+yVdOfZxkoz+fG/4Ly4od3lSKul73K6eW3LJu3z3/rRgH7UB0rXXv7AeozUVboldXDS8HHHhfvYioT6uuvvuDA6WmGpK1oapgTeqit1dnXjnwJcs6eH4VjhkAAAAAAACgga510a6F/IsD52839pcFuujt1bkLpwb3Cn7YLXbUGQqtdu8iwZpKbu7ME65ntpXAEy3gbaqrcz9yx5yfOLW0VavVatu/Pf8td2h97+Cpq0sPnYvvL1095Q1Q+6Px8jvXfLcW8x00lgDyb1MsvyYZt+9ffc7pEzl27HAp7muNuGgvB5rNRSsrmOeiG3+ENeLh3PDe8PMIAAAAAAAAAMWCwEVvr86dHz4gDP99ZfDU1SVvdrToov+49HP3yvBiZKnvCty6tHfwZHSdb7piJw4gexclOXjPnu0dnnsYd5EyxHpdz3U4xfDXANvD7yH4A7Ou6469c833lrJZ0CpcdK0mjpxrma/rzbp/4tTSbeHfW8HLAi7a+/59+OJUV+fO+6vN9w6eCqSgYAKX3nNWCpSeu3p/W8ypqpDF0TX4CY9PjoJFkdJFS2dTh/ue0kdXq20/XHr7TT/ALx0YPu8sjJeEZ98/bkb3/aWr5/yQSweG33x7SViFkbpUwfvYd/K7nwAAAAAAAAB2KNpFx04n3vvKnN3A9WxbqWNvR+jSrzx31V2wHPVd8gXMXzpw6oOU7V13sqgVWUgcuOrh3Ct7wxYlCt++Hjiw12t8p9qVLAPSjkV71ihuaFcYm7UvSDMWLRuTV+WiBaOrYfjx/tVBP4RI7D5Sumhvtn8AwhJ6LyvKe/e69/jKqaVtoftm/4H9oVsIs9mTH58cBYtCi4tOji5unwLnmoZcdMx2BmLnUbpSyaVrqGIBAAAAAAAAWgwFu2jXEfltWc8juWO2whJZt5UvtK29Yc+w7/rj3PDXLcvynfbDj887O29HhxajELaYKh145d1Yr7u9+vPn0swx3v741Fekdke67DY30q6LDg9NSwruDlY7wtZfFy2PSJ2L9r4a5aP6EdvsfWvh0fU0M7q97hV/Cf3S+ef2BlLF0997BO7fXPrddmCc9UsHXplZ3Rbn3nt/nuLxyViwKBLXRfs3b8xFJ0Yn9BE4W9z5PTXuEgPpjO5oGbzawP04P2S/0ydVqdx+Fr/HwfPn8o3oAAAAAAAAgNYH2bro7dW5C+fPC1M3y4NX12s1cSxaHKTymsXhy5yWs9fYFWdiO9ekWVIr2BvrSweGf7YkG6MTLLQweC4Pz26Ol/YO/mhutRrYFlvHRllp97hOsaw0NPhcx0V7LiUMdS7as3OqXbRvmbx+Fs+xu2nmII2Ldg1twFy5fxjuxQjL4js6YWA/YelA7OOTsWBR6HHRSdFJxV8PTrNP5aJ9Nx6ILlyHpCqVl//158ADAAAAAAAAXFC4i44s63QRcdGBFrA3bBhu3dr/FY/8TWz0JyM69iUWXLDQ4pTvsM+M840JE4ZzI+15ywrHor0OAjmafyzazxlxA3P3h8GF8SlcdOzsAxu264vVX7ogX+Ki6z4+GQsWhRYXnRjdevy6dA9pXHTsgxb6xFSliqpXOjD85nkYagAAAAAAAM4o2EV7w0FeY3Tp3ZCviFmIGzdGFGoQ12v014W/clUcjQxaaGF5di29i063K1k2JO0BJsJzpHFOPnJB+M73l37+iuvivjJ4/uM4X6thXbTUXImTCGIglzt4TLQE4selcNF1UjDkosOxyHMjdtlC/OOTsWBR6NpdLD462X74YaRx0fElj6k0EkslbpcQQIoT4wEAAAAAAIDWRLEuOrCZk/2jyOic/KSr2F2vkhrEmQouaYIHjhQOWuiaWS5aGICVTSwXOgsS9ugWt4CK3YZNmYv2ckauWlYXXWeE1gp2NDTiopO+3dgZ9akcXZrHJ2PBomjQRYsR+do25KLJxqKTXbQT0+rchfNvnhoUp7wUcogdAAAAAAAA0Hwo1EXLmq0Ju4uJjem066IFg1F3BvX2w4//9UDJilmH6ZZHPGA5aqFjIDssOm7NrQqkdtGBcAKbhgfOi/ZllN9ZHBSVL/NW4aK3Hy79zD1hqLR3+F2F87nrLAEIidDQumgxb8NpmctFp3p8MhYsihwu2rt5Yy7ae0DE/epCT026ddGyufoJ66LTuGgBkdUlAAAAAAAAADMUOxYd3jlM2DhXvkf3D95drTa4R7e735U3gBy7la5wZpW3J7D3QU77228xN3a2jWcknB2/hd3FImd6KWiLp3fRCaclefB3I4u/sz8+L/e32Vx0fJHUbskW6ZQR4Q+ler+Nd9FCr42XTm7eRj8l31h0mscnY8GiSOmiPYvuPh3+3vhWgy46ukd39KmRTomPzioXShXZo9vb8iBFqfyeuL2D590dB72zrzR0hwEAAAAAAAAmgG5dtOeP9u7tEK/Mfl60OO9a9icSxBwGKzlJSIYk+xt38q3EoBbsogPmJLmESXcW+iBk87pVuuhQkfLD7+OQ9rBU757/G+f3zr5TCT7NsizPskrSWzhfqpbXRad5fDIWLIqULlpMAxd79x/Ym2FGdy32qfETTOzVslwvnfe86KRSbd+9+px81gLWRQMAAAAAALAFxR7d/zq4122HDp+fW/2je0iVPUYkrIt+97a/IXFg9nEtxoI+XLoqHP4T/hM5qqtzk8Jyx68MnrrqH3Plz02VoY793X649LZQnC8dGD4f2NSazEXbpVudu/D6sOA0SgeG3zz/dviIr6Q7C94scu6XGhddOjD8ZqRIeeE7seBG3ALCNlvi07ZX3/1XN22EHd3vL10956saTsGcLjrF45OxYFGkdNG1Wq26Ovcjt1PGTvKbmXYXcyKMPDXnri4J31JAAXtMXrrDWSTDIyGnLtX9pavnAyuiceoVAAAAAAAAb+hy0QAAAAAAAAAAAADQeoCLBgAAAAAAAAAAAIC0gIsGAAAAAAAAAAAAgLSAiwYAAAAAAAAAAACAtICLBgAAAAAAAAAAAIC0gIsGAAAAAAAAAAAAgLSAiwYAAAAAAAAAAACAtICLBgAAAACgAdz7X/5XMA2pvygAAABAF+CiAQAAAABoAOTu1BRSf1EAAACALsBFAwAAAADQAMjdqSmk/qIAAAAAXYCLBgAAAACgAZC7U1NI/UUBAAAAugAXDQAAAABAAyB3p6aQ+osCAAAAdAEuGgAAAACABgCvGAcoAwAAwARw0QAAAAAANAB4xThAGQAAACaAiwYAAAAAoAHAK8YBygAAADABXDQAAAAAAA0AXjEOUAYAAIAJ4KIBAAAAAGgA8IpxgDIAAABMABcNAAAAAEADgFeMA5QBAABgArhoAAAAAAAaALxiHKAMAAAAE8BFAwAAAADQAOAV4wBlAAAAmAAuGgAAAACABgCvGAcoAwAAwARw0QAAAAAANAB4xThAGQAAACaAiwYAAAAAoAHAK8YBygAAADABXDQAAAAAAA0AXjEOUAYAAIAJ4KIBAAAAAGgA8IpxgDIAAABMoMxFnwQAAAAAgAFCXpG6OE0EKAMAAGAc4KIBAAAAANAOeMU4QBkAAADjQO+iy0Aj4KkYz6jJYdcR1KUgA/PwEwBlsgGihbxi9IKWT624AOsqA7R8bmQGlFECaJgT3PIQLtpI8FSMZ9Tk4FYnhsA8/ARAmWyAaHDRcNGZ0fK5kRlQRgmgYU5wy0O4aCPBUzGeUZODW50YAvPwEwBlsgGiwUXDRWdGy+dGZkAZJYCGOcEtD+GijQRPxXhGTQ5udWIIzMNPAJTJBogGFw0XnRktnxuZAWWUABrmBLc8hIs2EjwV4xk1ObjViSEwDz8BUCYbIBpcNFx0ZrR8bmQGlFECaJgT3PIQLtpI8FSMZ9Tk4FYnhsA8/ARAmWyAaHDRcNGZ0fK5kRlQRgmgYU5wy0O4aCPBUzGeUZODW50YAvPwEwBlsgGiwUXDRWdGy+dGZkAZJYCGOcEtD+GijQRPxXhGTQ5udWIIzMNPAJTJBogGFw0XnRktnxuZAWWUABrmBLc8hIs2EjwV4xk1ObjViSEwDz8BUCYbIBpcNFx0ZrR8bmQGlFECaJgT3PIQLtpI8FSMZ9Tk4FYnhsA8/ARAmWyAaHDRcNGZ0fK5kRlQRgmgYU5wy0O4aCPBUzGeUZODW50YAvPwEwBlsgGiwUXDRWdGy+dGZkAZJYCGOcEtD+GijQRPxXhGTQ5udWIIzMNPgCZlHh2Z/zzpdfH52swvKtu1Wq32+fzIo96f9Y7bP6zV/lQZ/7b3446h6QfuD907b8yP9MR/0IPK9PmR/m7lcXlAOsFFw0VnRsvnRmZAGSWAhjnBLQ/hoo0ET8V4Rk0ObnViCMzDTwCZi7705vSD7VqtVlub7Hf/ynXLtVqttl0Z73Vv1j95t1ar1Wp/mB76WjoXbd9idfqlXmnx8gPpBBcNF50ZLZ8bmQFllAAa5gS3PISLNhI8FeMZNTm41YkhMA8/AWQuevLYyPxGrVarbd8Y7+0ol8vl8teGpv/gX/Jgesj+cfnb45U/eT9pwEXXarWNuZGeDuXRlVGPwUXDRedAy+dGZkAZJYCGOcEtD+GijQRPxXhGTQ5udWIIzMNPQBHK9E+u1Wq12udrkwPCTzt6x29s12r2CHO5XC6XBybXREfs/rzjJXvU2h6djnHRzn/tO/cMnZtfq9ZqtdDMcIVAOsFFw0VnRsvnRmZAGSWAhjnBLQ/hoo0ET8V4Rk0ObnViCMzDTwCdi/bmb7s/dxZF/6ly8arzD9sAB/88hYsul8vlcs/o/IbvvZUD6QQXDRedGS2fG5kBZZQAGuYEtzyEizYSPBXLG3XM/kM2Gt5qqGdo/OL82rZ74UZl+sJIv3QGaOLnRobRhBuOD/WEru3oH7nwc3esrFarVdfmfy772N6h8Z8FL/vZ+FBGR8CtTgwhQ/ix9kziCTt6hn4o5tH22vzF6PduIzmRnJtLc3h8yJmc3OPMhY7F3cn+RyMfLAehi/Yk/nx+5FFvaHr7xnjvoP00BQefnaHptC7aU8mfGa4SOkXrfnby9natVqttb8yP9vg//+bI/H/YVcHq5KAQUyj9tjcq7wTrE7d2Epag54dWF93x7OSqHU9gTn5Hz8icnfrbq5PP+hHSKKDIRdctvLcvQN3nurt/5M1wRRT3Rqvz7ov7UC8Ja9trb7+UdblExtyIrR5rzpfr1q6yvjN3YUjtD9NDPW50UoQ67CJ3c4vx+fzIo/XWrjSacszf1KoADXOCWx7CRRsJnorli9qbBVqryd6UjWw11NHz0tt+G0K8UNI4qPO5sS66Vgs3eXu+P+0b48DHbtw4IzRiel+aXpWV7j/mR76ZQThudWIIOl10XCKFLJCNeomU3Ex0HEWruOjAgmd3UXTcv93l06ldtGsDApuAK4Ne0dxJ7MLzHmcg4yqK6tr093uca8xz0cIieeE5cucX1LZvTz7r9YqSKaDCRacpfEoXHXerWm3jw/FAJ3Kad5/0Q/2PyGOhy/pctFel+LsteGV3Dfbq5LMdjzbkooVVJ4FiwEU3LaBhTnDLQ7hoI8FTsXxRe93JNoLvtka2GvLHOiSI+p86n5voooU3esfg5KrUQoc/V9ysOCGK9OBWJ4ag0UX7hieKaJdHvURKbiY6w9ct46IFh/zNY9MPtmu17QfTL3X44t+d7O+3FfN6HFi4aMEzO8+7ZyADSeWNWienn4kuuhwJ2RsFFetnSgVyu+iUhU/jopNvleHdF/1Q4SPCtrxhaHPRXjdlaKZP6OeNuuhg1xVcdNMDGuYEtzyEizYSPBXLFbXTnVxdfeeXy9s1r83tIfVWQ0KDrHLVnezdO3RmzumhD/Vk1/tcr5UWaLH3vDRZsb2wXR5hHFKc6d3RPzLpzayzbZX3jq+uzb3mDFD7d8uyYRK3OjEEjS7abVFtr/1y1EukyRvOsGFotLluIjl3C31od//oL9fkMxXTz/aUg9RFCyJPTgcC99ZInzs//3lAqIZndBvpostB0/jmuMRAij7zQeXtUbeiGDrjVidutpjpogNdCfPj4/OBbgUbpArkddFpC5/iGffXiYhLP7r7Rybdd5/3BKV894U+tLt//ENX/7wWupzXRUcfdgHySd2hMepUXWxBgyz0XokuOvAXCtKM+ZtaFaBhTnDLQ7hoI8FTsRxRu33h2zfGe58WD7/xkHarocDkrtBHVFbDq5Trf67cRZdDb33vRS5OR7ThtRftto682RTejakRcKsTQ9DvooNfijdAHWhOpUik2GZiXPvMbBftPonbn2185ipjy+E8LJ+vrf0hKAij3cV8l+UiuEjY7ZULLZMulzsGJ+/enr/4puuRDHXRZXEVrgtxKJ5YgXwuOn3h6z7j8bcqC1lkVzVp333ih3b7M8BVWOiyVhctndQdttYNuejPKvM3NkTF4KKbHtAwJ7jlIVy0keCpWPaoAwfeyCdupdxqyLWj6QZ1U3xuqrFot3DyZn3Qdwmb61SmJ9+Ub43WCLjViSHonNHtzdJ/UJmO3cqnXE6XSPXGoiPtNsNddGg+vN/6DJ4dLTSI07jojv7Rt3NM3EiDQp4mYTC2VossEAivGI+HuS461JUQWmtDrEA+F52+8HWf8Z7I0euyD6rdnex/NPW7z/vQ1ekz77hTpbJ04EqhYUa3VwNE+xSilW3ijG63kvXrltHvT65WI6cGwEU3L6BhTnDLQ7hoI8FTscxRh1//solbKRdJhnb9zf+5ddZF2yNIzh/GNURCWwoLM+hcJG24Wg/c6sQQNLrocrmj/8yN0Jjh9powlOQgVSLVWRcdXWhtuIsOuOXA/PbA1gDCiH2Mi0589DSgqKfJX0gf6X1Lvwm5yS5aXAgTdonECuRz0ekLX/cZd5MkJjrxfZf63RfjMxU9UDpdtDC/3dHW1ccvfIMueqTX6c+ybwgX3fSAhjnBLQ/hoo0ET8WyRh3tuZf05TfoopMnhjXwuYku+sGN8Wc7ysleoixtVHX0j1wQDyOxkWlOHbc6MQStLrpcjp5eFvzqy+W0iZTUTBS37fWLabiLFjctD7bs/aWeAXfdgIsOb8uvEsU8TYGNoMIrQdIv/DbZRQd2ZAzNWCZWQI2Lrl/4us94nehkLrruuy/oM7fX3n/f2ZkhsidIFuh10YFDrb7mLRsRSt6oi+5x71ldnRzsgItuekDDnOCWh3DRRoKnYhmjTtoJ2W9apdxqqIEZ3ek+N8ZFb29Upv0TnhuZ0R1Bd//Im5Ouo86w1JNbnRhChvDdJEnnosU/7B+5MOk6an979nSJFNNMFLYuC8F0Fy2EHB5p9JrCSas2Gj4iXhGKeJoiW/oH17JymNEd2Xo60JWAGd02tM7orjlTYOTHjGVEPhddtwtA3Gfk2Dedfjqxk66hddHOxznSbcyNDF2Ei25yQMOc4JaHcNFGgqdi2aJOOvmp5o/f5t5drKN3/OMHlXcm3Q20U35u7O5iAaTeXcxbQBsuXvZth7nViSFkCd9psYXHXoLNUK8pHP5O5S2wuokUbCYK63ulA9FlM1x0K0K/aL6B3F778H1nmoPYc5ewp9S3xyu/r0xPul14prpofyjeHwsVa0ViBfK56PSFL2Z3sdC7z/tQb0KNP20k8rcNQ7OLFnotH3w8vxzdxzGLi3b3uquuzn/4+5r0r+GimwXQMCe45SFctJHgqVimqEOn7EbhdDOn3mrIu2F1bX5SctqHc8O0n5vORYsL/NbmzyScdCUW75xwbMnVyoZ8j6m64FYnhpAlfG9G8fbanHsMTUf/a3OOnwmfXra9NnfGnXcgpFxwe/a6iRRtJvoDkrImMlw0EXSLJhjI25PPdof+61wkpOj85Ej0qCTXOZjpokOZL30QSBXI56LTF76hk65Cr4zoSVcp332yD61TFzUA7S46tD1huDM0m4sOH7UNF920gIY5wS0P4aKNBE/FskQt39CrXPaH+Jy9W9NvNRR6HYbg9LWn/tx0LloyRTP0se7dQnvzRq7DjO4GkSn8ROvrTZ6MHkcUvSx9IkmbiUlzKeGiaaBXNIldEYam/SyKTHgOwPvbpL0PMx+nrdlFC/G6I59CV4I3dZlSgbwuOm3h0yziTb5V4+8+ecUivJjqT0TPIl0dJG++GPwiA9N/wjVnoqTunWSd8oGj1+CimxbQMCe45SFctJHgqVjjUccdLmX/0p24tX1jvLejka2GOvwzMEMXOmtQG/jctC46MJgZ/tiNG2eE/bd7X5qOaepgd7HGkS18yebbDsRtw2ITyb2skUSSD7b4jdfIXEq4aBroFC3m6/attbhVe1xFUV2be82tTwx00fKeI88rikdekSmQ20WnLHyqrbDKHf2jczH1UPiVUffdV46vWDwbGTp1TI10ddCIixa3ooh0X2Z20eKwP1x08wIa5gS3PISLNhI8Fcs+JFhn65Q/Vca/3fBWQz1D4+Im2BuVaf8oqQY+N72LLpfL5XLv0PjPhP2ctzcq78hOsOruHzk/XRGW025Upid/OJTpoBFudWII2cPvGRqfrgjzAqpr8z/zd4xz0dE/ciFw2QNhWWMjiRQ7ZdFrvIbmUsJF00CjaLFTD4SRwMCBQx09Qz8UqrFofWKci47LdnHqh9iVQKOAChedpvDpXLTkVqE3WhBJ775yQsUiDGVHD95LiyJcdPgdLSKHixbmisNFNy2gYU5wy0O4aCPBUzGeUZODW50YAvPwEwBlsgGiFXVedPNCkYvmiJbPjcyAMkoADXOCWx7CRRsJnorxjJoc3OrEEJiHnwAokw0QDS4aLjozWj43MgPKKAE0zAlueQgXbSR4KsYzanJwqxNDYB5+AqBMNkA0uGi46Mxo+dzIDCijBNAwJ7jlIVy0keCpGM+oycGtTgyBefgJgDLZANHgouGiM6PlcyMzoIwSQMOc4JaHcNFGgqdiPKMmB7c6MQTm4ScAymQDRIOLhovOjJbPjcyAMkoADXOCWx7CRRsJnorxjJoc3OrEEJiHnwAokw0QDS4aLjozWj43MgPKKAE0zAlueQgXbSR4KsYzanJwqxNDYB5+AqBMNkA0uGi46Mxo+dzIDCijBNAwJ7jlIVy0keCpGM+oycGtTgyBefgJgDLZANHgouGiM6PlcyMzoIwSQMOc4JaHcNFGgqdiPKMmB7c6MQTm4ScAymQDRIOLhovOjJbPjcyAMkoADXOCWx4a66L7J9ckd9reqEyPD/WGru3oH7lwcX5t27tqbf7imyP93SluWKvVHlSmx4d6OsrlcvnRkfnPEyNZm+yPlDTmjx5Ups+Hy5AauXI0jXRuoT+fH3k0+ye5n/VgeqijXO4dr2znuqOyJ7Ojf+TCO5WNbSH2dybHh3qkF9vFrtVqtT9Vxr8d+qWr08b8SI/4/9r2jfHeDuHCgck1UdBH+yfv1kk2H939I2+G8/fCSH/oqnJHz9APw5fFBdUIMteJ9R6Xz9cmB/yre4bGxdJvVKYDMfaMzG9I7hG+rFwul8sdL00/2A5fmTXxCn4lNFJddPQMnZtfq9ZqtVqtujY/mbk+yYYcynT0jMxt1Grbq5PPdpT9pyOMVEGFn0EJ3PvL6ufGyz44uVqt1f5jfuSb2W6gIZ2+OTL/H7VadXVysKPs1fDB50tEbPUuChXzxPm4O/l/vphNikJctKfJ90frBtLvyRCqRbc3Ku8IFUz3s5O3t2vbG/OjPfkKV7SL7ugfufBzt66wn6yfhyrO2OdITKdMTSC10Fwhp3nbuo9G+PnxXut3J/sfbez1pwKZlImre8UGYYqqIO0TJKBZc1Jpdn17vPInR4jKeNiZeKjT+HGhSrHGvtCG0XgepknCcnyz2Yb3QMXdzZOlkcZk6ngT9YxFE7roWq1Wq23fnnzWa3h19Lz09lqkRV2r1Wq1BzfGn+1Ic8NarbYxN9LTodRF20VdnX4p9slK/toy/FX9SD3p1Ljojt7xG55xtm+ZVJXUg5LaraP/zI0NaUJsb9w4E7WmdgjOFZHCx7ro2vaD6ZeEm6V00XZSTAp52fvS9Ko8fzc+HO+vm+caG3x1kboZEfuQbq+9/ZLTp5BU7wuXlctlseND/DSjXbQdZ6C66Hh2MuWM2zAAACAASURBVJwZdjVVFLIr4xhRr1sq4bUXqs8lKNpFu3VC8DltAMrTyckEr+euMBfd351NigJctKBJb+omY1xlW12b/n6PfV+7bqmXk3VRqIvu+f603/IOPFriKw8uOvXbloOLtmF3kKU3XSmeIBtNnJMqs0tsioRHVmykafyUy2Wlihnjom14vbSaXbStZkj21PEm6hmLZnXRgtuRNDQDEDrRk1203eBT7qJrGRu+ulx0PpcbwdeGpv/gtpXtf4e8ZWNQULv1jM7LLbQNdzDHh9+VWKvVarU/TA99Tfx1vIsOtbQacNGCu7CHPlIkj3T01UH2QTMbul104kPq9QIk1/uBzgL3c8NfVsHhZ0Pq6sLJTNvAuH1DuZ6vRpFZmY6h6Qc1sVWR/BLNH5RaF+21jTImmOp0sqtWoeouzkU/mk0K/S5a1CRlkzG5svVqUfu5y5uTxblop8cq9uHyak72Ljr125aRi9bxBDV7TqrLrsAYjLTSSNf4Ua2YYS7ae7UV4aIzjDyZ7qLFXOnoGZp0puk6tZtngQITAzr6Rya92RP2ZGP5Dcvlcnf/6C/tSyP2Mm3LTJbW4lRMyTzhulDhohOlCzez3LRbm3zWV297o3JVNt+yziOaeXw7d+3mNK1qtdr22vykN3ejZ+hMNB9sOG3E6uo7v1zerkXrwSQXHXgaY1x0QIveockbG6JEfkemONO7u39k0k0etzxuz8j22i9HnW/Ev1vOnhE1rZbYlr098TKUTr1DZ+acr8TxWtKGS/Sysv8t512N4IDIRderLpzc8GoPN+pQAutEVmVc/++npfN0hL4xf9qIU8d6Ve47405u/2F66GsSxTr6R96uOMm/Nndm6PuRurq7f+SqU+NtVN4eGXg2+jwG3xPBpRbREBqA4nQKZ4IqFx34A9EeBO+VRQrtLjqqiYP4QPwO1geVt0edd4PwanADdFvG8pGltCjKRQvt+I3KtLfAJ5DbTg9Iuva3CNWdU+mgq0JO/7ZN56IDN6/7SKpAHhcdqXtfm7OjDue5uieoWXNSXXZ5Pd3/3zvLf5K9nVM2frQqllC3Z0RmF10vCaXN5rR3E5C+MZkKreSiy2GV3WpRNt/MS1+3E11+w3L8Y5nHRZfLZb/SydAUU+2iy2Hp4lz0xu/XgmO5Mm2b1UUn5cO3xyu/r0xPBhfVu32r2zfGe592emSC9WCci/688v4HG9vCcHQaF10OPv9e1RkdIRfeWHZ5pFWkN0Cdr5Wj10XHfindz05WVv1lP3ENF2eFrdBidvvOvFzdXps/k319eBO46HK5HK4u3Mu8N5+axn1DyKiM842LmZDsor3Ga6SPefvGeG9HWLGOZ8dvPAhe9tnGZ+KD0N0//mGwhtpYWwtmV/Qmgble7vObSW2l6eTVEkIbqFAXnUUKzS5apkmotOFfxVe2HYOTd28HNlJx5M3S/e2hKBftVoaSKehezek8X7xddCNvWwYuOj6W/E9Qs+ekquxyx5n/VBl/2hUnOGcnbeNHq2LN66IjZdPqosuyxmQqtJKLDg+ouvkkV8SZVehlVb2x6NQNjjDil+2532Xjw0dkY9G17Y3K5FBPh7BII/bZcxS29RG3GcuKnLWb+42nfkJcF7pdGe/1XxKBP4910fOvDU7e3va7SDKMRbuay5un3rj63cn+R4UJPw8q07Ktx3JAq4tO/aXEVXye5q7Xks/viqzLSo1mcdGB6kLiEyK+WjuyKeN+42KAiRO6/ImU3mX2t9nR0/90T1gxv1XhrBYT/bBdF3ltYmeto//cudnldUk4C9GjE+bzrBpQmk6ymReFuugsUmh20QmzUeICcf8kTV9AqMLJhIJctPvdyHvqg92svF10I29bBi7aHwZMG2PqJ6jpc1JRdgUF8QyzEHXaxo9exZrXRUeSMHFGt//Hcc0JL/bUjclG4o0tWCKawUVLYc+kTeiQlulVZ110dHFpfhedsmdFAhUuOkG6eBftV5GevHGb+tgX2PK6+/Hknlqc468bbu2F6zhZPRjvokcedRrr9sc1tC7aTja3AzImwULhSHZNk+5F3zi0uujUX0p8xReqgh3Z3UllPS9NVh7Uatk3BGoaFy1WF5I3nyEuWvrOjnfRgXkE7mXBhlpQMVlr2JuruTbZL2+7uM9acCmQkGuRCfM5msVK00n2GirWRWeQQrOLTng1xwXSUI+2mpZ6ES5aMu9DRCBq3i66obdtC7roGETXiOZ+gpo+J9VkV2AMpiyMJ/svprSNH72KNZGLrpeE+l10/XHs2Hjjy5+EZnXRzghDveRowEVLB7Ja0UV7G1HGuWihqPW2xrX/RNxaLO8rRIOLjk4+97Il2rcq6W1NctGBvXzTu2hvx8U6CSYJJ3wQgo3gXvSNoxAXnbDBso3sFV941kmDgIuOQyZlpOOEyS9Rr/p1L0taVSF9asQfSt8L8vUssqfTffZzDEiqTCe3rRaQs2AX3bgUel20VBO3rHU8QKp3cfZJZB4KctF1MoHesWSAngq5obctFxct26849xPU9DmpJLuifbXRn6Rt/OhVrNldtGQhlRRw0Y0oXi6X46xgYA+YTDO6wxC2a5LLrWBGd1O46OD2OXEuWmg31I8rBlTromVjUPEuOmnXa3/lT6KL9m7yH/Mj/3cqFy1uHdHYHLNIsP0jFyZdR61nI5zGoH1Gd3xe5Tu2rWlctKiAuS5a+j3GvLr8eQR2Asur3EJdtPdXOZJKZTpJi1G3yR7rM/O46Aak0Ouik8qjYkZ3jhe3hyac0S1balEul5m46IbetnFLBlrIRW+vzY1K14UVOqObJCdVZJe/ka1EWncVtI4Z3Y0r1sQuOpyEutdFZ3ytm+6iE3txcuwu1tE/+rbdgItdUdliu4sFEb9Hd3/4EmNctF/dRI+s8OFUJW5lFAO3N6GOi3ZXaW6vfvD+72UuOkmL9PudeC+w8KTl1CO9SdDqouMf0o7e8Y8fVN6ZdLoVcmwI4XxExnWMzeKiW2R3sUZcdHgIqGgXnfR0Gu2iY0b1I7MQ/Y9pdRedUNlGN540x0U3si+RmzbhejK+rd9KLrqh3cW8LArNxY13kk3vot1+f/F0A+nBufmfoGbPSQXZlTQGI6RN2saPVsWayEXXS0LsLhYPXS5aOOx3e23uTKMnXfk7Nskq1nwuWnDpzXDSVQS5XHS57D60dmvMeYBzn8GTu3aLOemqXC539I86u9zbVUnomOgoYs4ViDbgQgf9NeCixbM3qmvz5+LP3vAPQgjmuZdjTeyifamra/OTksMekibRCecVhc+E8Ns3De8qF0QzuGhJdRHeKNiUk66SZnTHjkU34KKVrIuOMZki6qxVSwL9jG7xoZt7zakH/Tow/Ya95XI5ixTNN6NbSBLx3SA/BLHOGto0KMpFC2fkiFsMyM7IERXwhoD8DX4aOL5EL3RVyGnftuVy4IXrzVX0d6KVZJ4pLrpcFo99lo0/5X+Cmj0nc2dX6JjoKLxEStn40apY87nocjkmCbW66GhjMi1a20Unn2leC+wZJr2h1wcp6QRq1EXHwB8XbQBN76LtdA94vBwd9w4UvDv9Iw0Tvw7ZRmI23Ca4s+FBfRft92/VhF+krA78qqRO8iTH1cQzusv1HlK3Dk2e4OBvguJ/QaHN5DM9aGUyF13vG3d7Z2x9optIF4BMykg3fUxeF+01v9K46Mge3b4VT79Ht/fcORORvK37/Aohx3FHStNJ5uiS9vhwVEps5zU4XtG4FJp3F0twuQmBJFe2Yk+6k4d5NsssykVHunHDELePSuw7lrxEWstFp3/blkXLLZMqmhgmueiyMFUzOoCk4glq7pzMnV2SjcQcRKZDpmv8aFWsOV10WZaEyZvyen+e2kXXF7OBeBMKlgADXHSggzCM4K5L8hv6FijSLafCRbsnqTSKpnfR9pMsbi2W63RNG0renZK9rN0vw/FdMYdauX/v1oPSs2rlkwmFeq0xFx0YIArD2wquXC6XO3peejtVnjcO3S46ofBCT39SxRec9uNVviKie+ynRRO56EB1IRMta09BNmRTpuGTrvzvLo2LLksSoO550du/ryzbu2S4z6O01SL0pZpw0pUU8adqu0G6uxuKaPmTrmz0vjQtbdMKI/blXBvLeSjORQdGoup81/EvR+lLpMVcdPq3bVl25nzcleVy2TgXnTCApOIJau6czJtd8WMwwnRIr22ZpvFTLmtUrGlddDQJi3DRMQsZ6sebULAEGOGibdGGxi/OC5n6oDJ9PnwCUOwN47rlcrpoWRlSo9ldtGM17cfSFipLczMEZe/O8F7W1TX/gPtyUldiuRyqB9O5aGGVdaMuulwulzt6hn4YyN+NyrTsSOiO/pEL0xWhengQXM6XEfpddLlcjjyk4RhjKj65FL1D49PO5Jza9kZlOo8IzeGipdVFR8/QOTeNxSlhBSGjMk7lIGZCrIsOrrxI6aJDC6vmzgx9P/KH/vSt7bW5M0NPSZ7HwHy5kLzu85tp/rzadHLrFqENlMZFl8vBx8RR+6K/u6GIhJZWFik0u2iZJqHSxjYZQ5Xt9kblnXAF48ib641WpIsul8vlcu/Q+M+EV54sLhs9Q+OBl0h1bf5nMfVny7nocjn927Zc7ugZGp+uCF1R22vzF384JG2CG+eiYweQVDxBDpo0J/NlV+IYjNAUDHjsOo0fDzoUa2IXHU5CzS46VvZU8SYULAGkLpo3eCrGM2pyFGwjmw3Mw09AVmWcXqqcp8crRcLopRR2CA1P/bKhOJ2coQ8Fk30yIYsUul20Tk3cVnK+eR+Fu+jWASrkOEAZJYCGOcEtD+GijQRPxXhGTQ5udWIIzMNPQGZlnP74ArcTD8AbqvUWp0WXPSfDMWkZRyNVp5PTBUDTK5FJCu0uWqMmTq9Bzg0I4KIzAxVyHKCMEkDDnOCWh3DRRoKnYjyjJge3OjEE5uEnILsyzqpjouHTuJ1a0u5S4YxGyjawTQXl6eRsUUPQK5FRCv0uWpsmdq+BZLfRxgAXnRmokOMAZZQAGuYEtzyEizYSPBXjGTU5uNWJITAPPwE5lHHPUaea1B3eKaOhxfP2aGSu/eqy/WE87M07iu+VyChFAS5ajyZ2r0HGmfwi4KIzAxVyHKCMEkDDnOCWh3DRRoKnYjyjJge3OjEE5uEnAMpkA0QrxEU3NeCiM6PlcyMzoIwSQMOc4JaHcNFGgqdiPKMmB7c6MQTm4ScAymQDRIOLhovOjJbPjcyAMkoADXOCWx7CRRsJnorxjJoc3OrEEJiHnwAokw0QDS4aLjozWj43MgPKKAE0zAlueQgXbSR4KsYzanJwqxNDYB5+AqBMNkA0uGi46Mxo+dzIDCijBNAwJ7jlIVy0keCpGM+oycGtTgyBefgJgDLZANHgouGiM6PlcyMzoIwSQMOc4JaHcNFGgqdiPKMmB7c6MQTm4ScAymQDRIOLhovOjJbPjcyAMkoADXOCWx7CRRsJnorxjJoc3OrEEJiHnwAokw0QDS4aLjozWj43MgPKKAE0zAlueQgXbSR4KsYzanJwqxNDYB5+AqBMNkA0uGi46Mxo+dzIDCijBNAwJ7jlIVy0keCpGM+oycGtTgyBefgJgDLZANHgouGiM6PlcyMzoIwSQMOc4JaHcNFGgqdiPKMmB7c6MQTm4ScAymQDRIOLhovOjJbPjcyAMkoADXOCWx7CRRsJnorxjJoc3OrEEJiHnwAokw0QDS4aLjozWj43MgPKKAE0zAluedgULppaBAAAAAAAigC8YhygDAAAgHGAiwYAAAAAQDvgFeMAZQAAAIwDsYs+efLkZrUKpidPxXhGTU57vgp5MRB+sxHKZNaNvAy0DHlFqUStrVJcgHWVAVs+N6AMuYzkZTCa3PKwKWZ0s1Jc1ddGXgZEzYTc6kSED2V060ZeBlrCRcNFK5cOhDKqZCQvg9Hklodw0UaSp2I8oyYntzoR4UMZ3bqRl4GWcNFw0cqlA6GMKhnJy2A0ueUhXLSR5KkYz6jJya1ORPhQRrdu5GWgJVw0XLRy6UAoo0pG8jIYTW55CBdtJHkqxjNqcnKrExE+lNGtG3kZaAkXDRetXDoQyqiSkbwMRpNbHsJFG0meivGMmpzc6kSED2V060ZeBlrCRcNFK5cOhDKqZCQvg9Hklodw0UaSp2I8oyYntzoR4UMZ3bqRl4GWcNFw0cqlA6GMKhnJy2A0ueUhXLSR5KkYz6jJya1ORPhQRrdu5GWgJVw0XLRy6UAoo0pG8jIYTW55CBdtJHkqxjNqcnKrExE+lNGtG3kZaAkXDRetXDoQyqiSkbwMRpNbHsJFG0meivGMmpzc6kSED2V060ZeBlrCRcNFK5cOhDKqZCQvg9Hklodw0UaSp2I8oyYntzoR4UMZ3bqRl4GWcNFw0cqlA6GMKhnJy2A0ueUhXLSR5KkYz6jJya1ORPhQRrdu2j9la+FEd8nqHlvYqm5WqxuLY49ZltU1PHNvK3TlxuLYY1bpsbGFjfBNttZnhzutnhOL92U333N46tPMxYOLhotWLh0IZVTJSF4Go8ktD+GijSRPxXhGTU5udSLChzK6ddP+KVIXbZU6j82sB6+Mc9EbK5e+01WypC56fepwSfbz1ISLhotWLh0IZVTJSF4Go8ktD+GijSRPxXhGTU5udSLChzK6ddP+KXIXbVmlp89+8lC8UuaiHy7P/NP+kv0HUbe8tTY12O7eORvhouGilUsHQhlVMpKXwWhyy0O4aCPJUzGeUZOTW52I8KGMbt20f4rERZc6/+7v9pes9qcmbgoGOOyitz65PNhtWVZ734v/vW+XzEV/enlgj2wGeAOEi4aLVi4dCGVUyUheBqPJLQ/hoo0kT8V4Rk1ObnUiwocyunXT/ikyF/3Y2K9uTDzdbu16cqLieeCwi16fOvzFvqOXFtern14eeETiotenDpceybMoehMuGi5ag3QglFElI3kZjCa3PISLNpI8FeMZNTm51YkIH8ro1k37p8hd9MLGVuXsU7vEed3xu4vJXfTG4thjpcHL6+FdyhoiXDRctHLpQCijSkbyMhhNbnkIF20keSrGM2pycqsTET6U0a2b9k+Jc9HuGmlvXneDLvr+wlhP+8DUWr7iwUXDRSuXDoQyqmQkL4PR5JaHcNFGkqdiPKMmJ7c6EeFDGd26af+UeBe9Wf3dzLGvWu687sZc9NbCie4v5lwUvQkXDRetQToQyqiSkbwMRpNbHsJFG0meivGMmpzc6kSED2V066b9U5JcdHXz3szRrpI9r7sxF537jCubcNFw0cqlA6GMKhnJy2A0ueUhXLSR5KkYz6jJya1ORPhQRrdu2j8l2UVXt9Znhzstq/2piRsL6V20gjOubMJFw0Urlw6EMqpkJC+D0eSWh3DRRpKnYjyjJie3OhHhQxndumn/lDouuurN694/8HRnWhf96eWBR/Ivit6Ei4aL1iAdCGVUyUheBqPJLQ/hoo0kT8V4Rk1ObnUiwocyunXT/in1XbQ7r9uyrJQuemvhRPeenGdc2YSLhotWLh0IZVTJSF4Go8ktD+GijWQRit1bvDw20GnZ6D48NrVwTzzdZGt98adH+3ZZlmVZu/Yfm5hZedgKUSdzfepwyZKNxtxfGOuxImjvO/b61OK65FZb64tvnfXlLXUOjF1eXI9cU7TCcbLTK09H5uE3izJbKzM//pH7ONg10k/EJ8LeejqMUt/Rs28FKy6BsY+zdt30y5XCRbvzulO6aCVnXNmEi4aLVi4dCGVUyUheBqOZLw+31qYG261HJN219ktNglD7Wd4ad+HeeX3qsPRmlhU93zFNvHDRhlG7Yv4whYCu4RmnPbq1vvDa/lLcb42Nug69hzP6jCU8t6XOwUvLgZWE6wsTg52SK51dcwkVjpOdWnlKMg+/KZSxTzmWPFtPnVhw3p1yF+08OC9elvRAJTzO2nXTr1gaF11153WncdFqzriyCRcNF61cOhDKqJKRvAxGM1ceelY5ugFHrIu2GwNPn/3EfsvDRYPpvjad9394c+LpdmvX/mM/dYZx7i2cHegWGlufXh54RGjCPlyeejFmcZ1BUdfj1sKJ7lJ7b99flaKR2s9t6NnzBpPF622tLKtr4IQ/TL2+MDV2uKtkWV89Ovu7TTqF42Tn/IQyD78JlLE7p0udA/8sDD6vL1wa3l+y6k1aXvzpsb72+FdyzOOsXTfy746WcNFw0cqlA6GMKhnJy2A08+ThxuLYY9auv+r7z+1RK2u76Oh8qK2VmdcGOi1vWpndGpeNZotUNxMNLtpIalbs08sDj4TbnXbPjf3DaP4Fhz7MjLoONxbHHrMeOTz1m8sDj0SeZKmLrm5WvUNl3Ovt/8oGxzY+mXjSU5VI4TjZOT+hzMNvAmU+lT1x1dBDV2+4NfxOTXyctetG/t3REi4aLlq5dCCUUSUjeRmMZo48vL8w1mOVBi/fuiSxuHEuOvwruGgw3ddW9IfaQzd2zon/jv62laL26TXlP5Mt24h30YFlHvFLPqrVzer6wtSPz9oD1EQKx8nO+QllHn4TKJPwcPmMd9HS92Xy46xdN/LvjpZw0XDRyqUDoYwqGcnLYDSz56H/ppZ1ncNFw0UrZPGKbXwy8WTJW7j7u5ljX43MN9beEqXME/GRkwwLJzX0hfZ9Kj+wSadwnOycn1Dm4TeDMvY0DavUd/TsxBuzK9LZ10kuOvrA1nmctetG/t3REi4aLlq5dCCUUSUjeRmMZtY8DAwySV7ocS7aXbeFGd30371BLFoxe3cfcXerrZXrw33t/nL87sMTC7LNqE2O2qf9eAc22gma4UR7nNzBFqs5gcJxsnN+QpmH3yTKbKxc+16fsMFYqe/o2R+L29onuejwc1f3cdauG/l3R0u4aLho5dKBUEaVjORlMJpZ8zC4kjTau61kdzHvhnG7izW+vAsu2kgWqtjWJ5cHu8XtcDerW+uLE4eDm3i39/3Tdc1HMZHlSeR5tpvsncdmXFur3EXTKBwnO+cnlHn4zaXMvcXLExNnzx5zt6/ftX/sPfsZbMBF13+ctetG/t3REi4aLlq5dCCUUSUjeRmMZrY8jLzB7Ua1t+FugosOHQQLFw2m+9oK+iyJhbbzr9Q5MLHgHXxlW74W3V0s9hAd/3lTPaObSOE42Tk/oczDb15lnIMD6u4uJj32Sc3rM7Nu5N8dLeGi4aKVSwdCGVUykpfBaGbKw1jr60+6Ds/odlrFkeElzOgG031t+j/FPaipa/CsMHMyMh8y4YcmRh1lQs+Wt1A85e5izj7+wrnQ0Q/qObH4RyqF42Tn/IQyD59emfi3neicU+8uluZx1q4b+XdHS7houGjl0oFQRpWM5GUwmlnyMGG2tjdVW7Yu2tkzJXDqDVw0mO5r0/wRzrHGslnE8rORC9jqliZPxCO+Yn+e+qQruyKIP+nK6h5b2CJTOE52zk8o8/DplYnfmTOdiw6edJXqcdauG/l3R0u4aLho5dKBUEaVjORlMJqN56HduI2+voM/l7cEHt6ceLrdstqfmrjpvLvhouvz1tm+L0p6LLoGTtinBFWrm9V7M8e65Nf8eHY53E5aX7g07Cy0K/UdnYhe0HTU/Jxvrc8OdwbyMkB7QFVcirCxcuk7XTF70BsTtVyKeO8qLtuQ+t6Hy7MTR/t2Bce4nGc+mIrrC1Njh7tK3iIQKoXjZOf8XmEefhMoIzwyfg3vPTJJM7o3VmbP2rt3OlVZysdZu27K77mxMvvG2ECnNwuu79jrvlZigNLJLP6vYqe7u+MCrsKe/pZllToHRuP2TpcSLhouWrl0IJRRJSN5GYxm43kYv2GQM+w0PHNvK7Y/3d78ODwzFC46iTEuOjAlL8ZFOy2M137j7TXtNdGEhkJh28zk+do03t9JSmkjys5ge3gnTnwzo5bz08sDjwQ2JxdotzjbB6bWkqaJljoHLwX7ZdZ/M/ZUu+RKf6skKoXjZOf8XmEeflMoY+/OkPjIJNk/f+pHysdZu25Kb+jMG4oi+KZT6KKjL02roU3O4aLhopVLB0IZVTKSl8FoNpyH9jZActslWOKEWWnOWZj23O/E3cW8VzxcdPxb3pY4yUUHfLKzUZvtT7zmCMHq00a/No33j9u8zhI34BHHIqz2vmNnGxmLaMaoZUzc+LfqdqE9ffaTddlzW+ocGD0bHhGy+XB59v95/Zh3kJV0MIdA4TjZOb9XmIffNMqsL0xNnBjotmIeGbn96xo4MfGWu0Vf+sfZoLMGnHlDVqnv6Fkv0ofLsz+xtYrMc6vjomWCRPv+7fGBgZO2/s6ZfAnChgkXDRetXDoQyqiSkbwMRrPBPKy3565td5+auPlZrIsOzuuGi65Px0X/+bHZB94Pnf1aLcvqOjp7z3fRXzw285n3h+LMbfubsCf4WeFlq400CKjSlLwMiJoJmb+bmYcPZXTopuxu8fsshBeEq3PRks6I6NmeiYSLhotWLh0IZVTJSF4Go8ktD1vFRVermysT++u46Krfc++0LdzL+iaWnQs+vTzwiFXIvL6cXxt5GRA1E3KrExE+lNGtm6Jb2b3A8Qs97s0c7SoFNyfP76Kla8vvL4z1pN+1AS4aLlq5dCCUUSUjeRmMJrc8bBUXnWosurpZrW5+Nnv0i5Y72ux4ZsFFR311M5JVjjKPmpzc6kSED2V066boVnXPnxdtsCoXLb24bkkChIuGi1YuHQhlVMlIXgajyS0PDXbRcjg7x8S76IAJd28FF20CeUZNTm51IsKHMrp1U3Sr+K1NHYrmFi66iQgXrVw6EMqokpG8DEaTWx62mIvu/s7UJ4E9uuGiW4g8oyYntzoR4UMZ3bopuhVctKmEi1YuHQhlVMlIXgajyS0PW8ZFlzoHxi4vrrvX1J3RDRdtHnlGTU5udSLChzK6dVN0K8zoNpVw0cqlA6GMKhnJy2A0ueWhwS46vLtYgNhdrAXJM2pycqsTET6UPFb4VAAAIABJREFU0a2bolul2l3M3TpbuiuYzbgxbewupotw0cqlA6GMKhnJy2A0ueUhKxf9cHn2n50DeJ33/WfLE/9F+C9Oumpq8oyanNzqRIQPZXTrpuxu9gtLfsZ16KQr54SqzmMz4RPsA2ZbZOqTruwrcdJVasJFK5cOhDKqZCQvg9Hkloet7qLl8FsSG59MPFmyLKc7/+Hy1IudlpV+Zhrh10ZeBkTNhNzqRIQPZXTrpu5u7uyqUt/Ridllx8Q+XJ79yYmBbsuy2p+auOk5W6ePeNf+Yz9duLfl/Pni1ImB7piO45gxase6931vZmWjWt3cWpl5baCzka5nuGi4aOXSgVBGlYzkZTCa3PKQo4tu73vtN/e8ZsH6b8aeao/x2E1LVjnKPGpycqsTET6U0a2b0ht6nb/Jb7rqZnVrfeG1/aU0V9qMm+n98ObE0+2hW8jHw+WEi4aLVi4dCGVUyUheBqPJLQ+ZueiugRM/9jrsPa4vXBp22haBHv3mJascZR41ObnViQgfyujWTfk9N1Zm3xgb8Lx0e9+x16cWpX3BoStj3ok24/cA31qZmTjmGfL2vmNnZ1fSr4GCi4aLVi4dCGVUyUheBqPJLQ9NdNEg0+ecZ9Tk5FYnInwoo1s38jLQEi4aLlq5dCCUUSUjeRmMJrc8hIs2kjwV4xk1ObnViQgfyujWjbwMtISLhotWLh0IZVTJSF4Go8ktD+GijSRPxXhGTU5udSLChzK6dSMvAy3houGilUsHQhlVMpKXwWhyy0O4aCPJUzGeUZOTW52I8KGMbt3Iy0BLuGi4aOXSgVBGlYzkZTCa3PIQLtpI8lSMZ9Tk5FYnInwoo1s38jLQEi4aLlq5dCCUUSUjeRmMJrc8hIs2kjwV4xk1ObnViQgfyujWjbwMtISLhotWLh0IZVTJSF4Go8ktD+GijSRPxXhGTU5udSLChzK6dSMvAy3houGilUsHQhlVMpKXwWhyy0O4aCPJUzGeUZOTW52I8KGMbt3Iy0BLuGi4aOXSgVBGlYzkZTCa3PIQLtpI8lSMZ9Tk5FYnInwoo1s38jLQEi4aLlq5dCCUUSUjeRmMJrc8hIs2kjwV4xk1ObnViQgfyujWjbwMtISLhotWLh0IZVTJSF4Go8ktD+GijSRPxXhGTU5udSLChzK6dSMvAy3houGilUsHQhlVMpKXwWhyy0O4aCPJUzGeUZOTW52I8KGMbt3Iy0BLuGi4aOXSgVBGlYzkZTCa3PIQLtpI8lSMZ9Tk5FYnInwoo1s38jLQEi4aLlq5dCCUUSUjeRmMJrc8hIs2kjwV4xk1ObnViQgfyujWjbwMtISLhotWLh0IZVTJSF4Go8ktD+GijSRPxXhGTU5udSLChzK6dSMvAy3houGilUsHQhlVMpKXwWhyy8NmcdEAAAAAALQ8Ql6RujhNBCgDAABgHOCiAQAAAADQDnjFOEAZAAAA40Dvom/dvQOmJ0/FeEZNTruOIC8Gwm82QpnMupGXgZYhryiVqLVViguwrjJgy+cGlCGXkbwMRpNbHsJFG0meivGMmpzc6kSED2V060ZeBlrCRcNFK5cOhDKqZCQvg9Hklodw0UaSp2I8oyYntzoR4UMZ3bqRl4GWcNFw0cqlA6GMKhnJy2A0ueUhXLSR5KkYz6jJya1ORPhQRrdu5GWgJVw0XLRy6UAoo0pG8jIYTW55CBdtJHkqxjNqcnKrExE+lNGtG3kZaAkXDRetXDoQyqiSkbwMRpNbHsJFG0meivGMmpzc6kSED2V060ZeBlrCRcNFK5cOhDKqZCQvg9Hklodw0UaSp2I8oyYntzoR4UMZ3bqRl4GWcNFw0cqlA6GMKhnJy2A0ueUhXLSR5KkYz6jJya1ORPhQRrdu5GWgJVw0XLRy6UAoo0pG8jIYTW55CBdtJHkqxjNqcnKrExE+lNGtG3kZaAkXDRetXDoQyqiSkbwMRpNbHsJFG0meivGMmpzc6kSED2V060ZeBlrCRcNFK5cOhDKqZCQvg9Hklodw0UaSp2I8oyYntzoR4UMZ3bqRl4GWcNFw0cqlA6GMKhnJy2A0ueWhiS763dF9X7Ci2PPM8YnpD5xr/v3CC3vk15y6OHtbetubV17+umVZ1r6Ts9TfSpqvTfunLE2ffvmZ3Y5wXQdfPndlaSUglARfPjjxvtlRJ/PjcwfbrB2Hzr0f/pVckx37nv+Bn5MiVz64/saoL2/b7kPDp69/FLxmefbSPx7c0xbRv2hyqxN1hb80eWRPm9X25OjccuhXlbmTT7RZO3pP/sKvmuplyO1rxx9tsx4dvhKqzZauHN+307J2Pv7yFSfxwg/yv1x4L1wAYmVS8vavL5waObJvp1UnlqzSFcUCRbPrpa8fv35T+G/b7hcmI5VS6MqE+l8B4aLhopVLB0IZVTKSl8FocsvDFnLRlmVZO594dbZy906si3a8zStvhRsEH115td9pMcBF33Vb/CHs+e6FpZVEFy00wkyMug69wKNhJmjStvtvzwQ7boRkk2fvnVt3l3/x6pM75PoXHTi3OlFf+DK37PregLtOkSFSKxi10LdnR3t3hm+jyEAWmhjSQCzLaus9fk3sfsoqXYGkdtGWZf3lkUsfJl2ZVP8rKBhcNFy0culAKKNKRvIyGE1uedhiLtqy2vpPf7yS7KKDnfErH1w/d/xQl/9LuGjHwu18/IXTzvjD0rXRQ12W1db58rWK5PqVD6698nibdIjDoKjr8fa144+27fhGz//eFtUhMpJjy3L99JF9O4O6Lc9OHN5thaZOfHRlYvjgnja/dWsPeu/77o+cMbSVD66fPLjnC7oVjpOdVZ2oM3z7yRKflA8vvPCXQVeTLkMiVrDy3pln9rRZVtfBV695SVK5Ptxpte0+9I/2mG3lvZ88v2+nqt6uAhNj5f2J/h1CII4mZ7/7eJvYKZBRuoLZBC460pUTuLLR+r9hwkXDRSuXDoQyqmQkL4PR5JaHBrvoP3vh4g3vh85r3rKsPUcu/bvvor/w/IUV7w/dVpdvtu/ceu/k446z/k+7/1MbXPStu3du3X3/9KEvh1uZH5872BYzimUPXOgfKaV9MivXhzutLx+cuHr60Jf9/HEoddGCON71jlaHT0dmojoDlYfOve94htD0+JtXXv565HOLILc6UW/4zpiq7ehWPrj03d2hGbapMiRsBT0L/czErwSfI0lL21crsUMFJsb7socuEmAm6YontYvu+utD39gRmPkSurLB+r9xwkXDRSuXDoQyqmQkL4PR5JaHreKi73p+OMFF33GbrZa/gtf+qz39o9evOEPccNFS2iOxsUuCo1MEWyJqn147/rexFlc+xCdaYqk99vjRlYlToxPTH8SMbL8/0b9D85z5ONlZ1Ym6w7cdnbXnu/927X/a/xC6n1JmiGgF7ZkgVsRC35Gbz9gHmV6ZeCY8Xx4zSFdAyeW6FfVZUhf99ePXro32hhYR1FNYXdrcgouGi9YgHQhlVMlIXgajyS0PW8VFpxqLvnPr7p1bKxePfMHyJ6e998Mjzry1d+GiE1iZO/lEW2j44s6tuwkbbrVC1PIwJa3wpDaoMPqXxgzE3c3+od792+JkZ1Un6g9fWPQeXtabMkO8JPzehf83zkLH2EV1HrLIxHC6Htp6joydHLv0a9lAeqPSMXbR129GlujXUS+2/s9EuGi4aOXSgVBGlYzkZTCa3PLQYBcthzOwE++i44ay4aITaE9DlczZTt1yNTFqn6Fx4GjUiTr4DjxuYmqYlevDnZa1Y9/f/5szN9VbjAAXXTS1hO/M647OrE6bIY4VlO/1ELymJVz0LX9Rtxdxz5GxU8Lm2w1Kx9tFu//2jHFiDRZb/2ckXDRctHLpQCijSkbyMhhNbnnYYi7aG5CBi1bH2786/bddkUGzO7fuuv4wvFFNS0QdUCCyk5O9aZPvWxS7aHfTqUBu//Whb8RPWNUrO6s6UX/43rqS6L7HGVx02+5Dgwf3tFnhla6t5qIdLk2ffvXk6Njzzg4X/obkcNFRJrjo0NFr8TVYQv2flXDRcNHKpQOhjCoZyctgNLnlYcu46NChoHVndMNFp2NSEyp5IaLJUQdpjwxL4DfZ1c7otilshrfnmeFLv5rHumgKqg/f2QRr8Acvf3NHeAy5wWnJzo7c7tLo0GHULemiA0raC3nEwVXM6BaZ6KLd3pwdvSd/cTtGPQ0W+hZcNFy0BulAKKNKRvIyGE1ueWiwi47YYJGpdxeL3BYu2tfKPqhpT//odWkTKv3IqkFRR5lwFnSa+ZCBvobK9eHO6Jhh4IPibAD26Kah4vBtW2LvxhfYr9u5IG2GhK2gu9Y6MLjdKruLxW++IG45nlW6otk0LvqOO+dl5xOvXnsr/Ku69X92wkXDRSuXDoQyqmQkL4PR5JaHrFz08uylfzy4py04ihi+LVy0o9XE4d2BpbkRKt21tTmiljHuiJfAz1OfdGW34OMP47FvKDmOiK7pz61O1Bl++Lxod9MsYQw5XYbI8sF2RPUWGnx87qDkwHNyZRJpByvrQgo8KdmlK5TN5KK9CuobB/9rl/CrFPV/DsJFw0Urlw6EMqpkJC+D0eSWh63uouWQ7cQDF+1TnOkXe5nCg2ebI2q5FPGz1sUjvqQuenn20skj+3YGF6x6Y4bPHD91cdaR96MrE8MH97T5w5KObXAnUt7+9YV/eGZ37DibdtlZ1Yn6wvfOuBKGi518EJ61RjIkZAVtRyTkSWibusp7k8OHulRtB1hgYgia2KdVBTTxvV926YrNqKI+K4WLFlfpO79KVf/nIVw0XLRy6UAoo0pG8jIYTW55yNFF79j3yluSvUbhol06E02TVwIXvShae9Ryvn/60JfjNqd1LMqhc+8nzfpu2/23Z2YDjdGP3nq5d4dsfri7T9KdwGFIXt4WtYtbVHZWdaKu8JeuHN+3M7x0+e4dYVat10WSIkNirKA7uO31v0ieZVWJVGhiODPhk5+aRqSTParF9Ak2mYu+I+xlaM94T1P/5yJcNFy0culAKKNKRvIyGE1uecjMRQfGKOS3hYt25irXaUURHF9c/JNZb7zdXnf65OjcRzIX3bb70PdG/aEzkcuzl374gxd6dghXRk7B9cbQLKut58ircXlbhOys6kQ94UetssDAbsn2D+tlSOyAqjMX1+v6qbx3cdS/z87HXzh5QdEc3cIT46MrEyePH+qykp6a1NLBRYt0ZjF8/fj1m+nq/1yEi4aLVi4dCGVUyUheBqPJLQ9NdNEg0+ecZ9Tk5FYnInwoo1s38jLQEi4aLlq5dCCUUSUjeRmMJrc8hIs2kjwV4xk1ObnViQgfyujWjbwMtISLhotWLh0IZVTJSF4Go8ktD+GijSRPxXhGTU5udSLChzK6dSMvAy3houGilUsHQhlVMpKXwWhyy0O4aCPJUzGeUZOTW52I8KGMbt3Iy0BLuGi4aOXSgVBGlYzkZTCa3PIQLtpI8lSMZ9Tk5FYnInwoo1s38jLQEi4aLlq5dCCUUSUjeRmMJrc8hIs2kjwV4xk1ObnViQgfyujWjbwMtISLhotWLh0IZVTJSF4Go8ktD+GijSRPxXhGTU5udSLChzK6dSMvAy3houGilUsHQhlVMpKXwWhyy0O4aCPJUzGeUZOTW52I8KGMbt3Iy0BLuGi4aOXSgVBGlYzkZTCa3PIQLtpI8lSMZ9Tk5FYnInwoo1s38jLQEi4aLlq5dCCUUSUjeRmMJrc8hIs2kjwV4xk1ObnViQgfyujWjbwMtISLhotWLh0IZVTJSF4Go8ktD+GijSRPxXhGTU5udSLChzK6dSMvAy3houGilUsHQhlVMpKXwWhyy0O4aCPJUzGeUZOTW52I8KGMbt3Iy0BLuGi4aOXSgVBGlYzkZTCa3PIQLtpI8lSMZ9Tk5FYnInwoo1s38jLQEi4aLlq5dCCUUSUjeRmMJrc8hIs2kjwV4xk1ObnViQgfyujWjbwMtISLhotWLh0IZVTJSF4Go8ktDzW66ND7AIwyz9dGnjokyUpeBobkVicifCijWzfyMtASLhouWrl0IJRRJSN5GYwmtzyEi6bkSQAAAADgBLwH4wBlAAAAjANcNFw0AAAAAGgH3oNxgDIAAADGAS6ahpvVajaePHky89+aS55Rk9OuI8iLgfCbjVAms27kZaBl3fdgy6dWXICqWggtzJbPDShDLiN5GYwmtzyEi4aLNoY8oyYntzoR4UMZ3bqRl4GWcNFw0cqlA6GMKhnJy2A0ueVhcS464Uo+isNF5yHPqMnJrU5E+FBGt27kZaAlXDRctHLpQCijSkbyMhhNbnkIF10o4aLzkGfU5ORWJyJ8KKNbN/Iy0BIuGi5auXQglFElI3kZjCa3PISLLpRw0XnIM2pycqsTET6U0a0beRloCRcNF61cOhDKqJKRvAxGk1sewkUXSrjoPOQZNTm51YkIH8ro1o28DLSEi4aLVi4dCGVUyUheBqPJLQ/hogslXHQe8oyanNzqRIQPZXTrRl4GWsJFw0Urlw6EMqpkJC+D0eSWh3DRhRIuOg95Rk1ObnUiwocyunUjLwMt4aLhopVLB0IZVTKSl8FocstDuOhCCRedhzyjJie3OhHhQxndupGXgZZw0XDRyqUDoYwqGcnLYDS55SFcdKGEi85DnlGTk1udiPChjG7dyMtAS7houGjl0oFQRpWM5GUwmtzyEC66UMJF5yHPqMnJrU5E+FBGt27kZaAlXDRctHLpQCijSkbyMhhNbnlooou+dbbvi1YUXQMnphbXnWvuzRzrkl/z49nlrcANN1Zm3xgb6HSu2LX/2MTMykNNcpvkou8tXvZl6T48NrVwbyt0wU+P9bVblmVZ7X3DP11c112kwp/MrbWpwXbrkcNTn4Z/tbVworsUSa9d+4+dvizXYX1hauLEQLeVoKfP380c+6rVPbYQSNSt9cUp/w6yTNYnO6s6UVf48pyxLKvUOTDmp829maNdJav09NlPwrXQxicTT5as9qcmbm5VNxbHHpPcqe/o2bciebW+MDV2uKvkftboG7MrG02lDDMWKNr9hbEey+o5sXhf+G+p89jMep0ro/X/TxS+Fotx0cE3u9Xed+x1v4UQ5L3FyxOj7jMSaksI16gTBC5auXQglFElI3kZjCa3PGwhF21ZlrXryYnKRrUa66Kdt+lrv3Ebmhsrl77TFWnadr14WY+RNsZF2035sCzDM14DPXqBrN2vPFn1Rh2iZ3vChjbBEVmW1f2dqU8CLuXewlnfP9dV7OHy1IudkQ+1HVTo7x8bW1Bih+rKzqpO1BV+Us4EkkF0y/6f33vvRN8u7zK5i5ZUXw9vTjzdHr5CMEvNoAwzUrtoy7K+enT2d0lXblXOPrUrUrFFqsGs1O+i3Vo0AvHtv1mtbla31hcnDkdfdlbwAVQtCFx0ZqLagTK6ZSQvg9Hkloct5qItqzR4eX0r2UULnfFuq6L01ImF9c3q1vrCa/tLVkxvvQIa4qLtlveu/cd+6oxrOT7Qs22/mzn2VcEuri9MDHZaVvvA1JrmZNUZdZgbi2OPWbv+qu8/t0ddh+2Iwq2o9YVLw/tLQZey9cnlwe7IeKM7rCF2TFSrm1sr14ed4f3gze1E7T782szyVnWz+nB55p/2l1S2a5NlZ1Un6grfzhmnghJ/vjLz2kDw8bEfQLEWsp843/xsLI49Fu1G8aaHeIlhf2jXwEl7/NlJMDX9L8wTI49uRX1WnIuO9NEEr7Szq3Pgn+3h1o2Va9/r26Wq82VTu4veWp8d7rRCUzMeLs/+xJ7LI8budqOLk4O8WT/+A6hcELjozES1A2V0y0heBqPJLQ8NdtF/fmz2gfdDf7iv6+jsPd9Ff/HYzGfeH3omxzPbriHvm1h2rvn08sAjavvdRRrioj+9PPBIWIH1qcOebVufOlwKeeZPLw88InEISlnsk3l/YazHKg1evnUpEmyci656DTj3evu/pc7BS5HZ17ZT8qeLu+25Xfv//sWwQ5Z8XGQGpk7ZWdWJusKPc9HSXzljX7ZtdrNI6NqTu+hq1fXbTl5JLotNXTplmJHaRXf/HwO97f68reiVkrolPt+yUK+LdnqOpBPKAk9HpDtYvEnl7FO73EdSvSBw0ZmJagfK6JaRvAxGk1setoqLrlY3Vyb213HRVb+XWrrYtVqFi47l1sKJ7pJtDjcWxx6LFVAjC43a7ymQdRAkWRHx+sTOhXuLlyd+7A5Qb61NDf65vbxc7LAIF8b/88K+BW51oq7wG3LR3hz+ruHrC2ftf4jTFpIa8X62SBf2u91DuTu8mCdGHt2K+iypi+45sbBw9qldwRUl4pWxNZ6q2UY6XbSd86E+AoH3Zo52uYHI6lXvPuuLb52dsIey1QsCF52ZqHagjG4ZyctgNLnlYau46FRj0dXNanXzs9mjX7Ti1pR6q081TU4210VvfDLxZMlumtjNlJ4Ti3f8sX1vyqhOFhh1wH40OKAntEezjftFXLTUMqkdHUqWnVWdqCv8OBftTsOO1DnCkmZnyYn/26Rv38866YQFZbMYmCdGHt2K+qwYF714P7L2vl6tpW4Kw6ZeF103vX1LnLYK1SAIXHRmotqBMrplJC+D0eSWhwa7aDmcEZt4Fx03lB3YaSy6+Yoamuqi7eltjrZ2M6Vrf19o5bku0SiiDs5pjzaYkppQggNPGuuIJ1x0M1Gxi47dq0G21Zwzr1vyLSd++55P+CNcdBOyGVy0+29vzLZlXHTdtUVepH+MPYIhRLjoZiKqHSijW0byMhhNbnnYYi7aW+DUsIsWLLR0FasaGumi7f2x/NEwd4saf/zZ3eZU82ZXhUUdsSh2yEI3AVw0G+p30XGn63nLTyK70MFFm8zmcNGhM9XgouMJF91MRLUDZXTLSF4Go8ktD1vGRQf3QK4/ozvgosXzriInYaikeS46bKGrEktZrW7607w1bnZVVNT+TrYh+H4YM7rZUNuMbqfvqb3vn65Lz9WzTU7X0Otj/6U9cmoAZnSby2Zx0d5WiE9N3NxqGReNGd0tTlQ7UEa3jORlMJrc8tBgFx2dki2wkd3F7INY9VvoTcNc9Nb64k+P9u2yugbPLoprMqWGWbqPkWIW9GQmzLz1pt2m3V3M3skp5iTtuJtgd7FmojYXXd30txCL7CfsHJD21aOzvwvu1+3+IXYXM5ZN46Kr7ibVu56cWPgNp93FnNrVDip86JdD4RHD7mJNRFQ7UEa3jORlMJrc8pCVi364PPvPh+0xZ++N6LRQi7DQmya56IfLUy92WpZ0oEzm31pmLNoOJOpPgj9Pe9KVe9Bo7ElXMiMUddGSjytCcE92VnWirvDlu4s5W4gFm/Lh86Idsy10x2Q/6Up6jh2tMszYTC7am9fde/jvuhNOutpcnzpcMuqkK3nfZeikK+for9iTrrQJAhedmah2oIxuGcnLYDS55WGru+iYIUW3eWpbkeAwo04a4qLFmX7SCz69PPCIMEbdSuui45fVOceQDs/c24qZ47cyM3Fsf9DteBtEdQ6MvuFtY35v8fLYQKdsvetmVeai3a2A9g9fW96q+v1BmgX3ZGdVJ+oKP26PbidD/NEz74wrITfCZls+yX9l9qy93bf35Dof2ve9mZWNanVza2XmtYFORQsBmCdGHt2K+qwULlpcfu/+amNx7DGhC3VjZebkQLeSVQA29bpoL6JS39GJWbf78uHy7E9ODHRbwfeaeypH9+Gxn7h7E2ytL06dGOi2xG4s1YLARWcmqh0oo1tG8jIYTW55yNFF+2POCXN3JduSKaAZLloYn4/0PzgewDsSTEBL7NG9PnW4FF6D6tJugz5yeOrTxP2WIyMbwpKBoJjh44uEMoRPLJcJHj9rUbXsrOpEXeHHnxcdGGq2s0XSqedNvq1suM16OQLzw4XjsvzEU9NjyDwx8uhW1GelcdFVN7Us/1eyV0B8p2rD1Oyiq95cqigiM8621hde2y+rywNXqhYELjozUe1AGd0ykpfBaHLLQ2YuumvgxI9n/bm1KxP741qinF207eKkEDyAN/BlWVZ73/BPF2WGUCn1P5n1dqaxV5w+NXHzM6mL7j48NnFZqsPWysyPf3TU99Li0EeM/uFx5ofLsxP+HQLDLNplZ1Un6go/3kULQ80jr//9V2P7R4RNleUuumvgxMRbC6HZDd4UCedRPXZW0dHuzBMjj25FfVZKF+2mlvArsXqP30Y+I/W7aCeEN+wpP27mvz61KOserW6szL5x1n9Gwu0EDYLARSuXDoQyqmQkL4PR5JaHJrpog2mGi25W8oyanNzqRIQPZXTrRl4GWhbjopuZcNHKpQOhjCoZyctgNLnlIVx0oYSLzkOeUZOTW52I8KGMbt3Iy0BLuGi4aOXSgVBGlYzkZTCa3PIQLrpQwkXnIc+oycmtTkT4UEa3buRloCVcNFy0culAKKNKRvIyGE1ueQgXXSjhovOQZ9Tk5FYnInwoo1s38jLQEi4aLlq5dCCUUSUjeRmMJrc8hIsulHDRecgzanJyqxMRPpTRrRt5GWgJFw0XrVw6EMqokpG8DEaTWx7CRRdKuOg85Bk1ObnViQgfyujWjbwMtISLhotWLh0IZVTJSF4Go8ktD+GiCyVcdB7yjJqc3OpEhA9ldOtGXgZawkXDRSuXDoQyqmQkL4PR5JaHcNGFEi46D3lGTU5udSLChzK6dSMvAy3houGilUsHQhlVMpKXwWhyy0O46EIJF52HPKMmJ7c6EeFDGd26kZeBlnDRcNHKpQOhjCoZyctgNLnlIVx0oYSLzkOeUZOTW52I8KGMbt3Iy0BLuGi4aOXSgVBGlYzkZTCa3PIQLrpQwkXnIc+oycmtTkT4UEa3buRloCVcNFy0culAKKNKRvIyGE1ueQgXXSjhovOQZ9Tk5FYnInwoo1s38jLQEi4aLlq5dCCUUSUjeRmMJrc8hIsulHDRecgzanL2M9Q/AAAgAElEQVRyqxMRPpTRrRt5GWgJFw0XrVw6EMqokpG8DEaTWx7CRRdKuOg85Bk1ObnViQgfyujWjbwMtISLhotWLh0IZVTJSF4Go8ktD+GiCyVcdB7yjJqc3OpEhA9ldOtGXgZawkXDRSuXDoQyqmQkL4PR5JaHzeKimSCkCXVxAAAAAKBQ4D0YBygDAABgHOhd9K27dzgwpEnm+/BRDFGT064jyIuB8JuNUCazbuRloGXd92DLp1ZcgKpaCC3Mls8NKEMuI3kZjCa3PISLLpRw0XnIM2pycqsTET6U0a0beRloCRcNF61cOhDKqJKRvAxGk1sewkUXSrjoPOQZNTm51YkIH8ro1o28DLSEi4aLVi4dCGVUyUheBqPJLQ/hogslXHQe8oyanNzqRIQPZXTrRl4GWsJFw0Urlw6EMqpkJC+D0eSWh3DRhRIuOg95Rk1ObnUiwocyunUjLwMt4aLhopVLB0IZVTKSl8FocstDuOhCCRedhzyjJie3OhHhQxndupGXgZZw0XDRyqUDoYwqGcnLYDS55SFcdKGEi85DnlGTk1udiPChjG7dyMtAS7houGjl0oFQRpWM5GUwmtzyEC66UMJF5yHPqMnJrU5E+FBGt27kZaAlXDRctHLpQCijSkbyMhhNbnkIF10o4aLzkGfU5ORWJyJ8KKNbN/Iy0BIuGi5auXQglFElI3kZjCa3PISLLpRw0XnIM2pycqsTET6U0a0beRloCRcNF61cOhDKqJKRvAxGk1sewkUXSrjoPOQZNTm51YkIH8ro1o28DLSEi4aLVi4dCGVUyUheBqPJLQ/hogslXHQe8oyanNzqRIQPZXTrRl4GWsJFw0Urlw6EMqpkJC+D0eSWhya66HdH933BimLPM8cnpj9wrvn3Cy/skV9z6uLs7eANl6ZPv/zMbvuCtp4jr0YuUEeTXLQoi9V18OVzV5ZW/N9+fO5gW1jdHYfOva+zSBRP5vunD33Zaus//fFK6FeV68Od0QRr6zky9kZAKJ8fXZk4efxQl3tpRNKA+JNH9nyh8+VrlYZ+pU12VnWirvBvXzv+aOSZEfHo8JWPJ4/sabPanhydWw79eWXu5BNt1o7ek7+43VDufXRlYvjgHvtz23Yf+t7YpV+ryhzmiZFHt6I+6+aVl79uWV8/fv2m8N+23S9MflDnyju3bv/6wj+49b/0vZmDxbjoynsXx/xXmLVj3/M/8FsIQS5Nn371e+5jEmpLRC9WUAPDRSuXDoQyqmQkL4PR5JaHLeSiLcuydj7x6mzl7p1YF+28TV95y2trLk0e2RNu2tpNVR1yG+OiZbJYe757wdVN2o5vPRfthtkWbTPJnYwj1OHT7wVd0NK1Ud8/C5D5pVu3f3X6b7ukH5r0K52ys6oTdYWfxkXfDrhl/2+Xrhzft9PLltS5t/yLV5/cEb5CcEpNogwzUrtoy7L+8silD5OudOqZQFUl894Zqd9FL89OHN4dznzLCr397965dXflg+snD0ZfdnHNAEU1MFy0culAKKNKRvIyGE1uedhiLtpyhw2TXLTQIPBaFbb9/uitl3t3WJZl7Tly6d91yG2Ii7Yb3zsff+G0M7TlmECv6bDy/kT/DuvLByfeLzhZi/w4Jz3a/rfHv7HTdjjibyvXhzujbaml6R+90LPDsgLXuw2v3YeGT1//yLvSGeoX+iZu3b1Tee8nz+/baWdp6OYJv9ItO6s6sZDwE54g++kTTcuHF174S9H5pM0927fveWbYHn++/et/+796dqhLHuaJkUe3oj4rzkVHLaJ45coHl76722rbfeikXf+7NY+y/hfNLtouf2h2xvLspX+xpwKJsVfeO/PMnrbgzKCVD66fO36oK9pxoLAGhotWLh0IZVTJSF4Go8ktDw120X/2wsUb3g/9sT7bALsu+gvPX1jx/vCjK2e/+3ibaLY/ujLxP47s2+ldduPS839mWZb1hcdffVeH3Ia46PdPH/py2DfaU7idH0am/xXCop/M29eOP9q249CZGZnhkTuZu3dcz+Nd7zZJ//ZMZEqk7Ze8K93xk7ae7zwXcjsJvypCdlZ1YiHhJ/ZD3Z4d7d3p2mY3f4QGfcrck1xm++pIl1AzKdP6pHbRXX996Bs7/Hlb0Sujy1gUV/h6XbTTeRSZEHT3TqRytv/b9czEryKzfmZHe3cKIiiugeGilUsHQhlVMpKXwWhyy8NWcdF379x67+TjdVz0Hb+XWtp+9aaxSefZqqAhLlpGx1Lac7ZjVwtrZbFRCz7n43MH28Lz1eOdzJ3g9YlaLU2ffvWUO0D9/ulDXY+/cPrK0m/fn+gPNtQSflWE7KzqxELCrzObw57Xbe357r9d+5/2PwITFlLlnvQj7OkVap5c5omRR7eiPkvqor9+/Nq10d6dwddcgk9e+eD66SP7JPNxMlOni7bTPtRHIHBp8sge90Umq9iFqN8YfdUbylZcA8NFK5cOhDKqZCQvg9Hkloet4qJTjUXfuXX3zq2Vi0e+IJsu6y013NM/6k27VU1zXXRl7uQTbW7TxBnROjL6ujO2v2Pf86Pqdi1qjqhF9ytpYiY5GXHEL8vo30p8Qy3hVxplZ1UnFhJ+3TURwpLmtt7j1wI1Urrck/oilYOKzBMjj25FfVaMi75+M7L8XpoYdpZaltW2+9A/XpAM7WakThddN8P9ij3pOYqlmhoYLlq5dCCUUSUjeRmMJrc8NNhFy+EM2sS76JihbHcut2VZXQf/YVLTNt2mumh7eps3ICbboNtK6P5XxEKj/vjcwTa/qRRtbyW2wAQHnjTcEUe46CYikYv25nXH7WxXN/duwEU3J5vBRbv/9irthD4XdzMRd5l0fup00XXnSXmR3si0uwdcNDFR7UAZ3TKSl8FocsvDFnPR3gKnhl30rbt3bt1d+eDaK4+3Kdg7JI5Gumh7orswIGaP24ubnTrbrmie403X+vTW2oV2KYeLbn0SuWhv7Ul4OvctuGjD2Rwu2j2IwZnXnZwYH115tX+3um264aLhopVLB0IZVTKSl8FocsvDlnHRwQ2Q68/olrroO847WG6/FdA8Fx2x0DEsYtfuAqOOO5TIDxAzupmQxkXbDmfP4A9e/uaO6F7BmNFtMpvFRbs9NTt6T/5Cni0iVe6FgRndcNHKpQOhjCoZyctgNLnlocEuOsYG28y0u5j4h9Y3R9/7rXK5jXLR7qYyqRaKt5SLTjiP11tJmHp3MXs/p5j96uQeGy66iUjgop1tDv/yyKUPg/t1OxdgdzGj2TQu+o67SfXOJ1699laLuOhUu4uJXZzyc6FjnzK4aGKi2oEyumUkL4PR5JaHrFz08uylfzy4p82y3JOunBaqOOHWHYtWtx+pSHNctHOwx459f/9v4U1lEvah0Xv2VVFPpp0D0VgCP0990pVzZfxJVw011OCii2bhLjp8XrSzX7fQEZP9pCvpIXbNpUzrs5lctDev+xsH/2uX8yu7ay9kmJWekabTRbtFlXdchipn5+iv2JOuJG8BuGhiotqBMrplJC+D0eSWh63uouVwW6iui3ZnLLtnQnJfFy3O9JNcIFsXfeaZPcraWERRu4xfyez44RcmP4hxMpX3Lo6+0LMjJJ27TdTuQ98b83YyX5o+/fIzu2WrXuGim4oFu2jvjCshK5z9upPnQUhyz7ETPc//9NeVu3du3f71hX94Zre65GGeGHl0K+qzUrhocQW+8ys733Y+/vIVdx2Bsy5aVeboddFeRG09R1696PZdLs9e+pfjh7qsYOXsPG5W18GX/8XdhHzlg+vnjh/qsuTrwOGiiYlqB8rolpG8DEaTWx5ydNEB++e8RGMvUEszXLTXuSDpf7AHKD566+XeHeFf1V07rSBZtd7/1t07biMpMIFWUMYfpUmY9W3tOXw6NIC/dOX4PpmkctHgopuIhbpoO08kw2jezNvZSuKKg2DuCcdl+SkXs7igWZRpfTaZi77jZpfl/0r2ClD4WtTsou8IHeJhRKLwthSte6VzPVw0LVHtQBndMpKXwWhyy0NmLnrPM8dPXQxNrPXGcCwr1Hutnma4aPlBVrY+3jS/j65MDDvT462dj7/wP05rO2S7oKht1pm46C+6W5I6mT3PHH/1Dfl5MLd/feHUyBHfS4ujH9JPgYtuChboogNWOfwnwo7Kchctzb3bv77w6vOeSVB7rjvzxMijW1GfldJFu9kVOJXAnrmg5bWo30XfuXX3TuW9i2MvP+N56R37nv/BxLR0j/HKexfHxvzHRNpOcAkXTUxUO1BGt4zkZTCa3PLQRBdtMM1w0c1KnlGTk1udiPChjG7dyMtAy2JcdDMTLlq5dCCUUSUjeRmMJrc8hIsulHDRecgzanJyqxMRPpTRrRt5GWgJFw0XrVw6EMqokpG8DEaTWx7CRRdKuOg85Bk1ObnViQgfyujWjbwMtISLhotWLh0IZVTJSF4Go8ktD+GiCyVcdB7yjJqc3OpEhA9ldOtGXgZawkXDRSuXDoQyqmQkL4PR5JaHcNGFEi46D3lGTU5udSLChzK6dSMvAy3houGilUsHQhlVMpKXwWhyy0O46EIJF52HPKMmJ7c6EeFDGd26kZeBlnDRcNHKpQOhjCoZyctgNLnlIVx0oYSLzkOeUZOTW52I8KGMbt3Iy0BLuGi4aOXSgVBGlYzkZTCa3PIQLrpQwkXnIc+oycmtTkT4UEa3buRloCVcNFy0culAKKNKRvIyGE1ueQgXXSjhovOQZ9Tk5FYnInwoo1s38jLQEi4aLlq5dCCUUSUjeRmMJrc8LM5Fg1Hm+drIU4ckWcnLwJDc6kSED2V060ZeBlrCRcNFK5cOhDKqZCQvg9Hklodw0XDRxpBn1OTkVicifCijWzfyMtASLhouWrl0IJRRJSN5GYwmtzyEi4aLNoY8oyYntzoR4UMZ3bqRl4GWcNFw0cqlA6GMKhnJy2A0ueUhXDRctDHkGTU5udWJCB/K6NaNvAy0hIuGi1YuHQhlVMlIXgajyS0P4aLhoo0hz6jJya1ORPhQRrdu5GWgJVw0XLRy6UAoo0pG8jIYTW55qNFFpwcrxVV9beRlQNRMyK1ORPhQRrdu5GWgJVw0XLRy6UAoo0pG8jIYTW552CwuGgAAAACAlgf5LDBTSP1FAQAAAPVB76I3q1UwPXkqxjNqctp1BHkxEH6zEcpk1o28DLQkd6emkPybakKi2oEyumUkL4PR5JaHcNFGkqdiPKMmJ7c6EeFDGd26kZeBluTu1BSSf1NNSFQ7UEa3jORlMJrc8hAu2kjyVIxn1OTkVicifCijWzfyMtCS3J2aQvJvqgmJagfK6JaRvAxGk1sewkUbSZ6K8YyanNzqRIQPZXTrRl4GWpK7U1NI/k01IVHtQBndMpKXwWhyy0O4aCPJUzGeUZOTW52I8KGMbt3Iy9DkbPnUavkAIR2UMZTQML+ArDSEizaSPBXjGTU5udWJCB/K6NaNvAxNzpZPrZYPENJBGUMJDfMLyEpDuGgjyVMxnlGTk1udiPChjG7dyMvQ5Gz51Gr5ACEdlDGU0DC/gKw0hIs2kjwV4xk1ObnViQgfyujWjbwMTc6WT62WDxDSQRlDCQ3zC8hKQ7hoI8lTMZ5Rk5NbnYjwoYxu3cjL0ORs+dRq+QAhHZQxlNAwv4CsNISLNpI8FeMZNTm51YkIH8ro1o28DE3Olk+tlg8Q0kEZQwkN8wvISkO4aCPJUzGeUZOTW52I8KGMbt3Iy9DkbPnUavkAIR2UMZTQML+ArDSEizaSPBXjGTU5udWJCB/K6NaNvAxNzpZPrZYPENJBGUMJDfMLyEpDuGgjyVMxnlGTk1udiPChjG7dtH/K1sKJ7pLVPbawVd2sVjcWxx6zLKtreObeVujKjcWxx6zSY2MLG+GbbK3PDndaPScW78tuvufw1KdaJWrt1Gr5ACEdlDGU0DC/gKw0hIs2kjwV4xk1ObnViQgfyujWTfunSF20Veo8NrMevDLORW+sXPpOV8mSuuj1qcMl2c+VStTaqdXyAUI6KGMooWF+AVlpCBdtJHkqxjNqcnKrExE+lNGtm/ZPkbtoyyo9ffaTh+KVMhf9cHnmn/aX7D+IuuWttanBdvfO+iRq7dRq+QAhHZQxlNAwv4CsNISLNpI8FeMZNTm51YkIH8ro1k37p0hcdKnz7/5uf8lqf2ripmCAwy5665PLg92WZbX3vfjf+3bJXPSnlwf2yGaAK5aotVOr5QOEdFDGUELD/AKy0hAu2kjyVIxn1OTkVicifCijWzftnyJz0Y+N/erGxNPt1q4nJyqeBw676PWpw1/sO3ppcb366eWBRyQuen3qcOkRrYuiNxmkVssHCOmgjKGEhvkFZKUhXLSR5KkYz6jJya1ORPhQRrdu2j9F7qIXNrYqZ5/aJc7rjt9dTO6iNxbHHisNXl4P71KmXKLWTq2WDxDSQRlDCQ3zC8hKQ7hoI8lTMZ5Rk5NbnYjwoYxu3bR/SpyLdtdIe/O6G3TR9xfGetoHptb0S9TaqdXyAUI6KGMooWF+AVlpCBdtJHkqxjNqcnKrExE+lNGtm/ZPiXfRm9XfzRz7quXO627MRW8tnOj+ou5F0ZsMUqvlA4R0UMZQQsP8ArLSEC7aSPJUjGfU5ORWJyJ8KKNbN+2fkuSiq5v3Zo52lex53Y25aP1nXHkStXZqtXyAkA7KGEpomF9AVhrCRRtJnorxjJqc3OpEhA9ldOum/VOSXXR1a312uNOy2p+auLGQ3kUXccaVJ1Frp1bLBwjpoIyhhIb5BWSlIVy0keSpGM+oycmtTkT4UEa3bto/pY6LrnrzuvcPPN2Z1kV/enngkQIWRW8ySK2WDxDSQRlDCQ3zC8hKQ7hoI1mEYvcWL48NdFo2ug+PTS3ck+/LuvHJxJMlaTvMwKgD3FqbGmy3ZMe62I3UMHbtP3b68uK67FbrC1MTJwa6rRR6Og3c8JjP1vrilH+HroETU4vrheiQv07cWJl9w88lq73v2Otxhb+3eHli9HBXKT5Mu3EfhHTT4PWpwyUrf6Of2ysByhSgm/ZPqe+i3XndlmWldNFbCye69+g+48qTqLVTK3uA9WrI+Cn61c1qODGE2753om+XZe3aP/aecLeHy7M/EV5bkhdcwscJO8NLX5cCGpng0Lh09xfGeuI/+5HDU5/cnHha/qK3KXmVtIYyoFxG8jIYTW55CBdtJLUr5jewBHQNz0SNn310SsJr26Cow6G5b7jomyzp5df9nalPgq3VhbP+61aAcN6MwIfLUy92hj/UmYEZ+vvOYzMFGOn/v73zfY3jSvP9+SvU0psJk1cCkze5F7R6oc6LRDAhsDPGCmOshQSWXcXCcy8IrdFiJ8sMQZKRyM4yWWlbSibcQRO5jZnoklhGWCyyEGl2Z6wby4ozHlnKtKXABCGWrBULvbsvTv2uU9XVXX3q/Hi+D98XiVXdXc+nnz7nfOucOpWvTXTTiUXn4AdfhMrp5HC7OhKvusB+wonkBS7aGznlvY2TWpcAMgVwk/4pWVy036pkctHFPOPKQ2R3abWUYKYWshUXLbTQJ1/fvizqtsKHmeAVG7rob1IvufKL6cHLSdaQgcQYlZ+D0aJWh3DRRkoysaePq291sjMXJj5z5ksdHxjvEviRzEoXfbxdeYWd+engjzvjTkx8Rf9wa3nqQhdjgh63q2+04l+r9ub5IxcmTurrU4Od8e7Tecrr4Pgyn3bwhlOa7/TjDtO7BscX77hz7/5V/NDgr778D+Wu8Cy9N/0euF6QcYb5ZGu2v6vz/OBPc6+SoNYlgEwB3KR/SiYXfequ687iogt6xpWHyO7SaiHBjC1ksy7af9vqVuCaLC+M8Lqhk/rGTT4N7mzwnv5xSdduEld4yULHXXT6J35ze/RF8Zom/iefmE1kIDFG5edgtKjVIVy0kZJMLNJtnD47ddyLaIL01V9Ufp7WbRuTdUTfbVXOsa7Lt3eXBbYtaV2ct22Pczz/366+y8t70SOfRlaRuaOZMxfefftCBPXhykjUDfIetyDsLZLnlMpv367Hp9z5WMRLn/9vbBr/1LuC4IxvGowRXR1vV15hL46sfJE8NpKfvu0CmZa5KT8HzWV9aTWfYJtayMjlFddCR96Wv4mo2/I2eG/8cdp4xSwu2usyosfwi+kRb2wLGUiMUfk5GC1qdQgXbaQUEOOTe0EzebQxXn6+b2LjL9mMjWFZ+3OeoqvUiS76NHxVO+UKN7/D7aY7QX3yl5XLPxyc+mz7UHTBQqCkXl8G9pbI8zGBP/6Ipb8xXnYrKnVB3eH2ncUqn8rOOM7wsH+fc1ySI337BTItc1N+DprL+tJqOsGsLWR2F31yuPXBhS4mcua8/RTecHTqXhp2GlUTvGImF+2McIJ3D3mv9Xtwy8hAYozKz8FoUatDuGgjVTyx46+rb3QFHdG3GxOv8gXJGacHjco61J8JEkxz0bzPPje7/V3qYcnK5KKfPq6+1ZnYnbcZe0vkAxzEB/iXGDKXEH/PH49Xq+ODZxhfK16tRacFgiPO1r6CNqRvv0CmZW7Kz0FzWV9azSaYvZPN5qJnNr5IstAZ2sxAA2uCV8zmop3VYeEOKzJ5YBsZSIxR+TkYLWp1CBdtpIomxteM+TfxnhzWpvq63pzdOnzWTAdvTtbhNe3xvjOtNw30ha1tE53BRfN90fXeXSx1Hv70NGCz/yvz6EG0QXdk+7HoZjANzbyk9O0XyLTMTfk5aC7rS6vJBJvwV5lctB+iTqRhtxXo/kzwiqm7i6XeOXW8XXkl2HfYRgYSY1R+DkaLWh3CRRupQonx/bFcz/zMuZnqxSy7aBiadSwj3g2/Ol771mWi0kXzm9lie1xLxK6Li+bYA6Xo7scWeG18+xx+J1urVxyodQkgUwA35eeguawvLQ1cdFff6M8jG2I5ss0rZnbR0WdMfrdVORez2TaRgcQYlZ+D0aJWh3DRRqo4YjELzeelm3i0hnlZJ3a62VZ2yV3RXbCFfqbXiu5EXN5Xc7xdeUX45bW6xxi1LgFkCuCm/Bw0l/WlpXhFt7Mjt3trdOTOINvWLWdc0e2ds9tnHW2MB2YLbCQDiTEqPwejRa0O4aKNVCHETg63PxsfPMPKlxe9RzSluBTGZD94qaA6SXmEozfayLq7GN+bJOHu5aQ3SXTR/ElaXX2j1a2iLPQzybuLOWmKd3Zx1GBcGHLRKdMOyWciJX37BTItc1N+DprL+tJqOsHMLWSTT7pyn1UZeuZilj203I9InJ5N8oRau+hnJ1uz/c+/Utk65ucZvfZqGRlIjFH5ORgtanUIF22k5BN7urfydh9jnYP/sh5+TJHtLjrpCVLhf8/6pKuUB2Pw4YtouCN00c5zp89cmFoTPGNDplpvE50F2MIxR+RJV3ygk/wcF3Zudvs78QAxeDNb0gWIbNuetzl92wUyLXNTfg6ay/rSatUKNmghnzX/vGjvmeHBe154Ly827eHnObmPMwya8ODbxocEertofnrlqY2j/dujL8Y9sF1kIDFG5edgtKjVIVy0kZJMzLWCCVe+I7JrRXfy3bzBTlHook/qG9WJ6AI5Z4jT1Tc6c6NWdxAdbd+ujPZFZwBcCSwf73dbnE3Nj71V8k4hhXfSfrpX+2R2tJ+FC+z46+obXYyx/pHKJxvOhZuTw+2V2dF+f4QnuC+aX1zgI5KUUUjszvYi0rdcINMyN+XnoLmsL60WEszUQrbiol37x2LP4GCsc3Bi0eu2TuobN2dit1I7y386+WManTd0OzjRhWa9XTTvf18cWfz1SJdwVsAmMpAYo/JzMFrU6tBEF727OPi8YB60PDq7su1eTD3amCiLj7kZey6OJ8fwMDZY3VP9xTT82iS+v8dBsKRZYC+tctGHKyOJe18HOuOUVd/x6YKjzdlBEc+gG4yeQ6iXdcdPgmh667KWsOcg7yxqEJx59NZu7/mlKUcKjzlzobJ5eHrqXAERXpjw5hCax0WtSwCZAri1/T2P67UbfHTu/GQmfuv3hlwp+xT4f0pdasSY384fbq1URsrePlWBS4RtQmR3abWUYJYWMmWxWNpWHU4XI7hAGQ+vvXXVXAen2e5igk7h242JH/9Vubczae2SPWQgMUbl52C0qNWhRS6ascCFwAQXzRtN8c5M7g1CjLyL5i5OGJa76EYbYvE7nd6sPv5e6KL7RyrV29siY3xS37j5m3G/Qw3OJyTw97tw3rkmFLPuLvr0WaYhfuDIxQl/pCi47OVNv0TfqlEdpt/SJjF9WwUyLXNr6xtmvFDVRhcd6Cv9aOftPNaXVssJNmwhW3PRfhWFrkL664YYY4yduTCxkNzBzbhXVVhqB6e/i+YM01d+2UEGEmNUfg5Gi1odWuaiPZuX5qLFz0h0FjUxxsi7aF1FM2vlotYmIn2Qkc2tfe8WuGli8Y676aDwpolMLjr87wm3tzj3tozO8fln52lz7byQan1pWZ8g0IGMoQLD/ABJMTTYRf9wovbf3j8ebS061wXL47Uj30U/P7HxvfdCvsVx0Gx7f3LudYGL1lk0s1Yuam0i0gcZ2dza9m6OoX37tmB2S7iBXxtctGDRR2uP9EtFZHdpWZ8g0IGMoQLD/ABJMbTFRZ+ePqtXLzRw0af+lfvQshlvM62f/+L883DR2opm1spFrU1E+iAjm1ub3irTw+TCD4HL76KF6075I/1afCS7EJHdpWV9gkAHMoYKDPMDJMXQFhedaS769Nnp6bPva+PPMxa8lO6s5T43u73trBWHi9ZSNLNWLmptItIHGdnc2vRWjfZxiD+7vg0uWnhwwzNpGpHdpWV9gkAHMoYKDPMDJMXQYBctDmdvjGQXHTXhwYcl7sJF6yyaWSsXtTYR6YOMbG5teqvkx/I5CppbuGiNZH2CQAcyhgoM8wMkxdAyF+09ZCiri3Y2tHS8N1y01qKZtXJRaxORPsjI5tamt4KLNlXWJ26/PaUAACAASURBVAh0IGOowDA/QFIMrXHRXX2jlcCTBhqu6GY/nKj9t/Ng5FfHa9+G3hkuWkvRzFq5qLWJSB9kZHNr01thRbepsj5BoAMZQwWG+QGSYmiwi47uLhZStt3FnA3JhPH8hequ8q8n5WtTfg7ImoiotYlIH2Rkc2vTW2XaXczdOjvlabRJc9rYXUyWrE8Q6EDGUIFhfoCkGJJy0U/3ar8e4Q+F5v09XLRRopm1clFrE5E+yMjm1rZ344+Y6npr8euGT7pynlDVN7FxGDkyZLaDyvykK34knnSFBIEOZAwXGOYHSIqh7S5aHKKRROCdsaJbT9HMWrmotYlIH2Rkc2vfu7mrq7oGx6u1PcfEPt2rfTI72s8Y63yz+thzttxyszMXJj7bOjpxXr69Mjvaz6KumCthjtqx7oPXNurHp6fPTuobH4z2id+hdUR2l5b1CQIdyBgqMMwPkBRDii66c/CDL46EC8/gorUWzayVi1qbiPRBRja3tr7h072Vt/sy9XQnh1sfXOjK3icmrfR++rj6Vmf00rRwPrx1RHaXlvUJAh3IGCowzA+QFENiLro8OnvTu2Cf+M5w0XqKZtbKRa1NRPogI5tb29/zuF67URn1vHTn4MRvV7ZF662iR6b2icl7gJ/UN6oTniHvHJxYrNXbNRH9jEBpWZ8g0IGMoQLD/ABJMTTRRUNEf+c0s1Yuam0i0gcZ2dyUn4Pmsr60rE8Q6EDGUIFhfoCkGMJFGymaxGhmrVzU2kSkDzKyuSk/B81lfWlZnyDQgYyhAsP8AEkxhIs2UjSJ0cxauai1iUgfZGRzU34Omsv60rI+QaADGUMFhvkBkmIIF22kaBKjmbVyUWsTkT7IyOam/Bw0l/WlZX2CQAcyhgoM8wMkxRAu2kjRJEYza+Wi1iYifZCRzU35OWgu60vL+gSBDmQMFRjmB0iKIVy0kaJJjGbWykWtTUT6ICObm/Jz0FzWl5b1CQIdyBgqMMwPkBRDuGgjRZMYzayVi1qbiPRBRjY35eeguawvLesTBDqQMVRgmB8gKYZw0UaKJjGaWSsXtTYR6YOMbG7Kz0FzWV9a1icIdCBjqMAwP0BSDOGijRRNYjSzVi5qbSLSBxnZ3JSfg+ayvrSsTxDoQMZQgWF+gKQYwkUbKZrEaGatXNTaRKQPMrK5KT8HzWV9aVmfINCBjKECw/wASTGEizZSNInRzFq5qLWJSB9kZHNTfg6ay/rSsj5BoAMZQwWG+QGSYggXbaRoEqOZtXJRaxORPsjI5qb8HDSX9aVlfYJABzKGCgzzAyTFEC7aSNEkRjNr5aLWJiJ9kJHNTfk5aC7rS8v6BIEOZAwVGOYHSIohXLSRokmMZtbKRa1NRPogI5ub8nPQXNaXlvUJAh3IGCowzA+QFEO4aCNFkxjNrJWLWpuI9EFGNjfl56C5rC8t6xMEOpAxVGCYHyAphrq4aAQCgUAgEAgEAoFAIEwJ9S5692Afyi6axGhmrVy8jVB+GkhfN4FMy9yUn4Pmsr60rE8Q6EDGUIFhfoCkGMJFGymaxGhmrVzU2kSkDzKyuSk/B81lfWlZnyDQgYyhAsP8AEkxhIs2UjSJ0cxauai1iUgfZGRzU34Omsv60rI+QaADGUMFhvkBkmIIF22kaBKjmbVyUWsTkT7IyOam/Bw0l/WlZX2CQAcyhgoM8wMkxRAu2kjRJEYza+Wi1iYifZCRzU35OWgu60vL+gSBDmQMFRjmB0iKIVy0kaJJjGbWykWtTUT6ICObm/Jz0FzWl5b1CQIdyBgqMMwPkBRDuGgjRZMYzayVi1qbiPRBRjY35eeguawvLesTBDqQMVRgmB8gKYZw0UaKJjGaWSsXtTYR6YOMbG7Kz0FzWV9a1icIdCBjqMAwP0BSDOGijRRNYjSzVi5qbSLSBxnZ3JSfg+ayvrSsTxDoQMZQgWF+gKQYwkUbKZrEaGatXNTaRKQPMrK5KT8HzWV9aVmfINCBjKECw/wASTGEizZSNInRzFq5qLWJSB9kZHNTfg6ay/rSsj5BoAMZQwWG+QGSYggXbaRoEqOZtXJRaxORPsjI5qb8HDSX9aVlfYJABzKGCgzzAyTF0EQX/R8zA8+xePRenKzefeAc88elq73iYz68VXsSesOd9am+2IE/uHrrT6q/m/SvTfqnPLq7MH2xx+FRHpq+vvqoHjhgr7b8y6HekvvXj5Y292zIOqT6/eqlDvbCUPV+9E9P1iZfKsWqpvvs1X9dWH8oequHq9W5yeEyS+QZ1JdLV19mL02tRgp189Mp5x1KPcPXKsv3dgrhkL9N3Nm8VfFriXUMXHnf/6mG9ejuwvw1t64iP2qu+wvDL0TBly4tfFVP/l7SaUtP303t07HeEiu9MfOH6C9l5w9zr5dYx/m5z/1vvP5g/caMD63UMzwVKi2eaaxIdh+tTg50M9Z9dnr1gYc09ENu20+VWmfZLhUI7fHq9GuMvTa5/jjwv6Weq5/Gfn2RIxu2/9IR2V1a1icIdCBjqMAwP0BSDC1y0Ywx1v36fG3nYD/RRTuD+Pfu+AMC7pSiQd1F8xF/JHrfWXK47dWqIz2JfzU264g8Sxb3KmK35ow4L1Z/H/K3j9ZmfP8cCJGh8tmGP3Rn8+OL0W/k5bHlLwvgkK9NFJWK4Ge4v3tQf7A+NxSvOha2l0LyDVx07E2KSz8kkVt2fW+oGB6uzl8SQfPatwQXHbfQT2oz57ujbxOvZwWFQVeqXbSw6Qgf2aD9LwKR3aVlfYJABzKGCgzzAyTF0DIX7Y2n01x0+GK8e2SbRpaFfW0y33/v8/k3Olj32asLzvyD4wNLfdNrOwfuGKv30gyfHHty73f/dK7D+6upWUe1sz7Vx7r/euBHHcEpGi7xTODD1cV3zpZYaErnye8XflaOziV68zyRgalDMm51vly6+jJj5aH5tQcH+7sHe7XP3j1bKqhoc7SJ9QfL7/Qwxkrnxio3Vr1LMMsf8Wn5oJ90LxMEZ73qD9avTw6XQz/Yr64PlVjH8PX7wk8Ue0tevaI1BXLTj4v/soLtD/9mg67Gve4Qmod/uFqdGuot+UfGMvUBOkXi1XCpZ/iXfP55Z/OTKwPdLF7PRRcGaWngouMXlYJHNmr/C0Fkd2lZnyDQgYyhAsP8AEkxNNhFh6aL/em+3rHlP/re+LkrS3XvhZ7JEUxeaT75HP/aZL7//YXhF6JW5KvrQ45tE6xz5oN1u1z049Xp11jp0sJ/fiywbUnraV3f6B7P/7fU87OPa9Ej+VDVx+i6oO6z/zgSdchx65h4AlKwt0ien2TvyIJgCTF3j176zmWC6DT+gTub6v5gG1RaEpZ07y0pffEZ8slhbobd8giusHUuUQmgOVPZPItwpp6FDgOMLdNt60+VWmfZLql20eW/Hf5JR3BdQ/TI9Pa/IER2l5b1CQIdyBgqMMwPkBRDW1z0wf7u5tzZBi56358c84bvfHDASj0DP+FLKDsG3vmN+NZWjaSgRp+sTb5UEvuQR3d/c/WcYMLW6Kx933V/YfgF/7JLgEbCmDJ4vOi1AW4L8x+6E9T1+9VLP+C113jAyq8HFTQ11GqbyK+2RAbrwfQ/Het1KyrN5dYfrN+YmedT2cl3qqd/L19dH2oVV9u7BG6GWe87v1v7N/4fS9EbTJISfLha/XCGT1D7mdYfrL13tsRE1yASS7e1CwqyyRCRahf92uTa2sz5yE0EggsuIbWvbDIisru0rE8Q6EDGUIFhfoCkGNriojPNRe/vHuzv1m+NPce8xWl/Wr7yA8GK7/OTa1ob6eJrdOcPc6+XYo7IuQbBWO/FKfmbXRWYdcjMCKbv0lx0YDza2oxxmov29tYqD/3zp7H5bVnYWyLfaFwe8HiZJ0j5e/5obH5ubKCb8bXi84H9AtNWdLd4lUdCl8CXIQibmobQIpleW/r3JAudQKN9qxiodZbtknoXvf44dot+g8ITt/8yEdldWtYnCHQgY6jAMD9AUgwNdtHicCZ2kl10yIS7U9OOCfT3N2p5L6LCvrZCP5EvQ43tLhPa3ty7TdqGrMNrGuPGI82KBBx4awuJU1x0aPes0B2wUrG3RD51Hv5gPzBw/1ODGebIe8bC/7Um7i7WOispXYKzrjt+4aAhNGElMPHGy3DRWkoHF+3+t2eMU110QvsvFZHdpWV9gkAHMoYKDPMDJMXQMhftTchkdNHxN/f2X/mbmc0/K/96Ur624j6O74+VNj/vXn2QPMwqLOvY1CivisAWUKpctCdnfrWIbbo1ctEce7AUnf3Y3NcmuuhSz/Bca4/qkdAlePeVxPc9bsFFl3qGLw/1llh88TxctJbSw0VHHr2W7KIbt/9SENldWtYnCHQgY6jAMD9AUgytcdGR56k2XNGduJ2Yu8abrwxX/w0lfW0FfVbWIVSjG1ZNytrfyTY65+n5YWUruqOHFXCnok4ruhtxSN07XYvdxQ68/cMuvz/9Nx3ROeQmV3Q7c+zurdGRZ6fBRWspXVy0txXi+bnPnyQUngoLvUugtKxPEOhAxlCBYX6ApBga7KJTd9XOvLtYVN7jo6XvlZXza5P/KfUH6wtjA93Zlmpb5KJTngXtuZSsu4vxjb6Fz4VusKG0+S460+5iTpp876KE2ygaeOzGLnrf33G94Rxv29JPkPPks5fHlr8M79cdTDYJWsoFGvde69DkNnYX01HauOh9d2/87tfn1+5E/9RU+99+RHaXlvUJAh3IGCowzA+QFENSLnqvtvxLfttzaAtlFnQs7jxkSwPuIr82yR/hPLS2Y+Dd30WfuMMRRQxz5jk0rbPed71f3LOF/z3rk67cB/YmPulKZA5jLprffx5xPsU8XWw3/5OuxBcRIk+6cp7Bk/ikK74lkjDl4P7b6S66pfpsa5cQfV60s193EFHy48GcgwPXHUQPFQ9ObouyzrFduUwyhKSTi/bWdf9k6O+DO/CltP8FIbK7tKxPEOhAxlCBYX6ApBja7qITphTdgaa3dje8MFK4VY9OklyjwZV+ggOc/V0H3rvjzHq590VLfppoIb/M5BtTHXvzztKjesJa2XtL81eiC2vdfaR6hq9VvG3MH91dmL7YI7gtdn/3QDQX7TwzObCuMt++081ib5W8u/QjtJP2Xm35o8nhMgsXmGMRWXlo+qMlZ+Bef7B+fXK47P8eBfdF86ldl0Pqiu7W6rONXYL3jKvAl+7MIQdQeLPKFyc/9KA9XK1ODfWW/Ilr8W7kn46Fb5B2rr+4Xmhn89Op9pUNtc6yXdLLRQfv0nf+1KD9LwaR3aVlfYJABzKGCgzzAyTFkKKLDtg/b9wZjgI3I235a5P4/o7xE15/4PYy8Kge/0/S750r4pf51fWhUtI1lMAkfMqq7/iE6qPVyQERzyRiohXdrskMRvfZ6VWN9+jmcia1GvwMD/Z3/WtYKUcKjwlwSPteWtyJrW1dAi8Dwcy8t6rWW8X98M70+ejvS5hp7LqAO7ntlpbot9wud0Sts2yXNHPR+24FMvdmgYbtfxGI7C4t6xMEOpAxVGCYHyAphsRcdGh6x5U3McgYY+Wh6eut7eVb8Ncm8f29p0CnjaICy+NZ99mrc0vyF/7J/2U2WvfLb8E9P/f5n4VurTw0PbcgvIfwyb2lD3815nvp4IxrAv+4QXImEhljrGPgyoz8B3R72HOS39m8VfF/Yqxj4Mr71btC/7+zeatSueL7ZMEP1pugFr2V2EWHFwIUnv7uwb7IKgcU2i2Z/+Nebfn/vH/1XEdSColr193LFu6lwJ3NWzP++7Tzp0qts2yX9HPR3tXk1ybXH2dr/6Ujsru0rE8Q6EDGUIFhfoCkGJrooiGiv3OaWSsXtTYR6YOMbG7Kz0FzWV9a1icIdCBjqMAwP0BSDOGijRRNYjSzVi5qbSLSBxnZ3JSfg+ayvrSsTxDoQMZQgWF+gKQYwkUbKZrEaGatXNTaRKQPMrK5KT8HzWV9aVmfINCBjKECw/wASTGEizZSNInRzFq5qLWJSB9kZHNTfg6ay/rSsj5BoAMZQwWG+QGSYggXbaRoEqOZtXJRaxORPsjI5qb8HDSX9aVlfYJABzKGCgzzAyTFEC7aSNEkRjNr5aLWJiJ9kJHNTfk5aC7rS8v6BIEOZAwVGOYHSIohXLSRokmMZtbKRa1NRPogI5ub8nPQXNaXlvUJAh3IGCowzA+QFEO4aCNFkxjNrJWLWpuI9EFGNjfl56C5rC8t6xMEOpAxVGCYHyAphnDRRoomMZpZKxe1NhHpg4xsbsrPQXNZX1rWJwh0IGOowDA/QFIM4aKNFE1iNLNWLmptItIHGdnclJ+D5rK+tKxPEOhAxlCBYX6ApBjCRRspmsRoZq1c1NpEpA8ysrkpPwfNZX1pWZ8g0IGMoQLD/ABJMYSLNlI0idHMWrmotYlIH2Rkc1N+DprL+tKyPkGgAxlDBYb5AZJiCBdtpGgSo5m1clFrE5E+yMjmpvwcNJf1pWV9gkAHMoYKDPMDJMUQLtpI0SRGM2vlotYmIn2Qkc1N+TloLutLy/oEgQ5kDBUY5gdIiiFctJGiSYxm1spFrU1E+iAjm5vyc9Bc1peW9QkCHcgYKjDMD5AUQ11cNAKBQCAQCAQCgUAgEKaEehf97PQUyi6axGhmrVy8jVB+GkhfN4FMy9yUn4Pmsr60rE8Q6EDGUIFhfoCkGMJFGymaxGhmrVzU2kSkDzKyuSk/B81lfWlZnyDQgYyhAsP8AEkxhIs2UjSJ0cxauai1iUgfZGRzU34Omsv60rI+QaADGUMFhvkBkmIIF22kaBKjmbVyUWsTkT7IyOam/Bw0l/WlZX2CQAcyhgoM8wMkxRAu2kjRJEYza+Wi1iYifZCRzU35OWgu60vL+gSBDmQMFRjmB0iKIVy0kaJJjGbWykWtTUT6ICObm/Jz0FzWl5b1CQIdyBgqMMwPkBRDuGgjRZMYzayVi1qbiPRBRjY35eeguawvLesTBDqQMVRgmB8gKYZw0UaKJjGaWSsXtTYR6YOMbG7Kz0FzWV9a1icIdCBjqMAwP0BSDOGijRRNYjSzVi5qbSLSBxnZ3JSfg+ayvrSsTxDoQMZQgWF+gKQYwkUbKZrEaGatXNTaRKQPMrK5KT8HzWV9aVmfINCBjKECw/wASTGEizZSNInRzFq5qLWJSB9kZHNTfg6ay/rSsj5BoAMZQwWG+QGSYggXbaRoEqOZtXJRaxORPsjI5qb8HDSX9aVlfYJABzKGCgzzAyTF0EQXvbs4+DyLR3l0dmX70DnmaGOiLD7mZm3vJPKGJ4fbK7Oj/d4xc7X6seovpuHXJv1TjrZvV0b7HCj9I5WVraOTwAGHWyuVkXIXY4yxrr7Ryu3tQxuyDunkLyuXO9mLIyvfRP90sjXb3xUrrzMXJhYSOBxurVT9GhPwDOrbjYlXWX9lK1qo3qfvLL55Ju2AdmMn1SbKSl9cM7Gfz9HGeLmLdb21+PXTyDscf119o4t1vll9fHJ6vF15RfBOg+OLd2J1FfmpztxoU/tGvDDycCvqs77bqpxj7Nzs9neB/+3qm9g4bHBkvP3/ZKMeLUipiOwuLesTBDozyGTqlXjjkBKBduP05HD7zqLfdCQPDk/qGzdn3I5J2HnFGiXRn8RdYSCRVypbTfV3+aoredDoq5nR4NHGePl5cQoaAyT1C7XIRTPG2Jk3qjvHp6eJLpoxxljn4Adf+KV2clib6ose4r2PppJeo3woH4ny1IbD7duNiVdjXF8dr31rdtYReR1M3K8m9j2Msf5/WPk6VDxHW4t+ixlsnQRO6dnp072Vt/uEH+oe8Lj6VmfaAe3HTqpNlJV+Ws2EiiHolv2XH23ODp7xDkvr+cpv3/YNj1stoRB2q+rIEJNqFy1sq8NH8ut00YatoAbnGYHSsj5BoDODTKZeKbuLPtyqXo4Np1l8RH1cX/6H+AiTMdb15uyWZ7kNdNEpg0aupkaDJ1/fvtwvTEFzgKR+oZa5aMa6Lt8+PEl30aGL8YcrI12Msa6+y8t7JwH3WOCIobWvTeb785H3mQsTnzlXtpxfvvNzckb5g1OfOZcY3aZTMrSCf5nH25VX2JmfDv64M94M8bYymu/h1vLUhS4WarbcdjA83+jO8/gXJvjB9fWpQcfzJMDk8IssUWptoqz0ec04DVTw3+sbH4z2MdY5uvIX5x/5DzA4Z8ivW/nm53i78kq8ezva/mxiMHSFhX+ot77GKbCm+0W5ZIhJAxcdu0YTPpJXV9/or/n883F97drgmXZdfMmIyO7Ssj5BoDODTBO9kqvDlZEu0b97EwChZaHeSqjAlTtnmB1au3dcr93ggyLfT2YygeF//+b26IuCdJrE2PJr0waNp82NBt1WV+RjtQdI6hdqsIv+4UTtv/2q8i7wlMdrR76Lfn5i43vvhZ7J8cw2X33BGPu7xfr3yr+Mpr42me//ze3RF6MmjV9u6K9snXBokZ/fN7dHX5Q9zCr2l/ndVuUc67p8e3dZ0GeIXfSpt7TBPZ7/r3uNJnQkd0r+yh/34uKZC+++faErwSQfbYyXn+9791fj4k+XhZ1Umygr/aTxivBPzmQgH3m4VRRYiCt20aenrt926kpwWGLpqiNDTKpddP//Gj3fGZ0dCh4pGGAl15ssRHaXlvUJAp0ZZJrqlbiSXDS3dqGVUI6ceRfnJU4rFF2yd3oaGz4Z56JTB41NjAbd6xFdg794N37V2wCApH6htrjo09Nn9eqFBi76NLB+m9erd9jbi2v/wg12YIpVXymo0ZOt2f4u0QVILrf5yPHb0ytrv6sQNStpViR4fGqTdLR9u3rTvZR48peVyz/ktedfsIi85NuNiVdZeWrj8It2GaGM2Em1ibLSb3K84iw6KE+tby3y/whdqE5xNX7pCu/RattPlXhh5OFW1GcJXfS52a2txTfPhNcQBo9MbPGS2//2I7K7tKxPEOjMINM2F51+P/Dh1srNRT5BzV8eXQvj6duNiVfdDzXNRacPGpsYDX5ze7T/wsRnW0ff/2XlctRFmwCQ1C/UFhedaS769Nnp6bPva+PPe2skEhaHh24t0FHF1+jx19U3upJvFz/ZWXzzTPIP27isQ11CkxN6geaptXk/sYvmF4BeHa9928bpxIzYSbWJstJPGpS4y7Bj45LALc2xFinNRfvlIewpU3pWRWSISb2L3v4udu99o1YLbQ4S1ENA104yTfdKSS46a7fSaFVLcOhllovOM2hMf8/Q+xgBkNQv1GAXLQ5nxibZRYdMuP9Wzs637i37sg1h/q+t0E/k60sjN/H64sN9m3YXC69pjzd/aQ1ioBVLvIMoVUIXfbQxXn7xQmXzsMGnS8FOqk2UlX7m3cUCL+HrukWbi6R1pV5H+F9w0RpKBxft/rd3YRQuulBZnyDQmUGmhV5JPKrJ6L4ab2Ed6NrMctGNBo2tjAbjLtoMgKR+oZa5aO9WgWZddHz/Fa3vlC60RvmOCInz8/wWjjOOwbMi65hF4VURuExQsIs++fr25X7/yg5GtAVKvos+c2GiKnqMUODxAbELWHDR5koPFx15phpcdKGyPkGgM4NM070SXHTD0w6eYWDQCBdtqaxx0ZGn0jVc0R1x0Z5n/n6v+nd83DpeO1L+9aR8bQV9ljYWusCsE5/r4LeAha7ofvq4+lZn8KowRrQFStqK7pPD7epIuatz8F/WhYMVZ7OWn/+28nedsWf8YkW3udLFRXtb0bxZfXwCF12orE8Q6Mwg02yvdIoV3ULlHDQmCSu6DZDBLjq6u1hIGXcX4ztLw0ULdXK4/dn44BlWvrwo3G7NuXOmf6S6VYCFLirr1DVOnpXNursY38lJ+Fzo5DeJuOi0NVdF7JpLrU2UlX7aFmKxfU2dR2Lw2+CD+3W7L8TuYsZKGxd96u7ofuaN6tYX2F2sQFmfINCZQaapXokrYU6VP+QpYeucQMuTZXMspyFKmXdNMnuKXHSWQWMro0GBizYCIKlfKCkX/XSv9usR/jhop0o8z+zVmXtJSfJ20/m/Nskf4Wy1n3RJ0rmBvGvw2ka9mGefFJL1qbjZiv971idduU9eTXy2gcgIwUXrJKku2ttCLNwpRp8X7QxrAh1w60+6Ej7HTi0ZYtLJRXvrus+P/O/+lCddPTtcGenCk66QoHoBXTvJNNEruUpamczfKvlJV26nE9mRIaiE4VN4HdazU7fVEvRiSlx0tkFjK6NB4TsbAJDUL9R2F53gPfyq4o6FOXce+ruLFXXRveWvTeb7B1f6iQ4I3VBnTdZcyY2I00lMbRydJCx6rG9UJy6E3Y63QVTf6MyNmnvF4Wj7dmW0jwnud312mrRHd+xMsLqyEEl20V6F+J2i94yrQG1EhzVCF31cry3yjVUjt9B7V7tO6hsfjPa16eIL8cLIw62oz8rgooO337t/Ot6uvBK4hHpc35gb7W/LXQDZEdldWtYnCHRmkMncK/lKvL/XfahEeXT2Zs01iodbK5WRcldoLRUfQIZvvT6u127wQVH85jV25sLEZ1tH3przldnR/oQpBCUuOtug8bSF0WCCP9ceIKlfKEUX3Tn4wReB4anzfHPxGgxNJbdGnZ+68PrD5duH3/kP4IlG2p4HumfNdbgy0iW6dHd66o5BXxxZ+SZ1ftjb4s7V0ebsoIhn0t3mcNE6SbqLjkw182oRNEHe4tudY9fniCM0G/BU8GttU/tGvDDycCvqs7K46FO3tJj/J1EXUORzK6wvLesTBDozyGTslYJ/Stsl6/CLypuiwWF06xxvvqrRoOjkcOuDC6IDw8N4TypcdMZBI/+X5kaDSbPcugMk9Qsl5qJDF8k8Pd2rVcedyk7emVAnya1Rb35e8BO9fPtw372ZPB6mu+hGO2R4d6R8L3TR/SOV6m3hPeQn9Y2bvxn3W8/+kconiWUGF62TCnDRganmX/323VcTFmuF1oCIXXR5dLZ6ZyvSNXpLJJy+c2KxaUfA6QAAFEdJREFU1p67MIgXRh5uRX1WRhftTW74f/LWNSjpFq0vLesTBDozyGTqlcKXzxrsNf10r/Z/f+s3HeF519BH1zduzox4VrBrcHwx1nmdnj4LzrKmDeO5infRmQeN/iNXso8GE1205gBJ/UJNdNFQ4c+L1kM0s1Yuam0i0gcZ2dyUn4Pmsr60rE8Q6EDGUIFhfoCkGMJFGymaxGhmrVzU2kSkDzKyuSk/B81lfWlZnyDQgYyhAsP8AEkxhIs2UjSJ0cxauai1iUgfZGRzU34Omsv60rI+QaADGUMFhvkBkmIIF22kaBKjmbVyUWsTkT7IyOam/Bw0l/WlZX2CQAcyhgoM8wMkxRAu2kjRJEYza+Wi1iYifZCRzU35OWgu60vL+gSBDmQMFRjmB0iKIVy0kaJJjGbWykWtTUT6ICObm/Jz0FzWl5b1CQIdyBgqMMwPkBRDuGgjRZMYzayVi1qbiPRBRjY35eeguawvLesTBDqQMVRgmB8gKYZw0UaKJjGaWSsXtTYR6YOMbG7Kz0FzWV9a1icIdCBjqMAwP0BSDOGijRRNYjSzVi5qbSLSBxnZ3JSfg+ayvrSsTxDoQMZQgWF+gKQYwkUbKZrEaGatXNTaRKQPMrK5KT8HzWV9aVmfINCBjKECw/wASTGEizZSNInRzFq5qLWJSB9kZHNTfg6ay/rSsj5BoAMZQwWG+QGSYggXbaRoEqOZtXJRaxORPsjI5qb8HDSX9aVlfYJABzKGCgzzAyTFEC7aSNEkRjNr5aLWJiJ9kJHNTfk5aC7rS8v6BIEOZAwVGOYHSIohXLSRokmMZtbKRa1NRPogI5ub8nPQXNaXlvUJAh3IGCowzA+QFEO4aCNFkxjNrJWLWpuI9EFGNjfl56C5rC8t6xMEOpAxVGCYHyAphrq4aAQCgUAgEAgEAoFAIEwJ9S5692Afyi6axGhmrVy8jVB+GkhfN4FMy9yUn4Pmsr60rE8Q6EDGUIFhfoCkGMJFGymaxGhmrVzU2kSkDzKyuSk/B81lfWlZnyDQgYyhAsP8AEkxhIs2UjSJ0cxauai1iUgfZGRzU34Omsv60rI+QaADGUMFhvkBkmIIF22kaBKjmbVyUWsTkT7IyOam/Bw0l/WlZX2CQAcyhgoM8wMkxRAu2kjRJEYza+Wi1iYifZCRzU35OWgu60vL+gSBDmQMFRjmB0iKIVy0kaJJjGbWykWtTUT6ICObm/Jz0FzWl5b1CQIdyBgqMMwPkBRDuGgjRZMYzayVi1qbiPRBRjY35eeguawvLesTBDqQMVRgmB8gKYZw0UaKJjGaWSsXtTYR6YOMbG7Kz0FzWV9a1icIdCBjqMAwP0BSDOGijRRNYjSzVi5qbSLSBxnZ3JSfg+ayvrSsTxDoQMZQgWF+gKQYwkUbKZrEaGatXNTaRKQPMrK5KT8HzWV9aVmfINCBjKECw/wASTGEizZSNInRzFq5qLWJSB9kZHNTfg6ay/rSsj5BoAMZQwWG+QGSYggXbaRoEqOZtXJRaxORPsjI5qb8HDSX9aVlfYJABzKGCgzzAyTF0EQX/R8zA8+xePRenKzefeAc88elq73iYz68VXvS6K0YY89dWaqr/3pSvjbpn/Lo7sL0xR4HR3lo+vrqo7royC+Xrr7MXppafdLuE1CSdUj1+9VLHeyFoer96J+erE2+VIoVTffZq/+6sP5Q9FYPV6tzk8Nl1phnEtL7C8MvRD+wdGnhq6Q3aSd2Um2irPTFNROIl6ZWv/p0rLfESm/M/GEv8vKdP8y9XmId5+c+f7K/sz7VF3956dxY5UasqB6uVqeGevnnlnqGr1WW7+3oRoaYCoT2eHX6NcZem1x/HPjfUs/VTx80OHJ/98m9pX922/9ov1kEIrtLq/UEH91dmL/m/qIjw5793QPeOJT6ptfEP3PeCsX760erkwPdjHWfnV4NvNtebfmjQLcl6OBSPs7/U5amL3N1NY+O13ZSvDBU/f3n82+IO3qur64PlVjH8PX7tpGBxBhzvDx50Ogrw2gwOvz+aGkzOiTYfXJv6cNAUyAYAMRaddGfxMMJP5Ibk2SApOrQIhfNGGPdr8/Xdg72E100Y4yxjoH37jilBhedoEefjvXGGvfed5aiY/S9WnWkp8m2Xt+sI/J6uHh2aZ1f+WL196FG59HajN9iBlsngVlKRCr8RLho+SrURT8JuWX/tXyM6xZMWrfXO7Lgd7d7n8+/0RE9QtinKiVDTKpdNGPs5bHlL9OOfPL7hZ9Fmiyh95aIyO7SainB+oP1uaF4v8xCzUUrLlpooQU1wCN0mAlesaGLvi/yyT72+9VLHaELTNaQgcQYW395yqCRK8to8Elt5nx3eiXsbH58UdQUsNL5yTXvag5cdEEFY5OL9nxFmotOHhDUHyy/08NY7IqsdpJco3zw3X326oJzZcv55Yd/Tk/u/e6fznWIfuFmZh3VzvpUH+v+64EfdcSbIfEV/Yeri++cLTEm6HFLPcNT/rVq70Jj5MJECtK0bl46dlJtYiHpp1yx5r++YBv15dLVl4PORzw+e3T3N1fPdQQrh1dp78UpPv/sVFfTnWKxZOyXBi46dpkmdCTvB0s9w3O8/d/Z/OTKQHcbr79kQWR3abWQoDtuDs5c1R+sX58cLgeHNM26aP9t59cCYx7e5rCOgSvve3Pd/tyXN12RzSuG/j3LZF170fHaTv/E+wvDLyRclb6/MPxCgJhNZCAxxpZfmzZoPMg6GuTl0TP8Sz7/LGh+nVmu0AqInc1bFf4+viHP5KLD/57yQ2gCIKk6NNhF/+DqrT95/+hf4OkdW/6j76JDU8qeyUmYxHMnYGMjDO0kuUYj3cb+7oHj4rx/dLve7rP/OHK2ZKWLfrw6/RorXVr4z48F9jVpXZx7IcY93h2P/uzj2HrIvcgqsnSkDcZGkrGTahMLST91wORciua22S2hwIW/5GLgIzznbQWHJdatPmTsl2oXXf7b4Z90BIb7sSPjA6mU0ZgsRHaXVvMJ8p92bKHTgdtcuN9XUy7as9CRt3XG8YJuyx0mZfg4bbxiFhfNz1ZwDPdFEW9sCxlIjLHV16YOGrOOBgWNbbhgnGZc0BREx59w0UXIFhd9sL+7OXe2gYveD8w2x5sqb/VjcWOFPF9b0R/6ZG3ypZJnDu9XL/1g4J3frD+MuGt7svbnfkXNSpobCR6f2iQ9ursw/6F7KTEdad7+NSd2Um1iIek3+EL5um7W+87v1v6N/0dwzULaQNmvW+FHuN18O24EIF4YebgV9VlCF/3a5NrazPnu8B0lKeOt+oP1hbGB7mIaeQ+R3aXVdIKpS44frN+YmXduiczsousP1t47W2Ki4TjvtoQ3HO27g6jkS3WutPGKmVy0M8IRrtHwG0zLyEBijC2+Nn3QmHU0mDjgdH7+/FMSp/q+XLr6svtyuOgiZIuLzjQXvb97sL9bvzX2nGitvzMRXejdX3m+toI/cecPc6+XItMX+7sH0TlqW7IO9WdNzukFmqfWpv4ESPl7/mhsfm5soJsxxkrnxuYL2u+HWptYSPoNB0yBW5pDdzrt76YPlP2SE3aT7ZxUJF4YebgV9VkJLnr9cez2e2Fh8CplLLC8sDBEdpdWswlmX4uUzUVfW/r3JAudYcVKwNKb4BWzuWinyQ3/BEKTB/aRgcQYW3phnkFjQMLDAv/YqCkIngZcdBEy2EWLw5m0SXbR4qlsb7hgwET0roJ9tmoz57tFu4vZ6qLDa9rj7VpagxhoxVq7mVmAVLRBd1G3HlBrEwtJP8OAyVnXLegvU/tRrxf8E1y0ntLBRbv/7V0YTbnm4m4m4t4mXQwiu0uryQSb8FeZXHT6HjENu61sY3ptvGLq7mLBfvar60Ol0AnvrE/1BX8UtpGBxBhbemGjQWPG0WADF924SALVBRddhCxz0d6F1SZdtNu1KNm9qbWvrbiP4zsixCbEHNnoomOdHG9xAhvbFuyi+ccFvwJnp6gi1nhTaxMLSb9hX+jdeyLYGx8u2mjp4aK92zj58tT0wni4On+pp8CFWtaXlgYuutQzfDmyIZYj27xiZhcdfcbk49Xp15ozQoaRgcQYW3hV40EjXLSlssZFh3e9a7yiO+Si3a3e1dx32trXVtBnpVvoAytddGKnm21ll4wV3YmHFXDdh1qbWEj6jfpC7nB6L78//TcdMfeCFd1GSxcX7W1Fc37uc3G1BNWG0VVTiOwuLcUrup0dud1boyM3+tq2bjnjim7vnIOXmV4IXWKwjQwkxtj8q3IOGgPCim7TZLCLju4uFlJTu4u5y7mLGiK05WuT/ynupjK9l2bWEyz0gY0uOuURjt5oI+vuYnxvkoTNSJLeBC5aJylw0c7zMF4eW/4yvF+3cwB2FzNa2rjofXfn5+7X59fuwEUXqKYTFO995SjYIDT5pCt3/4XQgpcse2i5H5HYDSU1cVq76N0na5MvPdc3vbbDz1O8QZQ1ZCAxxqZflWXQmHU02I7dxdxnFiZXVFJ7DhfdYr5EXPRebfmXQ/xJ5aEqcW86LXAP0vxfm+SP2KtVR3oY6xh493fpm8rY5qJ5u5N0ndj996xPukp5MIbzWGDBcCeGVDwwit3EJQ87qTaxkPSbeF60s193oPdt/UlXwofY6UXGfunkor113T8Z+vtyaAVNE08lkILI7tJq1QomP+nK/VqbfV6022jEn6WXMFIPP8/JfSh9fM+U4Gg++O96u2h+er3vLD36fwvDL8Q9sF1kIDHGJl+SbdCYdTQoaqVDg73IlhahTxSPP+N34vBaFbTncNEt5muvi064OhSqKtNuit6VPg4LrvRrdLBtLjq5EQl2iuJVN/eW5q9EF8i5e0T1DF+rLN9zWr1HdxemL/ZEZwCSkQrui+bTlUVshketTSwk/cQBk/eMq0BhOPNF3u9ROFDe2bw1c/Vc8DC3bM5d+ezezsH+7pN7S/98sSfbulB1ZOyXXi46eAe+8ydeb91np1fdXtK5L7qw59VbX1otJOi0DKw8NP2Ru196/cH69cnhcnBI07yL9h5QEhyXc6fHOgauzHjd1pN7Sx9ei91K7axl7eCPaXTe0O3gRBea9XbRvP99Yajyy6GSsHu1iQwkxtjkS7INGg+yjgadKzXuDNbO5qdTw+HBnvuDPXt1znt0ws7mrQp/n9D4k7ub7rNXF9y9If1GQ9RKwEW3mC8tF90x8N6doHVJevaVxpJbo85PXXj9IfbrssxFf3V9qJS0iU6gM05ZwBOfLni0Ojkg4tnEhm3esz2DERzmysVOqk0sJP2EARMvFcGiL2/lbW3H38dBFL0jC/7ikcDjsvyqS1qOqAkZ+6WZi973jIH/J1EXEO03JSOyu7RaSlDYC0S/muTGIW2rDnfBS/xCbTxi/U5zHZxmu4sJpk++XLr6o//R+z87kkY19pCBxBibe0nGQSP/lywlIWx+w3NaO5sfX+wVtQXR0srUaAQEF91ivmRcdO/FyQ9jT9ndnDvLGGPPnZ3/D+XfR/avTeL7cxcnDMtddKMtdrw7Uv4sdNHloem5BeE95E/uLX34qzG/9QzOJyTwjyL1riDyFvDK+9W72C/X2PSFA6aQVY6+JLCjsnig3Htxcv5G9FlE3voIt2z8+RNNydgv/Vy0N7kR+JOzcoE3+8U9nd5DZHdptZzgzuatSsX/RceHNK25aO8ersgqmNryR16nw1j32av/mtzBXRvyh/UpHZz+LpozTGiHrSIDiTE2c3zmQaO/tLDxaNBbWeZW15ygZiKlVTo3VokNANx3c6apExqNgOCiW8zXLBcNFf68aD1EM2vlotYmIn2Qkc1N+TloLutLy/oEgQ5kDBUY5gdIiiFctJGiSYxm1spFrU1E+iAjm5vyc9Bc1peW9QkCHcgYKjDMD5AUQ7hoI0WTGM2slYtam4j0QUY2N+XnoLmsLy3rEwQ6kDFUYJgfICmGcNFGiiYxmlkrF7U2EemDjGxuys9Bc1lfWtYnCHQgY6jAMD9AUgzhoo0UTWI0s1Yuam0i0gcZ2dyUn4Pmsr60rE8Q6EDGUIFhfoCkGMJFGymaxGhmrVzU2kSkDzKyuSk/B81lfWlZnyDQgYyhAsP8AEkxhIs2UjSJ0cxauai1iUgfZGRzU34Omsv60rI+QaADGUMFhvkBkmIIF22kaBKjmbVyUWsTkT7IyOam/Bw0l/WlZX2CQAcyhgoM8wMkxRAu2kjRJEYza+Wi1iYifZCRzU35OWgu60vL+gSBDmQMFRjmB0iKIVy0kaJJjGbWykWtTUT6ICObm/Jz0FzWl5b1CQIdyBgqMMwPkBRDuGgjRZMYzayVi1qbiPRBRjY35eeguawvLesTBDqQMVRgmB8gKYZw0UaKJjGaWSsXtTYR6YOMbG7Kz0FzWV9a1icIdCBjqMAwP0BSDOGijRRNYjSzVi5qbSLSBxnZ3JSfg+ayvrSsTxDoQMZQgWF+gKQYwkUbKZrEaGatXNTaRKQPMrK5KT8HzWV9aVmfINCBjKECw/wASTHUxUUjEAgEAoFAIBAIBAJhSsBFIxAIBAKBQCAQCAQCkTUUu2gEAoFAIBAIBAKBQCCsD7hoBAKBQCAQCAQCgUAgsgZcNAKBQCAQCAQCgUAgEFkDLhqBQCAQCAQCgUAgEIisAReNQCAQCAQCgUAgEAhE1oCLRiAQCAQCgUAgEAgEImvARSMQCAQCgUAgEAgEApE14KIRCAQCgUAgEAgEAoHIGnDRCAQCgUAgEAgEAoFAZA24aAQCgUAgEAgEAoFAILIGXDQCgUAgEAgEAoFAIBBZAy4agUAgEAgEAoFAIBCIrAEXjUAgEAgEAoFAIBAIRNaAi0YgEAgEAoFAIBAIBCJrwEUjEAgEAoFAIBAIBAKRNeCiEQgEAoFAIBAIBAKByBpw0QgEAoFAIBAIBAKBQGQNuGgEAoFAIBAIBAKBQCCyxv8HEZBFNa2nnFcAAAAASUVORK5CYII=" width="640" /><br />
<h3>
</h3>
<h3>
Example:</h3>
<h3>
</h3>
1. Initialize the XCL module and configure to output a one-shot pulse:<br />
<pre><code class='cpp'>xcl_enable(XCL_SYNCHRONOUS);
xcl_port(PD);
xcl_tc_type(TC16);
xcl_tc_mode(0x03); // MODE[1:0] = 2b'11 : One-shot PWM mode
xcl_tc_source_clock(DIV1024); // Starts timer
</code></pre>
<br />
2. Set OC0 (PD2) as an output pin and also set inverted so we get a low pulse:<br />
<pre class="brush: cpp">PORTD.DIR = 0x04;
PORTD.PIN2CTRL = PORT_INVEN_bm | PORT_OPC_TOTEM_gc | PORT_ISC_BOTHEDGES_gc;
</pre>
<br />
3. Function to generate the one-shot pulse:<br />
<pre><code class='cpp'>void pulse(uint16_t wait_ms, uint16_t pulse_len_ms)
{
uint16_t _wait_ms = wait_ms / ((1024.0 / F_CPU) * 1000);
uint16_t _pulse_len_ms = pulse_len_ms / ((1024.0 / F_CPU) * 1000);
// Stop any currently in progress pulses
xcl_disable_oc0();
// Start at CNT
xcl_tc16_set_count(_wait_ms + _pulse_len_ms);
// Pulse begins at CMP and ends at BOT
xcl_tc16_set_compare(_pulse_len_ms);
// Start timer
xcl_enable_oc0();
xcl_tc_restart(RESTART_TIMER0);
}
</code></pre>
<br />
4. Now we simply call the above function with our desired parameters:<br />
<pre><code class='cpp'>pulse(500, 1000); // Delay 500 ms then output 1000 ms pulse on OC0
</code></pre>
<br />
5. Voila! No interrupts or software delays needed! Easy!<br />
<img alt="" src="data:image/png;base64,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" /> Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-5749257085543471846.post-74583898966006709662013-11-07T21:12:00.002+11:002015-03-05T12:38:58.482+11:00Design LearningsBack in August, I was invited to share a selection of my personal electronics "design learnings" to a class of <a href="http://www.eng.monash.edu.au/ecse/">Monash University</a> 3rd-year electrical engineering students. The class itself is centered around a design challenge where students would spend the entire semester planning, designing, prototyping and testing a robot to perform a specific task, which would then have to compete against other team's robots at the end of the semester (<a href="http://www.youtube.com/watch?v=zT2LMFt6aXI">video from 2012</a>). The presentation focused on a number of simple things which are often overlooked during the design process, but in a competition such as this, could ultimately give your design an edge in terms of reliability and performance. Topics covered were:<br />
<ol>
<li><b>Conserving Power</b></li>
<ol>
<li>Regulator choice</li>
<li>ADC input circuit</li>
<li>MCU operating conditions</li>
</ol>
<li><b>Circuit Protection</b></li>
<ol>
<li>Input supply protection</li>
<li>Undefined MCU pin states</li>
<li>MCU input pin protection</li>
</ol>
<li><b>Firmware</b></li>
<ol>
<li>Watchdog timer </li>
<li>Real-time operating system (RTOS)</li>
</ol>
<li><b>PCB Design</b></li>
<ol>
<li>Level translation</li>
<li>Filtering</li>
</ol>
</ol>
<a href="https://drive.google.com/file/d/0B5ePPdvtw5M2SF9zemhVeDVPeHM/view?usp=sharing">Download Presentation</a> [1.71 MB]<br />
<a href="https://drive.google.com/file/d/0B5ePPdvtw5M2ZHZYd0U4bTQ3Unc/view?usp=sharing" target="_blank">Download Presentation</a> (Updated 2014) [2.32 MB] Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-5749257085543471846.post-25266434706182561742013-11-03T00:19:00.001+11:002020-07-28T15:27:40.483+10:00VT6656 WLAN driver on Ubuntu 12.04<b>For reasons unclear, Ubuntu Precise and Quantal (3.2/3.5) releases do not contain the VT6656 WLAN driver (deliberately). Nevertheless, the driver can still be manually built and installed.</b><br />
<br />
<i>The following procedure has been tested with Linux kernel 3.5.0-42 and </i><i><i>3.5.0-43</i>:</i><br />
<br />
1. Install build tools:<br />
<pre><code class='bash'>$ sudo apt-get install build-essential linux-headers-`uname -r`</code></pre>
<br />
2. Get driver source code (specific commit tested in this procedure):<br />
<pre><code class='bash'>$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next.git
$ cd wireless-next
$ git checkout master-2013-10-18
</code></pre>
<b>NOTE:</b> If the target machine does not have network connectivity, perform the above step on a machine which does and the copy the files<i> </i>to the machine manually.<i></i><br />
<i><br /></i>
3. Modify Makefile (wireless-next/drivers/staging/vt6656/Makefile):<br />
A) Comment out (with a #): <i>obj-$(CONFIG_VT6656) += vt6656_stage.o</i><br />
B) Add: <i>obj-m = vt6656_stage.o</i><br />
<br />
4. Build driver:<br />
<pre><code class='bash'>$ cd drivers/staging/vt6656
$ make -C /lib/modules/`uname -r`/build M=`pwd` modules</code></pre>
<br />
5. Make a new directory for the driver in the kernel modules directory:<br />
<pre><code class='bash'>$ sudo mkdir -p /lib/modules/`uname -r`/kernel/drivers/staging/vt6656</code></pre>
<br />
6. Copy the new driver to the kernel modules directory:<br />
<pre><code class='bash'>$ sudo cp vt6656_stage.ko /lib/modules/`uname -r`/kernel/drivers/staging/vt6656/</code></pre>
<br />
7. 'do' a depmod:<br />
<pre><code class='bash'>$ sudo depmod -a</code></pre>
<br />
8. Reboot.<br />
<b><br /></b>
<b>Reference(s):</b><br />
<ul>
<li><a href="https://bugs.launchpad.net/ubuntu/+source/linux-source-2.6.22/+bug/162671">Bug #162671 “VT6656 wireless chipset is unsupported”</a></li>
</ul>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-5749257085543471846.post-77756399339789987922012-04-15T07:13:00.001+10:002020-07-28T15:28:14.530+10:00PandaBoard ES: Getting Started with Ubuntu 12.04 LTS DesktopThe following is a basic starter guide in getting Ubuntu 12.04 LTS Desktop running on the recently released <a href="http://pandaboard.org/content/pandaboard-es">PandaBoard ES</a>:<br />
<br />
<b>1. </b>Download the Ubuntu 12.04 LTS pre-installed desktop image for OMAP4 <a href="http://cdimage.ubuntu.com/releases/12.04/release/">here</a> (direct download link: <a href="http://cdimage.ubuntu.com/releases/12.04/release/ubuntu-12.04-preinstalled-desktop-armhf+omap4.img.gz">ubuntu-12.04-preinstalled-desktop-armhf+omap4.img.gz</a>).<br />
<br />
<b>2.</b> The downloaded file from Step 1 will be a GZIP archive containing a RAW file - use <a href="https://launchpad.net/win32-image-writer">ImageWriter for Windows</a> to write this RAW image file to an SD card [I used a Sandisk Extreme Class 10 16GB 30MB/s SDHC].<br />
<br />
<i>Note: It also good practise to check the MD5 hash of the downloaded GZIP archive before doing this. This can be done by loading the archive in ImageWriter and ticking the MD5 check-box. The program will then calculate and display the hash (takes a few minutes). Compare this value with value contained in the "MD5SUMS" file on the download page in Step 1.</i><br />
<br />
<b>3.</b> Setup the PandaBoard ES hardware: <br />
<ul>
<li>Insert the SD card prepared in Step 2.</li>
<li>Use the HDMI connector adjacent to the USB/Ethernet sockets to connect the PandaBoard to a suitable display. I used a Dell U2412M UltraSharp 24” monitor with a DVI-HDMI adapter.</li>
<li>Connect a USB keyboard and mouse. I connected these via a powered USB hub.</li>
<li>Finally, connect a 5V DC power supply to the board (ensure that it is centre-pin positive). I used a 3A rated supply.</li>
</ul>
<br />
<b>4.</b> The PandaBoard should now begin booting from the SD card after the power supply is connected (Note: Both STATUS and STATUS2 LEDs should become momentarily lit after power is connected). <br />
<br />
If the SD card was prepared correctly, Ubuntu will first resize the image to fill the SD card and then reboot and start oem-config to prompt for localization and user info.<br />
<br />
<b>5. </b>After Ubuntu has successfully booted, you may be prompted to install the PowerVR SGX propreitary graphics driver for OMAP 4. From my initial tests however, I found that this driver did not render the desktop widgets correctly. After installation of this driver, I also discovered that I couldn't bring up an instance of Terminal with the Control-Alt-T shortcut. So for the time being, I recommend using the stock graphics driver supplied with Ubuntu 12.04 LTS.<br />
<br />
<b>6.</b> Finally, connect to the internet either via the on-board WiFi or Ethernet and update your Ubuntu installation by typing the following in Terminal (use Control-Alt-T to open an instance of Terminal):<br />
<pre><code class='bash'>$ sudo apt-get install
$ sudo apt-get upgrade</code></pre>
All in all, the installation procedure was extremely straight-forward with no major issues. Time-to-boot from plugging in the power supply to fully loading the Ubuntu desktop was approximately 45 seconds. One strange thing I found however is that Ubuntu (with the stock graphics drivers) does not always boot in the higher resolution of 1680x1050 - it may also sometimes boot in 1024x768. Also, choosing Restart again in Ubuntu to reboot the device does not always work - the power supply must be physically removed and re-inserted to re-boot the PandaBoard if this occurs.<br />
<br />
<h4>
<b>UPDATE (13th May 2012):</b></h4>
There currently exists a yet-to-be-fixed <a href="https://bugs.launchpad.net/ubuntu/+source/linux-ti-omap4/+bug/971091">bug</a> in the 12.04 OMAP4 release which causes the PandaBoard to eventually freeze after certain amount of time (usually an hour or so). The following is a workaround which fixes the issue:<br />
<pre><code class='bash'>$ update-rc.d ondemand disable
$ apt-get -y install cpufrequtils
$ echo 'ENABLE="true" GOVERNOR="performance" MAX_SPEED="0" MIN_SPEED="0"' > /etc/default/cpufrequtils
$ cpufreq-set -r -g performance</code></pre>
<b>UPDATE #2 (14th August 2012):</b>
The above mentioned bug has been patched into the mainline kernel (tested and OK with 3.2.0-1416-omap4). Run <i>sudo apt-get upgrade</i> after a clean install as described above.Unknownnoreply@blogger.com9tag:blogger.com,1999:blog-5749257085543471846.post-37793258851558262522012-02-04T11:17:00.000+11:002013-06-17T08:17:22.122+10:00qt-opencv-multithreaded: v1.21 Released<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKE2kBmDVZih8IUMbJ799aXRD1IAHhSRadmi701_b4Z5EZkXctHyA3FSMbcRT4Lev75FcViob9a1jcE4z0lOuWVuKx-CVddoI6wkdjVw7gzC9f6GQxxKg9iv_4BFUTkUEUX0S9lop12Zw7/s1600/qt-opencv-multithreaded-1.21_2.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKE2kBmDVZih8IUMbJ799aXRD1IAHhSRadmi701_b4Z5EZkXctHyA3FSMbcRT4Lev75FcViob9a1jcE4z0lOuWVuKx-CVddoI6wkdjVw7gzC9f6GQxxKg9iv_4BFUTkUEUX0S9lop12Zw7/s1600/qt-opencv-multithreaded-1.21_2.png" height="320" width="312" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">A custom ROI set with canny edge detection on.</td></tr>
</tbody></table>
<br />
After around 6 months since I last updated my <a href="http://code.google.com/p/qt-opencv-multithreaded/">qt-opencv-multithreaded</a> project, I've finally released what I consider, more-or-less, a "final" version of the application. A few features have been added such as the ability to choose the priorities of the capture and processing threads at run-time, as well as the option to drop frames if the image/frame buffer is full (this is useful when lag is undesirable - i.e. not every frame is processed). The interface has also been neatened and the code has been simplified as well (a lot of redundant code has been removed), making the application much more easier to modify than before (see full list of features <a href="http://code.google.com/p/qt-opencv-multithreaded/#Features">here</a>).<br />
<br />
From the beginning it was my intention to keep the application simple in the hope that it would be used as the base for a range of interesting projects. I now feel that it has enough basic features to be an excellent "base application" for any computer vision application using OpenCV and Qt. As a result, any updates in the future will only address bugs in the program (please do contact me if you happen to find any!).<br />
<br />
This "base application" was used (and is currently still being used) as the base for software written as a part of my university undergraduate thesis project (see video <a href="http://www.youtube.com/watch?v=f_Ax93E_f1M">here</a>). In short, the software features two extra threads with the GUI highly modified to suit the project application and over the last year or so, has proven to be highly stable.<br />
<br />
As before, please go to the project page at Google Code to download the application and for more details (including installation and usage instructions). Any feedback/suggestions/questions would be greatly appreciated. I'd also like to thank everyone who has downloaded and tried the application so far!<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnaWiGKxD528D27lbj60JE_qzYIh35mjjaY8PgvmIwZPG7WYDLKgtGhMAtMfi0cvYEiXniR-msG5NoEzDZqT_mC2QmpAdNMSSb12wb__cdpS4EfNz7PsI_nPdKNdJQ5cmHFBiWyNGzrKp8/s1600/qt-opencv-multithreaded-1.21_1.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnaWiGKxD528D27lbj60JE_qzYIh35mjjaY8PgvmIwZPG7WYDLKgtGhMAtMfi0cvYEiXniR-msG5NoEzDZqT_mC2QmpAdNMSSb12wb__cdpS4EfNz7PsI_nPdKNdJQ5cmHFBiWyNGzrKp8/s1600/qt-opencv-multithreaded-1.21_1.png" height="320" width="313" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Camera connect dialog showing new options to select thread priority and drop frames.</td></tr>
</tbody></table>
<h4>
</h4>
<h4>
AVR XMEGA uC/OS-II Port (UPDATE):</h4>
I've also added v2.92.01 [currently the latest (last?) version of uC/OS-II] port files to the <a href="http://nickdademo.blogspot.com.au/p/avr-xmega-ucos-ports.html">AVR XMEGA uC/OS-II Ports</a> project page. Enjoy!<br />
<br />
<h4>
Links:</h4>
<ul>
<li><a href="http://code.google.com/p/qt-opencv-multithreaded/">qt-opencv-multithreaded</a> project hosted @ <a href="http://code.google.com/">Google Code</a> </li>
</ul>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-5749257085543471846.post-12076398845348167332011-04-09T22:37:00.000+10:002013-06-16T15:51:07.453+10:00uC/OS-II on the AVR XMEGAAlthough the files have been quietly available to download from my site for a couple of weeks now [<a href="http://www.nickdademo.com/avr-xmega-ucos-ports">here</a>], I'd just like to give a little bit more exposure to using uC/OS-II as a real-time operating system on the AVR XMEGA series of microcontrollers.<br />
<br />
A port of uC/OS-II for the XMEGA was released quite some time ago by <a href="http://micrium.com/page/home">Micrium</a>, however, this port was designed specifically to run on the <a href="http://www.atmel.com/dyn/products/tools_card.asp?tool_id=4254">STK600</a> - a relatively expensive development board produced by Atmel. It was therefore my goal to modify this original port and create a more universal port which could be used on both Atmel's low cost XMEGA evaluation boards (AVR XMEGA-A1 Xplain & the newer Xplained) as well any custom XMEGA-based board (after some simple modifications).<br />
<br />
As a result, I have made available to download two full AVR Studio 4 projects [see link at bottom of page]:<br />
<ul>
<li>uC/OS-II v2.91 for the AVR XMEGA-A1 Xplain </li>
<li>uC/OS-II v2.91 for the AVR XMEGA-A1 Xplained </li>
</ul>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi68rkKmWKUh-ViYjYMM3npf165FF37m7BmtTUIrpH-NAZiVM8Dv41O8dhjZdBIdrrqMqDegqM08RU20fosPwJOxMXOwCNw27LzQP4H092HmrVoGJ3KOGgfuow6AXY8DixC-rrAEFzvcVM6/s1600/xplain_ucosii_29201.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi68rkKmWKUh-ViYjYMM3npf165FF37m7BmtTUIrpH-NAZiVM8Dv41O8dhjZdBIdrrqMqDegqM08RU20fosPwJOxMXOwCNw27LzQP4H092HmrVoGJ3KOGgfuow6AXY8DixC-rrAEFzvcVM6/s1600/xplain_ucosii_29201.png" height="295" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Terminal application connected to the AVR XMEGA-A1 Xplain running uC/OS-II v2.92.01</td></tr>
</tbody></table>
<br />
On an unrelated note, my <a href="http://code.google.com/p/qt-opencv-multithreaded/">qt-opencv-multithreaded</a> project hosted over at <a href="http://code.google.com/">Google Code</a> has reached over 130 total downloads in two months - I never expected it to be this popular! For all those interested in creating OpenCV-based computer vision applications, please do check it out - as always, I appreciate any feedback and suggestions. Stay tuned for the next version of the application where I hope to incorporate the option of using OpenGL to display the frames and also utilize the new OpenCV C++ interface.<br />
<br />
<h4>
Links:</h4>
<ul>
<li><a href="http://nickdademo.blogspot.com.au/p/avr-xmega-ucos-ports.html">AVR XMEGA uC/OS Ports</a> - downloads and more information on this page</li>
<li><a href="http://www.amazon.com/MicroC-OS-II-Kernel-CD-ROM/dp/1578201039">uC/OS-II: The Real Time Kernel</a> @ Amazon - highly recommended for those interested in learning to use uC/OS-II </li>
<li>The <a href="http://micrium.com/page/downloads/ports/atmel/xmega">original XMEGA port</a> provided by <a href="http://micrium.com/page/home">Micrium</a> </li>
</ul>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-5749257085543471846.post-73482749164094176812011-03-02T13:29:00.001+11:002020-07-28T15:33:11.910+10:00HOW TO: Peter Fleury's I2C Driver and the AVR XMEGAEven though the AVR XMEGA microcontroller features multiple hardware Two-Wire Interfaces (i.e. I2C interfaces), there may be times when it is simply not possible to use them because the pins to these interfaces are already in use (as I have experienced). Fortunately, the I2C interface can be emulated in software using regular I/O pins by "bit-banging".<br />
<br />
This post will explain how to modify Peter Fleury's I2c Master Interface library to work with the XMEGA. Modifications are necessary due to the fact that unlike other AVRs, XMEGA I/O port registers have addresses outside the I/O space and thus must be mapped to "virtual ports" (which have registers in the I/O space) for this library to function.<br />
<br />
<b>1. </b>Download the I2C Master Interface library from Peter Fleury's website (<a href="http://homepage.hispeed.ch/peterfleury/i2cmaster.zip">here</a>) or <a href="https://drive.google.com/file/d/0B5ePPdvtw5M2Z2JBdUx0cWFFbmc/view?usp=sharing">here</a> and unzip.<br />
<br />
<b>2. </b>The only file which needs to modified is <b>i2cmaster.S</b>:<br />
<br />
<h4>
Original (Lines 41-56):</h4>
<pre><code class='cpp'>;***** Adapt these SCA and SCL port and pin definition to your target !!
;
#define SDA4 // SDA Port D, Pin 4
#define SCL5 // SCL Port D, Pin 5
#define SDA_PORT PORTD // SDA Port D
#define SCL_PORT PORTD // SCL Port D
;******
;-- map the IO register back into the IO address space
#define SDA_DDR (_SFR_IO_ADDR(SDA_PORT) - 1)
#define SCL_DDR (_SFR_IO_ADDR(SCL_PORT) - 1)
#define SDA_OUT _SFR_IO_ADDR(SDA_PORT)
#define SCL_OUT _SFR_IO_ADDR(SCL_PORT)
#define SDA_IN (_SFR_IO_ADDR(SDA_PORT) - 2)
#define SCL_IN (_SFR_IO_ADDR(SCL_PORT) - 2)</code></pre>
<h4>
</h4>
<h4>
With Modifications (Lines 41-56):</h4>
<pre><code class='cpp'>;***** Adapt these SCA and SCL port and pin definition to your target !!
;
#define SDA 0
#define SCL 1
#define SDA_PORT VPORT0_OUT
#define SCL_PORT VPORT0_OUT
;******
;-- map the IO register back into the IO address space
#define SDA_DDR (_SFR_IO_ADDR(SDA_PORT) - 1)
#define SCL_DDR (_SFR_IO_ADDR(SCL_PORT) - 1)
#define SDA_OUT _SFR_IO_ADDR(SDA_PORT)
#define SCL_OUT _SFR_IO_ADDR(SCL_PORT)
#define SDA_IN (_SFR_IO_ADDR(SDA_PORT) + 1)
#define SCL_IN (_SFR_IO_ADDR(SCL_PORT) + 1)</code></pre>
<br />
<b>3. </b>The next step is to map the appropriate port (the one containing the pins which you will use as the I2C interface) to the virtual port as defined in the modified code above (Virtual Port 0 has been chosen).<br />
<br />
For example, the following will make PORTA PIN0 SDA and PORTA PIN1 SCL:<br />
<pre><code class='cpp'>PORTCFG.VPCTRLA = PORTCFG_VP0MAP_PORTA_gc;</code></pre>
(This line of configuration code must be placed in your C source file and should be executed before initializing and using the I2C interface). <br />
<br />
Of course, the port and pin mappings can be changed to suit your particular needs.<br />
<br />
<i>Note: It is possible to have SDA and SCL on different ports by using two virtual ports. Also note that register VPCTRLA configures Virtual Port 0 and 1 whereas VPCTRLB configures Virtual Port 2 and 3.</i><br />
<br />
<b>4.</b> Next we must modify the <i>i2c_delay_T2</i> assembly function (also in<b> i2cmaster.S</b>) to give the appropriate delay:<br />
<h4>
</h4>
<h4>
Original (Lines 66-83):</h4>
<pre><code class='cpp'>;*************************************************************************
; delay half period
; For I2C in normal mode (100kHz), use T/2 > 5us
; For I2C in fast mode (400kHz), use T/2 > 1.3us
;*************************************************************************
.stabs "",100,0,0,i2c_delay_T2
.stabs "i2cmaster.S",100,0,0,i2c_delay_T2
.func i2c_delay_T2 ; delay 5.0 microsec with 4 Mhz crystal
i2c_delay_T2: ; 4 cycles
rjmp 1f ; 2 "
1: rjmp 2f ; 2 "
2: rjmp 3f ; 2 "
3: rjmp 4f ; 2 "
4: rjmp 5f ; 2 "
5: rjmp 6f ; 2 "
6: nop ; 1 "
ret ; 3 "
.endfunc ; total 20 cyles = 5.0 microsec with 4 Mhz crystal</code></pre>
<h4>
With Modifications (Lines 66-85):</h4>
The following modification assumes a 2MHz clock and that the I2C interface is operating in Normal Mode. Use R17 (thanks Joerg!).<br />
<br />
<i>Note: Use the <a href="http://www.electronics-lab.com/downloads/mcu/003/index.html">AVR Delay Loop Generator</a> program to generate appropriate ASM delay functions for other combinations of clock frequency and I2C modes.</i><br />
<br />
<pre><code class='cpp'>;*************************************************************************
; delay half period
; For I2C in normal mode (100kHz), use T/2 > 5us
; For I2C in fast mode (400kHz), use T/2 > 1.3us
;*************************************************************************
.stabs "",100,0,0,i2c_delay_T2
.stabs "i2cmaster.S",100,0,0,i2c_delay_T2
.func i2c_delay_T2 ; delay 5.0 microsec with 2 Mhz crystal
i2c_delay_T2: ; 4 cycles
; =============================
; delay loop generator
; 3 cycles:
; -----------------------------
; delaying 3 cycles:
ldi R17, 01
WGLOOP0: dec R17
brne WGLOOP0
; =============================
ret ; 3 cycles
.endfunc ; total 10 cyles = 5.0 microsec with 2 Mhz clock</code></pre>
<br />
<b>5. </b>Finally, follow the documentation provided by Peter Fleury (<a href="http://homepage.hispeed.ch/peterfleury/doxygen/avr-gcc-libraries/group__pfleury__ic2master.html">here</a> or in the archive downloaded in Step 1) to correctly initialize and use the I2C interface.<br />
<h4>
</h4>
<h4>
Update (5th March 2011): </h4>
This library doesn't seem to work correctly when using the XMEGA internal 32MHz clock (even after modifying the delay routine appropriately). I'll post another update when this issue has been resolved.<br />
<h4>
</h4>
<h4>
Update (13th March 2011):</h4>
After modifying the delay routine (<i>i2c_delay_T2</i>) to reduce the I2C clock down to 20kHz (or 10kHz), I was able to successfully communicate with my slave device with the XMEGA clock set at 32MHz. Admittedly though however, the slave device (Texas Instruments bq20z65-R1) I used to to test this driver actually uses the SMBus protocol and it therefore must be noted that the SMBus and the I2C bus are usually compatible with each other - with complete compatibility only ensured at clock speeds below 100kHz.<br />
<h4>
</h4>
<h4>
Links: </h4>
<ul>
<li>Peter Fleury's <a href="http://homepage.hispeed.ch/peterfleury/">website</a> </li>
<li><a href="http://www.electronics-lab.com/downloads/mcu/003/index.html">AVR Delay Loop Generator</a> </li>
<li><a href="http://www.maxim-ic.com/app-notes/index.mvp/id/476">Maxim Application Note 476: Comparing the I2C Bus to the SMBus</a> </li>
</ul>
Unknownnoreply@blogger.com3tag:blogger.com,1999:blog-5749257085543471846.post-58808641231966124802011-02-24T11:42:00.000+11:002013-06-15T20:39:01.230+10:00qt-opencv-multithreaded: v1.12 Released<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2DYFI5miE6u9I42WaXiR9L1tQUeNWUKSNZR-EQjvzme1LkEhG-srqjZB7PisT5si0UF8SkNfeXZ3zP2sw-oW_Dgh3rveijzESQSdnN6582JswTvFFzNG2PCotdnHqZQjgYXPhPdMJxfuX/s1600/qt-opencv-multithreaded-1.12.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2DYFI5miE6u9I42WaXiR9L1tQUeNWUKSNZR-EQjvzme1LkEhG-srqjZB7PisT5si0UF8SkNfeXZ3zP2sw-oW_Dgh3rveijzESQSdnN6582JswTvFFzNG2PCotdnHqZQjgYXPhPdMJxfuX/s1600/qt-opencv-multithreaded-1.12.png" height="320" width="318" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">A custom ROI set with canny edge detection on.</td></tr>
</tbody></table>
<br />
This multithreaded <a href="http://qt.nokia.com/">Qt</a>-based <a href="http://opencv.willowgarage.com/">OpenCV</a> application was first released mid-January this year on Google Code (<a href="http://code.google.com/p/qt-opencv-multithreaded/">here</a>) and since then a few minor changes (mostly coding style and GUI-related) to the original application have been made.<br />
<br />
This program was originally written to serve as basic "framework" application for my undergraduate project which required the tracking of multiple moving objects (using OpenCV). The initial implementation of the tracking program simply used a large "while" loop which first captured a frame from the camera and then performed image processing on it - a sequential process. It soon became apparent that as the image processing became quite intensive, not only did the responsiveness of the Qt-based GUI suffer, but the frame processing rate also decreased drastically (resulting in "dropped" frames).<br />
<br />
As a result of this, I decided to re-write the entire tracking program from scratch using separate threads for the capturing of frames from the camera and the image processing. This was a logical decision considering the increasing popularity (and low cost!) of multi-core processors in both laptops and desktops nowadays.<br />
<br />
I have intentionally kept this program quite simple so it can be easily modified to suit the needs of any Qt GUI-based computer vision project using OpenCV. Several in-built (and user-settable) OpenCV image processing functions have also been included so that multithreading performance can be assessed (see full list of features <a href="http://code.google.com/p/qt-opencv-multithreaded/#Features">here</a>).<br />
<br />
In short, this application takes advantage of multithreading to allow frames to be captured from the camera while at the same time performing image processing. In other words, once a frame has been captured from the camera, the application does not have to wait until image processing is performed on that frame before it starts capturing a new frame - instead a new frame is captured, added to a FIFO queue and is processed a short time later.<br />
<br />
Please go to the project page at Google Code to download and for more details (including installation and usage instructions). Any feedback/suggestions/questions concerning this "framework" application would be greatly appreciated. I hope it serves as a basis for many interesting computer vision projects in the future!<br />
<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEDQo2h4V297llSzUTxkVnGrw4PMRgarYOgOSY0lUkPS_uTxDHxQ-_sDbHv3t9UpR2gWxv83U6LWBqELR1r83iJ9v0VEUu9Cg9RDaXdTyu205x_TyiynXBSxhiRdh7b6UtvUeVSz9UFu0r/s1600/qt-opencv-multithreaded-1.12_dialog.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEDQo2h4V297llSzUTxkVnGrw4PMRgarYOgOSY0lUkPS_uTxDHxQ-_sDbHv3t9UpR2gWxv83U6LWBqELR1r83iJ9v0VEUu9Cg9RDaXdTyu205x_TyiynXBSxhiRdh7b6UtvUeVSz9UFu0r/s1600/qt-opencv-multithreaded-1.12_dialog.png" height="320" width="318" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Processing Settings dialog used to customize the in-built OpenCV functions.</td></tr>
</tbody></table>
<br />
<h4>
Links:</h4>
<ul>
<li><a href="http://code.google.com/p/qt-opencv-multithreaded/">qt-opencv-multithreaded</a> project hosted @ <a href="http://code.google.com/">Google Code</a> </li>
</ul>
Unknownnoreply@blogger.com1