diff --git a/data/notebooks/04_train.ipynb b/data/notebooks/04_train.ipynb index 5038965..e7dffdd 100644 --- a/data/notebooks/04_train.ipynb +++ b/data/notebooks/04_train.ipynb @@ -1 +1 @@ -{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"provenance":[],"machine_shape":"hm","gpuType":"A100","mount_file_id":"1uEU4A6XLUoUyMyomOsyxpW2t1fNYrw48","authorship_tag":"ABX9TyMEvyRAO+ORit0YhXGgbOHF"},"kernelspec":{"name":"python3","display_name":"Python 3"},"language_info":{"name":"python"},"accelerator":"GPU"},"cells":[{"cell_type":"code","execution_count":null,"metadata":{"id":"UKVxCk82f3ny","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1720498265958,"user_tz":420,"elapsed":265,"user":{"displayName":"Rajashekar Chintalapati","userId":"03596288833202137831"}},"outputId":"65bd2c04-6208-4174-cda9-565f3165c2e4"},"outputs":[{"output_type":"stream","name":"stdout","text":["/content/drive/MyDrive/Colab/instate_v2\n"]}],"source":["%cd /content/drive/MyDrive/Colab/instate_v2/"]},{"cell_type":"code","source":["import numpy as np\n","import pandas as pd\n","\n","import torch\n","import torch.nn as nn\n","import torch.optim as optim\n","from torch.utils.data import DataLoader, Dataset\n","from torch.nn.utils.rnn import pad_sequence\n","\n","from sklearn.model_selection import train_test_split\n","\n","from fastprogress import master_bar, progress_bar"],"metadata":{"id":"0gP6HREgsg6R"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["# Load the data\n","df = pd.read_csv('data/final/all_states_with_languages_agg.csv')"],"metadata":{"id":"25xhq-XxstQN"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["df.head()"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":236},"id":"RYmQbOxXsyge","executionInfo":{"status":"ok","timestamp":1720498276166,"user_tz":420,"elapsed":6,"user":{"displayName":"Rajashekar Chintalapati","userId":"03596288833202137831"}},"outputId":"194be28a-d94e-4485-be2f-9b6bcbc12e9e"},"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":[" last_name sindhi nepali kannada marathi mizo adi garo tagin \\\n","0 aadhumull 0.000 0.0 0.5 0.00 0.0 0.0 0.0 0.0 \n","1 bachhar 0.500 0.0 0.0 1.00 0.0 0.0 0.0 0.0 \n","2 bachhodiya 0.125 0.0 0.0 0.25 0.0 0.0 0.0 0.0 \n","3 bachhole 0.125 0.0 0.0 0.25 0.0 0.0 0.0 0.0 \n","4 balait 0.125 0.0 0.0 0.25 0.0 0.0 0.0 0.0 \n","\n"," assamese ... telugu malayalam tamil meitei khasi gondi bodo nishi \\\n","0 0.0 ... 2.0 0.0 0.0 0.0 0.0 0.5 0.0 0.0 \n","1 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n","2 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n","3 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n","4 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n","\n"," chakma pahari and kumauni \n","0 0.0 0.0 \n","1 0.0 0.0 \n","2 0.0 0.0 \n","3 0.0 0.0 \n","4 0.0 0.0 \n","\n","[5 rows x 38 columns]"],"text/html":["\n","
\n","
\n","\n","\n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n","
last_namesindhinepalikannadamarathimizoadigarotaginassamese...telugumalayalamtamilmeiteikhasigondibodonishichakmapahari and kumauni
0aadhumull0.0000.00.50.000.00.00.00.00.0...2.00.00.00.00.00.50.00.00.00.0
1bachhar0.5000.00.01.000.00.00.00.00.0...0.00.00.00.00.00.00.00.00.00.0
2bachhodiya0.1250.00.00.250.00.00.00.00.0...0.00.00.00.00.00.00.00.00.00.0
3bachhole0.1250.00.00.250.00.00.00.00.0...0.00.00.00.00.00.00.00.00.00.0
4balait0.1250.00.00.250.00.00.00.00.0...0.00.00.00.00.00.00.00.00.00.0
\n","

5 rows × 38 columns

\n","
\n","
\n","\n","
\n"," \n","\n"," \n","\n"," \n","
\n","\n","\n","
\n"," \n","\n","\n","\n"," \n","
\n","\n","
\n","
\n"],"application/vnd.google.colaboratory.intrinsic+json":{"type":"dataframe","variable_name":"df"}},"metadata":{},"execution_count":4}]},{"cell_type":"code","source":["# drop Nan values\n","df.dropna(inplace=True)"],"metadata":{"id":"VlBZW0RKww6f"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["agg_dict = {col: 'sum' for col in df.columns if col != 'last_name'}\n","df = df.groupby('last_name').agg(agg_dict).reset_index()"],"metadata":{"id":"jjZFBRRrwx9B"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["df.head()"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":236},"id":"XyTaez6Yxahe","executionInfo":{"status":"ok","timestamp":1720498278618,"user_tz":420,"elapsed":7,"user":{"displayName":"Rajashekar Chintalapati","userId":"03596288833202137831"}},"outputId":"a0ce8d93-191d-4559-d366-057407730138"},"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":[" last_name sindhi nepali kannada marathi mizo adi garo tagin \\\n","0 aadhumull 0.000 0.0 0.5 0.00 0.0 0.0 0.0 0.0 \n","1 bachhar 0.500 0.0 0.0 1.00 0.0 0.0 0.0 0.0 \n","2 bachhodiya 0.125 0.0 0.0 0.25 0.0 0.0 0.0 0.0 \n","3 bachhole 0.125 0.0 0.0 0.25 0.0 0.0 0.0 0.0 \n","4 balait 0.125 0.0 0.0 0.25 0.0 0.0 0.0 0.0 \n","\n"," assamese ... telugu malayalam tamil meitei khasi gondi bodo nishi \\\n","0 0.0 ... 2.0 0.0 0.0 0.0 0.0 0.5 0.0 0.0 \n","1 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n","2 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n","3 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n","4 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n","\n"," chakma pahari and kumauni \n","0 0.0 0.0 \n","1 0.0 0.0 \n","2 0.0 0.0 \n","3 0.0 0.0 \n","4 0.0 0.0 \n","\n","[5 rows x 38 columns]"],"text/html":["\n","
\n","
\n","\n","\n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n","
last_namesindhinepalikannadamarathimizoadigarotaginassamese...telugumalayalamtamilmeiteikhasigondibodonishichakmapahari and kumauni
0aadhumull0.0000.00.50.000.00.00.00.00.0...2.00.00.00.00.00.50.00.00.00.0
1bachhar0.5000.00.01.000.00.00.00.00.0...0.00.00.00.00.00.00.00.00.00.0
2bachhodiya0.1250.00.00.250.00.00.00.00.0...0.00.00.00.00.00.00.00.00.00.0
3bachhole0.1250.00.00.250.00.00.00.00.0...0.00.00.00.00.00.00.00.00.00.0
4balait0.1250.00.00.250.00.00.00.00.0...0.00.00.00.00.00.00.00.00.00.0
\n","

5 rows × 38 columns

\n","
\n","
\n","\n","
\n"," \n","\n"," \n","\n"," \n","
\n","\n","\n","
\n"," \n","\n","\n","\n"," \n","
\n","\n","
\n","
\n"],"application/vnd.google.colaboratory.intrinsic+json":{"type":"dataframe","variable_name":"df"}},"metadata":{},"execution_count":7}]},{"cell_type":"code","source":["df.shape"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"Z3UE9qu-s9E8","executionInfo":{"status":"ok","timestamp":1720498279220,"user_tz":420,"elapsed":608,"user":{"displayName":"Rajashekar Chintalapati","userId":"03596288833202137831"}},"outputId":"9cd748ea-4456-4710-d223-96047ceacb1c"},"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":["(783089, 38)"]},"metadata":{},"execution_count":8}]},{"cell_type":"markdown","source":["## Loading dataset"],"metadata":{"id":"tv-dC3rCzuTg"}},{"cell_type":"code","source":["class LangDataset(Dataset):\n"," def __init__(self, dataframe, char2idx):\n"," self.data = dataframe\n"," self.last_names = self.data['last_name'].values\n"," self.labels = self.data.drop(['last_name'], axis=1).values.astype(float)\n"," self.char2idx = char2idx\n","\n"," def __len__(self):\n"," return len(self.data)\n","\n"," def __getitem__(self, idx):\n"," last_name = self.last_names[idx]\n"," last_name_indices = [self.char2idx[char] for char in last_name]\n"," labels = torch.tensor(self.labels[idx], dtype=torch.float)\n"," return {'last_name': torch.tensor(last_name_indices, dtype=torch.long), 'labels': labels}"],"metadata":{"id":"q1mLaJ6ts_fh"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["# Splitting data into train, validation, and test sets\n","train_df, temp_df = train_test_split(df, test_size=0.2, random_state=42)\n","val_df, test_df = train_test_split(temp_df, test_size=0.5, random_state=42)"],"metadata":{"id":"DbTeH-Vbt2Ah"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["# Generate Character to Index Mapping\n","chars = set()\n","for name in df['last_name']:\n"," chars.update(name)\n","char2idx = {char: idx + 1 for idx, char in enumerate(chars)}\n","char2idx[''] = 0\n","idx2char = {idx: char for char, idx in char2idx.items()}"],"metadata":{"id":"GE_u7MiwupDN"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["# Creating datasets and dataloaders\n","train_dataset = LangDataset(train_df, char2idx)\n","val_dataset = LangDataset(val_df, char2idx)\n","test_dataset = LangDataset(test_df, char2idx)"],"metadata":{"id":"60vwdeJHucHW"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["# display first sample of train_dataset\n","first_element = train_dataset[0]\n","\n","# Convert character indices back to the actual characters\n","last_name_characters = ''.join([idx2char[char.item()] for char in first_element['last_name']])\n","\n","# Print first element details\n","print(\"First element in the train dataset:\")\n","print(\"Last Name (Character Indices):\", first_element['last_name'])\n","print(\"Last Name (Characters):\", last_name_characters)\n","print(\"Labels:\", first_element['labels'])"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"QjvIRB2yulqT","executionInfo":{"status":"ok","timestamp":1720498280091,"user_tz":420,"elapsed":477,"user":{"displayName":"Rajashekar Chintalapati","userId":"03596288833202137831"}},"outputId":"d67f69c4-b584-4651-a6e5-080af864ae39"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["First element in the train dataset:\n","Last Name (Character Indices): tensor([225, 279, 84, 110, 131, 84, 110, 153, 279, 129])\n","Last Name (Characters): bhanvanshi\n","Labels: tensor([0.1250, 0.0000, 0.0000, 0.2500, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n"," 0.5000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.1250, 0.0000,\n"," 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n"," 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n"," 0.0000])\n"]}]},{"cell_type":"code","source":["def collate_fn(samples):\n"," last_names = [sample['last_name'] for sample in samples]\n"," labels = torch.stack([sample['labels'] for sample in samples])\n"," lengths = torch.tensor([len(name) for name in last_names])\n"," last_names_padded = pad_sequence(last_names, batch_first=True, padding_value=0)\n"," return {'last_names': last_names_padded, 'labels': labels, 'lengths': lengths}"],"metadata":{"id":"UfYlDZcOy40W"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["batch_size = 32\n","\n","train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True, collate_fn=collate_fn)\n","val_loader = DataLoader(val_dataset, batch_size=batch_size, shuffle=False, collate_fn=collate_fn)\n","test_loader = DataLoader(test_dataset, batch_size=batch_size, shuffle=False, collate_fn=collate_fn)"],"metadata":{"id":"lsVpSJUpwjnk"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["# Get the first batch\n","first_batch = next(iter(train_loader))\n","\n","# Print the content of the first batch\n","print(\"First batch in the train DataLoader:\")\n","print(\"Last Names (Character Indices):\", first_batch['last_names'])\n","print(\"Labels:\", first_batch['labels'])\n","print(\"Lengths:\", first_batch['lengths'])\n","\n","# Convert the character indices back to characters for the first few names in the batch\n","for i in range(min(3, len(first_batch['last_names']))): # printing only the first three for brevity\n"," last_name_indices = first_batch['last_names'][i]\n"," last_name_characters = ''.join([idx2char[char.item()] for char in last_name_indices if char != 0])\n"," print(f\"Last Name {i+1} (Characters):\", last_name_characters)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"8VQTMIgfy0LD","executionInfo":{"status":"ok","timestamp":1720498280091,"user_tz":420,"elapsed":7,"user":{"displayName":"Rajashekar Chintalapati","userId":"03596288833202137831"}},"outputId":"76247b44-7297-467e-9437-9e38c281e244"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["First batch in the train DataLoader:\n","Last Names (Character Indices): tensor([[292, 84, 84, 110, 208, 285, 122, 0, 0, 0, 0, 0, 0, 0,\n"," 0],\n"," [ 83, 237, 198, 198, 279, 129, 44, 129, 292, 84, 103, 129, 0, 0,\n"," 0],\n"," [ 83, 285, 44, 44, 129, 292, 292, 84, 122, 84, 0, 0, 0, 0,\n"," 0],\n"," [153, 84, 242, 208, 118, 44, 0, 0, 0, 0, 0, 0, 0, 0,\n"," 0],\n"," [103, 76, 254, 237, 150, 84, 44, 237, 0, 0, 0, 0, 0, 0,\n"," 0],\n"," [153, 279, 84, 122, 84, 242, 84, 254, 0, 0, 0, 0, 0, 0,\n"," 0],\n"," [153, 118, 258, 84, 208, 84, 0, 0, 0, 0, 0, 0, 0, 0,\n"," 0],\n"," [292, 84, 110, 84, 254, 84, 208, 84, 0, 0, 0, 0, 0, 0,\n"," 0],\n"," [103, 129, 254, 122, 129, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n"," 0],\n"," [254, 237, 122, 208, 129, 155, 242, 84, 0, 0, 0, 0, 0, 0,\n"," 0],\n"," [ 83, 84, 153, 129, 110, 84, 225, 285, 258, 84, 110, 84, 0, 0,\n"," 0],\n"," [153, 118, 254, 129, 83, 118, 44, 84, 0, 0, 0, 0, 0, 0,\n"," 0],\n"," [118, 103, 103, 129, 110, 129, 0, 0, 0, 0, 0, 0, 0, 0,\n"," 0],\n"," [254, 237, 83, 129, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n"," 0],\n"," [242, 285, 208, 208, 84, 84, 129, 103, 0, 0, 0, 0, 0, 0,\n"," 0],\n"," [ 83, 237, 122, 237, 103, 279, 84, 153, 200, 0, 0, 0, 0, 0,\n"," 0],\n"," [110, 118, 122, 285, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n"," 0],\n"," [254, 76, 279, 103, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n"," 0],\n"," [279, 74, 103, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n"," 0],\n"," [131, 118, 118, 122, 84, 254, 84, 84, 198, 279, 129, 110, 118, 110,\n"," 129],\n"," [292, 285, 44, 84, 242, 84, 44, 44, 84, 0, 0, 0, 0, 0,\n"," 0],\n"," [103, 129, 122, 237, 254, 44, 84, 153, 279, 118, 103, 129, 0, 0,\n"," 0],\n"," [103, 285, 103, 84, 292, 84, 44, 129, 0, 0, 0, 0, 0, 0,\n"," 0],\n"," [153, 84, 122, 208, 84, 110, 285, 44, 44, 84, 0, 0, 0, 0,\n"," 0],\n"," [ 84, 153, 285, 44, 83, 118, 122, 0, 0, 0, 0, 0, 0, 0,\n"," 0],\n"," [103, 171, 242, 84, 44, 44, 76, 0, 0, 0, 0, 0, 0, 0,\n"," 0],\n"," [198, 279, 118, 44, 129, 131, 118, 110, 208, 122, 129, 0, 0, 0,\n"," 0],\n"," [ 83, 285, 110, 84, 208, 84, 44, 84, 0, 0, 0, 0, 0, 0,\n"," 0],\n"," [285, 110, 103, 103, 118, 208, 208, 237, 0, 0, 0, 0, 0, 0,\n"," 0],\n"," [153, 84, 110, 208, 118, 44, 129, 84, 0, 0, 0, 0, 0, 0,\n"," 0],\n"," [ 83, 285, 110, 208, 118, 131, 84, 208, 0, 0, 0, 0, 0, 0,\n"," 0],\n"," [237, 122, 237, 83, 237, 103, 103, 129, 0, 0, 0, 0, 0, 0,\n"," 0]])\n","Labels: tensor([[0.3750, 0.0000, 0.0000, ..., 0.0000, 0.0000, 0.0000],\n"," [0.0000, 0.0000, 0.0000, ..., 0.0000, 0.0000, 0.0000],\n"," [0.0000, 0.0000, 0.0000, ..., 0.0000, 0.0000, 0.0000],\n"," ...,\n"," [0.0000, 0.0000, 0.0000, ..., 0.0000, 0.0000, 0.0000],\n"," [0.0000, 0.0000, 0.1250, ..., 0.0000, 0.0000, 0.0000],\n"," [0.0000, 0.0000, 0.0000, ..., 0.0000, 0.0000, 0.0000]])\n","Lengths: tensor([ 7, 12, 10, 6, 8, 8, 6, 8, 5, 8, 12, 8, 6, 5, 8, 9, 5, 5,\n"," 4, 15, 9, 12, 8, 10, 7, 7, 11, 8, 8, 8, 8, 8])\n","Last Name 1 (Characters): paandor\n","Last Name 2 (Characters): kucchilipati\n","Last Name 3 (Characters): kollippara\n"]}]},{"cell_type":"markdown","source":["## Model"],"metadata":{"id":"3ubFGsexz03t"}},{"cell_type":"code","source":["class LangModel(nn.Module):\n"," def __init__(self, vocab_size, embedding_dim, hidden_dim, output_dim):\n"," super(LangModel, self).__init__()\n"," self.embedding = nn.Embedding(vocab_size, embedding_dim)\n"," self.lstm = nn.LSTM(embedding_dim, hidden_dim, batch_first=True)\n"," self.fc = nn.Linear(hidden_dim, output_dim)\n","\n"," def forward(self, x, lengths):\n"," x = self.embedding(x)\n"," x = nn.utils.rnn.pack_padded_sequence(x, lengths, batch_first=True, enforce_sorted=False)\n"," _, (h_n, _) = self.lstm(x)\n"," h_n = h_n.squeeze(0)\n"," output = self.fc(h_n)\n"," return output"],"metadata":{"id":"yVBmha5YzIFj"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["class EarlyStopper:\n"," def __init__(self, patience=1, min_delta=0):\n"," self.patience = patience\n"," self.min_delta = min_delta\n"," self.counter = 0\n"," self.min_validation_loss = np.inf\n","\n"," def early_stop(self, validation_loss):\n"," if validation_loss < self.min_validation_loss:\n"," self.min_validation_loss = validation_loss\n"," self.counter = 0\n"," elif validation_loss > (self.min_validation_loss + self.min_delta):\n"," self.counter += 1\n"," if self.counter >= self.patience:\n"," return True\n"," return False"],"metadata":{"id":"j3-F605TM8ut"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["# Initialize model, loss function, optimizer\n","vocab_size = len(char2idx)\n","embedding_dim = 50\n","hidden_dim = 128\n","output_dim = 37\n","lr = 0.0005\n","\n","device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n","\n","model = LangModel(vocab_size=vocab_size, embedding_dim=embedding_dim, hidden_dim=hidden_dim, output_dim=output_dim)\n","model.to(device)\n","criterion = nn.MSELoss()\n","optimizer = optim.Adam(model.parameters(), lr=lr)"],"metadata":{"id":"BequLlSpz76o"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["epochs=100\n","early_stopper = EarlyStopper(patience=10)\n","scheduler = optim.lr_scheduler.StepLR(optimizer, step_size=10, gamma=0.1)\n","# scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=60, eta_min=1e-5)\n","\n","mb = master_bar(range(epochs))\n","mb.names = ['Training loss', 'Validation loss']\n","\n","x = []\n","training_losses = []\n","validation_losses = []\n","\n","valid_mean_min = np.Inf\n","\n","# Training loop\n","for epoch in mb:\n"," x.append(epoch)\n"," total_loss = torch.Tensor([0.0]).to(device)\n","\n"," # train\n"," model.train()\n"," for batch in progress_bar(train_loader, parent=mb):\n"," optimizer.zero_grad()\n"," last_names = batch['last_names'].to(device)\n"," labels = batch['labels'].to(device)\n"," lengths = batch['lengths']\n"," outputs = model(last_names, lengths)\n"," loss = criterion(outputs, labels)\n"," loss.backward()\n"," optimizer.step()\n"," total_loss += loss.item()\n","\n"," # decay lr\n"," scheduler.step()\n"," mean = total_loss / len(train_loader)\n"," training_losses.append(mean.cpu())\n","\n"," # validation\n"," model.eval()\n"," validation_loss = torch.Tensor([0.0]).to(device)\n"," with torch.no_grad():\n"," for batch in progress_bar(val_loader, parent=mb):\n"," last_names = batch['last_names'].to(device)\n"," labels = batch['labels'].to(device)\n"," lengths = batch['lengths']\n"," outputs = model(last_names, lengths)\n"," loss = criterion(outputs, labels)\n"," validation_loss += loss.item()\n","\n"," val_mean = validation_loss / len(val_loader)\n"," validation_losses.append(mean.cpu())\n"," mb.update_graph([[x, training_losses], [x, validation_losses]], [0,epochs])\n"," mb.write(f\"\\nEpoch {epoch}: Training loss {mean.item():.6f} validation loss {val_mean.item():.6f} with lr {lr:.6f}\")\n","\n"," # save model if validation loss has decreased\n"," if val_mean.item() <= valid_mean_min:\n"," print('Validation loss decreased ({:.6f} --> {:.6f}). Saving model ...'.format(\n"," valid_mean_min,\n"," val_mean.item()))\n"," torch.save(model.state_dict(), '/content/drive/MyDrive/Colab/instate_v2/state_lang.pt')\n"," valid_mean_min = val_mean.item()\n","\n"," # early stopping\n"," if early_stopper.early_stop(validation_losses[-1]):\n"," print(f\"Early stopping at epoch {epoch}\")\n"," break"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":1000},"id":"InCtTV9I2Gpv","executionInfo":{"status":"ok","timestamp":1720501410012,"user_tz":420,"elapsed":3121842,"user":{"displayName":"Rajashekar Chintalapati","userId":"03596288833202137831"}},"outputId":"477328f0-0581-44db-d6f7-1514158df82d"},"execution_count":null,"outputs":[{"output_type":"display_data","data":{"text/plain":[""],"text/html":["\n","\n"]},"metadata":{}},{"output_type":"display_data","data":{"text/plain":[""],"text/html":["\n","
\n"," \n"," 37.00% [37/100 50:39<1:26:14]\n","
\n"," \n","\n","Epoch 0: Training loss 3649240.500000 validation loss 5998608.000000 with lr 0.000500

\n","Epoch 1: Training loss 3649063.500000 validation loss 5998256.000000 with lr 0.000500

\n","Epoch 2: Training loss 3648878.250000 validation loss 5997948.000000 with lr 0.000500

\n","Epoch 3: Training loss 3648731.250000 validation loss 5997909.500000 with lr 0.000500

\n","Epoch 4: Training loss 3648624.500000 validation loss 5997896.000000 with lr 0.000500

\n","Epoch 5: Training loss 3648426.250000 validation loss 5997538.500000 with lr 0.000500

\n","Epoch 6: Training loss 3648354.250000 validation loss 5997750.500000 with lr 0.000500

\n","Epoch 7: Training loss 3648211.250000 validation loss 5997670.000000 with lr 0.000500

\n","Epoch 8: Training loss 3648143.000000 validation loss 5997399.500000 with lr 0.000500

\n","Epoch 9: Training loss 3647981.000000 validation loss 5997134.500000 with lr 0.000500

\n","Epoch 10: Training loss 3647820.750000 validation loss 5997437.500000 with lr 0.000500

\n","Epoch 11: Training loss 3647755.000000 validation loss 5997390.000000 with lr 0.000500

\n","Epoch 12: Training loss 3647628.750000 validation loss 5997410.000000 with lr 0.000500

\n","Epoch 13: Training loss 3647596.000000 validation loss 5997457.000000 with lr 0.000500

\n","Epoch 14: Training loss 3647683.000000 validation loss 5997403.000000 with lr 0.000500

\n","Epoch 15: Training loss 3647568.750000 validation loss 5997408.500000 with lr 0.000500

\n","Epoch 16: Training loss 3647626.250000 validation loss 5997356.000000 with lr 0.000500

\n","Epoch 17: Training loss 3647526.500000 validation loss 5997418.500000 with lr 0.000500

\n","Epoch 18: Training loss 3647484.250000 validation loss 5997422.000000 with lr 0.000500

\n","Epoch 19: Training loss 3647481.000000 validation loss 5997447.000000 with lr 0.000500

\n","Epoch 20: Training loss 3647420.750000 validation loss 5997443.500000 with lr 0.000500

\n","Epoch 21: Training loss 3647447.000000 validation loss 5997440.000000 with lr 0.000500

\n","Epoch 22: Training loss 3647450.500000 validation loss 5997436.000000 with lr 0.000500

\n","Epoch 23: Training loss 3647427.750000 validation loss 5997434.000000 with lr 0.000500

\n","Epoch 24: Training loss 3647419.000000 validation loss 5997430.000000 with lr 0.000500

\n","Epoch 25: Training loss 3647478.500000 validation loss 5997436.500000 with lr 0.000500

\n","Epoch 26: Training loss 3647451.000000 validation loss 5997438.500000 with lr 0.000500

\n","Epoch 27: Training loss 3647397.750000 validation loss 5997433.000000 with lr 0.000500

\n","Epoch 28: Training loss 3647406.000000 validation loss 5997439.000000 with lr 0.000500

\n","Epoch 29: Training loss 3647431.750000 validation loss 5997434.000000 with lr 0.000500

\n","Epoch 30: Training loss 3647436.250000 validation loss 5997434.000000 with lr 0.000500

\n","Epoch 31: Training loss 3647432.000000 validation loss 5997433.000000 with lr 0.000500

\n","Epoch 32: Training loss 3647467.500000 validation loss 5997432.000000 with lr 0.000500

\n","Epoch 33: Training loss 3647441.750000 validation loss 5997431.500000 with lr 0.000500

\n","Epoch 34: Training loss 3647407.000000 validation loss 5997431.500000 with lr 0.000500

\n","Epoch 35: Training loss 3647414.500000 validation loss 5997431.500000 with lr 0.000500

\n","Epoch 36: Training loss 3647450.500000 validation loss 5997431.000000 with lr 0.000500

\n","\n","

\n"," \n"," 100.00% [2448/2448 00:04<00:00]\n","
\n"," "]},"metadata":{}},{"output_type":"display_data","data":{"text/plain":["
"],"image/png":"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7bf8+OOPDB8+nKCgILy8vOjZsydr1661226LFi144403bO9NJhPvv/8+v//97/Hw8CAqKspuDub69esxmUy2OzEvXLgQPz8/kpKSaN++PV5eXgwePNguhJ0/f54nn3wSPz8/AgICGD9+PKNHj2bEiBHV+juaM2cOrVu3xs3NjbZt2/Kvf/3L7u/v+eefJyIiArPZTLNmzXjyySdt4++88w5RUVG4u7sTFBTEXXfdVa1913fVOlOTm5vLqFGjbKfcoqOjSUpKYuDAgQBkZWXZnSEJDw8nKSmJcePGER0dTWhoKAkJCYwfP75aTWZkZDBx4kTy8vJo0aIFzz77LOPGjbONJycnk5mZSWZmJmFhYXbr/vq/KC+99BJHjhzBxcWFdu3a8cknn1zxX6hT3v4rWk9EpD47V26hw3NJdb7ffS8OwsOtZm5yP2HCBGbMmEGrVq3w9/fn6NGj3HnnnbzyyiuYzWY+/PBDhg4dSkZGBhERERfczgsvvMCrr77K9OnTeeutt4iLi+PIkSNVXlkLcPbsWWbMmMG//vUvnJycuPfee3nmmWf46KOPAPjnP//JRx99xIIFC2jfvj2zZs1ixYoV3HrrrZf92ZYvX05CQgJvvPEGAwYMYNWqVTzwwAOEhYVx6623smzZMl5//XUSExPp2LEjOTk57Nq1C4Dt27fz5JNP8q9//Ys+ffqQl5fHxo0bq3Fk679q/Qv64IMPLjq+fv36SstiY2PZunXrZe+jqm1MmzaNadOmXXCd+++/n/vvv/+i2x09ejSjR4++7D4uxa/oUI1tS0REas6LL75o+z/bAI0bN6ZLly629y+99BLLly9n5cqVjB079oLbuf/++7nnnnsAmDJlCm+++Sbfffed3X3Rfq28vJx3332X1q1bAzB27FhefPFF2/hbb73FxIkT+f3vfw/A7NmzWb16dbU+24wZM7j//vt5/PHHAXj66afZunUrM2bM4NZbbyUrK4vg4GAGDBiAq6srERER9OrVC6g48eDp6cnvfvc7vL29ad68Od26NaxpFHr20xUKsxzFcv48zpfxW62IyLWikasz+14c5JD91pQePXrYvS8qKuL555/niy++IDs7m/Pnz3Pu3DmysrIuup1f3+He09MTHx8f23ONquLh4WELNFBxscwv9QUFBZw4ccIWMACcnZ2JiYnBarVe9mf7/vvvefjhh+2W9e3bl1mzZgHwpz/9iTfeeINWrVoxePBg7rzzToYOHYqLiwsDBw6kefPmtrHBgwfbfl5rKK745nvXO7PpPMcO7nF0GyIiNcpkMuHh5lLnr5q8C+1vr2J65plnWL58OVOmTGHjxo2kpaXRuXNnysrKLrqdX+6E/+tjc7EAUlX95c4Vqinh4eFkZGTwzjvv0KhRIx5//HFuvvlmysvL8fb2ZseOHXz88ceEhITw3HPP0aVLlwb1hHaFmqtw6mCao1sQEZFL2LRpE/fffz+///3v6dy5M8HBwRw+fLhOe/D19SUoKIiUlBTbMovFwo4dO6q1nfbt27Np0ya7ZZs2bbK7CW6jRo0YOnQob775JuvXr2fLli22K41dXFwYMGAAr776Krt37+bw4cO25yo2BPrt5CqUHtcVUCIi9V1UVBSfffYZQ4cOxWQyMWnSpGr95FNTnnjiCaZOnUpkZCTt2rXjrbfe4vTp09U6S/W3v/2NkSNH0q1bNwYMGMDnn3/OZ599Zruaa+HChVgsFnr37o2Hhwf//ve/adSoEc2bN2fVqlUcPHiQm2++GX9/f1avXo3VarVdSdwQKNRcBXPeD45uQURELuG1117jwQcfpE+fPjRp0oTx48c75Dl+48ePJycnh1GjRuHs7MzDDz/MoEGDqvUk6xEjRjBr1ixmzJhBQkICLVu2ZMGCBfTr1w8APz8/pk2bxtNPP43FYqFz5858/vnnBAQE4Ofnx2effcbzzz9PSUkJUVFRfPzxx1U+kPpaZTLq+ge/a1xhYSG+vr4UTPAmv1EYEc/tc3RLIiJXpKSkhEOHDtGyZUvc3d0d3c51x2q10r59e0aOHMlLL73k6HZqzMX+Xdm+QwsK8PHxqfF960zNVQi1HKfkXDHujS7/1toiInJ9OnLkCGvWrOGWW26htLSU2bNnc+jQIf785z87urUGQxOFr1A+njibDI4d2OXoVkRE5Brg5OTEwoUL6dmzJ3379iU9PZ21a9fSvn17R7fWYOhMzRXKcW1OBN9z+vAuiO7j6HZERKSeCw8Pr3TlktQsnam5QkXeFTdYKs/WvWpERETqA4WaK9W04hI4j3w9A0pERKQ+UKi5Qt4RFU8RDzqnZ0CJiIjUBwo1Vyi4VdeK/+QkZwryHNuMiIiIKNRcKd/GTcil4vHzxzJSHdyNiIiIKNRchRz3VgAUHNnt4E5EREREoeYqnPX7v+dl5OquwiIi15J+/frx1FNP2d63aNGCN95446LrmEwmVqxYcdX7rqntXMzzzz9P165da3Uf9ZFCzVVwDq54KqpXwQEHdyIicn0YOnQogwcPrnJs48aNmEwmdu+u/tnzlJQUHn744attz86FgkV2djZ33HFHje5LKijUXAW/Fl0AaFZ2CMMBT3wVEbnejBkzhuTkZH766adKYwsWLKBHjx5ER0dXe7tNmzbFw8OjJlq8pODgYMxmc53s63qjUHMVwqK6YjVM+FPIz7nHHN2OiMjVMwwoK67712U+W/l3v/sdTZs2ZeHChXbLi4qK+PTTTxkzZgw///wz99xzD6GhoXh4eNC5c2c+/vjji273tz8/HThwgJtvvhl3d3c6dOhAcnJypXXGjx9PmzZt8PDwoFWrVkyaNIny8nIAFi5cyAsvvMCuXbswmUyYTCZbz7/9+Sk9PZ3bbruNRo0aERAQwMMPP0xRUZFt/P7772fEiBHMmDGDkJAQAgICiI+Pt+3rclitVl588UXCwsIwm8107dqV//73v7bxsrIyxo4dS0hICO7u7jRv3pypU6cCYBgGzz//PBEREZjNZpo1a8aTTz552fuuS3pMwlVo5OnNUacQwo3j5BzYQZPgcEe3JCJydcrPwpRmdb/f/z0Obpd+OLCLiwujRo1i4cKFPPvss5hMJgA+/fRTLBYL99xzD0VFRcTExDB+/Hh8fHz44osvuO+++2jdujW9evW65D6sVit/+MMfCAoKYtu2bRQUFNjNv/mFt7c3CxcupFmzZqSnp/PQQw/h7e3N3//+d+6++2727NnDf//7X9auXQuAr69vpW0UFxczaNAgYmNjSUlJITc3l7/85S+MHTvWLrh9/fXXhISE8PXXX5OZmcndd99N165deeihhy75eQBmzZrFzJkzmTt3Lt26dWP+/PkMGzaMvXv3EhUVxZtvvsnKlStZsmQJERERHD16lKNHjwKwbNkyXn/9dRITE+nYsSM5OTns2lU/n3uoUHOVTnm0Irz4OEVHdwPDHd2OiEiD9+CDDzJ9+nS++eYb+vXrB1T89PTHP/4RX19ffH19eeaZZ2z1TzzxBElJSSxZsuSyQs3atWv54YcfSEpKolmzioA3ZcqUSvNg/vGPf9j+3KJFC5555hkSExP5+9//TqNGjfDy8sLFxYXg4OAL7mvx4sWUlJTw4Ycf4ulZEepmz57N0KFD+ec//0lQUBAA/v7+zJ49G2dnZ9q1a8eQIUP46quvLjvUzJgxg/Hjx/M///M/APzzn//k66+/5o033uDtt98mKyuLqKgobrzxRkwmE82bN7etm5WVRXBwMAMGDMDV1ZWIiIjLOo6OoFBzlUr920Lxtzid/MHRrYiIXD1Xj4qzJo7Y72Vq164dffr0Yf78+fTr14/MzEw2btzIiy++CIDFYmHKlCksWbKEY8eOUVZWRmlp6WXPmfn+++8JDw+3BRqA2NjYSnWffPIJb775Jj/++CNFRUWcP38eHx+fy/4cv+yrS5cutkAD0LdvX6xWKxkZGbZQ07FjR5ydnW01ISEhpKenX9Y+CgsLOX78OH379rVb3rdvX9sZl/vvv5+BAwfStm1bBg8ezO9+9ztuv/12AP70pz/xxhtv0KpVKwYPHsydd97J0KFDcXGpfxFCc2qukktIxSPjfYoOOrgTEZEaYDJV/AxU16//+xnpco0ZM4Zly5Zx5swZFixYQOvWrbnlllsAmD59OrNmzWL8+PF8/fXXpKWlMWjQIMrKymrsMG3ZsoW4uDjuvPNOVq1axc6dO3n22WdrdB+/5urqavfeZDJhrcELVLp3786hQ4d46aWXOHfuHCNHjuSuu+4CKp4unpGRwTvvvEOjRo14/PHHufnmm6s1p6euKNRcpcbNK2bZNys/oiugRETqyMiRI3FycmLx4sV8+OGHPPjgg7b5NZs2bWL48OHce++9dOnShVatWrF//+U/fLh9+/YcPXqU7Oxs27KtW7fa1WzevJnmzZvz7LPP0qNHD6Kiojhy5IhdjZubGxaL5ZL72rVrF8XFxbZlmzZtwsnJibZt2152zxfj4+NDs2bN2LRpk93yTZs20aFDB7u6u+++m3nz5vHJJ5+wbNky8vIqHgPUqFEjhg4dyptvvsn69evZsmXLZZ8pqkv179zRNSY0sjMWw4SPqZiTOVk0bdbC0S2JiDR4Xl5e3H333UycOJHCwkLuv/9+21hUVBRLly5l8+bN+Pv789prr3HixAm7L/CLGTBgAG3atGH06NFMnz6dwsJCnn32WbuaqKgosrKySExMpGfPnnzxxRcsX77crqZFixYcOnSItLQ0wsLC8Pb2rnQpd1xcHJMnT2b06NE8//zznDx5kieeeIL77rvP9tNTTfjb3/7G5MmTad26NV27dmXBggWkpaXx0UcfAfDaa68REhJCt27dcHJy4tNPPyU4OBg/Pz8WLlyIxWKhd+/eeHh48O9//5tGjRrZzbupL3Sm5iqZ3T047hQCQE5m/ZwNLiLSEI0ZM4bTp08zaNAgu/kv//jHP+jevTuDBg2iX79+BAcHM2LEiMverpOTE8uXL+fcuXP06tWLv/zlL7zyyit2NcOGDWPcuHGMHTuWrl27snnzZiZNmmRX88c//pHBgwdz66230rRp0yovK/fw8CApKYm8vDx69uzJXXfdRf/+/Zk9e3b1DsYlPPnkkzz99NP89a9/pXPnzvz3v/9l5cqVREVFARVXcr366qv06NGDnj17cvjwYVavXo2TkxN+fn7MmzePvn37Eh0dzdq1a/n8888JCAio0R5rgskwLvPmAAJUTLjy9fWloKDANiFs56t30u3sJra2/Ts33PPsJbYgIlI/lJSUcOjQIVq2bIm7u7uj25EG4mL/rqr6Dq1J1TpTM2fOHKKjo/Hx8cHHx4fY2Fi+/PLLi66Tn59PfHw8ISEhmM1m2rRpw+rVq6usnTZtGiaTqdL9AH788Ud+//vf07RpU3x8fBg5ciQnTpywq8nLyyMuLg4fHx/8/PwYM2aM3c2LAHbv3s1NN92Eu7s74eHhvPrqq9X5+BdU4t8GAJOugBIREXGYaoWasLAwpk2bRmpqKtu3b+e2225j+PDh7N27t8r6srIyBg4cyOHDh1m6dCkZGRnMmzeP0NDQSrUpKSnMnTu30u2ti4uLuf322zGZTKxbt45NmzZRVlbG0KFD7WZ+x8XFsXfvXpKTk1m1ahUbNmywe45HYWEht99+O82bNyc1NZXp06fz/PPP895771XnEFTJNfj/roA68+NVb0tERESukHGV/P39jffff7/KsTlz5hitWrUyysrKLrqNM2fOGFFRUUZycrJxyy23GAkJCbaxpKQkw8nJySgoKLAty8/PN0wmk5GcnGwYhmHs27fPAIyUlBRbzZdffmmYTCbj2LFjhmEYxjvvvGP4+/sbpaWltprx48cbbdu2rdbnLSgoMAC7fjJ3bTKMyT5G/uQQw2qxVGt7IiKOcu7cOWPfvn3GuXPnHN2KNCAX+3dV1XdoTbriicIWi4XExESKi4urvCkRwMqVK4mNjSU+Pp6goCA6derElClTKl3iFh8fz5AhQxgwYEClbZSWlmIymexmjLu7u+Pk5MS3334LVNwvwM/Pjx49ethqBgwYgJOTE9u2bbPV3Hzzzbi5udlqBg0aREZGBqdPn77g5ywtLaWwsNDu9VuhkdFYDBO+FPNzbuWHrImIiEjtq3aoSU9Px8vLC7PZzKOPPsry5csveJncwYMHWbp0KRaLhdWrVzNp0iRmzpzJyy+/bKtJTExkx44dtgdn/dYNN9yAp6cn48eP5+zZsxQXF/PMM89gsVhs9xDIyckhMDDQbj0XFxcaN25MTk6Orea3l8f98v6XmqpMnTrVdtttX19fwsMrP9/J3cOLbKeK22DnZKZdcFsiIvVRTd7ETcSR/56qfZ+atm3bkpaWRkFBAUuXLmX06NF88803VQYbq9VKYGAg7733Hs7OzsTExHDs2DGmT5/O5MmTOXr0KAkJCSQnJ19w5n3Tpk359NNPeeyxx3jzzTdxcnLinnvuoXv37jg51f4V6RMnTuTpp5+2vS8sLKwy2Jxs1JKws9kU/7QXGFbrfYmIXC03NzecnJw4fvw4TZs2xc3NzXYDO5HqMgyDsrIyTp48iZOTk90vI3Wl2qHGzc2NyMhIAGJiYkhJSWHWrFnMnTu3Um1ISAiurq52z6to3749OTk5lJWVkZqaSm5uLt27d7eNWywWNmzYwOzZsyktLcXZ2Znbb7+dH3/8kVOnTuHi4oKfnx/BwcG0atUKgODgYHJzc+32ff78efLy8mwPEgsODq50xdQv7y/2sDGz2VzpZklVKfGLhLObQVdAicg1wsnJiZYtW5Kdnc3x4w543pM0SB4eHkRERNTJiYffuuo7ClutVkpLS6sc69u3L4sXL8Zqtdo+3P79+wkJCcHNzY3+/ftXus3yAw88QLt27Rg/frxdGAJo0qQJAOvWrSM3N5dhwyrOiMTGxpKfn09qaioxMTG2GqvVSu/evW01zz77LOXl5bZnaCQnJ9O2bVv8/f2v9jDgGtwBjoO3roASkWuIm5sbERERnD9//pK39Be5FGdnZ1xcXBx3xq86s4onTJhgfPPNN8ahQ4eM3bt3GxMmTDBMJpOxZs0awzAM47777jMmTJhgq8/KyjK8vb2NsWPHGhkZGcaqVauMwMBA4+WXX77gPn579ZNhGMb8+fONLVu2GJmZmca//vUvo3HjxsbTTz9tVzN48GCjW7duxrZt24xvv/3WiIqKMu655x7beH5+vhEUFGTcd999xp49e4zExETDw8PDmDt3bnUOwQVnbh9I22gYk32MvMlh1dqeiIjI9aK2r36q1pma3NxcRo0aRXZ2Nr6+vkRHR5OUlMTAgQMByMrKsjvdFB4eTlJSEuPGjSM6OprQ0FASEhIYP358tYJXRkYGEydOJC8vjxYtWvDss88ybtw4u5qPPvqIsWPH0r9/f5ycnPjjH//Im2++aRv39fVlzZo1xMfHExMTQ5MmTXjuuefs7mVzNUIju2A1TPibCsnLPUbjwMr34hEREZHao8ckVNPFbvF8/IU2NDNOsHfgYjr2HeKgDkVEROqnevWYBLm4XPeWABT9tMfBnYiIiFx/FGpq0Dm/iqvCdAWUiIhI3VOoqUEuQRXPgPIqzHRwJyIiItcfhZoa5Ne84mGcwWVHHNyJiIjI9UehpgY1i6wINQEUcPpktoO7ERERub4o1NQgT28/smkKQLaeASUiIlKnFGpqWK57CwDOHNUVUCIiInVJoaaGnfNrU/EHXQElIiJSpxRqaphTUDsAPHUFlIiISJ1SqKlhvuGdAAguPezYRkRERK4zCjU1LLRNNwCakE/Bzycc3I2IiMj1Q6Gmhnn5+JPzf1dA/fTDdgd3IyIicv1QqKkFxz0r5tWcObjNwZ2IiIhcPxRqakFpYBcA3E6kObYRERGR64hCTS3wbtULgODi7x3ciYiIyPVDoaYWRHS+EYBmRi55uccc3I2IiMj1QaGmFvj4BZDlFArA0T2bHNyNiIjI9UGhppbkenUA4OzhFAd3IiIicn1QqKkl50O6A+BxMs2xjYiIiFwnFGpqiV9UbwDCz/2AYbU6uBsREZGGT6GmlrToeAPlhjONKSTn6AFHtyMiItLgKdTUEvdGnhxxaQFA9r7Njm1GRETkOqBQU4t+9qt4uGXZEU0WFhERqW0KNbXI1KxisrB3XrqDOxEREWn4FGpqUdN2sQA0Lz2A5fx5B3cjIiLSsCnU1KLwNt04a5jxMp3jpwO7HN2OiIhIg6ZQU4tcXN044hYJQG7GFgd3IyIi0rBVK9TMmTOH6OhofHx88PHxITY2li+//PKi6+Tn5xMfH09ISAhms5k2bdqwevXqKmunTZuGyWTiqaeesluek5PDfffdR3BwMJ6ennTv3p1ly5bZxtevX4/JZKrylZJSMUn38OHDVY5v3bq1Ooeg2goaRwNg/Sm1VvcjIiJyvXOpTnFYWBjTpk0jKioKwzBYtGgRw4cPZ+fOnXTs2LFSfVlZGQMHDiQwMJClS5cSGhrKkSNH8PPzq1SbkpLC3LlziY6OrjQ2atQo8vPzWblyJU2aNGHx4sWMHDmS7du3061bN/r06UN2drbdOpMmTeKrr76iR48edsvXrl1r12tAQEB1DkG1uUTEwImP8c/fU6v7ERERud5VK9QMHTrU7v0rr7zCnDlz2Lp1a5WhZv78+eTl5bF582ZcXV0BaNGiRaW6oqIi4uLimDdvHi+//HKl8c2bNzNnzhx69eoFwD/+8Q9ef/11UlNT6datG25ubgQHB9vqy8vL+c9//sMTTzyByWSy21ZAQIBdbW0Lad8HUqBF+UHKSktwM7vX2b5FRESuJ1c8p8ZisZCYmEhxcTGxsbFV1qxcuZLY2Fji4+MJCgqiU6dOTJkyBYvFYlcXHx/PkCFDGDBgQJXb6dOnD5988gl5eXlYrVYSExMpKSmhX79+F9zvzz//zAMPPFBpbNiwYQQGBnLjjTeycuXKS37O0tJSCgsL7V7V0axFe/Lxws10niP7vqvWuiIiInL5qnWmBiA9PZ3Y2FhKSkrw8vJi+fLldOjQocragwcPsm7dOuLi4li9ejWZmZk8/vjjlJeXM3nyZAASExPZsWOHbe5LVZYsWcLdd99NQEAALi4ueHh4sHz5ciIjI6us/+CDDxg0aBBhYWG2ZV5eXsycOZO+ffvi5OTEsmXLGDFiBCtWrGDYsGEX3PfUqVN54YUXLufQVMnk5ESWezv8SraTd2ArdLv5irclIiIiF1btUNO2bVvS0tIoKChg6dKljB49mm+++abKYGO1WgkMDOS9997D2dmZmJgYjh07xvTp05k8eTJHjx4lISGB5ORk3N0v/LPMpEmTyM/PZ+3atTRp0oQVK1YwcuRINm7cSOfOne1qf/rpJ5KSkliyZInd8iZNmvD000/b3vfs2ZPjx48zffr0i4aaiRMn2q1XWFhIeHj4JY/TrxU3iYaftuN0fEe11hMREZHLV+1Q4+bmZjtDEhMTQ0pKCrNmzWLu3LmVakNCQnB1dcXZ2dm2rH379uTk5FBWVkZqaiq5ubl0797dNm6xWNiwYQOzZ8+mtLSUw4cPM3v2bPbs2WObt9OlSxc2btzI22+/zbvvvmu3zwULFhAQEHDRoPKL3r17k5ycfNEas9mM2Wy+5LYuplGLXvDTfIIKd1/VdkREROTCrvo+NVarldLS0irH+vbtS2ZmJlar1bZs//79hISE4ObmRv/+/UlPTyctLc326tGjB3FxcaSlpeHs7MzZs2crGnWyb9XZ2dluuwCGYbBgwQJGjRplm5h8MWlpaYSEhFT3I1dby+4DOG84EWE9RvaRjFrfn4iIyPWoWmdqJk6cyB133EFERARnzpxh8eLFrF+/nqSkJKDi0uvQ0FCmTp0KwGOPPcbs2bNJSEjgiSee4MCBA0yZMoUnn3wSAG9vbzp16mS3D09PTwICAmzL27VrR2RkJI888ggzZswgICCAFStWkJyczKpVq+zWXbduHYcOHeIvf/lLpd4XLVqEm5sb3bp1A+Czzz5j/vz5vP/++9U5BFfEt3FTvndrT/vyvWRtW0lI87/V+j5FRESuN9UKNbm5uYwaNYrs7Gx8fX2Jjo4mKSmJgQMHApCVlWV3RiU8PJykpCTGjRtHdHQ0oaGhJCQkMH78+Mvep6urK6tXr2bChAkMHTqUoqIiIiMjWbRoEXfeeadd7QcffECfPn1o165dldt66aWXOHLkCC4uLrRr145PPvmEu+66qzqH4Irlh/WDQ3sxH/4KUKgRERGpaSbDMAxHN3EtKSwsxNfXl4KCAnx8fC57vR93b6b1Z3dw1jDjPPEwZnePWuxSRESk/rnS79DLpWc/1ZFWnW7gJP54mErZ/12So9sRERFpcBRq6ojJyYlDfhU3KSze+18HdyMiItLwKNTUIZe2twPQ7ORGB3ciIiLS8CjU1KHI2GG2S7uPH/rB0e2IiIg0KAo1dcjHL4D95oobCB797j8O7kZERKRhUaipYwVhtwLgfvgrB3ciIiLSsCjU1LGg7r8DoM3ZnZScK3ZwNyIiIg2HQk0da9mhJ7k0ppGpjP3bdBWUiIhITVGoqWMmJycO+/cB4Ow+hRoREZGaolDjAK7tKi7tDj35rYM7ERERaTgUahwg8oahlBvOhBvHOXZwr6PbERERaRAUahzA27ex7dLun1JWXaJaRERELodCjYMUBvao+MOJPY5tREREpIFQqHEQ18A2AHgVHXJwJyIiIg2DQo2D+IZX/PwUVHbUwZ2IiIg0DAo1DhLcqhMATcin4PQpB3cjIiJy7VOocRBv38bk0hiAnB93O7gbERGRa59CjQOddAsHoPCn7x3ciYiIyLVPocaBirxbAnA+N8PBnYiIiFz7FGocyAiIAsBccNDBnYiIiFz7FGocyKNZewAanzvs2EZEREQaAIUaB2rSouIKqGaWbM6Xlzm4GxERkWubQo0DBYdHUmK44mY6T86R/Y5uR0RE5JqmUONATs7OHHcOBeDnLD0uQURE5Goo1DjYaY8WAJw7/oNjGxEREbnGKdQ4WLlfawCc8jId3ImIiMi1TaHGwVyC2gLgdUYPthQREbka1Qo1c+bMITo6Gh8fH3x8fIiNjeXLL7+86Dr5+fnEx8cTEhKC2WymTZs2rF69usraadOmYTKZeOqpp+yW5+TkcN999xEcHIynpyfdu3dn2bJldjUtWrTAZDLZvaZNm2ZXs3v3bm666Sbc3d0JDw/n1Vdfrc7HrxW+4R0ACCrXgy1FRESuhkt1isPCwpg2bRpRUVEYhsGiRYsYPnw4O3fupGPHjpXqy8rKGDhwIIGBgSxdupTQ0FCOHDmCn59fpdqUlBTmzp1LdHR0pbFRo0aRn5/PypUradKkCYsXL2bkyJFs376dbt262epefPFFHnroIdt7b29v258LCwu5/fbbGTBgAO+++y7p6ek8+OCD+Pn58fDDD1fnMNSoZq07AxBAAQV5J/Ft3NRhvYiIiFzLqhVqhg4davf+lVdeYc6cOWzdurXKUDN//nzy8vLYvHkzrq6uQMUZld8qKioiLi6OefPm8fLLL1ca37x5M3PmzKFXr14A/OMf/+D1118nNTXVLtR4e3sTHBxcZe8fffQRZWVlzJ8/Hzc3Nzp27EhaWhqvvfaaQ0ONp7cfuTQmkDyyD+7Gt3F/h/UiIiJyLbviOTUWi4XExESKi4uJjY2tsmblypXExsYSHx9PUFAQnTp1YsqUKVgsFru6+Ph4hgwZwoABA6rcTp8+ffjkk0/Iy8vDarWSmJhISUkJ/fr1s6ubNm0aAQEBdOvWjenTp3P+/Hnb2JYtW7j55ptxc3OzLRs0aBAZGRmcPn36gp+ztLSUwsJCu1dNyzVHAFB4dF+Nb1tEROR6Ua0zNQDp6enExsZSUlKCl5cXy5cvp0OHDlXWHjx4kHXr1hEXF8fq1avJzMzk8ccfp7y8nMmTJwOQmJjIjh07SElJueA+lyxZwt13301AQAAuLi54eHiwfPlyIiMjbTVPPvkk3bt3p3HjxmzevJmJEyeSnZ3Na6+9BlTMy2nZsqXddoOCgmxj/v7+Ve576tSpvPDCC5d/gK5AsXcrKE3DclI34BMREblS1Q41bdu2JS0tjYKCApYuXcro0aP55ptvqgw2VquVwMBA3nvvPZydnYmJieHYsWNMnz6dyZMnc/ToURISEkhOTsbd3f2C+5w0aRL5+fmsXbuWJk2asGLFCkaOHMnGjRvp3LliTsrTTz9tq4+OjsbNzY1HHnmEqVOnYjabq/sxbSZOnGi37cLCQsLDw694e1UxAqLgFLjn/1ij2xUREbmeVDvUuLm52c6QxMTEkJKSwqxZs5g7d26l2pCQEFxdXXF2drYta9++PTk5OZSVlZGamkpubi7du3e3jVssFjZs2MDs2bMpLS3l8OHDzJ49mz179tjm7XTp0oWNGzfy9ttv8+6771bZZ+/evTl//jyHDx+mbdu2BAcHc+LECbuaX95faB4OgNlsvqpQdDk8m7WDDGhcklWr+xEREWnIrvo+NVarldLS0irH+vbtS2ZmJlar1bZs//79hISE4ObmRv/+/UlPTyctLc326tGjB3FxcaSlpeHs7MzZs2crGnWyb9XZ2dluu7+VlpaGk5MTgYGBAMTGxrJhwwbKy8ttNcnJybRt2/aCPz3VlaYtK842hViO68GWIiIiV6haoWbixIls2LCBw4cPk56ezsSJE1m/fj1xcXFAxaXXEydOtNU/9thj5OXlkZCQwP79+/niiy+YMmUK8fHxQMXVSp06dbJ7eXp6EhAQQKdOFU+wbteuHZGRkTzyyCN89913/Pjjj8ycOZPk5GRGjBgBVEwCfuONN9i1axcHDx7ko48+Yty4cdx77722wPLnP/8ZNzc3xowZw969e/nkk0+YNWuW3U9LjhIY2opzhhtuJgvZRzIc3Y6IiMg1qVo/P+Xm5jJq1Ciys7Px9fUlOjqapKQkBg4cCEBWVpbdGZXw8HCSkpIYN24c0dHRhIaGkpCQwPjx4y97n66urqxevZoJEyYwdOhQioqKiIyMZNGiRdx5551AxU9EiYmJPP/885SWltKyZUvGjRtnF1h8fX1Zs2YN8fHxxMTE0KRJE5577jmHXs79CydnZ467hNHacpCfD+8hPLKzo1sSERG55pgMwzAc3cS1pLCwEF9fXwoKCvDx8amx7abOHEHMma/ZGvkUN9xbu1dbiYiIOEJtfYf+Qs9+qifK/ComXzv9fMDBnYiIiFybFGrqCdegNgB4Fx12bCMiIiLXKIWaesIvvOJy9WA92FJEROSKKNTUE81aV1zt5U8hP5/4ycHdiIiIXHsUauoJDy9ffnSueIzDgbXzHdyNiIjItUehph451e5eAMIyP8L6m4d+ioiIyMUp1NQjne94iEI8CTNySP/mU0e3IyIick1RqKlHPLx82Rc0DADTd+87uBsREZFri0JNPRM+6AmshonokhSOHtjl6HZERESuGQo19Uxoq46ke/QC4NiatxzcjYiIyLVDoaYeMvV+BIBOuasoKjzt4G5ERESuDQo19VCnm0Zw1NQML9M59n4519HtiIiIXBMUauohJ2dnjrW5D4DgjH9hWK0O7khERKT+U6ippzre+SjFhjvNrT+x59v/OLodERGRek+hpp7y9m3MnqZDADi/TZd3i4iIXIpCTT3m32c0AK2Kd+onKBERkUtQqKnHWnTsTanhii/F/HRwr6PbERERqdcUauoxN7M7h1wjATix71sHdyMiIlK/KdTUc/mNowGwZKU4uBMREZH6TaGmnnNp3hMA//x0B3ciIiJSvynU1HMh7W8EoEX5j5ScK3ZwNyIiIvWXQk0916xFW07jg5vJwpG92xzdjoiISL2lUFPPmZycyGrUHoDTB7Y4uBsREZH6S6HmGnA2sBsALtk7HNyJiIhI/aVQcw3wbNkLgOAzexzciYiISP2lUHMNaB59MwBhRg6nT2Y7uBsREZH6SaHmGuDbuClHTc0AyNqjm/CJiIhUpVqhZs6cOURHR+Pj44OPjw+xsbF8+eWXF10nPz+f+Ph4QkJCMJvNtGnThtWrV1dZO23aNEwmE0899ZTd8pycHO677z6Cg4Px9PSke/fuLFu2zDZ++PBhxowZQ8uWLWnUqBGtW7dm8uTJlJWV2dWYTKZKr61bt1bnEDhMjk8nAM4e1BVQIiIiVXGpTnFYWBjTpk0jKioKwzBYtGgRw4cPZ+fOnXTs2LFSfVlZGQMHDiQwMJClS5cSGhrKkSNH8PPzq1SbkpLC3LlziY6OrjQ2atQo8vPzWblyJU2aNGHx4sWMHDmS7du3061bN3744QesVitz584lMjKSPXv28NBDD1FcXMyMGTPstrV27Vq7XgMCAqpzCBzG2iwGCtbgeTLN0a2IiIjUT8ZV8vf3N95///0qx+bMmWO0atXKKCsru+g2zpw5Y0RFRRnJycnGLbfcYiQkJNiNe3p6Gh9++KHdssaNGxvz5s274DZfffVVo2XLlrb3hw4dMgBj586dF/9Al1BQUGAARkFBwVVtp7oyUtcbxmQf4/TkZobVYqnTfYuIiNSE2v4OveI5NRaLhcTERIqLi4mNja2yZuXKlcTGxhIfH09QUBCdOnViypQpWCwWu7r4+HiGDBnCgAEDqtxOnz59+OSTT8jLy8NqtZKYmEhJSQn9+vW7YH8FBQU0bty40vJhw4YRGBjIjTfeyMqVKy/5OUtLSyksLLR7OcIvT+z2o0hP7BYREalCtX5+AkhPTyc2NpaSkhK8vLxYvnw5HTp0qLL24MGDrFu3jri4OFavXk1mZiaPP/445eXlTJ48GYDExER27NhBSsqFH9i4ZMkS7r77bgICAnBxccHDw4Ply5cTGRlZZX1mZiZvvfWW3U9PXl5ezJw5k759++Lk5MSyZcsYMWIEK1asYNiwYRfc99SpU3nhhRcu59DUKjezOxmurWl7/gdO7NtEeGRnR7ckIiJSr5gMwzCqs0JZWRlZWVkUFBSwdOlS3n//fb755psqg02bNm0oKSnh0KFDODs7A/Daa68xffp0srOzOXr0KD169CA5Odk2l6Zfv3507dqVN954w7adJ554gu+++44pU6bQpEkTVqxYweuvv87GjRvp3Nn+y/3YsWPccsst9OvXj/fff/+in2XUqFEcOnSIjRs3XrCmtLSU0tJS2/vCwkLCw8MpKCjAx8fnkserJm195yFuyF3CtqZ30Tv+gzrdt4iIyNUqLCzE19e31r5Dq32mxs3NzXaGJCYmhpSUFGbNmsXcuXMr1YaEhODq6moLNADt27cnJyeHsrIyUlNTyc3NpXv37rZxi8XChg0bmD17NqWlpRw+fJjZs2ezZ88e2wTfLl26sHHjRt5++23effdd27rHjx/n1ltvpU+fPrz33nuX/Cy9e/cmOTn5ojVmsxmz2XzJbdUFl4iekLsE/9O7Hd2KiIhIvXPV96mxWq12ZzJ+rW/fvmRmZmK1Wm3L9u/fT0hICG5ubvTv35/09HTS0tJsrx49ehAXF0daWhrOzs6cPXu2olEn+1adnZ3ttnvs2DH69etHTEwMCxYsqFRflbS0NEJCQq7kYztESIe+ALQoP0hpyVkHdyMiIlK/VOtMzcSJE7njjjuIiIjgzJkzLF68mPXr15OUlARU/JwTGhrK1KlTAXjssceYPXs2CQkJPPHEExw4cIApU6bw5JNPAuDt7U2nTp3s9uHp6UlAQIBtebt27YiMjOSRRx5hxowZBAQEsGLFCpKTk1m1ahXw/wNN8+bNmTFjBidPnrRtLzg4GIBFixbh5uZGt24Vz1H67LPPmD9//iV/oqpPmrVoz2l88DcVkrFnK2173ObolkREROqNaoWa3NxcRo0aRXZ2Nr6+vkRHR5OUlMTAgQMByMrKsjtDEh4eTlJSEuPGjSM6OprQ0FASEhIYP378Ze/T1dWV1atXM2HCBIYOHUpRURGRkZEsWrSIO++8E4Dk5GQyMzPJzMwkLCzMbv1fTxl66aWXOHLkCC4uLrRr145PPvmEu+66qzqHwKEqntjdDv9z35G3Zw0o1IiIiNhUe6Lw9a62JzldynfL36LXrn+QS2P8Jn6Pm9m9znsQERG5ErX9HapnP11jutwxhlP4EUgeu5MWOLodERGRekOh5hpjdvfgQIt7APDf9R7GryZLi4iIXM8Uaq5B7X/3FOcMN1pbDrJ38ypHtyMiIlIvKNRcg/yaBLO76e8AsGya7eBuRERE6geFmmtU6OC/YjVMdDm3jSM/7HB0OyIiIg6nUHONCovsxC7PPgCcWPOag7sRERFxPIWaa5j7LQkAdPn5v+TlHnNwNyIiIo6lUHMNa9dzIPtd2mA2lZOx6g1HtyMiIuJQCjXXMJOTE2e6PQJA26xEykpLHNyRiIiI4yjUXOO63D6KAjxpTCFZP6Q6uh0RERGHUai5xrm4unHUHAXA6R+3O7gbERERx1GoaQCK/NoDYM3e7eBOREREHEehpgFwCe0CgHf+Dw7uRERExHEUahqAgMgeAESU/YjVYnFwNyIiIo6hUNMAhEVGU2q44mU6R/YRna0REZHrk0JNA+DqZibLtQUAJ/anOLYZERERB1GoaSBOe7cFoPRommMbERERcRCFmgbCCO4MgEfePgd3IiIi4hgKNQ2Eb8sYAELOHXBwJyIiIo6hUNNAhLfvidUwEUieHm4pIiLXJYWaBsLT249jTiEAHPvhOwd3IyIiUvcUahqQXM82ABQf2engTkREROqeQk0DUta0IwAuuXsc3ImIiEjdU6hpQDwjugPQtHi/gzsRERGpewo1DUiz9r0ACLP8xLniMw7uRkREpG4p1DQgTYIjOIUfziaDrO91Z2EREbm+KNQ0MMfdowDIP7TDwZ2IiIjUrWqFmjlz5hAdHY2Pjw8+Pj7Exsby5ZdfXnSd/Px84uPjCQkJwWw206ZNG1avXl1l7bRp0zCZTDz11FN2y3NycrjvvvsIDg7G09OT7t27s2zZMruavLw84uLi8PHxwc/PjzFjxlBUVGRXs3v3bm666Sbc3d0JDw/n1Vdfrc7HvyYUN25f8YecdMc2IiIiUseqFWrCwsKYNm0aqampbN++ndtuu43hw4ezd+/eKuvLysoYOHAghw8fZunSpWRkZDBv3jxCQ0Mr1aakpDB37lyio6MrjY0aNYqMjAxWrlxJeno6f/jDHxg5ciQ7d/7/S5fj4uLYu3cvycnJrFq1ig0bNvDwww/bxgsLC7n99ttp3rw5qampTJ8+neeff5733nuvOoeg3nML6wqAX8H3jm1ERESkrhlXyd/f33j//ferHJszZ47RqlUro6ys7KLbOHPmjBEVFWUkJycbt9xyi5GQkGA37unpaXz44Yd2yxo3bmzMmzfPMAzD2LdvnwEYKSkptvEvv/zSMJlMxrFjxwzDMIx33nnH8Pf3N0pLS20148ePN9q2bXvZn9UwDKOgoMAAjIKCgmqtV1ey9qcZxmQf4+xzTYzz5eWObkdERMSmtr9Dr3hOjcViITExkeLiYmJjY6usWblyJbGxscTHxxMUFESnTp2YMmUKFovFri4+Pp4hQ4YwYMCAKrfTp08fPvnkE/Ly8rBarSQmJlJSUkK/fv0A2LJlC35+fvTo0cO2zoABA3BycmLbtm22mptvvhk3NzdbzaBBg8jIyOD06dMX/JylpaUUFhbaveqz0FadOGuYaWQq46fM3Y5uR0REpM5UO9Skp6fj5eWF2Wzm0UcfZfny5XTo0KHK2oMHD7J06VIsFgurV69m0qRJzJw5k5dfftlWk5iYyI4dO5g6deoF97lkyRLKy8sJCAjAbDbzyCOPsHz5ciIjI4GKOTeBgYF267i4uNC4cWNycnJsNUFBQXY1v7z/paYqU6dOxdfX1/YKDw+/yNFxPCdnZ7LcWgNwMnO7g7sRERGpO9UONW3btiUtLY1t27bx2GOPMXr0aPbt21dlrdVqJTAwkPfee4+YmBjuvvtunn32Wd59910Ajh49SkJCAh999BHu7u4X3OekSZPIz89n7dq1bN++naeffpqRI0eSnl77k2EnTpxIQUGB7XX06NFa3+fVKvBtB0D5sV0O7kRERKTuuFR3BTc3N9sZkpiYGFJSUpg1axZz586tVBsSEoKrqyvOzs62Ze3btycnJ4eysjJSU1PJzc2le/futnGLxcKGDRuYPXs2paWlHD58mNmzZ7Nnzx46dqx4DECXLl3YuHEjb7/9Nu+++y7BwcHk5uba7fv8+fPk5eURHBwMQHBwMCdOnLCr+eX9LzVVMZvNmM3m6hwihzMFd4ZTn+GVV3XYFBERaYiu+j41VquV0tLSKsf69u1LZmYmVqvVtmz//v2EhITg5uZG//79SU9PJy0tzfbq0aMHcXFxpKWl4ezszNmzZysadbJv1dnZ2bbd2NhY8vPzSU1NtY2vW7cOq9VK7969bTUbNmygvLzcVpOcnEzbtm3x9/e/2sNQr/i3rphbFFaaifGrYy8iItKgVWdW8YQJE4xvvvnGOHTokLF7925jwoQJhslkMtasWWMYhmHcd999xoQJE2z1WVlZhre3tzF27FgjIyPDWLVqlREYGGi8/PLLF9zHb69+KisrMyIjI42bbrrJ2LZtm5GZmWnMmDHDMJlMxhdffGGrGzx4sNGtWzdj27ZtxrfffmtERUUZ99xzj208Pz/fCAoKMu677z5jz549RmJiouHh4WHMnTu3Ooeg3l/9ZBiGce5skVH+nJ9hTPYxco5mOrodERERwzBq/zu0Wj8/5ebmMmrUKLKzs/H19SU6OpqkpCQGDhwIQFZWlt0ZlfDwcJKSkhg3bhzR0dGEhoaSkJDA+PHjL3ufrq6urF69mgkTJjB06FCKioqIjIxk0aJF3Hnnnba6jz76iLFjx9K/f3+cnJz44x//yJtvvmkb9/X1Zc2aNcTHxxMTE0OTJk147rnn7O5l01C4N/LkkHMELa2Hyf7hO4LCWju6JRERkVpnMgzDcHQT15LCwkJ8fX0pKCjAx8fH0e1cUMrrI+lZkMSWiEeIfbDh3TlZRESuPbX9HapnPzVQlsBOALj/XPXdnkVERBoahZoGyrtFDABBZ/c7uBMREZG6oVDTQIV1qLjqq5mRS0HeSQd3IyIiUvsUahooX/8mHDdV3DH56PdbHdyNiIhI7VOoacByPNoAUHR4h4M7ERERqX0KNQ1YaZOKOzC7nKj9x0mIiIg4mkJNA+bRvBsATYoyHNyJiIhI7VOoacBC2lZMFg6z/ETJ2SIHdyMiIlK7FGoasKYhzcnDBxeTlawftju6HRERkVqlUNOAmZyc+Mk9CoDTPyrUiIhIw6ZQ08AV+1dMFiZnt2MbERERqWUKNQ2cW1gXAPwLvndwJyIiIrVLoaaBC2zTE4CI8kOcLy9zcDciIiK1R6GmgQtt1Yliwx13UznHMnW/GhERabgUaho4J2dnstxaAXDyQIqDuxEREak9CjXXgULfdgCcP5bm2EZERERqkULNdcAUUjFZ2Ctfk4VFRKThUqi5DjSO7AFAeOkBDKvVwd2IiIjUDoWa60B42+6UG874UkzO0QOObkdERKRWKNRcB8zuHmS5RACQvW+zg7sRERGpHQo114mTAb0AcE370MGdiIiI1A6FmutExJ1/5bzhROfSHWTu+tbR7YiIiNQ4hZrrRLMWbUnzvQ2AgrUzHNyNiIhIzVOouY74D/wbAF0L13Ps4F4HdyMiIlKzFGquI60738Bu9544mwx++uJVR7cjIiJSoxRqrjPON40DoOupLziVc9TB3YiIiNQchZrrTIfYO8hwaYvZVM6BzzW3RkREGo5qhZo5c+YQHR2Nj48PPj4+xMbG8uWXX150nfz8fOLj4wkJCcFsNtOmTRtWr15dZe20adMwmUw89dRTtmWHDx/GZDJV+fr0008BWLhw4QVrcnNzAVi/fn2V4zk5OdU5BNc8k5MTxT2fAKDjsU8pKjzt4I5ERERqhkt1isPCwpg2bRpRUVEYhsGiRYsYPnw4O3fupGPHjpXqy8rKGDhwIIGBgSxdupTQ0FCOHDmCn59fpdqUlBTmzp1LdHS03fLw8HCys7Ptlr333ntMnz6dO+64A4C7776bwYMH29Xcf//9lJSUEBgYaLc8IyMDHx8f2/vfjl8Pug74M1nbphJhPcbWlbO44d7nHd2SiIjIVatWqBk6dKjd+1deeYU5c+awdevWKkPN/PnzycvLY/Pmzbi6ugLQokWLSnVFRUXExcUxb948Xn75ZbsxZ2dngoOD7ZYtX76ckSNH4uXlBUCjRo1o1KiRbfzkyZOsW7eODz74oNK+AgMDqwxV1xMnZ2dyOj5MRPpkWmUuwnL+Hzi7VOufgoiISL1zxXNqLBYLiYmJFBcXExsbW2XNypUriY2NJT4+nqCgIDp16sSUKVOwWCx2dfHx8QwZMoQBAwZccr+pqamkpaUxZsyYC9Z8+OGHeHh4cNddd1Ua69q1KyEhIQwcOJBNmzZdcn+lpaUUFhbavRqCLkMepshoRCB5HN73naPbERERuWrVDjXp6el4eXlhNpt59NFHWb58OR06dKiy9uDBgyxduhSLxcLq1auZNGkSM2fOtDsbk5iYyI4dO5g6depl7f+DDz6gffv29OnT56I1f/7zn+3O3oSEhPDuu++ybNkyli1bRnh4OP369WPHjh0X3d/UqVPx9fW1vcLDwy+rz/rO7O7BwUadADi592sHdyMiInL1TIZhGNVZoaysjKysLAoKCli6dCnvv/8+33zzTZXBpk2bNpSUlHDo0CGcnZ0BeO2115g+fTrZ2dkcPXqUHj16kJycbJtL069fP7p27cobb7xRaXvnzp0jJCSESZMm8de//rXK/rZs2UKfPn3Yvn07MTExF/0st9xyCxEREfzrX/+6YE1paSmlpaW294WFhYSHh1NQUGA3N+datGXRs8Qems0Oz5vp/rfPHd2OiIg0cIWFhfj6+tbad2i1J1K4ubkRGRkJQExMDCkpKcyaNYu5c+dWqg0JCcHV1dUWaADat29PTk4OZWVlpKamkpubS/fu3W3jFouFDRs2MHv2bEpLS+3WXbp0KWfPnmXUqFEX7O/999+na9eulww0AL169eLbby/+HCSz2YzZbL7ktq5F/u37waHZtChOw7BaMTnpCn8REbl2XfW3mNVqtTuT8Wt9+/YlMzMTq9VqW7Z//35CQkJwc3Ojf//+pKenk5aWZnv16NGDuLg40tLS7AINVPysNGzYMJo2bVrl/oqKiliyZMlF59v8WlpaGiEhIZf5SRueVl1uosRwpTGFZB3Y7eh2RERErkq1ztRMnDiRO+64g4iICM6cOcPixYtZv349SUlJAIwaNYrQ0FDb/JjHHnuM2bNnk5CQwBNPPMGBAweYMmUKTz75JADe3t506tTJbh+enp4EBARUWp6ZmcmGDRsueI8bgE8++YTz589z7733Vhp74403aNmyJR07dqSkpIT333+fdevWsWbNmuocggbFzezOXnMHOpbtImf3VzRv29XRLYmIiFyxaoWa3NxcRo0aRXZ2Nr6+vkRHR5OUlMTAgQMByMrKwulXP2GEh4eTlJTEuHHjiI6OJjQ0lISEBMaPH1/tRufPn09YWBi33377BWs++OAD/vCHP1R5yXZZWRl//etfOXbsGB4eHkRHR7N27VpuvfXWavfSkBQG9YKju3A+uhmoep6SiIjItaDaE4Wvd7U9yamu7fl2JZ3W3scJAgh8LlPzakREpNbU9neovsGuc6273Uq54UwQP5N9ZL+j2xEREbliCjXXuUae3vzo2gaAY7vWXtY6lvPnMX41+VtERKQ+UKgRTjftCYBx+NJ3WC4+k0/2Kx05MKW3go2IiNQrCjWCR9RNADQr2HnJ2u+/TiTMyKHN+f0c/j6ltlsTERG5bAo1Qsvu/bEYJsKMbE4eP3zRWtfvl9n+fCLtv7XcmYiIyOVTqBF8/AI45NIKgKydF55Xk5d7jI5nt9veNzq6sdZ7ExERuVwKNQLAqYAeAJw/dOF5NQfWf4SLycrP+AIQdW43pSVn66Q/ERGRS1GoEQDcWlfMqwnMS71gjc+B5QAciHyQn/HFw1RK5o71ddGeiIjIJSnUCAAtut0GQEvrEfJP5VQaP344g/bl+7AaJlrdOppDPhVXTBXuvX4fMyEiIvWLQo0A0DgwlMNO4QAc2lF5Xs2Rbz4E4HtzNIGhLbG27Fex3onNddWiiIjIRSnUiM0J/xgAyjIqn30JPrIKgOK2vwegec87AYgs309B3slK9Ucz09m+6j3dy0ZEROqMQo3YmDvcAUDvn//Dd8vftC0/tHcbLa2HKTOcaXtrxRPQg8Jac8QpDGeTwY8p9pd2l5acxeXfv6fH9r+xa90ndfcBRETkuqZQIzZdbh3J1qB7AIhJe44d/10IQM6mjwDY69kb38ZNbfU5jXsDUL7f/ueqnZ/NJISKszfl6StquWsREZEKCjViY3Jyovcj7/Cd/xCcTQadtjzN7vXLaHF8NQDWTnfZ1ZvbDgCgWd53tmVnCvJou/892/vIgk1Yzp+vg+5FROR6p1AjdkxOTsTEf8gOr5txM1lo//VDhHCSYsOdDreMtKtt3Wsw5w0nwo3jZB/JAGDP0in4U8hRUzMK8MSfM2Rsv7wHZYqIiFwNhRqpxNnFhY5jP2G3ewyuJgsA+/xuppGnt12dt29jMt3aAXB0+2p+PvET0Vn/AuBkr79zwKcPAIU7V9Rd8yIict1SqJEqmd09iBy7nO9dO2I1THj1+UuVdaeD+wLgfPgbDix9Hk9TCQdcoug2aDRO7YcAEJa7XldBiYhIrVOokQvy8PKlzfgNnHp4J+17D6qyxq/TQACizmyje+5nAJTeMgmTkxNt+o6gzHAhzMgma39aXbUtIiLXKYUauShnFxcCQ1tecDyyWz+KDXd8OIubyUK6uRudbhoOgJePPz806gbA8e+W10W7IiJyHVOokavi6mbmgEdX23v3wS/ajZ9rVXGGxz8ruS7bEhGR65BCjVy18qiKuwunet9GVLeb7cZa9q24DLxN+Q+cyjla572JiMj1Q6FGrlqPEU+wb1AineI/qjQWGNqSAy5ROJkMDm5a5oDuRETkeqFQI1fN5OREh9g7MLt7VDl+KrQ/AG4//rfKcRERkZqgUCO1LqjnHwBoV7ydc8VnHNyNiIg0VAo1UutaduhJNk1xN5Xzw6b/OLodERFpoBRqpNaZnJw40rQfAOX7vnBsMyIi0mAp1Eid8IoeCkC7/PWc+OlHB3cjIiINUbVCzZw5c4iOjsbHxwcfHx9iY2P58ssvL7pOfn4+8fHxhISEYDabadOmDatXr66ydtq0aZhMJp566inbssOHD2Mymap8ffrpp7a6qsYTExPttr9+/Xq6d++O2WwmMjKShQsXVufjy1VoHzuEA86R+HCWUx/eryd3i4hIjatWqAkLC2PatGmkpqayfft2brvtNoYPH87evXurrC8rK2PgwIEcPnyYpUuXkpGRwbx58wgNDa1Um5KSwty5c4mOjrZbHh4eTnZ2tt3rhRdewMvLizvuuMOudsGCBXZ1I0aMsI0dOnSIIUOGcOutt5KWlsZTTz3FX/7yF5KSkqpzCOQKObu44H7PQs4aZjqW7Sbl3885uiUREWlgXKpTPHToULv3r7zyCnPmzGHr1q107NixUv38+fPJy8tj8+bNuLq6AtCiRYtKdUVFRcTFxTFv3jxefvlluzFnZ2eCg4Ptli1fvpyRI0fi5eVlt9zPz69S7S/effddWrZsycyZMwFo37493377La+//jqDBlX9XCOpWeGRnfmu6yR67foHPQ7N4Yft/WnXo7+j2xIRkQbiiufUWCwWEhMTKS4uJjY2tsqalStXEhsbS3x8PEFBQXTq1IkpU6ZgsVjs6uLj4xkyZAgDBgy45H5TU1NJS0tjzJgxlcbi4+Np0qQJvXr1Yv78+RiGYRvbsmVLpe0PGjSILVu2XHR/paWlFBYW2r3kyvUcHs927/64mKz4fPEohfk/O7olERFpIKp1pgYgPT2d2NhYSkpK8PLyYvny5XTo0KHK2oMHD7Ju3Tri4uJYvXo1mZmZPP7445SXlzN58mQAEhMT2bFjBykpKZe1/w8++ID27dvTp08fu+Uvvvgit912Gx4eHqxZs4bHH3+coqIinnzySQBycnIICgqyWycoKIjCwkLOnTtHo0aNqtzf1KlTeeGFFy6rN7k0k5MTbcbM4/isG2hm5LL9g4eIGbcUk5PmrIuIyNWpdqhp27YtaWlpFBQUsHTpUkaPHs0333xTZbCxWq0EBgby3nvv4ezsTExMDMeOHWP69OlMnjyZo0ePkpCQQHJyMu7u7pfc97lz51i8eDGTJk2qNPbrZd26daO4uJjp06fbQs2VmjhxIk8//bTtfWFhIeHh4Ve1zeudj18Ax4e8S+Dnd9HjzFccerkbheZAShsFYfEKwT2sC91uv7dOejGsVgUqEZEGotqhxs3NjcjISABiYmJISUlh1qxZzJ07t1JtSEgIrq6uODs725a1b9+enJwcysrKSE1NJTc3l+7du9vGLRYLGzZsYPbs2ZSWltqtu3TpUs6ePcuoUaMu2Wfv3r156aWXKC0txWw2ExwczIkTJ+xqTpw4gY+PzwXP0gCYzWbMZvMl9yfV065Hf7b+8CQ3ZL5BS+thOHcYzgF5QBakObvQtf//1GoPVouFXTN/R+OSLMqHv0dkl761uj8REald1Q41v2W1WiktLa1yrG/fvixevBir1YrT//2/4f379xMSEoKbmxv9+/cnPT3dbp0HHniAdu3aMX78eLtAAxU/PQ0bNoymTZtesq+0tDT8/f1tgSQ2NrbSpeTJyckXnA8kte+Ge1/gp8w/8fPR7ynN+wlLwXF8crbRsWwXXptfxbh1ZK2eRUlb8yHdz24GoOizP7KncC6dbhpea/uritVi4fut/yWsQ298/ZvU6b5FRBqaaoWaiRMncscddxAREcGZM2dYvHgx69evt10WPWrUKEJDQ5k6dSoAjz32GLNnzyYhIYEnnniCAwcOMGXKFNtPQt7e3nTq1MluH56engQEBFRanpmZyYYNG6q8x83nn3/OiRMnuOGGG3B3dyc5OZkpU6bwzDPP2GoeffRRZs+ezd///ncefPBB1q1bx5IlS/jiC93h1pHCIjsRFvn//65Pn8ymeHZXIi0/snPt4lr7Gcpy/jwBKRVXwp3GG3/TGdqsfYDthf+kx5CHamWfv2VYraTMeYjep5aRk9yUvD99RMuOvetk3yIiDVG1/m9wbm4uo0aNom3btvTv35+UlBSSkpIYOHAgAFlZWWRnZ9vqw8PDSUpKIiUlhejoaJ588kkSEhKYMGFCtRudP38+YWFh3H777ZXGXF1defvtt4mNjaVr167MnTuX1157zTYZGaBly5Z88cUXJCcn06VLF2bOnMn777+vy7nrGf+mIewOuwcA363Tsf7mSrmasnP1PJpbj1KAJ9bHtrLD62bcTBZ6pDzD1o9erJV9/ta2xFfofWoZAMGcJHDJMHatS7zEWiIiciEm49fXPcslFRYW4uvrS0FBAT4+Po5up0Eq+PkETm92wdt0jtRebxBz5wN241aLhYztazlzfD+W/J9wPnMM97M5lLn5ET7ynwSFtb7o9svLSjkxtQthRjZbWsYTO3oKlvPn2f7uw7aQsaXFY8TeP63WPuPONf+my6axOJkMtoT/BZ8TKXQs24XFMJHS5ml63/OPav/0lrJiNqaDX9Pif16jSbPmtdS5iMiVq+3vUIWaalKoqRtbPniG2KPzOOwUTvj/puHsUvFL6ZmCPA7OGUmXkqpvAXAab7JunkGX2y48yfi7ZW/QK30yefhg/ms6nt5+QMXPQVv/9Q9iD71NueFMdtw6Itp0remPxv4d3xD+n7toZCpjW8BwesUv5Pz5cna+O4ZeeZ8DsK3xMGIe+wAXV7fL2mbq6gXEfPcUAIecmtM4PhnfgKCLryQiUscUauoZhZq6UXD6FKZZ0fhQzPYe0+nxu4fJOZrJ2QV/pJX1MOcMNzLdO3GuUTAW71CcfZvh//1HRFkyAdgaHEf3B17DzWx/q4DSkrOcnhZNMCfZGvU0N8RNrrTvXf8cSJdz37GrUW+6jF9T7b5PHNpL4U/fU37yAE5nT2H1CcMcGIlvaFtcXM14fvIHmpDPbveedPjraltwMaxWtn38Mr32v4aTyeA7/9/R84l/XfKMzf4d64n4z124m8opM5xxM1nY79KGZk+uwcvHv1r9i4jUJoWaekahpu5sWTCe2CPvctTUjHND5+C/8n6acppT+JE37EPadL/Frr605Cw7P3iSG05WPOg0w6UtLsPfpFXHXrZgsO2TafT+fion8cf773tw9/CqtN+s/WmEfHQbriYLu/vNJ7rfHy/Za/qG/xDw9d9oZpy4ZC3AQacWNE34Gm/fxpXGdvx3IV22PIWzyWBL80eJfeCfF9xO9pEMXBfcThPy2dWoNz6/ewn/T/+AH0XsMXcl8qnVuDfyvKyeRERqm0JNPaNQU3fOFORheb0zfhRhMUw4mwwOOTXHffSnhDRve8H1dq75N603/x0figHIoSlHAvrg2mYg4Vsm0ZTTbGv/v/S+e/wFt7F1ziPccCKRI07hNJuQiqvbhe9VtG3JdGL2TsHFZAXgJP7kuoVR7Nkci0cTXM/8hPfZnwg8fxx/CsmhKaa/JF107s8v4Qsgpesr9Bwxtsrjc2pWP1paj3DQqQWBT63Hy8ef/Tu+IfQ/I/E0lbDToy+dx6247J+xRERqk0JNPaNQU7e2LHqW2EOzAdjtHkOLRz/Fxy/gkusdP5zBiSVP0aE4BbOp3G4sm6Y0nrAbs7vHBdcvOH0K66xu+FPI1rbjueGe/61UYzl/npT3HuOG3CUAbPcZSNsx71V59uUXZwrycDO7X3Tfv9gyN57Y7H9TbjjzQ/8P6Hzz721jp09mk/XBfXQpSeEUfpwf8xXB4ZG28T2bPidqzQOYTeWk+A4i5smPcfrNfZ9EROqaQk09o1BTt84WFbB33l847xVKj9H/vOgZk6qcKz7D/m1fULIvibCfNxFizWVn79crXVFVlW1LptN738sU4Ikxdgd+Tf7/E+B/O2F5a4t4eo96uUZvFmi1WNj5xl3EnFlHkdGIvR3/Crn7CMrbTgtrVsXnM9z4acQyorrdXGn9tOTFdPo2nmJTI4pGfUVoq/Y11puIyJVQqKlnFGquXYbVSllZyWWdJQE4X17G0ak9aWk9zLYmf6Dl75/jSMoXmA5+TavC72hMIecMN76/4VW633HpkHQlSkvOkvna7XQsS680dsipOWdunnzROT+pqz+gcfNOuqmfiNQLCjX1jELN9WXPtyvptPa+KsdOEEDh8IVVniWpSQWnT3H03T/ifv4MpwJiMLe+kebdBtA4MLRW9ysiUtMUauoZhZrrz47pQ+levAGrYSLTNYqfg/rg0+F2ImNuveyzPiIiUvvfoVf9QEuRhq5D/Mfs2bGOsHa9aPOreTUiIlK/KNSIXIK7hxedbhzm6DZEROQSau5SDREREREHUqgRERGRBkGhRkRERBoEhRoRERFpEBRqREREpEFQqBEREZEGQaFGREREGgSFGhEREWkQFGpERESkQVCoERERkQZBj0mopl+e/1lYWOjgTkRERK4tv3x31taztBVqqunnn38GIDw83MGdiIiIXJt+/vlnfH19a3y7CjXV1LhxYwCysrJq5S9EKissLCQ8PJyjR4/WyqPqpTId87qnY173dMzrXkFBAREREbbv0pqmUFNNTk4V05B8fX31X4I65uPjo2Nex3TM656Oed3TMa97v3yX1vh2a2WrIiIiInVMoUZEREQaBIWaajKbzUyePBmz2ezoVq4bOuZ1T8e87umY1z0d87pX28fcZNTWdVUiIiIidUhnakRERKRBUKgRERGRBkGhRkRERBoEhRoRERFpEBRqREREpEFQqKmGt99+mxYtWuDu7k7v3r357rvvHN1SgzF16lR69uyJt7c3gYGBjBgxgoyMDLuakpIS4uPjCQgIwMvLiz/+8Y+cOHHCQR03PNOmTcNkMvHUU0/ZlumY17xjx45x7733EhAQQKNGjejcuTPbt2+3jRuGwXPPPUdISAiNGjViwIABHDhwwIEdX9ssFguTJk2iZcuWNGrUiNatW/PSSy/ZPVBRx/zqbNiwgaFDh9KsWTNMJhMrVqywG7+c45uXl0dcXBw+Pj74+fkxZswYioqKqt+MIZclMTHRcHNzM+bPn2/s3bvXeOihhww/Pz/jxIkTjm6tQRg0aJCxYMECY8+ePUZaWppx5513GhEREUZRUZGt5tFHHzXCw8ONr776yti+fbtxww03GH369HFg1w3Hd999Z7Ro0cKIjo42EhISbMt1zGtWXl6e0bx5c+P+++83tm3bZhw8eNBISkoyMjMzbTXTpk0zfH19jRUrVhi7du0yhg0bZrRs2dI4d+6cAzu/dr3yyitGQECAsWrVKuPQoUPGp59+anh5eRmzZs2y1eiYX53Vq1cbzz77rPHZZ58ZgLF8+XK78cs5voMHDza6dOlibN261di4caMRGRlp3HPPPdXuRaHmMvXq1cuIj4+3vbdYLEazZs2MqVOnOrCrhis3N9cAjG+++cYwDMPIz883XF1djU8//dRW8/333xuAsWXLFke12SCcOXPGiIqKMpKTk41bbrnFFmp0zGve+PHjjRtvvPGC41ar1QgODjamT59uW5afn2+YzWbj448/rosWG5whQ4YYDz74oN2yP/zhD0ZcXJxhGDrmNe23oeZyju++ffsMwEhJSbHVfPnll4bJZDKOHTtWrf3r56fLUFZWRmpqKgMGDLAtc3JyYsCAAWzZssWBnTVcBQUFwP9/Knpqairl5eV2fwft2rUjIiJCfwdXKT4+niFDhtgdW9Axrw0rV66kR48e/OlPfyIwMJBu3boxb9482/ihQ4fIycmxO+a+vr707t1bx/wK9enTh6+++or9+/cDsGvXLr799lvuuOMOQMe8tl3O8d2yZQt+fn706NHDVjNgwACcnJzYtm1btfanp3RfhlOnTmGxWAgKCrJbHhQUxA8//OCgrhouq9XKU089Rd++fenUqRMAOTk5uLm54efnZ1cbFBRETk6OA7psGBITE9mxYwcpKSmVxnTMa97BgweZM2cOTz/9NP/7v/9LSkoKTz75JG5ubowePdp2XKv63xod8yszYcIECgsLadeuHc7OzlgsFl555RXi4uIAdMxr2eUc35ycHAIDA+3GXVxcaNy4cbX/DhRqpN6Jj49nz549fPvtt45upUE7evQoCQkJJCcn4+7u7uh2rgtWq5UePXowZcoUALp168aePXt49913GT16tIO7a5iWLFnCRx99xOLFi+nYsSNpaWk89dRTNGvWTMe8AdLPT5ehSZMmODs7V7rq48SJEwQHBzuoq4Zp7NixrFq1iq+//pqwsDDb8uDgYMrKysjPz7er19/BlUtNTSU3N5fu3bvj4uKCi4sL33zzDW+++SYuLi4EBQXpmNewkJAQOnToYLesffv2ZGVlAdiOq/63pub87W9/Y8KECfzP//wPnTt35r777mPcuHFMnToV0DGvbZdzfIODg8nNzbUbP3/+PHl5edX+O1CouQxubm7ExMTw1Vdf2ZZZrVa++uorYmNjHdhZw2EYBmPHjmX58uWsW7eOli1b2o3HxMTg6upq93eQkZFBVlaW/g6uUP/+/UlPTyctLc326tGjB3FxcbY/65jXrL59+1a6VcH+/ftp3rw5AC1btiQ4ONjumBcWFrJt2zYd8yt09uxZnJzsv+qcnZ2xWq2Ajnltu5zjGxsbS35+PqmpqbaadevWYbVa6d27d/V2eFXTnK8jiYmJhtlsNhYuXGjs27fPePjhhw0/Pz8jJyfH0a01CI899pjh6+trrF+/3sjOzra9zp49a6t59NFHjYiICGPdunXG9u3bjdjYWCM2NtaBXTc8v776yTB0zGvad999Z7i4uBivvPKKceDAAeOjjz4yPDw8jH//+9+2mmnTphl+fn7Gf/7zH2P37t3G8OHDdXnxVRg9erQRGhpqu6T7s88+M5o0aWL8/e9/t9XomF+dM2fOGDt37jR27txpAMZrr71m7Ny50zhy5IhhGJd3fAcPHmx069bN2LZtm/Htt98aUVFRuqS7tr311ltGRESE4ebmZvTq1cvYunWro1tqMIAqXwsWLLDVnDt3znj88ccNf39/w8PDw/j9739vZGdnO67pBui3oUbHvOZ9/vnnRqdOnQyz2Wy0a9fOeO+99+zGrVarMWnSJCMoKMgwm81G//79jYyMDAd1e+0rLCw0EhISjIiICMPd3d1o1aqV8eyzzxqlpaW2Gh3zq/P1119X+b/fo0ePNgzj8o7vzz//bNxzzz2Gl5eX4ePjYzzwwAPGmTNnqt2LyTB+dVtFERERkWuU5tSIiIhIg6BQIyIiIg2CQo2IiIg0CAo1IiIi0iAo1IiIiEiDoFAjIiIiDYJCjYiIiDQICjUiIiLSICjUiIiISIOgUCMiIiINgkKNiIiINAj/D2Y947sX3bd3AAAAAElFTkSuQmCC\n"},"metadata":{}},{"output_type":"stream","name":"stdout","text":["Validation loss decreased (inf --> 5998608.000000). Saving model ...\n","Validation loss decreased (5998608.000000 --> 5998256.000000). Saving model ...\n","Validation loss decreased (5998256.000000 --> 5997948.000000). Saving model ...\n","Validation loss decreased (5997948.000000 --> 5997909.500000). Saving model ...\n","Validation loss decreased (5997909.500000 --> 5997896.000000). Saving model ...\n","Validation loss decreased (5997896.000000 --> 5997538.500000). Saving model ...\n","Validation loss decreased (5997538.500000 --> 5997399.500000). Saving model ...\n","Validation loss decreased (5997399.500000 --> 5997134.500000). Saving model ...\n","Early stopping at epoch 37\n"]},{"output_type":"display_data","data":{"text/plain":["
"],"image/png":"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7bf8+OOPDB8+nKCgILy8vOjZsydr1661226LFi144403bO9NJhPvv/8+v//97/Hw8CAqKspuDub69esxmUy2OzEvXLgQPz8/kpKSaN++PV5eXgwePNguhJ0/f54nn3wSPz8/AgICGD9+PKNHj2bEiBHV+juaM2cOrVu3xs3NjbZt2/Kvf/3L7u/v+eefJyIiArPZTLNmzXjyySdt4++88w5RUVG4u7sTFBTEXXfdVa1913fVOlOTm5vLqFGjbKfcoqOjSUpKYuDAgQBkZWXZnSEJDw8nKSmJcePGER0dTWhoKAkJCYwfP75aTWZkZDBx4kTy8vJo0aIFzz77LOPGjbONJycnk5mZSWZmJmFhYXbr/vq/KC+99BJHjhzBxcWFdu3a8cknn1zxX6hT3v4rWk9EpD47V26hw3NJdb7ffS8OwsOtZm5yP2HCBGbMmEGrVq3w9/fn6NGj3HnnnbzyyiuYzWY+/PBDhg4dSkZGBhERERfczgsvvMCrr77K9OnTeeutt4iLi+PIkSNVXlkLcPbsWWbMmMG//vUvnJycuPfee3nmmWf46KOPAPjnP//JRx99xIIFC2jfvj2zZs1ixYoV3HrrrZf92ZYvX05CQgJvvPEGAwYMYNWqVTzwwAOEhYVx6623smzZMl5//XUSExPp2LEjOTk57Nq1C4Dt27fz5JNP8q9//Ys+ffqQl5fHxo0bq3Fk679q/Qv64IMPLjq+fv36SstiY2PZunXrZe+jqm1MmzaNadOmXXCd+++/n/vvv/+i2x09ejSjR4++7D4uxa/oUI1tS0REas6LL75o+z/bAI0bN6ZLly629y+99BLLly9n5cqVjB079oLbuf/++7nnnnsAmDJlCm+++Sbfffed3X3Rfq28vJx3332X1q1bAzB27FhefPFF2/hbb73FxIkT+f3vfw/A7NmzWb16dbU+24wZM7j//vt5/PHHAXj66afZunUrM2bM4NZbbyUrK4vg4GAGDBiAq6srERER9OrVC6g48eDp6cnvfvc7vL29ad68Od26NaxpFHr20xUKsxzFcv48zpfxW62IyLWikasz+14c5JD91pQePXrYvS8qKuL555/niy++IDs7m/Pnz3Pu3DmysrIuup1f3+He09MTHx8f23ONquLh4WELNFBxscwv9QUFBZw4ccIWMACcnZ2JiYnBarVe9mf7/vvvefjh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AwZccr+pqamkpaUxZsyYC9Z8+OGHeHh4cNddd1Ua69q1KyEhIQwcOJBNmzZdcn+lpaUUFhbavRqCLkMepshoRCB5HN73naPbERERuWrVDjXp6el4eXlhNpt59NFHWb58OR06dKiy9uDBgyxduhSLxcLq1auZNGkSM2fOtDsbk5iYyI4dO5g6depl7f+DDz6gffv29OnT56I1f/7zn+3O3oSEhPDuu++ybNkyli1bRnh4OP369WPHjh0X3d/UqVPx9fW1vcLDwy+rz/rO7O7BwUadADi592sHdyMiInL1TIZhGNVZoaysjKysLAoKCli6dCnvv/8+33zzTZXBpk2bNpSUlHDo0CGcnZ0BeO2115g+fTrZ2dkcPXqUHj16kJycbJtL069fP7p27cobb7xRaXvnzp0jJCSESZMm8de//rXK/rZs2UKfPn3Yvn07MTExF/0st9xyCxEREfzrX/+6YE1paSmlpaW294WFhYSHh1NQUGA3N+datGXRs8Qems0Oz5vp/rfPHd2OiIg0cIWFhfj6+tbad2i1J1K4ubkRGRkJQExMDCkpKcyaNYu5c+dWqg0JCcHV1dUWaADat29PTk4OZWVlpKamkpubS/fu3W3jFouFDRs2MHv2bEpLS+3WXbp0KWfPnmXUqFEX7O/999+na9eulww0AL169eLbby/+HCSz2YzZbL7ktq5F/u37waHZtChOw7BaMTnpCn8REbl2XfW3mNVqtTuT8Wt9+/YlMzMTq9VqW7Z//35CQkJwc3Ojf//+pKenk5aWZnv16NGDuLg40tLS7AINVPysNGzYMJo2bVrl/oqKiliyZMlF59v8WlpaGiEhIZf5SRueVl1uosRwpTGFZB3Y7eh2RERErkq1ztRMnDiRO+64g4iICM6cOcPixYtZv349SUlJAIwaNYrQ0FDb/JjHHnuM2bNnk5CQwBNPPMGBAweYMmUKTz75JADe3t506tTJbh+enp4EBARUWp6ZmcmGDRsueI8bgE8++YTz589z7733Vhp74403aNmyJR07dqSkpIT333+fdevWsWbNmuocggbFzezOXnMHOpbtImf3VzRv29XRLYmIiFyxaoWa3NxcRo0aRXZ2Nr6+vkRHR5OUlMTAgQMByMrKwulXP2GEh4eTlJTEuHHjiI6OJjQ0lISEBMaPH1/tRufPn09YWBi33377BWs++OAD/vCHP1R5yXZZWRl//etfOXbsGB4eHkRHR7N27VpuvfXWavfSkBQG9YKju3A+uhmoep6SiIjItaDaE4Wvd7U9yamu7fl2JZ3W3scJAgh8LlPzakREpNbU9neovsGuc6273Uq54UwQP5N9ZL+j2xEREbliCjXXuUae3vzo2gaAY7vWXtY6lvPnMX41+VtERKQ+UKgRTjftCYBx+NJ3WC4+k0/2Kx05MKW3go2IiNQrCjWCR9RNADQr2HnJ2u+/TiTMyKHN+f0c/j6ltlsTERG5bAo1Qsvu/bEYJsKMbE4eP3zRWtfvl9n+fCLtv7XcmYiIyOVTqBF8/AI45NIKgKydF55Xk5d7jI5nt9veNzq6sdZ7ExERuVwKNQLAqYAeAJw/dOF5NQfWf4SLycrP+AIQdW43pSVn66Q/ERGRS1GoEQDcWlfMqwnMS71gjc+B5QAciHyQn/HFw1RK5o71ddGeiIjIJSnUCAAtut0GQEvrEfJP5VQaP344g/bl+7AaJlrdOppDPhVXTBXuvX4fMyEiIvWLQo0A0DgwlMNO4QAc2lF5Xs2Rbz4E4HtzNIGhLbG27Fex3onNddWiiIjIRSnUiM0J/xgAyjIqn30JPrIKgOK2vwegec87AYgs309B3slK9Ucz09m+6j3dy0ZEROqMQo3YmDvcAUDvn//Dd8vftC0/tHcbLa2HKTOcaXtrxRPQg8Jac8QpDGeTwY8p9pd2l5acxeXfv6fH9r+xa90ndfcBRETkuqZQIzZdbh3J1qB7AIhJe44d/10IQM6mjwDY69kb38ZNbfU5jXsDUL7f/ueqnZ/NJISKszfl6StquWsREZEKCjViY3Jyovcj7/Cd/xCcTQadtjzN7vXLaHF8NQDWTnfZ1ZvbDgCgWd53tmVnCvJou/892/vIgk1Yzp+vg+5FROR6p1AjdkxOTsTEf8gOr5txM1lo//VDhHCSYsOdDreMtKtt3Wsw5w0nwo3jZB/JAGDP0in4U8hRUzMK8MSfM2Rsv7wHZYqIiFwNhRqpxNnFhY5jP2G3ewyuJgsA+/xuppGnt12dt29jMt3aAXB0+2p+PvET0Vn/AuBkr79zwKcPAIU7V9Rd8yIict1SqJEqmd09iBy7nO9dO2I1THj1+UuVdaeD+wLgfPgbDix9Hk9TCQdcoug2aDRO7YcAEJa7XldBiYhIrVOokQvy8PKlzfgNnHp4J+17D6qyxq/TQACizmyje+5nAJTeMgmTkxNt+o6gzHAhzMgma39aXbUtIiLXKYUauShnFxcCQ1tecDyyWz+KDXd8OIubyUK6uRudbhoOgJePPz806gbA8e+W10W7IiJyHVOokavi6mbmgEdX23v3wS/ajZ9rVXGGxz8ruS7bEhGR65BCjVy18qiKuwunet9GVLeb7cZa9q24DLxN+Q+cyjla572JiMj1Q6FGrlqPEU+wb1AineI/qjQWGNqSAy5ROJkMDm5a5oDuRETkeqFQI1fN5OREh9g7MLt7VDl+KrQ/AG4//rfKcRERkZqgUCO1LqjnHwBoV7ydc8VnHNyNiIg0VAo1UutaduhJNk1xN5Xzw6b/OLodERFpoBRqpNaZnJw40rQfAOX7vnBsMyIi0mAp1Eid8IoeCkC7/PWc+OlHB3cjIiINUbVCzZw5c4iOjsbHxwcfHx9iY2P58ssvL7pOfn4+8fHxhISEYDabadOmDatXr66ydtq0aZhMJp566inbssOHD2Mymap8ffrpp7a6qsYTExPttr9+/Xq6d++O2WwmMjKShQsXVufjy1VoHzuEA86R+HCWUx/eryd3i4hIjatWqAkLC2PatGmkpqayfft2brvtNoYPH87evXurrC8rK2PgwIEcPnyYpUuXkpGRwbx58wgNDa1Um5KSwty5c4mOjrZbHh4eTnZ2tt3rhRdewMvLizvuuMOudsGCBXZ1I0aMsI0dOnSIIUOGcOutt5KWlsZTTz3FX/7yF5KSkqpzCOQKObu44H7PQs4aZjqW7Sbl3885uiUREWlgXKpTPHToULv3r7zyCnPmzGHr1q107NixUv38+fPJy8tj8+bNuLq6AtCiRYtKdUVFRcTFxTFv3jxefvlluzFnZ2eCg4Ptli1fvpyRI0fi5eVlt9zPz69S7S/effddWrZsycyZMwFo37493377La+//jqDBlX9XCOpWeGRnfmu6yR67foHPQ7N4Yft/WnXo7+j2xIRkQbiiufUWCwWEhMTKS4uJjY2tsqalStXEhsbS3x8PEFBQXTq1IkpU6ZgsVjs6uLj4xkyZAgDBgy45H5TU1NJS0tjzJgxlcbi4+Np0qQJvXr1Yv78+RiGYRvbsmVLpe0PGjSILVu2XHR/paWlFBYW2r3kyvUcHs927/64mKz4fPEohfk/O7olERFpIKp1pgYgPT2d2NhYSkpK8PLyYvny5XTo0KHK2oMHD7Ju3Tri4uJYvXo1mZmZPP7445SXlzN58mQAEhMT2bFjBykpKZe1/w8++ID27dvTp08fu+Uvvvgit912Gx4eHqxZs4bHH3+coqIinnzySQBycnIICgqyWycoKIjCwkLOnTtHo0aNqtzf1KlTeeGFFy6rN7k0k5MTbcbM4/isG2hm5LL9g4eIGbcUk5PmrIuIyNWpdqhp27YtaWlpFBQUsHTpUkaPHs0333xTZbCxWq0EBgby3nvv4ezsTExMDMeOHWP69OlMnjyZo0ePkpCQQHJyMu7u7pfc97lz51i8eDGTJk2qNPbrZd26daO4uJjp06fbQs2VmjhxIk8//bTtfWFhIeHh4Ve1zeudj18Ax4e8S+Dnd9HjzFccerkbheZAShsFYfEKwT2sC91uv7dOejGsVgUqEZEGotqhxs3NjcjISABiYmJISUlh1qxZzJ07t1JtSEgIrq6uODs725a1b9+enJwcysrKSE1NJTc3l+7du9vGLRYLGzZsYPbs2ZSWltqtu3TpUs6ePcuoUaMu2Wfv3r156aWXKC0txWw2ExwczIkTJ+xqTpw4gY+PzwXP0gCYzWbMZvMl9yfV065Hf7b+8CQ3ZL5BS+thOHcYzgF5QBakObvQtf//1GoPVouFXTN/R+OSLMqHv0dkl761uj8REald1Q41v2W1WiktLa1yrG/fvixevBir1YrT//2/4f379xMSEoKbmxv9+/cnPT3dbp0HHniAdu3aMX78eLtAAxU/PQ0bNoymTZtesq+0tDT8/f1tgSQ2NrbSpeTJyckXnA8kte+Ge1/gp8w/8fPR7ynN+wlLwXF8crbRsWwXXptfxbh1ZK2eRUlb8yHdz24GoOizP7KncC6dbhpea/uritVi4fut/yWsQ298/ZvU6b5FRBqaaoWaiRMncscddxAREcGZM2dYvHgx69evt10WPWrUKEJDQ5k6dSoAjz32GLNnzyYhIYEnnniCAwcOMGXKFNtPQt7e3nTq1MluH56engQEBFRanpmZyYYNG6q8x83nn3/OiRMnuOGGG3B3dyc5OZkpU6bwzDPP2GoeffRRZs+ezd///ncefPBB1q1bx5IlS/jiC93h1pHCIjsRFvn//65Pn8ymeHZXIi0/snPt4lr7Gcpy/jwBKRVXwp3GG3/TGdqsfYDthf+kx5CHamWfv2VYraTMeYjep5aRk9yUvD99RMuOvetk3yIiDVG1/m9wbm4uo0aNom3btvTv35+UlBSSkpIYOHAgAFlZWWRnZ9vqw8PDSUpKIiUlhejoaJ588kkSEhKYMGFCtRudP38+YWFh3H777ZXGXF1defvtt4mNjaVr167MnTuX1157zTYZGaBly5Z88cUXJCcn06VLF2bOnMn777+vy7nrGf+mIewOuwcA363Tsf7mSrmasnP1PJpbj1KAJ9bHtrLD62bcTBZ6pDzD1o9erJV9/ta2xFfofWoZAMGcJHDJMHatS7zEWiIiciEm49fXPcslFRYW4uvrS0FBAT4+Po5up0Eq+PkETm92wdt0jtRebxBz5wN241aLhYztazlzfD+W/J9wPnMM97M5lLn5ET7ynwSFtb7o9svLSjkxtQthRjZbWsYTO3oKlvPn2f7uw7aQsaXFY8TeP63WPuPONf+my6axOJkMtoT/BZ8TKXQs24XFMJHS5ml63/OPav/0lrJiNqaDX9Pif16jSbPmtdS5iMiVq+3vUIWaalKoqRtbPniG2KPzOOwUTvj/puHsUvFL6ZmCPA7OGUmXkqpvAXAab7JunkGX2y48yfi7ZW/QK30yefhg/ms6nt5+QMXPQVv/9Q9iD71NueFMdtw6Itp0remPxv4d3xD+n7toZCpjW8BwesUv5Pz5cna+O4ZeeZ8DsK3xMGIe+wAXV7fL2mbq6gXEfPcUAIecmtM4PhnfgKCLryQiUscUauoZhZq6UXD6FKZZ0fhQzPYe0+nxu4fJOZrJ2QV/pJX1MOcMNzLdO3GuUTAW71CcfZvh//1HRFkyAdgaHEf3B17DzWx/q4DSkrOcnhZNMCfZGvU0N8RNrrTvXf8cSJdz37GrUW+6jF9T7b5PHNpL4U/fU37yAE5nT2H1CcMcGIlvaFtcXM14fvIHmpDPbveedPjraltwMaxWtn38Mr32v4aTyeA7/9/R84l/XfKMzf4d64n4z124m8opM5xxM1nY79KGZk+uwcvHv1r9i4jUJoWaekahpu5sWTCe2CPvctTUjHND5+C/8n6acppT+JE37EPadL/Frr605Cw7P3iSG05WPOg0w6UtLsPfpFXHXrZgsO2TafT+fion8cf773tw9/CqtN+s/WmEfHQbriYLu/vNJ7rfHy/Za/qG/xDw9d9oZpy4ZC3AQacWNE34Gm/fxpXGdvx3IV22PIWzyWBL80eJfeCfF9xO9pEMXBfcThPy2dWoNz6/ewn/T/+AH0XsMXcl8qnVuDfyvKyeRERqm0JNPaNQU3fOFORheb0zfhRhMUw4mwwOOTXHffSnhDRve8H1dq75N603/x0figHIoSlHAvrg2mYg4Vsm0ZTTbGv/v/S+e/wFt7F1ziPccCKRI07hNJuQiqvbhe9VtG3JdGL2TsHFZAXgJP7kuoVR7Nkci0cTXM/8hPfZnwg8fxx/CsmhKaa/JF107s8v4Qsgpesr9Bwxtsrjc2pWP1paj3DQqQWBT63Hy8ef/Tu+IfQ/I/E0lbDToy+dx6247J+xRERqk0JNPaNQU7e2LHqW2EOzAdjtHkOLRz/Fxy/gkusdP5zBiSVP0aE4BbOp3G4sm6Y0nrAbs7vHBdcvOH0K66xu+FPI1rbjueGe/61UYzl/npT3HuOG3CUAbPcZSNsx71V59uUXZwrycDO7X3Tfv9gyN57Y7H9TbjjzQ/8P6Hzz721jp09mk/XBfXQpSeEUfpwf8xXB4ZG28T2bPidqzQOYTeWk+A4i5smPcfrNfZ9EROqaQk09o1BTt84WFbB33l847xVKj9H/vOgZk6qcKz7D/m1fULIvibCfNxFizWVn79crXVFVlW1LptN738sU4Ikxdgd+Tf7/E+B/O2F5a4t4eo96uUZvFmi1WNj5xl3EnFlHkdGIvR3/Crn7CMrbTgtrVsXnM9z4acQyorrdXGn9tOTFdPo2nmJTI4pGfUVoq/Y11puIyJVQqKlnFGquXYbVSllZyWWdJQE4X17G0ak9aWk9zLYmf6Dl75/jSMoXmA5+TavC72hMIecMN76/4VW633HpkHQlSkvOkvna7XQsS680dsipOWdunnzROT+pqz+gcfNOuqmfiNQLCjX1jELN9WXPtyvptPa+KsdOEEDh8IVVniWpSQWnT3H03T/ifv4MpwJiMLe+kebdBtA4MLRW9ysiUtMUauoZhZrrz47pQ+levAGrYSLTNYqfg/rg0+F2ImNuveyzPiIiUvvfoVf9QEuRhq5D/Mfs2bGOsHa9aPOreTUiIlK/KNSIXIK7hxedbhzm6DZEROQSau5SDREREREHUqgRERGRBkGhRkRERBoEhRoRERFpEBRqREREpEFQqBEREZEGQaFGREREGgSFGhEREWkQFGpERESkQVCoERERkQZBj0mopl+e/1lYWOjgTkRERK4tv3x31taztBVqqunnn38GIDw83MGdiIiIXJt+/vlnfH19a3y7CjXV1LhxYwCysrJq5S9EKissLCQ8PJyjR4/WyqPqpTId87qnY173dMzrXkFBAREREbbv0pqmUFNNTk4V05B8fX31X4I65uPjo2Nex3TM656Oed3TMa97v3yX1vh2a2WrIiIiInVMoUZEREQaBIWaajKbzUyePBmz2ezoVq4bOuZ1T8e87umY1z0d87pX28fcZNTWdVUiIiIidUhnakRERKRBUKgRERGRBkGhRkRERBoEhRoRERFpEBRqREREpEFQqKmGt99+mxYtWuDu7k7v3r357rvvHN1SgzF16lR69uyJt7c3gYGBjBgxgoyMDLuakpIS4uPjCQgIwMvLiz/+8Y+cOHHCQR03PNOmTcNkMvHUU0/ZlumY17xjx45x7733EhAQQKNGjejcuTPbt2+3jRuGwXPPPUdISAiNGjViwIABHDhwwIEdX9ssFguTJk2iZcuWNGrUiNatW/PSSy/ZPVBRx/zqbNiwgaFDh9KsWTNMJhMrVqywG7+c45uXl0dcXBw+Pj74+fkxZswYioqKqt+MIZclMTHRcHNzM+bPn2/s3bvXeOihhww/Pz/jxIkTjm6tQRg0aJCxYMECY8+ePUZaWppx5513GhEREUZRUZGt5tFHHzXCw8ONr776yti+fbtxww03GH369HFg1w3Hd999Z7Ro0cKIjo42EhISbMt1zGtWXl6e0bx5c+P+++83tm3bZhw8eNBISkoyMjMzbTXTpk0zfH19jRUrVhi7du0yhg0bZrRs2dI4d+6cAzu/dr3yyitGQECAsWrVKuPQoUPGp59+anh5eRmzZs2y1eiYX53Vq1cbzz77rPHZZ58ZgLF8+XK78cs5voMHDza6dOlibN261di4caMRGRlp3HPPPdXuRaHmMvXq1cuIj4+3vbdYLEazZs2MqVOnOrCrhis3N9cAjG+++cYwDMPIz883XF1djU8//dRW8/333xuAsWXLFke12SCcOXPGiIqKMpKTk41bbrnFFmp0zGve+PHjjRtvvPGC41ar1QgODjamT59uW5afn2+YzWbj448/rosWG5whQ4YYDz74oN2yP/zhD0ZcXJxhGDrmNe23oeZyju++ffsMwEhJSbHVfPnll4bJZDKOHTtWrf3r56fLUFZWRmpqKgMGDLAtc3JyYsCAAWzZssWBnTVcBQUFwP9/Knpqairl5eV2fwft2rUjIiJCfwdXKT4+niFDhtgdW9Axrw0rV66kR48e/OlPfyIwMJBu3boxb9482/ihQ4fIycmxO+a+vr707t1bx/wK9enTh6+++or9+/cDsGvXLr799lvuuOMOQMe8tl3O8d2yZQt+fn706NHDVjNgwACcnJzYtm1btfanp3RfhlOnTmGxWAgKCrJbHhQUxA8//OCgrhouq9XKU089Rd++fenUqRMAOTk5uLm54efnZ1cbFBRETk6OA7psGBITE9mxYwcpKSmVxnTMa97BgweZM2cOTz/9NP/7v/9LSkoKTz75JG5ubowePdp2XKv63xod8yszYcIECgsLadeuHc7OzlgsFl555RXi4uIAdMxr2eUc35ycHAIDA+3GXVxcaNy4cbX/DhRqpN6Jj49nz549fPvtt45upUE7evQoCQkJJCcn4+7u7uh2rgtWq5UePXowZcoUALp168aePXt49913GT16tIO7a5iWLFnCRx99xOLFi+nYsSNpaWk89dRTNGvWTMe8AdLPT5ehSZMmODs7V7rq48SJEwQHBzuoq4Zp7NixrFq1iq+//pqwsDDb8uDgYMrKysjPz7er19/BlUtNTSU3N5fu3bvj4uKCi4sL33zzDW+++SYuLi4EBQXpmNewkJAQOnToYLesffv2ZGVlAdiOq/63pub87W9/Y8KECfzP//wPnTt35r777mPcuHFMnToV0DGvbZdzfIODg8nNzbUbP3/+PHl5edX+O1CouQxubm7ExMTw1Vdf2ZZZrVa++uorYmNjHdhZw2EYBmPHjmX58uWsW7eOli1b2o3HxMTg6upq93eQkZFBVlaW/g6uUP/+/UlPTyctLc326tGjB3FxcbY/65jXrL59+1a6VcH+/ftp3rw5AC1btiQ4ONjumBcWFrJt2zYd8yt09uxZnJzsv+qcnZ2xWq2Ajnltu5zjGxsbS35+PqmpqbaadevWYbVa6d27d/V2eFXTnK8jiYmJhtlsNhYuXGjs27fPePjhhw0/Pz8jJyfH0a01CI899pjh6+trrF+/3sjOzra9zp49a6t59NFHjYiICGPdunXG9u3bjdjYWCM2NtaBXTc8v776yTB0zGvad999Z7i4uBivvPKKceDAAeOjjz4yPDw8jH//+9+2mmnTphl+fn7Gf/7zH2P37t3G8OHDdXnxVRg9erQRGhpqu6T7s88+M5o0aWL8/e9/t9XomF+dM2fOGDt37jR27txpAMZrr71m7Ny50zhy5IhhGJd3fAcPHmx069bN2LZtm/Htt98aUVFRuqS7tr311ltGRESE4ebmZvTq1cvYunWro1tqMIAqXwsWLLDVnDt3znj88ccNf39/w8PDw/j9739vZGdnO67pBui3oUbHvOZ9/vnnRqdOnQyz2Wy0a9fOeO+99+zGrVarMWnSJCMoKMgwm81G//79jYyMDAd1e+0rLCw0EhISjIiICMPd3d1o1aqV8eyzzxqlpaW2Gh3zq/P1119X+b/fo0ePNgzj8o7vzz//bNxzzz2Gl5eX4ePjYzzwwAPGmTNnqt2LyTB+dVtFERERkWuU5tSIiIhIg6BQIyIiIg2CQo2IiIg0CAo1IiIi0iAo1IiIiEiDoFAjIiIiDYJCjYiIiDQICjUiIiLSICjUiIiISIOgUCMiIiINgkKNiIiINAj/D2Y947sX3bd3AAAAAElFTkSuQmCC\n"},"metadata":{}}]},{"cell_type":"code","source":["# load the model\n","\n","model.load_state_dict(torch.load('/content/drive/MyDrive/Colab/instate_v2/state_lang.pt'))"],"metadata":{"id":"VAh7kU6zOalo"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["langs = df.columns.to_list()\n","# remove first element in columns\n","langs.pop(0)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":35},"id":"fsDdKC55FNLO","executionInfo":{"status":"ok","timestamp":1720505061284,"user_tz":420,"elapsed":267,"user":{"displayName":"Rajashekar Chintalapati","userId":"03596288833202137831"}},"outputId":"b3fdcdab-755f-4db9-ab30-f986e4e5b7c2"},"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":["'last_name'"],"application/vnd.google.colaboratory.intrinsic+json":{"type":"string"}},"metadata":{},"execution_count":39}]},{"cell_type":"code","source":["len(langs)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"BVMjrjsVF0wn","executionInfo":{"status":"ok","timestamp":1720505067182,"user_tz":420,"elapsed":237,"user":{"displayName":"Rajashekar Chintalapati","userId":"03596288833202137831"}},"outputId":"d89aaae2-5045-4a85-b114-bf4e85503a2d"},"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":["37"]},"metadata":{},"execution_count":41}]},{"cell_type":"code","source":["# verify on test dataset\n","model.eval()\n","total_matches = 0\n","\n","with torch.no_grad():\n"," for batch in test_loader:\n"," last_names = batch['last_names'].to(device)\n"," labels = batch['labels'].to(device)\n"," lengths = batch['lengths']\n"," outputs = model(last_names, lengths)\n"," # find the max index on each row\n"," _, predicted = torch.max(outputs, 1)\n"," _, true = torch.max(labels, 1)\n"," # count matches between predicted and true\n"," matches = (predicted == true).sum().item()\n"," total_matches += matches\n","\n","# find ratio between matches and actual\n","ratio = total_matches / len(test_df)\n","print(f\"Percent of first lang matches: {ratio}\")"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"fTOh_E99vKIk","executionInfo":{"status":"ok","timestamp":1720505481611,"user_tz":420,"elapsed":4943,"user":{"displayName":"Rajashekar Chintalapati","userId":"03596288833202137831"}},"outputId":"aec5fbec-21ac-4c9e-a536-92e60e2ebb4c"},"execution_count":50,"outputs":[{"output_type":"stream","name":"stdout","text":["Percent of first lang matches: 0.4030826597198279\n"]}]},{"cell_type":"code","source":["# do inference based on last_name\n","def infer(lastname):\n"," with torch.no_grad():\n"," last_name_indices = [char2idx[char] for char in lastname]\n"," last_name_tensor = torch.tensor(last_name_indices, dtype=torch.long).unsqueeze(0).to(device)\n"," lengths = torch.tensor([len(lastname)], dtype=torch.long)\n"," outputs = model(last_name_tensor, lengths)\n"," # get top 3 values index of each output\n"," _, predicted = torch.topk(outputs, 3, dim=1)\n"," # index them with langs and send actual langs\n"," pred_langs = []\n"," for i in range(3):\n"," pred_langs.append(langs[predicted[0][i].item()])\n"," pred_scores = []\n"," for i in range(3):\n"," pred_scores.append(outputs[0][predicted[0][i].item()].item())\n"," return pred_langs, pred_scores"],"metadata":{"id":"2ZatevadE1xW"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["infer(\"sood\")"],"metadata":{"id":"jK6Kp90XIosp"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["infer(\"chintalapati\")"],"metadata":{"id":"smFjuZXUKhg4"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":[],"metadata":{"id":"aX5rpklSLLZu"},"execution_count":null,"outputs":[]}]} \ No newline at end of file +{"cells":[{"cell_type":"code","execution_count":1,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":1086,"status":"ok","timestamp":1722031538529,"user":{"displayName":"Rajashekar Chintalapati","userId":"03596288833202137831"},"user_tz":420},"id":"UKVxCk82f3ny","outputId":"a9068fd1-0e6e-4c9d-a03a-988c3eb14aea"},"outputs":[{"output_type":"stream","name":"stdout","text":["/content/drive/MyDrive/Colab/instate_v2\n"]}],"source":["%cd /content/drive/MyDrive/Colab/instate_v2/"]},{"cell_type":"code","execution_count":2,"metadata":{"executionInfo":{"elapsed":5050,"status":"ok","timestamp":1722031547657,"user":{"displayName":"Rajashekar Chintalapati","userId":"03596288833202137831"},"user_tz":420},"id":"0gP6HREgsg6R"},"outputs":[],"source":["import numpy as np\n","import pandas as pd\n","\n","import torch\n","import torch.nn as nn\n","import torch.optim as optim\n","from torch.utils.data import DataLoader, Dataset\n","from torch.nn.utils.rnn import pad_sequence\n","\n","from sklearn.model_selection import train_test_split\n","from sklearn.preprocessing import StandardScaler, MinMaxScaler\n","\n","from fastprogress import master_bar, progress_bar"]},{"cell_type":"code","execution_count":3,"metadata":{"executionInfo":{"elapsed":4573,"status":"ok","timestamp":1722031552228,"user":{"displayName":"Rajashekar Chintalapati","userId":"03596288833202137831"},"user_tz":420},"id":"25xhq-XxstQN"},"outputs":[],"source":["# Load the data\n","df = pd.read_csv('data/final/all_states_with_languages_agg.csv')"]},{"cell_type":"code","execution_count":4,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":290},"executionInfo":{"elapsed":7,"status":"ok","timestamp":1722031552228,"user":{"displayName":"Rajashekar Chintalapati","userId":"03596288833202137831"},"user_tz":420},"id":"RYmQbOxXsyge","outputId":"92235ada-0804-4c08-ab07-f8797649646f"},"outputs":[{"output_type":"execute_result","data":{"text/plain":[" last_name sindhi nepali kannada marathi mizo adi garo tagin \\\n","0 aadhumull 0.000 0.0 0.5 0.00 0.0 0.0 0.0 0.0 \n","1 bachhar 0.500 0.0 0.0 1.00 0.0 0.0 0.0 0.0 \n","2 bachhodiya 0.125 0.0 0.0 0.25 0.0 0.0 0.0 0.0 \n","3 bachhole 0.125 0.0 0.0 0.25 0.0 0.0 0.0 0.0 \n","4 balait 0.125 0.0 0.0 0.25 0.0 0.0 0.0 0.0 \n","\n"," assamese ... telugu malayalam tamil meitei khasi gondi bodo nishi \\\n","0 0.0 ... 2.0 0.0 0.0 0.0 0.0 0.5 0.0 0.0 \n","1 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n","2 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n","3 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n","4 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n","\n"," chakma pahari and kumauni \n","0 0.0 0.0 \n","1 0.0 0.0 \n","2 0.0 0.0 \n","3 0.0 0.0 \n","4 0.0 0.0 \n","\n","[5 rows x 38 columns]"],"text/html":["\n","
\n","
\n","\n","\n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n","
last_namesindhinepalikannadamarathimizoadigarotaginassamese...telugumalayalamtamilmeiteikhasigondibodonishichakmapahari and kumauni
0aadhumull0.0000.00.50.000.00.00.00.00.0...2.00.00.00.00.00.50.00.00.00.0
1bachhar0.5000.00.01.000.00.00.00.00.0...0.00.00.00.00.00.00.00.00.00.0
2bachhodiya0.1250.00.00.250.00.00.00.00.0...0.00.00.00.00.00.00.00.00.00.0
3bachhole0.1250.00.00.250.00.00.00.00.0...0.00.00.00.00.00.00.00.00.00.0
4balait0.1250.00.00.250.00.00.00.00.0...0.00.00.00.00.00.00.00.00.00.0
\n","

5 rows × 38 columns

\n","
\n","
\n","\n","
\n"," \n","\n"," \n","\n"," \n","
\n","\n","\n","
\n"," \n","\n","\n","\n"," \n","
\n","\n","
\n","
\n"],"application/vnd.google.colaboratory.intrinsic+json":{"type":"dataframe","variable_name":"df"}},"metadata":{},"execution_count":4}],"source":["df.head()"]},{"cell_type":"code","execution_count":5,"metadata":{"executionInfo":{"elapsed":5,"status":"ok","timestamp":1722031552228,"user":{"displayName":"Rajashekar Chintalapati","userId":"03596288833202137831"},"user_tz":420},"id":"VlBZW0RKww6f"},"outputs":[],"source":["# drop Nan values\n","df.dropna(inplace=True)"]},{"cell_type":"code","execution_count":6,"metadata":{"executionInfo":{"elapsed":3178,"status":"ok","timestamp":1722031555401,"user":{"displayName":"Rajashekar Chintalapati","userId":"03596288833202137831"},"user_tz":420},"id":"jjZFBRRrwx9B"},"outputs":[],"source":["agg_dict = {col: 'sum' for col in df.columns if col != 'last_name'}\n","df = df.groupby('last_name').agg(agg_dict).reset_index()"]},{"cell_type":"code","execution_count":7,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":290},"executionInfo":{"elapsed":7,"status":"ok","timestamp":1722031555401,"user":{"displayName":"Rajashekar Chintalapati","userId":"03596288833202137831"},"user_tz":420},"id":"XyTaez6Yxahe","outputId":"ade73f10-b4b9-486c-f177-438873edbc8b"},"outputs":[{"output_type":"execute_result","data":{"text/plain":[" last_name sindhi nepali kannada marathi mizo adi garo tagin \\\n","0 aadhumull 0.000 0.0 0.5 0.00 0.0 0.0 0.0 0.0 \n","1 bachhar 0.500 0.0 0.0 1.00 0.0 0.0 0.0 0.0 \n","2 bachhodiya 0.125 0.0 0.0 0.25 0.0 0.0 0.0 0.0 \n","3 bachhole 0.125 0.0 0.0 0.25 0.0 0.0 0.0 0.0 \n","4 balait 0.125 0.0 0.0 0.25 0.0 0.0 0.0 0.0 \n","\n"," assamese ... telugu malayalam tamil meitei khasi gondi bodo nishi \\\n","0 0.0 ... 2.0 0.0 0.0 0.0 0.0 0.5 0.0 0.0 \n","1 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n","2 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n","3 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n","4 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n","\n"," chakma pahari and kumauni \n","0 0.0 0.0 \n","1 0.0 0.0 \n","2 0.0 0.0 \n","3 0.0 0.0 \n","4 0.0 0.0 \n","\n","[5 rows x 38 columns]"],"text/html":["\n","
\n","
\n","\n","\n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n","
last_namesindhinepalikannadamarathimizoadigarotaginassamese...telugumalayalamtamilmeiteikhasigondibodonishichakmapahari and kumauni
0aadhumull0.0000.00.50.000.00.00.00.00.0...2.00.00.00.00.00.50.00.00.00.0
1bachhar0.5000.00.01.000.00.00.00.00.0...0.00.00.00.00.00.00.00.00.00.0
2bachhodiya0.1250.00.00.250.00.00.00.00.0...0.00.00.00.00.00.00.00.00.00.0
3bachhole0.1250.00.00.250.00.00.00.00.0...0.00.00.00.00.00.00.00.00.00.0
4balait0.1250.00.00.250.00.00.00.00.0...0.00.00.00.00.00.00.00.00.00.0
\n","

5 rows × 38 columns

\n","
\n","
\n","\n","
\n"," \n","\n"," \n","\n"," \n","
\n","\n","\n","
\n"," \n","\n","\n","\n"," \n","
\n","\n","
\n","
\n"],"application/vnd.google.colaboratory.intrinsic+json":{"type":"dataframe","variable_name":"df"}},"metadata":{},"execution_count":7}],"source":["df.head()"]},{"cell_type":"code","execution_count":8,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":6,"status":"ok","timestamp":1722031555401,"user":{"displayName":"Rajashekar Chintalapati","userId":"03596288833202137831"},"user_tz":420},"id":"Z3UE9qu-s9E8","outputId":"192cee5b-214a-44f3-ec68-6870ff027e14"},"outputs":[{"output_type":"execute_result","data":{"text/plain":["(783089, 38)"]},"metadata":{},"execution_count":8}],"source":["df.shape"]},{"cell_type":"code","source":["# Function to check if a string contains only English characters\n","def contains_english(s):\n"," return s.isalpha() and all(c.isascii() for c in s) # Checks if all characters are ASCII"],"metadata":{"id":"dydNpCCCKA1C","executionInfo":{"status":"ok","timestamp":1722049807039,"user_tz":420,"elapsed":977,"user":{"displayName":"Rajashekar Chintalapati","userId":"03596288833202137831"}}},"execution_count":87,"outputs":[]},{"cell_type":"code","source":["# Filter the rows that do not have English characters in the last_name column\n","df = df[df['last_name'].apply(contains_english)]"],"metadata":{"id":"QWEMKJh6KCc-","executionInfo":{"status":"ok","timestamp":1722049823679,"user_tz":420,"elapsed":1284,"user":{"displayName":"Rajashekar Chintalapati","userId":"03596288833202137831"}}},"execution_count":89,"outputs":[]},{"cell_type":"code","source":["# consider only names that are more than 2 chars\n","df = df[df['last_name'].str.len() > 2]"],"metadata":{"id":"zM3rzWRKKz63","executionInfo":{"status":"ok","timestamp":1722049912858,"user_tz":420,"elapsed":797,"user":{"displayName":"Rajashekar Chintalapati","userId":"03596288833202137831"}}},"execution_count":91,"outputs":[]},{"cell_type":"code","execution_count":92,"metadata":{"executionInfo":{"elapsed":723,"status":"ok","timestamp":1722049919949,"user":{"displayName":"Rajashekar Chintalapati","userId":"03596288833202137831"},"user_tz":420},"id":"DbTeH-Vbt2Ah"},"outputs":[],"source":["# Splitting data into train, validation, and test sets\n","train_df, temp_df = train_test_split(df, test_size=0.2, random_state=42)\n","val_df, test_df = train_test_split(temp_df, test_size=0.5, random_state=42)"]},{"cell_type":"code","execution_count":93,"metadata":{"executionInfo":{"elapsed":12276,"status":"ok","timestamp":1722049935514,"user":{"displayName":"Rajashekar Chintalapati","userId":"03596288833202137831"},"user_tz":420},"id":"eskWsliVsdOD"},"outputs":[],"source":["train_df.to_csv('data/final/train.csv', index=False)\n","val_df.to_csv('data/final/val.csv', index=False)\n","test_df.to_csv('data/final/test.csv', index=False)"]},{"cell_type":"code","execution_count":94,"metadata":{"executionInfo":{"elapsed":2737,"status":"ok","timestamp":1722049947372,"user":{"displayName":"Rajashekar Chintalapati","userId":"03596288833202137831"},"user_tz":420},"id":"ex8BDHt88vbL"},"outputs":[],"source":["# load train_df, val_df and test_df\n","train_df = pd.read_csv('data/final/train.csv')\n","val_df = pd.read_csv('data/final/val.csv')\n","test_df = pd.read_csv('data/final/test.csv')"]},{"cell_type":"markdown","metadata":{"id":"tv-dC3rCzuTg"},"source":["## Loading dataset"]},{"cell_type":"code","execution_count":95,"metadata":{"executionInfo":{"elapsed":2,"status":"ok","timestamp":1722049947372,"user":{"displayName":"Rajashekar Chintalapati","userId":"03596288833202137831"},"user_tz":420},"id":"q1mLaJ6ts_fh"},"outputs":[],"source":["class LangDataset(Dataset):\n"," def __init__(self, dataframe, char2idx):\n"," self.data = dataframe\n"," self.last_names = self.data['last_name'].values\n"," self.labels = self.data.drop(['last_name'], axis=1).values.astype(float)\n"," self.char2idx = char2idx\n","\n"," # Normalize the labels\n"," # self.scaler = StandardScaler()\n"," # self.scaler = MinMaxScaler()\n"," # self.labels = self.scaler.fit_transform(self.labels)\n","\n"," def __len__(self):\n"," return len(self.data)\n","\n"," def __getitem__(self, idx):\n"," last_name = self.last_names[idx]\n"," last_name_indices = [self.char2idx[char] for char in last_name]\n"," labels = torch.tensor(self.labels[idx], dtype=torch.float)\n"," return {'last_name': torch.tensor(last_name_indices, dtype=torch.long), 'labels': labels}"]},{"cell_type":"code","execution_count":96,"metadata":{"executionInfo":{"elapsed":924,"status":"ok","timestamp":1722049948294,"user":{"displayName":"Rajashekar Chintalapati","userId":"03596288833202137831"},"user_tz":420},"id":"GE_u7MiwupDN"},"outputs":[],"source":["# Generate Character to Index Mapping\n","chars = set()\n","for name in df['last_name']:\n"," chars.update(name)\n","char2idx = {char: idx + 1 for idx, char in enumerate(chars)}\n","char2idx[''] = 0\n","idx2char = {idx: char for char, idx in char2idx.items()}"]},{"cell_type":"code","execution_count":98,"metadata":{"executionInfo":{"elapsed":1,"status":"ok","timestamp":1722049951187,"user":{"displayName":"Rajashekar Chintalapati","userId":"03596288833202137831"},"user_tz":420},"id":"60vwdeJHucHW"},"outputs":[],"source":["# Creating datasets and dataloaders\n","train_dataset = LangDataset(train_df, char2idx)\n","val_dataset = LangDataset(val_df, char2idx)\n","test_dataset = LangDataset(test_df, char2idx)"]},{"cell_type":"code","execution_count":99,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":2,"status":"ok","timestamp":1722049951763,"user":{"displayName":"Rajashekar Chintalapati","userId":"03596288833202137831"},"user_tz":420},"id":"QjvIRB2yulqT","outputId":"72115e14-af9f-4b66-b37e-d7cbe491c41b"},"outputs":[{"output_type":"stream","name":"stdout","text":["First element in the train dataset:\n","Last Name (Character Indices): tensor([12, 17, 10, 23, 3, 14, 17, 10])\n","Last Name (Characters): bhinathi\n","Labels: tensor([0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n"," 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.2500, 0.5000, 0.0000,\n"," 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n"," 1.0000, 0.0000, 0.2500, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n"," 0.0000])\n"]}],"source":["# display first sample of train_dataset\n","first_element = train_dataset[0]\n","\n","# Convert character indices back to the actual characters\n","last_name_characters = ''.join([idx2char[char.item()] for char in first_element['last_name']])\n","\n","# Print first element details\n","print(\"First element in the train dataset:\")\n","print(\"Last Name (Character Indices):\", first_element['last_name'])\n","print(\"Last Name (Characters):\", last_name_characters)\n","print(\"Labels:\", first_element['labels'])"]},{"cell_type":"code","execution_count":100,"metadata":{"executionInfo":{"elapsed":1121,"status":"ok","timestamp":1722049966028,"user":{"displayName":"Rajashekar Chintalapati","userId":"03596288833202137831"},"user_tz":420},"id":"UfYlDZcOy40W"},"outputs":[],"source":["def collate_fn(samples):\n"," last_names = [sample['last_name'] for sample in samples]\n"," labels = torch.stack([sample['labels'] for sample in samples])\n"," lengths = torch.tensor([len(name) for name in last_names])\n"," last_names_padded = pad_sequence(last_names, batch_first=True, padding_value=0)\n"," return {'last_names': last_names_padded, 'labels': labels, 'lengths': lengths}"]},{"cell_type":"code","execution_count":101,"metadata":{"executionInfo":{"elapsed":688,"status":"ok","timestamp":1722049968983,"user":{"displayName":"Rajashekar Chintalapati","userId":"03596288833202137831"},"user_tz":420},"id":"lsVpSJUpwjnk"},"outputs":[],"source":["batch_size = 32\n","\n","train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True, collate_fn=collate_fn)\n","val_loader = DataLoader(val_dataset, batch_size=batch_size, shuffle=False, collate_fn=collate_fn)\n","test_loader = DataLoader(test_dataset, batch_size=batch_size, shuffle=False, collate_fn=collate_fn)"]},{"cell_type":"code","execution_count":102,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":3,"status":"ok","timestamp":1722049968983,"user":{"displayName":"Rajashekar Chintalapati","userId":"03596288833202137831"},"user_tz":420},"id":"8VQTMIgfy0LD","outputId":"694c8a46-ae79-4ea0-e631-46e68a9f41fe"},"outputs":[{"output_type":"stream","name":"stdout","text":["First batch in the train DataLoader:\n","Last Names (Character Indices): tensor([[ 7, 3, 3, 18, 10, 5, 5, 3, 23, 14, 17, 10, 0, 0],\n"," [20, 3, 4, 6, 14, 21, 0, 0, 0, 0, 0, 0, 0, 0],\n"," [14, 26, 22, 17, 23, 10, 26, 8, 3, 18, 0, 0, 0, 0],\n"," [ 6, 3, 18, 10, 23, 3, 0, 0, 0, 0, 0, 0, 0, 0],\n"," [12, 3, 3, 20, 17, 3, 13, 3, 7, 3, 4, 0, 0, 0],\n"," [ 5, 4, 3, 15, 3, 23, 10, 7, 7, 0, 0, 0, 0, 0],\n"," [20, 26, 26, 20, 10, 15, 3, 23, 10, 0, 0, 0, 0, 0],\n"," [22, 3, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n"," [ 2, 3, 7, 1, 1, 4, 3, 5, 5, 3, 19, 26, 18, 3],\n"," [17, 26, 19, 3, 4, 3, 14, 10, 0, 0, 0, 0, 0, 0],\n"," [12, 3, 23, 3, 19, 3, 3, 23, 6, 3, 7, 3, 4, 3],\n"," [ 7, 3, 23, 10, 19, 3, 14, 14, 21, 0, 0, 0, 0, 0],\n"," [20, 17, 3, 4, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n"," [ 7, 3, 22, 10, 15, 10, 20, 3, 0, 0, 0, 0, 0, 0],\n"," [17, 3, 2, 10, 16, 3, 0, 0, 0, 0, 0, 0, 0, 0],\n"," [18, 1, 7, 3, 15, 20, 3, 4, 10, 0, 0, 0, 0, 0],\n"," [18, 1, 13, 11, 1, 18, 18, 0, 0, 0, 0, 0, 0, 0],\n"," [ 7, 21, 22, 21, 15, 12, 10, 13, 3, 0, 0, 0, 0, 0],\n"," [22, 3, 13, 12, 21, 23, 23, 22, 17, 3, 0, 0, 0, 0],\n"," [19, 21, 14, 17, 10, 5, 3, 18, 18, 10, 0, 0, 0, 0],\n"," [ 5, 3, 23, 20, 10, 16, 3, 4, 1, 14, 21, 18, 3, 0],\n"," [17, 3, 23, 21, 15, 3, 23, 21, 18, 21, 0, 0, 0, 0],\n"," [20, 21, 19, 21, 20, 21, 4, 14, 17, 13, 0, 0, 0, 0],\n"," [15, 21, 23, 20, 3, 4, 26, 0, 0, 0, 0, 0, 0, 0],\n"," [19, 21, 4, 21, 6, 10, 18, 3, 0, 0, 0, 0, 0, 0],\n"," [ 7, 21, 4, 5, 1, 23, 19, 0, 0, 0, 0, 0, 0, 0],\n"," [ 7, 21, 7, 7, 21, 18, 21, 4, 26, 26, 0, 0, 0, 0],\n"," [12, 17, 3, 6, 20, 1, 0, 0, 0, 0, 0, 0, 0, 0],\n"," [25, 26, 20, 21, 4, 10, 0, 0, 0, 0, 0, 0, 0, 0],\n"," [ 6, 3, 3, 18, 14, 1, 14, 10, 0, 0, 0, 0, 0, 0],\n"," [18, 3, 7, 3, 19, 3, 18, 0, 0, 0, 0, 0, 0, 0],\n"," [ 7, 26, 18, 18, 3, 23, 23, 3, 19, 3, 4, 10, 0, 0]])\n","Labels: tensor([[0.0000, 0.0000, 0.3750, ..., 0.0000, 0.0000, 0.0000],\n"," [0.0000, 0.0000, 0.0000, ..., 0.0000, 0.0000, 0.0000],\n"," [0.0000, 0.0000, 0.0000, ..., 0.0000, 0.0000, 0.0000],\n"," ...,\n"," [0.0000, 0.0000, 0.1250, ..., 0.0000, 0.0000, 0.0000],\n"," [0.0000, 0.0000, 0.2500, ..., 0.0000, 0.0000, 0.0000],\n"," [0.0000, 0.0000, 0.0000, ..., 0.0000, 0.0000, 0.0000]])\n","Lengths: tensor([12, 6, 10, 6, 11, 9, 9, 4, 14, 8, 14, 9, 5, 8, 6, 9, 7, 9,\n"," 10, 10, 13, 10, 10, 7, 8, 7, 10, 6, 6, 8, 7, 12])\n","Last Name 1 (Characters): kaalippanthi\n","Last Name 2 (Characters): darvtu\n","Last Name 3 (Characters): toshniowal\n"]}],"source":["# Get the first batch\n","first_batch = next(iter(train_loader))\n","\n","# Print the content of the first batch\n","print(\"First batch in the train DataLoader:\")\n","print(\"Last Names (Character Indices):\", first_batch['last_names'])\n","print(\"Labels:\", first_batch['labels'])\n","print(\"Lengths:\", first_batch['lengths'])\n","\n","# Convert the character indices back to characters for the first few names in the batch\n","for i in range(min(3, len(first_batch['last_names']))): # printing only the first three for brevity\n"," last_name_indices = first_batch['last_names'][i]\n"," last_name_characters = ''.join([idx2char[char.item()] for char in last_name_indices if char != 0])\n"," print(f\"Last Name {i+1} (Characters):\", last_name_characters)"]},{"cell_type":"markdown","metadata":{"id":"3ubFGsexz03t"},"source":["## Model"]},{"cell_type":"code","execution_count":103,"metadata":{"executionInfo":{"elapsed":606,"status":"ok","timestamp":1722049973946,"user":{"displayName":"Rajashekar Chintalapati","userId":"03596288833202137831"},"user_tz":420},"id":"yVBmha5YzIFj"},"outputs":[],"source":["class LangModel_v2(nn.Module):\n"," def __init__(self, vocab_size, embedding_dim, hidden_dim, output_dim):\n"," super(LangModel, self).__init__()\n"," self.embedding = nn.Embedding(vocab_size, embedding_dim)\n"," self.lstm = nn.LSTM(embedding_dim, hidden_dim, num_layers=2, dropout=0.3, batch_first=True)\n"," self.batch_norm = nn.BatchNorm1d(hidden_dim)\n"," self.fc = nn.Linear(hidden_dim, output_dim)\n"," self.dropout = nn.Dropout(0.3)\n","\n"," def forward(self, x, lengths):\n"," x = self.embedding(x)\n"," x = nn.utils.rnn.pack_padded_sequence(x, lengths, batch_first=True, enforce_sorted=False)\n"," _, (h_n, _) = self.lstm(x)\n"," h_n = h_n[-1,:,:] # Get the output of the last LSTM layer\n"," h_n = self.batch_norm(h_n) # Apply batch normalization\n"," h_n = self.dropout(h_n)\n"," output = self.fc(h_n)\n"," return output"]},{"cell_type":"code","source":["class LangModel(nn.Module):\n"," def __init__(self, vocab_size, embedding_dim, hidden_dim, output_dim):\n"," super(LangModel, self).__init__()\n"," self.embedding = nn.Embedding(vocab_size, embedding_dim)\n"," self.lstm = nn.LSTM(embedding_dim, hidden_dim, batch_first=True)\n"," self.fc = nn.Linear(hidden_dim, output_dim)\n","\n"," def forward(self, x, lengths):\n"," x = self.embedding(x)\n"," x = nn.utils.rnn.pack_padded_sequence(x, lengths, batch_first=True, enforce_sorted=False)\n"," _, (h_n, _) = self.lstm(x)\n"," h_n = h_n.squeeze(0)\n"," output = self.fc(h_n)\n"," return output"],"metadata":{"id":"DJQKKf0fLHQd","executionInfo":{"status":"ok","timestamp":1722049973946,"user_tz":420,"elapsed":1,"user":{"displayName":"Rajashekar Chintalapati","userId":"03596288833202137831"}}},"execution_count":104,"outputs":[]},{"cell_type":"code","execution_count":105,"metadata":{"executionInfo":{"elapsed":2,"status":"ok","timestamp":1722049975553,"user":{"displayName":"Rajashekar Chintalapati","userId":"03596288833202137831"},"user_tz":420},"id":"j3-F605TM8ut"},"outputs":[],"source":["class EarlyStopper:\n"," def __init__(self, patience=1, min_delta=0):\n"," self.patience = patience\n"," self.min_delta = min_delta\n"," self.counter = 0\n"," self.min_validation_loss = np.inf\n","\n"," def early_stop(self, validation_loss):\n"," if validation_loss < self.min_validation_loss:\n"," self.min_validation_loss = validation_loss\n"," self.counter = 0\n"," elif validation_loss > (self.min_validation_loss + self.min_delta):\n"," self.counter += 1\n"," if self.counter >= self.patience:\n"," return True\n"," return False"]},{"cell_type":"code","execution_count":106,"metadata":{"executionInfo":{"elapsed":1,"status":"ok","timestamp":1722049977071,"user":{"displayName":"Rajashekar Chintalapati","userId":"03596288833202137831"},"user_tz":420},"id":"BequLlSpz76o"},"outputs":[],"source":["# Initialize model, loss function, optimizer\n","vocab_size = len(char2idx)\n","embedding_dim = 50\n","hidden_dim = 128\n","output_dim = 37\n","lr = 0.0005\n","\n","device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n","\n","model = LangModel(vocab_size=vocab_size, embedding_dim=embedding_dim, hidden_dim=hidden_dim, output_dim=output_dim)\n","model.to(device)\n","criterion = nn.MSELoss()\n","optimizer = optim.Adam(model.parameters(), lr=lr)\n","\n","epochs=100\n","early_stopper = EarlyStopper(patience=10)\n","# scheduler = torch.optim.lr_scheduler.ReduceLROnPlateau(optimizer, 'min', patience=3, factor=0.5)\n","scheduler = optim.lr_scheduler.StepLR(optimizer, step_size=10, gamma=0.1)\n","# scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=60, eta_min=1e-5)"]},{"cell_type":"code","execution_count":107,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":1000},"id":"InCtTV9I2Gpv","executionInfo":{"status":"ok","timestamp":1722054558360,"user_tz":420,"elapsed":3948787,"user":{"displayName":"Rajashekar Chintalapati","userId":"03596288833202137831"}},"outputId":"c7f56220-69da-4685-c6b3-a2862a937365"},"outputs":[{"data":{"text/html":["\n","\n"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"text/html":["\n","
\n"," \n"," 8.00% [8/100 10:10<1:57:02]\n","
\n"," \n","\n","Epoch 0: Training loss 1582831.375000 validation loss 23845152.000000 with lr 0.000500

\n","Epoch 1: Training loss 1582773.375000 validation loss 23844940.000000 with lr 0.000500

\n","Epoch 2: Training loss 1582626.750000 validation loss 23844562.000000 with lr 0.000500

\n","Epoch 3: Training loss 1582498.625000 validation loss 23843902.000000 with lr 0.000500

\n","Epoch 4: Training loss 1582365.875000 validation loss 23844332.000000 with lr 0.000500

\n","Epoch 5: Training loss 1582284.500000 validation loss 23843730.000000 with lr 0.000500

\n","Epoch 6: Training loss 1582178.625000 validation loss 23844012.000000 with lr 0.000500

\n","Epoch 7: Training loss 1582124.625000 validation loss 23843890.000000 with lr 0.000500

\n","\n","

\n"," \n"," 14.26% [2608/18292 00:10<01:02]\n","
\n"," "],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"data":{"image/png":"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DQ0N1NXVBbsMaeMiIiIICwsL2vEVLEREgswwDJxOJxUVFcEuRUKE3W7H4XAEpdeTgoWISJAdCRUpKSnExMSo8Z80m2EYHDx4kLKyMgDvTNytScFCRCSIGhoavKEiKSkp2OVICIiOjgagrKyMlJSUVv9ZRDdviogE0ZF7KmJiYoJciYSSI/8+BeOeHQULEZFTgH7+kEAK5r9PChYiIiISMG06WNRUHwx2CSIiIvITbTpYfF/8WbBLEBGRAOrcuTNPPfVUk8e///77mEymFn9Ud8GCBdjt9hY9Rqho08Fi/zefBLsEEZF2yWQy/eJr+vTpzdrvhg0bGDNmTJPHDxo0iD179mCz2Zp1PAm8tv24aemWYFcgItIu7dmzx/v3X//6V6ZNm0ZxcbF3WVxcnPdvwzBoaGggPPzEHznJycl+1REZGYnD4fBrG2lZbfobi0T3l8EuQUQk4AzD4GBtfVBehmE0qUaHw+F92Ww2TCaT9/2XX35JfHw877zzDv369cNisfDRRx/xzTffcNVVV5GamkpcXBznnXceK1as8Nnvz38KMZlM/L//9/+45ppriImJoVu3brz11lve9T//KeTITxbvvvsuPXr0IC4ujmHDhvkEofr6eu644w7sdjtJSUlMnjyZgoICrr76ar/+OT333HOcfvrpREZGctZZZ/GXv/zF55/h9OnTyczMxGKxkJ6ezh133OFdP3fuXLp160ZUVBSpqalce+21fh37VNamv7HIaNhF9cFKomLiTjxYRKSNOFTXQNa0d4Ny7G0zcomJDMxHwz333MPjjz9O165dSUhIYNeuXVxxxRXMnDkTi8XCyy+/zIgRIyguLiYzM/O4+3nggQeYPXs2jz32GM888wz5+fns3LmTxMTEY44/ePAgjz/+OH/5y18wm8385je/YeLEibz66qsAPProo7z66qvMnz+fHj168PTTT/Pmm29yySWXNPnclixZwp133slTTz1FTk4OS5cu5b/+67/o2LEjl1xyCX/729948sknWbRoET179sTpdLJ582YAPvnkE+644w7+8pe/MGjQIMrLy/nwww/9uLKntjYdLCJMDezc9jFn9b802KWIiMjPzJgxg8suu8z7PjExkXPOOcf7/sEHH2TJkiW89dZbjBs37rj7GTVqFDfeeCMADz/8MHPmzOHjjz9m2LBhxxxfV1fHvHnzOP30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TiC2U3/4DlIPbGvW9iIiIhI4JsNo5QbqAeB2u7HZbLhcLuqrD5A41/PYqXv8t1jtSUGuTkSk6aqrq9mxYwddunTxq0GTyC/5pX+vfvoZarVaA37sNj9XSGLKaewhGYBd6sApIiISVG0+WADsifU8e3xgh27gFBFpSy6++GLGjx/vfd+5c2eeeuqpX9zGZDLx5ptvnvSxA7WfXzJ9+nTvU5HtRUgEi5qU3gBE6AZOEZFWMWLECIYNO/Yj/h9++CEmk4l//etffu93w4YNzZo76pcc78N9z5493s7REjghESxiMs4BwH7wu+AWIiLSTowePZrly5fz/fffH7Vu/vz59O/fn969e/u93+TkZGJiYgJR4gk5HI5j9kiSkxMawSLR04wrvsEV5EpERALAMKC2KjivJt7Pf+WVV5KcnMyCBQt8lldWVrJ48WJGjx7Nvn37uPHGGznttNOIiYmhV69evPbaa7+435//FLJ9+3YuvPBCoqKiyMrKYvny5UdtM3nyZM4880xiYmLo2rUr9913H3V1dYBn+vIHHniAzZs3YzKZMJlM3pp//lPIli1buPTSS4mOjiYpKYkxY8ZQWVnpXT9q1CiuvvpqHn/8cdLS0khKSqKwsNB7rKZobGxkxowZdOzYEYvFQp8+fVi2bJl3fW1tLePGjSMtLY2oqCg6derErFmzADAMg+nTp5OZmYnFYiE9PZ077rijycduLX49bnqqikvwzD1iMw5gNDZiModEXhKR9qruIDzsf1+fgPif3RAZe8Jh4eHh3HzzzSxYsIB7770Xk8kEwOLFi2loaODGG2+ksrKSfv36MXnyZKxWK//4xz+46aabOP300zn//PNPeIzGxkZGjhxJamoq69evx+Vy+dyPcUR8fDwLFiwgPT2dLVu2cOuttxIfH8/dd9/N9ddfz+eff86yZctYsWIF4Jkc8+eqqqrIzc0lOzubDRs2UFZWxm9/+1vGjRvnE57ee+890tLSeO+99/j666+5/vrr6dOnD7feeusJzwfg6aef5g9/+APPP/88ffv25c9//jO/+tWv2Lp1K926dWPOnDm89dZbvP7662RmZrJr1y527doFwN/+9jeefPJJFi1aRM+ePXE6nWzefOrdAhASwcLewfM/QIupjspKF3HWhCBXJCIS+m655RYee+wxVq9ezcUXXwx4fgbJy8vDZrNhs9mY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w229TVVq6y0iItIa/AoWaWlpZGVl+Szr0aMHJSUlADgcDgBKS32/ISgtLfWuczgclJX5ftDX19dTXl7uHfNzFosFq9Xq82qSI229D+5t2ngRERE5KX4Fi8GDB1NcXOyz7KuvvqJTp04AdOnSBYfDwcqVK73r3W4369evJzs7G4Ds7GwqKirYuHGjd8yqVatobGxkwIABzT6RYwk/HCyiavcFdL8iIiJybOH+DL7rrrsYNGgQDz/8ML/+9a/5+OOPeeGFF3jhhRcAMJlMjB8/noceeohu3brRpUsX7rvvPtLT07n66qsBzzccw4YN8/6EUldXx7hx47jhhhua9ESIPyz2I2291X1TRESkNfgVLM477zyWLFnClClTmDFjBl26dOGpp54iPz/fO+buu++mqqqKMWPGUFFRwQUXXMCyZcuIioryjnn11VcZN24cQ4YMwWw2k5eXx5w5cwJ3VofFdTjS1lvzhYiIiLQGv/pYnCqa+gxuedkPJM713BNS9z9lRERaWqtEERGRU9Ip1ceirbEnOag3PKe4f+/uIFcjIiIS+kI6WJjDwrxtvd1q6y0iItLiQjpYALjCPN03q/bpGwsREZGWFvLB4qDaeouIiLSakA8WNZYkABrcChYiIiItLeSDRX2MZ14SU5W6b4qIiLS0kA8WprhkACIOKViIiIi0tJAPFuE2z/wjUTVq6y0iItLSQj5YRNk9wSKuXm29RUREWlrIB4v4pNMAsKutt4iISIsL+WBhS/YECxtV1FQfDHI1IiIioS3kg4U1IZlaIwxQW28REZGWFvLBwhwWRsXhtt4HflSwEBERaUkhHywA3GEJAFSVK1iIiIi0pHYRLKoiPd03ayvUfVNERKQltYtgUWPpAEDDAQULERGRltQugkVDjKf7plltvUVERFpUuwgWpjjPfCFq6y0iItKy2kWwiDjS1rtW3TdFRERaUrsIFlH2NADi6zRfiIiISEtqF8EirsPh7ptGRXALERERCXHtIljYD7f1tnKQ6kNVQa5GREQkdLWLYGG1J1FrhAOwv+z7IFcjIiISutpFsDCZzZSb7AC49/4Q3GJERERCWLsIFgAHwj1tvQ/tV5MsERGRltJugkVVxOG23i4FCxERkZbSboJFbZQnWDQcKA1yJSIiIqGr3QSLhhhP901zVVmQKxEREQld7SZY/Lut949BrkRERCR0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Zqau/0kqLCxk+PDhPtcWdM1bwltvvUX//v257rrrSElJoW/fvrz44ove9Tt27MDpdPpcc5vNxoABA3TNm2nQoEGsXLmSr776CoDNmzfz0UcfcfnllwO65i2tKde3qKgIu91O//79vWNycnIwm82sX7/er+OFB6bs1vHjjz/S0NBAamqqz/LU1FS+/PLLIFUVmhobGxk/fjyDBw/m7LPPBsDpdBIZGXnUNLupqak4nc4gVBkaFi1axKeffsqGDRuOWqdrHnjffvstzz33HBMmTOB//ud/2LBhA3fccQeRkZEUFBR4r+ux/juja94899xzD263m+7duxMWFkZDQwMzZ84kPz8fQNe8hTXl+jqdTlJSUnzWh4eHk5iY6Pc/gzYVLKT1FBYW8vnnn/PRRx8Fu5SQtmvXLu68806WL19OVFRUsMtpFxobG+nfvz8PP/wwAH379uXzzz9n3rx5FBQUBLm60PT666/z6quvsnDhQnr27MmmTZsYP3486enpuuYhqE39FNKhQwfCwsKOuiO+tLQUh8MRpKpCz7hx41i6dCnvvfceHTt29C53OBzU1tZSUVHhM17Xv/k2btxIWVkZ5557LuHh4YSHh7N69WrmzJlDeHg4qampuuYBlpaWRlZWls+yHj16UFJSAuC9rvrvTOBMmjSJe+65hxtuuIFevXpx0003cddddzFr1ixA17ylNeX6OhwOysrKfNbX19dTXl7u9z+DNhUsIiMj6devHytXrvQua2xsZOXKlWRnZwexstBgGAbjxo1jyZIlrFq1ii5duvis79evHxERET7Xv7i4mJKSEl3/ZhoyZAhbtmxh06ZN3lf//v3Jz8/3/q1rHliDBw8+6jHqr776ik6dOgHQpUsXHA6HzzV3u92sX79e17yZDh48iNns+3ETFhZGY2MjoGve0ppyfbOzs6moqGDjxo3eMatWraKxsZEBAwb4d8CTuvU0CBYtWmRYLBZjwYIFxrZt24wxY8YYdrvdcDqdwS6tzRs7dqxhs9mM999/39izZ4/3dfDgQe+Y3/3ud0ZmZqaxatUq45NPPjGys7ON7OzsIFYden76VIhh6JoH2scff2yEh4cbM2fONLZv3268+uqrRkxMjPHKK694xzzyyCOG3W43/v73vxv/+te/jKuuukqPPp6EgoIC47TTTvM+bvrGG28YHTp0MO6++27vGF3zk3PgwAHjs88+Mz777DMDMJ544gnjs88+M3bu3GkYRtOu77Bhw4y+ffsa69evNz766COjW7du7eNxU8MwjGeeecbIzMw0IiMjjfPPP99Yt25dsEsKCcAxX/Pnz/eOOXTokHHbbbcZCQkJRkxMjHHNNdcYe/bsCV7RIejnwULXPPDefvtt4+yzzzYsFovRvXt344UXXvBZ39jYaNx3331GamqqYbFYjCFDhhjFxcVBqrbtc7vdxp133mlkZmYaUVFRRteuXY17773XqKmp8Y7RNT8577333jH/+11QUGAYRtOu7759+4wbb7zRiIuLM6xWq/Ff//VfxoEDB/yuxWQYP2l9JiIiInIS2tQ9FiIiInJqU7AQERGRgFGwEBERkYBRsBAREZGAUbAQERGRgFGwEBERkYBRsBAREZGAUbAQERGRgFGwEBERkYBRsBAREZGAUbAQERGRgPn/GOpb1oSTbPgAAAAASUVORK5CYII=\n","text/plain":["
"]},"metadata":{},"output_type":"display_data"},{"metadata":{"tags":null},"name":"stdout","output_type":"stream","text":["Validation loss decreased (inf --> 23845152.000000). Saving model ...\n","Validation loss decreased (23845152.000000 --> 23844940.000000). Saving model ...\n","Validation loss decreased (23844940.000000 --> 23844562.000000). Saving model ...\n","Validation loss decreased (23844562.000000 --> 23843902.000000). Saving model ...\n","Validation loss decreased (23843902.000000 --> 23843730.000000). Saving model ...\n"]},{"output_type":"display_data","data":{"text/plain":[""],"text/html":["\n","
\n"," \n"," 59.00% [59/100 1:14:53<52:02]\n","
\n"," \n","\n","Epoch 0: Training loss 1582831.375000 validation loss 23845152.000000 with lr 0.000500

\n","Epoch 1: Training loss 1582773.375000 validation loss 23844940.000000 with lr 0.000500

\n","Epoch 2: Training loss 1582626.750000 validation loss 23844562.000000 with lr 0.000500

\n","Epoch 3: Training loss 1582498.625000 validation loss 23843902.000000 with lr 0.000500

\n","Epoch 4: Training loss 1582365.875000 validation loss 23844332.000000 with lr 0.000500

\n","Epoch 5: Training loss 1582284.500000 validation loss 23843730.000000 with lr 0.000500

\n","Epoch 6: Training loss 1582178.625000 validation loss 23844012.000000 with lr 0.000500

\n","Epoch 7: Training loss 1582124.625000 validation loss 23843890.000000 with lr 0.000500

\n","Epoch 8: Training loss 1581970.250000 validation loss 23843918.000000 with lr 0.000500

\n","Epoch 9: Training loss 1581889.250000 validation loss 23843910.000000 with lr 0.000500

\n","Epoch 10: Training loss 1581824.750000 validation loss 23843896.000000 with lr 0.000500

\n","Epoch 11: Training loss 1581729.875000 validation loss 23843872.000000 with lr 0.000500

\n","Epoch 12: Training loss 1581690.125000 validation loss 23843836.000000 with lr 0.000500

\n","Epoch 13: Training loss 1581658.500000 validation loss 23843798.000000 with lr 0.000500

\n","Epoch 14: Training loss 1581621.375000 validation loss 23843780.000000 with lr 0.000500

\n","Epoch 15: Training loss 1581560.500000 validation loss 23843740.000000 with lr 0.000500

\n","Epoch 16: Training loss 1581543.750000 validation loss 23843748.000000 with lr 0.000500

\n","Epoch 17: Training loss 1581550.000000 validation loss 23843692.000000 with lr 0.000500

\n","Epoch 18: Training loss 1581512.000000 validation loss 23843688.000000 with lr 0.000500

\n","Epoch 19: Training loss 1581489.500000 validation loss 23843754.000000 with lr 0.000500

\n","Epoch 20: Training loss 1582590.250000 validation loss 23843718.000000 with lr 0.000500

\n","Epoch 21: Training loss 1581468.875000 validation loss 23843696.000000 with lr 0.000500

\n","Epoch 22: Training loss 1581437.875000 validation loss 23843690.000000 with lr 0.000500

\n","Epoch 23: Training loss 1581480.375000 validation loss 23843686.000000 with lr 0.000500

\n","Epoch 24: Training loss 1581430.125000 validation loss 23843680.000000 with lr 0.000500

\n","Epoch 25: Training loss 1581463.500000 validation loss 23843678.000000 with lr 0.000500

\n","Epoch 26: Training loss 1581460.625000 validation loss 23843676.000000 with lr 0.000500

\n","Epoch 27: Training loss 1581443.875000 validation loss 23843672.000000 with lr 0.000500

\n","Epoch 28: Training loss 1581435.250000 validation loss 23843676.000000 with lr 0.000500

\n","Epoch 29: Training loss 1581453.750000 validation loss 23843670.000000 with lr 0.000500

\n","Epoch 30: Training loss 1581415.500000 validation loss 23843670.000000 with lr 0.000500

\n","Epoch 31: Training loss 1581484.250000 validation loss 23843670.000000 with lr 0.000500

\n","Epoch 32: Training loss 1581451.625000 validation loss 23843670.000000 with lr 0.000500

\n","Epoch 33: Training loss 1581430.250000 validation loss 23843670.000000 with lr 0.000500

\n","Epoch 34: Training loss 1581474.875000 validation loss 23843670.000000 with lr 0.000500

\n","Epoch 35: Training loss 1581462.000000 validation loss 23843670.000000 with lr 0.000500

\n","Epoch 36: Training loss 1581478.375000 validation loss 23843670.000000 with lr 0.000500

\n","Epoch 37: Training loss 1581437.750000 validation loss 23843670.000000 with lr 0.000500

\n","Epoch 38: Training loss 1581480.000000 validation loss 23843670.000000 with lr 0.000500

\n","Epoch 39: Training loss 1581417.250000 validation loss 23843670.000000 with lr 0.000500

\n","Epoch 40: Training loss 1581399.000000 validation loss 23843668.000000 with lr 0.000500

\n","Epoch 41: Training loss 1581463.375000 validation loss 23843668.000000 with lr 0.000500

\n","Epoch 42: Training loss 1581429.750000 validation loss 23843668.000000 with lr 0.000500

\n","Epoch 43: Training loss 1581432.375000 validation loss 23843666.000000 with lr 0.000500

\n","Epoch 44: Training loss 1581413.250000 validation loss 23843666.000000 with lr 0.000500

\n","Epoch 45: Training loss 1581432.250000 validation loss 23843666.000000 with lr 0.000500

\n","Epoch 46: Training loss 1581470.000000 validation loss 23843664.000000 with lr 0.000500

\n","Epoch 47: Training loss 1581395.125000 validation loss 23843662.000000 with lr 0.000500

\n","Epoch 48: Training loss 1581483.125000 validation loss 23843662.000000 with lr 0.000500

\n","Epoch 49: Training loss 1581393.875000 validation loss 23843662.000000 with lr 0.000500

\n","Epoch 50: Training loss 1581403.000000 validation loss 23843662.000000 with lr 0.000500

\n","Epoch 51: Training loss 1581451.375000 validation loss 23843662.000000 with lr 0.000500

\n","Epoch 52: Training loss 1581472.375000 validation loss 23843662.000000 with lr 0.000500

\n","Epoch 53: Training loss 1581408.625000 validation loss 23843662.000000 with lr 0.000500

\n","Epoch 54: Training loss 1583170.125000 validation loss 23843662.000000 with lr 0.000500

\n","Epoch 55: Training loss 1581480.625000 validation loss 23843662.000000 with lr 0.000500

\n","Epoch 56: Training loss 1581457.250000 validation loss 23843660.000000 with lr 0.000500

\n","Epoch 57: Training loss 1581486.000000 validation loss 23843660.000000 with lr 0.000500

\n","Epoch 58: Training loss 1581402.000000 validation loss 23843660.000000 with lr 0.000500

\n","\n","

\n"," \n"," 100.00% [2287/2287 00:04<00:00]\n","
\n"," "]},"metadata":{}},{"output_type":"display_data","data":{"text/plain":["
"],"image/png":"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ubm5ZGVlOTyEEJWb/do0d11QU0EMHDiQY8eO8euvv2qvzZo1iyeeeAI/Pz9q167Nm2++SfPmzalfvz6vvvoq3bp1Y9GiRSU6/qpVqzh06BBz584lNjaW+++/n/fff7/Qfv/4xz+Ij4+nXr16JCQk8Oabb2rn8Pb2pmrVqhgMBoKDgwkODsbb27vQMebPn09OTg5z586ladOm/OUvf2H69Ol88803nD17VtuvevXqTJ8+naioKB555BF69OjB6tWrS3zNJk+ezIgRI+jduzeRkZFMnDiR5s2ba9mp1NRUGjZsyL333kvdunW599576dOnj7YtODiYzp07Ex4eTps2bUocTJUnp9/QMiQkhM8//5xWrVqRm5vLzJkz6dixI1u3bqVFixYAjBw5kqysLKKiotDr9ZhMJsaPH0/fvn0djrVixQp69+5NdnY2ISEhJCYmUqNGDQAyMjIcSlpgieYDAgK0/p2MjAwiIiIc9qlVq5a2rXr16oXGP2HCBN59992yuRhCiApBdeipucuCGg8fS9bEFecthaioKOLj4/n666/p2LEjR48e5bfffuO9994DLL2a77//PosWLSItLY28vDxyc3NL3DNz8OBBwsLCCA29kbVq3759of2+++47Pv30U44dO8bVq1cpKCjA19e3VN/LwYMHiY2NpUqVG5mqDh06YDabSUlJ0T6noqOj0ev12j4hISHs3bu3ROfIysrizJkzdOjQweH1Dh06aBmX559/noceeojIyEi6devGI488QpcuXQB46qmnmDp1KvXr16dbt248/PDDJCQkYDC4132xnZ6piYyM5KWXXqJly5baD2B8fDwff/yxts+iRYuYN28e8+fPZ+fOncyZM4fJkyczZ84ch2N16tSJ5ORkNm3aRLdu3Xj66ac5d+6cU8c/atQoMjMztYctFSeEqMTsmoPvukyNoljKQOX9sJaQSmPQoEEsWbKEK1euMGvWLBo0aMADDzwAwIcffsgnn3zCiBEjWLt2LcnJyXTt2pW8vLKbor9582b69u3Lww8/zIoVK9i1axdvv/12mZ7DnoeHh8NzRVEwm81ldvwWLVpw4sQJxo0bx/Xr13n66ad58sknAcvdxVNSUvjXv/6Ft7c3L7/8Mvfff3+penrKg0umdLdp04ajR49qz4cPH87IkSPp3bs3MTExPPfccwwbNkxrULKpUqUK99xzD+3ateOrr77CYDDw1VdfAZZO8psDnIKCAi5evEhwcLC2j30qD9Ce2/a5maenJ76+vg4PIUQlZ99To8qUbnf19NNPo9PpmD9/PnPnzmXgwIFaf83GjRvp1asXzz77LLGxsdSvX19rcSiJxo0bc/r0adLT07XXtmzZ4rDPpk2bqFu3Lm+//TatWrWiYcOGnDp1ymEfo9GIyVT8z1Djxo3ZvXs3165d017buHEjOp2OyMjIEo+5OL6+voSGhhZq/9i4cSNNmjRx2O+vf/0r//73v/nuu+9YsmQJFy9eBCzltISEBD799FPWrVvH5s2bS5wpKi8uCWqSk5MJCQnRnmdnZ6PTOQ5Fr9f/aQRqNpvJzc0FLGnBy5cvs2PHDm37mjVrMJvNtG3bVttn/fr1DpFlYmIikZGRRZaehBB3Kbu1aRSZ0u22qlatyl//+ldGjRpFeno6zz//vLatYcOGJCYmsmnTJg4ePMhLL71U6I/a4nTu3JlGjRrRv39/du/ezW+//cbbb7/tsE/Dhg1JTU1l4cKFHDt2jE8//ZSlS5c67FOvXj1OnDhBcnIy58+f1z6z7PXt2xcvLy/69+/Pvn37WLt2La+++irPPfecVnoqC8OHD2fixIl89913pKSkMHLkSJKTk3nttdcAywScBQsWcOjQIQ4fPszixYsJDg7G39+f2bNn89VXX7Fv3z6OHz/Ot99+i7e3N3Xr1i2z8ZWFUgc1V69eJTk5meTkZADtHys1NRWwlGv69eun7T916lR++OEHjh49yr59+xg6dChr1qxh8ODB2j4JCQmMHz+en376iZMnT7J06VKmTJnCY489Blg6w//v//6PLVu2cOrUKXbs2MHAgQNJS0vjqaeeAiyRbrdu3XjhhRfYtm0bGzdu5JVXXqF3795aTfSZZ57BaDQyaNAg9u/fz3fffccnn3zC66+/fntXTwhRKdnf+0kyNe5t0KBBXLp0ia5duzr0v/zjH/+gRYsWdO3alY4dOxIcHMyjjz5a4uPqdDqWLl3K9evXadOmDX/7298YP368wz49e/Zk2LBhvPLKKzRv3pxNmzYxevRoh32eeOIJunXrRqdOnahZs2aR08p9fHz45ZdfuHjxIq1bt+bJJ5/kwQcfZPr06aW7GH9iyJAhvP7667zxxhvExMTwv//9j+XLl9OwYUPAMpNr0qRJtGrVitatW3Py5El+/vlndDod/v7+/Pvf/6ZDhw40a9aMVatW8eOPPxIYGFimY7xjaimtXbtWBQo9+vfvr6qqqvbv31994IEHtP0nTpyoNmjQQPXy8lIDAgLUjh07qmvWrHE4ZlZWlvraa6+p4eHhqpeXl1q/fn317bffVnNzc1VVVdXr16+rjz32mBoaGqoajUY1JCRE7dmzp7pt2zaH41y4cEHt06ePWrVqVdXX11cdMGCAeuXKFYd9du/erd57772qp6enWrt2bfWDDz4o1fefmZmpAmpmZmap3ieEqDg2/Xuoqr7jq6rv+Ko7JvVw9XCc5vr16+qBAwfU69evu3ooohIp7ufK2Z+hiqqWYsUjQVZWFn5+fmRmZkp/jRCV1OYvX6X9mbkA7PKJJ+6t/7p4RM6Rk5PDiRMniIiIwMvLy9XDEZVEcT9Xzv4MlXs/CSHETRS7nhqd9NQIUWFIUCOEEDezC2R00lMjRIUhQY0QQtzEfm0anXqXrVMjRAUmQY0QQtzMLjtzN2RqynIBNyFc+fPkXusbCyGEG1BM9uWnypupMRqN6HQ6zpw5Q82aNTEajdridUKUlqqq5OXl8ccff6DT6Rzus1heJKgRQoibKHdJpkan0xEREUF6ejpnzrjgfk+iUvLx8SE8PLzQorrlQYIaIYS4iX1Qo6/EmRqwZGvCw8MpKCj40+X8hfgzer0eg8HgsoyfBDVCCHETh0ZhKv8HvaIoeHh4FLphohAVjTQKCyHETez7aPSVuPwkRGUjQY0QQtzEofx0F2RqhKgsJKgRQoibOK5TI0GNEBWFBDVCCHET+/KTgcrdKCxEZSJBjRBC3ETnUH6ShemEqCgkqBFCiJs4BjWSqRGiopCgRgghbmIf1Bikp0aICkOCGiGEuIljT40ENUJUFBLUCCHETewX3JMp3UJUHBLUCCHETewX3NMrKma5fYAQFYIENUIIcZOb7/dUUJB/iz2FEO5EgprbdOHsaVcPQQjhJDff76kgP9dFIxFClIYENbfp+PIPXT0EIYST6FXHtWkKCmRatxAVgQQ1t6nZH8v548xJVw9DCOEEN2dqTPl5LhqJEKI0JKi5TZ5KAce/f8/VwxBCOMHNt0YwmaSnRoiKQIKaOxD3xw9kpB5x9TCEEGXs5mncBZKpEaJCkKDmNh30iMaoFHDqh3GuHooQoozd3FNjlp4aISoECWpuk/LAmwC0OL+CMydTXDwaIURZkvKTEBWTBDW3Kar1Q+z1bIGHYuL3H9519XCEEGXo5jtzm6X8JESFIEHNHfDo/DYALS7+l7Tj+108GiFEWVDNZjwUS0+NWVUAMJmk/CRERSBBzR2Iat2Z3V6tMShmfv9pkquHI4QoA2bzjSxNDkYATAWSqRGiIih1ULN+/XoSEhIIDQ1FURSWLVtW7P7r1q1DUZRCj4yMDG0fk8nE6NGjiYiIwNvbmwYNGjBu3DhUVQUgPz+fESNGEBMTQ5UqVQgNDaVfv36cOXPmT8+jKArbt28H4OTJk0Vu37JlS2kvg8bc4nkAgi4l3/YxhBDuI99u9eBcxRLUmOU2CUJUCIbSvuHatWvExsYycOBAHn/88RK/LyUlBV9fX+15UFCQ9vXEiROZMWMGc+bMITo6mqSkJAYMGICfnx9DhgwhOzubnTt3Mnr0aGJjY7l06RKvvfYaPXv2JCkpCYD4+HjS09Mdzjl69GhWr15Nq1atHF5ftWoV0dHR2vPAwMBSXQN7taM7wCYIN53i+rUreFepdtvHEkK4nskugMmzZmrM0igsRIVQ6qCme/fudO/evdQnCgoKwt/fv8htmzZtolevXvTo0QOAevXqsWDBArZt2waAn58fiYmJDu+ZPn06bdq0ITU1lfDwcIxGI8HBwdr2/Px8fvjhB1599VUURXF4b2BgoMO+d6JmSF3O408N5TKnDmwlqnXnMjmuEMI17G+JkKd4gipTuoWoKMqtp6Z58+aEhITw0EMPsXHjRodt8fHxrF69msOHDwOwe/duNmzYUGzwlJmZiaIotwyUli9fzoULFxgwYEChbT179iQoKIh7772X5cuXFzvu3NxcsrKyHB72FJ2ONO9IAC4f3VbssYQQ7s9kV34qUDwAMJukp0aIiqDUmZrSCgkJ4fPPP6dVq1bk5uYyc+ZMOnbsyNatW2nRogUAI0eOJCsri6ioKPR6PSaTifHjx9O3b98ij5mTk8OIESPo06ePQ0nL3ldffUXXrl2pU6eO9lrVqlX56KOP6NChAzqdjiVLlvDoo4+ybNkyevbsWeRxJkyYwLvvFj9lO7tGMzi9FX3G7pJcEiGEG7NlZUyqgkmx/Io0y+wnISoEpwc1kZGRREZGas/j4+M5duwYH3/8Md988w0AixYtYt68ecyfP5/o6GiSk5MZOnQooaGh9O/f3+F4+fn5PP3006iqyowZM4o85++//84vv/zCokWLHF6vUaMGr7/+uva8devWnDlzhg8//PCWQc2oUaMc3pOVlUVYWJjDPt51W8Lpf1PzyoESXBEhhDsrsPbPFGDQghpVGoWFqBCcHtQUpU2bNmzYsEF7Pnz4cEaOHEnv3r0BiImJ4dSpU0yYMMEhqLEFNKdOnWLNmjW3zNLMmjWLwMDAWwYq9tq2bVuoX8eep6cnnp6exR6jdpP2sAHCTKfJvpqJT1W/Pz2vEMI9aZkadJgVPQCqWYIaISoCl6xTk5ycTEhIiPY8Ozsbnc5xKHq93mG9CFtAc+TIEVatWnXLGUuqqjJr1iz69euHh4dHqcdyO2qG1uMPqqNXVFL3b72jYwkhXMtUYOmpKVD0mG3lJ8nUCFEhlDpTc/XqVY4ePao9P3HiBMnJyQQEBBAeHs6oUaNIS0tj7ty5AEydOpWIiAiio6PJyclh5syZrFmzhpUrV2rHSEhIYPz48YSHhxMdHc2uXbuYMmUKAwcOBCwBzZNPPsnOnTtZsWIFJpNJW+cmICAAo9GoHWvNmjWcOHGCv/3tb4XGPmfOHIxGI3FxcQB8//33fP3118ycObO0l6GQNJ8oamZv5vLx7dC2yx0fTwjhGjcyNYYbmRrpqRGiQih1UJOUlESnTp2057Z+k/79+zN79mzS09NJTU3Vtufl5fHGG2+QlpaGj48PzZo1Y9WqVQ7HmDZtGqNHj+bll1/m3LlzhIaG8tJLLzFmzBgA0tLStFlKzZs3dxjP2rVr6dixo/b8q6++Ij4+nqioqCLHP27cOE6dOoXBYCAqKorvvvuOJ598srSXoZDrNWIgdTP6jOQ7PpYQwnVst0SwlJ9sjcKSqRGiIlBU27K9okSysrLw8/MjMzPToadn95qFxK5/iZO6MOqN2efCEQoh7sSR5N9ouOwRzhJIuk8jmmdvZlvMWNo8MczVQxOiwrvVZ2hZkXs/lZHaTeIBCDf9zrUrl107GCHEbbP1z5jsempUydQIUSFIUFNGagSHc44AdIpK6gFpFhaiolJNN3pqVOmpEaJCkaCmDKX5WPp4Mo9td/FIhBC3y3bvJ7OiR9VZ2w7NEtQIURFIUFOGcmo2A8AgzcJCVFi21YPN6FGt5Sek/CREhSBBTRnyqdsSgJpXD7l4JEKI22XrnzE5ZGpMLhyREKKkJKgpQ7WbtAcgzPQ7V7MuuXg0QojbYbaWmuzLT7KisBAVgwQ1ZahGcBhnCZRmYSEqMLPWU2MA6akRokKRoKaMnbE2C2cd2+bikQghbodtppNDo7DMfhKiQpCgpozl1IwBwHB2t4tHIoS4HbZSk1nRg3VKtyLlJyEqBAlqyliVeq0BCLp60MUjEULcDtWu/KTqrTfFlfKTEBWCBDVlrE60pVm4jukMVzIvung0QohSswYwqqLXemoUVWY/CVERSFBTxgKCapNBTUuz8L7Nrh6OEKKUtHVq7BqFpfwkRMUgQY0TnKnaGICso5tcPBIhRKnZMjU6vd3sJ8nUCFERSFDjBHkhlr4a74wkF49ECFFatsX3VMWAYu2p0UmmRogKQYIaJwhofD8A9a7vw2ySv/CEqFCkp0aICkuCGieIaNqe66oRf65y+ohM7RaiIlGtpSazzkPL1Cgy+0mICkGCGifwMHpy3DMSgLP7f3XxaCq+Uwd3cProXlcPQ9wtTHmW/+rsMzUS1AhREUhQ4yRZNS03t1ROy+0S7kRO9lVqLHyYKt8+LKU8UT6smRpV0aMYrD01Un4SokKQoMZJfBp0ACA4U8pPd+Lq5QtUUXIIIIu83OuuHo64G2iznzxQJFMjRIUiQY2T1GveCYAw9QwXzv7u4tFUXHl5OXZf57pwJOKuYZu+rTNIpkaICkaCGifxC6jJSV04AKm717l2MBWYKf9GUJMvmRpRDmwL7ak6PTprpkYnjcJCVAgS1DjRWf/mAOQel0X4bleBXaYm3+5rIZzGFsDo7NapkUyNEBWCBDVOpAtvB4D/+Z0uHknFVWBXcjLlS/lJOJ+2Jo3OA53BkqnRI5kaISoCCWqcKLRZRwDq5x8h5/o11w6mgjLZZWcKciVTI5xPu8+TTo9Ob7R8KZkaISoECWqcKLReY87jj1Ep4MSeDa4eToVUkC/lJ1HO7BuF9dZMjcx+EqJCkKDGiRSdjtQqMQBcTpGg5nbYl5zsAxwhnMU2fVvRe6Cz9dQgmRohKgIJapwsL9R2c8vtLh5JxWS2C2rM+XkuHIm4Wyh2mRqddUq3ZGqEqBgkqHGy6pH3AVA3ex+q2ezi0VQ85gL7RmHJ1Ajn06mWnhpFb9AyNXpV/t8VoiIodVCzfv16EhISCA0NRVEUli1bVuz+69atQ1GUQo+MjAxtH5PJxOjRo4mIiMDb25sGDRowbtw4VFUFID8/nxEjRhATE0OVKlUIDQ2lX79+nDlzxuFc9erVK3SeDz74wGGfPXv2cN999+Hl5UVYWBiTJk0q7SUolYiYeHJUD6pzhdQje5x6rsrIPlMjs59EebDP1OhtmRqZ/SREhWAo7RuuXbtGbGwsAwcO5PHHHy/x+1JSUvD19dWeBwUFaV9PnDiRGTNmMGfOHKKjo0lKSmLAgAH4+fkxZMgQsrOz2blzJ6NHjyY2NpZLly7x2muv0bNnT5KSkhzO89577/HCCy9oz6tVq6Z9nZWVRZcuXejcuTOff/45e/fuZeDAgfj7+/Piiy+W9lKUiNHTiwPGSJrk7+PsvnXUjWzulPNUVmqBfflJMjXC+WxTunV6jxvlJ+mpEaJCKHVQ0717d7p3717qEwUFBeHv71/ktk2bNtGrVy969OgBWDIuCxYsYNu2bQD4+fmRmJjo8J7p06fTpk0bUlNTCQ8P116vVq0awcHBRZ5n3rx55OXl8fXXX2M0GomOjiY5OZkpU6Y4LagByKzZAs7sA7m5Zak5BDUF0lMjnE+n3lh8z5apMUhQI0SFUG49Nc2bNyckJISHHnqIjRs3OmyLj49n9erVHD58GIDdu3ezYcOGYoOnzMxMFEUpFCh98MEHBAYGEhcXx4cffkhBwY208ebNm7n//vsxGo3aa127diUlJYVLly4VeZ7c3FyysrIcHqXlbb25ZUhmcqnfe7dzzNRI+Uk4n06b/WRXfpJ1aoSoEEqdqSmtkJAQPv/8c1q1akVubi4zZ86kY8eObN26lRYtWgAwcuRIsrKyiIqKQq/XYzKZGD9+PH379i3ymDk5OYwYMYI+ffo4lLSGDBlCixYtCAgIYNOmTYwaNYr09HSmTJkCQEZGBhEREQ7HqlWrlratevXqhc41YcIE3n333Tu6BhHNO8FvlptbXj6fgX+NojNJojD7oMb+ayGcxVZ+UvRG9AbLH0CSqRGiYnB6UBMZGUlkZKT2PD4+nmPHjvHxxx/zzTffALBo0SLmzZvH/PnztZLQ0KFDCQ0NpX///g7Hy8/P5+mnn0ZVVWbMmOGw7fXXX9e+btasGUajkZdeeokJEybg6el5W+MfNWqUw3GzsrIICwsr1TH8AmuRqqtNuDmNU3vW4f+X3rc1lruSXclJghpRHnRaUGPfKCxBjRAVgUumdLdp04ajR49qz4cPH87IkSPp3bs3MTExPPfccwwbNowJEyY4vM8W0Jw6dYrExESHLE1R2rZtS0FBASdPngQgODiYs2fPOuxje36rPhxPT098fX0dHrfjrG8zALKPbbmt99+1THlFfy2Ek9jWpNHZBTUGxSxLMghRAbgkqElOTiYkJER7np2djU7nOBS9Xo/Z7peILaA5cuQIq1atIjAwsETn0el02kyr9u3bs379evLz87V9EhMTiYyMLLL0VJbMtS2L8FU7v8up56lsFJNkakT5cszU3Oi/KyjIv9VbhBBuotTlp6tXrzpkWU6cOEFycjIBAQGEh4czatQo0tLSmDt3LgBTp04lIiKC6OhocnJymDlzJmvWrGHlypXaMRISEhg/fjzh4eFER0eza9cupkyZwsCBAwFLQPPkk0+yc+dOVqxYgclk0ta5CQgIwGg0snnzZrZu3UqnTp2oVq0amzdvZtiwYTz77LNawPLMM8/w7rvvMmjQIEaMGMG+ffv45JNP+Pjjj2//CpZQUJN7YT9E5BzCVFCA3uD0yl+loJhuBDKKzH4S5UCnTek2YvDw0F43FeTjYby9MrYQonyU+pM1KSmJTp06ac9t/Sb9+/dn9uzZpKenk5qaqm3Py8vjjTfeIC0tDR8fH5o1a8aqVascjjFt2jRGjx7Nyy+/zLlz5wgNDeWll15izJgxAKSlpbF8+XLAMovK3tq1a+nYsSOenp4sXLiQsWPHkpubS0REBMOGDXPoh/Hz82PlypUMHjyYli1bUqNGDcaMGePU6dw24ZEtuap6U1W5zrGDSTSIaef0c1YGDpkak2RqhPPZ+mfsy08A+fl5eLlqUEKIElFU27K9okSysrLw8/MjMzOz1P01+yY8QNPcZLZGj6btU286aYSVy/aPn6J1piWrtyXor7R7+UsXj0hUdqffbUyYeoaD3RfRqOWD6P9pKXVnvnoYv8BaLh6dEBXbnXyGloTc+6kcXalpmcKu+11ubllSOrtMjSKZGlEObmRqPBx6/fLlhqpCuD0JasqRT/32AARnyT2gSkpntg9q5ENFOJ/WU2PwQNHpyFf1AJhNcv8nIdydBDXlqF7sA8CNRfjEn9OZ84v8WghnMWCb0m3ppynAEtQUSKZGCLcnQU05si3CB3BqzzrXDqaC0Kv2QY18qAjn02NZSsI2Q9FkDWrMMqVbCLcnQU05k0X4SkdvX36STI0oB7aeGtvMpwLFEtSYZEkBIdyeBDXlTBbhKx2DXaZGL5kaUQ4M2orCloX3tEyNSYJqIdydBDXlrGbje4Ebi/CJ4hnM9kGNfKgI57tV+ckk5Sch3J4ENeWsbpRlEb4qSg4nDya5ejhuz6DeyM7Y99cI4Sy28pPBcHOmRv4IEcLdSVBTzvQGAye9LHctP39og4tH4/6k/CTKk2o2Y1AsmRqdLVOjWP5rltlPQrg9CWpcQBbhKznb9FpwDHCEcAb7m1babmZpsjUKS6ZGCLcnQY0LyCJ8JefBjQ8ZCWqEs5kcghprhsZ6izxVGoWFcHsS1LiALMJXckZVghpRfuwzNQYPx0yNrFMjhPuToMYFZBG+kvOwKz/ZZ22EcAaTXd+MwbpOjdkW1Jil/CSEu5OgxkVuLMK32cUjcV9mkwkPxaQ9l6BGOJtDT43eWn6yNQpLpkYItydBjavUuw+A0PRVqGaziwfjnvJyrzs891DlL2XhXLZp2/mqHsV6h25b+UmVRmEh3J4ENS4S1akPOaoHdc2/c3S3TO0uSm5ujsNz+1KUEM5gaxQ22f1qVLWgRqZ0C+HuJKhxkWp+Aez3tWRrLmya6+LRuKeCvJuCGsWE2WS6xd5C3Dnb/Z1sC+4BmBVLb41kaoRwfxLUuJAhrg8Ajf74hfy8XBePxv3k3xTUAOQV8ZoQZUXL1Cj2QY0tUyM9NUK4OwlqXCj6vke5iC8BZHFgww+uHo7bKbCWn3JVD+21vFwJaoTz2HpqCuwyNVr5SWY/CeH2JKhxIYOHkcM1uwJQsGuBi0fjfgryLQFMtuKlvZZ/U/OwEGXJNqXbvvyk6gy2ja4YkhCiFCSocbHA+H4ARGf9xpXMiy4ejXux9dTk40GeavmQKaokJURZsWVqHHtqrCsKS6ZGCLcnQY2L3RN7L6d0dfBS8jm45ltXD8etaEGN4kE+lhKUKV96j4TzmEyFe2okUyNExSFBjYspOh3p4b0AqHLwPy4ejXsxWZunCxQP8qwzUAqkp0Y4kW2Gk1l6aoSokCSocQN1O/UHoHHuHjJOH3XxaNyHueBGUGPL1Ej5STiTNqXbPlOj97BtdMWQhBClIEGNGwipG8kBYww6ReXE2jmuHo7bsJWaTIoHBda+BlvzsBDOUFSmBmuAo0imRgi3J0GNm7ga+QQAISeXyW0TrMzWAKZAMVJgLT+Z82VVV+E8WqOwNYgGUHXWxffM0lMjhLuToMZNRP7lOXJVD+qZUzm+f5urh+MWzLZMjc6DAq1RWDI1wnlU6+J7ZrvyE9ZGYcUsq1kL4e4kqHETftVrcKBKawDO7Vzu4tG4B9XaU2PWGSnQGQGZ/SScy5aNMRc1+0nKT0K4PQlq3EhevU4A+KWtd/FI3IOtUdikM2rlALNkaoQT2cpPZrvyk6JlaqT8JIS7K3VQs379ehISEggNDUVRFJYtW1bs/uvWrUNRlEKPjIwMbR+TycTo0aOJiIjA29ubBg0aMG7cOFRVBSA/P58RI0YQExNDlSpVCA0NpV+/fpw5c0Y7xsmTJxk0aJDDMd555x3y8vIc9ilqLFu2bCntZXCKOq0SAGiYe0AW4uNGpkbVeWCyZmrMBdJTI5xHaxQuavaTKuUnIdyd4c93cXTt2jViY2MZOHAgjz/+eInfl5KSgq+vr/Y8KChI+3rixInMmDGDOXPmEB0dTVJSEgMGDMDPz48hQ4aQnZ3Nzp07GT16NLGxsVy6dInXXnuNnj17kpSUBMChQ4cwm8188cUX3HPPPezbt48XXniBa9euMXnyZIexrFq1iujoaO15YGBgaS+DU9Su35jflRDqkM6+rT8T1+VZVw/JtawBjFlnxKQ1Ckv5STiP7aaVql2mBp119pMsvieE2yt1UNO9e3e6d+9e6hMFBQXh7+9f5LZNmzbRq1cvevToAUC9evVYsGAB27ZZGmb9/PxITEx0eM/06dNp06YNqamphIeH061bN7p166Ztr1+/PikpKcyYMaNQUBMYGEhwcHCJxp2bm0tu7o0P0qysrBK973alBcZT5/wS8lIS4S4PalSTNajRGzFbMzW27I0QzlBUpkaxZmoUydQI4fbKraemefPmhISE8NBDD7Fx40aHbfHx8axevZrDhw8DsHv3bjZs2FBs8JSZmYmiKLcMlGz7BAQEFHq9Z8+eBAUFce+997J8efFNuRMmTMDPz097hIWFFbv/nfJs3AWAsIubZWq3LYDRGzHbptVKUCOcyLZqsNYcDHazn6RRWAh35/SgJiQkhM8//5wlS5awZMkSwsLC6NixIzt37tT2GTlyJL179yYqKgoPDw/i4uIYOnQoffv2LfKYOTk5jBgxgj59+jiUtOwdPXqUadOm8dJLL2mvVa1alY8++ojFixfz008/ce+99/Loo48WG9iMGjWKzMxM7XH69OnbvBIl07BNN/JUPaHqWX4/vt+p53J3ijVTo+o9MestmRpM0lMjnEgrP9llaqxBjU6VoEYId1fq8lNpRUZGEhkZqT2Pj4/n2LFjfPzxx3zzzTcALFq0iHnz5jF//nyio6NJTk5m6NChhIaG0r9/f4fj5efn8/TTT6OqKjNmzCjynGlpaXTr1o2nnnqKF154QXu9Ro0avP7669rz1q1bc+bMGT788EN69uxZ5LE8PT3x9PS87e+/tKpU82e/Z1Oi83aTtv1Hwu6JKbdzuxvFZG0U1htRpfwkyoEtU2M/+wlb+UkyNUK4PZdM6W7Tpg1Hj964x9Hw4cO1bE1MTAzPPfccw4YNY8KECQ7vswU0p06dIjExscgszZkzZ+jUqRPx8fF8+eWXfzqWtm3bOozFHVyp8wAA3qnrXDsQV7NlZQyeqNZMjSKzn4QzFVF+0qZ0S0+NEG7PJUFNcnIyISEh2vPs7Gx0Oseh6PV6zHY9JbaA5siRI6xatarIGUtpaWl07NiRli1bMmvWrELHLMlY3EHNOEvDdMPsZHJzsl08GtfR2YIavVELalSZgSKcyNYorBbRKCzlJyHcX6nLT1evXnXIbJw4cYLk5GQCAgIIDw9n1KhRpKWlMXfuXACmTp1KREQE0dHR5OTkMHPmTNasWcPKlSu1YyQkJDB+/HjCw8OJjo5m165dTJkyhYEDBwKWgObJJ59k586drFixApPJpK1zExAQgNFo1AKaunXrMnnyZP744w/t+LaZTnPmzMFoNBIXFwfA999/z9dff83MmTNLexmcqn50G84v8aeGcpl92xNpel8vVw/JJWyLnSmGG0GNrSQlhFMUlanRS0+NEBVFqYOapKQkOnXqpD239aj079+f2bNnk56eTmpqqrY9Ly+PN954g7S0NHx8fGjWrBmrVq1yOMa0adMYPXo0L7/8MufOnSM0NJSXXnqJMWPGAJYMjK2Zt3nz5g7jWbt2LR07diQxMZGjR49y9OhR6tSp47CPbRE/gHHjxnHq1CkMBgNRUVF89913PPnkk6W9DE6l6HSc8GtHjcz/cXX/L3CXBjU6syVToxg8UfWWviYJaoRT2fpmHIIaS0Ctk/KTEG6v1EFNx44dHYKEm82ePdvh+VtvvcVbb71V7DGrVavG1KlTmTp1apHb69WrV+w5AZ5//nmef/75Yvfp379/ocZjd6U0fBCS/kfQuY1/vnMlpbcGNTr7nhqZ/SScqdhMjQQ1Qrg7ufeTm2rQNgGzqlDffJI/zpx09XBcwj5Tg8H617Lcf0c4kbZqsF1Pjc4gPTVCVBQS1Lip6jVDOOZxDwAntv7o4tG4ht4awOg8PC2BDTcCHSGcwpqNUa2LPQLodJKpEaKikKDGjZ0Pvg8A/fE1Lh6JaxhUa/nJw0sLauROycKZtLVo9DfKT7ZMjV6CGiHcngQ1bqx6jOU2EZFZm7n0R7qLR1P+9Ko1U2MwoljLT3rJ1AhnKrJR2Fp+QspPQrg7CWrcWKNWD3JU34CqynVSFo9x9XDKncHaw6D38ELxsGRq9JKpEU6kZWp0N3pq9JKpEaLCkKDGjen0eq4/8A4ALc4uIe0uuxeUrfykN3qiM3hZvlYlqBHOo60abN9TowU1kqkRwt1JUOPmYu7vxR6vVhgVExlL33b1cMqVhzWAMRi90GuZGik/CeexZWoU+54aa/lJj2RqhHB3EtRUAFV6jMesKrS8spbDO9e5ejjlxsPaw2AweqGzNgobJFMjnEhRC/fU6A2WryWoEcL9SVBTATSIaccO/64A5P/vH6h298SqzLRMjYcXeqMENcL5FLMlcFF09rOfrFlCCWqEcHsS1FQQYU+OJ1f1IDpvL7vXLnL1cMqFEWtQ4+mFwWjpqZGgRjiTLVNjm/EEoLeWogzSKCyE25OgpoIIDruHnaF9APDf+E8K8it3b4lqNmNUrOUnD0/0HpagxgMJaoTzaKsGF7VOjWRqhHB7EtRUIE2efofLVKWe+TQ7V3zh6uE4Vb5d0Obh6Y3Bw7JOjQQ1wplss5/sy0+2nz2DBDVCuD0JaioQv+o1OBj+DACGY4kuHo1z5eVe17729PTCYPQGwEOm1Qonst0KwXH2k+VrD8V01/SzCVFRSVBTwVS9Jx6AoGuHXTwS58rPzdG+Nnp64+FpKz9JUCOcxxbU6Ox6ajysmRoAk0l+/oRwZxLUVDB1Grez/FdN50rmRRePxnny8yxBTb6qR6fX42FtFPZQTJhNUgYQzqEzF24UtvXUABQUSPlTCHcmQU0FU71mCGcJBOD3Q9tdPBrnsWVq8rHOPLFO6QbIy8sp8j1C3CkdhctP9pmayt6gL0RFJ0FNBZTu3RCAzOM7XDwS5ynIs/TU5CmWv5KN1vITQF6uBDXCOYoqP+ntMjWmAik/CeHOJKipgHICowHQnd3r4pE4T4E1G1NgzdQYjTeCmny7JmIhypLt/k46u0yNwb78lJ9b7mMSQpScBDUVkDEsDoDAK4dcPBLnMRVY0vz5WD5QFJ2OPNXyQZMv5SfhJDfKTzcCGUWno0C1/Ko0S6OwEG5NgpoKKDiyDQBhBacqbSlGy9QoNz5cbP01JvlrWTiJ3lp+0ttlagAK0ANgkkZhIdyaBDUVUEh4QzKpglExkXqocvbVmPIsgUuBcqNJ09ZfU1BJAznherZMjc6uORjApAU10igshDuToKYCUnQ6fjfeA8ClY0kuHo1zmAssfTMFOvtMjeVrKT8JZzEU0VMDUKBIpkaIikCCmgrqSvUmAJjP7HbxSJzDnG/L1Ng1aSqWD5qCfAlqhHPosKwYbD/7CewzNRLUCOHOJKipoAy1YwHwzTzo4pE4h61vxqSzWyPEGuCYZa0Q4SS2m1baT+OGG7PwzBLUCOHWJKipoGo0bA1AeN7xSrnCri1TY7bP1FjLTybJ1Agn0cpPNwU1ZsnUCFEhSFBTQdW5pxk5qgdVlBzSThxw9XDKnGptyDTZ9dQUWLM2MvtJOIveWn7S31x+UmxTuiWoEcKdSVBTQRk8jKR6RABw7vA2F4+m7KkF1kyNXfnJZO2pMUumRjiJwTb7yeDYKKz97EmmRgi3JkFNBXbJNwqAvN+TXTsQZzBZgxq9XVBjDXDMMq1WOImtp8Zw05RuW/lJMjVCuLdSBzXr168nISGB0NBQFEVh2bJlxe6/bt06FEUp9MjIyND2MZlMjB49moiICLy9vWnQoAHjxo1DVVUA8vPzGTFiBDExMVSpUoXQ0FD69evHmTNnHM518eJF+vbti6+vL/7+/gwaNIirV6867LNnzx7uu+8+vLy8CAsLY9KkSaW9BO4juBkAVS5WxvKTJahRHTI1tkZhKT+Jsmc2mdArlt85hctPkqkRoiIodVBz7do1YmNj+eyzz0r1vpSUFNLT07VHUFCQtm3ixInMmDGD6dOnc/DgQSZOnMikSZOYNm0aANnZ2ezcuZPRo0ezc+dOvv/+e1JSUujZs6fDOfr27cv+/ftJTExkxYoVrF+/nhdffFHbnpWVRZcuXahbty47duzgww8/ZOzYsXz55ZelvQxuwb9+SwBq5xxBNZtdPJqypVizMapdpsZWirIFPEKUpQK7gKVQo7B1nRrVLEGNEO7M8Oe7OOrevTvdu3cv9YmCgoLw9/cvctumTZvo1asXPXr0AKBevXosWLCAbdssvSJ+fn4kJiY6vGf69Om0adOG1NRUwsPDOXjwIP/73//Yvn07rVq1AmDatGk8/PDDTJ48mdDQUObNm0deXh5ff/01RqOR6OhokpOTmTJlikPwU1GEN26N6UeFQCWTPzJSqRlaz9VDKjOqtfyk6j2118zWpmFVyk/CCexnNnl43LxOjS1TI/d+EsKdlVtPTfPmzQkJCeGhhx5i48aNDtvi4+NZvXo1hw8fBmD37t1s2LCh2OApMzMTRVG0QGnz5s34+/trAQ1A586d0el0bN26Vdvn/vvvx2i88dd/165dSUlJ4dKlS0WeJzc3l6ysLIeHu/CuUo3T+joAnDm0xcWjKVuKyZapufHhovXXmCRTI8pevt36RzevU6NlaqSnRgi35vSgJiQkhM8//5wlS5awZMkSwsLC6NixIzt37tT2GTlyJL179yYqKgoPDw/i4uIYOnQoffv2LfKYOTk5jBgxgj59+uDr6wtARkaGQ0kLwGAwEBAQoPXvZGRkUKtWLYd9bM/te3zsTZgwAT8/P+0RFhZ2exfCSc5XjQQg+9QuF4+kbNmCGuwyNaqUn4QT2ffLGAw3NQrrrJkaCWqEcGulLj+VVmRkJJGRkdrz+Ph4jh07xscff8w333wDwKJFi5g3bx7z58/XSkJDhw4lNDSU/v37OxwvPz+fp59+GlVVmTFjhrOHz6hRo3j99de151lZWW4V2BQExUDWKjzP73f1UMqUFtTYfbjY+msUKT8JJ3DoqdE5/r13I1Mj5Sch3JnTg5qitGnThg0bNmjPhw8frmVrAGJiYjh16hQTJkxwCGpsAc2pU6dYs2aNlqUBCA4O5ty5cw7nKSgo4OLFiwQHB2v7nD171mEf23PbPjfz9PTE09OzyG3uoGq9FnAUgrMPu3ooZUpntgQuisEuU2MNaqQEIJzBbA1Y8lQ9xpuCGtU6+wn52RPCrblknZrk5GRCQkK059nZ2YX+MtLr9ZjtZvTYApojR46watUqAgMDHfZv3749ly9fZseOHdpra9aswWw207ZtW22f9evXk59/4xdTYmIikZGRVK9evUy/x/IS1tjyvYWqZ8m8dN7Foyk7xQU1ivTUCCcosPbU2G5eac+WqTFLpkYIt1bqoObq1askJyeTnJwMwIkTJ0hOTiY1NRWwlGv69eun7T916lR++OEHjh49yr59+xg6dChr1qxh8ODB2j4JCQmMHz+en376iZMnT7J06VKmTJnCY489BlgCmieffJKkpCTmzZuHyWQiIyODjIwM8vIsv4gaN25Mt27deOGFF9i2bRsbN27klVdeoXfv3oSGhgLwzDPPYDQaGTRoEPv37+e7777jk08+cSgvVTR+gbU4o1j6go5v/5+LR1N2dNaps/ZBja2/RoIa4Qy2npqighrV2lODWYIaIdxZqctPSUlJdOrUSXtuCwj69+/P7NmzSU9P1wIcgLy8PN544w3S0tLw8fGhWbNmrFq1yuEY06ZNY/To0bz88sucO3eO0NBQXnrpJcaMGQNAWloay5cvByyzqOytXbuWjh07AjBv3jxeeeUVHnzwQXQ6HU888QSffvqptq+fnx8rV65k8ODBtGzZkho1ajBmzJgKOZ3bXmrQXwg9uwB193fQ5VlXD6dMFJWpsfXXaP02QpQhkzULU6AUEdRYy09S+hTCvZU6qOnYsaO20m9RZs+e7fD8rbfe4q233ir2mNWqVWPq1KlMnTq1yO316tUr9pw2AQEBzJ8/v9h9mjVrxm+//fanx6pIgu4bAP9ZQNOrm8i8+Ad+ATVdPaQ7prcGNTq7RmHFWn7SyQJowgnM1ll1RZafJFMjRIUg936qBOo3bctxXT2MSgGHVs9x9XDKhN764aHz8NJes2VtbFkcIcqSybqwXpHlJ8nUCFEhSFBTSZyr/ygAvoeXuHYgZcSgWjM1HjfKT7agRpFMjXACWxOwWXpqhKiwJKipJBr8ZQAmVaFx/gHSjh909XDumEG1BC76IoIavWRqhBPYFtYrqqcGCWqEqBAkqKkkaobWY793CwBS181y8WjunC2oMdiXnzwsPTV6ydQIJ7DNfjIX2Sist+1UnkMSQpSSBDWVSF6TpwAIO/1Dhb9rt5apMd4IanQGy9d6VYIaUfZsmZqiyk+2TI0iPTVCuDUJaiqRJn95hmzVkzpqBik71rh6OHfEA2umxnij/GQrRUn5STiD7RYIJqXwpFDVeod4VFN5DkkIUUoS1FQiPlX92O//AACZW75x8WjujC2ose+p0Vl7agySqRFOYLauf1RU+Qm9ZGqEqAgkqKlkvFo+A0DkhVXk5ea4eDS3z0O1/NVsMHprr+mNEtQI5zEX3Hr2k9YoLJkaIdyaBDWVTJP4BM4RgD9X2f/rf1w9nNtmtGZqjHY9NQbr1xLUCGdQrU3ARWVqFGv5SZYTEMK9SVBTyegNBo4Hd7c8SS5+dWV3VZCfh16xrCDt4XkjqNFbZ0LZSlNClCVbT425iJ4adJZARzFLpkYIdyZBTSUU/MBAAGKubebMyRQXj6b08nKva1/bBzUG65RuAzKtVpQ922rBRffUWDM1qvzsCeHOJKiphOo1bsVezxYYFDOpP33o6uGUWr5dL5DR80ZPja2/xijlJ+EE2orCxSy+p8g6NUK4NQlqKqsOQwBodm45mRfOungwpWMLakyqomVn4EbWxkMyNcIZbD01tunbdhQtUyPlJyHcmQQ1lVTTe3txTF8fHyWXAz9+7OrhlEpeniWoyb/pJvIe1kZhD8WE2SQfLqJs2cpPalGNwtYp3TopPwnh1iSoqaQUnY5LsS8B0PDkAnKuX3PxiErOlG8JavIUx7+Y7RfiswU+QpQVW6Nw0UGNbfaTBDVCuDMJaiqx2G4DyKAGNbjMnp++cPVwSqxAy9Q4BjVGu6bhirwGj3BT1oBFuyO3HUUnmRohKgIJaioxD6MnJxv2ByD4wMwKU7IpyMsFighq7NasybebISVEmbAFNUVM6VYMlp9FnfTUCOHWJKip5JomvEoWPoSb09i9eoGrh1MiJmumpuCm8pOi05GnWj5w8qX8JMqarfykK1x+0klPjRAVggQ1lVxV3+rsD30SAK/tn7l4NCVTkF90UAM3modN+bnlOiZR+anFlp8kUyNERSBBzV2g4SNvkqcaaJx/gEPbEl09nD9lC1iKCmpszcMF0lMjypjWBFxM+UkvmRoh3JoENXeBGqF1Sa7eBYCszbNcPJo/Z7YGNaYiMzWW16T8JMqaar2vU1GZmhvlJ8nUCOHOJKi5S3i36A1Ag0sbMBW491+b5gJrpqaIRdBs2RtbiUqIsqLd16nIoMayCKQeCWqEcGcS1Nwlotp1IwsfAsnkyI41rh5OsbRMjc5YaFuBtTRgzs8r1zGJu4C5mEZhg2RqhKgIJKi5S3gYPTnsGw/A5V3LXDuYP6FaMzXmooIaa/nJJJkaUcZsPTVKERlCnXXxPb3cokMItyZBzV1EiXoEgNpn16KazS4eza3dCGqKKD9ZAx2Z/STKnHrr2U86rVFYMjVCuDMJau4ikfc+Sp5qIEw9Q+rhZFcP55aKy9TYmofNkqkRZexGpqZwUKM3SE+NEBWBBDV3kaq+1TnoHQfAma3/cfFobq3YoMaavTEXSE+NKFtao7C+iKDG+poENUK4Nwlq7jI5DboBEHjajdersQYsqr64TI2Un0TZUmxr0BRVfvKw/CwaZJ0aIdyaBDV3mQYdngKgUcFh/jhz0rWDuRWTJWApKqixZW9s2Rwhyoq2+F5R5SetUdh9e9GEELcR1Kxfv56EhARCQ0NRFIVly5YVu/+6detQFKXQIyMjQ9vHZDIxevRoIiIi8Pb2pkGDBowbNw5VVbV9vv/+e7p06UJgYCCKopCcnOxwnpMnTxZ5HkVRWLx4sbZfUdsXLlxY2stQYdUIrUuKIQqA4xsW/8nerqGYrIugFRnUWD5cVCk/iTKmWJuAlaLKTx6WnzuDlJ+EcGuF/+/9E9euXSM2NpaBAwfy+OOPl/h9KSkp+Pr6as+DgoK0rydOnMiMGTOYM2cO0dHRJCUlMWDAAPz8/BgyZIh23nvvvZenn36aF154odDxw8LCSE9Pd3jtyy+/5MMPP6R79+4Or8+aNYtu3bppz/39/Uv8fVQGF8M6w4lDeB//BRju6uEUolgzNYres9A2sy3QMUmmRpStG0FN4Vl3eoMENUJUBKUOarp3714oSCiJoKCgWwYPmzZtolevXvTo0QOAevXqsWDBArZt26bt89xzzwGWjExR9Ho9wcHBDq8tXbqUp59+mqpVqzq87u/vX2jfW8nNzSU398YHaFZWVone585C2z0FJ6YTdX0nVzIvUs0vwNVDcqCYrD01hsKZGlXKT8JJdNbbJBRVfjJYfxZ1iorZZEKnL7xAnxDC9cqtp6Z58+aEhITw0EMPsXHjRodt8fHxrF69msOHDwOwe/duNmzYcFvBk82OHTtITk5m0KBBhbYNHjyYGjVq0KZNG77++muHMtfNJkyYgJ+fn/YICwu77TG5i7qRzUnV1caomDi8camrh1OIYrYENYqhcKbGVpJSpPwkyphttWBdEeUn2zo1APnSpC6E23J6UBMSEsLnn3/OkiVLWLJkCWFhYXTs2JGdO3dq+4wcOZLevXsTFRWFh4cHcXFxDB06lL59+972eb/66isaN25MfHy8w+vvvfceixYtIjExkSeeeIKXX36ZadOm3fI4o0aNIjMzU3ucPn36tsfkTtJqdQJAPfiTi0dSmM6aqaGI8pMtqFGtfTdClBVdMeUnD48bWUNTgfzsCeGuSl1+Kq3IyEgiIyO15/Hx8Rw7doyPP/6Yb775BoBFixYxb9485s+fT3R0NMnJyQwdOpTQ0FD69+9f6nNev36d+fPnM3r06ELb7F+Li4vj2rVrfPjhh1rvzs08PT3x9Cz84VrRVW/xGPz0LY2ubCY3JxtPLx9XD0mj0zI1RZSfbJka6akRZUxnna5dZKOwQ6ZGghoh3JVLpnS3adOGo0ePas+HDx+uZWtiYmJ47rnnGDZsGBMmTLit4//nP/8hOzubfv36/em+bdu25ffff3fom7kbNGrRiXME4Es2u2YNc/VwHOitvQ1FlZ9s2RsJakRZ0zI1RfbU3AhqzJKpEcJtuSSoSU5OJiQkRHuenZ2NTuc4FL1ej/k270/01Vdf0bNnT2rWrFmisVSvXr1SZmOKo9PrOXPv+wC0O7uQ5MT5Lh7RDTrV8qGh8yji38Rgy9RIT40oWzrrzCbbHbkdtun1mFQFAJPcIV4It1Xq8tPVq1cdsiwnTpwgOTmZgIAAwsPDGTVqFGlpacydOxeAqVOnEhERQXR0NDk5OcycOZM1a9awcuVK7RgJCQmMHz+e8PBwoqOj2bVrF1OmTGHgwIHaPhcvXiQ1NZUzZ84AliniAMHBwQ4zmY4ePcr69ev5+eefC439xx9/5OzZs7Rr1w4vLy8SExN5//33efPNN0t7GSqF5p37sOXIOtqdXUjExjfJiGxNcHhDVw8LvbX8pC8iqFGs5SdtpooQZeRGo3DhsieACT16CiiQfi4h3Fapg5qkpCQ6deqkPX/99dcB6N+/P7NnzyY9PZ3U1FRte15eHm+88QZpaWn4+PjQrFkzVq1a5XCMadOmMXr0aF5++WXOnTtHaGgoL730EmPGjNH2Wb58OQMGDNCe9+7dG4B33nmHsWPHaq9//fXX1KlThy5duhQau4eHB5999hnDhg1DVVXuuecepkyZUuS6N3eLFgM/4ciHO2hYcIT0b/oROHwdHkbXZq0MxWRqbCUpW9+NEGVFX0xPDUABeowUYJKeGiHclqIWN59ZFJKVlYWfnx+ZmZkOiwlWZGnHD+I7pxPVlOtsDu1H+xdvPRusPJx4L5YI80n2/mUuMff3cti27T9TaLPvXXb5xBP31n9dNEJRGaW+14RwcxoHui6kSfvCy0lkjQ3Bl2xO911PWMNYF4xQiIrP2Z+hcu8nQe36jTnSztKU3f7MXPasW+LS8RhUa/mpiIyRLVOjl0yNKGNa+clQeEo3gMma2JYp3UK4LwlqBAAtug9gaw3LbS/qrXuFY3s2uWwstvKTvogp3Yp1vRC99NSIMmbQempuFdRYfl2aCuRO3UK4KwlqhCZ20HQOeDTFl2yqf/9XTh/Z7ZJxeGAJWAxGr0LbdAbLa3pVghpRtrTZT7fsqbG8bpbVrIVwWxLUCI2XdxXqDF7OUX0DAsjCY94TZJw++udvLGMGLH8JFxXU2GZESflJlDW9NajRFzGlG8CsWO73ZJLZT0K4LQlqhANf/0Cqv7ic00oowfxB3qyeXDyXVq5jMKq2TI13oW22oMYgmRpRxvTaOjVFz/4zYQlqVJOUn4RwVxLUiEICa9XBY8ByMqhBuDmNi18kcCXzYrmd38OaqfHwLKL8JEGNcBJbT43+FuUnky1TI+UnIdyWBDWiSMHhDcnv+z0X8eUe0zGOffEMZpPJ6ec1m0x4KJbzeBRRfrKVpCSoEWXtRqbmFo3CiiXYkUyNEO5LghpxS2ENY7nQax65qgfNszezdc5Ip58zL/e69nVRmRq9h+U1WzOxEGXlT3tqrOUnufeTEO5LghpRrIZx97MnbiwA7VO/JHn1QqeeLzc3R/u6qJWNtUwN8teyKDuq2YxRsQU1Rd8mwSyZGiHcngQ14k+1fvQVbQ2bBuuHOnWqd75dpsZYVPnJ2lNjlPKTKEP2N8813KL8ZJv9ZJabqQrhtiSoESUS98IMDno0oZpyHdOCvlzNuuSU8xTk5wKQpxpQdIV/PG0lKQ/J1IgyVGDX/HurnhpbUCOZGiHclwQ1okSMnl7UHPQd5wignvk0h7/sh2r3121ZKbCWn/Io+oPF1jzsoZjKpXFZ3B0K8m8ENR4ef1Z+kiyhEO5KghpRYjWCw7n4yEzyVD0trq5n34Yfy/wcBfmWoCZfKTqoMdj12eTl5RS5jxClVWB36wP9n5afJFMjhLuSoEaUSlSrB9lZ6wkA9Bs+LPPjF1gDlXyKnoFitJsRlZcrQY0oG/Yzmm7ZU6Ozvi6ZGiHclgQ1otQieo4kTzXQJG8vBzb/t0yPrQU1t8jU2DcP2zcVC3EnbLc+MKsKOr2+yH1UW0+NWTI1QrgrCWpEqdWq04BdNXoAUPBr2WZrTHmWRuGCWwQ1ik5HnmrJ4uRL+UmUEVtPTQFFBzQAqk56aoRwdxLUiNsS9sj/UaDqaJazg8M715XZcU3WnppbBTVwozRlss6UEuJOma09NcUGNdZMDZKpEcJtSVAjbktoRBS7/LsAcG3VxDI7rtk6tdZUTFCTZ91WID01oozYyk+mYn4lqtaeGpnSLYT7kqBG3LZaPUZhVhXisjdxbO+WMjmmWcvUFD2tFiDfOt1byk+irJht5Sel6AZ1sM/USPlJCHclQY24beGNmrPLtxMAl3+ZUCbHNFtLSibdrTM1ttKUbfq3EHfKZM2+mErQU4NkaoRwWxLUiDsS0M1yk8u4K79y6tDOOz6eWmAJasy6W2dqbH9Nm/NluXpRNsy22U/F/Uq0BTXSUyOE25KgRtyRiOi27PLpgE5RyfvPixzdvfGOjmcusGVqiglqrOUnk2RqRBkxlyhT42HbuTyGJIS4DRLUiDvm9/A7ZKueNCw4Qv3ve7Btah/OZ6Q67HPxXBq71y7+06DHlqlRiys/WQMemf0kyoot62cqrqdGZwl4FOmpEcJt3fr/YCFKqH7TtqRX+42D/xlJyytraHP5Z67NWMOWWr3wuH6OkKsHCFXPEgDkq3oO5iygcduuRR5Ltc5+Kq78ZJsZZQuAhLhTWk+NcutMDVqmRspPQrgrydSIMhFSN5KWbyzlUI8lpBgiqaLk0O7cd7S8spZQ9SwAl/DFQzFR478vcT7jdNEHMlmDGn0xQY3OVn6SoEaUDVXrqSkuqLH8DSiZGiHcl2RqRJmKat0Zc4tOJP08E/XoakzV76FK/baEx3TAaDBw8uN7qWc+zf6vn8F/+GoMN98R2ZZ9KS6osWZqzBLUiDJiu/dTceUn9NagRpWeGiHclQQ1oszp9HpaJbwEvFRo24Xe33JtXlei8/aw5auhtPv7vxy2K9ZMjar3LPReG1tpSspPoqyYrSUlcwnKT4qUn4RwW1J+EuUqvFFzUtp9AEC7jHns+mWOw3bFZG0ULiZTYytN2fpvhLhTtlWCiys/KVqjsAQ1QrirUgc169evJyEhgdDQUBRFYdmyZcXuv27dOhRFKfTIyMjQ9jGZTIwePZqIiAi8vb1p0KAB48aNQ1VVbZ/vv/+eLl26EBgYiKIoJCcnFzpXx44dC53n73//u8M+qamp9OjRAx8fH4KCghg+fDgFBfJLqjy16D6ALbX6ANBw0whSDyff2GjN1GAoLlNjbdg0SaZGlA2tp6a4TI3emqlR5feFEO6q1EHNtWvXiI2N5bPPPivV+1JSUkhPT9ceQUFB2raJEycyY8YMpk+fzsGDB5k4cSKTJk1i2rRpDue99957mTix+PsMvfDCCw7nmTRpkrbNZDLRo0cP8vLy2LRpE3PmzGH27NmMGTOmVN+LuHMtB33CAY+mVFWuU21+AnvXLwVAZwtqisnUqFJ+EmVMW3xPd+uKvKI1CktPjRDuqtQ9Nd27d6d79+6lPlFQUBD+/v5Fbtu0aRO9evWiR48eANSrV48FCxawbds2bZ/nnnsOgJMnTxZ7Hh8fH4KDg4vctnLlSg4cOMCqVauoVasWzZs3Z9y4cYwYMYKxY8diNN76g1SULQ+jJ0GDFnDs371oYDqO3+oBbD66CaPJsqCeYigmqLEGPIqUn0QZ0cpPxWRqFMnUCOH2yq2npnnz5oSEhPDQQw+xcaPjAmzx8fGsXr2aw4cPA7B79242bNhwW8HTvHnzqFGjBk2bNmXUqFFkZ2dr2zZv3kxMTAy1atXSXuvatStZWVns37+/yOPl5uaSlZXl8BBlo0ZwOLXf3MDWgJ7oFJX2qV/S/MqvACjFlJ9sTcS2koEQd0q19smoxZafLH8D6iSoEcJtOX32U0hICJ9//jmtWrUiNzeXmTNn0rFjR7Zu3UqLFi0AGDlyJFlZWURFRaHX6zGZTIwfP56+ffuW6lzPPPMMdevWJTQ0lD179jBixAhSUlL4/vvvAcjIyHAIaADtuX2Pj70JEybw7rvvlvbbFiXk5V2FtkO+YfsP/yJ651h8FEtJSVdsUGP9i1l6akQZUQtsPTW3/pWos/7c6f6kUfjs78cwmwoIqRtZdgMUQpSI04OayMhIIiNv/M8dHx/PsWPH+Pjjj/nmm28AWLRoEfPmzWP+/PlER0eTnJzM0KFDCQ0NpX///iU+14svvqh9HRMTQ0hICA8++CDHjh2jQYMGtzX+UaNG8frrr2vPs7KyCAsLu61jiVtr3etlTjZqg7K4P3XNv1MltJgPBGum5s+CmkPbV+FdtTp1G7csy6HekZ2TE6h57ShK38XUuadpmR+/ID+v8No/dlSzmUPbE6kd2Qpf/8AyP78zbZn/TzzSk2jy92/wrlKtbA+uZWr+fJ0aXTHr1OzbsJz6iX+jQNGTOWQPfgE1y3SYQojiuWRKd5s2bTh69Kj2fPjw4YwcOZLevXsTExPDc889x7Bhw5gwYcIdnadt27YA2rmCg4M5e/aswz6257fqw/H09MTX19fhIZyjXuNWBL+1nbR+m2jSrtutd7T229jWtCnKvg3LifrpCQIX9uCPMyfLeKS3JyVpDS2uridMPYMy7/Fbr6pchL3rl7J18UdkXb5Q5PYju9az//37MP0zlF0rv73lcbbOG0vj/z7Nic//Wurxu1LW5Qu0SPmYllfWsm/VN3d8vNycbEx2sx618pPu1uUnD28/ACJyDxVaigBgz7ol3JM4EB8lF1+ySVk775bHSj2czIn9W293+EKIW3BJUJOcnExISIj2PDs7G53OcSh6vR6z2XzH5wG0c7Vv3569e/dy7tw5bZ/ExER8fX1p0qTJHZ1LlA1PLx9q148udh/F2iisu8Vy9ZmXzlNz1VAAqirXOfnd8DId4+26sv7GjMHa6lku/7sXVzIv/un7ju7eQOPVA2m7/z30Hzdh62eD+P3oPgDST6WQNOUJGv6QQHTeHjyVfBpseov0UymFjnNszyZaHJ0OQGzOdo4k/1ZG39mduX7tCts+fZYtC96/5T4pv36HUbEEHh4py2/7XKaCAjbP+T+UCWEkf/LkjQ0l6Klpcm8v9htj8VFyids8hM1fDtECo+TVC4la+yJeSj4Xsfzh43N46S2P9ceP7xKxuAub546+7e9FCFFYqctPV69edciynDhxguTkZAICAggPD2fUqFGkpaUxd+5cAKZOnUpERATR0dHk5OQwc+ZM1qxZw8qVK7VjJCQkMH78eMLDw4mOjmbXrl1MmTKFgQMHavtcvHiR1NRUzpw5A1imiIMlwxIcHMyxY8eYP38+Dz/8MIGBgezZs4dhw4Zx//3306xZMwC6dOlCkyZNeO6555g0aRIZGRn84x//YPDgwXh63rqHQ7gXfdUaADTM2sSJ/VuJiG7rsP3IrL/TigucI4Aa6iVaZ67k0LZEoto8VOhY25ZMxfPoT+QZAyioEoRSLRgPv1DCm3eiZmi9MhvzH2dOEpu5FhTY0WYqEdvGcI/pGPv+9RgNh/0XTy+fIt+Xl5uD7ofBGBQz11Qvqig5tP3jP5i/WcIBz6Y0yD1EiGIJ7rb7dcXv2gkaFRwm7dvnqfnWr1opKuf6NfTLXsKomMhTDRiVAq6smgTN7yvR+M+fOcXJhW/g1bY/TTsklM1FwVIO2/flINpk/kLBhZ84f6YvNULrFtrP49AP2tdNrm3nSuZFqvkFlOpcGalHuPjtANrn7QUFWl5Zy5Hk32jY/D5t9lNxd4f3MHoSOXwVW2YOod3ZBbQ/M4c9k/eRE/kYzZPfwaiY2FnlPmo+NoGAb++lSc5uzp85Vej7OZ+RSkzWr6BAzdhiMpJCiFIrdaYmKSmJuLg44uLiAHj99deJi4vT1npJT08nNTVV2z8vL4833niDmJgYHnjgAXbv3s2qVat48MEHtX2mTZvGk08+ycsvv0zjxo158803eemllxg3bpy2z/Lly4mLi9Omfffu3Zu4uDg+//xzAIxGI6tWraJLly5ERUXxxhtv8MQTT/Djjz9qx9Dr9axYsQK9Xk/79u159tln6devH++9915pL4NwoaYP9SfFEIUf16i2+GlOH9mtbdvx81e0ykrEpCpcfGQmSQEPA6D/ZaRDuQEg6ccvaLP3HWKvb6N15v9of2Yu7VIm0XLbUKp90YrN/36Nq1mXSjyuC2d/J+f6tSK3Hf3vNDwUEwc9mtDy4QFceHQ+11QvmuYms296H8ymovs0dswbTX3zSS7hy/X/l8Tev8xmt3dbdIpKk7y9eCr57DfGcvSxn2g9bBFV+37DFdWbxvkH2D53lHac5FnDqGdO5Tz+HOli+YOj+ZXfHK5dcY4vHkWrrETqrxzE4Z2/lvia/Jlt//mI1pm/AGBQzBxJ/KLQPpmXztMkOwmAS1TDqBSQ8uuiUp1nx08z8fn6fprk7eWa6sVRvaXHLmvVZMsO1qxfsbOfAIOHkXb/73OSWn3IddVIs5wdtNn9D4yKiR3VOhHz2hLC7onhkEcTdIrK0XVzCx3jyH8/w6iYOGRozD2xHUr1fQghiqeo9sv2ij+VlZWFn58fmZmZ0l/jQpkX/+D8Z11oYDpOBjVQB/yMwcMT45fx+HGNzXUG0v5vH3Ph7O8Y/9WKasp1tjV9hzZPWpq+921YTqPE5zEqJrb7daEgoCG6q2fxuH4Ov+unaWA6AcB5/DnR7HVa9ByM3lB0YvNq1iX2ffsWrc8u5pS+LrWG/UqVav7a9tycbK580JgaXGZHmym0fHgQYOmTiVw9yDIG/+7EvDgTL5+q2vuO7d1C+H8exkMxkdR6Mq16vKBtO31kN2mb/4N3WDOaPfAEil35NmnFl7RKGo5JVUjptgBzQR5NV/cDYPf9XxD7l94kT+pG8+zNbKv+CG1eu3XvB1iyNL5ftNDKPxfwI6ffL9Su37ik/1xFSklaQ8SPT2JUTBzwaEqT/H2kKbUI+cdBdPobwcX2ZZ/ROvn/OKkLIz30Idr//jW7fOKJe+u/JTrPln+9QLtzliAoxRBJld5fk5dzjfr/6YJJVcjov5HUdbNpn/olWwMfpe2rhftlinJ831Y8lzxHbfUs2/26EPfKPC0ztvW7D2h7cAKHDY1o9I/t2nsK8vO4OD6SIC6S1GIirXr+/VaHF6JScvZnqNz7SVRIfgE1qf7SCk7pwgjmPKbZPTk3ux9+XOOI/h5a9bPcXyqwVh32Rw4GoOG+j8m8+Acn9m+lbuKLlnJB1QdoOWQh7fu/T9vBX9HizR+p//ZOdsV/xu9KCDW4TOs9Yzg5oTVbF31IRuoRh3HsWvkt16a0pN25RegVlfrmkxz8ciCqXT/Y3pVzqMFlzhFAs87Paq/H3P8Ye9pMxKwqtL78XzImt+fEAcsHYH5eLuqyl/FQTOzy6UDL7oMczhvWMJZ2/cYR2+kph4AGoNUjL7LN/2H0ikrgL4OpuXoYAFsDHyX2L70B8Or4BgDNL/6Xc2knir3WR1Z8hFEp4LChEcf09QkkE/M3j3P5fNHLIJTEhbO/47/ib1rJpt5rP3NF9aa2epYDm39y2NeYYik9pdfpTq12lvE3uba9RFm0PeuW0O7cIsyqwpY6g6j/1m/Uuacp9Zu2ZY9Xa/SKyu8/TwbbmkfFrCh8s/pN2+I3bCuHHv4PLYcsdJh1dk/HZylQdTQqOMzpo3tvjGf1fIK4yEV8ienSr8TnEkKUjAQ1osIKCKqN96AfOaPUoo6aQXTebnJUD4xP/RsP440eqZZPvsVJXRjVyeLIrJeosrg31ZTrluzA4AUOWQEARacjrsuzBI1MZkvD18nChwam47Q98E+Cv27Fifdi2fzFq+ya9DBxmwZTiwv8rgSzpeHrFKg6Wl1ZzbbFlttzqGYzfnu+AuB4vT4O4wJo1eMF9v/la87jTz1zKiHfdWfrokkkzX+He0zHyKQKYf0+LxS4/JnoQTM4rYRSiwvU4gKnlVBiBnyqbY9q8xAHjDEYFRPHl9/61iNXsy4RfWYxANfavIbvoKVkUJMw9QzpXzx2y3JbcQry88j46hlqcYFUXW0avjgXn6p+HKjRFYDcrbO0fTMv/kFja+kptH1vIpq05rQSiqeSz6H1i4s9T871awT8+jYA24L/Sru/TXG4/vr7LMFe7B8/or9mmQWpliKoAajqW52oNg8V+hkKrFWHA96WpQR+X39jtpbnzq8BSKn9+C37qIQQt0+CGlGhBdWOgH7LOYelaTQ5ahh1o1o47ONh9ORqp/EAtLqymiAuckoXRu2/f4+Xd5VbHtvo6UW7vu9gGryTzRGDOejRBJOqEGE+Sfv0ucRlbyRf1bO59vPUGL6Ddn3fIamR5YMy7sAkDiWtJmXnWhoWHCFX9aDRw4OLPE/MA4+j/L+N7PZqjZeST9sD42l/cgYAR1qMpkZweKmvS5Vq/uQ+OpM81UCBqiO7x2f4VPVz2Ce//WuW82csJfPC2aIOw74fp+FLNqm62sQ+2IeaofXI+etCsvChcf4BDn/Sk81fDGb7x39lzwedOTKuJdum9uHC2d+LPN71a1fY+a/nic7bTbbqifrUN1rDb+D9lvJaTNZ6Lv2RDkDKrwsxKiZO6OpSt3FLFJ2O30O7AKA/+EOR57DZteBd6qjpnCOA6GcKLw/RpH13Dhsa4aXk0+xSouXFP+mpKY3cxo8DUPv3FahmM6cO7iA6b7flZ6jrK2V2HiHEDRLUiAovNCIK4yubOdDtO9r+dVSR+zS9rxc7q9wPwB9Ux9h/CX6BtYrc92bVa4bQvv/7NH57M1dePURSy0kk+XYmqdqD/P7XX2j/widaL0zbPv9gZ9X7MSomqq94gdzVljLYnuqdCQiqfctzBNaqQ8zwX9jS6E3yVEu2INm7HS0feanE1+Fm98R2IPXx5RzvtYzIVn8ptL3ZA09wTB9BFSWHA8unFNqen5dLvSOW/pKMJn/TshH1Grci9aEvyVP1NMtJon36t7TO/B/NcrbT0HSUNpd/Rj+jLdt/+JdDGW7fbz9wcXJL2lyylJcOtp3gsDDiPbH3clTfwNIIvPLfAHhaS08ZYTdumRLU1rLGTuOrW7l25XKR33va8f20OGXJipxu848iZ0opOh1XW1kCTS/rDLLSZmqK07hTH3JUD8LNaRzbu4mM1Zbp9HuqxBMc3rDMziOEuEEahUtJGoUrrovn0khZ+gGhHQdRN7K5085zJfMil6d2IEw9o7129LGfuCf23hK9/9jeLfyxYzmNE14rceB1u5J++jettr/JJarh8fpeqvpWv7Ft+Qxa7RzJefypOuJAoazW7jWLyNu9GJNnddQqNdH71kLvWQX/HdNpYDoOwB6v1lTp8U8urP6ENpd/BiCDGpy9fwKxf3m60Hi2LvqQtgf+ySldGP6DV+PzaWM8FBOn+vyq/ZupZjNp4xpTR81gR+uPaNnjbw7HUM1m9k7qQrOc7ez1bEHTEatvWb4zFRSQPr4pdVRLZmhz2N9oP+ij27uYRdg5uSctrv7K1oCeRF9IpKpynX0PzqXpfb3K7BxCVCTO/gyVoKaUJKgRJXHiwHZqfdcDHyWXgx7RNH57k6uHVKSC/DzOvt+U2upZzii1+OP+8cR2egrVbObEP+Oobz7JlnqDaff8rRfGu1l+Xi5JC96lxfEv8VRuLJBoVhW213yc6H4fOQRP9q5kXkQ/JQofJZdt1XvQ5tJPnNDVI2KM49TzzV++Svszc9lZ5X5aDP/RYduuX+YQt3kIeaqBs8+uIaxhbLHj3bp4Mm33W5aP2Fz377QfcOseo9LatfJb4jbdKDue0tUh/B97S90jJURlIbOfhKiAIpq05lD8R5zUhaE+OMbVw7klg4eRK90/I4MahKpnif31b+yc3JPtP3xGffNJslVPGvccVqpjehg9ad//fTKeWcVBD8tK3ad0YRzusZi2r3x9y4AGoJpfAPuqW9awspWpMsIKL1BXo40ly9P46hayr2Zqr1/NukToZssNaHeG9f/TgAYg9pH/xwWs/UbF3CbhdjS5/3GyuNEQnN6wrwQ0QjiRZGpKSTI1ojK6duUye78dSauM7zAoN/pgtgT9lXYvf3nbxzWbTBzft4XwqJYYPb1K9J5D21cR9dMT2vPUZ34lvFFzh31Us5n0cVGEqmfZ3uw9dF5VUQ/9TKOszfhyjTNKLQKG73RY96c4Scs/p87OD7ny6GwalnCV5ZLa9skztLn0E9mqJwXDDla4G4kKUZak/ORmJKgRldmxvVso+OE1IgsOka/qOT9wMyF1i7ljuhOoZjOn/hlLPXMqx3X1qD+m6FWPN38xmPbphW/eeR5//uj+JY3bdnX2UEvk2N4tBCx5kkP1nqX98x+4ejhCuJSzP0PLrtVfCFHhNYhph7nJJnat+hZj1RpEl3NAA5ZZSedbvEq9pOGcjx5A/VvsV6tDPwoWz8egmDmthJJWqxP+cY/SsOVfqHGL1Z9doUFMO4j5nfauHogQdwHJ1JSSZGqEKB852Vf/tHx04sB2dHoPp85mE0KUHcnUCCHuSiXph4lo0rocRiKEqCikDV8IIYQQlYIENUIIIYSoFCSoEUIIIUSlIEGNEEIIISoFCWqEEEIIUSlIUCOEEEKISkGCGiGEEEJUChLUCCGEEKJSkKBGCCGEEJWCBDVCCCGEqBTkNgmlZLtVVlZWlotHIoQQQlQsts9OZ912UoKaUrpw4QIAYWFhLh6JEEIIUTFduHABPz+/Mj+uBDWlFBAQAEBqaqpT/kFEYVlZWYSFhXH69Gm5M3o5kWte/uSalz+55uUvMzOT8PBw7bO0rElQU0o6naUNyc/PT/4nKGe+vr5yzcuZXPPyJ9e8/Mk1L3+2z9IyP65TjiqEEEIIUc4kqBFCCCFEpSBBTSl5enryzjvv4Onp6eqh3DXkmpc/ueblT655+ZNrXv6cfc0V1VnzqoQQQgghypFkaoQQQghRKUhQI4QQQohKQYIaIYQQQlQKEtQIIYQQolKQoEYIIYQQlYIENaXw2WefUa9ePby8vGjbti3btm1z9ZAqjQkTJtC6dWuqVatGUFAQjz76KCkpKQ775OTkMHjwYAIDA6latSpPPPEEZ8+eddGIK58PPvgARVEYOnSo9ppc87KXlpbGs88+S2BgIN7e3sTExJCUlKRtV1WVMWPGEBISgre3N507d+bIkSMuHHHFZjKZGD16NBEREXh7e9OgQQPGjRvncENFueZ3Zv369SQkJBAaGoqiKCxbtsxhe0mu78WLF+nbty++vr74+/szaNAgrl69WvrBqKJEFi5cqBqNRvXrr79W9+/fr77wwguqv7+/evbsWVcPrVLo2rWrOmvWLHXfvn1qcnKy+vDDD6vh4eHq1atXtX3+/ve/q2FhYerq1avVpKQktV27dmp8fLwLR115bNu2Ta1Xr57arFkz9bXXXtNel2teti5evKjWrVtXff7559WtW7eqx48fV3/55Rf16NGj2j4ffPCB6ufnpy5btkzdvXu32rNnTzUiIkK9fv26C0decY0fP14NDAxUV6xYoZ44cUJdvHixWrVqVfWTTz7R9pFrfmd+/vln9e2331a///57FVCXLl3qsL0k17dbt25qbGysumXLFvW3335T77nnHrVPnz6lHosENSXUpk0bdfDgwdpzk8mkhoaGqhMmTHDhqCqvc+fOqYD666+/qqqqqpcvX1Y9PDzUxYsXa/scPHhQBdTNmze7apiVwpUrV9SGDRuqiYmJ6gMPPKAFNXLNy96IESPUe++995bbzWazGhwcrH744Yfaa5cvX1Y9PT3VBQsWlMcQK50ePXqoAwcOdHjt8ccfV/v27auqqlzzsnZzUFOS63vgwAEVULdv367t89///ldVFEVNS0sr1fml/FQCeXl57Nixg86dO2uv6XQ6OnfuzObNm104ssorMzMTuHFX9B07dpCfn+/wbxAVFUV4eLj8G9yhwYMH06NHD4drC3LNnWH58uW0atWKp556iqCgIOLi4vj3v/+tbT9x4gQZGRkO19zPz4+2bdvKNb9N8fHxrF69msOHDwOwe/duNmzYQPfu3QG55s5Wkuu7efNm/P39adWqlbZP586d0el0bN26tVTnk7t0l8D58+cxmUzUqlXL4fVatWpx6NAhF42q8jKbzQwdOpQOHTrQtGlTADIyMjAajfj7+zvsW6tWLTIyMlwwysph4cKF7Ny5k+3btxfaJte87B0/fpwZM2bw+uuv83//939s376dIUOGYDQa6d+/v3Zdi/pdI9f89owcOZKsrCyioqLQ6/WYTCbGjx9P3759AeSaO1lJrm9GRgZBQUEO2w0GAwEBAaX+N5CgRridwYMHs2/fPjZs2ODqoVRqp0+f5rXXXiMxMREvLy9XD+euYDabadWqFe+//z4AcXFx7Nu3j88//5z+/fu7eHSV06JFi5g3bx7z588nOjqa5ORkhg4dSmhoqFzzSkjKTyVQo0YN9Hp9oVkfZ8+eJTg42EWjqpxeeeUVVqxYwdq1a6lTp472enBwMHl5eVy+fNlhf/k3uH07duzg3LlztGjRAoPBgMFg4Ndff+XTTz/FYDBQq1YtueZlLCQkhCZNmji81rhxY1JTUwG06yq/a8rO8OHDGTlyJL179yYmJobnnnuOYcOGMWHCBECuubOV5PoGBwdz7tw5h+0FBQVcvHix1P8GEtSUgNFopGXLlqxevVp7zWw2s3r1atq3b+/CkVUeqqryyiuvsHTpUtasWUNERITD9pYtW+Lh4eHwb5CSkkJqaqr8G9ymBx98kL1795KcnKw9WrVqRd++fbWv5ZqXrQ4dOhRaquDw4cPUrVsXgIiICIKDgx2ueVZWFlu3bpVrfpuys7PR6Rw/6vR6PWazGZBr7mwlub7t27fn8uXL7NixQ9tnzZo1mM1m2rZtW7oT3lGb811k4cKFqqenpzp79mz1wIED6osvvqj6+/urGRkZrh5apfD//t//U/38/NR169ap6enp2iM7O1vb5+9//7saHh6urlmzRk1KSlLbt2+vtm/f3oWjrnzsZz+pqlzzsrZt2zbVYDCo48ePV48cOaLOmzdP9fHxUb/99lttnw8++ED19/dXf/jhB3XPnj1qr169ZHrxHejfv79au3ZtbUr3999/r9aoUUN96623tH3kmt+ZK1euqLt27VJ37dqlAuqUKVPUXbt2qadOnVJVtWTXt1u3bmpcXJy6detWdcOGDWrDhg1lSrezTZs2TQ0PD1eNRqPapk0bdcuWLa4eUqUBFPmYNWuWts/169fVl19+Wa1evbrq4+OjPvbYY2p6errrBl0J3RzUyDUvez/++KPatGlT1dPTU42KilK//PJLh+1ms1kdPXq0WqtWLdXT01N98MEH1ZSUFBeNtuLLyspSX3vtNTU8PFz18vJS69evr7799ttqbm6uto9c8zuzdu3aIn9/9+/fX1XVkl3fCxcuqH369FGrVq2q+vr6qgMGDFCvXLlS6rEoqmq3rKIQQgghRAUlPTVCCCGEqBQkqBFCCCFEpSBBjRBCCCEqBQlqhBBCCFEpSFAjhBBCiEpBghohhBBCVAoS1AghhBCiUpCgRgghhBCVggQ1QgghhKgUJKgRQgghRKUgQY0QQgghKoX/D8ns/eT25wwPAAAAAElFTkSuQmCC\n"},"metadata":{}},{"output_type":"stream","name":"stdout","text":["Validation loss decreased (23843730.000000 --> 23843692.000000). Saving model ...\n","Validation loss decreased (23843692.000000 --> 23843688.000000). Saving model ...\n","Validation loss decreased (23843688.000000 --> 23843686.000000). Saving model ...\n","Validation loss decreased (23843686.000000 --> 23843680.000000). Saving model ...\n","Validation loss decreased (23843680.000000 --> 23843678.000000). Saving model ...\n","Validation loss decreased (23843678.000000 --> 23843676.000000). Saving model ...\n","Validation loss decreased (23843676.000000 --> 23843672.000000). Saving model ...\n","Validation loss decreased (23843672.000000 --> 23843670.000000). Saving model ...\n","Validation loss decreased (23843670.000000 --> 23843670.000000). Saving model ...\n","Validation loss decreased (23843670.000000 --> 23843670.000000). Saving model ...\n","Validation loss decreased (23843670.000000 --> 23843670.000000). Saving model ...\n","Validation loss decreased (23843670.000000 --> 23843670.000000). Saving model ...\n","Validation loss decreased (23843670.000000 --> 23843670.000000). Saving model ...\n","Validation loss decreased (23843670.000000 --> 23843670.000000). Saving model ...\n","Validation loss decreased (23843670.000000 --> 23843670.000000). Saving model ...\n","Validation loss decreased (23843670.000000 --> 23843670.000000). Saving model ...\n","Validation loss decreased (23843670.000000 --> 23843670.000000). Saving model ...\n","Validation loss decreased (23843670.000000 --> 23843670.000000). Saving model ...\n","Validation loss decreased (23843670.000000 --> 23843668.000000). Saving model ...\n","Validation loss decreased (23843668.000000 --> 23843668.000000). Saving model ...\n","Validation loss decreased (23843668.000000 --> 23843668.000000). Saving model ...\n","Validation loss decreased (23843668.000000 --> 23843666.000000). Saving model ...\n","Validation loss decreased (23843666.000000 --> 23843666.000000). Saving model ...\n","Validation loss decreased (23843666.000000 --> 23843666.000000). Saving model ...\n","Validation loss decreased (23843666.000000 --> 23843664.000000). Saving model ...\n","Validation loss decreased (23843664.000000 --> 23843662.000000). Saving model ...\n","Validation loss decreased (23843662.000000 --> 23843662.000000). Saving model ...\n","Validation loss decreased (23843662.000000 --> 23843662.000000). Saving model ...\n","Validation loss decreased (23843662.000000 --> 23843662.000000). Saving model ...\n","Validation loss decreased (23843662.000000 --> 23843662.000000). Saving model ...\n","Validation loss decreased (23843662.000000 --> 23843662.000000). Saving model ...\n","Validation loss decreased (23843662.000000 --> 23843662.000000). Saving model ...\n","Validation loss decreased (23843662.000000 --> 23843662.000000). Saving model ...\n","Validation loss decreased (23843662.000000 --> 23843662.000000). Saving model ...\n","Validation loss decreased (23843662.000000 --> 23843660.000000). Saving model ...\n","Validation loss decreased (23843660.000000 --> 23843660.000000). Saving model ...\n","Validation loss decreased (23843660.000000 --> 23843660.000000). Saving model ...\n","Validation loss decreased (23843660.000000 --> 23843660.000000). Saving model ...\n","Early stopping at epoch 59\n"]},{"output_type":"display_data","data":{"text/plain":["
"],"image/png":"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ubm5ZGVlOTyEEJWb/do0d11QU0EMHDiQY8eO8euvv2qvzZo1iyeeeAI/Pz9q167Nm2++SfPmzalfvz6vvvoq3bp1Y9GiRSU6/qpVqzh06BBz584lNjaW+++/n/fff7/Qfv/4xz+Ij4+nXr16JCQk8Oabb2rn8Pb2pmrVqhgMBoKDgwkODsbb27vQMebPn09OTg5z586ladOm/OUvf2H69Ol88803nD17VtuvevXqTJ8+naioKB555BF69OjB6tWrS3zNJk+ezIgRI+jduzeRkZFMnDiR5s2ba9mp1NRUGjZsyL333kvdunW599576dOnj7YtODiYzp07Ex4eTps2bUocTJUnp9/QMiQkhM8//5xWrVqRm5vLzJkz6dixI1u3bqVFixYAjBw5kqysLKKiotDr9ZhMJsaPH0/fvn0djrVixQp69+5NdnY2ISEhJCYmUqNGDQAyMjIcSlpgieYDAgK0/p2MjAwiIiIc9qlVq5a2rXr16oXGP2HCBN59992yuRhCiApBdeipucuCGg8fS9bEFecthaioKOLj4/n666/p2LEjR48e5bfffuO9994DLL2a77//PosWLSItLY28vDxyc3NL3DNz8OBBwsLCCA29kbVq3759of2+++47Pv30U44dO8bVq1cpKCjA19e3VN/LwYMHiY2NpUqVG5mqDh06YDabSUlJ0T6noqOj0ev12j4hISHs3bu3ROfIysrizJkzdOjQweH1Dh06aBmX559/noceeojIyEi6devGI488QpcuXQB46qmnmDp1KvXr16dbt248/PDDJCQkYDC4132xnZ6piYyM5KWXXqJly5baD2B8fDwff/yxts+iRYuYN28e8+fPZ+fOncyZM4fJkyczZ84ch2N16tSJ5ORkNm3aRLdu3Xj66ac5d+6cU8c/atQoMjMztYctFSeEqMTsmoPvukyNoljKQOX9sJaQSmPQoEEsWbKEK1euMGvWLBo0aMADDzwAwIcffsgnn3zCiBEjWLt2LcnJyXTt2pW8vLKbor9582b69u3Lww8/zIoVK9i1axdvv/12mZ7DnoeHh8NzRVEwm81ldvwWLVpw4sQJxo0bx/Xr13n66ad58sknAcvdxVNSUvjXv/6Ft7c3L7/8Mvfff3+penrKg0umdLdp04ajR49qz4cPH87IkSPp3bs3MTExPPfccwwbNkxrULKpUqUK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\n"},"metadata":{}}],"source":["mb = master_bar(range(epochs))\n","mb.names = ['Training loss', 'Validation loss']\n","\n","x = []\n","training_losses = []\n","validation_losses = []\n","\n","valid_mean_min = np.Inf\n","\n","# Training loop\n","for epoch in mb:\n"," x.append(epoch)\n"," total_loss = torch.Tensor([0.0]).to(device)\n","\n"," # train\n"," model.train()\n"," for batch in progress_bar(train_loader, parent=mb):\n"," optimizer.zero_grad()\n"," last_names = batch['last_names'].to(device)\n"," labels = batch['labels'].to(device)\n"," lengths = batch['lengths']\n"," outputs = model(last_names, lengths)\n"," loss = criterion(outputs, labels)\n"," loss.backward()\n"," optimizer.step()\n"," total_loss += loss.item()\n","\n"," # decay lr\n"," scheduler.step()\n"," mean = total_loss / len(train_loader)\n"," training_losses.append(mean.cpu())\n","\n"," # validation\n"," model.eval()\n"," validation_loss = torch.Tensor([0.0]).to(device)\n"," with torch.no_grad():\n"," for batch in progress_bar(val_loader, parent=mb):\n"," last_names = batch['last_names'].to(device)\n"," labels = batch['labels'].to(device)\n"," lengths = batch['lengths']\n"," outputs = model(last_names, lengths)\n"," loss = criterion(outputs, labels)\n"," validation_loss += loss.item()\n","\n"," val_mean = validation_loss / len(val_loader)\n"," validation_losses.append(mean.cpu())\n"," mb.update_graph([[x, training_losses], [x, validation_losses]], [0,epochs])\n"," mb.write(f\"\\nEpoch {epoch}: Training loss {mean.item():.6f} validation loss {val_mean.item():.6f} with lr {lr:.6f}\")\n","\n"," # save model if validation loss has decreased\n"," if val_mean.item() <= valid_mean_min:\n"," print('Validation loss decreased ({:.6f} --> {:.6f}). Saving model ...'.format(\n"," valid_mean_min,\n"," val_mean.item()))\n"," torch.save(model.state_dict(), '/content/drive/MyDrive/Colab/instate_v2/state_lang.pt')\n"," valid_mean_min = val_mean.item()\n","\n"," # early stopping\n"," if early_stopper.early_stop(validation_losses[-1]):\n"," print(f\"Early stopping at epoch {epoch}\")\n"," break"]},{"cell_type":"code","source":["!curl ntfy.sh/c -d \"training done\""],"metadata":{"id":"7jiAG85NLaqi"},"execution_count":null,"outputs":[]},{"cell_type":"code","execution_count":21,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":996,"status":"ok","timestamp":1722031591699,"user":{"displayName":"Rajashekar Chintalapati","userId":"03596288833202137831"},"user_tz":420},"id":"VAh7kU6zOalo","outputId":"ceb53b93-7a3a-4be5-f853-81e1973333fb"},"outputs":[{"output_type":"execute_result","data":{"text/plain":[""]},"metadata":{},"execution_count":21}],"source":["# load the model\n","\n","model.load_state_dict(torch.load('/content/drive/MyDrive/Colab/instate_v2/state_lang.pt'))"]},{"cell_type":"code","execution_count":22,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":35},"executionInfo":{"elapsed":4,"status":"ok","timestamp":1722031591699,"user":{"displayName":"Rajashekar Chintalapati","userId":"03596288833202137831"},"user_tz":420},"id":"fsDdKC55FNLO","outputId":"83e177d4-dcd7-4add-e566-b524a4d7730c"},"outputs":[{"output_type":"execute_result","data":{"text/plain":["'last_name'"],"application/vnd.google.colaboratory.intrinsic+json":{"type":"string"}},"metadata":{},"execution_count":22}],"source":["langs = df.columns.to_list()\n","# remove first element in columns\n","langs.pop(0)"]},{"cell_type":"code","execution_count":23,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":3,"status":"ok","timestamp":1722031591699,"user":{"displayName":"Rajashekar Chintalapati","userId":"03596288833202137831"},"user_tz":420},"id":"BVMjrjsVF0wn","outputId":"2d1da503-1964-4742-8edb-cbfeee7f9313"},"outputs":[{"output_type":"execute_result","data":{"text/plain":["37"]},"metadata":{},"execution_count":23}],"source":["len(langs)"]},{"cell_type":"code","source":["!pip install Levenshtein"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"hziqLcIRbHZW","executionInfo":{"status":"ok","timestamp":1722037353698,"user_tz":420,"elapsed":5306,"user":{"displayName":"Rajashekar Chintalapati","userId":"03596288833202137831"}},"outputId":"85e1787e-2d24-4d65-8675-0f74ae6709f1"},"execution_count":57,"outputs":[{"output_type":"stream","name":"stdout","text":["Collecting Levenshtein\n"," Downloading Levenshtein-0.25.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (3.3 kB)\n","Collecting rapidfuzz<4.0.0,>=3.8.0 (from Levenshtein)\n"," Downloading rapidfuzz-3.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (12 kB)\n","Downloading Levenshtein-0.25.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (177 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m177.4/177.4 kB\u001b[0m \u001b[31m12.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hDownloading rapidfuzz-3.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.4 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m3.4/3.4 MB\u001b[0m \u001b[31m100.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hInstalling collected packages: rapidfuzz, Levenshtein\n","Successfully installed Levenshtein-0.25.1 rapidfuzz-3.9.4\n"]}]},{"cell_type":"code","source":["from Levenshtein import distance\n","\n","# Calculating the Levenshtein Distance in Python\n","str1 = 'kitten'\n","str2 = 'sitting'\n","\n","dist = distance(str1, str2)\n","print(f'The Levenshtein distance is {dist}.')"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"VDE_fJolbK0O","executionInfo":{"status":"ok","timestamp":1722037387868,"user_tz":420,"elapsed":1056,"user":{"displayName":"Rajashekar Chintalapati","userId":"03596288833202137831"}},"outputId":"50205d7a-db1f-4349-da44-b1d3bc194104"},"execution_count":59,"outputs":[{"output_type":"stream","name":"stdout","text":["The Levenshtein distance is 3.\n"]}]},{"cell_type":"code","source":["len(test_df)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"Zzq-1gOvCmIq","executionInfo":{"status":"ok","timestamp":1722047694412,"user_tz":420,"elapsed":3,"user":{"displayName":"Rajashekar Chintalapati","userId":"03596288833202137831"}},"outputId":"a9272027-54e9-4aa0-9c93-ca99ccca8a83"},"execution_count":80,"outputs":[{"output_type":"execute_result","data":{"text/plain":["78309"]},"metadata":{},"execution_count":80}]},{"cell_type":"code","source":["total_matches = 0\n","test_df_sample = test_df.sample(n=1000, random_state=42)\n","\n","# for every lastname in test dataset find the nearest names in train dataset\n","for lastname in test_df_sample['last_name']:\n"," # use edit distance find top 3 nearest names\n"," distances = train_df['last_name'].apply(lambda x: distance(lastname, x))\n"," nearest_lang = train_df.loc[distances.nsmallest(3).index, langs].sum().idxmax()\n"," actual_lang = test_df_sample.loc[test_df['last_name'] == lastname, langs].values[0].argmax()\n"," if nearest_lang == langs[actual_lang]:\n"," total_matches += 1\n"," # sum the rest of the columns\n","\n","print(f\"Total records: {len(test_df_sample)}\")\n","print(f\"Total matches: {total_matches}\")\n","print(f\"Percent of matches: {total_matches / len(test_df_sample)}\")"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"-BUB6XREaKcw","executionInfo":{"status":"ok","timestamp":1722048606853,"user_tz":420,"elapsed":564086,"user":{"displayName":"Rajashekar Chintalapati","userId":"03596288833202137831"}},"outputId":"179a6ec2-05bc-4c1a-ec7b-3dfbea6bf07a"},"execution_count":83,"outputs":[{"output_type":"stream","name":"stdout","text":["Total records: 1000\n","Total matches: 679\n","Percent of matches: 0.679\n"]}]},{"cell_type":"code","source":["# what if everything is predicted as hindi\n","total_hindi_matches = 0\n","\n","for batch in test_loader:\n"," last_names = batch['last_names'].to(device)\n"," labels = batch['labels'].to(device)\n"," _, true = torch.max(labels, 1)\n"," hindi_tensor = torch.zeros(true.size()[0]) + langs.index('hindi')\n"," hindi_matches = (hindi_tensor.to(device) == true).sum().item()\n"," total_hindi_matches += hindi_matches\n","\n","print(f\"Total records: {len(test_df)}\")\n","print(f\"Total hindi matches: {total_hindi_matches}\")\n","print(f\"Percent of hindi matches: {total_hindi_matches / len(test_df)}\")"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"h2NNusI0kXsr","executionInfo":{"status":"ok","timestamp":1722058179832,"user_tz":420,"elapsed":2908,"user":{"displayName":"Rajashekar Chintalapati","userId":"03596288833202137831"}},"outputId":"099f1f24-d053-4730-84d1-855e4ff24fc5"},"execution_count":108,"outputs":[{"output_type":"stream","name":"stdout","text":["Total records: 73166\n","Total hindi matches: 13142\n","Percent of hindi matches: 0.17961894869201542\n"]}]},{"cell_type":"code","execution_count":109,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":4818,"status":"ok","timestamp":1722058233600,"user":{"displayName":"Rajashekar Chintalapati","userId":"03596288833202137831"},"user_tz":420},"id":"fTOh_E99vKIk","outputId":"eb15f5cd-d780-42f9-d2c3-46a39bcb8b24"},"outputs":[{"output_type":"stream","name":"stdout","text":["Total records: 73166\n","Total matches: 31021\n","Percent of matches: 0.42398108411010577\n"]}],"source":["# verify on test dataset\n","model.eval()\n","total_matches = 0\n","\n","with torch.no_grad():\n"," for batch in test_loader:\n"," last_names = batch['last_names'].to(device)\n"," labels = batch['labels'].to(device)\n"," lengths = batch['lengths']\n"," outputs = model(last_names, lengths)\n"," # find the max index on each row\n"," _, predicted = torch.max(outputs, 1)\n"," _, true = torch.max(labels, 1)\n"," # count matches between predicted and true\n"," matches = (predicted == true).sum().item()\n"," total_matches += matches\n","\n","# find ratio between matches and actual\n","ratio = total_matches / len(test_df)\n","print(f\"Total records: {len(test_df)}\")\n","print(f\"Total matches: {total_matches}\")\n","print(f\"Percent of matches: {ratio}\")"]},{"cell_type":"code","execution_count":110,"metadata":{"executionInfo":{"elapsed":388,"status":"ok","timestamp":1722058248229,"user":{"displayName":"Rajashekar Chintalapati","userId":"03596288833202137831"},"user_tz":420},"id":"2ZatevadE1xW"},"outputs":[],"source":["# do inference based on last_name\n","def infer(lastname):\n"," with torch.no_grad():\n"," last_name_indices = [char2idx[char] for char in lastname]\n"," last_name_tensor = torch.tensor(last_name_indices, dtype=torch.long).unsqueeze(0).to(device)\n"," lengths = torch.tensor([len(lastname)], dtype=torch.long)\n"," outputs = model(last_name_tensor, lengths)\n"," # get top 3 values index of each output\n"," _, predicted = torch.topk(outputs, 3, dim=1)\n"," # index them with langs and send actual langs\n"," pred_langs = []\n"," for i in range(3):\n"," pred_langs.append(langs[predicted[0][i].item()])\n"," pred_scores = []\n"," for i in range(3):\n"," pred_scores.append(outputs[0][predicted[0][i].item()].item())\n"," return pred_langs, pred_scores"]},{"cell_type":"code","execution_count":111,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":1202,"status":"ok","timestamp":1722058251807,"user":{"displayName":"Rajashekar Chintalapati","userId":"03596288833202137831"},"user_tz":420},"id":"jK6Kp90XIosp","outputId":"9c60cc4d-b139-4bfc-9a86-6e81626ef3a3"},"outputs":[{"output_type":"execute_result","data":{"text/plain":["(['hindi', 'bengali', 'urdu'],\n"," [276.712646484375, 227.44827270507812, 199.8665771484375])"]},"metadata":{},"execution_count":111}],"source":["infer(\"sood\")"]},{"cell_type":"code","execution_count":112,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":5,"status":"ok","timestamp":1722058253364,"user":{"displayName":"Rajashekar Chintalapati","userId":"03596288833202137831"},"user_tz":420},"id":"smFjuZXUKhg4","outputId":"16ee8019-3cb1-4c49-94de-880b559501f8"},"outputs":[{"output_type":"execute_result","data":{"text/plain":["(['telugu', 'hindi', 'urdu'],\n"," [6.536921501159668, 3.4749300479888916, 2.0105412006378174])"]},"metadata":{},"execution_count":112}],"source":["infer(\"chintalapati\")"]}],"metadata":{"accelerator":"GPU","colab":{"gpuType":"A100","machine_shape":"hm","provenance":[],"mount_file_id":"1uEU4A6XLUoUyMyomOsyxpW2t1fNYrw48","authorship_tag":"ABX9TyNieC/q3oVgmrKz/TTkmkoa"},"kernelspec":{"display_name":"Python 3","name":"python3"},"language_info":{"name":"python"}},"nbformat":4,"nbformat_minor":0} \ No newline at end of file