{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Cox-Time\n", "\n", "In this notebook we will train the [Cox-Time method](http://jmlr.org/papers/volume20/18-424/18-424.pdf).\n", "We will use the METABRIC data sets as an example\n", "\n", "A more detailed introduction to the `pycox` package can be found in [this notebook](https://nbviewer.jupyter.org/github/havakv/pycox/blob/master/examples/01_introduction.ipynb) about the `LogisticHazard` method.\n", "\n", "The main benefit Cox-Time (and the other Cox methods) has over Logistic-Hazard is that it is a continuous-time method, meaning we do not need to discretize the time scale." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from sklearn.preprocessing import StandardScaler\n", "from sklearn_pandas import DataFrameMapper\n", "\n", "import torch\n", "import torchtuples as tt\n", "\n", "from pycox.datasets import metabric\n", "from pycox.models import CoxTime\n", "from pycox.models.cox_time import MLPVanillaCoxTime\n", "from pycox.evaluation import EvalSurv" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "## Uncomment to install `sklearn-pandas`\n", "# ! pip install sklearn-pandas" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "np.random.seed(1234)\n", "_ = torch.manual_seed(123)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Dataset\n", "\n", "We load the METABRIC data set and split in train, test and validation." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "df_train = metabric.read_df()\n", "df_test = df_train.sample(frac=0.2)\n", "df_train = df_train.drop(df_test.index)\n", "df_val = df_train.sample(frac=0.2)\n", "df_train = df_train.drop(df_val.index)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
x0x1x2x3x4x5x6x7x8durationevent
05.6038347.81139210.7979885.9676071.01.00.01.056.84000099.3333360
15.2848829.58104310.2046205.6649701.00.00.01.085.94000295.7333301
36.6540175.3418468.6463795.6558880.00.00.00.066.910004239.3000030
45.4567475.33974110.5557246.0084291.00.00.01.067.84999856.9333341
55.4258266.33118210.4551455.7490531.01.00.01.070.519997123.5333330
\n", "
" ], "text/plain": [ " x0 x1 x2 x3 x4 x5 x6 x7 x8 \\\n", "0 5.603834 7.811392 10.797988 5.967607 1.0 1.0 0.0 1.0 56.840000 \n", "1 5.284882 9.581043 10.204620 5.664970 1.0 0.0 0.0 1.0 85.940002 \n", "3 6.654017 5.341846 8.646379 5.655888 0.0 0.0 0.0 0.0 66.910004 \n", "4 5.456747 5.339741 10.555724 6.008429 1.0 0.0 0.0 1.0 67.849998 \n", "5 5.425826 6.331182 10.455145 5.749053 1.0 1.0 0.0 1.0 70.519997 \n", "\n", " duration event \n", "0 99.333336 0 \n", "1 95.733330 1 \n", "3 239.300003 0 \n", "4 56.933334 1 \n", "5 123.533333 0 " ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_train.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Feature transforms\n", "We have 9 covariates, in addition to the durations and event indicators.\n", "\n", "We will standardize the 5 numerical covariates, and leave the binary variables as is. As variables needs to be of type `'float32'`, as this is required by pytorch." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "cols_standardize = ['x0', 'x1', 'x2', 'x3', 'x8']\n", "cols_leave = ['x4', 'x5', 'x6', 'x7']\n", "\n", "standardize = [([col], StandardScaler()) for col in cols_standardize]\n", "leave = [(col, None) for col in cols_leave]\n", "\n", "x_mapper = DataFrameMapper(standardize + leave)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "x_train = x_mapper.fit_transform(df_train).astype('float32')\n", "x_val = x_mapper.transform(df_val).astype('float32')\n", "x_test = x_mapper.transform(df_test).astype('float32')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The targets (durations and events) also needs to be arrays of type `'float32'`, and with the `CoxTime.label_transform` we standardize the durations." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "labtrans = CoxTime.label_transform()\n", "get_target = lambda df: (df['duration'].values, df['event'].values)\n", "y_train = labtrans.fit_transform(*get_target(df_train))\n", "y_val = labtrans.transform(*get_target(df_val))\n", "durations_test, events_test = get_target(df_test)\n", "val = tt.tuplefy(x_val, y_val)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "((305, 9), ((305,), (305,)))" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "val.shapes()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "With `TupleTree` (the results of `tt.tuplefy`) we can easily repeat the validation dataset multiple times. This will be useful for reduce the variance of the validation loss, as the validation loss of `CoxTime` is not deterministic." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "((610, 9), ((610,), (610,)))" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "val.repeat(2).cat().shapes()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Neural net\n", "\n", "We create a simple MLP with two hidden layers, ReLU activations, batch norm and dropout. \n", "The net required by `CoxTime` is slightly different than most of the other methods as it also take `time` and an additional input argument. \n", "We have therefore crated the `MLPVanillaCoxTime` class that is a suitable version of `tt.practical.MLPVanilla`.\n", "This class also removes the options for setting `out_features` and `output_bias` as they should be `1` and `False`, respectively.\n", "\n", "To see the code for the networks call `??MLPVanillaCoxTime`." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "in_features = x_train.shape[1]\n", "num_nodes = [32, 32]\n", "batch_norm = True\n", "dropout = 0.1\n", "net = MLPVanillaCoxTime(in_features, num_nodes, batch_norm, dropout)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Training the model\n", "\n", "To train the model we need to define an optimizer. You can choose any `torch.optim` optimizer, but here we instead use one from `tt.optim` as it has some added functionality.\n", "We use the `Adam` optimizer, but instead of choosing a learning rate, we will use the scheme proposed by [Smith 2017](https://arxiv.org/pdf/1506.01186.pdf) to find a suitable learning rate with `model.lr_finder`. See [this post](https://towardsdatascience.com/finding-good-learning-rate-and-the-one-cycle-policy-7159fe1db5d6) for an explanation.\n", "\n", "We also set `labtrans` which connects the output nodes of the network the the label transform of the durations. This is only useful for prediction and does not affect the training procedure." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "model = CoxTime(net, tt.optim.Adam, labtrans=labtrans)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "batch_size = 256\n", "lrfinder = model.lr_finder(x_train, y_train, batch_size, tolerance=2)\n", "_ = lrfinder.plot()" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.050941380148164093" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lrfinder.get_best_lr()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Often, this learning rate is a little high, so we instead set it manually to 0.01" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "model.optimizer.set_lr(0.01)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We include the `EarlyStopping` callback to stop training when the validation loss stops improving. After training, this callback will also load the best performing model in terms of validation loss." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "epochs = 512\n", "callbacks = [tt.callbacks.EarlyStopping()]\n", "verbose = True" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0:\t[0s / 0s],\t\ttrain_loss: 0.6933,\tval_loss: 0.6385\n", "1:\t[0s / 0s],\t\ttrain_loss: 0.6647,\tval_loss: 0.6199\n", "2:\t[0s / 0s],\t\ttrain_loss: 0.6206,\tval_loss: 0.6070\n", "3:\t[0s / 0s],\t\ttrain_loss: 0.6209,\tval_loss: 0.6077\n", "4:\t[0s / 0s],\t\ttrain_loss: 0.6191,\tval_loss: 0.5916\n", "5:\t[0s / 0s],\t\ttrain_loss: 0.5963,\tval_loss: 0.5833\n", "6:\t[0s / 0s],\t\ttrain_loss: 0.5866,\tval_loss: 0.6018\n", "7:\t[0s / 0s],\t\ttrain_loss: 0.5936,\tval_loss: 0.6034\n", "8:\t[0s / 0s],\t\ttrain_loss: 0.5827,\tval_loss: 0.5987\n", "9:\t[0s / 0s],\t\ttrain_loss: 0.5864,\tval_loss: 0.6055\n", "10:\t[0s / 0s],\t\ttrain_loss: 0.5861,\tval_loss: 0.6134\n", "11:\t[0s / 0s],\t\ttrain_loss: 0.5712,\tval_loss: 0.5782\n", "12:\t[0s / 0s],\t\ttrain_loss: 0.5819,\tval_loss: 0.5991\n", "13:\t[0s / 0s],\t\ttrain_loss: 0.5775,\tval_loss: 0.5765\n", "14:\t[0s / 0s],\t\ttrain_loss: 0.5685,\tval_loss: 0.5881\n", "15:\t[0s / 0s],\t\ttrain_loss: 0.5803,\tval_loss: 0.5782\n", "16:\t[0s / 0s],\t\ttrain_loss: 0.5956,\tval_loss: 0.5880\n", "17:\t[0s / 0s],\t\ttrain_loss: 0.5657,\tval_loss: 0.5825\n", "18:\t[0s / 0s],\t\ttrain_loss: 0.5677,\tval_loss: 0.6120\n", "19:\t[0s / 1s],\t\ttrain_loss: 0.5648,\tval_loss: 0.6027\n", "20:\t[0s / 1s],\t\ttrain_loss: 0.5777,\tval_loss: 0.6050\n", "21:\t[0s / 1s],\t\ttrain_loss: 0.5633,\tval_loss: 0.5860\n", "22:\t[0s / 1s],\t\ttrain_loss: 0.5808,\tval_loss: 0.5941\n", "23:\t[0s / 1s],\t\ttrain_loss: 0.5830,\tval_loss: 0.5917\n", "CPU times: user 2.68 s, sys: 94.4 ms, total: 2.77 s\n", "Wall time: 1.32 s\n" ] } ], "source": [ "%%time\n", "log = model.fit(x_train, y_train, batch_size, epochs, callbacks, verbose,\n", " val_data=val.repeat(10).cat())" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "_ = log.plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can get the partial log-likelihood" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "-4.855360578086461" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model.partial_log_likelihood(*val).mean()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Prediction\n", "\n", "For evaluation we first need to obtain survival estimates for the test set.\n", "This can be done with `model.predict_surv` which returns an array of survival estimates, or with `model.predict_surv_df` which returns the survival estimates as a dataframe.\n", "\n", "However, as Cox-Time is semi-parametric, we first need to get the non-parametric baseline hazard estimates with `compute_baseline_hazards`. \n", "\n", "Note that for large datasets the `sample` argument can be used to estimate the baseline hazard on a subset." ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "_ = model.compute_baseline_hazards()" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "surv = model.predict_surv_df(x_test)" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYcAAAEGCAYAAACO8lkDAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nOzdd3hUxRrA4d/Z9F5IgBSSEEIgBEILvTeDVBWkgwgIKuUqoigoihRBBEURRBALCkjvvfcSSuiQEEoK6ZBeNrtz/1hEkEDapkDmfR6f6+6ZnfOdC+6358zMN4oQAkmSJEl6lKqkA5AkSZJKH5kcJEmSpCfI5CBJkiQ9QSYHSZIk6QkyOUiSJElPMCzpAArCwcFBeHh4lHQYkiRJz43Tp0/HCSEc89r+uUwOHh4eBAYGlnQYkiRJzw1FUW7np718rCRJkiQ9QSYHSZIk6QkyOUiSJElPeC7HHCRJkkqCWq0mPDycjIyMkg7lqUxNTXF1dcXIyKhQ/cjkIEmSlEfh4eFYWVnh4eGBoiglHc4ThBDEx8cTHh5O5cqVC9VXkT5WUhRliaIoMYqiXHzKcUVRlO8VRQlRFOW8oij1ijIeSZKkwsjIyKBcuXKlMjEAKIpCuXLl9HJnU9RjDr8BHZ9x/GWg6oN/hgMLijgeSZKkQimtieEf+oqvSB8rCSEOKori8Ywm3YE/hK5u+HFFUWwVRXESQtx9Vr9xd8JZ/L+PEM5GqBRDXGp50aRtN2xMbPQYvSRJUtlV0rOVXICwR16HP3jvCYqiDFcUJVBRlECtsCEzsyNZN9uREdqKiBXG7Ov+HgsGtGLBotGcuH2oWIKXJEkqCdu3b6datWp4eXkxY8aMIjlHSSeHnO5/ctx9SAjxsxDCXwjhb+sgqO9zjhrOR/G03gcm2UR4DESYT8Dzb8G9Ae/yyfzXOBJxpIjDlyRJKl4ajYaRI0eybds2Ll++zPLly7l8+bLez1PSs5XCgUqPvHYFInP7kLGFNY3/N/bhaxF5jujtK9h7ujohXq9hfd+XAT/MY13gW3z/ak287avRu1pvajrU1P8VSJIkFaOTJ0/i5eWFp6cnAH369GHDhg3UqFFDr+cp6eSwERilKMoKoBGQmNt4Q04U5zpUHFKH3t4LOLluDWfowcF679H9xI80vxXCWdervOe/gY+7z6G9e3u9X4QkSWXP5E2XuByZpNc+azhb83lX32e2iYiIoFKlf39Tu7q6cuLECb3GAUWcHBRFWQ60BhwURQkHPgeMAIQQPwFbgU5ACJAGvFmY8xk0f4fG5bagWrySQHqxpd671AhdR8eTt2gQYsxXhhOIbxtPr2q9Sv2MA0mSpJzo5u88rii+z4p6tlLfXI4LYKQ+z6lU70Sj9gdJ2rGf67TiYN8vWHT2OFNOLGHgfphqMZW/rv7FwBoD6VG1ByqlpIddJEl6HuX2C7+ouLq6Ehb27zye8PBwnJ2d9X6eF++bUVGg4wyaVzmOiSqdyhdT6VbBny3enal9PpmF5/0xNTDly2NfMmLXCILvBZd0xJIkSXnWoEEDgoODuXnzJllZWaxYsYJu3brp/TwvXnIAUBTMOk+gT7kxNK92jqyETIy8XuK4qx92W44za60l44w6cyrqFK9tfI1em3pxLPJYSUctSZKUK0NDQ+bNm0dAQAA+Pj706tULX1/938UoOT2/Ku38/f1Frpv9aLWwbjhcWMX51E4cSn6LXeaZNLm7m1duHUOblITtvG844HSf3y79RkRKBIN9BzO2/lg5HiFJUo6uXLmCj49PSYeRq5ziVBTltBDCP699vJh3DgAqFfRYDGOvUsv+KNYmCXS2t2WBe1vGd5uIppwj90d/yEsn1awLWEEXzy78duk3xuwdQ3hyeElHL0mSVKJe3OTwD2snlE5f42FwhOzINH541Y9wjTFjffsgXCoRPX06Ed168JlNX8b5j+PY3WN0Xd+V705/l+OsAEmSpLLgxU8OAH698HG8BEJL5v5otv6vBXHOnoxo+wE2CxejzcjgzoCB9IivzJZXt9DKtRW/XPyFDw58QJYmq6SjlyRJKnZlIzkoCg4+XtSz2Uz0zSTizicwtoM3YfcyaLUzkWuffYeRszORn0zALiGLOa3n8Hbtt9l1exdfHvuSlKyUkr4CSZKkYlU2kgOAR3PqmSyjQrkU9i29isedLDaPbk5dNztGH4jh2BvjIDubO8OGkRUcwsg6IxlScwgbbmxg8PbBJGYmlvQVSJIkFZuykxz8emPk3ZpXzUZStZ49QXvDsE8XLBvWiIaV7fk0KIML73yKNjWNW737kLh5C+/Xf5/v2nzH9XvXGbx9MOuC15GUpd/l8pIkSaVR2UkOKgNoOAKD7CRaW3yPmZURJzaEYmigYunQhvg6W/N1pCmOy//GpEoVIseNI+XQIdq5tWNO6zlkabKYdHQSLVe0ZNrxaXKwWpKkEjFkyBDKly9PzZpFW0i07CQHgKrtoe1nGAevoarZUSKD77NrySUMBEzu5ktcShZTjsbgtngRhhUqED7mf6gjI2nv3p7Nr27mz05/0sS5CSuurWDK8SlyLEKSpGI3ePBgtm/fXuTnKVvJAaDlOGj/BU2UWdT0y+b6qWi2LbhAHRcb3m1dhbVnI5hyMAKXn35CZGUR8+13CI0GRVGo7Vib+e3m061KN1ZdX0WXdV24lnCtpK9IkqQypGXLltjb2xf5eUq6ZHfJaPwuhqeW0Mp0Do4DlrBv6VVObb7Je929ScnM5tcjt7gR68Dst0cQ/+N8VObmOE3+AtBVP5zWfBoBHgGMPzieUXtHsf217RioDEr2miRJKl7bPoaoC/rts2IteLlodnbLr7J35wBgaALVO8GdY9RI/BbP2uU4s+MON8/G8nlXX0a09ORQcBwX2vfCrn9/7v/9NykHDz7WRUvXlnze5HOiUqOYeGQiUalRJXQxkiRJ+lc27xwA2k2C1Fg4+TPtamYSY9+boD1heNUvz5h2VVl/LoJxq4LYN/o9DHftImLsB5QbNhT7QYNQmZsD8JLHSwTFBrHs6jL23tnLq16vMqbeGCyMLEr44iRJKnKl5Bd+USmbdw4AxhbQcwm0Go/xxd/xrXyXqNBEokITsTAxZFbP2txLU7M9OAH3Zcswq12b2O/mcr1pMxL++AMAlaJifMPxrO66mjaV2rDi2goGbB1ARnZGCV+cJElS4ZTd5PCP1p+AU2387o7F3FLh+IYbCCFoUdUB7wqWzN51nSgzO9x+WYz7X39iWr060dO/IuvOnYddVLWrysyWM5ndajYh90NYE7ymBC9IkqQXWd++fWnSpAnXrl3D1dWVX375pUjOI5ODosDrv2NsoKZehaNEXLvP2Z13UBSFef3qkZqZzQerzqHVCszr18d55gwUU1PuDBlKZvDjGwW1c2uHn4MfswNnE5MWU0IXJEnSi2z58uXcvXsXtVpNeHg4Q4cOLZLzyOQAYF8ZavelVuaPeNW25ti6G1zYH453BSsmdPLh1K17HL0RD4Cxuzsus79BHRnJ7cFvkh0b+7AbRVEYVmsYaq2aV9a/ws5bO0vqiiRJkgpFJod/NH4XlTaL9i4rca5qy+FVwagzNfSo54qViSFTNl/mVlwqAFbt2lFp0c9okpKIGPvBY920cWvD8s7LSc9OZ/yh8QTFBpXE1UiSJBWKTA7/cPACv94YBP1KvYZatBrB5cORmBkbsGBAfW4npPLSdweZtzeYxDQ1ls2a4fDWW6SdOkV2fPxjXdV0qMmyzsuwM7Fj0LZBjNk7hsCoXHaukyRJKkVkcnhU+8/BvBzux3pRroIRJzffJCNVTfOqDuwb15omnuX4Zud1Rvyp+6K3bN0KgIhx49AkPV6Qz6ecDxte2UB/n/4cCj/EmzveZPnV5cV+SZIkSQUhk8OjLMvDG5tBk01To7lkpWcTfvUeAE42Zvw+pCHDW3pyPDSBS5GJmPn54TByJGnHjnPzlVdJO3Xqse6sjK34qMFH7Oi5g2p21fjhzA+EJYeVxJVJkiTli0wO/+XgBe0/x0W9FyNjwY0zj886GtHSE1MjFR+vuUBCahaOo0fh8t13CLWa24PeIGnHk4PQ5c3L83mTz8nUZNJjYw9OR58urquRJEkqEJkccuLXCwMzS/zsDhFyOobQc//OSCpnacJnXWpwISKRD1aeQwiBdccAquzYjmmNGkR88AHqmCensdZyrMXqbqupYF6Bd3e/y8m7J4vziiRJekGEhYXRpk0bfHx88PX1Ze7cuUVyHpkccmJiBS0/ogE/YG0LJzaGotX+u39D/0buvNu6CvuuxbIxKBJAV5xv2lTIziZl794cu61sU5nFLy3G0dyRUXtHMf3EdM7FnCuWS5Ik6cVgaGjI7NmzuXLlCsePH+fHH3/k8uXLej+PTA5PU28QBipBgyqXSYhMJerG/ccOj2lXFU9HC346EPrwPZNq1TBydyNxw8andlvBogI/tvuRuuXrsvr6agZuG8jIPSPZHLoZjVZTZJcjSdKLwcnJiXr16gFgZWWFj48PERERej9P2S28lxtTa/DpgseV2cAvhJyJxbmq3b+HjQzo06AS07deJT4lk3KWJiiKglW79iQsWULamTOYP/gD/C93a3cWdlhIXHocv1z4hQ0hGzgYfpBPDn3CxEYT6endE0OV/KORpNJs5smZXE24qtc+q9tXZ3zD8Xluf+vWLc6ePUujRo30GgfIO4dn6/QNpiZaqjpc4cK+cA6vCn5se9A6lXTJ4tcjtx6+Z9e3DypLS+68MZiUAwee2b2DmQPjG47nQJ8DDKwxEGcLZ6admEa9pfX46MBH8m5CkqSnSklJoUePHnz33XdYW1vrvX/ledwL2d/fXwQGFtOisiNz0ez8kj0O6wm+pMalmh0t+3hj76Qry/3WH4HsuhzNhwHVGNnGCwB1dAwhrXRrIKoFnUNlYpKnU2mFlvUh69lxawcXYi+QrE6mi2cXpjabKjcTkqRS4MqVK/j4+JR0GKjVarp06UJAQABjx4594nhOcSqKcloI4Z/Xc8g7h9z49cFAyaZDtd00fsWTiOv32P/Xv7eSc/vUoYGHHbN2XOOLjZfQagVGFcpT8fNJANyd+ClCrc7TqVSKiteqvsbCDgs53Pcw/X36szl0M0N2DCE2LTb3DiRJeuEJIRg6dCg+Pj45JgZ9KdLkoChKR0VRrimKEqIoysc5HHdTFGWfoihnFUU5ryhKp6KMp0CsKkC1zihHv6O+sog67SpxNySRpPh0AMyNDfl9SEMGNnbnt6O3+O3oLQDs+vbF8f33Sdq8meDmLUjatStfp1UpKj5u+DGTm07mUvwlRuweIferliSJI0eOsHTpUvbu3UudOnWoU6cOW7du1ft5iiw5KIpiAPwIvAzUAPoqilLjP80+BVYKIeoCfYD5RRVPofRYDL6vwrF5VI+eAkDo2X9/yZsbG/Jld19aeTsybesV4lIyAXAYMZxKC39CZWtDxOgx+U4QAK9VfY33679P8L1gem7qSf+t/WWSkKQyrHnz5gghOH/+POfOnePcuXN06qT/39VFeefQEAgRQoQKIbKAFUD3/7QRwD8jKTZAZBHGU3DG5tDzV+g4k3LJ+ylvFsbRNSFEBt972ERRFP7XvioareB46L+F+CxbtcJt8WIMHByIW7CgQKfv79Of3T13M7b+WC7EXqDnpp5MPDyR+xn3c/+wJElSARRlcnABHi0kFP7gvUd9AQxQFCUc2AqMflpniqIMVxQlUFGUwNjYEnj+rijQ+G1oMooAyymoVHBwxfXHZi/5OltjbKDi2I3Hq7QaV6qE/RuDyLx8pUB3D6BbH/FmzTdZ3309Par2YEvoFlr83YK3d79NYmZioS5NkiTpv4oyOSg5vPffqVF9gd+EEK5AJ2Cpoig5xiSE+FkI4S+E8Hd0dNRzqPngPxRr40SauB0mPiKVm0FxDw+ZGBrQprojh4LjnviYbY8eGDg6EDH2A9IvXCzw6T1tPfmi6Res7roabztvjkQcIWBNAEsvL0WtydvAtyRJUm6KMjmEA5Ueee3Kk4+NhgIrAYQQxwBTwKEIYyo8i3LQdDQ1UudhZZZO0J7Hq6xWq2jNnYQ0jt54PEEY2tvjuXEjBrY2RH78MdqMjEKF4WXnxcouK1nYYSE1y9Xk61Nf03ZVWy7EXuB5nJ4sSVLpUpTJ4RRQVVGUyoqiGKMbcP5vXYk7QDsARVF80CWH0j9ns90kjHwDqKraRtSN+2g12oeH+jdyw8bMiJF/nSHifvpjHzO0s8N5+nSybtwg/uefCx2GgcqAps5NWfTSIr5r8x0arYZ+W/vxzu53uJZwTSYJSZIKrMiSgxAiGxgF7ACuoJuVdElRlC8VRen2oNkHwFuKogQBy4HB4nn5Rmv/BTbGcWi1kBT/711ABWtT1rzThHtpal758cgTH7Ns0QLrrl2J+3kRER9+RPq5whfeUxSFdm7t+OPlP+hTrQ/H7h6j56aejNk7hkxNZqH7lySp7CnSdQ5CiK1CCG8hRBUhxLQH700SQmx88O+XhRDNhBC1hRB1hBBPboZQWpWrQsU6PoCWSwfCHzvkVd6KOpVsiU3OJDg6+YmPVpw4AdvXXiN5zx5u9elL/G+/oc3KKnRIXnZeTGw8kR09dtDTuyf7w/fTYVUHjkYcLXTfkiSVDhkZGTRs2JDatWvj6+vL559/XiTnkSukC8HeuwpVTI9xbk84Iacf38Nh0SB/rEwMGb38LEkZjw8UG9ja4vTlZCqvWY2pry8xM2ZyvXETEn7/XS9xVbSoyKTGk5jZYib3Mu8xYvcI3tv3HnHpTw6US5L0fDExMWHv3r0EBQVx7tw5tm/fzvHjx/V+HpkcCqNyK1rZ/4mlcRL7l10lITL14SFHKxPmD6hHcEwKTabvYdfl6Cc+blK5Mh6rVuI8+xtEWhrRX80gcvzHZCckFDo0RVHo5NmJfb320dO7J4fCDzFg6wC239xe6L4lSSo5iqJgaWkJ6GosqdVqFCWnyaGFPM/z8oj/UcVaeC83h2YTu30pm5KmojG0ov/kJphbGz88fPp2AmOWnyPifjq7x7bCq7xljt2oIyOJ/uorknftBsD+zTex6d4N0+rV9RJmYFQg005MI+R+CNOaT6NblW65f0iSpMc8WtAuavp0Mq/ot2S3iU91Kk6YkGs7jUZD/fr1CQkJYeTIkcycOfOpcf5DFt4rbs3H4tisA6/afIQ6Xc2J9cGPHa7vbs+3veugKDBrx9P/Ihk5O+P6ww9UmPAJxl5VSPj1V272fJ2Ugwf1EqZ/RX9Wdl1JI6dGfH70czkOIUnPMQMDA86dO0d4eDgnT57k4sWCr516GnnnoA9CwOlfObjsIhfSujB4RjMsbB8v0z1+9Xm2XbxL0Ocv5XoLKIRAfecO4aNGk3XnDpXXrcXE01Mvod7PuE/vzb2JTI3E0cyRac2n0cS5iV76lqQXXWkp2f2oyZMnY2Fhwbhx4x6+J+8cSgtFAf8heNU0ByDmyq0nmvh72JGUkc2SI08ee7I7BWN3d1zn/QAqFWHDR6C5r586SramtqzosoI3fd9EK7S8vftt9oft10vfkiQVvdjYWO4/+D5IT09n9+7dVNfT4+dHyeSgRw5tegCQcO36E8e61XGmiqMF07de4WpUUp76M3Z3p9KCBagjI4mZ863e4rQztWOs/1i2vrYVH3sf3t//vhyolqTnxN27d2nTpg1+fn40aNCADh060KVLF72fRyYHPTJ2q4m9YRhhwWlPHDMxNGDNO00xNVQxe+eTyeNpLBo3wm5Af+6vXMntAQNJv3BBb/GaG5mz6KVFeFh78OHBDxl/cDxp6idjlySp9PDz8+Ps2bOcP3+eixcvMmnSpCI5j0wO+mRgRAXHdO4lGud42NbcmBGtqrDrcjSBt/I+XbX8++/jMHoUmcHB3Hq9Fwl/LNVXxFgZWzG/3Xw8rD3YenMrfbf05WD4QbRCm/uHJUl6YcnkoGdW5cxIy7bh7sH9OR4f1qIy5SyM+X5vSJ77VJmZ4ThyJFX27MHIxYXo6dMJHz260MX7/uFk6cSmVzfxXevvSM5KZuSekXRd15VNNzbJJCFJZZRMDnrm80pbDJUM9q0KQxN3+4nj5saGvNXSk4PXY+n107Enqrc+i4GlBZXXrcWuX1+Sd+3mRkBHEjf+t5ZhwbVzb8f2HtuZ3HQyKkXFhMMT6LS2E8uvLidbm62380iSVPrJ5KBnlq6VeKmfM/fULhybtTDHNsOaV+bTzj6ExqXSb9EJDgXnvRCtgbU1FSdNwvWnBWRHRxP50Xhif5iH0OrnF76xgTGvVX2N9d3XM6TmEIxURkw/MZ13dr/D+djzejmHJEmln0wORcCjeW0UtAQltkd798nFKYYGKoa18OT3IQ1wsDRh4C8neW/FWTLUmjyfw6p1ayqvX4dprVrE/fgjYW8NRx39ZImOgjJQGfB+/ffZ9OomPmv8GaeiTtF/a39a/92asOSw3DuQJOm5JpNDEVAUhUYvOwEQ+fsUSInJsZ2vsw17xraiex1n1p+LpPpn24lPyXuJbdPq1fFY+TcVJn1G6rFj3Oj4MhnX8z4TKq96VevFjh47qGxTmfiMeHps7EFgVClahChJkt7J5FBEagVUw8ISDoV3QvNNTQj6O8d2NuZGfNe7Dq28dVufdpx7KF8zmRRFwb5fPzz+/hsUhZvduhMze7beN/qpYFGBja9sZFmnZRgoBry7511C7uV9UF2SJP3RaDTUrVu3SNY3/EMmhyJibGpIm8G1SciuxNrEWdxbNRluPbn5D+i+4H8f0pBfBzcgNjmTnj8dY9yqIC5H5m2xHIBZrZq4fDMLw4oViV+0mJB27Ug7fVpfl/NQLcdarO62GgsjC17d+Cqj9oziVNQpvZ9HkqSnmzt3bpGX8ZDJoQi51yxH6/7ViFdXYm/SGDgw85nt21Qvz7JhjajnZsvq0+G8Mv8IlyIT83w+q7Zt8dq5A/s330QTF0/EB+NQR+f8SKswXCxdWNRhEc1cmnEs8hhDdgzhrZ1vsSV0C/cz9FPmQ5KknIWHh7NlyxaGDRtWpOcxLNLeJXxbuJAUl8GZHXDxygFqZiaDidVT2zf1cmCtlwOhsSn0WniM0cvOsvV/LTA1MsjT+RRjYyqM/wjzBv6EjxzFjYAA3Jb8gnm9evq6JEC369xP7X8iPTudpZeXsjZ4LR8f+hiArp5d+bLZlxiq5F8v6cV1aOV14sJS9NqnQyVLWvTyfmab9957j6+//prk5Cd3mdQneedQDOq/7I6lNYSkNYaVg0Cb+6wkT0dLJnerSWhcKj8fDM33Oa3atqXS4kWIjAzCho8gcdOmgoSeKzNDM4b7DWfba9v4vs33tHBpwabQTXx86GMSM/N+1yNJUu42b95M+fLlqV+/fpGfS/60KwbGpoZUruvCtSPZiJBJKGf+AP83c/1cp1oVaeXtyLe7r9OhRgV8nKzzdV7LZs3wWL2a8JEjifzwIzRJSdj371/Qy3gmRVFo49aGNm5t+PrU1yy9vJR9d/YxuOZgRtUZVSQ7VUlSScrtF35ROHLkCBs3bmTr1q1kZGSQlJTEgAED+PPPP/V+LnnnUEzKuVqSlW1IuHUv2P05pMbn+hlFUfi+T10sjQ35YW9wru1zYlbTlyq7dmLRtCnRU6cRNW263mcy/ddHDT5iRZcVuFq58vP5nxm0bRDHIo8V6TklqSz46quvCA8P59atW6xYsYK2bdsWSWIAmRyKTZW65TE0MWBvzACyMzLh4Nd5+pyNuRH9G7uz9UIU/1txlsQ0db7PrTI2xuX777Ht2ZN7S5eSpMeSG0/jW86X1d1W81attwhLDmP4ruH029KPjGz91IOSJKloyeRQTEwtjWg/2IeURA3XHMfDqcWwcTREX871s6PbejGoiTubgiJpN2d/vmYw/cPA0oKKk7/ArE4domfMRJNY9OMBRiojxtQbw4ouK2jt2poLcReYeHgioYn5H0ORJOlxrVu3ZvPmzUXWv0wOxcizjiN2Fc25ENcYUas3BK2ABU3g2rZnfs7CxJAvu9dk46jmxKVkMXrZWYKj8z9TQVGpqDjpMzT37hH27kgyctiUqChUtKjID+1+YITfCHbe3kn39d0ZuWck887OIzw5vFhikCQpf2RyKEaKolAvwJ34uxlE+EyFIdvBygmW94GfmsOd48/8fE0XG77u6Uf4/XR6LDhKaGz+p9GZ1qhB+Q8/JP38eW52707sjz8W9HLybVTdUcxvNx8/Rz9C74ey8PxCBm4bSERKRLHFIElS3sjkUMy8/MtjYm7IpcOR4FIfRp+Blh9C1AVYEvDUMhv/6OVfib+HN8bIQEXb2QeYvz//JSzKDR2C54b1GLm4EPfDPFIOHSro5eRbC9cW/NXpL7b12MYH9T8gLj2Ojms68uvFX8nSZBVbHJJUUEU9oaOw9BWfTA7FzNDIgGqNKxJ6NpbgU9EIQzNo+ym8/rvuLmLdcJhbG4J3gybnwee6bnasfqcpxgYqvt5+jb9OPLlvRG5MPD3xWL0Kw4oVdRVdY/S/kjo3g2sOZlrzaQDMOT2Hzus6cy/jXrHHIUl5ZWpqSnx8fKlNEEII4uPjMTU1LXRfSmm9yGfx9/cXgYHPb1XQ5IQMtvwYRHxEKh5+DnR+1093IDsTlvWC0P2619au8OYWsPPIsZ8L4YmMWBpIZGIGEzpVZ3jLKvmOJS0wkNsDBoKBAd7Hj2Fg9fTV20UlVZ3KnMA5rLy+EoAAjwA+bvgxDmYOxR6LJD2LWq0mPDycDD3twlgUTE1NcXV1xcjI6LH3FUU5LYTwz2s/MjmUEK1WcHhlMBf2h1MvwJ3Gr3j+u1AsJQYub4A9X4KZHYw4CGa2OfaTodYwevlZdl2O5vX6rkx9tSYmhnkrtfGPOyNGkHrgIEbOzrq7CXv7wl5egZyKOsXeO3tZdnUZKkVFj6o9qF+hPi9XfrlE4pGkF4lMDs+RjFQ1u5Zc4s6lBFy8bekyujaGj9ZQurEXlr4KlVtB/9VgaJxjP9kaLR+uPs+6sxFM7ubLoCbu+VqRLDQaYubMIeGXJZhUrYrT1CmY1a5d2MsrsFNRp5gdOJtL8ZcAsDe1593a72KoMqRehXpUtipRDPIAACAASURBVKlcYrFJ0vOqVCUHRVE6AnMBA2CxEGJGDm16AV8AAggSQvTLrd8XJTkAaDVajq8P5eyuOwAM/74VRsaPJIgTP8O2D6H1BGg9/qn9CCF4ee4hrkYl08yrHL+/2RBDg/wNKSXv2UPkx5+gTU7GumtXKn72KQbW+SvZoU9x6XH03tybmLTHx0P8HP2oaluV1pVa42blhouVCyYGJiUUpSQ9H0pNclAUxQC4DnQAwoFTQF8hxOVH2lQFVgJthRD3FEUpL4TIdWT0RUoOoPtiXzHlJAmRqbjXKsfLb9fC4NEv9lWD4comqNkDWo2HcjmPLdyMS2XiugscvRFPBWsTfh7oT+1KOT+OeprsuDjCRrxNxqVLGLm64jL3O8x8fQtxdYV3L+MemZpMQu+Hsj98P8cij3Er6dZjbSY1mURHj45YGRf/mIkkPQ9KU3JoAnwhhAh48PoTACHEV4+0+Rq4LoRYnJ++X7TkAKDRaDm47BqXj9zFzMqIfp83xtTywYBSapyuHtP5lboZTJ2/Af+hkMOjI7VGy4/7Qvhhbwi+ztZsHNW8QPGknjhJ2NtvI9LTse7UCaepU1CZmxfmEvUqKjWKm4k32Xl7J4FRgdxKuoWBYkAjp0a87v067d3bl3SIklSqlKbk0BPoKIQY9uD1QKCREGLUI23Wo7u7aIbu0dMXQojtT+lvODAcwM3Nrf7t2/mfvvk8WD0zkOibSSgK+HeuTIPOHv+OHyRHwaK2kBQBnm2g5xIwz3nw+KcDN5ix7Sov16zI/P71ClQVNf38ee6vXcv9FX9j5OaG+69LMHJxKczlFQkhBIciDvHn5T85dldX4K+VayuaODehc+XO2Jrm7+5Jkl5EpSk5vA4E/Cc5NBRCjH6kzWZADfQCXIFDQE0hxDO3E3sR7xz+IYTg1oV4jq4J4X50Gp3eqUXl2o7/Nki/D4fnwLH5gIB6g6DznCfuIrI1Wt77+xybz9+lXyM3pr9aq8AxRc/8moRffwXAultXnGfOLLUluFOyUph5aiabQzeTrc3G3tSekXVG0rFyR6yNS278RJJKWn6TQ1EuggsHKj3y2hWIzKHNBiGEWghxE7gGVC3CmEo9RVGo7OdAn0kNsXe24NDfwWjU2n8bmNlChy/hrb1gXg4Cl8CiNhB77bF+DA1UfN+nLtUrWrHsxB3Grz5f4IU7FcZ/hPuyZQAkbdxE1OTJpXYRkKWxJVOaTeHswLPMajmL9Ox0phyfQrPlzTgfe76kw5Ok50ZRJodTQFVFUSorimIM9AH+Wyt6PdAGQFEUB8AbkCU7AQMDFQ06VyY5IYPg09FPNnDyg5Enoc2nkBAKC5rC1g9Bnf6wiUqlsO7dZjSqbM/fgWHM33+jwPGY16tLtfNBmDdsyP0VfxO/cGGB+youHSt3ZNMrm3ir1lsAvLH9DdYFryvhqCTp+VBkyUEIkQ2MAnYAV4CVQohLiqJ8qShKtwfNdgDxiqJcBvYBHwohct8Fp4zwrKur4np8fSiZ6dlPNjCzhVYfwqhAqPYynPwZfmwEV7f+28TYgOVvNaZFVQdm77zGj/vyX4vpHypjYyotXoSpry+x3/9AxrVruX+ohFWwqMCYemPY8MoGsrXZTDo6ianHp6IV2tw/LEllmFwEV8pF3UxkzczTNO3hRd0Obs9uvGMiHJun+3fvl6H1x+BcB4DEdDXjV59n+6UoNo9uTk0XmwLHlH3vHqGdOiPUasoNG0a54W+hqEp/ma5L8ZcYf3A8t5NuU79CfYbVGkZjp8YYquRuudKLr0gGpBVF8QdaAM5AOnAR2C2ESChooIVRlpIDwNpZp0lPUdNnUsPH1z/kJP0ebByj2yPCxBJeXQjeAQDEp2TSatZ+ajhZs/LtJoWKKeXwEcKGDwetFmNPT5xnzsCsVsEHvYuLRqthVuAsNt3YRFJWEmaGZpQ3L08Xzy64WLpgZ2pHc5eCTf+VpNJMr8lBUZTBwBjgJnAaiAFM0Y0NNEOXJD4TQtwpRMz5VtaSw7Xjd9n92xVsHM3oOqY2No55WG8QfhqWvgKZSVC7L3SaBSZWLD4UytQtV1jzThPquxeuhpImJYXk3buJ+WoGmsRETHx8KD92LOb16qKysChU30UtS5PF4YjD7Ly9k4txF7mTdAeB7r8Fe1N7qthWoX/1/vhX9MfCyELeXUjPPX0nh5HAEiFE+lOO1wHKCSH25DvSQihryUEIQcjpGPb/dQ2EoNt7dangkYdpmVlpugQRdgKMLaHX76S5tabFzH1ohWDRIH/8PQpfZC87Lo6YWbNI3LQZtFrMGzbEbckvKIbPzxdqSlYKMekxHI04ypHIIxyOOPzwmJHKiCq2VWjv1p4RtUeUYJSSVHDFts5BURRjIUSJ7M5S1pLDP5Li0ln2xQlcvG0JeKsmxmZ5/PIN2QPbP4G46+DXm62eE5i48Rr30tR8GFCNkW289BKfOiKCuIU/c3/lShzffx+HEcP10m9JSMhIYGPIRhRFIT49nrUha0nMTMTF0oWPGnxEW7e2JR2iJOVLUY057AcGCyFuPXjdEFgkhCiR0p1lNTkABG69yYmNNynnYsHrHzfAwCiPA8FpCXBotm7Auu4Aght9Ra+fj5OUkc2BD1vjaqef0hhCq+Vmz55kXr2G/aBBOP5vDCozM730XZIysjNYE7yGPy//SXhKOD29e9LSpSVt3NqUdGiSlCdFlRwC0FVX/R5wAV4GhgkhzhQ00MIoy8kB4ML+cA6uuI6Tlw0t+1TDwdUy7x/eOxUOzoJG7xBV+12az7tIkyrl+GNIQ72tetYkJxP54Uek7N+Pkasrnps2vhAJAiApK4m5p+c+3JhoarOpdPfqXsJRSVLuiuyxkqIorYFdQBxQVwgRVaAI9aCsJweAc7vvcGR1CBY2xgya3hRVXstzazWweghcXg/AYYdeDAzvxvz+/rxcy0mvMUZNmcq9v/7CyNUV51lfY163rl77L0lx6XG8vul14tLjaO/WnmYuzejp3bOkw5KkpyqS8hmKonwG/AC0RLf3wn5FUToXKEJJL+q0d6NO+0qkJmax/tuzj5fYeBaVAfT6HYbshJo9aR63kumGvzDyr0BikvS79WHFzz7F+ZtvEFoNt/v24+7kyQjti7H4zMHMga2vbaVf9X4ciTzC5GOT+ebUN+y+vRuNVlPS4UlSoeX1sdJc4ON/Zi0piuKObvOeDkUcX47knYOORqPlxIONgirXdqDj8Jp5v4MAEEL3mOnQN1zQevCZ1RT+GtMJCxP9zjJKv3CB2wMHITIycJrxFbavvKLX/ktamjqNHht7EJ4S/vA9Nys36pSvQ0vXlrzk/hJAqS1WKJUNpaYqa1GSyeFx/zxicvKyocuo2hib5u/LXWz9COXkQtTCgN9dvmDwkJEY5nMf6txoMzMJadkKodXiOGYM9gMH6LX/kiaEQCM0rL6+mqDYIHbf3k2G5t87MTsTO17yeAkbExtG1x39jJ4kqWjI5FAGCSEI3HqLk5tu0qynF3Xa51Jm48kOIGgFcdtn4JBxi3CVM6ZNhuHQ6h0w1t8GP2mnTnF74CAAzOrWxbxBA+wHDsDQ0TGXTz5/srXZJGUlse3mNpIykwiKDeJI5BEAmjo3ZXLTyVS0qFjCUUpliUwOZZQQglVfBRJ7Jxk3X3s6j6yNSpXPxxhZaRxd9yONLk/DQBFkmTpg3Giobs8IG1e9xKmOiODuF5NRh4WRdesWZvXr4/HXn3rpu7RLz05n1J5RnIw6CUCjio1wt3bH1tSW6vbVsTOxw8/RD2MD4xKOVHoRyeRQht2PTmPvH1e4eyMRh0qWBAyriW2F/P/yPxYcw7LlvzNe8xOuShwoKmj5ITR6+6k7zxVE5ISJJK5di1m9elRa+BMGVmVj/+fDEYdZF7yOqNQort+7/sTjp/nt51PToWYJRii9iPRdPqNlHvu5VZz1lWRyeLrsLA2HVgVz+VAkrtXt6P5ewaaPJmWoCfhmN7apN5nhuIvaSXt1B9ybQe8/9ZIkshMSuPFSANqUFEz9/HCZ9TXG7u6F7vd5IoTgZuJN4jPiWXZlGUcij5CenU5zl+b0qNpD7oUt6Y2+k8OveexnnRDivxv5FBmZHHJ3ZHUw53aH0fz1qtRuVyn3D+Tg7J17LD95h5WBYUzyjWVIxBeQcR9MbOCV+eDTpdBxCiGIeH8sydu3o7Kxoer+fS/MgrmCiEuPY+W1lfwU9BMCQZ9qffCw8aBrla5ym1OpUORjJQmAzPRsVs8I5H50Gq37V8O3hUuB+tFqBa2/2c+dhDT6NnRjav00DFYNgtQYeGka1H8DjAtfgfXe8uVETf4SALt+/agwcQKKgX5nTD1PolKj+OjgR5yNOQuAlZEVQ2sN5Q3fN2SFWKlAZHKQHsrKyGbR+wcxNDagw5s18KxTsFlBqZnZvLHkJIG372FmZMDZj5tguqIXhB3XNajeBRoOB/emYGBU4Hjvr1lDwh9Lybx2DevOnXH6ajoq47I9OJulyeJi3EUmHJ5AREoErpaufNr4U2o71sbSOB9lU6QyTyYH6THxkSmsnnkaTZaGbu/VxbWaXYH6yVBraDVrH9FJmbxWz4U5r/nAlU1w6xBcWgcZiWBmB051oO4AqFWwUhJCCCLGjiV523YAjL2q4LluHYpRwZPOiyBTk8neO3uZeHgiaq0aAC9bL9q6taV7le64Wedz+rJU5sjkID0hKS6dtd+cQWWg8PKIWji6FWxWkBCCMSvOsSkokq97+tHL/8FYRmYyhB6Ai6shdL9uN7qGw6HFB2CV/7n8Ijub+2vXEvfjfLKjowFwfO89FFMTLJs3x8RLPyXGn0dRqVHsubOH+5n3ORZ5jKDYIECXKOqWr8vouqOxMy3YDwDpxVZUVVmXCiEG5vZecZHJIf8ig++xfdEltBotA75sgqlFwX6JJ2eoqfXFTspZGHPk47aYGv1nXCArFda/qyvsp6jAsw28sgCsKuT7XEIIwt95l5T9+x9737rTy1g0a4511y5l+rGTEIJzsefYF7aPS3GXOBl1EnNDc3p69yTAIwATAxPcrd0xNTQt6VClUqCoksMZIUS9R14bABeEEDUKFmbhyORQMNE3k1g9M5A6Hdxo1qPgv74PB8cx4JcTTOnuy8AmHk852SXY+RnceLBJoFcH8H8Tque/XqM2PR2RnU3GhQsk/LWMlD3/bjxoUtULEx8fnKdPf652nisKJ+6eYM7pOVyOv/zwPZWiop1bO/pV70fd8nUxUJXdQf6yTt9TWT8BJgBmQNo/bwNZwM9CiE8KEWuByeRQcDsXX+RmUByDvmqKmWXBfnULIXj9p2ME3r7HK3Wcmd2rDgZPW40deRZO/6b7B+ClqVCnf6HWSYjsbBI3byY9KIj7y1cAurEJx5EjsX755QL3+yIQQnAq6hQZmgzS1GnsvbOXHbd3oBVa7E3t2d1zN0aFmDQgPb+K6s7hq5JKBDmRyaHgEiJTWT7lBFXqONJhqC8Ghvmo4vqIa1HJ9Fp4jMR0NT5O1vw+pAHlrZ7x+CIlBla9Cbcf7M1cpR04VAX/oeDoXaAYALRZWSRt2UrUlCmItDRUVlY4jh6F/aBBBe7zRROTFsOHBz7kTMwZKlpUZEnAEipZFWzti/T80vedg8c/W4M+5bgCuAghwp/WpijI5FA4u369xPUT0SgK9P60IeVcCjYlMjNbw5bzd/l4zQUUBca0q/rs/ai1Wjj7BwT9DZlJEH0RVEa6x03tJxeqyF92fDwJf/5Jwu9/INLSsOnZA7tevTDz8ytwny+SbG02nxz6hO23dLPANryyAU8bzxKOSipO+k4Oq9BtCLQBOA3EAqaAF9AGaAd8LoTYVZig80smh8LRarSc2XGHExtDsbA1YeCUJnnfizoHJ0Lj6f2zbs1D7Uq2jO3gTSvvPKypCDsJvzyyJUjHmdBoBBRi3wNtejrhY/5H6qFDAFi2a4fLt3PK9MD1ow5HHOad3e/gY+/DYN/B+Dr44mblJveaKAP0/lhJUZQaQH+gGeAEpANXgC3AaiGEfrcPywOZHPTjxpkYtv98kcaveFK/o0eh+spQa5i65TJbzt8F4OBHbbAyzcOzbSHgzB9weA7cu6Wb4VS9s24arHPBtxXNuH6d2O+/J2X3HgxsbHD43xjs+vRBURU8Cb4oVl5byYyTMx6ul3CycKKxU2P6+/Snmn21Eo5OKipynYOUZ0IIVkw5yf2oNAZNb4qFrUmh+1x9Opxxq4IY95I3o9pWzfsHNdlwcQ2En4Jzy0CdCmb2YGKpK/RnX0XXztgiX3cWkZ9+SuLqNQA4z/4Gm85yd1vQPWY6fvc4t5NuM+PkDAAczRzZ8/oeeRfxgtL3Y6UGQJgQIurB60FAD+A28IUQIqGQ8RaITA76Ex+RwoopJ7FzsqDvpIZ6+WLoNu8wV+4m8evghjSv6pD/DpKjdXcTVzfD3XOPH7N1B8/WYF9Ztxrbygns3MHo6cX6Mm/eJPTlTigmJrj9shhz/zz/91EmaIWWZVeWMfPUTIb7DcfbTjdBoKptVTxt5bjEi0LfyeEM0F4IkfCgfPcKYDRQB/ARQhSsRkIhyeSgX8u+OM69qDR8mjnRdqBPofsLjk6mz8/HiU/N4qvXatG3YSFKO6TE6JJEZgokReqmxkZfgqzkx9vVfxOqdoDyNcDO44m7C3VkJCFt2wFQecN6TKvJxyePikuPo8fGHiRkPP57z9vOm19e+gVbU9sSikzSF30nhyAhRO0H//4jECuE+OLB63NCiDqFjLdAZHLQr8w0NX9+dpyMVHWhKrg+KjFNTbs5B4hLyWTHey2pVlHPG/nEXoOUaF25jthrcGOf7lEUgEM1aPw2ONXW3V08WPgV9/MiYufMQTEzo8r2bRhVyP+q7RdZliaLO0m6bVk0QsOswFmcuHuCKjZVWNZ5GeZG+tsyVip++k4OF4E6QohsRVGuAsOFEAf/OSaEKJHtqmRy0D+NWsvab04TczsZvzauNOruibFp4VYcHwqOZeAvJzE2UDH9tVr0rK+frUZzpE6HkN1w5zic+0tX3wl0dxF1BoBXO3CpR9L2HUS89x4GDg5UGP8RVgEBcibTM+y7s48x+8YA0N6tPW3d2tK1StcSjkoqCH0nh4lAJyAOcAPqCSGEoihewO9CiGa5BNMRmAsYAIuFEDOe0q4nsApoIITI9VtfJoeikZWezc4ll7h9IZ4Kla0JeKsmVvaFq8tzIzaF3guPAQofvORduEdMeaXVQuxVuLYVjszVrakAXTHA9l+QtPsAcQsWkBkcgsrSEpPq1XB8912M3d1RWVlhYC031XnUjls7WHJxCZfjL2NqYMqkJpNwt3bHz1GuIXmeFMVU1sboprDuFEKkPnjPG7AUQpx5xucMgOtAByAcOAX0FUJc/k87K3TTYo2BUTI5lCwhBMfW3uDsrjtYO5jS/b26WDsUbme2vVejGfKb7s9r/7jWeDgUfnOgPMtK1a2n2DEBYh781es2D1G7H6lHjxG/5BfSTp4CjUZ3TKWi3JA3se7cGVOfwo+/vEguxF7gnT3vkJiZCEB5s/L0r9GfITWHlHBkUl6UmqmsiqI0QTejKeDB608AhBBf/afdd8BuYBwwTiaH0uHujUTWzzmDViP0sg4iLCGNFl/vo2ttZ37oW/D1C4WyfwYcmgOaTKhYC2p0B+d6aAxsSY9IJ/PqVZJ27CTjwgUATGr4YNWuHabVq2NWrx6GdrIUdqo6lciUSHbd3sWCoAWALklYm1gzsdFE/CvKmWClVWlKDj2BjkKIYQ9eDwQaCSFGPdKmLvCpEKKHoij7eUZyUBRlODAcwM3Nrf7t27eLJG7pX8GB0Vw+HEn41Xv4d/agUdfCTWvsseAop2/f49W6Lnzbu0TmMoBGDQdmwrVtuvId/zC2BAtHMLYgy64F0Rsvk3Im+LGPWrZvR6V584o54NLrdtJtll5eSqo6VVeWQ0AFiwrYmNjQu1pvzA11A9gqRUVT56Zy57oSVpqSw+tAwH+SQ0MhxOgHr1XAXmCwEOJWbsnhUfLOofhoNFp+G3+EjBQ1NVu50KK3N6qnVWDNRWK6mrpf7kQroLGnPQG+FRnUxOPpFV2LWloCRJ6BuGBIuAlJEbqZT/G6pKBRK2izVai15Yk5bUJ6ZBbGbpVwmjED83r1cum8bIlLj+O3i7+RkJFAUGwQd5LvPHbcytiKWS1nYWNig5etl9xjogSUpuTwzMdKiqLYADeAlAcfqQgkAN1ySxAyORSvzDQ1m+edJyo0EZVKYeicFgWeyRSXksmoZWe4FJlEckY2XfycmNevlH3RZiTqdra7dVi3J3bGfcT1vdw7d5+4C9YIxRC3GR9h1rqbbmtU6TFqjZqw5LCHr/+88idrgtegFVoAXvd+nQmNJmCoKtv7bxS30pQcDNENSLcDItANSPcTQlx6Svv9yDuHUkurFaz48gT3otJwr1mOziP9CrWaWqMVdJp7iGvRyVyd0vHJHeVKGyEgPJCM7QsJ/+kQ6lQVJrYa3Gd9iEHTN8FAftE9S3hyOKGJoXx7+ltC7odgY2LDmLpj6OndE5Ui610Vh/wmhyL7UxFCZAOjgB3oCvWtFEJcUhTlS0VRuhXVeaWioVIp9PuiMbXbV+L2xXhObrpZqP4MVAoj2+rKe1f/bDthCWm5fKKEKQpUaoDpW4vx2LKbct2bkXnfgJiZUxAzPGDpa3A36N/1FdJjXK1caenakqnNpjK05lAysjOYcnwKcwLnEJsWW9LhSTmQhfekfNFka1n66TEyUtQMnNYEC5uCF+sTQvDByiDWno3A392OxW/4Y2v+fCxIE2o1Ee+PJXn3bswr22DteAc7z1RdVdlyXmBZASr46mZFlfcBU1uw9yxUOfIXSaYmk05rOhGTHgNAO7d21C1flxrlatCgYoMSju7FVGoeKxUlmRxKVmJsGss+P4Gzty3t36xR6AQxevlZNp+/Sy0XGzaNbq7HSIuWEIK4H+cTv2QJIi0N1/EDMbO9h2HSVYi9DilRj3/A1AYMjKHrXPDu+LCsR1l1LeEagdGBD6vC/mNhh4U0dW5aQlG9uGRykIrF4dXBBO0OQ1Gg4/BaeNbNw+Y+TyGEYMrmKyw5cpPBTT344CXvvO0FUUpkJyQQ0roNIisLlYUFVu3bY1qrJtYvtccwPRQykiApHIJW6EqSAxhbgXMdXcIws9NVlzW11iUNh3yUOn8BqDVqsrRZXIy7yLCdwwBoULEB05pNw8nSqYSje3HI5CAVCyEE53aHcfFgBEmx6VRrXBH/lz2wrVCw4mwpmdkEfHuQiPvpWJoYcvSTtlg/RwkiMySErPBw4r7/gYzL/xYBMKlaFbuBAzBycsKieXOU9HtwYTXcPABp8boxitirj3fm1gSqddLVg6rgW8xXUrLOxZzjrZ1vkaHR7SH2ZdMvCfAIkEX/9EAmB6lYaTRa9v1xlWsnolAZKtQPcKdaYydsHPNfciM5Q83iQzeZuyeY5l4OLB2qn/0lipPQatEmJ5O0fQcpe/eScuDAw2NGLi6ozM2ovG4diuEjs5uyM3WFA6MvQsgeuL4DYh5M6vNoAeb2UL0L+HR95r4VL4rEzETmnZ3HimsrAPBz9KO9W/sc21obW9OtSjeMDJ6fHxIlRSYHqUTcOBPD4dXBpCRkYudkQe8JDQq8L/X7f59j3dkInG1MGdK8MsNaPL8bzmgSE9Ekp5B66CBRk78EwLhKFdwW/YyRs/PTPxh/Q1c0MOo8JITq1l4AVOsMDYbqHkfZe+oeST1nCTSvEjISOHH3BJ8f/Zz07PSntutWpRtTm0197n5IFDeZHKQSI7SCMztvc3x9KE1erUK9APcC9ZOWlc2cnddZfFg3XXb267XpUZTlvouJ0Gq5++lnJK5dC4B1ly6YVPPGyMkZ8wYNUFmYY2CZQ4kJrQZu7NXdUQSteHyjIwdvqFATPJrr/te5Lhg+HzO+8kqtUT/c7/q/frv0GwuCFvC/ev9jWK1hxRzZ80UmB6nErZx+ivjwFFr29aZGM2eUApbHCI1Noe1s3WMZ7wqW2Job07mWE2809dBjtMUvee9eEpb8SlZEBNl37z52zKJlCyotWIBi8JSZTOn3dSU/1BkQe0W3ydHdoH/LkhtbgXsT3ViFoaluSq17M3D0LuKrKhlCCMYdGMe+sH2s774eN+tiKAn/nJLJQSpxqYmZbPj2LPei0qhS15GA4TULfMt/Luw+n66/gKWJIcdDdVtYtvR2pEstJ3o1qKTPsEtEdnw8ybt2I7IyiZ6uK1hs7OFBhYkTdAPYefn/TQhIDNNtoXppPdzYA5nJ8KBcBQAmNrpZUP1X6cYwXiCxabF0WdcFRVHwtvPm+zbfy21NcyCTg1QqCCH4e+op4iNSqNO+Eo26e2JYyBIZ4ffSmLPrOmvPRADgamdGm2rl6eLnRCPPcvoIu0QJrZbE9RuImz8fdXg4Rq6uVF67puCbD2nUurGLkF0QuEQ3dgHg1QF6/qIbt3hB/L+9Ow+PqrobOP49M5nsCwnZSQJhCwmb7FtQQKpYF7RuWDa3Wq1b66tVaqu22telr0uLWkutinsVrQURQRRBIkvYISFACISsZF8mmUlm5p73jzuEQBJIyDKT5HyeZ565c+fkzi83k/nNWe45P+b/yNrja1l1dBVTo6eydNZS1QdxFpUcFLdhq3ew5o395KSXERYXwJX3jmrXBXOnmOvsvPB1BluOlnKkSJ+38cM7JzF1cGi7j+0OtJoaCp99lsoVn2EMCcEjPJzQu+8mcM7lF35QKSHtP7DzHTi2Sb+uov9UCIjU19qOGA59h3T7/ooPDn7Ac9uf47GJjzE/cb6rw3ErKjkobmfbqix2rD6OwSC47S/JePt13LDDlMwSfrtiH3kVFm4YF8NfbmjfhIDupHr9eipXr8b8/UakxYLfxdOJeuYZTOHh7TtwxleQ+k8oPKD3LQhqPgAAIABJREFUVdj1awoIS4R7Urr1ldtSSu5Ydwc51Tl8/bOvMXbj36WjqeSguB27zcGutSdI/fIYw6dHM2P+sA49fpXVxs3/2MrBgioMAl64YTQ39IDRTado9fXkP/oo1WvXIby9ifjtI/hffDEeUVHtT4SaQ18+dec7kPomGDzAK0B/LiAaIkfApU9CUL92/x5dZe3xtTy88WFev/R1psdMd3U4bkMlB8VtffpsKkXZ1fRL6MPcX4/p0G/41VYbb6cc56VvDgPw0S8mM2VQ9++HaKzuyBGyb7sdR0kJAKaYGAKvuILgeTdj6tfOD29Ng30f653acLoZqrZE78wedRNEjYLosXrCcGP1jnpmfTqLGTEzeCb5GVeH4zZUclDcVp3FznuP/0hdrR0Pk4GYxBAmXzuQvtEdt3zk8ZIaZr+0EYNBMDsxnKeuHk54YM9ZdcxRUYF50ybsxSVUrv6SuvSDAPglJ+OdlETYffciPDuw36AoA1Y9ADnbTu8bfp1eqwhPhAHT9Ivx3MzCrxbiZfTizcvfdHUobkMlB8WtaZpk55rjlOSYydpTTFhcADf9rmOnaD5YUMWTK9PYfqyM+FA/Vt2fjL9Xz1uMR0pJ7bbtVH31FeYffsBeUIBHVBQRSx4j4NJLQQiEoYOWbLFU6LWK7cv0uaAqckCz6VOUhyWClz+MWaB3anv66VOVu7Dv56HvH2JrwVaSo5MxGU08OPZBwn3b2VfTzankoHQbW744yq6vs4kaHMRV947G06djP8DfSTnGU6vSiQz05p3bJzAs8gKHhHYTFf/5gpPPPYdW6Zxqw2TCa+BAgq69luCf34LBq/0jxRpYKyFzPaT/V++3yE0F88nTz5v89P4LAAHEToIxC/VlV2Mndfq1FquOrmLZvmXYNTu55lyemvIU1w+9vlNf092p5KB0GxZzPcuX/IjDphE/OpRLb03Cq4MTxPV//5Gd2frqbBsfmUH/vn4denx3o1mtlH/wIVqdFa2mhupv1mM7cQLh7U3IokWEP/SbznlhKfWahbUSKnPhZKPVgI//AKWZp0dFAUz8JSRepU8s2Ik1jDpHHePfH889o+/hl6N+2atHL6nkoHQrmib54qVdFGRWEhzpyy1PTurwoaivbcjkL2sPcf3YGP7vxp4z1LU1pN1O9fr1FD7zZxwlJYQsXkz4bx9peXqOzmKtgrKjsOU1yNkOFdn6fv8IGHYlJM09vVqed8fW8KZ/PJ2KugqCvIJ4dMKjXDXwql71HjhFJQel29E0yffvZ3DwxwL69vNj6vWDiUvquJFG9XaNn/09hQN5VSy9ZQxXjz7HbKg9VF1mJllXXQ2AV0IC8Z+tOHPa8K5WmQsrH9BrFY76Rk8ImHofjL0VQgd3yEttzttMRlkGm3I3sbtoN7PjZvOHKX8gxLtnTSNyPio5KN2SpknWv53O0d1FaHbJ5b8YweBxHdeBqGmSYU98jQD2PXUZXh69r3lB1teT//jvqVq1iuCFC4l45OGOHdl0oXJSoaZYTxibX4bqfH2/dx89UYy4AULi2/0yDs3B8vTlvLr7VQI8A3hyypPMipvV7uN2Fyo5KN1aRVEtHz+9HYdNI3FqFEMmRBCb2DHf8E6tEzG+fzCf3j2lVzYtSCk5du111B06hDE4GK9hCfgnJxN41VV4hIe7/pxoDjj8NWz/J2RtcO4U4NFCZ7rJFy5+WO/DMLauJnS4/DCPb36cjLIMnpjyBDcOvbFjYndzKjko3V55YQ3r/pVGSY4+b9KM+QkMn94xV+gueHMbmzNLeGPBOOaMiOyQY3Y3msVC1erVVH+3gfpjx6g/pq+bETBnDjGvvOzi6BrRNDAXwu73od7cfJnC/fpaF/2TYd4H+mSCrUhwNoeNn638GbEBsbw++/UODtw9qeSg9Bgnj1ex4jn972z0MODp60FkfGC7RjVVWW1MffY76uwOHr4sgTuS4/EwdtC1AN2QlJKq1V9R/tFHWHbuZOjWLRj7dKPprqWEPR/qF+ppdvALh2uWQsKc8/7oYz88RmphKt/e+G0XBOp6KjkoPUpViYVtK7MweRnJ3FlEXa0dgMAwH8ZeFkfkwCCCwn3aNB14ZpGZ59YcZP3BImKCfbh4aBh/vGY4pl6cJGpTU8leuAigITl4DR5M8OJFBP7kJ64MrXVObIWsjZCxSq9N/ORpmPbAOX/knQPv8OLOF1lx9QoSQhK6KFDXUclB6bGkJsk5WEZ6SgFHdxU17Dd4CH7+5GSCwnxafywpWZd+kt99vp/SmnoCvT0YFhlIaIAnf7lhNH498Irq86n8cjWWXbsAkJqDio//DUDfu39J+K9/7crQWs9mhc9/ARlfwu1rIXZii0WPVx5n/lfzqbXX8ouRv+DOkXfiaXSDDvpOopKD0ivUWeyU5prZtS6bnINlSIckYXIk4386gMBQn1Z3rEop+f5wMWv2F7DpcAmFVVb8vTy4fmw/Hr8yCU+P3lubqM/JofiVv1K1ejX+M2cSeNWV+IwejWeMm894a62CV8frieHm989ZtNRSygupL/DVsa8YEDiAJ6c8yfjIVn9+disqOSi9TlWphbXLDlCUXQ1A4rQoZs4fdkFrV/+YWcLS7zLZklUKwILJcYyNC2bqoFAig3rOBH6tpdXXk//wI1SvWweAKTqa/h99iLFPn46djqOjfbII0lfqo5yMXrDgM4hteQ6vlLwUnt76NHnmPK4aeBXxQe0fOgtgMpiYEDmBpL5JGIRrv2io5KD0SpomOZFWSuqXxyjKriZmWDDDp/dj0JiwNieJ2no7z36VwXtbs8/Yf9fFA/ndTxM7Muxuw3ayiLLlyyl76y0ADIGB+E2bStDV1xAwa6aLo2tG4QHY/ylIB/y4FIZcpt+S5oJ/89fP1NpqeWPvG7x38D3smr1Dwwn3CWdG7AxmxM5gUtQklzRfqeSg9GqaQ2PTv4+QtklfZzpqcBBX338RJq+2X/Rmc2jYHBrHS2p57PN97M+r5JlrR3DT+Nhe23ldm5qK9WAG1Ru+o3bLVgB8p0zGGBhE2IMP4jWwY75xd6g3Z+sTA4I+GeDQOTB2EQy6tNlrIxyaAw2tQ166ur6azXmb2XBiAyn5KVjsFnw9fJnWbxqz4mYxvd90gry6Zi1vlRwUBb1PImXFEQ6mFGDyMjJp7kBGzYi5oKYmgNzyWm57O5UjReZeXYNorDY1leKlr6JZLFj370f4+uI1cCDGwECCrrsOg4+zGc5gxG/yJAy+vq4JVEp9mGtZFux+D/Z+rF+RHRAN174Og7qm5lPnqGNbwTa+O/EdG3M3UmIpwSiMjI8Yz8y4mcyInUE//85bcc+tkoMQYg7wV8AIvCmlfO6s5x8C7gTsQDFwu5Qyu8mBzqKSg9JaGz88xAFnLeKyO4czZHzEBR9L0yR3vbeDDYeKWX7bRJKHhHZUmN1eXdYxSpctw15eRt2hw9gLC8943uDvT+STT2Lw98N3zBjXXkvhsOlXYX+9BIJi4fY1XR6CJjUOlBxgQ84GNpzYwNHKowAMDR7KzNiZzIybSVJIUodese42yUEIYQQOAz8BcoFU4BYpZXqjMjOBbVLKWiHEPcAMKeXN5zu2Sg5KW1ScrOWDJ7di8jZyzYMXERl/4dX4ylobNy/bwuGT1UwdFMqyRePw9ex9w17PRbNaG666Bqj4dAUVn3+OtOpTdvvPnEn4bx/BK97FTVAbnoWNz+vTb4ya12ET/V2I7Kpsvs/5nu9OfMee4j1oUiPCN4IZsTNYkLiAAUED2v0a7pQcpgBPSSkvdz5eAiClfLaF8mOAV6WU0853bJUclLaqLK7l/T/obeQLnp5MUNiFN3GUmut48ZvDfLjtBG/fOoGZw3r3CmOtYS8vx5abx8nnnsOycycA/pdeStQzT+MRHOyaoMzF8J9f6nM4SQ1iJsCom2HE9eDTgTG18dt/mbWMTbmb2HBiA5tyNzEnfg7PTm/2Y7ONYbhPcrgBmCOlvNP5eCEwSUp5XwvlXwUKpZTNrgguhLgLuAsgLi5uXHb2eVufFOUMW784ys6vs/H08WD+HyfjG3jhI0ZKzXVMf2EDPiYj/71vGjHBLmpP72bs5eVYDxyg/MOPMG/QJ9YLufVWQu+5G2NQ13TMNlGVr49s2vsxFKWfv3xbCAMEx0PYMAhL0NfdDktwLqd6/vfMdf+9jvigeF6a8VL7Q3Gj5HAjcPlZyWGilPL+ZsouAO4DLpFS1p3v2KrmoFyo9M35bHg/g8BQb5JvHEL/kaEYLrCTeveJcuYt20ofXxOzhkXwv9eNcP2spt1I/qOPUvnflad3GAyYIiMZsOJTPEJcsNaClPrUG5nf6P0SHcFep6+CV3xIX+yoYYisgOD++vrbYQmnk0dYgr4Gt9NNq24iwjeCpZcubXco7pQcWtWsJISYDSxFTwxFTQ7UDJUclPZI35zPjjXHqS614hPoSVisP+OvGEBQuC8mL2Obhr1uyyrl7vd3Ul5r49O7pzAuLviCk01vJKWk/MMPsZeUUJPyI9Z9+wCIWPIYwbfc4h7rTXQUe70+Yqr4oJ4sijP0+5IjoDVKRn3iGpLF/MpUAgL68cact9r98u6UHDzQO6QvBfLQO6R/LqVMa1RmDLACvfnpSGuPrZKD0l4Oh8axPSXsWX+Ck8eqGvYbjIKxl/dn8Lhw+vbzb9WxiqvrmPS/69EkDA7355lrRzA0IoBgX5OqSbSBlJKSV1+j5LXXGvZFv/h/BMyahcGn9fNmdTsOG5Qfh6Kzk8ZhFocHYfcL4+83fU2gZ/uWT3Wb5OAM5qfAK+hDWd+SUv5ZCPEnYIeUcqUQYj0wEihw/sgJKeU15zuuSg5KR7KY6ynIrKQk10zWnmJKc/W1A8LiAogfHUrffv5EDQrCJ6Dlb7HfHyois8jMX9cfobpObzoY2S+IBy4dwk+SLnz4bG9Un51N4Z+epiYlBQCvYcPwndj81BfGgEBCbrsVo3/rEnm3ojm45+1xbPZwYDKYmJ84nztH3nnBF825VXLoLCo5KJ2pvLCGlBWZZB8oPWN//5F9ufJXo85ZG0jPr2JndhmvrD9CaY2+NvLYuD4MCPXjkcsTCPP36tXrR7SWlBJ7YSGWffs5+fxzaNXNL/ajmc34jBpF7Jv/xBgQ0MVRdr4Tb85kl2ZmR9xoVp7cToBnAHeNuotbht3S5ik4VHJQlA5Sb7VjszqoKrWy9Yuj5B+pwDfIk9mLk4hNOneHqc2hkVdu4dk1BymrqWdvbiX1dn1Khoyn5+DdhvUnlJZVr19P7m8ewnfMGOLefgth7GHn9ZPFkP4FAIf8+vByVCwpjkr6+UVx/9gHuSL+ilZP6KeSg6J0Ak2THNpayLaVWVjNNmbflsSAUX1bvchQWn4l93+4m6ySGiYOCOHt2yb0yjUjOkPFZ59T8PjjBMyZg++4cQTP/znC0ENqZzaL3oldkaMvZJTxFVtkDS/1DSHD00SSTyT/M/FRJg6Yfd5DqeSgKJ2oqsTCmn/spyTHjKe3kZ//cTJ+Qa2bulrTJHe+u4PvMorw9/Jg6S1jGBkTRKi/G0993Q1IKSl84gkqV32JtFoJXrSQiCVLeuZgAIcdTmxBS1/J6mNf8TcfjUIPDy7Gl98M/BmDL1oMAc2vja6Sg6J0ModNI2NrAd9/cIiI+ECu/NWoc3ZWNyalZMnn+/k4NQcAo0Hg7+XByH5BDA7355aJcSRE9ry2864gpeTks89S/u57RPzh94TMn+/qkDqXlNTlbOWDnX/jzcoD1CC51lzDvd7xhCdeC0nXQPCAhuIqOShKF9mz/gQ/fn4Ug1HQb2gfrrx3dKuvccirsJBdWsPGw8X8Y2MWfp5GauodBHh58M1Dl/TKhYU6gtQ0cu78Bda0NAZ9+y1Gf7/z/1APUGEpZ9n25/no+Bo8pMaiikpur7bgd/vX0G8coJKDonSpwqxKdq87QdaeYvolBNNvaB9Gz4rF06ft/QlvbDzKS98cxiDg+etHcc3o6J7ZNNLJLHv3cvzmeYQ/8gh977jd1eF0qZzqHJbuWsqa42sIc0g+IZrQ29aCECo5KEpX0zTJ2n8eoLyghvLCWgCMJgPRQ/ow8KIwhk2OxOBhaFWtIi2/kkc/28eBvCqGhPuz8r5kfDx72AicLpB19TWYoqOJ/ccbrg7FJVILU7l97e08VFbObXP+DolXq+SgKK6UfaCU/CMVHNxSgKWqvmG/l68HQyZE4BvoyYQrzz1VtdXm4P6PdvNN+kkuGRrGsKgA7kiOJzxANTW1Vs5991G7dRs+Y8YgPD2JWLIEz5jOW0jHHS1YPR/zyf38x2xA/Go7wuTVpuSgxtIpSgfqP6Iv/Uf0Zcp1g9A0ScaWAizV9eQfqeDARn3RodK8GmYuSMDL19TsMbxNRpYtHMcfV6Xz2c5cNh4uZuWefN5cPJ7h0S6aubSbCbrqauzFxTjKyrCmpeE/PRnPefNcHVaXmjvkWv5Uso90cx7Dd7R9biZVc1CULlJvtfOfF3dRkmMGAUMnRNAnwhefAE8iBgTi6WMkMNSnST/DlqOl3Lk8lZp6B7+/MpE7kuNVX0QrSU3j0OiL8IiOwmf0aEIWLcZnxHBXh9UlquqrmPXJLK5zePF4YR7isWzVrKQo7uzQtkLSfsijusyKuezMGeqDI325+oGLCAg5swlp14lyXlx3iJTMUkbH9uGO5HguGRJGUAu1D+W0k88+S+2u3dRnZ6NVVeE/+1LC7rsP72HDXB1ap/vtxt+SkruJDUcy8PpjpUoOitJd1Fns5B0qx17vYNfaE5Tlm0EIEiZHMjw5msiBp5uR7A6Na15NIb3g9CyylyVFcP+sIYyMUc1N5+Oorqbs3Xcpe2c5WnU1AZdfTsTvlmCK6LkTI6bkpXD3+rt5yTeRy276VCUHRemuygpq2PtdDuk/5AMw9vI4AkN9GDIhAk9vD6SU5JZbyK+w8O6WbFbv1yc0nhQfwtj+wfxm9lA8PXrI1BGdxFFVRdk7yyn9178InHM50c8/7+qQOo1Dc3DZistIDIrntTn/UslBUbq70nwz37yV3jB9uG+gJyMu6cdFs+POWIwos8jMR9tPsGZ/AfmVVoZFBvDCDaMYFdPHVaF3G3kPPUTtjp0M3vh9j+7DeXnnyyxPW87exXtVclCUnqLOYudkViXff3iI6lIrXr4eJE6Nov+IvoT1D8TLebGdlJJ/bT7G819nYHNIIgO9CfHzJCk6kHkTYhk/wAXLbrq5ihUrKPj9H/BLTiZk0UL8kpN7zoR9jWRVZDH3v3M5cOsBlRwUpafRNEn+kQrWv51OTcXpTuyI+EAGjAwlNimE4AhfSupsvLjuMFa7A7PVzsbDxQgBFw8J48HZQxgbF+zC38K9SLudkmXLKP/oIxzFJXj270/wggUEXXddj5t2Y/7q+Xx41YcqOShKT+WwaRTnVGOtsVGYVUl6yumL7Tw8DYycEcPIGTENo50KKi08vyaDL/bofRjf/s8lDArrgaumtYOsr6dq3TeUv/celr17ESYTwrtjLjgURiOegwfhM3w43s6b54ABXb7uxL8z/s28xHkqOShKb1JxspbinGoO/lhATnoZAN7+Jjy9jQT09WbAyFAOGuwsWXcQgGeuHcGCyf1dGbLbsuzbR/W6dWj19ecv3ArSWkfdoUNYMzKQdXqNT/j64p2YiPfwpIak4Rkf36kJo7q+mkCvQJUcFKW3KsmtJu2HfBx2DXu9RmFWJdWlVgCMPkbe8LNQYXfwzm0TmJEQ7uJoew9pt1N3NAtrWtrpW0YG0qr/bYSvL97DhjlrF3rS8Bw4sEMThppbSVGUBlKTFB6raljmFGCbl43dQTBnZCRJ0YFcMjSM+FC/Hj1ixx1Ju526rCys6elY09L1hHHwINJiAUD4+OCdkEDoPXfjf8kl7X49lRwURWlWxtYCUr88RlWJldIQDzbX11KBRolR0sffk1/NGMSd0we6OsxeTToc1B87hjUtDUtaGpWffY7f9OnEvPJyu4/d1uSgJt5TlF5i2OQoEiZFsuH9DA6mFDAXffU6hwFKLJKVnx/m55Pi8PVUHwuuIoxGvAYPxmvwYILmzsWyc1dDTaLLY1E1B0Xpfeotdoqyq7CYbRQcqeBg6knstXY2e9sQXvpYf79gLyZOiubOGYNUk5OLHF+wANuJHIKuuRrfyVPwnTAeg9eFrTmumpUURWmziqJaPn5hBw6zvclzuZEePHDvOKLCetbY/+6g+G9LKf/kE7TKSqTNhvD2xnfCBPyTp+E3fbo+yqmViVslB0VRLoimSaxmW8Pj9B2FbE/JQ+bpzRq1HmAK9WLe4hH4BnoS2NfHVaH2OprFQm1qKubNm6n5YTP1x44B4BEdhf+0ZPySk/GbMhljYGCLx1DJQVGUDrVmXRa7txdSX2ghzH76W6oU4B/jx/CLwjF5GRk0Nhz/YL3JQzVDdS5bXh7mzSnUbP6Bmi1b0cxmMBrxGT0av+Rp+E+fjndS0hlDYVVyUBSlU1htDt5dl0lRnpmT+WZCi2z01QSCMxOB8BD07eePwajvNxgEUfFBxCQGIwyC8EZzQintJ202LHv36rWKzSlYDxwAwCMsjJjXX8dn5AhAJQdFUbpITlktK3bkYHNopGeUYj5hxlMKfDVBiHY6YYQ4DATIMxNI/xF9iRwYROK0KLz9TRiNPW/CO1exl5VRk/Ijxa+8gsNspv+7y/FOSFDJQVEU1yg112Gus5NXYSE9//SCRFuOlnI0pwpbZT3D6o2EaIJojHg26vsODPPBx9+Ef7A38aNDiRkWjE+AJwaDap66UPU5OWQvWIi02+n/3rt4DxqkkoOiKO5F0ySVFhsr9+aTklnC7pwKfMtsRDsM9HcY8fP2wBuBb7Wj4Wc8vIyExfgTFheAl2/zzVBGk4HYxBDC4gJUP0cz6rKOkb1wIcJoZOgPm1RyUBTF/X25L59tWWVsOlKMyWigotZGZXUdcXYDsdJIvIcnQUYjpio7OM79ORUU5kNcUghefiYGjgkjNMZfJQsn66HDnFi0iITt29wnOQgh5gB/BYzAm1LK58563gt4FxgHlAI3SymPn++4KjkoSs+0N6eCbzOK2H2inIMF1ZjrbFhtWovlvTUY6vBgMl4E1oOwayAhOMqPxClRhMb5Y/I0EjEgENGLm6gsaWn4jhjhHtNnCCGMwGvAT4BcIFUIsVJKmd6o2B1AuZRysBBiHvA8cHNnxaQoinsbHduH0bGnlzh1aJLDJ6upszefIKqtNn48Wsqmw8Wk5VfhrUGCzcjUEij/PPOMskZvIyZvI54+Hnj6euDtayI0LoCAIE9MJiMeJgMGo8Bo1O8NHvp9e1OKMAiEEAiDvm0wCBD6KC59v/6cwSAayhqc+xo/LwwCg/NxW/kMH97mn+nM8WQTgUwpZRaAEOJjYC7QODnMBZ5ybq8AXhVCCNkd27oURelwRoMgMarlC7sApg8J49E5w6i22sgps7DpSDGrd+dRllsDQJRdHy1l0Ox414CXWeAtwU8K+uwv7Ypfo8NpgES/1kQCOO8b7zv7vq06Mzn0A3IaPc4FJrVURkppF0JUAn2BkrMPJoS4C7gLIC4urjPiVRSlGwvwNpEUbSIpOpBfXjyQ8lobUkpOVtVRYq5Dk5J6u0Zdw82BpdpGXZ2d+noNW72DersDm01DaICU+qdwg9MfsWd8fZWNN5uWEc5tIZ0bDZ/i+k+IhseNtp3HFQ3lZcP+JuUbyjq3NanXdpo7Zht0ZnJoru5zdoitKaPvlHIZsAz0Pof2haYoSk8mhCDET591tq//hU1U19M8/ue2le/MK09ygdhGj2OA/JbKCCE8gCCgrBNjUhRFUVqhM5NDKjBECBEvhPAE5gErzyqzEljs3L4B+E71NyiKorhepzUrOfsQ7gPWog9lfUtKmSaE+BOwQ0q5EvgX8J4QIhO9xjCvs+JRFEVRWq9TZ7+SUn4FfHXWvicabVuBGzszBkVRFKXt1GxXiqIoShMqOSiKoihNqOSgKIqiNKGSg6IoitJEt5yVVQhRDGS7Oo4LFEozV4B3Eyp211Cxu0ZPi72/lDKstQfolsmhOxNC7GjLzIjuRMXuGip21+jtsatmJUVRFKUJlRwURVGUJlRy6HrLXB1AO6jYXUPF7hq9OnbV56AoiqI0oWoOiqIoShMqOSiKoihNqOTQiYQQx4UQ+4UQe4QQO5z7QoQQ3wghjjjvg10dJ4AQ4i0hRJEQ4kCjfc3GKnR/E0JkCiH2CSHGui7yhlibi/8pIUSe8/zvEUL8tNFzS5zxHxJCXO6aqEEIESuE2CCEOCiESBNCPOjc7/bn/hyxu/15d8biLYTYLoTY64z/j8798UKIbc5z/2/nkgMIIbycjzOdzw9ww9jfEUIca3TuL3Lub/v7Rkqpbp10A44DoWftewF4zLn9GPC8q+N0xnIxMBY4cL5YgZ8Ca9BX8psMbHPT+J8CHm6mbBKwF/AC4oGjgNFFcUcBY53bAcBhZ3xuf+7PEbvbn3dnPALwd26bgG3Oc/oJMM+5/w3gHuf2r4A3nNvzgH+7YezvADc0U77N7xtVc+h6c4Hlzu3lwLUujKWBlHITTVfhaynWucC7UrcV6COEiOqaSJvXQvwtmQt8LKWsk1IeAzKBiZ0W3DlIKQuklLuc29XAQfS11d3+3J8j9pa4zXkHcJ5Ds/OhyXmTwCxghXP/2ef+1N9kBXCpEKK5pY473Tlib0mb3zcqOXQuCawTQuwUQtzl3BchpSwA/Z8LCHdZdOfXUqz9gJxG5XI594eCK93nrEa/1agJzy3jdzZTjEH/Ftitzv1ZsUM3Oe9CCKMQYg9QBHyDXpupkFLanUUax9gQv/P5SqBv10Z82tmxSylPnfs/O8/9y0KIUwtot/ncq+TQuaZJKccCVwD3CiEudnVAHaS5b0vuOCb678Ag4CKgAHjRud/t4hdC+AOfAb+WUladq2gtvwf6AAADHElEQVQz+9wt9m5z3qWUDinlRehr3E8EEpsr5rx3q/jPjl0IMQJYAgwDJgAhwKPO4m2OXSWHTiSlzHfeFwH/QX/znTxVnXPeF7kuwvNqKdZcILZRuRggv4tjOy8p5UnnP5AG/JPTTRhuFb8QwoT+4fqBlPJz5+5uce6bi727nPfGpJQVwPfo7fF9hBCnVslsHGND/M7ng2h9U2anaRT7HGdTn5RS1gFv045zr5JDJxFC+AkhAk5tA5cBB4CVwGJnscXAf10TYau0FOtKYJFzBMRkoPJUE4g7OatN9Tr08w96/POco0/igSHA9q6OD/RRJOhrqR+UUr7U6Cm3P/ctxd4dzjuAECJMCNHHue0DzEbvN9kA3OAsdva5P/U3uQH4Tjp7e7taC7FnNPpCIdD7Shqf+7a9b1zV297Tb8BA9JEZe4E04HHn/r7At8AR532Iq2N1xvURehOADf1bxh0txYpeRX0NvX12PzDeTeN/zxnfPuc/R1Sj8o874z8EXOHCuJPRq/f7gD3O20+7w7k/R+xuf96dsYwCdjvjPAA84dw/ED1pZQKfAl7O/d7Ox5nO5we6YezfOc/9AeB9To9oavP7Rk2foSiKojShmpUURVGUJlRyUBRFUZpQyUFRFEVpQiUHRVEUpQmVHBRFUZQmPM5fRFF6LyHEqSGlAJGAAyh2Pq6VUk51SWCK0snUUFZFaSUhxFOAWUr5f66ORVE6m2pWUpQLJIQwO+9nCCE2CiE+EUIcFkI8J4SY75xvf78QYpCzXJgQ4jMhRKrzNs21v4GitEwlB0XpGKOBB4GRwEJgqJRyIvAmcL+zzF+Bl6WUE4Drnc8piltSfQ6K0jFSpXOuGiHEUWCdc/9+YKZzezaQ1GgJgEAhRIDU10JQFLeikoOidIy6Rttao8cap//PDMAUKaWlKwNTlAuhmpUUpeusA+479eDU+r6K4o5UclCUrvMAMN65Slc6cLerA1KUlqihrIqiKEoTquagKIqiNKGSg6IoitKESg6KoihKEyo5KIqiKE2o5KAoiqI0oZKDoiiK0oRKDoqiKEoT/w/iPWtuqnE76AAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "surv.iloc[:, :5].plot()\n", "plt.ylabel('S(t | x)')\n", "_ = plt.xlabel('Time')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that because we set `labtrans` in `CoxTime` we get the correct time scale for our predictions." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Evaluation\n", "\n", "We can use the `EvalSurv` class for evaluation the concordance, brier score and binomial log-likelihood. Setting `censor_surv='km'` means that we estimate the censoring distribution by Kaplan-Meier on the test set." ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "ev = EvalSurv(surv, durations_test, events_test, censor_surv='km')" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.6746906255297508" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ev.concordance_td()" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "time_grid = np.linspace(durations_test.min(), durations_test.max(), 100)\n", "_ = ev.brier_score(time_grid).plot()" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.15931537174591134" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ev.integrated_brier_score(time_grid)" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.4700909149743365" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ev.integrated_nbll(time_grid)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.4" } }, "nbformat": 4, "nbformat_minor": 4 }