{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "6eda130d", "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import numpy as np\n", "from sklearn.model_selection import GridSearchCV, train_test_split" ] }, { "cell_type": "code", "execution_count": 2, "id": "64504238", "metadata": {}, "outputs": [], "source": [ "from keras.models import Sequential\n", "from keras.layers import Dense, Activation, Dropout\n", "\n", "from keras import layers\n", "from sklearn.neural_network import MLPClassifier\n", "from sklearn.metrics import accuracy_score, f1_score, auc, roc_curve, roc_auc_score\n", "from sklearn.preprocessing import StandardScaler\n", "from keras.layers import Dense, LSTM, Dropout, GRU, Bidirectional\n", "import pandas as pd\n", "from keras.layers import LSTM, Dense\n", "from keras.models import Sequential\n", "from sklearn.preprocessing import MinMaxScaler\n", "from sklearn.model_selection import train_test_split\n" ] }, { "cell_type": "code", "execution_count": 3, "id": "1160a496", "metadata": {}, "outputs": [], "source": [ "df = pd.read_csv('../Preprocessing/fight_with_stats_precomp.csv')\n", "df_fighters = pd.read_csv('../Preprocessing/fighter_total_stats.csv')" ] }, { "cell_type": "code", "execution_count": 4, "id": "1313842b", "metadata": {}, "outputs": [], "source": [ "df_fighters_details = pd.read_csv('../Preprocessing/fighter_details.csv', parse_dates=True)" ] }, { "cell_type": "code", "execution_count": 5, "id": "cfad8be9", "metadata": {}, "outputs": [], "source": [ "df = df[(df['fightNo_fighter']>=3) & (df['fightNo_opponent']>=3) & (df['Women_fight']==0)]" ] }, { "cell_type": "code", "execution_count": 6, "id": "6fbc9051", "metadata": {}, "outputs": [], "source": [ "df = df.fillna(0)\n" ] }, { "cell_type": "code", "execution_count": 7, "id": "a380c164", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
EVENTBOUTFIGHTEROPPONENTMETHODWinWomen_fightROUNDHEIGHT_diffREACH_diff...BODY_landed_opponentBODY_attemps_opponentLEG_landed_opponentLEG_attemps_opponentDISTANCE_landed_opponentDISTANCE_attemps_opponentCLINCH_landed_opponentCLINCH_attemps_opponentGROUND_landed_opponentGROUND_attemps_opponent
13777UFC Fight Night: Cannonier vs. StricklandJared Cannonier vs. Sean StricklandSean StricklandJared CannonierDecision0052.0-1.0...267.0516.0213.0270.0763.02303.025.045.054.086.0
13780UFC Fight Night: Cannonier vs. StricklandSaid Nurmagomedov vs. Saidyokub KakhramonovSaid NurmagomedovSaidyokub KakhramonovSubmission1020.01.0...24.051.043.058.091.0253.09.014.08.013.0
13781UFC Fight Night: Cannonier vs. StricklandSaid Nurmagomedov vs. Saidyokub KakhramonovSaidyokub KakhramonovSaid NurmagomedovSubmission0020.0-1.0...9.016.04.04.019.053.06.06.02.05.0
13782UFC Fight Night: Cannonier vs. StricklandSergey Morozov vs. Journey NewsonJourney NewsonSergey MorozovDecision003-1.00.0...15.030.016.020.076.0224.02.05.04.04.0
13783UFC Fight Night: Cannonier vs. StricklandSergey Morozov vs. Journey NewsonSergey MorozovJourney NewsonDecision1031.00.0...38.068.030.035.0141.0347.016.019.01.04.0
\n", "

5 rows × 63 columns

\n", "
" ], "text/plain": [ " EVENT \\\n", "13777 UFC Fight Night: Cannonier vs. Strickland \n", "13780 UFC Fight Night: Cannonier vs. Strickland \n", "13781 UFC Fight Night: Cannonier vs. Strickland \n", "13782 UFC Fight Night: Cannonier vs. Strickland \n", "13783 UFC Fight Night: Cannonier vs. Strickland \n", "\n", " BOUT FIGHTER \\\n", "13777 Jared Cannonier vs. Sean Strickland Sean Strickland \n", "13780 Said Nurmagomedov vs. Saidyokub Kakhramonov Said Nurmagomedov \n", "13781 Said Nurmagomedov vs. Saidyokub Kakhramonov Saidyokub Kakhramonov \n", "13782 Sergey Morozov vs. Journey Newson Journey Newson \n", "13783 Sergey Morozov vs. Journey Newson Sergey Morozov \n", "\n", " OPPONENT METHOD Win Women_fight ROUND \\\n", "13777 Jared Cannonier Decision 0 0 5 \n", "13780 Saidyokub Kakhramonov Submission 1 0 2 \n", "13781 Said Nurmagomedov Submission 0 0 2 \n", "13782 Sergey Morozov Decision 0 0 3 \n", "13783 Journey Newson Decision 1 0 3 \n", "\n", " HEIGHT_diff REACH_diff ... BODY_landed_opponent \\\n", "13777 2.0 -1.0 ... 267.0 \n", "13780 0.0 1.0 ... 24.0 \n", "13781 0.0 -1.0 ... 9.0 \n", "13782 -1.0 0.0 ... 15.0 \n", "13783 1.0 0.0 ... 38.0 \n", "\n", " BODY_attemps_opponent LEG_landed_opponent LEG_attemps_opponent \\\n", "13777 516.0 213.0 270.0 \n", "13780 51.0 43.0 58.0 \n", "13781 16.0 4.0 4.0 \n", "13782 30.0 16.0 20.0 \n", "13783 68.0 30.0 35.0 \n", "\n", " DISTANCE_landed_opponent DISTANCE_attemps_opponent \\\n", "13777 763.0 2303.0 \n", "13780 91.0 253.0 \n", "13781 19.0 53.0 \n", "13782 76.0 224.0 \n", "13783 141.0 347.0 \n", "\n", " CLINCH_landed_opponent CLINCH_attemps_opponent \\\n", "13777 25.0 45.0 \n", "13780 9.0 14.0 \n", "13781 6.0 6.0 \n", "13782 2.0 5.0 \n", "13783 16.0 19.0 \n", "\n", " GROUND_landed_opponent GROUND_attemps_opponent \n", "13777 54.0 86.0 \n", "13780 8.0 13.0 \n", "13781 2.0 5.0 \n", "13782 4.0 4.0 \n", "13783 1.0 4.0 \n", "\n", "[5 rows x 63 columns]" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.tail()" ] }, { "cell_type": "code", "execution_count": 8, "id": "3c83f881", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(6817, 63)" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.shape" ] }, { "cell_type": "code", "execution_count": 9, "id": "0b47cc75", "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "['KD_fighter',\n", " 'SUB.ATT_fighter',\n", " 'REV._fighter',\n", " 'CTRL_fighter',\n", " 'SIG.STR._landed_fighter',\n", " 'SIG.STR._attemps_fighter',\n", " 'TOTAL STR._landed_fighter',\n", " 'TOTAL STR._attemps_fighter',\n", " 'TD_landed_fighter',\n", " 'TD_attemps_fighter',\n", " 'HEAD_landed_fighter',\n", " 'HEAD_attemps_fighter',\n", " 'BODY_landed_fighter',\n", " 'BODY_attemps_fighter',\n", " 'LEG_landed_fighter',\n", " 'LEG_attemps_fighter',\n", " 'DISTANCE_landed_fighter',\n", " 'DISTANCE_attemps_fighter',\n", " 'CLINCH_landed_fighter',\n", " 'CLINCH_attemps_fighter',\n", " 'GROUND_landed_fighter',\n", " 'GROUND_attemps_fighter',\n", " 'KD_opponent',\n", " 'SUB.ATT_opponent',\n", " 'REV._opponent',\n", " 'CTRL_opponent',\n", " 'SIG.STR._landed_opponent',\n", " 'SIG.STR._attemps_opponent',\n", " 'TOTAL STR._landed_opponent',\n", " 'TOTAL STR._attemps_opponent',\n", " 'TD_landed_opponent',\n", " 'TD_attemps_opponent',\n", " 'HEAD_landed_opponent',\n", " 'HEAD_attemps_opponent',\n", " 'BODY_landed_opponent',\n", " 'BODY_attemps_opponent',\n", " 'LEG_landed_opponent',\n", " 'LEG_attemps_opponent',\n", " 'DISTANCE_landed_opponent',\n", " 'DISTANCE_attemps_opponent',\n", " 'CLINCH_landed_opponent',\n", " 'CLINCH_attemps_opponent',\n", " 'GROUND_landed_opponent',\n", " 'GROUND_attemps_opponent']" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.columns.tolist()[19:]" ] }, { "cell_type": "code", "execution_count": 10, "id": "1bf9b2da", "metadata": {}, "outputs": [], "source": [ "df = df.merge(df[['EVENT', 'BOUT', 'FIGHTER']+df.columns.tolist()[15:]] ,how='left', left_on=['EVENT', 'BOUT', 'OPPONENT'], right_on=['EVENT', 'BOUT', 'FIGHTER'], suffixes=('_f1', '_f2'))" ] }, { "cell_type": "code", "execution_count": 11, "id": "c8ce78f8", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Int64Index: 6817 entries, 0 to 6816\n", "Data columns (total 112 columns):\n", " # Column Non-Null Count Dtype \n", "--- ------ -------------- ----- \n", " 0 EVENT 6817 non-null object \n", " 1 BOUT 6817 non-null object \n", " 2 FIGHTER_f1 6817 non-null object \n", " 3 OPPONENT 6817 non-null object \n", " 4 METHOD 6817 non-null object \n", " 5 Win 6817 non-null int64 \n", " 6 Women_fight 6817 non-null int64 \n", " 7 ROUND 6817 non-null int64 \n", " 8 HEIGHT_diff 6817 non-null float64\n", " 9 REACH_diff 6817 non-null float64\n", " 10 AGE_diff 6817 non-null float64\n", " 11 form_skore_fighter 6817 non-null float64\n", " 12 form_skore_opponent 6817 non-null float64\n", " 13 fightNo_fighter 6817 non-null int64 \n", " 14 fightNo_opponent 6817 non-null float64\n", " 15 Win_tot_f1 6817 non-null float64\n", " 16 DRAW_f1 6817 non-null float64\n", " 17 No_contest_f1 6817 non-null float64\n", " 18 TotalTime_f1 6817 non-null float64\n", " 19 KD_fighter_f1 6817 non-null float64\n", " 20 SUB.ATT_fighter_f1 6817 non-null float64\n", " 21 REV._fighter_f1 6817 non-null float64\n", " 22 CTRL_fighter_f1 6817 non-null float64\n", " 23 SIG.STR._landed_fighter_f1 6817 non-null float64\n", " 24 SIG.STR._attemps_fighter_f1 6817 non-null float64\n", " 25 TOTAL STR._landed_fighter_f1 6817 non-null float64\n", " 26 TOTAL STR._attemps_fighter_f1 6817 non-null float64\n", " 27 TD_landed_fighter_f1 6817 non-null float64\n", " 28 TD_attemps_fighter_f1 6817 non-null float64\n", " 29 HEAD_landed_fighter_f1 6817 non-null float64\n", " 30 HEAD_attemps_fighter_f1 6817 non-null float64\n", " 31 BODY_landed_fighter_f1 6817 non-null float64\n", " 32 BODY_attemps_fighter_f1 6817 non-null float64\n", " 33 LEG_landed_fighter_f1 6817 non-null float64\n", " 34 LEG_attemps_fighter_f1 6817 non-null float64\n", " 35 DISTANCE_landed_fighter_f1 6817 non-null float64\n", " 36 DISTANCE_attemps_fighter_f1 6817 non-null float64\n", " 37 CLINCH_landed_fighter_f1 6817 non-null float64\n", " 38 CLINCH_attemps_fighter_f1 6817 non-null float64\n", " 39 GROUND_landed_fighter_f1 6817 non-null float64\n", " 40 GROUND_attemps_fighter_f1 6817 non-null float64\n", " 41 KD_opponent_f1 6817 non-null float64\n", " 42 SUB.ATT_opponent_f1 6817 non-null float64\n", " 43 REV._opponent_f1 6817 non-null float64\n", " 44 CTRL_opponent_f1 6817 non-null float64\n", " 45 SIG.STR._landed_opponent_f1 6817 non-null float64\n", " 46 SIG.STR._attemps_opponent_f1 6817 non-null float64\n", " 47 TOTAL STR._landed_opponent_f1 6817 non-null float64\n", " 48 TOTAL STR._attemps_opponent_f1 6817 non-null float64\n", " 49 TD_landed_opponent_f1 6817 non-null float64\n", " 50 TD_attemps_opponent_f1 6817 non-null float64\n", " 51 HEAD_landed_opponent_f1 6817 non-null float64\n", " 52 HEAD_attemps_opponent_f1 6817 non-null float64\n", " 53 BODY_landed_opponent_f1 6817 non-null float64\n", " 54 BODY_attemps_opponent_f1 6817 non-null float64\n", " 55 LEG_landed_opponent_f1 6817 non-null float64\n", " 56 LEG_attemps_opponent_f1 6817 non-null float64\n", " 57 DISTANCE_landed_opponent_f1 6817 non-null float64\n", " 58 DISTANCE_attemps_opponent_f1 6817 non-null float64\n", " 59 CLINCH_landed_opponent_f1 6817 non-null float64\n", " 60 CLINCH_attemps_opponent_f1 6817 non-null float64\n", " 61 GROUND_landed_opponent_f1 6817 non-null float64\n", " 62 GROUND_attemps_opponent_f1 6817 non-null float64\n", " 63 FIGHTER_f2 6816 non-null object \n", " 64 Win_tot_f2 6816 non-null float64\n", " 65 DRAW_f2 6816 non-null float64\n", " 66 No_contest_f2 6816 non-null float64\n", " 67 TotalTime_f2 6816 non-null float64\n", " 68 KD_fighter_f2 6816 non-null float64\n", " 69 SUB.ATT_fighter_f2 6816 non-null float64\n", " 70 REV._fighter_f2 6816 non-null float64\n", " 71 CTRL_fighter_f2 6816 non-null float64\n", " 72 SIG.STR._landed_fighter_f2 6816 non-null float64\n", " 73 SIG.STR._attemps_fighter_f2 6816 non-null float64\n", " 74 TOTAL STR._landed_fighter_f2 6816 non-null float64\n", " 75 TOTAL STR._attemps_fighter_f2 6816 non-null float64\n", " 76 TD_landed_fighter_f2 6816 non-null float64\n", " 77 TD_attemps_fighter_f2 6816 non-null float64\n", " 78 HEAD_landed_fighter_f2 6816 non-null float64\n", " 79 HEAD_attemps_fighter_f2 6816 non-null float64\n", " 80 BODY_landed_fighter_f2 6816 non-null float64\n", " 81 BODY_attemps_fighter_f2 6816 non-null float64\n", " 82 LEG_landed_fighter_f2 6816 non-null float64\n", " 83 LEG_attemps_fighter_f2 6816 non-null float64\n", " 84 DISTANCE_landed_fighter_f2 6816 non-null float64\n", " 85 DISTANCE_attemps_fighter_f2 6816 non-null float64\n", " 86 CLINCH_landed_fighter_f2 6816 non-null float64\n", " 87 CLINCH_attemps_fighter_f2 6816 non-null float64\n", " 88 GROUND_landed_fighter_f2 6816 non-null float64\n", " 89 GROUND_attemps_fighter_f2 6816 non-null float64\n", " 90 KD_opponent_f2 6816 non-null float64\n", " 91 SUB.ATT_opponent_f2 6816 non-null float64\n", " 92 REV._opponent_f2 6816 non-null float64\n", " 93 CTRL_opponent_f2 6816 non-null float64\n", " 94 SIG.STR._landed_opponent_f2 6816 non-null float64\n", " 95 SIG.STR._attemps_opponent_f2 6816 non-null float64\n", " 96 TOTAL STR._landed_opponent_f2 6816 non-null float64\n", " 97 TOTAL STR._attemps_opponent_f2 6816 non-null float64\n", " 98 TD_landed_opponent_f2 6816 non-null float64\n", " 99 TD_attemps_opponent_f2 6816 non-null float64\n", " 100 HEAD_landed_opponent_f2 6816 non-null float64\n", " 101 HEAD_attemps_opponent_f2 6816 non-null float64\n", " 102 BODY_landed_opponent_f2 6816 non-null float64\n", " 103 BODY_attemps_opponent_f2 6816 non-null float64\n", " 104 LEG_landed_opponent_f2 6816 non-null float64\n", " 105 LEG_attemps_opponent_f2 6816 non-null float64\n", " 106 DISTANCE_landed_opponent_f2 6816 non-null float64\n", " 107 DISTANCE_attemps_opponent_f2 6816 non-null float64\n", " 108 CLINCH_landed_opponent_f2 6816 non-null float64\n", " 109 CLINCH_attemps_opponent_f2 6816 non-null float64\n", " 110 GROUND_landed_opponent_f2 6816 non-null float64\n", " 111 GROUND_attemps_opponent_f2 6816 non-null float64\n", "dtypes: float64(102), int64(4), object(6)\n", "memory usage: 5.9+ MB\n" ] } ], "source": [ "df.info(verbose=True, show_counts=True)" ] }, { "cell_type": "code", "execution_count": 12, "id": "e911a19b", "metadata": {}, "outputs": [], "source": [ "df = df.drop('FIGHTER_f2',axis=1)" ] }, { "cell_type": "code", "execution_count": 13, "id": "1458353b", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['LEG', 'attemps', 'fighter', 'f1']" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "'LEG_attemps_fighter_f1'.split('_')" ] }, { "cell_type": "code", "execution_count": 14, "id": "6ec0d15a", "metadata": {}, "outputs": [], "source": [ "sloupce1 = df.columns.tolist()[19:]\n", "vynechat = ['Win_tot_f2', 'DRAW_f2','No_contest_f2']\n", "sloupce = [x for x in sloupce1 if x not in vynechat]\n", "for sloupec in sloupce: \n", " splited = sloupec.split('_')\n", " if 'CTRL' in splited:\n", " df.loc[:,splited[0]+'_pct_'+splited[1]+splited[2]] = df[sloupec]/df['TotalTime'+'_'+splited[2]]\n", " if 'attemps' in splited:\n", " df.loc[:,splited[0]+'_acc_'+ splited[2] + splited[3]] = df[sloupec.replace('attemps', 'landed')]/df[sloupec]\n", " df.loc[:,splited[0]+'_perRound_'+ splited[2] + splited[3]] = (df[sloupec.replace('attemps', 'landed')]/df['TotalTime'+'_'+splited[3]])*300\n", " \n", " " ] }, { "cell_type": "code", "execution_count": 15, "id": "2417f114", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
EVENTBOUTFIGHTER_f1OPPONENTMETHOD
0UFC 2: No Way OutRoyce Gracie vs. Patrick SmithPatrick SmithRoyce GracieKO/TKO - ground
1UFC 2: No Way OutRoyce Gracie vs. Patrick SmithRoyce GraciePatrick SmithKO/TKO - ground
2UFC 2: No Way OutRoyce Gracie vs. Remco PardoelRemco PardoelRoyce GracieSubmission
3UFC 2: No Way OutRoyce Gracie vs. Remco PardoelRoyce GracieRemco PardoelSubmission
4UFC 4: Revenge of the WarriorsRoyce Gracie vs. Dan SevernDan SevernRoyce GracieSubmission
..................
6812UFC Fight Night: Cannonier vs. StricklandJared Cannonier vs. Sean StricklandSean StricklandJared CannonierDecision
6813UFC Fight Night: Cannonier vs. StricklandSaid Nurmagomedov vs. Saidyokub KakhramonovSaid NurmagomedovSaidyokub KakhramonovSubmission
6814UFC Fight Night: Cannonier vs. StricklandSaid Nurmagomedov vs. Saidyokub KakhramonovSaidyokub KakhramonovSaid NurmagomedovSubmission
6815UFC Fight Night: Cannonier vs. StricklandSergey Morozov vs. Journey NewsonJourney NewsonSergey MorozovDecision
6816UFC Fight Night: Cannonier vs. StricklandSergey Morozov vs. Journey NewsonSergey MorozovJourney NewsonDecision
\n", "

6817 rows × 5 columns

\n", "
" ], "text/plain": [ " EVENT \\\n", "0 UFC 2: No Way Out \n", "1 UFC 2: No Way Out \n", "2 UFC 2: No Way Out \n", "3 UFC 2: No Way Out \n", "4 UFC 4: Revenge of the Warriors \n", "... ... \n", "6812 UFC Fight Night: Cannonier vs. Strickland \n", "6813 UFC Fight Night: Cannonier vs. Strickland \n", "6814 UFC Fight Night: Cannonier vs. Strickland \n", "6815 UFC Fight Night: Cannonier vs. Strickland \n", "6816 UFC Fight Night: Cannonier vs. Strickland \n", "\n", " BOUT FIGHTER_f1 \\\n", "0 Royce Gracie vs. Patrick Smith Patrick Smith \n", "1 Royce Gracie vs. Patrick Smith Royce Gracie \n", "2 Royce Gracie vs. Remco Pardoel Remco Pardoel \n", "3 Royce Gracie vs. Remco Pardoel Royce Gracie \n", "4 Royce Gracie vs. Dan Severn Dan Severn \n", "... ... ... \n", "6812 Jared Cannonier vs. Sean Strickland Sean Strickland \n", "6813 Said Nurmagomedov vs. Saidyokub Kakhramonov Said Nurmagomedov \n", "6814 Said Nurmagomedov vs. Saidyokub Kakhramonov Saidyokub Kakhramonov \n", "6815 Sergey Morozov vs. Journey Newson Journey Newson \n", "6816 Sergey Morozov vs. Journey Newson Sergey Morozov \n", "\n", " OPPONENT METHOD \n", "0 Royce Gracie KO/TKO - ground \n", "1 Patrick Smith KO/TKO - ground \n", "2 Royce Gracie Submission \n", "3 Remco Pardoel Submission \n", "4 Royce Gracie Submission \n", "... ... ... \n", "6812 Jared Cannonier Decision \n", "6813 Saidyokub Kakhramonov Submission \n", "6814 Said Nurmagomedov Submission \n", "6815 Sergey Morozov Decision \n", "6816 Journey Newson Decision \n", "\n", "[6817 rows x 5 columns]" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.iloc[:,:5]" ] }, { "cell_type": "code", "execution_count": 16, "id": "4e6956bf", "metadata": {}, "outputs": [], "source": [ "df = df.drop(sloupce, axis=1)" ] }, { "cell_type": "code", "execution_count": 17, "id": "eefa5d15", "metadata": {}, "outputs": [], "source": [ "df_model = df.drop(['EVENT','BOUT','FIGHTER_f1','OPPONENT','METHOD','Women_fight','ROUND','TotalTime_f1'],axis=1)\n", "#df_model = df.drop(['EVENT','BOUT','FIGHTER_f1','OPPONENT','METHOD','Women_fight','TotalTime_f1'],axis=1)" ] }, { "cell_type": "code", "execution_count": 18, "id": "9b03af1f", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Int64Index: 6817 entries, 0 to 6816\n", "Data columns (total 90 columns):\n", " # Column Non-Null Count Dtype \n", "--- ------ -------------- ----- \n", " 0 Win 6817 non-null int64 \n", " 1 HEIGHT_diff 6817 non-null float64\n", " 2 REACH_diff 6817 non-null float64\n", " 3 AGE_diff 6817 non-null float64\n", " 4 form_skore_fighter 6817 non-null float64\n", " 5 form_skore_opponent 6817 non-null float64\n", " 6 fightNo_fighter 6817 non-null int64 \n", " 7 fightNo_opponent 6817 non-null float64\n", " 8 Win_tot_f1 6817 non-null float64\n", " 9 DRAW_f1 6817 non-null float64\n", " 10 No_contest_f1 6817 non-null float64\n", " 11 Win_tot_f2 6817 non-null float64\n", " 12 DRAW_f2 6817 non-null float64\n", " 13 No_contest_f2 6817 non-null float64\n", " 14 CTRL_pct_fighterf1 6817 non-null float64\n", " 15 SIG.STR._acc_fighterf1 6817 non-null float64\n", " 16 SIG.STR._perRound_fighterf1 6817 non-null float64\n", " 17 TOTAL STR._acc_fighterf1 6817 non-null float64\n", " 18 TOTAL STR._perRound_fighterf1 6817 non-null float64\n", " 19 TD_acc_fighterf1 6817 non-null float64\n", " 20 TD_perRound_fighterf1 6817 non-null float64\n", " 21 HEAD_acc_fighterf1 6817 non-null float64\n", " 22 HEAD_perRound_fighterf1 6817 non-null float64\n", " 23 BODY_acc_fighterf1 6817 non-null float64\n", " 24 BODY_perRound_fighterf1 6817 non-null float64\n", " 25 LEG_acc_fighterf1 6817 non-null float64\n", " 26 LEG_perRound_fighterf1 6817 non-null float64\n", " 27 DISTANCE_acc_fighterf1 6817 non-null float64\n", " 28 DISTANCE_perRound_fighterf1 6817 non-null float64\n", " 29 CLINCH_acc_fighterf1 6817 non-null float64\n", " 30 CLINCH_perRound_fighterf1 6817 non-null float64\n", " 31 GROUND_acc_fighterf1 6817 non-null float64\n", " 32 GROUND_perRound_fighterf1 6817 non-null float64\n", " 33 CTRL_pct_opponentf1 6817 non-null float64\n", " 34 SIG.STR._acc_opponentf1 6817 non-null float64\n", " 35 SIG.STR._perRound_opponentf1 6817 non-null float64\n", " 36 TOTAL STR._acc_opponentf1 6817 non-null float64\n", " 37 TOTAL STR._perRound_opponentf1 6817 non-null float64\n", " 38 TD_acc_opponentf1 6817 non-null float64\n", " 39 TD_perRound_opponentf1 6817 non-null float64\n", " 40 HEAD_acc_opponentf1 6817 non-null float64\n", " 41 HEAD_perRound_opponentf1 6817 non-null float64\n", " 42 BODY_acc_opponentf1 6817 non-null float64\n", " 43 BODY_perRound_opponentf1 6817 non-null float64\n", " 44 LEG_acc_opponentf1 6817 non-null float64\n", " 45 LEG_perRound_opponentf1 6817 non-null float64\n", " 46 DISTANCE_acc_opponentf1 6817 non-null float64\n", " 47 DISTANCE_perRound_opponentf1 6817 non-null float64\n", " 48 CLINCH_acc_opponentf1 6817 non-null float64\n", " 49 CLINCH_perRound_opponentf1 6817 non-null float64\n", " 50 GROUND_acc_opponentf1 6817 non-null float64\n", " 51 GROUND_perRound_opponentf1 6817 non-null float64\n", " 52 CTRL_pct_fighterf2 6817 non-null float64\n", " 53 SIG.STR._acc_fighterf2 6817 non-null float64\n", " 54 SIG.STR._perRound_fighterf2 6817 non-null float64\n", " 55 TOTAL STR._acc_fighterf2 6817 non-null float64\n", " 56 TOTAL STR._perRound_fighterf2 6817 non-null float64\n", " 57 TD_acc_fighterf2 6817 non-null float64\n", " 58 TD_perRound_fighterf2 6817 non-null float64\n", " 59 HEAD_acc_fighterf2 6817 non-null float64\n", " 60 HEAD_perRound_fighterf2 6817 non-null float64\n", " 61 BODY_acc_fighterf2 6817 non-null float64\n", " 62 BODY_perRound_fighterf2 6817 non-null float64\n", " 63 LEG_acc_fighterf2 6817 non-null float64\n", " 64 LEG_perRound_fighterf2 6817 non-null float64\n", " 65 DISTANCE_acc_fighterf2 6817 non-null float64\n", " 66 DISTANCE_perRound_fighterf2 6817 non-null float64\n", " 67 CLINCH_acc_fighterf2 6817 non-null float64\n", " 68 CLINCH_perRound_fighterf2 6817 non-null float64\n", " 69 GROUND_acc_fighterf2 6817 non-null float64\n", " 70 GROUND_perRound_fighterf2 6817 non-null float64\n", " 71 CTRL_pct_opponentf2 6817 non-null float64\n", " 72 SIG.STR._acc_opponentf2 6817 non-null float64\n", " 73 SIG.STR._perRound_opponentf2 6817 non-null float64\n", " 74 TOTAL STR._acc_opponentf2 6817 non-null float64\n", " 75 TOTAL STR._perRound_opponentf2 6817 non-null float64\n", " 76 TD_acc_opponentf2 6817 non-null float64\n", " 77 TD_perRound_opponentf2 6817 non-null float64\n", " 78 HEAD_acc_opponentf2 6817 non-null float64\n", " 79 HEAD_perRound_opponentf2 6817 non-null float64\n", " 80 BODY_acc_opponentf2 6817 non-null float64\n", " 81 BODY_perRound_opponentf2 6817 non-null float64\n", " 82 LEG_acc_opponentf2 6817 non-null float64\n", " 83 LEG_perRound_opponentf2 6817 non-null float64\n", " 84 DISTANCE_acc_opponentf2 6817 non-null float64\n", " 85 DISTANCE_perRound_opponentf2 6817 non-null float64\n", " 86 CLINCH_acc_opponentf2 6817 non-null float64\n", " 87 CLINCH_perRound_opponentf2 6817 non-null float64\n", " 88 GROUND_acc_opponentf2 6817 non-null float64\n", " 89 GROUND_perRound_opponentf2 6817 non-null float64\n", "dtypes: float64(88), int64(2)\n", "memory usage: 4.7 MB\n" ] } ], "source": [ "df_model = df_model.fillna(0)\n", "df_model.info()" ] }, { "cell_type": "code", "execution_count": 19, "id": "8ddca72b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.5941348973607038 0.5941348973607038\n" ] } ], "source": [ "X=df_model.loc[:, ~df_model.columns.isin(['Win'])]\n", "y=df_model['Win']\n", "scaler = StandardScaler()\n", "X_scaled = scaler.fit_transform(X)\n", "X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, random_state = 0)\n", "from sklearn.linear_model import LogisticRegression\n", "logreg=LogisticRegression(max_iter=50000)\n", "logreg.fit(X_train,y_train)\n", "predictions = logreg.predict(X_test)\n", "acc = accuracy_score(y_test, predictions) \n", "f1 = f1_score(y_test, predictions,average='micro')\n", "print(f1, acc)" ] }, { "cell_type": "code", "execution_count": 20, "id": "003fe608", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(6817, 89)" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X.shape" ] }, { "cell_type": "code", "execution_count": 21, "id": "f6fc0f16", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(6617, 200, 89)\n", "Epoch 1/120\n", "166/166 [==============================] - 19s 100ms/step - loss: 0.6994 - accuracy: 0.5052 - val_loss: 0.7025 - val_accuracy: 0.5015\n", "Epoch 2/120\n", "166/166 [==============================] - 16s 99ms/step - loss: 0.6938 - accuracy: 0.5077 - val_loss: 0.6977 - val_accuracy: 0.4985\n", "Epoch 3/120\n", "166/166 [==============================] - 17s 101ms/step - loss: 0.6920 - accuracy: 0.5245 - val_loss: 0.6904 - val_accuracy: 0.5415\n", "Epoch 4/120\n", "166/166 [==============================] - 16s 96ms/step - loss: 0.6908 - accuracy: 0.5347 - val_loss: 0.6895 - val_accuracy: 0.5521\n", "Epoch 5/120\n", "166/166 [==============================] - 16s 96ms/step - loss: 0.6896 - accuracy: 0.5362 - val_loss: 0.6888 - val_accuracy: 0.5408\n", "Epoch 6/120\n", "166/166 [==============================] - 16s 94ms/step - loss: 0.6875 - accuracy: 0.5362 - val_loss: 0.6877 - val_accuracy: 0.5506\n", "Epoch 7/120\n", "166/166 [==============================] - 15s 93ms/step - loss: 0.6863 - accuracy: 0.5475 - val_loss: 0.6906 - val_accuracy: 0.5279\n", "Epoch 8/120\n", "166/166 [==============================] - 15s 91ms/step - loss: 0.6851 - accuracy: 0.5468 - val_loss: 0.6868 - val_accuracy: 0.5574\n", "Epoch 9/120\n", "166/166 [==============================] - 16s 95ms/step - loss: 0.6839 - accuracy: 0.5539 - val_loss: 0.6928 - val_accuracy: 0.5219\n", "Epoch 10/120\n", "166/166 [==============================] - 17s 103ms/step - loss: 0.6845 - accuracy: 0.5568 - val_loss: 0.6878 - val_accuracy: 0.5453\n", "Epoch 11/120\n", "166/166 [==============================] - 17s 100ms/step - loss: 0.6824 - accuracy: 0.5624 - val_loss: 0.6940 - val_accuracy: 0.5204\n", "Epoch 12/120\n", "166/166 [==============================] - 16s 97ms/step - loss: 0.6807 - accuracy: 0.5651 - val_loss: 0.6879 - val_accuracy: 0.5476\n", "Epoch 13/120\n", "166/166 [==============================] - 17s 101ms/step - loss: 0.6813 - accuracy: 0.5609 - val_loss: 0.6884 - val_accuracy: 0.5483\n", "Epoch 14/120\n", "166/166 [==============================] - 16s 97ms/step - loss: 0.6809 - accuracy: 0.5583 - val_loss: 0.6953 - val_accuracy: 0.5249\n", "Epoch 15/120\n", "166/166 [==============================] - 16s 96ms/step - loss: 0.6807 - accuracy: 0.5609 - val_loss: 0.6893 - val_accuracy: 0.5446\n", "Epoch 16/120\n", "166/166 [==============================] - 16s 95ms/step - loss: 0.6795 - accuracy: 0.5577 - val_loss: 0.6908 - val_accuracy: 0.5355\n", "Epoch 17/120\n", "166/166 [==============================] - 16s 95ms/step - loss: 0.6778 - accuracy: 0.5755 - val_loss: 0.6945 - val_accuracy: 0.5332\n", "Epoch 18/120\n", "166/166 [==============================] - 16s 95ms/step - loss: 0.6777 - accuracy: 0.5787 - val_loss: 0.6928 - val_accuracy: 0.5302\n", "Epoch 19/120\n", "166/166 [==============================] - 17s 102ms/step - loss: 0.6768 - accuracy: 0.5651 - val_loss: 0.6930 - val_accuracy: 0.5431\n", "Epoch 20/120\n", "166/166 [==============================] - 16s 99ms/step - loss: 0.6743 - accuracy: 0.5777 - val_loss: 0.6952 - val_accuracy: 0.5302\n", "Epoch 21/120\n", "166/166 [==============================] - 16s 96ms/step - loss: 0.6730 - accuracy: 0.5813 - val_loss: 0.6955 - val_accuracy: 0.5347\n", "Epoch 22/120\n", "166/166 [==============================] - 16s 99ms/step - loss: 0.6753 - accuracy: 0.5734 - val_loss: 0.6928 - val_accuracy: 0.5378\n", "Epoch 23/120\n", "166/166 [==============================] - 16s 98ms/step - loss: 0.6730 - accuracy: 0.5832 - val_loss: 0.6932 - val_accuracy: 0.5272\n", "Epoch 24/120\n", "166/166 [==============================] - 16s 97ms/step - loss: 0.6713 - accuracy: 0.5764 - val_loss: 0.6932 - val_accuracy: 0.5408\n", "Epoch 25/120\n", "166/166 [==============================] - 16s 97ms/step - loss: 0.6703 - accuracy: 0.5834 - val_loss: 0.6931 - val_accuracy: 0.5529\n", "Epoch 26/120\n", "166/166 [==============================] - 17s 104ms/step - loss: 0.6702 - accuracy: 0.5866 - val_loss: 0.6953 - val_accuracy: 0.5536\n", "Epoch 27/120\n", "166/166 [==============================] - 16s 94ms/step - loss: 0.6666 - accuracy: 0.5868 - val_loss: 0.6942 - val_accuracy: 0.5483\n", "Epoch 28/120\n", "166/166 [==============================] - 15s 91ms/step - loss: 0.6627 - accuracy: 0.5981 - val_loss: 0.6999 - val_accuracy: 0.5536\n", "Epoch 29/120\n", "166/166 [==============================] - 15s 92ms/step - loss: 0.6613 - accuracy: 0.5981 - val_loss: 0.6961 - val_accuracy: 0.5453\n", "Epoch 30/120\n", "166/166 [==============================] - 15s 92ms/step - loss: 0.6557 - accuracy: 0.6119 - val_loss: 0.7033 - val_accuracy: 0.5582\n", "Epoch 31/120\n", "166/166 [==============================] - 15s 93ms/step - loss: 0.6520 - accuracy: 0.6161 - val_loss: 0.7062 - val_accuracy: 0.5453\n", "Epoch 32/120\n", "166/166 [==============================] - 15s 92ms/step - loss: 0.6396 - accuracy: 0.6271 - val_loss: 0.7384 - val_accuracy: 0.5461\n", "Epoch 33/120\n", "166/166 [==============================] - 15s 92ms/step - loss: 0.6389 - accuracy: 0.6348 - val_loss: 0.7043 - val_accuracy: 0.5559\n", "Epoch 34/120\n", "166/166 [==============================] - 15s 92ms/step - loss: 0.6253 - accuracy: 0.6446 - val_loss: 0.7146 - val_accuracy: 0.5672\n", "Epoch 35/120\n", "166/166 [==============================] - 15s 93ms/step - loss: 0.6202 - accuracy: 0.6486 - val_loss: 0.7025 - val_accuracy: 0.5733\n", "Epoch 36/120\n", "166/166 [==============================] - 16s 95ms/step - loss: 0.6106 - accuracy: 0.6616 - val_loss: 0.7103 - val_accuracy: 0.5695\n", "Epoch 37/120\n", "166/166 [==============================] - 17s 103ms/step - loss: 0.5969 - accuracy: 0.6726 - val_loss: 0.7329 - val_accuracy: 0.5604\n", "Epoch 38/120\n", "166/166 [==============================] - 17s 102ms/step - loss: 0.5917 - accuracy: 0.6798 - val_loss: 0.7251 - val_accuracy: 0.5740\n", "Epoch 39/120\n", "166/166 [==============================] - 16s 97ms/step - loss: 0.5710 - accuracy: 0.6998 - val_loss: 0.7837 - val_accuracy: 0.5536\n", "Epoch 40/120\n", "166/166 [==============================] - 15s 93ms/step - loss: 0.5703 - accuracy: 0.6966 - val_loss: 0.7193 - val_accuracy: 0.5846\n", "Epoch 41/120\n", "166/166 [==============================] - 15s 92ms/step - loss: 0.5518 - accuracy: 0.7138 - val_loss: 0.7475 - val_accuracy: 0.5816\n", "Epoch 42/120\n", "166/166 [==============================] - 16s 97ms/step - loss: 0.5458 - accuracy: 0.7189 - val_loss: 0.7412 - val_accuracy: 0.5755\n", "Epoch 43/120\n", "166/166 [==============================] - 16s 95ms/step - loss: 0.5380 - accuracy: 0.7296 - val_loss: 0.7273 - val_accuracy: 0.5823\n", "Epoch 44/120\n", "166/166 [==============================] - 15s 91ms/step - loss: 0.5247 - accuracy: 0.7361 - val_loss: 0.7466 - val_accuracy: 0.5921\n", "Epoch 45/120\n", "166/166 [==============================] - 15s 92ms/step - loss: 0.5122 - accuracy: 0.7480 - val_loss: 0.7996 - val_accuracy: 0.5899\n", "Epoch 46/120\n", "166/166 [==============================] - 15s 92ms/step - loss: 0.4956 - accuracy: 0.7625 - val_loss: 0.7597 - val_accuracy: 0.5921\n", "Epoch 47/120\n", "166/166 [==============================] - 15s 92ms/step - loss: 0.4897 - accuracy: 0.7640 - val_loss: 0.7452 - val_accuracy: 0.6057\n", "Epoch 48/120\n", "166/166 [==============================] - 15s 93ms/step - loss: 0.4775 - accuracy: 0.7793 - val_loss: 0.7477 - val_accuracy: 0.6088\n", "Epoch 49/120\n", "166/166 [==============================] - 15s 92ms/step - loss: 0.4511 - accuracy: 0.7882 - val_loss: 0.8015 - val_accuracy: 0.5921\n", "Epoch 50/120\n", "166/166 [==============================] - 15s 92ms/step - loss: 0.4598 - accuracy: 0.7739 - val_loss: 0.7928 - val_accuracy: 0.5997\n", "Epoch 51/120\n", "166/166 [==============================] - 15s 93ms/step - loss: 0.4376 - accuracy: 0.7986 - val_loss: 0.8313 - val_accuracy: 0.6208\n", "Epoch 52/120\n", "166/166 [==============================] - 15s 93ms/step - loss: 0.4256 - accuracy: 0.8001 - val_loss: 0.8052 - val_accuracy: 0.6110\n", "Epoch 53/120\n", "166/166 [==============================] - 15s 93ms/step - loss: 0.4094 - accuracy: 0.8169 - val_loss: 0.7868 - val_accuracy: 0.6314\n", "Epoch 54/120\n", "166/166 [==============================] - 15s 92ms/step - loss: 0.4022 - accuracy: 0.8188 - val_loss: 0.7724 - val_accuracy: 0.6178\n", "Epoch 55/120\n", "166/166 [==============================] - 16s 99ms/step - loss: 0.3836 - accuracy: 0.8296 - val_loss: 0.7973 - val_accuracy: 0.6299\n", "Epoch 56/120\n", "166/166 [==============================] - 16s 98ms/step - loss: 0.3643 - accuracy: 0.8436 - val_loss: 0.8193 - val_accuracy: 0.6382\n", "Epoch 57/120\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "166/166 [==============================] - 15s 92ms/step - loss: 0.3570 - accuracy: 0.8468 - val_loss: 0.8335 - val_accuracy: 0.6390\n", "Epoch 58/120\n", "166/166 [==============================] - 15s 92ms/step - loss: 0.3475 - accuracy: 0.8481 - val_loss: 0.8122 - val_accuracy: 0.6254\n", "Epoch 59/120\n", "166/166 [==============================] - 15s 92ms/step - loss: 0.3320 - accuracy: 0.8568 - val_loss: 0.8246 - val_accuracy: 0.6254\n", "Epoch 60/120\n", "166/166 [==============================] - 15s 92ms/step - loss: 0.3279 - accuracy: 0.8596 - val_loss: 0.8379 - val_accuracy: 0.6382\n", "Epoch 61/120\n", "166/166 [==============================] - 15s 91ms/step - loss: 0.3066 - accuracy: 0.8679 - val_loss: 0.8712 - val_accuracy: 0.6322\n", "Epoch 62/120\n", "166/166 [==============================] - 15s 91ms/step - loss: 0.2972 - accuracy: 0.8778 - val_loss: 0.8765 - val_accuracy: 0.6556\n", "Epoch 63/120\n", "166/166 [==============================] - 15s 90ms/step - loss: 0.2794 - accuracy: 0.8855 - val_loss: 0.8888 - val_accuracy: 0.6412\n", "Epoch 64/120\n", "166/166 [==============================] - 15s 91ms/step - loss: 0.2717 - accuracy: 0.8870 - val_loss: 0.8707 - val_accuracy: 0.6616\n", "Epoch 65/120\n", "166/166 [==============================] - 15s 91ms/step - loss: 0.2481 - accuracy: 0.9027 - val_loss: 0.9451 - val_accuracy: 0.6443\n", "Epoch 66/120\n", "166/166 [==============================] - 15s 91ms/step - loss: 0.2438 - accuracy: 0.8985 - val_loss: 0.9310 - val_accuracy: 0.6601\n", "Epoch 67/120\n", "166/166 [==============================] - 15s 91ms/step - loss: 0.2429 - accuracy: 0.9019 - val_loss: 0.9513 - val_accuracy: 0.6488\n", "Epoch 68/120\n", "166/166 [==============================] - 15s 91ms/step - loss: 0.2180 - accuracy: 0.9123 - val_loss: 0.9224 - val_accuracy: 0.6639\n", "Epoch 69/120\n", "166/166 [==============================] - 15s 91ms/step - loss: 0.2053 - accuracy: 0.9210 - val_loss: 0.9745 - val_accuracy: 0.6586\n", "Epoch 70/120\n", "166/166 [==============================] - 15s 92ms/step - loss: 0.1937 - accuracy: 0.9259 - val_loss: 0.9804 - val_accuracy: 0.6609\n", "Epoch 71/120\n", "166/166 [==============================] - 15s 91ms/step - loss: 0.1911 - accuracy: 0.9259 - val_loss: 1.0090 - val_accuracy: 0.6692\n", "Epoch 72/120\n", "166/166 [==============================] - 15s 91ms/step - loss: 0.1683 - accuracy: 0.9343 - val_loss: 0.9756 - val_accuracy: 0.6760\n", "Epoch 73/120\n", "166/166 [==============================] - 15s 91ms/step - loss: 0.1602 - accuracy: 0.9384 - val_loss: 1.0009 - val_accuracy: 0.6654\n", "Epoch 74/120\n", "166/166 [==============================] - 15s 92ms/step - loss: 0.1499 - accuracy: 0.9411 - val_loss: 1.0601 - val_accuracy: 0.6752\n", "Epoch 75/120\n", "166/166 [==============================] - 15s 91ms/step - loss: 0.1386 - accuracy: 0.9511 - val_loss: 1.0837 - val_accuracy: 0.6964\n", "Epoch 76/120\n", "166/166 [==============================] - 15s 91ms/step - loss: 0.1504 - accuracy: 0.9395 - val_loss: 1.0422 - val_accuracy: 0.6828\n", "Epoch 77/120\n", "166/166 [==============================] - 16s 96ms/step - loss: 0.1298 - accuracy: 0.9494 - val_loss: 1.1151 - val_accuracy: 0.6926\n", "Epoch 78/120\n", "166/166 [==============================] - 15s 91ms/step - loss: 0.1363 - accuracy: 0.9469 - val_loss: 1.1188 - val_accuracy: 0.6934\n", "Epoch 79/120\n", "166/166 [==============================] - 15s 91ms/step - loss: 0.1087 - accuracy: 0.9613 - val_loss: 1.1764 - val_accuracy: 0.6881\n", "Epoch 80/120\n", "166/166 [==============================] - 15s 90ms/step - loss: 0.1111 - accuracy: 0.9579 - val_loss: 1.1839 - val_accuracy: 0.7047\n", "Epoch 81/120\n", "166/166 [==============================] - 17s 100ms/step - loss: 0.1099 - accuracy: 0.9554 - val_loss: 1.1656 - val_accuracy: 0.6903\n", "Epoch 82/120\n", "166/166 [==============================] - 16s 96ms/step - loss: 0.0954 - accuracy: 0.9664 - val_loss: 1.2296 - val_accuracy: 0.6956\n", "Epoch 83/120\n", "166/166 [==============================] - 16s 95ms/step - loss: 0.0960 - accuracy: 0.9641 - val_loss: 1.1802 - val_accuracy: 0.6911\n", "Epoch 84/120\n", "166/166 [==============================] - 16s 96ms/step - loss: 0.0827 - accuracy: 0.9709 - val_loss: 1.2027 - val_accuracy: 0.6971\n", "Epoch 85/120\n", "166/166 [==============================] - 16s 95ms/step - loss: 0.0733 - accuracy: 0.9734 - val_loss: 1.2311 - val_accuracy: 0.7047\n", "Epoch 86/120\n", "166/166 [==============================] - 16s 95ms/step - loss: 0.0695 - accuracy: 0.9754 - val_loss: 1.3710 - val_accuracy: 0.7032\n", "Epoch 87/120\n", "166/166 [==============================] - 16s 95ms/step - loss: 0.0785 - accuracy: 0.9728 - val_loss: 1.2191 - val_accuracy: 0.7130\n", "Epoch 88/120\n", "166/166 [==============================] - 16s 94ms/step - loss: 0.0643 - accuracy: 0.9762 - val_loss: 1.3200 - val_accuracy: 0.7107\n", "Epoch 89/120\n", "166/166 [==============================] - 16s 94ms/step - loss: 0.0777 - accuracy: 0.9728 - val_loss: 1.3024 - val_accuracy: 0.6986\n", "Epoch 90/120\n", "166/166 [==============================] - 16s 94ms/step - loss: 0.0823 - accuracy: 0.9698 - val_loss: 1.3243 - val_accuracy: 0.6850\n", "Epoch 91/120\n", "166/166 [==============================] - 16s 94ms/step - loss: 0.0748 - accuracy: 0.9715 - val_loss: 1.2222 - val_accuracy: 0.7190\n", "Epoch 92/120\n", "166/166 [==============================] - 16s 95ms/step - loss: 0.0412 - accuracy: 0.9894 - val_loss: 1.3428 - val_accuracy: 0.7183\n", "Epoch 93/120\n", "166/166 [==============================] - 16s 97ms/step - loss: 0.0419 - accuracy: 0.9873 - val_loss: 1.4071 - val_accuracy: 0.7122\n", "Epoch 94/120\n", "166/166 [==============================] - 16s 98ms/step - loss: 0.0707 - accuracy: 0.9728 - val_loss: 1.3140 - val_accuracy: 0.7032\n", "Epoch 95/120\n", "166/166 [==============================] - 16s 96ms/step - loss: 0.0709 - accuracy: 0.9728 - val_loss: 1.3007 - val_accuracy: 0.7115\n", "Epoch 96/120\n", "166/166 [==============================] - 16s 96ms/step - loss: 0.0559 - accuracy: 0.9813 - val_loss: 1.3645 - val_accuracy: 0.7107\n", "Epoch 97/120\n", "166/166 [==============================] - 16s 97ms/step - loss: 0.0526 - accuracy: 0.9821 - val_loss: 1.4318 - val_accuracy: 0.6911\n", "Epoch 98/120\n", "166/166 [==============================] - 16s 96ms/step - loss: 0.0528 - accuracy: 0.9811 - val_loss: 1.3890 - val_accuracy: 0.7077\n", "Epoch 99/120\n", "166/166 [==============================] - 16s 96ms/step - loss: 0.0410 - accuracy: 0.9873 - val_loss: 1.4500 - val_accuracy: 0.7228\n", "Epoch 100/120\n", "166/166 [==============================] - 16s 96ms/step - loss: 0.0439 - accuracy: 0.9853 - val_loss: 1.3942 - val_accuracy: 0.7069\n", "Epoch 101/120\n", "166/166 [==============================] - 16s 97ms/step - loss: 0.0471 - accuracy: 0.9851 - val_loss: 1.4105 - val_accuracy: 0.7092\n", "Epoch 102/120\n", "166/166 [==============================] - 16s 98ms/step - loss: 0.0560 - accuracy: 0.9779 - val_loss: 1.4342 - val_accuracy: 0.7092\n", "Epoch 103/120\n", "166/166 [==============================] - 17s 100ms/step - loss: 0.0505 - accuracy: 0.9807 - val_loss: 1.5104 - val_accuracy: 0.7002\n", "Epoch 104/120\n", "166/166 [==============================] - 16s 97ms/step - loss: 0.0625 - accuracy: 0.9781 - val_loss: 1.4378 - val_accuracy: 0.7281\n", "Epoch 105/120\n", "166/166 [==============================] - 16s 97ms/step - loss: 0.0482 - accuracy: 0.9838 - val_loss: 1.4477 - val_accuracy: 0.7069\n", "Epoch 106/120\n", "166/166 [==============================] - 16s 96ms/step - loss: 0.0296 - accuracy: 0.9915 - val_loss: 1.5017 - val_accuracy: 0.7190\n", "Epoch 107/120\n", "166/166 [==============================] - 16s 96ms/step - loss: 0.0357 - accuracy: 0.9887 - val_loss: 1.4341 - val_accuracy: 0.7281\n", "Epoch 108/120\n", "166/166 [==============================] - 16s 96ms/step - loss: 0.0374 - accuracy: 0.9856 - val_loss: 1.5128 - val_accuracy: 0.7221\n", "Epoch 109/120\n", "166/166 [==============================] - 16s 96ms/step - loss: 0.0449 - accuracy: 0.9838 - val_loss: 1.4628 - val_accuracy: 0.7205\n", "Epoch 110/120\n", "166/166 [==============================] - 16s 94ms/step - loss: 0.0415 - accuracy: 0.9851 - val_loss: 1.4585 - val_accuracy: 0.7205\n", "Epoch 111/120\n", "166/166 [==============================] - 16s 97ms/step - loss: 0.0453 - accuracy: 0.9824 - val_loss: 1.5194 - val_accuracy: 0.7160\n", "Epoch 112/120\n", "166/166 [==============================] - 16s 95ms/step - loss: 0.0428 - accuracy: 0.9845 - val_loss: 1.4295 - val_accuracy: 0.7198\n", "Epoch 113/120\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "166/166 [==============================] - 16s 95ms/step - loss: 0.0172 - accuracy: 0.9953 - val_loss: 1.5194 - val_accuracy: 0.7326\n", "Epoch 114/120\n", "166/166 [==============================] - 16s 94ms/step - loss: 0.0406 - accuracy: 0.9868 - val_loss: 1.4640 - val_accuracy: 0.7304\n", "Epoch 115/120\n", "166/166 [==============================] - 17s 102ms/step - loss: 0.0381 - accuracy: 0.9866 - val_loss: 1.4871 - val_accuracy: 0.7100\n", "Epoch 116/120\n", "166/166 [==============================] - 16s 95ms/step - loss: 0.0469 - accuracy: 0.9832 - val_loss: 1.5798 - val_accuracy: 0.7221\n", "Epoch 117/120\n", "166/166 [==============================] - 16s 94ms/step - loss: 0.0316 - accuracy: 0.9887 - val_loss: 1.4768 - val_accuracy: 0.7319\n", "Epoch 118/120\n", "166/166 [==============================] - 16s 94ms/step - loss: 0.0366 - accuracy: 0.9879 - val_loss: 1.4511 - val_accuracy: 0.7251\n", "Epoch 119/120\n", "166/166 [==============================] - 16s 94ms/step - loss: 0.0230 - accuracy: 0.9945 - val_loss: 1.4546 - val_accuracy: 0.7304\n", "Epoch 120/120\n", "166/166 [==============================] - 16s 94ms/step - loss: 0.0131 - accuracy: 0.9960 - val_loss: 1.5568 - val_accuracy: 0.7341\n", "42/42 [==============================] - 1s 34ms/step - loss: 1.5568 - accuracy: 0.7341\n", "Test accuracy: 0.7341389656066895\n" ] } ], "source": [ "import pandas as pd\n", "from keras.layers import LSTM, Dense\n", "from keras.models import Sequential\n", "from sklearn.preprocessing import MinMaxScaler\n", "from sklearn.model_selection import train_test_split\n", "\n", "# načtení dat\n", "\n", "# definice lookback\n", "lookback = 200\n", "\n", "# převod dat na numpy array\n", "data = df_model.values\n", "scaler = MinMaxScaler(feature_range=(0, 1))\n", "data_scaled = scaler.fit_transform(data)\n", "\n", "# rozdělení dat na trénovací a testovací\n", "X = []\n", "y = []\n", "for i in range(lookback, len(data)):\n", " X.append(data_scaled[i-lookback:i, 1:])\n", " y.append(data_scaled[i, 0])\n", "X = np.array(X)\n", "y = np.array(y)\n", "print(X.shape)\n", "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)\n", "\n", "# vytvoření modelu\n", "model = Sequential()\n", "model.add(LSTM(units=100, input_shape=(lookback, data.shape[1]-1)))\n", "model.add(Dropout(0.3))\n", "model.add(Dense(1, activation='sigmoid'))\n", "model.compile(loss=\"binary_crossentropy\", optimizer=\"adam\", metrics=['accuracy'])\n", "\n", "# natrénování modelu na trénovacích datech\n", "history = model.fit(X_train, y_train, epochs=120, batch_size=32,validation_data=(X_test, y_test))\n", "\n", "# hodnocení modelu na testovacích datech\n", "test_loss, test_acc = model.evaluate(X_test, y_test)\n", "print('Test accuracy:', test_acc)\n" ] }, { "cell_type": "code", "execution_count": 51, "id": "96bc4d52", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Model: \"sequential\"\n", "_________________________________________________________________\n", " Layer (type) Output Shape Param # \n", "=================================================================\n", " lstm (LSTM) (None, 100) 76000 \n", " \n", " dropout (Dropout) (None, 100) 0 \n", " \n", " dense (Dense) (None, 1) 101 \n", " \n", "=================================================================\n", "Total params: 76,101\n", "Trainable params: 76,101\n", "Non-trainable params: 0\n", "_________________________________________________________________\n" ] } ], "source": [ "model.summary()" ] }, { "cell_type": "code", "execution_count": 52, "id": "44f54321", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "42/42 [==============================] - 1s 34ms/step\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAGxCAYAAACwbLZkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAABRdElEQVR4nO3deVhUZf8G8HuAmWETEtlldSG33CAN1EwzTH3TeistK5esX75tLm9aZln5WpaZlZpahlqmZpraRipq7maImAvmiuICIij7JjPf3x/GyZF1EDjMcH+ua67mPOc5Z75zQs7NczaNiAiIiIiIVGKjdgFERETUsDGMEBERkaoYRoiIiEhVDCNERESkKoYRIiIiUhXDCBEREamKYYSIiIhUxTBCREREqmIYISIiIlUxjBDVI7Nnz4ZGo0G7du3KnH/mzBloNBrMnDmzzPkzZ86ERqPBmTNnTNqNRiOWLl2KPn36wN3dHVqtFp6envjXv/6Fn376CUajscK6goKCoNFolJeTkxM6d+6MuXPnorybOB89ehQjRoxAQEAAdDod3N3d0b9/f/z666/lfs7p06fx4osvIiQkBA4ODnB0dETbtm3xxhtv4MKFCxXWWOLgwYMYOXIkgoODYW9vD2dnZ3Tu3BkzZszAlStXqrQOIqpbDCNE9ciiRYsAAEeOHMHevXtrZJ0FBQXo378/hg8fDk9PT8yfPx9btmzBggUL4Ovri0cffRQ//fRTpevp1q0b9uzZgz179mDp0qVwdHTESy+9hOnTp5fqu2bNGnTq1Al//PEH3nzzTWzatAnz588HAPTv3x8TJ04stczPP/+M9u3b4+eff8b//d//4eeff1be//TTT/jXv/5VaY0LFy5EaGgoYmNjMWHCBKxfvx5r167Fo48+igULFmDUqFFV2GJEVOeEiOqF2NhYASADBgwQAPLss8+W6pOYmCgA5MMPPyxzHR9++KEAkMTERKXtP//5jwCQr776qsxljh8/Ln/++WeFtQUGBsqAAQNM2jIzM8XV1VUCAgJM2k+ePCmOjo4SFhYmOTk5pdY1evRoASArVqxQ2k6fPi1OTk7SqVMnycjIKLWM0WiU77//vsIad+/eLba2tnL//fdLQUFBqfmFhYXyww8/VLiOqsrLyxOj0Vgj6yIiEY6MENUTUVFRAID3338fERER+Pbbb5GXl3dL60xJScGXX36Jvn37YtiwYWX2admyJdq3b2/2ul1cXBASEoJLly6ZtH/88cfIy8vDnDlz4OTkVGq5jz76CLfddhveffddpW3WrFnIzc3FvHnz4OrqWmoZjUaDf//73xXW895770Gj0eCLL76AXq8vNV+n02HgwIEm63z77bdL9QsKCsKIESOU6SVLlkCj0WDjxo14+umn4eHhAUdHR6xcuRIajQabN28utY758+dDo9Hg4MGDStu+ffswcOBAuLm5wd7eHp06dcJ3331X4XciaigYRojqgfz8fKxYsQJ33nkn2rVrh6effhrZ2dlYtWrVLa33t99+w7Vr1/Dggw/WTKE3KC4uxrlz5xASEmLSHhMTAy8vL9x1111lLufo6IjIyEgcPnwYKSkpAICNGzdWuExlDAYDtmzZgtDQUPj7+1drHZV5+umnodVqsXTpUqxevRoPPfQQPD09sXjx4lJ9lyxZgs6dOysh77fffkO3bt2QkZGBBQsW4IcffkDHjh0xZMgQLFmypFbqJbIkdmoXQETA6tWrkZmZqZzTMGTIEIwdOxZRUVEYPnx4tdeblJQEAAgODr7lGkUExcXFAICLFy9i2rRpSE9Px5dfflnqMzt27FjhukrqSUpKgre3d5WWqUhaWhry8vJq5HuW595778Xnn39u0vbkk09i/vz5yMzMVEZ0jh49ij/++ANz5sxR+j3//PNo27YttmzZAju76792+/bti7S0NLz++usYNmwYbGz4tyE1XPzpJ6oHoqKi4ODggMceewwA4OzsjEcffRQ7duzAiRMnVK7uuujoaGi1Wmi1WgQGBmLhwoWYM2cOBgwYYPa65O8rcDQaTU2XWWsefvjhUm1PP/008vPzsXLlSqVt8eLF0Ov1GDp0KADg5MmT+Ouvv/DEE08AuD6iVPLq378/kpOTcezYsbr5EkT1FMMIkcpOnjyJ7du3Y8CAARARZGRkICMjA4888giAf66wAaD8VW0wGMpcV8nIhVarBQAEBAQAABITE2+5zu7duyM2Nha///47li5diqCgILz44ovYuXOnSb+AgIBKP6/k0uOSQypVWaYi7u7ucHR0rJHvWR4fH59SbW3btsWdd96pHKoxGAz45ptvMGjQILi5uQGAck7NK6+8ooS5ktfzzz8P4PrIDlFDxjBCpLJFixZBRLB69Wo0btxYeZWMOHz11VdK+HB3d4etrW2599y4cOECbG1t0aRJEwBAr169oNVqsW7duluu09XVFWFhYejatSuefPJJbNy4Udmh3nifkvvuuw+XLl3C77//XuZ68vLyEBMTgzvuuAPe3t4Arh+yqGiZytja2uLee+9FXFwczp8/X6Vl9Ho9CgsLS7Wnp6eX2b+8UZyRI0fi999/x9GjR7F+/XokJydj5MiRynx3d3cAwKRJkxAbG1vm61YOURFZBXUv5iFq2IqLi8XX11eaN28uv/32W6nXf//7XwEgP/30k7LM3XffLYGBgZKfn2+yrvz8fAkICJCePXuatFd2ae/JkyerdWmviMhbb70lAGT58uUm63NwcCj30t6Ser799lulrSqX9q5Zs6bCGm+8tLewsLDU/KKiIvnxxx+V6dtvv1369+9v0mfz5s0CQIYPH660LV68WABIbGxsmZ979epVsbe3l4kTJ8ojjzwiTZs2FYPBYNKnZcuWpT6LiP7BMEKkop9++kkAyAcffFDm/MuXL4ter5cHH3xQadu9e7fo9Xrp2LGjLFmyRLZs2SJLliyRjh07il6vl927d5usIz8/X/r27SsajUaGDh0qq1atku3bt8uaNWvkP//5j9jb28u6desqrLO8MJKdnS1eXl5y++23S3FxsdK+evVq0ev10rp1a1m4cKFs375dVq1aJf369RMA8sorr5S5LRwdHSUoKEhmzpwpmzdvls2bN8ucOXOkU6dO0rFjxwprFBH54osvxM7OTtq1ayefffaZbN26VWJiYmTGjBnSokULk+04bdo00Wg08uabb8qmTZtk9uzZEhISIq6urmaFERGRxx9/XDw9PUWn08nrr79eav6WLVtEr9dLZGSkLF++XLZt2yZr166V9957Tx555JFKvxeRtWMYIVLRgw8+KDqdTlJTU8vt89hjj4mdnZ2kpKQobfv27ZOHHnpI3N3dxdbWVtzd3eWhhx6SuLi4MtdRXFwsX331lfTu3Vvc3NzEzs5OPDw8pF+/frJ8+fJSf8nfrLwwIiLy2WeflTnycuTIERk+fLj4+fmJVqsVNzc3uf/+++WXX34p93NOnTolzz//vLRo0UL0er04ODhImzZtZPz48SY3cqvIgQMHZPjw4RIQECA6nU4ZcZkyZYrJdi4sLJSJEyeKv7+/ODg4SM+ePeXAgQMSGBhodhjZuHGjABAAcvz48TL7/Pnn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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from sklearn.metrics import roc_curve\n", "import matplotlib.pyplot as plt\n", "y_pred_proba =model.predict(X_test)\n", "fpr, tpr, _ = roc_curve(y_test, y_pred_proba)\n", "auc = roc_auc_score(y_test, y_pred_proba)\n", "plt.plot(fpr,tpr,label=\"data 1, auc=\"+str(auc))\n", "plt.legend(loc=4)\n", "plt.title(\"AUC ROC Curve\")\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 53, "id": "cabdd1e1", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAGxCAYAAACwbLZkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAACGtklEQVR4nO3dd1yV5fvA8c85bJChIktAUdxb3HuludIyM8vU1MzM0mxptr+WLcuW9qtcbTNHVu69t7i3KIggorJkn/P8/rjh4JEhKHAY1/v1Oq/znGfezyNyLu5x3TpN0zSEEEIIISxEb+kCCCGEEKJ8k2BECCGEEBYlwYgQQgghLEqCESGEEEJYlAQjQgghhLAoCUaEEEIIYVESjAghhBDCoiQYEUIIIYRFSTAihBBCCIuSYESIcuyrr75Cp9PRsGFDSxdFCFGOSTAiRDk2b948AI4fP86ePXssXBohRHklwYgQ5dT+/fs5fPgwffv2BWDu3LkWLlHOEhMTLV0EIUQRk2BEiHIqM/j46KOPaNeuHX/88Ue2L/7w8HDGjh2Ln58ftra2+Pj48Oijj3L16lXTPjExMbz88svUqFEDOzs7PDw86NOnD6dOnQJg8+bN6HQ6Nm/ebHbuixcvotPpWLBggWndyJEjqVChAkePHqVnz544OzvTvXt3ANatW8eAAQPw9fXF3t6ewMBAnn32WaKjo7Pd26lTpxg6dCienp7Y2dnh7+/P8OHDSUlJ4eLFi1hbWzNjxoxsx23duhWdTsfixYvv6ZkKIe6NtaULIIQofklJSfz++++0bNmShg0bMmrUKMaMGcPixYsZMWIEoAKRli1bkpaWxhtvvEHjxo25fv06a9as4ebNm3h6ehIfH0+HDh24ePEir7/+Oq1btyYhIYGtW7cSERFB3bp1C1y21NRUHnroIZ599lmmTJlCeno6AOfPn6dt27aMGTMGV1dXLl68yOeff06HDh04evQoNjY2ABw+fJgOHTrg7u7O+++/T61atYiIiGDFihWkpqZSvXp1HnroIb777jtee+01rKysTNf+5ptv8PHx4eGHHy6EpyyEyDdNCFHu/PTTTxqgfffdd5qmaVp8fLxWoUIFrWPHjqZ9Ro0apdnY2GgnTpzI9Tzvv/++Bmjr1q3LdZ9NmzZpgLZp0yaz9SEhIRqgzZ8/37RuxIgRGqDNmzcvz/IbjUYtLS1Nu3TpkgZof//9t2lbt27dNDc3Ny0qKuquZVq2bJlpXXh4uGZtba299957eV5bCFH4pJlGiHJo7ty5ODg48PjjjwNQoUIFBg8ezLZt2zh79iwAq1atomvXrtSrVy/X86xatYratWvTo0ePQi3foEGDsq2Liopi3Lhx+Pn5YW1tjY2NDdWqVQPg5MmTgOpfsmXLFh577DGqVKmS6/m7dOlCkyZN+Pbbb03rvvvuO3Q6HWPHji3UexFC3J0EI0KUM+fOnWPr1q307dsXTdOIiYkhJiaGRx99FMgaYXPt2jV8fX3zPFd+9ikoR0dHXFxczNYZjUZ69uzJ0qVLee2119iwYQN79+5l9+7dgGp2Arh58yYGgyFfZXrxxRfZsGEDp0+fJi0tjR9++IFHH30ULy+vQr0fIcTdSTAiRDkzb948NE3jr7/+omLFiqZX5qiahQsXYjAYqFKlCpcvX87zXPnZx97eHoCUlBSz9Tl1PAXQ6XTZ1h07dozDhw/z6aef8sILL9ClSxdatmxJ5cqVzfarVKkSVlZWdy0TwBNPPEHlypX59ttvWbx4MZGRkTz//PN3PU4IUfgkGBGiHDEYDCxcuJCaNWuyadOmbK+XX36ZiIgIVq1aRe/evdm0aROnT5/O9Xy9e/fmzJkzbNy4Mdd9qlevDsCRI0fM1q9YsSLf5c4MUOzs7MzW/9///Z/ZZwcHBzp37szixYtzDXYy2dvbM3bsWBYuXMjnn39O06ZNad++fb7LJIQoPDKaRohyZNWqVVy5coWPP/6YLl26ZNvesGFDvvnmG+bOncs333zDqlWr6NSpE2+88QaNGjUiJiaG1atXM3nyZOrWrcukSZNYtGgRAwYMYMqUKbRq1YqkpCS2bNlCv3796Nq1K15eXvTo0YMZM2ZQsWJFqlWrxoYNG1i6dGm+y123bl1q1qzJlClT0DSNSpUq8c8//7Bu3bps+2aOsGndujVTpkwhMDCQq1evsmLFCv7v//4PZ2dn077jx4/nk08+4cCBA/z444/39EyFEIXAwh1ohRDFaODAgZqtrW2eI00ef/xxzdraWouMjNTCwsK0UaNGaV5eXpqNjY3m4+OjPfbYY9rVq1dN+9+8eVObOHGi5u/vr9nY2GgeHh5a3759tVOnTpn2iYiI0B599FGtUqVKmqurqzZs2DBt//79OY6mcXJyyrFcJ06c0B544AHN2dlZq1ixojZ48GAtNDRUA7R33nkn276DBw/WKleurNna2mr+/v7ayJEjteTk5Gzn7dKli1apUiUtMTExn09RCFHYdJqmaZYOiIQQwhKioqKoVq0aL7zwAp988omliyNEuSXNNEKIcufy5ctcuHCBTz/9FL1ez8SJEy1dJCHKNenAKoQod3788Ue6dOnC8ePH+fXXX6lataqliyREuSbNNEIIIYSwKKkZEUIIIYRFSTAihBBCCIuSYEQIIYQQFlUqRtMYjUauXLmCs7NzjqmihRBCCFHyaJpGfHw8Pj4+6PW513+UimDkypUr+Pn5WboYQgghhLgHYWFheU5gWSqCkcz0zWFhYdlm8xRCCCFEyRQXF4efn5/ZNAw5KRXBSGbTjIuLiwQjQgghRClzty4W0oFVCCGEEBYlwYgQQgghLEqCESGEEEJYlAQjQgghhLAoCUaEEEIIYVESjAghhBDCoiQYEUIIIYRFFTgY2bp1K/3798fHxwedTsfy5cvvesyWLVsICgrC3t6eGjVq8N13391LWYUQQghRBhU4GLl16xZNmjThm2++ydf+ISEh9OnTh44dO3Lo0CHeeOMNXnzxRZYsWVLgwgohhBCi7ClwBtbevXvTu3fvfO//3Xff4e/vz6xZswCoV68e+/fv57PPPmPQoEEFvbwQQgghypgi7zOya9cuevbsabauV69e7N+/n7S0tByPSUlJIS4uzuwlhBBCiLKpyIORyMhIPD09zdZ5enqSnp5OdHR0jsfMmDEDV1dX00tm7BVCCCHKrmIZTXPnBDmapuW4PtPUqVOJjY01vcLCwoq8jEIIIURJomma6fuyqFy+mcgfe0N5/reDhMckFem18lLks/Z6eXkRGRlpti4qKgpra2sqV66c4zF2dnbY2dkVddGEEEKIEikk+haD5uykQ6A7Xz7e9K6z3hbEtfgUvt10ji1nrhESfcu0vlMtd4a09C+06xREkQcjbdu25Z9//jFbt3btWlq0aIGNjU1RX14IIYQodT5bc5obt1JZcfgKXepU4ZHmvoVy3lsp6Qyft5eTEaovppVeR1M/NzoEuhNUrWKhXONeFDgYSUhI4Ny5c6bPISEhBAcHU6lSJfz9/Zk6dSrh4eH89NNPAIwbN45vvvmGyZMn88wzz7Br1y7mzp3L77//Xnh3IYQQQhSDs1fj2XvxBv0a++DqUDR/UB8Lj+W/oxGmz+/9c4IOge54uNjf13kNRo0Xfz/EyYg43CvY8sHDjWhbszIu9pavGChwn5H9+/fTrFkzmjVrBsDkyZNp1qwZb7/9NgARERGEhoaa9g8ICGDlypVs3ryZpk2b8r///Y+vvvpKhvUKIUQZp2ka6QajpYtRaKLiknn8+91MW3aMDh9vZNb6M8Ql5zwq9H7MXHsagH6NvWlY1YXYpDTeXH7svvuPfLjyJBtORWFnreeH4S3o1cCrRAQiADqtqHvHFIK4uDhcXV2JjY3FxcXF0sURQgiRD5P+OMS/RyLoUseDR4Oq0rWuB3bWVpYu1j0xGjVGzN/LtrPRWOt1pBvVV6eLvTVjO9VgVIcAHG3vv+fD/os3ePS7XVjpdWyY3JmkNAMPfbOdNIPGV0Ob8VATn3yV9a+Dl7kYfQv/So74V3bkxJU4pv93EoBvnmhGv8Z3P09hyO/3d5H3GRFCCFH+ZPZ3MGqw/uRV1p+8ipujDc93CeSZTjUK9Vo3b6Xy2drT+Lg5MLBZVaq6ORTq+QF+2HaBbWejsbfRs2JCB85cjefL9Wc5G5XAZ2vPsHDXJSZ2r8WQln7YWN3bQFVN0/hkjaoVeayFL9XdnQB4vmsgs9af5Z2/j+Fka4WjrTX2NnoqO9nhX9nR7BxGo8a05Uf5fW/Oo1BffqB2sQUiBSE1I0IIIQrd4v1hvPrXEWpWcaJHfU+WHwrnalwKAGtf6kRtT+dCuU5SqoEnftzNodAYAHQ6aBNQmYebVaVqRQfsrPXY21jh5WqPe4V7G6V5OCyGQXN2km7U+PDhRjzRWo04MRg1/j1yhZlrzxB6IxGAAHcnnu1UgwcbeuHmaGt2ntR0IzFJqXg459z3Y+uZawyftxdbKz2bX+2CT0ZQlZpu5KFvtnMqMj7bMb0bevFWv/r4uDlgMGq8vuQIfx24jF4HA5tW5fqtVMJuJBIek8SgIF8+GNiwUEfm3E1+v78lGBFCCFHonvlpP+tOXGVSj1pM6lEbg1Fj7E/72XAqitEdAnirX/37vka6wcizPx9gw6koXB1sqOftzO4LN3Lc19ZKzxdDmtK3sXeBrpGQkk7fr7Zx6XoivRt6MfvJ5tm+zFPTjfy+N5SvNpzl+q1UAKz1OjrUcueB+p5Exiaz7+INgsNiSE4z0rJ6RcZ3CaRLnSrodDrSDEY2n77GR6tOcv7aLUa1D+Dt/ubP58zVeN775zixSWkkpxlJTjNwJSYJowaOtla82L0WpyLiWB58BSu9ji+GNM1Xk05Rk2BECCGERSSlGmj2v7UkpxlZ+WJH6vuo39sbTl5l9ML9VHKyZffU7tha5785IyElnbR0IxWdVG2DpqlagD/3X8bOWs+vY1rTonolLt9MZNnBcDadjuJWioHkdAO3UtKJTkjF0daKv59vT6181sqkpBt49ucDbD59DR9Xe1ZN7ISrY+4dPhNS0vl51yX+Dg7PsRbjTnW9nGlRvSKrjkaaghgXe2s2vtIlX7U4JyPieGv5MfZfumlaZ63X8fXQZvRuVLCgq6hIMCKEEMIi1hyP5NmfD+Bb0YFtr3U11SSkG4y0+2gjUfEpzH6yOX3y+MI8ezWeOVvOExJ9i9DriaYv68pOttTyrICDjRWbTl9Dr4PvhgXRs4FXrudKNxgZPm8vO89fp0YVJ/5+vj3Ot40iiU5IwcZKbzZUNyXdwHO/HGTjqSjsbVSwE1StUr6fwbmoBP47EsGO89H4ujnQonolWlaviLO9DfN2hPDr7kvcSjWY9nevYMuAplV5qk01U1+R/DAaNZYcvMxHq04Rn5LOt08054H6nnc/sJhIMCKEEMIiXv7zMEsOXs6xueGT1aeYvfk8XepUYcHTrXI8Pj45jZ5fbCUiNvmu15rxSCOGtrp71tDohBT6f72diNhkHmzgxZxhzTkXlcCsDWdZeTQCWys9Q1r68UzHGni62DP+1wOsP6kCkXkjWtIu0D1/N59PsYlp/LLnEpdvJvFAfQ861aqC9T12fAVVG5WYmk7le+wXU1QkGBFCCFHs0g1GWnywnpjENP4Y24Y2Ncyn/bgYfYsun21Gr4MdU7rh7Zp95MvUpUf5fW8o/pUcmdq7Ln4Zw1Ot9TrORSVw5moCZ6PiqevlzMPN8p+ZNDgshse+20WqwUhTPzcOX47hzm9AK72OAHcnzkUlYGetZ97IlrQv5ECkPJGhvUIIIe5bYmo66UYt38mx9l28SUxiGhUdbWiRQ3rx6u5OtAqoxN6QG/y1/zIvdK9ltn3HuWh+36sSZ348qDFta5oHM4193Wjs63ZP99LUz413HqrPtGXHCA6LAaBXA08mdq9NTFIqczafZ9vZaM5FJWCbkRhMApHiIcGIEEKUU7dS0ll1LJKjl2PoUteDLrWrmPp3GIwav+0N5dPVp0gzaLzQPZAxHWrctdPp2hNqYtTu9TxzbXYY0sKPvSE3+PNAGM93DUSv15nK8/qSIwA81aZatkCkMDzRyp+YxDTOX0tgdIcAGvi4mra1q+nO0cuxLD10md4NvWkVkP8+IuL+SDAihBDliKZp7Dp/nb8OXGbVsUiS0lQnyoW7LlHf24XnutTEt6ID76w4zpHLsabjPll9miUHLvO/gQ1pVzPn2gJN01h7/CoAPfPoRNmnkTfvrjhO2I0kdl+4buqP8fHqU1y+mURVNwem9K5bWLdsRqfT8XzXwFy3N/J1pZGva67bRdGQYEQIIcqBpFQDyw6FM39HCGejEkzrA9ydaO5fkVXHIjgREccLvx8ybXO2s+blnrVxtrdhRkYOjCd+2EPfRt682qtOtlEfJyLiCI9Jwt5GT8daVXIti4OtFf2b+vDbnlDG/XIAl4xRLJdvJgGqecbJTr6eyhP51xZCiDLMaNT4dtM55u4IISZRTermZGvFgGZVGdTcl+b+buh0Ot7sW4+fdl1iwc4Qbiam8XCzqkztU9eULbRHfU9mrj3NL7sv8d/RCNYcj+SJ1v680K0WCSnprD9xlWWHwgHoVKsKDrZ5z0HzZGt/Fu0LIy45nbjkdLP1HWpJP43yRkbTCCFEGfb5ujN8teEsAH6VHBjZLoDBLXxz7ZCalGogOiEFv0qOOW4/GRHHx6tPsfn0NQCzSeNApWP//qkW+cp1ER6TxLX4FNNna72Oet4uWOmLL125KFoytFcIIcq5/45E8PxvBwF4p399hretXmhf9DvPR/PxqlMcvhyLtV5H6xqV6FHPkx71PHMNZET5I0N7hRCinLhwLYGNp6LoXs+TgIx+HMfCY3l5cTAAYzoE8HT7gEK9Zrua7ix/vj3nohLwdLXP99BfIXIiwYgQQpRi6QYjY37az4Vrt5j+30naB1bmkWa+fLb2NMlpRjrXrsLUPvWK5No6nS7f87wIkRcJRoQQohT7O/gKF67dwtZaT5rByI5z19lx7joANas48fUTzaQPhijxJBgRQogSyGjUTMnAcpNmMPJlRufUl3rUpl9jbxbtC2PR/jB0wI8jWkrziSgVJBgRQogS5lZKOv2/2U5KmpE3+9bjwYZepsyot1ty4DKhNxJxr2DLiHbVcLS15pVedZj8QG2MmnZfE68JUZzkJ1UIIUqYf4+oppfwmCSe+/UgI+bvIyT6ltk+KekGvt54DoBxnWviaJv1t6Ver5NARJQq8tMqhBAlzB/7wgBoWb0itlZ6tp65Rq8vtvL+PycIu5EIwKJ9YYTHJOHpYsewNtUsWVwh7ps00wghRAlyOjKeQ6ExWOt1zH4yiISUdN7++xjbzkYzb0cIC3aG0LO+FwdDbwLwfNdA7G3yznYqREknwYgQQpQgizJqRXrU86SKsx1VnO34aVQrtp6N5sdtF9h2NprVx9XMuD6u9gxp6WfJ4gpRKCQYEUKIEiIl3cDSQ5cBGNIqK8jQ6XR0rl2FzrWrcOZqPPN3XGTb2Wu8278BdtZSKyJKPwlGhBCiiFyLT8HZ3jrfzShrj18lJjENb1d7OuUy621tT2dmPNKoMIsphMVJB1YhhCgCwWExtP94I6MW7CO/U4BlNtEMDvKVRGWiXJFgRAghCpmmabz/z3FS043sPJ+VEfV232w8S503V/Hi74cIDosh7EYi289Fo9PB4BbSD0SUL9JMI4QQhWzl0UgOhsaYPn+18SwdarmbPl+4lsCs9WdJN2qsOHyFFYev4F7BFoAOge4y660od6RmRAghClFymoGPVp8EYGgrf2yt9OwNucGeC1m1Ix+uPEm6UaNNjUoMau6LrZWe6IRUABkdI8olqRkRQohCtHDnRcJuqGRkb/Wrh14Hv+4J5ZtN52hdozLbzl5j/ckorPU6pg9sRKBHBV7vXYc/9oaRZjDyYAMvS9+CEMVOghEhhCgk1xNS+CYjRfsrPevgaGvNuM41WbQvjG1no9l/8QbT/1W1Jk+1rUagRwUAPJztebF7LYuVWwhLk2YaIYQoBEajxmdrTxOfkk4DHxcGNfcFwK+SIw83qwrA2J8PcPpqPG6ONkyU4EMIEwlGhBDiPqQZjCzeH8YDX2zh971qaO60vvXQ3zY0d3zXQPQ6uHFL9Qt5qUdt3BxtLVJeIUoiaaYRQoh7oGkaSw+GM3Ptaa7EJgPgbG/Ni91q0a6mu9m+Ae5O9G/iw9/BVwj0qMATrf0tUWQhSiwJRoQQooASUtJ5c9lRlgdfAcC9gh1jOgbwZGt/nO1tcjxmWt96uNjbMKxNNWyspFJaiNtJMCKEEAVwLDyWF34/REj0Laz0OiZ1r8UznWrcNeW7h7M9/xvYsJhKKUTpIsGIEELk0+pjkbz4+yFSDUa8Xe35emgzWlSvZOliCVHqSTAihBD5EBGbxKt/HSbVYKRHPQ8+fbQJFZ2kE6oQhUGCESGEuAtN03h9yVHik9Np4ufGd8OCsJZ+H0IUGvnfJIQQd7FoXxhbz1zD1lrPzMGNJRARopDJ/yghhMjD5ZuJTP9PZU19tWcdAj2cLVwiIcoeaaYRQojbRMQmEX4zyfR55tozJKSk06JaRUZ1CLBgyYQouyQYEUKIDL/uucRby49h1MzX29vo+XRwE6xuy6oqhCg8EowIIco9o1Hj07WnmbP5PABV3RywsVKBh5VexwvdahHg7mTJIgpRpkkwIoQo11LSDbz21xH+zsimOqlHLSZ2r4VOJ7UgQhQXCUaEEOWWwagxZuF+tp2NxlqvY8YjjRjcws/SxRKi3JFgRAhRbv286yLbzkbjaGvF/z0VRMdaVSxdJCHKJRnaK4Qoly7fTOSTNacBmNqnngQiQliQBCNCiHJH0zTeWHaMxFQDrapX4slW/pYukhDlmgQjQohyZ9mhcFNG1RmDGqGXIbtCWJQEI0KIciU6IYX3/z0BwMTutahZpYKFSySEkGBECFGuTP/3BDGJadT3dmFspxqWLo4QAglGhBDlyNHLsSzPyCfy0aBG2MiEd0KUCPI/UQhRbny8+hQAA5v60NjXzbKFEUKYSDAihCgXtp29xvZz0dha6Xm5Zx1LF0cIcRsJRoQQZZ7RqPHRKlUrMqxNNfwqOVq4REKI291TMDJ79mwCAgKwt7cnKCiIbdu25bn/t99+S7169XBwcKBOnTr89NNP91RYIYS4F/8cucLxK3FUsLNmQrdASxdHCHGHAgcjixYtYtKkSUybNo1Dhw7RsWNHevfuTWhoaI77z5kzh6lTp/Luu+9y/Phx3nvvPZ5//nn++eef+y68EEIArD4WydYz13LclpJu4NOMTKvjOtegkpNtcRZNCJEPOk3TtIIc0Lp1a5o3b86cOXNM6+rVq8fAgQOZMWNGtv3btWtH+/bt+fTTT03rJk2axP79+9m+fXu+rhkXF4erqyuxsbG4uLgUpLhCiDLuyOUYHvpmBwCPt/Tjnf4NcLC1AuB6Qgrv/XOCFYev4OFsx+ZXu+BoK1NyCVFc8vv9XaD/lampqRw4cIApU6aYre/Zsyc7d+7M8ZiUlBTs7e3N1jk4OLB3717S0tKwsbHJ8ZiUlBSzmxFCiJwsPRhuWv5jXxgHQ2/y1dBmHLh0k09WnyY2KQ2AN/rUk0BEiBKqQM000dHRGAwGPD09zdZ7enoSGRmZ4zG9evXixx9/5MCBA2iaxv79+5k3bx5paWlER0fneMyMGTNwdXU1vfz8ZEpvIUR26QYj/x5ReUPGd6lJFWc7zlxN4MFZ25i27BixSWnU83ZhyXNtGdisqoVLK4TIzT11YNXpzOdx0DQt27pMb731Fr1796ZNmzbY2NgwYMAARo4cCYCVlVWOx0ydOpXY2FjTKyws7F6KKYQo47afiyY6IZVKTra89EBtVr7YkY613AFwtrPmnf71+WdCe4KqVbJwSYUQeSlQnaW7uztWVlbZakGioqKy1ZZkcnBwYN68efzf//0fV69exdvbm++//x5nZ2fc3d1zPMbOzg47O7uCFE0IUQ4tP6SaaPo39sbGSk8VZzsWPt2KXReuU8fLGfcK8ntEiNKgQDUjtra2BAUFsW7dOrP169ato127dnkea2Njg6+vL1ZWVvzxxx/069cPvV7SnAgh7s2tlHTWHL8KYNYEo9fraB/oLoGIEKVIgXtzTZ48maeeeooWLVrQtm1bvv/+e0JDQxk3bhygmljCw8NNuUTOnDnD3r17ad26NTdv3uTzzz/n2LFjLFy4sHDvRAhRrqw7cZWkNAPVKjvS1M/N0sURQtyHAgcjQ4YM4fr167z//vtERETQsGFDVq5cSbVq1QCIiIgwyzliMBiYOXMmp0+fxsbGhq5du7Jz506qV69eaDchhCh/lmU00QxsWjXXPmtCiNKhwHlGLEHyjAghbnctPoU2MzZgMGpseqULAe5Oli6SECIH+f3+lk4bQohS598jVzAYNZr4uUkgIkQZIBmAhBClQmJqOntCbrD9bDR/B6vcIg839bFwqYQQhUGCESFEiffjtgt8svo0qQajaZ2LvTX9m0gwIkRZIMGIEKJE23kumg9WnkTToKqbAx0C3elQy52Otdxxc5RJ74QoCyQYEUKUWDdupTJpUTCaBkNa+PHRoEYyckaIMkg6sAohSiRN03jtr8NExadQs4oT7zxUXwIRIcooCUaEECXST7susf5kFLZWer4e2lxm3BWiDJNgRAhR4pyKjOODlScBmNqnLvV9JL+QEGWZBCNCiBJF0zTeXn6c1HQj3ep6MLJddUsXSQhRxCQYEUKUKCuPRrL34g3sbfRMH9hQ+okIUQ5IMCKEKDGS0wx8mNE882ynmvi4OVi4REKI4iDBiBCixJi7PYTwmCS8XOx5tnMNSxdHCFFMJBgRQpQIUXHJzN50DoDXe9eR0TNClCMSjAghSoRP15zmVqqBpn5uDGhS1dLFEUIUIwlGhBAWdyj0Jn8dvAzA2/3ro9dLp1UhyhMJRoQQFpWcZuCVxYfRNHi4WVWa+1e0dJGEEMVMghEhhEV9vu4M56/dooqzHW/3q2/p4gghLECCESGExey/eIMftl0AYMbDjajoJLPwClEeSTAihLCIpNSs5plBzX3pUd/T0kUSQliIBCNCiGJnMGp8sPIEF68n4uViz9v9pXlGiPJMBvILIYqN0aix8lgEX64/y9moBAA+frQxrg42Fi6ZEMKSJBgRQhSLneejeW/FCU5fjQfAxd6aV3rVoXPtKhYumRDC0iQYEUIUucs3ExmzcD+JqQac7a0Z3SGAp9sHSI2IEAKQYEQIUcQ0TeONZcdITDUQVK0i80a0xNVRghAhRBbpwCqEKFLLDoWz9cw1bK31fPJoYwlEhBDZSDAihCgy0QkpvP/vCQAmdq9FzSoVLFwiIURJJMGIEKLIvLviODGJadT3dmFspxqWLo4QooSSPiNCiEKVlGrgUNhNtpy+xr9HItDr4ONBjbGxkr99hBA5k2BECHHfNE1j7YmrfL/1AofDYkg3aqZtz3SsQSNfVwuWTghR0kkwIoS4Lycj4nj/nxPsunDdtM7LxZ6WAZXoGOjOoCBfC5ZOCFEaSDAihLgnBqPG+/8c5+fdlzBqYGutZ0yHAIa28se3ogM6nc7SRRRClBISjAgh7sk/h6+wcNclAPo28mZK77r4VXK0cKmEEKWRBCNCiHvy255QACZ0DeSVXnUsXBohRGkm3duFEAV2LiqevRdvoNfBk238LV0cIUQpJ8GIEKLAftsTBkC3up54uzpYuDRCiNJOghEhRIEkpxlYcvAyAE+2lloRIcT9k2BECFEgK49GEJuURlU3BzrVrmLp4gghygAJRoQQBfL7XtVx9fGWfljpZfiuEOL+STAihMi3M1fj2XfxJlZ6HY+19LN0cYQQZYQEI0KIfMscztu9rgeeLvYWLo0QoqyQYEQIkS/xyWkszei4+oR0XBVCFCIJRoQQ+TJv+0XiktOp4e5Ep1rScVUIUXgkGBFC3NXNW6n8sO0CAJN71kYvHVeFEIVIghEhxF19t/U8CSnp1PN2oU9Db0sXRwhRxkgwIoTIU1RcMgt3XgTgFakVEUIUAQlGhBB5+mbTOZLTjDT3d6NbXQ9LF0cIUQZJMCKEyFXYjURTkrNXetVBp5NaESFE4bO2dAGEECVPbFIa605c5addF0kzaHQIdKddTXdLF0sIUUZJMCKEMImITeKt5cfZeuYaqQYjALbWel57sI6FSyaEKMskGBFCmLy1/DjrT14FoJZHBfo19mFAUx+quztZuGRCiLJMghEhBABxyWlsPXMNgN/GtKZdoDTLCCGKh3RgFUIAsP7EVVINRgI9KtC2ZmVLF0cIUY5IMCKEAGDl0QgA+jTyllEzQohiJcGIECKjiSYagH6NJcOqEKJ4STAihDBroqnt6Wzp4gghyhkJRoQQ/Hckq4lGCCGKmwQjQpRzcclpbDsrTTRCCMu5p2Bk9uzZBAQEYG9vT1BQENu2bctz/19//ZUmTZrg6OiIt7c3Tz/9NNevX7+nAgshCpc00QghLK3AwciiRYuYNGkS06ZN49ChQ3Ts2JHevXsTGhqa4/7bt29n+PDhjB49muPHj7N48WL27dvHmDFj7rvwQoj7l9lE01eaaIQQFlLgYOTzzz9n9OjRjBkzhnr16jFr1iz8/PyYM2dOjvvv3r2b6tWr8+KLLxIQEECHDh149tln2b9//30XXghxf2ISU01NNH2liUYIYSEFCkZSU1M5cOAAPXv2NFvfs2dPdu7cmeMx7dq14/Lly6xcuRJN07h69Sp//fUXffv2zfU6KSkpxMXFmb2EEIUjJPoW3289z1Nz99BmxgZpohFCWFyB0sFHR0djMBjw9PQ0W+/p6UlkZGSOx7Rr145ff/2VIUOGkJycTHp6Og899BBff/11rteZMWMG7733XkGKJoTIh/CYJB74fAvpRs20roqzHS8/UNuCpRJClHf31IH1zuyMmqblmrHxxIkTvPjii7z99tscOHCA1atXExISwrhx43I9/9SpU4mNjTW9wsLC7qWYQog77DwXTbpRw8fVnjf71mPNpE7sfaM7vaW/iBDCggpUM+Lu7o6VlVW2WpCoqKhstSWZZsyYQfv27Xn11VcBaNy4MU5OTnTs2JHp06fj7Z39l6CdnR12dnYFKZoQIh8Oht4E4KGmVRnTsYaFSyOEEEqBakZsbW0JCgpi3bp1ZuvXrVtHu3btcjwmMTERvd78MlZWVoCqURFCFJ8Dl1QwElStooVLIoQQWQrcTDN58mR+/PFH5s2bx8mTJ3nppZcIDQ01NbtMnTqV4cOHm/bv378/S5cuZc6cOVy4cIEdO3bw4osv0qpVK3x8fArvToQQeYpNSuPM1QQAmvu7WbYwQghxmwI10wAMGTKE69ev8/777xMREUHDhg1ZuXIl1apVAyAiIsIs58jIkSOJj4/nm2++4eWXX8bNzY1u3brx8ccfF95dCCHu6lBGE02AuxOVK0gzqBCi5NBppaCtJC4uDldXV2JjY3FxcbF0cYQo0VLSDVxPSMXHzcFs/edrT/PVxnMMau7LzMeaWKh0QojyJL/f3zI3jRBliNGoMXrBfjp8vJEDl26YbTsQKv1FhBAlkwQjQpQhf+4PY/u5aIwaLNh5ybQ+3WAkODQGkGBECFHySDAiRBkRFZ/MhytPmj6vORbJzVupAJyKjOdWqgFnO2tqeVSwVBGFECJHEowIUUa8/88J4pLTaVTVlfreLqQajCw7FA5k5RdpVq0ien3OCQqFEMJSJBgRogzYdCqKf49EoNfBjEcaMbSVHwCL9oWhaVpWfhF/aaIRQpQ8EowIUcrdSknnzeXHABjdIYCGVV15qGlV7Kz1nL4aT3BYjCQ7E0KUaBKMCFHK/bDtAuExSVR1c+CljAnvXB1s6Jsx38xXG85y+WYSeh008XO1ZFGFECJHEowIUYoZjRqL918G4LUH6+Bom5XH8PFW/gBsOn0NgDpeLjjb2xR/IYUQ4i4kGBGiFNt78QbhMUk421nTq4GX2baW1StSw93J9Dmomlsxl04IIfJHghEhSrGlB1WtSN/G3tjbWJlt0+l0DGnpZ/os/UWEECWVBCNClFJJqQZWHo0E4OFmVXPc55HmvthY6dDpoEW1SsVZPCGEyLcCT5QnhCgZ1p28SkJKOr4VHWhZPedAo4qzHXNHtCQhJR2/So7FXEIhhMgfCUaEKKUym2geaVY1z0RmnWpXKa4iCSHEPZFmGiFKoaj4ZLaeUaNkHm7ua+HSCCHE/ZFgRIhSaEXwFYwaNPd3I+C2ETNCCFEaSTAiRCm05KCac+YRqRURQpQB0mdEiFLixq1Udp6PZsvpa5yMiMPWSk+/xt6WLpYQQtw3CUaEKOFS0g2MWbif7eei0bSs9X0aeeHmaGu5ggkhRCGRYESIEm7t8atsOxsNQB1PZzrUclevQHcLl0wIIQqHBCNClHB/7g8DYELXQF7pVcfCpRFCiMInHViFKMEu30xk+zlVK/JYC7+77C2EEKWTBCNClGB/HbiMpkG7mpXxrywZVIUQZZMEI0KUUEajxuL9Ksvq7RPeCSFEWSPBiBAl1I7z0YTHJOFsb02vBl6WLo4QQhQZCUaEKKEW7VMdVwc2rYq9jZWFSyOEEEVHghEhSqCYxFTWHr8KSBONEKLsk2BEiBJo+aFwUg1G6nm70MDHxdLFEUKIIiXBiBAljKZp/JHRRDOkhS86nc7CJRJCiKIlwYgQJczWs9GciozHwcaKgc2qWro4QghR5CQYEaKEmbP5HABDW/nL3DNCiHJBghEhSpCDoTfZfeEGNlY6xnQMsHRxhBCiWEgwIkQJMnvTeUAN5/Vxc7BwaYQQonhIMCJECXHmajzrT15Fp4NnO9e0dHGEEKLYSDAiRAnx3WZVK9KrvheBHhUsXBohhCg+EowIUQKE3Ujk78NXABjfVWpFhBDliwQjQliYpml8se4MBqNGh0B3Gvu6WbpIQojyxpBu0ctLMCKEhX235QJLD4Wj08GL3WtZujhCiPJE0+DQL/BtS7gVbbFiSDAihAWtOHyFj1efAuDtfvVpFVDJwiUSQpQI6Smw7m3Y9jnEXy348cmxkHor733iIuC3x+Dv5+HGBdjz3b2VtRBYW+zKQpRzey5c55U/DwMwqn0AT7eXvCJCiAwHFsKOL9Xypg+gbl8IehpqdIG7TRERFwFz2oFdBRi9Hpw9zbdrGhz5E1a9qoIWKzvoNg3aTiiSW8kPqRkRwgJCom8x9ucDpBqMPNjAi2l961m6SEKIksJohD1z1LKrPxjT4cTf8PNA2Pv93Y/f8B4k3YCYUFj0JKQlm5/7v5dh2VgViPg0h2e3QvuJoLcqktvJDwlGhLCA9/85TmxSGs383Zj1eFOs9DIZnhAlQnoqbP4Yrh7P3/7HlsKBBaq2obCcXauaTexdYfwuGLcDGg5S2w7+nPex4Qfg8O9q2c4FLu+Dfyaq8hnSVBCyfy6gg65vwuh14FG38Mp+j6SZRohiduDSDTadvoaVXscXjzXF3sZyf40IIe5w+DfY/CGc3wCj1+a978Ud8NfTavnGBXjg/cIpw+7Z6r35CNXU4tUQen+iAp+rR1UfkjubXkAFHKunquUmQ6HxEPhlEBz5AyoHwpWDcHol6K3h4f+DRo8WTnkLgdSMCFGMNE3jk9WnARgc5Et1dycLl0gIYeby/qz35Njc90tPhX9fyvq840vY/sX9X//qCQjZAjoraDU2a72TO3g3UcsXNuV87PGlELYHbByh+9tQsys8+JHatmm6CkSs7ODx30pUIAISjAhRrLafi2ZPyA1srfQyjFeIkigiWL1rBlXzkZtdX0P0aXB0h86vq3Xr34X98+/v+pl9Rer1Azc/8201u6n38xuzH5eWBOveUcsdJoOLj1pu9QwEjVTLthVg2F9Qu9f9lbEISDAiRDHRNI3P1qhakSfb+MtEeEIUluiz8ElNWPvW/Z0nLRmiTmZ9vrA55/1uhMCWT9Ryrw+h6xvQ8WX1+d+XVA3JjZCCX/9WNBxepJbbjM++/fZgxGg037bzG4gNAxdfaHfbqBidDvp8BgPnwDObIKBTwctVDKTPiBDFZN2Jqxy+HIujrRXjuwRaujhClB17v4fEaPXe+TWwc76381w9rkauZMopGNE0WPkKpCerL/bGj6n13d6CxBtwYL6qIVn/LlSsDgGdVRNLJjsXaD4cHHPIKXRgPhhSwKcZ+LXOvt2vNdg4wa1rcPUYeDdW65NisoYBP/Ae2Nzxh46VDTR9Il+PwFIkGBGiGBiMGjPXngHg6fbVqeJsZ+ESCVEE4q/Csb/AoRJUClBfxhU8754X436kp8LRvzKWk+Hkv9B06L2dK+KQeq8aBOEHVTNM3JWsJg+AE8vh3HqwsoW+n2fdm04HfWeCe204uUKNYrl5Ub3utH+e6rfh1TBr3aVdsDujiabN+JyfmbUtBHSEM6tVB9vMYGT/XEiNB4/6WaNuShkJRoQoYmkGI1OWHOX01Xic7a0Z21EmwhNl1KbpcPAn83WufjD0d/BqVDTXPLtG5dTIdHTxvQcjVzKCkRpdQTOqzxe2ZJ3PkH5bv4yXwP2Ofl96K2g7Xr1S4lWfk9BdKptqpjOrVIAy9wHVdFK7F2z4X8YIGg3c60D9gbmXsWb3jGBkoypDWjLszsic2n5i0QZ+RUiCESGKUFKqged/O8jGU1FY6XVMH9gQV0cbSxdLiKIRoTIK49kQUuIg9rLqx/DzIzBqNVQugkA8OCOnRr3+cPIfNdIkIQoqeBT8XFcyyu/TVHVgvXJINdVkBiMnlkPMJXCsDO0n5X0uO2eo86B63a7za2o48IXNsHgEOHtDfITa1myY6oNibZv7eTP7jYTuVunej/wJt6JUX5FSWisC0oFViCITk5jKkz/uZuOpKOxt9Hz/VBADmla1dLGEKBpGI1xTTZEMXgiTjsJrF8Czkfqy/HmgavIoTLeiVc0IQNdpULWFqtE4trTg50pLgqgTatmnmUq7Dipo0DT12jFLrWv1LNg63luZHSvBk0uyUq/HR6iA5InFMOBblegsL5Vrgps/GFIhZBvs/Eqtb/u86htSSkkwIkQRSDMYGfrDHg6GxuBib82vY1rTvV4OSYqEKGliw+H4ctXMUBAxlyA9SfWlqFhdrXOoCE8thUo1VGrynx9WnTwLy9HFqsOpTzPwqAeNBmetL6irx1VtiKM7uFQFvzZgbQ8JkXDttGoWiTyqcni0eub+ym1lDb0+gCG/QqfXVJbV2j3zd6xOl1U7snZaRqZWN9UpthSTYESIIrDr/HVORsThYm/N4nHtCKoms/GKUiA9FX56SDUffFYHVryY1Y/ibq6pYetUrqW+bDNV8ICnloOzD1w7pWaJNaRnPz6zI+qZtWqo7u39LHIT/Jt6b5IxUqThI6DTQ/h+uH4+f+XOlHmfPs3UF76NPfi3UesubM4ardJ8RM4jYe5FvX5qgjqHigU7rmZ39X79nHpvNVZlai3FJBgRogisOhYJQL8mPtTxusdhhkIUt73fZ3zB6SDtFhxcCN93gV8Hq3lN8nLtlHrPaZ6TitXgqWWqCeLyvpynql/9OiwZDb8Nhm9awHRP+LpFVtPPna4eh8gjoLfJyiZawSOreeXYknzc8G2uBKt3n6ZZ6zLPte+HrKyobZ8v2HmLQkAnFXQBWDtA62ctW55CIMGIEIXMYNRYe1wFI70belm4NELk063orERe/b+EkSuh4aPqy/7s2rv3w8isGamSy6RrHnWh5wdqedOHqnNrpvMb1XBXAI8GKpcGGlw/qwKinGTWitTuZV5T0Sgj78eRP1U/j9A9sGwcfNkEZjXKev0yCFITs47LzLzq3TRrXWYwklkD0ejR7FlRLcHBTfWPAdXp9fY8JqWUBCNCFLK9ITe4fisVN0cb2tSobOniCJE/mz6AlFjwaqy+4Kq3h0fnQpcpavuOL/OemfZaRubSKnVy36fpk+DfVtW6rMpIoZ4cC39ndOZsNRbG74Q3wtWwV1A5Pe5kSM/qF3JnMq+6fVVfj+tnVQ3LvJ5qFtubF1W/lczXufWwNSP4SkvKyrzq0yzrXF6NzZtQ2k/M/d6K24MzoMVolf21DJBgRIhCtuqYGqb3QD1PbKzkv5goBa4ehwML1PKDM1S+jEwtR6s5TaKOw9l1OR9/+0ia3GpGAPR66PeFmjX21L9waiWsfgPiwlUn1x7vqv10Oqj9oGqKuHYKYsLMz3NxGyRcVcnVAh8w32bvoo4FVaNh7aCCoKeWwZgN6tX3c7V959cqCIk8pjqvOlUxT3Cmt8pKn16rJ3g2yP3eiptvC+j3eeH1X7EwyTMiRCEyGjVWZ/QX6dPI28KlEWVGUgyseEHl0shMP36vbl6Efydn9K/oCjU6q2nnNSPUewiqdzDf36Gimmht1zeqdiSnUR9xl1Vth95GBRV58agH7V5Q87csfw6SYwAdDJgNtrfNYu1YCXxbqlloz62DFqOyth3PaDKq/1DOOTm6v60CGb/W0GRI9g6ivi1UzcjplWoumQYPq/WZnVdv13mKGiFURmogSqp7+rNt9uzZBAQEYG9vT1BQENu2bct135EjR6LT6bK9GjQoQRGmEIXkYOhNouJTcLa3pl2gNNGIQnJwoUoxvvJVlXHzXqWnwJ8jVCrxw7/DsrEws47qnGllCz3/l/NxbcarQOPSdri8P/t200iawPzluuj0msqVkRyjPrd9Hqq1zb5fZq3H2duaagxpKrkZQINHcj5/5ZoweD60GZf7SJXen6hhuqG7YFtGTcnt/UUyedaHQT/ePcgS96XAwciiRYuYNGkS06ZN49ChQ3Ts2JHevXsTGhqa4/5ffvklERERpldYWBiVKlVi8ODB9114IUqazFE0Pep5YmdtdZe9hcin48vUe3JM1hfxvVj3juqo6VAR2r0I3k2AjJqAdi9m5Qe5k2vVrBqZ7V9k3x6Vj/4it7N1zGgq0an0593ezHm/Wj3Ue8gWNfQXVHr2pJuqSaVa+/xdLyduftBlqlpOUP9vzfqLiGJV4GDk888/Z/To0YwZM4Z69eoxa9Ys/Pz8mDNnTo77u7q64uXlZXrt37+fmzdv8vTTT+d6jZSUFOLi4sxeQpQ01+JT+G1PKNEJKh+CpmU10cgoGlFoblwwz/WR2+iSuzn5L+zJ+D098DtVC/LsVnj1PIxaqzKY5iWz8+ap/1QekNtl1ox41Mt/eWo9oJJ9jV6TfZbZTF5NwMkDUhNUDQZkBWb1B5jnM7kXbZ5Tqesz3T6sVxSrAgUjqampHDhwgJ49zdsMe/bsyc6dO/N1jrlz59KjRw+qVauW6z4zZszA1dXV9PLzKwFDqYS4w9t/H+ONZUfp+ulmvt96nv2XbhIek4SjrRWdalexdPFEWXF8uXr3aADoVOfNgib0igmFv8er5bYTzOdLcaoM/q1V59K8VKkDdfoAWlYCsEyZOUbyWzOSyaNe3gm/9HoIzKgdObtW1Y6cymyiebhg18qJlY3qUKuzUk1MztLPy1IKFIxER0djMBjw9DRPa+3p6UlkZORdj4+IiGDVqlWMGTMmz/2mTp1KbGys6RUWFpbn/kIUt9R0I1vOXAMgPiWdD1ee4skf9gDQra4H9jbSRCOAW9fvr48HZNUEtB4LgRmZNw/9kv/j01Pgr9FqCG3VIOj+zr2XJbN25MifWWndNe3uOUbuR2ZTzbn1ahK85Fio4KWGCBcGv1bw3E4Y8U+pnfG2LLinDqy6O/7BNE3Lti4nCxYswM3NjYEDB+a5n52dHS4uLmYvIUqS/ZdukJhqwL2CHZ882pgqznakGowA9G4of10JIPocfFEfFj157+e4fl5lGdVZqZEumfOPBP9qnlL97Do1QubOIbCGdJXV9PJesHOFR+flPSPs3fi1Vv1MDClZAVFcOKTGq+G6lYpgVt4aXbOG+O78Wq2rP8B8+PH98qhrPqRXFLsCBSPu7u5YWVllqwWJiorKVltyJ03TmDdvHk899RS2tvfxn0GIEiCzVqRTbXcea+HH5le6MPmB2ozuEEDPBjIhnkA1J6Qnq7/oIw7nva+mqQyot2cEhawhrDW6qKGutXuridwSrqpmC1BBwW+Pwf65KnX7xR1Z5/xnourwamULQ37KvYNqful0KtEWqOsZjVlNNJVq3l+gk5vMIb6gmqhAzUEjypQCBSO2trYEBQWxbp154pt169bRrl27PI/dsmUL586dY/To0QUvpRAlzNYz0QB0zugb4mRnzYvda/FWv/qS6EwoFzZnLe+bm3371RNqmO2cDjDDDz6tCZ8GwulVWfscy2iiyfzytbaFpkPV8sGfYPcc+Pt5lSPEoRIkRquJ7vb+AGvfhOBfVK3Co/OyUpvfr0aPqlqWmxdVGndTE00B+4sUxO2JzZx9wLdV0V1LWESBf2tOnjyZH3/8kXnz5nHy5EleeuklQkNDGTduHKD6ewwfnn0q47lz59K6dWsaNmyYbZsQpcnVuGRORsSh00GHwNI/J4QoAmlJcGlX1ueji1VfB9P2ZPj9cTixHK4eVc0coBKH/fEkHFmsvuSjjqv8HnX7Zh3bLOP365lVsDojVXvbCfDSMTWXjDEdVr6ikpQBPPS1SpZWWGydslKw7597W+fVIugvkimz3wiojqt362wrSp0Cj4saMmQI169f5/333yciIoKGDRuycuVK0+iYiIiIbDlHYmNjWbJkCV9++WVOpxSiVNma0UTTuKorlSvYWbg0okQK26P6VTh7q5lqr52Cw39kza66Zw7EXFJ/5fefBRUDVC6PfyfDkT9g6TNZTRM1u5mPOKlSW3XezBzq2nUadHpVNaEM+hG8G8P6d1VtSa8P1Twzha3FKHUPZ1aDa8Zox6KsGfFqAi6+KtNro0FFdx1hMfc0SHv8+PGMHz8+x20LFizIts7V1ZXExMTsOwtRCmX2F+ksw3dFbjKbaGp0USNYVr6immpajYWEKNj6mdre410162ymgXPArgLs+1F1OoWch7B2ehVWvKhGt7Qem7Vep1PrqndUo11ur1EoTFVqqzlbQraqoAoKlmOkoPR6eGopxF1Rz1OUOTI3jRAFYDBqbD+n+otILhGRq9uDkTp9VObT6NNwcTscWaSSeFUNgkZ3ZKLW66HPZ2DnAts/V7PP1u2T/fyB3WHy8dyvX7V5Yd1J7lqOUcEIqH4plQOL9npV6hRt7YuwKAlGhCiAI5djiElMw9nemqZ+bpYujiiJEm/AlWC1HNBZzSLb+DE4MF91Ks0cWfPgRzn3fdDpoMc7KlhxqKiaeUqiOn1Uvo+ESDVvi7U0WYp7J72AhCiAzCaajrXcsZZRMyInF7cBmurQ6ZKRc6ZlxijCiGC1reGjKtlWXur1g+r3MfdKUbOygRYZ03p4NbZsWUSpJzUjQhSA9BcRd3V7E00mr0bg1wbCdoO1g+orUhZ0mAyOlaH2g3ffV4g8yJ92QuRTTGIqh8NiAOkvIvKQGYwEdDZf3/lVNUy3+9tqxtiywNoWWj1Tdu5HWIzUjAiRT2uPX8WoQW3PCni75jLLqCjfYkLVLLs6q+xNLIE94K1rMv+JEDmQmhEh8iEk+hb/+/cEAP0ayxwWIhcXtqj3qkE5dzyVQESIHEkwIsRdJKam89wvB4hPSadFtYo816UIJgMTpUPSTZUdNT015+059RcRQtyVNNMIkQdN05i69CinIuOp4mzH7Ceby9wz5VVqIvw0QA3NjTwCPf9nvt2QDiEZNSMSjAhRIPJbVYg8/LTrEn8HX8FKr+PbJ5rj4WJv6SIJS9A0WP5cVo6Qvd9DbLj5Pgfmw61rasK6zFTuQoh8kWBEiFycuRpv6ifyRp96tAqoZOESCYvZ8oma1E5vDZVrQXoybPk4a3vSTdj0gVru+oYaZSKEyDcJRoTIxedrz5Bu1OhRz4NR7atbujjCUk78DZs/VMt9P4cBGbPhHvoFos+q5S2fqICkSj0Ietoy5RSiFJNgRIgcHAuPZfXxSHQ6eO3BuuhkFET5dPUELBunlluPg6AR4N8GavcGzQAbp6uAZO/3ap8HPwQr6YonREHJ/xohcvDFujMAPNTEh9qezhYujbCI9FRYNhbSElWH1J4fZG3r/hacWa2abm6cB2O6ykJas5ulSitEqSY1I0Lc4VDoTTacikKvg4nda1m6OMJStn0GkUfVZHUPf29e4+HZABoPUcuRR1Vfkp7TLVNOIcoACUaEuMPnGbUijzT3pUaVChYujSh0KQlw7XTe+1wJhq2fqeW+M8HZM/s+Xaeq9O4ArcaCuwSuQtwrCUaEuM2+izfYdjYaa71OakXKqsUj4dtWsPkjNWT3Tukpqp+IZoD6A6HhoJzPU7E69PkEGjwCXaYUYYGFKPskGBHiNjPXqr+YB7fww6+So4VLI3J1YCGsfxeMxoIdd/MinFunljfPgDXTsgckm2fAtZPgVEWNnslLi1EweH7Oqd+FEPkmHViFyBAcFsPuCzewsdLxQrdASxdH5CYlHv6brDqNBnSGml3NtyfHwtq3oOEj2TOhHl6k3it4QUIk7P4WUuPhwY/gxAqVuCxsj9qn3yxwqlzUdyOEQIIRIUwW7rwIQP/GPvi4yay8JdbF7SoQATi5Inswsvd7OLhQjXaZeBhsMv4tNQ0O/66WH3gPjAZYMQEO/gSH/wBDxnwzOito/yLU61c89yOEkGYaIQCi4pP598gVAEa0q27Zwoi8nduQtXzyXxVUZNI0NZEdQMJV1ZyTKXQ33AwB2wpQrz80exIena86oRpSwdUfur0Jk09Aj3eL5VaEEIrUjAgB/LYnlDSDRnN/N5r4uVm6OCL+KuyYBW2eAzd/823nN2Yt34qCsL1Qra36HHkEom8bKbNjFgSNBBt7OPybWld/ANg6qeUGA6FyICRGQ/WOoLcqmvsRQuRJakZEuZeSbuCX3aEAPN0+wMKlEQBs/wJ2z4aVr5mvv3lRJRnTW0OdvmrdyRVZ249m1IrU6QMuvhAfoZph0pLg+HK1rclQ83N6NVR9SyQQEcJiJBgR5d7KoxFEJ6Tg6WLHgw29LF0cAXBpu3o/uxbiIrLWZ9aK+LaCpk+o5ZP/qOYZowGOLlHrmj4BHV9Sy9u/gGNLISVONcVUa1889yCEyDcJRkS5pmka83dcBOCpNtWwsZL/EhaXHAuRx9SyZshqXoGs/iI1u0Fgd7BxgtgwuHIILu2A+CtqmG2tntDsKXD2UetWZdSwNHkc9PJvLERJI/8rRbl2KCyGI5djsbXWM7SV/90PEEUvdA9wW+6Pgz+rfCKGdAjZqtYFdlOjZGo9oD6fXJHVRFN/AFjbqVeHjNqR1AT13uTxYrkFIUTBSDAiyq3YxDQ+WX0KgAFNfKhcwc7CJRIAhO5U7w0eATsXNQLm0nYIP6CaWhwqgndTtU+9/ur9+HI48bdabjQ461zNh4Ozt1r2awOVaxbHHQghCkiCEVEu7TwfzYNfbjUlORvdUTqulhiXdqn3wB7Q6FG1fGAhnM9ooqnRNauzae1eYGWnApbkWNUsU61D1rls7KHXB2DvBh1fLrZbEEIUjAztFeVKarqRmWtP8/22C2gaBLg7MWtIU+p6uVi6aALUqJfwA2q5WlvwrA/756lmmEo11Pqa3bL2t3NWn8+sUp8bDcreJ6ThoNznlxFClAhSMyLKlff+Oc7/bVWByOMt/fj3hQ6SV6QkCT8AxjTVtFIxQDXHeDVSScmuqSY1s2AEsppqwLyJRghRakgwIsqN41di+W2vyify1dBmfDSoMU52UjlYolzK6C/i3xZ0OvVqPiJre5W64FrV/Ji6fcGtmmq+8WpcfGUVQhQaCUZEuaBpGv/79wSaBn0be/NQEx9LF0nkJDMYqdYua12jwWBtr5bvrBUBcHCDSUdg+HIVvAghSh0JRkS5sPbEVXZfuIGttZ6pvetaujhlS1oSRJ2E06tUttPEG/d2HkO6Su0O5sGIgxu0ekbNIdN4yH0XVwhR8kgdtSjzUtINfLjyJABjO9bAt6KjhUtURsSGw6JhcOWg+frzm2Dw/LyPTU+FP55QuUAe+QFsHSHyMKTdUiNfqtQz3/+B/0G3t8HatlBvQQhRMkjNiCjzFuy4yKXriXg42/FcF8kzUSg0DVZMyApE7FxVR1NQI19uT+GekxN/w7l1cOpf+HO4Ck4yh/T6t8k+Ikank0BEiDJMghFRpl2LT+HrjecAeO3ButJhtbAcWKDmibG2h3E7YMolGLdddTw1pqvmmtxoGuz+NuvzuXWw7Fm4mDEfze1NNEKIckGCEVFmaZrG1KVHSEhJp1FVVx5pVvXuB4m7u3kJ1r6plru9pWa9zew42nKMej+wQPUByUnYXjWXjLU9PPy96gtyfGlWrhB/CUaEKG8kGBFl1k+7LrH+ZBS2Vno+HtQYvV5GWtxVWjKE7la1FzkxGuHv59VcL/5toc1z5tvr9QdHdzU5XWZwcafds9V748egyRB45P+AjH8bawfwblIotyKEKD0kGBFl0smIOD7I6LT6Rp+61PeRDKv5svF/MK9XVsBwp30/wMVtYOMIA2dnpWXPZG2n5oMB2Pdj9uNjQlWfEoDW49R7w0HQd6ZarvWA9A0RohySYESUOUmpBl74/RCp6Ua61/VgRLvqli5S6aBpcCIjUNj9HRgN5ttvXYf176rlB97PSs9+p6CRgA4ubIboc+bb9v4AmhECOoNng6z1LUfDxCPwyPf3fx9CiFJHghFR5rz/7wnORSXg4WzHJ482RieJsPLn+nmIVRlqiQ2Fc+vNt+/9P0hLVM0oLUbnfp6K1dQEdqDmlcmUkgAHF6rlNuNzPs7G4d7LL4QotSQYEWXK3pAb/L43FJ0OvhjSlMoV7CxdpNLj/Ebzz7c3s6Tegr0ZtRYdXso+9PZOmR1Zg39RNSQhW2HbTDWzbqUaUKtnoRVbCFH6yThHUWZomsbMtacBeLylP+0D3S1colImMxhpPlwNzT27Dm5ehIrV1eekm2ryunoP3f1cNbur+WJiLsFPA8y3tX7u7sGMEKJckd8IoszYef46e0JuYGul54VugZYuTumSnqo6pgK0fCZjDhgN9s8HQxrsysgL0u6F7J1Wc6LXw4MzVCK0KvWyXrV7Q7Mni+w2hBClk9SMiDLh9lqRJ1r74+MmfQ9ylXhD9c24vX/G5b1quK5TFfBsqPqEnN8Ih35WzSqxYWpb0yfyf526fdVLCCHuQmpGRJmw+cw1DobGYGetZ7ykfM9d3BWY1Qjm9zZPSnZug3qv2U3VatR+EFyqQuJ1WPWa2tZ6nHQwFUIUCQlGRKmnaRqfrz0DwPC21fBwsbdwiUqwM6tVDciVQ+YjXTL7i9Tspt6trCHoabWcngy2FdTwWyGEKAISjIhSb+2JqxwNj8XR1opxnaVWJE8XNmctb/5QNdncioaIw2pdja5Z25sPB31GS27QSHCoWFylFEKUMxKMiFLtYvQtZmRkWh3ZrroM5c2L0aCG2IIKLJJuwpaPMwIUDTwbgbNn1v7OntDpVajaAtq9aIkSCyHKCQlGRKn1d3A4/b7ezsXriVRxtmNsp1wyggol8ogKQGyd4ZGMHCJ7f8jKJ1Kza/ZjukyBZzaYBylCCFHIJBgRpU5SqoEpS44w8Y9gElLSaVW9EismtMfNUeY0yVNmE01AR6jVA+r0Ac0AobvU+sDuFiuaEKJ8k2BElDqvLD7MH/vC0OnghW6B/PZMa7xdZZTHXWUGIzW6qPee00Fvo5atHcCvjSVKJYQQEoyI0uXyzURWHosAYP7Ilrzcsw7WVvJjfFdpyRC6Wy1nBiOVa0LrZzPWdQYbGYUkhLAMSXomSpU/9oahadA+sDJd6nhYujiWdyMENk5Xk9o98gPUzmXOl7A9aoiusze4185a3/1tqBQgc8UIISxKghFRaqQZjPyxLwyAJ1tXs3BpLCzhGmz9VOUKMaapdTu/yj0Yub2J5vZZjK3tsia1E0IIC5FgRJQa605cJTohhSrOdjxQvxyP7rh2Gn58AFJi1efqHdW8Mhe3Q/zVnEe+3NlfRAghSpB7amyfPXs2AQEB2NvbExQUxLZt2/LcPyUlhWnTplGtWjXs7OyoWbMm8+bNy/MYIe70655LAAxp4YdNee4nsuNLFYhUqQfD/4aR/4JvS0CDE39n3z/ppsq4ChDQuViLKoQQ+VHg3+iLFi1i0qRJTJs2jUOHDtGxY0d69+5NaGhorsc89thjbNiwgblz53L69Gl+//136tate18FF+XLhWsJ7Dh3HZ0OHm/lZ+niWE7iDTi2RC0/9FVWTUeDh9X78WXZjwnZBmjgXgdcvIujlEIIUSAFbqb5/PPPGT16NGPGqHbmWbNmsWbNGubMmcOMGTOy7b969Wq2bNnChQsXqFSpEgDVq1e/v1KLcue3PSrY7VbHA9+KjhYujQUF/6Y6ono1yqgNyVB/IKx5Q+UMibsCLj5Z26SJRghRwhWoZiQ1NZUDBw7Qs6d5J7mePXuyc+fOHI9ZsWIFLVq04JNPPqFq1arUrl2bV155haSkpFyvk5KSQlxcnNlLlF/JaQb+OngZgCfb+Fu4NBZkNML+uWq55RjzjqiuVTPyhNzRVGNIVyNtQIIRIUSJVaCakejoaAwGA56e5h3kPD09iYyMzPGYCxcusH37duzt7Vm2bBnR0dGMHz+eGzdu5NpvZMaMGbz33nsFKZooQy7fTOT5Xw9yIzEVgNR0IzGJaVR1c6Bz7XI8nPfCJrhxAexcoNHg7NsbPgJhu+HYUmjznFq3eQbEXFLHVO9QvOUVQoh8uqdegLrb/yJDTeF+57pMRqMRnU7Hr7/+SqtWrejTpw+ff/45CxYsyLV2ZOrUqcTGxppeYWFh91JMUUp9se4shy/HEnYjibAbSVyNSwHg6fbVsdLn/HNWLuzPCN6bDAVbp+zb6z0E6ODyXogJg/MbYdtMta3fF2DvUmxFFUKIgihQzYi7uztWVlbZakGioqKy1ZZk8vb2pmrVqri6uprW1atXD03TuHz5MrVq1cp2jJ2dHXZ2MvtqeXTp+i2WB4cD8PXQZlStqNK8O9hYUcfT2ZJFs6zYy3B6pVpuOTrnfVy8oVo7uLQD9n4Ph38HNAgaCY0eLa6SCiFEgRWoZsTW1pagoCDWrVtntn7dunW0a9cux2Pat2/PlStXSEhIMK07c+YMer0eX1/feyiyKMu+2XgOg1GjS50q9G/iQ3P/ijT3r0g9bxf05blW5MAC0Iwqp0iVOrnvlzmqZudXcOsaeNSHBz8qliIKIcS9KnAzzeTJk/nxxx+ZN28eJ0+e5KWXXiI0NJRx48YBqoll+PDhpv2feOIJKleuzNNPP82JEyfYunUrr776KqNGjcLBQSY3E1nCbiSy9JCqFXmxe/YaszLt+HL4aSDs+R6SY7PWG9LUtv3z1efcakUy1R8Auoz/1jaOMHgB2Mj/MyFEyVbgob1Dhgzh+vXrvP/++0RERNCwYUNWrlxJtWoqPXdERIRZzpEKFSqwbt06XnjhBVq0aEHlypV57LHHmD59euHdhSgTvt2kakU61nKnuX9FSxen+CREwd8TIDVedVJd9zY0HAQVqsChX+FWlNqvYgDU7Zf3uSp4QO0HVZNO38/zrkURQogSQqdpmmbpQtxNXFwcrq6uxMbG4uIinfDKorAbiXT9bDPpRo0lz7UlqFolSxep+Kx4EQ4uhMqBYGULUSfMt1fwhGZPQauxOad6v1NKAsRHgHs5q10SQpQ4+f3+lrlphEUYjRrRCSkkpxlJSTcwZ/N50o0aHQLdy1cgEnEEDv6klgd8C36t1Qy7B39SzTWNH4M6fcDKJv/ntKsAdhKICCFKDwlGRLHSNI01x68yY9VJLl1PzLZ9Yo9y9CWqaSprKho0eAT826j1/m2yloUQohyQYEQUmxNX4vjfvyfYdeE6oBKIOthYYWetx97Gigfqe9KyeimuFTnypxpW23ZC/ppITv2rZtu1soMHJMmfEKL8kmBEFIqYxFTeWHaUjrWqMLRV9pTt/7flPB+tPoWmgZ21nrGdajCuc02c7MrIj6CmweopkHgdDv4MzZ+CzlNyn5guPQXWvqmW270AbuU4zb0QotwrI98EojjsvnCdyNhkBjT1yZZx99M1p1l5NJKVRyOp5GRLrwZepm1rjkcyY9UpAPo29mZq77plb7K7+AgViABoBpUX5PAi6PQKdHzZfB4ZgE0fws2LUMELOrxU3KUVQogS5Z7SwYvy5catVCb9cYjHv9/NpEXBLNh50Wz7qcg4ft+bNZz7pUXBnIxQkxuevRrP5EXBgErn/u0TzcteIAJw9bh6r1IXnl6tOqKmJ8HG/8GWj833PbIYdsxSyw/OUB1OhRCiHJNgpBw7F5XAtGVH+e9IRI7bNU1j+aFweny+heXBV0zrZ6w6xenIeNM+//v3BEYNetb3pH1gZRJTDYxZuJ+Q6FuM/fkAt1INtKlRiTf61CuW+7KIq8fUu2cDqNYWRq2BXjPUus0zYPd3ajn8AKyYoJbbT1KT2wkhRDknzTTlUExiKrPWn+Xn3ZcwGDWWHQqnU213nO3Nh49+teEcX6w/A0BdL2dmPNKILzecZfPpa0z84xB/T2jPtjPR7Dh3HVsrPW/1q4+zvTUDv93BxeuJ9Jq1ldR0I1XdHPj2iebYWJXh2DfytmAEVLNM2/GQmgCbPoDVr4MxDXZ9C+nJKjFZ97ctV14hhChByvC3g8jJ38HhdPlsMwt2XsRg1LC30ZOYamBZRhr2TPHJafyw7QIAL3QL5J8XOtDMvyKfPNqYSk62nIqMZ8bKU3yw8iQAozsG4FfJETdHW34c0QJnO2tS043YWev5v6eCqFyhjE98mNlM49nIfH2nV6HNeLW89k3Vt6RKPXjkB9BbFW8ZhRCihJJgpBy5Fp/C5D8PE5OYRh1PZ34Z3ZqpvVXTyc+7LnF7Mt5F+8JISEkn0KMCkx+obarV8HC255NBjQFYsPMiIdG3cK9gx/guNU3HBno4891TQTT3d+Proc1oWNWVEkvTwGjI376pt2D7FxATZr4+PQWiVQ2SqWYkk04HPT+AJk+ozw6VYOjvYC+ZhIUQIpMEI+XI+pNXMRg1Gvi48N+LHehQy52Hm1fF0daKs1EJ7Am5AUC6wWjqpDqqfUC2kTM96nvyROusoaiv9qqdrYmnfaA7S8e3p+dto2pKnPQU+ONJ+DgA9v4ARmPe+2/6ENa/C2unma+/dkqNoHGoCC4+2Y/T6+Ghr1VtyJj1UCmg0G5BCCHKAglGypE1xyMB6NPIG+uMmg4XexsGNK0KwM+7LwGw9sRVLt9MoqKjDY80r5rjud7sW4+Otdzp3dCLR4P8iqH0hcxogCVj4PR/kBILK1+BnwfAzUs575+WBId+UcvnN4MhPWubqYmmYfYhvJmsrFVq98o1c94uhBDlmAQj5UR8cho7z6k8GL0amE+2NqyNquVYcyySqPhk5m4PyVhfDXubnPs1ONpa8/Po1swZFoSVPpcv4JJK0+CfiXByhZqYru0EsHGEkK0wpx0E/5b9mGNLITlGLafEqlExme7svCqEEKJAJBgpJzadvkaqwUiNKk4EejibbWvg40pzfzfSjRrTlh3jwKWb2FrpeaptNQuVtoitfwcO/Qw6PQyaC70+gHHbwb+tGv2y/DkI3WN+zP656t0qoyPu+Q1Z20zDehsWfdmFEKIMkmCknMhsoumVSx+OzMBj3YmrAPRv4oOHs33xFK447Z8HO75Uy/2/gvoPqeXKNWHkf9B4iPr870tgSFPL4QdVTYiVLXSZotad36jeNc08x4gQQogCk2CkhEtNN7Ls0GX+3BeG0ajd/YAcJKcZ2HwqCsg9GOnd0JuKjlmdUEd3KIOdLFMTVSdUgG5vqfljbqe3UonKHCpB1HHYPVutz6wVqT8wK1gJPwBJNyHhqkoDr9ODRxlO6iaEEEVIgpES6lZKOnO3h9D50028tOgwry05woj5e7kWn1Lgc+08H82tVANeLvY0zmWYrb2NFY+1VB1R29WsTH2fMjj0dP88uHUN3KpB+4k57+NUGXpOV8ubP4LIo3B0ifrccjS4VlUp3zUjXNiSVStSORBsHIr+HoQQogySDKwl0F8HLjP9vxPEJKpmAg9nO+KT09l2NpreX25j1pCmdKjlnu/zrTmmml56NvBEn0dn00nda+PuZEe/JrnMNFuapSVlNc90fBmsbHLft+kTEPwrXNoBC/qpOWY8G6r5ZgBqdlPDec9vUEEISBONEELcB6kZKWF+2xPKK4tVYrLqlR2Z8Ugjtr3elRUT2lPH05nohBSemreH9/45TlRcstmxyWkGft1zied+OcCm06pZxmDUWH9SBSO5NdFkcrC14plONfB2LYN/4R9YALeiwNUfmgzNe1+dDvp+DnqbrBE0LUdnDdut2V29n98kI2mEEKIQSM1ICfLH3lDeWHYUUH023uhTzzRstpanM39PaM97/5zg972hzN9xkV93hzIoyJdhbfzZdjaaudtDTM04q45F0qVOFXo18OL6rVRcHWxoFVDJYvdmUWnJsH2WWu44Gaxt736MR11o/yJsmwm2ztDosaxt1dqpzqyxYXBWTRiYLQ28EEKIfJNgpLhcOwO2juDqm+PmP/eHMTUjEBnVPoA3+9bLlvnU3saKGY80olcDT77ZeI79l27y+95Qft8batrH29WedjXdWXE4nM2nr7H59DUAutf1KDsT1R38CY4tgYf/D5zzkeH14EJIiAQXX2j6ZP6v0+lVlaXVrzXYVchab+uohgGHbMmqOZGaESGEuGcSjBSHhGvwfReo4AEvHjLL0nktPoXvtpxn3o4QNA1GtqvOW/2yByK361LHgy51PNh38QazN51j0+lr1KzixLjONRnQtCq21nomdAvkg/9OmppoejcqI/1AkuNg9RuQGg87voIHP8x7/7RkNZ8MQMeX8lcrksnGQeUgyUlgdxWMANi75hpkCiGEuDsJRopD+H5IuwU3Q9RQUGcvriek8H9bL/DzrkskpamJ2ka0rcY7/evnGYjcrmX1Ssx/uhXJaQZsrfRmnVMD3J34cUQL9ly4TkRsMj3qeRTJrRW7Q7+oQARU4rKuU8HOOff9989TM+W6VIVmT+W+X0HV7Abr3lbLeaWBF0IIcVcSjBSHyKNZy9FnOHDDjhHz9pKQouY3aeLnxks9atG5dpV8ByK3yy1lO0DrGpULfL4ikZIAFzbBjQtwIwRuXlQBQs//geMdfVmiz8KG96Dho9BgYNZ6owH2/p9a1ltDSpxK3d762Zyvees6bPlILXd+DaztCu9+PBuCk4fqFCtNNEIIcV8kGMmvpBg1mVpgD2jyeMGOjThsWoy/fJzx21JJSEmnvrcLr/aqQ5c69xaElCrLnoVT/2Zff+UgPLUcnDPmy4k4Aj8/DInRcGatyunhUVdtO7NaBTEOFdXw3LVvwu450PIZNTPunTbPgORYFTgUZq0IqJqQhoNgzxyo0bVwzy3KHIPBQFpamqWLIUShs7Gxwcoq9z+I80uCkfza+ikcXQyn/lNDOytUMd9+boPKTdHns+x/6UceMS1u37WTq3H+BHpUYPG4tjjZlYN/gqsnMgKRjC/wSgGq4+mWTyHqBMx/EIb/DXER8OtgNRGd3hoMKWqemNHr1Ky3u+eo8wWNhBaj1L/JzRA4uwbq9Da/ZtRJ1UQD8OAMlV21sD3wHgSNkMyrIleaphEZGUlMTIyliyJEkXFzc8PLy+u+/qguB9+EhSD2Muz9QS2nJcKur+GB97O2J92EJaPVu1cj6PCS+baYrNEuFeIvUMHOmu+GBd1bIJIcCzFhULG6+QiPkmznV+q9/kPw6Nys9TW7wU8DVNPN3J7q3tISwa8N9P8S5vVUNSc7voBaveDiNtBZqZoQWydoPkKde/ds82BE02DNG6AZoG4/COhUNPdlbSeBiMhTZiDi4eGBo6Nj2a8BFeWKpmkkJiYSFaXyWnl73/tACQlG8mPzR+qv9Apeaojo3h+h3USVOhxgyycq6AC4uAM6vMSyQ5fZfvY6bfQnGAxo6NChUVN/hc8GNybQowCBxO7v4Oifqq9F0g21zqc5jN1UqLdZJGLCVI0SQPtJ5tsq1YBRa1RAEn1GravZDYb8ooKN3p+o5p3NH6sEY6D6kLhWVcutxsKubyFkK1w9ntV34+xaNZGd3kb1SRHCAgwGgykQqVy5hPTdEqKQOTioJJlRUVF4eHjcc5NNGUk8UYSunVHNLwCP/QTeTdTImF3fZG3f+33W/qG7CYuO49XFR1hy8DKnDm0HYLdB/QXto7vBg7XuCEQ0TQ3/1XKYCC/1lvorP/xAViACqsYgPrKw7rLo7J4NxnRVO1G1efbtLj7w9CpVg9FyDAz9QwUioCalq9MXjGkqNTtAm/FZx7r5Qb3+annTh3BgIax/F/57OWPf51TAI4QFZPYRcXR0tHBJhChamT/j99MvSoKRu9k0XU2KVqcP+LeGzq+r9Xu/h8QbqhOlMR1q9VT5JlLjWbF6NelGjfreLvStopKOHbNrQpxVRXVs9Fnzaxz6GT4LVCND7hRxRDU3VPCEcdth6mXVFARwaWf2/a+dVl/GsZcL6QHch8QbKkCA7LUit3Nyh8d/hb4zzUe86HTQf5aaRRegagvwbWF+bGZwcupf+OdFlVMkNkw9r06vFtadCHHPpGlGlHWF8TMuwUhewg/Aib8BnZpyHlRQ4tUIUhPgz+Gq86TeGnp9CNXaAxB/ejMA7w1oQHPbMACeGTwQF9+MZoTMJolMR/9S7yeWZy/DlYPqvWoLdV07Z9N1CN2Vff8N78O+H2HpsznXtOQl8QasmqI6fxaGfT+qWiSvRqr55V5U8IBHflDp1nNqcvFrpfqOuNeGwAdUf5JeH8LYzWBfBmceFkKIMkiCkbxsyOik2uRx8KyvlnW6rNqRi9vUe6tnwb2WKUhoyQna1qhMy6oOqqYC1Bdyldpq+fZgxJAGl/ep5bC9YDSalyE8MxhplrXOv616v7NmJD0VLmzO2LYdDv9RsPvd+D81VPXvCQU7LiepibDnO7XcftL9JQWr1QOe267mhLmTTgcPfQUT9sGwv6DvZ9D2edX8I4QoMbp06cKkSZPyvf/FixfR6XQEBwcXWZlEySHBSG4SojK+2HXQZar5tjp9Ve4KUE0InVVzwDV31YTQUn+Kid1qqBoGzQCOldWXo3sOwUjEYTWCBNQ8J9fPmV8rs2bE57ZgJPNL+epxlf8kU+guVWOTae00VduRH4k3IPh3tRy+H8L25e+43Bz+DRKvg1s1qD/w/s4lhCg2Op0uz9fIkSPv6bxLly7lf//Lf4dyPz8/IiIiaNiw4T1d71707NkTKysrdu/eXWzXFIoEI7m5EaLeXX2hYjXzbXo9PPiRmo6+3+cqCRfwzQkH4jQHXHRJtHEMz8ov4tVY/QXvXkt9vnZbMHJn7UbYnqzlpJtq2Cuo0TOZKnhA5UBAM9//3Dr13vBRqFJPBQPr38nf/R5cCOlJWZ93z777MZqmsqLmtH7vj2q5zXiVI0QIUSpERESYXrNmzcLFxcVs3Zdffmm2f347LVaqVAln5zymbriDlZUVXl5eWFsXz++P0NBQdu3axYQJE5g7d+7dDyhi5S1JngQjuYm5pN7dquW8PaAjholHSK87gHSDkSsxSfy+7wr7jBnZQi/uUJ1PIavDqXsd9X7jgmqegaxgxN5VvV/em3WNK4fUe8Xq2ROpmZpqdmStO7tevdfprTp+gprh9lIOfUtuZ0jLyqPS5nn1fuLv3DvBpqeoIbWf1lQTAKanmG8P3QXXToKNIzQdmve1hRAlipeXl+nl6uqKTqczfU5OTsbNzY0///yTLl26YG9vzy+//ML169cZOnQovr6+ODo60qhRI37//Xez897ZTFO9enU+/PBDRo0ahbOzM/7+/nz/fdbIxDubaTZv3oxOp2PDhg20aNECR0dH2rVrx+nTp82uM336dDw8PHB2dmbMmDFMmTKFpk2b3vW+58+fT79+/XjuuedYtGgRt27dMtseExPD2LFj8fT0xN7enoYNG/Lvv1lZpXfs2EHnzp1xdHSkYsWK9OrVi5s3b5ruddasWWbna9q0Ke+++67ps06n47vvvmPAgAE4OTkxffp0DAYDo0ePJiAgAAcHB+rUqZMtGASYN28eDRo0wM7ODm9vbyZMUE3to0aNol+/fmb7pqen4+Xlxbx58+76TIqTBCO5uXlRvVesblqVZjCyN+QGn689zSOzd1D7zVUETlOvdh9tJNVgJNwtowbj4vasmhHvJurdpar6gjamqfMbjVmdUFs+o97DbgtGMvuL+OQwJDazqSYz0IgJUwGATq86i/q3gebD1bZ/J2XV9OTk5AqICwenKtDjHajeUTUvZQYomYwG1Q/l6xZquHHidXWP++/4od6XUSvSaHBWkCWEUEmiUtOL/aUVtDP7Xbz++uu8+OKLnDx5kl69epGcnExQUBD//vsvx44dY+zYsTz11FPs2bMnz/PMnDmTFi1acOjQIcaPH89zzz3HqVOn8jxm2rRpzJw5k/3792Ntbc2oUaNM23799Vc++OADPv74Yw4cOIC/vz9z5sy56/1omsb8+fMZNmwYdevWpXbt2vz555+m7Uajkd69e7Nz505++eUXTpw4wUcffWTKqREcHEz37t1p0KABu3btYvv27fTv3x+DIYea4zy88847DBgwgKNHjzJq1CiMRiO+vr78+eefnDhxgrfffps33njDrGxz5szh+eefZ+zYsRw9epQVK1YQGBgIwJgxY1i9ejURERGm/VeuXElCQgKPPfZYgcpW1KT+PDc3M2pGMppoLkbfYugPu4mITc71EFtrPS0694d/50Lo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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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pdzlDx8+jMViYfv27dVWJzFVezDSuHFjmjRpgp+fX+G+9u3bYxgGR48eLfMcNze3wnVotB6NiEj9YrFYLvgaN25cpa67cOFC/v73v5e7fFhYGPHx8XTq1KlS9ysvBT010E3Tt29fvvrqK9LS0vD29gbgjz/+wMnJ6YLLCYuISP0UHx9fuD1//nyeffZZ9u3bV7jPw8OjRPnc3FxcXFwuet2CSRTlZbVaCQkJqdA5DpOdBrYc8KzYd6wtKtwykpaWxvbt2wsjuJiYGLZv305sbCxgdrGMHTu2sPydd95JYGAg48ePZ8+ePaxevZonnniCe++9t9QfKBERqV6GYZCRk+eQl2EY5apjSEhI4cvPzw+LxVL4OSsrC39/f7788ksGDBiAu7s7n376KadOneKOO+6gadOmeHp60rlzZ+bNm1fiuud20zRv3px//OMf3Hvvvfj4+NCsWTPefffdwuPntlisXLkSi8XCzz//TFRUFJ6envTp06dEoATw0ksv0ahRI3x8fLjvvvt4+umn6datW6X+e4E5qeORRx6hUaNGuLu7069fPzZt2lR4/Mzp09x1x2gahrXEw8OD1q1b8+GHHwLm9O5JkybRuHFj3N3dad68OTNmzKh0XapLhVtGNm/ezMCBAws/T506FYB77rmHuXPnEh8fXxiYAHh7exMdHc3kyZOJiooiMDCQUaNG8dJLL1VB9UVEpCIyc210ePYnh9x7z4tD8XStmgb5p556ipkzZ/Lhhx/i5uZGVlYWkZGRPPXUU/j6+vLDDz8wZswYWrRoQa9evc57nZkzZ/L3v/+dZ555hq+//poHH3yQq666inbt2p33nOnTpzNz5kwaNmzIxIkTuffee1m3bh0An332GS+//DKzZ8+mb9++fPHFF8ycOZOIiIhKf9cnn3ySBQsW8NFHHxEeHs6rr77K0KFDOXDgAAEBAfztr9PZ88dBfvz0TYKad+DAsVOFYzJff/11Fi1axJdffkmzZs2Ii4urleMwK/ynYsCAAReMbufOnVtqX7t27YiOjq7orURERMo0ZcoUbrnllhL7Hn/88cLtyZMns2TJEr766qsLBiPDhw/noYceAswA59///jcrV668YDDy8ssvc/XVVwPw9NNPc/3115OVlYW7uztvvPEGEyZMYPz48QA8++yzLF26lLS0tEp9z/T0dN566y3mzp1bmOPr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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "acc = history.history['accuracy']\n", "val_acc = history.history['val_accuracy']\n", "loss = history.history['loss']\n", "val_loss = history.history['val_loss']\n", "\n", "# Plot the accuracy\n", "plt.plot(acc, label='Training Accuracy')\n", "plt.plot(val_acc, label='Validation Accuracy')\n", "plt.legend(loc='lower right')\n", "plt.title('Accuracy')\n", "plt.show()\n", "\n", "# Plot the loss\n", "plt.plot(loss, label='Training Loss')\n", "plt.plot(val_loss, label='Validation Loss')\n", "plt.legend(loc='upper right')\n", "plt.title('Loss')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 54, "id": "0c206b68", "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " precision recall f1-score support\n", "\n", " 0.0 0.72 0.77 0.74 664\n", " 1.0 0.75 0.70 0.72 660\n", "\n", " accuracy 0.73 1324\n", " macro avg 0.74 0.73 0.73 1324\n", "weighted avg 0.74 0.73 0.73 1324\n", "\n", "AUC-ROC score: 0.7980490142387733\n" ] } ], "source": [ "from sklearn.metrics import classification_report\n", "auc = roc_auc_score(y_test, y_pred_proba) \n", "y_pred_binary = (y_pred_proba > 0.5).astype(int)\n", "print(classification_report(y_test, y_pred_binary))\n", "print('AUC-ROC score: ', auc)" ] }, { "cell_type": "code", "execution_count": 26, "id": "f8f65bf1", "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "0.46871647" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.mean(y_pred_proba)" ] }, { "cell_type": "code", "execution_count": 105, "id": "4897ec9a", "metadata": {}, "outputs": [], "source": [ "model.save('model3.h5')\n", "model.save_weights('my_model_weights3.h5') # to store\n" ] }, { "cell_type": "code", "execution_count": 28, "id": "450f5d2e", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0.53846154, 0.5 , 0.5 , 0.56666667, 0.36666667,\n", " 0.05405405, 0.05405405, 0.08695652, 0. , 0. ,\n", " 0.04347826, 0. , 0.5 , 0.35308133, 0.52333333,\n", " 0.17319974, 0.60022574, 0.23687633, 0.26470588, 0.13549416,\n", " 0.44876325, 0.15818221, 0.67857143, 0.06671903, 0.78571429,\n", " 0.06057386, 0.45804196, 0.28032127, 0.66666667, 0.01817007,\n", " 0.66666667, 0.0401169 , 0.09756867, 0.42702703, 0.31443598,\n", " 0.50230415, 0.21293055, 0.35294118, 0.1381509 , 0.33707865,\n", " 0.22234234, 0.55882353, 0.17702297, 0.85714286, 0.1892933 ,\n", " 0.40634006, 0.32031142, 0.84210526, 0.0670209 , 0.25 ,\n", " 0.00328931, 0.03192888, 0.39323843, 0.16905649, 0.39221179,\n", " 0.15879984, 0.5 , 0.04523683, 0.20967742, 0.07297979,\n", " 0.6122449 , 0.15827105, 0.7173913 , 0.27301756, 0.33703704,\n", " 0.29255683, 1. , 0.00682466, 1. , 0.03013571,\n", " 0.1017132 , 0.35193133, 0.24517326, 0.3744856 , 0.13353865,\n", " 1. , 0.10377861, 0.27868852, 0.18929273, 0.5 ,\n", " 0.10498358, 0.8 , 0.15167642, 0.33928571, 0.25938867,\n", " 0.4 , 0.01258648, 1. , 0.01976735])" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "new_data =data_scaled[-1,:]\n", "new_data = new_data[1:]\n", "new_data" ] }, { "cell_type": "code", "execution_count": 29, "id": "2b919261", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[[0.53846154, 0.5 , 0.5 , 0.56666667, 0.36666667,\n", " 0.05405405, 0.05405405, 0.08695652, 0. , 0. ,\n", " 0.04347826, 0. , 0.5 , 0.35308133, 0.52333333,\n", " 0.17319974, 0.60022574, 0.23687633, 0.26470588, 0.13549416,\n", " 0.44876325, 0.15818221, 0.67857143, 0.06671903, 0.78571429,\n", " 0.06057386, 0.45804196, 0.28032127, 0.66666667, 0.01817007,\n", " 0.66666667, 0.0401169 , 0.09756867, 0.42702703, 0.31443598,\n", " 0.50230415, 0.21293055, 0.35294118, 0.1381509 , 0.33707865,\n", " 0.22234234, 0.55882353, 0.17702297, 0.85714286, 0.1892933 ,\n", " 0.40634006, 0.32031142, 0.84210526, 0.0670209 , 0.25 ,\n", " 0.00328931, 0.03192888, 0.39323843, 0.16905649, 0.39221179,\n", " 0.15879984, 0.5 , 0.04523683, 0.20967742, 0.07297979,\n", " 0.6122449 , 0.15827105, 0.7173913 , 0.27301756, 0.33703704,\n", " 0.29255683, 1. , 0.00682466, 1. , 0.03013571,\n", " 0.1017132 , 0.35193133, 0.24517326, 0.3744856 , 0.13353865,\n", " 1. , 0.10377861, 0.27868852, 0.18929273, 0.5 ,\n", " 0.10498358, 0.8 , 0.15167642, 0.33928571, 0.25938867,\n", " 0.4 , 0.01258648, 1. , 0.01976735]]])" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "\n", "new_data = np.reshape(new_data, (1,1,new_data.shape[0]))\n", "new_data" ] }, { "cell_type": "code", "execution_count": 30, "id": "977d1f7a", "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1/1 [==============================] - 0s 369ms/step\n" ] } ], "source": [ "y_pred = model.predict(new_data)" ] }, { "cell_type": "code", "execution_count": 31, "id": "1cc06bbf", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0.2638105]], dtype=float32)" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y_pred" ] }, { "cell_type": "code", "execution_count": 83, "id": "427be37d", "metadata": {}, "outputs": [], "source": [ "from datetime import date\n", "\n", "today = date.today()\n", "df_fighters_details['AGE'] = (pd.to_datetime(today) - pd.to_datetime(df_fighters_details['DOB'])).astype('\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
FIGHTERHEIGHT_fighterWEIGHT_fighterREACH_fighterSTANCE_fighterFightsWinDRAWLostNo_contest...BODY_attemps_opponentLEG_landed_opponentLEG_attemps_opponentDISTANCE_landed_opponentDISTANCE_attemps_opponentCLINCH_landed_opponentCLINCH_attemps_opponentGROUND_landed_opponentGROUND_attemps_opponentform_skore_fighter
2003Serghei Spivac75.0260.078.0Orthodox96030...71.028.029.0164.0415.027.038.037.058.00.9
\n", "

1 rows × 56 columns

\n", "" ], "text/plain": [ " FIGHTER HEIGHT_fighter WEIGHT_fighter REACH_fighter \\\n", "2003 Serghei Spivac 75.0 260.0 78.0 \n", "\n", " STANCE_fighter Fights Win DRAW Lost No_contest ... \\\n", "2003 Orthodox 9 6 0 3 0 ... \n", "\n", " BODY_attemps_opponent LEG_landed_opponent LEG_attemps_opponent \\\n", "2003 71.0 28.0 29.0 \n", "\n", " DISTANCE_landed_opponent DISTANCE_attemps_opponent \\\n", "2003 164.0 415.0 \n", "\n", " CLINCH_landed_opponent CLINCH_attemps_opponent GROUND_landed_opponent \\\n", "2003 27.0 38.0 37.0 \n", "\n", " GROUND_attemps_opponent form_skore_fighter \n", "2003 58.0 0.9 \n", "\n", "[1 rows x 56 columns]" ] }, "execution_count": 86, "metadata": {}, "output_type": "execute_result" } ], "source": [ "f1_df" ] }, { "cell_type": "code", "execution_count": 87, "id": "2b4a9810", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Index(['Win', 'HEIGHT_diff', 'REACH_diff', 'AGE_diff', 'form_skore_fighter',\n", " 'form_skore_opponent', 'fightNo_fighter', 'fightNo_opponent',\n", " 'Win_tot_f1', 'DRAW_f1', 'No_contest_f1', 'Win_tot_f2', 'DRAW_f2',\n", " 'No_contest_f2', 'CTRL_pct_fighterf1', 'SIG.STR._acc_fighterf1',\n", " 'SIG.STR._perRound_fighterf1', 'TOTAL STR._acc_fighterf1',\n", " 'TOTAL STR._perRound_fighterf1', 'TD_acc_fighterf1',\n", " 'TD_perRound_fighterf1', 'HEAD_acc_fighterf1',\n", " 'HEAD_perRound_fighterf1', 'BODY_acc_fighterf1',\n", " 'BODY_perRound_fighterf1', 'LEG_acc_fighterf1',\n", " 'LEG_perRound_fighterf1', 'DISTANCE_acc_fighterf1',\n", " 'DISTANCE_perRound_fighterf1', 'CLINCH_acc_fighterf1',\n", " 'CLINCH_perRound_fighterf1', 'GROUND_acc_fighterf1',\n", " 'GROUND_perRound_fighterf1', 'CTRL_pct_opponentf1',\n", " 'SIG.STR._acc_opponentf1', 'SIG.STR._perRound_opponentf1',\n", " 'TOTAL STR._acc_opponentf1', 'TOTAL STR._perRound_opponentf1',\n", " 'TD_acc_opponentf1', 'TD_perRound_opponentf1', 'HEAD_acc_opponentf1',\n", " 'HEAD_perRound_opponentf1', 'BODY_acc_opponentf1',\n", " 'BODY_perRound_opponentf1', 'LEG_acc_opponentf1',\n", " 'LEG_perRound_opponentf1', 'DISTANCE_acc_opponentf1',\n", " 'DISTANCE_perRound_opponentf1', 'CLINCH_acc_opponentf1',\n", " 'CLINCH_perRound_opponentf1', 'GROUND_acc_opponentf1',\n", " 'GROUND_perRound_opponentf1', 'CTRL_pct_fighterf2',\n", " 'SIG.STR._acc_fighterf2', 'SIG.STR._perRound_fighterf2',\n", " 'TOTAL STR._acc_fighterf2', 'TOTAL STR._perRound_fighterf2',\n", " 'TD_acc_fighterf2', 'TD_perRound_fighterf2', 'HEAD_acc_fighterf2',\n", " 'HEAD_perRound_fighterf2', 'BODY_acc_fighterf2',\n", " 'BODY_perRound_fighterf2', 'LEG_acc_fighterf2',\n", " 'LEG_perRound_fighterf2', 'DISTANCE_acc_fighterf2',\n", " 'DISTANCE_perRound_fighterf2', 'CLINCH_acc_fighterf2',\n", " 'CLINCH_perRound_fighterf2', 'GROUND_acc_fighterf2',\n", " 'GROUND_perRound_fighterf2', 'CTRL_pct_opponentf2',\n", " 'SIG.STR._acc_opponentf2', 'SIG.STR._perRound_opponentf2',\n", " 'TOTAL STR._acc_opponentf2', 'TOTAL STR._perRound_opponentf2',\n", " 'TD_acc_opponentf2', 'TD_perRound_opponentf2', 'HEAD_acc_opponentf2',\n", " 'HEAD_perRound_opponentf2', 'BODY_acc_opponentf2',\n", " 'BODY_perRound_opponentf2', 'LEG_acc_opponentf2',\n", " 'LEG_perRound_opponentf2', 'DISTANCE_acc_opponentf2',\n", " 'DISTANCE_perRound_opponentf2', 'CLINCH_acc_opponentf2',\n", " 'CLINCH_perRound_opponentf2', 'GROUND_acc_opponentf2',\n", " 'GROUND_perRound_opponentf2'],\n", " dtype='object')" ] }, "execution_count": 87, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_model.columns" ] }, { "cell_type": "code", "execution_count": 88, "id": "2f5a3e74", "metadata": {}, "outputs": [], "source": [ "agediff = df_fighters_details[df_fighters_details['FIGHTER']==fighter1]['AGE'].values[0] - df_fighters_details[df_fighters_details['FIGHTER']==fighter2]['AGE'].values[0]\n", "formy = [f1_df['form_skore_fighter'].values[0], f2_df['form_skore_fighter'].values[0]]\n", "no_of_fights = [f1_df['Fights'].values[0],f2_df['Fights'].values[0]]\n", "W_D_NC = f1_df[['Win','DRAW', 'No_contest']].values.tolist()[0] + f2_df[['Win','DRAW', 'No_contest']].values.tolist()[0]" ] }, { "cell_type": "code", "execution_count": 89, "id": "5473bec1", "metadata": {}, "outputs": [], "source": [ "sloupce2 = df_fighters.columns.tolist()[10:]\n", "stats_f1 = []\n", "stats_f2 = []\n", "for sloupec in sloupce2: \n", " splited = sloupec.split('_')\n", " if 'CTRL' in splited:\n", " stats_f1.append((f1_df[sloupec]/f1_df['TotalTime']).values[0])\n", " stats_f2.append((f2_df[sloupec]/f2_df['TotalTime']).values[0])\n", " if 'attemps' in splited:\n", " stats_f1.append((f1_df[sloupec.replace('attemps', 'landed')]/f1_df[sloupec]).values[0])\n", " stats_f1.append((f1_df[sloupec.replace('attemps', 'landed')]/f1_df['TotalTime']).values[0]*300)\n", " \n", " stats_f2.append((f2_df[sloupec.replace('attemps', 'landed')]/f2_df[sloupec]).values[0])\n", " stats_f2.append((f2_df[sloupec.replace('attemps', 'landed')]/f2_df['TotalTime']).values[0]*300)\n", "stats_list = stats_f1 + stats_f2" ] }, { "cell_type": "code", "execution_count": 90, "id": "bdff40e4", "metadata": {}, "outputs": [], "source": [ "vstup = np.array([1]+[f1_df.iloc[0][col] - f2_df.iloc[0][col] for col in ['HEIGHT_fighter','REACH_fighter']] + [agediff] + formy + no_of_fights + W_D_NC + stats_list)" ] }, { "cell_type": "code", "execution_count": 91, "id": "1fdd596e", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\spravce\\AppData\\Local\\Temp\\ipykernel_30416\\2024273010.py:2: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", " vstup_scaled = scaler.fit_transform(df_model.append(pd.DataFrame(vstup.reshape(1,-1), columns=list(df_model)), ignore_index=True))[-200:,1:]\n" ] } ], "source": [ "scaler = MinMaxScaler(feature_range=(0, 1))\n", "vstup_scaled = scaler.fit_transform(df_model.append(pd.DataFrame(vstup.reshape(1,-1), columns=list(df_model)), ignore_index=True))[-200:,1:]" ] }, { "cell_type": "code", "execution_count": 92, "id": "1f3ec277", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(200, 89)" ] }, "execution_count": 92, "metadata": {}, "output_type": "execute_result" } ], "source": [ "vstup_scaled.shape" ] }, { "cell_type": "code", "execution_count": 93, "id": "96eda032", "metadata": {}, "outputs": [], "source": [ "from numpy import *\n", "where_are_NaNs = isnan(vstup_scaled)\n", "vstup_scaled[where_are_NaNs] = 0" ] }, { "cell_type": "code", "execution_count": 94, "id": "b4ed6497", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([], shape=(0, 2), dtype=int64)" ] }, "execution_count": 94, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.argwhere(np.isnan(vstup_scaled))" ] }, { "cell_type": "code", "execution_count": 95, "id": "a5702284", "metadata": {}, "outputs": [], "source": [ "new_data = np.reshape(vstup_scaled, (1,200,vstup_scaled.shape[1]))" ] }, { "cell_type": "code", "execution_count": 96, "id": "ff2a2884", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[[0.46153846, 0.375 , 0.47058824, ..., 0. ,\n", " 0. , 0. ],\n", " [0.73076923, 0.79166667, 0.41176471, ..., 0.05888578,\n", " 0.66153846, 0.06213597],\n", " [0.26923077, 0.20833333, 0.58823529, ..., 0.02074561,\n", " 0.7826087 , 0.58646617],\n", " ...,\n", " [0.46153846, 0.5 , 0.5 , ..., 0.0670209 ,\n", " 0.25 , 0.00328931],\n", " [0.53846154, 0.5 , 0.5 , ..., 0.01258648,\n", " 1. , 0.01976735],\n", " [0.5 , 0.45833333, 0.23529412, ..., 0.0916802 ,\n", " 0.75342466, 0.07542115]]])" ] }, "execution_count": 96, "metadata": {}, "output_type": "execute_result" } ], "source": [ "new_data" ] }, { "cell_type": "code", "execution_count": null, "id": "66110573", "metadata": {}, "outputs": [], "source": [ "\n" ] }, { "cell_type": "code", "execution_count": 97, "id": "b71d6fd0", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(1, 89)" ] }, "execution_count": 97, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.array(new_data[-1][-1]).reshape(1,-1).shape" ] }, { "cell_type": "code", "execution_count": 102, "id": "23f96f1d", "metadata": {}, "outputs": [], "source": [ "from keras.models import load_model\n", "model = load_model('model3.h5')\n", "model.load_weights('my_model_weights.h5') # to load" ] }, { "cell_type": "code", "execution_count": 103, "id": "b5fa7a9f", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0.51083056, 0.48916944]])" ] }, "execution_count": 103, "metadata": {}, "output_type": "execute_result" } ], "source": [ "logreg.predict_proba(np.array(new_data[-1][-1]).reshape(1,-1))" ] }, { "cell_type": "code", "execution_count": 104, "id": "7bc04b75", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "WARNING:tensorflow:5 out of the last 48 calls to .predict_function at 0x000001889A896670> triggered tf.function retracing. Tracing is expensive and the excessive number of tracings could be due to (1) creating @tf.function repeatedly in a loop, (2) passing tensors with different shapes, (3) passing Python objects instead of tensors. For (1), please define your @tf.function outside of the loop. For (2), @tf.function has reduce_retracing=True option that can avoid unnecessary retracing. For (3), please refer to https://www.tensorflow.org/guide/function#controlling_retracing and https://www.tensorflow.org/api_docs/python/tf/function for more details.\n", "1/1 [==============================] - 0s 351ms/step\n" ] }, { "data": { "text/plain": [ "array([[0.2637663]], dtype=float32)" ] }, "execution_count": 104, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y_pred = model.predict(new_data)\n", "y_pred" ] }, { "cell_type": "code", "execution_count": 50, "id": "348db2cf", "metadata": {}, "outputs": [], "source": [ "df_model.to_csv('df_model.csv',index=False)" ] }, { "cell_type": "code", "execution_count": null, "id": "0a3db91c", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "a60c443e", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "155452b6", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.13" } }, "nbformat": 4, "nbformat_minor": 5 }