From b1bde667c97833d872f24b6de19b19da0f3c8b68 Mon Sep 17 00:00:00 2001 From: Jonathan Anns Date: Mon, 20 Oct 2025 16:12:51 +0800 Subject: [PATCH 1/4] fixed readme links --- README.md | 9 ++++++--- nbs/read_me.ipynb | 6 +++--- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 530577d4..269d406f 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,8 @@ brings new visualizations, refined plots, and improved accuracy. You can generate a Whorlmap directly from multi-dimensional DABEST objects using the `.whorlmap()` method. See the [Whorlmap - tutorial](10-whorlmap.html) for more details. + tutorial](https://acclab.github.io/DABEST-python/tutorials/10-whorlmap.html) + for more details. 2. **Slopegraphs 📈: Enhanced summaries for paired data** @@ -52,7 +53,8 @@ brings new visualizations, refined plots, and improved accuracy. - Customize appearance with `group_summaries_kwargs`. See the Group Summaries section in the [Plot Aesthetics - tutorial](08-plot_aesthetics.html) for more details. + tutorial](https://acclab.github.io/DABEST-python/tutorials/08-plot_aesthetics.html) + for more details. 3. **Mini-meta Weighted Delta Fix 🧮** @@ -69,7 +71,8 @@ brings new visualizations, refined plots, and improved accuracy. now color contrast bars and effect-size curves. See the Custom Palette section in the [Plot Aesthetics -tutorial](08-plot_aesthetics.html) for examples. +tutorial](https://acclab.github.io/DABEST-python/tutorials/08-plot_aesthetics.html) +for examples. Thank you for your continued support! diff --git a/nbs/read_me.ipynb b/nbs/read_me.ipynb index 702dc10d..bfe49362 100644 --- a/nbs/read_me.ipynb +++ b/nbs/read_me.ipynb @@ -43,7 +43,7 @@ "\n", " They are especially useful for large-scale or multi-condition experiments, serving as a **space-efficient alternative to stacked forest plots**.\n", "\n", - " You can generate a Whorlmap directly from multi-dimensional DABEST objects using the `.whorlmap()` method. See the [Whorlmap tutorial](10-whorlmap.html) for more details.\n", + " You can generate a Whorlmap directly from multi-dimensional DABEST objects using the `.whorlmap()` method. See the [Whorlmap tutorial](https://acclab.github.io/DABEST-python/tutorials/10-whorlmap.html) for more details.\n", "\n", "2. **Slopegraphs 📈: Enhanced summaries for paired data**\n", " \n", @@ -55,7 +55,7 @@ " \n", " - Customize appearance with `group_summaries_kwargs`.\n", "\n", - " See the Group Summaries section in the [Plot Aesthetics tutorial](08-plot_aesthetics.html) for more details.\n", + " See the Group Summaries section in the [Plot Aesthetics tutorial](https://acclab.github.io/DABEST-python/tutorials/08-plot_aesthetics.html) for more details.\n", "\n", "3. **Mini-meta Weighted Delta Fix 🧮**\n", " \n", @@ -69,7 +69,7 @@ " - **Slopegraphs (paired, non-proportional):**\n", " `custom_palette` can now color contrast bars and effect-size curves.\n", "\n", - " See the Custom Palette section in the [Plot Aesthetics tutorial](08-plot_aesthetics.html) for examples.\n", + " See the Custom Palette section in the [Plot Aesthetics tutorial](https://acclab.github.io/DABEST-python/tutorials/08-plot_aesthetics.html) for examples.\n", "\n", "Thank you for your continued support! \n", "\n", From 0b826aebd22a0e919605a1f4e6a4bd2f56c31fe7 Mon Sep 17 00:00:00 2001 From: Jacob Luke Date: Mon, 12 Jan 2026 17:25:43 +0800 Subject: [PATCH 2/4] Fix #216: Allow unequal sample sizes in multi-group paired wide-format data Remove overly aggressive NaN filtering in _check_errors() that was causing data truncation when using wide-format paired data with different group sizes. Problem: When loading wide-format paired data created by concatenating DataFrames of different lengths (e.g., 20, 10, and 40 samples), the package was removing ALL rows with ANY NaN value across ALL columns. This truncated all groups to the size of the smallest group. Root Cause: In _check_errors() method, the code had: elif x is None and y is None: self.__output_data.dropna(inplace=True) This removed entire rows if they had NaN in ANY column, affecting all groups even though NaN values were structural (from DataFrame concatenation) and not actual missing data points. Solution: Removed the problematic elif block from _check_errors(). The downstream code in _get_plot_data() already handles NaN values correctly by: 1. Using pd.melt() which preserves all non-NaN values 2. Calling dropna(subset=[self.__yvar]) which only removes rows with NaN in the measurement column, not across all columns Testing: - Added test_33_multi_paired_different_sizes() to verify groups with 20, 10, and 40 samples are preserved correctly --- dabest/_dabest_object.py | 4 +-- nbs/API/dabest_object.ipynb | 4 +-- ...aired_meandiff_gridkey_userdefinedrows.png | Bin 58975 -> 58976 bytes ...rop_paired_meandiff_gridkey_autoparser.png | Bin 59217 -> 59218 bytes .../test_33_multi_paired_different_sizes.png | Bin 0 -> 69119 bytes nbs/tests/mpl_image_tests/test_03_plotting.py | 28 ++++++++++++++++++ 6 files changed, 30 insertions(+), 6 deletions(-) create mode 100644 nbs/tests/mpl_image_tests/baseline_images/test_33_multi_paired_different_sizes.png diff --git a/dabest/_dabest_object.py b/dabest/_dabest_object.py index a055cdd1..01c96d5f 100644 --- a/dabest/_dabest_object.py +++ b/dabest/_dabest_object.py @@ -559,14 +559,12 @@ def _check_errors(self, x, y, idx, experiment, experiment_label, x1_level): self.__x1_level = x1_level if self.__is_paired and self.__output_data.isnull().values.any(): - warn1 = f"NaN values detected under paired setting and removed," + warn1 = f"NaN values detected under paired setting," warn2 = f" please check your data." warnings.warn(warn1 + warn2) if x is not None and y is not None: rmname = self.__output_data[self.__output_data[y].isnull()][self.__id_col].tolist() self.__output_data = self.__output_data[~self.__output_data[self.__id_col].isin(rmname)] - elif x is None and y is None: - self.__output_data.dropna(inplace=True) # Check if there is a typo on paired if self.__is_paired and self.__is_paired not in ("baseline", "sequential"): diff --git a/nbs/API/dabest_object.ipynb b/nbs/API/dabest_object.ipynb index 4054d6a6..f082c62b 100644 --- a/nbs/API/dabest_object.ipynb +++ b/nbs/API/dabest_object.ipynb @@ -664,14 +664,12 @@ " self.__x1_level = x1_level\n", "\n", " if self.__is_paired and self.__output_data.isnull().values.any():\n", - " warn1 = f\"NaN values detected under paired setting and removed,\"\n", + " warn1 = f\"NaN values detected under paired setting,\"\n", " warn2 = f\" please check your data.\"\n", " warnings.warn(warn1 + warn2)\n", " if x is not None and y is not None:\n", " rmname = self.__output_data[self.__output_data[y].isnull()][self.__id_col].tolist()\n", " self.__output_data = self.__output_data[~self.__output_data[self.__id_col].isin(rmname)]\n", - " elif x is None and y is None:\n", - " self.__output_data.dropna(inplace=True)\n", "\n", " # Check if there is a typo on paired\n", " if self.__is_paired and self.__is_paired not in (\"baseline\", \"sequential\"):\n", diff --git a/nbs/tests/mpl_image_tests/baseline_images/test_266_multigroups_prop_paired_meandiff_gridkey_userdefinedrows.png b/nbs/tests/mpl_image_tests/baseline_images/test_266_multigroups_prop_paired_meandiff_gridkey_userdefinedrows.png index 712ebaf700aa80e830d01d884a7d74bd69638236..4d3faf4762394b50dbc98f02c9503161a867a273 100644 GIT binary patch literal 58976 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 literal 58975 zcmeFZbySu6`zE{*LlF?98x)X+O-VPXNFzuKn-J-i zmY(}L=R33JH}87atXc1W?;6)W>ug}}CqAD$uj{&>U?oLqd|WbI6bgkeEAvPNg}Nk# zLS1?I|zIGGJddIEE{dY(%{rgtQ=`Sg)f8P>O{NIoM-xc`(!3wli zj0_B9l=z;mKDV^&bY}Y3ycwx4W+skkYim2LSB?^f{_8B%MgK?U&t-dl;Cr6S(BC-ETG_X^I7Vh8#ERe9*2%JH6n3a3{d>w!53YyOn2Z$b z6$~m0*?g@cX3<#MNjpDDT>Ls~-#WWBb3F5cUv)lAM^iI_F!+(w_`XLYy12Mk2J^#! zo=QHrod@G)d-En`-=tJ@N&AA*=*%W<<6TN!{*% zynBDtC1Jj+^1_s(24~y1DEltVIMh0wpB|X6ZOysb?3>QI7Jc2}(J9-~e$&qFnbDtj zwqM=6<#sbt>~#6b$@)bHKLIJOB3=7d;+56a+f5=zOPK;i3{f(sC*S_EVnDG^JovfL=U~1W{wA!Z^*T94vg#HpRzD?TJ~Y3qwLfDRSRn+ zeD!LC`OHr{bEBF6{v$)A-Y$t`8>>N+E`iv|?>9CCBD<0C90sYGA^&cf-<^w@B-OAs zi)p_4ePZVgw99*=2BSNDVkHX;&txT9esa|Od^IyGcG&skd3QY9(Lh2|*52yqY8A$I zu*7GNMbGDOzLt^d-=mR8afa9*w~L*nn?#6cv{QN((pt`U#R=~JFmc`+)|8J1Hwcta zkxdqIEk4`L6S`<2(A@I!ulbOr%`S)ms1PdgsHI1-`0zXe^U8lVd z@)l3Po_Y+`|6^}o`%V5ork06XcGU7cPRD{q}CR-#_-*EIIaRKEOwzh^SumU)TwL;`Okk`K&J0 zV}(gp#n-oa>STe>sy&>7`>|^Egu~mBLaoedu*q6BthYM{e@sn%F$_BI7&PCg& znPaM0yOW3Rv2{n=V9;o^inn*8m*{lXc+@_DybWe*^SH5jqkdg{I)b=s!`rv-pv8bq zKHR3eR7HjC3nq~(dk_o7D04CM(gIvH)z(8;;nRGV_3>CCIM=M$7DJUpb*4ETaOft#H$V^FYJi)?mNgQ&IF>B8#qq#m-nz!~; zVc$?eQJ7sQDl$evPR@=)!;b&`$UX|ico9ySQ(mt6`0?YGgU#l1pA@G7S&yA})2y;} zKVMx%0^b5!7|uw2m%P0n7MLjb5wGjUge*Z{-$kLDs_5n?8op_TFR{jEumtw!JUTC+ z{C4k4*NwXZ2Q*bPFi5*^JCWCNO-Lap z>0RZs^+yl$H`ud1>df}`JHiPTvaX>}FAR}2d3{6iyG`|Ej^x{$max@iV()vIV{ybBi zx6$i1Wi&lAI4JQZB6n2I3fwFE{ImNGrag$OLyTU$TP5=6r@!EQtZIez826+@ zH=6(&4-RwKW&hrP>S21MoV+|SZa|x}SJl(_Y#U6~;}u<@o9bQ|jezsB*e~a9+QBIp z97(W1>Rq@k1Betvc$fFm3A|;Zcag+XSl+AR>|FV*Cow&aMU(mOzm{&K{dpA50+;{E zX<^U9jHInbqDP*+*7VCLC!Pe7w$KFy3|_^&L>^L^%FfQt`StalJ=({|$HRkznO$97 z{?!8COH4I$RVXORXs~0@S5c_BE64_YxyrF5b~Y;(xOv`uesDhLP`lgbd!~Bt-aWyC z2}fse?;A)W{^Z+=DWj&5D z)5TXP-KaI^A%ajxD9}~(+)wMvy>#_vUUs%*J@}@bFHO|vgygfuOG|6(p*rVPT3I$WHjn)=bLW1^TlkvtarplQgRi+pRR(VC{>~V2%W;W%W{bvH5vG3JX6lv}VMJbh&Us`!Szp%%NLjC>O z;5Qdj+lB&aZMbe2^dz;SC~&m7=Di)z%sEYVGRLGd%G6 zpl+UWSJT~H``tA;bg<;`fS5zLl8(x;_*0&)?g0-G6e=?9FR80NkV#6y!>^srF^DNk zN(O8+9os_UmM2SgI^%0T3}bKH9U#}lfzY~an;|0Echus)@&+G$|L16_g_cO^6Ss)uKO@Qi%npPmt%^T*>Kj9PKnAR>z3p3@kXII8@Xx~ zU#_mM#+YeE(+={g>+7>ew8zY%;Xr;pJa`i2%w1+1H-=oKGv&ry!qKoEgO@&AU>zZe z4xC-$v!T-P@UX{jzcig}N=k|cvZm6M?zGjHkRYJ-%duYFK%3k6osG~+_#;QP>kvoS zk@bmrBAOqgC@6cI&vqzC?8Ioy)0OdQ4m7f86Lk#9 zVb$^WzoBCY{Up&%#6J$2&-HHUIYoJiriCigH`+aau3}|nb&VMtzU9EMw1=i4At^12 znc0Oe+=DO7Zn;U}rA?3arU!SMhVye%(XNfFdPm=bL}_I`W&&QDt z@7s)LU1hHkkKPU7@OqH;=PQG$R=h@ueohgx3=tzrmH*M#}MOP zb{^Gp4f8lb%;UxrVdcdX*VKicq)c#6Ju0}#YvbKW{m?;F-JRXlxIk8EBkj#4#fybf z3SHvT_M6(TsKmT&%R8l^Uxma^G37Tpq~IWbfdm41V;mPxQF3xaL>Lj7^T^ zO2we!;CQ8#w8$coAfNaisfz6M@Ccs$nXQCXEP`-Gb=V=@)}Sa%sVPiJ)kJkIh(VnL z&d(X2935Ggsl2|yi%zw$e)JT~D+C+-LTDk;#Hoj?JuADYw^vasKKtnC=sE`ctJ3H6 zNV!j7vtegwZ0sM)51(a>lUt5SJIQJ~8ZHTUPf;(>ScW})EdLG8@X4ZqJ)sL5Yi}df zfHzu((MW5%PFJ89vXbcyiRG(35YrvKcQdId9M2_h>17$5u4roI&qqm9_Jccoz}VJ5 z?h`q9?{iQ;y$tsiQ(V7M$JJN+D}-febd=A_6a2MYg$2$NBLCQ8jz*!8^~*&Rf>E$> z@=ZF$K;@NqjQ!Hjwr)8Gr&3}$?M==*oh6#;|e@zLF=2(L#}=YQIr z=c1%nAju6NCx`p!tXfy@+dA|@3izhD*jR-c4LH|N!wZxVuk`zVpXx7=UP66XLV_3= z;nEM22)GX@hD8>>A7F2JG-}s5jmPr`$;`&rzl^MkL3R3WLH+-{u{{YLar8RFen3{XFH05v{cHq)2-48iA^hMg0 za?wr;N#-kUx9x^X+bIjoy5lVea~>a!k2d8%W9rCH4T&7(klnKxgE3<^!w-A5@)n=@ z=N9=K>j(Zd99)KO-pB63l&%Wl}qs$RWckC#D8t?9N;oQU)kV&{i_l@9ZA?u}E|kAH2|Y}78MV(&AG zL^}3~XhIEJceGM4JU)^WyE8Yv{zkIb*Fb^l7$TToml7ihGEE+`&AqL_|O0n$xR zLxIk4j*WzAOJkBiW^63y*LS0{ranKo7aO-w!))mBg511^>3dsCl})w^6V##5e#%A* zQ%1n9LM@j4U0Zebk7cH_I)@<4){-;LF zN-*%zD$pnzU@2+HINogb9auMT88fR}E9;h;Jm|O^5n8k9Qt$lj-sn=YRdLcTQpou! zpz)fnhtjLYX9T}~b?n56ilpo`RaswOe{N@|$w-8>32-@%dLvj`{dt%9Y?aWtETh?| z4ipmW!(AIB#2}3A*7kWTLS{M+tQHE-92iiUbYD#I7_Fa*tG|G>H5}x` z*+H`b(p%oQn_`ts=Ceyx6g%CuJZwh*%Z_Zcp&>uXIu*Iv-InE-g~6@H9?%k~X=&wa zl|Sp`!CyFZR$-Df@Yc%T=+#ZQK-~h#5&oJ4_4S%=0$dzQ!PCsAS)tsZYMn8vj5krC zOAP-D>4(JK-CYYqL-8PThd0d3%nlks6mOZf2X@Lbquvjrs6FYMzmn%(lMe7Slfsud!f#@9$3^)%Sdy zuf}XOT0vtZnd+z>o|ZI1JdTLxZSZ;6rn8#L%xjl*m(ks_Vk&#YcbM(r6PO~0QAbUtb;xn$^pM5rw{-Qcf3ntNuq zYBKsQ{&OW_Eu3miqc4uI0tc}L5@cvAj9M;B(j?s;w`Cvl$iYz!J(zcnhlzu`?8yUWx2_iqV|P$ss*r3);qt=>_p-mL zEk}Qud~keI$5RKQ-`??Yv=9HY4VvzT zj3jY^3#4=;mvRWY%PK4f>DhE^ltk0)w$~qhA)BbV6BdWnp$Yxu^Qi{+qhGh06IZ$6 zg8Ui?cirZ=A8S<=z2s+6!ybIhokV_3dU7LJnk?LgWq+mH!I}ko7^{P?hYRu~3RO=E zws)@dq$11Ak~6N$UJ|u`kDosetfM38tMDiAF*C_8q#5l$e!ubuVehK;{dP5hQX3hQ&=s&q)KhjNh4Qjn_FB_?#b4 zTg`k4@PJg9lDUFh?{dl4#W+i{G8<`Zf1Kgh4{OpgFOPMB8phlW2v?v9S7My*qf%s(I9##8f5gRoq z;pkZY>hsSBn&=2SZ#@^*$zSOsnaVo#CNfpBKkEMv0a zb$Y`(2Xbj}k|?vV#>8miV8$kIotp(0B02t&daJ-lG_YFIociyYTNVv1-aZrUS=s$m zaWkU5(gyS6^Wx7o{Ad&NQX16ZE5nL64JX^(M;orq-AW#CqMy{l>lg#H_4GO_L%`6qu2p@s9=} z$-LKxo0D;I?y9n}S>Kq)#z$TGs&sUr+Zo=&6`Y~Ui%Cz?*a!lXU?U(9JPMFgT*4-c+_XXgfcr+wh2 z^bJ{?&E=T#(fg<$Nbc_eq}=zg+kjRU%0e+DhNRfHk+vK|-KeIb5?!zj7v|S+W1J%N z8h0NfXVLnkj+5P~zyJ8KSfqalO2HL@tD@!E`w@VZ!g)wp@N{?Zp5uZ-BZNfCsq?Ql zo-F-tAxLvNuAcHJfY#t{^K=Q+W6MeAsRBQ@8XFrCfP47I4@T(b5oD}Dvm|wQ56SY@ zEL$GglbJ7;@8K#K9Pi(p)N!RnYkW~g9UF#2v5?f~CFRp>0G}Tj$d=!m=kV2n>>oWe zIaxF^qJenrdo>J_P>~vJ(&uUzTPx}5P5QJm5aKkRuG?wq>7~Gq zPUq$4%VMf*R3#-_)qEZyn^K^glkeA_`IIK#f+pWV3`}n@EJiMT9F~D%COshJc9&ea zGNGTaIG|eWO@EB_ytZ18ZA#GS0i>Ojt@fM^<6HUlmSY6Uep*?iYuW>-Q`U9TIiYDg zu4K*i1Zm=VG?qgrl8=InDp-o|L*zEZ3`7Vv+A3>#__oP}l5peh& z?=DG1RUc<4_6DXprGF!0-+6j-p13L z)y+lA(|hZoP)a1=Oi+!IDbSkTe^Y)EI5bKv;IyXe_uUwv6_%4;S@d(#h(thjUrcWgedG-d>ut%-vP@$}_y=&dssr z#9k?f%A1?#vUWrLc=~1?3R~@FpVPcWYbg1UBFP#0N2|S+VFV8q1(qW@yg_?nQ@0;revx;O&`vm|fe#QpKAWw#u+CpVX4@zsgHcjDY< zH7-v5L5VR7pdKjuo#K-3xzMDWb}Q0hFs70N2UGN?%8ALG>lfS+aI?o*R|YuJbx)` zmcPtKr_VTUZBh#_6nle-y z<@WHMV7-%!S-^$CKO%&FJ$Hcd7#bRa%giq-viZ7SRdpYtTd0R30P}$FzDef<@=e3a zs(>)~YhKzPePEve)tLW%itsnNsUFXheL{ZC@rMIl1uw|ww6cIs&Ck!H^YWB9NqX!9 z>`1)4%YR|?`?)kCva+&saVNj7P8-nD!3~LX*gCR_GTHFB zE@vjmJ7dEFGgBFNd!J~HPmC1>mJvefU|9$y)`w=d)cW(Y<4P$1LJiti_nyNtd;FOR z3aSPG0?3D_-3c62d+!lI@jfI!TU?ziz91HOa&djUQl6u6H@eDp z68#xR@m(wqm`KOlb2aN(kB9xNrL*>0mWgLjEmrR0FYOgWI;izt+gFg~8et>C&9A6X zOIKR@(5`4^N~6TO#Ff0*E4a#vz?S{cBQeMd?tYhW-ucG2DzfSRWV{54eMs^V+^Cs# zI@xMpU3h1wK}$%gpMCb~D!Y=ZY7Fp^bh1Z7xuV&dzURkB6N{p`NYOlAW1neTGjrK{ zzdY@+r%hr5EO~tV&B}_3yuv~SSb1iSzA4%{07dp!AhD+9^!jk#z({&c|Cl;#G z3D4zTq1l*7oulrx%*NHDwKuw$Yvtt4j!w8IRNrc-=;?7&o;KTGN{Z1U8Q~0Vc%ONz z;Z`>^8@f5*X zjd~dSA<@5;U3qhofg1Vjr<=p1DVx+#{;XS7hvDwG^XmVB@26V|Ht3hYk30kSBRBt& z+L-`~tOO}Io?BU|y1UoXT0*D;vWa4cyoD1fbDpetBPwR24EYr;mtEnws90HDT~J!8 z4E}3*+c<4)Ma^qUw%b(20jV{rkS2 z%B0@w3<2Xkr*2tOpRkLX?g7G;&MUHGD`OuY*jDS9nVI1RJjA_tVf)a_p?=bG`BAim zO;k*JJ_+7G1Vm^B{+tll4xjIt7m|E|R#5ZwtViHW1nEVX21h+ITp8{pHRun4G#e`e+AZbDJJ)ltpcNs^rJk)z=SCPNs}>$7M%z+cwh`*=$(tqi^F#zf=aO z?Jr16W98 zFIYS++rikrbq(P-75?iCB;T;1Nt?Y<(%$VoVl*`Mx>0+`Ub z?y?GiQI?LF%;qJm}+@4?Z5JA{ddwo)a>r<<%9GAcK5lpb!_`A=|OF9icsvz zdZ(c?M2jTiU5~(5{caEUvTKVk&(83Ny8v?~Lz{tAKpsowF>?3;8J#_>(J@THp1GrbMnU|rJc5cGk-`=y`O}JV>Vd@c%5GWa?_7p6#WbJYX;#}Rm+}<7N=JV4{ zk5!#%bXS)gh5gs-g1_F}McSL{#&sKn6Ny^gR-%T*1Mpqn=g@5ZN2!S}N7>rv2d&lC zT@U}c$Z~UjZ`P#PxX-CpGR>)}lr}#;8VwZqw%;#|A;!!)XSrGDqpW~ z7RmIFHaei8SXo+9di*#HbQ<#%v#pOHkGtQSgFQ9m^$hG23MZ1KRbM!muc1+R#7j1O zw6|Jm`1!&mdQM%zCX@PT3LDZwyerYxc5yN3lqG?lu1}N?{z!kpV#Gtr^e&bXh-5L8 zz9;rbqW*CJ46q(Us#`{J!?v6VBn|=e-vQ9QAWjM06|_tcgj6k;Z<};S>!rv!o4ZBt z+B>vyy{9F@?X-VCQv!SF>88i-KEY0>8vkXB|FZ?99DU6AMV>RbKhrVe2?ADdoywwm9mf~3y6Xuh|(U-z-Gcd?;*MbpcM43F-veQudl1y z*_A*HhU-w*Qcj<18>OEJuWxv`G44^z!fbZgpPOFbRxE9HU7hL4POE*;`vhHw&etVI zByEX}W)P^2aNHYL9=8%D%|%+zr2@bJS?!w0u9CW%TB!Sb6HG|4X8`e%<5yYQSnKYg zzdac-vlDvSm=uyFHHE<&g`vx&YQL9n*d(9_h6W)`|2gm9wJDr;X zze^}x-Lp@2Zg!|^#8+wmCyFb2h~{to{#P>e^cZ&Uh;hqf_;#2jU}ghlbN00kdW7_! z?a6JX8nnvI`!t|q%xnKzZ5>Y$W?IWFBN6c=!_2%*BmH1#q>I=%%J@Sf;${fdgS1gd z9gjqVyZg}1|08b+W=KuUTu}-o?^Y?RmzQP9hJHl@zhl-R|Ldaq_f_TZt8vpJy9FJb zdfR{&k9_w1(^-LLjIr3V=|7Z9vOBB^znsq7f`_5=1Z%b+s#> ztA`gn;*xcCl^^NQ?~(0RdBU5MYM~HqnjCoH<%h0Y>?+@#Ix&-MC8I1*lf!F}cW_`( z03nN0lWu85oBlc3zR&xt5Me*P-6n0_b=m3I3dcPy|FP(h+ zT#X#jRfaefboKGi_S(j>mD|HNg3%0w-(=XH*+t0t9%Y7BG**ul*wT^%A0iX`rvZ31 zqHu;e{@ypKfgMjyPfwvSX+%sc38WJlGr9?Cv4t<5c2-sO@Y<4W^WN_?Ji3Ykh)PC2 zp0&U6V2TA(1%=8TS#(j6nXR&^9y<58nzEbY4B7RIyY<#`#)!$&D8?Cq0$A;5al&DANi6~fZ-cHu! zl@M{BR3CP@P{D|MbbPa8jfoMNKYvM6c{_l&pbC zgK*^@H?AqyFVAV7vj8J3a`MlNeidb3j0CQb7{j_pex3t9=Yx2Sg6e|^&8SBYXWSmf z+jOf_V=0uDdU(ubwNdWzzPh_da1HJILJ6xx8cN!()3fUljmvwTLRM7`_&larwXT++ zq5XJ+OQ_d5ebM?~?2=SrL_ z{NZ1=UUy*w5cnDgge9FDy|O8{&_YKhAEI27O7S=Kugt`~mac;ZV-UtaSa?7c&nTh6hFF1AM_Mf4pE)*3T|(@;MwS zQUwl-`tQi;&4kg_xc1qo?)m7XK>gO>k(&ZrpP8z8$XXT?Ttfy81Uj?UJ|{x0lU-L2 z{d}}ZbHBt8g!9ruwaWAl+E>1;1h)=|e#REb_@)bi zlh=Yq6-q`)+Tl^51<@zYVR(Ga4sfM2IBvoY^$OXnI;UGT?g1>w;x%7V&H4DY1?=bTNJs}S2m$1jjMoT`= z@#pgJlR$+lepB~Cq(BzYr3J`K-!+?$)V&vY(m-a+$Q?e5S0p8d+p-#05UsuhDSCz( zNsPB+Z3yslIrawS*$fnFtMiOHRHqqTZ$A7wBTpZ5L-4F4?L->~6Fus*oE`C=r`WMg zWcqpX#YX*a1^F6Q=YDlG{Y=%1#pn!^%YOdG8ow{7f;45D_3Xjr{f|e-SzPo_4u*#M zt$+d}s^C7q-LmL;g@>nsbeV5{DkF! z;2m{h?r%&(zZ|;t9<<}3u7G;YP!trVD~MpRkhO5*%G$S;+l|$Eq<@v+(n7FwqZ8eH zkuxO5&%fYxo~U0qHPv}=bCM#Y?jfCJ5sm~EZ%;{n{HRE6Yk{!3I;q|tT=AI?2JSBf zfTRGyMY!mZh4-2X)gUyeb7b=bUycFJCszx4Xx2VkW|B$ZYCk&ktdD+;XPpp8y5g41w2)wfyN?-dbefMU7k!ZEf&U18SQN48k*FU+}I45jt znV(u=fBJ(MHBiy6e~vkPw%%q^nvh%;k&DtW`NsDAvcJP6f30GAk>}ViuNwdudo5>Z zQI$3|l6J4v_+sYZ`(eyot(bSxgR0XqPx@J3yvte8(9EyR)x`Fn)#>QcQ)g>2eZlIt zg|L4hFq?MJyAaaz@}{1H=AxZlzvpy0%_tq*g0SksK|ZvQ(L+=b-7e%wJ>{Zo0#!w( z2Xh{8>#UwT2<2Ktap6k@scBeX_`fK7yuFafh*&vjbQbC^5|IiKk~+7_@kBN^LRXHW zZ&`HdUbJUPRp_ju*lWG4PHMW_>BI}mQ5>z}zWt}=+{-MKhum3HqjZVI4=3H%9m^Ax zzI&gr36@@7q5KYIXmb30I}l`lOX86RXc;ubgTTD=6z{Vk&ueH1V~~>dD>1IcB3?SYRcuu9LHw z&6eQT(LL*8>scOk3{yHz2gdS+PN_Pcfy2il#{@pknq`C{e!++w3c=FH%+uIp>t+IP zJ8d=|tRMs=lz7zb_PYpe4l;!#H4NXBTjoDdw^P5QcA04~qEou$|6meGGLuvjt@vKC zb1yy5^-2VbVsO?|Fwo#<9ozT8=*8{cgx0>5X=$&coZ-EF7Ntj+B8wvPJ)%&>$lNN$ zoIc;**irWEgG2Apa_+jGt)%SL6FqFWhJ;9^2}jQbDUuvV)1Qncfb|iCD`ILV^RFw3J+2yCApxT7A| z^7ftk5?od^a#;wK4EjT*bR~;sZ&1DdBQXHHU$JKLzbcAA>LIuy5FvI};{!UNWvJoF z51c_3a&&wgWH+N6Xldf{LWOCpe+d?fI8MP0G?O9P?mxp)1A=3-Uz~hmvAip^=BBGL zy|gnM(aAe+lNgosijxj2LYjxAi!MQ@I3xs^GwLVMD3Abhuz{^WJ2g4U)-1LoAr6ql zKiVJHDfisx&!4w>PodQd)b#a5y@d9LRC%7#<$S>q%CqEA^!V}i8Pb@TB$QWR5XyMs?w zK}@poX6E-SqAdNdN~Dj|TkrVnMnEm#3<{mDb(d}c9?nmj&vU`#4FI))zf$fAYU9v)l%Tw&rV;je~_|6xbV%G&Bg_VxgkAjea`Yq>t;yq4kA;P5Z0?(*B z8sY}uFB2?9W`-+UT3Qy%V@2l5aN_p(o{suj9&XPIE@#CcI4Hs}M`s~gCg7oz0dNO3 zqTS;fy^_&_Z25#0M8bs7?Xn z@z+D*dWmxH>bvJpXMEO$@H%%7=W#DOszSm3iTB2?$DCt5@ifJdlXNDU1&8aF=e4Xl z!FgIp%I$i}bdDw0ZXa%BUp-?RrOQewD14Y&m;QTvcFUsoy#SCgs^LI}+ku+^*_Hz0 zH2O)W!N-<1fCcuc1LT5G|CLo$D~TrI{V>oFc*_*gvsiKqNpO9d6F;z@#I|~3c$gIZ*YdBlX2Y+iAbkd`Ilr+{ zM4A|@LmEb!BD>k^t%uTgqIW^HME-lCezQsF^wOPGDGDjOWQVx;`5bCEk0l}{y(UGM zf0wZHogtzF*ZillA5quTi(7S|Zw1^FqkUk&xl0Y@5$giaH}~7mI`lM}ruP9o#>c~B zylL{82Q@1J=%?s@X+$R{-s#UPVv*hR1MTp$f2s*dAmaLF>4HQwEaW3iElYZI*$r+` zzWxXT&1lD}I&D-WZEFnE9{x4-#HLtBQf-1<_8h;We&1N)%0{dRKYzNTLYhIb@&!Hx zszA)$>GU1xN%Q0!q~9#ksaCAAF|XxD9lkN-?K=f*C(be%_#yTLd4wV(5VX6#LuSMr zxNwW2Q@!`CG~98&+GXsP&v~>!-ML>6T@XU%8w#wxEY_~BxHa>BJ0wWq7+j_B{1=C` z0*+&h1y_8EhUA;$@mbkof*3a#y0_EU`z^CkEF@jZk|<75IGgRkoc{iryT5gEjxPJ? z3mwV`Y5fw{p2JFMPm{*YD(uPWol^@;o9DSWh5{2$Oc_am(;ePw+CHno%w!%SVts@s z^*73sh2T$RL9;=X2=6cYc$tOACH-FWPvZ&M>gk1FPvHf+=?Q(S?Pi%z>38}*3!n>e z@S~yr{-^*DZty^fFgP($I6kfo!o5B{qPMN^r*wc)VReWuu#it}UZR%>L(O4#mvP@G zA6nc26o46CM7T^uxQ{Wde?gmKg05itS!I9ugwu@U%bDhqGmjxi1_EgalEFgET1+*A}aB~T$_)cd5@iw(f(w8&+ zJBe6^%w^E^IvVF^s$vwO1zBo2Y3(M0I~0Nj#fC2?+HVJ@BZAx0qdhrVddgUA#%q9- zv4Y#0 z&c*eCQyGIv^%*KnN#*ojsqM4<4emP#fOOO30w*(U<@f37lBubwnPWXYJqQm|n>8^1 zbP8%FB@+{qn*|c-A1@zOPCwset-FZ2g6NWfgR>kh)?;R4QwPo)m`!fM*CVpoMAJug zzl5sgui0IEx%`2iNX0S3^^Z?i*)U~zUTGn(t0eK?LX?`ui{UtZEX=aS1KdekXFqXg z&D|PsSw)Qp7O(g}fEMrxAn$?}(ln^nAi$p{Aev8qs4V%Z#IHT3rE5DaMuEB1v7Wb+@+Dv_yqd3_a9Opv=YQ4#83(LHKO!{B zL8FLpVZmO2sveQ}gwHO?8yrQ8?xqvK+@;6h8xs)FfG7#n63!F$?elpmb1XuX2_pR4 z_*JBMU5RtJeJG{1=*}#cjfs4aPz;ZZ08XU8!E~kwx;p=NeAfc7Q8^T#52CIMd4`L&dL>hpD~@1YL*I*(&vrJ5SuRam}n z&Y;nXCXzA?uFgd#j*Hoq-^Rz&YfW*avDO}NYKsH>*900BaD2j0nj#V@0#uTjRy;C- z26G_a61gNGiOi<@^A2MQmRL9xnMhEP6zqd)&Ww5cFMq#T*Ne(~r60k3p)f>L-^EKQ zm_leSi+)s9ExJcZhW+eYE*-FYujILRQbC5T0mBWTDj~I`68AB}`Fep6@AAA${lCg4 z+&9EwYka(&cyS#vJMZ04e(87i;j@DP?L*kO=Huo0E`vi@nh|#{3Wh6kYR|7w33(n9 z%bG6MuJQLiu!E8*(5PeGg=+VQb@}DXM0Qj6vz64yR-)c4x9?sd7T#V8Z9-%%h+EO$ zlfxD_N^iG#DR8`2jto9Xr2+NJT{q4a5;QzoKYd?QR(Ag?R$0%y!(+={=@w2HM?zj( zZgV?_a|g${Cl|ajnlXc?)t^G7=D%i?8FLAAzJ6~i*Gr@+vRRt5-&XavWTtYFL9;$W z`aFM5ws&sqwdjIxI}z!>f>H>;@T%X&&9|XuP0CRyc@j8!w`F~pJwo&9!Z*#l2Hn7J zHb^B#$T8qRxjK{-O`OM6wMnghy5y|CvgL`>&%=^rn z|MX#;R3|^L?1AWB+s=Dc$9b#umKD@4xS`uue5YHJ{QCLh=~#pv@@};(DYNc3aJ>uZ z*EhX#0SjU+LWBdyIM|f?Dn*8Icr0DbHCIJMgu5`^H^!+rjr{G-GgDTWv4Ie-EFs|! z#aZBa^VfIPmM^;7$ThDR(%?mCZfrXMsK?9lw_1&R{hG39!}!2hwnTTAdg_9*As8Sc zj*9D0Dp7-hFWAr=?C@Q;6ABdnrE`T`Ly<2CB`{WcP>Q&P|?e?Z5frU&>k>d6cN9jCG zpK$V!n39NaUV?#Tc!5qGCPLvhVfb0Y-Tkm)d3lpRTqT79nb1Sm%d6}M$^OERH?v&q zO+h5yp#6}`yxwXs9lKhFB7Z%z)upG!@q)l}$l) zwI*oJKxYMjJEVv8*udXU0swifs$!gKc)V}O%W%)o8Wig~`fmC_{6CgeQvdv+$C5Ay zo5c9C#P-lom!95T&9RqaztQ>m2yJLw`XlccgTVliTa=tk2Fwy837+C1cEuyBx9|V_ zj2$O=JG0Y``Ocqx|Gk==i!eKjFf~l%b@qmHEh=3*Y`{Hikc*2$3lXYo@}gt!h3D(x zNl-4_Owka&=M0HQI5&j@ujP9vDG#)3Fnd=OcGz%H$qnf|18(Ujt`aIy7d};U5f+8k zjkB3C@(x@(%<936Q~?+qGIBcX2M|ckXSR1Zk8(@ZeA8g2Gde5239FLeks2vpo*+@I zYx4e_*bm)6=w1Py^S!hkwM@{VI!gUS@AS1k1Bid2bh2s*EM3G^%vM2SvX#~9(CXT{ zGI$N|yi400KU#2=ytb>G$2Cm3=CP`CHXWJ?C!d8-9rSA5ltR?b>S`UoJ<6ZnX)`9t z@!Gl7G0F>~e>@CNMHBFhFfSNdaWMo1<2YA?TE?5a>uD`PV#$2x`Eub z3aoTqCb|k_2@Fg?d`6@ez+q%ctQE;T^)IneLffre)uMJRlzG}Y64i3diqSCV&*+tT zM5mv|?C%qIcsjc#`Mg72n;BFBx^&sx{tuEw&u?FCRCs_O=`FsuHNU$9c&bnXNctSz zka#$0j{L^Bp!;p}4n1XoWfwU)IT+W^-QVBm)!+-{^3V^T|6ei5_e{OtM2K^Y@~UXF z(1zmcGjHl>uCE_hb@0yT8{76Tf6~(``eby~?DDHCV*K5Zi(wW5LgdiYR52WusZWT& z@Q7xHQ5!~8wiLe*W*=PB zOzO+!ZZ@D3Ezv!G{eELx&VA+fTycI}Qu+%ns+(?D^xb%Yb2jhq*tOu1rtY#zj1CQD z!IHNgP~^wR&i+Bs8R?Xzq?cR~@gdv$CUdMR)&Ut*RP4coGE$u(jCf{z4+<|N&ON{WJamd zZOd48047Rzchb&vbKg6JAdirs@IBcQC?*C$RaYbPiUSR0gwLjcM(DatBK4HC}+qfkH>;MVe`mk&r0S5-MB2P=aBI ze6^58_Q-a`hvPK$^PzbZff2Un78WF>o2v%rb&A4UkMw}o@cmoJppwrfST|I78rUm=+xkqW0_;N61d#->FNtkNWZSmVW6RL&>U584+-|i zx$K`T;#mbswdDR)BH)*mz*@#x(8T7S>w>u+ciubf`1GRIv}Up_28V83JI=ytQp}J1 zUWC)N7Zcz4?t0jS-?ZJR{5Ix_S-M5Rr>e5Np;O1-87nyWgVJvc0UV!*omKz{uyXoP zSr%PVGRh#jg#&U}XMsGt!!Kk@RL(w(np!Rl16MvaKcYeAA1&HKNnxQ9U-;bv0TZ+v zy-Ln9)uz(#)_%<0Y~en|a)&1Z9G%>)YM$tIe?GqRm)@s}QqTuLA4UNiH%q3y`J>8s)j++> zd!>Nvu8_*9cbNx$DRsPMm#V4|(aId!eCXoBO_5as0yGe=<9-GQskO!vi)Ls(=8)h! znw+$n?zMmyJ7}tP?E*}z9eD5leMA*lQ9*uU82T16tC-zOycQDuNEhhL@w_jiWPn%Z zXL$eO74lG#6u|lf=OQJf)?l=L1bLVM$Qik$hmGpWX^h4)8^)aC;ukjX@B1n59UNFq z);TAO`8J(gapT#{QUP_)g@WG2>nt}hc9)K}IK4&P$=;bBd6DKlkG{5D{SQHGVXfOP zm#lHMf!a4wzq!Xy{23=L4^cFW8ndQsXNBHtbJ!^mUO~r3-yn~De$pbvdS6pZiwSr? zXrs)nqxezcXNjpLmpLu@CSLd}3d|F+X;;XYr#Q!76I$bx9e@W7IKgu?K$v6&vR8p( z!a?=t6;m0;P@Cwr&e|h2CQQYEJmri>Z!GwA28SpI%S4+03MZ)|bN*a0#f@tyJ+t}k zAwE;@C636Ow$*r>L>IhUNRFB}9Xg$A&1xpO8}xx_$4h$>*d2@K$mq$Z0L83|ccTQ= z5m}&VVzedRB;U96D!iSr%>%D*87nK#q3W|Z-d~4?q(J@JwAe|I=>J1+pdhWm$}B`SW>*iyDe+%( zFxW9`q!o`mD5BPJ5$#Yi?6U5r8+9x7_MUs#a%U+kor^Vz|SmGmovtM%(|w|Rq)FM3WPNWi%B5DXywm4@}<4FJ6# zKqK+b_<{`vbV`x5&?0hIGhSmHzIP<}rq}@p8YBpfmzlkN)|XlY0L)nMqtAgEFo4zw za<>WF>SCCU(oKlD@2T;jnxTv{+OiA7DN(HKaTQxeti39*NzsTaxs!R!`(21>mO-Os z9-SBoF1vv7*T0YY6LXNE6icx66-tviBGiYEa6z0coPmo0ram&{Z;0P^g@+P;Ai3PK z^ip^L@EUIOQa!kK!!)p@?X)l;GE_U&ou2W4iUq-oi@p&RC zYF2QB6AyWIkZ4+jWC`lSU;P0eQH?OBdGzUu=m(&y!3EJESA=r-pWnbRh`{K)5t-cj zhE@ZIro|Dv0?N=g+-7ypJauGWuYT^M%wzo*DBwiVrkG31JeyEHh38*jA zZmJDZ{L?_n^UPvnqSlEK%a29^@F7aiH7+E{AtTvSryH(_DsKP~$ZTY69Qh?|M-Du$ z#(H3V+GDjSna4c*#HShgrFp9RvmO(Gl@wFFwmZ>i2$!Edma-^32Al)Fz zQ8I^uuhM5aX$8TFLKtiS7<^8o<8Ln@Z$Gd+eOU{0OX^S?!Ba5QVEB@()DB$apNDgR z`1ll_4U+cae?NyI2C7wLC_W3(I6<14hQ~fRK}E0%8S=kz_om@g_HWzpibNEVN-`yt zN@j(Ok)f0!8blfDDkQVaBqZ}#QH0EeRL0DbL@8sXLX>$(WXSOBKVAR(xu1L6-sk=F zetFl{my)&4b)LuX81`d7_Cp)I#bi&F)JNiVh>u zl%sK9*xBxVGH+B9s(ljmp~&4N5smK-@#EQ)M1IO}y|5uYm(4SSL@oVKcF(^M|BPNk z4OKoxtE>N@juE3&@46bM$4QpF;cOD(vUd<6FWz@Qf!0aQ_`YUwhfii{W+0pQm~Ueb z-W{WnnQ88}KC$oa|2e;5Yxq`CDkCZ)?m>>SQ1kis+gYRBTs@8{C*>VFaSnsmdpp|N zM!8y}d|I^ht3I1a{YZ{LHnr8&+WKIh^Oh~&=~MgG%2QZbs)aYmd`k~OXhPB15TJz!{Z= zG(o(n-&=70S@zO=<5CMc=?sK`4QSMqtH8WE}{Quqo%HV%V_4!V1kz9_w2Wyw=5bw{30u%u=n^% z${n8S9?rpC`e(zVhX_3PA~~|j84NFP8tyH8^%sg zJTRh)!8OjI5k#o2!C&gz*Z3kGIQ@vOLRs>b#Ird!ap|I8oWOM+ef^L?3W34C*?9G1 zq8TWHhcESZ(T-Ik^D?{CprF@WTRL_+e29h8yY=K_<;rcL5u54$nJNa1MR<@XiJ-gH z(%Kr`Iz&xr3Qe4(d6_@5y7Q5U-|?|Ge3xn`&jo$`^;q?a_HAGD&2} zfzgF?nOXFt`;7YPhe>H?o|Nhx6P5b0sKI!MN?76;Z=%z$eDxbiu7PPfpFVwg(Ehx5 z!_lCH16w;dYNfi~pdTr`rs&J)b*{VhUu8f!Zf(x0%sR7ULje1gf)cUV{#FLcpYeVB zc0HRs_k=58^iAI{Gr&d5wBnN|YuC9_UYSl}E+)&MNN3Yor$kIPN)m5gJp1D=;5;pPm7Isk)#yirQh-88~5hVZz=s%FIS+!mGt*EGVPCwK#bEdr>^4#^14|Jt8M{Qu- z^S;=kq3GI9OiJ)`jOk=_rhSSCJ9u_1y%v3PgA3o$$g0z0i5OsdJwA(^Tr_pYPq?*p zdrwSx=$=<4(4*S zyqUX6Nk*-5qTx=RK_lhyCNVZ0qsl5XiSLon@Iz+W@H~rDV7#Z-*t8|&i>wB198J^jxX&Hz6A==QeMm!@syA1~*Q<*nB{C6qTr4DMF@f$c48Q2yX zOoXs-L0`b>%tM!bmMsdNp}e-N5<6s4()sF|-|=sgZ6dDVRsINb$I<4N<#qtLFY)#r|L1VVwoxmj z+fD6?E>aoEn6u&<=Pd4?suS4t#zc?8`0^OI$d=)pcjw;C{=^tfKw8P*#EhPHM*=A9 z(KJf77x`Jgm}XX9$UfD*0%K)2xYAxEct?1rY}d&+|1rPnrqA5f8*kg>Ja4P^WMo7? z58BYbf>oqCY7bk)!zViNvC<$;i`s6!*f`cJdv02z@|$D?M;+IkwEflT{O;RL&qM9_ zE;g$41uuLTJpMg;gU+EMbOcPU+pOL3?eLC>!>JKZ1kU8!jhC;ctpZvd#zlzb2Rdg% zNO#x0i<+H)d`2yBJ`3&{MN+@SAf-`qjv%LG)EGxY)E8R+9(BFYXJ3jwzTciTw!J~gs zwvNrgK-mt|916m_9~0f>D!gM4OSr^4p@(UzjwZvghN&60<>$V8lta`FT&b_8G#0M^ z)J|J#9ewhZp`loc^a`Fd1HsKdSihPSYt)V0>iGbLj9smz?cY>fJ*-AKkBxpTYtQfQ z%&Femx25wygm{gDt*Ajnlk91|-O>s1;svWIHU0n{KNF#fM%S+oh``IXd?Bd!kXdAL z94*A%>qho0jQgey`B{;UR-a3w2G!W4)=`Q!rtj_K-1%Ek7czG9l)n7sb~mK4G56Ga ze;tsBdm``Mw`FNC(uyy30cLfl_65`_rNo=xY~j-C8a*J|l+RaZqwCNnWgFd>y))IA z4RQnMvhBLi0d8^&XYlTD_E@nty%Re$-Id-BQhPmnEFk4*KGD|^5wZH{Sa}P@>mbp4 zAmeC_7=bb!J(p|Z3;ZpzCSc+&NQ%a6J@h(6^lx>+{SX?(%N<+}ieZgg$MkNO)liW<#PX0c$NPmFLa z#$K|BF1NhB`-qZ`nHs3)0x`OL;rOE^5W~S`dw!L-Z8Ykai6e3{``1>7fkKWyo$^n1 zrdoE;->4oO8PJ{%841WQxah#8t!^6~U4Q(f{Pzvtn@4%NjjHm`A5c2Su#AcuI_-|meu>Pe2$u^bC(}e~Tg$BDjINv5;KGQw(&V+0E7Q%OkKynbsRb}@EhUqcslxLL*V_JoS0?V=jT zQ&Lj&3#}7DILb4vWvnsDHMouWPztLIZl@h$=m3#fC2UPY_bD=~=f_9-sE1Q@mM3Ve z+qFIaN>F)1e zLR79AeSN9olk@fw>QXlgq0M-LPXL{LjJ0!E^gbR9Yk!D8FQ4c@Hw_fb=i^P(+mM>qvkg3>+I%=VN7F35$+uU_j-xo*VRz@K0`l57Cm%Iv^gO42Ww4iy;C5zVf;?0wh;hZEQ!@w$y8_WWoM5u1o4wN%nz6(UqbmP9 z-4}Rv0T-vhjxst7vJoWrBNDpdLpt=$iY})eUaV@}7#uuwN?pou-3z@FTS1c*ncm_j z@;T5R)F+_!05xBk_*Se8>Y3e_*w-gc9}jkfyV=d%*H-`{X|FJHGg-^#C$l!#_V$JH zlhP_kQ1&>@ghRo=-$Di>j--GgKtASY@kCc9FJH|aqH^lcq`s5XE=7XW&3BB8Sx*%@ zeXce;a^#4^2jd$9kEi7ZC!;vl$2q^N*MT65bze4>^Hkvky-U!)I2qzc+f7#z4|b>Eq9ZMD|9 zbLT>KD+@ZC4>3vlc*qdZCUktz>%h}`_2iMb9<7lKBtZz#b{mIwM@7ZrwxwyGB%cdX zrgQTXZ{l`ZDVeI|^w<{ZLNE#s83Isb@-{8)M$IpLx|a^Z?abB#ip1|p%wH@o~(s`<=jP9Uz&VWu;ey>DYr?9OU8^D3fNQas~ zDcQ?VUGu`APzJs%8G}Y^4F#G&0y&W!=;mB2!cnv{q)Odd-J>_||KNOK^Pi}zMFzyP zz?8{+?(g4@+av3qou#h$aPVx-k9J*)GnzRjbx|e3M`<_%4mTayG=C=h2wSCf(f91^ z@Pb5}&kx^R)E8#c#aTy7418%Q58=<>5ptajXn}xDMMvlT(iCBA^D+@j4gnSHhN zNN{irXVr~)qr%VhobHbr6n<2(fS%~*w~B}~KYxA(-OfoJswXdcYzN*AvO7ebyyWHk zTC5=q(A*l|-raj5!Bfee2zWNd=rH_6)|2z%%)XMj64N7ZN8N3EKfK*i%jo{}4@cd{ zUkjsewyGy;Y0=YcuhoX&kP&Yp%5!DW3|-M(^-qweU3N`h$QYLn`F7l#sQJ8N#1+3o zCumvCuY7TCd`tSjQZ9tMYHPr0TQ}~sL3)C%=%gz-s z=kM%3ZCki|XmEMlx1gY}IBB3xoX<3(dTec-Fv)AyC^-u30L|-3)>N?RZ+hP8#UH^& zc4Lnxf^$NkUHVVV*1Cc}w;V$rglIg2L@6bCGrDqxL`}+J=mgPEcIoK&ntJr^z5xIq z&D(DqBmvCrD=taW-a;2N6KjzwpWYR&s%cI$Xa7Mg3g<3{bUrjSLm^MIT0MMy^T=$B zpr7$>>lfM+y6tKa05rCT);>Tl<455WvsaFM7bEPp9*Ed>#p#4g~NA5x(`dyYe#i#Qt4 z5(v-@&lRrbbLei^hUNisDfL-h%&K*UrzK2W(W3{86M4|?j<+6~%J^)`t4&3kM};rE zdGlrtRBRcO4)vXJe6=<$ZEcXaQ8uV#nf>vGdsKEG=g5Hir+4o_lO~xSavo$pl^7yL z-;HH86=xSkBj;S@gAgve*dS!_vkM-UpPs2hzqfu_%1OZk^#cX?hDW*Qi+tJX&G`mh zYmR3tXk|~>;`{VwK4Oo3dSy(@X3TlyS>rb@r5>g2wO>oaYDY~iFJAh|*zvKnt9Fz| z;j-&=?(b1|SF6s2h0&f12W;<&Y-IU(F}~ERhhJER`##_8t@XlDPXtcqZ+E>a`gf`;oE~B~dvw;ee993@eV< z9j5mlCO{AQ&3*ZE7;{DZ?%Tq!g4jLQ)gLwaT=2?a`^37DB} zBJV%JOf;yQgVIt@EIKnFYus$siMk)6S}^W+C~OJ8&vyAz?z|;p`FD1F{=NY&S!kL+ z@W+LNW@Z^1_v(}8Dafu6vcCAen7pkpC+6BHVaNSsBqS!@%J5lS>o0p`-Y$h{V#+(!9$P#EgHjD-ic|J$H!9&2=vib#f+P-2u)CaQOsmHn#%rK&~*lM;BC z$@|;*p>_bB4Q$EY>_-hB<`V~uVpBof)78`4UTXsi7DSQo4M39wo90w27k*XY>o&F; zpU=RT=f;*6tq4aK)SI^HvT0d@W|(pNuZq9qo%fx4m>l-xC; zSLxT@5j98!%f+vKPqi>#$BE3eGa2!t`$M)|t#BIeQL!|yTJdACc1y(JtDUG})Ya=x zynb@NBV;(kFF7Om)FL_l3i-@ICZ9bZT4N4%b|RmXM$c78d}FX?^jo$5c6Nz@(z0u*vU?j)>II$Xcr&aHv_Q(cbiM?7_=2 z-qC90N#M9ki?!46cz*uBN}cX4_?$$PbeDc|FC`L9TjB}tex2Omj=p`P?RUHnUKP+b zXS@9`B%2oJ`02kxvJc{)qC#Mwy{wb8H1)Ij>c0npG8A5|~spd$(z zn5t}AUYcNJb6qvgCB`WlrS#B{8;JKRqv2cNN7P z!c3Y&=bwiShF-N|4_UJIZZ2O{Zt-;6mU4^jXBjRWd3lcE=ktB!2ZKdRS7V-2LNA{9 zS+M>UXSL0YBo!?r{fMSE;h6nZay$nalEIOYR`=i)!yk#ntsKOwn5>@vh_#qR zA#@g{TvdAe$Aa2^BK3V-Q&x}YzkZ!e-Jdej7vsNN>>FXK*UjVX<@4JA?|T?zp^$`b z_mSIzttbs-ID$U?)pr3P^D({ezg7(xO%ic`0w|V14+rShma=nD!?`t=<}J_Td%gAv zxv~G*_248xb{80T|0H)^;mSIg=ZS2C3^D^!%X#%)i2R}xG0y;HUeYSyQ{QA@eJwUN z_8Gun^`<_#X{k8Ka?IhVJXjV2t`YJ`^u$_=xk@IFuzGGHYm65UTg^-yJT1Cx?+9`Z zIwq$b1W|F!$El7W9*G{co0%cW0@2kV*{l21!*i|PGz`o4kr;fo2T6tSQed$QGKs~T z^*ys6Xu9|Iuc#lztICvXo`~X+7ry}JQ~$mK7?&0I@fWWoCHS1>7tww-(YJuaw?w5D9&-&FG~<=-=%| z^qcTpgSK*o_JJr(USZg$K@s*lC2$L9Jb5Yj!3|chVOR+BddvUvY8}1{o07oB2kj(! zLg_jHZ^@YO^r_f?eJT$=mHLvERpWmyj2ai#MOnU2|Go>Ce??L$l%^o^ zP8ClCmdmaS%kS{#7G!rg^NgDY#PfeWN=D09%N}Jny|-LPG8ERUQjivGT^)SE0KDVut7< z-d+}Z#9fSC7xd%Wfw7X~OsY$0BL>p=m>PyfGY9A@+%!Wwg8Y_syM@#~gJ`G`p0>DxC9<|sGWfhpC=YVb% z5yxAeYz{3&(S-d5{&zda8V|=Q>_7&K#-=A2g%%j6T7FKE%EGa^Yge>^qj@G4>@u(A=gX-VVtelC#Za z=oRekaiAKo1~YwtC{q*RPVMQj0jbyb{(2^o<;iFvIf8W9VY0G;=m#N{Cd+I{Tp^AL zeQ}LSBjFy0|62%m4l!mUWUDe1eON)n!>NDf42n^kidom=8Bst!l_ZzFo&pypUDks& zb<)rwI^J{9`4BHNit19dyGg@l1KmndkA?q-2yYs{iSdTRtF1T4I*nzK{gY>%xA){x zeFSNl2v3PVT8{c&GME;k)yZgC;hKf=1VTI)p7|}$4d$H-ZNvne2z8<_!=^##fj7BN ze@VNKRWz9CAtWDY<%sobH<+x@my0Zt+R2)RlitX1u$WmsMl(@|}qV@Mr zu8GmaZ=VMc|8Mw@C2|m}#n9H|H6}Nsh6U2EdFC=T7}N%pq5m=SC!7r#j?fU<-=|Ra zm^GL}&z+vMPdd5WC*SXCU3(tWFLNmD2(3Y&r?hbS(koiXF+z_uBO}ACVS)64k!g$R zUx$_s(R+lbB$L%s%QM&&^cY)$o81zKhPo$C-1;d^f;l<8OPCOS=rGhaaQyyU)c>I|z9+lTWM+oop>qIj zAK`TMli^&l7J;o6I%JPQbAP!$=Bed!2nJWggK z>v16p%%U8%HnxT<87~9soxANhy9w$)%cHf7^7Gc}O+?gA9#X`>8k&iC3b39Zg-w(H zW)nKHm?LmO_8T>1tEEh^AXM@MN+sn$Q`0{f4LXLAOPj`e21-prPL3vKn1JcwgAe(` zGaG>;w!E1l2NLAPV`YEH%<1k=Ie~zuS_&e11JzYBCvH1S|dsuF&MPRBI(q7P9kN!QR{6KpFxbHg%w1#vaYM>;1 zICU#}IpAs~L%xre%WYioO}y+G(j#2%17IoJL$bbWYw7^xgG&hSS{`xv`tDt}M`52c&Cke;!i-(9B`y%N2gG-BJOOud*`sOvV*RWWZ zD5&N^E{jA#bbYbMXwKRy8%Y>D{bMprgzS)13;5ye6o|E{+w;W`(T@z6ef&v=TQpr$z&dIA+ z3(9^5TV2AavGn|SH5uYh&&oQA;hwv;Unl|X@dIRch}UIA8ES@&0`Dp+6mTZ#+wd+z zwKgv~4`V-%^fm{3fVimtUXMUr@&o`E!gBB{Kt*YW!3+>+CksFMEA!6%4E1~jOvN1W zCL$RjBNLvDXz7y)nZO#1oi3;my3;)*P6qqEz9IJA{%eIk#F3LL#}bOY+e%x!Oxi)7 zBe%Zi>^yb}lw#?};OOXEHQD!<>|a|x%g+aC_R5QW1sz!c5w5SwDfr@em(b&Nbdtzi zGI^K)_xXraWvI-AzsFqjeQZ!l$3zO$y2vEJ3;(Yk~yFRT`>my9~D|{NyETK@|i^a3X@4)tyVY z^Bhxb-rB5BNHPH9N_d#58Py}{f;n>}Qa)9X)W#N%+rM2jnhBW_a|HW8AF;C{Q=n5; zOTVqEr^%I(wAKX>f_#bPUy`$ytLqk9UN(IKp4>VIS9@e~KvfrvDK zuNsCx!9@@|NSa2QF|L&?M4m;2?g#=-CY;hHdZ_tL(3L9^B;oZCW`vnODJ<<+&6@0hYGd>x;4Lrxl5j75S|*qeY(Q1SFv*Qxnmjqqm= zkq}flz-7bAUyHwa_659B&`slRd8QHDA#z?do6bGLlTgu=`RM~yOi_2p>5_&4pZbBT zqb-D=hmAgJ5&4%tCXp>J(7e!t#3PBEaaaog$w-&J1D(76?!>~Rf}zVmihjYBxU4H;|JoiG z$aPL3*EvD7Hed`YlUEGTlSR%|xbS0yGtexSC~DxzHtYAHns54ae2{Pp34TcYbStP9 z$H>Y$0v8CE$j4}yV|`9_pe#v*K{qDXoiY2XZ-`9T19!w%s_XW>M}D0|aTlZtc^JMV z1W_!~xeaGQiuq@)j0uv
ln6J7~N$uaS#>%)`Wld)t=*%V@;`#}e)3a85e z&*Amw3+2;EftebBRHDn`+@ILx7~;9u=ZX1YKW1Y;Tm{mo2RH*lSPj;!1g1YkUNW&w z;v|7w@~{+!Iq?#3|K*rOMn;31|_1d`Sd8iGT_`wns9d_r9QAhpEw@-)e}Udh^DBxdjg*U@S#&KBtoGLt9nRb2=!8OaU#>t4YIqPsjiuXYwTFwj0CPc1`+>^d^Jd1oD2`C*x_oOg18l^hRnv zN!WtVd*TiM(GV+f1c8p*ZV96WiLg4XGT^xiZ-wPaE~LW&Y3dhpXz$=h7GT99T*OXF zU}qzUJmSK_JUQ)0_~|K|ZBg=(@j-Z?YP%HDR={#bvakAg#OB9G6jWM>>ihyIV;2RFtP};w)g07gOpyIaFI9T@@L?Y8kIZayh3=%?5W@1J0+h?+2QU!A0L7?Gsqr1Fyds4-gfa zc^vf1KwK^oBz;;Me>u5zlapiB=r_6@>QKr3a%=JyyiBIy-bfKb&v?(Ytk z=GwJuiHAb2A9Ip>r8sDeV6QvtiG?wpvVSZI#aCbjbCHC(zGod>Z!rfxgq6+vy_q1E zD8kFVLlpx2EX)y`RR}Q^Q>dwk;Ufj*+1bZ{j64aE9^@xg1;+Q^-1T}dew6qeG_s2X zY53JpQQ@1MZo*DQlAtVmJ1u?`ANUk41(L{+(h$$7uXqiQB`k3Y7CQ(U><6LG)%Iq?-Lmf1M$A^f*cJaf`mLnWmjM?dj>6eMEsVS!Wkg9nWU0 z9JEJn^WzP#8~Ma|;xAC3psvfa?nXC^DkuNBcx5T#cv@dz8z!r|{5{Srvew1lLBR9TLL$fLF%}@__wjbq=d5 z3fHVz(@(N7vWXe-lKBrtT44y}Sq!0&7rK-91DUOUiId221Bw(`Omupwy!1e5=)l({ z+C^!xkJCr@vE=&j`K$3UvqbUy-kz0rIL9LG)>j?9!x<+!&SW)Zwtdq1WUlSK>X5+J zq{F)n4!*c`>3pPRL_@{qZNouHMr`5$BzvS-MR4WY&tMSdw z&VDHOl>d}(8Tjs<*7aF~t-QRvNpsa!6Uw?f52vu~zw%kZz<@*WY>7VzNO>ds_U-Hc zTqIU(KVV|L{vSzc>A{6{6y>>L#6N)`mWYUmu=x0pSFhAcxgNy&<2A_5@W6#vNQmj2 z+fN#grG=|9ZZqr7xle64c<^9YbhIyAleq1HKdD&3qjHa`BW@$=A7 zrmE`d_hs&`*Du$Y0tigv4}Ybjqw|jZ%kzPQ61QVwZl3d)rIB@+G|Ih4J}ooYS6kM4 zdeqQqWO}00o+^bKff*Akf-sg9`-wyq01{FvBAd1MomLQ z87adjNAPTXe0{gd$Z))U`)Qp0oo!-dezi zIqLBCxA)~kgM!weQ^auZULg6#@i#k%rz)`b+Yfm|MPnmVD3@&J<5EP&Lc6{Yy72JC z=XQOJ-@bhd3k##fXr$)9`TUt9F)UH<-T{Y&ma&*WlKYunD7WVJobu#CyZ(g2+ zw0%F1BY*NXxVP)bgcDUmxz-Mf1&|Lk_ropL($)1*31-(TTKL&hJH@tkvviDx--{Q@ zFKTMKf#z<=cXf7#AyFwRDhi8;FmFBh6L+Gzu1*~v!u|}$kylohQzwI!Y?RE>R8#ZH z$k;VMKd&4VV$QpF?^+rf8cMv|@ADTfRDwxh+9$-%UxC23j*ZP9gZ0ib0 z!e=7{tv|3PX_XKzWqS0B(%G|TeJ#_D#Z>__QuYrp{{|f@Hc4xql9H0J$Vlq0x}#mt zA7((2amd^}^JV-I7!SVNpXo7G8=KshZ_fzs*~4J^GU!@x@LCKc3maFhY?U0>J6-M} zTYPnlam$u1blwSboKZ)P9Jw= z#KfemtegN#UF&ggAC@MqI=N;?(|#OeJiFWF?FWsO+bG zFz@7KKECbSjlaFPNw;QA%ZFcI%RRZDUma8FEOR%uusHL;6n_c9^EREI`MDuKc(d3l zCN3F;%a;YPhW95C0kkcsqrj>Mp#2GlEkOYR-Z~jR%Dk0m6APbzwa(@` zUui^m_%-rX<>bz`2It<(%@vV$9L6o96Sw>nWyrK7AEK?A%-w4%#mFh`6EEvpRbPK( z*t&lg60B-}=50K;>-Vr8s)x`Kr2=Dl!6Y>kzv1lcJOc{FLa`qHkbAh`_NJrt5>{V103cSQ?5V5b z$5{>c%N5St3385qu4%0aeuM|Pij|%QbCTDPoDZQ;f-fWX8oCEc_?CMHJGVUYFMeK|wpB*AUl zw%PZ;TY+E2>MNQ+T1^{!d*#!oHwy>|%v^|4W7-vcn2(RIYxK+W{TymmFi1L<^>U6O7y!f>86 z8M^c-I(0&}x_du<{FvF6xODG3=COHrcqruVwq|Zv($tH@EfLtew}$b${~)m!JXJ+~ zeRh}0{>ns=OgIg1wD$Dw=ox0{COvz`dg#z0enCMM_@lwTwD#y*w@x^Z-eBTBxXy=t zgDQ=p!j&tdb{Cy?l_B0zDKw zLvce9Q8>JLjH-NA-;r^)jjoOIbWZS7P1NF%lG==TTZls3S11noP=8Yj1I*oAX1&k~ z0J#FZ>o@zmPLFouG%1dKE$!~@<#UvjR!r3Dg6nzp_N|JF$|}KgWkJ|7^y<7Q>xK=9 zj~}n|_4S3+oP!J3`t_0ed2AA5V$Cy~gOfP?^=0D~v$iusL1F zvi$L5;oja}9{6yCDT>zv)zE{uK5_A9$3(t9zsdwY29>wB_hYOD^O)Vvi$q~TV|!92 zj`sDhPCaX%S#@%iFD)Jr6%~DqEoZPJyNK;Nk$3L~id}r$)sk`CX|g~3(>}#@7_dKp z$6o;y>|FYwR}Txz=3B@|z>cLw!@w^zG*q#3hJWwgLszZ{!hjKLt`84i?)~wD_rQTO zd4l`*pOjedW~rWn)aX=2QxnUrTer;RZwvMP`0))J8zioXU~`~Fu&3YY)2GdPOTVreHkPwesW@c<<%N?oVlmAYPqTV(~-AhNjl$EwxNJZbx~%UIyvsN$fDXY>B~RVzvb zbX-N8C(Z|P$?Er}t6iq|r2>$*WIfTVZcyTsTXp;NfddEZM?Y^iEVl11yu)5q#UI`c z>1UkRY9xQmTwK|=vjzeK1NCa&OeFO+*GoxBZP@Yo;aXGEp2H0BnoF0>&F4N-Jxxi$ zGvKuzY{@Xslf%%~_|#PE%*7aAUmCPTZhre_5`51J@bVoI(^W3NhgaWJ_J%b-!dm3K zQXC98VR*(##LQ2Wm+tuYYHPqe%Y;7e4l642hr>8eb?PfXd;UV{}r^jZZw~oFiX0G7S=rot+_cfs!Xgk5t-|hT^GA7zx8bKgT=!D5Bk=(hVFge&AEX3`<>~sN zNFil^6&8C)@qN+4Jx5mct+y`HX}n9(cLaH!in8*``Gp1J^DmB^y8BFjd5LVP=S5(pk8K&CcBQ(En>M~{3j z9y`W3F)=|tizF&2F1&dX5bqI?aibA4R0&+h#33FB%85tuhD<;Kt zv0>iz+D|poQ0->AqsQXx#UM5js>3Ny z4i3@%&y4ZWuV2Wla8rmwp<`rJ!QtYGtjiQ|yd^*J>z7{Nho={rfF!Tw=DttgCyyYA z$1Y;srNGZhKaYidl8(b{Xrj~D+5I|v#tEO*2XFrp$w=3?Z{BFVetVawL=q7S&w&G5 zrpG!}t*wRGCCq(rFOB9V2N0uN{@HJpi)?7seYc6#z)3{RTli%>=GlJy_yJbqesQ_f zbYHQv6^Udx#SQci`Wo-op7UIwk(Zapt{QfV^~fg) zgCbiR9Oy$Z{FFZS1C9bHU6K8XoIiiw2+QEvr0w}@H%lng)YPb{sa4cP?zBO^N#Ah> z*&edFm8(`wT-RJV&wG?F8?oB>g+DVwm7e3~J@)RnN$4d zjvYBtjV&Fa_wL=3zIys;ZtgXW9n}aHL_2UL4Nc|Sw~R2)+GO=e>;89J#jU=URM{Y7 znE@{S80pF6SSNQyq`HfnyE`*CcPQLO<=3xV$J37KaW+GjR^#rzwcPHL+Hodrs1Q!# zX!jtrqE37NI{6w*(+_X;vhj$rGGD4E<5LyoyxOXCzsp$GV(E-J=|idOeiKvE_fIcs z=2;>sWs`H0#CbXKeHPC)Yj^6EPtR7v0;&@fuZwf-H&a2jf;`H*Hk6yh7g^WeZvX7B zz#;3xIh4d%J1-jZX`h{)9kO0tRNbSaqn{Y#;uGB-9cZ$WD3w#c`ae=#-TEZ~`$gcb z8w~2sGFyUbUtIXyrN%jx`kiUAq)bOn6Cs9viFQZGa+_okrY9h!~Sx?nCX zvufa0tik8NQLUtrDr@%oe5ORt~5vlF;7(&M_9S$kp6n23_HLv8uSyj~zb*7o*~ zY@a`PV4BhsNL7J)oI(L=pm)Y2eqtey%reb@K}~=mU;{m9(yQX2ME_Zu=?Ojc>=Lui z@#EbiBf;RNC7mnx&<}kor@L>|aF#YoCqr37V+|vRq!-+5C9LOSWBeg)?eI@hxH+g4 zf^fX@Gv6r+1P$g4p1lvFdhyt}`o$W(G(<9Zm8e^{k{&&J^cwZK2r;wbiME&}H<>Ty zzfO0oXJIk_?2feg8?OISXW4??G?EGg?M62l!|}_X3q@8ja-13{0#)l8QJudP7!a@y zhY6A;>1~E!@2cda>;rP*i%|?(lJKC?rNTm4>c=GSU> zL<)fixE>y)1}V%scJ=_oIac?%$x2Z7c0co4;nkd`Y1)#mO~R&#Q3d64XBnrG-QdY1z7YI$MT&{mx_LHnn)D9*q@ObaImPzJ6WmcMM|>H~U;haeEpM9l-?< zrLxv%#Y7#x5M5K{DHkuOdyD&5$+ruZjc3|(B`o%ciLLkMY3ZLuQK7EBdZnTlJS&di zpV@)$ud}UEbTV8PmhAi9az;f(=}PbFAR)(X#=3O^`Pn*7&a4x3wpXv-c=&J+mz-O= z<7I@!Cr_Sq4G!uLSlBu^9Ku^76>iZF{^$I8UCEcNts78|jQ{+34M`EQz{luq6c!cf zEi#BHAX_3oKn3t2kxj1YGxG3XbFnB0gkFNl!1@e&x>Ymi-& zXhNajO_YFskP`;`Y_%AUJ<)74#^!kEKtmBrtXl_IN^?T%o~9ugZ}!G zz_GTJu2ZKIb2ERPxL8u}cW~XxJ25e>nKf8%Q2KJ`Ps~jb*MJ-=#aEk_mR1s@HMc;0 zCdYSfSZLG6jehs;aq#Wfk-5W2#$^)5PIFL6X^;D8LIMxlmMuN6!ngT{gsd7r&s+QK znK(*Uz0G#c4@*5mOfA##ux{L-MbaTDXD^#E;5q{GcP@^WOF)SKtMOdn!^xWkg3Rl} zwkoY#zy3NBkcSRA)LzJ1FMoKv0v4As`N8wptptY1ol&8oMKJqTX=K~LdqNaNYp6Mm$q^Xm8?C(T)Sj<6lb_4nw=}07J$^L((A>2ei-qIOL&pVgZ`-kB6}+ww zrtoe(Xg>Pg^wNoG@fBpJPf zl={cpI0oEaB#TCv*P>%!IDWK*72g^lD=NC`*RSb47p69mdJpt*8az#hkTdNcJ30t# zH+)Sy)cn`kKM3LgErXS4nVHS}4Fqo>D1I*kDK{$FGtTwJs7#>%p`EDJVp0EKLWG^nhyGZ4UY7A@YPHP34nyw!g68@@ zkA}BKAJ(g>d!4UW@c49@r{Pj4Oota4{*E0x^5P}4-TY?KU}TAic>bZGIVXL{N zq^`dHy2g%&!k6#w8*r67t(=-kcldWlv((aDd%3w=5Dy(z7GB?&i6C z9FQ_OOM1*pz6JZNn{EC2_1LCN^FSq7C+iRPSC9%3*`4m33^tWjqOB&eLg-H1*I|qlX_lp$Wr~S8{JN@K^ zv-d;Qa$@c|OEsyq&6<+gxu=0wK8;r96!&>P=(X5+bHkP#O`A)<<~~2aDn!zJJUG3f zseQ;DU}9yrxwl*;jGXyaaFXnZ3K_ztKIZf_}xpFF2&s_ zyTm`+vazhaP5$V!x9zk*!+?z8s|)w5xBR{5yZQOOGCHa62e zA?oT{{;|aj2Gjt@AI3x=c4mp?D02V2s@hsPbe!YU{Fh+P0~_V!A78VYU zIih~r`&@BMax=5Acq1&4D%y%vc zm36im%nI`(=m;YM9^l9l5f$}5nCOKwuec;{MmKw2FfRv1^w;91{ZVc@)h`h08}9CB zg2ofh*9{&zYe&Zu9YEGShd&oR)$aqBf5+VKkwC<$hgnx~%fQdL0mRM(-UvA19t%aH z+lA8N6jt(`=xN!fsj0b!O_(AgBC_G-i-$q@c1w#3QXeVWvRzYVcaQ?)UL8A|oRX60 z{^vI-KZ}Z_HVU16^!^r$HxFqm;gjbdoV#%fz5+fib4xW}S!`K5y|))i^>4tk)X>#P z*M9I0yH#BLqx|D{+^&}jELxE<`r(uE7CGNSN2H^8$PC8@g?ot8XC(MrKXjx`=Y< zCDO@U&@BiQ2WriF1e;(eADGLYutf32yi(EW%ERah_peYZa|sCYcXDSJ#BFGOCz6_) z%Dy*1|J11j&!t5IKn5mBzo@KSah;awA8lRQ*4|P8v80JYiC^<@av<%#3Bt*|j;3y- z4YA5v;b)U(kYrY0uvV<(%}SzG`vTq^Ac-WrF zfo4R8^gG5Z5^A{GVgM0-_@yT^six@0yG)O+MXi^slz1_{&NT~Z2slGaMyQE1ZDvSQ z2+bc8NJE*IhWM);IK?I*vvhCxj=y<`DH0Nps)Ui)5)%TRxpKVs=+Jm~^{HGF8h}r^ zuz&NoA^bi26h0d1`Swt?qpx@<)H z5*D`ZnMHd@mPsaiz$fNLvy8O+Orc9(X78Md09-QC_M9v8@22F|tadg`#)yiFlI`P}+fk zfsz4DU0URN?*Sx>;Bmfq`I3}FC{syu2M(1QMI`(EMl^0)=SUaE{3R+!T%;=6)fd0F z8Ur|Q(4;1yCW7=9@@Ytj2|NbC7$RA#a3#w2_Tm8iY8WG583BsFiF;HDgME)aWUJN= zWnD3Rz9O1ei2dVO(Eg2d&*A)EFrpWlUKs(P_vcSV(qg}r9%AF*;0yA*!wT#^RSn#@ zS2-kLF!JWj)vMOB`*d{~xuNtStu_jAd^1SPgq_BXd~V$M#ULNP3WW%HK8i>RQFG7% z_{de-+H?e;j@p3+ImOI(G}P73qd}<*2t3QhJnVOzyeAhRkK;#AeMDa~WcHH+pb=v* z`rylJh05oVgi!$@G=^p_`4{-VuI}!wj(3z@vI+}N4X;x>0uM*KY11YTKbBT1t5S1y z+zirndONQQc!dg&k2qz*U(nXoBp7SnCF-5wYNW+NQ0D%Yj7W2LbMxJp%eaY(I`^@X zE-fk@lN$>9Xb1Q=G-%{j^E4f~ERwk$N8$yrFE9gyjL>u%pP2A2DsuK+z!5*>AL8%- z%38v#X(j4<9}JazNYq-3q09i&Ko&{`lH8n<33_RVK_56WuFab_!vG|0d+A7L8NHzg zI7ucq)RV7r$$JPm(j_0l8=&IveYZ_ng2Xrbv9E?xb_NCpz9Z-}d-GWTqktN1?Zo7y zGE%@(M$Jk%0Gkf1Y!U&funO#b-|8DoJr&oe(QQ+5ble9G~Z&hP&AVzmM6X82|Uo1HfVO&LgYFEm2l(Nf0-0 z0p}rHAYgDS{EVcO)J@J+13UnkCr3Iq!CGPHv>=4gQwr?|Sb#110gWN$cFE|?OboX% zAvUobSd)1j-SVwCLZ}ip_2AO2WeG=S6R>?y|B3p z?V9IRa)5iW8o{(tU0FF<6NStBhbM*DHviPz;@&$v+^~9Ef6TqOI1%jl2G+_2RQcf9 zvt0217>V{pnrAZE{~k|{1@|EC_T9VnRq5BByG-r=RA9x#z`#HZmSO&P0xc538{nm_ zL}up%PObCw4S#Sq@X@&J$4{QH9AM4dp1(0=5Fi2w6qlM)*TQD61CTxlyaOgl;21PG zu2o*AJt>_n&nz2$`}R&eS+x2ts2x6h5M&jp%T(GDkA*Y0l02G+j;bx^922y=$u^}% zS(SAwQ44k#{lN$X&HMN7!KCCCXGU`) zYLNkA;$rYNg!2SsJnZ)E8$dikDB!~RId5@3=`cD58FHF+)*E1F$o#RpWbc`#^|I6q z57;AOW9J&a7x#aBx)bC8VY4Q_;J8Tm3~u5l;B7HX<;6n>ufAuep$J7FNQZRoCI?#? zV0h#fSr0UAr&IvvdJLCO3=)>g;d!Tj7ZbPKdE;l-_=Q69&6@p`7@74Hc^xT}ZiF+1 z_EIh;Q&8lq4O_zn+aE;kAa%`Wg|Mio$?apAVo2;YVnk^ocO2DO`$kJ&KLE`;6SSra zJr;@!SFj9(f!l*hGLUmsYb2VcXuxMQso%Tl@2g$<4xPi#CC=;NO1;rJ2K ze1X(j+u4DV(?rSNxc#V@m{>LT3;H8v0+eN_N0GMsv4()2gh7FFb^cE*`?E)n1pXxn z4Qr)yrJ#8wFVBr8P?wgn@)DS5`cI%rzJ^tJ=G76#+fMj0Ez!*Da2$Dg}+G#wipG$ zN1-8c1H`Gbo(m3?3bYEDSy^99cdy#9Z5uTxc4$_9Pu5U2I_Z+-j37ly4*A6yYRu-- zQ076Au0q-x78T`#2%3Nrn^%>%kNc9RL%WTx-F>ExWE3dJDIm@8=6XX&6hkl)zyztB zJuqVBps;ig*asbglhgc6uDK!Lv+Q%_Z?jw1YAGtNfWAHxC>CN%EnPo_wD%U-ey3Ln z;aHuan^{bKQeU5*0*_OL(DB&z`)l+2LhypPF47=|ODDY-q(&v6k-w_1Z+>mT!^_*G zhw=yhmb7wPY0=%C2mJXGiC=erKV4T{*a=!jjtWx8fHV=ljgLhYDG{g_LXK>FR7D0M zU`_Wxm&jXV2kIx@_v5&v+{cf#f@3bA^hdv5#%Ww3?+ZYY0;uw}72!8SLFX|VXi9n2 z*r*By$h(vyn^;*{N$&+jCEWx2;dc^E+l6>DgV7c=0@=F1IW07ke+iX2L7QvQj|#tg zcaN=)^3)hy=e^vL74;wzATiqcPtvMD@BwQWuMMi(+KQq{2Dhoqd%He7BEnmKX+Cm^ zDZSDdNhIXp{cx%?W0Qpp3fCdqxE>eBNqS#}g@xvu#6ZLH$C{D{K+iYiPrTNn zF)LiBBrNc%^2W@A*KNF# z_Cub<$?I1n>b7iJdxY@Z42xfk-I5lNl{M5W5!|)w{ik(wpmS=x=k#xv^15yu-W;VR5}AdKDwT=4NNRv3N7b{$&HoB9c6UP1yWl zh?uy;_w`#M7JGV+Br`n9%KBgJoq1f%`P=_bStFE4QsG1>A!La(wAh!Z5D}S?V;Lc` zXNj^j)7_vkii%N(>=8nu8oO|ky@bdXifr|JUI*W=x#xR7?tkt-f9IbW)j8+0yx-UI zTCUG4hS>X(Le*9ED4YeJ05T0AnnzgHt2SzleRlv7$yF`NGW#pY-*RTKcRpI$dm#&YvJ`eU3!_KJ-7iz&ylD$q7Gd9mXkLpEl@#4ia2x&BS zkpDE4!8dz={Hgnvg35uNuccOX$m(CKW<_1i7Sy9nA(_!?okSqHhj2_4>4zL4(BUOT zaKPJVBbP5g1MKQ%R#PL%h6JpcW~hG916Mmm=K4ah0BtRUZ4lzIOm7Zef5i zXk0y8YZI6C6Hpb4B_?%+3j+-cw?t- zmJvJxN{c+DMhD$n>0w=pfyBhkDOkXCNk&|uWN)y-P9(nDby+$%O=hX3l< zPlaKKf`d z0+DgTD4Hs$zW0zi7f`li^?X8|Yrg7uOLG$K$ zeN1&xj9R1mO>o@))86m1IudKru%Tr6)Hgj*&W&;QPjq#;Z}hKnR*)V-jBZeSyED@3 zQ^}7(=Cs z#@mLDd>Swja#Uwa`tmD8D)m&)!wcTG2XY)TdbGZcjSX&>w(9quR6Gz7x)l1Rn>Re3 zM8p|ENTf~L;(hVLg(`~CfNkkjYATj2SyDeIx=Vnr;xaKT`C(zJdzg;-HzYCtYc|XvgI}a2n&tp7nEh(Br_VBNIK)4fdrbW_9(a=-F0SFs_NyDk&(IMR0I0<4a;r% zYj`WP+(f?o7cXif5UP4_*(o3eFE20l((aOZXfmAnBC?`qMUT%j;o8<+A31NHL*v*Z8)ssO~l`0d-AphHs^ zZt<`Ntqq2(13FEtF$=XZ@M=%d`pulVx$DypZvefo!TTj8*%IGXpHn?2-A)Neo;Cnw z!;a*ZUe@cT2L@)4OFcp^r>1t_er^AdUa{8Gf0{VavPFySS9&u`Av&hFGD5Ny5Axcx zfB!JYvm4&Ld1Gi|GNQmZ9@~!hnGjUdN#X2X5w(*!h3)6lWUWn~GbanQ$Kzuux>jQDs_lS z`w5|5-al(LaJ7xyp8PHaDF2Hm<0M$QIF=1 z%c)*7-oxi>B?f9>@6c-4`=FSLDf#a&Jv_3eaOB0CH;Qj-=m|GlJz2~u;>Cw?Dtg9+ip1b3e~3dsG#*u{Jf|h1N9K}`)srA zer^LpBm-w$5vOlH30)!)kl6N|8AM1>?AnxjSNpjippyiQ*fHkd>=x=aca9e6rA0Pu zQXyL2*MxnWHBQRvy7c@~7_}agnsVH^nJkhxYgDND_bSRe(*f*(iICP3V2DaoA^s!x zc(;>TS-qdN+tD1u%d~0J#;@#Y54yUXN0f=EOFiD32o9rG709{d#hpfg*rto`QUt+^ zrGd_1DERfv1W)7cAapj*mAgEwBYyogm}U_@Hvu`0g+LtHv1j+*y#XQPCn5nlUjAWn zDr1L6udhPgpk4+>- z8VgoBg1Q!#V@+cx3zD>4^jF3C z&d8OdCvVVZbQ-oSNsig~8zHQf`kJ;-HnxH?rs}9sxB9h6i`^J`Wg6awqkEh#Z5);|7Ehj+!KK72@v}p~pDOH1G2?$IrssEZfIh{Cb z*Tn|s(^61bjU`yyFO8kNZnYqiBBx8};(fP9$y{4EMxm{}`1HX8k0duoXxCo;{t2qX zslJ;cB6K=;?yUJh=~}sRWsiB`crL|IOUIxN1b1yQXp_t(^XPC3=Y5kFEqW)VZ00@q z097a2IN!%1z$)cH!pv(#_!9yvL0LoPxX>)K@U;7-<9Ti_3B;Lu|B7O`fR;iLbN;-X z4R2n%_VbA0WCNks#E45dv)Vj-j1=4?daj7|9SP`M7Ab@Y#_Gj{`5l2THXbzbv|dMG zzZw*$P3^q?)7`UdHs4is0A!<@|Bt5Rw3ohd%!aT?aB2y z2mA8s=H%TVAUd!w>EuBws67)eS>)2Mwr)M3h1EoBf+M3hBm-O=?b9En6vv7buc1Zv zpkQQV0+nH|t<8T{61EFtoUPZT1LRm(Sl}Mfquta6WI*L^ddP%PZ<@!ay#Y*5Gu0e{{qB6%7uIQuBcU|D>8yy_UOfz^PhU_^E4 zh!h~Nqfm{oT}`i@?!UB&C}vPj#fqswpmT{wSUtfI-v1i<=jKALak zZ1ix@I;cpPx&+N+HMLm(=vC8z&z(Vg^h&<4MTcOW?E?9@% zgB;3((Y_qksI|+Hr4;bU;$GdEb8j5EO@tG{Ee76`@3!;H#PG4otf{u*nzRbe78+u$ zumiUa)}oT4hfV?6MogTYIIIOmjj)^dZSWGq+-WvmNNtLulJw@CbknsvxHTt- z0>RAOd`I+Cdf$8~NsYzi1Hh;nho1+g96fsdNf4$C0c<&I5 zS=G6T7|^v*Wh0|2YLYOj!69Z!(fHTH8Fco-Qps|1nDb(1ryhO_zw&_hd{^6oK|<21 zs$6CFO=lo$WU&eEpn1Hq&QdWiBdN zur7Mk)xxbeBl~R=N)Fp~ZeUD8T{&*J8L>2jsCGpJn_y~om{#ZBf;Y9s%zth#fsfxD z{wt!c+=GZeA-96&&yNRGl^lUpyplqoB}q>-DzZpS%`NvGfuWfG{`HT7Vi9&r%RiMS zZrxg0Xm#!dK08{AOO83GPgjPB^RfwMaK+@QeT3!tpG#Yv{Y^iOz1)CZCE`kea8PO& z2Y`G>$?(1yqoO)Z-FR~zysxN5F!V}UJ_5LtS9@R31}Vx}DpCPpwdINn9V@dA&_j~| ziyU|1D3jPvAHS<~dAB2vXrs8|Vq5_D)D&%;#xS`~#We;u z26?TWbeIvTQoR!9+S%JDT~CozwP}++$%98b4*2=e56}-N6?e9?@TY=L4*!_~Cq$V* zQ9CGbb3@7kf>hVOY zx9@2^R!THqzFgq#(lJ}+Npn-{JjOs!&IcfAig5!5VNg90NoKxk;UACn8-BA zaWR}sZK##y%PV^x3I#ARBQ2hi;Y;TmRivdgR%P5If zL`Lzn0STH@f2^Q$JC^Ce*aYx5aaVJg#@k9KP!xrDZQ*P{j)Pw8rCq7-y@aXmMFVYe zKjcuyK~^rabq$mO3EYCBV;Nl{dPq_e6OVNF)fz7dCaj}$>eNZpa(2=HI95>XqCnf; z$!h>gB9Hs@t4hs`uPQ zG-sod{2-!~N|isC0JN0pTxFH0g;wB-K{Fz*7$%#EUHNX-(gA}9X8{*UH$@KaK4;2B z!WU}b!AZ>@1O2*tdA+?|*xugWvwn|rHDmeSXGKX(nSsGw_yJYK>Dt?RV!Hs^8}hN@ z83-Y<%rIVgWh_Y{f@Y_wm6e;uK9glDI{=zb6?j~VbgHMtk9wf)`R3#}cpNDq;mh9C zsUzUOXyw*g*NlhhQ_YD8oSLS+CCY`q6DEjWOFS?vhoPSxH-mW*TAOs~VgjtQ>p;y} z^wrGVQ7FK3FmZ6I2P66wmHdnoox$1zV^@D+@6{f0`lCPZy@mMAhffrp9TJd)@BMEi_-i zpi+UGS?0y;-E@G*voqU_+_yEo-54%(CS|UUg3axDaMdRSDl)M^^I+T4V_3jq@gz)1 zjq?+iF^>cjo!Ka<5df8%qK05Wp9VYeEXae3&qJt@Ch|L{e|p#XBD$c5cs zEdoS^bv+_dbL5~AbSt#=o=;!S#fxOUbiLDq8FNEsGC54@{I+ce+xw+5T7foiXHJc4 zckX=t{mx6LuLR|&gHw94Da2$XRUCZ(+(!W-AR+O4o*O)P$U}e{lo|=oPar;CP?Fu7 z)beuX;%X~SBa|khPg$2BVpmY+)3ulN*)83%5LS$S$akuE|I5vJm^D&gWj3PtKE*~) zHf7T2Es1{8?$GC>s3H+1tLDRcOKU@gq6j8UiX2y5U!cZBnjdD(I#BeBt#)mx$I8lv zrvbPOku>V9VmFv@dA#ad*$g{A^$Q)j-us+8j`2x`2Ov}=rEvah$e6gU_1Wf0+2?Qm zFZATPEYpS!J-c>~@~}?Y^BjWmBxqHm0XzC4+M4zJW__*Fubx^S$x^g1)mP~(p|D-2 zPHuFVJ8r)yD2Ojza@yR?44dj(>qATlO1$&Aw758p>MGgP=u1Vg>FCjJ(g>kK$tUX~ zU>%>F`KI+8Oxvjtacbq`{Wa8su~VXe8tTZ*fA5+uRC;jc*HS$1v#h_4p!yz-xzu{i zm=lY9G^X~gTkFFLELwM}3ht@<#99jZscY|F9ZoAuRk%TwqI<;=qYu)At?#-hlPv)I zGPOoApX+$ks&+kI>&s!ruzrx^WTQsG*L3t|2$yyVs2}kB{C_Ang+gUTY^+t8~1}fBrG%`o04Y)ZRYD zho;_IfjWH0dc;m+_vcld*q)`w;P&4B{w>MIs~RsV(}9~Aa_bPzQ6~9hQCp}=M}L5% zu7;QV*FL%7{WgsB_TJaXF`_Ec!fJS1{`}CDPJC$-#gNAJK0jHA6&Qy@ZbszhYOur4ZpLibRA%-`yYzL_J2o9Vsn-< zu_oTl=qi|YtaK^?1#Tfzh5W>PF6@fO#|0l+B5MQHtv{pRk*vFS$AA^+>oUm8_nWMg zgP|?@25@v-^nyOnw7%<-7PahX9+R(JID%wb@Qg=2z%x{l9SA~H6890DseAd8tfl&b zbo2Un7-mewJ-}^Vxd(wZ^-Vig7hS;H_ay^Ij4+`DZ86)#V<4l{CV^+p^CiTKMn+yr zFqXN~PVVW%y&S&d3$^w{HPz2=Sb<;Vo@sb6_F@m0j*Jj3zS`S&?x1cn&@7_*IgNRq zo3F1(<7r}zrBdaPGbjySF-elfdOY>Ns_+Ej=|P*iEP=OjIM&Grrc5SR!90T|ngZP* zBT@=}9CHSwma10K{rC5Gc&OI{Z4n&WXYAa0^Ts0s3JnWO%o#G8P)5Z^@wY6~Z!Zki zwrxKqg-3V(*@AjX)RQuO1GA*AfgF0!N=V zHrDeop-Ob)kP1ge6Opsb6q)HbEcg+}<9xuoOqLI7o~J7{M6vXc`RDXE_8=TDzT)JvL3 zYlTew7tO&yd&5NO0i+|RkH}Ij)Um76;vLaF6*lnW6kYn>V-fm5i2 zu6c*!+o4U51?li^wF<1;gm2C%o13Tt*x(aj(}vhKY}5!~OROS2FMsmCu{8kSUk3aR zBeZnVkmmvZ_FAwYwR(g$ibTZXDA$rNn6ftJW&p(7cpw8G9)-Su-db=|FpGrCs%sx5n!YZ2ag1YTtlq~@$k|Fp=s$zryE z%$Tw0gA+VHa_p6i#{$pGR(sm)b&hk$d$(A5VchU}juQNYQN-=x#vaxj1Y*diMDguh z{Yxd*NDu(pL9H)gThA`kfm{R`a0qyh6?d;Q<(i&UI~e>p99>#-akUh^xJ#cQXd&{H ze8ABLUHfT2F-~T@R$(Y&`mWnb`1%k=>(Sa6KGByJ8TZ0;X8y_TqI7h{?4Xd!6>-Ce z;|sb@H2QLzq90LsGm{A1X|;L3WnZMXs0l-uKhq-ej7)l<8wkgS({jwW9B_+E_R)?$e!zcw8GBxI2l%k z1gQ0wAw{B-y?gg=>s71HXJ*Q5Q-tnsf0QIDh#nwK0$`wMyijM}eV& zp*Q7B%{q0xR!PKT;)e#`1!C5IdUl7dUAp)_z8s4t-$bTwIX6*W>55~a8p>uAqoLG3 zLd$(IEF8Xxf<6!Vm{F@<+S5{|UA<}~%_7xxZtP_zEqJYK7;zC@WF0IfZl!O~Mp)lL zbE*CNx~qXc_4QqReVb&})wr{sC4O#|=`fWj%D>{kq1Hgyz>YyW^g;xWOTy01uKq>4 z`Q>}n^@)4%QXxKtrNJn_2z| zJ+)QX@|kUo3_lwY&3~|p9EUWo49QfihqY&8e}Fs~!!+T%E_A+E+{RXW#U}ZPsSh6q zi=@}HAw;gC<%iakq!EwyA{P6KXffwYOtxSYGQx}JN7M#qG!of1ulCdFM!{(sua27+ z8adw3(DSr}Bz&o-P`7D*+FmV~!qboFO!IJxhvKZHuJqWX&=%W&Z4nkWCB+1MO&ur} z9$()rq3-TJd)oDL@i62>kebztb_i6@n2!YX6-+>mpZ4TkCj2D~F=<7Re?>6p!%c;ri$scuvL! zFqBN6@dmvKU^NFJ=a4Z=y?mSt2eg z!oU5ET$<@$aaXxcaaF(VQ~B5b)vvBh;zG+1&AdmCtU!Xlz9#%onclBnw=Y3o`}H5# z2H$?|axG7Lv|s;St9H%*<6nhGeMDv<40Hb zwA;KQrqRr;J`in@hpRy@msGV(8;5dCJqpLYen?i#^@lHj%oS=Q;SE} zzP`8h`R)1R2Gy$hX3_|RHo&~+@3-_!OKX(}FJyl&l$3GZg0?p%IrgsSXHX*sY%219_=@v353rv=Nva?O<(W z|G+uEd1*`VorPw`#FG%B9Ooa*yogWk%d1({a645K=}&05M4=M@OAi^#C5{&&$~YoR z3KPDMWyE<{!yz%!t76Qz_ip_ocl@;<1TrPLARVKnbK_x|0&vR6mRGM{DS|1x3rV;!=~+({u|u z;>o15!`iLBUC1A&pmz~HGP6pkx5QhG`ZdMdW)NoufFScYd21S(%G2++n>TN!Lk>Y5 zNnORn7#jYfTvAp8Q6S)4f}>a^oiZb>4AEoOq#PI63oURK`mzJ>&Rw>Y0WKKRnG!tp zR;Qh#5AU19S*^!U7qYYo3amEf9u5!xKOMRn==5XPV}wCdC0k38b5HwrH`_PhkM z-GgPW_Pf!n|GHEIRny>rmp1XAu(UZ*Ir+z)2I@P3iTkE~@;D3;c%Srq=}ueJc8DYr z{`31m6J-7mxlo2IjGK?xhcw6VF>~%x@8ohcs%*O@zSPD9Dv zw0--!)DWjAU<5ti)NM{}(c(*ApHroLE_9<%`C=c31U{Rym4YJ5A<$aJshD*SG7u*X z5UV>*RvZNWML#~Z#eJ0YtUp-B_iG5oW{LmZ)UM)3m6{C^o`Vc5M+%wGaw=o(HLb1- zk5h^IQcx(iuKYdvzLD{TJhH0162q}r7vc_upYwe2Q5L*|gDGl%S1QG6w^No7Lzt3w zd{^7yFAt}rh~MhcolB7A?1@smBkKxE`?`26E{kC*Fz!ydkpks(BlYdJC|SVni)9)gKO2k(9>i^+^v^tMo$?BN3L9CPf*mBOb~O37B? z?LB1l5CstGK(8mW!(4_wd>I~kVDgUB6~=e0BkCuvDB8QBl>=o}r5?U~a?`Dckc6?ft)hk3LmO*m;z^)LISTG1Qg6 zTeIq)pYxnE{L$)HrZA?b5jnUta1C2TitFA3kzKZGob9S($+DL(E5k z>WN~6z(lX(fAc`AyNfFpDuS`4D5UG+eaQnRR0l&vE%0*}2ZwY<x_U2r z8-^{pF6B$utOmQarHI9&-yT;KFLuzJ<6!X0kOCO=#%ZS05<1T1C9L zU;1@T)&))ZO|=u38eD`-g+hq$@e48?%jV6iC`1`1GHBsTc%dt2R11LOG@%*vW5l>W znB*(P5H=D+rKNI=RMyR}_@sWTtCfL7i_kvKj80iAg@Md6A3t6R3&>P}UwHaT6|^Oc zlfSm*pSMvaHHU?E{Oj)_ozA1~lQw*jw(n?_ZS?;G`@fUZ{~Fl0+Oaqos-qL zs-}nwt+(#Q2mZ~R1O$Fb-osI+Ke@X7RCcx@{e*NIZf+}rdJavt`@Y%xJ|{-@F{j@X zxN5}V8O_;a8MR%vH)oJO=F6ogPMo;;ffShs=bpi84CM&KHb!8K>f=5%@PGc)1SL5w z9`z~s@G9)kC$2olrJu?kOWa>v6V{AwxwV{w)^S4iPX+)+Tlr;E?mf|9c-BW}TJZa?)=e){G&rkr{B}Lacvq@a7)oOcN84 zD#3N{jEDUM%`-?0`g8E+aL&gPK5yzm7B>%+(Byn9D--Nb41_P+C2suEsQ!npx35Q6 z%e|GFoa(?(Bt)@!(R1#ef4kWj{>!lf*HA^*BH3&_sgm+&_Bw&`Uki1*a6C7 zVwUPDh^RbvV6frPfqyFzzCXvv1Xb%b|K&yhP!~W_OQa;1idgv1LD8$khe{d7z24RC zcv$Qa^q~miLxADI1H;T~Yp6rMtAM`$lCYTP6*`~qmUhVLv9^@Q2Pyix4szMm%XjJj E1J)XvHUIzs diff --git a/nbs/tests/mpl_image_tests/baseline_images/test_267_multigroups_prop_paired_meandiff_gridkey_autoparser.png b/nbs/tests/mpl_image_tests/baseline_images/test_267_multigroups_prop_paired_meandiff_gridkey_autoparser.png index de973894cf76d9d2b59812b714cb160f92ccdbbf..ac0c22c51613f7a1911180f5a053738d277d0bed 100644 GIT binary patch literal 59218 zcmeFZWmHvd)GoXcK}8fF1w>i|luo5V>5}e7Ktkzm6afk8kd|%`q*FxLgi3?336XAT z0fBEWpXYo3eCN+M&c8E`V>?8YwePj=d(L^y>$>I+R#K3?Bl`oQKi9#)&ml1!Y=9aQH>6)VF+;p~ez&B{_ zIsN#~ZJ}7dnG1p8H!r@s_*yTUkQ&DKjA3P84!IAd>2S9Iiqs! z9*Na;73l|Np6L~;-}qWY9%xr|*;JT4H8)?_^AcPr=gRZyy^H@rU?@K z`8RL9vCYrOxILKj@A0M%x)%0C^qGZ4-&dY#d3GeGQ7FGyn*Tq?zy1Bm^w~-JH{s*w zkCV7%0*#jrTFy?edfktf^Y)q#niPf86+b-vI^a(r{C1!J-?;O`zD?5pKA_E*MXy%L zb=v#jeYo$zr0ZTQfsayNibKdqv33@l&sONsP@Ztk-E=R`uW{%8UGeeaHz%x4O7k@L z+;4(AUyP}IH=7QuI>K%pO&v7fl}QruZBFyt;G48ZQ|MHf%G7uNmjJH5HX^kA;IU_w z>akLQUCp9hA#V8R=glC&yTqXk#G!j4R|7zY48JW7ODwmP&og16e!%5TjH0l1KtO=yGb(SEQ+YG@ z$R0Z`^D5|g4*w8peBda@nK*a&<@U0V@S(ndPsgll$>&wa#xS(!?X;e)ww*-X->9IG(n-|oEQJo|=6Hky=_^hiua zCW*r&@N_p%WVs+OZQxVD<-Mj&Z$**Qt%xequIR8Kf`6~J){QVm<^-m()T`1^;y zf7(v3?q zMdj^;%Y+>7DU+mJJ=W3u-aR+LlL!j**y3rL$U$?<;uREXj_PGUx#N7C<_es=;ZU~b zdon8<8zaZlXFk@`&HA~PE2Rw^1Kn{<&f8sg&8wB*a&xiA8x4vXO44vV>sJbk0=?6$ zF%`_u)J7|r<*KcV8XNWQ-@m_o=#^z9HO|9aW$l@M?0Guji8HT zSI=w7FyPEs50MNm!&PZvAv+U}y;t1s9POl^=^?jsnXU1i*i}C9vu(DsOkLZixW6Ts zfe0^PXmV0$W3-A{j)jHA%Gz38Uq2PX$Bg8TBG#2Ql418OGpRcjpNz-)U$0rHx!9^H zFw+ZACd5cf%UZK(*xrjB*hir{an5J)J<%g8mNfPqhue}mc^U0V_H#yG2I%=5fR28zeU(_8~)ih)QXUMv% ze|CBkXuX%^3y9gXtOhH-If)4=5-U4(>$#+$txaurgOs-JytYLex? zf3JUnmgx(58VY4f23y7TY=pVQu*JZ(<)m6xR+iiQX!q1RN?Kgx&kRA8-OQ&iL`al| z#Vjm5B_bruZ)_Aav*xcZ5tsXL{fa>B+M2X>0}5sI=bx|z>IgKK#cypjHEts
`dx zS5{ZmwY2V)jSA$t6e~siydn^1VG|wmIxn9e{#hn5@eR2plnhd#Kfl_rtA!5dV)(Z{ z-*EoIfnI{s+O1>;SLxIUpC$jLp``RKGm{2ZfWP{C>xp)Jwap}dq2s!RczKB~;n8s@ z-pMRoyX*5igg7Ybpgt3BwAW#ep$0q2ki<=W+P?|KdCGmUATv`mhW_zDg;@{b#q&-O zE>CL#*rMc34azhFjqwFOH$ostdR=K_ue6&HRaa9B`>j{Nwi_l+1E*5e)AKm8%Ei^S zC@V|M%*^b9&4)bQ;A#yzT^-W^Pf7Kgu-dC|6c?&S4F-MxpnZ2mPN8HP*6FdHKqRP{ zndPuH{t}(^+-y3Z1@HR3EF=U^-+OO31U)z^Hn6%E&QBOe3nc)#QzD{*(o%)Jy}gwU zN-v4u>zJCN>}>H|KD)jYqTtSzHKmFVVqM`b9~nY zc6ZCl3?N_JO>?7Borgn69U4YgNp6c&Y4ctU00}M|6Lr0(Zi1z$x;2HlwbB}j5yfdX z+LQX{Ga!sP;B2UBYUWiv8~vL!ce|O&mbQD?Hm9lZ0`?E%$>9b_I#g)-ZeD{C=Ox z;?VtOr@Bh?K(2o@W7a?Sod{Cy48;#k+!)A?{uyfksoV4}k_=Z%Y6^35Bt(wKdewAv z3NKK3DM3DqKB7-O`)ccxRaDl@-=+>xXOu~1so1}B`YT%}v#Aj8_ukT&T%d2NsY7tXqx*TNRwe)=SO^7Cd3iNo~%I)(@z7hT5) z>ovXK#{1(oOTWSW^{cmo>>C5?#!s~585uOV6V$LqdOms8nXnYx(baWEp6PO4`nTsVU@0GYx9TPf85qgmf32pd3cB;R=*kl! zr!?TELEjdds_Y8cgC%(OaZPBRnYg$(01^Y<2a^e{cyMU^w$zocseKf%8&cDyr74yIPI0!I+;hDTY)SqxMR z4+~V_yNMs?4WfSO{iV&~WTtf*r|&B=i;mrAM&8 zTuaS%yv6BIWUQp5WIMl#KM;+Lm9H-|aU74ut5EWqdbbFKb|agQhRar7T%hbLM^hHLPPt2^|NeZ}lqArm zqv+DcZCUO39QgjyuQmcIbxh5)PeW<#Pdt5}!+D+eMlUv+4h(So9|`^Xi0w~#_USU) zQtfQ`VEawOVt8(=yMv0OkW8IE8o*AX9@f|Dv&OA+jOJSltb}l8UPAeKiATVxd_my# zaCNk7H0l1cO5--%vFegUE_18?ObLJ1PHyroH@&jP?GVWB^{3VVN&pHDuM8Jm5L*0h z5-|+W%CYIsb`Ss2QdX7w&eIaDa#5c>wcjiP zr~oLtksPhenK+aua$@NXhnZ}fzbAoh6dI(I=p=a7eywhBhv(0&Ox$m=;HA`@sF-uE zZHn=j|zPb8m5;O zeUD;n>gMBb_ttIHuMQ0l5Bqv9B${{RXuzG!C3L@h5z6jdaq$Mw7eNqO6VTKE>=N4` zIDf8wHe5h*!Ujr*9&18UQWEZSTPrISYwPuQi(V(IhNFOV?Y&o2(+7-$C~^TvDAr86 zB*(KEvSO+)2%#5u3TkU>&os2Ocz^03_k?}PO%TsR=p;fQ(VP(F*C@uGWHM4_SO(|Q zq4VVOO;&P;rQ=h#CIc3oO6ekvl9lPFm}-p@ot*a2n*<&TwAZ67ul_OoQuWL&`h%zF zU06P~7~^HUqfK_Wg#22Q*zSTya#n)j^ z?(E`nwXOw9Xs~kgjBfSwMAn8iP73ECWn|l(7gJps$*-=$BTb-X(XUqnOgFMU-$N&3 zp6*=@k>En%J{QHm@YbZ#epb>Oc?4tT>628E2z*LZSv%-j=Zvd7lH_uh@Fe=>cGZqJ zlFH>mK$cljt{`PZqe0oZ7k+qnc!U@6n>)u&i7!ogPNzi#Ii5XSkBFVb6p23zjiy+y z@boZ6n?!dIKd-(e&h;?&*Gdlu(n?VJ{5EFMt(G?^bN$#1@H~jp!=gn<_FxfWMNLjF z)TVJu^8SMdD{%b!0BRrKG%YMEqxu!J6G&zgX-rZ-6G&ERg1)M*uD-nXp?9RFd9S4Z z3>(=OLJoW}vlo6kqQ){R=C);4p`o05MC=^A;aqcs7H!6u>gcZQ%>MlP`g&R!$_Oa{ zAB=2lnyr*V)gK-K5GX%lk*%(IR{ZFmU$8%tocD?hhl7N7Z>KtRGaRjGwiF`hJ9>8^ z+13ggRSzhQy8w|R>QA1P)=7@)IevY2oaS@1j1@6yQ)5%VOh4%~_&BSX5}s+Kf?4aq z%YN|z6zkggBj@9IX0N{V`g=LpmG!Yw4JhbLpBhT6)n# z!(?|za5^6Gl8-EWO@`*0+j&Kei0E8U{T6DF^uuAv$aUT6KMJ-e za29l8Y#GOr!1ZrhS5O_jO9^k=UhO8d{E;v`9v=;y@IBcZ zT`luHS>@G0Zdv|$u5teN%}w8lNwOZJ`wvfL>0`z#En@&P&-2c1~QSl(Pio|QEC|= zhF9jU?vlbL>E|U1aX#fXdxZjOgV@HI@7dgD!Qirwt8tj&gROj?D7A?S zPQ8C3r-7^(Db+8Uvj3g=DO{4!eLdab`c|dk<&U3{YXN2Pb1TC)5&eV%dLjE_q(^xB z8^2Adi?VImlSF~QR8Np{6sjB1)jV5^255@@jFWo6y@bHMkb5j;c2r3cSi%PU~4~f1E2ZXwpePo>=76r$??gL+IADy+*1)6^=GDH`=<1I);*f zRQ>L@{;4agX3nm;m5)(l?WxP>B6R?~6g;pV&(^i6lW2hgZkpt6yY?It|8M9zjhQ8w z)yl$Ejh-;>9}g3UciNK&JSoR28piG<$5dBAx%-;PCDm$V_hr4E%!P64{T-Y*tj?zZ zww7{}Z3c1@3<{x}S4-xxji>#Z!lw$|VCmCuDTy;Ha8bYDBHF&2VY1#kVb{aX-3T(% z9*{B|Fv$1NA zC&fxvA>Ld8 z2!@+bL#q!W|U)fo(L=)tn4Q)Yxm-ueZ4j2|dmq$>0b5TG#o!gb7WYJ&b5p zmY4hCL`pg-RD4h^U*EGVy!i0JlY8Fbbz2=|W+WYc*70VRJ@G6@C!4-yb&iWGVpK;; zfrZ#`8Tw|?bj@7L&T5Li-41narO4%I6n-YarB)*)fS?xyM_|`STUadTn&h$OSmB0u z-q?DXbb4R8a>WDSV;QvDVTO<3N)O{Xu80K~l+}BhgnXW@ppaTHNF_kY<3r+Cmhz3{7%2d z8jPFfzRzm??Y*Un>aSg-j#q#?FLQ6|V?MMy;xW}@%0&p10d<(HILr>_Su z(9;QExRl_BK0=9n3M}U_b2F_>YHBKgaTRD{HvuzmvEjotIyohL(ldi!!HXFa-;-^4 zi9HHvvZD9zm74X1nkg_En+tDlmEwIAmxNeR0PO4iQn`&?O+zCWNsJ~`$8WoPdbrdm z;98MFAzlXe52PKAJl@3rK1pP~^wH;gb;;Lco@Y~y?wt5yTh@COo>_^kmp`6Iu14wg zt5rS$eh@YH$`5@f!Lqx;I>6+7*24#{#c2?lfqr!8o<2W^GorW@k35v(Nchvtf)7q`<_(VsIDt*kX(#C>sMV7U30 z97Om`Oqx>)@EQwa(|q`ph?uyrvQiDuLYipCf2XQKE~A%8CWJ0pcD&f? ziYfNpsJ{5U)!}4m(|SVG4RXlqhd>_Z+3`-C{YIJ}fO^Gra`8*hYYs!X-Yc>7X7VRO zj>K4&#V8GHG+}uEGr~?>Xz>BYvaF|iWndY#kjSQ+AW5Q!wW0WION>A$dwg6+2%w8Y z!(@fEZp+EKZI##IHogY5Bq-Ah5j}KJ+q5_f>;y}rQ9BUXi8ms8RyLw(>6qnoF#_CK znR*Kbp@i6e0H0HCgtpI3o2dL2IXmp-2R3)!<-qL6Wn$(&XfL_c|JGw?7lJ$ju3k7m zbmJIW^s+B`@ZHLiEV*x#7?cqYgbJ5Q2mZ-Cn{O2D$t=}bU&k9V=Z;(EyPF7bG&VNQ z?M5Q7LZP+Ps4~G_^2H_V-l0G1115)tBScTwa_8~U#3p{c3Tjt)tEhc3D-o3o9E&5_;Z!TE#ZzdX=< zg5lKW7DPh*(Ml1JZNNY0LGW9&hY)2o3&V}DPwC|rz-cV7)nfGvM$6FSuCvtV#VcvO z*(Jw$f59Vc;T=AER+GdlXbzvZcbpU%JJr7b8>j66h^?Mzm!T_Hi zlT$^YoyRTn3hL{1S`NS3a=UMvT2I!i10$GK3WyEW`AW1*v)}C{@&v7Xkz2lw*W*I| zn2~`p2yWTwJP^ki+ZKIz;{eu{KMpbj2&apX*d9M#T-Y5h^Knj}rE>d$RaH~73a2sB ze3WNxFi(-HH=5(3$*5IWpz)fcZ*MYfVlLm3a2xx6gYBjZuBYJl-lokSd(%B9 zn8rr(&n69?nNmH0Cnp>rdK)4G_O6t4&lw9E?t8oL!`JbOc%mZLd5i6YUJFfczUkOF zNMKEPmhN()VZ?58b8}JY;KH%{JL}^j&FD3tX?SS`C}X1Iv-{a_P5HBY4O2o>Ohq-! z7vD$NUY0T)tImy$4_iLdMvX-n5w=~AK<^>cQ2lD@>h#m3Tm_*$HK@TJeU6mAf9zQd z8nrYHy{jla*EkT^`!kenM6-E2&UkDzX8AG#4!%xhrS%=AX_PfWvwwtfR2?9ic=T>M1%HbjF zMUN)Vu;#0lQEqwx!iKqWNp|GuTZ7%x@n(Bx6DMg8u3d!G^APCnZI7k`M(2s|TeS#@ z37jO6!lZe!IBilzwZo%KYd2&&Z>_6;s=i-RtY#CVjr#(iM~JbdwRN1Cc40xmt@lm2 zxst0RC1krPkS-BeSHxO3cO7Y1$#`sr%tem1>8@WwP_%#A2d_hiNw1x+3}wEVWIbfk zXnRvk_4VM^#Rg7%laFNGnVFfVl#Mr(E1DknyN+~i%zuSAf6FW1ru1=EnKn&{H;tO) z@g1~1=v71!=;6VgDX&Oi@!%vfvaqN_MB_3EvI|gZK3{DJ*_^n|=aSpgWvL*@T2$ny zwisw)Z~feQ@R3>0$<9UWPPX$|(qx!w;2cV*PL`w`>hyFfEuvfiQf_)J3W(umjq1Cm z#-oVk5Xx{oj?9Yu2~bG+f8J;6&yM~7AhYBU`k9rE7nBwy?THkZ9!W1i^#R~7vk ze|fm#WPRaEx>T+u|M>A^(2$~g7gZ%B0vMT??oK3}Zc$){8{D(VnG%;(wnZ~boIf{7 zTu4c;tSqR~uWAn{WWFbDY=)}9YPE>>{Ii9IzEH|?AX~<=N#TFh1VcIRn%%-Dc_89@ z>IJwEX}=MxC3f^5@2^tWBfrTS~8l`^Z$^h!aQVApvR zAr*LgEIiACCga@H;M0^@UWCHd)lCMnkQ<(8nAgaA(c2PJ(6KzIa9`(m5FAhc#_XS> zrhq4KWGq$9jFr>_0{ndrjolg@5;QyYHCQ#3qvX>KJ4pP8Om&mP%uj8#9xYlB2j0i` z@BQ)d8r-m+vT_vvftI%|z&=ae_ZFbM)vs0bIKdt+FJ(oHz-<&j`E8Ls0a@lgq*NBe zX1(a$#9l8+L~qzb3Jy{y5awvo1!H~mXHg_Q{)pXWa&i*FJRS~`vvU<3q+_vlr{Gf0 zWF??|OmP5-Y;N5nRlG+YdLvAM-P+pP%GOrX+PVbpc<@x%r3T~}8r$Y?eTVi>14Jv@ zW@2le34|wkezJ-X2lV-F+vp+dU~JKQt*L^+xq`y@sGnyw@RXePhBcYeaxM8`r{J#x z0}mqCkzMVVq5`O}stZS3MMfr=))I=5)pK$W=?Z8Rfd7;7DgnVu2^6h*K*Gb{zvtfx z=M`nrEL}5_Y^wQQ0EGWPpqR=h=-)xsC$y)R?ix%P!TFXgDYkQ);^ zn8?bJOIV55wTT+K=^?z^CkCxrP@tfBWotgIzT?;XVpmgrL3uhDt9ILZ(gdeEtDcyX zEm7VIxLGS38x4@}V0Tm>d=~B>Df}M)n8ETgv`dZWo4hZdh|gZ)3+J*KBrrDpxmAmZ zW*~n&PUUz0Sbw1)`nl~L!mrngvh)=MXbe_y|xoBWp}y+Glllq)BCb!B~h7$BOuib^IdDa>kK z5i-60F(@cBR}d_koq*wgFP=*Q$_M%<_w*QKVNA7k%n;ACxiRUY*dw21=tNvyYhZT~6b4e?n&YfM zHPhHwR0q<%4lph4?c!vW*II>e>R$AI}FI>}XZMXUv-N7PI?ry%8FE=BB^ z65+?%EVMt9wAV9>p&7rnAZDG`N%?q+qJs&tMOT3uj<8%xhKV@G#X7 zw%PIV#IV3ZfC^K$r{u+_wG-6E!r@`ze(?O=I4eElCfe>}7|8TVTAb#e65SdFM3^%= z-{1K22^0%it?A5%FPhP5;G_$bHvWqMxvmi zq(qIjKk|j6wzlA0H)r1vE3Jdq{^Wd?_Pr=+i<6_hB*5E#2gPFL9`!_+N@H@yHlyfC z{fhdA!NFR~ZUHk!A&D1)2s2~gu}nAVHv8uIRc5rBs%jQfS))qLgo7L|qnPmW+M1fV zc^*VBWKuN^ox;z7u96es4cTfNg`{a-YjDp>_$2tXjDv%mM0Uap-5sGbIbTyIoF)>r0`Rf}IO#QK?w|4^@ zW9WN!x8`vp%Rn9tvrIZpUG1+ZR#xP`8m7ifJP0-b^|OU!2iK~i&zqW2;J7hAYw?(% zGu!S>VbQd=@3tz)&+i-7G!$An%noc@-75rH)_NV$zq0yP)y-)Or^Hn*^+coRyPaf6 zaM1RZmV@+Z0#%szelr23+%z(R%P>g*0-%Xss z=dy}GV#wLtMuy(rO&fKKloYNL_O}YJ9(I;9Lx&gpK02i1hLu``AZr4iw*gKQB~FvU z;iPv<2>u}5Sux+XLQ+b+&P5h@LWP8G)5)Rl?-HxJv%hV%V%I>_V@NNt463GUrEtC+ckE{W9aU_Uptmr-1FGx1N+@|e<+iJsZ%(bY|;-p4|H{5<2_FmGQM`<@v92ehqya7?GB48FeQ z5VNV#4Yw|GJ>i%6!jpcf>)Tar{Zva!3?zveZvhmjd?|>zhplNh8i@m;)8Dfp;xy6O zM(p`q-+0ApraX#>nYAKk7^B!ghwl2ek4?3>-(6UsD#e=_Zb!>f^){7)@#s)-U|>Hj zm!&1u4wMi<<)xj%JJ;3k5hu*@VtbI%2spdCJ_E^!A6!3X4|uvlUUBNH7*vSfrb|j1 z7_2q!ROQje9W+E;Yqd~7#4}3oU1eYiAmn9K)YXX`L!V6035*l)Qbo>eb@MnU;kzdJ zQqW00s9E~|q~25^736tT2#{1g*NqYv#bN&R_67iek>=C-?r|M8Rm0 z$Eu3@uI>SPSZSIlZ#dU)Et8-h>2kW&sS5qk*jV|Qzn;xuuKZ))d-XNOy9*Y<`-PUH zN@p|VWyYm0pp84A(;itU+J+f%2YpUTuH+iZ+L+3xPl)f7+x%p2d>~0QZIE8w9xvZw zxDnD_S$Tz8pg-W+LmgTHf&H_<4)(cJZf#sDYJ_;(uGQOiKWhH59^B5UcSWTgFUT~= zgH|R(OOH%P2VqBNLVs0OWd74$ox?^L2M3sUz4(j&6w(7*PifU`z8AH9Sj?TRNCyWR7mA^!m$=OGg0BXx%^@v9|oCAk&Y{=R+dM z?4GZuTKdIBlXWrbYX=3n`AR+!<|##F6LuaI^^-PqF*0?N8<$3R?vIV+f*dq(KQDi% z2G6?`Kcj5?zK9jkPWCy5N9=gi^U)MyW#YEAliTmD1b`3t2gjfcKg+g$D~+Vp;(_CH z-LC3*Y|7C|GF4aR+$ZUV>H&{%2-xq(8ozaj)9h3=xUH#Nj^ARqK#~_DTV2)VHlN;h zl@D0#qkpPwNdk#k_3}X{>5siD1B5m3+t5vcD+dZHSb8d4_KIDiW!lMHyRQaGdB2(2 zRvYf@jB0;Pb@J=i%|IMGBk-4~bmIlgt(m`$%FETjjTwc!MLxs%7)Qt;VAdWYPP>{# zGyFXJVaLi+WDL2-&>$*&2m~Zo*OeqKr zL!>y^=YyDfl+>a@m4p|h^^nj|y1hM{^_4ZX!9drcdb1BH_HTVYG2e?U%D=ZhiWQj( zr*#Mz5rkg^1C2?a?LP^u`bjSeBMG8Y#SVy_iEj3&cP3v4UQ!qD#Je?rmKU%6C*!5x zT>94~|K>tnDQ6q*w7zgRQGqv%jo`vI?lc$Va#WK0VicXG^XPg?M9w>lWE&%X8#Rf9&iC@~ zePYJ)F+6l2Yu+U~^s-WsRxxA~ec8Vjvt~iH^GPIp_MT}iAsd6Hu4awbv(Z9e6M(_; zX)y%*5Xf?@335;IJc!VMOh0>|C%zfsryEXjDEQ9PUI!kv!owr>xveU+`Qax91j-RT zIUw7s6P+LaenUlyJ89ceQlBn|)4O@-0UmW8VlF8vt(UcJ+zLc`##FmcmjHY9ILUP0 z=_>tp`@o%%(X93`4!ArA#gDU57&Au8v6b+4Xw~uCI-Rsh=+PDX0#c`Tbv;aTrNt}0 z8z$v%pNKKfach9Bi0E_;ZE2|+J;%!^vU#pfR(8Pkjs65{0x&!If+T(6r8ax?fqbd0 zFW%+~@>Tq}?zek8r<0>s6jzHXj1#{}088?nfAVLws@w zn1Y>#d64NF8_LIuk12#C&@V9D_kon&qexv@rkE1d*x1IqMelEdg-?Jm=$Pr#_~q-7 z=KD2E(G4`7o}t2j9Vu`Rrio8l6yHn=MQ3kl$yd*Inx^et>VjJsmm1X_($`KLq9z`4`*3 zvXmPaXC>z;brws6U90C17aQ)WkE$TMVLSH@P3b8Q`#OX;EeO1q#E$xcgtObO3dkd_ z_t^*$;oR!Y=3|@3>B9Pu5zyq0VFqBVF-|?`F+5cP$2X8X6oY#l<-GB9OoZd+4a+-S z>YXWakZaBek55hx#DIMa&=6E;Pz{v@<4g4mqDy3NJ#;?1EhQR zmPPBa3W>AR&9l-Q3cSW@qwSx~0z{*&H$P0OOWJ~?IWqmFL4;sK+byY;*OFYi*KqBk zyPA!hUJ0rXb9$d*Q@yTqOw7$qNa&g!zw^zmZvLr_GAav6tRSlqQ~3Oz@c^}ZFRsi> zg6i~F(B2Gzua@Cqx90BAYT4@hwyT36y$BXogSOzJZ{JQ-51yYYqtaZjH3`hGD| z+Njv(R)5w1t5%Oczp>cYo{OMK0xRq~9A0-=lryNf1@GP&rF-Mx;2eFvE1UrxllSNK zj#>Mr?QSOiy&=`(n#9}!RYf87BF!?&?M7Rlo#evO(vg-EOv{y3ekjDiMxE63QMXlc zaPW3zuSuJxua^#R(hCCb=3YYk%b@p@+kncw>a(~?4&gN|d5zH@JF^5p7L=sMroCjR z2MJJBR*p77w{&1YJ^`CruKc%3_}1}>)pW1;&-L~7?PDq7^VwihiZ?6B&3*cDKPib6 z+C!T@M`YyTWbUp=Ke(#`y;J9V5+drQm^u=OR-(wwe@M1PCSU4>Mj(ypmj^)Wqs5!+ zuf^4ub|`)@XX|F>$V5ASoZUwVu9>auJnArQnU7^%RnAsa+INjmOH$z8+Ckh~FikM} zu8G$Wx;aFZGkcrJ^OXVB{dyP&^RE z=t;D5PIyg2Gx^@UtiN>1fY`X3y(mx0g;y}s@yo+Vcc#0%gH(Nwf~Ycp_6GfxS}w|H z?(Nx8+1bF)_E2Xad{+^oaH7tUP6n}&flaS?WyQ+-7&A?2-vEUGDC@st2~9AT0Q}4` zc?+~%$Y}eQeg|L9CpFJ`1cF#REZTtUW$9K2dKS_xxY0Q;_5;FRw#GUu#LT~J{gC$6_ z9*||?oO_YcGBr=1P!JT8Cq%>inrn*Hb;!ngEYvp>(7W#HC z*fO7JmYjW-@Gx0!d0HPEYfqHWtvY$rz*8_y+4~y~3X#U((IO)>h|5f6d;@IJh{<6& zKP!9yAvqD3A|TELL!UZY%jJQbBtiEI#9P)fT?X8=)5pV{29FyXO%!A3mE|#WG6*x^ zHW;t`9v&L3d5icyK||4IkDMvo4xJ=ZuP|AuRh5-X9b~p@CMH?oygx63VZOrmQSQ-^MDN#p8^}}> zn6gM}yG~mdDz`r-3^X+OcvnvrGb!85RXbB114)`1JDi`55^gE!?E&RR5GLg;+FVasGQ6 zpS1r8dn$koIFwj_UaTuBI&9=_JtRn@8(gLEfK3F$6k^br)g<&Q1_Eb(|J1CP%{N<;-A~33t2Lbc^|i_xkxoR)!eYfjMkSO=aZ_u<*vm$J^)QJ$!&bH6Sz!3ky}K z*?&(+fRPIr_9Q^^yqbY}MggM7jjg8n;GrZ26msrstTAscBrenoBbp`A}!c5+QKF_<~7yt zk4+_oj-h&E_ej7E04*+VQ4z6rxN8{$J63&0GYr%L*=?g1uDlrlD6k za}ViacjV>bv{LWtD-V|WP;)Wh8-y1m3K{PvuFID%Bg}7f^mQ zVJ&!v@<;RWhUz^+5bZNcVL%5;MfPKNJ0te-Wa$b~?<86b#>{zBU~lk6EncYUk-IQG z=XC3bIXv7T??z)1VC`~8N_6wwyyhP9`Tap^a|$;8O&QwjH>z)5rmt?*$l^J{x^G2=NL$39)b^t^ZI) z07jtM5n_R{IC%k z3kbU^$3+EXGNQ0h7UWM$3ei>Cm=J4s&2kD1Z4klBkK#(8<{Y`1pUq~Q74Z>j=-VqV zgmm9_Vb1*>zJ4c76Z%ysQ0T)@Cj9i7Ek^dUKIL>Od|bp$Wj#^5On!;};!je!YEAKB?)`iPl1ny5Ufj@&=2|zDvIcXc+SguHx5+TeLq!xvsz@;xwZVLVI8QLE(8FF3cDq*k ziN+&T!Km5)X=hC4k9wF9i#NN%Uw{4KDa~*vR_IN(5h&wyGEgfI>PuWsooAP znu3lE%Eyc|O~cZB!LOcRR-~%Vo!FFahY)JKQiD3uC1Uba7E@ffk}MZ*NBGeOgcjQC z!Amgu)%>!Ry7it)i198e(g2KTh^lL8*`F;Fqo%CPvBoDIlbRaRxOepSB^GM7%`B<# z-o?VYyWB>ey1be1MzaP`MVSN%6szi9$1Z$b{d+K&^Woh?*3)D~>C#V6aBgNVa#^dZ z$Kkj2L68j&2>Y#ly8fDvmIS|h-KFTSzll0XE9#f9Sj?A~qPG~*ZV;gQcs~1pWk9FK zCiT%@m`D=QP`$wlw&{#?fDNbH#>9ZZP`H0}hS1-$dOc}pf_qS#Rk`-Az;6FrtdUR$Ow*EaAOq5(o6n^D)$+?Aictb-s zqUBYAHELUpn%TF?Ll=#4nHRjv77y%UX`78QPKvhNKOy%=UN)x zJItm=LEk{Em&p&TRi4B;4xQ`tK_*-fx0^7G|EwTzibzv01Lhc**gL8IG~F~mhdZkk zU)=XG!vH@^s`>j#>vLvY&lrk}=hd{d@t_Aj=rG=gY)a>b9j99Iqv_LL{>w8lo(d5MdR(88G=r zFR$o}wvT;ot=wpw7rkyB-QoL|cFIIM9&v}j^dGpQ3hrIkSetx<7y_|KD9a|y%p4Np zd(?I4HQ9NM&IsGcov=v22Mfl0$l=exwBeBR%X?JIzh`UVdv$aPONez*!th|uIWfk2 z3?tds8OTG6ghe5o2JJM2gqj^Kv+zgN;)M_j{&{V`%uvr0fzAT;2}ao;fx12G zplnB&rQ0fr4LH_%qxXi-_L(N=phDLeiCqp)Y`uFX->Rd-oz|c~3-MJU2bU-c}p!R@LXqJb)p7 z3(%xN1zoCp8Pk;wv+dwk;N6E&WVPL$^su_r+kD~Oy$ugbqoa5AO|IDtsyQoXFv92& zaX6Bq%?KzW>t*H4+?r;!ZU;Ug$@Tj1w1>ytDpzi~#?!*v(eVQqRY)u^&0zsTBE}1- zw8lJ;85k;1RhNDj@XvdGfrGK9p!;zS#a!vU2@}WV<;no*3QJ1V!8oK7^j&u*(qme? z%yjho&5DOdS~HQ?-(UwFXjhkvC~1|9VRg+nwce0V>4qK#-pZBRD7124rSH<$d9dPw2O#X<7KBiP=hbZw zgRArJ(@%7e*3W7AO@twPv11Cyx35CP;MgyG|8Tz5FGjWa|LN&L%PR0e6-XyP*3isy|FP=b z6uXzFt1YK;QWVZ=flQyp7inX>cS1MX)jzX)7&We?X;uIi0J9CM_V!kWzQ92nv`94R zPQ`W9777mZgtrq;*NGkbe41{L5-ooVFZmC;?Lf$%_<*(6VV%gKUaor%@hMcuK27@6 z{#@$^4hajF7Pajpt^2dPUB9xQ-l|7t@QRA$%A2HCvIp6l9|mLMpXY5ZVnw7s6oTpT z0${4+aInYw$8x0qG~t{I5~+K2r5kSyI2>M0Vs+Ja&z0k&hQU?vsUUV0nC$@?0}!S0 zE9^*<-$jvsrQuXaPGG$I`&kc%JBxDB$b3N%m5&yTsAj_Si6w>iZvU-P!W$sc)NPXK zX=GjCqyaxxTi}(#;^HAtF;yxq22s3Wtk`GKo=i1iyJk5L@Ne^bb+4$KSh=-SYQKTA zq^B8)3i#$SddmhFRMq$$s~Z`veh(703)Xv5I{_yjWT?BYmX_TZp2w<)u>+=`rl$+A zOcq@m?tiEdwVrtm5QsKHv$UfBV55DBgtbO5K*9mAu)g|-UK-QH5h{m`yKCI!QuE-y zV`Bk7AcCBE$u%l#G=UoGGL0T(jciBQSeUOUgXg+hx0t3116zLH)4w}-oM5I5 zU~DSErNh7{FV2m@tY&$RHQ57jN-|u#*tvPo17yeQUN_YAe~UZ!*I4;U_Wql0SXVy- zNeAgIuTTeMJq|?HahH$_m)eA&MwT#}Pg#o;Ft@k#j@~RGRggM#uSZ~?X ztcmMwIwO%tNFvSudScH3RUxY+LHarY-v86F0k z-3zI{Fzzt$hG(i)@gAcLz`S~3*PMG;YE0j8nqDr-^Xxm!&}*L+h!XbmZlASBe77)} zjZC(^#x9;>*<`FXQ%x!qE2Ps&GL@35A&Flm=v38Z8eF7$FGL)g<6Uc0VBJ->7+z^$ zGQN$uBo*cGl=>bhqk=?n4sr20Lim%qP}cxNK+5DR9sPPCASSQSYU&(f3-MZT{7O{K z@@6Jf4K3Rp95GAy4~iWR*4)AU^+W;RT08!Wy-!Tg+LNl9&4&K@_^zM&A77P2?*aB& z#B$I^sspDkb9G81(|xUo)WnOnp~2KS?8zhM!PvZtLbjnUwch-HzOZ;qQKhNLRcfkZ zwNMIqcD?VF)3jBayCGI;^g@r04#?$heI5G2O_5)gmKtEHLED3=&+dmm2Xi2r>FmoG zCw`Xiqj4BGW8b}nq7F9VUi|wR0`RE~&M?Ke3WGn~QCYAdqc$JS*l;mngPyN+((hYTG@WD@bM@ zT$B@2&vNo>q4*#3&A=<2A2?%eyGLfY*qr`2oR{(D81F>`j{L;>iOX_;_RvchCJ$~* z<@ouIq+o@91#%7yyT}lhr7rDNm@c4SXut{^N2VcfC<-bgBp2d`gnBL=jm#V(d^%8d zFm%~#7xy+l+JBFj2;fODBg8xi???k160)DV+#QZ4a`%2ytmKMY*k-}o_3FAnO$0B> zi6{YLSztrV_eHE-gP9xp+7g-M^w}|Mf_#E5ki>1PaiF~aIy9}7?_xi$aBYKLo@s1& z>>#JiSUQj)QF7X3aP3(S`*cIg@gi?we!dd)*@)*3SWWvT7uGG%RCPaW5}H7uAZrJc z7Ey4RP4{)MqEG`DfeZv9ju(9x?D7EK^7yRpg8!pb`;J@ndn39)XTQYP3=ZxLku;V1 zbo`vBNx1IZ3&dW}%iJ>%c!i7`Xv4Vm^6^rNP=-I_MgGmD92|V{IiPL(f7=n{7E3E+ ztn1Onq10yP+jqa{>KhmN?KCcMdF8UPK5LiL9!{wzZUO6P>9M5mJI1!iawgMt0>dk+ z<3t1dK_3Q6BQ>Irs&7SKWn@(=>n++)l8&+{OW|N8jZwsp&^#S;44T-4j@)%a&w8pc z@z*WXHfYvY|JOE#mS}7LGXEvUjGBAwNESlILjW{D7a2_vvH1KRGEB&rC=Y$lDvUXT zQ-R@wCys|F?d3a(xs6pZbEMfd?0!Rz&x8|l}4#v0cbI|+v1*Nf-iThzx8ga zYg~M|EeA@n#P;64%UF|gl}w0kJP1_XbJ$a_hN(haB8+SV66Bg0RLzbOk8eHn07>;{ zHC@?qw-ZC#(<6U8R$ix}nWx}n{^KLUG=lw*5}CgrHSjDcEGpWA4-Bwa87jcux5iXI zMrtr37QyuVW|r08DGb-<9SWcete`VHf)8wZmlYxG(Py&Ra^`cgd3I{+%Qh?#O1uoC z|76>4VIqH92TCWPRl3#LN5+a#VL{D)){A}&93CDf<3r=Q{@t?kIg1CcJ{0oq3aUmb83b^0S>Mq2Tij{0MXT_4EFZzNU*9!f>#$GCisj8=1GZZQ6@R znz@Y|A+iXD{C}u>^KdNRwr%uA8qHLanUs`BA~MfKWeg!x6v-?zO{R<~Q$>b^3{ezi zib6`GA<7VykfBTw)_&@F-|yYNZEfFL|ExdOz4iQ_%H4fm*Lj`iG3>{F?8g*g4dXA{ zaykP6w?8=jaW~=H`+~F!-4bP@{PgP8g;kD+6&4$d{84O2= z6uv<_i>Ow`Ot;?@+Rn8Y_m2mYrvFj*zeEL#3au&qJi`yG7YazrHJG^3c_HB=|2qok zu84+J)!|-|x6OM@Jl5>n(q)k*!0dcFwzYNNKwxuO>Fr9DYnN#Ac5b&FeL&}aWes#u z5>dd;`2EDw(~VaD_cMu~Uk{jBO@B0Sy z{R6}l0t!s-+oc68p}H}JhFwJx#GoM^EL70@G7!a-2BF8Bl+8+gr-rObnZs4DY6==y z$WN|~`>#^jXlvT=y*16uG3CZwtpubd#27t=& zPbRPAx{Tw(tdBj6lxCYUFlsiePc)?5ldAI&_U=#yo#CAqJrGJX6gt2Rxs{jLR~b@j z#$){ll7P7CBGMo&4bgJb#)J!eh0p{^Pbhk|bBu~C6WV9V1^ za&u`kP4C@edQ7lk(_5dyFD&IE?`F;^ywCH}p+EABjf$e)IPN{~8FS*_QF=oi&X_=Nt?Yx8*h^-$ z%CwBKW_G;Nh3!Bp0KBK55J%b&%F4=IE9EJ?Q;2#aow`n)dRS7ThY|&nIGQpkNy*%@ zGOz0Iq|vuEXz_c{(5|3Aml+iPjxTTz|Nb-3C2&<_hppkH!NEOJFSG(R(_Dsr<;R8*>PcM;W$8&fPm~1~paR!IC z$V61Xg7+WGYMLCP4X*Sa7HU>-jE+5e7h(?g9@KgCokTjOFJCW zCHIZ-PE*<5O}mx?&_#hZs72XXuGXW`^%Ry$Tv%>RkR#ofJ>;1pALAtd0;3NuZgG6($x(qb%0 zSvPl=nP<5ficP;5Sh!`QGmZ5#W%iyqa`E!CuDPVbYA0xVA#PJTKKCxs18q(}CGxxX=mbn$ zKK|h>n!R;P{rWC#B(M(-TPBbYPY8*e{QBbB!n)lEbDKZ)tNadHnh6r&ju}Q>a4^`5 z=p+R6Z|-3?q-W>anta6nd-Ot}veXm#%DU#+6^l}z zzuOD)aCONM7iit?2(x{5%C9|K*T*^Hnn6x zaK3$(>$_&lXjF^e{6Vwq11}ETe#e5IG&Mh)p{RzdVOy_i3fY>Jowh%%f9v*4(Qe8B zBe6V01`qt>Q2DvHF+)T(=D&IFqmTL-NUfL@fk_{(ZfVdf$#%MZ9*fXC;U4!!Au+RJ zrCzg^5WqN{LvDjUYFnE0O~kFLFRl88$gD)B^V&&AuGYU-GjSRc9zQ7wqAD95J>xl+ z5?BYJlKjW1hj1E1U2fm2)D)?ZV`|h(saE}iH#vi z{lZL75o6G79lUm+q~$yj+9AalQlCPpMrz1%Pa4ly1^gBwC-O zbJKD^*|pQ@;1$3P-_3cCYJKyyMi2|0)w95~D`f@Ing&1P!oDV{OaYtaQQmevJMJ3ezdXz~8G zlzd?Az1QwnY-VqzS_4otv^uwa-FYw&lIicKC33Y$Zr3JR>g$Rt-^;LFCVym-QY@?h*|H^&_2-N zL}WiJrJj0mOg4O%su1O{X94x^4UJ+tD2|?jtQ*0Qh#*;%x`g?1)A(<)cXvMgltID+ z$K&%UM5>0!xL$bxSOaEqSt#b4RCRLS_WRAM7EJZUPS9M;FBFAcx;k>2r_Be?>J;y- zydSHY70y;c`LwmIjikzJ6qfk!b*TnA9SA5oyfrSCHKr*VXHy0JArRMSDqhJjEIRIM z*gKV1_(=0-Tuvu64f8+jVz8Q9_|>M9&^ML+#3?fJ>@R~q_OCwL&-x=2C3OunQ~m5H zRtc|P+}J|;)x{tmuuq7c&H*iwz9YpAll82JPokQ3C5ur0?QeP}5MkPHVw=yQ*@f8&52-{qqdgS#=&IA~k zhG5>eBbrTYv{~>>a3`~yV_if3O4v6`d3L_hU=JbPD-e?d1}`Zk)m+vPwEhIHj<+2| z##k@{2&b47K1nn1O{m)?iwX}%Wl44ZZ=C;X^^grKCSD~8ySLxSdR+eb3>K5L38BRk zdXom;oEy(mg*ax(scHP4dpTe&2jDq_H>bo>acBBHQ=N9A8ww%2!xtevo`Sc(c%;)uxXAhJHFE0q7BROUnO&LKiI)H6RT zQgro~?V{Jt{<_LHvpM8#&*cYbdqc$q(B`Iwwda`GpAS2!7QJ4>wm%urc7`&+ffIB@+$fq3))@F&G3NHV{#3(QOFpBXIA^g z2j5;JM%c7S8q(H>if=orluqsb{Z7_S1ViY>LNJ8PD7U;kIhc*z9+4?j!1Bfh{hhzg z?O&}{`H$#!!@I8WmE}2q{cHqQiSM{G>X;$Fbm9e@PV#OwbRQ5wlF?B+Dk5fLsX$B$ z5qti@B1W}|yXbr;!>HH$MzJ> z7ssUb-BHoi`bSQ?NJW=;Y&7D4kK=GiWv73|KjsdxPYEZ4+18R@EaBVmD_PsFLX~{G zGAu50Wo6~EEr9Yt9#RgTzrCvrk0y5W`8P6zG#8w|r163-Yu664V9ORkhP752jfTd1 zFzPr17wn$2nwhDUZ{&vUG)m{B` zrb*0JBeNt^7pY&5tX&MR+iTe|+UtHH*Txn+vZ~&=-`I4;|M3~&@6rxh8jxypy4KWm#rxKR2woK;1PR#WI0?nK#ybjN>%9 za*f^Q_yJr2g>?pE?!7_(F z4z?s&g|F@r(IHmsq<{^d!5}lptH#farmed$U41S|YS+a?h29NI7-DDD;!*$r)=WdG z1*kP)iVwBy zQSvVU;0L87a1wC(&}6(GA{H?XYdnG%#3}=68IMa3?Ae5ajXFMA!7mfD(nrAxhN2A0 z^Q-Eu#s4fUQgwML*mbx?OK6ue&#CuRVxoY7x!zLVS=p~SafXnG$Rs*8g zk_4dmMDvD9^!O~qoDEvteb4FwT;|NaMZz=kz82!)cG@H^HeXY7BIMI`{Wqn<32VcR zchznyNxhR@=$sO1Rd{~X>oH=C9WXYh&=Wqka|JQQ6r9%eL<(~X6vlwGpF|U3)qXEd zjSwrbA_0mmbDc*MvUGH8#ti+%lLz@?7(z>idpLAlJ;}dc?jEXvj^cYFK%~iv-YM$e z3~_gFS!(|r;Wq6-k3D>hZwxtTjeZCfdP|x`n?0aP$tFRkUxlDW*0b|oXbaCH9TjAR z5YKBzd<4os@)fV;T>#=KHAuCn%nzjPJ7&k5lrSA2p9XQR+|*REcUAgaq<6NHw+4qt zLcKb8%~Nx|?LCnuZj2=-Eo9gbcXdDUA#zP%tSYC!d1MAPU*REcLHOoP=i8^VCldM1~d2@|7nMc7(V@7-FKZVNoW3N5-EjKn^V35&- zLa8BoXi=R9Os%GgCJD4Dk?W523IXrEFvGh1;DN8AA_u$vrsrCwWJBo5(859#{p1Xx zklH5yg<5?~gGnoi2^HG}*q?`gzz=ikt zO`j$l>^2koo08G%X=(=1c|sR+mX1DYw^=r73L)(xbz*{DMkSf%P0`ac(VM+$ynFjs zIyux+eXDBNd?mu`vtW~})|zIccO|x6(IdqnSxpy>7l}qvjW;gj9-&SD9|d`q1xcZ? z`VMN4Q|XKWnnW_SMQ+B7Y**3?E-}7~65Qv0MQdO9Y)5Bo)=9xFQ`&p7v&8G4(-==k z*AnHkU{`xYAGR_7Q<-O{@jXQ#vPCe)+}^$Clwzuf3mk-)I%^=-p{|B*UbDMpv>a{F*=hT7!^NDdY)Ka@Fv zVSiv*)bjfd=np~0l!GZ!9tgGR6Yq)G_K83KP*+`u0rys4Z^?Lk)&F^Y8|lvL(slj6 zrN(Q`J>6J!3oT7r*e^4aWY7iSv=Y@R6$M}_yZ^lYw|gi+9sM_2c&9^C#{-iI@<4vk z;B+N*ppVrxdguk$em|nHNMvyd&IUaPC88rq4&w4MriXH;=@3?aq5{PGFq&iv1B ze=#hdDEx`Y$P#0O7w;Go?9uY8QFdA6oc#X(7jI2^gD`v&GJ`5ee3C_J|J}vDiPRWS49^t8botqC^M4OPlNFcDuDpli6UZ?+j3Kc$OL_=Rc zo+VuMpC%>pPIdB0RuJnac^8pV{TFRg*HA&^UG~4PAW8N;t>rAC87@K65<%_#7KJ5$ zl5?N|3alikO#uZ?7G-YKB8mosgGWqEO#W+k3M>3Bqx* zC`rGe;XbxX-j|YrQGk{D z0nLn7)G^2;m4)dWA_&k`R8*FnfYzKUV%59^j`{(j+X(ezXZnhuv#)i(aW0=WURiSM z2#<)c(DIlUE?FBxe40C?*bQ4dpT<1qjo3N*I{Yzdt@`YcO0gMT2)dZQ0ehTX%$4wbC>lD+m1Qk zt~9dT4>XO8vY@-W?DTn?nQ&9KyUTkl9MLz3#-vjP>C3%+Ki~J?2Z^&$@gxwtWl=yF z`yWt6EC)M)NWf#}1EbGP6n;iWM;DK6V>|Gpnnp7eK)YA%Hpr53=wOTn9UCPn!Owk{!$S_xrEquTNWiTHfi)5@|K)>L6@#zL~?w z_GP_BG#%;xS1oStAtW^*kVeJ@)j8Ca?5MW@Xiv zEz8sQ6WPZhNYdZO*~*8Ap&^k6CS~%&5L`c1w7&5{VWH>(@TE6s%qTdyC*_A5#qw!J zC_zVd6G34YOER8;$TE^fRx*NU)rcSH2~(u63}~@Z=kOz#3P2JW=>F41@F(*nOyGgr z*B6Vl$!Li=kurATCsc|mzC?(8zz&A)5s_sl@>WFOWZLvx_!lUuy@lx`3Ts3~nZ`l@ zc9$axbf#_Zmyt=vP0{_*$)eQr4*~QpR4>gek?JQYVaN=`st9U1SN+LGRI31uF;k+b z0$l4#-vRwGa)=RAEsy;`_IEtHS&2J&_lXE%ropx+$-p74>tDZqm4W<9sNAkylz|Ia z59}!03L;cHz~_s74|4MlDENmik2b)beh(7Kb}i)WZCet}GP=$@)&c47h08SxLsn&_ zIWCIFqmeIk5Ca7Uyf5XOGg#YB>&KWR&7SR(v&K~TM$#3JdAuCx?{ zc}J~27il1<9~Wt#QwHRg{k84d_|GRc0lNpq7iLvim-jOIMt^|XPzm&m>~`CK?tJ$p z?o5*ma94@4KY8Zp(fTPTng6fv?@Ibm@F%_F$BSH~cW6aCvnHigA0M9=MXceflc5TK zmB?0K;dVxgCPRQ@5@UiKB*ymuEy&sM)j_3sXBk98X3;N$PK z3z$V#fO8@FwH<>2Ov~MF0|Zj{=!ULcKIw>j6Od@;7LIPropOl1=b%NKL;U-Dq)X*J z)1+I8C@&BRtyKSCXo$?jF{-SVI=YSR-6s1R=^zq9a?9eK`)j#7P+lT@o^Z6cmeSOu zewpxI4uBN7iIXCNo3NTbTwWbkh}#;qAnH*8J-+*ScMa%tr3#Qgx3j7tHwhcKLN7S;&KB=1k2#+a0L-_+Xx5)b~_ml&{19{!k#1?HtY}OGg6L!sMssp+S-=oqJ#I> zZ~eIAoF%2ls=y#7stQS$=@Bi7A zv%vhZ5t_;l`N+wqIX4E7;TC5e|14W`&61cDf(=D6{sRIFT|zo3L^2x4IHR;wvUVN}A8BMSNJke4 zLS4-MD(hZaoVknR8Y4fKL%3^lfHyizPFx0oY3KWq%`W4pb>xzt%S|WAPZ!5TeNAKJ zjlrj!SdP#K_;CG}U0ygOyFty|&bAh`@X?1FUtPc-aX`g_V3ULwoyVOSSY55aseKK; z1@P&X_$H+bZ~rxa&L}XfpeDKp`6l;Qaz2FKBL;U25v&7lK~QVC|G29xdf&GstM>bT z-L1wugmRsesxj|_E^{gAbIcz(TFV{4Ndb})5!L0W;@4{TNa{uoRQLm{gAAnL!(n3y zJB!>Xz9>nD{e;yU_>R7v)7VEBfdpVtAu17v#C8@zLJ z7iQzh4CmkXAi*_>wU!nU=}ir{&+M8Wn3uN*`z`PAG&~4VB`1dj0?JFuhX^?t zz|<-tLI8xL_>gqp3K%ebsDQxdnZIyY6`Qu4f&IG==$F$X-Y47U2Rw3ozcj*n;(}nK zP%K&=EJyASl%%vDdgs>ELg!XWib$c6v5Ye&uH8_woF4g@BITTlcuLZ#b58*55a+a6 z=AE=a-xm%z5AF~bMfDz!Uc+M)W?gQe3Y&`TVwKS}`GC3Lpkb7V9#}t%pt1OkBl{kc z%Jyc+P+3avJ@YAt5KTLd8<5P>Mh)5BI6z}_Vz8!qAZ&A%40>TU+U(_jZ!-7!dhJ4Crwo9> zg}L_X7R3`a^>0v8CNz6I3q<%d(`b!f>`q6IvP#(m(bOPJPhzbHF|3Aboc1F6voXQ+ zkix>`)k_&riy`bp>T`+*I%$H<#v!MD5z%g@8$OJe6Q%jeCE2exv#HS$#~Om`9a*~_98nn?NAuArWaS(=Tx z+9J$Bx6-r2DwMwB*M7>t{gZq0a5&D?B8a}$lL3p^}zb+Lk;7HjDOhc}Ei{SV<=Q*+RW)GS6vMu;MyBQ*g}K-@pD|6h3|E55+T45598 z(1rn>uNrZOX+Ua?g?^Gh+iQkSQKEyPyy~H183cIaG%=|q6r??HYlfiqW2mdEo863U ztQbw=6r?pck{P;S*<%g^USBlq6x zMce>cVsMOKq@*TdrE&7QV@0}Y*vpM~5G^J*V-HoCNx%5f+_A%Bo5U1dBt!I|$yU0q=(M=(7o^o~A zhX{vWukz+4RbL5n>gT#>)+I9ZB#;D6=0A6Uu^#J)O!u~`u z@f-il*V6=AG9;{Vj}ED%&LLJJJz--KuQ61HD8uYF;1fe0SqN+4H#5FlM?aLyD~VWe z^2oDK+2y<_meA3M?34l6v~6@Vt4d7Ho;{m=P;sSTyw-9`P4+CB%1*rE_s3!-B@vBa zF#bVQfd~DBM?!ZQK^_1X@<@hI-v#DGGo6U^fec9{IK#Vl?_RPcE7RRv_5ApLZj2Ht z`WqMoeYcg^ex&b~$iQR%!2kp(5YO&F2QDoFzaNP0=nkUvYvDhkMs^btvQ771i_wvK z3h8NN*f$V+W0Qjg=rTBE63=L3sdnyMs;-ocxm;qlv})1EuH&rIM>bVvT2)mhCaM|Q znSxI*9`wKc@ZiItglpNS$~u}h=-kiD-E!hYuJDkO&NEuImseF|ZiTJ0Y!vFENc^6! z*`cS#54t=qtNltnTML1nu(kHj98k8 zDqbJ_XLVA;QdDyd_;>E4U$bV-BbPpE!kQ`T`uH*3{&i|tWaOSlYb0*mxG@>Hn!+F8 z^|Mn_NPUg4uyA8b%ky9=nn~YC2Y$R90<|ND!jYb!RK0N)4#;J!Th1R*;_7wlR4gpG z(a>@}PCz3=C6vKBR7*VzBTEdqQf}Tfw|QJtvTL#Xe1EUs z(42lWd!3}&nKPmYM>b9lx5qTOk#EbB5>lV40W9?P@mc3j6`t$l<>eo_eO(JTOtqgg zXcACZJ@(B62$>O_!kc7n>xD-~(g_L*^6uNW3GG=9T_`;^6|d3>z5U0fSKC(g)(q4adAaK5g{ohC4$N7 zcie&7<1;hglQL9gzAP@xOZ)s1M9!VOT439?12<&PGVI&8Z?Nm(uC3q64QDibk@Axp z?^#;hh`=crq3UQ)^>G`&`RSjo!)-g6`2|$Y;{VAV3Jb5Z-qBS$nf$P$9br;3Ooa!4W~3@?t5a9z10 zMn)m%z-TRBsJ*c26+8VV87#-ZfGxhK7mi1=%+JS%Pez7=kB?7GLV}e~c>=4MiTRG! zp-Q$ND$b5YkBpqwysh^HKw{pMmX?;7lvHSSb#>TVT@_n9yNs-?6*YCQQ!z_dT1LiU zl(roxgB_nUnKngf+SKymK@IKd6F&f;bfdpS1jZ?Df<78lB|F&yUZdZ-oJM zE%u(k`2tftpgEjx-@Y||;w_Gp`eInv>db=?2X5;HIA-B zsr$o`E{8F#m#qJI-(K9hezmucPx`G}l$yHhHRv!{3I867JriYq5QhW11}m)sYx2D1 z*v?(M7{L{%8yOkt?d=UF#P8?liki_D_ZAZ09Ung`F|BAFyJf1bz7k+YG>%N|yLT+z z-QC`3et{=UpO_8D0!MO*U=L$(s5lb96)RVM!Dd}a*~Ydu>-KFcMC;N4b9<1Q2)kX) zih*8OZ8`7@SKYskcvU_{;V%f0A-CkoLx;Vty*-}GI4U|7Y}z=`fbFbK8@v5v2=Fsxn(my`QrjG z2P?2$B+JMo^~M)3l>Pnp<02;DXlxLXg+)ab{PxFY3JVWc($=PfdY75aJiPs_BiqK2 zkdR}Z*Q24OwMHKEfL1;`L{3diLwydn_w+}5*WcfCp1`H#ow*<`E`DVDH4p}kOC8p$ z$8hgF6PtC^&CSi_OZ^%_A)&kqaU%&yNwt~L&)CROfE-GO`<5EShr%W=n29#vM&DKk z1>wnsb1}$$!Ffv(v!Whw^NGqjDS1hmiZYAg^5ckMPCcN%91$^&5Wsq%G49^|`;Nc< z=;`ab_SR4dZrK8dGfD}Ds3#{b`xyq4tvGvj#x&--LXbSAckpdy>6xNKDMpSxRdR(E zl@Z89B*YKkezL5H$wOs;71Wsf8 zjptrCj;d;EeEauv8W|b!tL8k$Mw0GhiQ@*+7ZwwvL2j0ft$y=<8EdfaON}Dhwup){ zAd`4|k`7BQ?J>xNm7)*NIwf%6rhEVg0|P@|7D`v_VicC}6<`e3qKP4eqwoNL2=#{J zTZs7xO=53Vs;#ZXGGEIxwM6(h*m`&4lP6E^S=Lg=WeNnuU%!4CvlqS~-jx&@+AS`w z^zh7Q7%Y0+jSwSu-@w2{0OrOfCKJuu;<)v;U(-Br;OT!1aFoGnz5Ww+cGhFvl~acz zkY$@a@z(8U-A%=)u<`x-_kI2S@3Vf}+S}KC{Al8IGdz3^Cl^=T&6}UI+!Y{NPM;RE zxbLnSITH_p!*#hlCcdZ*eEXJ{fWP;_xEQGs7R@Q4#OAmwSI%F&xFRb%yKR<#Xk;W3 z#(Q$`EzRD&d->IJyQ==(qwd;IxD+yDyi$2es?Rs+#JZ?OH6Uhcrg zeR+w0|N0wx4))lWU(*y^y>_j#hsPcnuaU+j{V7{(YidVF$KpEP3?ZPFPhnBwl9R&& z7v@|~M#=!U@5RoRv@<-q{aQ|bzN(4ICJ{=D^sH}g!L$024~k*?IFtHgA~ z*m$tZj^XI;yp$KgLT&`n=hL>Q4 zA5~O12tKb0n9qRk?|9^D6aQL6RW(E<{m334O?H0YFx(x$oi%nkj{@4lKZETu4I%>+w)S~7U2K@)`#K*Jp3kbm7zU@u+UUTo^LwlCwMnx>< zDu@oRTS?Dx5x{)}SM;GH+t|Fvd#Qf?{v8(|f8k)FD6|o&cPGXd7D`?Wd;HKt04rL z07Zsx>(*5u1u9`5Z8hPSg!UA%&cun#&y3x5VqHOHUg4pHC;IpA-`PufYotZ_;;e*4 zMW5ptyuELKcy?|M74;Z!PuVtX$bgrD_1_r|N5*vOGU41A+S;Mm>NxNn^sL#QV z-wIk8B#njIo0e!$jyz-=E33yaIboF~lPj}wvsBp5F@xjE_YQGV;zt>+j0qO2So zOdX&8ewzkynY1KJ^v|hd5wWf&MML`Gs?-V!3Q<7`2+h)AnYV$f*7yeiPBdB`GjNM= z8|Q0&smF2hCpso@EpWP}ePeLY#{X*)V zM*#7do~VU%B@GV`53V+heZ8a8*FVzP?D9!D=E3Ys;X)=9oJQaYMw^kMhe_g;kp5u zf-D_fU3XbhQJV{{tds)-C*9QE*_ja)o6>#&`mTRxT{}8Eu`4sQ#6M)?*1X3mXYK(| zrR0>lJ*epV3-8nS<410>V^>#KCVn1!;5NtI4e($r>-?CQPBGwEHgzR3uoOLd+nN`jUVI*Nzh$WqnMO5z9nC$Q)^9pP1r7Uv3r+z=stcVemsPtFp2(hk?@Epm%Di zq4x$hwp%$ltBEH@aKC%^Zr;_@oe!O3U}`zEUJygnhuhFRc<_R9dho-CQb4&^FfuZd z=X{>G7ssVT?WwQG?xMCxX$_aPB|U*4yP=@OwxS!@7GYiep9nYTXrna29fEhP?} z2&1DBztlG}GjCdZNxAm5BtN~Ck(vt1yzRZN@+*`S0W(ESk&rbN{&J-2;o;IAV54G= zZTStUMY$5suXrOaJk$Lo9L^JoMWK3WY-y>a@8lrKelQg~jP3TsTicC#{0=wZaW}CF zX$R}&=Ie5$8*C>o_v%%)mr3F@2p)8*Fk({C!2tuH-Z61-L?Gl*5sGh39?1`6+qm&= zOR?X~8IPe4Yp_WqTY?7P@Lf$vu&xhd#s*%_2qy=1={TjCV4h2jyaN~ie1{2az=!mG z`EuUp_qV>@+6yELqVOsx@SGj%R)e*LH0&iD*eBpYG~zj*mU1rk82z+~C+M$u$^HA{ zfV%g4k5ll81bvp2&(2ZhKZks>dOr(uoD#IJd`EN)`STQn)FrdVU<2fT5E6Q_&L=6PhFbmq#OCr>z$!7OKV zn15*V7|#~D1cK<7jPlImm-oayYDty5yoOasQ8cmrw2dI)>4t0!_X`|t_=z(B;eqjJSjOD=U2(8^77?_Q8uth7m+$<=I7H1s7KZWE&fhZmv>({`uS3-jjJP1 zk7IaP%5l$_P5cfri={bR5CdI^kJrE1b@Rpz2d?96lxQ9W1`6_r#Li#w24h7!fZpo> z48x&CVFP_ZF-pVO*!brB5*~taiR~KL$lm^bbjZw7;Ko~hZ@fw`a~;c5xCOiP<;$0Q zK}&%E*r;%$((d2rV2?kvSe-c&{pQUP1P;Y{%B$d=tB2<2J{8-ndLGRsVwWSMlWTx! zx3}W%Ru z7rv_5FY5}9A8p6uzyYj9FZ#$4I&QLP^|}jH&0`{}I!JUAy#4(85mi3N2v;jG;mdv^ zS?ze@<6dC?jdJU7nmp4ADulH_P4suR-=3q_?TX)p0s+msjiU7^r~#vk247+Y4(@X_ zhdCP5P-@W1E(U}51S~gpd4FkZ8yj%|PB#>SxM93ZqYS%-Bu33W{fM!)X^1wQ=PEt* zekJgR)%5gVJM3j5gH8_KnX8hgRjRqThSg>0gYeB9J0x{hgBS1p#B&>Ejdo~occO0@iUZ*h#=-01by+cE$!|raLo`@T0;Q~M8sk^(m zIdJw54Xp+6jVSr)+qcXF#KErl^y!ns(xpwj$c)Gj5Z_^)Q>&`lS>Om;v=3)((vEa! z!nooIG!50Zw{L{!#P;H%?9UejR3`!yVH`%F&36P(aAoh3U45a&hAzZsh??zsaqd@9 z$gYENtpk)bL8Qn!mQbQo1D;_KFa;?M6yKS6cw(@3tRcPjisNy%q{pYnfWKh-Sa5>F zqN76+6F0`6Q8m@;X}6z}N9T7PP-w&O+Ul)auU~P=-}%cTlCBqWeq>Ds?+HS`POY3Mw%<~#)fhqt%4i~peAyEikPu&~xZ6<)D% zF~{}USYOqY032`y5T^iu1^A~F(-|2Ga?+;=BgJ6JO=A}3ZP!$Y`6y4#CV_QeR1l9) zTg;LI+i5;5e&=x7bI=-F+vvIXvjaMMXP0Bz{>F9eKVb&ZsTBIazfdz!x_D}ESYI@e zd<`<{3kVw%GT-a8+MH~gLFm7hm6f&CwWh8q5P77Pot;sp$Xw>q;==cevNh*}VYWE; zxnlO+V|InbA@5hPIo# zjQ7^68;Wlc6#THypIXks^MpAW-`jeL&%fAh~$p)<$txfR@A@n@np zZ=}~zZktAkoHtvHsQUpvceh1`@Y5(JEuRFoLGlR9VaHodU${&A?~R~#nXV~(_diU zw{739S1>X)cv^jO&P<3x|^zoUU;h5TU+Zn zdRC>2hfLcZb2zN4%WS*bB+6?3fmTmfyq0a=d_z?*hTPwhqp@!I+#-T%p3ffJ|PH!STBaj^@ zc`sh-;kmo=)`_T>ZbK$SARyR}5bS|<*y_qf7L~Dp%FcHCtO8)TzXDTM`X32sM1L48 zIcjPeLEc6&u(|W~`*#`&f>&BtuLAi*;2X-@ueE8OY}@-sMe^v;_LV;w6(uj9DaG!* zg}@YkPrIO6MEvx}5?YkFPLI1D513kiS1_f9eKe0|E@-RKY5#x-mFq>X<@~0J?F!Y) zH89*LpEvj0ZEo@hj_$j`QV=8w#<6kZ#!Mfly)%9Vc+MpyB>;6}z;m4mpMP9Y!M}h1 zlO~np><9fE*7Z1EPZP@fJ#|i7NCoy72^GCBi=@rT!)3RB^?2DMOdlVeMQ2YJwyF!Sri#T%2yd*@cz#Pr=|khcXwb0#LZUoR8nP zqsNI137DTgHT4I92p>u*p^QAw0jyH(A6fK*C3|^O_F$h0|SdhD3Mjve@ehgd~%$n|;8BXU7cEjghy9R-)qNE!dtyeku%Wfs9m zlvQ0w-~3p01E7$504)lh=Q<%OByj;EDu>AMqnmRLBJd{H5~>Wln)W+ZYw78qrONrm zBE&?HmH`Y3$J!ViUv-f!E0jn@33>UfMl}NxjM`gD7Yw9AwEXD!igx%&cP4)wrrtAbmEjCUAlA69yaj1gAKM9{4R8yD&q;9rAkjvf5pic zH}PdSo+A$@hh4&s4*2XdhD+Q)IYRLuPX%y#I@}0((hin!%q;%b8uEl-(!jY~=O#}D z7H@SB@-Ntw@DF4BFaLB9rLIo*TBONyCLJb7OsI=LYqIczI|)! zQJ6(B)X#)^JR%LYKf~6s1W@a>ZIYedr)X+?yrz0_YL|ABn35#JaTJ6IOpmZyy`Y_$ z`P3@b%#iP6@m#FBb*_=RJ55l#3t{AmMn%r%OMN(nyXq9q?P}OyWuOjF$vuXPN8u>8 z$=0~iS8{sv^WCynNOdqQQ0DRZh=I4RW2F9tDm1Ea>Bp-BIq%16+WH5)>jyS<@zSMq zU_3WoYOL}^q2i-m=k4rMjeZ5H{7U#EDlQk(0_WBsSEB?2amYtnfV!_Lf{m9iU)FnX zS6z8H{YV%W^(kXiqXE7&%;;nYSy~$$B!?RW;H!PAx&25c!6xQn5H zs`Vm9aPf79_Pt)TBHDG~r4WPj^W-Ys46-eLt=qkj(h>^m8CCR*sHcy}wIOf7CM!AjmJh4Kiw2 z2>xx`!tVbXx)&SER2CD5N_7KCdPyllqN)$~B=b0KY8)OAx@-w%@Y4#2eUxsCH-J#1x zQUS1Ghp0O;)Yc(~y3Dy=aw{TS5_02^%%X`P7G*Yy^x09)#lOD~M{-E6MGErw>ESFY zkXful6-_}a42LDHZEZCiITAL>!kTFcES46*X5b%uA&Utq#dC0U=A?3D1rR(4K)3;` z5$d$pY^pefQJ#Yf;t3BApT#pfqNjHryd!_KNs!Y9vR-drAD>r}s&4^CK8!GF9t84E z1D_ih!XioSTJ$FPV3q6zQOh)p7;#kr(jXGW~c)xxP<}>sRtuY zVr-p5p&4qrt2)Zvx3bEr>KrjO-Ht`vf;DS=^=iE=9e-tggznB{X;*#}UoT*LSfl1N z{_EHI+qX|dE#Qo+g++&jHM)?D4+bg}=C33D2#v=`N1V-N7D~x5Hr!=kO>kvXc<{&x%YeX;+xfA4_w^bzPu4or6&#!Nvy_{J7CbLpQw|a z=XJ4D#LdzFnw+dh447>BUS+x3x#FETNCx#J0)SnyLMV@NmU3XAeAVAy2T|g-MiB~? z2R3Y!O62Rj@lD?SM_!}9jh5`D9Xoaq#$QfbBDfPs$xgNx-VA%o{DTJ|%mDVy2H6#4 zzd)K!1hvj!EnPX=Q>Vh0OGhhz@B(C}+q8QH(z4mb`7zh8FV<6Pz)o@nzDMvF%$@2R zPR&UL>FNzWpt$aq(4(Lwc{g`=D`)59HeI;>KAb!RjbTii;sUL4uraGJuh?Dq+JV!b z9x-DtKSkv?E-mf24G)TJhK9F`9a)%}f3PCnCa{o@(BJp!Jo{v2-Jh=Z-C=KU|MI#N zBiUU5ICTvSR)9Exef9-D0!5VFK$+_q;x)g6PQF{*p%-)va_0UexnYyk)pCR9pefpi z{8jzP5vJ6DX_M{+K7M{*#1~{MA$+fAxWp0Onqk0mo|hL61)oidO(Y;gq5o4=z-IUz zQcQu7HynPns5*&EJ+6ZK_(BBZ#56A9}PBA7HmZ#foGfWXJ5=hL>&JNbiR4~4Yz+BiGyZ0TKBz6iO zNP{;{6FdSyHLfVuZ(S5O>QQI|DkKJrsdG^ah4*$a9;g&0Q*WWNh|T|uE__c7dPZ;> z8Ii0r5O+ZQ076buKt!+x;6(y4h`8$)RU-k`R{mYP4o~?U2)PSLcjGP#RYgUL$d7RD z3&25}8XLVw-1JEbgbXYRQoPSw$XCYTF|I;Y0I3G(9g{VMA7-Y>iEI5h#K?^%@#WYwM??H$T`SbV-tQ+(1+qI8xG)_4-YZ)S@!&0y>r} zjo>>zR3x{Fif)jla}a_R#6?&a#7na>vu66HLoDG@;DQW^m#{01j~%PSQvJlP-vukC zs`~0hd;3wW91V`2^ajCG+SqRiqUI5(KIbkTKVffg1NG2ZNB}3%@y{)xj3Df_`a>if zkDi{M%gm@bc3W{B-#g(E{R}k}LmLRd^85SiOhnIZQoQA6i}k;;d!moCqqNR#g-SQ< zE1Vs@W$Ct4DVHwMk}isip`ikM_ZnTJ$e^k!YVjlt%$^L581BFGDUqfij}ho-aB!Q~ zwhxi--oMvH)(lnxgPQ8(5|F_yD7)1IdwN^$Zm)eqni&)C8c;+-^@7wRW@l$DK@ymf zX@{YBz#+oS99QM);c-#*Y4om;U>k)iWk^YTNvRk0YOk^GDA2R9M|(kZR6@}YP-(sE zhNhF+uu*VnmkJ7YTKIg0X~8}tTYAPyAReV^v>^ctbk!5$zb8`JMi4p@$3r1F8YFod z3OP}h0GhzNQ8F^x0ROwy?JCxOE3a&_&BHEp1%7h_`s7KrjKb z2hd!(esy?C0}Q(^iU6nxwRK#-tg1y!KU1aAuPyymaf`l>W3^0xlesSVKd0aya1&jqL zX;aghnmWFM>9HP?RBl98#IK<#7!A1aQ>EWg5Dix#HUMJ0Tx3bs z7V?r-&FDLxVQP)JAsiCT_$UmxBjLT%Sy$Iu5U7Vd3xU69pe|ut<-ZTe4D+T<;f;-& zcnFp#N+7Q?l9j?!OSfs?#qSV_V`$TKWefX$?|a*YmoTxi4{&n>yakqKo7+XzS7Ruo z-6;MPh74R_-@as4iMY4Kn9Fz$T|@$VH{rth^Wzx0c?%IS7{n;1q9$Np*+QDV2#ABg z;Te{10-xFs{j%q%6@|l&kRQRURFtKz#kI6pS$}XDKgcdAMIsYKAf)>Cq_Wa*`1MWM zP=XCK#PEbFr!$Ewe+ExO6emU-bR%rs9bW8$EHERe!J@r^=WmdrItuMOH_3YKKqo=w zcC8@rU0e~R!>-;!2#C5t&e`3+;bfD*MhaozGPUUfQEU9&!Cic!qK7gkSYa)816V0m z;ib2-zFPlfbTk?RUwc7;Hl%;83;rHc=JNd#pIokznS0j{QI0gru%d|r|MuAghAwNMQ5 zSmPj-UFXj=f zp`vU9=S1=52Xb;F0t?%5qY|Za0hV z6LM|o9HrKyNgqJj1tk;!uOq)9>-*)MKvVao!NKps2jAHd9c>BzZG(#?IW@J80>b(E z-4l(#9$G`sWi?1{=Koi_lXFURffw}F^|e?Jsj3n8ZGre^m!>wP*_;{E@#3tzY0JRn zDZl%t=H9<=TwGj?5GwFYZtKmLD;NV2gP<2KLLnU~Ya=20CcF%|)Z2bt4ANJ-Mli6$ z>gP*IlL{PqHKrdU7_6AzkH)36nf<<|2H`IHnkz#>_5$e_ruu#lfn2MoIIFD`vh>ki zXFnc17KpV){5%e|w(&ZvkEFd!Febm-$GqN7>khi^NQ-i2awx6u<}Q;RX*@)Oa((Q7 zhWr$h6MZ!|S1Z`4(U4PVX>rF@PxAH+CDY*$=tDLA3dMNb(=mKS$kwgRV3~~;P1-w% z>cWdosQ1#Zr)Ue1MGjehUxepwscWKHI z$5tITUzX5~y&MTe!jgV)@GE8wr_>UO6LfgQx&wz^gWnbSKA>?qc=hO!Sr5)SPX0}5 zJrw-N$tq|;y%@+Kf7X1LS;WKN>NOY-t40|((x(!IK>jAysis}r+sFufXt37**|_mM zx`fmTn{%R3&0YKh(vS2;t!COL|Lo$0qO=~guElw}Pg;pRMkRmJ6{0yaWmr{*d0UK# zk*#SReW*wLi!!NZfehd{)=ZiN7C`Lz7n21iw%IRfev(oJDjcGxbd69IbeiBi;l>|F`=N2W{o{r*~fD z(AEN|beV=Wm6sv7T>l|M>ixTdH+1-EAyZQmbXJtQQU+#IiXm!^shD}^Q~!83k+CD_ zOJ;CUyHaYX5hF$fXJiaO>ep{x!CP~<2Vb}BI22JVG^54$P96j6nAB@Ob2(HNtGNqw zGs5S&n;t_~B>E-fp3NI09~#ll!+yX3Po;9TWLi)bMKGJe6wcU6w}b2A(r*V+b+6~Q z9gJpR$@6Y(JOhL9%T#E{E-oOEStiIL2Zm@gOQ7HX{AZ;+W6dJ^%|>)Q0Rfh$hK)*s zuc4AhmLWp*W>+GHt{Sjsi2u`)k{GUH!61q3huTC9_5_8bIflHkdmA?iTFVg~+lr2k zm0!Lb%WKM9jtJ}F`kDfqpkY}V8L3Bg8p=b~)9>AD3Dz_E#Z83TFt1u{?m7xtOZFk( zEklk0;t)*Gld^)!R`ZpAZJA-}!?QL(3RXr(x1_cUMa-Xjc|d~<1mu!D?k{>hj1KKw z!3+G(%||DWT?PZwW6l(|AQIf6`kLGhVT6UaL&#H)Rx~lO(;_M^(I_IGPTKe^>FG!} zx2&x8wgtez(x9UVf^JyTGS`RamF=Z{$&H;#1mS*eyW8Yme*Q7XBR3%Xf2gaRI`w^) z=2KFr!S~;fIqdbC;{9Y`S?xiCa?G+PH3x{G>FDw40}VV*W=;4U2NbBpY{9ovFC9b? z9R;u9ah6&}o_;pvr=L&}7^61qz2KDzy=2_&sq|dc>PGGlyvJJccwY}#A3!auC)Y{} z^76Y&Fxj-|J1?QM-6UM}SV>yxh4A(~1-X z8th1k7Q8(D{C*hn9Ti`dD0PoV9-7QGYu0RE)N<(1%hnsBReBIv5vT7nFnhTm;0qJ4 zv;TU2+?HCme*G0_?P4Oo*Q_Ny#C`FQy{C;HG5$U}%SP9Hy}XvqEidpQVMeTrKtXI< zk=9EE#Cktlr0J#&x3UU^tOG6Zp-M#NIf%6>oKaSmgMbRGHt*0|CeCX|E|$KB=c=MX z%rA{~Rz3RV>zRz#FE0;kcJ1i4q$Iy+r)$sVMvm^I9FO*f0UgUkjTP@!;L*op;#_M; zHmm~EZ9=GmW;b2XZ5sOhI0{T}1S|tn|%E;ViC|& zMWkQ5c6id~%TH#bT-%*n@7gnw3~qS1esEiMR9q@T(OWDtbMs-%X$s`#fgVfkr`#B` z+(fNXv<{3Ly?!sLNZ{o+M{Y;Qoeg~H?t)@d@sW-wep4%(1tWaE7})7^Un4~P4aah| zrKvhVsA}3d(e{DX72!P+(K$Z?Fv83AM!)ABI<5;+CI2~d8i6V7MgutG_OZI=!*`5m zcY~8k_Rg+HE$xFo@zt9*`5)#|t^c}nr!L`_R0iFl+WHDSAu)AL+Q@i^ks}+@{Q&r( z|5#1FF>ZewA-V ziD2z<95FvEEUqo3|eSP`OK8 z+m7qt(VWD9>X0?>v{9kbMB>Ed4196B34BhXrSIoQ7hazRI-`IKWs9q`H6g$1~@fn zkO9!Xyp*Ql4$A>O1S1DC?!E9`r{K`=9HD*j-e=OJ1QRvtveH#a@r4UEQ zo!_xTJsan>Y^x@q{>q8D<)%8d+ctEH2z9e?A3wT%WAexr=<&qFM58Y)z{Il$iVSd# za=hQ!Z(kQmFazkEyYuFiD~T6+?{l#}Y}wVyDjUS%`u<_fxz5UYVs;dcl!9v@P^rxD z+0gxoI-0mv-h$u&17KIB0|_|moAZPMkJLC9zOg6 z#hn=SJj^#=76E-CgJ7(VF0K~Pt^X{anL9V>{p)UR#T*bG&VfV}?$Hky|0bxZj=8xx zN@pjiFnJBm{GWX=(Ev+Zy`thPcR3qAe7&$Rav1qYdhP~ul9|)8<3`4>T(M%sg$+K~E|zcIdaKdQ;&*>opg-6Z zG-5~+d!~8kU%TcK)5v$+`0>3?`W`pY5s;4AKXox&h$a^i@Ul~<`bxoh`!MG!tUh{y z`Z#a#W8{aOzjVnd72&Qia|v@GN{YE%AVb0&aWalp73)oOP^F6%@585dwHtxv$jjQE zK6%xu)+QzjF>c~^P$XO2v~aL;UPAD7VX>j|M_P#b01}}On#_+%)0KjjT`F- zBJcAt~{d8vw)t`w)&M z5lwC}(LwnrbpL?^ZF=?k&8}o3uoOiwAyylj3!&>H=EF=2-0=z3T0O8hRe1AG4kwqh zAO$C&0rTeBqiMgqHVY2j_mb8or~5S^`5@IYhY?L6zJpy%S@bn&X^TP*Ajg(3UZJIY4*#) zg+7wZ(bkEI*sk;D7+flp6Lzwgkhr8)G~0fM;!_OpF~g4IwR!ybaa_Cpbo3EudCZMF z>eQwNac{C)75>Nmb#I&Dyr6FL%vf0$SRr-vy3zBu@9HzhOl@2_b2~SwY|h9>PWuFD z)j$#O+}g#hzPROKG{S*p7U8?V9~z?ce+)A~7xC>p&+1TzJ+ST*HOIZ5Z=j9Yjo3#5 zIUQ>qMcU%eJ!MnzW)F+RsAZcYXYo_|m*uq+QwBHf>XOQ*ZeXQQGMvFn+}0F}=ElAh zAgJ#Sw(HN}$JCx}GXRzasKQrJn}p$humvh39CYWoIjQT@dxU(e|0(14Z6oAl0}y{e zbq<~i7Nadg03cAcWvb5jS+vCnMcRNyiXW(Yb7;%S3D&LM#d8z`l=xBO-;<#{K~Oy+HcGg@h?qB+ z#(WPQ6v@C*spN6)mq`hGxiN4|D^8sF<>&DnwkQc=E)n46ZJ&BXO#r8;i7^i7r8@@$>7MO=R`E-XLlV$W7&gvnN*R zy-VQ4i&w5VV6ox5|9D>aBvDsN`I|R?yX5ne(t~dVKg(ag8|4^%z{f_BRwUO`r%rj) zKE_3G?0fv#17OyARMa?I8ux7+a}%Wq)c;B+*S$f~9;;Ufs$fpU5=_@>B77&JQybtpb2akb8# z-3>+rQfHlz+kBNE3Pho8R{M#v6Vm)^O`0@GYR>km4ahgF68axKas)Pe=YmAhYFLb* zMLH9|+;3)e5*yngK?9n^pi!e6&zn4Q__UTq({*ZY3sDHd-1O5mwuw7_H9x;G8!j7M zh$AOiV0W?eOWXpt+}|{+h!ZBWI7jC&X`&^=5Pl$B$V7uqKX}(At1tr)Tz^10V9oCq)VRBvDI_NAC-IGKe^T^Ow7VoMNB`KYT=|FBO4!w7$?F z&NY60f8k4+jbOAUTD?2Q!ZAn@!HUWPH4BrvC$lBQ4qF`vB?ixEQ!$p(pBs~^IgOxvY*VsTAgT)1Em}h=_HUCtJxy$E zY_fD$41US37$ln*aXbT1w4gC8I&YV#VLCCpogg}A@}fW&m73-%})jShM{exLi*#-#J(x^ zmP4q%XmOR_cH!Vb`DEek=J06^3+>4Kmy>9L<4;}y7x5xBq90ulllvYOjwdyJq~|{(gSJ7=$BTx*WE96dDp5s-eIH_{@3jHju1)0}E1X-BGWtH_LGMqpL4|@gf4A zCgJN&7Z;Ztswwdc0%oXg*I_Jvb5KQv_(~oFGXj$hTj#WAgh|Ja^@%Dh2)eHufxK%}5GBI4E)`8aFwO}|!l6#$LZ_m-Et#mM*KKryAo2?yMd`$>#&e((HZ9jA7 zp#<~&taS#h_15a_3e%FHjq9ZA&sPkYB~o41DS~Nhidp;)@P|ZNRgs-)Jg!5=p4bMQ z19&7j$cj5?wNZ=blD*ot7?!`j*+d-MT$X zT>S-F?$w(cF1;Sdm!ILRyo%D7b((bD64EII?SkymAEZ9u60F4`DmpY^ljF)3JLorM znvYCWkp^o9uE&ly-~T@y7(R{v>A(nqk2Jd2H;5w!zPf<)CcPH2;U$(I8514 zvlgjw+MVM+2$ji46zQxsaUoJ7?}l{Y$;M3;`GavP4Po?ykdLq&NjD$7X12>l&7>t4 zpZsN1vT4XZDe#dvDK9L5Sps7BNUE2A?_Oofy_YDL>?QaYLfKWr(w_8XX^TGo#-zoxdpZv(AfAF=a5wM*a{;s>R%qdO#c;YgA#DdOXAqF7JqDtLW1M~0nRk23aU{H8XoIke zc%o}5kV45w51|Z+Md_KD8uUD)DpLlkm)6zGU|a$|QXK@apxpO81$dRq^}{?zxfMgYq&G`PFJRQ;=y9BIA}s&yeo*}w$B5brj<5kB zlrU{(!*`4=Nij1so2#p5wsDB>jL&e$T_K%f;4X9x8fFPS!Ojkf zC>i&HZbHVwxI6uk)6T6GdQfCfdxKD~q}FrbFMx?zrCC(aT~yDUaw~uS;)OumWWpbN zS_UD4a<@`CIB1d`&RB=mm#&#;OAUWgEBnAbnT~rcc+B0?zZ|_E?n+LfTwrA&C)=AF8^@T26DRt} zm*62dM?X09HWl)0)OJODPa-c4;xy$6Yp)#}HpGm! z+q_}JjosnXDZK>9WoDA9@Et6mi~vCDI^oQ<1Cb12Anka>40C#q`+mT4{jl%op@U@D zN0pWo@*$k|ALE1QIV-YBU|HV4=UwA=il_KH z3AR|2L>VJ52bzj^Su4GK@TeSfZ4$#m@F-LIQ41CMXxhnuC=sJbFUAd28zb-C6XU09 z2|#lWt(??W3bo1}M{8{{YtW2T@KgYMi;dnqflgWCGIVGr&@*(^&DfIt2bmc_O2m@e z21T6$9|NlCDf+aw-GvbXP74n0e(p|TVOR@w{cBLxkt8k>3BdZdMyrSZjS=K8=)_}~ zv5?KoPx-%s1caXvFE;GlDf%$gUr^Ozz`A>GX)6pO1Kivi)1mpgtwL1T3=UshCr0nH z0=J-XeQ@qaW-4^y`1(hj2=DJ;RrmLhciT-|;d;HWl}Qd&UNHtVWe~@r55=LS_s^WV zXrRoY&I3GJPMrmlKjsAG{$3`6oF&L94samONpmo$|nRo7te^kdST|pJ+CT;x4aKjJ zKccG!_sRfhM_6YzJGN@6&!QNTIc1{HAF}UA!SC0f&3p|2mOo@<{(}d*oUZ@;6r*8m zoU!kWxmE`8SPJ!ISQ;IKmFOR&DD?vV~EoGd&JJ-jF4eeoB+s`RPw(&40rqO z)hqwhiZM>-*eR=9){Z(~bRg0g=$V2hVa}-uol9CZthyiuM7M;QCs6@lFLFW<~FpnqKu96J#rB380KFg{3_7Pjwt(15M&t z&t5v}1e4dCQBa26rs$9!vURiD%M?9iK#rJ?L6TbQEHC8Bm1)ZULpv+OttL;NOhR&; zJO3q>TOoBhf$0@lB)mmC^)_iX2>=VriCrsWB3Dq60M$TUI)ISH)t8kyNt`1>&ql0 znX1DO9z}oJ_1?#Is_t?RAaj9UsZyV3{9tOQul(++qXUWt_ZtC}4#M^dl%mkn9yc!_ zVA+~A^%>U&s+QH)7OCTAw!=5b=YF4+aT66s&lmv(@hV=Os=TB5;lUue|q<#zT7DLJvlHLO~f@2otf3X zDwbKTMw@^k?AF{#dQ=$dThWJG5e3CbDYETt&o2+bXNn@ZPPrdSZgQ>I-vP06gH@-)6TGz?=Y zbnB21+Pgzj1J_~PNeyZFd0NHZo_%cM?FGkA zydIrYe*a8g@r|rqy$xK}bniAf6Albl=Ah_1Z20iWODj{Wbp@vOzSTs0)vTvB`DzY~#g%6?{H*#aIyj_~5gN&=GEG8pTeTaMlvUIW z4Xgghe}4_7AMB8Ecr7x_v=1F1Amn9L6(d21M_Z~V3Ciz4GS;x9|M|PBW&V%f;h+uw z_rFsc(*N~YR9CV^{_)wtZNHpkErdku3REA6gBwm*l0U)1-FdBgl^VDervy^wRDF>D#{9kY_*Ao&)%#hl+Qm}T z<$r%lbkKi)sGGI(+V#UBV>21PCi6?H`Cj=48m8>BeT8;v!biQSt;|PPAN>D^12gm1 z?*FDOxMr0zD^Gu`vla&`mIkkdM#jhEz4+1e_yPG*{caP%Gy`8M>Uc((46*(J6pShl zt{NUUPe0xbh`RGU!`Rj{Trx9zT6N+_#=9Q!qxv1NB7a+O($K4sZK~zWxQjpr!qy+Bivk1ntx<*XsEX1TEk^j&Ax9ic)U4JNoy69n{x}h5p9JAV2+uqI?D3}gU#t6$hh60v6fTx zd-8-SLB_=9NO$s(apg1K$v`XWiXO8Mp^%gzj7XaQxcE^PmHM@fmD|!16qTfd7S5Yy ztCXkiTF?JeP&iXdOV`xNkVj~c>ojlPoc>a#BVN38$<=Q%(*S52#33M=i|Td@3P)p` z1q_sCgdBk>ge=B+BbWp@jXRlz46PN|5GR@g5r?HswE5=|Afu27TfG`0a^#AgcQ|F4 zFoF`!c-zOHnr%UKAcOTN4Tuo^>93Qi5mPd2F0opg6b$$!5H->-Q+iF`8T0-96*3@J z90#xnBJG5D3ShvV*lYd10iK9KS}Y6zW&zI&El+>@`dJ})w=p||RzVABoyll*z&TVY zf?bL#TTqp*UG*v8Gw63xuzQIp0OM^s_RuKe@R`YB20Y8VHM;JQ4<8mhe)41wxD3;x z<=TihO`UY|S}o^{71~JSlH= zbaX_%FGjvuom?=-+2P)~E0yImM~R&s6Etbc!) z3QGn6F=PT8>PVl32-6gj^5BET7~yt@S)^;BWF_Z)4&s{qdijaV-D^z9@cq)`YISVOo`eI2;&hqBO92*|Kndj$uJ^lkS+Zd2c0>* znYh5f3lo?)b<&0{IUi^44+xR>drfk6aQl(v6UJ?O#Ga7>*dhc23iJfF6vt}8;mLYM zUYkGA;|g>vV{Em)GYsYfKus+hoGcK#xy)wz{5b{#4a`8|oCnN0Y{jL{M1>;A4vUj& zMW0q9?)_Ul?ZK4tUNBc`HTNE@NXX1wRy^$47JRJq-l_ME06kyZdwP0y|9cfpnc$qI z8~imAyj@(-m^%tiM8d3LA)8q84&{j#<|So0qxU1}Ne^y9SR4jib@0WbCr{kV+m0YQ ze84I$k~3A%846{afWP8ydz%)C%F11`2eP!f!7rw_FWeat>Zcsb zk5w#yQ4!7aKiA3w~NxgPd z8IxXdYeCJ#%<4Yho)oI}-=tZU%BxbSc~nKwhUS)?@w<_w{(o?KYH}0XC=brqt65nPEbap-6`-vSeFiz6#;OB z>e31MQB7V5YB74Pk$?iKOoHTclenbMFh|8DCED=3NK&L59?^0<3_Mt2#?`A0SY`sP z)6&|iO@IndcBH9-WV|*YV!|5b8N6brsK<~4pRytS)p|7uRpkN^P-NaJP z%plPPy{f3N15BdbrH^vYISxClC@LyaaGhKqn&&kE12`1bcyT^4LbQX3&(oU4RA17) zCzAs&g)#2N1o(~(8p<7bCV(5Gq%}n979t~hU>p|k3^tj+Kjv{O{ zoEin+RUfdy^$p41`C&Y^T|*%hjVQbP4*uD+6;X$I^PUg^0`^~sY!z8cL#v3{)XH}Y z!UI*Lvj75=`JbD2?TW-cO9gbK+1{FC%)xIM28=9X`kRL*i(F<@$&z{V=E=Bo(b$Qp z1VS8v!3t(w3BAgAV50akOtlHa|S#eS0&o1gSDX6R+^1C)>W?FQwLYAR) zm-`X<<5xq31EmE?%@Oo0L4C?d=nU3Fdgj(Ly;l7M6h|d5kvDY`a~T>@hY(^{B73E> zQYfezf+He^b+;XF`hxic|BdUhwk>?}FIK+Z^({-Rax#;bl~-RBqmX!VQxytiQPo&p zUr;k>vt^V?sw=m}y=c&?6-A344=hN^EvJENOam&-0TLN+e%V0YvgWrv`K96X4S*ng zab*_fgfIGrhK2vUI~Sd|_iO-0J8FC{Y=q7`ZB7(aPGz7NW8w0DIcw0yQM`RFr~jmC zXYTQ)kd;GX$MpO9!3Qv{QMav$1uqC!yQq4)52~VQ9319)Ww$qo($dt{76ChbU_#1O zWGGM}A_moos$Lwfeq(8PVq43UByM;GMW!%|I59bWwZ~13x)@jgb6aW5O&c)h^q-;m zjpp+qRlK8wlYjM1{9i#hLv^V&cm~6;Kqw={3>W+J?|RtG7**3&&|TELV}7N00lb#e z^{sBH={ixyV*;vD70`1vh#K4$=9q6X`X8UE>Q8FE0d*XuATdIph-#T=*e?3#nKN|} z-9S?|rOojUwI9ZKSTTdpQ)t%o6#winZX{EMJ|r1JtT4LbS6y%K|GZhw04uTg>#o=q zcd~iCJ2$%W1$uY#t9ujqQS~l-t+qMCyK7$3a$4O2$Y3@(d@u5$>KGOlHwl=-64`+$ zZ~&O~=-lvs%MBNKqT^vAKr0zQ6;qNp6yv#gPhhR3v;?-45WsZx!cI5MYyQ-yzUwR# z?4@04)~qg~Ga(H{2|?L~awCjKIvI>PG+}yybS!x0ot?M6d+-?6UeuFlP1;bU$fyhP zvC8x^)Id)5*Q*+FR)MNjN5{DrL7W*eEVE?^5i)(L6v|RIE8-2+65^kbMOcf(q65m` z#@u{R>SD1@GgS#StA-S`NXQweBZgIlF#FOvh$bG3mz_TT(ml@_GPrdKlhD(7iUu_~pV@y>3 zI}s6JpG-!tzynsk=le48{^=<`z-x1zWb0PT2T*B_X!)5|>k)RuK@|At#|1$Xvm=FF zHpLju747esTuA7OSaKFMpF9s@wv~lJ)bUOe()1Bu+4Hmus#5NC7>u|K72qLMop?Z0 zVe4v;q>*%~C?Mz~ip$GC7gp*L8^H^O9-|wCIg>Gj{+riE-#n6(ERcu~#d1 zj6_NLlF?98x)X+O-VPXNFzuKn-J-i zmY(}L=R33JH}87atXc1W?;6)W>ug}}CqAD$uj{&>U?oLqd|WbI6bgkeEAvPNg}Nk# zLS1~Hm?ZNd)#aIfU%Lrqy<^vb*Zr8W6!*SrlJHsn3ve~? z&yU7{(YfF=dwLN@IBAv=@VAv zdDatYL~?Yx>FfL5kHxFDWkDD49pnRNfV~ zje8^Z6z4~)C98Uy9tl%NBh@R1i)o{aV(0GOC$m(e{sf|lGjjiWq#w59VjXHO!nI+R z!lPYiifd!muKCpETZ)k8^kJ_nt?b)d93!(4V#V)l>ttCp3Om%2{ypWV2iHSsOh$_J z3I-L0Y`#_zvuG^sq@AB6E`FW0Z=KzmIi7jJuR0&5qp6ud82m_TeBYxHU0mENgZW`V zPbDAR&VzBYy?K+e@5`52E&e|kt*8IvN1VCKpBcGxDl66Z_V(^p4Udi%G&dWRK2>-r zZrJRoQKX%1RnmB0hmKMWjtzIKArKx@YSl2$W~VGGE88~S9{Ga55LSXWGa}oFq;7XW z-n~ESk}%&@d11;?gR|{hlzkUw9BQ4;PY=x3w&q-I_DyG9i@xsg=#*_~ziH?8%;?WM z+plika=RHRcDnrJWc{LppMVrsk*<9!@yhDz?Iw|{ChM*f(4S+nnu_|fuAR|uG8KJ zd5b4tPd$d}|FO5P{U-k(Q_DmxJ8JnJC+CN$DgAHB_pID7#d`Hl$LrNBlo6|I<$WVt z?Nn(kxZoIme2Fmp;l%!*kmmma@CjS!-Y1K_{lY7WrNvk=c4V? z%rRB0-N{4u*t(-_FlaPd#oN2lOLRJGJZhgn-Uc(ZdED5%QNJ!e9YNf+;qBXZ&|<(Q zA8ylKs-i;n1(V2?J&1*3l)0FBX#uX9YU?4a@M*rw`gk@&nwLrtl~2vtp24~LsDZD@ zXGXYy0cP@R;6-Aqqm``k6ciLIYinvICYfYpWTqrHo?zj(Bo4X9n6+n=(Oe%Z&0Bk_ zuy3fKD9kPt6&a%-Cuhf@VaNY|WFLiMya=bvDKA%j{P=Op!DjQhPm0rktjEr~X;#^~ zpRcYWfo}mV3}>XiOWxiO3rrOJh}U&vLYAPf@1oF6Rdn+c4d1lFmsn#nSOWWV9-S9Z ze!F)_*f@!aiJ#lp#L>1IbBTZr)opjN1Rc~*+Dc~j>&9Jy1DdKC7^K~|oycpsCZv#) z^se&R`lE;W8|>L0b!L0}9pMBES=Ugg7lz21yuP9M-KKgnNAm4WOW0~Ma`GY1>Eo%H z(~`#h@i&y&a5(Yw;72s$6_znKS)WE$&TMJWW~iChN2gGfT`m(tK9I~oQww|s7z zPhGF*v9;{Lt)}0XD183RLswf1at% z+vs(hGMb(l9F%wya*sQUeWQW+w|7?xO3)1rx{eDyq*J%Tr1l`f8$iHv+Q3Dsy|S#v zM!j?;8Fh7aORK?B8#gm6=Z|HT;*62JDU{?+&phSKRBOrsNL=JJyX4R@1Een zgrhUK_YEWw|MY_sI4@@>Fh_Oh63CW}3N0(CMeDLBz^$rlYopuRr0((Y6*T+q63@7< z{Yc;5c1T+2c;KkP%Un<`oj*khX107C7bSij*+_41@4NcC#rlofcD~0Lbyd~7vL45n z>EbJtZq%Cd5J9LT6zD2??x*$TUb=cSFFRYZ9(>czmnQ0au?Gn?|x{xgBj*!OBGiZpkGqLj+XFReVEU)bYBq5l4C z@!5UTbGl&Dd(#tfhruUeY;bkuy@FP5=T|uzK1dLV@CFgXN>NkMYU>PnwRZLB86J3j zP&ZGxtLg5p{qC9^I#_aeK+GXrNk`>a{3%aY_kf283Kg05m(|8um_yqM(NStUO> z{yzIXx;w3^OwQ6KcdJ~bP0(yOowE*RbI@o|`~DqzGch`v@N~^w?6%`{IE4@xT)8eW ztjl(?5&3Rp_>T|c`>!Ks`SoXY*L|3u#U?Pt%Q3~vY&dI4r$ptEb<6Sic%x99ja;>g zFIQJrW6ZRoX$N`L_4U~!+GA$Xa3H@P9z2P1<}S018$&MAnQ~(;;b>To!AqYlu#S*K z2hJ|>*-&YCc-UjNUz$!fB_+iJSyO3BciQSpND$Eak=kn$76ex3^Y@H4TRG`6fP2pH(;Q6?q&j=Q=8p!Z#yt2O3$li8_Yl zuee!I`8>&ySv#ki{mHb@Ax>FsyMs)~pQPZ2FWoF&GJv@EnzyG|mYtp)Ui(QTS z@9%|LR(HD~oSN=T+1>`Hgj4dE+ym!>NjE9raKH ztK(KB!}+bZ3~qw zn@*Ji-?Ue`M&Z+R{M+~Qii>TVXE$pXDZS@e4Ept4C$n!T@;`vIkSu!CAJN5$H|aJT zrg|g*KFrxTahytA%WkB*BKL45xXpA^-z}f-rmBfnevfiaI_!5q7-iAKK zg)VVv`%UdvRa>?M;(MGOE>_ylN{v+&x$i7kE)Qg9vUl)O20wb(Cwg31T=Oer#wN#d zrD9NVaJ%vQoG7C|_pI_!{cYfu!X)D)(qYNEOp#GuXr z=jV)1j*hI$R9@fUMW{o|RqH+pDM*pM7+6bR7f!Rq1nj zq}(U4*|0M-HujI@htD#`$t}mEon$o~4VQ$wr>GZbEW@5Ymj4E4_+-(*p3sGjwYQOK zz#A>YXr#4Wrz=nlS;_Q<#PZc1i0O{ryO~rJj^~oM^s)?2S2VTq=cA-4`@tPPU~KCj z_lX?5_c^GaUWWUMDX!nB_E>JfSMih#lK_~>p_gx4dg^FQs* zb5YVOkmLrClf!*IMC#oYVS;^whu^V&tQ|_de=P1({Ba-7ug+bw^Z}SdeHAy*4s>uW2ex7ng^7L?N z8+})Vpox0JUbjReJ8F?HmphD45X$nM#U!I&|d;fFn2d5h2d zbBlbA^#lJJ4lYAC?_+miO7}+nOBb*L9^SchA(O+w<%8s_gURZH(=9LGkNXT=l;mn< zeN{4wl_r|H~$G^5}Hfk4BvG*B8 zA|3lgG@*vAJ6b6i9v?@WgbPSnjTDmVN9Nbox__nWEhw&&3p83n7ZeX5QA|gt0O_Wu zp+ILi$40`mr7=k$Gd7m<>$}leQ=cE)i;Y{TVK(%5L2ll|^u4X6$|hTd3F=U2KV_qZ zDI;K4p%%;jt}jxx^8j5fy|qvz=j>{Qe!%Fr>~C1{$qNZ3_0y-&ix$}pYc_2Y|5GDo zB^dZ<6=)Oi-D5jepZ?V0b=a1PGxN7JD@m`$jbV+*e z?4a2I=`HWuO|i-*^Vy{;ikGor+xTZp-q^!r)e84`>P0w6yZI z%Aa-e;4d6Ht1w9#cx&Zv^y(&Dpl*TW2!Bn2`g%<_0WJ=u;A!U5tWa)Hwayq-#+#_n zC5Hcn^h4tA?yiNQp?DCv!y9I1W(SQRinmPL13P7zQSXOQ)SmRsU&(W_n@{FBjv!YG zE}X%ls{lM>Q2rEhFvRktz;y0r-#< zrzW}-@)zXW+Ksx^3h(26u7k~qT2<(xyl=7~hLh9W_38F!i|L<+*I2N=_xGod>U%!U zS7Wvst)MZIO!ZZCc|{=QXZ(;;+fd(QnGTYVbzhI5Mf8p6wMHLQpbIm{LyoKuQBbZR(YH__Ha$Tm$ z5*%yRn0SC}R?r1bklGh&S`Ba1Z(XU(0iL2aj zL4FN{yKZybkF~0bUh=c3VGlm$P9nc1J-HDqO%`s$vcJ;pV9kO(jMc%{!v%Q~g{mh7 z+dEf!Qjuk5$r;yWFNxZ}$IqV!*3pslRrnM5n3?1k(mY&oQ5x9o9LuhG2Z~+9n+%;i z3DOAKwNfY(!!KXHj94U2O3cc-x|g(LAoGRD2ogC1!{Vl+=cIvL#_!Cu#_OC5e9n)j zt!BOict9#l$y`CMce&*2Vw@#enT<5IKhE&$hqdfDpBM!N1)+q7*2VF=2?a*Ox}_kR zeyW>DdaSQ zaC9tx_4(%mO>~5vx1I}YayA+@cQtU}Rur^V-rF&0Lr~@RiKAH-a!vB!^m5Buy=h0O+To2LNB-@AVYDlOF*GovAk?Opn_*-XAppi z@aQ|4IGg{pav=42#19vU-e|aAfM*1uttYw`JyhBCx9p>` zWZvt;&B?epcU9TgtZ&R?B@A2|3fmg?2*5hq3N9%UJ z1yFv?e?$TWwV0bO`{9Hww2+d7IB{1J&506w-#>Z?coQv?rPlb!WM=KKI`@HA772>h zBlPBbH(~a3{g^LMX84W>O>JGPos=N`6HO;yVbUJ{FXl9tA_CE@hX+@|vvY&J(>`!h z`i88{=5kE==zY`=B=`3KQto@$Z9ppvWuX`nLsIP9NL!AfZd6lIi7wcN3-fEZF-{SB zjk}MLvuJ%%$I0&0-+z2qEYd#&rQnLdRnhY7{RqHH;XI@)c)B}y&v8Ma5key6)cMyN zPnLeS5TrRBS5J8qKx=TfdAbDZvE?N5RDqvcjg5^6z&-rq2P1Uz2r^cnS(3WDhh%wc zmMxF$$;=na_iz;qj`wd)>bTOPHNGgLjt#@1SV-#glJaRbfX|N%WXtc(bNFgO_KzN# zoGcm{(LlWRy&48ds7MVq>2tiUU1gnQ+jRI0*~Z)Vt(EljCVko&2yq%u*X=a*^ip6) zr}OgjWieGYs*;keYCeyUO)1dL$@go|d`gpVL6h$w2BtR{79$rv4$D9>lO7OqyGyQI znb1#I98fLxra#7dUR$llHYI5E0Mbs%R(sBd@vZ!N%P|6FKdmg%HSGb^DeF4voY1r# zSF+}Mf;4d(8@3{cb1~a)!qHg*uzE*FaBlJ9ShvOyy69a9@cGz#umIBhG#Go{%m&u0 z>R5>zK$@`szqd$d$D5;2h9j8K3izU`jZIOn(5A3AY<7J2e3!=ZkDyY|dr~c&2sr$X zcb6ohs*f`idjnIQ(!UY0?>xOZ&tG==$ZYSRlaf5v+G;?odNldRyF{Ul8i|<~PwD9B z>gJ;5>Am$(C?yhbCa6Zq6zI)_uCeGw7;lbx#*{AZ%{OflOIbM16fS!?~>JG7ryoZ!b++=I*L{* zVy~1#<;~4=S-YWrJbkkcg{^k8&uQMGHI#fvk>m{hqt)KZFoK7Q0_DMyq_6@tDd`^g zNU@u+sFxV|wcO31#I~I6cDKH_(h1#k)fl#j_Pc3)4DbSz6sP7qq2V#$kI(+vOCh&r z5ufy?J0|cxSo#e?(SNaLd`-w{0n|%-U7Ue}S&}z!;{JHmvRjVZlbg%2`0B*pJ8|x_ z8W*Sjpv0I3P!E*-PI1ZiTxilwyA|m$7*olCgDHB_usoF+p1+he z%U@=r(`o83bQ)+B>h?fOTU$`L^0QOy%7)5X98lKBgBChK3+rV)9}7UF!lf_NfCE%!6oQbq$Qf(uOqB?kqb{*b-+!Ik?B}jO&O|< za(nnru--|=Ea1Z69}z;oo;$#J3=IvzW#$(Z*?irvs=5!+E!0C1fO)`o-=uQ_`KDoI zRX`a0H81UtKCn-KYRvyWMfjWCRFCJ$J|Vy6_``v&f*0g-T3JA+=I7_pd3j2lBt7;4 zb|hZj<-aicea;9*l!@!!SnsdAK>95Jb`{Q6Sy|b+xRYO3rwwT7;D*FGY#rG|nQVAm zmot;(ov~qonW>Dsy-&2pC&r2b%Lt)#uq=cU>qE0!YW?}yaV3<0p$6@%d(UB+J^suD z1yut80p!Ee?gS31z4r*9@$SA&v`zCC&N6UzIc;riTtT1zc!|cv#o= zoouzQF1)kTpd}>L&pvx~m0d|yH3s-dI@zP4T+!@J-}B?6iAB*|q-Y+mvCp)vnYrw} zU!L~Z(Yk&QbSTX5;G7+8bTWwQ}-iMxwwtU7bUqC2O+iVMc2QB0AfP-I&%PzkTuMrQ_s(qNp5-0@ zc)LIS30AhdIYyPGDY5}K@ZNAt8%%(V5jqrrGYO1O{zqr1={&A#< zY^k{Zi=>!Ekm%pauDm(PK#hF%)6HShluc?Vf7Y$4!*KW8dG-Im_tPx}8}v)yN1lQEk(+-> z?MwhgR)Q29&#kOf-Q8*z4EIln+FrMg*`*MRUj|8JsM5TgN#cWXoD`rmw{;lrNiS97Hd{e=_^iA`e2yKC2?heEt1b) zweh;{h1v(4$&0r2>-Y6ue7;l%ttc&iKq~A=1cHEY^(D!1hWv__%dT)-RIIG7E+{Qk z2LH9ZZJf5YqUN=_P*DNRT_oFs&F>Gz0I&_8HMKdqqo4rXLtEHwbv?Zz=)}XG{(WCh zWm4~ThJf*&Q@5g$ImCsRhc`(Vb0Ziyz zcUc9%smobFHQL%LX07MaKp=)~Gc<`C`(>z}iP(*$Q;!iUN;PR~rAn;k4H3uIn!au| zJ2mQQq|LS}u6_3B7>e+9Otn0j_Fwt5{yXU(YIgVb@*LP70o$EQ*aX<-X4V>g7>8m9JMg zi)8vo8y(P4tSl`lJ$@VpI*oaX+15vp$KCJE!JZoOdIt6hg%iorsxKVO*U%_D;w2kC z+FPwO{CwdOJ*TcC?(* z*YnVf`EX8!*!@@DW}i1jnYqq*Ec-e826}UVK%$$&rL6IE0#99uFmvir`0~_eS)q-=j#$9 zlD5P~GYHg1IPQ%rk6Ve7<|3`E!6$J2_~f2Gk|!>@vAIttabO$ z-yRZEq>s71y=t(CSOAYSNnXHO^r&F98n_XLeS;XHsMRR@z2=j$3GYefgJboToz6{x z-zAi;?%5|hH#^id;;Xd(6U7xhMDw?P|0@}KdJMaF#JJ@#d^^k%FtdTOIr~}%Jwp1= z_T)BG4O->qeHzd)=CyyVwvML=Gp*&8k%)MbVP@W@k$x~V(nV|>W&9x#aWjPKLE0#! zjz^-w-F@ih|B<%@Go&VFt|*0)cdL}u%geH4L%*Vd-!bcu|8-IQ`>OKy)wpSq-GUBI zz3o0R1-MJn{DAL-C{&hw$8nqPYwWEW^sCS08vgkJD31L6`2h(mCM9uAs@{zun-;xB zX02>vBg~#JIPcoj%gN0b|2oA|T0`~^ArMp*1wg34HlSsml8v-*(Fm3|2_hJXy4sb` z)x!%OamhNn%8zvD_sDjuJmJkrwNQvQO%A;9@BA~J2)^X zfRM$hNw+kjP5+#1-{*Z+h_IjDZj-j|y6kjp@-uD#nV>4FtF0g!IxhAi4Ydh|Y~rIn z;m)_khk$Zx7}!aT-v<=mZStBpnExWM7Q=|SA;{{%v~M#MowQ6Ocq^eiz26b~mrg!@ zu11dNDnpzKy88HMdu?Oc%I)DB!Dt4;Z!&Dp>>}iRk1|6m8mq?&Y-!1X50Q!e(*V30 zQ8>dKfA5>rz>X)Ur>D@EG$JOJ1k#C&8Qlc6*uoc2JFBXCcx_3xdGB``9$iHNL?t61 z&)VO3FvWtYfTj^njn-T0W5ekyO4OtCL=-GHZzpT= zN{Bd5st-F{a?{1a13cC+#}W;+?WoxY8G-n0HM_o-1P-Vy`NV# zDRJ8F*w9uxE&`$%a?dO2*#7q55`=bkgT=r7j;@$IM>8fQOa*8e5wykr=zm|@8n4i7 zu(6U1S(RF>Kj3e1sVooAYbUSTIOkIOY5n;CexrT@dv_=-LG}CE*I9w$%ge@+U&>mr zqqANJr-xCbtb{z8|NX#CN~<*Q7l!9nNEhc^zMWy$Rn*FW4S|DlXM)3wZnWOLa(NbgZR@k0 zX!+5RX+-}qU%bL|dGqS76H(xjJ2tmWYwP;Mav2IR>l(~)(U|pA7ZC$hJv}Ie8C4xa z(+NtR0wQ}92e@?k``BT);1@dj>=j5&( z?(=b)ih15p2m(h~P*>-{Jue##jWPh;z=HCUsnZhnfBNKCI4M$)q9zwSqE~h|O4h)n zLAY{{8`qTUm*+IkS%481Ir(QszlyRiMgmtzjA7j)KhFW5^Fh2uLG?j|X4IpHGj0## zZMxN|u@p*6Jv`>J+9>yUU)|j!xQ6z9p@dZ;4JB>Y>Dl#&#^t?EA*-qed>+%RT31U@ z(SUYBg^ruIVtRE?k%=gd7MgE(0o+qo#w{z+sB`S$Ib5}M&)Ig8hT-bqlf?8$-Rx}A z=4*Z@k2tkI=zH&}Bg~G7h)AYSh}-8&x8^=D6Zxxc{%DlcGc$9D`<(%zBcgc1b0y9d z{_rnbue-1T2z-qL!jjI7UfGn}^0bvaQA6w|;@P4lU9TRfLja_6B=}|#`Aa#|HA7{5pgT5rva{z!R{(yP!a46?vR=WP{it`1?`5cZE zsR9Q^{deT_X2R%dT>ETP_k46xpnhxc$W4K*&rH=kWG#yct|5a40-afFpA(_h$*!x1 zem>fyxnE)k!g*<-T4nkN?JHkaf?EefzvUG)Jk04!n3BRGA_Dhx?4(OTXpVtzeA9)% z$!kHQ3MHc??eM73g6I?HFg(6y2e{H195-QydWCFOoztxv^7ber62NU|=bnyWEp||G zxT;r9+^cMf@CF0&3JrLl(=|L=5S?}c!CyX_T>3wXnuX%hcbNHso)8E1OW5OMqa~l` z_;Y#qNua_Nzo~m6QXq@y(gNhA@0!g=>fQ@HX&^IZM6g|U? zB*xpZHU#*&9D9TEYz7Lo)pP)^EH3&d2SY>s zRzQIfRdAo*Zdvra!o$-*y398}m65|_H`r4cm~qS%>OVzTMTdzZtaAQ6>)64I_l=Qb z@Qyk$_cx}YUk=@R58CliS3tdHC<+SG6-2OD$Xd8@W$oL_?Z)an(!a`ZX(3p;(TQ%p z$Qcsj=U?zTPt-4*n(92bIY|*x_mIxA2uFg7x2GgOepIBkwLn;1omB4+uK3Ic1NWB# zKvICz~|foD;US z%ulVbKm9?B8mMU3KgS$CTW>QdO-L?_$VF+Gd}Dil+27%kzg985$aCzM*9`!Sy_Pey zs7jj}NxRo-d@*zI{V?XPR?Iu;LDgxQC;hB1-sLQ4Xy(`EYGV7(>U4DJsk611zF_s+ zLfAhLm`ywAT?pxUc~j3pbJ5PO-*dX0W|R(YL0EO+ARk)D=pm|zZWr>To^nw(fvO_Y zgE^14bym+EgmNvSxbP){)HEzG{9lwk-d;##M64V%Itz6diAaSANu68ecp{q{p({tx zw=BAJFWR%DDs)y+?6qE2CpF#ebmE2OD2`Tf-~Q8b?qwFrL+-4pQM$z9hm-E>j^znT z-@Q-R1WPZkP=1FpG&%mh9SE|&CGkiDvJL15l_ig#dr3_3XR8lfkYm#0V+Equx4 z@m53KycS9*zX_I|MlP==zMI`fbR=(0v|?7+p1U<}^YT9XKoc5dM3Sthl^)qAbcDs8 zpgT{jRfHpchLC(9fKP)mIrnaau*xO~KlXt7(Sd#-YoRZ#`4^(>D%hAADV17rC@r&Jx!z~N(&V*(#%%`!p}zhFcTg<$Dp=4ouQbu)pt zoi-Z}RuBRbN<8Xz`(1=K2bn^W8isGmE%P6!+o@ktyUa8g(J5W>e=rFonMtaNR(!A6 zxtE^jdL@EIF*xff7-;abj_vzk^x}4JLTlg3w6xbz&hXwoi_#-ZkwuaD9#N=bWNwvW zPM_~@>?nKo!J+qPId@&pR#Nuri5@mwLqep|grnzz6iJSw=}$%z!1@Tn6*0Awda%@O za8{=8wIxa6J{N_+qYM+a02Y+@iTA#wRFAWK zC>887@iY0rC%U>Elt3N*Y4_v7^IZ|;SN+ShV`E$^SB|e3gEweunB~zZ1h&r)+)h6!kr)8puUIqrUlm0l^$=VUh!8ug@c|vsGSu+o z2hJc1IXXTLvYSy3v^4Q}p~5uQzXS_K9H-z0n#mAt_n%>@0l~4^FHSzOSl$&{bJNwB zUfP+B=;WQZNsLN*#Yu-1ALM?uIy{g!h+@g66&5Mk1HfoIem z4RM3-mkE|4GsBfFEiH@Xu_AM2IB|P?Pe*+%54Yz9m$PCJ928-gqq7h#6Yx;V0Jwu1 z(e81LUdd=dwtT`0B4I-4c3BX&Bfzlpm|4QQ>q&;>TOg}A!hX06t7}?) z#TlAZ2muSG%tmHAmX;PIr)MHmBwrxmaAr+xYMQ$-zHuba7a~*jW-769{9L*|*(k~I z2@2flW^9?J?PPX3YkB?hj~*IF1St%I^8>)@?t#jhIZkfAjuzz}_#dVYv3+EK1a!LM z2(?8giy(BO2ep06ECz=m09Dct?;`;N)CVgyv*CjXa)^Lgpl(D&l(ftL6Y2{_ayOjc z`0F8Yy+pZp_1*KQGd}A=c%8e4^SBosRiR-2#Cv1cW6rUjc$#9!NjekFg2Q#o^IBG& z;5;oP<#s(~I>(Z0w+}b6ub#1u(q*L-6h2I?OaDDSyJgY)UI54#)o>ug?Z8cdY)b)g z8vUfx;A2Z0zykZ!0dhg8|H`VWl|+;9eiyk&~$SuDAQB)C3azPyi-vV*}qzbNJl zK9%@*Z1l-x*1(vklj6odg;!p6or&svO`?_d=537#}bi}UX!BB zzf0Kp&JfXoYyMN&kEmWEfp+-WKh=aJ5OIC8bU`8-7V?p%mL)y9>;^X| zUw;IFX0&5foi-|xwl#)n5C0l^VpFUmsWw3_dyZdGzi%vYWg}LEpFiDEAbo!3;q4Fy(T7Hd~m+?sj69TKE)46agm{)_^fO(L5v#=-P`Hw{g&A%7LqPyNff6joXz%NPJe&R-QPMnN0)u{ zg$`wew0?Eu|C3+ z`WxlRLhz@upxK~Gg!dPHyv)Mml76rGr}2br_4LB8r|<&Z^n||EcC*Z<^gDf@1<-{! z_|Z^*e^dYnH+Y~#7@U|W93R&P;a;B}(c4z|Q#wGYusTE+SjeX~FVRbcq2{o=%ee28 z4=wHh3cw66B3vdS+{c*Kzo1d-40i#L+w5RprixBgMXC2h^ zokT1{<}&Dd9gXudRWXXtf-JS1w00B09ST8%V#5~`?Y9Hd5y9>0(ViSFJ!LF5<267^ z+5|dYM4566*m#y2dfc|T=P^hXY43OFjru?$5T5z+B^KDa1&j)9AD<$VKkDjnUQKKJ zITabot<|;~WsPhFqZB2GB185fiFnhNr!cOENCUnsf@v-`V5t(q;h(%)b`o_2KOBVK)Pvifs+}w^8563$<)-;%(0%H9)yRf%^H}0 zIt4Y8l8K4Q%>s$^kC%@sr=Rb#)?GwhL3ByL!C8(L>oK#jsRQQ?%qF+s>k-*(qUoc$ zUqaRL*X%C7T>d~$q~e(2`p2iMY?v}Uue6ZYRg(B`Axcf-#c-TH7G~Mv0q!KNv!A%L z=57tRtfIyPi&y*~KnwT;kas}~X&O{(5a3S}5YCREqPSyeQS<4a0mZYOG^)L)?e7K$HY(3Fis>_W3-OITj(x1QGsi z{3=qsuEaUqK9tg0bZ3^!#za0yD27Ky04LJlU^-I-U7i0szH0&4s2mE=2T|anD}4>! z-p$HjJdb&sbF}HNay<@-kz;Dg)KcVj|Lre5!_1Ujy~Mj9WLhk2iCbKNMw@DlH%D;^m^ zgE^3IiChwpL}pX{d519tODr6UOeCmC3id%YXU4q!m%rbv>qX_g(vM)iP#7Yr@8YEt zOd&LvML(*l7Tu#H!+!QHmk!vySMuCDsUXAFfZ+yEm5^FeiTfDge7!)3cX{5W{$FJi z?i=E;H9p=>ytodTo%e1izw|r%@Yz9t_91Ls^YQY0m%$+{&4@b}1;Z6NwdYr;gglRl zWla}r*Z6xM*g?q@Xw z$zh8drMFwW6gXZhM+P6H(t!Hqt{Z0y2^t=)pT4gtE4zOctE^|<;jv|}bPFepBO$LX zx4E6exr5`}lM7xM&6vT{>Q5n3^ItQ{jJX6lU%xk%>m||@*(}Z3Z>#!SGE=$8pjjUw zeV#uj+dDV*T6Dp;orv^bK`8`ac-3#?=G#!SCgmuUJP91V+p<2)9-(=4;hSb&gKl6q z8>AAW!l-YKutG!sI7oA@`VcYwHfuXGHO=%vgE4d=bNpd6v_yWM56a@nymv_ui@ z#BW=XC>tharV}4cu?`Xvdhali9wnSc$=o}Gi<(P`d}d}-qah)=6&YP zfBG;^s*|5r_CR#6ZRfqJziJ=fCaG@A;N)U9Bj&cl_JA9JeIEJnyVrr!d;l|8{<@*M*eo^nJFvG*gyzZmXPp= z;weACF1EntI(z@xw7V*{rIqkb8XQzF0ONTP{&Eo zK0uCGcqOrLmuNBpa)wb5Mb5wS1k=+al*3!7mrp>?*6WPJNS%qV>JazQm^qTY%BG;Y zS`##9ptAzN9n!;kY~b%F0f4+#RWVLAJl;3tWw>W(4T^OgeK&m|{vXRKsek^^V@a5U zO=5gmVtZ()OHc2v=GaTI-{|~&gf=uT{gHQ!!C-*MElN%%17?Yl1W)l0yW)}6+xLHd z#*UM`o!RNeeCN-;|6WbbMVOsMm>MSXI(x&p7L~3YHsBsM$i>B>g$UI(dC{@=!t?d; zBq$edrf3M?bB4qtoSVXd*YZ7-ln2^1n7ykCJ8Zb9B7+ zc zctkV9C=N25>Ah?YZ&?H@Ses0XPtM6lu-tQ)h|Zo37h-QGHm-A2$xlC&JeXlNBN2&Y z^IV8qTU#4i8!HDAa%wScmS2w7ZusZOXf{(Zb3{+stUaB}`q0_tZ&ybkTZ&%@vk$Im zCiUfVHyhB2mgpY8e!sCT=e}}#t~fs~Dg6Z()lD}n`fj|yIh*%)>{{?hQ+HVk@WaY@R75k+XtEX?iFGJ^ST{@GC*-M-@+Udw`> z6EY14;-!{-{sYXblHI-y$-D%JbZ1vrD?>xS>(|6z&XhcS=?-PfUVL?fq<)DeGNV-K zwq-0k028IVJ89>-x$hl9kVi;R_?~PD6cY_5LApA>s;iNC#es%0!fLiH4E(XbCy8gU z>@Q@rqHcp&>$Fjo<8RV=0QlD?nx-GRnUvZ{HGC5|28U-OC2c zYd_i_z6gG3Tr;sfG~A7V&ytek7{147!swg57Zc6R0ikGOD^Q_Z9m5+c$$2qAxa$7nDGwta1!i6Ke&&*#ikJ4VXCI*arB z{n%`#Ym`OPo`5BF8D$XN!T~v~vp^o+;TN(cDrX-?O)VFOfh!-IAJHK5j}~pAq_9wlFZ}L-fC<`- zUL|LlYE$WVYd_|0ws4S|(q4PcmM{nxy3u6?9_k?7G?9KOf)uOYc)fDd+>B52JvMnRtb^)f<4!n2&KB5Y&s31Qv41EikRm|=sUJHqSqziQBc;1&$GQcbI zGrWKC3VEnV3SfPLbCD8KYcN_rf;>zB!$x)GG)7~Y4P#Dm@e3RH_x+Uj4i2m) z>ztFte49?LxbbXesen4@LP781b(WhLyGut~oZh1DWbaImyh!t&M_=2n{)Zs8u-0vt zOV+sBK<%5T-`ry;{*05BhbWpwjagH+vqJB+IqVb&ub^Y2Z;;16KWUL-y|1aI#RR+` zv{B~PQT!c6EFM~1?Gv^v@2xHQ=H?k39WI;4#0y3oZvYcAWX6X*{eV? z;h_5Sim41^s7>@*XYG+16Q*K7o^r;cHx~RlgF}>qWg^Xgg_Bf~Ie)I0;>I|MOWfmeEv#STGhZw0m+&f#D*d(UAe&>w_+nB>#<|wT*ADLrnj4R_USeeC_b_Mnq{*H0A?)s(dWPn7(i)%KHi8;tniY3_k3Z=;$5$eN7xFF6J&cMY0Qy&@fH^gtd!b1r^kX&wA zdMP{r_>Y=!@jyJqCDIT%Aj6|)`LF0&a8C1wXPR~w2a7yIXg}84SD$-`FQeSM_&kvm zH7hv6iHAHpNHi@%vIOIn_Ad660eNRN8629KU7AM1k{&l zH`N9y{%IiPd1kROQR~Er4Ef)%7i$t#z(b6S~Dj52eHqoNo^KA;k??ptNcZ`*u=3im*K$;n=(N zWx0_)1Rq44UNW^1PFpOZ@~T>?gV4yr?p$9b-}8ysY%7yIRq8_GN=G9$I5p*1Jw zP+%fX-&soupvdAlCY`Qmziys~Rz%$LgYdN>?O4+ODw>jST{59WdOM20Ke~k$L>AIf zg66$qwEro|E?zt|A4wVyh6$8SXaXn&H2(HN$Fxj`xt}y_h*)>6aBvrGU(orp!^u<~ zMxu|^qQ7vkKm26Tpt7en=T3XkHIsM{-yP!GnUr`T%8%C~2DCi3x%%-MXFgqd{)NP6 za1Axo`4o-r@A6tk43d3JHH=RmS@DOlONh%x;Do#wd+j8slbZ2;&EgK9%#+L^Ht)6A z!V$D1QZ+Tz!i_b4;KBdw->@@ycUUszPIz=emg1h~^Y6E^-EnhuKcV<2@5o6*G+yuO z`0!zrr}d6ki^iGC&*qZ-iQ&km_*`vlwEa-dtXAyxu* z3Nc-QgVxB%3W{AwNEz)LI6q_%nv=Bp&veWXj}tiB%uE5NzE(Nn=;-(=M;HxkA?@do z9e()m!8UJ#wDiD3tkFCvdSCxuBu9?|7dhekp%0F>{ZMvnUUiX!+F6HT-D*NrueeaR7 zUHrj;)keY`lIL%B-x}P~DB!Js3yG-9PTxVG&$A!Yingg-OCG;~Ir7Xi&mA*JQ)&iq zM#Vkq5Z=7rRd7Bxb7`SrsRc~>IwHUZG-}FIV9~mR@SvMAR)w!$yV)k2(dmNmuc1}6 z-dM=_Kcd=?^@pQ1Z=Zu>YG$Hh-c~-Bkbg8$Q`f&^Fu$?R1eD~r%y*wT7xmM=$V$lV z(q2i4;H~QA9@>89T-e=V0?*~-EEjudjp5pGV5R2`G$9$ifaI0YW4ZAP>I?SlC87sG z$AP#>hx3j1C{c^_cSFA))ZY2w!xJALpA|9lXhS=@^gDJbg>XtzL&*sY&Og?l(kI?G z3|$_0VZ;@KXPiqlkVsvFzPxUu^F}&wI(<#K;(>b-xpQvfQbm*8z;)6)+v7+fFf{Nx z=I9C06coWf%=)@%#;TBcnVY?l(`~LT9XlO1%tGnoJM~ntVoON)rZxXe7X!v3I!Kg6 z@ZD-@ZN1w%yn@mc5w1*)c29=tt72apS~ot zJuhCb7WhY+uY;>rvimLgND;cCFQYek9=z_9f#kTgIin)u?6&m*9G449#G<~puA|J4 z@7uRMcgiq_Ct&pLz@$0gqGeg}sZ+H~u9P~{DfGo;=oe{iJm(yb&c*{Iniv1>e*icS zg!#s!;kygFsfpqpX-#+{L7j*bfCKy=2y0e#CG6gvJ50{~DydmBo@u-f+z;Jyr8M7J z&#?1-vE`eh>w@T%5aJrsO6f}a6do#nZY;SLJh}dbZy>Vjby>m(8DEY6MoupJWY$Nd zwRLN6WLe10x)S(N34VTI%q|7*H(gn8zClvzM??TZQ{8rV8AT)5c|}D-fAha!Eu zBK@DiEIjZRa6X&nvd^kT&Lf21j!j~l%;RK%`sPNVjaM#HdnU%qwd@~eLRFDuwZ{d1 zJJ1zj3&CFjJ!tfM<|0zctY84f3q6P7Y~@B03hMGlm^;*(TbAhnXkTLNJN{>L#+FfQ zq}xqxhg~F7647VHGtOPyGhHvd{jG^Eh2iB1XpybLxF5_l{+>V^O+Zq~(9c<2&5k%o z*zc}Vu)8S4_Qf={;zFig4;9+Ve0h?p<8FlCc)V3B<^0F|N`J38C*OA;4tm^I?oCO# z`#f;{cPh5MRd;r>ho|Le#Y9O#I4x?o>0-lJpRD1GYQ@(B;av4Rb5izBGxQEjcESK*3 z9ZcBWYuzh0HxiGr{}Q?rz89V(56DtMf0Rt^UH-Fx!6rsJz9llq_{JqYarxv<%gDwF z91<-vA6tLFXJ8=qSc-}_Nq_gIezs1NV%7SQd%f*&$k^Um+V)k+)!llO`^4zS7j5}H zU0GFp1Dsvb;o>!NcB1;>O|qwTcSyy>h!?D-)c65({7j508eBUQh{4O2{5^2*A-%}r z*jhMuZyMRNFzlN#5Mo0*T4k8D0#aj>T1QEm$bolLbLa2fxsbAhxAf(t+k@bShHSm} zep(O__uhUOYsd1&NF%1$1(;PtZ8h8}CB>WHa`I?&k4lR+NtFmw7WZyDfq;g z9d-j?*|uNkfHt{>J7`B3N0itH-ILqYuPMA6TH%@dR9Mo{;^#m|c=%eiv9cD5r#$g{ zAnj-kXn`^vHOw~g2L5)tCgA4-h!l<4dug?Z>EGId*x*%%FLm%Z91b4eF0bEu21}bsC0Mp8U79J>|5>QNql5ch;-#}avyCRawmz5n z)xR}gxnd1J#nIurNzWA4k67(c-^RA~cdO|ESlPUKXCHbo>gT>U-7CV(%eC9$${%eN zRn>m{`0<%Sn|KJ0@=R+PYD}{A@1sAI!X|^qc?DRvPik7JktUAoqagY1ftD#|Sc=V-oj@m{K>{HWSNu3&fC3#`pMq+mgvKGnH zgI|+-s9jYD2A+sdE!c-2mGm!!H{(eGVKDn>Yv;1;dpa80mWE$1bF|=_1_}6`+@`Vv zUV}5QJK6=RhSgjoh@jpAtAl?XLClAn>JX#4#;C{xHrPJWy?%n*68r*Q{pG z^8dva{bo|^{;lZea0qf`W$ij!GIZRqLMQgG_es z45!cD&$sL$eFAC^P_xd&yL@F}@9%x_0|Vl;F;GWbGxy(dlL`&2|c@y41JK@ z{R?HMq?C}L>~x+DgM)#er3_jeNdZHEeDu%ajjl{wzM2T)a_Z1@RFKpzMY~rtM;I5g z=@mMEt};J<{J2BAvG3s1DhAGTZ`R2UW-n}lcqx;_xiUodR|Ig09ccdA()P`W z<7dNJ-Zla1ckmq|h!g>UON2jD_bDFXja!x1x?_U7Ptpv#>n*^p@aRgB9jDBTj@{$g zv-D8mLg4;J9vXEaL2E>c3Yerdf7pj_)KDdMCq&?j^nsXE!CMK91NW?BuL{st zX&4$B2JcYZebr)^@qm}R3^8p2;{&b(Z>ugRU0j#ONCuW5L}#l`u6Q)FxAP_@TXq4 zG3hayZ3r5Vlm;aMBva9zY;`#Zx}dhBTwS{Kie9Xd*UTE!s?6_`Na_-?6JrNBa0%&9 z^Cty+8S3kvXcS7p&5|}~P-`gAgyYDLy$DIc~jOpL=dadAt0%to}9~%d_fPCiQnpg49-V2OMiUzH#Af=5h84o1$-- znPCO-wx849UOXehu7kY}N(_2wI1l01-xhMM6nKF^O+|UK3h#C=&Rh};h|4W#mZ?mq z(&Irvk=&KO3r2;XX}PbZzme;&WPv=<$7eM$X@36vEZEK|E$W==Uc14@Ar6N-r_4OP zUx~d51vE$J-M3@sZRk`oe+J}EGdTSCBJ06@aduzHT#4!Ncca(r`r6-d)-qgsHqTZ6 zaq`dTTfU?58XB~#w$^IGaL9;19_6{BXo`;L_SZSc(=NFt|4A8_3jV5XLEL=m7;wdn zV1kz2{K^*R#yOM!wQ?caRXcrdyZUkG^-@3Ci;f+8c15;I1C13#_7tQ9mY6gjy9iQ6 zo{!jZ+OBZN@X&I*Z$ZI8@uR_daRJltsxkU{5t7%?DL4vmgUl-@V>-z67cKwHVtgMAlCm=AUJ5ZKeKJsQT^Jn}no zw~z4-n`+IUI&CW905rCS)Fyz-=r7DMuX7Z*7=DFMI(*CVoN(|kq4pcn+M6Iyw2!mR<1WVEn(scjvgvbkgc6B7T;VX|qufo>a&eG7@QB$jnW)ln@A4|JyM_0*R za-GTkHG0j}y6exM(cTNvb`SS%VEK44rqr`nNJM6HtiXM~*CKavgiq&hb#;<`$M*8+ znG~_=A{Fqt3b3`_so;>M^)cwy`Qwai;16x z0RT+y<7bGEwC5ve@F=@W#w&?8k&0NA$hQYqlF@}9;`)7|qC>o;y*)WKl^g{MkO`QZ zZzP}plbLu>HwPv?Ik|Xs9kRwv=3S`!VXB42-H5`L==%kf#v4!pQpKw_@_KBHZX}ql9Yv$Vf>1d?zDddHwr~SFc}_sE-wd zz>mWEb^gf17UJAS`6w>}_g;oV`K|vFl+9xe4wB)Ch!P46l8VIj4!yE}U7(azh+$G3 zFEjakTOZU8kh4K8*_WCArhOrP&?xE&gnK%=x?5{)A;E$v67B#pNvLV`T6yqSp z*LZyfzC1U!v}jE9O3E}hr>f1kr33x_1I z-N*0mZbfMz!xi}HufGcbnUBc>|21mBXo{Ho6F{*9emFq4IA0jT4d>om(v3sB-ZyJ= z$bcYjU&D4vz3JPX7WkNgM;qd)cUPXNQR<39ew^N|8#&hiiOel;y!;cuAp8Hdb?M7?oHH6`D?p}lh6y(j9$ux z{GDz@yAkg-kdG&1077Z<6N-5n6cHai;d?;i$&Z{5!eBW&nuXA>xBP$Vm~b!b3c?!_ z+Q{h%r|STGBtzV@XJY^Lt-Scw6=v4f4ga~Y6}Yf&%JOsi_fshNlmnh{Y(ldC*Cdrf zX$mBtRGuTeTy|Yp{&Y|AE%>mT&hYH}&lRYMIc2UZpB;gX>GE6|R1DGAetnFRyz&H1 z&XBj^!~_;-XTYx!3U8l(-S+>pI-9(B60VlpauGNlCIPJgII;+-F=GU!8G&M6pbGz1 zcr4Ba!gjbjV1B^={;Njfj0+fLQ*gQH+lFgs0Bj)^^ZXCD@7dFaSmpi)BUauTd&~87 zz|0UV;{9c#M?A$SrojH|(qkpsWakqPC9-qpM-G8kiCDp0cY{p0fJE=rvZ)nbBt0yC z%72Y?I8?3`3@kbXlP3(ifY)kGeZCc$a{yUo!@m=Hi~{gyt{GcmwRPM9<&%bTt@PUjinmZKR+p6DEyx)-Z<;p8_a-8paF-fTJF!x7ZD56j*?B z09!@O@s>NALrPIJVZMRigRZfLW6^Tkkiml3^njw!675vW@9DOpNE8imL6Tqa_z_tlA=xOadmAM={md|6%OMs!dZF$TUBy&j4 zHoX8>u&dXBde8>S^g-fGO^iD=XT}C4Up@RAnMjr=qk-fI)?vrU$OhscgjAXgvmxgS z2~6O{RV$1{dL906NBGrXV|F68dV!)3BZzpp&zwDrV$`<$x2tx_9Uz|y2bQCr91l8O zSfQFaW#Di(#$)m75q@SA)uo`j31PE-%}P=CKmQLWylKov249CdK3_6UW7%Z?)VZr$ zd-JG2LbObbr$p12Pkm1rbPLgFrL<7FW}rNQ5zmEOpXI*6Jj0L%binOh5%0Zj;}HD7 zo371#Ns7fN8uauKkq^9b_V)kp211(y8HZ>>*FydY@QWg=y!@u>wyaFJ+Wjo{Px^@i zJzjffVx7PG&sA=G5n2=Q@*>*dmPekz{``B3wt6erS!s}pL*T5~Cm+I=GNq)%ZPpRg z-#^(VMn8XfCBXdu&3{%R7g@Dv+M2q~=w|fh58-QaU8aWuKfq<^|LFM>$%G9@NU-cL zJ(NA>Z%pCmPD|*ME}m;s@3*(opGWu0911%kYY^@&EnL3z@)ojo6%*pOuLWgLY!|;be?bx|H|HET^XJ(@2}U z=K$KKV|RTg&ADVO0-?Q$cv0-!&QMEKPjk=##1WI9Y(3$&Z!m*9!sv=E)E6M#wyL}P z-GN>@GCe_RX<^dgM|N#+JL!xYq&YNuoovv+Hd`FpsR;=Rrwp&g4Ml)Yn?LM&|Da&W`s?TtPQFu>9{Mg;V?n8Qlfut}8P+v`l@fq=r!hha{=Pz#(Dd{MoJEss0;6gD6 zyHyfVlarE^=TFdE{%z{}mMj(bRDA#boh<$;;ppmxwHG|s@BSKAOwjxT+_w=1t-(D< z-caJ&_3qtWK5#V>Vc$o?<2HWyZH(+$!Vxa>02s=aM#guIIIR$oXporV_(M#p zQ6yqHUM3Cn9d$x?VS$#fEy2HWkY$qISY6@)xpQZpNeyl3c;!0t3~o8wY+=hXMmOBL z=Otcvh!K7hqXgnWx*W!(kP>|6Ih;ARwq2mUI^t9|A5CN&E@ zpjd}EsOG^gi=2XBeKE&q&c-?uon@r{!ol}}tVq~r!7t=7DF?&r`@Ae@JWIE-_%G)` zp8VvXBC@;&_g~MXpv$;oK&ugob8Zt!u5*Mf-|$7}TfNS=A_nuD1|>N{YNy-E7A1C- zJ|Pi9!t%p+?CN-;t|G%vmIW)f3>V~ad~-~e;5u1}&Pn{@J1#QXu8Ft^!2ykNsbsh< z>y(pI!HbC?YcsSOOD&97ktY7+j0`n2_dKxsLJ4S#86>kqJTKvtS+Q<|aASG79QGvb z2Ykw&THBZ0$1tBqYKwzCKwQ*+uSQ@lc@lsNQ91Y&prSNKV+I7YQ-z=W6#3^SLOjxe zsaW8=2~Wh4k&4Jhy!1(j%&i)m5e#O~$|L-dFB7vM-IfhW|+EUu$ zY0?Jq9C`G;=N2$apcF$thDJxuVZWb!fr?h6pB$`F~Ke(rP4v6!HgjE*$e2fT+cfVbd5-U3DS+{KF*Gsz>6WBwX_ ziN_gz)@0TJDXAeyc}}1~%rN`P{#Rksmn_da$>Q$?koQxEL8;5Mmv0uxdjx3G*KM9v zJ1`kkG)6)O{0c%DOu)(&?Iy?T5%dT%w&zC= zvv@uP=LNF!r%Nf#4^7E)H{tD!1}U;>aQLdF)+Tq2ZDycpehjVAdo!IB9g7yD+|<-# zh;CIg7&(G26LF8l1?F1P&`06|`uT`v>S&YU(%dQdslx0z=y{CnWai6WTMX%2P;0(p z%wARdqo`qQJ4Ks0NC~5+19!wN)%SQmB!8Wp;x0%P z^3Z%q1fm$Eb05Ki6!W>Q3~>jR>o8JE#?^`3Imjr$vUd5YA?p-eZW1HM5JCDdhX??J;%pjot$&QV3Qxjjs8zg0Cf*n}n;+HG9vGti&8(&s=-$!F{7eN+e+A zwpy_J5Ro@dSaTbqBs_@FY&wcA(Iy-iV*QISfDD{HeG%i=TGLK#o{Az<%BFE9UXypA zE_c2J@ElQpq3}>LDKMV|AeHF0G@OrGK0`bf2RzU}?89vAgR4Lqm4H342cyB76`=Ho z$xAAxNt_~(OCE;8Fvpt#_g_Afh}}IwZ*av&!%6l-IJzh1!M}an8bW7)?}%6_bbh&9 z5G?bvu7@X*qVdKgI|2w~=yKtwp-4`1ckmR$Bw;)_;jbQ8Y%%<`=GHV|11XxjRLu&| z>5*dv$pc0S1+@=MyZE~Lo`e_S$Ct$5lNhKVV!J02d2clh6S_txzSa;!_2vx$bAQ~4 zfhE?axj7?+wu0E3Ko9-+LOdMWFsg?XhHx(>7q@rjxqfEPRqE>|VXE7fCnG^Ck4D7# zkt}3!Sp67is9*G@cV5>CF?SeKa&$l|lRjbMX@P==K$~G7B#+#zh$Ek;c`Am+(_{lq zk-ppNIdPo$zMLC~A8(>0j^m))d}Rr(1@TyQ7-higglL7~NiKxpfHigXLC`z+Ela3k zaa=@ANnmCpggoLRBD`5`$AxGqo9s~Xk@i7EpsFj639W$PjAUj5STB4PEjMf>4?xyz zPn^^-=aR?$wh_CJ0C7-hA+Ga(AQ`*3`}j&xh+HioJw^xFd~&HmT3T8j)*tEF<_Qs` zSs%<8FBHm?Zv}5~(a*&ca*p9xElW8;6xX^ZPo@H&*zb+t7$-!6JJz-qk$^5YCO~t5 z?o)ULlS7@DlwvkObTJCSD+b#_9YHXVSfA%O0@5{`c^>hII5L1d7TVK!;6A$Y{k8;0 ze5lwJx(A7=ILB6a@S$T8iTpA`-PF_s;}&EB)JKr5;OHc~G8U8K<`Cr3=86Va`06VU zVr#W2AN(2C!;>iY;y6?p$dRXEYDh$>c(v*2B(RZKTrzm|H0J%llQF31E3AEP)%GIl zZ^8>ig=P^A|1t=di*^&9c9oxzeblWQ6Ed!H`a{7BUF6ulM5h2Mg=*7#v>K80iVQ%g z>>2mF29+i~Jw1s~$n_&nZC)u386(u|S9Qfg8TIU+9)RO3u!6bUM7h3`X-!`-7rumz z{lXDA$N81o&B~BPOd5VJf;%pWqB1DJaX#JON}RCs=Aoh*TA5-+%kS^S!tl zi8&y$i*~OPQb9$9J2~BinTjMqS&nuZLMT4)EgEtpks+la-qS!a9j_Hu;xtz55M;3J zdp_F~=@TDldoTr-6*pFi(rp=Y@xgp22udRMkIStF+X7_lye7y>WTywolmNu1e;*TB z?w^6`E`K9jQ{;)w&o{@(r+iBof|8uMv#kP7^eK3i`_&Z60w6NUuGOTUkAaJ3{ybJKMjTG$o>Y5lOa>$&;}-w z|Ki1qp3eCBU*kyph*8vugTK!cg~Ai_{^VCFVrtqX#m6J+q?@7ndD_FnBlEZ%L!#Dp zq&gnW7&&N<+@}96zZ?0+7!of~prEeHv*`gFMjdzyUN=DArm&<2(OVj7)v@K*DIJ~f ziMLNQtrdJ27Z4EenJrR@E}AB1PnZgEA$Bi2)b^N{hV-fc1SPmOh;~>A;|uDv3G#sX zX7vth%M0n~=)RL|j7(z2dC5GFmR2kT@-Bu^$nS}W??+~Pro?%#wmwCY3?@3gR8}e- zaw|uFiDvQYKkZJ3Ke8z@uToTGVxpQ^HIwoARc`P5mfV&T_wGJ1&u_2ap!O^wW$T3t zDcgq*tJSPJ^5%|WNSxm~qq=P!6tT(qs?C!Q)ORlUT)fvXKOJ>nW?tg+JGv{fZP&VZ zcuaf`^Kak1`z4|V6BCo?__)o@-}-#~{QQsltE_)2wg?=1%z|=RMMb3?35NzYRz94a z7-U_4DV{%{SfLit)7O_cqd;LAe1_y}@7`l7M~@zMblkU^jy*} zZT*2HG*v`%V`%Esba?w3!D80$vt*gu1w&g;tb2&Rqri-Tj}1tsWg|n zUIcZPy7uD08K0P_0P3lsuTR(AGn-)O{(I}?&Juqd#X5Z|^^M!_9y@>jJTD&~RegOu zn%Z?bE?Zdz`T4C;JaVMsQHWqMDIs22YGv0YmH!_m=EU>$-Y z*`I0CregdXS4o8d+oAR6EjomE?PBKP3C4F878Uuk8BY#F{Dc2l!*J7&$M)N+_3fWN zJ;L8H@s*eQibvR9bVU&9%|)G9O-1~)h^Ph*U56SCtWN5?5k?*vvzKOdjrHe61q21R z;CuFCFjV%J*RR*TfB$~X+O^jsBO})^2h@K2xCw_pn=~DN!iQ2ID{r!Hy!7q`HWaCi8 zEwCGC>Fl`s2su7B!1<}1XU}X0-f?4%wzfO|>^u6o&{n}KIhpTWjO;DuElTCMl~t=& zQFuC6y5ksrilQ8A#_Y!#Y!0lN_5$n8C{83CJ1wqWz3L2SFQbbWY4D>Od(c3F!OZ|6 z!tda~k&K81CJ>H~#C_%MR;MOMMGG%6aQ=l~b_U)Uj zf+u+Q?$vA!%8p7&* z+Aq(YXee&THQ1%>g$~Yr-%|Med7I1Uh2N7@6y*?}3QD@ zMMZo&cF^|p^gPYUVd0bia^d2|+O_xnru_7GE4#VLkeiK*&h z1gIP(Qz7i%cm-ebq*MgdI5mf+2Afe{Xly+~WmN7-6{;d|;7UIoitFYU8(rFU>m;NW zcPxjG>gr?$S_X!f#1yZU8UT$#*16K|Z{NI8Y5Q?;4?g((S^uHTRhFa^(W!ei@B90& z1zPNbXO6oOyE?u`P*4zJiV6ftLnZ&IP^}b2EiIOR1F&VHd??2rY-fc03@0s2@94%R zpWW&5fj6(d2{TxXhCUd&Uf$LSq!VHs&;?>?uXdFEqb0<*v+EoJ-zD~_C(?; z1f4j5IQ;wfpUPXn|L=vhoAG_Q)cr;J!FTSk2?z-AN=W3r+^7j;1;INWujgrYHuLsl zUw$FR@XE?^JB@V`tL|zBUq6oRJ9n-_HO4Bhpuo(;RL&`OcVmW1dwas$xier=3bh!8htL2h#A*w(T-&CeO&sh=OTL{G&(I zSlJnS(~9xbFI?CP>=+zTF!6wE2+2%KPfwrxj7@x#cMbiqVA>m=m6er(?|yc&lLvvH zjN3ya z?61ZwiU)27aZ_Bh7*e26$@E@<+#R}EdN47t3V+Pl+-@FC78e?LFJ)eY6hJ>gn+yH0WSS8yG(D6vJ%8hJ6}T~d^_fV^WA^_z@A%7?3t2o;2AwVvxQr+ z2p>39@J=n%0x@AH)uF2(H`fdFt(5)uxO_uJ#g(+Qw4o0l28M<*QOd)%C}VgL6Aw>k zB0C00-b6~oFCefIkpZsvEX-k1KJHIgG`~c!w;s-VF}DLLNI;kSJiVl(WP8qqby!D| z^(-mdg@vmToo&e>Qs!Z3^?-NH_om0|@J4$E25R@{sFmBU^`|>-YrEHRtTQM^*0r*& ztu4;l4eZOKr%#!1$_NPw$+^29#10LMjm492YVC_`tQNdZBP%OFsEdu_#e|D zv2E@UUUl-}o2!i*;|^0iain)6VJ`2hzkMV)p!$i1(0JL>A4b6w4@t&o;TGv&Vc5Do|u$p`o5ApSSGTacoc8;A<$q>fa6}4kWzBBaqnk*^&-zuV+|e zLKZJwzPwny@>yP<1Rf%uYrTtZ>@fkB+26m-7oNR&^@LCBb|-qYch;sn05( z%}o>@4IBdYR1V*|yW^MMKU(!;WCU=?x>hMySJ#NBs8nu@FA6{ms`~I@1Af#3;`ia! zUIM4`1){k^F5_-O>z96Olq_ot-@7)^&EY>g5SBGl%K5-}F?uLbfH0@@5B< zVwt$P>7}Kmb*EL%o$E9Wu^hUu&_s`_f}DRR9v--keT1ajVaSUl-K$quR(tI+wrWx` z@$};ug=AeX+hi32SkfH7#>taDu=`zMP;6iE)VK;~Vr!x$CVnk|x*;b5u8E0-r74cK zNx611J)`njTpR^qm7K&#?nA@Es17qVzPRR!)2LNN>mULVE&hu9nKK-0w5v)=OZS>L z2{=1D$KgFQt)$xQKFbF*L_IxEEg zQvZNh@J5)H{pF?>z4u-<$qOg@)o^%rqp*-j^-j;oK&`?^s-K#gBZ)#mA={pZvS{{_ z6E{M{nEKAK3qeC`9&7pI$W2U4BqZh<28PQ&r*TVK+S+0F?)fw}YS@o{-Xt2C{_gz6 z>4d^UJ%?cAQ3={fC$LB|Y!?-L8RBzu*|sPJdLpcoiZDSr#H73Y`qSLp^t{SRuz1P{ zfykTIZrr%>&4c}nG>kmesDh{{zkmNObe-9aX!|}@cPBP%572H!@}8exz4aKOZg#de zBrG~Q=;-ZjJry@;@QKv~^_@%2>4287Is-da=e$qq4DcwVXJhj2^;p<*%Vs|(`@c_6+8d7m%i=9f6P zjVvv1Ass)I&)E$^-sWrd+J~~P8$=^jtsdYSDyypSxK=qiIa&Fh2+@@Nz&%*t^Wxx9 zr*!?IoDav|7gyKR7(=O(`mIb*YH4w@mnE}xqPv*9uI=_?@ z2N@=BA)}7miEJAN1_o!$gww4>*24`6AxXJ4EltEFB{u==W*0H?w202i+9M+?Ydbe( zjw3bUJ<@yK}XWQ`1Kgn<2ys>yQbmCLh%o&1=R11ami|kF^3Tb5xoCPfekYi){ zMo2sD?sOU6g}poEKTvGj>$6W@fPQwq(22!=C9OC04PK+!@gBXL^J}qwsVK-`R8E{w zl9#7OJ!tU|XW%+bO-)iTV-mX9A=Xqi1>aiUFHNCsf`c*0`hI+QUeI||6Ll2Q;IA+` zewvrpS~o6wgI8|H-OB3fm6@5DIKb22zy0#zL;g#(JJ58I5*PL5$+NN1(ewx_c@EpQ zZL`5q0ndSqy(qz}&?k&1WHD@@uW!L6hKTf|vy>CK9s6FBmB90t#D7K(mksTn;<|Nq ze)imP#g>Is*EdX>%@bKib`^mMe)#a=(C5*W7wlv577oR^W}e zLC})}&3@$5`dE)eN$jAZ&r1MStAT-$7`b`#X1DPQ8WdQ`A9^n_^whGFhP^ z2ueB3@GVC~X(-p`rmpj@L0Wqghpk1??pABRPcd%hFlEv!wBZBcLNGcISc2>_&LZH* z&m>T13?!SZaqUf;GFeWBRADWTZKM z0Ri%6WHfNo22QVUX`SXE1#n9)^rS%OAY{xof^Gv~eh2FnUgYnL1VsEFV?L^{$BQWly zMAYru+P&;3Lkf$FktJ^gbV@)RteWor{*&{2-cU}TJzIs}IC=6UdCpVQrT1_U+Wh0f z|JKMv=QyNH{!q)&0yvJ?XT^b>pVDo-br7#N3@8GEK=ubykNJ`Pl%@S!9H(>I4=&D{ zzKPho0=S3_#R#j8;5wLb9!Ly)UM@m@u^o8EIJ)<#DbVj-pPhAvC}9HxRAwLAB{JfB zJGTl7nj-dL2OqY#7cVI(iLl?&6h8OjVA{;-{7ai4Tg*I0wG{*yShRaVlrirc8e&55HYDLMc0cy|S$qx<_5T8n*xU6cN% z8E~jmmWbalNV6?#T3x{~)~<+);1@8xN7|Uj6@59CN8#BEM$9jXh=@oIUcqzXmnm)> zMIDF1`^|r5#tyaRsWGiY*y^nd+d`koKGKqM`z5PsYwy;5cVlBWLWCmtq8T^d6{`Ms;`5DFikr%y%NJ335pxnx6eadR7Ayyy!q5umrc#Dtcyyf4g z-&Jlk703D?db8wotvRAiaQx{5`zxOd&CFPG@_n%tw+dQzob0OpXL?cX&!KZjw7tAm zVpT}Ed@UT>^mX$EQ`4I~vM#{Wvd>xVSVO(AuwVoe(}^}LLN5@6rG^h$tN2^;$B+Yz zBgIJYSXu;n^rS$`C%jJ=Y45uVS{qA z8iY9S?fS+iYMf+oVWnF%j>!kkd{VAWxMcSHw4NRoYe%e)t% z(J~ooNjVenYFzhJCZ`lD>+LgXlk`D*a|JuJToGdMsTOn{NosSQF{=F91}nGDj|@H} z1ULObC8m{xEnoLu#(rkh0HX&vkbY|o7Z(5o=8|@#y9mjiZD3^NCbYc;AbzHNxP}m} z_rgsQOTeP^UCxEq#H{)4Au3Y$;z#tD>NQORfU`#soN+X)hYiyH1*`#rl0yIK4X6x$ z=F-jp4BsQs;i%=7v`bXFUy5#8^2aD~9MZcE9okH3MDhw;$8x#|_y&tsO0JUpv;6wa zsYS)b`^-Ejsi*DJ3<_-&{2ZBB7FE=gyb z^bTuteR8`t`tcbJiCxgxrWTKDw#MFXPEuFa&}UuK4CEN#5I1A$ zbnc~p6MJYgAOkFO*LkSoo?3P6`_WOLp4L!{LHZr4SzaZsVB(63GBXih>X1i(jbZ_ z1UH+=VnH%uO~<*9uFGRd7BSBkpoN9R39HGescMoJY}|OtRJG)j%4043p}^bpOcEdhNP z$doOX0G#pf+qVIMMG?x~2`C|r@o$psxTJr|he6qz8{^ffcZaSa9nbhDAkc4iPFx?~ znHq2U=IvXFD7L(uoJ!P603YiUlNoI7?W>bD6C&7J57S@Gf*}y-6KPN1svXymXtn2C zahA2PN{9t#o9Ut8`1nMTqa2G~h%KNtxO4*9L8~hr3rrJ!bd{C88^M8w7j9)-*tfG-5(j0bnF0|-CT9ysIGw%=533L5Ym-YC~?c28_`89i1onjRqACDodG>KZ~ z(M|?w1%E&fuc4>6>R;m@xY01SMFTshI%2PB_vq+uN1>@TKsoRtRfl_%wR^?;N`H~8 z8vms4>pOx42b?PyAz<>Btfp9x<=dx!F-DF5oKGxVT>1lrv5>OOF3ykP!a`i4hY6C0 z6}Z=;MTkqve$A#$o9gQ7=H5_u|FdGID$~)*9c@rbciO8~Yd|Yi9I68^J zKpnEtP>72MadbmbT(2V#671>({tFCW1z0%9e|sam75RII zZ}TYghw%yv(*fh@Ie$zdVD9s&FFx8~!B~&;psG(H2eL=K4Ry{< zTxUC0L?DQSYz5w31iwKiL;}YvFFy_+f6ZOM%e=7|&UyTCAjCPltV?b?AF#?zyHJ(E z7{Y$|Ly)Qe5Ge%!zUgi(hoG;#qvLE}a_Wv&R=8E~Oko;Bl~#CN0UD zsByk-bmyl}PEKZ$UfFa5{pTPx7*QyL+fKX>(2yEfERxOf*Wl8_>QE$jHa0dYO}Frl zfW_g$>5~xkGzZcKuE|yvByPqyf>cyhtMSfmgom@-xqG( zvIHJv;wyK?4xBR1+;Oox$;{5fy2rtq_+sDti!I^q{L6uN;!smAbN_?D!wMoeeS?G@ zkOD%m5Iz`*S@MUA=g*^I=3qIZd1O1E#SLT<121s3i8db>gqgi-)8mY;j`ey0hg#AdoVSY zm4(IP5(Wk_t-LO_f`yscJTxgu5IJDo$_G3agze-D4IYHZfMft9uFTJjDTB`XIXO82 zo`+D}I39cx5)!ab2I(VJS4XP8+Wy*;t}=ITCvjAT`6G?kQ= zHbwLN0jw@U3_p6r4;{&m&qb^_BPu|m^nCla)iFX*D(mUfP=C!8PLN}eJ-1xs$|r7| z9XZS>d?t4d>eszDZrm7$B=F}bBQx{+Eh`VpVJRVf-{L6LqLRMh@f<*994OyE7l{$F z31Jgl|5rfUdT5mcnSvmne5Q6<@R2Xl=xT=Rxv)2-#bNaQQ{GNrHQrR3ZAub-=;xtX zdAJ-)m+$T|h`kqj{cCZPSWU9FWk_*NP-;R)xmlbUY;xG)wY0SIfIy)ni7JN&1cG9S z-s#iEO^HVd7HMK?N^};`e{vmi=i0bizZ_l8-pEW(^0Br)LShL>Oa!Q*G+PsYq^b{L zdqqS->op$N_S|ANo{SG7rWwB~VpJ&<544ojiIs#| z#Nz))C6NjN7rW7gjK(3y0ntGq)m5}ZMx;Wyu7+m8(JyDFrkrC{{=V+l^HX-`YW*@Yd~B3sR-s;cg3)(uu~9=9S0M)f%d6}8=(k>#05?O}3FBCnU7yN44iSLm;UNzmB+q#-sOrD{6pXou z)w573r>Ho!2KPhMNZhNoV2d z)pouG;xPgpA@xE|@z0%@m|#@RP$gUu;(xRhf|KPVgiFAlLJ&Mn!O`iJxyx=-kD&v5 zfqc5Eww4A-Pi9*YQNp+C0V$aZ0{JPx;^?+_CD(jdZVgIOLiK{Le(E}N`Of|O30R|D zZjp2NueA}WQ2QhhrqcM_$y(T; zn609sB6S)^bQK7KTST#fAATj37ManmvJj8}GS1_2d6^Ie;Ln)0S!_X5$_=Cg+&~~M zd5F3!9M?I%+wesomb(0oyQ!n)(EWnWEGZGe$w464>4S!vn#?3^1W1B|tGuRW6$&Kh zfoLZU9i7Cx19(x1X<&$I7_N(h$hAPd&M=F95&w;bZp!nO!lxVL2)4g`Kv5=I3M+1A4d|G*6h=1nQuf+%25=W(&Id0D^s zy&4&@(4IZYmo5o|6Bu^Lgi44WkFfo@(;o8p@Tr>)EiH(V+aPfSzeU1I-n0&&HhTuv z1fQFRmB~dUGeHIdH;w(>BO@7SJP;)aHgLdw;Q;I${g{V{PJ`^2aLA3YaI>p;!w^Qm z!9pmy*uAtuR0>h29`!)>#ReYTqjS)^_+!CVR#Z?S1q2x+UwS)|hJmXbIPYHj?~NQC z5Nh4Hf6iqsY7mZ~SVW8a09O3Csm<50CJ1Z*zap&nltN4;ES!U(-*dzKwb_}nr64T8 zTU_z87!9}dP(Khvo@5cB6eu~YsC3g`lYZx(Jt$zMHK6(`=yX|! zkV)}G#?XrpkK$zYIp>~LTnF9QiAtz`skx_+!;^lB?6|mN4zmKF1NMl&nE(bkF$NU{v4Ky|5 z^Z1wu#0*aTroWviEgn=O>R%#Z1x<)Y-dT>I*xlQE6I>$|1&3WWyt&;lB>X$>wX|V) zY%ByFmzf_niDC6kd~xck=;|^wZ2*j?(x$6^No6kN_MWiagm*yyiZ3MmX|yaT^%*uF z41}2UE2ftzBX+9OxTx-b+0N|Zcc@R~%cLXk^J%b4%F%eC9?KcNv9A0Li?qzG@VOJ&{fTd*fM35> zNHHY3%{gpleh_r}uJ`C|@BzH1RZ8=(%^2(^3{N&C%(Hp!Hgd{3+k@Y>68!>`U^+() zS14rW;1ERZ3fj;1sBs*AgFrCd={<#bRRy=`JSJ4ioH!>~Z_7DTyy!cfR;*j4eWgp! zr?4H}n8?&e?yD-GYuBzDtbgu-Cb9xO#G>?+_^+g`Bsw5%tE!t0uMnTv-BUk*FG-~+ z>v}9jV`J|ru;y6j61j}h3X20)kuJtOprR;tf)JT3aWPiewv&BSJop$5m3q{$Teog* z?^bre00C6NjFCKN+RD;=kr-Y}X$?QI+om-HXs|e|tR-ewcul&`=ayz#E*yq3O3wGPAN0u{kS3ndzn<5)wii z;?ml1*;BvwFLv8fZRmAI|I`v4b=T<*VSoA9BgVQ&YPr2AIToax31$J;cVw8qEs578=(rm;G1)wcvZtIaWl~ z0e@wGVtim#$~sG$&DIlaLyEH+!OMFCzf}P!Us~GQVpA;(XpBAY<=HAj487Dxg@TSW zi8S5wQ-BLmE8qPbsi1>l5Oa$8uvwMAn4H)_KbAl-IQ81r&d&b2o>^Li!@|Yw+V$+& zOpGDy77>sY+NLIB0kT57qJo^KF?#Hfwj{2bZiVl@OH#4md#2sm-6&nxmp7tf1(1iW7^hJyeZ8a=JUZ( z_0AOLckkrA8X)~#y}0)YY#Y6pLX%)D&$-b|WrQV4adc^WZZieAT+^W0XAwxCSF z2w-2D^SW(_Mtu6f@Yw@475)JY! z=kFQ0J&Tq!_m|1T4rSclz!zy94SoQRFl;{k{(S>?cX#{Wmt-JX(|~sD+I4?rC6Cfv zChsghKIKdBn-b8F)x@bBt~#1KY%e+6>d5qqv{zwebG(D3yvCEI9QFHwLkpp+5 z9mXw5NJz-ub_E_8OPE3d>=p;F=yqp5|2Yg5F%f74yQv&J4bz@)K!8vBVPo&?%;dVk zoZtF=uH!_ht59_d&bz{!)SUOQy|J?+RB0Pa9gvssa-&C&R{RUWr?)dJq}OyEtY;T< z0vHGs(?-#bnqPRQ9_5BrkD)I#Dk{p%mN?1M#fxh-YtaI$U&W!r`};?3+&DJL%${+n zEVNrs%kJzV4ODr;+=oP(n=^OeVQH!8c_~eH;42dU5>e0l33}iMvt0cqO=_W($w^Cz z$HE7jNEuN1IYgEYs_LH_5V70Dw)FnVci!tC>T2iuS-BI89^Jm}o!}$PlA|9573l|E=?L77u%@;3T z2-l-Li!(%&SJCSf;@a2iF-Z&P^$Ny;qW1_`Azqiz@TQhxgJT7WM-h{7_t_7uxl_LG zEtEPK$ffa}BuT)3;t0w>ZYcLPOyN{xw+EQ?d;R*gvy02^$NQh| z-o4vm%~ndD(s5MZz9&shx?_5Y20jNh+H4AV-!-fyX1-qEy)D4)c0N0MPi}TM8hBO) zdX5PWR2{5B!f!jdZ>5Fd7v=p4mZ>1bYSgLIH&RO*Hq1nOm0mK>hMp^|+TDoqh3?_O zV>wzzMaQjzm>+FRnjT1k57)y752nMDM`0h}qDsU<;aht9JFtr` zT+m?HY4>@Kizau!zMqaY zhA@~hccvY-(#Y)7dw1{J^{Q)EdCjpGSp|~V5Vl~!+j85Vf9}KDJcMS{!NkN1QUMWF zx9`=uo?dH9Q`p=sySdwWcqG`HPF5LSfBmxgwnYGCgBaAY7W zpS+2)n_Jx?&p&(g?>})yQxo8o5h#LFy|Q3p*Z5-Yc7R);TYpRdo0>65FKo$@L8%x; zudo`d`b;n2#sa#&+Xs8heRfT0(_B+ST#8WQX=|GK>_%EA6v)WymZO2_-s9=2JpXVLaRBHfCq{AFoD)%moEbEvhMeL zTR2aE_;6-=Mix#_4eL|GUSk*)!13{P3G&O`v z6Lp)yliB$7A?_j7`LfEqpFf0BXZKTj3S|dF-jlc>>FBDXI|t8|9C&djbyP>CHK`Qo z)48_T*(}VyP{)c8*&@ifz;VpF9l;O?t@ zn3j=_H@$+IbsjIQ*t=yp;EcAv@Y_9hj5vrnXEto!Jfq8Z`n(++BWIpm>Ihj{OhP~s zB4>nO*VTRY9o9e5LQUIIQ6(SVnfK#-%M}U( z!UODT#lx!(>VVcE$5PNHw(;3pt-FFt$Up zqszX^ESc0$JcCT&Zll?%k%@i47F>jqvV!PYY0yCZ-Ymj!8A%6$1XhebYD-LjcV9uT zX9TH+RnT5dR33Jt<-|*PI>%)8vnn;Vy*4zrfP+C?hpc&(X0i$XCN5_Z7;hT3A5 zZF_GkfjScl6I(p_&ToZ9 zu$PN*Yyv2dkfLtiW{FcSWF{MmeQ4;=6;S)~KAf96c4z|WAsji1L?%{F4eR07XOMlL zl0N4-al7Zl8SrSfBDxOb*wni_Zg>O4@p12PcXTfD^kQ43T)cM8wankWrL9i8SO=vw z%}l{B=scVw$m1T9C+8KFz=?P5soa%i`zAk})MISib!Sqio9=c5cbxs}?N6uU z5@XOH@Fa~&b-X^LZRIof3HS3J+`RdVd;Wtn!F`2&$orEGqTi;9#!Fl)?NPRHmN&9_ zuwm@ju|`C5&{3Q9ZD#D;J!5x0j-tAec8h78HM*UC(*(=ngyKOUTte+_jR!lZt3p&R zB$4E~B4T2)!)n*Vue%HfyfkTuVSzlVYw%vf(~GKXXe?&TO&x(boY!|c&fO&rj{wa( z@ze1odRx+H{U-JQyAP%s_@YoMw5L9i zcQbtWs;sP#nVd&v(wmD!fbHQz<00LEoJQ!UoM36QP=GF8xsn07Dl~uIS)fv-)%-!7 z>?w<5Z>7^4Y%*~ zV>}qgjtujv3!x0N3XFP$n?Y)^LUMB#aRu)3r3{7 zIUf9}m(WgZM0%p~$dc7VclpklvxNGMqPc`!fx?1U@z}ZMNu1^STgO}}C^(Tj;cy*W zA?XhBNVxa!-zOkMhza=K{rdtq^FrjkLY#HSFF^9vxLvyh`-Wh3RVDR)gH5m%jyf%F z7tD|+$`S9TyDBmsxyQjlizr@JemC6>!shUCvlR%JyTKa}OA=`Z4W^rR7W7E|D17zm z)j_V0rvG4TtI^~8@B6g+p*8~M-X;lojyLx0>wFPL-f#v|8}B3eTig5h?kS(EY!KZk zgn4DBP$q#GVM$5eN!xzFEj)hH+POa+nWhWHBI<*963H&YM~-UUzb9!s)Y3*)FQKI< zIl^5*`AYnB;=)&hlZtQm1}nhD9T;)X!{}yn7G!-EF%4J?vXmK&tl9A?UIYRqXBU>xyRwO2)a<8Q$H)qM}g;e!ChKiJj8c zHf&t2H{8I=5s&&Xqx@Uje%97Sc$Qxtb>~I^a3;PyWKU%pci?rer6*4=h>LEisln8Z z#$;r+TD`k;@nT?kA7$Ck)44jdXr6G=PAf*XP4g*i0aSnT*u`#92BljrH2^Di?OILd z6{FM`DkNG2YvIK?CQS_B!7h5OdO`NQgb!E_bMe+eWohGvl#~jMv@9mzj4JB--FrAR z7lUc^eSR5C*2dIyNEeNuPj7wD75cv#W2;kCTB=ehQb#Q96|nC*$qT`4O-+V};@(a3 zKXRh*GddNLV&2ZOym_;nw#Vs@B=-!tf+JvR{?Ccy00s3PEPU+*EmKVHBAYouE=$@= zWU7DF2W|JDXWvTMlN{#Yn%C`wy&3HUvri_4+^_6T7ezYvLK4YH^^I60xli?CD_sG8 zpvxTq6jDsew`INezypvnk#|6Oz>Z?`Y777bW8Szf8cf;RpJt>>{!oZ2PjUqi?gz&G zkzAdi6QjvG&E4joC*Eku1M>8+lZ{JLemk$Doz==n=YACsl^!^eBnw**L|ZII5n&^N zcV9P04-cpYF>c_tUyb4iVFca2rSJU41Wh5&7Oz}6>~J;%$Qgt4zBZgo)HdHC`J$=t zdU=zaUkBVL+#(f~msP8>qGABL+@^kh2KxFdQ0!rNo3gJ5v$as(4!GIbm;G4>}IU0M@Vwaf#RRil&1R<1g zWO-a#^KDG3{<=$($k3|(_;~e+8s|*9N{3}N|Ai3SblAr2+t*IdD7^*)T1VElhex~N z!#BMwBUqb>v(UHdOE9vN2HSDm$q}4)Q5~Lgl$8aX;*5wI`;g~}1gJWl>RLtsmePFg z_xNamtepDT0~`)ec}yvN%dzW-^#~lnfQ5~%$>ZFqXL&s*XSui~@%uJ~Ju!w@$tf1* z6btux_(MAVOc23x$!O6a?ti@jK&;Jdg#0n(>fMob9*u!lGlUf-sc8f@B66Rh_ZgEg zWYVO^-U}8?AB5bQv%SAI&1YaxP_MmfoVv!hr^Nb<-ib_v*!ws#o2)6ltLobUg?N_I zmZt7#s;R-c#cQb3x7o+4TD5CqoHd%KXBQOCuDHo27beZSWC116 ztOyWd_=sRe-cbg}2EX!}O^Zoz(tJlfLUM#ypG11kSsx!?Ob?`7Cr!m*LT*hDOvWZO zbfKH+K+f~Kc|Q%phzCLnM{HA3t8o@u8b!d~+fTEtX@A7I;LS zMHaCn8q*6PuGRr(aN*Pe(=RBuq2h-V*WmZ>IeG@;2r6JB{r){^f)uOQuXmg3bsHw@ zdDma|H@Z7Q?#NDU(*5GA$34$Dfzg%k7Ba|1(3Io_QIPI*y#d=x@};%{D^5G$KI46+ z`46XO0JT$97E^+(t*vQSmI>Ma#~((fruB%oXP`5PTW8nk51DfcnA&7EAf-xXb9QLr z7+1V&6PwK(V=#=mJAA=QAaE5NN` zTbnlGl4mZ0q+2)_={_G}j*M8fN~lbQL}(GhBtYomcnJ_H#Lky5U*wddq2JsrhWQUL zF^J+}Slj?@JCc*1Mmmn-{4Xyb@9l=^VSz$BTR&J5Nz8kcvWa*jh6f1OQtJ||?8=74 zc_MX#Zx!UOoTs`zMwSa@uILG)krQ5~Df1e@LQZK*J7*G@}9#b{)HNSS;~Z3U|>oJwRwz?$A75XYw?!F~-{Yhw$G<{bB;ZJqwI zjXp%xVOr&&uJQSn#~7vqz{ld`@_p83lqK++(lr6{Ip%pt70#tc6#opGXK`){EsZdl zMaZk|g7K(eeot>0<^7q|)aB>Ez;>NF4fCm@@Of31=D|^4Y`Uo4@=Ulc%E7*&x6McI zZALSQ(P3vkBvWlXYUk-^Di~=y%;z-ub$2L4np-d4(6}g13bGL1AK$&yru+0O&U(n} z_`!!sW|^WcjvLoNffXu)lduBG5G%c=p`jr?&z91dF6yPFbcf>-^3iHuc?1heWoDs` ziQtu{%6r1!&R|YtT*J#{rKdy%iOeI_G43e0;(Ei8v)mU<^+&=h{JXWc+&aq(}f_ zxe|E-G@3ud`npow4P2I#p^I(0?)cadv4Qg-kFh~2*LFNs0#0oIIoC)CoB@|cAM*&`SmlUSNFu;1V|aSJH~}Vu zNe+O!08x$DksMrvw{$U80e}~y^+ah-L- zlH{j+^M!l+>ijp|lGnd`UYLKdsOs#H?D~xwHna;2v=pZ@nRN|_tRD-HAra!!qOEmI z+P`Zg9G4_|BbNraoVZ$0u<8EO$ewD@2o0Ebov8;{6GJ~HJdJrl03E6Ebatf-9Wyq* zKiSKx7Rf8xn%e&9Me9|OFa+;VkppbNNd%{zXNQb z>y^Cv#Tc&A8l0eZ)pZ(P40shH7pRqWR5VX8p;%o@gKdIoRypl%==%&kv4`}%SNMQQ zI8^Mdk+|TCeBtHHoyGGXs zMIgqFS*O(nTOo=gpn8JLfT=Q42h#^5HA04pF!h~)$1t2VdBq0L1LnfSh+GKf7JND zIfA4t??cCqg%cr5ik|TQA_+pN-^%R>1Ng&K>t{2sO#-YafdoXFBh=ENjY%?_%TPbj z@QDuGK5n`@1JZ-xX1UB%kk_ZY>ZEC`avas`$nTnw#%R67%G775_ge^C25}Vg+#5R( z!r)Jb0krzncc* zvd+=KBm9SI+q@ru?rGM5quJQrK1x6b{j13k7I$;RH+G-YW7bUtPk3(%B36VV{)n&o zDZH0Ba4^=zwy)-Df}7Gg%A7L%`J>F%rMX4B&ELG83Ds_E68QzgSM>TGsAMv@a*TIM zN~D8<$a^Ft>^N&F%Jl`5`al%60;Rt~^#nt^@6@VRdbda6k|gVP9;fL+i9%dPKNleq zW!$BcV=kv%5`%+ydwJK+pRWZ{UDh>`XF38gSkK%#|eT-Aw!wPhjp(i8?#<;{|p~ zxlTmGy8VOSKs__h$aQPsAO3x+R<~3Cz$ok>E&;a~?w^0zZdiK8&KXdaRMRy7kdOUo zx~9qSkn(a6&nouy3IjqGXRDe{Z+!A*Sr}}I7o?0BfT&9;N4wCD!!*@7X{$!lu@4vp zb#ArMAdlIzyUpup{}38NY(Vgt4E$+qtCQI{5^t^SKk?2o807uOk6s)|s*?*qB^SUQ zo|JxijFFE!s;_axwyWT9u3Y)$F16VC)!tRz*c_b7+CqcK$T4y3QI-=(Nh$=k(n}Ne zT64HQ7I`Yn2+Rv&G@*sP(D=f%416}CLuAHNQUreDBwIU z92%_Nd=7iaKevbM!|mYFa+YrW#iP8Z^}^1Sy>C-A%Q8dMUXEamK+B82U^0TSV|=3e zN^fPKpP2hh&T(9@;f~I+7$W=0(xymU1+ z@Mqwhc`_!^>M~|e7Ma?J8N|pu+>dgtb)8cozi%)uLw%zf^ji*El+?hpHYWDfH#FH9 zs4Ri7{jY-M)u9rF* zKfH&3WD&j+Lz-)z`_)o{O%TH>n;VcXExNg{VmfzSp8d5bFn)dYdAuJ$0vp;5xtyO7 z5s~Z|c*Q~c)Z2m?5*4DkkD`v?j2UDSX9UufDHc@mm0a9N0~7W8Yjqs&AWLDbqjSGZ z$3qbjO0NsahSKtzPrlqN?YCzd39N-N%wqrvSKy6!6gSdF*K|Pjd+5maLgS}irzvIZ zA7d6fd%4_hHhfhR-8}RyLndR|#TfQ0z4zeo)RCWY)YbS3TKyu@Fr#IN^EFmTtb}2h zn=d-^qNcZyoeA|^3?~{etG{oNLhAS`_3PD*J;cqoqx_EbOD?$^VrOS@h@B&i4^l=p zisq|FE4wAqA*iiY!nhtMMa}r(Fd02mOmMpf%`|i%Bxo9Bq2NYvlC#$2C|6fs4p&d! zjERa^M-597$=U zdlia03^p(F>w0RnL#=_axMJ`4{#m`Pj8*GI6=zlHPH#k(Uj5;+ga!o6Q2k5(>&r`) z)b7wEWHP*V#)Xl6)c3(yb*{QbMnoLJVOH}so@Xmd`X68Wy3GIaH3FRf>))|%{@2$s zGwuHUHCy9{`GaxD%>2AlZIv-j)Yr6?!{69A)yu1zu#QmD7s~~<+vzF`Lq41v$$!P} z@UHncyv$X2psU|Ie@>cPqfN-WNn&)0`upUMRt7a&k8is8v}Qlcx7x#{RKI)v6d!c; zZ{wR{b1{3&?eQKd?xX4e2T0w8D(;FI+#}AKEvzrUN1-Z zfTG42-pF%-zTwfmp8VC~=pOm2<}>WeG$1|t47K3;S#`l;0nAl1eI+HP^DJ+Z{qPg9 zsqoeSezSJr?XNFD{`&gaFvv@3B0yq2%+)_9=p5rqsHwaxr?vPqLZ46Xcz4_Ka3AFu z{#y2Yy8KoBnO&AxE^9v2cW2XMTu1kCqyrfowIKJdSjGcEX~X9bB4&Gl8@Uiyov}|ROXh*2qK!TL3r77f1NWG7ETAp zt?DntBgwzsy?a+Cwo;9Tj2IEE`~-!f^EDwLC)crK**F}XXqg`amknN3S-s_H$mh5k51&781ivAoyetjSUJ*8bF_l1+kkX5r7t+dp5*@{u z!&98LLh$|`4WdtIRbB9;&=|5f6uU-`J@6N53SIdQw};POzSJiD#~xGNf#Q_KnketkTo>!+|rp!uU>)tIcYox zlt3&N%a8lV=U)7PmY%o1j&1V%`0|1if5ttTa5lsMRwM9H2m{Y77kydy?{5}_#Q-3H ze7G#5!fzVz)HaU1;{jzY;8b@N%wrZQU9OyY5As2SOU8Fy^eBX$Mo1+QT*^dFS-bXj zLYcD@Mz8$KXKG%biwt;-0Fl_jhJ!D~b^`9gsI@|DP~1!fMwYtLxz?}?vXz*+)rPoq z>YX}Y90?Uk{6Hpa_wIcxM=8(G6GcwaR6=t=)XOj;nUn_-EDJtOUEoO|8Ypp!P=2nc zCHDQoFh|6@z5RN);rs~TlaT16N1!hMk%7IpBH3pwPaLhBK zu0VN|D}}hZzmX^sorZq1V@8x!TYk~@B*Jp|^FHeMR@6F6=!1r&? z1<*CFS>Zhv?$i6WNp6De65qc*1~AdTH=*|BaLd$&SNKhL0C2p*Yl`KhgB;yWHg4T& z;Era`DI{->j~-^_LuE{L^~b-CYW`P{5oj5BEvLs^2B9iujvRFEZBOf&KV+PL+q3h` zk@8o~XRLBbW_vOXleD0w^8^uV=)dIL8)Vcd)}aHV4f#p>|Mflp{0UGQ_3PK?N}$Kw zH0KR&oib~dqz=SQz?Sd|ALIm`6#nh7^_+Q{|2cdAc@ne3A2BX;8MXzE-o}8QH;cKo z!kQ6gO+L}OLE)|L|2Z_j9_7_XXymGTrW30#j{Nz*P)<~6JFS@D&OaU9=UDQ9t z9Cy~R=H$&SKInB@OGp7jilmOFt#@lC>W7-&V2be18rQ| zuFo?gGI=P&K=NDmJ`)&@M{q+FaiPsuI|TM$QN89JT6Q;AJ{Ao4nGr!*92pu4VZmVT zB~mUkgYX3{jfv5QOlqf9OIQJ`qo~6Q1?8OUw4zD>*!^$-bE0-WO=2`xGzx_T8LsIy z|9VaHmhBp5zYpSF=sRpU+yNIM+>9}|D8%X}6-#mzJa}=b%-=U2;2T#I~i)lkE3F2P!I%Xh^n>_xUN{*n6rDDcIWB0kR?cyN7%Z6!DhX)IS`~ z9=0<@qUFpvvGzOr`SU`F&w_xi>D0W&eqe3;tK>A%GmeM+Wrba4qt!c<(+tL)cgJHV zp%MgfTX%OuS|(2@o?pj5SmoUG**1RRjL9{t_NJkUebhZ-malk>G+}Fw7ag=zWDJ=O06P+E96uE3Lq>;1H4XvAx2$ zD-?nnxPqIW{nli9_&@6U^M`s#_Aj|tj z5qkqB?VWOmi(VClKbDUKtl9zYQ)%GjX$-P3ghS?w@+tQ=zw`Aths}^6{NR_SFG{dO zrKhL=>+Vd!dBd={O$8@7BE7NHroHITKrx7*q@34Ldgisz`U4*Y9Gm&uVl0F`JGdC1 z{u7&^kZD}4v{^j&`#q>#4FxIW0%xdQ#Hz2W zLz%IHhNn?01V6dq5<^8T|6Q8N$^RJicOCk7-}Gb9 z&2KoiB$(T`p)wK4sFue9{RT((JoMaL(^k-3)O_|U^DD^$G;Yd3snO-_B1-)kj|r)Y zs)pP%oyYDmDMF`j!<#z)`JU?jq~<5Y4&4P5q+eW0MUD2n(D7MM@EMhTAu=UxPSd_^ zl!?cWTcWxxeLlV2-#x`YJB;PufLc;yN zOfQoOH2N#5=^|D^@)!8DK@hUFZFPK^ExW39@5bW$L9&$1ig`ozmL!yjMNEXKO+-g# zdBF0io=bEZ!sN_{C#?ekwCr^zLu5)|Rl$)WtwRN-sewA0jCo+AxyHZ8bkLqj=x`y} z{56>gCblq3CI-MAGqIE!u6p;nftHpGDKV#?Lyb;?z>^HbD|T}t56qi$7N)7uN-X_= z4*-fLMOY9Oz)Yua=jtVUQ-PD4S-ysX5G7HLvBctNUrS4cf}(04r7xCSncK#g8L4%Q ziAp%S2or(CC-EzIfyZ!4={;Cf6|6`{*XF3uV(ZraY99y>4==qdtrl@a8vs83@dy|+ z2|F_Twvz}1Bn3Q}TuAAf@#b}x&YjiIgGh0Xj5snGNUF!Pa(UWCEZJD-7Zh<1h6)7o z$iE$1Ik;mu;83Sc0V+d)%_PY8ZA4-kG zt|^KiUTl}*wFQNRGL#j6BoVb`SS)aBm)@QK;OBba+@*}>VIK(8-RFKxVZ)b_W0F|(DHAlu;HGw#u2bXpGc{YVce^HUDs-<8>8XcuGfFE5EP xHNM%4VYQr?HhyQpFiEhR)wvn&x6k`U-CK82Iz`owF$H61)_7C(}{6A|Aq#OVM diff --git a/nbs/tests/mpl_image_tests/baseline_images/test_33_multi_paired_different_sizes.png b/nbs/tests/mpl_image_tests/baseline_images/test_33_multi_paired_different_sizes.png new file mode 100644 index 0000000000000000000000000000000000000000..94778eba26c1fff918bef5df0938fb292269af5b GIT binary patch literal 69119 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 literal 0 HcmV?d00001 diff --git a/nbs/tests/mpl_image_tests/test_03_plotting.py b/nbs/tests/mpl_image_tests/test_03_plotting.py index 8d82e432..f8c588db 100644 --- a/nbs/tests/mpl_image_tests/test_03_plotting.py +++ b/nbs/tests/mpl_image_tests/test_03_plotting.py @@ -451,6 +451,34 @@ def test_32_multigroups_baseline_change_palette(): plt.rcdefaults() return multi_groups_baseline.mean_diff.plot(custom_palette="Dark2", delta_text=True) +@pytest.mark.mpl_image_compare(tolerance=8) +def test_33_multi_paired_different_sizes(): + # Test for GitHub issue #216: multi-group paired data with different sample sizes + plt.rcdefaults() + np.random.seed(9999) + + # Create three test pairs with different sample sizes (20, 10, 40) + c1DF = pd.DataFrame({'Test 1_pre': norm.rvs(loc=3, scale=0.4, size=20)}) + t1DF = pd.DataFrame({'Test 1_post': norm.rvs(loc=3.5, scale=0.5, size=20)}) + t2DF = pd.DataFrame({'Test 2_pre': norm.rvs(loc=2.5, scale=0.6, size=10)}) + t3DF = pd.DataFrame({'Test 2_post': norm.rvs(loc=3, scale=0.75, size=10)}) + t4DF = pd.DataFrame({'Test 3_pre': norm.rvs(loc=3.5, scale=0.75, size=40)}) + t5DF = pd.DataFrame({'Test 3_post': norm.rvs(loc=3.25, scale=0.4, size=40)}) + + df = pd.concat([c1DF, t1DF, t2DF, t3DF, t4DF, t5DF], axis=1) + df["ID"] = pd.Series(range(1, len(df)+1)) + + multi_paired_diff_sizes = load( + df, + idx=(("Test 1_pre", "Test 1_post"), + ("Test 2_pre", "Test 2_post"), + ("Test 3_pre", "Test 3_post")), + paired="baseline", + id_col="ID" + ) + + return multi_paired_diff_sizes.mean_diff.plot() + @pytest.mark.mpl_image_compare(tolerance=8) def test_99_style_sheets(): # Perform this test last so we don't have to reset the plot style. From 869a479aff0844148e901eb7075d65f9004dcc52 Mon Sep 17 00:00:00 2001 From: Jacob Luke Date: Thu, 29 Jan 2026 15:10:42 +0800 Subject: [PATCH 3/4] Update citation of preprint --- README.md | 11 +++++++++++ nbs/read_me.ipynb | 10 ++++++++++ 2 files changed, 21 insertions(+) diff --git a/README.md b/README.md index 269d406f..10c80543 100644 --- a/README.md +++ b/README.md @@ -173,6 +173,17 @@ snippets. ## How to cite +**Getting over ANOVA: Estimation graphics for multi-group comparisons** + +*Zinan Lu, Jonathan Anns, Yishan Mai, Rou Zhang, Kahseng Lian, Nicole +MynYi Lee, Shan Hashir, Lucas Wang Zhuoyu, A. Rosa Castillo Gonzalez, +Joses Ho, Hyungwon Choi, Sangyu Xu, Adam Claridge-Chang* + +bioRxiv preprint 2026. +[10.64898/2026.01.26.701654](http://dx.doi.org/10.64898/2026.01.26.701654) + +[PDF](https://www.biorxiv.org/content/10.64898/2026.01.26.701654v1.full.pdf) + **Moving beyond P values: Everyday data analysis with estimation plots** *Joses Ho, Tayfun Tumkaya, Sameer Aryal, Hyungwon Choi, Adam diff --git a/nbs/read_me.ipynb b/nbs/read_me.ipynb index bfe49362..de60a0a6 100644 --- a/nbs/read_me.ipynb +++ b/nbs/read_me.ipynb @@ -177,6 +177,16 @@ "metadata": {}, "source": [ "## How to cite\n", + "**Getting over ANOVA: Estimation graphics for multi-group comparisons**\n", + "\n", + "*Zinan Lu, Jonathan Anns, Yishan Mai, Rou Zhang, Kahseng Lian, Nicole MynYi Lee, Shan Hashir, Lucas Wang Zhuoyu, A. Rosa Castillo Gonzalez, Joses Ho, Hyungwon Choi, Sangyu Xu, Adam Claridge-Chang*\n", + "\n", + "bioRxiv preprint 2026. [10.64898/2026.01.26.701654](http://dx.doi.org/10.64898/2026.01.26.701654)\n", + "\n", + "[PDF](https://www.biorxiv.org/content/10.64898/2026.01.26.701654v1.full.pdf)\n", + "\n", + "\n", + "\n", "\n", "**Moving beyond P values: Everyday data analysis with estimation plots**\n", "\n", From 776c4b9097ebc1cb56b2898513267130f7492799 Mon Sep 17 00:00:00 2001 From: Jacob Luke Date: Thu, 29 Jan 2026 15:20:00 +0800 Subject: [PATCH 4/4] Adapt to updated nbdev3 --- .github/workflows/deploy.yaml | 2 +- .github/workflows/test-nbdev.yaml | 2 +- dabest/_api.py | 6 +- dabest/_bootstrap_tools.py | 8 +- dabest/_dabest_object.py | 6 +- dabest/_delta_objects.py | 8 +- dabest/_effsize_objects.py | 10 +- dabest/_stats_tools/confint_1group.py | 6 +- dabest/_stats_tools/confint_2group_diff.py | 6 +- dabest/_stats_tools/effsize.py | 22 ++-- dabest/_stats_tools/precompile.py | 6 +- dabest/forest_plot.py | 6 +- dabest/misc_tools.py | 6 +- dabest/multi.py | 16 +-- dabest/plot_tools.py | 10 +- dabest/plotter.py | 6 +- nbs/API/delta_objects.ipynb | 18 ++- nbs/API/effsize_objects.ipynb | 36 +++++- nbs/API/forest_plot.ipynb | 9 +- nbs/API/load.ipynb | 16 ++- nbs/API/precompile.ipynb | 8 +- nbs/tutorials/01-basics.ipynb | 45 ++++++- nbs/tutorials/02-two_group.ipynb | 29 ++++- ...shared_control_and_repeated_measures.ipynb | 28 ++++- nbs/tutorials/04-proportion_plot.ipynb | 85 ++++++++++++- nbs/tutorials/05-mini_meta.ipynb | 28 ++++- nbs/tutorials/06-delta_delta.ipynb | 43 ++++++- nbs/tutorials/07-horizontal_plot.ipynb | 37 +++++- nbs/tutorials/08-plot_aesthetics.ipynb | 117 +++++++++++++++++- nbs/tutorials/09-forest_plot.ipynb | 62 +++++++++- nbs/tutorials/10-whorlmap.ipynb | 29 ++++- pyproject.toml | 39 +++++- 32 files changed, 671 insertions(+), 84 deletions(-) diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml index 29bfc575..41e29a16 100644 --- a/.github/workflows/deploy.yaml +++ b/.github/workflows/deploy.yaml @@ -11,4 +11,4 @@ on: jobs: deploy: runs-on: ubuntu-latest - steps: [uses: fastai/workflows/quarto-ghp@master] + steps: [uses: fastai/workflows/quarto-ghp3@master] diff --git a/.github/workflows/test-nbdev.yaml b/.github/workflows/test-nbdev.yaml index 948a7b69..fef02636 100644 --- a/.github/workflows/test-nbdev.yaml +++ b/.github/workflows/test-nbdev.yaml @@ -4,4 +4,4 @@ on: [workflow_dispatch, pull_request, push] jobs: test-nbdev: runs-on: ubuntu-latest - steps: [uses: fastai/workflows/nbdev-ci@master] + steps: [uses: fastai/workflows/nbdev3-ci@master] diff --git a/dabest/_api.py b/dabest/_api.py index 0f4ad140..cf34b9f4 100644 --- a/dabest/_api.py +++ b/dabest/_api.py @@ -2,10 +2,10 @@ # AUTOGENERATED! DO NOT EDIT! File to edit: ../nbs/API/load.ipynb. -# %% auto 0 +# %% auto #0 __all__ = ['load', 'prop_dataset'] -# %% ../nbs/API/load.ipynb 4 +# %% ../nbs/API/load.ipynb #218e4f14 def load( data, idx=None, @@ -112,7 +112,7 @@ def load( ps_adjust, ) -# %% ../nbs/API/load.ipynb 5 +# %% ../nbs/API/load.ipynb #570ff65a import numpy as np from typing import Union, Optional import pandas as pd diff --git a/dabest/_bootstrap_tools.py b/dabest/_bootstrap_tools.py index 7a3e979c..b4333635 100644 --- a/dabest/_bootstrap_tools.py +++ b/dabest/_bootstrap_tools.py @@ -1,9 +1,9 @@ # AUTOGENERATED! DO NOT EDIT! File to edit: ../nbs/API/bootstrap.ipynb. -# %% auto 0 +# %% auto #0 __all__ = ['bootstrap', 'jackknife_indexes', 'bca'] -# %% ../nbs/API/bootstrap.ipynb 3 +# %% ../nbs/API/bootstrap.ipynb #4231300f import numpy as np import pandas as pd import seaborn as sns @@ -12,7 +12,7 @@ from scipy.stats import mannwhitneyu, wilcoxon, norm import warnings -# %% ../nbs/API/bootstrap.ipynb 4 +# %% ../nbs/API/bootstrap.ipynb #e86b4b8d class bootstrap: """ Computes the summary statistic and a bootstrapped confidence interval. @@ -230,7 +230,7 @@ def __repr__(self): b = "[{} CI: {}, {}]".format(self.ci, self.bca_ci_low, self.bca_ci_high) return "\n".join([a, b]) -# %% ../nbs/API/bootstrap.ipynb 5 +# %% ../nbs/API/bootstrap.ipynb #00c814b9 def jackknife_indexes(data): # Taken without modification from scikits.bootstrap package. """ diff --git a/dabest/_dabest_object.py b/dabest/_dabest_object.py index 01c96d5f..53b36360 100644 --- a/dabest/_dabest_object.py +++ b/dabest/_dabest_object.py @@ -2,10 +2,10 @@ # AUTOGENERATED! DO NOT EDIT! File to edit: ../nbs/API/dabest_object.ipynb. -# %% auto 0 +# %% auto #0 __all__ = ['Dabest'] -# %% ../nbs/API/dabest_object.ipynb 5 +# %% ../nbs/API/dabest_object.ipynb #d3c6f47a # Import standard data science libraries import warnings from numpy import array, repeat, random, issubdtype, number @@ -14,7 +14,7 @@ from scipy.stats import norm from scipy.stats import randint -# %% ../nbs/API/dabest_object.ipynb 7 +# %% ../nbs/API/dabest_object.ipynb #350b12c1 class Dabest(object): """ diff --git a/dabest/_delta_objects.py b/dabest/_delta_objects.py index 07b15ea8..b843ce06 100644 --- a/dabest/_delta_objects.py +++ b/dabest/_delta_objects.py @@ -2,10 +2,10 @@ # AUTOGENERATED! DO NOT EDIT! File to edit: ../nbs/API/delta_objects.ipynb. -# %% auto 0 +# %% auto #0 __all__ = ['DeltaDelta', 'MiniMetaDelta'] -# %% ../nbs/API/delta_objects.ipynb 5 +# %% ../nbs/API/delta_objects.ipynb #1814896d from scipy.stats import norm import pandas as pd import numpy as np @@ -15,7 +15,7 @@ import warnings import datetime as dt -# %% ../nbs/API/delta_objects.ipynb 6 +# %% ../nbs/API/delta_objects.ipynb #1bb53e06 class DeltaDelta(object): r""" A class to compute and store the delta-delta statistics for experiments with a 2-by-2 arrangement where two independent variables, A and B, each have two categorical values, 1 and 2. The data is divided into two pairs of two groups, and a primary delta is first calculated as the mean difference between each of the pairs: @@ -382,7 +382,7 @@ def results(self): self.__compute_results() return self.__results -# %% ../nbs/API/delta_objects.ipynb 10 +# %% ../nbs/API/delta_objects.ipynb #18462ec5 class MiniMetaDelta(object): """ A class to compute and store the weighted delta. diff --git a/dabest/_effsize_objects.py b/dabest/_effsize_objects.py index fae4b10f..fce3e822 100644 --- a/dabest/_effsize_objects.py +++ b/dabest/_effsize_objects.py @@ -2,10 +2,10 @@ # AUTOGENERATED! DO NOT EDIT! File to edit: ../nbs/API/effsize_objects.ipynb. -# %% auto 0 +# %% auto #0 __all__ = ['TwoGroupsEffectSize', 'EffectSizeDataFrame', 'PermutationTest'] -# %% ../nbs/API/effsize_objects.ipynb 5 +# %% ../nbs/API/effsize_objects.ipynb #430d4ea8 import pandas as pd import lqrt from scipy.stats import norm @@ -23,7 +23,7 @@ from string import Template import scipy.stats as spstats -# %% ../nbs/API/effsize_objects.ipynb 6 +# %% ../nbs/API/effsize_objects.ipynb #9d988bdd class TwoGroupsEffectSize(object): """ @@ -818,7 +818,7 @@ def bec_pct_high(self): return self.__bec_pct_high -# %% ../nbs/API/effsize_objects.ipynb 10 +# %% ../nbs/API/effsize_objects.ipynb #024b1d00 class EffectSizeDataFrame(object): """A class that generates and stores the results of bootstrapped effect sizes for several comparisons.""" @@ -1658,7 +1658,7 @@ def delta2(self): def is_delta_delta(self): return self.__delta2 -# %% ../nbs/API/effsize_objects.ipynb 29 +# %% ../nbs/API/effsize_objects.ipynb #5d49f77f class PermutationTest: """ A class to compute and report permutation tests. diff --git a/dabest/_stats_tools/confint_1group.py b/dabest/_stats_tools/confint_1group.py index 744a7142..cc71e389 100644 --- a/dabest/_stats_tools/confint_1group.py +++ b/dabest/_stats_tools/confint_1group.py @@ -2,17 +2,17 @@ # AUTOGENERATED! DO NOT EDIT! File to edit: ../../nbs/API/confint_1group.ipynb. -# %% auto 0 +# %% auto #0 __all__ = ['create_bootstrap_indexes', 'compute_1group_jackknife', 'compute_1group_acceleration', 'compute_1group_bootstraps', 'compute_1group_bias_correction', 'summary_ci_1group'] -# %% ../../nbs/API/confint_1group.ipynb 4 +# %% ../../nbs/API/confint_1group.ipynb #9181f236 import numpy as np from numpy.random import PCG64, RandomState from scipy.stats import norm from numpy import sort as npsort -# %% ../../nbs/API/confint_1group.ipynb 5 +# %% ../../nbs/API/confint_1group.ipynb #bac09924 def create_bootstrap_indexes(array, resamples=5000, random_seed=12345): """Given an array-like, returns a generator of bootstrap indexes to be used for resampling. diff --git a/dabest/_stats_tools/confint_2group_diff.py b/dabest/_stats_tools/confint_2group_diff.py index 1950da36..03d7df11 100644 --- a/dabest/_stats_tools/confint_2group_diff.py +++ b/dabest/_stats_tools/confint_2group_diff.py @@ -2,13 +2,13 @@ # AUTOGENERATED! DO NOT EDIT! File to edit: ../../nbs/API/confint_2group_diff.ipynb. -# %% auto 0 +# %% auto #0 __all__ = ['create_jackknife_indexes', 'create_repeated_indexes', 'compute_meandiff_jackknife', 'bootstrap_indices', 'compute_bootstrapped_diff', 'delta2_bootstrap_loop', 'compute_delta2_bootstrapped_diff', 'compute_meandiff_bias_correction', 'compute_interval_limits', 'calculate_group_var', 'calculate_bootstraps_var', 'calculate_weighted_delta'] -# %% ../../nbs/API/confint_2group_diff.ipynb 4 +# %% ../../nbs/API/confint_2group_diff.ipynb #fa733643 import numpy as np from numpy import arange, delete, errstate from numpy import mean as npmean @@ -18,7 +18,7 @@ from scipy.stats import norm from numpy import isnan -# %% ../../nbs/API/confint_2group_diff.ipynb 5 +# %% ../../nbs/API/confint_2group_diff.ipynb #8cf9b1fc @njit(cache=True, parallel=True) def create_jackknife_indexes(data): """ diff --git a/dabest/_stats_tools/effsize.py b/dabest/_stats_tools/effsize.py index 2e597185..216a513f 100644 --- a/dabest/_stats_tools/effsize.py +++ b/dabest/_stats_tools/effsize.py @@ -2,7 +2,7 @@ # AUTOGENERATED! DO NOT EDIT! File to edit: ../../nbs/API/effsize.ipynb. -# %% ../../nbs/API/effsize.ipynb 4 +# %% ../../nbs/API/effsize.ipynb #9d92d449 from __future__ import annotations import numpy as np from numba import njit @@ -11,10 +11,10 @@ from scipy.stats import mannwhitneyu -# %% auto 0 +# %% auto #0 __all__ = ['two_group_difference', 'func_difference', 'cohens_d', 'cohens_h', 'hedges_g', 'cliffs_delta', 'weighted_delta'] -# %% ../../nbs/API/effsize.ipynb 5 +# %% ../../nbs/API/effsize.ipynb #0547f8a7 def two_group_difference(control:list|tuple|np.ndarray, #Accepts lists, tuples, or numpy ndarrays of numeric types. test:list|tuple|np.ndarray, #Accepts lists, tuples, or numpy ndarrays of numeric types. is_paired=None, #If not None, returns the paired Cohen's d @@ -99,7 +99,7 @@ def two_group_difference(control:list|tuple|np.ndarray, #Accepts lists, tuples, return cliffs_delta(control, test) -# %% ../../nbs/API/effsize.ipynb 6 +# %% ../../nbs/API/effsize.ipynb #c93f36d4 def func_difference(control:list|tuple|np.ndarray, # NaNs are automatically discarded. test:list|tuple|np.ndarray, # NaNs are automatically discarded. func, # Summary function to apply. @@ -135,7 +135,7 @@ def func_difference(control:list|tuple|np.ndarray, # NaNs are automatically disc return func(test) - func(control) -# %% ../../nbs/API/effsize.ipynb 7 +# %% ../../nbs/API/effsize.ipynb #c6dd20e4 @njit(cache=True) def cohens_d(control:list|tuple|np.ndarray, test:list|tuple|np.ndarray, @@ -210,7 +210,7 @@ def cohens_d(control:list|tuple|np.ndarray, return M / divisor -# %% ../../nbs/API/effsize.ipynb 8 +# %% ../../nbs/API/effsize.ipynb #93688770 # @njit(cache=True) # It uses np.seterr which is not supported by Numba def cohens_h(control:list|tuple|np.ndarray, test:list|tuple|np.ndarray @@ -247,7 +247,7 @@ def cohens_h(control:list|tuple|np.ndarray, return phi_test - phi_control -# %% ../../nbs/API/effsize.ipynb 9 +# %% ../../nbs/API/effsize.ipynb #bcd77c32 def hedges_g(control:list|tuple|np.ndarray, test:list|tuple|np.ndarray, is_paired:str=None)->float: @@ -271,7 +271,7 @@ def hedges_g(control:list|tuple|np.ndarray, correction_factor = _compute_hedges_correction_factor(len_c, len_t) return correction_factor * d -# %% ../../nbs/API/effsize.ipynb 10 +# %% ../../nbs/API/effsize.ipynb #8fafb111 @njit(cache=True) def _mann_whitney_u(x, y): """Numba-optimized Mann-Whitney U calculation""" @@ -307,7 +307,7 @@ def cliffs_delta(control:list|tuple|np.ndarray, return _cliffs_delta_core(c, t) -# %% ../../nbs/API/effsize.ipynb 11 +# %% ../../nbs/API/effsize.ipynb #7a772510 @njit(cache=True) def _compute_standardizers(control, test): """ @@ -356,7 +356,7 @@ def _compute_standardizers(control, test): return pooled, average -# %% ../../nbs/API/effsize.ipynb 12 +# %% ../../nbs/API/effsize.ipynb #4529e82c def _compute_hedges_correction_factor(n1, n2 )->float: @@ -390,7 +390,7 @@ def _compute_hedges_correction_factor(n1, return out -# %% ../../nbs/API/effsize.ipynb 13 +# %% ../../nbs/API/effsize.ipynb #249e5375 @njit(cache=True) def weighted_delta(difference, bootstrap_dist_var): ''' diff --git a/dabest/_stats_tools/precompile.py b/dabest/_stats_tools/precompile.py index 46cc2bc4..e6205c0f 100644 --- a/dabest/_stats_tools/precompile.py +++ b/dabest/_stats_tools/precompile.py @@ -2,16 +2,16 @@ # AUTOGENERATED! DO NOT EDIT! File to edit: ../../nbs/API/precompile.ipynb. -# %% auto 0 +# %% auto #0 __all__ = ['precompile_all'] -# %% ../../nbs/API/precompile.ipynb 4 +# %% ../../nbs/API/precompile.ipynb #35aa9337 import numpy as np from tqdm import tqdm from . import effsize from . import confint_2group_diff -# %% ../../nbs/API/precompile.ipynb 5 +# %% ../../nbs/API/precompile.ipynb #472d8104 _NUMBA_COMPILED = False def precompile_all(): diff --git a/dabest/forest_plot.py b/dabest/forest_plot.py index b7a406c9..b404e963 100644 --- a/dabest/forest_plot.py +++ b/dabest/forest_plot.py @@ -2,10 +2,10 @@ # AUTOGENERATED! DO NOT EDIT! File to edit: ../nbs/API/forest_plot.ipynb. -# %% auto 0 +# %% auto #0 __all__ = ['load_plot_data', 'check_for_errors', 'get_kwargs', 'color_palette', 'forest_plot'] -# %% ../nbs/API/forest_plot.ipynb 5 +# %% ../nbs/API/forest_plot.ipynb #a1cba2aa import matplotlib.pyplot as plt # %matplotlib inline import seaborn as sns @@ -14,7 +14,7 @@ import matplotlib.axes as axes import matplotlib.patches as mpatches -# %% ../nbs/API/forest_plot.ipynb 6 +# %% ../nbs/API/forest_plot.ipynb #b4634b4b def load_plot_data( data: List, effect_size: str = "mean_diff", diff --git a/dabest/misc_tools.py b/dabest/misc_tools.py index 3b400497..d0a56422 100644 --- a/dabest/misc_tools.py +++ b/dabest/misc_tools.py @@ -2,14 +2,14 @@ # AUTOGENERATED! DO NOT EDIT! File to edit: ../nbs/API/misc_tools.ipynb. -# %% auto 0 +# %% auto #0 __all__ = ['merge_two_dicts', 'unpack_and_add', 'print_greeting', 'get_varname', 'get_unique_categories', 'get_params', 'get_kwargs', 'get_color_palette', 'initialize_fig', 'get_plot_groups', 'add_counts_to_ticks', 'extract_contrast_plotting_ticks', 'set_xaxis_ticks_and_lims', 'show_legend', 'gardner_altman_adjustments', 'draw_zeroline', 'redraw_independent_spines', 'redraw_dependent_spines', 'extract_group_summaries', 'color_picker', 'prepare_bars_for_plot'] -# %% ../nbs/API/misc_tools.ipynb 4 +# %% ../nbs/API/misc_tools.ipynb #3c9a6ef1 import datetime as dt import numpy as np from numpy import repeat @@ -19,7 +19,7 @@ import matplotlib import matplotlib.axes as axes -# %% ../nbs/API/misc_tools.ipynb 5 +# %% ../nbs/API/misc_tools.ipynb #5f54be1c def merge_two_dicts( x: dict, y: dict ) -> dict: # A dictionary containing a union of all keys in both original dicts. diff --git a/dabest/multi.py b/dabest/multi.py index 8edbb022..50b38721 100644 --- a/dabest/multi.py +++ b/dabest/multi.py @@ -1,9 +1,9 @@ # AUTOGENERATED! DO NOT EDIT! File to edit: ../nbs/API/multi.ipynb. -# %% auto 0 +# %% auto #0 __all__ = ['MultiContrast', 'combine', 'whorlmap'] -# %% ../nbs/API/multi.ipynb 3 +# %% ../nbs/API/multi.ipynb #80099a4b import pandas as pd import numpy as np import matplotlib.pyplot as plt @@ -12,7 +12,7 @@ from typing import List, Optional, Union, Tuple, Dict, Any -# %% ../nbs/API/multi.ipynb 6 +# %% ../nbs/API/multi.ipynb #e4b58920 class MultiContrast: """ Unified multiple contrast object for forest plots and whorlmaps. @@ -482,7 +482,7 @@ def __repr__(self): f"effect_size='{self.effect_size}', " f"contrast_type='{types_info}')") -# %% ../nbs/API/multi.ipynb 8 +# %% ../nbs/API/multi.ipynb #b6952d49 def combine(dabest_objs: Union[List, List[List]], labels: Optional[List[str]] = None, row_labels: Optional[List[str]] = None, @@ -556,7 +556,7 @@ def combine(dabest_objs: Union[List, List[List]], return mc -# %% ../nbs/API/multi.ipynb 10 +# %% ../nbs/API/multi.ipynb #7814cc58 def _sample_bootstrap(bootstrap, m, n, reverse_neg, abs_rank, chop_tail): """Sample bootstrap values and prepare for spiral visualization.""" bootstrap_sorted = sorted(bootstrap) @@ -576,7 +576,7 @@ def _sample_bootstrap(bootstrap, m, n, reverse_neg, abs_rank, chop_tail): long_ranks = [bootstrap_sorted[r - 1] for r in ranks_to_look] return long_ranks -# %% ../nbs/API/multi.ipynb 11 +# %% ../nbs/API/multi.ipynb #725c96b5 def _spiralize(fill, m, n): """Convert linear array into spiral pattern.""" i = 0 @@ -622,7 +622,7 @@ def _spiralize(fill, m, n): return array -# %% ../nbs/API/multi.ipynb 12 +# %% ../nbs/API/multi.ipynb #20809f1d def whorlmap(multi_contrast, n=21, sort_by=None, cmap = 'vlag', vmax = None, vmin = None, reverse_neg=True, abs_rank=False, chop_tail=0, ax=None, fig_size=None, title = None, heatmap_kwargs=None, plot_kwargs=None): """ @@ -796,6 +796,6 @@ def whorlmap(multi_contrast, n=21, sort_by=None, cmap = 'vlag', vmax = None, vmi else: return a, mean_delta -# %% ../nbs/API/multi.ipynb 13 +# %% ../nbs/API/multi.ipynb #4f23adcf __all__ = ['MultiContrast', 'combine', 'whorlmap'] diff --git a/dabest/plot_tools.py b/dabest/plot_tools.py index 5eb6349e..45cb2134 100644 --- a/dabest/plot_tools.py +++ b/dabest/plot_tools.py @@ -2,16 +2,16 @@ # AUTOGENERATED! DO NOT EDIT! File to edit: ../nbs/API/plot_tools.ipynb. -# %% ../nbs/API/plot_tools.ipynb 2 +# %% ../nbs/API/plot_tools.ipynb #dd831e92 from __future__ import annotations -# %% auto 0 +# %% auto #0 __all__ = ['halfviolin', 'get_swarm_spans', 'error_bar', 'check_data_matches_labels', 'normalize_dict', 'width_determine', 'single_sankey', 'sankeydiag', 'add_bars_to_plot', 'delta_text_plotter', 'delta_dots_plotter', 'slopegraph_plotter', 'plot_minimeta_or_deltadelta_violins', 'effect_size_curve_plotter', 'gridkey_plotter', 'barplotter', 'table_for_horizontal_plots', 'add_counts_to_prop_plots', 'swarmplot', 'SwarmPlot'] -# %% ../nbs/API/plot_tools.ipynb 4 +# %% ../nbs/API/plot_tools.ipynb #b070950d import math import warnings import itertools @@ -27,7 +27,7 @@ from pandas.api.types import CategoricalDtype from matplotlib.colors import ListedColormap -# %% ../nbs/API/plot_tools.ipynb 5 +# %% ../nbs/API/plot_tools.ipynb #98550688 def halfviolin(v, half="right", fill_color="k", alpha=1, line_color="k", line_width=0): for b in v["bodies"]: V = b.get_paths()[0].vertices @@ -2115,7 +2115,7 @@ def add_counts_to_prop_plots( rawdata_axes.text(sample_text_x, 0.05, sample_text_y1, **prop_sample_counts_kwargs) rawdata_axes.text(sample_text_x, 0.95, sample_text_y0, **prop_sample_counts_kwargs) -# %% ../nbs/API/plot_tools.ipynb 6 +# %% ../nbs/API/plot_tools.ipynb #24823471 def swarmplot( data: pd.DataFrame, x: str, diff --git a/dabest/plotter.py b/dabest/plotter.py index df9a3641..23302e39 100644 --- a/dabest/plotter.py +++ b/dabest/plotter.py @@ -2,10 +2,10 @@ # AUTOGENERATED! DO NOT EDIT! File to edit: ../nbs/API/plotter.ipynb. -# %% auto 0 +# %% auto #0 __all__ = ['effectsize_df_plotter'] -# %% ../nbs/API/plotter.ipynb 4 +# %% ../nbs/API/plotter.ipynb #7562c1a1 import numpy as np import seaborn as sns import matplotlib @@ -16,7 +16,7 @@ import warnings import logging -# %% ../nbs/API/plotter.ipynb 5 +# %% ../nbs/API/plotter.ipynb #36a42b1c # TODO refactor function name def effectsize_df_plotter(effectsize_df: object, **plot_kwargs) -> matplotlib.figure.Figure: """ diff --git a/nbs/API/delta_objects.ipynb b/nbs/API/delta_objects.ipynb index ca09104f..91656b16 100644 --- a/nbs/API/delta_objects.ipynb +++ b/nbs/API/delta_objects.ipynb @@ -2,6 +2,7 @@ "cells": [ { "cell_type": "markdown", + "id": "3bce2f06", "metadata": {}, "source": [ "# Delta objects\n", @@ -14,6 +15,7 @@ { "cell_type": "code", "execution_count": null, + "id": "639a4774", "metadata": {}, "outputs": [], "source": [ @@ -23,6 +25,7 @@ { "cell_type": "code", "execution_count": null, + "id": "e883312c", "metadata": {}, "outputs": [], "source": [ @@ -33,6 +36,7 @@ { "cell_type": "code", "execution_count": null, + "id": "aa0262b3", "metadata": {}, "outputs": [], "source": [ @@ -45,6 +49,7 @@ { "cell_type": "code", "execution_count": null, + "id": "fae983d8", "metadata": {}, "outputs": [ { @@ -92,6 +97,7 @@ { "cell_type": "code", "execution_count": null, + "id": "1814896d", "metadata": {}, "outputs": [], "source": [ @@ -109,6 +115,7 @@ { "cell_type": "code", "execution_count": null, + "id": "1bb53e06", "metadata": {}, "outputs": [], "source": [ @@ -482,6 +489,7 @@ }, { "cell_type": "markdown", + "id": "4dc056b1", "metadata": {}, "source": [ "\n", @@ -496,6 +504,7 @@ }, { "cell_type": "markdown", + "id": "81decd9b", "metadata": {}, "source": [ "#### Example: delta-delta" @@ -504,6 +513,7 @@ { "cell_type": "code", "execution_count": null, + "id": "37dacdfc", "metadata": {}, "outputs": [ { @@ -568,6 +578,7 @@ { "cell_type": "code", "execution_count": null, + "id": "18462ec5", "metadata": {}, "outputs": [], "source": [ @@ -1062,6 +1073,7 @@ }, { "cell_type": "markdown", + "id": "02f5a7a2", "metadata": {}, "source": [ "The weighted delta is calcuated as follows:\n", @@ -1082,6 +1094,7 @@ }, { "cell_type": "markdown", + "id": "33de49d5", "metadata": {}, "source": [ "#### Example: mini-meta-delta" @@ -1090,6 +1103,7 @@ { "cell_type": "code", "execution_count": null, + "id": "a7f99dff", "metadata": {}, "outputs": [ { @@ -1132,6 +1146,7 @@ }, { "cell_type": "markdown", + "id": "419b00fb", "metadata": {}, "source": [ "As of version 2023.02.14, weighted delta can only be calculated for mean difference, and not for standardized measures such as Cohen's *d*.\n", @@ -1145,6 +1160,7 @@ }, { "cell_type": "markdown", + "id": "2dd1d796", "metadata": {}, "source": [] } @@ -1157,5 +1173,5 @@ } }, "nbformat": 4, - "nbformat_minor": 4 + "nbformat_minor": 5 } diff --git a/nbs/API/effsize_objects.ipynb b/nbs/API/effsize_objects.ipynb index 4da0136f..1d200a2e 100644 --- a/nbs/API/effsize_objects.ipynb +++ b/nbs/API/effsize_objects.ipynb @@ -2,6 +2,7 @@ "cells": [ { "cell_type": "markdown", + "id": "a8f6e14c", "metadata": {}, "source": [ "# Effectsize objects\n", @@ -14,6 +15,7 @@ { "cell_type": "code", "execution_count": null, + "id": "becd3bdf", "metadata": {}, "outputs": [], "source": [ @@ -23,6 +25,7 @@ { "cell_type": "code", "execution_count": null, + "id": "956b12a4", "metadata": {}, "outputs": [], "source": [ @@ -33,6 +36,7 @@ { "cell_type": "code", "execution_count": null, + "id": "9a991fb5", "metadata": {}, "outputs": [], "source": [ @@ -45,6 +49,7 @@ { "cell_type": "code", "execution_count": null, + "id": "ab97c8f0", "metadata": {}, "outputs": [ { @@ -84,6 +89,7 @@ { "cell_type": "code", "execution_count": null, + "id": "430d4ea8", "metadata": {}, "outputs": [], "source": [ @@ -109,6 +115,7 @@ { "cell_type": "code", "execution_count": null, + "id": "9d988bdd", "metadata": {}, "outputs": [], "source": [ @@ -910,6 +917,7 @@ }, { "cell_type": "markdown", + "id": "955a36d1", "metadata": {}, "source": [ "#### Example" @@ -918,6 +926,7 @@ { "cell_type": "code", "execution_count": null, + "id": "c1f1647d", "metadata": {}, "outputs": [ { @@ -948,6 +957,7 @@ { "cell_type": "code", "execution_count": null, + "id": "0142a8ab", "metadata": {}, "outputs": [ { @@ -1015,6 +1025,7 @@ { "cell_type": "code", "execution_count": null, + "id": "024b1d00", "metadata": {}, "outputs": [], "source": [ @@ -1861,6 +1872,7 @@ }, { "cell_type": "markdown", + "id": "0c622e1a", "metadata": {}, "source": [ "#### Example: plot\n", @@ -1871,6 +1883,7 @@ { "cell_type": "code", "execution_count": null, + "id": "a9a1388f", "metadata": {}, "outputs": [], "source": [ @@ -1912,6 +1925,7 @@ { "cell_type": "code", "execution_count": null, + "id": "e7f5f4bc", "metadata": {}, "outputs": [ { @@ -1931,6 +1945,7 @@ }, { "cell_type": "markdown", + "id": "f7fb5efe", "metadata": {}, "source": [ " Create a Gardner-Altman plot for the Hedges' g effect size." @@ -1939,6 +1954,7 @@ { "cell_type": "code", "execution_count": null, + "id": "e457ae1e", "metadata": {}, "outputs": [ { @@ -1958,6 +1974,7 @@ }, { "cell_type": "markdown", + "id": "012f7a06", "metadata": {}, "source": [ "Create a Cumming estimation plot for the mean difference." @@ -1966,6 +1983,7 @@ { "cell_type": "code", "execution_count": null, + "id": "0dd903b1", "metadata": {}, "outputs": [ { @@ -1985,6 +2003,7 @@ }, { "cell_type": "markdown", + "id": "0838d251", "metadata": {}, "source": [ " Create a paired Gardner-Altman plot." @@ -1993,6 +2012,7 @@ { "cell_type": "code", "execution_count": null, + "id": "c38cb10f", "metadata": {}, "outputs": [ { @@ -2014,6 +2034,7 @@ }, { "cell_type": "markdown", + "id": "86a5516a", "metadata": {}, "source": [ "Create a multi-group Cumming plot." @@ -2022,6 +2043,7 @@ { "cell_type": "code", "execution_count": null, + "id": "ea5da412", "metadata": {}, "outputs": [ { @@ -2054,6 +2076,7 @@ }, { "cell_type": "markdown", + "id": "10675566", "metadata": {}, "source": [ "Create a shared control Cumming plot." @@ -2062,6 +2085,7 @@ { "cell_type": "code", "execution_count": null, + "id": "97e2eb40", "metadata": {}, "outputs": [ { @@ -2092,6 +2116,7 @@ }, { "cell_type": "markdown", + "id": "58dc1b2d", "metadata": {}, "source": [ "Create a repeated meausures (against baseline) Slopeplot." @@ -2100,6 +2125,7 @@ { "cell_type": "code", "execution_count": null, + "id": "4f101c31", "metadata": {}, "outputs": [ { @@ -2122,6 +2148,7 @@ }, { "cell_type": "markdown", + "id": "45dda7bb", "metadata": {}, "source": [ "Create a repeated meausures (sequential) Slopeplot." @@ -2130,6 +2157,7 @@ { "cell_type": "code", "execution_count": null, + "id": "83847a02", "metadata": {}, "outputs": [ { @@ -2153,6 +2181,7 @@ { "cell_type": "code", "execution_count": null, + "id": "68bcc034", "metadata": {}, "outputs": [], "source": [] @@ -2160,6 +2189,7 @@ { "cell_type": "code", "execution_count": null, + "id": "5d49f77f", "metadata": {}, "outputs": [], "source": [ @@ -2338,6 +2368,7 @@ }, { "cell_type": "markdown", + "id": "b82bc6e5", "metadata": {}, "source": [ "**Notes**:\n", @@ -2357,6 +2388,7 @@ }, { "cell_type": "markdown", + "id": "4456d8db", "metadata": {}, "source": [ "#### Example: permutation test" @@ -2365,6 +2397,7 @@ { "cell_type": "code", "execution_count": null, + "id": "284f1c75", "metadata": {}, "outputs": [ { @@ -2390,6 +2423,7 @@ { "cell_type": "code", "execution_count": null, + "id": "7f5be104", "metadata": {}, "outputs": [], "source": [] @@ -2403,5 +2437,5 @@ } }, "nbformat": 4, - "nbformat_minor": 4 + "nbformat_minor": 5 } diff --git a/nbs/API/forest_plot.ipynb b/nbs/API/forest_plot.ipynb index 22fd57b5..6fd10835 100644 --- a/nbs/API/forest_plot.ipynb +++ b/nbs/API/forest_plot.ipynb @@ -2,6 +2,7 @@ "cells": [ { "cell_type": "markdown", + "id": "9bbabcc9", "metadata": {}, "source": [ "# Forest plot\n", @@ -14,6 +15,7 @@ { "cell_type": "code", "execution_count": null, + "id": "a726b52e", "metadata": {}, "outputs": [], "source": [ @@ -23,6 +25,7 @@ { "cell_type": "code", "execution_count": null, + "id": "fe67d602", "metadata": {}, "outputs": [], "source": [ @@ -33,6 +36,7 @@ { "cell_type": "code", "execution_count": null, + "id": "efe6d6bf", "metadata": {}, "outputs": [], "source": [ @@ -45,6 +49,7 @@ { "cell_type": "code", "execution_count": null, + "id": "5e714e51", "metadata": {}, "outputs": [], "source": [ @@ -55,6 +60,7 @@ { "cell_type": "code", "execution_count": null, + "id": "a1cba2aa", "metadata": {}, "outputs": [], "source": [ @@ -71,6 +77,7 @@ { "cell_type": "code", "execution_count": null, + "id": "b4634b4b", "metadata": {}, "outputs": [], "source": [ @@ -838,5 +845,5 @@ } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 5 } diff --git a/nbs/API/load.ipynb b/nbs/API/load.ipynb index c71302db..86c7782c 100644 --- a/nbs/API/load.ipynb +++ b/nbs/API/load.ipynb @@ -2,6 +2,7 @@ "cells": [ { "cell_type": "markdown", + "id": "bba9fe58", "metadata": {}, "source": [ "# Loading Data\n", @@ -14,6 +15,7 @@ { "cell_type": "code", "execution_count": null, + "id": "292ee915", "metadata": {}, "outputs": [], "source": [ @@ -23,6 +25,7 @@ { "cell_type": "code", "execution_count": null, + "id": "8b51d167", "metadata": {}, "outputs": [], "source": [ @@ -33,6 +36,7 @@ { "cell_type": "code", "execution_count": null, + "id": "bc61493e", "metadata": {}, "outputs": [], "source": [ @@ -46,6 +50,7 @@ { "cell_type": "code", "execution_count": null, + "id": "218e4f14", "metadata": {}, "outputs": [], "source": [ @@ -160,6 +165,7 @@ { "cell_type": "code", "execution_count": null, + "id": "570ff65a", "metadata": {}, "outputs": [], "source": [ @@ -242,6 +248,7 @@ }, { "cell_type": "markdown", + "id": "db38d192", "metadata": {}, "source": [ "## Example" @@ -250,6 +257,7 @@ { "cell_type": "code", "execution_count": null, + "id": "f8762853", "metadata": {}, "outputs": [], "source": [ @@ -261,6 +269,7 @@ }, { "cell_type": "markdown", + "id": "5ccb211a", "metadata": {}, "source": [ "Create dummy data for demonstration." @@ -269,6 +278,7 @@ { "cell_type": "code", "execution_count": null, + "id": "30187b91", "metadata": {}, "outputs": [], "source": [ @@ -281,6 +291,7 @@ }, { "cell_type": "markdown", + "id": "7cc8867d", "metadata": {}, "source": [ "Load the data." @@ -289,6 +300,7 @@ { "cell_type": "code", "execution_count": null, + "id": "171a15fc", "metadata": {}, "outputs": [ { @@ -318,6 +330,7 @@ }, { "cell_type": "markdown", + "id": "b480536a", "metadata": {}, "source": [ "For proportion plot." @@ -326,6 +339,7 @@ { "cell_type": "code", "execution_count": null, + "id": "f74b6325", "metadata": {}, "outputs": [], "source": [ @@ -346,5 +360,5 @@ } }, "nbformat": 4, - "nbformat_minor": 4 + "nbformat_minor": 5 } diff --git a/nbs/API/precompile.ipynb b/nbs/API/precompile.ipynb index 223c4ce9..95b8c834 100644 --- a/nbs/API/precompile.ipynb +++ b/nbs/API/precompile.ipynb @@ -2,6 +2,7 @@ "cells": [ { "cell_type": "markdown", + "id": "60e69f4a", "metadata": {}, "source": [ "# precompile\n", @@ -14,6 +15,7 @@ { "cell_type": "code", "execution_count": null, + "id": "3bcca32a", "metadata": {}, "outputs": [], "source": [ @@ -23,6 +25,7 @@ { "cell_type": "code", "execution_count": null, + "id": "5d3e285a", "metadata": {}, "outputs": [], "source": [ @@ -33,6 +36,7 @@ { "cell_type": "code", "execution_count": null, + "id": "e6eb02d0", "metadata": {}, "outputs": [], "source": [ @@ -45,6 +49,7 @@ { "cell_type": "code", "execution_count": null, + "id": "35aa9337", "metadata": {}, "outputs": [], "source": [ @@ -58,6 +63,7 @@ { "cell_type": "code", "execution_count": null, + "id": "472d8104", "metadata": {}, "outputs": [], "source": [ @@ -107,5 +113,5 @@ ], "metadata": {}, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 5 } diff --git a/nbs/tutorials/01-basics.ipynb b/nbs/tutorials/01-basics.ipynb index 306d7880..8122498b 100644 --- a/nbs/tutorials/01-basics.ipynb +++ b/nbs/tutorials/01-basics.ipynb @@ -2,6 +2,7 @@ "cells": [ { "cell_type": "markdown", + "id": "e18874ef", "metadata": {}, "source": [ "# Basics\n", @@ -13,6 +14,7 @@ }, { "cell_type": "markdown", + "id": "ae22b5d6", "metadata": {}, "source": [ "## Load libraries" @@ -21,6 +23,7 @@ { "cell_type": "code", "execution_count": null, + "id": "111cdeea", "metadata": {}, "outputs": [ { @@ -64,6 +67,7 @@ { "cell_type": "code", "execution_count": null, + "id": "2cf8be3b", "metadata": {}, "outputs": [], "source": [ @@ -74,6 +78,7 @@ }, { "cell_type": "markdown", + "id": "edc6c807", "metadata": {}, "source": [ "## Create dataset for demo" @@ -81,6 +86,7 @@ }, { "cell_type": "markdown", + "id": "c447ed0f", "metadata": {}, "source": [ "Here, we create a dataset to illustrate how ``dabest`` works. In\n", @@ -90,6 +96,7 @@ { "cell_type": "code", "execution_count": null, + "id": "f5460d95", "metadata": {}, "outputs": [ { @@ -261,6 +268,7 @@ }, { "cell_type": "markdown", + "id": "86d8a014", "metadata": {}, "source": [ "Note that we have 9 groups (3 Control samples and 6 Test samples). Our\n", @@ -270,6 +278,7 @@ }, { "cell_type": "markdown", + "id": "cd100b68", "metadata": {}, "source": [ "This is known as a *wide* dataset. See this \n", @@ -279,6 +288,7 @@ }, { "cell_type": "markdown", + "id": "a443fa57", "metadata": {}, "source": [ "## Loading data" @@ -286,6 +296,7 @@ }, { "cell_type": "markdown", + "id": "5cad58c8", "metadata": {}, "source": [ "Before creating estimation plots and obtaining confidence intervals for our effect sizes, we need to load the data and specify the relevant groups.\n", @@ -296,6 +307,7 @@ { "cell_type": "code", "execution_count": null, + "id": "1199b169", "metadata": {}, "outputs": [], "source": [ @@ -304,6 +316,7 @@ }, { "cell_type": "markdown", + "id": "035952a1", "metadata": {}, "source": [ "Calling this ``Dabest`` object gives you a gentle greeting, as well as\n", @@ -313,6 +326,7 @@ { "cell_type": "code", "execution_count": null, + "id": "99952ec9", "metadata": {}, "outputs": [ { @@ -341,6 +355,7 @@ }, { "cell_type": "markdown", + "id": "0287ca98", "metadata": {}, "source": [ "### Changing statistical parameters" @@ -348,6 +363,7 @@ }, { "cell_type": "markdown", + "id": "be5b3ece", "metadata": {}, "source": [ "You can change the width of the confidence interval by manipulating the ``ci`` argument." @@ -356,6 +372,7 @@ { "cell_type": "code", "execution_count": null, + "id": "1056c239", "metadata": {}, "outputs": [ { @@ -385,6 +402,7 @@ }, { "cell_type": "markdown", + "id": "a0d70d5e", "metadata": {}, "source": [ "## Effect sizes" @@ -392,6 +410,7 @@ }, { "cell_type": "markdown", + "id": "47ad9810", "metadata": {}, "source": [ "The **dabest** library now features a range of effect sizes:\n", @@ -411,6 +430,7 @@ { "cell_type": "code", "execution_count": null, + "id": "aa21edeb", "metadata": {}, "outputs": [ { @@ -444,6 +464,7 @@ }, { "cell_type": "markdown", + "id": "600ca0d1", "metadata": {}, "source": [ "For each comparison, the type of effect size is reported (here, it's the\n", @@ -464,6 +485,7 @@ { "cell_type": "code", "execution_count": null, + "id": "e3dae0a5", "metadata": {}, "outputs": [ { @@ -612,6 +634,7 @@ { "cell_type": "code", "execution_count": null, + "id": "d01a764f", "metadata": {}, "outputs": [ { @@ -704,6 +727,7 @@ }, { "cell_type": "markdown", + "id": "416979fe", "metadata": {}, "source": [ "**Note:**\n", @@ -715,6 +739,7 @@ { "cell_type": "code", "execution_count": null, + "id": "530c46db", "metadata": {}, "outputs": [ { @@ -808,6 +833,7 @@ }, { "cell_type": "markdown", + "id": "d3f49f35", "metadata": {}, "source": [ "Let's compute the *Hedges'g* for our comparison." @@ -816,6 +842,7 @@ { "cell_type": "code", "execution_count": null, + "id": "5831bdc1", "metadata": {}, "outputs": [ { @@ -850,6 +877,7 @@ { "cell_type": "code", "execution_count": null, + "id": "64e6eb76", "metadata": {}, "outputs": [ { @@ -993,6 +1021,7 @@ }, { "cell_type": "markdown", + "id": "cc0f5147", "metadata": {}, "source": [ "## Producing estimation plots" @@ -1000,6 +1029,7 @@ }, { "cell_type": "markdown", + "id": "0c80d617", "metadata": {}, "source": [ "To generate a **Gardner-Altman estimation plot**, simply use the\n", @@ -1012,6 +1042,7 @@ { "cell_type": "code", "execution_count": null, + "id": "62cdc948", "metadata": {}, "outputs": [ { @@ -1032,6 +1063,7 @@ { "cell_type": "code", "execution_count": null, + "id": "5ff94b20", "metadata": {}, "outputs": [ { @@ -1051,6 +1083,7 @@ }, { "cell_type": "markdown", + "id": "70030bd6", "metadata": {}, "source": [ "Instead of a Gardner-Altman plot, you can generate a **Cumming estimation\n", @@ -1064,6 +1097,7 @@ { "cell_type": "code", "execution_count": null, + "id": "dfaa2a76", "metadata": {}, "outputs": [ { @@ -1083,6 +1117,7 @@ }, { "cell_type": "markdown", + "id": "9ca13ba8", "metadata": {}, "source": [ "The confidence interval shown on the contrast axis is a BCa confidence interval by default.\n", @@ -1093,6 +1128,7 @@ { "cell_type": "code", "execution_count": null, + "id": "f04a831f", "metadata": {}, "outputs": [ { @@ -1112,6 +1148,7 @@ }, { "cell_type": "markdown", + "id": "b0e04dec", "metadata": {}, "source": [ "### Using long (aka 'melted') data frames" @@ -1119,6 +1156,7 @@ }, { "cell_type": "markdown", + "id": "122503d9", "metadata": {}, "source": [ "``dabest`` can also handle 'melted' or 'long' data. This term is used because each row now corresponds to a single data point, with one column carrying the value and other columns containing 'metadata'\n", @@ -1133,6 +1171,7 @@ { "cell_type": "code", "execution_count": null, + "id": "c339b076", "metadata": {}, "outputs": [ { @@ -1233,6 +1272,7 @@ }, { "cell_type": "markdown", + "id": "5899e787", "metadata": {}, "source": [ "When your data is in this format, you need to specify the ``x`` and\n", @@ -1242,6 +1282,7 @@ { "cell_type": "code", "execution_count": null, + "id": "c786fe1b", "metadata": {}, "outputs": [ { @@ -1273,6 +1314,7 @@ }, { "cell_type": "markdown", + "id": "e38e0455", "metadata": {}, "source": [ "## Dabest estimation plot designs" @@ -1280,6 +1322,7 @@ }, { "cell_type": "markdown", + "id": "0ac037ad", "metadata": {}, "source": [ "The ``dabest`` package implements a range of estimation plot\n", @@ -1311,5 +1354,5 @@ } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 5 } diff --git a/nbs/tutorials/02-two_group.ipynb b/nbs/tutorials/02-two_group.ipynb index e8389300..89660520 100644 --- a/nbs/tutorials/02-two_group.ipynb +++ b/nbs/tutorials/02-two_group.ipynb @@ -2,6 +2,7 @@ "cells": [ { "cell_type": "markdown", + "id": "a1cdbcc7", "metadata": {}, "source": [ "# Two-Group Experiments\n", @@ -13,6 +14,7 @@ }, { "cell_type": "markdown", + "id": "792fd7f1", "metadata": {}, "source": [ "## Load libraries" @@ -21,6 +23,7 @@ { "cell_type": "code", "execution_count": null, + "id": "bf339009", "metadata": {}, "outputs": [ { @@ -64,6 +67,7 @@ { "cell_type": "code", "execution_count": null, + "id": "e4add02e", "metadata": {}, "outputs": [], "source": [ @@ -74,6 +78,7 @@ }, { "cell_type": "markdown", + "id": "0328684f", "metadata": {}, "source": [ "## Creating a demo dataset" @@ -81,6 +86,7 @@ }, { "cell_type": "markdown", + "id": "ee9ab56d", "metadata": {}, "source": [ "Here, we create a dataset to illustrate how to perform Two-Group analyses using dabest." @@ -89,6 +95,7 @@ { "cell_type": "code", "execution_count": null, + "id": "3093c1ea", "metadata": {}, "outputs": [ { @@ -261,6 +268,7 @@ }, { "cell_type": "markdown", + "id": "ab098bed", "metadata": {}, "source": [ "## Loading data" @@ -268,6 +276,7 @@ }, { "cell_type": "markdown", + "id": "80318f9c", "metadata": {}, "source": [ "First, we need to load the data and specify the relevant groups. \n", @@ -288,6 +297,7 @@ { "cell_type": "code", "execution_count": null, + "id": "de97031d", "metadata": {}, "outputs": [], "source": [ @@ -297,6 +307,7 @@ }, { "cell_type": "markdown", + "id": "b6252cfc", "metadata": {}, "source": [ "In addition, we can specify the `paired` argument to indicate paired data.\n", @@ -309,6 +320,7 @@ { "cell_type": "code", "execution_count": null, + "id": "b84cb874", "metadata": {}, "outputs": [], "source": [ @@ -319,6 +331,7 @@ }, { "cell_type": "markdown", + "id": "3fa1ced9", "metadata": {}, "source": [ "The **dabest** library features a range of effect sizes. In this case, we shall proceed with the default effect size, which is the mean difference.\n", @@ -329,6 +342,7 @@ { "cell_type": "code", "execution_count": null, + "id": "bba3d764", "metadata": {}, "outputs": [ { @@ -362,6 +376,7 @@ }, { "cell_type": "markdown", + "id": "ede08ee8", "metadata": {}, "source": [ "A dataframe of the mean_diff results can be extracted by calling the `results` attribute of the `dabest.mean_diff` object." @@ -370,6 +385,7 @@ { "cell_type": "code", "execution_count": null, + "id": "262835eb", "metadata": {}, "outputs": [ { @@ -476,6 +492,7 @@ }, { "cell_type": "markdown", + "id": "0ab07696", "metadata": {}, "source": [ "## Producing estimation plots\n", @@ -486,6 +503,7 @@ { "cell_type": "code", "execution_count": null, + "id": "90a3b185", "metadata": {}, "outputs": [ { @@ -505,6 +523,7 @@ }, { "cell_type": "markdown", + "id": "3714b336", "metadata": {}, "source": [ "For singular two-group comparisons, the plot will display the effect size curve by default to the right of the raw data.\n", @@ -516,6 +535,7 @@ { "cell_type": "code", "execution_count": null, + "id": "59ca18fb", "metadata": {}, "outputs": [ { @@ -535,6 +555,7 @@ }, { "cell_type": "markdown", + "id": "a47f367a", "metadata": {}, "source": [ "For multi two-group comparisons, the effect size curves will always be displayed below the raw data.\n", @@ -549,6 +570,7 @@ { "cell_type": "code", "execution_count": null, + "id": "09c70e90", "metadata": {}, "outputs": [ { @@ -568,6 +590,7 @@ }, { "cell_type": "markdown", + "id": "027cce0f", "metadata": {}, "source": [ "For paired data, we use\n", @@ -579,6 +602,7 @@ { "cell_type": "code", "execution_count": null, + "id": "1d60fb95", "metadata": {}, "outputs": [ { @@ -599,6 +623,7 @@ { "cell_type": "code", "execution_count": null, + "id": "51ba277c", "metadata": {}, "outputs": [ { @@ -619,6 +644,7 @@ { "cell_type": "code", "execution_count": null, + "id": "fb7b1c05", "metadata": {}, "outputs": [ { @@ -638,6 +664,7 @@ }, { "cell_type": "markdown", + "id": "08937736", "metadata": {}, "source": [ "For further aesthetic changes, the [Plot Aesthetics Tutorial](08-plot_aesthetics.html) provides detailed examples of how to customize the plot.\n" @@ -652,5 +679,5 @@ } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 5 } diff --git a/nbs/tutorials/03-shared_control_and_repeated_measures.ipynb b/nbs/tutorials/03-shared_control_and_repeated_measures.ipynb index 3f561723..de380b59 100644 --- a/nbs/tutorials/03-shared_control_and_repeated_measures.ipynb +++ b/nbs/tutorials/03-shared_control_and_repeated_measures.ipynb @@ -2,6 +2,7 @@ "cells": [ { "cell_type": "markdown", + "id": "50ee557d", "metadata": {}, "source": [ "# Shared Control & Repeated Measures\n", @@ -13,6 +14,7 @@ }, { "cell_type": "markdown", + "id": "3e3615d9", "metadata": {}, "source": [ "The **shared control plot** and **repeated measures plot** display common experimental\n", @@ -26,6 +28,7 @@ }, { "cell_type": "markdown", + "id": "234c2c3d", "metadata": {}, "source": [ "## Load libraries" @@ -34,6 +37,7 @@ { "cell_type": "code", "execution_count": null, + "id": "d091cc8f", "metadata": {}, "outputs": [ { @@ -77,6 +81,7 @@ { "cell_type": "code", "execution_count": null, + "id": "8db598c8", "metadata": {}, "outputs": [], "source": [ @@ -87,6 +92,7 @@ }, { "cell_type": "markdown", + "id": "9aad420a", "metadata": {}, "source": [ "## Creating a demo dataset" @@ -95,6 +101,7 @@ { "cell_type": "code", "execution_count": null, + "id": "7057855f", "metadata": {}, "outputs": [], "source": [ @@ -135,6 +142,7 @@ }, { "cell_type": "markdown", + "id": "83066710", "metadata": {}, "source": [ "## Shared control plot" @@ -143,6 +151,7 @@ { "cell_type": "code", "execution_count": null, + "id": "575eacac", "metadata": {}, "outputs": [ { @@ -181,6 +190,7 @@ { "cell_type": "code", "execution_count": null, + "id": "b3833f45", "metadata": {}, "outputs": [ { @@ -230,6 +240,7 @@ { "cell_type": "code", "execution_count": null, + "id": "b7d077b1", "metadata": {}, "outputs": [ { @@ -249,6 +260,7 @@ }, { "cell_type": "markdown", + "id": "b5cb76fb", "metadata": {}, "source": [ "``dabest`` allows for combining both two-group and shared control experiments into the same plot. This empowers you to perform robust analyses and present complex visualizations of your statistics elegantly." @@ -257,6 +269,7 @@ { "cell_type": "code", "execution_count": null, + "id": "5d4dd491", "metadata": {}, "outputs": [ { @@ -295,6 +308,7 @@ { "cell_type": "code", "execution_count": null, + "id": "26f2a0ff", "metadata": {}, "outputs": [ { @@ -344,6 +358,7 @@ { "cell_type": "code", "execution_count": null, + "id": "d88959b3", "metadata": {}, "outputs": [ { @@ -363,6 +378,7 @@ }, { "cell_type": "markdown", + "id": "d2831872", "metadata": {}, "source": [ "## Repeated measures plot" @@ -370,6 +386,7 @@ }, { "cell_type": "markdown", + "id": "3f46c2db", "metadata": {}, "source": [ "DABEST **v2023.02.14** expands the repertoire of plots for experiments with repeated-measures designs. DABEST now allows the visualization of paired experiments with one control and multiple test \n", @@ -391,6 +408,7 @@ { "cell_type": "code", "execution_count": null, + "id": "a33de166", "metadata": {}, "outputs": [ { @@ -425,6 +443,7 @@ { "cell_type": "code", "execution_count": null, + "id": "5c5a31f3", "metadata": {}, "outputs": [ { @@ -468,6 +487,7 @@ { "cell_type": "code", "execution_count": null, + "id": "0105af59", "metadata": {}, "outputs": [ { @@ -488,6 +508,7 @@ { "cell_type": "code", "execution_count": null, + "id": "7a73ccfc", "metadata": {}, "outputs": [ { @@ -522,6 +543,7 @@ { "cell_type": "code", "execution_count": null, + "id": "901b65f4", "metadata": {}, "outputs": [ { @@ -565,6 +587,7 @@ { "cell_type": "code", "execution_count": null, + "id": "968787fd", "metadata": {}, "outputs": [ { @@ -584,6 +607,7 @@ }, { "cell_type": "markdown", + "id": "5bafd7ea", "metadata": {}, "source": [ "Similar to unpaired data, DABEST empowers you to perform complex \n", @@ -593,6 +617,7 @@ { "cell_type": "code", "execution_count": null, + "id": "f307d789", "metadata": {}, "outputs": [ { @@ -615,6 +640,7 @@ }, { "cell_type": "markdown", + "id": "9a08d862", "metadata": {}, "source": [ "For further aesthetic changes, the [Plot Aesthetics Tutorial](08-plot_aesthetics.html) provides detailed examples of how to customize the plot.\n" @@ -629,5 +655,5 @@ } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 5 } diff --git a/nbs/tutorials/04-proportion_plot.ipynb b/nbs/tutorials/04-proportion_plot.ipynb index 6601e44a..69a9afbf 100644 --- a/nbs/tutorials/04-proportion_plot.ipynb +++ b/nbs/tutorials/04-proportion_plot.ipynb @@ -2,6 +2,7 @@ "cells": [ { "cell_type": "markdown", + "id": "9d86b658", "metadata": {}, "source": [ "# Proportion Plots\n", @@ -13,6 +14,7 @@ }, { "cell_type": "markdown", + "id": "55afb331", "metadata": {}, "source": [ "
As of v2023.02.14, DABEST can be used to generate Cohen's *h* and the corresponding proportion plot for binary data. It's important to note that the code we provide only supports numerical proportion data, \n", @@ -22,6 +24,7 @@ }, { "cell_type": "markdown", + "id": "af2a0920", "metadata": {}, "source": [ "## Load libraries" @@ -30,6 +33,7 @@ { "cell_type": "code", "execution_count": null, + "id": "7ba2369c", "metadata": {}, "outputs": [ { @@ -73,6 +77,7 @@ { "cell_type": "code", "execution_count": null, + "id": "0fefb0a2", "metadata": {}, "outputs": [], "source": [ @@ -84,6 +89,7 @@ }, { "cell_type": "markdown", + "id": "bbff8ce9", "metadata": {}, "source": [ "## Creating a demo dataset" @@ -92,6 +98,7 @@ { "cell_type": "code", "execution_count": null, + "id": "13d6539a", "metadata": {}, "outputs": [ { @@ -288,6 +295,7 @@ }, { "cell_type": "markdown", + "id": "e6353a8b", "metadata": {}, "source": [ "### Helper function to create a binary table - `dabest.prop_dataset` " @@ -295,6 +303,7 @@ }, { "cell_type": "markdown", + "id": "f92c4f73", "metadata": {}, "source": [ "In DABEST **v2024.3.29**, we incorporated feedback from biologists who may not have tables of 0’s and 1’s readily available. As a result, a convenient function - `dabest.prop_dataset` - to generate a binary dataset based on the specified sample sizes is provided. Users can generate a pandas.DataFrame containing the sample sizes for each element in the groups and the group names (optional if the sample sizes are provided in a dict)." @@ -303,6 +312,7 @@ { "cell_type": "code", "execution_count": null, + "id": "a9bf4e00", "metadata": {}, "outputs": [ { @@ -399,6 +409,7 @@ }, { "cell_type": "markdown", + "id": "d1bd3244", "metadata": {}, "source": [ "## Loading data" @@ -406,6 +417,7 @@ }, { "cell_type": "markdown", + "id": "5bfaa1dc", "metadata": {}, "source": [ "When loading data, you need to set the parameter ``proportional=True``." @@ -414,6 +426,7 @@ { "cell_type": "code", "execution_count": null, + "id": "e55047ff", "metadata": {}, "outputs": [ { @@ -443,6 +456,7 @@ }, { "cell_type": "markdown", + "id": "10f6baae", "metadata": {}, "source": [ "## Effect sizes" @@ -450,6 +464,7 @@ }, { "cell_type": "markdown", + "id": "065fa56e", "metadata": {}, "source": [ "To generate a proportion plot, the **dabest** library features two effect sizes:\n", @@ -463,6 +478,7 @@ { "cell_type": "code", "execution_count": null, + "id": "07c58d18", "metadata": {}, "outputs": [ { @@ -496,6 +512,7 @@ }, { "cell_type": "markdown", + "id": "93cd38c0", "metadata": {}, "source": [ "Let's compute the *Cohen's h* for our comparison." @@ -504,6 +521,7 @@ { "cell_type": "code", "execution_count": null, + "id": "23784a52", "metadata": {}, "outputs": [ { @@ -537,6 +555,7 @@ }, { "cell_type": "markdown", + "id": "7e87cf4c", "metadata": {}, "source": [ "## Generating proportion plots" @@ -544,6 +563,7 @@ }, { "cell_type": "markdown", + "id": "78792b19", "metadata": {}, "source": [ "To generate an **estimation plot**, simply use the\n", @@ -554,6 +574,7 @@ }, { "cell_type": "markdown", + "id": "4928f5a7", "metadata": {}, "source": [ "### Unpaired proportion plots" @@ -561,6 +582,7 @@ }, { "cell_type": "markdown", + "id": "885f928d", "metadata": {}, "source": [ "Unpaired proportion plots utilise the common bar plot. The bar plot displays the proportion of observations in the dataset that belong to the category of interest: \n", @@ -571,6 +593,7 @@ }, { "cell_type": "markdown", + "id": "b4cf37fd", "metadata": {}, "source": [ "#### Two-Group" @@ -579,6 +602,7 @@ { "cell_type": "code", "execution_count": null, + "id": "a7dccfe5", "metadata": {}, "outputs": [ { @@ -599,6 +623,7 @@ { "cell_type": "code", "execution_count": null, + "id": "8b91842f", "metadata": {}, "outputs": [ { @@ -618,6 +643,7 @@ }, { "cell_type": "markdown", + "id": "243a1a0b", "metadata": {}, "source": [ "Instead of a Gardner-Altman plot, you can generate a **Cumming estimation plot** by setting ``float_contrast=False`` in the ``.plot()`` method. This will plot the bootstrap effect sizes below the raw data." @@ -626,6 +652,7 @@ { "cell_type": "code", "execution_count": null, + "id": "8f79c196", "metadata": {}, "outputs": [ { @@ -645,6 +672,7 @@ }, { "cell_type": "markdown", + "id": "99528f73", "metadata": {}, "source": [ "#### Multi Two-Group, Shared-Control, and Multi Groups\n", @@ -654,6 +682,7 @@ { "cell_type": "code", "execution_count": null, + "id": "7d189c13", "metadata": {}, "outputs": [ { @@ -687,6 +716,7 @@ { "cell_type": "code", "execution_count": null, + "id": "314910b1", "metadata": {}, "outputs": [ { @@ -727,6 +757,7 @@ { "cell_type": "code", "execution_count": null, + "id": "ff871f09", "metadata": {}, "outputs": [ { @@ -747,6 +778,7 @@ { "cell_type": "code", "execution_count": null, + "id": "9cbe7f9b", "metadata": {}, "outputs": [ { @@ -781,6 +813,7 @@ { "cell_type": "code", "execution_count": null, + "id": "d4dbcf1b", "metadata": {}, "outputs": [ { @@ -824,6 +857,7 @@ { "cell_type": "code", "execution_count": null, + "id": "55fa5ca2", "metadata": {}, "outputs": [ { @@ -844,6 +878,7 @@ { "cell_type": "code", "execution_count": null, + "id": "36620e79", "metadata": {}, "outputs": [ { @@ -878,6 +913,7 @@ { "cell_type": "code", "execution_count": null, + "id": "a6817f58", "metadata": {}, "outputs": [ { @@ -921,6 +957,7 @@ { "cell_type": "code", "execution_count": null, + "id": "40d8ee2b", "metadata": {}, "outputs": [ { @@ -940,6 +977,7 @@ }, { "cell_type": "markdown", + "id": "d015dc02", "metadata": {}, "source": [ "### Paired proportion plots" @@ -947,6 +985,7 @@ }, { "cell_type": "markdown", + "id": "487b18ed", "metadata": {}, "source": [ "For the paired version of the proportion plot, we adopt the style of a Sankey Diagram. The width of each bar in each xtick represents the proportion of the corresponding label in the group, and the strip denotes the paired relationship for each observation.\n", @@ -958,6 +997,7 @@ }, { "cell_type": "markdown", + "id": "b662e9e6", "metadata": {}, "source": [ "#### Two-Group" @@ -966,6 +1006,7 @@ { "cell_type": "code", "execution_count": null, + "id": "6bc7c8f1", "metadata": {}, "outputs": [ { @@ -998,6 +1039,7 @@ { "cell_type": "code", "execution_count": null, + "id": "4f4b7bc3", "metadata": {}, "outputs": [ { @@ -1033,6 +1075,7 @@ { "cell_type": "code", "execution_count": null, + "id": "ca073736", "metadata": {}, "outputs": [ { @@ -1052,6 +1095,7 @@ }, { "cell_type": "markdown", + "id": "17832542", "metadata": {}, "source": [ "The Sankey plots for paired proportions also supports the ``float_contrast`` parameter, which can be set to ``False`` to produce a **Cumming estimation plot**.\n" @@ -1060,6 +1104,7 @@ { "cell_type": "code", "execution_count": null, + "id": "24f34bc2", "metadata": {}, "outputs": [ { @@ -1079,6 +1124,7 @@ }, { "cell_type": "markdown", + "id": "0c13d47c", "metadata": {}, "source": [ "#### Multi Two-Group, Repeated Measures, and Multi Groups\n", @@ -1088,6 +1134,7 @@ { "cell_type": "code", "execution_count": null, + "id": "897bbfd5", "metadata": {}, "outputs": [ { @@ -1122,6 +1169,7 @@ { "cell_type": "code", "execution_count": null, + "id": "9f3903b6", "metadata": {}, "outputs": [ { @@ -1165,6 +1213,7 @@ { "cell_type": "code", "execution_count": null, + "id": "bb3e2aa2", "metadata": {}, "outputs": [ { @@ -1185,6 +1234,7 @@ { "cell_type": "code", "execution_count": null, + "id": "126405f4", "metadata": {}, "outputs": [ { @@ -1220,6 +1270,7 @@ { "cell_type": "code", "execution_count": null, + "id": "e852ebf7", "metadata": {}, "outputs": [ { @@ -1267,6 +1318,7 @@ { "cell_type": "code", "execution_count": null, + "id": "47edfc40", "metadata": {}, "outputs": [ { @@ -1287,6 +1339,7 @@ { "cell_type": "code", "execution_count": null, + "id": "e74c1dfe", "metadata": {}, "outputs": [ { @@ -1322,6 +1375,7 @@ { "cell_type": "code", "execution_count": null, + "id": "6fd66091", "metadata": {}, "outputs": [ { @@ -1369,6 +1423,7 @@ { "cell_type": "code", "execution_count": null, + "id": "3dfcf13c", "metadata": {}, "outputs": [ { @@ -1389,6 +1444,7 @@ { "cell_type": "code", "execution_count": null, + "id": "73e4aaf1", "metadata": {}, "outputs": [ { @@ -1424,6 +1480,7 @@ { "cell_type": "code", "execution_count": null, + "id": "664ad256", "metadata": {}, "outputs": [ { @@ -1471,6 +1528,7 @@ { "cell_type": "code", "execution_count": null, + "id": "716f3bae", "metadata": {}, "outputs": [ { @@ -1490,6 +1548,7 @@ }, { "cell_type": "markdown", + "id": "fbf34d17", "metadata": {}, "source": [ "## Aesthetic adjustments\n", @@ -1499,6 +1558,7 @@ }, { "cell_type": "markdown", + "id": "8dd438f2", "metadata": {}, "source": [ "### Bar Width\n", @@ -1509,6 +1569,7 @@ { "cell_type": "code", "execution_count": null, + "id": "a5cabdfa", "metadata": {}, "outputs": [ { @@ -1528,6 +1589,7 @@ }, { "cell_type": "markdown", + "id": "651cd0d4", "metadata": {}, "source": [ "### Bar desaturation\n", @@ -1539,6 +1601,7 @@ { "cell_type": "code", "execution_count": null, + "id": "9b41c4a5", "metadata": {}, "outputs": [ { @@ -1558,6 +1621,7 @@ }, { "cell_type": "markdown", + "id": "03639659", "metadata": {}, "source": [ "### Raw Label and Contrast Label\n", @@ -1567,6 +1631,7 @@ { "cell_type": "code", "execution_count": null, + "id": "2783f021", "metadata": {}, "outputs": [ { @@ -1597,6 +1662,7 @@ }, { "cell_type": "markdown", + "id": "3763336c", "metadata": {}, "source": [ "### Barplot kwargs\n", @@ -1606,6 +1672,7 @@ { "cell_type": "code", "execution_count": null, + "id": "8b9225c1", "metadata": {}, "outputs": [ { @@ -1625,6 +1692,7 @@ }, { "cell_type": "markdown", + "id": "2e283cfc", "metadata": {}, "source": [ "### Sankey and Flow\n", @@ -1635,6 +1703,7 @@ { "cell_type": "code", "execution_count": null, + "id": "68515743", "metadata": {}, "outputs": [ { @@ -1681,6 +1750,7 @@ }, { "cell_type": "markdown", + "id": "f47070a9", "metadata": {}, "source": [ "### Sankey kwargs\n", @@ -1695,6 +1765,7 @@ { "cell_type": "code", "execution_count": null, + "id": "e482c557", "metadata": {}, "outputs": [ { @@ -1715,6 +1786,7 @@ }, { "cell_type": "markdown", + "id": "32f41159", "metadata": {}, "source": [ "### Custom Palette\n", @@ -1724,6 +1796,7 @@ }, { "cell_type": "markdown", + "id": "6626a173", "metadata": {}, "source": [ "A `custom_palette` dict can be passed for sankey plots, whereby two keys used are 0 and 1. The color associated with these keys will be used to color the bars in the sankey plot.\n", @@ -1734,6 +1807,7 @@ { "cell_type": "code", "execution_count": null, + "id": "c244c015", "metadata": {}, "outputs": [ { @@ -1764,6 +1838,7 @@ }, { "cell_type": "markdown", + "id": "802b4eb6", "metadata": {}, "source": [ "Similarly, premade matplotlib/seaborn color palette can be passed. For sankey plots, the first two colors in the palette will be used to color the bars in the sankey plot. For bar plots, the colors will be used to color the filled portion of the bar plot." @@ -1772,6 +1847,7 @@ { "cell_type": "code", "execution_count": null, + "id": "c2dbbb57", "metadata": {}, "outputs": [ { @@ -1802,6 +1878,7 @@ }, { "cell_type": "markdown", + "id": "d3da6311", "metadata": {}, "source": [ "Passing a custom palette list functions differently for bar plots and sankey plots:\n", @@ -1813,6 +1890,7 @@ { "cell_type": "code", "execution_count": null, + "id": "32005eb2", "metadata": {}, "outputs": [ { @@ -1843,6 +1921,7 @@ }, { "cell_type": "markdown", + "id": "ed09d7ed", "metadata": {}, "source": [ "### Add counts to proportion plots\n", @@ -1857,6 +1936,7 @@ { "cell_type": "code", "execution_count": null, + "id": "f4c41e28", "metadata": {}, "outputs": [ { @@ -1877,6 +1957,7 @@ }, { "cell_type": "markdown", + "id": "96671380", "metadata": {}, "source": [ "The sample counts kwargs can be utilised via `prop_sample_counts_kwargs` in the `.plot()` method." @@ -1885,6 +1966,7 @@ { "cell_type": "code", "execution_count": null, + "id": "37ddc29b", "metadata": {}, "outputs": [ { @@ -1904,6 +1986,7 @@ }, { "cell_type": "markdown", + "id": "e7fb10a4", "metadata": {}, "source": [ "For further aesthetic changes, the [Plot Aesthetics Tutorial](08-plot_aesthetics.html) provides detailed examples of how to customize the plot.\n" @@ -1918,5 +2001,5 @@ } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 5 } diff --git a/nbs/tutorials/05-mini_meta.ipynb b/nbs/tutorials/05-mini_meta.ipynb index 5d70306f..e89510f8 100644 --- a/nbs/tutorials/05-mini_meta.ipynb +++ b/nbs/tutorials/05-mini_meta.ipynb @@ -2,6 +2,7 @@ "cells": [ { "cell_type": "markdown", + "id": "e074b4cd", "metadata": {}, "source": [ "# Mini-Meta\n", @@ -13,6 +14,7 @@ }, { "cell_type": "markdown", + "id": "d7602abf", "metadata": {}, "source": [ "When scientists conduct replicates of the same experiment, the effect size of each replicate often varies, complicating the interpretation of the results. Starting from v2023.02.14, DABEST can now compute the meta-analyzed weighted effect size given multiple replicates of the same experiment. This can help resolve differences between replicates and simplify interpretation.\n", @@ -46,6 +48,7 @@ }, { "cell_type": "markdown", + "id": "f60f347a", "metadata": {}, "source": [ "Note that this utilizes the fixed-effects model of meta-analysis, in contrast to the random-effects model. In the fixed-effects model, all variation between the results of each replicate is assumed to be solely due to sampling error. Therefore, we recommend using this function exclusively for replications of the same experiment, where it can be safely assumed that each replicate estimates the same population mean $\\mu$.\n", @@ -57,6 +60,7 @@ }, { "cell_type": "markdown", + "id": "93359477", "metadata": {}, "source": [ "## Load libraries" @@ -65,6 +69,7 @@ { "cell_type": "code", "execution_count": null, + "id": "5f889eb3", "metadata": {}, "outputs": [ { @@ -108,6 +113,7 @@ { "cell_type": "code", "execution_count": null, + "id": "0d6f8ba8", "metadata": {}, "outputs": [], "source": [ @@ -118,6 +124,7 @@ }, { "cell_type": "markdown", + "id": "2a77eb0b", "metadata": {}, "source": [ "## Creating a demo dataset" @@ -126,6 +133,7 @@ { "cell_type": "code", "execution_count": null, + "id": "6bd57c4c", "metadata": {}, "outputs": [ { @@ -268,6 +276,7 @@ }, { "cell_type": "markdown", + "id": "5acf961f", "metadata": {}, "source": [ "We now have three *Control* and three *Test* groups, simulating three replicates of the same experiment. Our\n", @@ -277,6 +286,7 @@ }, { "cell_type": "markdown", + "id": "f634f0b7", "metadata": {}, "source": [ "This is known as a 'wide' dataset. See this\n", @@ -286,6 +296,7 @@ }, { "cell_type": "markdown", + "id": "148c542e", "metadata": {}, "source": [ "## Loading data" @@ -293,6 +304,7 @@ }, { "cell_type": "markdown", + "id": "fbdc1083", "metadata": {}, "source": [ "Next, we load data as usual using ``dabest.load()``. However, this time, we also specify the argument ``mini_meta=True``. Since we are loading data from three experiments, ``idx`` is passed as a tuple of tuples, as shown below.\n", @@ -303,6 +315,7 @@ { "cell_type": "code", "execution_count": null, + "id": "b456a848", "metadata": {}, "outputs": [ { @@ -335,6 +348,7 @@ }, { "cell_type": "markdown", + "id": "adbf8252", "metadata": {}, "source": [ "By calling the ``mean_diff`` attribute, you can view the mean differences for each group as well as the weighted delta.\n" @@ -343,6 +357,7 @@ { "cell_type": "code", "execution_count": null, + "id": "b9fec10b", "metadata": {}, "outputs": [ { @@ -385,6 +400,7 @@ }, { "cell_type": "markdown", + "id": "be1075b3", "metadata": {}, "source": [ "You can view the details of each experiment by accessing the property `mean_diff.results` as follows." @@ -393,6 +409,7 @@ { "cell_type": "code", "execution_count": null, + "id": "49d8375e", "metadata": {}, "outputs": [ { @@ -636,6 +653,7 @@ }, { "cell_type": "markdown", + "id": "fb25bb87", "metadata": {}, "source": [ "Note, however, that this does not contain the relevant information for our weighted delta. The details of the weighted delta are stored as attributes of the ``mini_meta`` object, such as:\n", @@ -654,6 +672,7 @@ { "cell_type": "code", "execution_count": null, + "id": "8e428551", "metadata": {}, "outputs": [ { @@ -784,6 +803,7 @@ }, { "cell_type": "markdown", + "id": "fdb67182", "metadata": {}, "source": [ "## Generating mini meta plots" @@ -792,6 +812,7 @@ { "cell_type": "code", "execution_count": null, + "id": "95ae87cd", "metadata": {}, "outputs": [ { @@ -811,6 +832,7 @@ }, { "cell_type": "markdown", + "id": "18855f31", "metadata": {}, "source": [ "You can also hide the weighted delta by passing the argument ``show_mini_meta=False``. In this case, the resulting graph would be identical to a multiple two-groups plot.\n" @@ -819,6 +841,7 @@ { "cell_type": "code", "execution_count": null, + "id": "52b75aa6", "metadata": {}, "outputs": [ { @@ -838,6 +861,7 @@ }, { "cell_type": "markdown", + "id": "07dd8ed5", "metadata": {}, "source": [ "As with regular two-groups plots, you can also analyse paired mini meta experiments via the `paired=baseline` argument." @@ -846,6 +870,7 @@ { "cell_type": "code", "execution_count": null, + "id": "f8a30435", "metadata": {}, "outputs": [ { @@ -866,6 +891,7 @@ }, { "cell_type": "markdown", + "id": "3fa36675", "metadata": {}, "source": [ "For further aesthetic changes, the [Plot Aesthetics Tutorial](08-plot_aesthetics.html) provides detailed examples of how to customize the plot.\n" @@ -880,5 +906,5 @@ } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 5 } diff --git a/nbs/tutorials/06-delta_delta.ipynb b/nbs/tutorials/06-delta_delta.ipynb index 5a7f09a4..20c76929 100644 --- a/nbs/tutorials/06-delta_delta.ipynb +++ b/nbs/tutorials/06-delta_delta.ipynb @@ -2,6 +2,7 @@ "cells": [ { "cell_type": "markdown", + "id": "20ccf903", "metadata": {}, "source": [ "# Delta-Delta\n", @@ -13,6 +14,7 @@ }, { "cell_type": "markdown", + "id": "0f3b6b88", "metadata": {}, "source": [ "**Since v2023.02.14, DABEST also supports the calculation of delta-delta, an experimental function that facilitates the comparison between two bootstrapped effect sizes computed from two independent categorical variables.** \n", @@ -28,6 +30,7 @@ }, { "cell_type": "markdown", + "id": "4cab153a", "metadata": {}, "source": [ "| | Wildtype | Mutant |\n", @@ -38,6 +41,7 @@ }, { "cell_type": "markdown", + "id": "cba57b53", "metadata": {}, "source": [ "There are two ``Treatment`` conditions, ``Placebo`` (control group) and ``Drug`` (test group). There are two ``Genotype``\\s: ``W`` (wild type population) and ``M`` (mutant population). Additionally, each experiment was conducted twice (``Rep1`` and ``Rep2``). We will perform several analyses to visualise these differences in a simulated dataset. \n" @@ -45,6 +49,7 @@ }, { "cell_type": "markdown", + "id": "eba4dd06", "metadata": {}, "source": [ "## Load libraries" @@ -53,6 +58,7 @@ { "cell_type": "code", "execution_count": null, + "id": "f7051d73", "metadata": {}, "outputs": [ { @@ -74,6 +80,7 @@ { "cell_type": "code", "execution_count": null, + "id": "0c1bdbb7", "metadata": {}, "outputs": [], "source": [ @@ -84,6 +91,7 @@ }, { "cell_type": "markdown", + "id": "aeeafbcf", "metadata": {}, "source": [ "## Creating a demo dataset" @@ -92,6 +100,7 @@ { "cell_type": "code", "execution_count": null, + "id": "3a5686f3", "metadata": {}, "outputs": [ { @@ -228,6 +237,7 @@ }, { "cell_type": "markdown", + "id": "f645a28b", "metadata": {}, "source": [ "## Loading data" @@ -235,6 +245,7 @@ }, { "cell_type": "markdown", + "id": "accc2f5c", "metadata": {}, "source": [ "To create a delta-delta plot, you simply need to set ``delta2=True`` in the \n", @@ -244,6 +255,7 @@ { "cell_type": "code", "execution_count": null, + "id": "ab57196f", "metadata": {}, "outputs": [ { @@ -276,6 +288,7 @@ { "cell_type": "code", "execution_count": null, + "id": "d3d23b98", "metadata": {}, "outputs": [ { @@ -315,6 +328,7 @@ }, { "cell_type": "markdown", + "id": "55eecede", "metadata": {}, "source": [ "## Generating delta-delta plots" @@ -323,6 +337,7 @@ { "cell_type": "code", "execution_count": null, + "id": "9beac2bf", "metadata": {}, "outputs": [ { @@ -342,6 +357,7 @@ }, { "cell_type": "markdown", + "id": "9beeb024", "metadata": {}, "source": [ "In the above plot, the horizontal axis represents the ``Genotype`` condition\n", @@ -374,6 +390,7 @@ }, { "cell_type": "markdown", + "id": "cbe874ee", "metadata": {}, "source": [ "The configuration of comparison we performed above is reminiscent of a two-way ANOVA. In fact, the delta - delta is an effect size estimated for the interaction term between ``Treatment`` and ``Genotype``. Main effects of ``Treatment`` and ``Genotype``, on the other hand, can be determined by simpler, univariate contrast plots. " @@ -381,6 +398,7 @@ }, { "cell_type": "markdown", + "id": "5d743a46", "metadata": {}, "source": [ "## Specifying grouping for comparisons" @@ -388,6 +406,7 @@ }, { "cell_type": "markdown", + "id": "5f603498", "metadata": {}, "source": [ "In the example above, we used the convention of *test - control* but you can manipulate the orders of the experiment groups as well as the horizontal axis variable by setting the paremeters ``experiment_label`` and ``x1_level``.\n" @@ -396,6 +415,7 @@ { "cell_type": "code", "execution_count": null, + "id": "7e29be58", "metadata": {}, "outputs": [ { @@ -421,6 +441,7 @@ }, { "cell_type": "markdown", + "id": "347872d1", "metadata": {}, "source": [ "Utilising the `show_delta2` argument within the `.plot()` method allows for control of whether the delta-delta effect size is displayed on the plot. By default, this is set to `True`. " @@ -429,6 +450,7 @@ { "cell_type": "code", "execution_count": null, + "id": "21886e87", "metadata": {}, "outputs": [ { @@ -448,6 +470,7 @@ }, { "cell_type": "markdown", + "id": "69aa38f7", "metadata": {}, "source": [ "The delta-delta function also supports paired data, providing a useful alternative visualization of the data. Assuming that the placebo and drug treatment were administered to the same subjects, our data is paired between the treatment conditions. We can specify this by using ``Treatment`` as ``x`` and ``Genotype`` as ``experiment``, and we further specify that ``id_col`` is ``ID``, linking data from the same subject with each other. Since we have conducted two replicates of the experiments, we can also colour the slope lines according to ``Rep``. " @@ -456,6 +479,7 @@ { "cell_type": "code", "execution_count": null, + "id": "fc76ceea", "metadata": {}, "outputs": [ { @@ -479,6 +503,7 @@ }, { "cell_type": "markdown", + "id": "b89c0f82", "metadata": {}, "source": [ "We see that the drug had a non-specific effect of -0.321 [95%CI -0.498, -0.131] on wild type subjects even when they were not sick, and it had a bigger effect of -1.22 [95%CI -1.52, -0.906] in mutant subjects. In this visualisation, we can see the delta-delta value of -0.903 [95%CI -1.21, -0.587] as the net effect of the drug accounting for non-specific actions in healthy individuals. \n" @@ -486,6 +511,7 @@ }, { "cell_type": "markdown", + "id": "c35731fc", "metadata": {}, "source": [ "The mean difference between drug and placebo treatments in wild type subjects is:\n", @@ -505,6 +531,7 @@ }, { "cell_type": "markdown", + "id": "bbddc245", "metadata": {}, "source": [ "## Standardising delta-delta effect sizes with Delta g" @@ -512,6 +539,7 @@ }, { "cell_type": "markdown", + "id": "1677b7e1", "metadata": {}, "source": [ "Standardized mean difference statistics like Cohen's d and Hedges' g quantify effect sizes in terms of the sample variance. We have introduced a metric, *Delta g*, to standardize delta-delta effects. This metric enables the comparison between measurements of different dimensions.\n", @@ -533,6 +561,7 @@ { "cell_type": "code", "execution_count": null, + "id": "1da01bb3", "metadata": {}, "outputs": [ { @@ -572,6 +601,7 @@ }, { "cell_type": "markdown", + "id": "e19e2991", "metadata": {}, "source": [ "We see the standardised delta-delta (delta *g*) value of -2.11 standard deviations [95%CI -2.98, -1.2] as the net effect of the drug accounting for non-specific actions in healthy individuals. " @@ -580,6 +610,7 @@ { "cell_type": "code", "execution_count": null, + "id": "6d7e0170", "metadata": {}, "outputs": [ { @@ -599,6 +630,7 @@ }, { "cell_type": "markdown", + "id": "54c0438a", "metadata": {}, "source": [ "## Delta-delta for binary data\n", @@ -608,6 +640,7 @@ { "cell_type": "code", "execution_count": null, + "id": "e8b8c2d7", "metadata": {}, "outputs": [ { @@ -689,6 +722,7 @@ }, { "cell_type": "markdown", + "id": "bdbf61d8", "metadata": {}, "source": [ "## Statistics" @@ -696,6 +730,7 @@ }, { "cell_type": "markdown", + "id": "38e23d1d", "metadata": {}, "source": [ "You can find all outputs of the delta-delta calculation by assessing the attribute named ``delta_delta`` of the effect size object." @@ -704,6 +739,7 @@ { "cell_type": "code", "execution_count": null, + "id": "d070ee64", "metadata": {}, "outputs": [ { @@ -735,6 +771,7 @@ }, { "cell_type": "markdown", + "id": "8fc68867", "metadata": {}, "source": [ "The ``delta_delta`` object has its own attributes, containing various information of delta-delta.\n", @@ -752,6 +789,7 @@ { "cell_type": "code", "execution_count": null, + "id": "f3bec88c", "metadata": {}, "outputs": [ { @@ -868,6 +906,7 @@ }, { "cell_type": "markdown", + "id": "c10aa935", "metadata": {}, "source": [ "Similarly, for the standardised delta-delta effect size, the `hedges_g` object has its own delta delta (Delta *g*) results attribute." @@ -876,6 +915,7 @@ { "cell_type": "code", "execution_count": null, + "id": "3b30812a", "metadata": {}, "outputs": [ { @@ -992,6 +1032,7 @@ }, { "cell_type": "markdown", + "id": "991ca7ab", "metadata": {}, "source": [ "For further aesthetic changes, the [Plot Aesthetics Tutorial](08-plot_aesthetics.html) provides detailed examples of how to customize the plot.\n" @@ -1006,5 +1047,5 @@ } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 5 } diff --git a/nbs/tutorials/07-horizontal_plot.ipynb b/nbs/tutorials/07-horizontal_plot.ipynb index a1516109..206f6073 100644 --- a/nbs/tutorials/07-horizontal_plot.ipynb +++ b/nbs/tutorials/07-horizontal_plot.ipynb @@ -2,6 +2,7 @@ "cells": [ { "cell_type": "markdown", + "id": "717ffa0a", "metadata": {}, "source": [ "# Horizontal Plots\n", @@ -13,6 +14,7 @@ }, { "cell_type": "markdown", + "id": "2063d217", "metadata": {}, "source": [ "In DABEST **v2025.03.27**, we introduce a new plotting orientation: **horizontal plots**. \n", @@ -22,6 +24,7 @@ }, { "cell_type": "markdown", + "id": "83c78436", "metadata": {}, "source": [ "## Load libraries" @@ -30,6 +33,7 @@ { "cell_type": "code", "execution_count": null, + "id": "90f630c9", "metadata": {}, "outputs": [ { @@ -73,6 +77,7 @@ { "cell_type": "code", "execution_count": null, + "id": "afc3ff31", "metadata": {}, "outputs": [], "source": [ @@ -83,6 +88,7 @@ }, { "cell_type": "markdown", + "id": "c563c6f3", "metadata": {}, "source": [ "## Creating a demo dataset" @@ -91,6 +97,7 @@ { "cell_type": "code", "execution_count": null, + "id": "ab728900", "metadata": {}, "outputs": [], "source": [ @@ -132,6 +139,7 @@ }, { "cell_type": "markdown", + "id": "c1395293", "metadata": {}, "source": [ "## Generating two-group plots" @@ -140,6 +148,7 @@ { "cell_type": "code", "execution_count": null, + "id": "228a940a", "metadata": {}, "outputs": [ { @@ -173,6 +182,7 @@ }, { "cell_type": "markdown", + "id": "f181ddf6", "metadata": {}, "source": [ "## Generating shared-control and repeated-measures plots" @@ -181,6 +191,7 @@ { "cell_type": "code", "execution_count": null, + "id": "42b671b5", "metadata": {}, "outputs": [ { @@ -227,6 +238,7 @@ }, { "cell_type": "markdown", + "id": "1a95d54f", "metadata": {}, "source": [ "## Generating multi-group plots" @@ -235,6 +247,7 @@ { "cell_type": "code", "execution_count": null, + "id": "a23d4b81", "metadata": {}, "outputs": [ { @@ -255,6 +268,7 @@ }, { "cell_type": "markdown", + "id": "39ca23c1", "metadata": {}, "source": [ "## Generating proportion plots\n" @@ -263,6 +277,7 @@ { "cell_type": "code", "execution_count": null, + "id": "818e7fe6", "metadata": {}, "outputs": [], "source": [ @@ -311,6 +326,7 @@ { "cell_type": "code", "execution_count": null, + "id": "a15c416d", "metadata": {}, "outputs": [ { @@ -344,6 +360,7 @@ }, { "cell_type": "markdown", + "id": "ff282295", "metadata": {}, "source": [ "## Generating delta-delta plots" @@ -352,6 +369,7 @@ { "cell_type": "code", "execution_count": null, + "id": "cfaa807c", "metadata": {}, "outputs": [], "source": [ @@ -401,6 +419,7 @@ { "cell_type": "code", "execution_count": null, + "id": "e4fd9646", "metadata": {}, "outputs": [ { @@ -421,6 +440,7 @@ }, { "cell_type": "markdown", + "id": "1d95a2e1", "metadata": {}, "source": [ "## Generating mini-meta plots" @@ -429,6 +449,7 @@ { "cell_type": "code", "execution_count": null, + "id": "f101777c", "metadata": {}, "outputs": [ { @@ -449,6 +470,7 @@ }, { "cell_type": "markdown", + "id": "42cc7f56", "metadata": {}, "source": [ "## Controlling aesthetics\n", @@ -458,6 +480,7 @@ }, { "cell_type": "markdown", + "id": "78e4e3e1", "metadata": {}, "source": [ "### Swarm side\n", @@ -469,6 +492,7 @@ }, { "cell_type": "markdown", + "id": "a1583cd9", "metadata": {}, "source": [ "Default is `swarm_side='left'`" @@ -477,6 +501,7 @@ { "cell_type": "code", "execution_count": null, + "id": "27a1ac31", "metadata": {}, "outputs": [ { @@ -497,6 +522,7 @@ }, { "cell_type": "markdown", + "id": "5db94d12", "metadata": {}, "source": [ "`swarm_side='center'`" @@ -505,6 +531,7 @@ { "cell_type": "code", "execution_count": null, + "id": "3f37935e", "metadata": {}, "outputs": [ { @@ -524,6 +551,7 @@ }, { "cell_type": "markdown", + "id": "752c6946", "metadata": {}, "source": [ "`swarm_side='right'`" @@ -532,6 +560,7 @@ { "cell_type": "code", "execution_count": null, + "id": "30eb0a24", "metadata": {}, "outputs": [ { @@ -551,6 +580,7 @@ }, { "cell_type": "markdown", + "id": "aea8e8b5", "metadata": {}, "source": [ "### Table kwargs\n", @@ -573,6 +603,7 @@ { "cell_type": "code", "execution_count": null, + "id": "74b97613", "metadata": {}, "outputs": [ { @@ -601,6 +632,7 @@ }, { "cell_type": "markdown", + "id": "f521d0fe", "metadata": {}, "source": [ "The table axis can be hidden using the `'show':False` in the `horizontal_table_kwargs` dict." @@ -609,6 +641,7 @@ { "cell_type": "code", "execution_count": null, + "id": "112b692a", "metadata": {}, "outputs": [ { @@ -629,6 +662,7 @@ }, { "cell_type": "markdown", + "id": "f26c5762", "metadata": {}, "source": [ "### Gridkey \n", @@ -643,6 +677,7 @@ { "cell_type": "code", "execution_count": null, + "id": "a0b1cc86", "metadata": {}, "outputs": [ { @@ -670,5 +705,5 @@ } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 5 } diff --git a/nbs/tutorials/08-plot_aesthetics.ipynb b/nbs/tutorials/08-plot_aesthetics.ipynb index cd4f0e62..450cdd55 100644 --- a/nbs/tutorials/08-plot_aesthetics.ipynb +++ b/nbs/tutorials/08-plot_aesthetics.ipynb @@ -2,6 +2,7 @@ "cells": [ { "cell_type": "markdown", + "id": "f050658e", "metadata": {}, "source": [ "# Controlling Plot Aesthetics\n", @@ -13,6 +14,7 @@ }, { "cell_type": "markdown", + "id": "9608e377", "metadata": {}, "source": [ " Since **v2024.03.29**, swarmplots are, by default, plotted asymmetrically to the right side. For detailed information, please refer to [Swarm Side](#changing-swarm-side).\n", @@ -40,6 +42,7 @@ }, { "cell_type": "markdown", + "id": "7a82e9a2", "metadata": {}, "source": [ "## Load libraries" @@ -48,6 +51,7 @@ { "cell_type": "code", "execution_count": null, + "id": "2fbf7ec7", "metadata": {}, "outputs": [ { @@ -92,6 +96,7 @@ { "cell_type": "code", "execution_count": null, + "id": "e74d9aaf", "metadata": {}, "outputs": [], "source": [ @@ -102,6 +107,7 @@ }, { "cell_type": "markdown", + "id": "e127428c", "metadata": {}, "source": [ "## Creating a demo dataset" @@ -110,6 +116,7 @@ { "cell_type": "code", "execution_count": null, + "id": "4a87b641", "metadata": {}, "outputs": [], "source": [ @@ -244,6 +251,7 @@ }, { "cell_type": "markdown", + "id": "312bf080", "metadata": {}, "source": [ "## Changing the graph colours\n", @@ -255,6 +263,7 @@ { "cell_type": "code", "execution_count": null, + "id": "54dd7271", "metadata": {}, "outputs": [ { @@ -286,6 +295,7 @@ }, { "cell_type": "markdown", + "id": "e822f932", "metadata": {}, "source": [ "### Custom palette\n", @@ -304,6 +314,7 @@ }, { "cell_type": "markdown", + "id": "6b551273", "metadata": {}, "source": [ "#### A list of colors" @@ -312,6 +323,7 @@ { "cell_type": "code", "execution_count": null, + "id": "823b7192", "metadata": {}, "outputs": [ { @@ -331,6 +343,7 @@ }, { "cell_type": "markdown", + "id": "3d78e17f", "metadata": {}, "source": [ "#### Seaborn color palette" @@ -339,6 +352,7 @@ { "cell_type": "code", "execution_count": null, + "id": "1aa7bbea", "metadata": {}, "outputs": [ { @@ -358,6 +372,7 @@ }, { "cell_type": "markdown", + "id": "45b3ceff", "metadata": {}, "source": [ "#### Matplotlib color map/palette" @@ -366,6 +381,7 @@ { "cell_type": "code", "execution_count": null, + "id": "2d9a0e16", "metadata": {}, "outputs": [ { @@ -396,6 +412,7 @@ }, { "cell_type": "markdown", + "id": "9062fecb", "metadata": {}, "source": [ "#### A user-defined dictionary\n", @@ -406,6 +423,7 @@ { "cell_type": "code", "execution_count": null, + "id": "8b81a893", "metadata": {}, "outputs": [ { @@ -431,6 +449,7 @@ }, { "cell_type": "markdown", + "id": "4d0e3fd1", "metadata": {}, "source": [ "For proportion plots (barplots and sankey), a color palette dict can also be supplied via `{1: first_color, 0, second_color}` where first_color and second_color are valid matplotlib colours." @@ -439,6 +458,7 @@ { "cell_type": "code", "execution_count": null, + "id": "6581fc9f", "metadata": {}, "outputs": [ { @@ -459,6 +479,7 @@ { "cell_type": "code", "execution_count": null, + "id": "b32b802f", "metadata": {}, "outputs": [ { @@ -478,6 +499,7 @@ }, { "cell_type": "markdown", + "id": "b4687df4", "metadata": {}, "source": [ "#### Color palette changes also now affect the effect size curve colors in paired plots\n", @@ -488,6 +510,7 @@ { "cell_type": "code", "execution_count": null, + "id": "d1e34f90", "metadata": {}, "outputs": [ { @@ -507,6 +530,7 @@ }, { "cell_type": "markdown", + "id": "18e6c0e9", "metadata": {}, "source": [ "## Color saturation\n", @@ -520,6 +544,7 @@ { "cell_type": "code", "execution_count": null, + "id": "6d2cc09a", "metadata": {}, "outputs": [ { @@ -541,6 +566,7 @@ }, { "cell_type": "markdown", + "id": "976d3d7a", "metadata": {}, "source": [ "## Alpha (transparency)\n", @@ -551,6 +577,7 @@ { "cell_type": "code", "execution_count": null, + "id": "09345d42", "metadata": {}, "outputs": [ { @@ -582,6 +609,7 @@ }, { "cell_type": "markdown", + "id": "f454d2bc", "metadata": {}, "source": [ "It is also possible change the transparency of the effect size curves by using the `contrast_alpha` parameter. This can also be \n", @@ -591,6 +619,7 @@ { "cell_type": "code", "execution_count": null, + "id": "9ad0dfc7", "metadata": {}, "outputs": [ { @@ -622,6 +651,7 @@ }, { "cell_type": "markdown", + "id": "13da3fc1", "metadata": {}, "source": [ "## Marker size\n", @@ -631,6 +661,7 @@ { "cell_type": "code", "execution_count": null, + "id": "7239686e", "metadata": {}, "outputs": [ { @@ -651,6 +682,7 @@ }, { "cell_type": "markdown", + "id": "482b1497", "metadata": {}, "source": [ "## Axes" @@ -658,6 +690,7 @@ }, { "cell_type": "markdown", + "id": "ff0d7fb7", "metadata": {}, "source": [ "### Lims\n", @@ -668,6 +701,7 @@ { "cell_type": "code", "execution_count": null, + "id": "1c4f9835", "metadata": {}, "outputs": [ { @@ -688,6 +722,7 @@ }, { "cell_type": "markdown", + "id": "4643eb83", "metadata": {}, "source": [ "If the effect size is qualitatively inverted (ie. a smaller value is a\n", @@ -698,6 +733,7 @@ { "cell_type": "code", "execution_count": null, + "id": "a5c27d52", "metadata": {}, "outputs": [ { @@ -717,6 +753,7 @@ }, { "cell_type": "markdown", + "id": "59414b18", "metadata": {}, "source": [ "The contrast axes share the same y-limits as those of the delta-delta plot. Thus, the y axis of the delta-delta plot changes as well." @@ -725,6 +762,7 @@ { "cell_type": "code", "execution_count": null, + "id": "f1606464", "metadata": {}, "outputs": [ { @@ -744,6 +782,7 @@ }, { "cell_type": "markdown", + "id": "c5013e84", "metadata": {}, "source": [ "You can also change the y-limit of the delta-delta axes and the regular delta axes via the `delta2_ylim` parameter." @@ -752,6 +791,7 @@ { "cell_type": "code", "execution_count": null, + "id": "e87009b1", "metadata": {}, "outputs": [ { @@ -771,6 +811,7 @@ }, { "cell_type": "markdown", + "id": "6c8ce9d5", "metadata": {}, "source": [ "### Labels\n", @@ -782,6 +823,7 @@ { "cell_type": "code", "execution_count": null, + "id": "e7e095c7", "metadata": {}, "outputs": [ { @@ -803,6 +845,7 @@ }, { "cell_type": "markdown", + "id": "97230328", "metadata": {}, "source": [ "Unique for delta-delta:\n", @@ -812,6 +855,7 @@ { "cell_type": "code", "execution_count": null, + "id": "07225a03", "metadata": {}, "outputs": [ { @@ -831,6 +875,7 @@ }, { "cell_type": "markdown", + "id": "1db8d529", "metadata": {}, "source": [ "### Axes ticks\n", @@ -845,6 +890,7 @@ { "cell_type": "code", "execution_count": null, + "id": "1dfc1df3", "metadata": {}, "outputs": [ { @@ -875,6 +921,7 @@ }, { "cell_type": "markdown", + "id": "a2d0461a", "metadata": {}, "source": [ "### Add counts to tick labels\n", @@ -885,6 +932,7 @@ { "cell_type": "code", "execution_count": null, + "id": "40fa2021", "metadata": {}, "outputs": [ { @@ -905,6 +953,7 @@ }, { "cell_type": "markdown", + "id": "2ec11b77", "metadata": {}, "source": [ "## Changing swarm side\n", @@ -916,6 +965,7 @@ { "cell_type": "code", "execution_count": null, + "id": "c98edf2b", "metadata": {}, "outputs": [ { @@ -957,6 +1007,7 @@ }, { "cell_type": "markdown", + "id": "bfb6a084", "metadata": {}, "source": [ "## Creating estimation plots in existing axes" @@ -964,6 +1015,7 @@ }, { "cell_type": "markdown", + "id": "c2cbd8b2", "metadata": {}, "source": [ "*Implemented in v0.2.6 by Adam Nekimken*.\n", @@ -976,6 +1028,7 @@ { "cell_type": "code", "execution_count": null, + "id": "093bbd83", "metadata": {}, "outputs": [], "source": [ @@ -990,6 +1043,7 @@ { "cell_type": "code", "execution_count": null, + "id": "65f86ec5", "metadata": {}, "outputs": [ { @@ -1021,6 +1075,7 @@ }, { "cell_type": "markdown", + "id": "091e817d", "metadata": {}, "source": [ "In this case, to access the individual rawdata axes, use\n", @@ -1031,6 +1086,7 @@ { "cell_type": "code", "execution_count": null, + "id": "babb6587", "metadata": {}, "outputs": [ { @@ -1054,6 +1110,7 @@ }, { "cell_type": "markdown", + "id": "91106d74", "metadata": {}, "source": [ "## Legend\n", @@ -1063,6 +1120,7 @@ { "cell_type": "code", "execution_count": null, + "id": "1228fc1d", "metadata": {}, "outputs": [ { @@ -1083,6 +1141,7 @@ }, { "cell_type": "markdown", + "id": "7dd00ed6", "metadata": {}, "source": [ "## Hiding options \n", @@ -1092,6 +1151,7 @@ { "cell_type": "code", "execution_count": null, + "id": "012a6452", "metadata": {}, "outputs": [ { @@ -1111,6 +1171,7 @@ }, { "cell_type": "markdown", + "id": "9d0b2d3f", "metadata": {}, "source": [ "Similarly, you can hide the delta-delta effect size by setting \n", @@ -1120,6 +1181,7 @@ { "cell_type": "code", "execution_count": null, + "id": "9306729c", "metadata": {}, "outputs": [ { @@ -1139,6 +1201,7 @@ }, { "cell_type": "markdown", + "id": "81c87af0", "metadata": {}, "source": [ "## Effect size error bar and marker\n", @@ -1160,6 +1223,7 @@ { "cell_type": "code", "execution_count": null, + "id": "62b74c3e", "metadata": {}, "outputs": [ { @@ -1179,6 +1243,7 @@ }, { "cell_type": "markdown", + "id": "47140b62", "metadata": {}, "source": [ "Modifying the appearance of the effect size error bar can be done via the `contrast_errorbar_kwargs` parameter. This parameter accepts a dictionary of keyword arguments.\n", @@ -1195,6 +1260,7 @@ { "cell_type": "code", "execution_count": null, + "id": "7d9dbb13", "metadata": {}, "outputs": [ { @@ -1214,6 +1280,7 @@ }, { "cell_type": "markdown", + "id": "f3d6bc15", "metadata": {}, "source": [ "## Group summaries\n", @@ -1227,6 +1294,7 @@ }, { "cell_type": "markdown", + "id": "ff2fd6cc", "metadata": {}, "source": [ "The type of group summary can be specified via `group_summaries` in the `.plot()` method and must be one of these: `'median_quartiles'`, `'mean_sd'`, `None`.\n", @@ -1237,6 +1305,7 @@ { "cell_type": "code", "execution_count": null, + "id": "e61f77c2", "metadata": {}, "outputs": [ { @@ -1278,6 +1347,7 @@ }, { "cell_type": "markdown", + "id": "b7908353", "metadata": {}, "source": [ "For slopegraphs, the group summary is represented by a solid line connecting the group mean/median with error bars." @@ -1286,6 +1356,7 @@ { "cell_type": "code", "execution_count": null, + "id": "862d87b1", "metadata": {}, "outputs": [ { @@ -1327,6 +1398,7 @@ }, { "cell_type": "markdown", + "id": "00176729", "metadata": {}, "source": [ "**Group summaries** have an associated kwargs `group_summaries_kwargs`\n", @@ -1344,6 +1416,7 @@ { "cell_type": "code", "execution_count": null, + "id": "441e5147", "metadata": {}, "outputs": [ { @@ -1364,6 +1437,7 @@ { "cell_type": "code", "execution_count": null, + "id": "ea5e118c", "metadata": {}, "outputs": [ { @@ -1383,6 +1457,7 @@ }, { "cell_type": "markdown", + "id": "4033f7c2", "metadata": {}, "source": [ "## Raw bars" @@ -1390,6 +1465,7 @@ }, { "cell_type": "markdown", + "id": "d5eed93f", "metadata": {}, "source": [ "**Raw bars** are included in swarmplots by default. It can be turned off by setting `raw_bars=False` in the `.plot()` method." @@ -1398,6 +1474,7 @@ { "cell_type": "code", "execution_count": null, + "id": "afe820f4", "metadata": {}, "outputs": [ { @@ -1417,6 +1494,7 @@ }, { "cell_type": "markdown", + "id": "684b8010", "metadata": {}, "source": [ "Raw bar kwargs can be utilised via `raw_bars_kwargs` in the `.plot()` method.\n", @@ -1427,6 +1505,7 @@ { "cell_type": "code", "execution_count": null, + "id": "d207d2bf", "metadata": {}, "outputs": [ { @@ -1448,6 +1527,7 @@ }, { "cell_type": "markdown", + "id": "d0aa1055", "metadata": {}, "source": [ "## Contrast bars\n", @@ -1457,6 +1537,7 @@ { "cell_type": "code", "execution_count": null, + "id": "61626d46", "metadata": {}, "outputs": [ { @@ -1476,6 +1557,7 @@ }, { "cell_type": "markdown", + "id": "0667877a", "metadata": {}, "source": [ "Contrast bar kwargs can be utilised via `contrast_bars_kwargs` in the `.plot()` method.\n", @@ -1486,6 +1568,7 @@ { "cell_type": "code", "execution_count": null, + "id": "1087421b", "metadata": {}, "outputs": [ { @@ -1507,6 +1590,7 @@ }, { "cell_type": "markdown", + "id": "ecdfcb2e", "metadata": {}, "source": [ "## Reference band\n", @@ -1516,6 +1600,7 @@ { "cell_type": "code", "execution_count": null, + "id": "31b7831a", "metadata": {}, "outputs": [ { @@ -1535,6 +1620,7 @@ }, { "cell_type": "markdown", + "id": "d76dc0f7", "metadata": {}, "source": [ "Reference band kwargs can be utilised via `reference_band_kwargs` in the `.plot()` method.\n", @@ -1550,6 +1636,7 @@ { "cell_type": "code", "execution_count": null, + "id": "173c109c", "metadata": {}, "outputs": [ { @@ -1571,6 +1658,7 @@ }, { "cell_type": "markdown", + "id": "319bf446", "metadata": {}, "source": [ "## Delta text\n", @@ -1580,6 +1668,7 @@ { "cell_type": "code", "execution_count": null, + "id": "7ce8da49", "metadata": {}, "outputs": [ { @@ -1599,6 +1688,7 @@ }, { "cell_type": "markdown", + "id": "5d8ec997", "metadata": {}, "source": [ "Delta text kwargs can be utilised via `delta_text_kwargs` in the `.plot()` method.\n", @@ -1621,6 +1711,7 @@ { "cell_type": "code", "execution_count": null, + "id": "cd25ccc7", "metadata": {}, "outputs": [ { @@ -1641,6 +1732,7 @@ }, { "cell_type": "markdown", + "id": "5179c353", "metadata": {}, "source": [ "`'x_coordinates'` and/or `'y_coordinates'` if you would like to specify the text locations manually. " @@ -1649,6 +1741,7 @@ { "cell_type": "code", "execution_count": null, + "id": "8501251a", "metadata": {}, "outputs": [ { @@ -1670,6 +1763,7 @@ }, { "cell_type": "markdown", + "id": "ae1a40ff", "metadata": {}, "source": [ "`'offset'` to adjust the x location of all the texts (positive moves right, negative left)." @@ -1678,6 +1772,7 @@ { "cell_type": "code", "execution_count": null, + "id": "00d65bcd", "metadata": {}, "outputs": [ { @@ -1698,6 +1793,7 @@ }, { "cell_type": "markdown", + "id": "feaec766", "metadata": {}, "source": [ "## Adding jitter to slopegraph plots\n", @@ -1712,6 +1808,7 @@ { "cell_type": "code", "execution_count": null, + "id": "4a4bf97f", "metadata": {}, "outputs": [], "source": [ @@ -1734,6 +1831,7 @@ }, { "cell_type": "markdown", + "id": "6cd63ad4", "metadata": {}, "source": [ "For the example below, there are many overlapping points for the paired plot, which makes it look like only one sample." @@ -1742,6 +1840,7 @@ { "cell_type": "code", "execution_count": null, + "id": "6275895f", "metadata": {}, "outputs": [ { @@ -1762,6 +1861,7 @@ }, { "cell_type": "markdown", + "id": "121516bd", "metadata": {}, "source": [ "Adding jitter can help to visualize the data better." @@ -1770,6 +1870,7 @@ { "cell_type": "code", "execution_count": null, + "id": "81a91b34", "metadata": {}, "outputs": [ { @@ -1789,6 +1890,7 @@ }, { "cell_type": "markdown", + "id": "54c58acc", "metadata": {}, "source": [ "## Gridkey\n", @@ -1801,6 +1903,7 @@ { "cell_type": "code", "execution_count": null, + "id": "ca1012f1", "metadata": {}, "outputs": [ { @@ -1820,6 +1923,7 @@ }, { "cell_type": "markdown", + "id": "e0136f07", "metadata": {}, "source": [ "Gridkey kwargs can be utilised via `gridkey_kwargs` in the `.plot()` method.\n", @@ -1838,6 +1942,7 @@ { "cell_type": "code", "execution_count": null, + "id": "5d20e84a", "metadata": {}, "outputs": [ { @@ -1860,6 +1965,7 @@ }, { "cell_type": "markdown", + "id": "4e5b0d2f", "metadata": {}, "source": [ "## Delta dot\n", @@ -1872,6 +1978,7 @@ { "cell_type": "code", "execution_count": null, + "id": "74b02990", "metadata": {}, "outputs": [ { @@ -1891,6 +1998,7 @@ }, { "cell_type": "markdown", + "id": "8108826e", "metadata": {}, "source": [ "Delta dot kwargs can be utilised via `delta_dot_kwargs` in the `.plot()` method.\n", @@ -1908,6 +2016,7 @@ { "cell_type": "code", "execution_count": null, + "id": "58acb413", "metadata": {}, "outputs": [ { @@ -1927,6 +2036,7 @@ }, { "cell_type": "markdown", + "id": "ed845c6f", "metadata": {}, "source": [ "## Effect size paired lines\n", @@ -1939,6 +2049,7 @@ { "cell_type": "code", "execution_count": null, + "id": "c302afd2", "metadata": {}, "outputs": [ { @@ -1958,6 +2069,7 @@ }, { "cell_type": "markdown", + "id": "88d55d19", "metadata": {}, "source": [ "Effect size line kwargs can be utilised via `contrast_paired_lines_kwargs` in the `.plot()` method.\n", @@ -1974,6 +2086,7 @@ { "cell_type": "code", "execution_count": null, + "id": "41d08b48", "metadata": {}, "outputs": [ { @@ -1994,6 +2107,7 @@ }, { "cell_type": "markdown", + "id": "e3969990", "metadata": {}, "source": [ "## Baseline error curve\n", @@ -2005,6 +2119,7 @@ { "cell_type": "code", "execution_count": null, + "id": "081d9d27", "metadata": {}, "outputs": [ { @@ -2031,5 +2146,5 @@ } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 5 } diff --git a/nbs/tutorials/09-forest_plot.ipynb b/nbs/tutorials/09-forest_plot.ipynb index 5b17c7e1..4a7401fb 100644 --- a/nbs/tutorials/09-forest_plot.ipynb +++ b/nbs/tutorials/09-forest_plot.ipynb @@ -2,6 +2,7 @@ "cells": [ { "cell_type": "markdown", + "id": "9f60d8c2", "metadata": {}, "source": [ "# Forest Plots: Visualizing Multiple Contrasts\n", @@ -13,6 +14,7 @@ }, { "cell_type": "markdown", + "id": "73c68853", "metadata": {}, "source": [ "In DABEST **v2025.03.27**, we introduce a new function to plot separately calculated effect sizes in the same axes to allow direct visual comparisons. \n", @@ -22,6 +24,7 @@ }, { "cell_type": "markdown", + "id": "0113d4b4", "metadata": {}, "source": [ "## Load libraries" @@ -30,6 +33,7 @@ { "cell_type": "code", "execution_count": null, + "id": "3919becd", "metadata": {}, "outputs": [ { @@ -73,6 +77,7 @@ }, { "cell_type": "markdown", + "id": "f0b0907e", "metadata": {}, "source": [ "## Delta-delta effects" @@ -80,6 +85,7 @@ }, { "cell_type": "markdown", + "id": "3c77114d", "metadata": {}, "source": [ "First please revisit the notebook [Delta-Delta Tutorial](06-delta_delta.html) for how to generate a delta-delta effect size. We will generate three of them plot them into the same axes. Here we test the efficacy of 3 drugs named ``Drug1``, ``Drug2`` , and ``Drug3`` on a disease-causing mutation ```M``` based on disease metric ```Tumor Size```. We want to know how the three drugs fare in ameliorating the phenotype metric ```Tumor Size```. " @@ -87,6 +93,7 @@ }, { "cell_type": "markdown", + "id": "e7ded244", "metadata": {}, "source": [ "| | Wildtype | Mutant |\n", @@ -97,6 +104,7 @@ }, { "cell_type": "markdown", + "id": "7fd677d0", "metadata": {}, "source": [ "| | Wildtype | Mutant |\n", @@ -107,6 +115,7 @@ }, { "cell_type": "markdown", + "id": "95cca8ae", "metadata": {}, "source": [ "| | Wildtype | Mutant |\n", @@ -117,6 +126,7 @@ }, { "cell_type": "markdown", + "id": "5e1f9a3e", "metadata": {}, "source": [ "In each scenario, there are two ``Treatment`` conditions, ``Placebo`` (control group) and ``Drug`` (test group). There are two ``Genotype``\\'s: ``W`` (wild type population) and ``M`` (mutant population). Additionally, each experiment was conducted twice (``Rep1`` and ``Rep2``). We will perform several analyses to visualise these differences in a simulated dataset. We will simulate three separte datasets below. " @@ -124,6 +134,7 @@ }, { "cell_type": "markdown", + "id": "273579c0", "metadata": {}, "source": [ "### Creating a demo dataset" @@ -132,6 +143,7 @@ { "cell_type": "code", "execution_count": null, + "id": "f0467048", "metadata": {}, "outputs": [], "source": [ @@ -176,6 +188,7 @@ }, { "cell_type": "markdown", + "id": "0faf0466", "metadata": {}, "source": [ "### Loading data" @@ -184,6 +197,7 @@ { "cell_type": "code", "execution_count": null, + "id": "706cc02b", "metadata": {}, "outputs": [], "source": [ @@ -205,6 +219,7 @@ }, { "cell_type": "markdown", + "id": "52381d78", "metadata": {}, "source": [ "### Generate delta-delta plots for each datasets " @@ -212,6 +227,7 @@ }, { "cell_type": "markdown", + "id": "3013cd12", "metadata": {}, "source": [ "To create a delta-delta plot, you simply need to set ``delta2=True`` in the \n", @@ -225,6 +241,7 @@ { "cell_type": "code", "execution_count": null, + "id": "f5621a8b", "metadata": {}, "outputs": [ { @@ -289,6 +306,7 @@ }, { "cell_type": "markdown", + "id": "6ec8759b", "metadata": {}, "source": [ "### Generate a forest plot" @@ -296,6 +314,7 @@ }, { "cell_type": "markdown", + "id": "f8c731a4", "metadata": {}, "source": [ "This will allow for comparisons of different ``Drug`` effects.\n", @@ -322,6 +341,7 @@ { "cell_type": "code", "execution_count": null, + "id": "adfdf4c5", "metadata": {}, "outputs": [ { @@ -344,6 +364,7 @@ }, { "cell_type": "markdown", + "id": "aa104dab", "metadata": {}, "source": [ "### Generate a forest plot with delta effect sizes alongside the delta-delta effect sizes\n", @@ -356,6 +377,7 @@ { "cell_type": "code", "execution_count": null, + "id": "a3b8885f", "metadata": {}, "outputs": [ { @@ -379,6 +401,7 @@ }, { "cell_type": "markdown", + "id": "63926f6a", "metadata": {}, "source": [ "### Selecting normalised effect sizes via `hedges_g` or `delta_g`\n", @@ -389,6 +412,7 @@ { "cell_type": "code", "execution_count": null, + "id": "11cdbfb1", "metadata": {}, "outputs": [ { @@ -441,6 +465,7 @@ }, { "cell_type": "markdown", + "id": "3497e3c4", "metadata": {}, "source": [ "## Mini-meta effects\n", @@ -451,6 +476,7 @@ }, { "cell_type": "markdown", + "id": "1e66885f", "metadata": {}, "source": [ "### Creating a demo dataset" @@ -459,6 +485,7 @@ { "cell_type": "code", "execution_count": null, + "id": "3727d3b6", "metadata": {}, "outputs": [], "source": [ @@ -509,6 +536,7 @@ }, { "cell_type": "markdown", + "id": "53b9bdf6", "metadata": {}, "source": [ "### Loading data" @@ -517,6 +545,7 @@ { "cell_type": "code", "execution_count": null, + "id": "be7881aa", "metadata": {}, "outputs": [], "source": [ @@ -535,6 +564,7 @@ }, { "cell_type": "markdown", + "id": "dde6d98a", "metadata": {}, "source": [ "### Generate a forest plot" @@ -543,6 +573,7 @@ { "cell_type": "code", "execution_count": null, + "id": "3720e1ad", "metadata": {}, "outputs": [ { @@ -565,6 +596,7 @@ }, { "cell_type": "markdown", + "id": "d09c48a4", "metadata": {}, "source": [ "### Generate a forest plot with delta effect sizes alongside the mini-meta effect sizes\n", @@ -577,6 +609,7 @@ { "cell_type": "code", "execution_count": null, + "id": "d7c60fe5", "metadata": {}, "outputs": [ { @@ -600,6 +633,7 @@ }, { "cell_type": "markdown", + "id": "5c9ada3f", "metadata": {}, "source": [ "## Delta effects\n", @@ -609,6 +643,7 @@ { "cell_type": "code", "execution_count": null, + "id": "9e5dc341", "metadata": {}, "outputs": [], "source": [ @@ -624,6 +659,7 @@ { "cell_type": "code", "execution_count": null, + "id": "54aa5353", "metadata": {}, "outputs": [ { @@ -644,6 +680,7 @@ }, { "cell_type": "markdown", + "id": "110264fa", "metadata": {}, "source": [ "Unlike delta-delta and mini-meta experiments, here you can choose between more effect size metrics (where applicable): `mean_diff`, `cohens_d`, `cohens_h`, `hedges_g`, and `cliffs_delta`" @@ -652,6 +689,7 @@ { "cell_type": "code", "execution_count": null, + "id": "9105f80e", "metadata": {}, "outputs": [ { @@ -672,6 +710,7 @@ }, { "cell_type": "markdown", + "id": "5d48c72c", "metadata": {}, "source": [ "## Controlling aesthetics" @@ -679,6 +718,7 @@ }, { "cell_type": "markdown", + "id": "be8c4949", "metadata": {}, "source": [ "The main aesthetic parameters for the forest_plot function are:\n", @@ -734,6 +774,7 @@ }, { "cell_type": "markdown", + "id": "ee5b7648", "metadata": {}, "source": [ "### Changing layout with `horizontal`\n", @@ -743,6 +784,7 @@ { "cell_type": "code", "execution_count": null, + "id": "48f672bc", "metadata": {}, "outputs": [ { @@ -765,6 +807,7 @@ }, { "cell_type": "markdown", + "id": "dbec9054", "metadata": {}, "source": [ "### Using a custom palette \n", @@ -774,6 +817,7 @@ { "cell_type": "code", "execution_count": null, + "id": "226e0ad9", "metadata": {}, "outputs": [ { @@ -796,6 +840,7 @@ }, { "cell_type": "markdown", + "id": "5108d27f", "metadata": {}, "source": [ "### Plotting other effect sizes \n", @@ -805,6 +850,7 @@ { "cell_type": "code", "execution_count": null, + "id": "3810d975", "metadata": {}, "outputs": [ { @@ -828,6 +874,7 @@ }, { "cell_type": "markdown", + "id": "5817dc8b", "metadata": {}, "source": [ "### Delta text\n", @@ -837,6 +884,7 @@ { "cell_type": "code", "execution_count": null, + "id": "4b8ef827", "metadata": {}, "outputs": [ { @@ -860,6 +908,7 @@ }, { "cell_type": "markdown", + "id": "636d8142", "metadata": {}, "source": [ "You can set a variety of kwargs to customize the delta text via `delta_text_kwargs`.\n", @@ -880,6 +929,7 @@ { "cell_type": "code", "execution_count": null, + "id": "5d32f9e2", "metadata": {}, "outputs": [ { @@ -908,6 +958,7 @@ }, { "cell_type": "markdown", + "id": "adf2a443", "metadata": {}, "source": [ "### Contrast bars\n", @@ -917,6 +968,7 @@ { "cell_type": "code", "execution_count": null, + "id": "84fcd0c0", "metadata": {}, "outputs": [ { @@ -940,6 +992,7 @@ }, { "cell_type": "markdown", + "id": "6e0002ae", "metadata": {}, "source": [ "You can set a variety of kwargs to customize the delta text via `contrast_bars_kwargs`.\n", @@ -950,6 +1003,7 @@ { "cell_type": "code", "execution_count": null, + "id": "df1fa100", "metadata": {}, "outputs": [ { @@ -974,6 +1028,7 @@ }, { "cell_type": "markdown", + "id": "5db33a33", "metadata": {}, "source": [ "### Reference band\n", @@ -983,6 +1038,7 @@ { "cell_type": "code", "execution_count": null, + "id": "c16b4146", "metadata": {}, "outputs": [ { @@ -1006,6 +1062,7 @@ }, { "cell_type": "markdown", + "id": "3dbfc1d4", "metadata": {}, "source": [ "You can set a variety of kwargs to customize the reference bands via `reference_band_kwargs`.\n", @@ -1018,6 +1075,7 @@ { "cell_type": "code", "execution_count": null, + "id": "8833e72c", "metadata": {}, "outputs": [ { @@ -1042,6 +1100,7 @@ }, { "cell_type": "markdown", + "id": "05d55fdd", "metadata": {}, "source": [ "### Embedding forest plots into an existing Axes \n", @@ -1052,6 +1111,7 @@ { "cell_type": "code", "execution_count": null, + "id": "dce18882", "metadata": {}, "outputs": [ { @@ -1097,5 +1157,5 @@ } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 5 } diff --git a/nbs/tutorials/10-whorlmap.ipynb b/nbs/tutorials/10-whorlmap.ipynb index 42b3bdd8..e2bae374 100644 --- a/nbs/tutorials/10-whorlmap.ipynb +++ b/nbs/tutorials/10-whorlmap.ipynb @@ -2,6 +2,7 @@ "cells": [ { "cell_type": "markdown", + "id": "cfe53651", "metadata": {}, "source": [ "# Whorlmaps: Visualizing Even More Contrasts\n", @@ -13,6 +14,7 @@ }, { "cell_type": "markdown", + "id": "fb7414d4", "metadata": {}, "source": [ "In DABEST **v2025.10.20**, we introduce a new and more compact way of visualizing bootstrap distributions:\n", @@ -21,6 +23,7 @@ }, { "cell_type": "markdown", + "id": "b8d232aa", "metadata": {}, "source": [ "## Load libraries" @@ -29,6 +32,7 @@ { "cell_type": "code", "execution_count": null, + "id": "d4b8d786", "metadata": {}, "outputs": [ { @@ -71,6 +75,7 @@ }, { "cell_type": "markdown", + "id": "d4874fc4", "metadata": {}, "source": [ "## Create a simulated dataset and generate a list of corresponding dabest objects" @@ -79,6 +84,7 @@ { "cell_type": "code", "execution_count": null, + "id": "e7a5e74a", "metadata": {}, "outputs": [], "source": [ @@ -114,6 +120,7 @@ }, { "cell_type": "markdown", + "id": "46c0292f", "metadata": {}, "source": [ "## Working with many many Dabest objects\n", @@ -123,6 +130,7 @@ { "cell_type": "code", "execution_count": null, + "id": "af3ade87", "metadata": {}, "outputs": [], "source": [ @@ -161,6 +169,7 @@ }, { "cell_type": "markdown", + "id": "c9946643", "metadata": {}, "source": [ "We are going to create a new object called MultiContrast which will contain the array of contrast objects and information about them." @@ -169,6 +178,7 @@ { "cell_type": "code", "execution_count": null, + "id": "486e60e4", "metadata": {}, "outputs": [ { @@ -186,6 +196,7 @@ }, { "cell_type": "markdown", + "id": "bc2e2d31", "metadata": {}, "source": [ "As we have seen in the previous tutorial, we can visualize these effect sizes with forest plot as follows:" @@ -194,6 +205,7 @@ { "cell_type": "code", "execution_count": null, + "id": "2ed4ac7f", "metadata": {}, "outputs": [ { @@ -213,6 +225,7 @@ }, { "cell_type": "markdown", + "id": "e3a3e186", "metadata": {}, "source": [ " This data would require a stack of forest plots to visualize. So instead, we plot a whorlmap for a concise representation and use color to represent the dimension of effect size. For each effect size, the full bootstrap distribution is binned by quantiles and ranked by value, and then each bin is represented by a pixel. All the pixels correponding to the bins of effects are arranged in a spiral in a cell. The redness and the blueness of the cells represent the magnitude of the effects in the positive and negative direction." @@ -221,6 +234,7 @@ { "cell_type": "code", "execution_count": null, + "id": "e1beb9b1", "metadata": {}, "outputs": [ { @@ -245,6 +259,7 @@ }, { "cell_type": "markdown", + "id": "311bf96e", "metadata": {}, "source": [ "The resulting graphic is easy to interpret. Drug B and E induces the most broad spectrum reduction. However the data for Drug E seems a little less precise, mixing blue and red colored pixels. We can say Drug B is a surer bet. \n", @@ -256,6 +271,7 @@ { "cell_type": "code", "execution_count": null, + "id": "7ee951a8", "metadata": {}, "outputs": [ { @@ -296,6 +312,7 @@ }, { "cell_type": "markdown", + "id": "95695191", "metadata": {}, "source": [ "## MultiContrast object can also handle 1-D dabest object arrays" @@ -304,6 +321,7 @@ { "cell_type": "code", "execution_count": null, + "id": "350000c0", "metadata": {}, "outputs": [], "source": [ @@ -312,6 +330,7 @@ }, { "cell_type": "markdown", + "id": "fe7a8d27", "metadata": {}, "source": [ "You can plot a forest plot from this MultiContrast object" @@ -320,6 +339,7 @@ { "cell_type": "code", "execution_count": null, + "id": "184aa227", "metadata": {}, "outputs": [ { @@ -339,6 +359,7 @@ }, { "cell_type": "markdown", + "id": "5d54f722", "metadata": {}, "source": [ "## 1-D whorlmap also works" @@ -347,6 +368,7 @@ { "cell_type": "code", "execution_count": null, + "id": "dd82e1ad", "metadata": {}, "outputs": [ { @@ -372,6 +394,7 @@ { "cell_type": "code", "execution_count": null, + "id": "e4c6176a", "metadata": {}, "outputs": [ { @@ -401,6 +424,7 @@ { "cell_type": "code", "execution_count": null, + "id": "ad60757d", "metadata": {}, "outputs": [ { @@ -426,6 +450,7 @@ { "cell_type": "code", "execution_count": null, + "id": "a1053e97", "metadata": {}, "outputs": [ { @@ -451,6 +476,7 @@ }, { "cell_type": "markdown", + "id": "ad82941f", "metadata": {}, "source": [ "## Heatmap and plot kwargs\n", @@ -460,6 +486,7 @@ { "cell_type": "code", "execution_count": null, + "id": "a7c7e109", "metadata": {}, "outputs": [ { @@ -493,5 +520,5 @@ } }, "nbformat": 4, - "nbformat_minor": 4 + "nbformat_minor": 5 } diff --git a/pyproject.toml b/pyproject.toml index 244792ad..6bb7257b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,11 +1,38 @@ [build-system] -requires = ["setuptools>=64.0"] +requires = ["setuptools>=64"] build-backend = "setuptools.build_meta" [project] -name="dabest" -requires-python=">=3.10" -dynamic = [ "keywords", "description", "version", "dependencies", "optional-dependencies", "readme", "license", "authors", "classifiers", "entry-points", "scripts", "urls"] +name = "dabest" +dynamic = ["version"] +description = "Data Analysis and Visualization using Bootstrap-Coupled Estimation." +readme = "README.md" +requires-python = ">=3.10" +license = {text = "Apache-2.0"} +authors = [{name = "Joses W. Ho", email = "joseshowh@gmail.com"}] +keywords = ['nbdev', 'jupyter', 'notebook', 'python'] +classifiers = ["Natural Language :: English", "Intended Audience :: Developers", "Development Status :: 3 - Alpha", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3 :: Only"] +dependencies = ['fastcore', 'pandas~=2.2.3', 'numpy~=2.1.0', 'matplotlib~=3.10.0', 'seaborn~=0.13.2', 'scipy~=1.15.2', 'numba~=0.61.0', 'datetime', 'statsmodels', 'lqrt', 'tqdm'] -[tool.uv] -cache-keys = [{ file = "pyproject.toml" }, { file = "settings.ini" }, { file = "setup.py" }] +[project.urls] +Repository = "https://github.com/acclab/DABEST-python" +Documentation = "https://acclab.github.io/DABEST-python" + +[project.entry-points.nbdev] +dabest = "dabest._modidx:d" + +[project.optional-dependencies] +dev = ['pytest~=8.3.4', 'pytest-mpl~=0.17.0'] + +[tool.setuptools.dynamic] +version = {attr = "dabest.__version__"} + +[tool.setuptools.packages.find] +include = ["dabest"] + +[tool.nbdev] +branch = 'master' +readme_nb = 'read_me.ipynb' +jupyter_hooks = true +custom_sidebar = true +title = 'dabest'