Work Description

Title: Data Fusion of AIS and LPMS data on the Great Lakes used to assess Maritime Transport Efficiency Open Access Deposited

h
Attribute Value
Methodology
  • Lock Performance Monitoring System (LPMS) were obtained directly from the Army Corps of Engineers (USACE) Soo Locks facility in Sault Ste Marie via Excel file in September 2018.

  • Automatic Identification System (AIS) data were obtained through the MarineCadastre website.  https://marinecadastre.gov/ais/
Description
  • This data was collected and processed as part of ongoing research to characterize waterway infrastructure performance in the Great Lakes. These dataset enable researchers to evaluate both travel time and vessel carrying capacity in the waterway.

  • I assembled AIS data from the MarineCadastre website for UTM Zones 15-18 for the years 2015-2017 available in csv format. I combined files for Navigation Seasons, defined as March to January and clipped data for a set of predefined features using a python code (AIS Data Processor.ipynb). The code writes the appended and clipped files to csv for a single Navigation Year. The written files are submitted here: Trimmed_NY2015_new.csv (n=13,228,824); Trimmed_NY2016_new.csv (n=18,782,779); Trimmed_NY2017_new.csv (n=16,816,603)

  • Data fusion of AIS and LPMS used the following algorithm for a subset of 30 vessels on the waterway. Let A be the original AIS data and let B be the subset of records for vessel i within geographic feature j. The script for this analysis is attached (Maritime Data Fusion.ipynb)

  • For Connecting Channels and select segments of the Great Lakes: 1. Subset A for vessel i. Let B_i⊆A | 2. Subset B_i in geographic feature, Gj. Let B_ij⊆B_i | 3. Select tmin for each unique date or any consecutive dates, record as vessel i arrival to feature j, b_ijt | 4. IF feature j is a harbor or lock, select tmax for each unique date or any consecutive dates, record as departure from feature j, b_ijt | 5. Calculate time elapsed between features for each vessel

  • For vessel passage through the Soo Locks: 1. Subset A for vessel i. Let B_i⊆A | 2. Subset B_i in geographic boundaries (46.5<Lat<46.6, -84.4<Lon<-84.3). Let C_(i,lock)⊆B_i | 3. Select tmin for each unique date or any consecutive dates, record as arrival to Soo Locks | 4. Select tmax for each unique date or any consecutive dates, record as departure to Soo Locks | 5. Calculate time delta between arrival and departure times

  • The merged dataset is included here along with the raw LPMS data: Merged_Data_new.csv (n=42,021), LPMS obscured.csv (n=55,342). VesselNames have been obscured in these datasets to protect proprietary information for shipping companies.
Creator
Depositor
  • sugrue@umich.edu
Contact information
Discipline
Funding agency
  • Department of Defense (DOD)
Keyword
Citations to related material
  • Sugrue, D., Adriaens, P. (in review) Multi-dimensional Data Fusion to Evaluate Waterway Performance: Maritime Transport Efficiency of Iron Ore on the Great Lakes. Water Resources Research.
Resource type
Last modified
  • 11/18/2022
Published
  • 07/06/2020
Language
DOI
  • https://doi.org/10.7302/kpft-b014
License
To Cite this Work:
Sugrue, D. P. (2020). Data Fusion of AIS and LPMS data on the Great Lakes used to assess Maritime Transport Efficiency [Data set], University of Michigan - Deep Blue Data. https://doi.org/10.7302/kpft-b014

Relationships

This work is not a member of any user collections.

