ass2.ipynb
{
"cells": [
{
"cell_type": "code",
"execution_count": 48,
"metadata": {
"id": "ZfXIWZ57NkON"
},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import os\n",
"import pandas as pd"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {
"id": "nMdVQfNePLQJ"
},
"outputs": [],
"source": [
"class Elastic:\n",
" def __init__(self, preds, responses, lambdas, alphas, nf = 5, iters = 1000, to_verb = False):\n",
"\n",
" self.x, self.y = self._shuffle_data(preds, responses)\n",
" self.lambdas = lambdas \n",
" self.alphas = alphas\n",
" self.nf = nf \n",
" self.iters = iters\n",
" self.to_verb = to_verb\n",
" self._initialize()\n",
"\n",
"\n",
" def _initialize(self):\n",
" '''\n",
" This function initializes certain values needed for training and checks that certain\n",
" arguments have appropriate values. \n",
" '''\n",
"\n",
" # get number of samples and number of features\n",
" self.n_samples = self.x.shape[0]\n",
" self.n_preds = self.x.shape[1]\n",
" \n",
" # matrix to store the cross validation results \n",
" self.cv_vals = np.zeros([self.nf, len(self.lambdas), len(self.alphas)])\n",
"\n",
" # determine the number of validation samples and their inds based on nf \n",
" self.n_val_samples = self.n_samples // self.nf \n",
" self.val_inds = list(range(0, self.n_samples, self.n_val_samples))\n",
" \n",
" if self.to_verb:\n",
" print('[INFO] Using {} training and {} validation samples for each CV fold.'.format(\n",
" self.n_samples - self.n_val_samples, self.n_val_samples)\n",
" )\n",
"\n",
" # create a tensor to store the Betas \n",
" self.B_trained = np.zeros([self.nf, len(self.lambdas), len(self.alphas), self.n_preds])\n",
"\n",
" def _standardize(self, x, mean_vec, std_vec):\n",
"\n",
"\n",
" return (x - mean_vec) / std_vec \n",
"\n",
" def _center_responses(self, y, mean):\n",
"\n",
"\n",
" return y - mean\n",
"\n",
" def _shuffle_data(self, preds, responses):\n",
"\n",
"\n",
" data = np.concatenate((preds, responses[:, None]), 1)\n",
" np.random.shuffle(data)\n",
" return data[:, :-1], data[:, -1]\n",
"\n",
" def _initialize_B(self):\n",
"\n",
"\n",
" return np.random.uniform(low = -1, high = 1, size = (self.n_preds, 1))\n",
"\n",
" def predict(self, x):\n",
"\n",
"\n",
" assert(self.mean_vec is not None and self.std_vec is not None), \\\n",
" 'Model must be trained before predicting.'\n",
"\n",
" x = self._standardize(x, self.mean_vec, self.std_vec)\n",
" return np.matmul(x, self.B)\n",
"\n",
" def _get_folds(self, val_ind):\n",
" \n",
"\n",
" x_val = self.x[val_ind:val_ind + self.n_val_samples]\n",
" x_train = np.delete(self.x, np.arange(val_ind, val_ind + self.n_val_samples), axis = 0)\n",
" y_val = self.y[val_ind:val_ind + self.n_val_samples]\n",
" y_train = np.delete(self.y, np.arange(val_ind, val_ind + self.n_val_samples), axis = 0)\n",
" return x_train, x_val, y_train, y_val\n",
"\n",
" def _update(self, x, y, B, ss_cols, lambda_, alpha):\n",
"\n",
" \n",
" for k in range(self.n_preds):\n",
" # get rss without the effect of coefficient k\n",
" rss_k = y - np.matmul(x, B) + (x[:, k] * B[k])[:, None]\n",
" \n",
" # a_k is part of the derivative of the rss term in the loss function\n",
" a_k = np.matmul(x[:, k].transpose(), rss_k)[0]\n",
" \n",
" # update B_k\n",
" B_k = np.absolute(a_k) - lambda_ * (1 - alpha) / 2\n",
" B_k = B_k if B_k >= 0 else 0\n",
" B[k, 0] = np.sign(a_k) * B_k / (ss_cols[k] + lambda_ * alpha)\n",
" \n",
" return B\n",
"\n",
" def score(self, x, y, B):\n",
"\n",
"\n",
" y_hat = np.matmul(x, B)\n",
" mse = np.mean((y - y_hat) ** 2)\n",
" return mse\n",
" \n",
" def _compute_ss_cols(self, x):\n",
" '''\n",
" Computes the sum of squares for each column needed in the update.\n",
" Only need to do this once per fold at the beginning. \n",
" \n",
" Args:\n",
" x (np.ndarray): The N x M design matrix of the current fold. \n",
" \n",
" Returns:\n",
" ss_cols (np.ndarray): The M-dim vector representing the sum\n",
" of squares of the cols of x.\n",
" '''\n",
" return np.sum(x ** 2, 0)\n",
" \n",
" def _find_best_tuning_params(self):\n",
" '''\n",
" Finds the value of lambda and alpha with minimum corresponding CV score and\n",
" saves them as class attributes. \n",
" '''\n",
" cv_mean = np.mean(self.cv_vals, 0)\n",
" best_lambda_ind, best_alpha_ind = np.where(cv_mean == np.amin(cv_mean))\n",
" self.best_lambda = self.lambdas[best_lambda_ind[0]]\n",
" self.best_alpha = self.alphas[best_alpha_ind[0]]\n",
"\n",
" def fit(self):\n",
" '''\n",
" Implements the cross validation and retrains the model with the optimal lambda \n",
" and alpha on the entire dataset.\n",
" '''\n",
"\n",
" for i_lambda, lambda_ in enumerate(self.lambdas): # loop through lambdas\n",
" for i_alpha, alpha in enumerate(self.alphas): # loop through alphas\n",
" for i_fold, val_ind in zip(range(self.nf), self.val_inds): # loop through folds\n",
" # get the folds\n",
" x_train, x_val, y_train, y_val = self._get_folds(val_ind)\n",
"\n",
" # standardize x and center y\n",
" mean_vec, std_vec = np.mean(x_train, 0), np.std(x_train, 0)\n",
" mean_response = np.mean(y_train)\n",
" x_train = self._standardize(x_train, mean_vec, std_vec)\n",
" x_val = self._standardize(x_val, mean_vec, std_vec)\n",
" y_train = self._center_responses(y_train, mean_response)[:, None]\n",
" y_val = self._center_responses(y_val, mean_response)[:, None]\n",
" \n",
" # compute b_k given this fold -- don't need to compute every update\n",
" ss_cols = self._compute_ss_cols(x_train)\n",
"\n",
" # initialize Beta for this lambda and fold\n",
" B = self._initialize_B()\n",
"\n",
" for iter in range(self.iters):\n",
" B = self._update(x_train, y_train, B, ss_cols, lambda_, alpha)\n",
" \n",
" # score this model \n",
" score = self.score(x_val, y_val, B)\n",
"\n",
" # store the score with the tuning param combinations\n",
" self.cv_vals[i_fold, i_lambda, i_alpha] = score\n",
"\n",
" # store the coefficient vector\n",
" self.B_trained[i_fold, i_lambda, i_alpha] = B[:, 0]\n",
" \n",
" # if to_verb flag, then print out the mean CV MSE for the combo of lambda and alpha\n",
" if self.to_verb:\n",
" print('lambda:{}; alpha:{}; CV MSE:{}'.format(\n",
" lambda_, alpha, np.mean(self.cv_vals[:, i_lambda, i_alpha]))\n",
" )\n",
"\n",
"\n",
" ############# Retrain on entire dataset with optimal lambda and alpha #############\n",
" \n",
" # find the best lambda and alpha\n",
" self._find_best_tuning_params()\n",
" \n",
" # standardize features of x and center responses \n",
" self.mean_vec, self.std_vec = np.mean(self.x, 0), np.std(self.x, 0)\n",
" x = self._standardize(self.x, self.mean_vec, self.std_vec)\n",
" y = self._center_responses(self.y, np.mean(self.y))[:, None]\n",
" \n",
" # compute the sum of squares for each feature on the entire dataset\n",
" ss_cols = self._compute_ss_cols(x)\n",
" \n",
" # initialize coefficients\n",
" self.B = self._initialize_B()\n",
" \n",
" # perform updates \n",
" for iter in range(self.iters):\n",
" self.B = self._update(x, y, self.B, ss_cols, self.best_lambda, self.best_alpha)"
]
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 419
},
"id": "2yKcu-xHOwnO",
"outputId": "6b6549d7-3105-4600-c9a1-1bb42d9f335c"
},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
"\n",
"\n",
" | \n",
"Income | \n",
"Limit | \n",
"Rating | \n",
"Cards | \n",
"Age | \n",
"Education | \n",
"Gender | \n",
"Student | \n",
"Married | \n",
"Balance | \n",
"
\n",
"\n",
"\n",
"\n",
"0 | \n",
"14.891 | \n",
"3606 | \n",
"283 | \n",
"2 | \n",
"34 | \n",
"11 | \n",
"Male | \n",
"No | \n",
"Yes | \n",
"333 | \n",
"
\n",
"\n",
"1 | \n",
"106.025 | \n",
"6645 | \n",
"483 | \n",
"3 | \n",
"82 | \n",
"15 | \n",
"Female | \n",
"Yes | \n",
"Yes | \n",
"903 | \n",
"
\n",
"\n",
"2 | \n",
"104.593 | \n",
"7075 | \n",
"514 | \n",
"4 | \n",
"71 | \n",
"11 | \n",
"Male | \n",
"No | \n",
"No | \n",
"580 | \n",
"
\n",
"\n",
"3 | \n",
"148.924 | \n",
"9504 | \n",
"681 | \n",
"3 | \n",
"36 | \n",
"11 | \n",
"Female | \n",
"No | \n",
"No | \n",
"964 | \n",
"
\n",
"\n",
"4 | \n",
"55.882 | \n",
"4897 | \n",
"357 | \n",
"2 | \n",
"68 | \n",
"16 | \n",
"Male | \n",
"No | \n",
"Yes | \n",
"331 | \n",
"
\n",
"\n",
"... | \n",
"... | \n",
"... | \n",
"... | \n",
"... | \n",
"... | \n",
"... | \n",
"... | \n",
"... | \n",
"... | \n",
"... | \n",
"
\n",
"\n",
"395 | \n",
"12.096 | \n",
"4100 | \n",
"307 | \n",
"3 | \n",
"32 | \n",
"13 | \n",
"Male | \n",
"No | \n",
"Yes | \n",
"560 | \n",
"
\n",
"\n",
"396 | \n",
"13.364 | \n",
"3838 | \n",
"296 | \n",
"5 | \n",
"65 | \n",
"17 | \n",
"Male | \n",
"No | \n",
"No | \n",
"480 | \n",
"
\n",
"\n",
"397 | \n",
"57.872 | \n",
"4171 | \n",
"321 | \n",
"5 | \n",
"67 | \n",
"12 | \n",
"Female | \n",
"No | \n",
"Yes | \n",
"138 | \n",
"
\n",
"\n",
"398 | \n",
"37.728 | \n",
"2525 | \n",
"192 | \n",
"1 | \n",
"44 | \n",
"13 | \n",
"Male | \n",
"No | \n",
"Yes | \n",
"0 | \n",
"
\n",
"\n",
"399 | \n",
"18.701 | \n",
"5524 | \n",
"415 | \n",
"5 | \n",
"64 | \n",
"7 | \n",
"Female | \n",
"No | \n",
"No | \n",
"966 | \n",
"
\n",
"\n",
"
\n",
"
400 rows × 10 columns
\n",
"
"
],
"text/plain": [
" Income Limit Rating Cards Age Education Gender Student Married \\\n",
"0 14.891 3606 283 2 34 11 Male No Yes \n",
"1 106.025 6645 483 3 82 15 Female Yes Yes \n",
"2 104.593 7075 514 4 71 11 Male No No \n",
"3 148.924 9504 681 3 36 11 Female No No \n",
"4 55.882 4897 357 2 68 16 Male No Yes \n",
".. ... ... ... ... ... ... ... ... ... \n",
"395 12.096 4100 307 3 32 13 Male No Yes \n",
"396 13.364 3838 296 5 65 17 Male No No \n",
"397 57.872 4171 321 5 67 12 Female No Yes \n",
"398 37.728 2525 192 1 44 13 Male No Yes \n",
"399 18.701 5524 415 5 64 7 Female No No \n",
"\n",
" Balance \n",
"0 333 \n",
"1 903 \n",
"2 580 \n",
"3 964 \n",
"4 331 \n",
".. ... \n",
"395 560 \n",
"396 480 \n",
"397 138 \n",
"398 0 \n",
"399 966 \n",
"\n",
"[400 rows x 10 columns]"
]
},
"execution_count": 50,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# read in the data into a pandas dataframe\n",
"df = pd.read_csv('CreditN400p9.csv')\n",
"df"
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 419
},
"id": "fAbLWpEI1DW8",
"outputId": "1ef5b0ed-4ff6-4aad-b62e-80a8fa91ce08"
},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
"\n",
"\n",
" | \n",
"Income | \n",
"Limit | \n",
"Rating | \n",
"Cards | \n",
"Age | \n",
"Education | \n",
"Gender | \n",
"Student | \n",
"Married | \n",
"Balance | \n",
"
\n",
"\n",
"\n",
"\n",
"0 | \n",
"14.891 | \n",
"3606 | \n",
"283 | \n",
"2 | \n",
"34 | \n",
"11 | \n",
"1 | \n",
"0 | \n",
"1 | \n",
"333 | \n",
"
\n",
"\n",
"1 | \n",
"106.025 | \n",
"6645 | \n",
"483 | \n",
"3 | \n",
"82 | \n",
"15 | \n",
"0 | \n",
"1 | \n",
"1 | \n",
"903 | \n",
"
\n",
"\n",
"2 | \n",
"104.593 | \n",
"7075 | \n",
"514 | \n",
"4 | \n",
"71 | \n",
"11 | \n",
"1 | \n",
"0 | \n",
"0 | \n",
"580 | \n",
"
\n",
"\n",
"3 | \n",
"148.924 | \n",
"9504 | \n",
"681 | \n",
"3 | \n",
"36 | \n",
"11 | \n",
"0 | \n",
"0 | \n",
"0 | \n",
"964 | \n",
"
\n",
"\n",
"4 | \n",
"55.882 | \n",
"4897 | \n",
"357 | \n",
"2 | \n",
"68 | \n",
"16 | \n",
"1 | \n",
"0 | \n",
"1 | \n",
"331 | \n",
"
\n",
"\n",
"... | \n",
"... | \n",
"... | \n",
"... | \n",
"... | \n",
"... | \n",
"... | \n",
"... | \n",
"... | \n",
"... | \n",
"... | \n",
"
\n",
"\n",
"395 | \n",
"12.096 | \n",
"4100 | \n",
"307 | \n",
"3 | \n",
"32 | \n",
"13 | \n",
"1 | \n",
"0 | \n",
"1 | \n",
"560 | \n",
"
\n",
"\n",
"396 | \n",
"13.364 | \n",
"3838 | \n",
"296 | \n",
"5 | \n",
"65 | \n",
"17 | \n",
"1 | \n",
"0 | \n",
"0 | \n",
"480 | \n",
"
\n",
"\n",
"397 | \n",
"57.872 | \n",
"4171 | \n",
"321 | \n",
"5 | \n",
"67 | \n",
"12 | \n",
"0 | \n",
"0 | \n",
"1 | \n",
"138 | \n",
"
\n",
"\n",
"398 | \n",
"37.728 | \n",
"2525 | \n",
"192 | \n",
"1 | \n",
"44 | \n",
"13 | \n",
"1 | \n",
"0 | \n",
"1 | \n",
"0 | \n",
"
\n",
"\n",
"399 | \n",
"18.701 | \n",
"5524 | \n",
"415 | \n",
"5 | \n",
"64 | \n",
"7 | \n",
"0 | \n",
"0 | \n",
"0 | \n",
"966 | \n",
"
\n",
"\n",
"
\n",
"
400 rows × 10 columns
\n",
"
"
],
"text/plain": [
" Income Limit Rating Cards Age Education Gender Student Married \\\n",
"0 14.891 3606 283 2 34 11 1 0 1 \n",
"1 106.025 6645 483 3 82 15 0 1 1 \n",
"2 104.593 7075 514 4 71 11 1 0 0 \n",
"3 148.924 9504 681 3 36 11 0 0 0 \n",
"4 55.882 4897 357 2 68 16 1 0 1 \n",
".. ... ... ... ... ... ... ... ... ... \n",
"395 12.096 4100 307 3 32 13 1 0 1 \n",
"396 13.364 3838 296 5 65 17 1 0 0 \n",
"397 57.872 4171 321 5 67 12 0 0 1 \n",
"398 37.728 2525 192 1 44 13 1 0 1 \n",
"399 18.701 5524 415 5 64 7 0 0 0 \n",
"\n",
" Balance \n",
"0 333 \n",
"1 903 \n",
"2 580 \n",
"3 964 \n",
"4 331 \n",
".. ... \n",
"395 560 \n",
"396 480 \n",
"397 138 \n",
"398 0 \n",
"399 966 \n",
"\n",
"[400 rows x 10 columns]"
]
},
"execution_count": 51,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# recode the gender, student, and married preds \n",
"df['Gender'].replace(to_replace = dict(Female = 0, Male = 1), inplace=True)\n",
"df['Student'].replace(to_replace = dict(No = 0, Yes = 1), inplace=True)\n",
"df['Married'].replace(to_replace = dict(No = 0, Yes = 1), inplace=True)\n",
"df"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
},
"id": "a6rgSVFt0-Lc",
"outputId": "98dc7a72-11cd-4949-bbe3-073e5bac2a05"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(400, 9) (400,)\n"
]
}
],
"source": [
"# separate the predictors from the response\n",
"X = df.to_numpy()[:, :-1]\n",
"Y = df.to_numpy()[:, -1]\n",
"print(X.shape, Y.shape)"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {
"id": "676w7t_e2jOr"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[INFO] Using 320 training and 80 validation samples for each CV fold.\n"
]
}
],
"source": [
"# instantiate the model \n",
"elastic_net = Elastic(\n",
" preds = X,\n",
" responses = Y,\n",
" lambdas = 10 ** np.arange(-2., 7.),\n",
" alphas = [0, 0.2, 0.4, 0.6, 0.8, 1.0],\n",
" iters = 1000,\n",
" to_verb = True\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {
"id": "rSKcCFTQEkPz"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"lambda:0.01; alpha:0; CV MSE:10234.626587559245\n",
"lambda:0.01; alpha:0.2; CV MSE:10234.211795867723\n",
"lambda:0.01; alpha:0.4; CV MSE:10233.852438234768\n",
"lambda:0.01; alpha:0.6; CV MSE:10233.436392296477\n",
"lambda:0.01; alpha:0.8; CV MSE:10233.075147217352\n",
"lambda:0.01; alpha:1.0; CV MSE:10232.692809055512\n",
"lambda:0.1; alpha:0; CV MSE:10234.620036649416\n",
"lambda:0.1; alpha:0.2; CV MSE:10230.888416232277\n",
"lambda:0.1; alpha:0.4; CV MSE:10227.51252752043\n",
"lambda:0.1; alpha:0.6; CV MSE:10224.474212258927\n",
"lambda:0.1; alpha:0.8; CV MSE:10221.717309133242\n",
"lambda:0.1; alpha:1.0; CV MSE:10219.199002422461\n",
"lambda:1.0; alpha:0; CV MSE:10234.595186864828\n",
"lambda:1.0; alpha:0.2; CV MSE:10209.723874570986\n",
"lambda:1.0; alpha:0.4; CV MSE:10200.322057813979\n",
"lambda:1.0; alpha:0.6; CV MSE:10197.62366391859\n",
"lambda:1.0; alpha:0.8; CV MSE:10198.446603910419\n",
"lambda:1.0; alpha:1.0; CV MSE:10201.418058683208\n",
"lambda:10.0; alpha:0; CV MSE:10234.556835669233\n",
"lambda:10.0; alpha:0.2; CV MSE:10233.762240772221\n",
"lambda:10.0; alpha:0.4; CV MSE:10347.53675830116\n",
"lambda:10.0; alpha:0.6; CV MSE:10513.079258829724\n",
"lambda:10.0; alpha:0.8; CV MSE:10723.196252535801\n",
"lambda:10.0; alpha:1.0; CV MSE:10972.073141404908\n",
"lambda:100.0; alpha:0; CV MSE:10234.492985310182\n",
"lambda:100.0; alpha:0.2; CV MSE:12673.274224504257\n",
"lambda:100.0; alpha:0.4; CV MSE:17043.75443270868\n",
"lambda:100.0; alpha:0.6; CV MSE:21672.861483300676\n",
"lambda:100.0; alpha:0.8; CV MSE:26104.562872343544\n",
"lambda:100.0; alpha:1.0; CV MSE:30225.406433131506\n",
"lambda:1000.0; alpha:0; CV MSE:10271.892400756773\n"
]
}
],
"source": [
"# fit the model\n",
"elastic_net.fit()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 279
},
"id": "AwqtUQSIOFGn",
"outputId": "5829462d-fc37-4d4a-c8dd-1480e258fa3c"
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAfgAAAEWCAYAAACKZoWNAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Z1A+gAAAACXBIWXMAAAsTAAALEwEAmpwYAABPUUlEQVR4nO3dd3wVVdrA8d9zbzppBEIPBAgkhBKQpqg0RbGhgNhwFV/Lir1i17WtXdeu2LFjXQUbLsWKFOlNAgKhtxBKIO0+7x8zgQBJCJBkkvB8P3v3zpyZOfPcGPLcM3PmHFFVjDHGGFOz+LwOwBhjjDHlzxK8McYYUwNZgjfGGGNqIEvwxhhjTA1kCd4YY4ypgSzBG2OMMTWQJXhzRBGRt0XkofLetyKJyEQRuczrOIwx1YsleFMjuUkxU0RCq0Ast4vIT8WU1xWRXBFp50VcxRGRG0VkrYhsFZE3q8LPzxhzaCzBmxpHRBKB4wEFBngbDQDvAT1EpPk+5ecBc1R1rgcx7UdETgZuB04AmgEtgPs9DcoYc8gswZua6CJgMvA2cHFJO4lIbxFZKSJ3ishGEVkmIkP32a22iIwVkW0i8oeItCxy/LMikuG2dqeLyPHFnUdVVwLjgX8UE+coEaktImNEZIN71WGMiDQpIeZ/ich7RdYTRURFJMhdjxGRN0RkjYisEpGHRMRf4k9qbxcDb6jqPFXNBB4EhpXxWGNMFWMJ3tREFwHvu6+TRaR+Kfs2AOoCjXES3EgRSS6y/TycVmxtIB14uMi2qUBHIA74APhERMJKOM87FEnw7jk6usf5gLdwWs1NgZ3ACwf+mMV6G8gHkoBOwEnAZe45m4rIFhFpWsKxbYFZRdZnAfVFpM4hxmKM8ZAleFOjiMhxOIlytKpOB5YAFxzgsHtUNUdVJwFjgXOKbPtCVaeoaj7OF4aOhRtU9T1V3aSq+ar6FBAKFP1yUNQXOMmyh7t+EfCtqm5w6/hMVbNVdRvOl4heB/XBAfeLzKnADaq6Q1XXA8/gfElBVVeoaqyqriihikggq8h64XLUwcZijPGeJXhT01wM/KCqG931DyjlMj2Qqao7iqwvBxoVWV9bZDkbJwkCICK3iMgCEckSkS1ADM7VgP2oajbwCXCRiAgwFBjl1hMhIq+KyHIR2Qr8BMQexKX1Qs2AYGCN21LfArwK1Cvj8duB6CLrhcvbDjIOY0wVEOR1AMaUFxEJx2l9+0WkMDGH4iTLNFWdVcxhtUWkVpEk3xQ4YKc39377CJwOafNUNSAimYCUctg7wJfA5zit4q/d8ptxWv7dVXWtiHQEZpRQ1w4gosh6gyLLGUAOUNe94nCw5gFpwGh3PQ1Yp6qbDqEuY4zHrAVvapKzgAIgFedSekegDfAzziXxktwvIiFu0j4dp6V9IFE497o3AEEici97t36L8zOwBRgJfKSquUXq2glsEZE44L5S6pgJ9HTvp8cAdxRuUNU1wA/AUyISLSI+EWkpImW93D8KuFREUkUkFrgb556+MaYasgRvapKLgbfce81rC184HdaGFvY038daIBNYjXOP/UpVXViGc30PfAf8hXNZfxdOC7pEqqo4SbSZ+17oP0A4sBGn9/93pdQxDvgYmA1MB8bss8tFQAgw3/1cnwINYXcnu+0ldbJT1e+Ax4EJwAr3c5X2ZcMYU4WJ8zfHmCOPiPQG3lPVYh9JM8aY6sxa8MYYY0wNZAneGGOMqYHsEr0xxhhTA1kL3hhjjKmBavRz8HXr1tXExESvwzDGmGpl+vTpG1U13us4zOGp0Qk+MTGRadOmeR2GMcZUKyKy3OsYzOGzS/TGGGNMDWQJ3hhjjKmBLMEbY4wxNVCNvgdvjDGm6pg+fXq9oKCg14F2WAOzPASAufn5+Zd17tx5/b4bLcEbY4ypFEFBQa83aNCgTXx8fKbP57NBWA5TIBCQDRs2pK5du/Z1YMC+2+0blDHGmMrSLj4+fqsl9/Lh8/k0Pj4+C+eKyP7bKzkeY4wxRy6fJffy5f48i83ldom+OLk74Jf/eB1FyUS8jqAE+8S1V5wHs62Elf0+d1m3+cDnB/G77/us+4KK2aeEfcta7gs68L4+/74/QGOMKTeW4IuTtxN+esLrKEpgX35rjNAYiE2AmCYQk1BkuanzHlkffHaRzZgD8fv9nVu1arWzoKBAkpKSdo4ePXpZVFRU4FDqGjx4cOLpp5+edckll2See+65zUaMGLGuc+fOu4rbd8yYMVGhoaGBfv367Ti8T1AxLMEXp1Zd+NcWr6Oo3opOYrTfhEaHsm2f/Q5mmwYgUFDkvWDv9+LKtAACgYMod+sO5JexjgLYsRGyMiBrJSz/HXKy9v4cvmCIaewk/72+ALjrMU0gOGy/H70xR5rQ0NDAwoUL5wMMGDCg+VNPPRX/r3/9a13h9ry8PIKDgw+63o8//rjUEf3Gjx8fFRkZWXAwCf5QYzkUluBNxZDSLp+bYu3KcpJ91krYssJddr8ALJ0I29aw35eZWvF7kn1s0yJfANz18Nr28zdHlOOOO2777Nmzw8eMGRN13333NYqJiSlYunRpWHp6+tyrr766ya+//hqVm5srl19++fpbb711YyAQYNiwYU1/+umn6EaNGuUGBwfvbvl369Yt+cknn8zo2bNn9qeffhp97733Ni4oKJC4uLj8t99+e9moUaPifT6fjh49us5//vOfFc2bN8+9+OKLEzdv3hxUp06d/FGjRi1r1apV7uDBgxNDQ0MDc+fOjejWrdv2119/fWVl/CwswRtTVYTFOK/6bYvfXpAHW1e5XwDcxJ+1wllevwAWj4P8nXsfE1zLTfpN9r8FEJsAUY3Ab38GTM2Ql5fH999/H33SSSdtBZg/f37EjBkz5qWkpOQ++eSTdWNiYgrmzp27YOfOndK1a9eUM844Y+sff/wRkZ6eHpqenj535cqVwe3bt287bNiwTUXrXb16ddA111yTOHHixIUpKSm569at89evX7/goosu2hAZGVnwwAMPrAPo27dv0tChQzdde+21m/7zn//UGT58eMKPP/64BGDNmjUhf/7558KgoMr792b/so2pLvzBUDvReRVHFbI37d/6L1xfM9PZXpT4nCRf9AtA+yElf8kwpgrKycnxpaSkpAJ079592/XXX7/xxx9/jOzQocOOlJSUXIAff/wxeuHChRFfffVVbYBt27b558+fHzZp0qSoc845Z3NQUBCJiYl5xxxzzLZ96584cWKtbt26bSusq379+gXFxTFjxoxa33777RKA4cOHb77//vubFG4bNGhQZmUmd7AEb0zNIeL0H6lVFxofVfw+udlFkn/G3lcDMv6AeV/A9Lfhsv9BnZaVGr4xh6roPfiiIiIidl9uV1V56qmnVgwePHhr0X3GjBkTUxkxRkZGHlKnv8NhXXSNOZKEREB8a0g6AToPg753w6BX4ZKxcMMcuGaq06p/fwhkb/Y6WmPKTb9+/bJefvnl+JycHAGYPXt26NatW329evXa9umnn8bl5+ezfPny4MmTJ0fte2zv3r13TJkyJWrhwoUhAOvWrfMDREVFFWzbtm33866dOnXa8frrr9cGePXVV+O6dOmy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HPPAAw806t+//36j8ZWkLJ3srgHWAeNwRrMbC4wp6wlKo6o/AZv3KT4TKBxm6h2cse8Ly0epYzIQ6850Z4wxh67r5RDdxJmIxuOW8znJ55BcO5knplmHu4pSeIm+8HX55Zdnzpw5M6xJkyY57du3z/H5fAwdOnTTger5/vvvo88444zMhg0b5gPUr1+/AODvv/8OOf7441u1bt069bnnnmuwcOHC8NLq2bRpk3/btm3+0047bTvA5Zdfvmny5Mm7W+pDhgzJBOjRo8eOlStXHtT4ygccix64AUhW1QN+4HJSX1XXuMtrca4cADQGin4zW+mWrSlShohcAVwB0LRp04qN1BhT/QWHORPRfDkc5n8JbQd6FkqQL4i7jr6Li769iNfmvMb1R13vWSwV7UAt7aoiKChIA0VmIMzJyZHS9r/mmmuaXn/99WuHDh2aNWbMmKgHHnig0eGcPywsTN04KCgoKPXc+ypLL/oMnEv1lU6dG1EH9ZVaVUeqahdV7RIfH19BkRljapQO50K9VPjfA1CQ52konep1YkDLAbw9723+zvL2Eb4jRceOHXetWrUqZN68eaEAH330UVzhtsTExJyZM2fWAvjll18iVq1aFQpw8sknb/36669rr1271g/OXPMA27Zt8zdt2jQP4O23397dSz4qKqpg27Zt/n3PXadOnYLo6OiCwvvrb7zxRp1jjjlme3l8rrIk+KXARBG5Q0RuKnyVx8lLsK7w0rv7vt4tXwUkFNmviVtmjDGHx+d3Br/ZvNTziWgAbux8I+H+cB6d8qh1uCtnhffgC19XXXVV44iICH3++eeXn3766Umpqalt6tatu3uimYsuuigzMzPTn5SU1PbZZ5+t16xZs10AXbp02XXzzTevOf7441OSk5NTr7rqqgSAu+66a/X555/fsm3btm3q1Kmzu57BgwdvGTt2bGxhJ7uiMb311lt/33bbbU1at26dOnv27PBHH310dXl8VjnQL4+I3FdcuaqWS7dTEUkExqhqO3f9CWBTkU52cao6QkROA64BTsXpXPecqnYrre4uXbrotGnTyiNMY0xNpwpvnQqb0uG6GZ5NRFPo/QXv8+iUR3mm9zOc2OzESj23iExX1S7lXe+sWbOWpaWlbSzveo90s2bNqpuWlpa4b/kB78EXJnIRiVDVcu31ISIfAr2BuiKyErgPeBQYLSKX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",
"text/plain": [
"