From 9f1023f0a76e2ca1f2adcb4570192b4c8e4411a1 Mon Sep 17 00:00:00 2001 From: Saman Hushi Date: Sun, 5 May 2024 18:08:24 +0200 Subject: [PATCH 1/2] add new implementation for plot_histogram --- src/safeds/data/tabular/containers/_column.py | 29 ++++++------------- 1 file changed, 9 insertions(+), 20 deletions(-) diff --git a/src/safeds/data/tabular/containers/_column.py b/src/safeds/data/tabular/containers/_column.py index 5c13822e9..7c242a0dc 100644 --- a/src/safeds/data/tabular/containers/_column.py +++ b/src/safeds/data/tabular/containers/_column.py @@ -1011,10 +1011,15 @@ def plot_boxplot(self) -> Image: buffer.seek(0) return Image.from_bytes(buffer.read()) - def plot_histogram(self) -> Image: + def plot_histogram(self, *, number_of_bins: int = 10) -> Image: """ Plot a column in a histogram. + Parameters + ---------- + number_of_bins: + The number of bins to use in the histogram. Default is 10. + Returns ------- plot: @@ -1026,25 +1031,9 @@ def plot_histogram(self) -> Image: >>> column = Column("test", [1, 2, 3]) >>> histogram = column.plot_histogram() """ - import matplotlib.pyplot as plt - import seaborn as sns - - fig = plt.figure() - ax = sns.histplot(data=self._data) - ax.set_xticks(ax.get_xticks()) - ax.set(xlabel=self.name) - ax.set_xticklabels( - ax.get_xticklabels(), - rotation=45, - horizontalalignment="right", - ) # rotate the labels of the x Axis to prevent the chance of overlapping of the labels - plt.tight_layout() - - buffer = io.BytesIO() - fig.savefig(buffer, format="png") - plt.close() # Prevents the figure from being displayed directly - buffer.seek(0) - return Image.from_bytes(buffer.read()) + from safeds.data.tabular.containers import Table + + return Table({self._name: self._data}).plot_histograms(number_of_bins=number_of_bins) # ------------------------------------------------------------------------------------------------------------------ # Conversion From a4f8064d2132f6b1d5e1610d6b448ed4a267df06 Mon Sep 17 00:00:00 2001 From: Saman Hushi Date: Sun, 5 May 2024 18:08:44 +0200 Subject: [PATCH 2/2] update test images for Column.plot_histogram --- .../test_should_match_snapshot_numeric.png | Bin 14107 -> 7705 bytes .../test_should_match_snapshot_str.png | Bin 10148 -> 9193 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/tests/safeds/data/tabular/containers/_column/__snapshots__/test_plot_histogram/test_should_match_snapshot_numeric.png b/tests/safeds/data/tabular/containers/_column/__snapshots__/test_plot_histogram/test_should_match_snapshot_numeric.png index a56ca4a878a2b569ed76c0abaf117be408443f08..eb31137046b9e166db9cda1bd209215ded245c77 100644 GIT binary patch literal 7705 zcmeHMc~nzbnt$LzS%{QN6)Fnus0b(sVMhm*iXy0JA+khe6A=Oi2wM`=QVIovK|utP zsaBu?2?_{8AfPDwQUVeXNRTCweGh~{GT*bhdU|F~^_kN(f6b}<@eT>eefQn_eZTES zoU*b|_rl9RW2E18F}@et+%lE&`8MDNw(O~wISMO zZ<>j+%6Xz8HSNMCHT4eT=g!Lv+*M9!%*cgaUHensu_p?e)w7D!0nGL-kL3SS>|H=$ znoY8~*+YxdNwX0|t}T~yPIv$Q{of$S-P0x?mmr9b--<&>*qg8Z_$92|Z>(fCH6vp$ zLC~;y9fUZo~_R|jNC_7B_d1pSHhd>YBffZI`h>wTSxzg$WrdZrCZ7_ozHbU zX)3C=b{lScVfXyvVX|b3Ay6|DRbQbl^EnUS*!nTY^+Z0NN6*Y=8)C1&KdRJUGDgbI z3@c+r!@x&iV63B~qb6%OX9xD&xpR*nKh6ml`8Yi@6E*3Fgj>PPZnD|zXO1krc*g)c zI!V|Lx7uzLFkIDHNN8?vPY?=)?^RZJ$B5Ri4>Ny$sr-%uS=28VO8)fbwun2+CazPH z4HTm@naed3=PrDd+P6=4z43!(eGS%KxwDKhkZdv;sH2-AK%SqV5?HINjPb4$2^frzA3qk4k;ZC?rQ)vRk+Mjc{a?RFgwxY56_Fe4UR-{+bwoOx z+sMDG&a85ccZ~Du$nURE#@7ixzEd5mCQy`gD;^7pT-4_otVtSs(3c#{ zmP(_JBLRMXPnk^bs{Ep&B3MtsOO8|R+(hrJeRFGTTnD~%@k*5b6+uI?s5`;EzaYCL zxP@B(!mD#`g{WP~U_T*aVZbwA1`K3N@lV!-;VWr7Pc$_(Y0nX0DuY8q)Hz>PQPE@v z$Ep6Qbc#age7c=tTr)m@k2Tq&IEJ;gxcgg?Rm8D=0;0TeV-uHa z>e6vXLAmLdU-ob8g&IhK&8$(+cIn9XYR~twr(sO_uIS%|1a}&S%XWO_^Ql|HkS++O z>U0|WYH^b5XwQd?m0+aP*3t)w-bLwaU>u)szFkpPsY)@J4# zPfs#>G&8fgt?f~LB1VzLH&>lMm4B^Wdwpo5@sy{K%%ri66v>nvN&eM8zy;OM4++~ARpVHO zf?G0?n}F87eSvqqB6<9l@$@g|g}u>6t6rsMWof9<1ADrku-TH`Rx1&o;q?>WmI1n? zrKavmPEIz@Ck6z#)jZf!&J@jaO6i{2C3*~Tr+~HtXxlqDICxS(kqAT|Icxy@MV4PR zZKsEa$A*PM7R!FAEK;nnoh_>$Fx*y0H!&I+8M)N~ywS|%((l~4bBR+tKbR>#>U8qt zNt(;Wix=B;U%q^q08|hohalnjx3);^Q`otC-)Yn&84#|&UZ&(Cn(QAK7{J0-&|H8} z6Ab;Y0&3HCObHqrVVSjozUz{WFen{!N+mOO3^U69r80=VHb5-grajl)8g1?9=;*p6 z1DzpGwrcSK7l1-@=3G}mhgW(=MvYfNR~$|<86VUb!i^P82?W`a!R);URw0Po>HCN! z?cF^k_lcf&<)#I`y%j&pZPwWZrRCw}mDTbIZghk#zaIJb{lHj%UjFDBd@En}t@;lx zAM-pmV7wjp4atd>Dj~!FE|&5!rPVVW9K*)i1T7g+nVe}%xGMS8uRZU)cVgR6Yt{*P z{lIic0H|<-vO(FFEX-x}Kd`ZC$4g0KVgGhj(f3vc{SOwPi3q7y$&UpLim6(%-V?3YF-%$-rKJ|;aqU+4yhr*dw``Hc({MF7P;`O{fK7el0#Azi6AMS+_x4R~ZF4N8ET)ySv$GzaYdri|PBnDDf`US!WPZrT);6BdV4z0i z2D#7A&mS{{GQ(ej$_ILF;&9@j)wgyG4G!kOd@pf~fz3n(6mdZ)Ux!g$u4tCD*(jjz z9&X{X6J>EGFF$`3>mN14e}cf`;vzh!&EyE4VwCINXk}w#!xp~GcI~fuDCdBxg0BHILbP;<%oVjq&}i%O-};x`-QN%K-hb1QdhG0EjHHma;D=qT3T9GdK(Qr%WZo9 z{yxl2f#n9BA2g5>zg(3SFtTyrGlCr5=!-;eHqt|H7!o4x&X-6ec?AV&KmUBGO&3+K z01Nlwv)5kMW{ZASCNnLO@Hqb!1hTi`WeW20Ts~x+L&bAELo%HvdZWaSq0{NFSvQq5 z9UkpG5w~(wdRr@WYslOT?(XEP5HN2meJkQKjCy_|$nVHHtB}}H~=FOYSnWz~c z@JO?+P~hRAN%{HtNr62Px2S*xtLqhzQyEXlO5?R!rAa97X8w>>(^nm<7}N!Fe6s0; zmVzl*Q~#xDOQB_>HVnvH(v1ytb#(`Zhd1SvfQz(AwFIccE%Yb_jTQ>DDUyZPUH}F7 zl{#*gU$BrW`Aiks+uGYF0*l^{mPbw%ug1x2G77ln)<{nVC;R359(cU9xp_HR%n0Hq zh{mLnv1_2U$0s7JL${$OINz&-pXG>zZNK)vr)+KS&R0o*eCDkTza}g;hZle#d$YI6 zw6(N6FbNU53^b(-eEwWjm!OkNUYvieY#uP$nJ{=2XDEw|Tb=qJJba6}I7%$FPd|Vl zf%2NQGXIJ}{1<)Y|I?qPUY2=v`Q2Sq)B?uULbx&2=1kq}!#kJxLx0abtp+rHiM2L0 zfIg7xQbodQ(*H>dssu=*lre6vZ!Qx}P$@~EfWhUPqH38es>S{A8?wHF#&RHb`FnVK zH%t#S=U(rxv3#_DYo={B44~`T`i1M<8j=!p8jW>$;K7=BJO-5M@yI1e*_zypI!<&P%?P%x7M0Ej zg+QvraRKyl0cJmP=+m)9&2Bt-D$$M=;3etDNp`{l8FiDryu1u1-maBX1sh`FdmIUK zuKa0<&tzY9dU`t6-CYnf0(v?@+qLE}hfA965`l_IKv|@ohr zlf%3py$U(?6zoIW3um1W;qX?BPjQgB1$3bdrwbGbs@`*;F`z#L8dPx5iKw9t0?RXZ zYylI71+z{&dha{eh9rZ+?wj&Cp`yv@>FKA1g$CFhpHFX4T7&6gX{C~((uSs#69jNV z?jW?F=f0eU*$Nl1?0K$D-Jp9{Y(!LF3N*d4Xih&XEL zKQpGOCt2i4NkUlsOlHy5sv(dfd@V_j*52Pn_;0d#tC`tsC*h&tK7dq@7Steje_jLm z=tQdeF4Y(c2iDCm2Z+fcKa z*m-}d(ael8OQhIF_#%k@PpIDo83{&N!!F0Ax;r28&c6|BIkUYuh;ZS;g*(?0LBp#A zcHdZ{lJ=X|EuC&Ufu%ufuC|o6I)NO(MDt#3Ulfx=j!=&pIPt_%TCp#A^8jJa=eL;b zO7a+$qUngA5N29>?KuaKAg(vNJPlp@_pBo8P}bFf0LvmNT}px3~8$T@)_n zb2yyRsB}eMwyLi`t%lV{J8>-J$4dr(3*TT=tl)=%bhSii1CHEeRkS?8J8#& zig2_m5gWTJB_reNI)Ugrbj$8LQ^_=a9?y>3@URpUHMc9~g>$8w zaJU_KT(z_HSHwJc@Zd^TDoF7v2{s2p>LsI!$f5qTeHz_R2>UMN?FMaJy-dj=roT2m zEiFwAb{0#!EwAJ@*plwy>3M?I=~J#y2y1Y?(PXv{jYL1b^qiXOr3xT?3HZB#`W?^x z-Wfc1I#bg1u0oOY*}PCH5feJR3i>l~i&wc)$*cf^*(w7;l1+r~`kmnLK+|=NWd-Yh zXTaMNF}2ucqdOijrV6OxSWT2!^1EcevRrNlQkg@nC(7s;f}}cQW25uYx$N}&=H^&1 z9xPA%c$EK??B6KFjPkm40?`lsidnhLbZVlMbl|!$q*1?fW~Z5OBb>)TH6-c&#GEbeSD6befQD_cyH2jTdD~}M%;H&FTX!h0go7Suz%gnEP4+pE zW%)HxP(IZ%uqo=~N8)F6OCMqiXNBO^0Y$A7Q|{gSzm)c?@- z`ocsdwc^qK%kWe+;Oq!*R;ca3qAsJgwG}<=ft?MStX3mT)nn31N*s~z4k6mlFuh~- z(hYiGD&gj6G6$CAdT$hlKgt?w0EA;u=E5meKdxB&Wft7XQkd8#Vy7>b8|Zlr63AQP zyq7Oi^7Hj@^G)&EZjrd;Vxy7`6f9aNXeteP1ew-Xt}5|CV+znlu6Y%`yC>}dm?OA;U6B{{Yo={&RPSi_bHW zWVVz+kI5-MveEII0E$Deyug1myo1;${ bWq~5zvrctIXMHRJFYHmPBg}uhc=JC1)sA$# literal 14107 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 diff --git a/tests/safeds/data/tabular/containers/_column/__snapshots__/test_plot_histogram/test_should_match_snapshot_str.png b/tests/safeds/data/tabular/containers/_column/__snapshots__/test_plot_histogram/test_should_match_snapshot_str.png index 00e5e11b0c67e1654bbdcf9cb587ff6a172ebbe6..5162dcd705139b05cb7f62dcf029580a080e351c 100644 GIT binary patch literal 9193 zcmeHNc~p~Uy8jRbEdq5MMP*Y#nW}&V*_UW7C?cU2E2XSfA!P{&VGj`0R_mysARue1 z2&l*+D2OZpQFg*A0YV5%!oJ8(2qgD;?c6zc?rHDsoHKvjJN%KOA^E=dd*A2zZ4WoT z!k>`*WY;GchDn;8{PJrITNjRDB7Gah;2o`&9u9^n<(hqY>}+7tB#V5{+OJeNBU9-t zW>xa#<|`LC`*JpY^2N#6Lt9RB+Yj8nApiL}HwWGH=yMw{4>`A9sZlz0Cduum{@Ofe z*Bykv`W^Tz;<2;*jL+%*A8y^@?&$kPbB@_?(bLk2j`us*)yWywn zI5u(G^wy5Mgp{EDmd3n`3gn6Ba=y*Sl8ydUe$HF$Q>TNg{nC`0(xu+SotiEjRj(lP zp~gf;my(EwmdM83ZSbEs_@zNcO0XLqx8^IdapKv%aBf4D6D=tQJ~-duy` zT<3*IE=|a%8ITW!XYIvA3YuHf%=10E@>b_?LQ)jRemdBCk?Dmah+IyNz}9zuF*np` z?&s%c8X*_2JPMz!x-A>Wn;Xt3Dk_T35bg9?_o&be3*4ldbmL|Q1 zK@%+84hx$uU2=K*^OkrVB@9-`*tB(>hdfneeV}AOZxF#Du>YskHr$$3F^)29z#dI+ zF2|c->q@Q#%?+hJeR@D8+4t*WT+ZXiHBT~95;jO|=U7r!+N4t8c0m$5uwM?-v31y= zO@Hqt-IgHzA^7Es7o2!PN-Z4ST{ZjHzKgmTW^mfw-5uS1ew?AcZJRB{*egS_938Tj zmR7Qn7YW7~6-5gzqiwjjSlzxE@xw?$dwvMgC9W!UacR%<~J?>5jB8bgp3^t}2!cY2Vzg zTK9RiTy$Ms9jZTGl}=g9mQ)P;uuESVV?48ozAP&4((%m3_Ju$Z&N?Z0>ymIaN>+-RV zs{=B;*0{2JpI@l*eR~qV^TqY`eI4JG1bUm^-u1E~58mfQnX7eiv@I+wT;1H<$i1DN zuS%-Hum^@iAgE#AaT+PRg-NPoBgp zR5v?t@Sv5AO_5TSyY-R|<5Ax9vE%|u=Uuq_+Zp@~eXenM<#lPx(9kup`t53V_xmfa z2UNi}n~dJUR>vKM3F3+&hoy~|ouaHg=Vtq^O1to8xn>SQeE-$u8R9sVBH#rL+)$Z) zVi|g%K3289QHPx*T#gjhq{TUOZyCg}+?`MtORNCL2;-FzxzPC*vnaqO^pALbKes4O zBxUu2?dJWp%-+R<9zTY?&8ti2#iZo!kG5qDyF2m|Y|Alh0+XNJS-usoyC*9vD{(c5 z%%1grvq^<>SzKY{XO<|IyDdcKFn09(`rZG2`J;QFe+VNqCd7z{iai3bs=OvyAGOb1 zyI9Z=uSu%ebNvyaDdowNC$(^l2{Mi$&r_>JFsH51u3p8H1??RjF5NF&i-ZEc=B2*! zTRS!PHyQIiipSZ(<5|20f^oEKTROM@x*{C`X^%gXSTyk0gZkggVVHL6@pYG~Ztc`t z>LF>KfAgbU*m8fo5!oL;Q`nGfP{>*U(Cxjo)a&tVyU>OA zi9PAr*=ppeA_6ltJ>5kdzZuIN?;O$$FC{PG8QJ!2&CR(Lv)8U&o1bJBvWUj~uBM@9 z`SdzKxoG8}YJ=XpTJ9a3k~w-kr#9N^%yaKJe8Q2>Ks*qeWMySdc4Ot^xs3#jJU?=` z;;MK?Sy>s;#@yU|Yr0HG8OLvB{84yJ=^X$2E>DD<8vW6Je8O#h3 zJ8b6W?oL|lA`ois?AfXB`-2NTDIV^5@y(B$%%Wxnt1~D6n<5`)G09!`fb3q_@5l?`%}Uaj zE#fuy0dv*f`^;)~zRhwN$&9K9`9$}e(gGz^Rhn>-=!*kyZ^Y|*e_xEVeepxfHG|0x z)wXnt`WLQk`ff{r;Ct8`He+Ay5ZUNqXwr*9M*R}8OB@Tg80pxe?gJf}R#2b~8i@|y(;y8sphk~0 zoISZRKbqgNGS0|pGE+&uXB@i10kL5z6s*m)TUk2ilrE0_>e>bQvpO3Q(qrDdRL!&pf5Hy7CxflxHe|3 z8Tg^^maL9iw2CEtqAOpgsPU0m^z7-RT0BF{XFKNQ@Jwdt(2+k`1dZsG*n};P zv?yH_m&S*NhBEVD73~ZLVfjPkW~LIOFL37H+n}D-voo@T_r`Ap={3=37pX z81?~NfU|lN8T0W z0*7r>G~a4YYCm%#4Sk-(Qoiz^0}3a$>=C)Iyj2C?@b<=5=33W7lbhP#X#;Mp zj#<;j9wRRQ>EB%b&#IW;w z{MJL8eo;say$q5UETA6rv+SXq>}-0TbA2~!NQSm-QYKi)8Lkjl>={@)qNSAv%49MK zI($4q2K&X=VD&(sj6>iaLbBgERO`@HUNipx(7@iOuyA{ZHdSPTRU7~3PGH^a)Eu9Wr;ejt&c$U6c~AVc>MV? zsEJB#ai>THBMkrnXvIQSU0Pb&KJcW#VFRY)ioqiff<_)(*Zx-9x$a)chc^a6&rUl#a|#3;Qv7%V>%>PEdXU{ITZo$HJuD}s0ebK6Wiz)U zc8LPc_Pvn%XY1{cYRvzmpZm>r(=M7y(j%e1A%KFV_mZcR&!n0X{X;QK9}o5u`Xv^O z&*?;M)g?BCf-DZQp>X!ZfHjkw+qn&zO$|+9i}{BfN_2s9b{Ylyri87GM(hAWZXCIT zC4GLuly0=tbNc?_J=Yb(0$rL?l3D&tRnjmWt^lC}_l<;l!!O6K`at0gfpz*0e!g~e zWd91_Ou2AG*kH;v-P#}1N`Ejh0W%!)?xu`ai~BSCVr})(`L96~Qi<|#Lq;>v*3oHU z?7gd}C*IF*L99MAGZQ5`s=>Drn2$1Y*kW6FkpTGrDUW9sBtfCQ!qYxko}&swhMK5U zgQ-_aP`QbA(9Hi;5pVjah_T=5#YEQPO~=*mjfK3XVHF(DEJA+RX@!!C4RSdS&7T8{Sa=3hO6qXNGIQuxHb`h(thvMJv2=EJ z222040*XDWu#qZq8X3@}(8aEu8W&Gqlafz}*CaqTq!oYo{1;Id!PbtlX%uh>QOXQQ zN@zMhIl#7$GjuQk=ka73%$yS*Cu|KT{2tu_bZ%^y0KNo1r+e4z@z1% ziL4<7pvb_j5a2fr_HzdoE^q#OInnP1NdM1&kzTp(5+Lc$!%jz^K7ER!(L*+Q7xTv{ zOU3NQ2iFx6;N6lz`RN)Ez^p$&js?Fu)1;uGcwT3PT zvRq~c-T`Z{oVox&X0Ix)I{hkmt*oq=bHh}Mu~{pGS(0tE0`T5BITIA_psS5=z@H_< z4IC{Jn$OnFyey6E&*~2(kS~>3Malb>&{n!3Sjlnc10($=2cx>4%%=Hp>nx@a9a-D^ zy*I6QcXM;7ZnvFoTGBNzt0p&*d)vB{UewRf7yAM;lnurLDg8gmCdyKX~rh$sC7LeX?9<_Q!-uP}SDmoq)(4 z_JeHC^de!4Q!E4fVt{*XfmjiinVda`j zF=+od$4~!U2|1bEwAZ1W;RbeQ0dMaeNQ*Ci=&N{=ljCLE0V`TrS=p>;T*4xPt0=2j zG0THU*&4g@7LKqJ<7yP0$Z^-tV^QE%#lWgTvl^ zLLunliCf22;3*rx9cu??D)^f~HaQT;Uhs7dEoDf9hPIluhuG|Ynl6;2gNdLkh!hwE zynT2CPCtTwWz*5_mjLmnQw;SijTX+n_8o2Q8Z7sJ-`d*hpCsg}Q)&~m-1ES%D8IR5 z-8^s`B%cbQhN>XDcM*V;+R`{4r3@$xxuKHMS-bU%>Xk;Xu;^&K z{%1<2w@w0;K`lMJ{R??v95UTj*JvtckmYKPNb9O>Kz3dio)e;(r|LX z(5u0SdWdt_+bI-bq{_r;2P1z+qc9cAl%$*x?!h8%tnJrl&fEnS7*bN?oebkM+3A*4 z<77is-&<_KV&P8XkU+K4`Bppfh_y>UOiNI zFsA`g|G}IR4H`@uNX^H@xq03VBpvJY@Ao zXn%U=({;Fov^8RO*~%DF$go|o5RYQuJq{Sw2G@+_SV&H^&Crrj>;inDw=$AC2b-+J zUg;>*5Bl1Fy~xR8yl(%GN#K%^qI3wEd58QaGJyFI+6~`1E>#P6nUn*88xOjI5c!EM z*AdctD{JdGP7Gx=>d})YpFua)fS#DGR1_RWi_4}7R+1ptvMKbmAEGBGW>CXkYgS() zc7OvYES)5R?XFX&@amOohjBvQDhzEJ#Bs|NcK%(?L1Rxce85<9bZ9&a70dd?Ayp@B z*UsGY=Vlz41t(q@IYxM ztDKPY{xXV#_7JYuvnb~;2972Ei0jvQgUJ^N#(9MlexY*CYGr4JB^9+3N?L4Jvp{88 zrJqJ!^l?-tC$Ik&JWUeXvyXcU^ES)SF)JkfzO%KRYc*F-b7y4hjXh4ygM8I@@v#Si zj-n!p1dBpn%pZQE_X*l?bUARX2|o-B_t-2YWKx)4A?yU zxg3XNuaH4ml#GCFnay-uJAfiv1#mZK&z^k*?q!mAq0^>xZPKerwXi2jLcQcL*clWL zM&Ja?D4TKQ)ma0zj7X=fTedJQcDP-F@<*^eU@=)vdeB#;orCX%3YW@7^rlPZe7apT zptU?}a}j_8pfdq5+o6c{G;1P%w!ue|AFDDuX`Jf&{Q8g-vDM)M~ zDCR^{S1+P?^CPs(RLMpw14hUuO>U=5Je4wD?hBc@>DT~ALN|n`9mv^D$MQ^icHc{G zWK((ksQ_ByToVqb!ww-KjoCoO;Uu;ns`}&9@l@1$RDo z2p&y?BPz|Wb`t+nc)8l-`AwMC}7 zPH*4^B+z@p_>*Q1yb!jzdg(n*4D-D2c)<)S_pM@X=2lqEgS0f~s}ed$0E6g4i9Dps z^+3#X@Vo|S1P7=J42#NQ0+P67U9F?TAGROPH81MFCi}5gDXW8unqjNU=*vNX10Uz9 zu;b5VbE&&_CvY=mns0&MNcPK3)McD;$V~PYT;~%l_XQhZ5$fAAT zZL_`z1)>LuhbDP(0!F`R8i4#biXA*>4++AfHXe1#SX|Nx@&sfH0Fl>_q^Ie~?`F&< zPlu?WO7?s`nvTqq(us%$i0kv0ddb7H_3B<^$r&pk$31RBI$f<3{YnW z0V87ed_)v!i`p`kS$W(tNt4hUSL9>GjD zUc>nmU4Q(U-KB~RJb;jHe{vkmf}hzIszG(1fEnMmHW*W&+#h28raa(^fNr70QG)lj z!?|rgcz86RF)n-qW*0iguS+$eiAl(Os-i^{+69=?;-`RZL*TS5X<=)#U<3_6{^bF5 zvi~$s{Hwh*$;-)Ai9mB9BgYl%Y=N;*U!k=mK=B;G@oFu7AUWisHu5Z)`FJBu0{tVA zB>8pN1hM(OaWJXpLQ!wOjLkrmY(;tkfs`F=&S*!Lty=L!-YS4~!!dFBdk3>$?S%J8@Q8}2mS@Kp1-Iq&G{C`Ak-(LV75&hSs$~o;FIbIx>R~fCL67jLbOmvz zjDfwMI%W9PeU`z2uB->s)ZLYeO`Nq`ziy%(2nvaJ_$!SJ;3xp!a{MvmQL6};2=K|m=g0@8IY7^;fGKxm2xN>h3dGtS5z8yb37K@cgS zBQ0P7r1xGGLZm}N3y@^rA9r`}o_p@hxx44=AA5FlI2=g6eBZCU@AE#-^ZtIjq_4%d zecyHr!}#zQ&t1VV?m!IV8s54E-ce}jAH^^Ud;GaGSG{7V2mB+AH^*@}f;=BzNd0Bk z{pM~j;{9#gKL|Fo?s@s$lh~@@y~BMMupl$WXL|So-(?! z>7i1FRi>15t@+`^t@rEeX9eVL#bCxZRvKQS!IRNPHEkQ2vCG}GeF?6Ov{-|ZWO!lN zrSEMV)nPQM;n*fj@_VkW*rj9Kf5Ki^Z90IRe!ulJ7Wnfn81v>s7#Ftv0>+K~`SCxx z(9Ld=OZ$wqwY7!ceB~5nZRU1Yra2*)2b&9zj*g~Jq>+t zUAyL}z6GmL&2bxV^_#md=2zXftpZmvOYtQsal}1l`iq{VaA98d?(XiXZ{OZ=iuBaR z4mYIut9s5zV_bo8RVDtD(T`4Je>AS&oj@dMM+IlSiBq3-{bOscZBw3omu&e;r5wA- zajZTn)3P!b=3yi*7--*>sh6PPf5LsDy)d6`$)-ody3|T3 zvsXrP?|%7U=29arr0jB2)Nk(nw3-xF(U^LcATSrK!JZGMjfinp`YedOdAECP6Z}uy zZcW0~91Id64Y8LBnX6sp@h{H?IgyXUgG}K;v+eywuJT@U!+Yx<@b8b-kuAEJ*4N(E zl|rFVnD@-h2bT6Z%j<+o*GzPzd3LjhF9?NBJ-)MLeLjyf zddGS0GU?RR^mK>p^qia%u%ae~PUapxHW3X4QK#Zf|}VvH0Q7hi?lTxMlj zl&MU1mc{?X8T!R-FwLiAR$wqSB0e@IWoAu(HDKwXpH;&BJ|B_p$6b=D_lqOqo5XIJ z#dM?@@2Hr5traY4l6~X+Bb%c}=@)5@afMzBa`+=hj`S`poS~Jy&7}?U=J&9#+fP{d zXy9`Q%VlL3r0^Dr%_`b6M}|G`G`~2Lnvvm{?XWb}BXrX4lCa(;>{73`EN1CDoiA=qs3lXvq+dI&YQ6?J@@5fOqb?tDTChc+CERPkbx-moJKT2s?5Es^Jko}T&vf5p%+1pQ%b>F-V&eH~$O=jnSK+E*72YuOft zFy5A8a9A%obT(kQ#EFXs%i1HpELt)0R8>~b`JQ`MxCV9P-N@5A>tOYQ{VCj-*Q{jG zAxJa_%l}69{ce>1xAXab;T@B4Ja;GBQ&TfD^;7iYPTU=?sE<*amFY@2VWZ8j^6kY` zPMs{^NG@xSH z)>*P$(5ER00VebEGtP4@(VFAcA|XuyOSv$*#%Bl5x{O8HvJoMIM>pN2h)u>~+JYqwtm11qEeVtZQpIk+bvr zV+RbAb!&R_?d5NL`U|cG(z^{7MmP4cXi!Vk@WN2I0carP&z)o3KEVkqcKO&bsPxP2_Rwf|W95*RedWen58J$YTe0AJ*;W z3gN=0*0m?pQL+>NKiU6Dg7J5N^n1xpq=p&0yx%N%lU%l>4b_leZLR`-cvS67vA{T; zpaRihv4&V>c?g;)MMqN<2U3Q~H@`K%G%5AESL``U=~)$4bol(6M117TKnX40cLqd zK98^rP!3k3U#zXG3&C}Cbf~)AgfVF28~6g~`yE0L z0G07BvgI9n`%4V_0gV+a*|LRJk${yi5JzEpUy#=#c`wmg+wmV$!W+`i9WFl+wR-L6cHEasVZ$`c_ zh80{++dRx@(k!nGwoD_Fn{sUGOzo8bFcKXpTStLj+p}rBVt&WWi`{Mq^fxy@>+S8m zYHaL0>4af+;(a24DRCaAq$Kka4+M>-eq`7Wh`^|mw_6KlwqSuqISpLz#&@4u0>-jF zA57FObQ&n|mV^f<7?lVNBU;<(a|HfPG%DNW=IH1MyMqei-h_r2ocyhNy9RSEY)&@c z6te(wRWwsPiQsn%$_WBTdvyg2%XrhleHXZH5u;Jn6`oVrX~>Ob?a%A=$CMnppCtxs z6z9kDV}a92aNX$V=S5I3O((}OtXto7`pvN$I5rr%4(V7r~ zy)mrAeWM)}67gO?_^&PLk<=F34P_{_pZ|mfwzk~iTA8%uz`eJ_z29^U@@xeb{<7mK zCQ4kNclLg}{3S@tDFcR|#b+vmDV1@YLzD)+4goo=H#ATWb8S>k$@k#FDirVJW9z`m zDV5YNGgmz{&(2;x4C}KiDd(L_&uyeDS3vmOEa4r7Qr(tnm@-`kJ2#kYq`G+>xMNP` z2nejwg;t#?O=3W1@xQUjQZj}f316$dBnl95Ar%;@47E!>OojiRq7foy5FfBQj>FFmmbre~rIoiN3!iO)D~}py)@yPYpzLCmdw@xjaO6_D z_ESyvO27Z|0JDNuquI2C8?zG5>%CSXXyJ9;!hf-2ecXUpTPIf@i}1-neevqV#Dq)B zdBOaD8-T~AyPfGK-rrsZxj^!slv7=3J}d7&aaHgqi1BAes@&ax6?8hiAv_`?A|*RJ z`)|vYLR?KT0|Dp_=@t_qLnx4ru<*I9f9lIG|1tNuf<7l5b93{zX=%Ab0c$qptfe}Q zwW$ywGk%PiA%~0s-~vxfr_}>NA9^peXfc3L*|fYmk0+hwSH=M|g3ZIQ=IsT{t-~J$ zG-J;SsGkHqgW^tKZT^#)*Oy<5=05CjZNIGb+H-c0+29<|wl9|(eM1>b(TySjYQJ`+ zHOBapVH=nq1S!vILL~l{Il-E2FMXBqq>KRK=Vu3D@!$U~V{TMFlo@2(gz)cIx!Ljd zT3<12xM__duN5j0?S=-9i)#jI^XHa&?a7V<5GxrsV|eC9Lkt?P8JmXz=X72wbD!+A z`S8m&WeC|qcgW~Gk|Tw$er0}y!ARh!0l~8Z^a#1nuOf-hv1@sy8>gbc$HxbZsb5iG zJ9c`qdkh1HSP%M?gz#>vJNx#XJK7{9U(W{dH?*f38k(3CHQa{@tC&(RG>fe^2hl5d z1V){SYlICnRZyS?^6+0o`g~-Z3$r_)v4lT>Z_T&w5^-<8oWTr*LFE{&Nn2r<2mk*N zKhajifTKr4OY!jX*Oz)T20J}Ghx|Q(yhXI>t2(anZ^g1gj?`eW%C5H%)?fed zi`we9L?o<`A`UxhOrd%-X>$BzOQv!}e5bNi?XEz9HNbBf2Aq(;)Bfi1_s4$-67{i5 z){6-@_Z(0F!v zZP+Eywp*I>>uWb+@;-pVZ7uOWXYucKUj#83u11XRR*k0HiZA%=QTj8xjaH$E~Xz3fS*? z#bQBRR6=AXzsFb5h1D!ia>9m8H{j{ddqx-=@&l879(&@rpi$&geK zJ-0Tf(3g)vDaK?AWGbk*PlN)0Nv~Xjz0o2$6o_Df-|_u1#m1ZT=yR6NV}Xj7Nq^^?&$6sU9p=#r+OoFsfTSMNS=K zj5YL46hme;Wmk*FWSW;GgV80V<~2vi6u>Us6c_qKm5d5dtoK+HbCFDpD{`eJ16Mlx zU}p``7LPeFIbV}Oo6|>YgcR;vz3}+^=LoaglJ)8`OJ<^hFge^~iLt(EDRb5thKE`F^=8hM8|DAyNfn9Hjk*llTGsMTKasR9?g9BgSzjM!>;E<@_$ZF z7F2ZAC`itC85DXLc@)5*v21xTMn6u)@m}0-yCssLWHeYpWm5Ih#sUirUAVe42!(mh zLmJ>&*=74xKHM|jl2}b}TFWQ<%UCjNjp=EYtRq2U0V_sb!m1t)P+8m7^C8ELqV{7} zwwK@r+1AwylU?M>%_1?f-@XU6YgAZ54JWw3lx*Sh@u6}KVJ7j_s~_T2J)Pz^W0(Gn zj3iuYYHAITyAU>O&9)+tD+*i=aO+~gg23S)2#Cd7l=;|v{q!526yr=$MlKb?FyM%` zz{c^U0gpbJlIa3M3`+#I=M9c$?y-F1=eO6=ToyYvE*S^*4wS#c@A_wwxXu-$rE*?5 zK$RuHnu7`Kg%pBX(=Xe0yEG_tO?_^G{jtDru_A%~ISkUb=j$?fsBK^85rbv%g1Hqe zS+oq^ahCtKf7Vd`Kb)Qa$ZwA%@l`;oCKng0#HqN~R{X>x?>tyqXvRs=WZmZ1SQ$oj z6nQKRsP$7X@Eg|FA15v6^P%9;dikb$8n`@aOWoGW(|K(!y|+`SsVVWj??ZU7Pzq^h z1&|}#_BWS>j^8-PufEW%8>1*wGE;1St3EQjaP*?kJL3NesG$0}8+ua`v{9*FWuCWogqovY6*Dkl$53?|nGy{ySn0?#xB(^Zli}b^*+Txygp+^F{z2Vmq5G>M{PxnC4BoE_4^e0c z78Vv}(Cg%AtXU$lH=iL$ZG4rPDGO*~0y0ho^nd3_#a{2YD-)#`JoUkm^oCq)gWiN^ zzJJYTtLmrw+sKyXfQVyxZTdR&TQ52~J7F7+6Z&uc)%$J`k1%U3{Wt%+d2bi_&6|r* zydT-1`fLB#K=@mKQLd$Fs2bT&JFe?nBW*y0*_ZTRsOY58uaD#!t2LIgb)!#8rNp{u z&wv)KPtepHVm5mA(yK8{5)ZY)Hul~HqYTq9SR<9X2sr~V2j%TM)5mtGhfAA~a&kCj zfy{4-!HvMl!VuZ0JxZ?U;uU#jx&Bp9c`EB;?}QfI$z(cuaGH9kxoTo^5;3F4;11>* zu3kD)sxRekkywdCEve*Dr%ilV#gh0x>`y%-wS!veJXB!>8&EbWU==joU>{O=7Q1o+ z`TX}rs;IvTTFgb&ho;-cdmk1wce|{ym}+3tnuK>$=g(_~FR!mL!i+7DrN{siRASeI zyitw7&|i>dLEV?y)Q{Dn~C zV()&~5IU|SPm~VhYinzB?sUAZkCK-_7VJh#j8}8zjIe?BE})N@O#e2h-e#gc-(Es5 zMqQb;(8i!Fm&u{2WR|m6VI=B6-5u3rUjGa1-&56@cgRfMD12ng1n6KLHPB?aEe-n4 zinukOVSW)HMk4zxM8d#n^0HJU_+hZ98mVBXpq>n_#u#e+Iz6JiJ_Yt1?S}W4UjE!gBq-N-UqIuVzx32yFlCr6 z!2zL-=D+5DBL||7o|Oxp|!C`WFGDe1r|^eFwl}&k10y zt`GBSeg=*b4+I{EN8LOTknCs|T^S8ZG+-Wg8dYaYan2TYO1?`|A|Bn>k!wYGYOw9@ zre`EN7y&9&Dpg8OuBn`}R!##2pbOg_g5%xqc1gDQ+pDqatV8?nR&X(^lqk zS1(f*Ud!2lGzQ&S3%2)jz&+aBM}a1=N_#pJuV6s4gn;Sjt1q^rD!_!Ojv8&yG(uBD z3HS33S-Yp@P$<+#s)L)5RS&J20+G1yzHB`pZrvsvMSl17p|mAMO=-x_b#-BUa+x60C-XIkZDNqp`nA=ng&;t8GKZ=9#SC&WN}Jrs+3`hz8>^LWQ#^g z>nqiojnF1Vo!n%o9DpPB$dgMqD>?zD?vD_et&r({y^%NQ91U@6!%@)cav-RX_40^% zY5Nj98qEbw`H9kCWVNWTG}~852~9y}y{$$_u9}F>NNNLpmE)d;Z@C|H%&s~(I{Pl9q zGKb!69sHYSL5bcxcn|MHpzozT7HQpD;yK$7DjhY_1fgHPQ&>?N^{-tgGYSvmLGiVJ zm43Kly;}>DGI7eRYaE8%>2oTfB95JIlIt>^ z-!-<*Xlg=zF7VTBVCNB>Xt2f&3g;I>kHE9-FAB6srlSKgdy0+*lbzhIC zDid#{P4gt7UnHY(W*hrCwkhztWk~n2Uv}$%Zhfueiqaa&jKjU~Q2=BVtWgQ9DO;HW zM!aT0l`qEi;?w#_c9cNC-2I}(PJ-*om!J*vpFXy>Ht03-1m`^X>do1phS{mZ?CyOq z81W>qzAAqehHk+{fKwNGjf5@mZIdz|ca7DSU=(K%K`3HE3^byEZ)fnO+_D|{^D!*+ z1;MFEyqv?DWwh$Z*{sZcQD%;YFkTAyOM=T@3;umfPEHQ;g3&4?Ql|!=L#TT){08@G z!B96j6c@RY%v>83ikM?Dxd0X^V08&;2KZ%`(rb~0Ara?x1-Tv&+Gt&%`hoPh%+QOk z6mt$ji!-;Zw(W{i>iifF2wJ;^G{@ zKVRJkmG;HCjTnGlCNO?eX|WSGFFL*Z@}M8A%qS%={Q-$$-CFTQAYem}TOS*FS-Fm*K+UJ6j(BtET0_9QC66drP1q>W1O)$>6r( z#s^9~QA2F1a43M;mcR~0EdCysXtP|z7s~QffV_DDR1(;=xNN3C+2CnnOna}K0`aZb4sBl`jEa_Py8Jh$$;jO4wQ^u@E|%z=0qhBr9{y1 z&m1u7t3h1=aOu!-AV>A>r*{A^&5C<0qI?4B>JgwN1*7ECHo+HHx1J819tQUF8NG>9 z9#0C%0inKLOp}a&p-27NcXYfqu#!_fLPf;*p-JMv_F12= zMydo=Rj0{aT<9u2bacw4O33ymwKgnf|9HvQhezo^3TVN^b!%Zg-nqkETbm!EMmcyo z{cxx%#vkOXx6rA(R;Vq5`e}~G_E*Gg96Iw7_%9tj`=_0Pb&jj9+}BX