From 6496da263171a951853d807308677e3e4d2c0666 Mon Sep 17 00:00:00 2001 From: clydemendonca Date: Fri, 26 Oct 2018 02:21:45 +0000 Subject: [PATCH 1/4] Done --- __pycache__/__init__.cpython-36.pyc | Bin 154 -> 155 bytes .../__pycache__/__init__.cpython-36.pyc | Bin 178 -> 169 bytes q01_plot_corr/__pycache__/build.cpython-36.pyc | Bin 558 -> 742 bytes q01_plot_corr/build.py | 7 ++++++- .../tests/__pycache__/__init__.cpython-36.pyc | Bin 167 -> 175 bytes .../test_q01_plot_corr.cpython-36.pyc | Bin 791 -> 1104 bytes 6 files changed, 6 insertions(+), 1 deletion(-) diff --git a/__pycache__/__init__.cpython-36.pyc b/__pycache__/__init__.cpython-36.pyc index abc397ac59f40d351e1861264050586541adce96..a62fca549aa704eb7e28ce39908e3bf6aae7e268 100644 GIT binary patch delta 82 zcmbQmIGd5fn3tF9XXT~ni5%v39{L&ixvBceIh84?xv6<6`FY8S`r-LS*~JBk$w2Y^ jlvMq+)Wnj~qSW}})ST4hlFaVVvQUCw^|;7 delta 81 zcmbQuIE#_Pn3tC;r0Y!NL=JOXcW0}Z(Bjmh;+VvwjLhPU)a)3S)Z*-t{DPSDqSVU7 elKkA5f};Ga)Z`Kv9bb}~Tac4jk{UCyRt^Az2_9Df diff --git a/q01_plot_corr/__pycache__/__init__.cpython-36.pyc b/q01_plot_corr/__pycache__/__init__.cpython-36.pyc index 460f88abffae2c2371906282e6e7f121c82a6603..b8b5f6237a00f393f3df7285b7fdc905fa3a739a 100644 GIT binary patch delta 123 zcmWN_F%AMD5I|Arh{;~X(OB3RkD-OdguobCfx&?-IEKft^(dC!#7>Hzy!^L*X|tQA z)vtdpPqUv-aN|VaV)v9Nd(O_nndM%Kb>p)qxRPy)5LSxhTHuUDcpikuW{V|qL&qY3 W7;(amGkk~Jgj#?>IN9qsy%`1lh delta 105 zcmZ3IMNnwS!wTwE5Pl30=$Uy>i6k`^hEfRY`1f<~FZkyD3tnKV>tM(MG`$PCU z9DU`~zrcxcR)Q6_=9|fk#xviSSF_plbo=v58X)uw-8lr}w_xTyfItE(lw`^FG13;iW}PE!x!k@G%(86N_C^++F1a*C-78yOGF>t&Pq?`}9KoX; zSd1qG^!5(Sd;{2_3JqutUxPi_QyYlD@4KTF*^QB}u_;q@~&7y~Mrd zL;69v=$h01LVD?F10__$ym_7{jULD!hQsvf@p1eI0iNL1;>1rW?ID2zg&JyTsb_oj>IIV~>G|njPJ;Ca>gBp5RGlwXCq4EUYPk4;BapW9zt%H^OK9F8gmCFSj-g>!;C4IcgVE?BLpivv zZfy0ll<`=9Heb|6k~!)prggci+9uocqG*lre4(98>~glyt+T{RH!bG*LJsD+v$yRJ z8Q;08_-1`%^5&-WT$ha>6s=y)8!O}0iWSLepG#_xnd(=a=WyimEzy$Du}APbU{ zG0F0~-(ZIH{rqk;ntVSxp8h*DnJp`=MvIk6Nlz&40RbSx1P?H!cux^i-R{WHgxAP~ rd`pJI7+uZicwjPqsV2PBcK7zuSFlflPfq5oTI%v+_!DfHmPUU8ouh^r diff --git a/q01_plot_corr/build.py b/q01_plot_corr/build.py index edc724a..24cd60f 100644 --- a/q01_plot_corr/build.py +++ b/q01_plot_corr/build.py @@ -1,6 +1,8 @@ +# %load q01_plot_corr/build.py # Default imports import pandas as pd from matplotlib.pyplot import yticks, xticks, subplots, set_cmap +import matplotlib.pyplot as plt plt.switch_backend('agg') data = pd.read_csv('data/house_prices_multivariate.csv') @@ -9,8 +11,11 @@ def plot_corr(data, size=11): corr = data.corr() fig, ax = subplots(figsize=(size, size)) - set_cmap("YlOrRd") + set_cmap('YlOrRd') ax.matshow(corr) xticks(range(len(corr.columns)), corr.columns, rotation=90) yticks(range(len(corr.columns)), corr.columns) return ax + + + diff --git a/q01_plot_corr/tests/__pycache__/__init__.cpython-36.pyc b/q01_plot_corr/tests/__pycache__/__init__.cpython-36.pyc index c4bc30d7704db1af3a7d76f564945a76f376cb2d..51eec50474b21b28596c2e6efd32884e9c986d54 100644 GIT binary patch delta 102 zcmZ3^xSo;2n3tF9PvxcPi5%uZG5Q(#xvBceIh84?xv6<6`FY8S`r-LS*~JBk$w2Y^ zlvMq+)Wnj~qSW}})ST4hlFa3Yi6FJPiLY%E)LW@(2ienO!GBS%ZQnO=RQj4=o@(W_pi&85S yOY(DL(oz#kN{dqCi&Jw_lS?x5^I{4O4C4!O@=M~A^NWgNN>YnUien~Dlmh^7@+3R} diff --git a/q01_plot_corr/tests/__pycache__/test_q01_plot_corr.cpython-36.pyc b/q01_plot_corr/tests/__pycache__/test_q01_plot_corr.cpython-36.pyc index 40d2b706881e3ab76930c2164e7d4894f4b4633f..d371a14fee35b856436d385645a2369911d190cc 100644 GIT binary patch literal 1104 zcmaKrTWb?R6vt=wl5EmOeewdLi%?-f8ZS?RNTHO14?$EA)`wx-GikT(C7qcKHq@u| z%lLJCoL8Un6~qV6*|cdQ=!7{lJD30b&o47C27~_Zvmc+{d5ryJYbC(`9#-=P12EtP zOF6b);gx>sa|S*HMNo!mhh3JAor2M&`_JO}=NpFFA zY?N>peNe{kOQRNeHp7A5q^PaPYOV3(#*wn)rYNL7G82`}9)YxScw9F|iHXiLWklH& zHlIqJORIJ>GtEf(s*vU$R&yVNYQ3i(aPTfz>XUbD0|?Pk#|_BI+pEJfjytH3M1*x8 zt9g#WGRx=u8$V|!p7qZ;@Ox~Ik|?+KJ@#(1IRRoQ9*i`}X&=Mv;lWo-#VUv~tENH%H;54t-qLw%y7I0H5@Bx8?6NH#^dw4LW1=Pc88}=pNSRqp+yX)jbdYBcXHz;b=i97nJ+#<%%b$ zvBcXDPi4_46GI(WwT(+@v*Y-vrMtNz;rb>jB>pvU-K7Cf_ps5FRLgf6w(-;5`74=A zMRNlumjE~d*!eGjt39J6bdeC1ER_(hFGN{GQ&4|f2>QpDGkQQiZf%;O)HONM9Smf* zJw4)4(2gWqX=frUkj8lva8Xm`maJ>K&o2DjYx15VgIV#95NI5{MHAB*Y5O{5)Yi?F)yT(f**KXu#%y1v={YE;&R0!mwQNn1Yb&d+bj7VQ zg>pL0?QI@1JuHUg0?j@_&_qxmf&r?&BO-zbE608ss(pH>lH*wV74~p_j%J@CIO1q% z^#_gudIkg&u*Gr~nFs@X9Mt(lS*wj(nl9*%tuC*A62mdz&$s#8>`E)w87=Xi&Rx;e+0Coh^4}CPhiYw)^2m|48-Eg<|6@;s^zf{N za=LwX)Mt7ey1+qjDQi_}DSaYk)j(GUK9TaKQ{~=c5=_?jascCS7RsEU*)TIs`~TUQ zkL<>J)>t36%B}oRwXLqf$Lpr3{Rj#Z^7>)k8RVXKb>V_A6S9cM#|>U~MG5_+#jsU1 tD9qe~;6^Ku`0{3em-@m7;= Date: Fri, 26 Oct 2018 15:35:08 +0000 Subject: [PATCH 2/4] Done --- .../__pycache__/__init__.cpython-36.pyc | Bin 167 -> 175 bytes .../__pycache__/build.cpython-36.pyc | Bin 951 -> 866 bytes q02_best_k_features/build.py | 21 ++++++++++++++++++ .../tests/__pycache__/__init__.cpython-36.pyc | Bin 173 -> 181 bytes ...t_q02_percentile_k_features.cpython-36.pyc | Bin 0 -> 1968 bytes 5 files changed, 21 insertions(+) create mode 100644 q02_best_k_features/tests/__pycache__/test_q02_percentile_k_features.cpython-36.pyc diff --git a/q02_best_k_features/__pycache__/__init__.cpython-36.pyc b/q02_best_k_features/__pycache__/__init__.cpython-36.pyc index 43047f0b7d121cffd870478bfcf87b31503ee2f1..7aa23e527356df5457d3e41dfbe0058a388ac8b9 100644 GIT binary patch delta 102 zcmZ3^xSo;2n3tF9XXT~ni5%uZG5Q(#xvBceIh84?xv6<6`FY8S`r-LS*~JBk$w2Y^ ylvMq+)Wnj~qSW}})ST4hlFa!WK1q>sNa%o^EEly9y47{*8G z=tPwA*tfo>Sn8CfTwE%n{l|qSZ?v2;7w1jcRkd-UszF|^0kwx{I}!#*0;--*Z>1b` z(`pZtV|D9-N?bY)Dz`4UQmu{$MGNWZ4G#TKi%Pmc)zgEPmCx{}|Bet@>W-Xo%woaN;LWQFB5buMOa z8+~qCk)yl;IXjcWc3Ng;fEF=C{F?$%o_%`qG&_~XX6M;oBQrbgR0#*|!rg8EEx`@_ z7G^cKkr28~6E>z>Y=_-v`|KXm`zW1K&HXcWQ7dW?MthGmth=gR=rQsx(NaK$`=;-B t)vh@&rO@@ke|2iVX2X<+&_l;J$leg_Mb$u8%9lQ?@$nO17Msus{|#dc=!*aV literal 951 zcmaJ=y>HYo6!&vJFHJ=SEXM#sNR_gjD#3U;Ngc!j16nz>~^j&5%=Nw{-Sz{7;KM+eI&^u#Z@JzkrBIA|H3yy2yG!c9zxRiNa z?PrdGV%xgz<~;ccO>@@TjLdr?tZYSAc1w<7O;%3pT#`OnxvkSu96d!_yS3JI<+uK^ z)w->>Mn=lUnX`uXpj_oC{}R^tUBDC=FnaDYi`gG6Mq2BgiPF0uxZ^PQ+;4l&$Qo8b z8;l8bpX!~#A*tvA=4`Ut&j9(EW=0f@+`%q=G?%1BatMO`FGc{!(YP|JF<)UL;OfC( zaCEZwB$;rjl6f-asaoRZ(PWtyY_MpwKP=L6!qQRS1jSBHAKm~DhDDvFg&d)?!M=*9 zw&uLip5Sk|ko*rtL(d%CQM`-J3@N@2SAbNZPd?HUdrUfNoxwPCuqRAaka@5WoaLFS z#fH7`aQ!M67P(YeT`orVa4yXeE;)VlAC|xIQ6Nl#wVl|N}pGZzm0b`lN*UfvhOxJ_+vK^TSbHbi#Zm-B+Bq8eP+Jdxewz*o=-(FxPR|5jt;8PV}tU^>f! Nk4$N#sb~nH^$W>S=m!7* diff --git a/q02_best_k_features/build.py b/q02_best_k_features/build.py index 9b1046a..fe5dc17 100644 --- a/q02_best_k_features/build.py +++ b/q02_best_k_features/build.py @@ -1,6 +1,8 @@ +# %load q02_best_k_features/build.py # Default imports import pandas as pd +import numpy as np data = pd.read_csv('data/house_prices_multivariate.csv') @@ -9,4 +11,23 @@ # Write your solution here: +def percentile_k_features(data, k=20): + X = data.drop(['SalePrice'], axis=1) + y = data['SalePrice'] + + f_reg = f_regression(X, y) + f_reg /= np.max(f_reg) + + d = dict(zip(X.columns, f_reg[0])) + + df = pd.DataFrame(f_reg[0], columns=['score'], index=X.columns) + + size = int(np.ceil(df.shape[0] * k / 100)) + + df = df.sort_values('score', ascending=False)[:size] + + return list(df.index) + + + diff --git a/q02_best_k_features/tests/__pycache__/__init__.cpython-36.pyc b/q02_best_k_features/tests/__pycache__/__init__.cpython-36.pyc index 86a25cff523fa394416e407b58545caf2749163a..505301f19a6586550a9681546cf3eae008da81a9 100644 GIT binary patch delta 108 zcmZ3>xRsH^n3tF9XXT~ni5%t;N%|T2xvBceIh84?xv6<6`FY8S`r-LS*~JBk$w2Y^ zlvMq+)Wnj~qSW}})ST4hlFaBP*e?eF DdEO}Q delta 100 zcmdnWxR#N_n3tE!{`%F(i5%tuQO;H|p~b01#W9IV8JWcyso60usm0kP`2{iQMX8mE xCHc8AX{m`NrA4Xn#i==|$t9Wjc`=0sChIRH0NCPn}N diff --git a/q02_best_k_features/tests/__pycache__/test_q02_percentile_k_features.cpython-36.pyc b/q02_best_k_features/tests/__pycache__/test_q02_percentile_k_features.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..870f080eba9a3fa4df59231b0bdff85df0f2755b GIT binary patch literal 1968 zcmbtVO>f&q5ZxsyiTbjQAW4xPTB22-Fq{P=GlwYtBlhLy^kv zQiz1~r2LuwogVkvlYc^c>I^B%a_Xc-N@0g1?sA6n-rL!`{eI`q`R~v68jStHHm(-> z`#3b90R}u{6CQESzyUXNCT`?bzL$BEM%1YMM%Ij4vUTc1bIGGNw7`cpbf618=#N`b zM{?Q5neGvTE!cj;U|YINH|jy-2@7}59848*dt)k9B6E{wGJX+{q%ftD`V1#&)_*Fs zIS^W+zcrR-RA!k_V?CA0aPb)kBL*i$sbxG>X(DwzDKnGKgi3{xdx@S!-5+OCi7flM z6j{_hQjgQw4@!!tb0m})%LAeGxnDi+J}r#M?(2zpav1sFXmgk;@(wZaePK=#`mpnh zO4!GtchN`|abS@H9Go{Sa=`@;?;bRuiT4Hpg!d-2vHXs`MV0+@RqYAKXmn9{AIAX> zeFu$UhA;WA{53mujQg4czr~iA4pVLXA2~PKlK5hn$Qvpb-&7QH@#(`?2%M1+Aco}x zQP;t3*bR=-nat4(J%!3(iW1wd&{`_<@FgN=-Av}8V?8aik@bjy-SLid6uMO!y?R2y%qLxw7@ zO%FZ$`FjdmMb{Lx28km`-+vHD=dsopk>Z*-DvUlx2UUyuHMl{HOFG_AsWV(0T%dxx zIxzF83`T_tl*ERR*ANA%4xT?wwRyf9%!?9LELZbsJ`Qf{(6c+WY9HxGxi%tCr0tnv zy6!91%kXvUQFuhNLhUWUzIqQ}^~c2NDmKxnsYZslIehWpgOGbG=p_KxBD;18z_qXt zxCd+CsI;IMAy(M`jVth1^pQt#)A4oQfQTw$2nHACDD?@yxLv jolEK_F0b&cqF(h8*8i@q;vVf4y@jU7>E}Bgehuy46L2he literal 0 HcmV?d00001 From f314f89a322adb29ac5f928c5efe6ef2a3cc8cfd Mon Sep 17 00:00:00 2001 From: clydemendonca Date: Sun, 28 Oct 2018 05:51:52 +0000 Subject: [PATCH 3/4] Done --- .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 166 bytes q03_rf_rfe/__pycache__/build.cpython-36.pyc | Bin 0 -> 697 bytes q03_rf_rfe/build.py | 21 +++++++++++++++++- .../tests/__pycache__/__init__.cpython-36.pyc | Bin 0 -> 172 bytes .../test_q03_rf_rfe.cpython-36.pyc | Bin 0 -> 1867 bytes 5 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 q03_rf_rfe/__pycache__/__init__.cpython-36.pyc create mode 100644 q03_rf_rfe/__pycache__/build.cpython-36.pyc create mode 100644 q03_rf_rfe/tests/__pycache__/__init__.cpython-36.pyc create mode 100644 q03_rf_rfe/tests/__pycache__/test_q03_rf_rfe.cpython-36.pyc diff --git a/q03_rf_rfe/__pycache__/__init__.cpython-36.pyc b/q03_rf_rfe/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bebd2dd0ce7aaed283e6afb499c6f0376200d25a GIT binary patch literal 166 zcmXr!<>mTWc`2F!2p)q77+?f49Dul(1xTbY1T$zd`mJOr0tq9CU%~nr`MIh3$vKrN zsky0nDfxNHiTdIBMcKs#iOE3m{FGGvwA93s(xTM(;?$hf!^-JOowQslR6bCzGIbqBO+7uj7-xl){^#R6SWDyw6lI#lN#P z?a`W$HS^T7o-X-@s^~e{&^7nbhO8qW_fgMPjJa_iFO#13Y=du~4%z6*CYX)zleySA zlNwG2$lKw6gcr%LmD>*Npz*XR79f3xPz!Gg2O3I0-3gJhrVYGmeBc_Ikd{Vwb>l3@ zIy)2xzNmbNbmhFrT-Ub7`eK@3B~lgWd7vwsVxAb=MN$4^L2$c(AH?os==TXyT0>sy zm4X_Ow5F8#2V*Z?D@*hn1^GR^duWwuZ~Y#tv9QM{LCG6ZGJ8NsAkjF0fXG%z{(}F3=A7V&X0}NZZW*`}cNgvG+F)jf46^ i!yO|-~(Ear{T>&oXb#UY?qDbi2ngxzr0ES literal 0 HcmV?d00001 diff --git a/q03_rf_rfe/build.py b/q03_rf_rfe/build.py index e8a8d20..4ec6021 100644 --- a/q03_rf_rfe/build.py +++ b/q03_rf_rfe/build.py @@ -1,3 +1,4 @@ +# %load q03_rf_rfe/build.py # Default imports import pandas as pd @@ -6,6 +7,24 @@ from sklearn.feature_selection import RFE from sklearn.ensemble import RandomForestClassifier - # Your solution code here +def rf_rfe(data): + X = data.drop(['SalePrice'], axis=1) + y = data['SalePrice'] + + n_features_to_select = int(len(X.columns) / 2) + + rf_classifier = RandomForestClassifier() + rfe = RFE(rf_classifier, n_features_to_select=n_features_to_select) + + rfe = rfe.fit(X, y) + + return list(X.columns[rfe.support_]) + + + + + + + diff --git a/q03_rf_rfe/tests/__pycache__/__init__.cpython-36.pyc b/q03_rf_rfe/tests/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..03073b130ffdfe4bfe878535b10c105449d2620e GIT binary patch literal 172 zcmXr!<>mTWc`2F!2p)q77+?f49Dul(1xTbY1T$zd`mJOr0tq9CUy=G5`MIh3$vKrN zsky0nDfxNHiTdIBMcKs#iOE3m{FGGvwA93s(xTM(;?$hfezb%sV>K&QCsXw(;Fss%z6=^T*i=#k%_Aw))-X;?&?fajra5c^1m4d=zs^)?PPA@Paq<2K0O4>Q*3%2g)GSmEZ|^$WPwd&Vedc< z>e$za8tm)PM3BA0BXAE&JR^?F=^=kEwry>~5A4h`_6H7pja{IB^gTE3 zS*z@V%7dY2XJ3)KOA_OI&)*|EMuLw-4O5vJ?caxWe>Wb<47HAVb%GJ_p(DNnwUc zhPWET$9aZDk)NU3efRJQmJn4@*B}78l;Lc4V{l%q(3go-INkUH2G_JvX1jds&*0m* z*8B>nw5$a6TU6#jtstc{HU-e$zqHY6{KFJGkUfFL?2kk;l-h^f&vN6Z!bGQjzeMt? zMaQ0@s))~yr9A9Ziv)pK3CgIrJ-_>jAAJkIRJn4@_1+D+ezKmXN}SiRm8srE1?vVY z$Y4zxn<{CpPOSa$_AEm@y}mggNWYgWUr8h{tJ3vj?H}*O+8nR@=lKxpNKU@TS>L~} zJ5I4w)y)h2BGX1>ku2IKAB2+{(1nxW^1>na9bN(P83td^V^Bp8I0F1(1kUC!X0L@p*$3Ax2T=qJr31v z(m(>~?kSH#;Nn#eA^rslhyE0570pYSO0U;#qHuq#viOOrx;zmsZ_{ged=X!dyVk#r CW%vsK literal 0 HcmV?d00001 From 69df003751b6e646543e0444cac8fcd6d2ca4f1f Mon Sep 17 00:00:00 2001 From: clydemendonca Date: Sun, 28 Oct 2018 05:59:21 +0000 Subject: [PATCH 4/4] Done --- .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 177 bytes .../__pycache__/build.cpython-36.pyc | Bin 0 -> 742 bytes q04_select_from_model/build.py | 15 +++++++++++++++ .../tests/__pycache__/__init__.cpython-36.pyc | Bin 0 -> 183 bytes .../test_q04_select_from_model.cpython-36.pyc | Bin 0 -> 2087 bytes 5 files changed, 15 insertions(+) create mode 100644 q04_select_from_model/__pycache__/__init__.cpython-36.pyc create mode 100644 q04_select_from_model/__pycache__/build.cpython-36.pyc create mode 100644 q04_select_from_model/tests/__pycache__/__init__.cpython-36.pyc create mode 100644 q04_select_from_model/tests/__pycache__/test_q04_select_from_model.cpython-36.pyc diff --git a/q04_select_from_model/__pycache__/__init__.cpython-36.pyc b/q04_select_from_model/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0e50c6cefbc1d4210f5b85e1d4a7261ed324bf15 GIT binary patch literal 177 zcmXr!<>mTWc`2F!2p)q77+?f49Dul(1xTbY1T$zd`mJOr0tq9CUvc^w`MIh3$vKrN zsky0nDfxNHiTdIBMcKs#iOE3m{FGGvwA93s(xTM(;?$hf3P`Q6I_`+tyh1D zKgdg8J>@TWvU;Kru%U{o>Uw`tpq18#d^+yjCkN##j(>_5(=pjwnj3so&X4E{#$b2e}?X3oB>XZLQ4vUJzfB#Th zsIE0UFp;!KjmTWc`2F!2p)q77+?f49Dul(1xTbY1T$zd`mJOr0tq9CUn%+-`MIh3$vKrN zsky0nDfxNHiTdIBMcKs#iOE3m{FGGvwA93s(xTM(;?$hflY054)RPyhe` literal 0 HcmV?d00001 diff --git a/q04_select_from_model/tests/__pycache__/test_q04_select_from_model.cpython-36.pyc b/q04_select_from_model/tests/__pycache__/test_q04_select_from_model.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b68a421fed7e763b220f00c513283d6a240100b5 GIT binary patch literal 2087 zcmbVNOK;pZ5EdovuJ++)635P=7K*080){t_wm^%ZNbJN$0M{+zw1L%w!f3c_IeKhJ zYEduJ)8^EF(!bLquRZxEw5QHU&iWC%MJj>AAvGFuzWF%3KQq(%>*$Z4m+O}Gr*-C; zNBto-^&1MXfF)MI%H9qf?Cr!&Ye9`!;DDRd(?-xh-GW-;rOlwpEa4ospgv(iTd>2< z;S4k;3@topLJQi^ff<;EIhcn9ScGeE9d5u9+#JjYv!Wr|_}|>N1fKd zusy4L>lpWA?RJ^*o(rWnxe~`V&fvs?5{Za(*q3=4ra6cNCuavj_lqRqa-fDH8h;90 z^WH&TC=m{290?VsMWW*omoe93JyN6NCi)B7JGtJHd8YY51PvTKl7a`#eZl2M5hpt6 zkorvELXQA~)^}X}l*!VlwV_hI6=!=}cY`MBKW6>Ct)Trp*F2#y4!pZcZzYnndl^(( zb6f7jqtZotn@e1HUvA(^t!hyDev#+!SVXVM;rBz4{gBJ(00;GbxtAvp5j^i70_Gt$ zwT42J2@GstV8634iI_O-U8q4F`x-RB!@dqpgt=vI5WIUA5sesnqK902*fz1LdnmM} z*@XSd-dcyYcHS~zE7k;;!e!2k`}UGGafm6nh`TGv-7$&r>XTnEKU#o~sVY*DY31LB zHGexEi43)_D{E*cT@B~4(SbiG6L8+5>zpP-(sAk9vW=bWkRa?UF^ig6y&{kkm+Cqi zRbVg#!rpsKbL#wXra2r-J%Ld0w~e(+J4U2t{|x+#qo&p|h(4np>L3K@mt z=Y2#8YbQmB#6fXNooXdK(jQnNfrvKp8VciylcRqHDxdv3Divv0(UYR8WU=u#{|ArC z&2G10yfDmoD#FmTLb^zbg!E1rQn{(VNIJoCfy5GtWfG^!EHxs(Y@i@TQL*%xSHrhn z&UP1qT2`c3F6?X=)Q3C+u8chd;}uz~DP~FWnA$76Z=foC4Ws~-$@2IG9$rZh;+17w wy4FlxqLVzOQYb*)#Ggxm%jGWHo$(%2;eAWTMo}cVMb@F$ZlRpT7ia8$0N}b!;s5{u literal 0 HcmV?d00001