{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/yoachim/git_repos/sims_maf/python/lsst/sims/maf/runComparison/runComparison.py:24: UserWarning: \n",
"The generateDiffHtml method requires bokeh to be installed\n",
"but it is not needed to use the other methods in this class.\n",
"Run: pip install bokeh then restart your jupyter notebook kernel.\n",
" 'but it is not needed to use the other methods in this class.'+'\\n'+\n"
]
}
],
"source": [
"import os\n",
"import warnings\n",
"import numpy as np\n",
"import matplotlib.pylab as plt\n",
"%matplotlib inline\n",
"import pandas as pd\n",
"import glob\n",
"\n",
"# Let's try out making some beta radar plots\n",
"from lsst.sims.maf.runComparison import RunComparison"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"# Starting with example at\n",
"# https://matplotlib.org/examples/api/radar_chart.html\n",
"\n",
"from matplotlib.path import Path\n",
"from matplotlib.spines import Spine\n",
"from matplotlib.projections.polar import PolarAxes\n",
"from matplotlib.projections import register_projection\n",
"\n",
"def radar_factory(num_vars, frame='circle'):\n",
" \"\"\"Create a radar chart with `num_vars` axes.\n",
"\n",
" This function creates a RadarAxes projection and registers it.\n",
"\n",
" Parameters\n",
" ----------\n",
" num_vars : int\n",
" Number of variables for radar chart.\n",
" frame : {'circle' | 'polygon'}\n",
" Shape of frame surrounding axes.\n",
"\n",
" \"\"\"\n",
" # calculate evenly-spaced axis angles\n",
" theta = np.linspace(0, 2*np.pi, num_vars, endpoint=False)\n",
" # rotate theta such that the first axis is at the top\n",
" theta += np.pi/2\n",
" \n",
" # FFS, need to make sure we don't go over 360\n",
" theta = theta % (2.*np.pi)\n",
"\n",
" def draw_poly_patch(self):\n",
" verts = unit_poly_verts(theta)\n",
" return plt.Polygon(verts, closed=True, edgecolor='k')\n",
"\n",
" def draw_circle_patch(self):\n",
" # unit circle centered on (0.5, 0.5)\n",
" return plt.Circle((0.5, 0.5), 0.5)\n",
"\n",
" patch_dict = {'polygon': draw_poly_patch, 'circle': draw_circle_patch}\n",
" if frame not in patch_dict:\n",
" raise ValueError('unknown value for `frame`: %s' % frame)\n",
"\n",
" class RadarAxes(PolarAxes):\n",
"\n",
" name = 'radar'\n",
" # use 1 line segment to connect specified points\n",
" RESOLUTION = 1\n",
" # define draw_frame method\n",
" draw_patch = patch_dict[frame]\n",
"\n",
" def fill(self, *args, **kwargs):\n",
" \"\"\"Override fill so that line is closed by default\"\"\"\n",
" closed = kwargs.pop('closed', True)\n",
" return super(RadarAxes, self).fill(closed=closed, *args, **kwargs)\n",
"\n",
" def plot(self, *args, **kwargs):\n",
" \"\"\"Override plot so that line is closed by default\"\"\"\n",
" lines = super(RadarAxes, self).plot(*args, **kwargs)\n",
" for line in lines:\n",
" self._close_line(line)\n",
"\n",
" def _close_line(self, line):\n",
" x, y = line.get_data()\n",
" # FIXME: markers at x[0], y[0] get doubled-up\n",
" if x[0] != x[-1]:\n",
" x = np.concatenate((x, [x[0]]))\n",
" y = np.concatenate((y, [y[0]]))\n",
" line.set_data(x, y)\n",
"\n",
" def set_varlabels(self, labels):\n",
" self.set_thetagrids(np.degrees(theta), labels)\n",
"\n",
" def _gen_axes_patch(self):\n",
" return self.draw_patch()\n",
"\n",
" def _gen_axes_spines(self):\n",
" if frame == 'circle':\n",
" return PolarAxes._gen_axes_spines(self)\n",
" # The following is a hack to get the spines (i.e. the axes frame)\n",
" # to draw correctly for a polygon frame.\n",
"\n",
" # spine_type must be 'left', 'right', 'top', 'bottom', or `circle`.\n",
" spine_type = 'circle'\n",
" verts = unit_poly_verts(theta)\n",
" # close off polygon by repeating first vertex\n",
" verts.append(verts[0])\n",
" path = Path(verts)\n",
"\n",
" spine = Spine(self, spine_type, path)\n",
" spine.set_transform(self.transAxes)\n",
" return {'polar': spine}\n",
"\n",
" register_projection(RadarAxes)\n",
" return theta\n",
"\n",
"\n",
"def unit_poly_verts(theta):\n",
" \"\"\"Return vertices of polygon for subplot axes.\n",
"\n",
" This polygon is circumscribed by a unit circle centered at (0.5, 0.5)\n",
" \"\"\"\n",
" x0, y0, r = [0.5] * 3\n",
" verts = [(r*np.cos(t) + x0, r*np.sin(t) + y0) for t in theta]\n",
" return verts"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['mw_heavy',\n",
" 'ss_heavy',\n",
" 'rolling_exgal_mod2_dust_sdf_0.20',\n",
" 'ddf_heavy',\n",
" 'baseline_nexp1',\n",
" 'barebones',\n",
" 'baseline_nexp2',\n",
" 'dm_heavy']"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Run names\n",
"# Note that the run names are not entirely standard -- some are _v1.5_10yrs and some are v1.5_10yrs.\n",
"\n",
"# just sym-link this in whereever one might be running\n",
"dbdir = '../potential_schedulers'\n",
"run_names = [os.path.split(i)[-1].replace('.db', '') for i in glob.glob(os.path.join(dbdir, '*10yrs.db'))]\n",
"\n",
"short_run_names = [run.replace('v1.5_10yrs', '').rstrip('_') for run in run_names]\n",
"\n",
"# temp remove the new one\n",
"run_names = [run for run in run_names if 'scale' not in run]\n",
"short_run_names = [run for run in short_run_names if 'scale' not in run]\n",
"\n",
"short_run_names\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"# then get list of science batch outputs\n",
"\n",
"sciroot = '../potential_schedulers/'\n",
"glanceroot = '../potential_schedulers/'\n",
"ssoroot = '../sso/'\n",
"\n",
"all_runs = [run for run in run_names]\n",
"sci_dirs = [os.path.join(sciroot, f'sci_{run}') for run in run_names]\n",
"\n",
"# and list of NEO outputs\n",
"\n",
"all_runs += [run for run in run_names]\n",
"sso_dirs = [os.path.join(ssoroot, f'{run}/sso') for run in run_names]\n",
"\n",
"# and add glance outputs\n",
"\n",
"all_runs += [run for run in run_names]\n",
"glance_dirs = [os.path.join(glanceroot, f'{run}') for run in run_names]\n",
"\n",
"all_runs = short_run_names + short_run_names + short_run_names\n",
"all_dirs = sci_dirs + glance_dirs + sso_dirs"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"# Connect to all of the resultsDb output databases\n",
"rc = RunComparison(baseDir='', runlist=all_runs, rundirs=all_dirs)\n",
"# Get the info on all of their summary metrics.\n",
"mdict = rc.buildMetricDict() \n",
"# rc.addSummaryStats(mdict) # this just adds ALL metrics \n",
"rc.summaryStats"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['fO All visits HealpixSlicer',\n",
" 'Parallax Error @ 22.4 All visits HealpixSlicer',\n",
" 'Parallax Error @ 24.0 All visits HealpixSlicer',\n",
" 'Normalized Parallax @ 22.4 All visits HealpixSlicer',\n",
" 'Normalized Parallax @ 24.0 All visits HealpixSlicer',\n",
" 'Parallax Coverage @ 22.4 All visits HealpixSlicer',\n",
" 'Parallax Coverage @ 24.0 All visits HealpixSlicer',\n",
" 'Parallax-DCR degeneracy @ 22.4 All visits HealpixSlicer',\n",
" 'Parallax-DCR degeneracy @ 24.0 All visits HealpixSlicer',\n",
" 'Proper Motion Error @ 20.5 All visits HealpixSlicer',\n",
" 'Proper Motion Error @ 24.0 All visits HealpixSlicer',\n",
" 'Normalized Proper Motion @ 20.5 All visits HealpixSlicer',\n",
" 'Normalized Proper Motion @ 24.0 All visits HealpixSlicer',\n",
" 'RapidRevisits All visits HealpixSlicer',\n",
" 'Periodic_amp_1.00_mag_21 HealpixSlicer',\n",
" 'Periodic_amp_1.00_mag_24 HealpixSlicer',\n",
" 'Periodic_amp_0.10_mag_21 HealpixSlicer',\n",
" 'Periodic_amp_0.10_mag_24 HealpixSlicer',\n",
" 'Periodic_amp_0.05_mag_21 HealpixSlicer',\n",
" 'Periodic_amp_0.05_mag_24 HealpixSlicer',\n",
" 'SNIa UserPointsSlicer',\n",
" 'KN UserPointsSlicer',\n",
" 'TDEsAsciiMetric HealpixSlicer',\n",
" 'DD:ELAISS1 SNIa UserPointsSlicer',\n",
" 'DD:XMM-LSS SNIa UserPointsSlicer',\n",
" 'DD:ECDFS SNIa UserPointsSlicer',\n",
" 'DD:COSMOS SNIa UserPointsSlicer',\n",
" 'DD:290 SNIa UserPointsSlicer',\n",
" 'DD:EDFSa SNIa UserPointsSlicer',\n",
" 'DD:EDFSb SNIa UserPointsSlicer',\n",
" 'SNIa_Detected UserPointsSlicer',\n",
" 'SNIa_Nobs UserPointsSlicer',\n",
" 'SNIa_PrePeak UserPointsSlicer',\n",
" 'SNIa_WellSampled UserPointsSlicer',\n",
" 'KN_Detected UserPointsSlicer',\n",
" 'KN_Nobs UserPointsSlicer',\n",
" 'KN_PrePeak UserPointsSlicer',\n",
" 'KN_WellSampled UserPointsSlicer',\n",
" 'DD:ELAISS1 SNIa_Detected UserPointsSlicer',\n",
" 'DD:ELAISS1 SNIa_Nobs UserPointsSlicer',\n",
" 'DD:ELAISS1 SNIa_PrePeak UserPointsSlicer',\n",
" 'DD:ELAISS1 SNIa_WellSampled UserPointsSlicer',\n",
" 'DD:XMM-LSS SNIa_Detected UserPointsSlicer',\n",
" 'DD:XMM-LSS SNIa_Nobs UserPointsSlicer',\n",
" 'DD:XMM-LSS SNIa_PrePeak UserPointsSlicer',\n",
" 'DD:XMM-LSS SNIa_WellSampled UserPointsSlicer',\n",
" 'DD:ECDFS SNIa_Detected UserPointsSlicer',\n",
" 'DD:ECDFS SNIa_Nobs UserPointsSlicer',\n",
" 'DD:ECDFS SNIa_PrePeak UserPointsSlicer',\n",
" 'DD:ECDFS SNIa_WellSampled UserPointsSlicer',\n",
" 'DD:COSMOS SNIa_Detected UserPointsSlicer',\n",
" 'DD:COSMOS SNIa_Nobs UserPointsSlicer',\n",
" 'DD:COSMOS SNIa_PrePeak UserPointsSlicer',\n",
" 'DD:COSMOS SNIa_WellSampled UserPointsSlicer',\n",
" 'DD:290 SNIa_Detected UserPointsSlicer',\n",
" 'DD:290 SNIa_Nobs UserPointsSlicer',\n",
" 'DD:290 SNIa_PrePeak UserPointsSlicer',\n",
" 'DD:290 SNIa_WellSampled UserPointsSlicer',\n",
" 'DD:EDFSa SNIa_Detected UserPointsSlicer',\n",
" 'DD:EDFSa SNIa_Nobs UserPointsSlicer',\n",
" 'DD:EDFSa SNIa_PrePeak UserPointsSlicer',\n",
" 'DD:EDFSa SNIa_WellSampled UserPointsSlicer',\n",
" 'DD:EDFSb SNIa_Detected UserPointsSlicer',\n",
" 'DD:EDFSb SNIa_Nobs UserPointsSlicer',\n",
" 'DD:EDFSb SNIa_PrePeak UserPointsSlicer',\n",
" 'DD:EDFSb SNIa_WellSampled UserPointsSlicer',\n",
" 'YearCoverage night g HealpixSlicer',\n",
" 'Kuiper rotSkyPos g HealpixSlicer',\n",
" 'Kuiper rotTelPos g HealpixSlicer',\n",
" 'N stars to Precision 0.10 g HealpixSlicer',\n",
" 'YearCoverage night u HealpixSlicer',\n",
" 'Kuiper rotSkyPos u HealpixSlicer',\n",
" 'Kuiper rotTelPos u HealpixSlicer',\n",
" 'N stars to Precision 0.10 u HealpixSlicer',\n",
" 'DD:ELAISS1, u UserPointsSlicer',\n",
" 'DD:XMM-LSS, u UserPointsSlicer',\n",
" 'DD:ECDFS, u UserPointsSlicer',\n",
" 'DD:COSMOS, u UserPointsSlicer',\n",
" 'DD:290, u UserPointsSlicer',\n",
" 'DD:EDFSa, u UserPointsSlicer',\n",
" 'DD:EDFSb, u UserPointsSlicer',\n",
" 'YearCoverage night z HealpixSlicer',\n",
" 'Kuiper rotSkyPos z HealpixSlicer',\n",
" 'Kuiper rotTelPos z HealpixSlicer',\n",
" 'N stars to Precision 0.10 z HealpixSlicer',\n",
" 'DD:ELAISS1, g UserPointsSlicer',\n",
" 'DD:XMM-LSS, g UserPointsSlicer',\n",
" 'DD:ECDFS, g UserPointsSlicer',\n",
" 'DD:COSMOS, g UserPointsSlicer',\n",
" 'DD:290, g UserPointsSlicer',\n",
" 'DD:EDFSa, g UserPointsSlicer',\n",
" 'DD:EDFSb, g UserPointsSlicer',\n",
" 'DD:ELAISS1, z UserPointsSlicer',\n",
" 'DD:XMM-LSS, z UserPointsSlicer',\n",
" 'DD:ECDFS, z UserPointsSlicer',\n",
" 'DD:COSMOS, z UserPointsSlicer',\n",
" 'DD:290, z UserPointsSlicer',\n",
" 'DD:EDFSa, z UserPointsSlicer',\n",
" 'DD:EDFSb, z UserPointsSlicer',\n",
" 'DD:ELAISS1, y UserPointsSlicer',\n",
" 'DD:XMM-LSS, y UserPointsSlicer',\n",
" 'DD:ECDFS, y UserPointsSlicer',\n",
" 'DD:COSMOS, y UserPointsSlicer',\n",
" 'DD:290, y UserPointsSlicer',\n",
" 'DD:EDFSa, y UserPointsSlicer',\n",
" 'DD:EDFSb, y UserPointsSlicer',\n",
" 'YearCoverage night y HealpixSlicer',\n",
" 'Kuiper rotSkyPos y HealpixSlicer',\n",
" 'Kuiper rotTelPos y HealpixSlicer',\n",
" 'N stars to Precision 0.10 y HealpixSlicer',\n",
" 'DD:ELAISS1, i UserPointsSlicer',\n",
" 'DD:XMM-LSS, i UserPointsSlicer',\n",
" 'DD:ECDFS, i UserPointsSlicer',\n",
" 'DD:COSMOS, i UserPointsSlicer',\n",
" 'DD:290, i UserPointsSlicer',\n",
" 'DD:EDFSa, i UserPointsSlicer',\n",
" 'DD:EDFSb, i UserPointsSlicer',\n",
" 'DD:ELAISS1, r UserPointsSlicer',\n",
" 'DD:XMM-LSS, r UserPointsSlicer',\n",
" 'DD:ECDFS, r UserPointsSlicer',\n",
" 'DD:COSMOS, r UserPointsSlicer',\n",
" 'DD:290, r UserPointsSlicer',\n",
" 'DD:EDFSa, r UserPointsSlicer',\n",
" 'DD:EDFSb, r UserPointsSlicer',\n",
" 'YearCoverage night r HealpixSlicer',\n",
" 'Kuiper rotSkyPos r HealpixSlicer',\n",
" 'Kuiper rotTelPos r HealpixSlicer',\n",
" 'N stars to Precision 0.10 r HealpixSlicer',\n",
" 'YearCoverage night i HealpixSlicer',\n",
" 'Kuiper rotSkyPos i HealpixSlicer',\n",
" 'Kuiper rotTelPos i HealpixSlicer',\n",
" 'GalaxyCountsMetric_extended i HealpixSlicer',\n",
" 'N stars to Precision 0.10 i HealpixSlicer',\n",
" 'Length of Survey (days)',\n",
" 'NChanges filter, observationStartMJD',\n",
" 'OpenShutterFraction',\n",
" 'tEff',\n",
" 'Number of Exposures',\n",
" 'Percents',\n",
" 'Counts',\n",
" 'Slew Count All visits',\n",
" 'Mean slewTime All visits',\n",
" 'Median slewTime All visits',\n",
" 'Min slewTime All visits',\n",
" 'Max slewTime All visits',\n",
" 'Nvisits as function of Alt/Az HealpixSlicer',\n",
" 'OpenShutterFraction OneDSlicer',\n",
" 'Filter Changes OneDSlicer',\n",
" 'Count observationStartMJD HealpixSlicer',\n",
" 'CoaddM5 HealpixSlicer',\n",
" 'parallax HealpixSlicer',\n",
" 'properMotion HealpixSlicer',\n",
" 'Slew Time Histogram All visits OneDSlicer',\n",
" 'Zoom Slew Time Histogram All visits OneDSlicer',\n",
" 'Slew Distance Histogram All visits OneDSlicer',\n",
" 'Zoom Slew Distance Histogram All visits OneDSlicer',\n",
" 'Percents_greedy',\n",
" 'Percents_blob, yy, a',\n",
" 'Percents_blob, yy, b',\n",
" 'Percents_DD:ELAISS1',\n",
" 'Percents_DD:XMM-LSS',\n",
" 'Percents_DD:EDFS',\n",
" 'Percents_blob, iz, a',\n",
" 'Percents_blob, iz, b',\n",
" 'Percents_blob, zy, a',\n",
" 'Percents_blob, zy, b',\n",
" 'Percents_blob, ri, a',\n",
" 'Percents_blob, ri, b',\n",
" 'Percents_blob, gr, a',\n",
" 'Percents_blob, gr, b',\n",
" 'Percents_DD:ECDFS',\n",
" 'Percents_blob, ug, a',\n",
" 'Percents_blob, ug, b',\n",
" 'Percents_blob, ur, a',\n",
" 'Percents_blob, ur, b',\n",
" 'Percents_DD:COSMOS',\n",
" 'Counts_greedy',\n",
" 'Counts_blob, yy, a',\n",
" 'Counts_blob, yy, b',\n",
" 'Counts_DD:ELAISS1',\n",
" 'Counts_DD:XMM-LSS',\n",
" 'Counts_DD:EDFS',\n",
" 'Counts_blob, iz, a',\n",
" 'Counts_blob, iz, b',\n",
" 'Counts_blob, zy, a',\n",
" 'Counts_blob, zy, b',\n",
" 'Counts_blob, ri, a',\n",
" 'Counts_blob, ri, b',\n",
" 'Counts_blob, gr, a',\n",
" 'Counts_blob, gr, b',\n",
" 'Counts_DD:ECDFS',\n",
" 'Counts_blob, ug, a',\n",
" 'Counts_blob, ug, b',\n",
" 'Counts_blob, ur, a',\n",
" 'Counts_blob, ur, b',\n",
" 'Counts_DD:COSMOS',\n",
" 'tEff i',\n",
" 'Number of Exposures i',\n",
" 'Nvisits as function of Alt/Az i HealpixSlicer',\n",
" 'Count observationStartMJD i HealpixSlicer',\n",
" 'CoaddM5 i HealpixSlicer',\n",
" 'tEff g',\n",
" 'Number of Exposures g',\n",
" 'Nvisits as function of Alt/Az g HealpixSlicer',\n",
" 'Count observationStartMJD g HealpixSlicer',\n",
" 'CoaddM5 g HealpixSlicer',\n",
" 'tEff u',\n",
" 'Number of Exposures u',\n",
" 'Nvisits as function of Alt/Az u HealpixSlicer',\n",
" 'Count observationStartMJD u HealpixSlicer',\n",
" 'CoaddM5 u HealpixSlicer',\n",
" 'Hourglass year 1-2 HourglassSlicer',\n",
" 'tEff y',\n",
" 'Number of Exposures y',\n",
" 'Nvisits as function of Alt/Az y HealpixSlicer',\n",
" 'Count observationStartMJD y HealpixSlicer',\n",
" 'CoaddM5 y HealpixSlicer',\n",
" 'Hourglass year 0-1 HourglassSlicer',\n",
" 'Hourglass year 4-5 HourglassSlicer',\n",
" 'Hourglass year 6-7 HourglassSlicer',\n",
" 'Hourglass year 7-8 HourglassSlicer',\n",
" 'Hourglass year 8-9 HourglassSlicer',\n",
" 'Hourglass year 9-10 HourglassSlicer',\n",
" 'tEff z',\n",
" 'Number of Exposures z',\n",
" 'Nvisits as function of Alt/Az z HealpixSlicer',\n",
" 'Count observationStartMJD z HealpixSlicer',\n",
" 'CoaddM5 z HealpixSlicer',\n",
" 'Hourglass year 2-3 HourglassSlicer',\n",
" 'Hourglass year 3-4 HourglassSlicer',\n",
" 'Hourglass year 5-6 HourglassSlicer',\n",
" 'tEff r',\n",
" 'Number of Exposures r',\n",
" 'Nvisits as function of Alt/Az r HealpixSlicer',\n",
" 'Count observationStartMJD r HealpixSlicer',\n",
" 'CoaddM5 r HealpixSlicer',\n",
" 'PairFraction (g or r or i) HealpixSlicer',\n",
" 'Discovery_Time NEO 3 quads in 30 nights detection loss MoObjSlicer',\n",
" 'Discovery_N_Chances NEO 3 pairs in 15 nights SNR=4 detection loss MoObjSlicer',\n",
" 'DifferentialCompleteness NEO 3 pairs in 15 nights SNR=4 detection loss MoObjSlicer',\n",
" 'CumulativeCompleteness NEO 3 pairs in 15 nights SNR=4 detection loss MoObjSlicer',\n",
" 'Discovery_Time NEO 3 pairs in 15 nights SNR=0 detection loss MoObjSlicer',\n",
" 'Discovery_Time NEO 3 pairs in 15 nights trailing loss MoObjSlicer',\n",
" 'Discovery_Time NEO 3 pairs in 25 nights detection loss MoObjSlicer',\n",
" 'Discovery_Time NEO 3 pairs in 30 nights SNR=4 detection loss MoObjSlicer',\n",
" 'Discovery_N_Chances NEO 3 pairs in 20 nights detection loss MoObjSlicer',\n",
" 'DifferentialCompleteness NEO 3 pairs in 20 nights detection loss MoObjSlicer',\n",
" 'CumulativeCompleteness NEO 3 pairs in 20 nights detection loss MoObjSlicer',\n",
" 'Discovery_Time NEO 4 pairs in 20 nights detection loss MoObjSlicer',\n",
" 'Discovery_N_Chances NEO 3 pairs in 15 nights SNR=3 detection loss MoObjSlicer',\n",
" 'DifferentialCompleteness NEO 3 pairs in 15 nights SNR=3 detection loss MoObjSlicer',\n",
" 'CumulativeCompleteness NEO 3 pairs in 15 nights SNR=3 detection loss MoObjSlicer',\n",
" 'Discovery_Time NEO 3 pairs in 12 nights detection loss MoObjSlicer',\n",
" 'Discovery_Time NEO 3 pairs in 15 nights SNR=5 detection loss MoObjSlicer',\n",
" 'Discovery_N_Chances NEO 3 triplets in 30 nights detection loss MoObjSlicer',\n",
" 'DifferentialCompleteness NEO 3 triplets in 30 nights detection loss MoObjSlicer',\n",
" 'CumulativeCompleteness NEO 3 triplets in 30 nights detection loss MoObjSlicer',\n",
" 'Discovery_Time NEO 3 triplets in 30 nights detection loss MoObjSlicer',\n",
" 'Discovery_N_Chances NEO 3 pairs in 30 nights SNR=4 detection loss MoObjSlicer',\n",
" 'DifferentialCompleteness NEO 3 pairs in 30 nights SNR=4 detection loss MoObjSlicer',\n",
" 'CumulativeCompleteness NEO 3 pairs in 30 nights SNR=4 detection loss MoObjSlicer',\n",
" 'Discovery_Time NEO 3 pairs in 30 nights detection loss MoObjSlicer',\n",
" 'Discovery_Time NEO 3 pairs in 20 nights detection loss MoObjSlicer',\n",
" 'Discovery_N_Chances NEO 3 pairs in 15 nights detection loss MoObjSlicer',\n",
" 'DifferentialCompleteness NEO 3 pairs in 15 nights detection loss MoObjSlicer',\n",
" 'CumulativeCompleteness NEO 3 pairs in 15 nights detection loss MoObjSlicer',\n",
" 'Discovery_N_Chances NEO Single detection detection loss MoObjSlicer',\n",
" 'DifferentialCompleteness NEO Single detection detection loss MoObjSlicer',\n",
" 'CumulativeCompleteness NEO Single detection detection loss MoObjSlicer',\n",
" 'Discovery_N_Chances NEO Single pair detection loss MoObjSlicer',\n",
" 'DifferentialCompleteness NEO Single pair detection loss MoObjSlicer',\n",
" 'CumulativeCompleteness NEO Single pair detection loss MoObjSlicer',\n",
" 'Discovery_N_Chances NEO 3 pairs in 30 nights trailing loss MoObjSlicer',\n",
" 'DifferentialCompleteness NEO 3 pairs in 30 nights trailing loss MoObjSlicer',\n",
" 'CumulativeCompleteness NEO 3 pairs in 30 nights trailing loss MoObjSlicer',\n",
" 'Discovery_Time NEO 3 pairs in 15 nights detection loss MoObjSlicer',\n",
" 'Discovery_N_Chances NEO 4 pairs in 20 nights detection loss MoObjSlicer',\n",
" 'DifferentialCompleteness NEO 4 pairs in 20 nights detection loss MoObjSlicer',\n",
" 'CumulativeCompleteness NEO 4 pairs in 20 nights detection loss MoObjSlicer',\n",
" 'Discovery_Time NEO Single pair detection loss MoObjSlicer',\n",
" 'Discovery_Time NEO 3 pairs in 30 nights SNR=5 detection loss MoObjSlicer',\n",
" 'Discovery_N_Chances NEO 3 pairs in 30 nights SNR=5 detection loss MoObjSlicer',\n",
" 'DifferentialCompleteness NEO 3 pairs in 30 nights SNR=5 detection loss MoObjSlicer',\n",
" 'CumulativeCompleteness NEO 3 pairs in 30 nights SNR=5 detection loss MoObjSlicer',\n",
" 'Discovery_N_Chances NEO 3 pairs in 30 nights detection loss MoObjSlicer',\n",
" 'DifferentialCompleteness NEO 3 pairs in 30 nights detection loss MoObjSlicer',\n",
" 'CumulativeCompleteness NEO 3 pairs in 30 nights detection loss MoObjSlicer',\n",
" 'Discovery_N_Chances NEO 3 pairs in 15 nights SNR=0 detection loss MoObjSlicer',\n",
" 'DifferentialCompleteness NEO 3 pairs in 15 nights SNR=0 detection loss MoObjSlicer',\n",
" 'CumulativeCompleteness NEO 3 pairs in 15 nights SNR=0 detection loss MoObjSlicer',\n",
" 'Discovery_Time NEO 3 pairs in 15 nights SNR=3 detection loss MoObjSlicer',\n",
" 'Discovery_Time NEO 3 pairs in 15 nights SNR=4 detection loss MoObjSlicer',\n",
" 'Discovery_Time NEO Single detection detection loss MoObjSlicer',\n",
" 'Discovery_N_Chances NEO 3 quads in 30 nights detection loss MoObjSlicer',\n",
" 'DifferentialCompleteness NEO 3 quads in 30 nights detection loss MoObjSlicer',\n",
" 'CumulativeCompleteness NEO 3 quads in 30 nights detection loss MoObjSlicer',\n",
" 'Discovery_Time NEO 3 pairs in 30 nights trailing loss MoObjSlicer',\n",
" 'Discovery_N_Chances NEO 3 pairs in 15 nights trailing loss MoObjSlicer',\n",
" 'DifferentialCompleteness NEO 3 pairs in 15 nights trailing loss MoObjSlicer',\n",
" 'CumulativeCompleteness NEO 3 pairs in 15 nights trailing loss MoObjSlicer',\n",
" 'Discovery_N_Chances NEO 3 pairs in 15 nights SNR=5 detection loss MoObjSlicer',\n",
" 'DifferentialCompleteness NEO 3 pairs in 15 nights SNR=5 detection loss MoObjSlicer',\n",
" 'CumulativeCompleteness NEO 3 pairs in 15 nights SNR=5 detection loss MoObjSlicer',\n",
" 'Discovery_N_Chances NEO 3 pairs in 25 nights detection loss MoObjSlicer',\n",
" 'DifferentialCompleteness NEO 3 pairs in 25 nights detection loss MoObjSlicer',\n",
" 'CumulativeCompleteness NEO 3 pairs in 25 nights detection loss MoObjSlicer',\n",
" 'Discovery_N_Chances NEO 3 pairs in 12 nights detection loss MoObjSlicer',\n",
" 'DifferentialCompleteness NEO 3 pairs in 12 nights detection loss MoObjSlicer',\n",
" 'CumulativeCompleteness NEO 3 pairs in 12 nights detection loss MoObjSlicer',\n",
" 'DifferentialCompleteness@Time@H=22.00 NEO 3 quads in 30 nights detection loss MoObjSlicer',\n",
" 'CumulativeCompleteness@Time@H=22.00 NEO 3 quads in 30 nights detection loss MoObjSlicer',\n",
" 'DifferentialCompleteness@Time@H=20.00 NEO 3 quads in 30 nights detection loss MoObjSlicer',\n",
" 'CumulativeCompleteness@Time@H=20.00 NEO 3 quads in 30 nights detection loss MoObjSlicer',\n",
" 'DifferentialCompleteness@Time@H=22.00 NEO 3 pairs in 15 nights SNR=0 detection loss MoObjSlicer',\n",
" 'CumulativeCompleteness@Time@H=22.00 NEO 3 pairs in 15 nights SNR=0 detection loss MoObjSlicer',\n",
" 'DifferentialCompleteness@Time@H=20.00 NEO 3 pairs in 15 nights SNR=0 detection loss MoObjSlicer',\n",
" 'CumulativeCompleteness@Time@H=20.00 NEO 3 pairs in 15 nights SNR=0 detection loss MoObjSlicer',\n",
" 'DifferentialCompleteness@Time@H=22.00 NEO 3 pairs in 15 nights trailing loss MoObjSlicer',\n",
" 'CumulativeCompleteness@Time@H=22.00 NEO 3 pairs in 15 nights trailing loss MoObjSlicer',\n",
" 'DifferentialCompleteness@Time@H=20.00 NEO 3 pairs in 15 nights trailing loss MoObjSlicer',\n",
" 'CumulativeCompleteness@Time@H=20.00 NEO 3 pairs in 15 nights trailing loss MoObjSlicer',\n",
" 'DifferentialCompleteness@Time@H=22.00 NEO 3 pairs in 25 nights detection loss MoObjSlicer',\n",
" 'CumulativeCompleteness@Time@H=22.00 NEO 3 pairs in 25 nights detection loss MoObjSlicer',\n",
" 'DifferentialCompleteness@Time@H=20.00 NEO 3 pairs in 25 nights detection loss MoObjSlicer',\n",
" 'CumulativeCompleteness@Time@H=20.00 NEO 3 pairs in 25 nights detection loss MoObjSlicer',\n",
" 'DifferentialCompleteness@Time@H=22.00 NEO 3 pairs in 30 nights SNR=4 detection loss MoObjSlicer',\n",
" 'CumulativeCompleteness@Time@H=22.00 NEO 3 pairs in 30 nights SNR=4 detection loss MoObjSlicer',\n",
" 'DifferentialCompleteness@Time@H=20.00 NEO 3 pairs in 30 nights SNR=4 detection loss MoObjSlicer',\n",
" 'CumulativeCompleteness@Time@H=20.00 NEO 3 pairs in 30 nights SNR=4 detection loss MoObjSlicer',\n",
" 'DifferentialCompleteness@Time@H=22.00 NEO 4 pairs in 20 nights detection loss MoObjSlicer',\n",
" 'CumulativeCompleteness@Time@H=22.00 NEO 4 pairs in 20 nights detection loss MoObjSlicer',\n",
" 'DifferentialCompleteness@Time@H=20.00 NEO 4 pairs in 20 nights detection loss MoObjSlicer',\n",
" 'CumulativeCompleteness@Time@H=20.00 NEO 4 pairs in 20 nights detection loss MoObjSlicer',\n",
" 'DifferentialCompleteness@Time@H=22.00 NEO 3 pairs in 12 nights detection loss MoObjSlicer',\n",
" 'CumulativeCompleteness@Time@H=22.00 NEO 3 pairs in 12 nights detection loss MoObjSlicer',\n",
" 'DifferentialCompleteness@Time@H=20.00 NEO 3 pairs in 12 nights detection loss MoObjSlicer',\n",
" 'CumulativeCompleteness@Time@H=20.00 NEO 3 pairs in 12 nights detection loss MoObjSlicer',\n",
" 'DifferentialCompleteness@Time@H=22.00 NEO 3 pairs in 15 nights SNR=5 detection loss MoObjSlicer',\n",
" 'CumulativeCompleteness@Time@H=22.00 NEO 3 pairs in 15 nights SNR=5 detection loss MoObjSlicer',\n",
" 'DifferentialCompleteness@Time@H=20.00 NEO 3 pairs in 15 nights SNR=5 detection loss MoObjSlicer',\n",
" 'CumulativeCompleteness@Time@H=20.00 NEO 3 pairs in 15 nights SNR=5 detection loss MoObjSlicer',\n",
" 'DifferentialCompleteness@Time@H=22.00 NEO 3 triplets in 30 nights detection loss MoObjSlicer',\n",
" 'CumulativeCompleteness@Time@H=22.00 NEO 3 triplets in 30 nights detection loss MoObjSlicer',\n",
" 'DifferentialCompleteness@Time@H=20.00 NEO 3 triplets in 30 nights detection loss MoObjSlicer',\n",
" 'CumulativeCompleteness@Time@H=20.00 NEO 3 triplets in 30 nights detection loss MoObjSlicer',\n",
" 'DifferentialCompleteness@Time@H=22.00 NEO 3 pairs in 30 nights detection loss MoObjSlicer',\n",
" 'CumulativeCompleteness@Time@H=22.00 NEO 3 pairs in 30 nights detection loss MoObjSlicer',\n",
" 'DifferentialCompleteness@Time@H=20.00 NEO 3 pairs in 30 nights detection loss MoObjSlicer',\n",
" 'CumulativeCompleteness@Time@H=20.00 NEO 3 pairs in 30 nights detection loss MoObjSlicer',\n",
" 'DifferentialCompleteness@Time@H=22.00 NEO 3 pairs in 20 nights detection loss MoObjSlicer',\n",
" 'CumulativeCompleteness@Time@H=22.00 NEO 3 pairs in 20 nights detection loss MoObjSlicer',\n",
" 'DifferentialCompleteness@Time@H=20.00 NEO 3 pairs in 20 nights detection loss MoObjSlicer',\n",
" 'CumulativeCompleteness@Time@H=20.00 NEO 3 pairs in 20 nights detection loss MoObjSlicer',\n",
" 'DifferentialCompleteness@Time@H=22.00 NEO 3 pairs in 15 nights detection loss MoObjSlicer',\n",
" 'CumulativeCompleteness@Time@H=22.00 NEO 3 pairs in 15 nights detection loss MoObjSlicer',\n",
" 'DifferentialCompleteness@Time@H=20.00 NEO 3 pairs in 15 nights detection loss MoObjSlicer',\n",
" 'CumulativeCompleteness@Time@H=20.00 NEO 3 pairs in 15 nights detection loss MoObjSlicer',\n",
" 'DifferentialCompleteness@Time@H=22.00 NEO Single pair detection loss MoObjSlicer',\n",
" 'CumulativeCompleteness@Time@H=22.00 NEO Single pair detection loss MoObjSlicer',\n",
" 'DifferentialCompleteness@Time@H=20.00 NEO Single pair detection loss MoObjSlicer',\n",
" 'CumulativeCompleteness@Time@H=20.00 NEO Single pair detection loss MoObjSlicer',\n",
" 'DifferentialCompleteness@Time@H=22.00 NEO 3 pairs in 30 nights SNR=5 detection loss MoObjSlicer',\n",
" 'CumulativeCompleteness@Time@H=22.00 NEO 3 pairs in 30 nights SNR=5 detection loss MoObjSlicer',\n",
" 'DifferentialCompleteness@Time@H=20.00 NEO 3 pairs in 30 nights SNR=5 detection loss MoObjSlicer',\n",
" 'CumulativeCompleteness@Time@H=20.00 NEO 3 pairs in 30 nights SNR=5 detection loss MoObjSlicer',\n",
" 'DifferentialCompleteness@Time@H=22.00 NEO 3 pairs in 15 nights SNR=3 detection loss MoObjSlicer',\n",
" 'CumulativeCompleteness@Time@H=22.00 NEO 3 pairs in 15 nights SNR=3 detection loss MoObjSlicer',\n",
" 'DifferentialCompleteness@Time@H=20.00 NEO 3 pairs in 15 nights SNR=3 detection loss MoObjSlicer',\n",
" 'CumulativeCompleteness@Time@H=20.00 NEO 3 pairs in 15 nights SNR=3 detection loss MoObjSlicer',\n",
" 'DifferentialCompleteness@Time@H=22.00 NEO 3 pairs in 15 nights SNR=4 detection loss MoObjSlicer',\n",
" 'CumulativeCompleteness@Time@H=22.00 NEO 3 pairs in 15 nights SNR=4 detection loss MoObjSlicer',\n",
" 'DifferentialCompleteness@Time@H=20.00 NEO 3 pairs in 15 nights SNR=4 detection loss MoObjSlicer',\n",
" 'CumulativeCompleteness@Time@H=20.00 NEO 3 pairs in 15 nights SNR=4 detection loss MoObjSlicer',\n",
" 'DifferentialCompleteness@Time@H=22.00 NEO Single detection detection loss MoObjSlicer',\n",
" 'CumulativeCompleteness@Time@H=22.00 NEO Single detection detection loss MoObjSlicer',\n",
" 'DifferentialCompleteness@Time@H=20.00 NEO Single detection detection loss MoObjSlicer',\n",
" 'CumulativeCompleteness@Time@H=20.00 NEO Single detection detection loss MoObjSlicer',\n",
" 'DifferentialCompleteness@Time@H=22.00 NEO 3 pairs in 30 nights trailing loss MoObjSlicer',\n",
" 'CumulativeCompleteness@Time@H=22.00 NEO 3 pairs in 30 nights trailing loss MoObjSlicer',\n",
" 'DifferentialCompleteness@Time@H=20.00 NEO 3 pairs in 30 nights trailing loss MoObjSlicer',\n",
" 'CumulativeCompleteness@Time@H=20.00 NEO 3 pairs in 30 nights trailing loss MoObjSlicer',\n",
" 'CompletenessOverTime NULL MoObjSlicer',\n",
" 'CumulativeCompleteness 15, 30 loss nights pairs NEO 3 in detection MoObjSlicer',\n",
" 'DifferentialCompleteness 15, 30 loss nights pairs NEO 3 in detection MoObjSlicer',\n",
" 'Color_Asteroid NEO MoObjSlicer',\n",
" 'FractionPop 6 of ugrizy NEO MoObjSlicer',\n",
" 'FractionPop 5 of grizy NEO MoObjSlicer',\n",
" 'FractionPop 4 of grizy NEO MoObjSlicer',\n",
" 'FractionPop 2 of g, r or i, z or y NEO MoObjSlicer',\n",
" 'LightcurveInversion_Asteroid NEO MoObjSlicer',\n",
" 'FractionPop Lightcurve Inversion NEO MoObjSlicer',\n",
" 'Fraction of population for colors or lightcurve inversion NEO MoObjSlicer',\n",
" 'Percents_twilight_neo',\n",
" 'Counts_twilight_neo',\n",
" 'CumulativeCompleteness 15, 30 loss pairs detection nights NEO in 3 MoObjSlicer',\n",
" 'DifferentialCompleteness 15, 30 loss pairs detection nights NEO in 3 MoObjSlicer',\n",
" 'CumulativeCompleteness 30, 15 in nights detection pairs 3 NEO loss MoObjSlicer',\n",
" 'DifferentialCompleteness 30, 15 in nights detection pairs 3 NEO loss MoObjSlicer',\n",
" 'CumulativeCompleteness 30, 15 3 detection loss pairs in nights NEO MoObjSlicer',\n",
" 'DifferentialCompleteness 30, 15 3 detection loss pairs in nights NEO MoObjSlicer',\n",
" 'CumulativeCompleteness 15, 30 detection loss nights in NEO 3 pairs MoObjSlicer',\n",
" 'DifferentialCompleteness 15, 30 detection loss nights in NEO 3 pairs MoObjSlicer',\n",
" 'Percents_blob, y',\n",
" 'Percents_blob, zz, a',\n",
" 'Percents_blob, zz, b',\n",
" 'Percents_blob, ii, a',\n",
" 'Percents_blob, ii, b',\n",
" 'Percents_blob, rr, a',\n",
" 'Percents_blob, rr, b',\n",
" 'Percents_blob, gg, a',\n",
" 'Percents_blob, gg, b',\n",
" 'Percents_blob, u',\n",
" 'Counts_blob, y',\n",
" 'Counts_blob, zz, a',\n",
" 'Counts_blob, zz, b',\n",
" 'Counts_blob, ii, a',\n",
" 'Counts_blob, ii, b',\n",
" 'Counts_blob, rr, a',\n",
" 'Counts_blob, rr, b',\n",
" 'Counts_blob, gg, a',\n",
" 'Counts_blob, gg, b',\n",
" 'Counts_blob, u',\n",
" 'CumulativeCompleteness 15, 30 NEO 3 in detection nights loss pairs MoObjSlicer',\n",
" 'DifferentialCompleteness 15, 30 NEO 3 in detection nights loss pairs MoObjSlicer',\n",
" 'CumulativeCompleteness 30, 15 3 in detection loss NEO pairs nights MoObjSlicer',\n",
" 'DifferentialCompleteness 30, 15 3 in detection loss NEO pairs nights MoObjSlicer',\n",
" 'Percents_ham, west, g',\n",
" 'Percents_ham, west, r',\n",
" 'Percents_ham, east, r',\n",
" 'Percents_ham, east, g',\n",
" 'Percents_ham, west, u',\n",
" 'Percents_ham, east, u',\n",
" 'Counts_ham, west, g',\n",
" 'Counts_ham, west, r',\n",
" 'Counts_ham, east, r',\n",
" 'Counts_ham, east, g',\n",
" 'Counts_ham, west, u',\n",
" 'Counts_ham, east, u',\n",
" 'CumulativeCompleteness 15, 30 detection nights 3 NEO pairs loss in MoObjSlicer',\n",
" 'DifferentialCompleteness 15, 30 detection nights 3 NEO pairs loss in MoObjSlicer']"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"list(mdict.keys())"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [],
"source": [
"# If there are only some we want to focus on instead of reading all of them .. (much faster)\n",
"keys = ['fO All visits HealpixSlicer', \n",
" 'Parallax Error @ 24.0 All visits HealpixSlicer',\n",
" 'Proper Motion Error @ 24.0 All visits HealpixSlicer', \n",
" 'Periodic_amp_0.10_mag_24 HealpixSlicer',\n",
" 'TDEsAsciiMetric HealpixSlicer',\n",
" 'SNIa_PrePeak UserPointsSlicer',\n",
" 'GalaxyCountsMetric_extended i HealpixSlicer',\n",
" 'CumulativeCompleteness NEO 3 pairs in 15 nights detection loss MoObjSlicer',\n",
" 'CumulativeCompleteness@Time@H=22.00 NEO 3 pairs in 15 nights detection loss MoObjSlicer',\n",
" 'N stars to Precision 0.10 g HealpixSlicer']\n",
"for k in keys:\n",
" if k not in mdict:\n",
" print(k)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [],
"source": [
"mdict_sub = {}\n",
"for k in keys:\n",
" mdict_sub[k] = mdict[k]\n",
"rc.addSummaryStats(mdict_sub)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# something is still odd about the sso metrics .. the summary stats should have more info?\n",
"# Oh .. I'm not recording all of the relevant info into the summary table, but it is saved in \n",
"# actual metric output files (the cumulative completeness metric is a summary result, but it's 2d)\n",
"# SO for now, just take the cumulative completeness NEO .. it's the completeness at H=22. \n",
"# We would really also want completeness at the bright end, and \n",
"# probably weight by completeness at year 2 as well as 10"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" fOArea fO All visits HealpixSlicer | \n",
" fOArea/benchmark fO All visits HealpixSlicer | \n",
" fONv MedianNvis fO All visits HealpixSlicer | \n",
" fONv MinNvis fO All visits HealpixSlicer | \n",
" fONv/benchmark MedianNvis fO All visits HealpixSlicer | \n",
" fONv/benchmark MinNvis fO All visits HealpixSlicer | \n",
" Median Parallax Error (WFD) Parallax Error @ 24.0 All visits HealpixSlicer | \n",
" 95th Percentile Parallax Error Parallax Error @ 24.0 All visits HealpixSlicer | \n",
" Mean Parallax Error @ 24.0 All visits HealpixSlicer | \n",
" Rms Parallax Error @ 24.0 All visits HealpixSlicer | \n",
" ... | \n",
" TDEsAsciiMetric HealpixSlicer | \n",
" Max TDEsAsciiMetric HealpixSlicer | \n",
" Min TDEsAsciiMetric HealpixSlicer | \n",
" N(+3Sigma) TDEsAsciiMetric HealpixSlicer | \n",
" N(-3Sigma) TDEsAsciiMetric HealpixSlicer | \n",
" SNIa_PrePeak UserPointsSlicer | \n",
" N Galaxies (WFD) GalaxyCountsMetric_extended i HealpixSlicer | \n",
" N Galaxies (all) GalaxyCountsMetric_extended i HealpixSlicer | \n",
" CumulativeCompleteness NEO 3 pairs in 15 nights detection loss MoObjSlicer | \n",
" N stars to Precision 0.10 g HealpixSlicer | \n",
"
\n",
" \n",
" \n",
" \n",
" mw_heavy | \n",
" 18814.445645 | \n",
" 1.045247 | \n",
" 920.0 | \n",
" 872.0 | \n",
" 1.115152 | \n",
" 1.056970 | \n",
" 8.284197 | \n",
" 47.852974 | \n",
" 19.614744 | \n",
" 95.398854 | \n",
" ... | \n",
" 8117.0 | \n",
" 0.250000 | \n",
" 0.0 | \n",
" 36.0 | \n",
" 0.0 | \n",
" 0.17075 | \n",
" 1.004981e+10 | \n",
" 1.205900e+10 | \n",
" 0.596821 | \n",
" 7.056013e+08 | \n",
"
\n",
" \n",
" ss_heavy | \n",
" 18975.590025 | \n",
" 1.054199 | \n",
" 889.0 | \n",
" 846.0 | \n",
" 1.077576 | \n",
" 1.025455 | \n",
" 8.508767 | \n",
" 539.728032 | \n",
" 95.567306 | \n",
" 361.058703 | \n",
" ... | \n",
" 9309.0 | \n",
" 0.296296 | \n",
" 0.0 | \n",
" 57.0 | \n",
" 0.0 | \n",
" 0.17075 | \n",
" 9.951830e+09 | \n",
" 1.216792e+10 | \n",
" 0.596653 | \n",
" 7.149288e+08 | \n",
"
\n",
" \n",
" rolling_exgal_mod2_dust_sdf_0.20 | \n",
" 17819.043381 | \n",
" 0.989947 | \n",
" 911.0 | \n",
" 795.0 | \n",
" 1.104242 | \n",
" 0.963636 | \n",
" 9.391293 | \n",
" 40.953559 | \n",
" 17.786982 | \n",
" 56.462794 | \n",
" ... | \n",
" 8383.0 | \n",
" 0.321429 | \n",
" 0.0 | \n",
" 43.0 | \n",
" 0.0 | \n",
" 0.15650 | \n",
" 9.875209e+09 | \n",
" 1.216644e+10 | \n",
" 0.591325 | \n",
" 6.954544e+08 | \n",
"
\n",
" \n",
" ddf_heavy | \n",
" 18101.885340 | \n",
" 1.005660 | \n",
" 904.0 | \n",
" 835.0 | \n",
" 1.095758 | \n",
" 1.012121 | \n",
" 8.517158 | \n",
" 50.183759 | \n",
" 20.273833 | \n",
" 70.559784 | \n",
" ... | \n",
" 8117.0 | \n",
" 0.392857 | \n",
" 0.0 | \n",
" 54.0 | \n",
" 0.0 | \n",
" 0.16350 | \n",
" 9.884248e+09 | \n",
" 1.181162e+10 | \n",
" 0.584107 | \n",
" 7.122747e+08 | \n",
"
\n",
" \n",
" baseline_nexp1 | \n",
" 18173.225300 | \n",
" 1.009624 | \n",
" 944.0 | \n",
" 875.0 | \n",
" 1.144242 | \n",
" 1.060606 | \n",
" 8.218641 | \n",
" 47.081131 | \n",
" 19.914628 | \n",
" 97.665071 | \n",
" ... | \n",
" 8117.0 | \n",
" 0.250000 | \n",
" 0.0 | \n",
" 52.0 | \n",
" 0.0 | \n",
" 0.16950 | \n",
" 1.010741e+10 | \n",
" 1.208061e+10 | \n",
" 0.597651 | \n",
" 7.164745e+08 | \n",
"
\n",
" \n",
" barebones | \n",
" 18499.710528 | \n",
" 1.027762 | \n",
" 1122.0 | \n",
" 1043.0 | \n",
" 1.360000 | \n",
" 1.264242 | \n",
" 7.611897 | \n",
" 16.234931 | \n",
" 10.138720 | \n",
" 22.116464 | \n",
" ... | \n",
" 5963.0 | \n",
" 0.148148 | \n",
" 0.0 | \n",
" 128.0 | \n",
" 0.0 | \n",
" 0.03650 | \n",
" 1.061271e+10 | \n",
" 1.099271e+10 | \n",
" 0.610156 | \n",
" 5.425678e+08 | \n",
"
\n",
" \n",
" baseline_nexp2 | \n",
" 17383.449980 | \n",
" 0.965747 | \n",
" 872.0 | \n",
" 805.0 | \n",
" 1.056970 | \n",
" 0.975758 | \n",
" 8.701987 | \n",
" 50.432812 | \n",
" 20.587098 | \n",
" 76.438000 | \n",
" ... | \n",
" 8117.0 | \n",
" 0.259259 | \n",
" 0.0 | \n",
" 95.0 | \n",
" 0.0 | \n",
" 0.15750 | \n",
" 9.859187e+09 | \n",
" 1.178951e+10 | \n",
" 0.582921 | \n",
" 7.010446e+08 | \n",
"
\n",
" \n",
" dm_heavy | \n",
" 18169.028832 | \n",
" 1.009390 | \n",
" 949.0 | \n",
" 881.0 | \n",
" 1.150303 | \n",
" 1.067879 | \n",
" 8.925745 | \n",
" 45.347677 | \n",
" 20.322550 | \n",
" 146.114300 | \n",
" ... | \n",
" 8117.0 | \n",
" 0.222222 | \n",
" 0.0 | \n",
" 48.0 | \n",
" 0.0 | \n",
" 0.17050 | \n",
" 1.010657e+10 | \n",
" 1.206574e+10 | \n",
" 0.571827 | \n",
" 7.270122e+08 | \n",
"
\n",
" \n",
"
\n",
"
8 rows × 47 columns
\n",
"
"
],
"text/plain": [
" fOArea fO All visits HealpixSlicer \\\n",
"mw_heavy 18814.445645 \n",
"ss_heavy 18975.590025 \n",
"rolling_exgal_mod2_dust_sdf_0.20 17819.043381 \n",
"ddf_heavy 18101.885340 \n",
"baseline_nexp1 18173.225300 \n",
"barebones 18499.710528 \n",
"baseline_nexp2 17383.449980 \n",
"dm_heavy 18169.028832 \n",
"\n",
" fOArea/benchmark fO All visits HealpixSlicer \\\n",
"mw_heavy 1.045247 \n",
"ss_heavy 1.054199 \n",
"rolling_exgal_mod2_dust_sdf_0.20 0.989947 \n",
"ddf_heavy 1.005660 \n",
"baseline_nexp1 1.009624 \n",
"barebones 1.027762 \n",
"baseline_nexp2 0.965747 \n",
"dm_heavy 1.009390 \n",
"\n",
" fONv MedianNvis fO All visits HealpixSlicer \\\n",
"mw_heavy 920.0 \n",
"ss_heavy 889.0 \n",
"rolling_exgal_mod2_dust_sdf_0.20 911.0 \n",
"ddf_heavy 904.0 \n",
"baseline_nexp1 944.0 \n",
"barebones 1122.0 \n",
"baseline_nexp2 872.0 \n",
"dm_heavy 949.0 \n",
"\n",
" fONv MinNvis fO All visits HealpixSlicer \\\n",
"mw_heavy 872.0 \n",
"ss_heavy 846.0 \n",
"rolling_exgal_mod2_dust_sdf_0.20 795.0 \n",
"ddf_heavy 835.0 \n",
"baseline_nexp1 875.0 \n",
"barebones 1043.0 \n",
"baseline_nexp2 805.0 \n",
"dm_heavy 881.0 \n",
"\n",
" fONv/benchmark MedianNvis fO All visits HealpixSlicer \\\n",
"mw_heavy 1.115152 \n",
"ss_heavy 1.077576 \n",
"rolling_exgal_mod2_dust_sdf_0.20 1.104242 \n",
"ddf_heavy 1.095758 \n",
"baseline_nexp1 1.144242 \n",
"barebones 1.360000 \n",
"baseline_nexp2 1.056970 \n",
"dm_heavy 1.150303 \n",
"\n",
" fONv/benchmark MinNvis fO All visits HealpixSlicer \\\n",
"mw_heavy 1.056970 \n",
"ss_heavy 1.025455 \n",
"rolling_exgal_mod2_dust_sdf_0.20 0.963636 \n",
"ddf_heavy 1.012121 \n",
"baseline_nexp1 1.060606 \n",
"barebones 1.264242 \n",
"baseline_nexp2 0.975758 \n",
"dm_heavy 1.067879 \n",
"\n",
" Median Parallax Error (WFD) Parallax Error @ 24.0 All visits HealpixSlicer \\\n",
"mw_heavy 8.284197 \n",
"ss_heavy 8.508767 \n",
"rolling_exgal_mod2_dust_sdf_0.20 9.391293 \n",
"ddf_heavy 8.517158 \n",
"baseline_nexp1 8.218641 \n",
"barebones 7.611897 \n",
"baseline_nexp2 8.701987 \n",
"dm_heavy 8.925745 \n",
"\n",
" 95th Percentile Parallax Error Parallax Error @ 24.0 All visits HealpixSlicer \\\n",
"mw_heavy 47.852974 \n",
"ss_heavy 539.728032 \n",
"rolling_exgal_mod2_dust_sdf_0.20 40.953559 \n",
"ddf_heavy 50.183759 \n",
"baseline_nexp1 47.081131 \n",
"barebones 16.234931 \n",
"baseline_nexp2 50.432812 \n",
"dm_heavy 45.347677 \n",
"\n",
" Mean Parallax Error @ 24.0 All visits HealpixSlicer \\\n",
"mw_heavy 19.614744 \n",
"ss_heavy 95.567306 \n",
"rolling_exgal_mod2_dust_sdf_0.20 17.786982 \n",
"ddf_heavy 20.273833 \n",
"baseline_nexp1 19.914628 \n",
"barebones 10.138720 \n",
"baseline_nexp2 20.587098 \n",
"dm_heavy 20.322550 \n",
"\n",
" Rms Parallax Error @ 24.0 All visits HealpixSlicer \\\n",
"mw_heavy 95.398854 \n",
"ss_heavy 361.058703 \n",
"rolling_exgal_mod2_dust_sdf_0.20 56.462794 \n",
"ddf_heavy 70.559784 \n",
"baseline_nexp1 97.665071 \n",
"barebones 22.116464 \n",
"baseline_nexp2 76.438000 \n",
"dm_heavy 146.114300 \n",
"\n",
" ... TDEsAsciiMetric HealpixSlicer \\\n",
"mw_heavy ... 8117.0 \n",
"ss_heavy ... 9309.0 \n",
"rolling_exgal_mod2_dust_sdf_0.20 ... 8383.0 \n",
"ddf_heavy ... 8117.0 \n",
"baseline_nexp1 ... 8117.0 \n",
"barebones ... 5963.0 \n",
"baseline_nexp2 ... 8117.0 \n",
"dm_heavy ... 8117.0 \n",
"\n",
" Max TDEsAsciiMetric HealpixSlicer \\\n",
"mw_heavy 0.250000 \n",
"ss_heavy 0.296296 \n",
"rolling_exgal_mod2_dust_sdf_0.20 0.321429 \n",
"ddf_heavy 0.392857 \n",
"baseline_nexp1 0.250000 \n",
"barebones 0.148148 \n",
"baseline_nexp2 0.259259 \n",
"dm_heavy 0.222222 \n",
"\n",
" Min TDEsAsciiMetric HealpixSlicer \\\n",
"mw_heavy 0.0 \n",
"ss_heavy 0.0 \n",
"rolling_exgal_mod2_dust_sdf_0.20 0.0 \n",
"ddf_heavy 0.0 \n",
"baseline_nexp1 0.0 \n",
"barebones 0.0 \n",
"baseline_nexp2 0.0 \n",
"dm_heavy 0.0 \n",
"\n",
" N(+3Sigma) TDEsAsciiMetric HealpixSlicer \\\n",
"mw_heavy 36.0 \n",
"ss_heavy 57.0 \n",
"rolling_exgal_mod2_dust_sdf_0.20 43.0 \n",
"ddf_heavy 54.0 \n",
"baseline_nexp1 52.0 \n",
"barebones 128.0 \n",
"baseline_nexp2 95.0 \n",
"dm_heavy 48.0 \n",
"\n",
" N(-3Sigma) TDEsAsciiMetric HealpixSlicer \\\n",
"mw_heavy 0.0 \n",
"ss_heavy 0.0 \n",
"rolling_exgal_mod2_dust_sdf_0.20 0.0 \n",
"ddf_heavy 0.0 \n",
"baseline_nexp1 0.0 \n",
"barebones 0.0 \n",
"baseline_nexp2 0.0 \n",
"dm_heavy 0.0 \n",
"\n",
" SNIa_PrePeak UserPointsSlicer \\\n",
"mw_heavy 0.17075 \n",
"ss_heavy 0.17075 \n",
"rolling_exgal_mod2_dust_sdf_0.20 0.15650 \n",
"ddf_heavy 0.16350 \n",
"baseline_nexp1 0.16950 \n",
"barebones 0.03650 \n",
"baseline_nexp2 0.15750 \n",
"dm_heavy 0.17050 \n",
"\n",
" N Galaxies (WFD) GalaxyCountsMetric_extended i HealpixSlicer \\\n",
"mw_heavy 1.004981e+10 \n",
"ss_heavy 9.951830e+09 \n",
"rolling_exgal_mod2_dust_sdf_0.20 9.875209e+09 \n",
"ddf_heavy 9.884248e+09 \n",
"baseline_nexp1 1.010741e+10 \n",
"barebones 1.061271e+10 \n",
"baseline_nexp2 9.859187e+09 \n",
"dm_heavy 1.010657e+10 \n",
"\n",
" N Galaxies (all) GalaxyCountsMetric_extended i HealpixSlicer \\\n",
"mw_heavy 1.205900e+10 \n",
"ss_heavy 1.216792e+10 \n",
"rolling_exgal_mod2_dust_sdf_0.20 1.216644e+10 \n",
"ddf_heavy 1.181162e+10 \n",
"baseline_nexp1 1.208061e+10 \n",
"barebones 1.099271e+10 \n",
"baseline_nexp2 1.178951e+10 \n",
"dm_heavy 1.206574e+10 \n",
"\n",
" CumulativeCompleteness NEO 3 pairs in 15 nights detection loss MoObjSlicer \\\n",
"mw_heavy 0.596821 \n",
"ss_heavy 0.596653 \n",
"rolling_exgal_mod2_dust_sdf_0.20 0.591325 \n",
"ddf_heavy 0.584107 \n",
"baseline_nexp1 0.597651 \n",
"barebones 0.610156 \n",
"baseline_nexp2 0.582921 \n",
"dm_heavy 0.571827 \n",
"\n",
" N stars to Precision 0.10 g HealpixSlicer \n",
"mw_heavy 7.056013e+08 \n",
"ss_heavy 7.149288e+08 \n",
"rolling_exgal_mod2_dust_sdf_0.20 6.954544e+08 \n",
"ddf_heavy 7.122747e+08 \n",
"baseline_nexp1 7.164745e+08 \n",
"barebones 5.425678e+08 \n",
"baseline_nexp2 7.010446e+08 \n",
"dm_heavy 7.270122e+08 \n",
"\n",
"[8 rows x 47 columns]"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"rc.summaryStats # Note that this includes all summary stat values for each of these metrics.\n",
"# Maybe we just want medians for now, but including something about the tails (95th percentiles? rms?) would be good.\n",
"# It looks like the raw summary stat recorded for TDE may be something spurious. \n",
"# The metric itself calculates the fraction of TDEs possible to detect at each point in the sky.\n",
"# The median value would be better to use for now."
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [],
"source": [
"# Or if there are just specific metrics that we would like to investigate .. \n",
"cols_dict = {'fO': 'fONv/benchmark MedianNvis fO All visits HealpixSlicer',\n",
" 'Parallax': 'Median Parallax Error (WFD) Parallax Error @ 24.0 All visits HealpixSlicer',\n",
" 'Proper Motion': 'Median Proper Motion Error (WFD) Proper Motion Error @ 24.0 All visits HealpixSlicer',\n",
" 'N Gals': 'N Galaxies (all) GalaxyCountsMetric_extended i HealpixSlicer',\n",
" 'SNe Ia': 'SNIa_PrePeak UserPointsSlicer',\n",
" 'TDE': 'Median TDEsAsciiMetric HealpixSlicer', \n",
" 'NEO': 'CumulativeCompleteness NEO 3 pairs in 15 nights detection loss MoObjSlicer',\n",
" 'N Stars': 'N stars to Precision 0.10 g HealpixSlicer'}"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" fO | \n",
" Parallax | \n",
" Proper Motion | \n",
" N Gals | \n",
" SNe Ia | \n",
" TDE | \n",
" NEO | \n",
" N Stars | \n",
"
\n",
" \n",
" \n",
" \n",
" mw_heavy | \n",
" 1.115152 | \n",
" 8.284197 | \n",
" 2.046244 | \n",
" 1.205900e+10 | \n",
" 0.17075 | \n",
" 0.035714 | \n",
" 0.596821 | \n",
" 7.056013e+08 | \n",
"
\n",
" \n",
" ss_heavy | \n",
" 1.077576 | \n",
" 8.508767 | \n",
" 2.093914 | \n",
" 1.216792e+10 | \n",
" 0.17075 | \n",
" 0.035714 | \n",
" 0.596653 | \n",
" 7.149288e+08 | \n",
"
\n",
" \n",
" rolling_exgal_mod2_dust_sdf_0.20 | \n",
" 1.104242 | \n",
" 9.391293 | \n",
" 2.237154 | \n",
" 1.216644e+10 | \n",
" 0.15650 | \n",
" 0.035714 | \n",
" 0.591325 | \n",
" 6.954544e+08 | \n",
"
\n",
" \n",
" ddf_heavy | \n",
" 1.095758 | \n",
" 8.517158 | \n",
" 2.101540 | \n",
" 1.181162e+10 | \n",
" 0.16350 | \n",
" 0.035714 | \n",
" 0.584107 | \n",
" 7.122747e+08 | \n",
"
\n",
" \n",
" baseline_nexp1 | \n",
" 1.144242 | \n",
" 8.218641 | \n",
" 2.025223 | \n",
" 1.208061e+10 | \n",
" 0.16950 | \n",
" 0.035714 | \n",
" 0.597651 | \n",
" 7.164745e+08 | \n",
"
\n",
" \n",
" barebones | \n",
" 1.360000 | \n",
" 7.611897 | \n",
" 1.860636 | \n",
" 1.099271e+10 | \n",
" 0.03650 | \n",
" 0.000000 | \n",
" 0.610156 | \n",
" 5.425678e+08 | \n",
"
\n",
" \n",
" baseline_nexp2 | \n",
" 1.056970 | \n",
" 8.701987 | \n",
" 2.096306 | \n",
" 1.178951e+10 | \n",
" 0.15750 | \n",
" 0.035714 | \n",
" 0.582921 | \n",
" 7.010446e+08 | \n",
"
\n",
" \n",
" dm_heavy | \n",
" 1.150303 | \n",
" 8.925745 | \n",
" 2.208035 | \n",
" 1.206574e+10 | \n",
" 0.17050 | \n",
" 0.035714 | \n",
" 0.571827 | \n",
" 7.270122e+08 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" fO Parallax Proper Motion \\\n",
"mw_heavy 1.115152 8.284197 2.046244 \n",
"ss_heavy 1.077576 8.508767 2.093914 \n",
"rolling_exgal_mod2_dust_sdf_0.20 1.104242 9.391293 2.237154 \n",
"ddf_heavy 1.095758 8.517158 2.101540 \n",
"baseline_nexp1 1.144242 8.218641 2.025223 \n",
"barebones 1.360000 7.611897 1.860636 \n",
"baseline_nexp2 1.056970 8.701987 2.096306 \n",
"dm_heavy 1.150303 8.925745 2.208035 \n",
"\n",
" N Gals SNe Ia TDE NEO \\\n",
"mw_heavy 1.205900e+10 0.17075 0.035714 0.596821 \n",
"ss_heavy 1.216792e+10 0.17075 0.035714 0.596653 \n",
"rolling_exgal_mod2_dust_sdf_0.20 1.216644e+10 0.15650 0.035714 0.591325 \n",
"ddf_heavy 1.181162e+10 0.16350 0.035714 0.584107 \n",
"baseline_nexp1 1.208061e+10 0.16950 0.035714 0.597651 \n",
"barebones 1.099271e+10 0.03650 0.000000 0.610156 \n",
"baseline_nexp2 1.178951e+10 0.15750 0.035714 0.582921 \n",
"dm_heavy 1.206574e+10 0.17050 0.035714 0.571827 \n",
"\n",
" N Stars \n",
"mw_heavy 7.056013e+08 \n",
"ss_heavy 7.149288e+08 \n",
"rolling_exgal_mod2_dust_sdf_0.20 6.954544e+08 \n",
"ddf_heavy 7.122747e+08 \n",
"baseline_nexp1 7.164745e+08 \n",
"barebones 5.425678e+08 \n",
"baseline_nexp2 7.010446e+08 \n",
"dm_heavy 7.270122e+08 "
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Pull out the exact summary stats we want and rename them to simpler column values\n",
"subDF = rc.summaryStats[cols_dict.values()]\n",
"subDF = subDF.rename(mapper=dict(map(reversed, cols_dict.items())), axis=1)\n",
"subDF"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" fO | \n",
" Parallax | \n",
" Proper Motion | \n",
" N Gals | \n",
" SNe Ia | \n",
" TDE | \n",
" NEO | \n",
" N Stars | \n",
"
\n",
" \n",
" \n",
" \n",
" mw_heavy | \n",
" 0.974576 | \n",
" 1.007977 | \n",
" 1.010379 | \n",
" 0.998211 | \n",
" 1.007375 | \n",
" 1.0 | \n",
" 0.998611 | \n",
" 0.984824 | \n",
"
\n",
" \n",
" ss_heavy | \n",
" 0.941737 | \n",
" 1.035301 | \n",
" 1.033917 | \n",
" 1.007227 | \n",
" 1.007375 | \n",
" 1.0 | \n",
" 0.998330 | \n",
" 0.997843 | \n",
"
\n",
" \n",
" rolling_exgal_mod2_dust_sdf_0.20 | \n",
" 0.965042 | \n",
" 1.142682 | \n",
" 1.104646 | \n",
" 1.007105 | \n",
" 0.923304 | \n",
" 1.0 | \n",
" 0.989415 | \n",
" 0.970662 | \n",
"
\n",
" \n",
" ddf_heavy | \n",
" 0.957627 | \n",
" 1.036322 | \n",
" 1.037683 | \n",
" 0.977733 | \n",
" 0.964602 | \n",
" 1.0 | \n",
" 0.977338 | \n",
" 0.994138 | \n",
"
\n",
" \n",
" baseline_nexp1 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.0 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
"
\n",
" \n",
" barebones | \n",
" 1.188559 | \n",
" 0.926175 | \n",
" 0.918731 | \n",
" 0.909946 | \n",
" 0.215339 | \n",
" 0.0 | \n",
" 1.020923 | \n",
" 0.757274 | \n",
"
\n",
" \n",
" baseline_nexp2 | \n",
" 0.923729 | \n",
" 1.058811 | \n",
" 1.035098 | \n",
" 0.975904 | \n",
" 0.929204 | \n",
" 1.0 | \n",
" 0.975354 | \n",
" 0.978464 | \n",
"
\n",
" \n",
" dm_heavy | \n",
" 1.005297 | \n",
" 1.086037 | \n",
" 1.090267 | \n",
" 0.998769 | \n",
" 1.005900 | \n",
" 1.0 | \n",
" 0.956790 | \n",
" 1.014708 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" fO Parallax Proper Motion N Gals \\\n",
"mw_heavy 0.974576 1.007977 1.010379 0.998211 \n",
"ss_heavy 0.941737 1.035301 1.033917 1.007227 \n",
"rolling_exgal_mod2_dust_sdf_0.20 0.965042 1.142682 1.104646 1.007105 \n",
"ddf_heavy 0.957627 1.036322 1.037683 0.977733 \n",
"baseline_nexp1 1.000000 1.000000 1.000000 1.000000 \n",
"barebones 1.188559 0.926175 0.918731 0.909946 \n",
"baseline_nexp2 0.923729 1.058811 1.035098 0.975904 \n",
"dm_heavy 1.005297 1.086037 1.090267 0.998769 \n",
"\n",
" SNe Ia TDE NEO N Stars \n",
"mw_heavy 1.007375 1.0 0.998611 0.984824 \n",
"ss_heavy 1.007375 1.0 0.998330 0.997843 \n",
"rolling_exgal_mod2_dust_sdf_0.20 0.923304 1.0 0.989415 0.970662 \n",
"ddf_heavy 0.964602 1.0 0.977338 0.994138 \n",
"baseline_nexp1 1.000000 1.0 1.000000 1.000000 \n",
"barebones 0.215339 0.0 1.020923 0.757274 \n",
"baseline_nexp2 0.929204 1.0 0.975354 0.978464 \n",
"dm_heavy 1.005900 1.0 0.956790 1.014708 "
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Let's normalize everything and reverse proper motion & parallax error so bigger is better.\n",
"# note you can normalize inside the runcomparison metric, but doing it explicitly here to reverse might be easier\n",
"baseline = 'baseline_nexp1'\n",
"for k in ['Parallax', 'Proper Motion']:\n",
" subDF[k] = 1 - (subDF[k] - subDF[k][baseline]) / subDF[k][baseline]\n",
"for k in ['N Gals', 'SNe Ia', 'TDE', 'fO', 'NEO', 'N Stars']:\n",
" subDF[k] = subDF[k] / subDF[k][baseline]\n",
"subDF"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [],
"source": [
"metric_names = list(cols_dict.keys())\n",
"theta = radar_factory(len(metric_names), frame='polygon')"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAbsAAAFECAYAAAC+rZDSAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzs3Xd4VFXCx/HvuXdqZtImvRe60qWIFQEVyyprRV37Wta6FgRXt+juK6irrtstK/burr2w1rUgIKACSQgQIL23aZl2z/tHEqQkEGBCEM7neXzEzMm550omvznnniKklCiKoijKgUwb6AYoiqIoSn9TYacoiqIc8FTYKYqiKAc8FXaKoijKAU+FnaIoinLAU2GnKIqiHPBU2CkHDSHEDUKIYiHEc0KIWUKI74UQJUKIVUKIWQPdPkVR+o9Q6+yUg4UQogQ4CYgDXgOOl1JuFEIUAP8FzpBSfj+QbVQUpX+onp1yUBBC/BMoBN4EvgDukVJuBOj693xgzsC1UFGU/qTCTjkoSCmvBqqB44B1wPLtinwDHLqv26Uoyr6hwk45GAlg+/H7nr6mKMoBQoWdcjBaA0zY7mvjgaIBaIuiKPuACjvlYPRH4HYhRD5A179/BTwwYC1SFKVfmQa6AYqyr0kpvxVCzAXeEkKYgRBwm5Ty2wFumqIo/UQtPVAURVEOeGoYU1EURTngqbBTFEVRDngq7BRFUZQDngo7RVEU5YCnwk5RFEU54KmwUxRFUQ54KuwURVGUA54KO0VRFOWAp8JOURRFOeCpsFMOSkIIXQjxByHEtIFui6Io/U9tF6YcVIQQKYmJiddYLJYrk5OTk4LBoPB4PKWNjY1/CIVC/5FSBge6jYqiRJ8KO+WAJ4QQwOSMjIw7Y2JiJt98883xF110kdnpdPLpp5+Sn5/Pww8/7H7xxRd9kUjkuYaGhoeklJUD3W5FUaJHhZ1ywBJCOBwOx4WxsbG3Tpw4MWHu3LlJRxxxBJ3Z1+nTTz9l6tSpAAQCAV5++eXI/fff39zU1FRSXV19N/CxlNIYmDtQFCVaVNgpBxwhxLC0tLS5ZrP51CuuuMJx9dVXx6Smpm5Tpuauu2h9+RVkJILQdRLOOZuM3/52y+vffvstf/zjH1s+/PBDT0dHx9/a2toelVK27Ot7URQlOlTYKQcEIYTJZDKdnpKScmd+fn7WvHnzkk855RSh6zpSSsLhMOFwGCkljffMx/vqqzvU4Tz7LFLuuAOTyYSu6wghaGtrY+HChYGHH37YHQgE/ldTU/N/UsoVA3CLiqLsBRV2yo+aECIjLS3tFl3XL5k+fbpz1qxZ1tTUVMLh8NZltgSYpmk4L7kUYew4Mik1jbZ/PU44HCYSiWzzmtlsZvXq1bz44ovedevWNbS2tv7B6/U+J6Xs6PebVBRlr6mwU350uiacHJufnz/fbrcfeskll8SceeaZemJiIhaLBavVislk2ubZ3NaKh4/ote4RJcU7fE1KSTAYJBAIEAgE2LRpE08++WTwjTfe8Ou6/np5efndUsqyaN2foijRp8JO+dEQQsTHxsZeHhMTc8Oxxx4bO2fOHNeECRN2qw4ZClEyegz09HOv64xYs7rPdYVCIV5//XXj3nvvba6pqSmrra292zCM96WUkV1/t6Io+5IKO2W/J4QYnZGR8SuLxTLt2muvjb388sttLpdrt+sJNzdTecON+L/5psfXE86bvc0kld1RXFzMAw880Pb22297Q6HQY83NzX+TUjbsUWWKokSdCjtlvySEsFqt1rMTExNvHz58eOrtt9+ePGPGDDRtzzb96SgpoeKaa4k0NuK69FI61q3D++mnSMOge7Az+29/JXb69L1qt8fj4Zlnngk+9NBD7V6vd2l1dfUfgK+leqMpyoBSYafsV4QQeSkpKTebTKbZF1xwgf3666+Pzc3N3as629//gOp589BiYki+4QasBQVbXlvS2MjEuDjq588nVFtL/gsvYBs2dG9vAyklixcv5t57721aunRpm9vt/qPX631aSund68oVRdltKuyUASeE0IDjMzMzf5OSkjJk7ty5rjPPPFO3WCx7Va80DBr/+lca//4PrIMHk3z99egJCduUWdLYyOTkZMLNzdTddReaw0H+q69gSkzcq2tvrb6+nkceecT36KOPesPh8Lu1tbULpJQlUbuAoii7pMJOGTBCiKSEhIRfWK3Wq0888UTHrbfemjBq1Kio1B3xeKi+7TY8H3+C45hjcF10EcJs3qFcd9gBBDZsoH7+fOzjxpL7r3/1WH6v2hSJ8O6778r58+c3bdq0qaqhoeEP4XD4DSllKKoXUhRlByrslH1OCDEpIyPjDrvdPuWXv/xl3MUXX2yNi4uLWv3B8nIqfnENwY0bSTz/fJwzZvS6DGHrsAPwfvklTY8+SuL555H+m99ErU3b27BhAw8//HD7K6+84guHw880Njb+SUpZ3W8XVJSDnAo7ZZ8QQsTExMRcEBcXN2fcuHGuefPmJR199NG9htCe8n71FZW/vAkMg+RrrsF26KE7Lb992AG0vPQS7nffJf13vyVx9uyotm97fr+fl156KXz//fe3tLa2rq6urv498Kma0KIo0aXCTulXQoghaWlpt5lMptMuu+wyxzXXXONIT0+P+nWklLQ8/TR1996HOTOTlBtvxLTdfpg96SnspGHQ8NBDdKxZQ+7CJ3BMmhT19vZk+fLl3Hfffc2fffaZp6Oj489tbW2PSynb9snFFeUAp8JOibqufSpPTUlJuTMnJyd33rx5ST/5yU80k8nUL9czgkFqf/s72v7zH+yHHUbSlVei2Wx9+t6ewg7A8PmovftuZIef/FdexZKdFe1m96qlpYXHH3+8429/+5s7GAx+UlNTc4+U8rt91gBFOQCpsFOiRgiR5nK5rjebzZf99Kc/jbnpppvihw7d+2n8OxOqr6fy+hvo+O474mbNIv700xG7sRavt7ADCNXWUnvXXViys8l/4Xk0hyNaze4TwzD46KOPmD9/fmNxcXFDa2vrgo6OjpeklIF92hBFOQCosFP2Stc+lUdlZmb+OjY2dtwtt9wSf8EFF5hjYmL6/dr+77+n8rrriLS7Sfr5z4mZOHG369hZ2AH4V62i4cEHcU6bRvafH96tII2miooK/vKXv3ieffZZXyQSebm+vv4BKeWmAWmMovwIqbBT9ogQItbpdF7qcDhuOuKII+Lmzp3rmjRpUtQnnPSm7Y03qPn1b9Di40m54QYse7jwfFdhB9D+/vu0vvACyddeS8r11+3RdaIlGAzy73//O7JgwYKWhoaG9V0HzH6gDphVlJ1TYafsFiHEyPT09Hlms/mEX/ziF84rrrjCnryLsIgmGQ5T/8CDNC9ciHXECJKvvRY9NnaP6+tL2EkpaX78cbxffEHWn/5E3MwT9/h60bR69WoeeOCB1vfee88bCAQeaW1t/buUsmmg26Uo+yMVdsouCSEsZrP5jKSkpDsGDx6cfvvttyfNnDlT7Ok+lXsq0tZG1c234P3yS5wzZpB43nmIvZz00pewg87TEuoXLCBYWUn+C89jG9H7MUH7mtvt5qmnngo+9NBD7R0dHYu79uNcppYvKMoPVNgpvRJC5CQnJ99kMpnOnz17dsyNN94Ym5+fPyBtCWzYQMU11xKqqsJ14YU4p06NSr19DTuASGsrtXfdhbBaKXj1FUxJSVFpQ7RIKfniiy9YsGBB04oVK1ra29vv9/l8z0opfQPdNkUZaCrslG107VM5LTMz8zcul2v4bbfd5jrnnHN0q9U6YG1yf/IJ1bfOAZNOynXXY43iDM/dCTuA4MaN1N1zD7aRI8l7ciFiL/fv7C+1tbX885//9D3++OPecDj8Zl1d3X1SytKBbpeiDBQVdgoAQojE+Pj4K20227UzZsxw3nrrrYljx44d0DZJKWl69DEa/vQnLHl5JN9wQ9R6U3d/284rmwIYEjQBZ+db+c3Yvm1Z5v36a5r+8Q8Szj6L9Lvv3meTcvZEOBzm7bffNubPn99cUVFR3rUf51tSyvBAt01R9iUVdlsRQkSAVYAJKAYujsYQkBDiSeBtKeWrQohPgVullD2fILqPCSHGZ2Rk3GG1Wo+58cYbYy+99FJrfHz8QDcLw++n5o47aH/3PWIOPxzXZZehRal3efe37by0ccelaucW9D3wWl99lfa33iLtzjtx/eyCqLSrv5WWlvLQQw+1vf76675QKPRkU1PTn6WUtf19XSGEBB6UUt7S9d+3Ak4p5e+2K5cG/AvIAczAJinlyUKIfOAIKeXz/d1W5cClwm4rQgiPlNLZ9efngOVSygf7+L26lDLSy2tPsh+FnRDCZrfbz4uPj587evTopHnz5iVPnTp1v+mhhKqrqbj2OgIlJSScfTaxJ5+8222TUhKWkpBhEJaSsGEQkZKIlBz/voee5ulrwCcnx2ISGroQmITAomnoPUzEkYZB458fxv/9KnIffwzHlCl7drMDwOfz8fzzz4cfeOCBlvb29u+69uP8vL8mtAghOoAaYKKUsnEnYfcIUCSlfLjrv0dLKb8XQkyl8z1z6m5cs9f3o3JwUmG3le3C7mpgtJTyGiHE63R+2rQBD0spH+0uDzwInAjcAkwDfgLYga+Aq6SUsrewE0L8A5jYVf5VKeVvhRDxwFLgNCnlWiHEC8DHUsrHonB/hWlpaXN0XT/jkksuibnmmmucWVn7bhusvvB98w2V19+A0dFB8i9+gX3MmB7LGVLij0TwhsP4I2E6IhE6IhECEQNJ58+0WdMwa93BpdERgc9qDP65NsRdpie4QP8YHYMIGs9FpvHb8GX8e7oVkFsCMtQVkgCaENh0HbuuY9N1bMEQgfvuRbo9FLz6yh6v9RtIy5Yt4957723+4osv2n0+35/cbvdCKWV7NK/R9T75PzoD7o6dhN2bwFNSyte2+/rXwAhgI/AU8B/gGaB7S5vrpJRfdYXib+kM1rF0vrdeBrIBHfi9lPKlaN6b8uOhwm4r3WEnhDABrwHvSyn/IYRwSSmbhRB2YBlwrJSyqWt45lwp5ctd3++SUjZ3/fkZ4GUp5Vs7CbvuenXgI+CGrk+yxwN3Aw8Dl0gpZ+7FPemapp2Ulpb2m8zMzPx58+YlnX766Zo5yme1RUPLSy9T+/vfY0pJIeWGGzBnZgIQjERwh8O0h0K4wyH84TAgiDHpxOgm7KYfAsiq6Wjb9QJL2sK8VObnrYoO/BG4y/QE5anf8GpcLAadPbqz2t3k1k/gEfPPOafAzhn5NpKs2/boIoZBhxHB3xWsvnAEf10t8Q8+iBGfQOT//kB8Rgbx8fHExcXRX3uB9oempiYee+wx/z/+8Q9PMBj8sLa29h4p5epo1N0VdpnA98AY4Ap6DrsTgZeAlcCHwEIpZfX2PTshRAxgSCk7hBBDgBeklBO6yr0DjJRSbhRCnAnMlFJe0fV98Wpj7YOXCrutbPXMDuBz4BYpZVAI8Tvgp11fzwdOlFJ+LYQIA9bu4ZKuN9dtQAzgAv4ipVywk7C7GriSzmeEGcD1UsoXu+p6FDgTGCOlrNyDe0lJTEy8zmKx/PwnP/lJzM0335wwYj9aG7Y1GQpRN38+Lc+/gG3UKGxXXEG72URrMIQnHMKsacSZzMSaO/+J0fVdDmsGI5JF1QFeLPOzsjmMRYMjkzROTNUobbmKV+KcsHUdUnJ2u4clnr+zpl1i1uDELCuzC+yMdZl2er2ONWuo/+MfsRwxBXH77bS73bS1tSGEIDExEZfLRVJSErY+bk49kAzDYNGiRcyfP7+xtLS0rqmp6f9CodBrUsrgnta51YfIu4EQ4KeHsOsq6wJmAicBJwAjgUPZNuzigb/S2XuLAEOllDHdPTsp5XFd5YYCH9DZu3tbSvn5nt6D8uP34/nouW/4pZTbTEHsegPNAKZIKX1dYdX9W6tjq6CzAX8HJkgpK7oCstffbkKIAuBWOp9jtHQFoq3rNY3OYRs/naHZp7Dr2qdySmZm5p1DhgyZePPNN8f97Gc/szidzj7d/EAINzdTfv0NBJYvJzBtGtUnzcQhDRIk5DocOE2mHXpqO1Pti/DyRj+vbuqgJSjJsAkuztWZntCOw/Mx9U2LeTVhu6ADEILX4pw8l1zFOvJYVBfh4+oAb1cEGBanM7vQzik5NhymHdtiO/RQEs8/n5ZnnyXpzbcovOmXnfcWDtPS0kJzczObNm0iFAqRlJREamoqSUlJ+2XPT9M0Zs6cycyZM5M3bdqU/Je//OWR559//qHU1NQXGhoaHpRSVuxF9X8CVgALeyvQNTLyPPC8EOJt4Bhg+11hbgLq6OwlakDHVq95t6qrVAhxGHAyMF8IsUhKefdetF/5Edv/3m37n3igpSvohgOH91KuO9gahRBO4Czg1Z3UG0fnG7OtaxbaScCnXa/dROds0F8BTwghpkgpQ71VJIRwOp3Oi9PS0m6ePHly/Ny5c5OmTJmy30w42Z6Ukvb2dmoWLyb8+9+jtbuRF19M2tFHM9i0815UTwwp+bI+xItlfv5XGwQko5JbONFViVUspzK8kTs7/LRYdeh8JNdzPYCrbC7HWwoZ65rBBVlH8L8WCx/UGdz1rYcHVns5PdfGuQU2BsVt+9ZxzphBsKKCpkcewTpkCPGnnoLJZCIlJYWUlBSGDRtGOBymubmZhoYGiouLsdvtpKenk5aWtl/2+vLz83nggQdi77nnnthXXnnl+vvuu++CrKystV37cX60u/txdg3ZvwxcDjyx/etCiGnA113vtVhgEFBO51/N1nvCxQOVUkpDCHExnc/jdiCEyASapZTPdg2lXrI77VUOLGoYcytbT1DZ6mtW4HUgC1gLpAC/k1J+un15IcQfgNnAJqAC2Cyl/N1OhjGfBCYDZUAAeJPOiS1vAJOklG4hxIOAW0r52x7aOzw3N/d3hmFMu/LKKx1XXXVVTGofDiwdKO3t7VRVVVFXV0fcmjXYH30MLSaGlBtvxFpQsNv1tQYMXtvs48XKcuplJXZHFYnOajr0Svyic9TNJCWFoQg5kRhcZJJMBo/YFmP0lKcSBHBkR4TZbU0cHhC0Jh5DvWsG30Xy+KDOYHGzQVjCpGQzswvtTMuwYNY6K5PhMPX33ktw82bynnsO+8idn5Lu8Xiora2ltrYWIQRZWVlkZGQwkAv4d+W7777jj3/8Y8uHH37ok1I+WldX9xcpZcvOvme7iV9pdE40ua+HZ3ZzgEuBMJ09toVSygeEEGbgfSAZeBJ4m85n6j7gEzqH/509PNs7EbifzrAMAb/YX5b8KPueCrsfGSGEWdf107Ozs+enp6en3HHHHXEnn3yy0PUeP9wOuEAgQGVlJZWVldhsNjIzMrD8+980//MRrIMHk3z99egJCX2qK2iEKAtW83HTRj5qLqMiXIGw1iC0zk6vWQqGBsOMDPgYGoyQIlMwm4bSZs4B8cNkk9fNq/jaXNGZbN0kjAtnkihj+MZUQbsWIDUiOLu9jTPd7dgthTQkHc9G5xF82GThv/URGgKQYhWcXWDnrHwbaXadSHt755ZimkbBa69iSknp0735/X6qqqqorq7GYrGQm5tLeno6+3r/0b5qa2vjiSeeCPz1r38NGobx5aZNm+6UUi4f6HYpSm9U2P1ICCEyk5OTf2k2my859thjE+fMmWMaP378QDerR1JKGhoa2Lx5M36/n+zsbLKzs9GDIarn3obno49xHHMMrosuQvQyK9RvBFgfqGBtRzlrO8op9m+iLFiNQefSKRmxEhdJZrwRYUpHHZM91eSFQrSZs6i0DaXWWkBE630rr9fNq1hirkAKEBImh3KYFRoFQASDYr2eJeZy1umNaBKO9Xf29iYEO3t7ta4ZfBXI44P6CN+2SjQB0zIszC60M85bTf0992AdPpy8Z55G280txdxuN+Xl5dTX15OSkkJ+fj7763NXwzB46aWXeOSRRzpKS0srWltbF/j9/heklP6BbpuibE2F3X6sa8LJ1MzMzF8nJCSMvOSSS1zjx4/XjzzyyP3yGU8oFKKiooLy8nISEhLIz88noavXFiwvp+KaawmWlZF4/vk4Z8zY8mzOHfFR2lHO2sDmrnDbTHmwFqN7vZyMIejLIujPJCGSwlmmRs6KfEuerwhdhvHoCVTahlJlG0KHvnvH/YRTRmNq+L7X1xuFl6WmCpabK/GKIFlhjXPaW5jldmOxdvb2iu1TeL/RwicNBu4wFDh1rgsUc8grjxL/05+Scc//7dHzU8MwqKurY+PGjQghKCwsJDU1db98FtvY2Mgnn3zC0qVL/c8//7w7HA7/p76+/n4p5YaBbpuigAq7/ZIQIj4+Pv7nNpvthqlTpzpvvfVWl9VqJRgMMnbsWPa3IcuOjg42bNhAfX09OTk55ObmYtmqN+P96isqf3kTGAaWqy6hrNDeFWybKenYTHWocUvZRC2WPFMq5mAG5S05bGjMQ4TjOM1ZygWW/zEq8A22iIegsFFtG0ylbShtppQdZ1f20a7Cbks5IqzW61hiLmej3oxJCqb7w5zX2siYkKA58ViqEqfzkS+PD+oN1nkkF6/9gNnF/8X4xY0ceuPVe9S+bm63m7KyMlpaWigoKOjsKe9nPwc+n49ly5ZRUFDAsmXLjAULFjRVVVVtrquru9swjHfVjibKQFJhtx8RQozJyMj4lcViOe66666Lvfzyy22xsbGsWLGCuLg4hg0btl99qvd6vaxbt462tjYKCwvJysra8oxJSkmtt5bNj/+NuEf+TXOKlYfPsVMS697y/al6AnmmVPJMaeSb0kiQaSypS+KDGitNAZ3B5kaujvmUacZXuEK1GGjUW/OotA2l3pKLFHv/y76vYbe1OuFmibmCFaZKOkSY/LDGuW0tnOZpR+vq7S23HME79SaOevcpJlev5pnTf8mU2adw0qh0rKY9b3cwGKSsrIyamhqys7MpKCjYr5YwBINBli1bRkZGBoWFhZSUlPDAAw+0vvXWW/5QKPR4c3PzX6WU9QPdTuXgo8JugAkhrDab7dyEhIR5hxxySMrtt9+ePG3aNDRNIxAIsHTpUvLy8sjdj7ai8vl8lJaW4na7GTJkCCmpKVR5qihqLqK4qZiS5hJK69Zw9hvNHLdKsnSo4N+zUkiLSSPfnEaeKY1cUyoOzYaUUNxm4v1qG4sbLZhlkIvsiznb9DmDQyUIJC2mNKpsQ6i2DSakRXf4dk/CrluQCN+bqlliqqBCb8UqBSf6QpzX2sjwsEZz4jFsth9D6MnXsba1cMOxN+BLzWT2pFzOn5RLjitmz9sdDrN582bKy8vJyckhPz9/vwk9wzBYuXIlVquVQw89FCEEXq+XZ599NvTAAw+0eb3eb7oOmP2qv/bjVJTtqbAbQDk5OTdFIpHbL7zwQvt1113nzMnJ2fKa3+9n6dKlDB8+nLS0tAFs5Q8CgQBFJUWsbVhLyBWiOlxNcXNnuHlDnWt5daEzQqZzxQstZGxqp27GaKwzZ2DVt51O7w/DZ/VW3quyUenTONpUzOW2T5gSWY5FBvBpTqpsQ6myDcVr6ttszT2xN2G3tSqtjSWmcr41VRMUEYaGdGa3NXGKx00wlE/NOxJ/XDIPnnE7X9UGkBKOG57KhVPyOHZICpq2h8Ow4TCbNm2ioqKC/Px88vLy9osZnFJKioqKCAQCjB07dpse/9dff829997btHTpUl9NTc1PpJTfDXBzlYOACrsBIoSIycrKKv/Xv/6VdNRRR+FwOLa85vF4+Oabbxg1ahRJA3gadjASZF3rOtY0rGHppqWUtJRQE64haHSuYbNoFnJic8iNyyUvLo+8uDxyKgM4f/1XhMdH8LxTMMYM36bOzV6dD6ptfFprIUPWcbH1U07TvsRlNBMWZmqshVTahtJsztzj53C7I1ph162DEN+aqvnaXE6t5sYuNU7xBjl3bSvyv/GYBiVRc8tveb0+lY9L6mn1h8hx2fnZ5DzOnpCDy7Fnh8GGw2HWr19PbW0tw4YNIz09fb8Y8i4tLaW1tZXDDjtsm2eMVVVVvPPOO9x9992fVFZWThvAJioHCRV2A8ThcFw5Z86ch375y1/GrFy5kkmTJuFwOGhvb2f58uWMHz+efXmunC/ko7SllKKmIkqaSyhqKmJ963oiXXMKbJqNvPi8LaGWG5dLekw6uvbDLzDToi+x3v8vZJyT4GVnIjM7F7iHDFjSaOH9ahtVbQFO0xfzM8tnDJNlSAQNlmyqbEOpteZjiH27QXW0w66bRFKutbLEVM4qUw0hYXDRMjj1wzDxwz3ETcujZvC5vC+O5N1SD8U1biy6xqljMrjw8DzG5iTsUVj5/X5KSkrw+XyMGjWKuLi+nc/XnzZt2kR1dTWTJk3CZDJRVVXFxo0bmTx5MmPHjm0oKioaK6WsHuh2Kgc2FXYDQAgh0tPTS1euXDk4PT2d1tZWVq5cySGHHEJRURETJ07s13VV7cF2SppKKG4upqipiOLmYja1bdpyNE6sJZYcRw5pkTRyYnIYlj+MtLg0NNHL8Fg4guXRl7G8/B6RwbkEL/4pOGNo7NBYVGPlkxoT4yKrmG3+jKliJSYitJtcncOU1iEEdEfP9e4D/RV2W/MRZIWpiiXmck77bzsnrpAsP0FwZFodudJCQ8HpfJ/2U16pTuKLdQ34QwaHZsZx0ZQ8ThuThd2y+xNaWltbWbVqFYmJiQwbNoyBPuWie0lKTk4O5eXlTJ48GbPZzMKFC8Nz5sx5oLGxcd6ANlA54KmwGwBCiEknn3zyu++8886WMcrKykpWrlzJ5MmTieaWX43+RkqaSyhuKt4SblWeqi2vu2wucmNzt/TWcp25mBpNBN1B4vPisTh3Mazm9mK762+YvllN+KjDCJw+nVVuG+9VWuloqeQM/XN+avqKeDwENDtV1iFU2YbSbkraJ8OUu7Ivwq6bRLJRNjL49RVkVgf43QU6sel2zmuuZYannYBrJJWFs3k9PJl3Sj1UNPuJs5k467AcfnZ4LoUpu/cBSEpJeXk5ZWVlDBs2jMyuI5MGyvfff09FRQXTpk3DbrcDnT3RwsLC2tra2tyd7f+qKHtLhd0AyMzMfOull1469eijjwbYMnQ5bNgw1q5du2VIc3d0T/W2X6e7AAAgAElEQVQvai7aEm5FTUU0+Bu2lEmLSSMnNmebocg4yw/DXEF3kLbNbdiT7DjSHbscRhObq7D/6k+I2kY8s07kvfzJrKjycERoCWeZ/scgUU0EnTprPpW2oTRacpC99Q4HyL4Mu26aP0DGS/8jLMPcdWkMmxxeEjAzyxfk3KZqMrDSkH8aS12n8UJVEss2NhM2JEcOTuKiKflMH56KSe/7/8dAIMDq1asxDINRo0YNyIYE3UOX2dnZVFVVMXny5C2zR6+//vr2f/7zn5eHQqGdbZyuKHtFhd0+JoRILiwsLF6/fn2yEAKPx8OyZcu2DF12D2k2pzfzyJpHqPXWku5I58bxN3JK4SkAGNKgwl3RGWjNRZQ0lVDUXERboPNcSg2NDGfGlh5bXlweObE5xJh7nuouDUl7RTshX4iEggRMtl1PYde/Wont9/8gouu8Pv0s3OYWThOfc4RehIak0ZxBtW0oNdZCwtr+u7HxQIQdgLmpnayXv6AjI5H/Xj2Bb0KllHaUA5JJETvnN1VzjNdNh2skm/LO5qWOw3lvnZtGT5D0OBsXTM7l3Ek5pMb2Pbhqa2spLi5myJAhZGdn99/NbWfrZ3Rms5mKigoqKyuZNGkSuq6zYcMGjj766O+qq6vH7ro2RdkzKuz2MZfL9eu77777zuuuu87i9/tZsmQJ48aN22YyysurXmbBygWEthrVMWtmJqVPwh/2U9Jcgi/sAzqn+mfHZpMX+0NvLTs2e4ep/r0J+UK0lrViT7bjSNt1bw4p0Z55C/vC12hKTKR5ipPjnSuJEQHatARq7YOpsg3Frw/8xIi+GKiwA4jZUEP6O8tomTCEyoum0254Weldy0rfWtyGl2SsnOENcE5TFcnCSn3+aXzmPIXnK118X9mGSRPMHJnOhYfnManA1acJLaFQiO+/77zf0aNH9/uzvO2DrltZWRlNTU1MmDABIQRTpkxp/Prrr4+RUhb3a4OUg5YKu31ICKGlpaVVrFu3LtNisfD1118zatQoXC7XNuVOePUEarw1PdYxKGHQlmDLi8sj05mJSdv9xcRSSry1XvzNfhIKEjDH7PqXXn29D8vvHia7qBhzboTCSfV0mKzU2AZRZx9Ciyltv3gOtzsGMuwAEpaV4lpcQs3ph9M4YxzQ2XMv7Shnha+YDYFKNARHRuyc31jJET4PPtehlGafxTPeSSxa78EbiDAk1clFU/KYNS6LWNuu/y6rqqooLS1l9OjR/ba8pbeg67Z27Vp8Ph9jx47lrbfeklddddXTNTU1l/RLY5SDngq7fUjX9ZMuuuii5x977LGExYsXM3To0B4XjI9+avSWmZHbe+LEHc683G1G2KC1rBXdqhOXE4fYyYLmiCEpKW1A++xNJrz3OaLVIHmMh/aRKbQ6BlFvzcMQ+8fOHd0kgGYB3YzUTKCZQHT+W2qmbQJZ2pMR/q69OaWBMMLQ9c+WP0cCiP7a1lFKUt9fjmN9NZuvPBn3yLxtXm4Jt7PCV8J3vlK8hp90bJzl6eCspkoSNCt1eafxgXUmz5S7KGv0EmPROWN8Fj87PI/h6TvvXfv9fpYvX05aWhqDBw+O6rq8XQVd561L1qxZg6ZpDBs2jLy8vIaqqqoCKaW3x29QlL2gwm4fysrKWvz+++8f7vP5yMjI6HULsN56dkm2JO4/9v69akPQE6R1YyuxWbHYXfZey7ndHdQu/h/ZGz9ibN0aar+MJ2LodEzNoHHYSIJa79+7r0ihI80OMNmRJhuYbMiu4VthBCES2ja0jDDIMGKrA7YjCYPQWzcAonPyTHc4dgejZgLd2rUPp0SEOyDcgQh3IMI+CPkQvR193kciFCbz1S8xtfvYcOuZBNITdygTlhFKOjax0lvMpmANOhpTI3bOb6xgos+D13Uoa9LP4In2w/h4o59QRDIxP5ELp+Qz89B0LKaeJ7QYhkFxcTFut5vx48dvs4H3nupL0HWTUvLNN9+QkpLC008/7bvvvvtu9Xg8/9jrRijKdlTY7SNCiPwxY8Yse+aZZ5LNZjPDhw/vtexbG97iV1/8apuvmYWZi4ZdxJF5R+5xG3wNPrx1XhIHJ/Y4CUUaBs1FqzF/9z4T2r8gXvio2JCEe7mVSJydmlMPJ+TavSN0okUiwByDNDuRFmdnyEkDEfIgQn4I+xGRDogE2Z3+ye4MY0pEZ6B2B6vJgTTH/NCOoBsR9HT2BHfz/nS3n6yX/kckxsr6OWdhxPT+zLUh1MJKXwnf+dbRIQPkEMPZHh9nNFXg1GzU5JzKm6YTeGpTInXuIEkOC+dNyuW8yblkJfT8IaWmpoa1a9cyfvz4vVqIvjtB1y0SibB48WISExOZPn16WV1d3WC1Z6YSbSrs9pG0tLS/3HHHHdceddRRYty4cTsdMlpas5TLF12O0+zEE/KQZEvi9NzTGeoZimuIq0+zJbcmpaS9vJ1IMEJCYQLadtPWZVMV/iWLGFTxEdmyFp+0ssIyGq1IJ3F5Ob68VOpnHoZh3bcLk6VmQdoSkLZEpMmGCHq3hEo0elQQnWd2UuhIixPMTqQlFmmydgZfRwsi0LZNT3JnrNVNZP77KzxDstj0i1NgF8sLQkaYoo4yVniLqQzVY0ZnRsTO+Q2bGeP34k08hOXJs3isZTxfVgYRAqaPSOPCw/M4anDyDvtxut1uli9fztChQ/doTd6eBF23QCDA4sWLuf/++1vffffdk6WUi3e7AYqyEyrs9gEhhDUzM7PqueeeSzrmmGN2uVHvnV/cyaLNi3ho6kNY9B+GlULeEC1lLbsVeEbYoGV9C5ZYC85M55aQ1QMexKpPcaxZxFB/EYYUrNCGsy5pHHpyJgXPfoJzfQ2t4wfRfMQhsIcbFe8OCWBxYtiSkNZ4hBHuCoyWzqHDfrhmf0xQkQiwxGLYErruI4IItCL8TYhIYKffG7umnJSPvqVx6mhqzux7L7421MQKbzGr/OsJyhCDhJOz3R5mNVZg021UZp3Cq8zgqc2JtHdEyEuK4cLD8zjrsGwSYrb6GQuFWL58OYmJiQwdOrTPz/H2Jui6eTweFi5cyIIFC96rqqo6eY8qUZReqLDbB+x2+0Vnn332E4899phute58SYAv5OO4l4/jsLTDuHTkpTu8vjuBFwlEaF7XjDPT2fl8zojgLP8GfeUH5NUtxkqIDUYGX8VMxpMzAldKDPaqRvIefQ+T20fjtLF4hvf/eiypW5ExKRg2FyLs6wyF3egR7Y19MRtzSw/VngxCIHwNnffYy6SXpP+tJv7bMirPn0rLlBG7da2AEWS1fwPLfcXUhZqwYeLEiJ0L6jcxosOLJ2EEixNP4+9N41lZH8Fq0jhtTCYXTclnVHbn8hfDMFi1ahWGYTBmzJhdfjiLRtB1q62t5eijj/auX7++QErZsOvvUJS+UWG3D+Tl5W1+5513ckeOHLnLsm+Xvc3tn9/O3IlzGeYa1mOZvgRed5mE/ATiAxU41nxA8rqPiQ230iydLBKHsyllLKl5iTitnaESt3IDOc98jGE1UXvKJIJp/Xe0jhQ60p6MEZOMkEZnAHQ075OA29q+XnogdQvSnoJhT+qc5OKr7+z1bV3IMEh/Ywm26iY23nAavsKM3b+OlFSHGljuLWaNfwNhIgwXcZzT3s6pTRVYNCubMk7mhcg0nq1MoiMkGZMdz4VT8jl1dAZWk8aGDRtoaGhgwoQJvYZYNIOu29133x35+9//vqC2tvbOqFSoKKiw63dCiLHHHHPMZ5999lmfnvpftegqSltLWXD0gt43XuaHMBuifUveyiexeBoIOlOonHw5NelH0VG6icFyJXFrP8Tl3kRQ6nxkjGdJzCT0vFyGJAd/GJk0JKnvLSPt/eV0ZCRSd/JEIo7+2VJK6lYMRzrSmoDmb+gMOWPgtkQcqHV2EsDswIhJRVpi0Xz1ncHXFfZaR5DMlz9HCxusn3PmXk0M8hsBvvetY4WvmMZwKw5h4aSwnfPryhgS8OJOGMFnsafw54axlLZqxNvNnDsxhwsm52LqaKWsrIxJkyax/ahEfwQddD47HD58eHN1dXWqlP215kM52Kiw62f5+flvPPbYY6cdf/zxuyxb563jhNdO4JSCU/jpkJ/usnz8qg8oXPwwpq7z5QCCmGg0Z5AeqkRDssIYzFscSV3qIYzKMUiKCW9Th9YRJPvpj4hftYn2Q3JpnDoKTLu/y/6uSLMTw5mJ1M1onlpER1O/PIPbXQO9qBy6ermONIyYFERHC5qnBmGEMDe7yXr5cwKpCWy4aRbSsneBIqWkPFjLcl8xJf6NRDAYJRI4t62Nk5o2o+s21qfN5KnAcbxUk0LEgGOHpvCT4fEkBWtoiMnj4Y83Ut3qJzXWzBmDTNx85tH9sgvLZZdd1vbUU09dEIlE3ol65cpBSYVdPxJCxOfl5a0vKytL7svp0QtXL+TB5Q8y/6j5pDl2fTr56GfPx+qp3+HrYanx98hpfG2fRE6OndGpXsz6jn/PloY28h59D2tdK03HHEr76IKo74AiLbEYcbkQCaF5qzun5u9H9oew6yYRSHsShjMDEfKhuSuIWV9B+ltLaBs3iIpLj4/a34834uc7XykrfCW0RNqJEzZODds4v3Y9eUEfbXHD+MhxMn+qG0u5z8y51q+4gRfJoJFqmcx94XNYpB/DgjNGM2tcVlTatLWioiJOOOGE5ZWVlROiXrlyUNq/tr44wMTHx19x3XXXOfsSdFJK3lj/BoMSBvUp6AAsnp6f32sYPKadwa8nbQZ6DhdHSSW5TyxCSEnNrMPpyEnp0zX7SppiMOJzQRporWWIsD+q9R+IBBLhb0T4G5G2RCKuYXjGZNDc4iXpi9V0ZCXRcOJhUbmWQ7dzROwYpjhHUxaoYrmvmBflZp7PSuYwkcS5bc2cVvMQp+s2nssu5BlbKyeZ7KSHM7mxpZUFnschBPd/YO2XsDvkkENIS0vLFUIUSinLon4B5aCjwq6fCCFEWlra9ZdffnmfHn6VNJewoW0DFx5yYZ+vEXSm9Nizq5bJuIO9DEVKSdJnq8j4z1eEEp3UnjqJcHz0Dk+VurWzJ6eZ0NorEKH9qyf3YyCgc8lFRwvSnkzTCadjaQmQ/vZSOjJcuEcXRO9aQjDIls0gWzbtES/f+tay0lfCbXESV8JwDg3DUtoJdO2/WmM28btkF9DMbe6XObr1qKi1ZXvz5s1Luu66624Frum3iygHjf3rcLEDy9SpU6c6ExN33PqpJ29ueBOTZmJi2sQ+X6By8uWE2DbUfNLCfeFzSLCFdygvQhGynvuEzNe+xJefRtXZR0ct6KTQiMTlEnENRfjq0ZuKVdDtJQFo/kb0xtXUn3Q0HVmZ5Dz1Edaqpn65Xpzu4JjY8VyfOptzXCfgMifxueYjsN3IRIem8XBiApmiicxedmSJhlmzZmkmk+lMIcS+P4BPOeCosOsnmZmZv77ttttcuy4JISPEuxvfZUzKGJyWvp9GXZs8mTAW/NKMIQWVRjLzQj/nPY5kZkHrNmVNbV4K//wGriVraZk0lLpTJiIt0enYG9YEIskjEZEgesMqtK5z9ZToEEhEsJHak8YgLRbyH12E7u6/Gaya0Bhmy+O8pJm9lqk16dSQxE3TB/VbO8xmMxdffLHDZrPN7reLKAcNNYzZD4QQmYcccsjI8ePH96n84urFNHc0c8GIC/p8jZA3RMzKj7Hj55LQbSw3jcQd1EmwhTmroIlJiQ5ilq4k/e2vMLd4QAikgLqTJ+AdvPtbQfVEamaM+HwQorMnN4BLCA4GRoyZupPHk/Hal+T96yM2X30mEauX/pzWGq/F0ma4d/h6WjjCisKrSOsoJxzO2nLqeLRde+21joULF84FnuyXCygHDdWz6wfJycm/nDNnTt/GL+kcwoy1xDIqeVSfyocDYVrKWihs/YhKUqmIHcKvj97MfdPL+NWR5YzLbMOx6kuyX/wES4un8xmQlJ0z+SLRWbRt2JOJJB2C8DeiN5eqoNtHAumJNE4bg2PDRtJf/xhzIB1h9M+epVo4hhn26Zi3+0xsMwzSG8exPPEU8vPz+eabbzCM/tkMICsri5EjRyYLIfr2yVFReqHCLsqEEGaTyXTh7Nmz+/RRtz3YziflnzApfVKfDmE1wgYt61rIjG8hvn4NT4VmcHhOD5+83/4SLbRtAGkRA9dXe3cQtBQakcTBSFsCeuMqtI6WvapP2X2eETm0jh+E68sVxC77FFMwCS3kJAr7Ym+hhWPQw7EcEpfKKQlHE693Dq9rCH7d2MwMWx6vLq8kKS2DxMREVq1aRX8tY7r99tuTMzIyfrXrkorSOxV2UWYymU4/++yzY2y2vj1TX7RpEUEjyBGZR+yyrDQkLetbcGY6ydr0HgHMvKsfxaEpO551aW7peXKIyb3nSwCk2dH5bK6jFb1l/T7f2kv5QfMRh+DLSyXz1U8xV6xEk2ZMwRSQe/+W7g66kLUehGRUzGBuSDuPsxNnYCAR9nRmBd/GGwjyxrfVDB06FMMw2LBhQxTubEfHHXccVqv1GCFE/+1fpxzwVNhFWUpKyp033nhjnw8Ee3PDm2Q6MsmPy99l2fbydixxFpyOCK61H/JG+AiGZxr0dC5nKKHnWZbh2N2fPScBw5lJJL4AvXktWvfJ3srA0QT1Mw8jFO8g71/vI9ybMXQP5o40RGTnm43vtNrtgm5rQ215JOpxPBMfS7yvnHPiS3hm8WYAxowZQ11dHXV1dXt1Wz0RQnD99dfHxcfHXxX1ypWDhgq7KBJCjMjPz88aNKhvM9Qq2itYWb+SKZlTdnmUiq/ehxE2cGY4SSr9L6ZIB88axzM5q73H8t5BO24ebJjNNB/Zt+eC3aTQMFxDkZoFvXHNLo+oUfYdw2qm7tRJiHCEvEffg0g7IWs9plACWmj399LcWdBB5yzNiY5DKTZaWOlM5irrIopq2llR3oqmaUyYMIGioiI8nugvObnsssusNpvtWiF2smGsouyE+sGJovT09Lm33357Ul/Lv132NgLBlIwpOy0X9ATxNniJL4hHACmr3+A7OQgjKZUEWw/75EpJTHkDwQQHoVg7EgjF2mk4fgJtR56I1Pv2yV9qls5JKB0t6O2bonJYqhJdoUQn9TMPw1bTQvbTHwFhQtY6NMOCKejq83O8XQVdt7ExQ7EKCwtTcihsX8ooSw3Pft3Zu7NarYwfP57ly5cTCkV3wlJCQgLTp093AtOiWrFy0FBhFyVCCIfJZDr55JNP7tNEcCklb254k+Gu4bjsvS/HM8IGrRtbSRyUiKZrxFWtIKatkidDJzAlu+denaO0CmtDG62ThlJx6fFsvOE0Ki49Hu/gFPTW9URcw3cZeNLsIJI0Ar19M5pPHSu2P/PnpdJ81CHEf7+R1Pe/AQFhSxNShDEHUkHu/Eeyr0EHYNUsjIsZxmc0U222cWvCp7z9fTVNns4ef3x8PIWFhXz33XdRn7AyZ86cxMzMzF9HtVLloKHCLkpiY2MvvvLKKx263rcTA75t+JZKT+VOJ6ZIKWnZ0EJsVuyWc+tSV79JK7EstY5jUGLPk01cXxYRsVl6XE8nQt5dBp5hcxFJGITeXIII7jjTU9n/tI0txD0ih7T3viFu5QYQEDG3EzG5MQfSwOh5pu/uBF23iY5DkcCT6UM40rOImIibl7+p3PJ6Tk4Ouq6zefPmaNzaFmPHjiUxMfEQIUT/nyisHHBU2EWBEEI4HI5brrrqqpi+fs+bG97Eqls5LK33jX29tV5MNlPnKeOAxV1H/KbFPB8+jvHZHT+cR7cV3e0j7vuNuIdnI3s5qmdngWfEpCId6er53I+NEDQcN5qOjERynvkYW2XnJCLD5CdsacIcSNlhPd6eBB1AgimW4bZ83jT7CcogNyZ+xXNfbyZi/FDH6NGj2bx5M21t0d1N57bbbktMSUm5KaqVKgcFFXbRcfikSZPiU1NT+1Q4EAnw/sb3GZ82Hpup5yUKIW8If7OfuJwfJnamFL8DSF42juOwjJ57XIlfr0WLGLhH5u20DT0FnuFIR9qT0JpKEOrMzB8fk07dyRMxrGbyHn0P3e0DQGohwtYGTIHkLYG3p0HX7XDnKLwyyMupgzgr8h41rR4+K/1hU3Jd1xk/fjzffvstkUj0fpbOOeccXdf1C4QQlqhVqhwUVNhFQWZm5q/nzp3b54kpn1Z8iifk6XUIUxqy8zldYSKiq/smIkGSi97lE2MsKel2Ysw9rHEzJK4v1+DPSurTydZbB14kNgdpje8MOtT6uR+riMNG7akTMbl95P1rESLcGTRSCxPqCjw9GLdXQQeQbUkjy5zKCw4LzmAdZ9hXblmG0C02NpacnByKior2+r662Ww2zj333Biz2bzr040VZSsq7PaSECLF4XBMnDJl5zMqt/bmhjdJtCYywjWix9fby9uJSYnBZP/hOUti2edYOlp5KnwCU7J6HhpyllZibXLTvote3TbtD3kRwXakIwPRpmZcHgiCqQk0TB+LY0MNma98Dt0TRbQwEZMbPRxP2NS2x0HXbbJzJNXSw8cJ6VxjW8Snaxsob/JtU6agoACPx0N9/Y5HUe2pG2+8MTY5OfmOqFWoHBRU2O0ll8t13U033RS3q3Vy3Zr8TXxZ9SWHZx6O1sOSoUB7gHBHmJjUbR//pa5+gwrS2OwYQnZcsOe2fLGGiN3S4xq73hjOLNB0tKY1GH2Ypan8OHiHZdMyYQiur4oZMW8hI6//B8N+8ywJyzYQtNVgCiUgIns3EjjCVkC87uRJVwoF/tWM0sp4bum2vTshBOPGjWPNmjVRW45QUFDAoEGDMoQQh0alQuWgoMJuLwghdLPZfMWFF17Y598a7218j4iM9DiEKQ1J++b2zvV0W4WnvXE9sXVFPBk6vsd9MKHzCJ+4VZtwj8iBXiambM+ISUFaYtFa1qP1YZam8uMSdDmRAky+AAKwtLjJePVN4pcXdQ5pBpMQvczS7AtNaExwHMJ3so01Nie3xH/CS8sq6Aht+4zOZrNRWFhIcfHe7cu6tXnz5iWlp6ff3tfyQognhBD1QojVvbx+gRDi+65/vhJCjIlaY5X9ggq7vaBp2kmnnnpqjNPZ9zPo3tzwJvlx+WQ5s3Z4zV3pxp5ix2Td9hdQ2uo3CGDhHe0oRqfuuA8mQOLXJQhD9nkI07AmYMSkorWUbjkhpi/LEpQfD9fikh1GKrVQmPS3loAWIWxtxBTYu/00x8cMxyLMLEzL56iOzzD7Gnh3Vc0O5XJzc/F4PDQ1Refg2ZkzZwqz2XyCEKKvW8U8CfR+QB9sBI6VUo4Gfg88updNVPYzKuz2Qlpa2m9uueWW+L6WX9eyjuLmYqZk7vh8L+QLEfQEcaRtu6elHnDjWvcR/4kcwbCMCGa9h+cshoHryyJ8OcmEE3YdvNLsxIjLRW9eu8NmzirwDhy9bfrdvUm41EKELc19WnjeG5tmZUzMED7SPLRoBlc7Pt1hogp0DmeOGTOG1atXR+U4IF3Xufrqq52xsbGX9KW8lPJ/QPNOXv9KStl9hMfXgFrLd4BRYbeHhBCDMjMzC0aM6HmSSU/eKnsLXehMTp+8zdellLRtbiMuL26HPTKTSz5AjwR5Onw8h/eyD6azuAJLiwf3yPxdtkHqtq4F42sRRrjHMirwDgzhuJ43A996k3CpB4iY2jEHUvb4iKBJjpFEMHg6bQjniv+ypqKB1VU7TqJyOBykp6dTVla2ZxfazpVXXmmPiYm5SfT1gXnfXQ68F+U6lQGmwm4PpaWl3Tp37tze9/naTsSI8PaGtxmVPIo467aHIvib/JhsJiyO7R79SYOUNW/yLUMwXKkkxfQcTq4viwjHWPEWpu+0DVJoRFxD0FvX73LBuAq8HzfDnkTj8dMxtnt+KwFp0hGBHyaLGCYfht6BHurzecPbcJniGWLL4zWbgSnSyizzki37ZW5v8ODBVFZW4vfv+VFT3ZKTk5kyZUo8cOReV9ZFCHEcnWE3N1p1KvsHFXZ7QAhh13X9jFmzZvX5/9+S2iU0+Bt2mJhiRAw8NZ5tFo93i6tcjr29mieCJ3B4L/tgmlo9xK3Z3DkxRe+9ORIwEgaheWsRoZ6f+21PBd6Pk2FPwnCk48vWaJg+ZpvNwNvGFGBpcpO7cBFstdg7YmpHSB0t3OdNgLYx2TGSdhngdVcW19j/y+srK2nz7zj7Utd1RowYEbW1d3PnznVFa79MIcRo4HHgdClldB4uKvsNFXZ7wG63z7744osdZrN514W7vLXhLRwmB2NStp3k5a3x4khxoPVwKF3q6jdpFbF8bRnH8CTfDq9D1yQEQ+5yxxTpSAcjstubOqvA+3HpDjq9qRghDbzDsrfZDLz52FE0Th1F3Jpysp//7Ic1eF2bR+vhuB22FeuLPEsG6eYkno2PJS+4jpGRYl5bXtlj2bS0NILBIK2trXtzqwBMnjwZp9M5XgiRtjf1CCFygX8DF0opS/e6Ycp+R4XdHoiPj5977bXX/j977x0eR3Xv/7/OzDateu+2XHC3ccXGNNNrMCWEACGh3hBuQmjfAPne5He/ucnF3IRACgmXAAkJDh1iG2NTjE2zwR0b9ybZ6l1abZ+Z8/tjJdmydiWtdo1V5vU8fh5r5uxnzkq7857POZ8SfkMkDO6gmw/KPmBO3hys6tEbiR7Q8TX5uuXUQagOZlrZF7wYPI9Zhd6wdTDRDTLW7sQzIhstNfJ0pC0ZIyELpeVQX6fcBVPwBgfHC10kXFNLaJw7nvT1e8hd+sXRE0Ki2RqwBDKjDlgRQnBa4hTKpJtPk9K4J/ED/vF5WcTOB5MmTWLHjh0xd0YQQvDAAw+kZmZm/rCXcS8B64DxQohyIcTtQoi7hBB3tQ/5OZAJ/EkIsVUIsTGmiZkMOEyxixIhxKypU6dmFhZ2Tx2IxAdlH+DTfd2WMF3lLpIKkzpLgh1Lzs5lSCQv6+cxpyB8bl3yzsNYm8eJrqMAACAASURBVN20Ti2JeG2pWNBTR6M27Y2pOoopeAObvgpdB82njaNlagk5H2wh88MvO49LJYhuaW0XvOjmMCVhDEmKk79lFXKm9jmB+lI+2x9+NTA1NRWn0xmxs/ltt91GTk4OU6ZMCXteSsk999zD2LFj+f3vf2+VUt4lhIiYYCqlvEFKmS+ltEopi6SUz0kpn5ZSPt1+/g4pZbqUcnr7v9nRvXuTgY4pdlGSn5//04cffjgrmtcsPbCUHGcOY9KOdjDXfBqaT8OR3r0QtNACZO58hw+NmWTnOkiyhS+km/HZDrREB56SyCs4RupoFNdhhB6+6ko0mII3MIlW6AAQgoZzptI2Jp+Ct9aStuHoyp1h8QASRY9u/04VKrMTJ7JeuDhos3CHYxX/+Lw04vjx48ezZ8+esN7dLbfcwsqVKyO+dsWKFezbt499+/bx7LPPoihKuqIol0c1YZNhhSl2USCESHc4HGede+65fX5NVVsVG6o3MD9/fpe0AleFi6SCpG6pBgAZBz/C5m/lrz3UwbQ2ukjeeQTXpBERA1MMRyZgoPiawp7vD6bgDSz6JXQdKIK6i2fiLcqi6MUPSdp1uPOUZmtEDaaC0bdqPB3Mck7CgsrzOaO4XvmQT3eWUdUSPvLS6XSSnp5OVVX3JPSzzz6bjIzIwc5Llizhu9/9LkII5s2bR1JSkpqVlfWLqCZrMqwwxS4KUlNT/+2ee+7pcx1MgOWHliORzCuY13lM82rofh17anixyPlqCWUin0MJpzAyNXyKQPq6XSAlrskjwp6XihUjpQiluX/7dD1hCt7AICaha0daVKovn0MgI5kRz75LQmn7sqKQaLYmLMGMqJYznaqDqc5TWGkN4MfDVcqnvPTF4YjjTznlFPbt2xf13l1FRQXFxcWdP48ePZrMzMyRQoixURkyGTaYYtdHhBCKw+H491tvvbXPd3cpJUv3L2Vc+jhynEd73bkqXSQXJof16px1e0mq3c1fAxcyr7iVsLqqG2Ss3YW3JBctpftSUyjNYDRKS9kJ60tnCt7JJR5C14G0W6leOA/DYaPk6Xew1YRWAqTqA6Gj6H2OxQJCaQhBdBZnj+Aux/u89MVhAlr4OSYkJJCRkRHWu+txzmHE8dZbb03Jzc39SVSGTIYNptj1nfMuuOCCpNTUPlcHY0fDDg61HuoSmKL7dTSfhi0lfO3onK+W4BN23hZnMjOvLeyYlK/KsLZ6ItbBlAmZYGgo/thDu3vCFLyTQzyFrgM90UHVVfPAkIx66m0sLaFcTM3ahBpMiWo5M9uazhh7Ea86reTqR5jg3ch7O6sjjh8zZgwHDhyIyrsrKiriyJEjnT+Xl5fz7W9/W7FYLAuFEAl9NmQybDDFro8UFBT8/MEHH4yqxMTSA0uxKlZm5x4N7GqrbiMpP/xeneprIWP/at7UzmB8noYtXB1MQq18tCQHnpLundGlUDCSi1BawlewiDem4H29nAih60BLS6J64VwsbT5KnnobxeMHIdFtzViCaVHZmps4hSb8LE/N5vv298LWy+zA6XSSmJhIfX19n+1feeWV/P3vf0dKyeeff05qairFxcXceuutiQkJCTdFNVmTYYEpdn1ACFGUkZExYfr06X1+TVAP8s6hd5iRMwOnNbTUaGgGgdZA2AhMgOzOOpgXcXqEiinW+laS9rQHpijd/3xGUiGKuwYhw5cWOxGYgvf1cCKFroNATho1l8/BUdNEyTMrEAENQ/GCVKPqfzfaXkS2JZ0XMjI4Q26mtnQHe2vCp9BAqIzY/v37O3++4YYbOP3009mzZw9FRUU899xzPP300zz99NMAXHbZZYwePZqxY8dy55138qc//QmAu+++OzE1NdVcyjTpRv+bWQ0jsrOz7/vJT37S5zqYAJ9UfEKLv6XLEqanzoMz2xnWq+uog7mFcWhpWeQkht/DyFi7ExC0Tu6+hClVO9KRhlK3PZqpxoVjBU9t3N1r7U2T6Pg6hK4D74hsai+aSc7KTRS/8D6Hb78Y3daIJZBJUKmBPsRndSSZL2/5hPUJTm7V3+XFz+fxi4Xh8+ZSUlKQUuJyuUhOTuall17q1f5TTz3V7Xh+fj7Tp09PF0LMkVJu6NMbNhkWmJ5dLwghbBaL5cZvfetbUcVgLzuwjBRbCpMzQ82UpZR46j0kZIXfTkg9shGHq5rnA5G9OnSd9M934ynJRU/ubsdIHYnSergv96ITgunhnRi+TqHrwD2ukIZzppC6rZSCVz9BiiCGEogYrLJ1wy7uve1X3HPLf/Gvl98HYKpzLE7FwV+zi/mW+jH/+mQr02fPZdq0abzzzjvdbIwaNYrS0tKY5/7www9n5efn/9+YDZkMKUyx6wWr1Xr19ddfn2i39/3m3eJvYU35Gublz0NVQhrpb/ZjT7aHrYEJocCUJpHCZ9aZTMoKX6g5ZVspVpeX1qlhvDpbCiBQ/OHz8r4uTMGLLydD6DpoPXU0TbNPIfOzneS8swHd2hIKVjmulJihGzz/x9d45Fff57d/eYTP1mymvKwaq7Aw0zmRtaqXWovGdfa1PPjHV3n55Ze5++67u10vLy+P+vp6gsHuBaSj4eyzz8bhcJwhhMiMyZDJkMIUu17Iysr6jx//+Md97YYMwMpDK9EMrcsSprvWHbYGJoCttYrUw+v5R/B8ZhV4IjYvyPhsB8HkBLwjugamSEBPKUZp/XqCUnrDFLz4cDKFroOm0yfQOmkEuSs3kfHJNgxLG6rW9euwf08ZuQXZ5OZnYbFamH/OTDasDS2lz0mchILCHxIyuU1dyeK1B2lubqagoKDbtYQQFBYWUlFREdOchRDce++9Kenp6Xf1PtpkuGCKXQ8IISaPHTs2r6SkJKrXLT2wlKKkIoqTQ0mvekBH6hKrM3w1+ZwdyzAQvKSfx2kRGrTa6lpI3lOBa/JIjq8KLW0pCD2A0HxRzfNEYgpebAwEoQNACOrPm4Z7VB4Fr39C4vYvUbTELt5dY30LmdlHozUzs9NoagitMCSpTiYnjGF1ppNkSyPF9R9x5e338Yc//CHs5UaMGNElpaC/3HLLLTabzfYDIYR5jzMBTLHrkfz8/EcefvjhqJZCSltK2Va/jfkFR8uD9bRXJzQ/WbtXsErOIivbTqo9Qh3MtTuRQoSiMI9DJhehuMK3UzmZmILXPwaM0HWgKNReMhNfXgbFf38fx6GdqFpS52kZrsTKMc9jc5Om4hc6/0jM4Hbru1x09y+5+eabMYzu783hcGCz2WhtjbBv3UdSUlK4+OKLE4ELYzJkMmQwxS4CQohki8Vy0SWXXBJVvMeyg8tQUJibPxcIBab4GnwkZIQXu4z9a7D6Xfw1GLkOpgjqpK/bjWd0LnpS17QFaUsGqSO02Ds/nwhMwYuOASd07UirhZpvnIaWlkjx82+QUObqLCOWmZVGQ93RAgYNdc2kZxwtvpBnzSR4MMDrGWnMEjtpqd6PV1oj5tUVFxfHxbt74IEH0goKCn4esyGTIYEpdhFITk6+5Qc/+EGSEiaXLRKGNFh2YBkTMyeS7gjlnwc9QSwJloiBKbk7llAqCjjgGMuY9PDLkCnbDmJx+2idUtL9mslFKK7YbwwnElPw+sZAFboODIeNqivnYdgsFD/3AvaaUC7nmPEjqK6oo7aqAS2osfajzcw+vWuKgX2nSr0S5N2kFL4rVhIsnkN2dnbY6+Tm5lJbWxtzr7tp06aRlZU1TgjRc2djk2GBKXZhEEKIxMTE+++8886oyg5tqtlElbuqS2CKt8GLIyN8EnlizW4S6/byXHu6QaT60hmf7iSY4sQ7ouvNQVqcICUiGL6L+UDCFLyeGehC14GenED1wnkITaPk6TewtHhQVZXbfngt//3TP3P/Hf/N6WfPoLgkn1dfeIeN60KBKt+9eCGy0eD3VidXqZ8w7vTzMSJomaqqpKWl0djYGPN8H3roofTs7Oz7YzZkMugxxS48Z8yfPz8lKyuqtnUsO7AMh+pgZs5MILSE6W/x40gLL3Y5O5bgEw7eZj4z88PXwbTVNJG0vzJUB/M4NTQS8xDuyDUHBxqm4IVnsAhdB8GMZKq/cRqWllZK/vwOijfAjNMm8+Rf/4Pfv/BzrrnxIgC+9b3LmH36VACKR+Zz6agzqUyzscuhcqn2IR/uro14jXhEZQJce+21qsVi+bYQwvzADXNMsQtDYWHhz6KtmOLVvLxb+i6zcmdht4S+V0F3EKvTGrYTucXbQvr+NbyhncG4XJ0ES/ibXMZnu5CKoG1ScZfjUihIWzLiBBd7jjem4HVlsAldB/78DGqumI+jqp6Rz65EBHvvrnFqwjgcws5fs4r5nvV9/rl2f8SxWVlZ1NfXx7yUabfbufHGG512u/2bMRkyGfSYYnccQojcpKSkmaeddlpUr1t9eDUezdNlCdPX5ItYBzNr90pUI8jftIsjVkwRQY30L3bjHp2P7jwuMCUhC8Vbf9KqpcSCKXghBqvQdeAdkUb1VZeTtLeCon+sIuK6ZDs2xcqMxPGstgXRLK0kH3yH0vrwBRQURSEtLY2mptgbD//oRz9KysjI+GnMhkwGNabYHUdmZuYPH3jggbRoGrRCKLcu05HJ+Izxncf8Lf7wDVoNnewdS9nMBAIpmRQkB8LaTN16EIvHH7ZiiuHMQXgiLwMNdIa74A12oevAPS6X+vNPJ23LAfLf+BR68cTmJE5GIHghI4/bLCtY/EXkQgh5eXlUV8e+TD9y5EjGjRuXI4SYFrMxk0GLKXbHIIRQLRbL7TfddFNUBbLrPHWsq1rHvIJ5KO05rJpPQ7EoKGHKoaQe2YCjrYZne6qDCWR8tpNAWiK+oq57h9KaGEoiN2Irq3SyGa6CN1SEDkB4Gmg89wKaZ4wh6+OvyH5vc4/jU9UkJiaM5l+JNk5RD7Jrw4f4IiyB5uTkUFdXF5d5PvLII1l5eXmPxMWYyaDEFLtjsFgsV1x11VVOpzN8Wa9IvHPoHQxpMD//6BJmj4EpXy2hUUnjM3UG03LCB6bYqxpJPFAVqphyfGCKM3tQe3XHMtwEbygJHYDAQPhd1J9/Oq7xReS9vZ70tTt7fM3cxCl40Hk9JZ1v6W+z7MvKsOMsFgtWqxWvN/Yc0gsvvBCbzXa+ECIlZmMmgxJT7I4hOzv7Z/fdd1/fW5G3s/TAUkanjiY/Kb/zmL/Fjy21e/8ve0sFaUc28IL/PGYWeIiQfkfGZzsxVAXXxOMCUwBpT0Wc5ILP8WS4CN5QE7oOhLcemZBF3QXT8YzMofDlj0nefiji+EJbDsW2XBanp3Oxup7ln22KODY7Ozsu3p2iKNx9993JKSkpt8dszGRQYopdO0KIU4qKikaOHz++98HHsKdxD3ub9nJ6wemdx6SUaH4Ni6P7amjOjmXoqLykn8fcCHUwRUAjff0ePGPyMZzH3fytSYigGxGuRNMgZqgL3lAVOgARaEXak5GqQs2ls/HnpDLi+fdxHgjfkxHgtMQpVIkgnzjtzK57ky+PhI8qjpfYAdxxxx2OhISEH4toN+RNhgSm2LWTm5v7k4cffjiqdAMIeXWqUDkt72j0ZmfKwXHfKSXoI2v3Cj5gNplZdjISwncTT92yH9UbCOXWHYeRkInwNkQ7zUHBUBW8oSx0ECqDKQJtYEtG2ixUXzkXLTmBkv99B3tl+M/qBEcJaWoyf8vM5yb1Q15euzfsuNTUVFpbW2NOQQDIzMzkrLPOSgbOjtmYyaDDFDtACOFUVXXhlVdeGdXvQzM0lh9czrTsaSTbjrY9CbgC2JO736wz9q/GEnDznP8iTo/g1UGoYkogPQlfYdca1KElzDSEb3Dl1kXDUBO8oS50HQhvA0ZC6PNqJNipXjgPqSiMeuptrI2ubuMVoTAncRJfWoJU2X0oX71Gk7t7VLIQAqfTiccTnypBP/nJTzIKCgp+FhdjJoMKU+wAp9N502233ea0WKIKwmRd5ToafA1dcusgJHa25OP266Qk56sllCqF7LePYVxm+C+vvbKBxNIaXGEqpmB1IjTPkFvCPJ6hInjDRegAhL8FaU/t/GRqKU6qFs5D8Qcpeept1LbuQSbTnROwCSvPZ+TzHbGC1zeGr/GakZFBQ0N8VjPmzJlDSkrKqUKI/N5HmwwlTLEDUlJS/s/dd9+dGO3rlh1YRpI1iWnZR9N3pJRoPg3VoXYZm1izi8SG/Tzrv4h5Ra7jW9J1kvlp+MAUGPpe3bEMdsEbTkIHIJChzhuWo+Vkg1kp1FxxGraGVkqefgfh75oq41BsTHeO54MEQaa1kq/WLscIk5iemZkZlzqZHTz44INpWVlZ98TNoMmgYNiLnRBizvTp0zPy86N70HMFXKw6soo5eXOwKkebsuoBHdWudtuvy9mxFK9wsEyewZz8CIEp/iBpG/bgHluA4egeySntqYjA0InC7I3BKnjDTeg6EP5WpK1rZL+vMJPaS2aRcLiOkc+/C3rXnLrTEidjIPlHagaXe/7FJ/u7t/1JTU2luTl+D3k33HCDRVXVW4QQ0S3lmAxqhr3YFRQU/Ee0DVoB3i97n4Ae6LaEGXQHsSZ27Uhu8TaRcWANb+hnMTZHJ9EW/gaYtnk/qi8YtmKKBKRiQ+jhq60MVQab4A1XoYN2sbN3T2PzjMmn/txpJO88QtHiNV3KiqVbUhjnKOGNlCTOsGxh5cdru71eVUMPj7ree/3NvuB0OrnmmmucFotlYVwMmgwKhrXYCSEyHQ7H6WefHX1w1rIDy8hLzGN06ugux4PuILbErl5Z9q4VKIYWatBaFNkzy/h0B4GMZPz5YYJCrUmIYPgE9KHOYBG84Sx0AGgepNUZdkfZNWUkjfMmkL5hL3lL13U5Ny9xCi6h83ZSIqeUvkR5U/f97JSUlJi7lx/L/fffn5Kdnf0fcTNoMuAZ1mKXlpZ217333psSbdpNRVsFG2s2cnr+6d2WK4OeUNpBJ4ZO9s5lbBKT8CdlUZziD2vTcaQO5+G6sK18AKQ9BeGP35d9sDHQBW/YCx3tKQiaDyzhKwc1zzmFlmklZK/6kqxVWzuPF9vyyLdm8UJ6Nteqa3h93a5ur01LS6OlJX5L+GPHjmXkyJGFQogJcTNqMqAZtmInhFDsdvsPvve970V953z7wNsAXRLJO9ADOort6K81rexz7G11POMPeXURG7R+thPDotI2oSjseWlPQQSGr9jBwBU8U+iOIvwtSFuEIkRC0HD2VNpOKSD/X+tIW7+n/bBgbuJUjqga25ySwIYX8Wtdlyzj7dkBPPzww5kFBQVmvcxhwrAVO+DCSy65JDElJbpSeVJKlh5YyoT0CWQldC3QbOgGQhFdvL2cHUtoUNL5TJnOqbnhlyEVX4C0jftwnxI+MAVAKnbQw3uFw4mBJnim0HVFBNuQth4CmxVB7YUz8BRlUbR4NUk7Ql0PJiWMIllJ5Ln0XL6pv8PK7V3rZSYlJeFydc/Xi4UrrrhCEUJcJoSIOhLbZPAxbMWupKRk0QMPPJAW7eu21W/jsOswpxd29+o0n4Yl4WiAl725nNTyzbwQOJ8Z+R5savj8uNRN+1H9wbAVUwCkYkEYwUHZu+5EMFAEzxS6MAQ9SEsvhdQtKjWXzyGQmcLI594jobQGVajMSZzEJrtEtzew46M3urzEbrcTCMQ3OEtVVe68805nenr6rXE1bDIgGZZiJ4QYmZKSMmbq1KlRv3bZgWXYFBuzc2d3O6d5u9bDzNmxFA2Vl7TzmBeplY+UZH66A39WCv689PBDLE7Q4lNBYqhwsgXPFLrwCGmAUHoteyDtVqoXzkV32in583Ls1U3MTJyAVVh4Pi2LMxteZ1dV1++MxWIhGIxvW6u77rrLmZiY+H/NeplDn2EpdoWFhQ/dcccdUS9dBPQAKw6tYGbuTBKOSZ7tQPfrnWKnBL1k7XmXD5hDWoaNbGf4L2nC4ToSyuvDV0zpwOpEBE2xO56TJXim0PWM0APQh7+H7nRQtXAeACV/epvkVo1pCafwbqKNydYdvLtmTZfxiYmJcSsb1kFubi7jx49PBebG1bDJgGPYiZ0Qwg7ccPXVV0f93j8u/5jWQGu33LoOdH8ooRwgc98qLAE3z/p7STf4bAeGVcU1PnxgCrQ3azXFLixft+CZQtcHgm6ktW89IbW0RKqvnIfF7WPUn5YzXxlHUEheSkklb/cLuHxHHxLjWSPzWL7zne8kFBUV/WfcDZsMKIad2Nnt9m9efPHFicnJyb0PPo6lB5aSZk9jYsbEsOc1v4ZqUzvrYB5SitlnG8PECHUwFa+ftI37aTulEGm3hh0DIC0J5jJmD3xdgmcKXd8Qmgd627c7hkBOKtWXz8FW28zM5z5jolLEy6mpXCI+ZvkXRxvBJiQkxKWR6/HMmzcPh8MxVwiR1ftok8HKsBO7jIyMn15xxRVWuz26m2KTr4mPyz9mXv48VEUNO8bQDBSLQlL1DpyNh3jGfxHzCltRI/yW0zbsQwlquMJUTOmCUMybay+caMEzha7vCM2PtET3N/AVZ1N34QycB6u56y0vLnRWJ1lxrX2us71PQkLCCfHsHA4H3/3ud5PS09PvjrtxkwHDsBI7IcS08ePH52RkZGCzhQ/xj8SKQyvQpR5xCRNAEEo7yNmxBI9IYKkxn9MKIoRLS0nGZzvw56Tiz4kcFCoRMMS7HMSLEyV4ptBFiR4ANbrvF4B7XCEN50wlf2cN97xn4/nULC71vc0XB2qBkCj5/fFPv7Hb7Vx22WUWm832fSFE+CdZk0HPsBK7/Pz8Rx555JEsKSWKEt1bX3pgKSOSR1CUHCHp25CggMXTRPrBT3hDP5ux2RrJ9vD1/BJKa0iobIxYMaUTxYrQ4xuBNpSJt+CZQtcPjABSiV7sAFpPHUXTnHHM3+Jl7jqN8oQ2vlq1GAiJ0okSO4vFwmWXXeZUFOXiuF/AZEAwbMROCJFis9nOv+CCC6J+7cHmg+xo2NGjV2cEDVSLSvau5SiGxvPBizg9UroB7RVTrBbaxkUOTAFCT8jDrPhzrMRL8Eyh6x+xxvA3zRtP8+Rirl0r2VSayfSKl6lt9WGz2eKeawdgtVrRNI0HHnggLS8v7+dxv4DJgGDYiF1KSsrtd999d3J/0mmWHVyGIhTm5keOTjY0A1WV5Ox8m43KZLzOTEal+cKOVTx+0jbtp218IdLWc5cRqdoQhil20RKr4JlCFyuyfQm+HwhB47mncmhsEgvWQFpVOas+fK9bHdp4YbFY0DSNyZMnk5OTM0YIMeqEXMjkpDIsxE4IIRISEn58xx13ODRNI5qO5IY0WHZgGVMyp5Bqj1Dzj1CpsOyGjdjc9fyv72Lm9VAHM339HhRNp3VKSe8TMD27ftNfwTOFLnZEP/ftOlEU2i6ax54ige+zFHLf+z2afmL+Fh1iB/Dwww9n5OTkPHhCLmRyUhkWYgecffbZZydnZGQQrdhtqN5AjaemxyVMAKlLig+vpEHJ4DNxKjPzegpM2YkvN41ATmTx7ESoYGh9nq9JV6IVPFPo4oShhz67MZBocfLeVUVUZAoKPj7C2jeXAXRGZ8aLY8Xu6quvVlRV/aYQInzrBpNBS69iJ4TQhRBbhRBfCSFeE0L0PYEmzgghFgghpBDi9mOOzWg/FvFprLCw8OcTJ07MqKysRNd1LBYLd9xxBzt37oz0kk6WHlhKgiWB6TnTexznaCojo2E7fwtcwKl5HhyW8F9I58FqHNVNoYopfUAKBcybbkz0VfBMoYsj7WXDYmWOOoZfXa/idUD6r36GraExbk1cOxBCdAqozWbj5ptvdjocjusjjJVCiMeP+flBIcR/tv//P4UQFe33y45/ae3nzhRCrBdC7G7/929xfRMmvdKXT6NXSjldSjkFCAB3HXtShDghHqIQIpwLth049oP4beDLHmzkp6SkTPvoo4+orKzEMAyEEDz77LNMmjSpx+t7gh7eL3ufOblzsPWyJJO//x00LPxTOzdyHUxCgSm6zULbuMIe7R19A6opdnGgN8EzhS7exEfs8mQKmc5sHr3ehtUIkPjbJ/DX1MRhfpH50Y9+lJSWlvZwhNN+4JoeEtCfaL9fdvxrFkLkAf8E7pJSTgDOBL4vhLj8BEzfJALRfho/AcYKIUqEELuEEH8CNgPFQogbhBDb2z3AxzpeIIRoE0I8LoTYLIRYJYTIbj8+RgixUgixSQjxSUcTRSHE34QQvxVCrAYeCzOHw4BDCJHbXrz1EmDFMdebLoT4XAixTQjxVnp6+k/OOeec9I0bN3LTTTdx3XXXYRgGCxYsYOPGjQC89NJLTJ06lSlTpvDQQw8BsPzgcmY/Mxuv5uWjvR9x23230VDX0G0yGftWMf6v36bw4HICUuUsdRtVru7CmLphL+N/9nfSNuxFSInzYHXffuNmQnncOFbwEvdWU/zX9znlZ7+k+G+rSNzfYApdPJFGaFUiDpwZLGFXDvzqeoHRWs+Wqy7gy1kT2DlhIvvOO5+WZcvicp0OioqKmDRpUpYQYkaY0xrwDHBfFCb/HfiblHIzgJSyHvgJEElQTU4Aff40tntZlxLyrADGA3+XUs4AgoSE6TxgOjBHCHFV+7hEYLOUcibwEfD/tR9/BviRlHIW8CDwp2MuNw64QEr5QITpvA5cB8wnJLbHJt/8HXhISjkN+Mrn893529/+Vp09ezaLFy/m5Zdfxmo9WpqrsrKShx56iA8//JCtW7eyYcMG/t+r/4//XPufqEmhPQeRKBAXCp5Z+kyXSWTsW8WI1b8lxV+PAJzCz39bnsO/dy+bq5I6x6Vu2EvRSx9ha3YjACWok73qSxL3lEf8fXdiLmPGFRF0k7ruA7JXbcHq8iIAa6ub3CXLSdp9+GRPb8gg4rSMCeAmABK2FllYMRMyXGBzCwSgVVZS9bOfx13wHnnkkaz8/PyfRjj9FHCTECLcpvt9xyxhrm4/NhnYdNy4je3HTb4m+hKpkSCEAfzGrwAAIABJREFU2Nr+/0+A54ACoExK+Xn78TnAGillHYAQYjFwNvAvwABeaR/3IvCmECKJkFC9dkw48bFrS69JKXtamH+13eYE4KV2W7R/+NKklB+1/3zE6XQ6EhKOdiiQUnYJYd6wYQMLFiwgOzsbgJtuuomnW57GZ+uaNiBVyaHMQ12OFX3xHFaja5KrUwR4QHmNKw4+zsz8ULPWvGVfoAS7Bpkomk7G2l24eygADbTfMEyxiycZn2xFOa5VjKLp5Ly3heAXe07SrIYYqg2kBCP2ggiJwsMZ7VWEclq65/FJn4/aJ54k9Rvf6Pc1Wlq6Fms/77zzsFqtC4QQyVLKLtFmUspWIcTfgXuA44t1PiGl/M1xxyKVQTJLI32N9EXsvFLKLtEZ7WLhPvZQFNeUhDzK5uPtHoM7wvGQASmrhRBB4ELgx7SLXZhxzYFAQFmzZg3Nzc1s2rSJ5uZmgsFg5891dXVUV1ezpr2dyO7du/FNDp8fpzk06r6q6/zZ1lYbdlyBaKDZZ8HqywPA2hS+Q7nF5UXLntbTWwXVjm4Zj/m9iB8W19LwJ6TEWzL6653MEEUg2j+xsX9u9wW+ouMWk98U3l6wsrLzO9xfjn19IBBA13U7oTiFcDxJaFXpr30wvQOYDRz7wZsF9B4hZxI3+h6D3zNfAL9r37RtAm4A/tB+TgG+CbwM3Ah82v5kdEgIcZ2U8rX2vbdpUsqIgSZh+DmQI6XUOzw1KWWLEKJJCHGWlPITYJKmaa4pU6akFBcXM27cOGbMmEFpaSlpaWnMmjWLwsJC/vKXvzBlyhTS09P55S9/SerUVFpk97Y8qlcle0p258+BrTnYwwhepcwkzaERdIT25YLpSdjCCJ6WnIClbluPb1JPG4PirjJb/MQRLSURa2v356lgehKHbz/zJMxo6KEGU5EigGGJvUvBC9VHaDFC35/x5RrZYeK/rAUFLFiwoN/XWLNmTZfX//Of/9QDgcBfpZRh65NJKRuFEK8CtwPP92L+KeALIcSbUsqtQohMQts+v+j3hE2iJi6L6lLKKuARYDWhyMjNUsol7afdwGQhxCZCe3odf+CbgNuFEF8SevJZGOU110op/xXm1PeAXwshtgHTFUX577/85S/eW265hbvuuovrr7++S7fj/Px8Hn30Uc4991xOPfVUZs6cySNnPoJD7Zpmo0qVtD1dCzaXz72doNI1ss8jbTxuXMcloxs7j1V/Yy6GtetzhWFRaZwfvlVQ1zcav70Pk1DUZf2F52NYuuaAGVYr1Vf0nEtpEgVSIEV8ViOmJIzt/P8/Fwh8xz2iC4eDnPvujcu1Onjsscea6urqftvLsMeB46Myj92z2yqEKGm/P34H+IsQYjewFnheShnfjUaTHhHxTtDsdgEh2qSUSb2PPGHXTy4uLj5QWlqarSgKra2t7Nu3j1mzZvX4uuUHl/O7zb+jyl0FwJkFZ3Lb1Nu6jcvYt4rsT58l2V+HAP4neB27is7h0rFNXcalbthL3rIvsDa1IYCG+RNpmX1Kr/PXU0YifE0ogcjpDCZ949j0gqTdh8l5bzPIkEdXc8UZuKeeQdBeB4qZxB8raiAdQ/Ug1dgLN7/Z9CH73AdI03XqLAqXb9O5/iOJzS2wFhSQc9+9Me3XQVfPbtu2bVx66aVrKyoqzoh58iYDhngtYw5YpJSu/Pz891auXHnjZZddJhRFwTB6D/i4fPTlXD76cqSUfHfFd9levx2v5iXBktBlXOMp59N4yvkEquuZu+x7jJPVfOLtnnrQMmccLXPGobq8TPj5P7C6+rgsKY2YK1GYdM+jc48vQv90J21TJnPkO6cBIIx6rP5sU/DigIhTayq37mW39xDfdrmYLq4gcfr1zL95Pqp64r4Tjz/+eHNlZaW5xDjEOOHrYyfTq+ugurr60UWLFjVA19JAfUEIwYNzHqQl0MK7pe9GHGc4kqgqOo8rxDpq6jRa/OG/jHpyAs2zxpK0uxzF33ukWjxDuIcrfU0Yl0oQzR4SPIwh/xx4YpEC4rCMuc27Dx2Dq1vbyD/vLnRdj7o9V290FJoAaG1t5d1333UD78f1IiYnnWFxF5VS7ti/f39VaWlp1GIHcGr2qVw08iLeLX2XJl9T2DFCERwpvhQLGt9WPmR9RUpEew3nTEUJ6iTv6ENel6GBYt54+0u0lVFMwYsTUkHGmDIjpWSLexdTfRr1zGLapFBaWry7H3SUEAT429/+FggEAn+W0kxuHWoMC7EDqK+v/9WTTz7pUlW1X7X17p15L7rUWbJ/SdjzikWhLSGf5uI53GJ7n02VTiIVafcVZ+MelUfK9kNg9PL0awSQsVSPH8b0twSYKXixI1BBxFbDsixQRYPeyg2uZnzTbzlhLX6CwSAWiwUpJU8++WRrU1PT0yfkQiYnlWEjdsFg8K1XXnnF099Ox8UpxXx7/Lf5tOJTyl3dK58oFgVDM6idejUZsoUzg5vYUZcY0V7DgqlYWzw4S3uu8xdzq5RhSqy1Lk3BixFJzF1cN3t2k2jA+LYU5l5wbZflxnjS0Qnlo48+wufzfSal7F4X0GTQM2zETkoZ0HV98auvvtrvx83vT/s+TquT1/a+1u2cYlUwggYtxbPxphbyb7YVrKuI3MKn5dRRBFMTSfnyUMQxQKiXnSl2URGvos6m4PWTOAidR/ex23uIq1wuDhZ8kySHDb/fj93e/87zkQgGg9hsNhYtWtRQVVX1q7hfwGRAMGzEDqCuru6JX//6142KovRrKTPNkca/Tfs3ttdvZ2dD1+IHQoj2L7lC7dSrmcJBkpsrqHFbwxtTVRrOmozzSB3Wxgi97wCMIFKJYMOkG/HuXmAKXj+QKjLGJcwvvXvRMbii1cfYi78PhKqanAix8/v9NDc38+WXXzZKKTfE/QImA4JhJXZSyvLGxsbdpaWlBAL96/5948QbyU/M57W9r2GEuZlKKakfdxGa1cltlhV8Xh45UKVx/iQMi9qjd3didimGJieqTY8peNEhpAVE/1M3jgamBKi3nsHYkSMA8Pl8J0zsXn/9dX9LS8v/xN24yYBhWIkdQGVl5S/efPNNX3/37uyqnXtm3kNZaxmfV33e5ZxiCy1lGjYn9RMu4TJ1PUeqdfxaeMnSkxNomTmW5N1HED2kIQipI8O29jPp4ET3ozMFr+8IaUHGIHaHA9U06K182+XCMvfOzuMejwenM/69o9va2nj99dc9Xq/3n3E3bjJgGHZiB3y4fv361poYGkBeNuoyJmZM5K19bxHQj3qIqk1F94eWb2qnXIWKwbV8yJaayKmG9R1pCDt7SEMIesB60hrED3i+rsarpuD1DWHYMJT+dzvY7N5Foi4Z6c7htDMu7Dx+osTuvffek1LKt6SUZgHaIcywEzsppeH3+3+3ePHifj96KkLhwdkP0uBr4IOyDzqPq3YVzR8y608toHnEXL5r+YBNR5xEqsrmG5GNe1QuqdtKiTRIBN1IU+zC8nV3GDcFr3cUw4pU+rdN4DF87PIdYmFbGzWjb8RmPVqcwev1cmy7rnixePFib1VV1aK4GzYZUAw7sQNobGz884svvuiJpS7oafmncXbh2Sw/tBxXIBRgYnFYOj07gJpp15COi9nezZS1RN5raDhnGtYWNwml4VsGiaDHFLswfN1C14EpeL0gVRD9+3ts84QCUy5p1Zh2addatCfCs9u9ezeNjY1HpJT74mrYZMAxLMVOStkkpfxs9erVvQ/ugftn349f97PsQKh4ucVhQfMedRhdhTNwp47gdusK1vUQqNIyfRTBFCepXx4MP0DzIC2m2B3LyRK6DkzBi4BU+p1MLqVkS9supvn8NCZeSF5WVpdzhmHEvSbmE0880XL48OGH4mrUZEAyLMUOoLS09D8WLVpUH4uNMWljuHrs1aw+spoad01I7HzHrI4KQd2p1zBJlGGtq6QtEOGLqqo0nDUF5+HwaQgd9THN9q0hTrbQdWAKXndi2a87HKim3mjlW6420s7+QZdzPp8Ph8MR4ZX9w+12s2TJEq+UcnlcDZsMSIat2EkpN2/fvr2hoqIiJjv/Pv3fsak23tj3BkIJ5doduzzacMr5BKxJfE9dyYbK5Ih2Gs+YiKEqpGwLn4YgNB9Y4r9fMdgYKELXgSl4XVEMW7/367a4d5FoSHJ8o5gxY06Xcy6Xi+TkyN+f/rB48eKgYRh/lVKaLS6GAcNW7ABaWloee+qpp7q3rI6CbGc2t06+lY01G9nftB/VoaL7ji7jGNYEGiZdxiXqRkorghFLYerJTlpmjSV5V3nYNAThb0HaI1dkGQ4MNKHrwBS8oyi6A0PxRf26jsCUK11teCbegqJ0TddpaWkhJSXyVkC0SCl5/PHHW+rq6n4XN6MmA5phLXZer/elF154wX1s5/L+8L3J3yPTkckre1/BkmAh6Olqr3bKQgSSK7XV7G6IvPcW6oagkbzrSLdzItCKtMfvyz7YiLfQJe4pR/X4SP1iE+N//g9SN+yNyZ4peIQqCEkVlOj37LZ59qFhcF6rwuyLbup2vqWlhdTU+D3sffHFF7S1tW2WUvY/B8lkUDGsxU5K6dN1/c1//etfMd09nVYnP5zxQw40H2BHYAcBd9dlnEByLk0lZ3CDZTVbjkSOyvSOyMFdkhtayjw+UlTzIi0Jw3Lf7kQIXfaqLxEyVKHG1tRG0UsfmYIXI8KwIZXoizWEAlN2MM3nx5V+JanJ3R8I29raSEqKX2vMxx57rKGysvK/4mbQZMAzrMUOoKam5jePPfZYY6x2rhp7FaNTR7OkfAneNm+387XTriGNNia1bKHBE/lG2LBgKrZmNwllXdMQBCCC3mG3b3cili4z1u5C0bp6H0pQI2/ZFzHbHs6CpxgODDV6sTsSqKbecHFtq5viC3/Q7XwwGERRlLg1ba2vr2fdunWtwGdxMWgyKBj2YielPFBZWXlo165dMdmxKBYemP0Atd5a1rWs4/gcvrb8qbSmjeYW9V0+L4+80d4yfXQoDWFr90AVERhe+3Ynao/O4ur+MAJgbWqLi/3hKnj93a/b7N5Jkm6QoU1hwrjx3c43NTWRkZERjykC8Mwzz3jdbvcTMpZEW5NBx7AXO4CamppfPP744y2x2jmr8Czm5M3hw7YPaW1t7XpSCBqmX8N4pRxRXUFQj1DiWVVpPGsyzsO13W6+wteMdKTHOs1BwYkSusT9lRGrawfT47dMNuwETwpAiXq/zmv42OU9xBVuN+rMO8KOaWxsjJvY6brO008/3dbW1va3uBg0GTSYYgcYhrHi7bffdre1xfZkL4TggdkP4DbcLD/YPXWnYex5+Kwp3Mh7bKuN3Ni1cf6kUBrCcd0QhO5HKhakiG9i7UDjRAid4vGTs2Ijue9sJJCehGHp+js0rBaqvzE3LtfqYDgJnqInYKjhPeae2ObZhyYk81sdzDn3qrBjGhoa4iZ2K1eulMFg8D0pZQ99tUyGIqbYAVJKXdO0v/zjH//oX4LQMUzOnMxFxRfxUd1HNHq7bgVKi43GKZdzgbqZ0iORL6WlOEPdEHZ174ageBuRjvgt6Qw0ToTQJe6rpGjxGpwHq6m+4jT2/vwmym9cQCA9CQkE0pMov+EcWuaMi8v1jmW4CJ6iOzHU6OooSynZ4goFpuj538Jh69630TAMgsFg3BLKFy1a1FBdXf1oXIyZDCpMsWunoaHhqSeeeKI1Hsv498+5Hyklb+57s9u52skLAcEF3o8ob43cgTxSGoLwNSATMmOe40Ak3kKnePzkvLOR3BUbCWSlsP8n36Tu4lmgKrTMGceeX9zMnl//P/b84uYTInQdDHnBkwJhWJAiuhSeI4Ea6qSLha0+xl98V9gxjY2NpKfHZ+n+0KFDHDhwoEpKuSMuBk0GFabYtSOlrHO73RvWrVsXs63C5EIuyrqIdVXrKGst63IumJRF/aizuF5dw5byHtIQRubgCZOGIDQfUrUhxdD608U9vWBfJcWLV+M8VE31N+Zy4IFr8BecvIeEoSx4oSVMX9Sdhre07SDRMEhnLsWFBWHH1NXVkZ2dHYdZwu9+9ztXfX39r+JizGTQMbTumDFSWVn5X4899lhDPGzdMvEWkixJvLrn1W6RmfWnXkuK8DC6bgueYOQ/Qf05U8KmISi+obWUGU+hC3lzG8hdsRF/dir7H7qOuotmgnryP+pDVfAU3YlhiW4J02v42Ok7xBVtbtLO+H7EcfX19XERO5/PxyuvvOIJBoNvxWzMZFBy8u8AA4vP169f31JbG77VTjSMLhzNxakXs6txF9vrt3c5586dSGPaKdysvM/mysiBKq3TxxBMTiD1+EAVTx3SmRPzHAcC8RS6xL0V7d5cTcibu/8a/PkD66FgyAmeVNo7k0e33d0RmDLTlc7MeeeHHeP3+xFCYLV238uLlldffVXXdX2xlDLmfXmTwYkpdscgpZRut/vx//3f/425Y7Hdbuec1HMoTCrk9b2vYxx7IxeC5pnXMlapxKg4ErFeprSoNJ45GWdZ1zQEofsBibTEtwr81028hK5zb27lpgHnzYVjKAmeqiWiq21RLWFKKdnS+hXTfH4co25GVcK/uLq6mtzc3LjM89e//nVjXV3dE3ExZjIoGZh3g5OIy+V64ZlnnnHrev96ch1LYV4hN4+4mfK2cj6t+LTLucYxZ+O2pnGNtooDTZGrojSeOTlsNwThrsFw5sU8x5NFXIROypA392Job67qynkD0psLx5AQPAmKlohhia6WenmghjrauMwV5NRLbo04rrq6mry82D/jW7ZsobGxcZeUsjxmYyaDFlPsjkNK6dY07Z133nkn5rDMvLw8xuhjmJY1jX/t/xd+7WgpJanaaJh6JeepWyk7HDk/SUtx0jJjTCgNIXC0E4nwNSIdqchoowIGAPEQOtXjI7fDm8tNY/9D11F/4YwB682FY7ALnjAcoXY+IrqvyubW7SQaBlm2BWRGiLTUNA2v1xuXtj6/+c1vmsw6mCaD587wNVJdXb3o0UcfjTlQJTk5Gb/fz70z7qXZ38y7Ze92Od8w5Qo0VOa3fEKzL3KieMM5U1ECXdMQBCC8jYMuDSFmoWv35opeXENCWS1VC+dx4L6rB4U3F47BLHiqloRuia4Qg9fwszNQxhVtbgoX/DDiuJqamrgsYTY3N7Nq1ao24MOYjZkMakyxC4OUcndpaWnFgQMHYraVn59PTjCH80ecz8pDK2nxH61KpjkzqC5ZwDfVj/nySORNeG9JLp6ROd3SEBRPDUZi3qDphBCr0IX15i4YXN5cOAal4BkqQqpINbp4j+3uPWhCMsVTyOSpMyOOKy8vp7CwMNZZ8vzzz/t9Pt9TUg6gBogmJ4XBfZc4gdTV1f3yd7/7XWvvI3umsLCQiooK7p15L0EjyJIDS7qcb515NUnCR3H1VrQevo4N50zF1tRGwuG6zmNCDyA0L9KeFus0TzgxCZ2UJO4p7+rN3X81/ryhUyd0sAmeRUtFt0T39egITJnq85M58Q6ECL8EHwwG8fl8MTdrlVLyhz/8obWlpeWZmAyZDAlMsYuApmlLXnvtNY/XG329v2NJTEzEMAxybblcN+46Pi7/mKq2qs7z7pwJVKdO4Nt8wM7ayIEqLTPCpyEorgqM5MIB7d3FInSq20fu8g3kvrsZf176UW8uTu1eBhKDRvAMFWHYoq6FWR6spVa4udAlmXXRDRHHVVZWkp+fH+ssWb16NX6//xMpZVPMxkwGPUPvjhEnpJRBTdP+8corr2i9j+6Z4uJijhw5wg+m/wCH6uC1va91Oe+afS0lSg3G4cOR59ORhlBag6X52DQEH0IPIG0Ds4t5v4Wuw5tbvIaEw3VUXXU6B+67akh5c+EYDIKnaikhry7aiinNX5JoGOQnX4azh1qXhw8fpri4OMZZwqOPPlpfVVVlVkwxAUyx65H6+vonf/3rX8f8VFhQUEBlZSXp9nTunHYnW+u2sqdxT+f5ltFn0WLN4BLfaqrbItfLbDwj1A0hdVtpl+OKqxyZXBTrNONOf4XuWG/Ol5fOvoevo/786UPSmwvHgBY8qaDo9qiLPnsNPzuDh7m0zcP4i34UcZzL5cJqtZKQEFuT4oqKCr766qsGKeXmmAyZDBmGx92jn0gpK5ubm7/atGlTTHasVispKSk0NDTwnYnfIdeZy6t7Xu1MNJeqhbopCzlb3c7h0sg5S1pqIq0zxpC083DXNATNC4aGtMUeph0v+iV0UpK0u5yixas7vbmD911FIHdoe3PhGKiCpwZT0K2uqL26r9r2EBSSSf5TGDVqbMRxZWVljBgxIsZZwh//+Ed3c3PzYzEbMhkymGLXC5WVlf/1P//zP429j+yZkpISDh06hMPi4EczfsSh1kOsr17fed417XICWJnV+Bk+LfKdpP6cqaiB7t0QFNdh9JSRA2Lvrj9Cp7p95L69gZz3NuPLzxh23lw4BpzgGRYUw4GhRpdELqVkc+t2pvj9jJjxg4jjNE2jrq4u5kTyYDDICy+84PH5fC/FZMhkSDF87yR9Z81HH33U1tQU22pmRkYGPp8Pr9fLFaOvYFz6ON7c9yZBI9QWRUtI48iIc1mofMruisg5d96SXDwjsknZ3r0bggi0IZ3xqRDfX6IWOilJ2n0k5M0dqaPy6vkcvHd4enPhGEiCZwmmo1mbovbqKoK11CoeFrRamXnOlZHHVVRQUFCAEuMDzltvvWXouv6GlNIXkyGTIYUpdr0gpZQ+n+/3zz77bMxfnJKSEkpLS1EVlQdmP0C9t55Vh1d1nvfOuRqn8JNXuZWe2uo1LJiGrbFrGgKA4jqCkVRw0jqZRyt0aluHN7cl5M098i0azjt1WHtz4RgIgid0ByCRqr/XscezuXELTsOgJPtarJbwn00pJaWlpZSUlMQ2UWDRokWNtbW1v47ZkMmQwryr9IGWlpZn//jHP7YZRmx5qQUFBVRXV6NpGvML5jO/YD5vH3ibtkAoutKbfQqHUyZzjb6KsqbIgSot08egJSWQcnw3BKmjtFVhJMeejBstUQmdlCTtCuPN5Qz8fMGTxUkVPAmWYFrIq4sSn+Fnp17OxW0+Zlz67xHH1dfXk5ycjN0eucdjX9i5cyfV1dUHpZQHYzJkMuQwxa4PSClbgsHgh6tWrep9cA+oqkpRURGH21MM7p91P17Ny9sH3+4c455zLUWiHr3sUCQzSKtKw5mTuqUhAAhPLdKeilS/vo4I0Qid2uYjd9l6ct7fgq8g0/TmouBkCZ6iJWEoPlCiL46+vXUXQSGZYEwlJydy+a99+/YxdmzkwJW+8vjjjzfX1NT8ImZDJkMO8w7TR6qqqh599NFH62O1U1JSQllZGYZhMD5jPAvHLuTDIx9S5wktSbaNOYNGSxbntn2Eyx95ObLxzMmgiG5pCAJQW0ox0kZ/LcEqfRa6Y725inoqrz2Dg/cuNL25KPnaBc9QUbVkdGtL72OPQ0rJFtdXTPb7mXz6vRHHNTc3o6pqzBVT2traWL58uccwjJUxGTIZkphi10eklFt37dpVd+TIkd4H94DVaiUnJ4eKigoAfjj9h6hC5Y19b4QGKCqVkxYyT9lFRVnkckxaaiItYdIQAETABUE3MvHEtgDqq9Cpbd6j3lxhJvse/hYNC6aZ3lw/+doET4I1kIlma4y6swFARaCWGtXLGW2JTJtzTsRx8fLq/v73vweDweBfpJSx9+cyGXKYd5soaG5uXvSHP/whujLvYRg7diwHDhwIlRFLzOV7k7/H+ur1HGwObTMEZl6OHxtT6tah9+AsdaYh7O4uwErrEQxnzglbzuyT0ElJ0s7DoSooHd7cj829uXjwdQieoidhKMF+BaUAbG7YhNMwmFB0Y8Q6mK2trQSDQTIzY+veIaXkiSeeaGlsbHwqJkMmQxZT7KLA5/O98uKLL3oCgegqvR+P3W4nJyeH8vJQL8nbptxGhiODV/e+ipQS3ZHCvsLzuUyu5XBtZLXzluTiKc4OBaocF74pMFCbD6Knj4n7cmZfhE5t85K3bD05H2zFV5TFvkeub/fmBl//vYHKCRU8Q0UNJqFbm/v1cp/hZ5dRwQVtAeZe+v2I43bv3s2ECRP6O8tO1q5di8fjWS+lrOt9tMlwxBS7KJBS+nVdf/XNN9+MeZnkWO8u0ZrI3afezd6mvWyt2wqAfvo1OESQ7MNfRjYiBA0L2rshHOn+HRfBNkTAhUyKvahuB70K3THenKOigcpvnsnBexYSyE6N2xxMjnJCBK9z+bKpX8uXANubdxBQYKJlLinJ4ffimpub0XWdjIzYexE+9thjDZWVlb+M2ZDJkMUUuyipra19fNGiRTHXy7TZbBQUFFBaWgrANeOuoSSlhNf3vo5maASyRrEv+VQuDayhwR35z9QyY2x7GkJp2PNK6xEMRybSmhTrlHsVOtXlJW/pF+R8sBVvUVYo0vKcqaY3d4KJt+CpWiqGEuj38qWUkq1tXzHJ72fugv8TcczOnTuZOHFiLFMFoLa2lvXr17cAn8dszGTIYopdlEgpS+vq6vZ/9dVXMdsaM2YMZWVlBINBrIqV+2bdR5W7ik/KPwGgbdY15ItGtIORU4Y60xAOVWNp6V7GSSBRm/ahp41BKv2/EfYodFKSvOMwRYtX46hspPKbZ3LI9Oa+VuIleEJ3oOj2fi9fAlT4q6m2+JnryeSUiaeGHVNbW4vdbictLfb926efftrT1tb2Gyl7KsVgMtwxxa4fVFdX/+Lxxx/v/92gHYvFwujRo9m7dy8A5xafy8ycmSw5sASv5kUbN48aNZf5LZ8Q0CN7Rx1pCCnbwufmCd2P0lqGkT6uX/t3PQldhzeXvWor3hHZpjd3EolZ8AwLlkA6QXt91CXBjmVL3SYSDINZp9wefp5Ssnv37rh4dbqu88wzz7jdbvffYzZmMqQxxa4fGIbx7ooVKzwulytmWyNGjKChoQG3240QggdWiySRAAAgAElEQVRnP0hroJUVh1aAolI2fiGzxF7qD0deOdVSE2mZPobknUe6pSF0oPibEYFWjJToKspHFDopSd5R1unNVVx3Fod+ZHpzJ5t+C54U7ft0DSD6XynIZwTYKapY0KYz78Kbw44pLS0lOzsbp9PZ7+t0sHz5cqnr+jtSyuiqU5sMO0yx6wdSSiMQCDz9wgsvxBaWCQghmDx5Mh3LolOzp3JJySW8V/oeTb4m1NMuw4OD8dXrerTTcM5UVH+QpD3lka/lKgeLE8PRt4CASEKnurzkLfmC7FVf4h2Rw96fXk/j2VNMb26AELXgSbAEMtBVN1KN7SO9vWEbAQVOTTgHu6176S+/309paSnjxo2L6TodPProow3V1dWL4mLMZEhjil0/aWpq+vOTTz7ZGo9tgszMTKxWK9XV1QDcM/MeDAze2v8WhiOJHXnnc56+noaGyDciz6hcPMVZpIZJQ+hAAErTPozkwl5734UVOilJ/qqM4sWrsVd3eHNXEswamF3ShzPRCJ4aTAUhMSyxpZBKKfnSs4MJ/gDnXvJI2DG7du1i/PjxWCyxB9IcOHCAsrKyCinl7piNmQx5TLHrJ1LKeq/Xu+7TTz+Ni71Jkyaxe/duNE2jOLmYGybcwGcVn1HuKkfOvwa70Egv3RrZgBA0nDMVW6MLR3nkqmZC6qgNe9BTRyMt4btBhxM61eUhb8nnZH/4JZ4ROex7xPTmBjp9ETwlmISQVjRrY0z7dAAV3kqqrAHm+PMpKCrpdr6xsRGv10t+fnxSYZ588snWuro6M93ApE+YYhcDlZWVv1y0aFFDPGw5HA5KSkrYvTv0kPr9ad8nyZbEq3tfReSMZLtzJud5P8Hrj7yf0jJzLFqSg9StkYtIAwgjgNq0Fz19HFLt2l2hm9B1enNrsFc3UfEt05sbTPQkeIqWgKo70WyxBaR0sLVuIwmGwZnTunc30HWd7du3M23atIjVVKLB6/Xy2muveTRNWxKzMZNhgSl2sbFh8+bNTR3Lj7EycuRIWltbaWxsJNWeyv/P3pmHN1Xl//99bm6Splu67yt0XyjQsooIgha+I4IyI4go8hMVEBkUFJRRZ9BhEUYUEFBwHBEVURYFRbAsyk5poWzdgG50SdO0SZqkWW7u+f3RRSht6ZIu4H09Dw/NXc45SdP7Pp9zPsuLfV7EpYpLuFxxGer+j8OLqEGvX232fipmUXlf82EIN0O4Gog012B1iwIltQ/BxkInqjbAZ3edNRdcZ83dL1hzdxtNCR6xSiHi5LBIlTYROiNvxhVROe7XEwweNvG28zk5OfD394eDg0PHOwOwbds2juO4LZRSi00aFLjnEcSuA1BKqVarXblx40aDLdojhKBPnz64ePEirFYrnox6En4Oftiesx2SmCQUMX5IqjwGnm9+n1DVEIaQf+f+zDow1UWwukfBau/5h9DxVjhdyq+15srVKJ40HHlzBGvubuZmwSOcDKzZDRaJst0ZUhpzsfwcTAyQ6JIMRnTrY0Wj0aCiogK9e/e2SV8AsHLlSrVKpfrIZg0K3PMIYtdBDAbD1s2bN+s5rmmX/7bi6OiIwMBAZGZmQiKS4O/9/46i6iKcLD2N3N6PIg55MJQ0n/6Pc3GsC0MoBLHceUyMsQrErAWVh4KpyoVYo6uz5i7AEOKN3DeeaIjjE7i7oYwFVrEWYrMHLJLKdtWna7JdSnHRlIkIkwVjxi665ZzVasX58+fRt29fmyxfAsDZs2eh0WguUkpLbNKgwJ8CQew6CKXUwHHcj3v37u1YGfObCA0NRXV1NZRKJcaEjkGMewx2Xd0FdtAoVEOGXsUtZ0VSPRBXG4aQ1XwYQj28zB1U4gSmMgdO1/QIuMWaGweLu2DN3SsQqx1EnBMs0nKIzW42y6VZrC9GsdiCAVwI3Nw9bzl35coVBAYGwsmpZe/ftrBy5crKkpKSd23WoMCfAkHsbIBCoXjfVo4qQO1yZt++fXHp0iVwFg4Lkhag0liJQ+UnkObxEO6zpMPUwp6cIdQHNQEekF9oPgwB+GOPTpp3Fn7bfob3j/tQExyE3IVP1lpzNpqJC3Q/jNUOrMUFFmk5qMhk01yaF5SpkPE8kgctuOV4eXk5dDodQkNDO9xHPVVVVfjtt990AI7YrFGBPwWC2NkASmlOYWFhUW5urs3alMlkiIqKwrlz55DknYQHAh7Az3k/QzswGSLwcMlrOQyh4oF4SFTNhyHwMnfw9t5wPfwzArcehrRcgxuTH0DeS+MAx94gXVEFW6BLYDh7iCxyWKTlDdlRbJVL08gZcVmsxBCDGH37j/rjuNGIy5cvo1+/fjZbvgSAzZs3Gw0GwxohD6ZAWxHEzkYolcr3Vq9erbFlm76+vnBwcMC1a9fwauKrMFvNOKQ/izRZIobqjoPnmndE0ySGgXOwqw0ybwQvcwdjtkPAps/geTgD+l7eyH1zEqruiwFlzeCkKrAmTxBr5xR+FegiKCAyy8FYHW4RuobTNhC8i2VpMDIEg70nNIgaz/NIS0tDXFwc7Oxs9x3ieR7r1q3TVVdXb7ZZowJ/GgSxsxEcx+3ZtWuXwWCwiWNmAzExMSgrK4PcKsfj4Y/jSNERXIkZCXdSDdH15i3JP8IQFLeEIfB2bnC6XIKQdZ9CqlTjxuQHkP/SOFjc/thToYwFFjsFWIscjKXjpYEEugFKwJo9ABBwLXhddkTwKKW4zGUj3MRh/Ng/ljCzs7Ph7u4OT0/PFu5uOwcPHoTZbD5EKbXppFLgz4EgdjaCUspZLJb/ffPNN7Zxy6yDYRgkJibiwoULmB45HRKRBIfEubhGAtC34niLe3KqYbEApfD/+jeErvkRQf9NQeB/98B7737oe/k2WHNN7s0RHhapAgwvBWt2hc3LnQt0HrwIYpMXeFENrBL1HePo2it4xZpCFEmsGECiYO9QOykqKSmBWq1GZGRkR95BkyxbtqyirKxsqc0bFvhTIIidDVGpVGtWrVrV4cKujZHJZOjTpw/yL+djesx0pJen46fgYQinhSCK5r2vHa6WAIRAZOFAALA6AyQVKqiGRCH/pUduseaahACcRAVKrBCbvAAqsu0bE7A5xCqF2OQFTqwGz7a+EEB7BO+i6gzseB4T7n8TAKDVapGTk4OkpCSb7tMBQFFRETIzM8sppRk2bVjgT4MgdjaEUlqm1WozUlNTbd62u7s7AgIC0NfaFx4yD/zqXIoq6oDAotPN3uOz5zRII8uPAHDKutF6T0sCWMVacGItxEYvMMI+Xs+kbn+OrXNEaU+V8bYIXo25BpekVRhotEd01ACYzWakp6cjMTERYrG4ve+iWdauXaurqqpaZvOGBf40CGJnY0pKSt5dsWJFZWe0HRoaCgeJA/7m+zfkV+fhE88kDDCdB6PXNnm9uKrpLPbNHW8JKjLCYqcAY3GCSFjW7FnwIohN3gChtY4oHQgWb63gXS49AyNDMCJoEqxWK1JTUxEdHW3TeLp6zGYztm7dajCZTN/ZvHGBPw2C2Nmeo8eOHdOqVDYLu7uF+Ph49BP3Q7BDMH5x08ACwOVaepPXWlybfvBYXNvpdEJ4cFIlQDiITT5CeEIPgOHsG5YtrWKtTfJctkbwMvlc9DLxGD/6ZZw7dw7+/v7w9vbueOdNsHPnTqvVav2WUtp2c1VAoA5B7GwMpZQaDIYPN23aZOyM9gkhGJA0AI84PQKVpRIrXGMxoPoUGO7WWncMZw/lmIfAi299WPFiFmXjBnVgAIBVXA1OogJr9oDILBesvO6AF4E1eYKxymCxK2vXsmVLtCR4RRXXkS+lGCRJQO7Vq5DJZAgJCbFp/zezfPnyyvLy8v90WgcCfwqIEJtpewghzoGBgdfy8/M9GKZz5hNGoxFP/fAUCo0FOFhwFce8J0LXKwFAXRBxXVoo+dls+Ow5DXGVDhZXR5SNGwTNANtUiQYFRJwTGM4BnKTK5g/crkBs9IHFzjZVK7qEWz5zNaioU+ZUDRBeDNbkUVsdgal1ND5wdRsy7DT4IOoj2Etc0b9/f5s7pNRz8eJFjBkz5mRxcfHQTunAhqSlpXmxLLsZQBwEQ6I74AFc4jhuRmJiYnnjk4LYdRK+vr5ff/7550+OGTOm0/o4V3wOz6Q8A3srRQ0D+HBWPFPJQWI3HogKtllG+zvCi8Ba3ADw4CRVtwUv92TuJrEjvASs2RU8Y4RVrLHJkmXr+q0VvLSS7TjBXoGSJZBRinH8YCyevgmdNaEDgGnTpqm3bNnyJKX0l07rxEZkZGT86OPjE+3p6allGEZ4sHYxPM8TpVIpLysru5KQkPBo4/PC7KOTKCsrW7Zs2bLmS4bbgBJTCRgQGEQElBCUill85CkBa/wWfG5mZ3Z9K4wVnEQJXlQDsdEbIoszQIW8mjaDF4E1uYM1u4CTqGCVdJ3QAbVLmmkl27FfegVKMQMQghqGwY/MKazbseDODbQTrVaL/fv36wEc6LRObEucIHTdB8Mw1NPTU4Nay/r28108nj8NlNKLOTk5ivz8/E7r46P0j8A32jAzMgw2ujliuLKLJ8IE4FkDLHalACjERp/a7CvCn337oQxEZleIzZ6wsvrakALGpjkLWjcMSnFUfAXGRhackWHwg2Z/p/X7xRdfmE0m00ZK6d2yVMAIQte91H3+TeqaIHadSGVl5dK1a9dWd1b7Zfqml99KWRFYpgpiXadEQLRMnQOLxa4MhIpqRY+zF0SvLVACkVkOsdELlDHBIi2r3ZvrQmuOpzzyTSX4WXkU629sQSXb9KNCyXbOoCil+PDDD7VqtXpDp3RwjyISiRKjoqJiIiMjY2JiYqJ//fVX25SGr2PixIkhn3/+uSsATJo0KTgtLe2uCbwVfMc7EbPZ/P0333yzeunSpU5SqdTm7fs4+KBUX3r7CUIwKjgAMcpvEHHDCT7OCfDwiQfpxL2V28dAYZVoYKXVEFnkEFvksLI68Kyu6/YS7zZ4ttb5xGoHK1s7YehKgTPxZlwz3UB2TQGu1hTASCyQ8BSDTEZkSKXQim7//nhynfO7PHr0KCwWSyqltHNieHoAW08VuK05mOuvrDZJPJ2k5rmjwounDg7u0AxVKpXyWVlZVwBgx44dzm+++WbAQw89lG2bEd/Kt99+W9AZ7XYWgmXXiVBKzSKRaOd3331nm5LQjXg65GmIG6XwsuN5zFJpMdYaC4PIAz84GbERZ/Dxjc3Yl78L2bpcmPnmqyXYHMLDKqmqtfRAIDb6QGR2AXgh9Vg9xCoBa/KA2OwOyhhhsSsFL9Z1idBprDqc1V/BV6p9WFX2JXZUHUSB/ioe1lVhmUKDNebBeC7uY4yhg2HH37qaaMfzGOc4ulPGtWzZsqqioqJ/dkrjPYCtpwrc3t17Jbi82iShAMqrTZJ3914J3nqqwM1WfWg0GpFcLufqfmaGDBkSERMTEx0RERGzdetWFwDQarXMiBEjwiIjI2PCw8NjN23a5AoAR48etR8wYEBkbGxs9LBhw8ILCgpuS4szcODAyN9//90eAOzt7fu9/PLL/pGRkTEJCQlRRUVFLACUlJSwycnJvePi4qLj4uKiDxw4YFNLsy0Ill0nc+PGjWUrVqx4aurUqTZNLVFcXIxQYyjeGfovrD69ApVWLXw4K6ZV8egV9jpiXGMxPzoaOhjxXcpKXNcfxUVZOc5qj0CkAUJYb4Q79kaYNBCubBdUIycUVrEWVlYLxmoPsdkDlFjBszrwTNcu0fUIKAPGag8R5wBKrLCyWlCR+c73dbRbSlHGqZBTU4AcUyHKLLU+VO6cBE/oDBhr0MDN6g1t7BxEPjwDV/NvwGg0YvH0TZDvWIAfNPuhZAk8OYq/ODyIBO8J0Ov1cHCw3TOsuLgYly5dqgFg+7x7XcRr32cE5pRV2zd3/kqp1sFivdWLy8TxzL/2XA757mxRk+UiInycDCv/mlDUUr8mk4mJioqKMZlMpKKiQvzzzz/nAIC9vT3/008/XXVzc+NLS0vZQYMGRU2ZMkW9c+dOZx8fH8uRI0euAoBKpRKZTCYyd+7coJ9++umqn58ft2nTJtcFCxb4f/fdd/nN9VtTU8MMGTJEt3bt2uKZM2cGrF271vP9998vffHFFwNfffVVRXJysi43N1eSnJwcfv369cstvYfOQhC7ToZSWhgaGnr1119/7ffQQw/ZpM3i4mLk5eVh0KBBEIvFGB8x/rZrTCYTUlNTERgYiEVPrYOVp0g98QsyUz+EgsnGcXsLfrEqAACerCvC7YIQLg1CgMQLDOlEg7/OkYUXGUB4CRirA8RmV/AiI3hWD0rM967wUYCxysBYHUAoC15kgEVS0aH0Xq2Bo1YUmEqRYyxAjqkAWqseBEAA74kJGidM0+Ui1GJBtsswOD08B4H9k2HleZw7dw4ymawhjm7u3z7A3EZtq9VqnDlzBgMHDrSJ4FFK8d5773FqtXrJvVygtbHQ3el4a7l5GTMlJcVh+vTpoTk5OZd5nifz5s0LOHXqlCPDMCgvL5fcuHGD7d+/f83ixYsDZ82a5T9+/HjNmDFjdKmpqXa5ubmyBx98MAKorSPo6enZ4nKQWCymkydP1gBAYmKiPiUlxRkAjh8/7pybmyurv06n04mqqqoYV1fXLnc6EsSuC8jPz1+0bt26vQMHDhTL5fIOtdVY6JpDKpViyJAhSE9Ph16vR3R0NAYPG4vBw8biRmEe7tu/Fo5FO3HRnsOv9jxOWdQ4ocuAjEjR2y4A4dIg9LYLhIyx/V4jAIAAVGSGVWSGlQIML4PI4gzCs+BFNeBFNaDMPSB8lICx2oHhZSBWaW3ZHbEGlOncpeQa3ohcYxFyjAW4broBE7VAQsSIFPdGiEaExyouYQBNgxZOKAx9CsYxcxHj3QtAbS7K1NRU+Pn5ITQ0tMV+XFxc0K9fP5sJXk5ODvbu3WvQ6XRfdqihbuZOFtjAf6fEl1ebJI2PezlJzT/MGWaTPbbRo0frq6qq2NLSUnbHjh1ylUrFXrx4MVMqlVJ/f//4mpoapk+fPqb09PQrO3bskC9evNg/JSVF+8QTT6jDwsJqzp8/n9XavliWpfXxlizLguM4AtROXs6ePZvp6OjY7RMXYc+ua0g5ffq08ujRozCZ2p9lpLVCV49IJEJSUlL9Fw4cV+u2HhAUivuf/wDRCzIR1fsf+EeFA44VFGKpQoN4gxR5NcXYpT6MD8q+xBcVe3FClwGlpQqdNtEmAC+qASetgMVOAcpYIOKcIDb6gjV5gOEcAHqXfFUpQHgWIosTxEYviE3eILwUVpEeFrtSWCXqThO6Sk6LU7qL2FKxFx+UbcUP6iMosShxn2M/TBKNxxtF4diQdQxLlfvgI5Hi+tAVcHozB3HTPoRDndBptVqcOHECvXv3vqPQ1XOz4On1rS8r1Jjy8nLs3LkTFovlO0qpbasg9zDmjgovlrLMLdaNlGX4uaPCi23Vx7lz5+x4noe3tzen0WhEHh4eFqlUSvfs2eNUUlIiAYD8/Hyxk5MTP3v27Mp58+Ypzp8/b9+nTx9jZWUlm5KS4gAAJpOJnD17tl1el8OGDdOuWLHCq/71iRMnZC1d35kIll0XQCnlXV1d12VkZPzLxcVFPGTIEIhEbXPQaKvQ1UMIQWxsLIqKinD8+HEkJSU1zL7t7GQYOH4mMH4mrp77HX6/rcOG0hSIiBXf28XgmFcQrtFKHNSewUGcgavIGeF2gQiXBiFI6guWdIKTCaG1y5ysoVY4qBiMVVaboxEElFjAMyZQkQmUWLrf8qMEhJeC4SUgvBSEZ0EZDryoBhaJqlOXKCmlKLaUI8dYiBxjAZRcbSnFQIk3xruOQDgbBS5fjd5XD2AY3QGeMLju9SD4UXMRGHn/bWWeSktLkZ2djf79+8PZuW37uB218LRaLa5cuYJdu3apFArF+226+S6k3uvS1t6Y9Xt2QO33Y8OGDfksy2LGjBmVY8eODYuLi4uOjY01hIaGGgEgLS1N9sYbbwQwDAOWZen69esL7Ozs6LZt267NnTs3qLq6WmS1WsmsWbMUSUlJbc5N9+mnnxbNmDEjKCIiIsZqtZJBgwZVDx06tLAj77G9COnCughCiFtoaGjWwYMHPSsqKtpU4LK9QteYqqoqnD9/HrGxsfDy8mryGq2yGLn71iE47xt40CoUUG8ccRuOokB35Fiv4VLNNVgoBwkRI1Tqjwi7IIRJA+EoanYv3nbQ2pRZhJeA4aUgvBggFJRYQBkOlHCgjAWUcK0Ob2hVujAKAAwILwahLAjPglBxbdUHQsEzZlDGBJ4xA4TrVAG28BzyzMXIMRYg11gIHV8DBgTRsl5IdIhGf/toqNUyGHKP4j79AfQipdAwLqiInILg5DlgXfxvf3uUIjs7G1VVVUhMTIREctvqWqtRq9U4d+5cmwTPaDTi1KlTcHZ2xiOPPJJeUlKS2O4BdCMZGRn5CQkJnZo1SeDOZGRkeCQkJIQ0Pi6IXRfi5+e36+uvv57g5eUFSiliY2PveI+thK4ek8mE9PR0uLi4IDIystm8hrzFhJwjX4M9uwlhpsvQUymOSYdDEzwSRg8jzhkyka7PRKW1tpaen9izwcnFR+zeaYmBb4OSP0SoToAIZeuWPWmdGFoB8KCEr8vb+cd3nuGcwbP19QAZgDIglAFQ9z8lAAhArHWCamkkqp3/FnVWA66aipBtLECeqRgWykFGpOjrEIlEhxj0tY8AQ+2Rcb0Y7kUH8JD1KByJETccYiEZMhNegycBbNN7r0ajEenp6XB1dUVUVJRNfm9tETyO43DixAnExMTgrbfe0mzevHm6xWLZ1eFBdAOC2PUMBLHrARBCkpKTk/ft27fPo15wevfu3ez1tha6eiilyMnJQUVFBfr37w+ZrOVldGX2KZSnrEG4cj8k4HAa8cjzfhiB4X2hYRRI12chTZ+Ja6YiUABOjAPC7AIRbheEUIkfJIztK1e3CgrUecLcKmA3KZTIIq9NqgzgZkGkuEkYu3iplFKKCk5d5z1ZiGKzAhSAOytHkkMMkhxiEC0LBUtY5Gt4FOacQ5/KA7iPuQgLWBT7/x98HpoLu5ABLfajVCpx6dKlFi399tIaweN5HqdPn0ZgYCDc3NzQq1evMoVCEUgp7fqcaDZAELueQXNiJ+zZdSGU0rO+vr6VpaWlHvX7GyzLIjg4+LZrO0vogNp9vMjISLi7u+PUqVOIiIiAv//ty1v1eEYOhmfkYJg15cja/zHCsr7EIMV/UFTmiROOD6NP+AhMCHgQWqsO5w3ZSNdnIcOQg3OGLLAQIUTqVyt+0iC4sLavZN38GwVqxYprsOUaT+1EnBN4tv1OFbaCpzyKzIpagTMWNFjMoVJ//NVtNJIcYhAk8QUhBBYeSCvSgeYdwUPGX/EXRgm1xAOlCQvgM/JFhDi2LFxWqxVZWVnQaDQYPHjwHSc77eFOe3iUUqSlpcHb2xsBAQHYvHmzxWKx/PduFTqBno9g2XUx9vb2/+/VV19d89577zlwHIfTp08jNDQUfn5+Ddd0ptA1xmKx4MKFCwCAPn36tK4/qwUlp7+H5fh6BOsvwEClOCgahsqgZMSFBsCOBTjKIbMmH+n6TKQbsqCw1GZ98mLdEGYXiAhpEPw7O6avFXRniZ/69Fw5xgJcNRWhhjeBhQixst5IdIxBokM03Nk/QlWUNcD53EIEle3HWByHjJhRIu8P5wdegmPCBEB057mrVqvFuXPnEBAQgF69enX6cnNTFh6lFBkZGZDJZIiMjASlFNHR0crs7Ow+lNK7o95SEwiWXc9AWMbsIRBCZH5+fvn5+fleYrEYFosFJ0+eRFRUFLy8vLpU6G7mxo0byM3NRXR0NHx8fFp9n6EgHSUH1iCoeC8ksOAUjcVFt2QER/aHv9MfQlZiVuJc3XJntjEfVvCwZ+zQWxqAcLsg9JYGwK6zYvpaoKvFTmvV11lvhcg3FcMKHg6MDP0dopDkEIM+9hG3xDbyFLig5FCem4ahuv0YxGTBRKRQ9ZoAn9Evg/GNb1W/PM8jJycH5eXl6Nu3b5u9LTvCzYJnb2+Py5cvg1KKuLg4EEJw5swZPPbYY78WFxc/3GWD6gQEsesZCGLXg/D29t64fv365ydOnMgAtU4jp0+fhoeHByorK7tc6OoxmUy4ePEiACA+Ph5tSV5N9RW4cfATOFz4H9y4chTxnjhoNxpMr5Ho6++Im3MI6601uGDIRbohE+f02dDxBjAgCJT41Dq52AXBXSTvEieXzhY7SikUXGXD8mRpXXoub7F73f5bNCLsgiFqFMZRbQZO5GvgUHgYj/Ip8CWVUEt8gYHPw2XodMC+9SkUq6qqcOHCBfj5+aF3796dWmy1OdRqNdLT0+Hm5gZCCPr06dPw+504caJq586dj1FKj3b5wGyIIHY9A0HsehCEkN5JSUknU1NTG3Lg5efn4/Lly+jXr98tS5rdQWlpKbKyshAaGorg4OC2iY6Vg+b8buh+/xj+mnTUUAn2kftQ7JuMvmFBcGsUmspTHrnGIqTXeXcWmWtTmLmJnBFWJ3zBEp/bxMBWdIbYWevTc5lqLTiNVQcCIEwahCTHWgcTP7Fnk59rrhq4nHsNsZX7MZacgpRwKPccCteRcyCOGgMwrf8czGYzMjMzodPpkJCQAEdHRxu+y7ZBKUV6ejoUCgWGDx/eMBaVSoW4uLj8srKyXnd7erCeIHaEkMTx48dX7t69Ow+o3abw8vJK6Nu3r/7gwYNX3d3dE3Jyci55enpaCwoKxCEhIX1++eWX7OTkZB0AuLq6JmRmZl7y8fFpCBBds2aN+9mzZx22bNnSEB83cODAyFWrVhUNHz68xwX/Cw4qPQhK6TV/f//8rKwsz6ioKBQXF+PGjRsYMWIE0tLSIBKJ4O3t3W3j8/X1haenJ3JycnDs2DHExsbCza2VloSIhTzxr5An/hVcyQWofl2DR/J+gKT0ME4VxyDF+WH4hPugyOAAACAASURBVCUi1kMEQgCGMIiUBSNSFown3cegwqJGuiGrbq8vE2f0lyAlYoRKAxpi+hxE3ZaEoVlqeBOu1qXnuma6ARM1Q0JY9LGPQKJDNPrZRzXrnGOyAiduWKDPO42HTQcwgbkKEyuDPnoqpCNegpdnRJvGQilFYWEhrl+/jvDw8FusqO6AUorLly+DZVkMGTIEqampDXt4mzZtqtHr9avvdqFrF6mfueG3Ff7QlUvg6GXGAwuLMeC5DgWVy2QyPjs7W6bT6YijoyPdtWuXs7e3twUAGIZBQkKC/tChQ46TJk3SHD582CE6Otpw9OhRh+TkZF1GRobU1dWVu1no7iUEsesmysrK3l29evWXb7/9tvzmPbpBgwbhzJkz4DiuRQ/JzoZlWcTExKC6uhqXLl2CRCJBdHQ07O1bHzzO+vVBwLTNgOF9VB7bjOizmzFY9yFunPPAXtFomIJHYmiwE+xvWrH1ELvgYflgPCwfDCNvxuWaq0jX14pfljEPBICf2Ks2k4tdMLxZt257kFdx2trsJaYCFJrKwIOHXOSI+5wSkOgQjThZGKRM8wHapXrg2PUq+JSkYBI5BE+igcYxGDVDl0GWNBVSu7bvqymVSmRmZsLd3R3Dhg3rluXwm6l3RhGJRA2iW++lmZSUhPXr1+uqq6s/79ZBdgepn7lh/xvB4Ey1a8o6hQT736h1y+6g4I0aNUrz3XffuUyfPr3qm2++cZs4cWLliRMnHAFg8ODBuuPHjztMmjRJc/z4ccc5c+Yodu3a5QpAceTIEcekpCRdW/vbuXOn85IlS/zMZjMJDg42bdu2LV8ul/MLFizw/eWXX1xMJhOTlJSk++qrrwrOnz9vN23atNCLFy9mAkB2drZk3LhxYStXrixat26d16+//noNAHbt2uW8YcMGzwMHDlzryGdxM4LYdRM8z/+8Z88e04MPPojHH3+84aEklUoxePDgBsFrKiyhK3FycsKQIUNQXl6O1NRUeHh4IDw8vG1ZNuzd4Pbw68CoV2G68hPER9ZhpmobjNd3YO+1+5DtkYy+4cEIafRst2MkSHSIQaJDDCilyDeXNAjfkeo0HKlOg/MtMX3+EDOd95WmlKLEomxwMCnnap9JAWIvjHMdjiSHGPSWBrToYWqlwNkyimvXszGk+gAWM6kQMTzU/iNBR86BvNdIoB17avXptliWRWJiok1L7rQXnueRlpYGZ2dnRERENExKXFxc0LdvX7z33nuwWq0HKaXV3TxU27P7pUCUX2l+Zlh20QG85dZZGmdisG9hCM5tbbLED7xiDJjwcYsJpgHg6aefrnznnXd8J02apM7MzLR/7rnnVPViN2zYMP17773nCwDp6ekOq1atKlm/fr03AJw8edJx6NChTYrdnj17XKOiohrWwQsLC6UAUFpayi5dutT3999/z3F2duYXL17s8+6773qvWrWq9LXXXitftWpVKQBMmDAhdNu2bfIpU6ZoLBYLuXLliiQmJsa8ZcsWtwkTJlSNGzeuet68eUElJSWsn58f99///tf92WeftemSsCB23QSl1CqRSJ545ZVXPvroo4/833jjDff/+7//IyKRCGKxGIMHD8bZs2dhNpsRFhbWrctQAODl5QVPT08UFhbi+PHj8PX1Re/evdtmOYhYSOPHwzt+PKC4At3hdXg0+3tIKo/g9Mko/Gj3MFx6D8AQPxHEjZ73hBCESv0RKvXHRLdRUHPVdTF9mXXOLn/E9NVncpGzHd+jslAO+aYSZDek56p1pomyC0WyyxAkOsTAR+x+x3bUJuBQvhmk8AQe4/fj/zEFMEqcYO77AhzuexFubq1LutyY6upqZGdnw2w2IyoqqvXLzZ0Mx3FITU2Fl5fXLYkTNBoNPv/8c9OaNWu0ZrP5ZElJyfxuHGb30Vjo7nS8DQwaNKjmxo0b0k2bNrmNHj1ac/O5Bx54QD9lyhR7rVbLcBxH5HI5HxQUZLp06ZL07NmzjgsXLlQ01ea4ceOqGu/ZAcCRI0ccrl27Zjdw4MAoALBYLCQxMVEHAPv27XP64IMPfIxGI6NWq9mYmJgaAJoJEyZUbt261W3p0qVlu3btcv3222+vMwyDJ554QrVp0ya3l156SZWenu64c+fOvI5+FjcjiF03YjabfwPQlxAS/cILLyxkWfb/XnjhBYcXX3zR3svLCwMGDEBGRgYuXryI+Pj4bhc8QgiCg4MRGBiIwsJCHDt2rKEMTJvzKXrHwGPyeqDm3zCc/gIxpz7BIOMalFxxw44ro1Hl/yDuD3WGVzNzYxfWCSOckzDCOQkWyiGrJq8uk8sV7NMcxz4chzfrhjC7IETYBcFP7HmLxXXRcBWHq1OhseogFzlipNMAxNuHAaj1Fq1Nz5WP63XpueyIFH0dIpDoEIN+9pGtygVKKZBZBZy6pkRERQrmiA7DlehQ7RIO7v7VsEuYBEjaZ4FptVrk5ubCaDQiMjISHh4e7WqnMzAajThz5gxCQ0MRGBgIAMjIyMDKlSurUlJS9CaT6WO1Wv0JpbSqm4faedzJAlsVEQ+d4vY/GkdvM1443OESP2PGjFG/8847gQcOHMguLy9veM47OTnxQUFBprVr13rEx8cbAGDgwIH63bt3y1UqFZuQkNCmZM+UUgwbNky7Z8+eW4TJYDCQ+fPnB58+ffpKWFiY5dVXX/UzGo0MADz99NNVf/vb33pNnjy5ihCC+Ph4EwDMmjVL9Ze//CXMzs6Ojhs3rsrWS/CC2PUAKKWZAJ4lhDisWLHimfXr1y8YOHCgfOHChe6DBw9Gbm4uzpw5g8TERLBs9//KGIZBSEgIAgMDUVRUhBMnTsDd3R1hYWFtz8Yhc4X9iHnA8JfBZ/8C2ZF1eFmxHabiXdhTOAT7XZIR2zsUfT0BphmtFxMW8fbhiLcPxzMej6DEomxY7jypy8Bx3XnYM3YIkwYizC4QJqsFB6pPwlKXrENj1WGv+nfk1BSgmupxoy49l5vIGSOdk5DoEIMYWS+ISes++xoOOHKDojTvMpJN+/E+kw7CEhh6jQGGvwSn4PtuqzjQWlQqFa5evQqe5xEWFgYPD49unwTdjFarRXp6OuLi4uDk5IStW7da33///UqVSpVdUlKyBMBBSmmXF+7scTywsPiWPTsAYKU8HlhokxI/s2bNqpDL5daBAwfW7N279xbPqIEDB+o2btzotWjRohIAGDZsmG769Omh/fr107c1LGXEiBH6+fPnB126dEkaFxdnqq6uZvLy8sR+fn4cAPj4+HAajYbZs2eP67hx46oAIDY21sQwDN5++22/xx57rGF/MiQkxOLt7W35z3/+47tv376cDn8Ijej+J6dAA5RSPYANhJCNP/744+CzZ8/+w97efsCrr74qHzlypOTkyZMYMGAA7OzaVVrK5ohEIoSEhCA4OBilpaU4e/YsZDIZQkNDG+KpWg0jAhP9F7hG/wUoz4Ll6Ho8enk7/qr7HannIrBdlAxZyAA8GMTCqQUjkhACf4kX/CW1+2g6q6F2mVOfiXOGbFyoyW3yPg5WXDFdR4jEDxPdRiPRIRohEr82vYfCaiAlzwh5yVE8SQ4gnCmG0c4F/IB5EA+aAUd5QOs/j5uwWq0oKSlBfn5+Q9YRFxeXdrXVmSiVSly+fBmenp5YtmxZ9ddff22wWq3fKJXKDyild9xr+lNR74RiY2/Menr37m156623yps6N2zYMN3nn3/u9cADD+gB4L777jMoFArJ1KlT27xH5ufnx33yySf5kydP7mU2mwkAvPPOO8V9+vTRPPXUU8qYmJjYgIAAc0JCwi05+R5//PHKd999N2DFihW3iPvkyZNVH3/8MZuYmNjmckJ3Qoiz6+EQQjzd3NxeEovFzycnJzuPHDnScfz48XB1de3uod0GpRRVVVXIy8uDXq9HUFAQ/P392+8RWKMGl/4lTMc3wsFwA2XUFd9YR6PI+0EM7yVHeBuf91ZqxVVjEd4p3tjsNdvClrepTY4HTpUB6XmlGKT9FX8T/QYnUgO9exzsh80GiZsIiNs3OdHr9SgsLERZWRl8fHwQEhLSKXksOwqlFNeuXcPu3bvx448/qq5evVpaWVm51GQy7aCUmrt7fF1FT4izu9t55plngvr162d45ZVX2v05CkHl7YAQQgF8QCmdX/d6AQBHSuk/m7h2DIAlAJwBGAFkA3iNUtpsoUJCyD8B6Cilq1oxFhHDMGN8fHz+6eXlFfvCCy9IZ8yYwXS3a3lzGI1GFBUVobi4GM7OzggKCoK7eztL//A8cPVX6H5fB8cbv8NMWezhh+CQLBnhvXphuB8gbUPM+Zz85ajg1Lcd92BdsC5kUavaqKgBDhTw0BZlYKL1AEaIMmAlLLioRyEdOhsISGrXUiXHcSgtLUVhYSEIIQgKCoKvr2+bi/12FeXl5Vi6dCm3a9euGovFsqe0tHQZpfRSa+8nhLgDOFj30geAFYCy7nUCgAwAYgAcgC8AfEgp5QkhIwD8AODmvaIFlNKUjr2j9iOIXceIjY2Nlslk/NGjR3NkMlm7hUkQu3ZACDECKAUwgFJa0ZzYEULiAOwC8Gjd/hsIIY8CUFNKf2+h/X+ilWLX6L5egYGB/+B5/vGpU6eyL7/8skN3xuS1BKUUlZWVKCwshFqthpeXF/z9/SGXtzMdmDIH5pMbQTK+gdhqQDofhm0YA95/IJJDWfi1wt/jmPYcPlXuhJlaGo5JiBgveD6OYc79WngvwAUVcPi6HkGq3zGVOYBQRgGTnSfEg2aASZoOOLU9GYDVakV5eTmKi4uh0+ng4+ODoKCgNsU0diWUUqSmpmL58uVVZ86csej1+uVqtXpzR0MIGv89EEJ0lFLHup+9AHwN4Dil9J06sVtAKX2kY+/Gdghi1zMQxK4dEEJ0AP6NWoFb3ILYfQngEKW0yeBYQsjzAF4AIAFwFcDTlFLDzX/chJC5AGaidgZ7hVI6uRXjs3Nycprq6Oj4elxcnOuiRYs8Ro4c2aMcFm7m5od6dXU1PDw84OvrCzc3t7bnazRqQc9/BePxjZBV56OcumArNxqXXR7E0F4uGOANiFr4GI5pz2Fb5X5UcGp4sC6Y7JbcrNDpLMChIuBK/g0km/bjcfYY7GGC0XcA7IbOBKIfBdi2eaNaLBYoFAqUlZWhurq645OALsBgMODrr7/mVq1aVWUwGC4VFRW9A+CYrbKftCR2da97AUgF4AHgAQhiJ9AEgti1gzqx8wNwAbVLKs+jabFLBzCdUprRTDvulFJV3c/vAVBQStc2ErsSAKGUUhMhxIVSevs6W8tjTfT19X1TKpUOnzt3rtP06dOlPdGJoR6r1YqKigqUlZWhsrISjo6O8PT0hJeXV9ssGp4Hrh2E6fh6SPMPwQIR9loH4wdRMoJCwvBwEODaQj7rIjWHQJem/bSuaYB9eVaIStMxhezHUNEVWBkJaNxfwQ5+EfDr2+phUkqhVquhVCqhVCphtVrh5eUFX19fODs791iBA4CcnBysXr1as2vXLgPHcZ+rVKq1nVGK505iV3esCkAUgGjcvow5kVJqs4wbbUUQu56BkBuznVBKtYSQLQDmAqi50/U37UHYA/i07g83rk7kXAA4AtjfxK0XAHxFCNkNYHc7xpkGYCIhxPVf//rXCytWrHhp1KhRjq+99ppr376tfyh3FfX5P729vUEpRXV1NZRKJS5cuICamhrI5XK4ubnBzc0NTk5OzYsBwwDhD0Ea/hBQcRWiM59iXPpWPMYdx/nrvfFlbjLU3oOQHCJGjNudt9HMVuBYKXAsT4v+1UfwDzYF/mwFzA5+wJB/QtTvGcDhzkHkVqsVarUalZWVqKyshMFggFwuh6enJxITE3uMR21zcByHPXv28MuXL68sKioqVCqV73Ict7cHFFe9+Td4tCdZdgI9G8Gya4H6mSUhxA1AOoDPUfuZ/bPRdbctY9685EkIyQMwgVKaQQh5FsAISumzjSw7EYDhAB4F8H8AYjvyYCGEMAAe9PPze9vV1TX69ddfd33iiSdEPf0hC9SmmdJqtVCpVKisrIROp4NEIoFcLodcLoezszMcHR2bd9owVQPnv4H55EZI1NdQQeX4yjoKv8lGYUiIK0YEAKfLgC+yAGUNhaeMYHwooDYDRYX5mMjvx3j2BKSwgAu6H+yQF4GIsc0WRzWbzdDpdNBoNFCr1dBqa6uMu7i4NAi2vb19j7be6ikrK8OGDRsMn332mZ7juB8VCsX7lFKbxzw1hbCMKWALBMuuA1BKKwkh2wE8B+C/TVzyPoBdhJBT9Q4qqLXs6nECUEoIEQN4CsAtsSV1whRIKT1MCDkGYApqLcA2LWU2GjMPIAVACiEkcMGCBfMWLlz41KRJk+z//ve/O4WGti89VVfAMAxcXFzg4uLSkGrKZDJBo9FAo9GgvLwcer0eVqsVMpkM9vb2Df9kMhns7OwgSXoOkgEzgOuH4XpyA+Ze24WXLD/gp6xBeP/yw/An5dgl2g4/aQVKre74Nac/xjAFSGJyYBXLwPR9Ghj0AkSeUbBwHEw1RhiNRtTU1MBgMMBgMECv18NisUAikcDR0RFyuRwhISFwdnbusd6TTUEpxdGjR7F8+XLVuXPnqrRa7UqDwbCVUtpjyrcQQjwBbASwjlJK74aJQ3cgEokSw8PDG1agHn/88cqlS5fabMm5qXI/zR3vaWWABLFrPf8BMKepE5TSi4SQvwPYQghxAqACUAjgnbpL3gJwGkABgIuoFb+bEQHYSgiRo3aZZnVb9+xaoi6gdz4h5I3169c/tn379sW9e/f2feONN9zHjBlDuqOYZ1uRSqXw8vKCl5dXwzFKKYxGY4P4VFdXo7y8HCaTCSaTCTzPAxABgXPg6P0E/Ip/xtgb+zHeegI8JWBI7aqGP1HhWeZXqOCMvMgXUeI1AhaRPXBFAUABlmUhlUohlUphb28PJycneHt7w97evu1p0noQWq0WX3zxhfnDDz/UGo3GkyUlJe8BSO1B5XZkhJDz+CP04EsAH9x0/v668/W8Ryn9visH2BG+zf7WbWPGRn9VjUriLnM3z0yYWTwpclKHgsqlUimflZV1xVZjvJcQxK4Fbl5CoZQqcKu11vjanwD81My5DQA2NHH8nze9HNbugbaSugDfbwF8SwiJfe65594Qi8UPz5o1y/H555+X9aT8iq2BEAKZTAaZTAZ39+b30SilsFqtsFjGwWKshv7DvnAl+tuuq+HF8Hv8XQSxLBiGuSuWHdvDpUuXsGrVKvUvv/yiN5lMG9Vq9YZ6B6rupPH2AKW0WfOYUnoEgLyTh9RpfJv9rdv7qe8Hm61mBgAqaiok76e+HwwAHRW8xqhUKlFiYmL0Dz/8kJuQkGAaN25c6IgRI6rnz59fsXr1ao+PPvrIx8vLy9KrVy+jRCKhW7ZsKfz666/ly5cv97VYLIyrqyv37bffXg8MDGz3tkpPKAMkiN2fFErpZQBTCSFOy5Yte/ajjz56ZejQofLXX3/dbdCgQffUg54QApZla/OKymSQkaZXVfyYSjDSFlw372LMZjN27NhhXb58eVVFRUVuXZ7KA0Keys7hreNvBV6tutrs5DirKsuB47lb/sjMVjOz/MzykN25u5ss8RPmGmZ49753W0y7ZjKZmKioqJj61/Pnzy99/vnnq1avXl04bdq00NmzZyvUajU7f/78ivz8fPGqVat809PTr7i4uPBDhw6NiI2NrQGAhx56SDd58uQshmHwwQcfeCxZssRn06ZNN1rqu6eXARLE7k9OXSDwWkLIul27dt13+vTptxwdHfvPnz9fPnXqVHFPDWzuCEaZD+xrSps+3g3j6UyKioqwdu1a3datWw1Wq/Xb8vLyDyil+d09rj87jYXuTsdbS3PLmI899ph2+/btrq+//npwWlraZQA4evSow6BBg6q9vb2tdddU5eTk2AFAXl6eZMKECQFKpVJsNpuZwMBA05367ullgASxEwAA1O3THAOQTAjxfvPNN+e8/fbbz02YMMH+lVdekUdGRnb3EG2G/dgl4H54Gaz1j1yznMgO9mOXdOOobAfP8zh48CCWLVtWkZmZWV5VVbXMZDJ9Rym94wNLwDbcyQIbuX1kfEVNxW0bvh4yD/M3j3zT4RI/jbFarcjJybGTSqV8RUUF27t3b0tLW7Nz5swJ+vvf/1721FNPafbu3eu0ZMkSv/b23VPKAPV8zwSBLodSqqioqHhLoVAEbdq06ZkHH3zw7MCBA5U7d+7kOa67w6xsQJ8nwI5fC8gDQUEAeWDt6z5PdPfIOkRVVRVWrlxp7NWrl3LatGnbDx8+PLq0tDTWaDRuFYSuZzEzYWaxRCS5ZQlZIpLwMxNm2qTET2OWLFniHRERYfziiy+uP/fccyEmk4ncf//9+tOnTzsplUqRxWLBDz/80JBdvrq6WhQUFGQBgP/97393DixtgREjRujPnj3reOnSJWld28yFCxekBoOBAW4tA1R/T2vKAD3//PNtCvMQLDuBZqmL8/sRwI+EkPDZs2e/Nnfu3PHTp093mD17toOvr293D7H99HkC6PMEfjtyBCNGjOju0XSItLQ0vP/++5W//fZbtdFoXKPRaD6jlGrufKdAd1HvhGJrb8zGe3YPPvigZubMmRVffvmlR1paWqarqyv//fffVy9atMh39erVJa+88krpgAEDor28vCwRERE1crncCgCLFy8uefLJJ3t7e3ubk5KS9PX7b+2hp5QBEoLKBdoEIUQmk8mmyOXy1/v27eu2aNEij+HDh9+1Di1H7lKxq6mpwbZt27hVq1ZVaTSaS8XFxUsA/NaDwgb+dNyNQeUajYaRy+W8xWJBcnJy2LPPPlvxzDPP2CzsqTO4UxkgIahcwCZQSmsAfAbgM0LIgAsXLvxDKpUOnTdvnvOzzz4rcXZ27u4h3tNcu3YNH374ofb77783cBy3paKi4iNKaUl3j0vg7uS1117z+/33351NJhN54IEHtFOnTu3RQldfBuiTTz5pczFgwbIT6DCEEHdXV9eZEolkVnJyssOCBQtc4uPju3tYreJusOysVit++uknumzZMlVBQUFxXZ7KHym9qUaRQLdzN1p29yKCZSfQadQFJP+bELJsy5YtD6WkpLzt4eERsXDhQte//vWvors5y0h3Ul5ejo0bNxo+/fRTvdVq/bmsrGw5pTSru8clIHA3IoidgM2oC1DeD2A/ISR43rx5ry5YsGDylClT7OfOnesYFBTU3UPs8VBKceLECaxYsUJ15swZjU6nW6XX67dQSm9P+SIgINBqhNADgU6BUlpQXl7+99LS0qB169bNHDx48JURI0ZU7N+/vy5npcDN6HQ6rF+/3hIREaF84oknft6zZ884hUIRptPpNghCJyDQcQTLTqBTqYvv+gq1tfr65OTkvCGRSEbNnj3bacaMGXZubm7dPcRu5cqVK/jPf/6j/umnnwwWi+XTysrK9ZRSZXePS0DgXkOw7AS6DErphZKSkicLCgrC/v3vf78ZExNT8Le//a0yNTW1u4fWpVgsFmzfvp3v379/xejRo8/873//m6pQKIJUKtW/BKET6AgikSgxKioqJjIyMiYmJib6119/dbBV2/7+/vGlpaV3rYF01w5c4O6FUqoFsJoQ8uH3338//MSJE285OzsnLFiwwGXKlCmsTCbr7iF2CsXFxVi3bp3+iy++0Fut1h3l5eWrKKXXu3tcAt1D5Tfb3FTr1/tzFRUS1sPD7D57drHbk5NtVuJnx44dzm+++WbAQw891Kr0YzzPg1J6V9VibAuCZSfQbdBafisuLh6dlZXVZ9GiRatCQ0PLZs+erb169Wp3D88mUEpx6NAhPPzwwxUDBgzIXrNmzZzS0tJghUIxWxC6Py+V32xzK1++PJhTKiWgFJxSKSlfvjy48pttNlvX12g0IrlcztX9zAwZMiQiJiYmOiIiImbr1q0uQG35nF69esVOnTo1KDY2NubatWuSnTt3Ovft2zcqJiYmeuzYsb00Gk2DTixZssQ7Pj4+Oj4+Pro+/VdOTo5kyJAhERERETFDhgyJyM3NlQDAxIkTQ5599tnAfv36RQUEBMR//vnnDenA3nrrLe+4uLjoiIiImFdeecUPALRaLTNixIiwyMjImPDw8NhNmza5woYIlp1Aj4BSWgrgDULIW5s2bXp09+7dbwUHBwcsWrTI/ZFHHiF322xTrVbj888/N61Zs6babDb/VlJSspRSmt7d4xLoGkreXBxoys1ttoiGMSvLARbLLWmHqMnEKJYuDdHs3NlkiR9peLjBb+m/W1Xix2QykYqKCvHPP/+cAwD29vb8Tz/9dNXNzY0vLS1lBw0aFDVlyhQ1AOTn59tt2rQpf+vWrYUtleMBAGdnZ+vFixcz161b5/7yyy8HHj58+OrMmTODpkyZonr55ZdVH374ofusWbMCU1JSrgGAQqEQnz17Nuv8+fN2jz32WNj06dOrdu7c6Xz16lW7CxcuZFJKMXr06LB9+/Y5KhQK1sfHx3LkyJGrQG0dvrZ85ndCEDuBHkVdPs6dAHYSQiJnzpy5UCQSPfL88887zJw5097b27u7h9gi58+fx8qVK6sOHTqkq6mpWafRaD61ZdV5gXuERkJ3x+Ot5OZlzJSUFIfp06eH5uTkXOZ5nsybNy/g1KlTjgzDoLy8XHLjxg0WAHx9fc2jRo3SAy2X4wGAadOmVQLA888/X/mPf/wjEADOnTvnsG/fvmsAMGvWrMp//etfAfXXP/roo2qRSITExESjSqUSA8Avv/zi/PvvvzvHxMTEAIDBYGCysrLsRo0aVb148eLAWbNm+Y8fP14zZsyYhn5tgSB2Aj0WSmk2gP9HCHFYtWrV1I0bN76WlJTksnDhQvf77ruvx+TjNBqN2L59u3XlypWVlZWVmXWFUQ8JeSr/vNzJAsu9f3g8p1Telm2B9fQ0h3633SYlfkaPHq2veQ1L7QAABm1JREFUqqpiS0tL2R07dshVKhV78eLFTKlUSv39/eNramoYoNbqq7+nuXI89TDMHztfhJA7fr/t7Owarqn/c6CUYt68eaWvvfbabdlm0tPTr+zYsUO+ePFi/5SUFG29RWkLhD07gR4PpVRfXV39SVlZWfjevXv/8uSTT/4cHh5e8fHHH1uqq6u7bVx5eXmYN29edWhoqOL1119fc+nSpf7FxcUPUEoPCkIn0BLus2cXE6n0loBTIpXy7rNn26zEz7lz5+x4noe3tzen0WhEHh4eFqlUSvfs2eNUUlLSZFqj5srx1J/fsmWLGwB89tlnrv369dMDQL9+/fSbN292BYBPPvnELSkpqUWLbOzYsdovv/zSo34vMC8vT1xcXMzm5+eLnZyc+NmzZ1fOmzdPcf78eZvWUhYsO4G7hjoBOQ3gL4QQj6VLl766dOnSmUOHDrV/+umnpbGxsZBKpQ3/xGIxWJYFy7JttgJ5ngfHceA4DmazGSaTCSaTCQaDAYcOHcKWLVsMZWVlZQqFYrHRaNwh5KkUaAv1Xpe29sa8ucQPpRQbNmzIZ1kWM2bMqBw7dmxYXFxcdGxsrCE0NLTJ8jgtlOMx1bVP+vTpE8XzPNm2bdt1ANiwYUPhtGnTQj766CMfd3d3bsuWLfktjfHxxx/XXr582W7AgAFRQK1l+dVXX+VlZWVJ33jjjQCGYcCyLF2/fn1BRz6LxgiJoAXuagghIoZhkv38/Ja4u7uHTZ8+3Xn48OGkXqwsFgtaKjir0+ng6OjYVLsNQimRSGAwGLB7927Lt99+q+N5/pfi4uJ/U0ovd+Z7E7i7EBJB9wyaSwQtiJ3APQMhJNTLy2uBSCT669NPP23/8ssvOwYEBLR4T0tVDyilOH36NFasWFF58uRJjcFg+KC6uvoLSmn3rZ0K9FgEsesZNCd2wp6dwD0DpTRPoVC8VFpaGrxmzZo5AwYMyBo1alRFSkoK2jKpMxgM+PTTTy1RUVEVEydOPLB79+7xCoWit1arXScInYDA3YmwZydwz0EpNQL4AsAXhJB+mZmZb0okkhFz5sxxmjFjhtTFxaXJ+7Kzs7F69WrNDz/8oLdYLP9VqVTrKKWKLh28gIBApyAsYwr8KSCEuDg7O8+QyWQvjxw50um1115z7d+/Pw4ePAi1Ws2vWLFCVVxcXFBWVraE5/mfKaXW7h6zwN1FRkbG9fj4+CqGYYSHajfB8zy5ePGia0JCQq/G5wSxE/hTQWrdMkf6+fm97ezsHKvX6+3MZvM3CoXifUrpvZGjTKBbyMjI+NHHxyfG09NTIwhe18PzPFEqlfKysrIrCQkJjzY+L4idwJ8WQogXgGpKaU13j0Xg7ictLc2LZdnNAOIg+EN0BzyASxzHzUhMTCxvfFIQOwEBAQGBex5h9iEgICAgcM8jiJ2AgICAwD2PIHYCAgICAvc8gtgJCAgICNzzCGInICAgIHDPI4idgICAgMA9jyB2AgICAgL3PILYCdz1EEIWE0IuE0IuEELOE0IG1R0/Qgg5e9N1SYSQI21su8VClAICAncHQiJogbsaQsgQAI8A6E8pNRFCPADcXIXZixAyllK6r3tGKCAg0BMQLDuBux1fABWUUhMAUEorKKUlN51fCeAfjW8ihIgIISsJIal1FuGLLXVCCHEkhBwkhKQTQi4SQsb///bu2DWKIAzD+PMWQkDBgIiFiFqorRgCdnKNtdaCCmLAwtZ/wCRdKsHKwsbCWhAiIunERoI2IilM61WCRUThs3CL9ZRDuHiww/Prdmd2v5nqZWbZ3X2dhaT/yrDT0L0ATiT5mORhkksT7a+Bb0lGE+dvAV+qahlYBm4nOT2lzh5wtaouACNgo/uotKQBMOw0aFX1FVgCVoAx8DTJzYluq/y5ursMXE+yDbwBjgBnppQKsJ7kHfASOA4cm3kCkubCZ3YavO7fc1vAVpL3wA3gca/9VZL7wMXeZQHuVtXmP5a5BhwFlqrqe5JPwMLso5c0D67sNGhJziXpr8jOA7t/6boG3OsdbwJ3khzo7nM2ycEppQ4Dn7ugGwEnZxy6pDlyZaehOwQ8SLII/AB2+LWl+Zuqep5k3Dv1CDgFvO2evY2BK1PqPAGeda8ybAMf9mf4kubB/9lJkprnNqYkqXmGnSSpeYadJKl5hp0kqXmGnSSpeYadJKl5hp0kqXmGnSSpeT8B/P1HDikMHlkAAAAASUVORK5CYII=\n",
"text/plain": [
"