Audik-checkpoint.ipynb 159 KB
Newer Older
Iker Martín's avatar
Iker Martín committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "import pandas as pd\n",
    "from pandas import DataFrame, Series\n",
    "import numpy as np\n",
    "import seaborn as sns\n",
    "import matplotlib.pyplot as plt\n",
    "from scipy import stats\n",
    "import sys"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [],
   "source": [
    "matrixMalEX=\"data_GG.csv\"\n",
    "matrixMal=\"data_GM.csv\"\n",
    "matrixIt=\"data_L.csv\"\n",
    "n_qty=2 #CAMBIAR SEGUN LA CANTIDAD DE NODOS USADOS\n",
    "repet = 3 * 2 #CAMBIAR EL PRIMER NUMERO SEGUN NUMERO DE EJECUCIONES POR CONFIG\n",
    "\n",
    "p_value = 0.05\n",
    "values = [2, 4, 8, 16, 32]\n",
    "dist_names = ['null', 'BestFit', 'WorstFit']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "def speedUp(arr, seq, df):\n",
    "    numP = df.loc[arr.index[0]].NP\n",
    "    return seq[( seq.NP == numP )]['EX'] / arr.mean()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "dfG = pd.read_csv( matrixMalEX )\n",
    "\n",
    "dfG = dfG.drop(columns=dfG.columns[0])\n",
    "dfG['S'] = dfG['N']\n",
    "dfG['N'] = dfG['S'] + dfG['%Async']\n",
    "dfG['%Async'] = (dfG['%Async'] / dfG['N']) * 100\n",
    "\n",
    "if(n_qty == 1):\n",
    "    group = dfG.groupby(['%Async', 'Groups'])['TE']\n",
    "else:        \n",
    "    group = dfG.groupby(['Dist', '%Async', 'Groups'])['TE']\n",
    "\n",
    "#group\n",
    "grouped_aggG = group.agg(['mean'])\n",
    "grouped_aggG.rename(columns={'mean':'TE',}, inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from natsort import index_natsorted\n",
    "grouped_aggG.sort_values(\n",
    "   by=\"Groups\",\n",
    "   key=lambda x: np.argsort(index_natsorted(df[\"Groups\"]))\n",
    ")\n",
    "grouped_aggG"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "dfM = pd.read_csv( matrixMal )\n",
    "dfM = dfM.drop(columns=dfM.columns[0])\n",
    "\n",
    "dfM['S'] = dfM['N']\n",
    "dfM['N'] = dfM['S'] + dfM['%Async']\n",
    "dfM[\"TR\"] = dfM[\"TC\"] + dfM[\"TS\"] + dfM[\"TA\"]\n",
    "dfM['%Async'] = (dfM['%Async'] / dfM['N']) * 100\n",
    "\n",
    "if(n_qty == 1):\n",
    "    groupM = dfM.groupby(['%Async','NP', 'NS'])['TC', 'TS', 'TA', 'TR']\n",
    "else:\n",
    "    groupM = dfM.groupby(['Dist', '%Async','NP', 'NS'])['TC', 'TS', 'TA', 'TR']\n",
    "\n",
    "#group\n",
    "grouped_aggM = groupM.agg(['mean'])\n",
    "grouped_aggM.columns = grouped_aggM.columns.get_level_values(0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/usuario/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:16: FutureWarning: set_axis currently defaults to operating inplace.\n",
      "This will change in a future version of pandas, use inplace=True to avoid this warning.\n",
      "  app.launch_new_instance()\n"
     ]
    }
   ],
   "source": [
    "dfL = pd.read_csv( matrixIt )\n",
    "dfL = dfL.drop(columns=dfL.columns[0])\n",
    "\n",
    "dfL['S'] = dfL['N']\n",
    "dfL['N'] = dfL['S'] + dfL['%Async']\n",
    "dfL['%Async'] = (dfL['%Async'] / dfL['N']) * 100\n",
    "\n",
    "if(n_qty == 1):\n",
    "    groupL = dfL[dfL['NS'] != 0].groupby(['Tt', '%Async', 'NP', 'NS'])['Ti', 'To']\n",
    "else:\n",
    "    groupL = dfL[dfL['NS'] != 0].groupby(['Tt', 'Dist', '%Async', 'NP', 'NS'])['Ti', 'To']\n",
    "\n",
    "#group\n",
    "grouped_aggL = groupL.agg(['mean', 'count'])\n",
    "grouped_aggL.columns = grouped_aggL.columns.get_level_values(0)\n",
    "grouped_aggL.set_axis(['Ti', 'Iters', 'To', 'Iters2'], axis='columns')\n",
    "\n",
    "grouped_aggL['Iters'] = np.ceil(grouped_aggL['Iters']/6) # TODO Cambiar a repeticiones realizadas\n",
    "grouped_aggL['Iters2'] = np.ceil(grouped_aggL['Iters2']/6)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "grouped_aggL.to_excel(\"resultL.xlsx\") \n",
    "grouped_aggM.to_excel(\"resultM.xlsx\") \n",
    "grouped_aggG.to_excel(\"resultG.xlsx\") "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>N</th>\n",
       "      <th>%Async</th>\n",
       "      <th>Groups</th>\n",
       "      <th>Dist</th>\n",
       "      <th>Matrix</th>\n",
       "      <th>Time</th>\n",
       "      <th>Iters</th>\n",
       "      <th>TE</th>\n",
       "      <th>S</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>0</td>\n",
       "      <td>1000000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>8,32</td>\n",
       "      <td>2,2</td>\n",
       "      <td>100000</td>\n",
       "      <td>0.1</td>\n",
       "      <td>1000</td>\n",
       "      <td>31.525710</td>\n",
       "      <td>1000000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>1</td>\n",
       "      <td>1000000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>8,32</td>\n",
       "      <td>2,2</td>\n",
       "      <td>100000</td>\n",
       "      <td>0.1</td>\n",
       "      <td>1000</td>\n",
       "      <td>33.315857</td>\n",
       "      <td>1000000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2</td>\n",
       "      <td>1000000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>8,32</td>\n",
       "      <td>2,2</td>\n",
       "      <td>100000</td>\n",
       "      <td>0.1</td>\n",
       "      <td>1000</td>\n",
       "      <td>33.347537</td>\n",
       "      <td>1000000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>3</td>\n",
       "      <td>1000000000</td>\n",
       "      <td>75.0</td>\n",
       "      <td>4,32</td>\n",
       "      <td>1,1</td>\n",
       "      <td>100000</td>\n",
       "      <td>0.1</td>\n",
       "      <td>1000</td>\n",
       "      <td>57.219027</td>\n",
       "      <td>250000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>4</td>\n",
       "      <td>1000000000</td>\n",
       "      <td>75.0</td>\n",
       "      <td>4,32</td>\n",
       "      <td>1,1</td>\n",
       "      <td>100000</td>\n",
       "      <td>0.1</td>\n",
       "      <td>1000</td>\n",
       "      <td>55.469166</td>\n",
       "      <td>250000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>595</td>\n",
       "      <td>1000000000</td>\n",
       "      <td>50.0</td>\n",
       "      <td>4,8</td>\n",
       "      <td>2,2</td>\n",
       "      <td>100000</td>\n",
       "      <td>0.1</td>\n",
       "      <td>1000</td>\n",
       "      <td>73.771357</td>\n",
       "      <td>500000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>596</td>\n",
       "      <td>1000000000</td>\n",
       "      <td>50.0</td>\n",
       "      <td>4,8</td>\n",
       "      <td>2,2</td>\n",
       "      <td>100000</td>\n",
       "      <td>0.1</td>\n",
       "      <td>1000</td>\n",
       "      <td>75.557508</td>\n",
       "      <td>500000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>597</td>\n",
       "      <td>1000000000</td>\n",
       "      <td>50.0</td>\n",
       "      <td>16,8</td>\n",
       "      <td>1,1</td>\n",
       "      <td>100000</td>\n",
       "      <td>0.1</td>\n",
       "      <td>1000</td>\n",
       "      <td>35.949913</td>\n",
       "      <td>500000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>598</td>\n",
       "      <td>1000000000</td>\n",
       "      <td>50.0</td>\n",
       "      <td>16,8</td>\n",
       "      <td>1,1</td>\n",
       "      <td>100000</td>\n",
       "      <td>0.1</td>\n",
       "      <td>1000</td>\n",
       "      <td>37.900348</td>\n",
       "      <td>500000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>599</td>\n",
       "      <td>1000000000</td>\n",
       "      <td>50.0</td>\n",
       "      <td>16,8</td>\n",
       "      <td>1,1</td>\n",
       "      <td>100000</td>\n",
       "      <td>0.1</td>\n",
       "      <td>1000</td>\n",
       "      <td>36.012772</td>\n",
       "      <td>500000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>600 rows × 9 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "              N  %Async Groups Dist  Matrix  Time  Iters         TE  \\\n",
       "0    1000000000     0.0   8,32  2,2  100000   0.1   1000  31.525710   \n",
       "1    1000000000     0.0   8,32  2,2  100000   0.1   1000  33.315857   \n",
       "2    1000000000     0.0   8,32  2,2  100000   0.1   1000  33.347537   \n",
       "3    1000000000    75.0   4,32  1,1  100000   0.1   1000  57.219027   \n",
       "4    1000000000    75.0   4,32  1,1  100000   0.1   1000  55.469166   \n",
       "..          ...     ...    ...  ...     ...   ...    ...        ...   \n",
       "595  1000000000    50.0    4,8  2,2  100000   0.1   1000  73.771357   \n",
       "596  1000000000    50.0    4,8  2,2  100000   0.1   1000  75.557508   \n",
       "597  1000000000    50.0   16,8  1,1  100000   0.1   1000  35.949913   \n",
       "598  1000000000    50.0   16,8  1,1  100000   0.1   1000  37.900348   \n",
       "599  1000000000    50.0   16,8  1,1  100000   0.1   1000  36.012772   \n",
       "\n",
       "              S  \n",
       "0    1000000000  \n",
       "1    1000000000  \n",
       "2    1000000000  \n",
       "3     250000000  \n",
       "4     250000000  \n",
       "..          ...  \n",
       "595   500000000  \n",
       "596   500000000  \n",
       "597   500000000  \n",
       "598   500000000  \n",
       "599   500000000  \n",
       "\n",
       "[600 rows x 9 columns]"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dfG"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th>TE</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Dist</th>\n",
       "      <th>%Async</th>\n",
       "      <th>Groups</th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td rowspan=\"5\" valign=\"top\">1,1</td>\n",
       "      <td rowspan=\"5\" valign=\"top\">0.0</td>\n",
       "      <td>16,2</td>\n",
       "      <td>112.087769</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>16,32</td>\n",
       "      <td>18.394706</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>16,4</td>\n",
       "      <td>61.887052</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>16,8</td>\n",
       "      <td>37.986463</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2,16</td>\n",
       "      <td>113.187865</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td rowspan=\"5\" valign=\"top\">2,2</td>\n",
       "      <td rowspan=\"5\" valign=\"top\">100.0</td>\n",
       "      <td>4,8</td>\n",
       "      <td>74.864688</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>8,16</td>\n",
       "      <td>37.999586</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>8,2</td>\n",
       "      <td>123.584176</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>8,32</td>\n",
       "      <td>31.730297</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>8,4</td>\n",
       "      <td>74.052463</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>200 rows × 1 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                            TE\n",
       "Dist %Async Groups            \n",
       "1,1  0.0    16,2    112.087769\n",
       "            16,32    18.394706\n",
       "            16,4     61.887052\n",
       "            16,8     37.986463\n",
       "            2,16    113.187865\n",
       "...                        ...\n",
       "2,2  100.0  4,8      74.864688\n",
       "            8,16     37.999586\n",
       "            8,2     123.584176\n",
       "            8,32     31.730297\n",
       "            8,4      74.052463\n",
       "\n",
       "[200 rows x 1 columns]"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "grouped_aggG"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>N</th>\n",
       "      <th>%Async</th>\n",
       "      <th>NP</th>\n",
       "      <th>NS</th>\n",
       "      <th>Dist</th>\n",
       "      <th>Matrix</th>\n",
       "      <th>Time</th>\n",
       "      <th>Iters</th>\n",
       "      <th>TC</th>\n",
       "      <th>TS</th>\n",
       "      <th>TA</th>\n",
       "      <th>S</th>\n",
       "      <th>TR</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>0</td>\n",
       "      <td>1000000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>8</td>\n",
       "      <td>32</td>\n",
       "      <td>2,2</td>\n",
       "      <td>100000</td>\n",
       "      <td>0.1</td>\n",
       "      <td>1000</td>\n",
       "      <td>1.341434</td>\n",
       "      <td>0.695848</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1000000000</td>\n",
       "      <td>2.037282</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>1</td>\n",
       "      <td>1000000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>8</td>\n",
       "      <td>32</td>\n",
       "      <td>2,2</td>\n",
       "      <td>100000</td>\n",
       "      <td>0.1</td>\n",
       "      <td>1000</td>\n",
       "      <td>1.405911</td>\n",
       "      <td>0.639849</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1000000000</td>\n",
       "      <td>2.045760</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2</td>\n",
       "      <td>1000000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>8</td>\n",
       "      <td>32</td>\n",
       "      <td>2,2</td>\n",
       "      <td>100000</td>\n",
       "      <td>0.1</td>\n",
       "      <td>1000</td>\n",
       "      <td>1.346017</td>\n",
       "      <td>0.747863</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1000000000</td>\n",
       "      <td>2.093880</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>3</td>\n",
       "      <td>1000000000</td>\n",
       "      <td>75.0</td>\n",
       "      <td>4</td>\n",
       "      <td>32</td>\n",
       "      <td>1,1</td>\n",
       "      <td>100000</td>\n",
       "      <td>0.1</td>\n",
       "      <td>1000</td>\n",
       "      <td>0.688062</td>\n",
       "      <td>0.064900</td>\n",
       "      <td>0.364941</td>\n",
       "      <td>250000000</td>\n",
       "      <td>1.117903</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>4</td>\n",
       "      <td>1000000000</td>\n",
       "      <td>75.0</td>\n",
       "      <td>4</td>\n",
       "      <td>32</td>\n",
       "      <td>1,1</td>\n",
       "      <td>100000</td>\n",
       "      <td>0.1</td>\n",
       "      <td>1000</td>\n",
       "      <td>0.702200</td>\n",
       "      <td>0.068039</td>\n",
       "      <td>0.412072</td>\n",
       "      <td>250000000</td>\n",
       "      <td>1.182311</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>595</td>\n",
       "      <td>1000000000</td>\n",
       "      <td>50.0</td>\n",
       "      <td>4</td>\n",
       "      <td>8</td>\n",
       "      <td>2,2</td>\n",
       "      <td>100000</td>\n",
       "      <td>0.1</td>\n",
       "      <td>1000</td>\n",
       "      <td>0.390444</td>\n",
       "      <td>0.142287</td>\n",
       "      <td>0.338576</td>\n",
       "      <td>500000000</td>\n",
       "      <td>0.871307</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>596</td>\n",
       "      <td>1000000000</td>\n",
       "      <td>50.0</td>\n",
       "      <td>4</td>\n",
       "      <td>8</td>\n",
       "      <td>2,2</td>\n",
       "      <td>100000</td>\n",
       "      <td>0.1</td>\n",
       "      <td>1000</td>\n",
       "      <td>0.351690</td>\n",
       "      <td>0.154699</td>\n",
       "      <td>0.354917</td>\n",
       "      <td>500000000</td>\n",
       "      <td>0.861306</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>597</td>\n",
       "      <td>1000000000</td>\n",
       "      <td>50.0</td>\n",
       "      <td>16</td>\n",
       "      <td>8</td>\n",
       "      <td>1,1</td>\n",
       "      <td>100000</td>\n",
       "      <td>0.1</td>\n",
       "      <td>1000</td>\n",
       "      <td>0.337472</td>\n",
       "      <td>0.081077</td>\n",
       "      <td>0.243481</td>\n",
       "      <td>500000000</td>\n",
       "      <td>0.662030</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>598</td>\n",
       "      <td>1000000000</td>\n",
       "      <td>50.0</td>\n",
       "      <td>16</td>\n",
       "      <td>8</td>\n",
       "      <td>1,1</td>\n",
       "      <td>100000</td>\n",
       "      <td>0.1</td>\n",
       "      <td>1000</td>\n",
       "      <td>0.351262</td>\n",
       "      <td>0.103176</td>\n",
       "      <td>0.261565</td>\n",
       "      <td>500000000</td>\n",
       "      <td>0.716003</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>599</td>\n",
       "      <td>1000000000</td>\n",
       "      <td>50.0</td>\n",
       "      <td>16</td>\n",
       "      <td>8</td>\n",
       "      <td>1,1</td>\n",
       "      <td>100000</td>\n",
       "      <td>0.1</td>\n",
       "      <td>1000</td>\n",
       "      <td>0.349151</td>\n",
       "      <td>0.094121</td>\n",
       "      <td>0.221750</td>\n",
       "      <td>500000000</td>\n",
       "      <td>0.665022</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>600 rows × 13 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "              N  %Async  NP  NS Dist  Matrix  Time  Iters        TC        TS  \\\n",
       "0    1000000000     0.0   8  32  2,2  100000   0.1   1000  1.341434  0.695848   \n",
       "1    1000000000     0.0   8  32  2,2  100000   0.1   1000  1.405911  0.639849   \n",
       "2    1000000000     0.0   8  32  2,2  100000   0.1   1000  1.346017  0.747863   \n",
       "3    1000000000    75.0   4  32  1,1  100000   0.1   1000  0.688062  0.064900   \n",
       "4    1000000000    75.0   4  32  1,1  100000   0.1   1000  0.702200  0.068039   \n",
       "..          ...     ...  ..  ..  ...     ...   ...    ...       ...       ...   \n",
       "595  1000000000    50.0   4   8  2,2  100000   0.1   1000  0.390444  0.142287   \n",
       "596  1000000000    50.0   4   8  2,2  100000   0.1   1000  0.351690  0.154699   \n",
       "597  1000000000    50.0  16   8  1,1  100000   0.1   1000  0.337472  0.081077   \n",
       "598  1000000000    50.0  16   8  1,1  100000   0.1   1000  0.351262  0.103176   \n",
       "599  1000000000    50.0  16   8  1,1  100000   0.1   1000  0.349151  0.094121   \n",
       "\n",
       "           TA           S        TR  \n",
       "0    0.000000  1000000000  2.037282  \n",
       "1    0.000000  1000000000  2.045760  \n",
       "2    0.000000  1000000000  2.093880  \n",
       "3    0.364941   250000000  1.117903  \n",
       "4    0.412072   250000000  1.182311  \n",
       "..        ...         ...       ...  \n",
       "595  0.338576   500000000  0.871307  \n",
       "596  0.354917   500000000  0.861306  \n",
       "597  0.243481   500000000  0.662030  \n",
       "598  0.261565   500000000  0.716003  \n",
       "599  0.221750   500000000  0.665022  \n",
       "\n",
       "[600 rows x 13 columns]"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dfM"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th>TC</th>\n",
       "      <th>TS</th>\n",
       "      <th>TA</th>\n",
       "      <th>TR</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Dist</th>\n",
       "      <th>%Async</th>\n",
       "      <th>NP</th>\n",
       "      <th>NS</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td rowspan=\"5\" valign=\"top\">1,1</td>\n",
       "      <td rowspan=\"5\" valign=\"top\">0.0</td>\n",
       "      <td rowspan=\"4\" valign=\"top\">2</td>\n",
       "      <td>4</td>\n",
       "      <td>0.220380</td>\n",
       "      <td>0.314893</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.535273</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>8</td>\n",
       "      <td>0.248143</td>\n",
       "      <td>0.375003</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.623146</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>16</td>\n",
       "      <td>0.339042</td>\n",
       "      <td>0.486650</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.825692</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>32</td>\n",
       "      <td>0.743840</td>\n",
       "      <td>0.506385</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.250225</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>4</td>\n",
       "      <td>2</td>\n",
       "      <td>0.197858</td>\n",
       "      <td>0.311136</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.508994</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td rowspan=\"5\" valign=\"top\">2,2</td>\n",
       "      <td rowspan=\"5\" valign=\"top\">100.0</td>\n",
       "      <td>16</td>\n",
       "      <td>32</td>\n",
       "      <td>1.358891</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.419016</td>\n",
       "      <td>2.777907</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td rowspan=\"4\" valign=\"top\">32</td>\n",
       "      <td>2</td>\n",
       "      <td>0.591882</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>2.477300</td>\n",
       "      <td>3.069183</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>4</td>\n",
       "      <td>0.804965</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.729638</td>\n",
       "      <td>2.534603</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>8</td>\n",
       "      <td>0.935128</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.520682</td>\n",
       "      <td>2.455810</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>16</td>\n",
       "      <td>1.221248</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.541904</td>\n",
       "      <td>2.763152</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>200 rows × 4 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                         TC        TS        TA        TR\n",
       "Dist %Async NP NS                                        \n",
       "1,1  0.0    2  4   0.220380  0.314893  0.000000  0.535273\n",
       "               8   0.248143  0.375003  0.000000  0.623146\n",
       "               16  0.339042  0.486650  0.000000  0.825692\n",
       "               32  0.743840  0.506385  0.000000  1.250225\n",
       "            4  2   0.197858  0.311136  0.000000  0.508994\n",
       "...                     ...       ...       ...       ...\n",
       "2,2  100.0  16 32  1.358891  0.000000  1.419016  2.777907\n",
       "            32 2   0.591882  0.000000  2.477300  3.069183\n",
       "               4   0.804965  0.000000  1.729638  2.534603\n",
       "               8   0.935128  0.000000  1.520682  2.455810\n",
       "               16  1.221248  0.000000  1.541904  2.763152\n",
       "\n",
       "[200 rows x 4 columns]"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "grouped_aggM"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>N</th>\n",
       "      <th>%Async</th>\n",
       "      <th>NP</th>\n",
       "      <th>N_par</th>\n",
       "      <th>NS</th>\n",
       "      <th>Dist</th>\n",
       "      <th>Matrix</th>\n",
       "      <th>Time</th>\n",
       "      <th>Iters</th>\n",
       "      <th>Ti</th>\n",
       "      <th>Tt</th>\n",
       "      <th>To</th>\n",
       "      <th>S</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>0</td>\n",
       "      <td>1000000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>32</td>\n",
       "      <td>8</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>100000</td>\n",
       "      <td>0.1</td>\n",
       "      <td>1000</td>\n",
       "      <td>0.005463</td>\n",
       "      <td>0.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>1000000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>1</td>\n",
       "      <td>1000000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>32</td>\n",
       "      <td>8</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>100000</td>\n",
       "      <td>0.1</td>\n",
       "      <td>1000</td>\n",
       "      <td>0.005350</td>\n",
       "      <td>0.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>1000000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2</td>\n",
       "      <td>1000000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>32</td>\n",
       "      <td>8</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>100000</td>\n",
       "      <td>0.1</td>\n",
       "      <td>1000</td>\n",
       "      <td>0.005355</td>\n",
       "      <td>0.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>1000000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>3</td>\n",
       "      <td>1000000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>32</td>\n",
       "      <td>8</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>100000</td>\n",
       "      <td>0.1</td>\n",
       "      <td>1000</td>\n",
       "      <td>0.005354</td>\n",
       "      <td>0.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>1000000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>4</td>\n",
       "      <td>1000000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>32</td>\n",
       "      <td>8</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>100000</td>\n",
       "      <td>0.1</td>\n",
       "      <td>1000</td>\n",
       "      <td>0.005352</td>\n",
       "      <td>0.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>1000000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>1199995</td>\n",
       "      <td>1000000000</td>\n",
       "      <td>50.0</td>\n",
       "      <td>8</td>\n",
       "      <td>16</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>100000</td>\n",
       "      <td>0.1</td>\n",
       "      <td>1000</td>\n",
       "      <td>0.024075</td>\n",
       "      <td>0.0</td>\n",
       "      <td>27.0</td>\n",
       "      <td>500000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>1199996</td>\n",
       "      <td>1000000000</td>\n",
       "      <td>50.0</td>\n",
       "      <td>8</td>\n",
       "      <td>16</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>100000</td>\n",
       "      <td>0.1</td>\n",
       "      <td>1000</td>\n",
       "      <td>0.024076</td>\n",
       "      <td>0.0</td>\n",
       "      <td>27.0</td>\n",
       "      <td>500000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>1199997</td>\n",
       "      <td>1000000000</td>\n",
       "      <td>50.0</td>\n",
       "      <td>8</td>\n",
       "      <td>16</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>100000</td>\n",
       "      <td>0.1</td>\n",
       "      <td>1000</td>\n",
       "      <td>0.024076</td>\n",
       "      <td>0.0</td>\n",
       "      <td>27.0</td>\n",
       "      <td>500000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>1199998</td>\n",
       "      <td>1000000000</td>\n",
       "      <td>50.0</td>\n",
       "      <td>8</td>\n",
       "      <td>16</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>100000</td>\n",
       "      <td>0.1</td>\n",
       "      <td>1000</td>\n",
       "      <td>0.024411</td>\n",
       "      <td>0.0</td>\n",
       "      <td>27.0</td>\n",
       "      <td>500000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>1199999</td>\n",
       "      <td>1000000000</td>\n",
       "      <td>50.0</td>\n",
       "      <td>8</td>\n",
       "      <td>16</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>100000</td>\n",
       "      <td>0.1</td>\n",
       "      <td>1000</td>\n",
       "      <td>0.024075</td>\n",
       "      <td>0.0</td>\n",
       "      <td>27.0</td>\n",
       "      <td>500000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>1200000 rows × 13 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                  N  %Async  NP  N_par  NS  Dist  Matrix  Time  Iters  \\\n",
       "0        1000000000     0.0  32      8   0     2  100000   0.1   1000   \n",
       "1        1000000000     0.0  32      8   0     2  100000   0.1   1000   \n",
       "2        1000000000     0.0  32      8   0     2  100000   0.1   1000   \n",
       "3        1000000000     0.0  32      8   0     2  100000   0.1   1000   \n",
       "4        1000000000     0.0  32      8   0     2  100000   0.1   1000   \n",
       "...             ...     ...  ..    ...  ..   ...     ...   ...    ...   \n",
       "1199995  1000000000    50.0   8     16   0     1  100000   0.1   1000   \n",
       "1199996  1000000000    50.0   8     16   0     1  100000   0.1   1000   \n",
       "1199997  1000000000    50.0   8     16   0     1  100000   0.1   1000   \n",
       "1199998  1000000000    50.0   8     16   0     1  100000   0.1   1000   \n",
       "1199999  1000000000    50.0   8     16   0     1  100000   0.1   1000   \n",
       "\n",
       "               Ti   Tt    To           S  \n",
       "0        0.005463  0.0   6.0  1000000000  \n",
       "1        0.005350  0.0   6.0  1000000000  \n",
       "2        0.005355  0.0   6.0  1000000000  \n",
       "3        0.005354  0.0   6.0  1000000000  \n",
       "4        0.005352  0.0   6.0  1000000000  \n",
       "...           ...  ...   ...         ...  \n",
       "1199995  0.024075  0.0  27.0   500000000  \n",
       "1199996  0.024076  0.0  27.0   500000000  \n",
       "1199997  0.024076  0.0  27.0   500000000  \n",
       "1199998  0.024411  0.0  27.0   500000000  \n",
       "1199999  0.024075  0.0  27.0   500000000  \n",
       "\n",
       "[1200000 rows x 13 columns]"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dfL"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th>Ti</th>\n",
       "      <th>Iters</th>\n",
       "      <th>To</th>\n",
       "      <th>Iters2</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Tt</th>\n",
       "      <th>Dist</th>\n",
       "      <th>%Async</th>\n",
       "      <th>NP</th>\n",
       "      <th>NS</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td rowspan=\"5\" valign=\"top\">0.0</td>\n",
       "      <td rowspan=\"5\" valign=\"top\">1</td>\n",
       "      <td rowspan=\"5\" valign=\"top\">0.0</td>\n",
       "      <td rowspan=\"4\" valign=\"top\">2</td>\n",
       "      <td>4</td>\n",
       "      <td>0.099861</td>\n",
       "      <td>500.0</td>\n",
       "      <td>112.000000</td>\n",
       "      <td>500.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>8</td>\n",
       "      <td>0.099849</td>\n",
       "      <td>500.0</td>\n",
       "      <td>112.000000</td>\n",
       "      <td>500.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>16</td>\n",
       "      <td>0.099860</td>\n",
       "      <td>500.0</td>\n",
       "      <td>112.000000</td>\n",
       "      <td>500.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>32</td>\n",
       "      <td>0.099853</td>\n",
       "      <td>500.0</td>\n",
       "      <td>112.000000</td>\n",
       "      <td>500.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>4</td>\n",
       "      <td>2</td>\n",
       "      <td>0.049642</td>\n",
       "      <td>500.0</td>\n",
       "      <td>55.666667</td>\n",
       "      <td>500.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td rowspan=\"5\" valign=\"top\">1.0</td>\n",
       "      <td rowspan=\"5\" valign=\"top\">2</td>\n",
       "      <td rowspan=\"5\" valign=\"top\">100.0</td>\n",
       "      <td>16</td>\n",
       "      <td>32</td>\n",
       "      <td>0.034899</td>\n",
       "      <td>21.0</td>\n",
       "      <td>14.000000</td>\n",
       "      <td>21.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td rowspan=\"4\" valign=\"top\">32</td>\n",
       "      <td>2</td>\n",
       "      <td>0.012084</td>\n",
       "      <td>101.0</td>\n",
       "      <td>7.000000</td>\n",
       "      <td>101.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>4</td>\n",
       "      <td>0.015599</td>\n",
       "      <td>54.0</td>\n",
       "      <td>7.000000</td>\n",
       "      <td>54.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>8</td>\n",
       "      <td>0.012685</td>\n",
       "      <td>54.0</td>\n",
       "      <td>7.000000</td>\n",
       "      <td>54.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>16</td>\n",
       "      <td>0.015421</td>\n",
       "      <td>44.0</td>\n",
       "      <td>7.000000</td>\n",
       "      <td>44.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>360 rows × 4 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                             Ti  Iters          To  Iters2\n",
       "Tt  Dist %Async NP NS                                     \n",
       "0.0 1    0.0    2  4   0.099861  500.0  112.000000   500.0\n",
       "                   8   0.099849  500.0  112.000000   500.0\n",
       "                   16  0.099860  500.0  112.000000   500.0\n",
       "                   32  0.099853  500.0  112.000000   500.0\n",
       "                4  2   0.049642  500.0   55.666667   500.0\n",
       "...                         ...    ...         ...     ...\n",
       "1.0 2    100.0  16 32  0.034899   21.0   14.000000    21.0\n",
       "                32 2   0.012084  101.0    7.000000   101.0\n",
       "                   4   0.015599   54.0    7.000000    54.0\n",
       "                   8   0.012685   54.0    7.000000    54.0\n",
       "                   16  0.015421   44.0    7.000000    44.0\n",
       "\n",
       "[360 rows x 4 columns]"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "grouped_aggL"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "TIEMPO EJECUCCION\n",
      "Distribución BestFit -------------------------\n",
      "Para  2  padres\n",
      "EX numC= 4 p = 0.039 Diff = 0.09 Asíncrono\n",
      "Para  4  padres\n",
      "Para  8  padres\n",
      "EX numC= 4 p = 0.0 Diff = 1.411 Síncrono\n",
      "Para  16  padres\n",
      "EX numC= 2 p = 0.014 Diff = 3.662 Asíncrono\n",
      "Para  32  padres\n",
      "EX numC= 4 p = 0.002 Diff = 4.589 Asíncrono\n",
      "Distribución WorstFit -------------------------\n",
      "Para  2  padres\n",
      "Para  4  padres\n",
      "EX numC= 16 p = 0.046 Diff = 0.304 Síncrono\n",
      "EX numC= 32 p = 0.012 Diff = 0.542 Síncrono\n",
      "Para  8  padres\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/usuario/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:10: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n",
      "  # Remove the CWD from sys.path while we load stuff.\n",
      "/home/usuario/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:11: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n",
      "  # This is added back by InteractiveShellApp.init_path()\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Para  16  padres\n",
      "EX numC= 2 p = 0.023 Diff = 6.349 Asíncrono\n",
      "EX numC= 4 p = 0.0 Diff = 1.799 Asíncrono\n",
      "EX numC= 8 p = 0.046 Diff = 0.261 Asíncrono\n",
      "Para  32  padres\n",
      "EX numC= 2 p = 0.01 Diff = 18.514 Asíncrono\n",
      "EX numC= 4 p = 0.0 Diff = 4.454 Asíncrono\n",
      "EX numC= 8 p = 0.003 Diff = 1.92 Asíncrono\n"
     ]
    }
   ],
   "source": [
    "print(\"TIEMPO EJECUCCION\")\n",
    "for dist in [1,2]:\n",
    "    print(\"Distribución \" + dist_names[dist] + \" -------------------------\")\n",
    "    dist_v = str(dist)+\",\"+str(dist)\n",
    "    for numP in values:\n",
    "        print(\"Para \", numP, \" padres\")\n",
    "        for numC in values:\n",
    "            if numP != numC:\n",
    "                group = str(numP) + \",\" + str(numC)\n",
    "                v1 = dfG[(dfG[\"%Async\"] == 0.0)][(dfG.Groups == group)][(dfG[\"Dist\"] == dist_v)]['TE']\n",
    "                v2 = dfG[(dfG[\"%Async\"] == 100.0)][(dfG.Groups == group)][(dfG[\"Dist\"] == dist_v)]['TE']\n",
    "                res = stats.ttest_ind(v1, v2)\n",
    "                diff = grouped_aggG['TE'].loc[(dist_v, 0.0, group)] - grouped_aggG['TE'].loc[(dist_v, 100.0, group)]\n",
    "                if diff > 0:\n",
    "                    mejor = \"Asíncrono\"\n",
    "                else:\n",
    "                    mejor = \"Síncrono\"\n",
    "                    \n",
    "                if res[1] < p_value:\n",
    "                    print(\"EX numC=\", numC, \"p =\", round(res[1],3), \"Diff =\", abs(round(diff,3)), mejor)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "TIEMPO MALLEABILITY\n",
      "Distribución 1 -------------------------\n",
      "Para  2  padres\n",
      "TR numC= 8 p = 0.0 Diff = 0.029 Síncrono\n",
      "Para  4  padres\n",
      "TR numC= 8 p = 0.006 Diff = 0.043 Síncrono\n",
      "TR numC= 32 p = 0.025 Diff = 0.052 Síncrono\n",
      "Para  8  padres\n",
      "TR numC= 4 p = 0.016 Diff = 0.022 Asíncrono\n",
      "TR numC= 16 p = 0.009 Diff = 0.031 Síncrono\n",
      "TR numC= 32 p = 0.0 Diff = 0.483 Síncrono\n",
      "Para  16  padres\n",
      "TR numC= 8 p = 0.002 Diff = 0.072 Síncrono\n",
      "TR numC= 32 p = 0.019 Diff = 0.549 Síncrono\n",
      "Para  32  padres\n",
      "TR numC= 4 p = 0.002 Diff = 0.981 Síncrono\n",
      "TR numC= 8 p = 0.001 Diff = 0.972 Síncrono\n",
      "TR numC= 16 p = 0.001 Diff = 0.831 Síncrono\n",
      "Distribución 2 -------------------------\n",
      "Para  2  padres\n",
      "TR numC= 4 p = 0.0 Diff = 0.069 Síncrono\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/usuario/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:9: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n",
      "  if __name__ == '__main__':\n",
      "/home/usuario/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:10: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n",
      "  # Remove the CWD from sys.path while we load stuff.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "TR numC= 8 p = 0.029 Diff = 0.035 Síncrono\n",
      "Para  4  padres\n",
      "TR numC= 8 p = 0.02 Diff = 0.031 Síncrono\n",
      "TR numC= 32 p = 0.009 Diff = 0.601 Síncrono\n",
      "Para  8  padres\n",
      "TR numC= 16 p = 0.011 Diff = 0.729 Síncrono\n",
      "TR numC= 32 p = 0.018 Diff = 0.423 Síncrono\n",
      "Para  16  padres\n",
      "TR numC= 4 p = 0.001 Diff = 0.884 Síncrono\n",
      "TR numC= 32 p = 0.021 Diff = 0.36 Síncrono\n",
      "Para  32  padres\n",
      "TR numC= 2 p = 0.029 Diff = 1.548 Síncrono\n",
      "TR numC= 4 p = 0.008 Diff = 0.84 Síncrono\n",
      "TR numC= 8 p = 0.011 Diff = 0.726 Síncrono\n",
      "TR numC= 16 p = 0.004 Diff = 0.606 Síncrono\n"
     ]
    }
   ],
   "source": [
    "print(\"TIEMPO MALLEABILITY\")\n",
    "for dist in [1,2]:\n",
    "    print(\"Distribución \" + dist_names[dist] + \" -------------------------\")\n",
    "    dist_v = str(dist)+\",\"+str(dist)\n",
    "    for numP in values:\n",
    "        print(\"Para \", numP, \" padres\")\n",
    "        for numC in values:\n",
    "            if numP != numC:\n",
    "                v1 = dfM[(dfM[\"%Async\"] == 0.0)][(dfM.NP == numP)][(dfM.NS == numC)][(dfM[\"Dist\"] == dist_v)]['TS']\n",
    "                v2 = dfM[(dfM[\"%Async\"] == 100.0)][(dfM.NP == numP)][(dfM.NS == numC)][(dfM[\"Dist\"] == dist_v)]['TA']\n",
    "                res = stats.ttest_ind(v1, v2)\n",
    "                diff = grouped_aggM['TS'].loc[(dist_v, 0.0, numP, numC)] - grouped_aggM['TA'].loc[(dist_v, 100.0, numP, numC)]\n",
    "                if diff > 0:\n",
    "                    mejor = \"Asíncrono\"\n",
    "                else:\n",
    "                    mejor = \"Síncrono\"\n",
    "                if res[1] < p_value:\n",
    "                    print(\"TR numC=\", numC, \"p =\", round(res[1],3), \"Diff =\", abs(round(diff,3)), mejor)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "TIEMPO Iters\n",
      "Distribución BestFit -------------------------\n",
      "Para  2  padres\n",
      "Ti numC= 4 p = 0.035 Diff = 0.0001 Síncrono\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/usuario/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:12: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n",
      "  if sys.path[0] == '':\n",
      "/home/usuario/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:13: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n",
      "  del sys.path[0]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Ti numC= 8 p = 0.025 Diff = 0.0001 Síncrono\n",
      "Ti numC= 16 p = 0.002 Diff = 0.0001 Síncrono\n",
      "Ti numC= 32 p = 0.007 Diff = 0.0001 Síncrono\n",
      "Para  4  padres\n",
      "Ti numC= 16 p = 0.0 Diff = 0.0006 Síncrono\n",
      "Para  8  padres\n",
      "Ti numC= 4 p = 0.0 Diff = 0.0009 Síncrono\n",
      "Ti numC= 32 p = 0.007 Diff = 0.0029 Síncrono\n",
      "Para  16  padres\n",
      "Ti numC= 32 p = 0.0 Diff = 0.0097 Síncrono\n",
      "Para  32  padres\n",
      "Ti numC= 2 p = 0.0 Diff = 0.0029 Síncrono\n",
      "Ti numC= 4 p = 0.0 Diff = 0.0056 Síncrono\n",
      "Ti numC= 8 p = 0.0 Diff = 0.0055 Síncrono\n",
      "Ti numC= 16 p = 0.0 Diff = 0.0053 Síncrono\n",
      "Distribución WorstFit -------------------------\n",
      "Para  2  padres\n",
      "Ti numC= 32 p = 0.024 Diff = 0.0256 Síncrono\n",
      "Para  4  padres\n",
      "Ti numC= 16 p = 0.0 Diff = 0.0243 Síncrono\n",
      "Ti numC= 32 p = 0.0 Diff = 0.0343 Síncrono\n",
      "Para  8  padres\n",
      "Ti numC= 4 p = 0.036 Diff = 0.0044 Síncrono\n",
      "Ti numC= 16 p = 0.0 Diff = 0.008 Síncrono\n",
      "Ti numC= 32 p = 0.0 Diff = 0.0225 Síncrono\n",
      "Para  16  padres\n",
      "Ti numC= 2 p = 0.0 Diff = 0.0067 Síncrono\n",
      "Ti numC= 4 p = 0.0 Diff = 0.0092 Síncrono\n",
      "Ti numC= 8 p = 0.0 Diff = 0.0098 Síncrono\n",
      "Ti numC= 32 p = 0.0 Diff = 0.0224 Síncrono\n",
      "Para  32  padres\n",
      "Ti numC= 2 p = 0.0 Diff = 0.0058 Síncrono\n",
      "Ti numC= 4 p = 0.0 Diff = 0.0094 Síncrono\n",
      "Ti numC= 8 p = 0.0 Diff = 0.0064 Síncrono\n",
      "Ti numC= 16 p = 0.0 Diff = 0.0092 Síncrono\n"
     ]
    }
   ],
   "source": [
    "print(\"TIEMPO Iters\")\n",
    "for dist in [1,2]:\n",
    "    print(\"Distribución \" + dist_names[dist] + \" -------------------------\")\n",
    "    dist_v = str(dist)+\",\"+str(dist)\n",
    "    for numP in values:\n",
    "        print(\"Para \", numP, \" padres\")\n",
    "        for numC in values:\n",
    "            if numP != numC:\n",
    "                #exp = dfL[(dfL[\"Tt\"] == 0)][(dfL[\"Dist\"] == 1)][(dfL[\"%Async\"] == 0.0)][(dfL.NP == numP)][(dfL.NS == numC)]\n",
    "                #TimeOp = exp['Ti'] \n",
    "                #print(TimeOp)\n",
    "                v1 = dfL[(dfL[\"Tt\"] == 0)][(dfL[\"Dist\"] == dist)][(dfL[\"%Async\"] == 100.0)][(dfL.NP == numP)][(dfL.NS == numC)]['Ti']\n",
    "                v2 = dfL[(dfL[\"Tt\"] == 1)][(dfL[\"Dist\"] == dist)][(dfL[\"%Async\"] == 100.0)][(dfL.NP == numP)][(dfL.NS == numC)]['Ti']\n",
    "                res = stats.ttest_ind(v1, v2, equal_var = False)\n",
    "                diff = grouped_aggL['Ti'].loc[(0, dist, 0.0, numP, numC)] - grouped_aggL['Ti'].loc[(1, dist, 100.0, numP, numC)]\n",
    "                if diff > 0:\n",
    "                    mejor = \"Asíncrono\"\n",
    "                else:\n",
    "                    mejor = \"Síncrono\"\n",
    "                if res[1] < p_value:\n",
    "                    #and abs(diff) > grouped_aggL['Ti'].loc[(0, dist, 0.0, numP, numC)]\n",
    "                    print(\"Ti numC=\", numC, \"p =\", round(res[1],3), \"Diff =\", abs(round(diff,4)), mejor)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Distribución BestFit -------------------------\n",
      "Para  2  padres\n",
      "NC=4 Es mejor Asíncrono con una diff de 0.123\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/usuario/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:10: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n",
      "  # Remove the CWD from sys.path while we load stuff.\n",
      "/home/usuario/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:14: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n",
      "  \n",
      "/home/usuario/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:16: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n",
      "  app.launch_new_instance()\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "NC=8 Es mejor Asíncrono con una diff de 0.07\n",
      "NC=16 Es mejor Asíncrono con una diff de 0.046\n",
      "NC=32 Es mejor Asíncrono con una diff de 0.014\n",
      "Para  4  padres\n",
      "NC=2 Es mejor Asíncrono con una diff de 0.645\n",
      "NC=8 Es mejor Asíncrono con una diff de 0.13\n",
      "NC=16 Es mejor Asíncrono con una diff de 0.052\n",
      "NC=32 Es mejor Síncrono con una diff de 0.005\n",
      "Para  8  padres\n",
      "NC=2 Es mejor Asíncrono con una diff de 1.523\n",
      "NC=4 Es mejor Asíncrono con una diff de 0.354\n",
      "NC=16 Es mejor Asíncrono con una diff de 0.066\n",
      "NC=32 Es mejor Síncrono con una diff de 0.327\n",
      "Para  16  padres\n",
      "NC=2 Es mejor Asíncrono con una diff de 3.676\n",
      "NC=4 Es mejor Asíncrono con una diff de 1.235\n",
      "NC=8 Es mejor Asíncrono con una diff de 0.406\n",
      "NC=32 Es mejor Síncrono con una diff de 0.304\n",
      "Para  32  padres\n",
      "NC=2 Es mejor Asíncrono con una diff de 16.171\n",
      "NC=4 Es mejor Asíncrono con una diff de 4.551\n",
      "NC=8 Es mejor Asíncrono con una diff de 1.599\n",
      "NC=16 Es mejor Asíncrono con una diff de 0.12\n",
      "Distribución WorstFit -------------------------\n",
      "Para  2  padres\n",
      "NC=4 Es mejor Asíncrono con una diff de 0.13\n",
      "NC=8 Es mejor Asíncrono con una diff de 0.064\n",
      "NC=16 Es mejor Asíncrono con una diff de 0.034\n",
      "NC=32 Es mejor Síncrono con una diff de 0.151\n",
      "Para  4  padres\n",
      "NC=2 Es mejor Asíncrono con una diff de 0.637\n",
      "NC=8 Es mejor Asíncrono con una diff de 0.142\n",
      "NC=16 Es mejor Síncrono con una diff de 0.28\n",
      "NC=32 Es mejor Síncrono con una diff de 0.499\n",
      "Para  8  padres\n",
      "NC=2 Es mejor Asíncrono con una diff de 1.575\n",
      "NC=4 Es mejor Asíncrono con una diff de 0.344\n",
      "NC=16 Es mejor Síncrono con una diff de 0.32\n",
      "NC=32 Es mejor Síncrono con una diff de 0.278\n",
      "Para  16  padres\n",
      "NC=2 Es mejor Asíncrono con una diff de 6.404\n",
      "NC=4 Es mejor Asíncrono con una diff de 1.803\n",
      "NC=8 Es mejor Asíncrono con una diff de 0.308\n",
      "NC=32 Es mejor Síncrono con una diff de 0.113\n",
      "Para  32  padres\n",
      "NC=2 Es mejor Asíncrono con una diff de 18.438\n",
      "NC=4 Es mejor Asíncrono con una diff de 4.533\n",
      "NC=8 Es mejor Asíncrono con una diff de 1.927\n",
      "NC=16 Es mejor Asíncrono con una diff de 0.481\n"
     ]
    }
   ],
   "source": [
    "iters = dfM['Iters'].mean()\n",
    "resultados = [0,0]\n",
    "for dist in [1,2]:\n",
    "    print(\"Distribución \" + dist_names[dist] + \" -------------------------\")\n",
    "    dist_v = str(dist)+\",\"+str(dist)\n",
    "    for numP in values:\n",
    "        print(\"Para \", numP, \" padres\")\n",
    "        for numC in values:\n",
    "            if numP != numC:\n",
    "                Titer = dfL[(dfL[\"Tt\"] == 0)][(dfL[\"Dist\"] == dist)][(dfL.NP == numC)]['Ti'].mean() #Tiempo por iteracion\n",
    "                i=0\n",
    "                for adr in [0.0, 100.0]:\n",
    "                \n",
    "                    auxExp = dfM[(dfM[\"Dist\"] == dist_v)][(dfM[\"%Async\"] == adr)][(dfM.NP == numP)][(dfM.NS == numC)]\n",
    "                    Tr = auxExp['TS'].mean() + auxExp['TA'].mean() #Tiempo de redistribucion\n",
    "                    M_it = dfL[(dfL[\"Tt\"] == 1)][(dfL[\"Dist\"] == dist)][(dfL[\"%Async\"] == adr)][(dfL.NP == numP)][(dfL.NS == numC)]['Ti'].count()/3 #Iteraciones asincronas\n",
    "                    #No se presupone una diferencia temporal entre iteraciones sincronas y asincronas\n",
    "                    if(M_it > iters):\n",
    "                        M_it = iters\n",
    "                    resultados[i] = (iters - M_it) * Titer + Tr\n",
    "                    i+=1\n",
    "                    #print(M_it)\n",
    "                    #print(Titer)\n",
    "                    #print((iters - M_it) * Titer)\n",
    "                    #print(Tr)\n",
    "                    #print(\"End\")\n",
    "                \n",
    "                if resultados[0] > resultados[1]:\n",
    "                    mejor = \"Asíncrono\"\n",
    "                else:\n",
    "                    mejor = \"Síncrono\"\n",
    "                diff = abs(round(resultados[0] - resultados[1], 3))\n",
    "                print(\"NC=\"+ str(numC) + \" Es mejor \" + mejor + \" con una diff de \"+  str(diff))\n",
    "                #TODO Comprobar"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th>Ti</th>\n",
       "      <th>Iters</th>\n",
       "      <th>To</th>\n",
       "      <th>Iters2</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Tt</th>\n",
       "      <th>Dist</th>\n",
       "      <th>%Async</th>\n",
       "      <th>NP</th>\n",
       "      <th>NS</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td rowspan=\"5\" valign=\"top\">0.0</td>\n",
       "      <td rowspan=\"5\" valign=\"top\">1</td>\n",
       "      <td rowspan=\"5\" valign=\"top\">0.0</td>\n",
       "      <td rowspan=\"4\" valign=\"top\">2</td>\n",
       "      <td>4</td>\n",
       "      <td>0.099861</td>\n",
       "      <td>500.0</td>\n",
       "      <td>112.000000</td>\n",
       "      <td>500.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>8</td>\n",
       "      <td>0.099849</td>\n",
       "      <td>500.0</td>\n",
       "      <td>112.000000</td>\n",
       "      <td>500.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>16</td>\n",
       "      <td>0.099860</td>\n",
       "      <td>500.0</td>\n",
       "      <td>112.000000</td>\n",
       "      <td>500.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>32</td>\n",
       "      <td>0.099853</td>\n",
       "      <td>500.0</td>\n",
       "      <td>112.000000</td>\n",
       "      <td>500.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>4</td>\n",
       "      <td>2</td>\n",
       "      <td>0.049642</td>\n",
       "      <td>500.0</td>\n",
       "      <td>55.666667</td>\n",
       "      <td>500.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td rowspan=\"5\" valign=\"top\">1.0</td>\n",
       "      <td rowspan=\"5\" valign=\"top\">2</td>\n",
       "      <td rowspan=\"5\" valign=\"top\">100.0</td>\n",
       "      <td>16</td>\n",
       "      <td>32</td>\n",
       "      <td>0.034899</td>\n",
       "      <td>21.0</td>\n",
       "      <td>14.000000</td>\n",
       "      <td>21.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td rowspan=\"4\" valign=\"top\">32</td>\n",
       "      <td>2</td>\n",
       "      <td>0.012084</td>\n",
       "      <td>101.0</td>\n",
       "      <td>7.000000</td>\n",
       "      <td>101.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>4</td>\n",
       "      <td>0.015599</td>\n",
       "      <td>54.0</td>\n",
       "      <td>7.000000</td>\n",
       "      <td>54.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>8</td>\n",
       "      <td>0.012685</td>\n",
       "      <td>54.0</td>\n",
       "      <td>7.000000</td>\n",
       "      <td>54.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>16</td>\n",
       "      <td>0.015421</td>\n",
       "      <td>44.0</td>\n",
       "      <td>7.000000</td>\n",
       "      <td>44.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>360 rows × 4 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                             Ti  Iters          To  Iters2\n",
       "Tt  Dist %Async NP NS                                     \n",
       "0.0 1    0.0    2  4   0.099861  500.0  112.000000   500.0\n",
       "                   8   0.099849  500.0  112.000000   500.0\n",
       "                   16  0.099860  500.0  112.000000   500.0\n",
       "                   32  0.099853  500.0  112.000000   500.0\n",
       "                4  2   0.049642  500.0   55.666667   500.0\n",
       "...                         ...    ...         ...     ...\n",
       "1.0 2    100.0  16 32  0.034899   21.0   14.000000    21.0\n",
       "                32 2   0.012084  101.0    7.000000   101.0\n",
       "                   4   0.015599   54.0    7.000000    54.0\n",
       "                   8   0.012685   54.0    7.000000    54.0\n",
       "                   16  0.015421   44.0    7.000000    44.0\n",
       "\n",
       "[360 rows x 4 columns]"
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "grouped_aggL"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 88,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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kO539wOHdswsmcjkJhERERGR9y2WQPqKmX0TSDezjwJPA3+Ib1kiIiIi0lvEEkhvBhqApcD/A14AvhXPokRERESk94hl2aeDZvY88Ly7N3RBTSIiIiLSi3Q4QmoRd5jZNmAFUG1mDWb27a4rT0RERER6us5u2V9PZHZ9ubvnu3secBpwupl9tUuqExEREZEer7NA+q/AdHdfd+iAu68FLo++JiIiIiLyvnUWSMPuvu3Ig9HnSMPxK0lEREREepPOAumB9/iaiIiIiEjMOptlf4qZ7W7nuAFpcapHRERERHqZDgOpu4e6shARERER6Z1iWRhfRERERCRuFEhFREREJFBxDaRmdp6ZVZvZajO7uZPzPmNmbmYT41mPiIiIiCSeuAVSMwsBPwHOB8qA6WZW1s55WcBXgLnxqkVEREREElc8R0grgNXuvtbdDwAzgantnPcdYAbwdhxrEREREZEEFc9AOgjY2Ga/NnrsMDMbBwxx9z/GsQ4RERERSWDxDKTWzjE//KJZEvBD4MajXsjsajObb2bzGxoajmOJIiIiIhK0eAbSWmBIm/3BwKY2+1nAScDLZrYemATMam9ik7s/7O4T3X1iYWFhHEsWERERka4Wz0A6Dyg1s2FmlgJMA2YdetHdd7l7gbuXuHsJ8BrwCXefH8eaRERERCTBxC2QunsLcC3wIvAm8JS7Lzezu8zsE/H6XBERERHpXjrrZf++ufsLwAtHHPt2B+d+JJ61iIiIiEhiUqcmEREREQmUAqmIiIiIBEqBVEREREQCpUAqIiIiIoFSIBURERGRQCmQioiIiEigFEhFREREJFAKpCIiIiISKAVSEREREQmUAqmIiIiIBEqBVEREREQCpUAqIiIiIoFSIBURERGRQCmQioiIiEigFEhFREREJFAKpCIiIiISKAVSEREREQmUAqmIiIiIBEqBVEREREQCpUAqIiIiIoFSIBURERGRQCmQioiIiEigFEhFREREJFAKpCIiIiISKAVSEREREQmUAqmIiIiIBEqBVEREREQCpUAqIiIiIoFSIBURERGRQCmQioiIiEigFEhFREREJFAKpCIiIiISKAVSEREREQmUAqmIiIiIBEqBVEREREQCpUAqIiIiIoFSIBURERGRQCmQioiIiEigFEhFREREJFAKpCIiIiISKAVSEREREQmUAqmIiIiIBEqBVEREREQCpUAqIiIiIoFSIBURERGRQCmQioiIiEigFEhFREREJFAKpCIiIiISKAVSEREREQmUAqmIiIiIBEqBVEREREQCpUAqIiIiIoFSIBURERGRQCmQioiIiEigFEhFREREJFBxDaRmdp6ZVZvZajO7uZ3XbzCzKjNbYmZ/M7Oh8axHRERERBJP3AKpmYWAnwDnA2XAdDMrO+K0RcBEdz8ZeAaYEa96RERERCQxxXOEtAJY7e5r3f0AMBOY2vYEd5/t7m9Fd18DBsexHhERERFJQPEMpIOAjW32a6PHOvIF4M/tvWBmV5vZfDOb39DQcBxLFBEREZGgxTOQWjvHvN0TzS4HJgL3tPe6uz/s7hPdfWJhYeFxLFFEREREgpYcx2vXAkPa7A8GNh15kpmdDdwKfNjd98exHhERERFJQPEcIZ0HlJrZMDNLAaYBs9qeYGbjgJ8Bn3D3+jjWIiIiIiIJKm6B1N1bgGuBF4E3gafcfbmZ3WVmn4iedg+QCTxtZm+Y2awOLiciIiIiPVQ8b9nj7i8ALxxx7Nttts+O5+eLiIiISOJTpyYRERERCZQCqYiIiIgESoFURERERAKlQCoiIiIigVIgFREREZFAKZCKiIiISKAUSEVEREQkUAqkIiIiIhIoBVIRERERCZQCqYiIiIgESoFURERERAKlQCoiIiIigVIgFREREZFAKZCKiIiISKAUSEVEREQkUAqkIiIiIhIoBVIRERERCZQCqYiIiIgESoFURERERAKlQCoiIiIigVIgFREREZFAKZCKiIiISKAUSEVEREQkUAqkIiIiIhIoBVIRERERCZQCqYiIiIgESoFURERERAKlQCoiIiIigVIgFREREZFAKZCKiIiISKAUSEVEREQkUAqkIiIiIhIoBVIRERERCZQCqYiIiIgESoFURERERAKlQCoiIiIigVIgFREREZFAKZCKiIiISKAUSEVEREQkUAqkIiIiIhIoBVIRERERCZQCqYiIiIgESoFURERERAKlQCoiIiIigVIgFREREZFAKZCKiIiISKAUSEVEREQkUAqkIiIiIhIoBVIRERERCZQCqYiIiIgESoFURERERAKlQCoiIiIigVIgFREREZFAKZCKiIiISKDiGkjN7Dwzqzaz1WZ2czuvp5rZk9HX55pZSTzrEREREZHEE7dAamYh4CfA+UAZMN3Myo447QtA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\n",
      "text/plain": [
       "<Figure size 720x504 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAqQAAAHhCAYAAAC4O6zrAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nOzdeVxVZf4H8M9z2RFEEEQRlX1HJBAwNcMxRxM0tbS0zGxfxhadasp+04zZ4liZzVhZWZllbmWpuaWYWu4LboEorrmiIiCLLM/vj+dcueDlgmwH9PN+vc5L732ee85zlnvul2c7QkoJIiIiIiK9GPQuABERERHd3BiQEhEREZGuGJASERERka4YkBIRERGRrqz1LgARERFRU7R9+/Y21tbWnwGIACvx6kMZgL0lJSWPxMTEnDVNYEBKREREZIa1tfVnbdu2DfXw8LhoMBg4LVEdlZWViXPnzoWdPn36MwADTdMY7RMRERGZF+Hh4ZHDYLR+GAwG6eHhcQmqxrlimg7lISIiImoODNUGoxMmeGLxYmeLeRYvdsaECZ71WbDmSjue18SfDEiJiIiIais+Ph+jRvlVGZQuXuyMUaP8EB+ff72rPnjwoE18fHyQn59feEBAQPjEiRPb1Lm8ZgwdOtTniy++cG2IddcUA1IiIiKi2kpOzsWsWZlmg1JjMDprViaSk3Ovd9U2NjZ49913T2RmZu7bunXrH59//nmb7du329db2atRUlLSWJtiQEpERERUJ+aC0joGowDQqVOn4h49euQDgKura5m/v3/BsWPHbCvnGzp0qM+IESM6xsTEBPv4+ETMmTPHBQDS09NtY2JigsPCwkLDwsJCV61a1QIAysrKMGrUqI7+/v7ht99+e0BWVtbVQe7t27ePHD9+fLuYmJjgmTNnuu7bt8+uZ8+egeHh4aExMTHBO3futAeAmTNnugYGBoYHBweHxcbGBtdm/0xxlD0RERFRdcaM6YC9ex0t5vH0LMaQIYHw8CjGuXM28PcvxMSJXpg40Xz+iIh8zJx5vCabT09Pt92/f79jr1698sylHz9+3G7Lli3p+/fvt+vTp0/woEGD9nh5eZWsX7/+gKOjo9yzZ4/dfffd57d3794/vv7661YHDx60S09P33fixAmbyMjI8NGjR583rsve3r5s+/bt6QDQrVu3oBkzZhyNjIwsWrNmTYsnn3yy46ZNmw68/fbb7VauXHnA19e3OCsry6om+2AJA1IiIiKi+tCyZSk8PIpx6pQt2rW7gpYtS+tjtZcuXTIMGTLE/+233z7u5uZWZi7P0KFDL1hZWSEyMrKoQ4cORbt27bIPDg6+8vDDD3fav3+/g8FgwNGjR+0A4Ndff3UeNmzYBWtra/j4+BR369atQg3uqFGjLhq3u3PnTqd77rnH35h25coVAQCxsbF5I0eO9Bk6dOjFkSNHXqzrPjIgJSIiIqpOTWoyjc30zz57Cl995YHXXjtZ2+Z6o6KiIjFgwAD/e+6558KDDz6YXVU+IcQ1rydNmuTZpk2b4oULFx4uKyuDg4NDTFX5TTk7O5cBQGlpKZydnUvS0tL2V87z7bffHluzZk2Ln376yaVLly7hu3bt2te2bdtaB+DsQ0pERERUV6Z9RqdOPVnlQKfrUFZWhnvvvbdTUFBQ4euvv37GUt7vv//etbS0FPv27bM7fvy4XVRUVOGlS5es2rVrV2xlZYXp06e3Li1V8WKvXr1y58+f71ZSUoKjR4/abNq0yWwZ3dzcyry9va/MnDnT1ViejRs3OgDAvn377Hr37n156tSpJ11dXUsyMzOv6dt6PRiQEhEREdWFuQFMlkbf19CqVaucFi1a1HrDhg3OISEhYSEhIWFz5851MZc3ICCgKC4uLnjAgAGBU6dOPero6Cife+65s3PmzGkdFRUVcuDAAXsHB4cyAHjggQey/fz8ioKDg8MffvjhjnFxcVXW4s6ZMyfziy++cA8ODg4LDAwMX7hwYSsAeP75572DgoLCAgMDwxMSEnITEhIKarOPRkJKPnyAiIiIqLLU1NQjUVFRWRYzVTeavh5G21dn6NChPklJSZceeuihOvflbAypqanuUVFRPqbvsYaUiIiIqLY2b3a0GGwaa0o3b7Y8Qv8mxxpSIiIiIjNqVENK1401pERERETU5DAgJSIiIiJdMSAlIiIiIl0xICUiIiKqrdQJnvizmmmd/lzsjNQJno1UomaJASkRERFRbbnH5+P3UX5VBqV/LnbG76P84B6fX9tNlJSUIDQ0NCwxMTGg1uW0IC4uLnjdunW6zgLAgJSIiIiotton5+LWWZlmg1JjMHrrrEy0r/0cpG+88YZnQEBAnSaer42SkpJG2xYDUiIiIqK6MBeU1lMweujQIZsVK1a4PProo1VOPxUXFxc8ZsyYDtHR0SGBgYHhKSkpjgCQkpLiGB0dHRIaGhoWHR0dkpqaagcAeXl5IikpyS8oKChswIABfoWFhVcfbO/o6Bj93HPPeXXu3Dlk9erVTuvXr3fs2rVrcHh4eGiPHj0Cjx49agMAb7zxRht/f//woKCgsKSkJL/a7p+RdV1XQERERHTD2zSmA7L3Wm7WtvcsxrohgbDzKEbRORs4+Rdiz0Qv7JloPn+riHwkzDxuaZVPP/10h8mTJ5+4dOmSlaV8+fn5hp07d6YtW7bM6bHHHvPNyMjYFxUVVbhly5Y0GxsbLFq0yPnFF1/0XrFixaEpU6a0cXBwKDtw4MD+zZs3O3Tv3j3MuJ6CggJDREREwdSpU08WFRWJhISE4KVLlx708vIq+fTTT13Hjx/ffv78+UemTZvW9ujRo3scHBxkVlaWxbLVBANSIiIiovpg07IUdh7FKDxlC/t2V2DTsrQuq5szZ46Lu7t7Sc+ePfOXLFliceDUiBEjLgBA//798/Ly8gxZWVlW2dnZhuHDh/seOXLEXgghi4uLBQBs2LDBaezYsWcBID4+viAoKOhq/1YrKyuMHj36IgDs3r3bLiMjw6F3795BAFBWVgYPD49iAAgODi4YPHiw78CBA7NHjhyZXZf9BBiQEhEREVWvmppMAOXN9MHPnkLmVx6IfO1kXZrrN2zY4LRq1apW7du3dykqKjJcvnzZMGjQIN8ff/zxcOW8QohrXr/00kvte/Xqlbtq1apD6enptr179w6uKr+Rra1tmbW1Cg+llCIgIKBg165daZXzpaSkZCxbtsx50aJFrSZPnuyVkZGx18bGpra7yj6kRERERHVm2mc0ZurJKgc6XYf//e9/f545c2b3n3/+uefLL7/MTEhIyDUXjALAnDlzXAFgxYoVTs7OzqWtW7cuzcnJsfL29r4CAJ988om7MW+PHj3yZs+e7QYAW7dutT9w4IDZrgidO3cuvHDhgvUvv/zSAgCKiorEtm3b7EtLS3Ho0CHb5OTk3OnTp5/Izc21qq5LQXVYQ0pERERUF+YGMJkOdKrjwKaacHV1LY2Ojg7Jy8uzmjFjxmEAeOmll04/8sgjvtOmTWvbs2fPHGPe8ePHn7333nt9g4KCwsLDw/MjIyMvm1unvb29/O677w6NHTu2Y25urlVpaal48sknz0RGRhaNGDHCNzc310pKKR5//PEz7u7udeqeIKSUdfk8ERER0Q0pNTX1SFRUVJWj2wFUP5q+nkbbWxIXFxc8ZcqU47fddlut5zptTKmpqe5RUVE+pu+xyZ6IiIiotrI2O1oMNo01pVmbdZ14vqljkz0RERFRbUW9cabaPO2TcxuyyX7Lli3pDbXuxsIaUiIiIiLSFQNSIiIiItIVA1IiIiIi0hUDUiIiIqJamrBmgufidMtzjS5OX+w8Yc0Ez8YqU3PEgJSIiIioluLbx+ePWjTKr6qgdHH6YudRi0b5xbePr9WUTP/617/aBAQEhAcGBoYnJyf75ufnm3/EUh3ExcUFr1u3TtdZABiQEhEREdVScnBy7qy7ZmWaC0qNweisu2ZlJgdf/yj7w4cP28yYMcNz165d+zMyMvaVlpaKzz77zK3+Sm9ZSUlJY22KASkRERFRXZgLSusajBqVlpaKy5cvG4qLi1FQUGDw9vYurpwnLi4ueMyYMR2io6NDAgMDw1NSUhwBICUlxTE6OjokNDQ0LDo6OiQ1NdUOAPLy8kRSUpJfUFBQ2IABA/wKCwuv1ro6OjpGP/fcc16dO3cOWb16tdP69esdu3btGhweHh7ao0ePwKNHj9oAwBtvvNHG398/PCgoKCwpKcmvtvtnxHlIiYiIiKox5scxHfae3WuxWduzhWfxkHlDAj0cPYrP5Z+z8Xf1L5y4bqLXxHUTzeaPaBORP3PQzONVrc/X17f46aefPu3r69vZzs6urGfPnjlDhgzJMZc3Pz/fsHPnzrRly5Y5PfbYY74ZGRn7oqKiCrds2ZJmY2ODRYsWOb/44oveK1asODRlypQ2Dg4OZQcOHNi/efNmh+7du4cZ11NQUGCIiIgomDp16smioiKRkJAQvHTp0oNeXl4ln376qev48ePbz58//8i0adPaHj16dI+Dg4PMysqq03PsAQakRERERPWipV3LUg9Hj+JTeads2zm1u9LSrmWdnu9+7tw5q6VLl7Y6ePDgntatW5cOGDDAb/r06W5PPfXUhcp5R4wYcQEA+vfvn5eXl2fIysqyys7ONgwfPtz3yJEj9kIIWVxcLABgw4YNTmPHjj0LAPHx8QVBQUFX+7daWVlh9OjRFwFg9+7ddhkZGQ69e/cOAoCysjJ4eHgUA0BwcHDB4MGDfQcOHJg9cuTI7LrsJ8CAlIiIiKhalmoyjYzN9M/GP3vqq9SvPF677bWTdWmuX7x4ccuOHTsWeXl5lQDAXXfdlf377787mQtIhRDXvH7ppZfa9+rVK3fVqlWH0tPTbXv37h1cVX4jW1vbMmtrFR5KKUVAQEDBrl270irnS0lJyVi2bJnzokWLWk2ePNkrIyNjr42NTW13lX1IiYiIiOrKtM/o1H5TT1Y10Ol6+Pj4XNmxY4dTbm6uoaysDGvWrHEODQ0tNJd3zpw5rgCwYsUKJ2dn59LWrVuX5uTkWHl7e18BgE8++cTdmLdHjx55s2fPdgOArVu32h84cMBsV4TOnTsXXrhwwfqXX35pAQBFRUVi27Zt9qWlpTh06JBtcnJy7vTp00/k5uZaXbp0qU7N9qwhJSIiIqoDcwOYTAc61XZgU+/evS8nJydf7Ny5c6i1tTXCw8PzX3jhhXPm8rq6upZGR0eH5OXlWc2YMeMwALz00kunH3nkEd9p06a17dmz59W+p+PHjz977733+gYFBYWFh4fnR0ZGXja3Tnt7e/ndd98dGjt2bMfc3Fyr0tJS8eSTT56JjIwsGjFihG9ubq6VlFI8/vjjZ9zd3evUPUFIKevyeaKrhBA+AA4DsJFSNtpcEUIICSBQSnmwDuvYB+BpKeVaM2m3A5gtpfSuxXp90EjHpD6Og5l1VnlcGpMQYiSAB6WUffUsR001xLmwsK0jAB6RUv4ihHgFgJ+U8pGG3m5dNWS5hRB5ADpLKTOFEF8COCGlnFAf6zbZRpP4btSVEKIDgHUAekspD+tdnqYmNTX1SFRUVJalPNWNpq+v0faWxMXFBU+ZMuX4bbfdVqu5Thtbamqqe1RUlI/pe2yyb0BCiLVCiItCCDu9y2KOEOJ2IcQJvcvRFEgpw5v7D0tDMD0uQojXhRCzdSrHN80lGNWTlPLN5hCMVlbTcmv31GrzSSmdpJSZ9VO6Krdxo9wzPgXwNwajtbf5z82OloJNY03p5j836zrxfFPHJvsGotWM9QRwCcBAAPP1LA+R3oQQ1o1Zc94cCDWqQEgpy/QuS1Vqct6ayrltKuVoLoQQHQHMklIuqef1Wkkp69R825y80fuNM9XlSQ5Ozm2o2lEA2LJlS3pDrbuxsIa04YwCsAnAlwAeNE2o/Fe+EGK0EGKDyWsphHhKCJEhhMgVQkwUQvgLITYKIXKEEPOEELYm+ZOEELuEENlCiN+FEJ1N0o4IIcYLIXYLIS4JIeYKIeyFEC0ALAPgJYTI0xYvIYSdEGKqEOKktkytqoZXCGElhJgihMgSQmQCGFAp3UUI8bkQ4pQQ4k8hxBtCiGs6PWvbLRBCuJm8F62t10Z7PUYI8YdW47xCCNGpijK5CCFmCSHOCSGOCiEmCCEMJumPauvJFULsF0LcYnKc+mj/dxBCfKltaz+ArpW28bIQ4pDJOgbX9JhUse8LtfIeFkKMNUl7XTvXs7Rt7RNCxFpan8lnBwghdmrXy3EhxOsmafZCiNlCiPPaNbNVCGH2GcvG4yKE6AfgFQDDtWsl1eR4mz3H2nX9mxDifSHEBQCva9fxGm3bWUKIb4QQrUy210EI8b12PM4LIf5rsi7T78itWrkvaf/eapK2VqjvzG/acVsphHA3SU/QvifZQohUobpkwGQ7mdrnDgvVVcDccYkT6vuYre37f4XJd7Kac7NWCDFJCPEbgHwAftUcR4vHrNK6r9Zia2XKM1lKjNdBNdfwNeetiu0s0K6jHACjhRAGk/We165d0+/0A0J9J88LIV61UG6z16cQYhLUH/nG/TJeG1II8bQQIgNAhsl7ASabcBdCrNL291eh3T+EED5aXmuTslS+P9fknlHlfVNoLVFCiHFCiLPaOX7IZP12Qt0zjgkhzgghPhZCOGhp7kKIJdpxuCCEWC9M7meVjuEHQn3Xc4QQ24UQPU3S4oQQ27S0M0KI97QkA4BvjPsvqv/u9BDl353jQojR2vtfCiE+EkL8LIS4DCBRWLgXa9fYBm2/Lwr1Xetvsp2HTI55phDicZO0Gh8Tal54EhvOKADfaMtfRRU/+Bb0AxADIAHAiwBmABgJoAOACAD3AYB2c5wJ4HEArQF8AuAnUTGIHKatzxdAZwCjpZSXAfQHcFJr3nKSUp4E8Kq2zS4AogDEAaiq79WjAJIARAOIBXB3pfSvAJQACNDy9AVwTXObtt2NAIaavD0CwAIpZbEQ4i6oYGgIAA8A6wHMqaJMHwJwAeAHoBfUeXhIO1b3QP24jgLQEqrm+ryZdfwTgL+2/BWV/qAAcAjqh9EFwL8AzBZCtNPSqjsmV2k30cUAUgG0B/AXAM8JIf5qkm0ggO8AtALwE4D/VrW+Si5r+9kKKih+UjuO0PbHBepaag3gCQAFllYmpVwO4E0Ac7VrJUpLqu4cxwPIBNAGwCQAAsBbALwAhGpleF07HlYAlgA4CsAH6ph8V7ksWpCzFMA0rfzvAVgqhGhtkm0E1HlvA8AWwHjts+21z74BwE17f6EQwkOoP9KmAegvpXQGcCuAXVUcklIAzwNwB9AN6tw9VUVecx4A8BgAZ21/LR3HKo+ZJVLKZ4zfbQA9AFwE8KOWbOkaBq49b+YMArAA6hr7BsBYAHdBfe+8tO39DwCEEGEAPtL22wvqvFXVJ9vs9SmlfBXqu2/cr2dMPnOXVuawyivTjAQwEep87dLKW63ruGdUd99sq+1TewAPA/ifEMJVS3sHQJD22QAtz/9paeMAnIC673lC3QerGvixVVuHG4BvAcwXQthraR8A+EBK2RLqvjbPwm5X9d3pCFWJ8aFWni6o+P0YAXWtOAPYAAv3Yk08gHSoczIZwOdCXJ2H6CzUfbSl9pn3jX8IXOcxoWaEAWkDEEL0ANAJwDwp5Xaom/+I61zNO1LKHCnlPgB7AayUUmZKKS9B3RSitXyPAvhESrlZSlkqpfwKQBHUzdFompTypJTyAlQA1MXCdkcC+LeU8qyU8hzUj9UDVeQdBmCqlPK4tu63jAlaAN4fwHNSystSyrMA3gdwbxXr+hblQbbQ8n2rpT0O4C0p5R9ac9ybALqISrWkWkAzHMA/pJS5UsojAN41Kf8jACZLKbdK5aCU8mgV+zVJSnlBSnkcKki5Sko5XzueZVLKuVC1MnHVHRMzugLwkFL+W0p5Revz9mmlY7RBSvmz1vz1NdSPXbWklGullHu0Mu6GCuB7acnFUD/0Ado1s11KafbJH5bU8ByflFJ+KKUskVIWaMd8lZSySLu+3jMpVxxUsPJ3bX2FUsoNuNYAABlSyq+19c4BkAYg2STPF1LKA1LKAqgfX+M1fz+An7VjWialXAVgG4A7tfQyABFCCAcp5Snt+3cN7Zht0rZ/BOoPwV7m8lbhSynlPu16doOF41jNMauWEMIDwCKofoI7tXVauoaBSuetilVvlFIu0tZRAPU9fVVKeUJKWQQVyN2t1b7dDWCJlHKdlvYa1LE2pzbX51va97Wqsi412farALoJNZinOjW9Z1R33yzW0oullD8DyAMQrN3rHgXwvFb+XKj7270mn2sHoJP22fVSmh+JLKWcLaU8r52zdwHYAQg2WU+AEMJdSpknpdxkYZ+r+u6MBPCLlHKOVpbzUkrTgPRHKeVvUnU/KYblezEAHJVSfqrd277S9tNT25elUspD2jH/FcBKqD+gruuYUPPCgLRhPAgVQBpH5n2La2vZqmPaJ6XAzGsn7f+dAIzTmi+yhRDZUDULXib5T5v8P9/ks+Z4QdXYGB2ttK7KeY9XymvUCYANgFMm5foE6q9ucxZA/Uh4AbgN6i/e9Sbr+sBkPRegao3aV1qHO9Rf9JXLb8zXAeqPg+pY2i8IIUaJ8i4S2VA11u41+WwlnaC6TJieu1eg3ZQ1lc+dvTBpXqyKECJeCJGiNZddgqplMpbxawArAHwnVPPiZKF1jbhONTnHFSaSFkK0EUJ8J1SzdA6A2Sbl6gD1I1VdH8DK1yhQ8TwDVV/znQDcU+mY9wDQTqpWg+FQx+qUEGKpECLEXAGEEEFas+FpbT/eNNmPmjA9LhaPYzXHzCLtvC4A8K2U8juT9y1dw5XLV5N9MO7HDybr/AOqJtkTlb4X2rE2V9MI1O76rK68ptvOg7qHVHVfM3U99wxL983zla5r4zXpAcARwHaT47Zcex8A/gPgIICVWtP1y1UVQKguAX8I1Y0lG6p20nhOH4aqhU0TqgtEkoV9qeq7U92xMD0H1d2LK2xHSmkcGe6k7Ut/IcQmrUk+G+oPRuO+1PiYNJbMCZmeWYuzLM41mrU4yzlzQub1tpTeVBiQ1jOh+v4MA9BL+7E6DdW0FyWEMNZuXYa6CRm1rcMmj0PV5rUyWRy1WqPqmPur8iTUD4tRR+09c05B3aRM85qWqwiAu0m5Wkopw80WRMpsqL+Ch0HVJs8x+av3OIDHK+2jg5Ty90qryYL667ly+f80WY9/FftSo/3SamU/BfAMgNZSylZQNdiius+acRzA4Ur75SylvNPCZ2rqW6gm/g5SShcAHxvLqNUq/EtKGQbVLJ0E1ZxWncrXS03OceXPvKW911mq5sP7UX7sjgPoWIOAu/I1ClQ8z5YcB/B1pWPeQkr5NgBIKVdIKe+AqoFJgzrX5nykpQdq+/GKyX7UhOlxqe44Wjpm1fkQQC5Mmo9rcA1XLl9N9sG4H/0rHVt7KeWfqPS9EEI4QtWCXrtSy9dnVeWqrrym23aCqpU+CXUvBqq+H9f0nnE9901TWVAVDOEmx8xFqm4W0GoXx0kp/aBaAF4QQvyl8kqE6i/6EtT901U7p5dQ/p3PkFLeB/VHzjsAFmhdVK5HdcfC9BxUdy+uktbdbCGAKQA8tX35GeX7UqNj0phaxrfMTxuV5ldVUJq1OMs5bVSaX8v4lrWakumee+7xcXNziwoMDLzm93PSpEltfHx8IgICAsKfeOKJ656asDpLlixxTkxMDKg+Z90xIK1/d0HVCoRBNXV0ger3tR7lN9VdAIYIIRyF6nj/cB229ymAJ7QaMSGEaCHUgJaaPBniDIDWQggXk/fmAJig9alzh+rLVNVUP/MAjBVCeGv9oa7+pSqlPAUVYL4rhGgp1IAHfyGEpabGb6GO0VCUN9cDKpj6hxAiHLg6kOaeyh/Wmn7mAZgkhHDWfnhfMCn/ZwDGCyFitGMVULnZ32S//iGEcBVCeAP4m0laC6gb7zmtLA9B1S5Ve0zM2AIgRwjxklADqayEEBFCiK4WPlNTzgAuSCkLhRBxMOkyIoRIFEJECtXFIQfqh6MmI2LPAPAR2gCCWp5jZ6jmymyh+nP+3SRtC1Tg8rZ2HdsLIbqbWcfPAIKEECOEENZCiOFQ37eajBSeDSBZCPFX7XjbCzXoxFuogTMDtR/qIq2cVR0XZ6hjl6fVoj5Zg22bVYPjaOmYVUmogSC9AIyQFUfxV3cN19bHUN8944AhDyHEIC1tAYAkoQbF2AL4N6r4/anm+jwD1Sfxet1psu2JADZL1a3mHFSQdL92PYxBxaCrpveM67lvXqWdl0+h+kgaa8TbC60fuVADVgOEEALqWJTC/DXpDNUH+RwAayHE/0H1v4S2nvuFEB7a9ozPHL/eUfDfAOgjhBimfe9aCyHMdv+qwb3YEluo7gbnAJQINdjp6pRv13FMGo17sntuyKyQTHNBqTEYDZkVkume7F6rUfZjxozJ+umnnzIqv7948WLnpUuXtvrjjz/2HTx4cN9rr7122tznG0JxcXG9r5MBaf17EKoPzjEp5WnjAjUYZaRW+/M+gCtQN9evUMMO9uZIKbdB9UH6L9QggoMARtfws2lQN9JMoZqLvKAGe2wDsBvAHgA7tPfM+RSqaS1Vy/d9pfRRUDeX/VrZFkDVPFXlJwCBAM5IKVNNyvkD1F/13wnVZLkXqs+dOX+DqvXIhOpY/y3UoC9IKedDdbr/FqrWaBFUTUll/4JqXjoMFSh8bVKW/VB9oTZCnb9IAL+ZfLa6Y3KVdtNOhvqj5TBUrcJnUE1tdfUUgH8LIXKhfhxNBzG0hToXOVDNqr+iZj8UxqnLzgshdmj/v95z/C8At0DV3iyFyfExOR4BAI5BDVwYXnkFUsrzULVm46CafV8EkGTSRaZKUvUJHgRVo3kOqtbn71D3QoO2zpNQTbq9UPVApfFQQX4u1DmfW922q2HpOFZ5zKpxH1TwdlKUj7R/pQbXcG19APUdXqldd5ugBq5Aqr64T0N9905B7WNVcyBbuj4/gOqXelEIMa2Kz5vzLdRgxQtQg0VNZ094FOoaOA8gHMDVlpfruGdcz32zspeg7tubtPvbLyjv+xmovc6DOl/Tpfm5T5C7oRwAACAASURBVFdAjS04AHXvKkTFJvR+APYJ9cCADwDcK6U0+/jJqkgpj0E1nY+DOo67YLlPe5X34mq2kws1QG4e1HUyAuq6MqrpMWlU5oLS+ghGAaB///55Hh4e13Rl+uijjzxefPHFUw4ODhIA2rdvf02eJUuWOMfGxgbfcccd/v7+/uEjRozoWFqq4veRI0d2jIiICA0ICAh//vnnr3YxWbBgQUtfX9/wmJiY4AULFlyd0eOFF17wuu+++zp17949cMiQIb4lJSV4/PHHvSMiIkKDgoLC/vOf/7gDwNGjR21iY2ODQ0JCwgIDA8OXL19uqZvgVXxSExEREZEZpk9qShuT1uHy3ssWJ7cvySmxKjxUaG/jYVNcfK7Yxt7fvtC6pXWVNbgtIlrkh8wMqbbPdnp6um1SUlJgRkbG1YGWISEhYf37989evXp1Szs7OzllypTjvXr1qtAtYMmSJc5Dhw4N3Llz596goKArt912W+Cjjz6a9dBDD108c+aMlaenZ2lJSQluvfXW4A8//PBYZGRkoZ+fX+SqVavSw8PDi5KSkvwKCgoMKSkpB1944QWvFStWuGzevDnNyclJTpkyxf3s2bM2kydPPlVQUCC6du0asmDBgkNz5sxxLSwsFO+8887pkpIS5ObmGlxdXSsMYuSTmoiIiIgaiHVL61IbD5viK6eu2Np42BRbCkbrqrS0VFy8eNFq165daZMnTz4+YsQI/7KyayeviIyMvBwWFnbF2toaw4YNu7B+/XonAPjqq6/cwsLCQsPCwsIyMjLsU1NT7Xft2mXv7e1dFBkZWWQwGDBy5MgKgw/79euX7eTkJAHgl19+aTlv3rzWISEhYdHR0aEXL1603r9/v31CQsLlOXPmuL/wwgteW7ZscagcjFalwZ7UJISYCdWsdlZKeU3/JKEmnH5Je5kH4EnTZloiIiKipqImNZnGZvr2z7Y/dearMx6dXut0si7N9Za0bdv2yt13351tMBiQmJiYbzAY5OnTp629vLwqNN0LUXEMpBACaWlptv/97389t2/f/oeHh0fp0KFDfQoLCw3m8ptq0aLF1eBSSinefffdY0OHDr1mWrZ169alL1y40GX06NG+Y8eOPfPMM89UNavGVQ1ZQ/olVL+VqhwG0EtK2Rmqk/mMBiwLERERUYMx7TMaODXwZFUDnepLcnJy9i+//OIMALt377YrLi42tG3b9pp+pHv27GmRlpZmW1paigULFrj17Nkz9+LFi1YODg5lbm5upcePH7deu3atCwB06dKl8MSJE7b79u2zA4DvvvvOXJ9pAMAdd9xx6aOPPvIoKioSxjLk5OQYDhw4YNu+ffvicePGZd1///1ZO3bssNjNwajBakillOuEep57VemmU/ZsQtVP7SAiIiJqsswNYDId6FSXgU3Jycm+mzZtcr548aK1p6dn55dffvnk888/nzV27Nis4cOH+wQGBobb2NiUzZgx47DBcG09Y5cuXfLGjRvnnZaW5hAfH5/7wAMPZFtZWSEiIiI/MDAwvGPHjkUxMTF5AODo6Cg//PDDo0lJSQFubm4l8fHxeX/88YeDuXI9//zzWUeOHLGLjIwMlVIKNze34p9//vnQihUrnKdNm9bW2tpaOjo6ln7zzTeHa7KfDTqoSQtIl5hrsq+UbzyAECnlNY+V1NIfg3rMHlq0aBETEmJ2rupGk3lOTV3n53G907jdmOVoCngsyBJeH0R0vTLPXcZ3n/0X3u0tTRwCXNl8BZfGXYLLuy6wjbe9Jv3y+sulRS8XybqOtq+NJUuWOL/77rueKSkpBxtzu9UxN6ipwWpIa0oIkQg1D2ePqvJIKWdAa9KPjY2V27Zta6TSmTf8k40AgLmPd2M5mggeC7KE1wcRXa/hn2yEvYsDwsLCLOY7tuQYOi3sBNdEV7Ppe8v2FvnO8j2RsznHsbED0uZE14BUCNEZat7F/trcgkRERETNRscXLT2QT3FPds/VIxhNSkrKTUpKahZBsG7TPgkhOkJN8PyAlPKAXuUgIiIiIn015LRPcwDcDsBdCHEC6ikZNgAgpfwY6ukxrQFM16YYKJFSxjZUeYiIiIioaWrIUfb3VZP+CACzg5iIiIiI6ObBJzURERER1dKxY5Nx8WKKxTxZWYudMzMneDZSkZolBqREREREteTs3BX79w+rMii9cmWTIS1tlF/LlvH5ZjNYkJ+fLyIjI0ODg4PDAgICwp9//nkvY9rAgQN9fXx8IgIDA8PvueceH+ME9fVp2rRprUeNGlX9qK16wICUiIiIqJZcXRMRFjbPbFB68WIKcnP/bh8SMivT3T35uke729vbyw0bNqSnp6fv37dv3/7Vq1e3XL16dQsAGDly5IXMzMy96enp+woLC8XUqVPd62mXqlVcXFzv62RASkRERFQH5oLSixdTsH//MDg7/6ewNsEoABgMBri4uJQBwJUrV0RJSYkwPmt++PDhlwwGAwwGA2JjYy+fOHHimln5p02b1vovf/mLf8+ePQN9fHwixo0bd3WW/z59+viHh4eHBgQEhE+ZMuVqMPvBBx+09vHxiejatWvw77//7mR8f+jQoT6PPPKId3x8fNBTTz3lnZOTY7jnnnt8IiIiQkNDQ8Nmz57dCgC2bdtmHxkZGRoSEhIWFBQUtmfPHrua7KvuE+MTERERNXUZGc8hL2+XxTy2tl7YvfuvsLVthytXTsHRMRT5+R/bbt8+I9hc/hYtIvJDQmYet7TOkpISREREhB07dszuwQcfPNu7d+/LpulFRUVi7ty5rd977z2z69m9e3eLPXv27HNyciqLjo4OGzRo0KXbbrst/5tvvjni6elZmpeXJ6Kjo8Puv//+i0VFRYa3337ba/v27X+4ubmV3nrrrcERERFXuxocOnTI/rfffjtgbW2NZ555pn1iYmLO/Pnzj2RlZVnFxsaGDhw4MOfDDz/0eOqpp848+eSTFwoLC0VJSYnFY2bEGlIiIiKiemBt7Qpb23YoKjoGW9t2sLY2//Sm61unNdLS0vYfO3Zs944dO1ps3brV3jT9wQcf7JiQkJDXr1+/PHOf79GjR07btm1LnZyc5IABAy6uXbvWCQDeeecdz+Dg4LCYmJjQ06dP2+zbt89+3bp1LRISEnK9vLxK7O3t5ZAhQy6YrmvIkCEXra1VXebatWtbvv/+++1CQkLCevToEVxUVCQOHjxo261bt8vvvvtuu1dffbVtRkaGrZOTU42eUc8aUiIiIqJqBAZOrTaPsZm+U6fXcPLkR/Dx+Sf+/NOjMCIiIr2u23d3dy/t0aNH7uLFi126du1aCADjxo1rl5WVZb1ixYpDVX3O2MRv+nrJkiXOv/76q/O2bdvSnJ2dy+Li4oILCgoM5vKbcnJyKjP+X0qJBQsWHIyKiioyzXPLLbcU9uzZ8/IPP/zg0r9//6Dp06cfGThwYLVdFlhDSkRERFRHxmA0LGwefH3/fbVP6ZUrm2oda508edI6KyvLCgDy8vLE2rVrW4aGhhYCwHvvvee+Zs0al0WLFmVaWVlVuY4NGza0PHPmjFVeXp74+eefW/Xq1SsvOzvbysXFpdTZ2bls586d9qmpqS0A4Lbbbru8adMm59OnT1sVFRWJH374ocoq3sTExJx3333Xs6xMxai//fabAwDs37/fNjQ0tGjChAln+/btm71r1y6Hmuwra0iJiIiI6sA0GHV1TQRQPtBp9+4h9llZns61Gdh0/Phxm9GjR/uWlpZCSikGDRp04b777rsEAC+++GKndu3aFcXGxoYCQFJS0sUpU6acqryO2NjYvOHDh/seOXLEfujQoedvu+22/IKCgoIZM2Z4BAUFhfn7+xdGRUVdBoBOnToVv/TSSycTEhJCPTw8ijt37pxfWlpqtsr07bffPvnYY491DAkJCZNSCm9v76KUlJSDX3/9tdv8+fNbW1tbSw8Pj+K33nrrZE32lQEpERERUS2ZC0aNXF0T4ez8n8K0tFF+tZn6KT4+vuCPP/7Yby6tpKRke03W4e7uXjJr1qxjpu85ODjIdevWZZjL/+yzz55/9tlnz1d+f+HChUdMXzs5Oclvv/32aOV8b7311um33nrrdE3KZopN9kRERES1lJu71WwwamRrm1AWEjIrMydns2MjF61ZYQ0pERERUS117PhitXnc3ZNzazsXaV2MHTv2PIBrajubItaQEhEREZGuGJASERERmSGhpjei+lNWViYAlFV+nwEpERERkRnn8stw/vx5BqX1pKysTJw7d84FwN7KaexDSkRERGTG0kNFiOmUi3PnztV6HadPn7YuLS11rz7nTaEMwN6SkpJHKicwICUiIiIyI78E8PX1rdM6wsLC9kgpY+upSDcsNtkTERERka4YkBIRERGRrhiQEhEREZGuGJASERERka4YkBIRERGRrhiQEhEREZGuGJASERERka4YkBIRERGRrhiQEhEREZGuGJASERERka4YkBIRERGRrhiQEhEREZGuGJASERERka4YkBIRERGRrhiQEhEREZGuGJASERERka4YkBIRERGRrhiQEhEREZGuGJASERERka4YkBIRERGRrhiQEhEREZGuGJASERERka4YkBIRERGRrhiQEhEREZGuGJASERERka4YkBIRERGRrhiQEhEREZGuGJASERERka4YkBIRERGRrhiQEhEREZGuGJASERERka4YkBIRERGRrhiQEhEREZGuGJASERERka4YkBIRERGRrhiQEhEREZGuGJA2J5MnAykplvOkpKh8N7rpdwLL37OcZ/l7Kh8RERE1aQ0WkAohZgohzgoh9laRLoQQ04QQB4UQu4UQtzRUWW4YXbsCw4ZVHZSmpKj0rl0bt1x68OsDHBtfdVC6/D2V7tencctFRERE160ha0i/BNDPQnp/AIHa8hiAjxqwLDeGxERg3jzzQakxGJ03T+W70fV7Aeg4xXxQagxGO05R+YiIiKhJa7CAVEq5DsAFC1kGAZgllU0AWgkh2jVUeW4YpkFpdrZ672YLRo1Mg9ILJ9R7DEaJiIiaHSGlbLiVC+EDYImUMsJM2hIAb0spN2ivVwN4SUq5zdI6nZ2dZUxMTAOUtmrHLx2Hs50zWtm3AgDsP5kDAAjzank1T3ZhNnKLctHBpUPjFCo7G/tP5QBCIOxMJmBnB1hZladbOq8NkVbX9RoACAAG7f/GRVR6bZBaPpPFGthf5gtIIMzuMHDKAFyxAQwGtQhR/v+aLHXJL4TlY0SN4/hxwNkZaFX1dxbZ2UBuLtChkb6zRNSsmL1v1MKvv/66XUoZWx9lupFZ67htc7/cZqMWIcRjUM36sLOza8gymeUsC7Dv7FGEt4m4GpSayi7Mxr6zexHesk3jFapVK+DsZaC0FHBwAFq0KE+zFBTVNq1yupDlC8oqvr66aO+j0uvKn4E0fzWYIwFILXo1/bdUqHVZAXB3BApaAKVlKtgtKytfSkoqvjZd6ktDBrw1zX+zc3YG9u0DwsOvBqUVZGeXpxMRke70DEhPADCtmvAGcNJcRinlDAAzACA2NlauXbu2wQtXwZkUpCy/C8NOH8H7w37AxyvtAQBzH++GlMMpGDZvMFa2bYHEft8Ano3UZJ6SguFf7gC8vDD3s7GWm+vLSoHSy0BxrlpK8oCSXPOvS/K0f3OBYtP3TdMuo4q/Ha5l5QjYOAHWzoCNM2Bd6f82zlW8Ns1nfO0EGGyu3cby9zB80xWgrCXm+j8N2OQBbWKB7nMAh7Y1P6alpUBREVBYqJbG+n9REZCfX/7/+mBvrxY7O/3+b9B5Eg9jV5b338fwA+Xf2avvr1x5c3VxIaLrMvyTjQC0+0YdCFYS1IieAelPAJ4RQnwHIB7AJSnlKR3LUzXPRCT2W4R5y+/CsHmDEeHwBtrYxVwNRue1lUjst6j+gtGyEpPgzzRA1F7v2wZ8/SnuuX0QHBy2AjPigKX9gAvRQEvba4PJ0vyab9u6xbWBoEM7wCbo+oNJayfAYFX9NuvC2GfUbi7g5g14vgucHAec/Q1YfgvQfS7QpmfN1mVlBTg6qkUvUgJXrjR8EJybC2Rlmc9TWFg/NcY2NvoGxT16AHPnquBz/CxVU3qz9rcmImriGiwgFULMAXA7AHchxAkA/wRgAwBSyo8B/AzgTgAHAeQDeKihylIvTILS/kf/DnfbBKyZt1MFo30XAK2igMtHK9Uqmgkmr6ltNFMTWVpYfXkGAUPkdyiEA4BWQFdPIGM7EBABeHQwU8toEjAa/1/5tXULQDSjqWlNBzBJb/VevxeA5QBOjAcMxcDqRKDL20DIuObRlC2ECqp06JpSQUlJ49QS5+RUnefKlbrvh8GgAuPUVMDOFnh+AjB+PODvr4L/5nBNEBHdBBosIJVS3ldNugTwdENtv0F4JuL2v/6Atp//BUeL1uJvLkCirQ2Q0rdmnxeGirWPxkDQyb1S7WMVweSuNODZl4EPPwVu74f7Pk8FIDB3pNaccLX25z2g+w1e+1N5NL3WtAKgPCg9Nh5wjQR2/h049xuQ8AVga6Y/IV3L2hpwclKLXsrKVGBaH8FvjhOQm6eC3IkT1dKuHdCtG5CQoJaYGH1rx4mIbmJ6Ntk3S2sLBLLLrGCLUnycAwwKH4K/tIsoDx4t9ZO0sq9bjcyuTcD0hSZNjZXWZZwSauvWG785MvMXwM/C1E7GoDTzF6D3QyooXR4D9FgAuEU3alGplgwGNWDPwaFu60lJAb7cAXTqBLi6qmC0pATYtEkt33+v8llZAVFRKjg1Bqr+/qxFJSJqBAxIr4Oxz+jstvZYVhiN6Rc2YNCWH7F4xONI9G2EAPDFF6vPk5h44wejAPDUz9Xn6fcCAC1gbR0HbBgGrOwGdP0f4DeGgcbNwNhqYOxDapzDd9484JlnVJ5z54DNm4GNG1WAOmsWMH26SmvdurwGNSEBiIsDWtZtChgiIrpWM+owqC/TAUw7xNs4Z/MOBvrciislhRg6dyBSDlfzjHnSl8etQP8daoDT5keAzWOAkusY7EXNj+kAJuPUT+aedubhASQlAZMmAatXqymhdu8GZswABg0CDh8GXnsNuOMOtZ6ICODRR4HPP1dTR9XnlGFERDcpBqQ1UHk0/b7SGAghMGPo93Cxd4F7WT6GzRvMoLSps28D3L4ciHgNyPxS1ZbmZOhdKmoIlkbTW3oEL6Ca7iMjKwadFy8CK1YAr78OdOwILFwIPPKICk5dXVWw+tprwNKlwPnzjbKLREQ3EgakNbA1/TuzUzt5OnlixsAvkFFchjvtCrA1/TsdS0k1YrACOv8buP1nIP+E6ld6bKHepaL6tnWr5amdTPtb10SrVkDfvsD//R/w888q6ExPB776ChgxQk2h9eabqqbV3R0ICgJGjVJN/zt2AMXF9bdvREQ3IPYhrYEXO/oD0ebnGR0cOhijokbhm92zsdHJVofSUa149Qf67wQ23ANsuBsIfh6Ifsf8xPvU/DR0f2shVNBpDDwBIC8P2L69fLDUypXA11+rNAcHoGvXiv1R27Wr3baJiG5ADEhrIszyj9sH/T7AmsNr8MCuVdgZXwAHmzqOCqbG0aIj0GcdsHM8kP4+cH4z0GMe4Nhe75JRc+TkBPTqpRZAzXN67Fj5YKlNm4D33y+vLe3YsWKAesst+s8/S0SkEwak9aCVfSt8MegL3PH1HfjH6n9gar+peheJasrKDoj9EHDvDmx5BFgWDXT/FmjbR++SUXMnhJpqqlMn4N571XuFhcCuXeUB6saNqusAANjaAtHRFYPUTp04GwQR3RQYkNaTPn598Le4v+GDzR9gYPBA9PbtrXeR6Hr43Au4RgHrhwJr+qp+puGvNK8nV1HTZ29fHmwanTyppp0yBqkzZgAffKDS2ratGKDGxgItWuhTdiKiBsSAtB693edtrDi0AqMXjcaeJ/fAxd5F7yLR9XAJBf66BdjyOLD7NeDc78CtXwN2rfUuGd3IvLyAwYPVAqgm/T17ygPUTZuARYtUmnEGAGOA2q0bEBjIWlQiavZY/VOPHG0c8fXgr3Ey9ySeXf6s3sWh2rBxAm6dDXSdDpxZDSy7Bcjaonep6GZiY6P6kz71lJqk/8ABNXn/0qXAK6+oeVO//RYYPRoIDlaT9995J/Dvf6uBVNnZeu8BEdF1Yw1pPYtrH4dXer6CiesmYlDwIAwOHax3keh6CQEEPgm4xapR+L/0AG55Hwh8ijVRpA93dxV03nmnel1aCqSlVaxFXb5cDaQCgNDQ8sefJiQAYWGqdpWIqIliQNoAJtw2AUszluLxJY+je8fuaNOijd5Fotpo3RXotwPYOArY9gxwbgMQ96mqRSXSk5UVEB6ulocfVu/l5ABbtpQHqD/+CMycqdKcnNRjT43N/PHxqqaViKiJYEDaAGytbDHrrlmImRGDxxY/hh+G/wDBmrXmyc4N6PUTsP9t1a/0YirQcwHgEqZ3yYgqatkS6NNHLYCqLT10qGIt6jvvqNpVAPD3rzhgKipKdRcgItIBA9IGEt4mHG/+5U2MWzkOX6V+hdFdRutdJKotYVAj7lsnAL/fByzvCsR/CviM0LtkRFUTAggIUMv996v38vMrTt6/Zg3wzTcqzd4eiImp2NTfnnPyElHjYEDagJ5LeA4/pf+EscvGItEnEZ1addK7SFQXbXurJvzf7gV+Hwmc+w245T01lylRc+DoCPTsqRZA1aKeOFFx8v5p04ApU1S6t3fFEf233KICVyKiesaAtAEZhAFf3vUlIj+KxOgfR2P1qNUwcF7L5s2xPfCXNUDqK8AfU4DzW4Ae8wEnH71LRnT9hAA6dFDLsGHqvaIiIDW1YlP/ggUqzcYG6NKlYlO/ry8H+xFRnTE6amA+rXzwQb8PsPbIWkzbPE3v4lB9MNgA0f8Ben4P5B4Alt8C/Pmz3qUiqh92dmoA1NixanqpzEzg1Ck1F+q4cWpi/s8/B0aOVP1Q27YFBg0C3noLSEkBcnP13gMiaoZYQ9oIHuryEBalLcLLv7yMvv59EebBATE3hA6DgVaRwPq7gV8HAOGvApH/AgycXoduMMagc9Ag9bqkBNi3r2JT/08/qTSDAYiIqFiLGhys3iciqgLvEI1ACIFPkz+Fs50zRv0wCsWlxXoXieqLcwDQdyPgNwbYNwlI6QsUntW7VEQNy9pajcp/4gngyy/VnKjnzwPLlgGvvaYC2LlzgTFj1ByorVsD/foBr7+u5ku9eFHvPSCiJoY1pI3E08kTHw/4GHfPvxuT1k/C67e/rneRqL5YOwAJnwMe3YFtTwPLooHuc4E2PfQuGVHjcXNTQWe/fup1WRmQnl6xL+rEiep9QNWamo7oDw9XgS4R3ZT47W9EQ8OG4oHOD+CNdW8gKSgJsV6xeheJ6pP/GMAtRjXhr74d6PIOEPICB3zQzclgUE+MCg0FHnpIvZebC2zbVt7Uv3SpqmEFVN/Url0rNvV7eupWfCJqXAxIG9m0/tOQciQFD/zwAHY8tgMONg56F4nqk2sU0G8bsHkMsHO8mhoq4QvA1kXvkhHpz9kZSExUC6CmnTp8uGIt6pQpqo8qoEbwmwaoXboAtrb6lZ+IGgwD0kbWyr4VZg6cib6z++KV1a/g/X7v610kqm+2LkCPBUDa+8CuF4HlserpTq5RepeMqGkRAvDzU8sI7UETBQXAjh3lAer69cCcOSrNzk7NhWra1O/tzVYIohsAA1Id3OF/B57p+gymbp6KgcEDkeibqHeRqL4JAYS+ALSOA34bBqxMAGKnA/4P6V0yoqbNwQHo3l0tRidOAJs3lzf1T58OvPeeSvPyunbyfkdHfcpORLXGgFQn79zxDlZmrsToH0dj9xO74WLPJt0bUpseQL+dwO8jVDP+uQ1A7H/VQCgiqhlvb7UMHapeX7kC7N5dsan/++9VmnEGANOmfn9/1qISNXGc9kknjjaOmHXXLJzIOYHnVjynd3GoITl4AokrgfAJQOZMYGU3IPeg3qUiar5sbYHYWOCZZ4DZs4GDB4EzZ9RcqC++CLi4AF99BTzwABAYCHh4AElJwKRJwOrVQE6O3ntARJWwhlRH8d7xeKXHK3hj/RsYFDwId4XcpXeRqKEYrICoiYB7N2Dj/cDyGCDhSzW5PhHVXZs2QHKyWgCgtBTYv1/VnpqO6gdUbWl4eMWm/pAQTt5PpCMGpDp7rddrWJqxFI8tfgy3drgVbVq00btI1JDa3wn036mmhlo/BAgdD0S9qR5HSkT1x8oKiIxUy6OPqveys4EtW8qb+RcuBD77TKW1bAnEx5cHqfHxakJ/ImoUDEh1Zmtli68Hf42YGTF4bPFj+GH4DxDs63Rja9EJuGMDsOMF4I8pQNYmNZG+o5feJSO6sbVqBfTtqxZATTt14EDFvqiTJpVP3h8YWHFEf2QkJ+8naiD8ZjUB4W3CMan3JIxfNR6zUmfhwS4P6l0kamhWdkDX/6mnO21+FFgeDdw6B2jbW++SEd08hFBPjAoOBh7U7rt5ecD27eXN/MuXA7NmqTRHR9V31XTAVLt2+pWf6AbCgLSJeC7hOfx04CeMXT4Wt/vcjk6tOuldJGoMPiMA1y7A+qFAyh1A54lA2MuAYF82Il04OQG9eqkFULWoR49WrEV9/32guFild+pUMUCNjlbzpRLRdWFA2kRYGazw5aAv0fnjznjox4fwy6hfYGBQcnNwCQP+uhXY8iiQ+qp6ulO3rwE7N71LRkRCAD4+arn3XvVeYSGwc2d5gLpxIzB3rkqztVVBqWlTf8eOnHaKqBqMeJoQX1dfTP3rVKQcScGHmz/UuzjUmGycgFu/VXOUnl4FLL8FOL9N71IRkTn29irgfP55FYgePQr8+aeaC/XZZ1VQ+sknKoD18VGT9w8eDLzzDvDrr8Dly3rvAVGTwxrSJmZM9BgsSl+El1e/jL7+fRHqEap3kaixCAEEPQ24dQU23AOs6g7E4uBn+AAAIABJREFUTAUCnmDtClFTZww6B2tTuRUXA3v2VGzqX7RIpVlZAZ07V2zqDwzk95xuaqwhbWKEEPg0+VO0sGmBUYtGobi0WO8iUWNzjwP67wA8/wJsfQrY+ABQnKd3qYjoetjYqMeYPvWUGhR14ABw7hywZAnwj3+oKaVmz1aDqYKDAXd34M47gYkTgVWrgEuX9N4DokbFGtImqK1TW3yS9Anunn833lz/Jv55+z/1LhI1NrvWwO1LgH1vArv/D7i4E+ixAHBhjTlRs+XuDgwYoBZATd6fllZx8v7ly9VAKiGA0NCKk/eHhqraVaIbEAPSJmpo2FDc3/l+TFw3EQOCBiDWK1bvIlFjEwYgYgLgngD8NgJY0RWI+wzwuVfvkhFRfbCyUk+MCg8HHn5YvXfpErB1a3kz/48/AjNnqjRnZyAuruLk/R4e+pWfqB4xIG3CPuz/IVIOp2DUD6Ow/bHtcLBx0LtIpIe2fdTTnTYMA36/D8j6DYieouYyJaIbi4sL0KePWgBVW3rwYMW+qG+/rWpXAcDfv7wGNSFB9U214ZPfqPlhQNqEtbJvhS8GfYG+s/vi1TWv4r2/vqd3kUgvju2BPmuBXS8Dae8B57cAPeappz4R0Y1LCDXgKTAQeOAB9V5+vpq839jUv3o18M03Ks3evuLk/d26qQFXRE0cA9Im7g7/O/B016fx/qb3kRyUjETfRL2LRHox2AC3vAu43wpseghYdgtw6zeAVz+9S0ZEjcnREejZUy2AqkU9frxiLeq0acCUKSq9Q4eKI/pvuUUFrkRNCAPSZuCdPu9g5aGVGP3jaOx5cg9a2rXUu0ikp45DgVadgQ13A2vvVP1MI/4JGDjYgeimJISafL9jR2DYMPVeURGwa1fFIHX+fJVmYwN06VJx8n4fH047RbritE/NQAvbFpg1eBZO5JzAc8uf07s41BS0DAT6bgT8HgT2TgTW9gMKz+ldKiJqKuzs1KCnZ58F5swBDh8GTp1Sc6GOG6dqWT/7DBgxAvDzA9q2BQYNAt56C0hJAfI41Rw1LtaQNhMJ3gn4R49/YNL6SRgUPAiDQgbpXSTSm7UjED8T8OgBbH0aWBat+pV63Kp3yYioKTIGnYO034+SEmDv3oq1qD/9pNIMBiAysmJTf1CQep+oAfDKakYcbRzh7+qPRxc/irOXz5rNk3I4BZN/m9zIJSPdCAH4P6xqS63sgF96AWnvqz5lRESWWFurpvsnngC+/FLNiXr+PPDzz8CECYCnJ/Ddd8BDD6k5UFu3Bvr1A/71L2DFCuDiRb33gG4grCFtRrp5d8OU36cg90ounljyBKzleAiTPj8ph1MwbMEwzLt7no6lJF24RQP9tgObRgM7XgDO/QYkzARs2N+YiK6DmxvQv79aAKCsDEhPL69B3bhRBaTGP3pDQirWokZEcPJ+qhUGpM1Iom8iFg5biOQ5yfgh7QfEuUTAx0HdNEyDUY7Ev0nZtgJ6/gCkvaumh1q+Wz3dybWz3iUjoubKYFC1o6GhqqYUAHJzK07ev2SJqmEFgBYtKk7en5AAtGmjW/Gp+WBA2swk+iZi0b2L0P+b/th+6T9wtuqIZRnZGLVoFINR0h43OB5oHQdsGA6sTAC6fqQGPxER1QdnZ6B3b7UAqrb08OHyx59u2gT85z+qjyoA+PpWnLw/KgqwtdWv/NQkMSBthvr49cFXg77CyB9GYvWFR7H6W8DV3hWvrHkFfq5+8G3le/VfX1dfeLf0hrWBp/qm0uY29XSn3+5TzfjnNgCxHwJWnHuQiOqZEGqkvp8fMHKkeq+gANixo7yZ/9df1Wh/QM0AEBNTcfJ+b2/9yk9NAqOUZmpE5xH454ofcDB/AW7vdDv83fyReTETvx//HXP3zkWpLL2a19pgjY4uHcuDVGPA6qr+be3QukJfVLpBOLQFeq8Cdv8fsP8t4MJ2oMd8wNlf75IR0Y3OwQHo3l0t/8/efcdXXZ7/H3/dZ8/skEkmI0Q2hCEgRFnuDsW2atufWvXbYWttqbXW1WGlX/3W0dZabd0Dq7VqVXBERVAMggxZypARMsggAbJz//74JCfn5GQckZN5PR+P8yDnfD7ncMcB79z3dV93mwMHAnf0//nPcFfrCYQpKYHL/FOmGJ8hhgwJpANUwZ4C9te+Qa77/7Gl7CVumnuTb7m+sbmR/dX72VO5h92Vu9lTtYc9VcbXL2x/gbLjgf0qPTZPl2E1IyoDl9XVF9+iOBlMFpj4e6MV1JpL4bUpMPMRSJW2YUKIXpaaChdcYDwAGhpg06bApf7nnjOuWSzG0r7/Un9WljTvH8QkkA5AbRuYZkb9hmH2KVy98NKADU1Ws5Ws6CyyorM4gzOC3n+04WhgWK3cw+6q3XxW8Rkrd62ktqk24P4Ed0J7SI1qD6uZUUY5gFlOCOr/Us6BM9fDexfCu1+BMT+HCb83AqsQQvQFmw2mTjUeP/qR8VppKaxd277U//DDxkwqQFxc4CzqtGlGPasYFORvowHGfzf9/SuNesD8zHyWX7A85F32HpuHcQnjGJcwLuia1prSY6W+GVX/4Lp632qe3vI0LbrFd7/FZCE9Mj0grPrPsko5QD/iyYQF78FH18K2P8LhD2D2M+BM6uuRCSGEYdgwOPdc4wHQ3AyffBK41P/yy8Y1pYw2U/4hNSdHmvcPUBJIB5COrZ3u533ftS8aSruilCLBk0CCJ4EZqTOCrreVA3QMq3uq9vD89uc5fPxwwP1emzdgRtU/rEo5QB8wO2DaX40l/A+vNk53mvU0JMzr65EJIUQwsxnGjzceV15pvFZZCR9+2B5Qn30W/v5341pkpDFz2rbMP3260Vs1FMuWQV4e5Hfz92dBgdHyaunSL/d9iSASSAeQwqLCbsNmWygtLCoMW/sn/3KAztTU17SXAfiF1Z3lO1nx2YqgcoBET2JAV4C2sCrlAGGWeSlET4L3LoC3zoDxv4PcpaBkZkEI0c9FR8OiRcYDjOb9n34a2Lz/t781XgfjyFP/WdRx44wa1Y7y8mDJEli+vPNQWlDQfl2cdGENpEqpxcDdgBl4UGv9hw7X04BHgKjWe67XWr8SzjENZEtn9fwTWX5mfp/2IvXavYxPGM/4hOBm7FprSo6VdFq/+t6+93hqy1MB5QBWkzWgO4B/WM2KziLGGSPlAF9G1FhYVAhrr4CNvzROdzr1UbBF9/XIhBAidCYTjB5tPL7T2nP56FFYt649pL72Gjz6qHHN5TLCp39ITUw0Qujy5X6h069Nnn8Y7W4GVZywsAVSpZQZ+DOwADgAFCqlXtRab/W77UZgudb6r0qpXOAVICNcYxJ9SylFoieRRE8iM4fPDLre2NzIviP7AutXq4xfn9v2HOW15QH3e21eX0jdWm3HbU7hvzsrfN0BnFZpGdIjq9dYso+fAxt+Cq9ONlpDxU7t65EJIcSJ83hg3jzjAUbz/s8/D9zRf9dd0NhoXE9Pb9/Rf+utRvj82aMQFSVhtJeEc4Z0GvCZ1no3gFLqaeB8wD+QaqDtsO1IoCiM4xH9nNVsJTsmm+yYzvtktpUDdKxf3Vm+k13Hd9FMPec8dZfv/iRPUuAmK79Z1hRvipQDtFEKRv/QCKHvLYHXZ8GUe2DEldJiRQgxOCgFGRnG45vfNF6rq4MNG9oD6po18MwzxjWLxWhJ5fXAr2426lQljIZVOANpCrDf7/kBYHqHe24BViqlfgS4gfmdfZBS6krgSoC0tLSTPlAxMHRXDrDk/jXUtVRw/bkx7Kls77u6p2oPq/at6rQcID0qPehUq7avh2Q5QNwMWLwe1lwMhVcbS/jT/goWd1+PTAghTj6Hw5gRnem3YnfwYHvbqTIbVNfAVVdJGO0F4Qyknf1trjs8/ybwsNb6TqXUTOAxpdRYrf2SA6C1fgB4AGDq1KkdP0MIlFI4zbGcOnwmpw4/Neh6Q3ODUQ7QIazurtzNv7b+K6gcIMIe0WVYHdTlAI44mPcKfPI72HwLVK6HOc9BxOi+HpkQQoRfSgp87WvGxqmH10NaGjzwY5g/X0JpmIUzkB4Ahvs9TyV4Sf5yYDGA1vp9pZQDiANKwzguMQTZzDZGxIxgRMyITq9X11cHhtXW+tXth7fz6mevUtdUF3B/WzlAQClAa3Ad8OUAJjOMuwniZsKab8FrU2H6Q5C+pK9HJoQQ4ddWM9pWQ+q/0UlCadiEM5AWAiOVUpnAQeAbwLc63LMPOAN4WCk1BmNLWxlC9LIIewQTEicwIXFC0DWtNcVHizvdbPXu5+/yxKYn0H6T/23lAJ2F1azoLKId0QOjHCBpgbGEv/oi41G2Gib9Ecy2vh6ZEEKEh/8Gpp2tu+w77r6XUBoWYQukWusmpdQPgRUYLZ3+obX+RCl1G7BOa/0icB3wd6XUtRjL+d/VWsuSvOhXlFIkeZNI8iZ1Ww7QFlb9SwLWFa2jorYi4P4Ie0SXYTUjKgOHxRH0e/QZ93A44234eCnsuBvK1xq78N3De3yrEEIMKB130+9sP3xGQmn4hbUPaWtP0Vc6vHaT39dbgVnhHIMQ4dZTOcCRuiO+nqv+YXXb4W2dlgMke5PbQ2rrcaxtwTXZm9z75QBmG0z5E8TPgg8ug9cmwcwnIHlR745DCCHCqbCw+7DZFkoLCyWQhoGc1CREmEU6IpmYOJGJiRODrrXoFqMcoJPNVu/sfYcnqoPLATKiMjoNq5nRmeEtB0i7EKLGw6oL4O0zYexNMPbXRs2pEEIMdKEcB5qfL2E0TCSQCtGHTMpEsjeZZG8ys9KCFwvqm+qDDgto+7qzcoBIe2RgSPXrvXpSygEiRsOitVD4P7DlVjj8Ppz6ODjiv9znCiGEGNIkkArRj9ktdkbGjmRk7MhOr7eVA3QMq1vLtvLfnf+lvrk+4P5kb3KnYTUrOotkbzKmUM6yt7hgxsMQPxvW/QhemwyzlkN88OlbQgghRCi6DKRKqRqC+4b6aK0juromhOgdoZYD+JcC7KnaQ8HeAh6vfjygHMBmtpEemR50qlXb19FOvzPulYIR34OYKcYS/hunwaT/hdHXyOlOQgghvrAuA6nW2gvQuiu+GHgMo9n9xYC3V0YnhDhhoZYDdAyreyr38OHBD6msqwy4P9Ie2T6jGuUXVqc9Tfq2W3Gs/wkcXg3THwSr/LwqhBAidKEs2S/SWvsf+flXpdRaYFmYxiSE6AU9lQNU1VUFHRawp2oPn5R+0mk5QIozgswDz5K54TWyRl5MZuIMX4ANuRxACCHEkBRKIG1WSl0MPI2xhP9NoDmsoxJC9LkoRxSTkiYxKWlS0LUW3cKhmkPB9aulGyg4vIXH196P5n7f/TazzegOEJXZaUlAQDnASbBs9TLykvPIz+x6N2zBngIKiwpZOiuEnbVCCCHCKpRA+i3g7taHBlYTfOKSEGIIMSkTKREppESkMDttduDF2kPUr7qIz4tWsSf+THbHL2bPkQO+koDOygGiHFFdhtWMqAzsFvsXGl9ech5L/rWE5Rcs7zSUFuwp8F0XQgjR93oMpFrrvcD54R+KEGJQcCZhn/8WozbdyKitd4CpBOb8CzyZvlvaygE61q9uKd3CSztfoqG5wXevQrV3B/DbZNX2a5I3KagcID8zn+UXLPcLne3trvzDaHczqEIIIXpPj4FUKeUALgdOwe9Pda31ZWEclxBiIDNZYOIfIO5UeP/b8OpkmPkopJ4LhFYO4L/JaneVURbw5u43KaopCugOYDfbSY9KDzqONSs6i3+c9w+W/GsJk22PEuWIkjAqhBD9VChL9o8B24FFwG0Yu+y3hXNQQohBIvU8OHM9rLoQ3j0Pcn8B439rBNYu+JcDzEmfE3S9rqmOz6s+bw+rfrOsHxz4gKq6qoD73VY3myo34bF5+MozN/Dk156UMCqEEP1MKIF0hNb6QqXU+VrrR5RSTwIrwj0wIcQg4cmChavhox/D1jvg8Acw62lwJp7QxzksDkbHjWZ03OhOr1fWVgaF1VfW2qlpqKFaVfPVZ77KqcNPZVH2IhaNWMTExInSAUAIIfpYKIG0sfXXKqXUWIyepBlhG5EQYvAxO2Da3yBuFhReDa9OMkJpwtyT/ltFO6OJdkYzOWkyYNSMvvT+etIi06jTkSwesZjth7dzw1s3cMNbNzDMPYwFWQtYlL2IhdkLSfAknPQxCSGE6F4ogfQBpVQ08GvgRcAD3BTWUQkhBqesb0PMJFj1dXjrdJjwexizNGynO7XVjE6ON2pI71j4b18N6Zj4MazctZIVu1awYtcKntj8BAATEycas6fZi5iVNgub2RaWsQkhhGgXyi77B1u/fAfICu9whBCDXtQ4WLwOPrgcPr4eytbAzEfAFnVSfxv/DUz3rzT2Y3bcff/tCd/m2xO+TYtuYcOhDb5weuf7d3LH6jtwW93kZ+b7AuqImBEoORpVCCFOuu7Osv9pd2/UWt918ocjhBgSrBEweznsuAc2/MzYhT/nXxAz+aR8fMfd9Pfzvu9ax1Can5mPSZmYkjyFKclTuGHODVTXV1Owp8AXUF/e+TIAmVGZvtrT0zNPJ8IuR6QKIcTJ0N0Madt59aOBPIzleoBzgXfDOSghxBCgFOT8GGKnweolsPJUmHovZF/xpZfwC4sKu23t1BZKC4sKO70nwh7B+Tnnc36O0YL5s4rPWPGZEU4f2/QY9390PxaThZmpM30BdXLSZNkcJYQQJ6jLQKq1vhVAKbUSmKy1rml9fgvwbK+MTggx+MXPhMXrYc3F8OGVUPYe5P0VLK4T/shQjgPNz8wPuf3TiJgRjJg2gh9M+wENzQ2s2b/GF1BvLLiRGwtuJM4VF7A5KsmbdMLjF0KIoSaUTU1pQIPf8wZkl70Q4mRyxMO8V2HLb2DLbVCxHuY8BxGj+npkQWxmG/My5jEvYx63z7+dkqMlvL77dVbsWsHKXSt5astTAIxPGO+rPZ2dNvsLH38qhBBDSaiN8T9USv0b4yz7rwKPhnVUQoihx2SG8bdA3Ax4/xJ4bSrM+AekXdDXI+tWgieBS8ZfwiXjL6FFt7CxeKOv9vRPH/yJP675Iy6ri3kZ83wBdVTsKNkcJYQQfkLZZf87pdSrQNuRKf9Pa70hvMMSQgxZyYuNJfz3lsB7F8Lon8DEO2AAtF8yKZPvSNTrZ1/P0YajAZujXvn0FQDSI9N9tadnZJ5BpCOyj0cuhBB9q7td9hFa62qlVAywt/XRdi1Ga10R/uEJIYYkdxrMfxc2/Bx2/AnK1xq78l2pfT2yL8Rj83Du6HM5d/S5AOyu3O2rPX1qy1M8sP4BzMrMjNQZvoA6JWkKZpO5j0cuhBC9q7sZ0ieBc4CPMJbq26jW59KTVAgRPmYbTL0b4mfB2suN051OfRKSFvT1yE5YVnQW/5P3P/xP3v/Q2NzI+wfe9wXUm9++mZvevokYZ4xvc9SiEYtI9ib39bCFECLsuttlf07rr5m9NxwhhOggfQlEjYf3LoCCRTDuFhh7IwzwFktWs5XT0k/jtPTT+N0Zv6PsWFnA5qhnPnkGgLHDxvpqT+ekz8FhcfTxyIUQ4uTrsYZUKfVV4C2t9ZHW51HAPK31C+EenBBCABCZA4vWwodXweab4fAamPk4OOL6emQnTbw7nm+N+xbfGvcttNZsKtnkqz2998N7ufP9O3FanMzNmOsLqDlxObI5SggxKISyy/5mrfW/255orauUUjcDEkiFEL3H4oaZj0H8HPjoGnhtMsx+FuKm9/XITjqlFBMSJzAhcQJLZy3lWMMx3t77ti+gXrviWgCGRwwP2BwV7Yzu45ELIcSJCSWQdrYuFsr7hBDi5FIKRl4FsVNh1QXwxhyYdCeM+uGXPt2pP3Pb3Jw96mzOHnU2AHur9vpqT5dvXc6DGx7EpExMT5nuC6h5yXmyOUoIMWCEEizXKaXuAv6MsZnpRxgbnYQQom/ETIHFH8H73zFmS8tWw/S/g9Xb83sHgYyoDK6aehVXTb2KxuZG1h5cy8pdK1mxawW3vnMrt7xzC9GOaOZnzfcF1NSIgdWhQAgxtIQSSH8E/Bp4BmOH/UrgB+EclBBC9MgeA3P/A1vvgE03QtXHMPs5iDqlr0fWq6xmK7PTZjM7bTa35d9G+fFy3tj9hm95/9mtxknPufG5vtrT09JPw2l19vHIhRCiXSiN8Y8B1yulIoAWrfXR8A9LCCFCoExwyi+N051WfwNWTINpD0DmxX09sj4T64rlorEXcdHYi9Ba80nZJ77l/b8U/oX/++D/cFgcnJZ+mi+g5sbnyuYoIUSf6rFvilJqnFJqA7AZ+EQp9ZFSamz4hyaEECFKyIfFG4yl/PcvgRUzoGhF9+8pKYCty3pnfH1EKcXYYWO57tTrWHnpSip+UcGrF7/K1VOuZv+R/Vy38jrG/nUsw/9vOJf/53KWf7Kcilo580QI0ftCWbL/G/BTrXUBgFJqHvAAcGoYxyWEEF+MKxnOeAs23gDb/gjvnAMzH4WMbwbfW1JgHE06e3nvj7MPuawuFo9YzOIRiwHYd2Sfr/b0+e3P84+P/4FJmchLzvPVnk5LmYbFJPtYhRDhFcqfMu62MAqgtX5bKeUO45iEEOLEmCwwaRnEnQprLoE1F8PRPUB++z3+YTQhv8uPGgrSItO4YvIVXDH5Cppamig8WOirPf3tqt9y27u3EWmPDNgclRaZ1tfDFkIMQqEE0t1KqV8Dj7U+vwTYE74hCSHElzT8K3DWRuNkp02/guqHwDsSit+C1RdJGO2ExWRh5vCZzBw+k1vm3UJFbQVv7n7TF1Cf2/YcADlxOb7a07kZc3FZXX08ciHEYBBKIL0MuBV4HmOX/bvA/wvnoIQQ4kvzZsNZm40jR3eVQl0pvPVLsMfBhqXgSARngvGrIxGcieBIaP/a4hnUvU17EuOM4cJTLuTCUy5Ea822w9t8m6P+9tHfuHvt3djNduakz/EF1LHDxsrmKCHECQlll30lcE0vjEUIIU4uixPm/RcK/2EE0rhTjZnSuhKoPQAV66C+FHRL8HvNLiOgOrsIrI625wnG7zOIKaXIjc8lNz6Xa2deS21jLav2rfIF1J+//nN+/vrPSfYmszB7IQuzFrIgewFxrsFztKsQIry6DKRKqZcwGuF3Smt9XlhG1A/tW7YPb56X6Pyuj+WrLKikprCGtKVSXyVEv1JSAA2V4E6Hmp0w4beBy/UtzdBQDrXFUFfc+muJ39fFxvvK3oX68s5/D2tkYGDtMsDGg8naO993GDmtTiN4Zi/kTu7kQPUB3+ao/2z/Dw9//DAKxZTkKb7Z0xmpM7CaB/73LoQIj+5mSP+310bRz3nzvGxdspXc5bmdhtLKgkrfdSFEP9K2gSnyUbBGGbWjHTc0mczgGGY8GN/95zU3GDOqdSVdB9jKDcbzxurOP8Me1/2Ma9vX9lijz+oAkBqRymWTLuOySZfR3NLMuqJ1vtrT29+7nd+t+h0R9ghOzzzdF1AzozP7ethCiH6ky0CqtX6n7WullBNI01rv6JVR9TPR+dHkLs/tNHT6h9HuZlCFEL3Mfzf9Cw7jtYT8zkNpqMw2cKUaj540HfcLrh1mXNter/nMeN5cF/x+1RaUeygZcCYaM7T9pHbTbDIzPXU601Onc9Pcm6iqqwrYHPXC9hcAGBkz0rdzf17GPDw2Tx+PXAjRl3qsIVVKnYsxW2oDMpVSE4HbhtKSPQSG0uRLoWi0ScKoEP1VUGun99uvfdlQGiqLCzyZxqM7WkNTTTclA61fV20yvtZNwZ9hsvc849p23dK7XfuiHFF8PffrfD3362it2VG+w1d7+tCGh7iv8D6sJuP407aAOiFhgmyOEmKICWWX/S3ANOBtAK31x0qpjLCNqB9rC6VnnrWRz8cqtu6VMCpEv1Re2H3YbAul5YV93/5JKbBGGI+IUd3fq1uMetju6l2P7YHyD6CujE63AVg8oZUMOBKMGeGT+q0qcuJyyInL4cczfkxdUx3v7XvPF1Cvf/N6rn/zehLcCSzMXsii7EUsyF7AMPewkzoOIUT/E0ogbdJaH5GfVg1R86Koc8HIdRr7FDsR0yL6ekhCiI5yl/Z8T0J+34fRL0qZjNpSeyxwSvf3tjRBfVnXM661xXDkEyh5ywi5nbFFdxNY/dpm2eONWtwvyGFxMD9rPvOz5vNH/khRTZFvc9Qrn77CY5uM9teTkyb7ak9nDp+J7SQHZSFE3wslkG5RSn0LMCulRmK0gFoT3mH1X1VvV2FtgOJMReJHR1mbs5ax/x5LxFQJpkKIfsRkAWeS8ehJc3339a51xVD+ofFr07Hg9yuTEUpDKRmwxXRZ75rsTea7E7/Ldyd+l+aWZtYfWu+rPV22ehm3v3c7HpsnYHNUdkz2l/wHJYToD0IJpD8CfgXUA08CK4DfhnNQ/VVbzejK71kpGm3if4+msmvpLtZPX0/mbZmkXZ+GMstMshBigDHbwZ1mPHrSeLTrGde2AFu93fi6pSH4/SarX3usLmZcHYmYnYnkJU8lLyWPG0+7kSN1R3hrz1u+gPrijhcByI7O9tWe5mfk47V7T/I/HCFEbwglkI7WWv8KI5QOWf4bmIp2bgdg+HXDcYx0sHXJVvbcuIfyV8sZ89gYnJmDu0m2EGIIs3qMh7eHmUmtobEKaruYca0thtqDULm+dbNWZ4cTOH2zq5GORL7qSOCr6UnoUb/g08YWVpTsYsXBj3l448P8Zd1fsJqsnDr8VF9AnZg4EdMAaZ0lxFAXSiC9SymVBDwLPK21/iTMY+p3gnbT72y/Fn9ePONeGccnX/mEoxuOsm7COkbeO5KEbyfILlEhxNCllFGDaouGyJzu7w04nKCrFlnthxMoYFTr40dmqE+D1U1uVtTZWHF4HTd8/g43vHUDw+xuFiSNY1H6LBaOWERCTK7RSmsQHE4gxGATytGh+UqpRGAJ8IBSKgJ4Rms9ZJbtawprut2ajwrPAAAgAElEQVRNH3N6DGP/M5bKlZUcWXOE7d/dTvnL5Yy6fxTWWPmDTwghuhVwOEEPWhqNY2Drin2zr/a6Yk6vLeb0uhLuqCumuPoAK8uLWFFzjBX7P+CJvR/AO3cy0Q6LXLAoMoJZManYXEndHw07gA4nEGKgC2WGFK11MXCPUqoAWArcxBCqIw3lONDo/Gii86PRzZr9d+5nz417OLLmCDkP5xCzIKYXRimEEEOAyQquFOPRhUTg28C3m2ppqT3Ehv3vsmL3G6zY/yF3lu3ijspq3Pt3kB9xiEUuE4vsRxlhqg/eaxV0OEE3R8P2o8MJhBiIQmmMPwa4CLgAKAeeBq4L87gGLGVWpC1NI3pBNNsu3samhZtI/UkqmbdnYnZ88bYoQgghTpDFicmbxZTcLKbkfpcbgOr6agr2FPg2R718cDcAmVHpLEo7lUXJYzk9NoWI5urg8oEjm42vuzqcoLOuAp11HejlwwmEGAhCmSH9J/AUsFBrXRTm8Qwa3klepnw0hd1Ld3PgTweofKOSMU+MwTNejscTQoi+EmGP4Pyc8zk/53wAPqv4zNeY//HtL3H/pqewmCzMTJ3ZujnqaiYnTW7fHBVwOEEX9a7H9oZ4OEE3M66ORGN21mzvtX82QvSlUGpIZ/TGQAYjs9PMyHtHEnNWDDsu28FHeR+RdXsWqT9JRZlkaUcIIfraiJgRjJg2gh9M+wENzQ2s2b/GF1BvLLiRGwtuJM4Vx4KsBSzKXsTC7IUkeZO+wOEEh7s/EvbI1i9wOEE3fV5P8HACIfqLkGpIxZcTe2YsUzdNZeeVO9l13S7K/1tOziM5OFIdfT00IYQQrWxmG/My5jEvYx63z7+dkqMlvL77dVbsWsHKXSt5astTAIxPGO9rzD87bTZ2SxezmCaLERididDTCdPN9X6btbqYfS1f13o4wdHg9ysT2ON6mHFtDbDdHE4gRF+RQNpLbPE2Tnn+FIr/UcynP/6UdePWMer+UQy7SM5oFkKI/ijBk8Al4y/hkvGX0KJb2Fi80Vd7+qcP/sQf1/wRl9XFvIx5voA6KnbUibX8M9vBPdx49KTpmN/JWl0E2Jodxtct9cHv9x1O0M2Ma1tJgcUr4VX0ipADqVLKC2itdSc/molQKKVIujyJqHlRbLtkG1u/sZXyl8sZed9ILJHys4EQQvRXJmViUtIkJiVN4vrZ13O04Shv733bt7z/yqevAJAeme5rzH9G5hlEOiJP/mAsbvBkGY/uaA2NR7qvd60taj2coBR0c/Bn+B1O0H2ATQCLHAojTlwou+zHAY8CMcZTVQZ8R2u9JYT3LgbuBszAg1rrP3RyzxLgFozK741a6299oe9gAHJmO5m4aiL7fr+PvbftperdKsY8Noao06L6emhCCCFC4LF5OGfUOZwz6hwA9lTu8c2ePrXlKR5Y/wBmZWZG6gxfQJ2SNAVzb9Z5KgW2KOPR0+EEugXqy7svGaj5DMreM+piO2ON6HnGtW2zlhxOIDoIZVrub8BPtdYFAEqpecADwKndvUkpZQb+DCwADgCFSqkXtdZb/e4ZCfwSmKW1rlRKDZn1a5PFRMZNGcQsimHbJdv4eN7HpP0ijYxbMzDZpBGzEEIMJJnRmVw99Wqunno1jc2NfHDgA19Avfntm7np7ZuIccYEbI5Kiei6l2qvUyZwxBuPqHHd39vSaHQQ6GzGta71UbXReN54pPPPsMd1P+PaNiNrj+u9wwm2LoPYPEjI7/qekgIoL4Tcpb0zpiEklEDqbgujAFrrt5VSoTRRmwZ8prXeDaCUeho4H9jqd8/3gD9rrStbP7s05JEPEhHTI5iyYQq7frqLfX/YR8WKCsY8MQb3GOlTJ4QQA5HVbGVO+hzmpM/ht6f/lrJjZbyx+w1fQH3mk2cAOCX+FN/s6Wnpp+GwDJCNriYruJKNR0+aaltnW7soGagrhsPvQ+0haK4Nfn/A4QQdZlw7BtgvezhBbB68twRmL+88lJYUtF8XJ10ogXS3UurXwGOtzy8B9oTwvhRgv9/zA8D0DveMAlBKrcZY1r9Fa/1aCJ89qFg8FkY/MJrYs2PZccUOPpr8Edn/m03y95NPrDheCCFEvxHvjueb477JN8d9E601m0s3+2pP7yu8j7s+uAuHxRGwOSonLmdw/PlvcYInw3h0R2uje0B39a51xXBki/G8pTH4M0y2nmdc277u7HCChHwjbPpCp98PCP5htLsZVHHCQgmklwG3As+3Pn8X+G4I7+vs/6SOHYItwEhgHpAKrFJKjdVaVwV8kFJXAlcCpKX1fIznQBV3fhze6V52XLaDT3/4KeX/LWf0P0ZjT5TGyEIIMRgopRifMJ7xCeP5+ayfc6zhGO98/o4voF674loAhkcMD9gcFe3sqW/UAKcUWL3GI2Jk9/dqbfRt7a7e9djnUL4W6suM+tiOLJ6uZ1xH/wTe/RrUPQyOOAmjvSSUQDpfa32N/wtKqQuBZ3t43wHAv39FKtDxpKcDwAda60Zgj1JqB0ZALfS/SWv9AEbdKlOnTu3k2IvBw55oZ9x/x1H01yJ2XbeLdePWMfrB0cSdH9fXQxNCCHGSuW1uzhp5FmeNPAuAz6s+9y3tP7v1WR7c8CAmZWJ6ynRfQM1LzuvdzVH9jVJgjzEekbnd39vS3OFwgk7qXau3GaGzoSLwvdXboBpY9b8w51kJo2EWSiD9JcHhs7PXOioERiqlMoGDwDeAjjvoXwC+CTyslIrDWMLfHcKYBjWlFCnfTyEq32gPteUrW0i6Igl7mp3I2ZFE53f9k3JlQSU1hTWkLR28M8lCCDFYpUelc+WUK7lyypU0tTSx9sBaX0C99Z1bueWdW4h2RDM/a74voKZGpPb1sPsvk9nY3e9MgOgJ3d/rO5ygdcZ1/yFoKIeR/yNhtBd0GUiVUmcCZwEpSql7/C5FAE09fbDWukkp9UNgBUZ96D+01p8opW4D1mmtX2y9tlAptRVoBn6utS4/8W9ncHGPcTP5/cnsvWUv+/6wD1uSjQN3HeCU50/pNJRWFlSydclWcpf38BOjEEKIfs9isjArbRaz0mZxW/5tlB8vD9gc9exWY14oNz6XhVkLWTRiEXPT5+K0Sj/QE+J/OEFJATRVgzsdPrsGEk+XUBpm3c2QFgHrgPOAj/xerwGuDeXDtdavAK90eO0mv6818NPWh+iEyWYi6/dZxJwZw7ZLt9FU3cTmczYz9j9jA+7zD6PdzaAKIYQYmGJdsVw09iIuGnsRWms+KfvEV3v613V/5U9r/4TdbOe09NN8s6enxJ8yODZH9aa2mtHIR8EaFbjRSUJp2HQZSLXWG4GNSqknW2s8RR+KmhNF3sY8Pv3Rp5Q8VsLmMzcz8hIzn84wSxgVQoghRinF2GFjGTtsLNedeh3HG4/z7ufv+gLqz17/GT97/WekeFNYmL2QRdmLmJ81n1hXbF8PvX/z38D0Qusu+4677yWUhkUoNaTTlFK3AOmt9yuMyc0eziwTJ5sl0sKYR8cQe3Ys2y/fzhkPNzFpZRObKzYT/414jm87TmNpI5ZYC9ZYK9Y4K9ZYK2bXEC5+F0KIIcBldbF4xGIWj1gMwP4j+31L+//e/m/++fE/USjyUvJ8raWmp07HYpJjq32CdtO/335NQmnYhfJf4kMYS/QfYdR5ij427KJhRMyK4NW8D4gtAm3TlDxcQsnDJZ3eb3KYjJDaGlD9w2rH8Nr2miXS0q+XefYt24c3zysbvIQQohPDI4dzxeQruGLyFTS1NFF4sNAXUH+36nf85t3fEGmP5IysM3wBNT0qva+H3bfKC7sPm22htLxQAmkYhBJIj2itXw37SMQXUvtpLY6jsO4sMzM/NDHmyTF4xntoPNxIY3nro/XrpvKmgOdHNx01XqtohE7aswEoi8ISYwkIsL7w2kWgtURbMFl654g3b5632zIF2eAlhBAGi8nCzOEzmTl8JrfMu4WK2gre3P2mL6A+v81oMz46drSv9nRu+lzctiF2YmAox4Em5EsYDZNQAmmBUuqPGI3x69te1FqvD9uoRLfawtbK71kpGm3i8p/lnFANqW7RNFU1BQRYX3jtEGhrP6ulca3xXDd03QrWEmUJno3tIdCaHV+8pCA6P5rc5bmdhk6pqRVCiK7FOGO48JQLufCUC9Fas+3wNl/t6QPrH+CeD+/BZrYxJ22OL6COGzauX6+aiYEvlEDadtznVL/XNHD6yR+O6Il/2CrauR0IDmehhjBlUlhjrFhjrMZxBCHQWtN8rLnb8Nr2vKG4gWOfHKOpvInmo11Xe5hcpqCSgZ4CrdlrDvi+ky+FotEmCaNCCPEFKKXIjc8lNz6Xa2deS21jLav2rfIF1KVvLGXpG0tJ8iT5NkctyF5AnEsOaxEnV4+BVGstc9P9RFDY2tl+7URD6RellMLisWDxWCAj9Pe11Le0h9ceZmPrPq8zrld23e5WWZUvvNqSbZxz7zHKk2BzxWbSf5WOI92BbtYos/xEL4QQoXJanSzMXsjC7IXcyZ0cqD7Ayl0rWbFrBS/ueJFHNj6CQjEleYqv9nRG6gysZmtfD10McD0GUqVUAvB7IFlrfaZSKheYqbV+KOyjEwFqCmu6DZttobSmsKbfzQ6a7CbsyXbsyfaQ36ObNY2V3YdX32ysA4bthxZa2HPDHvbcsAeTw4RztBNXjgv3GDeuHBeuMS6cI52YndJ5QAghepIakcplky7jskmX0dzSzLqidb7a0z+89wd+t+p3RNgjOD3zdF9AzYzO7OthiwEolCX7h4F/Ar9qfb4TeAZj973oRaHsFo/Oj+53YfREKbPCFmfDFmfr9r7KgkqKz9vIurPMzFiryLg5A5PTxPHtxzm+7Tg1hTWULS8zCk0AFDgyHb6A6h9YrbHyU74QQnTGbDIzPXU601Onc9Pcm6iqqwrYHPXC9hcAGBkz0ld7Oi9jHh6bp49HLgaCUAJpnNZ6uVLql+A7ElTaP4l+obsNXslXJPvua65tpvbTWo5vO87x7cc5tu0Yx7cfp+qtKlrq2lsNWOOtAUG17VdHmgNlkuV/IYRoE+WI4uu5X+fruV9Ha82O8h2+2tOHNjzEfYX3YTVZmZ022xdQJyRMkM1RolOhBNJjSqlYWueXlFIzgCNhHZUQIfgiG7zMTjOe8R484wN/UtfNmrp9db6g2vZr2XNlNJW317CanCZco4ODqnOk84S6BAghxGCilCInLoecuBx+POPH1DXV8d6+93z1p9e/eT3Xv3k9Ce6EgM1Rw9zD+nroop8IJZD+FHgRyFZKrQbigQvCOiohenCyNngps8KZ6cSZ6ST2rMAj9RoONwQF1er3qyl9urR9+d9kLP/716i6coyHNUaW/4UQQ5PD4mB+1nzmZ81n2YJlHKo55Aunr3z6Co9tegyAyUmTfbWnM4fPxGbuvkRLDF6h7LJfr5SaC4zGODZ0h5xtL/pab2zwssXZsM2xETUnKuD15uPNHN95PCisVrxega5v79FqHWYNrlMd48KeapflfyHEkJLkTeI7E7/DdyZ+hxbdwvpD633L+8tWL+P2927HY/MEbI7Kjsnu62GLXhTKLnszcBZGkx8LsFAphdb6rjCPTYgu9eUGL7PLjHeiF+9Eb8DrullTt7fOV5/qW/5fXhbQwsrkMvlmUf3DqnOEE5O9d066EkKIvmJSJqYmT2Vq8lR+ddqvqK6v5q09b/kC6os7XgQgOzrbV3uan5GP1+7t4ZPFQBbKkv1LQB2wmS4PmhRCKLPCme3Eme2Ec9pf11rTWNbYPqPauqnqyOojlD5Z2n6jGZxZzk43VVmjZPlfCDE4Rdgj+ErOV/hKzlfQWvNZxWe+nfuPbHyEv6z7CxaThVnDZ/kC6sTEiZiU/AA/mIQSSFO11uPDPhIhBimlFLZhNmzDbETN7bD8f6yL5f8VFQFHtNoSbZ0GVXuqXXasCiEGDaUUI2NHMjJ2JD+c9kPqm+pZs3+NL6De8NYN3PDWDcS74n2boxZmLyTBk9DXQxdfUiiB9FWl1EKt9cqwj6af2rdvGV5vHtHRXR9aVVlZQE1NIWlpS3txZGKgM7vNeCd58U4KXIpqaWqhbm/w7v/Sp0ppqvJb/nebghr/u3JcxvK/TWYPhBADm91iJz8zn/zMfP4w/w8UHy3m9V2vs2LXClbuWskTm58AYGLiRF/t6ay0WbI5agAKJZB+APxbKWUCGjE2NmmtdURYR9aPeL15bN26hNzc5Z2G0srKAt91IU4Gk8WEa4QL1wgXnNv+utaaxtLGwDrVbcepeqeKksdL2m80gzPbGdT435XjwhIZyv/2QgjR/yR6Erl0wqVcOuFSWnQLHxd/7Ks9vfP9O7lj9R24rW7yM/N9AXVEzAhZSRoAQvmb6U5gJrBZa617unkwio7OJzd3uV/odPiu+YfR7mZQhTgZlFLYEmzYEmxEzwvcsNV0tInaHbVBm6oqXqlAN/ot/yfZgpb+3WPc2JJt8oe2EGLAMCkTk5MmMzlpMr+c80tq6mso2FvgC6gv73wZgMyoTF/t6emZpxNh73w+bdnqZeQl55Gf2fXf5QV7CigsKmTpLFkNPdlCCaSfAluGahht4x9Kk503UVQ7WcKo6FcsHgveKV68Uzos/ze2ULenLuiUqpLHS2iubj90zew1B+3+d41x4cx2YrLK8r8Qon/z2r2cN/o8zht9HgC7Knb5ak8f3/w49390P2ZlZubwmb7Z0ynJU3ybo/KS81jyryUsv2B5p6G0YE+B77o4+UIJpIeAt5VSrwL1bS8OxbZP0dH5jBnzDGfXn0VFQwZbt5ZLGBX9nslqwjXKhWuUC85vf11rTUNxcPP/yrcqKXmsfflfWRTOEZ3s/h/twhIhy/9CiP4pOyab78d8n+/nfZ+G5gbe3/++L6D+uuDX/Lrg18Q6Y1mQvcAXUJdfsNwvdLavhvqH0e5mUMWJC+Vvkz2tD1vrY0iLiTmdsrpRJLk243LNkTAqBiylFPYkO/YkO9Gnd1j+r2nytajyD6zlL5ejm/yW/1NsnW6qsiXJ8r8Qov+wmW3MzZjL3Iy5/P6M31N6rDRgc9TTW54GYNywcZyecTpffearTHM8QbQzRsJoLwnlpKZbAZRSbq31sfAPqX+rrCwgyrafsrqRwCp27vwRo0bd29fDEuKksngtRORFEJEXWGvV0thC7a7aoKBa/EgxzTV+y/8R5uBTqnJcOLIdmCyy/C+E6FvD3MO4ePzFXDz+Ylp0C5tKNvlqT/+9/d80tjSyqXozDouDN5/9Lc9e+KyE0TAL5aSmmcBDgAdIU0pNAK7SWn8/3IPrb9pqRlcW/YZDtRNYmvdLioruw2KJJCvrt309PCHCzmQ14c5x485xw1faX9da01DUEFCjenzbcSpfr6TkEb/lf2vr8n+HTVWuHBcWjyz/CyF6n0mZmJg4kYmJE/nF7F9wtOEob+99m2uf/Jyahhqunnq1hNFeEMrfAH8CFgEvAmitNyqlTgvrqPoh/w1MRVuMupIJE95g/frp7Nv3OyyWCOlB2oukN2z/opTCnmLHnmIn+owOy/9Hmji+43jApqpjnxzj8H8OQ/ukKvZUe3BQHePCliDL/0KI3uOxeXBb3dQ11ZEemc7fPrqGMzLPkFAaZiFNSWit93f4C6G5q3sHo+Dd9O8DYDY7mDTpXdatm8Lu3b/AbPaQkjLkJo77hPSGHTgskRYipkUQMa3D8n9D6/J/h01Vxf8spvlo+x8xlihLp7v/HZmy/C+EOPnaakYnxz9KlCOKPyxcLjWkvSCUQLpfKXUqoJVSNuAaYFt4h9W/1NQUdhl8LJZIJk9eTWHhZHbt+hlRUfNwu3P7YJRDi/SGHfhMNhPuMW7cY9wBr2utqT9YH3yc6msVFD9c7LtP2RTOkc7gTVWjXZjd5t7+doQQg4D/Bqb7Vxp/r+Rn5gfsvpdQGh6hBNKrgbuBFOAAsBL4QTgH1d/0tORrsyUwefIqNmyYxaZNi5g0aTUOR1ovjW7oCuwNezNFtVMkjA4CSikcqQ4cqQ5iFsQEXGusagza/X9s0zEO//swtLTfZ0+zB8yoJn3aQlWiQmsty/9CiE513E1/f+tqKEgo7Q3dBlKllBm4VGt9cS+NZ8ByOrMYP34FGzacxsaNC5k06T1stri+HtagFxU1j/T0mzi7/qcopdm4URMdvZDjx3dgNnvxeMZjMg35bmWDhjXKSuSMSCJnRAa83lLfQu1ntUGbqg79/RAtx1t8+69W3746uJ9qjgtnphNllqAqxFBWWFTYbdhsC6WFRYUSSMOg20CqtW5WSp0P/F8vjWdA83jGM27cS2zatJDNm89iwoQ3sVi8Pb9RfGEtLfWUli7nwIG7OXr0I8CKWTXhcGRTU/MhlZWvAqCUDY9nPF5vHl7vVLzeqbhcuZhMsqN7MDHZTbhPceM+xU088b7XdYum/kA9v7rzI6IPtbAkdhjHth2j/L/lFP8jcPnfNSo4qLpGuzC7ZPlfiKEglONA8zPzJYyGSSh/K69WSt0HPAP4+pBqrdeHbVQDWFTUHHJzl7Nly1f55JOvMW7cy5hM9r4e1qBRX3+IoqL7KSq6n8bGUlyuMaSk/ITPPv8nH1d8jZlJL5GbuxynM4uamnXU1BRSU7OOkpInKCr6KwAmkxOPZ1JrQM1rDamjUEo2yAw2yqRwpDk4kGviQK6JG68a5bvWWNkY1E/16IajlD1XFrj8n24PavzvGuPCGmeV5X8hhDhJQgmkp7b+epvfaxo4/eQPZ3CIizuXnJyH2L79u2zb9m1yc5/EqH4QJ6q6+kMOHLiHsrLlaN1EbOzZpKRcA5jZtu0iVhb9lqLaKVx+xqW+GtJhwy5g2LALANC6hdrazwJC6qFDD3Lw4D0AmM1evN4pASHV4ciUwDGIWaOtRM6MJHJm4PJ/c12zsfzfYVNV1TtVtNS2J1VLjCWo8b9rjAtHukOW/4UQ4gsK5aQmmZs+AYmJ36Gx8TC7dv2MTz+NY+TI+yTcfEEtLQ2UlT3HwYP3UF39AWazl+Tk75OS8kNcrhGd9obtuPu+bWOTUiZcrlG4XKNISPhW6+c3cfz49oCQeuDAPWjdAIDFEuNb5m8LqXZ7ivx7HOTMDjOesR48Yz0Br+sWTf3++oAa1ePbj1P+YjnFD7Uv/5scJpyjnEEnVTlHOTE75QdTIYToTCgnNf0eWKa1rmp9Hg1cp7W+MdyDG+iGD7+OhoZS9u9fhtUaT2bmLX09pAGhoaGUoqIHKCr6Cw0Nh3A6RzJixL0kJn7HV5PbVW9Y6DqUdmQyWfB4xuLxjCUp6buAEYKPHdsSEFL37buDtta7NltiUEi12YaF8x+H6CeUSeFId+BIdxC7ODbgWmN5++7/tsBas66GsmfLjPUkAAWODEenm6pscbLxTggxtIWyZH+m1vqGtida60ql1FmABNIQZGX9gcbGw3z++a1YrXGkpv6wr4fUb9XUbODAgbspLX0KrRuIiVlMSspDxMQsCqrv7K43LLSH0pqawi/U/slksuH1TsbrnQxcCUBzcy1Hj24MCKnl5f+lLWnY7cP9Nk3l4fVOwWqN7vo3EYOONdZK5KxIImd1svy/szawTdW2Y1QVVNFS1778b42zdhpUHekOlElm5IUQg18ogdSslLJrresBlFJOQHbphEgpxahRf6OxsZzPPrsGqzWOhIRv9PWw+o2WliYOH/43Bw/ew5Ej72EyuUlK+h4pKT/E7c7p8n2hHAcaHZ1/UnqRms1OIiNnEBk5w/daU1MNR49uCAiphw8/77vucGQTEdEeUj2eSdJxYQgyO8x4xnvwjA9e/q/7vC5oU9Xhfx+m8XCj7z6T01j+77ipyjnKidkhy/9CiMEjlED6OPCmUuqfGFNClwGPhHVUg4zJZCE39yk2bVrM9u3fxmqNISZmYV8Pq081NpZTVPR3ior+TH39ARyOLLKz7yIp6TIslsieP6CPWSxeoqJOIyrqNN9rjY2V1NR85AupR46sobT06darCpcrJ2Am1eOZgNns7JtvQPQpZVI4M504M53Enhm4/N9wuCEoqFavrab0mdLA5f9MR6ebqqwx1t7/hoQQ4ksKZVPTMqXUJmA+oIDfaK1XhH1kg4zZ7GTcuBfZsGEuW7Z8jYkT3yQiYnpfD6vXHT26iYMH76Wk5HFaWuqIijqDkSP/QmzsWQO+E4HVGk1MzHxiYub7XmtoKG0NqEZIrahYQUnJo61XzbjdYwNmUt3usdLIf4izxdmwzbYRNTsq4PXm483UflobtKmq8o1KdL323WcdZg3aUOXKcWEfbpflfyFEvxVqd/BtQJPW+g2llEsp5dVa14RzYIORxRLJ+PGvsWHDbDZtOotJk97D7R7T18MKO62bOXz4JQ4evJuqqrcxmZwkJHyH1NQf4Xaf0tfDCyubbRixsWcRG3sWYJzT3tBQRHV1oS+olpU9z6FDDwJtjfwnBMykulw50shfYHaZ8Uzw4JnQYfm/uXX5f1vgpqqyZ8toqmjy3WdymXCN7qT5/0gXJrv04BVC9K1Qdtl/D2N3RwyQjXGm/f3AGeEd2uBktycyYcLK1nPvFzJp0hocjuF9PaywaGys5NChhygq+jN1dXux29PIylpGUtLlWK0xPX/AIKSUwm5PIT4+hfh440BLrTV1dXt9tahGI//HKCr6CwAmkwuPZ5LfTOpUnM6R0shfAKDMCmeWE2eWk9iz25f/tdY0Hm4M6qd6ZPURSp8sbf8AEziznMFBdYwLa5Qs/wshekco0y4/AKYBawG01p8qpaTPzZdgnHv/Ghs2zGXTpoVMnLhqUJ17f+zYVg4evJfi4kdpaTlOZORcsrPvJDb2PJnp64RSCqczE6czk2HDlgBtjfw/DZhJLSr6Gy0tfwLAbI5obeTfHlIdjgzpkSp8lFLY4m3Y4m1EnRa8/H98x/GgWtWKFRXoBr/l/wRrp6dU2VPt8lZloqYAABs0SURBVN+aEOKkCiUd1GutG9r+8FFKWWgvrRcnyOOZ4Hfu/dmt5957en5jP6V1C+Xl/+XgwXuorHwDpewkJFxMauo1eDwT+np4A47RyH80LtdoEhMvAdoa+W8LmEk9cOBPfo38Y/F6pwbMpNrtKX35bYh+yuwy453kxTspsPODbtbU7qkNCqqlT5fSVOW3/O82GeG0w4Yq5wgnJpvM3AshvrhQAuk7SqkbAKdSagHwfeCl8A5raOj83PuBtaGlqekIhw79k4MH76Oubhc2WwqZmb8nKel7g2rWtz8wGvmPw+MZR1LSZQC0tNT7Gvm3zaZ+/vnttDfyT+qkkX98H34Xoj9TZoVrhAvXCBec0/661prG0saAGtXj245zZNURSp/wW/43gzM7+JQqV44LS6SsjgghuhbKnxDXA5cDm4GrgFeAB8M5qKEkLu5cRo9+kB07/l/rufdPDIjd5seP7+DgwfsoLn6Y5uajRETMIivr98TFfRWTSerOeovJZG9dup9CcvJVADQ3H++kkf/LtDfyT/eF1IiIPDyeKVitUd38LmKoU0phS7BhS7ARNTfwv5Wmo01G8/8Om6oqXq1AN7YvptmSbJ02/7enyPK/ECK0tk8tSqkXgBe01mW9MKYhJynpuzQ2Hmb37p+3nnt/b7/8A1rrFioqVnLw4N1UVLyGUjaGDfsGqanX4PVO6evhiVZms4vIyJlERs70vdbUVO1r5N82k3r48HO+607nyICZVKOR/8AtIRG9x+Kx4J3sxTs5cPm/pamFuj11QZuqSp4ooflIs+8+s8fcaVB1jnBissryvxBDRZeBVBmJ6Gbghxj9R5VSqhm4V2t9Wy+Nb8hIS/sZjY2l7N//R2y2eDIybu7rIfk0NdVQXPwIBw/eS23tTmy2RDIybiU5+SpstoS+Hp4IgcUSQVTUXKKi5vpea2ys6NDI/z1KS59qvWrC5RoTMJPqdk/AbHb0zTcgBhyTxYRrpNFWivPaX9da01DSEBRUqwqqKHmsxHefsigc2Y7gTVU5LiwRsvwvxGDT3f/VPwFmAXla6z0ASqks4K9KqWu11v/XGwMcSrKy7qCx8TB7996C1RpPSsr3+3Q8tbW7OHjwPg4d+gfNzdV4vdMYM+YJ4uMvGHC1riKYcWLYAmJiFvhea2go8W2Yqq4upKLiVUpKjIPZlLLgdo8N6JFqNPKXEg0ROqUU9kQ79kQ70fnRAdeaapo63f1f/nI5uslv+T/Z1ukpVbYkW79cXRJC9Ky7QPptYIHW+nDbC1rr3UqpS4CVgATSk8w49/4BGhvL+fTTH2K1xjJs2EW9OgatNZWVb3Lw4D2Ul7+MUmbi45eQmnrNkDxZaqix2RKIjT2b2NizAeO/h/r6g347+wspK/sXhw79HQCl7AGN/CMijEb+A6EOWvQ/Fq+FiKkRREyNCHi9pbGFut11QZuqSh4tobnGb/k/wuybRfUPrI4shyz/C9HPdRdIrf5htI3WukwpJVMiYWKce/80mzYtZtu2S7FYonvl3Pvm5mOUlDzOgQP3cPz4VqzWYaSn/5rk5Kuw25PD/vuL/kkphcORisORSnz8V4G2Rv57OjTyf5Sioj8DRiN/r3dyQI9Up3OENPIXJ8xkbT1larSLuPPbu3dorWk41BAwo3ps2zEq36yk5FG/5X+rwjnCGVyrOtqFxSvL/0L0B939n9hwgtfElxR87v1bRERMC8vvVVu7l6KiP3Po0IM0NVXh8UwmJ+cRhg27CJPJHpbfUwxsRiP/LJzOLN8MvtYtHD++MyCkFhXdT0tLLQBmc2QnjfzTZXlVfClKKezJduzJdqJP77D8X926/O9fq7rtOOUvBS7/21PtnW6qsiXK8r8Qvam7QDpBKVXdyesKkJ0NYdZ+7v2s1nPvV520c++11lRVvcPBg/dw+PB/AEV8/Ndbl+VPlT+ExRemlAm3Owe3O4fExEuBtkb+Wzs08r8LrRsBsFrjAvqjGo38ZTZenByWCAsReRFE5HVY/m9ooXZ3bdCmquJ/FtN81G/5P9IcVKPqynEZy/8Wme0X4mTrMpBqraUIrI+1nXu/fv0sNm1axKRJq7/UuffNzbWUlj7JgQP3cOzYJiyWWNLSfkFy8vdxOFJP4siFaGvkPx6PZzxJSZcDRiP/o0c3B/RIraj4Pe2N/JODQuqJHLCwb98yvN48oqPzu7ynsrKAmppC0tKWntD3JwYmk82EO8eNO8cd8LrWmoaihoAa1ePbjeNUix8u9t2nrArnSGfQpirnaCcWjyz/C3Gi5P+efs7pzGb8+Nf4+OO5raF0FVZr7Bf6jLq6/RQV/ZWiogdoairH7R7P6NEPMWzYNzGbnWEauRDBTCY7ERFTiYiYClwNtDXy/7hDI/+XaGvk73BkdDhtagoWS2S3v4/Xm8fWrUvIzV3eaSitrCzwXRcCWpf/U+zYU+zEzI8JuNZ0pMkIqX6bqo5tPsbhFw63/SwFgH24PWjp3z3GjXWYVVaehOiBBNIBwOudyLhxL7Fx4xmsXz+bKVMKu2xa3jbrM3z4z6muXsOBA3dTVvY8oImL+wqpqdcQGXma/OEo+g2jkf+pREae6nutqamampr1ASG1rOxfvutO56gOIXUSZnP7jFd0dD65ucv9Qmd7lZF/GO1uBlWINpZICxHTI4iY3sny/2e1QZuqDj10iJZjLe3vj7IEBVXXGBfOTCfKLH8WCwFhDqRKqcXA3YAZeFBr/Ycu7rsAeBaj5+m6cI5poIqKOo309JvZu/fXfPxxPpMnrw66p+0v2sTEy/noo6kcPboeiyWK4cN/SnLy93E6M3p/4EKcAIslgujoeURHz/O91thY3qGR/7uUlj7ZetWE250bEFIjImb6Qmmy82aKaqdIGBUnlclmwp3rxp0bvPxff6A+qJ9qxasVFP/Tb/nfpnCNCg6qrlEuzG6pmhNDS9gCqTIaEf4ZWAAcAAqVUi9qrbd2uM8LXAOsDddYBouMjBtpbq5m//4/smnTYuA3gFFcX1r6LNu3fxelbOzffwcuVy6jRt1PQsIlATNHQgxUVmssMTELA9qg1dcX+zZM1dQUUl7+X4qLHwbaGvmPw+udwZmpS9lx5Cy2bn1HwqgIO6UUjuEOHMMdxCwIXP5vrGwM2v1/dONRyp4vg/ZJVezp9k43VVnjZflfDE7hnCGdBnymtd4NoJR6Gjgf2Nrhvt8Ay4CfhXEsg0Z29jKamo78//buPcjOur7j+Pu7t+zZZJtsLqiQhIS7QShIoFSKXCugFKjVCq13GUZbb/VW1KpTnGlFnWodtSOFjFZRGoHWlKaChQSwxZAgKMSIRUWMARNIFgJJIJt8+8c+Sc5eEhLI2d/J7vs1w+xznvPb53zPkj355Hd5fjz88BWctf+HuXvtG7nnno/R23szAFOmnMH06e9h0qTT/dDSqDdu3AsZN+5cpk49F9h2I/+VA27k/8QT36ejZSNH9VzH/vt/zDCqotp72pl44kQmnjhwHvTWp/uH/wcvqlp1+yq2bqgb/p/cNmSOatcRXXTO6nT4X/u0RgbSA4Bf1z1eCQzY6icijgVmZOYNEWEg3U2HH/4V+vp6gfkc1H07vb3B1Kmv4eCDP0WtdnDp8qRi+m/kP4POzhlMm/ZqANauvYU7776A+x8/h/b2f2LSpNMMpWo6LeNaGH/keMYfOWj4f2s1/L9i4KKqx/7jMR65qm74f1w1/D94rurhXbTWHP5X82tkIB3un2rb70Yc/du2fA5487NeKOIS4BKAmTNn7qXy9m1z5lzD1Qt/zvTxdzFjxgc5+ODLS5ckNZ116xaxYsXruPE3f8eqjcfxxtPe7hxS7VOiJeic2UnnzE4mnzVo+H/t5u2r/7cF1vV3rWfNtXXD/wGdB3YOu6iqY2rHyL8haScaGUhXAvU3zZwOrKp73A28BFhcDS2/EFgQEecNXtiUmVcAVwDMnTs3Eb29i5ky7ucse/QttLfPY/Lks/0LVqpTv4Bp1X39q+wHr773d0b7svbJ7Ux82UQmvmzg8P+WTVvY+H8bhyyq6l3cy9aNdcP/U9qGzFHtenEXnQd2Ei0O/2tkNTKQLgUOjYjZwG+AC4E/2/ZkZj4ObL/jdUQsBj7gKvtnt+0v2ptWfZJVG4/jbWe8wb9gpTpDV9Pfsf05Q6lGu9bOViYcNYEJRw28PWBuTTY9tGlIUH30O4+y+crN29u1dLZQO7w2ZFFV7dCaw/9qmIYF0szsi4h3AjfSf9uneZm5PCIuA5Zl5oJGvfZoZq+P9OzWr1+6y9+Fbb8z69cv9fdFY0a0BLVZNWqzakw5e+AGK5sf2zxgjuqGFRtYv3Q9a+av2THZLqBzduewi6rap7SP/BvSqNLQ+5Bm5kJg4aBzH99J21MbWctoYK+PtHt2ZzvQnh4XN0nbtE9pZ+JJE5l40qDh/43V8P+gRVW9t/SyddOO4f/2ae1D76d6RBedMx3+1+5xp6Z9iL0+kqSR1FprZcLRE5hw9KDh/y3V8P+KgYuq1ly3hr7H+ra3a6m10HX4MKv/D+uiZVzLSL8dNTED6T7EXh9JUjOI1qA2u0Ztdo0prxw4/P/Mo88MCapP3PEEq69ZvWP4v6V/+H+4RVXtPQ7/j0UGUkmStNd0TO2g4+QOJp08acD5LRu2sOFnG4aE1bXfW0s+veMGOu37tQ+Zo9r14i7GTR/n8P8oZiCVJEkN19rVSvcx3XQf0z3gfG5JNj24acguVWvmr+HhdQ9vb9cyvhr+H7SoqnZojZaO5z/8/9CnH6L7+G56TuvZaZt1i9axful6Zn7Ie6LvbQZSSZJUTLQGtYNr1A6uwbk7zmcmm9dsHrKg6vHvP87qb67e0bAVagfVhs5TPaKL9km7P/zffXw3P/nTnzBn/pxhQ+m6Reu2P6+9z0AqSZKaTkTQsV8HHft1MOmUQcP/T21hw/0Dh/43/HQDa7+7lnxmx/B/xws7ht2latwB46g25dmu57Qe5syfM2zorA+ju+pB1XNnIJUkSfuU1vGtdL+0m+6XDhz+39q3lU0PDl39v/pbq+nr3bH6v3VC6/Ze1PqgOvGkidtDad8HttI2qc0wOkIMpJIkaVRoaWuh65Auug7pgj/acT4z2bx688B5qis20HtrL7/9xm93NGyF2iE1aofVeOre1bT1tLH8b5Zz5PwjDaMNZiCVJEmjWkTQ8YIOOl7QQc+pA4Nl35N9bLx/45BFVbk12fzYZl508WzD6AgwkEqSpDGrbUIb3cd1033cjuH/dYvW0fLVtbTv18EjVz7C5FdMNpQ2mNskSJIkVbbNGe2aM57aIbXtc0rXLVpXurRRzUAqSZLEwNX0bZP6B5HrV98bShvHQCpJksa8Xa2mN5Q2noFUkiSNeeuXrt/lrZ22hdL1S9ePcGVjg4uaJEnSmLc724H2nNbj4qYGsYdUkiRJRRlIJUmSVJSBVJIkSUUZSCVJklSUgVSSJElFGUglSZJUlIFUkiRJRRlIJUmSVJSBVJIkSUUZSCVJklSUgVSSJElFGUglSZJUlIFUkiRJRRlIJUmSVJSBVJIkSUUZSCVJklSUgVSSJElFGUglSZJUlIFUkiRJRRlIJUmSVJSBVJIkSUUZSCVJklSUgVSSJElFGUglSZJUlIFUkiRJRRlIJUmSVJSBVJIkSUUZSCVJklSUgVSSJElFGUglSZJUlIFUkiRJRRlIJUmSVJSBVJIkSUUZSCVJklSUgVSSJElFGUglSZJUlIFUkiRJRRlIJUmSVJSBVJIkSUUZSCVJklRUQwNpRJwdEfdHxAMRcekwz78vIn4SET+OiJsj4sBG1iNJkqTm07BAGhGtwJeAc4A5wEURMWdQs7uBuZl5NHAt8OlG1SNJkqTm1Mge0hOABzLzF5n5DHANcH59g8xclJkbqoc/AKY3sB5JkiQ1oUYG0gOAX9c9Xlmd25m3Af813BMRcUlELIuIZWvWrNmLJUqSJKm0RgbSGOZcDtsw4vXAXOAzwz2fmVdk5tzMnDtt2rS9WKIkSZJKa2vgtVcCM+oeTwdWDW4UEWcCHwVOycynG1iPJEmSmlAje0iXAodGxOyI6AAuBBbUN4iIY4GvAOdl5uoG1iJJkqQm1bBAmpl9wDuBG4EVwPzMXB4Rl0XEeVWzzwATgG9HxD0RsWAnl5MkSdIo1cghezJzIbBw0LmP1x2f2cjXlyRJUvNzpyZJkiQVZSCVJElSUQZSSZIkFWUglSRJUlEGUkmSJBVlIJUkSVJRBlJJkiQVZSCVJElSUQZSSZIkFWUglSRJUlEGUkmSJBVlIJUkSVJRBlJJkiQVZSCVJElSUQZSSZIkFWUglSRJUlEGUkmSJBVlIJUkSVJRBlJJkiQVZSCVJElSUQZSSZIkFWUglSRJUlEGUkmSJBVlIJUkSVJRBlJJkiQVZSCVJElSUQZSSZIkFWUglSRJUlEGUkmSJBVlIJUkSVJRBlJJkiQVZSCVJElSUQZSSZIkFWUglSRJUlEGUkmSJBVlIJUkSVJRBlJJkiQVZSCVJElSUQZSSZIkFWUglSRJUlEGUkmSJBVlIJUkSVJRBlJJkiQVZSCVJElSUQZSSZIkFWUglSRJUlEGUkmSJBVlIJUkSVJRBlJJkiQVZSCVJElSUQZSSZIkFWUglSRJUlEGUkmSJBVlIJUkSVJRDQ2kEXF2RNwfEQ9ExKXDPD8uIv61en5JRMxqZD2SJElqPg0LpBHRCnwJOAeYA1wUEXMGNXsbsC4zDwE+B1zeqHokSZLUnBrZQ3oC8EBm/iIznwGuAc4f1OZ84GvV8bXAGRERDaxJkiRJTaaRgfQA4Nd1j1dW54Ztk5l9wOPAlAbWJEmSpCYTmdmYC0e8FjgrMy+uHr8BOCEz31XXZnnVZmX1+OdVm8cGXesS4JLq4eHA/Q0pes9MBR4tXQTNU0cz8GehXfHPh6Q9tTc+Nw7MzGl7o5jRrK2B114JzKh7PB1YtZM2KyOiDZgIrB18ocy8AriiQXU+JxGxLDPnWkfz8GehXfHPh6Q95efGyGnkkP1S4NCImB0RHcCFwIJBbRYAb6qOXwPcko3qspUkSVJTalgPaWb2RcQ7gRuBVmBeZi6PiMuAZZm5ALgK+HpEPEB/z+iFjapHkiRJzamRQ/Zk5kJg4aBzH6873gS8tpE1NFCzTCFoljqagT8L7Yp/PiTtKT83RkjDFjVJkiRJu8OtQyVJklSUgXQPRcSMiFgUESsiYnlEvKdgLa0RcXdE3FCqhmYREX9V/f+4LyK+FRGdpWtSGRExLyJWR8R9g86/q9rKeHlEfLpUfZKaU0R0RsSdEfGj6nPib6vzV1efHfdVny/tpWsdjQyke64PeH9mvhg4EfjLYbZEHSnvAVYUeu2mEREHAO8G5mbmS+hfROcCubHrq8DZ9Sci4jT6d4Y7OjOPBD5boC5Jze1p4PTM/F3gGODsiDgRuBo4AjgKqAEXlytx9DKQ7qHMfDgzf1gdr6c/EA7egarhImI68CrgypF+7SbVBtSq+9l2MfSetxojMvM2ht7P+B3ApzLz6arN6hEvTFJTy35PVg/bq/8yMxdWzyVwJ/33VddeZiB9HiJiFnAssKTAy38e+BCwtcBrN5XM/A39PV4PAQ8Dj2fmTWWrUpM5DDg5IpZExK0RcXzpgiQ1n2oq3D3AauB7mbmk7rl24A3Ad0vVN5oZSJ+jiJgAXAe8NzOfGOHXPhdYnZl3jeTrNquI6KF/OHY2sD8wPiJeX7YqNZk2oIf+aTYfBOZHRJQtSVKzycwtmXkM/b2gJ0TES+qe/jJwW2beXqa60c1A+hxU/0q6Drg6M68vUMJJwHkR8SBwDXB6RHyjQB3N4kzgl5m5JjM3A9cDLytck5rLSuD6atTtTvpHFqYWrklSk8rMXmAx1Xz0iPgEMA14X8GyRjUD6R6qelWuAlZk5j+UqCEzP5yZ0zNzFv2Ld27JzLHcI/gQcGJEdFX/f87AxV4a6N+B0wEi4jCgA3i0aEWSmkpETIuISdVxjf7Ojp9GxMXAWcBFmTnmp8k1SkN3ahqlTqJ/Dsm91TwTgI9Uu1KpgMxcEhHXAj+k/y4Id+PuGmNWRHwLOBWYGhErgU8A84B51a2gngHelO4KImmgFwFfi4hW+jvs5mfmDRHRB/wKuKOa6XN9Zl5WsM5RyZ2aJEmSVJRD9pIkSSrKQCpJkqSiDKSSJEkqykAqSZKkogykkiRJKspAKqkpRMSWiLgnIu6LiG9HRFfpmnZXRCyOiLnDnJ8bEV+ojs+LiEtHvjpJan7e9klSU4iIJzNzQnV8NXBX/eYT1aYH0Yw3po6IxcAHMnNZ6VokaV9kD6mkZnQ7cEhEzIqIFRHxZfo3PpgRERdFxL1VT+rl274hIs6OiB9GxI8i4ubq3PiImBcRSyPi7og4vzp/ZETcWfXI/jgiDq3Ov6+67n0R8d66a/xndd37IuJ1O6n5tdU1fxYRJ1ffe2pE3FAdvzkivlgdHxgRN1evfXNEzGzMj1GS9g3u1CSpqUREG3AO8N3q1OHAWzLzLyJif+By4DhgHXBTRFwA/A/wz8DLM/OXETG5+t6P0r+17lurLQHvjIj/Bt4O/GNmXh0RHUBrRBwHvAX4PSCAJRFxK3AQsCozX1XVN3Enpbdl5gkR8Ur6d4c6cxdv84vAv2Tm1yLircAXgAv27CclSaOHPaSSmkWt2o53GfAQcFV1/leZ+YPq+HhgcWauycw+4Grg5cCJwG2Z+UuAzFxbtX8FcGl13cVAJzATuAP4SET8NXBgZm4E/gD4t8x8KjOfBK4HTgbuBc6MiMsj4uTMfHwn9V9ffb0LmPUs7/X3gW9Wx1+vXluSxix7SCU1i42ZeUz9iWrf6KfqT+3kewMYbkJ8AH+SmfcPOr8iIpYArwJujIiLd3btzPxZ1Xv6SuDvI+Kmnexj/XT1dQt7/tnqZH5JY5o9pJL2JUuAUyJiakS0AhcBt9Lf43lKRMwGqBuyvxF4V7Ugiog4tvp6EPCLzPwCsAA4GrgNuCAiuiJiPPDHwO3VNIENmfkN4LPAS/fC+/hf4MLq+M+B7++Fa0rSPsseUkn7jMx8OCI+DCyiv0dzYWZ+ByAiLgGuj4gWYDXwh8Angc8DP65C6YPAucDrgNdHxGbgEeCyzFwbEV8F7qxe7srMvDsizgI+ExFbgc3AO57PW6i+vhuYFxEfBNbQP3dVksYsb/skSSMgIt4P/E5mfqJ0LZLUbOwhlaQGi4i3A28GXl24FElqSvaQSpIkqSgXNUmSJKkoA6kkSZKKMpBKkiSpKAOpJEmSijKQSpIkqSgDqSRJkor6f/rrkFlemRcdAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 720x504 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "for dist in [1,2]:\n",
    "    v1 = grouped_aggL.loc[(0,dist,100.0,slice(None))]\n",
    "    v2 = grouped_aggL.loc[(1,dist,100.0,slice(None))]\n",
    "    aux_aggL = v1['Ti'].values / v2['Ti'].values\n",
    "\n",
    "    colors = ['r', 'orange', 'g', 'm', 'y']\n",
    "    markers = ['+', 'x', '1', '2', 'X']\n",
    "\n",
    "    f=plt.figure(figsize=(10, 7))\n",
    "    ax1 = f.add_subplot(111)\n",
    "    plt.xlim(0, max(values)+1)\n",
    "    plt.ylim(0, 1.2)\n",
    "    plt.xticks(values)\n",
    "    ax1.set_ylabel('Decremento velocidad')\n",
    "    ax1.set_xlabel('Procesos hijo')\n",
    "    ax1.set_title(\"Aumento de velocidad en las iteraciones al realizar redistribuciones asíncronas\")\n",
    "\n",
    "\n",
    "    for i in range(len(values)):\n",
    "        numP = values[i]\n",
    "        c = colors[i]\n",
    "    \n",
    "        mini = i * (len(values)-1)\n",
    "        maxi = (i+1) * (len(values)-1)\n",
    "        array_values = aux_aggL[mini:maxi]\n",
    "        indexes = np.arange(len(values)-1)\n",
    "        aux_j=0\n",
    "        for j in range(len(values)):\n",
    "            if(values[j] != numP):\n",
    "                indexes[aux_j] = values[j]\n",
    "                aux_j+=1\n",
    "    \n",
    "        x = indexes\n",
    "        y = array_values\n",
    "        label = str(numP) + ' padres'\n",
    "        ax1.axvline(numP)\n",
    "        plt.plot(x, y, color=colors[i], label=label, marker=markers[1], markersize=10)\n",
    "    \n",
    "    ax1.axhline(1, color='k')\n",
    "    f.legend()\n",
    "    #f.tight_layout()\n",
    "    f.savefig(\"Images/\"+\"Iters\"+ dist_names[dist] +\"_SpeedUp\", format=\"png\")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}