migraf/fhir-kindling

View on GitHub
examples/demo.ipynb

Summary

Maintainability
Test Coverage
{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    },
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "![FHIR Kindling](assets/kindling_header.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    },
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "<center>Python toolkit for interacting with HL7 FHIR servers and resources</center>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    },
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "# Why this project was created\n",
    "- PHT required FHIR project warehouses\n",
    "- Data transfer between FHIR servers difficult and tedious\n",
    "- No automatic conversion to tabular format for analysis\n",
    "- Existing libraries felt slow\n",
    "- Simplify FHIR data science & engineering tasks\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    },
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "\n",
    "# Features\n",
    "\n",
    "- Create, Read, Update and Delete resources using a server's REST API\n",
    "- Resource validation powered by pydantic models\n",
    "- Transfer resources between FHIR servers\n",
    "- CSV/Dataframe serialization for resources & bundles\n",
    "- Synthetic data generation and upload\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "## In this presentation\n",
    "\n",
    "- Core feature refresher\n",
    "- Graph based probabilistic dataset generation\n",
    "- Resource transfer between servers\n",
    "- Benchmarks for servers\n",
    "- Kindling App"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    },
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Installation\n",
    "\n",
    "Install the latest published version from pypi:\n",
    "```bash\n",
    "pip install --user fhir-kindling\n",
    "```\n",
    "or install the newest version directly from github:\n",
    "```bash\n",
    "pip install --user git+https://github.com/migraf/fhir-kindling.git\n",
    "```\n",
    "\n",
    "More details can be found in the [documentation]()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    },
    "slideshow": {
     "slide_type": "skip"
    }
   },
   "outputs": [],
   "source": [
    "!pip install --upgrade fhir-kindling\n",
    "!pip install RISE"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    },
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "<center><h2>👨‍💻   How to use the library</h2></center>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    },
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Connecting to a server\n",
    "\n",
    "- Different auth methods: Basic, Bearer, OIDC\n",
    "- Configuration of proxies and custom headers"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    },
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Michael Graf\\tbi\\repos\\fhir_kindling\\fhir_kindling\\fhir_server\\transfer.py:10: TqdmExperimentalWarning: Using `tqdm.autonotebook.tqdm` in notebook mode. Use `tqdm.tqdm` instead to force console mode (e.g. in jupyter console)\n",
      "  from tqdm.autonotebook import tqdm\n"
     ]
    }
   ],
   "source": [
    "import os\n",
    "from dotenv import load_dotenv, find_dotenv\n",
    "from fhir_kindling import FhirServer\n",
    "\n",
    "_ = load_dotenv(find_dotenv())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    },
    "slideshow": {
     "slide_type": "-"
    }
   },
   "outputs": [],
   "source": [
    "\n",
    "fhir_api = \"http://localhost:9090/fhir\"\n",
    "server = FhirServer(\n",
    "    api_address=fhir_api,\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    },
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Query for resources\n",
    "\n",
    "Query the server with the `query()` method of the server class."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    },
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "Three ways to define a query:\n",
    "- Iteratively build the query on a resource using methods like `where()`, `include()`, `has()`\n",
    "- Use an existing `query_string` to define the query i.e. `Patient?_id=123\"`\n",
    "- Pass a `FhirQueryParameters` object to the query method"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    },
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Iteratively building a query\n",
    "\n",
    "Start building a query by selecting the base resource first"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    },
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'http://localhost:9090/fhir/Patient?_count=5000&_format=json'"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "query = server.query(\"Patient\")\n",
    "query.query_url"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    },
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "### Querying the server\n",
    "the query is executed against the server using one of the methods `all()`, `first()`, `limit()`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    },
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<QueryResponse(resource=Patient, n=13)>"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "response = query.all()\n",
    "response"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    },
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<QueryResponse(resource=Patient, n=5)>"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "response = query.limit(5)\n",
    "response"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    },
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "Accessing the resources in a `QueryResponse` object."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Patient(resource_type='Patient', fhir_comments=None, id='DCFPI2LRYF7Y6L2J', implicitRules=None, implicitRules__ext=None, language=None, language__ext=None, meta=Meta(resource_type='Meta', fhir_comments=None, extension=None, id=None, lastUpdated=datetime.datetime(2023, 6, 12, 11, 3, 39, 37000, tzinfo=datetime.timezone.utc), lastUpdated__ext=None, profile=None, profile__ext=None, security=None, source=None, source__ext=None, tag=None, versionId='4', versionId__ext=None), contained=None, extension=None, modifierExtension=None, text=None, active=None, active__ext=None, address=None, birthDate=datetime.date(1939, 2, 9), birthDate__ext=None, communication=None, contact=None, deceasedBoolean=None, deceasedBoolean__ext=None, deceasedDateTime=None, deceasedDateTime__ext=None, gender='female', gender__ext=None, generalPractitioner=None, identifier=None, link=None, managingOrganization=None, maritalStatus=None, multipleBirthBoolean=None, multipleBirthBoolean__ext=None, multipleBirthInteger=None, multipleBirthInteger__ext=None, name=[HumanName(resource_type='HumanName', fhir_comments=None, extension=None, id=None, family='Valdez', family__ext=None, given=['Johnathan'], given__ext=None, period=None, prefix=None, prefix__ext=None, suffix=None, suffix__ext=None, text=None, text__ext=None, use=None, use__ext=None)], photo=None, telecom=None)"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "response.resources[0]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    },
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "### Adding filter conditions\n",
    "\n",
    "Filter parameters are added on the fields of the base resource using the `where()` method."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'http://localhost:9090/fhir/Patient?birthdate=lt1990-01-01&_count=5000&_format=json'"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "query_2 = server.query(\"Patient\").where(\"birthdate\", \"lt\", \"1990-01-01\")\n",
    "query_2.query_url"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<QueryResponse(resource=Patient, n=12)>"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "query_2.all()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    },
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "### Including related resources"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'http://localhost:9090/fhir/Patient?birthdate=lt1990-01-01&_revinclude=Condition:subject&_count=5000&_format=json'"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "query_3 = query_2.include(resource=\"Condition\", reference_param=\"subject\", reverse=True)\n",
    "query_3.query_url"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<QueryResponse(resource=Patient, n=12)>"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "resp = query_3.all()\n",
    "resp"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    },
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Working with the response\n",
    "\n",
    "The response to the query is a `QueryResponse` object.\n",
    "\n",
    "- The `resources` attribute contains a list of resources of the base resource type returned by the query\n",
    "- The `included_resources` attribute contains a list of included resources. Each entry in the list represents a list of resources of a certain type\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['Condition']"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    " [resource.resource_type for resource in resp.included_resources]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Condition(resource_type='Condition', fhir_comments=None, id='DCFPIXWM7Q6NWZ2A', implicitRules=None, implicitRules__ext=None, language=None, language__ext=None, meta=Meta(resource_type='Meta', fhir_comments=None, extension=None, id=None, lastUpdated=datetime.datetime(2023, 6, 12, 11, 2, 55, 513000, tzinfo=datetime.timezone.utc), lastUpdated__ext=None, profile=None, profile__ext=None, security=None, source=None, source__ext=None, tag=None, versionId='2', versionId__ext=None), contained=None, extension=None, modifierExtension=None, text=None, abatementAge=None, abatementDateTime=None, abatementDateTime__ext=None, abatementPeriod=None, abatementRange=None, abatementString=None, abatementString__ext=None, asserter=None, bodySite=None, category=None, clinicalStatus=None, code=CodeableConcept(resource_type='CodeableConcept', fhir_comments=None, extension=None, id=None, coding=[Coding(resource_type='Coding', fhir_comments=None, extension=None, id=None, code='RA01.0', code__ext=None, display='COVID-19, virus identified', display__ext=None, system='http://id.who.int/icd/release/11/mms', system__ext=None, userSelected=None, userSelected__ext=None, version=None, version__ext=None)], text='COVID-19', text__ext=None), encounter=None, evidence=None, identifier=None, note=None, onsetAge=None, onsetDateTime=None, onsetDateTime__ext=None, onsetPeriod=None, onsetRange=None, onsetString=None, onsetString__ext=None, recordedDate=None, recordedDate__ext=None, recorder=None, severity=None, stage=None, subject=Reference(resource_type='Reference', fhir_comments=None, extension=None, id=None, display=None, display__ext=None, identifier=None, reference='Patient/DCFPIXVY34SQMPSQ', reference__ext=None, type=None, type__ext=None), verificationStatus=None)"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "resp.included_resources[0].resources[0]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    },
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Saving the response\n",
    "\n",
    "Responses can be saved to a file using the `save()` method of the `QueryResponse` class.\n",
    "Supported formats are `json`, `xml` (if the query was executed with `xml` format) and `csv`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "path = os.path.join(os.getcwd(), \"query_response.json\")\n",
    "\n",
    "resp.save(file_path=path)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{\n",
      "  \"id\": \"DCFQACHFUYO32KDI\",\n",
      "  \"type\": \"searchset\",\n",
      "  \"entry\": [\n",
      "    {\n",
      "      \"fullUrl\": \"http://localhost:9090/fhir/Patient/DCFPIXVY34SQMPST\",\n",
      "      \"resource\": {\n",
      "        \"meta\": {\n",
      "\n"
     ]
    }
   ],
   "source": [
    "with open(path, \"r\") as f:\n",
    "    print(\"\".join(f.readlines()[:8]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    },
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Serializing resources into a pandas dataframe\n",
    "\n",
    "A response (or any bundle) can be serialized into pandas dataframes.\n",
    "If the response contains resources of different types, the resources are serialized into separate dataframes for each type."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    },
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>resourceType</th>\n",
       "      <th>id</th>\n",
       "      <th>meta_versionId</th>\n",
       "      <th>meta_lastUpdated</th>\n",
       "      <th>name_0_family</th>\n",
       "      <th>name_0_given_0</th>\n",
       "      <th>gender</th>\n",
       "      <th>birthDate</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Patient</td>\n",
       "      <td>DCFPIXVY34SQMPST</td>\n",
       "      <td>1</td>\n",
       "      <td>2023-06-12 11:02:55.144000+00:00</td>\n",
       "      <td>Jones</td>\n",
       "      <td>Brianna</td>\n",
       "      <td>male</td>\n",
       "      <td>1987-06-13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Patient</td>\n",
       "      <td>DCFPIXVY34SQMPSM</td>\n",
       "      <td>1</td>\n",
       "      <td>2023-06-12 11:02:55.144000+00:00</td>\n",
       "      <td>Martinez</td>\n",
       "      <td>Tracey</td>\n",
       "      <td>female</td>\n",
       "      <td>1984-01-28</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Patient</td>\n",
       "      <td>DCFPI2LVEWAH3V23</td>\n",
       "      <td>6</td>\n",
       "      <td>2023-06-12 11:03:39.091000+00:00</td>\n",
       "      <td>Bennett</td>\n",
       "      <td>Lauren</td>\n",
       "      <td>female</td>\n",
       "      <td>1966-07-03</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Patient</td>\n",
       "      <td>DCFPIXVY34SQMPSO</td>\n",
       "      <td>1</td>\n",
       "      <td>2023-06-12 11:02:55.144000+00:00</td>\n",
       "      <td>Cordova</td>\n",
       "      <td>William</td>\n",
       "      <td>male</td>\n",
       "      <td>1959-07-09</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Patient</td>\n",
       "      <td>DCFPIXVY34SQMPSS</td>\n",
       "      <td>1</td>\n",
       "      <td>2023-06-12 11:02:55.144000+00:00</td>\n",
       "      <td>Williams</td>\n",
       "      <td>David</td>\n",
       "      <td>male</td>\n",
       "      <td>1956-12-02</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  resourceType                id meta_versionId  \\\n",
       "0      Patient  DCFPIXVY34SQMPST              1   \n",
       "1      Patient  DCFPIXVY34SQMPSM              1   \n",
       "2      Patient  DCFPI2LVEWAH3V23              6   \n",
       "3      Patient  DCFPIXVY34SQMPSO              1   \n",
       "4      Patient  DCFPIXVY34SQMPSS              1   \n",
       "\n",
       "                  meta_lastUpdated name_0_family name_0_given_0  gender  \\\n",
       "0 2023-06-12 11:02:55.144000+00:00         Jones        Brianna    male   \n",
       "1 2023-06-12 11:02:55.144000+00:00      Martinez         Tracey  female   \n",
       "2 2023-06-12 11:03:39.091000+00:00       Bennett         Lauren  female   \n",
       "3 2023-06-12 11:02:55.144000+00:00       Cordova        William    male   \n",
       "4 2023-06-12 11:02:55.144000+00:00      Williams          David    male   \n",
       "\n",
       "    birthDate  \n",
       "0  1987-06-13  \n",
       "1  1984-01-28  \n",
       "2  1966-07-03  \n",
       "3  1959-07-09  \n",
       "4  1956-12-02  "
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from fhir_kindling.serde.flatten import flatten_response\n",
    "\n",
    "dfs = flatten_response(resp)\n",
    "\n",
    "dfs[0].head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    },
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>resourceType</th>\n",
       "      <th>id</th>\n",
       "      <th>meta_versionId</th>\n",
       "      <th>meta_lastUpdated</th>\n",
       "      <th>code_coding_0_system</th>\n",
       "      <th>code_coding_0_code</th>\n",
       "      <th>code_coding_0_display</th>\n",
       "      <th>code_text</th>\n",
       "      <th>subject_reference</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Condition</td>\n",
       "      <td>DCFPIXWM7Q6NWZ2A</td>\n",
       "      <td>2</td>\n",
       "      <td>2023-06-12 11:02:55.513000+00:00</td>\n",
       "      <td>http://id.who.int/icd/release/11/mms</td>\n",
       "      <td>RA01.0</td>\n",
       "      <td>COVID-19, virus identified</td>\n",
       "      <td>COVID-19</td>\n",
       "      <td>Patient/DCFPIXVY34SQMPSQ</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Condition</td>\n",
       "      <td>DCFPIXWM7Q6NWZXE</td>\n",
       "      <td>2</td>\n",
       "      <td>2023-06-12 11:02:55.513000+00:00</td>\n",
       "      <td>http://id.who.int/icd/release/11/mms</td>\n",
       "      <td>RA01.0</td>\n",
       "      <td>COVID-19, virus identified</td>\n",
       "      <td>COVID-19</td>\n",
       "      <td>Patient/DCFPIXVY34SQMPSK</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Condition</td>\n",
       "      <td>DCFPIXWM7Q6NWZYE</td>\n",
       "      <td>2</td>\n",
       "      <td>2023-06-12 11:02:55.513000+00:00</td>\n",
       "      <td>http://id.who.int/icd/release/11/mms</td>\n",
       "      <td>RA01.0</td>\n",
       "      <td>COVID-19, virus identified</td>\n",
       "      <td>COVID-19</td>\n",
       "      <td>Patient/DCFPIXVY34SQMPSM</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Condition</td>\n",
       "      <td>DCFPIXWM7Q6NWZZB</td>\n",
       "      <td>2</td>\n",
       "      <td>2023-06-12 11:02:55.513000+00:00</td>\n",
       "      <td>http://id.who.int/icd/release/11/mms</td>\n",
       "      <td>RA01.0</td>\n",
       "      <td>COVID-19, virus identified</td>\n",
       "      <td>COVID-19</td>\n",
       "      <td>Patient/DCFPIXVY34SQMPSO</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Condition</td>\n",
       "      <td>DCFPIXWM7Q6NWZ23</td>\n",
       "      <td>2</td>\n",
       "      <td>2023-06-12 11:02:55.513000+00:00</td>\n",
       "      <td>http://id.who.int/icd/release/11/mms</td>\n",
       "      <td>RA01.0</td>\n",
       "      <td>COVID-19, virus identified</td>\n",
       "      <td>COVID-19</td>\n",
       "      <td>Patient/DCFPIXVY34SQMPSS</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  resourceType                id meta_versionId  \\\n",
       "0    Condition  DCFPIXWM7Q6NWZ2A              2   \n",
       "1    Condition  DCFPIXWM7Q6NWZXE              2   \n",
       "2    Condition  DCFPIXWM7Q6NWZYE              2   \n",
       "3    Condition  DCFPIXWM7Q6NWZZB              2   \n",
       "4    Condition  DCFPIXWM7Q6NWZ23              2   \n",
       "\n",
       "                  meta_lastUpdated                  code_coding_0_system  \\\n",
       "0 2023-06-12 11:02:55.513000+00:00  http://id.who.int/icd/release/11/mms   \n",
       "1 2023-06-12 11:02:55.513000+00:00  http://id.who.int/icd/release/11/mms   \n",
       "2 2023-06-12 11:02:55.513000+00:00  http://id.who.int/icd/release/11/mms   \n",
       "3 2023-06-12 11:02:55.513000+00:00  http://id.who.int/icd/release/11/mms   \n",
       "4 2023-06-12 11:02:55.513000+00:00  http://id.who.int/icd/release/11/mms   \n",
       "\n",
       "  code_coding_0_code       code_coding_0_display code_text  \\\n",
       "0             RA01.0  COVID-19, virus identified  COVID-19   \n",
       "1             RA01.0  COVID-19, virus identified  COVID-19   \n",
       "2             RA01.0  COVID-19, virus identified  COVID-19   \n",
       "3             RA01.0  COVID-19, virus identified  COVID-19   \n",
       "4             RA01.0  COVID-19, virus identified  COVID-19   \n",
       "\n",
       "          subject_reference  \n",
       "0  Patient/DCFPIXVY34SQMPSQ  \n",
       "1  Patient/DCFPIXVY34SQMPSK  \n",
       "2  Patient/DCFPIXVY34SQMPSM  \n",
       "3  Patient/DCFPIXVY34SQMPSO  \n",
       "4  Patient/DCFPIXVY34SQMPSS  "
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dfs[1].head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    },
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Converting a list of resources to a dataframe\n",
    "\n",
    "Any list of resources (pydantic models or dicts) can be converted to a dataframe using the `flatten()` method."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "from fhir_kindling.serde import flatten_resources\n",
    "\n",
    "# get a list of patient resources\n",
    "patients = server.query(\"Patient\").limit(100).resources"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>resourceType</th>\n",
       "      <th>id</th>\n",
       "      <th>meta_versionId</th>\n",
       "      <th>meta_lastUpdated</th>\n",
       "      <th>name_0_family</th>\n",
       "      <th>name_0_given_0</th>\n",
       "      <th>gender</th>\n",
       "      <th>birthDate</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Patient</td>\n",
       "      <td>DCFPI2LRYF7Y6L2J</td>\n",
       "      <td>4</td>\n",
       "      <td>2023-06-12 11:03:39.037000+00:00</td>\n",
       "      <td>Valdez</td>\n",
       "      <td>Johnathan</td>\n",
       "      <td>female</td>\n",
       "      <td>1939-02-09</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Patient</td>\n",
       "      <td>DCFPI2LTTE3N3KDN</td>\n",
       "      <td>5</td>\n",
       "      <td>2023-06-12 11:03:39.066000+00:00</td>\n",
       "      <td>Hill</td>\n",
       "      <td>Ryan</td>\n",
       "      <td>male</td>\n",
       "      <td>1941-07-20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Patient</td>\n",
       "      <td>DCFPI2LVEWAH3V23</td>\n",
       "      <td>6</td>\n",
       "      <td>2023-06-12 11:03:39.091000+00:00</td>\n",
       "      <td>Bennett</td>\n",
       "      <td>Lauren</td>\n",
       "      <td>female</td>\n",
       "      <td>1966-07-03</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Patient</td>\n",
       "      <td>DCFPIXVY34SQMPSK</td>\n",
       "      <td>1</td>\n",
       "      <td>2023-06-12 11:02:55.144000+00:00</td>\n",
       "      <td>Hutchinson</td>\n",
       "      <td>Jason</td>\n",
       "      <td>male</td>\n",
       "      <td>1939-06-28</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Patient</td>\n",
       "      <td>DCFPIXVY34SQMPSL</td>\n",
       "      <td>1</td>\n",
       "      <td>2023-06-12 11:02:55.144000+00:00</td>\n",
       "      <td>MD</td>\n",
       "      <td>Mrs. Renee Wagner</td>\n",
       "      <td>male</td>\n",
       "      <td>1933-01-10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>Patient</td>\n",
       "      <td>DCFPIXVY34SQMPSM</td>\n",
       "      <td>1</td>\n",
       "      <td>2023-06-12 11:02:55.144000+00:00</td>\n",
       "      <td>Martinez</td>\n",
       "      <td>Tracey</td>\n",
       "      <td>female</td>\n",
       "      <td>1984-01-28</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>Patient</td>\n",
       "      <td>DCFPIXVY34SQMPSN</td>\n",
       "      <td>1</td>\n",
       "      <td>2023-06-12 11:02:55.144000+00:00</td>\n",
       "      <td>Williams</td>\n",
       "      <td>Jennifer</td>\n",
       "      <td>female</td>\n",
       "      <td>1999-05-02</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>Patient</td>\n",
       "      <td>DCFPIXVY34SQMPSO</td>\n",
       "      <td>1</td>\n",
       "      <td>2023-06-12 11:02:55.144000+00:00</td>\n",
       "      <td>Cordova</td>\n",
       "      <td>William</td>\n",
       "      <td>male</td>\n",
       "      <td>1959-07-09</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>Patient</td>\n",
       "      <td>DCFPIXVY34SQMPSP</td>\n",
       "      <td>1</td>\n",
       "      <td>2023-06-12 11:02:55.144000+00:00</td>\n",
       "      <td>Smith</td>\n",
       "      <td>Taylor</td>\n",
       "      <td>female</td>\n",
       "      <td>1923-10-14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>Patient</td>\n",
       "      <td>DCFPIXVY34SQMPSQ</td>\n",
       "      <td>1</td>\n",
       "      <td>2023-06-12 11:02:55.144000+00:00</td>\n",
       "      <td>Lyons</td>\n",
       "      <td>Jordan</td>\n",
       "      <td>male</td>\n",
       "      <td>1951-05-05</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>Patient</td>\n",
       "      <td>DCFPIXVY34SQMPSR</td>\n",
       "      <td>1</td>\n",
       "      <td>2023-06-12 11:02:55.144000+00:00</td>\n",
       "      <td>Yu</td>\n",
       "      <td>Christine</td>\n",
       "      <td>female</td>\n",
       "      <td>1922-10-14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>Patient</td>\n",
       "      <td>DCFPIXVY34SQMPSS</td>\n",
       "      <td>1</td>\n",
       "      <td>2023-06-12 11:02:55.144000+00:00</td>\n",
       "      <td>Williams</td>\n",
       "      <td>David</td>\n",
       "      <td>male</td>\n",
       "      <td>1956-12-02</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>Patient</td>\n",
       "      <td>DCFPIXVY34SQMPST</td>\n",
       "      <td>1</td>\n",
       "      <td>2023-06-12 11:02:55.144000+00:00</td>\n",
       "      <td>Jones</td>\n",
       "      <td>Brianna</td>\n",
       "      <td>male</td>\n",
       "      <td>1987-06-13</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   resourceType                id meta_versionId  \\\n",
       "0       Patient  DCFPI2LRYF7Y6L2J              4   \n",
       "1       Patient  DCFPI2LTTE3N3KDN              5   \n",
       "2       Patient  DCFPI2LVEWAH3V23              6   \n",
       "3       Patient  DCFPIXVY34SQMPSK              1   \n",
       "4       Patient  DCFPIXVY34SQMPSL              1   \n",
       "5       Patient  DCFPIXVY34SQMPSM              1   \n",
       "6       Patient  DCFPIXVY34SQMPSN              1   \n",
       "7       Patient  DCFPIXVY34SQMPSO              1   \n",
       "8       Patient  DCFPIXVY34SQMPSP              1   \n",
       "9       Patient  DCFPIXVY34SQMPSQ              1   \n",
       "10      Patient  DCFPIXVY34SQMPSR              1   \n",
       "11      Patient  DCFPIXVY34SQMPSS              1   \n",
       "12      Patient  DCFPIXVY34SQMPST              1   \n",
       "\n",
       "                   meta_lastUpdated name_0_family     name_0_given_0  gender  \\\n",
       "0  2023-06-12 11:03:39.037000+00:00        Valdez          Johnathan  female   \n",
       "1  2023-06-12 11:03:39.066000+00:00          Hill               Ryan    male   \n",
       "2  2023-06-12 11:03:39.091000+00:00       Bennett             Lauren  female   \n",
       "3  2023-06-12 11:02:55.144000+00:00    Hutchinson              Jason    male   \n",
       "4  2023-06-12 11:02:55.144000+00:00            MD  Mrs. Renee Wagner    male   \n",
       "5  2023-06-12 11:02:55.144000+00:00      Martinez             Tracey  female   \n",
       "6  2023-06-12 11:02:55.144000+00:00      Williams           Jennifer  female   \n",
       "7  2023-06-12 11:02:55.144000+00:00       Cordova            William    male   \n",
       "8  2023-06-12 11:02:55.144000+00:00         Smith             Taylor  female   \n",
       "9  2023-06-12 11:02:55.144000+00:00         Lyons             Jordan    male   \n",
       "10 2023-06-12 11:02:55.144000+00:00            Yu          Christine  female   \n",
       "11 2023-06-12 11:02:55.144000+00:00      Williams              David    male   \n",
       "12 2023-06-12 11:02:55.144000+00:00         Jones            Brianna    male   \n",
       "\n",
       "     birthDate  \n",
       "0   1939-02-09  \n",
       "1   1941-07-20  \n",
       "2   1966-07-03  \n",
       "3   1939-06-28  \n",
       "4   1933-01-10  \n",
       "5   1984-01-28  \n",
       "6   1999-05-02  \n",
       "7   1959-07-09  \n",
       "8   1923-10-14  \n",
       "9   1951-05-05  \n",
       "10  1922-10-14  \n",
       "11  1956-12-02  \n",
       "12  1987-06-13  "
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "flatten_resources(patients)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    },
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Additional CRUD operations\n",
    "\n",
    "All other CRUD operations (and their asynchronous equivalents) are exposed as methods on the `FhirServer` object.\n",
    "\n",
    "- Create: `add()`, `add_all()`\n",
    "- Read: `get()`\n",
    "- Update: `update()`\n",
    "- Delete: `delete()`"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    },
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "### Adding resources & resource validation\n",
    "\n",
    "- Resources as pydantic models or simple dictionaries. \n",
    "- Dictionaries are validated with the corresponding model before being added to the server\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    },
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<ResourceCreateResponse(resource_id=DCFQASRT5IP7RDVE, location=http://localhost:9090/fhir/Patient/DCFQASRT5IP7RDVE, version=None)>"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "patient_dict = {\"resourceType\": \"Patient\", \"birthDate\": \"2000-01-01\", \"name\": [{\"family\": \"Mustermann\", \"given\": [\"Max\"]}]}\n",
    "create_resp = server.add(patient_dict)\n",
    "create_resp"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    },
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "### Get, Update, Delete"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    },
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "datetime.date(2000, 1, 1)"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\n",
    "patient_ref = f\"Patient/{create_resp.resource_id}\" \n",
    "patient = server.get(patient_ref)\n",
    "patient.birthDate "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    },
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "datetime.date(1990, 1, 1)"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import datetime\n",
    "\n",
    "patient.birthDate = datetime.date(1990, 1, 1)\n",
    "server.update([patient])\n",
    "updated = server.get(patient_ref)\n",
    "updated.birthDate"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    },
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "ename": "HTTPStatusError",
     "evalue": "Client error '410 Gone' for url 'http://localhost:9090/fhir/Patient/DCFQASRT5IP7RDVE'\nFor more information check: https://httpstatuses.com/410",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mHTTPStatusError\u001b[0m                           Traceback (most recent call last)",
      "Cell \u001b[1;32mIn[25], line 2\u001b[0m\n\u001b[0;32m      1\u001b[0m server\u001b[38;5;241m.\u001b[39mdelete([updated])\n\u001b[1;32m----> 2\u001b[0m \u001b[43mserver\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[43mpatient_ref\u001b[49m\u001b[43m)\u001b[49m\n",
      "File \u001b[1;32m~\\tbi\\repos\\fhir_kindling\\fhir_kindling\\fhir_server\\fhir_server.py:300\u001b[0m, in \u001b[0;36mFhirServer.get\u001b[1;34m(self, reference)\u001b[0m\n\u001b[0;32m    298\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_sync_client() \u001b[38;5;28;01mas\u001b[39;00m client:\n\u001b[0;32m    299\u001b[0m     r \u001b[38;5;241m=\u001b[39m client\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mapi_address\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m/\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mreference\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m--> 300\u001b[0m \u001b[43mr\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mraise_for_status\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m    301\u001b[0m resource_dict \u001b[38;5;241m=\u001b[39m r\u001b[38;5;241m.\u001b[39mjson()\n\u001b[0;32m    302\u001b[0m resource \u001b[38;5;241m=\u001b[39m construct_fhir_element(resource_dict[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mresourceType\u001b[39m\u001b[38;5;124m\"\u001b[39m], resource_dict)\n",
      "File \u001b[1;32m~\\AppData\\Local\\pypoetry\\Cache\\virtualenvs\\fhir-kindling-aPmNxlUm-py3.11\\Lib\\site-packages\\httpx\\_models.py:749\u001b[0m, in \u001b[0;36mResponse.raise_for_status\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m    747\u001b[0m error_type \u001b[38;5;241m=\u001b[39m error_types\u001b[38;5;241m.\u001b[39mget(status_class, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mInvalid status code\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m    748\u001b[0m message \u001b[38;5;241m=\u001b[39m message\u001b[38;5;241m.\u001b[39mformat(\u001b[38;5;28mself\u001b[39m, error_type\u001b[38;5;241m=\u001b[39merror_type)\n\u001b[1;32m--> 749\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m HTTPStatusError(message, request\u001b[38;5;241m=\u001b[39mrequest, response\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m)\n",
      "\u001b[1;31mHTTPStatusError\u001b[0m: Client error '410 Gone' for url 'http://localhost:9090/fhir/Patient/DCFQASRT5IP7RDVE'\nFor more information check: https://httpstatuses.com/410"
     ]
    }
   ],
   "source": [
    "server.delete([updated])\n",
    "server.get(patient_ref)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    },
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "# Generating synthetic data\n",
    "\n",
    "Generate complex synthetic data sets using dataset and resource generator functions.\n",
    "Interdependencies between resources and the likelihood of a resource being generated can be defined."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "## Generators\n",
    "Fhir kindling provides generator classses for different components of a dataset\n",
    "- FieldGenerator & FieldValue\n",
    "- ResourceGenerator\n",
    "- TimeSeriesGenerator\n",
    "- DatasetResourceGenerator\n",
    "- DatasetGenerator\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    },
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "We will reproduce the benchmark dataset which contains:\n",
    "- Patients\n",
    "- with Covid-19 conditions\n",
    "- a certain likelihood of being vaccinated.\n",
    "- that have an emergency room visit\n",
    "- get admitted to the ICU\n",
    "- data about vital parameters in the ICU"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    },
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "Start by importing some constants from the benchmark module. These will define most of the constant values of our resources i.e. Codes, Codings.\n",
    "We also need to import the generators that we will use and set up the dataset generator to which we will iteratively add resources."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    },
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "CodeableConcept(resource_type='CodeableConcept', fhir_comments=None, extension=None, id=None, coding=[Coding(resource_type='Coding', fhir_comments=None, extension=None, id=None, code='XM0GQ8', code__ext=None, display='COVID-19 vaccine, RNA based', display__ext=None, system='http://id.who.int/icd/release/11/mms', system__ext=None, userSelected=None, userSelected__ext=None, version=None, version__ext=None)], text='COVID vaccination', text__ext=None)"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import random\n",
    "from fhir_kindling.benchmark.constants import Codes\n",
    "from fhir_kindling.util.date_utils import (\n",
    "    add,\n",
    "    subtract,\n",
    "    to_iso_string,\n",
    ")\n",
    "\n",
    "from fhir_kindling.generators.dataset import DatasetGenerator\n",
    "from fhir_kindling.generators.field_generator import FieldGenerator\n",
    "from fhir_kindling.generators.resource_generator import (\n",
    "    FieldValue,\n",
    "    GeneratorParameters,\n",
    "    ResourceGenerator,\n",
    ")\n",
    "from fhir_kindling.generators.time_series_generator import TimeSeriesGenerator\n",
    "\n",
    "Codes.COVID_VACC_RNA.value"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    },
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "Now we set up the dataset_generator and define our first resource generator"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    },
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<DatasetGenerator(name=25db9bc3-49ca-4b50-9dbf-d4d06acacdaf, resource_types={'Patient'}, n=10, generators=[<DataSetResourceGenerator base, generator=<PatientGenerator(n=1, age_range=None, gender_distribution=None>>])>"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "n_patients = 10\n",
    "\n",
    "dataset_generator = DatasetGenerator(\"Patient\", n=n_patients)\n",
    "dataset_generator"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    },
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "Now add a condition resource for covid"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [],
   "source": [
    "covid_params = GeneratorParameters(\n",
    "        field_values=[\n",
    "            FieldValue(field=\"code\", value=Codes.COVID.value),\n",
    "        ]\n",
    "    )\n",
    "covid_generator = ResourceGenerator(\"Condition\", generator_parameters=covid_params)\n",
    "\n",
    "dataset_generator = dataset_generator.add_resource_generator(\n",
    "    covid_generator, name=\"covid\", depends_on=\"base\", reference_field=\"subject\"\n",
    ")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "Now add the first shot of a MRNA based covid vaccination to the dataset. But this will only occur with a certain probability"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [],
   "source": [
    "vaccination_date_generator = FieldGenerator(\n",
    "        field=\"occurrenceDateTime\",\n",
    "        generator_function=lambda: to_iso_string(subtract(datetime.datetime.now(), days=720)),\n",
    "    )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [],
   "source": [
    "first_vax_params = GeneratorParameters(\n",
    "    field_values=[\n",
    "        FieldValue(field=\"vaccineCode\", value=Codes.COVID_VACC_RNA.value),\n",
    "        FieldValue(field=\"status\", value=\"completed\"),\n",
    "    ],\n",
    "    field_generators=[vaccination_date_generator],\n",
    ")\n",
    "vaccination_generator = ResourceGenerator(\n",
    "    \"Immunization\",\n",
    "    generator_parameters=first_vax_params,\n",
    ")\n",
    "\n",
    "dataset_generator = dataset_generator.add_resource_generator(\n",
    "    vaccination_generator,\n",
    "    \"vacc-mrna-1\",\n",
    "    depends_on=\"base\",\n",
    "    likelihood=0.7,\n",
    "    reference_field=\"patient\",\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "### Lets have a look at what we have so far "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<module 'matplotlib.pyplot' from 'C:\\\\Users\\\\Michael Graf\\\\AppData\\\\Local\\\\pypoetry\\\\Cache\\\\virtualenvs\\\\fhir-kindling-aPmNxlUm-py3.11\\\\Lib\\\\site-packages\\\\matplotlib\\\\pyplot.py'>"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "dataset_generator.draw_graph()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "Now generate the second and third vaccinations with different probablitiies. They all need to depend on the previous vaccinations and the patient."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [],
   "source": [
    "# second shot\n",
    "second_vax_params = GeneratorParameters(\n",
    "    field_values=[\n",
    "        FieldValue(field=\"vaccineCode\", value=Codes.COVID_VACC_RNA.value),\n",
    "        FieldValue(field=\"status\", value=\"completed\"),\n",
    "    ],\n",
    "    field_generators=[vaccination_date_generator],\n",
    ")\n",
    "second_vaccination_generator = ResourceGenerator(\n",
    "    \"Immunization\", generator_parameters=second_vax_params\n",
    ")\n",
    "\n",
    "dataset_generator = dataset_generator.add_resource_generator(\n",
    "    second_vaccination_generator,\n",
    "    \"vacc-mrna-2\",\n",
    "    depends_on=[\"base\", \"vacc-mrna-1\"],\n",
    "    likelihood=0.9,\n",
    "    reference_field=[\"patient\", None],\n",
    ")\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "outputs": [],
   "source": [
    "# third shot\n",
    "second_vax_params = GeneratorParameters(\n",
    "    field_values=[\n",
    "        FieldValue(field=\"vaccineCode\", value=Codes.COVID_VACC_RNA.value),\n",
    "        FieldValue(field=\"status\", value=\"completed\"),\n",
    "    ],\n",
    "    field_generators=[vaccination_date_generator],\n",
    ")\n",
    "third_vaccination_generator = ResourceGenerator(\n",
    "    \"Immunization\", generator_parameters=second_vax_params\n",
    ")\n",
    "\n",
    "dataset_generator = dataset_generator.add_resource_generator(\n",
    "    third_vaccination_generator,\n",
    "    \"vacc-mrna-3\",\n",
    "    depends_on=[\"base\", \"vacc-mrna-1\", \"vacc-mrna-2\"],\n",
    "    reference_field=[\"patient\", None, None],\n",
    "    likelihood=0.8,\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "Now lets look at the graph again"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<module 'matplotlib.pyplot' from 'C:\\\\Users\\\\Michael Graf\\\\AppData\\\\Local\\\\pypoetry\\\\Cache\\\\virtualenvs\\\\fhir-kindling-aPmNxlUm-py3.11\\\\Lib\\\\site-packages\\\\matplotlib\\\\pyplot.py'>"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgMAAAGFCAYAAABg2vAPAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAACD6UlEQVR4nO3dd3yN5//H8dc5mZKQiAyEiBUjSIyaJXZpUSPErtFQP4r2S60aVaWtVa3Sij1DYleHvQlKYkvMJELIkL1Ozv37w9f59jS2xMn4PB+PPNqcc4/Pfaru97mu674ulaIoCkIIIYQotNSGLkAIIYQQhiVhQAghhCjkJAwIIYQQhZyEASGEEKKQkzAghBBCFHISBoQQQohCTsKAEEIIUchJGBBCCCEKOQkDQgghRCEnYUAIIYQo5CQMCCGEEIWchAEhhBCikJMwIIQQQhRyEgaEEEKIQk7CgBBCCFHISRgQQgghCjkJA0IIIUQhJ2FACCGEKOQkDAghhBCFnIQBIYQQopCTMCCEEEIUchIGhBBCiEJOwoAQQghRyEkYEEIIIQo5CQNCCCFEISdhQAghhCjkJAwIIYQQhZyxoQsQ4onkdA23Y5LJ0GgxNVbjUsISSzP5IyqEELlN/qYVBhUalci6wDAOXHtAWGwKyj/eUwHOtha0qOJAnwbOVHYsaqgyhRCiQFMpiqK8eDMhclZ4bAoTt17gyPVojNQqsrTP/mP45P2mleyY2aUmZW0t3mKlQghR8EkYEG+d3+kwpu64hEarPDcE/JuRWoWxWsVXndzo+Y5zLlYohBCFi4QB8VYtPBDKnN0hb3ycMW1dGdGicg5UJIQQQp4mEG+N3+mwHAkCAHN2h7DxdFiOHEsIIQo7CQPirQiPTWHqjks5eswpOy4RHpuSo8d8Fbt372bw4MHUqFEDIyMjXFxcDFaLEEK8CQkD4q2YuPUCmlcYH/AyNFqFiVsv5OgxX8X69etZv3491tbWlC5d2mB1CCHEm5IwIHJdaFQiR65Hv9JgwZeRpVU4cj2a6w8S0Wg0ZGRk5OjxX2TmzJkkJCRw7Ngx3N3d3+q5hRAiJ0kYKAACAgJQqVQcOnQo23u//vorKpWKixcvcv78eQYMGECFChUwNzenZMmSDBo0iJiYmGz73b17l8GDB1O6dGnMzMwoX748w4YN07vhPnr0iM8++wwXFxfMzMwoU6YM/fv3Jzo6Wu9Y6wLDMFKrdL8nnd/LnW87kBZ+idg9vxK+oDdh872J+XMhSlYm2rQkonfOJXy+N+HzvYk7sJx/jnPVPIrizrcdiA/cQtKZ7dR3r46ZmRmXL19m2rRpqFQqrl+/zoABA7CxscHa2pqBAweSkqLfpbBixQpatmyJg4MDZmZmVK9encWLF7/05166dGlMTExeenshhMirZNKhAuCDDz7AysqKTZs24enpqffexo0bcXNzo0aNGsydO5ebN28ycOBASpYsyaVLl1iyZAmXLl3i5MmTqFSPb9iRkZHUr1+fR48eMWTIEKpWrcrdu3cJCAggJSUFU1NTkpKSaNq0KVeuXGHQoEHUqVOH6OhoduzYQUREBHZ2droaDlx78NRWgdg9v2JkVRybpn1Iv3uVpKA/UZtZkn73CkbF7LHx/IjUG6dJCNyCiV05rGq20ts/+cJeFE0GZRt3ZEqb6tja2ure69GjB+XLl2fWrFmcPXuWpUuX4uDgwHfffafbZvHixbi5udGpUyeMjY3ZuXMn//d//4dWq2X48OE58t9GCCHyBUUUCL169VIcHBwUjUaje+3evXuKWq1Wpk+friiKoqSkpGTbb8OGDQqgHD58WPda//79FbVarZw+fTrb9lqtVlEURZkyZYoCKFu2bHnmNoqiKIlpmYrL+N+Ucv/4KfH+aAVQzMvXUZzH7dS9buZUVQGVYlW7ve415y+2K0ZF7RSzsjV0rzl9skwBFJWZhVJm5DrFZfxvSlJapqIoijJ16lQFUAYNGqRXU5cuXZQSJUrovfa0z+O9995TKlSokP0DfoEPPvhAKVeu3CvvJ4QQeYF0ExQQ3t7ePHjwgIMHD+peCwgIQKvV4u3tDUCRIkV076WlpREdHU3Dhg0BOHv2LABarZZt27bRsWNH6tWrl+08T1oPNm/ejLu7O126dHnmNgB3YpJ51kgBK/e2etualqoCKFjVavu/Y6mNMC1ZCU18VLb9LVwbY2RhjQLcjknWe++TTz7R+71p06bExMSQkJCge+2fn0d8fDzR0dF4enpy8+ZN4uPjn1G1EEIUPBIGCoh27dphbW3Nxo0bda9t3LgRDw8PXF1dAYiNjWXUqFE4OjpSpEgR7O3tKV++PIDu5vfw4UMSEhKoUaPGc89348aNF25z//59IiPvkZUUR1ZSHNrMdL33jYvZ6/2uNrP47+t2/3rdEm1aUrbjG9s46v49Q6PVe8/ZWX+GwuLFiwMQFxene+3YsWO0bt0aS0tLbGxssLe3Z+LEicD/Po/4+Hju37+v+4mNjX3uNQshRH4kYwYKCDMzMzp37szWrVtZtGgRUVFRHDt2jJkzZ+q26dGjB8ePH2fs2LF4eHhgZWWFVqulXbt2aLXa5xz99ZQqVUrv9xLvj8aqVuv/vaB6RhZ92utPmShTZWym+3dTY/19jIyMnnpo5b/HuXHjBq1ataJq1arMmzePsmXLYmpqyu+//878+fN1n8eoUaNYtWqVbn9PT0+91hchhCgIJAwUIN7e3qxatYp9+/Zx5coVFEXRdRHExcWxb98+vvrqK6ZMmaLbJzQ0VO8Y9vb2FCtWjIsXLz73XBUrVnzhNnv27CEtI4uP15xBAUzscmc9ARXgUsLylfbZuXMn6enp7NixQ68V4cCBA3rbffHFF/Tt21f3+5MWBiGEKEgkDBQgrVu3xtbWlo0bN3LlyhXq16+v6wZ48k1Z+dc37B9++EHvd7VaTefOnVm7di1nzpzJNm5AURRUKhXdunVj+vTpbN26Ndu4gSfbtG79uBWgyiVT7uTiTIHOJSywNHu1P8pP+zzi4+NZsWKF3nbVq1enevXqb16kEELkYRIGChATExO6du2Kn58fycnJzJkzR/desWLFaNasGd9//z2ZmZk4OTmxe/dubt26le04M2fOZPfu3Xh6ejJkyBCqVavGvXv38Pf35+jRo9jY2DB27FgCAgLo3r07gwYNom7dusTGxrJjxw5++eUXvUl4WlRxYE3gnRyfdAger2ToaqXB39+f2NhY3VwLgwcPJj4+nunTp9OsWbNs+7Vt2xZTU1M6duzI0KFDSUpKwtfXFwcHB+7du/dS5z5//jw7duwA4Pr168THxzNjxgwA3N3d6dixYw5dpRBC5C4JAwWMt7c3S5cuRaVS0aNHD7331q9fz6effsrPP/+Moii0bduWP/74I9tUuk5OTgQGBjJ58mTWrVtHQkICTk5OtG/fHguLx4P8rKysOHLkCFOnTmXr1q2sWrUKBwcHWrVqRZkyZfSO16eBMytP3M6V683SKqyaPJil0eHA/55keHKTftaNvUqVKgQEBPDll18yZswYSpYsybBhw7C3t2fQoEEvde6zZ88yefJkvdee/P7RRx9JGBBC5BuyhLF4K/otC+T4zZgcbR0wUqtoXKEENWMOMW7cuGzvFytWjKioKMzNzXPsnEIIURDJo4XirZjZpSbG/5iS+I0pCipFy8wuNfniiy+YNWtWtk3S0tIYM2YMwcHBOXdeIYQogCQMiLeirK0FX3Vyy7kDqlRE7fqRbyZ+TlpaGuPGjWPEiBF6kxh99NFHbN68GQ8PD+rXr4+vry+JiYk5V4MQQhQQEgbEW9PzHWfGtHXNkWONaevKDyO9WblyJU2aNOH27dv88MMPuicbGjZsyJIlSwgLC2Pr1q3Y29szdOhQSpcujY+PD6dPn872ZIUQQhRWMmZAvBUPHjxgwoQJnDhxgimr/mTqjktotMorjSEwUqswVquY3skN73cezw1w7tw5vLy8iI2NZfXq1bRp04aRI0fSu3dvmjdvrrd/WFgYy5cvZ/ny5YSHh+Pu7o6Pjw99+vTBxsYmB69WCCHyFwkDIldduHCB+fPns2bNGjQaDaampqSnpxMem8LErRc4cj0aI7XquaHgyftNK9kxs0tNytpa6L3/6NEjBgwYwPbt2xk3bhwzZszA2PjZD8pkZWXx119/4evry86dOzE1NaV79+74+PjQpEkTva4GIYQoDCQMiFyxb98+ZsyYwcGDBzEyMiIrKwuADz/8kG3btum2C41KZF1gGAdCHhAWk6K3qJGKxxMKtXB1oG9DZyo5FH3m+RRFYe7cuYwfP553330XPz8/SpYs+cI67927x8qVK1m6dCk3b96kWrVqfPzxx/Tv319vGWYhhCjIJAyIHKfVanFwcCAmJkbvdZVKxQ8//MDIkSOful9yuobbMclkaLSYGqtxKWH5yjMLHjlyBG9vbxRFwc/PD09Pz5eu+cCBAyxZsoStW7eiUqno0qULPj4+tGjRArVahtcIIQouCQMiVxw/fpyOHTsSFxenN1Dv77//pk6dOrl67vv379O7d28OHTrEzJkzGTt27CvdzB8+fMjq1avx9fXl2rVrVKxYkY8//pgBAwa8VGuDEELkNxIGRK6ZOXMmkyZNQqVSoSgKRYoUISEh4bn9+TlFo9EwdepUZs6cSadOnVi5cuUrLzKkKApHjx7F19cXf39/NBoNHTt2xMfHh7Zt2z5zZUQhhMhvJAyIXHHgwAHatm3LwIEDuX//Pjt37qRly5bs27fvrdaxa9cu+vXrh42NDQEBAa/dKhEXF8e6devw9fXl/PnzODs7M2jQIAYNGkTZsmVzuGohhHi7JAyIHHf9+nUaNGhAnTp1+OOPP1Cr1fz00094eHi8dB9+Trp9+zbdu3fnwoUL/Pjjj/j4+Lz2EwOKonD69GmWLFmCn58fqamptGvXDh8fHz744ANMTExyuHohhMh9EgZEjoqPj6dRo0ZkZWVx8uTJV26azy3p6el89tlnLF68mH79+rF48WIsLS3f6JiJiYls2LABX19fzpw5Q6lSpRg4cCCDBw+mQoUKOVS5EELkPgkDIsc86VM/efIkgYGBuLrmzGyDOWndunUMGTKEChUqEBAQQJUqVXLkuEFBQfj6+rJ27VoSEhJo3bo1Pj4+dO7cGVNT0xw5hxBC5BZ5XkrkmLFjx7Jnzx78/f3zZBAA6NOnD6dPn0aj0VCvXj02bdqUI8f18PDg559/1s1bkJqaire3N05OTowZM4Zr167lyHmEECI3SMuAyBFLly7Fx8eHhQsXMnz4cEOX80JJSUn4+Pjg5+fHyJEjmT17do5/g798+TK+vr6sXr2a2NhYmjZtio+PD15eXhQpUiRHzyWEEG9CwoB4Y4cOHdI1iy9atMjQ5bw0RVFYtGgRn332GXXr1mXTpk258mRAWloaW7duxdfXlwMHDmBjY0O/fv3w8fGhZs2aOX4+IYR4VRIGxBu5efMm9evXx8PDgz/++CNfjqY/deoU3bt3Jzk5mXXr1vHee+/l2rlCQ0NZtmwZK1euJCoqigYNGuDj44O3tzdWVla5dl4hhHgeCQPitSUkJNCoUSMyMjIIDAzE1tbW0CW9tpiYGPr168eff/7JlClTmDx5cq5OKpSZmcnOnTvx9fXlr7/+wsrKil69euHj40PdunVlsSQhxFslYUC8lqysLDp16sSxY8c4efIkVatWNXRJb0yr1TJz5kymTJlCmzZtWLt2Lfb29rl+3jt37rBs2TKWL1/O3bt38fDw0C2tbG1tnevnF0IICQPitfznP/9hwYIF/P7777Rt29bQ5eSovXv30rt3b8zMzNi0aRONGjV6K+fVaDT8+eef+Pr6smvXLkxNTfH29sbHx4dGjRpJa4EQItdIGBCvbNmyZXz88cf8+OOPfPrpp4YuJ1fcvXsXb29vAgMDmTNnDiNHjnyrN+PIyEhWrFjB0qVLuX37NtWrV8fHx4d+/fpRokSJt1aHEKJwkDAgXsnhw4dp3bo1gwYNYvHixQX622pmZibjx49n3rx5eHl5sWzZMooVK/ZWa9Bqtezbtw9fX1+2bduGWq2ma9eu+Pj40Lx58wL9+Qsh3h4JA+Kl3bp1i/r161OjRg12796dL58ceB2bN29m4MCBlCpVioCAAIM9DvjgwQPd0sohISFUqlRJt7Syo6OjQWoSQhQMEgbES0lISKBx48akpaURGBhY6JqqQ0ND8fLyIjQ0lF9++YX+/fsbrBZFUTh8+DC+vr4EBASQlZXFhx9+iI+PD23atEGtlolFhRCvRsKAeKEnN5sjR45w8uRJqlWrZuiSDCIlJYXhw4ezcuVKfHx8+PHHHzE3NzdoTbGxsaxduxZfX18uXrxIuXLlGDx4MIMGDcLJycmgtQkh8g8JA+KFxo4dy7x589i1axft2rUzdDkGt3z5coYPH061atUICAjIEysUKopCYGAgvr6++Pn5kZaWxvvvv4+Pjw/vv/8+xsbGhi5RCJGHSRgQz7Vy5UoGDhzI/PnzGT16tKHLyTOCgoLw8vIiOjqa1atX06lTJ0OXpJOQkMCGDRtYsmQJZ8+epXTp0rqllcuXL//ax83IyODu3bvExcVRp06dHKxYCGFoEgbEMx09epSWLVvy0UcfsWTJEhm5/i+PHj1i4MCBbNu2jXHjxjFjxow89w387Nmz+Pr6sm7dOpKSkmjTpg0+Pj506tTplRZmCgwMZNGiRWzfvp0yZcqgVqvZsmULlSpVysXqhRBvi4QB8VS3b9/mnXfewc3Njd27d+f4in4FhaIozJs3j3HjxtGkSRP8/PwoVaqUocvKJjk5mU2bNuHr68uJEyewt7dnwIABfPzxxy9cbjoqKgp3d3caNWpEhw4daN26NVOmTOHq1av89ddf2NjYvJ2LEELkGgkDIpvExEQaN25MSkoKgYGB2NnZGbqkPO/IkSN4e3uj1Wrx8/OjefPmhi7pmS5evMjSpUtZvXo1cXFxeHp64uPjQ7du3Z46ILJp06ZoNBrWrl1LxYoVATh//jwffPABO3bsoHbt2m/7EoQQOUyeQRJ6srKy6NOnD3fu3GHHjh0SBF5S06ZNOXfuHNWrV6dVq1Z89913aLVaQ5f1VDVq1OCHH34gMjKSdevWAdC3b19Kly7NqFGjuHjxom7b+fPnExQUxMKFC3VBAB5PnRwVFUXRokXfev1CiJwnYUDomThxIrt27cLPzw83NzdDl5OvODo6smfPHiZMmMD48ePp3LkzcXFxhi7rmczNzenduzcHDx7k2rVrfPzxx2zYsIGaNWvSuHFjfvrpJ7799lv+85//4OHhodsvMzOTDRs2yHoJQhQgEgaEzqpVq/j++++ZPXs277//vqHLyZeMjIyYMWMGv/32G0ePHqVOnTr8/fffhi7rhVxdXfn++++JiIjA39+fokWLMmrUKKKjowkKCiI4OFi37e7duzlx4gR16tTRay0QQuRfMmZAAHD8+HFatGhB3759Wbp0qXzjywG3b9+me/funD9/nh9//JEhQ4bkq89127Zt9OjRAxsbGx4+fEidOnVo164d165dIyIigs2bN+Pk5IRWq9Wb9fD+/ftcvnyZ1NRUPvjgAwNegRDiZUkYENy5c4d33nmHqlWrsnfvXnlyIAelp6fz+eefs2jRIvr168fixYuxtLQ0dFkvJTIykq5du9K2bVsqV67M0qVLOXz4MGq1mhYtWvD1119Tv359jIyMdPscOHCA77//npMnT1K+fHnS0tLYuHGjwdZzEEK8HAkDhVxSUhJNmjQhISGBU6dOYW9vb+iSCqT169fj4+ND+fLl2bx5M1WqVDF0SS/l0KFD9O7dm6JFi3L37l1q166Ns7MzR48e5c6dO9SoUQMfHx/69OlDiRIlmDNnDitXruSXX36hVq1azJgxg+3bt7N+/Xrq1q1r6MsRQjyDhIFCTKvV0rVrV/bt28eJEyeoUaOGoUsq0C5fvky3bt2IiIhg2bJl9OjRw9AlvRStVsvevXuxtbWlXr16wOMWj4MHD7JkyRJ27NiBkZERXl5eVKhQgaCgIHbs2AE8fky1YcOGjBkzhoEDBxryMoQQzyEDCAuxSZMmsWPHDjZs2CBB4C2oXr06p0+fpkOHDnh7ezNq1CgyMjIMXdYLqdVq2rZtqwsCS5YsoV+/frpWjoiICLy8vNi5cydff/01v/32G926dePBgwcEBQVhZWVFeHi4ga9CCPE8eWvuVPHWrFmzhm+//ZbZs2fToUMHQ5dTaFhZWbF+/XqaNm3K6NGjCQwMZNOmTTg7Oxu6tJeiKAq3bt3i3r17unkUrl69yvHjx+nZsyeOjo7s2rWLLVu2sHXrViwtLalYsaLu6RRFUfLVIEohCgvpJiiETpw4QfPmzenTpw/Lli2Tv5wN5NSpU3Tv3p3k5GTWrVvHe++9Z+iSXtrt27dxcXFBq9XyzTffsHPnTjZt2oSLiwsAa9euZdKkSZiYmHDjxg1cXFx0SyuXLl3asMULIbKRboJCJiwsjM6dO1O/fn0WL14sQcCA6tevz9mzZ6lfvz7t27dn6tSpZGVlGbqsl/Lkpq9WqylZsiRxcXFYW1vr3q9atSomJiZs376dY8eO0bx5c2bOnImzszMffvghv/32GxqNxkDVCyH+TcJAIZKUlESnTp0oUqQImzdvxszMzNAlFXolSpTgt99+4+uvv2bGjBm0b9+ehw8fGrqsV1KnTh1MTEyYP38+Go2GiIgILly4wJ07dzA3N6dx48asWLGCe/fu8dNPPxEWFkbHjh1xcXFhypQp3Llzx9CXIEShJ90EhYRWq6Vbt27s3buX48ePy3PfedC+ffvo1asXpqambNq0icaNGxu6pJd28uRJevXqRcmSJUlISODhw4cMHz6cqVOnZpuUSFEU/v77b3x9fVm/fj3Jycm89957+Pj40LFjR0xMTAx4JUIUThIGCphnDdCaNGkSs2bNYvv27XTs2NEAlYmXcffuXby9vQkMDGT27NmMGjUqX3Xl/Prrr6jVakqVKvVSA1OTkpLYuHEjvr6+BAYG4ujoqFtauVKlSm+hYiEESBgosLKysnQzw61bt46+ffvy3Xff8cUXXxi4MvEimZmZTJgwgblz5+Ll5cWyZcsoVqyYoct6La/y9MD58+dZunQpa9as4dGjR7Ro0QIfHx+6dOny1KWVhRA5R8JAPvfkUa/jx4/z4MEDypYtS/fu3XXvnzx5kubNm+Pt7c3KlSvz1bfMwm7Lli0MHDgQR0dHNm/eXGi6dlJTU9m8eTNLlizhyJEj2Nra0r9/f3x8fKhevbqhyxOiQJIwkM/Nnz+fbdu2ce3aNWrUqMHx48ext7fnk08+oWfPnjRq1IiKFSuyf/9+GTCYD12/fh0vLy9CQkJYvHgxH330kaFLequuXr3K0qVLWbVqFdHR0TRp0gQfHx+6d++OhYWFocsTosCQMJCPabVabGxsWLJkCV26dCEqKopPP/2UEydOYGFhQUxMDEWLFiUoKAgHBwdDlyteU2pqKiNGjGD58uV8/PHH/PTTT4Wu2Tw9PZ3t27fj6+vL3r17sba2pk+fPvj4+ODh4WHo8oTI9yQM5GOrV69m0aJFnDx5UvfahQsXGDlyJMnJyfz99994eXmxcePGbCO6Rf6zfPlyhg8fTrVq1fD396dixYqGLskgbt68ybJly1i+fDn379+nXr16+Pj40KtXL4oWLWro8oTIl+TukI9ZWFiQlJTEpUuXdK/t3buXq1evcubMGb788kt2795NRESEBIECYNCgQZw8eZLExETq1q3L9u3bDV2SQVSoUIFvvvmGsLAwtm7dioODA8OGDaNUqVL4+Phw6tQp5DuOEK9G7hD5WKNGjTAyMmLlypUcOHCADRs2MGnSJO7fv8/MmTMZNGgQFSpU4O+//zZ0qSKHuLu7c+bMGVq1akXnzp354osvCu1MfiYmJnTu3Jldu3Zx+/Ztxo4dy19//UWDBg3w8PBg4cKFxMXFGbpMIfIF6SbIp548srVmzRrGjRsHgJmZGeHh4fTu3Vs34KpatWrs27cPd3d3A1cscpKiKMyfP58vvviCxo0bs3HjRkqVKmXosgwuKyuL3bt34+vry44dOzAxMaF79+74+Pjw7rvvytM0QjyDhIECwt/fnxEjRlC+fHkOHjxIQkICU6ZM4ezZs5w6dcrQ5YlccvToUby9vcnKymLDhg20aNHC0CXlGffv32flypX4+vpy8+ZNqlatyscff8xHH32EnZ2docsTIk+RboJ8TqPRkJKSwnfffYeZmRnbt2/H3Nyc0NBQEhISmDt3rqFLFLno3Xff5dy5c9SoUYPWrVsza9Ys3dLChV3JkiUZP348oaGh7N27F3d3dyZOnEjp0qXp2bMn+/btk89KiP+SloF8TFEUFEWhZ8+e7Nq1i2PHjukes4qPjyclJUWajguJrKwspk2bxowZM/jggw9YvXo1tra2hi4rz4mOjmb16tX4+vpy9epVKlSowMcff8yAAQPk/xVRqEkYyOemTZvGV199RUBAAN26dQNebQpYUbD88ccf9O3bl2LFiuHv70+9evUMXVKepCgKx44dY8mSJfj7+5OZmUnHjh3x8fHhvffe003lLURhIWEgH8nIyODChQucOXMGtVpNSEgIc+bM4ZtvvmHixInA4+mHV6xYQZ8+fWjWrJmBKxaGcOfOHbp3705wcDALFixg6NChEg6fIy4ujnXr1uHr68v58+cpW7YsgwYNYtCgQTg7Oxu6PCHeChkzkI+MHj2aAQMGMGHCBL755hvmzp2LnZ0dRYoUISEhAYBLly7x22+/kZycbOBqhaGUK1eOI0eO4OPjw7Bhw+jXr5/8eXiO4sWLM2LECIKCgggMDOS9995jzpw5uLi48MEHH7Bt2zYyMzMNXaYQuUpaBvKJCxcu0LBhQ92CNXXr1sXKyopmzZpx8eJFqlWrxsyZM3FyciI0NJTKlSsbumSRB2zYsAEfHx/KlSvH5s2bqVq1qqFLyhcSExPx8/PD19eX06dPU7JkSQYOHMjHH39MhQoVDF2eEDlOwkA+MWvWLI4cOUJAQACenp7cv3+f06dPY2xszPbt25kxYwYNGzZk1apVmJqaGrpckYdcuXKFbt26ERYWxtKlS+nZs6ehS8pXgoOD8fX1Ze3atcTHx9OqVSt8fHzo3LmzLP4lCgzpJsgnqlWrxrFjx+jYsSOXL19mx44dlCxZEjs7OwYPHsySJUs4fPgwN2/eNHSpIo+pVq0ap06d4sMPP6RXr158+umnpKenG7qsfMPd3Z2FCxcSGRnJypUrSUtLo2fPnpQpU4YxY8Zw9epVQ5coxBuTMJBPtGzZkpIlS7J//36++uqrbCu1NWzYECsrK4KCggxSn8jbrKysWLt2LYsWLWLJkiU0a9aMO3fuGLqsfMXCwoKPPvqIo0ePcunSJfr168fKlSupVq0azZo1Y82aNaSmphq6TCFei3QT5AOKohAQEECPHj2wt7cnLS2NIUOG0K9fP0qVKoWJiQmHDx+mZ8+eREdHY2lpaeiSRR52+vRpvLy8SEpKYt26dbRr187QJeVb6enpbN26FV9fX/bv34+NjQ19+/bFx8eHWrVqGbo8IV6eIvK8M2fOKEWKFFF69eqlaLVa5aefflJcXFwUU1NTpUWLFkrp0qWVWrVqKV9//bWhSxX5RHR0tPL+++8rKpVKmTx5sqLRaAxdUr4XGhqqjB8/XnF0dFQApX79+oqvr6+SmJho6NKEeCFpGcjj7t27xzvvvEPp0qU5dOgQRYoU0b23d+9eDh06RLly5ahbty41a9bE2NjYgNWK/ESr1fLtt98yefJkWrRowfr163FwcDB0WfleZmYmO3fuxNfXl7/++gtLS0t69+6Nj48PdevWlTkfRJ4kYSAPS01NxdPTk8jISE6fPi3TpYpcsX//fnr16oWJiQkbN26kSZMmhi6pwLhz5w7Lly9n+fLlRERE4OHhgY+PD3369MHa2vqt1JCcruF2TDIZGi2mxmpcSlhiaSZfGoQ+CQN5lKIo9O7dm+3bt3P06FHq1Klj6JJEAXb37l169uzJyZMn+f777xk9erR8g81BWVlZ/PnnnyxZsoRdu3ZhampKjx498PHxoXHjxjn+WYdGJbIuMIwD1x4QFpvCP/+SVwHOtha0qOJAnwbOVHYsmqPnFvmThIE8asaMGUyePBl/f3+8vLwMXY4oBDIzM5k4cSJz5syha9euLF++/K19ey1MIiMjWbFiBUuXLuX27dtUr14dHx8f+vXrR4kSJd7o2OGxKUzceoEj16MxUqvI0j77r/cn7zetZMfMLjUpa2vxRucW+ZuEgTxo8+bNeHl58dVXXzFlyhRDlyMKma1btzJgwAAcHBwICAjA3d3d0CUVSFqtln379uHr68u2bdtQqVR069YNHx8fmjdv/sqtBX6nw5i64xIarfLcEPBvRmoVxmoVX3Vyo+c7shZDYSVhII85d+4c7777Lh07dmTDhg3SVCsM4vr163h5eXHt2jUWL17MgAEDDF1SgfbgwQPd0sohISFUqlRJt7Syo6PjC/dfeCCUObtD3riOMW1dGdFCpjIvjCQM5CH37t2jfv36lCxZksOHD+s9OSDE25aamsqnn37KsmXLGDx4MD/99JP8mcxliqJw5MgRfH198ff3Jysri06dOuHj40ObNm2eurSy3+kwxm+5kGM1fNe1Jt7SQlDoyAyEeURaWhpdunRBq9Wyfft2+UtXGFyRIkVYunQpy5cvZ926dTRq1Ijr168buqwCTaVS6WYzjIyMZO7cuYSEhNC+fXsqVqzI119/TUREhG778NgUpu64lKM1TNlxifDYlBw95quYOXMmDRs2xN7eHnNzcypXrszo0aN5+PChwWoqDKRlIA9QFIW+ffuydetWDh8+TL169QxdkhB6goOD8fLy4sGDB6xcuZIuXboYuqRCQ1EUAgMD8fX1xc/Pj7S0NN5//32GDh3Kxih7jt+MeaUxAi9ipFbRuEIJ1gxukGPHfBXdunXD3t6eqlWrUrRoUa5cuYKvry8ODg4EBQXJDKu5RMJAHjBz5kwmTZrExo0b6dGjh6HLEeKp4uPjGTRoEFu2bGHMmDHMnDkTExMTQ5dVqCQkJLBhwwaWLFnChTsPKe2zONfOtfezZrjYFkGr1Rp8JdQng6o3bNggq27mEukmMLCtW7cyadIkpk6dKkFA5GnW1tYEBAQwb948fvjhB1q2bElkZKShy8o1AQEBqFQqDh06lO29X3/9FZVKxcWLFzl//jwDBgygQoUKmJubU7JkSQYNGkRMTEy2/e7evcvgwYMpXbo0ZmZmlC9fnmHDhpGRkaHb5tGjR3z22We4uLhgZmZGmTJl6N+/P9HR0RQrVoyhQ4fy999/M/rnzRip/zfAOOn8Xu5824G08EvE7vmV8AW9CZvvTcyfC1GyMtGmJRG9cy7h870Jn+9N3IHl/PO7oOZRFHe+7UB84BaSzmynvnt1zMzMuHz5MtOmTUOlUnH9+nUGDBiAjY0N1tbWDBw4kJQU/S6FFStW0LJlSxwcHDAzM6N69eosXvxmocXFxUX32YjcIdNQGVBQUBB9+/ale/fu8gihyBdUKhWfffYZ9evXp0ePHtSuXZsNGzbQsmVLQ5eW4z744AOsrKzYtGkTnp6eeu9t3LgRNzc3atSowdy5c7l58yYDBw6kZMmSXLp0iSVLlnDp0iVOnjypeyIoMjKS+vXr8+jRI4YMGULVqlW5e/cuAQEBpKSkYGpqSlJSEk2bNuXKlSsMGjSIOnXqEB0dzY4dO4iIiMDOzk5XQ2BY0lO7B2L3/IqRVXFsmvYh/e5VkoL+RG1mSfrdKxgVs8fG8yNSb5wmIXALJnblsKrZSm//5At7UTQZlG3ckSltqmNra6t7r0ePHpQvX55Zs2Zx9uxZli5dioODA999951um8WLF+Pm5kanTp0wNjZm586d/N///R9arZbhw4e/1GevKAoxMTFoNBpCQ0MZP348RkZGNG/e/KX2F6/h7S2DIP7p3r17StmyZZW6desqycnJhi5HiFcWFRWltGrVSlGr1co333yjZGVlGbqkHNerVy/FwcFBbyGne/fuKWq1Wpk+fbqiKIqSkpKSbb8NGzYogHL48GHda/3791fUarVy+vTpbNtrtVpFURRlypQpCqBs2bLlmdsoiqIkpmUqLuN/U8r946fE+6MVQDEvX0dxHrdT97qZU1UFVIpV7fa615y/2K4YFbVTzMrW0L3m9MkyBVBUZhZKmZHrFJfxvylJaZmKoijK1KlTFUAZNGiQXk1dunRRSpQooffa0z6P9957T6lQoUL2D/gZ7t27pwC6nzJlyigbN2586f3Fq5NuAgN48uSARqNh+/btWFjIzF8i/3FwcOCvv/5i0qRJTJo0iY4dOxIbG2vosnKUt7c3Dx484ODBg7rXAgIC0Gq1eHt7A+g9+ZOWlkZ0dDQNGzYE4OzZs8DjCYa2bdtGx44dnzpA+EnrwebNm3F3d3/qAM1/zjlyJyaZZw32snJvq7etaakqgIJVrbb/O5baCNOSldDER2Xb38K1MUYW1ijA7Zhkvfc++eQTvd+bNm1KTEwMCQkJutf++XnEx8cTHR2Np6cnN2/eJD4+/hlV67O1tWXPnj3s3LmT6dOnY2dnR1JS0kvtK16PdBO8ZYqi4OPjQ1BQEIcPH8bJycnQJQnx2oyMjJg+fTqNGjWib9++1KlTB39/f9555x1Dl5Yj2rVrh7W1NRs3bqRVq8fN6Rs3bsTDwwNXV1cAYmNj+eqrr/Dz8+PBgwd6+z+5+T18+JCEhARq1Kjx3PPduHGDbt26PfW95ORkwsPDCQoKIuhODFlJj6eKVplZoDYx021nXMxebz+1mcV/X7f71+uWaNOy32CNbf43yVGGRqv3nrOz/vwDxYsXByAuLo5ixYoBcOzYMaZOncqJEyeyjSeIj4/H2tqa+Ph4UlNTda+bmprqdUeYmprSunVrADp06ECrVq1o0qQJDg4OdOjQIVvN4s1JGHjLvvvuO9auXcuGDRsKzF+YQrRv355z587RvXt33n33XebPn8+wYcPy/QyaZmZmdO7cma1bt7Jo0SKioqI4duwYM2fO1G3To0cPjh8/ztixY/Hw8MDKygqtVku7du3QarXPOfr/ZGRkcPfuXbRaLbdu3WLWrFmEh4cTFhZGeHg44eHhxMXFPXXfEu+PxqpW6/+9oHpGg+/TXn/Kw2Qq4/8FC1Nj/X2eNunR48M8Ps6NGzdo1aoVVatWZd68eZQtWxZTU1N+//135s+fr/s8Ro0axapVq3T7e3p66rW+/Fvjxo0pVaoU69atkzCQSyQMvEXbt29n4sSJTJ48WR6PEQWOs7Mzhw8fZsyYMQwfPpxjx47x66+/YmVlZejS3oi3tzerVq1i3759XLlyBUVRdF0EcXFx7Nu3L9s6IqGhobp/z8rKIiMjA0tLS/766y9sbW2z3eijoqJ0N9Tjx49z9epVypYtS9myZWnSpAlly5bF2dmZsmXLcufOHaysizNsQzAKYGKXO7MFqgCXEq/2TP/OnTtJT09nx44deq0IBw4c0Nvuiy++oG/fvrrfn7QwPE9aWtpLdzOIVydh4C0JDg6mT58+dO3alWnTphm6HCFyhZmZGT/99BNNmjTh448/5ty5c2zevJlq1aoZurTX1rp1a2xtbdm4cSNXrlyhfv36lC9fHgC1+vE358jISHbs2KG7yW/duhWAH374gW+++QaNRgPAmTNnuHjxIi4uLpQtW5aaNWvywQcfUKZMGZydndm2bRuLFi1i6dKl2cYNKIqi19LywzVL7uTiTIHOJSywNHu1W8STlgPlHy0O8fHxrFixQm+76tWrU7169Wz7Jycno1Kpso2j2rx5M3FxcTIhWy6SMPAWREVF0alTJ1xdXVm1apXuLxAhCqqePXvi7u6Ol5cX77zzDr6+vvTq1cvQZb2yxMREwsPDqV+/PuvXryc9PZ133nmH1q1b677Vw+N5B3799VfUajXm5ua6m3bNmjXp3bu3rrm8f//+JCYm0q5dO6pVq8a9e/fw9/fn6NGj2NjY0KhRIw4ePEj37t0ZNGgQdevWJTY2lh07dvDLL7/orSDZoooDawLv5Ojsg08YqVW0cHV45f3atm2LqakpHTt2ZOjQoSQlJelmD7x3794L9w8NDaV169Z4e3tTtWpV1Go1Z86cYe3atbi4uDBq1KjXuRzxEiQM5LL09HS6du1Keno627dvl6k0RaFRrVo1Tp06xdChQ+nduzdHjx5l3rx5mJmZvXjntyA9PZ2IiIhsTfZPfsLCwp7aLJ2ZmYmtrS3u7u6ULVsWCwsLNmzYwLlz54DHN8QFCxZQunRpWrVqxbBhw3T7njp1ismTJ7Nu3ToSEhJwcnKiffv2um/CVlZWHDlyhKlTp7J161ZWrVqFg4MDrVq1okyZMnp19GngzMoTt3Pls8nSKvRt+OrdD1WqVCEgIIAvv/ySMWPGULJkSYYNG4a9vT2DBg164f5lypShW7du7N+/n1WrVpGZmUm5cuUYMWIEkyZNokSJEq9zOeIlyHTEuUhRFAYMGMDGjRs5dOgQDRoYZq5vIQxJURR+/fVXRo0ahbu7O/7+/pQrVy5Xz5mVlcW9e/eeeqN/8vu/R/6XKFFC1y//z58nr5UuXTrPTb/cb1lggVubQBiGhIFcNHv2bL744gvWrVtH7969DV2OEAZ15swZvLy8SEhIYO3atbz//vuvdRxFUYiOjn7mt/nw8HAiIyPJysrS7WNlZfXcG32ZMmXy5Xwf4bEptJ5/iHTNyz218DLMjNXs/cyTsrb57/MQr0/CQC7ZuXMnH374IRMmTOCbb74xdDlC5AmxsbH079+fXbt2MWnSJL766qtsj6slJCQ889t8eHg4ERERpKWl6bY3NTV95k3+yY+1tXW+f8zxWfxOhzF+y4UcO953XWvi/U7uPKEg8i4JA7ngwoULNG7cmDZt2hAQECADBoX4r9TUVMLCwpg9ezbLly/HxcWFJk2aEB0drbvZ/3M2O7VaTenSpZ95ky9btiz29vaF/v+xhQdCmbM75I2PM7ZtFYa3qJQDFYn8RsJADnv48CH169fH2tqao0eP5vtnrIV4WRqNhsjIyKd+m3/y8/DhQ719VCoVxsbGNGzYEA8Pj2zf7kuVKoWxsYxzfhl+p8OYuuMSGq3yamMItFmYmZowvZObtAgUYhIGclB6ejqtW7cmNDSUU6dOZZu6U4jnuXnzJpGRkVSv/niluH8/V25IWq2Whw8fPnfk/b179/Rm3CtWrNgzv807OztTpkwZYmNj6dmzJ8ePH+e7777j888/zzPXnB+Fx6YwcesFjlyPxkitem4oePJ+6q2zjG1eljGfDHh7hYo8R8JADlEUhcGDB7Nu3ToOHjxIo0aNDF2SyAcyMjL44YcfmD9/PmlpaTg5OVGpUiXGjx9Pw4YN30ogUBSF+Pj4597oIyIiyMjI0O1jZmb23AF5ZcuW1c1V/yIajYaJEycye/ZsunTpwooVK7C2ts6tyy0UQqMSWRcYxoGQB4TFpOgtaqTi8YRCLVwd6NvQma/+83/89ddfhISEYGNjY6CKhaFJGMghc+fOZcyYMaxZs0Zvmk0hnmfnzp0MHz6cH3/8kTZt2nDx4kU+++wzHB0ddbPYvamUlJRsN/h/3/j/uSKckZERTk5Oz73R29nZ5XhI2bZtGwMGDMDe3p6AgAC9CXbE60tO13A7JpkMjRZTYzUuJSz1ZhaMjIzE1dWVIUOGMG/ePANWKgxJwkAO2LVrFx07dmTcuHHMmjXL0OUIA7t58yYLFy7k6NGjVK9enU8//ZS6detm206r1TJu3DiOHDnCyZMnda/37t2brKws1q5d+8Ln2jMzM7l79+4zb/Lh4eHExMTo7ePo6PjckfelSpV65oI0ue3GjRt4eXlx9epVFi1axMCBAw1SR2Hz7bffMnnyZIKDg586TbAo+CQMvKFLly7RqFEjWrZsyZYtWwr9qObCLiUlhQEDBhAXF8d7773HmTNn2LZtG0ePHn3qvOoLFy5k8uTJrF+/nsaNG3PgwAEWLFjA999/T926dYmKinrujf7evXt688Db2Ng8d+R9mTJl8swMgM+SmprKqFGj8PX1ZdCgQSxcuJAiRYoYuqwCLT09HTc3NypUqMBff/0l4zYKIQkDbyA6Opr69etTtGhRjh07Jk8OCHbs2EH//v35/fffady4MfB4oRtLS0sWLVqEk5OT7uYdFxdHSEgIAQEBBAQEcOfOHUxMTHQ/KSkpZGZm6o5dpEiRZ97on/xekP4Mrlq1imHDhuHq6kpAQACVKskjb7npt99+o2PHjmzbto0PP/zQ0OWIt0zCwGvKyMigTZs2XL16lVOnTuX69Koif/jkk0+IjIzk119/1Q3K8/f3Z9euXVStWhUjIyPdt/rk5GS9fUuVKkWFChUwNjbm+vXr2NnZMX36dMqUKUO5cuWwtbUtdN/Yzp8/j5eXF1FRUaxcuTLbSn4i5yiKwvvvv8+1a9e4fPky5ubmhi5JvEUSBl6Doij4+PiwZs0aDhw4oPsGKAqHjIwM7t69+9SR9ydPniQuLk5vKlyVSoWJiQm2trY0adIEJycnypUrh7OzM0WLFmXOnDk0btyYr776SrfP6tWrGTlyJI8ePTLAFeYtCQkJDB48mICAAP7zn/8wa9asPLdGQEFx7do1atSowbRp05g0aZKhyxFvkYSB1zB//nw+//xzVq1aRf/+/Q1djshBWVlZREVFPXfe+6ioKL1+eltbW11zfVJSEn///TezZ8+mWrVqulXtPv/8czIzM9m0aRMajUY3kU5qairu7u4MGTKEMWPGAI/DxsCBA7l27RpHjhyR/nIeB/AFCxYwduxYGjRowMaNG3FycjJ0WQXS2LFjWbRoEdeuXcu2UqIouCQMvKI//viDDh06MGbMGL777jtDlyNegaIoxMbGPnfe+7t376LRaHT7WFpaPnfkfdmyZfWWpT5//jweHh6cPn1a7wmCnj17YmRkxKpVq3RBQKvVolar+eyzz1i9ejUTJkygevXqHDt2jG3btjFz5kzpu/2X48eP06NHDzIzM1m/fj2tWrV67vanTp0iOjoaIyMjqlSpgouLy9spNB9LSEjA1dWVli1bsn79ekOXI94SCQOv4PLlyzRq1AhPT0+2bt1qsMevxNMlJiY+91n68PBwUlNTddubmJhQpkyZ5w7Ks7GxeeV+ekdHRz799FO+/PJL3Ws1a9bkww8/ZMaMGaxZs4Z9+/Yxfvx4qlatSkxMDKtWrWLLli2EhYVRo0YNBg4cyIcffoipqWmOfT4FxcOHD+nTpw/79u1j+vTpTJgwIdtTPI8ePWL48OHs2bMHa2tr0tPTsbS0ZMuWLVSrVs1AlecfK1euZODAgRw+fJimTZsauhzxFkgYeEnR0dE0aNAAS0tLjh07RtGiRQ1dUqGSnp5ORETEc+e9/2f/ukqlolSpUs+dDtfBwSFXHgWdNm0aGzduZMSIEQwfPpxNmzYxevRofv75Z7p06cL8+fP59ddfWbx4MS1atAAet1pkZmbKzf8lZWVl8fXXXzN9+nTatWvHmjVrKFGiBAAnT56kR48eFClShGnTplGnTh2KFy/O9OnTOXLkCMHBwQauPu/TarU0atSIjIwMzpw5I198CoFCHQZeNDPXExkZGbRt25bLly9z6tQpaWrMYVlZWdy7d++5N/qoqCi9fUqUKPHcR+xKly5tsEFmiYmJzJw5k127dhEXF0d8fDzjx49nwoQJqFQqkpKSMDIykrEAOeDPP/+kT58+WFlZ4e/vT0REBL169aJr1658//33lClTRteyc/LkSXx8fNixYwfly5c3cOV5X2BgIA0bNuSXX35h6NChhi5H5LJCFwZ0c3Zfe0BY7FPm7La1oEUVB/o0cKayY1EURWHo0KGsXLmS/fv38+677xqq9HxJURTd8rTPGpQXGRmpN/reysrqufPelylTBgsLCwNe1YspisLp06dJTEykXr16Mtd+LgoLC6N79+6cO3eOSpUq0axZM77++mvs7e31tvvxxx+ZNm0aV65cwdHR0UDV5i8DBw5k586dhIaGUrx4cUOXI3JRoQkDr7OaV9NKdlR+dIapY0awYsUKBgwY8PYKzicSEhJeuMBNWlqabntTU9NsN/l/f8O3trYudM/TizeTkZFBv3792LRpE82bN2fnzp1YWlrq/hxt376d8ePH0717d6ZPn27gavOP+/fv4+rqyoABA/jxxx8NXY7IRYUiDLzuOt9GahWajHTeUd8i4LvPc7HCvCktLe2FC9wkJCTotler1ZQuXfq5o+/t7e1lymaRK3bv3s2QIUOIiYmhbNmyBAQEULp0abZu3cr69esxMzNj1qxZ1KxZ09Cl5itz5sxh/PjxnDt3Tj67AqzAh4GFB0KZszvkjY8zpq0rI1pUzoGK8gaNRkNkZORzb/QPHz7U28fe3v65N/rSpUvrHpsT4m3TarWULVuWVq1aceLECSIiImjcuDGPHj2idOnSfP/999meJHgbS0TndxkZGdSsWRMnJyf27dsnn1cBVaDDgN/pMMZvuZBjx/uua02833HOseO9ipSUFFasWMH27du5cOECSUlJVKpUiSFDhjBkyBC90b6KovDgwYPnPmIXGRmJVqvV7VOsWLEXLnAjA95EXnf69GmGDRtGREQE0dHRZGVl0aBBA/bt24elpeVTb/7/nARKPN2ff/5J+/btCQgIoFu3boYuR+SCAhsGwmNTaD3/EOka7Ys3fklmxmr2fuZJWdu3P3jt4sWL1KpVi1atWtG0aVM0Gg179+7lxIkT1KxZEw8PD92NPiIigvT09P/VbWb2wgVuihUr9tavSYjcEBsby82bN3F0dGTDhg1MnjyZWrVq4efnR8WKFfW2jY6OZsiQISxevFgGFb5Ax44dOX/+PFeuXMnzA3jFqyuwYaDfskCO34x5pTECL2KkVtG4QgnWDG6ARqNBq9Xqngv/66+/mDx5MosXL37q2vUvKzU19anf5m/cuMGdO3d48OABSUlJuu1VKhWKolCnTh1cXV2feqO3s7OTpj1RKF2+fJnU1FS8vLyIj49nzZo1fPDBB3rb9O/fn6CgIM6fP2+gKvOH69ev4+bmxsSJE5k6daqhyxE5TXkN/v7+CqAcPHgw23u//PKLAigXLlxQgoODlY8++kgpX768YmZmpjg6OioDBw5UoqOjs+0XERGhDBo0SClVqpRiamqquLi4KJ988omSnp6u2yYuLk4ZPXq0Uq5cOcXU1FRxcnJS+vXrpzx8+FDvWCH3E5Ry43/T/ZR4f7QCKI59vlOK1u2oqIsUU1RmloqVRzvFeexWpexoP8XSrYWiNrNU1GaWSrEGXRXncTt1+zt9skwBFJsWg5TirXyUsuVcFLVarZw7d0754osvFED3Y25urhQrVkwZMGCAkpycrFeXr6+v0qhRI8XGxkYxNjZWHBwcFE9PT6VTp05K7dq1lRIlSugdC1AcHByUevXqKV26dFFGjhypzJ49W/Hz81OOHz+uhIeHK1u3blUAZceOHa/zn1KIAuuXX35RKleurGzfvl2JiYlROnTooADKpEmTFI1Go9suLS1NqVixojJq1CjDFZtPjBs3TjE3N1du375t6FJEDnutjrIPPvgAKysrNm3ahKenp957GzduxM3NjRo1ajB37lxu3rzJwIEDKVmyJJcuXWLJkiVcunSJkydP6r6tRkZGUr9+fR49esSQIUOoWrUqd+/eJSAggJSUFExNTUlKSqJp06ZcuXKFQYMGUadOHaKjo9mxYwcRERHY2dnpalgXGPbUxwdj9/yKkVVxbJr2If3uVZKC/kRtZkn63SsYFbPHxvMjUm+cJiFwCyZ25bCqqT/vefKFvSiaDOp06sXntZ05efIkP/30k+59lUqFm5sbNjY2rFy5kosXL1K+fHndN/zIyEj9emJjOXToENWrV6dp06Z069ZNrxnfycnphcuI/vHHHwB61y+EgIYNG1KvXj1KlSqFra0t27dv5/vvv2fSpEmcOHGC9evXU6JECczMzPD396dRo0a0bduW999/39Cl51mTJk1i9erVjB07lk2bNhm6HJGDXruboHfv3uzbt4/IyEjd4LX79+/j5OTEtGnTmDx5MqmpqdkGnfn5+dGrVy+9Oa8/+ugj1q5dS2BgIPXq1dPbXvnvgJ+pU6cyffp0tmzZkm1Nc+Vfg4I8Zx/gTmyK7vek83uJ+f0HzMvXwaHHV7pt768ZQ/rda1jVbkeJ94Y/PpY2i7uLB2NsU5KSfb4FQPMoiru/DEZlZoHTUF/KOzkSu3oUly5deubn8+TxuRYtWuhu7iVLlqRixYq634sWLUq7du0IDQ3lxo0bL//h/1dGRga1a9cmNTWVkJAQGQQlxL+kpKTo+ref/D2xf/9+evfujVqtZuPGjdSuXZsiRYrQq1cvjhw5wvXr1/UWnxL61q5dS79+/di/f79uOm2R/732A9/e3t48ePCAgwcP6l4LCAhAq9Xi7e0NoBcE0tLSiI6OpmHDhgCcPXsWePw40LZt2+jYsWO2IADobtybN2/G3d09WxD45zYASekawv4RBP7Jyr2t3rampaoACla12v7vWGojTEtWQhMflW1/C9fGGFlYExaXRsjNO089R5UqVXj48CGzZ89Gq9WyZcsWVqxYwfTp0/m///s/3nvvPapXr45WqyU6OhpPT09u3rxJfHz8U4/3PCNGjODy5cssXLhQgoAQT/EkCGi1Wt3/+y1btmTv3r04ODjQvHlzatWqhaurK3/88QfFixfnt99+M2TJeV6fPn1o1KgRo0aN0lvhU+Rvrx0G2rVrh7W1NRs3btS9tnHjRjw8PHB1dQUeN4OPGjUKR0dHihQpgr29vW5O8Cc3v4cPH5KQkECNGjWee74bN268cJv79+/z95WbaJLiyEqKQ5uZrve+cTH96UnVZhb/fd3uX69bok1L4t+Mbf432vj01dvs2LEj23PL0dHR2NnZYWtrC0BcXJzuvWPHjtG6dWssLS2xsbHB3t6eiRMnAv/7POLj47l//77uJzY29qnXOnv2bHx9ffn666+lWVOIF1Cr1Zw9e5ZffvkFHx8f2rZtS2JiImZmZty6dQszMzNOnTrFkSNHdF9mxNOpVCp+/PFHLl68yK+//mrockQOee0wYGZmRufOndm6dSsajYa7d+9y7Ngxvf+RevToga+vL5988glbtmxh9+7d/PnnnwB6z7jnlFKlStG8dhUiFvYjYmE/Uq4c0d9A9YzLfdrrT+k9URmb6f5di5qOHTvSo0cPAObOnUujRo0oXbr0vw7z+Dg3btygVatWREdHM2/ePHbt2sWePXv47LPPHh/vv5/HqFGjKFWqlO6na9eu2epYuXIl48aN45NPPtFbJlcI8XTXrl2jXr16/Pzzz5w7d45x48Yxb9484uLi2LZtG5GRkXTs2JHw8HBDl5ov1KtXj8GDBzN58mRiYmIMXY7IAW/Utuzt7c2qVavYt28fV65cQVEUXRiIi4tj3759fPXVV0yZMkW3T2hoqN4x7O3tKVasGBcvXnzuuSpWrPjCbfbs2cPt6GQmbX+8nYld7k0QZGqsHyD69+/P558/e8rinTt3kp6ezo4dO3B2/l9dBw4c0Nvuiy++oG/fvrrf/704yPbt2/n444/p2rUrP//885tcghCFRpUqVThz5gxFixalcmX9mUQ7duzI2bNn8fLyomHDhvz8888MHjzYQJXmH9988w3+/v5MnjyZRYsWGboc8YbeaJL41q1bY2try8aNG9m4cSP169fXdQM8GVT47/GJP/zwg34BajWdO3dm586dnDlzJts5nuzfrVs3goOD2bp16zO3ad26Nb26fICFiwdFXDwwtrJ9k8t7NkUh+OhevS6AF3na5xEfH8+KFSv0tqtevTqtW7fW/fxzzoLDhw/Ts2dPmjVrxrp162SOfyFeQZ06dXRB4J+rZKrVaipUqMDx48fp378/H3/8MYMGDSIl5eljj8RjDg4OTJs2jV9//ZWgoCBDlyPe0Bu1DJiYmNC1a1f8/PxITk5mzpw5uveKFStGs2bN+P7778nMzMTJyYndu3dz69atbMeZOXMmu3fvxtPTkyFDhlCtWjXu3buHv78/R48excbGhrFjxxIQEED37t0ZNGgQdevWJTY2lh07dvDLL7/g7u4OgKWZMc62FnpPE+S45Gj6eA9ErVZTqlQp4PFa6e+99x4mJiZP3aVt27aYmprSsWNHhg4dSlJSEr6+vjg4OHDv3r0XnvLOnTt06tQJlUqFl5cX/v7+eu/XqlWLWrVqvfm1CVEI/HP67ifMzc1ZsmQJTZo0YdiwYfz9998EBARka0kQ/zN8+HCWLFnCyJEjOXTokExulo+98VdLb29v3Yx4T/rPn1i/fj3vvfceP//8MxMmTMDExET3XPw/OTk5ERgYiJeXF+vWrWPkyJGsXr2a5s2b60YDW1lZceTIEYYNG8bvv//OyJEjWbRoEVWqVKFMmTJ6x2tRxQEjde78oTRSqxjQ5h1u377Nr7/+qlunvmPHjpQoUYIPP/yQhQsXcv/+fb39qlSpQkBAACqVijFjxvDLL78wZMgQRo0a9VLnvXXrFvHx8aSmpjJ8+HD69eun97Nly5Ycv1YhCqOPPvqIwMBAUlNTqVu3Lps3bzZ0SXmWiYkJCxYs4MiRIzLvQD5XIKcjDo1KpM0Ph3Pt+Hs/a0Ylh6K637Oysjh37hy7d+9m9+7dHD9+nMzMTMqVK0ebNm1o27YtrVq10j1hIITI+xISEhg8eDABAQF89tlnfPfdd89s+SvsunTpwpkzZ7h69arM0ZBPFcgwALm/NsHzJCUlcejQIfbs2cPu3bu5cuUKKpWKevXq6cJBo0aNdOsaCCHyJkVR+PHHHxkzZgz169dn06ZNODk5GbqsPOfmzZtUr16dsWPH8vXXXxu6HPEaCmwYyEurFkZERLBnzx7dT3R0NJaWljRv3lwXDqpWrSr9bULkUSdOnKBHjx6kp6ezfv16WrdubeiS8pwvv/ySOXPmcOXKFd1AcpF/FNgwAOB3OozxWy7k2PG+61oT73fe7HFFrVZLcHCwrkvh6NGjZGRkUKZMGb0uBXt7+xcfTAjx1jx8+JA+ffqwd+9evvrqKyZNmiRP9PxDcnIyVapUoX79+jKGKR8q0GEAYOGBUObsDnnj44xtW4XhLSrlQEX6UlJSOHz4sK5L4clcCnXq1NGFgyZNmmBmZvaCIwkhcltWVhZff/0106dP57333mPt2rWUKFHC0GXlGU/WntmzZ4+0nuQzBT4MwOMWgqk7LqHRKq80hsBIrcJYrWJ6J7c3bhF4WZGRkezdu5fdu3ezZ88eHjx4QJEiRfD09KRt27a0adMGNzc36VIQwoD++usv+vTpg4WFBf7+/jRo8PxxRIWFoih4enoSExNDUFCQDLjMRwpFGIDHYwgmbr3AkevRT13e+J+evN+0kh0zu9R85TECOUWr1XLhwgVdq8GRI0dIS0ujVKlSulaD1q1b4+jo+OKDCSFyVHh4OD169ODvv/9m3rx5DB8+XEI6EBQURN26dZk3b95LPzotDK/QhIEnQqMSWRcYxoGQB4TFpPDPi1cBziUsaOHqQN+GznqPD+YFqampHD16VBcOgoODAXB3d9eFg3fffTfbstFCiNyRkZHBF198wYIFC+jZsydLliyhaNG89feGIQwbNowNGzYQGhoq45/yiUIXBv4pOV3D7ZhkMjRaTI3VuJSwxNIs/ywFHBUVpdelcO/ePczNzWnatKmuS6FWrVrybUWIXLZp0yYGDx5MmTJlCAgIwM3NzdAlGVR0dDSVK1eme/fuLFmyxNDliJdQqMNAQaIoCpcuXdK1Ghw6dIjU1FQcHR1p3bq1Lhw8mT5ZCJGzrl27Rrdu3bh16xZLliyhT58+hi7JoBYuXMjIkSM5ffq03horIm+SMFBApaWlcfz4cV04OHv2LAA1atTQBYNmzZrppnsWQry55ORkhg0bxpo1a/jkk0+YP38+5ubmhi7LIDQaDbVr16ZYsWIcPXpUWijzOAkDhcTDhw/Zt2+frkshIiICU1NT3n33XV048PDwkOemhXhDiqLg6+vLp59+Ss2aNQkICMDFxcXQZRnEgQMHaNmyJWvXri30LSV5nYSBQkhRFK5evaprNTh48CDJycnY2dnpdSn8ewEoIcTL+/vvv+nevTuPHj1i9erVdOjQwdAlGUT37t05duwY165dk8GVeZiEAUFGRgYnTpzQtRqcOXMGRVGoVq2aLhh4enpiZWVl6FKFyFfi4uL46KOP2LlzJxMmTGD69OkYG+efQco54c6dO1StWpXRo0cza9YsQ5cjnkHCgMgmJiaG/fv366ZMDgsLw8TEhMaNG+vCQZ06dZ66JrwQQp9Wq2XOnDlMmDCBZs2asWHDBkqWLGnost6qadOmMWvWLC5dukSlSjk/k6t4cxIGxHMpikJoaKiuS+HAgQMkJiZia2tLq1atdOGgXLlyhi5ViDzt0KFDeHt7o1ar8fPzo1mzZoYu6a1JSUmhWrVquLu7s2PHDkOXI55CwoB4JZmZmQQGBuq6FE6dOoVWq8XV1VUXDJo3b06xYsUMXaoQec69e/fo1asXR48eZdasWYwZM6bQjLIPCAige/fu/P7777Rv397Q5Yh/kTAg3khcXBwHDhzQdSncunULY2NjGjZsqAsH9erVK3T9pEI8i0ajYfLkyXz77bd8+OGHrFy5EhsbG0OXlesURaFly5ZERkZy4cIFTE1NDV2S+AcJAyJH3bhxQ9dqsG/fPhISErCxsaFly5a6cFChQgVDlymEwe3cuZP+/ftja2tLQEAAtWvXNnRJue7ChQt4eHjw/fff85///MfQ5Yh/kDAgco1Go+H06dO6cHDy5EmysrKoWLGiLhi0aNGiUHwrEuJpbt68Sffu3bl06RILFy5k8ODBBb7bYMSIEaxevZqQkJBCN5AyL5MwIN6a+Ph4Dh48qAsHoaGhGBkZUb9+fV04aNCggXQpiEIlLS2N0aNH8+uvv/LRRx+xaNGiAj0zaGxsLJUrV6ZTp06sWLHC0OWI/5IwIAzm1q1b7Nmzhz179rB3714ePXpEsWLFaNmypW4VxooVKxb4b0pCAKxZs4ahQ4dSqVIlAgICcHV1NXRJueaXX35h2LBhBAYGUr9+fb33zp07xx9//MGtW7do0KABLVq0oEKFCvL3QC6TMCDyhKysLP7++29dq8Hx48fRaDS4uLjoWg1atmyJra2toUsVItdcvHiRbt26ce/ePZYvX46Xl5ehS8oVWVlZ1K1bFzMzM06cOEFcXByLFi1i2bJlREREUKFCBWrWrMnRo0dxcXFh0qRJdOrUydBlF2gSBkSelJiYyKFDh3Th4OrVq6jVaurVq6cLBw0bNpQRyaLASUxM5OOPP2bTpk2MHj2a7777rkD+OT98+DCenp788MMPHDhwgEuXLtGjRw+8vLwoV64cZmZmJCUl8fPPP7NlyxYuXrxo6JILNAkDIl8ICwvT61KIiYnBysqKFi1a6LoUXF1dpSlRFAiKorBw4UL+85//UK9ePTZt2lQg1wrp1asXO3bsoFixYvj7+9OgQQNMTEz0tjlz5gxt27blxo0bFC9e3ECVFnwSBkS+o9VqOXfunK7V4OjRo2RmZlK2bFldq0GrVq2ws7MzdKlCvJGTJ0/So0cPUlNTWb9+PW3atDF0STnq6tWruLm50a5dO3bt2vXUbcaNG0dwcDB+fn7y5FEukjAg8r3k5GQOHz6sm/jo8uXLqFQq6tSpowsHjRs3xszMzNClCvHKoqOj6dOnD3v27GHatGl8+eWXBWqpcTs7O+Li4rh8+TJVqlQBHj95FBQUxNq1a1m9ejXz5s1j+PDhBq60YJMwIAqcu3fv6roU9uzZw8OHD7GwsKB58+a6LoVq1apJl4LIN7Kysvjmm2+YNm0abdu2Ze3atQWm5evbb79lypQplC1blgkTJvDw4UOuX7/OtWvXUKlU9O/fHx8fH0OXWeBJGBAFmlar5fz587pWg6NHj5Kenk7p0qV1rQatW7fGwcHB0KUK8UJ79uyhd+/emJub4+/vT8OGDQ1d0htLTU1lwoQJLFiwgLJly+oGD7777rt07dqVWrVqGbrEQkHCgChUUlJSOHLkiG4VxgsXLgDg4eGhCwfvvvsu5ubmBq5UiKcLDw/H29ubM2fOMHfuXEaMGJHvW7kURaFt27aEhoaya9cu3NzcDF1SoSNhQBRq9+7dY+/evbpwEBUVhbm5OZ6enrouhRo1auT7v2xFwZKRkcG4ceP44Ycf6NGjB0uXLqVo0aKGLuuNBAcHU7duXWbMmMG4cePQarWoVKoCNT4iL5MwIMR/KYrCxYsXdV0Khw8fJi0tjZIlS9KmTRvdj8ynLvKKgIAABg0aROnSpQkICKBGjRqGLum1JCQk8N577xEdHc29e/cICQmhdOnShi6rUJEwIMQzpKWlcfToUV2rQVBQEAA1a9bUdSk0bdq0QM8jL/K+kJAQvLy8uH79Or/++iv9+vUzdEmvZfz48ZiZmfHzzz/Tvn171qxZg6IoqFQq0tLSuHz5Mo6Ojjg5ORm61AJJwoAQL+nBgwd6XQqRkZGYmZnRtGlTXZdCrVq1pFlTvHUpKSkMGzaM1atXM3ToUH744Yd8N+5Fo9FgbGzM0qVL8fHx4c8//+S9994DYPbs2ezcuZNbt24xbNgwPv/883x3fXmdhAEhXoOiKFy5ckXXpXDo0CFSUlKwt7fX61KQbzHibVEUhWXLljFixAjc3NwICAigfPnyhi7rlT2ZcTAtLQ1vb2+6d+/O559/TpcuXbC1tWXjxo34+PgwdOhQQ5daoEgYECIHpKenc/z4cV2rwdmzZ1EUBTc3N12rQbNmzbC0tDR0qaKAO3fuHF5eXsTGxrJ69Wo6duxo6JJeSb9+/Th9+jTXrl2jQYMGZGRk4OzszLZt2wCYM2cO69ev5+zZs4YttICR9kwhcoCZmRktWrRg5syZnDlzhgcPHuDn50eDBg3YvHkz77//Pra2trRs2ZJZs2bx999/o9VqDV22KIBq167N33//jaenJ506dWL8+PFoNBpDl/VSgoKCCAoKYty4cfTt25ebN2/St29fTp48qdumSZMmJCUlkZycbMBKCx5pGRAilymKwrVr13StBgcPHiQpKYkSJUrQunVrXctB2bJlDV2qKEAURWHOnDlMmDCBd999Fz8/vzz/JEx4eDj16tXj7NmzqFQqXF1d6dmzJytWrGDBggW4ubkxe/ZsTExMWL16NdbW1oYuucCQMCDEW5aRkcHJkyd14eDMmTNotVqqVq2qCwaenp75/rlxkTccPnwYb29vAPz8/PD09DRwRc9XuXJlJkyYwKBBg/j222+ZNGkS1atXx93dneDgYABmzJjBhx9+aOBKCxYJA0IYWGxsLPv379cNRrxz5w7GxsY0btxYFw7q1q2LkZGRoUsV+dT9+/fp1asXhw8fZubMmYwdOzbPPvXy448/snTpUho0aECdOnUYPXo0zs7OhISEsGfPHhwdHXF3dzd0mQWOhAEh8hBFUbh+/bqu1WD//v0kJiZSvHhxWrVqpQsHLi4uOXre1NRUjh07xpUrV2jXrh2VK1fO0eMLw9NoNEyZMoVZs2bRqVMnVq5cSfHixQ1dVjbJycn4+/uzcOFCwsPDqV69OgcPHmTr1q107tzZ0OUVWBIGhMjDMjMzOXXqlC4cBAYGotVqqVy5si4YtGjRgmLFir32Oc6dO8e3337L77//zjvvvMOJEycYPHgwc+fOlWWfC6DffvuNfv36Ubx4cQICAqhTp46hS3qqhw8fYm9vj6IovP/++1y7do3Lly/L/AK5RMKAEPnIo0ePOHDgALt372bPnj3cuHEDIyMjGjZsqAsH77zzDsbGxi99zHr16uHo6MiIESNo3749f/75J1988QUrVqygbt26uXg1wlBu3bpF9+7duXjxIj/++CM+Pj55av2NJzMPwuOVR0NCQqhZsybTpk1j0qRJBq6ugFKEEPnWjRs3lF9++UXp2rWrYm1trQCKtbW10qVLF2Xx4sXK9evXn7v/ihUrFHNzc+X48eN6rzs4OCjz58/PxcqFoaWmpiqffPKJAij9+vVTkpKSDF3Sc/3nP/9RLCwslLCwMEOXUiBJy4AQBYRGo+HMmTO6LoWTJ0+i0WioUKGCrtWgZcuW2NjY6PapWrUqrVq14qefftINKLt37x4tW7Zk5MiRDBs2TO8cyj++sYmCYe3atQwdOpQKFSoQEBBAlSpVDF3SUyUkJODq6kqLFi3YsGGDocspcCQMCFFAJSQkcPDgQV2XQkhICGq1mvr16+tWXxw5ciQnT56kXr16uv38/f2ZM2cOn3/+Od7e3tkCQGJiIufOnSMrK4sWLVoY4tJEDrt06RLdunXj7t27LFu2jB49ehi6pKdauXIlAwcO5PDhwzRt2tTQ5RQoEgaEKCTu3LmjazXYt28fsbGxGBkZ0bp1azp27EibNm2wt7fnyy+/5PTp0+zdu5dixYqhKApZWVkYGxuza9cuZs2aRXR0NGq1msTERObMmaN7jl3kX4mJifj4+LBx40ZGjhzJ7NmzMTU1NXRZerRaLY0aNSI9PZ2///5bHrfNSQbroBBCGIxGo1G+/PJLpWjRokqTJk0UExMTBVDs7OwUe3t7pVevXkpMTIySlZWlt1+FChWUwYMHK4cPH1bS0tKUuXPnKi1atFDu3r1roCsROUmr1So//fSTYmJiojRs2DBP9s+fPHlSAZTFixcbupQCRVoGhCikzp49y4ABA/j222+pV68eq1atYubMmWi1WhISElCpVNSrV0833kCr1dKrVy82btyom8UuNTWVcuXKMW/ePPr27WvgKxI5JTAwkO7du5OSksK6det0SwnnFQMHDmTnzp2EhIRga2tr6HIKhLw5BZUQItfVrFmTrl270qVLF1q2bMm8efNo3rw5QUFBhIeHs3TpUipWrMiSJUto3rw5HTp0IDExkVWrVnHlyhUURSExMRF3d3fi4+MNfTkiBzVo0IBz587xzjvv0L59e6ZNm0ZWVpahy9KZNWsWGRkZTJ061dClFBjSMiBEIRcbG8vOnTupU6cOlStXxtzcnA0bNlCzZk1q1KiBVqslKCiI33//nZ9++okHDx4AULp0aSwtLYmMjOS7775j+PDh8rRBAaPVavnmm2+YOnUqbdq0Ye3atdjb2xu6LODxUsbjxo0jKCiImjVrGrqcfE/CgBBCT0hICM2bN6dLly4sXLgw28194sSJLFmyBHNzcyIjI3nyV0idOnV0XQpNmjSR2QsLkL1799KrVy/Mzc3ZtGkTjRo1MnRJZGRkULNmTZycnNi3b5+E0DckYUAIkY2fnx92dna0bt2ahIQEQkJCqFixot5c9mvWrGHatGl07NiROnXq8Ndff7F3714ePHhAkSJF8PT0pG3btrRp0wY3Nzf5yzqfi4iIwNvbm1OnTjFnzhxGjhxp8P+mf/zxB++//z7+/v54eXkZtJb8TsKAEOK5IiIimDhxIpUqVWLcuHEkJycTFhbG//3f/6HVatm/fz8WFhbA42blCxcu6OY2OHz4MOnp6ZQqVUrXatC6dWscHR0NfFXidWRmZjJ+/HjmzZuHl5cXy5Yte6N1MXJCx44dOX/+PFeuXNH9ORSvTsKAEOKF/P39GTt2LIqi4OTkRHBwMJ07d2bUqFHUr18frVb71CVxU1NTOXr0qC4cPFmP3t3dXddq8O6771KkSJG3fUniDWzevJmBAwdSqlQpAgICDNpnf/36ddzc3Jg4caIMKHwDEgaEEC9t165dREVFUbt2bWrXrv3K+9+/f5+9e/fqJj+6f/8+5ubmNG3aVBcOatWqZfDmZ/FioaGheHl5ERoayi+//EL//v0NVsv48eNZsGABV69epVy5cgarIz+TMCCEeC1v+uSAoihcunRJ12pw6NAhUlNTcXR0pE2bNrqfUqVK5WDVIielpKQwfPhwVq5ciY+PDz/++KNBlhhOTEykSpUqNGnSBH9//7d+/oJAwoAQIk9IS0vj+PHjunBw9uxZAGrUqKFrNWjWrJn0C+dBy5cvZ/jw4VSrVo2AgAAqVKjw1mtYu3Yt/fr1Y//+/bJmxmuQMCCEyJMePnyo16Vw9+5dTE1Neffdd3XhwMPD46ljFcTbFxQUhJeXF9HR0axevZpOnTq91fMrikKTJk10C2kZGxu/1fPndxIGhBB5nqIoXL16VddqcPDgQZKTk7Gzs9PrUihTpoyhSy3UHj16xMCBA9m2bRtffPEF33zzzVu9KZ85c4b69evz448/MmLEiLd23oJAwoAQIt/JyMjgxIkTunBw5swZFEWhWrVqulYDT09PrKysDF1qoaMoCvPmzWPcuHE0adIEPz+/tzruw8fHh82bNxMSEoKdnd1bO29+J2FACJHvxcTEsG/fPl2XQlhYGCYmJjRp0kQ3v0Ht2rVlydu36MiRI3h7e6PVavHz86N58+Zv5bwPHjzA1dWVXr16sXjx4rdyzoJAwoAQokBRFIXQ0FBdq8H+/ftJSkrC1taW1q1b67oU5BG03BcVFUWvXr04dOgQ33zzDV988cVbGePxww8/8Pnnn3P27Fk8PDxy/XwFgYQBIUSBlpmZycmTJ3WtBqdPn0ar1eLq6qrrUmjevLnBZ9IrqLKyspg6dSrffPMNHTp0YPXq1XrTWueGzMxM3N3dsbOz49ChQzJvxUuQMCCEKFTi4uLYv3+/LhzcunULY2NjGjVqpOtSqFevnnQp5LBdu3bRr18/rK2t8ff3p169erl6vj179tC2bVs2bNhAz549c/VcBYGEASFEoXbjxg1dl8K+fftISEjAxsaGVq1a6cJB+fLlDV1mgXD79m26d+/O+fPn+fHHHxkyZEiufmvv0qULp0+f5tq1a1haWubaeQoCCQNCCPFfGo2GU6dO6VoNAgMDycrKomLFirouhZYtW2JtbW3oUvOt9PR0Pv/8cxYtWkTfvn355Zdfcu1GffPmTapXr87YsWP5+uuvc+UcBYWEASGEeIb4+HgOHDigCwfXr1/HyMiIBg0a6FoN6tevLxPcvIb169fj4+ND+fLlCQgIoGrVqrlyni+//JI5c+Zw+fJlg8yMmF9IGBBCiJd069Yt9uzZw549e9i7dy+PHj2iWLFitGzZUhcOKlasKAPWXtLly5fp1q0bERERLF26FG9v7xw/R3JyMlWqVOGdd95h69atOX78gkLCgBBCvIasrCzOnDmjazU4ceIEGo2G8uXL64JBy5Ytc33kfH6XlJSEj48Pfn5+fPrpp8yZMwdTU9McPYefnx+9evVi9+7dtGnTJkePXVBIGBBCiByQmJjIwYMHdeHg2rVrqNVq3nnnHV04aNiwISYmJoYuNc9RFIXFixczevRo6tSpw6ZNm3B2ds7R43t6ehIdHU1wcLD8N3gKCQNCCJELwsLCdMFg7969xMbGYmVlRYsWLXThwNXVVboU/uHUqVN0796dpKQk1q1bR7t27XLs2EFBQdStW5e5c+cyevToHDtuQSFhQAghcllWVhbnzp3ThYNjx46RmZmJs7OzLhi0atWKEiVKGLpUg4uJiaFfv378+eefTJ48mSlTpuTYnA/Dhg1jw4YNhISE4ODgkCPHLCgkDAghxFuWlJTE4cOHdeHg8uXLqFQq6tatqwsHjRs3zvG+8/xCq9Uya9YspkyZQsuWLVm/fj329vZvfNzo6GgqV66Ml5cXvr6+OVBpwSFhQAghDCwiIoK9e/fquhQePnyIhYUFzZs314WDatWqFbouhX379tGrVy9MTU3ZtGkTjRs3fuNjLly4kJEjR3L69Gnq1q2bA1UWDBIGhBAiD9FqtQQHB+taDY4ePUp6ejpOTk66YNC6desc+aacH9y9exdvb28CAwP5/vvvGT169BuFIo1GQ+3atSlatCjHjh0rdAHrWSQMCCFEHpaSksKRI0d04eDChQsA1K5dWxcOmjRpgrm5uYErzT2ZmZlMmDCBuXPn0q1bN5YvX/5GC0sdOHCAli1bsmbNGvr27ZuDleZfEgaEECIfuXfvnq5LYc+ePURFRVGkSBGaNWummzK5Ro0aBfIb75YtWxg4cCCOjo4EBARQq1at1z5W9+7dOXbsGNeuXaNo0aI5WGX+JGFACCHyKUVRuHDhgq7V4PDhw6SlpVGqVClat26t61IoWbKkoUvNMdevX8fLy4tr166xePFiBgwY8FrHuXPnDlWrVmX06NHMmjUrZ4vMhyQMCCFEAZGWlsbRo0d14SAoKAiAWrVq6boUmjZtSpEiRQxb6BtKTU1lxIgRLF++nI8//pgff/zxta5p2rRpzJo1i4sXL1K5cuVcqDT/kDAghBAFVFRUFPv27dN1KURGRmJmZkbTpk11XQq1atVCrVYbutTXsnz5coYPH07VqlUJCAigYsWKr7R/SkoK1apVo1atWuzcuTOXqswfJAwIIUQhoCgKly9f1rUaHDx4kNTUVBwcHHRdCm3atKF06dKGLvWVBAcH4+XlxcOHD1m5ciWdO3d+pf0DAgLo3r07v//+O+3bt8+dIvMBCQNCCFEIpaenc/z4cV2rwdmzZ1EUBTc3N10waNasGZaWloYu9YXi4+MZNGgQW7ZsYcyYMcycOfOl1x9QFIWWLVsSGRnJhQsXCu1ETxIGhBBCEB0dretS2L17NxEREZiamtKkSRNdOKhdu3ae7VJQFIX58+fzxRdf0LhxY/z8/F66lePChQt4eHjw3XffMWbMmFyuNG+SMCCEEEKPoihcu3ZN12pw4MABkpOTsbOzo1WrVrpwULZsWUOXms3Ro0fx9vZGo9Hg5+dHixYtXmq/Tz/9lFWrVhESEsL9+/eZPXs2EydOxM3NLZcrzhskDAghhHiujIwMTp48qQsHp0+fRlEUqlatqgsGzZs3x8rKytClAvDgwQN69+7NgQMH+Prrrxk/fvwLWzRiY2OpVKkS9vb2hIaGoigKP/zwA6NGjXpLVRtW3mzvEUIIkWeYmprSrFkzZsyYQWBgINHR0fj7+9O0aVO2b99Ox44dsbW1xdPTk2+++YZTp06RlZVlsHodHBz466+/mDhxIpMmTaJTp07ExsY+c3uNRsP69etJTU0lJCQERVEwNjYmLi7uLVZtWNIyIIQQ4rUpisL169d1rQb79+8nMTGR4sWL63UpuLi4GKS+P/74g759+1K0aFECAgKoV69etm0GDx7M8uXL9V4zMTFh2LBhLFiw4G2ValDSMiCEEOK1qVQqKleuzPDhw9m2bRsxMTEcPXqUTz/9lLt37/LJJ59Qvnx5XF1dGTFiBNu3bychIeGt1de+fXvOnj2Lg4MDTZo0YfHixTz5DhwREcF//vMfunbtioODA0ZGRrr9srKyClXLgIQBIYQQOcbExIQmTZrw1Vdfcfz4cWJiYtiyZQutWrXizz//pHPnztja2vLuu+8yffp0Tp48iUajydWaypUrx5EjR/Dx8eH//u//6NevH7GxsXTt2pV58+Zx/vx5rl27pje1sVar5eHDh7laV14i3QRCCCHemhs3brBnzx727NnDvn37iI+Px9ramlatWummTK5QoUKunX/Dhg34+PhgamrKo0ePUBQFGxsbIiIisLS0ZN++ffTr14979+5RunRp7t69q7d/crqG2zHJZGi0mBqrcSlhiaWZca7V+7ZIGBBCCGEQGo2GM2fO6MYbnDhxgqysLCpUqKAba9CyZUtsbGxy9Lzz5s3jP//5j+53lUrFnDlz+PzzzwFITk7Gy8uLrKwsdu/eTWhUIusCwzhw7QFhsSn886apApxtLWhRxYE+DZyp7Jg/V0CUMCCEECJPSEhI4MCBA7opk0NDQ1Gr1dSvX5+2bdvStm1b6tev/9KzCz7NtWvXqF27NqmpqXqv29nZERYWprfgUXhsChO3XuDI9WiM1CqytM++XT55v2klO2Z2qUlZW4vXrtEQJAwIIYTIk27fvq3rUti7dy9xcXEULVqUli1b6roUKlWqhEqleuljzpo1i4kTJwKPxzdkZmbq3vvqq6+YMmUKAH6nw5i64xIarfLcEPBvRmoVxmoVX3Vyo+c7zi+9n6FJGBBCCJHnZWVlcfbsWV2XwrFjx9BoNJQrV07XpdCqVStsbW2feYywsDA+/fRTduzYwbx58wgNDeX06dMEBweTmZmJtbU1jx49YuGBUObsDnnjmse0dWVEi/yxNLKEASGEEPlOYmIihw4d0nUpXL16FZVKRb169XRdCg0bNtRbeGjo0KEsWbIEgMjISEqVKgX8L2goisJNVUnGb7mQY3V+17Um3vmghUDCgBBCiHwvPDxc16WwZ88eYmJisLS0pEWLFrRp00b38+TpgKZNm7Jr1y6KFv3fgL/w2BRazz9EukabY3WZGavZ+5lnnh9DIGFACCFEgaLVajl37pyu1eDYsWNkZGTobaNWq6lRowZ//fUXJUuWBKDfskCO34x5pTECL2KkVtG4QgnWDG6QY8fMDRIGhBBCFGjJycmMGzeOn3/++anvW1tb82H3Xhy0aYvK+HG3QtL5PSRdPEBm9B206cmY2JSiaN2OFK3zvt6+6fdCeXR4NRn3b6BkpqG2LI65c03sPhit20ZRtPS1vMQ2vzXcuHEDa2trOnfuzLfffkvx4sVz7bpfRf6fKUEIIYR4DktLS8LDw1GpVDzt+6+joyOrl/6CVY0QSnR4PNdA4rnfMbErh0XlBqBWk3r9FLG7F4GipWjdDgBkJT/iwcbJqC2sKdbQC7W5JZr4B6ReO653/Li/fubbC/sYPGggI0eO5NatWyxcuJBz585x7NixN3pUMqdIy4AQQogCr0qVKoSEhGBlZUVSUhLVqlVjwYIF1KlThxIlSlC6cWfundhOqUE/YepQHm1mOmoTM71jRG2cgiYuEqdPlgKQEnKCh1u+oeRH8zEr9fSnBtLCLxG1bhxVe0/iyroZutf/+usv2rVrx7p16+jdu3fuXfhLkrUJhBBCFHjHjh3j4cOHupkHf/jhB9q0aUOJEiVIStegqtEOgNQbZwD0goA2LZmslHjMnWugeXQfbVry423MLB/vc/0UStbT11dIuXoUlZklyXbVuXP3PtHR0URHR1O3bl2srKw4cOBArl3zq5BuAiGEEAVeiRIl9CYnqlz5f9/k78QkY2xTClRqNPFRAKRFXCb+yDrSI6+iZKbrHUubnoza3BIz55pYVGlM/LENJJzZjnnZmli4NsSyenNUxo+b/jPjIlHSkwn/sQ8uP2av68GDB7lwta9OwoAQQogCTavVUqZMGYoVK0aJEiUA9J4uyNBo4R9BITPuHlEbJmFSogzFW36McTE7MDIh9cZpEk9vh//2rqtUKuy7TCT97lVSrp8i7dZZYn5fQMKprZTsPxe1aRFQFNQWNth1GsNXHatTyUF/7QJ7e/u38Am8mIQBIYQQBZpKpSI9PZ1r167pWgdq1apF06ZNqV27Nn2Gj0MTFwmKFmNrR1Kvn4KsTBy6TcbY2kF3nLQ75596fDOnqpg5VQXP/iRfOkj0zjkkXzlMUff3MC5eirTbQZg5VaNp85a4lbZ+K9f8qmTMgBBCiAItPT2dihUrAuieJsjIyGDfvn3MmTOHG+cDSfz7NwCKVKgLquy3Rm1aMskX9uq9lpWWlO3pBBPH/y6/rHm85oFl1XdB0ZJw3A+XEpZ622o0Gh49evTG15cTpGVACCFEgRETE0NQUJDez5UrV8jKysq2rVqtplevXmzz9yPx7C4sqnti6lgBlbEpcUbGPAiYTlGPdmgz00gK+gu1hTVZSbG6/ZMv7Hu8n2sjjIuXQklPITF4NyozC8wr1gPA3LkmVh7tiD/hT/cuSbRt2xYTExNCQ0Px9/dnwYIFeHl5vbXP51nk0UIhhBD5jqIo3Lp1S3fDP3fuHEFBQURERABgYWFBrVq18PDwwMPDgwcPHuhWJITHAwgrVqzIsWPHMDY2plLj9jx0646ifjzwLyU0kEeH16CJi0RtWZyitdtjZGFNzO8LcPpkGcY2jmTcv0H8qS2kR1wmK/kRajNLzEpVxrppH8xKVtKdy0itonr8ae6d3Mnly5cxNjbGxcWF9u3bM3r0aN0aCYYkYUAIIUSelp6ezuXLl3U3/KCgIIKDg0lISADAwcGB2rVr6278Hh4eVK5cGSMjI90xrly5QvXq1QEYMmQICxYswNzcXPd+aFQibX44nGvXsPezZtkGD+Yl0k0ghBAiz4iNjSU4OFivmf/y5ctoNBpUKhWVK1fGw8OD9u3b6wLAk7UFnsfV1ZU+ffrQvn17+vTpk+39yo5FaVrJLtfWJsjLQQCkZUAIIYQBKIrCnTt3svXv37lzBwBzc3O9Zn4PDw9q1qyJlZVVrtUkqxYKIYQQuSQjI4MrV67o9e0HBQURHx8PgJ2dXbZmfldXV4yN337jtd/pMMZvuZBjx/uua02833HOsePlFgkDQgghckx8fDzBwcF6N/1Lly6Rmfn4UbtKlSrp3fRr165NqVKl9GYHNLSFB0KZszvkjY8ztm0Vhreo9OIN8wAJA0IIIV6ZoiiEh4dna+a/desWAGZmZtSoUUN3w/fw8KBWrVoULZq3+86f8DsdxtQdl9BolVcaQ2CkVmGsVjG9k1u+aBF4QsKAEEKI58rMzOTq1avZbvyxsY+fube1tc3WzF+lSpU8sTTvmwiPTWHi1gscuR6NkVr13FDw5P2mleyY2aVmnh8j8G8SBoQQQugkJCRw/vx5vf79ixcv6ubyr1Chgt5N38PDgzJlyuSpZv6cFhqVyLrAMA6EPCAsJoV/3jRVgHMJC1q4OtC3oXOef2rgWSQMCCFEIaQoCpGRkXp9+0FBQdy4cQMAExMTXTP/k6b+WrVqYW2dN+fWf1uS0zXcjkkmQ6PF1FiNSwlLLM3y/1P6EgaEEKKA02g0XLt2LVszf3R0NAA2NjbZmvmrVq2KqampgSsXb4uEASGEKECSkpJ0zfxPmvovXrxIWloaAC4uLtma+Z2dnQt0M794MQkDQgiRDymKwv3797M9u3/9+nUURcHY2Bg3Nze9m767uzvFixc3dOkiD5IwIIQQeVxWVhYhISHZmvkfPHgAQLFixfQe4fPw8KBatWqYmZkZuHKRX0gYEEKIPCQ5OZkLFy7o3fTPnz9PamoqAM7Oztma+V1cXKSZX7wRCQNCCGEgUVFRejf9c+fOERISgqIoGBkZUb169WzN/CVKlDB02aIAkjAghBC5TKvVcv369WyP8d2/fx+AokWL4u7urvcYX/Xq1fWW2BUiN0kYEEKIHJSSksLFixezNfMnJycD4OTklO0xvvLly6NWqw1cuSjMJAwIIcRrevjwYbZm/mvXrqHValGr1VSrVi1bM7+9vb2hyxYiGwkDQgjxAlqtlps3b2Z7jC8yMhIAS0tLvWZ+Dw8PatSoQZEiRQxcuRAvR8KAEEL8Q1paWrZm/uDgYJKSkgAoVaqUXt++h4cHFStWlGZ+ka9JGBBCFFoxMTHZnt2/cuUKWVlZqNVqqlSpkq2Z39HR0dBlC5HjJAwIIQo8RVG4detWtht/eHg4ABYWFtSqVUvvxl+zZk0sLPLXMrRCvC4JA0KIAiU9PZ3Lly/r9e8HBweTkJAAgIODg95o/tq1a1OpUiWMjIwMXLkQhiNhQAiRb8XGxhIcHKz3bf/y5ctoNBpUKhWVK1fO9hhfyZIlDV22EHmOhAEhRJ6nKAp37tzJ1sx/584dAMzNzZ/azG9lZWXgyoXIHyQMCCHylIyMDK5cuaL37H5wcDCPHj0CwM7OLtu3fVdXV4yNjQ1buBD5mIQBIYRObGwsK1as4ObNm7Rv35727dvnal96fHw8wcHBes/uX7p0iczMTAAqVaqUbTW+UqVKyaI8QuQwCQNCCABCQkLo0qULZmZm1KpViw0bNjB69GjGjh2LnZ3dGx1bURTCw8OzNfPfunULADMzM2rWrKn3bb9WrVoULVo0Jy5NCPEC0q4mhABgxowZlCxZkh07dmBpaUmzZs1YsGABFhYWTJ06laysrJdqJcjMzOTq1avZbvyxsbEA2NraUrt2bbp27aq78VepUgUTE5PcvkQhxDNIy4AQgrS0NN5//33q1q3L7NmzAUhNTWXmzJn4+vrqVtf7t4SEBM6fP6/3GN/FixfJyMgAoEKFCnrf9mvXro2Tk5M08wuRx0jLgBAFWHR0NKtXryYzMxMfHx9sbW2ful1iYiJarRZTU1Pda0WKFKFTp058++23HDlyhAoVKmRbgvfGjRsAmJqa4ubmRu3atRkwYICumd/a2vqtXKcQ4s1IGBCiAMrKymLz5s3MmjWLmzdvAtChQ4dnhgF7e3vMzc2JjIwkKiqK6OhogoKCOHHiBBYWFrRt25a0tDQAbGxsqF27Np06ddJ9469atapekBBC5C8SBoQogNRqNWlpaXTt2pWePXtSq1YtTp8+TfXq1fWa6JOSkjh37hwXLlwgNjaWI0eOsH79el0zf7ly5bC1tcXIyIi5c+fi4eGBs7OzNPMLUcBIGBCiAFKpVHTu3Blzc3NMTU1p3LgxmzZtomjRoly7dk3XzH/9+nUURcHY2JhKlSphamrKu+++y8SJE6lVqxbFixfH09OTevXq0aFDB5myV4gCSsKAEAVMVlYWISEhehP2nDlzhoSEBP744w+sra3x8PDg/fffx93dHXd3d9zc3DAzM2PSpEn4+fkRERFB48aNCQoKIiIigqFDh0oQEKIAk6cJhMjHkpOTuXDhgt6gvvPnz5OamgqAs7OzbjDfzJkz+fbbb/n888+z3di1Wi1qtZrExES+/PJLdu7cSbFixQgJCcHb25sFCxZQrFgxQ1yiEOItkDAgRD4RFRWld9M/d+4cISEhKIqCkZER1atX13uEz93dHVtbW938AC1btqR48eKsWrVKN2d/UlISa9asIT09ndGjRwP/myfg5MmTtGrVigoVKhjwqoUQb4OEASHyGK1Wy/Xr17M9xvfkWf+iRYvqPbvv4eFB9erVMTc3f+rxnoSBdevW8emnnxIYGEilSpWIi4ujaNGidOzYkdjYWI4dOyYT/whRSEkYEMKAUlNTn9rMn5ycDECZMmWy3fjLly+PWq1+5XOlpKRgbW1Nhw4duHXrFg4ODmzbto3r16/j6OiIo6NjTl+eECKfkDAgxFvy8OHDbFP0Xr16Fa1Wi5GREVWrVs1243/TNQEANBoNS5YswdfXl+DgYNzd3enQoQOffPIJTk5OOXBlQoj8Tp4mECKHabVabt68qde3HxQURGRkJACWlpa4u7vTvHlzPvvsMzw8PHBzc6NIkSK5Vk9kZCStW7fmt99+kwAghMhGWgaEeANpaWlcunRJr38/ODiYpKQkAEqXLp3t237FihVfq5lfCCFyi4QBIV5STExMtmb+K1eukJWVhVqtpkqVKno3fXd3d+mHF0LkCxIGhPgXRVG4detWtht/eHg4ABYWFtSqVUvvMb4aNWpgYWFh4MqFEOL1SBgQhVp6ejqXL1/W69sPDg4mISEBAAcHB2rXrk3t2rV1N/9KlSrJbHxCiAJFwoAoNOLi4rJ92798+TIajQaVSoWrq2u2/v2SJUsaumwhhMh1EgZEgaMoCnfu3Ml2479z5w4A5ubmes38T6brtbS0NHDlQghhGBIGRL6WkZHBlStXst34Hz16BICdnZ2uif/JPytXroyxsTxVK4QQT0gYEPlGfHw8wcHBeo/xXbp0iczMTAAqVaqk17fv4eFBqVKlUKlUBq5cCCHyNgkDIs9RFIXw8PBs3/Zv3boFgJmZGTVr1szWzF+0aFEDVy6EEPmThAFhUE9WyPv3jT82NhYAW1tbvW/7tWvXpkqVKtLML4QQOUjCgHhrEhISOH/+vN5jfBcvXiQjIwOAChUqZGvmd3JykmZ+IYTIZRIGRI5TFIXIyMhsS/DeuHEDAFNTU2rUqJGtmd/a2trAlQshROEkYUC8EY1Gw7Vr17I180dHRwNQvHjxbM/uV6tWDRMTEwNXLoQQ4gkJA+KlJSUl6Zr5n/xcuHCBtLQ0AFxcXPT69j08PChbtqw08wshRB4nYUBkoygK9+/fz7YE7/Xr11EUBRMTE9zc3LItymNjY2Po0oUQQrwGCQOFXFZWFqGhodn69x88eACAtbV1tmb+6tWrY2pqauDKhRBC5BQJA4VIcnIyFy5c0Lvpnz9/ntTUVACcnZ31bvq1a9emXLly0swvhBAFnISBAioqKkrvpn/u3DlCQkJQFAUjIyOqV6+u17fv7u6Ora2tocsWQghhAAUqDCSna7gdk0yGRoupsRqXEpZYmhXsyWm0Wi3Xr1/X69sPCgri/v37ABQtWvSpzfzm5uYGrlwIIUReke/DQGhUIusCwzhw7QFhsSn882JUgLOtBS2qONCngTOVHfP3dLWpqalPbeZPTk4GoEyZMtlu/OXLl0etVhu4ciGEEHlZvg0D4bEpTNx6gSPXozFSq8jSPvsynrzftJIdM7vUpKytxVus9PU8fPgw27P7V69eRavVYmRkRNWqVfX69t3d3bGzszN02UIIIfKhfBkG/E6HMXXHJTRa5bkh4N+M1CqM1Sq+6uRGz3ecc7HCl6fVarl582a2x/giIyMBsLS0xN3dXW+aXjc3N4oUKWLgyoUQQhQU+S4MLDwQypzdIW98nDFtXRnRonIOVPTy0tLSuHTpkl7ffnBwMElJSQCULl06WzN/xYoVpZlfCCFErspXo+v8ToflSBBIu3OeT1t24MFiP6Z/4v3cbZs3bw7AwYMHX+kcMTEx2Zr5r1y5QlZWFmq1mipVquDh4UGnTp10N34HB4fXvCIhhBDi9eWbMBAem8LUHZdy9Jgrjt3Gp0fKG40hUBSFW7duZbvxh4eHA2BhYUGtWrVo2rQpn376KR4eHtSoUQMLi7w/bkEIIUThkG+6CfotC+T4zZhXGiPwLIqihSwNRiYmNKloz5rBDZ657T9bBtLT07l8+bJe/35wcDAJCQkAODo6ZluCt1KlShgZGb1xzUIIIURuyRctA6FRiRy5Hp1jx1Op1GBsilaBI9ejuf4gkUoO+o8dxsXFERQUREREBElJSbi7u3P58mU0Gg0qlQpXV1c8PDx4//33dTf+kiVL5liNQgghxNuSZ8LA3bt3mTJlCn/88QcxMTGULl2adu3asWDBAtYFhqGNv0/M/hWk3QlG0WRi4uCCdeOeWFR6B4Cs5DgiFn6EdZOe2LzbW+/YmTERRPp+QvE2QylWtyNpd84TtWEijr1mYlnenUV7LtLMMoply5axf/9+UlNTedJgolKpsLKyomHDhnzyySfUrl2bmjVrYmlp+dY/IyGEECI35IkwEBkZSf369Xn06BFDhgyhatWq3L17l4CAAFJSUvjrzFXurh6DkplO0XqdMDIvStLFfTzc/DX2ncdjUaUxRpbFMXeuQcrVo9nCQPKVI6BSY1n13WznztIqbDx8kflLhgBgY2NDo0aNMDU15dixY9jZ2VG2bFl+/fXXt/JZCCGEEG9bnggDEyZM4P79+wQGBlKvXj3d69OnTycxLZPLf6xBm/wIxz7fYV7WDQArj/e4t2wEsfuXUcS1ISqVGotqzYj9cyEZD29jau+iO07K1SOYO9fAyLL4U89vbO1AiRJ2lC1bhsDAQN2KfL6+vgwZMoSyZcvm3sULIYQQBmbwB9i1Wi3btm2jY8eOekHgibDYFFJunsG0lKsuCACoTYtg5dGOrPgoMqPDALBwbQRqI1KuHNFtl/HwNpnRYVhUa/bMGjLuhxITE80nn3yitzTvgAEDsLa2zonLFEIIIfIsg4eBhw8fkpCQQI0aNZ76foZGiyb+ASa2TtneMynx+Bu7Jv4hAEYW1piXcyf56lHdNilXjoDa6HFQeAZN/AMAKlfWn4TIxMSEChUqvNoFCSGEEPmMwcPAi5gav1qJltWaoYm9S0bUTQCSrx7FvJw7RhbyDV8IIYR4GoOHAXt7e4oVK8bFixef+r5LCUuMrR3IjL2b7b3M2AgAjK3tda9ZuDYEI2OSrxwmI+ommti7WD6ni+Dx/o9n/gsNDdU/fmYmt27deqXrEUIIIfIbg4cBtVpN586d2blzJ2fOnMn2voWpEY7VG5JxL4T0u1d0r2sz0kgK+hMja0dM7P636JDa3Ioi5euQcvUoyVcOg5Hx44DwHJXc3LG3t+eXX34hIyND9/rKlSt59OjRm1+kEEIIkYfliacJZs6cye7du/H09GTIkCFUq1aNe/fu4e/vz9GjR+np8yk/nNtH1KZpFKvbEXWRoiRd2IfmURT2XSY8nkToHyyqNSVm51wSz+6iSPk6qM2tnnluI7WKVtVK02/GDIYOHUrLli3x9vbm1q1brFixQsYMCCGEKPDyRBhwcnIiMDCQyZMns27dOhISEnBycqJ9+/ZYWFgw9L06bOg3h0cHVpD4906UrExM7F2w95qim3TonywqNSDW2AwlIxWLak2fe+4srULfhs5UcnAjKyuL2bNnM3bsWGrWrMmOHTuYPHlybl22EEIIkScUyrUJnjBSq2hcocRz1yYQQgghCjqDjxl4WTO71MRYrcrRYxqrVczsUjNHjymEEELkN/kmDJS1teCrTm4v3vAVTO/k9kbLFwshhBAFQb4JAwA933FmTFvXHDnW2LZV8H7H+cUbCiGEEAVcvhkz8E9+p8OYuuMSGq3ySmMIjNQqjNUqpndykyAghBBC/Fe+DAMA4bEpTNx6gSPXozFSq54bCp6837SSHTO71JSuASGEEOIf8m0YeCI0KpF1gWEcCHlAWEwK/7wYFeBcwoIWrg7/fXywqKHKFEIIIfKsfB8G/ik5XcPtmGQyNFpMjdW4lLDE0ixPTKUghBBC5FkFKgwIIYQQ4tXlq6cJhBBCCJHzJAwIIYQQhZyEASGEEKKQkzAghBBCFHISBoQQQohCTsKAEEIIUchJGBBCCCEKOQkDQgghRCEnYUAIIYQo5CQMCCGEEIWchAEhhBCikJMwIIQQQhRyEgaEEEKIQk7CgBBCCFHISRgQQgghCjkJA0IIIUQhJ2FACCGEKOQkDAghhBCFnIQBIYQQopCTMCCEEEIUchIGhBBCiEJOwoAQQghRyEkYEEIIIQo5CQNCCCFEISdhQAghhCjkJAwIIYQQhZyEASGEEKKQ+3+lrwUTVqO6pwAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "dataset_generator.draw_graph()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "Generate an emergency room encounter"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [],
   "source": [
    "emergency_encounter_period_generator = FieldGenerator(\n",
    "    field=\"period\",\n",
    "    generator_function=lambda: {\n",
    "        \"start\": pendulum.now().subtract(days=730).to_date_string(),\n",
    "        \"end\": pendulum.now().subtract(days=729).to_date_string(),\n",
    "    },\n",
    ")\n",
    "\n",
    "# emergency encounter\n",
    "emergency_encounter_params = GeneratorParameters(\n",
    "    field_values=[\n",
    "        FieldValue(field=\"class\", value=Codes.EMERGENCY_ENCOUNTER.value),\n",
    "        FieldValue(field=\"status\", value=\"finished\"),\n",
    "    ],\n",
    "    field_generators=[emergency_encounter_period_generator],\n",
    ")\n",
    "\n",
    "emergency_encounter_generator = ResourceGenerator(\n",
    "    \"Encounter\", generator_parameters=emergency_encounter_params\n",
    ")\n",
    "\n",
    "dataset_generator = dataset_generator.add_resource_generator(\n",
    "    emergency_encounter_generator,\n",
    "    \"emergency-encounter\",\n",
    "    depends_on=\"base\",\n",
    "    reference_field=\"subject\",\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "and and ICU encounter"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [],
   "source": [
    "icu_encounter_period_generator = FieldGenerator(\n",
    "    field=\"period\",\n",
    "    generator_function=lambda: {\n",
    "        \"start\": pendulum.now().subtract(days=720).to_date_string(),\n",
    "        \"end\": pendulum.now().subtract(days=710).to_date_string(),\n",
    "    },\n",
    ")\n",
    "\n",
    "# icu encounter\n",
    "icu_encounter_params = GeneratorParameters(\n",
    "    field_values=[\n",
    "        FieldValue(field=\"class\", value=Codes.ICU_ENCOUNTER.value),\n",
    "        FieldValue(\n",
    "            field=\"type\", value=Codes.ICU_ENCOUNTER_TYPE.value, list_field=True\n",
    "        ),\n",
    "        FieldValue(field=\"status\", value=\"finished\"),\n",
    "    ],\n",
    "    field_generators=[icu_encounter_period_generator],\n",
    ")\n",
    "\n",
    "icu_encounter_generator = ResourceGenerator(\n",
    "    \"Encounter\", generator_parameters=icu_encounter_params\n",
    ")\n",
    "\n",
    "dataset_generator = dataset_generator.add_resource_generator(\n",
    "    icu_encounter_generator,\n",
    "    \"icu-encounter\",\n",
    "    depends_on=[\"base\", \"emergency-encounter\"],\n",
    "    reference_field=[\"subject\", None],\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<module 'matplotlib.pyplot' from 'C:\\\\Users\\\\Michael Graf\\\\AppData\\\\Local\\\\pypoetry\\\\Cache\\\\virtualenvs\\\\fhir-kindling-aPmNxlUm-py3.11\\\\Lib\\\\site-packages\\\\matplotlib\\\\pyplot.py'>"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgMAAAGFCAYAAABg2vAPAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAACfKElEQVR4nOzddVhU2RsH8O/M0C0lJVIq0gY2IoodK6LYhZ1ggGCBsIuFvXYAq6goooIdi62IYhEqYKB0dw1zfn/wY9YRVNDBIc7neXh2uXPuue8Mwn1P3HMYhBACiqIoiqKaLaagA6AoiqIoSrBoMkBRFEVRzRxNBiiKoiiqmaPJAEVRFEU1czQZoCiKoqhmjiYDFEVRFNXM0WSAoiiKopo5mgxQFEVRVDNHkwGKoiiKauZoMkBRFEVRzRxNBiiKoiiqmaPJAEVRFEU1czQZoCiKoqhmjiYDFEVRFNXM0WSAoiiKopo5mgxQFEVRVDNHkwGKoiiKauZoMkBRFEVRzRxNBiiKoiiqmaPJAEVRFEU1czQZoCiKoqhmjiYDFEVRFNXM0WSAoiiKopo5mgxQFEVRVDNHkwGKoiiKauZoMkBRFEVRzRxNBiiKoiiqmRMSdAAURf26wlI2PmQWoozNgYgQE1oKkpAUpb/eFEXVDv1rQVGNVGxqPvzDEhD6Jg0JWUUgX7zGAKApLwGrdsqY2FUTbVpKCypMiqIaAQYhhPy4GEVRDcWnrCKsPPsKd+MywGIyUMH59q9w1esWeorwsjFGK3mJ3xgpRVGNBU0GKKoRORmeALfgKLA55LtJwNdYTAaEmAysG2GIceaa9RghRVGNEU0GKKqR+Ds0Ft7X3v5yPcsHtMVCqzZ8iIiiqKaCPk1AUY3AyfAEviQCAOB97S0CwhP4UhdFUU0DTQYoqoH7lFUEt+Aovta5NjgKn7KK+FpnXVy7dg0zZsyAkZERWCwWtLS0BBYLRVE0GaCoBm/l2Vdg12F+QG2wOQQrz77ia511cfz4cRw/fhyysrJQU1MTWBwURVWiyQBFNWCxqfm4G5dRp8mCtVHBIbgbl4G4tHyw2WyUlZXxtf4f8fLyQl5eHu7fvw9TU9Pfem2KoqqjyQDVrAUGBoLBYOD27dvVXtu/fz8YDAYiIyPx8uVLTJs2DTo6OhATE4OKigrs7e2RmZlZ7bzExETMmDEDampqEBUVhba2NubNm8dzw83JycGSJUugpaUFUVFRaGhoYMqUKcjIyOCpyz8sASwmg/t9wcsb+LhhGEo+RSHr+n582jEBCdvGIvPK3yAV5eCUFCAjZAs+bRuLT9vGIjv0CL6cI8zOScXHDcOQGxaEgifn0cXUAKKiooiOjoa7uzsYDAbi4uIwbdo0yMnJQVZWFtOnT0dREe+Qgo+PD/r27QtlZWWIiorCwMAAe/furfXnrqamBmFh4VqXpyiqftFFh6hmbejQoZCSksKpU6dgaWnJ81pAQAAMDQ1hZGSELVu24N27d5g+fTpUVFQQFRWFAwcOICoqCo8ePQKDUXnDTkpKQpcuXZCTk4PZs2dDX18fiYmJCAwMRFFREURERFBQUAALCwvExMTA3t4eHTt2REZGBoKDg/H582coKipyYwh9k1Zjr0DW9f1gSbWAnMVElCa+RsHzK2CKSqI0MQYsGSXIWU5FcXw48sKCIKzYGlLG/XjOL3x1A4RdhlY9hmNtfwPIy8tzX7Ozs4O2tjbWr1+PiIgIHDp0CMrKyti4cSO3zN69e2FoaIgRI0ZASEgIISEhmD9/PjgcDhYsWMCXnw1FUb8Roahmbvz48URZWZmw2WzuseTkZMJkMomHhwchhJCioqJq5504cYIAIHfu3OEemzJlCmEymSQ8PLxaeQ6HQwghZO3atQQACQoK+mYZQgjJLyknWi4XSOsvvhSGOBIAREy7I9FcEcI9LqquTwAGkeowmHtM0/k8YUkrEtFWRtxj6nMPEwCEISpBNBb7Ey2XC6SgpJwQQoibmxsBQOzt7XlisrGxIQoKCjzHavo8Bg4cSHR0dKp/wD8wdOhQ0rp16zqfR1EU/9BhAqrZGzt2LNLS0nDr1i3uscDAQHA4HIwdOxYAIC4uzn2tpKQEGRkZ6NatGwAgIiICAMDhcHDu3DkMHz4cnTt3rnadqt6DM2fOwNTUFDY2Nt8sAwAfMwvxrZkCUqYDeMqKqLYDQCBlMuC/upgsiKjogZ2bWu18ibY9wJKQBQHwIbOQ57W5c+fyfG9hYYHMzEzk5eVxj335eeTm5iIjIwOWlpZ49+4dcnNzvxE1RVENFU0GqGZv0KBBkJWVRUBAAPdYQEAAzMzM0LZtWwBAVlYWHBwc0LJlS4iLi0NJSQna2toAwL35paenIy8vD0ZGRt+9Xnx8PLdMeXl5jWVSUlKQlJSMioJsVBRkg1NeyvO6kIwSz/dMUYn/H1f86rgkOCUF1eoXkmvJ/f8yNofnNU1N3hUKW7RoAQDIzs7mHrt//z6sra0hKSkJOTk5KCkpYeXKlQD++zxyc3ORkpLC/crKyqrxvVIUJXh0zgDV7ImKimLkyJE4e/Ys9uzZg9TUVNy/fx9eXl7cMnZ2dnjw4AGcnJxgZmYGKSkpcDgcDBo0CBwO5zu1f1tsbCzat28PHR0dDB48GNbW1ujTpw+kpaWhqqrKU1ZhiCOkTKz/O8D4Rh5f0/EaFhllCIly/19EiPccFotVY9Xk//XEx8ejX79+0NfXx9atW9GqVSuIiIjg0qVL2LZtG/fzcHBwgJ+fH/d8S0tLnt4XiqIaDpoMUBQqhwr8/Pxw8+ZNxMTEgBDCHSLIzs7GzZs3sW7dOqxdu5Z7TmxsLE8dSkpKkJGRQWRk5Hevpauri8jISMjKyqKiogKxsbF4//49du7cCRaLBV1dXVhaWmKp0wrMPhYBAkBYsX72E2AA0FKQrNM5ISEhKC0tRXBwME8vQmhoKE85Z2dnTJo0ift9VQ8DRVEND00GKAqAtbU15OXlERAQgJiYGHTp0oU7DFDVUiZftbC3b9/O8z2TycTIkSNx7NgxPHnypNq8AUIIGAwGbG1t4eHhgcuXL0NeXh5ZWVlgs9kAgIqKCrx9+xbx8fE4f/482kWL4WM9rhSoqSABSdG6/Rmo6fPIzc2Fj48PTzkDAwMYGBj8epAURdU7mgxQFABhYWGMGjUKJ0+eRGFhIby9vbmvycjIoHfv3ti0aRPKy8uhrq6Oa9eu4f3799Xq8fLywrVr12BpaYnZs2ejffv2SE5ORkBAADZs2IDXr1/j5cuXEBYWxrRp02qMpX379rh06RJkZWVh1U4ZR8M+8n3RIaByJ0Ortsp1Pm/AgAEQERHB8OHDMWfOHBQUFODgwYNQVlZGcnJyrep4+fIlgoODAQBxcXHIzc3Fn3/+CQAwNTXF8OHD6xwXRVE/jyYDFPV/Y8eOxaFDh8BgMGBnZ8fz2vHjx7Fo0SLs3r0bhBAMGDAAly9frraUrrq6Om7dugVHR0ccOnQIRUVFYLFYKC8vxx9//AEpKSl07NgRs2bNQnx8PO7fv4+Cgv8m+I0bNw5Hjhzhztaf2FUTvg8/1Mv7reAQTOpW9+GHdu3aITAwEKtXr8by5cuhoqKCefPmQUlJCfb29rWqIyIiAmvWrOE5VvX91KlTaTJAUb8Z3cKYon5BWVkZXr58iSdPniA8PBzh4eGIiooCh8OBqKgozMzMYG5uDnNzc3Tu3Bnt2rXjmaB348YN9O/fH0wmE/3790fbtm1RUlKCzMxMREVFwcXFBTcr2uPBu0y+9g6wmAz00FHA0Rld+VYnRVGNF00GKKqWKioqEB0dzXPjf/nyJcrKysBisWBsbMy96Zubm8PIyOiHS+4WFxdDVlYW5eXl3LIVFRXcGfmbN2/GWPv5sN52G6Xsn3tqoSaiQkzcWGKJVvISfKuToqjGiyYDFFUDDoeDuLg47o3/yZMniIiIQFFRERgMBvT19Xlu/KampjwL8dSFl5cXVq9ezTMhj8FgYNSoUQgMDAQAnAxPgEsQ/3YZ3DjKGGPN6+cJBYqiGh86Z4Bq9gghSEhI4LnxP3nyhLt4jo6ODszNzfHHH3/A3NwcHTt2hLS0NN+uraOjAyaTiYqKCgCVTyUoKSnh4MGD3HLjzDWRUVAK72tvf/maTgPa0USAoigetGeAanZSUlJ4bvzh4eFIT08HUDkB8MsWf6dOnaCgoFAvcTx8+BBOTk64f/8+DA0NERUVxX3t+vXrsLa2rnbOyfAEuAVHgc0hdZpDwGIyIMRkwGOEIU0EKIqqhiYDlEClp6cjKioK+vr6UFFR4Xv9WVlZePr0Kc+N//PnzwAARUVFnht/586dq638Vx9iY2Ph6urK3aNg06ZN6NevH4yNjRETE4NFixZh586d3zz/U1YRHI8/xtPEQrAYQMV3foNZTAYqOAQWeorwsjGmcwQoiqoRHSagBCIoKAhr1qxBQkICtLS0ICcnBwcHB4wePZq7OE9dFRQUICIigufGHx8fD6ByrYBOnTphwoQJ3Bt/69atf+o6Pys9PR0eHh7Yt28fVFVV4efnh4kTJ3KfLjh8+DB27drFs1VwTVrJS6Bd0jXcCjiPeVuO4258FhIyi3g2NWKgckEhq7bKmNRNE3rK/BnWoCiqaaI9A9RvFx8fj9GjR2Ps2LGYPn068vLy4OTkhLS0NISGhkJUVPSHdZSUlODFixc8N/6qZYTFxcXRoUMHnkf62rRpAyZTMPtyFRUVYfv27diwYQMYDAZWrlyJxYsX//SEw4qKCrRu3RojRozAnj17AACFpWx8yCxEGZsDESEmtBQk67yyIEVRzRf9a0HxXWFhISQlv73e/d27d5GWloZx48ahZcuWaNmyJQwMDFBQUICcnBy0bNmSp3x5eTmioqJ4bvyvXr0Cm82GsLAwTExM0Lt3byxduhTm5uYwMDCAkJDg/2lXVFTgn3/+wZo1a5CWlob58+dj9erVUFRU/PHJ33Hjxg0kJibyrGAoKSoEQzXZX4yYoqjmSvB/MakmITs7G97e3vD394eUlBTGjBmDRYsWQV5enlumqvtfWFgY4uLiOH/+PBwcHPDw4UM8efIEs2fPhpKSEmJiYnhu/M+fP0dJSQmYTCYMDAxgbm6OmTNnwtzcHCYmJrXqSfidCCG4evUqnJ2d8erVK9jZ2cHLywu6urp8qd/X15f7OVAURfEDHSag+GLDhg0ICgqCg4MDSkpKsGLFCgwZMgSbNm2CiooK9xl6BoOBgoICBAQE4NKlSwgKCoK4uDgkJSVRWlqK8vJylJSUAADatGnDM8GvQ4cO3+1xaAgiIiLg7OyMmzdvwsLCAps3b0bXrvxb5S87Oxuqqqrw9PSEk5MT3+qlKKp5oz0D1C9LSUnByZMnMWDAAEycOBEAoKmpiSVLluDYsWNYvnw5CCFITk7mtvgfPXqE27dvA6hchU9BQQHKysqIjY3FP//8g2HDhjWqLW8/fvyI1atX49ixY9DX18f58+cxfPhwvk9QDAgIAJvN5tkamKIo6lfRZID6ZUlJScjNzcWAAQO4x9q0aQMNDQ3s2bMHd+7cwZMnT7g72ikrK0NDQwMtW7aEp6cnhg4dCmVlZeTl5cHMzAzFxcVo0aLFTz9V8DtlZ2dj/fr12LlzJ+Tk5LBv3z7MmDGj3uYs+Pr6YtCgQb/lEUiKopoPmgxQv0xNTQ0JCQk4fvw49u/fjydPnuDDhw8AKlfTa9myJaZNm8ad4d+6dWusXbsWd+7cQdeuXaGsXLmNbmhoKIqLi7lDAQ05ESgtLcWePXvg6emJsrIyuLq6YtmyZZCSkqq3a8bExCAsLAynT5+ut2tQFNU80TkDVJ0UFRXh+fPn3I16njx5gjdv3gAAhIWF0a1bN+4jfcXFxdi3bx8cHR0xfvx4nnrCw8Mxa9YsiIiIwMPDA2/evEFgYCD09PRw5MiRBpsIcDgcnDp1CitXrsTHjx8xc+ZMuLu7/5aW+ooVK3Do0CEkJSU1uEmTFEU1brRngPqmsrIyvHr1iufGHxUVhYqKCoiIiMDMzAzW1tZwdXXF5cuXER8fj5CQEMjKVj7iFhsbiw0bNnAnD968eRN5eXmwsbFB586d8ffff2Pv3r1YunQpJCQkYGdnh6lTpzbYRODWrVtwcnLCkydPMGLECFy8eBHt27f/Lddms9k4evQoJkyYQBMBiqL4jiYDFIDKZ+K/fqTvxYsX3O15jYyM0KVLF8yfP5+7Pa+IiAj3fAMDA1hZWeHmzZsYNWoUgMoVAWNjY9GpUycAlbvzFRYWwsLCAoqKiujVqxc6dOgACQmJBpsAAEBUVBRcXFxw4cIFmJub49atW7C0tPytMVy7dg3Jyck8awtQFEXxC00GmiEOh4P4+HieG/+X2/O2a9cO5ubmmDRpEszNzWFmZvbD1fLMzc0xevRoLF26FIWFhejYsSM8PDxgZ2fHnROwaNEiSEhI8Dwl0JAfFUxOTsbatWtx5MgRtG7dGidPnoSdnZ1AEhdfX18YGxujY8eOv/3aFEU1fXTOwP811eVcCSH49OkTz43/y+15tbW1eZbt7dixI2RkZH7qWpmZmfDy8sLt27cRFRWFrl27Yvv27TAzM+PjO6p/+fn58Pb2hre3N8TExLB27VrMnTtXYN3zWVlZUFVVxfr167F06VKBxEBRVNPWrJOB2NR8+IclIPRNGhKyatjoRV4CVu2UMbGrJtq0bBwbvaSmpla78aelpQGonPX/5Y2/c+fOfN+etyr50NDQENheAD+rvLwchw4dgru7O3Jzc+Ho6AgXFxfIyckJNK7du3fDwcEBiYmJ1ZZqpiiK4odmmQx8yirCyrOvcDcug7vF67c05C1gs7OzudvzVt34P336BABQUFCoduNXU1MTcMQNEyEE58+fh4uLC96+fYvJkyfD09MTmpqagg4NQOUQjJqaGs6fPy/oUCiKaqKaXTJwMjwBbsFRYHPId5OAr7GYDAgxGVg3whDjzH//TaKgoADPnj3jufHHxcUB+G973i+X7v3d2/M2Vo8ePYKTkxPu3buH/v37Y9OmTQ1qWCMyMhLGxsYICgqCjY2NoMOhKKqJavyD4nXwd2gsvK+9/alzK/6fPLgEvUJGQSkWWrXhc3T/KSkpwcuXL3lu/DExMeBwONzteYcMGcJt+Qtye97GKi4uDq6urggMDISJiQmuXr3Ks4JiQ+Hr6wtFRUUMHTpU0KFQFNWENZuegZPhCXAJesW3+jaOMsZYPvQQlJeXIzo6utr2vOXl5dzteata+19uz+vl5YXg4GDEx8cjPz8frVq1wtChQ7Fq1SooKSnx4R02Tenp6fD09MTevXuhoqKCP//8E5MmTQKLxRJ0aNWUl5ejVatWGDduHLZv3y7ocCiKasKaRTLwKasI1ttuo5TN4VudokJM3FhiWac5BBwOB2/fvuW58T979oxne94vb/zGxsYQExOrsS5bW1soKSlBX18f0tLSiImJwcGDB6GsrIznz5836Ef2BKG4uBjbt2/Hhg0bAACurq5wcHD44SOTghQSEoIRI0bg2bNnDWrogqKopqdZJAOTD4fhwbvMOs0R+BEWk4EeOgo4OqMr2Gw2OBwOzyI8hBB8+PCB58b/9OlT5OfnA6jcyOfLG7+Zmdkvr2t/5swZjB49GidOnMC4ceN+qa6moqKiAkePHsWaNWuQkpKC+fPnY82aNVBUVBR0aD9ka2uL+Ph4PH/+XNChUBTVxP3yQHNgYCAYDAZ3O9ov7d+/HwwGA5GRkXj58iWmTZsGHR0diImJQUVFBfb29sjMzKx2XmJiImbMmAE1NTWIiopCW1sb8+bNQ1lZGbdMTk4OlixZAi0tLYiKikJDQwNTpkxBRkYGT12xqfm4G5fBTQQKXt7Axw3DUPIpClnX9+PTjglI2DYWmVf+BqkoB6ekABkhW/Bp21h82jYW2aFH8GW+xM5JxccNw5D18AwunjgMTS1tiIqK4tatWxg3bhwYDAYsLCwgLi4OHR0djB07Fnv27IGMjAxWrlyJGzduICsrC66urkhJScH69evRr18/dOnSBXv37v2ln4WWlhb3s2nuCCG4evUqOnbsiOnTp6N79+6IiYnBjh07GkUikJGRgZCQEEyfPl3QoVAU1Qz88gTCoUOHQkpKCqdOnaq2RGtAQAAMDQ1hZGSELVu24N27d5g+fTpUVFQQFRWFAwcOICoqCo8ePeLOfE9KSkKXLl2Qk5OD2bNnQ19fH4mJiQgMDERRURFERERQUFAACwsLxMTEwN7eHh07dkRGRgaCg4Px+fNnnj/2/mEJNT4+mHV9P1hSLSBnMRGlia9R8PwKmKKSKE2MAUtGCXKWU1EcH468sCAIK7aGlHE/nvMLX90AYZdBoo0ZpLKzMHDgQO5rL1++hI6ODqysrJCbmwt/f3/o6+vDxcWFW2bv3r0wNDTEiBEjICQkhJCQEMyfPx8cDgcLFiyo1WdPCEFmZibYbDZiY2Ph4uICFouFPn361Or8pur58+dwcnLCjRs30KtXLzx69Ahdu3YVdFh1cvz4cRBCMGHCBEGHQlFUc0D4YPz48URZWZmw2WzuseTkZMJkMomHhwchhJCioqJq5504cYIAIHfu3OEemzJlCmEymSQ8PLxaeQ6HQwghZO3atQQACQoK+maZKr03/Utau1zgfikMcSQAiJh2R6K5IoR7XFRdnwAMItVhMPeYpvN5wpJWJKKtjLjH1OceJgAIQ1SCaCz2J3qOR4mrqysJCgoijo6Vddvb2/PEYGNjQxQUFHiO1fR5DBw4kOjo6FQ7/i3JyckEAPdLQ0ODBAQE1Pr8pubjx49k8uTJhMFgkHbt2pFz585V+/fQWHTo0IGMHDlS0GFQFNVM8OV5tLFjxyItLQ23bt3iHgsMDASHw8HYsWMBgGeiVklJCTIyMtCtWzcAQEREBIDKCXbnzp3D8OHD0blz52rXqeo9OHPmDExNTWt87vrLZ+sLStlIyCqqMWYp0wE8ZUVU2wEgkDL57/EyBpMFERU9sHNTq50v0bYHWBKyYIu1wCo3D9jY2HB365s7dy5PWQsLC2RmZiIvL4977MvPIzc3FxkZGbC0tMS7d++4SwX/iLy8PK5fv46QkBB4eHhAUVERBQUFtTq3KcnJycGKFSvQtm1bXL16FXv27EFkZCT++OOPRrnWwosXL/Ds2TM6REBR1G/Dl3UGBg0aBFlZWQQEBKBfv8ru9ICAAJiZmaFt27YAKtdXX7duHU6ePMldHrdK1c0vPT0deXl5MDIy+u714uPjYWtr+90yKSkpeJOSB3ZBNgCAISoBpvB/a8sLyfA+fscUlfj/ccWvjkuCU1L9BiskV7ksLAHwIbMQhmqy3Ne+XrmuamOe7Oxs7rr/9+/fh5ubGx4+fIiiIt6EJTc3F7KyssjNzUVxcTH3uIiICOTl5Xm+t7a2BgAMGzYM/fr1Q8+ePaGsrIxhw4Z966NpMkpLS7F37154enqipKQELi4uWLZsGaSlG8fS0d/i6+sLZWVlDB48WNChUBTVTPAlGRAVFcXIkSNx9uxZ7NmzB6mpqbh//z68vLy4Zezs7PDgwQM4OTlxZ85zOBwMGjQIHA7/HvmroqqqyvO9whBHSJlY/3eA8Y1OkZqO1/DABUPov8Si7KtHFr/1zDr5fz3x8fHo168f9PX1sXXrVrRq1QoiIiK4dOkStm3bxv08HBwc4Ofnxz3f0tKSp/flaz169ICqqir8/f2bdDJACEFAQABWrlyJjx8/YubMmXB3d6/2M2+MysrKcOzYMUyZMgXCwsKCDoeiqGaCbysQjh07Fn5+frh58yZiYmJACOEOEWRnZ+PmzZtYt24d1q5dyz0nNjaWpw4lJSXIyMggMjLyu9fS1dX9YZnr16/jQ0YhVp2vLCesWH9LCIsI1W20JSQkBKWlpQgODubpRQgNDeUp5+zsjEmTJnG//3Lr328pKSmp9TBDY3T79m04OTkhPDwcw4cPx4ULF2BgYCDosPjm8uXLyMjIwNSpUwUdCkVRzQjfkgFra2vIy8sjICAAMTEx6NKlC7S1tQH811ImX7Wwv15VjclkYuTIkTh27BiePHlSbd4AIQQMBgO2trbw8PDA2bNnq80bqCpjbW2NwlI2/nohhPpcSIEBQEuhbgv81PR55ObmwsfHh6ecgYFBjTe6wsJCMBgMSEjwLnh05swZZGdn1zjforGLjo6Gi4sLQkJC0LlzZ4SGhjbJpyZ8fHzQsWNHmJiYCDoUiqKaEb4lA8LCwhg1ahROnjyJwsJCeHt7c1+TkZFB7969sWnTJpSXl0NdXR3Xrl3D+/fvq9Xj5eWFa9euwdLSErNnz0b79u2RnJyM06dP4969e5CTk4OTkxMCAwMxZswY2Nvbo1OnTsjKykJwcDD27dsHU1NTAICkqBA05SXw8RuTCPlBU0ECkqJ1+xgHDBgAERERDB8+HHPmzEFBQQF39cDk5OQfnh8bGwtra2uMHTsW+vr6YDKZePLkCY4dOwYtLS04ODj87NtpcJKTk+Hm5obDhw+jdevWOHnyJMaMGdMk92JIS0vDxYsXsW3bNkGHQlFUM8PXjYrGjh2LQ4cOgcFgwM7Ojue148ePY9GiRdi9ezcIIRgwYAAuX75cbVtddXV1hIWFYc2aNfD390deXh7U1dUxePBgbktYSkoKd+/ehZubG86ePQs/Pz8oKyujX79+0NDQ4KnPqp0yjoZ95Ovqg1VYTAas2irX+bx27dohMDAQq1evxvLly6GiooJ58+ZBSUkJ9vb2PzxfQ0MDtra2+Pfff+Hn54fy8nK0bt0aCxcuxKpVq6CgoPAzb6dBKSgowObNm+Ht7Q0xMTFs2bIF8+bNg6io6I9PbqSOHz8OBoOB8ePHCzoUiqKamSa/HHFsaj76b79Tb/XfWNIbesqNe/Z6Q8Jms3Ho0CG4u7sjJycHDg4OcHFxqdV8icaMEAIzMzO0adMGgYGBgg6Hoqhmpun1tX6lTUtpWOgpgsXk7/PmLCYDFnqKNBHgE0IIzp8/DyMjI8yfPx8DBgzAmzdvsHHjxiafCACVqya+fPmSri1AUZRANPlkAAC8bIwhxOdkQIjJgJeNMV/rbEoSExMRHh6OqKioH5YNCwuDpaUlRo4ciVatWuHp06f4559/0Lp1698QacPg4+ODli1b8ixrTVEU9bs0i2SglbwE1o0w5GudHiMM67R9cXNSte+Ck5MTzM3NMW/ePDx9+hQAeNaUiI+Ph52dHbp164acnBxcuXIF165dQ4cOHQQVukCUlpbC398fkydPhpAQX6fxUBRF1UqzSAYAYJy5JpYPaMuXupwGtMNY8/pbt6AxO3nyJLZs2YLDhw8jJCQEfn5+eP36NaZPn46CggIwmUykp6fDwcEB7du3x4MHD+Dj44Nnz55h4MCBjXL54F918eJFZGVlYdq0aYIOhaKoZqrJTyD82snwBLgFR4HNIXV6woBUsCEsxMRfNqY0EfiOBQsWIDs7G8ePH+ceW7JkCXbs2IHBgwfDwsIC69evByEErq6ucHBwqLZeQnMzfPhwpKam4vHjx4IOhaKoZqrZ9AxUGWeuiRtLLNFD5/+P35HvL4VcNfFQkZOFdF8HdG9Z3xE2XsXFxUhKSoKcnBzPcIC6ujo6deqEK1euYPXq1Zg6dSri4+Ph6ura7BOBlJQUXL58mfYKUBQlUM2uZ+BLsan56D/fA5J6XVDElOBZqZCBygWFrNoqY1I3TSiJcmBoaAgTExNcvHixWXZn14aXlxf27NkDd3d3jBw5Eu7u7ti7dy84HA40NDRgamqKwMBAiImJCTrUBmHLli1YuXIlUlJSmsVTE1TjVljKxofMQpSxORARYkJLQbLOi65RDVOzTgbS09OhrKyMEydOYLjN6B/+Iw8JCcGIESNw7NgxTJw4UUBRN0xVy0ADwMSJE3H79m1kZGSgtLQU+vr68PHxwbVr13Dx4kWEhYUJONqGgRACY2NjGBoaIiAgQNDhUFSNYlPz4R+WgNA3aUjIKqreaJKXgFU7ZUzsqok2Lemj1o1Vsxsm+FJ4eDgAoEuXLpAUFYKhmiw6aLaAoZpsjdnu8OHDMX78eDg4OFTbhrk5iY2NRUpKCs8xBoOBiooKJCQkgMFgICkpCUpKSjh79iyio6PRrVs3pKWlQV5eHoSQavtUNEdPnz5FVFQUHSKgGqRPWUWYfDgM/bffwdGwj/j4VSIAVG7h/jGrCEfDPqL/9juYfDgMn+px+Xeq/jTrZCAsLAyKiorcDZVqY8eOHQDQpNb/r63379+jc+fO+OOPP2BoaIjly5cjIiICQOXOlKtWrULbtm1x/fp17N69G+/evcPIkSPBYDDw+fNnPHr0CEOHDgWDwaDDLAB8fX2hpqaGAQMGCDoUiuJxMjwB1ttu48G7TAD44WTrqtcfvMuE9bbbOBmeUO8xUvzVrIcJBg8eDCaTiYsXL9bpvOPHj2PixIk4f/48RowYUU/RNSxJSUkYNmwYOnTogDlz5uDly5fYunUrWrVqBRMTE/j4+KC4uBjLli2Dk5MTpKUruwvfvHmD4OBgeHt7o2fPnjh9+jR318bmrKSkBGpqapg9ezY2bNgg6HAoiuvv0Fh4X3v7y/UsH9AWC63a8CEi6ndotj0DhBA8fvwYXbt2rfO548ePx9ChQzFv3jzk5ubWQ3QNz7t375CSkoI1a9agS5cumDFjBv744w/cvXsX3t7eGDFiBGJjY+Hh4cFNBIDKJwzi4uLg7u6OoKAgmgj8X0hICLKzs+kQAdWgnAxP4EsiAADe194ioBn1ECQlJcHd3R3Pnz8XdCg/pdkmA/Hx8cjKykKXLl3qfC6DwcDevXuRn58PZ2fneoiu4WGz2ZCQkEB2djbu3LmDrl27YsOGDdDX14ehoSE0NTW5O1DevHmTOx/D2NgYO3fuxLx58wQZfoPj6+uLbt26QV9fX9ChUBSAyjkCbsE/Xj68LtYGRzWbOQRJSUlYt24dTQYam6oFXszNzX/q/FatWmHTpk04cOAAQkND+Rlag6SsrIzs7GxMnz4dlpaW4HA4CA0NxZ07d2BlZYX79+8jISEB8fHxcHBwwIYNG5Cfnw8Wi9Wktx3+GUlJSbhy5QrtFWimiooa5s1x5dlXYPN5q3c2h2Dl2Vd8rbO5KSws/C3XabbJQFhYGPT09KCgoPDTdcyePRu9e/fGrFmzGuwvOD+kpKRgx44dyM7ORmRkJLZv347Hjx/D0tISUlJSsLOzw4MHD8Bms6Grq4s5c+Zg8eLFPMMF1H+OHTsGERERjB07VtChNEmJiYmwt7dHy5YtISoqCkNDQxw5coT7+q1bt8BgMHDq1CmsW7cO6urqkJaWxujRo5Gbm4vS0lI4OjpCWVkZUlJSmD59OkpLS6td59ixY+jUqRPExcUhLy+PcePG4dOnTzxl+vTpAyMjIzx9+hS9e/eGhIQEVq5cCQDIzMzE5MmTISMjAzk5OUydOhUvXrwAg8GAr68vTz2vX7/G6NGjIS8vDzExMXTu3BnBwcE8ZXx9fcFgMHD//n0sXboUSkpKkJSUhI2NDdLT06vFf/nyZVhaWkJaWhpS0jI4tXoy8l5VNmxy7vrj46Y/UFFUfRg08/IuJGwbC8Iu++7PgbDLkXn7GE4ut4GIqChatWoFZ2fnap8lg8HAwoULce7cORgZGXF/ZleuXKlWZ2JiImbMmAE1NTWIiopCW1sb8+bNQ1nZf7G8e/cOY8aMgby8PCQkJNCtW7dq88KqPqsPHz7wHK/6t3Hr1i3usaqfYXR0NKysrCAhIQF1dXVs2rSJ57yqhuX06dO5k6S//DmGhYVh0KBBkJWVhYSEBCwtLXH//n2e67u7u4PBYCA6OhoTJkxAixYt0KtXr+9+zvzSbFeLePz48U8NEXyJyWTi4MGDMDExgZubGzZv3syn6BqGgoICeHt7w9vbGyIiIli/fj0OHjyI0NBQjB07FioqKgAAFRUVSEtLIzk5GTo6Oli0aJGAI2+4CCHw8fGBjY0N5OTkBB1Ok5Oamopu3bpxbzBKSkq4fPkyZsyYgby8PDg6OnLLrl+/HuLi4nBxcUFcXBx27doFYWFhMJlMZGdnw93dHY8ePYKvry+0tbWxdu1a7rl//fUX1qxZAzs7O8ycORPp6enYtWsXevfujWfPnvH8bDMzMzF48GCMGzcOkyZNQsuWLcHhcDB8+HA8fvwY8+bNg76+Ps6fP4+pU6dWe09RUVHo2bMn1NXV4eLiAklJSZw6dQojR47EmTNnYGNjw1N+0aJFaNGiBdzc3PDhwwds374dCxcu5FnLwtfXF/b29jA0NISrqyvuJxTjblg4it89haRhH0gaWSH3/gkUxtyBTKfh3PNIRTmK3tyHRLseYAiJfPPnQAgHaWc8UPo5GtJmg9Db3AxazExs27YNb9++xblz53jK37t3D0FBQZg/fz6kpaWxc+dO2NraIiEhgdtgS0pKQpcuXZCTk4PZs2dDX18fiYmJCAwMRFFREURERJCamooePXqgqKgIixcvhoKCAvz8/DBixAgEBgZW+6xqKzs7G4MGDcKoUaNgZ2eHwMBArFixAsbGxhg8eDDat28PDw8PrF27FrNnz4aFhQUAoEePHgCAf//9F4MHD0anTp3g5uYGJpMJHx8f9O3bF3fv3q12LxozZgzatGkDLy+v3/cYNmmGSktLiaioKNm+fTtf6tuwYQNhMpnk8ePHfKlP0MrLy8m+fftIy5YtiaioKHFyciJZWVmEEEKeP39OxMXFyYwZM8jly5dJQUEBcXV1JaampiQ1NVXAkTd8jx49IgDI1atXBR1KkzRjxgyiqqpKMjIyeI6PGzeOyMrKkqKiIhIaGkoAECMjI1JWVsYtM378eMJgMMjgwYN5zu3evTtp3bo19/sPHz4QFotF/vrrL55yr169IkJCQjzHLS0tCQCyb98+nrJnzpwhAHj+BlVUVJC+ffsSAMTHx4d7vF+/fsTY2JiUlJRwj3E4HNKjRw/Spk0b7jEfHx8CgFhbWxMOh8M9vmTJEsJisUhOTg4hhJCcnBwiLS1NunbtSoqLiwkhhPTe9C9p7XKBaK4IIa1dLpDWLheIqLo+EVFrx/2+tcsFomSzkgAgLcd78Rz/+kth2DICBpO0nLiRtHa5QHpv/pcQQsi+ffsIAHL//n1ufACIiIgIiYuL4x578eIFAUB27drFPTZlyhTCZDJJeHg4+VrV+3V0dCQAyN27d7mv5efnE21tbaKlpUUqKip4Pqv379/z1FP1byM0NLTaz/Cff/7hHistLSUqKirE1taWeyw8PLzaz64qtjZt2pCBAwfy/FyKioqItrY26d+/P/eYm5sbAUDGjx9f7T3Wt2Y5TPDy5UuUlpb+1JMENVm2bBnMzMwwY8YMnu6qxoYQguDgYBgbG2Pu3Lno378/3rx5g02bNnGXyjU1NcXp06eRlJQEGxsbWFhY4PDhw9ixYweUlZUF/A4aPl9fX2hoaKBfv36CDqXJIYTgzJkzGD58OAghyMjI4H4NHDgQubm53HUxAGDKlCkQFhbmft+1a1cQQmBvb89Tb9euXfHp0yew2WwAQFBQEDgcDuzs7HiuoaKigjZt2lSbQyQqKorp06fzHLty5QqEhYUxa9Ys7jEmk4kFCxbwlMvKysK///4LOzs75Ofnc6+VmZmJgQMHIjY2FomJiTznzJ49m2cdDwsLC1RUVODjx48AgOvXryM/Px8uLi4QExNDQSkbCf+f5PfleZJGfVGW9Abl2cncY4XRt8CSUYKopvG3fgwAgKLX9yCsoAFhBQ1UFOXi/adkfExMQd++fQGg2mdkbW0NXV1d7vcmJiaQkZHBu3fvAFRufX7u3DkMHz4cnTt3rna9qrgvXbqELl268HStS0lJYfbs2fjw4QOio6O/G/e3SElJYdKkSdzvRURE0KVLF2583/P8+XPExsZiwoQJyMzM5P4MCwsL0a9fP9y5c4dnLxcAmDt37k/F+Sua9DAB+WKJ3C+FhYVBWFgYZmZmfLmOkJAQDh8+jM6dO2Pjxo1Ys2YNX+r9nR4/fgwnJyfcuXMH/fr1g7+/Pzp27Fhj2aFDh6JHjx54+/YtsrOz0bdvX4iIfLvLkKpUXFyMEydOYMGCBfQRy3qQnp6OnJwcHDhwAAcOHKixTFpaGjex1dTk3X1UVlYWQOXk4K+Pczgc5ObmQkFBAbGxsSCEoE2bmp+h/zLBACo36vr69+Pjx49QVVWttlGXnp4ez/dxcXEghGDNmjXf/LuSlpYGdXV17vdfv6+q95udnQ2g8kkqADAyMqqMJbOw2sqCACDRvjeybhxEYdQtyPUaD05JIYriwiFj/gf372pFUS7wxY2MISIGpog42NlJKM/8hM87/1u2XWsnb8xf+jrmqrirYk5PT0deXh435m/5+PFjjY289u3bc1//UR010dDQqHYvadGiBV6+fPnDc2NjYwGgxiGgKrm5uTx7k9RlITx+abLJQFUikJubi4qKCsjLy3Nfe/z4MUxNTfm6WY6ZmRlWrFgBT09P2NrawsDAgG9116f4+HisWrUKAQEBMDY2xuXLlzFw4MAfrhDYokULvvWsNBfnz59Hbm7ud/8oUD+vqnU1adKkb37GJiYm3NbhtxKybx0n/x+75XA4YDAYuHz5co1lpaSkeL4XFxev3RuoQdV7Wr58OQYOHFhjma8TiB/F/7Uyds07t7LEpCChZ47C6MpkoPDNfaCiHJKGVtwyyb5LUJH3341dtud4yFlMBCEEwkpaaNFvJve1dcMNoKdcOan464SrrjH/qm/9fauoqKjx+K/EV/Uz3Lx58zcboPz8N/OzmmwyUDUj09PTE2/evIG1tTU2bdqEqKgoXL58GaampkhOToaqqirfrrlmzRqcOXMGM2fOxN27dxt06y8zMxOenp7Ys2cPlJSUcOTIEUyZMqVBx9zY+fr6omfPnmjbtq2gQ2mSlJSUIC0tjYqKClhbW3+z3M92FVfR1dUFIQTa2to//bNs3bo1QkNDUVRUxNM7EBcXx1NOR0cHQGVvw/feU11UdcdHRkZCT08PIkLfHi2WNOqHojOeKE1+i8KoWxBpqQsRpdbc1xVHLOd5qkBIrnJSsXALFZSlvYdYa1PujdeiTy8Yqsn+VMxKSkqQkZFBZGTkd8u1bt0ab968qXb89evX3NeB/3pLcnJyeMpVDaX8jG8lGFWft4yMDN9+hvWhyc4ZqKiowMKFC/HhwwfY2toiODgYW7ZswZgxY5Ceno7w8HDY2NhU23DnV4iJieHw4cN49OgRdu/ezbd6+am4uBgbN26Erq4ujhw5And3d8TGxmL69Ok0EahHnz9/xrVr1+jaAvWIxWLB1tYWZ86cqfGmUdPjdT9j1KhRYLFYWLduXbWWISEEmZmZP6xj4MCBKC8vx8GDB7nHOBxOtb8bysrK6NOnD/bv34/k5OSvq/mp9zRgwABIS0tj/fr1KCkpgZaCJKpuY1+/H3GdTmCKyyDvUSBKP0VC0rAPz+tiGgYQ1zLjfgn/PxmQ0LdARX4mCl5cBVC5u6GWgiSAyr9BdX12nslkYuTIkQgJCcGTJ0+qvV4V95AhQ/D48WM8fPiQ+1phYSEOHDgALS0tbo9t1Q36zp073HIVFRXfHF6qDUnJyvf3dYLRqVMn6OrqwtvbGwUFBdXO49e/y1/VZHsGoqOjERMTg+joaLRo0QIdO3bE2LFjMWrUKMTExODQoUPw8PDAtm3bsHHjRr5dt2fPnliwYAFcXV0xYsQIaGlp8a3uX8HhcHDs2DGsXr0aycnJmDt3LtauXQslJSVBh9YsHD16FGJiYrCzsxN0KE3ahg0bEBoaiq5du2LWrFkwMDBAVlYWIiIicOPGDWRlZf3yNXR1dfHnn3/C1dUVHz58wMiRIyEtLY3379/j7NmzmD17NpYvX/7dOkaOHIkuXbpg2bJliIuLg76+PoKDg7nxfdnK3L17N3r16gVjY2PMmjULOjo6SE1NxcOHD/H582e8ePGiTvHLyMhg27ZtmDlzJszNzTFhwgQIvUlDyoc3IOWlUBy2lFuWwRKCZPveyI+4ADCYkDCwrNU1JI2sUPT6LrKu7EbJx5dQbWeKQ/vi8Pr1a5w6dQpXr16tcSLg93h5eeHatWuwtLTE7Nmz0b59eyQnJ+P06dO4d+8e5OTk4OLighMnTmDw4MFYvHgx5OXl4efnh/fv3+PMmTNgMivbv4aGhujWrRtcXV2RlZUFeXl5nDx5kjtJ9Gfo6upCTk4O+/btg7S0NCQlJdG1a1doa2vj0KFDGDx4MAwNDTF9+nSoq6sjMTERoaGhkJGRQUhIyE9fl1+abDIQGRkJFRUVbndQeXk55OTkoKenB1lZWYwaNQppaWk4efIk36/t5eWF4OBgzJ49G1evXhX4Dn3Xr1+Hk5MTXrx4gdGjR8PLy+ubk58o/iOEwNfXF7a2tpCRkRF0OE1ay5Yt8fjxY3h4eCAoKAh79uyBgoICDA0N+Zr0u7i4oG3btti2bRvWrVsHoHIcfMCAAbXavIzFYuHixYtwcHCAn58fmEwmbGxs4Obmhp49e/LMZzIwMMCTJ0+wbt06+Pr6IjMzE8rKyujQoQPP2gd1MWPGDCgrK2PDhg3w9PQEh8EC5NQg3fmPamUljfsiP+ICxLRMISQlX0Nt1TEYTCiNWo288HMojAzFh7hHWHdbEjo6OnBwcPip4RV1dXWEhYVhzZo18Pf3R15eHtTV1TF48GDuUEvLli3x4MEDrFixArt27UJJSQlMTEwQEhKCoUOH8tTn7++POXPmYMOGDZCTk8OMGTNgZWWF/v371zk2oHIox8/PD66urpg7dy7YbDZ8fHygra2NPn364OHDh/D09MTff/+NgoICqKiooGvXrpgzZ85PXY/fmuyuhcHBwfD09MSff/4JS0tLLFy4EOHh4dDS0kJRURGuX78OFxcXREVF1UtWduXKFQwePBg+Pj4C6xp+8eIFnJ2dce3aNfTo0QPe3t7o3r27QGJpzh48eICePXvixo0b9JFC6rvOnTsHGxsb3Lt3Dz179vxt1735JBozzryv8bWy1HdI9lkMhWFLIWXU96fqv7GkN3fyINUwNdk5A1ZWVtDW1saiRYu4j62IiYnh33//hYGBAc6fP4979+7V24SOQYMGYcqUKViyZAlf5yXUxqdPnzBt2jR06NABHz58QFBQEO7du0cTAQHx9fWFpqYmrKysflyYajaKi4t5vq+oqMCuXbsgIyPzzcd6+a2goACrVq3CkJ4dQJKiwayhE7PgxVUwRMQh0bZHnetnMRmw0FOkiUAj0GR7BgAgOTkZAQEBkJCQwJgxY3DmzBnMmjULJiYmSE5OxqBBg7B+/XqeZ3T5KTMzEwYGBrCwsEBgYGC9XONLubm52LBhA7Zv3w4ZGRm4u7tj5syZ1Z57pn6foqIiqKqqwsHBAR4eHoIOh2pAZs6cieLiYnTv3h2lpaUICgrCgwcP4OXlBVdX13q9NiEEJ06cgJOTEzIzM7FixQpMnL0Yw/c9Run/HzUsig1DeeYn5Nw5BulOQyHfb9YPaq1OVIiJG0ss0Upe4seFKYFqsnMGCCFQVVXlWYu8ar3wPn36wNjYGJMnT67XHfUUFBTw999/w87ODmfOnIGtrW29XKesrAz79u2Dh4cHiouL4eTkBCcnJ7pRUANw9uxZ5OXl0bUFqGr69u2LLVu24MKFCygpKYGenh527dqFhQsX1ut1nz17hsWLF+PevXsYNWoUvL29uYvcrBthCJegyl0Gs67vB6coB+K6nSHXa+L3qvwmjxGGNBFoJJp0z0DVW6uawOfs7IyTJ08iISHht8YwatQoPHz4EDExMTyrTPGj7sDAQLi6uuL9+/ewt7fHunXroKamxrdrUL+mf//+KC0t5XmEiaIEISMjA6tXr8aBAwfQvn177Nixo8Zh0r9DY+F97e0vX29mF2Wstvm5LeKp36/JzhkAwN1GskrVToXFxcVISkr6pcdI6hLD7t27UVJSgmXLlvGt3rt376J79+6ws7ODvr4+Xrx4gYMHD9JEoAFJSEjAzZs3q61LT1G/E5vNxt9//402bdrg5MmT2LZtG54/f/7N+VILrdpgwyhjiAoxwappEsF3sJgMiAoxkXt9D9baVj7eWbUcL9WwNdlk4OsOj/Lycjx58gRdu3ZFZGQkxowZg127dv2WWNTU1LBlyxb4+Pjg+vXrv1TX69evMXLkSPTu3RtsNhv//vsvLly48FPrbVP1659//oG4uDhGjx4t6FCoZurWrVvo2LEjFi9ejNGjR+Pt27dwcHD44TyiceaauLHEEj10KrcP/lFSUPV6Dx0F3FhiCQPRHBBCcPjwYbRr1w42NjZ49OgRf94UVS+abDLAYDBQVlaGvLw8AJU30cLCQnTp0gVCQkJQUFCAoqLib4vH3t4effv2xezZs2tchepHUlJSMG/ePBgZGeHFixc4fvw4Hj9+TGeoN1BVawuMGTOGzt2gfruEhASMHTsWVlZWkJSUxOPHj3Hw4ME67SzaSl4CR2d0xXXH3pjctTVaK0jg65SAAaC1ggQmd22NG0t64+iMrmglL4GhQ4eCwWCAEAJCCC5cuIDu3bujX79+jXpn16asSU4grFpt7+7du0hMTERRURHy8vLAYDBQUlICS0tLBAcH/9aYGAwGDh48CCMjI6xevRrbt2+v1XkFBQXYunUrNm3aBBEREWzatAkLFiyo14mP1K+7d+8e4uPjcejQIUGHQjUjxcXF8Pb2xvr16yErK4t//vkHEydO5K689zPatJSG+whDuMMQhaVsfMgsRBmbAxEhJrQUJCEpWv020q1bN57e2aoh2aKiIggJNcnbTuNHmqDVq1cTJSUlYmVlRRYuXEgcHByIrq4ukZSUJGZmZmTbtm2kqKhIILFt3bqVMBgM8uDBg++WKy8vJ/v37ycqKipERESELF++nGRlZf2mKKlfZW9vT7S0tEhFRYWgQ6GaAQ6HQ4KCgoiWlhYRFhYmzs7OJC8vT2Dx5OXlEQaDQQBwv8aNG0dKSkoEFhP1fU0uGUhNTSUyMjIkJCSEe4zNZhMjIyPyxx9/kNWrVxMpKSkSHBwskPjYbDbp0qULad++fY2/GBwOhwQHB5P27dsTAGTixInk/fv3vz9Q6qcVFBQQKSkp4u7uLuhQqGYgKiqKWFtbEwBk8ODB5M2bN4IOiRBCSLt27QgAwmQyiYyMDOnRowcpLS0VdFjUNzS5ZCA0NJRoaGjwtMgKCgoIk8kkBw4cIIQQ4uTkRCwsLAQVInn16hURFhYma9as4Tn++PFjYmlpSQCQvn37kqdPnwooQupX+Pn5EQDk3bt3gg6FasKys7OJo6MjYbFYRE9Pj1y4cEHQIfFwdHQkCgoK5M6dO+Thw4dERESEzJ07V9BhUd/Q5JKBiIgIYmpqSv766y9SWlpKOBwOuXPnDgFAnj9/TgghZPPmzcTc3Fygcbq7uxMhISHy4sULEh8fT8aNG0cAECMjI3Lp0iXC4XAEGh/186ysrEifPn0EHQbVRLHZbHLw4EGipKREJCUlyYYNGxpk93tZWRlPT8DBgwcJALJ//34BRkV9S5NLBgghZP369URPT48sXLiQhISEkBUrVhBxcXESGRlJtm7dSrp06UI8PDwEGmNpaSlp3749admyJRESEiJqamrk8OHDhM1mCzQu6te8f/+eACB+fn6CDoVqgh48eEA6depEAJBJkyaRxMREQYdUJ/PnzyfCwsLk/v37gg6F+kqTTAZKSkrI7t27iaGhIRESEiIMBoOwWCzSvn17oqenR1asWEEyMjIEFl9xcTHZuHEjkZSUJADIoEGDSGFhocDiofjH3d2dSElJkYKCAkGHQjUhSUlJZPLkyQQA6dixI7l3756gQ/oppaWlxMLCgqioqJDPnz8LOhzqC016OWIAyMvLg76+Prp27YqRI0fC1NQUZmZmAomFw+HA398fq1evRlJSEubMmYOKigr4+vri1atX0NPTE0hcFH9wOBzo6emhT58+OHLkiKDDoZqA0tJS7NixA56enhATE4OXlxfs7e3BYrEEHdpPS01NRefOnaGmpobbt29DTExM0CFRQNN8tPBLKSkpBAA5deqUQOO4fv06MTMzIwCIra0td8ZvQUEB0dHRIZaWlvQxtEbu1q1bBAC5c+eOoEOhmoBLly6RNm3aEBaLRRYvXtykHi0ODw8noqKixN7ens6PaiCa7AqEVR4/fgwA6NKli0Cu//LlSwwaNAj9+/eHhIQE7t+/j8DAQLRt2xYAICkpiYMHD+L27dt0gZpGzsfHBzo6OujVq5egQ6Easbi4OAwfPhxDhgyBhoYGnj9/jh07dvB1kzNB69y5Mw4cOIAjR45gz549gg6HAppmz0BYWBjR09MjI0eOJFZWVkROTo7k5ub+1hg+ffpEpk2bRhgMBmnTpg0JCgr6bgY8c+ZMIiMjQz59+vQbo6T4JT8/n0hKSgp8YirVeOXn5xMXFxciIiJCNDU1SWBgYJNvNTs6OhIhISFy69YtQYfS7DXJZODevXsEAM8KWAwGg7Rr1468ePGiXq+dk5NDXF1diZiYGFFSUiK7d+8mZWVlPzwvOzubqKqqkmHDhjX5PwBNkY+PD2EwGOTjx4+CDoVqZDgcDjl27BhRU1MjYmJixN3dvdlMKC4vLyd9+/YlSkpK9HdHwJpkMlBaWkrExMR4lsIEQISFhUl0dHS9XXPnzp1EUVGRiIuLk9WrV9e5N+LcuXMEADlx4kS9xEjVn969e5N+/foJOgyqkXn69Cnp0aMHAUBGjx5NPnz4IOiQfrv09HTSunVr0rFjR4EtE0810WSAEEIGDhxYbW1sHx8fvl+Hw+GQ06dPEz09PcJkMsmMGTN+6ZEZOzs7oqioSNLT0/kYJcUPFRUV3MVdvuy9iYuLIwDI0aNHBRUa1cikpaWR2bNnEwaDQQwNDcnNmzcFHZJAPXv2jIiLi5NJkybRnlEBabLJwObNm7nJAIPBIAsWLOD7Ne7evUu6detGAJAhQ4aQV69e/XKdKSkpRF5enkycOJEPEVL8dPHiRdK/f/9q8zrWrFlDpKWlm03XLvXzysvLyc6dO4mcnByRk5MjO3fuJOXl5YIOq0E4ceIEAUC2bNki6FCapSabDERERHB7BHr06FGrcfvaev36NRk5ciR3ARB+Z/VVa9s3tLXGm7vRo0dz554cP36clJSUkIqKCqKpqUlmzpwp6PCoBu7mzZvE0NCQMBgMMnv2bJKWlibokBocZ2dnwmQyyfXr139YlsPhkPz8/N8QVfPQZJOBiooKwmKxiJiYGElJSeFLnSkpKWTevHmExWKR1q1bE39//3pZG4DD4ZCBAwcSDQ2N3/4UBPVt4uLi5MKFC2TWrFmkTZs2ZM+ePeTmzZsEQKNdEY6qf+/fvye2trbchgndgOzb2Gw2GTBgAJGXlyfx8fHfLRcUFERcXFxIQkLCb4yw6WpSyUBBSTmJTMwhER+zSGRiDtm6czcJDQ399XoLCoiHhweRkpIicnJyxNvbmxQXF/96wN/x4cMHIikpSebNm1ev16FqJzw8nEhJSRFCCPn8+TNZunQpERERIaqqqkRTU5OOc1LVFBYWEjc3NyImJkZUVVXJsWPH6L+TWsjMzCS6urrE2Nj4u8t6X7lyhdja2pIhQ4b8xuiarkafDLxNySNu5yNJ703/Ei2XC6T1F19aLhdI703/ErfzkeRtSl6d6y4vLycHDx4kqqqqREREhCxbtoxkZmbWw7uo2a5duwgAcvv27d92Tapmjo6OZNCgQTzHzp8/T5hMJlFXVyf//vuvgCKjGhoOh0MCAwOJpqYmERYWJi4uLiQvr+5/f5qzV69eEUlJSTJmzBieBIrD4fAM+VbNDbty5YogwmxSGu0KhJ+yijD5cBj6b7+Do2Ef8TGrCF9vskAAfMwqwtGwj+i//Q4mHw7Dp6yiH9ZNCMGFCxdgamqKWbNmwcrKCm/evIG3tzfk5eXr5f3UZP78+ejZsydmzpyJ4uLi33ZdqrqrV69izJgxAAA2mw1CCNLT00EIgaGhISZNmoRt27ahtLRUwJFSghQZGQlra2uMHj0aJiYmiIqKwvr16yEtLS3o0BoVIyMj/PPPPzh9+jQ2btwIoPL3jsFgQFhYGKmpqRg+fDhWrVqFKVOmQFlZWcARN36NMhk4GZ4A62238eBdJgCggvP9vZaqXn/wLhPW227jZHjCN8s+efIEffv2xfDhw9GyZUs8efIE/v7+0NLS4lv8tcVkMnHo0CF8/PgRHh4ev/36VCUOh4MpU6bAxsYGACAkJAQGgwEfHx/0798fp06dwtSpU7Fs2TLcvn1bwNFSgpCdnQ0HBweYmZnh06dPuHjxIkJCQtCmTRtBh9ZojRo1CvPnz8fKlStx+fJlCAkJAQD+/PNPtGrVCikpKTh9+jS2b9+ODh06CDjaxq/R7Vr4d2gsvK+9/eV6lg9oi4VW//2ivn//HqtWrcKJEydgaGiITZs2YfDgwWAwGL98rV/l5eWFtWvX4vHjx+jYsaOgw6EAxMbGom3btvD398eECRMAADdu3ICFhQVERUUFHB31u1RUVODIkSNYuXIlSkpKsHbtWjg4OEBERETQoTUJHh4e2LhxI4SFhbFr1y64u7sjJycHy5cvx8SJE9GqVasG8Te6KWhUycDJ8AS4BL3iW30bRxmjv64U/vrrL/z9999QUFCAp6cnpk2b1qC2CC0vL4e5uTkYDAYeP34MYWFhQYfUrFT9inz5R2f16tX4+++/kZycDFFRUTAYDPpHqZm5f/8+Fi9ejIiICEyZMgUbNmyAqqqqoMNqcuTl5VFQUIDy8nKMHj0azs7OMDExoUk3nzWaYYJPWUVwC47ia52rgl5Az6wbDhw4gDVr1iA2NhYzZsz4LYlAUVERdu/ejQEDBkBVVRXS0tLo0KED9u7di4qKCp6ywsLCOHLkCF69egVvb+96j43i9fWNvqKiAn5+fhg3bhzExcXBZDJpItCMJCUlYfLkyejVqxcYDAYePHgAPz8/mgjUEx8fH5SXl0NUVBTFxcXo1KkTTQTqQaPpGZh8OAwP3mX+cH5AnXAqoMjJwiWnIb99AkpkZCRMTEzQr18/DBgwADIyMrh69SrOnj2LKVOmwM/Pr9o5Li4u2L59O54/fw59ff3fGi9VicPh4Pr16xg0aBAePnyIbt26ISkpCWpqaoIOjapnpaWl2L59Ozw9PSEhIYH169dj+vTpYDIbTZuq0erevTsIIQgLC8O6deuwdu1aQYfU5DSKZCA2NR/9t9+pt/pvLOkNLXlxcDic3zbWl5GRgdTUVBgaGvIct7e3h4+PD2JjY6Gnp8fzWnFxMUxNTaGsrIw7d+7QP0ICMnHiRERERCA6OhoZGRmYMWMGWrdujV27dgk6NKqeXLx4EY6Ojnj//j0WLVoENzc3yMnJCTqsZiMuLg52dnbo06cPtm3bhvPnz2P48OHcHrmahvKouqn13SQyMhIvX77EtGnToKOjAzExMaioqMDe3h6ZmZnVyicmJmLGjBlQU1ODqKgotLW1MW/ePJSVlXHL5OTkYMmSJdDS0oKoqCg0NDQwZcoUZGRk8NTlH5YAFvO/H3LByxv4uGEYSj5FIev6fnzaMQEJ28Yi88rfIBXl4JQUICNkCz5tG4tP28YiO/QIvsx52Dmp+LhhGHLDglDw5Dy6mBpAVFQU0dHRcHd3B4PBQFxcHKZNmwY5OTnIyspi+vTpKCrifSzRx8cHffv2hbKyMkRFRWFgYIC9e/fW6vNUVFSslggA4M5Yj4mJqfaauLg4Dh06hPv379f6OtSv4XA4uHjxInbu3AlnZ2d4eHggMDAQU6ZMAYPBQHl5OSQkJOiNoYl6+/YthgwZgmHDhqF169Z4+fIltm3bRn/ev5menh5CQkKwefNmWFpaYtKkSXj9+jUIIaioqOAO5RUUFAAAfRT7JwjVtqCRkRG2bNmCd+/eYfr06VBRUUFUVBQOHDiAqKgoPHr0iJuVJSUloUuXLsjJycHs2bOhr6+PxMREBAYGoqioCCIiIigoKICFhQViYmJgb2+Pjh07IiMjA8HBwfj8+TMUFRW51w59k1bj8EDW9f1gSbWAnMVElCa+RsHzK2CKSqI0MQYsGSXIWU5FcXw48sKCIKzYGlLG/XjOL3x1A4RdhlY9hmNtfwOeNQTs7Oygra2N9evXIyIiAocOHYKysjL3mVcA2Lt3LwwNDTFixAgICQkhJCQE8+fPB4fDwYIFC2r/U/hCSkoKAPC8/y/17t0b8+bNg4uLC/cPFFU/ysvL4ejoCH9/f7Ro0QJt2rRBfHw8ysrKcO3aNaipqWHq1Kk4efJktXkeVOOWn5+PP//8E9u2bYO6ujqCgoIwcuRI2vIUIHV1dfz1119ISkqCgoIC/vjjDzx+/BhycnLgcDjYuXMnHj58iLi4OEhISMDW1haOjo6CDrvxqMsKRTXtNV2109SdO3e4x6ZMmUKYTCYJDw+vVr5qNam1a9cSACQoKOibZQghJL+kvNrKggpDHAkAIqbdkWiuCOEeF1XXJwCDSHUYzD2m6XyesKQViWgrI+4x9bmHK3czFJUgGov9iZbLBVJQUrlzmJubGwFA7O3teWKysbEhCgoKP/w8Bg4cSHR0dL73MX5TaWkpMTAwINra2t/dySw3N5doaGiQQYMG0eVN61FgYCDR0NDgrgCZmJhIjIyMiJGRERk7dizR0NAgf/31F183waIEq6Kigvzzzz9ERUWFiIuLEw8Pjxp/zynBuHv3Lpk9ezZ58OABkZOTI0OGDCHBwcGkc+fOxMjIiEyaNIm4ubmRtWvXEnV1dbJ582ZBh9xo1LpnAKjspq5SUlKCgoICdOvWDQAQEREBCwsLcDgcnDt3DsOHD0fnzp2r1VGVWZ85cwampqbcbvGaygDAx8zCaisLVpEyHcBTVkS1HUoTX0PKZMB/dTFZEFHRQ1lqfLXzJdr2AEtCFgTAh8xCGKrJcl+bO3cuT1kLCwucPXsWeXl5kJGRqfZ55Obmory8HJaWlrh69Spyc3MhKyuLuli4cCGio6Nx8eJF7gIbNZGRkcG+ffswbNgwHDt2DJMnT/5mWUIIbc38pEuXLqFfv37o3bs3ACAvLw+RkZEICAiAnZ0dNm7ciH379sHW1hbt2rUTcLTUr3ry5AkWL16Mhw8fws7ODps3b4ampqagw6K+0KtXL/Tq1QsA4O/vj2HDhnEXihs3bhx69OgBJSUlAEC7du3g6uqKBQsW8PytpmpWpxloWVlZcHBwQMuWLSEuLg4lJSVoa2sDqLwZAkB6ejry8vJgZGT03bri4+N/WCYlJQVJScmoKMhGRUE2OOW8S70KySjxvhlRif8fV/zquCQ4JQXV6heSa8n9/zI2h+e1r/8ItGjRAkDlSmNV7t+/D2tra0hKSkJOTg5KSkpYuXIlgP8+j9zcXKSkpHC/srKyanyvmzdvxsGDB+Hp6YkhQ4bUWOZLQ4cOxcSJE+Ho6IjU1NQay1Qt30n9HBMTEzx79gxRUZWPtPr5+UFOTg7Dhw8HADg4OEBBQQFXr14VZJjUL0pLS8OsWbPQpUsXFBQUIDQ0FAEBATQRaODMzMygoqKCtLQ0dOnSBX/88Qc3EQCAsrIyKCkpIS8vT4BRNh51Sgbs7Oxw8OBBzJ07F0FBQbh27RquXLkCoHKiFb+pqqpigHl7fP57Mj7/PRlFMXd5CzC+EX5Nx2t4aIIh9N+zqiJCvOd8a60B8v964uPj0a9fP2RkZGDr1q24ePEirl+/jiVLlgD47/NwcHCAqqoq92vUqFHV6vT19cWKFSswd+5crF69uub3VIPt27eDyWRi8eLFPMdfv36NhQsXYsyYMbC3t8fZs2fBZrNrXS9VafTo0RATE4ObmxuuX78OPz8/TJgwAWJiYgAqJyl9+PCBLoXaSJWXl2PHjh1o27Ytzpw5g127diEiIgJ9+vQRdGhULQQGBoLJZGLMmDFYs2YNXr36b0G62NhY+Pr6ol27dmjZsuV3aqGq1HqYIDs7Gzdv3qz2jGdsbCxPOSUlJcjIyCAyMvK79enq6v6wzPXr11FSVoGZR5+AABBWrJ9MnQFAS0GyTueEhISgtLQUwcHBPC2I0NBQnnLOzs6YNGkS9/uqHoYq58+fx8yZMzFq1Cjs3r27TjEoKipi165dGD9+PMaPHw9DQ0MsXboUFy9ehImJCXr37o2IiAisW7cOjx8/xvr16+tUf3Onrq6OrVu3YtmyZRgwoHLoKSMjAwcOHMCHDx9w9epVGBsbw8LCQsCRUnV148YNODg4ICYmBnPmzIGnp+c3J+1SDdOHDx9gYWGBQ4cOoWfPnhg5ciQePHiAlJQU/Pnnn0hMTKR7utRBrZOBqpYy+aqFvX37dp7vmUwmRo4ciWPHjuHJkyfV5g1UjWHb2trCw8MDZ8+erTZvoKqMtbU1AKBdlAg+1mK3wZ+lqSABSdE6TZ+o8fPIzc2Fj48PTzkDAwMYGBjUWMedO3cwbtw49O7dG/7+/j+1boCdnR38/f0xdepUlJWVoXPnzggJCUGPHj0gKysLJpOJa9euwdbWFm5ubtxWLVU7PXv2xKNHjzBw4EA8ffoUsbGxuH37NoyMjGBtbV1tbgnVsH348AHLli1DUFAQevXqhadPn9KenUZqwIABGDNmDF6+fIl9+/Zh0KBB6NWrF7KzsyEnJ4ejR4+ie/fugg6z0aj1HVBGRga9e/fGpk2bUF5eDnV1dVy7dg3v37+vVtbLywvXrl2DpaUlZs+ejfbt2yM5ORmnT5/GvXv3ICcnBycnJwQGBnK7sjt16oSsrCwEBwdj3759MDU15dZn1U4ZR8M+8nf1wf9jMRmwalv31QcHDBgAERERDB8+HHPmzEFBQQEOHjwIZWVlJCcn//D8jx8/YsSIEWAwGBg9ejROnz7N87qJiQlMTEx+WA+TycSyZctw6dIlmJqa4syZM9VWU9TU1IS6ujpevHiBrl271u2NUsjOzsbt27fx559/Yvny5QCAzMxMKCgoCDgyqraKioqwceNGbNq0CQoKCjh+/DjGjRtH59Q0YoMGDcL48eMxZ84cvH//HkpKSoiLi0OPHj1w//59AHQCdV3UqTl8/PhxLFq0CLt37wYhBAMGDMDly5erLcWqrq6OsLAwrFmzBv7+/sjLy4O6ujoGDx4MCYnKSX5SUlK4e/cu3NzccPbsWfj5+UFZWRn9+vWDhoYGT30Tu2rC9+GHX3un31DBIZjUre7DD+3atUNgYCBWr16N5cuXQ0VFBfPmzYOSkhLs7e1/eP779++5kwxrWpPAzc2tVskAUPkkR8uWLfHs2TO8evUKffv25fkF2Lt3L0pKStC+fftavjvqSydPngSbzcbEiRO5xxQUFOgfmkaAEILAwEAsW7YMqampWL58OVxdXSElJSXo0Cg+2L17N2JiYpCQkICSkhLExsZi5cqVOHHiBMaOHUtXaa2DRrEcMVA/exOwmAz00FHA0RmNu7W8cOFC7vLGCQkJePnyJSQkJBAeHo7jx48jODgYXl5eGDdunKBDbZS6du0KJSUlXLhwQdChUHXw6tUrLF68GLdu3cKIESOwdetW6OrqCjosqh4RQjBlyhScOXMG9+/fp0NAddBo0iYvG2MIMfnXCiOEgFNehiW9VPhWp6BMnz4dISEhGDx4MJKSkjBx4kS4ubnB1dUV9+7dw9y5c7mPw1F1Ex0djcePH2P69OmCDoWqpaysLCxatAhmZmZITk7G5cuXcf78eZoINAMMBgMHDhyAgYEBRo4cifT0dEGH1Gg0mp4BADgZngCXoFc/LlhL5fd9QeLuIyAgoNHPCF+zZg0uXryIZ8+eAahcPrpr166YO3dujYs/UbXj7OyMw4cPIykpiW6b2sBVVFTg0KFDWLVqFcrKyuDm5oZFixb9ts3HqIbj06dP6NSpE4yMjHD16lUICwsLOqQGr1ElAwDwd2gsvK+9/eV6nAa0wyh9SYwbNw7379/Hhg0bsGzZskY7BkwIwfv375GSkgJ7e3twOBxERkZy/xByOBw6flZHbDYbrVq1wujRo+mOhA3cvXv3sGjRIjx//hzTpk3D+vXroaLS+Hv9qJ93584d9OvXDwsWLKj21BtVXaO7Oyy0aoMNo4whKsTk2cmwNlhMBkSFmNg4yhgLrPSgqqqKmzdvYtmyZXBycsKoUaO4k/oaGwaDAR0dHfTo0QNHjx7F+/fv8eeff3IXP2IymdUeC6W+79q1a0hJSaFDBA1YYmIiJk6cCAsLCwgLC+PRo0fw8fGhiQCF3r17Y8eOHdixYwf8/PwEHU6D1+h6Bqp8yirCyrOvcDcuAywm47sTC6tet9BThJeNMVrJS1Qrc/78eUydOhWKiorcfRMam7KyMri6uiI9PR0aGhrw9vbG06dPYWxszC2Tn5+PsrIy+lhcLYwZMwZv3rzBixcvGm2PUVNVUlKCbdu24a+//oKkpCQ2bNiAqVOn0t4vigchBLNmzcKxY8dw9+5dmJubCzqkBqvRJgNVYlPz4R+WgNC3aUjILOLZ1IiBygWFrNoqY1I3TegpS3+3rvj4eIwePRqvX7/Gnj17GmWLcM6cOcjKyoKHhwdsbW0hLS2NBw8egMViIS4uDhs2bMCLFy9gamqKOXPm0F+Ob8jMzISamhrWr1+PpUuXCjoc6v8IIbhw4QKWLFmCjx8/YvHixVi7dm2dNwWjmo/S0lL06dMHnz59wtOnT+nyxN/yu7ZH/B0KSspJZGIOifiYRSITc7jbEtdFUVERmTFjBgFAZsyY0ei2L83MzCQFBQWEEEIePHhAGAwGWb58OSkuLiabNm0irVq1IsuWLSPTpk0jBgYGAo624fr777+JkJAQSU1NFXQo1P+9fv2aDBo0iAAg/fv3J9HR0YIOiWokEhMTiYqKCunVqxcpLS0VdDgNUpNKBvjpyJEjRExMjJiZmZG4uDhBh1NnRUVFZOPGjURGRoYwmUzSvn17MmLECBIcHEwIIaSkpIS0adOGHDhwQMCRNkydOnUiI0aMEHQYFCEkNzeXLF++nAgJCRFtbW1y7tw5wuFwBB0W1cg8ePCACAsLk3nz5gk6lAaJDrB9w/Tp0/Hw4UPk5+ejU6dOOH/+vKBDqpOUlBTs2bMHM2bMQMuWLcFisfDgwQNER0cDAERFRWFjY1NtYyWqcrGap0+fNsphosaiuLgYmZmZPMfIVyOWHA4Hfn5+aNu2Lfbs2QN3d3dER0fjjz/+oHM4qDrr3r079uzZg7179+LgwYOCDqfhEXQ20tDl5OSQkSNHEgDE2dmZlJfXfehBEI4fP05MTEzI27dvybVr1wgAMnnyZCIlJUWio6NJaGgoadeuHfnzzz8FHWqDs3TpUqKoqEi7E+vJxYsXiZmZGTEzMyN//PEH8fPzq1bm8ePHpGvXrgQAGTduHElISBBApFRTNG/ePCIsLEzu378v6FAaFJoM1AKHwyGbN28mLBaLWFpakuTkZEGH9EM3btwgmpqaJCcnhxBCyLRp04ikpCTR1dUlffr0ISYmJqRTp07k0aNHAo60YSkrKyPKysrEwcFB0KE0SefOnSOSkpLEy8uLHDlyhIwePZpoaGhwk9Lk5GRib29PABATExNy+/ZtAUdMNTWlpaWkV69eREVFhXz+/FnQ4TQYNBmog9u3bxMVFRWioqJCbt26Jehwfqht27Zkw4YNJDk5maSmphJxcXGirq5OsrOzSXBwMHnz5o2gQ2xwgoODCQDy/PlzQYfSJLm6upKJEydyv8/MzCRbt24lAMjUqVOJjIwMadGiBdm9e3ej6YWjGp+UlBSirq5OunTpQoqLiwUdToNA5wzUQe/evfHs2TPo6+ujX79+2LRpU4NeyGfr1q04fvw4rK2tYWdnh9LSUiQmJuL69esYPnw42rZt26DjFwQfHx+YmZk1ynUmGoM3b94gNTWV+728vDy0tbXRokUL+Pn5wdbWFrGxsZg3bx6EhOq0qSpF1VrLli1x9uxZvHjxAgsWLKB/B9EIVyAUNBUVFVy/fh1OTk5YsWIFbGxskJOTI+iwajR06FD4+vpi9OjRaN++PZ4+fYpRo0Zh4cKF3MlbdCLWf9LT0xESEoJp06YJOpQmy8LCArm5uXj8+DHevXsHGxsb2NjYQE9Pj7s4loKCAv13SdU7c3NzHDhwAEeOHMGePXsEHY7gCbhnolE7f/48kZWVJbq6uuTZs2eCDqdWPn/+TOTk5MjUqVMFHUqDs2PHDiIsLEzS09MFHUqTFRYWRgwNDUmPHj2IqKgo0dDQICdPniQcDoe4uLiQgQMH0m5b6rdycHAgQkJCjWLotz7RnoFfMGLECEREREBGRgbdunXD4cOHBR3SdxFCoK6ujq1bt8LPzw9Xr14VdEgNio+PD4YNGwZFRUVBh9Ikkf9vpvX582c8fPgQVlZWePbsGcaOHQsGgwEFBQV8/PgRFRUVgg6VakY2b94MCwsLjBkzBgkJCYIOR2BoMvCLdHR08ODBA0yZMgUzZ86Evb09iouLBR1Wjaq6XqdNmwZra2vMnj0b+fn5Ao6qYXj+/Dl3xzvq5yUmJtb4b+rFixfo06cPxo0bhz59+mDUqFHIzMzE9u3bkZubi9TUVNy+fRs9e/akWw5Tv5WwsDACAgIgISEBGxubBvv3u94JumuiKfH19SViYmLE1NSUxMbGCjqc73r37h2RkJAgixYtEnQoDYKjoyNRVlYmZWVlgg6l0fLy8iKysrLkxIkT3CcBMjIyyPz58wmTyST6+vrk0qVLhJDKFTLXrFlDtLS0iLq6OtHR0SEdOnQgGRkZgnwLVDMWERFBxMXFyaRJk767wiU/lr1viBr9RkUNzcuXL2Fra4u0tDT4+flh5MiRgg7pm3bs2IElS5bg7t276Nmzp6DDEZiysjKoq6tjypQp2LJli6DDaZQ2b94MHx8fsFgsFBcXw9/fHxEREVi9ejXYbDbc3d2xcOFCsFgs7s6CbDYbGRkZePXqFUpKSjB8+HABvwuquTtx4gQmTJiArVu3YsmSJdzj3A3x3qQhIauGDfHkJWDVThkTu2qiTcvvb4jXUNFkoB7k5ubC3t4eQUFBWL58OdavX98gH5OqqKhAr169kJOTg2fPnkFMTEzQIQnEuXPnYGNjg5cvX/Js90zVTkFBAbZs2QIpKSksWrQIbdu2RWZmJgoKCmBvbw8vLy+eneKysrIgJCQEGRkZAUZNUTVzdnbGli1bcPXqVbTr2AMrz77C3bgMsJgMVHC+fbuset1CTxFeNsZoJS/xG6P+dTQZqCeEEGzbtg3Ozs7o0aMHAgICoKqqKuiwqomOjkaHDh3g5OSEP//8U9DhCMTIkSPx+fNnPHnyRNChNFrx8fEoKCjAhg0bcPLkSTAYDIwZMwb79++HnJwct1xKSgocHBzAYDBw8uRJwQVMUd9QUVGBIUOG4EWBFGT7zgSbQ76bBHyNxWRAiMnAuhGGGGeuWY+R8hedQFhPGAwGli5dilu3biEuLg4dOnTArVu3BB1WNQYGBli9ejU2btyI58+fCzqc3y4tLQ0XL16kEwd/QUlJCU6ePIkePXogNDQUPj4+OH36NE6fPo2AgACUlZVxyyorK0NdXR0aGhoCjJiivo3FYsHawRtive1RyubUKREAgAoOQSmbA5egV/g7NLaeouQ/2jPwG6SmpmL8+PG4ffs2vLy84OTkxB03bQjKysrQuXNnCAsLIywsrEEOadSXbdu2wcXFBUlJSVBQUBB0OI0KIQTBwcFYsmQJPn36BAcHB6xZswYyMjJgMBhwdnbG/v37ce7cOXTt2pW7A6GlpWWz+jfWXPn6+mL69Ol4//49tLS0BB1OrZ0MT4BL0Cu+1bdxlDHGNoIegoZzR2rCWrZsiWvXrmHFihVwcXGBjY0NsrOzBR0Wl4iICA4fPoznz59j69atgg7ntyGEwMfHByNGjKCJQB3FxMRg0KBBGDlyJNq2bYtXr17B29sbsrKy3KVdN23aBHNzcyxevBgDBgyAk5MTpKSkaCJANVifsorgFhzF1zrXBkfhU1YRX+v8UnR0NNzd3fHhw4dfqocmA7+JkJAQvLy8EBISgjt37qBTp0549uyZoMPiMjc3x9KlS+Hm5oa3b98KOpzf4tmzZ3j16hUdIqiD3NxcLFu2DCYmJoiLi0NwcDAuX74MfX19bhkmk8ldOGj16tWIiooCIQRxcXHo2rWroEKnfrPJkyejuLgYrVu3FnQotbby7Cuw6zgs8CNsDsHKs/zrafhadHQ01q1bR5OBxmbYsGGIiIhAixYt0L17dxw6dKjBbJKxbt06qKurY9asWeBwOIIOp975+vpCRUUFAwcOFHQoDR6Hw4GPjw/atm2Lffv2wcPDA1FRURg+fHiN+wiwWCycPXsWffv2xYwZM3D//n2oqKgIIHJKUFgsFsTExBrNPhOxqfm4G5dR5zkCP1LBIbgbl4G4tIa9wBtNBgRAW1sb9+/fx9SpUzFr1izY29ujqKj+upFqS0JCAgcPHsSdO3dw4MABQYdTr0pLS+Hv74/JkyfTbusfCAsLQ7du3WBvbw9ra2u8efMGrq6uP3wUVVZWFv/88w8OHjz4myKlGhJfX18wGAyeFuvly5dhaWkJaWlpyMjIwNzcHMePH+e+rqWlVWNPXZ8+fdCnT59aXTcnJweOjo5o1aoVREVFoaenh40bN/I0cD58+AAGgwFvb28cOHAAurq6aK+hgBS/JShNrt4zWp75CennNuDTjglI8B6FxANzkH37H54yZSnxSD3lhoStY5CwZTRST6xEaeJrAJVPGBx7lAB3d/cak6OaPistLS0MGzYM9+7dQ5cuXSAmJgYdHR38888/POeNGTMGAGBlZQUGgwEGg8EzWf3y5cu1+txoMiAgYmJi2L9/P/z8/BAQEIDu3bsjNlbwM0+trKwwe/ZsODs749OnT4IOp95cuHABWVlZmDp1qqBDabBSUlIwffp0dOvWDeXl5bhz5w78/f1r/SRA3759MWnSpHqOkmosfH19MXToUGRlZcHV1RUbNmyAmZkZrly5wrdrFBUVwdLSEseOHcOUKVOwc+dO9OzZE66urli6dGm18sePH8fmzZsxZ84caA6YjvKcVKQHeYFUsLllytLeI/mfZSj5+BJSZgPRwno2JNp0Q3Hc4//KpH9Eiv8KlKe9h0xXW8j2HAd2TipSjruiNOkNKjgEoW/T6vx+4uLiMHr0aPTv3x9btmxBixYtMG3aNERFVc5r6N27NxYvXgwAWLlyJY4ePYqjR4+iffv2AICjR49i6NChtboWbRIJ2JQpU9ChQwfY2tqic+fO8PHxwahRowQa06ZNm3DhwgXMmzcPISEhjaabry58fX1hbm4OQ0NDQYfS4JSVlWHXrl1Yt24dREREsG/fPsycORMsFkvQoVGNVG5uLhYvXowuXbrg1q1bPL1K/Bwm3bp1K+Lj4/Hs2TO0adMGADBnzhyoqalh8+bNWLZsGVq1asUtn5CQgNjYWAhLSGNv9lUoiLdE+hlPFL+PgIReFwBA1vX9ACFQnbYdQrLK3HPl+kzj/n/OnaMgHDZaTtoEYbnK4TBJo75IOjAH2aE+UJm4AQmZRShj1W349c2bN7hz5w4sLCwAAHZ2dmjVqhV8fHzg7e0NHR0dWFhYYOfOnejfvz9P70lBQQEWL16MmTNn1upatGegATA2NsaTJ0/Qv39/2NraYvny5SgvL6+xbFZWFvz9/eHq6opt27YhMTGR7/HIyspi3759uHjxIk6cOMH3+gUtJSUFly9fxvTp0wUdSoNz9epVmJiYwNnZGVOmTMHbt28xZ84cmghQv+T69evIz8+Hi4tLteElfjY2Tp8+DQsLC7Ro0QIZGRncL2tra1RUVODOnTs85ceOHYsWLVrgY2YhCADRVpWNA3ZOCgCgoigXpZ8iIWXSnycR+DJuwqlAyYdnkGjTnZsIAICQlDwkDSxR+jkanNLKJYxzistQFwYGBtxEAACUlJTQrl07vHv37ofnXr9+HTk5ORg/fnytrkV7BhoIGRkZnD59Gtu3b4ezszPCwsIQEBAANTU1bpnIyEj88ccfkJOTQ3FxMTQ1NbFhwwY8efKEJ9vlh+HDh2PcuHFYvHgx+vfvDyUlJb7WL0jHjh0Di8XCuHHjBB1KgxEfH4+lS5ciODgYlpaWOHXqFExMTAQdFtVExMfHAwCMjIz4Ul9KSgrP97KyshAXF0dsbCxevnz5zb9XaWm8XfWampXP/5exK1vsLDEpAACnpADAf0mBsNK3n4jgFOWBlJdCWF692mvCCq0AwgE7Lx0iSq3rPDmxKr4vtWjRolaPplcNO/ft27dWvS+0Z6ABYTAYWLJkCW7duoV3796hQ4cOCA0NBQDcu3cPvXr1gpGREQ4cOICXL1/iypUr6NWrF5YvX14ve8Dv2LEDAODg4MD3ugWFEAJfX1+MHDkSLVq0EHQ4AldQUIBVq1bBwMAAz549Q0BAAEJDQ2kiQAnEt3oJvv77pqqqyvMVEBAAoPKpl/79++P69es1ftna2vLUw2KxkJmZiZfPIngvWE9PeAmxar7lfuvv97d65Gpzc6+aMHn06NHaxVarUtRv1bNnTzx79gzjx4+HtbU1HB0dceDAAfzxxx/YuXMnWrRowf2l6dChA+7evVsv4/rKysrYsWMHJk2ahPHjxzeJXeWePn2KqKgoeHt7CzoUgSKE4OTJk3ByckJGRgZWrFiBFStWQFJSUtChUU2Qrq4ugMreTT09vW+Wa9GiBXJycqod//jxI3R0dLjfX79+nef1qrk/urq6KCgogLW1dbU62Gw23rx5gxMnTnCHCzw9PeHk5ASGsBg0l54Gvvo7KvT/bv/y9I/fjJkpIQOGsCjKs6oP2ZZnfQYYTAjJKIEBQEutcqghJyeHZ8+Ojx+/Xf+PfOtvf9VnrqysXOPrX6M9Aw2UsrIyrl27hmXLlmHr1q0QFxfH6tWrIS8vz/PDv3z5MmRlZetteeMJEyZgyJAhmDdvHnJzc+vlGr+Tj48P1NTU0L9/f0GHIjDPnz9H7969MWHCBHTp0gUxMTHw8PCgiQBVbwYMGABpaWmsX78eJSUlPK992crV1dXFo0ePePazuHDhQrUnm6ytrXm+qjaBs7Ozw8OHD3Hq1Cn8+++/2LZtG6ZPn46OHTtCUlISRkZGmDBhAs6dOwcA6Ny5M06ePImoFxHQVKi+yyBLQhairYxQ8PI62Lm8QwxVcTOYLIhpdUBR7COwc1K5r1cUZqMw+jZENQzAFJWApoIEDNq1BQCeuQuFhYXw8/Or9Wf5tarf26+TqIEDB0JGRgZeXl61qof2DDRgLBYLCxYswNGjR5Gfn48hQ4bg9OnT6NSpE8rKyrB7924UFxdzJ4gQQvjeQ8BgMLBv3z4YGBhgxYoV2LdvH1/r/51KSkpw4sQJzJ49u1lOiMvIyMCaNWtw4MABtGvXDtevX6+xBUVR/CYjI4Nt27Zh5syZMDc3x4QJE9CiRQu8ePECRUVF3JvhzJkzERgYiEGDBsHOzg7x8fE4duwYt5X7tfLycrx9+xYvXrzAy5cvERERAWFhYYwdOxZA5cqvKioqEBcXB1C5XbmFhQXy8vKgra2NwYMHc8v2jeXgaFj1Frq89Wyk+K9Asq8jpMwGQki2Jdi5aSiOD4ea/S4AgFzvySj58Bwp/s6Q7jAUYDJR8PwKCLscLaymg8VkwKqtMgYMaAtNTU3MmDEDTk5OYLFYOHLkCJSUlJCQkPBTn62ZmRlYLBY2btyI3NxciIqKom/fvlBWVsbevXsxefLkWtVDewYauNzcXIiLi+PcuXOQl5dHz549sWvXLhw+fBgnTpxAx44dMWjQIAD8nZX7pVatWmHTpk3Yv39/g9x5sbZCQkKQnZ3d7JYfZrPZ2L17N9q2bYsTJ05g69atePHiBU0EqN9qxowZCA4OhoyMDDw9PbFixQpERERg8ODB3DIDBw7Eli1b8PbtWzg6OuLhw4e4cOECNDQ0UF5ejps3b2Lbtm2YNm0aOnbsCCkpKRgZGWHixIk4fvw4REVF4eDggJEjR0JTUxNMJhMlJSVQUlKCl5cXhgwZAnl5+Rrjm9hVs8YJfiItdaAy2RuirQxREHEJ2TcOoOjNA0jo/be0tohSa6hM3AhhxdbIfXQaufdPgCWjDJUJXhBVa4cKDsGkbpoQFhbG2bNnoaurizVr1mDnzp2YOXMmFi5c+NOfq4qKCvbt24e0tDTMmDED48ePR3R0NIDKnt2bN2/Wqh66a2EDl5KSgp49e2LmzJmYPn06Vq1ahSNHjkBBQQFWVlbw9fWFpKQkOBwOmEwm97/8xuFw0KdPHyQnJ+PFixeQkKjepdbQDRkyBNnZ2Xj48KGgQ/ltbt26hcWLFyMyMhIzZszAX3/9VesxRIoShPLycrx58wYvX77ktvhfvHiB5ORkAIC4uDiMjIxgYmICU1NTmJiYwMTEhC8TgicfDsODd5l8XZKYxWSgh44Cjs5o2Pty0GSgEbh16xZsbW2hra2N58+fo1WrVvj8+TP09fVx5swZ6OrqgsVioaKiAiwWCwUFBUhJSYGwsDA0NTX51mPw9u1bmJiYYPHixdi0aRNf6vxdkpKS0KpVK+zZswdz5swRdDj1LiEhAU5OTjh16hS6deuGXbt2oXPnzoIOi6J4pKenV7vpR0dHc+cMaGpq8tz0TU1NoaenV2/DfJ+yimC97TZK2fzbm0VUiIkbSyzRSr5hN6BoMtBIvH37Fh8/fkR6ejoGDx6MT58+YcyYMUhOToaPjw9sbGzAZDKRkJAAOzs7pKWlQV5eHhoaGggKCuJbb8GGDRuwatUqhIWFNaqby6ZNm+Dm5obk5GSeWbxNTXFxMby9vbF+/XrIyspi48aNmDRpUr1NMKWo2qhq7X9503/58mW11v6XN31jY2OBPP57MjwBLkH822Vw4yhjjDWvvl5AQ0OTgUbqwYMHMDIywowZMxAYGIglS5bAxcUFgwcPhrq6OqZOnQpVVVV4enoiKysLYWFhfLlueXk5unbtCjabjSdPnkBERIQv9dYnQggMDAzQoUMHnk1RmhJCCM6dO4elS5ciMTERjo6OWL16NWRkZAQdGtXMpKWl1djar1pVVVNTk+emb2JiUq+t/Z/xd2gsvK/9+lbuTgPaYYHVtx+lbEhoMtAIubi4ICgoCPv370efPn2wc+dOLF++HCYmJkhJScHff/8NGxsbAJXdcCNHjsTmzZvRo0cPvlz/2bNnMDc3h7u7O1avXs2XOutT1a57165da5KPFEZHR8PBwQE3btzAoEGDsH37drRr107QYVFNXFlZWY2t/arVAcXFxWFsbFxtbL+x9MydDE+AW3AU2BxSpzkELCYDQkwGPEYYNooegSr00cJGaMSIESgqKoK+vj4YDAYcHBxgbm4OGxsbZGRkoLi4mKd8dHQ0MjIy+Hb9Dh06wNnZGZ6enrC1teXukNVQ+fr6QkNDA3379hV0KHyVk5ODdevWYdeuXdDS0kJISAiGDh3aJDeWogQrLS2t2k3/y9Z+69atYWpqipkzZ3Jv/lVzmRqrceaa6KmriJVnX+FuXAZYTMZ3k4Kq13voKMDLxrjBzxH4Gu0ZaKTKy8shLCyM4uJi5ObmQkVFBWlpaWjfvj2ysrLg6emJuXPnwt/fHwEBAQgICODr/gUlJSUwNTWFgoIC7t6922B/6YuLi6GqqooFCxbgr7/+EnQ4fMHhcODj4wNXV1cUFRVh9erVWLJkCURFRQUdGtXIlZWV4fXr19W6+VNTKxfTkZCQqNbaNzY2bjSt/Z8Vm5oP/7AEhL5NQ0Jm5aZDVRgANBUkYNVWGZO6aUJPWVpQYf4Smgw0YoQQhIeH48GDB5g6dSpatGiB3NxcmJmZ4cOHD5CUlER5eTlGjRoFPz8/vo/v37t3j7t95qJFi/haN7+cPHkS48ePx9u3b7lbmjZmDx8+xOLFi/HkyRNMnDgRGzduhLp69Q1SKOpHUlNTq930Y2JiuK19LS2tajP5dXR0Gmzi/7sUlrLxIbMQZWwORISY0FKQhKRo4+9kp8lAI/fgwQMMHToUBw8exOjRo7nHZ86cicOHD0NUVBQ3btxAr1696mWFwoULF8LX1xeRkZHQ0tLia938MGjQIBQUFODevXuCDuWXJCcnw8XFBf/88w86dOiAXbt2oWfPnoIOi2oEqlr7X3fzf93a/3omv6ysrIAjp34nmgw0AYcOHcKyZcswceJEqKqq4vnz53j9+jVERUXBYDAQGRmJ7du3Y+7cuXxPBvLz82FoaIj27dvjypUrDWq8+vPnz9DU1MSBAwcwc+ZMQYfzU8rKyrBjxw54eHhATEwMXl5esLe3b/atM6pmqampPDf9qtY+m80GUNna/3omv66uLn30lKLJQFNx9uxZXL58GeHh4Wjfvj3Mzc2xaNEiVFRUwNHREfv27cPkyZOxd+9evm9Ic/nyZQwZMgS+vr6YOnUqX+v+FevXr4enpydSUlIa5SN2ly9fhqOjI+Lj47FgwQK4u7vTbZcpAJVJYkxMDPfGX3XzT0ur3ExHUlKyxrF92tqnvoUmA01M1cTCKlXLE/v7+2P27NnQ0dFBYGAg3x89mzJlCi5cuIDo6GioqKjwte6fQQiBvr4+unTpUuv9vBuKuLg4LFmyBBcuXICVlRV27NgBY2NjQYdFCQAhpFpr/+XLlzytfW1t7RrH9mlrn6oLmgw0IdwtNRmMGucHREVFwdbWFklJSThy5AjPHINflZmZifbt28PS0hKnT5/mW70/68GDB+jZsydu3LiBfv36CTqcWikoKMBff/2FrVu3QkVFBVu2bIGtrW2DGnqh6k9paSliYmKqTepLT08H8F9r/+ux/cbY60U1PDQZaGby8/Mxc+ZMnDp1Co6Ojti0aRNPT8KvOHXqFMaOHYszZ85g1KhRfKnzZ82ePRtXr17F+/fvG3wLiRCC48ePw9nZGVlZWVixYgWcnZ0b5WZQ1I8RQpCSklLtpv/69Wtua19HR6faYj20tU/VJ5oMNEOEEOzatQvLli1Dly5dEBAQAA0NDb7Ua2Njg7CwMERHRwtsfLuoqAiqqqpwcHCAh4eHQGKorYiICCxevBj379+Hra0tvL29G+RTGU1RdnY2Ll26hMjISAwYMAB9+vThey9MVWv/627+qta+lJRUtda+kZERbe1Tvx1NBpqxhw8fws7ODqWlpTh+/Dhf9rdPSkqCgYEBbG1tcfjwYT5EWXf+/v6YNGkS4uLioKurK5AYfiQ9PR2rV6/GwYMHYWBggB07djSa4Yym4NOnT5gwYQJSUlJgYGCABw8eYNGiRVi6dCmkpKTqXF9Va//rm/7Xrf2vZ/Jra2vT1j7VINBkoJlLT0/HxIkTcePGDXh6esLV1fWX/zgdOnQIs2bNwvXr1/mSYNRV//79UVZWhtu3b//2a/8Im83G3r17sXbtWhBC4OHhgXnz5vFtqIb6vqq5NPb29nj16hUuX74MRUVFeHt74+jRo5g1axYWLlzInXhbk9LSUkRHR1fr5q9a8ltKSorbtf/lTH5p6ca5Mh3VPNBkgEJFRQU8PDzg6emJwYMH4+jRo5CXl//p+ggh6NevH96/f4/IyEi+P8r4PQkJCdDS0sLhw4cxffr033bd2vj333/h4OCAqKgozJw5E3/99ReUlJQEHVaTERMTgwsXLkBeXh7jxo375r+7rKwsjBkzBp07d8bGjRsBVM6lWbZsGcLDw/Hs2TNwOBwwGAwkJyfXOLZfUVEBANDV1a02k19LS4u29qnGh1DU/12+fJnIy8uT1q1bk/Dw8F+qKy4ujoiLixNHR0c+RVc7np6eREJCguTl5f3W637Phw8fyOjRowkA0r17d/LkyRNBh9SkFBcXk82bNxMjIyMiJCRE9PX1yefPn79ZPjExkXTt2pV4eXlxjxUVFRFvb2/CYDDI/PnzSd++fYmioiIBQAAQKSkp0qNHDzJv3jyyd+9e8uDBgwb1b4yifhXtGaB4fPz4EWPGjMGLFy+wY8cOzJkz56cnVW3duhXLly/HgwcP0K1bNz5HWh0hBG3atEGvXr3g6+tb79f7keLiYmzatAkbNmxAixYtsHnzZkyYMIE+KshnbDYbhw8fhoyMDFq0aIFRo0bh7t276NSpU7WyhBAkJSWhd+/eaNWqFVRUVPDq1Su8efOG29pXU1NDt27dYGxsDDMzM5iYmNDWPtXk0WSAqqa0tBTLli3D7t27MWnSJOzbt++nuvorKirQo0cPFBQUICIiot531avaOCk0NBR9+vSp12t9DyEEQUFBWLZsGZKSkrB06VKsWrWKjhnXoy8X2xIREcGhQ4dgZ2eH6OjoapP6MjMzAQBCQkIwMzODubk5TE1NoaSkBDc3N0yePBnOzs7fnTdAUU1N499qieI7UVFR/P333+jRowdmzZqFZ8+e4cyZM3VetZDFYuHw4cPo2LEjvLy8sG7dunqKuJKPjw+0tLTQu3fver3O90RFRWHx4sX4999/MXToUFy/fr1J7JbYkBFCkJaWhoiICERFRUFSUhKOjo6wt7dHRUUFGAwGdHV1YWpqioULF8LMzAyvX7/G6dOnsWrVKowcORIA8P79e4iJiXGX7KWJANWsCG6EgmoMoqKiiL6+PpGSkiKnTp36qTrc3NyIkJAQefHiBZ+j+09BQQGRkpIi7u7u9XaN78nKyiKLFy8mLBaLtGnThly4cEEgcTR1xcXF5MmTJ+TIkSPEwcGBWFlZEXl5ee7YvoyMDFFXVycKCgrE29ubPHz4kOTn51erJyEhgQwfPpz06tWLO/bv6+tLJCUlSVxc3O9+WxQlcHSYgPqh/Px8zJo1CwEBAXBwcMCmTZsgIiJS6/NLS0vRqVMniIuL4+HDhxAS4n+H1NGjRzFlyhS8e/cO2trafK//WyoqKnDkyBGsXLkSJSUlWLNmDRwcHOp9SKSpI4QgMTGx2kz+t2/fclv7enp61R7f09bWxu3btzF48GCEhYXBxMSEp97c3Fxuy//169fo168f2rRpA2FhYcTExGDZsmVYsmSJIN4yRQkUTQaoWiGE4O+//8ayZcvQuXNnnDp1qk6rFoaFhaF79+7YvHkzli1bxvf4+vbtC0IIQkND+V73t1QtVBMREYHJkydjw4YNUFNT+23XbyqKi4trHNvPysoCAMjIyFR7fM/Q0PCbiwNxOBwICwvjxIkTsLOz4x4/ePAgjh07Bl9fX27CmJSUhBMnTiA3NxeDBw9G9+7d6/8NU1QDRJMBqk4ePXqEMWPGoKSkBCdOnKjTokJLly7Fvn378PLlS+jp6fEtpg8fPkBbWxt+fn6YMmUK3+r9lqSkJKxYsQLHjh1Dp06dsHPnTvTo0aPer9vYVbX2v77pv3nzhvtcv56eXrVV+lq3bl3nJzCMjIzQrVs3WFlZ4ePHj5gzZw6uXbuGHTt2YPv27b/l6RaKakxoMkDV2ZerFq5btw6rVq2q1WSrwsJCGBsbo3Xr1vj333/59ojdunXr4O3tjZSUlHpd4Ki0tBTbt2+Hp6cnxMXFsX79ekyfPh0sFqvertlYFRcXIyoqiuem/2VrX1ZWttoqfUZGRr/08yOE4Pr16zh16hR8fX3B4XAgLi6OIUOGYPPmzWjVqhX9WVHUN9BkgPopFRUV8PT0hIeHBwYNGoSjR49CQUHhh+fdvHkT1tbWOHDgAGbNmvXT14+JiYG2tjZERESgp6eHPn364MiRIz9d349cvHgRjo6OeP/+PRYuXAh3d3fIycnV2/UaC0IIPn/+XOPYflVrv02bNtW6+TU1Nfm+3gKHw8GmTZtw5coVTJs2DQMHDoSqqipfr0FRTRVNBqhfcuXKFUycOBFSUlIIDAyEubn5D8+ZMWMGAgMDER0dDXV19TpfMyMjA0pKSpCWloaVlRWCg4Nx+/btenmk8O3bt1iyZAkuXbqEfv36YceOHTA0NOT7dRqDqtb+19382dnZAP5r7X89tv87l6OmKOrn0GSA+mUJCQkYM2YMnj9/ju3bt2Pu3LnfbfVlZ2fDwMAA5ubmOHHiBNzc3HD37l3cv3+/Vk8aFBcXQ0JCAgDAYDBACEHbtm0xc+ZMLFq0CGJiYr/8nvLz8/Hnn39i27ZtUFdXx5YtW2BjY9MsVg+sau1/edN/8eIFYmNjeVr7X4/t10drn6Ko34MmAxRffLlq4cSJE7F///7vtgjPnj2LUaNGQVFRkbvb24cPH9C6detaXU9GRgb5+fnVjgcFBcHGxubn3gQqb4T+/v5wdnZGdnY2XF1d4eTkBHFx8Z+usyErKiriae1XfX3Z2v/6pm9kZMRNxiiKahroCoQUX1StWtizZ0+eVQv19fWrlc3NzcXly5cBgJsIAMDnz59rnQyoqanhzZs3PMcWLlyIP/7446ffw9OnT7Fo0SI8fPgQY8aMwebNm2sdT0NHCMGnT5+qdfFXtfaZTCa3tb9s2TLuzb9Vq1a0tU9RzQBNBii+Gj9+PExNTTF69GiYm5vj8OHDPM96Z2VloXv37nj79m21cz99+lTr67Rq1YonGXB3d8fatWt/6saVlpaGVatW4fDhwzA0NMS///4LKyurOtfTUBQVFSEyMrLaTP6cnBwAgJycHExMTDBgwAAsX76cO7ZPW/sU1XzRZIDiOwMDAzx+/BizZs3C2LFjcf/+fWzevBk5OTkwMTGBrKwsxMTEwGazwWazAVSuA1+XZODLmfy7du3CwoUL6xxneXk59uzZAzc3NzAYDOzcuRNz586tlxUS6wMhBAkJCdVm8sfGxoIQAiaTibZt28LExAQDBw7kPspHW/sURX2tcfzVoxodKSkpHD9+HD179sTSpUsRFhYGJpOJtLQ0pKam4ty5czhx4gQCAgIAVD4W9u7du2r1FJay8SGzEGVsDkSEmNBSkISkqBA3iThy5AimT5/+zTjYbDYuXLiAIUOG8CyhfPPmTSxevBgxMTGYPXs2/vzzTygqKvL5U+CfwsLCGmfy5+bmAqhMjkxNTTFo0CA4OzvD1NQUBgYGtLVPUVSt0AmEVL0LCwtD//79uRP+WCwWrK2tceXKFdy5cwczZ85EbGws2rVrh9evXyM2NR/+YQkIfZOGhKwifPkPlAFAU14C3VpLo4NUAcYN6fPda69fvx4rV66El5cXXF1d8eHDByxbtgxBQUHo2bMndu3ahQ4dOtTbe6+rqtZ+TWP7X7b2v57Up6GhQVv7FEX9NJoMUPXu0qVLGDp0aLXjT58+RceOHcFms+Hs7AzhFqpIUuuNu3EZYDEZqOB8+59m1esWeorwsjFGK/nqLeDXr1/DxMQE5eXlEBUVxbx587Bv3z7Iy8tj8+bNGD9+vEBvoIWFhTWO7Ve19lu0aFHtpm9oaNhkn2ygKEpwaDJA1auysjIoKytzb3BVGAwGBg8ejIsXLwIAToYnwC04CmwO+W4S8DUWkwEhJgPrRhhinLkm93hFRQV69uyJJ0+eoKKigntNFxcXrFy58pub3NQHQgg+fvxYbWw/Li6O29pv165dtQV71NXVaWufoqjfgiYDVL1is9n466+/cPPmTURERKCwsJDn9Xv37uFZmTK8r1V/uqCulg9oi4VWbQAAO3fuhIODQ7Uyd+/eRa9evX75Wt9S1dr/ups/Ly8PwH+t/S9v+gYGBrS1T1GUQNFkgKpX7u7uWLduHdLT0yEvL4/379/j2bNnuHXrFi5duoSZ64/gwPPCH1dUSxtHGaO9aA46duzI7RH4kpmZGZ49e/bL16lq7X990/+6tf91Nz9t7VMU1RDRpwmo34bJZEJXVxe6uroYPXo0PmUVwXrbbb5eY21wFPTjT3MTASaTCWlpacjKyqJFixaQkZFBcnJynTawKSwsxKtXr6qN7Ve19uXl5WFqaoohQ4Zwb/q0tU9RVGNCkwFKYFaefQV2HeYH1AabQyDVdzZiPVZCWVkZ0tLSYDAYSExMhJ2dHe7cuYPdu3fjzz//rHYuIQQfPnyoNrYfHx8PQghYLBZ3bH/o0KHcFr+amhpt7VMU1ajRZIASiNjUfNyNy/hxwTqq4BDcj88ERhhCRkYaQOXOiuPHj0dBQQEYDAaePXuGgoKCGsf2qx5/VFBQgKmpKYYNG8Yzts+PTZAoiqIaGpoMUL9FRkYG5s+fjytXrkBYWBh6PQaDYTAahCkMACh4eR0FkaEoz/gITmkhhOVUId1pOKQ7DuGppzQ5Fjl3/kFZSjxIeQmYki0gpmkMxaGO3DJMBsHClX/h08P/tXfncVWWCf/HP2cB5CBisiiiBC64IJIpYihulUum4lJpac6oozb59PLXYKaOZj7m9IzTOvlr1cwxsxiEA5M/lx85CWV4TGvUNn3cl9TEFWQ5cJ4/LCZzi0c494Hzff/F69znXOd7++KF33Nf17nubL799tsr1g6sW7eOwMBLReGnT/vx8fEMHjy48j/+8PBwfdoXEa+hMiBucf/99xMVFcWf/vQnPvvsM1asWEHAvqOEDP4DAOe3r8En5FZsrRPBbObini0UrP+/4KogsPO9AJQXnuHE+3Mw24Jo0G0k5noBOM+e4OK3n172XifX/JX9O3IIrB9w1UWE5eXlvPLKKyQlJdGuXTt92hcRr6cyIG4RHR2N3W4HYNzEydi/Os35bR/SIHE4vmHRNH7wWcw+fpXPb9B5MMffn8s5R2ZlGSg58jUVxRcIe+A/8QtvXfncW3qOrfy5+NAuLny5npDBqQwMPcPabDsnT568Ik9cXJxH7TwoImIks9EBxDs8+uijlT8fOFVY+R/8xf/eCnBZEagoLqS86Cz1IjvgPPM9FcWXvnpo9gu49Jo9W3CVO6/6PkXf5GHyC6BedCcm/Z+ZfPXVV2zfvp1FixZhsVgwmy/9yh84cKD6T1JEpJbSlQFxi9at//1JvtRZgbVhOJjMOM8eB6D48FeczX2XkqPf4Coruey1FSWFmOsF4BcZh61NEmc/eY9zW+3Uax6HLaYbAe17Y7JeWntQdvoorpJCDr/8EMkvX5lj0KBBzJw5U1cFRER+RmVA3M7XaoafLc4rO32M4+/Nxie4Gbf0nYi1QQhYfLj43w7OO+zw475YJpOJ0GGzKDnyDUV7tlC8bxun1rzEuS0ZNHn4Ocy+/uByYbY1JGRIKs8M7UBUSMBl7x0aGkp8fLxbz1dExNOpDIhb7N69m+joaACiggNwnj4KrgqsQY25uGcLlJcRNmIO1qCwytcUH/jXVcfyi2iLX0Rb6PUwhbv+yQ/Zf6Hw600ExvfHeks4xfu/oF5EO0YPG0SAn37FRURuRGsGxC0WL15c+XOAnxXXzrUA+LfoDKYrfw0rigsp3PH/L3usvPgCv9w926dxi0s/OMsujd22B7gqcG1Pv6IIOJ1Ozpw5c7OnIiJS5+hjk7jFvn37GDJkCAMGDGDz5s0c22ynfmxvfBu3wGT15bTFyom/zyfwtgFUlBVz4Yt1mG1BlF8oqByjcEcO57d9iC3mDqy3hOMqKeL8l+sx+dmo17ILAPUi4wjsNJBDH63knntO069fP3x8fNi9ezdpaWm89NJLjBw50qh/BhERj6QyIG7x/vvvM3fuXJ588kmsVitjxk9iU6MBAPgENyM0ZSZnNv2N0xuXYg64hcBOA7HYgji15qXKMeo170DJse8o/HoT5YVnMPsF4BfempAhqfg0bFL5vEb9H2XGQwPJeO8dZs2ahdVqJSoqijFjxtC9e3e3n7uIiKfTXQvFMGOX5PPp3lOUV+P9CSxmE0ktgvnbhMRqG1NEpK7TmgExzMJhcVjN1bvlr9VsYuGwuGodU0SkrlMZEMM0b2Tj6SGx1Tpm02N5DOrdjRdffJEtW7ZQWlpareOLiNRFmiYQw72ycTd/Wf/dTY8zvV8bMp6ZQk5OTuVjvr6+dOnSheTkZCZOnEirVq1u+n1EROoalQHxCKscB3kqaxfOCleV1hBYzCasZhPzh8TyQEIke/bsuWy3w5+bPn06f/7zn6srsohInaEyIB7jUEERszJ2kLvnByxm03VLwU/Hk1uFsHBYHM0b2SqPDR06lA8//LDyjoVms5mWLVuydetWGjRoUOPnISJS26gMiMfZffw87+YfZON3Jzh4qoif/4KagMhgG31iwhjTLZJWYYFXvD43N5eePXte9ti8efN46qmnaja4iEgtpTIgHq2wxMn+U4WUOivwtZqJCg644RbDLpeLzp07s337dkwmE0OHDiUzM5PJkyfz8ssv4+vr66b0IiK1g75NIB4twM9KbNMgOkXeQmzToF91rwGTycSTTz4JwAsvvEBGRgZvvfUWS5cu5e677+bkyZM1HVtEpFbRlQGps7799ltiYmIw/XiHxE8++YThw4fj7++P3W7X3QtFRH6kKwNSZ7Vp06ayCAB0794dh8NBo0aNSEpKIj093cB0IiKeQ2VAvEpkZCR5eXnce++9jBw5knnz5lFRUWF0LBERQ+lGReJ1bDYbq1atIj4+ntmzZ7Njxw7eeecd6tevb3Q0ERFDaM2AeDW73c6YMWNo0aIFdrudqKgooyOJiLidpgnEqw0dOpTNmzdz4cIFEhIS+Pjjj42OJCLidioD4vU6dOjAli1biIuL46677uL11183OpKIiFupDIgAwcHBrFu3jilTpjBlyhR+//vfU1ZWZnQsERG30JoBkV948803efTRR+nevTtpaWmEhIQYHUlEpEapDIhcRW5uLiNGjCAgIAC73U7Hjh2NjiQiUmM0TSByFcnJyTgcDho2bEhSUhIZGRlGRxIRqTEqAyLXcOutt5KXl8fAgQMZPnw48+fP1wZFIlInaZpA5AZcLhcLFixg7ty5jBw5kmXLlhEQEGB0LBGRaqMyIPIrZWRkMHbsWFq1aoXdbufWW281OpKISLXQNIHIrzRs2DA2b97M2bNnSUhIIDc31+hIIiLVQmVApAri4uJwOBzExsZy55138uabbxodSUTkpqkMiFRRSEgI69ev53e/+x2TJk1i6tSp2qBIRGo1rRkQuQmvv/46U6dOJTk5mbS0NIKDg42OJCJSZSoDIjdp06ZNjBgxgsDAQLKysujQoYPRkUREqkTTBCI3qWfPnjgcDgIDA7njjjuw2+1GRxIRqRKVAZFqEBUVxSeffEL//v1JSUnhmWeeQRfdRKS2UBkQqSb169fngw8+YN68efzxj39k1KhRFBYWGh1LROSGtGZApAakp6fz8MMP06ZNGzIzM4mMjDQ6kojINenKgEgNGDFiBJ9++ikFBQUkJCSQl5dndCQRkWtSGRCpIfHx8TgcDtq2bUvfvn1ZsmSJ0ZFERK5KZUCkBoWGhrJhwwYmTJjAxIkTeeyxx3A6nUbHEhG5jNYMiLjJq6++ymOPPUavXr14//33tUGRiHgMlQERN/rnP//JyJEjadiwIXa7ndjYWKMjiYhomkDEnXr37o3D4cDf359u3bqRnZ1tdCQREZUBEXeLjo7m008/5a677mLo0KEsXLiwShsUVVRU1GA6EfFGKgMiBggMDCQ9PZ05c+Ywe/ZsRo8eTVFR0Q1f9+WXX7JkyRLOnj3rhpQi4i1UBkQMYjabefrpp0lLSyM7O5vk5GQOHTp03dfs2rWL9PR0Bg8eTHFxsZuSikhdpwWEIh7giy++YOjQoZSUlLB69WqSkpKu+dydO3fSsWNHxo4dyzvvvOPGlCJSV+nKgIgHuO2223A4HLRu3Zo+ffqwdOnSy47/fG+CRx55hBYtWpCSkkJZWZm7o4pIHaQyIOIhwsLCyMnJYdy4cUyYMIFp06bhdDpxOp1YrVYKCwvp2LEjx48fZ+nSpQwePBgfHx+jY4tIHaBpAhEP43K5WLx4MdOmTaN379588MEHFBcXk5SURHBwMK+99hqdO3fGbFaXF5Hqob8mIh7GZDIREhLCb3/7W7Zv306nTp1o37490dHRLFu2jISEBBUBEalW+osi4oHCw8NZsmQJ99xzD4cPH6awsJDRo0cTFxdndDQRqYOsRgcQkSv16tWL9PR0RowYQXx8PKGhoUyZMoXTp0/zxBNPYDKZjI4oInWI1gyIeLC3336bCRMmkJ6ezrZt21iwYAEPPvggb731Fv7+/sClHQnNZjPl5eVYLBZOnDiBzWajfv36BqcXkdpCZUDEwy1YsIDc3Fyys7NZvXo148ePp3379mRkZNCsWTNMJhN79+7lzTffZMOGDRQUFNCsWTMWLlxIjx49jI4vIrWAyoBILXDkyBHq16/P4sWLadu2LdOmTaOsrIyMjAwApk6dis1m4/bbb6dPnz7k5ubyxhtvsG3bNlq1amVwehHxdFozIFILREREkJaWxqJFi5g7dy4Oh4MRI0bQs2dPGjVqRPfu3ZkyZQp33303AEOHDmXnzp2sW7dOZUBEbkhlQKSWuO+++/Dx8SElJQWAJUuWcNddd3H48GF8fX3p06dP5XPPnz/PF198Qd++fQ1KKyK1ib5aKFKL/FQEAPbv34/L5WLKlCmkpaUxaNAgTp8+TVlZGWvWrCEsLIzu3bsbF1ZEag2VAZFaKicnh2bNmvHqq6+ybt06HA4HiYmJpKWlMWfOHKKioujWrZvRMUWkFlAZEKmlgoODsdlsOJ1O7rzzTj766COKi4sZM2YMPj4+ZGVlYbFY0BphEbkRfZtApJb6/vvv6dixI4MGDSIsLIyjR4+yfv16zGYzx48f59lnn+UPf/gDFovF6Kgi4uF0ZUCklmrSpAmbNm3C5XKRk5ODn58fc+fO5ciRI8ycOZMZM2Ywbtw4Ll68aHRUEfFwujIgUsuVlZXhcrnw9fWtfMzlcrFq1SrGjx9PXFwcGRkZREREGJhSRDyZyoBIHfb555+TkpJCeXk5GRkZJCYmGh1JRDyQpglE6rDOnTvjcDiIioqiV69eLF++3OhIIuKBVAZE6rgmTZqwceNGHnzwQcaNG0dqairl5eVGxxIRD6JpAhEv4XK5ePnll3n88cfp168f7733Hg0bNjQ6loh4AJUBES+zYcMG7r//fsLCwsjKyqJNmzZGRxIRg2maQMTL3H333WzZsgWLxUJiYiJr1641OpKIGExlQMQLtW7dms2bN9OjRw8GDRrEc889p50KRbyYyoCIlwoKCsJutzN9+nRSU1MZN24cxcXFRscSEQNozYCIsHLlSiZMmEDHjh3JyMigadOmRkcSETdSGRARALZu3UpKSgoul4vMzEwSEhKMjiQibqJpAhEBoEuXLjgcDiIjI0lOTmbFihVGRxIRN1EZEJFK4eHhbNy4kdGjRzN27FhmzJihDYpEvICmCUTkCi6XixdffJHU1FQGDBjAypUrCQoKMjqWiNQQlQERuaZ169YxatQoGjduTFZWFjExMUZHEpEaoGkCEbmm/v37k5+fD0BiYiLr1683OJGI1ASVARG5rpiYGPLz87njjjsYOHAgL7zwgjYoEqljVAZE5IaCgoLIzs4mNTWVxx9/nPHjx1NSUmJ0LBGpJlozICJVsmLFCiZOnEinTp1YvXo14eHhRkcSkZukMiAiVbZlyxaGDRuGyWQiMzOTLl26GB1JRG6CpglEpMq6du2Kw+EgIiKC5ORkVq5caXQkEbkJKgMi8r/StGlTPv74Y+677z4eeughZs6cqQ2KRGopTROIyE1xuVw8//zzPPHEEwwcOJCVK1fSoEEDo2OJSBWoDIhItVi7di2jRo2iadOm2O12WrdubXQkEfmVNE0gItViwIAB5OfnU15eTteuXdmwYYPRkUTkV1IZEJFq06ZNG/Lz8+nWrRsDBgzgpZde0gZFIrWAyoCIVKuGDRvyj3/8g8cff5xp06YxceJEbVAk4uG0ZkBEaszy5cuZNGkSnTt3Jj09nSZNmhgdSUSuQmVARGpUfn4+w4YNw2KxkJmZSefOnY2OJCK/oGkCEalRiYmJOBwOwsPD6dGjB6tWrTI6koj8gsqAiNS4iIgIPv74Y0aOHMno0aOZPXs2FRUVRscSkR9ZjQ4gIt7B39+f5cuX07FjR2bMmMGOHTtYsWKFNigS8QBaMyAibrdmzRpGjx5Ns2bNyMrKomXLlkZHEvFqmiYQEbe75557yM/Pp6ysjISEBHJycoyOJOLVVAZExBBt27YlPz+fhIQE+vfvz1//+tcqbVBUWOJk19GzbD94ml1Hz1JY4qzBtCJ1m6YJRMRQTqeTGTNm8PzzzzNx4kQWL16Mr6/vVZ+7+/h53s0/yMZvT3CwoIif//EyAZGNbPRpE8ZDiZG0bhzolvwidYHKgIh4hGXLljF58mQSEhJYvXo1YWFhlccOFRQxK2MHuXt+wGI2UV5x7T9bPx1PbhXCwmFxNG9kc0d8kVpNZUBEPMbmzZsZPnw4Pj4+2O12OnXqxCrHQZ7K2oWzwnXdEvBLFrMJq9nE00NiGZUQWYOpRWo/lQER8SiHDx8mJSWFr776it8sWsWaw5abHjO1XwxT++iWyiLXogWEIuJRmjVrRm5uLj3GzaiWIlB84F/8R98Y5r72/g2f27t3b3r37n3T7ylS26gMiIjH+eGiiwMhXat1zLc/2c+hgqJqHVOkrlAZEBGPMytjB84qrA+4Hr/IDkSmrsaneSyzMnZUy5gidY3KgIh4lN3Hz5O754cqLRa8HpPJjMnqS4XLRO6eH9hz4ny1jCtSl6gMiIjbHTlyhAkTJtC0aVP8/PyIjo7mkUceobS0lHfzD1Jx9ntOZvyJQy+O4uBfRnBs+R8o2uOofH154WkO/NcQzuStvGLsslOHOfDsvZz7PBu4tGbgwLP3UnzgX1jMJlZ8dhCAN954g5YtW+Lv70/Xrl3Jzc11z8mLeCDdqEhE3Oro0aN07dqVM2fOMGnSJNq2bcuRI0f4+9//TlFREeu2fsOR5am4ykoI7DIES71ALuzM4WT6fxKa8iS2NklYAm6hXmQHir7Jo2GPBy8bv/DrXDCZCWjb44r3Lq9wsfG7EzRf8hmTJ08mKSmJadOmsXfvXoYMGUKjRo1o3ry5u/4pRDyGyoCIuNXMmTP5/vvvyc/Pp0uXLpWPz58/n/PFZXz1//5GReEZGj/0X9RrHgtA/dv6c2zJVAo+WoJ/TDdMJjO2dj0pWPsKpSf34xsaVTlO0Te51IvsgCXglqu+/4ET55i5aBa33XYbGzdurNztsH379kyaNEllQLySpglExG0qKirIzMxk8ODBlxWBnxwsKKJo71Z8w2MqiwCA2def+rcNoPzsccp+uHSZ3xZzB5gtFH3978v7pSf3U/bDQWztel4zQ8n3uzl54gRTpky5bNvj3/zmNwQFBVXHaYrUOioDIuI2J0+e5Ny5c3To0OGqx0udFTjPnsCnUcQVx3yCL31id549CYDFFkS9W+Mp/Cav8jlFX+eC2XKpKFyD8+wJAFq3vnwTIh8fH1q0aFG1ExKpI1QGRMRj+Fqr9icpoF1PnAVHKD2+F4DCb/Kod2s8Fps+4YtUhcqAiLhNaGgoDRo0YOfOnVc9HhUcgDUojLKCI1ccKys4DIA1KLTyMVtMN7BYKfx6E6XH9+IsOELAdaYILr3+0g2Qdu/effn4ZWXs27evSucjUleoDIiI25jNZlJSUsjOzmbr1q1XHLf5Wmjcvhulx76j5MjXlY9XlBZz4Yu1WIIa4xPy75sOmevVxz/6doq+yaPw601gsV4qCNfRKjae0NBQXnvtNUpLSysfX7ZsGWfOnLn5kxSphfRtAhFxq4ULF7J+/Xp69erFpEmTaNeuHceOHSMtLY28vDxG/e4/eHF7Dsc/mEeDzoMx+wdyYUcOzjPHCR02E5Pp8s8wtnbJnMp+jvPbPsQ/+nbM9epf870tZhN3tmvK2AULmDx5Mn379uWBBx5g3759vP3221ozIF5LZUBE3CoiIoL8/HzmzJnDu+++y7lz54iIiGDgwIHYbDYm97+d98b+hTMb3+b859m4ysvwCY0idORcbK0SrhjP1iqRAqsfrtKL2NolX/e9yytcjOkWSauwWMrLy1m0aBHTp08nLi6OrKws5syZU1OnLeLRdAtjEfE4Y5fk8+neU9W2JTFcuiqQ1CKYv01IrLYxReoKrRkQEY+zcFgcVrOpWse0mk0sHBZXrWOK1BUqAyLicZo3svH0kNgbP7EK5g+JpXkjW7WOKVJXqAyIiEcalRBJar+Yahlrer82PJAQeeMningprRkQEY+2ynGQp7J24axwVWkNgcVswmo2MX9IrIqAyA2oDIiIxztUUMSsjB3k7vkBi9l03VLw0/HkViEsHBanqQGRX0FlQERqjd3Hz/Nu/kE2fneCg6eK+PkfLxMQGWyjT0zYj18fDDQqpkitozIgIrVSYYmT/acKKXVW4Gs1ExUcQICftk4R+d9QGRAREfFy+jaBiIiIl1MZEBER8XIqAyIiIl5OZUBERMTLqQyIiIh4OZUBERERL6cyICIi4uVUBkRERLycyoCIiIiXUxkQERHxcioDIiIiXk5lQERExMupDIiIiHg5lQEREREvpzIgIiLi5VQGREREvJzKgIiIiJdTGRAREfFyKgMiIiJeTmVARETEy6kMiIiIeDmVARERES+nMiAiIuLlVAZERES8nMqAiIiIl1MZEBER8XIqAyIiIl7ufwCSb4YKR0KdOwAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "dataset_generator.draw_graph()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "Now we generate some observations for the patient. We start with blood oxygen saturation as a time series generator"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [],
   "source": [
    "# blood oxygen saturation\n",
    "blood_oxygen_params = GeneratorParameters(\n",
    "    field_values=[\n",
    "        FieldValue(field=\"code\", value=Codes.OXYGEN_SATURATION.value),\n",
    "        FieldValue(field=\"status\", value=\"final\"),\n",
    "    ],\n",
    "    field_generators=[\n",
    "        FieldGenerator(\n",
    "            field=\"valueQuantity\",\n",
    "            generator_function=lambda: {\n",
    "                \"value\": random.randint(80, 100),\n",
    "                \"unit\": \"%\",\n",
    "            },\n",
    "        ),\n",
    "    ],\n",
    ")\n",
    "blood_oxygen_saturation_generator = ResourceGenerator(\n",
    "    \"Observation\", generator_parameters=blood_oxygen_params\n",
    ")\n",
    "\n",
    "bo_time_series_generator = TimeSeriesGenerator(\n",
    "    resource_generator=blood_oxygen_saturation_generator,\n",
    "    start=pendulum.now().subtract(days=720),\n",
    "    n=10,\n",
    "    time_field=\"effectiveDateTime\",\n",
    "    freq=\"daily\"\n",
    ")\n",
    "\n",
    "dataset_generator = dataset_generator.add_resource_generator(\n",
    "    bo_time_series_generator,\n",
    "    \"blood-oxygen-saturation\",\n",
    "    depends_on=\"base\",\n",
    "    reference_field=\"subject\",\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "Body temperature"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [],
   "source": [
    "# body temperature\n",
    "body_temperature_params = GeneratorParameters(\n",
    "    field_values=[\n",
    "        FieldValue(field=\"code\", value=Codes.BODY_TEMPERATURE.value),\n",
    "        FieldValue(field=\"status\", value=\"final\"),\n",
    "    ],\n",
    "    field_generators=[\n",
    "        FieldGenerator(\n",
    "            field=\"valueQuantity\",\n",
    "            generator_function=lambda: {\n",
    "                \"value\": random.randint(36, 40) + random.random(),\n",
    "                \"unit\": \"°C\",\n",
    "            },\n",
    "        ),\n",
    "    ],\n",
    ")\n",
    "\n",
    "body_temperature_generator = ResourceGenerator(\n",
    "    \"Observation\", generator_parameters=body_temperature_params\n",
    ")\n",
    "\n",
    "dataset_generator = dataset_generator.add_resource_generator(\n",
    "    body_temperature_generator,\n",
    "    \"body-temperature\",\n",
    "    depends_on=\"icu-encounter\",\n",
    "    reference_field=\"encounter\",\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "respiratory rate"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [],
   "source": [
    "# respiratory rate\n",
    "respiratory_rate_params = GeneratorParameters(\n",
    "    field_values=[\n",
    "        FieldValue(field=\"code\", value=Codes.RESPIRATORY_RATE.value),\n",
    "        FieldValue(field=\"status\", value=\"final\"),\n",
    "    ],\n",
    "    field_generators=[\n",
    "        FieldGenerator(\n",
    "            field=\"valueQuantity\",\n",
    "            generator_function=lambda: {\n",
    "                \"value\": random.randint(12, 30),\n",
    "                \"unit\": \"breaths/min\",\n",
    "            },\n",
    "        ),\n",
    "    ],\n",
    ")\n",
    "\n",
    "respiratory_rate_generator = ResourceGenerator(\n",
    "    \"Observation\", generator_parameters=respiratory_rate_params\n",
    ")\n",
    "\n",
    "dataset_generator = dataset_generator.add_resource_generator(\n",
    "    respiratory_rate_generator,\n",
    "    \"respiratory-rate\",\n",
    "    depends_on=\"icu-encounter\",\n",
    "    reference_field=\"encounter\",\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "heart rate"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [],
   "source": [
    "heart_rate_params = GeneratorParameters(\n",
    "    field_values=[\n",
    "        FieldValue(field=\"code\", value=Codes.HEART_RATE.value),\n",
    "        FieldValue(field=\"status\", value=\"final\"),\n",
    "    ],\n",
    "    field_generators=[\n",
    "        FieldGenerator(\n",
    "            field=\"valueQuantity\",\n",
    "            generator_function=lambda: {\n",
    "                \"value\": random.randint(60, 100),\n",
    "                \"unit\": \"beats/min\",\n",
    "            },\n",
    "        ),\n",
    "    ],\n",
    ")\n",
    "\n",
    "heart_rate_generator = ResourceGenerator(\n",
    "    \"Observation\", generator_parameters=heart_rate_params\n",
    ")\n",
    "\n",
    "dataset_generator = dataset_generator.add_resource_generator(\n",
    "    heart_rate_generator,\n",
    "    name=\"heart-rate\",\n",
    "    depends_on=\"icu-encounter\",\n",
    "    reference_field=\"encounter\",\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "With this we are done for now and can look at the graph again"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<module 'matplotlib.pyplot' from 'C:\\\\Users\\\\Michael Graf\\\\AppData\\\\Local\\\\pypoetry\\\\Cache\\\\virtualenvs\\\\fhir-kindling-aPmNxlUm-py3.11\\\\Lib\\\\site-packages\\\\matplotlib\\\\pyplot.py'>"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgMAAAGFCAYAAABg2vAPAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAADPtElEQVR4nOzddVhU2RvA8e/M0N0oKgYiimLHqosttru6dsfq6tqurtiFteoaa63dBXatid2N2IEYhHRJzdzfH/yYdRZsSjif5+F5mBvnnjvozHtPvEcmSZKEIAiCIAh5ljy7KyAIgiAIQvYSwYAgCIIg5HEiGBAEQRCEPE4EA4IgCIKQx4lgQBAEQRDyOBEMCIIgCEIeJ4IBQRAEQcjjRDAgCIIgCHmcCAYEQRAEIY8TwYAgCIIg5HEiGBAEQRCEPE4EA4IgCIKQx4lgQBAEQRDyOBEMCIIgCEIeJ4IBQRAEQcjjRDAgCIIgCHmcCAYEQRAEIY8TwYAgCIIg5HEiGBAEQRCEPE4EA4IgCIKQx4lgQBAEQRDyOBEMCIIgCEIeJ4IBQRAEQcjjRDAgCIIgCHmcCAYEQRAEIY8TwYAgCIIg5HEiGBAEQRCEPE4ruyuQ08QmJOMXGktisgodLTlFLA0x1BVvkyAIgpB7iW854FFQNJsu+eP9IBj/sDikd/bJAHsLA+o62dC5mj2OtsbZVU1BEARByBQySZKkjx+WO70Ii2PMLh/OPA5BIZehVL3/rUjd71rciumtXChkYZCFNRUEQRCEzJNng4GtV/yZuNeXZJX0wSDgvxRyGVpyGZNblqZDFftMrKEgCIIgZI08GQws8n7EnCMPv7qcEW4lGFjXMQNqJAiCIAjZJ8/NJth6xT9DAgGAOUcesu2Kf4aUJQiCIAjZJU8FAy/C4pi41zdDy5yw15cXYXEZWubnOHLkCL1796ZMmTIoFAqKFCmSbXURBEEQvk15KhgYs8uH5M8YH/ApklUSY3b5ZGiZn2Pz5s1s3rwZU1NT7Ozssq0eOUlsQjK+ryO54R+O7+tIYhOSs7tKgiAIOVqeGTPwKCiahvNPZ1r5x4bVooiFPiqVCh0dnUy7zn+9fv0aa2trtLW1ad68OXfu3MHPzy/Lrp9TiOmhgiAIXy7DWga8vLyQyWScOnUqzb6///4bmUzGnTt3uH37Nj169KBYsWLo6emRL18+evXqRWhoaJrzXr16Re/evbGzs0NXV5eiRYvSv39/EhMT1cdEREQwbNgwihQpgq6uLgULFqRbt26EhIRolLXpkj8KuUz9Oub2MZ7PbE78C1/Cjv7NiwWd8J/XntB/FiEpk1DFxxCyby4v5rXnxbz2hHuv5t24KTkiiOczmxN5aScxV/dQtZwzurq63L17l0mTJiGTyXj8+DE9evTAzMwMU1NTevbsSVycZpfCmjVrqFevHjY2Nujq6uLs7MzSpUs/+X23s7NDW1v7k4/PbV6ExdF11SUazj/NhkvPef6fQABAAp6HxbHh0nMazj9N11WXsrVrRxAEIafJsKRDzZo1w8jIiO3bt1O7dm2Nfdu2baN06dKUKVOGuXPn8vTpU3r27Em+fPnw9fVl+fLl+Pr6cvHiRWSylC/s169fU7VqVSIiIujbty8lS5bk1atXeHl5ERcXh46ODjExMbi6unLv3j169epFxYoVCQkJYe/evbx8+RIrKyt1HbwfBKc7hTDs6N8ojMwxc+1Mwqv7xNz8B7muIQmv7qEwscasdnfePrlC1KWdaFsVxsilvsb5sT7HkJITKVSjBRMaOmNhYaHe165dO4oWLcqMGTO4fv06K1euxMbGhlmzZqmPWbp0KaVLl6Zly5ZoaWmxb98+fv31V1QqFQMGDMiQv83HSJKkft+/Je9ODwU+OkU0df/5p6E0mHdKTA8VBEH4vwztJujUqRPHjx/n9evXKBQKAAIDAylQoACTJk1i/PjxvH37Fn19fY3ztm7dSseOHTl9+jSurq4AdO/enY0bN3Lp0iUqV66scXzql9fEiROZMmUKO3fupFWrVukeAxCTkIzLpMMaT4wxt48RenA+ekUrYtNusvrYwA0jSHj1AKMKjbFslPJlLKmUvFraGy2zfOTrPBNIaRl4taw3Ml0DCvyyAi0DU+5MaoShrhaTJk1i8uTJ1KtXj4SEBOzs7Ni+fTutW7fm9OnTGq0W6b0fjRs35tGjRzx58uSz3v93uwlu3ryJh4cHp0+fxt7enmnTptGoUaM056S+T8HBwfzzzz88f/4cKysrGjduTNGiRT/r+llJTA8VBEHIOBk6gLB9+/YEBwdz8uRJ9TYvLy9UKhXt27cH0Pjii4+PJyQkhO+++w6A69evA6BSqdi9ezctWrRIEwgA6i/uHTt2UK5cuTSBwLvHADwPjU3TdJzKqJybxrE6+Z0ACaOybv+WJVegk684yZFBac43KFEDhYEpEuAXGktERATnz58H4MSJE5w7d4579+4B4OrqSmhoKFFRUerz330/IiMjCQkJoXbt2jx9+pTIyMj31PrDHj9+TKdOnYCUAYa1a9fm559/xtvbG0Cju0Mmk+Hn58eQIUNYuXIlly9fZuPGjQwdOhRf34ydeZFRctv00Li4OBYvXoybmxv58+fH2NiYChUqsHTpUpRKZbbWTRCEvCFDg4HGjRtjamrKtm3b1Nu2bdtG+fLlKVGiBABhYWEMGTIEW1tb9PX1sba2Vj+Bpn75vXnzhqioKMqUKfPB6z158uSjxwQGBvL6dQDKmHCUMeGokhI09muZWGu8lusa/H+71X+2G6KKj0lTvpaZrfr33n1+wdramqNHj2oeo6WFn5+fum8/PDxcve/cuXM0aNAAQ0NDzMzMsLa2ZsyYMcC/70dkZCSBgYHqn7CwsA/e84IFC7C2tsbDw4MGDRowd+5c8ufPz+bNm4mLi1MHP6lfNPPmzePevXt4eHiwb98+jhw5gr+/P8uXLyc+Pv6D18pquXF66NOnTxk0aBCSJDF8+HDmzJlD0aJF+fXXX+nVq1e21UsQhLwjQxcq0tXV5ccff2TXrl0sWbKEoKAgzp07x/Tp09XHtGvXjvPnzzNy5EjKly+PkZERKpWKxo0bo1KpMrI6AOTPn1/jtWXToRiVbfDvBtl74qH0tqfToyLT0lX/fvP6VZKT005ju3nzpkaTe4kSJTAzM0NfXx9/f38MDAxwcHDA0tISIyMjAgMDuXr1KqtWraJo0aKsW7dOo7Xlu+++4/DhwxgZGSGXp63nyZMnady4McWLF1dva9KkCd7e3gQFBaVp/j9//jxNmjShVq1aJCcnY2hoSP/+/Vm8eDFPnz7F2dk5/fcoG2Tm9NANvaulvE5OztJZIfny5cPHx4fSpUurt/3yyy/06tWLNWvWMH78eI2/pSAIQkbL8DwD7du3JyQkhOPHj+Pp6YkkSeougvDwcI4fP467uzuTJ0+mVatWNGzYkGLFimmUYW1tjYmJCXfu3PngtRwcHD56zNGjR9l34B9sO3hg08EDvWIVv+4G30MGPLh6ln79+mlsl8vluLm5ceTIEfWAQHd3dwYPHoyDgwOSJNGwYUOKFCmCJEm8fv1aPVZg1qxZ9OzZUyMQALh48SKmpqYoFApMTEwoUKAApUqV4uzZswQFBfH48WNOnz7NsGHDGDt2LLNmzeLhw4f4+flx+PBhTp48ybVr13j8+DFBQUEULFiQc+fO8ebNG3bv3o1MJmP37t34+PhoBGjZPSvkUVA0Zx6HaAwUzIhZIU+nN2P/puWMnToTBweHLJ8VYmVlpREIpErt/krtZhIEQcgsGb6EcYMGDbCwsGDbtm3cu3ePqlWrqp9EUwcV/nfM4vz58zVey+VyfvzxRzZu3MjVq1ffO4Dwp59+YsqUKezateu9AwgbNEhpBXDy1eF5JjYF21saULhAPpYuXYpMJlN/EahUKooWLUrDhg159eoVAD179qRIkSKYmJhw4sQJ5s+fT+HChYGULoFSpUoBcP/+fQoUKEB0dDTR0dFERUWpf959nfq7p6cnoaGhJCUlERYWxunTp9XHREREoFKp6N+//3vvoUCBAuoxDEePHkWSJEaOHEmBAgUwNjZm9+7d2Nracv78eU6fPs3NmzepV68ednZ2vHjxgq1bt3Lnzh0uXbqUKbNCUqeHZtaskKX3jjBq6EB0dXVzxKyQwMBAAI1ZMYIgCJkhw4MBbW1tWrduzdatW4mNjWXOnDnqfSYmJtSqVYs//viDpKQkChQowJEjR3j27FmacqZPn86RI0eoXbs2ffv2pVSpUgQEBODp6cnZs2cxMzNj5MiReHl50bZtW3r16kWlSpUICwtj7969LFu2jHLlyqnLq+tkw4ZLzz9rhcJPpZDLqFvCRv3axibl902bNjF79myqVKmS7nlubm7o6OjQokULfvnlF2JiYlixYgU2NjYEBAQAKe+nhYWFxpfTu27fvs3evXsxNzfHwMCA6OhoAJycnOjTpw8//PADAJMmTeLQoUOsWbMGXV1dwsPDiY2NVQcSV65c4cKFCwQHBwMpg9oUCgUxMTHcuXOH8PBw/Pz80NXVpV+/fuqA7r+DDK9cuYKuri6mpqaYmJgQHh5OeHg4NWvWJCgoiLi4OExMTOjYsSNr1qzB1NSUQ4cOcefOHWbMmEGLFi0wNjbGxMSE0aNHa3SDvG96KIDC0AybtilP8sYVm5EcEUDUpZ0as0KMyjfi1dLexNw+miYYSI4Owcl9I6NGpR2MWqFCBVatWqV+HRoayqpVqzSCgVOnTmkMBh04cCCNGzfmzz///KJgIDExkfnz51O0aNH3/vsRBEHIKBkeDEBKV8HKlSuRyWS0a9dOY9/mzZsZNGgQixcvRpIk3NzcOHToUJpUugUKFODSpUuMHz+eTZs2ERUVRYECBWjSpAkGBimD/IyMjDhz5gwTJ05k165drFu3DhsbG+rXr0/BggU1yutczZ61F/wy43ZRqiS6fJd2vrqbm5t6VH96nJyc8PLyYty4cYwYMYJ8+fLRv39/rK2tP3ng2PXr1xk/fnya7QcOHMDCwkIdDJw4cQJnZ2eKFCmifv/e9W499+zZw48//kjx4sXVgcaiRYsYNGgQt2/fpnjx4sTFxalbJd68eUNwcDAhISH88ssvtGzZkooVKxIVFcW8efMoWLAgVlZWBAYG8vDhQ41WjXeb20ePHs3o0aM16mVgYICJiQnGFtYktpxOSodMWunNCkl4dT/dWSGJQWmnbBqUqEFggg6xCckY6mr+t/hv14+rqyu7du0iKioKExMTIO2skKSkJGrXrs3hw4eJjIzE1NQ03Xq/z8CBA7l79y4HDhxASytT/psKgiCo5Zl0xABdV13i/NPQDG0dUMhl1ChmqR58lhPs27dPHZC1aNGCdevWMXjwYE6dOoWrqyurVq3CwMCAdu3aoVAoCAgIQKlUUrBgQZRKJUePHqVJkybUrFmT06dPI5fLcXV1JSYmhhs3bgAps0ImT57M1q1b1a0JqSZPnsyECRMICgoiX758jB07Fg8Pj3TrmpycjLGxMY0bN8bDw+O93SD3AyI5rSivPk+ma4BcW1edLyJft7no2jmp90ec2UTkuS0UHLQBhaG5envI/nnEPTyP/XDPlOv/P1+EqWtnzGp25MCg7yltl/LFnZovIjAwEFvbf2eNrF27lp49e+Ln56fu3jl37hwTJ07kwoULacYTPH/+HHt7eyIjI3n79q16u46OTrotPrNnz+b3339n6tSpjBs37v1/aEEQhAySpx45prdyocG8UxkaDGjJZUxv5ZJh5WWEFi1a4OHhwejRo+nXrx/58uVj5cqV1KhRA4AlS5ZgaWlJ27ZtAXjw4AELFy7EyMgImUzGzZs3cXBw4MGDB6hUKgICAjJtVkjqU6+hoWG6g+hS/TdDYmbNCklMTlv31LEuaYtJKefJkyfUr1+fkiVL8ueff1KoUCF0dHQ4ePAg8+bNU78fQ4YMYd26derza9eunWZw6Nq1axk1ahT9+vUTgYAgCFkmTwUDhSwMmNyyNO47M26VwSktS1PIIm2ze3YbOnQoXbt2JSYmBoVCgb39v90YS5cuRS6Xq7+InZyccHV15dGjR0iSxIgRI7CysqJp06YcP36ce/fupTsrJLUFINWjR4806pCRs0JWbNnN2D3/HqNtlTlphHW0Pn+Czb59+0hISGDv3r0a73NqkqdUv//+O126dFG/Njc319i/Z88efv75Z1q3bs3ixYs/ux6CIAhfKk8FAwAdqtgTEpOQIRnsRro50T6H5raXy+VYW1tjbW2dZl/VqlU1XufPn59hw4ZpbEtKSspRs0I6tmrGtFta780kmRFkQBFLw88+L733IzIykjVr1mgc5+zs/N6cDadPn6ZDhw7UqlWLTZs2pZs/QhAEIbPkuWAAYGBdR6yMdNWL3HxOt4FCLkOBRPP8cfxaxyETa5m9ctqsEENdLewtDDJ9euh/Bw9+ik+ZFfIhz58/p2XLlshkMtq0aYOnp6fG/rJly1K2bNnPrpcgCMKnypPBAKS0ENR0sGLMLh/OPA557/z1VKn7axSz5Mm2acw7uo9jy12YPXs2bm5u3+Sqfx+T02aFZOb0ULkMjemhn+NrZ4U8e/ZMnXo6vWmIEydOFMGAIAiZKk/NJnifR0HRbLrkj/fDYPxCYjW+2GWkPDHWLWFDl+/sKW5jzMKFCxkyZIj6mEqVKjF16lQaN26cK4OCnOJRUDQN55/OtPKPDatFcRvjTCtfEAQhpxLBwDtiYmIwsbBm1pI1NHBrhI6WnCKWhmmaji9fvky1av9OJVQoFCiVSipUqMChQ4c0pqEJX+/t27c8fvyY48ePc1zlzN3Q5Fw/PVQQBCEr5dlugvQEBQUhJcVTqZgNFezN33tcmTJlkMvl6iljSqUSuVzOkydPiI2Nzarq5lpHjhxhz5493L9/n3v37hEYGKgenFelbmO0ag7O9dNDBUEQspIIBt6ROtgrX758HzzOwMCAokWLqhcUgpR+40OHDqmT0Ahfbu7cuRw5ciTNdplMxvol87gZbZAnpocKgiBkFTF/6R2pC8N8LBgANKbJWVhYoFKpsLS0zLS65SXz5s1Ls3ywXC7n119/pWTJknSoYk9969RZBV/XQpCTp4cKgiBkFREMvCMwMBAdHZ00yWDSU7duXYyNjfHy8uL8+fO8evVKYwEf4ctZWFhQvHhxjW26urrqBEe+vr5sHd+DEhFX0dVSoJB/3qBNhVyGrpacWa1dGFC3+MdPEARByOVEMPCOgIAA8uXL90kzAvr27UtYWBg//fQTTk5OLF++nE2bNrFy5cosqGnutXv3blxcXAgJCaFcuXIoFArkcjnu7u7Y2NgQExNDmzZtKFasGLvnjuTYsNrUKJbSIvOxoCB1f41ilhwbVlu0CAiCIPyfmE3wjt69e+Pr68vFixe/6Pz+/fuzZs0aLl68SPny5QkODubRo0f4+/tjbW1NgwYNPl5IHhUdHc2wYcNYtWoVP/zwAytWrCApKQlnZ2e0tLTw8/PD0NCQLl26sHfvXq5cuULJkiXV5787PdQ/NE6j8yC96aGCIAjCv0Qw8I6mTZuio6PD7t27v+j8+Ph4atSoQXR0NNu3b6d///68fv0aExMTgoODad26NcuWLcvYSucCFy5coEuXLgQFBbFgwQJ69eqlbp25ffu2etrmsmXL6N+/P1u2bKFDhw7vLS82IRm/0FgSk1XvnR4qCIIg/Et0E7wjMDDwkwYPvo+enh7bt28nMDCQ6tWrY25uzpo1a7h8+TJHjhzh4MGDbN++PQNr/G1LSkpi/PjxfP/999ja2nLr1i169+6t0U1TtmxZKlSowLVr1xgyZAi//vrrBwMBAENdLUrbmVLB3pzSdqYiEBAEQfgIEQy8IzAwkPz5839VGcWLF8fCwoKEhARq1qxJ/fr1MTAwoHz58hQrVoz79+9nUG2/Lf9tgHrw4AE1atRgxowZTJ48mdOnT+PgkP5aDxEREbRt2xYXFxf+/PPPrKiuIAhCniKCgf9TKpUEBQV9VcsAwC+//IJKpaJr165MmTKFq1evAhAXF8e9e/ewsLDIiOp+E+7evcuhQ4eIjf03xbMkSSxdupQKFSoQFRXFhQsXGDdunHo55f+SJImePXsSHh6Op6cnurq6WXkLgiAIeYJoP/2/kJAQVCrVVwUDjx8/5tKlS4wdO5Zu3brx4MED2rZty9WrV1m5ciWFChXKEwvOnDp1ihEjRvD8+XOsra0xMjJi+PDh1K5dm969e3Pw4EH69+/P7NmzMTT88JLBf/75J7t372bPnj3qJZQFQRCEjCVaBv4vNeHQ13QTJCQk8PjxYxwdHTEwMGDbtm1ERETQpEkT9uzZQ/ny5XF1dc2oKudIT58+Zfz48dStWxdfX1/WrFlDsWLFmD17Ni4uLly7do0DBw6wZMmSjwYC586dY9SoUYwcOZKWLVtm0R0IgiDkPSIY+L9PTUX8ITo6Ojg6OmJsnDJ1rUiRIvz8889cuXKFN2/eMH36dGQymXpNg9zowoUL3Lp1ixEjRmBtbU2pUqW4du0a165do2bNmty6dYumTZt+tJw3b97Qvn17qlevzrRp07Kg5oIgCHmX6Cb4v9SWga9ZcdDR0ZFy5crRunVrfvnlF+7du8e5c+dwdHTk2bNnPH36FCsrK+Tyf2MwPz8/Dh48yPXr17G0tGTs2LGYmJh89f1kl7i4OBwcHDhx4gSFCxfmp59+IigoiA4dOrBgwQJsbGw+WoZSqaRLly4kJiaydetWtLW1s6DmgiAIeZdoGfi/wMBALCwsvnqA2tq1a/nll1+4ceMGL1++xMPDg3379lG1alXatWtHeHi4+tjk5GRWr17N0qVLefPmDffv36dkyZL4+GTcIjwZ7caNGwQHB6dp3UidLeDm5ka1atX4/fffqVGjBsHBwbi5uXH79m0aNGjAvn37AD7YOjJ9+nSOHj3Kpk2bKFCgQObdjCAIgpBCEiRJkqTBgwdLzs7OGVZeUlKS9PbtW0mSJCkwMFB69uyZZGlpKTVp0kRSKpXq45o1ayb16dNHkiRJUqlU0u+//y59//33UmBgYIbVJSPs2rVLKly4sGRjYyOVLVtWGjhwoBQdHS1JUkq9U92/f1+qXLmyJJfLpWLFikkPHz6UJEmSXrx4IfXt21cqVarUB69z7NgxSSaTSRMnTsy0exEEQRA0iZaB/8uIHAPv0tLSQk9Pj7CwMNq2bcuSJUtYuXIlhw4dYvbs2Vy8eJHVq1djb2+vHiUvk8moVasW/v7+xMfHZ1hdvpa/vz9//PEHffr04fz58wwdOpQtW7bg7u6unjaoUqk0pgw2adKExo0b4+joCEDBggUpW7Ysb9++5fXr1+le5/Xr13Tq1In69eszfvz4rLxFQRCEPE2MGfi/gIAA7O0zfuEaLS0tChQogKWlJT/++CNjxoxh9OjRFC9eHCMjI5ycnFi2bBkymYyffvqJs2fPYmRkRHh4OIULF87w+nyJ69ev4+Pjw5YtWyhcuDAODg7ExMSwYcMGNm3aRMuWLenVqxeHDh2if//+zJgxgyZNmuDi4kJMTAxGRkaoVCqOHz9OnTp1sLOzQ5IkjUyDycnJdOjQAS0tLTZt2oRCocjGOxYEQchbRDDwf4GBgVStWjXDyzUxMWHLli3qPvU2bdqwYMECgoKCOHz4MEWLFqVDhw506tSJ48ePk5iYSMeOHSlfvnyG1+VLPXr0iPLly6Ojo6Pe1qZNG65evcrChQsZO3YsCoWCPXv20KJFC2QyGT/88AOrVq3i5s2bNG3alPXr1xMbG8uiRYsA0qwMOW7cOM6fP8/Jkyc/aZChIAiCkHFEN8H/ZXQ3wX+lfvm9O0ixb9++KJVK3NzcKF26NN27d8fb25tx48YBaVP4ZpeKFSty9epV3rx5o95mZGTE06dP8fX1xdHRER8fH1q2bElCQgIAAwYMYNKkSVhYWLBjxw5atWrF7du3qVevXpry9+/fz6xZs5gxYwbff/99lt2XIAiCkEIEA0BsbCzR0dFfnYr4U+jp6VG2bFnatGnD8ePHmTZtGjKZDAMDA4KCgtTTDv/bjJ6d6tevj4WFBTt37gTg/PnzlC9fnmvXrmFvb0/nzp2xtrZm7dq1jBgxgjdv3mBkZESnTp1YtWoVJ0+eZMyYMemmHPbz86Nbt260aNGCESNGZPWtCYIgCIhgAPg3x0BWBAO2traMHTsWT09PqlatyqRJk2jTpg2nT5+mbt266uNySiCQqn///ixbtowBAwbg6uqKra0tPj4+xMXFoa+vD8CTJ084duwYjx8/Vp+np6f33jITEhJo164dpqamrFu3LsfdsyAIQl4hggEyJhXx52jQoAGXL1/G0tISExMTjhw5wvLly6lYsWKOzU7YunVrQkNDWbZsGcOGDeP06dOEhYVhYmKift9GjBjBmTNnqF69+ieVOWLECG7duoWnpyfm5uaZWX1BEAThA0QwQMakIv5cJUuWZO/evdy4cQNLS0s2btxIcnKyRnbCnECSJJYsWULlypWxtramZMmS7N69G3d3d1q3bk358uXVLRqmpqZYW1t/Urnbtm1j0aJFzJs3j8qVK2fmLQiCIAgfkbO+ebJJYGAgOjo6Wf50qlAoKFq0KNu2bePMmTNMmjQpS6//MYGBgTRr1owBAwbQo0cPHj16xJ49e+jVqxcvXrxgypQp7Nix44NdAel5+PAhP//8Mx06dKB///6ZVHtBEAThU8mknDJkPRuNGzeODRs28Pz582yrw4wZMxgzZgyHDh2icePG2VaPVLt27aJPnz5oaWmxevVqmjZtmiGDGuPi4vjuu+9ITEzkypUr6kWdBEEQhOwjWgZI6SbIyi6C9IwaNYomTZrQpUsXXrx4kW31iI6Opnfv3rRu3RpXV1d8fHzUqwxmxAC/gQMH8vjxYzw9PUUgIAiCkEOIYIDMzzHwKeRyOevXr0dfX58OHTqQlJSU5XVInTK4fft2Vq1axc6dOz95DMCnWLNmDWvWrGHJkiW4uLhkWLmCIAjC1xHBADmjZQDAysqKbdu2cfnyZcaOHZtl101KSmLcuHG4urqSL18+bt26Ra9evTJ0qp+Pjw8DBgygV69e9OjRI8PKFQRBEL6eCAZIaRnICcEAQI0aNZg5cyazZ89WL/ebntiEZHxfR3LDPxzf15HEJiR/0fXu379P9erVmTVrFlOmTOHUqVMUK1bsS6ufrqioKNq0aYOjo6M6HbEgCIKQc+T5tQmUSiXBwcHZ3k3wruHDh3PmzBm6d+/O9evXKVKkCACPgqLZdMkf7wfB+IfF8e7ITxlgb2FAXScbOlezx9H2w/3xqVMGR44cib29PRcuXMiUKX6SJNG3b18CAgK4evWqOkGRIAiCkHPk+dkEQUFB5MuXj927d/PDDz9kd3XUwsPDqVixItbW1mzZd5RJ++9z5nEICrkMper9f7LU/a7FrZjeyoVCFgZpjgkMDFSvMjhgwAD++OMPDAzSHpcRFi9ezMCBA9m+fTtt27bNlGsIgiAIXyfPdxNkZSriz2Fubs727dt5qLSi0YIznH8aCvDBQODd/eefhtJg3im2XvHX2L9r1y7KlCnDjRs3OHjwIIsWLcq0QODKlSsMGzaMQYMGiUBAEAQhBxPBQBanIv4cl2LMMHMbQLL04daA9ChVEgnJKtx3+rDI+xHR0dH06tWL1q1bU6tWLXx8fGjSpEkm1TylZaNt27ZUqFCBOXPmZNp1BEEQhK+X58cMpKYitrW1zeaaaNp6xZ85Rx5mSFlzjjxk7rRJhFzay+rVq+nRo0emLgqkUqno3r07UVFRnDp1Ch0dnUy7liAIgvD1RMtAYCAWFhbo6upmd1XUXoTFMXGvb8YVKElQsS3/nLlCz549M311wDlz5rBv3z42bNhA4cKFAZg+fTrfffcd1tbW6Onp4ejoyNChQ3nz5k2m1kUQBEH4uDzfMpCTphWmGrPLh+TP7Bb4IJkMubYOy65FUrN8xhWbnjNnzjBmzBjc3d1p1qyZevu1a9coX748HTp0wNjYmHv37rFixQoOHDjAzZs3MTQ0zNyKCYIgCO+V54OBnJJwKNWjoGjOPA7J8HKVKokzj0N4HBxNEQt9VCpVhjffBwcH06FDB2rWrMnUqVM19u3YsSPN8dWrV6dNmzbs27ePDh06ZGhdBEEQhE+X57oJvLy8kMlknDp1CtBMRfz3338jk8m4c+cOt2/fpkePHhQrVgw9PT3y5ctHr169CA0NTVPmq1ev6N27N3Z2dujq6lK0aFH69+9PYmKi+piIiAiGDRtGkSJF0NXVpWDBgnTr1o2QEM0v/k2X/FHI/23Gj7l9jOczmxP/wpewo3/zYkEn/Oe1J/SfRUjKJFTxMYTsm8uLee15Ma894d6reXe2aHJEEM9nNify0k5iru6hajlndHV1uXv3LpMmTUImk/H48WN69OiBmZkZpqam9OzZk7i4OI16rVmzhnr16mFjY4Ouri7Ozs4sXbpUvV+pVNKpUyeSk5PZunUrWlofjzNT8ydERER89Fgh62RUQitBEL4dea5loFmzZhgZGbF9+3Zq165NQEAAVapUAWDbtm2ULl2aMmXKMHfuXJ4+fUrPnj3Jly8fvr6+LF++HF9fXy5evKjud3/9+jVVq1YlIiKCvn37UrJkSV69eoWXlxdxcXHo6OgQExODq6sr9+7do1evXlSsWJGQkBD27t3Ly5cvsbKyUtfP+0FwujMHwo7+jcLIHDPXziS8uk/MzX+Q6xqS8OoeChNrzGp35+2TK0Rd2om2VWGMXOprnB/rcwwpOZFCNVowoaEzFhYW6n3t2rWjaNGizJgxg+vXr7Ny5UpsbGyYNWuW+pilS5dSunRpWrZsiZaWFvv27ePXX39FpVIxYMAApk6dyokTJzh27Nh7Z2ZIkkRoaCjJyck8evQId3d3FAoFderU+eK/p5AxMjKhlSAI3548Fwzo6+vTokULvLy8WLhwoXrMQGBgIKdOnWLSpEkA/Prrr/z2228a53733Xd07NiRs2fP4urqCsDo0aMJDAzk0qVLGhn8pkyZon5Cnz17Nnfu3GHnzp20atVKfcy4ceM0nuJjEpLxD9N8Ik+lMDTDpm3Kk7xxxWYkRwQQdWknRhUaY9loAABG5RvxamlvYm4fTRMMJEeHUOCXFUgGpvTp3whD3X//9BUqVGDVqlXq16GhoaxatUojGDh16pRG9sCBAwfSuHFj/vzzTxwdHZkyZQqTJ0+mXr16733vg4KCNAKFggULsnnzZkqWLPnec4TM9SIsjjG7fD6Y0EoCnofFseHSc9Ze8PtgQitBEL5Nea6bAKB9+/YEBwdz6NAhoqOjyZ8/P15eXqhUKtq3bw+g8cUXHx9PSEgI3333HQDXr18HUqbQ7d69mxYtWqSbyje19WDHjh2UK1dOIxD47zEAz0Njed+wQaNybhrH6uR3AiSMyrr9W5ZcgU6+4iRHBqU536BEDRQGpkiAX2isxr5+/fppvHZ1dSU0NJSoqCj1tnffj8jISEJCQqhduzZPnz6lY8eOuLm5fXRxJQsLC44ePcq+ffuYMmUKVlZWxMTEfPAcIfNsveJPg3mnMiyhlSAI36481zIA0LhxY0xNTdm4cSOQkn1w2bJllC9fnhIlSgAQFhbG5MmT2bp1K8HBwRrnR0ZGAvDmzRuioqIoU6bMB6/35MkTfvrppw8eExgYyOvXEShjwgGQ6Rog1/53uqOWieZSwnJdg/9vt/rPdkNU8Wm/YLXM/s2jkJis0thnb2+v8drc3BxISRxkYmICwLlz55g4cSIXLlxIM55AW1ubjRs3Eh0dzdu3b9XbdXR0NLojdHR0aNCgAQDNmzenfv361KxZExsbG5o3b56mzkLmWeT96IvzWChVEkqVhPtOH0JiEhhY1zGDaycIQlbLk8GArq4uP/74I3v27AFSns7PnTvH9OnT1ce0a9eO8+fPM3LkSMqXL4+RkREqlYrGjRujUqneV/QX+28/u2XToRiVbfDvBtl7GnHS257OchMyrX8DCx0tzXMUCkW6Rad2YTx58oT69etTsmRJ/vzzTwoVKoSOjg7u7u5cu3aNxYsXY2VlRY8ePVi3bp36/Nq1a3Py5Mn0603KCo358+dn06ZNIhjIQhmR0Cr++W2CtozB4/l0rI06076K/XuPTR0T8qF/C4IgZK88GQxASldB6hfXxYsXkSRJ3UUQHh7O8ePHmTx5MhMmTFCf8+jRI40yrK2tMTEx4c6dOx+8loODw0ePOXr0KPGJSn7ecBUJ0LZ6/4fr15ABRSw/b07/vn37SEhIYO/evepWhD179nDt2jUAKlWqBMDvv/9Oly5d1OeltjB8SHx8vLqlRch8GZ7QCpiw15caDlZiDIEgfMPybDDQoEEDDAwMiI+PZ9++fVStWpWiRYsC/z4p/3dBx/nz52u8lsvl/Pjjj2zcuJGrV6+mGTcgSRIymYyffvqJKVOmsGvXrjTjBlKPSW0+d/LV4fl7BhFmBHtLA43Bg5/iv+/H06dP6datG3p6esTHx6uPc3Z2xtnZOc35sbGxyGSyNAsi7dixg/Dw8ExZOllIX0YltNK1L4P9iJ2g0CJZJTFmlw8belfLgBoKgpAd8mwwoK2tTYkSJbh16xaXLl3SWEzHxMSEWrVq8ccff5CUlESBAgU4cuQIz549S1PO9OnTOXLkCLVr16Zv376UKlWKgIAAPD09OXv2LGZmZowcORIvLy/atm1Lr169qFSpEmFhYezdu5dly5ZRrlw5dXl1nWzYcOn5Zy9M9CkUchl1S9h89nlubm7o6OjQokULevXqxezZs4mLi6NkyZIfbfGAlBaVBg0a0L59e0qWLIlcLufq1ats3LiRIkWKMGTIkC+5HeEzZWRCK5lMDlopSaveTWhV3EZMOxSEb1GenE2QytbWVv20265dO419mzdvplGjRixevJjRo0ejra3NoUOH0pRRoEABLl26RJs2bdi0aRODBw9m/fr11KlTR/0kbGRkxJkzZ+jfvz8HDx5k8ODBLFmyBCcnJwoWLKhRXudq9pkSCEDKh3aX7z6/+8HJyUmdrGnEiBG8fv2aX3/9leHDh3/S+QULFuSnn37ixIkTjB49muHDh3Pu3DkGDhzIlStXsLS0/Ow6CWl9LPnVoj3nCNk9gxfzO+A/5ycC1v9G3OMr6vOVseE8n9WSiLOb05SdFPqS5zObE3VtH5AyZuD5zObEP78NpASaGy/6s3z5chwcHNDX16dq1aqcOXMmC+5cEISvJZP+2xaehzRr1gwtLS31QMKcouuqS5x/GpqhQYFCLqNGMcuvasrdvHkznTt3ZtmyZfzyyy8ZVjfh671+/ZoqVaqkm/zq/PnzJCQkUKh4KZIT4zGu3BKFnjExd46T9OY51j+6Y+BUA4CgLWNQxkZg9/MSjfIjzm4h8twWCg5ch8LQXD2A0LbjdPQKlwVA58lJHnnOoUaNGnTo0IGnT5+ydu1aLCwsKFSokBhAKAg5WJ7tJoCU6Xyp2QdzkumtXGgw71SGBgNachnTW7l88fn379+nb9++dO7cmb59+2ZYvYSM8bHkV4OGDCUpJhzbzrPQK1QaSElSFbBqIGEnVqFf4jtkMjkGpWoR9s8iEt/4oWNdRF1O3P0z6NmXQWGY/qBQSZnMkwMrKVuuHN7e3up1L5ydnenbty+FChXKvJsXBOGr5elugpy2SFGqQhYGTG5ZOkPLnNKy9BeP9o6NjaVNmzbY29uzbNmyTF8CWfg8n5L86sCBg+jkL6EOBADkOvoYlW+MMjKIpJCUBEIGJaqDXEHcvX+b9xPf+JEU4o9BqVrvrUNi4CNUcRH82LGHxgJYPXr0wNTUNCNuUxCETJRngwGlUklwcHCODAYAOlSxZ4RbiQwpa6Sb0wfngX+IJEn8+uuvPHv2DC8vL4yMjDKkTkLG+ZTkV69fvUDbokCa7dqWKU/syZFvAFAYmKJXuByx98+qj4m7dwbkipRA4T2SI1MSc9nZF9UsX1ubYsWKffrNCIKQLfJsMBAaGopSqXzvojo5wcC6jsxs7YKulhzZexMVp08hl6GrJWdWaxcG1C3+xXVYvXo169ev5++//0532qCQ+xiWqkVy2CsSg54CEHv/LHqFy6Ew+PgTvrZCtBoJwrcozwYDAQEBADm2ZSBVhyr2zGtoQdyzGwAayxunJ3V/jWKWHBtW+4tbBABu3brFwIED6dOnj0YyISFn+ZTkV4XtC5MU9irN9qSwlwBomf6b7tqgxHeg0CL23mkSg56SHPYKww90EaScnzJlNSb4pWb5SUnpTskVBCFnybPBQGBgIJDzgwGAlfNnYXJtPYcG1aRrtcIUtjTgvyGBDChsaUDXaoU5NqwWG3pX+6qMcJGRkbRp04aSJUuycOHCr6q/kLlSk1/t27ePq1evptkvSRLNmjUlMeAhCa/uqberEuOJufkPClNbjYyXcj0j9ItWJO7+WWLvnQaFVkqA8AE6+RzRNjRjzaoV6qmMAGvXriUiIuLrb1IQhEyVZ6cWrlu3jh49ehAfH4+uru7HT8gmPj4+lC1bltWrV9OzZ0/19tiEZPxCY0lMVqGjJaeIpeFnZxZ8H0mSaNeuHUeOHOHatWsUL/7l3QxC1nj16hWVK1cmKioq3eRXCQkJOJQszdu38RhXaoFc35gYn+MkBT/DutVo9dTCVDG+3oTum4tMRx89exds2kzQ2P/fqYUKuQzniMvsXzKZmjVr0r59e549e8aaNWvE1EJB+Abk2amFAQEBmJub5+hAAFIyHBYuXDhNM72hrhal7TJnlPZff/2Fl5cXO3bsEIHANyI1+dX48ePZtGkTUVFRFChQgCZNmqCnp8ehQ4ewKlCUN8m6RF/bh6RMQtu6CNZtJmBQPO30WoPi1QjT0kVKfItBKdePXl+pkpg38TealrFl9uzZjBw5EhcXF/bu3cv48eMz45YFQchAebZlYOjQoRw9ehRf34xdtCUjPXjwgFKlSrFkyRL69euXJde8dOkSrq6uDBgwgHnz5mXJNYXMIUkSR44cYfTo0dy4cYOWLVui3XAYNwLiclxCK0EQsleeHTOQU3MMvGv69Onkz59fo3sgM4WGhtKuXTsqVarErFmzsuSaQua4cuUKDRo0oHHjxhgYGHD27Fn27NnDvE5V0frIINTP9bUJrQRByH55NhgIDAzM0cHA06dP2bRpE7///nuWdGWoVCq6detGTEwM27Zt00gcI3w7Hj16RLt27ahatSqBgYHs3buXM2fOULNmTSDnJbQSBCFnyNPBQE7OMTBz5kwsLS3p06dPllxv1qxZHDx4kI0bN2Jv/+XTEYXsERAQQP/+/SlVqhQXL15kzZo13L59mxYtWqTJGJlTEloJgpBz5OkBhDm1ZeDFixesXbsWDw8P9cqHmenUqVOMGzeOsWPH0qRJk0y/npBxIiMjmT17NvPmzUNXV5dZs2YxYMAA9PT0PnjewLqOWBnpMnGvL8kq6bPGECjkMrTkMqa0LC0CAUHIJfLkAMLY2FiMjIzYsGFDjkymM2jQIDZv3oyfnx/Gxpm7PnxgYCAVKlSgZMmSHD16FC2tPBsfflMSEhJYsmQJ06ZNIy4ujiFDhjBq1CjMzMw+q5wXYXGM2eXDmcchKOSyDwYFqftdi1sxvZWL6BoQhFwkT37yBwUFAeTIboLAwEBWrFjB2LFjMz0QUCqVdOrUCYAtW7aIQOAboFQq2bRpExMmTODly5f06tWLiRMnUqBA2nUHPkUhCwM29K7Go6BoNl3yx/thMP6hcRrJr2WAvaUBdUvY0OU7e4rbZO6/S0EQsl6e/PTPyamI58yZg66uLoMGDcr0a02aNIlTp05x/PjxHPleCP+SJIlDhw7h7u6Oj48PrVu35p9//qFkyZIZUr6jrTGTWpZmEqUzNaGVIAg5U578H55TUxGHhISwdOlShg0b9tnNvZ/rn3/+wcPDg+nTp1OnTp1MvZbwdS5evMioUaM4ffo0tWvX5sKFC3z33YfTA3+NzExoJQhCzpQnZhPcvHmT+Ph49evAwEC0tbWxsLDIxlqlNW/ePGQyGUOHDs3U67x48YIuXbrQtGlTRo0alanXEr7c/fv3ad26NdWrVyc8PJyDBw/i7e2dqYGAIAh5U64PBuLi4mjZsiWzZs0iOjoayJkzCcLDw/nrr7/49ddfsbKyyrTrJCYm0q5dOwwNDVm/fj1yea7/J/DNefXqFX379qV06dJcv36d9evXc+PGDZo0aZJmmqAgCEJGyPXfBPfv3+fly5csW7YMR0dH5s+fz+vXr8mfP3+O+mD966+/SEpKYvjw4Zl6HXd3d65du8b27duxtLTM1GsJnyc8PBx3d3eKFy/Ozp07mTt3Lg8ePKBr164oFIrsrp4gCLlYrh8zcPnyZb777jtOnTrF8OHDmTx5MkqlEgcHB2JiYjAyMsruKhIVFcX8+fPp27dvhrdYSJKkDnp27tzJvHnzmD9/PtWqiTzyOUV8fDyLFi1i+vTpJCQkMGLECEaMGIGpqei3FwQha+T6PAP9+/cnIiKCLVu2AHDr1i3q169PYmIiP/zwAwMGDKBSpUpoa2tnWx1nzZrFhAkTePLkCQULFsyQMkNDQxk4cCAqlQpjY2OqVKnC77//TsOGDdm+fbvoHsgBlEol69evZ8KECQQGBtKnTx/Gjx+fI6e8CoKQu+X6b4SbN29Srlw59ety5cqhra1NvXr1uHfvHh07dmTy5MmEhYVlS/1iY2OZO3cuPXv2zLBA4N69e5QpU4bk5GRq1qzJixcvGDJkCAqFglWrVolAIJtJksTevXspW7YsvXr1okaNGty9e5clS5aIQEAQhGyR678VAgICNIIBpVLJmzdvaNy4MUePHqVv375Mnz6dK1euZEv9VqxYQVhYWIaM6pckCaVSydKlS/nhhx/w9PRk8ODB5M+fn6SkJMLDw1m3bp36WCHrnT17FldXV3744Qfy5cvHlStX2LZtG46OjtldNUEQ8rBcHwyMHDmSqlWrql+HhoaiVCqxsbHB3Nyc0aNHExgYSN26dbO8bvHx8fzxxx907dqVokWLfnV5MpkMhULBvXv31Csdrl27lnXr1tG4cWPKlSvHmDFjOH78eI4aPJkX+Pr60rJlS1xdXYmLi+Pw4cMcO3aMypUrZ3fVBEEQcn8wMGDAAI1R86kJh+zs7NRP0jY2NtmyZO/q1asJCgpi9OjRGVZmfHw8Ojo6REVFcerUKQYMGED79u3x9/enQ4cO1K5dm/Xr15OQkJBh1xTez9/fn549e1K2bFl8fX3ZvHkzV69exc3NTQRkgiDkGLk+GFCpVBqvU1MRp04tzK4pW4mJicyaNYv27dtTokTGLCcrSRJ6enqMGjWKnTt30qRJE3R1ddX90+7u7tSsWRNfX191y4GQOcLCwhg5ciQlSpTgwIEDLFiwQD1GRYzZEAQhp8n1Uwv/+8Gb2jJga2vL27dviY6OxsrKKss/oDds2IC/vz8HDhz46rJSpw/KZDJUKhWurq5UqlSJs2fPUr16dVq1asXPP/8MgImJCTExMcTExGBoaCieTjNYXFwcCxcuZObMmSiVSkaPHs3w4cMzfdEpQRCEr5HrH1H+O1AuICAAc3Nz9PT0OH36NC1atGDz5s1ZWqfk5GRmzJhB69atKVOmzBeVERISQlRUFID6C12lUiGTyVixYgXe3t6sXbuW3bt3qwMBgKtXr1K7dm2MjIxEIJCBkpOTWbFiBY6OjkyYMIFu3brx5MkTJk6cKAIBQRByvFzfMiCTyUhKSgJAW1ubwMBAdWIfHR0dzM3NMzX9b3q2bt3KkydP8PT0/KLzZ8yYwZYtW4iPj8fFxYVevXrRrFkz5HI5V69eZfDgwfTr10+9PHFiYiL3799n6dKl7Nu3j4MHD2bk7eRpkiSxa9cuxowZw4MHD+jUqRNTp06lWLFi2V01QRA+kVipM5cnHVKpVOzbt4/Tp0/z9OlT3r59y/3799HW1mbr1q1UqlQpW+pUunRpHBwc2L9//2efP23aNBYsWMCsWbPQ1dVl0aJFKJVKfvrpJ/r27UulSpUwMzPj3Llz6OnpAfDw4UNWrFjB0aNH2bFjBw4ODhl9W3nSqVOnGDVqFJcuXaJRo0bMmDGDChUqZHe1BEH4BI+Cotl0yR/vB8H4h8Xx7hehDLC3MKCukw2dq9njaJv7W/dydTAwbdo0Zs2ahZOTE+XKlUMul7Nz505kMhnFihWjX79+dO7cOUtnEnh6etKuXbsvWoY2Pj6eVq1a4ebmxrBhw4CUbo8///yTAwcOoK+vz5MnT7h+/TrFihUjIiICMzMzkpOTefHiBYULFxaD1zLA7du3GT16NAcPHqRy5crMmjWLevXqZXe1BEH4BC/C4hizy4czj0NQyGUoVe//Ckzd71rciumtXChkYZCFNc1aufab4enTp8ydO5f169dz5coVVq5cyYIFCzA1NaV+/fpUqVKFoUOHcv78+Syrk0qlwsPDgwYNGnzRMrRyuZzw8HD1jAhImRXRr18/TE1NuX79OuPGjaNYsWJ4enoydOhQ7t+/j5aWFkWLFhWBwFfy8/OjW7dulC9fnocPH7J9+3YuX74sAgFB+EZsveJPg3mnOP80FOCDgcC7+88/DaXBvFNsveKf6XXMLrn228HHxwdLS0t+/PFH9TZ9fX1CQkKoXLkyixYtolOnTsyaNSvL6rR//35u377N+PHjv+h8uVxOkSJFePjwISEhIertQUFBXLlyBVtbW/WAycDAQM6ePatxnPBlQkJCGDZsGE5OThw5coQlS5Zw9+5d2rZtKwZhCkImWbt2LTKZDD8/vwwpb5H3I9x3+pCQrPpoEPBfSpVEQrIK950+LPJ+lCH1yWlybTBgZmaGvr4+a9asAVIGesXFxREVFaUeQJg/f37evn2bJfWRJImpU6fi6upKrVq1vqgMLS0tfvvtN/bu3cuGDRuQJImQkBDat2/Pd999R4MGDdixYwcAgwYN4siRI3z//fcZeRt5SmxsLB4eHhQrVoxVq1apF5Pq169fti5sJQjC59l6xZ85Rx4CEH39ADG3j31xWXOOPGRbDm4hWLJkCWvXrv3s83LtcMkaNWpQr149pk2bhr+/P/Xr11fvkySJhQsXsn//ftq2bZsl9Tly5AhXr17lyJEjX1VOlSpVmDlzJu7u7tjZ2bFq1Sri4+PZunUrq1atIiYmhqSkJLS1tcWI9i+UlJTEypUrmTx5MuHh4QwYMIAxY8Zk+awTQcjLunbtSocOHb46QdqLsDgm7vVVv46+fgC5vglGZRt8cZkT9vpSw8EqR44hWLJkCVZWVvTo0eOzzsu1wYC2tjYeHh5YWlry999/M3nyZPVAQQ8PD5KSkmjXrh29e/fO9LqktgpUrVqVBg2+/B9gqt9//53nz5/TvXt3EhMTmT9/PtHR0WzevJkffvhBPLV+IZVKhZeXF2PHjuXJkyd06dKFKVOmUKRIkeyumiBkm9jYWAwNDbP8ugqF4qMZYiVJIj4+Hn19/fceM2aXD8mf2S3wMckqiTG7fNjQuxrwbxr4jB6X9Sn3l5EXyxNevHghTZgwQQKkP/74Q7p69WqWXdvb21sCpH379mVYmcePH5dkMplUoEABydTUVHJwcJA6dOiQYeXnNceOHZMqV64sAVLTpk2lW7duZXeVBCHLTZw4UQIkX19fqWPHjpKZmZlUvnx5SZIkacOGDVLFihUlPT09ydzcXGrfvr3k7++vcf7Dhw+l1q1bS7a2tpKurq5UoEABqX379lJERIT6GEAaMGCAtHHjRqlEiRKSrq6uVLFiRenUqVMaZa1Zs0YCpGfPnqm3FS5cWGrWrJn0zz//SJUqVZJ0dXWlefPmSZIkSatXr5bq1q0rWVtbSzo6OlKpUqWkSTP/lAq771f/KExsJEDjR7dQGfV+u34rJQOnmpJcz0iSaelKOnZOknWbiRpl2HacLgGSVcuRUv+hIyQ7OztJJpNJ165dkwDpzz//TPO+njt3TgKkzZs3f/D9/9z7W7JkSZrz/3t/tWvX/uA1U+XqqYX/tXjxYoYNG0ZCQkKWDvyqX78+YWFhXL9+PUOuGxAQQIUKFShTpgzr16/n9evXyGSybMmb8K27ceMG7u7uHDlyhGrVqjFr1ixq166d3dUShGwxadIkJk+ejLOzM46OjjRq1AhJkggPD2f8+PG0a9eO2rVr8+bNG/766y+MjIy4ceMGZmZmJCYmUrJkSRISEvj111/Jly8fr169Yv/+/Xh6elK4cGEgJRFcmTJlCAwMZPDgwejq6rJkyRKCg4O5fPmyOivr2rVr6dmzJ8+ePVO3zhUpUgRtbW1CQ0P55ZdfKFKkCE5OTtSpU4eqVatSunRpypUrh5aWFvv27ePIkSNYuvXHqGIzAOIeXiDs6N/IdPQwrd4eAIWhGfpFK6CMDef16kFISQkYV26JQs+YmDvHSXrzHOsf3TFwqgFA/PPbBG0Zg7aVPZbGBvw+qC8JCQkMHjwYNzc34uPjuXr1qsb7OmDAADZs2EBgYCAGBu/vWviS+1u0aBEDBgwAYPfu3QwaNAgjIyPGjh0LpKTeb9iw4cf/+J8UMuQSY8eOlQoVKpSl10yNCL28vDKkvKSkJKlWrVpS/vz5pcDAwAwpMy96/Pix1LFjRwmQnJycpJ07d0oqlSq7qyUI2Sq1ZaBjx47qbX5+fpJCoZCmTZumcayPj4+kpaWl3n7jxg0JkDw9PT94Df7/xPpu6+zz588lPT09qVWrVupt72sZAKR//vknTblxcXFptpmXqCJpmeXTeLLXtrLXaA1I/TGu/IMESLadZ6m3FRruKWmZ2koKU1vJftRejZYBLbN8Us3phzSu9/fff0uAdO/ePfW2xMREycrKSurevfsH35cvub9GjRpJxYoV09hWunTpT24NeFeunU2QnndTEWcVDw8PnJ2dadWqVYaUN2HCBM6dO8e2bduwtbXNkDLzkuDgYAYNGkTJkiU5deoUK1as4M6dO7Rq1UpMExSE/+vXr5/69507d6JSqWjXrh0hISHqn3z58uHo6Ii3tzcApqamABw+fJi4uLgPll+9enWNlkx7e3t++OEHDh8+jFKp/OC5RYsWpVGjRmm2v9uvHhkZid+rQKT8pUiOCEQVH/vRe3779Co6+UugV6i0eptcRx+j8o1RRgaRFKI5g8CwTH1eRSmJTUhWb2vXrh16enps2rRJve3w4cOEhITQpUuXj9bhc+4vJCSE2rVr8/TpUyIjIz+p7A/Jc8FA/vz5s+x6V69e5dChQ4wdOzZDBpYcOHCAGTNmMH36dFxdXTOghnlHdHQ0kyZNwsHBgQ0bNuDh4cGjR4/4+eef0dLKteNoBeGLFC1aVP37o0ePkCQJR0dHrK2tNX7u3btHcHCw+pzhw4ezcuVKrKysaNSoEYsXL073i8rR0THNthIlShAXF8ebN28+uW7vOnfuHA0aNMDQ0BAzMzOKFsxPxKn1AKgSPh4MJEcGo21RIM12bctC/9+vWS8tM1skwC/037LNzMzSLH63adMmChQooE5OFhMTQ2BgoPrnv/f7qfdnbW3NmDFjADIkGMhTn4IBAQFUrlw5y643bdo0HB0dad++/VeX9fz5c7p27Urz5s0ZMWJEBtQub0hMTOTvv/9m6tSpREVFMXjwYNzd3bGwsMjuqglCjvXuU2jqaqiHDh1Kd3S/kZGR+ve5c+fSo0cP9uzZw5EjRxg8eDAzZszg4sWLFCxYMMPrlurJkyfUr1+fkiVL8ueff1KoUCH8IxL4ff46oq/sgUwYGifTSpmdlpis0tjerVs3PD09OX/+PC4uLuzdu5dff/1V/UA4Z84cJk+erD6+cOHCGomVPvX+dHR0OHjwIPPmzUOlUqU553PlqWAgK1sGbt++ze7du1m9evVHp8d8TGJiIu3atcPExIR169aJtMKfQKVSsXXrVsaPH4+fnx/du3dn8uTJFCpUKLurJgjfFAcHByRJomjRopQoUeKjx7u4uODi4sK4ceM4f/48NWvWZNmyZXh4eKiPefQobRa/hw8fYmBggLW19WfXcd++fSQkJLB3717s7e0B8H0diWzR1rQHv6c7UMvUhqSwV2m2J4W9/P/+9Oulo6X5edy4cWOsra3ZtGkT1apVIy4ujq5du6r3d+vWTSMZ3KdMG0zv/gB1F827vrS7M898q6hUKoKCgrJszMC0adMoXLjwJ/cTfcjIkSO5ceMGnp6e4on2IyRJ4vDhw1SqVInOnTtTpkwZbt++zerVq0UgIAhfoHXr1igUCiZPnqxOd55KkiRCQ1Py/EdFRZGcnKyx38XFBblcTkJCgsb2CxcucP36dfXrFy9esGfPHtzc3L7o4Sn1nHfrZ66VTKxP2kyDMm29dLsN9ItVJjHgIQmv7qm3qRLjibn5DwpTW7St7NOcIwOKWGrmYNDS0qJjx45s376dtWvX4uLiQtmyZdX7ixUrRoMGDdQ/NWvW/KL7i4yMVGfYfZehoSEREREfLfO/8kzLQEhICEqlMtOCAV9fX16/fs2bN29wdnbG09OTJUuWfHUCIE9PTxYuXMhff/1FlSpVMqi2udOVK1dwd3fnxIkT1KxZk7Nnz37SfzRBEN7PwcEBDw8PRo8ejZ+fHz/++CPGxsY8e/aMXbt20bdvX0aMGMGJEycYOHAgbdu2pUSJEiQnJ7NhwwYUCgU//fSTRpllypShUaNGGlMLAY3m88/h5uaGjo4OLVq04JdffiEmJoYVK1agZ2xObEyYxrE6+YoTc/0gEee2om2eH7mBGfpFymFavQ2x904RtH0SJpVaINc3JsbnOMkRQVi3Go1MlvbZ2d7SAEPdtF+j3bp1Y+HChXh7e2fI+jfvuz8bGxuNhesAKlWqxNKlS/Hw8KB48eLY2Nh80mJqeSYYCAwMBMiUboJTp04xYMAAIiMjMTExISEhgfz589O9e3cgJZr7kqabhw8f0rt3b9q1a6eeRyqk9ejRI8aOHYunpyfOzs7s2bOHFi1aiNkBgpBB3N3dKVGiBPPmzVN/YRcqVAg3NzdatmwJQLly5WjUqBH79u3j1atXGBgYUK5cOQ4dOpRmldbatWtTvXp1Jk+ejL+/P87Ozqxdu1bjCfpzODk54eXlxbhx4xgxYgT58uWjV69e7L7xkuu7nmgca1azA8rIYKIu7UBKfItuoTLoFymHwtCcfF3nEOG9huhr+5CUSWhbF8G6zQQMiqd9EJPLZNQtYZNufSpVqkTp0qW5d+8enTt3/qJ7+tj99e/fH2tra3r16qVx7IQJE3j+/Dl//PEH0dHR1K5d+5OCgTyTdOjw4cM0btwYPz8/dfKLjBATE4ODgwMjRoygdevWbN68mQkTJjBnzhz69eunTuOpUqk+q6//7du3fPfdd+oEFsbGxhlW59wiICCAKVOmsGLFCvLnz8/UqVPp2rXrV4/REAQh88hkMgYMGMCiRYsypfy3b9+yZMkSZs6cSZyWCdY9FmbKdQCODatFcZv0P5srVKiAhYUFx48fz7TrZ6Q8M2YgtWUgo+fmL1myhAoVKjBy5EgcHBx4/vw52traXLx4kSZNmvDDDz+QkJDw2YP+Bg0axMOHD/H09BSBwH9ERkYybtw4ihcvzrZt25g5cyYPHz6kR48eIhAQhDwqISGBJUuW4ODgwKhRo2jVqhX3LnnjWtwKhTxjWwkVchmuxa3eGwhcvXqVmzdv0q1btwy9bmbKU8GAubk5enp6GVquUqnE39+f2NhY/P39WbNmDQqFgpIlS9KxY0f8/Pxo2LAh4eHhn1zmunXrWLVqFUuWLPniZrPcKCEhgXnz5uHg4MCff/7J4MGDefr0KSNGjMiahTwEQchxkpOTWb16NU5OTgwcOJAGDRpw//59li9fjr29PdNbuaCVwcGAllzG9FYuabbfuXOHdevW0atXL/Lnz58h08qzSp4ZMxAQEJApgwe/++47tm/fToMGDYiNjUWlUrFhwwbatGkDgJWVFcOHDyciIgJzc/OPlnfnzh369+9Pz5496dmzZ4bX91ukVCrZtGkTEyZM4MWLF/Tu3ZuJEydSoEDaBCGCIOQNSqWSbdu2MWnSJB49ekTbtm05ePAgzs7OGscVsjBgcsvSuO/0ybBrT2lZOt3li728vJgyZQpOTk5s2bIlwx8+M1OeahnIjMGD1atXZ+DAgTg7O3Pv3j0KFSqksUxxqVKlMDMzU2fp+pDo6GjatGlD8eLFM60/Lae5dOkS3bp1o3PnzmzcuJGkpCT1PkmSOHjwIBUqVKB79+5UqlQJX19fli9fLgIBQfhGSZL0VZ9vkiSxc+dOypUrR+fOnSlZsiQ3btxg+/btaQKBVB2q2DPC7eM5Ej7FSDcn2ldJO80QUhZ6UqlU3Lt375tb8CzPBAOZ0TIgSRJ6enr07t0bMzMz9PX10dLS4uLFi+pjFi5ciImJCdWqVftoWX379uXVq1d4enp+cGWr3OL48eO0a9eOpKQk8ufPT48ePXB3dycqKoqLFy9Sp04dmjVrhrm5ORcuXGDHjh2ULFkyu6stCEI2kCSJQ4cOUblyZX766Sfs7Oy4ePEie/fupXz58h89f2BdR2a2dkFXS/7ZYwgUchm6WnJmtXZhQN3iX3gHOVuemU3g5ORE8+bNmTt3boaWK0kSISEhFClShIEDB3L37l3evn2Lubk52traeHt7c/ny5Y8mvFm6dCm//vor27Zto127dhlax5yqWrVqlC1blhUrVgCwfv16Jk6ciLGxMT4+Pri4uDBz5kyaNGkipgkKQh7m7e2tzmj4/fff4+Hh8cVP3i/C4hizy4czj0NQyGUoVe//Ckzd71rciumtXNLtGsgt8syYgczoJkiNo+bNm4dMJmPkyJHExcUxbdo0/P39cXJyYvfu3R8NBK5evcrQoUMZOHBgngkEgoODSUhIoGLFigC8evWKEydO8Pz5cxQKBevXr6djx45iESFByMPOnz/P+PHjOXHiBJUrV+aff/7Bzc3tqx4OClkYsKF3NR4FRbPpkj/eD4PxD43j3ZBARkpCobolbOjynf17Zw3kJnmiZSAuLg5DQ0M2bNjwxemBIyMjuX//Pr6+vpQvXx5bW1sKFChAeHg4hQsX5pdffuGPP/5Q/yNNSEhAV1f3o+WGh4dTsWJFrK2tOXPmzCedk5MFBASwZs0ajI2N6dmzp8YiJu968uQJnTp1olmzZsTFxbFgwQIMDQ3p2LEjixYt4vbt27i4pB2tKwhC7nf9+nXGjx/PwYMHcXFxYerUqbRs2TLTWghjE5LxC40lMVmFjpacIpaG6WYWzM3yxN2m5hj4mjEDjRo1Ii4ujmfPnmFpaUmZMmXo3LkzDx8+JCkpiREjRiCTyXj8+DHFixf/pC91SZLo0aMHkZGReHt7f9OBQFJSEhs2bGDevHk8fPgQOzs7mjdv/t5gwM7OjsDAQKZPn45CoWDEiBGMGDGCuLg4vL298fLywsXF5bOTNQmC8O26c+cOEydOZOfOnZQoUYKtW7fStm3bTP8MMNTVorSdaaZeI6fLE5+yX5uKeMCAASiVSnbt2kV0dDQzZ87EwsKCSZMmMXPmTPr06YOtrS2enp706NEDLy+vTyp37ty57N27l/Xr11OkSJEvqltOIZfLiY+Pp0ePHly4cIEXL17g45N2Ko9SqWTVqlWUKFGCly9fYmpqipeXF1OnTsXU1BQjIyPKlCnD48eP1eUKgpC7PXr0iM6dO1O2bFmuX7/O2rVr8fX1pX379uIzIIvkiXc5dSGHL2kZiIuL4/Xr13Tq1AkHBwcAOnTowMSJEylYsCAJCQno6OggSRIWFhZIkkSxYsU+Wu7Zs2dxd3fn999/p3nz5p9dr5xGoVDQsWNHhgwZQsWKFSlTpgx79+7l7du3QEoryN69eylbtiw///wz1atXZ8+ePeTLl4/z58+ry9HX1+fatWufNDpYEIRv2/Pnz/n5558pVaoUp06dYunSpTx48IDu3buL8UJZTcoDFi1aJGlra0sqleqLzm/fvr1Ur1496e3bt+ptMTExkqWlpVS2bFmpWLFikr+/vyRJkhQVFfXR8oKDgyU7OzvJ1dVVSkpK+qI65VRKpVKSJEmaN2+eZGdnJz158kQ6c+aMVLNmTQmQ6tWrJ12+fFl9/Pjx46UCBQpIS5YskUJDQyUvLy+pZMmS0unTp7PrFgRByGSvXr2SBgwYIGlra0s2NjbSvHnzND5fhayXJ4KBsWPHSoUKFfrs81KDhy1btkgODg7Sxo0bpeTkZEmSJGnu3LmSQqGQnj17JhUoUECaM2fOJ5WZnJwsNWzYULK2tpZevXr12XXK6VLfs/DwcAmQKlWqJAFS+fLlpcOHD6v3JyYmSpIkSfHx8dKoUaMkFxcXqUCBApKBgYE0depUKSEhIdvuQRCEzBEcHCz99ttvkp6enmRubi7NmDFDio6Ozu5qCZIk5Yl2mMDAwC/qIkgdudqhQwdOnz5Njx49CA4OpmvXrsyZM4euXbtSpEgRSpcurZE570M8PDw4duwYR44cwc7O7rPrlNPJZDKePXvGlClTAHjw4AFr1qyhW7duyOVywsPDWbx4Mdra2owaNQpdXV2mT59Ov379ePbsGXXr1s3mOxAEIaOFh4czd+5c5s+fj1wuZ9SoUQwbNgxT07w9aC9Hye5oJCs0a9ZMatmy5VeXM2vWLEmhUEguLi6SXC6Xtm/fLm3btk3S1dXVaPp+n6NHj0oymUyaPHnyV9clJwoNDZVGjBgh6erqStbW1lKHDh0ka2tr6cmTJ1JSUpIUGBgoJSQkSA0aNJDq1q2b67pIBEHQFBUVJXl4eEhmZmaSvr6+NGrUKCkkJCS7qyWkI08EAxUrVpT69u2bIWVdvHhR0tbWlkxNTSU9PT2pUqVK0vz58z963suXLyVra2vJzc1N3a+eW8TGxkozZsyQTE1NJSMjI2nSpElSVFSUFB4eLslkMqlp06aSg4OD5ObmJr19+1Z69OiR6AYQhFwsNjZWmjNnjmRlZSXp6OhIgwcPlgICArK7WsIHiG6Cz3Tnzh2SkpJYtWoVxYoVw8LCgsKFC3/wnKSkJDp06ICOjg4bN27MNVNlkpOTWbNmDZMmTeLNmzf069ePcePGYW5uzpIlS9RphiMiIujfvz99+vRBT0+P4sVzZ25vQcjrEhISWLlyJdOmTePNmzf06tWLcePGfTQLq5D9cn0woFKpCAoKypBUxMnJyUyfPp2ffvqJn3766ZPPGzduHBcuXODUqVNYW1t/dT2ymyRJ7Nq1izFjxvDgwQM6duzI1KlT1VMvExMTCQoK4ocffsDb2ztX3LMgCO+XlJTE+vXrmTJlCi9fvqRLly5MmDBB/ZkgfAOyu2kiswUFBUmAtGvXrq8ua8OGDRIgXb9+/ZPP2bNnjwR88myDnO7kyZNStWrVJEByc3P7rPdCEITcJTk5Wdq4caNUvHhxCZDatWsn3b17N7urJXyB3NFe/QFfm30wlVKpZNq0aTRv3pwKFSp80jnPnj2je/fu/PDDDwwfPvyrrp/dbt++TbNmzahTpw5KpZJjx45x+PDhT34vBEHIPSRJYseOHZQtW5YuXbrg7OzMzZs32bZtG6VKlcru6glfINcHA1+TffBdO3bs4P79+4wbN+6Tjk9ISKBdu3aYm5uzdu3ab3YJXj8/P7p160b58uV5+PAh27dv5/Lly9SvXz+7qyYIQhaTJImDBw9SqVIl2rRpQ8GCBbl06RJ79uyhXLly2V094Svk+mAgtWXA1tb2i8tQqVR4eHjQsGFDqlWr9knn/Pbbb9y+fRtPT0/MzMy++NrZJSQkhGHDhuHk5MSRI0dYvHgxd+/epW3btt9sYCMIwpc7ceIENWvWpFmzZhgZGXHq1CkOHz5M1apVs7tqQgbI9QMIAwMDMTc3R09P74vL2LdvHz4+PixatOiTjt+2bRuLFy9m6dKlVKpU6Yuvmx1iY2OZN28ef/zxBwDjx49n6NCh7119UBCE3O38+fOMGzcOb29vqlSpwuHDh2nYsKF4KMhlcn3LQEBAwFd1EUiShIeHB7Vq1aJWrVofPf7Bgwf8/PPPdOzYkV9++eWLr5vVkpKSWLp0KcWLF2fq1Kn07t2bp0+fMm7cOBEICEIedO3aNZo2bUrNmjUJDQ1lz549XLp0CTc3NxEI5EJ5omXga4KBw4cPc/XqVY4cOfLRY+Pi4tT9aMuXL/8m/sNIkoSnpydjx47lyZMndOnShSlTpnzzSyoLgvBl7ty5w4QJE9i1axdOTk5s27aNNm3a5Jr8KEL6cv1fNzAw8ItnEkiSxNSpU6lWrRoNGjT46PEDBgzgyZMneHl5fRNP0ydOnKBq1aq0b9+eEiVKcPPmTdavXy8CAUHIgx4+fEinTp0oW7YsN2/eZO3atdy5c4d27dqJQCAPyPV/4a/pJjh58iTnz59n/PjxH33KX716NWvXrmXZsmWULl36i66XVW7cuEGjRo2oX78+CoWCkydPcuDAAcqWLZvdVRMEIYv5+fnRu3dvnJ2dOXPmDEuXLuX+/ft0794dLa1c33gs/F+uDwa+pmXAw8ODChUq0LRp0w8ed/v2bQYMGMDPP/9Mt27dvuhaWeHp06d06tSJihUr8vz5c3bs2MGFCxeoXbt2dldNEIQs9vr1awYMGECJEiXYv38/c+fO5dGjR/zyyy/o6Ohkd/WELJarw764uDiioqK+qGXg/PnznDhxgh07dnywVSAqKoo2bdrg5OTEwoULv6a6mSY4OJipU6fy999/Y21tzfLly+nZs6eI+gUhDwoODmbWrFksWbIEfX19pk6dysCBAzE0NMzuqgnZKFd/G6TmGPiSYMDDw4PSpUvz448/vvcYSZL4+eefCQwM5Nq1a+jr639pVTNFdHQ0c+fOZe7cuSgUCqZMmcLgwYMxMDDI7qoJgpDFwsPDmTNnDgsWLEAul+Pu7s7QoUMxNTXN7qoJOUCeCAY+t5vg6tWrHDp0iM2bN39w4MzixYvx9PTEy8sLR0fHr6prRkpMTGT58uVMmTKFqKgoBg0ahLu7O5aWltldNUEQslh0dDQLFixgzpw5JCUlMXjwYEaMGCE+DwRN2bkwQmbz8vKSACkkJOSzzvvhhx8kR0dHKTk5+b3HXLp0SdLW1paGDBnylbXMOEqlUtq8ebNUrFgxSS6XSz179pSeP3+e3dUSBCEbxMbGSrNnz5YsLS0lHR0daciQIVJgYGB2V0vIoXJ9y4C2tjYWFhaffM7t27fZs2cPa9asQaFQpHtMWFgY7dq1o2LFiupMfdlJkiSOHj2Ku7s7N27coGXLluzduzfHz2oQBOHLxMXFsWHDBu7fv0+jRo1o2LCh+vMqISGBFStWMG3aNEJCQujduzdjx46lUKFC2VxrISfL1bMJUhMOfU7yn2nTplGkSBE6d+6c7n6VSkX37t2Jjo5m+/bt2T7q9sqVKzRo0IBGjRqhr6/PmTNn2LNnjwgEBCGX8vPzo2bNmsyfP5+goCBatWrF6NGjef36NStXrsTR0ZEhQ4bQqFEjHjx4wLJly0QgIHxUrm4Z+NwcA/fv38fT05OlS5eira2d7jGzZ89m//79HDhwAHt7+4yq6md79OgRY8eOxdPTE2dnZ/bs2UOLFi2+iayHgiB8uVmzZmFoaIi3tzdmZmasWLECDw8PVq5cSXh4OO3atWPy5MmULFkyu6sqfENydTDwuTkGpk+fjp2dHT169Eh3/+nTpxk7diyjR4/+aO6BzBIYGMiUKVNYsWIF+fLlY/Xq1XTr1u29XRqCIOQeSUlJ+Pn5Ua5cOUxMTPDy8uLPP//E398fHR0dbt68KZYSFr5Iru4m+JyWgSdPnrB582Z+//13dHV10+wPCgqiQ4cOfP/990yZMiWjq/pRUVFRjB8/HgcHB7Zu3cqMGTN4+PAhPXv2FIGAIHzjQkNDmT9/PjNmzCAkJOS9x8XExJCYmEhAQACVK1embdu2FC5cmHXr1qnLgZRxRILwOXJ9y8CnBgMzZ87E0tKSPn36pNmnVCrp1KkTKpWKLVu2ZGmynoSEBJYuXYqHhwexsbEMGTKEUaNGYW5unmV1EAQhc6hUKnbt2sX06dN59uwZ8fHxNG3aFCsrqzTHSpLE9evXuX79OhEREVSvXp3Tp0/j6upKeHg4lSpVYvv27dSrVw9JkkSXofBZcm3LgEqlIigo6JO6Cfz9/Vm3bh0jRoxIN3HQ5MmTOXnyJFu2bPni1MafS6lUsmHDBpycnPjtt99o1aoVjx8/ZubMmSIQEIRcQiaTER8fT8uWLbly5QoymYxLly6lebI/d+4cdevWpUGDBhgbG1OsWDFmzZqFq6srAHp6elSsWJEHDx4AiIWFhM+Wa//FhISEoFQqP6ll4I8//sDY2Jj+/fun2Xf48GE8PDyYMmUKdevWzYyqapAkiYMHD1KxYkW6detGxYoVuXPnDitWrKBAgQKZfn1BELKOTCajZcuWjB49GgcHB+rUqcPevXuJjo4GUhKgNWnShO+//56IiAj27NnDqVOnMDAw0FhWXV9fn0ePHuHs7ExycnJ23Y7wDcu1wcCnpiIOCAhg5cqVDBs2LM2ywy9fvqRLly40btyY0aNHZ1pdU126dIm6devSrFkzzMzMOH/+PDt37qRUqVKZfm1BELKHsbGxevZSjx49OH36NMeOHaN169ZUqVIFPz8/tm3bxtWrV2nZsiVFixalZcuWbNmyhS1btqBSqbh//z6PHz+mYsWKYs0R4ctkZ8ajzHT48GEJkPz8/D543PDhwyVTU1MpIiJCY3tiYqJUo0YNqVChQp+dwfBz3bt3T2rdurUESC4uLtKBAwcklUqVqdcUBCHnefDggSSTySSZTCYVLVpUWrdunUYm1NTPhcjISGngwIGSvb29VKVKFcnIyEjq0KGDFBYWll1VF75xuTYYWLt2rQRIb9++fe8xwcHBkoGBgTR+/Pg0+3777TdJS0tLOn/+fKbV8eXLl1KfPn0khUIh2dvbp/mPLwhC3vDs2TOpe/fuklwul3R1daWyZctKoaGh6v2xsbHS8uXLpXnz5qm3JSYmSjdu3JAWLlwo+fj4ZEOthdwk1wYDM2fOlMzNzT94zOjRoyUjI6M0T/67du2SAI3/eBkpPDxccnd3l/T19SVLS0vpzz///GDQIghC7vTy5Uupf//+kra2tmRraystWLBAWr9+vWRqaio9ePBAkiRJCgsLk5KSkqTGjRtLFStWlBISErK51kJulGuDgSFDhkilSpV67/7Q0FDJ2NhY+v333zW2P3nyRDI1NZVat26d4U31b9++lWbPni2Zm5tL+vr60tixY9N0TwiCkPsFBQVJw4YNk3R1dSULCwtp1qxZUkxMjCRJKZ8TWlpaUuvWraUKFSpIDRo0kGJiYqSbN29KL1++zOaaC7lVrh1p8rEcA3/99RfJyckMHz5cvS0+Pp42bdpgZWXF6tWrM2yebuo0wQkTJvD69Wv69OnDhAkTsmyaoiAIOUNYWBhz5sxh4cKFKBQKRo8ezbBhwzAxMSE5OZmlS5eycuVKlEoljx8/pkmTJvTv3x9DQ0ORWVDIVLkqGHj8+DGHDh3C1taW+/fvU6hQIaKjozE2NtY4Lioqivnz59O3b19sbW3V24cNG8bdu3e5ePEipqamX10fSZLYt28fY8aMwdfXl7Zt2+Lh4UGJEiW+umxBEL4dUVFRLFiwgDlz5pCcnMzgwYMZMWIElpaW6mMkSeLly5fUrl2b3bt3i8WFhKyV3U0TGWny5MkSkObH1NRUWrFihbRx40YpKSlJmjFjhqSjo6PR5LZp0yYJkJYvX54hdTl79qxUs2ZNCZDq1q0rXb58OUPKFQTh2xEbGyv98ccfkqWlpaSrqysNHTpUCgwMzO5qCUIauSoYuHPnTrrBgIWFhVShQgUJkAoWLCgZGRlJP//8s/q8u3fvSoaGhlKXLl2+epyAr6+v1LJlSwmQypcvL/3zzz9imqAg5DHx8fHSwoULJVtbW0lLS0vq16+f9OLFi+yuliC8V64KBiRJkipVqiTJ5XKNYGDz5s1S1apV0wQJbdq0kd68eSM5OztLzs7O6gE8X8Lf31/q2bOnJJfLpaJFi0qbNm2SlEplBt6ZIAg5XWJiorR8+XKpUKFCklwul3r06CE9ffo0u6slCB+V6zIQ/vLLL6hUKiAlP3f9+vXp0KFDuiv7eXl54ejoyLNnz/Dy8sLQ0PCzrxcWFsbvv/+Oo6Mj+/fvZ/78+dy/f59OnTqJ/OCCkEcolUo2btxIqVKl6Nu3LzVr1uTu3busWbOGokWLZnf1BOGjct23Vfv27dHR0QFAoVDw999/I5PJ3puiMyIiAiMjI5KSkj7rOnFxccyaNQsHBweWLFmCu7s7T548YdCgQerrC4KQu6lUKry8vHBxcaFr166UKVOGW7dusWXLFpycnLK7eoLwyXJdMGBiYkKNGjUAGDVqFA4ODsCHV/EKCwujSpUqnD59+qPlJycns3LlShwdHRk3bhxdunThyZMnTJo0Kc2sBUEQcidJkti/fz+VKlWibdu22Nvbc/nyZXbv3k3ZsmWzu3qC8NlyXTAAMGHCBCpXrsy4cePU24KDgwHSLEYEKdG9qamperGQ9EiSxK5du3BxcaFPnz7Url2b+/fv89dff2lMTxQEIfeSJIljx45RvXp1WrRogYmJCadPn+aff/6hSpUq2V09QfhiuSoYiE1Ixvd1JGYO5Vm75xjJ/DtOwMDAABsbGzZs2KBxTr58+fjrr7/w9/enbNmyjB07Vr3iYarTp09To0YNWrduTaFChbh27RqbN29WtzoIgpD7nT17lrp169KwYUMkSeLo0aOcPHkSV1fX7K6aIHy1bz7p0KOgaDZd8sf7QTD+YXFI7+yTAfYWBtR1smHz/hM42hozatQoACwsLJg+fTo9evRAV1cXSBl8uHz5cl69esXatWvx8fFh9OjRHDhwgEqVKnH06FEaNGiQ9TcpCEK2uXr1KuPHj+eff/6hXLly7Nu3j2bNmmVYhlJByAlkkiRJHz8s53kRFseYXT6ceRyCQi5DqXr/baTudy1uxYBqlpzYu50RI0ZoDPTbu3cvP/zwAwAymYzmzZuzf/9+ihUrxvTp02nTpo2YHSAIeYiPjw/jx49nz549lCxZkilTpvDTTz+JzwEhV/omg4GtV/yZuNeXZJX0wSDgvxRyGVpyGZNblqZDFXv19sDAQJydnYmIiCD17dDR0WHevHn06dPng2MJBEHIXR48eMCkSZPYtm0bRYsWZdKkSXTq1Cnd6cmCkFvkqBB30qRJyGQyQkJC3nvMIu9HuO/0ISFZ9VmBAIBSJZGQrMJ9pw+LvB8BKQOCunbtqhEIACQmJuLi4iICAUHII549e0bPnj1xdnbm7Nmz/P3339y/f5+uXbuKQEDI9b6pMQNbr/gz58jDDClrzpGHWBvpcmnLfI4dO6axTyaTIUkSEydO5MSJExlyPUEQcqaXL18ybdo0Vq5ciaWlJfPmzaNv377o6elld9UEIct8M8HAi7A4Ju71zdAyJ+z1pWJUIhYWFtjb22NmZoaBgQF6enro6enx/fffZ+j1BEHIOYKDg5k5cyZLlizB0NCQadOmMWDAgC/KRCoI37pvJhgYs8uH5M/sFviYZJWEVvWuhK5clKHlCoKQc4WFhTFnzhwWLFiAlpYWY8aMYejQoZiYmGR31QQh2+TIYCAkJIRff/2Vf/75B21tbZq3bsdpMzdkWimj/2NuHyXmjjdJIc9RJcSibZYf40otMK7YVKOchIBHRJxeT2LgE6SkeOSG5ujZu2DVbCiQMobg9KNgxk6dye6tG3jy5Ammpqb8+OOPzJw5E3Nz86y+dUEQMklUVBTz589n7ty5JCcnM2TIEEaMGIGFhUV2V00Qsl2ODAbatWtHkSJFmDFjBhcvXmT9ymUYlXmIZfPhAETfOIi2VWEMHKuBXM7bx5cJO7IEJBXGlZoDoIyNIHjbeOQGpph81wa5niHJkcG8fXBe41rhhxcz0+c4vXv1ZPDgwTx79oxFixZx48YNzp07JwYQCsI3LjY2lsWLFzNr1ixiY2P59ddfcXd3x8bGJrurJgg5Ro4MBooWLcqePXsAGDBgAMefRBNwYQ/GVVuhY1MU204zkWvrqo83qdSCoG0TiLqyWx0MJLy6hyo+Bpv2U9HN76g+1rxWV/Xv8S98ib55mJKdxrJ8uYd6e926dWncuDELFiygTJkyNG7cOLNvWRCEDJaQkMDy5cuZNm0aoaGh9OnTh7Fjx1KgQIHsrpog5Dg5amphqgEDBqh/j0lIRlYm5cv47ZOrABqBgCo+FmVcJHr2ZUiOCEQVH5tyjG7KIKC3jy8jKZPTvU7c/bPIdA2JtXLm+atAQkJCeP36Nf7+/igUCkaOHEnz5s3VSyILgpDzJSUlsWLFChwdHRk6dChNmjTh4cOHLFmyRAQCgvAeObJlwNHx3yf556GxaJnlB5mc5MggAOJf3iXyzCYSXt9HSkrQOFeVEItczxBdexcMnGoQeW4LUVf3oFfIBYMS32HoXAeZVkrTf1L4a6SEWF4s7EyRhenXRV9fX2QcE4RvgFKpZPPmzUyaNImnT5/SoUMHJk2aJJYSFoRPkCODgXclJqvgnRzgSeEBBG0Zi7ZlQczr/YyWiRUotHn75ArRV/bA/xMHyWQyrFuNIeHVfeIeXyb+2XVCDy4g6vIu8nWbi1xHHyQJuYEZVi1HEHZkKclhr9JcX6lUMnToUKysrNL9sbS0FOMKBCEbqVQqduzYwcSJE7l37x4//vgju3btEksJC8JnyJHBwKNHjyhatCgAOlpyksNfg6RCy9SWt48vgzIJm5/Go2X67wCg+Oe30y1Lt0BJdAuUhNrdiPU9Sci+OcTeO41xuUZomecn3u8mugVKMWjocP6eOZ64uDiN8+Pj4zl69CihoaGEhISgVCrTXMPU1PS9gUJ62y0sLERGM0H4SpIksX//fsaPH8+tW7do3Lgx69atE0sJC8IXyJHBwOLFi3FzcwOgiKUh0df2A6BfrBLxL9ImHlLFxxLro5lFUBkfg1zXUGNlMW3bYim/JCcBYFjye2KuHyDy/FaW+hwh/j+BAICZmRm+vinXVKlUREVFERIS8sGfx48fc/HiRUJCQggLC+O/yz/IZDLMzc3f29qQXjBhZmb2zXdXvH37lmXLlrFz504eP35MmzZtmDJlykencL5+/Zrnz59jYGBA4cKFMTMzy5oKCzmSJEkcO3aMcePGcfnyZWrXrs2ZM2dEkjBB+Ao5Mhh49uwZLVu2pHHjxly4cIHo6wcwcK6Njm0xZFo6hCu0CPaagnH5xqiS4om5eRi5gSnKmDB1GbE+x1POK1EdLfP8SAlxRN86gkzXAD2HygDo2btgVL4xURc837scqZWVFUlJSWhrayOXyzEzM8PMzIzixYt/0r0olUrCw8PVLQvv+7l7967694iIiDTlyOXy97Y0vC+QMDExyVHLrMbHxxMbG0uHDh1Ys2YNvr6+aQKlVJIkIZPJOHv2LDNnzuTatWskJSVRrVo1Zs6ciYuLSxbXXsgJzpw5w7hx4zh9+jTVqlXj6NGj1K9fP0f9OxeEb1GOWrVw0qRJTJ48mbt37zJhwgQOHz6MlpYWxWs04U3ptkjylL75uEeXiDi9geTw18gNzTGu0ASFgSmhBxdQoN8qtMxsSQx8QuTlnSS8vIsyNgK5riG6+R0xde2Mbr5/v8gVchnOkVd4dtKTu3fvpvvlZGRkhKurK3Xr1qVevXqUL18+U5v5k5KSCAsL0wgWPhZMREdHpylHS0vrk4OH1B8DA4NM/WCNj49HT0+PTp06ER0dzdatW9+b/jU8PJzmzZujr6/P+vXr0dbWpmnTptjZ2bFp0yaMjIwyrZ7C54lNSMYvNJbEZBU6WnKKWBpiqJtxzxpXrlxh/PjxHD58mHLlyuHh4UGzZs1EECAIGSRHBQPv8ygomobzT2da+ceG1aK4jTFv3ryhRYsWXLlyBZVKhY6ODkePHuXcuXN4e3tz9uxZ3r59i5mZGbVq1VIHB2XKlMn2JvyEhIT3Bgzv2/7f8REAenp6HxzvkN7P5yzoolQqUSgUNGvWDCMjI9auXYu+vr7GMSqVCrlczqpVq1iwYAHLli2jRo0aAOqBYvPnz6dBgwZf96YJX+VRUDSbLvnj/SAY/7A43v0gkQH2FgbUdbKhczV7HG2NP1rezJkz2blzp0ayr9u3bzNhwgT27NlDqVKlmDJlCq1bt872/2+CkNvkyG6C/3K0Nca1uBXnn4Z+9rLFH6KQy6hRzJLiNikfVNbW1pw8eZKuXbvi5eVFjRo1qFWrFrVq1WL06NEkJCRw+fJlvL298fb2xt3dnYSEBCwtLalTpw5169albt26lCpVKsufWHR1dbGzs8POzu6Tz4mLi/toi8ObN2+4f/+++vfExMQ05RgaGn7y4EkzMzNsbW2JjIwkf/786X6op8anN2/exN7ennz58qn3lS5dmsjISHVXSmp3gpB1XoTFMWaXD2ceh6CQy9L9PykBz8Pi2HDpOWsv+OFa3IrprVwoZGGQbpknT55kzJgxSJLEmjVrqFWrFpMmTWLbtm04ODiwYcMGOnbsKAbeCkIm+SZaBiDlA6jBvFMkJGdcAiBdLTnHhtVO8wGlUqlYtGgR5cqVo3bt2u89/+3bt1y8eJETJ07g7e3NpUuXSE5OxtbWVh0Y1K1bl+LFi+eKLyxJkoiNjf3oAMr/tkokJ6dN+iSXyzE2NqZEiRJYW1trBAzm5ubY2NiwcOFC9PT0mDdvHo6OjmhpaeHv70+lSpVYtmwZP/30Uza8C3nb1iv+TNzrS7JK+qzAXCGXoSWXMbllaTpUsdfYFxISQunSpQkJCUGlUqGvr098fDwFCxZkwoQJdO/eXUzfFYRM9s0EA5DyQeS+0yfDypvV2oX2//lg+hqxsbHqLoUTJ05w9epVVCoVBQoUoF69eurgoEiRIhl2zZxOkiSNGRhBQUGEh4fz22+/4eTkRMmSJdMdH5HeP0tzc3NMTU3x9/enatWqlCpV6oPdF7lhBkZOssj7EXOOPPzqcka4lWBg3ZTEYpIk0aJFC/755x+Nabs//fQTmzZtQldX933FCIKQgb6pYAAy7gNppJsTA+p+2oyALxUVFcWZM2fU3Qo3btxAkiSKFCmiHm9Qt27dPJUiNXU8QP78+Rk2bBgjR45M02qiVCqJiIhg8ODBPH78mOHDh6tbJK5evcqePXuoWbMm8fHx6gAiPDw8zbXkcjkWFhafNYAyK2ZgrF27lp49e/Ls2bNvJjDMrEB82rRpjBs3Ls1+S0tLnj9//t7BpYIgZKxvYszAuwbWdcTKSPermiqntCydoS0C72NiYkKzZs1o1qwZkLKO+unTp9XBwZo1a4CU9MvvdivY2tpmet2yQ2JiIi9evMDW1pbExES0tLSIjY1FT08PLS0tTp48yZs3b2jZsiWWlpZ07dqVDh06UKRIEapVqwZAt27dqFGjBl5eXhpLzyYnJ6dpYUhvEOXt27fV26KiotLU8b8zMD5lIKWhoWGu6AZ6nxdhcUzcmza/x9eYsNcXZ0utdAMBgNDQUPbv30/79u2/+Bp3795l+/bt9OjR45sJugQhu3xzLQOpPmUQU6rU/R8bxJTV3rx5w8mTJ9XBwf379wFwdnZWBwZ16tTB0tIym2uaMW7cuIGrqytv375VD/yzsLCgTZs2LF26lO7du3PmzBlu376NkZERKpWKpk2bkpSUROfOnXnx4gWzZ89m8+bNtGzZ8qvrk5iY+NEBlP8NKGJjY9OUo6ur+8nJo1LHRGhpaaGrq/tNBBFdV13KlMG71YtZUPjpPiwtLTE1NUWhUKClpYVCoUBXV5cmTZqkmWnyOby8vGjbti3e3t7UqVMnw+ouCLnRNxsMpFJPb3oYjH+o5vQmkChsaUjdEjZ0+c5ePWsgpwoICFAHBt7e3jx58gSAcuXKqYODWrVqfdMZ+KKiooiOjiYhIUGdjMnU1JRq1apx5swZXr58SYcOHdRfkiEhIYwdO5ZTp05hYWGBu7t7hgQCX+rt27efFUCEhISQkJCQphwDA4PP6r6wtLRER0cny+83q6b1ZobMCgZiY2NF94WQ63zzwcC7UhOf3HvwiE4d2mGoiuPV86cYGOSMloDP9eLFC/VgRG9vb/z9/ZHL5VSsWFEdHHz//fcYG3/eh6lKpeLYsWNcvXoVExMTvv/+e8qWLSsG22WC9GZg7Nq1i+XLlzNw4ECSk5MJCQnhwYMHPHnyRN1qkh4tLS0KFSqkESR4e3ujra2Nu7t7umtgaGn92xMYERHBpEmT2LFjB8HBwRQqVIg+ffowcuRI9d/ez8+PokWLMnv2bExMTHCfOJXwN4HoWBfFolF/dPOX0KhTUugLIs5sIv75baSkeBQm1hg41cS8djf1MYmBTwg/vZ6El3dBktC1K4FZrW4YFCpF12qFmdSytDrh2H/vPb3xFUWKFKFMmTK4u7szfPhwbt++jZ2dHZMmTaJbt24a5/3Xu4HBoUOHmD59OtevX0cul1OrVi3++OMPSpcurT6+R48eeHl5cevWLQYNGsSZM2eoX78+u3fv/rR/AILwjchVwUCq0aNHM3PmTACGDh3KvHnzsrlGX0+SJJ49e6YRHAQEBKBQKKhatao6OKhRo8ZHg5+YmBhmzZrFvXv32L9/P0WLFuXw4cPY22f+OAoh7Rfc2rVr6dWrF6VLl6Zjx46Ymppy+fJloqKicHd3JyQkhO7du1O0aFEaNGigMQYiNU2zUqlEpUo77TZ1DQxzc3Pu379PQkIC5cuXx87OjsDAQC5evEibNm2YOnUqVlZWREZG4uDgQIUKFYiOjkZZoh7hb5OIurgDmZYOBfqtRKZICTASg58RuGkUMrkWRuUboWVqS3J4AG+fXsOu96KUY948J3D9b8h1DTCq0BSZQouYG4dIjgkjX+eZlHCpwKkRdT87GNDT0yMiIoLevXtjZ2fH6tWruXHjBj4+PpQuXZqnT5+yYMECFi5cyJgxYyhVqhQADRs2xNbWlg0bNtC9e3caNWpEs2bNiIuLY+nSpURERHDjxg31tXr06MHWrVspWLAg33//PdWrV8fAwICuXbtm0r8OQcgeuS4YUKlU2Nvb8+pVynLEMpmM06dP57pFTCRJ4uHDh+rgIHXwnY6ODt999506OPjuu+/STM+SJInnz59TuHBh2rRpg1KpZP369ZiYmLz3eiqViuPHj3P58mVKlSpFnTp1NAbwCZ/u3S84c3NzChUqhLOzMydPntTI5vhuQqUiRYpQp04d1q5dq1FW6lPuiRMniIiIeG9XxbFjx7h9+zYuLi7qlor0ZmDIZDIkSUKhUFCpWg2CXH8HmYy4R5d4s2Mq1m0mYFC8KgCBm9xJDHqCXe/FGiuIvlvv4B0evH16Fbs+y9A2S0kelRwTxuvlv6Bj60D+zjO5M6kRs2d4aAQDDx8+ZOfOnchkMtzd3dMEA8+fP+f06dO4uroCKeNvChUqxMCBA5kzZw7w/m6CmJgYChUqRNu2bVm+fLl6e1BQEE5OTrRr1069vUePHqxbtw53d3dmzJjx6X9kQfjGfHOzCT7m/Pnz6kAAUqaXde3aFV9f32+2uyA9MpkMJycnnJyc6NevH5Ik4evrqx5vsHDhQiZPnoyenh41atRQT2OsUqUK2tra6g/WBw8e4Obm9tGBWkOGDMHb2xsLCwtWr15NuXLlWLhwIQULFsyCu829jh49SnR0NO7u7mnSOn/O4MLUaZQWFhaUKFEizf5y5crRsGFDNmzYoN6WnJzMuXPnaNOmDePGjaNixYrcv3+fMWPGUKZMGQqWrEDQ/+ugWyil6Tw5IhAAZVwkCS/uYFy5pUYg8G69JZWSeL8bGDhWVwcCAFpGFhg61ybm1hGUCXH4hf47KHPVqlWsXLmSixcvArx3NoGzs7M6EICU7KFOTk48ffr0o+/V0aNHiYiIoGPHjoSEhKi3KxQKqlWrhre3d5pz+vfv/9FyBeFbluuCgU2bNqGlpaXOeqdUKvHz82P8+PHMnTs3m2uXeWQyGWXKlKFMmTIMGjQIlUrFrVu31MHBH3/8wbhx4zA0NOT777+nTp061K9fn2fPnuHk5JRuhrfUJ7z169fj6enJzJkz6dGjB69fv6ZixYqsWrWKiRMnZsPd5h6pg0TLlCmTIeUFBgZqvDY1NUVfX59Hjx5x+/ZtrK2t0z3PwsKCVq1a4efnx5gxY+jYsSNuHfvSaul5ABR6KYtCqeJjgH+DAm3rwu+tiyouCikpAW2LtHk0tC0LgaQiOeoN5y9dUU+z/fnnnzXGrpiamqZbdnpdWubm5um2dvzXo0ePAKhXr166+//bQqalpaUOepVKJZs3b2bLli08efKEGjVqMG3atI+mAU9NqJRX0iln9sJVQsbLdX8dLy+vNOlvtbW1iYyMzKYaZQ+5XE6FChWoUKECw4cPJzk5mevXr6uDAw8PD0aPHg3AmjVriI2NpW7dupQrV079YZz6hLdlyxbq169Pjx49ALCzs6Nnz56cOHGCoUOHvvcDW8g472slSF34KVX+/Pk19q9Zs4YePXqgUqlo2LAhv//+e7rl/Lc1QaFQoKOVzoDSTOhVXLb4L/z9/dWv3x378M8//wAwe/ZsnJ2dyZ8/PwkJCSQmJpKYmJhmhsWn9Hqmlr9hwwaNdS9SvTvoElKmjqb+n0hKSuLNmzdUr14dmUzGyZMnSUpK+uD13rx5w+LFi1myZAmxsbH8+OOPTJ8+ncKF3x9IfYsyeuEqIWvlumBg4sSJREdHo6Ojw4gRI9i5cyc//PBDnh8pr6WlRdWqValatSojR45EqVSyatUqBg0ahCRJjB07lvj4eCwsLKhdu7ZGAqQHDx7w22+/qctSqVQ4ODiwcuVKEQh8JQcHBwDu3LlD8eLvz4hpbm6uXpzpXc+fP6dYsWLq10ePHtXYnzoy3sHBgZiYmM9a6bGIpSEyIL2vV63/N/snvXn+3vPlBibItHVJCnuVZl9S2EuQydE2scZj1BBGBDzm7t27aY5LXRhrz549rFixQv3FGxgYiK6uLtbW1uoFuh48eICuri7Lli3Dzs5O3WXwbppj+Pc9t7Gx+eyVL/X09Ojfvz/6+vpMmTKFV69efXSa4dSpU/Hy8mL16tXky5ePIUOGMHjwYDw9PbNlumhGy4yFq4Ssl+uCgYEDBwIp88FHjBhBVFRUng8E/kuSJLS1tUlKSqJgwYLs2rULCwsLLl26pJ6p8Ntvv5GUlIS5uTkJCQncuXOHBw8eUKJECWQyGaGhoeoPstQUw8Lnc3Nzw9jYmBkzZtC4ceP3DiB0cHDgzJkzGk/D+/fv58WLFxrBwPu+3Nq1a8ekSZM4fPgwjRo10tgXERGBkZFRmidiQ10t7C0MeB6WdqlrhYEpuoXKEHP7KCZVfkx3AKFMrkCvSAXiHl0kOSIILbOUzJrK2HBi755Ct6AzhfNZ0tSt/nvfn9RWj7Nnz2Jvb09YWBjlypWjYMGC/PLLL7x+/Vr9ExsbS1hYGAMHDtQIABo2bEi+fPnUQYOVlRW6uroMGjSIP/74A3t7e+zs7LC2tkYul/PmzZv3dqcA6gG5oaGhGBgYpHnf4N//EydOnOD06dNMmDCB5s2bAzB48GA8PDw4duwYTZs2/aZX3nx34Srgo4mpUveffxpKg3mn0l24SsgeuS4YSKWvr4+trS1+fn7ZXZUcRZIkoqOjMTMz49atWzg6OmJiYoKenh61atWidu3aTJ48mbi4OM6fP8/SpUs5fPgwy5cvVz9x1apVi+fPn1OwYMFv+oMsJzAxMWHevHn8/PPPVKlShU6dOmFubs6tW7eIi4tj3bp1QEpfupeXF40bN6Zdu3Y8efKEjRs3qp9yP2bkyJHs3buX5s2b06NHDypVqkRsbCw+Pj54eXnh5+eHlZVVmvPqOtmw4dLzdD/kLRr0JXDTKALWDv13amFkMG+fXMGu118AmNXqSrzfTQI3/Y5xhWYglxNz8x+k5CQs6/WkXklbms+axahRo9Kt97tPznK5HCsrK7S1tbG2tqZXr14ax6bOGDh+/Dhv3rzh9u3bNGnShMKFC1OuXDmioqKIj4/n1q1b6Onp8fDhQ3788Uf1+TKZDC0tLczNzalRowZ2dnbcvn2b5ORkDh8+rA4mTExM1EGDmZlZusFAanfFtWvXMDY2pkqVKup9lStXRiaT8fDhQ5o2bfqev1jO9zXrxCj/n0refacPITEJ6oWrhOyTa4MBSJmCJIIBTUFBQTRv3pyEhAR8fX1xcXHhwIEDVKlShWLFinHlyhVevnxJnTp1aNCgASqVivv37zNr1iwUCgXe3t78888/+PikLFqTOuWtfv361K1bl0KFCmXzHX57evfujY2NDTNnzmTq1Kloa2tTsmRJhg0bpj6mUaNGzJ07lz///JOhQ4dSuXJl9u/fr9F98yEGBgacOnWK6dOn4+npqZ5KWqJECSZPnpxud09CQgLKh6dQqtLv29axLUa+rnOIOLORmOsHkZRJKExsMCz57zReHevC5Os8i/BT64i86AmSCp38Tli1+A3t/E4pmUFb/k6FChVo0aKFRrZGAwMDnj17BkDTpk1p1qwZbm5uHx0XoFAoyJcvH/ny5ePvv/9mxowZ7Nu3D6VSqTHN8Pjx40ydOpVr166RmJiIqakp+fPnp0iRIsTHx3P27FkePHhAQkICjRs3Vpcvl8tRqVSYmJhgamrKqFGj1K0L+fPnx87ODltbWywsLPD398fQ0FAj0DI2NiY+Pv6jQfT7ppPmBFuv+GfIgnEAc448xNpIN0vWixHeL9flGXhXhw4dCAoKSneqUF6lUqm4cuUKFy5cwN/fn4sXL3Lr1i2+//57Dhw4gLu7O5s3b+bs2bMUK1aM5ORkSpQoQcuWLZk/fz4Aw4YN4/jx43Tp0kWdQvnWrVtASnP2u8s1pzdAS8jZlEolmzZtYsKECbx48YJyQ1cSqWuDMgM/KRRyGTWKWbKhdzX1ths3buDm5kZYWBgqlYqTJ09SsmRJjh07xpEjRzh69CgBAQHo6uri6uqKm5sbDRs2zPTsmQkJCQQGBqq7I1asWMHhw4cxNzfH0NAQExMTAgIC0sxk0NfXR0tLCx0dHb7//nuKFSuGnZ0d+vr6TJgwgd9//50BAwZgZGSU7nUzOhhYsmQJBgYG6oHAX+pFWBwN5p0iITltkqsvpasl59iw2tkyhiAuLo4//viDOnXq5Ok1LHJ1MODu7s62bdvUTxfC+yUnJ6OlpcW1a9e4du0avXv3VvfX7t69m3HjxuHg4IC5uTl79uzhzz//pFu3bupjQkJCOHXqlHq2QupgsJIlS6qXa65Tp066TdFCziBJEgcOHGDMmDH4+PjQunVrpk2bhqGNfZZ9+D979owGDRoQHBysMS4ltX53795VBwanTp0iLi4Oa2trGjZsqP7J7CXBJ0yYwNSpUylWrBgdOnRgypQpKBQK3r59S0BAAK9fv+bVq1cEBASwYcMGAgMDKVq0KCEhIbx+/Zro6GiN8oyNjdVdEO/+TJ8+nUqVKrF48WLy58//VYs2Qcr0VSsrK06ePPlV5WTWwlX/DQ6zSkhICNbW1kycOJFJkyZl+fVzilzfTfDixQv1F53wfqnvT6VKlf7X3n2HNXW9cQD/JgHC3ktAhoAiwz1BZMhQsRTUuvegap11ISqIIjjrqtv+BFFb694oKE4UF04coICKiEyFMJOc3x+UqzGIoGDQnM/z5Glzc3Lve5NI3px7znvQtm1bkce8vb2hpKSEEydO4N27dzh48KBYBq2trY0+ffqgT58+ACpGe1euyBgTE4ONGzcCAOzs7JheAycnJ2hoaNT/yVGfFRcXh9mzZ+PSpUtwdnbG1atXmWWjASDY2wb+B+7V2fEWettU+SvQzMwMCQkJeP36tdhIexaLBRsbG9jY2GDatGkoLS1FXFwcoqOjcfr0afz9998ghMDa2ppJDJycnD75y/tLlJeXM0tf83g8qKiogM/ng8PhQEFBATweDywWCz4+PuByuTA0NMS0adOwbds2WFlZVZz7woXYsWMHFi1aBEII0+OQkZGBFy9eID4+Hunp6SguLkZUVBQzLkRdXb3KpOHDm76+vljF0bqUlFmAi8nZn29YSwIhwcXkbCS/Kfjqhav4fD6EQqHEZ2o0lDhqjPzAoqKiCACSmpoq6VCk3osXL0hkZCQZOXIkMTU1JQAIi8Uibdq0IdOnTyfHjh0jb9++lXSYUuf+/fvE29ubACAtW7YkJ0+eJEKhsMq2684+ISb+x7769ufZpHo5l6ysLLJnzx4yZswYYmxsTAAQWVlZ4uTkREJCQsi1a9cIn8//qmPcvXuXyMnJEVTMliNsNpuwWCwiLy9PJk+eTEaPHk0sLS1JXl4eKS8vJ0FBQURWVpaw2WxiYGBA+vXrR+Tk5MiyZctIeXk5IYQQoVBIFi1aRAwNDYmCggJxdnYm9+7dI40bNyY+Pj4kJiaGrFixggAgjo6OpG/fvsTe3p6YmpqKxFJ509bWJi1atCDdu3cno0aNIvPmzSOamppi7ZycnJjzysvLI1OmTCFGRkZETk6OmJubkyVLlhCBQMC0SUlJIQCIpusoouk+jsio6RGWDJfIm7YmhhO2E+PZR4ma42DCUdEiLBk5omDRkRhN+Vvkveeo6hIF8/ZEt/9CIqtrRsCRJbJajYmObwBpEnCcBB2+/0UxLV++nKxatYo0adKEsNlskpCQQEpLS8n8+fNJmzZtiKqqKlFUVCRdunQhZ8+eFXv+x7egoCBCCCFOTk4ir1Ol4cOHExMTkxrFQQghDx8+JH369CEaGhqEy+WStm3bksOHD3/FJ7Hu/dCXCR4/fgwrKyucO3cOTk5Okg6H+kBqaipzSeHs2bNIT0+vqIffti0z5sDBwYEuFVtPXrx4gaCgIERERMDExAQhISEYMGDAZ6+9fziVrDbdxBw2CzJsFhZ623yTgWKEECQlJTG9BrGxsSgoKICGhga6devGjDeoLMtdG7NmzcLy5cthaWkJTU1NWFhYID09nfk74+7uDn9/f4wePRoRERHw9PRESkoKkpOTIRQKYWVlhRs3bjCf7fnz5yMkJAQ9e/ZEz549cevWLURFRaGsrAxeXl7MmIEuXbqgpKQEN27cEDnPMWPGYM+ePdi1axdyc3NFehoq/z89PV1sISt1dXWYmZlBT08P165dQ3FxMZydnWFmZoa0tDScOHECkyZNwpo1awC8X9FSVrcJIORDuYUHhCUFeBu/H3J65pA3aYnS5/eg2Lwr+HmvUHDzGJTsukHbaypzzJcbRoElIwshLx/KrXuAo6iOwnsxKM9+Dt1+wbBq54DzM1xQVFSEzp07Iz09Hb/++iuMjY0RFxeHyMhITJ48mRm/VBmTtbU1SkpK4OfnBy6Xi969e0NRUREtWrTAwIEDYWlpiYKCAvz111949uwZrl27hlatWoHH4yEyMhLjx4+Hr68vevfuDQBo0aIFWrRowfSAfnxpZcSIETh37hwzQL26OAoKCuDg4ABDQ0MMHz4cSkpK+Pfff3Hx4kXs378fvr6+tf4M1gvJ5iL1q6ioiAAg4eHhkg6FqoZQKCRPnjwhmzdvJgMGDCC6urrMrzoHBwcyb948cvbsWVJcXCzpUGuksKSc3E/PJ7fScsn99HxSWFIu6ZAY2dnZZPr06YTL5RJdXV2ybt06UlpaWqt9PM/hkSHbrhIT/2OkScDxansBKh8fsu0qeZ7Dq6ez+ryysjJy6dIlEhgYSDp37kzYbDYBQCwsLMiECRPIwYMHSX5+fo32FRQURAAQb29vke0TJkwgAMidO3fI7du3CQAyZswYkTZTp04lAJhfp2/evCFycnLEy8tLpEcmICCAACDDhw9ntm3evJkAIA8fPhQ5L21tbZF2VREIBKRZs2akbdu25Pjx42Tr1q0kODiY/Prrr6RZs2aEzWYTHR0d5nX58Kanp0fat29PvLx9K3pDFNVI46l7mPdYtfMvFf9edc2I8azDzHZFaycCjgwxnnFQpGcAANHxDWC2NZ72L+EoaxI5PXNi6n+MFJaUk0WLFhElJSXy5MkTkfPw9/cnHA6HPH/+nBDy/he5qqoqefPmjUhbPp8v9tnOy8sjenp6ZNSoUcy2rKwskd6AD9W2Z6CqOLp160bs7OxISUkJs00oFBJ7e3tiaWlZ7fv2Lf3QF9IVFBSgr69PBxA2cCwWC5aWlrC0tISfnx8IIXj48CHTc7BhwwaEhISAy+Wic+fOzJiDjh07NpjrcQ29FCuPx8Pq1auxbNkyCIVCBAQEYNq0aVBRqX0sjTUVETm64/tzfvIGz3OqOGctRbg01a2YPviV14G/lqysLBwcHODg4IDg4GDk5+cjNjYW0dHROHXqFDZs2MAsVFQ53qBDhw5VrtlR6bfffhO5P2nSJGzYsAEnTpxgpj/+/vvvIm1mz56N1atX4/jx43BxcUFMTAzKysowadIkkamGU6dORWhoqMhz+/XrhylTpmDXrl1YtGgRAODUqVPIzs7GkCFDqj1/NpsNGRkZKCsri9U2aNmyJTw8PBAZGQk+n4/s7Gy8fv0aV65cQWBgIDp37gxtbW2k5pUAABStuoAt/77HjtuoGQBAycYFLDbng+1NUZR4HvzCHJGFqjjKmlBo2vl9bFxFKNm64t3VfeAX5iE1h4e9e/fC0dERGhoaIotJubm5YcmSJbhw4QIGDx7MbO/Tp49YoSgOh8MMcBYKhcjPz4dQKES7du1w69atal+vL/VxHLm5uTh79iwWLlyIgoICkcGjnp6eCAoKQnp6er0Peq2JHzoZAGitge8Ri8WCtbU1rK2t8dtvv0EoFOLevXtMcvDHH38gKCgIioqKcHBwYJKDdu3affOBog29FGt5eTn++usvBAcHIycnB+PHj8fcuXOhq6v7+Sd/hqWeChZ422ABbL67hWnU1dXh6+vLdNGmpKQgOjoa0dHRWLNmDYKDg6GqqgoXFxe4u7vDw8MDFhYWIl/YlpaihXLMzc3BZrOZvzdsNlusxLS+vj7U1dWRllZRxrnyvx/vS0dHR2xwrbq6On766Sfs3r2bSQZ27doFQ0NDZtGlwsJCFBYWMs/hcDjVVlME8NlFrLp27Ypp06bh+OU7iNm/EzKqou3Y3IrPsYyq9kfbKxKGysWtKsloGIjVWJDVqFjoif82E2V84WdjevPmjch9MzOzKttFRERg5cqVePTokcgaEp9q/7U+3m9ycjIIIZg/fz7mz59f5XPevHlDk4FvgSYD3z82m42WLVuiZcuWmDp1KgQCARISEpjkIDQ0FAEBAVBRUYGjoyOTHLRq1apeV4lryKVYhUIh9u3bh3nz5iE5ORmDBw/GwoUL6+2PoBJXBjYG3+86FWZmZvDz84Ofnx8EAgFu3rzJjDeYOnUq+Hw+TExM4O7uXuUaEUDVi0nVdXXOYcOGYe/evYiLi4OdnR2OHDmCCRMmMGM9VqxYgeDgYKa9iYnJZ//+1XQRK1mZ/86F9YlxJZ/aXsthaXIy7FovrFXVtMudO3dixIgR8PHxwcyZM6GrqwsOh4OwsDBmtdDPYbFYVRa5+ni9i0/FUTlOY8aMGWJlwCtVtybJtyQVycCVK1ckHcY3sWDBAgQHByMrK6va+fySqmxWOcimciW9L8XhcNCuXTu0a9cOM2fORHl5OW7evMmsqxAYGIji4mKoq6uLLLpka2tbZ8VpGnIp1piYGPj7++PmzZvo2bMn9u3bhxYtWtTpMepL5We4qj/A3wqHw2EW9Zo7dy4KCwtx/vx5pr7Bw4cPAVR08/7yyy9wd3eHvb09nj17BqFQCFNTUxBCIBRW/MJt3rw5s+/MzEzk5+czKxZW/jcpKUlkjYmsrKwql2Pu3r07dHR0sGvXLnTs2BFFRUUYOnQo8/iwYcPQpcv7CpAffjl9KjGp6SJWRup105PFz3slVsa8PO8VAEBGTQ+mWkpftLDWx/bt24cmTZrgwIEDIsf6eNn16hI2DQ0NZsGrD1X26HxO5XsqKyv7VefyLfzwq8uYmpri5cuXYssaUz8OWVlZdOrUCQEBAYiOjkZeXh4uXLiAadOmIT8/H7NmzULLli2hp6eHvn37YsOGDXj48OEXf+HUdSnWPdeff75hDdy8eZO53i0rK4vz58/j+PHjTCJQVFSEBQsWfHXRma/VUOKoKWVlZXh5eWHNmjVITExkykQXFRVhy5YtcHFxgYaGBvPLz9LSEj169AAAZtR7pT/++AMA4OXlBaDiGrisrCzWrVsn8nn8+HmVZGRkMHDgQPz7778IDw+HnZ2dSKLXpEkTuLm5MTcHBwfmMSUlpSp7Nfr164crV67g1KlTYo/l5+czfzsV6+iyj6AwF8VP3v9AE5YWgXf/LGR1m6CJiSGUuDI1jqk6lb2CH76u8fHxYj8OFRUVmf1+zNzcHI8ePUJWVhaz7c6dO7h8+fJnjw9UrIzp7OyMzZs3IyMjQ+zxD/craVLRMyAQCPDy5csvmkZEfX8qy9U6OjoyvQRXrlxhpjFOmTIFfD4f+vr6cHZ2Ziokmpubf7Zb90VuEYKOPKjTeAOPPIC9ufYXjyFISkrCvHnz8O+//6J58+Y4ePAgfv75Z7FzKSoqYrqQJVl2tbo45s2bB39/fwlEVXOqqqoAAE1NTZiYmMDW1hanTp1CQkIC2Gw2+vbtCwMDA5ibm2PLli14/fo1PD09ce3aNURERMDHxwcuLi4AKsYGzJgxA2FhYejVqxd69uyJhIQEnDx58pO9e8OGDcPatWsRGxuLpUuX1jjutm3bYuPGjQgJCYGFhQV0dXXh6upa60Ws2F955UNG0xA5J9agNOMJOEoaKLwbDQEvHzq9psKlacVYli9dWOtDvXr1woEDB+Dr6wsvLy+kpKRg06ZNsLa2FhlXoaCgAGtra+zZswdNmzaFpqYmbG1tYWtri1GjRuGPP/6Ap6cnRo8ejTdv3mDTpk2wsbFhik99zvr169GlSxfY2dlh7NixaNKkCTIzM3HlyhW8fPmSKeUuaT98MlB5jTQ1NZUmA1JKQUEBrq6ucHV1xaJFi1BYWIjLly8zYw7+/fdfCIVCGBkZMZcUXF1dmS7cDwUcvMeMEagrfCFBwMF7tS7FmpGRgYULF2Lbtm3Q19fHX3/9hWHDhn3zQZR1WWlNRkbmu6kWumfPHgQGBmL9+vWQkZHBxIkTERwcjBs3bjCzFADgyJEjOHr0KJSVlTFgwACmGmelkJAQyMvLY9OmTYiNjUXHjh1x+vRppveAEIK4uDhcv34dqqqq6NSpE2xsbPDw4UOREfWfExgYiLS0NCxbtgwFBQVwcnKCq6trrRex+tqPv6yGAVTcf0Xe2f+hPDcdMup60P55FrimbTCkU8UYmi9ZWOtjI0aMwOvXr7F582acOnUK1tbW2LlzJ/bu3SvWK7Vt2zZMmjQJ06ZNQ1lZGYKCgmBra4vmzZtjx44dCAwMxO+//w5ra2tERkZi9+7dNe7Zsra2xo0bNxAcHIzw8HDk5ORAV1cXrVu3RmBgYG1fvvojoSmN30xxcTEBQLZv3y7pUOpd5fznhw8fkl9++YWoqKgQTU1NMnnyZJE5+iYmJmLzkp8+fUr69u1LNDQ0iIKCAunYsSM5duyY2DEyMzPJqFGjiK6uLuFyuaRFixZV1nHIy8sjw4cPJ6qqqkRNTY0MGzaMJCQk1Oq9uHXrFunevTtRUVEhSkpKxNXVlVy5coV5/MyZM4TFYpH58+eLPG/Xrl0EANmwYQMhhJCuXbuSFi1aVHmMpk2bEldXV3L06FHy+++/Ezs7O5HqchYWFiQkJIQAIEtWbxSZQ28wdiNRbGZP2PLKBBxZIqdvQXT6zBdpo9WzYl653pBlRKX9z4StoEpYslyiYNmJGE3eJdI2KfNdlTGePn2aODg4EDU1NaKkpEQsLCyIvb09UVRUJBoaGiQsLIz4+/tLvNJaXVR8q/wMf6i8vJwsXLiQNGnShMjJyRETExMyZ84ckXnbhFR8rr28vMjFixdJ+/btCZfLJWZmZiQiIqLK1/VbeP36Ndm5cycZNmwYadSoEQFAuFwucXNzI8uWLSMJCQkiFfWqUlJSQkJDQ0mvXr2Iuro60dXVJVZWVsTV1fUbnYWoIduufra+xKdulRUIq6pHMWTbVYmcD1Xhhx8zIC8vj0aNGknVjIJ+/fqhpKQEYWFh6NmzJ9auXQs/P79Pts/MzIS9vT1OnTqFCRMmYPHixSgpKYG3tzcOHjzItKusUBYZGYnBgwdj+fLlUFNTw4gRI5gqZUDFL5mff/4ZkZGRGDJkCEJCQvDy5UsMHz68xufw4MEDODo64s6dO5g1axbmz5+PlJQUODs7Iz4+HgDg6uqKCRMmICwsjJk3nJGRgUmTJsHNzQ3jxo0DAAwdOhR3797F/fv3RY5x/fp1PHnyBCNGjECvXr2wfPlyKCsrg8PhoEePHnB0dERGRgbmzZsHAFi1+zg4/3WRlmWlIWPHDJTnvIRqp77QdB0Nlqw8svaHoOhxnNj55EVvRvmbFKh1GQiV1j1RnHwNuac3MY9z2CzsvCo+duDBgwfMktPz589H9+7d8fLlS1y9ehVTpkzBs2fPMGbMGERERMDZ2RlLly7FggULkJWVBU9PT9y+fRtARXd05S9SX19fREZGIjIykqm4Vlvbt2/HunXr4Ofnh5UrV0JTUxPv3r3Dtm3b6jyOMWPGIDAwEG3atMGqVavg5OSEsLAwDBgwQKxtcnIy+vbtC3d3d6xcuRIaGhoYMWIEHjyo20s7NaWnp4fBgwcjIiIC6enpuH//PsLCwiArK4sFCxagdevW0NfXx+DBgxEeHo709HSxfcjJyTHjBIYMGQJ9fX08evQIw4YNq/bYT548wYkTJ+q8zkqorx1kvvZawUdk2CyE+trV6T6pWpJ0NvItdO7cmQwbNkzSYdS7mlRGI0S8Z6CyKtrFixeZbQUFBcTMzIyYmpoyv1xWr15NAJCdO3cy7crKykjnzp2JsrIyefeu4pftoUOHCACybNkyph2fzyeOjo417hnw8fEhcnJy5OnTp8y2V69eERUVFdK1a1dmG4/HIxYWFsTGxoaUlJQQLy8voqqqStLS0pg2+fn5RF5ensyePVvkGJMnTyZKSkqksLCQEELI/v37CQCyevVqpo1AICBdunQhAIiR12/MLxl5k5ZEVsdUpLqa8eyjhGvYnMhoGIj1DMibtiLGs48y21Xa/0zAYotUcuu6/Cz52KpVqwgAsmbNGtK4cWPC4XDIr7/+StLT00Ve24ZQaa0u4vi4Z+BTlfxmzJghUsmPkIrPNQBy4cIFZtubN28Il8sl06dPFzuWpJWUlJCzZ8+SOXPmkLZt2xIWi0UAEGtrazJlyhRy7NgxUlBQwLS/d+8ead68OVFXVyf6+vrVVuTcuHEj6dixIzExMSEqKipkyJAhYu/X1/j7Wlqd9gz8cy3t8wel6tUP3zMASF+tgaoqowHAiRMnqmx/4sQJdOjQQWRKkrKyMvz8/JCamsosR3zixAno6+tj4MCBTDtZWVlMnjyZmX5V2U5GRgbjx49n2nE4HCaOzxEIBDh9+jR8fHxEpls1atQIgwYNwqVLl5jBO4qKiggPD8fDhw/RtWtXHD9+HKtWrYKx8fv5+2pqavj555+ZVe0qj7Fnzx74+PgwNeKjoqIgKyuLsWPHMs9ls9nM6PFiUlGNTlBcgJK0u1C06gJhWREERW8hKHoLYfE7yJu1AT/vFfgFoiu7KbfqLjKgT97IBiBC8N+9L57yPKcIvNL3o6QJIcy0pilTpqBjx45ITEzEpk2bYGBgIPLaVl6vFwqFyM3NBZ/P/6aV1uorjsrP7MeV/KZPnw4AOH78uMh2a2trODo6Mvd1dHTQrFmzKqeHSRqXy4WLiwtCQ0Nx48YNvHnzBnv27EHnzp1x8OBB9OrVC5qamnB2dsaiRYuwZs0aPHz4ELKysti9ezfk5eVF9lf52Y6JicHixYvRpUsX3L17Fzdu3MD58+exYcOGOot9QHtjzPBo+vmGNTDTo9k3Wa+Cqt73MVLnK5mamtZ4KsiP4HOV0T6WlpYmslxtpcr50WlpabC1tUVaWhosLS3F5up/2K7yv40aNRJbOrZZs2Yi94uLi/H27VuRbfr6+sjKykJRUZFY+8pjCYVCvHjxAjY2NgAABwcHjB8/HuvXr4enpydGjRol9rxhw4Zhz549uHjxIrp27YqYmBhkZmaKzNGujLtyqlGlj4uC8PNeASB4e3En3l7cKXYsABDy3gIq70c7i1Vtk694bSqrswlLeCD8Mtx4+AzN9FVx8+ZNhIaGIi4uDmpqanj79i3OnTuHwMBA9O7dG3379hV5HyRdaa2+4khLS6tRJb9KHyaBlTQ0NKqcs9/QaGtro1+/fujXrx+z0FJlbYPly5czpWwtLCyQnJwMMzOzKgdFb9++Hba2tli8eDG4XC5UVVXRp08fXLx4EVlZWZ+tSFhTE10soa3MrdXCVUYT/gfg2y9cRX2e1CQDL1++RHl5ebW1xn9UdV0Fra7s2bMHI0eOFNlGvmDuf2lpKTOy9+nTpygqKhL7Qvf09ISenh527tyJrl27YufOndDX1/+yQiD/xajaoTfkm7SpsomMRiPRDZ+pzpYbswW8+2fg/Of7h1q3bo1Tp06hW7duOHfuHI4fP46oqCjs2bMHrq6uOH36NDgcToOotAbUTcW36uKriU9VnPySz5UksVgsNG3aFE2bNsVvv/0GPp+Pf/75B8OHD0dhYSHGjRsHoVAICwsLZgVGFxcXyMvL4+bNmxgxYoTI7I42bdpg165dX7QWRXUGtDeGg7n2Z0tyV6p83L6J1jcryU3VjNQkA0KhEC9fvqy3X0oNSVJSksh5Vi6d+qmplSYmJnj8+LHY9kePHjGPV/737t27EAqFIr9Kq2p35swZFBYWivQOfHwMT09PREdHix1XR0cHioqKn4yJzWajcePGzLagoCA8fPgQK1aswOzZs+Hv74+1a9eKPI/D4WDQoEEIDw/H0qVLcejQIYwdO1bky8PExASxsbFiyURycrLIvmQqF13hcKBg2kosxi+h2qkPlGxdkBv1J3QUWJg4cSL8/f2Z17lbt27o1q0b/vjjD4SGhmLu3LmIjY2Fm5tbg6i0BtRNxbePmZiY1KiS34+MEAJZWVkIhULo6enh6NGjUFNTq3KhJTs7O2RkZKCsrAwCgYCZpsnj8VBeXg55eXmx6n9f63tcuIoSJzVjBgBIzbiB9evXi9xft24dADBV0T7Ws2dPXLt2TaQyF4/Hw5YtW2Bqagpra2um3evXr7Fnzx6mHZ/Px7p166CsrAwnJyemHZ/PF5lPLRAImDgqNWrUSKRaWuWvdA6HAw8PDxw+fFjkPcvMzMTu3bvRpUsXpvBLfHw8VqxYgalTp2L69OmYOXMm/vzzT2b8woeGDh2KvLw8/PrrrygsLBRb6c3T0xPl5eXYunUrs00oFIq9nhwldXCN7VCYEAV+Ya7YcQRFb8W2fY6ctjHkTVpiRUgQ0tLSEBAQADabjdxc8f23atUKQEWPCNAwKq3VVRwfq1xh73OV/H5UhBDm8sCtW7fQtGlTqKurQ11dHT4+PtiwYQOSk5Px7NkzbNiwAYqKiuDxeAgKCoKWlhZ8fHywdu1axMXF1XviVLlw1fkZLri/wBPHJ3XBwfH2OD6pC+4v8MT5GS5Y4G1DE4EGSip6Bir/EUhLMpCSkgJvb290794dV65cwc6dOzFo0CC0bNmyyvb+/v74+++/0aNHD0yePBmampqIiIhASkoK9u/fz/w69fPzw+bNmzFixAjcvHkTpqam2LdvHy5fvozVq1czXZA//fQTHBwc4O/vj9TUVFhbW+PAgQNi4wOqExISgujoaHTp0gUTJkyAjIwMNm/ejNLSUixbtgwAUFJSguHDh8PS0hKLFy8GAAQHB+Po0aMYOXIk7t27xwwOBCq63W1tbbF37140b94cbdqIdvH7+PigQ4cOmD59OpKTk2FlZYUjR44wX8haylyU/tdW02M8MnfOQsZfE6Hc0gMy6voQ8PJR9uoR+O+yYTD6T9SWiaYCpvw2TmTbwoULceHCBXh5ecHExARv3rzBhg0bYGRkxAz4bCiV1uoijo+1bNkSw4cPx5YtW5Cfnw8nJ6cqK/n9qLKysuDt7Y3y8nLcu3cPtra2uHTpElq3bg0DAwMkJiYiKysLbdu2hZ+fH4yNjTFz5kz4+fnh7du3iI6OxvTp08Hn86GiooKxY8fCzc0N7u7u0NTUrLe4v/eFq6SSZCYxfHsGBgYkMDBQ0mHUq8ppWYmJiaRv375ERUWFaGhokIkTJ9a46JC6ujqRl5cnHTp0+GTRoZEjRxJtbW0iJydH7OzsqpwqmJOTQ4YOHcoUHRo6dOgXFR3y9PQkysrKRFFRkbi4uJC4uDjm8WnTphEOh0Pi4+NFnnfjxg0iIyNDxo8fL7bPZcuWEQAkNDS0ymNmZWWRQYMGERUVFaKmpkZGjBhBLl++TACQPjOWixRbMRi3jSjZuhKOkgYBW4ZwVLSIgnl7ou0zR2xqof7wVSJTqfQGhlYUIxoYyhRdCTp8XyyeM2fOkJ9//pkYGBgQOTk5YmBgQAYOHEiePHnCtBEKhSQ0NJSYmJgQLpdLWrduTY4dOyY2LZAQQuLi4kjbtm2JnJyc2PS+nTt3MoV9WrVqRU6dOlVt0aGP1UUcnyo6FBwcTMzMzIisrCxp3LhxtUWHPvapaZPfA4FAQC5fvkzCwsLIuHHjSIsWLQiHwyHu7u6kvLyc+Pv7k8aNGzOfBx6PR4yNjUUKcS1ZsoQ0btyYeHt7k+bNmxMAhMVikXbt2pGAgAASGxsrNiWUkj4sQr6zkTVfyMHBARYWFoiIiJB0KJQErVmzBtOmTUNqamqVI8+rcujQIfj6+uLvI6fhH1dWb7HFTOtKu1CpGnn37h1UVVVx9uxZXL58Gf7+/szg6I0bN2Lz5s3o0aMHVFRUsGjRIsybNw+///47FBQU8PLlS0RHRzO37OxsKCoqwtnZmVnoytrausEOPKbqh9QkA4MHD8aLFy9w4cIFSYdCSQghBC1btoSWlhZiY2OrbFNcXCwyUl4gEMDDwwM3btzA69ev4bf7LuKe5dRoGlVNcdgs2DfRqvXaBBRVldLSUvz111/Yt28f+Hw+xo4diwEDBlQ5k0ooFOLOnTuIjo7G6dOncenSJZSWlsLAwADu7u7w8PCAm5sbdHV1JXAm1LckNcnA3LlzERkZiefP62a5WOr7wePxcOTIEcTGxmLr1q04fPgwvL29q2w7ZswYFBcXo3PnzigtLcWBAwcQFxeH0NBQzJkzBy9yi+C26jxK+cI6i48rw0bMNCc6zYqSuKKiIly6dImpb3D37l0AFWM3KqcwdunSpcqppdT3TWqSga1bt2LcuHEoLi6uk9XVqO9HamoqzMzMoK6uzqy98Cm7d+/GypUrkZycjJKSElhYWGD8+PGYOHEi0+af68/hf+BencW3tLcdLbxCNUivX79GTEwMc0khIyMD8vLy6NKlC5MctGjRQqwQGfX9kZpkIDo6Gh4eHnj69KlIiVuK+hJ/xiZhxeknX72fmR7N8JuLxecbUpSEEULw4MEDJjE4d+4ciouLoaOjw4w1cHd3h6GhoaRDpb6A1CQDSUlJaNq0Kc6cOQNXV1dJh0P9AP65/ryiFKtACEEt/hXRUqzUj6C0tBRxcXHMeINbt26BEAJra2smMXBychIrS041TFKTDJSWlkJBQQHbtm2rsnY9RdVWcXExFq/ehPAHpZBpbAcWCAg+PQK7shSro4U2LcVK/XCys7Nx9uxZZrzB8+fPISsrC3t7e+aSQps2bT5ZMpqSLKlJBgDAyMgIo0aNwsKFC0W2C4VCXL9+HWVlZSIrnlFUVfh8PsLDw7FgwQJkZmbCz88PQybMwKmnRbQUK0UBYgstxcbGoqCgAJqamujWrRvTc/CpEunUtyc1yQAhBI6OjmjSpAl27NjBbKus3x0WFoaYmBjs3bu3XitzUd8vQggOHjyIuXPn4tGjR+jfvz9CQkLEVtTjlfKRmsNDGV8IORk2TLWUoMSVimKfFFWl8vJyxMfHM+MN4uPjIRQKYWlpySQGLi4uUFNr+FULf9R/31KTDKxZswZRUVHg8Xg4d+6c2OjXFy9eoFu3bli5ciV++uknCUVJNVTnzp2Dv78/4uPj4e7ujrCwMLRt21bSYVHUdyk/P59ZaOn06dN4+vQpOBwOOnbsyCQHHTt2ZBZakjRmEabHb/A8t4qeP01FuDTTxeCOxrDU+z57/qQmGWjevDm0tbWRmpqKFy9eoLS0FAkJCTh//jzi4uJw+/ZtvHjxAsuXL8f06dMlHS7VQNy+fRtz5sxBVFQU2rVrhyVLlqBbt26SDouifigpKSlMYnDmzBnk5+dDVVUVLi4uzHgDCwuLb14V8UVuUa2XZ/5exwRJTTIQEBCADRs24O3bt9DX10dmZiZkZWVhbGwMGxsbtGvXDpaWlmjVqhWaNWsm6XApCXv27Bnmz5+P3bt3Mwsh9e3bl5Zopah6JhAIcOPGDeaSQlxcHPh8PkxMTJjEoFu3bvV+OZeZLSQktao4WjlbKNjbBgO+o9lCUpMMxMbGMlMKp02bBicnJ5iamkJXVxeqqqqQl5eno1wpvHnzBosWLcLmzZuhra2NoKAgjBo1qspSrhRF1b+CggKcP3+eSQ4ePnwIFouFdu3aMZcU7O3t67SYXF3VEZnh0RQTXSzrIKL6JzXJQHZ2NnR0dAAAp06dgoeHh4QjohqSgoICrFy5EitWrICMjAxmz56NKVOmQFHx++rqo6gfxYIFCxAcHIysrCxoa2sz26taaElJSQlOTk7MegrNmzf/4l48aa0wKjU1JLW1tdG4cWOwWCy8ePFC0uFQDURpaSnWrl0Lc3NzLFmyBOPHj8fTp08xZ84cmghQVANkZGSEkSNHYvfu3cjMzMStW7cQGBiI0tJS+Pv7w8bGBkZGRhgxYgR2796NN2/e1HjfL3KLEHTkwScf5z04h3fXD9cq3sAjD/Ait6hWz/lQYmIiFixYgNTU1C/eR01ITTIAANu3b4eBgUG9v6hUwycQCBAZGQkrKytMmzYNP/30E5KSkrB8+XJoaWlJOjyKomqAzWajdevWmDVrFmJiYpCbm4uoqCgMHDgQCQkJGDx4MPT09NCqVSvMmjUL0dHRKC4u/uT+Ag7eA7+a8QG8xPO1Tgb4QoKAg1/e05CYmIjg4OB6/95qGPM2vpEOHTpATU0NCQkJACqKDdEFNqQLIQQnT57EnDlzcPfuXfj4+OD48eOwtraWdGgURX0lRUVFeHp6wtPTE4DoQkuRkZFYvnw55OXl4ejoyIw3qFxoKSmzABeTs6vcr7CsBGw5+S+KSSAkuJicjeQ3BbDQVQGPx4OSktIXn2N9kapvwsTERCQnJ+PevfdZWmXhIaGw7pakpRqmq1evwtnZGV5eXlBXV0dcXBwOHjxIEwGKasDy8/MxYsQIqKurQ01NDSNHjkRRkWi3+86dO9G2bVsoKChAU1MTAwYMwIsXL6Cvr48hQ4YgIiICe/bsgbu7O+Tl5RETE4PZs2ejdevW0NfXx+DBgxGy5zw4bBayj63C85V9UZ6Xgcx/g/D8j1+QfXQFXu/yR/HT6xC8e4O0Jb2QtqQXXm6ovrR94d0YpC3phbIX9zFwxFjo6urCyMgIAJCWloYJEyagWbNmUFBQgJaWFn755ReRHoDw8HD88ssvAAAXFxewWCywWCycO3eOaXPy5Ek4OjpCSUkJKioq8PLywoMHn77U8SlS1TNgZ2cHd3d33LhxAwCYXgE6i+DH9vDhQwQEBODQoUOws7PD8ePH0aNHDzpNkKK+A/369YOZmRnCwsJw69YtbNu2Dbq6uli6dCkAYPHixZg/fz769euHMWPGICsrC+vWrUPXrl2RkJAAdXV1AMC+ffsgKyuLWbNmQUtLC1euXMGOHTugqamJx48fI0crB0SpYqAiEQrwZk8guEbW0HAZBZYsFxwlDeTFFkFQkA2NbmMBoMa9BdmnNqBIVQMhgYHg8XgAgOvXryMuLg4DBgyAkZERUlNTsXHjRjg7OyMxMRGKioro2rUrJk+ejLVr1yIgIADNmzcHAOa/kZGRGD58ODw9PbF06VIUFRVh48aN6NKlCxISEmpX7plImW3bthEWi0VKSkpIaWkpuXnzJtmyZQuZPXs2CQoKIhcvXiS5ubmSDpOqgRs3bpCRI0eSIUOGkF27dpGysjKRx58/f05GjRpF2Gw2MTU1JZGRkYTP50soWoqiaiMoKIgAIKNGjRLZ7uvrS7S0tAghhKSmphIOh0MWL14s0ubevXtERkZGZHtRUZHYMcLCwgiLxSKJT54SU/9jxMT/GFGy7UYAENVOfYnJf9sqbwrm7QlHVVds+6duWj2nEgCEa2RNTGYdJoUl5dXGc+XKFQKA7Nixg9m2d+9eAoDExsaKtC0oKCDq6upk7NixIttfv35N1NTUxLZ/jlRdJgAAU1NTEEIQHh4Ob29v9O/fH+vWrUNCQgJOnz4NZ2dnjBw5EomJiZIOlarG+fPn0bt3b7x79w46OjoYNmwY5syZg7dv3yI3NxczZ86EpaUljhw5glWrVuHRo0cYMmQI7QWiqO/MuHHjRO47OjoiJycH7969w4EDByAUCtGvXz9kZ2czN319fVhaWiI2NpZ5noKCAvP/PB4P2dnZsLe3ByEEMZeu4uNhgyqte9bZOSi39ATYHKTm8KqMp7y8HDk5ObCwsIC6ujpu3br12X1GR0cjPz8fAwcOFDn3yrLOH557TUjVZQIATLfJ1KlT0atXL8yfPx/NmjWDpqYmdHV1kZGRgdmzZzPdylTDNGfOHLi4uCA8PBwA0LJlS4SGhiIxMZGpWObv74/p06dDReX7rBVOURRgbCw6R19DQwMAkJeXh6SkJBBCYGlZdWGfD4uFPX/+HIGBgThy5Ajy8vJE2uXnvwXwwSJJbA44qtqoKUGh6P5YXEWwZbnMfRl1PQBAGf/92LTi4mKEhYVh+/btSE9PB/mg5M/bt28/e8ykpCQAYIrpfUxVVbXG8QNSmAxUjhPo1q0b9u7dK/a4mpoaxo8fj2HDhn3r0Kgays7ORnFxMdq1awegIqvOz89Heno6njx5gokTJ2Lu3LnQ19eXcKQURX2tT/XmEUIgFArBYrFw8uTJKtspKysDqJhK7O7ujtzcXMyePRtWVlZQUlJCeno6RowYAfZH/QIsjixYrJp3nL/8c6jIfa2eU6Hcwu39/mQqEgM5mff7nDRpErZv346pU6eic+fOUFNTA4vFwoABA2o0oL2yTWRkZJV/62q7yJPUJQNcLhcsFgtmZmafbHP16lXY2tqirKysTktcUtV7/fo1tm/fDiUlJYwaNYr5h/yxgoICcLlc8Hg87N27F3PnzkVSUhLc3d0RHR2NMWPG0ESAoqSAubk5CCEwMzND06ZNP9nu3r17ePLkCSIiIkR+6EVHRwMAtJW5YL2B2KWCmtIdECJyX1ZbvOIgC4Cp1vsphfv27cPw4cOxcuVKZltJSQny8/NFn/eJgc7m5uYVx9bVhZubW5VtakPqxgwYGBiAw+Hg1q1bzLTC0tJSvH37Frdv38bcuXOxZMkSDBs2jCYC30h5eTm2b98Od3d3BAcHY8WKFcjKyvpkezMzMxQWFmLlypXo168fzM3NkZCQgB07dsDOzo7p8aHTRSnqx9a7d29wOBwEBweLdLMDFT0HOTk5AN73LnzYhhCCNWvWAAC4shwY12CVQZacPEgpT2y7gmkrkZuMsvgiSsZailDivv/9zeFwxGJet24dBAKByLbKmgQfJwmenp5QVVVFaGgoysvLxY5X3d/QqkhdzwAAtG7dGjdu3IC9vT0cHR2Rm5uL+/fvIzk5GWpqavjzzz8xYsQISYcpNTgcDkpLSzF8+HC4ubmhXbt2uHPnTpW9N9evX8fcuXPx4MEDKCkpYePGjcwAo8LCQtja2uLp06cAQAtKUdQPztzcHCEhIZgzZw5SU1Ph4+MDFRUVpKSk4ODBg/Dz88OMGTNgZWUFc3NzzJgxA+np6VBVVcX+/ftFxg64NNNFZHxatceT07dA0cOLyD2zFdxGTcGSlYeiZcfPxslhs+DSVFdkW69evRAZGQk1NTVYW1vjypUriImJEauA2qpVK3A4HCxduhRv374Fl8uFq6srdHV1sXHjRgwdOhRt2rTBgAEDoKOjg+fPn+P48eNwcHDAn3/+WePXUiqTAU9PT6SkpMDBwQHnzp2DvLw82rdvD39/fzg5OTEDVKhvg81mo3///lBRUYGMjAxatmyJI0eOwMPDg1kfIDk5GfPmzcOePXvQrFkzrFq1Cn/99RfS09OZ/SgqKuLWrVsYPny4pE6FoqhvzN/fH02bNsWqVasQHBwMAGjcuDE8PDzg7e0NoGIg4dGjRzF58mSEhYVBXl4evr6+mDhxIlq2bAkAGNzRGOFXUqs9lkprL5RlPgPvbgwKrh8GR1W3RsmAQEgwpJPopYM1a9aAw+Fg165dKCkpgYODA2JiYpjqiZX09fWxadMmhIWFYfTo0RAIBIiNjYWuri4GDRoEAwMDLFmyBMuXL0dpaSkMDQ3h6OiIkSNH1vQlBCBFqxZ+6H//+x/GjBkDHo8nMr2DkqzK8tBr167FkiVLcPHiRSgpKWHhwoXYunUr9PT0EBQUhJEjR0JGRgbz589HeHg4U3DkwoULmDlzJjZv3gxnZ2dJnw5FUd+ZoX/FI+5ZDgTVrE9QWxw2C/ZNtBA5+vNJgyRJZTJw9uxZdOvWDUlJSbCwsGCuLdNuZckihIDFYuHdu3dQU1ND7969ERUVBTk5OcyZMweTJk2CgoICysvLISsri5KSEgQFBeHEiRN4+/YtsrOzMWvWLAQEBNDxHhRF1dqL3CK4rTqPUn7djTfiyrARM80JjWswJkGSpDIZePbsGczNzXH69Gm4u7tLOhzqAzweD1u2bMGsWbNACMGUKVMwb948aGhoIC8vD5s3bwaHw8HMmTMBVPQmpKWlISkpCW5ubjShoyjqq/xz/Tn8D3z5KoMfW9rbDv3bi88uaGik8i+nkZER2Gw2Xcq4AREIBIiIiIC1tTVmzpzJzLv97bffoKKigszMTCgpKeHMmTM4ceIE+Hw+gIreHDMzM3h4eNBEgKKorzagvTFmeHx6mmJtzPRo9l0kAoCUDiCUk5ODoaEhTQYaAEIIjh07hoCAANy/fx99+vTBqVOn0KhRI2hqamLSpEl48uQJmjRpgsOHD2PDhg1o3LhxrQtqUBRF1dREF0toK3MRdOQB+EJSqzEEHDYLMmwWFnrbfDeJACClPQNAxVx1mgxI1uXLl+Ho6Ahvb2/o6OggPj4ef//9N06dOgUHBwcQQpCXl4exY8fi33//hby8PCwtLSEv/2XrilMURdXUgPbGiJnmBPsmFVP9OOzqVzmtfNy+iRZipjl9V4kAIKU9A0DFGgXJycmSDkMq3b9/HwEBATh69ChatWqFqKgoeHh4gMVioaysDJmZmfjpp59w9uxZ6Orqfn6HFEVR9aCxpiIiR3dEUmYBdsU/R+yTN3ieUyRSqZCFioJCLk11MaSTMSx0v8+1UKRyACEABAUFYdu2bSLz1Kn6lZaWhqCgIOzYsQNmZmYICQlB//796bV+iqK+G7xSPlJzeCjjCyEnw4aplpJIZcHv1fd/Bl/I1NQUr169QmlpKbhc7uefQH2x7OxshIaGYv369VBXV8fatWvh5+dHp/9RFPXdUeLKwMZA7fMNvzNSnQwAFctafmr5S+rr8Hg8rFq1CsuXLwchBHPnzsXvv//+yQWIKIqiKMmQ+mQgNTWVJgN1rLy8HFu3bsXChQuRl5eHCRMmICAgADo6OpIOjaIoiqqC1F6spbUG6p5QKMQ///yD5s2bY+LEifDw8MDjx4+xatUqmghQFEU1YFKbDMjKysLIyAgpKSmSDuWHEB0djfbt22PgwIGwsrLC7du3sWPHDqYHhqIoimq4pDYZAGitgbpw/fp1uLm5wcPDA1wuFxcuXMCxY8fQokULSYdGURRF1ZBUJwOmpqY0GfhCT548wS+//IIOHTogIyMDhw4dYooIURRFUd8XmgzQZKBWXr16hV9//RXW1taIj4/H//73P9y9exc///wzWKzqK3RRFEVRDZPUziYAKpKBjIwMlJSU0BK3n5Gfn49ly5Zh9erVUFBQwNKlS/Hbb7/R142iKOoHIPXJAFBRa6Bp07pZpepHU1xcjPXr1yM0NBQlJSWYNm0aZs6cCXV1dUmHRlEURdURqb9MAIBeKqgCn8/H//73PzRt2hT+/v7o378/nj59isWLF9NEgKIo6gcj1cmAkZEROBwOTQY+QAjBoUOH0KJFC4wePRr29vZ4+PAhNm7ciEaNGkk6PIqiKKoeSHUyICMjAyMjI5oM/OfChQtwcHCAr68vDA0Ncf36dezZs4dWaKQoivrBSXUyAFRcKpD2wkN3796Fl5cXnJycUFZWhujoaERHR6Ndu3aSDo2iKIr6BqQ+GZDmwkMpKSkYOnQoWrVqhSdPnmDPnj24du0a3NzcJB0aRVEU9Q1JfTIgjbUGsrKyMGXKFDRr1gwxMTHYsGEDEhMT0a9fP7DZUv+RoCiKkjpSPbUQqEgGXr9+jeLiYigoKEg6nHpVUFCAP/74AytWrACbzcaCBQswZcoUKCkpSTo0iqIoSoJoMvBBrYFmzZpJNph6UlZWhs2bN2PRokV49+4dJk6ciDlz5kBLS0vSoVEURVENgNT3Cf/ItQaEQiF27doFKysrTJ06Fb169cKTJ0+wYsUKmghQFEVRDKlPBgwNDX+4WgOEEJw8eRJt2rTBkCFDYGdnh7t37+J///sfjI2NJR0eRVEU1cBIfTIgIyODxo0b/zDJQHx8PFxcXNCzZ0+oqKjg0qVLOHz4MGxsbCQdGkVRFNVASX0yAPwYMwoePXqEPn36oFOnTsjJycGxY8eYIkIURVEUVR2aDOD7rjXw8uVLjB07FjY2Nrh58yYiIiJw+/ZteHl50SWFKYqiqBqhyQC+zyqEubm5mDVrFiwtLXHw4EGsXLkSjx8/xrBhw8DhcCQdHkVRFPUdkfqphUBFMpCZmfld1BooKirCunXrsGTJEpSXl2PmzJmYMWMGVFVVJR0aRVEU9Z2iPQN4P70wLS1NsoFUg8/nY+vWrbC0tMS8efMwePBgPH36FAsXLqSJAEVRFPVVaDKAhl1rgBCC/fv3w9bWFn5+fnBycsKjR4/w559/Qk9PT9LhURRFUT8AmgwAMDAwgIyMTINLBmJjY9GpUyf07dsXpqamuHXrFnbv3g1zc3NJh0ZRFEX9QGgygIZXayAhIQHdu3eHq6srAODs2bOIiopC69atJRwZRVEU9SOiycB/GkKtgadPn2LQoEFo06YNUlJSsG/fPly9ehUuLi4SjYuiKIr6sdFk4D+SrDWQmZmJiRMnwsrKCufPn8eWLVvw4MED9OnTh9YKoCiKouodTQb+I4megXfv3iEwMBDm5ubYtWsXQkJCkJSUhLFjx0JGhs76pCiKor4N+o3zn29Za6C0tBQbN27E4sWLUVhYiMmTJ2P27NnQ1NSs1+NSFEVRVFVoz8B/vsX0QoFAgB07dqBZs2aYPn06fHx8kJSUhKVLl9JEgKIoipIY2jPwH1NTU7Bk5XHxfgpKlPQhJ8OGqZYSlLi1e4nS09PRqFEjsNnv8yxCCE6cOIE5c+bg3r176N27N6KiomBlZVXXp0FRFEVRtcYihBBJByFJSZkF2BX/HGcfv8HzXB6A9wP2WACMNRXh0kwXgzsaw1JPpdp93bhxA507d8asWbOwePFiAMCVK1cwe/ZsXLx4Ec7OzliyZAk6duxYj2dEURRFUbUjtcnAi9wiBBy8h4vJ2eCwWRAIP/0yVD7uaKGNUF87NNZUFGvD4/HQokULPHv2DFwuF1FRUVi9ejUOHz6Mli1bYsmSJfD09KSzAyiKoqgGRyqTgX+uP0fQkQfgC0m1ScDHOGwWZNgsBHvbYEB7Y5HH/Pz88Ndff0EoFILFYoEQAjMzM4SEhGDAgAEilw0oiqIoqiGRumTgz9gkrDj95Kv3M8OjKSa6WAIADh8+DB8fH5HHWSwW7t69C1tb268+FkVRFEXVJ6lKBv65/hz+B+7V2f6W9rZDB20BrK2tUVJSIvIYi8VC7969sW/fvjo7HkVRFEXVB6mZTfAitwhBRx7U6T4DjzxAk0e7xRIBoGIGwa1bt+r0eJL06tUrbNmyBT4+PmjVqpWkw6EoiqLqkNQkAwEH74Ffi/EBNcEXEqi7j8fZCaOgo6MDLpcrclNSUqrT40nSq1evEBwcDFNTU5oMUBRF/WDqPBkoKiqCoqL4aHtJSsoswMXk7Drfr0BIcCUlD4t8usJCt/pph1TVeDzeD5U0URRFfY9qPMR9wIABePHihcg2Z2dn2Nra4ubNm+jatSsUFRUREBAAAMjJycHQoUOhqqoKdXV1DB8+HHfu3AGLxUJ4eLjIfh49eoS+fftCU1MT8vLyaNeuHY4cOSLSJjw8HCwWC5cvX8bvv/8OHR0dKCkpwdfXF1lZWWLxnjx5Ek5OTlBRUYGtWSO8jpgG3oNzAID8i7uQtuxnCIreij0v5+Q6PF/VH4RfVu3rQfjlyL+4C+mbx8LKUAuNGzfGrFmzUFpaKtKOxWJh4sSJOHToEGxtbcHlcmFjY4OoqCixfaanp2P06NEwMDAAl8uFmZkZxo8fj7Ky97E8e/YMv/zyCzQ1NaGoqIhOnTrh+PHjVb5WH1dTPHfuHFgsFs6dO8dsq3wPExMT4eLiAkVFRRgaGmLZsmUiz2vfvj0AYOTIkWCxWGLvY3x8PLp37w41NTUoKirCyckJly9fFjn+ggULwGKxkJiYiEGDBkFDQwNdunSp9nWmKIqi6l+Nk4EzZ86ga9euyM/PF9mek5ODHj16oFWrVli9ejVcXFwgFArx008/4e+//8bw4cOxePFiZGRkYPjw4WL7ffDgATp16oSHDx/C398fK1euhJKSEnx8fHDw4EGx9pMmTcKdO3cQFBSE8ePH4+jRo5g4caJIm/DwcHh5eSE3Nxdz5syBsecYyOqaofjZTQCAkq0LIBSA9/CCyPOIoBxFjy9DsZk9WDJyn3wtCBHizf6FeHftABTMO6DJz5Pg4+ODVatWoX///mLtL126hAkTJmDAgAFYtmwZSkpK0KdPH+Tk5DBtXr16hQ4dOuCff/5B//79sXbtWgwdOhTnz59HUVERgIrVDe3t7XHq1ClMmDABixcvRklJCby9vat8rWoqLy8P3bt3R8uWLbFy5UpYWVlh9uzZOHnyJACgefPmWLhwIYCKKZSRkZGIjIxE165dAQBnz55F165d8e7dOwQFBSE0NBT5+flwdXXFtWvXxI73yy+/oKioCKGhoRg7duwXx01RFEXVEVJD9+7dIzIyMmTx4sXMNicnJwKAbNq0SaTt/v37CQCyevVqZptAICCurq4EANm+fTuzvVu3bsTOzo6UlJQw24RCIbG3tyeWlpbMtu3btxMAxM3NjQiFQmb7tGnTCIfDIfn5+YQQQvLz84mKigrp2LEjKS4uJgUl5cTU/xgx8T9GjGcfJSb//T/X0IrIGTRj7pv4HyM6vgEEANEbGCqy/eObVq/pBCw20Ru8lJj4HyOm/sdIYUk52bRpEwFALl++zMQHgMjJyZHk5GRm2507dwgAsm7dOmbbsGHDCJvNJtevXxd77SvPd+rUqQQAuXjxIvNYQUEBMTMzI6ampkQgEIi8VikpKSL7iY2NJQBIbGys2Hu4Y8cOZltpaSnR19cnffr0YbZdv35d7L2rjM3S0pJ4enqKvC9FRUXEzMyMuLu7M9uCgoIIADJw4ECxc6QoiqIkp8Y9A/r6+rC0tERsbKzIdi6Xi5EjR4psi4qKgqysrMivPjabjd9++02kXW5uLs6ePYt+/fqhoKAA2dnZyM7ORk5ODjw9PZGUlIT09HSR5/j5+YlU8XN0dIRAIEBaWhoAIDo6GgUFBfD394e8vDzScnioHDb44fOUbF1R9uoxyvMymG28xHPgqOqAa2xX7WtR9OgSZLWMIKtlBEHRW/CL3iIh6TlcXV0BQOw1cnNzg7m5OXO/RYsWUFVVxbNnzwAAQqEQhw4dwk8//YR27dqJHa8y7hMnTqBDhw4iXevKysrw8/NDamoqEhMTq437U5SVlTFkyBDmvpycHDp06MDEV53bt28jKSkJgwYNQk5ODvMe8ng8dOvWDRcuXIBQKBR5zrhx474oToqiKKp+1HgAoY6ODgBAVlZWZLuhoSHk5ES71NPS0tCoUSOxgYQWFhYi95OTk0EIwfz58zF//vwqj/vmzRsYGhoy942NRSv/aWhoAKjo6gaAp0+fAgBT7KeML/pFVEmxeVfkxmwF78E5qHcZCGEJD0XJ16Ha/mfmy1dQ9Bb44IuMJScPtpwC+HmvUJ7zAi/XDmYec1wrGvOHPo65Mu7KmLOysvDu3bvPFihKS0urcl2D5s2bM49/SZEjIyMjsTLJGhoauHv37mefm5SUBABVXgKq9PbtW+Z9AgAzM7Nax0hRFEXVnxonA9HR0QAqfkV+SEFB4YsPXvmLccaMGfD09KyyzccJBIfDqbId+UTtJDmZqjs/OPLKULRoD15iRTLAe3wZEJRDycaFaZMRPg2Cd++/2NUcBkLdcTAIIZDVMYVGtzHMY4t/toWpdsWo+MaNG39VzF/rU+sfCASCKrd/TXyV7+Hy5cs/OeWwLj8zFEVRVN2rcTLg5uZW452amJggNjZWbJphcnKySLsmTZoAqOhtqM3+q1PZHX///n1YWFjAVEsJLABVfa0p2XZD0f5FKM14At6Dc5DTM4ecjgnzuLb3DJFZBTLq+hXxauij7E0K5E1aVoysBzDQ17PWyx1X0tHRgaqqKu7fv19tOxMTEzx+/Fhs+6NHj5jHgfe9JR8P9qy8lPIlPpVgVL7eqqqqdfYeUhRFUd9WrVbPIYSIjID/FE9PT5SXl2Pr1q3MNqFQiPXr14u009XVhbOzMzZv3oyMjIyPd1PllMHP8fDwgIqKCsLCwlBSUgIlrgyM/1tl8ONfugpN2oKtoIp3V/eh9MV9KNk4izwub2QNBdNWzE32v2RA0coRgoIcFN45BQAw1lJkEoHi4mLweLxaxcxms+Hj44OjR4/ixo0bYo9Xxt2zZ09cu3YNV65cYR7j8XjYsmULTE1NYW1tDeD9F/SFC+9nSwgEAmzZsqVWcX2oshbAxwlG27ZtYW5ujhUrVqCwsFDseV/yHlIURVHfVo1/ys6ePRsHDx6En58fZsyYUW1bHx8fdOjQAdOnT0dycjKsrKxw5MgR5ObmAhD9lbl+/Xp06dIFdnZ2GDt2LJo0aYLMzExcuXIFL1++xJ07d2p1Qqqqqli1ahXGjBmD9u3bY9CgQVB5Xozc+JsQlpdAu9fvTFsWRwZKzbui4NYxgMWGorVTjY6hZOuCokcXkRu1HqXP78K6SxesWXMXjx49wr///otTp05VORCwOqGhoTh9+jScnJzg5+eH5s2bIyMjA3v37sWlS5egrq4Of39//P333+jRowcmT54MTU1NREREICUlBfv372dWRrSxsUGnTp0wZ84c5ObmQlNTE//88w/4fH6tYvqQubk51NXVsWnTJqioqEBJSQkdO3aEmZkZtm3bhh49esDGxgYjR46EoaEh0tPTERsbC1VVVRw9evSLj0tRFEXVvxonA0eOHIGHhwe8vb0/25bD4eD48eOYMmUKIiIiwGaz4evri6CgIDg4OEBeXp5pa21tjRs3biA4OBjh4eHIycmBrq4uWrdujcDAwC86qdGjR0NXVxdLlizBokWLwJGRRZmyPlTb/yzWVsnOFQW3jkHetCVklDVrtH8Wiw2d3vPw7voh8O6fxZmIeFxVVESTJk0wZcoUNG3atNYxGxoaIj4+HvPnz8euXbvw7t07GBoaokePHsylFj09PcTFxWH27NlYt24dSkpK0KJFCxw9ehReXl4i+9u1axd+/fVXLFmyBOrq6hg9ejRcXFzg7u5e69iAiks5ERERmDNnDsaNGwc+n4/t27fDzMwMzs7OuHLlChYtWoQ///wThYWF0NfXR8eOHfHrr79+0fEoiqKob+ebrlp46NAh+Pr64tKlS3BwcPhWhwUADP0rHnHPciD4aH2CssxnyNg+GVq9foeyrWut9slhs2DfRAuRo8VH+FMURVHU96JWYwZqo7i4WOS+QCDAunXroKqqijZt2tTXYT8p1NcOMmzxQXCFd06BJacAxab2td6nDJuFUN/qaxJQFEVRVENXb6sWTpo0CcXFxejcuTNKS0tx4MABxMXFITQ0VCJTyxprKiLY2wb+B+4BAIqS4lGe8wIFt09Bpa0X2HLyn9mDuIXeNmis2bAWZaIoiqKo2qq3ZMDV1RUrV67EsWPHUFJSAgsLC6xbt05sHYFvaUB7Y2QXlmLF6SfIjd4MYVE+FMzbQb3L4M8/+SMzPZqhf3vxYkIURVEU9b35pmMGGop/rj9H0JEH4AuJ2BiC6nDYLMiwWVjobUMTAYqiKOqHIZXJAAC8yC1CwMF7uJicDQ6bVW1SUPm4o4U2Qn3t6KUBiqIo6ocitclApaTMAuyKf47YJ2/wPKdIpFIhCxUFhVya6mJIJ2NY6KpIKkyKoiiKqjdSnwx8iFfKR2oOD2V8IeRk2DDVUvriEsMURVEU9b2gyQBFURRFSbl6qzNAURRFUdT3gSYDFEVRFCXlaDJAURRFUVKOJgMURVEUJeVoMkBRFEVRUo4mAxRFURQl5WgyQFEURVFSjiYDFEVRFCXlaDJAURRFUVKOJgMURVEUJeVoMkBRFEVRUo4mAxRFURQl5WgyQFEURVFSjiYDFEVRFCXlaDJAURRFUVKOJgMURVEUJeVoMkBRFEVRUo4mAxRFURQl5WgyQFEURVFSjiYDFEVRFCXlaDJAURRFUVKOJgMURVEUJeVoMkBRFEVRUo4mAxRFURQl5WgyQFEURVFSjiYDFEVRFCXlaDJAURRFUVLu/+O8sP1QauykAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "dataset_generator.draw_graph()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "Now we can actually use the dataset generator to generate data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {
    "scrolled": true,
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "8df3708f8ed548dda6174c7d36cb8cef",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Generating dataset:   0%|          | 0/10 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "dataset = dataset_generator.generate(display=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "183"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dataset.n_resources"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Upload the dataset to a server"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "6c2cb9abb9dd48fca9bf19aecc0c9c2c",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "  0%|          | 0/183 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "res = dataset.upload(server, display=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    },
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<QueryResponse(resource=Patient, n=20)>"
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "covid_query = server.query(\"Patient\").has(\n",
    "    resource=\"Condition\",\n",
    "    search_param=\"code\",\n",
    "    operator=\"eq\",\n",
    "    value=\"RA01.0\",\n",
    "    reference_param=\"subject\",\n",
    ").include(\n",
    "    resource=\"Condition\",\n",
    "    reference_param=\"subject\",\n",
    "    reverse=True\n",
    ")\n",
    "\n",
    "covid_response = covid_query.all()\n",
    "covid_response"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    },
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "# Transferring resources from one server to another\n",
    "\n",
    "Use the `transfer()` function on a server object to transfer resources from one server to another while keeping referential integrity and using server assigned IDs.  \n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "The transfer is a three-step process:\n",
    "1. Analyze the resources to be transferred and build a DAG modeling the references\n",
    "2. Obtain any missing resources that are referenced from the source server\n",
    "3. Upload the resources to the target server based on the reference DAG\n",
    "4. Generate a record linkage dictionary that links the transfered remsources"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    },
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Resources form a reference graph\n",
    "\n",
    "![FHIR Kindling](assets/resource_graphs.png)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Which gets resolved step by step\n",
    "![FHIR Kindling](assets/upload_graph.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    },
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "### Connect to an additional server and transfer based on the query"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    },
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "8df9df80bd4b4fa2a0be8e650efb72d7",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "  0%|          | 0/40 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<TransferResponse(origin_server=http://localhost:9090/fhir, destination_server=http://localhost:9091/fhir)"
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# define a new server\n",
    "transfer_api_url = \"http://localhost:9091/fhir\"\n",
    "transfer_server = FhirServer(api_address=transfer_api_url)\n",
    "\n",
    "server.transfer(transfer_server, query=covid_query, display=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "# Benchmarking"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "Benchmarks for clients (to see if the library is faster :)) as well as generalizable tools to benchmark the performance of FHIR servers."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Client benchmark\n",
    "![FHIR Kindling](assets/query_plot.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Server Benchmark"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "Compare the performance of multiple FHIR servers on standard CRUD operations as well as search\n",
    "- Create\n",
    "- Batch Create\n",
    "- Search\n",
    "- Delete\n",
    "\n",
    "The benchmarking tool will generate the same synthetic data that we created before and insert the resources into each server.\n",
    "The created resources are tracked and removed at the end."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "### Compare the three most common fhir servers\n",
    "- Blaze\n",
    "- Hapi\n",
    "- Linux4Health"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [],
   "source": [
    "servers = [\n",
    "    {\"name\": \"blaze\", \"api_address\": \"http://localhost:9090/fhir\"},\n",
    "    {\"name\": \"hapi\", \"api_address\": \"http://localhost:9091/fhir\"},\n",
    "    {\n",
    "        \"name\": \"linux4h\",\n",
    "        \"api_address\": \"http://localhost:9080/fhir-server/api/v4/\",\n",
    "        \"credentials\": {\"username\": \"fhiruser\", \"password\": \"change-password\"},\n",
    "    },\n",
    "]\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "### Setup the servers"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "initializing Server blaze -- http://localhost:9090/fhir\n",
      "initializing Server hapi -- http://localhost:9091/fhir\n",
      "initializing Server linux4h -- http://localhost:9080/fhir-server/api/v4/\n"
     ]
    }
   ],
   "source": [
    "benchmark_servers = []\n",
    "for s in servers:\n",
    "    print(f\"initializing Server {s['name']} -- {s['api_address']}\")\n",
    "    credentials = s.get(\"credentials\", None)\n",
    "    if credentials:\n",
    "        benchmark_servers.append(\n",
    "            FhirServer(\n",
    "                api_address=s[\"api_address\"],\n",
    "                **credentials,\n",
    "            )\n",
    "        )\n",
    "    else:\n",
    "        benchmark_servers.append(FhirServer(api_address=s[\"api_address\"]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "### Configure the benchmark"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [],
   "source": [
    "from fhir_kindling.benchmark import ServerBenchmark\n",
    "benchmark = ServerBenchmark(\n",
    "    servers=benchmark_servers,\n",
    "    server_names=[s[\"name\"] for s in servers],\n",
    "    dataset_size=100,\n",
    "    n_attempts=2,\n",
    ")\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "### Run the test suite"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "8f40b12ab63147e0a3376873484376c8",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Generating dataset:   0%|          | 0/100 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "8bc23f8ca4054fc0a5807bdaabd2cf4c",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Running bechmarks for 3 servers:: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Server http://localhost:9090/fhir:   0%|          | 0/7 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "c835f3605914435ea5c5c05a423f6a73",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Server http://localhost:9091/fhir:   0%|          | 0/7 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "benchmark.run_suite()\n",
    "figure = benchmark.plot()\n",
    "figure.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "### How to use & customize the benchmark\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "##### Test the performance of the servers on a new vm\n",
    "\n",
    "1. Clone & install the library\n",
    "2. Navigate into the benchmarks folder\n",
    "3. Start the compose file containing the three servers `docker compose up`\n",
    "4. Run the preconfigured benchmark script `python benchmark_servers.py`"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "#### Add custom queries for specific pain points\n",
    "You can customize the queries to be tracked by providing `custom_queries` to the server benchmarks.\n",
    "You can also configure which steps should be run by providing a list of steps:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "### Custom benchmark"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "benchmark = ServerBenchmark(\n",
    "    servers=benchmark_servers,\n",
    "    server_names=[s[\"name\"] for s in servers],\n",
    "    dataset_size=100,\n",
    "    n_attempts=3,\n",
    "    steps=[\"search\"],\n",
    "    custom_query\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    },
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Outlook\n",
    "\n",
    "- Optimizations for handling large amounts of data\n",
    "- Stable 1.0 release soon\n",
    "\n",
    "### Privacy Methods\n",
    "- use automatic tabular serialization to evaluate bundle responses with methods like k-anonymity\n",
    "- automatic anonymization of fields (i.e. rounding dates to the year recoreded)\n",
    "\n",
    "### User interface\n",
    "- Graphical userinterface to create, save and execute queries\n",
    "- Autocomplete for resources and their fields"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    },
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "<center><h2>Questions?</h2></center>\n",
    "\n",
    "\n",
    "<center><h2>Feature requests, contributions and 🌟 are very welcome!</h2></center>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "celltoolbar": "Slideshow",
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}