{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "tags": [
     "library/cudf",
     "library/pandas",
     "dataset/nyc-taxi",
     "data-storage/s3",
     "data-format/parquet"
    ]
   },
   "source": [
    "# Accelerating data analysis using cudf.pandas"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "_April, 2025_\n",
    "\n",
    "This notebook was designed to be used on Coiled Notebooks to demonstrate how data scientists can quickly and easily leverage cloud GPU resources and dramatically accelerate their analysis workflows without modifying existing code. Using the NYC ride-share dataset—containing millions of trip records with detailed information about pickup/dropoff locations, fares, and ride durations—we demonstrate the seamless integration of GPU acceleration through RAPIDS' cudf.pandas extension. By simply adding one import statement, analysts can continue using the familiar Pandas API while operations execute on NVIDIA GPUs in the background, reducing processing time from minutes to seconds.\n",
    "\n",
    "````{docref} /platforms/coiled\n",
    "To run this notebook on Coiled, check out the Coiled documentation page for more details.\n",
    "````"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To use cudf.pandas, Load the cudf.pandas extension at the beginning of your notebook or IPython session. After that, just import pandas and operations will use the GPU."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-04-23T20:10:16.230200Z",
     "iopub.status.busy": "2025-04-23T20:10:16.229807Z",
     "iopub.status.idle": "2025-04-23T20:10:19.647753Z",
     "shell.execute_reply": "2025-04-23T20:10:19.647030Z",
     "shell.execute_reply.started": "2025-04-23T20:10:16.230184Z"
    }
   },
   "outputs": [],
   "source": [
    "%load_ext cudf.pandas\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "import pandas as pd\n",
    "import seaborn as sns"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# NYC Taxi Data Analysis\n",
    "\n",
    "This notebook analyzes taxi ride data from the NYC TLC ride share dataset. We're using this dataset stored in S3 that contains information about rides including pickup/dropoff locations, fares, trip times, and other metrics.\n",
    "\n",
    "```{note}\n",
    "For more details about this notebook check out the accompanying blog post \n",
    "[Simplify Setup and Boost Data Science in the Cloud using NVIDIA CUDA-X and Coiled](https://developer.nvidia.com/blog/simplify-setup-and-boost-data-science-in-the-cloud-using-nvidia-cuda-x-and-coiled/). \n",
    "```\n",
    "\n",
    "In the following cells, we:\n",
    "1. Create an S3 filesystem connection\n",
    "2. Load and concatenate multiple Parquet files from the dataset\n",
    "3. Explore the data structure and prepare for analysis\n",
    "\n",
    "The dataset contains detailed ride information that will allow us to analyze patterns in taxi usage, pricing, and service differences between companies.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-04-23T20:14:45.987829Z",
     "iopub.status.busy": "2025-04-23T20:14:45.987204Z",
     "iopub.status.idle": "2025-04-23T20:14:46.176901Z",
     "shell.execute_reply": "2025-04-23T20:14:46.176454Z",
     "shell.execute_reply.started": "2025-04-23T20:14:45.987812Z"
    }
   },
   "outputs": [],
   "source": [
    "import s3fs\n",
    "\n",
    "fs = s3fs.S3FileSystem(anon=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-04-23T20:14:53.707198Z",
     "iopub.status.busy": "2025-04-23T20:14:53.706080Z",
     "iopub.status.idle": "2025-04-23T20:16:43.867235Z",
     "shell.execute_reply": "2025-04-23T20:16:43.866624Z",
     "shell.execute_reply.started": "2025-04-23T20:14:53.707181Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "64811259"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "path_files = []\n",
    "\n",
    "for i in range(660, 720):\n",
    "    path_files.append(\n",
    "        pd.read_parquet(f\"s3://coiled-data/uber/part.{i}.parquet\", filesystem=fs)\n",
    "    )\n",
    "\n",
    "data = pd.concat(path_files, ignore_index=True)\n",
    "len(data)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Data Loading and Initial Exploration\n",
    "\n",
    "In the previous cells, we:\n",
    "1. Set up AWS credentials to access S3 storage\n",
    "2. Created an S3 filesystem connection\n",
    "3. Loaded and concatenated multiple Parquet files (parts 660-720) from the ride-share dataset\n",
    "4. Checked the dataset size (64,811,259 records)\n",
    "\n",
    "Now we're examining the structure of our data by:\n",
    "- Viewing the first few rows with `head()`\n",
    "- Inspecting column names\n",
    "- Analyzing data types\n",
    "- Optimizing memory usage by converting data types (int32→int16, float64→float32, string→category)\n",
    "\n",
    "The dataset contains ride information from various ride-hailing services, which we'll map to company names (Uber, Lyft, etc.) for better analysis.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-04-23T20:16:57.047065Z",
     "iopub.status.busy": "2025-04-23T20:16:57.046700Z",
     "iopub.status.idle": "2025-04-23T20:16:57.168352Z",
     "shell.execute_reply": "2025-04-23T20:16:57.167938Z",
     "shell.execute_reply.started": "2025-04-23T20:16:57.047049Z"
    }
   },
   "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>hvfhs_license_num</th>\n",
       "      <th>dispatching_base_num</th>\n",
       "      <th>originating_base_num</th>\n",
       "      <th>request_datetime</th>\n",
       "      <th>on_scene_datetime</th>\n",
       "      <th>pickup_datetime</th>\n",
       "      <th>dropoff_datetime</th>\n",
       "      <th>PULocationID</th>\n",
       "      <th>DOLocationID</th>\n",
       "      <th>trip_miles</th>\n",
       "      <th>...</th>\n",
       "      <th>sales_tax</th>\n",
       "      <th>congestion_surcharge</th>\n",
       "      <th>airport_fee</th>\n",
       "      <th>tips</th>\n",
       "      <th>driver_pay</th>\n",
       "      <th>shared_request_flag</th>\n",
       "      <th>shared_match_flag</th>\n",
       "      <th>access_a_ride_flag</th>\n",
       "      <th>wav_request_flag</th>\n",
       "      <th>wav_match_flag</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>HV0003</td>\n",
       "      <td>B03404</td>\n",
       "      <td>B03404</td>\n",
       "      <td>2022-10-18 15:41:35</td>\n",
       "      <td>2022-10-18 15:48:37</td>\n",
       "      <td>2022-10-18 15:50:15</td>\n",
       "      <td>2022-10-18 16:08:27</td>\n",
       "      <td>47</td>\n",
       "      <td>78</td>\n",
       "      <td>1.390</td>\n",
       "      <td>...</td>\n",
       "      <td>1.07</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>11.26</td>\n",
       "      <td>N</td>\n",
       "      <td>N</td>\n",
       "      <td>&lt;NA&gt;</td>\n",
       "      <td>N</td>\n",
       "      <td>N</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>HV0005</td>\n",
       "      <td>B03406</td>\n",
       "      <td>&lt;NA&gt;</td>\n",
       "      <td>2022-10-18 15:54:39</td>\n",
       "      <td>NaT</td>\n",
       "      <td>2022-10-18 15:57:39</td>\n",
       "      <td>2022-10-18 16:07:18</td>\n",
       "      <td>130</td>\n",
       "      <td>131</td>\n",
       "      <td>1.028</td>\n",
       "      <td>...</td>\n",
       "      <td>0.70</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>6.33</td>\n",
       "      <td>N</td>\n",
       "      <td>N</td>\n",
       "      <td>N</td>\n",
       "      <td>N</td>\n",
       "      <td>N</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>HV0003</td>\n",
       "      <td>B03404</td>\n",
       "      <td>B03404</td>\n",
       "      <td>2022-10-18 15:01:16</td>\n",
       "      <td>2022-10-18 15:02:43</td>\n",
       "      <td>2022-10-18 15:03:17</td>\n",
       "      <td>2022-10-18 15:15:31</td>\n",
       "      <td>200</td>\n",
       "      <td>241</td>\n",
       "      <td>2.950</td>\n",
       "      <td>...</td>\n",
       "      <td>1.10</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>11.14</td>\n",
       "      <td>N</td>\n",
       "      <td>N</td>\n",
       "      <td>&lt;NA&gt;</td>\n",
       "      <td>N</td>\n",
       "      <td>N</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>HV0003</td>\n",
       "      <td>B03404</td>\n",
       "      <td>B03404</td>\n",
       "      <td>2022-10-18 15:20:45</td>\n",
       "      <td>2022-10-18 15:24:15</td>\n",
       "      <td>2022-10-18 15:24:48</td>\n",
       "      <td>2022-10-18 15:31:59</td>\n",
       "      <td>18</td>\n",
       "      <td>18</td>\n",
       "      <td>0.570</td>\n",
       "      <td>...</td>\n",
       "      <td>0.79</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>6.64</td>\n",
       "      <td>N</td>\n",
       "      <td>N</td>\n",
       "      <td>&lt;NA&gt;</td>\n",
       "      <td>N</td>\n",
       "      <td>N</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>HV0003</td>\n",
       "      <td>B03404</td>\n",
       "      <td>B03404</td>\n",
       "      <td>2022-10-18 15:29:47</td>\n",
       "      <td>2022-10-18 15:33:39</td>\n",
       "      <td>2022-10-18 15:34:24</td>\n",
       "      <td>2022-10-18 15:53:05</td>\n",
       "      <td>94</td>\n",
       "      <td>248</td>\n",
       "      <td>2.910</td>\n",
       "      <td>...</td>\n",
       "      <td>1.66</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>14.52</td>\n",
       "      <td>N</td>\n",
       "      <td>N</td>\n",
       "      <td>&lt;NA&gt;</td>\n",
       "      <td>N</td>\n",
       "      <td>N</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 24 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "  hvfhs_license_num dispatching_base_num originating_base_num  \\\n",
       "0            HV0003               B03404               B03404   \n",
       "1            HV0005               B03406                 <NA>   \n",
       "2            HV0003               B03404               B03404   \n",
       "3            HV0003               B03404               B03404   \n",
       "4            HV0003               B03404               B03404   \n",
       "\n",
       "     request_datetime    on_scene_datetime     pickup_datetime  \\\n",
       "0 2022-10-18 15:41:35  2022-10-18 15:48:37 2022-10-18 15:50:15   \n",
       "1 2022-10-18 15:54:39                  NaT 2022-10-18 15:57:39   \n",
       "2 2022-10-18 15:01:16  2022-10-18 15:02:43 2022-10-18 15:03:17   \n",
       "3 2022-10-18 15:20:45  2022-10-18 15:24:15 2022-10-18 15:24:48   \n",
       "4 2022-10-18 15:29:47  2022-10-18 15:33:39 2022-10-18 15:34:24   \n",
       "\n",
       "     dropoff_datetime  PULocationID  DOLocationID  trip_miles  ...  sales_tax  \\\n",
       "0 2022-10-18 16:08:27            47            78       1.390  ...       1.07   \n",
       "1 2022-10-18 16:07:18           130           131       1.028  ...       0.70   \n",
       "2 2022-10-18 15:15:31           200           241       2.950  ...       1.10   \n",
       "3 2022-10-18 15:31:59            18            18       0.570  ...       0.79   \n",
       "4 2022-10-18 15:53:05            94           248       2.910  ...       1.66   \n",
       "\n",
       "   congestion_surcharge  airport_fee  tips  driver_pay  shared_request_flag  \\\n",
       "0                   0.0          0.0   0.0       11.26                    N   \n",
       "1                   0.0          0.0   0.0        6.33                    N   \n",
       "2                   0.0          0.0   0.0       11.14                    N   \n",
       "3                   0.0          0.0   0.0        6.64                    N   \n",
       "4                   0.0          0.0   0.0       14.52                    N   \n",
       "\n",
       "  shared_match_flag access_a_ride_flag wav_request_flag wav_match_flag  \n",
       "0                 N               <NA>                N              N  \n",
       "1                 N                  N                N              N  \n",
       "2                 N               <NA>                N              N  \n",
       "3                 N               <NA>                N              N  \n",
       "4                 N               <NA>                N              N  \n",
       "\n",
       "[5 rows x 24 columns]"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-04-23T20:16:58.345411Z",
     "iopub.status.busy": "2025-04-23T20:16:58.344536Z",
     "iopub.status.idle": "2025-04-23T20:16:58.350609Z",
     "shell.execute_reply": "2025-04-23T20:16:58.350129Z",
     "shell.execute_reply.started": "2025-04-23T20:16:58.345395Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['hvfhs_license_num', 'dispatching_base_num', 'originating_base_num',\n",
       "       'request_datetime', 'on_scene_datetime', 'pickup_datetime',\n",
       "       'dropoff_datetime', 'PULocationID', 'DOLocationID', 'trip_miles',\n",
       "       'trip_time', 'base_passenger_fare', 'tolls', 'bcf', 'sales_tax',\n",
       "       'congestion_surcharge', 'airport_fee', 'tips', 'driver_pay',\n",
       "       'shared_request_flag', 'shared_match_flag', 'access_a_ride_flag',\n",
       "       'wav_request_flag', 'wav_match_flag'],\n",
       "      dtype='object')"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.columns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-04-23T20:16:59.291692Z",
     "iopub.status.busy": "2025-04-23T20:16:59.291223Z",
     "iopub.status.idle": "2025-04-23T20:16:59.300777Z",
     "shell.execute_reply": "2025-04-23T20:16:59.300213Z",
     "shell.execute_reply.started": "2025-04-23T20:16:59.291679Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "hvfhs_license_num               object\n",
       "dispatching_base_num            object\n",
       "originating_base_num            object\n",
       "request_datetime        datetime64[us]\n",
       "on_scene_datetime       datetime64[us]\n",
       "pickup_datetime         datetime64[us]\n",
       "dropoff_datetime        datetime64[us]\n",
       "PULocationID                     int32\n",
       "DOLocationID                     int32\n",
       "trip_miles                     float32\n",
       "trip_time                        int32\n",
       "base_passenger_fare            float32\n",
       "tolls                          float32\n",
       "bcf                            float32\n",
       "sales_tax                      float32\n",
       "congestion_surcharge           float32\n",
       "airport_fee                    float32\n",
       "tips                           float32\n",
       "driver_pay                     float32\n",
       "shared_request_flag             object\n",
       "shared_match_flag               object\n",
       "access_a_ride_flag              object\n",
       "wav_request_flag                object\n",
       "wav_match_flag                  object\n",
       "dtype: object"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.dtypes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-04-23T20:17:00.486545Z",
     "iopub.status.busy": "2025-04-23T20:17:00.485872Z",
     "iopub.status.idle": "2025-04-23T20:17:01.558454Z",
     "shell.execute_reply": "2025-04-23T20:17:01.557985Z",
     "shell.execute_reply.started": "2025-04-23T20:17:00.486515Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Column 'trip_time' cannot be safely converted to int16 due to value range.\n"
     ]
    }
   ],
   "source": [
    "for col in data.columns:\n",
    "    if data[col].dtype == \"int32\":\n",
    "        min_value = -32768\n",
    "        max_value = 32767\n",
    "        if data[col].min() >= min_value and data[col].max() <= max_value:\n",
    "            data[col] = data[col].astype(\"int16\")\n",
    "        else:\n",
    "            print(\n",
    "                f\"Column '{col}' cannot be safely converted to int16 due to value range.\"\n",
    "            )\n",
    "    if data[col].dtype == \"float64\":\n",
    "        data[col] = data[col].astype(\"float32\")\n",
    "    if data[col].dtype == \"string\" or data[col].dtype == \"object\":\n",
    "        data[col] = data[col].astype(\"category\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-04-23T20:17:02.177177Z",
     "iopub.status.busy": "2025-04-23T20:17:02.176666Z",
     "iopub.status.idle": "2025-04-23T20:17:02.197717Z",
     "shell.execute_reply": "2025-04-23T20:17:02.197254Z",
     "shell.execute_reply.started": "2025-04-23T20:17:02.177163Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "hvfhs_license_num             category\n",
       "dispatching_base_num          category\n",
       "originating_base_num          category\n",
       "request_datetime        datetime64[us]\n",
       "on_scene_datetime       datetime64[us]\n",
       "pickup_datetime         datetime64[us]\n",
       "dropoff_datetime        datetime64[us]\n",
       "PULocationID                     int16\n",
       "DOLocationID                     int16\n",
       "trip_miles                     float32\n",
       "trip_time                        int32\n",
       "base_passenger_fare            float32\n",
       "tolls                          float32\n",
       "bcf                            float32\n",
       "sales_tax                      float32\n",
       "congestion_surcharge           float32\n",
       "airport_fee                    float32\n",
       "tips                           float32\n",
       "driver_pay                     float32\n",
       "shared_request_flag           category\n",
       "shared_match_flag             category\n",
       "access_a_ride_flag            category\n",
       "wav_request_flag              category\n",
       "wav_match_flag                category\n",
       "dtype: object"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.dtypes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-04-23T20:17:13.751681Z",
     "iopub.status.busy": "2025-04-23T20:17:13.751163Z",
     "iopub.status.idle": "2025-04-23T20:17:14.052638Z",
     "shell.execute_reply": "2025-04-23T20:17:14.051913Z",
     "shell.execute_reply.started": "2025-04-23T20:17:13.751665Z"
    }
   },
   "outputs": [],
   "source": [
    "# data = data.dropna()\n",
    "\n",
    "# Create a company mapping dictionary\n",
    "company_mapping = {\n",
    "    \"HV0002\": \"Juno\",\n",
    "    \"HV0003\": \"Uber\",\n",
    "    \"HV0004\": \"Via\",\n",
    "    \"HV0005\": \"Lyft\",\n",
    "}\n",
    "\n",
    "# Replace the hvfhs_license_num with company names\n",
    "data[\"company\"] = data[\"hvfhs_license_num\"].map(company_mapping)\n",
    "data.drop(\"hvfhs_license_num\", axis=1, inplace=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Data Transformation and Analysis\n",
    "\n",
    "In the next three cells, we're performing several key data transformations and analyses:\n",
    "\n",
    "1. **Cell 15**: We're extracting the month from the pickup datetime and creating a new column. Then we're calculating the total fare by summing various fare components. Finally, we're grouping the data by company and month to analyze trip counts, revenue, average fares, and driver payments.\n",
    "\n",
    "2. **Cell 16**: We're calculating the profit for each company by month by subtracting the total driver payout from the total revenue.\n",
    "\n",
    "3. **Cell 17**: We're displaying the complete grouped dataset that includes all the metrics we've calculated (trip counts, revenue, average fares, driver payouts, and profits) for each company by month.\n",
    "\n",
    "These transformations help us understand the financial performance of different rideshare companies across different months.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-04-23T20:17:29.828983Z",
     "iopub.status.busy": "2025-04-23T20:17:29.828277Z",
     "iopub.status.idle": "2025-04-23T20:17:30.606272Z",
     "shell.execute_reply": "2025-04-23T20:17:30.605660Z",
     "shell.execute_reply.started": "2025-04-23T20:17:29.828966Z"
    }
   },
   "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>company</th>\n",
       "      <th>pickup_month</th>\n",
       "      <th>trip_count</th>\n",
       "      <th>total_revenue</th>\n",
       "      <th>avg_fare</th>\n",
       "      <th>total_driver_payout</th>\n",
       "      <th>profit</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Lyft</td>\n",
       "      <td>1</td>\n",
       "      <td>4898879</td>\n",
       "      <td>121683760.0</td>\n",
       "      <td>24.839103</td>\n",
       "      <td>77961272.0</td>\n",
       "      <td>43722488.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Lyft</td>\n",
       "      <td>10</td>\n",
       "      <td>2319596</td>\n",
       "      <td>64832340.0</td>\n",
       "      <td>27.949841</td>\n",
       "      <td>43752420.0</td>\n",
       "      <td>21079920.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Lyft</td>\n",
       "      <td>11</td>\n",
       "      <td>5117891</td>\n",
       "      <td>136568464.0</td>\n",
       "      <td>26.684520</td>\n",
       "      <td>90697264.0</td>\n",
       "      <td>45871200.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Lyft</td>\n",
       "      <td>12</td>\n",
       "      <td>5657939</td>\n",
       "      <td>150960176.0</td>\n",
       "      <td>26.681125</td>\n",
       "      <td>98486688.0</td>\n",
       "      <td>52473488.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Uber</td>\n",
       "      <td>1</td>\n",
       "      <td>13580152</td>\n",
       "      <td>366343040.0</td>\n",
       "      <td>26.976358</td>\n",
       "      <td>250266704.0</td>\n",
       "      <td>116076336.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  company  pickup_month  trip_count  total_revenue   avg_fare  \\\n",
       "0    Lyft             1     4898879    121683760.0  24.839103   \n",
       "1    Lyft            10     2319596     64832340.0  27.949841   \n",
       "2    Lyft            11     5117891    136568464.0  26.684520   \n",
       "3    Lyft            12     5657939    150960176.0  26.681125   \n",
       "4    Uber             1    13580152    366343040.0  26.976358   \n",
       "\n",
       "   total_driver_payout       profit  \n",
       "0           77961272.0   43722488.0  \n",
       "1           43752420.0   21079920.0  \n",
       "2           90697264.0   45871200.0  \n",
       "3           98486688.0   52473488.0  \n",
       "4          250266704.0  116076336.0  "
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data[\"pickup_month\"] = data[\"pickup_datetime\"].dt.month\n",
    "\n",
    "data[\"total_fare\"] = (\n",
    "    data[\"base_passenger_fare\"]\n",
    "    + data[\"tolls\"]\n",
    "    + data[\"bcf\"]\n",
    "    + data[\"sales_tax\"]\n",
    "    + data[\"congestion_surcharge\"]\n",
    "    + data[\"airport_fee\"]\n",
    ")\n",
    "\n",
    "grouped = (\n",
    "    data.groupby([\"company\", \"pickup_month\"])\n",
    "    .agg(\n",
    "        {\n",
    "            \"company\": \"count\",\n",
    "            \"total_fare\": [\"sum\", \"mean\"],\n",
    "            \"driver_pay\": \"sum\",\n",
    "            \"tips\": \"sum\",\n",
    "        }\n",
    "    )\n",
    "    .reset_index()\n",
    ")\n",
    "\n",
    "grouped.columns = [\n",
    "    \"company\",\n",
    "    \"pickup_month\",\n",
    "    \"trip_count\",\n",
    "    \"total_revenue\",\n",
    "    \"avg_fare\",\n",
    "    \"total_driver_pay\",\n",
    "    \"total_tips\",\n",
    "]\n",
    "\n",
    "grouped[\"total_driver_payout\"] = grouped[\"total_driver_pay\"] + grouped[\"total_tips\"]\n",
    "\n",
    "grouped = grouped[\n",
    "    [\n",
    "        \"company\",\n",
    "        \"pickup_month\",\n",
    "        \"trip_count\",\n",
    "        \"total_revenue\",\n",
    "        \"avg_fare\",\n",
    "        \"total_driver_payout\",\n",
    "    ]\n",
    "]\n",
    "\n",
    "grouped = grouped.sort_values([\"company\", \"pickup_month\"])\n",
    "\n",
    "grouped[\"profit\"] = grouped[\"total_revenue\"] - grouped[\"total_driver_payout\"]\n",
    "\n",
    "grouped.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-04-23T20:17:33.138069Z",
     "iopub.status.busy": "2025-04-23T20:17:33.137309Z",
     "iopub.status.idle": "2025-04-23T20:17:33.141352Z",
     "shell.execute_reply": "2025-04-23T20:17:33.140972Z",
     "shell.execute_reply.started": "2025-04-23T20:17:33.138054Z"
    }
   },
   "outputs": [],
   "source": [
    "grouped[\"profit\"] = grouped[\"total_revenue\"] - grouped[\"total_driver_payout\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-04-23T20:17:34.189014Z",
     "iopub.status.busy": "2025-04-23T20:17:34.188790Z",
     "iopub.status.idle": "2025-04-23T20:17:34.201006Z",
     "shell.execute_reply": "2025-04-23T20:17:34.200634Z",
     "shell.execute_reply.started": "2025-04-23T20:17:34.189000Z"
    }
   },
   "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>company</th>\n",
       "      <th>pickup_month</th>\n",
       "      <th>trip_count</th>\n",
       "      <th>total_revenue</th>\n",
       "      <th>avg_fare</th>\n",
       "      <th>total_driver_payout</th>\n",
       "      <th>profit</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Lyft</td>\n",
       "      <td>1</td>\n",
       "      <td>4898879</td>\n",
       "      <td>121683760.0</td>\n",
       "      <td>24.839103</td>\n",
       "      <td>77961272.0</td>\n",
       "      <td>43722488.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Lyft</td>\n",
       "      <td>10</td>\n",
       "      <td>2319596</td>\n",
       "      <td>64832340.0</td>\n",
       "      <td>27.949841</td>\n",
       "      <td>43752420.0</td>\n",
       "      <td>21079920.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Lyft</td>\n",
       "      <td>11</td>\n",
       "      <td>5117891</td>\n",
       "      <td>136568464.0</td>\n",
       "      <td>26.684520</td>\n",
       "      <td>90697264.0</td>\n",
       "      <td>45871200.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Lyft</td>\n",
       "      <td>12</td>\n",
       "      <td>5657939</td>\n",
       "      <td>150960176.0</td>\n",
       "      <td>26.681125</td>\n",
       "      <td>98486688.0</td>\n",
       "      <td>52473488.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Uber</td>\n",
       "      <td>1</td>\n",
       "      <td>13580152</td>\n",
       "      <td>366343040.0</td>\n",
       "      <td>26.976358</td>\n",
       "      <td>250266704.0</td>\n",
       "      <td>116076336.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>Uber</td>\n",
       "      <td>10</td>\n",
       "      <td>6260889</td>\n",
       "      <td>192093504.0</td>\n",
       "      <td>30.681506</td>\n",
       "      <td>134541680.0</td>\n",
       "      <td>57551824.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>Uber</td>\n",
       "      <td>11</td>\n",
       "      <td>12968005</td>\n",
       "      <td>388421952.0</td>\n",
       "      <td>29.952329</td>\n",
       "      <td>264810560.0</td>\n",
       "      <td>123611392.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>Uber</td>\n",
       "      <td>12</td>\n",
       "      <td>14007908</td>\n",
       "      <td>432905792.0</td>\n",
       "      <td>30.904386</td>\n",
       "      <td>292669184.0</td>\n",
       "      <td>140236608.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  company  pickup_month  trip_count  total_revenue   avg_fare  \\\n",
       "0    Lyft             1     4898879    121683760.0  24.839103   \n",
       "1    Lyft            10     2319596     64832340.0  27.949841   \n",
       "2    Lyft            11     5117891    136568464.0  26.684520   \n",
       "3    Lyft            12     5657939    150960176.0  26.681125   \n",
       "4    Uber             1    13580152    366343040.0  26.976358   \n",
       "5    Uber            10     6260889    192093504.0  30.681506   \n",
       "6    Uber            11    12968005    388421952.0  29.952329   \n",
       "7    Uber            12    14007908    432905792.0  30.904386   \n",
       "\n",
       "   total_driver_payout       profit  \n",
       "0           77961272.0   43722488.0  \n",
       "1           43752420.0   21079920.0  \n",
       "2           90697264.0   45871200.0  \n",
       "3           98486688.0   52473488.0  \n",
       "4          250266704.0  116076336.0  \n",
       "5          134541680.0   57551824.0  \n",
       "6          264810560.0  123611392.0  \n",
       "7          292669184.0  140236608.0  "
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "grouped"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Trip Duration Analysis\n",
    "\n",
    "The next three cells are performing the following operations:\n",
    "\n",
    "1. **Cell 19**: We're defining a function called `categorize_trip` that categorizes trips based on their duration. \n",
    "   - Trips less than 10 minutes (600 seconds) are categorized as short (0)\n",
    "   - Trips between 10-20 minutes (600-1200 seconds) are categorized as medium (1)\n",
    "   - Trips longer than 20 minutes (1200+ seconds) are categorized as long (2)\n",
    "   \n",
    "   This categorization helps us analyze how trip duration affects various metrics.\n",
    "\n",
    "   User-Defined Functions (UDFs) like the one above. perform better with numerical values as compared to strings,\n",
    "   hence we are using a numerical representation of trip types.\n",
    "\n",
    "3. **Cell 20**: We're applying the `categorize_trip` function to each row in our dataset, creating a new column \n",
    "   called 'trip_category' that contains the category value (0, 1, or 2) for each trip. This transformation \n",
    "   allows us to group and analyze trips by their duration categories.\n",
    "\n",
    "4. **Cell 21**: We're grouping the data by trip category and calculating statistics for each group:\n",
    "   - The mean and sum of total fares\n",
    "   - The count of trips in each category\n",
    "   \n",
    "   This analysis helps us understand how trip duration relates to fare amounts and trip frequency.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-04-23T20:24:09.510807Z",
     "iopub.status.busy": "2025-04-23T20:24:09.510425Z",
     "iopub.status.idle": "2025-04-23T20:24:09.513794Z",
     "shell.execute_reply": "2025-04-23T20:24:09.513427Z",
     "shell.execute_reply.started": "2025-04-23T20:24:09.510791Z"
    }
   },
   "outputs": [],
   "source": [
    "def categorize_trip(row):\n",
    "    if row[\"trip_time\"] < 600:  # Less than 10 minutes\n",
    "        return 0\n",
    "    elif row[\"trip_time\"] < 1200:  # 10-20 minutes\n",
    "        return 1\n",
    "    else:  # More than 20 minutes\n",
    "        return 2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-04-23T20:24:10.383990Z",
     "iopub.status.busy": "2025-04-23T20:24:10.383584Z",
     "iopub.status.idle": "2025-04-23T20:24:12.308368Z",
     "shell.execute_reply": "2025-04-23T20:24:12.307654Z",
     "shell.execute_reply.started": "2025-04-23T20:24:10.383975Z"
    }
   },
   "outputs": [],
   "source": [
    "# Apply UDF\n",
    "data[\"trip_category\"] = data.apply(categorize_trip, axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-04-23T20:24:12.309350Z",
     "iopub.status.busy": "2025-04-23T20:24:12.309111Z",
     "iopub.status.idle": "2025-04-23T20:24:12.362466Z",
     "shell.execute_reply": "2025-04-23T20:24:12.362125Z",
     "shell.execute_reply.started": "2025-04-23T20:24:12.309336Z"
    }
   },
   "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 tr th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr:last-of-type th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th colspan=\"2\" halign=\"left\">total_fare</th>\n",
       "      <th>trip_time</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th>mean</th>\n",
       "      <th>sum</th>\n",
       "      <th>count</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>trip_category</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>short</th>\n",
       "      <td>11.943861</td>\n",
       "      <td>1.968005e+08</td>\n",
       "      <td>16477123</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>medium</th>\n",
       "      <td>20.912767</td>\n",
       "      <td>5.168305e+08</td>\n",
       "      <td>24713637</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>long</th>\n",
       "      <td>48.276928</td>\n",
       "      <td>1.140325e+09</td>\n",
       "      <td>23620499</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "              total_fare               trip_time\n",
       "                    mean           sum     count\n",
       "trip_category                                   \n",
       "short          11.943861  1.968005e+08  16477123\n",
       "medium         20.912767  5.168305e+08  24713637\n",
       "long           48.276928  1.140325e+09  23620499"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Create a mapping for trip categories\n",
    "trip_category_map = {0: \"short\", 1: \"medium\", 2: \"long\"}\n",
    "\n",
    "# Group by trip category\n",
    "category_stats = data.groupby(\"trip_category\").agg(\n",
    "    {\"total_fare\": [\"mean\", \"sum\"], \"trip_time\": \"count\"}\n",
    ")\n",
    "\n",
    "# Rename the index with descriptive labels\n",
    "category_stats.index = category_stats.index.map(lambda x: f\"{trip_category_map[x]}\")\n",
    "\n",
    "category_stats"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "## Location Data Analysis\n",
    "\n",
    "The TLC dataset has columns PULocationID and DOLocationID which indicate the zone and borough information according to the taxi zones of the New York TLC. You can download this information and look up the zones corresponding to the index in CSV format [here](https://d37ci6vzurychx.cloudfront.net/misc/taxi_zone_lookup.csv).\n",
    "\n",
    "The next few cells (23-32) are focused on:\n",
    "\n",
    "1. **Cells 23-26**: Loading and preparing taxi zone data\n",
    "   - Loading taxi zone information from a CSV file\n",
    "   - Examining the data structure\n",
    "   - Selecting only the relevant columns (LocationID, zone, borough)\n",
    "\n",
    "2. **Cells 27-28**: Enriching our trip data with location information\n",
    "   - Merging pickup location data using PULocationID\n",
    "   - Creating a combined pickup_location field\n",
    "   - Merging dropoff location data using DOLocationID\n",
    "   - Creating a combined dropoff_location field\n",
    "\n",
    "3. **Cell 29**: Analyzing popular routes\n",
    "   - Grouping data by pickup and dropoff locations\n",
    "   - Counting rides between each location pair\n",
    "   - Identifying the top 10 most frequent routes (hotspots)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-04-23T20:28:52.864557Z",
     "iopub.status.busy": "2025-04-23T20:28:52.863642Z",
     "iopub.status.idle": "2025-04-23T20:28:52.948953Z",
     "shell.execute_reply": "2025-04-23T20:28:52.948312Z",
     "shell.execute_reply.started": "2025-04-23T20:28:52.864537Z"
    }
   },
   "outputs": [],
   "source": [
    "taxi_zones = pd.read_csv(\"taxi_zone_lookup.csv\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-04-23T20:28:53.874563Z",
     "iopub.status.busy": "2025-04-23T20:28:53.873807Z",
     "iopub.status.idle": "2025-04-23T20:28:53.889081Z",
     "shell.execute_reply": "2025-04-23T20:28:53.888709Z",
     "shell.execute_reply.started": "2025-04-23T20:28:53.874548Z"
    }
   },
   "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>OBJECTID</th>\n",
       "      <th>Shape_Leng</th>\n",
       "      <th>the_geom</th>\n",
       "      <th>Shape_Area</th>\n",
       "      <th>zone</th>\n",
       "      <th>LocationID</th>\n",
       "      <th>borough</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0.116357</td>\n",
       "      <td>MULTIPOLYGON (((-74.18445299999996 40.69499599...</td>\n",
       "      <td>0.000782</td>\n",
       "      <td>Newark Airport</td>\n",
       "      <td>1</td>\n",
       "      <td>EWR</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>0.433470</td>\n",
       "      <td>MULTIPOLYGON (((-73.82337597260663 40.63898704...</td>\n",
       "      <td>0.004866</td>\n",
       "      <td>Jamaica Bay</td>\n",
       "      <td>2</td>\n",
       "      <td>Queens</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>0.084341</td>\n",
       "      <td>MULTIPOLYGON (((-73.84792614099985 40.87134223...</td>\n",
       "      <td>0.000314</td>\n",
       "      <td>Allerton/Pelham Gardens</td>\n",
       "      <td>3</td>\n",
       "      <td>Bronx</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>0.043567</td>\n",
       "      <td>MULTIPOLYGON (((-73.97177410965318 40.72582128...</td>\n",
       "      <td>0.000112</td>\n",
       "      <td>Alphabet City</td>\n",
       "      <td>4</td>\n",
       "      <td>Manhattan</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>0.092146</td>\n",
       "      <td>MULTIPOLYGON (((-74.17421738099989 40.56256808...</td>\n",
       "      <td>0.000498</td>\n",
       "      <td>Arden Heights</td>\n",
       "      <td>5</td>\n",
       "      <td>Staten Island</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   OBJECTID  Shape_Leng                                           the_geom  \\\n",
       "0         1    0.116357  MULTIPOLYGON (((-74.18445299999996 40.69499599...   \n",
       "1         2    0.433470  MULTIPOLYGON (((-73.82337597260663 40.63898704...   \n",
       "2         3    0.084341  MULTIPOLYGON (((-73.84792614099985 40.87134223...   \n",
       "3         4    0.043567  MULTIPOLYGON (((-73.97177410965318 40.72582128...   \n",
       "4         5    0.092146  MULTIPOLYGON (((-74.17421738099989 40.56256808...   \n",
       "\n",
       "   Shape_Area                     zone  LocationID        borough  \n",
       "0    0.000782           Newark Airport           1            EWR  \n",
       "1    0.004866              Jamaica Bay           2         Queens  \n",
       "2    0.000314  Allerton/Pelham Gardens           3          Bronx  \n",
       "3    0.000112            Alphabet City           4      Manhattan  \n",
       "4    0.000498            Arden Heights           5  Staten Island  "
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "taxi_zones.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-04-23T20:28:54.936629Z",
     "iopub.status.busy": "2025-04-23T20:28:54.936245Z",
     "iopub.status.idle": "2025-04-23T20:28:54.938968Z",
     "shell.execute_reply": "2025-04-23T20:28:54.938608Z",
     "shell.execute_reply.started": "2025-04-23T20:28:54.936614Z"
    }
   },
   "outputs": [],
   "source": [
    "taxi_zones = taxi_zones[[\"LocationID\", \"zone\", \"borough\"]]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-04-23T20:28:55.995467Z",
     "iopub.status.busy": "2025-04-23T20:28:55.994934Z",
     "iopub.status.idle": "2025-04-23T20:28:56.016789Z",
     "shell.execute_reply": "2025-04-23T20:28:56.016159Z",
     "shell.execute_reply.started": "2025-04-23T20:28:55.995452Z"
    }
   },
   "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>LocationID</th>\n",
       "      <th>zone</th>\n",
       "      <th>borough</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>Newark Airport</td>\n",
       "      <td>EWR</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>Jamaica Bay</td>\n",
       "      <td>Queens</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>Allerton/Pelham Gardens</td>\n",
       "      <td>Bronx</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>Alphabet City</td>\n",
       "      <td>Manhattan</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>Arden Heights</td>\n",
       "      <td>Staten Island</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>258</th>\n",
       "      <td>256</td>\n",
       "      <td>Williamsburg (South Side)</td>\n",
       "      <td>Brooklyn</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>259</th>\n",
       "      <td>259</td>\n",
       "      <td>Woodlawn/Wakefield</td>\n",
       "      <td>Bronx</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>260</th>\n",
       "      <td>260</td>\n",
       "      <td>Woodside</td>\n",
       "      <td>Queens</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>261</th>\n",
       "      <td>261</td>\n",
       "      <td>World Trade Center</td>\n",
       "      <td>Manhattan</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>262</th>\n",
       "      <td>262</td>\n",
       "      <td>Yorkville East</td>\n",
       "      <td>Manhattan</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>263 rows × 3 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     LocationID                       zone        borough\n",
       "0             1             Newark Airport            EWR\n",
       "1             2                Jamaica Bay         Queens\n",
       "2             3    Allerton/Pelham Gardens          Bronx\n",
       "3             4              Alphabet City      Manhattan\n",
       "4             5              Arden Heights  Staten Island\n",
       "..          ...                        ...            ...\n",
       "258         256  Williamsburg (South Side)       Brooklyn\n",
       "259         259         Woodlawn/Wakefield          Bronx\n",
       "260         260                   Woodside         Queens\n",
       "261         261         World Trade Center      Manhattan\n",
       "262         262             Yorkville East      Manhattan\n",
       "\n",
       "[263 rows x 3 columns]"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "taxi_zones"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-04-23T20:28:59.985016Z",
     "iopub.status.busy": "2025-04-23T20:28:59.984608Z",
     "iopub.status.idle": "2025-04-23T20:29:01.421223Z",
     "shell.execute_reply": "2025-04-23T20:29:01.420232Z",
     "shell.execute_reply.started": "2025-04-23T20:28:59.985001Z"
    }
   },
   "outputs": [],
   "source": [
    "data = pd.merge(\n",
    "    data, taxi_zones, left_on=\"PULocationID\", right_on=\"LocationID\", how=\"left\"\n",
    ")\n",
    "for col in [\"zone\", \"borough\"]:\n",
    "    data[col] = data[col].fillna(\"NA\")\n",
    "data[\"pickup_location\"] = data[\"zone\"] + \",\" + data[\"borough\"]\n",
    "data.drop([\"LocationID\", \"zone\", \"borough\"], axis=1, inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-04-23T20:29:02.316993Z",
     "iopub.status.busy": "2025-04-23T20:29:02.316404Z",
     "iopub.status.idle": "2025-04-23T20:29:03.503261Z",
     "shell.execute_reply": "2025-04-23T20:29:03.502803Z",
     "shell.execute_reply.started": "2025-04-23T20:29:02.316978Z"
    }
   },
   "outputs": [],
   "source": [
    "data = pd.merge(\n",
    "    data, taxi_zones, left_on=\"DOLocationID\", right_on=\"LocationID\", how=\"left\"\n",
    ")\n",
    "for col in [\"zone\", \"borough\"]:\n",
    "    data[col] = data[col].fillna(\"NA\")\n",
    "data[\"dropoff_location\"] = data[\"zone\"] + \",\" + data[\"borough\"]\n",
    "data.drop([\"LocationID\", \"zone\", \"borough\"], axis=1, inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-04-23T20:29:04.302690Z",
     "iopub.status.busy": "2025-04-23T20:29:04.302332Z",
     "iopub.status.idle": "2025-04-23T20:29:05.167674Z",
     "shell.execute_reply": "2025-04-23T20:29:05.167131Z",
     "shell.execute_reply.started": "2025-04-23T20:29:04.302676Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Top 10 Pickup and Dropoff Hotspots:\n",
      "                    pickup_location              dropoff_location  ride_count\n",
      "29305            JFK Airport,Queens                         NA,NA      214629\n",
      "17422        East New York,Brooklyn        East New York,Brooklyn      204280\n",
      "5533          Borough Park,Brooklyn         Borough Park,Brooklyn      144201\n",
      "31607      LaGuardia Airport,Queens                         NA,NA      130948\n",
      "8590              Canarsie,Brooklyn             Canarsie,Brooklyn      117952\n",
      "13640  Crown Heights North,Brooklyn  Crown Heights North,Brooklyn       99066\n",
      "1068                 Astoria,Queens                Astoria,Queens       87116\n",
      "2538             Bay Ridge,Brooklyn            Bay Ridge,Brooklyn       87009\n",
      "29518        Jackson Heights,Queens        Jackson Heights,Queens       85413\n",
      "50620       South Ozone Park,Queens            JFK Airport,Queens       82798\n"
     ]
    }
   ],
   "source": [
    "location_group = (\n",
    "    data.groupby([\"pickup_location\", \"dropoff_location\"])\n",
    "    .size()\n",
    "    .reset_index(name=\"ride_count\")\n",
    ")\n",
    "location_group = location_group.sort_values(\"ride_count\", ascending=False)\n",
    "\n",
    "# Identify top 10 hotspots\n",
    "top_hotspots = location_group.head(10)\n",
    "print(\"Top 10 Pickup and Dropoff Hotspots:\")\n",
    "print(top_hotspots)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-04-23T20:29:06.069776Z",
     "iopub.status.busy": "2025-04-23T20:29:06.069115Z",
     "iopub.status.idle": "2025-04-23T20:29:06.072057Z",
     "shell.execute_reply": "2025-04-23T20:29:06.071686Z",
     "shell.execute_reply.started": "2025-04-23T20:29:06.069759Z"
    }
   },
   "outputs": [],
   "source": [
    "data.drop([\"pickup_month\", \"PULocationID\", \"DOLocationID\"], axis=1, inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-04-23T20:29:06.987640Z",
     "iopub.status.busy": "2025-04-23T20:29:06.986906Z",
     "iopub.status.idle": "2025-04-23T20:29:07.964776Z",
     "shell.execute_reply": "2025-04-23T20:29:07.964227Z",
     "shell.execute_reply.started": "2025-04-23T20:29:06.987611Z"
    }
   },
   "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>dispatching_base_num</th>\n",
       "      <th>originating_base_num</th>\n",
       "      <th>request_datetime</th>\n",
       "      <th>on_scene_datetime</th>\n",
       "      <th>pickup_datetime</th>\n",
       "      <th>dropoff_datetime</th>\n",
       "      <th>trip_miles</th>\n",
       "      <th>trip_time</th>\n",
       "      <th>base_passenger_fare</th>\n",
       "      <th>tolls</th>\n",
       "      <th>...</th>\n",
       "      <th>shared_request_flag</th>\n",
       "      <th>shared_match_flag</th>\n",
       "      <th>access_a_ride_flag</th>\n",
       "      <th>wav_request_flag</th>\n",
       "      <th>wav_match_flag</th>\n",
       "      <th>company</th>\n",
       "      <th>total_fare</th>\n",
       "      <th>trip_category</th>\n",
       "      <th>pickup_location</th>\n",
       "      <th>dropoff_location</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>B03404</td>\n",
       "      <td>B03404</td>\n",
       "      <td>2022-10-18 15:41:35</td>\n",
       "      <td>2022-10-18 15:48:37</td>\n",
       "      <td>2022-10-18 15:50:15</td>\n",
       "      <td>2022-10-18 16:08:27</td>\n",
       "      <td>1.390</td>\n",
       "      <td>1092</td>\n",
       "      <td>12.02</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>N</td>\n",
       "      <td>N</td>\n",
       "      <td>NaN</td>\n",
       "      <td>N</td>\n",
       "      <td>N</td>\n",
       "      <td>Uber</td>\n",
       "      <td>13.450000</td>\n",
       "      <td>1</td>\n",
       "      <td>Claremont/Bathgate,Bronx</td>\n",
       "      <td>East Tremont,Bronx</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>B03406</td>\n",
       "      <td>NaN</td>\n",
       "      <td>2022-10-18 15:54:39</td>\n",
       "      <td>NaT</td>\n",
       "      <td>2022-10-18 15:57:39</td>\n",
       "      <td>2022-10-18 16:07:18</td>\n",
       "      <td>1.028</td>\n",
       "      <td>579</td>\n",
       "      <td>7.88</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>N</td>\n",
       "      <td>N</td>\n",
       "      <td>N</td>\n",
       "      <td>N</td>\n",
       "      <td>N</td>\n",
       "      <td>Lyft</td>\n",
       "      <td>8.820000</td>\n",
       "      <td>0</td>\n",
       "      <td>Jamaica,Queens</td>\n",
       "      <td>Jamaica Estates,Queens</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>B03404</td>\n",
       "      <td>B03404</td>\n",
       "      <td>2022-10-18 15:01:16</td>\n",
       "      <td>2022-10-18 15:02:43</td>\n",
       "      <td>2022-10-18 15:03:17</td>\n",
       "      <td>2022-10-18 15:15:31</td>\n",
       "      <td>2.950</td>\n",
       "      <td>734</td>\n",
       "      <td>12.44</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>N</td>\n",
       "      <td>N</td>\n",
       "      <td>NaN</td>\n",
       "      <td>N</td>\n",
       "      <td>N</td>\n",
       "      <td>Uber</td>\n",
       "      <td>13.910000</td>\n",
       "      <td>1</td>\n",
       "      <td>Riverdale/North Riverdale/Fieldston,Bronx</td>\n",
       "      <td>Van Cortlandt Village,Bronx</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>B03404</td>\n",
       "      <td>B03404</td>\n",
       "      <td>2022-10-18 15:20:45</td>\n",
       "      <td>2022-10-18 15:24:15</td>\n",
       "      <td>2022-10-18 15:24:48</td>\n",
       "      <td>2022-10-18 15:31:59</td>\n",
       "      <td>0.570</td>\n",
       "      <td>431</td>\n",
       "      <td>8.89</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>N</td>\n",
       "      <td>N</td>\n",
       "      <td>NaN</td>\n",
       "      <td>N</td>\n",
       "      <td>N</td>\n",
       "      <td>Uber</td>\n",
       "      <td>9.950001</td>\n",
       "      <td>0</td>\n",
       "      <td>Bedford Park,Bronx</td>\n",
       "      <td>Bedford Park,Bronx</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>B03404</td>\n",
       "      <td>B03404</td>\n",
       "      <td>2022-10-18 15:29:47</td>\n",
       "      <td>2022-10-18 15:33:39</td>\n",
       "      <td>2022-10-18 15:34:24</td>\n",
       "      <td>2022-10-18 15:53:05</td>\n",
       "      <td>2.910</td>\n",
       "      <td>1121</td>\n",
       "      <td>18.68</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>N</td>\n",
       "      <td>N</td>\n",
       "      <td>NaN</td>\n",
       "      <td>N</td>\n",
       "      <td>N</td>\n",
       "      <td>Uber</td>\n",
       "      <td>20.900000</td>\n",
       "      <td>1</td>\n",
       "      <td>Fordham South,Bronx</td>\n",
       "      <td>West Farms/Bronx River,Bronx</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 26 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "  dispatching_base_num originating_base_num    request_datetime  \\\n",
       "0               B03404               B03404 2022-10-18 15:41:35   \n",
       "1               B03406                  NaN 2022-10-18 15:54:39   \n",
       "2               B03404               B03404 2022-10-18 15:01:16   \n",
       "3               B03404               B03404 2022-10-18 15:20:45   \n",
       "4               B03404               B03404 2022-10-18 15:29:47   \n",
       "\n",
       "    on_scene_datetime     pickup_datetime    dropoff_datetime  trip_miles  \\\n",
       "0 2022-10-18 15:48:37 2022-10-18 15:50:15 2022-10-18 16:08:27       1.390   \n",
       "1                 NaT 2022-10-18 15:57:39 2022-10-18 16:07:18       1.028   \n",
       "2 2022-10-18 15:02:43 2022-10-18 15:03:17 2022-10-18 15:15:31       2.950   \n",
       "3 2022-10-18 15:24:15 2022-10-18 15:24:48 2022-10-18 15:31:59       0.570   \n",
       "4 2022-10-18 15:33:39 2022-10-18 15:34:24 2022-10-18 15:53:05       2.910   \n",
       "\n",
       "   trip_time  base_passenger_fare  tolls  ...  shared_request_flag  \\\n",
       "0       1092                12.02    0.0  ...                    N   \n",
       "1        579                 7.88    0.0  ...                    N   \n",
       "2        734                12.44    0.0  ...                    N   \n",
       "3        431                 8.89    0.0  ...                    N   \n",
       "4       1121                18.68    0.0  ...                    N   \n",
       "\n",
       "   shared_match_flag  access_a_ride_flag  wav_request_flag  wav_match_flag  \\\n",
       "0                  N                 NaN                 N               N   \n",
       "1                  N                   N                 N               N   \n",
       "2                  N                 NaN                 N               N   \n",
       "3                  N                 NaN                 N               N   \n",
       "4                  N                 NaN                 N               N   \n",
       "\n",
       "   company total_fare trip_category  \\\n",
       "0     Uber  13.450000             1   \n",
       "1     Lyft   8.820000             0   \n",
       "2     Uber  13.910000             1   \n",
       "3     Uber   9.950001             0   \n",
       "4     Uber  20.900000             1   \n",
       "\n",
       "                             pickup_location              dropoff_location  \n",
       "0                   Claremont/Bathgate,Bronx            East Tremont,Bronx  \n",
       "1                             Jamaica,Queens        Jamaica Estates,Queens  \n",
       "2  Riverdale/North Riverdale/Fieldston,Bronx   Van Cortlandt Village,Bronx  \n",
       "3                         Bedford Park,Bronx            Bedford Park,Bronx  \n",
       "4                        Fordham South,Bronx  West Farms/Bronx River,Bronx  \n",
       "\n",
       "[5 rows x 26 columns]"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Time-Based Analysis and Visualization\n",
    "\n",
    "The next two cells analyze and visualize how ride patterns change throughout the day:\n",
    "\n",
    "1. Cell 33 extracts the hour of the day from pickup timestamps and calculates the average trip time and cost for each hour. It handles missing hours by adding them with zero values, ensuring a complete 24-hour view.\n",
    "\n",
    "2. Cell 34 displays the resulting dataframe, showing how trip duration and cost vary by hour of the day. This helps identify peak hours, pricing patterns, and potential opportunities for optimizing service.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-04-23T20:29:18.678656Z",
     "iopub.status.busy": "2025-04-23T20:29:18.678349Z",
     "iopub.status.idle": "2025-04-23T20:29:18.747526Z",
     "shell.execute_reply": "2025-04-23T20:29:18.746946Z",
     "shell.execute_reply.started": "2025-04-23T20:29:18.678641Z"
    }
   },
   "outputs": [],
   "source": [
    "# Find the volume per hour of the day and how much an average trip costs along with average trip time.\n",
    "\n",
    "data[\"pickup_hour\"] = data[\"pickup_datetime\"].dt.hour\n",
    "time_grouped = (\n",
    "    data.groupby(\"pickup_hour\")\n",
    "    .agg({\"trip_time\": \"mean\", \"total_fare\": \"mean\"})\n",
    "    .reset_index()\n",
    ")\n",
    "time_grouped.columns = [\"pickup_hour\", \"mean_trip_time\", \"mean_trip_cost\"]\n",
    "hours = range(0, 24)\n",
    "missing_hours = [h for h in hours if h not in time_grouped[\"pickup_hour\"].values]\n",
    "for hour in missing_hours:\n",
    "    new_row = {\"pickup_hour\": hour, \"mean_trip_time\": 0.0, \"mean_trip_cost\": 0.0}\n",
    "    time_grouped = pd.concat([time_grouped, pd.DataFrame([new_row])], ignore_index=True)\n",
    "time_grouped = time_grouped.sort_values(\"pickup_hour\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-04-23T20:29:19.736231Z",
     "iopub.status.busy": "2025-04-23T20:29:19.735678Z",
     "iopub.status.idle": "2025-04-23T20:29:19.744859Z",
     "shell.execute_reply": "2025-04-23T20:29:19.744449Z",
     "shell.execute_reply.started": "2025-04-23T20:29:19.736217Z"
    }
   },
   "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>pickup_hour</th>\n",
       "      <th>mean_trip_time</th>\n",
       "      <th>mean_trip_cost</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>1010.579544</td>\n",
       "      <td>28.302725</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>959.207064</td>\n",
       "      <td>27.369673</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>945.615068</td>\n",
       "      <td>27.741272</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>972.436700</td>\n",
       "      <td>29.060489</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>1036.492632</td>\n",
       "      <td>32.784849</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>5</td>\n",
       "      <td>1093.815407</td>\n",
       "      <td>32.542842</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>6</td>\n",
       "      <td>1152.112576</td>\n",
       "      <td>31.339607</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>7</td>\n",
       "      <td>1166.739691</td>\n",
       "      <td>28.935733</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>8</td>\n",
       "      <td>1136.297709</td>\n",
       "      <td>27.066979</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>9</td>\n",
       "      <td>1119.351153</td>\n",
       "      <td>26.359760</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>10</td>\n",
       "      <td>1140.271875</td>\n",
       "      <td>26.843307</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>11</td>\n",
       "      <td>1171.993626</td>\n",
       "      <td>27.534402</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>12</td>\n",
       "      <td>1198.253652</td>\n",
       "      <td>28.376356</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>13</td>\n",
       "      <td>1238.982215</td>\n",
       "      <td>28.881327</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>14</td>\n",
       "      <td>1317.547064</td>\n",
       "      <td>29.623563</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>15</td>\n",
       "      <td>1371.184059</td>\n",
       "      <td>30.076731</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>16</td>\n",
       "      <td>1376.890890</td>\n",
       "      <td>29.840778</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>17</td>\n",
       "      <td>1317.712844</td>\n",
       "      <td>29.254532</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>18</td>\n",
       "      <td>1203.643743</td>\n",
       "      <td>27.969259</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>19</td>\n",
       "      <td>1119.462306</td>\n",
       "      <td>26.593680</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>20</td>\n",
       "      <td>1085.716462</td>\n",
       "      <td>26.822517</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>21</td>\n",
       "      <td>1069.451340</td>\n",
       "      <td>28.566465</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>22</td>\n",
       "      <td>1073.589005</td>\n",
       "      <td>29.967945</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>23</td>\n",
       "      <td>1050.594472</td>\n",
       "      <td>29.598049</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    pickup_hour  mean_trip_time  mean_trip_cost\n",
       "0             0     1010.579544       28.302725\n",
       "1             1      959.207064       27.369673\n",
       "2             2      945.615068       27.741272\n",
       "3             3      972.436700       29.060489\n",
       "4             4     1036.492632       32.784849\n",
       "5             5     1093.815407       32.542842\n",
       "6             6     1152.112576       31.339607\n",
       "7             7     1166.739691       28.935733\n",
       "8             8     1136.297709       27.066979\n",
       "9             9     1119.351153       26.359760\n",
       "10           10     1140.271875       26.843307\n",
       "11           11     1171.993626       27.534402\n",
       "12           12     1198.253652       28.376356\n",
       "13           13     1238.982215       28.881327\n",
       "14           14     1317.547064       29.623563\n",
       "15           15     1371.184059       30.076731\n",
       "16           16     1376.890890       29.840778\n",
       "17           17     1317.712844       29.254532\n",
       "18           18     1203.643743       27.969259\n",
       "19           19     1119.462306       26.593680\n",
       "20           20     1085.716462       26.822517\n",
       "21           21     1069.451340       28.566465\n",
       "22           22     1073.589005       29.967945\n",
       "23           23     1050.594472       29.598049"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "time_grouped"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Time-Based Visualization\n",
    "\n",
    "The next cell creates a time series visualization that shows how average fares change over time for different ride-hailing companies:\n",
    "\n",
    "1. It groups the data by company and day (using pd.Grouper with freq='D')\n",
    "2. Calculates the mean total fare for each company-day combination\n",
    "3. Creates a line plot using seaborn's lineplot function, with:\n",
    "   - Time on the x-axis\n",
    "   - Average fare on the y-axis\n",
    "   - Different colors for each company\n",
    "\n",
    "This visualization helps identify trends in pricing over time and compare fare patterns between companies (Uber vs. Lyft).\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-03-05T19:14:52.550654Z",
     "iopub.status.busy": "2025-03-05T19:14:52.550238Z",
     "iopub.status.idle": "2025-03-05T19:15:34.130381Z",
     "shell.execute_reply": "2025-03-05T19:15:34.129869Z",
     "shell.execute_reply.started": "2025-03-05T19:14:52.550640Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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2WfM4XCw888/n2VmZrKHH36YrVy5kr366qts0KBBbMyYMaynp8fv2g4fPswAsKuuuirgYygqKmLV1dWMMcaam5uZRqNh9913n8c2drudlZWVsUsvvVS+7PXXX2eCILCLL76YffDBB+zjjz9mF1xwAVMqleyLL76Qt3vwwQcZAFZZWcnuvvtutnLlSvbhhx/2+9y637a5udnvde5UVlay8vJydtRRR7G33nqLffrpp+yEE05garWaPfDAA+zkk09mH3zwAVu6dCkbOXIkKy4u9ngOv/rqK6bRaNipp57K/vOf/7AVK1awWbNmMQBs0aJFAddaU1PDALCKigp2yimnsPfff5+9++677LjjjmNqtZp9//338rYTJ05kJ598cp99HHfccfL7zR983cHy97//nQFg11xzDfvkk0/Ya6+9xoYOHcqMRiPbtWuXvN3MmTOZRqNho0ePZs8++yxbuXIlmz17NgPA7rnnHjZy5Ei2YMEC9tlnn7ELLriAAWDr16+Xb79o0SL58c+ZM4ctX76cvfLKK6yoqIhVVFSwtrY2edv58+ezuXPnsv/+979s9erVbMmSJWz8+PGsurqaWa1WeTv+N66urmYPPPAAW7lyJXvqqaeYVqtls2fPlrf76KOPGAC2cuVKj8f+ySefMADsk08+Cfr5IghiYEHCiiCIpOC1115jANhLL73EGGOsq6uLZWVlsVNPPVXe5ueff2YA2CuvvOJx2+OPP54de+yx8u9z585lCoWCrVu3zmO79957jwFgn376qXwZAGY0Gllra2vA9TkcDmaz2dhf//pXlp+fL4uzrVu3MgDs7rvv9tj+rbfeYgA8hNUNN9zAsrKy2P79+z22feKJJxgAtnXr1oBrOP300xmAPv9+/etf99nW6XQym83GVq9ezQCwzZs3y9fNnDmTAWALFy70ueb333/f4/J169YxAOzFF1/0u7a1a9cyAOwvf/lLwMdwwgknML1eL/9+6aWXsvLyclkcMsbYp59+ygCwjz/+mDEmCuW8vDx24YUXeuzL4XCw8ePHs+OPP16+jB8cP/DAAwHX4YtwhJVer2cHDx6UL9u0aRMDwEpLS5nJZJIv//DDDxkA9t///le+bNSoUWzixInMZrN57PeCCy5gpaWlHs+JN1xYlZWVsd7eXvnyzs5OlpeXx84++2z5Mi5CNm7cKF/2448/MgBsyZIlAZ4RxnQ6HTvxxBMDbsNpa2tjer2eTZs2zePyuro6ptVq2bXXXitfxl+D7q81m83GCgsLGQC2YcMG+fKWlhamVCrZHXfc0ecxXXLJJR739d133zEA7G9/+5vPNfL3xf79+xkA9tFHH8nX8b/xP/7xD4/b3HzzzUyn08nveYfDwYYOHcouuugij+2mTp3Khg0b5nHihiCI9IJKAQmCSAoWLFgAvV6Pq6++GgCQlZWFK664At9++y12794NADj66KNx7LHHYtGiRfLttm/fjh9//BFz5syRL1u2bBmOOuooTJgwAXa7Xf533nnnQRAErFq1yuO+p0yZgtzc3D5r+uqrr3D22WfDaDRCqVRCrVbjgQceQEtLC5qamgAAq1evBgBceeWVHre9/PLLoVJ5trEuW7YMZ555JsrKyjzWNXXqVI99BWLYsGFYt26dx79HHnkEgJjcdu2116KkpERe7+mnny4/T95cdtllfdaXk5ODCy+80GN9EyZMQElJSZ/nLRwYYx4ldbNnz8bBgwfxxRdfyJctWrQIJSUl8vPy/fffo7W1FTNnzvRYl9PpxPnnn49169b1KXf0fmyxYsKECRg0aJD8++jRowGICY7ufV388v379wMA9uzZgx07duDXv/41AHg8rmnTpqG+vh47d+7s9/4vvfRS6HQ6+ffs7GxceOGF+Oabb+BwOAAA11xzDYqKivDPf/5T3u75559HYWEhrrrqqnAfeh/WrFmD3t7ePuWvFRUVmDJlSp+yTUEQMG3aNPl3lUqF4cOHo7S01KP/LS8vD0VFRfJz5w5//jgnnXQSKisr8fXXX8uXNTU14cYbb0RFRQVUKhXUajUqKysB+H5f/OpXv/L4fdy4cTCbzfJ7XqFQ4JZbbsGyZctQV1cHANi7dy9WrFiBm2++OanSIwmCiC8krAiCSDh79uzBN998g+nTp4Mxhvb2drS3t+Pyyy8H4EoKBIA5c+ZgzZo12LFjBwDxIFyr1eKaa66Rt2lsbMTPP/8MtVrt8S87OxuMsT69FaWlpX3W9OOPP+Lcc88FAPzrX//Cd999h3Xr1uG+++4DAPT29gIAWlpaAADFxcUet1epVMjPz/e4rLGxER9//HGfdY0dOxYA+qzLF7yPxv1fVVUVuru7ceqpp+KHH37A3/72N6xatQrr1q3DBx984LFeTkZGBgwGQ5/1tbe3Q6PR9FljQ0NDwPUNHjwYgBh2EIj9+/ejoqJC/n3q1KkoLS2VxXJbWxv++9//4je/+Q2USqW8LkAUq97reuyxx8AYQ2trq8f9+PqbxoK8vDyP3zUaTcDLzWYzANdjuvPOO/s8pptvvhlAcK+HkpISn5dZrVZ0d3cDALRaLW644Qa8+eabaG9vR3NzM9555x1cf/310Gq1Afc/ePDgfv+mHP5e8PXcl5WVyddzMjIyPEQhID5P3s8dv5w/d+74e/z8vpxOJ84991x88MEHuOuuu/Dll1/ixx9/xNq1awH0fV8A6PO+5c+R+7Zz5syBXq/HSy+9BAD45z//Cb1e73GChyCI9INSAQmCSDgLFy4EYwzvvfce3nvvvT7XL1myBH/729+gVCpxzTXX4I477sDixYvx6KOP4vXXX8fFF1/s4TgVFBRAr9d7CDJ3vBPffJ1hfvvtt6FWq7Fs2TKPg78PP/zQYzt+ENbY2OjhXNjt9j4HkgUFBRg3bhweffRRn+sqKyvzeXkwfPXVVzh8+DBWrVolu1SAGOzhC1+PuaCgAPn5+XI6njfZ2dl+77+0tBRjx47F559/7jeFb82aNWhsbMQVV1whX6ZUKjFjxgw899xzaG9vx5tvvgmLxYLZs2d7rAsQXRZ/iYjewjbZXQP+mO655x6/8fPV1dX97qehocHnZRqNBllZWfJlN910E+bNm4eFCxfCbDbDbrfjxhtv7Hf/5513Hp5//nmsXbu23zRK/l6or6/vc93hw4d9Ji1Gir/HP3z4cADAL7/8gs2bN2Px4sWYOXOmvI2vwJRQMBqNmDlzJl599VXceeedWLRoEa699lrk5OREtF+CIFIbElYEQSQUh8OBJUuWYNiwYXj11Vf7XL9s2TI8+eSTWL58OS644ALk5ubi4osvxmuvvYbJkyejoaGhz1niCy64AH//+9+Rn5+PqqqqsNYlCAJUKpXsmgDiGevXX3/dY7vTTjsNgJjId8wxx8iXv/fee32S/i644AJ8+umnGDZsmM/Sw0jgQsLbgXj55ZeD3scFF1yAt99+Gw6HI6yY+/vuuw/XXnst7rzzTo+4dQAwmUy49dZbkZGRgdtvv93jutmzZ+Mf//gH3nrrLSxevBiTJ0/GqFGj5OtPPvlk5OTkYNu2bbjllltCXlcyUl1djREjRmDz5s34+9//HvZ+PvjgAzz++OOy+O/q6sLHH3+MU0891eO1W1paiiuuuAIvvvgirFYrLrzwQtllDMTtt9+OhQsX4uabb+4Ttw6IpZ0ffvghLrnkEkyePBl6vR7//ve/PcTzwYMH8dVXX8kOdDR54403PMo+v//+e+zfvx/XX389gOi8L/xx66234sUXX8Tll1+O9vb2AfPaJAgifEhYEQSRUJYvX47Dhw/jsccewxlnnNHn+qOOOgovvPACFixYgAsuuACAWIbzn//8B7fccgvKy8tx9tlne9zmtttuw/vvv4/TTjsNt99+O8aNGwen04m6ujp8/vnn+NOf/tSvcJg+fTqeeuopXHvttfjd736HlpYWPPHEE30O0MaOHYtrrrkGTz75JJRKJaZMmYKtW7fiySefhNFohELhqrj+61//ipUrV+Kkk07CrbfeiurqapjNZtTW1uLTTz/FSy+9FPaspJNOOgm5ubm48cYb8eCDD0KtVuONN97A5s2bg97H1VdfjTfeeAPTpk3DH//4Rxx//PFQq9U4ePAgvv76a1x00UW45JJL/N7+mmuuwYYNG/DEE0+gtrYWc+bMQXFxMXbu3Imnn34ae/fuxZtvvtlnhtWoUaMwefJkzJ07FwcOHMArr7zicX1WVhaef/55zJw5E62trbj88stRVFSE5uZmbN68Gc3NzZg/f35oT1gS8PLLL2Pq1Kk477zzMGvWLAwaNAitra3Yvn07NmzYgHfffbfffSiVSpxzzjm444474HQ68dhjj6GzsxMPP/xwn23/+Mc/yq979z7FQFRVVeHtt9/GVVddhQkTJsgDggFg27Ztstt8ySWXICcnB/fffz/uvfde/OY3v8E111yDlpYWPPzww9DpdHjwwQdDeHaCY/369bj++utxxRVX4MCBA7jvvvswaNAguZxy1KhRGDZsGP7yl7+AMYa8vDx8/PHHWLlyZcT3PXLkSJx//vlYvnw5TjnlFIwfPz7ifRIEkeIkLjeDIAiCsYsvvphpNBrW1NTkd5urr76aqVQq1tDQwBgTU7kqKioYgD5R3Zzu7m72f//3f6y6upppNBpmNBrZ0UcfzW6//XZ5P4yJqYC///3vfe5j4cKFrLq6mmm1WjZ06FA2d+5ctmDBAgaA1dTUyNuZzWZ2xx13sKKiIjlFbc2aNcxoNLLbb7/dY5/Nzc3s1ltvZVVVVUytVrO8vDx27LHHsvvuu491d3cHfK543Lo/vv/+ezZ58mSWkZHBCgsL2fXXX882bNjQJ7575syZLDMz0+c+bDYbe+KJJ9j48eOZTqdjWVlZbNSoUeyGG25gu3fvDrg+zqeffsqmTZvG8vPzmVqtZoMGDWIzZswImHr4yiuvMAA+4/Q5q1evZtOnT2d5eXnyfqdPn87effddeZtAyX79EU4q4PTp0/ts6+s1xVP8Hn/8cY/LN2/ezK688kpWVFTE1Go1KykpYVOmTJHTMf3B9/fYY4+xhx9+mJWXlzONRsMmTpzIPvvsM7+3GzJkCBs9enTAffti79697Oabb2bDhw9nWq2W6fV6NmbMGHbHHXd4vBcYE0cljBs3Tn7fXXTRRX3+9v5eg/5e497PNU8F/Pzzz9mMGTNYTk6OnEjo/Trdtm0bO+ecc1h2djbLzc1lV1xxBaurq2MA2IMPPihv5+/vz+/L+3EyxtjixYsZAPb222/7e+oIgkgjBMa8JtwRBEEQEfP999/j5JNPxhtvvIFrr7020cshCPz8888YP348/vnPf8qOTqqyePFizJ49G+vWrcOkSZMSto7LLrsMa9euRW1tLdRqdcLWQRBEckClgARBEBGycuVKrFmzBsceeyz0ej02b96MefPmYcSIEX6DCQgiXuzduxf79+/Hvffei9LS0j5x6ERoWCwWbNiwAT/++COWLl2Kp556ikQVQRAASFgRBEFEjMFgwOeff45nnnkGXV1dKCgowNSpUzF37tw+cdIEEW8eeeQRvP766xg9ejTeffddn4mNRPDU19fjpJNOgsFgwA033IA//OEPiV4SQRBJApUCEgRBEARBEARBRAgNCCYIgiAIgiAIgogQElYEQRAEQRAEQRARQsKKIAiCIAiCIAgiQgZ8eIXT6cThw4eRnZ0tT2AnCIIgCIIgCCL9YIyhq6sLZWVlUCii6zENeGF1+PBhVFRUJHoZBEEQBEEQBEEkCQcOHEB5eXlU9znghVV2djYA8ckzGAwJXg1BEARBEARBEImis7MTFRUVskaIJgNeWPHyP4PBQMKKIAiCIAiCIIiYtAhReAVBEARBEARBEESEkLAiCIIgCIIgCIKIEBJWBEEQBEEQBEEQETLge6wIgiAIgiAIIlVgjMFut8PhcCR6KSmJUqmESqVKyJglElYEQRAEQRAEkQRYrVbU19ejp6cn0UtJaTIyMlBaWgqNRhPX+yVhRRAEQRAEQRAJxul0oqamBkqlEmVlZdBoNAlxXVIZxhisViuam5tRU1ODESNGRH0IcCBIWBEEQRAEQRBEgrFarXA6naioqEBGRkail5Oy6PV6qNVq7N+/H1arFTqdLm73TeEVBEEQBEEQBJEkxNNhGagk6jmkvxxBEARBEARBEESEkLAiCIIgCIIgCIKIEBJWBEEQBEEQBEEQEULCiiAIgiAIgiAIIkISKqzmz5+PcePGwWAwwGAwYPLkyVi+fLl8fXd3N2655RaUl5dDr9dj9OjRmD9/fgJXTBAEQRAEQRAE0ZeECqvy8nLMmzcP69evx/r16zFlyhRcdNFF2Lp1KwDg9ttvx4oVK/Dvf/8b27dvx+23344//OEP+OijjxK5bIIgCIIgCIJIKE6nE4899hiGDx8OrVaLwYMH49FHHwUAbNmyBVOmTIFer0d+fj5+97vfobu7W77trFmzcPHFF+Pvf/87iouLkZOTg4cffhh2ux1//vOfkZeXh/LycixcuFC+TW1tLQRBwNtvv42TTjoJOp0OY8eOxapVq+RtHA4HrrvuOlRVVUGv16O6uhrPPvusx7r5fT/xxBMoLS1Ffn4+fv/738NmswEA/vrXv+Loo4/u83iPPfZYPPDAA9F8CqNOQoXVhRdeiGnTpmHkyJEYOXIkHn30UWRlZWHt2rUAgDVr1mDmzJk444wzMGTIEPzud7/D+PHjsX79er/7tFgs6Ozs9PhHEARBEARBEAOJe+65B4899hjuv/9+bNu2DW+++SaKi4vR09OD888/H7m5uVi3bh3effddfPHFF7jllls8bv/VV1/h8OHD+Oabb/DUU0/hoYcewgUXXIDc3Fz88MMPuPHGG3HjjTfiwIEDHrf785//jD/96U/YuHEjTjrpJPzqV79CS0sLAFHslZeX45133sG2bdvwwAMP4N5778U777zjsY+vv/4ae/fuxddff40lS5Zg8eLFWLx4MQBgzpw52LZtG9atWydv//PPP2Pjxo2YNWtW9J/IaMKSBLvdzt566y2m0WjY1q1bGWOM3XDDDWzSpEns4MGDzOl0sq+++oplZWWxb7/91u9+HnzwQQagz7+Ojo54PRSCIAiCIAiCCIne3l62bds21tvb2++2nZ2dTKvVsn/96199rnvllVdYbm4u6+7uli/75JNPmEKhYA0NDYwxxmbOnMkqKyuZw+GQt6murmannnqq/LvdbmeZmZnsrbfeYowxVlNTwwCwefPmydvYbDZWXl7OHnvsMb9rvfnmm9lll10m/87v2263y5ddccUV7KqrrpJ/nzp1Krvpppvk32+77TZ2xhlnBH5S3Aj0XHZ0dMRMGyQ8vGLLli3IysqCVqvFjTfeiKVLl2LMmDEAgOeeew5jxoxBeXk5NBoNzj//fLz44os45ZRT/O7vnnvuQUdHh/zPW2UTBEEQRDLQa3Xggw0H0WqyJnopBEGkGNu3b4fFYsFZZ53l87rx48cjMzNTvuzkk0+G0+nEzp075cvGjh3rMUi3uLjYowRPqVQiPz8fTU1NHvufPHmy/LNKpcKkSZOwfft2+bKXXnoJkyZNQmFhIbKysvCvf/0LdXV1HvsYO3YslEql/HtpaanH/fz2t7/FW2+9BbPZDJvNhjfeeANz5swJ6rlJJKpEL6C6uhqbNm1Ce3s73n//fcycOROrV6/GmDFj8Nxzz2Ht2rX473//i8rKSnzzzTe4+eabUVpairPPPtvn/rRaLbRabZwfBUEQBEGExns/HcD9H23FdadU4f4LxiR6OQRBpBB6vd7vdYwxCILg8zr3y9VqdZ/rfF3mdDr7XQ/f7zvvvIPbb78dTz75JCZPnozs7Gw8/vjj+OGHHzy27+9+LrzwQmi1WixduhRarRYWiwWXXXZZv+tINAkXVhqNBsOHDwcATJo0CevWrcOzzz6LZ555Bvfeey+WLl2K6dOnAwDGjRuHTZs24YknnvArrAiCIAgiFajvMAMAGjvNCV4JQRCpxogRI6DX6/Hll1/i+uuv97huzJgxWLJkCUwmk+xafffdd1AoFBg5cmTE97127VqcdtppAAC73Y6ffvpJ7t/69ttvcdJJJ+Hmm2+Wt9+7d2/I96FSqTBz5kwsWrQIWq0WV199NTIyMiJee6xJuLDyhjEGi8UCm80Gm83mYVECoi0ZjHImCIIgiGSmy2wHIJYEEgRBhIJOp8Pdd9+Nu+66CxqNBieffDKam5uxdetW/PrXv8aDDz6ImTNn4qGHHkJzczP+8Ic/YMaMGSguLo74vv/5z39ixIgRGD16NJ5++mm0tbXJZXrDhw/Ha6+9hs8++wxVVVV4/fXXsW7dOlRVVYV8P9dffz1Gjx4NQBSGqUBChdW9996LqVOnoqKiAl1dXXj77bexatUqrFixAgaDAaeffjr+/Oc/Q6/Xo7KyEqtXr8Zrr72Gp556KpHLJgiCIIiI6TKL0cI9JKwIggiD+++/HyqVCg888AAOHz6M0tJS3HjjjcjIyMBnn32GP/7xjzjuuOOQkZGByy67LGrHz/PmzcNjjz2GjRs3YtiwYfjoo49QUFAAALjxxhuxadMmXHXVVRAEAddccw1uvvlmjzm1wTJixAicdNJJaGlpwQknnBCVtccagTHGEnXn1113Hb788kvU19fDaDRi3LhxuPvuu3HOOecAABoaGnDPPffg888/R2trKyorK/G73/0Ot99+u9/aUW86OzthNBrR0dEBg8EQy4dDEARBEEFz3eJ1+HJHE8ZX5OCj35+c6OUQBJFgzGYzampqUFVVBZ1Ol+jl9KG2thZVVVXYuHEjJkyYEPP7Y4xh1KhRuOGGG3DHHXeEdNtAz2UstUFCHasFCxYEvL6kpASLFi2K02oIgiAIIn64SgHtCV4JQRBEctHU1ITXX38dhw4dwuzZsxO9nKBJuh4rgiAIgkgHOqkUkCAIwifFxcUoKCjAK6+8gtzc3EQvJ2hIWBEEQRBEAui2iE4VCSuCIFKBIUOGIF4dRAnsVIqIhA8IJgiCIIh0hJcC9lApIEEQxICAhBVBEARBxBnGmOxYmW1OOJ2peXaWIAiCcEHCiiAIgiDiTI/VAYebmOq1UTkgQRBEqkPCiiAIgiDiDC8D5FCfFUEQROpDwoogCIIg4ky3xebxey8JK4IgiJSHhBVBEARBxJlOL8fKRAEWBEEQKQ8JK4IgCIKIM1QKSBBEuvHQQw9hwoQJiV5GTCFhRRAEQRBxpstMpYAEQQwczjjjDNx22219Lv/www8hCEL8F5QgSFgRBEEQRJzp61hRKSBBEEQ42Gy2/jeKEySsCIIgCCLO9HGsKG6dIAgvGGPosdoT8o+x2M3We/nll1FRUYGMjAxcccUVaG9v97h+0aJFGD16NHQ6HUaNGoUXX3xRvq62thaCIOCdd97BGWecAZ1Oh3//+98xW2uoqBK9AIIgCIJIN7qpx4ogiH7otTkw5oHPEnLf2/56HjI00ZcJe/bswTvvvIOPP/4YnZ2duO666/D73/8eb7zxBgDgX//6Fx588EG88MILmDhxIjZu3Ijf/va3yMzMxMyZM+X93H333XjyySexaNEiaLXaqK8zXEhYEQRBEESc6ZMKaKFSQIIgBj5msxlLlixBeXk5AOD555/H9OnT8eSTT6KkpASPPPIInnzySVx66aUAgKqqKmzbtg0vv/yyh7C67bbb5G2SCRJWBEEQBBFnvHusKLyCIAhv9Goltv31vITddywYPHiwLKoAYPLkyXA6ndi5cyeUSiUOHDiA6667Dr/97W/lbex2O4xGo8d+Jk2aFJP1RQoJK4IgCIKIM7zHSqtSwGJ3ood6rAiC8EIQhJiU48UCg8GAjo6OPpe3t7fDYDD4vR1PDBQEAU6nE4BYDnjCCSd4bKdUegq9zMzMSJccE1Ljr0UQBEEQAwjuWBUbdKhr7SHHiiCIlGbUqFFYvnx5n8vXrVuH6upq+fe6ujocPnwYZWVlAIA1a9ZAoVBg5MiRKC4uxqBBg7Bv3z78+te/jtvaowkJK4IgCIKIM90WLqy0qGvtobh1giBSmptvvhkvvPACfv/73+N3v/sd9Ho9Vq5ciQULFuD111+Xt9PpdJg5cyaeeOIJdHZ24tZbb8WVV16JkpISAOIQ4VtvvRUGgwFTp06FxWLB+vXr0dbWhjvuuCNRDy9oSFgRBEEQRJzhpYBFBh0ASgUkCCK1GTJkCL799lvcd999OPfcc2E2mzFy5EgsXrwYV1xxhbzd8OHDcemll2LatGlobW3FtGnTPOLUr7/+emRkZODxxx/HXXfdhczMTBx99NE+hw8nIwKLZVB9EtDZ2Qmj0YiOjo6ANZ4EQRAEES+OfWQlWkxWzDm5Cgu/q8GUUUVYOOu4RC+LIIgEYjabUVNTg6qqKuh0ukQvJ6UJ9FzGUhvQgGCCIAiCiDOuHitx/gqVAhIEQaQ+JKwIgiAIIo6YbQ5YHWL6VbFUCkjhFQRBEKkPCSuCIAiCiCPcrRIEoCCLO1YkrAiCIFIdElYEQRAEEUd4ImCWRoVMrTibhYQVQRBE6kPCiiAIgiDiCE8EzNapkKkVw3l7aUAwQRBEykPCiiAIgiDiCC8FzNapoVeLjpXJQuEVBEEQqQ4JK4IgCIKII9yxytKpkKERhZXF7oTDOaCnnxAEQQx4SFgRBEEQRBzplB0rFTI0KvlyKgckCIJIbUhYEQRBEEQc6XYrBdSpFRAE8XKaZUUQBJHakLAiCIIgiDjS5eZYCYIg91nRLCuCINKNhoYGnHPOOcjMzEROTk6ilxMxJKwIgiAIIo64pwICkMsBKXKdIIhUZdasWbj44otDvt3TTz+N+vp6bNq0Cbt27cKqVasgCALa29ujvsZ4QMKKIAiCIOKI7FhpubCiWVYEQaQne/fuxbHHHosRI0agqKgo0cuJGBJWBEEQBBFHuizcsVIDcBdW1GNFEIQbjAFWU2L+schSShljGD58OJ544gmPy3/55RcoFArs3bsXQ4YMwfvvv4/XXnsNgiBg1qxZOPPMMwEAubm58mWphKr/TQiCIAiCiBbuPVYAoCfHiiAIX9h6gL+XJea+7z0MaDLDvrkgCJgzZw4WLVqEO++8U7584cKFOPXUUzFs2DCsW7cOv/nNb2AwGPDss89Cr9fjV7/6FS677DLs3LkTBoMBer0+Go8mbpBjRRAEQRBxxH1AMOByrCi8giCIgcTs2bOxc+dO/PjjjwAAm82Gf//735gzZw4AoLCwEFqtFnq9HiUlJTAajcjLywMAFBUVyZelEuRYEQRBEEQc8Q6v0KspvIIgCB+oM0TnKFH3HSGlpaWYPn06Fi5ciOOPPx7Lli2D2WzGFVdcEYUFJickrAiCIAgijniXAmZqqceKIAgfCEJE5XjJwPXXX48ZM2bg6aefxqJFi3DVVVchIyNy0ZaskLAiCIIgiDjiSgWkUkCCIAY206ZNQ2ZmJubPn4/ly5fjm2++Cbi9RqMBADgcqfl5SMKKIAiCIOKEzeFEr008YPAuBTSRsCIIIoXp6OjApk2bPC7Ly8vDrFmzcM8992D48OGYPHlywH1UVlZCEAQsW7YM06ZNg16vR1ZWVgxXHV0ovIIgCIIg4oTJ4ir3y9J5zrHqpVJAgiBSmFWrVmHixIke/x544AFcd911sFqtcmhFIAYNGoSHH34Yf/nLX1BcXIxbbrklDiuPHuRYEQRBEESc4GWAerUSaqV4bpPi1gmCSHUWL16MxYsX+7zuu+++g0qlwm9+85s+13344Yd9Lrv//vtx//33R3mF8YGEFUEQBEHEiU6vREDAbUCwjYQVQRADB4vFggMHDuD+++/HlVdeieLi4kQvKeZQKSBBEARBxAnuWGX5EFYUXkEQxEDirbfeQnV1NTo6OvCPf/wj0cuJCySsCIIgCCJOeA8HBoAMDZ9jRT1WBEEMHGbNmgWHw4GffvoJgwYNSvRy4gIJK4IgCIKIE3w4sMFXKSA5VgRBECkNCSuCIAiCiBPdFs/hwACFVxAE4QljLNFLSHkS9RySsCIIgiCIOOE9HBhwlQJSjxVBpDdqtfi50NPTk+CVpD78OeTPabxIaCrg/PnzMX/+fNTW1gIAxo4diwceeABTp06Vt9m+fTvuvvturF69Gk6nE2PHjsU777yDwYMHJ2jVBEEQBBEeAVMBqceKINIapVKJnJwcNDU1AQAyMjIgCEKCV5VaMMbQ09ODpqYm5OTkQKlUxvX+EyqsysvLMW/ePAwfPhwAsGTJElx00UXYuHEjxo4di7179+KUU07Bddddh4cffhhGoxHbt2+HTqdL5LIJgiAIIix8pQLq1VQKSBCESElJCQDI4ooIj5ycHPm5jCcJFVYXXnihx++PPvoo5s+fj7Vr12Ls2LG47777MG3aNI+IxqFDh8Z7mQRBEAQRFXylAmZqxa9ii90Jh5NBqaAz1ASRrgiCgNLSUhQVFcFmsyV6OSmJWq2Ou1PFSZoBwQ6HA++++y5MJhMmT54Mp9OJTz75BHfddRfOO+88bNy4EVVVVbjnnntw8cUX+92PxWKBxWKRf+/s7IzD6gmCIAiif7oDlAICYjmgu+giCCI9USqVCRMHRPgkPLxiy5YtyMrKglarxY033oilS5dizJgxaGpqQnd3N+bNm4fzzz8fn3/+OS655BJceumlWL16td/9zZ07F0ajUf5XUVERx0dDEARBEP7hjpV73LpWpQBvo6AAC4IgiNQl4Y5VdXU1Nm3ahPb2drz//vuYOXMmVq9ejZycHADARRddhNtvvx0AMGHCBHz//fd46aWXcPrpp/vc3z333IM77rhD/r2zs5PEFUEQBJEU+CoFFAQBGWolTFYH9VkRBEGkMAkXVhqNRg6vmDRpEtatW4dnn30Wzz//PFQqFcaMGeOx/ejRo/G///3P7/60Wi20Wm1M10wQBEEQ4cAHBGdpPb9+9RoVCSuCIIgUJ+GlgN4wxmCxWKDRaHDcccdh586dHtfv2rULlZWVCVodQRAEQYSPy7HyFFa8z6rXRpHrBEEQqUpCHat7770XU6dORUVFBbq6uvD2229j1apVWLFiBQDgz3/+M6666iqcdtppOPPMM7FixQp8/PHHWLVqVSKXTRAEQRAh43QydFv7lgIC7rOsyLEiCIJIVRIqrBobGzFjxgzU19fDaDRi3LhxWLFiBc455xwAwCWXXIKXXnoJc+fOxa233orq6mq8//77OOWUUxK5bIIgCIIIGZPVDsbEn/05ViYLCSuCIIhUJaHCasGCBf1uM2fOHMyZMycOqyEIgiCI2MHLADVKBXRqzxjlDI34dUylgARBEKlL0vVYEQRBEESwdJltePaL3ag9Ykr0UvrFX38VAOipFJAgCCLlIWFFEARBpCxv/lCHp7/YhRe+3pPopfSLnAjoQ1jJ4RUkrAiCIFIWElYEQRBEyrL5YDsA4Ei3JbELCYJAjhWFVxAEQaQ+JKwIgiCIlGXLoQ4AQGevLcEr6Z8uiySstOo+1/EeKxJWBEEQqQsJK4IgCCIl6eix4UBrr/hzKggrqRQwkGPVa6XwCoIgiFSFhBVBEASRkvxyuEP+udOc/ILEVQrY17Hi4RUmcqwIgiBSFhJWBEEQRErCywCBFCkFDORYqSm8giAIItUhYUUQBEGkJO7CymJ3wmxLblESOLyC91glv/NGEARB+IaEFUEQBJGSbHUTVoBLuCQrNMeKIAhiYEPCiiAIgkg5Os021Lb0AADUSkG+LJkJ1GOVqZVKAZPcdSMIgiD8Q8KKIAiCSDl+kdyqQTl6FGXrACR/n1WgHiu9muLWCYIgUh0SVgRBEETKsfVQJwDg6EFGGPSiA5TsyYDcscrSBhgQbEnux0AQBEH4h4QVQRAEkXLw4Iqjy40wSA5Q0jtWFu5Y+RoQLAkrKgUkCIJIWUhYEQRBECkHLwU8ysOxSnJhJTlWBgqvIAiCGJCQsCIIgiBSii6zDfuOmAAAR5UZYJAcoI4kdqwYY+gOEF7B49atdiccThbXtREEQRDRgYQVQRAEkVJsOyz2V5UZdcjP0sLIHave5O1PMtucsEuCyfccK6X8M82yIgiCSE1IWBEEQRApxRa3MkAAMOilHqskLgXkiYAKwVNEcbQqBRRiajx6qRyQIAgiJSFhRRAEQaQUWyXHShZWOu5YJa+w6nRLBBQEoc/1giDI5YAmElYEQRApCQkrgiAIIqWQEwFlxyr549ZdM6z69ldxXAEWyfs4CIIgCP+QsCIIgiBSBpPFjr3N3QDcHavkj1vvkoMr+vZXcXiJIJUCEgRBpCYkrAiCIIiUYVt9JxgDSgw6FGZrASAl4ta7LTxqPYBjpabIdYIgiFSGhBVBEASRMrjmVxnky1w9VslbQucqBezfsSJhRRAEkZqQsCIIgiBSBu9EQCBVUgGl8IoAwipTK17Xa0tegUgQBEH4h4QVQRAEkTL84hVcAbhKAa12J8y25HR7OoPoseKlgCZLcj4GgiAIIjAkrAiCIIiUoNfqwJ4mz+AKAMjSqMATzJPVtQomFZDCKwiCIFIbElYEQRBESrCtvhNOBhRma1Fs0MmXKxRC0s+y6g7GsZLmWFGPFUEQRGpCwoogCIJICXyVAXJ4n1VHkgZYuOLW+3eseqjHiiAIIiUhYUUQBEGkBL/4CK7gyI5VspYCWsR1GWiO1YDkUHsvnE6W6GUQBJFgSFgRBEEQKYGcCFhm6HNdspcCyqmA2kDCikoBU5Hv9hzByfO+wrwVOxK9FIIgEgwJK4IgCCLpMdsc2C0FVxxd7r8UkKfvJRuhlAKSY5Va8ECV3Y1dCV4JQRCJhoQVQRAEkfRsr++Ew8lQkKVBiVtwBSf5Hav+BwTrJWFlsianOCR8wyP+zTZngldCEESiIWFFEARBJD2/HO4EAIwtM0Lg2epu8FlWSdtjFUQqoBxeQY5VSmGxO6X/6e9GEOkOCSuCIAgi6fnloP9EQMDdsUo+t8dqd8oH31QKOPDggoocK4IgSFgRBEEQSc+WAImAgHuPVfI5Vl1uawoUXqFX8/CK5BOHhH8skqAyk2NFEGkPCSuCIAgiqbHYHdglBQP4Cq4AkrvHipcBZmqUUCr6ljFyMrXkWKUicikgOVYEkfaQsCIIgiCSmlU7m2F3MhRkaVFm7BtcAQBGuccq+dyeYBIBAfcBwSSsUgleCkg9VgRBkLAiCIIgkpol39cCAK6YVO4zuAJwC69IRsfK0n8iIADo+RwrCx2gpxLkWBEEwSFhRRAEQSQtOxu68P3eFigE4P+dWOl3O7nHKhmFVRCJgACQoRYdK6vDCbuDDtJTBeqxIgiCQ8KKIAiCSFqWrKkFAJw3tgSDcvR+t5N7rMw2MMbisbSgCbYUkM+xAqgcMJXggsrmYHA4k+u1RxBEfCFhRRAEQSQlHT02LN1wCAAw86QhAbflpYA2B0u62GueCpjVj2OlVSnAsy0owCJ1cC8BpD4rgkhvSFgRBEEQSck76w+g1+bAqJJsnFCVF3DbTI1SFiXJFrnOHStDP8JKEARk8j4rElYpg7uYSjZRTxBEfCFhRRAEQSQdDifDa2trAQCzThriN7SCIwhC0gZYcMeqv1JAwFUOSLOsUgceXgEAZirhJIi0hoQVQRAEkXR8vaMJB1p7YdSrcdGEQUHdxr3PKpnotkg9VgGGA3PkyHVyrFIGd2Hl/jNBEOkHCSuCIAgi6VgsRaxffVyFR6hDIFzJgMnl9nQGmQoIuEWuk7BKGTxLAenvRhDpDAkrgiAIIqnY09SF/+050m/EujfJ6ljxHqusIEoBuWPVS6WAKYN7eAUJK4JIb0hYEQRBEEnFku/3AwDOHl2MiryMoG8nC6uk7bGiUsCBiLuYolJAgkhvSFgRBEEQSUOn2Yb3NxwEIIZWhIKRh1eYk8vtCXZAMEDCKhWh8AqCIDgJFVbz58/HuHHjYDAYYDAYMHnyZCxfvtzntjfccAMEQcAzzzwT30USBEEQcePd9QfRY3VgZHEWJg/LD+m2vMeqI8kcq245bj2YUkDxMdAcq9SAMeYlrMixIoh0JqHCqry8HPPmzcP69euxfv16TJkyBRdddBG2bt3qsd2HH36IH374AWVlZQlaKUEQBBFrnE6G19bUAhAHAvcXse7NQCgF5EEdJuqxSgmsDk8hRQOCCSK9SaiwuvDCCzFt2jSMHDkSI0eOxKOPPoqsrCysXbtW3ubQoUO45ZZb8MYbb0Ct7v9sH0EQBJGarNrVhP0tPTDoVLhkYnAR6+7Ic6ySKLzC4WQwSe5TVjBx62oeXkEH6KmAd0+VhRwrgkhr+v+UjxMOhwPvvvsuTCYTJk+eDABwOp2YMWMG/vznP2Ps2LFB7cdiscBisci/d3Z2xmS9BEEQRHT599o6AMCVkyrkkrhQSMa49W63fq9gBgRTj1Vq4S2kyLEiiPQm4eEVW7ZsQVZWFrRaLW688UYsXboUY8aMAQA89thjUKlUuPXWW4Pe39y5c2E0GuV/FRUVsVo6QRAEEUW214snwqaNKw3r9skYt87XolUpoFH1/5VLc6xSC28hRT1WBJHeJNyxqq6uxqZNm9De3o73338fM2fOxOrVq9Hb24tnn30WGzZsCKnO/p577sEdd9wh/97Z2UniiiAIIgXotojuDk/3CxW5FDCJeqxaTVYAwT+mTK1UCmhLHteN8I93KSClAhJEepNwYaXRaDB8+HAAwKRJk7Bu3To8++yzGD16NJqamjB48GB5W4fDgT/96U945plnUFtb63N/Wq0WWq02HksnCIIgogRjDCZJWAXTi+QLl2OVPKJkR4Powo0ozgpqe72aSgFTCW8hRXOsCCK9Sbiw8oYxBovFghkzZuDss8/2uO68887DjBkzMHv27AStjiAIgogFZpsTTib+HLawknusbGCMhZwqGAu2HhaF1ZhSQ1Db896yHgsJq1SAHCuCINxJqLC69957MXXqVFRUVKCrqwtvv/02Vq1ahRUrViA/Px/5+Z4zTNRqNUpKSlBdXZ2gFRMEQRCxoMsilu8JgivAIVS4Y2V3MvTaHGEFYESbbZKwGltmDGp7ObyCSgFTAu/wCjOFVxBEWpPQb53GxkbMmDED9fX1MBqNGDduHFasWIFzzjknkcsiCIIg4oxJcmgyNaqwnaYMjRIqhQC7k6Gz155wYeV0MjmQY2xZcI6VnlIBUwrv8AqKWyeI9Cah3zoLFiwIaXt/fVUEQRBEasP7q3h4QzgIggCDXo1WkxWdZhtKjLpoLS8saltMMFkd0KoUqCrIDOo23LGiOVapQZ9SQOqxIoi0JuFx6wRBEATRHWFwBcegE2/fkQTJgNskt2pUqQEqZXBftzTHKrWgHiuCINwhYUUQBEEknEgTATnJFLkeanAF4AqvIMcqNbBQKiBBEG6QsCIIgiASTrdcChipY5U8Q4K3Hg6tvwpwOVZWhxM2Bx2kJzvepX/kWBFEekPCiiAIgkg4URNWcuR64lP1toUhrPRuiYhUDpj8cMcqW3rdejtYBEGkFySsCIIgiIQTtVJAXXKUAjZ1mnGk2wKFAIwqCV5YaZQKKBViKiKVAyY/vPSPl6BSKSBBpDckrAiCIIiE0y3FrUetxyrBpYC8DHBoYZaHC9UfgiAgQ80DLBLvuhGB8RZWVApIEOkNCSuCIAgi4XSbo9VjlRylgNtCnF/lDs2ySh34HCujVIJKjhVBpDckrAiCIIiE4yoFDH+OFZBMjlUHgNASATlcXPaS+5H08IHAvASVHCuCSG9IWBEEQRAJp9saHcfKmDTCijtWxpBvq1eTY5UqcIfKKJcCkmNFEOkMCSuCIAgi4UQ/vCJxpYBdZhv2t/QAAMaEUQooDwm2UI9VsuMqBVTLvzPGErkkgiASCAkrgiAIIuHwHqvIwyvE23ckMBVwe30XAKDUqENepibk21OPVerASwG5sHIywOYgYUUQ6QoJK4IgCCLhDKQBwby/KpzgCsDNsaJ+naRHdqwy1PJlZjv93QgiXSFhRRAEQSQcU5R6rOTwil5bwkqy+GDgMWH0VwFAhkYKr6C49aSH91hlaVUQBOky6rMiiLSFhBVBEASRcEzSHKtsXXQcKycDTAkqpePBFeEkAgJujhWVAiY9XETp1EpoVeIhFSUDEkT6QsKKIAiCSDjRmmOlUyugVorWQWcC+qysdid2N4k9VpGWAvaSsEp6eCmgVqWATkpztFApIEGkLSSsCIIgiIRitTthdUglVZrIhJUgCAnts9rd1AWbg8GgU6E8Vx/WPvTSc2CiUsCkh5cCalXujhWVAhJEukLCiiAIgkgoJrdY8cwIBwQD7n1W8RcmchlgmQECb7oJESoFTB1kYaUmx4ogCBJWBEEQRILhiYBalQIqZeRfSwapTysRpYDbIhgMzKFSwNSB91PpVEroVJKwIseKINIWElYEQRBEQuElb5EGV3BkxyoBpYAuYRVefxUA6NXkWKUK7o6VVi2VApJjRRBpCwkrgiAIIqFEK7iC4x65Hk+cToZt9a5SwHDhzwM5VsmPxeYWXiE5VtRjRRDpCwkrgiAIIqHIw4EjDK7guMIr4ttjVdfag26LHRqVAsMKs8Lej14eEEzhFcmOR3iF5FhRjxVBpC8krAiCIIiEwmdYZUXNsRL30xFnx4q7VaNKsqGOoFcsg5cCWugAPZmxO5ywO8Uh1FqVAlpyrAgi7SFhRRAEQSQUngqYFa0eK11iSgG3Hu4AEP5gYE6G5NxRj1Vyw0cEADwVkAYEE0S6Q8KKIAiCSChdlhj1WMU5vGJrFIIrALdSQJpjldS4p/9plO5x6+RYEUS6QsKKIAiCSCiyYxWFGVaAe9x6fIXJtsORB1cAbnHr5HwkNVxAqRQCVEqF24Bg+rsRRLpCwoogCIJIKKZoh1ckwLFq7rKgqcsCQQBGlUQmrPjzYHMw2BzkfiQr8gwryani/1OPFUGkLySsCIIgiITSHe1SQF38hRXvr6oqyIz4cfBSQID6rJIZVyKgwuN/SgUkiPSFhBVBEASRULiwitaAYKM+/qWA8vyqCIMrAECjUkClEABQn1UywwUUF1TkWBEEQcKKIAiCSCimGDlWXWYbnFIcdqxxBVcYo7I/V4AFuR/JiuxYyaWAkmNFPVYEkbaQsCIIIiZ8uPEQfrPwR7SZrIleCpHkRL0UUOqxcjLAFCfHZ3t9dIIrOHKABQmrpIWnArpKASkVkCDSHRJWBEHEhIXf1eCbXc347+bDiV4KkeS4BgRHJxVQp1ZCIx3sdprjI6waO8wAgMF5GVHZH82ySn76lgJSKiBBpDskrAiCiAkt3aJTtWZvS4JXQiQ7rrh1ddT2Gc8hwWabAyZJAOVlaqKyzwyaZZX0uMIrPFMBybEiiPSFhBVBEDGhVSoBXFvTErc+FyI1cQ0Ijo5jBQAGKcCiIw7Cqq1HfK2rFII8QytSsqSyyPae4NffarLiNwt/xLKfySWOB9yZ0qo9UwHJsSKI9IWEFUEQUafX6pCHm7b32LCjoSvBKyKSGZdjFR1RAsTXseLubG6mBoIgRGWfw4qyAAC7GoN/73yypR7f7GrGwv/VRGUNRGC8HSseYmGmuHWCSFtIWBEEEXVaezwDK9bso3JAwjdOJ5P7iKIVXgG4DwmOfSkdd2fzMqJTBggAo0uyAbhCMYJhm5RM2Nxtido6CP9YvBwrHQ+voLh1gkhbSFgRMYMxhjd+2I9fDnUkeilEnGnt9hJW1GdF+ME9tS+6jhWfZRW/UsBo9VcBwGhpHlYobi8XYc1dFjBG5bexps+AYB5eQY4VQaQtJKySnCPdFpz39Df4+6fbE72UkFmzrwX3Lf0F9y7dkuilEHGGO1Y8me2HmhY4qM+K8AGPWlcpBPkANRq4HKv4lQLmZUVPWFVLjlV9hxntPf2PLHA4GXY0iMLKbHPKzysRO/qEV6hoQDBBpDskrJKc9346iJ2NXXj/p4OJXkrIbDrQDgA43G5O7EKIuNNqEkuRJlbkIFurQpfZLpcpEYQ77sOBo9WfBLj3WMVeYMiOVRRLAbN1alTk6QEA2+v7d61qW0weB/TNXVQOGGv8xa3TgGCCSF9IWCU5H248BABoMVnlD/FUYat0IN3eY6WylDSj1SS6BIXZWhxflQcAWLPvSL+3szmcWPC/GuwOoWGfSG265RlW0SsDBFypgHFxrEzRLwUEgFElYjlgMH1W3icuSFjFHnlAME8FlMMryLEiiHSFhFUSs72+06O+vqkztb4o+Re93cnkOGUiPeCOVV6mBpOH5QMIrs9qyfe1eGTZNjyagqWvRHiYYhC1DgBGffxSAdtiJKx4n1Uwwsp7myYSVjGHlwLq5FJA8ZDKanfSiAmCSFNIWCUx3K3i1HekTkldt8WOmiMm+Xd+4EGkB9yxysvU4MShorBaV9sGu8P/mVzGGP6z7gAA4EBrT+wXSSQFXeboR60DbqWAKexYjSkV+6yCCbDYJgkrXk1JjlXs6TPHSu06OWAN8FlHEMTAhYRVkuJwMny0SRzyqFGKf6aGztQRVt5nT1tJWKUV7o7VmFIDjHo1ui12bAmQELmhrh27m7oB0EFhOuHeYxVN5PCKePRYxbgUcGdjV8CTEoDrM3fcICMAilyPB33DK1yHVDQkmCDSExJWScoP+1rQ0GmGQafCWaOLAAANHb3R2XnzTqBtf3T25YetXgfQbUGkWhEDhzY3x0qhEHCC3GflvxzwP+vq5J87zXY6MEkTeNx69B2r+PVYtcZIWA3Oy0CGRgmr3YnaFpPf7Vq6LWjstEAQgFNGFACgkxPxwDu8QqVUQKUQpOvIsSKIdISEVZKyVCoDnD6uDIPzMwBEqRTQ0gW8cgaw8DwghoESW70aqfmBNpEetHDHSkpJ66/Pqstsw8eb6z0uowPD9KA7xo5VR4x7rJxOFpM5VgCgUAhy7Pq2AMmAPDWwMi8DQ/IzAdD7Jx54z7Fy/5lODBFEekLCKgkx2xxY8UsDAOCSiYNQYtABABqiIaw6DwO2HqCrHjC3R74/P/B6f34Wmhyr9KKtR3KssjyF1fraNlh9nMld9nM9em0ODC3MxKAcMWKaSpnSg+4Y91h1W+wxDRLo6LWB7z43inHrnGACLLbVixUCY8oMKMzWAiBhFQ9cqYCu3iqdmmZZEUQ6Q8IqCflyexO6LHYMytFjUmUuSo2SsIpGj1VPq+vnrsbI9+cDq92JXVJc9olDxRIw6rFKHxzuZ/ClA82RRdnIy9Sg1+bAzwfb+9yGh1ZcfVwFigzigWGqpWAS4cF7rKItrLKlUkDGENNUUj4MO1urkgdiRxMurHYEEFbcsRpd4ias6MREzPEuBQRcwirVxqMQBBEdSFglIbwM8OKJZVAoBJQYxTP4UXGset2EVXdshNXupi7YHAwGnQpHD8oBQI5VOtHRa5OrTHOl0iiFQpBFtnc54I6GTmw60A6VQsClx5SjMIsODNMJPscq2qWAOrVSPuCNZeS63F+VFX23CgBGS6WAgYYE89EW7o5VS7cFDor8jily3LqbY+UqBSTHiiDSERJWSUaryYpVO5sAABdPGAQAsmPV1BWFL8qe2AurrW5f8vxgg3qs0gd+oJmtU0GtdH3ETJZi170DLLhbdc6YYhRkaWXHqjmFUjCJ8HE5VtGdYwW4JQPGMMCCv95jUQYIQO6xaug0+xxbYbY5sLdZTNMcXWpAfqYWCgFwMlevIxEbfPZYyaWA5FgRRDqSUGE1f/58jBs3DgaDAQaDAZMnT8by5csBADabDXfffTeOPvpoZGZmoqysDL/5zW9w+PDhRC455nyypR52J8NRgwwYUSx+oRZkaaFUCHA4GY5Eehbf3bHqaohsX37gZ0/HlhmRmyEe2LSSY5U28APNfK9Gft5n9dP+NrlMxmxzyA7tVcdVAAAKs8QTCeRYpQdyKqAuuo4V4JYMGMPIdX+v92iRrVOjIk+sWtje0LcccE9TN+xOhpwMNUqNOigVAvKzqM8qHshzrDxKAcWfKRWQINKThAqr8vJyzJs3D+vXr8f69esxZcoUXHTRRdi6dSt6enqwYcMG3H///diwYQM++OAD7Nq1C7/61a8SueSYw4cCc7cKAJQKAUVSeUfEyYBxcazERuqxZQa5xyZaA4K/23NE3j+RnMhn8L0ONIcVZqEwWwuL3YmNde0AgM+3NaK9x4Yyow6njigEAOqxSjP4gOBMTfSFlTGOjlW0EwHdGV3C+6z6lgPyoKAxpQYI0nTgQhJWccF7jpX4M6UCEkQ6k1BhdeGFF2LatGkYOXIkRo4ciUcffRRZWVlYu3YtjEYjVq5ciSuvvBLV1dU48cQT8fzzz+Onn35CXV1d/ztPQepaevDT/jYoBOBX48s8rivhARaRzrKKcY+V08k8HSvpYCMaPVZNnWb8ZuGPmLN4XcT7ImKHvzP4giDgxKGeset8dtUVkyqgVHgdFJJjlRbEKrwCAIqlRNWaI/5nQEVKPITVqADJgPzzlodcAKBkwDhh4Y6Vum94BQkrgkhPkqbHyuFw4O2334bJZMLkyZN9btPR0QFBEJCTk+N3PxaLBZ2dnR7/UoUPN4lu1cnDC1AkHRBweOR6VB2rGJQC7m/tgcnqgFalwLDCTPlgo63HBhbh3KzdTd1wOBkaOy2wO6jMIlnhItpXz4l7n1VdSw++29MCQQCumFQub0OOVfyp7+jFnMXr8M2u5rjftylGc6wA4NjKXADAuprWfrYMn3gIqzGlUoCFj1LA7W6OFYeSAeNDoDlWVApIEOlJwoXVli1bkJWVBa1WixtvvBFLly7FmDFj+mxnNpvxl7/8Bddeey0MBoOPPYnMnTsXRqNR/ldRURHL5UcNxpjPMkBOSbQi13vbXD/HwLHiZXqjSrKhUiqQI/VYOZwMnebI+hzqWnvkn7tjGJ9MREZLt/+UNN5ntamuHa+tqQUAnDqiEOW5GfI2/KDwSLclpvOHCBfLNtfjqx1N8t8knsRqQDAAHDdETKJcv78tZq8lf6Wv0YS7Ubsauz1OKjHG5FJAcqziC2PMZykgOVYEkd4kXFhVV1dj06ZNWLt2LW666SbMnDkT27Zt89jGZrPh6quvhtPpxIsvvhhwf/fccw86OjrkfwcOHIjl8qPGzwc7sO+ICTq1AucdVdLnenmWVaSOlbuwisEcK1cioBGA+IWTqRG/aCLts3IXVl0RijQidnjPsHJnSH4GSgw6WB1OLPq+FoA4u8qdAqkU0O42D4uILYfaxRLjI93xfb4ZY7Kwyo5BeMXYMgMyNEp09Nqwq8l/XHkkxDq8AgAqcjOQqVHCand6lDUeau9Fl9kOtVLA8KIs+XJeTttEwipmWN0Ers69FFDF51iRY0UQ6UjChZVGo8Hw4cMxadIkzJ07F+PHj8ezzz4rX2+z2XDllVeipqYGK1euDOhWAYBWq5VTBvm/VIAno507psRnrwGfZRXVUkBLB2CLsGfLi61yf5XreednciNNBqxrcQmrjhjOpSEioyVAaZQgCLJr5XAy5GVqcPboYo9t1EqFfFsqZYoP9VLvZrwHeZttTnAjKRaOlUqpwDGDY1sOGA/HSqEQ5Nj17Q0ugcj7q4YXZXsMJ5ZHFpCwihnuwskjvIKnApJjRRBpScKFlTeMMVgs4pcBF1W7d+/GF198gfz8/ASvLjaYbQ78d7MYI3/JxL5lgICrx6oxklJAxjzDK4ColgMyxrBNKgUc4yas5D4rcqzSgrZ+ek54nxUAXHbMII8DQg5PwaQ+q/hwuF38XIlWemewuJf0ZqijP8cKcJUD/ljb1s+W4REPxwrwHWDBhwa791cBLsfqCAmrmMFL/QQBUCsF+XK5FJAcK4JIS6J/ijAE7r33XkydOhUVFRXo6urC22+/jVWrVmHFihWw2+24/PLLsWHDBixbtgwOhwMNDWLYQl5eHjSa2H6JxZP/bjqMVpNVipwu8LkNLwWs7zCDMSbH6oaE1QQ4pAOnzELA1CyWA+YOCXPlnjR1WXCk2wqF4IoHBoCcDFeARSTsb3GVwHTFMD55INBltiFLqwrvdRIh/TXzc8cKcM2u8qYwW4sdDV10xj1OHJZKAbssdljsDo8z8LFEDq7QKKFQxOa1elyVy7EK+7PTD71WB3qlA+xYOlaAq4dqh5uw2lbfIV2X7bEt9VjFHovNFVzh/prSqcixIoh0JqHCqrGxETNmzEB9fT2MRiPGjRuHFStW4JxzzkFtbS3++9//AgAmTJjgcbuvv/4aZ5xxRvwXHAMYY1j4XQ0AYOZJQ6BS+jYReWmH1e5EW48tvAQq7lYpNUDeUFFYdUcvGZAHVwwtzIJe4zowy5MCLCI5G97RY/MIv4g0CGMgs7OhC9Of+xZXHVeBRy85Ou7335+wqsjLwEMXjoFSIWB4UbbPbfiBIfWIxB6zzSGXbwJAm8mGEmN8hBV3rGIxHJgzsSIXaqWAhk4zDrb1oiIvo/8bBQkvb1YrBWTHoJTRndG8FNBtlpXsWJV5OVbS+6fLYkev1eHxeUxEB1/BFQCglcMryLEiiHQkocJqwYIFfq8bMmRIxPHcqcD3e1uwo6ELGRolrj5usN/ttCol8jM1aDFZUd/RG56w4v1V+jwgS+pr6W4KY9W+2Xqob38VEJ0eq/2tnnNoyLHyz3d7jsDuZFizryXu9+1+Bj/Qa3TWyVUB90Nn3OOHd99mq8kqp5DGmlgmAnL0GiWOGmTExrp2/FjTGlVhxU8W5WZoYu4O81LAhk4z2kxWqJSCXB7tXQqYpVVBp1bAbHPiSLclqo+ZELHYpRlWXqXM8oBgOzlWBJGOhN1j9frrr+Pkk09GWVkZ9u/fDwB45pln8NFHH0VtcenAgv+JbtXlx5bDKDk7/uAHO2H3WXHHKsNNWEVxlpWv4ArAlQ4XiWPl3l8FUI9VIPY0dwMADrX1xv3khPsZ/EgGvhZli6/1pq4Iw1qIfuFlgJx4BljEcjiwO8dLfVbraqMbYBEoqCXaZGlVGCwJpO0NndghhViUGXVyuTVHEAQ315feQ7FAdqzUnodRvMfKQo4VQaQlYQmr+fPn44477sC0adPQ3t4Oh0M8M5OTk4Nnnnkmmusb0Oxt7sZXO5ogCMDsfs7gA559VmHh7lhlc8cqisJKqvcfK0Wtc3LlIcEROFYtnsKqk1IB/bKnURRWFrsz7vHZrd2uA81IzuCTYxU/vIVViyl+z7nsWGliK6xcARbRFVb9BbVEm1Fu5YA8EXB0qe/kWx5gQe+h2ODqsfIqBSTHiiDSmrCE1fPPP49//etfuO+++6BUuj5UJk2ahC1btkRtcQOdRVJv1VmjilBVkNnv9iWRzrLiM6z0OUCWNCsrSqWAHb02HGgVD9D6lALKjlX4YuiA5FjxLy1yrHzDGPOY13OoPbpx+v3BHatcHzOsQqGIhFXc4ImAnPg6VuLBZyxLAQFg0hAxwGJfswlHohjhH0/HCvAMsODpgN79VRw6ORFbeCmgzo9jRQOCCSI9CUtY1dTUYOLEiX0u12q1MJlMPm5BeNPeY8X7P4mzq+ac0r9bBbgi18N2rLiwikEpIP+SH5Sj71OWkpspljhG1GMlOVb8wKLLQo6VL1pMVrS7pS8eaouzsJLcjvysyA406aAwfvAZVpx4Rq53S+/jWAwHdicnQ4PqYtHtWR9F1yrejhVP/9ve0Ilt9YEdK15OS++h2OAvvEIuBaS4dYJIS8ISVlVVVdi0aVOfy5cvX44xY8ZEuqa04K0fD6DX5sCokmyPuT6B4EOCw+6x8lkKGJ05Vry/ytfZ02jMseI9VkcNEvff2UuOlS/2NHV7/H6wrcfPlrGhVXIlo+VY8VQzInZwV3NQjvj50hJXYcUdq9in1vHY9R9rojfPKlGO1a7Gbuxs8D3DiiOfnKAh2zGBO1J+wyuox4og0pKwThP++c9/xu9//3uYzeJMpR9//BFvvfUW5s6di1dffTXaaxxw2BxOLPm+FgBw3SlVQfeiRNxj5RFeIZUCmpoBpwNQRHZgw6PWvcsAAVd4RXuvDU4nC3lejdXulM+qHyX1b1EqoG92ewmruJcCcscqwgNN91Sz5i4LBudTqlms4D1WRw0y4FB7b0LCK2JdCgiIfVb/XlsX1QCLaL3eg6UiNwOZGiVM0smGTI1SDrTwhlzf2OJyrPyFV9AJIYJIR8L6Nps9ezbsdjvuuusu9PT04Nprr8WgQYPw7LPP4uqrr472Ggccn26pR0OnGQVZWvxqQlnQtys2RNhj5e5YZRYAggJgTsB0xOVghck2ORHQ2Oc6XhrocDJ0me39ph96c6i9F04G6NVKuReN5lj5Zk+jeBbbqFejo9eWgFJAybGK8EBTEAQUZetQ19qDpi4zCasYwRiTT9QcVWbEZ1sb4+pYyamAMQ6vAIDjq8QAi62HO9BtsUclibAtSq/3YFEoBFSXZGNDXTsAMYLd34kqCq+ILX7nWPEBwVQKSBBpScilgHa7HUuWLMGFF16I/fv3o6mpCQ0NDThw4ACuu+66WKxxQMEYw0IpYn3GiZV9PpQDwcMrui328Bwbd8dKoQQyC8XfI0wGNNscslPiy7HSqBTyQUw4fVa8DHBwXgYMelGUkWPlG/53OHVEAYDUdawAOuMeDzp6beiR3I+xUpltPHusuuIwIJhTatSjPFcPJwM27I9OOSBPUIxXKSDg2VPlrwwQiN6Qbadz4M+TDAfuSPmLW6fwCoJIT0IWViqVCjfddBMsFvHDuqCgAEVFRVFf2EBlQ10bNh/sgEalwK9P9D8Q2BdZWpXc5B1Wn5W7YwW4BVhE1me1q7ELDidDboZaLlf0Rg6wCOOgra5FDEQZnJ8hP35yrHzDe6zOqBbfk/GeZRXNM/hFUTowJPzDhXd+pgalUg/nQC0FBKI/z6pNCoqJp7Aa5Sam/AVXAC5hdaTbErY4OtTeixPnfolb39oY1u0HMv5LAXmPFQkrgkhHwgqvOOGEE7BxI33QhgMfCHzxhDIUSKUaoRBRn5W7YwUA2TxyPTLHaqtbGaC/frFIhgT7cqysdid9cXnR0WOTRchpI0XHqstij2vQRzTP4JNjFXvqpaj1shy97DK29Vjj5lLEa0Aw5zipHPDHmsiFlcPJ5Nl88RRWY6RkQMB/1DoA+fvF5mDoCHPu3/xVe9DUZcGnW+opRMYLLqy4Q8XhVShUCkgQ6UlY32Y333wz/vSnP+HgwYM49thjkZnpOYNp3LhxUVncQONAaw9W/CKKmGAj1r0pNuiwq7E7dGHlsANmMWCij2MVYTJgoOAKDu+zCmdIMI9aH5yXgSyNCoIAMCbOsvL+Uktn9jSL/VWlRh2KsnXIz9SgxWTFwfYeGDP69r7FgmiewXc5VmH2FBL9clgKhSnL0cnvUScTg2biIRa64zTHisMHBW860A6L3RFSKbY3Hb02cDM40hTMUKguMSBLK34O8gh5X2hUCuRmqNHWY0NztyVkF7mx04x31h0EANidDL8c7pCfP8I1x8qfY2V3MtgdTqiUYZ2/JggiRQnr2+yqq64CANx6663yZYIggDEGQRDgcNCZLV+8tqYWTgacMrwAo0r8i5BAcMeqMVRhZW53/awXY4ejVQoYKGqdk5cZvrCSHav8DCgUArI0KnRJfWbc1SBcZYDDi7IAAINy9WgxWXGorddnqEi0ifYZfHKsYg8vBSw16qFRKZCtU6HLbEeryRonYSUK8Xg5VsMKM+UTDr8c6sCxleELBd5PaNCpoI7jwXOWVoV3bpgMQQD0msDCsDBbKwqrLgtGBhBhvvjXN/tgdbhcl411bSSs3LDYAs+xAkTXioQVQaQXYX2b1dTURHsdaUGLyQpBECPWw4XPsqoPtceKDwfWGgCl9GePQimgzeGUhwMHOnjnZ3R5alywMMY8SgEBwKBXiyVu1Gflwe5GUViNKBIPoAbl6PHzwY64BVhE+ww+H3BKPVaxg5cC8hlW+ZkaWVjFA5PkWMVLWAmCgElDcvHZ1kb8WNMWobCKf38VJ9BJLHcKs7XY1dgd8smJVpMVb/xQBwA4aVg+vt/bgo1SEiEh4s+x0rgJKbPNETc3liCI5CCsd3xlZWW015EWPHXlBPzxrBGoyA0/Orok3Mh1Obgi13VZFByrbYc7YbY5YdSrMbQg0+92eVJ4Rag9Vi0mK3qsDggCUJ4rHvzxAAtKBvRkt7djJR0sH4xT5Hq0z+CTYxV7+AyrMum1kpepQW1Lj/y3jDXdcnhF/Ep6jxuSh8+2NmJdbStuwrCw99OagETAUAk3cn3h/2rQa3Pg6EFG3HrWCBJWPpAdK69UQIVCgEalEPuAqc+KINKOiE6lbNu2DXV1dbBaPQ+Wf/WrX0W0qIFMZb5/8REMvBQwZGHlHVwBRKXHiqdrTarMDTj4NzfMUkDeX1Vq0MklFy5hFVvHatOBdpTn6sMKGUkEvBRwRLGrFBBA3GZZRfsMfpFbqpnDyaAMcbA00T+8V7M0R/xc4X+7UJ3lcLDanbBKB57xcqwA1zyr9bWtYQ0s5yTSsQqWwjD6FDt6bfIA+9+fOQzjyo1QKgQ0dJpR39Erp0emO/7mWAGAThJWNCSYINKPsL7N9u3bh0suuQRbtmyRe6sAyIlw1GMVO/gsq4ZQSwG9o9YB11Dg7kYxDcJPol8gZGHVT+19bpjhFQfc+qs4Bp3ofnWGmXQVDD/tb8Vl89fgzOpCLJp9fMzuJ1qYLHa55G94oSisyiVnNF6lgNE+g5+XqYEgiGEKrSYr9dNFGbvDKX+ODHJzrADExbHiiYBA/MIrAHH2U6ZGiU6zHTsbuwJGlgciJRyrMFzf19fUostix4iiLJw7pgQKhYBRJdnYergTG+vaUXo0CSvAfykgAGjVSsBsh9lGjhVBpBth1ev88Y9/RFVVFRobG5GRkYGtW7fim2++waRJk7Bq1aooL5FwhztWrSZraHHjPh0rqcfKbnYlBoYAYwzra8XereOrcgNu6+qxCk1YefdXAfFxrFbvbAYAbD4Y+vOSCPY2i25VQZZWdgf5wXL8hFV0z+CrlArkZ1IyYKxo6hKdQLVSkEvG8qTnuyUOPVa8DFCrUsQ1/EGlVOCYSvHzKpJ5Vq1RnNkWK2Rh1R2csOqx2uWRIL8/c7js5k0cnANADLAgRPzFrYuXSbOs7HSSmSDSjbC+zdasWYO//vWvKCwshEKhgEKhwCmnnIK5c+d6JAUS0ceoV8tnyEIaEuzLsVLrAJ0UOBFGOeC+Iya0mKzQqBQ4alDg1DlXKmBoLhMvBXQvocyWHKtY9litkwRjq8katftZ9F0NvtoRWQKjP3hwxfAi1/PESwFbTVb0WGMf9BGLM/jUZxU76qWo9WKDTj6Azs8M7wRIOJis8Z1h5Q5Pt4tknhV/vecnsbDiATDBvn/e/KEObT02VOZn4IJxpfLlEytEIUp9Vi5cqYA+HCs+y4ocK4JIO8ISVg6HA1lZYrlRQUEBDh8+DEAMtdi5c2f0Vkf0QRCE8PqsfDlWQER9Vuuls70TKnL6nQeTK4VXtIc4fJSXAla4OVYGvXggFqtUQJvDiY0HXGdmubiLhNojJjz88Tbc9vYmuXQ2mvDgCp4ICIgiPFs6aI1Hn1UszuC7ZlmRsIo2h9yGA3Ny4yms5OCKxAmrH2pawxpaDgCt8sy2JCtRdft8CeXEhNnmwCvf7AMA3HT6MI+YcO5YbTnUIffFpTtyKaC672EUOVYEkb6EJayOOuoo/PzzzwCAE044Af/4xz/w3Xff4a9//SuGDh0a1QUSfQmrz8qXYwVElAz4Y40oPo4bErgMEABy9K7ho50hOED7W00AvEsBpR6rGDlWW6WkQ3kNURBW/G/VabbHpDTPO7iCw12rg3EoB+T9c9E8g0+OVezgiYCD3IRVPB2reA8Hdmfi4BwYdCo0d1lw5pOr8OYPdXCEcMIHcHdo1bFYYni07AUeHwZ88zgAVypgW4+tX0H03k8H0dRlQalRh0uPKfe4rqogE0a9Gha7EzsaOmOz9hTD7GeOFQDoZMeKhBVBpBthCav/+7//g9Mpfqj87W9/w/79+3Hqqafi008/xXPPPRfVBRJ94ZHr9SE5VpID4+1YRTDLav3+4IIrAIjDR6UDqGAP2sw2Bxo7xYOXyjj2WK336rvg4i4S3M+K72rsinh/3uxpEvfJo9Y55XFMBuR9OdGYYcUpImEVM+rl4cA6+bK8eAor6f2bnQBhpVMrsXjO8RhVko32HhvuXboFl7z4HTYdaA96H63dfBh2EjlWdWuBnhZg90oAomutVoplni0BAklsDifmr9oLALjhtKHQeJW3CYKACRU5AKgckBM4vEIhbUPuHkGkG0ELq59//lkWU+eddx4uvfRSAMDQoUOxbds2HDlyBE1NTZgyZUpsVkrI8CHBoZUCSsJK7+UuhVkK2NRpxv6WHggCcGxl/44VEHrkOi8DzNaqkJPhOisc61RA3tBukARcXRQcq1a3x7yzoTvi/bljtjnkkA9vYRXPAAsuHvOzyLFKBXyVAnJh1WKyxqRk1R1TAmZYuXPM4Fws+8MpeOCCMcjWqvDzwQ5c8uJ3+Mv7PwclLPl7Oi+KJxIihocQWcWTQQqFII+LaOr0/x76aNNhHGrvRUGWBlcfP9jnNhRg4UnguHXxspACpgiCGBAELawmTpyII0eOABDFVEtLi8f1eXl5ctw6EVvC6rHyNSAYCLsUkIc7jCoxyEKnP2RhFeSMnDq3qHX311YsHSv3pMMLx5cBiE4poLtjtTPKpTT7mk1wMvHsdKHXzC25FDAuPVaxcKzE1zqlAkYfX6WAXFhZ7U70WGN7UNidwB4rjkqpwJxTqvDlnafj0mMGgTHg7XUHcOYTq/DNrma/t+uxuqK086J4IiFiuLCyuFzxYE5OvPKN6FZdf+pQnyl3ADBxsBRgEYKrN5CRhZXPHiulxzYEQaQPQQurnJwc1NSIMay1tbWye0XEH95jVR9Kj5W/8IowSwG5q3N8EP1VnFzJdWoN0rHigsa9vwpwSwW0RN+xqnFLOrxgnCisuMCLBPeBqzsbo+tY7WnmwRVZfU5uDMqRZlm1Rf4Y+oMLq/wolkYlyrH6aNMh3PzGTx6zlgYaPBWQDwcGgAyNUi5tinU5IH9uE5EK6E1Rtg5PXTkB7944GaNKstHRa8Ojn2z3uz1/bjRKBTI1iXHcfCI7Vq7PGH6yxV/k+t7mbuxq7IZaKeDaE3y7VQAwoTwHgPi53BJkfPtAhvdP6Xw4Vvw9RI4VQaQfQQuryy67DKeffjqqqqogCAImTZqEoUOH+vxHxBbeY9XQEaQLYe0RZ1UBUQuvCHYwsDu8ZCbYFK46H8OBAcDIUwF7o3/Qy92qCeU5chDE4Y5euZ4+XNzLH/c2dcPuiN6JiT1Sz5Z3cAXg1mMV41LAXqsDvdJBRG4Um/kTlQr4wld78OmWBny1oymu9xsveqx2efSBeymgIAhygEWsZ1klg2PlzXFD8vD6dScAAHY1dfkdtcCFlTjEOokqNbxKAQGgyBD45MRX28XX+IlD8wNWHxgz1BhWKI5z2HywPQqLTW0COVZaNS8FpBPQBJFuBP2N9sorr+DSSy/Fnj17cOutt+K3v/0tsrOz+78hEXV4KWBzlwV2h9MjFtcn3K1SqACt198sjB6rLrMN2+vFcrbjQhBWcpRzkI6Vr+HAgOccK8ZYVA9sXIEcucjP1CBTo4TJ6sCB1t4+/Uuh4H723+pworalJ6L9ucOj1ocV9t0fLwVs6rLAanf2aUqPFvxvqlEqoupAcMeqx+qAyWKP20E4D4bZHYOgkWTgsNRflaVV9TmYzs3U4HCHWU69ixXdSeRYuVOYrcWgHD0Otffi54MdOHl4QZ9t5LLXZJthxYWV3Qw47IBS5XKs/AirL7aLn/1njSrqd/cTB+dib7MJG+vaMWVUcXTWnILYHU7YpRRJX+EVOjm8ghwrgkg3QvpGO//88wEAP/30E/74xz/2K6wOHjyIsrIyKBSxOZhLV/KztFApBNidDM3dFpQa9YFv4B617i1CsqUvR3M7YDOLQ4P7YUNdO5wMqMjTy2WJwSAPCQ7RsarMy/S4nB8IOhlgsjqiemDGHavjhog9g4PzM7G9vhN1raaIhJB3YMeuxq6oC6sRxX3fj/mZGujUCphtTtR39HoMWo4mPCEtN1MdVaGbqVXJ4rapy4KqOByEd5pt8kE/f24HGrwMsCyn7/vXlQwYuwHcQHKVAnozYXAODrX3YtOB9oDCKumGA3NhBQDWLkCfG7CctqPHhvX7xc+8YITSxME5eO+ng2mfDOjeO+UrvEKrIseKINKVsBTPokWLgnKrxowZg9ra2nDuggiAUiHIJVJBRa77668CAF0OoJR6YoJ0rXgc+XGVwbtVgCvUgJcgBcLpZHIqoLdjpVMroFKIB+/+SnXcaeo0Y/mW+n5Tzo50W7DviAmCICaGAa6Y90gDLPiB2AhJTO1siI4TYnM4UXvE5LFvdwRBkEu9YhlgISekxSB6Ot59Vu6hMANVWPHgCvcyQI5rllWsHavEzbHqj4n9RIsnvWMFyOWA8vvHR1/Uql1NcDgZRhRl9Sm59sXECvFzcdOB9pDnfg0k3IWVryoAeUAw9VgRRNoRUysp1nG96Qx3ihqDEVb+hgMDooOVHVo5IO+vOq4qVGElOk3BOFZNXRZY7E4oFYJHcz0gioVQkgEf/XQ7bnpjA15fuz/gdtytqi7OhlFaa2V+dIQVf8wnDs0HEL1ZVvtbTLA7GTI1So95RO6U5/IAixgKqxgOS413MqD7yYraI6Z+B6umIrwU0JfbzcVx7HusxJMiiYpbDwSPFt90oN3n91hKOFYW8aRAodyn2Pf9w3sIzxodXFnfyOIsZGiU6LbYsbd5YJ50CAZe4qdWClAq+jr0lApIEOkL1eilKPyAKGLHCgipz8pqd8pncY8LIREQCK3HipcBDsrRQ+2jh8ygD36W1b5m8cztou9q4QxwlnV9rau/isNL5/a3hD8k2GxzwCRFV3NhtTNKwmq3lDA43EciIIfHaR+MYYAFLxsbGI6V63myOxlqI/jbJyuuqHVfpYDBnwCJBJPkWPGTJMnE2DIjVAoBR7otPoNfeGlvNEcLRAVfjlWWqyfXXSTaHU6s2ilGyp81uv/+KkCMpx9XbgSQ3vOsLDb/M6zEy8mxIoh0hYRVisIdq4ZgItf9DQfmyMmA/Ueu/3K4Axa7E7kZap9hCYEIpceKCxnvMkBOKI7VEakEpuaICd/s9j+bZt1+V38VR3asIohcb5dKH5UKQRZttUdMUfnS5aVqw4v8l+bKyYDxcKwyou9YFcY5GZC7OZzdUY7HTwYOd/gvBeTiOF5x65ma5BNWOrUSo0sNAETXypsWqacwqWZYOZ2AxW1GnlU8ecPfP2abU+4dBICf9reho9eGnAy1XPocDPI8qzTus+JOlM5HIqB4OfVYEUS6QsIqReGR60E5Vj2SsPLnWMmzrPp3rNbVuGLWQw0p4Gd3O3pt/dbnH/ATtc7J1kqOVT89Vowx+SAIAJZ8X+tzux6rHVsPiWd7j610HWRwYXewtTfsnoIWSXTkZmhQlK1FToYaToaolNLskYMr/Itc2bGK4SyrgeVYeQmrpoGXDFgfsBQwfePW3ZkQoM+KO1ZJVQpo6QTg9hkllQLqNUpkS8+x+3uIlwGeWV3ks5zNH/31n6UDvBSwP8eKUgEJIv2IqbBKqvkeA4yQeqx4KaBfx0oSVkE4Vuvk1LzQygABICfDlebXXwnffj/BFRwDn2XVj2PV2WuHVZoZJQjAql3NctiDO5sOtMPuZCg16mQhAohn9NVKAVaHMzh30AdtsugQE/OqpfS+aPRZyY5VAPdwUBxmWcWyxyrejhUfvD1SEqsDzbFijMmvhUG+wiuyeHhF+gwI9oV7n5U3XHQmVSmgexkg4DHLytfJCTlmPcgyQM4E6XkJNOdroCPPsPIzvkLusSLHiiDSDgqvSFF4UEF9ZxAHy4HCKwAgS/pi7Q48DNXpZPhJmvMUyvwqjlqpkEv4+uuzckWt+ysFdM2yCgRPwsrWqnDGyEIwBry2pm+IBQ+u8HbilApBDn8It8+q1asfo7pEFFY7GyI7YHc4mex6BXKseClgQ4c5ZklebTF0rIri7FjVS6Lj1BGFAAaeY9VqssJid0IQgGJj378Xf53GUlg5nUzuO8xKwh4rwOVY/XKoAzavgd68nDk/mUoBze2ev1tdr9sCr2TA2iMm7G02QaUQ5Nd5sBRliyefGAN+PtjR/w0GIFwwyYmATiew/3vZJZRTAcmxIoi0I6bCatu2baisrIzlXaQtxQbuWFn6F7D9hVfIpYCBHau9zd1o67FBp1ZgbJkxlOXKBNtnVSel8FVE2GPF+6sKsrWYedIQAMC76w/IZ8s5ctKhDyeOu2Z1YSYDeh+EjSzmwqrT722C4WBbD6x2J7QqhSz+fFGUrZPnnjWG6br1h1zuGEPHqjlOqYC8FPC0keIBZ80RU58D61SGlw8XZGl9ljLx8rYusz1miYgmq+v9l6yOVVVBJox6NSx2J3bUu0SKw8nQLjnuSe1YWVwnbrwdqy+lMsDjhuTBqA/9PcvdvHQNsOD9sVrJmcKu5cCiqcDK+8XLVeRYEUS6EvQ32qWXXhr0Tj/44AMAQEVFRegrIoKCCyurw4lWkxX5WQGcgn4dKx5eEbjHipcBTqzI9Tm7IxhyMzTY39ITcJZVt8Uul9r467HiQ4L7Kynk/VUFWRqcNqIQVQWZqDliwgcbD2HGiaLodziZ3C8wycdsriH5GVgNoDZMYdVq8u1Y7YqwxIyXqA0rzArYI8Ej6w+09uJQe6/PwIJI4X/P/Jg4VuJrvcVkhd3hhMpHSmS06DLb0CWJ7mMG5yBDo0SP1YH9LT1RG+icaA4FmGEFAEa9GgpBLNlt67HKnzXRhCcCKhWC33KqRCMIAsZX5OCbXc3YdKANR0tpeG09VvBzWbkxCGsJm0ClgFme5bRf7QivDJAzcXAulv1cn7Z9Vn1KAdtqxf/b6wCQY0UQ6UzQ32hGozHof0Ts0agUKMgKckhwsI6VqRlw+v8iCOTqBEsws6y4M5SboZYFlDchO1ZZWigUAn4zWRRTr31fKzt9Oxo60W2xI1urkkWPO4OlyPW61vBKAdvk4bmSYyUl+B1q742oR8GVCNj/AX8sAywcTuaKn46BY5WXqYFCABiLfaACd/SydSpk69Ty0OXdUYrHTwYCRa0DgEIhyCcB3INfookcXKFRJnUvrhxg4dZnxT+7jHp1TEV+yPQRVr4dq06zDT/sEz/Lg51f5Y3sWPmZ8zXQcYVXSH9/LmKtPdLl5FgRRLoStGO1aNGiWK6DCINSow5Hui1o6DDjqEF+BK3TAfS2iz/7c6wyCgAIAHMAPS2unisvwh0M7E4ws6zq+gmuAFyOVX/ChAsrXoZ3+bHleOKzndjd1I3v97bg5OEFcn/VMZW5Pp0f3ucV7pBgb8fKmKFGiUGHhk4zdjV2e6QQhgLv/RkRhLASSwVbw45c/+VQB/KzND5T5Dp6bW5n8KNfGqVUCCjI0qKpy4LmLktMHBSOa3CueB/Di7Kx+WAHdjd1Y2rM7jW+8BMxvv6WnLxMDVpMVlkwR5vuJA+u4MgBFm7OTEsqDAcGAIvrZIC7sPp21xHYnQxDCzNRVZAZ1l2NLTNAo1Sg1WRFXWuPPO8vXXA5VlIpIBdWNvE7ghwrgkhfkuh0GxEq/ACzPlDfjLkDcgSvv1RApQrIlBqY/SQD1nf04mBbLxSCa45JOORl9N9jxZ2hwQG+rINNBXR3rAAx9OLSY8oBAIul6PX+nDg+y6qupSess7PejhUAjCyJPBlwbxBR6xzuWIWTDHiovRcX//M7XPHSGp+9RjwR0KBT+RzmHA1cyYCx7bNq8BId/Lnl7uBAoL9SQCD2ketyImCSBldwJpTnAAD2HTGhQyp35Z9duUkrrKSTQ35SAb/kZYCjwisDBERBMaZMnPOVjuWAFqnHSp5jJQsr8b3FBRcNCCaI9CPso6D33nsPV155JU488UQcc8wxHv+I+MDPqjd0BDhY5sOBNdmAKsCBQLZUEuJnlhXvrxpTZojoLLPsWAUUVtyx8n/gF3QqYBfvsXL1/sw8SSwH/HJ7Iw609sjCapKfpEMeoNFlsQfsDfMHn/HkfiBWLR2w72wIT1gxxuQZVoGGA3N45PrBMByrXY1dsDsZDrb14svtfV8f/PEF7POLkHglA7rcHPG95YpcT59SQMAtcr07Ns93ss+w4uRmajBEOrGy6WA7AJfYzEtWYcUrDtxKAfn7p7HTjFU7xSHp4ZYBcgLF0Q90+neslPJ26VgqSRDpTFjC6rnnnsPs2bNRVFSEjRs34vjjj0d+fj727duHqVMHSsFM8sNL5Wp8zGWS4cEVGf24TFn+hZXTybB8Sz2A8GLW3ZFTAQMIlLpW8cCvMs+/YxVOjxVneFE2ThleACcD5i3fgcZOC1QKAeOls9Pe6NRKeSBzbRiR6/wMd55bmdzICGdZNXZaYLI6oFQIsqMWiHLuWIUhrNxnpf17bV2f61vlAcixa+SXHavOWAsr8fnhc+JGSKJ1X7MJ9gGSDBhoODAn1pHryT7Dyh3eZ8XLAX29n5MCLqwMg8T/fThWLSYrWk1WGHSqsEuQOfwzLOD3zwBFFlayYyWJWElY8csZgzxHkSCI9CAsYfXiiy/ilVdewQsvvACNRoO77roLK1euxK233oqOjvSca5EIeDnZjkCuR28/iYAcP0OCHU6Ge5duwfJfGiAIwPljS8JdLgC38Ao/vRuMMeyoF2PIAwmGYFMBubAqzPY8COLR659IgvGoQUboNX2jpznu5YChwBhzzbFyC3aojrAUcN8R8Yt8cF5GUOV37kOCQz2D6h6O8r89R/ocSLXGcIYVhycDNsfIQeHwx1omiY5BOXro1ApYHU7ZSU1lbA4nGqVyykClgPlB9EJGgiu8IoWE1QHRtZcdq2SaYQW4hJVRElZuPVb5mVq4t4+eXl0Ucdku/0wMd75fKiPHrXuHV0ilgDq3MQZmCrAgiLQirE/Wuro6nHTSSQAAvV6Pri7xA3zGjBl46623orc6IiCjpIPz2iMm/7XcctR6P2cnfZQC2h1O3PnuZry97gAUAvDE5eNxwtD8iNac20+P1dbDnWjqsiBDo8QEqdTE53Ilx8pkdfgdessY8+lYAcCUUUXy4Fyg/6RD10FEaAfXPVaHPAvIvXRoeFEWBAE40m2V1xgKtUfEdQwJwq0CRHdCEMQzrUdCTHrznn31xlrPAcvcscqLQSIgJ16OFe+x4o6VQiHIqYsDoc+qsdMMxsRU0UDhC3lBlOxGQneK9FgBrp7STVICntwzmfSOlev1qlQIHic+zg4zZt0dHnxxoK13QM15C4aApYBOJ9RKQRayFgqwIIi0IixhVVJSgpaWFgBAZWUl1q5dCwCoqamheuI4UpStRU6GGk4Gud+mD/1FrXO8HCur3Yk/vLURSzcegkoh4LlrJuKyY8sjXnNeP2fCv5YGV548vMDn8FJOtlsMe7efckCT1SGfLfQWVkq36HXAf38Vh6de7Q8xcp0fmGpVCujVrseToVHJpZzhuFY1kmM1JMhUL41KgWLJ9Qk1wIK7ONytfPengx5CPj6OldRjFWPH6rBUCsh7rABXPP5A6LNyTz1UBJh9lie9X2IVt55KpYCjSw3QqBRo67Fhf0uP/J5O2h4rH6WAgOvkhFIh4HRp+HUkFGfroFUp4HCysNNGUxW/cesAYDdDEASKXCeINCUsYTVlyhR8/PHHAIDrrrsOt99+O8455xxcddVVuOSSS6K6QMI/giCgurifcsD+hgNzeMNzdxPMNgdu+vdPWP5LAzRKBV789TG4YFxZVNbMAxw6em0+naavdorC6szqwGdUNSqFnMjU6SfA4ogUdKBXK302yV81aTCytSro1Ip+e8e4CAq1FND9IMx7Xo/cZxVGgEWN5FgNDSEuWS4HDPEgiLs4Vx1fgUE5enT02rDs53r5+rg6VjFMBey22OWevVK3MrnhAygZkAdXlAXorwLc0jtjVArIBwRnav2fPEkWNCoFxkoJeJsOtCe/sJJLAT1fr/w9dGxlLnKi4LYpFAKGSCecwuk9TWW4WOrTYwX0jVynZECCSCvCElavvPIK7rvvPgDAjTfeiMWLF2P06NF4+OGHMX/+/KgukAgMLwfc2dDpe4NgHStpSLCzqwHXL1mPL3c0QatS4F8zJ+HcCPuq3MnRiwffjIniyp1Wk1VOmDpzVP9nVLlr5U9YtUgH/AXZvg8ijBlqLP39yfjgppP7PUjipYC1oQor3l/l40CGi+KdjaEfsIfqWAHhDwlukEoBy3P0uPaEwQCAf7uVA7b2xLHHqssSM1ecC8hsrcrDSRkhO1YDQFhxRy5AIiAQ+1JALmCTPRWQ4+qzSmJhxecVcsfKZgKcLreEJ5FOP7o0ancpfy6mWYAFLwXUeZcCAq4AC5XSY1uCINKDsITVwYMHoVS6zjReeeWVeO655/CHP/wBDQ2+5yARsaG6RDyT6vfgPGjHSuyxsrXX4397mpGhUWLx7OOjUjLijkqpgEHqq/A+aFu9qwmMiaU3gRLLOP0lA/qKWvdmeFGWPI8lEDyh8Ei3RS5jCoa2AAdhI/sTxX5wOJkcpBDKgM9ytwCLYOm1OmQBXGzU4cpJFVArBWw60I5fDolnyOPpWJltTnSF8PyHgnd/FYdHru9t7vbbz5cquKLWA7+/eNx6W48NzjAes8XuwN3v/YxPt9T7vJ6/h7JTTFhtTFZh5bADVsn55sIKEMWVxK1njcDi2cdhxomViBb8xE6oJ5xSHbkU0HuOFeAKsCDHiiDSkrCEVVVVFZqbm/tc3traiqqqqqD3M3/+fIwbNw4GgwEGgwGTJ0/G8uXL5esZY3jooYdQVlYGvV6PM844A1u3bg1nyQOW6mg5VpKw0sKCUq0Nr193AiYPiyyowh+uyHVPYfXVDvE1NSUItwroPxmQh0LkR8FJMWaokSMlGoaSDhfoIKxajlzvDsmFOdTWC5uDQaNS9FvS5U44pYDcrcrUKJGtVaEwW4vzJAfzjR9E16otDj1Weun+gdjNsnK5OZ7PaXluBrQqBSx2Jw6keDIg77EKlAgIQH6tO5ysj7McDN/uOoL/rD+Au9//GT3WvkLYZE0tx+oYKcDil0MdsgORVMLK4vb5n1UMCNJXu1s5YLZOjTOqiwL21oUKLwVMt2RAj/AKp9NDwHKR5T7LiiCI9CEsYcUY69MvAgDd3d3Q6QKXmLhTXl6OefPmYf369Vi/fj2mTJmCiy66SBZP//jHP/DUU0/hhRdewLp161BSUoJzzjlHTiEkXGfTGzstaPfVD8EHBPfnWGky0COIZR1/OCE74hkngeB9Vu7JgHaHE6ul/qopo4JLrOrPsfIXtR4ulXmhJwPKCWI+DsKqCjKhUgjotthxuCP43qEa6SBmSH5GSAdJ3KUIxbFyn+vE3/P/Tzrj/eHGw+g02+SSy1inpMU6GZA7VqUGz88wpULAsMKB0WfFHatSY+DPaa3KJWTDiVznr5susx3LNvd1rVJlQDCnPFeP/EyN7FhqVQpkBBjPEHd4f5U6UxwEr5GGhltj+3odEmaJdKoj91ipFIDd6/NUcqx4sAU5VgSRXoT0rXbHHXcAEEMT7r//fmRkuKKeHQ4HfvjhB0yYMCHo/V144YUevz/66KOYP38+1q5dizFjxuCZZ57Bfffdh0svvRQAsGTJEhQXF+PNN9/EDTfcEMrSByzZOjUG5ehxqL0XOxq6cKJ3HHqPJKz6GRBstTvR4MzBUKEHkwtjU2rFyfXRGL+hrh2dZjtyM9SYUBGcqDP002PlL2o9XAbnZ2LzwQ7UhZAMyBPzfPVYaVQKDCvMws7GLuxq6Oq3PItT0yz1V+UHXwYIuJUCtvX6PTnija/yuBOq8jCiKAu7m7rx5g91cvJirOf6FGZrse+IKWbJgPV+SgEBYERxFrbVd2J3UxfOGVMck/uPB8GWAgLi37PLYkeryYphIVYEN7qJ3zd+rMOVx1V4XJ9KqYCA+J03oSIHX0qppb7CaBIKF1Y6o/i/NguwdMRcWFXyyPXWHtgdTqginI2VKpjdUwG90hdlYSU5VjTHiiDSi5A+BTdu3IiNGzeCMYYtW7bIv2/cuBE7duzA+PHjsXjx4rAW4nA48Pbbb8NkMmHy5MmoqalBQ0MDzj33XHkbrVaL008/Hd9//73f/VgsFnR2dnr8G+i4Aix8OHlBDgjeWNeGRmcOAKBSG1tHkIsMLjoA4CvpgOX0kYVQBunCGPT9OFZB9FiFAnesQjk76+qx8t1/JPdZhRDlze+/qjA0YcXLv7osdnT2BieeeSlgicF1IC4IAn4thVi8+u0+AIBGqUBmjM/gF0lOUqzK8ep9RK1zeIJjKgdYdFvs6PSReugP7rKGE7ne4Db7bLNbP568lhQLrwBcfVZAkpUBAn2FlUb6bLDE9vVaatBBo1LA7mRymWk64EoFVPYVrzbvUkByrAginQhJWH399df4+uuvMXPmTCxfvlz+/euvv8Znn32Gl19+GSNGjAhpAVu2bEFWVha0Wi1uvPFGLF26FGPGjJFDMIqLPc8OFxcXBwzImDt3LoxGo/yvoqLC77YDBd5n1Sdy3WaWE4r667H6dvcRNEP8UlaYmqK+Rne4yHB3rPj8qjODLAMEXKmAXXFzrEKPXJdTAf0ciPGkrlAi1/dJCVxVITpWGRqVPBT2YHtwj8HlWHk+h5ceWw69WikPG47HGfyJ0oHt93uPxGT/cimgD9HhGhKcumXIWw6KB9+F2dqgnKI8+QRI6MKKD5Xm5XJv/ljncX13ijlWADwGlie/sBJfr33clCijUAjyCaeaNOqzsgTjWMmlgORYEUQ6EZZvv2jRIhgMYpLawYMHcejQobAXUF1djU2bNmHt2rW46aabMHPmTGzbtk2+3vtgrb8SpnvuuQcdHR3yvwMHDoS9tlTBb4AFd6sEJaANnHz37e5mNLEc8Zeu2CY7evdYHWrvxc7GLigEhJRCyNMF/bkvLmEV5R6rEEoBZcfKT//RyOIwHCsurEJIBOSEGmDhElaeYsOgU+OiCa7ZZv6EYzQ5TXptrKtp8xmIECm8FNCXYzVCElZ7mrrDSslLBr7ZLYbDnDK8IKjt/YXMBAMXVrNPHgIA+GjjIVlMMcZgsooHpqkkrMaV58g/J72w0nJhFXuHlScDplOAhRy3rlb6EFY9rutAPVYEkW6EJaycTif++te/wmg0orKyEoMHD0ZOTg4eeeQROJ2hnZ3RaDQYPnw4Jk2ahLlz52L8+PF49tlnUVIiJo95u1NNTU19XCx3tFqtnDLI/w10RkmR633S5eSo9VwggBht77Hi50MdLmHV3RijlYp4Dx/lZYDHDA5tcKXsWFn8OVZSKWB2lEoBJYfocLsZNkdwr/O2/hwrSRTvbgouyttqd8pzqMISVvIsqyCFVafvQAfAFWIBQHbCYsmwwkwMytHD6nDih5rWqO67x2qX0+989VgNzsuARqWA2eYM+rlLNlbvFIXVaSODFFZZ4ZcC8h6riyYMwtCCTJisDny0STwBZ7E75dd6KgwI5hj1atm59NUzmVD8OVaW2DusPMCiJo1mWblSARV9xatVElaSY0WpgASRXoQlrO677z688MILmDdvHjZu3IgNGzbg73//O55//nncf//9ES2IMQaLxYKqqiqUlJRg5cqV8nVWqxWrV6/GSSedFNF9DDSGFmZCrRTT5TwO+oKMWv9uTwsYAwSDNDiy83CMViqS41ViFE4ZIBA4FdBsc8hnyKNVCliUrYVOrYDDyYJyfJxOhjZ5eK7vA7GK3Azo1ApY7c6gzvjWtfbAycT488IwBONgyXULNjI+UKDDUYOMGC+V58XDsRIEQRYF3+zqO+4hEvjjzNKq5FAUd1RKBYZKQjYVywGbuyzYVi862qeOCM4VzpeHBIcWFmK2uc0+M+jkodJv/lAHxpjH+zVTkzqOFQAcN0QM1gk2aCZuJKgUEHCdcAolLTXVsdiCCa+gVECCSEfCElZLlizBq6++iptuugnjxo3D+PHjcfPNN+Nf//pXSOEV9957L7799lvU1tZiy5YtuO+++7Bq1Sr8+te/hiAIuO222/D3v/8dS5cuxS+//IJZs2YhIyMD1157bTjLHrColQo5DnqXe0lZkMOBv5VKhMoqhokXxFhYuUqMbDDbHHLPTLAx65xAc6x4GaDGbSBxpCgUgixMaoMQQV1mu3xmns8F8rXPkfI8q/4P2HkZ4JCCzLB6mvhBUDDrtzmc8vPoS1gBwG1njYBOrYj6IGl/cFEQbWHlbziwOyOKXe5iqsHf40cNMgR9okEOmekJbY4VLwPUq5Uw6FS47JhyaFQKbD3cic0HO+REwEyNMqozleLB7WePxAMXjMFVxydZ724CSwGrCoL/TBkoyI5VoFJAlVQKSOEVBJFWhCWsWltbMWrUqD6Xjxo1Cq2twZfoNDY2YsaMGaiursZZZ52FH374AStWrMA555wDALjrrrtw22234eabb8akSZNw6NAhfP7558jOzg5n2QManwEWQThWjDF8u1sUNiNHVosXdh4GQhhYGyo8vKLVZMWafS0w25woNerkdMNgCeRYyWWAWdENVRicJx5EBOP48PlOWVqVOEjSD3KfVUP/B0E1EfRXAcCQguBncTV1WcAYoFYKfnvEzhxVhG0Pn4/Ljy0Paz2hcvKwAigEYG+zKaR5XP0RqL+Kw/usUjEZkAvR04J0qwAgPys8x4qL1GKDFoIgIDdTg+lHi274mz/sT7kZVu4UGXSYc0qVT1czofhNBYy9u1oplQLyyPWBDmPMqxTQt7DijpWFwisIIq0IS1iNHz8eL7zwQp/LX3jhBYwfPz7o/SxYsAC1tbWwWCxoamrCF198IYsqQCz9eeihh1BfXw+z2YzVq1fjqKOOCmfJA55qX5HrQQwHrjkiHqBqlAqMHzNavNDe67ptDOBnwjvNNnyxTeznOqO6KGQBlC3PsfIhrLqk4Ioo9Vdx+EFEMMLE1V8V+CCMC8pfDncE3A5wJW+FLazyPefOBMJ1gKwL6CzE03UwZqjl2Otoulb1QQzO5cO4U60U0Ol0nTw5LQRnMS9TfO+0hthj1Si994rd+vJ4PP/Hm+s9yi7TnqYdwEunAnu+iGw/5nbxf1lY8QHBsXeRSo16aJQK2BxM/tsOZNx7pnz2WHk5VhS3ThDpRVjfbP/4xz8wffp0fPHFF5g8eTIEQcD333+PAwcO4NNPP432Gokg8DnLipcCBhgOzA+4jq3MRUZGFpBRAPQcAToP9dubFS5GvSg0GAOW/VwPIPQyQMA1x8rXgGBewhbtUIVQhBWf0+XP7eFMHCz+fX7a39Zv6mVNs1QKGGLUOqfEoINWpYDF7sSh9l65NNAXDUG4OIngtJGF2FDXjm92NeOa4wdHZZ/1nb7TD90ZXiS+x3gyYKqUsW093IkWkxWZGiWOGRzc8G3A9bptMVmDHigNAE2dLkHOObYyFyOLs7CrsRv/XrsfQGo6VlHnl/eAhp+Bb58Ghp8d/n78OVZxKAVUKgQMzs/AnqZu1LaYUCGVSw9UPIWVUg6rkJF6rHQ0IJgg0pKwHKuqqirs2rULl1xyCdrb29Ha2opLL70UO3fuRGVlZf87IKJOtZQMuLe5G1b+wR+EY8WF1ak8Kcw4SPw/hn1WKqVCFlcdvTZoVAqcPDw/5P1wx8pqd/Y5KxjtGVYcV/hD/2eCedR6f8EORw8yQqtSoNVkxd7mwPvlfQyhDgfmKBSCLA77S/HiA3OLfSQCJhLuuny350jUSo+CEZGV+RlQKwX0WB043NG3DLGjx4Yl39eGNOcsHvCY9ZOGF0CjCv4jn6cCWuxO9IbQgO9eCsgRh0qL3w2rJacxlRIBYwZPYD34Y2TuEhdW+hzxf95jFeMBwRyeDFibBsmA/LtGIYhl0vLfTZcj/m/1KgUkx4og0oqwhZVKpcKjjz6K999/Hx988AH+9re/QavVoqqqKtprJIKgzKhDtlYFu5Nh3xHpy7QncI+VzeHE2n0tANx6LwySsOo4GMvleqTknTg0HxlhpIO5lxJ591lFO2qdw52iutaefucZ8eHA/c280agUcnnb+lr/PYq9VodcahPqcGB3hgSZ4sVDCJLNsRo3yAiDToVOsx2bD/ZfPhkMh4MoBVQrFRhawMsBPQ9YV/xSj7OfXo0H/7sV81Zsj8qaogUXMqGUAQJiuAQXYqFErvsqBQSAiycOgk7t+srJ0iZZn1Ii6JaGsTusQN2a8PfjNxUwXsKKB1gk10mFWMB7prQqpeji8uc4U3p/eYdXkGNFEGlFWMKK+Qk26O7uhk6XXAdh6YIgCBjpXQ7YGzgVcNOBdnRb7MjL1GBMqTTvyyANfY1xMmCuW0relOrwEuWUCgHZWj4k2LMcsDlGjtWgXD2UCgFmmxNNXYGb+vsbDuzOcUPEv9GPAYQVd6tyMtQRxZvz/qz+Hau+JV3JgEqpwCkjohu7Ls/rClAKCADDeZ+VlODY1GXGTf/+CTf+ewOapddDU2doYQ+xpMtsw4b9onN9egjBFYD4meKKXA9BWPl53Rj1avxqvGuodBY5Vp4zA/etDn8/CRZWlWk0JNiVCCgdPnHHShZWnnHr5FgRRHoRkk1wxx13ABC/cB944AFkZLhqqR0OB3744QdMmDAhqgskgqe6JBs/7W/DjoYuXAR4Dgj2wbfSQenJwwtc/SKG2JcCAp4DNqeM8j/wuT+ydSp0Wex9HSseXpEV3R4rtVKBshwdDrT2Yn+LKWA8d2uQpYAAMEmaj7O+1n9oCBdC4fZXcYKNXG8MUmwkgtNGFOLTLQ34Znczbj9nZET76rU60N7jfziwOzwZcFdjN95dfwCPLNuGTrMdSoWA00cW4qsdTT5TKhPFmr0tsDsZhuRnYHB+6L0vuRka1HeYQxNWXf6j6689oRLvrBfdcOqxgsuxAoCaMIWVw+4SULwcTRu/OVZAeg0J5kJJq/ISVllcWJmk68mxIoh0JKRvto0bNwIQHastW7ZAo3EdMGo0GowfPx533nlndFdIBE2fAIt+4ta/4f1V0tl/AG7CKralgFxsDC3MDOuAj5OtUwMdZh+lgKKwKoyyYwUAlXmZorBq7cEJQ/33hrUFWQoIiM39CkEsMWzsNPt0ifhBy9AwEwE5wUauu4YDR/85jBRe1rb5QDs6emww+pkTFgy8lyxDo+x35tkIKcDigw0H8d5P4nvkqEEGPHbZODidwFc7mnyGqSSKcMsAOa7I9eCEFWPM1WOV3fc1PL7ciLFlBmw93EmpgE6np7Cq/1k8GRZqaJCl0/WzVqo80MS7x4qnjfbC4WRQpkiwSzi4otYlx7VPKSAPr6ABwQSRjoT0zfb1118DAGbPno1nn30WBoMhJosiwqO62E1YOZ0Bwys6emz4+WA7AG9hFZ9SwKFS+MLUo0oi2o+/ZMBY9VgBYojB//b036gtO1ZBlAJm69QYVWLAtvpOrKttxQXjyvpsU+M2HDgSvCPXVcq+FcFOJ5Mdq0BJeYmiLEeP4UVZ2NPUjf/tOYLp40rD3pd7cEV/yXc8ct3JxDPWd5wzEtedUgWVUiGXQfkaWJ0IGGNycEUo86vcyQuxFLCz1y4feBYZ+r73BEHAfdNG42+fbI/obzYgMLcDTum1kjcMaN0L1HwDjL049P0AophSqlw/A3ErBSzL0UOtFGB1OFHf0Yvy3IGbDMiFUh/Hqo+w4nHr5FgRRDoRVo/VokWLSFQlIaOkZMBD7b3o6mwBmPSB7uMM6Pd7j8DJgOFFWZ6lXu6pgDEcEjzrpCF46f8dgz+eFVkZF08G7HITVla7Ex3SwW20e6wAz3KwQLRJ5WXBOFYAcFw/5YC1EQ4H5vDIdbuT+R2y29pjhc3BIAhAUQzEaTTgYuHb3ZH1WbmGA/cvIIcWZuHs0UU4a1QRPrvtNNxw+jBZmPLXosnqSIpBqbUtPTjQ2gu1UsDkYaGnbgKu125LkMKK96rlZKjlA0tvThpegE//eCrGleeEtaYBA++v0ucCI6T5jeGUA3r3VwFupYDdMf0c5ygVghyzXntkYAdY9NtjZeWlgORYEUQ6EpawIpITY4YaJVIJWe0BqZRPnQmo+h4Y+ywDBIBsySmx9cR0SHCGRoXzjyoNKf7ZF9lS6ZZ7KSA/u65UCMjRRz95bKTkDPY3KJavI6+fAcGc46pEAbzOT4BFTZSEVTCR69zFKcjSQu3D0UoG+IiAb3Y1+w3UCYaGTv89Qd4oFQJenXkcFsw6ro9zmO1WRthtSXyfFQ/2mFSZF3Y/Ew9eaTUFF8ghu5xJFniSlHBhlVUMVJ0u/hxOgIUvYcXnWDGn7KDEmqogezdTHZ4KqJNLAQM7VtRjRRDpRXIeMRFhUy31WR06fEi8wIdbxRiTz/L3EVZqnTgkGIh5OWA0MEgugXv5lftw4FgMceXpi3WtPei1+j4baXe4XLNgSgEB8QAYALbXd3o4cIA474u7BpGWAgL9R64n63Bgd06syodGpcDhDjP2Nodf8sSj1ssifKxqpQJ66WCqszd5hFW4/VWAa5YVH3bdH1ykFpGw6h/eX5VVBAw5GRAUYjlg+4HQ9uNLWKndPiPilQzIhdUAD7CQwytkx8qrx8phAZwOt1JAcqwIIp0gYTXA4AEWzY314gU+EgH3t/TgYJtYInRClY8SIbnP6lCslhk1uEvQ6eZYxSpqnVOQpUVepgaMAXuafB+08DJAQYA8DLk/Sow6VOTp4WTAhrp2j+v4wUphtjYqTf9D+olcr+9Mzqh1d/QaJY6XYupX7zoS9n4aOqLXS+av5y/eWOwOfL9XmlE3sqCfrf3jilsPzrFq4q+bJC0fTSrcHSudERh0rPh7qOWAvoSVQhH3PqsqKRRnoM+y6hte4eVYAYCtRy4FtJBjRRBpBQmrAQZ3rNpbpC9tH44Vd6uOrcz1XSIkJwOmgrCSHCu3A1ketZ4f5ah1d3iIwc5G3+WAPBHQqFf7DIfwB59n5T0omJfXRFoGyHE5Vv5KAfsfmJsMnOZWDhgu9VF05ww+Xo+J4KfaNvTaHCjI0mJ0Sfj9sHmZokAKNrwilLLKtMddWAHhlwP6ElaAqxwwTsmAlf18pgwUXMJKAditrgCSjDwAUoWErVd2rKwOJxz9DJMnCGLgQMJqgMGFVU+HdKDpIxHwW7m/yk+JkHuARZLDHQL3HiueCBiLqHWO3GflR1i1hjAc2B15UHCNp7Da1ywJqwhnWHGG9HN2uaFDFKfJfoDMy9x+qGkJu0mcx62X5kT+WH31/MWCLQc7MHPhj/jPujo4fRy0rZbTAAsiKofl/YHBCqtGaTgylQIGgXspIAAMlYRVzerQAid628X/+wir+DpW8sma1h6fr8mBgsU9FdDmJiI1WYBaSkO0mlypgRADlQiCSA9IWA0whhVmQakQoLNLZzG9HKsj3RaskUqE+vRXcXgpYEfqOFbuPUm8xyoWUescLqz8OlYhDAd2hycDbjrQ7vFlLDtWhdF1rHjkujcNnaLYSPYQguribBRla2G2OQMOV/aH2eaQyzZLDdEoBezb8xdt7A4n7nhnE1bvasbd72/B5S99j62HOzy2+UYqjTy9Ovz+KsDlWHWa7bAFkXTYROEVwePtWJUfD6j04uXNO4Lfj+xY5XheHuchwWU5OjFy3e6US4kHIh6lgPy5VWoAlQZQS58hbo4VQMmABJFOkLAaYOjUSgzJz0AupLOUbj1WB1p7cMVLa9BlsaM8V4+xZUbfOzGUi/+nRCmg1NPS6+5Y8R6rWJYCcsfK99ng1p7gZ1i5M6wwC7kZaljsTvzidrDMe6yGRMmx6i9y3dV3lNwHyIIgyM7rN2HErvPHqVcrZfczElylgLFzrP6z/gB2N3UjW6tCpkaJDXXtuPD5/+Gh/25Fp9mGpk4zttd3QhCAU4aH318FiKWs3PBqC8K1apB786jHql+6pdcr781R64DBJ4o/h1IO6LcUkA8JDpxeGi1USgUqpPlV+wdwgIXsWKkVLmHFyy65Y2XrhVIhQK0U3zxmCrAgiLSBhNUAZFSJAbmC9GWqdyXNXTb/e9QcMWFQjh5L5hwPpb8SoRQKr+AHsl0WH45VTEsBxYOWQ+29fRL8ANdBaH6IjpUgCJgklQOuk8oBGWPYF6WodU6gyHXGmNx3lArOQyR9VvUhDAcOBlcpYGwcqy6zDU+v3AUA+NO5I/Hln87A9HGlcDJg8fe1OOvJ1Zi3XHQ7jiozIj/C94BSISAnI7hZVg4nQ7PU35gKr5uE4+1YAZ7lgMHSn7CKk2MFwPWZMoD7rLhjpVMrXWWW/LnWcGHFZ1lJyYAUYEEQaQMJqwFIdUk2crhjlZGHH2taceXLa9DUZUF1cTbev+kkDCvM8r8DWVjFdkhwNDD46GlpkXqsYimscjI08uDc3T6SAXk8dailgICrHHCdVNrWarKiy2yHILgOXKKBv8j1LosdPVKMfLI7VoDYKygIwI6GLpw87yvc8Z9N+M+6OtQcMfU73yqa/VWAeylgbByr+av24ki3FUMLMvHrEytRYtThn9ceg9evOx5VBZlo7rLgg43iCZFI0gDd4UOC+3OsjnRb4GSiGItU0A14HDagRyzJ9hRWZ4j/1/4PcAT5GuovvCJOPVaAK23U3xiHgYBHeEUfx8pVCggAOimSnRwrgkgfSFgNQKpLspEvOVYbjwiYseAHdJntmFSZi3dumNz/wTJPBbT1AOb22C42Qlw9Vnb5IDoejhXgCgrZ1dC31IanAgY7HNgd7lj9tL8VTieTHaUyo96jbj9S/EWuN0oujlGvRoYm8vK4WJOXqcGMEyuhVAg41N6LDzYewt3vb8GZT6zCCX//Ere8ucHv0GWXMxd5fxXgHv8ffcfqUHsvFvyvBgDwl6mjPAY3nzqiECtuOxV3njsSWpUCCgE4b2xJVO6XC6v+HCs+HLgwS+vfDSdETEcAMEBQevbBlowTe6UsncDhjcHty5+w4j1WcUoFBFwnawbyLCt5jpVPYcUdqx5pG3KsCCLdIGE1ABlVnIXBglhm8ucvO2CxO3HWqCK8ft0JMGYEcaCv1gEZ0nyrJA+w4H0xDidDj9UBh5PJCWYF2bHrsQKAEUWSsPLRZ8XXEGqPFSCWcOnUCrT12LC3uVsWPtEqA+T4i1xPpTJAzl8vOgo/P3guXr/ueNxy5nAcPyQPGqUCTV0WLPu5Hv/v1R/wy6GOPreL9iBkg48wlWjx+IodsNidOKEqD+eMKe5zvValxC1TRuDbu87EJ7eeinHlOVG5Xz44ua41sAvBn0vqrwoCXgaYWQgo3E6WKJRA1anizzWrgtuXX8dK/HxKhGNVO5BLAW0+wiu8hZVVElbcsaLwCgBAU5cZi7+rSfg4CoKIJSSsBiAVqg5kCWbYmQL7ncW4/NhyvDzjWOg1Ibgd7uWASYxerZTPjneZ7Wg1WeFk4mDeUKPOQ6W6RDwjvMtHMqDLsQp9DRqVAhMqcgCI5YBcWPGI9GgxJN935HqqziLK1Kpw6ohC3HleNd65cTJ+fuhcvP27E3Hy8HxY7E7c8PpPfWLDU6UUcPOBdny46TAEAbj/gjEB+8GKDDqMLg1/dpU3fF/bDncG3K5R6q9K5qHSSYN31Lo7oc6zSqZSQOkzZX/LwI1cl0sB1Yq+PVZyKaD4maqTHCszxa0DAF78ei8e+ngbXl+zP9FLIYiYQcJqAKJo3QMAqGNFmHP6SDx++biQhtQCcEsGPBjl1UUXQRA8yq94GWBehib0xxwiI4q5Y9VXWLWGGbfOcR8U7BoOHKAvLgz42WXvyPWGFHSsfKFTK3Hi0Hy8+OtjMSQ/A4fae/GHtzZ4PNZoDgcG3MIrLNE7I8sYw6OfbAcAXDJxEI4a5CfNM0ZwYbW9vh9hJTtWqf26iQu+gis4Q88U/z/wg+x8+MVhc81SSoJSwEE5eqgUAix2Jxq7Bmbkus9SQO5UuaUCAq4eKws5VgCA3U3id+UOH+XzBDFQIGE1EGnZDQAoqByLe6aODi/tLEUcK8Cz/Cpe/VUAMKJIPHBp6rKgvcfTCWkLc0AwRx4UXNvqGg4cZcfKX+R6fYpErQeLUa/GyzMmIUOjxHd7WvCPz3bK1zVEucdKjluPomP12dZG/FjbCp1agT+fVx21/QYLF1Y1LSb0WP0/rkaKWg+eQMIqf5jY5+qwAgfWBt6P2U3sar1cyjgPCAakyPU832mjAwVzoFJAje8eK3KsRHg58b7m+L0mCSLekLAaiBwRHStD+ejw92GUAixSQFi5HCu7LKzyYzjDynW/agzKEQ/I3fuszDYHTFKqXriO1cTBOVAIwMG2XuyRUgej7Vi5R667lwPyA+RouTjJQHVJNh6/fDwA4JVv9uG/mw/DbHPIgQxlUSoFNOqjG15htTsxb7noVv321KEoNUZHAIZCYbYWhdlaMBb4TLNrhtXAed3EjEClgIIQfDkgDxfSZANKr6CZBAgrwJVcOlCTAX2HV/BSQE9hpaMeKxmbw4nD7eJnRDCJrQSRqpCwGohIjhUKRoS/D54M2JHcpYCAu0tgw5Gu2Eetu8PnWbmXA/L+KqVCkOPgQyVbp5adAruTQakQUJ4b/YNqXyle3LEqHkDCCgCmjyvFjacPAwDc9d5mrNopzr3SqRUw6kNPb/SFr5TKSPj32v2obelBYbZWXnsiGBNEn1VTJ/VYBU0gxwpwxa7vWxV4P/76q4CElAICAz8Z0HOOVeC4dTkVkBwr1Leb4ZD67nqsDvlEDEEMNEhYDUSOSMIqPxJhlTqlgNlus6ziWQoIACN99Fm5JwJGMnSWlwMCwOC8DI947WjhK3J9IDpWnD+fV41TRxTAbHPitv+IcdalRn1UhgMDLpHPUyojodNsw7Nfiu/lP50zEpnaxEXfB9NnxXtqBkoJaUwJ5FgBQNVp4v/1m4Ee36MCALgcK31O3+vk8Ir4ChxXKM4AFVa2QHOsPFMBqcfKhXeqaE3zwHx9EAQJq4GGzQy014k/R8Ox6jyU9EOC3V2CZi6sYhy1zvElrNqk4cDhzLByx11YDYniYGB3vCPXzTaHLAxTPbzCF0qFgOeunojyXL3cKxFNAalTK6CSUiojLQf8YV8rOnptqMzPwBWTKqKxvLAZUyY5Vn6EldnmQHuP+HiLswfe6ybq9OdYGUqBgmoADKgL0GcVyLFKQNw6AFQO8CHBcimgRyqg7zlWfO4glQIC+1s9hdTeAepoEgQJq4FG6z4ADNAaxRkp4cIdqxQYEmxw62tp6Y53KWDfWVatPeHPsHLnuCG58s/R7q/ieEeuc7cqmuVxyUZupgYvzzhWPpscTYdFEAQ5cr3LHFmABe+tm1CRk/CBu7wUcGdDl1zO4w4vA9SpFfL7kQiA7Fj5EVYAUCr2BKJ5h/9tgikFjLOwqsp3zbIaiJHrcty6R3iFd9w6LwVUeNwmnfF2rCjAghiokLAaaMj9VcPFJuhwUetdQ4KTvBww20cqYGGchNXwoiwIglj+x+9bTgQMM7iCU2TQyY3g0U4E5HhHrrsG5kavPC4ZGVtmxNNXTkB5rh7Tjy6N6r55X11nb2SO1V7pwGNYYWxEdShUFWRCp1agx+roM1Aa8AyuGMivm6hgNQFWyeH2VwoIAAUjxf95abcvAjpWkosS5x6rQbl6KBUCzDYnmqTZZgMJl7DyUQrI/5ci8MmxcnFAElY8TXcflQISAxQSVgONaPRXcbhr1XEo8n3FEEMCe6z0GiUGS/HCu6TEtEhnWLlz8xnDML4iB+eNLYl4X77wjlxvSKPI7KlHl+J/d0/BWaMDuAZh4F6aGgnJJKyUCgHVJf7LARspETB4uFul0gPabP/b8VLuI7v8bxNQWEmvG6cNsMdP4KiVCjloZyBGrnOR5DNu3duxUlN4BYc7VmdUi5U0+46QY0UMTEhYDTRaxKh1FAyPfF/ufVZJDA8M6Oh1KwWMU48V0LfPiqcC5kdBWF113GB89PuTURSjA1bvyHV3x4oID0MUItcZY9grlQIOL0q8sAKAMaXi69xXgAUJqxBwD64I5O7Jwmq3/z7XYIQVEPcAizLp86NpAA4Jlh0rjx6rwKWA5FgBdVK5+ZnVokt7sK2XnhdiQELCaqARVccqNYQVTwU80NoDu1TTn58ZP8eFR67vlPqs3FMBUwH3eGQ5ap0OkMMmW+uK/w+X5m4LOs12KATXXKBEEyhyXRZW2QPf6YyY/oIrOHnDAAiApQMwNfveJpCwUqoAlfQ+tvifPxYLCqTXQfMAKwW0O5xyj6HOp2PlmcToKgVMb8eqvceKTsnBnzA4B9k6FRgbuAEnRHpDwmogwVh0ZlhxkjFy3WEHnJ5fUrz0ipcaGPVqaFTxe2lzx2q3l2MVaY9VvOB9VrUtJjfHioRVuLgcq/BLAfc2iQdmFXkZ8sFZouHJgNvr+x6kN0jhFRS1HgSysArQXwUAah2QWyn+7K8cMJCwAhI2JJi79XwA90DBvaRPdKy4sJJOfng5VnLcuj29nRn+3VyYrUWGRoWhUnlzDZUDEgMQElYDCdMR6YtWAPKGRr6/ZHOsLN3AcxOB1y/2uJgfyNockluVFV9Bw4XVzsYuMMbQKsWtR6PHKh64O1YNVNIVMfLA6ghKAZOpv4rDe6waOs2yK8vhjlWsSlYHFMEkAnLkAIswhZWcDBjfUsBCybE6MsAcK3dhpVFAjlV3lQJ6xq3zAcHp7lhxYcX7kYdJJ/P2UoAFMQAhYTWQ4G6VscJ15iwSjJKwSpbwioPrgI46oPZbj54D7lhx4hVcwRlamAmlQkCX2Y7GTosrFTBlSgF99VjRAXK48NdjZ28EjlVzcvVXAUCWViW/Vrz7rLiwGoizz6JOsKWAQP/JgME6VnEuBRy4jpXoPGmUCigcZgDS95CcCug9x4p6rIC+wqpKElaUDEgMREhYDST4l280gisAN8fqcHIMCT68QfyfOT1KW3iPFSdeUescrUopH3DubOxySwVMjTlQ7pHrfMDygBJWpiNxTUXjDmpXBI4Vn2E1rDAzKmuKFqN99FkxxtzCK6jHql/cwyv6I1/6LE+xUkB+countA4ULDYfUesQxIRHwHVC02kHHDaxDwuUCsij1iskYcVLASkZkBiIkLAaSLREMbgCcBsSbEqOIcGHNrh+NrsO7LyFVUGcSwEBoLpELAfcWNcGq0P8Ek3KHqvGrcAnfwK6GuWL3CPXHU4GpUJAfpzFaczoOAQ8NRp46+q43aWrFDB8x4qfyU2mUkDALcDCzbHq7LXLpU5UQhoEcXWsPMMU4kXBAC8F9EwEzAQU0qGU2u1EiNUkbgdyrLhjVSkLK5djxZLhpC1BRBESVgOJIzxqPUrCSq0H9Hniz8kQYOEhrDrkH7UqpRxrC8S/FBAARhSJwmrtvhZpTQrokyR0QKa3DXjjCmDdq8C6f8kXu0euA2Kym1IxQIa8Ht4IOKzi/3EiWxeZY9VjteNQu9j8nnTCSg6wcAmrRilS26hXJ03QRlITTo9Ve50ciCBjt7p6fHQ5vm/Pe6ziPCSYlwIeMVkH1IFzwBlWAKBUA4L0HrD1yu+HdHesePrf4HxXKaAgiCNSvPs1CSLVIWE1kOAzrPKjVAoIeJYDJpKuBqDLbQ1uwgrw7LMqSEDks8uxagcgulVCoBk18YYx4OPbXEEkDb94XF2Z7zo4KB5IZYDtdeL/vW1iomQcMOgji1vnblV+pibpAlB4KeCepm6534T6q0KAseBTAQEgs0ASTQxo2et5nfwZKABag+/ba6QBxAkqBbTaneiyxOd9Fw88HSsfwkoQPAIs+Ak/Sxo7VjaHE4elE0W8x0qnVsqzzvYNwCHSRHpDwmqg4LABbTXiz9FyrAC3AIuD0dtnOLi7VQBg8Wye530tQGIcKz7Lin/xJt0Mq01vANs+dP3etNXjat5MDPz/9s47vI0qe//vyHKvsR232LGd3nvvCSGFlgBLXzoEliTUhV1gd2G/+9sNy9I77AKhhlBCDS2QBimk9+4Ux7Edx07cq6T5/XHnzoxklVEfyefzPH5mLI1G15Klueee97wnzOqreGAFAE1nA/KUPGPlqRRQj46AnOzkGKTERcJkEXFY6tvGDU8yglVf1dYEbHg5+N9RWmg6B1ikgFtLYCUIjp0BeWAVnaRI0WyRpYCBDaxioyIQH8WyNbxpezjAFxNYxkolBVSjMrCQ+1h14IxVaXUTLCJTcajrnxU5INVZEeEFBVbhwrkTrGA2Mg5IzPHdefXSy6rUJrBylrEKQo1Vflo8oiKUj5Ou6quqioBvH2L74xaybXWxVZ1agSpjlZXkA0dJvVB9QtlvqAzIU/IaK0+lgEXcuCJDX8YVACAIAvpmWddZVUh1NEGrr1r1L+CHR4Dv/hSc53cHLgOMSQGMGgNRvlBmW2flqr4KCJoUEFDVWYWRgYVd84oomwUQVS+rGNluveNmrIpVxhUGlcS8G3cGpIwVEWZQYBUuyMYV3R2vXnqCXnpZndpq/btNYJUUE9yMVWSEQV6BA3TUw8rUCnx2KzMgKZgITP87kJjN7qvYLx9WoKqxykoOE+MKwDpj1RigwEqSAja3WTxqDFqkU+MKjm2dFc9YBUUK2FIPbH2H7R9dzf7f9Yw7xhUcHlhV2QZW1WzrLLCKCk4fK0DlDBhGBhayFNDoQAoIWEsB5QbBHTdjZWtcwZGdAclynQgzKLAKFyp97AjI0UNgJYqK+UDmQLZtF1gpGavOQaixApRGwQCQGqcTq/XV/2KvXUwKcOnrgCECyOjH7lPJAQtUUsCs5DDJWImidWAVoIxVQrQS5Nd5IAeUrdZ11MNKja3lelCt1nd8CLRI3wWt9UDxhsCPwR3csVrnuJICagqsAtvHCrA2sAgXZClgpAPzCkAJrFob5YyV2SKizdwxg6viKmurdQ5JAYlwhQKrcIGvZvqyvgrQhxTw3DFWmxARBeSPZbe1kwKyyWxCtDFozmS8zgoAUuN1kPU5thb49Tm2f8mLSr1cZn+2Pa0EVtxyne+HBc3V1rV4jVUBedoIg4DEaO4M6F5gZbaIOCZJY3roNWOVrWSsrHtYBfj/xmIBfnuV7XNXvCMrAjsGd/EoY6WyXLeoJuehIgUM24wVr7FyJAVUMlbqx3Y0bJsDc3jGqvhsI0wdNOgkwhMKrMIFbrXu64xVci7b1pwKXpNgblyRNRCIS2f7NuYVPLBKC0J9FccqYxXs5sCNZ4FldwAQgWE3AP0uUe6TA6t98k0Gg4CrR+ahX3YSBnZxMlELJc6dsP49QBkrwHNnwJJzjWg1WxBtNCAnRZ+Zwx4ZCYiMEFDbzGzhT9cGqcbq8A/A2aMssJjx/6TbfgrsGNzFk8CqUwFgMDJrdXvOqE4zVsHpYwUA6VLGqqohfAIrxW7dALRKVveR1gGDIgVssmoD0lHrrBwFVtlJMYiJNKDNLOLkuSZ7DyWIkIQCq3BBzlj50GodUOpx2hraZYkCBpcB5gxTJhEOpIDBqK/iqAOroNZYiSLw9d1sEpbWA5j1hPX96oyVKlj++5wB+PaeiYiNspPxC8VeNGoZIBCwGitA3cvKvYwVdwTs1jlBt73EoowG9JD6tu05VYMzkjlBVqDdJDe8zLbDbgT6XAgIBuDMfn27A3oiBYyIBDoVsn21HNAtKWAwM1bhJAVkmZUYZ1JAlSugIAhycNURAytRFGUpYNc068DKYBBQmM7rrEgOSIQPFFiFAjUlQIsTjXxTNdBwhu37socVwC4SsZ3YfrDqrLhxRRd1YGWdsUqTAqpgWoXnpcYhRpJ+pAbTbv3oamD/14AhErj8zfYX/vRerIllS42297ShCnimL/DxjX4Zrt+wDawCmbGSAv1aN50B5fqqzvpzBFTD5YC/HK6E2SLCICg1NQGhbBdw/Bf2fzxqHhCXCnQZwe47ouOslScZK0AlBzyi3KZJCigt9ji7fviJNEkOHU4ZK2tXQEdSQCWwAtChmwTXNLXJfczyOsW1u192BiQDCyKMoMBK71QeBl4YBrw713HWgDcGTsxWLqS+JEmSAwajzspsAsp2sv2cYUCM1AjTJmN10eBs3D2tB+6d7mMppBtEGARcPCgHWUkxsnNaUChaybaDrgJyhrS/3xitTNRUckDH5/sZqCsDDn5rXeOhd3hgldyVbQNUYwWoelm5KQUsqtC3IyCnbzb7nll9kC3odE6MhjEigJeT315j236XACl5bL/n+Wx7WMd1Vp5krACV5bq7GasgSgElWXZliPWxamw1yVkWW6z7WDkyr1Ds1tmxHTdjxWWAGYnRdpUQsoEFWa4TYQQFVnpn7+eAuQU4tUWZMNsiOwL6OFvFkQ0sgpCxqjzIVv6iEtjkwokU8P4ZvWWJUrD4zxWDsf7P05ASzIzVifVsWzjR8TGZkjPg6T2uz8ed1sytLMAKFXhg1WUo2wahxspTKaBeHQE5fOHgVDWbPAa0vqruNLD7E7Y/Zr5ye4/pbHt0jX5t173OWNkJrGJTHD9OF1LA0MlYtZosuPL1DZj69GrsKqlud79sXhGpwW5dul9uEtwWQotSPuJElf36Kk4oOQP+drQKN7y1CSfP2g+6CYIT1MBq0aJFGDlyJBITE5GRkYG5c+fi4MGDVsfU19djwYIFyM3NRWxsLPr27YtXX301SCMOAgeWK/sbXrJ/jL8cATncTa4mCIEVN67IGcqswnlgZWNeoScMwayNaalXatLyxzs+TrZc15CxOqGysK4+4fg4vcHHmjOMbQNYY8X7qrkjBRRFEUekCYZeHQE5XArICWhgteUtFuTnjgTyRiq3Zw8B4jsza/GTvwVuPFoxtylZU48DK1UvK3ekgKZmlv0PIOmSFLCuxRQy2ZoXfj6MPadqYbaIeG9D++86JWOllgI66mPFFh1i5F5WofEa+BJHxhWcbrzGSucZK7NFxMPLdmPtoTP4dKuOazgJXRDUwGrNmjWYP38+Nm7ciBUrVsBkMmHGjBloaFA+ZPfddx++//57vP/++9i/fz/uu+8+LFy4EF9++WUQRx4gak4BZTsACKwwu2glUG4nw+CvHlacYFqu8/qqHCnrEG1fChgSHPqR1Yb4k5O/AaKZyd+4RMoemQPYVmW5bpfGs8wQgHPuuNdDDAjqHlZdeGBVFTApY2KM+xmrsw2tqG5sgyAAhen6rrFKiYtCjqqeMWA9rNqagc3/Y/tj7rK+z2AAup/H9vVou95QCUBkdWFxqe49lpsS1ZUq9VKaGgSr/o8CnLVKijUiMoItMlWFQC+rnSer8eqaIvn3b3aVoc5mYUSpsVJLAR3ZrTcpx6oe25Hg2R3bHlYcnrE6U9fS7rXWEyv2nZaDP94QnSAcEdTA6vvvv8dNN92E/v37Y/DgwXj77bdRXFyMrVu3ysds2LABN954I6ZMmYKCggLMmzcPgwcPxpYtW+yes6WlBbW1tVY/Icuh79k2dyTQV7LL5k5YaniNlb8yVnKT4CCs1JRKGSs+OeaTCFMzYAodiQlqSoAPrwCWXOPf5+EywAIn2SpAkQJWHnIumyreaP27rYW5Xmk6p0wks4ewrWhhtweApFj3a6yKpALuLimx9p0ZdYa6jjAzMUAZq92fsMxjUq7ynahGrrPSoYEFlwHGd2bZd3eI7cQeByjf91oyVsZoZmIDBDywEgRBMbCo1/d3dXObGX/8ZCfMFhEXD85B987xaGoz4+ud1tJn6z5WjlwBpd/buBSQaqzy0+wHVokxkegsSUb1amAhiiJeX6sE3GW1FFgRztFVjVVNDbtQpKYqq3kTJkzAV199hVOnTkEURaxatQqHDh3CzJkz7Z5j0aJFSE5Oln/y8pys2uudg9+xbe/ZwLiFbH/3J0Ct6sveYgaqpA+932qseGAV4IxVW7OSUeFyLrU5R3MIBc3VJ9m2tsS/heQn1rGtMxkgACTnseyfxaRISe1RLAVqgjQRDJWMFZcBJmQxw5NoafIZIDmgJ66AvL6qh87rqzh9VXLAzEC4cYoisFGSgY+eB0QY2x/TbSoAAajYGxzpsjM8Na7g2MoBtQRWQHANLBK5gYW+A6tnfzqEwxX1SE+Ixv9d0h9Xj2SGN0s3WzuL8uDIqd26o4xVB3QFdCUFBJTs/NFKfdZZbTlxDtuLq+Xfy2uo5xbhHN0EVqIo4v7778eECRMwYMAA+fYXXngB/fr1Q25uLqKiojBr1iy88sormDBhgt3zPPzww6ipqZF/Tp48Gag/wbe01APH1rD93hcAuSOArmMBSxuw6Q3luJqTzNwiIhpI6eqfsSSpaqwC2c/o9B428Y9LU/42Q0RoygHVE3p/9dlpa1Kkk/njnB8rCEqdlTM5IM9YcWOAUKmx4pk1/n8Tn8a2ATKwSJQDK+1SQMVqPTQCK3WdVUBqrI6tYQFTZDxrem2P+DSgy3C2rzfbdU+NKzhqZ8C2Zpa1B1wHVrLlehAMLBL038tq64lz+O/aowCAf106AJ3io3DpsC6IjBCws6QG+0qVBTzrjJUju3XrwCpOyj6Xd7BMR6vJglLJ3MZZYNVdNrDQZ8bqdUkeOqqQLfiXVXes95FwH90EVgsWLMCuXbuwZMkSq9tfeOEFbNy4EV999RW2bt2Kp59+GnfddRd++sn+RTM6OhpJSUlWPyFJ0UpWoJ3aDejcm902dgHbbnlLWS3jfU1Su7kvL9EKr7EKdJNg2bhiGAsEOLKBRSgFViqr72o/BfslW9j/TGI2+39whbpRsD1aGxUjjMFXs23IZKyklWYeWMWls22gMlYeSQFDLLBSSQGzbAOrtiZg2TzmauorNrzCtkOuVXrr2YPLAcMusFI5A8rmPQIQ5cIJVXYGDF4vq0qd9rJqajXjwU92wiIClw3tghn9swCwgPD8fux9+niL8n0tm1dEGuQ+Ve0zVtYZwom9mITzs60lEEOx0bqHlFY3wSKyIJTL/eyhZwOLw6fr8NP+CggC8LeL2EJkXYtJ1/VgRPDRRWC1cOFCfPXVV1i1ahVyc3Pl25uamvDII4/gmWeewcUXX4xBgwZhwYIFuOqqq/DUU08FccQBQJYBXqAEFb1nswlzczWw/QN2m+wI6CcZIGDTJDiAckC5MfBw69tDMmOlCqxqih0f5w1qGaA6EHVEpouM1aktLGOYmAMUTma31ZWx1XK9YxtYxUuBVYAzVu6YVyiBlb6NKzh5neKQ2ykWiTFG5KXGWt957Bdg11Jg9b9982RVRcDhHwAIwJg/OD+2hxRYHV3NnPj0Am/i7qkUkJsTVR5WyQCTmGmHM/QgBdRpxuqpHw/iaGUDMpOi8djF/a3uu0qSAy7bViJLAHnGKkYws0UsgF0f1dhkrOYOyUFsZAQOV9Rjy4nA1HjqAbUMUHByPeqm44zVf39hmcyZ/bIwoEuy3J/wdAfLPhLuEdTAShRFLFiwAMuWLcPKlStRWFhodX9bWxva2tpgsLlwREREwBJKjUrdxWxSjCt6z1ZuN0QoTlgbX2b1Vf52BOTIdVYBrFuwNa7gyL2sQqjGqkEdWPlJCnj8V7Z1JQPkZEgTCUeW69xmPX8sczHjK+PVfgoMfUm7jJUkBQxQk2B37dab28woOccmYqFSY2UwCPhm4QT8fP9kxEXZ1Dvx17nORwsxWxezbY/pQFp358fmDGXvd0stcHKTb57fF/hKClhVxNw6AdcyQACIlv6fgiEF5OYVOsxYbTp2Fm+tOwYAeOLyQUiOi7S6f0KPdHRJiUVtswk/7C0HoDj7xQmqvyfSNmPF7dZZoJAYE4lLBjPVx5LfQuC700doqa8CgG5Shv5YZT0sFv1k9E7XNuPz7Wy+c8dkpgDJlmpJy8gZkHBCUAOr+fPn4/3338eHH36IxMRElJeXo7y8HE1NbIKRlJSEyZMn48EHH8Tq1atx7NgxLF68GO+++y4uvfTSYA7dv5RsAprOAjEpQN4Y6/uGXMeyR+eOAwe+8X8PKw4PrM4e8+/zcJprlaAxxzawCvGMlT+kgKZWoGQz2y+wX3/YDp6xqj1l3y2PG1d0HcsyYJ3y2e+hUGfFAys+5gBnrHiD4PoWk6bJwtEzDRBFICUuEqnxQWwu7SYpcVHIsFdf1SRN/Jtr5JV7jzG1ANvfZ/sjbnF9vF5t1701r0jpymppzS3A6d3sNi2BVRClgHo1r2hsNeHBT3dCFIGrRuRhau/270mEQcAVI5iC5qNN7DubSwFjRel/OiIKMNp8XnkGS/V/f81otsDzze4yVDfqM3vna7jVelcHjoCcvE6xiIwQ0Nxm0ZXj3lvrjqHNLGJUQSqGdmWKnexklo2kOivCGUENrF599VXU1NRgypQpyM7Oln+WLl0qH/PRRx9h5MiRuO6669CvXz888cQT+Oc//4k777wziCP3Mwe/ZdteM9s7X0XFASNuZfvrX1JqrPydscodwbbH1/r3eThlOwCIzL0uobP1fXLGKpQCK7V5hR8Cq9JtrJg9Ll2pxXBFTDJ7fQHgtE3WymwCTkqBWtexbNupgG31XmclikrwlyIFVgGuseKSEVEE6ltdywHV9VXOZDMhgzpQryv37lz7vmKBWlIXoOcMbY/Ro+26txkrQ4Ti/FoitRuJSXH9ODmwCoIUUKfmFf9cvh8nqhqRkxyDRy/q6/C4K0bkQRCADUercLyyQZECQppY29ZXAe2kgAAwODcZ/bKT0GqyYNk2nblV+okTVdoyVsYIg3zM0TP6cAasa27DhxvZ4hzPVgGUsSK0EXQpoL2fm266ST4mKysLb7/9Nk6dOoWmpiYcOHAA999/f3hMPhyhrq+yx6h5bKWsZJMitfFnjRWgrAAfXcsm3f5GNq4Y2v4+2bwihKSAjX6WAqplgO58NjIdyAHLdzEpS0yy4h7IgxS9B1aNVUphebJUs8l7AAUoYxVtjGDOYdBmYBFq9VUu8WVgtfVtth12o32LdXt0nwZAYJkddXuKYCJnrDwMrABFmcCz0zqXAqbpUAr4495yfCBJ8v5zxWC5NYI9uqTEYlJP9t3x8ZaTaJakgDEWKWiydQQEFClga4PsoisIgpy1WrKpuEOYWGiVAgJAITew0Emd1ZJNxahrMaFnRoJVNjNLCqzKa8lynXCMLswrCBWVh1kDyIgooMd59o9JzAQGXqn8Hpfu3CXLF+QMYaujLTVK7ZM/kY0rhrW/LxTNK9Q1VrWlvg9O5cbAGmWAHNlyfY/17cVSfVXeGKU4PlQyVjxblZjNGqQCit16gGqsAJXlepPr95pbrYdKfZVLrAIrLwKbigPMlEWIAIZdr/1x8enKoowe3AFbG5WFIE+lgICqzkpSKug9YyVJAc82tMKsg/qZ07XN+NNnuwAA8yZ1w/ge6S4fc/VIltX/ZGsJmqTsc4zoLGPFAwnRqon9nA5kYiGKoiIF1BBYKZbrwc9YtZosePNXVvIwb1I3GAzKQiVlrAgtUGClN7gMsGCidTNcW8bOV/b9XV8FMBlKtylsv2il/5+P23zbOgICoWleoZ7Qi2bfFfUDkmzvN7bvqjGwLbLluk3Gigdq+WOV20Klxko2rshXbosLbI0VoFiua7HmLZJWakPFat0l3FwB8C5jxU0res9W2j5oRU+26w1StsoY6/x73RW2Ml+d11ilxkVBEACLCJwLcm2RxSLigY934lxjG/rnJOGPM3pretx5fTORFh+FM3UtaGhlNVZRcsbKWWAFJXMO1jT84sHZAMLfxKK6sQ11LSwIzdMQWMnOgDqwXP9yxymcrm1BZlI05gzpYnVfqNZYfbOrFOc9vVpewCP8CwVWeuOAFFip3QDtkdlPkecFIrACJHkN/B9Y1Z+R6pAEIHtI+/tDzbyirUl2iJLd6bTKAUXR9Upz2U7WrDImRclAaUUtBeROm6KoNAbuqnIYlDNWJwLbKNpdbJsDA4p5RWNVwMaepLFJsMUiyiu1YRNY+SJj1doI7PyQ7Q+/2f3Hy7brqwIjX3aG2rjCGxm77Xe9zqWAxggDOsXpw8DizV+P4dcjlYiJNOD5q4ciyqht+hNlNODy4bnWt5kd9LACmFw1QjK0UAVWAHDtaLbYE+4mFlwGmJkUjZhI1/01uTNgsKWAFouIN6Rm0beML2z3P6JkrEJLCvjsikMoOtOA73brRBYd5lBgpScaKpXMg6vACgAu+A8w4HfAmPmuj/UF3aeybckWoKnaf8/DpYbpPZUgSk2omVfwbJUhUgl8tDoD/vAo8GQ34MjPjo+R+1eNc93Txpa0HmxcrfVKf62qI8zkwRjDJKAcHqi01Np3EdQLtlbrgJKxsrQF7P+GG1i4qrE6Vd2EFpMFUREG5HaKdXpsyKD+/+CmDe6y93P2XqV0VRZ13KHLMCA2lZ3j0HeejcFXeGtcwbE1KdKUsQpeHysASE/wby+rspom7Ct1rl7Yc6oGT/5wAADwt4v6uy25vXJEntXvkc5qrAC7BhYAM7Ho2wFMLNyprwKAbunsf7S0pknuGRZodp6sxvVv/YbDFfVIjDbKNXFqeI1VbbMJDS1BXqzRyOHTdbIiopQkjAGBAis9cegHACKQPVgpundGWnfgd28CGX38PjQAbIKT1pNJ2Y7/4r/nkY0r7NRXAaFnXsEDq7g0ZbKv1Rnw8I/M7e+rhY6lj+rGwO4SEQl0lv5/uByQywC7DFdqlAA2WUjIYvt6rrOyF1hFxiiToABbrruSAh6RslWF6fEwRoTJV7J64cXTjBU3rRh+s/sLBgCTLw+4nO1/dhtrGBws5MDKi/oqgGWfklTyJLekgMGRAfnTwOLk2UbMfv4XXPDCL7jufxux9cTZdsc0tZpxz0fb0WYWMbN/Jq4ZlWfnTM7pkZGAkQVKHXOkyUnGClD1srLOWAmCgGul5w9nEwseWGmRAQJAanwUkmMjIYrAsQDLAY9U1OHO97ZizsvrsO5IFaIiDHj0wr52TU0SYyKREM0WzMp1ZA3vjG93K1Ls0urQyrSFKmFyFQ8TeH2VIzdAPRAIOaAz4woAiA6xjBWfyMelKfbmWgIrcxtwTuobVnsKWPG39sdYzEoj3wIPAitA6Wd1ei/bcuOKrmPbH8vrrEItsAJUTYIDFFhplAIWSbr37hlh4ghoNjGTG44nNVblu5nzncEIDP2952OZ+U+g50y2OPHhVUDRKs/P5Q2+cATkpKkcYDVJAaWarpbA11gBQHoiC6zO1Pk2sGo1WbDgw22obmQLF+uOVOHyVzfgxrc2YefJavm4fyzfh6IzDchMisYTlw3y2FH4qpHs+8QgAAatgVVrY7u75gztEvYmFsUardY5giAgL5Vl+XijdH9Tcq4Rf/xkJ2Y8uxbf7y2HQQAuH5aLnx+YjKtHtc9WcWQ5YIjUWX23R1nYCjUJY6hCgZVeaGtWghUtMsBg4U5g1VzLVop3LHHvOcql5pf2rNaB0DOv4IX88WlAihRYaZECnjsOWExscgmwFfyja6yPOb2HTWKjEoHMgZ6NT66zkgIre8YVHF5npVcDC1Fs3xyYE+gmwTHazCvCzriiudr6d08Cqy1Stqrvxd5leYzRwFXvAb1mseBqydWBMd+xxVdSQMDawCIEpIBpUsPrqgbfSgH/9e1+7CypQXJsJJbOG4OrR+YhwiBgzaEzmPPyOtz2zhb875ej+FAyinj6iiHo5EXz7QsHZmNY1xRcPDgHAn8tI93LWAEdw8TCXSkgwKztgcBkVd5YW4RpT63Bp1tLYBGBmf0z8cO9k/D0lYNdZtmyQqjO6lhlAw6UKwsqoRIMhjoUWOmFY2vZl3BSFyBrULBH45iCCawm59xx4OxR58dueh3Y/Qmw8h/az994FqiXJmKdHUgced1VS61iuKBnGtUZK0niqcW8ovIw22b0U5pCf7XQeoLEg6CuY7T3+LElgzsD7mVW8NUnAMEA5I5qf6zee1k1nAFMTQAEIMlGThvgJsFcCujKbr0oXK3WeQF/S617k/qWOmCX1CTeE9MKW4zRwJXvAr1mS8HVNc5rFv2B2rzCW9wOrIIrBeycyJsE+y5jtXxXGRavPw4AePaqwRjdLQ1PXD4IKx+YjMuGdYFBAH7afxr/b/l+AMw2e0JP19bqzoiNisCyu8bj+auHKv/PDjNW9musONdIGZFwNbHggVV+mjuBFTv2lJ8Dq3MNrVj03QG0mi0Y2y0Nn981Dq9fPwI9M7W5dfKMVXkI1CvxbNXwfCZjrWsxaXKpJbyDAiu9IMsAZ3vnGuVvohPYJB5wPjkxtQCb/sv2a09pNzs4wwqMkZxn37gCUPpYQQyNOit1jZVaCuhKX195iG3TewLn/509tvoE8LMqUOWNgT2VAQKKFLDqiFKHkjXQ/uuvdgbUIzxblZQDGG1WpwOcsZLNK1xmrMLUETAxW1nRdydrtftTFgSk9QAKJ/lmTMZo4Mp3ghdc+TRjpTKw0LkrIKAyr/CRK+Cxyga5F9UfpnTHtD7Ka5qfFo9nrhyCFfdPxiWDcyAIwJC8FM3W6ppxFVhFOc5YAWxMfbISw9LEotVkkbM5WmusAKCLZNxzys9SwKIz9RBFICc5Bh/ePhpDu7rXAzSLW66HQI3Vd1J91eXDcpEsLfRRDy7/Q4GVHrBYgIOSa5We66s43B3QWb3C7k+s3cAqDmg7dwVbYXSYrQKYEYGRrRqFRGAl11ilK4XnbY3WvX7sUSVlrNJ6sjqJi59jv//2GrNDt1hUsj0vAqvEbNZgWrQofYPUNutq9F5jxSWKtvVVgKrGKjBNgnmNVZ2TGquaxjZZIlWYHiY1Vvz/Oi4VSJTMTrQGVqIIbHmL7Q+/2beLTDxz1fsCwNwS2ODKlzVWnmas2hqCkuFXzCu8z8w0t5lx1wfbUN9iwqiCVDxwfi+7x3XvnIAXrhmKLY9Ox9I7xmi2VtcMz/65aV7BEQQB10muc6+vLcIDH+/Ew8t24/Gv9mLRt/vx9I8H8fKqI9hfFgLXNxtOVTfBIgIxkQZ0Toh2/QCJLinsml7i54yVvJCVkeBRvV2OXGOlbyngybON2H2qBgYBmNE/U860kYGF/6HASg+UbGbyt+gkJrXTO7zO6thaZrBgiygCG15m+4LUw4LX77iCB1aunA551ioUDCzUGavIGGVy5crAovII2/IV6h7TgSG/ByACX84HynYATWfZRdxRPZoWBEGRA8qNhu3UVwFKxqrmJDPO0BuOjCuAwNdYxbrOWB2tZBf5rKQYxEd7KOXUGzxjFduJBe2AdmfA0m1A+S4gIhoYcq3vx2aMAq54B+h9IQuull4PNPg50BZF37kCAiwbO/wmJg92lNVXo7YEbwt8nVW6D6WAf/96L/aX1SItPgovXjvUpYtmWkI0oo2u+yi5jZyxcs9uXc2coV0QHxWB07Ut+GxbCZZsKsbi9cfx+tqjeHHlEfznh4O45KVf8c764yHlHrhiH1tE6Zoa51bgwqWA/p74H/WyplWpsdJ35uf7Pex9GFWYivSEaORINWx6H3c4ECZX8hBn/1ds22uWtb21XskazPrDNJ1lPa1sJ+FFP7OGs1EJwMDfsSwID5hcwaWArhrdxiQDDRWhYWDBA6t4KWOSnMcmWjUnrftE2cIzVmrpz8z/Bxz5icn2Pr2F3ZY3itmme0Nmf+DEr8rv9hwBATZRNkSyflC1p+wHMMFEbg6c3/6+ANdYJXJXQCd9rPhFPmyyVYAqsEoFIE0ItWaseLaq/1yW8fIHxijgisXAf6cBp3cDO94Hxt/jn+cCmJmHWcrW+CKwEgTg4ue1Hx8Zy2omRQsLCKK11ZL4Cm5eUdnQClEUPXblW7atBEs2nYQgAM9fPRSZSTG+HKZ7uKyxirM+zg5JMZH4aN5YbDp+Fq0mC/sxm9HSZkGr2YKiM/VYd6QKj321F5uOn8W/Lx8kW33rle/3lGHRd+wafsVw92ztuRTwTF0LmtvMmhoLewLPWHXr7Nl3brYkBdS73Tqvr5o9gC1uZYdIpi0coIxVsBFFJbDqe3Fwx6IVg0ElB7TjsLX+JbYddoMyQec9klyhRQoIKCu1oZaxAhQDC2fOgI1nlcep7ZVjOwEXPcv2uRW7NzJATqYqkE3t7ngCaIhQgilXdVa7PwU+ug6oP+P9+LTiNGPVmW0D5groWgrIe7Z4epHXJd5krI5I3ydDrvP9uNQYo4DRd7D9zW/6VyLHZbMxycFZOBMEJbMShDorbl7RarKgzsOmqodP1+HRz/cAAO45r6fXRhReozWwcpKxAoCBucm4dUIh/jClO+6Z3hMPzuyDv1zUD/83ZwDev3U0/npRPxgNApbvKsMlL/6KA+X6XUjcdOws7v5oB0QRuGZUHm6bWOjW4zvFRSImkk1J/ZlV8VXGqrqxDU2tOlRtgBlrbCuuBgDMGsDk2DxjRU2C/Q8FVsGmfBebDBpjmdQrVHBku16+Gzi6iq2Qjr5TyTxV7HNt1lB/RskmdHZRbCxbrodSYCVNBrjlujNnQO4ImNSl/cW7zwXAgN8pv/sksBqgOp+DbBVHS52VKAI/PQ4c+MY9V0hvcRpYBbjGSiUFdCTl4VLA8MpYSTVWsZ3cq7FqawLqStl+loetA9xhwOXse6T6BMuy+4sdH7JtfhBl3rIzYOB7WcVERsiZFk/kgKIo4tEv9qCpzYyJPdOxcFpP1w/yN3KNledSQFcIgoBbJxRi6R1jkZ0cg6OVDZj78jp8ulWDo2yAOXS6Dre9sxmtJgum983EP+YMcDszKQiC3y3XW00WnJAcCz0NrJJijIiPYtk0vVquf69yA+SZXT3UWOk1EPU1FFgFm31StqrndMVJKBToJmWsSrdZmzDw2qp+c9gEPL0Xq7NqrnY9uTojZas6FTheCeTwwErv5hUWi6qYn2espEl/jZMeJvZkgGpmP8nsxJPzgC7DvR+nOkPoyLiCo6WXVVWRUkO2/T3gzCFt47BYgP1fA7UaMxxqRFF5TrvmFaoaqwDULHApYJtZRIvJfkbE29VTXWIvY6U2snEED9Sjk9lj/U1UnFSzCGDz//zzHC11Sh+/Ubf55zm0EOxeVgme97JaX1SFTcfOIspowJO/G4QIgw5cc126Akq3+6CmbXh+Jyy/eyIm9eqM5jYL/vjJTvzp011oMeljklpW04Qb39qE2mYThnVNwYvXuK59c0SXTpLlup+cAYvPNsJsEREfFYHMJM+yx4IgyFkrvVqufyfVV82WslWAImEMVo2VyWzBpP+swrX/3YjTOpdRegsFVsFm/9ds23dOcMfhLsld2GRctDATC4BNhnd/yvbHLmTbyBggrTvbd2VgwZ0DO/d1/fyhYl7RXA2I0gXQHSkgz1ilOQis4tOA+b8B8zex19hbohPYinp0spKNdISWXlZHVY6RogVY+X/axvHr08DS3wMfXet+8FNfway0BYPyGqvh5hXmloD09ImPigCfA9qrs7JYRByvCuMaKytXQA2BMv9/6pQfuJYTI6Q6xUM/+KeFwM6PWJYorSdQOMX359dK0C3XPTOwEEURz65gizLXjuoqTw6Djpd9rNwlNT4Ki28aifvP7wVBAJZuOYm31x33ybm9oaapDTe9tRllNc3o1jkeb944ErFRntdG8YyVv5wBlfoqzxwBOcEOUpxxpq4Fm46zxdxZqsAqJ0XJWAXDDGVdURXO1LXgYHmdXHcZrlBgFUzOHAQqDzIzgF4zgj0a97GVA256nZkadB0H5KqyKBlSoOTKwKJCqsNy5QgIhI4UkMvOopOUvkruSAEdZawANlnyZZbzuo+Bu7cDSdnOj9PSy4pb8Q+6igU6+78GTm52ft7T+4DV/2b7pdvcl2fxDFpSF/tmHlHxTHILBKTOShAExcDCjjNgWW0zmtssiIwQkNtJJxNGX2C3xkqDFPCsVDOY6l5thlek95Cy7yqbd18hikovv1G3s9rUYBHkJsFqAwt3+PVIJbacOIdoowF/mNLdH0NzH4tFsVF3KQW0b7fuCQaDgLvP64k/z2LXx/VF/pc07y+rxaLv9uN/vxzFd7vLsKukGlX1LRBFEc1tZsx7dwsOnq5DRmI03r1lFDp5OWHmluv+ylh5a1zBkTNWOsy8/LivHKIIDM5NRm4nZX7Ax9xisuBcY+CbBH+5g/Vru2BgtscZzVBB3xYz4Q43reg+VVs/Er3R/Txg4ytsEt1Sr0xMxi2wPi6jP7DvS9cGFlodAYHQMa+Q66tUDmc8m9JYCbQ22g+O5B5WPdrf5y+i4l1LMAFVYHXc/v1mE3D8F7Y/+k62cLDjfeCnx4CbltvPRphNwBd/YIF5ZBybkKx92r26Q2f1VZz4dCYXbKgMyAQ+KdaImqY21NoxsDgqXeS7psaF14WmUVVjxVsLtNYzWZwzRzpuxtIpgIEVAIy8jWVYt78HTHnYNxlggGXyKw+yJsmDr/bNOT0lyIGVJ5broijiGSlbdd3o/OC6AKoxNUF2u3S0sMUbY7f6LrDijOvOMu87T1Z75bLoClEUcc9H23HodPv/mdjICCTEGHGmrgWJ0UYsvnmU1STeU7gzoL/qgHwlvc7RQb2SI3hT4FkDrBdIo40RSE+IQmV9K0qrm5AawKxRc5sZP+5lcvBLhuQE7HmDRRhdzUMQXl8VKm6AtuSPAyKiWK3Qz39nQU5qd6DXbOvj5IyVk8BKFLU7AgJATArb6j2wUjcH5sSkAFHSBNNe1spsUlbv1c1A9QI3r2iosD9xKN3Gat9iOwHZg4GpD7O+RCfWAYdX2D/nuudYX66YZODmb9n/VfF64Pg67eNy1hyYIzcJDqwzoD0poOIIGEb1VQDQVM22sZ2krKr0v+4qayVLAQv8NDAH9JrF6hUbq9gCkK/YLGWrBl8d/IUzvUgB67UHVmsOncH24mrERBpw55Ru/hqa+8h1aoKSAbfFx1JANX2yExFlNKCmqU3+DvEH64uqcOh0PeKiInDRoGwM7ZqCDClAbmoz40xdCyIjBLx+/XD0y9HQT00DvJfVKb9LAb3NWEmW6zqTAp5raMWGo2wxV11fxQlWL6tVBypQ32JCTnIMhncNQP1skKHAKlicO84cAQUDa1YZikTFKXbqm95g27F3tZe8ZErNZ88ccNxUtq6c1SMJBm3BRKiYV9harQMsYyPLAe3UWVWfYJkbYyyTtemN2E7K62/PwILLAAsnM3v25FzF2vqnx9v/D5zeB6x+gu3PfpI1Ox4qmQr88pT2cWnNWAEBs1xPjOHOgPYyVlJgFU71VWYT0CItdsRKWVqtzoDBkAICQIQRGHET2/eViUVNCXBgOdsfdbtvzukNsnlFsAIrybyiXpsUUF1b9fvR+chI1Em2ClA5AsY7lnfKduu+D3wiIwwYIAUyO0uqfX5+ztvr2Ofxd8Nz8dK1w/D5XeOx6dHpOPj/ZmH1H6fgg9tG47t7JmJcD99Z3/OMVVlNEywW39YBiaLos4xVtk6bBK/Ydxpmi4i+2UkosHNdUcYd2EzbVzuZ2+vFg3Ng0IP5jJ+hwCpYcNOK/PGKDXQoojY6iE0FBl/b/phOBSxIMDU7lo9xR8DUbtqkOKFiXiE3B7a5+HA5oL3AqlJy0EvrEdy6DGfIBhZ2AituXMF7nQHAhPtYMFaxF9j9iXK72QR8eRcLJHvNYjVZAGvYKkSw+r1TW7WNSQ6s7DQH5gS4SbDSy6p9xupoOPawUn8eefCtJbCymJUgPdBSQAAYegOTrJZsAsp2en++LW8z05aCiUrGPpgEWwroZsZq1cEK7CypQWxkBO6YrJPaKo4r4wpAkQj6IWMFAEPy2Kr/DqlXka85UdWAnw9UAABuHFdgdV+0MQIF6fEY3yMdPTJ822w6MzEaEQYBbWYRFR5Y8zujqqEVNU1tEATvzYL0WmOlNAVun60CFNON0urAjbuuuU3+X7p4cPjLAAEKrIIHD6z6hZgboC3qwGrkrfY154YIpS+VIzmg7AioQQYIqMwrQiVjlWp9e7KUsbLnDCgbVwSwvspdHNVZtdQBJZJJRbcpyu1xqSy4AoCV/wRM0kVz/QtA6Xb2fl70nFJ/1akAGHQl21/7tLYxndMgBQxwxioplksBHddYFaaHkRSQ97CKTmaZIEBbk+C6MsDcChiM9h0d/U1iJtDvEra/+U3vzmVqAbYuZvt6yFYBSm1bkKSA3LxCi906y1ax78AbxubLDYZ1g5bAyo9SQAAY0jUFALDjZLVfzv/O+hMQRWBK784BbQVhjDAgS6ql87UckGeruqTEIibSc+dCAMiRApSzDa1obtOH7X1tcxt+PcKuaxcMtB9YcWfAQGasftx7Gq0mC7p1jkd/H0lG9Q4FVsGgtgw4+Rvb7xOiMkBO5gBmNhGXDox0MonghhSODCxkR0CNq7shZ15hk7Fy5gwo97DSYX0Vh9dZ2UoBj/8KWEws62BbKzPqDjbJrilmk9eKA8DqRey+Wf9u70Y44X4AAnBwOXDahVW/xeK8hxVHrrEKTJNgLgW0zVg1t5nliUNYZaxkR8AU5bZEycDCWcaKywBTurKFmGAwUuoztfsTpU7ME/Z+wTKiiTn6kXl72sfK1MJqgflij4e4Y17x0/4K7D5Vg7ioCMybpKPaKo5aCugILgX0U9+wIbkpAIB9ZbU+n9jXt5jwyRb2XXqTTbYqEHDLdV8HVmqrdW9JijUiVgrO9FJntXJ/BdrMInpkJDjMJCoZq8AFVlwGeMngHL8ZregNCqyCwYFv2DZ3FJAU4qlRgwG47Sdg4VZlAmWPTCmwcpSxkh0BtQZWKrv1IPRk0IxsXmEj90x2UmNVeYRtHfWw0gOOMlZFdmSAnKg45roGAGv/A3x+B8tS9Jxp3zWtcy8lo/uLi6xV/Wl2LiHCeV1aoDNWDuzWT1Q1QhRZ4BVWPT3UPaw4WjJWwXIEVNN1LFsAamtk/ac8hZtWjLhFydoFG3elgK0NwIZXgOcHAx9fDyy+SMkye0B6PAus6lpMTgMBURTx3E9MCn3juAKkJegsWwWoMlZOJuiR/pUC5qXGIjU+Cm1mEfvLfKva+GxrCepaTOjWOR6Tenb26bm1kOMny3WuEOjug4UsQRB0V2f1w17JDbC//WwVoO5l5eWYT6wHXhqpXO8dUFXfImfRLukgMkCAAqvgwG3WufQk1ImKt16htoczZ0BRdK85MKAEVpY2VrulV+yZVwAupIBSjZWepYApBWxrW2N1dDXbdrMTWAHAkOtYJq7pLHMBjE4GLn7OcUPYSX9k2z3LlIDTHry+KrmL88lsgGusZPMKGyngsUrfNKrUHeoeVhxeY1V/2vHjgmVcoUYQmJwZYCYWnizYnNrGpLCGSGD4jb4dnzfIUsA658c117JFjOcGAT88rATD9eXAro89fvqkWCOipJYCzuSAP+47jb2ltYiPisC8iTrMVgEapYBSYGVqYtl0HyMIAobkpQDwrRzQYhGxeP1xAMDN4wqCYjTADSxOVfvWqr7ojG9dWJU6q+Bbrje3mbHm0BkAwEwngRXPWJ2ubYbZG3OQ/d+wecrez50e9u2ecpgtIgZ2SQ4/91snUGAVaBqqFAvpULVZ9wQuBawqAtpsAqGaEqC1jtVXaO3bFJXAHAQBfcsB+QTekXlF7Slrl7ymc8pjQiVjxSegNadY3x7BABROsv+4CCNw3t+U32ctcp61zRrITC0gAr8+6/g42WrdiXEFAMRLK7ANgZEC8horWylgUTg6AgLWPaw4mjJWx9k20Fbrtgy6in23VB1mfajchbsK9p8LJGT4dGhe4UoK2HQOWPUv4LkBwM//x76DUvJZ3eO0v7JjNrzksTpAEASkSc6AjuSAFoviBHjT+AKvm836DXdqrACp75XvGSzJAX0ZWK05fAbHKhuQGGPEZcOCUOsIxXLd1wYLvsxYAcExgnDEr4cr0dhqRnZyDAZ0cVzHlJEYDYMAmCyiW60P2sEXjF1I6r/eocgAOxIUWAWag98CohnIGhT8SUQgScxm/ZtEs5KR4XAZYFoPwKjxYioIKmdAHRtY8ImmbcYqMYsFkqLZesLJszKJOUrvGT2SkgdAYHbCXFbHs1U5w5xnMPtcxOqnJj0IDLHjImnLRClrtesjJTNli5YeVoDiwOmPjNWpbcCLwxXjAqilgLYZqzANrJxlrOrKHU/M9SAFBFhmh8tSecNzrTSeBXZ/yvZHzfPtuLzFmRTQ1Aq8NQtY82+2SJXeC7j0dWDhNmDEzcyAIyqRfU8f+cnjIfDAqqrB/oRu1cEKHCivQ0K0EbfrNVsFuCcFBELKwOLtdccBAFeNyEN8dHBkrHLGyodSwBaTGcVnWQash48yJ1wKqIcaqx/3MRngjH6ZThUQxgiD3GjbqzorHlA5kdSXVjdh0/GzEATgosHZDo8LRyiwCjTcDbBvmMgAtSIIStaKNwLmcHmgVkdAjt4NLNqalYmMbWBlUNUCqQ0sZOMKHcsAAcAYrWSaeFDDbdbVboD2EARg+mPAtL84lgCqyRvJemJZTMC65+0fo6WHFaBIAdsa7Tc39pTWBuCz24CqI8AuxU4+SZYCWmesZEfAcDKuAFSBlarGKkEKrNoaHfed04MUkMMt/4//4l6GZtu7gLmFNcXOHemfsXmKswbBW95kQVNcOnDFO8BdG1lwySW1McmKrHH9Cx4PQbZcr7MvBVy27RQA4OqReUiJ02m2CtCWsTIYAKPUNqTNt5I2DjewOFHViHMa3BZdcaSiHmsPnYEgADeMLfD6fJ7ShddYVTdB9FH9dHFVIywikBBt9JnLZJZOaqxMZgt+2s/szJ3JADk+qQ2TM1aOA6tvdrFs1ciCVDm711GgwCqQNNcqk89wqa9yB9nAwsbhjddX8cBLK2oDCz3Cv3wMRmWsauzVWck9rHQsA+TIvayOszoCnrGyZ1zhLbzWatt7wMbXmLb7+DqW4Wuu0Wa1DrCMRIQ0afNl1uqnx4GzRWy/4Yx8syIFdJSx0nFW0hPsZayi4lgtHWDfGbDpHGsODriWcgaCrEGsRqqxynHfPXtsf49tR96ubcEgkMgZKxspYFM1y1QBwHl/ZRJGe66MY/7AvseOrQVKd3g0hDTJwOKMHQlSXXMbftrPavDmDtVhU3Q1WgIrQOUM6J/AKjkuUs547/BBo+B3pNqq6X0z0TXNTtuUAJEjuQLWt5jsNlb3hCKVDNBXNa3ZOqmx2nriHM42tCI5NhIjC1NdHs9fX99krM44PETtBtjRoMAqkBz+kTmXpfdS+jp1JGQDC5uMFW8OnOFuxiqFbVt0HljFpdmfaMmW6yp5m9zDSsdW6xx1nVXFXvYlGxnP3C59TcFEIG80ywh8/yfgk5uAxRcALw0HnugKHFvDjnM1MRcEJWvlzBmwpgQ49IO2wvOjq4FNbyi/N1TIu7J5harG6lxDK841st8L0oM3gfELTXZqrADnTYJ58BKfoQ/5a2QMq+0DtDenrjvNspUQ9LloJgdWddZZuF+eZoFt5z7AkN87fnxyLtD/Ura/4SWPhpCeKEkB69tnV37cexotJgu6h0KvG65CiNQYWPkpYwUAg7mBhZeNgmua2vDZNqacuHl8gXeD8pK4KCNSpfo6X8kBfW1cASg1VsGWAv64jy1InNc3A5ERrqf0PLDyLmMlfc831zApsQ1Hz9Rjz6laGA0CLhjYsWSAAAVWgWXfl2zb0WSAnIz+bKsOrCwW4MxBtq/VEZATrXMpIM+I2MoAOdzAwkoKKNVY6V0KCCi9rM4dV2xXC8Zrr5NzB0EA5r7KemH1vYRZY6d2Z7UfnOhkJSvqjHgNvaw+vRX48Ergq4WA2cmqaXMN8MV8tt9vLts2nQPMLHDiNVaNrWaYzCxIOyplq3KSYxAXpRM7bl9hL2MFOA+s9CQD5HQZzrZaA6uSTWyb0c9+djrY8OyKaFFqfs6dAH57je2f/w/X1vBjF7DtnmX2+++5oDOXAtrJWH0prW7PGdJF/y6ZmjNW/m0SDMBnzoAfbz6JxlYzemcmYmw3B9erAOLrXlZFPjauAJSMVWV9K1pMwWkSLIqibLM+o59rGSCglgJ6+NqaWtgCDcfOdZRnqyb0TJeD5I5EmF3VdU6fC9mXsh5XNAMBz0jVnGQT0phkVp/T1sjkWaluFizLUkA/mFdYzMDGV4H8cUCXYZ6dw5FxBcdWCmg2AWePsv1QkALyjFX1CaCWfZE6tFn3BWndgQuebH97ayPLEsWmKnV3zpAzVg5kDM21ykR5x/ssI3r5m6yuzJbvHwZqS5jpwpyXWCsF0cKyYUnZcsYKYHLATvFR4VtfBdjvYwU4dwaUHQF1FFjljmD9qLQGVrzhe54fsrW+QG200NrA5Jkr/8EUFIWTgJ7nuz5HzhB27LG17Ltx5j/dGoIj84ozdS1YF0q9brQGVlH+z1jxwGpnSTVEUfQoKDVbRLyz4TgAlq3SQ2CbkxKD3adqcOqci9eurYlZf3efpiyY2eGoHzJWKXGRiDYa0GKy4HRNS1Dkk/vL6lByrgnRRgMm9Up3/QAombZTnroZ8nmN/Du71nFEUezQMkCAMlaBZfDVwPXLWHFzRyS2k2LYwOuquCNgei/3m2n6s8Zq9yfAj4+yJrae4qg5MEeWAkqBVfUJNtExxihBl57hsrvKw6xhIODauMIfRMWxIE9LUAW4bhJ8chMLjmKSWcC//2vgw6va16cc+BbY8QEAKZsWnagK2pgc0BhhQFwUq1nhcsCwra8CgEYPMlayI2CB34blNl1GsG3ZTjn76JSTUiCeN9p/Y/IGg0GRrrXWMQfL3Z8AEIAZ/097Tdi4u9l26ztuf+86Mq/4dncZzBYRg/NSUBAKLplcCqi1xsqPgVWf7ERERRhQ3diGE1WePc+qAxUoOdeElLhIzBmij/o22XLdlVxtxwfAstuANU84PEQURVXGynffudZNgoNTZ8WzVZN6ddasfuBNgss8zQbaZqhsFij3ltbi6JkGRBsNmKHBTCMcocCKCCxynZVkYOGpIyDgX1fAPcvYtvKQR7IXAI6bA3N48FRTwuoeuAwwrQebCOkdPhGuK2O9WhKylPdXz7hqEnxC6jPX5yLg2o/ZhPToKuDduUpGpqEK+FqaZI5bCOSPZfu8d1G9ysAixtrAgq+eFobCJNIdzCal3tFhYGUnY6VHKWBqNxZYm5qB03ucH2tqAUq3s329ZqwAJRBoqQd+lHpTDbrKvYW+HtPZd3VrHQuu3ICbV9hKAb/cwdwA54TK6rYWu3UgIFLAaGME+kk1aZ7KAdceZt9VcwbnIDbKjnFJENBsuc6/O2xbuKg4U9+CumYTBAHI93FWSa6zqg1OnRWvr5rRL1PzY/iYz9S3oNXkQfPqdoGV9e9fS9mq8/pmICFIlv3BJgRmb0RYYWu5LjsCejAh5xkrRxbOntJUDRStVH4/usaz8zhqDszhNVat9WzCzo0rtDZJDjYJmUCESh7XbYr+3NDswSUjjpoE8+xb/jjmcHjDl8wopWQTsPgioL4CWH4fW6nr3BeY+qjq3LwBsdoZ0NpyXc5YhZsUUL3AwY1lODywqj/d/nF6lAIaDNrrrMp2skxzXLr7cuZAwo1B9nwKnPiVZcan/cW9cwiCUmv122vasnkS3LzibGMrzBZmoFFc1YhtxdUwCMBFg0KkyN1tV0AHTZl9hLd1VpuPs8Wi0TqoreJwy/USV1kVrjqoOeXwEL6QldcpDjGRvg0cecYqGE2CT55txP6yWhgE5uSolbT4KERFGCCKwGlPAkLbwEq1QNlmtuDz7ey96KgyQIACKyLQ8MDqtJSpkh0BPQis/GVecfBbwKKaMHAbcXdxlbGKjFUm4jUnlVW39BCorwLY5LOTyoXPHzbr/sBZxqqtSZlI549j27yRwM3fskDy9B7glbHMiMZgBC59jbnIceTASu0MqDQJNltEHKsKUykgz+ZFJ7eX9TqqsTK1KhlhPUkBAUUOWOIisJLrq0bre2GBZ1g2vMy2Y/6gyJHdYdCVzMGx9hRre6CR1LgoCAJLzp+V+i59LfW6Gdc9HRlJMc4erh/cDaz8mLECgKFeNAqubW7DgXK2MDkiv5OLowMHlwK6zFjx79naUw57znEZoD8WsrLkJsGBlwJyGeCowlR0csMgwmAQvOvB5UQK+PP+06ioa0F6QhSm9dEe7IUbFFgRgUXuZbWPSYfOSMGER1JAjeYVZhOzQ9YKnywUTGTbo6vdaxTKaXARWAHWzoCyI2AIWK1z1Pbmwaiv8gRnNVYlW1hQnZhtnUHJ7A/c8j37e3lANukhVtCvRpYCKoFVkspyvbS6Ca0mC6IiDLLcJWyQrdZT2t+nrrFSf5aqiwGITG7JXzu9IGestjg/Tu/GFRweWFlM7Dtpwn2enccYDYyWak/Xv6D5u9EYYUCnOMXAQhRFfMFXt4eE0Oq2XGMVfCkgAAyWGgXvK611251u24lzEEUmkdNTYMu/GyvrW9Dc5uRv4pP6tkZlYccGnrHyZX0VxyfNdj2EywC1NAW2xavaMNvXWXUd/eA31jrmyhF5iDJ23PCi4/7lRHBI7wUIBjYJO/kb60tkjPVstVqrecWKvwHP9AEO/ej6nE3nFOvwmf9iq44NFe17b2nBVcYKsHYGDDUpIKC8bxn9lMmz3uFZJXsZK7UM0Db7kNqNBVeFk4F+c4CJ9zs+t+piI2esmtpkq/X8tDhEGHSc3fAER1brAKu/A1jNEm8GDFgbV+gt25MrZawqDzn+jhFF/RtXcNQ9wib/2Ttb+BG3sO/G8t1KDzkNpEvOgJV1rThQXofDFfWIMhowa0CIfHcAihmFS1dA6f42/0oB89Pi0CkuEq1mC/aX1bl+gIotkgxwRL7rxrKBpFNcJGIl2Z7ToEW9OMadaW3wh3EFJ1g1VlX1LdhynC1kne9GfRVHaRLsRcaKf89L78Gxygb8crgSggBcM6qr++cNIyiwIgJLZCzrPwQAez5j2869AIMH2met5hXH1jCXt9WLXK+uHpBkgBn9gOxBihzMEzmgO4HV6T2KrCGUAqtCKas38IrgjsMdZOc+OzVW3LiCv++2JOUAN34FXPkuEBHZ/n47UkBeY1XXbMIxP8pSgo6zwCoyRqm7UjsD8voqPRlXcOLTlYzsqW32j6k+werGDJHts5d6g0/0U7sDI2727lxxqcCQ69j+ro81P0xtYPHlDjYRntY7QzZ40T2mVlZPB+iijxXA3Ol4o+CdbsoBN0uT85EF+pEBAuxv4u51DuWAFou1I12t/TorxWrdf1LAQNdY/by/AhYR6J+ThNxO7htyyM6AnmSs+LyGq4ykBcolm1i2akqvzshLDbPG925CgRUReHg9FW+Y7G5jYI4W8wqLRekNVbpNmTg7gssA+1/Ktlze5m5gZbEoX0COzCsApcaBZ8kSsrTbhuuBvpcA9+4Bxt8b7JFoh5tXtNYxRzeOqVXJPuSP9+zcTlwBa5uVjFVhuNVXAc4DK8B+ndVZVcZKj7iSA/L/l+zBykRar/SazQL/C5+2vyjgLj1nsC1/DTSQnsgCqzN1LbJ72JxQkgGqs0+aAyv/2a1zuBzQnTqrVpNFPn5Egb4yVgDQRQoYTlU7eP2aq5mslWPHvbe5zYyTUi8sf0oBKz112PMQXl/liQwQUDJtXmWseMlCwxk0t5nxyRbWNua60fkOHthxoMCKCDzcwIJLsTy16I6WAqvWelZHZY+6MusL27oXHJ+v8Syz1QaAfnPZtnAy2x7/1S0HLLTUAKKkDdeSsaqVLgqhYlzBEQQWHIaCPTwnJoUZTwDWUpKyncw2PjYVSO/t2bntuAIqUkBT+DoCAqqG2A4maXKdlareUY89rNRwOaCjjFWo1FcBwOCrgD8e9p3JDH9tqg63bxrqAC4F/GFvOU5VNyEx2oipfXRWW+cMblwREeU6OJX7hvk/sBrigYHFntIatJgs6BQXie46/D7qkuKika1tjaydjNWJqkaIIpAYY5T/93xJanyUXEvkkcOeBzS0mPCL1FB7Rn/PDCJ8k7GSrpENVfhuTxnONbYhJzkmtD7PfiKEZkNE2MANLDieBlbqzI6jrNXZIunYFAACcPgHx/VSB5azFbDMAUyeCLD9uDS2UlnioohdDZeZRSWyYm9HcPMKTqgFVqGIICjBrrrOSi0D9DRQVAdWFraCqUgB2xRZSrj1sAK8y1jpUQoIqJwBt9iXEYdSYAX4to4tLlWRLWv8buRNgrecYP8rMwdk+dwC269odQQEAiYFBIAhUsbqWGUDqhtbnR8swWt0RhSkQtBbfSOAXFe9rFRyawB2a6zU9VX++BvVTYIDVWe19tAZtJosyE+LQ+/MRI/OoWSsPAmspEUUHli11GDpBma8dc2oruFXO+wBFFgRgSfDJrDyxBEQYCuGfFXQUZ1VlRRY5Y4E+l7M9te/aP/YfV+wbf+5ym0Gg5K1ckcOKNdXuZBYpNgUeaZRYBUQ4uw4A6qNKzyFB1aiWQ40uBSwoq4Fp6QLWTc/yFKCjsvASuUMCLBARY89rNRkD2LZzYaK9lKjljrgtNToPDdEAitfw//uks2aDrfNGoSUDBDQ7ggIqOzW/WteAQCd4qNQIDW/3Vmirf0I71+lt/oqjlxj5UgKqK6vAuxKAY8GoKY1K4nXWQXGcp3LAGf0y/Q4WMyRAqtzjW1oanXPSVKe26R2AwS2KHKs+CSMBgFXjfSgfUMYQoEVEXhSuymNZaMSFDmcJ7gysOAZq7TuwPh72P6uj9uvbjWeVQKnfpda3+dJnZWr5sCc2E5KcAhQxipQ8DorfpGwmIHijWzfm8DKGKWYNEgX/kTJbn1/GcuqJsdGolOclzUuTeeAX5/VLMEKCO5mrOpPM+mlYPDuO8CfRMYyq32gfZ3Vqa3MFCc5D0juEvix6YG8kWxboq3OiptXACx7NVZHTWk14U7GKiowfaw43MBiR3G1y2NFUbTKWOkR3svKYR0Qr2Pl6gM7UsAiP1qtc+SMVQAs19vMFvx8gGXqZnhYXwUwFUVcFHdddOP/s7VRKa2IS5fnN2lCLWb0z9SVZX8wocCKCDyGCCWN3Lm3d/U5rgwsqiTjirQerCag6zjm+rfxVevjDnwjyQAHAuk2rnw8sCrZ7LpnFkeLIyDApDlqOSAFVoHBNmN1ei+ri4tKZP8D3mDjDJgUy4KoFqm4uVvneO9lKT/+BfjpcWD1E96dx5fIfawc1VhJ9QA8Y8VlgMm5LCDVK2o5oJqTUpYmVGSA/kDOWG1lixMu4OYVAHDRoGwYI0JsCuKRFND/NVYAMIQHVift93NSU3SmAeca2xBtNGBAjhe2+36E97Iqq2mCxWJHhsszVtlD2La2tJ1c96gsBfRjxiqZj9P/gdWukmrUNZvQKS4Sw7p6nmlUSxjdGjf/jjdEAtGJsMSy+U2aUEumFSpC7FuNCBv4KrCnjoCcaI0Zq9RubMuzVlsXWwdJshvg3Pbn6JTPpEqiWZGLuUJrYAUozoAR0fpduQ835CbB0sW5eAPbdh0NRBi9O7dNk2DeIJhT6G19VUs9sEf6f3Wjh5Df0ZqxqpcCK73LADmODCzk+iqd96/yJxl9meqgtQ44c8Dl4WopYMjJAAE3AyspYxUA8wpACax2ltRAdNFWhGerhuSl6LaRa2ZiNCIMAtrMIirqWtofIAdWg9nW1GyVwRdFMSAZKy5ZDETGat0RNq8Y2z3N61ompZeVGxkr9bxGEFBhYTVefRJbMK57iGWf/Yg+P1FE+DPiViBrEGs06Q1yk2A7mSSLWbFaT5N6Z/WcwRzfWmpZcAUwo4mj0gS1/6XtTgPAfTkgz4RoCax4xiqtu2f9vAj34RkrLtl01b/KHWyaBNv26PH6Ir//a6Vu48wBK2v3oOJOjZUo6t8RkMMt18t2KO6jFosif+vIGStDBNBlGNvXYLuekxyL6X0zceGgbDkQCCk8qrEKjBSwb3YSIiMEnG1oxYkq58GcUl+lTxkgABgjDHL9kt06Kx5YJXdRvnNrlTqrM3UtqG8xwSAAXdP811eJj9Ejhz03WV/ErinjursoMdCARxkrVWAliiIO1rEM9HldDbo0QAkWQQ2sFi1ahJEjRyIxMREZGRmYO3cuDh482O64/fv345JLLkFycjISExMxZswYFBcXB2HEhM/IGwnc+QuQO9y788iBlZ2MVU0Ja+YYEaVkggwGYPzdbH/jq6x30YFvWDYqa5ASgNnibmAlW09rCKz4xJL3hSD8D6+xaqhik3zZuMLD/lVW57YvBeR4nbHa8YH17yd+9e58vsBiVj6DjgKrBEkKaG5lQZjeHQE5aT1Za4e2RqBiH7ut8hD7eyPjmHNoR0aWA7p2BjQYBPzvxhF4+dphoTkR8yRjFSApYExkBEbks0Dpo80nnR675QSvr9KncQXHqeU6D6ziOwNJUo1jjVJndUSSAXZNjUO00X8LltkBkgI2tZqx7UQ1APgkO6SM252MldJSY8fJahxtZOcYkuag3U0HJaiB1Zo1azB//nxs3LgRK1asgMlkwowZM9DQoLjoFBUVYcKECejTpw9Wr16NnTt34q9//StiYqhIjoBz8wouA+xUYJ0JGngFa8RbVwrs+bR9U2B7FE4CIABn9is1Is7Qal4BAEOuYxm8SX90fSzhG9QZq6oj7CJtjAFyhnp/bhspYLTRgMgIZRLplUPVuRPA8V8ACECfi9htx3UQWDVVK/uOAitjtLLQUFcWOlJAgwHoIv1fnNrKtlwG2GW4b5rthjI8Y6fRwCKk4bI+HdZYAcAtE9hn6YONJ1DXbL/vYkVtM05UNUIQgGH5Og+snFmuS4FVtZACc6IUWKkMLOTWFn52YM2SMj9n6lvQZvZfk+AtJ86i1WxBdnKM94tzUIJWt5oEqzJWH/xWjCqRzb9iWnRkoqQDghpYff/997jpppvQv39/DB48GG+//TaKi4uxdetW+ZhHH30UF1xwAZ588kkMHToU3bp1w4UXXoiMDGpCRsC5eQW3Wk+1yUIZo4Exd7L9NU8Cx9ayfXv1VZy4VEXLfVRDXYs7NVYJGcBFzwBZXpomENqJV5lXcBlglxHOe45pPre1FFAQBFkOKAhAQZoXF8WdH7Ft4SRg8NVs3xeBVUsd8MOjQPkezx7PZYDRSc5r1BK4HLAsdKSAgCIH5M6AJ0kGKMPNPSoP6cul0h+4IwXkwZe51XEDex9zXp8MdO8cj7oWE5Zssq/q4T3E+mQltZMp6w2nluuSBPrSdw/j3X3s9f18zSb88ZOdePHnw1ixjzUi93fz47T4KERFGCCK/m0SvL5Iqa/yRbY325MmwdK8piWqE77eWYqzSLK6nWDoqsaqpoZlHVJTWTrbYrFg+fLl6NWrF2bOnImMjAyMHj0aX3zxhcNztLS0oLa21uqHCGOcmVfY1lepGX4zc4A7d4zJALOHKAYXjnBHDijXWHmvhSb8AA9+Git907/K3rlVDSy5HDAnOdbzhqiiCOz8kO0PuU6RLfqizuq314ANLwE/PurZ4+X6qhTnx/E6q6oiRcqjdykgoHIGtMlYdWTjCk58mrJ4dWqr82NDHU9cAQHWViAAGAwC7pjE3os3fz2GVlP7DMpmybhCr/2r1HDL9XYZq7YmZpgCoEpMQrko1YrVnsKnW0vw9IpDWHOIfb/4O2NlMAgoSGfj3HNKWw8xT1h/hM0pxvugvgpQNwl2P2N1oDYSLSYLYlMkebe6HyShn8BKFEXcf//9mDBhAgYMYJr1iooK1NfX44knnsCsWbPw448/4tJLL8Vll12GNWvsZw0WLVqE5ORk+Scvj1zWwhpnNVY8Y2UvsIpNAYbfqPzuLFvFUQdWLlyX3KqxIgIPD3iba5SMpa8CK1kKqAQ7vJeVVzLA4g1MPheVCPS9iGVReX2Pt3VWPAt7chNgti8hcoor4woOdwbkLoyxqcpnWM/wjNWZA0yOWXWY/Z47Mnhj0hM8c6fBwCKk4YFVpAYzBGMMACmzECBnQACYMzQHmUnROF3bgi93tO/ttEUyrtBr/yo1XArYbvIvTeRbRCPyc7Ixf+5kAMDEjBY8cH4v/G54LkYVpGJ0YSpmetHvSStjpH5sG4r8k7mpaWrDbiloG9fDN3MKng2sbzGh1oFstB1SYLXnHLueDeotza1smzV3cHQTWC1YsAC7du3CkiVL5NssFrbaMmfOHNx3330YMmQI/vznP+Oiiy7Ca6+9Zvc8Dz/8MGpqauSfkyedF3ESIY7TwOoI29pKATlj7mL9GAQD0G+u6+fqOoZZoteVApWHHR9napFX0xCn/4tXhyS2E3vfASZLMxh9J+uSM1Zn5ACcS266eaON56YV/ecqK+YFE9jWGzlga4OSgWlrBMp2uX8OVz2sODxjxZsxh0K2CmA9uJLzAIjApjfYbem96PPN4QFmyebgjsPfyFJADZ9jQQi4gQUARBsjcMt49rl6Y+1Rqx5Q9S0m7C1l18rQyFhx84omKwv5rfuYyVkVkrDo8kFIyigAAKRbKrHwvJ546orB+PjOsVh6x1ikxvu/Rx5vdL3hqH8Cq9+OVsEisusHzzR5S1yUEcmSkqJMa9ZKCqx2VjHVRd/u3a1uJxi6CKwWLlyIr776CqtWrUJurtIsNT09HUajEf369bM6vm/fvg5dAaOjo5GUlGT1Q4QxjgIrswmoPsH2HTn9JXcBbvgCuO4TbRO8yFgWXAHO5YD8S0aIAGJSXJ+XCDwGg3UQkD1E22RJCzywMjXJE7EMqTFqr6xEz87Z2gDs/YLtD7lOud0XgVXxBlYHov7dXTRnrFQ1VkBo1FdxeNZq27tsS/VVCjywOrWVWdGHK7IUUKO8TDawCIwUkHPN6K5IjDbicEU9Vh1UJMk7iqthEVnA4qsJuj+xyqo0sTqqplYzlq5hPeWE+M4Y0CWZXcsB1iQ4CP9/o6XA6tDpelTW2+m55SXq+ipfwi3XS7XWWUlKnDJTPJJjI9GjoIDd3lLLFpQJAEEOrERRxIIFC7Bs2TKsXLkShYXWk9uoqCiMHDmynQX7oUOHkJ9PXZ4JODavqD4BWExMjpHopBFlwQSgx3Ttz6elzko2rkhlE3hCn6gdG30lAwSA6ARlpVpyBrzv/F74y4V9cdnQXCcPdML+r1mQ1qlQCe4B39RZ8f/lCMm4w6+BVbb173p3BFTDGwXz7xqqr1LI6AdExrPXRkOj4JDFnRorAIgKfMYKYBnya8d0BQC8vuaofDuvr9K7zTonLsooZ5xKJAOLF1Yehih913XOkr5PE7MBCGyBqDHw9T6p8VHoIy2abfRD1or3rxrfw7c127xJsLsZq7NiIsZ0S4UhLoWpPQCqs1IR1Fnf/Pnz8f777+PDDz9EYmIiysvLUV5ejqYmJXp+8MEHsXTpUvz3v//FkSNH8NJLL+Hrr7/GXXfdFcSRE7rBkXkFN65I7ebb4IYHVsd/dez0RMYVoYH6/fFF/yo1Ns6AealxuG1iN8RGeWhcwWWAQ65lEiOOL+qseGA1/Ca2Ld7guobQFnczVpxQkQICSsaKQ4GVQoRRaRQczrbr7gZWQZACcm4ZX4jICAGbjp/FVskJUOlfFToSVrUt+IHyWvx37VGkgy1uGBMl84SISKVPXk2JvdP4HZ5N0lpntb6oEsP/sQJfbG9fB6fmTF0LDp1mygcuOfQVSpNgDRkrUZQDq3NiIhuLICjXUaqzkglqYPXqq6+ipqYGU6ZMQXZ2tvyzdOlS+ZhLL70Ur732Gp588kkMHDgQ//vf//DZZ59hwoQJQRw5oRtkKWCt9WRQtlp34fTnLtmDmbyvpQYo22H/GHes1ongwZsEQwC6+niSbMcZ0GOqixWDDW6xrsYbOWBDJVC+m+2PvwcwxrL/38pD7p1H1TjSKbaBVShJAbOHMHkvwL4D0noGczT6QzawCOM6K3fs1oGgSQEBIDMpBpcOZRK5N9YWoc1swfbiagChUV/F4XLAk2cb8ciy3TBZRAxPl8wW1KoDtRwwCLhbZ/XmL8dQ1dCKf367H81tZofH8WxVv+wkdPJxvViOO72sWutlyfhZJGIcz57x9yAImUK9EnQpoL2fm266yeq4W265BYcPH0ZTUxN27NiBOXPmBGfAhP7ggZVoVlYTAaU5sKP6Kk8xREjNggEc/tH+MTywiqfAStfwlbbMAa4zLe5i0yTYK9S9q1K6tr/fm8DqmOQGmNGfTUy43I1b0GtFa8aKrypzQkkKGBUHZEr1vnmjSOZrS0cwsHA7YxVv/bgAM28SW1j8cd9pLN9VhsZWMxJjjOiV4WGtZxDglutv/noM24qrER8VgfFcUZyg6mea1L5JcCAZXZgGQWCNiV31s6ptbsMvh1kgcqauBR9vcWyyxjNg433kBqjGrYyVNK9pEqOQkJCInhnS4oK6JyQBQCfmFQThMZGxisZXLQfkjoBpPXz/nH0uYtudH9kvlKWMVWjAg+7uU31/bhspoMeIIrBD1bvKHt7UWXEZIJe4dh3Ltty1TytaA6uISOW1iYhuX3OldwqZrTO6+eF/JtThgVXlQeX/Idzgkj7NgVXwMlYA0CMjEdP7ZkIUgb99yZp/j8jvBIPB+wazgYJbrp+qZq/hH2f2RmwrX7zsrBzIA6sgSQGT4yLRP4eVJriSA67cX4FWswUR0vvw2uoiuz3HAGCdlLEa56P+VWq4gUlZjYaMFa+vQiLGdFM1KY6jwMoWCqyI0EYQ7BtYyFJAH2esANZDKCqRGWTYK/SnGqvQYMStwNUfApP/5Ptz+0oKWLyRNbGOSgD6Xmz/GG/qrNoFVpIxRrGfMlaAIgfslB96WZ+pjwBXLwFGzQv2SPRHfLoiveaNlMMJi8ULV8DA11hx7pzM3pPaZlYTHEr1VYBSYwUAg3KTccPYAuUaa1cKGJyMFaCSA7oIrL7dzVxRb5tQiIzEaJTWNGPZtvYB4cmzjTh5tglGg4CRhb5/35T6NWs7e7s0su/4c2KitTshv9aRFFAmxK5qBGEHWwMLUytQI6XWfS0FBNhqJW8ozLMJaihjFRpExgB9LmQufr7GV1JAe72r7OGJHPDsMVa/ZTAqroh5o1h/r+pioMaNCYrWPlYAkMADqxCSAXKi4oE+FzCzBqI9uVKdVTgaWJiaAEiTT82ugNJxQQysRhSkYni+suAxMsQCq66pTApoEIB/XTqQZXm4UUK8PSlgcGqsAJWBhZM6q/oWE1YfYuOfO7SLLNd8ZXURTGbrrBWvrxqcl4KEaN9/52QmMyfYFpMFVQ2tTo9trWNjPsuNKzi85IHMK2QosCJCH7WBBQCcOw6IFraqaFvT4Su4LGvfF+318xRYEb6QAqp7Vw2+1vmxngRWPFuVO0oJLqMTgaxBbF+r7brFrCxquJOxCiVHQEIbvEYvHOus6k9LO4KSiXJFkKWAnDukyXuU0YBBuclBHYu79M1OxIMze+P5q4eynlUWiypjpZICJkvW6+4sCPmYkQWpiDAIKD7bKEsXbVl5oAKtKd4atQAAOsZJREFUJgsK0+PRJysR147uitT4KBSfbcRXO62DQt6/aryP+1dxoo0R6NaZBf8/7Tvt9NhTp1hGrTkyGYXqRveyFJCaBHMosCJCH9smwdy4IrXQ2pral3Qdw1bcW+tZjyE1ZF5B+EIKePhHoLUOSMlXap8c4Umdla0MUD6XlL3SGlipaxtjU1wfP+RaFswNukrb+YnQgTsDloRho+AVf2PbvFHarytBtFtXM71vJv40qw+eumIwYiI9bPkQJARBwPypPXDxYKkfZdM5ZlYFWEsBk6T760rZYk8QSIyJZMEfHMsBv5NkgLMHZEEQBMRFGXHbRLbI9PKqIzBbWFZUFEVVY2D/lRVcPTIPAPDuhhNO5YDl5SxgjU3urNRXAaprHWWsOBRYEaFPjCQFbJEmeP6sr+IIApsgAopci0MZK0KWAnpxsTn4Hdv2u8R1LZK7dVYWi+IIaBtY8SDuhMbAitdXRSUycwpX5I8Dbluh9D0iwoeM/lKj4BpmYhEu7P2CLaAZjMCFT2t/HA+sWoMbWBkMAv4wpTsu4cFJKMMXq2I7WX/fJGQxGbPF5Bs3Vg9xVmfV2GrCqoNsbBcMVIx7rh+Tj6QYI4rONOD7PeUAgMMV9ThT14KYSAOG5af4bbxXjshDtNGAfWW12Fbs2HSm9izLaHVKtzEcIrv1dlBgRYQ+thkr2RHQj4EVoPQUOraW1aQAVk30yLyiA8NX8VpqAFOL+483twGHfmD7vS/Q9hh35IDlu1hAFJXYPsDhBhYV+7S5u8k9rEKnNw7hJ9SNgk+GSZ1V41ng2z+y/Qn3A1kDtT9WJ1LAsEKur+psfXuEUXEZ1UGd1cajVe0yQKsPnkFzmwV5qbGygyDAMl03j2dZqxdXHobFImL9ERaojCxIRbTRf1nGlLgoOeB+d8MJu8c0tJggSvLLLjm51nf6ygE3jKDAigh9oh1IAf1hta4mpavS02rnUmUMFua+RBmrDkxMitIGwBOJRPEGoLma/Q/laWxe7E5gxWWABRPaZ5kSMqTPjggU/+b6XO44AhLhj1xnFSaB1fd/Zp/hzn2ASX9077GyFDA4fazCEkeBFaAysAiO5TrA7OyNBgGnqptw8qx1QM3dAC8YkG0tpwNw8/gCJEQbcaC8Dj8fqMA6WQbo/3nEDWML5PFV1rdfCNx8/CxSUAcA6NTZpsk7n+e01gNtGmzbOwAUWBGhj615RdVRtvWnFJDDTSx2fGCdrYpKYK5zRMfEYFAu/J7IUg58y7a9ZrGm1FrIHw9A0FZn5ai+iiP3s9IgB6TAilAjOwNuCe44fMGhH4FdS5nEbM7LgDHavcdH8cCKMlY+o95ZYCVJHYNoYBEfbcTgvBQAwIajShanuc2MlQfYtWD2wPb9+1LionD92HwAwAs/H8bGo9y4wv/Kl4G5yRiSl4I2s4ilm9s3K95wtAqdpMCq3YJxTDJgkBbnSA4IgAIrIhxQSwHbmpTVKn9LAQHWWygqgfUaKt6okgGGlqUt4Qc8lUiIInBQCqx6z9b+OK11Vm3NSsDkKLByx8CCAitCDW8UfOYA0FQd1KF4RXMt8M29bH/MXUomzh10Yl4RVjjLWHFnwCD2sgLs11mtOXQGja1mdEmJxWAHzoy3TihETKQBu0/VoK7ZhMQYo2yG4W+uH8OCug82nmhn+76xqAqpgoPAShCUOisysABAgRURDsjmFbWsNw/A5IGBkOJFxQP95rL9HR+omgOTDLDD46kzYMU+1nzaGAN0n+beY7XIAU/+BpiaWbF35972j+EZq1PbXK+2u9PDigh/EjorPcpCuc5qxd/YBD21GzD1Uc/OwWusgmxeEVZokgIGObBS9bPidVa2boD2SE+IxnWj8+Xfx3RLY327AsCFg7KRGh+F0ppm/HxAuWbVNrdh96lqxxkrgCzXbaDAigh91Bkrub6qm/+s1m3h7oB7vwBqpGwZGVcQnjYJ5jLAblO0NyLlaAms1DJAR5+RTgUs8LK0Aae2On9OylgRtvD/w6OrgjsOTzm2Ftj6Ntu/5EVF0ucukSQF9Dk8sEqwl7GSAqsgSgEBYHh+J0RFGHC6tgXHKhvQYjLjp/2OZYBq5k3qhqgINjUfF4D6Kk5MZASuHMGs199TmVhsOnoWCWIjjIKUxbK3gEYZKysosCJCH3VgxR0BA1Ffxek6lk1EW+uAbe+w2yhjRXgqBTy4nG21ugGqyR8Huc6qYr/9Y1zVVwEs4MrXWGdFgRVhS4/pbHvk5+COwxNaG4CvFrL9EbcoQaInkBTQ94RAxiomMgJDu6YAYFmrXw5Vor7FhKykGAyV6q8ckZkUg4cv6IORBZ0Cbo9/3eiuEATg1yOVKDpTD0Cqr+IyQEe142S5bgUFVkToEy1JAZtrlR5Wgaiv4hgMwGApa3V6D9vGU8aqw+OJFLC2FCjdDkBgxhXuEpeqNGl9Ywqw7gXAbFLubzoHlO1g+90mOz9XV6nOylU/KwqsCFu6TWaGD5UHger2xfC65ud/AOeOA0m5wPS/e3cu2W6dAisArIXEy6OBA8s9P4eWwKquzPp7LwjIcsCiKny7h8kAZw3IgkGDtO/m8YX45M5xSEtw0yzFEaYW4IzrvnJ5qXE4rw9TWry/kWWt1hdVIVWWATqQe1OTYCsosCJCHyspoOQI6G+rdVt4TysOmVcQnkgBeVPg3BFAYqZnz3v5m0DhZFZHteKvwJvTgXIp4D/+KyBagPTeioOWI3jG6uQmwGJ2fJzcx4r+5wmJ2E6KiUVRCGWt9iwDfnuV7V/8nFK/6ylcyktSQMbmN1k2/eMbgSM/eXYOZ66ACRmszYVoAepPez5OH8ANLDYercKKfWwsF7iQAfqNVf8EXh4F7P3c5aHXS9brn24twanqJuwvq1UyVo6UOPx2qrECQIEVEQ7wi5+piX1pA4GVAgJAp3ygYKLyO9VYEZ5IAWU3QA9kgJyUPOCGL4FLXmImLqXbgTcmAyv/qTQddiYD5GT0Y49vrQPKdzs+jjJWhD26n8e2oSIHPL0X+HI+2x93N9DzfO/PSRkrBVEESjazfUsb8NHvgePr3DtHa4PSE8xeYGWIABKlBaMgywGHdE1BtNGAyvpW1DWb0DkxGsPzg/QdyT+Dez5zeejEHukoSItDXbMJjyxj3/t9k9vYnY4CK8pYWUGBFRH6RKtWFbndeVq3wI+Dm1gAVGNFuC8FbKljRfOAd4EVwGqkhl0PzP8N6HMRa1q99klg+3vsfi2BlSFCkRUWb3R8HAVWhD16SIHV0TVBl2W5pOkc8NF1LAAqnAyc95hvzssDK4sJMLX65pyhytmjzEE0IhrocT5bCP3wKtfmOGr4IlVENBCdaP8YuZdV8JoEA0C0MQIjCpTvxFn9swLm8GeFqUVZcD661uVn0WAQ8HvJen3NIRYoDeokPcZhYEU1VmoosCJCH0OEdXAVmxqcSV7fS4BISfqR4KGMiwgfuBSwscq5lI5z5GfA3MrsnR3ZoLtLUjZw1fvAFYuVQE+IAArGa3u8bGCx3v79FjOT4AIUWBHW5Axl/xMtNcApHTcLtpiBz25nvQiTuwK/exuIMPrm3JEqV8+OnrXi1vs5Q4Cr3mMKj9Y64P3LgdP7tJ1DdgTMcOxomqwPAwtAkQMCwOyBWcEZRMU+FtgDmj+LVwzPQ0ykEh70TJQWBRxKAbkrIAVWAAVWRLigDqwCaVxhNYYE4LI3gEkPedZMkggv+MVGtCh1SM5QywB92SpAEID+lwLzNwFjFwAXPKnUJbpCbWAh9WOxorkGgHQ7BVaEGkME0G0q29ezHHD1IuDICtY37ur3gXgfqg0iItlCBkB1VlwGmDuSZfKuWQJ0GcGyhe/OUYynnCEbVziR2svOgKWOj7GYA/J+TOzJFrM6J0ZjVEGQalDLdlr/rqG2LTkuEnMGs9dREIAuUdKigEPzCgqs1FBgRYQH6olioOur1PS9CJj2aOB6aBH6JcKo9PxwJQc0tyn1T97KAB0RlwrM/Ccw8jbtj+kyjMluGioUYxg1XAYYlcgmkQShhssBPTUq0MKZg+7X6nD2fwOs/Q/bv/h5IHuw78YFsOsAWa4z1IEVwKR8v/8UyBzAvl/eucS1g6QzR0BOci7bOpICtjUxI4d/ZgMvDAOWXg+sfgLY/zUL7ixSvyaLmX2/VRez+rvijUDxb/YXmBwwOC8Fr/1+OBbfPBLGiCBNt8t2sS2vPdO4yHHzhAJEGw0Y3z0d0a3V7EZXUsC2BmqGDcBH+W6CCDIxOshYEYQtCRmsrqC+Asjs7/i44o1AczULxPJGB2x4LjFGA12GMyng7k+AKX+2vp/qqwhncAOL0u3MMcyX2SCA1YssvpBNuPteAlz4tCLBdcWZQ8Dnd7L90X9o7+zqK6LimOStIwdWrQ0sOAGUwApg3xvXfw68PZv1oHx3DnDnr44bMnOH1Xgn73GSC/OKHR8o/S7PFrGf/V8p9xtjWasAbpJhy8x/AWPnO35+G2YNCJIEkFMuBVZj7wJ+/Ivmz2KfrCSsfWgqEqKNwPtS7bqjwCo6CYiIYlL2xkogqqsP/4DQgzJWRHigzlhRYEXoBa3OgFwG2GuW7+o7fMUoKcP1yzPt5Tpc4hibEtAhESFCUjaQ0R+ACBxd5fvzl2xSshj7v2I9knZ94jqrUFsGLL2OBTz5E4AZ//D92DiyM2AHlgKWbgdEM5Pp8RooTkIGczGNz2BBDjfwsQf/HtUiBayxE1iZTcD6F9n+tL8A138BzPgnMOQ6lq00xjBTDXVQZYxh3+NJUiZs7X9Yz8xQwGJWWm30msWcXt34LGYmxSA+2qiYgsU6kAIKAtVZqdDZFZwgPEQvUkCCUKPFGVAUlYaZvWf7f0zu0v8yYPv7QNFKYPn9bDLCpa48Y0U9rAhH9JgGVOxlEqSBv/PtuQ+vYNv88Wyye3o3sOw2YO8y4KJngURVtqClnn3Odi1lE0vRwibhV7ztXxkrlwK2OsiAdAS4cYWj2uPkXKDnDGDH+yxY7u2gOTr/HtUiBaw/zSTW6vd2/5es+XNsKjDmLtZnrPtU5X6Lmd0vGFgWJjqBZe0BFpS9MgaoOgxsfBWY8idXf3XwqTzMAsXIeDYv6nEeM7MoWuneZ7HRRcYKYBmwulIKrEAZKyJc0IN5BUHYoqVJcMU+oPoEq2XqPi0w43IHQWASK2MMcHQ1kwRySApIuKLHdLYtWulWfYomjkiB1bAbgXmrgKmPAoZIlgF+eRSw/QPg8E/M9e+pnsDn81jDYtEC5I4Crv1Yu3TQU+Qaqw6csSqRnOhyRzk+hgddPAizh9oV0BFx6UyWBhGoK1NuF0Xg1+fY/ug7lObNagwRbP6QWsgCBR5UAUxJMPVhtr/hJW2GRMGGywCzBgAGgyLNdeezyGvNABeBlRTskuU6BVZEmMAzVvEZjvtbEESg0SIF5DLAblPYCqkeSe0GTHqQ7f/wiDKpoMCKcEXXsSy4qC9X6mx8QV251LhaYCvxEZHA5IeAO9Ywq/fmGuDLu4APLgd2f8xqnFK7A1MeAe7eDty2gk04/Q2XAraEiHzM14giy0IB1vVVtvCeeae2Oe61pEUKaDAAidlsXy0HLFrJAo3IOGDUPG1jt6Xfpcxso6UWWP+CZ+cIJNwRkJuydB3LasjqytiCnhbUzq/OlAmyFJCaBFNgRYQH3LyCslWEntAiBTzAbdZ1KANUM+5uoHMfduH86XF2WxOvsaLAinCAMRoomMD2fekOyM+VM9R6op3ZH7j1J2D642wSGZcGjLoDuG0lsHArk3ClBrCBPF/o+/xO4LWJwA+PAge/V/q/hTvVJ9h3hiHSueti5z7MXbStATiz3/4xWswrAEUOqDawWPcc2w670XPpssHAsqIA8NvrQN1pz84TKHhglTWIbSNjVJ9FjS0QuAwwOtm5ZFZrPXEHgAIrIjzIHcm+uHueH+yREISCKyng2WNA6TYAgv4DK2MUq1sBgG3vMCdDOWNFNVaEE2Q5oA/7WfH6Knvf+RFGYMJ9wCOlwAOHWO+23OHBaYMx6nYgvRcAkWVMNrwELLkK+HcB8MZUVq/ja4mknjgp2axnD2ITe0cYIth7BNiXA1rMyiTfWY0VoOplJQVWp7YxUwyD0S1HP7v0ns2cUtsagV+f9e5c/kQUFSlg9iDldndbIMj1VS6+47nLID++A0OBFREe5I8DHj4JTHwg2CMhCAW+supoFY/XK3WbbF1or1fyxwFDr2f7X9/LCsQBylgRzuG1HcUbmYmEt5hNQJHkbNbDyWKawRB8l83u04AFm4EHDgKXv8kyJqndWJ1X6Tbg+z8Dm/8X3DH6E7l/lZP6Kg4/hj9GTeNZMEma4LzWB1CcB7kUkGerBvwOSMlzPQ5nCAJzFASALW867pcVbKqLWVbUEAl07qvcLn8WN2gzVNFiXAGoMlYkBaTAiggfuJadIPSC3JG+ov2qtCgyhzIAGHRVYMflDef/H7vIntmvWCNTYEU4I607kNKV9bk5/qv35yvZBLTUsExpl2Heny8QJGYxJ7ZLXmA1XvftZVk1gNUtctlWuFHiwhFQDa/Bspex4nLquFTXwbI6Y1VVBOyT+lSNv8f1GLTQbSqz6Te3Kg2m9Qb/f8roy9QGnPSeQHKe9FnU0Fhba2BFdusyFFgRBEH4Cy4FNLe2r6ko3cYaVRpjgT4XBX5snhKXyppkqqHAinCGIPhWDshlgD3OYxKyUCQ5FzjvMaDXbPb98MlNodMfSSttTZLBCBRzCmfw4OtsUXvXPZ4JcSUDBFS9rEqAdc8DEFkfp8x+mobtEnXWavv7wNmjvjmvL7EnAwTY2Ln7rJbPouaMFQVWHAqsCIIg/EVkLCvIBtpfcHZ9zLZ9LlDMV0KFQVcBhZOU3ymwIlzBJUhai+adwW3WnckAQwFBAOa+wjIIZ48C39wbXvVWpTsAiwlIyGR/oyviUoG0nmzfVg4oOwJqCKy4FLCqCNi5hO2Pv1fLiLWTP5YtFlhMwOp/+/bcvqCMB1ZD2t/HFzm0fBY111hJgRXZrVNgRRAE4VfUckCOuQ3Y/SnbH3R14MfkLYIAXPgs6xcTER0a9WFEcCmcxMwDzhYx0xZPsbVZD3XiUoHfvcVemz2fAVsXB3tEvkOurxqp3TiEZ7Zs5YCyI6CWjJXkCthax7KBeaNZIORreNZq11Kg4oDvz+8Nto6AarpNBoQI1uy4utj5eXjmUKsUsK2xYzfDBgVWBEEQ/sWeM2DRKrayF5cOdJ8anHF5S3oP4NYVwA1fArEpwR4NoXdiktgEF/BODujIZj2UyRsFnPc3tv/9n4HyPcEdj6/Q0r/KFi4HLLEJrNyRAsalsobmHF7L5mtyhkoybhFY/S+XhweM+grWNw4Caz9gS0yy8p64ylpplQJGJ7JFNqDDywEpsCIIgvAn9tySuGnFgMud9wbROzlD/LMSTIQnvLbjyErPz+HMZj2UGbsQ6DkDMDWzeitfuCcGE1FUrNa11FdxclWNgi1m5XZ3AitBAJJy2H7nPkDPmdqf312mPgpAAPZ9qZ+AmMsA03s6bjqv1XZda2AlCCQHlKDAiiAIwp/YBlYtdcCB5Ww/lNwACcJbZAOLlcDpve4/XqvNeihiMABzXwMSc5hEa/n9oV1vVVPCsiZChP06H0dk9GV1qa31QIWqUTD//kzQEFgBQOYAtp34AHtt/UVmP6D/XLa/7nn/PY87lDuRAXJ4zeOxtUya7gitgRVABhYSFFgRBEH4E1sp4P5vAFMTkNo9dKyiCcIXZA0CCiay///3f+d+D6BQtFl3h/g0Vm8lRLCs9oaXQje44vVVWQOAqDjtjzNEKO+tWg7oTsYKAC58Brjxa2DQldqf21O4Mcaez4BzJ/z/fK7g9VW2joBqcoYw06GWWqBki+Pj3AmsyHIdAAVWBEEQ/sU2Y8VlgIOv1l7QTRDhgMEAXPUek2fVlQLvXw40ndP++HCwWXdF/lhg2qNs/8e/AG/NZO56oQafrGtpDGyLbGChcgZ0N7BK6GztXOpPcoYA3aYAohnY8HJgntMZsiPgYMfHGCJYPy7Acc2juU1pE+JWxqpjNwmmwIogCMKfqAOr2jLg2Br2+8ArgjcmgggWsZ2A6z4FErOBMweAJdcCbc3aHhsuNuuuGH8fa8QdGQ+c/A14Ywrw9T2hlQnwxLiCwx/Ds16iCNS7GVgFGp612vYu0FDl+vjmWuC3N5S/y1c01wDnJNdNZ1JAQFVn5SCwkhc9BG0GRfy9oRorgiAIwm+opYB7PgNEC3NHSy0M7rgIIlik5LHgKjoJKF4PfD7P2qjAHuFms+4MgwEYfw+wcAsw8EoAIrNhf3EY8NvrrNZMz5haFDlanheBVdVhZvfd2sDko4B+A6tuU1iGyNQEbHrd+bGiCHx2G/Ddg8CKv/p2HLwhc3Ke695TvM6qdDtb9LOFywBjO2nLEPOsVigtAPgBCqwIgiD8SbwUWDVUKjLAQOj+CULPZA0Arv6A9ULb9yXw/cPO64nC0WbdFUk5wOX/BW7+HsgayLIR3z0EvD5RH7U8jijbxfpHxaUBnTxYQIpLBdJ6sP2SLYq0zBgLRMX7bpy+RBAUW/dNbzjv5bR1MXD4B7Z/YDkLRH2FFhkgJykb6DoWgGjfeMOd+ipApc6gwIogCILwF3wS2FoHlO8CDJFA/8uCOyaC0AOFk4BLX2P7m1537qoWrjbrWsgfC8xbwwwZYjsBFfuA1U8Ee1SOkRsDj/K8jpTXZpVssnYE1HNdat9LgNRuTEK37V37x1QVAT88wvYFAzOPOLrGd2MolwIrVzJAzuSH2HbLW+2zVnJg5SLzxaEaKwAUWBEEQfiXmGS2Ks/pOUP7hYogwp0BlwMzpeaqPz0GLH8AOPwT0NqoHKO2We85I/Bj1AOGCGDkrcCV77HfDy4HTK3BHZMj5PqqEZ6fQ24UvNl944pgYYgAxi1k+xtebm9jbjYBy+YBbY3MHXP4zez2fV/6bgxaHAHVdJsK5I0BzC3Ar89Y3+dpxqrRTo2ZxQLs/AhY/6K2c4UwFFgRBEH4E0FQ5IAAyQAJwpax84GxC9j+5v8BH1wO/DsfeOcS4NfngJ0fKjbrOUODOtSgkz+OTWCba4Dja4M9GvtwR0B3GgPbwh9bspXV1wH6D6wAYPC17Pu+5iSrqVXzy9PAqS1AdDIw91Wg/6Xs9oPLnfeS0kpbE3DmINvXmrESBGCqlEHbuhioOaXc527GSl1jpZb1Fq0E3pgEfH4H8PM/gOqT2s4XolBgRRAE4W+4RCI6Ceg1K7hjIQg9MuP/AVd/CAy7gRXem1uZg+ZPjwFfSVmAcLZZ14ohAuhzEdvf91Vwx2KP2jIWVAgGIMeLXmMZ/YCoBCahPv4Luy0UAqvIGGDMnWx/3fNKgFGyFVjzb7Z/4VPMwCV/HOv91HRO+Ru9oWIfs3yPS2f1eVopnATkj2efOXXWqvEs22rOWEnXOVMTqzEr2wW8dyn7Kd/Nrn9T/qz9fCEKBVYEQRD+hjsD9pvDLrwEQVgjCECfC4FLXgTu3Q0s2ArM/g/QazabYAOs9xvBvkcAZnygN4dAPjHP7A9EJ3h+HnWj4MOScUkoBFYAMOJWICqRBTqHf2RBxrLbWdDT/zKl1YYhAujrwyBZNq4Y5F4tmiAAUx5m+1vfUTJK7koBoxIAo3R9++xW4PVJLFtliATG3AXcvQOYeL97DaNDEAqsCIIg/M3wm5mOnbtGEQThGEEA0nsAo+cB134EPHQM+OMRoMf0YI9MHxRMYCYWjZXMrl4vbHuPOeIBwNRHvT8fN7BorWPbUAmsYlOAETex/V+fA378K3C2CEjMAS56xjro6XsJ2+7/2nXLAVfw+iqtMkA1hRNZ3ZeljUkWAfcDK0Fg2TIAOPQ9AJHVUC7YDMxaBMSHd6aKQ4EVQRCEv+lzAXDrD0Ba92CPhCBCD2MUc4QjGBGRLLsH6EcOWLIFWH4/25/yCNB7tvfntG0unJBh/zg9MmY+My0qXg9seZPdNvcVFhCrKZwExKSwIPmEl0FyuRtW6/bgtVbb32d2/u5KAQGgc2+2LZgI3L4K+N1bHa5nY1ADq0WLFmHkyJFITExERkYG5s6di4MHDzo8/o477oAgCHjuuecCN0iCIAiCIAg90VeSA+7/mjmueYqplVltH13jecakrhxY+ntWo9PnImDSg56PR41tYBVK/cuSsoFBVym/j/4D0H1q++MiIpWauf1eBMlmE3B6L9v3NLDKHwcUTpayVk+5n7ECgCveBu74Bbjxa0XK2cEIamC1Zs0azJ8/Hxs3bsSKFStgMpkwY8YMNDS0b6z2xRdf4LfffkNOjhsFeQRBEARBEOFGt8nMDKC+XLE394RfnwW+uQ949xLg6d7AN/cDx37RHmSZWoCl1wN1ZUDnPqwvmcFHU8v4NCBVleWPD6GMFQCMvxeIjGfNnac/5vi4fpIccN9XngfJJZsAUzOr7fKkKTOHZ612fMjeU8C9wCom2f0arzDDGMwn//77761+f/vtt5GRkYGtW7di0qRJ8u2nTp3CggUL8MMPP+DCCy8M9DAJgiAIgiD0gzGaye12LWV9kLqOcf8c5jaWrQIAYyzrF7XlTfYTn8FMMvpfys7tyI3xu4fYpD4mmbk6Rid6/jfZI28Uq08CQqfGipPeA7hvDxAZy34c0W2KKkjeDHQd7frcosgyVAe+AfZ/A5zezW7PHuRdYNt1DNB9GjOd4FDfRbfQVY1VTU0NACA1VXkTLRYLrr/+ejz44IPo37+/y3O0tLSgtrbW6ocgCIIgCCKs6KvKdKj7Bmll/9dsMh+fATxUBPz+M2Do71mQ1FABbP4vsPgC4KmewBd3seNbVYqiLW+x3kcQgMvf8k8NKZcDCobQnODHpToPqgAWJPM2HK6aBZ/eC/zwKPDCEOC18cDqRSyoEiJYXdP0x70f85RHlH0hgvXdIjQT1IyVGlEUcf/992PChAkYMGCAfPu///1vGI1G3H333ZrOs2jRIvz973/31zAJgiAIgiCCT4/zmNSstgQ4tQ3IHe7e4zf/j22H3wRExTPXxR7TgQufZT3E9n7OLN0bq4AdH7AfYwzLsOSOAFZLfZmmPwb09JNjY/44tk3ODe8eZv3mALs/ZnVWM/9pX0pXtBL44EpWAwWw96L7NFaj1Xu27wLPvJFAj/OBIyvYOX0l7ewg6CawWrBgAXbt2oVff/1Vvm3r1q14/vnnsW3bNgga9ZoPP/ww7r//fvn32tpa5OXl+Xy8BEEQBEEQQSMyFug1gwVA+790L7A6vRc4sY5lJEbcbH2fMQroeT77MbcBxRuBg9+yIKv6BLPSPiSVcvS/lNUS+YuMvsCV7wHJXfz3HHqAB8k1J4HSbUAXm/fy1Fbgo9+zoKpwEjDyNqD7ed71CnPGtEeBY2uB7CH+OX8YI4iiJ/lj37Jw4UJ88cUXWLt2LQoLlaK75557Dvfffz8MqmjZbDbDYDAgLy8Px48fd3nu2tpaJCcno6amBklJSf4YPkEQBEEQRODZ+znwyU1ApwLWgFWracDX9wJb32aZkivf1fYYUQQq9rMg69APzDr8irdZtovwnk9uYu/n+HuB81XKq8rDwFszWeawcDJw3SdMPuhvakuZFXwYNvT1Z2wQ1IyVKIpYuHAhPv/8c6xevdoqqAKA66+/HtOnW6eXZ86cieuvvx4332yzwkIQBEEQBNGR6HE+k4SdOw6U72bmBa5orgF2fcz2R96u/bkEAcjsx34m/dGj4RJO6HsJC6z2fclqpQQBqC0D3ruMBVXZQ4CrPwhMUAUASeTC7QlBDazmz5+PDz/8EF9++SUSExNRXl4OAEhOTkZsbCzS0tKQlmZt8xgZGYmsrCz07t07GEMmCIIgCILQB9EJrC7qwDdsQq4lsNqxBGhrADr3BQom+H+MhDZ6zpCC5GMsSE7JA96/DKgpZrbz133qe9dFwucEtSLt1VdfRU1NDaZMmYLs7Gz5Z+nSpcEcFkEQBEEQRGjQT2oWvO9L1+6AoqiYVoy8tUP3G9IdPEgGmI3+h1cDFfuAhCzg+s+BhBCzm++gBF0K6C5a6qoIgiAIgiA6BL1mAhFRQNVh4MwBZvjgiKOr2XFRicDgqwM2REIj/eaw7OOGl9jv0cnMBr9TfnDHRWiGPBQJgiAIgiBClZhkoNtUtr/vK+fH8mzV4KtJVqZHes0EDJFs3xgDXPsRkDXA+WMIXUGBFUEQBEEQRCjD5YD7nQRW1SeZox8AjHLDtIIIHDHJwKArWVD1u7eUPl5EyECBFUEQBEEQRCjTezZgMAKn9wA//gVoOtf+mC1vAaKF9UHqTAZgumXOy8BDR4E+FwZ7JIQHUGBFEARBEAQRysSlAiNuYfvrXwSeHwKsewFoa2a3mVqAbVK/Kncs1onAIwjUGyyEocCKIAiCIAgi1Jn9JHDtx0BGP6C5GljxV+ClEcxefc8yoLESSOoC9L4g2CMliLAlqK6ABEEQBEEQhA8QBGZ+0GM6sHMJsOpfQM1J4Is7AUFaRx9+MxBBUz+C8BeUsSIIgiAIgggXDBHA0N8DC7cC0x9nlt2ihbnNDb8x2KMjiLCGli0IgiAIgiDCjchYYMJ9wLAbgW3vAOm9gYSMYI+KIMIaCqwIgiAIgiDClbhUFmARBOF3SApIEARBEARBEAThJRRYEQRBEARBEARBeAkFVgRBEARBEARBEF5CgRVBEARBEARBEISXUGBFEARBEARBEAThJRRYEQRBEARBEARBeAkFVgRBEARBEARBEF5CgRVBEARBEARBEISXUGBFEARBEARBEAThJRRYEQRBEARBEARBeAkFVgRBEARBEARBEF5CgRVBEARBEARBEISXUGBFEARBEARBEAThJRRYEQRBEARBEARBeAkFVgRBEARBEARBEF5CgRVBEARBEARBEISXUGBFEARBEARBEAThJRRYEQRBEARBEARBeIkx2APwN6IoAgBqa2uDPBKCIAiCIAiCIIIJjwl4jOBLwj6wqqurAwDk5eUFeSQEQRAEQRAEQeiBuro6JCcn+/ScguiPcE1HWCwWlJaWIjExEYIguPXY2tpa5OXl4eTJk0hKSvLTCAl/Q+9jcKDXPbSg9ys40OseHtD7GBzodQ8PAv0+iqKIuro65OTkwGDwbVVU2GesDAYDcnNzvTpHUlISfWDDAHofgwO97qEFvV/BgV738IDex+BAr3t4EMj30deZKg6ZVxAEQRAEQRAEQXgJBVYEQRAEQRAEQRBeQoGVE6Kjo/HYY48hOjo62EMhvIDex+BAr3toQe9XcKDXPTyg9zE40OseHoTT+xj25hUEQRAEQRAEQRD+hjJWBEEQBEEQBEEQXkKBFUEQBEEQBEEQhJdQYEUQBEEQBEEQBOElFFgRBEEQBEEQBEF4iS4Cq0WLFmHkyJFITExERkYG5s6di4MHD1odI4oiHn/8ceTk5CA2NhZTpkzB3r175fvPnj2LhQsXonfv3oiLi0PXrl1x9913o6amRj7m+PHjuPXWW1FYWIjY2Fh0794djz32GFpbW52Or7m5GTfddBMGDhwIo9GIuXPn2j1uzZo1GD58OGJiYtCtWze89tprLv/2tWvX4uKLL0ZOTg4EQcAXX3zR7pibbroJgiBY/YwZM8bluQNNOLyPZWVluPbaa9G7d28YDAbce++9mv/+V155BYWFhYiJicHw4cPxyy+/WN2/bNkyzJw5E+np6RAEATt27NB8bmd05Nc91D4/4fBeLVu2DOeffz46d+6MpKQkjB07Fj/88IOmv58+I/bx5+seap8RZwTqfQSASy65BF27dkVMTAyys7Nx/fXXo7S01OUYd+/ejcmTJyM2NhZdunTB//3f/0HtEUbXmNB63enzo6/3MRSuP7oIrNasWYP58+dj48aNWLFiBUwmE2bMmIGGhgb5mCeffBLPPPMMXnrpJWzevBlZWVk4//zzUVdXBwAoLS1FaWkpnnrqKezevRuLFy/G999/j1tvvVU+x4EDB2CxWPD6669j7969ePbZZ/Haa6/hkUcecTo+s9mM2NhY3H333Zg+fbrdY44dO4YLLrgAEydOxPbt2/HII4/g7rvvxmeffeb03A0NDRg8eDBeeuklp8fNmjULZWVl8s+3337r9PhgEA7vY0tLCzp37oxHH30UgwcP1vy3L126FPfeey8effRRbN++HRMnTsTs2bNRXFwsH9PQ0IDx48fjiSee0HxeLXTk1z3UPj/h8F6tXbsW559/Pr799lts3boVU6dOxcUXX4zt27c7PTd9Rhzjz9c91D4jzgjU+wgAU6dOxccff4yDBw/is88+Q1FREX73u985HV9tbS3OP/985OTkYPPmzXjxxRfx1FNP4ZlnnpGPoWtMaL3u9PnR1/sYEtcfUYdUVFSIAMQ1a9aIoiiKFotFzMrKEp944gn5mObmZjE5OVl87bXXHJ7n448/FqOiosS2tjaHxzz55JNiYWGh5rHdeOON4pw5c9rd/tBDD4l9+vSxuu2OO+4Qx4wZo/ncAMTPP/9c83PqnVB8H9VMnjxZvOeeezSdb9SoUeKdd95pdVufPn3EP//5z+2OPXbsmAhA3L59u8bRukdHet3VhOLnJ9TfK06/fv3Ev//9706Poc+INnz9uqsJxc+IMwL5Pn755ZeiIAhia2urw2NeeeUVMTk5WWxubpZvW7RokZiTkyNaLJZ2x9M1Rv+vuxr6/NgnWO8jR2/XH11krGzhKcXU1FQALBtUXl6OGTNmyMdER0dj8uTJWL9+vdPzJCUlwWg0Oj2GP483bNiwwWp8ADBz5kxs2bIFbW1tXp9/9erVyMjIQK9evXD77bejoqLC63P6m1B8Hz2htbUVW7dubff+z5gxw+nf5S86yuvuDnr9/ITDe2WxWFBXV+f03PQZCc7r7g56/Yw4I1Dv49mzZ/HBBx9g3LhxiIyMdHieDRs2YPLkyVZNTmfOnInS0lIcP37cnT/Nio76+Qn26+4O9PkJzvuox+uP7gIrURRx//33Y8KECRgwYAAAoLy8HACQmZlpdWxmZqZ8ny1VVVX4xz/+gTvuuMPhcxUVFeHFF1/EnXfe6fW4y8vL7Y7PZDKhsrLSq3PPnj0bH3zwAVauXImnn34amzdvxrRp09DS0uLVef1JqL6PnlBZWQmz2ezW3+UvOtLrrhW9fn7C5b16+umn0dDQgCuvvNLhMfQZCc7rrhW9fkacEYj38U9/+hPi4+ORlpaG4uJifPnll07H5GgeoB6bJ3S0z49eXnet0OcneO+jHq8/ugusFixYgF27dmHJkiXt7hMEwep3URTb3QYwneaFF16Ifv364bHHHrP7PKWlpZg1axauuOIK3HbbbfLt/fv3R0JCAhISEjB79my3xm5vfPz2X375RT5vQkICPvjgA83nveqqq3DhhRdiwIABuPjii/Hdd9/h0KFDWL58uVvjCySh/D46w9n7qPXv8icd8XV3hV4/P+HwXi1ZsgSPP/44li5dioyMDAD0GeHo6XV3hV4/I84IxPv44IMPYvv27fjxxx8RERGBG264Qb6uO3ofnc0DtECfH/297q6gz09w3ke9Xn8c6xeCwMKFC/HVV19h7dq1yM3NlW/PysoCwCLW7Oxs+faKiop2EWhdXR1mzZqFhIQEfP7553bTjqWlpZg6dSrGjh2LN954w+q+b7/9VpbuxcbGah57VlZWu8i3oqICRqMRaWlpSE5OtnIYsR23O2RnZyM/Px+HDx/2+Bz+JJTfR1eMGDGi3fsYHR2NiIgIu++/N++zu3S0191T9PD5CYf3aunSpbj11lvxySefWBku0GdEP6+7p+jhM+KMQL2P6enpSE9PR69evdC3b1/k5eVh48aNGDt2rN330dE8AND+ftDnRz+vu6fQ54fhz/dR19cfjyqzfIzFYhHnz58v5uTkiIcOHbJ7f1ZWlvjvf/9bvq2lpaVdQV1NTY04ZswYcfLkyWJDQ4Pd5yopKRF79uwpXn311aLJZHJ7rM7MK/r27Wt125133ukT8wpbKisrxejoaPGdd97RfO5AEA7voxp3C4v/8Ic/WN3Wt2/fgBQWd+TXXU0ofH7C5b368MMPxZiYGE2vN4c+I9rw9euuJhQ+I84I5PtoS3FxsQhAXLVqlcNjXnnlFTElJUVsaWmRb3viiSd8Zl7RET4/tgT7dVdDnx9GsN9HvV9/dBFY/eEPfxCTk5PF1atXi2VlZfJPY2OjfMwTTzwhJicni8uWLRN3794tXnPNNWJ2drZYW1sriqIo1tbWiqNHjxYHDhwoHjlyxOo8/OJ26tQpsUePHuK0adPEkpISq2NcsXfvXnH79u3ixRdfLE6ZMkXcvn271Yt+9OhRMS4uTrzvvvvEffv2iW+++aYYGRkpfvrpp07PW1dXJ58LgPjMM8+I27dvF0+cOCHf/8ADD4jr168Xjx07Jq5atUocO3as2KVLF/lv1wvh8D6KoijfNnz4cPHaa68Vt2/fLu7du9fpeT/66CMxMjJSfPPNN8V9+/aJ9957rxgfHy8eP35cPqaqqkrcvn27uHz5chGA+NFHH4nbt2/XNG5ndOTXPdQ+P+HwXn344Yei0WgUX375ZavzVldXOz0vfUac46/XPdQ+I84I1Pv422+/iS+++KK4fft28fjx4+LKlSvFCRMmiN27d7dyLLOlurpazMzMFK+55hpx9+7d4rJly8SkpCTxqaeesjqOrjGh87rT50df72MoXH90EVgBsPvz9ttvy8dYLBbxscceE7OyssTo6Ghx0qRJ4u7du+X7V61a5fA8x44dE0VRFN9++22Hx7giPz/f5eNWr14tDh06VIyKihILCgrEV1991eV5HY37xhtvFEVRFBsbG8UZM2aInTt3FiMjI8WuXbuKN954o1hcXOz6hQ0w4fI+2rs/Pz/f5blffvllMT8/X4yKihKHDRsmW5hyHI37sccec3luZ3Tk1z3UPj/h8F5NnjzZ6WvuDPqMOMZfr3uofUacEaj3cdeuXeLUqVPF1NRUMTo6WiwoKBDvvPNOsaSkxOUYd+3aJU6cOFGMjo4Ws7KyxMcff7xd1oSuMaHzutPnR1/vYyhcfwRRVLU0JgiCIAiCIAiCINxGd66ABEEQBEEQBEEQoQYFVgRBEARBEARBEF5CgRVBEARBEARBEISXUGBFEARBEARBEAThJRRYEQRBEARBEARBeAkFVgRBEARBEARBEF5CgRVBEARBEARBEISXUGBFEARBEARBEAThJRRYEQRBEJooKCjAc889p+nYxYsXIyUlxa/j8QRBEPDFF1902OcnCIIg/AcFVgRBEIQmNm/ejHnz5gV7GAHl8ccfx5AhQ3z2uLKyMsyePdv7gREEQRC6wxjsARAEQRChQefOnYM9hJAnKysr2EMgCIIg/ARlrAiCIAgAwJQpU7BgwQIsWLAAKSkpSEtLw1/+8heIogigvRSwuroa8+bNQ2ZmJmJiYjBgwAB88803ds9dVVWFUaNG4ZJLLkFzczOmTJmCe++91+qYuXPn4qabbpJ/LygowD/+8Q9ce+21SEhIQE5ODl588UXNf8/hw4cxadIkxMTEoF+/flixYkW7Y/70pz+hV69eiIuLQ7du3fDXv/4VbW1tAJic8e9//zt27twJQRAgCAIWL14MAKipqcG8efOQkZGBpKQkTJs2DTt37nT5OLUU8Pjx4xAEAR9//DEmTpyI2NhYjBw5EocOHcLmzZsxYsQIJCQkYNasWThz5ozVuN9++2307dsXMTEx6NOnD1555RXNrwtBEAThHyhjRRAEQci88847uPXWW/Hbb79hy5YtmDdvHvLz83H77bdbHWexWDB79mzU1dXh/fffR/fu3bFv3z5ERES0O2dJSQlmzJiBESNG4K233oLRqP3S85///AePPPIIHn/8cfzwww+477770KdPH5x//vlOH2exWHDZZZchPT0dGzduRG1tbbtADgASExOxePFi5OTkYPfu3bj99tuRmJiIhx56CFdddRX27NmD77//Hj/99BMAIDk5GaIo4sILL0Rqaiq+/fZbJCcn4/XXX8d5552HQ4cOOXycIx577DE899xz6Nq1K2655RZcc801SEpKwvPPP4+4uDhceeWV+Nvf/oZXX30VAPDf//4Xjz32GF566SUMHToU27dvx+233474+HjceOONml9bgiAIwrdQYEUQBEHI5OXl4dlnn4UgCOjduzd2796NZ599tl1g9dNPP2HTpk3Yv38/evXqBQDo1q1bu/MdOnQI559/PubMmYPnn38egiC4NZ7x48fjz3/+MwCgV69eWLduHZ599lmXgdVPP/2E/fv34/jx48jNzQUA/Otf/2pX3/SXv/xF3i8oKMADDzyApUuX4qGHHkJsbCwSEhJgNBqtJHwrV67E7t27UVFRgejoaADAU089hS+++AKffvop5s2bZ/dxjvjjH/+ImTNnAgDuueceXHPNNfj5558xfvx4AMCtt94qZ7wA4B//+AeefvppXHbZZQCAwsJC7Nu3D6+//joFVgRBEEGEAiuCIAhCZsyYMVbBz9ixY/H000/DbDZbHbdjxw7k5ubKQZU9mpqaMGHCBFxzzTV4/vnnPRrP2LFj2/2uxZlw//796Nq1qxxU2TsXAHz66ad47rnncOTIEdTX18NkMiEpKcnpubdu3Yr6+nqkpaVZ3d7U1ISioiKXY7Nl0KBB8n5mZiYAYODAgVa3VVRUAADOnDmDkydP4tZbb7UKdk0mk9OsGEEQBOF/KLAiCIIg3CY2NtblMdHR0Zg+fTqWL1+OBx980CrIMRgMcu0Wh9c2uUJL1sv23PYet3HjRlx99dX4+9//jpkzZyI5ORkfffQRnn76aafntlgsyM7OxurVq9vd54nFfGRkZLsx2t5msVjk5waYHHD06NFW57EnwyQIgiACBwVWBEEQhMzGjRvb/d6zZ892k/ZBgwahpKQEhw4dcpi1MhgMeO+993Dttddi2rRpWL16NXJycgAwh8GysjL5WLPZjD179mDq1Kkux9OnTx+Xf0e/fv1QXFyM0tJS+Tk3bNhgdcy6deuQn5+PRx99VL7txIkTVsdERUW1y9YNGzYM5eXlMBqNKCgosPv89h7nCzIzM9GlSxccPXoU1113nc/PTxAEQXgOuQISBEEQMidPnsT999+PgwcPYsmSJXjxxRdxzz33tDtu8uTJmDRpEi6//HKsWLECx44dw3fffYfvv//e6riIiAh88MEHGDx4MKZNm4by8nIAwLRp07B8+XIsX74cBw4cwF133YXq6up2z7Nu3To8+eSTOHToEF5++WV88skndsdjy/Tp09G7d2/ccMMN2LlzJ3755RerAAoAevTogeLiYnz00UcoKirCCy+8gM8//9zqmIKCAhw7dgw7duxAZWUlWlpaMH36dIwdOxZz587FDz/8gOPHj2P9+vX4y1/+gi1btjh8nK94/PHHsWjRIjz//PM4dOgQdu/ejbfffhvPPPOMz56DIAiCcB8KrAiCIAiZG264AU1NTRg1ahTmz5+PhQsXOmwK/Nlnn2HkyJG45ppr0K9fPzz00EN2szRGoxFLlixB//79MW3aNFRUVOCWW27BjTfeiBtuuAGTJ09GYWFhu2wVADzwwAPYunUrhg4dKps2cKMHZxgMBnz++edoaWnBqFGjcNttt+Gf//yn1TFz5szBfffdhwULFmDIkCFYv349/vrXv1odc/nll2PWrFmYOnUqOnfujCVLlkAQBHz77beYNGkSbrnlFvTq1QtXX301jh8/LtdI2Xucr7jtttvwv//9D4sXL8bAgQMxefJkLF68GIWFhT57DoIgCMJ9BNGeEJ0gCILocEyZMgVDhgzRZA4RCAoKCnDvvffatUknCIIgCL1BGSuCIAiCIAiCIAgvocCKIAiCCDk++OADJCQk2P3p379/sIdHEARBdEBICkgQBEGEHHV1dTh9+rTd+yIjI5Gfnx/gEREEQRAdHQqsCIIgCIIgCIIgvISkgARBEARBEARBEF5CgRVBEARBEARBEISXUGBFEARBEARBEAThJRRYEQRBEARBEARBeAkFVgRBEARBEARBEF5CgRVBEARBEARBEISXUGBFEARBEARBEAThJf8fnDyJw4UXXDQAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 1000x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "financial = (\n",
    "    data.groupby([\"company\", pd.Grouper(key=\"pickup_datetime\", freq=\"D\")])[\n",
    "        [\"total_fare\"]\n",
    "    ]\n",
    "    .mean()\n",
    "    .reset_index()\n",
    ")\n",
    "\n",
    "# Example visualization\n",
    "plt.figure(figsize=(10, 6))\n",
    "sns.lineplot(x=\"pickup_datetime\", y=\"total_fare\", hue=\"company\", data=financial)\n",
    "plt.title(\"Average Fare Over Time by Company\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Shared Ride and Accessibility Analysis\n",
    "\n",
    "The next cell analyzes two important service aspects of ride-hailing platforms:\n",
    "\n",
    "1. **Shared Ride Metrics**:\n",
    "   - Calculates average fare and trip time for shared vs. non-shared rides\n",
    "   - Determines the acceptance rate of shared ride requests (when riders opt in but may not get matched)\n",
    "   - Helps understand the economics and efficiency of ride-sharing features\n",
    "\n",
    "2. **Wheelchair Accessibility Metrics**:\n",
    "   - Analyzes average fare and trip time for wheelchair accessible vehicles (WAV)\n",
    "   - Calculates the percentage of wheelchair accessible ride requests that were fulfilled\n",
    "   - Provides insights into service equity and accessibility compliance\n",
    "\n",
    "The analysis prints summary statistics for both service types and their respective acceptance rates.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-03-05T19:15:54.125800Z",
     "iopub.status.busy": "2025-03-05T19:15:54.125570Z",
     "iopub.status.idle": "2025-03-05T19:15:57.078193Z",
     "shell.execute_reply": "2025-03-05T19:15:57.077424Z",
     "shell.execute_reply.started": "2025-03-05T19:15:54.125786Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Shared Ride Acceptance Rate: 33.766986535707765%\n",
      "Wheelchair Accessible Ride Acceptance Rate: 99.99361674964892%\n",
      "  shared_match_flag  mean_fare_shared  mean_time_shared\n",
      "0                 Y         25.189627       1770.353920\n",
      "1                 N         28.541140       1154.111679\n",
      "  wav_match_flag  mean_fare_wav  mean_time_wav\n",
      "0              Y      24.208971    1064.793459\n",
      "1              N      28.819339    1166.241749\n"
     ]
    }
   ],
   "source": [
    "shared_grouped = (\n",
    "    data.groupby(\"shared_match_flag\")\n",
    "    .agg({\"total_fare\": \"mean\", \"trip_time\": \"mean\"})\n",
    "    .reset_index()\n",
    ")\n",
    "\n",
    "shared_grouped.columns = [\"shared_match_flag\", \"mean_fare_shared\", \"mean_time_shared\"]\n",
    "\n",
    "shared_request_acceptance = (\n",
    "    data[data[\"shared_request_flag\"] == \"Y\"]\n",
    "    .groupby(\"shared_match_flag\")[\"shared_request_flag\"]\n",
    "    .count()\n",
    "    .reset_index()\n",
    ")\n",
    "shared_request_acceptance.columns = [\"shared_match_flag\", \"count\"]\n",
    "shared_request_acceptance = shared_request_acceptance.set_index(\"shared_match_flag\")\n",
    "\n",
    "total_shared_requests = shared_request_acceptance.sum()\n",
    "\n",
    "shared_acceptance_rate = (\n",
    "    shared_request_acceptance[\"count\"][\"Y\"] / total_shared_requests * 100\n",
    ")\n",
    "print(f\"Shared Ride Acceptance Rate: {float(shared_acceptance_rate)}%\")\n",
    "\n",
    "wav_grouped = (\n",
    "    data.groupby(\"wav_match_flag\")\n",
    "    .agg({\"total_fare\": \"mean\", \"trip_time\": \"mean\"})\n",
    "    .reset_index()\n",
    ")\n",
    "\n",
    "wav_grouped.columns = [\"wav_match_flag\", \"mean_fare_wav\", \"mean_time_wav\"]\n",
    "\n",
    "# 4. Calculate percentage of wheelchair accessible ride requests that were accepted\n",
    "wav_request_acceptance = (\n",
    "    data[data[\"wav_request_flag\"] == \"Y\"]\n",
    "    .groupby(\"wav_match_flag\")[\"wav_request_flag\"]\n",
    "    .count()\n",
    "    .reset_index()\n",
    ")\n",
    "wav_request_acceptance.columns = [\"wav_match_flag\", \"count\"]\n",
    "wav_request_acceptance = wav_request_acceptance.set_index(\"wav_match_flag\")\n",
    "\n",
    "total_wav_requests = wav_request_acceptance.sum()\n",
    "\n",
    "wav_acceptance_rate = wav_request_acceptance[\"count\"][\"Y\"] / total_wav_requests * 100\n",
    "print(f\"Wheelchair Accessible Ride Acceptance Rate: {float(wav_acceptance_rate)}%\")\n",
    "\n",
    "# Display the results\n",
    "print(shared_grouped)\n",
    "print(wav_grouped)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Fare Per Mile Analysis\n",
    "\n",
    "In the next three cells, we:\n",
    "\n",
    "1. Define a function `fare_per_mile()` that calculates the fare per mile for each trip by dividing the total fare by the trip miles. The function includes validation to handle edge cases where trip miles or trip time might be zero.\n",
    "\n",
    "2. Apply this function to create a new column in our dataset called 'fare_per_mile', which represents the cost efficiency of each trip.\n",
    "\n",
    "3. Calculate and display summary statistics for fare per mile grouped by trip category, showing the mean fare per mile and count of trips for each category. This helps us understand how cost efficiency varies across different trip types.\n",
    "\n",
    "This analysis provides insights into pricing efficiency and helps identify potential pricing anomalies across different trip categories.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-04-23T20:29:28.975720Z",
     "iopub.status.busy": "2025-04-23T20:29:28.975023Z",
     "iopub.status.idle": "2025-04-23T20:29:28.978874Z",
     "shell.execute_reply": "2025-04-23T20:29:28.978496Z",
     "shell.execute_reply.started": "2025-04-23T20:29:28.975704Z"
    }
   },
   "outputs": [],
   "source": [
    "def fare_per_mile(row):\n",
    "    if row[\"trip_time\"] > 0:\n",
    "        if row[\"trip_miles\"] > 0:\n",
    "            return row[\"total_fare\"] / row[\"trip_miles\"]\n",
    "        else:\n",
    "            return 0\n",
    "    return 0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-04-23T20:30:10.685354Z",
     "iopub.status.busy": "2025-04-23T20:30:10.685045Z",
     "iopub.status.idle": "2025-04-23T20:30:10.957399Z",
     "shell.execute_reply": "2025-04-23T20:30:10.956716Z",
     "shell.execute_reply.started": "2025-04-23T20:30:10.685340Z"
    }
   },
   "outputs": [],
   "source": [
    "data[\"fare_per_mile\"] = data.apply(fare_per_mile, axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-04-23T20:30:12.264019Z",
     "iopub.status.busy": "2025-04-23T20:30:12.263438Z",
     "iopub.status.idle": "2025-04-23T20:30:12.332315Z",
     "shell.execute_reply": "2025-04-23T20:30:12.331756Z",
     "shell.execute_reply.started": "2025-04-23T20:30:12.264003Z"
    }
   },
   "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 tr th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr:last-of-type th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th colspan=\"2\" halign=\"left\">fare_per_mile</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th>mean</th>\n",
       "      <th>count</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>trip_category</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>short</th>\n",
       "      <td>11.523434</td>\n",
       "      <td>16590987</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>medium</th>\n",
       "      <td>7.993338</td>\n",
       "      <td>24870225</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>long</th>\n",
       "      <td>6.310465</td>\n",
       "      <td>23707938</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "              fare_per_mile          \n",
       "                       mean     count\n",
       "trip_category                        \n",
       "short             11.523434  16590987\n",
       "medium             7.993338  24870225\n",
       "long               6.310465  23707938"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Create a mapping for trip categories\n",
    "trip_category_map = {0: \"short\", 1: \"medium\", 2: \"long\"}\n",
    "\n",
    "# Calculate fare per mile statistics grouped by trip category\n",
    "fare_per_mile_stats = data.groupby(\"trip_category\").agg(\n",
    "    {\"fare_per_mile\": [\"mean\", \"count\"]}\n",
    ")\n",
    "\n",
    "# Add a more descriptive index using the mapping\n",
    "fare_per_mile_stats.index = fare_per_mile_stats.index.map(\n",
    "    lambda x: f\"{trip_category_map[x]}\"\n",
    ")\n",
    "\n",
    "fare_per_mile_stats"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Conclusion\n",
    "\n",
    "This example showcases how data scientists can leverage GPU computing through RAPIDS cuDF.pandas to analyze transportation data at scale, gaining insights into pricing patterns, geographic hotspots, and service efficiency.\n",
    "\n",
    "For additional learning resources:\n",
    "* Blog: [Simplify Setup and Boost Data Science in the Cloud using NVIDIA CUDA-X and Coiled](https://developer.nvidia.com/blog/simplify-setup-and-boost-data-science-in-the-cloud-using-nvidia-cuda-x-and-coiled/)\n",
    "* [cuDF.pandas](https://rapids.ai/cudf-pandas/) - Accelerate pandas operations on GPUs with zero code changes, getting up to 150x performance improvements while maintaining compatibility with the pandas ecosystem\n",
    "* [RAPIDS workflow examples](https://docs.rapids.ai/deployment/stable/examples/) - Explore a comprehensive collection of GPU-accelerated data science workflows spanning cloud deployments, hyperparameter optimization, multi-GPU training, and integration with platforms like Kubernetes, Databricks, and Snowflake\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": []
  }
 ],
 "metadata": {
  "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.12.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
