{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.7.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":45533,"databundleVersionId":5748852,"sourceType":"competition"}],"dockerImageVersionId":30446,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"","metadata":{}},{"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n\n# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2024-02-20T16:57:29.489197Z","iopub.execute_input":"2024-02-20T16:57:29.489728Z","iopub.status.idle":"2024-02-20T16:57:29.526351Z","shell.execute_reply.started":"2024-02-20T16:57:29.489692Z","shell.execute_reply":"2024-02-20T16:57:29.525599Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Part 1: Importing Libraries","metadata":{}},{"cell_type":"code","source":"# Importing Libraries\nimport tensorflow as tf\nimport tensorflow_addons as tfa\nimport tensorflow_decision_forests as tfdf\nfrom tensorflow import keras\nfrom keras.callbacks import ModelCheckpoint, EarlyStopping\nfrom tensorflow.keras.layers import Conv1D, BatchNormalization, LeakyReLU, MaxPooling1D, Flatten, Dense, GlobalAvgPool2D, GlobalAvgPool1D\n\nimport pandas as pd\nimport numpy as np\nimport matplotlib.pyplot as plt\n\nfrom sklearn.metrics import f1_score","metadata":{"execution":{"iopub.status.busy":"2024-02-20T16:58:31.132023Z","iopub.execute_input":"2024-02-20T16:58:31.132378Z","iopub.status.idle":"2024-02-20T16:58:31.137761Z","shell.execute_reply.started":"2024-02-20T16:58:31.132347Z","shell.execute_reply":"2024-02-20T16:58:31.136909Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"pd.options.mode.chained_assignment = None  # default='warn'\ntf.random.set_seed(42)\nnp.random.seed(42)\nkeras.backend.clear_session()","metadata":{"execution":{"iopub.status.busy":"2024-02-20T16:57:38.220694Z","iopub.execute_input":"2024-02-20T16:57:38.221274Z","iopub.status.idle":"2024-02-20T16:57:38.236415Z","shell.execute_reply.started":"2024-02-20T16:57:38.221234Z","shell.execute_reply":"2024-02-20T16:57:38.235652Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Part 2: Loading Dataset for Creating Data Pipeline for Preprocessing\n\n### Note: Changing the Datatypes to fascilitate faster loading of the data. The reference for datatypes is: https://www.kaggle.com/competitions/predict-student-performance-from-game-play/discussion/384359","metadata":{}},{"cell_type":"code","source":"# Reference: https://www.kaggle.com/competitions/predict-student-performance-from-game-play/discussion/384359\ndtypes={\n    'elapsed_time':np.int32,\n    'event_name':'category',\n    'name':'category',\n    'level':np.uint8,\n    'room_coor_x':np.float32,\n    'room_coor_y':np.float32,\n    'screen_coor_x':np.float32,\n    'screen_coor_y':np.float32,\n    'hover_duration':np.float32,\n    'fqid':'category',\n    'room_fqid':'category',\n    'text_fqid':'category',\n    'level_group':'category'}\n\ndataset_df = pd.read_csv('/kaggle/input/predict-student-performance-from-game-play/train.csv', dtype=dtypes)\nprint(\"Full train dataset shape is {}\".format(dataset_df.shape))","metadata":{"execution":{"iopub.status.busy":"2024-02-20T16:57:38.238367Z","iopub.execute_input":"2024-02-20T16:57:38.238794Z","iopub.status.idle":"2024-02-20T16:57:38.246313Z","shell.execute_reply.started":"2024-02-20T16:57:38.238763Z","shell.execute_reply":"2024-02-20T16:57:38.243761Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"#### Loading Labels: Please note that Labels have Question Number appended with Session ID. ","metadata":{}},{"cell_type":"code","source":"labels = pd.read_csv('/kaggle/input/predict-student-performance-from-game-play/train_labels.csv')\nlabels['session'] = labels.session_id.apply(lambda x: int(x.split('_')[0]) )\nlabels['q'] = labels.session_id.apply(lambda x: int(x.split('_')[-1][1:]) )","metadata":{"execution":{"iopub.status.busy":"2024-02-20T16:57:38.24715Z","iopub.status.idle":"2024-02-20T16:57:38.247611Z","shell.execute_reply.started":"2024-02-20T16:57:38.247447Z","shell.execute_reply":"2024-02-20T16:57:38.247466Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Step 1: Preprocessing the Data as per the Kaggle Discussion Forums\n\n#### The reference for preprocessing is the below description from the Competition Abstract\n<br>\nBefore training the data we have to understand how level_groups and questions are associated to each other.\n\nIn this game the first quiz checkpoint(i.e., questions 1 to 3) comes after finishing levels 0 to 4. So for training questions 1 to 3 we will use data from the level_group 0-4. Similarly, we will use data from the level_group 5-12 to train questions from 4 to 13 and data from the level_group 13-22 to train questions from 14 to 18.\n\n<br>\nBased on above information, we inferred that we need to group our dataset based on Level Group. The Data for Each Question depends on the Level Group it belongs to.","metadata":{}},{"cell_type":"code","source":"# Categorizing Features on the Type\nCATEGORICAL = ['event_name', 'name','fqid', 'room_fqid', 'text_fqid']\nNUMERICAL = ['elapsed_time','level','page','room_coor_x', 'room_coor_y', \n        'screen_coor_x', 'screen_coor_y', 'hover_duration']","metadata":{"execution":{"iopub.status.busy":"2024-02-20T16:57:38.248504Z","iopub.status.idle":"2024-02-20T16:57:38.24897Z","shell.execute_reply.started":"2024-02-20T16:57:38.248791Z","shell.execute_reply":"2024-02-20T16:57:38.248809Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Reference: https://www.kaggle.com/code/cdeotte/random-forest-baseline-0-664/notebook\n\ndef feature_engineer(dataset_df):\n    dfs = []\n    for c in CATEGORICAL:\n        tmp = dataset_df.groupby(['session_id','level_group'])[c].agg('nunique')\n        tmp.name = tmp.name + '_nunique'\n        dfs.append(tmp)\n    for c in NUMERICAL:\n        tmp = dataset_df.groupby(['session_id','level_group'])[c].agg('mean')\n        dfs.append(tmp)\n    for c in NUMERICAL:\n        tmp = dataset_df.groupby(['session_id','level_group'])[c].agg('std')\n        tmp.name = tmp.name + '_std'\n        dfs.append(tmp)\n    dataset_df = pd.concat(dfs,axis=1)\n    dataset_df = dataset_df.fillna(-1)\n    dataset_df = dataset_df.reset_index()\n    dataset_df = dataset_df.set_index('session_id')\n    return dataset_df","metadata":{"execution":{"iopub.status.busy":"2024-02-20T16:57:38.249783Z","iopub.status.idle":"2024-02-20T16:57:38.250241Z","shell.execute_reply.started":"2024-02-20T16:57:38.250091Z","shell.execute_reply":"2024-02-20T16:57:38.250109Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"#### Pre-Processing whole Dataset at Once to avoid any Data Errors while Training and Testing","metadata":{}},{"cell_type":"code","source":"dataset_df = feature_engineer(dataset_df)\nprint(\"Dataset shape is {}\".format(dataset_df.shape))","metadata":{"execution":{"iopub.status.busy":"2024-02-20T16:57:38.251083Z","iopub.status.idle":"2024-02-20T16:57:38.251586Z","shell.execute_reply.started":"2024-02-20T16:57:38.25141Z","shell.execute_reply":"2024-02-20T16:57:38.251437Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"#### Plotting the division of Correct and Incorrect answers at Question Level","metadata":{}},{"cell_type":"code","source":"grouped_data = labels.groupby(['q', 'correct']).size().unstack(fill_value=0)\n\n# plot the data as a stacked bar chart\ngrouped_data.plot(kind='bar', stacked=True)\n\n# add labels and title\nplt.xlabel('Question')\nplt.ylabel('Count')\nplt.title('Number of Correct and Incorrect Answers by Question')\n\n# show the plot\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-02-20T16:57:38.25245Z","iopub.status.idle":"2024-02-20T16:57:38.252905Z","shell.execute_reply.started":"2024-02-20T16:57:38.252727Z","shell.execute_reply":"2024-02-20T16:57:38.252745Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Step 2: Splitting Data into Training, Validation, and Testing","metadata":{}},{"cell_type":"markdown","source":"#### We are first dividing Data into Training and Testing, where 80% is Training and 20% is Testing. Then we are using Training Data to again Split it into Validation Data with same Ratio","metadata":{}},{"cell_type":"code","source":"# Splitting DataSet into Train and Valid\ndef split_dataset(dataset, test_ratio=0.20):\n    USER_LIST = dataset.index.unique()\n    split = int(len(USER_LIST) * (1 - 0.20))\n    return dataset.loc[USER_LIST[:split]], dataset.loc[USER_LIST[split:]]\n\n# Generating Split DataSet\ntrain_x, test_x = split_dataset(dataset_df)\nprint(\"{} examples in training, {} examples in validation.\".format(\n    len(train_x), len(test_x)))","metadata":{"execution":{"iopub.status.busy":"2024-02-20T16:57:38.25427Z","iopub.status.idle":"2024-02-20T16:57:38.255038Z","shell.execute_reply.started":"2024-02-20T16:57:38.254805Z","shell.execute_reply":"2024-02-20T16:57:38.254827Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Splitting the Data into Train and Test\ntrain_x, valid_x = split_dataset(train_x)\nprint(\"{} examples in training, {} examples in testing.\".format(\n    len(train_x), len(valid_x)))","metadata":{"execution":{"iopub.status.busy":"2024-02-20T16:57:38.256373Z","iopub.status.idle":"2024-02-20T16:57:38.25696Z","shell.execute_reply.started":"2024-02-20T16:57:38.256763Z","shell.execute_reply":"2024-02-20T16:57:38.256784Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Step 3: Creating an input pipeline as per techniques mentioned in W5.\n\n#### We need to train 18 Models for 18 Questions. So we will be generating pipeline for dataset of each Question. ","metadata":{}},{"cell_type":"code","source":"# Function to Split DataSet into Parts\ndef save_to_multiple_csv_files(data, name_prefix, question, header=None, n_parts=5):\n    # Setting the Directory\n    # Creating Directory for Each Question\n    game_prediction_dir = os.path.join(\"/kaggle/working/datasets_\"+str(question), \"student_performance_data\")\n    os.makedirs(game_prediction_dir, exist_ok=True)\n    path_format = os.path.join(game_prediction_dir, \"my_{}_{:02d}.csv\")\n\n    filepaths = []\n    m = len(data)\n    for file_idx, row_indices in enumerate(np.array_split(np.arange(m), n_parts)):\n        part_csv = path_format.format(name_prefix, file_idx)\n        filepaths.append(part_csv)\n        with open(part_csv, \"wt\", encoding=\"utf-8\") as f:\n            if header is not None:\n                f.write(header)\n                f.write(\"\\n\")\n            for row_idx in row_indices:\n                f.write(\",\".join([repr(col) for col in data[row_idx]]))\n                f.write(\"\\n\")\n    return filepaths","metadata":{"execution":{"iopub.status.busy":"2024-02-20T16:57:38.257986Z","iopub.status.idle":"2024-02-20T16:57:38.258505Z","shell.execute_reply.started":"2024-02-20T16:57:38.258335Z","shell.execute_reply":"2024-02-20T16:57:38.258355Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Generating CSV files for Each Question and Saving them\ntrain_file_paths_for_questions = []\nvalid_file_paths_for_questions = []\ntest_file_paths_for_questions = []\n\nheader_cols = train_x.columns\nheader = \",\".join(header_cols)\n\nfor q_no in range(1,19):\n    \n    # Selecting the Group based on Question Number\n    if q_no<=3: grp = '0-4'\n    elif q_no<=13: grp = '5-12'\n    elif q_no<=22: grp = '13-22'\n    print(\"##### Generating CSV for q_no\", q_no, \"grp\", grp)\n    \n    # Filter the rows in the datasets based on the selected level group. \n    train_df = train_x.loc[train_x.level_group == grp]\n    train_users = train_df.index.values\n    valid_df = valid_x.loc[valid_x.level_group == grp]\n    valid_users = valid_df.index.values\n    test_df = test_x.loc[test_x.level_group == grp]\n    test_users = test_df.index.values\n    \n    # Select the labels for the related q_no.\n    train_labels = labels.loc[labels.q==q_no].set_index('session').loc[train_users]\n    valid_labels = labels.loc[labels.q==q_no].set_index('session').loc[valid_users]\n    test_labels = labels.loc[labels.q==q_no].set_index('session').loc[test_users]\n    \n     # Add the label to the filtered datasets.\n    train_df[\"correct\"] = train_labels[\"correct\"]\n    valid_df[\"correct\"] = valid_labels[\"correct\"]\n    test_df[\"correct\"] = test_labels[\"correct\"]\n    \n    # Dropping Column Level Group\n    train_ds_data = train_df.drop(columns=['level_group'])\n    valid_ds_data = valid_df.drop(columns=['level_group'])\n    test_ds_data = test_df.drop(columns=['level_group'])\n    train_ds_data.reset_index()\n    valid_ds_data.reset_index()\n    test_ds_data.reset_index()\n    \n    # Calling function to generate CSVs\n    train_filepaths = save_to_multiple_csv_files(train_ds_data.to_numpy(), \"train\", \"q_no_\"+str(q_no), header, n_parts=5)\n    valid_filepaths = save_to_multiple_csv_files(valid_ds_data.to_numpy(), \"valid\", \"q_no_\"+str(q_no), header, n_parts=5)\n    test_filepaths = save_to_multiple_csv_files(test_ds_data.to_numpy(), \"test\", \"q_no_\"+str(q_no), header, n_parts=5)\n    \n    # Saving File Paths\n    train_file_paths_for_questions.append(train_filepaths)\n    valid_file_paths_for_questions.append(valid_filepaths)\n    test_file_paths_for_questions.append(test_filepaths)","metadata":{"execution":{"iopub.status.busy":"2024-02-20T16:57:38.259498Z","iopub.status.idle":"2024-02-20T16:57:38.260124Z","shell.execute_reply.started":"2024-02-20T16:57:38.259942Z","shell.execute_reply":"2024-02-20T16:57:38.259965Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Pre Process Function\nn_inputs = 21\ndef preprocess(line):\n\n    defs = [0.] * n_inputs + [tf.constant([], dtype=tf.float32)]\n\n    fields = tf.io.decode_csv(line, record_defaults=defs)\n    X = tf.stack(fields[:-1])\n    y = tf.stack(fields[-1:])\n    return X, y","metadata":{"execution":{"iopub.status.busy":"2024-02-20T16:57:38.261266Z","iopub.status.idle":"2024-02-20T16:57:38.261801Z","shell.execute_reply.started":"2024-02-20T16:57:38.26164Z","shell.execute_reply":"2024-02-20T16:57:38.261659Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# CSV Reader for Train\ndef csv_reader_dataset(filepaths, repeat=1, n_readers=5,  # number of files or filepaths\n                       n_read_threads=None, shuffle_buffer_size=10000,\n                       n_parse_threads=5, batch_size=32):\n    \n    dataset = tf.data.Dataset.list_files(filepaths).repeat(repeat)\n    \n    \n    \n    dataset = dataset.interleave(\n        lambda filepath: tf.data.TextLineDataset(filepath).skip(1), # skip the header row via map_func\n        cycle_length=n_readers, # 'interleave' pull cycle_length(=n_readers) file paths(1 by 1) from the 'dataset'\n        num_parallel_calls=n_read_threads) \n    dataset = dataset.shuffle(shuffle_buffer_size)\n    dataset = dataset.map(preprocess, num_parallel_calls=n_parse_threads)\n    dataset = dataset.batch(batch_size)\n    \n    return dataset.prefetch(1)","metadata":{"execution":{"iopub.status.busy":"2024-02-20T16:57:38.262925Z","iopub.status.idle":"2024-02-20T16:57:38.263467Z","shell.execute_reply.started":"2024-02-20T16:57:38.263297Z","shell.execute_reply":"2024-02-20T16:57:38.263318Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Using the Saved CSV Loading the Data and saving them to a List\ntrain_set_list = []\nvalid_set_list = []\ntest_set_list = []\n\n\nfor q_no in range(1,19):\n\n    # Select level group for the question based on the q_no.\n    if q_no<=3: grp = '0-4'\n    elif q_no<=13: grp = '5-12'\n    elif q_no<=22: grp = '13-22'\n    print(\"##### Loading CSV for q_no\", q_no, \"grp\", grp)\n    \n    train_set = csv_reader_dataset(train_file_paths_for_questions[q_no - 1])\n    valid_set = csv_reader_dataset(valid_file_paths_for_questions[q_no - 1]) \n    test_set = csv_reader_dataset(test_file_paths_for_questions[q_no - 1])   \n    \n    train_set_list.append(train_set)\n    valid_set_list.append(valid_set)\n    test_set_list.append(test_set)","metadata":{"execution":{"iopub.status.busy":"2024-02-20T16:57:38.264459Z","iopub.status.idle":"2024-02-20T16:57:38.264993Z","shell.execute_reply.started":"2024-02-20T16:57:38.264807Z","shell.execute_reply":"2024-02-20T16:57:38.264826Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Extras: Functions for Generating Graphs","metadata":{}},{"cell_type":"code","source":"def plotGridGraphs(history_models_list):\n    # Loss and Accuracy Update Plots\n    # create a 3x6 grid of plots\n    fig, axes = plt.subplots(nrows=6, ncols=3, figsize=(30, 30))\n\n    # loop over each plot and generate the learning curve for each model\n    for i, ax in enumerate(axes.flatten()):\n        # get the history object for the current model\n        history = history_models[i]\n\n        # generate the learning curve for the current model\n        pd.DataFrame(history.history).plot(ax=ax, figsize=(20, 20))\n        ax.grid(True)\n        ax.set_ylim(0, 1)\n        ax.set_title(f\"Question {i+1}\")\n\n    fig.subplots_adjust(wspace=0.4, hspace=0.4)\n    # save and show the plot\n    # plt.tight_layout()\n    plt.show()","metadata":{"execution":{"iopub.status.busy":"2024-02-20T16:57:38.26597Z","iopub.status.idle":"2024-02-20T16:57:38.266487Z","shell.execute_reply.started":"2024-02-20T16:57:38.266324Z","shell.execute_reply":"2024-02-20T16:57:38.266343Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def accuracy_bar_plot(test_loss_and_accuracy_list):\n    # Accuracy Plot\n    accuracy_list_dnn_1 = [accuracy[1] for accuracy in test_loss_and_accuracy_list]\n    loss_list_dnn_1 = [loss[0] for loss in test_loss_and_accuracy_list]\n    fig, ax = plt.subplots()\n    ax.bar(range(len(accuracy_list_dnn_1)), accuracy_list_dnn_1)\n    ax.set_xticks(range(len(accuracy_list_dnn_1)))\n\n    ax.set_xticklabels(['Q {}'.format(i) for i in range(1, len(accuracy_list_dnn_1) + 1)], rotation = 90)\n\n\n    ax.set_xlabel('Questions')\n    ax.set_ylabel('Accuracy')\n    ax.set_title('Accuracy for each Question')\n    plt.show()\n\n    average_accuracy = np.mean(accuracy_list_dnn_1)\n    print(\"Average accuracy is: \", average_accuracy*100, \"%\")\n","metadata":{"execution":{"iopub.status.busy":"2024-02-20T16:57:38.267492Z","iopub.status.idle":"2024-02-20T16:57:38.268045Z","shell.execute_reply.started":"2024-02-20T16:57:38.267834Z","shell.execute_reply":"2024-02-20T16:57:38.267888Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def f1_score_bar_plot(f1_score_list):\n    # F1 Score Plot\n    fig, ax = plt.subplots()\n    ax.bar(range(len(f1_score_list)), f1_score_list, color=(0.2, 0.4, 0.6, 0.6))\n    ax.set_xticks(range(len(f1_score_list)))\n\n    ax.set_xticklabels(['Q {}'.format(i) for i in range(1, len(f1_score_list) + 1)], rotation = 90)\n\n\n    ax.set_xlabel('Questions')\n    ax.set_ylabel('F1 Score')\n    ax.set_title('F1 Score for each Question')\n    plt.show()\n\n    average_f1_score = np.mean(f1_score_list)\n    print(\"Average F1 Score is: \", average_f1_score*100)","metadata":{"execution":{"iopub.status.busy":"2024-02-20T16:57:38.268983Z","iopub.status.idle":"2024-02-20T16:57:38.269471Z","shell.execute_reply.started":"2024-02-20T16:57:38.269313Z","shell.execute_reply":"2024-02-20T16:57:38.269332Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Part 3: Deep Networks Model Training and Testing","metadata":{}},{"cell_type":"markdown","source":"## Step 1: Using W2 to create a Deep Neural Network with 1 I/P Layer, 1 O/P Layer, and 3 Hidden Layers, without any Normalization or Drop Outs. \n### Note: Keeping Epochs as 20 for all the Questions with an Early Stop with patience of 7","metadata":{}},{"cell_type":"code","source":"# Training Models for Each Question\ntest_loss_and_accuracy_list = []\nhistory_models = []\nmodels = {}\nf1_score_list = []\n\nfor q_no in range(1,19):\n\n    # Select level group for the question based on the q_no.\n    if q_no<=3: grp = '0-4'\n    elif q_no<=13: grp = '5-12'\n    elif q_no<=22: grp = '13-22'\n    print(\"##### Training for q_no\", q_no, \"grp\", grp)\n    \n    train_set = train_set_list[q_no - 1]\n    valid_set = valid_set_list[q_no - 1]\n    test_set = test_set_list[q_no - 1]\n    \n    model = keras.models.Sequential([\n        keras.layers.Dense(400, activation='relu', input_shape=(21,)),\n        keras.layers.Dense(200, activation='relu'),\n        keras.layers.Dense(100, activation='relu'),\n        keras.layers.Dense(50, activation='relu'),\n        keras.layers.Dense(1, activation=\"sigmoid\")\n    ])\n\n    model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])\n    early_stopping = EarlyStopping(monitor='val_accuracy', mode='max', patience=7,  restore_best_weights=True)\n    history = model.fit(train_set, epochs=3, validation_data=(valid_set), callbacks=[early_stopping])\n    \n    # Store the model\n    models[f'{grp}_{q_no}'] = model    \n    \n    # Saving Accuracies\n    results = model.evaluate(test_set)\n    test_loss_and_accuracy_list.append(results)\n    \n    # Saving History of Models\n    history_models.append(history)\n    \n    # F1 Score\n    y_true_numpy_list = []\n    \n    predictions = model.predict(test_set, verbose=0)\n    predictions = predictions.round().astype(int).flatten()\n    \n    for x_batch, y_batch in test_set:\n    \n        y_batch = y_batch.numpy()\n        y_batch = y_batch.round().astype(int).flatten()\n\n        y_true_numpy_list.append(y_batch)\n        \n    y_true_numpy = np.concatenate(y_true_numpy_list)\n    f1_score_list.append(f1_score(y_true_numpy, predictions))","metadata":{"execution":{"iopub.status.busy":"2024-02-20T16:57:38.270391Z","iopub.status.idle":"2024-02-20T16:57:38.270902Z","shell.execute_reply.started":"2024-02-20T16:57:38.270718Z","shell.execute_reply":"2024-02-20T16:57:38.270737Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"","metadata":{}},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"#### Plotting Learning Curve, Accuracy Comparisons, and F1 Score Comparisons","metadata":{}},{"cell_type":"code","source":"plotGridGraphs(history_models)\naccuracy_bar_plot(test_loss_and_accuracy_list)\nf1_score_bar_plot(f1_score_list)","metadata":{"execution":{"iopub.status.busy":"2024-02-20T16:57:38.271807Z","iopub.status.idle":"2024-02-20T16:57:38.272377Z","shell.execute_reply.started":"2024-02-20T16:57:38.272212Z","shell.execute_reply":"2024-02-20T16:57:38.272232Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Step 2: Using W2 to create a Deep Neural Network with 1 I/P Layer, 1 O/P Layer, and 5 Hidden Layers, with Batch Normalization Layer. \n### Note: Keeping Epochs as 20 for all the Questions with an Early Stop with patience of 7","metadata":{}},{"cell_type":"code","source":"# Training Models for Each Question\ntest_loss_and_accuracy_list = []\nhistory_models = []\nmodels = {}\nf1_score_list = []\n\nfor q_no in range(1,19):\n\n    # Select level group for the question based on the q_no.\n    if q_no<=3: grp = '0-4'\n    elif q_no<=13: grp = '5-12'\n    elif q_no<=22: grp = '13-22'\n    print(\"##### Training for q_no\", q_no, \"grp\", grp)\n    \n    train_set = train_set_list[q_no - 1]\n    valid_set = valid_set_list[q_no - 1]\n    test_set = test_set_list[q_no - 1]\n    \n    \n    model = keras.models.Sequential([\n        keras.layers.Dense(512, activation='relu', input_shape=(21,)),\n        keras.layers.BatchNormalization(),\n        keras.layers.Dense(256, activation='relu'),\n        keras.layers.BatchNormalization(),\n        keras.layers.Dense(128, activation='relu'),\n        keras.layers.BatchNormalization(),\n        keras.layers.Dense(64, activation='relu'),\n        keras.layers.BatchNormalization(),\n        keras.layers.Dense(32, activation='relu'),\n        keras.layers.BatchNormalization(),\n        keras.layers.Dense(16, activation='relu'),\n        keras.layers.BatchNormalization(),\n        keras.layers.Dense(1, activation=\"sigmoid\")\n    ])\n\n    model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])\n    early_stopping = EarlyStopping(monitor='val_accuracy', mode='max', patience=7,  restore_best_weights=True)\n    history = model.fit(train_set, epochs=20, validation_data=(valid_set), callbacks=[early_stopping])\n    \n    # Store the model\n    models[f'{grp}_{q_no}'] = model    \n    \n    # Saving Accuracies\n    results = model.evaluate(test_set)\n    test_loss_and_accuracy_list.append(results)\n    \n    # Saving History of Models\n    history_models.append(history)\n    \n    # F1 Score\n    y_true_numpy_list = []\n    \n    predictions = model.predict(test_set, verbose=0)\n    predictions = predictions.round().astype(int).flatten()\n    \n    for x_batch, y_batch in test_set:\n    \n        y_batch = y_batch.numpy()\n        y_batch = y_batch.round().astype(int).flatten()\n\n        y_true_numpy_list.append(y_batch)\n        \n    y_true_numpy = np.concatenate(y_true_numpy_list)\n    f1_score_list.append(f1_score(y_true_numpy, predictions))","metadata":{"execution":{"iopub.status.busy":"2024-02-20T16:57:38.273319Z","iopub.status.idle":"2024-02-20T16:57:38.273825Z","shell.execute_reply.started":"2024-02-20T16:57:38.273664Z","shell.execute_reply":"2024-02-20T16:57:38.273683Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"plotGridGraphs(history_models)\naccuracy_bar_plot(test_loss_and_accuracy_list)\nf1_score_bar_plot(f1_score_list)","metadata":{"execution":{"iopub.status.busy":"2024-02-20T16:57:38.274781Z","iopub.status.idle":"2024-02-20T16:57:38.275317Z","shell.execute_reply.started":"2024-02-20T16:57:38.275158Z","shell.execute_reply":"2024-02-20T16:57:38.275177Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Step 3: Using W2 to create a Deep Neural Network with 1 I/P Layer, 1 O/P Layer, and 5 Hidden Layers, with Batch Normalization Layer and Drop Outs. \n### Note: Keeping Epochs as 20 for all the Questions with an Early Stop with patience of 7","metadata":{}},{"cell_type":"code","source":"# Training Models for Each Question\ntest_loss_and_accuracy_list = []\nhistory_models = []\nmodels = {}\nf1_score_list = []\n\nfor q_no in range(1,19):\n\n    # Select level group for the question based on the q_no.\n    if q_no<=3: grp = '0-4'\n    elif q_no<=13: grp = '5-12'\n    elif q_no<=22: grp = '13-22'\n    print(\"##### Training for q_no\", q_no, \"grp\", grp)\n    \n    train_set = train_set_list[q_no - 1]\n    valid_set = valid_set_list[q_no - 1]\n    test_set = test_set_list[q_no - 1]\n    \n    \n    model = keras.models.Sequential([\n        keras.layers.Dense(512, activation='relu', input_shape=(21,)),\n        keras.layers.BatchNormalization(),\n        keras.layers.Dense(256, activation='relu'),\n        keras.layers.BatchNormalization(),\n        keras.layers.Dropout(0.2),\n        keras.layers.Dense(128, activation='relu'),\n        keras.layers.BatchNormalization(),\n        keras.layers.Dropout(0.2),\n        keras.layers.Dense(64, activation='relu'),\n        keras.layers.BatchNormalization(),\n        keras.layers.Dropout(0.2),\n        keras.layers.Dense(32, activation='relu'),\n        keras.layers.BatchNormalization(),\n        keras.layers.Dropout(0.2),\n        keras.layers.Dense(16, activation='relu'),\n        keras.layers.BatchNormalization(),\n        keras.layers.Dense(1, activation=\"sigmoid\")\n    ])\n\n    model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])\n    early_stopping = EarlyStopping(monitor='val_accuracy', mode='max', patience=7,  restore_best_weights=True)\n    history = model.fit(train_set, epochs=20, validation_data=(valid_set), callbacks=[early_stopping])\n    \n    # Store the model\n    models[f'{grp}_{q_no}'] = model    \n    \n    # Saving Accuracies\n    results = model.evaluate(test_set)\n    test_loss_and_accuracy_list.append(results)\n    \n    # Saving History of Models\n    history_models.append(history)\n    \n    # F1 Score\n    y_true_numpy_list = []\n    \n    predictions = model.predict(test_set, verbose=0)\n    predictions = predictions.round().astype(int).flatten()\n    \n    for x_batch, y_batch in test_set:\n    \n        y_batch = y_batch.numpy()\n        y_batch = y_batch.round().astype(int).flatten()\n\n        y_true_numpy_list.append(y_batch)\n        \n    y_true_numpy = np.concatenate(y_true_numpy_list)\n    f1_score_list.append(f1_score(y_true_numpy, predictions))","metadata":{"execution":{"iopub.status.busy":"2024-02-20T16:57:38.27624Z","iopub.status.idle":"2024-02-20T16:57:38.276723Z","shell.execute_reply.started":"2024-02-20T16:57:38.276568Z","shell.execute_reply":"2024-02-20T16:57:38.276587Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"plotGridGraphs(history_models)\naccuracy_bar_plot(test_loss_and_accuracy_list)\nf1_score_bar_plot(f1_score_list)","metadata":{"execution":{"iopub.status.busy":"2024-02-20T16:57:38.277606Z","iopub.status.idle":"2024-02-20T16:57:38.278127Z","shell.execute_reply.started":"2024-02-20T16:57:38.27797Z","shell.execute_reply":"2024-02-20T16:57:38.277989Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Step 4: Using W2 to create a Deep Neural Network with 1 I/P Layer, 1 O/P Layer, and 5 Hidden Layers, with Batch Normalization Layer and Drop Outs. Using SGD Optimizer\n### Note: Keeping Epochs as 20 for all the Questions with an Early Stop with patience of 3. We reduced the Patience Since no meaningful increase in accuracy is observed with Epochs","metadata":{}},{"cell_type":"code","source":"# Training Models for Each Question\ntest_loss_and_accuracy_list = []\nhistory_models = []\nmodels = {}\nf1_score_list = []\n\nfor q_no in range(1,19):\n\n    # Select level group for the question based on the q_no.\n    if q_no<=3: grp = '0-4'\n    elif q_no<=13: grp = '5-12'\n    elif q_no<=22: grp = '13-22'\n    print(\"##### Training for q_no\", q_no, \"grp\", grp)\n    \n    train_set = train_set_list[q_no - 1]\n    valid_set = valid_set_list[q_no - 1]\n    test_set = test_set_list[q_no - 1]\n    \n    \n    model = keras.models.Sequential([\n        keras.layers.Dense(512, activation='relu', input_shape=(21,)),\n        keras.layers.BatchNormalization(),\n        keras.layers.Dense(256, activation='relu'),\n        keras.layers.BatchNormalization(),\n        keras.layers.Dropout(0.2),\n        keras.layers.Dense(128, activation='relu'),\n        keras.layers.BatchNormalization(),\n        keras.layers.Dropout(0.2),\n        keras.layers.Dense(64, activation='relu'),\n        keras.layers.BatchNormalization(),\n        keras.layers.Dropout(0.2),\n        keras.layers.Dense(32, activation='relu'),\n        keras.layers.BatchNormalization(),\n        keras.layers.Dropout(0.2),\n        keras.layers.Dense(16, activation='relu'),\n        keras.layers.BatchNormalization(),\n        keras.layers.Dense(1, activation=\"sigmoid\")\n    ])\n\n    model.compile(loss='binary_crossentropy', optimizer='sgd', metrics=['accuracy'])\n    early_stopping = EarlyStopping(monitor='val_accuracy', mode='max', patience=3,  restore_best_weights=True)\n    history = model.fit(train_set, epochs=20, validation_data=(valid_set), callbacks=[early_stopping])\n    \n    # Store the model\n    models[f'{grp}_{q_no}'] = model    \n    \n    # Saving Accuracies\n    results = model.evaluate(test_set)\n    test_loss_and_accuracy_list.append(results)\n    \n    # Saving History of Models\n    history_models.append(history)\n    \n    # F1 Score\n    y_true_numpy_list = []\n    \n    predictions = model.predict(test_set, verbose=0)\n    predictions = predictions.round().astype(int).flatten()\n    \n    for x_batch, y_batch in test_set:\n    \n        y_batch = y_batch.numpy()\n        y_batch = y_batch.round().astype(int).flatten()\n\n        y_true_numpy_list.append(y_batch)\n        \n    y_true_numpy = np.concatenate(y_true_numpy_list)\n    f1_score_list.append(f1_score(y_true_numpy, predictions))","metadata":{"execution":{"iopub.status.busy":"2024-02-20T16:57:38.27903Z","iopub.status.idle":"2024-02-20T16:57:38.27951Z","shell.execute_reply.started":"2024-02-20T16:57:38.27935Z","shell.execute_reply":"2024-02-20T16:57:38.279369Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"plotGridGraphs(history_models)\naccuracy_bar_plot(test_loss_and_accuracy_list)\nf1_score_bar_plot(f1_score_list)","metadata":{"execution":{"iopub.status.busy":"2024-02-20T16:57:38.28037Z","iopub.status.idle":"2024-02-20T16:57:38.280854Z","shell.execute_reply.started":"2024-02-20T16:57:38.280686Z","shell.execute_reply":"2024-02-20T16:57:38.280704Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Part 4: Using W6 for Convolution Neural Networks Model Training and Testing","metadata":{}},{"cell_type":"code","source":"# Training Models for Each Question\ntest_loss_and_accuracy_list = []\nhistory_models = []\nmodels = {}\nf1_score_list = []\n\nfor q_no in range(1,19):\n\n    # Select level group for the question based on the q_no.\n    if q_no<=3: grp = '0-4'\n    elif q_no<=13: grp = '5-12'\n    elif q_no<=22: grp = '13-22'\n    print(\"##### Training for q_no\", q_no, \"grp\", grp)\n    \n    train_set = train_set_list[q_no - 1]\n    valid_set = valid_set_list[q_no - 1]\n    test_set = test_set_list[q_no - 1]\n    \n    \n    model = keras.models.Sequential([\n        keras.layers.Conv1D(filters=32, kernel_size=3, input_shape=(21, 1)),\n        keras.layers.BatchNormalization(),\n        keras.layers.LeakyReLU(),\n        keras.layers.MaxPooling1D(pool_size=2),\n\n        keras.layers.Conv1D(filters=64, kernel_size=3),\n        keras.layers.BatchNormalization(),\n        keras.layers.LeakyReLU(),\n        keras.layers.MaxPooling1D(pool_size=2),\n        \n        keras.layers.Flatten(),\n        keras.layers.Dense(128, activation='relu'),\n        keras.layers.Dense(1, activation=\"sigmoid\")\n    ])\n\n    model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])\n    early_stopping = EarlyStopping(monitor='val_accuracy', mode='max', patience=3,  restore_best_weights=True)\n    history = model.fit(train_set, epochs=20, validation_data=(valid_set), callbacks=[early_stopping])\n    \n    # Store the model\n    models[f'{grp}_{q_no}'] = model    \n    \n    # Saving Accuracies\n    results = model.evaluate(test_set)\n    test_loss_and_accuracy_list.append(results)\n    \n    # Saving History of Models\n    history_models.append(history)\n    \n    # F1 Score\n    y_true_numpy_list = []\n    \n    predictions = model.predict(test_set, verbose=0)\n    predictions = predictions.round().astype(int).flatten()\n    \n    for x_batch, y_batch in test_set:\n    \n        y_batch = y_batch.numpy()\n        y_batch = y_batch.round().astype(int).flatten()\n\n        y_true_numpy_list.append(y_batch)\n        \n    y_true_numpy = np.concatenate(y_true_numpy_list)\n    f1_score_list.append(f1_score(y_true_numpy, predictions))","metadata":{"execution":{"iopub.status.busy":"2024-02-20T16:57:38.281715Z","iopub.status.idle":"2024-02-20T16:57:38.282213Z","shell.execute_reply.started":"2024-02-20T16:57:38.282057Z","shell.execute_reply":"2024-02-20T16:57:38.282075Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"plotGridGraphs(history_models)\naccuracy_bar_plot(test_loss_and_accuracy_list)\nf1_score_bar_plot(f1_score_list)","metadata":{"execution":{"iopub.status.busy":"2024-02-20T16:57:38.283125Z","iopub.status.idle":"2024-02-20T16:57:38.283665Z","shell.execute_reply.started":"2024-02-20T16:57:38.283507Z","shell.execute_reply":"2024-02-20T16:57:38.283526Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Part 5: Using W7 LSTM Model Training and Testing","metadata":{}},{"cell_type":"code","source":"# Training Models for Each Question\ntest_loss_and_accuracy_list = []\nhistory_models = []\nmodels = {}\nf1_score_list = []\n\nfor q_no in range(1,19):\n\n    # Select level group for the question based on the q_no.\n    if q_no<=3: grp = '0-4'\n    elif q_no<=13: grp = '5-12'\n    elif q_no<=22: grp = '13-22'\n    print(\"##### Training for q_no\", q_no, \"grp\", grp)\n    \n    train_set = train_set_list[q_no - 1]\n    valid_set = valid_set_list[q_no - 1]\n    test_set = test_set_list[q_no - 1]\n    \n    \n    model = keras.models.Sequential([\n        keras.layers.LSTM(20, return_sequences=True, input_shape=(21, 1)),\n        keras.layers.LSTM(20, return_sequences=True),\n        keras.layers.TimeDistributed(keras.layers.Dense(1))\n    ])\n\n    model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])\n    early_stopping = EarlyStopping(monitor='val_accuracy', mode='max', patience=3,  restore_best_weights=True)\n    history = model.fit(train_set, epochs=20, validation_data=(valid_set), callbacks=[early_stopping])\n    \n    # Store the model\n    models[f'{grp}_{q_no}'] = model    \n    \n    # Saving Accuracies\n    results = model.evaluate(test_set)\n    test_loss_and_accuracy_list.append(results)\n    \n    # Saving History of Models\n    history_models.append(history)\n    \n    # F1 Score\n    y_true_numpy_list = []\n    \n    predictions = model.predict(test_set, verbose=0)[:, -1][..., np.newaxis]\n    predictions = predictions.round().astype(int).flatten()\n    \n    for x_batch, y_batch in test_set:\n    \n        y_batch = y_batch.numpy()\n        y_batch = y_batch.round().astype(int).flatten()\n\n        y_true_numpy_list.append(y_batch)\n        \n    y_true_numpy = np.concatenate(y_true_numpy_list)\n    f1_score_list.append(f1_score(y_true_numpy, predictions, average='weighted'))","metadata":{"execution":{"iopub.status.busy":"2024-02-20T16:57:38.284627Z","iopub.status.idle":"2024-02-20T16:57:38.28513Z","shell.execute_reply.started":"2024-02-20T16:57:38.284975Z","shell.execute_reply":"2024-02-20T16:57:38.284993Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"plotGridGraphs(history_models)\naccuracy_bar_plot(test_loss_and_accuracy_list)\nf1_score_bar_plot(f1_score_list)","metadata":{"execution":{"iopub.status.busy":"2024-02-20T16:57:38.286029Z","iopub.status.idle":"2024-02-20T16:57:38.286499Z","shell.execute_reply.started":"2024-02-20T16:57:38.286344Z","shell.execute_reply":"2024-02-20T16:57:38.286363Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Code to Submit the Results.","metadata":{}},{"cell_type":"code","source":"# # Reference\n# # https://www.kaggle.com/code/philculliton/basic-submission-demo\n# # https://www.kaggle.com/code/cdeotte/random-forest-baseline-0-664/notebook\n\n\n# import jo_wilder\n# env = jo_wilder.make_env()\n# iter_test = env.iter_test()\n\n# limits = {'0-4':(1,4), '5-12':(4,14), '13-22':(14,19)}\n\n# for (test, sample_submission) in iter_test:\n#     test_df = feature_engineer(test)\n#     grp = test_df.level_group.values[0]\n#     a,b = limits[grp]\n#     for t in range(a,b):\n#         model = models[f'{grp}_{t}']\n#         try:\n#             test_ds = test_df.loc[:, test_df.columns != 'level_group']\n#             predictions = model.predict(test_ds)\n#             mask = sample_submission.session_id.str.contains(f'q{t}')\n#             n_predictions = (predictions > best_threshold).astype(int)\n#             sample_submission.loc[mask,'correct'] = n_predictions.flatten()[0]\n#         except:\n#             print(\"In Except\")\n#             temp = np.array([[0]])\n#             mask = sample_submission.session_id.str.contains(f'q{t}')\n#             sample_submission.loc[mask,'correct'] = temp.flatten()[0]\n    \n#     env.predict(sample_submission)","metadata":{"execution":{"iopub.status.busy":"2024-02-20T16:57:38.287366Z","iopub.status.idle":"2024-02-20T16:57:38.287831Z","shell.execute_reply.started":"2024-02-20T16:57:38.287678Z","shell.execute_reply":"2024-02-20T16:57:38.287696Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# ! head submission.csv","metadata":{"execution":{"iopub.status.busy":"2024-02-20T16:57:38.288732Z","iopub.status.idle":"2024-02-20T16:57:38.289245Z","shell.execute_reply.started":"2024-02-20T16:57:38.28909Z","shell.execute_reply":"2024-02-20T16:57:38.289108Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Kaggle Submission Results and Ranking \n#### Note: kaggle Submission was attempted using TFDF Gradient Boosting Model\n\n![image.png](attachment:f387b755-8d4d-4b1f-9be4-77f653246d4a.png)","metadata":{},"attachments":{"f387b755-8d4d-4b1f-9be4-77f653246d4a.png":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAByAAAADcCAYAAAA4EbYVAAAMP2lDQ1BJQ0MgUHJvZmlsZQAASImVVwdYU8kWnluSkJAQIICAlNCbIFIDSAmhBZBeBBshCRBKjIGgYkcXFVy7iIANXRVR7IDYETuLYu+LBRVlXSzYlTcpoOu+8r3zfXPvf/85858z584tAwD9OE8iyUU1AcgTF0jjQgOZo1NSmaSnAAHagAaogM7j50vYMTGRANrA+e/27jr0hnbFUa71z/7/aloCYT4fACQG4nRBPj8P4v0A4NV8ibQAAKKct5hcIJFj2ICOFCYI8QI5zlTiajlOV+LdCp+EOA7ErQCoUXk8aSYAGpcgzyzkZ0INjV6IncUCkRgAOhNiv7y8iQKI0yC2hT4SiOX6rPQfdDL/ppk+qMnjZQ5i5VwUphYkypfk8qb+n+X435aXKxuIYQ0bNUsaFiefM6zbzZyJEXJMhbhHnB4VDbE2xB9EAoU/xCglSxaWqPRHjfj5HFgzoAexs4AXFAGxEcQh4tyoSBWfniEK4UIMVwg6RVTATYBYH+IFwvzgeJXPBunEOFUstCFDymGr+LM8qSKuPNZ9WU4iW6X/OkvIVeljGkVZCckQUyC2LBQlRUGsAbFTfk58hMpnZFEWJ2rARyqLk+dvCXGcUBwaqNTHCjOkIXEq/9K8/IH5YhuyRNwoFd5bkJUQpqwP1srnKfKHc8EuCcXsxAEdYf7oyIG5CIRBwcq5Y8+E4sR4lc4HSUFgnHIsTpHkxqj8cXNhbqicN4fYLb8wXjUWTyqAC1Kpj2dICmISlHniRdm88BhlPvhSEAk4IAgwgQy2dDARZANRe09jD7xS9oQAHpCCTCAEjipmYESyokcMj/GgCPwJkRDkD44LVPQKQSHkvw6yyqMjyFD0FipG5IAnEOeBCJALr2WKUeLBaEngMWRE/4jOg40P882FTd7/7/kB9jvDhkykipENRGTSBzyJwcQgYhgxhGiHG+J+uA8eCY8BsLngLNxrYB7f/QlPCB2Eh4RrhE7CrQmiYulPWY4CnVA/RFWL9B9rgVtDTXc8EPeF6lAZ18MNgSPuBuOwcX8Y2R2yHFXe8qowf9L+2wx+uBsqP7IzGSUPIQeQbX8eqWGv4T6oIq/1j/VR5po+WG/OYM/P8Tk/VF8AzxE/e2ILsH3YGewEdg47jDUCJnYMa8LasCNyPLi6HitW10C0OEU+OVBH9I94A3dWXsl85zrnbucvyr4C4RT5OxpwJkqmSkWZWQVMNvwiCJlcMd9pGNPF2cUVAPn3Rfn6ehOr+G4gem3fubl/AOB7rL+//9B3LvwYAHs84eN/8Dtny4KfDnUAzh7ky6SFSg6XHwjwLUGHT5oBMAEWwBbOxwV4AB8QAIJBOIgGCSAFjIfZZ8F1LgWTwXQwB5SAMrAUrAKVYD3YBLaBnWAvaASHwQlwGlwAl8A1cAeuni7wAvSCd+AzgiAkhIYwEAPEFLFCHBAXhIX4IcFIJBKHpCBpSCYiRmTIdGQuUoYsRyqRjUgtsgc5iJxAziEdyC3kAdKNvEY+oRhKRXVQY9QaHY6yUDYagSag49BMdBJahM5DF6MVaA26A21AT6AX0GtoJ/oC7cMApo7pYWaYI8bCOFg0loplYFJsJlaKlWM1WD3WDO/zFawT68E+4kScgTNxR7iCw/BEnI9Pwmfii/BKfBvegLfiV/AHeC/+jUAjGBEcCN4ELmE0IZMwmVBCKCdsIRwgnILPUhfhHZFI1CPaED3hs5hCzCZOIy4iriXuIh4ndhAfEftIJJIByYHkS4om8UgFpBLSGtIO0jHSZVIX6YOaupqpmotaiFqqmlitWK1cbbvaUbXLak/VPpM1yVZkb3I0WUCeSl5C3kxuJl8kd5E/U7QoNhRfSgIlmzKHUkGpp5yi3KW8UVdXN1f3Uo9VF6nPVq9Q361+Vv2B+keqNtWeyqGOpcqoi6lbqcept6hvaDSaNS2AlkoroC2m1dJO0u7TPmgwNJw0uBoCjVkaVRoNGpc1XtLJdCs6mz6eXkQvp++jX6T3aJI1rTU5mjzNmZpVmgc1b2j2aTG0RmhFa+VpLdLarnVO65k2SdtaO1hboD1Pe5P2Se1HDIxhweAw+Iy5jM2MU4wuHaKOjQ5XJ1unTGenTrtOr662rptuku4U3SrdI7qdepietR5XL1dvid5evet6n4YYD2EPEQ5ZOKR+yOUh7/WH6gfoC/VL9XfpX9P/ZMA0CDbIMVhm0GhwzxA3tDeMNZxsuM7wlGHPUJ2hPkP5Q0uH7h162wg1sjeKM5pmtMmozajP2MQ41FhivMb4pHGPiZ5JgEm2yUqToybdpgxTP1OR6UrTY6bPmbpMNjOXWcFsZfaaGZmFmcnMNpq1m302tzFPNC8232V+z4JiwbLIsFhp0WLRa2lqOcpyumWd5W0rshXLKstqtdUZq/fWNtbJ1vOtG62f2ejbcG2KbOps7trSbP1tJ9nW2F61I9qx7HLs1tpdskft3e2z7KvsLzqgDh4OIoe1Dh3DCMO8homH1Qy74Uh1ZDsWOtY5PnDSc4p0KnZqdHo53HJ46vBlw88M/+bs7pzrvNn5zgjtEeEjikc0j3jtYu/Cd6lyuepKcw1xneXa5PrKzcFN6LbO7aY7w32U+3z3FvevHp4eUo96j25PS880z2rPGywdVgxrEeusF8Er0GuW12Gvj94e3gXee73/8nH0yfHZ7vNspM1I4cjNIx/5mvvyfDf6dvox/dL8Nvh1+pv58/xr/B8GWAQIArYEPGXbsbPZO9gvA50DpYEHAt9zvDkzOMeDsKDQoNKg9mDt4MTgyuD7IeYhmSF1Ib2h7qHTQo+HEcIiwpaF3eAac/ncWm5vuGf4jPDWCGpEfERlxMNI+0hpZPModFT4qBWj7kZZRYmjGqNBNDd6RfS9GJuYSTGHYomxMbFVsU/iRsRNjzsTz4ifEL89/l1CYMKShDuJtomyxJYketLYpNqk98lBycuTO0cPHz1j9IUUwxRRSlMqKTUpdUtq35jgMavGdI11H1sy9vo4m3FTxp0bbzg+d/yRCfQJvAn70ghpyWnb077wonk1vL50bnp1ei+fw1/NfyEIEKwUdAt9hcuFTzN8M5ZnPMv0zVyR2Z3ln1We1SPiiCpFr7LDstdnv8+Jztma05+bnLsrTy0vLe+gWFucI26daDJxysQOiYOkRNI5yXvSqkm90gjplnwkf1x+U4EO/JFvk9nKfpE9KPQrrCr8MDlp8r4pWlPEU9qm2k9dOPVpUUjRb9PwafxpLdPNps+Z/mAGe8bGmcjM9JktsyxmzZvVNTt09rY5lDk5c34vdi5eXvx2bvLc5nnG82bPe/RL6C91JRol0pIb833mr1+ALxAtaF/ounDNwm+lgtLzZc5l5WVfFvEXnf91xK8Vv/YvzljcvsRjybqlxKXipdeX+S/btlxredHyRytGrWhYyVxZuvLtqgmrzpW7la9fTVktW91ZEVnRtMZyzdI1XyqzKq9VBVbtqjaqXlj9fq1g7eV1Aevq1xuvL1v/aYNow82NoRsbaqxryjcRNxVuerI5afOZ31i/1W4x3FK25etW8dbObXHbWms9a2u3G21fUofWyeq6d4zdcWln0M6mesf6jbv0dpXtBrtlu5/vSdtzfW/E3pZ9rH31+632Vx9gHChtQBqmNvQ2ZjV2NqU0dRwMP9jS7NN84JDToa2HzQ5XHdE9suQo5ei8o/3Hio71HZcc7zmReeJRy4SWOydHn7zaGtvafiri1NnTIadPnmGfOXbW9+zhc97nDp5nnW+84HGhoc297cDv7r8faPdob7joebHpktel5o6RHUcv+18+cSXoyumr3KsXrkVd67ieeP3mjbE3Om8Kbj67lXvr1e3C25/vzL5LuFt6T/Ne+X2j+zV/2P2xq9Oj88iDoAdtD+Mf3nnEf/Ticf7jL13zntCelD81fVr7zOXZ4e6Q7kvPxzzveiF58bmn5E+tP6tf2r7c/1fAX229o3u7Xklf9b9e9Mbgzda3bm9b+mL67r/Le/f5fekHgw/bPrI+nvmU/Onp58lfSF8qvtp9bf4W8e1uf15/v4Qn5Sl+BTDY0IwMAF5vBYCWAgAD7s8oY5T7P4Uhyj2rAoH/hJV7RIV5AFAP/99je+DfzQ0Adm+G2y+oTx8LQAwNgAQvgLq6DraBvZpiXyk3ItwHbAj+mp6XDv6NKfecP+T98xnIVd3Az+d/AQpefDocXj9zAAAAlmVYSWZNTQAqAAAACAAFARIAAwAAAAEAAQAAARoABQAAAAEAAABKARsABQAAAAEAAABSASgAAwAAAAEAAgAAh2kABAAAAAEAAABaAAAAAAAAAJAAAAABAAAAkAAAAAEAA5KGAAcAAAASAAAAhKACAAQAAAABAAAHIKADAAQAAAABAAAA3AAAAABBU0NJSQAAAFNjcmVlbnNob3Sn1OSkAAAACXBIWXMAABYlAAAWJQFJUiTwAAAC3GlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNi4wLjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPgogICAgICAgICA8ZXhpZjpVc2VyQ29tbWVudD5TY3JlZW5zaG90PC9leGlmOlVzZXJDb21tZW50PgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+MTgyNDwvZXhpZjpQaXhlbFhEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj4yMjA8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8dGlmZjpYUmVzb2x1dGlvbj4xNDQvMTwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+MTQ0LzE8L3RpZmY6WVJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgrAwxFbAABAAElEQVR4AezdCWAcZfk/8O9uNnvkvtM7Tdu06QXlLJSzXFIBQUT0J8qpeP8VQeEn4IEKigL6ExFE7lPllEtukHL0oPeVpk2aNmlz38fuZo//87zpbDdpNkebtkn7fXGzszOzM/N+dm0m88zzvLZQKBRGVAuHd700U1Gvo1bjJAUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUocLAJ2GywRfXJJq97tt7mRa/j0Bfdgo5RAcfo+dabIuHJqPWsZXymAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAVGgMDOwOJu4UWNAfYSdNQeWYFHK4Zove7ZW1swGNyZ6NgVWrTeYD3rG3au0PO9fE0BClCAAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABChwMAjEyH60gY89nq8vWfOu1Pjus4KIGHKOndaEVhLTm67yezSzrOZOvKUABClCAAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKECBYSewW8ajdYRRAUgNKmqc0DzL8sh7NDNy53zrbdZ61mt9duhKJvhoPctMGRfSvNk8y+ueAUgGHZWOjQIUoAAFKEABClCAAhSgAAUoQAEKUIACFKAABShAAQpQgAIjVyASWNQuRAUg7Xa7ea3PNokhWiVZdX0rTthb5qMl4YgOPgYl8BgKSUAyFISUZoXX60UgGILLGR/ZmAYs2ShAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACFKAABShAgYNAQLMapZmfNjvi7DZo4DEuLg4he5xM22SeBCSttjMLUl9aQcieWZAmABmSoGJIAo6a8RgIBFC6ZQvef++/+Ojjj7F48RJrc+b5jTffQsHkvG7z+IICFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACFBj5An6/3yQpen0+xDscqK5txLgxObBLQFLDkF2BSinRql2VGGNvQUiHFXzU7MdAZycWScDxn//8F955592RL8QeUIACFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACAxZwOp3Qh08CkC2treZ9Gkc0bWcQUqcjgcioIGTXSjIGZFjeEJSyqxp83LS5FA8++NBuWY/WynymAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUOfgGXy2U62dDYauKIiHdKtmMI4ehyrLKGlQEZLWLXsquhYACdUnr1/fffZ/AxWofTFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACFDhEBawgpMYRNZ5o4oqS8ahjPvbWrPl2nQjI+I+dUs918eLFva3LeRSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhSgwCEqoHFEjSeaAKMGIMVBp6Mf0TRdGZCSBdnS2oatW7dGL+M0BShAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACFKAABShwiAv4O3dmP0pMMVbQMZrIHpLopKZLOhwOVFZWRS/jNAUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUocIgLBCX7sVv5VYkvajMZkT1sdJ5dlnS9IRTssZgvKUABClCAAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKECBQ10gJHFEDUBqXLFnBqR5LUDRwUgzBqS18qGOx/5TgAIUoAAFKEABClCAAhSgAAUoQAEKUIACFKAABShAAQpQgALdBUxw0Qo+dl/U9UqWRTe7GSRS5kRHJaNX4DQFKEABClCAAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKHDoCkSyHJVAA5H6tPOhs3o2u5mxc8WeC/maAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhQ4tAVMfuPOLMfItL7eOa+njhkD0qzYcwlfU4ACFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACFBCBSOBxABqOyDoxIpSR5ZygAAUoQAEKUIACFDgoBUJyHhgMBuURMoOJh8Ihc/Oaltb49ifxps/TUvUU0yb/ARfk2zEzMw52m74aea2v/v5g/e2mQwWJE7p6K108b/QpmJE6if0deR81j5gCFKAABShAAQpQgAIUoAAFKECBoRIYZBzRwezHoZLndihAAQpQgAIUoMDIEdDgYmcgYB4aeOyvFTXtCjb+doWuH4IGJS+YaMfsLAdswzwYOdj+FrdtjZDcUfyomdag5OckGDkzbTL7G9HhBAUoQAEKUIACFKAABShAAQpQgAKHkoCVBRkdX+y6bb27QlcG5CCjlt03wVcUoAAFKEABClCAAiNFQLP//P5O+Ds79/qQNSj5u5V6itmJwlTgxqPjh12W4FD2V4OSd2x6zLhNTcrD9YVXsL97/S3iBihAAQpQgAIUoAAFKEABClCAAhQYMQKx4ok6v8fN6ba6+vqwt6MDzS0tWLDg3H77+Mabb6Fgcl6/63EFClCAAhSgAAUoQIHhJeCTwKPP7+/1oBxxcYjTh90Ou11KrcpJo5XVqNmD6+q1LKs8N4SxoTGMoqZeN4Pz82y4uKCrbGvva+y/uXvT3w3NpdDg5YbmLdjYWoaNbWW9Hvi5uSfjCxNO73XZ/p55qPV3f/tyfxSgAAUoQAEKUIACFKAABShAgUNVoHhzGYIBL1KSk+H2eBDvcMAeuY5kN9eQ7HJNKfp6EgOQh+q3hf2mAAUoQAEKUOCQEQiGQvD6fGaMx+hOa8DRKSeMDkdcJNgYvbyvaQ1GrqkN4vktod2CkVqa9cJJDsyScSIPRNtX/V3bWIJ/73gfxT2CkVqa9YKx8804kezvgRDgPilAAQpQgAIUoAAFKEABClCAAhTYlwKxApAadNSb2TXwyADkvvwEuG0KUIACFKAABSgwzAR0nMcOr6/bUWng0RUfbwKP3Rbs4Ys1tQE8V7p7IPKGOV3jQ+7hZvfobfujv2sbN+PF7bsHIq8tuBSzZHzI/dkOtf7uT1vuiwIUoAAFKEABClCAAhSgAAUoQIEuAQYg+U2gAAUoQAEKUIACFIgI6DiPXl/3kqtulxNOCT72bD4p1d8WCqNDnr3y3CnPQXtIxjgMwokwHKE4xIccsPkCSHHZkOjuGko8ejv/LO7Ei2Xyxqi2P0uyDqa/27ZtwYefLETYXoFQsALFm8rR0VCHMflj0NbaibaGJBwxZzacrnE45rjjMHpUXlSvuiaf3fY2Xq78b7f5546Skqzj909J1sH0NyCBaJ9kwXbKd0IfIcmK1Yc2vUNRH/HyvdCHy+WS4PTun++B7m83aL6gAAUoQAEKUIACFKAABShAAQpQYL8J7EkAcvcrC/vtcLkjClCAAhSgAAUoQIF9JdAzOKXlMNxulymLEb3PhiDQEAyZ4KOWy9DSqtbYj7awvA7Fo0OCjhVlFYi3e+DfOT05bzTyR6cgb3RqZHM69uOMjCBuWy4b3dm6ApKd+3xcyIH296VXn8Grrz0vQcYKCasGkJXtxNRZORKI9KO2Ph6VLZVISgjB11SJog3V2FLix6OP34P8iVNw+eVfx8xZx1tdM4HG6Sn5+P3GRyLzrIDkvg5CDrS/HTLWe3t7O/wxxv7UA7eCkRqk1PW1OZ1OJCQkwCPjOlhN+3Sg+msdA58pQAEKUIACFKAABShAAQpQgAIUGBkCcddff/0vzB3RclHiiSee7Peov3bppcjMSOt3Pa5AAQpQgAIUoAAFKHBgBLQsZ3Tmo0NKriZ43CbLzTqiRokRFnkD2NHWCb/GC+PsEnyUYNTOB2x2yQwMo63Rh7rKFnQ0BVBXXY/k5ERUVtWgM2TDstUlqG8NwBYOICMt0Ww6J8GOC/PtWFsfQt3Oyq9FTV1BrpkZ+2ZMyIH0d/myhbjvr7fjhZeexqfL1sPjCiPNnYhln5Zh3inHY8nHm2ELuVBVV4P8/FTUVrZj0vgpcCU4sbWsEvGeViz88E188N/XMGbMGOTmTjD9zXan4/wxp2J9UynqOqWj0ja2lpmg3vTUSeb1UP8YSH+9Xi8aGhpM8DEY3BUQHuix6Ht0G/rQkr1WRuSB6O9Aj5nrUYACFKAABShAAQpQgAIUoAAFKLBvBOobmuQm9UBX1SSpnmTGfbTGfpQb2vVm9uiHHgUDkPvms+BWKUABClCAAhSgwAERCEpZzfYOb2TfVvDRymrUBZtagyhp8sLX1ip1Vm1wSMnNsPwn8Ub5KVmP8jCBSIlbNdQ0o6x4G0qKtiAx0Q2XxwmHZFKmpKUgZA8jKTkNy9dslszIIMaPTjf71X2dMjYOa+uCkSDkhkZgmiRLaoByKNtA+nvPfbfhz/feJuVFO3H4rLEYk5sBR1wSitfWIr8gFy3tOxAMBpBgT5RAmx052W55pKDTb0N8UpyUZXWguLQSuWPTkJDcgQ8/ekMCsC0oLJgb6e9J2UfsFoScmpQHDdgNZRtIf5uamtDS0hIpsbo3+9fsSA1C6rPb7d7v/d2bY+d7KUABClCAAhSgAAUoQAEKUIACFBgagT0JQA7tFaCh6Qe3QgEKUIACFKAABSiwhwJeGefPano3mkeChVbzB4JY1+JHpQzwWLpiJT56+p9465l/oFWDVVp+VR46KqBUZDXByJAEIoOSFtnYUI/x40bJ2IFeNDc1ynM7AiEfJk+ZKMFLOwJ+L8orm/H0Sx9I5mWntTvcfHT3sSafKwlElg3VRF/9bWyswx1//Ame+MfDaGxux5byaqxbX4n0dA9yM8dh6szJSEpMxOisTEwcNx6lJVXIn5aEbVu8SElNxfr1FVi0qAQBX7qUbI1DQ10LnFKGtq05jHvvewL3P3YdauuqIl25YfoVkWmdeKHi3W6vh+JFX/3VrMW6ujqT9TgU+4rehpZx1W1HZ1Puj/5GHwOnKUABClCAAhSgAAUoQAEKUIACFBg5AsyAHDmfFY+UAhSgAAUoQAEK9Cng83dCy3NaLbrsaktLKx568Cl4pRRrdm4OGouL4SvbguaONkyYNQt2l6cr81FSH7UUqz4CnSHUS7nVJKcLO7aVyWYlJVKyHhHqRFtLM4Kyry2yneI1a1GzYzsaZd0ObyfGjs2WMQTjTekNzXpcWCnvkVbnk4CmRDdnZg5NKda++tvULMHH/7sGZVvXyTiPMpahZHm2dXRiy9ZWZKQnyJACKUBCPVJTHShdV4etJe2SybkJb71dgXVrt2P50m0Sfu2UEqypWP7pOtTUtOLiCy+Q9crx/rsl2CTByqLiTVi+fDFOPvEMGS8x0fRXsx4/qltp+lsvJVm1vzOGqBRrX/3VwGB9fb0Eh3cFgM1BxPih6+u4kDoUgza7BKv7a/oenwS4NRNS19dM133Z3/6Oh8spQAEKUIACFKAABShAAQpQgAIU2D8Ce5IB6dg/h8a9UIACFKAABShAAQrsS4GQRAx9ElCymtvlNPX4rdcvvfQmWuub0CxZgMVtHfBLmVa7OwU2CSj5232SydiGoAQwA1JuM6DLJGbY0tAiJVjrZAzISlnmw/bSWhkP0Aa3BBebGpuQN34CNmxYB49HgnvhIHInTcXmjcVolszDr15yvtn1LAk2np8XwotlXUFIfb5oShh2CV7tTeuvv/c+dDPWF62X43ZI2LQF02eOQUpVC06cNwZjxiZi4X+XSfnYVHg7U7BsWZUEYjvQ3CrBOxnPIBi2SbafjG1gt2F7/TZ0SFBvar4HO6rXoSXUhoAjJBmUWSiYKiVZ03bgXy/+Ft++6g7THQ02njvqZLxc+V/z+uWq/+Lz40/b5/1tbGyMBBNjuYblO1JbW2vGhmxra0NOTg46tN/NzeYtKSkpGDduXKTUam/b0YCl7iszM9Ms3lf97W3fnEcBClCAAhSgAAUoQAEKUIACFKDAyBFgBuTI+ax4pBSgAAUoQAEKUCCmgGbH6fiA2uLi4kzGn7Xyoo9Wo2xdGRpr6lFVXoHmylokO+JlbL92GesxjJUfLEKyDBvpbPUhUN+CcKsfoXY/whKwbKiogE9KtLri42CT4KNENeGXLMdQpw8ZKQlITnCaMQKLNhZJ1qMTRZs2o3xHjWTXBTBzxhRzCJrx+FyJZE/ubJoVqIHJvWl99fel1+/BhwsXSuA0iAl5HuRPyUR6RgKmTB0LSWuUoCNQUlqPFGcO6spaEfQ6EHbZ0CGG3k4/bPE2MZRVQ3GormyS8R47cfr8IzFqgh8lZdUS1MzE5uIdqKpoRXuTA/5gI7Zu3Yq5x55quqRBuRe3v2em9YdmDu5tFmRf/dUxH3Wcxr6aHkOFfJb63dDg4dixY5GbmxsZJzJeBpDXDMqysjIkJSVJRmdCzM3ptqLHhNwX/Y25cy6gAAUoQAEKUIACFKAABShAAQpQYL8L7EkGZP+1lvZ7N7hDChzaAkVFRTLe1OLIBcFDW4O9pwAFKECBgQhoZps/qvSmS4JJVivauAWLFq+BIzkFowoKYIcE1bZJRqPGKqUsqVQZhV/GbWwLdKJdAkudEid0Ojxob/Zi8ZqVWLO5GE3tkvUn5VizE9NROGaSjPcoWZENTViydAmSJWvO6/MjJSMblVU7ECf71mDZhx99ijWrN1iHgQsm7jrt/PdWLfHalREZWWEQE331d13RUmza8j7GjstC4YwxmD59HKZMmoQEd5KMjejFli3bsP7TzTh84iyUrtmBkL8D8TYv/I0dGJvkwdiUVCTY3QjLOJnt7S2Ic4UR7Axg6ZLNeOPlSqxe6pOxIYtkvMyAjB9pQ0aGEyuXleKpfz2Od997I9KL80adEpl+peqDfdZfDTzq+Ix9NfXS8Rtd8nkXyHcgLy8PWVlZZp5mM2rgWF9PmDDBlFbVYKpmRvbVdJ/RQc+h7G9f++UyClCAAhSgAAUoQAEKUIACFKAABUaGAEuw7oPPqaGhER9//LGU81puylwdccQcHHXUUZg1a2ave3vn3fewbt26XpfpzCPmzMEJJ8zrtvzRxx6PlMvqtmDni88uWIBJk/J7W8R5QyygWQB/u//vJruhv00ff/xxOOrII+Xi5xa8/MqrkdWv/sbXzcW/fz3zLH7ykxvM/Esu+R/8+le3RNbhBAUoQAEKUCCWQPS4j5rh5nDsyi58+cW3sLVsh8ledCV44A0GpPSqB+UyXmNKcoIZozDRlYCtm7dg7cq1SExNxezD5sjySnT4AmhqbUe9lFv1uGvR6e1AQIKLHRK8jEMATtlN2fYq1De3o7XNi9FZKXBL5tyOHdVolWzJDz9YjFmzC81hf3GKAy9s2VUi9l+bAri4YFegNFbfepvfV3+fef4BZGS7UViYC19nA1xxThmr0iEG1TIWZA6ys0bD7WpAwN2ImqY6HHHMTBw9Pw8NO2qRlu5GpZSd3bp9B+ob6rGltgWrttWjPeTB+nWlOHLuWMw9KRlrVwTR1BDA1MIx2CJjQSamxSNVApGvvPkw5p96ljnkC6Xs6kuV70cO/7nyd/CF8adHXg9moq/+tkh2al9Ng4+VUkJXzzUPP/xwc/6o2YvFxcXQm570PGb27Nkm8KjjO2ogcsOGDcjOzsb48eP72jR03zoepLah7G+fO+VCClCAAhSgAAX2u8DHH3+Cd+XaVXl5OXJH5WLe8cfjjDNON+NBD+ZgVq9Zg8WLl2DlylUYL2Xf9XrZSSedaG6Ssraj5yMPPvRwv9dYEjwJuPLKy623mWe9gUpv6P502TKp6rAVhx02G8ccfbScAx3WbT2+oMBQCZSUlMp3bpF855bL2PIpOFqu/x4v//9IS0uNuQutXvKR/H9q6dKlMjRCI4488ggcf9xxmDx5Usz3cMHwEnjzzbdQtHEjRuWOwkUXXdjrwQ30u7F9+3Y89/wL5mbQz513bq/b4kwKjGQBBiCH+NMrLt6ESy+7wlzosTb94r9fMpM/+cl1+Pa3vmnNjjw/+eRTePvtdyKve05cffXXuwUg9ULSz3/+y56rdXs9Y/p0BiC7iey7F52ScXL77X8Y0A7+94brTQCyqGgj7rjjrsh7Lrv0ayYAuXjx4si8t99+VwKQXS81w+DZZ5+PLDvllJNljCYpI8dGAQpQgAIUEIHoAJXTsev07tMlKyXLrUGy/5xaT1TGbrRL6VTAnuhEa2MDkqXUqCvBge1btmPDJ5uQP2EibFvDWPfpEgkw2pGUmgxJfZRsuFb45JEoAUy3rJ+TmAy/jAXYKpmRxSVlMm5iCAmSXWeT97hl3MTsVDeSEuLlj7JN8gf5CsydO8d8Thfk2fDCzrEgNzRqCuaetVj9XbX2A9TUlCExJU0yMW2Ihxttba0SfA2bi2VbSisk89OP9OQsVBS345iZczB/7kwU5Hpgmz0GcZ44KacqGaGSKelvasSaTRV45o2leL+0Eu0dDrS22JGZkYYZMx1iEy9BzXokZYRx1HETULyxCh3BEixZ9jqOOfIzpmPnyViQL+0cC1KDfnvaYvVXL7LpmIyxmgYXtayqjvuo5VbfeecdM+5jWlqaXCBJNWM5WmNBjhkj/ZfgtV4Qqa6uNuNEaplWu31X5mrP/ei+9Rg8Ho9ZNFT97bkfvqYABShAAQpQ4MAI6LnE9Tf8VK5HPNftAB5++FGceOIJuP9v90ZuRuq2Qi8v7vnrvfj977vGzI5efMwxR+O+e/+K9PQ0M1vHph7INRYtKR8dgNRzmCuu/DqWL18R2fxLL71spr/3ve/g2h9dE5nPCQoMhcALL/4b11xzbbdNPfjgwxg1ahSefupxU3Wk20J5oUMifOWSr8nwDdsii56X4JO2u+66Axec/7nIfE4MPwH9u+rnv7gFr776mjk4TTbqLQA5mO/G9h07zDXiU089BQxADr/PnEe09wK7rlDt/bYO+S3oXVqfv/AiudDVBv1H48orLjd3vHzyySLcetvvzAlUdlb2bv8waZkrbT+7+Sa5OJSzm6OWyYpuDQ0N5mViYiJu/91t0Ysi0zNmzIhMc2LkCFx26aXmbsC6unpcLwFrq+nFvZtu/pn1Eg88cD8DkBENTlCAAhQ4tAV0DEcdU9Fq0dmPK1etgzfgl1KZPtjCAYSkbKhNgkY2iSnFS4Zia2uLZEO6JHgYj4K8cUhO9sjFn3SkpaahbNs2hCSgGGwLQMKOyJA7ej1xAaRkZkv9VJsEPWWMSAnstcq2PbKNOdMk01GCn62NtUiVMQTdHpekSTqxem1RJAB5kWZBlkkEVFpRk82MP2m32axDH9BzX/39dPk7ksE3AfGOAGql5KjNFpYhK+PkrnovmltbkZIqGaA+oL6pRcaEzJAxL+3IkmBcMCRZoQ4bnDLmYzzCsn4i2hMD0o94TM9Px6trKpGVmYAzFhRKINaLSdMyUb5lh+ljZo5NbjyrlzETPZI1mIq333smEoD8/LjTxCmIBdknmL7psQ9lf/sqvaoX7/ScUR9z586FjvHo9/tNcNEm5hpsnD9/vsmI1ExHDUjqhTv9ozpFyupqtYZJUrpWx4Psq+kxWAHIoehvX/viMgpQgAIUoAAF9q/APffcGwk+3nzTjTh8zmFY+MGHuP/vD2Dhwg/NzfG/i3FdKvpIdX0r+HjTTT/F7FmzTNWwp55+GkuWLMU3v/Vt/PMfT5m3JCcn4y93/1/027tNv/raf/CKVJTKyEjvNv/Sy67EqlWrJOvxMHz3O9/C6DGjsWLFSvzsZ7/A3XffI1UwsnCp3PzNRoGhEHjvvfcjwUcNbmtAXquDPPzwI9BKd1+46Evy/5X3ugXoG6WqzPkXfMEMg3Da/FPxpS9dbG72e/nlV6DJKxrMzM3JkQzK44biELmNIRbQz+mG/73RXPfva9N78t3oa3tcRoGRLsAA5BB+glriQYOPhYWF5i4wx84MBC1rpRdvfnrjzfjP6693C0BqNqNmTWq7+OKLoEHF/tp2KQumbfLkyfjsZxf0tzqX72eBi794EY6fd3yve50xvasMXa8LZabeOfPeu2+b8R/1wiAbBShAAQpQoD8BvTPdag753aHBJW11NfWo3tEEb5uO62iXcqkuCS41m2ChW7IhdT1vQCKRrZ3o7JBsxqY2ZKRlwS7r2iRG6JTgYbOvA065CJQiAbmGmioEEtzwNrQiVZ47WhuQKUGrreVVyM+fJEHODrTLAJJOhx2eJAngdbSjQYKRdVKeteEL5yA9Ncnsc5pUIypq6jriZzcH8MUpgyvDGqu/rW11SE6VsQx9SRI4bcC2shYJcHYgLdOFdAmUJku52aaGTtRWN6KqugbjxtgxzjMaEnuV8S9tKFlbjEkTspGYnoSglJ5dtbkK69aXobrBK34dMq6lA9Xb5cAdITRLuVlbKAE11ZUoXt+MUWMScewJE6TUqx8bypaiYnspxo7JN/3VrMDAzs9Ij90elaHapdD3z1j91exDDSj2bHrho1WCrZr5qOtotqMGI/Xz1sxGDTLm5+eLR7LczDTOjB+plRa0lKpmO2oJVg1IagByh9yNO2XKFPPenvuxXusx6H70vFf3sbf9tbbLZwpQgAIUoAAFDqyABkvuvOuP5iDu/etf8JnPdJWZ12FltGSkVv/657+ewTe/eXWfFbj0PONPf/qz2c4Lzz8bKYd67LHH4KyzzsTpZ5xlgpAbpZzh1KlTzTlJrGtdel70h53VpL7z7W9FgLZtKzfBR82KfOzRh8zNVLpQA50T5aZ+PdaXXnqFAciIGCf2VuA//3ndbEID81deeXlkc/PkeuCXv3wJln76qSkFfMK8eZFlzz33vAk+nnPOZ/GnP95pbgjUhVrO2CE3C2qm8RNSJY8ByAjZsJnQUrnf/38/NMfzja9fBf2cNeO6t7Yn343etsN5FDhYBBiAHMJPct269WZrehJlBR+tzeud59o0GzK6NTY2mpcaeBxI8FFX1otB2saPH2ee+WN4CegYBntaMkFT9LWOuLYJE8ZLFuSP8fgTT+LFF/7drZNXXfUNE3z+/AXnmxMVa6GWctDxDj7+5BMZv6nIXDScI2Md6F1V1hhN1rr6rKVJ3nv/fRkDaqMZH2HM6FGYOm2qnCx9CXkTJkSvymkKUIACFBimAtHZj9E3r2xYX2zKY8ZJUMknQaJwnEOy7+wISyakv1OCalJCPFOyAG2SzQiZpwE6h2QB6v0v7abcqluqrzYjELLB39KMvHGjUFHjRbqs7pAgY3JiAiSJUkq0BlEpgS1nbhZamupRX1cFhyxIkzJauaNHwx7vQrmMCakBSG2FaTYJQIbNdCjU9WxeDPBHrP5u2boRLY12VFc2yhiQkskogcVAIFH6lSjBVAeagw2IdwWRmeNGQcFstDfGI9ueImNEBlC6ZRsqtlViYm6yBGPtWLTkUxRt7YQnORUN7VWSFRmHKdNzMSpnHMqr6+BtaYMXbXJxywNPQof024a66mZsK22VoOw4bClbYQKQ2iX9THYFIEOSnTnAju5cLVZ/tfJGz1ZTU2OCjwkyDqdewNPAowYi9cKfZikWFBRg7dq15m16rqplYTXjVZsGEfWhQUR9f4Z8N5bJzXUTJ0402ZNmpRg/9Fisc9+97W+MXXA2BShAAQpQgAL7WUDPA7TpTfZW8NE6BB23UTO4NNNr4Ycf9hmA1IvxerP+ly7+YiT4aG1n0qR8U3aytLQUzf2Ma63veU2yH3VdvV5yXtRYaTqWnrYzTj8tEnw0M+SHFczRgJCes7hcLmsRnymwxwJv7RxKS4Po0U3PheefdmpXAHLpMlgBSA2eP/Loo2ZVvdYX/Xebzvzxdddi7FgZEkGqt7ANPwH9G0n/3bnzzj+YobV0LNtYbbDfjejtaPUaHQ9Sr+021Dfg6GOOwvmfO8/8Oxy9HqcpMJIEBnkJZCR1bf8fq94Fpm3d2nW77byoqMjMO+20+d2WWdmM+fkT5YJgGFVVVZKy32oGHo415k50AFJ/gW2TEmkORzxLcnaTHZkvVq9e3a2OuJ6UaMkQPVHu2bTeuAY7rabB7f/5yletl+Z5zZq1eOGFF80A7vfde0+3X1i/u/33uPfev3Vbf8OGDeYPCJ1/z1/+jAULzu62nC8oQAEKUGD4CUSPLajBRquVlJRK+c8OebSZgKDP1ybjDTtMgLGz0yfBpq7Myc6gZAU21KNZxnPMGTsaNfUyXmBWDtxJCfDaJsDXUIuq2iY0hXzyR1CzXByKx1Qp0elr90mFBwnNSaSvtcOP7ZJxedKc6agol8Ck/OGdmpYuZU874LA5Ub61GrMLJ5lD0z/eJOJppq1MSOuYB/Icq79VVRVobAjA2xGWkqiNmDDJLWNf5qLd24I1K6rlWD2SfRhGrQRRayrq8IXTz8RkyQL0uOMwSzICC0aPQbIrjBZ/B9Ilg/MoGROyqHg18qSsarZUsigszMKydYswefwsjJVg7A7Zh6/dj7nzErC9ollKsrahYFoWRmW7Ud9YEulK9GcSfeyRFfqZiH5P9LY0gBzdtBSqBhw1e1EzGzULUs8/1VvPHbUEq87TC4B1Up5WA4yVlZXmBiW9EKefmS7X7eq6mkGgwUoNYOr4kX216GOJPsboY+/r/VxGAQpQgAIUoMDwEyiVagjaLrzwAvPc84cGADUAqQHBvpp1Mf6iL37BrKbnInodS89XtFrYQG/g1utfd971J7ONa374g24BnPNl3LzPyUX63poOcaNNb/pn8LE3Ic7bE4FFn3xo3tYzkKgzq6qqzbKcHBm6YmfbXFJixn3UUq2aUKLnyXpNWKuJ5OdPNENy6feabXgKpKXJUBtvvRG56bKvoxzsd8PaVqvEA676+tXdxrHV68GPPfYE/vH0k5g5k8OtWVZ8HlkCDEAO4ed12GGzzUDD+o/Dr399K66++hsynk6KGdPvxz+5wezp7J0lK6zdWsHE0tItOHX+6ZFBiPXE6Mwzz8CNP73BlMKy1tdnLS2h7W2520b/EdKTN216J8Y5n/0srr32mm4nYmYhf+w3Ab3gu7aXILQGlKf3U4K1t4NMkIyF3pp+R3SMJm2r16zZLfio5dWsPwR0cOv/94Nr8MrL/zYXFfUYo4OPepHxcPn+rly12lyU1G1+57vfx4rlS82YUPqajQIUoAAFhqdAKLxr/Ee7XYN7XW2LBP0am71SBrVdApDxJrtN4kpwOWWUw7BDSm8GJEMxCQG/V7IcXRJcrJc/hGWMRMmW6+x0IuyQEqytzXA73FK6tBU7tq5Aclw7agNOeW8Tjjtiqjw3y/iTnXDJWIsuuVvXHWeHW3aiJYTi7A50tHUg1OrH0o8XY8FZXWOZzJAUyhe2WEc5+AzIWP2tqitGU9sWuZFL+phgw6aNdZiY70KHVzIZE+2SremWAKxbLFpQVCrlZOW4kjL8cLrSkSBZoG3wy3G7EfZ1SonZZOQV5GP6pBR8tGglzpCgZGN5ALPmzkBaXDLC7ha5gCUBQBk7UgN+fq+MkzlWApVyjSEgn8eWymKrg1LWdNdnEn3skRX6mYh+T/S2ooN+ugkNFOqY0SVyceOdd96BljHTMqs5Mo6Mrqvni7qOZkJqoFLHINfzCL1oolUS9NnpdJrleoFPsyl1vpZiHUwAMvoYo4+9n25yMQUoQAEKUIACw0zAup4wWcaE7q2NGTPGzNbrC321qsoqszgxIRE/uvbHeF6ye6x2zDFH4/vf+y40o7K/9orchN1b9qO+L9YN/Lrs/vv/rk8mO9JM8AcFhkCgt8Cjblav8z766GNmD0cffXRkTzUyBIQ2HU5LEwp+JdeN9WZAbXpNTsuy3nD9jyNjq5sF/DGsBKyKL/0d1GC/G9b2NJ4watQoPP74I5gxfQY+WbQI99zzV6xZsxa//s2teOrJx61V+UyBESXAAOQQflz6D8wrL7+Ia350HR548CHziN78L35+824ZZdt3llO1gojzjj8eNbU1ZlxIzVzTMpr6D4zeaWG1beVdAUgdO1L/YTrqqCNNwEuDTH+99z7z/t/99rY+T8CsbfF56AV0cHV99NZKS3ZdkOxteW/zbrnlFzIQ9Q9w5FHHRhY/8MD9ptyJNePOO/9oTZqsyIce/LsJHOpFw4u++GUTVNTvi9aT1/KqOiBydHvzjf9ICbY0aE3zM88621x81guW69dvwHHHdZUPjl6f0xSgAAUoMHwEwlExvK7swq5j215dImMVtiEpJUFKrnZIJlwAoTivXKFxwO2SLL2WGtQ0xMlLhwTs/Jg5Q7IfqzfCI8HK+poWyYBMRHq8DSvXlmGCZDr+6gdfk1KkAbz2wWL8/tVVGJUmJTzRjuzMrjLyhXIX+/aqHeiQu3i15GlLfaOMBSmZkn4f1q5fFQGbkaFZml3Zl0VSunSwLVZ/t22VMrNht9xF3I6EFJcEHQGv9Bv2EMZOdAOdIaxfW4dRo3MR74xDiZxPzR43TX7nNWHr5jIkuhPQ1h5Ci2SCNle1YGx+G0Ji1tjqxcmzC7BZAq2dcua8vbYME8dnIi3LjfaGRCnl1YY5x4xBuYxnKfFY2J2tWLp4JXBFV8+iP5PoYx9ov6PfE72tntmF2RL91OBiWN6g2Y06BrlmMmp1jYULF8q5ZbG561/X0SCzBiD1Aoi+1vX1oeejug9drhmVejFEsyX7a9HHEn2M0cfe3za4nAIUoAAFKECB4SWweXNXRQc9R+itjZZS+9p6uwE7en0rk/IHP7zGXOvS61iFhdPMuI9Lliw14zM+/tgjOOGEXWPlRb9fp/XmqDvuuNPMvuaaHw74pvsPPlgYuTZ37bU/6rlZvqbAkAroTX/XXXe92eZXL/mKDIs0ObJ9HYtd27vvvotHHnnUTOv1Nh1rVauRadBSz891vFVm6hqeg+pHX9+N6I7qv4WTJ3fd9LHg7M8gPS3NJJxo1Tv9dzBWcDN6G5ymwHATYAByiD+Rf/zzX/j00646+T03/d77/5W6+Z+RoGFuZNH8U09F1t2Z5h8RzXi0xunTE70vffkr5pfQL2/5Fe6SGtNW++53vw3NpNSLQpq6rxd69GLTW2+9jau/+W0888xz0LtstL4+28EvoL+AogOKV1x+mcmA0CwI/T7pLywdR1Lbmsi4T91ryt962234woUXYsaM6Vi65JODH409pAAFKHAQCeg5gNWigz/jJyciKBmNgM2U+NGhHoMyxl+8ZOTZJCs/Z8JoGRPRKUvjMCYvXwKRGhiMkzEhgyZjMhSyI+iTzL/3KnDJ58+TMQ4bkZXqxLjMsRjj2oDq1koceexEOAI2+EIt8HtqzRiLCZ6ABOXq0Bn2S9ZhouwrLEHKBOsQzXlL5MUeTMTqry2+HXHBMNIypcRWkmQ6uuKw8B3J3stJwrRZmfKcLmNa1siYj25znIvWFmFiThaOzUtEU70XoQTN3LSjZUcL1pdVoSm8EgXjUlHb3CHByHFIS5ZgZlwKarfVISyZpC21rZgld6Zu3VGJDeurkJ+XhZTEJIwaPxrrN26L9Cz6M4k+9sgK/UxEvyd6W9FBP92EXqjQDEZt0etlZWVJlYwJMo7IInz00UemzFNZWZlZZ9OmTZg1axamTZtmSqHpuYOWgdJzTC2J1tTUZLInzUb7+BF9LNH7jj72Pt7ORRSgAAUoQAEKDEMBDYxoi5X1o5UWtPV1s5Jer7CW603RP5UqX1ddeYW5YV6X/fKXv8Jjjz+Br37tMqxds0rGoe69AtRLL70swZltUqoyH+ede47Zb38/NKhz6WVdd4T9+le3mLKX/b2HyymwpwJ63vvTG2/CRx9/bL6n113XPeBtlWXV73FBwRTc/7d7kZeXZ3an31VNHtBre3/729/x/e9/d08Pg+8bhgL9fTesQ9abM6zgozVPs8S1Ap7eKKole7V8LxsFRpoAA5BD+IlpxuLtt3cFCn/721tx1plnSmmrZJPF+NMbbza/SL7//R/gqacej5zA6T8cvf3jof/gPPTg/fjc+RfizTffMgFG64LObLlQpI/opss0gHnTTT815V8//PAjBiCjgfbj9KxZMyMnEdG7tYLL0fOGYlrryEc3LbUaqxVt2GgWnXbaafj5L26JrKZBa31o0xN6/YNAx3nQrAg2ClCAAhQYmQLxEoCLD0vpUanQoCFKDTrK6YJ5QKKRNi0NujN46XAkSNaia+fFIJ8ELANSQtWFxjYnxubmoENKrj77+hpkpLmxfnsjZkxIwPvF63DmZwqQ7nFL2VGnrB8veY1BCWjKc6fe6OKSQGSn7C8oJV4D+xxx86Y6TJ3pRGV1PapL7NLnTiR4MqT0LCTj0YOWtnakZiViS3kJGuvrEZCSscvLSlCYMhGTpkxAsmR82qrjkDwqHi0+GdNRxm5JSHSiQbI8iwLV2LyyEaeefQzyCnPh8/pROGMKdtRuRUegHf5ASLIu3Sgvl/XKqiXz07XP+9vbDqxzxehlWpIsNTUVZ511lmQWnGDurNZsSC1hphf+NMj4yiuvmOClZj5q4NG6iUn/2NVMSDYKUIACFKAABQ49gUmT8s1N8VpNQa9z9GxNTY1mVm/LrHWjs3XOlzEav/H1q6xF5hz151IpbPmKFabE4PIVy3HCvN2zIANyMnfXH7vGfvzhD//fgDKAyssrJKh5udnX16+6Epdc8j+R/XKCAvtC4M67/miuq+n5s17P1fPv6JaQuOuGzL/c/edu1w0LCwvxx7vuwDeu/hb++98PGICMhjsIpvv7blhdnDq1wJqMPOu/oTrkhwapew7BEVmJExQY5gIMQA7hB3Sf3KWi7c47fo/Pf37XIN06SKyWUT35lPnQes7Ll6+A3sHQX9M70q27HHSMSD3566+dcvLJ+DVulTvcP+5vVS7fRwKXfOV/TJnTfbT53TbbtPOuxN0W9DKjuqar5MO4cWPxxuuvmZK90eMv6Fv0guRNN//MnOC//NKL3TJ2e9kkZ1GAAhSgwAEW0KCTlWmmz1YQamLWOHg72mGTcRltNg1E2uGTskBOyZTTdQKBTgnShSXYqKVcZFxICR3q/8IOyYnU90ggsbRkGyZ4XDg6KxlH5R4Df0IcRpduR4UErcLryuGJT4FUc0VCXJIEOyX7zi5BPNm2DAkpmXQylqTTL8EsH+LcaREl61gjMwY5Eau/4/I8UsKoE/nT8lBZ0YymuhYZAzGApGQZB7LVgXpvM2YePgY7KuLw6dJWyc70oMkbxNtrKpCT2IITj8pHs2RtNjp3YOzkTGxeWo1XF69H9uGTkTYWSJNMz9XLSpHiTkLuhCwpb9uAVnn/+nWyr6p4bF69GbUNtcjMdSFLMgitFt1f67Oxlg3kOVZ/NbAYnXk4kG3peeX06dPNY9u2bXj44YfNTXGaAamZklr2SYOSGnSsra01Y0Tqfvpr0evsbX/72xeXU4ACFKAABSiwfwSsa1AV27f3usPanWXaY40Rab1JA5Q6htm5vWQu6sX1U089xSxfuuTTXgOQL7zw70j24zmfXWBtNuazZlxe8tWvmczLz0j1sBtu+EnMdbmAAkMhoCVV7777HrOpRx55sFtw0dr+OBmuQpsGGzUDsmc7/vjjzCy9btze3hEzG7jn+/h6eAsM5Lth9SD6byprHp8pcDAIMAA5RJ+i3imudyNo05Onnk3LSMyff4q5G2bV6tWRAKSWudI7GDQ7LvrOMH2/XnDS+db4kNY2dV96wUkvIvVs8fH8SHuaHOyvp08v7NbFxx9/RMbx2v3uRF3JrtkuO5ue8Giw/LprrzFlg1etWo3nJYvXKo+iz08+9RR+JOMrsFGAAhSgwPAVkNMFK5GxW8WEDTtKUVlTIdl/XWU5XXquIVl/jqCUWZX36N3k+ntBg40hGdvRK2M1xjvdmhwpgctOCdqF8J/XihEv5yo5njgcO34aPtm6TiKLIWzsqIXdE4+t1dvhbvFK6VIHkh1udPrc0NzDkJRx9Xd6JchnQzDsQ0ZmTgRwXX0oMj0tVXMzB9di9Tdvwni0+rcjIytT+uRFZlaC3HkcRsn6Fmwp2SQZjhmo3NaE+vo2Ca0moLk9CVsaazD7mNl48u1lWLOtAuNlvMyS6gqsKm7E5m01aA0GMEvGfpw4QYKvTZ2YPC4bfil/kyD97ZCM0apyB8o2ehEQr04ZCzK/MFmCnPnIzMiOdKp7QC4ye8ATsfq7JwHI6J3qnbR6IUTHjhw7dqzJetSb35qbm00mrGY76HmodV4Q/d6e09F/LO9tf3tum68pQAEKUIACFDgwAnkT8syO162V879e2ocLPzJzJ02a1MvSXbO0zKQGILXSQm/NyurpeU1M19Xz1TvuvMu87ZoBZD/q9bPLr7jKBCznHX88/vTHO3e71tbbMXAeBfZUQMsD/0JKCWt76MG/46gjj+x1U5oIoK1dxpvvrel33WrR1+6seXweeQID/W6MvJ7xiCkwOAFGqwbnFXNtHXdHx8vRizQVFduRnp6+27pbSsvMvNFS09lq+kvqqaeeNmUotBZ+dNP6+Lo93W5+/sTIorMXnGNOpv5+/304/fTTIvN1wsp8POmkE7vN54uDS6C1tTXSIS2VpsFE/b5oe/ed97rdNfjkk09jydKlJotBs3Ev/uJF+PsDD6KkpBS6Hb1b8Qc/+D7OO+9c/OhHP8SMmYdFtl0vJerYKEABClBgeAvYJbsxJKVPtYVCYQkedR3vWfMvRcm27eampaBkOWqoLygBtYAE5zo7u4KPmu2mNzXpuI9hXUe21dkpN0d5Jfi4+H34ajvQHh/EosoqnDTtcAnQpeGDjRvw+vIieHImY82Kail7OgVp2VK2MyiRy8SgCWrqH9B+X7wEPPXYgOxxs7sOSn5GB6hMymVkycAmYvW3qcqNT5aU4cTTwmisbpUxLZ0oqWmGO9GFWYdNkWzOTSgrqZNRLseivd6JomXrccSMbJx9wjTUVtbhtcWfYked9FfTQP3t8Dgc8IfjZOzHfLy7sBiH5U3C6g0VqJHMygVZs+X3aB2OnDsa4/IT8NwTKzGrcBKOOiEVK5dXIit5141A+plYTY99sC1Wf+Pj481FucFuL3r9mTNnYvPmzaYMq974pt8HDTyOGTPG3LldXl6O6uqu6gnR7+s5rcditb3tr7UdPlOAAhSgAAUocGAFpk7tytL6xz//hauv/ka3qlwaNHzq6X+YAyzopWxg9JHrEEKvvPIq/vP6G7tlQep23nnnXbN6b5XC9CbpyspKM1TMZ/vJftQb/L/17e+aYOdhhx0mY+n91YyRHX0snKbAUAp88MFCWMMg/eXu/+s1IcXa33i58U8TSXQMyI0yHMLUgu7lNrX0qrbjjptrbgK03sfnkSkwmO/GyOwhj5oCAxdgAHLgVn2uqXd+n332WXjiiadw400/w3333hMpXakX2u6972+m/Kpu5IQTdtW0P+OM000A8v6/P4BTTj0Zxx93nLnrXE+wvv6Nq80+Tz9tvsmGtA5AT7ruvfdv+M2tvzUnYVZZjE8+WSQDHt9sVjuZAUiLa78///o3t+EPd3Tdoddz59/59rdw5ZWX95zd72utHW+V49WVb7nl13hdTt6//73vmPINn5OxFO7Yuc8HHnxIBibeLlm2x6CoqAj6x4LVfn/778ykllXTwLfV6hsacPhhs7Fo0WJrlnk+bf78bq/5ggIUoAAFhp+AyT6TwJG2oAQTHRJi0zZhbB5CdikFKvE0na+BRg0wSTFWxMc7zbTMkhaWQJYUYNUyrDa581bKkN71h7tQvrkVPpcNtpYwFhXvwG/aX8SkjAy8v2m7ZBpKUK2jBZvW2pDimYZTTlmA9MQ0+WNZMiwdEhiTi0nhnYmOITkPmjRhV0nS57fsyoCUQxt0i9Xfs8+eC2dCCcaNykRqMlDbJOVffckSHHWiqaMSBdPy4ZYszZVLarGppByNrZLpF05Fgj2Ei885DEdPzca6DSVYXloOdEp2ZLkfiVljZIzHFLS22PDi5hoEnQ7ZRjZWrK1G4excNLdWoEqCnMecPAWf/rcKZdt2oLnRj8+duSsAqfZWi84UtOb19xyrvxr006oYe9O09OpSuUlJzzP0+6EX7jRzwMp61BuRom96irWv6ADk3vY31j44nwIUoAAFKECB/SugQbwjjphjhhH6+S9+idt/dxtGjx5tziF/cv3/msDgKLnB/oyoG+OfeeY5vPLqq/j2t76JY489xhywjr+o17w0CFlYOM0s02xHPY/53/+90dxMrdc7DpNrEtFNg5N33vlHM+tH1/ygz0xGPcf90bU/xsKFH5obtB95+MFeq4ZFb5/TFNgbgRUrVuLSy64wm7jt1l+jvwC5x+OBjmH6G7lmeNllV+IfTz+JCVLBRZuej1uBzPmnnmrm8cfIFRjsd2Pk9pRHToGBCTAAOTCnAa31zauvlgzET7Bq1SocP+9EExjKkEzIlfLaKqP661/d0m0g4pNOPAFnnnkG3nzzLXz1q5eZbMfRo0eZO7Z0p3qyd/PNN3bb/9e+eokEn940Y/WdfsZZ5uTK5/OZu2h0xcsuuxQXXHB+t/fwxf4T0M/a+rx77lXHVNqTphcfzz77M3j22efM2/XC4Kuvvoa5c48137Pvfufb5uRfA+DaXvvP6+ZhXuz8od+l888/z7y6/LLL8OKLL5n36IxHH31s51q7nnT9efOO3zWDUxSgAAUoMCwFtIQqOrsOTS++QAqMaktLcpoMOR3/Uct4xsc5zENCkXLhSN4gM+0OXeaQwGOnKZUalvqryxatkrKi2yRo6YNLgpWtaIMj5MTSzQ1YWdYkQaowHM5kJLk88p44LFu2CJnZmXIOk4MJE8fLzVHjJcAphVglo1KDnxrYSk1ymWPSHxKPjLQL8gefERirv9kZ+XIncaqM+xhGR4kdo7LCUi41Dumy78raANrrXFi3pBE1je1olIzOuLgQpuSkygF6kSylRgsLsiVzUcK3thYJxsbh48pSzJ4wA4npiSjZul2InUhxJSJB+r2tIh6rixowdXoKqqprceHFs5A3PgcP3v0eQpIJevrpp0f62PWZdL00xx5ZMrCJWP3V6ht721JSUuCUEr1agrWlpcWUX9Xtaok0zWLVY09ISOh3N9HHsrf97XdnXIECFKAABShAgf0mcOtvfoWLvvhlE9ibd8LJEiQ8zFRPsK55/OH3v5Pzvq5zTw0Y/vgn15tja21pxb/+1XXTs1Zt+tnPbpLKS9eYG6f1hvqpkjW5fPmKSD8ef+wRaIAmuj333POR7McFC86OXrTb9BNPPGkCnLpg+/YdWPDZc3dbR2foMDTWWHu9rsCZFBiAgJ4nf/Vrl0XW/NP/3Q199GxahUyr11lNr+f+U5IEtILZKaeettv13PMlueCqq7qCmtZ7+DyyBPb0uzGyesmjpcDgBBiAHJxXn2uPHz8OL77wLG777e149933ImNC6ps0hf57kq12wrxd2Y86X0/U/nrP3fjz3X/B88+/YIKIGlzSu8jOlOzIH//4WujJWnTTsljPPfsv/PKWX5nApVV6Uwf2Pvecc6Q0xte7ZUxGv5fTQy+gJcsG2ux6kbiX1ttYB9ZJvLX6r275hbmArHcUWm3TzrKregy//MXPMW7sOLzz7rtYsmSptYr5Lukdh3oHorWfUaNy5Tv0T/zlnr+arN3IyjKhd2B94cIL8Z3vfEuyWPhPRLQNpylAAQoMRwHr33Y9toAEjLTygv5e8LgcSElyo6nVL0GxoMzT+bKSPSw5jzYTGAxLcDAc1kCTBCClVKjP34n333sPjY0NphSrzRZCvGQ0OuT3l47naJO0Rme8DS7JdAwEQxKEdMs4Jl688cZb8jvDCY+UO73xxhskGJlmti/vkGxENxI9TkOnx1bUZCbNj5mZXdmau+b0PxWrv2lpOZKdOAaN9esRJ2VjW9qCyMx1S2DNAVtbAUqL6lC6tRxBTwDJrjA+f/rh+PJ8udM+4IfN4ZKSq1JB1mlH4aQJWL6+FlnuXKSmJ2HZqqWoqapD7ug8uByS4SmHmOxyIjtjInxNrSiY6Lx/8AAAQABJREFU5MHST0qxeqmUKpUM0rlz50l588mmI9pf/UysFn3s1rz+nqPfE/356u9oDR5q1uKeNvM9kYt9moGg+9E/mHW7mhGpN03pGJA9z0N77kuPwTpfGIr+9tw+X1OAAhSgAAUocOAECgsLTabWr39zK7Tqlt5wr03n/1yCinqty2p6DeOccz5rAoHzTuh+M/PnZMgXLUGpVbs2bNgQCT7qDfnf/OY3MGfO4dZmzLPewPbHP/3ZTF937TWRaxndVop6oVWdrNbXTeFW4NRal88U2BMB/X5Gf5e0il1vLS0trdtsvWnvxReek2Dln3HfffdHhlIqKJiCs84802RIRp/7d3szXwwrgTj5u7C3tiffjTh717b42fcmynkHg4Ctrr4+7JWLDs1y1/OCBb3fIRTd0TckU69gcl70LE7HEGhoaJQLOu3Izc3t92TJ2oSWxgzKBb3c3BxrVp/PeqFnx44dprSEXixiO/gFNLNgx45KuSjoQlZWVq8d1ozY8vIK5ORkSyaI1KHro+n2ampqZfynRozbWZO+j9W5iAIUoAAFhqFAm5zL6fmDNo/8YRsf33UDSXlVM9ZsqjWZiPoHjQkU2SXzUbIiNRExGOgqyxoy2Yo2tLV24N4/343Vn66Q4JYDDgli6u8Un2zfI4GmsPzOCEsQsqWtWQJyY9DS2i7ByCTY7PFweRJkHOGpUonhq/I7SscnlKBmMIw502U8wXFdJVhX1wTw25VdxzktNYyfHbNnWXyx+ltauhhl5a+iRkqHlm3zYvTYQnS0jsa6ZUVoaW7ByjUbJTDqxcxEGy7/6hxMHp0l41Rqdqgd3qBfSq02ob7Jhwf+swWfrNqKwlmH453330ZCimZ4jsaonLFi4EOSBO3Gyu/M6rpWyRB0onjr8/B3SLBREktvuv7n+OIXLjafhY612SF+2jSTMbHHnf1mwQB+xOqvBg4bGxsHsIXYqzzxxBNy0W+OOZ/UoKNuUy+WaPUFHQ9SA5AXXHBBzA3oulbGwlD1N+bOuIACFKAABShAgQMmoNUS9Ib51NQ0pKd3D6xEH5SeT/RVQUHLu1dKNYr8/IkDvlYWvX1OU+BgENBAlV63S0jwxLy2dzD0k32gAAUOLoHizWVyHcmLFIk3uOX6RrzcwGyXa016/SBOHnqTs07rsz60Mb1pH34H9ISsr5Oy3nYdK6DU27o6Tz9IzYhkO3QE9ALyuHFj++yw3lU1efKkPtexFur2NCNSH2wUoAAFKDAyBfSkLygBNG1+yWKzApDjclOwZXsLWtv96PQHJJjYiU4NIsofvPqesGQ92m0SmIyXuy4lEOeXYFlTQ5PJhIt3xkn2YLsEIuORkpIsiYJ+pMnNTieeMA/uRKfcvb4Zy1eskfKteoIZh5AEJsePH4t4WV8zLvUGl/TUpEjwUY8tevzHCyb2XhVA1+uvxepvfv6x+HTFa3JjTRxGZ50Ktz0bTS1yQ5gviNoGGfPR7kTNlo0YfcR0JHiSYXcn6hCYElT1yvGHkeZOxY7NjSjZ4UVtS70E5crhlPUSEpPgkmxPj8clAb8WKWLrhLdNxsjsaMaoXPmd7JsgJ90lOGpOQST4qH3Qz8Jqesx72mL1VwN/ehFPMxf3tGlQWseO3rRpEzJkjM90GT5AS7NqYFNvdKuulszOGE3fawUfdZWh6m+M3XE2BShAAQpQgAIHUEBvbu7vBmc9vL6Cj7pcb26aMqV7pS+dz0aBQ0lAL9BbY0AeSv1mXylAgUNPYM+vhBx6VuwxBShAAQpQgAIUGJYCGqDy+roCkBr4CwSCku3YVcpl0tgULF5VYe4w1xuX4uMkQIggOiUY2dHeAa/cpa5Nxz3skLH//FKGVSKTkt3YilQJSNkkCJUgpVVHydiOc2bNwLzjj8X4vPGorm3Etdf9FO0+GVVSyriGw3aMnzBWAnUS2JSqo6FQAAUTsyNea2Qcxujyq7Oz9vw0tK/+zjn8Arz95vvwtSSipV4yGmtqsHbdRkyZPA41tdUIu+IQH5BxDjsSJHMzWe7GC5nAZLyMd/nR2m14/t+LUVpSifzJUyW41yYBuVwpLZuApIREU4Y2EJRArr8rq7GlRcp92VJkjMtx8Eiw9cpLvxHpr34G+llYbW8DkLE+X70Q2BBVdsza30CetXyrlv0fP368CSSWlpZGyrFqAFK/L9EBxp7bjL4IOZT97bkfvqYABShAAQpQgAIUoAAFKEABClBg5Ans+ZWfkddXHjEFKEABClCAAhQ4KAU0UOSUcXf8nRI8lOaTZysAOSYnGRNGpWDrds0AtMk6PjPGo1eCjxqAcsjdt4mJiZLJGEZ9XYOUYW1FUmoKmpobsWN7pWTDJSFZxpL84Q++D1c8kJ2VIevq3e1ukyGnJVl1rEcdB2PSpImyTa8ci0znZWN0TkrE+7nSrtKrOqNQqsbrMe9p66u/UyYdjvrDQ/ho4SfST78ZD7K9vRUhrwRSJZuxUwKQDVJq9a8PvITJM/Jw0uGTMGlCBoq21uEv974EVzgDsyTw6k4dhbUtm+FJSIJbsjoTnB55dpmyIn4J9qpve3uL1LFNkWzSDpz7mS/jxLlnRrqkn4HV9LPZV/3VcRo100DLnQ22bdu2DXl5eWbMxxoJ1Or3QI9Ty/trWSjNUIiVXan71H1bbSj7a22TzxSgAAUoQAEKUIACFKAABShAAQqMXAEGIEfuZ8cjpwAFKEABClCAAhEBLZVqBSA1806nNfCl7chZY0zGYlVtiymZ6oh3IiE5Dm4dN1IyHP1SvtWpgcgkD1wyDklYSqqm2uUZO2TsxAYZR7ERRRs3Yv6px0uGYxyavVLKtTMsGX52yR+U6q1STVUTLpuamiVImYnklETMmDLa7Ft//LO4s1v2441Hdx1XZIU9mOirv8cedwTWry5CW1M1tIsTpDRsSmYmapsa4PbZUCelZsOBNqxeuhHLF67DeCmtulEyP9OTxmKU040dMp5lnb9JqtK6kJroQUBK1SYkOWWcSy11G5C+d0oWpF+mxUACrgWFo3HVFRdGeqH20dmPeqx72/rqr44DroFCDSgPppWXl2P69OnmfdonLb2qx63jOmoAUsu063PP5pTxQKPHHt8X/e25T76mAAUoQAEKUIACFKAABShAAQpQYGQJ7PngOyOrnzxaClCAAhSgAAUocFAL2CVzzSWBIatpyc5gVPDolOOmIiMzVbL17JK9J9mHkrko8SUZ41HG8ZOxg/W1vj9Zst50bEjNaExIToXNEQ+7TG/dWiblW7vKq7ZKsKt0xzY0tzdJkFIy/SQo11BVh80bizE2NxNHzBxnHQbW1AXxYpkMtLiznZ8nY0buRfajtZ3++nvhl85BVm6GjM0YL4HVRKSmSyajR/pidyDDnYAT86djTPokdGZNRHx2HlqkTzOyxmP2qElAYzvGJKRJz4KIl/EunW4PnC4t2RongccAvJ1BtHZ4ZbxLh2zTgZ/e8C3rsIy5VS5VZ6rp/uivBg11TMaBNh3fUYOWmvGomYzxEqzWrEbdRkdHhwmyalBSx5iMbrpc92U1/Y7ti/5a2+czBShAAQpQgAIUoAAFKEABClCAAiNTYOBXKUZm/3jUFKAABShAAQpQ4JARcEmmnY5RGNS0P2ler0/KjrpNkMnjduDMeVOwbG0FGpu9Juhk19RFiQ1qPDAQ6ER9Q5MEohwSaLNJRqMDzjgPGqoDErSLR1JyJpqkyqdNAni+uk6899oHCHh1/ES7ZNBJ8NKeCF9bEwonZ5qgpu5fg1zPlQRkqqvc6rTUMC4u2BUk1XX2pvXV3+SUZHzlss/jhWdeR0lRMVIlwOaSGrLtjjC2BsKYFU6HPcmLmQ4nMkJ+zBo7HZmZMm5kVQXGJSfAqQE9GRfSGeeWsTF9Un7VIRmRIfi8bTLGZQhtbc2YNjUfP/v5D2WcSKkpK037q+ZWi4uTHMohyH60ttdXfzVbMUNKx+rYjQPJhKyrqzNjP2ZnZ5uSqxpY1M9SsyA18KhBybKyMuh6VtPMRw0+6r607ev+WvvlMwUoQAEKUIACFKAABShAAQpQgAIjT4AZkCPvM+MRU4ACFKAABShAgZgCbs1m3Nk0O02DZ1ZzuxyYd2QeCvJzJMCoWZBByXaUcqr+DgmsSXQxFJTgoQQxJRgZlv+cCRmSOTgKnVKyNNUTh9VLFmLlovdQWb4ZJSXrEeeOw/iCCUgdk4qLLjkDf/jtdfBIOVOr/Wqpll7tCj7qvAsnDf29b331Nzk5EV+T0qhnf+5MtHg7zJiG2SlpJhiZaQ9hpmREjo7zItPWgaNGZaG6oQ0bmzvQ6ElEq9sFRzBOAqtOBHwdcMgYmblZ6TjlxOMkqGjHWWeegEce+lMk+Kj9U+vorNPoY9PlQ9Git9nz89XAYKaUmtVMxv7a9u3bMXnyZLO+jh/p8XhM9qNmRWoAUjMj9dnalj7rtq3go25/f/S3v35wOQUoQAEKUIACFKAABShAAQpQgALDU2DorwINz37yqChAAQpQgAIUoMAhIRAnWWweCZ5ZgceAjOnXLuVCdZ4GlbQV5KUjPcWF9cUV8Eu5VZ8E2CDPjY31qK6ulICkX0qwOhEvQTq7FCKdNm0iZh85E0mpKVJ+NIAarx8LLr8Ck2cchdFjsjAr14lRSV1Zcbp9zYzrCj7qq652wxw7ZmXuWseav7fPA+nvxV86D2tnFeOFF/6DNcuWY5RkeLqcQbiCHnxUU48JCYmotHViTXkZzs+bhqAnFVulJG2nDN0YtoUkqGiToGzQjPvodsfj9t/9DGeecUrk0LW/6q3WVlNvPbahbgPpr47P6JJAdEtLiymz2vMYfBJQ1oBiVlaWCTrm5uaaz0znr1ixAomJ4lFZacZ5zMvLkyBrusmItLazP/tr7ZPPFKAABShAAQpQgAIUoAAFKEABCowsAQYgR9bnxaOlAAUoQAEKUIAC/QrESznNsEvKgco4kNqsIKQ7KiiWlZ6Ak44twJZt1Vi1ph4VFVV494MlaJIyrHb5zy2ZjF4pNZoxZhKSclJRFhwFt2s8wpJc507z4eSCIzHGFUBh7q6MR92Xjvl42/JdgTidp+M+zs7ad6edA+nvzJkF0Efh9InY+vZibCyvQ3FHAxok03OKBBtTJAs0R/p2eHo8ytu9qA25kCjjO3b4vLBJKdWCgkk4du4snHHGidqlSDNjIO6W+SjBW/kM9lUbSH+1hKo+dDxHzXCMLstaXl5ushmbmppM5qOWbtWgopZv1SxHU5pXDr6wsBBHHXVUt24ciP52OwC+oAAFKEABClCAAhSgAAUoQAEKUGBECOy7KyMjovs8SApQgAIUoAAFKHBwCjhlzENtVhBSA0dt7R0SRHTCWqbLJ47PMY+ysnIkJ7uRmmhD5fYGbG+oh7ddyrcG7Witq8GyjxfhjPOzUJDjQV6qBxkJmt3XPaPRLyU7V9Vo8HFX5p8GHy8u6DoW3d++alaf+uvvFy48T2rBnof68kqsXroaa1ZsQGp1Peq9LdCRHHMk6FghmaIZOdlYMO4UHDnnCBx99GzkTRiz26Frf639WQt7+lrzh/p5oP3V0qr60NKqmuGoD2u8SM109Hq95nVIvh+jR482Y0Dq+snJybsd8oHs724HwxkUoAAFKEABClCAAhSgAAUoQAEKDGsBW119fdgrd0Y3S4mmBQvO7fdg33jzLRRMzut3Pa5AAQpQgAIUoAAFKHDgBTol8GSVY7WORgNQLglQOhzdA4jW8sE+m/KkEowL7ixB+nJ5HF4pt+OCiTZ8ccq+Dz5GH++B6K+1fy27ui8zH639RD8fav2N7junKUABClCAAhSgAAUoQAEKUIACFNg/AsWbyxAMeJEiNyy75cZlvf5hl+tLWkVJh4vRYX90Wp+tIYCYAbl/PhvuhQIUoAAFKEABChwQAXNCKNmKXsl8C0pJVW0aKGyXhwYinXLCqIFI6+RwoAepJTs18OiXAKcVeLTee35eGIdlx+2TMR+tfcR6PhD9jZMSrW4Zc3FfjPkYq5/W/EOtv1a/+UwBClCAAhSgAAUoQAEKUIACFKDA8BZgAHJ4fz48OgpQgAIUoAAFKLDXAhoYS5S703z+Tnl0jQupG9XAYYdmLUqlVYcEIzUgqeva7V13q1lBSQ026iMUCkNLuer7dFzJ3prL6YTLGY9Znt6W7p95B6K/+6dnve/lUOtv7wqcSwEKUIACFKAABShAAQpQgAIUoMBwEmAAcjh9GjwWClCAAhSgAAUosA8FNDAYH++AXwKROp5fdNOAYqygYvR6saZ1TEKnbN8upTaGS2N/d30SB+Pnu6t3nKIABShAAQpQgAIUoAAFKEABClBguAkwADncPhEeDwUoQAEKUIACFNiHAhogdLu6shR1/EB9WKVZB7tbLT2qJUD1YWVLDnYb+3p99vfg/nz39feH26cABShAAQpQgAIUoAAFKEABClBgzwQYgNwzN76LAhSgAAUoQAEKjGgBDRiarEXJXAxJeVUtq6qByJCUWA2FQ1JyFabsqnZS19XERrtNy7PK4OISeNRyrcMp27G/D4P9Pbg/3/4+fy6nAAUoQAEKUIACFKAABShAAQpQYP8KMAC5f725NwpQgAIUoAAFKDDsBDSQaDeZjMPu0PbJAbG/+4SVG6UABShAAQpQgAIUoAAFKEABClCAAhEBe2SKExSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAX2UoAByL0E5NspQAEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUoQIFdAgxA7rLgFAUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUosJcCDEDuJSDfTgEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEK7BJgAHKXBacoQAEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUoQIG9FGAAci8B+XYKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUGCXAAOQuyw4RQEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEK7KUAA5B7Cci3U4ACFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACuwQYgNxlwSkKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUGAvBRiA3EtAvp0CFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACFNglwADkLgtOUYACFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACeyngGOz7CybnDfYtg1q/ubVtUOtzZQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACFKAABShAAQocygIpSYn7rPsaG9xQVDSo7TMDclBcXJkCFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACFOhLYNAZkH1tbCiW7csI7VAcH7dBAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACFKAABShAAQrEFmAGZGwbLqEABShAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACFKAABQYpwADkIMG4OgUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUoEFuAAcjYNlxCAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACFKAABShAAQoMUoAByEGCcXUKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUCC2AAOQsW24hAIUoAAFKEABClCAAhSgAAUoQAEKUIACFKAABShAAQpQgAIUGKQAA5CDBOPqFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACFKBAbAEGIGPbcAkFKEABClCAAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKDBIAQYgBwnG1SlAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACFKAABShAgdgCDEDGtuESClCAAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABClBgkAIMQA4SjKtTgAIUoAAFKEABClCAAhSgAAUoQAEKUIACFKAABShAAQpQgAKxBRiAjG3DJRSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhSgwCAFGIAcJBhXpwAFKEABClCAAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFYgswABnbhksoQAEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUoQIFBCjAAOUgwrk4BClCAAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABCsQWYAAytg2XUIACFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACgxRgAHKQYFydAhSgAAUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhSILcAAZGwbLqEABShAAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACFKAABQYpwADkIMG4OgUoQAEKUIACFKAABShAAQpQgAIUoAAFKEABClCAAhSgAAUoEFuAAcjYNlxCAQpQgAIUoAAFKEABClCAAhSgAAUoQAEKUIACFKAABShAAQoMUoAByEGCcXUKUIACFKAA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/VcaNvtDTumRrJ5ZNSJXE6EIY/EYXFvrR2sNiXYlporfEy9J2xZL9o4/JUkFSFtlsGauSIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESKBEEFB1rHiGXBXwMv9ZJmWyl4lX5170q4hnBEdvps7DqItPhUjfnsAaoqSJwzGNy82UjC07ZOlP/0qZVJ80aZwkjesnSlqiT1b8tFEytm7XNJouRxekz1GXrljMNvJnSM7uHbJ20b/i35MtjRokmDIqq+HkIhUhd27YphaQqD/YFi9EUbuPdXBBm3S+Sn9Ckvh0KevZJluXTQ/MKVk8sbNVJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJHBABIqtBWSuL0f2bFolFRJ8kquWjx5YEvrV9SrcrcICEhaGmPcRtoSwZjRngn0NuR7x7sqS3duzJD09TpLVcBJJUlXD3L0jW3IyVSAsrRGwVjRmj1gH8yK/luvzesWb7ZW0VORXC0qPX0qX9khmRrZk71ZhMVcrhAWk/jNFYA5IzPto2oe2YVsXNaX0S7w2OVGryJScdT+oJqkip1p0MpAACZAACZAACZAACZAACZAACZAACZAACZAACZAACZAACZAACZBASSNQbAVIUavCnH9+NR5O4V5VbSBV0FMBEqKjukiVOBX3oCpisaKkUQL1Evl8OgWkX5KS48XjQZrAZUvQtEnJcZodAiHmktQ18qAMP0TIYNDy4+IC+RPVdSvS+DWNJ94vHt2P12Mmv3GzqoedeSDRRhwLrs1xbbOeRa66YEUZ8TtWqwCp1pZSThcGEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABEihZBIqtAJmrVoK+TcuNthivFoR+FQj9Pq/EYe5HFQIFIiCEQ2sBCVNEiI0aDQEwUS0fq1RLkc1r1N1qUA9E0io10iQZc0rmZAfEQqtOOtdVE+fESaIKhqXLJxgBFHXHqQiak+OXI2snSXJZbYO2JWDlqOmN4Ih6dfEG9yFuYlFLSr9abmrrA9ppzjb13LpTRN25MpAACZAACZAACZAACZAACZAACZAACZAACZAACZAACZAACZAACZBASSNQbAVI357t4tuxXnxqsYjgV1emkqtWi+pe1bE4hOCn4uReDRECpO5n50pKSoLUaVZGlvy4WbZs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JF7j1VbSlGdERyM8mtKDcVyRAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmAQAkUIO2FDRUiERvnSRFPmlo3plXQvYBAadbGmtGVz7hktfkRH7R2NEnc8TYP1yRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiBQ/ARIr1dbVZjNcgmGcW4h0d4AetzOAWmjzNoKlNhxlRGShjskQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAJuAoWp9LnLLfh2oYqP4c2gkBhOhPskQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkUJgE7MSGhVkmyyIBEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABEjhMCVCAPEwvPE+bBEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABIqCAAXIoqDKMkmABEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABEjgMCVAAfIwvfA8bRIgARIgARIgARIgARIgARIgARIgARIgARIgARIgARIgARIgARIoCgIUIIuCKsskARIgARIgARIgARIgARIgARIgARIgARIgARIgARIgARIgARIggcOUAAXIw/TC87RJgARIgARIgARIgARIgARIgARIgARIgARIgARIgARIgARIgARIoCgIUIAsCqoskwRIgARIgARIgARIgARIgARIgARIgARIgARIgARIgARIgARIgAQOUwIUIA/TC8/TJgESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIIGiIEABsiioskwSIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESOEwJUIA8TC88T5sESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAEioIABciioMoySYAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESOAwJUAB8jC98DxtEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABEigKAhQgi4IqyyQBEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABEiCBw5QABcjD9MLztEmABEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABEigKAhQgCwKqiyTBEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABA5TAhQgD9MLz9MmARIgARIgARIgARIgARL4//buZbdtIwoD8EiifGnfIwvH3aTLvESRd06X6S4P0HbbxIXdOE5sqeeMOAqtWILTQkBkfgSouZAzFj8tfxyaAAECBAgQIECAAAECBAgQILAf8vZoAAAH60lEQVQPAQHkPlTtSYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGCkAgLIkf7wHpsAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAPgQEkPtQtScBAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBkQoIIEf6w3tsAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAvsQEEDuQ9WeBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEYqIIAc6Q/vsQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAjsQ0AAuQ9VexIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAYqYAAcqQ/vMcmQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsA8BAeQ+VO1JgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYKQCAsiR/vAemwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMB/FZjsWCiA3IHjEgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC3yawCiAnuzLKb9vQ3QQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIPDGBbXniA/PTFj229olReBwCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBP6HQMsRaxuBYxvnlsN++xNfXsE6mZbT09M2ryVAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYOQCi+UyUsYvkeJjOKYlUsppJpVRC/nzixePWeMeAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRGIHD94UPNETNPzFzxMUeNKyfTaeniPP/p/DFr3EOAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwAgE3l/8XXPEzBPzqBFkCyO3BJLTTCvznHVdOT9/Xl6+fDkCKo9IgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMAugcurf8rFxUXNEVummFWQGUK286H13SQDyNmszOfz8uzZs/Lq1S9x37K8fv3rQ/ebI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDgiQtcXl6W3//4sxwfH9ccMfPEzBUffAlrzA+PLsslZ7GgiwrIk5Pjcvb8rMxi7uzsrLx9+7a8efNbub6+Hq7RJ0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDgiQksFotyFVWPf717Vy7evy+nP/5Q88PMETNPzFyxhpAZRPahYwsl2zhJJldXV8vbu7tyF+fnz5/Lp5ubcv3xptx8/Fg+xTjn7xZ3WRS5OpbLdbef0RAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgcGACtW6xVS/GYDad1aDxKN6cenxyUk6jePGor4CsBY0RQk4zhIyzvpJ1SyC5egVrXCwRLEYZZLDEK1ljPJ935fb2tgaQiwwdFy2BPDA5X5cAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgZ0Ck2lkhBFGtjenZgjZzY/KvItQMgPHjbBxWPG4ufEqgMxkMxLLjBiPoj+NPzDr5mURlY9ZarnMs61UAdkktAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOVmBYAZn9WtlYw8ashJyWrn/tav7/xwwna+iYbd7bj1s7RKgBZN0sQsYaQsbNsSK6ywgfI5TMyshh6JjjONaB5HA3fQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEvnuBGj7mt8xsMJv6sQoZW7VjVj62161mm2HjOoisq+5/1IAyproWPi4yzYwQMttZLM7gMTdfh4/DEDL36oPI+9saESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDw3Qv0wWN+z3X4WAerELJVNtbAMXPEuL+FkO1aCxw3n7XLm1v4uIzFkwgW6/98zIAxQ8c826qci2M9bvNaAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOSuChKsgaKmbYGGerdqyBYwsh+2vryskYbx6r/wEZsxk+ZvCYoeMsQ8d25orst5XRdxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg8AQE+gBxWAVZA8ec78PGYRC5Dh7j0WtY2RMM+zWAbDTxwtWyjI0yfMxKyGzzqJ+D4FEEWVl8ECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEDhYgXu1ixk29k9Sw8Q+fMy5Fki2kLGN24O3+TbuanLZRrlRBo857oPI7G4GkDnXDmFkk9ASIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ+L4FWsj41bfcDCDjhhos9vNf9b/a4MtEV/9ILMwjPzNQzA1qFWQ/vyuAzHUOAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQOWKAPGtsTtKrGbe3mfW2c7WSxiP/8OHy96pZ+W7SueBzc165pCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBA4AIFBgeLmt22hY85v629eG+7R7bqYr2GNUsjh/et3v9Zr964YECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBw0AJbKiGHzzQMJYfzrV8DyDbI9t6CDB/79HN4jz4BAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAk9T4F5euPGIu661W/8F7ATKS3t/+FkAAAAASUVORK5CYII="}}},{"cell_type":"markdown","source":"# Conclusions\n\n* As part of the Project we implemented total 6 Models which includes **4 DNNs, 1 CNN and 1 RNN**. We inferred that the Data is such that model complexity was not affecting the accuracy. \n\n* As the Data we had was imbalanced we considered F1 Score as our Evaluation Metric. All the Accuracies and F1 Scores are available in the Charts plotted. \n\n\n* After conducting extensive experiments and evaluations, we can conclude that the deep learning models we have developed have performed almost similarly. The performance differences between the models were negligible, and all models demonstrated excellent accuracy and precision in their predictions.\n\n* It is important to note that achieving such results was not an easy feat, and our team put in a tremendous amount of hard work and effort to develop these models. We faced several challenges throughout the development process, including data preprocessing, feature engineering, hyperparameter tuning, and model selection.\n\n* Despite these challenges, our team persevered and employed various techniques and methodologies to overcome each obstacle, resulting in highly performing models that can effectively predict various real-world scenarios. We are extremely proud of our achievements and confident in the applicability and usefulness of our machine learning models in practical settings.","metadata":{}},{"cell_type":"code","source":"","metadata":{},"outputs":[],"execution_count":null}]}