Files (Count: 7; Size: 7.89 GB)

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# AIS Workbook\n",
"### This workbook utilizes AIS Data to establish travel time distributions for iron ore carriers through specified segments of the Great Lakes waterway.\n",
"#### Source of data https://marinecadastre.gov/ais/\n",
"#### Index of Universal Transverse Mercator Zone at https://marinecadastre.gov/AIS/AIS%20Documents/UTMZoneMap2014.png\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The U.S. Coast Guard collects Automatic Identification System (AIS) data through an onboard navigation safety device. The AIS transmits the location and characteristics of vessels in real time. The Bureau of Ocean Energy Management (BOEM) and the National Oceanic and Atmospheric Administration (NOAA) jointly make available some of the historical data from the network of AIS receivers. Information such as location, time, ship type, speed, length, beam, and draft have been extracted from the raw data and prepared for researchers.\n",
"\n",
"Data for this analysis were assembled for UTM zones 15-18 covering the period March 2013 to Jan 2018. Monthly data files were trimmed to only include the Great Lakes Region and appended into a single monthly file. Monthly files were later appended into a single database for Great Lakes traffic (to be published under Data in Brief). "
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"# importing required packages\n",
"\n",
"import matplotlib.pyplot as plt #for plotting \n",
"\n",
"import os\n",
"import conda\n",
"\n",
"conda_file_dir = conda.__file__\n",
"conda_dir = conda_file_dir.split('lib')[0]\n",
"proj_lib = os.path.join(os.path.join(conda_dir, 'share'), 'proj')\n",
"os.environ[\"PROJ_LIB\"] = proj_lib\n",
"\n",
"from mpl_toolkits.basemap import Basemap\n",
"import matplotlib.colors as colors\n",
"import matplotlib.cm as cmx #for colormap \n",
"from matplotlib.collections import LineCollection\n",
"#from matplotlib.patches import Polygon\n",
"import scipy.stats as stats\n",
"import itertools\n",
"\n",
"import pandas as pd #for analyzing data\n",
"import numpy as np #for numpy mean & accuracy\n",
"import datetime as dt #for datetime objects\n",
"from datetime import datetime, timedelta\n",
"import seaborn as sns\n",
"\n",
"import warnings\n",
"warnings.filterwarnings(\"ignore\")"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"NY2015 loaded with 13228824 lines.\n",
"NY2016 loaded with 18782779 lines.\n",
"NY2017 loaded with 16816603 lines.\n",
"Files appended\n",
"There are 48828206 original lines of data in the Dataframe.\n",
"There are 2205 unique vessels in the dataset.\n"
]
},
{
"data": {
"text/html": [
"

\n",
"\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"\n",
"\n",
" \n",
" \n",
" \n",
" MMSI\n",
" LAT\n",
" LON\n",
" SOG\n",
" VesselName\n",
" Status\n",
" Draft\n",
" Cargo\n",
" \n",
" \n",
" BaseDateTime\n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" 2015-03-01 00:00:02\n",
" 316003124\n",
" 42.02662\n",
" -82.60184\n",
" 0.0\n",
" PELEE ISLANDER\n",
" undefined\n",
" 2.33\n",
" NaN\n",
" \n",
" \n",
" 2015-03-01 00:00:03\n",
" 316002238\n",
" 46.50399\n",
" -84.32688\n",
" 0.0\n",
" ANGLIAN LADY\n",
" undefined\n",
" 4.27\n",
" 52.0\n",
" \n",
" \n",
" 2015-03-01 00:00:03\n",
" 316002238\n",
" 46.50399\n",
" -84.32688\n",
" 0.0\n",
" ANGLIAN LADY\n",
" undefined\n",
" 4.27\n",
" 52.0\n",
" \n",
" \n",
" 2015-03-01 00:00:03\n",
" 367063240\n",
" 46.48492\n",
" -84.29752\n",
" 0.0\n",
" SUGAR ISLANDER II\n",
" under way using engine\n",
" 0.00\n",
" 60.0\n",
" \n",
" \n",
" 2015-03-01 00:00:03\n",
" 367063240\n",
" 46.48492\n",
" -84.29752\n",
" 0.0\n",
" SUGAR ISLANDER II\n",
" under way using engine\n",
" 0.00\n",
" 60.0\n",
" \n",
" \n",
"\n",
"
"
],
"text/plain": [
" MMSI LAT LON SOG VesselName \\\n",
"BaseDateTime \n",
"2015-03-01 00:00:02 316003124 42.02662 -82.60184 0.0 PELEE ISLANDER \n",
"2015-03-01 00:00:03 316002238 46.50399 -84.32688 0.0 ANGLIAN LADY \n",
"2015-03-01 00:00:03 316002238 46.50399 -84.32688 0.0 ANGLIAN LADY \n",
"2015-03-01 00:00:03 367063240 46.48492 -84.29752 0.0 SUGAR ISLANDER II \n",
"2015-03-01 00:00:03 367063240 46.48492 -84.29752 0.0 SUGAR ISLANDER II \n",
"\n",
" Status Draft Cargo \n",
"BaseDateTime \n",
"2015-03-01 00:00:02 undefined 2.33 NaN \n",
"2015-03-01 00:00:03 undefined 4.27 52.0 \n",
"2015-03-01 00:00:03 undefined 4.27 52.0 \n",
"2015-03-01 00:00:03 under way using engine 0.00 60.0 \n",
"2015-03-01 00:00:03 under way using engine 0.00 60.0 "
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#Importing Previously processed AIS Data for the Great Lakes \n",
"#NY2014 = pd.read_csv('./Data/Trimmed_NY2014.csv')\n",
"#print(f'NY2014 loaded with {len(NY2014)} lines.')\n",
"NY2015 = pd.read_csv('./Data/Trimmed_NY2015_new.csv')\n",
"print(f'NY2015 loaded with {len(NY2015)} lines.')\n",
"NY2016 = pd.read_csv('./Data/Trimmed_NY2016_new.csv')\n",
"print(f'NY2016 loaded with {len(NY2016)} lines.')\n",
"NY2017 = pd.read_csv('./Data/Trimmed_NY2017_new.csv')\n",
"print(f'NY2017 loaded with {len(NY2017)} lines.')\n",
"AIS = NY2015.append([NY2016, NY2017])\n",
"print('Files appended')\n",
"\n",
"print(f\"There are {len(AIS)} original lines of data in the Dataframe.\")\n",
"\n",
"#Renaming select entries to match records in the LPMS\n",
"AIS['VesselName'] = AIS['VesselName'].str.replace('JOETHOMPSON','JOSEPH H THOMPSON JR')\n",
"AIS['VesselName'] = AIS['VesselName'].str.replace('CLYDE S VAN ENKEVORT','TUG CLYDE S VANENKEVORT')\n",
"AIS = AIS.set_index(pd.to_datetime(AIS['BaseDateTime']), drop=True) #set index to Datetime\n",
"\n",
"#print(f\"There are {len(AIS)} lines of data with unnamed vessels removed.\")\n",
"print(f\"There are {len(np.unique(AIS['MMSI']))} unique vessels in the dataset.\")\n",
"\n",
"#Reducing the dataframe to only include columns listed below. \n",
"AIS=AIS[['MMSI','LAT','LON','SOG','VesselName','Status','Draft','Cargo']] \n",
"AIS.head()\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Lock Data was obtained from the Soo Locks facility in Sault Ste Marie, MI in its raw form. Vessel Names and identification numbers have been obscured to protect proprietary information for shipping companies. "
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"55342\n"
]
},
{
"data": {
"text/html": [
"
\n",
"\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"\n",
"\n",
" \n",
" \n",
" \n",
" VesselName\n",
" Country\n",
" Origin\n",
" Destination\n",
" Code\n",
" Tons\n",
" Cargo\n",
" \n",
" \n",
" BaseDateTime\n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" 2005-03-25 00:01:00\n",
" INDIANA HARBOR\n",
" 840\n",
" STURGEON BAY, WI\n",
" TWO HARBORS, MN\n",
" 1\n",
" 0\n",
" Empty Barges\n",
" \n",
" \n",
" 2005-03-25 02:56:00\n",
" AMERICAN SPIRIT\n",
" 840\n",
" SUPERIOR, WI\n",
" GARY, IN\n",
" 4410\n",
" 53952\n",
" Iron Ore\n",
" \n",
" \n",
" 2005-03-25 11:25:00\n",
" PRESQUE ISLE\n",
" 840\n",
" TWO HARBORS, MN\n",
" GARY, IN\n",
" 4410\n",
" 55608\n",
" Iron Ore\n",
" \n",
" \n",
" 2005-03-25 13:14:00\n",
" CHARLES M BEEGHLY\n",
" 840\n",
" CALUMET HARBOR, IL\n",
" PRESQUE ISLE, MI\n",
" 1100\n",
" 22287\n",
" Coal Lignite\n",
" \n",
" \n",
" 2005-03-25 14:33:00\n",
" LEE A TREGURTHA\n",
" 840\n",
" PORT LAMBTON CAN\n",
" DULUTH, MN\n",
" 1\n",
" 0\n",
" Empty Barges\n",
" \n",
" \n",
"\n",
"
"
],
"text/plain": [
" VesselName Country Origin \\\n",
"BaseDateTime \n",
"2005-03-25 00:01:00 INDIANA HARBOR 840 STURGEON BAY, WI \n",
"2005-03-25 02:56:00 AMERICAN SPIRIT 840 SUPERIOR, WI \n",
"2005-03-25 11:25:00 PRESQUE ISLE 840 TWO HARBORS, MN \n",
"2005-03-25 13:14:00 CHARLES M BEEGHLY 840 CALUMET HARBOR, IL \n",
"2005-03-25 14:33:00 LEE A TREGURTHA 840 PORT LAMBTON CAN \n",
"\n",
" Destination Code Tons Cargo \n",
"BaseDateTime \n",
"2005-03-25 00:01:00 TWO HARBORS, MN 1 0 Empty Barges \n",
"2005-03-25 02:56:00 GARY, IN 4410 53952 Iron Ore \n",
"2005-03-25 11:25:00 GARY, IN 4410 55608 Iron Ore \n",
"2005-03-25 13:14:00 PRESQUE ISLE, MI 1100 22287 Coal Lignite \n",
"2005-03-25 14:33:00 DULUTH, MN 1 0 Empty Barges "
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#Importing Maritime Traffic Data from the Soo Locks and removing unused columns \n",
"LPMS = pd.read_csv('./Data/Combined Soo Locks Data.csv')\n",
"#Delete unused columns from the original data\n",
"del LPMS['VESSEL_FUNCTION_TYPE']\n",
"del LPMS['BARGE_ID']\n",
"del LPMS['CHMBR_NO']\n",
"del LPMS['LOCK_RESTRICTION']\n",
"del LPMS['EROC']\n",
"del LPMS['RIVER_CODE']\n",
"del LPMS['VESSEL_NO']\n",
"#Renaming columns to be more intuitive\n",
"LPMS = LPMS.rename(columns={\"VESSEL_NAME\":\"VesselName\",'VESSEL_FLAG':'Country', \n",
" 'SOL_DATE':'BaseDateTime',\"ORIGIN\":\"Origin\", \"DESTINATION\":\"Destination\", \n",
" \"COMM_CODE\":\"Code\", 'COMMODITY_TONS':'Tons', \"COMM_DESC\":\"Cargo\"})\n",
"#Renaming select names to match the AIS dataframe\n",
"LPMS['VesselName'] = LPMS['VesselName'].str.replace('.','')\n",
"LPMS['VesselName'] = LPMS['VesselName'].str.replace('G3 MARQUIS','G3 MARQUIS')\n",
"LPMS['VesselName'] = LPMS['VesselName'].str.replace('ST CLAIR ','ST CLAIR')\n",
"LPMS['VesselName'] = LPMS['VesselName'].str.replace('ALGOMA BUFFALO','BUFFALO')\n",
"#LPMS['VesselName'] = LPMS['VesselName'].str.replace('DEFIANCE','TUG DEFIANCE') #\n",
"LPMS['VesselName'] = LPMS['VesselName'].str.replace('CSL ST LAURENT','CSL ST-LAURENT')\n",
"\n",
"#Setting timestamp as index and deleting the redundant column\n",
"LPMS = LPMS.set_index(pd.to_datetime(LPMS['BaseDateTime']), drop=True)\n",
"del LPMS['BaseDateTime']\n",
"print(len(LPMS))\n",
"LPMS.head()"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"11032\n"
]
},
{
"data": {
"text/html": [
"
\n",
"\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"\n",
"\n",
" \n",
" \n",
" \n",
" VesselName\n",
" Country\n",
" Origin\n",
" Destination\n",
" Code\n",
" Tons\n",
" Cargo\n",
" \n",
" \n",
" BaseDateTime\n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" 2015-03-25 20:09:00\n",
" EDWIN H GOTT\n",
" 840\n",
" MILWAUKEE, WI\n",
" TWO HARBORS, MN\n",
" 1\n",
" 0\n",
" Empty Barges\n",
" \n",
" \n",
" 2015-03-26 01:12:00\n",
" ROGER BLOUGH\n",
" 840\n",
" ERIE, PA\n",
" TWO HARBORS, MN\n",
" 1\n",
" 0\n",
" Empty Barges\n",
" \n",
" \n",
" 2015-03-27 18:22:00\n",
" JOHN G MUNSON\n",
" 840\n",
" DULUTH, MN\n",
" GARY, IN\n",
" 4410\n",
" 26837\n",
" Iron Ore\n",
" \n",
" \n",
" 2015-03-29 08:05:00\n",
" ALGOMA OLYMPIC\n",
" 124\n",
" SARNIA CAN\n",
" SUPERIOR, WI\n",
" 1\n",
" 0\n",
" Empty Barges\n",
" \n",
" \n",
" 2015-03-30 19:40:00\n",
" PHILIP R CLARKE\n",
" 840\n",
" TOLEDO, OH\n",
" TWO HARBORS, MN\n",
" 1\n",
" 0\n",
" Empty Barges\n",
" \n",
" \n",
"\n",
"
"
],
"text/plain": [
" VesselName Country Origin Destination \\\n",
"BaseDateTime \n",
"2015-03-25 20:09:00 EDWIN H GOTT 840 MILWAUKEE, WI TWO HARBORS, MN \n",
"2015-03-26 01:12:00 ROGER BLOUGH 840 ERIE, PA TWO HARBORS, MN \n",
"2015-03-27 18:22:00 JOHN G MUNSON 840 DULUTH, MN GARY, IN \n",
"2015-03-29 08:05:00 ALGOMA OLYMPIC 124 SARNIA CAN SUPERIOR, WI \n",
"2015-03-30 19:40:00 PHILIP R CLARKE 840 TOLEDO, OH TWO HARBORS, MN \n",
"\n",
" Code Tons Cargo \n",
"BaseDateTime \n",
"2015-03-25 20:09:00 1 0 Empty Barges \n",
"2015-03-26 01:12:00 1 0 Empty Barges \n",
"2015-03-27 18:22:00 4410 26837 Iron Ore \n",
"2015-03-29 08:05:00 1 0 Empty Barges \n",
"2015-03-30 19:40:00 1 0 Empty Barges "
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#This clips the LPMS data the navigation years of interest. \n",
"#A navigation year in the Great Lakes is 25 March to 15 Jan. I have assigned a 5 days buffer.\n",
"NY = LPMS.loc[(LPMS.index>'2015-3-20')&(LPMS.index<'2018-1-20')]\n",
"print(len(NY))\n",
"NY.head()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"\n",
"\n",
" \n",
" \n",
" \n",
" VesselName\n",
" Country\n",
" Origin\n",
" Destination\n",
" Code\n",
" Tons\n",
" Cargo\n",
" \n",
" \n",
" BaseDateTime\n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" 2018-01-13 20:24:00\n",
" TUG ANGLIAN LADY\n",
" 124\n",
" SAULT STE MARIE (ABOVE) CAN\n",
" DETROIT, MI\n",
" 5330\n",
" 10108\n",
" Iron and Steel Plates and Sheets\n",
" \n",
" \n",
" 2018-01-14 15:03:00\n",
" JOSEPH L BLOCK\n",
" 840\n",
" SUPERIOR, WI\n",
" BURNS HARBOR, IN\n",
" 4410\n",
" 31360\n",
" Iron Ore\n",
" \n",
" \n",
" 2018-01-14 16:16:00\n",
" AMERICAN MARINER\n",
" 840\n",
" TWO HARBORS, MN\n",
" DETROIT, MI\n",
" 4410\n",
" 30838\n",
" Iron Ore\n",
" \n",
" \n",
" 2018-01-15 09:49:00\n",
" JOYCE L VANENKEVORT\n",
" 840\n",
" TWO HARBORS, MN\n",
" CONNEAUT, OH\n",
" 4410\n",
" 32206\n",
" Iron Ore\n",
" \n",
" \n",
" 2018-01-15 14:23:00\n",
" EDWIN H GOTT\n",
" 840\n",
" DETROIT, MI\n",
" DULUTH, MN\n",
" 1\n",
" 0\n",
" Empty Barges\n",
" \n",
" \n",
"\n",
"
"
],
"text/plain": [
" VesselName Country Origin \\\n",
"BaseDateTime \n",
"2018-01-13 20:24:00 TUG ANGLIAN LADY 124 SAULT STE MARIE (ABOVE) CAN \n",
"2018-01-14 15:03:00 JOSEPH L BLOCK 840 SUPERIOR, WI \n",
"2018-01-14 16:16:00 AMERICAN MARINER 840 TWO HARBORS, MN \n",
"2018-01-15 09:49:00 JOYCE L VANENKEVORT 840 TWO HARBORS, MN \n",
"2018-01-15 14:23:00 EDWIN H GOTT 840 DETROIT, MI \n",
"\n",
" Destination Code Tons \\\n",
"BaseDateTime \n",
"2018-01-13 20:24:00 DETROIT, MI 5330 10108 \n",
"2018-01-14 15:03:00 BURNS HARBOR, IN 4410 31360 \n",
"2018-01-14 16:16:00 DETROIT, MI 4410 30838 \n",
"2018-01-15 09:49:00 CONNEAUT, OH 4410 32206 \n",
"2018-01-15 14:23:00 DULUTH, MN 1 0 \n",
"\n",
" Cargo \n",
"BaseDateTime \n",
"2018-01-13 20:24:00 Iron and Steel Plates and Sheets \n",
"2018-01-14 15:03:00 Iron Ore \n",
"2018-01-14 16:16:00 Iron Ore \n",
"2018-01-15 09:49:00 Iron Ore \n",
"2018-01-15 14:23:00 Empty Barges "
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"NY.tail()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"There were 2862 shipments of iron ore in this time period.\n",
"83 unique vessels carried iron ore.\n"
]
}
],
"source": [
"iron = NY.loc[NY.Cargo=='Iron Ore'] #subsets LPMS data to only include vessels that have carried iron ore in the specified year\n",
"print(f'There were {len(iron)} shipments of iron ore in this time period.')\n",
"vessels = iron.VesselName.unique() #list of iron carrying vessels\n",
"print(f'{len(vessels)} unique vessels carried iron ore.')"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"30\n"
]
},
{
"data": {
"text/plain": [
"Index(['AMERICAN CENTURY', 'AMERICAN INTEGRITY', 'AMERICAN SPIRIT', 'BUFFALO',\n",
" 'BURNS HARBOR', 'CASON J CALLAWAY', 'CSL ASSINIBOINE', 'CSL LAURENTIEN',\n",
" 'CSL NIAGARA', 'EDGAR B SPEER', 'EDWIN H GOTT', 'HERBERT C JACKSON',\n",
" 'HON JAMES L OBERSTAR', 'JAMES R BARKER', 'JOHN G MUNSON',\n",
" 'JOSEPH L BLOCK', 'JOYCE L VANENKEVORT', 'KAYE E BARKER',\n",
" 'LEE A TREGURTHA', 'MESABI MINER', 'PHILIP R CLARKE', 'PRESQUE ISLE',\n",
" 'ROGER BLOUGH', 'RT HON PAUL J MARTIN', 'SAM LAUD', 'STEWART J CORT',\n",
" 'THUNDER BAY', 'TUG CLYDE S VANENKEVORT', 'VICTORY',\n",
" 'WALTER J MCCARTHY JR'],\n",
" dtype='object', name='VesselName')"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#Creating list of vessels that carry iron ore\n",
"vessels = iron.VesselName.unique()\n",
"\n",
"#Restricting the list of vessels to those that have made 10 or more trips with iron ore.\n",
"#I wanted the data to mostly reflect vessesl that are making the back and forth runs between lakes. \n",
"count=iron.groupby(iron.VesselName)['Tons'].count()\n",
"shipper = count.loc[(count>30)==True]\n",
"vessels=shipper.index #list of vessels with >10 iron trips\n",
"print(len(vessels))\n",
"vessels\n"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"There are 2271 trips of iron ore in the dataset.\n",
"There are 10 vessels larger than 65,000 Tons.\n",
"There are 10 vessels smaller than 35,000 Tons.\n",
"There are 10 vessels between 35,000 and 65,000 Tons.\n",
"There are 837 records for big vessels.\n",
"There are 606 records for medium vessels.\n",
"There are 828 records for small vessels.\n"
]
},
{
"data": {
"text/html": [
"
\n",
"\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"\n",
"\n",
" \n",
" \n",
" \n",
" VesselName\n",
" Country\n",
" Origin\n",
" Destination\n",
" Code\n",
" Tons\n",
" Cargo\n",
" \n",
" \n",
" BaseDateTime\n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" 2015-04-02 13:20:00\n",
" EDWIN H GOTT\n",
" 840\n",
" TWO HARBORS, MN\n",
" GARY, IN\n",
" 4410\n",
" 66157\n",
" Iron Ore\n",
" \n",
" \n",
" 2015-04-09 22:28:00\n",
" STEWART J CORT\n",
" 840\n",
" SUPERIOR, WI\n",
" BURNS HARBOR, IN\n",
" 4410\n",
" 62526\n",
" Iron Ore\n",
" \n",
" \n",
" 2015-04-12 02:28:00\n",
" AMERICAN INTEGRITY\n",
" 840\n",
" SILVER BAY, MN\n",
" CLEVELAND, OH\n",
" 4410\n",
" 63499\n",
" Iron Ore\n",
" \n",
" \n",
" 2015-04-13 04:46:00\n",
" JAMES R BARKER\n",
" 840\n",
" DULUTH, MN\n",
" INDIANA HARBOR, IN\n",
" 4410\n",
" 66136\n",
" Iron Ore\n",
" \n",
" \n",
" 2015-04-13 09:05:00\n",
" EDGAR B SPEER\n",
" 840\n",
" TWO HARBORS, MN\n",
" GARY, IN\n",
" 4410\n",
" 67376\n",
" Iron Ore\n",
" \n",
" \n",
"\n",
"
"
],
"text/plain": [
" VesselName Country Origin \\\n",
"BaseDateTime \n",
"2015-04-02 13:20:00 EDWIN H GOTT 840 TWO HARBORS, MN \n",
"2015-04-09 22:28:00 STEWART J CORT 840 SUPERIOR, WI \n",
"2015-04-12 02:28:00 AMERICAN INTEGRITY 840 SILVER BAY, MN \n",
"2015-04-13 04:46:00 JAMES R BARKER 840 DULUTH, MN \n",
"2015-04-13 09:05:00 EDGAR B SPEER 840 TWO HARBORS, MN \n",
"\n",
" Destination Code Tons Cargo \n",
"BaseDateTime \n",
"2015-04-02 13:20:00 GARY, IN 4410 66157 Iron Ore \n",
"2015-04-09 22:28:00 BURNS HARBOR, IN 4410 62526 Iron Ore \n",
"2015-04-12 02:28:00 CLEVELAND, OH 4410 63499 Iron Ore \n",
"2015-04-13 04:46:00 INDIANA HARBOR, IN 4410 66136 Iron Ore \n",
"2015-04-13 09:05:00 GARY, IN 4410 67376 Iron Ore "
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#Trisecting data by vessel class \n",
"begin= pd.datetime(year=2015, month = 3, day = 25) #beginning of navigation year 2005\n",
"end = pd.datetime(year=2018, month = 1, day = 15) # end of navigation year 2017\n",
"#subsets iron ore data for 44 vessels operating in navigation years 2005-2017\n",
"iron=iron.loc[((iron.VesselName.isin(vessels))&(iron.index>begin)&(iron.index65000)==True]\n",
"print(f'There are {len(Bigs)} vessels larger than 65,000 Tons.')\n",
"Smalls = MaxLoad.loc[(MaxLoad<35000)==True]\n",
"print(f'There are {len(Smalls)} vessels smaller than 35,000 Tons.')\n",
"Mediums = MaxLoad.loc[((MaxLoad>35000)&(MaxLoad<65000))==True]\n",
"print(f'There are {len(Mediums)} vessels between 35,000 and 65,000 Tons.')\n",
"\n",
"\n",
"BIG= iron.loc[iron.VesselName.isin(Bigs.index)]\n",
"print(f'There are {len(BIG)} records for big vessels.')\n",
"MEDIUM= iron.loc[iron.VesselName.isin(Mediums.index)]\n",
"print(f'There are {len(MEDIUM)} records for medium vessels.')\n",
"SMALL= iron.loc[iron.VesselName.isin(Smalls.index)]\n",
"print(f'There are {len(SMALL)} records for small vessels.')\n",
"BIG.head()"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"30\n"
]
},
{
"data": {
"text/plain": [
"array([366971350, 316001635, 366904880, 366904910, 366930730, 366971360,\n",
" 367082230, 366972030, 366971370, 366983440, 367480260, 367050550,\n",
" 366904950, 366904930, 367057570, 366971330, 366901880, 366971340,\n",
" 366905890, 316029000, 367120990, 316023339, 366904890, 316001637,\n",
" 367121010, 366906610, 366938760, 316001633, 366938740, 338888000])"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#Identifying MMSI for each of the iron vessels. The MMSI is necessary to identify ships in the AIS data before 2015. \n",
"#Three vessels have no listed MMSI, and two have multiple listings \n",
"ais=AIS.loc[AIS.VesselName.isin(vessels)]\n",
"MMSIs=ais.MMSI.unique()\n",
"print(len(MMSIs))\n",
"MMSIs"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"\"Iron=pd.DataFrame()\\nfor MMSI in MMSIs:\\n subset = AIS.loc[(AIS.MMSI==MMSI)]\\n #creates timedelta between each point in the dataframe for given vessel, units of hours\\n subset['Duration']=subset.index.to_series().diff().astype('timedelta64[h]') \\n subset['from_LAT']=subset.LAT.shift() # this records the last position from which the timedelta is calculated\\n subset['from_LON']=subset.LON.shift() # this records the last position from which the timedelta is calculated\\n #filling Vessel Names for nan values in the AIS data\\n subset.loc[:,'VesselName']=subset.loc[:,'VesselName'].bfill() # backfill\\n subset.loc[:,'VesselName']=subset.loc[:,'VesselName'].ffill() # forward fill\\n #subsets the data further for dt > specified # hours. \\n subset=subset.loc[(subset.Duration>0.5)]\\n Iron = Iron.append(subset)\\n #print(f'{MMSI} has {len(subset)} data points.')\\nIron = Iron.sort_index()\\nprint(len(Iron))\\nIron.head()\\n\\n#resetting vessel list to names. I prefer to use names in the analysis because it is more intuitive. MMSI would also work. \\nvessels=Iron.VesselName.unique()\\nprint(f'There are {len(vessels)} vessels that we will analyze movements.')\\nvessels\\n\""
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#This cell is written to fill VesselName data for AIS record prior to 2015. \n",
"#IT DOES NOT WORK - MMSIs were encrypted by the USCG until 2015 and the records do not match those for 2015-2017.\n",
"#The Expansion of this dataset into those earlier years require the encryption key from the USCG. \n",
"\n",
"'''Iron=pd.DataFrame()\n",
"for MMSI in MMSIs:\n",
" subset = AIS.loc[(AIS.MMSI==MMSI)]\n",
" #creates timedelta between each point in the dataframe for given vessel, units of hours\n",
" subset['Duration']=subset.index.to_series().diff().astype('timedelta64[h]') \n",
" subset['from_LAT']=subset.LAT.shift() # this records the last position from which the timedelta is calculated\n",
" subset['from_LON']=subset.LON.shift() # this records the last position from which the timedelta is calculated\n",
" #filling Vessel Names for nan values in the AIS data\n",
" subset.loc[:,'VesselName']=subset.loc[:,'VesselName'].bfill() # backfill\n",
" subset.loc[:,'VesselName']=subset.loc[:,'VesselName'].ffill() # forward fill\n",
" #subsets the data further for dt > specified # hours. \n",
" subset=subset.loc[(subset.Duration>0.5)]\n",
" Iron = Iron.append(subset)\n",
" #print(f'{MMSI} has {len(subset)} data points.')\n",
"Iron = Iron.sort_index()\n",
"print(len(Iron))\n",
"Iron.head()\n",
"\n",
"#resetting vessel list to names. I prefer to use names in the analysis because it is more intuitive. MMSI would also work. \n",
"vessels=Iron.VesselName.unique()\n",
"print(f'There are {len(vessels)} vessels that we will analyze movements.')\n",
"vessels\n",
"'''"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"\n",
"\n",
" \n",
" \n",
" \n",
" West\n",
" East\n",
" North\n",
" South\n",
" \n",
" \n",
" \n",
" \n",
" Two Harbors\n",
" -91.713\n",
" -91.601\n",
" 47.064\n",
" 46.958\n",
" \n",
" \n",
" Silver Bay\n",
" -91.277\n",
" -91.199\n",
" 47.292\n",
" 47.239\n",
" \n",
" \n",
" Duluth-Superior\n",
" -92.160\n",
" -91.852\n",
" 46.926\n",
" 46.633\n",
" \n",
" \n",
" Presque Isle\n",
" -87.395\n",
" -87.357\n",
" 46.582\n",
" 46.561\n",
" \n",
" \n",
" St Marys River\n",
" -84.996\n",
" -83.955\n",
" 46.770\n",
" 46.107\n",
" \n",
" \n",
"\n",
"
"
],
"text/plain": [
" West East North South\n",
"Two Harbors -91.713 -91.601 47.064 46.958\n",
"Silver Bay -91.277 -91.199 47.292 47.239\n",
"Duluth-Superior -92.160 -91.852 46.926 46.633\n",
"Presque Isle -87.395 -87.357 46.582 46.561\n",
"St Marys River -84.996 -83.955 46.770 46.107"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"features=pd.DataFrame(columns=['West','East','North','South'])\n",
"features.loc['Two Harbors'] =[-91.713,-91.601,47.064,46.958]\n",
"features.loc['Silver Bay'] =[-91.277,-91.199,47.292,47.239]\n",
"features.loc['Duluth-Superior']=[-92.160,-91.852,46.926,46.633]\n",
"features.loc['Presque Isle'] =[-87.395,-87.357,46.582,46.561]\n",
"\n",
"#features.loc['St Marys River'] =[-84.584,-83.955,46.561,46.107]\n",
"features.loc['St Marys River'] =[-84.996,-83.955,46.770,46.107] #including Whitefish Bay\n",
"features.loc['St Clair'] =[-82.466,-82.375,43.015,43.009]\n",
"features.loc['Detroit River'] =[-83.219,-83.062,42.075,42.064]\n",
"features.loc['W Lake Erie'] =[-82.671,-82.572,42.057,41.406]\n",
"\n",
"features.loc['Welland Canal'] =[-79.261,-79.182,43.220,42.868]\n",
"features.loc['Mackinaw Straits']=[-84.753,-84.725,45.857,45.766]\n",
"#features.loc['Whitefish Bay'] =[-84.996,-84.541,46.770,46.763]\n",
"features.loc['S.Lake Michigan']=[-87.548,-86.847,41.750,41.743]\n",
"\n",
"features.loc['E.Lake Ontario'] =[-76.599,-76.592,44.274,43.421]\n",
"features.loc['Thunder Bay'] =[-89.267,-89.092,48.476,48.311]\n",
"features.loc['Nanticoke'] =[-80.054,-80.029,42.802,42.766]\n",
"features.loc['Hamilton'] =[-79.780,-79.802,43.262,43.303]\n",
"\n",
"features.loc['Indiana Harbor'] =[-87.496,-87.429,41.682,41.641]\n",
"features.loc['Gary'] =[-87.329,-87.319,41.628,41.609]\n",
"features.loc['Burns Harbor'] =[-87.153,-87.144,41.647,41.634]\n",
"features.loc['Detroit'] =[-83.110,-83.106,42.281,42.278]\n",
"\n",
"features.loc['Dearborn'] =[-83.161,-83.153,42.307,42.297]\n",
"features.loc['Toledo'] =[-83.543,-83.333,41.769,41.460]\n",
"features.loc['Cleveland'] =[-81.725,-81.663,41.514,41.460]\n",
"features.loc['Ashtabula'] =[-80.804,-80.781,41.919,41.878]\n",
"features.loc['Conneaut'] =[-80.598,-80.540,42.008,41.951]\n",
"\n",
"features.head()"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"AMERICAN CENTURY has 351627 data points.\n",
"AMERICAN INTEGRITY has 353867 data points.\n",
"AMERICAN SPIRIT has 288205 data points.\n",
"BUFFALO has 399908 data points.\n",
"BURNS HARBOR has 431646 data points.\n",
"CASON J CALLAWAY has 190759 data points.\n",
"CSL ASSINIBOINE has 188342 data points.\n",
"CSL LAURENTIEN has 230878 data points.\n",
"CSL NIAGARA has 218725 data points.\n",
"EDGAR B SPEER has 327319 data points.\n",
"EDWIN H GOTT has 310941 data points.\n",
"HERBERT C JACKSON has 150046 data points.\n",
"HON JAMES L OBERSTAR has 339177 data points.\n",
"JAMES R BARKER has 254150 data points.\n",
"JOHN G MUNSON has 121463 data points.\n",
"JOSEPH L BLOCK has 237300 data points.\n",
"JOYCE L VANENKEVORT has 266940 data points.\n",
"KAYE E BARKER has 266818 data points.\n",
"LEE A TREGURTHA has 234481 data points.\n",
"MESABI MINER has 259098 data points.\n",
"PHILIP R CLARKE has 285600 data points.\n",
"PRESQUE ISLE has 320117 data points.\n",
"ROGER BLOUGH has 249487 data points.\n",
"RT HON PAUL J MARTIN has 206186 data points.\n",
"SAM LAUD has 252461 data points.\n",
"STEWART J CORT has 273407 data points.\n",
"THUNDER BAY has 269086 data points.\n",
"TUG CLYDE S VANENKEVORT has 79822 data points.\n",
"VICTORY has 319265 data points.\n",
"WALTER J MCCARTHY JR has 287467 data points.\n",
"7964588\n"
]
},
{
"data": {
"text/html": [
"
\n",
"\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"\n",
"\n",
" \n",
" \n",
" \n",
" MMSI\n",
" LAT\n",
" LON\n",
" SOG\n",
" VesselName\n",
" Status\n",
" Draft\n",
" Cargo\n",
" Duration\n",
" from_LAT\n",
" from_LON\n",
" \n",
" \n",
" BaseDateTime\n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" 2015-03-01 03:14:00\n",
" 366971350\n",
" 41.69872\n",
" -83.45046\n",
" 0.1\n",
" PHILIP R CLARKE\n",
" under way using engine\n",
" 8.03\n",
" 70.0\n",
" NaN\n",
" NaN\n",
" NaN\n",
" \n",
" \n",
" 2015-03-02 16:50:01\n",
" 316001635\n",
" 42.88318\n",
" -79.24848\n",
" 0.0\n",
" RT HON PAUL J MARTIN\n",
" under way sailing\n",
" 9.01\n",
" 0.0\n",
" NaN\n",
" NaN\n",
" NaN\n",
" \n",
" \n",
" 2015-03-02 16:51:11\n",
" 316001635\n",
" 42.88317\n",
" -79.24854\n",
" 0.0\n",
" RT HON PAUL J MARTIN\n",
" under way sailing\n",
" 9.01\n",
" 0.0\n",
" 1.0\n",
" 42.88318\n",
" -79.24848\n",
" \n",
" \n",
" 2015-03-02 16:52:13\n",
" 316001635\n",
" 42.88316\n",
" -79.24854\n",
" 0.0\n",
" RT HON PAUL J MARTIN\n",
" under way sailing\n",
" 9.01\n",
" 0.0\n",
" 1.0\n",
" 42.88317\n",
" -79.24854\n",
" \n",
" \n",
" 2015-03-02 16:53:22\n",
" 316001635\n",
" 42.88314\n",
" -79.24849\n",
" 0.0\n",
" RT HON PAUL J MARTIN\n",
" under way sailing\n",
" 9.01\n",
" 0.0\n",
" 1.0\n",
" 42.88316\n",
" -79.24854\n",
" \n",
" \n",
"\n",
"
"
],
"text/plain": [
" MMSI LAT LON SOG VesselName \\\n",
"BaseDateTime \n",
"2015-03-01 03:14:00 366971350 41.69872 -83.45046 0.1 PHILIP R CLARKE \n",
"2015-03-02 16:50:01 316001635 42.88318 -79.24848 0.0 RT HON PAUL J MARTIN \n",
"2015-03-02 16:51:11 316001635 42.88317 -79.24854 0.0 RT HON PAUL J MARTIN \n",
"2015-03-02 16:52:13 316001635 42.88316 -79.24854 0.0 RT HON PAUL J MARTIN \n",
"2015-03-02 16:53:22 316001635 42.88314 -79.24849 0.0 RT HON PAUL J MARTIN \n",
"\n",
" Status Draft Cargo Duration from_LAT \\\n",
"BaseDateTime \n",
"2015-03-01 03:14:00 under way using engine 8.03 70.0 NaN NaN \n",
"2015-03-02 16:50:01 under way sailing 9.01 0.0 NaN NaN \n",
"2015-03-02 16:51:11 under way sailing 9.01 0.0 1.0 42.88318 \n",
"2015-03-02 16:52:13 under way sailing 9.01 0.0 1.0 42.88317 \n",
"2015-03-02 16:53:22 under way sailing 9.01 0.0 1.0 42.88316 \n",
"\n",
" from_LON \n",
"BaseDateTime \n",
"2015-03-01 03:14:00 NaN \n",
"2015-03-02 16:50:01 NaN \n",
"2015-03-02 16:51:11 -79.24848 \n",
"2015-03-02 16:52:13 -79.24854 \n",
"2015-03-02 16:53:22 -79.24854 "
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Iron=pd.DataFrame()\n",
"for vessel in vessels:\n",
" subset = ais.loc[ais.VesselName==vessel]\n",
" subset['Duration']=subset.index.to_series().diff().astype('timedelta64[m]') \n",
" subset['from_LAT']=subset.LAT.shift() # this records the last position from which the timedelta is calculated\n",
" subset['from_LON']=subset.LON.shift() # this records the last position from which the timedelta is calculated\n",
" print(f'{vessel} has {len(subset)} data points.')\n",
" Iron = Iron.append(subset)\n",
"Iron = Iron.sort_index()\n",
"print(len(Iron))\n",
"Iron.head() "
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAsIAAAGbCAYAAADOe/Z7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOzdeVyN+fvH8ddJdspSdoaxJ2KKaKxjZMs+lsEYy2Csk72xfJWxztAwCWPNGtnDaMiMiCIlYxvGVhgpoVJpO5/fH8b5ydJ6TvepPs/H4zzqnHMv1ynp6j7v+7pVQggkSZIkSZIkKb8xULoASZIkSZIkSVKCbIQlSZIkSZKkfEk2wpIkSZIkSVK+JBthSZIkSZIkKV+SjbAkSZIkSZKUL8lGWJIkSZIkScqXDJUuIC0mJiaievXqSpeR77148YKUlBSMjY2VLkWSNMLCwihXrhwGBvLveUk/xMXFkZiYSKlSpTK97o0bN6hbt64OqpLyu8ePH1O2bFkMDZVt+QIDA58IIUwVLeI99LoRrl69OhcuXFC6DEmSJEnSqbZt23Ly5Emly5AknVGpVCFK1/A+8lCKlC5/f3+OHTumdBmSlIqzszMvXrxQugxJ0ggODsbT01PpMiQpFVdXVyIjI5UuQ2/JRlhKl5+fH0ePHlW6jByXkpLCzZs32bdvH/PmzWPVqlW8fPlS6bKk/yxZsoTY2Fily5AkjaCgIA4cOJCldeVVXiVdWbFihWyE06DX0QhJP1hbW+eL7NrFixc5duwYV65c4cqVK9y4cYMKFSrQoEEDzM3N8fLyYvHixcyZM4ehQ4dSsGBBpUvO1yZNmkTx4sWVLkOSNCwsLChdurTSZUhSKmPHjqVMmTJKl6G3VPr8V6iVlZWQGWEpp9ja2lKmTBk6duyIubk59evXp0SJEqmW8ff3Z/bs2dy7dw8nJycGDBhAgQIFFKpYkqS8ok2bNvj4+ChdhiTpjEqlChRCWCldx9tkNEJKV37JCBcoUIChQ4cybNgwmjZt+k4TDNC8eXO8vb1Zt24drq6uWFhYsH//fvm2pgJkRljSNzIjLOkjmRFOm2yEpXTll4ywoaEhycnJGVq2Xbt2nDlzhiVLljBv3jyaNm2Kl5eXbIhzkMwIS/omKCiI/fv389dff7F69WoGDx6Mu7t7htZVqVQ6rk7Kr2RGOG2yEZbSZW1tTYcOHZQuQ+cy0wjDq19cXbt2JTAwkBkzZjBp0iTatGnDqVOndFil9JrMCEv64u+//6ZXr16sX78eDw8PvvjiC86fP8/z58+5ePGi0uVJ+ZzMCKdNniwnpcvGxkbpEnJEZhvh1wwMDOjbty+9evVi+/btfP3119SpU4f58+fTtGlTHVQqATg4OChdgiQBMG7cOOLi4pg+fTo2NjaUL18egLlz52b4gi/y3SRJV+zt7ZUuQa/JI8JSuvJLRtjQ0JCkpKRsrf/1119z48YNevbsSc+ePenVqxdXrlzRYpXSazIjLOmDu3fvcunSJU6cOEGNGjU4d+6c5rnY2FiKFSuWoe3IaISkKzIjnDbZCEvpyksZ4fj4+A8+Z2pqioeHB3FxcdnaR6FChRgzZgy3bt2iZcuWtG/fnkGDBnHr1q1sbVdKTWaEJX2wevVqhg4dSrFixd6ZIxwXFyfjO5LiZEY4bbIRltKVVzLCFy5cwMTEhL179773+SVLllC8eHFatmxJaGhotvdXtGhRpkyZwq1bt6hXrx7Nmzdn5MiR3L9/P9vblmRGWFJeXFwcmzZtYsyYMaxcuZLr16/TrVs3zfOZOSIsoxGSrsiMcNpkIyyly8bGhi5duihdRrZt2bKFHj16YG9vz08//fTOL56iRYuydetWBg0ahLW1tdZOeitZsiRz5szh5s2bmJiY0LhxY7777jseP36sle3nVw4ODu8dcSdJOWXnzp00a9aMmjVrMmHCBFxcXOjVq5fm+djY2Az9sfby5UsiIiJQq9W6LFfKp+zt7TExMVG6DL0lG2EpXXkhI5yUlMSuXbv44Ycf8PPzY/v27YwePfqdTLBKpWLKlCls3ryZvn37smrVKq0dqSlTpgyLFi3i6tWrAJiZmfH999/z9OlTrWw/v5EZYUlJQghWrlzJ+PHjNY8ZGxunmiOckUY4NjaWbt26cfPmTcaMGSObYUnrMpMRTkhIIDAwkPXr1zN27FiaN2+u4+qUJxthKV15ISN8/PhxatasSc2aNalSpQqnT5/m4cOHdO3alaioqHeWt7W15cyZMzg4OPD3339rtZYKFSqwYsUKLl68yJMnT6hTpw4//PADMTExWdqeEIKUlBQSEhJ48eIFz58/JyIigkePHnH//n3u3LnDzZs3uXr1KpcuXSIwMBB/f398fX159uyZVl9bTpIZYUlJ/v7+REdH07FjR81jRYoUeScjnFY0Iioqio4dO1K1alWaN2/O5cuXmTBhgoxJSFr1oYxwdHQ0p0+f5pdffmHo0KFYWFhQqlQphg0bxunTp6lYsSLnzp1jx44dClSdc+T4NCld1tbW1K1bV+kysmXr1q0MHjxYc79kyZIcPHiQSZMmYWNjg7e3NxUrVky1jkqlomjRotSuXVsnNVWrVo1169Yxffp0HB0dqVmzJrVr1yYpKYnk5GTNxzc//9BjAAULFqRgwYIYGhpqPr75+duPxcfHU7ly5Vz7R47MCEtKOnHiBNHR0Xz33Xd06tQJgEqVKqXKCJuamvLHH3/Qtm3bd9Z/8uQJHTt25NNPP2X58uV89tlneHp6Ymtri729PcuXL5eTJCSteF9GeM+ePQwdOhRzc3OaNGmCjY0N48aNw9zcnKJFi2qW69GjB+3bt8fMzIzGjRvndOk5QqXPf3laWVmJCxcuKF2GlMtFR0dTtWpVbt++/U5OKiQkBAsLC3x8fLCwsEj13IIFC3j06BErV67MkTpv3bpFWFhYpprZ1x8zOqv0TXFxcVSuXJkrV65QuXJlHbwiScq7hBBcvnyZo0eP4uXlxcmTJ+nQoYMmRpaSksIXX3zBb7/9xr59++jatatm3X///ZcOHTrQs2dP5s+fj0qlom3btpw8eZLnz5/ToUMHWrVqxbJly2QzLGVLcnIyhoapj3nGxcVRr149duzYQcuWLdPdxs6dO/n+++8JDg7G2Ng4y7WoVKpAIYRVljegK0IIvb1ZWloKSXl+fn7i999/V7qMLHNzcxPdu3d/5/HExETRvHlz8dNPP73znFqtFmZmZsLX1zcnSlTMN998IxYvXqx0GVmybNkyERMTo3QZkiSEEMLX11eYm5uLgwcPCiGEmDdvngDE/v37Rbly5cStW7eEEELcvXtX1KxZUyxcuDDV+q1bt9Z8HhkZKZo0aSKmTZsm1Gp1quXi4+NFcHDwO49L0ttCQ0NF2bJlxddffy2ePHmieXzevHmib9++Gd5OQkKCKFOmjLhz50626gEuCD3oLd++KV5AWjfZCOsHZ2dnYW9vr3QZWfb5558LDw+Pdx6fOnWqsLOzEykpKe88d+nSJVGtWrX3PpeX+Pr6inr16uXKX6rlypUTYWFhSpchSUKIV82riYmJaNCggTh58qQoUaKEKFGihFCr1cLFxUVYWFiIoKAgUbVqVeHi4vLO+m3atEl1/8mTJ6JRo0ZixowZ4vDhw2LGjBnCxsZGFCtWTBgYGIjQ0NAcemVSbqRWq0Xnzp3F8OHDRYECBcS6deuEEEI8fPgw002th4eHaNeuXbZr0tdGOFedLJeYmMiDBw8ICgoiMTFR6XLyjdw8R/jhw4cEBgZiZ2eX6vHDhw/j4eGBm5vbe2MF7u7uDBgwIEuRg9zExsaG5ORkzp8/r3QpmSYzwpI+KVOmDLt27aJQoUK0b9+eyZMnU7NmTVQqFePGjaNhw4ZYW1szb968VJMmPqRs2bJ4e3vj7++Ps7MzRYoUYd68eTx+/JhKlSq9OpIlSR+wY8cOHj58yJo1axg3bhwzZszg3LlzzJo1i5EjR1KjRo0Mb2vt2rWMGjVKh9UqS68zwmXLlhVNmjQhLCyMsLAwoqOjKVSoELGxsZw5cwYbGxulS5T03NKlS7l+/TobNmzQPHb//n2srKzYv38/zZs3Jzw8nAoVKmieF0JQo0YNDh48+E5uOC9asGABDx48YPXq1UqXIkm5XkpKCoGBgdy9e5fdu3ezZ88e4NVVLa9fv84nn3zy3vXatGmDj49PhvZRuXJlzp07R5UqVbRWt5R3hIeH07BhQ44cOYKV1atI7uHDhxk2bBiGhobcuHEDIyOjDG3r1q1b2NjYcP/+fQoXLpytuvQ1I6zXUyOMjIyYMWMGFSpUoEKFCiQlJdGmTRsmTJggm+Ac9HpMkK2trdKlZNq2bdtYvny55n5SUhIDBgxg8uTJ2NjYcPXqVSwsLBg3bhxOTk6UKlUKPz8/ihUrRqNGjRSsPOd89dVXNGnShJ9//pkiRYooXU6GOTs7M2rUKHlRDUlvBAcHExoaSvfu3Tl+/HiqP7CLFi36wSZYrVaTlJTEpUuXePToEY8ePSIsLCzVxx49ejB16lTN8nn93Sop67777ju+/vprTRO8ePFi2rVrx5o1ayhcuHCGm2CA9evXM2TIkGw3wfpMrxvhFy9ecOnSJczNzTE0NKR9+/YMGTKEiRMnKl1avuLn50doaGiua4QvX75MZGQkrVu31jw2Z84cjI2NmTZtGgDVq1cHXv1bq1+/PosXL+b8+fN8+eWX+eZs7WrVqvHJJ59w8OBB+vfvr3Q5GbZkyRIGDRokG2FJbwQFBeHr60v37t1p1KgRq1evJiAggBEjRmBiYvLeBvfRo0dEREQAMHjwYCpWrEjFihWpUKECH3/8MTY2NgQEBHDt2jXNfmQjLL32+l3917+vPD09uXDhAhs2bEAIwY4dO5g1axZjx47FxcUlU9tOTEzEzc0tw+9U5FZ63QgXK1aMGzduYGZmhqGhIUZGRnTv3p2UlBQKFCigdHn5Rm6dI7x9+3YGDRqk+YXx22+/sX37doKCgjSPFS9enOrVqzNt2jRGjx7N+PHjCQgI4J9//lGy9Bw3dOhQ3NzcclUjLDPCkr6xsLCgdOnSAHTr1o0uXbrw+++/s3nzZhISEjQNbrNmzahQoYKm6S1Xrhy2tracPHnyvdsNDw9PdRVM2QhL8Oodznbt2nH37l1atmyJjY0NS5cuZevWrURFRfHll19y/PhxihYtyqRJk4iKiqJw4cIZfufP09OTevXqUbduXZKSkihQoECe/Hen1xnh13OEo6OjmThxIp6enrx48YICBQrQrFkz2rRpQ4sWLbC2tn5nWLSUv1y+fJkiRYpoLn6hVqv56KOPOHr0KObm5jx48AArKyt2795Ny5YtCQ8P599//+Xhw4fMnDmT2bNn069fP9RqNcHBwR98CzOvkjOFJUlZr+cIv8/ChQuJiYlh0aJFwKsT6W7cuPHOXHQpf5k3bx5nz57F1dWVM2fO4OvrS+3atSlfvrzm4I6Pjw/9+vXTnDD36NEjtmzZkqHt29raYmdnR2RkJC4uLqxcuZKBAwfyxx9/UKRIkUxHVPU1I6zXrX1kZCRXr16lWLFiuLm5ERkZyalTp+jRoweBgYHs3buXWbNm8dFHH1GvXj2GDRvG2rVrCQkJUbr0PMXf318zJF6fPHv2jFWrVmFlZUWjRo3YvXu35jkfHx/Kli2Lubk5ycnJfPnll0ycOJFWrVoxZcoU6tWrx9ChQ1m1ahXNmjXD3NwcAAMDg3zXBMOrd1+++OILtm3bpnQpGebs7MyLFy+ULkOSNIKDg/H09NT6dmNjY1NFgOQRYSkoKIiVK1eyfv16atasyZAhQ5g7dy4nT57E2dkZLy8vWrRoQVhYGCkpKURGRmJkZMTWrVs5e/Zsutu/c+cOx48fZ+bMmTx69IgmTZqQlJTE9u3b6dixI0+ePMmBV5kz9PonKSoqit69e1OqVClatGjB+PHjuXr1KjNmzOD27duMGjWKly9fUqVKFbp160bjxo05fvw4PXr0ULr0PMXPz09vLsOrVqvx9vZm4MCB1KhRg1OnTjF58mSMjIwYMWKEZrlt27bx1VdfAfDTTz9RrFgxHBwcuHjxIjt27OD27dtcunSJ3377jfXr12NmZqbUS9Ibr+MR+vwu0ZuWLFlCbGys0mVIkkZQUBAHDhzI0rpp/dy9ePEiVQxINsL524sXL/jyyy+JiIigatWqqFQqpk6dyrfffkvNmjU5f/48DRs2ZOrUqfz444+sXLmSyMhITExMKFeuHOPHjyclJSXNfahUKubOncvNmzdZu3YtJiYmbN26lcGDB9OoUaNUlxLP7fQ6I/zxxx/zOhpx6dIlgoKCOHXqFMuXL+f27dvUq1ePFi1aYGRkxNq1a3F1dWXFihX58oieLuV4Rvg9J6ndu3sXNzc33NzcKF26NCNGjGDlypWUKVOG+fPn88UXX1C+fHng1Zii/fv388MPPwBw8eJFhg8fDsC4ceOYP3++jNK8x5szha2trZUuJ10yIyzpmzczwpmV1sm57zsiLM+Tyb8GDRpEUlISjRo1wtDQkIIFC9KiRQvu3r1L69atKVSoEOvWrcPU1JTu3btz9+5dypQpg4mJCTY2NkRGRrJu3Tq+/fbbD+6jRo0aODo6au4nJSURGhpK6dKlcXR0zFMnk+t1I/yakZERrVq1olWrVprH4uPjuXz5Mhs2bGD58uVUrFiR/v37k5yczLNnzxBC5KlvlJJybFTdW9+veGA/sBEIrlGDgRMmsH//fpo0aaJZ5uXLl7i6unL8+HHNY4cOHcLS0pJKlSoBr36ACxYsyJYtW0hJSdE0xVJqKpVKc1Q4NzTCDg4OSpcgSalYWlpiaWmp9e3KI8LSm27fvs2BAwfeGfF57Ngxnjx5QkxMDHPnzsXT0xOVSoW9vT0AJiYmmryvra0tffv2pWzZsunuTwjBggULKFGiBObm5lSsWFEnr0spev2TlNZbRUWLFuXatWvs27cPU1NTtm3bRkREBBs3biQxMVFeeU6LciQj/FYTPAuoAmwGRgIPgF9cXFI1wfDqCnAWFhaajC+8ikUMHjxYcz8pKYnY2Fi+//57XF1d5S+QNHz11Vd4eHjw8uVLpUtJl8wIS/omOxnhtH7fxcbGykZY0rh//z7VqlXj+vXrqR43MTHhyZMn/PTTT7Rv314zR9jV1VUTjXjy5AkWFhb069eP2bNna9ZNSUkhOjr6vfuzs7PjyJEjVK1alY0bN9K3b18iIyN19wJzmF7/JF26dIm+ffuyadMmHj16pHk8ISGBb7/9lkWLFtGvXz8qVKjA7NmzqVKlCuPHj6dRo0bMnj0be3t7li5dquAryBt0nhF+qwkOAdYCF4Hfgf7A+4a9CCFwdnZm8uTJmseePHnCqVOn6N27t+axpKQkFi1aRI8ePTT/MUjv9+ZMYX0nM8KSvslORjiz0QjZCOdPUVFRqNVqHj16hJmZGfHx8ZrnXje6hw8fZty4cfzzzz8IIVixYgW3b99m2bJlmj+o5s2bx/79+wkKCgL+f8b++wghmDFjBm5ubvTp04e+ffsyaNCgd3LGoaGhzJ8/X0evXHf0+iepTp06dO3aFS8vL8zMzPjkk0+YNWsWrVu3Jjw8nICAAP7991/u3LmDv7+/ZtZweHg4+/btIygoKFXGRcoaa2trOnTooJuNv+c//yNAF6BaOsu/jkO8WZuHhwddunShZMmSmseSkpJ4/PgxCxYs0FLRedvreIS+kxlhSd9YWFjo5CQitVrNsGHDsLa2plOnTiQlJclGOJ+6f/8+VatWpVevXsCrd8dfe90IR0dHU7p0aaytrbl79y7W1tZ069aN4sWL4+3tDUDp0qWZP38+48ePR61WaxriNwkhEEJgYmLC9OnTcXBw4NChQyxcuJCEhAScnJw0y548eRIrKyvOnz+v46+A9ul1RvjWrVuEhYVhZWWFhYUF9+7dw9fXFxMTExo2bMjSpUtp0KAB9evXJyUlhZcvXxIXF0d8fDzx8fH4+vry8uVLEhIS8vTlAXUtpy9nfRgYloHlXh8NfvNIytatW5kzZ06q5QwNDVmyZEmGslAS9OrVi/Hjx/Pw4UO9niksM8KSvslORjitaMThw4d58OABz5494/nz59jb21OwYMGslinlYvfv3ycuLo6QkBAGDRqU6rnXjXBUVBR3797l2bNn9OzZkwIFCnDo0CGaNWuWavnhw4ezdu1atm3bRkxMTKrnoqKi6NatG3Z2dpiamlKmTBk8PT3p2rUr+/btY+fOnVhZWdGsWTPu3LnDDz/8wJMnT5gxY4bOvwbapteNcPXq1QkPD9dczaRs2bK0bNlS85dwgQIFKFiwIAYGBprb62Xj4+M5fvw4BQoU4OnTp3ku3J2T/P39iY6OzpFLLMcCvoB7OstduXKFS5cupXoL/9atW9y5c+edo9cHDhygWLFiWq81r3pzprA+/6fm7OzMqFGj5CWWJb0RHBxMaGgo3bt3z/S6aUUjSpQoQb169bJTmpRHhIaGaq6VEBYWxqJFizA1NcXExITHjx9rjgi/PsJbqlQpDAwMqFmz5jvbMjAwwMXFhV69elGoUCHN40+fPqVjx46UKlUKd3d3+vfvT0REBM2aNWPHjh306dOH48eP4+Hhweeff06tWrWYNm0aBw8exNLSkoCAAC5evEibNm1yxVVp9boRNjIywtnZOcvre3h48Ndff3H9+nXZCGeDn58foaGh2m+E3/Mf/wmgKfD+pNL/+/nnnxk7dmyqI/3bt2+nf//+7xwpkU1w5g0dOpRvvvmG6dOn6+30lSVLljBo0CDZCEt6IygoCF9f3yw1wpKUEffv36dcuXLs2LGD4OBgIiIiuHXrFhEREURERFC9enUuX76suWjG9u3b+fjjj9m+fTsTJ058Z3vW1tZ07tyZjRs3AhAREYGtrS3t27dn8eLFVK5cmZiYGM0FNDp06MDKlSvp0qULp0+f5vTp09StW5eOHTty/fp1ypQpQ+3atalWrRqrV68mMDBQ/2M8rzMg+niztLQU2bFkyRIBiCFDhmRqvcTERJGcnJytfeclZ86cEUeOHNH+huGd20gQzu95/M1bWFiYKFWqlIiIiBBCCJGcnCx+++03UaVKFXHu3Dnt15kPqdVqUatWLeHv7690KR+0aNEiERMTo3QZkqRx4cIFsW/fviyt27p1ay1XI+VFM2bMEK6urh98PiwsTJQuXVoYGxsLQCQlJYlJkyaJsmXLin/++ee96zx+/FgULVpUAKJBgwZi1qxZQq1WCyGEGDlypGjdurWws7NLtc6qVatEzZo1xaNHj4QQQuzYsUO0a9dObN++XTx+/Fio1WrRvHlzsXXrVs06wAWhB73l2zeV0OOrSFlZWYkLFy5kef179+5Ro0YNjI2Nefz4caqjhzdv3sTR0VGTuYqKitJ8fPnyJebm5hw9elQzi1bSgbeONAqgMuAD1E5jtf/NmUN4eDiOjo5s3LiRtWvXYmpqyvjx4xkyZIjeHsHMbRYsWMCDBw9YvXq10qVIUp7Xtm1bTp48qXQZUi73zz//UKdOHczMzLh27Rr9+vXDyMiIM2fOUKhQIYKCgt57hDYhIYESJUowd+7cVGPVvLy86NmzJ40bN8bf3z/VOk5OTuzfvx8fHx927NjB+vXrKV++PGfPnqVixYoYGRnx+PFj/v77b4oUKYJKpQoUQujd6Ca9jkZkV/Xq1WnevDlRUVF4eHhoLrkLMHHiRMzMzBg8eDClSpXC2NhY87F48eIsWrSIli1bcuzYMWrVqqXgq1BeTmWELwIlSbsJjgdWrVrFRx99RP369enbty979+7VyRD7/O6rr76iSZMm/PzzzxQp8r4BdsqSGWFJ32QnIyxJ2hAVFQVA+/btWbNmDf/++y8HDhygf//+FCtW7IMnZRYuXJg7d+5QtWrVVI9/9tlnFC5cmIiIiHfW+d///kdERATdu3endOnSTJgwgaFDh5KSksLly5c5deoUQUFBxMbG6uXvEA2lD0mndctuNEIIIfz8/MSvv/4qLC0tNYf6vb29Rc2aNUVCQkKa665Zs0ZUqlRJBAcHZ7uO3MzZ2VnY29trf8NvRR6cQExOJxZxFUSLFi3EqlWrRFRUVKZ3GRYWJtzd3cXIkSNFrVq1xCeffCLOnDmj/deWR3z++edi586dSpfxXuXKlRNhYWFKlyFJGhs2bBDDhg3L0royGiFpw4kTJwQg9u/fr3msdu3a4saNG1ne5qBBg0TJkiXf+1xKSoro37+/AMSdO3fS3A56Go3Q8wRz9jVv3pxvvvmG58+f4+/vj1qtZvr06SxatCjVWZLvM3r0aFasWIGtrS2nT5/OoYr1j87mCL91FZvDgF06q5gBZ8+eZcyYMRgZGaW7i6dPn7J//34mTpyIubk59erVw93dnQYNGrB3716mTZtGv379GD58OOHh4Vl+KXmVPs8UlnOEJX2TnTnCMtIlaUNUVBQqlYo2bdpoHhs7dixlypTJ8jZ79+5NTEwMCQkJ7zxnYGDAli1b2LZtG9WrV8/yPpSUpzPCb1q+fDnnzp2jW7durFixAn9//wz/x+Pt7c3AgQPZsGGDToal52u+vtCqFY941eSGA+lOx0zj36wQguPHj3Ps2DH++OMPbt26hY2NDZ999hnt2rXjk08+oUCBAqnWiY6OxsnJia1bt+Lk5MSoUaPeWSa/iouLo3Llyly5ckWvZwpLUm4nM8KSNri5ufHLL7+89wIZWRUbG4upqSm3b9/O1gQufc0I5/kjwq8NGzYMLy8vZsyYwY8//pipv74///xzjhw5wsiRI9myZYsOq0ybEIKbN2/m+H79/f05duyYbjbesiXExPAbYEsGmuA3LrX9ths3bvDZZ58xdepUjI2N+eWXX3jy5AleXl5Mnz6dpk2bvrfBNTIyYtmyZZw4cQJ3d3eaNWvGuXPnsvOq8ozXM4WV/Hf/Ic7Ozrx48ULpMiRJIzg4GE9Pzyytq88HpaTc46OPPmLUqFGpHnN1dSUyMjLL2yxevDh+fn5UqFAhu+XpJ6WzGWndtJERftP48eNFt27dsrz+tWvXRNWqVcWyZcu0WFXGPHr0SPTu3VsAuhlllgadZYTf0LNnzyFYuoMAACAASURBVFdjVtLKCH9gZMzLly+Fo6OjKFu2rFi+fLlISkrKch1qtVps3rxZVKhQQYwcOVI8efIky9vKKy5fvixMTEzSzX/lNJkRlvRNdjLCbdq00W4xkvSf7GaEtQWZEVaes7MzHh4eWV6/fv36+Pr6sm7dOr7//vsc+QteCMG2bduwsLCgTp06eHp6Mm7cOOLi4nS+79d0lhH+T1RUFH/88QedOnX6cOzh0SMYO/adh//8808sLCwIDg7m4sWLfPfddxgaZn0YikqlYsiQIVy/fp0iRYpgZmbG2rVrUavVWd5mbmdubo6DgwODBw8mOTlZ6XI0ZEZY0jfZyQhLkq5kNyOc1+WbjLA2PXnyhC5dumBhYcHq1auz1Xil5eHDh3z77bfcu3cPNzc3zYiwgQMHUq1aNRYvXqyT/eaklJQU7OzsqFWrFi4uLhleLyIigqlTp/Lnn3/i4uJCjx49dFJfcHAwY8eOJSUlBVdXV6ys9C7elCPUajW2tra0adOGOXPmKF2OJOU5bdq0wcfHR+kyJElnZEY4DzExMeHEiRPcu3ePfv368fLlS61uXwjBpk2baNy4MZ988gmBgYGp5uQ6OzuzceNGrly5otX9foguM8LTp08nKSkpw5fSfv21MTc3p2zZsly9elVnTTBA48aN8fX15dtvv8XOzo4xY8bw9OlTne1PXxkYGODm5sbKlSv1Jj8tM8KSvslORlhOjZB0JbsZ4bxONsJZVLJkSQ4fPoyhoSGdO3cm+q1RYFkVGhpK586dcXFxwdvbGycnp3fGvFWoUIF58+YxevToHHnL3s/Pj6NHj2p9uxs3bsTT0xMPDw8KFkz3NDmuX79O27ZtWb16NV5eXjg7O1OyZEmt1/U2AwMDhg0bxvXr1zEwMMDMzIyNGzfmu7hElSpVcHV1ZfDgwXrRgC5ZsoTY2Fily5AkjaCgIA4cOKB0GZKUyooVK2QjnAbZCGdD4cKFcXd3p169erRr1y5bc2jVajVr1qzB0tKS1q1bc+7cOSwsLD64/KhRo1Cr1WzYsCHL+8woXWSEfX19cXBw4NChQ+lml+Lj45kzZw6tW7fmiy++wM/PjyZNmmi1nowoXbo0rq6u/Pbbb6xbt45PP/1UqyNqcoMvvviCli1bMmnSJKVLkRlhSe9kJyOszzFFKXeTGeG0yYywFgghmDt3Ljt37uTYsWOZHip9584dvvnmG2JjY9m4cSMNGjTI0Hp//fUXn3/+OQcOHKBIkSKo1WqEEGl+hFezYR8+fMjz58+Jiori+fPnqW6vH4uPj2fVqlX069cvs1+SNN27d48WLVqwadOmVyfIpeH48eOMGTOGJk2asHz5cr2ZZatWq3Fzc2PmzJn06dOH+fPnU7p0aaXLyhExMTE0btyYpUuX0qtXL6XLkaQ8Qc4RlvI6fc0IZ/gsL5VKVQC4ADwUQtipVKr2wE+8Oqr8AhgqhLilUqlKADuAEsBgIcS/KpVqKLARaCyE+Ou/7V0B7IQQ97T5gpSgUqmYN28epqamtGrViqNHj2Jubv7B5dVqNWFhYTx48AAfHx+WLFmCg4MDkyZNytSFHBo1asS0adMYO3YsKpUKAwODdD8WKFCAxo0bEx0dTalSpShVqhR169alVKlSGBsbaz6WLl2asLAwunXrxr///ouZmRm2trbZ/lq9ePGC7t27M2PGjDSb4LCwMCZPnoyfnx+urq506dIl2/vWJgMDA4YPH07Pnj2ZPXs29evXZ9GiRXz99dcYGOTtN1pKlizJtm3b6NWrF9bW1lSqVEmROpydnRk1ahQlSpRQZP+S9Lbg4GBCQ0Pp3r270qVIkoarqysDBgygbNmySpeSJsX6zIzOWQMm/7fjw//dvwnU/+/zsYDbf59/C3QFGgKL/3tsKBAK7Hpje1eA6mntU9tzhHPCjh07RLly5cS+ffuEp6encHV1FQ4ODmLgwIGiVatWonr16qJQoUKiXLlywtLSUgwYMEAv5vt9iK+vryhevLjo169ftreVkpIievToIUaMGCHUavUHl1mzZo0wNTUV06dPFy9evMj2fnNCQECAaNasmbCxsRFBQUFKl5Mj/ve//wlbW1uRkpKiyP7lHGFJ32RnjnDr1q21XI0kvZJb5ggr0WcKITJ2RFilUlX5b6cL/isUQABG/31uDPz73+cFAPV/tzdPgz0MtFapVHWFEDcyst/c6Msvv6R06dLMmTOHcuXKUbVqVapWrUrHjh2pVq0aVatWpXLlyhQpUkTpUjPk008/Zd68ecybN4/Lly/TsGHDLG3n/v37zJo1i6dPn+Lh4fHeM6QvX77M6NGjEULg7e1No0aNslt+jrGyssLPz4+NGzfSqVMn+vXrxw8//ECpUqWULk1n5syZQ8uWLXFxceG7777L8f3LjLCkbywsLLIckZJTIyRdyQ0ZYUX7zPQ65f+66j2AJdCW/+/UWwGRwAPgGmD03+OlgKPAn0CVNzr1lcAQYHNGO/XceEQ4r3J3dxeVK1cWt2/fztR6t2/fFiNHjhSlS5cWU6ZMEU+fPn1nmRcvXojp06cLExMTsWbNGsWOMGrLkydPxOjRo0WFChXEpk2bcv3rScs///wjTExMxF9//aV0KZKUq8kry0l5HWkcEVaqzxRCUMDR0THNRlmlUtkBlYQQ652cnKoDNo6OjjucnJyWA2OFEFOcnJyKAYMcHR09HR0dXzo6Om53dHTc7OjoGA3g5OTUGKjEq6zHIicnpyPAQGCHo6Pj8w/t29HR0dHU1BQLCwvu3LnDL7/8QmhoqLyfw/fj4+N5/PgxT58+xcnJicGDBxMREZHm+seOHaN3794sXLiQzz77jMGDBxMXF0d4eHiq5T09PZk4cSIFChSgffv2VK5cmcaNG+vV68/s/RYtWmBmZkZERASbNm1i9+7dlC9fHnd3d72oT5v3X7x4Qfv27bG3t+fx48c8ePAgx/Y/YMAA4uPjsbS01Juvh7yfv++fPn2aqKgoChYsmOn1V6xYQZkyZfTq9cj7eeO+k5MTR48e5dGjR4rVc/DgQQ4ePPjI0dFxrT71mZCxk+U+BbqrVKouQBHASKVSHQHqCSFeT9bfBXiltyEhRLJKpVoGzMjAfgFSzWpVq9XyvgL3/fz8uHz5MpaWlhQpUoQaNWpQuHBhUlJSKFy4MPPnz0elUhEdHY2hoSFTp07l2bNnGBsbU7t2bby9vdm9ezclS5akTJkyXLlyhdjYWLy9vXn+/Dnbtm2jZs2abN68WS9er7buV6xYkdmzZ5OSksLQoUP5+OOPGTp0qN7Up637w4YNw8PDg23btvHZZ5/RsWPHHNn/mTNnUp1EqS9fD3k//94PCQnh7t27mJubZ3r914/p0+uR9/PGfTc3N7p27ap4PWlQtM/M1Pg0lUrVFpgK9ATCABshxE2VSjUC6CKE6POB9YYCVkKI8SqVqhCvDnGXBKxFGmfz5ZbxaXnd2bNnef78uabpiI2N5eXLlyQkJJCYmEhCQgKBgYGsWbOGa9eu0bdvXzp27IiBgQEJCQnMnDmTyZNfRX4SEhI065UqVYqRI0fmmrx0dkRGRjJz5kw8PT1ZtGgRQ4YMyVPTJWJjY9mzZw9Hjhzh+PHj1K5dm65du2JnZ0eTJk108loXL17M+PHjKV68OHFxcURFRZGSkkLVqlW1vi9JyojAwEBCQ0OzNFZQjk+TdGX58uUMHjwYExMTRevIyPi0nO4zIYuNsHg11qIXMA9QA8+A4UKIO+kV+N/9icAKoIZshHO3U6dOMX/+fP7++29mzJjB8OHDKVq0qOb527dvM2bMGJ1dojm3CQgIYNy4cRgaGuLq6qrIhUF0LSkpCV9fX44cOcLhw4eJioqia9eudO3alc8//zzV1QCTk5OJiYkhKiqKqKgooqOjNZ+/ff9Dz0VHR1OoUCGKFSvG8+fPiYuLe+dqjJKk79q0aYOPj4/SZUiSzmSmEc6pPhPkBTWkDPD39yc6OlozR1j8N9Xhhx9+4OHDh8ycOZOvvvrqvc3HF198wZQpU2jRokVOl6231OpXVwScPXt2vpgucfv2bU1T7O/vT6VKlTTN78uXLylZsiRGRkYYGxtjbGyc4c/37NnDqFGjqFSpEgULFmTXrl1s2rQJL6903z2TJJ3IzhxheURY0hV9mSOc6y+oIeVffn5+hIaG0qFDBw4dOsSCBQuIiYlh5syZDBgwAEPD9/8zUqvVmpPHpP9nYGDAyJEj6d27t+ZiHAsXLsyzF+OoWbMmEydOZOLEicTExHD//n1NM1uiRIksj43q1KkTEydOpGDBggBs376dgQMHarN0ScqUoKAgfH195QU1JL2yYsUKOnTooHgjrK9kIyyly8rKivDwcBo3boyBgQGzZ8+mV69e6TZty5cvp2vXrjlUZe5TtmxZVq9ezYgRIxg3bhzr1q3Ls3GJ10qWLImZmZlWtvXmHOHIyEh8fHzYtm2bVrYtSVlhYZH1OcL6/O6slLvlhjnCSpLRCOmDkpOTcXd3Z+HChRgbGzN79my6du2a4SN4Xbt2Zf/+/TKvmQFqtZpNmzYxa9Ys+vTpw/z587P8CzU/Wrt2LSdOnGDXrl1KlyJJWSKjEVJep6/RiLz3PqyUbQkJCaxbt466deuyYcMGxo4di5OTE3Z2dpl6G/vIkSOyCc4gAwMDRowYwbVr1wCoX78+GzZsSG/kTL7m7OzMixcvABmLkPRDcHAwnp6eSpchSam4uroSGRmpdBl6SzbCkkZ8fDwuLi7UqlWLffv2sXnzZk6ePElycrI8ASmHlClTBldXV3777TfWr1/Pp59+SmBgoNJl6aUlS5YQGxvL/fv3uXLlCp06dVK6JCmfCwoK4sCBA1laV5/fnZVytxUrVshGOA0yIywRExPDmjVrcHZ2xtramv3792Nl9f/vXlhbW1O3bl0FK8x/PvnkE86cOcPmzZvp2rUrvXr1YsGCBTLn9YbXGeEtW7bQu3dvChcurHRJUj6XnYxwVk8alaT0yIxw2mRGOB97/vw5Li4uuLi40L59e2bOnEnDhg2VLkt6y7Nnz5gzZw67d+9m/vz5jBgxIk9Ol8iqJk2a8PPPP9O2bVulS5GkLJMZYSmvkxlhSW9EREQwa9Ysatasye3btzl9+jTu7u4fbIL9/f3lBTEUVLp0aVauXMnvv/+Om5sbzZs3JyAgQOmyFOfs7ExAQAARERG0atVK6XIkKcsZYXkugKRLMiOcNtkI5yOPHj1iypQp1K1bl8jISC5cuICbm1u6sQc/Pz+OHj2aQ1VKH9K4cWN8fX0ZP348PXr0YNSoUTx58kTpshSzZMkStm/fzoABAyhQoIDS5UhSljPCarVavssj6YzMCKdN/uTlAyEhIYwbN44GDRqQkpLC5cuXWbNmDTVq1MjQ+tbW1nTo0EHHVUoZoVKpGDJkCNevX6dYsWKYmZmxevVqUlJSlC4tx9nb23PgwAE5LULSGxYWFnTr1i3T6yUnJ8tGWNIZmRFOm/zJy8Nu3brFiBEj+OSTTyhZsiTXr19n+fLlVK5cOVPbsbGxoUuXLjqqUsoKY2Njli9fjre3N+7u7jRr1gx/f3+ly8pRbdu2pWjRonn6AiRS7mJpaUmvXr0yvV5ycrI8WU7SGXt7e0xMTJQuQ2/JRjgPunr1KoMGDaJFixZUrVqVf/75h8WLF1O+fPksbU9mhPVXo0aN8PHxYcqUKfTp04fhw4cTHh6udFk5Ytq0afTp00c2EJLeyE5GWB4RlnRFZoTTJn/y8pCgoCD69OlD+/btadiwIbdv38bR0THbb4nIjLB+U6lUDBw4kOvXr1OmTBkaNGiAi4sLycnJSpemM8nJyZw9exY7OzulS5EkjaxmhGU0QtIlmRFOm/zJywP8/Pyws7OjW7dutGrVijt37uDg4ICRkZFWti8zwrmDkZERS5cuxcfHhwMHDmBpacmpU6eULksnvL29qVy5Mubm5kqXIkka2ckIy3c2JF2RGeG0yQtq5GLBwcFMnTqV27dvM2PGDPbs2UORIkW0vh8bGxutb1PSHTMzM7y9vdm9ezeDBw+mdevW/Pjjj1SqVEnp0rRmx44dTJs2jRIlSihdiiRpWFpaYmlpmen1ZDRC0iV7e3ulS9Br8icvl/rzzz+xtbWlf//+3Lx5k2+//VYnTTDIjHBupFKp6NevH9euXaNq1ao0atSIZcuWkZSUpHRpWlGoUCE2bNhAVFSU0qVIkkZWM8LJyclyBKCkMzIjnDbZCOdChw4dol+/fuzatYuRI0dSsGBBne5PZoRzrxIlSrBo0SLOnj3L8ePHsbCw4I8//lC6rGxbuXIl169fZ8yYMfJiBJLeyGpGOCUlRUYjJJ2RGeG0yUY4l3F3d2fkyJEcOXKEdu3a5cg+ZUY496tTpw5Hjx5lwYIFjBgxgv79+3P//n2ly8qyIkWKMGvWLG7fvs2UKVPQ50vFS/lHVjPCMhoh6ZLMCKdN/uTlIr/++ivTpk3D29ubZs2a5dh+5RzhvEGlUtGrVy+uXr1KvXr1aNKkCYsWLSIhIUHp0rJk7ty5eHl58eeff+Lk5KR0OZKUrTnCshGWdEXOEU6b/MnLJX788UeWLFmCj49Pjp8pLzPCeUuxYsVwcnLi/Pnz+Pn50bBhQ7y8vJQuK9OcnZ0pWLAgv//+O+7u7vz8889KlyTlc9nJCMtohKQrMiOcNtkI6zkhBLNmzcLNzY3Tp09Ts2bNHK9BZoTzpo8//hhPT09+/vlnxo8fT8+ePbl7967SZWXYkiVLiI2NpXz58hw/fpwVK1awYcMGpcuS8rHsZIQNDeUQJ0k3ZEY4bbIR1mNqtZoJEybg5eWFj49Ppi+NrC0yI5y3de3alStXrtCsWTOsrKxwdHQkPj5e6bLSNWnSJIoXLw5AtWrVOHbsGHPmzMHDw0PhyqT8KjtzhGU0QtIVmRFOm0qfTzKxsrISFy5cULoMRSQnJzNs2DBCQkI4dOgQxsbGSpeU5wkh2Lt3L/PnzycxMZHixYtTokSJTH+sX79+rp1vGxoaytSpUwkICODnn3+mR48eueot27/++osOHTqwadMmmWuXco0LFy6wfPlytm3bpnQpkqQzKpUqUAhhpXQdb5Pvxeihly9fMmDAABITE/Hy8qJYsWKK1uPv7090dDS2traK1qFLf/31F9999x2RkZH8+OOPVK1aldjYWF68ePHBj2FhYcTExHD69Glu374NvJpmsHbtWr766iuFX1HWVKtWDQ8PD06cOMGECRP49ddfWbFiBXXq1FG6tHc4OzszatSoVH90NGrUiIMHD9KtWzf27NlDmzZtFKxQym+Cg4MJDQ2le/fumVqvZMmSvHjxQkdVSfmdq6srAwYMoGzZskqXop+EEHp7s7S0FPlNTEyMaN++vejbt69ISEhQuhwhhBDOzs7C3t5e6TJ0IiIiQowZM0aUK1dOrFq1SiQlJaW7Tnh4uNi2bZsYPHiwMDU1FfXr1xeTJk0Sv//+u4iLi8uBqnNGQkKCWLp0qShbtqxwcHAQMTExSpeUSrly5URYWNh7n/P29hampqYiICAgh6uS8rMNGzaIYcOGZWndFi1aaLkaSXqldu3a4saNG0qXIYALQg96y7dvMpSkR549e0aHDh2oXr067u7uFCpUSOmSgHczwomJiQpWox3Jycm4uLhgZmZGgQIFNBdn+NAJK4mJiTg5OdG0aVNq167N3r17adWqFQEBAVy7dg1nZ2dsbW0pWrRoDr8S3SlUqBBTpkzh8uXLPHz4kPr167Nr1y69mdn7Zkb4be3bt2fdunXY2dlx9erVHK5Myq+ymhEGKFy4MM+fP9dyRZIkM8LpkRlhPfH48WNsbW1p3749y5Yt09tcpru7O/7+/qxYsULpUrLsypUrDBgwgAoVKrB8+fIMjaN7+fIltWrVYvTo0Tg4OOj8an76yNfXl/Hjx1O6dGl++eUXGjZsqHRJ6dq+fTszZszg1KlTfPzxx0qXI0kf5OzsTGJiIg4ODkqXIkk6oa8ZYXlEWCkqleYWolLRqkIF+vz1F8t+/lnvmuA35wivXLmSBQsWKFxR1qnVaoYNG8aoUaM4fvx4hmcyFylShA0bNrB+/Xri4uJ0XKV+atmyJYGBgfTt25f27dvz3XffKXoEy9nZOd1c5aBBg5g9ezaff/45Dx8+zKHKpPwqq3OEAUaNGiXHVEo6IecIp002wkp4o9G9AbQGxgH/A1RvPa8PXs8Rvn79OkZGRrl2IgKAm5sbBQsWZPz48Zn+g6Njx46o1WoOHjyoo+r0X4ECBRg7dixXr14lPj6e+vXrs2nTJtRqdY7X8nqOcHq+/fZbRo8eTYcOHYiIiMiByqT8KqtzhAFKlChBUlKSliuSJDlHOD2yEc5pbzRfwUA7wBH4Lo3lskOtVpOcnJytbbzOCE+bNo0lS5ZopS4lREVFMWvWLH755Zcszew8fPgwycnJfPrppzqoLncxNTVl7dq1HDp0iF9//RUbGxsCAgJytIa0MsJvmzFjBj179qRTp05ERUXpuDIpv8pORhigdu3anDx5UnsFSRIyI5wemRHOaf81uGeBXsAqoM+Hls3i9+bBgwe4urri6+uLWq1myZIltGzZMtPbsbOzA8DQ0BAhBLdu3crVJx5NmTKF58+fZ+nqYxcuXKBz584cPnwYa2trHVSXe6nVajZv3szMmTOxs7Nj4cKFmJqaKl3WO4QQTJgwgb///htvb2+ly5GkdwQEBPDTTz/Ji8JIeZLMCEsax4GewBbSaIIzITk5mS1bttC5c2c+/fRTvvnmG+rUqcOJEyc4c+ZMlppgeBUjWLt2LUOHDiU+Pp7x48droVpl/P3332zZsoWFCxdmet179+7Ro0cP1q1bJ5vg9zAwMGDYsGFcv36d4sWL06BBA1xdXbP9TkR6MpIRfpNKpaJ79+6Eh4frsCopP8tORhigadOmPHjwQIsVSZLMCKdHNsI5bD8wCNgHdNTC9gICAmjbti1XrlxhzZo1nDlzBi8vL4YNG5bt8WsmJiZUqlSJu3fvcunSJcaMGaOFinOeEAJ7e3u+//57ypcvn6l1nz17RufOnXFwcKBnz546qjBvKFWqFMuXL+ePP/5g7969WFpacvr0aZ3tL6MZ4TctW7aMKVOm6KgiKb/LTkb4taJFi/L06VMtVSRJMiOcHtkI56DNmzczFvACsnaM9l1NmzbF19eXH3/8kY8++khLW03t+fPnNG3aVCfb1oWQkBA6dOjA77//DrzK9oaEhGT6iHZCQgI9e/akS5cuTJgwQRel5knm5uacOHGCWbNmMXDgQAYNGqSTiQ2ZyQgDXLp0iStXrvDll19qvRZJguxnhAF69uzJqlWrtFSRJMmMcHpkRjiHrFy5kh9//JFj9+9TL6Mr6cn3xsbGhmPHjuWKaRFHjx5l6NChdO7cmbNnzxIYGEiTJk1wdXWlY8eMH4NXq9UMGjSIpKQkPDw8snRynQSxsbEsXLiQX3/9lWnTpjFp0iTFLhQzZMgQGjRowIwZMxTZvyRlRFxcHJ07d8bHx0fpUiRJq2RGOJ8SQrBgwQJWrFjBqVOnMt4E64mrV6+iVqs5e/as0qWkKSUlhTlz5jBy5Ej27NmDm5sbtWrV4uuvv6Zy5cqZaoIBZs2aRWhoKFu3bpVNcDYUL16cBQsW4O/vz+nTp2nYsCFeXl5a2XZmMsIPHjzg8OHDjB49Wiv7lqT3yW5GGKBYsWI6z9dL+YvMCKdN/obXISEE06dPZ+fOnZw+fZrq1atn/CivnhwNnj59Oq1atdLrQe+vr8r3+ghwq1atgFd50D///JO///6b3bt3Z3h7a9asYe/evRw8eDBPXTJZSbVq1eLw4cM4OzszYcIEevTowZ07d7K1zcxkhH/55Re+/vprSpUqla19SlJatJERBqhbty7Hjx/XQkWSJDPC6ZGNsI6kpKQwevRoTp8+jY+PDxUqVPj/J9NrcvWkCQYYM2YMvXr1okOHDkqX8l6nT5/G0tJSE99482S4+vXrM2TIENq0acOECRPYv39/uts7fPgwTk5OHD16FBMTE12Wni917dqVK1eu0Lx5c5o1a8b//ve/LF+pL6MZ4ejoaDZs2IC9vX2W9iNJGaWNjDDAxIkT+fXXX7VQkSTJjHC6hBB6e7O0tBS5UWJioujfv7/47LPPRHR0tNLl5ElqtVr89NNPoly5cuLIkSMfXC4yMlKYmpqKXbt2iXLlyolDhw59cNmAgABhYmIi/P39dVGy9Jb79++L/v37i2rVqondu3cLtVqtk/0sW7ZMfPnllzrZtiTpSosWLZQuQZK0Crgg9KC3fPsmjwhr09ixxKtU9CpUiPhduzhSsyYlS5ZUuqps8/f359ixY0qXofH8+XN69+7N7t27OX/+PF26dPngsmXKlGHOnDmsW7cOT09Phg8fzqlTp95ZTs4KznlVqlRh586duLm54eTkRIcOHbh27VqG189IRjgpKYnly5fLkWlSjtBGRvi1YsWK8eTJE61sS8rfZEY4bbIR1gaVClQqolevpjNQCtgDFFm3DgoUULi47PPz89ObjPDFixexsrKiSpUqnDp1KkMj47799lsePHhAREQELVq0eKfZevbsGV26dNFchlfKWe3atePixYv06NGDNm3aMGnSpAxdBjkjGWEPDw9q1aqFpaWltsqVpA/SVkYYoE+fPqxcuVIr25LyN5kRTptshLPrv0smRwLtgfq8umJcwdfPq9UwebIipWmLtbW14hlhIQTr1q3D1taWBQsW4OLiQuHChTO0bsGCBTUnaZ05c4bBgwdrnktISKBXr1506tSJiRMn6qp8KR2GhoZMmDCBq1evEhMTQ7169di0aRNqtfqD66SXERZCsHTpUqZOnaqLkiXpHdrKCAMMGzaMgwcPpvkzIEkZITPCaZNzhLPjvyb4X6AD0B1YCKjet6wef531XVxcHGPGjCEwMJA95SWylAAAIABJREFUe/ZQr17WhtB99tlnnD9/nvPnz2NmZoZarWbw4MEkJibKWcF6JiAggAkTJiCEYOXKlVm6oMuJEyeYOHEily9flt9bKVdydnbmn3/+YfXq1UqXIknZJucI5zX/NcF3gFbAV8AiPtAEv0dMTAyjRo3STW1apmRG+MaNG1hbW6NWqzl37lyWm2B4lZOCV0da1Go1s2fP5t69e3JWsB5q2rQpZ8+eZcyYMXTv3p0RI0YQHh6eapn0MsJLly5lypQp8nsr5RhtZoQBJk+ezI0bNzhz5ozWtinlPzIjnDb5GyIr/muCrwFtgKmAQyZW37lzJy1btsw1l3pVKiPs4eFBy5YtmTBhAlu2bMnU5XTfp379+gwdOpSQkBB69OjBnj178PT0lLOC9ZSBgQFDhw7l77//xtjYmAYNGrBixQqSkpKAtDPCV65c4dKlSwwaNCgnS5byOW1mhF/bt28fY8aMITExUavblfIPmRFOm2yEs+gCrzLBi4ExGVwnLi4OOzs7Dhw4QGBgIO3atdNdgVqU0xnhxMREvvvuOxwcHPDy8mLUqFGoVBk91p42Jycnnj59yq1bt/jtt98+OCtYrVajz7Gh/MTY2BhnZ2d8fHw4fPgwTZo04Y8//kgzI7xx40bKly/P6dOnSUlJyeGKpfxKmxnh10qVKsXs2bNzzYETSf/IjHA6lJ7fltZNr+YIR0cL0b27ECB8QJiCOPgq+Zuh2549e0SjRo2El5dXlkt4+PChcHR0FJ9++qkIDg7W4ovTHyEhIcLa2lp0795dPH36VOvbj4mJEUWKFElzZu2jR49Eo0aNxNGjR7W+fyl71Gq12Lt3r/joo4/EF198IUJCQt67XHh4uFi2bJmwtLQUFStWFPb29uL8+fM6m1UsSbrWq1cvsXv3bqXLkKQsQ84RzsXKlAEjI/D05DfgC2Anr06OS89LoAfg7u5OQEAAHTt2zNSuhRD8+eef9O3blwYNGhAWFka/fv3o1KkTf/31V6ZfSlbkVEbYy8uLZs2a0adPHw4cOEDp0qW1vo+QkBCqVav2wSPM9+7do2XLlhQqVIjPP/8cgOTkZK3XIWWNSqWid+/eXLt2jejoaJo0acIPP/xAfHx8quVMTU2ZPHkyFy5c4M8//8TY2JiBAwdSp04d5s6dy40bNxR6BVJepu2M8Jt27tzJvHnzeP78uU62L+VdMiOcNtkIpyUm5lUe+NkzAHYBw4FDwGcZWF0NtANGA3v27KFQoUIZ3nVUVBQuLi6YmZkxfvx42rZtS0hICKtXr2bixImsWLGCjh075kgzrOuMcEpKCv/73/8YMWIEHh4eTJs2TWtRiLeFhIRQvXr19z53/fp1WrZsSUhICBs2bMDAwIBffvkFY2NjSpcuTdOmTRkwYACzZ89m06ZNnDp1in///VdGKBRQrFgxgoOD+f3337l06RINGjTgwIED7/1e1K1bF0dHR27evMmOHTuIjo6mbdu2WFlZ4ezszMOHDxV4BVJepIuM8GuFChVi1apV9OnTRyfbl/IumRFOm6HSBeittxqx9cBc4DjQMIObMAD8Mrnb4OBgVq9ejYeHB7a2tqxZs4bWrVu/0xj269cPgI4dO+Lr60vNmjUzuaeMs7a2pm7dujrZdnh4OAMHDkStVhMYGEiFChV0sp/XQkJC3nsRjsDAQLp27UpkZCQODg7/x96Zx9W0vWH8OWmeNJcylKkkkkrKmGTmFhcRMiRTlzJe5MpwzWRI5pnMuqHMc5SIEJKxRJEh0dw57++Po/NrPE1nqvb389mf2nuvvda7T51znr3Ws94FVVVVODg4IDs7Gw8fPoSGhgZev36NV69e4fXr17h27Rp27tyJ169f4+fPn7C0tMTWrVthamoq1PgZ/o+3tzdMTExw4sQJXLlyBZ6envjvv/+wd+/eEsuzWCxYW1vD2toaa9aswfXr13Ho0CEsXboUbdq0wfDhwzFo0CChjEQw1A7Mzc2F+v/TsWNHNG/eHOvWrcP0ap6fnkF0MB7hMhC3N4PfJjaPcBF/71qADAF6WQFPcKGtDDIzM+nAgQNkZ2dH9evXpyVLltDHjx/LvI7D4ZCxsTFdu3ZNADctfLKysujJkyd05MgR+ueff+jPP/8kXV1dmjdvHuXm5ookhjlz5tDSpUsLHbtx4wZpa2uTq6srGRsb08aNG0lLS4tWrlxJeXl5ZdaZlpZG27dvJy0tLQoICGB8qGIiNTWVFBQUKDMzs0LXZWZm0smTJ6lNmzYkIyNDgYGBQoqQgaHqsNlsatu2Lb17907coTAwVAhIqEdY7AHw20QuhIsIWA5ACwAyBihBCCL4zZs3NGfOHNLW1iZHR0cKCgqqkCA8f/48tWrVSujCKzw8nC5cuFDu8pmZmRQdHU2BgYHk4+NDzs7OZGxsTHJycmRsbEwDBw4kHx8fCgwMpOfPnwsx8uK4uLjQgQMHePshISGkra1Nx44dI11dXdLS0iJLS0uKiYmpcN2xsbHUtm1bGjBgAKWkpAgybIYSWLt2Lf38+bPQMUtLSwoLCyt3HWw2m0JCQsjR0ZH09PRo8eLFQpmkyVA7ePjwIQUHBwu9nbi4OLK2thZ6Oww1A39/f/ry5Yu4w5BYIcxYI/IpYj3gAPAGcOv3pl3W9VQ+nyibzcaFCxcQEBCAiIgIjBo1CmFhYWjevHmFQ84fHhOWnzaf8PBwJCQkoEePHsXOxcbGIioqCk+fPsWzZ8/w7NkzJCQkoEmTJjA1NYWpqSmGDh2Kli1bolmzZuVeFllYvHv3jmeNOHLkCKZNm4bTp09j27Zt+Pr1KxYsWIC5c+dCRkamjJqKY2xsjPDwcPj4+KBNmzbYu3cvb8Idg+BZuXIlXGfMgHKBY3YAwjt2RIeCBUt4b/769Qv79+/Hhg0boKSkBG9vbwwZMkTs/58M1ZsHDx4gLCwMAwaUZyp15WnWrBn++OMPeHt7w8/PT6htMVR/NmzYAEdHR2hqaoo7FImEEcJAMRGcB2A8gJcArgJQE0ATX758we7du7F161ZoaGhg8uTJOHbsGBQVFStVX0xMDB4/fiy0GcoFKckjnJSUhNmzZ+Py5cvo3LkzWrZsiREjRsDU1BRNmzat0MRAUZI/WW779u1YtGgRLl++jFatWmHv3r2IjIyEhYVFleqXlZXFqlWr0KNHD4wePRrDhg3Dv//+K7GvR3XG+/NnFM0ibAvgeNGCLFYxMdy/f38oKipix44d6NSpk9AfJhlqB8L2CBdk/vz56Nq1KxISEtCwYUORtMlQPWE8wvxhUTl7MsWBlZUV3b9/X7iNFPkCzAbgCuAXgFMAyi1TS3gdiQgREREICAjAmTNn4OzsjMmTJ8Pa2rpqMQNwd3eHoaEhfHx8qlxXRcjJycGGDRuwcuVKjB8/HvPnz4eysnLZF0oA2dnZUFVVha+vL7Zv345Lly6hadOmQmvvy5cvcHd3x7dv33Dt2jXUqVNHaG3VOn6/b/PAnZSan/4mHoANgCSUsNx5gfeoiYkJ/nvxAsUW7Jbgz0MGhqJ8+/YNw4cPx/nz58UdCgNDmbBYrCgishJ3HEWp3enTiojgTPw/N3AwKiCCi5Ceno4dO3agbdu2GDlyJNq0aYPXr19jz549AhHBnz59wsmTJzFx4sQq11Ue8vMInz9/Hq1atcL169cRHh6O5cuXVxsRDADv379HTk4O9u/fj1u3bglVBAOAlpYWgoKCwGKxsG3bNqG2VVsgIrxksbAZgBkAdQBrCpxvCKAOgHclXXz1Ku/XnBcvUGIfPdMzzFAFhJlHuCQ0NDSQk5OD+Ph4kbXJUP1g8gjzp3YL4QJ8BGAFrhViBoCCTkEOuDaJsoiNjcW0adPQsGFDnD17FitWrEBcXBxmzJghUG/Oli1bMGTIkFKXBxY0Z86cwaRJk/DXX39h3bp1CAkJQbNmzUTStiCpU6cOevfujZs3b6J+/foiaZPFYmHz5s3w9fXFp0+fRNJmTePbt284ceIEPDw8YCQlBXsAUQDeA7AGUDDhHgtce8SdkipycPhdiIUcALIAroP7fi8EI4YZKokw8wiXxsqVK+Hp6SnSNhmqF0weYf4wQhjAXQC9wLVC9APQ5fcxALgJrkC+VMq1uQBOAnBwcEDXrl2hoqKChw8fIjg4GD179oSUlGBf4szMTGzZsgVeXl4Crbck0tPT4ePjA39/f3Tq1AkxMTHo27ev0NsVFkZGRggNDYW2dplTHwWKmZkZ3NzcMHv2bJG2W13Jzc3FrVu3sGDBAtjY2MDQ0BB79uyBqakpQsEVwLsBzAXwBUCLItfboRQhDPBEbg6A+wAGAzgI4J7gb4OhFmJubo7+/fuLtE1ra2t8/foV3759E2m7DNUHxiPMn9rtEWaxsB/ARgCX8f9JcfMArAb3C1UJwCEAMgC+A/hW4OcjcBfaaAJg8uHDGDhwoNAnRe3cuRNBQUEICQkRWhtEhOPHj2PmzJno2LEjVq1aJbIe1JrKr1+/0KJFCxw6dAidO3cWdzgSBRHh5cuXuHjxIi5evIgbN26gWbNm6NGjBxwdHWFnZ/f/bA4Fems5AFQAJP/+mU8EgMkAHvBpM/+9fgTAK3Df/4X68cLDgfbtq3ZjDAwiIjQ0FIGBgTh48KC4Q2FgKBVJ9QjXaiE8l8XCIwBnUbxrfD0AHwDK4IpeaQAavzf13z8NwV1yuZWeHpCUJLQ48yEimJmZYePGjXBwcEBSUhJGjRqFjx8/YsuWLQIRWE+ePMHUqVPx7ds3bNq0CZ07d0ZERATS0tJKTJ/GUH5OnDgBX19fPHz4sFLp2cRFTEwMkpKSwGKxeJuUlFSh/aJbWedZLBbi4uJw6dIlXLx4EWw2myd8HRwcSu+1LyCE5wPYA66tqSDZ4L4/PwEozcHeDNyHXScAPwDoAngDQD+/gLY28PlzZV4uhlpMdHQ0EhIShJ4+rSSsra1x69YtyMvLi7xtBslm8+bNcHFxEXv6NEkVwrUyfRqHw8GQIUOgCyC0lDJeAAaB+wKpA+D70SICEQwAFy9ehLS0NLp164ZLly7Bzc0NEyZMgJmZGYYPH44+ffpg5cqVlUrf8/37dyxcuBBHjhyBr68vPDw8IC3N/ffgl0eYofwMGjQIO3fuxIYNGzBz5kxxh1MmeXl5+Oeff7Bnzx60bNmy1GTkHA6nUucaNGiAHj168JZKrmgKswCUvNy5HIA2ACIBdCvl2jhw/cQEwBNAT3DFMI/v3ysUCwMDILo8wiUxceJEzJkzBxs2bBB52wySDZNHmD+1Ugi/ePECGRkZ2FxGuQZlVSSinuB81q1bh6lTp8LHxwd79+7FoUOHYG9vDwDo3r075s2bh5YtW8LPzw9Dhgwpl7Bgs9nYs2cPfHx84OTkhGfPnhWbhFdSHmGGisNiseDv74/27dvDZdYslGg2UVEB0tJEHVoxEhISMGzYMKioqODRo0fQ0dERd0jFsEPp71E7ABdRuhDOf2fMA9cacQXcbBM8RJQLlqFmIco8wkUZN24crKyswOFwBD43haF6w3iE+VMrrRExMTH4999/cfjw4crPEBfx6xYTE4O2bdvCwsICampqOHDgQIniJDw8HOPHj4ehoSE2b97MW0WtJCIiIuDp6Qk5OTls2rQJbdu2FeYtMPxmIYuFZyhh4YeCiPF9+d9//2HChAmYOXMmZsyYIVlfqgXer+MBtAUwqYRi78DNJ3wSQMdSqgoAsAHAbQDF8q8wHmGGasi///4LKSkpzJ07V9yhMDAUQ1KtERL0DScmKiM4xCBS/Pz8wOFw4OzsjHPnzpXaQ2dra4sHDx7A1tYWlpaWWL9+PdhsdqEyycnJGD16NAYNGgQvLy+EhYXxFcH5eYQZBACLhb/Bnch1gV85MfQqZWVlYerUqfD29kZwcDBmzZolWSK4CJcBlPaYZwiuf9gFXK9wUf4DsBTAOZQggu3tGRHMUClEnUe4KHPnzsXJkyfF1j6DZMLkEeaP5H7LiRKiwltZZcSAsrIybty4gb///rtMcSIrK4v58+fjzp07OH36NGxsbPDw4UPk5uZi9erVMDMzg46ODmJjYzFixIgyLRTh4eE4d+6cIG+nVqMAwB9cb2pWaYVSU0UWDwDExcXB1tYWHz9+xMOHD9G+GgjBePC3L/UBdzKrC7gr0OVzB9ze5DMAGpd04bVr3J7nj0Wn4TEw8EcceYQLIiUlBTs7O+zatUtsMTBIHkweYf7USo9wmUigXaQyEyCaN2+OK1euYO/evejVqxcUFBTAYrFgbm6O+fPnQ0VFpexKwHiEhUFvcCd6rQLwj5hjOXjwILy9vbF48WJMnDixwpPWxEEKuJPiDMsotxDc19oHwAoAiQAGAtgPwLKsRgwM/v+7BH4mMEge4vQI57Nq1Sp06tQJ48aNE2scDJID4xHmT60UwhwOR9whiAwWi4UxY8agb9++iIuLQ4cOHXD16lU4ODigR48eWLp0aZk9zHZ2diKKtnaxHlyPqyu4uahLgs1m4927d3j+/Dlva9q0KSZNmlTlL9xfv37B09MTd+/exZUrV9C6desq1SdKngOwQOH8wSVRB0AguKK3PYDW4PYOtylnO3HgplcMZbFg+tdfWLlyJRQUFCoXNEONx9LSEpaWZT5iCRV5eXkYGxvj7Nmz6Nevn1hjYZAMRLEAV3Wm1lojqkOvlyDR0dFBx44dwWKx4ODggPv370NFRQWWlpZletoYj7BwaAhgNoCp4Oa+fQLgGIBF4A7nm5ubQ0VFBd26dYO/vz8+fvwIGxsbxMXFoUmTJpg1axY+VnL4/vHjx7CysgKLxcL9+/erjwj+3TP7HFxB+6scl2iB+7p6gLsIhzu4r3tJ5IC7zPp0AM0BdAV3dckGAII3bYKmpiYeP35c+fgZajTi9gjn4+/vj2XLlok7DAYJgfEI86fWCmEG7sSK27dvIzAwEN27dy+1p5zxCAuQIkPsXuAuGVwXwBBwVzrLAXep7927d+Pz58+Ij4/H+fPn4efnhwkTJmDv3r2Ijo5Gbm4uzMzMMH78eMTFxZWzecKWLVvg4OAAHx8f7NmzB0pKSgK9RaFDhFhwxXB6Cac54IrkbAAZAH4CMAHXgjIIXJF7A1yBCwCfAewDd7llbXAfQq6Bu5pkKrh2CkUAi8HNrWxvb8/NOMPAUARxe4TzUVNTQ7169XDs2DFxh8IgATAeYf4wQriWo6ioiCNHjsDKygo7d+4ssYyNjQ0cHR1FHFkNpoAYlgVwH0AauMLuFIB/AYwggqWlJZSVS14brWHDhli/fj3i4uJgYGCADh06YPDgwYiKiiq12dTUVAwePBg7duzA7du3MWLECAHelGhJdnFBFriT3RTA9QtLg5sfuM7vfRUAmgDqgbtiXDCAlgBmAVgLwA2AKbg983MAhADIBXclSSkA2wB8Bffvs/l3ec3cXPj5+SEgIEAk98lQvTA3N0f//v3FHQYA4OjRo/Dz85OIHmoG8cJ4hPnDCGEGAMDChQuxd+/eEs/Z2dmhT58+og2oplNEDMuWcq4stLS04Ovri7dv38LOzg5OTk5wdHTElStXUDBH+N27d2FhYQF9fX2Eh4ejefPmVb8HMbJv3z6kAEgGV6z+AJAJgA3uanFscHvWM8G1T6SBK47lAESBa41IAlc8uwBo8fvcNHAtKq8BGIMrsguiAq7NKEmEC+kwVB8sLS3h7Ows7jAAANLS0rhx4waWLFmCCxf4JmtkqOF4eXkVWyiL4f/USiEsyYuIiAsFBQWoqqri1atXxc4xHmEhUTRtXxXS8ykrK8Pb2xuvX7/G8OHDMWXKFLRr1w4nT57E6tWrMWDAAPj5+WHjxo2Qk5MT8I2IHllZWewGtwdYEdwl0GVQ+gdaHQCHwc3fPATcPMLXATQDN5dwdwBvASwHVxQ7g5uHuCgqABR690ZSUhLzOcJQDEnxCOcjKyuLmzdvYu7cubh27Zq4w2EQE4xHmD+1VgjXtsly5WHJkiWYPbv4NCLGI1x9kJWVxZgxY/Ds2TPMmzcPa9asQWhoKO7duwcnJydxhydQVurolOgRLg0VcDNAbAMwBVxPcGcAbwDMB6BWoOxkAFvB7VkuWgcH3Mm2aRKwFDaDZCEpHuGCKCgo4NatW5g+fTru3Lkj7nAYxADjEeZPrUyfxlAy1tbW+PDhA9hsNurUqcM7zuQRrn5ISUnB2dlZYoZphYG3tzeUPD2BcubDBrjZH84BeAhgGIpYUgpgDUAD3NX/CpqClMG1WuinpyMpKQl169atTOgMNRRJyCNcEkpKSrhx4wY6d+6MnTt3wspK4la5ZRAijEeYP7WyR5ihdPr374/169cXOsZ4hBkkkb///ps7mbCotcTVle91rcGd+FaaCM5nMoAtRY6pgJuFoh6ApBYtKhk5Q01FkjzCRVFVVcW1a9cwduxYPHr0SNzhMIgQxiPMH0YIMxRizpw5OH78eKFjjEeYQRJZt24dfv0qIZPwwYMC8V67AAgH8K7AsUJCGOAuxczA8BtJ8wgXRV1dHVeuXMGIESPw/PlzcYfDICIYjzB/GCHMUAgZGRloa2tj7dq1yMrKAsB4hBkkk5UrVyI9vQIu4bLEcFISMG0ab1cRwChwPcX5FBTCvKVMGDHM8BtJ9AgXRVtbGxcuXOClUmS87jUfxiPMn1ophJnZ3vw5fPgw0tPT4ejoCDs7O9y8eROmpqbiDouBoRDe3t4VXwyECHj1CrCzA/T1uT9fveIe19MDitiCJgLYDe7iHMD/hbAZuBkmnAGsAHDt2jX8/PmzajfEUO2RpDzC/NDX18f169cRHx8PJycndOzYEd26dcO8efPw9OlT5juyhsF4hPnDkuR/eCsrK7p//77A633w4AHWrVuHgwcPCrzumgaHw8Hp06exa9cufP36Ferq6hgzZgwGDhwIKala+RzFUNMp0sPrCGAMgOEA1oBriVgDrmXibv5ma4tHjx6hcePGsLGxQfv27WFjYwNTU9NCE08ZGCSVnz9/4uTJkzhz5gw+f/4MgLtwz8CBA9G/f3/Iypblqmdg4A+LxYoiIombqckIYYYyiYiIQFpaGnr06IE3b97Az88PDx48AIvFQrdu3TB16lTGiM8gctatWwcPD49SV9+rNEWEcBC4K9GFgWuTiAKwveg1SUnI0dDA48ePERERgbt37+Lu3btITk6GpaUlbGxseJu+vr5g42WQGKKjo5GQkIABAwaIO5QqQ0SIjIxEYGAgoqOjwWazoaioiG7dusHV1RUNGjQQd4gM5WTz5s1wcXGBpqamWONghHAlYISwZODn54eEhAT4+fkVOp6Tk4O9e/fi2LFjyMjIQMOGDeHp6YmOHTuKKVKG2oSuri4eP34MXV1dwVYsLQ2w/59BOAuANrgp1yIBnAF3cY5CODoCJUwo/fbtGyIjI3nC+O7du1BSUiokjC0tLaGoqCjYe2AQC7t370ZYWBh2794t7lCEQkpKCgIDA3Hx4kX8+PEDLBYLLVq0wJAhQ2Bvb8+MfkgozZs3x9mzZ8W+oigjhCsBI4Qlgzt37iA1NbXMFGqRkZHYuHEj3rx5Azk5OTg7O8PDwwPy8vIiipShNrFixQp4enoKvkc4KAgYOBAAd+nmoeAu2/wfuMsvDwEQC+5qdoX4+RMoIxYiwqtXrwoJ46dPn6J58+Y8O0V+3m7GelT9iIqKQkJCgsSmUBM0eXl5uHz5Mk6cOIEXL16AiKCuro5evXph2LBhjC9VQli/fj1GjBgh9pFbRghXAkYIV19SU1OxefNmXLhwAWw2G61atYKXlxdMTEzEHRoDQ9mwWHgPoBcAewDr8f/VhwYCsAIwr+g1/v7AlCkVbiorKwvR0dGFxPHXr19hbW1dqOdYR0en8vfDwCAi4uPjcejQIVy7dg1ZWVmQkpKCpaUlhg0bBisrK2ZV11oMI4QrgbCEcFRUFPz8/BghXE4KeoQrA4fDQWhoKHbs2IGUlBTUrVsXI0eOhIuLC9PrxVBphOYRBgAWC7fAzSVsCG72iMHg9gK/AXfluccADIpeJ6DP05SUlELCODIyEhoaGoWEsYWFRamjLRwOB9nZ2YW2nJycCh/T19eHi4sLpKWZRUjLQ03yCAuKnJwcBAcH49SpU3j//j0Arq3pjz/+wJ9//onExEQYGRlBRkZGzJHWXBiPMH9qpRC+f/8+NmzYgAMHDgi87ppIaR7hyhIfH4/169cjMjISANC5c2dMmzYNenp6AqmfoXYgNI8wAMTFAcbGyANwFsBWcCfJjQIwAcBeAIkA9pd0rRA+UzkcDuLi4njCOCIiAi9evEC9evWQl5dXTMyy2WzIyckV22RlZfnuFz127949fP36FWvXrq30g3BtoqZ7hAVFTEwMDh48iIiICMTExCAjIwN9+vTB0qVLmVFDIcB4hPlTax/zmeGZ8pPvWRQUjRo14onqvLw87N+/HyNHjkR6ejr09PQwZcoUODg4CKw9hppJpfIIl5ffXxjSAJx+b2/AzRbRCUALcHuEwwHYCieCQkhJScHExAQmJiZwc3MDAGRkZCAxMZEnXAsKWGlpaYF8xhERgoODMWXKFDRv3hxr1qxBC2Zp6VIxNzeHurq6uMOQeMzMzLBixQoA3Ic8Pz8/zJs3D1euXIG+vj4ePXrEjEIIECaPMH9qbY/wxo0bsX9/if05DGIkOjoaGzZswIsXLyAjI4N+/fph0qRJwhn+ZmAoixLEZDa4KdWmg2uVeIUiKxNJ8GdqZcnJycHmzZuxbNkyDB06FL6+vlWaeJM/abBZs2YCjJKhOvPu3Tt4eHjg0qVLUFNTw6VLl2BlJXGdhwxVQFJ7hBkhzFAmVfUIV5afP39iy5YtCA0NRU5ODoyNjTFt2jS0adNGpHEwCJasrCwkJiaiSZMmVeq1FKpHuCClxBgGwAFc28SYgidK+UzNzs5GQkIC3r59i0+fPsHZ2bnaPeB9+fIFixYtws6dO6Hin9vfAAAgAElEQVSgoABlZWUoKSmVuJV0rkWLFujSpQtWrVqFOXPm4NixYxg8eLC4b0tgMB7hqkFE2L17Nzw9PZGVlYUhQ4bg33//RdOmTcUdWrWG8Qjzp9xCmMVi1QFwH8AHIurH4n6DLQV3DgkbwBYi2shisaTAtdA1BTCeiJ6yWKyuAK4BGEBEZ37XdxbAGiK6XlqbjBCWDATtEa4sV65cQUBAAJKSkqCsrIyhQ4fCzc2NGUKrRuTl5aF37968BVlsbW1ha2sLOzs7WFtbV8jqIFSPcFFKEcM2AF6A6xeWB/AewLurV/Hu3Tu8ffuWt7179w4pKSkwMDCAkZER8vLyUKdOHYSEhEBBQUH48QuY7Oxs/Pr1C+np6byf+Vtp+1FRUZCWlsb48ePx999/IyAgAKNHj8aZM2fQvn17cd+SQGA8woIhMTERjo6OiI2NhbS0NDw8PLBgwQJmHkklqS4eYXHoTKBiHuFpAJ4DUP29PxpAAwAmRMRhsVj5uX16gLvq6CwAywGM/X08EcB8cPPRi42goCD4+vry/EkMZSNoj3BlcXBw4HmHk5KSsHHjRnTt2hUcDgc2Njbw8vJCo0aNxBwlAz98fHxARPj06RM+ffqE8PBw3LlzB3PnzsXjx49hYmICOzs72NnZwdbWFo0aNSq117iiHmEOh1P5LCVEgKkp8Px5ocMbAHQH0AjALwC6AIx8fWFoaAgjIyM4ODjAyMgIhoaGMDAw4D20sdlsjBo1Cs7OzggODoacnFzl4hIT+V7kivQwubi4AACmTZuGq1evwszMDHv37sXAgQNx+/ZtGBkZCStckcF4hAVD/fr18ezZMzg7OyM0NBQBAQHYt28fvL29MWvWLKiqqpZdCQOPauQRFo/OJKIyNwD1AVwB0A3A2d/HIgE0LaFsXwCTwF2Mac/vY13BnXx9AYDj72NnAXTl166lpSUJig8fPpC9vT0NGTKEMjMzBVYvg/hhs9l0+PBh6t27N9nZ2VH//v0pODiY2Gy2uENjKMCJEyeoUaNGlJKSUuL5zMxMun37Nq1evZqcnZ1JV1eX6tWrR4MGDaI1a9bQnTt3KCsrq1JtP336lDQ1NenatWtVuAMi4kriQltPgJYAlJ1/rJzk5ubSoEGD6I8//qCcnJyqxSXhpKWlkYKCAsnLy9PVq1eJw+HQ9evXaciQISQnJ0dz5syhsLAwcYfJIIGMGjWKDA0NSVFRkYyNjalhw4b069cvcYfFUAkA3CcJ05n0+1O7PEL4BADL/IZ+H/v6W3nfB3AOQLPfx6UBHAF3QnWrIgF2AnCjvAEKQgiz2Wzy9vamdu3a0cOHD6tcX20kPDycLly4IO4wyk1sbCxNnDiR7OzsqGPHjuTr60tfv34Vd1i1mqdPn5KWlhbdv3+/3NdwOBx68+YNHTp0iKZMmUIWFhakqKhItra2NGPGDPLy8qKfP3+Wq67Zs2dTr169SFtbm86cOVPZ2+BSRAhHANQAoKwKiOB8srOzqV+/fjR06FDKy8urWlwSzL59+wgAbd26lQICAqhly5YE7oJ9vM3a2ppevXpVrvrS09OFHHHlePjwIQUHB4s7jBqFg4MDycjIkJSUFLFYLAJAS5YsEXdY1Qp/f3/68uWLuMMoSwiLRWcSUdnWCBaL1Q/AZyKK+u3ByEcOQBYRWbFYrIEAdgPoRER54OahLwYR3WKxWGCxWJ3KahfgTswICQlB37598eHDB4SGhkJfX7/c+6tWrcKZM2cwZcoUnDp1CqGhofjw4UOl66ut+3FxcXj27Bni4+MlIp7y7Pv4+CA0NBRaWlpISkrCgAEDkJSUhPr162PZsmUwNDSUqHhr8n7Hjh3Rr18/9OvXD8nJyQBQoeuHDx+OLl26IDQ0FOrq6tDU1ERoaCg2bNiAOnXqYM2aNXyv79WrF/bt24dJkybB0dER7u7u+OeffyAjI1O5+yPCBxYLoQD0we2aaApg7PDhGF6Jz6vjx4/DzMwMEydOhJOTk8Be/5CQEBgYGIj979+3b1+EhYVh0KBBuHr1Kl69eoU2bdrAwsICSkpKOHr0KFJTU/H27Vu0bdsWbdq0gZOTE6SlpdG4ceNi9cnJyWHAgAGYN28eLCwsJOL+8vdjYmLw8+dPWFpaSkQ8NWH/yJEj6NmzJx4/foymTZvi/fv3WLBgAdTV1WFoaCj2+KrD/tq1a/H9+3exvl8ePHggkToTKJL1pxQ6ABjAYrHegavAu7FYrIPgejFO/i4TBKB1Odv8F1yFXybp6emIjY0FAKSlpSEyMrJc+1++fMGQIUMQHBwMd3d3zJgxo0LXM/uF921sbGBpaSkx8VRk/82bN5g8eTJ27NiBbt26oXXr1ggICEDfvn2xcOFC7NixAxkZGRITb03aDw8Px927d+Hm5gYbGxtIS0tXuf74+HjY29tj7NixMDExwdatW3H48GG+11+5cgVaWlpITEwEEeHy5ctYtGgRNm7ciK1bt8Lf3x87d+7EwYMHcfjwYZw6dQqnT59GUFAQQkJCEBERgYiICFy4cAFhYWFISEjAm5s3cWvkSDxetgx5ubmYcOQIgoOD8eTJkwrf35s3b/Dt2zdkZWUJ5PVPSEjAqlWrMGvWLCxbtqzC17PZbFy5cgUbN27EyJEj4eXlVa7r7969i7179+L169fFznt7e0NdXR3t2rVDVFQU5s+fj4SEBOzcuRO5ubmYMWMGT9x6eXnh9OnTmDlzJnx9fXHz5k38+PEDkZGROHHiBIYPHw4lJSWx/3+XtC8lJYX+/ftLTDw1YV9LSws7duyAvr4+EhISsHDhQjg4OODgwYMSEV912B86dChevHgh1njyfy8FselMoILp034r9ZnEnc23AkAcEe3+fXw1EVmXdd3v/bvgdqaMJAFmjeBwOPDx8cHFixfh7+9fY2YiMwiH1NRU+Pv74+LFi8jLy4OZmRmmTZuGli1bijs0iYOI8OvXL6SkpCAlJQVfvnzh/V7afkZGBrS0tNC+fXscPXoUsrKyAo8rJiYGvXr1wvz58zFp0qQSy7i6usLW1haenp68Y2/evMGuXbuQlZVVbGnhoj/LOpednQ0WiwUOh4NLly6he/fuFbqHvn37onv37vD29uZbbsGCBTAwMMCECROKTSDMyMjAqVOnsHfvXjx8+BBDhgyBra0tFi9ejFevXpUZQ3Z2Nq5evYqgoCAEBwdDX18fzs7OcHBwwMCBA3HhwgW+aQs5HA6mT5+OHTt2wMXFBbt27Sq1bF5eHmbPng0/Pz8MGzYMq1evhoFBscWqkZycjEOHDmHPnj3IzMyEo6Mj/vvvP4SEhODvv//G7Nmz4ejoWOa9ERHYbDaTXaaak5eXhylTpiAwMBAeHh44fPgwXr9+XS2zrtRWypM+TdQ6E0D5PMIFPBxd8X/vhhqAEABPwPVpmJfnut/7A8D1hQnMI3zt2jWysLBgvENCoLp5hCsDm82mkJAQ+uOPP8jOzo569uxJBw4coNzcXHGHJlLev39PXl5eNHz4cHJ0dKQ2bdqQgYEBycnJkaKiIjVq1IgsLS2pV69eNHLkSJo+fTotX76cduzYQf/99x/dvn2b4uLi6Nu3b8ThcIQa69q1a+nnz5/0+vVraty4MS1btqxYmz9+/KC6deuWOkFPUOTm5lbKt3rhwgVq2rQpZWdn8y334MED0tXVpdatW9OwYcMoLS2NOBwO3bx5k8aOHUtqamrUp08fOnr0KG8yMJvNJk1NTUpMTORb9759+0hdXZ06dOhAa9eupdevXxc6v23bNrKzsyv175mbm0tubm7UoUMHevHiBampqfH15M+fP5/MzMzo+vXrfOPKh8Ph0L1792ju3Ln07NkzIiJycnKiU6dOUUZGBr169Ypu3rxJhw8fprVr19L06dPJxcWFOnfuTE2aNCEFBQXS09MTiUeS8QgLFw6HQ4sWLSI5OTkyMDCgOXPm0Js3b5iJ0WVQHTzCJCadSUTVf0GN1NRUuLq6gsVi4eDBg1BTUxNRdLUHSckjLEoSExOxYcMGXL16FVFRUeIOpxBRUVH48eMHunXrJtB68/Ly0LVrV7Rs2RIdO3aEtrY2tLW1oaWlBW1tbSgqKgq0vapSMI/wx48f0aNHD/Tp0wcrV67k9Zju3r0bZ86cQVBQkJijLU5eXh7atGmDpUuXwsnJiW/ZHj16wMnJCWPGjMHUqVNx/fp1cDgcyMvLY/To0RgxYgTq1atX7LqBAwfizz//xPDhw4udIyKsWrWKt2iNqalpiW2z2Wy0b98eU6dOxciRIwudy8rKgouLC7Kzs3Hy5EkoKipixIgRsLCwwIwZM0qs79evX5CXl69SD+24ceMQGBgIIkK9evVgYGAAfX193s+iv8+ePRuysrJYv359pdssD0weYdGwfft2TJgwAYqKilBXV0daWhpatmyJ1q1bo1WrVrytmqQMEzrVJY+w2ChLKYtzK6tHmM1mk4WFBd24caMczyIMleX27dsUEhIi7jDEQpcuXcQdQiFyc3OpZcuWNHny5Apdx+FwKDk5mT5//lxqmUWLFlH37t2rTe/K8uXLC2WN+PLlC7Vr147c3d15GRg6d+5MQUFB4gqRL1u3bqUuXbqU2XN+8+ZNkpOTo9u3b/P+NufOnaN79+6Vee369evJw8Oj2HE2m01eXl5kZmZWZo8xEVFERATVq1ePUlNTecd+/PhB9vb2NHTo0EI92nfu3KEmTZoI9f/o169f9OXLl3KPOnz69Ik0NTUpLi5OaDEREd2/f59OnTol1DYYuJw4cYLq1KlDy5cvp69fv9KNGzfI39+fPDw8yNbWllRUVMjAwIB69epFs2bNov3791N0dHSlUzBWZ/z8/IQ+KlYeUI4eYXFsYg+A31aWEPby8qJVq1bxLcPAUBUkTQj7+/uTtLR0ieKGiOjbt28UHBxMfn5+NHXqVOrXrx+1bNmSFBUVSUFBgXr06FHidbdv3yZdXV368OGDMMMXOmlpadStWzcaDFAsQFoF8/tWIr2ZsEhNTSVdXV2Kiooqs2xycjLNmTOHTExMSF9fnyZOnEjnzp0r1xf6w4cPydjYuNjxxMREkpWVrVBawXHjxpG3tzcREX3+/JksLS1p4sSJxdK+cTgcsrCwoNDQ0BLrOXnyJC1evLjc7QqK5cuXk7Ozs8jbZRAely9fJmlpaZo3b16xcxwOh96+fUunT5+m/v37F0rVZ2JiQvv37xdDxLUbRggLWAjHxcWRra1tGS87gyCoDR7h0pAkIfz161fS1tamadOm0bhx44qdz8zMpLZt25K9vT15enrS2rVrKSgoiKKjo+nHjx905MgR+vPPP4tdl5qaSkZGRtXO25jvES5KJkBOAGkC5FnCAhiSwJw5c2j06NEVvu7Fixe0atUqsrOzo7p169LgwYPp4MGD9O3btxLL5+Xlkbq6OiUmJtK3b98oPj6eYmJiKDw8nJSVlSs0mvb582fS1tamc+fOkYmJCc2bN6/UHtmdO3dSv379ih3Pzs4mANS0adNytysoMjMzqVGjRkIdQWQ8wqLnzp07JCsrSxMnTiz1/9HCwoLk5eWpffv2JCcnRwBIW1u7RufuLkh18giLYxN7APw2fkLYxsaG3rx5U8bLziAI1q1bR15eXuIOQyx07txZ3CHw+Ouvv2jSpEm0Z88ecnNzK3Z+4sSJNGjQoFK/DDZt2lSipcLV1ZUmTpwo6HCFjo6ODiUnJxc++Fvs5gI0D6AXJQlhMYvhN2/ekIaGRpV735OTk2nnzp3Uv39/UlFRIQcHB9q4cSPFx8cXKjdkyBCSkpIiVVVVMjAwIBMTE7K2tiYAFe4h9ff3JwC0Zs0avuXS09NJU1Oz2Gf0/PnzCUCxGEVFYGAgWVlZCc22sWvXLhozZoxQ6mYoncjISN7Kc0UfjuPj46lr166kpKRERERZWVmkqqpKsrKytcby16xZM3rx4oW4w5BYIVyePMISx9KlS9GlS5casTZ9dcDGxqZcaYoYhMfTp09x+PBhLF68GNLS0sjLyyt0PjAwEJcvX8auXbuKpdbKJyUlBdra2oWOHTx4EA8ePMDatWuFFruw8Pb2hpKSUonnpAEsAiDeqSElExYWBhkZGTx79qxK9ejq6mLcuHE4ffo0kpKSMGXKFERFRcHS0hIWFhbw9fXFw4cPcfjwYeTl5eHHjx9ITEzE8+fPERkZCWdnZwQFBSEnJ6fcbU6cOBEPHjwodSJcPoqKinBzc8PWrVt5xxISEvDvv/+ibdu2aNCgAb5//85bYEVUuLi4QEpKCoGBgUKp39zcHP379xdK3QylY21tjc+fP0NOTg4GBgbw8PDg/V/7+Phgzpw5vJSHcnJyGDp0KFgsFrZt2ybmyEXD5MmTmYmD/BC3Eue3ldQj/OHDBxLE0ssMDOXB0tKSfH19xTqBjMPhkKOjI61fv56IiA4fPkxDhw7lnX/27BlpaWlRdHQ033omTpxI/v7+vP3Xr1+X6zpJh8Ph0Lt37+jUqVO0AKB+AOkDJA/QWoDYEtYjTEQUEhJCDRs2pNGjRwt8+e/c3Fy6ceMGTZ8+nZo0aUINGzYkT09Punz5MuXk5PDKffv2jQDQ0qVLBdp+Pi9fviRtbW1eOreBAwcSAFJRUSFZWVlSVlYmOTk5oafZK0pYWBg1aNCAMjIyRNoug/DJzc0ld3d3atiwIRkYGJCdnR01bNiQtmzZQkpKSpSUlERE3HSrdevWJQUFBd4xBuEDpkdYMAwbNoxJTSNiIiIicPHiRXGHIRYiIyNRp04dWFpaYv/+/WKJ4ezZs3j//j0mT54MAIV6hNPT0/Hnn39ixYoVMDc3L7WOnz9/IiIiAvr6+gC4qbtcXV0xb948vtdJMh4eHujSpQu0tLRga2uLnTt3ggNgDIAwADEATgHoDiBBnIGWQJ8+fRATEwNVVVW0bNkSR44cAfd7oupIS0ujc+fOWLt2LV6+fImQkBDo6elh7ty50NXVhaurK44dO4Y6depg5syZUFZWFki7RWnatCksLS1x9OhRnDt3Do8ePcLLly/x5MkTpKam4vbt2zAyMip1BENYdOjQAe3atRNKOsjo6GicPn1a4PUylA9paWls374d//zzD0aMGAFlZWU0btwYDx8+xMiRI6GqqgoA6NSpE+Tl5SEjI4N9+/aJOWrhs3nzZnz9+lXcYUgu4lbi/LaiPb9bt24ld3f38j9+MAiE2uwRzic7O5vc3d2pXbt2Ik3Xl52dTU2bNqVz587xjgUFBZGTkxNxOBwaMWIEubm58e1VS0pKorZt29KECRN4C4QsWLCAevbsWW1SpZWEmpoaKSoqUmxs7P8PFun5zQNo2e/sEQcA4khIj3BBIiIiyMzMjPr06SN072xiYiJt2bKFevXqRSoqKtSzZ89C/1uC5syZM2RhYUFNmjQplkVi9+7dNHjwYKG1zY9Xr16RpqZmcY95FWE8wtWHGTNmkJqaGhkZGYl8VELUMB5h/pvYA+C3FRTC379/J3Nz82r9xV1dqc15hIvy9etX+uOPP6hLly6FBZiQWL16NfXt27fQsdOnT1O/fv1o27Zt1KpVK74rmsXFxVHjxo1p8eLFvA/7mzdvkp6eXrUfEly+fDmNHz+eRowYUfhECVaIBwCZAjQYELgVQRBkZ2fT4sWLSVNTkzZu3CiS2ew/fvygQ4cOUbNmzah37970/PlzgbeRl5dHhoaGxSblvX//nurVq0eXLl0SeJvlxdvbmyZMmCDQOpk8wtWHqKgo0tDQIC0tLbp27Zq4wxEqTB7hGiKEe/fuzSycwSAxxMXFUdeuXWnAgAFCE1bJycmkqalZ7Ek+NDSUGjduTNra2nzF+N27d0lPT4927NjBO/b9+3dq1KgRnTlzRigxi5rz589T8+bNi58oQQxnAOTl5UUGBgZ0/vx50QdbDp4/f06dOnWi9u3b05MnT0TSZnZ2Nq1du5Y0NTVp2rRppaZiqywPHz6kly9f8sR9VlYW2djY0PLlywXaTkXJT0cYExMj1jgYxAOHw6FmzZqRpqYmubq6ijucWgEjhKsohCUpjVVtozbnES6La9eu8VYzE/Rohbu7O02fPr3Y8YsXLxIAOnr0aKnXXrp0ibS1tQsJXg6HQ0OHDiVPT0+BxikuVq1aRaampnTixIkKXXf58mVq0KABeXp68u1NFxdsNpu2bt1KWlpa5OPjw5tsJmw+ffpEHh4epKOjQwEBATwbTVVgs9kUEBBA6urq9PTpUyIi8vDw4JvmT5T4+flR7969BVYfk0e4erFo0SLS1dUlZWVliRwpEhRMHmFGCDNUEcYjXDadO3emd+/eCay+Bw8ekK6uLn3//r3YuZSUlEK9vCWxceNGsrCwKLT62N69e8nMzKzGzJZXUVGhDh06VEpQff/+nVxdXcnY2Jh8fX3Jy8uL3NzcaMCAAdSpUyfy9fUVu1BLTEwkZ2dnMjY2pps3b4qs3ejoaOratSuZmZnR5cuXK13PmzdvyN7enlRVVXkWiB07dpCJiQmlpaUJKtwqke/Bv3jxokDqYzzC1Yu4uDiqW7cuNW7cmDZu3CjucIQG4xFmhDBDFWE8wmXTqVMngdXF4XCoU6dOtG3btirVMWjQIBo/fjwRcVNZaWlp0ePHjwUVplj58uULKSkpUURERJXqOXnyJM2fP5/WrFlDu3btoqCgILpy5Qq1atVK7EP3+Zw6dYoMDAzIw8OjxAcjYcDhcOjkyZNkZGREf/zxB718+bLc1+b3AispKVGDBg14Fo+7d++WaecRBydPnqRWrVoJxJfNeISrH1ZWVlSvXj1q1aqV2B9+hUW+RzglJYXCwsIKjV6mpaVRVFQUHT16lJYuXUpubm40cuRIunz5ssBHORkhzAhhhhpMx44dBVbX0aNHydzcvMpfzGlpadSiRQsKCAgga2vrGtXjMWnSJKFaPD58+ECGhoa0e/duobVREVJTU2nixImkr69PJ0+eFFm7mZmZtGzZMtLU1KRZs2bRjx8/+JbP7wUGQG3btqWPHz8SEdd20aBBAwoKChJF2BUi/8GzrFEWhpqJn58f1a9fnwwMDOju3bviDkconD59mqysrKhFixbUsmVLUlVVJQBlbpqamrR69WqBTbRjhHAVhDCbzaYuXbpU/FVnEAiMR5g/GRkZ1LVrV4HV1ahRI7p+/bpA6ouNjSVVVVXq06dPjentiI6OJh0dHVqyZEmx5VQFyYsXL0hPT49Onz4ttDYqys2bN8nExIScnJwoMTFRZO1+/PiRRo8eTXp6erRz585iD2kFe4EBUP/+/Xl/m9zcXOrSpQvNnz9fZPFWlMjISKpXrx4v5g8fPpC3tzdFRUVVqB7GI1z9+PjxIykrK1OLFi14I2jVkfT0dHr06BGdPHmSVqxYQWPGjKFGjRqRjIxMqULXzMyMbGxsqEmTJmRoaEjNmjUjOzs78vb2pqFDhxYqO2zYMLp+/XqVvkcYIVwFIZySkkImJiYC9WAylB/GI8yf4OBggfVOLl68mP7880+B1JXPkydPRDakLmw4HA517tyZtmzZQjo6OgLPA1uUyMhI0tbWplu3bgm1nYqQlZVFCxYsIC0tLQoICBBpSsl79+6RnZ0dWVhY8HzLb9++pW7dupGenh7VqVOHPD09Cwllb29v6tWrl0hSwlWF4cOHk5eXF82ePZs0NDTI1NSUlixZUqE6GI9w9cTBwYEaNGhAqqqqQn24FjTJyck0c+ZMql+/PsnLy1OLFi2oW7du1LRpU2rUqBH98ccf5OTkRFJSUmRra0uBgYFlTr6NiYmhBQsWkIODA9nY2FCjRo2oTp06PEHctGlT8vPzq9TkQkYIV0EIExEdPHiQevfuTba2ttSzZ086cOBABf8EDJWF8Qjzx9PTUyC9QO/fvycNDQ16+/Zt1YOqoRS0jSxfvlwkX1oXLlwgHR0difNXx8TEkK2tLXXo0IGePXsmsnY5HA4dPnyYGjZsSD179iQtLS1yd3cnbW1tWrFiRaEeo8DAQGrcuHG1mJEfHx9PampqNGHCBEpMTKQ9e/ZUOK0W4xGungQHB5OysjIBIHV1dTp//rxEj6AlJibStGnTSF1dnaZMmUKxsbG0f/9+srW1JXt7e5o9ezZZW1tT/fr1ycfHh3x8fCptb2Cz2XT+/Hnq1asX1a1bt1Av8ciRIyksLKzcrxUjhKsohAsSHx9Pzs7OEjOZhaF207VrV4GkuHJ1dZXo4WNxk56eTg0bNhRLPvHAwECqX7++xI1Ksdls2rx5M2lpadHChQsLZQkRNunp6RQQEEBPnz6lly9fUvfu3UlXV5d8fHwoMTGRHj16RFpaWhQdHS2ymKpKwd71iIgIKu07iKHm8fbtWxoxYgRP5DVv3rzKk3EFTXx8PE2aNInU1dXJ29ubYmNjadKkSWRlZUVOTk40bNgwqlu3Lg0cOJBCQ0OFMgrz+PFj0tXVLWax2LRpU5kjj4wQFqAQJuJ+YDErzYkGxiPMH0FkjLhz5w4ZGBhUq2E5URMUFES6urr06dMnIiJau3atSF+vDRs2kLGxsUSs0FSU9+/f04ABA6hFixZitXE8e/aMJk+eTOrq6qShoUEHDx4UWyxVJTU1lZSVlSvUM8h4hKs/T548oZ49e/JEXteuXXk5sPmRl5dH4eHh9M8//1Dr1q3Jzc2Nfv36JZCYXr9+Te7u7qShoUFz5syh8+fPU48ePcjKyopcXFyoefPmZGJiQmvWrOF9PhZEkHmEY2JiaODAgfTt2zdau3YtGRkZ8V4reXl5GjNmDEVERJT4vmGEsICFMBE3of7cuXP5lmGoOoxHuHQ4HE6VM0aw2Wyytram/fv3CyiqmgmHwyEfHx8yMjKiZ8+eicQjXJQFCxaQnp4eLVmyRCIS1BeEw+HQiRMnSF9fnyZOnEipqaliiyU1NbVGLFtbr149SkhIKHd5xiNcc7hz5w61bt260GSxoiNCycnJtG/fPnJxcfI5dpsAACAASURBVCk2EU1eXp5MTU0pLi6u0jHExsbSqFGjSFNTk+bNm0eLFy8ma2trsrW1pe7du5OamhqNHTuWbt++zfeBTZB5hP/++2/at28fb5/NZtPZs2d5Dw9SUlIkIyNDbdq0oS1btlBaWholJSXR1KlTGSFcma08w1Jt2rQRyApIDKXDeIRLJy4ujpycnKpUx969e8nGxoYZ3Sgne/bsIR0dHXJ3dxdLD3pMTAyNHTuW1NXVadKkSVX6ohMG379/Jw8PDzIwMBBpqrWaiL29fYUW22A8wjULDodD586dIz09PZ7A9fT0pPnz55OOjk4x8du/f3/atWsXHT58mFRVVUlOTo40NTUrnHkmJiaGXFxcSEtLi2bOnEmDBg2iVq1aUceOHUlPT4/at29PO3bsKPfCNPl5hAVB165dS12R88WLFzR16lRSU1MjZWVl0tDQIDU1NTIwMKAlS5ZIrBBmEREkFSsrK7p//z7fMtu3b8eTJ0+wadMmEUXFwPB//Pz8wGazMXPmzEpd//PnT5iYmODUqVOwsbHhWzYrKwtpaWn4+fMnfv78ibS0NPz69Qu/fv1Ceno60tPTkZGRARMTEwwYMKBS8VQXrl69imHDhmHVqlVwc3MTSwzJycnYvHkztm3bBjs7O8yYMQMdO3YEi8USSzxFuXnzJjw8PNCiRQv4+/vDwMBA3CFVOyZPnowWLVrgr7/+EncoDGKEw+Hg+PHjGDVqFHJycnjHDQ0N4e7ujkGDBsHY2LjQe//t27fo06cPXr9+DXl5eUybNg2+vr6oU6dOqe1ER0dj6dKlCAsLQ69evRAbG4u0tDTIyMjg48ePGDlyJMaNG4eWLVsK9X750alTJ9y6dYtvmZ8/f+LAgQPw9/fHp0+f0L17d+zatQsqKipRRGQlolDLTbUXwr/LISwsDPLy8iKIqvYRERGBtLQ09OjRQ9yhSByDBg3CkiVLYGpqWqnr582bh8TEROzfv7/E83l5eejUqRNkZWUhLS0NOTk5yMvL8zYlJSUoKChAUVGRt0VGRuL169fYvXs3jI2Nq3J7Es2cOXNw9OhRuLm5wdfXV2wCND09Hfv27YOfnx/U1dUxc+ZMDBw4ENLS0mKJpyBZWVlYtmwZtmzZgsWLF2PChAmQkpISd1jVhk2bNmHnzp1YvXp1uT7/oqOjkZCQUOMfRGsrubm5OHXqFHR1ddG5c+cy30uZmZkYO3Ysjh8/DhUVFdjY2CAwMBAaGhqFyt27dw9LlixBZGQkTE1NkZSUBCLCp0+fYGNjg3HjxmHAgAGQk5OrVNybN2+Gi4sLNDU1K3V9Pqmpqfjzzz9x+fLlcpUnIly9ehV+fn748eMHwsLCJFIIi71Lmt9W3hm7w4cPpzNnzpSrLEPFYTzCpdOxY8dKp9l5/fo1aWho8F0YwcHBgQIDAytc96tXr6hz587k6upK2dnZlYpP0tHR0aEnT56Qubk5jR07VtzhUF5eHgUFBVHHjh3J0NCQ/Pz8yj10KWxiYmLIzs6O7OzsyjXxh4HLxYsXCQApKSmVK0Ud4xFmKAqHw6HNmzeTtLQ0qampkZGRET148ICIuLbDXr16kY6ODjVv3pwaNmxI9evXp/r165Ovry/Fx8cLJAZBeYQDAgJo0aJFFb4uNzeXmjRpIrHWCLEHwG8rjxDOzMxkUtwIGcYjXDqlTZRLS0sr07s+cOBAWrp0aannBw8eTGvWrKlSfEeOHCFzc3PasmVLleqRNDgcDo0fP54GDBhAGhoatGDBAnGHVIi7d+/SkCFDeEsTv3//XtwhFUq19s8//4g01Vp1JSEhgQDQpEmTyNTUtNQsANnZ2ZSVlcV4hBlKJTIykpSUlEhJSYnU1dXJ1taW1NXVSVNTk/T09EhJSYmGDBlCFy5cEHjaM0F5hPv27Utv3ryp1LV5eXmMEK7MVh6BO3r0aDp69GiZ5RgYBE1GRgbVr1+fXF1dydHRkTp37szb9PT06L///iv12qtXr5KhoSFlZGSUeN7T05O8vb0FEiebzaZJkyaRjY0NPXr0SCB1iouMjAzatWsXmZubk7GxMW3evFmiU869ffuWvLy8SF1dnVxdXXk9QeIkMTGRnJycyNjYWCw5masTHA6HlJSUKDMzk9zc3GjkyJG8EaDc3Fy6ePEijRs3jpfXlYGBHykpKdSsWTOSlpYmBQUFUlFRIVNTU4FOZhMmVc2QxAhhIQjh79+/U7t27fiWYag6TB7hkmGz2RQQEEB37twplki8S5cupS6ykZubS61bt6bjx4+XeH7ZsmU0bNgwgcf7/v17sre3p0GDBpU661dSef/+Pc2bN4+0tbWpT58+dP78eVqzZo1Ei+CCfP/+nVatWkUGBgZkb29PZ8+eFXuWkFOnTpG+vj6dOHFCrHFUF9LT08nMzIzmz59PkyZNIh0dHbK2tqY1a9ZQ8+bN6ezZs0weYYYyycvLIx8fH5owYQLdvXtXJCvYCSKPMJvNrrQQ5nA49O3bN0YIV2YrSwgPHjyYzp8/z7cMQ9VhPMIVh98HxpYtW6hLly4lfgDu3buXevToIczQ6PTp09SmTRtavXq1UNupKhwOh27fvk1Dhw4ldXV1+uuvvwr53MSRR7iqZGdn04EDB6hNmzbUokUL2rFjh0BWJawsfn5+5OnpKbb2qxuxsbHUs2dPWrZsGb169YqIuPYJDQ0Nys7OZjzCDBKJIDzCFy9eJHd393KV5XA4FBcXR9u3b6fhw4eTgYEB9erVS2KFcLWdPpycnIwPHz6gZ8+e4g6lxmNjYwNHR0dxh1FtyMnJKXU28ffv37Fw4UKsX7++WJaDCxcuYOvWrTh37pxQ4+vfvz+ioqKQnJwMa2trhIeHC7W9ipKdnY0DBw6gXbt2GDVqFGxtbfH27Vts3LgRzZs355Xz9vaGkpKSGCOtOLKyshgxYgQePHgAf39/BAUFwdDQEIsXL0ZKSorI4zE1NcWzZ89E3m51xdjYGOfPn8fcuXPRpEkTAMDx48fh5OQEWVlZmJubo3///mKOkoGhMJMnTy6WqaKiPHv2DLKysmWWu3HjBoyMjGBvb4+bN2+iW7duuHHjBkJDQ6vUvlARtxLnt/HrEXZycqI7d+6U8VzCwCB6goODS+1l8/LyIg8Pj2LHHz58SObm5iLvHUxJSaGePXtSv379ylwnXtgkJSXRwoULSU9Pj7p3705nzpwR+KQRSeTp06fk7u5OampqNGHCBJH2cr9//550dXVF1l5NpF27dszIJEOtoF+/frRp06ZSz+/evZu0tbXp3LlzhUY8c3Nz6e7duxLbI1xt8wh36dIFN27cEHFEtRMmj3DFGD9+PFxcXODg4FDoeGxsLDp16oSnT59CR0eHdzwhIQF9+/bFtWvXoKWlJepwAQDXrl3DzJkz0a9fPyxatEjk7W/YsAG+vr4YOnQopk6dWq68zOvWrYOHhweUlZVFEKHw+fTpE6ZPnw51dXX4+/uLpE0iQt26dfHu3bsq9xiVhwcPHuDAgQNQVVWFqqoqVFRUeL+XdExGRkboMVWFd+/ewdraGh8/foSMjAyTR5hBIhFUHmEOhwNHR0eMGTMGI0aMKHR83rx5OHHiBM6ePQsTExPeubi4OIwaNQpaWloICQmRyDzC1dYawSA6wsPDhT5cX5OIjY2Fvb19sePTp0/H3LlzC4ng1NRU9OvXD//995/YRDAA2NvbIyoqCnXq1MG///4r8vYvXbqEPXv2YOvWreVenGTlypVIT08XcmSiQ1dXF4sXL8axY8eQm5srkjZZLBZMTU3x/PlzkbW3detWxMTE4MOHD7h37x6CgoKwadMm/P333xgxYgTs7e3RvHlzKCoqQkFBAbq6ujAzM5PIv/WxY8f+x96Zx1OV/3/8dS2Jos1ItCBSCGGotGBS2qaihqLVqIampE3fJi1TM0klqUyrVlNTDSkpLVS2ZEkk2kSoKLKU/X5+fzT8Ei7uds7VeT4e96F77jnvz+ve7vI+n/P6vN+wtrauT9gTExMRFBREsSoGhob4+Pjg/fv3PMcRExPD9evXsX//fgQHBwP43FDIxsYG0dHRiI2NrU+CCSHYt28fhg8fDnt7+/r96Qj1rY8YaI+JiUm77lAmCL72CF+5cgXPnz9v8CNZVVWFH374AYcOHar3G1KNh4eHQOMXFxcjJyenUYvQyspKyMjItCmWKHqEW6J///5QU1PDjRs3MH78eKGMqaWlhUePHsHU1FTgYw0ZMgTHjh3DmjVrsH//fvTs2bPZfQkhqKioQFRUFJycnNr8/hAGkpKSiImJQV5eHpSUlKCnp4du3bpRLYuBoQH88AjXISYmhoiICAwfPhzV1dXYunUrdHV1cebMmfrOd7m5uZg/fz4+fPiAyMjIBjPEdISZEWZokeHDh2PChAlUyxAJysrKGi0oqKqqgpubG3bt2tXgsWnTpmHDhg0wMTERtkxKIIRg1qxZ2L17d6PHqqqqWrUQ40vc3d3bjS3iS+zt7REQECC08YQ5IwwAtra2mDdvHqZNm4aKiopm92OxWJCWlkZkZCSsra0pa6HNCVdXV8yaNQvDhw9Heno6DA0NMW3aNKplMTA0wNXVla9XHDt06ABvb2/Y2dlhzJgx8Pf3h5SUFAgh+PvvvzFkyBCMGDEC0dHRtE+CASYRZmgFsbGxCAsLo1qGSPDgwQN87bvft28fVFVVG51MlJSUfFNewj179uDKlSvQ19dv9FhVVVX9bEJr2bVrF8rKyvgljzb89NNPuHTpEj59+iSU8epmhIWJh4cH+vTpAycnp0afl6+5cOECrK2thaSsbbBYLLi7u2Pjxo0wMzPDiRMnaH0JmOHbZN++fXyxRtTx77//Yvz48VBVVcVvv/0GFouF9+/fw87ODps3b8aVK1fg4eEBCQnRMB2IZCJcUFDQ7i6J0hnGI9x6RowYgVGjRmHs2LGoqalBeXk5tm7dil27djWY0crMzETXrl0pVCpckpKSsGXLFnz33XcwMDBo9Dg3M8LtzSNcR8+ePWFiYoJLly4JZTxhzwgDny+v+vv7Iz09Hdu2bWt2v2fPnuHdu3cYNmyYENW1nXnz5sHf3x8uLi7w9fWlWg4DQwP45REmhOCPP/6Ag4MDRo8ejfT0dMjJySE0NBS6urpQUlJCYmIijIxotx6OIyKZCGdkZEBRUZFqGd8MTB3htrFx40Y4OjrCxMQE9+7dQ8+ePTFo0KAG+5w8efKbsZuUlZXBzs4OO3bsQFlZGXR1dRvtU1lZ2eZEuD16hOuYNWuW0OwRffv2RVFREYqLi4UyXh0yMjK4ePEi9u/fj3///bfJfSQlJVFTUwM2my1Ubdwwfvx4TJo0CSkpKVRLYWBoAD88wlVVVbCzs8OWLVuwceNGhISE4NOnT1i8eDEWL16MkydPwtvbG9LS0nxSLTxEY976K54/fw5lZWWqZXwzDB8+nGoJIoetrS0GDBiAKVOmNGgCUcedO3dw/vx5CpQJn2XLlmHYsGHQ19eHiopKk8krN9YId3d3fkmkHdOmTcPSpUtRWFgo8LJmYmJiGDhwINLS0oQ+86qkpISgoCBYWVlBVVUVQ4YMafB4v379oKKigtu3bzcqR0gn2Gw23N3dkZiYiKioKKrlMDA0wNXVlafj3717BwsLC2RlZSEiIgLGxsaIjo7GnDlzMGLECDx8+BBdunThk1rhI5IzwllZWejbty/VMr4ZGI8wdwwZMgR2dnZ49uwZ7Ozs8GVN7MrKym/CGnHmzBncvXsXvr6+SExMbNIWAXBnjWivHmEAkJOTw7hx44R2skSFPaIOQ0ND+Pn5YcqUKXj9+nWjx6dPn077k0YnJydERUXhwIEDQvdbMzC0BC8e4fT0dGhoaKC4uBi5ubnQ09PD2rVrYW1tDS8vLxw7dkykk2BARBPh3NxcqKmpUS3jm4HxCHNPTk4ONm/ejGXLlmH79u0YPnw4Jk6cCHFxcaqlCZzMzEz8+uuv+PvvvyErK8v3RLi9eYSTk5OxZs0aJCYm1lfYEJY9Qltbm9JWy9OnT8fChQsxdepUlJeXN3jMxsYGgYGBqK2tpUhdy6ipqeHt27e4d+8eU0eYgXZw6xG+cuUKdHV1YWRkhKysLGRmZsLY2BiPHj1CcnJyu6mQIpLWiNevX0NDQ4NqGd8MTB1h7snIyMCyZctgYmJSf9k5MzNTJDyPvFBdXY1Zs2Zh7dq1MDQ0BPC52YCNjU2T+zMeYWDlypXo3LkzbGxsICMjgxkzZiAmJgavXr1Cnz59BDq2lpYW9u/fL9AxWmLdunVIS0vDggULEBAQUL+4VF1dHYqKioiKisKoUaMo1dgc69atQ/fu3eHh4dGuLTsMoklrPMJsNhvp6emIiopCZGQkwsPD8fr1a6xfvx7Dhw/HvHnzEBISAk9PT8yfP5+W5Qy5RSRbLI8ePRrh4eGNmhYwMNAJQghkZWWRk5PzTdggvmTdunVITExESEgIxMTEUFtbiy5dujT7WsjKyiIvLw+ysrIUqKWeyMhIzJ49GxkZGZCUlER0dDROnTqFs2fPYu/evZg1a5ZAx3/+/Dl++OEHvHz5UqDjtER5eTnMzc0xceJErF+/vn7777//jnfv3sHHx4dCdS1z/vx5ODs748yZM7CwsKBaDgNDs1RUVCA+Pr4+8Y2OjkbXrl1hamoKSUlJ3LhxA5aWlrhy5Qp69eoFBwcHzJo1i2MTnJZgsVhMi2V+wiTBwoPxCHNHbm4uOnfuTHkSHBMTI/COcV9y69Yt+Pv749ixY/Wf0ydPnkBRUbHBa/HlSfi37hH+/fffsW7dOnTo0AEsFgumpqbw8/NDQUEBZs6cKfDxVVRUkJ+fT/nrKS0tjaCgIBw+fBjnzp2r3z59+nRcuHBBaK2nuUVdXR1Lly6FnZ0d/vnnH6rlMDAA+OwRfvLkCYKDg7F69WqYmpqiR48eWL58OV6/fo25c+ciNTUVt27dQkZGBv755x8QQqCoqIibN28iISEBy5cv5ykJpjMiaY1gEC4xMTHIzs7G2LFjqZYiEpSVleHs2bM4cOAALeqfrlmzBmfOnBHKWO/evcOcOXNw7NixBl+aX/uD//33X1y+fBlHjx5FWVkZ2Gw2JCUl2zSWp6cn7O3t20V3uZqaGlRVVTXaLiwvubi4ODQ1NZGWlgZjY2OhjNkcioqKuHjxIiwtLaGqqgojIyMMGjQIxsbG6NevHxwdHbFw4UKB20W4ITExES9evEBYWBgmTpyI/Px8LFmyhGpZDN8ohBAcOXIErq6uYLFY6NWrFxQVFdGzZ0/89NNPEBMTw5s3b7Bjxw44OzujuLgY3bp1g66uLrp06YL79+8jNjYWNTU1qK2t5emvMFq4cwuTCDO0COMRbhlCCOLi4nD48GGcP38eo0ePhoeHB6ysrCjVFR8fD1lZWSgpKQl8LEII5s+fj1mzZjU6aUpKSmqQCO/du7fe53/y5ElMnjy5zVd52pNHePfu3bCwsICNjQ1lsy51lSOoToQBQF9fHwcPHsSMGTPw4sULsFgs/Pvvv3j06BEOHDgAfX19mJqaYuXKlQ18w+/fv0dYWBimTZuGjh07Cl23np4eunXrBn19fURGRmLcuHF48+YNfv/993blqWSgP4WFhXByckJsbCykpKSwZMkSKCgoQEJCot4PHBcXh/T0dOjo6GD27NkwMDCAtLQ0xMXFISEhwde/kpKSbZ7sEBqEENreDA0NSVOMGjWqye0MDFQQEBBAdHR0SP/+/cmff/5J8vLyqJZUz+jRo0lWVpZAYrPZbJKenk6OHDlCFixYQDQ0NMjQoUNJZWVlo33Nzc3JtWvXCCGEPH36lAAgmzZtImw2m2hpaZFbt24JRKMosWLFCjJnzhzKxt+yZQtZtWoVZeN/DZvNJj169CBv3rxp9FhZWRmxs7Mj48aNIxUVFeTff/8lU6dOJZKSkqRbt26kuLiYAsWNefv2LTEyMiKOjo6kurqaajkM3wjh4eGkT58+RE9Pj2hpaZGsrCxSW1tLIiIiiJOTE+nevTsxNzcnhw8fJkVFRULTBSCe0CC3/PrGzAgztEhsbCxKSkoYa0QT5ObmwsXFBefPn4e5uTmtZn0ePnwIaWlpvtXcrqmpwf379xEZGYmoqChER0dDWloapqamGDFiBJYuXQodHZ1Gl/MJIUhMTKxvlnDkyBEAgLKyMsLDw8FisWBmZtZmPbt27cLChQvbhTUC+NyRcNCgQbh9+zZGjx4t9PG1tLRw9OhRoY/bHCwWC9ra2khNTW00S15TU4ObN29CU1MTysrK0NHRwaxZs/Do0SO4u7tDTk6OEs0PHjxAdnY2fvzxRwCAgoICwsPDYWFhgXPnzgnF783w7VJdXY0NGzbA398fffr0QdeuXbF582b8/PPPePToEXr06AEHBwc8ePCAltYiqhC5FWefPn2ChASTvwsTpo5w8+zYsQPz58+HhYUFrZJg4HM3IX6WxPL29oa9vT2ys7Mxc+ZMJCYmIisrCwEBAXB2doaenl6TntbMzEzIycnhu+++Q3V1NY4dO4bevXtDWVkZvr6+WLJkCVevXXurI9y5c2fs3r0bzs7OlCwKo7qWcFPo6OggNTW10faIiAjIy8vDysoK8fHxiIiIwMePH9G7d2/Mnz+fAqWfSUxMbFRHuHPnzpg3bx6z4JhBoDx79gwjRoxAbGws5OTkwGKxkJ+fj+nTpyM+Ph5+fn54+PAhVq9ezSTBXyFyifDTp0+hoKBAtYxvChMTE1haWlItg3bk5+fj+PHjWLFiRav2J4QgOjoaLi4uUFNTQ3BwsMC0PXr0CJKSklBVVeVbzJcvX8LNzQ2+vr6wtbVF7969W3Xclwvlrly5AjU1NcjJyaGmpgZ37tyBg4MDV3rak0e4Dmtra/Tt2xe7d+8W+thqamp4/fo1Pn36JPSxm0NHR6fJTm1TpkxBWloa1q1bBxUVFbx8+RJbt27FgQMHKD0h1dPTw+TJkxttt7S0xPXr1+srpdTW1uLkyZOoqakRtkSGdgYhBCdOnIC2tjZKSkoQHR2N7OxsaGtrw9vbG1lZWfDw8MDw4cOplkpbRC4RfvbsmVAW/jD8P8OHD8eECROolkE7du/eDTs7uxbfjy9evICHhwfU1dXh6OgIJSUl7NixAz///DOeP38uEG3Lli3D3r17+RqzsLCwxaLsTfFlInz48GE4OTkhLy8PwcHBmDt3LtfWBnd393Zji6iDxWLB19cXnp6eePXqlVDHlpCQgLq6OtLT04U6LifqrBGcIITgl19+gZubG+WNlgYPHoyqqipYWlri1KlT9dvV1dUhISGB9PR0lJWVYerUqZgzZw7tZuAZRIvCwkJ06dIFc+fORVVVFV68eIFffvkFhYWFOHr0KMzNzSEuLg5XV1fIy8tTLZe2iFwi/PLlS755HhlaB1NHuDFFRUU4cOAAVq9ezXG/Z8+eYejQoSgtLcW5c+fqZ7Gsra2xYcMG2NjYNGopyysZGRkAwPek4P379+jRo0ebj+vUqRNev36NnJwcREVFYeLEiSgpKUFgYCCcnZ251tOe6gh/ibq6On799VcsW7ZM6GNra2s3OQNLFXV66mZSm+LMmTPIycnBqlWrhKisIZmZmVi7di169eqFrVu3YsyYMVi3bl19STwWi4UxY8bgxIkTGD16NBQUFDB27FhkZmZSpplBtLl79y569OiB0tJS2NjY1PvRvb29IS0t3WDfffv2cdVi+VtB5BLh7OxsqKioUC3jm4LxCDfG19cXP/74I8f3Yt3Mz6ZNm+Dt7Q0DA4MGl22dnZ2hpaUFFxcXvmr79ddfBdKBi9sZ4Xnz5tV3SPvpp5/w4cMHsNlsGBsbQ11dnWs97c0j/CVr1qzB/fv38fDhQ6GOq6WlRatEuEePHpCRkUFOTk6TjxcWFsLNzQ2HDx+mrDTTsmXL8P3336OyshJubm4wMjLCmjVroKWlBX9///r9LC0tsW3bNlhbW+Pw4cPQ1NRkEmGGNlNTU4ONGzfWlw1cunQpUlJSEB0d3az9wcfHh0mEOSByq87y8vJ4+vFkaDtMHeGGlJaWwtfXF1FRUc3uQ/6rqWtiYoLFixc3uQ+LxcLBgwdhYmKCI0eOwNHRkWdtz58/R01NDbS1tXmO9TXcJsLKysoYNWoUtm/fjvv37yM3NxfA54SdF9qjR7iOjh071i8uFCZaWlo4ceKEUMdsiTqfcFMLfFatWoUZM2bAxMSkfltFRQVSU1ORk5ODqVOnClyfsrIyjI2NsXPnTiQmJiI7OxsAsGHDBtja2mL+/Pno0KEDpk2bhpiYGAwdOhQAoKqqihcvXghcH0P7ISsrC7NmzUJ0dDRUVVUxePBgJCcnIyYmhuN3s7OzM1ff3d8MVNdv43Rrqo6wubl5k3VKGRiEhaenJ7Gzs+O4z7Zt24ixsTEpLy9vMd6DBw9Ip06dCJvN5lnbuHHjSHJyMs9xmqJLly5c15y8efMmMTMzI2w2m5w+fZpoaGiQ2tpaPitsXwwYMIA8fvxYqGM+fvyY9O/fX6hjtoSrqyvx8vJqtP3WrVtEXl6ehIaGkj179pB58+YRPT09Ii0tTQYNGkTExcWFUru3srKSDBo0iAQGBjZ6bNy4cWTdunUkISGBvH37tsF7PjAwkEyaNEng+hjaBzdv3iTy8vIEANHX1ycGBgbEwcGBVFRUUC2t1YCmdYRFzhrRqVOndukLpDOMR/j/KS8vh7e3N/73v/81u8+1a9fg4+ODCxcutKq71YsXL2BsbMzzaveamhrIyclBV1eXpzhN8f79e5SVlXFdn9XCwgK3bt0Ci8XCsGHDcPTo0TZ3kvua9uoRruPjx49Cn/Hu378/cnNz+e5b54XmFsxt3LgRpaWl8PDwwKNHjzB06FAcOnQI79+/R2BgIFRVVYVSarNDhw7Yu3cvXF1dERMT06AazI4dO/DgwQMsWLAA2trakJaWhqqqKkaM9YrviAAAIABJREFUGIE9e/Yw1giGVpGeng47Ozuoq6tj0KBBeP/+PSZPnowTJ05ASkqqxeMZj3ALUJ2Jc7o1NSOcnJxMBg8eTNLT01t5DsLAK7t27SKurq5Uy6AFe/bsIVOmTGn28WfPnhEFBQVy+/btVsecPn06OXToED/k8ZWamhpy7do1YmtrS7p06UJcXFyoltQABQWFJruOtRe6du1K3r9/L/RxtbW1SVJSktDHbY6YmBhiZGTUaHtxcTGpqqpq8pjg4GAyYcKEZmOy2WwSHh7O16sSdnZ2ZOLEiWT+/PnN7vPp0yfy7Nkzcvv2bXL69Gly8eJFvo3P0D4pKCgg/fv3J6qqqkRFRYX06NGDnDx5sk0xNDQ0SEZGhoAUth7QdEaYcgGcbs21WH716hXR1dUlN2/ebMVLz8ArUVFRJCQkhGoZlMNms4mKigqJjY1t8vGysjIyePBg4uvr2+qYxcXFRE5OjhQWFvJLJs9kZWWR3377jfTu3ZsYGhqSffv20UpfHX/++ScpLS2lWobAkJSUpOSy508//UROnTol9HGbo7i4mHTq1KlNSeuOHTuaPXl//vw5sbCwIGJiYnz9XsvJySFdunQhe/fu5VtMhm+byspKMmrUKCIhIUEUFRWJvLw8iYiIaHMcb29vUlBQIACFbYOuibDIWSMAoHfv3oiJicG6devq27UyCA6mjvBn0tLSQAiBsbFxo8cIIXB0dISBgUGbqkAEBQXBzMwM3bp146dUnnBwcEBOTg5CQkIQHx8PZ2dnWumroz3WEa6juroabDYbHTp0EPrYWlpatKpvKycnhx49euDly5etPiYjIwMDBgxosI3NZmPPnj0wNjbG+PHj4efnBz8/P77pVFZWhoeHh0Ab5TB8OxBCsHjxYty5cwedO3eGlJQUoqKiuGq/ztQR5oxIJsIAICMjg6ioKAQGBmLt2rVUy2nXMB7hz4SGhmL8+PFNenl37tyJZ8+ewc/Pr01e37///hszZ87kp0ye+fTpE1xcXATiNeYn7dkjXOcPpqJLmii1Wm6OJ0+eNEiEnzx5glGjRuHcuXOIjo7GypUrYW9vj+joaGRlZfFNp4aGBmJiYj5fbmVg4AEvLy/4+/tDRkYG6urqiI+Pb3Ry11oYjzBnRDYRBgAxMTFcvnwZRUVFsLe3p1pOu4WpI/yZq1evwsrKqtH2GzduYOfOnfj3338bFTLnREFBAWJiYppsyUolbDab54VswqA91xGmYqFcHXSrJQy0vdFHXSJcU1MDLy8vmJqaws7ODrdv365PJjp16gQHBwccOnSIbzpPnjyJXr16UdrmmUH0CQoKgru7Ozp06ABzc3PcvXuXpxldpo4wZ+j/a9cK/vrrL+jp6cHc3Jzp3S4ATExMYGlpSbUMSikrK8O9e/dgYWHRYHtmZiYcHBwQEBDQ5o6H586dw8SJE2lXC5cQIhI/5O25jjCVibCGhgZevXqFiooKSsZvioEDB7Y6ES4tLcWHDx/w4cMHDB8+HFevXkVcXByWLFnS6ARv8eLFOHLkSH0HOF5JSUnBrFmz+BKL4dskKSkJs2bNgpiYGBwdHXHp0qVWVR/iBFNHmDPtIhEGgNWrV2PJkiUwMjJCdHQ01XLaFYxHGAgPD8f3338PWVnZ+m2fPn2CtbU13N3dYW5u3uaYAQEBtPzRZLPZIpEIt2ePMJWJsKSkJNTU1OpbdVMNm83GiRMnGjTN4MTTp09RW1sLCwsLODk54caNG1BVVW1y30GDBuH777+HiYkJDh48yJPV5tmzZygsLMS6deu4jsHwbZOXl4exY8eioqICmzdvxv79+/nyXcx4hDnTbhJhALCxscGNGzewdetWWFlZ4e3bt1RLahcwHuHPtogvk11CCBYuXAhtbW0sW7aszfGysrKQnp5Oy5l2QohIWCO+BY8wVdDJHuHv749Pnz7B2dm5Vft37NgRM2bMQGJiIpycnFpMJIKCguDp6YnQ0FD07dsXS5YsaZMfuY5z585h9OjRuHLlSpuPZWD49OkTTE1N8f79exw4cIBjrfq2wniEOUP/X7s2Ii8vj5CQEGzevBlTpkzB4sWLGbsEjzAe4c+LdXbv3o1Vq1ahsLAQPj4+ePToEQ4ePMjVGfuZM2cwffp0SqoCtISoWCMYj7DgoMuCuTdv3mDt2rU4dOgQxMXFW3WMlpYWTp061WRL5qYQExPD2LFjERgYiIcPH0JeXh7jxo3DyJEjERAQgMrKylbFOXv2LFRVVREUFNSq/RkY6qipqYGhoSGysrJw9uxZODk58TU+4xHmTLtLhOswNjZGbGwsjIyMYGhoiIMHD1ItSWRhPMLAL7/8gpSUFJSUlGDAgAHYtm0bAgMDISMjw1U8OlaLqENUFssxHmHB0dbFaYLC1dUVjo6O0NPTE8p4vXv3xsaNG/Hy5UssX74cx44dQ9++fbFmzRq8ePGi2eMyMjKQn58PGxsb2i1+ZaA3FRUV0NPTw5MnTxAcHIwZM2bwfQzGI8wZ+v/a8cjPP/+MhIQEJCUlwcTEBPfu3aNaksjBeIQ/o6SkhAMHDiAmJgY3btyAiooKV3HS0tLw7t07jBw5kr8C+YSozAgzHmHBQYdawnV1rD08PIQ+tqSkJKytrREWFobIyEiw2WyYmJjAysoKFy9ebHSV8ezZs5gxYwaMjY0xbdo0oetlEE0KCgowePBgZGRkIDQ0FJMmTRLIOIxHmDPtPhEGAAkJCfj5+eHSpUvYuHEjxo8fj/z8fKpliQyMR7ghGhoa0NHR4fr4v//+G3Z2drSddRWVRJjxCAsODQ0NZGdnU1Y5orS0FM7Ozjhw4ECbShIKAg0NDXh5eeHVq1ewt7fH9u3boaqqis2bNyMvLw/A50TY1tYWDx48YBpqMLTImzdv0L9/f2hqauLVq1e4fPkyxo4dK7DxGI8wZ+j5SywgFBQUEBoaCg8PD0yaNAm//PIL4x9uBYxHmH8QQhAQEEBbWwQgOtYIxiMsODp06ABVVVXKKkesX78e5ubm+OGHHygZvyk6duyI2bNnIyoqCpcvX8br16+ho6OD8ePHo6SkBEOHDkViYiLjEWbgSH5+PkxMTJCTk4Py8nIcPXq0yfr0/ITxCHOG/r92AmDYsGGIi4uDvr4+jIyMcPjwYaol0RrGI8w/7t+/DwkJCRgYGFAtpVlEZUaY8QgLFqoWzMXFxeHs2bPYuXOn0MduLXp6evDz80NWVhamTJkCLy8viImJQU9Pj/EIMzRLQUEBDAwM8O7dO1y7dg2urq4IDAwU+LiMR5gz32QiXMeiRYsQHx+PhIQExj/MAcYjzD/qZoPpnGiKSvm09u4R5nYhJr+gwidcXV0NJycn7Ny5Ez169BDq2NwgKyuLxYsXw87ODgBgaGjIeIQZmqSgoAA6Ojr4+PEjEhISYGxsjIiICGhoaAh8bMYjzBn6/9oJmDr/8MWLF3H06FEsWLCAakm0g/EI84fa2lqcPXuW1rYIQHQaajAeYcFCReWInTt3olevXrT/jDQH4xFmaIrc3FwMGDAAkpKSePLkCdTV1WFrawsNDQ1s2bJF4OMzHmHOfPOJcB2Kioo4cOAAlJWVMXnyZLDZbKol0QbGI8wfIiIioKSkBE1NTaqlcERUrBGMR1iwCDsRfvbsGXbs2AE/Pz+ReP81BeMRZvgSNpuNK1euQFNTE7169cLTp08hLy+PRYsWoaamBkeOHBHK1TfGI8wZCaoF0I3ff/8d+/fvh5mZGW7dugUJCeYlMjExoX3yJgr8/ffftGyp/CWEEFRVVYlEIsJ4hAWLhoYGsrKyUFFRgY4dOwp0LEIIFi1ahLVr1zbbDlkU0NPTQ7du3aiWwUAhtbW1iI6OxoULF3DmzBkUFhbCzMwMV69exbt372Bra4t3794hLCwMkpKSQtHEeIQ5w8wIN4GzszOWLVuGoUOHoqSkhGo5lMN4hHmnsrISgYGBsLW1pVoKR86cOYPu3bu3uisXlbR3jzDViXCHDh2gpqaGJ0+eCHys48ePo7i4mKt25XSC8Qh/m9TU1CA8PBwuLi7o3bs3lixZgqKiIlRVVeHIkSMICwtDaGgo9PX1oa2tjYiICKF+dzEeYc4wiXAz2NjYwMfHByNGjKivFfmtwniEeSc8PBwDBw5E7969qZbSLIWFhXBzc8PBgwdF4kpIe/QI5+bm4ueff8b9+/ehpaVFtRxoaWkJ3B6Rn5+PNWvW4NChQyLxvuME4xH+dqiurkZYWBgWLVoEJSUlrFy5Er1798bt27fh4uKCa9eu4eLFi7CxsYGzszNcXFxw5swZ/Pnnn+jQoYNQtTIeYc4wiTAHTE1Nce7cOYwbN44W7UapgvEI8468vDyKi4v5Fq+qqopvsepYs2YNrK2tMXToUL7HFgTtySNcUlKC3377Dbq6upCXl8eTJ0/Qv39/qmUJxSe8fPlyzJkzB0OGDBHoOMKA8Qi3byorK3HlyhUsWLAAvXr1goeHBzQ0NHDv3j0kJCTUn9Dt2LEDd+/ehYyMDAwMDFBaWork5GSMGjWKEt2MR5gzon36LQQ0NTVx/fp1jB07Fnv37qXsjUwljEeYd/T09JCVlYWioiKePYSPHz/G+vXrcf78eT6pA+7evYvQ0FCROuFrDx7hqqoqHDx4EFu2bIGVlRWSkpLQt29fqmXVo62tjTNnzggs/tWrVxETE4OUlBSBjSFMGI9w+6O8vBxhYWE4f/48QkJCoK2tDRsbG2zcuLHBZ/Xjx49wcHBAYWEhIiMjceTIEXh7e2PPnj315fWogvEItwAhhLY3Q0NDQhdKS0uJoaEhOXv2LNVSGEQUc3NzEhISwnOc9evXk8OHD/NB0WcqKirIwIEDyYULF/gWk6FlYmNjibq6OrGysiLJyclUy2mSlJQUMmDAAIHELisrIyoqKuTatWsCic/AwC1lZWXk/PnzxM7OjnTp0oWYmZmRvXv3ktzc3Cb3z83NJYaGhmTu3LkkIyODjBgxgpibm5Ps7GwhK6c3AOIJDXLLr2+MNaKVdO7cGbGxsfDz84OPjw/VcoQK4xHmD6ampoiKiuI5TlRUFGbMmMEHRZ/x9PTEgAEDRG6Rj6h7hPfs2YOFCxciNDQUurq6VMtpkgEDBiA7OxuVlZV8j+3h4YERI0Zg7NixfI9NFYxHWHQpLS3FmTNnMH36dCgpKeHAgQMwNzfHkydP6hfCKSkpNTouOTkZQ4cOxdSpU2FhYYERI0Zg6tSpuHHjBm0WHTMeYc4wiXAbkJCQwM2bN3H79m2sXbuWajlCg/EI8wdTU1NER0fzHKeyshJycnJ8UARkZGRgz5492Lt3r0iUTPsSUfcIx8fHY/z48VTL4EiHDh2gqqqKjIwMvsZNSEjAqVOnsGvXLr7GpRrGI0wPXr16hdOnTyM1NbXFffPy8mBvbw9lZWWcPHkSEyZMwIsXLxAWFoaFCxdCQUGh2WNDQkIwZswYbNiwASkpKdi+fTuuX7+OFStW0Ko7J+MR5gx9/qdEBDExMfz77794//495s+fT7UcoWBiYgJLS0uqZYg8Q4cORXx8PKqrq7mOUVNTw7cvWEIIFi9ejPXr19Nm5qItiLJHuKSkBLm5uRg4cCDVUlqE3wvmampq4OTkBC8vL3z33Xd8i0sH9PT0MHnyZKplfFMQQvDixQv4+/tj/vz5UFNTw5AhQ+Di4oLw8HCOxx06dAh6enpQVVVFdnY2QkJCsGDBgla19/b19YWTkxPWr1+PjRs3QklJCfHx8dDT0+Pn0+MLjEeYM8xiOS45ePAgPDw8MGnSJAQHB9Pq7I/fDB8+nGoJ7YKioiJISEigvLyc60LqV65cweDBg/mi59ixYygrK8OSJUv4Ek/YuLu7Uy2BaxITE6GnpycS5cL4XUJt9+7d6NGjB2bPns23mHTB0NAQhoaGVMto1xBCkJGRgdu3b+POnTu4ffs2amtrMXLkSOTl5SEzMxOXLl3CggULMHnyZBBCcOvWLezbtw/6+vrw8PDAs2fP4OTkhI8fP+LmzZttsibV1NTA1dUVN2/exPjx47F9+3b4+/vTerLI1dWVagm0pv1mb0Jg8+bNmDhxIszMzARSzoouMB5h/rB8+XKsWrWKJ1tDYGAgbGxseNZSUFAAd3d3HDx4EOLi4jzHowJR9ggnJCSITMLEzxnhFy9eYNu2bfjrr79EzorTGhiPMP9hs9m4d+8e7OzswGKxICYmhkGDBiEqKgrm5ub1SW5aWhpqa2shJSWFN2/eQFZWFpcvX4a2tjbGjBmDrl274pdffoGnpyeGDh2KyZMnIyYmpk1JcElJCX788UckJiZCTEwMxcXFSE5OpnUSDDAe4RaherUepxudqkZwIigoiBgYGJDi4mKqpQiEXbt2EVdXV6pliDRXrlwh6urqpKKigqc4pqampLa2lmc9Dg4OZMWKFTzHoRIFBQXy5s0bqmVwhZ2dHTl+/DjVMlpFamoq0dDQ4DkOm80mlpaWxNPTkw+q6MmRI0fI/PnzqZYh0lRWVpLjx48THR0dAqDBTVZWlgwcOJBs3LiRsNlsEhoaSgwNDYm+vj65fPkyefHiBVFUVCTr16+vP0ZFRYWEhYWRxMREMmTIEKKjo0OeP3/eZl1ZWVlk8ODBxNTUlMjLy5Njx44RNpstgFeA/2hoaJCMjAyqZTBVI9ozU6ZMwd69ezFixAhkZ2dTLYfvMB5h3qisrMTSpUuxZ88eSElJ8RyPVxvO9evXcffuXWzatIlnLVQiyh5hUZoR1tDQwKtXr1BRUcFTnNOnTyM/Px/Lly/nkzL6wXiEeUdKSgpz585Famoqhg0bhgsXLqC8vByEEJSUlGDSpEl4/PgxRo8eDTc3N7i7uyMhIQETJ05EREQERo8eDXl5eYiLi2PZsmWIi4tDcHAwDAwMkJSUhLKyMqiqqrZJ0+PHjzFs2DDMnz8fubm5OHz4MObOnSsyVzUYj3ALtDZjBiAOIAnA5a+2+wIo++J+ZwDBAG4BUPpv2zwAbAC6X+yXCkCF05iiMiNcx5MnT4iOjg5ta4IyUMOWLVvIlClTeI5TXV1NVq5cyVOMT58+kf79+/OlnjEDd3z48IF07tyZ1NTUUC2l1WhpaZGkpCSujy8pKSE9e/Yk9+/f56MqhvZIS7Osq1atIqqqquT48eONPkNz5swhjo6OBADp1q0bGTRoUP3McOfOnUnHjh3JvXv3mg9+5w4h8vKESEh8/nvnDmGz2cTc3Jz4+PgQQgjZvn07sbe35/l5foughRlhKvJMQkibEmE3AAFfCgRgBODkVwIXA5gIYDCAbV8IzAZwti0CRS0RJoSQgoICoqurS27cuEG1FL4RExPDFL3nkpcvX5IePXqQzMxMqqUQQgi5cOECMTU1pVoGX9i5cycpLS2lWkabCQoK4uv/wfv378nWrVuJhYUF2b9/v0AsWjNmzCCnTp3i+vjHjx8LrDEHnUhKSiIXL16kWka7prKyklRXVzfazmazSd++fUlaWho5ceIE6dmzJwFAjI2NSVxcHFFRUSGnT59uPrC5+eeU6Ktb8ODBREtLq37MoqIi0q1bN5KTk9MoREVFBXn//j3fniu/2Lt3L3n37h3VMlqTCAs9zySttUawWKze/w16+Itt4gC8AKz+anfx/7JyNoAvrxtcBqDNYrHada9eeXl5xMTEYN26dTh9+jTVcvgCU0eYe9zc3LB06VKoqKhQLQUAoK+vj+fPn9d9SYg0olRH+NWrV9i5cyeMjIywaNEiLF68mOeYmZmZWLZsGdTV1fH06VMsXrwYN2/eRL9+/bBw4UIkJCTwQflntLW1kZaWxlMMUbmMzAtMHeHWUVBQgJCQEHh4eGD79u1tatjSoUOHJqutZGZm4tWrV5gwYQJ8fX3h6emJ8vJy3L17FytWrMCsWbMwa9aspoPevQs0UWqtGsDKlBTs+Pnn+jG7du0Ke3t7eHt7Iy4uDn/99RecnJxgYGAAWVlZWFtbt/q5CAtRqCNMZZ7ZWrPh7v+EsL/YtgRAMCHk9Vf7ngawFMBefJ7OroMNYDuA/7VFoCgiIyOD6OhoHDt2DNu2baNaDs8wHmHuCAsLw4MHD7B69defYepQVVWFlJQU0tPTqZbCM3T3CBcUFMDPzw+jRo2Cvr4+Hj9+jG3btiEnJwcODg5cx42Pj4ednR2+//57SEtLIyUlBf7+/pgxYwbOnz+PtLQ09OvXDzY2NjA2NsabN294fi78riXcXmE8wo2pqKhATEwMdu/ejZkzZ0JNTQ0aGhrYvXs32Gw2oqOjoaenh9u3b/M0jpiYGBYvXoyzZ88iLi4Oc+fOhZSUVL0/9vfff2/+4GaS1wMA+gGw+uOPBtuXLVuGAwcOYOHChbh//z6GDBmCmTNnQlZWFgcPHgQAWk02iIhHmLo8s6UpYwCTAOz/799m+JxxKwGIBCDx3/ayFmLM+0+wBIAMAKpoxZS1rKwscXNzI4QQkpCQQMzNzUXu/oABA8jSpUtpo4e5L5z7sbGxREZGpt4bTLWeL+/Pnz+frFmzhjZ62tv98+fPk2HDhhFxcXGiqalJgoODSUxMDE/x79+/T3R1dUnv3r1Jnz59iJubGxk5ciTH483MzIienh759ddfeX5+58+fJ9LS0jwdLyMjQ4v/H+a+4O4vX76cZGRkkM2bNxNlZWXSs2dPIiMjQzQ1NYmSkhIZN24cSUtLI/fv329wvJeXF5GSkiI6Ojrk/fv3fNNjZmZGdHV1yd27dznvDxBzgLj9Z4dIAMhIgEgDJPm/+5yOv3jxIpGQkCAGBgbE3d2d6OnpEQkJCfLrr7/S6v+HyvvLli1r1hpBZZ5JCAGLtHDWwmKx/gQwG0ANgI4A5ABU/nerW0bcF8ALQoh6MzHmATAihCxhsVgLARgAGAFgEiHkZXNja2pqkjNnzmDIkCEoLCzEgwcP0K1bN5G7f+zYMbx69QpLliyhhZ623q+srERubi66detGCz2icH/Dhg24du0a/Pz8aKHny/uPHj3C2bNnsXz5clro4fb+unXr4ODgAFNTU1roefDgAQBg6tSp8Pb2hqKiIpSUlHiK16lTJ6SlpcHT0xM1NTVYsGABVq1ahdLS0lYdz2azYWtri4iICBQUFHD9/N6+fYs+ffrg9u3bGDZsWJuPj42NxYwZMxAcHEyb948g7ufn50NGRgYjRoyghR5hvN8rKioQERGB8PBwZGRkoHv37tDX10evXr1gbGwMW1tbVFRUtBgvKioKp0+fxu3bt7F582aoqamhe/fuXOs7dOgQvLy8EB8fDzk5Oc77s1h4AKAbgCEACgH8AqAKQOB/9x/cvNns8ebm5oiOjoauri4KCgrw4cMHrF+/HhYWFrT4/9q+fTs0NDSgoqJCmZ6XL1/C0NAwgRBiRKc8E0DLifBXA5kBWEkImfTV9jJCSGcOx30psAOANACyAEw4CTQyMiLx8fGt1kdntm3bhps3b+LatWsi14XO29sb2dnZ8Pb2plqKSJCTkwN9fX3cu3cP/fv3p1pOI/Ly8jB48GDk5+eLbDMNAOjZsycePnyInj17Ui2lnvPnz8Pf3x8hISE8xSkqKsKBAwewZ88e6OrqYuXKlfjhhx+48tmuWbMGpaWl2L9/P0+adHR0cPLkSQwZMqTNx6anp2Pq1KntwpLDiaNHjyIyMhJHjx6lWgrfqaysxIMHD3Dv3r36W0FBAb7//nuYmJjAxMQExsbGUFRU5Gmc2NhYLFy4EEpKSvDy8kLHjh1RUlKC0tLSJv+WlJSgvLwcGzduhLKyMgDg2bNnMDIygqOjIywtLSEjIwNpaWlIS0tDQUEBCgoKDQf96nP1AoAxPk8n1j8bDrlSYWEhOnbsiFWrVuHWrVu4dOkS1NWbzNcoYcCAAbh8+TIGDBhAqQ4Wi9VkIvzVPmYQYp4JUNBimRBSxWKx9gDwEfbYVOLu7o7evXtj2LBhCA8Ph4yMDNWSWo2JiQk0Ndv1Gke+smLFCjg7O9MyCQYAJSUlKCgoIDk5GQYGBlTL4Ro6eoTDw8Nhbm7O9fF1J5zHjx/H5MmTcfXq1TZ1vmqKVatWQVNTE2vWrEG/fv24jlPnE+YmEW7LhIsoo6enh27dulEtg2cIIXj+/HmDpDc1NRUDBgyAiYkJxowZg3Xr1mHgwIF8n9gZOnQoEhISsGvXLkyYMAFSUlKQk5ODrKxsk38/fvyIoKCgButxSkpKMH78eDx//hypqakoLi5GXFwcCCEwMjLC/fv3OWpwB+CKL5LgVjB58mRISUkhNjYWXbp04eq5CwoR8QjzjTbnmS15J6i8iWL5tJa4ceMGMTMzo1oGg4B49uwZ+e6778jHjx+plsIRZ2dn4uXlRbWMdsegQYNIQkIC18fb2NiQTp06ca51ygXr1q0jP//8M08xNm/eTNzd3bk6Ni0tjQwcOJCn8RkEx7t378iVK1fIhg0biJWVFenevTvp06cPmT59OvHy8iJ37twhZWVlVMtsRG1tLRk6dCg5ePBgk4+/fv2abNy4kfTq1YuYmZmRCxcuNFl67ctyaZEA6Q2Qj1+XUmuGtLQ0oq6uTlasWCFStcGpAExnOQYA+OGHH6ChoYGzZ89SLaXVxMbGIiwsjGoZIgGLxUKnTp1oP+NvYWGBW7duUS2DJ3bt2oWysjKqZdTz+vVrvHnzBnp6elzHOH36NFxcXGBlZdWmklIt4ebmhsDAQDx//pzrGEzliJZ58OABgoODqZbBkaqqKsTFxcHX1xcODg7Q0NCAqqoqvLy8UFlZiUWLFiE1NRXZ2dk4d+4cVq5ciZEjR9Lu6gvw2YpCCIGjo2P9NkIIYmNjYW9vj0GDBiEvLw/Xrl1DeHg4rK2tmyy9VgcbnwvZ/gmgNd/goaGhGD16NP73v/9hx44dtLWa7du3j/bl06hE6NYIhs8/4GPGjIGtrS3VUlpFTEwMsrOzMXbsWKql0J4uXbqguLiYahktYmZmhvnz56OhYrO7AAAgAElEQVS6uhqSkpJUy+EKT09P2Nvbo3PnZm1jQiUiIgKjRo3i6cdQSkoK3bt3h7m5OV/acdfRvXt3LFmyBFu2bIG/vz9XMZhEuGUSExMRGRmJH3/8kWopAD4nhS9evGhgcUhJSYGGhgZMTExgYWEBd3d3DBo0iLZJHCeePn2K9PR0zJ49G3Z2digqKoKvry8KCwvh4uKCvXv3tsmqchafk+Fmqg03YO/evfjjjz8QGBgIU1NTbp+CUPDx8YGlpSV69OhBtRRawiTCFNC5c2coKiri3r17MDExoVpOizAe4dYjJyeHkpKSzyVZaNxAoEePHlBXV0dcXBztv8Sbg24e4Vu3bsHCwoKnGO/fv8eOHTsQGRnJJ1X/j6urKzQ0NPDkyROuFs30798feXl5+PTpE+2veFAF1R7hoqIixMXF1Se9cXFx6NixY/1iNhsbGxgaGtLqc8MLnp6ecHNzw4ULF7Bjxw5IS0tjw4YNGD9+fJsT+3J89gafQusaLOzZswcBAQEi8f35rXmE20qbqkYIm/ZUNeJrsrOzMW/ePJG/PM3QmM6dO+P169eQlZWlWgpHVq5ciS5dumD9+vVUS2kXqKurIzAwEIMHD+Y6hpubGyoqKniu8NAcW7duxePHj3Hq1CmujtfT08PRo0dhaGjYpuMeP34Ma2trPH78mKtxGZqHEIJDhw5h586deP36NQwNDesTXxMTEygpKVEtkf6wWPgDQCKA883t81WutGjRIgwcOBDLly8XsLj2Q2uqRlAB4xGmiL59+wIAsrKyKFbSMoxHuG2Iij1CU1MTycnJVMvgGjp5hLOzs1FSUgJtbW2uY2RmZuL48ePYsGEDH5U1ZOnSpQgLC+M6IWXsEZwRtke4qKgIP/30E/bv34+TJ0+iqKgI4eHh2LZtG6ZNm8Ykwa3kbZ8+2AWg2T6wTZRCs7KyQmhoqCBl8Q3GI8wZJhGmkG3btolEbd6YmBiR+cDTgS5duuDDhw9Uy+AIIQT79+/HnDlzqJbCNZ6envj48SPVMgB8LptmZmbGUymp3377DUuXLhVoXWRZWVm4uLjAz8+Pq+O5TYTpfOWRnyQmJiIoKEgoY0VHR2PIkCFQUlJCbGwsjI2NRdLnSwc8Ro3CPADNVv69e7fRph9++AExMTG0+Q7ihI+PD5MIc4BJhClETU0NGRkZVMtoERMTE1haWlItQ2To2rUr7WeEL168CBaLhcmTJ1MthWvo5BHmtX5wYmIiwsPDsWLFCj6qaprRo0e3WEe1OXiZEaazZ55f6OnpCfwzVVtbiz/++APW1tbw9fWFj48POnbsKNAx2zMpKSkIun4d67y8mt5h3z6giSYhcnJyMDQ0REREhGAF8gHGI8wZZrEchaSlpaFXr15Uy2iR4cOHUy1BpKC7NYIQgk2bNmHTpk0inZy4u7tTLQHA59fz1q1bWLNmDdfHr169Gh4eHkKpgGFgYICHDx+ipqaGYymppmCsEZwxNDRss3+6LeTl5WH27Nmora1FQkJCfSc1Bu4ghGDFihVYv349ui1ZAjg4AO7uQEYGoKkJbNvWZBJcx/jx4xEaGoqJEycKUXXbcXV1pVoCrWFmhCmksLAQGhoaVMtoEcYj3Dbobo0ICgoS+dlggF4eYU1NTTg5OXHVQtjf3x85OTkNaqEKEjk5OfTp0wdpaWltPlZNTQ1v376lzetONwTpEQ4JCYGBgQFGjx6NmzdvMkkwHwgNDUV2djYWLVr0eYOiInDsGBAT8/lvC+2irayscPXqVYHr5BXGI8wZJhGmEGVlZZFYRc14hNsGna0RbDYbmzZtwsaNG0V6Nhigj0eYxWLh2rVrmDlzJkaOHImtW7eiurq6xeNqamrg5uaGP/74A+fPnxdqPWdDQ0MkJCS0+ThxcXFoamqKxPcWFQjCI1xZWQk3Nzc4Ozvj3Llz8PDwYLzAfKC6uhorVqzAjh07uP7s6erqory8HE+fPuWzOv7CeIQ5wyTCFKKnp4dXr15RLaNFGI9w2xAXF0dFRQXVMprk4sWLEBMTE/nZYIBeHmExMTG4uLggISEBUVFRMDIyAqfSjwUFBbC0tERaWhri4uKgo6MjRLVoUR8nGHtE8/DbI/z06VMMHz4cmZmZSEpKwsiRI/kW+1vn0KFDUFZW5snWwGKxRGJWmPEIc4bxCFNIhw4dwGazqZbRIoxHuPUQQnD16lWcP99sNUrKqJsN3rx5s8jPBgP08Qh/Sd++fRESEoLTp09j4sSJmDt3LjZu3NigAUVCQgKsra1hb2+P33//nZLZPUNDQ67bvGtrayM1NZXPitoH/PQInzx5Em5ubti0aRN++eUXvn9mq6qqkJOTU3+fxWI1utVtFxMTa7StuX1b2s7t8fzkw4cP2LRpE65fv85zbCsrK/j7++PXX3/lkzr+w3iEOcMkwgwtEhsbi5KSEqbFcitISkoCi8WCvr4+1VIaUVlZiYyMjHYzq7Rr1y4sXLiQNi2W62CxWHBwcMDYsWOxbNky6Orq4tChQzA3N8eJEyewYsUK+Pn5Yfr06ZRpHDJkCFJSUrhqsa2jo9Pmhh/fSvm0Bw8eIDs7m6cWy6WlpXBxcUF8fDxu3rwJXV1dPioEKioqcOTIEWzbtg1iYmIQFxcHIaTRDUD9v9lsdqNtze3LaTs3x38JvxLvmpoazJ49my+vraWlJRwdHVFeXg5paWme4wmCffv2wc7Ojmmx3AxMIszQIjExMcjOzmYS4VZw7tw5zJgxg5YzrtLS0pgwYQIuXLiAn3/+mWo5POPp6Ql7e3vaJcJ1KCgo4O+//8bly5cxd+5c9OnTB/n5+YiIiOCp8QY/kJWVRb9+/fDo0aM2n7Rxa42g42eC3yQmJiIyMpLrRDghIQEzZ86sL3HHT+tPeXk5Dh06hO3bt2PIkCG4cOECjI2N+RZfkPA78SaE8K0VdteuXaGrq4s7d+5g3LhxfInJb3x8fGBpackkws3AJMIUIykpibKyMtr+mAOfPcKamppUy6A9hBCcO3cO//zzD9VSmsXBwQE+Pj7tIhGmk0eYE5MmTcKoUaMQEBAAOzs7dO3alWpJAP5/wVxbE2EVFRW8ffsWHz9+FInXX5jo6elxlWARQrB79278+eef8PX1ha2tLd80ffr0CQcOHICXlxeMjY1x8eJFgZZ4EwRfzu7SjZqaGujq6iI0NJS2iTDjEeYMs1iOYlRUVLhetCIshg8fjgkTJlAtg/Y8ePAAhBAMGTKEainNMmHCBKSkpCA7O5tqKTzj7u5O6xPIL5GTk8PixYtpkwQD3C+Yi4+PR9++fRv4nhk+Y2hoiGnTprX5OEdHR5w9exb37t3jWxL88eNH7NixA/3790dkZCRCQkIQFBQkckkw3SCE4PHjx/D19cXUqVMhLy+PqKgoWtrh6nB1dYW8vDzVMmgLkwhTjI6ODldljIQJU0e4ddDZFlGHlJQUpk+fjoCAAKql8Ayd6giLItyWUDtx4gTmzJlD6/c5VXBTRzg1NRWhoaG4desWVFVVedZQWloKT09PqKmpIS4uDmFhYbhw4QKtT9BFgZCQEMydOxe9e/eGlZUVkpOTYWdnhydPniA5ORnz5s2jWmKzMHWEOcMkwhRjYGBA+1JETB3hlqmzRcyYMYNqKS3i4OCAkydPivwCJrrUERZV9PX1kZqaiqqqqlYfU1lZibNnz8LBwUGAykQXbuoIb9u2Da6urjzPsJeUlOCPP/5A//798eDBA9y6dQv//PMPBg8ezFPcb52PHz/C0dERy5cvx7Bhw3D79m28fPkShw8fhp2dHRQUFKiW2CJMHWHO0NojnJGRATMzM6plcAUhpFUzJjU1NbSvJcx4hFsmOTkZtbW1MDAw4FvMSZMm4fLly3yLV4epqSk+fvyI5ORkWl/OawlR8QjTlc6dO0NVVRWpqamtft+GhIRAW1u7zTOXon7S1Vra6hF+/vw5rl692uYqHF/y4cMH7NmzB76+vhg3bhzu3LmDgQMHch2P4f+pm/U1MTFBYmKiyFixvobxCHOG1omwpqYmIiIiqJYhcEaPHk21BI4wdYRbRhC2iIqKCoEspBQTE4O9vT1Onz4t0okwHesIixpGRkZISEhodSJ8/PhxzJkzh6uxvgUrRVvrCG/fvh2//PIL5OTk2jxWWVkZtm/fjv3792PSpEmIjo6GhoZGm+MwNIYQgn379mHTpk3w9vYW+SsgTB1hzjDWCIYWYTzCnBGULUJOTg5v377la8w67O3tERAQgNraWoHEFwaMR5h32rJgrqCgALdv36a0/jHdaYtHODc3F+fOncOyZcu4GisyMhJ79+7FvXv3cOzYMSYJ5hOFhYWYNm0ajh07hujoaJFPggHGI9wSTCLM0CKMR5gzDx8+RHV1Nd9XY8vJySE/P5+vMevQ0tKCoqKiSF9xYTzCvNOWBXMBAQGYPHkyV7OX3wpt8Qjv2rUL8+bN43o1v6WlJeTl5Rt0h2Pgjbt370JfXx/9+/dvVzPsjEeYM7S2RnwriImJoaqqCh06dKBaSpMwHmHOCKpaRJcuXVBQUMDXmF/i4OCAU6dO4YcffhDYGIKE8Qjzjr6+PtLS0lBZWQkpKSmO+x4/fhzbt28XkjLRpLUe4ffv38Pf3x8pKSlcjyUuLo7Vq1dj27ZttLfX0Z3a2lps2bIFf/31F44cOdLuyoUyHmHOMIkwDejTpw+SkpJgYmJCtZQmYTzCzVNnizh16hTfY3fv3l2gibCdnR02b96Mffv2iWRNWMYjzDsyMjLo378/UlNTOV7RSElJQUFBAczNzYWoTvRorUfYx8cH06dPh7KyMk/jzZ49Gxs2bEBycjL09PR4ivUl1dXVKCkpaXArLi5utO3L7TU1NbCyssJPP/2E7777jm9aBE1OTg7s7e0hISGBhIQEKCkpUS2J7zAeYc4w1ggaoKWlhZiYGKplNAvjEW6elJQUVFVVwcjIiO+xu3fvjsLCQr7HraNXr14wNjbGpUuXBDaGIGE8wvyhNT7hEydOwMHBAeLi4kJSJZq0xiNcUlKC/fv3Y/Xq1TyPJyUlBVdXV3h6erb5WEIIkpOTsXbtWhgbG2PAgAHo2bMnpKWlIS0tDQ0NDZibm2POnDn43//+Bz8/P1y6dAlJSUkoKChAx44doa6uDnNzc8yePRtz5sxBTEwMNDQ0MGHCBJw6dQqlpaU8P0dBEhwcDENDQ4wbNw5hYWHtMgkGGI9wSzAzwjRg4cKFsLKyApvNhpubG9VyGhETE4Ps7GyMHTuWaim049y5c5g+fbpAVsR3795d4DWm6+wR/GzpKiw8PT1hb28vsiWN6EJdIrxo0aImH6+pqcHp06dx69Ytrsd4/PgxJCUluT5eVEhMTERkZCR+/PHHZvf566+/MHbsWKirq/NlzEWLFkFNTQ0vXryAmppai/s/ffoUZ86cwd9//42PHz/Czs4Ou3btgoKCAuTk5CAnJwdpaWmuvtNmzJiBjx8/4tKlSwgICMCSJUtgZWWFWbNmwcrKijb2v4qKCqxevRrBwcEIDAxs91c9fXx8YGlpiR49elAthZYwM8I0oHv37oiNjcXjx48xYcKENhW4FwYmJiawtLSkWgbtEHQTDQUFBRQVFQkkdh3Tpk3D3bt3BWrBEBSMR5g/tLRg7vr16+jTpw/XtWmPHz+OJUuWYPfu3dxKFBn09PQwefLkZh8vLy+Ht7c31q5dy7cx5eTksHDhQuzcubPZfXJycrBz504YGRlh5MiRyM/Px+HDh5GZmQlPT0+MGDECAwYMgKKiImRkZHg6se/UqRPs7OwQHByM58+fw9zcHDt37oSSkhIWLlyIiIgIsNlsruPzSkZGBoYOHYq8vDwkJSW1+yQYYDzCLUIIoe3N0NCQfGsEBQWRwYMHk4SEBKqlMLTAw4cPSb9+/QibzRZI/KSkJDJz5kyBxP6SmTNnkr179wp8HAZ68unTJyItLU3Ky8ubfNzW1pbs27evzXHZbDbZtGkTUVFRIWlpabzKbBfs27ePTJ48mbcgQKPbmzdvSLdu3cjbt2/rd8vPzyf79+8no0aNIt27dycLFiwg169fJ9XV1Tw+C+7Izs4m27dvJ/r6+kRZWZmsWLGCJCQkcP39WV1dTTIyMkhQUBD5888/ydKlS8k///xDioqKmtyfzWaTo0ePEnl5efLXX38J7HuboXkAxBMa5JZf35gZYZoxZcoU+Pv7Y/369VRLqYfxCDeNIG0RAKCoqIji4mKBxP6SOntEHUVFRfjw4YPAx+UVxiPMH+r8oE1VMPjw4QOuXr0KOzu7NsWsrq6Go6MjgoODERMTg0GDBvFLLq1pySP89u1bREREYNq0aTh9+nTbP9/NfNf0VFSEra0tvLy8cPz4cYwfPx4aGhq4c+cOVqxYgby8PBw5cgRjxoyBhAQ1jsg+ffpg1apVSEpKQlhYGDp27Ijp06dDS0sLv//+O549e9bkcZ8+fUJSUhICAgKwfv16zJgxAzo6OpCVlYWVlRUOHjyId+/eQVlZGceOHUPfvn1hZmaG7du349GjRyCEoKSkBA4ODtixYwfCw8OxaNGib6LBSx2MR5gzLELj1pdGRkaktcXe2xOurq4YNmzY/7V332FNne0Dx78HF1Lnq69b654oKiqKuPdW1Na6F9ZRLVrnW627VNs6qhSrONpq1boHbm1RVLSIFMWF2p9Yd0UFRUTI8/sjgYJAWElOQp7PdeWCnJyccwePyZ3n3Od+zKZuc+nSpYSFhbF06VK1QzEbQghq1qzJhg0bjNbtIzY2lrZt2xq91+/bt28pU6YMbdu2JTAwkGvXruHh4WH2XRmKFy9OcHAwxYsXVzsUizdixAgaNGjAmDFjkixfvXo1R44cYfv27eneVkREBH369CF37txs2bLFqmq4161bh5+fH+vWrUt1nWfPnrF37162b9+Or68vLVq0oE+fPnTv3l1/67VUErfXgA/wA3BcUejWrRv9+vWje/fuZl86JITg3Llz/PLLL2zdupXy5cvTvXt3wsPDuXr1KlevXuXhw4dUrlyZGjVqUKNGDapXr06NGjWoWrVqit1uoqKi+P333/Hx8cHHxydheYcOHVi6dKlFdsjJqqpVq7J//36qVq2qahyKolwQQhj+yvKsUntIWt/NGksjhBDC2dlZxMXFqR1GgtOnTwsfHx+1wzAr165dE6VLlzb66bUWLVoYdfvxdu7cKVxcXIStra344YcfLOK0oYeHh4iMjFQ7jGzh+++/FyNGjEi2vEmTJmLfvn3p3s7ff/8t6tSpI0aPHq3aKXg1BQQEiJ07d6Z7/efPn4uNGzeKnj17ivz584uOHTsKb29v8eTJk+QrJyqFiAHhA2IgiIIg2oD4AkTNmjUN+GpM6+3bt+Lw4cPC3d1dfPXVV2LPnj3ixo0bWTqONBqNCAkJEadOnTJgpJZn6dKlKR9TJoaZlkbIEWEzExsbS4sWLTh9+rTaoUh6PHz4kJo1a/LPP/9gY2O8CqO2bdty7Ngxo20/MQcHB2bPno2rq6tJ9ieZj/PnzzNq1CiCgoISlt24cYPmzZtz9+7ddHV8uHTpEl26dOGTTz5hypQpVnXq2RAiIyM5cOAA27dv58iRIzRq1Ig+ffrQs2dPihcvTpyicArYDOwEqgAfAX2BEsA+wAs4YMaf6ZJ1M9cRYVkjbGa2bt1KkyZN1A4jCVkjnFyJEiUoUqSI0dubmSoJBu2pw8DAQJPtL6tkjbDh1KlThxs3bvD69euEZT/++CMDBgxIVxJ8/Phx2rRpw+LFi5k6darVJsHp6SOcmvz58/Phhx+ybds2Hjx4wJgxY/D19aVatWq4uLhQDnAHKgJ/AGeA8WiTYIC7QFkDvAYp+5E1wvrJRNjMbNq0ifHjx6sdRhJnz57l4MGDaodhdpo1a4afn5/aYRhMr1692LVrl9phpNuiRYt49eqV2mFkC7a2tlSrVo3g4GAANBoNP//8M0OGDEnzuT/++CP9+/dn+/btGb6oLrsJDAxk9+7dWd6OnZ0drq6u/PLLLzx8+JDPP/+cY0AQMA0on8JzZCIspWb58uUyEdZDJsJm5vnz57z//vtqh5GE7COcsmbNmnHq1Cm1wzAYJycnnj17xo0bN9QOJV1kH2HDSjzD3G+//UaRIkWoU6dOqusLIZg3bx5z5szh999/p3nz5qYK1Wyl1Uc4M2xtbenUqRNp9d34G5kISymTfYT1k4mwGbl165ZZHqzOzs507txZ7TDMjouLS7YaEbaxsaFHjx4GGdEyhenTp1tVRwJjSzyxxoYNGxg6dGiq61pre7S0ODo60qtXL1X2LUeEpdS4u7tTtGhRtcMwWzIRNiPfffdduk5FmpqsEU5Z5cqViYmJ4c6dO2qHYjCWVB4ha4QNK35EODIykn379tG/f/8U14uIiKBLly48efIEX19fSpQokeJ61igrNcJZdRsopMqeJXMna4T1k4mwGbl9+za9e/dWO4xkZI1wyhRFyXajwi1btuT69evcv39f7VDSJGuEDat2w4bcvHSJTQUK0OLFC/5brFiSx4UQBAUF0bx5cypXrsyuXbtkaco7DFUjnBmPACegffv2eHp6cvfuXVXikMyPrBHWTybCZiRXrlxcvXpV7TCSkTXCqctudcK5c+emc+fO7NmzR+1Q0iRrhA1IUcgD1EA7MUP8eSmNonDu3DmmTp1KlSpVcHV1Zfjw4Xh6eqo2Q5k5M0aNcHrNBzRAw4YNOX/+PPXq1aN+/frMnTuXZ8+eqRKTZB5kjbB+so+wGdm4cSPBwcEsXrxY7VCkdLpw4QJDhgzh8uXLaodiMNu3b0+YUUyyAolanX2Eth/tTt3PXUBBwHXmTHr37o2Dg4PVtkZTXTr+7i5ASKFC3L9/n1y5cnHmzBlmzpxJr169mDhxovFjlCQ9ZB9hKU19+vTh3LlzaoeRjKwRTp2DgwNhYWHZ6rRTx44d8ff3N/tRJFkjbHj5gFfADKAkcAwIAebPn0/dunVlEpwGNWuEAQ6/fIlGo6Fbt27kzJmT5s2b06JFCyIjI1WLSVKfrBHWTybCZsTW1pa4uDi1w0hG1ginLmfOnDRu3JgzZ86oHYrB5MuXj5o1a5rll7LEZI2w4T0DlgMXgP8B1dUNx+KoWSMM8N5773Ho0CF+++03vLy8AO3/Z/mF0brJGmH9ZCJsZvLnz292FyrJGmH9sludMECZMmXMfhRJ1ggb3mWgtdpBWDCj1QhnYCS+SZMmTJs2jfHjx/PXX3+RL18++YXRyskaYf1kImxmOnfuzI8//qh2GEnIPsL6ubi4ZLtE+MWLFxQoUEDtMPSSfYQN6xUQBlRTOxALpmYf4cS+/PJLatWqhYuLC3Z2dnJE2MrJPsL6yUTYzAwaNIjjx4+rHUYSskZYPycnJy5dukRUVJTaoRhMREQEBQsWVDsMvWSNsIHoLpi+hLZrRK5UHpfSpnaNcGK///47jx8/ZtWqVfL/iZWTNcL6yUTYzBQqVIjo6Gi1w0hC1gjrZ2dnR+3atTl//rzaoRiMJYwIyxphAxKCIKBuCsul9FO7RjhecHAwHTp0IFeuXDg7O8tE2MrJGmH9ZCNIM5Q7d24iIiLMJhFxcnKiWjV5wlSf+Ik1WrZsqXYoBmEJI8KyRtiwgj7+GIeaNWHCBLVDsVgODg4ULlw4U8+NjY3l9u3bXLt2jatXrxIZGUmFChWoWLEiFYEyQI40tvH69Wvmzp3LunXr6NatG7a2tri6umarL+lSxskaYf1kImyGWrRowaZNmxgzZozaoQDaGmFJv2bNmuHp6al2GAbz4sULs0+Ep0+frnYI2UpQUBADBgxQOwyL5ujoiKOjo951IiMjuXbtWpLb1atXuX37NqVLl6Z69epUr16dAgUK4Ofnx08//cQt4B+gHFARqKT7mfh27uhRRteuTYMGDQgMDKR169b88MMP5M+fX44IWzl3d3e1QzBrckINMxQWFsbo0aM5cOCA2qEA2hrhiIgI2rdvr3YoZuvp06dUrFiRp0+fGm3Grfv372NnZ0ehQoWMsv14b9++xdbWltjYWLPuG7tkyRJGjRolL5gzgLi4OAoWLMi9e/fM/guQOQsKCiIsLIxu3bpx//79JIlu/O/Pnj2jatWqVK9enRo1aiQkvlWqVCFv3rwpb1hRiAb+D7gF3NbdEv9e7P338fT0pEuXLmzcuJE1a9bw+++/c+vWLTp06MCtW7dM8jeQzI+npyf9+vWjSJEiqsZhrhNqyBFhM1SuXDkiIiLUDiPB2bNnCQsLk4mwHkWKFKFMmTIEBwdTv359o+zDw8ODTp06Gb2DR2RkJAUKFDDrJBi0NcIDBgyQibABhIaGUrx4cZkEZ1BMTAy3bt1KSHT3799PaGgob968IW/evEkS3a5du1KjRg3Kli2LjU3GL8+xRdvXOaXezgIQt28TExPD8uXLWbBgAdu2bUNRFNk+TWL58uW0a9dO9UTYXMlE2EzZ2NgQExND7ty51Q5F1ginU3wbNWMlws+ePaNEiRJG2XZilnChHMgaYUMKCgqibt1kl8pJKXjx4gUTJkzA39+fO3fuUK5cuYRkt127dnTv3p1Ro0YZtiZTCL29hGNjYtiwdm3CDIDHjh3DwcEBQLZPk2SNcBpkImymGjZsyK5du/jwww/VDkXWCKdT2bJlefTokdG2//z5c5MlwpYwMihrhA0nKCgoIXGSUvfgwQM6deqEs7MzO3fupHLlyuTJk8c0O08hGdYAWzZtYnbNmpQrV45ff/2Vxo0bJ3qKwN3dnRYtWpgmRsksyRph/WT7NDM1bNgwtm/frnYYgOwjnF7h4eFGPfX08uVLkyTC5tSxRB/ZR9hwgoKCqFevntphmLXQ0FCaNm1K37598fT0pFatWsmSYKP3ERYChEBoNOzetQsHe3tWrFjBDz/8wPHjx5MlwZMnT+batWv8+uuvxotJMnuyj7B+MhE2U/b29ocwtVgAACAASURBVNy/f58OHTqo3sNX9hFOn/DwcKOffspMbWFGWcqIsOwjbBhCCC5evChLI/S4cOECzZs3Z8aMGXz++eep1s8bu4+wEIIjR47g5OTEnDlz8PDw4MyZM7RunXxibA8PD44ePYqPj48sIbJyso+wfrI0woydPn2asLAw5s2bx9y5cylRogQzZszAycnJpHHIGuH0efr0abaow7KEHsIga4Qz4tWrVzx69IgKFSokS+IePnxIbGwsZcqUUSk683bs2DH69+/P6tWr6dmzp951s9JHOC1+fn58/vnnPHr0iHnz5tGnT59Uvxh7eXmxbt06Tp06ZbR4JMsha4T1k4mwmStXrhze3t6Adrag+fPnc/fuXSpVqsScOXOoUqWK0WOQNcLpY+zSCFOxlIvlZI1w+vj7+zNw4EAiIiLImzcv7dq1Y8KECdSpUwf4tyzC3LuEJBYWFkZwcDCVKlWiSpUqRmtZuHXrViZMmMD27dtp3rx5muunp49wRl24cIGZM2dy9epVZs+ezaBBg/S+3s2bN7Nw4UJOnjxJyZIlDRqLZJlkjbB+sjTCgtSpU4dt27bh7++Pm5sb7u7uNG7cmLFjx/Lw4UOj7VfWCKePsUsjTNXz21JKI2SNsH6xsbHMmTOHnj17snjxYh49esShQ4ewtbVl/vz5CetZwoVy0dHRHDlyhEmTJlGrVi0cHR357rvv6N69O/nz56dOnTr079+fhQsXsmfPHm7evElcXFyW9rlixQo+++wzjh49mq4kGAxbIxwSEoKrqyvdu3enW7du3Lhxg2HDhulNgg8cOMDEiRM5dOgQFStWNEgckuWTNcL6yRFhC9WyZUtatmyJRqNh586d9OvXj0aNGrF48WKD70v2EU4fU9QIm4KlXCwn+wjrN23aNC5evEhgYCClSpUCoEaNGgwYMCDJCFFQUBDdunVTK8wUCSG4ceMGhw4d4vDhw/j5+VGnTh06duzIhg0bqF+/PjlyaCccjoqK4tq1a1y+fJmQkBBWr15NSEgIT548oXr16tjb21OrVi3s7e2xt7enbNmyeke/hRDMmjWLbdu24efnR/ny5dMdd2BgIH5+fnTv3j3Tr/3mzZvMnj2bY8eOMWXKFDZt2pT6RBuJnDp1iqFDh7J3717s7e0zvX8p+5F9hPWTibCFs7GxoU+fPri6uqZ71CKjZI1w2oQQhIeHG7Uez1Snrl+8eEHp0qVNsq+skDXC+h07doy1a9cmJMHxypUrR1hYGKBNnk6cOMHcuXPVCDGZsLAwPDw8OHToELGxsXTs2JERI0bwyy+/pDqjop2dHfXr10/WvzsyMpIrV64kJMjHjh0jJCSEyMhIatWqlZAcx/8sUaIEiqIQFhbGkiVLqF27Nj4+PvTo0SPd9dNZqRG+e/cu8+fPZ+fOnUyYMIFVq1aRP3/+dD334sWL9O7dm19++SVJ5whJAlkjnBY5xXI20qxZM06dOqV2GFYpMjKSkiVLGvVUfYsWLfD19TXa9uMNHDiQDh06MGjQIKPvSzKOyMhISpQowbNnz5JNyhMXF4ednR1jx45l69atrFq1KksjmIYSEBBAjx49GDZsGP3796dGjRpG+fL37NkzQkJCEhLky5cvc/nyZeLi4hIS4woVKnDv3j1u3ryJv78/FStWpGfPnvTs2ZOaNWsaNK6HDx/i4eHBxo0bGTVqFFOmTMlQ0nLjxg1atGiBp6cnrq6uBotLkgxNTrEsGV3+/Pn5+++/DX71t7+/PxEREbI0Qo/s0jECLOdiuSVLljBq1ChZGpGCgIAA6tatm+LMlH/++SdCCK5du0ZwcDBFixZVIcKkdu/ejZubG97e3vTo0cOo+ypcuDAuLi64uLgkWf748eNkCXJISAg2NjYEBQUREBDAzJkzqVy5ckJS3Lhx44QSDdCWmYSFhaXri0V4eDiLFy9m9erVDBo0iJCQkAz3CT916hQDBw5k4cKFMgmWUuXp6Um/fv1kaUQq5MVy2Ujbtm3ZvHmzwbcr+winzdj1wRqNxqSlEZZwsZzsI5w6f3//FE+R//zzz3h6elK5cmUmT56sehIshODbb79l3LhxHDx40OhJsD7FihWjVatWjB8/nlWrVuHn50d4eDjBwcH4+Pjw7bffMnz4cP7zn//g5eWFi4sLpUqVws3NjfDwcCB9fYQjIiKYN28eVatWJTw8nD///JPly5dnKAl+8uQJQ4cOpX///ixdupThw4dn6bVL2ZvsI6yfHBHORvr168fw4cOZMmWKQbcra4TTZuzWaY8fPzbZyKelXCwna4RTd+7cOfr3759w/82bN0ycOJHjx4+ze/duPDw8CA0NpXXr1qq1TYuNjWX8+PGcPn2as2fPUq5cOVXi0EdRFEqXLk3p0qWTnBHTaDSEhYUREhLC9evXEzq66KsRjoqK4vvvv+frr7+mffv2+Pv7U7ly5QzFo9FoWLNmDbNmzWLQoEFcuXIl3XXEkvWSNcL6yUQ4GylVqhTPnz+nRYsWKIqCEMKgPxctWpTmeqC9gC/+liNHjoSf8b/b2NiQM2fOJD/j10m8PPFz4u8nXp4jRw5y5cqVZHn8/dQey5kzZ8Ly3LlzJ3k8d+7cCY/nzJkz4Ra/PD62lBh7RPj+/fupXixkaJYyIiz7CKdMCIG/vz/fffcdoL0Iq2/fvpQsWZLz589TsGBBnJ2dmT59OpMmTaJUqVKULl064Wf//v2TXXhmaBEREXzwwQeAdqIIS/jilZiNjQ3ly5enfPnydOnSJWF5Sn2E37x5g7e3N19++SVNmjThxIkT1KpVK8P7DAwMZMyYMeTMmZNjx44l9IGWpLTIPsL6yUQ4m8mZMye//fabQafizWiNcGxsLBqNhpiYGGJjYxN+vn37Nsnyt2/fJln+9u1b4uLiiImJIS4uLmF5bGxsslv88ri4OKKjoxN+f/ex2NhYhBAJ9+NvideLf1yj0RAXF5dkefz9+J/vJv2gHTWKjo42WC/WAwcOJGuD9/TpU8LDw9FoNEafZtlSZpaTNcIpu3PnDjY2NpQtW5bjx48zcOBA3N3dmTp1asLo7+jRoxk9ejQvX77k/v373Lt3j3v37rFv3z5++OEHfvjhB6PF9/DhQ6pUqcKAAQNYuXKl0SbDUEPiGuHY2Fh++ukn5s2bR61atdi7d2+mJtt48eIFs2bNYuvWrXh4eDB06FCTTLUuZR+yRli/7PMOJAHQtWtXRowYwfr16w22zYz2EY7/YEvpQp3s6ssvvyQyMtIg2+rcuTOdO3dOsmzt2rXcvXvX6B+A0dHRREZGWsQInewjnDJ/f3+cnJxYvHgxy5YtY+PGjbRp0ybFdfPly0fVqlWpWrUqAAULFsTLy8tosQkhcHNz4/PPP2fatGkWNZtdegQGBnLq1ClevXrF7NmzKV26NJs2baJp06YZ3pYQgi1btjB58mQ6d+7MlStXZCIjZYrsI6yfTISzmenTpzNx4kTc3NxYs2aNQbYpa4TT9vTp0wxf8Z3R7RcrVsxo24+3YcMG2rdvbxFfYmSNcMp8fX0JDQ3lwYMHnD9/nrJly6b7uWXLluXu3btGi23jxo3cuXOHHTt2ZLskOL6X+IkTJ7h69Srff/89bdq0ydTrvH79OuPGjeOff/5h+/btNGnSxAgRS9ZC1gjrJ8+vZENLly7Fzs6OUaNGGWR7zs7OyUYopaSMXSP8zz//GP0K/9jYWBYvXsyMGTOMuh9DmT59uhwNfsfly5fZsGEDlSpVwtfXN0NJMECZMmX4+++/jRLb/fv3+eyzz9iwYYNFfNFKLyEEhw4dolGjRmzcuJGVK1dy9uxZ2rZtm+EkOCoqipkzZ9K0aVO6du1KQECATIKlLHN3d1e9Q4w5k4lwNrV8+XLy5MnD6NGjs7wtf39/jhw5YoCosi9jd40IDw9PNkOYof3666+UKVMmU6dx1bBkyRKjTmBiaTZv3kyTJk2wsbFh06ZN5MmTJ8PbKFKkCFFRUQb/uwoh+Pjjjxk9erTRL8QztpcvX+Ln58eyZcsYNGgQ1apVY9KkSUydOpV169YlXEeQUT4+Ptjb23Pz5k3+/PNP3N3ds1X9tKQeT09P2T5ND5kIZ2MrVqwgV65cjBkzJkvbkX2E02bsEeHx48dTt25do21fCMFXX31lMaPBYIV9hBUl+Q14+/YtY8aMwc3NjeLFi+Pv75/pkXIPDw/q1KlD3rx5DRk5P//8M2FhYcycOdOg2zW2qKgozpw5w3fffceQIUOoVasWxYsX57PPPuPGjRu0atWKbdu2cenSJfr27UtQUFCafYTfFRYWRq9evXB3d2fVqlVs2bLFIqY4lyyH7COsn/y6mc2tWLGCcePGMW7cODw9PTO1DVkjnDZjJ8KG6kiRGh8fH3LkyEHHjh2Nuh9Dsqoa4VRGGO8rCh1r1+bmzZv079+fFStWZDqJ3bVrF15eXpw7dy7JbGlZdf/+fSZPnszhw4fNuiQiKiqKP//8kwsXLhAQEEBAQAC3b9+mZs2aNGjQABcXF9zd3alVq1aqr0NfH+F3vX37lqVLl7J48WImTJjA5s2bsbW1NeRLkiRA1ginRUncBsrcNGjQQAQEBKgdRrYwduxYcuTIwYoVK9QOJVsqUaIEgYGBRi9fMAYhBC4uLkyYMIEPP/xQ7XCkd6WSBJ8AegAC+HnnTnr16pXiekII3r59S0xMTKo///77bwYPHszBgwdp0KBBlkN+9uwZW7ZsYeTIkbi6ulK/fn3mzp2b5e0ayuvXrwkODiYgICAh8b158yY1atTA0dGRBg0a4OjoSO3atY2SvJ88eZIxY8ZQrlw5Vq5cSaVKlQy+D0kyN4qiXBBCZP0NxsBkImxF4puxZzQZzmgfYWsjhCBPnjy8ePHC4KeUTeHkyZOMGDGCa9euGXQk0Nispo9wComwJ+AOxAKFgP8CMe+/n2KiGxsbmzAxTK5cuVL8mTt3bmbOnImrq2uWQo2MjGT58uUsX76c58+fM3PmTHbu3Mkff/yh2mhwdHR0sqQ3NDSUatWqJSS8DRo0oHbt2pmqq04scR/hlDx+/JgpU6Zw4sQJli1bhqura7brniGZH3PpIywT4UyQibDhjR49mly5cmUoGV66dClhYWEsXbrUiJFZrpcvX1KsWDGioqLUDiVTOnXqhKurK25ubmqHkiHFixcnODiY4sWLqx2Kcb2TKB0DOgMVgGKAF5AbyHX7drIkN/5m7GQrOjoaLy8vFi1aRJs2bZgzZw6dOnXi/v37nD59mnr16hl1//HevHnDpUuXkiS9169fp2rVqjg6OtKwYcOEkV5jlCGsW7cOPz8/1q1bl2R5XFwca9as4YsvvmDw4MHMnj1bTo0smUzVqlXZv39/Qr9wtZhrIixrhK3MqlWrGDVqFBMmTEiYgjUtskZYP2N3jDCmixcvEhwcnOELfMyBVdUIJ7Ic7VXOrYDygH38AxUqmDyWt2/fsn79eubPn4+joyNHjx6ldu3aAOTKlYspU6YYLQl+8+YNly9fTpL0Xrt2jcqVKyeM9I4cOdIoF/+lJqUa4fipkXPlysUXX3yBo6OjTIIlk5I1wvrJEWEr5ebmRt68edOdDEupu379Ou3atePOnTsWd5rzww8/pGHDhkyePFntUKTUvHNMlQbyAXnRjgYndJk14Xt5XFwcmzdvZs6cOVSsWJEFCxbQqFGjJOuEhIRQtWpVcuXKZZB9hoaG8ttvvyUkvVevXqVy5co4Ojom3OrWrWs25UnPnz9n1qxZbNu2DQ8PD4YMGcL8+fMpV64cw4YNUzs8STI5cx0Rlu3TrNSaNWt4/fo1EydOTHNd2UdYv6pVq2Jra4u/v7/aoWRIaGgoJ06c4OOPP1Y7lEyxmj7CiRLcl8AToClwCzD1J4oQgp07d+Lg4ICXlxfe3t4cOXIkWRIMUKtWLYMkwVFRUUybNg1nZ2fOnDmDvb09K1eu5J9//iE4OJj169fzySef0KRJE9WT4KCgIPbs2cOmTZuoWbMmb968ISQkhGHDhhl9enRJSo3sI6yf/J9pxdasWcPLly+ZNGmS3vVkH2H9FEVh5MiRBpvS2lQWL17MmDFjLPY0rVX1EdYlwyGAHfAftCPBud553Hi7Fxw+fJhGjRoxf/58Fi9ejJ+fHy1btjTqfo8cOULt2rUJCwvj0qVLbNiwgfHjx9OkSRPs7OyMuu/M8PHxYfTo0Xz99dfs3LmT1atXW2zZlJR9yD7C+slE2MqtWbOGiIgIvcmwk5MT7dq1M2FUlmfIkCHs3LmTiIgItUNJl3v37rFjxw4mTJigdiiZZnU1wkIQDLwGIoAWiZYb06lTp2jRogXu7u5MnTqVCxcu0LlzZ6OWAT1+/JiBAwfy8ccfs3LlSjZv3kyJEiWMtr+sioqK4vPPP+frr7+mc+fOBAQE0LhxY7XDkiRA1ginRSbCEt7e3nqTYWdnZzp37mziqCxL8eLFadOmDZs3b1Y7lHRZsmQJgwcPtuj556dPn579W6clpiicAt4DLgAtjby7Cxcu0KlTJwYPHsyIESMSZk8z5il+IQTr1q3D3t6eEiVKcPnyZTp16mS0/RnC/v37qVWrFrdu3eLKlSusXbtWTo0smRV3d3eLfq83NpkIS4A2GX7+/DlTp05N9pisEU4fNzc3iyiPCA8PZ/369Xz22Wdqh5IlVlMjDAkXzJ1H2yXiBtDwnccM5cqVK/Tu3Zvu3bvTrVs3rl+/zpAhQ4ye3F2/fp1WrVrh5eXF4cOH+eabb8x6xP/OnTv07NmTSZMmsXr1arZs2cLjx4/Zu3ev2qFJUhKyRli/dCfCiqLkUBTloqIo+3X3NymKcl1RlMuKoqxTFCWXbrmNoig/KYpyRlGUWrplLRVFEYqidEu0vf2KorQ08OuRsmDdunWcPXs22XJZI5w+7dq148mTJ1y8eFHtUPRauXIlPXv2pGzZsmqHkiVWUyOcKNG9A5QDnND2Dk5pnazYvXs3LVu2pHHjxoSGhjJ27FijT4Tx5s0b5s2bR9OmTenVqxf+/v4m6zucGTExMSxatCihU0VwcHBC6VhgYKBFtiKUsjdLqRFWK8/MyIjwp8DVRPc3AdWB2mg7+YzULW8PnAN6AYmHnP4GPs/A/iQV5MiRg5iYmCTLZI1w+uTIkYMRI0aY9ajwq1evWLlyJdOmTVM7lCyzthrhJ8AbtAlwizTWzSxvb2+WLVvGlClTTHIx2qlTp6hbty4XLlzg4sWLfPrpp6ab3VBRUr+lwtfXl3r16uHr68u5c+eYNWtWkok5HBwc6NatW6rPlyQ1WFCNsCp5ZroSYUVRygBdAO/4ZUKIA0IH7Rm7MrqHcgAa3S3xO8qfwAtFUWRGZcaqV6+Or69vkmWyRjj9hg8fzpYtW8x2pHLNmjU0b948W0yQYm01wsfQzoAUAxwATht4+8+fP+fkyZN07drVwFtO7tmzZ7i5ufHRRx+xcOFCdu/ebdozFGmNoL/z+NWrVxk0aBCDBg1i/vz5+Pj4UKlSpWRPc3R0pFevXoaMVJKyzBJqhNXMM9M7IrwMmKrb6bvB5wIGAYd0iw6jHbDYCyx5Z/UFwMyMBCiZVqtWrTh69GiSZbJGOP3KlCmDs7Mz27ZtUzuUZGJiYvj222+ZMWOG2qEYhFXVCANBgC2wHhgF9Ef7qZGeQhyNRsPlTp1YpSgMUhQ8UhgB3bdvH61ataJAgQLGegkIIdiyZQs1a9Ykd+7chISE4OrqatqJaNK5r7eKwvbt22ndujWtWrWiYsWKXLlyRW+8QUFBskZYMjsWUiOsWp6Z5tUPiqJ0BR4LIS6kUmvxPXBSCHEKQAgRC/RLaVtCiFOKoqAoSrP0BBcVFUVoaChVqlQhIiKCmzdvkj9/fnnfiPcrV66c0EUi/vGzZ89y8+ZNihYtqnp8lnDfzc2NL7/8kjp16phFPPH3v/32W8qVK4ejo6NZxJPV+wsXLqRJkyY0adLELOIx2n207dLOoS2L8Ad6AzXQjgx3QVszPHDHDurUqUOVKlV49OgRe/fu5erVq1y/fp3TBw6QH2gEdAQ8AAH0Be32FYU1zZrRvXt3AKO8Hl9fX77++mueP3/Oxo0bKVy4MI8fP6ZgwYKq/D1vAvnjX3+i+3mBlcBaoMLixXz22We0adOGsLAwHjx4oHf7hw8fJjQ0lJYtW6b4+NOnTylXrpx5HV/yfra/v3TpUkqVKoW9vb1q8Tx8+DDVXE/NPDP+SXpvuvfMv4H/Ax4CUcBG3WOzgd2ATRrbaAns1/3eHm1Wvx9oqe95efPmFaNGjRJCCHHu3DlRr149ed8E952dnZPcP336tFiyZInZxGfu92NiYkSRIkVEjRo1zCIeIYQ4c+aMyJMnj+jatatZxGOI+yVLlhTDhg0zm3iMeX8uiDwgGoIYCuIciHogRoF4CWLcuHEiR44conz58qJx48YiT548ws7OTtSuXVvsaNpUHEi0vgDxM4gcIPrq7h8HYQNi6NChRvn/8Mknn4gcOXKIRo0aiZiYGNP+/d75e6V03x9EZRDlQRQG0RtEDcjw/nr16iV27tyZ6uOdOnUSjRs3FvXq1RP58uUTJUuWFC1atJD35f0M38+bN69wc3NL1/Hp7u4uateurer72YgRIwQQIMwszxRCpJ0I69nRSOAMkDcjz9PdPwfcTStAR0dHIZnWli1bxNixY9UOw+LNmDFDTJw4Ue0wEmzbtk04OTkJjUajdihSBt26dUsULVpUBIJ4CKIgiBe6BE77Fq717NkzsWbNGvHbb7+JV69e/buBxOsmuq0HUR1EhC4x7ppoW4bi7+8v6tSpI9q3by9u3bpl8O2nKZXXHn97BmIZiGogSoKYrPt7vPu3lSRzM3v2bLFgwQK1w8iQ1BLhxDdT55lCiCz1EV4FFAfOKooSpCjKFxl47kL+LXqWzIinpyfz589PskzWCGfciBEj+Pnnn3nz5o3aoSCEwMPDgxkzZpi2FtPIrKFGODY2lgEDBvC///2PekJQXAha9ezJ1tWr/03XdAoVKsTIkSNp2bJlujo+DAWaof2k2Ya2TMJQIiIi+OSTT+jRowfTpk3j0KFDVKxY0YB7SAc9x3og2tddAe2npTfwAdq/R1YmHJc1wpKpfPHFF2zfvp3Y2Ng017WQGuGUmCTPzFAiLIT4XQjRVfd7TiFEJSFEXd1tXnqep7u/VwihCCF+z8j+JeP6559/UBQlWZsV2Uc44ypVqoSDgwO7du1SOxSOHDlCdHR0tmvrZA19hOfOnUvBggX59NNPE5aNGDGCdevWGWT736GtjT0EdDfA9oQQ7Ny5k5o1axIdHc2VK1fo37+/WXwBiwZ+Ahqj7blUEbgG/AK4kPTS88ySfYQlU7GxsWHcuHFJ3htSYyl9hEGdPFPOAyklmDlzJhMmTEi23MnJKVu02zI1Nzc3Vq9eTb9+Kdb0m8TBgwcZMmQIa9euNerUuGrI7n2EfX198fb25uLFi0n+7Tp27MjHH3/MlStXqFmzZpb2YQvsAA4ChUA7ippolDkj7t69y/jx47l+/Tq//PILzZs3z1JshnIL7bDSBqAB2iajndH2XzI0BwcHChcubIQtS1JyI0eOpEGDBkREROjt9mJBfYTVkVbthJo3WSNsWg0bNlQ7hGwlOjpa/Pe//xU3b940+b41Go348ssvRcmSJcXJkydNvn8pa8LDw0XZsmWFj49Pio/PmDFDTJo0KX0bS6NONtktg2JjY8WyZctE0aJFxbx580R0dHSGt2FosbGxYi+IjiCK6mp/Q9N43e4g9sj6YMnCHDhwQLRt21a8fv1a7VDSRDpqhNW4Za8hIinTDh48mOrokqwRzpw8efIwaNAgvL29017ZgF6+fMkHH3zArl27OH/+PM2apb+LjCXJrjXCQghGjRpFr169Up3IZvjw4WzYsIGff/45/sIQVQQGBtK4cWP27NnD6dOnmTVrFnny5FEtnkePHvHll19SsWJFFgIfAWHA10DllJ6Q2t8uk39TWSMsmVqnTp3o27cvbdq0oU2bNimWMVpwjbBpqJ2J67vJEWHTadWqlXjw4EGKjy1ZskS4u7ubOKLs4cqVK6JEiRIiJiZGuyAdI3IXQSxNz8hdClcM37x5U9jb24thw4ZZxAhBVhQrVkw8fPhQ7TAMC4Q3iDogXqcxOvnHH3+IunXrijZt2ojQ0FC92zT0iHBkZKSYNGmSKF68uFi/fr2q3Ug0Go04deqU+Oijj0TBggXFiBEjREBAQIZfq7u7u9izZ0+WYlm7dm1CSz9JMrV79+6JIUOGiIYNG4qhQ4eKR48eCSGEqFKlirh+/brK0ckRYcmMvXz5kpiYGEqUKJHi405OTrRrJ2fGzowaNWpQqVIlfHx80j2j1X60Tf3TNHMmJOoOcPjwYZydnRk9ejRr167F1tY2UzFbimxVI6yb4e06MB3YjLZ+N8nj72jQoAF//PEHnTp1onHjxixcuJCYmBijh7pv3z5q1arFP//8w+XLlxk6dKgqF8NFRkbi5eWFg4MDI0aMoFGjRvz11194e3vj6OiY9qiuEUbSHRwcst1FqZLlKFWqFBs2bOD8+fP06tWL/v37A7JGOE1qZ+L6bnJE2DQmTpwo1q1bp3YY2daGDRtE5wyMyHUF8X8ZWF+zeLH46quvRMmSJYWvr6/aL1fKKN2/YzTaSR68MjFa+9dff4nOnTuLmjVrCj8/v1T3kZUR4b///lu4urqKKlWqiOPHjxvilWfKpUuXxNixY0XhwoWFq6urOHbsmP4R6XS+RkOMCEuSOXFxcVE7hCQw0xFh2TVCws/Pj2+++SbVx/39/YmIiKB9+/YmjCr76Nu3L9OGDmUv2o7fMwDPd9bpAbzQ/X4LGPLO4+XQtn561ytg+NSp3Khbl2HDhnHu3DnOnTsHkGqXiNRG79LqKpHWqF9G95fV5504cQIXF5dkI9+KotCoUSPq1q2r9/lmIdFrnIn23/nj4TSWlAAAFtdJREFUTGymfPny7N+/n23bttG3b1+6d+/OV199RaFChbQrCJG+MxIpjJLGxcXh5eXF3LlzGT16NJs2bTL52YaYmBh27drF999/T2hoKG5ubgQHB1OmTDrahBph5Dc1QUFBhIWFJUxVLUlqUhQFjUaDl5cX/fr1o0iRImqHZJZkImzl/Pz8qFixot4k6OzZs4SFhclEOJPs7OzYB7QFipE8CQb4GchHxhp73wZ6AvUBHx8fdu7cmfCYSOXDX6PRpLg8tfXTel5m92eI5x08eJAqVaqQP/+/UyDEP2/s2LGcOXNG7zZMKTY2lvDwcJ4+fZrw83mPHrxA+wUoP7AFuEjm+9kqisIHH3xA+/btmT59OrVq1WLp0qX07dtX+6VCCLh/H9zdYdu25BtI4d8iKCiIjz/+mDx58nDy5Elq1KiRyegyJywsjNWrV+Pt7U3NmjUZP348PXr0IFeuXCaNI70CAwPx8/OTibBkFipVqoSfnx/Lly+nXbt2MhFOhUyErdz8+fNZtWqV3nVkH+Gsa4i2X+tHaBPed6XeATJlR4GBaEcRPwGUUqX45JNPshSjpVEUhU8++YR8+ZL/RTPS5SQqKoonT57w9OlTnj17xrNnz3j+/DkvXrzgxYsXREZGEhkZycuXL3n58iVRUVHExcWhKEqKiXz88sQ/FUXBzs4OOzs78ufPT7716ymI9t+9BDAf6AoUzOwfI5FChQqxatUqBg8ezKhRo/jxxx/x9PSkfIUK+p/o5wcuLgC8evWKOXPm8OOPP+Lh4cGwYcNM3ofa29ubadOmMWDAAE6cOJHlnsmmIPsIS+akS5cu7Nq1S9YIp0EmwlYsOjqaiIgIKqTxAens7GyiiLK3nEATtKO4h4F6GXiuAO4Dl4Df0JZJ/Aq0MHCMlmT69OmpPnbt2jVatND+dVJKTBP/zJ07N3Z2duTLl4/33nuPggULkj9/fgoXLkylSpUoXLgwhQoVokiRIhQuXJiiRYuSO3fuzAeeQolCHbRfaqoBs4BBZP3N2dnZmcDAQL755hsaVKjAdLTTKNvpbnl55wxEs2YQGYmPry/jxo2jWbNmXL58mWLFimUxkox5+/YtkyZN4siRI5w5c8aivoQ7OjpqL9STJDPQtWtXVq5cydKlS9UOxazJRNiKLVy4MOGqUn1kjbBhvAVKA15oZ7Y6AaR0ovkVEAIE626XdD9zoE2YHIBzaOtJAaiXkZQ6+1iyZAmjRo1KcUS4Ro0a/P7776YPKi2p1Ok2Ao4Ap4AvgC+B2WjPICTMgJaJWtfcuXPzv88/5wNgErAC7fEVhXbKYVvgPbSJ8XuATf78RFeqhLe3N23bts3w/rLq6dOn9O3blzx58nDu3Ll/a5wthKwRlsyJra0tcXFxeHp6yhphPWQibMWOHDnC2bNn01xP1ggbhgZt/WdvtMlIe7R1oY/4N9kNBu4B1dEmvbWBbrrfi6e24cBAY4ZtthYtWsSAAQNSTIQtVTO0I/4n0I4MLwTmAH3j4rLU67Iy8O40DxrgNf8mxvE/7S9dIm/edDXwM6hLly7Ro0cP+vTpg4eHBzlyGGMSZOOSNcKSubGxsZE1wmmQibCVCggIoHTp0umq+5M1woYTPx44GG0SMpR/k94PgAVAFdL5H7NePatNgkF/H+G0Lv4zd62BVmhHib9o1IgFDg7MnTuXXr16Gaxnrw3aUeBkf0EVkuBdu3YxatQoli1bxoABA0y+f0ORNcKSubG3t6dq1aqyRlgPmQhbqdmzZ+ttmZaYrBE2jHf7IHxM5lplASZtCWWu9NUIqzHBg6EpQtABaC8EPj4+fPHFFyxYsIC5c+fStWvXbPEaNRoNCxYsYM2aNRw4cICGDRuqHVKWyBphydz07NmTbdu2UbRoUbVDMVtyZjkro9FoWL16NU+ePEl3KyR/f/8MXYUvpUAIBAb6D1e1qiG2YvGWLFnCy5cv1Q7DOBJ90VEUha5du3LhwgVmzZrF559/jpOTE4cOHUpx5Ds6OpqZM2dib2/PypUreW3KuFOjmzkv8e2Vrt3bwYMHOX/+vMUnwaCtEd67990iFElST6tWrTh+/DhPnz5VOxSzJRNhK7Fjxw7atm1L06ZN+euvvzh27Fi6n3v27FkOHjxoxOisg2bfvkz3iE3C19cQW7F4ixYt4tWrVyk+ZtGlEanErigKvXr1IigoiMmTJzNp0iRcXFw4fvx4wus9ffo09erV4+rVq3z77bccPXqUisA3gGpfGVIYuf4/wBnIv2MHv//+OyVLljR1VEYRGBjI7t271Q5DkhLkzJmT+/fvy0RYD1kakY2dPHmSRYsW8fTpU+rVq8dPP/1EqVKlMrwdWSNsOMqECbB8ue5OJtJiT08oUcKwQVmo1GqENRqNyXvepltaM7ylI4G3sbHhgw8+oHfv3mzZsoUxY8ZQsmRJqlWrxv79+1mxYgW9e/cGoG3btnjnzMkEtMnwX2jbpplMCq/VF+gHTAM+BRRb22xT6iNrhCVzVLp06ay1fMzmZCKczVy+fJm5c+dy9+5dKlasyJIlS7KcxMoaYcNINltaWklRgwYQEgI5ckC7dvD99zIJTiS1GuHY2Fjzrp9N7d89g8lgjhw5GDBgAB9++CGbNm3i8uXLXL58mZw5c7J9+3b279/PgQMHKA58hnYab0MnwSEhIRw9epS8efNSoEABChQoQMGCBRN+L4B21rz4eeBWoW0LtxFol3hD8TPfWThZIyyZI1dXV06fPk358uXVDsUsyUQ4G7hz5w5z5szh6tWrlCxZkunTp+Pk5GSw7cs+woYRFxeXvCWUgZIia5RaH+HY2Fjzb71lwH/fnDlz0qxZM54/f86HH36Iv78/TZs2pVu3bsycOZPKVaoA8Abt7HVzgaykai9fvuTXX3/F29ubO3fu0L17d+Li4oiIiEhye/HiBRFABJAH7YyKRYHTaNu5ZUeyj7BkjoQQbNq0yaI7shiTTIQtVHh4OAsWLOD06dMUKlQId3d3OnXqZJR9yT7ChqHRaFIeqZRJb6ak1kc4NjbWfEsjDOjmzZusXr2a/fv3Ex4eTpcuXRg7diy7du3ir7/+YsqUKXz22Wd0BQagncSlOOAEfK67pfdkqRCC8+fP4+3tzY4dO2jevDn/+9//6NixIzlz6vkYURQE2v7EL4AiaJPi7Er2EZbM0Z49e3B0dKRRo0YsWbIEF91U6pKWTIQtSFRUFF9//TWHDx8mT548DBs2jG+++cboH/qyRthwrCFBM5XUaoTNvjTCQM6cOcP69evRaDRMnjyZDz74ADs7O9zd3dm3bx8zZ87kp59+Yk/x4iwHRqJNhnOj7Ve9D/gR7aQtqXn69CkbN27E29ub6OhoRowYQUhISIYublNIpV9xNiRrhCVzNHbsWAYOHAjAsGHDmDNnDuvWraNcuXJpPNM6yETYzMXGxuLl5cWvv/4KQJ8+fTh58qT+URgDkzXChmHRnQzMkL4aYbMvjTCAwYMH079/f06ePMm2bdtwdnbm9evXjBkzhuvXrydMT+wmBG6KQhiwGfgTuIb2grXWaOuHJ/Pvh4FGo+G3337D29ubgwcP0q1bN1auXEnz5s2t4gtGVsgaYckcubu7J/y+b98+goOD6d+/P2XLlmXt2rXY2dmpGJ36ZCJsxkaNGsWlS5fo0KEDhw8fVu1glTXChpFqaYSUKfpqhK3l75wzZ05at25N69atWblyJZGRkQkJcBJCUE5RmIa2W8PfQGngQ2A4sBv4GjgJrK1cmYIFCzJy5Ei+//77rI1wpnVBaDYja4Qlc+Tp6Um/fv0SpliuU6cOfn5+7NmzBxcXFzp06MDChQut9oyldb5qC6DRaAgJCeHs2bPMmTNH1W9sso+wYQghrCZBM4XU+ghby4jwu3LkyJFyEhwv0RmJMmhLFt4HjgKD0E77fW/IELZv387FixcZN26cYU7zp+dMSDY5WyL7CEvmaPny5Sn2Ee7RoweBgYEULlyY+vXr89NPP6kQnfrkiLCZOnToELVr66veMx1ZI2wYZt3f1gKlViMshJB/59SkMEJrA4wDxnl6wtixxtsvZPsOKbJGWDJHY8eO5T//+U+qj0+dOpUWLVrQu3dvPvjgA2xtbU0YnfpkImym1q1bx8yZM9UOA5A1woYiE2HDstg+wmoTAh4+hOnT4fp1qFYNvvrKND2qs1HSmxJZIyyZo8Q1wil58uQJI0eO5Ouvv8bJyYlx48YxatQoE0WnPvmpbKYePHhA3bp11Q4D0NYIHzlyRO0wLJ68WM6wlixZwsuXyScOttbSiAwpUQI2bICzZ7U/5UQtBhEUFMTevXvVDkOSkvD09Ex1iuXY2Fg6dOjApk2b+Oijj7h48SKBgYE0bdqU0NBQE0eqDpkIm6GIiAhy5cqV9oomImuEDUOOCBuWrBGWzI2sEZbMUWo1wgCdO3fmf//7H3Xq1AG0LT5XrVrFTz/9xLBhwxg5ciSxsbGmDNfk5KeyGVq3bh0dO3ZUO4wETk5OtGvXLu0VJb3kxXKGlVqNcFxcnPw7S6pwcHCgW7duaochSUmkViM8evRonJ2d6dOnT7LHKlWqhJ+fH40bN8bR0ZEdO3aYIlRVyETYDO3bt8+s6nOcnZ3p3Lmz2mFkC3JE2HCmT5+erHUayBFhST2Ojo706tVL7TAkKQl3d3eKFi2aZNl3333H8+fPmTNnjt7njhw5knPnzrFt2zZat27N/fv3jRipOuSnshmKiopK9TSGGmSNsGFoNBq1Q8hWUqsRfvv2rUyEJVXIGmHJHL1bI3zs2DG2bt3KL7/8kq7n29rasmXLFr755ht69uzJlClTstXnmUyEzdDWrVvp3bs3ERERaocCyBphQ5ETahiWrBGWzI2sEZbMUeIa4du3bzNp0iSOHj2a4TOU9evX5/z58/z3v//F0dGR48ePGyNck5OJsBkqV64cP/zwA23atDGLb12yRtgwZI2wYemrEZYlKJIaZI2wZI7ia4RfvXpFz5492bdvX5Ym6Zo6dSq+vr4sW7aMLl268Pz5cwNGa3qyj7CZatKkCZ9++ildu3blwIEDqsYi+wgbhkajkSOVBpRaH2E58i6pRfYRlsyRu7s7Go2Gpk2bsnz5ct5///0sb7NAgQLs27ePkydP0rp1a/r27cuMGTMMEK3pyWETMzZw4EAcHR0ZPXq0qnHIGmHDkH2EDSu1GuG4uDhy5pTf8SXTkzXCkjny9PSkR48eDBo0iFatWhl0282bNycgIICIiAgaNGhAQECAQbdvCjIRNnPz588nIiKClStXqhaDrBE2DNlH2LD01QjLv7OkBlkjLJmjWbNmUbBgQcYaaQp1GxsbPDw8OHDgADNmzKBPnz5ERUUZZV/GID8tLMDGjRvZtm2bavuXNcKGIWuEDUvWCEvmRtYIS+Zm06ZNFC9enGXLlhl9X8WKFePo0aMMHjyYJk2a4OXlZfR9GoL8tLAAan+oyz7ChqP2v2V2oq+PsCyNkNQg+whL5uSPP/5g2bJlhISEJOsjbEzdu3fn4sWLXLp0CWdnZ65fv26yfWeG/FSW0iRrhA3DHDqAZCf6aoTlyLukBlkjLJmLR48eMXz4cI4cOYKXl5fJ5yawsbHh+++/Z/Pmzbi5uZnVJGHvkomwlCZZI2wYsjTCsFKrEZYXy0mZldULWmWNsGQOYmJi6NixI5s3b6Zw4cJJ+gib2vvvv8/JkyeZOHGiKvtPD/lpYSG6d++u2r6dnJyoVq2aavvPLurVq0dsbKzaYWQbqdUIV61aldy5c6sQkWTJmjdvTqVKlbK0DQcHBwoXLmygiCQpcw4ePMjs2bOxt7cH/u0jrKYaNWqoun99FHNu6aQoyhPgjtpxSJIkSZIkSVnyvhDiv2oH8S6zToQlSZIkSZIkyVhkjbAkSZIkSZJklWQiLEmSJEmSJFklmQhLkiRJkiRJVkkmwpIkSZIkSZJVkomwlVIU5VNFUS4rihKiKIq7btl/FEU5qihKqO5nYd1yG0VRflIU5YyiKLV0yy4qilJX93tORVFeKYoyMNH2LyiKUl+N1yZZLkVRJuqOycuKomxWFMVWUZQNiqL8pShKkO4Wf9zJ41IyulSOyQqKopzTvVduVRQlt27dfIqi7FUU5YSiKKUUrX8SvZeWVBRFKIrikmj7TxRFKaLW65Msj6Io1RK9HwYpihKhKIq7oihzFEW5l2h550TP+VpRlABFUVro7u9SFKVnosevK4oyM9H9HYqiuJr2lalDJsJWSFEUe8ANaAQ4AF0VRakCTAeOCyGqAMd19wHaA+eAXsBnumVnAGfd7w7A9fj7iqK8B1QE/jT6i5GyDUVRSgMTgAZCCHsgB9BP9/AUIURd3S1It0wel5JR6TkmFwFLde+Vz4ARuqcMBH4APgUmCG1bpnNAE93jzsBF/j0mqwH/CCHUme1AskhCiOvx74eAIxAF7NI9vDTRe+UBAEVRquseaw6M0/2e8F6p+yL2kn+PU3S/nzHuKzEPMhG2TjUAfyFElBAiFvBFm0z0AH7UrfMjEP9tMQeg0d3ip0Y7zb8JhzOwCqiru98ICBRCxBnzRUjZUk4gr6IoOQE74L6edeVxKZnCu8fkA6A1sF33eEbfK5eQNDG2imRDMpo2wC0hhL45F+KPS0Hqx+V+4L+6sxgVgNdCiIdGitmsyETYOl0GmiuKUkRRFDugM1AWKC6EeACg+1lMt/5hoAWwF+2bOCQdeXMGTgJvFEXJr7t/2hQvRMo+hBD3gG+AMLTJxgshxBHdwwsVRQlWFGWpoih5dMvkcSkZVUrHJHABeK4bRAD4Gyit+30T2hHklcAK3bLEx2QjYDfa91uQx6SUdf2AzYnuf6J7r1wXX5IjhAhB+yXOD/DSrXcBsNeV9TgDZ9GeQauBlR2XMhG2QkKIq2hP7R0FDqE9VZzq3L9CiFghRD8hRBMhxCXdsv8DciuKUgKojvY/0B+AE3KUQ8oE3Zt2D6ACUAp4T1ffOwPtMdYQ+A8wDeRxKRlfSsck0CmFVQWAEOK5EKKTEKKVEOJv3WPngXq60pxcQoiXwG1FUSojj0kpC3RJbHdgm26RF1AJ7VmwB8C38esKIcYLIRyFECd0998AIUB9oDHaEp6zaI9JqzouZSJspYQQa4UQ9YUQzYFwIBR4pChKSdBe1AE8TmMzZ4E+wANdLZw/0BTtqIe/0YKXsqu2wF9CiCdCiLfATsBZCPFAaL0B1qM9vvSRx6VkKCkek0AhXakEQBn0lPAIIaKAm8BwIFC32B/tmbhiaL+sSVJmdEJb7vUIQAjxSAgRJ4TQAGtI+73yDNq64fxCiGdoj8v4RFiOCEvZm6IoxXQ/ywGuaE+t7AWG6FYZAuxJYzOngYloEw90PwcDD4UQzw0ds5TthQGNFUWxUxRFQVv7djXRlzMFbS3m5TS2I49LyVBSOiavAL+h/bIF6X+vdCfpMfkp2ms1hMGjlqzFRyQqi4h/r9TpRfreKz/m3wuIg9GODpdDO1psFWQibL12KIpyBdgHjNN9G/wKaKcoSijQTndfn9Nor8I/Cwl1xTmwolMqkuEIIc6hvQApELiE9v1pNbBJUZRLumVFgQVpbEoel5JB6DkmpwGTFEW5CRQB1qaxqSTHpG57ZZDHpJRJuut72qE9SxFvsaIolxRFCQZaoR0Q0OcMSd8rY9GeCQ7QjSpbBUV+GZUkSZIkSZKskRwRliRJkiRJkqySTIQlSZIkSZIkqyQTYUmSJEmSJMkqyURYkiRJkiRJskoyEZYkSZIkSZKskkyEJUmSJEmSJKskE2FJkiRJkiTJKslEWJIkSZIkSbJK/w8O7fd7NKfPXAAAAABJRU5ErkJggg==\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"data=Iron\n",
"fig = plt.figure(figsize=(15, 7))\n",
"m = Basemap(projection='merc',llcrnrlon=-93,llcrnrlat=41,urcrnrlon=-74,urcrnrlat=49.1, lat_ts=0, resolution='l')\n",
"ax = fig.add_subplot(111)\n",
"\n",
"lat = data['LAT'].values\n",
"lon = data['LON'].values\n",
"\n",
"m.scatter(lon, lat, latlon=True, c='r', label='O', s=50)#cmap='Reds', alpha=0.5)\n",
"m.drawparallels(np.arange(40,60,2),labels=[True,True,False,False],dashes=[2,2])\n",
"m.drawmeridians(np.arange(-95,-70,5),labels=[False,False,False,True],dashes=[2,2])\n",
"\n",
"m.drawcountries(linewidth=1)\n",
"m.drawcoastlines()\n",
"m.drawstates()\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Index(['Two Harbors', 'Silver Bay', 'Duluth-Superior', 'Presque Isle',\n",
" 'St Marys River', 'St Clair', 'Detroit River', 'W Lake Erie',\n",
" 'Welland Canal', 'Mackinaw Straits', 'S.Lake Michigan',\n",
" 'E.Lake Ontario', 'Thunder Bay', 'Nanticoke', 'Hamilton',\n",
" 'Indiana Harbor', 'Gary', 'Burns Harbor', 'Detroit', 'Dearborn',\n",
" 'Toledo', 'Cleveland', 'Ashtabula', 'Conneaut'],\n",
" dtype='object')"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"features.index"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"155\n"
]
},
{
"data": {
"text/html": [
"
\n",
"\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"\n",
"\n",
" \n",
" \n",
" \n",
" Cargo\n",
" Draft\n",
" Duration\n",
" LAT\n",
" LON\n",
" MMSI\n",
" Position\n",
" SOG\n",
" Status\n",
" VesselName\n",
" from_LAT\n",
" from_LON\n",
" \n",
" \n",
" \n",
" \n",
" 2015-04-15 13:29:14\n",
" 70.0\n",
" 10.38\n",
" 783.0\n",
" 46.10950\n",
" -84.01477\n",
" 366906610.0\n",
" Arrive St Marys River\n",
" 10.8\n",
" under way using engine\n",
" WALTER J MCCARTHY JR\n",
" 45.81536\n",
" -84.72834\n",
" \n",
" \n",
" 2015-04-19 16:50:26\n",
" 70.0\n",
" 10.38\n",
" 2107.0\n",
" 46.76845\n",
" -84.90162\n",
" 366906610.0\n",
" Arrive St Marys River\n",
" 8.7\n",
" under way using engine\n",
" WALTER J MCCARTHY JR\n",
" 47.01222\n",
" -91.60329\n",
" \n",
" \n",
" 2015-04-23 23:08:52\n",
" 70.0\n",
" 10.38\n",
" 342.0\n",
" 46.10766\n",
" -84.01453\n",
" 366906610.0\n",
" Arrive St Marys River\n",
" 10.6\n",
" under way using engine\n",
" WALTER J MCCARTHY JR\n",
" 45.81527\n",
" -84.72916\n",
" \n",
" \n",
" 2015-04-27 22:50:07\n",
" 70.0\n",
" 10.38\n",
" 1507.0\n",
" 46.76988\n",
" -84.90471\n",
" 366906610.0\n",
" Arrive St Marys River\n",
" 5.1\n",
" under way using engine\n",
" WALTER J MCCARTHY JR\n",
" 46.77000\n",
" -91.85316\n",
" \n",
" \n",
" 2015-05-02 10:49:54\n",
" 70.0\n",
" 10.38\n",
" 238.0\n",
" 46.10943\n",
" -84.01445\n",
" 366906610.0\n",
" Arrive St Marys River\n",
" 11.8\n",
" under way using engine\n",
" WALTER J MCCARTHY JR\n",
" 45.81613\n",
" -84.72865\n",
" \n",
" \n",
" ...\n",
" ...\n",
" ...\n",
" ...\n",
" ...\n",
" ...\n",
" ...\n",
" ...\n",
" ...\n",
" ...\n",
" ...\n",
" ...\n",
" ...\n",
" \n",
" \n",
" 2017-12-11 10:28:45\n",
" 70.0\n",
" 10.40\n",
" 1014.0\n",
" 46.10752\n",
" -84.01467\n",
" 366906610.0\n",
" Arrive St Marys River\n",
" 11.4\n",
" under way using engine\n",
" WALTER J MCCARTHY JR\n",
" 43.01278\n",
" -82.41584\n",
" \n",
" \n",
" 2017-12-14 23:02:27\n",
" 70.0\n",
" 10.40\n",
" 1531.0\n",
" 46.76843\n",
" -84.90160\n",
" 366906610.0\n",
" Arrive St Marys River\n",
" 11.9\n",
" under way using engine\n",
" WALTER J MCCARTHY JR\n",
" 46.98976\n",
" -91.60309\n",
" \n",
" \n",
" 2017-12-19 23:18:36\n",
" 70.0\n",
" 10.40\n",
" 1143.0\n",
" 46.10826\n",
" -84.01460\n",
" 366906610.0\n",
" Arrive St Marys River\n",
" 9.1\n",
" at anchor\n",
" WALTER J MCCARTHY JR\n",
" 43.01399\n",
" -82.41614\n",
" \n",
" \n",
" 2017-12-23 15:31:17\n",
" 70.0\n",
" 10.40\n",
" 1431.0\n",
" 46.76912\n",
" -84.90166\n",
" 366906610.0\n",
" Arrive St Marys River\n",
" 12.0\n",
" at anchor\n",
" WALTER J MCCARTHY JR\n",
" 47.01153\n",
" -91.60700\n",
" \n",
" \n",
" 2017-12-27 21:35:21\n",
" 70.0\n",
" 10.40\n",
" 254.0\n",
" 46.10772\n",
" -84.01464\n",
" 366906610.0\n",
" Arrive St Marys River\n",
" 9.1\n",
" under way using engine\n",
" WALTER J MCCARTHY JR\n",
" 45.81556\n",
" -84.72633\n",
" \n",
" \n",
"\n",
"

155 rows × 12 columns

\n",
"
"
],
"text/plain": [
" Cargo Draft Duration LAT LON MMSI \\\n",
"2015-04-15 13:29:14 70.0 10.38 783.0 46.10950 -84.01477 366906610.0 \n",
"2015-04-19 16:50:26 70.0 10.38 2107.0 46.76845 -84.90162 366906610.0 \n",
"2015-04-23 23:08:52 70.0 10.38 342.0 46.10766 -84.01453 366906610.0 \n",
"2015-04-27 22:50:07 70.0 10.38 1507.0 46.76988 -84.90471 366906610.0 \n",
"2015-05-02 10:49:54 70.0 10.38 238.0 46.10943 -84.01445 366906610.0 \n",
"... ... ... ... ... ... ... \n",
"2017-12-11 10:28:45 70.0 10.40 1014.0 46.10752 -84.01467 366906610.0 \n",
"2017-12-14 23:02:27 70.0 10.40 1531.0 46.76843 -84.90160 366906610.0 \n",
"2017-12-19 23:18:36 70.0 10.40 1143.0 46.10826 -84.01460 366906610.0 \n",
"2017-12-23 15:31:17 70.0 10.40 1431.0 46.76912 -84.90166 366906610.0 \n",
"2017-12-27 21:35:21 70.0 10.40 254.0 46.10772 -84.01464 366906610.0 \n",
"\n",
" Position SOG Status \\\n",
"2015-04-15 13:29:14 Arrive St Marys River 10.8 under way using engine \n",
"2015-04-19 16:50:26 Arrive St Marys River 8.7 under way using engine \n",
"2015-04-23 23:08:52 Arrive St Marys River 10.6 under way using engine \n",
"2015-04-27 22:50:07 Arrive St Marys River 5.1 under way using engine \n",
"2015-05-02 10:49:54 Arrive St Marys River 11.8 under way using engine \n",
"... ... ... ... \n",
"2017-12-11 10:28:45 Arrive St Marys River 11.4 under way using engine \n",
"2017-12-14 23:02:27 Arrive St Marys River 11.9 under way using engine \n",
"2017-12-19 23:18:36 Arrive St Marys River 9.1 at anchor \n",
"2017-12-23 15:31:17 Arrive St Marys River 12.0 at anchor \n",
"2017-12-27 21:35:21 Arrive St Marys River 9.1 under way using engine \n",
"\n",
" VesselName from_LAT from_LON \n",
"2015-04-15 13:29:14 WALTER J MCCARTHY JR 45.81536 -84.72834 \n",
"2015-04-19 16:50:26 WALTER J MCCARTHY JR 47.01222 -91.60329 \n",
"2015-04-23 23:08:52 WALTER J MCCARTHY JR 45.81527 -84.72916 \n",
"2015-04-27 22:50:07 WALTER J MCCARTHY JR 46.77000 -91.85316 \n",
"2015-05-02 10:49:54 WALTER J MCCARTHY JR 45.81613 -84.72865 \n",
"... ... ... ... \n",
"2017-12-11 10:28:45 WALTER J MCCARTHY JR 43.01278 -82.41584 \n",
"2017-12-14 23:02:27 WALTER J MCCARTHY JR 46.98976 -91.60309 \n",
"2017-12-19 23:18:36 WALTER J MCCARTHY JR 43.01399 -82.41614 \n",
"2017-12-23 15:31:17 WALTER J MCCARTHY JR 47.01153 -91.60700 \n",
"2017-12-27 21:35:21 WALTER J MCCARTHY JR 45.81556 -84.72633 \n",
"\n",
"[155 rows x 12 columns]"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"for vessel in vessels:\n",
" df=Iron.loc[Iron.VesselName==vessel] #subset of data for single vessel\n",
" Points=pd.DataFrame()\n",
" feature='St Marys River' \n",
" #boundaries from the feature matrix\n",
" E=features.loc[feature,'East']\n",
" W=features.loc[feature,'West']\n",
" N=features.loc[feature,'North']\n",
" S=features.loc[feature,'South']\n",
"\n",
" df1=df.loc[(df.LAT<=N)&(df.LAT>=S)&(df.LON<=E)&(df.LON>=W)] #subset of data for single geographic feature\n",
"\n",
" #creating a list of unique dates in the index\n",
" datelist=np.unique(df1.index.date)\n",
" #This eliminates the second of any two contiguos dates. Necessary when vessels are in a feature overnight\n",
" dates=datelist[(datelist-np.roll(datelist,1))!=pd.Timedelta(days=1)] \n",
"\n",
" for date in dates:\n",
" #identifying the minimum timestamp for each date and recording it, along with a position description\n",
" df2=df1.loc[(df1.index.date==date)]\n",
" arrive=df2.loc[min(df2.index)]\n",
" arrive['Position']=f'Arrive {feature}'\n",
" Points=Points.append(arrive)\n",
"print(len(Points))\n",
"Points"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"AMERICAN CENTURY has 1158 points.\n",
"AMERICAN INTEGRITY has 1238 points.\n",
"AMERICAN SPIRIT has 1106 points.\n",
"BUFFALO has 995 points.\n",
"BURNS HARBOR has 1166 points.\n",
"CASON J CALLAWAY has 1027 points.\n",
"CSL ASSINIBOINE has 885 points.\n",
"CSL LAURENTIEN has 921 points.\n",
"CSL NIAGARA has 918 points.\n",
"EDGAR B SPEER has 1395 points.\n",
"EDWIN H GOTT has 1511 points.\n",
"HERBERT C JACKSON has 886 points.\n",
"HON JAMES L OBERSTAR has 1388 points.\n",
"JAMES R BARKER has 1090 points.\n",
"JOHN G MUNSON has 549 points.\n",
"JOSEPH L BLOCK has 1032 points.\n",
"JOYCE L VANENKEVORT has 1269 points.\n",
"KAYE E BARKER has 1257 points.\n",
"LEE A TREGURTHA has 1285 points.\n",
"MESABI MINER has 1197 points.\n",
"PHILIP R CLARKE has 1007 points.\n",
"PRESQUE ISLE has 1108 points.\n",
"ROGER BLOUGH has 1218 points.\n",
"RT HON PAUL J MARTIN has 856 points.\n",
"SAM LAUD has 913 points.\n",
"STEWART J CORT has 1294 points.\n",
"THUNDER BAY has 985 points.\n",
"TUG CLYDE S VANENKEVORT has 408 points.\n",
"VICTORY has 1116 points.\n",
"WALTER J MCCARTHY JR has 869 points.\n"
]
},
{
"data": {
"text/html": [
"
\n",
"\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"\n",
"\n",
" \n",
" \n",
" \n",
" Cargo\n",
" Draft\n",
" Duration\n",
" LAT\n",
" LON\n",
" MMSI\n",
" Position\n",
" SOG\n",
" Status\n",
" VesselName\n",
" from_LAT\n",
" from_LON\n",
" From\n",
" \n",
" \n",
" \n",
" \n",
" 2015-03-01 03:14:00\n",
" 70.0\n",
" 8.03\n",
" 0 days 00:00:00\n",
" 41.69872\n",
" -83.45046\n",
" 366971350.0\n",
" Depart Toledo\n",
" 0.1\n",
" under way using engine\n",
" PHILIP R CLARKE\n",
" NaN\n",
" NaN\n",
" Arrive Toledo\n",
" \n",
" \n",
" 2015-03-01 03:14:00\n",
" 70.0\n",
" 8.03\n",
" NaT\n",
" 41.69872\n",
" -83.45046\n",
" 366971350.0\n",
" Arrive Toledo\n",
" 0.1\n",
" under way using engine\n",
" PHILIP R CLARKE\n",
" NaN\n",
" NaN\n",
" NaN\n",
" \n",
" \n",
" 2015-03-02 16:50:01\n",
" 0.0\n",
" 9.01\n",
" NaT\n",
" 42.88318\n",
" -79.24848\n",
" 316001635.0\n",
" Arrive Welland Canal\n",
" 0.0\n",
" under way sailing\n",
" RT HON PAUL J MARTIN\n",
" NaN\n",
" NaN\n",
" NaN\n",
" \n",
" \n",
" 2015-03-02 19:26:23\n",
" 0.0\n",
" 9.01\n",
" 0 days 02:36:22\n",
" 42.88314\n",
" -79.24848\n",
" 316001635.0\n",
" Depart Welland Canal\n",
" 0.0\n",
" under way sailing\n",
" RT HON PAUL J MARTIN\n",
" 42.88314\n",
" -79.24848\n",
" Arrive Welland Canal\n",
" \n",
" \n",
" 2015-03-03 11:28:41\n",
" 70.0\n",
" 8.03\n",
" 2 days 08:14:41\n",
" 41.69873\n",
" -83.45055\n",
" 366971350.0\n",
" Arrive Toledo\n",
" 0.1\n",
" under way using engine\n",
" PHILIP R CLARKE\n",
" 41.69872\n",
" -83.45046\n",
" Depart Toledo\n",
" \n",
" \n",
"\n",
"
"
],
"text/plain": [
" Cargo Draft Duration LAT LON \\\n",
"2015-03-01 03:14:00 70.0 8.03 0 days 00:00:00 41.69872 -83.45046 \n",
"2015-03-01 03:14:00 70.0 8.03 NaT 41.69872 -83.45046 \n",
"2015-03-02 16:50:01 0.0 9.01 NaT 42.88318 -79.24848 \n",
"2015-03-02 19:26:23 0.0 9.01 0 days 02:36:22 42.88314 -79.24848 \n",
"2015-03-03 11:28:41 70.0 8.03 2 days 08:14:41 41.69873 -83.45055 \n",
"\n",
" MMSI Position SOG \\\n",
"2015-03-01 03:14:00 366971350.0 Depart Toledo 0.1 \n",
"2015-03-01 03:14:00 366971350.0 Arrive Toledo 0.1 \n",
"2015-03-02 16:50:01 316001635.0 Arrive Welland Canal 0.0 \n",
"2015-03-02 19:26:23 316001635.0 Depart Welland Canal 0.0 \n",
"2015-03-03 11:28:41 366971350.0 Arrive Toledo 0.1 \n",
"\n",
" Status VesselName from_LAT \\\n",
"2015-03-01 03:14:00 under way using engine PHILIP R CLARKE NaN \n",
"2015-03-01 03:14:00 under way using engine PHILIP R CLARKE NaN \n",
"2015-03-02 16:50:01 under way sailing RT HON PAUL J MARTIN NaN \n",
"2015-03-02 19:26:23 under way sailing RT HON PAUL J MARTIN 42.88314 \n",
"2015-03-03 11:28:41 under way using engine PHILIP R CLARKE 41.69872 \n",
"\n",
" from_LON From \n",
"2015-03-01 03:14:00 NaN Arrive Toledo \n",
"2015-03-01 03:14:00 NaN NaN \n",
"2015-03-02 16:50:01 NaN NaN \n",
"2015-03-02 19:26:23 -79.24848 Arrive Welland Canal \n",
"2015-03-03 11:28:41 -83.45046 Depart Toledo "
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#This cell records minimum and maximum (for infrastructure only) times for each ship in each feature\n",
"\n",
"Inf = ['Two Harbors','Silver Bay','Duluth-Superior','Presque Isle','St Marys River','Welland Canal',\n",
" 'Thunder Bay','Nanticoke','Hamilton','Indiana Harbor','Gary','Burns Harbor','Detroit','Dearborn',\n",
" 'Toledo','Cleveland','Ashtabula','Conneaut']\n",
"Trips=pd.DataFrame()\n",
"for vessel in vessels:\n",
" df=Iron.loc[Iron.VesselName==vessel] #subset of data for single vessel\n",
" Points=pd.DataFrame()\n",
" for feature in features.index: \n",
" #boundaries from the feature matrix\n",
" E=features.loc[feature,'East']\n",
" W=features.loc[feature,'West']\n",
" N=features.loc[feature,'North']\n",
" S=features.loc[feature,'South']\n",
"\n",
" df1=df.loc[(df.LAT<=N)&(df.LAT>=S)&(df.LON<=E)&(df.LON>=W)] #subset of data for single geographic feature\n",
" \n",
" #creating a list of unique dates in the index\n",
" datelist=np.unique(df1.index.date)\n",
" #This eliminates the second of any two contiguos dates. Necessary when vessels are in a feature overnight\n",
" dates=datelist[(datelist-np.roll(datelist,1))!=pd.Timedelta(days=1)] \n",
" \n",
" for date in dates:\n",
" #identifying the minimum timestamp for each date and recording it, along with a position description\n",
" df2=df1.loc[(df1.index.date==date)]\n",
" arrive=df2.loc[min(df2.index)]\n",
" arrive['Position']=f'Arrive {feature}'\n",
" Points=Points.append(arrive)\n",
"\n",
" #Conditional statement for harbors and lock infrastructure. Only record a departure time for thos features \n",
" if feature in Inf:\n",
" datelist=np.unique(df1.index.date)\n",
" #This eliminates the first of any two contiguos dates. Necessary when vessels are in a feature overnight\n",
" dates=datelist[(datelist-np.roll(datelist,-1))!=pd.Timedelta(days=-1)]\n",
" for date in dates:\n",
" #identifying the minimum timestamp for each date and recording it, along with a position description\n",
" df2=df1.loc[(df1.index.date==date)]\n",
" depart=df2.loc[max(df2.index)]\n",
" depart['Position']=f'Depart {feature}'\n",
" Points=Points.append(depart)\n",
"\n",
" print(f'{vessel} has {len(Points)} points.')\n",
" Points=Points.sort_index()\n",
" Points.Duration=Points.index.to_series().diff() #recalculating trip duration based on the captured data\n",
" Points['From']=Points.Position.shift()\n",
" Trips=Trips.append(Points)\n",
"Trips=Trips.sort_index()\n",
"Trips.head()"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"32047"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(Trips)"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"4604\n"
]
},
{
"data": {
"text/html": [
"
\n",
"\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"\n",
"\n",
" \n",
" \n",
" \n",
" Cargo\n",
" Draft\n",
" Duration\n",
" LAT\n",
" LON\n",
" MMSI\n",
" Position\n",
" SOG\n",
" Status\n",
" VesselName\n",
" from_LAT\n",
" from_LON\n",
" From\n",
" \n",
" \n",
" \n",
" \n",
" 2015-03-26 18:36:48\n",
" 75.0\n",
" 9.77\n",
" 2 days 13:31:44\n",
" 46.76976\n",
" -84.90145\n",
" 366971370.0\n",
" Depart St Marys River\n",
" 6.8\n",
" under way using engine\n",
" EDWIN H GOTT\n",
" 46.76789\n",
" -84.89990\n",
" Arrive St Marys River\n",
" \n",
" \n",
" 2015-03-26 18:46:36\n",
" 70.0\n",
" 8.51\n",
" 2 days 06:05:28\n",
" 46.76783\n",
" -84.89953\n",
" 366972030.0\n",
" Depart St Marys River\n",
" 9.9\n",
" under way using engine\n",
" ROGER BLOUGH\n",
" 46.76527\n",
" -84.89710\n",
" Arrive St Marys River\n",
" \n",
" \n",
" 2015-03-28 19:27:17\n",
" 70.0\n",
" 8.15\n",
" 1 days 00:38:51\n",
" 46.10724\n",
" -84.01422\n",
" 366971360.0\n",
" Depart St Marys River\n",
" 8.3\n",
" under way using engine\n",
" JOHN G MUNSON\n",
" 46.10983\n",
" -84.01380\n",
" Arrive St Marys River\n",
" \n",
" \n",
" 2015-03-31 14:15:16\n",
" 70.0\n",
" 8.03\n",
" 2 days 05:39:00\n",
" 46.76920\n",
" -84.90083\n",
" 366971350.0\n",
" Depart St Marys River\n",
" 6.7\n",
" under way using engine\n",
" PHILIP R CLARKE\n",
" 46.76751\n",
" -84.89928\n",
" Arrive St Marys River\n",
" \n",
" \n",
" 2015-04-02 14:56:03\n",
" 70.0\n",
" 8.52\n",
" 1 days 18:08:20\n",
" 46.76925\n",
" -84.90090\n",
" 367050550.0\n",
" Depart St Marys River\n",
" 10.3\n",
" under way using engine\n",
" STEWART J CORT\n",
" 46.76687\n",
" -84.89865\n",
" Arrive St Marys River\n",
" \n",
" \n",
" ...\n",
" ...\n",
" ...\n",
" ...\n",
" ...\n",
" ...\n",
" ...\n",
" ...\n",
" ...\n",
" ...\n",
" ...\n",
" ...\n",
" ...\n",
" ...\n",
" \n",
" \n",
" 2017-12-31 08:35:46\n",
" 70.0\n",
" 8.20\n",
" 0 days 07:36:27\n",
" 46.76726\n",
" -84.85710\n",
" 366971360.0\n",
" Depart St Marys River\n",
" 14.4\n",
" under way using engine\n",
" JOHN G MUNSON\n",
" 46.75920\n",
" -84.85346\n",
" Arrive St Marys River\n",
" \n",
" \n",
" 2017-12-31 15:15:50\n",
" 70.0\n",
" 9.00\n",
" 0 days 13:13:59\n",
" 46.10797\n",
" -84.01491\n",
" 316029000.0\n",
" Depart St Marys River\n",
" 8.3\n",
" under way using engine\n",
" CSL NIAGARA\n",
" 46.11064\n",
" -84.01456\n",
" Arrive St Marys River\n",
" \n",
" \n",
" 2017-12-31 17:38:25\n",
" NaN\n",
" NaN\n",
" 0 days 12:52:50\n",
" 46.10703\n",
" -84.01505\n",
" 366930730.0\n",
" Depart St Marys River\n",
" 7.3\n",
" under way using engine\n",
" AMERICAN SPIRIT\n",
" 46.11168\n",
" -84.01447\n",
" Arrive St Marys River\n",
" \n",
" \n",
" 2017-12-31 23:58:46\n",
" NaN\n",
" NaN\n",
" 0 days 12:38:19\n",
" 46.46353\n",
" -84.57252\n",
" 366971340.0\n",
" Depart St Marys River\n",
" 0.1\n",
" at anchor\n",
" CASON J CALLAWAY\n",
" 46.46355\n",
" -84.57252\n",
" Arrive St Marys River\n",
" \n",
" \n",
" 2017-12-31 23:58:52\n",
" NaN\n",
" NaN\n",
" 0 days 11:37:40\n",
" 46.56716\n",
" -84.68026\n",
" 316023339.0\n",
" Depart St Marys River\n",
" 6.7\n",
" under way using engine\n",
" THUNDER BAY\n",
" 46.56533\n",
" -84.67849\n",
" Arrive St Marys River\n",
" \n",
" \n",
"\n",
"

4604 rows × 13 columns

\n",
"
"
],
"text/plain": [
" Cargo Draft Duration LAT LON \\\n",
"2015-03-26 18:36:48 75.0 9.77 2 days 13:31:44 46.76976 -84.90145 \n",
"2015-03-26 18:46:36 70.0 8.51 2 days 06:05:28 46.76783 -84.89953 \n",
"2015-03-28 19:27:17 70.0 8.15 1 days 00:38:51 46.10724 -84.01422 \n",
"2015-03-31 14:15:16 70.0 8.03 2 days 05:39:00 46.76920 -84.90083 \n",
"2015-04-02 14:56:03 70.0 8.52 1 days 18:08:20 46.76925 -84.90090 \n",
"... ... ... ... ... ... \n",
"2017-12-31 08:35:46 70.0 8.20 0 days 07:36:27 46.76726 -84.85710 \n",
"2017-12-31 15:15:50 70.0 9.00 0 days 13:13:59 46.10797 -84.01491 \n",
"2017-12-31 17:38:25 NaN NaN 0 days 12:52:50 46.10703 -84.01505 \n",
"2017-12-31 23:58:46 NaN NaN 0 days 12:38:19 46.46353 -84.57252 \n",
"2017-12-31 23:58:52 NaN NaN 0 days 11:37:40 46.56716 -84.68026 \n",
"\n",
" MMSI Position SOG \\\n",
"2015-03-26 18:36:48 366971370.0 Depart St Marys River 6.8 \n",
"2015-03-26 18:46:36 366972030.0 Depart St Marys River 9.9 \n",
"2015-03-28 19:27:17 366971360.0 Depart St Marys River 8.3 \n",
"2015-03-31 14:15:16 366971350.0 Depart St Marys River 6.7 \n",
"2015-04-02 14:56:03 367050550.0 Depart St Marys River 10.3 \n",
"... ... ... ... \n",
"2017-12-31 08:35:46 366971360.0 Depart St Marys River 14.4 \n",
"2017-12-31 15:15:50 316029000.0 Depart St Marys River 8.3 \n",
"2017-12-31 17:38:25 366930730.0 Depart St Marys River 7.3 \n",
"2017-12-31 23:58:46 366971340.0 Depart St Marys River 0.1 \n",
"2017-12-31 23:58:52 316023339.0 Depart St Marys River 6.7 \n",
"\n",
" Status VesselName from_LAT \\\n",
"2015-03-26 18:36:48 under way using engine EDWIN H GOTT 46.76789 \n",
"2015-03-26 18:46:36 under way using engine ROGER BLOUGH 46.76527 \n",
"2015-03-28 19:27:17 under way using engine JOHN G MUNSON 46.10983 \n",
"2015-03-31 14:15:16 under way using engine PHILIP R CLARKE 46.76751 \n",
"2015-04-02 14:56:03 under way using engine STEWART J CORT 46.76687 \n",
"... ... ... ... \n",
"2017-12-31 08:35:46 under way using engine JOHN G MUNSON 46.75920 \n",
"2017-12-31 15:15:50 under way using engine CSL NIAGARA 46.11064 \n",
"2017-12-31 17:38:25 under way using engine AMERICAN SPIRIT 46.11168 \n",
"2017-12-31 23:58:46 at anchor CASON J CALLAWAY 46.46355 \n",
"2017-12-31 23:58:52 under way using engine THUNDER BAY 46.56533 \n",
"\n",
" from_LON From \n",
"2015-03-26 18:36:48 -84.89990 Arrive St Marys River \n",
"2015-03-26 18:46:36 -84.89710 Arrive St Marys River \n",
"2015-03-28 19:27:17 -84.01380 Arrive St Marys River \n",
"2015-03-31 14:15:16 -84.89928 Arrive St Marys River \n",
"2015-04-02 14:56:03 -84.89865 Arrive St Marys River \n",
"... ... ... \n",
"2017-12-31 08:35:46 -84.85346 Arrive St Marys River \n",
"2017-12-31 15:15:50 -84.01456 Arrive St Marys River \n",
"2017-12-31 17:38:25 -84.01447 Arrive St Marys River \n",
"2017-12-31 23:58:46 -84.57252 Arrive St Marys River \n",
"2017-12-31 23:58:52 -84.67849 Arrive St Marys River \n",
"\n",
"[4604 rows x 13 columns]"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# We had some problems with the St Marys river Collection because it allowed min and max times to take place\n",
"#anywhere along the channel. We needed to place strict boundaries at the entry and exit to reduce noise.\n",
"\n",
"df=Trips.loc[(Trips.Position=='Depart St Marys River')&((Trips.LON<-84.57)|(Trips.LAT<46.12))&\n",
" ((Trips.from_LON<-84.57)|(Trips.from_LAT<46.12))]\n",
"print(len(df))\n",
"Trips.drop(Trips[Trips.Position=='Depart St Marys River'].index, inplace = True)\n",
"Trips=Trips.append(df)\n",
"Trips.loc[Trips.Position=='Depart St Marys River']"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"736687\n",
"AMERICAN CENTURY complete.\n",
"AMERICAN INTEGRITY complete.\n",
"AMERICAN SPIRIT complete.\n",
"BUFFALO complete.\n",
"BURNS HARBOR complete.\n",
"CASON J CALLAWAY complete.\n",
"CSL ASSINIBOINE complete.\n",
"CSL LAURENTIEN complete.\n",
"CSL NIAGARA complete.\n",
"EDGAR B SPEER complete.\n",
"EDWIN H GOTT complete.\n",
"HERBERT C JACKSON complete.\n",
"HON JAMES L OBERSTAR complete.\n",
"JAMES R BARKER complete.\n",
"JOHN G MUNSON complete.\n",
"JOSEPH L BLOCK complete.\n",
"JOYCE L VANENKEVORT complete.\n",
"KAYE E BARKER complete.\n",
"LEE A TREGURTHA complete.\n",
"MESABI MINER complete.\n",
"PHILIP R CLARKE complete.\n",
"PRESQUE ISLE complete.\n",
"ROGER BLOUGH complete.\n",
"RT HON PAUL J MARTIN complete.\n",
"SAM LAUD complete.\n",
"STEWART J CORT complete.\n",
"THUNDER BAY complete.\n",
"TUG CLYDE S VANENKEVORT complete.\n",
"VICTORY complete.\n",
"WALTER J MCCARTHY JR complete.\n",
"10073\n"
]
},
{
"data": {
"text/html": [
"
\n",
"\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"\n",
"\n",
" \n",
" \n",
" \n",
" Cargo\n",
" Draft\n",
" Duration\n",
" LAT\n",
" LON\n",
" MMSI\n",
" Position\n",
" SOG\n",
" Status\n",
" VesselName\n",
" from_LAT\n",
" from_LON\n",
" From\n",
" Origin\n",
" Destination\n",
" Tons\n",
" \n",
" \n",
" \n",
" \n",
" 2015-03-25 12:53:46\n",
" Empty Barges\n",
" 9.77\n",
" NaT\n",
" 46.48675\n",
" -84.30111\n",
" 366971370.0\n",
" Arrive Soo Locks\n",
" 5.8\n",
" under way using engine\n",
" EDWIN H GOTT\n",
" 46.48497\n",
" -84.29975\n",
" NaN\n",
" MILWAUKEE, WI\n",
" TWO HARBORS, MN\n",
" 0\n",
" \n",
" \n",
" 2015-03-25 13:25:30\n",
" Empty Barges\n",
" 8.51\n",
" NaT\n",
" 46.48563\n",
" -84.30025\n",
" 366972030.0\n",
" Arrive Soo Locks\n",
" 4.0\n",
" under way using engine\n",
" ROGER BLOUGH\n",
" 46.48460\n",
" -84.29943\n",
" NaN\n",
" ERIE, PA\n",
" TWO HARBORS, MN\n",
" 0\n",
" \n",
" \n",
" 2015-03-26 01:40:38\n",
" Empty Barges\n",
" 9.77\n",
" 12:46:52\n",
" 46.49918\n",
" -84.39629\n",
" 366971370.0\n",
" Depart Soo Locks\n",
" 9.6\n",
" under way using engine\n",
" EDWIN H GOTT\n",
" 46.49979\n",
" -84.39251\n",
" Arrive Soo Locks\n",
" MILWAUKEE, WI\n",
" TWO HARBORS, MN\n",
" 0\n",
" \n",
" \n",
" 2015-03-26 06:30:06\n",
" Empty Barges\n",
" 8.51\n",
" 17:04:36\n",
" 46.49870\n",
" -84.39973\n",
" 366972030.0\n",
" Depart Soo Locks\n",
" 9.5\n",
" under way using engine\n",
" ROGER BLOUGH\n",
" 46.49947\n",
" -84.39552\n",
" Arrive Soo Locks\n",
" ERIE, PA\n",
" TWO HARBORS, MN\n",
" 0\n",
" \n",
" \n",
" 2015-03-27 22:10:47\n",
" Iron Ore\n",
" 8.15\n",
" NaT\n",
" 46.50180\n",
" -84.37771\n",
" 366971360.0\n",
" Arrive Soo Locks\n",
" 2.9\n",
" under way using engine\n",
" JOHN G MUNSON\n",
" 46.49484\n",
" -84.41891\n",
" NaN\n",
" DULUTH, MN\n",
" GARY, IN\n",
" 26837\n",
" \n",
" \n",
"\n",
"
"
],
"text/plain": [
" Cargo Draft Duration LAT LON \\\n",
"2015-03-25 12:53:46 Empty Barges 9.77 NaT 46.48675 -84.30111 \n",
"2015-03-25 13:25:30 Empty Barges 8.51 NaT 46.48563 -84.30025 \n",
"2015-03-26 01:40:38 Empty Barges 9.77 12:46:52 46.49918 -84.39629 \n",
"2015-03-26 06:30:06 Empty Barges 8.51 17:04:36 46.49870 -84.39973 \n",
"2015-03-27 22:10:47 Iron Ore 8.15 NaT 46.50180 -84.37771 \n",
"\n",
" MMSI Position SOG \\\n",
"2015-03-25 12:53:46 366971370.0 Arrive Soo Locks 5.8 \n",
"2015-03-25 13:25:30 366972030.0 Arrive Soo Locks 4.0 \n",
"2015-03-26 01:40:38 366971370.0 Depart Soo Locks 9.6 \n",
"2015-03-26 06:30:06 366972030.0 Depart Soo Locks 9.5 \n",
"2015-03-27 22:10:47 366971360.0 Arrive Soo Locks 2.9 \n",
"\n",
" Status VesselName from_LAT \\\n",
"2015-03-25 12:53:46 under way using engine EDWIN H GOTT 46.48497 \n",
"2015-03-25 13:25:30 under way using engine ROGER BLOUGH 46.48460 \n",
"2015-03-26 01:40:38 under way using engine EDWIN H GOTT 46.49979 \n",
"2015-03-26 06:30:06 under way using engine ROGER BLOUGH 46.49947 \n",
"2015-03-27 22:10:47 under way using engine JOHN G MUNSON 46.49484 \n",
"\n",
" from_LON From Origin \\\n",
"2015-03-25 12:53:46 -84.29975 NaN MILWAUKEE, WI \n",
"2015-03-25 13:25:30 -84.29943 NaN ERIE, PA \n",
"2015-03-26 01:40:38 -84.39251 Arrive Soo Locks MILWAUKEE, WI \n",
"2015-03-26 06:30:06 -84.39552 Arrive Soo Locks ERIE, PA \n",
"2015-03-27 22:10:47 -84.41891 NaN DULUTH, MN \n",
"\n",
" Destination Tons \n",
"2015-03-25 12:53:46 TWO HARBORS, MN 0 \n",
"2015-03-25 13:25:30 TWO HARBORS, MN 0 \n",
"2015-03-26 01:40:38 TWO HARBORS, MN 0 \n",
"2015-03-26 06:30:06 TWO HARBORS, MN 0 \n",
"2015-03-27 22:10:47 GARY, IN 26837 "
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#This algorithm collects start and complete positions for each ship in the Soo Locks \n",
"#3-4) Arrival and departure from the Soo Locks in Sault Ste Marie\n",
"\n",
"df=Iron\n",
"W,E,N,S=features.loc['St Marys River']\n",
"W,E=-84.4,-84.3 #placing stricter boundaries around the Soo Locks\n",
"df1=df.loc[(df.LAT<=N)&(df.LAT>=S)&(df.LON<=E)&(df.LON>=W)] #subset of data for single geographic feature\n",
"\n",
"print(len(df1))\n",
"\n",
"Locks=pd.DataFrame() #empty data frame to collect data points\n",
"for vessel in vessels:\n",
" df2 = df1.loc[(df1.VesselName==vessel)]#&(df1.SOG<0.2)]\n",
" \n",
" Lock=pd.DataFrame() #empty data frame to collect data points\n",
"\n",
" datelist=np.unique(df2.index.date)\n",
" dates=datelist[(datelist-np.roll(datelist,1))!=pd.Timedelta(days=1)]\n",
"\n",
" for date in dates:\n",
" df3=df2.loc[df2.index.date==date]\n",
" add=df3.loc[min(df3.index)]\n",
" add['Position']='Arrive Soo Locks'\n",
" Lock=Lock.append(add)\n",
"\n",
" dates=datelist[(datelist-np.roll(datelist,-1))!=pd.Timedelta(days=-1)]\n",
" for date in dates:\n",
" df3=df2.loc[df2.index.date==date]\n",
" add=df3.loc[max(df3.index)]\n",
" add['Position']='Depart Soo Locks'\n",
" Lock=Lock.append(add)\n",
"\n",
"\n",
" Lock= Lock.sort_index()\n",
" Lock['Duration']=Lock.index.to_series().diff()\n",
" Lock['From']=Lock.Position.shift()\n",
" lpms= LPMS.loc[(LPMS.VesselName==vessel)]\n",
" dates=np.unique(lpms.index.date) \n",
" for date in dates:\n",
" df4=Lock.loc[(Lock.index.date>=(date-dt.timedelta(days=1)))&(Lock.index.date<=(date+dt.timedelta(days=1)))]\n",
" df5=lpms.loc[lpms.index.date==date].reset_index()\n",
" df4['Origin']=df5.loc[0,'Origin']\n",
" df4['Destination']=df5.loc[0,'Destination']\n",
" df4['Cargo']=df5.loc[0,'Cargo']\n",
" df4['Tons']=df5.loc[0,'Tons']\n",
" Locks=Locks.append(df4).sort_index()\n",
" print(f'{vessel} complete.')\n",
"\n",
"Locks = Locks.sort_index()\n",
"print(len(Locks))\n",
"Locks.head()\n"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"42021\n",
"42021\n"
]
},
{
"data": {
"text/html": [
"
\n",
"\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"\n",
"\n",
" \n",
" \n",
" \n",
" Cargo\n",
" Draft\n",
" Duration\n",
" LAT\n",
" LON\n",
" MMSI\n",
" Position\n",
" SOG\n",
" Status\n",
" VesselName\n",
" from_LAT\n",
" from_LON\n",
" From\n",
" Origin\n",
" Destination\n",
" Tons\n",
" \n",
" \n",
" \n",
" \n",
" 2015-03-01 03:14:00\n",
" NaN\n",
" 8.03\n",
" 0.0\n",
" 41.69872\n",
" -83.45046\n",
" 366971350.0\n",
" Depart Toledo\n",
" 0.1\n",
" under way using engine\n",
" PHILIP R CLARKE\n",
" NaN\n",
" NaN\n",
" Arrive Toledo\n",
" NaN\n",
" NaN\n",
" NaN\n",
" \n",
" \n",
" 2015-03-01 03:14:00\n",
" NaN\n",
" 8.03\n",
" NaN\n",
" 41.69872\n",
" -83.45046\n",
" 366971350.0\n",
" Arrive Toledo\n",
" 0.1\n",
" under way using engine\n",
" PHILIP R CLARKE\n",
" NaN\n",
" NaN\n",
" NaN\n",
" NaN\n",
" NaN\n",
" NaN\n",
" \n",
" \n",
" 2015-03-02 16:50:01\n",
" NaN\n",
" 9.01\n",
" NaN\n",
" 42.88318\n",
" -79.24848\n",
" 316001635.0\n",
" Arrive Welland Canal\n",
" 0.0\n",
" under way sailing\n",
" RT HON PAUL J MARTIN\n",
" NaN\n",
" NaN\n",
" NaN\n",
" NaN\n",
" NaN\n",
" NaN\n",
" \n",
" \n",
" 2015-03-02 19:26:23\n",
" NaN\n",
" 9.01\n",
" 156.0\n",
" 42.88314\n",
" -79.24848\n",
" 316001635.0\n",
" Depart Welland Canal\n",
" 0.0\n",
" under way sailing\n",
" RT HON PAUL J MARTIN\n",
" 42.88314\n",
" -79.24848\n",
" Arrive Welland Canal\n",
" NaN\n",
" NaN\n",
" NaN\n",
" \n",
" \n",
" 2015-03-03 11:28:41\n",
" NaN\n",
" 8.03\n",
" 3374.0\n",
" 41.69873\n",
" -83.45055\n",
" 366971350.0\n",
" Arrive Toledo\n",
" 0.1\n",
" under way using engine\n",
" PHILIP R CLARKE\n",
" 41.69872\n",
" -83.45046\n",
" Depart Toledo\n",
" NaN\n",
" NaN\n",
" NaN\n",
" \n",
" \n",
"\n",
"
"
],
"text/plain": [
" Cargo Draft Duration LAT LON MMSI \\\n",
"2015-03-01 03:14:00 NaN 8.03 0.0 41.69872 -83.45046 366971350.0 \n",
"2015-03-01 03:14:00 NaN 8.03 NaN 41.69872 -83.45046 366971350.0 \n",
"2015-03-02 16:50:01 NaN 9.01 NaN 42.88318 -79.24848 316001635.0 \n",
"2015-03-02 19:26:23 NaN 9.01 156.0 42.88314 -79.24848 316001635.0 \n",
"2015-03-03 11:28:41 NaN 8.03 3374.0 41.69873 -83.45055 366971350.0 \n",
"\n",
" Position SOG Status \\\n",
"2015-03-01 03:14:00 Depart Toledo 0.1 under way using engine \n",
"2015-03-01 03:14:00 Arrive Toledo 0.1 under way using engine \n",
"2015-03-02 16:50:01 Arrive Welland Canal 0.0 under way sailing \n",
"2015-03-02 19:26:23 Depart Welland Canal 0.0 under way sailing \n",
"2015-03-03 11:28:41 Arrive Toledo 0.1 under way using engine \n",
"\n",
" VesselName from_LAT from_LON \\\n",
"2015-03-01 03:14:00 PHILIP R CLARKE NaN NaN \n",
"2015-03-01 03:14:00 PHILIP R CLARKE NaN NaN \n",
"2015-03-02 16:50:01 RT HON PAUL J MARTIN NaN NaN \n",
"2015-03-02 19:26:23 RT HON PAUL J MARTIN 42.88314 -79.24848 \n",
"2015-03-03 11:28:41 PHILIP R CLARKE 41.69872 -83.45046 \n",
"\n",
" From Origin Destination Tons \n",
"2015-03-01 03:14:00 Arrive Toledo NaN NaN NaN \n",
"2015-03-01 03:14:00 NaN NaN NaN NaN \n",
"2015-03-02 16:50:01 NaN NaN NaN NaN \n",
"2015-03-02 19:26:23 Arrive Welland Canal NaN NaN NaN \n",
"2015-03-03 11:28:41 Depart Toledo NaN NaN NaN "
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Trips.Cargo=np.nan\n",
"Combo=Locks.append(Trips).sort_index()\n",
"print(len(Combo))\n",
"Filled=pd.DataFrame()\n",
"for vessel in vessels:\n",
" df=Combo.loc[Combo.VesselName==vessel]\n",
" dates=np.unique(df.index.date)\n",
" date=min(dates)\n",
" #df=df.ffill(limit=3).bfill(limit=3)\n",
" #df=df.ffill(limit=2).bfill()\n",
" Filled=Filled.append(df).sort_index()\n",
"\n",
"print(len(Filled))\n",
"Filled.Duration=Filled.Duration.astype('timedelta64[m]')\n",
"Filled.to_csv('Merged_Data_new.csv')\n",
"Filled.head()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 2
}

Download All Files (To download individual files, select them in the “Files” panel above)

Total work file size of 7.89 GB may be too large to download directly. Consider using Globus (see below).



Best for data sets > 3 GB. Globus is the platform Deep Blue Data uses to make large data sets available.   More about Globus

Remediation of Harmful Language

The University of Michigan Library aims to describe library materials in a way that respects the people and communities who create, use, and are represented in our collections. Report harmful or offensive language in catalog records, finding aids, or elsewhere in our collections anonymously through our metadata feedback form. More information at Remediation of Harmful Language.