From d2a6657bedfaed826b1ea8fac14fe1fcdb2ebe94 Mon Sep 17 00:00:00 2001 From: Jonas Plank Date: Tue, 5 May 2026 21:02:21 +0200 Subject: [PATCH] add random darcy flow using MLMC --- MLMC_random_darcy_flow/CMakeLists.txt | 32 +++ MLMC_random_darcy_flow/README.md | 39 +++ MLMC_random_darcy_flow/doc/author | 2 + MLMC_random_darcy_flow/doc/builds-on | 2 + MLMC_random_darcy_flow/doc/entry-name | 2 + .../doc/images/convergence_mlmc.png | Bin 0 -> 57111 bytes .../doc/images/realization.png | Bin 0 -> 81606 bytes MLMC_random_darcy_flow/doc/tooltip | 2 + MLMC_random_darcy_flow/include/KL_expansion.h | 66 ++++++ MLMC_random_darcy_flow/include/mlmc.h | 43 ++++ MLMC_random_darcy_flow/include/random_darcy.h | 95 ++++++++ .../include/random_permeability.h | 37 +++ MLMC_random_darcy_flow/main.cc | 127 ++++++++++ MLMC_random_darcy_flow/source/KL_expansion.cc | 224 ++++++++++++++++++ MLMC_random_darcy_flow/source/mlmc.cc | 73 ++++++ MLMC_random_darcy_flow/source/random_darcy.cc | 199 ++++++++++++++++ .../source/random_permeability.cc | 32 +++ .../utils/post_processing.py | 65 +++++ 18 files changed, 1040 insertions(+) create mode 100644 MLMC_random_darcy_flow/CMakeLists.txt create mode 100644 MLMC_random_darcy_flow/README.md create mode 100644 MLMC_random_darcy_flow/doc/author create mode 100644 MLMC_random_darcy_flow/doc/builds-on create mode 100644 MLMC_random_darcy_flow/doc/entry-name create mode 100644 MLMC_random_darcy_flow/doc/images/convergence_mlmc.png create mode 100644 MLMC_random_darcy_flow/doc/images/realization.png create mode 100644 MLMC_random_darcy_flow/doc/tooltip create mode 100644 MLMC_random_darcy_flow/include/KL_expansion.h create mode 100644 MLMC_random_darcy_flow/include/mlmc.h create mode 100644 MLMC_random_darcy_flow/include/random_darcy.h create mode 100644 MLMC_random_darcy_flow/include/random_permeability.h create mode 100644 MLMC_random_darcy_flow/main.cc create mode 100644 MLMC_random_darcy_flow/source/KL_expansion.cc create mode 100644 MLMC_random_darcy_flow/source/mlmc.cc create mode 100644 MLMC_random_darcy_flow/source/random_darcy.cc create mode 100644 MLMC_random_darcy_flow/source/random_permeability.cc create mode 100644 MLMC_random_darcy_flow/utils/post_processing.py diff --git a/MLMC_random_darcy_flow/CMakeLists.txt b/MLMC_random_darcy_flow/CMakeLists.txt new file mode 100644 index 00000000..86aea094 --- /dev/null +++ b/MLMC_random_darcy_flow/CMakeLists.txt @@ -0,0 +1,32 @@ +# Set the name of the project and target: +SET(TARGET "mlmc_for_random_darcy_flow") + +# Declare all source files the target consists of: +SET(TARGET_SRC + source/KL_expansion.cc + source/mlmc.cc + source/random_darcy.cc + source/random_permeability.cc + main.cc +) + +PROJECT(${TARGET} CXX) + + +CMAKE_MINIMUM_REQUIRED(VERSION 3.28.0) + +FIND_PACKAGE(deal.II 9.7.1 + HINTS ${deal.II_DIR} ${DEAL_II_DIR} ../ ../../ $ENV{DEAL_II_DIR} + ) +IF(NOT ${deal.II_FOUND}) + MESSAGE(FATAL_ERROR "\n" + "*** Could not locate a (sufficiently recent) version of deal.II. ***\n\n" + "You may want to either pass a flag -DDEAL_II_DIR=/path/to/deal.II to cmake\n" + "or set an environment variable \"DEAL_II_DIR\" that contains this path." + ) +ENDIF() + +DEAL_II_INITIALIZE_CACHED_VARIABLES() +PROJECT(${TARGET}) +DEAL_II_INVOKE_AUTOPILOT() + diff --git a/MLMC_random_darcy_flow/README.md b/MLMC_random_darcy_flow/README.md new file mode 100644 index 00000000..265fb8b1 --- /dev/null +++ b/MLMC_random_darcy_flow/README.md @@ -0,0 +1,39 @@ +# Multilevel Monte Carlo for random Darcy flow +This code is an implementation of the Multilevel Monte Carlo (MLMC) approach described in the amazing paper by Cliffe et al. [3]. While many Darcy flow solvers in porous media research rely on the Finite Volume Method (FVM), this project specifically utilizes the Finite Element Method (FEM), leveraging the `deal.II` library for spatial discretization. +## Motivation +Numerical simulations rely on input parameters such as material data, boundary conditions, and geometry. These parameters are almost always derived from measurements and are therefore subject to uncertainty. Some PDEs, such as the [Kardar-Parisi-Zhang equation](https://en.wikipedia.org/wiki/Kardar%E2%80%93Parisi%E2%80%93Zhang_equation) [1], even incorporate uncertainty directly into the governing equation. This uncertainty propagates through the simulation; consequently, quantifying its impact on the solution is of great interest. + +However, this can be a costly undertaking. The standard Monte Carlo estimator, which simply solves the equation $N$ times with different realizations of the random noise and then averages the $N$ solutions, converges at a rate of @f[ \mathcal{O}(N^{-\frac{1}{2}}) @f], potentially requiring tens of thousands of samples for a reasonable estimate of the mean. This is often infeasible for complex problems where computing a single sample on a fine mesh may take hours. + +This is where the Multilevel Monte Carlo (MLMC) estimator is utilized. The method exploits a simple identity: to estimate the expectation of a problem on a fine mesh @f[ \mathcal{E}[Q_M]@f], we can use the linearity of expectation to expand the estimator as a telescoping sum: @f[ \mathcal{E}[Q_M] = \mathcal{E}[Q_0] + \sum_{l=1}^{M} \mathcal{E}[Q_l - Q_{l-1}] @f]. + +One run on level @f[ M-1 @f] is significantly cheaper than one run on level @f[ M @f]. Furthermore, the difference between @f[ Q_M @f] and @f[ Q_{M-1} @f] is likely to be small, as the solutions will be similar when using the same realizations of the random field. By running the discretized PDE on several mesh levels, we can allocate more samples to the inexpensive coarse levels and fewer samples to the expensive fine levels. This significantly reduces the total computational effort. + +A prominent application for this method is Darcy's Law [2], which describes flow through porous media. In this context, randomness is introduced via the hydraulic conductivity tensor. + +## Problem statement +Let the infinite probability space be @f[(\Omega, \mathcal{F}, \mathbb{P})@f] and the domain be @f[D \subset \mathbb{R}^d, d=1,2,3 @f]. We model the hydraulic conductivity as a random field @f[ k = k(x, \omega)@f] on @f[D \times \Omega @f] with a defined mean and covariance. The governing equation is: +@f[ +-\nabla \cdot ( k(x,\omega)\nabla p(x, \omega)) = f(x). +@f] +We assume the right-hand side @f[f(x) @f] is deterministic. Solving this general form is challenging; therefore, we assume @f[ k(x, \omega) @f] follows a log-normal distribution. This involves replacing the conductivity tensor with a scalar-valued field whose logarithm is Gaussian, which guarantees that @f[ k > 0 @f] almost surely [3]. Additionally, for an exponential kernel, analytical solutions for the integral eigenvalue problem are available. + +We approximate this random field using a Karhunen-Loève Expansion and set a pressure difference of 1 between the left and right boundaries. + +It is easy to observe that the actual PDE code is very similar to the one demonstrated in step-5. This is on purpose. In recent years, invasive techniques have fallen out of favor since they, as the name suggests, require reprogramming of existing finite element codes. + +## Results +The following plots illustrate the convergence rate of our MLMC implementation. +![Convergence Plots](./doc/images/convergence_mlmc.png) + +In the left image, the variance significantly decreases with each additional level. This supports the observation that solutions become increasingly similar as the discretization is refined for the same samples. The central plot shows the change in the mean with each level. The fact that the mean continues to shift substantially at levels 2 and 3 suggests that the initial mesh may have been too coarse. This is further supported by the right plot, which shows a sharp drop in the total number of samples required to reach the target tolerance. While the number of samples required for levels 1 and 2 is similar—again suggesting an overly coarse initial discretization—there is a significant reduction in samples for the higher levels. We conclude that the implementation successfully achieves the expected MLMC convergence behavior. + +These plots can be generated using the Python script located in `utils/`. + +Finally, a single realization of the solution is shown below. +![One realization of the solution](./doc/images/realization.png) + +## References +* [1] https://en.wikipedia.org/wiki/Kardar-Parisi-Zhang_equation +* [2] https://en.wikipedia.org/wiki/Darcy%27s_law +* [3] Cliffe, K.A., Giles, M.B., Scheichl, R. et al. Multilevel Monte Carlo methods and applications to elliptic PDEs with random coefficients. Comput. Visual Sci. 14, 3 (2011). https://doi.org/10.1007/s00791-011-0160-x \ No newline at end of file diff --git a/MLMC_random_darcy_flow/doc/author b/MLMC_random_darcy_flow/doc/author new file mode 100644 index 00000000..f3df611d --- /dev/null +++ b/MLMC_random_darcy_flow/doc/author @@ -0,0 +1,2 @@ +Jonas Plank + diff --git a/MLMC_random_darcy_flow/doc/builds-on b/MLMC_random_darcy_flow/doc/builds-on new file mode 100644 index 00000000..389e7378 --- /dev/null +++ b/MLMC_random_darcy_flow/doc/builds-on @@ -0,0 +1,2 @@ +step-5 + diff --git a/MLMC_random_darcy_flow/doc/entry-name b/MLMC_random_darcy_flow/doc/entry-name new file mode 100644 index 00000000..d1b0bee5 --- /dev/null +++ b/MLMC_random_darcy_flow/doc/entry-name @@ -0,0 +1,2 @@ +multilevel monte carlo for random darcy flow + diff --git a/MLMC_random_darcy_flow/doc/images/convergence_mlmc.png b/MLMC_random_darcy_flow/doc/images/convergence_mlmc.png new file mode 100644 index 0000000000000000000000000000000000000000..1d4a65bd7d1bce2d390d263fc2533372675f6fc3 GIT binary patch literal 57111 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

U4VpRMe_QOC{GQeww^QmYoIo)W47V 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

  • H;G%On^ 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 aSeFVfv*eBK<5fidm!hod<(x}b{r(qlOzPzT literal 0 HcmV?d00001 diff --git a/MLMC_random_darcy_flow/doc/images/realization.png b/MLMC_random_darcy_flow/doc/images/realization.png new file mode 100644 index 0000000000000000000000000000000000000000..82c0e6e07719df84afe66f501965ce913e0a9762 GIT binary patch literal 81606 zcmeEtWm{Y^*DmfY9h_3!U5gYeEnc(~cN=W5QrwC=6nCdUi!(^^B7+WIWN;hYU1s3$ zyzhB_#W^2xC2Q{_Ywu)TS@)7eX{af@zF`sE%7e#$H6qJ{}|0$>g&gE7pC{I6?WM#g1 znH(aQ>kp-pSE8(|nn@);4;I$e^a7+V_e)uj~;D9M=W2Hvk^3gNcjmf8Nb+LR85O zd03a640E$g;Yu7k*$JaMM@$d*El15~J3xP@y?wVB?xCZ!uZR7n?9DU3yt6vB)0wW6!@cS>(MQ_Yx(%Rd670T-`7s-zUAcRlGV}MC+|Q-`c7&o zX;3{Lcl>SXQeM^cMT?Y~v`EXI>c5D+9p}ZnarMr}p*!iMbM+Ra)dOu};BADYX+RSq zpH`_EX>)&pTNxT>joc;tN5g53KVGsvwR;^x4}a9+%B z<<#sUxmM~<%(1G@0QW3VZacAKUmm$Lj&59DBClmi+tzcee9P^bKg9TD~2zyLr&5=CC}NthY-Lo7wvb zyGgk?Z;Tv7rcFB~9eZCYG9)=AO>ys>>HL%=%?=k}UtEHpun!p@e@$l!>_R5C zAriYrOus(2q@@FuT9JtlGM_OVj%0& z!&C3m7sGd*<R0`c8E`pW_#ZLF0feo+tUoq`;IwZt15gL=58L(iART5||X2|ET}ii_G7W zUV2h`^bCB|{pO1Ml>Kx)etzZLK1%(hnj#eS{5Aa|=&#yIPwu-I9V%9J>t!!? zF7Ar%#yts4JQ<7>C`g-CC`@tfTNLJY&J3?;wtI$J{QlUZJOtJ3e>5Lv#3=a5h;K(aaTn4)o3zR)Jc9RDhKwo#=HEZbs&cq zJZY&&QKdUy=u4!o(k#OKE|izVH-|TnchBM={aeK}l2P@Ky^FZUmEn1Ig=jiIyV=W4 zoXJFOWn~3LYSL^;pB{Z4lJUfZL{XlQ8PY!C-a%7zKb!==<9vRU_}H0vRlzawO+Cw< zlDHztfc}WDB{2yp-dGMl?=Jqs;oHwUK)W(iF}m?d^Zn#{p)T$A=9SP`pR3pnzDYjV zQ7#@4PP&e36{bp5%mDhwgXUMOt?%5ZZ)H^b+bh10cT65hdtew4etf3qec zCMuspqrf`Rny0_RS+A2NosSPh&TXg4y7i@M%B#Mt=b#bWfvP2{w1XRpjrI)OG8?B5 zcYf`*ozV|lY^Q9KFr4-%A9+jreKXO{0N+6h$Kvye)I^2*W0&kB9IR}VH>h&bZ%Ugu z{xTGj!LKN|e1E#g%gdc}&G4f1J!#}J3U90$esa%;UDVBIdSPm{x@wM2Rc}+ebCJ>Z z5RLK8YmPOFx(&r%!HYd)5f#iqR#Hmet$lTY+Sh@!t$8@|`2{80U@d;dStCT!ex- zXG3h>sXXet;axgP$k4ewQeML1is_zr7(fGwx|CREYY)5eA{C7Xy8ZlNeJBra}suTVRaUs*ERWT9n?lMx@+cl z{b9~+0m%v0EYSMAM=-rjcVnffAzjSSxPOKjNdaqCD3$n>#+pw1AqV9h%A1zKg4X!hQhsiD9+uo3Mfp*r zS}GKELNU>AfjhW;@7Ln+hT0Gjcc~VE*2Wr>uAu&#p-YO z8KvHag7PO|ZqvKBa3$$K<8uIc%f`!*X*;qbZ zZIV+Q-rSMQ_cfz2F$Apyt#^);kEb|Uq8CnQB>KpMe$aO-i5iRv2GgfPOo(amnplzzA(0_kZP;2>#CvP$^J;3g^I;?YF{xl!c^aF6Y~@Zd`r-is#DMDib>5jmj|q^t zx%zKC2%X2o_fqGxJW?Xeq%s%rap{6ql(MrfME&1xCy>Dkn(JVD{#SLO;eT|bRcJuN3^B6RbH7TK2BI$zsQpTie zLM&2N1U~2ionTlDI@hGiA19Zdlq~dKFWm<(3t^&_qzmzC{6t=1x|{oT_+3hrtnQDK z?zu58`_OW)Qif}piPm5W%AZx5Vrk^KtCaHjabvTwfF7Gm zf<&D3pdfOY3o`<9OQ2k9iv`)h?3T)2!oF}nam78UQ#Ydd*6)_;dVMJya3m(XSxqg9 z4vwxk1Y)(=eor{(O5D8`{k%O9VT9sLRD|J+-*)LV<%||wWFXl9c5OOvniOSQE7I0s zNz%_!;ppm&nciTSdw}n0N97LFGq6 zqHDL5n~@wMfj`WaUo@ymB2<{lE+a}~w$4rRx}%LazG3gB5iV@vZo8yXKCJc}L%y3i zl?T}U_J8S*^5YI@hq^9eqjFD_$t5VrcCF$r(Rm`x*uxKJ@NrX<6_w&8a~>ud4Oggs zU%W%fFM)9eh})6T=^b1XvA9r!swu7n=1YZIJ^meHG~ehh)lY=T>R}N3&MK%grG?%v z5D#%x{pjxl2Q&Cwy3k)moB_+@O6wlF&odIfPZB87n0+ za&;pZU&}?h^f>@6ccX2Fq>fy}<7s2975NUtF2s^{01|{>LV-Ot5PfT)b*XNu!VyJB zeKGn5Rd>Hd+VyYSlI9y+?=yP8I9nQhW}0p)6Uh@cwBobod*=p@Wg`?B9Z2M|wyC&C z^jtcb@DH#M+}228{!Y2fo-^_BX`eZ@2tzEV`IuNn}Ab-Vo-Tt;z zt!;ZvzZ{GpZDtHM+-e-y zhio*jJFk!A?kC$hKQIz(I+mqiAr9K+kjYQIs? z&D1yOqimexTpUs0yDazG@mIe&dqPEg1Nsy-yE6{Y5+atTk`!aIu4KPuP;;i{{doh4 z?}$^B8d8a5G!$vS)qD5pfsCO}vi0>PpS(1IUhV_h@B?okpv;K5#1D0-IzrC6DXy== z;z<6Gk`bQW{-q{O#QVA|qtoJ1-$ady2#T{6wlN2Q(j3ALoJJ!NM1h4Jih*VgcOJpJ zFYYJX;#Ma?Qy*QfTBaMq=}Hs%?{^UtXS>pN{>h6(QZc=iHmn!lJ-g75iw7`QwZU77 z1503Sc3lS%3y*#l#vY9g#I8nt?EZ-qjlWwbl`7-CIiINti8ALzR=ta=96OFi380c% z1LGzh$DX(m*Aa3F0QWw+O<()Y;cP44&U*I-Q{s$x+X>d5bI|~8x`VEndN+HJv*b`y z*}x$n<32x&#{^9cIew_5f+-BKNZCHtyf^a zvXI?aU+Q7M&$;pF4bov}Sj3iYw!b4pR*&MWyHChz(pKt~ZJk|TdZgCa2U#GaEc0UB zCA55^1Fe~6Dh(N&1MW2UX5vPeqQE)2L2@lxPPVDAkEZrOg;3t*apI?bAg0c6NTzT z(N5I-sNMob?*oSVETah`#LK$lG8&fchPBiCJ$0A=E{@`LSd@gy4G81B zNC*~M{%JojT>xF~?8p12AMdj3J38O{x}JYsaK_yZS5{fPZ*sdv9Cdw%OI!h7{N3t; zhBpI$)JM=;eo!~?{%az+`FvbPtV6trr8R|9vgSYL}qaRr0L+F z117wDrx0o{@)EgqjUoA9@+jW3y%5e?gJ%4am=JBRIxhMxPu{M*AhACVAP|#5!Y=EO zK}2@s`Y?XuwyX~3FpJHV4>zXEaNZkd?>8ryj z-f%{cW1~=6IvYs|bX|(V&&<{pnRv-;ye=po>zITK^348aQ_mL(u!Rq4tTLaU1YLEa zcMNT;dlBcQS6`mj&_QUiN-6^Ih$%9+4Jo*|c!{QEF?0$#(plo)Tk8dhTZ~hjPWA;i zRUUEWU*W3?7P)Ki>8?o*>{x2>`A+OqAvRJk{w2gu`ivq30||tyb2HJ`mg8h=s^4vj zYIhck-C845A_dJrx`NI8E_2fX<6LBO;Jjw+pc?6yARRA@yn*suq9c(s^vBSKnDrOc zl~TgF{B5SJ8K)_>pC$T=AJ(N#gZ?U_Q1XAC%2Xug^ih-|4$FwI^~sRL)9774A`w(T zsSiU4ByS zhLf_4T4AAV-^%fcP2h%!DF8=Dd^0V1GgzcKU*+;esu(vt{b&N6?~M|ht|FBJOX zS4Q|8BeZ`V#%l8;Hlywa)NyI!;(_KhuPc@tTfvZcVlRbZy_?26P4zu$)gYd1C*Q-H*?u3BNF7zN_s zjFL~yc4AizwM95Xc!likvlULJ%abSkN8@%~Wz#>)uA~jc zv#^o|JN1fwC-2#iX#O``#9Tl=>_ddL=MN4SiCn)u$awn($+t!d4bTNEvMNT%9|kgv zm55%9;4m(SL>%L^`lH+GJVnMS{)p!jSASFVN?s;>&a>Y5V?FhPfduLUPP-4^@&Pfh z*iHdM@Dlb3ciT@bFj0$7{*xVJo%zYjMn=0dTa%p2NO8t1u?{yDXTXV=T9 zZVXTz=i-Z$lsvw_Nvj32jz4D-e1RoICf>^#h~@c%6*@1KwXQc9m`nrQl8Re_YG&wB z1f@7gy%Mco;OaLC#s7#IMrnf2UR=OuT|OFlgd-W45#O`Az1PxMXP2qL#|kE=?5pR@ zaHJfqkmY5^FPbOrALX^i^KMdpeJsbb=R@623*{BGL9aS93{zDxZs(Wl5(}wPi~)ak z+;yZsNF^TtdJ*`cIgFogkVdXHV8VIqh|>i_ehR)6{M}(Aj81VS^5Na7@u>2N;k!;! zVcaMX@s@dY>(0$s{xsG)Bc01G*^6;qtS9Ay0+*(O9}NY!vg_8(#cAI9z*NAzN6E=jODElI$TM*|S4@tkiL_e{gOzO4R*_ z(9e5QXwdd^G%|N=@m6vT8)bZoD)t?WM4(TXFP||uEtLwc`Go03s_?Y0?P)O*yYOQ2 zV#XIm{!j03`k+V8Kco~Z-u;G-)pYRJleXOwBn~D9OnJ=d=4jUdFL(3U+5WuZ7bV6F z&%(9(S|;}BuV0s6O4-DY%ePcYWK1J7Bh9a_V?mw%lEe)>(poOZI=yxYQ}(QBZi;mQ zkP&qlskL47=z&6$YpR~)%vj!Fw(a;v5Yt7Yn`ESyEyl~@=7pRKLg(pMgULAw!d$9f z^-0PiNgMO>DSbNiBxc9*zyaPVW@pZc}zjy0ERlM#F5FJ&f5k%jz6jl>;_@# z=W>egOkzM4L+F;a7!C#xBR5Mzfh;V-ymhb0V?3>o9Sy$Ge+&RC^1qAx@)V~7Z>a5# zhFI*u70j}MVuE~Kc;9-4z4T4mI=%tKnmF9YO~nUfBe5Mc=)$i_;Z5e&b)?MF39T`y*nKff zAhF31PiQzxg;HEaxgs9#!6-|M6YDa3=~w4;kgCrm^=z!64~n{qDM%5B$_|hd!-~Hd zb&*Ib6#3r_{mq_`d_VtXZ{_WF6e;iGxV)$!{byWe1-9r0h7@?QYD%>pAV#W&;XL6C z=3t05EeH;7F<|b0pov~~s~8Es)9dtkxxb^>M-ZRYpC@fTPUlVDz%^79QhS5?KJ2Hp zi$gf8kk&9Q+PCx66el5BOysmzDx(FGAs#9X?p?4r!+F-gIsU9Lvv4J7H~?n8a%d)C zXTmQyzmD?w){A!OjD?-on8jIVIB?Ah%SH!+EV;r1OR|38V@R)RvilM|R2t%38H1}y zQkXGz&c#;5*d0^Qp&Jhgo@;ue)HReZ&$oIU*c$AuE_fFO8sHPU`7?A#*)E3 zDQGPF)l5rPppKnkY3rA|!`N^V6Cf#mZt{U=$`7X&$JyCv$VhUfo+S{SaZ!YP^%H`O zhv`N98%v$H#n$piDZ8oCg0(L_Af6MMfAfYVZ&yAhe7gygr?ck(`2birJ~ZWz+Jo1L z*17uR>#4z{$>cCT4T8ZEV&10E(=wWiOhy>%(l+%7-WB*1?a zc43vLsp^o|2%47g-MZtk=I^Ckn-{m32Dt&7fJU|XEoiOUCDaE;SCfQ_B1gBc=E+gF zP6qAA$X7@4M-g4t})Z2!KM#~q*+z4+%dSni)UuDkh40ZKKa{OOgZ2%>j&v4 zg?ZO{#Q8Z82lM-S@z*c11tBe5L$4hl%-W@a0%*Qx$3z5q)bcTPsO%R1P6)vKgWUr8 zC~7HTLys;<3XSA%d$=!24M}^9wcwFnbvg$3$uCz>RA+i2cl_Z8uXZ+8N4srR_K^M1{}! z=KJJJaE56be~K^)!q@BZ}%^W`{rtK`t>+KKf1EO%37TIGAOd+U0&+u${7^? z;xoj@Gv3}LNOWd7*5uleXbRNV;NvvFl0GdfSR1|6NvEpgI&zzs|DKSPX4m)C+XD(7 z&TES|3%KO~TTHVw12v`|6;vgJ3ngwwDGQ|qZM=2}bfiBWJO|@&ybRA4z5@9j&-}S2 z2@u!#Rs){Gv$W>dUBk!dA=?&cWlzhv#h$Cacf*o_M@AUgs;AxPXa91F`94HvXaa1) ziq3X$Y=(O3&@jtz$jdB1`ji-9$C>D77VmwNPaFq!aknK$w~7l!g}NsGB1<*p zDM_Him1fs$*RX1%6P7TTHgNmn{x_1}x79Z~>B)*0^zSca_T~xhTrzSMtk#6N$xix- zMhQ_$V}P-8ssdc|{iZgsmN%7Uy6L-M8$y~DN<(zsuX z3X)YLcnk=GNVsbkBd@(2^=Yw;6mR9ZUjpJ_1P)UA4Z$yjz?WEq5CqcwjAfYfScX;c zruTbBe<*$=yOEw z%sSx8z|W9o%&=*;e*eZW>z?ieZ$$jr8+;;Y!ujiodNh_v`pb*bZw`=0)TdZYR0s2A zP`5^hP>s{}N`;{H-GNn%6%|0=RJz$#uPAe3vBoc4b9}PmHC#JZN7&|`bLm!(oq?e_ ze=d&ZDf^m_F(65F!~%s=J4bk8NwBW;sM9YU_Zg|W75dip-?&jlKt8?LB zraDHDj>z+ogYp*xL~g>X4K`k z=1G6uIM3L_hu?2IqaV8l!f3GS%KP3_@K@58PVJ5AQmOxR#mE;cAEe_n@2in4V1Wf} zp+Ij|qL~|(C-Es|1HJmpo7~~!xn35;s;vTgs>GAdmA96HU*LC{15hTC<(Z1Mrebo6#Y1yIs2{G%&oxbkP%=} z$WL~ie<*B4*)u=@hsTF?35GoSG;`Fr0qp|QQ|C>GCUe_WISa8eEmR}e>%jOwPJMir zHp#qIFZy|kEhsSs#c4^P&yZT~!sP(7%JM<~t+DY!LvaOE(H`@PYv?S9;q^g{ZnEP$ z>4>s!RdB6$>ArzSo1WpNu=rlzGh%kCyKvs5l~}vlXnVGjg4QbDa>T;uip)Mv@kxF(pQKAv;f|n9hU_5Sy-GO2rkjJ*a~7*0Wx&IK?c6dfU*8~r#TH@VqL~O z$Zc>_(fgkt3}h00FHx56m7v8InYe2KT}{D%-k;lc9+|d}jVrRHVPc6un|HoIvxI?0 z-A2{mLQG7-I`$a_d*%K5bq+9Qjo@+>Wvnk}sHeTOt%#)O7qm9+#fRZ{I{hD<(2u?{ zpU>Ue6M3{(+QP-$u~#5v0%smPMhMT5FgvpT@?7hZ!N^f(z>#TyTv2yhcP1Yp07;gX zl%McHUgORCfKDe20O_!osw@>=y$X0ABv;Ou_YpPjh>jtRTF^{if#i|J+o;*qPHPVtR@9=04krmrqm6D$RE`4+b`sO$uPDK zcWxGKc#D252=2mQgLxM3Y4Cl_mgpYotNAH%T~}R!Oz3t>2!j{zNj~L<9cij8zQWb< zs;ZoUhxM$shAEx~8@PZz^GSXsg-ZsnyuTTis4` zk=~&91tAIRisA_qq_srO&9{n!RvSd_FS6N5YK#QX7^Xp!eD6=k@+@Aww;+ zlAA2>dWrFkQH7M$Dd8Q82n`5bUmu8eyJsOrT+Olgl_SO1LciurO3Hw*LjB=Su~`#; z#zd3D1r1@ffZ;p`csUF3SWf`r9Pd1JGI7nI%|MCI&=2chmn|3}UF>Lw>ZsR9eg4vS zHe^;YZ~UYOgJD3r7#1ywVke@2#&=ya?NH}W?+ zP|!}CEdxX5Pw$>;vUs+`H)n@Y>L6@Dl~)cXa$VER^@Fc1tv7NDR!rw~pR#2qWwP_& zZ?6qoSa0kw^_-8NYt^Qb4e9$@tk682x@+V+Rq5e>>Ue zIaVGhV>_+!$Jwq*J-bwuQSOsL%TJj+BKH}V*ipAv2E3iQ%vsoqzXIYU9E;ZQW9HK6 z9I{M|#(}a0@`P)OcdOychB=j`^u*DMlDHzZ@B6&jCYp%e{sM3^loH_4U4Q`=8ELq> zxlx4t8xy1xiK2}GxNKi-60jQ8HdIm~<_Pt*tA}AyLCBkH zlT?qOK>G2Ltlg_}vueL*wkP_jW@9Oy%ca^3^(;kzg`O#D?+pl7co~_+zne- zO3WM4u3`z~70Pv&%v*iII zj$$nTBqmvt4*CUHx&WDYfD+REo5_gavy6-^VKecnnxKFf4A*my~U z_gcRmfm+HDg{Rm{U$cP2w#^HCgNoXRr#jcR&}@wSM^hBg#hi$pAGxLTcJ@VN#{f-7 zmOM7foB6Sx0N+5eWztQ$F2ie-gjX|!n5;&SgDj>3G?i9NOf@l)aJDoR1Ew6;uoflG zJtK_hE#Y|&+s?YW4KQaB%$4M_H=dw>zCm|!I&wHb+8gcD##fX53&xCfM}i+^!2FSZ`Y2WLh^*gQw1zE~UbkEYiAr2X&u> zSUnX>*dU@&^%;e$nB*5P3gF$EOnY`Mhe(XD1pmyO73ns9h_7CDvw2JDAGN2(-_+#L z7~AsjGgh^i5Ow2d(xJVB;mVRz%-NT#sU|zw=w*ZoXFl;m_?vfW^X26E(C4V=igU5# zDf}Raw-I~c1sP|1&%qnKCE_JCSA<)^*q~|eT43Qz85SCVpjg6pLcC9(rtoNdoQ6qd zEc#+vN_+G#BE8(?sH0_*Or!Woj1Ktx>pqD@KH?SsWiUt7TrDoRu5rntpiS4f^1K;nw)MQrg@woTbd) zdM?iyx0?g}Y#k@sr;7ays-mqH=x|$PZd6^QZQNZ6n6*gj>zle{-DAosm3CYj z%6|gxJhXX_&kbMPd|j`63V?P9B*0TGyh&D~>xdj7E~Vs&YGMiOu6}3+BjvAvVY&4> zA%CKD))Xb%CT6yMe~0BF?c@mXY-)c7kA33xj(2HzWFCl)z#Ng>)ZpWpodwZ0iWo>< zPfWaS$oYkT_UumGt8r`hUHftGesEp@u9GRWykdTo@>!wD98Rj!IY3=f zd+cn2=52mwKk3K5H44#<%g~TNT1m|N8yD(c!?mfHY16BtpB1GYjNKbejF~)v1$mWc z2(SuMvrhK^eJW#KDjmbOfmWj&(axP;x%>OYeDs!A@g~>qxOixv{(_3mZz`%OQ%#zj zwu<3syw4;Rv*AC@spR@Y>l^sLSmoz8I><&o zRzO3TV6ykK)gH>~cD{Igqixlpb;%~V#IB%TUWR6(fA?T+2YiucooVqquTJBW)tt%g zf4{&L6EP=+{=H<**wkJo8F@e4ONkQ;D$^go$TvCg@e{0tvY-*yhP|c26d3zE1Fbim zAT&zn@Z zwk5CPpal%;AQpDk&)ttrSUyh)Mg@&)39Rff4JH101e=a$70KGNF`d_)q)2`WHZ3t3k%yh*t zCLqt|K#adHDo-Zvn3@+^RGb;k-4-FcWHI<|v`n zNvKXCv!baV_9r1}96$cE``kavQz;ak%SoJGl)3@SIX1LW7o2~ic3wfT!{g?-xB-cl zGV4rN=nJ4}whitwL;f=9$pj_*u-wLvb%Tddr{9hg;&B?N#RMqwIfLCYC$Os3t2j2_ zl6FxS8XYb?XYaAyY@{G07HwMljw^W_R1CK9x^vDj+?0Wfn1D%bsd=VE>`DP=kg>89 zh%Ng^TS{Mi?f`<)sc4GgW1-{g_a|~Dkfg5 zDBu`$q}$|=;Jo*Ka|@glUW`z|Iaajth38+rpiuZr%GBOJW5LnN|H5BU{H$22+J=ba z!(ACb!bgfZC#D=#2IDSuB1D2j`=f={2$8RZ(FE<8qfFNdJ<%;oz-!;Hs$umD^-`V) zA+-5uE8oD$_&c;j3FeflxUHQ@sTyr6As!p|7KxGmu?!Xb?KXYV*@pLgiw*n6!e}0b zl*0P^j6@T?6;MCtOXH?Lp!66;Mm@*JS%|Ncp$yrgnpP8y$=9}xnY75JGUo!S9-h z*=P-DuLH?nwxrCsQ;G;#ftW;?QUKPGn_i=(h5Ma;us*#V9I+B$C?Di^>r6gGPN1l7 zBw`s^n%$~pe11u=`PMOM<(Oqn{qHvH9eMGwK6!bB{}RrxmASd);< zU55n5gmFzCx&bloyoS6FQDlA%jQ)T*l7eGz6Z(8=D#MWG$(iT6Q~&Ui^})fhb8#W4 z+4jJ%Q`#Bx7Xn&GXurlpEaYVXkvlp3F^b}i3hemlx zE$)dPi2ap1dBGntAvhme*5-xziyZ4hY{2&Tk!Dxckoq*tHszafoNZr|)FWIVW2B=& zY7IqVmaKthj&3S<+xKeS%uk)*;r6#()TdfRt@TDROPhv*hj$)^1UJh7Q>q@^?`2v*Y0k&)T7yPNK2NrKAompj!qLH5#C<9L%GXH6`K`FVLB7Y zrbP4BufNthOJfVBqfklNEZ^ukf=WX92W9c1_eFbIrNK99B)UWw)n?DG$G zgNWzt>b{RH{?2dimytHzb~GCRzIo0pb)!9{S@*ZN`Q-my(Ic$hV)I}jD+DHMp})y( zEnYElgW(R($HN1{Fzl3w3pX-K*?&q@3Z0ORa)51bW#1bT-Nq{3qrNZygz1?I3|?$q z>Oaacl*t)Cp#RA|fY7-pUr`pITIUX3T-n-eaoohYEqo6zH_`KZndoun6Yy}A;Xf%^ zl-+(L-v5sk5NWKA<6BoxYCk?8#228pOm3wAI_DD4R-I)j+J3u!=fRE<)Hn9dCztsA zE$Ns}2D^&vMoTpP0db!;Bh%!|!|ZP-8JHsq3N-|G@b7rml)H@W{SWK7)|ew98l@in zO;NlJZ?PBH*}l*4M#DFX8>=wD3o)RRnvN@Pxt7~(05l8Jj=fvThTGwWf3t~Tr#Fy& zpid{$@HsaTH1gvOZE0C|6=e~Bs++@Hsdf{yxRD@R`Aov zQnd_kXQrY$Hx9ef?IQ3h`vN~`Rm0USbQ^q!+XQ+}fYFr5PY+@cL(>f!EYUG8HtTl~ z*Vks~9-6phXcscBIY20jl4m25ql6#}#d@D7LptNAqoLJ5`rmQcPK#66hA3cJzT8Yx zGp%(X>Aj|z_rn~Xp0OfJe-F~})-V*EXfi7PgS{$zeGWRGfot#?YEX>h0Xd~4yK`iM zjAW`azw1QPIW+;FV_ITAjr}+bMY2W34F!dGVUlCpcEBF-pNmrMDND#}odmh-@k3>5 zVU}B^9is<|Zok6SobLDC?Rs>?f(Xz07w;I@jV~Uyox75*A5zB)R-=PfCo3P)nn@2w zff(vgA2>|JhL1L4!KVa@61Us+R;p{%nQ# zu+NUo7g0FM{`yg`ON~{T-yaO0iEykrvT+ER%hTwW;=OaflV>8P05Bb z`$R-tS4w^E%xQt2_&9xz4=wv|x+1sa-_KP*wW&j^#ILo1!2H-X9=p#mmm33H({Ac! z>G^76NjiM4^NX=51F|*z%lG_hXPU44t?Iw4i8NK{(^ZYGo=%bH4?g>cf!pp3mVKWJ zKOP^>O)S@IoZ#x|(s>T&{ybA>p(f8cB@k88dG-L)m_!7O+Pz&#Cdf7a-Hsr}Oi?Q4 zOin@;Wq|kMe>hY#&)E@ThGlS11L_h)@hFJ*o@NEW&O?8o+akWY-Ysp@7fIb{L@WpWueXnrzF8e+ewV0jzxZ+i#Pt-cl}p6F2;k8S>&*t|apyDUDbr zmXt$A4ufWdcvF3(jbRj!TN&#K4Tcx@2D{4F)qmqhh9dR;;cm~tBSHmYCS!QJ3%#x> zYTo-ZJAUBW`Kq0mR5N#1Tfi4kYqrwo7=CD}^LhC0HeS6_!0_K=UNeyHPd!&@?1tm$ zt6d%6YGIw-*=FO1O4VY{nc4Uf_AL2&ze!#q&{%n$hv$Q?G`Xp2i76RAk4nv2TC>Ni z_IH^sHy}=V5EuA5a~+qb7T@1Y&#P))sVHl2kV~sC>G6w9WA+yY{HY~vo1xT%XeoX; z=NUXwVCby27v2BrC1E8YAtq8kpDXto7f&5pgH*${9+y|zuJyY1N`U-IXq=wy_1pbL z_A8HBRf`iHZ?gguTm+{M0@aA{8`%78xGVmI*UfP;+xXaQUw#TPZPI*CF3qxj24BFtam!ukhk4v(m}!EYrpzhtGBwNx-+Go!?{5MxQ-Jb6&+(Ql#T-Ke)D zU)X-U)|8b^AqCEoms)miQP6tRQQ*f6jTAecAc9c?vb3!$BOvj@Nhi&c8C8wVt{dR+ zD_rlFwLIg5WR1$dQbwgy+mJ4KO2jQXd{o`P1Cka0B($vg-=1{BSjKxGS5G^ zjdo@>ZBzX^se*em+=2|PImG-X5trWUsDOQEo+H0{Y9(RYBS|r z_S98Hn%H`TMse6%hkq5=76p&s^bM1RW?vn^!ImUkxu=xw*haHx-17O^gLC3 z-e4XZgM1Y~@KYDjV~>&2Lvju*-OF`!bChRy{f%Zt2T` zSOvxH7=*{w1T-ljYVY5<%~M7e-X*#?O{w-b47$mtan7RA+t)Fi?uP{Nn;SJrKHKz7 z3HM#0ug;?DSlkL;G(|z!)g(6>WZK_FIiKpc)HS8jx|vL!ix+xaFZZ@9-~thArlmwR z-4RbeGPQvx=-(L@AR0Dg6J%5$hBth>R>ps=F*7WTG~4E0C(;=MhK+$IfIFGl{R=ex zqB}ITr|bKXrAQp>Q~DE%l?W6F;4jzF8{T)j-VBs1?Rc}PY!ac7fI7j~dxVWLXFtE} z)!Dj1+~B={TsBcEegzE93pcFGs0d8UDvTnn_{)ezo9MY6uddU)!Z@l5a2D4@JV)+7 z_R^POw^d7Tue0(9G34r^VQqJ>a<=1efN$MFzdg0o=b!j67X_LQ?mKi){l2Bb>T!>B zD4dr~%C4G#U#?rahY+a54_@8!z4r zXvn9RwFNxcsg<<&no6kzOcjIAm)BRo2!?afwCZm`3BYLsPFwed9W;cTdkiv`7EOs-BWx#{CBs5 z@_f@w40}3r-{)e&;PcnP~^h&2+vT?u-8e zK(E@cnsoRoaJ^6LgANfr+=dUYH5V%d5{fsnAxsqMILlf82RcE;zF}kZ#+~|>nextR zF~c^k=@&@T`a(OJwl(#>m&GS7xe~ZuMYelp7+vMy^Gsdh%sWbmPjki&;^QIBA^-{o|sgu zs6_t?irDBtFh4pxf*9Sl5!M~rXJKh(k8H|4P|v{$Ss zR{KW?=1Q2?{)>C|zf8D~Ia7&I@)dIl#A{9e1Ar+>vwEzgyt3TfdKBv@sGW0bSG93J zt!;8#)#GB$tD$8-EkM|A+6YJH_$7`P3VGufBdk2w6grWR zLlGz7OBoQEjnEV*N6L2@6~Z1^H>ux^pOw+Rv9^s3^sx{dyhq~nJ8QT4$2!FL^?ZYW zw`s z-BMGQ-b!;``Ez`fG)yqQw0;%EquGD=qb+@0NSd!KIpDopXkr zyqGOZ)2_%fP9to@%tqC$Rn6}EInG>-7$kEO3O&g_nE>mER1~O+V0{)xaKH06%*nez4TKD&)8e9bx58DSp@d}M4I%ah=dnju<1TYMi&G*j9e&u8D{F&_f7MEOzP4B^CuOspdJqO+GSGqi|*qxlM|MvzTzrWl=C&9AWIG$~;T7HA8HSdX3vLpq#x$ zwVg@dPiq@z$))yb&P_Ta%2%K4(ZjvW*NWjQeJx&@@tOVu!I$V!M03I{eE2zsCo+3t z_b1zU1j=Dq2Nb;{#}K_(ytc41Q6H6SB1q9UQ?u0fg{#Wq#3o+daBaE63aXYh z>D4=>`HnDd(lef&E120Y$FtiqN;(Kt@`p&2?N-De0MztotVwy**@CwL^Zk|N{k;C& z&7|+i^AS1wM^0^x;&fyKOC|Dc3f*oc*1USq^f;yUT zE}BZ`-mV|{{ltbef%re>*c;!EPVnQIZ_3;k)m=<05sMFxstEpO7N1T!Pb>j>tm zZV=4Xt*At_J>O47_WH_Yn*W-)2yfLHziLh({_T3tziK~oWn)D+J|~&FE^`s2c`(zc ztCwzAAYUVzpTWDmUPnagP15iO3nNDBj_i6X;g0~nCJLDuzza+e8{ElPVRaIrL1DsK z84=Dx8qEY03P8y|S?p&7DS`s`>=Dt6i}_%E!0fO;Sv}2tVZO<|5yxM4*%iwOt5@;> z$^2ND7>4vA!EC`i6~k~HzK2XO1Eu>eTV>uq065EbJN>=Un2xr0v@tQTTYfbdA3{UG z*MS;w*j9}tm=}y#0W4mUcsLm&y7At(WOysYSJD&0kBFf+K=(LOzSoMLPnI7|=mnhz zq5$k{6A9;N)mfa`6~&-rzr<7|+cOcVSfPsbKbn!cz4*O0qa72bSQp+4A-WpdCHN<4Y!8~ufM%8cT++D5q%9;!IXpK_GU@i^yC`Mpqnn@QSWojWo@>yCD0+`{DXOU{MwzHKdoCOO(Imu;l zmSQ4OvTr>Yo&dF=kaa}iH0Uq#8O73$gn>pjX< zew3bAuD?+$wq1NCWHeY@37MCMiMA#jy>Wp{SHwnTERXu;jGm8QflX+^?7u7+=~DCxp(_S6&W&bH?L|B9>-C5t*0;dN3i)>NBtjjHc-%9Zd2S+Vy58xAuKdi3zHf|dDr6eD$dv9oflZ?F%Ux<&tMHh?1khgR3E<`KQ$SZ8GnE3$VsF0rNgGWGg2u)-3%;Y;R)18kRE+-j?{&CKF)%ZfWUzN6j*(1 z0%d8rTSg{a5i?7X?sQk1h0J1Do~bePA=!`j0(s(6(R!WY4JdeLj}fAHJU^@tSYKhE z5)?uu8tD2+}jn>#_xn+t^gs70vWHng4tVTHk7Vq|8r!^nf|fkiS?bx z2LQL**KVVjB@OOp7Kl&42JEml_c|iM zIkUPuOi`EY>`|(>DG)6YRguZMa13DjIq>0xV10mHUqGEqklfz_EmN3ZJnf2 zeH`_1W{)S%^XbN{77HK#hJG#NO?(r6@}IlDl|95`H`iOW^;WR265-50OS=*_(4GP( zRoN%eLuq7Ep`v&+Z3LY&>e;QFo)XT24m9n6coy*ms3no(N=AK0v9dO@KEb|Yb)qlg zClt$AUYvTABVrlf6XxF&%$7(n8!!*AyQ|EMKpZP2&BkQUqn0e?IpA4C~7bElrr*~#nNI!}rE7G$tF~KHnHnF@U z`4*Kn6rqswN!tp}?Y%@e(~f4w*(dt7jI2IeQs+2o%ZTFg+Qs?-`-_+~zK9=mBND~o z)FW9lFkcbuS!4bq!A$JwyI90*{oLbqS1^04%!XYYvz2G{H@C{X-KTmwPN`iHK8h!( zSzp%i+MMRHq7vFwPEC|&{j+$H5t|t z{epo-nLqU7bazuuagq;qAwULkbN_ui1ftkm5kIC#mw4D`vtCj=3>C@V%Cg872i{ur*Ic8x zcj}iQev!DdgRE&Zh8drca9%7F^5!or+n?0@9*%xB-HrSqlN!OUINN6v${_Z8NEI>bBz}#U4pzU^r_0&EU=I>2{YSf8<{N znD&`k7N1Bv^DiC>4miKT>`m_p>8`&(2wy3Z=_kv{Bryw{^g`$=)L`0lU6b|^1M@>8 z%J6|^0xgl*RI;OR|g0% zENjb{cY(fxMYNK<12nM&;#etZSk{RP>#+9>^CbIVer92@3yHB;Un8KatC~2k_A~p~ z9U+Qmu^5HS+Kbb?>D%cKl|G}Q_o{E*cr-YecOetqEVO6X#1+(4COTG5Oxa+PudqRZ z@M^>vn~^=S#yBIM#fVi_=c5^^+l!yI8BLjQ;;(VV$_eqWVEGZeXDB)KG=dSz+cKVD zF3&NkJLeU9v{mt|c3Ud{TTr;I_Uk2CRoY z0^VN&l>CTU(4U2^aC?x)I|SoEI@$9;fTLSB7oUMYS}YbFAw4RXUzfSZKbjQSxXIF{ zAroa3MT#n z`;Fy$+yene>uBwp=hBw5Ld`zwSjOg~V0Q2Xa}y5}(%#CmEt~t2#bN8f{HA_VUUHo( zcoS^Rup*f~b_%=Q7|)i72|H-tTn94;x(#DBdDSCg&K2F0>}|ae@VE9bFOEP)hR-H? zpZDXda9wL|t#>uN9Do0+Qs2&Pi(IP%Z{5F$x?z$pUP^`FV<{Z2KsBmVp zt|zo4J8qmCRG6~*JW%|O9-~C@c_fo}&}W{d zsc_XiM=%esG8c7Y|XH2j}I@;+JPb(%VNF-{ox~tk6q{s z69^+VJ>GF4ZSi}M8GEt#PH=LtM0pe@hFMw!tMkOi;C8!hY%W6f|KKoeC=A&TlP^$C=lgG;l;~}v3?=`8<(_PeJPSv1(xmMJr~KTLwK1+ z6bdOnBAAP4CH|E1eAho|42ZXy90_Uo@Lv@hsk@GS_lvih30Ot*Qm~)dD=Wfe@ z#nKR6^#ZY=6BYH_gUzH03N;~uPJ#{~a(bd zq!k9B03JC;=*8o?VeN-HsY_Z86DFTiNBD{a_rocZyzLn1V^T1qKpuT3O0}L~2642X1iJ*jtJ}?1nDbu&JW6u@sELTs1p;giK59*T7lZY8Ing(W{z;Q0_o5Rb zF}=2Hd>>yan!k}qh`!oG@aRFgW}x*!Jfr&=3+%soSz730PB18qP#EP3;VjaK!2ONjQ;Bx6N%nW1_#(fj7%~EHwY((E=&vu&^tU*Cy0p>XZfjy z1e-S^FogIc0?^fxY^E0Oqau-d8P5>VBXvaavUZYwY233uYKzScHg~>KEaLbUzYJYn z7UBm*)W9>&Y)V>3Fqi7RRc3=HnB7%o1HN~?RpurRu!**2q=WmJ#fycA@sY6?A2qy2 z@KHd>Yf!L{epHY8;I8V_^}o)GS=u-MOStM)S-*+C2si-|a8h85*ieG{qlsXc!2cnv zzmfRxg<)k-&dQYD_?v?OyplaYG8*h!md z|6qAm-<{kS5AWWhPsI_-BF?+P;v=H1c^4ePT{~X7G|S9Fs*q6owC(+b(LxSz;%6DU8AkyB)ec+kaW9ClKyuw zuYJ(pO)yh`51n_Zu>E#^J>H;j6+i7b_ch>v9?=LFLg)`C<^zO}!cqTaQpXJNY4dw^ zVP8?-MEK=?cKe!$$_n*K{8Ey0^g#QOa#3tfyJ$bq@|ZyGfd{*nQG1xZbi^|Ag<=Xn zY=*uf0cq2)+$`>Da$iU*ds%(A@^ul|rY+?@^;elwx;3lJXSQZoJU=vztU}W?yvM|5 z^f4WQyh2_7xQAKs%H8u9&n*^=C7Lt6mn6>pB3`H?*Z}Q9CI*i(AqM_&vaqm$oux%k zagsstfD?Cp-vb-mklD$?qnQ*324`@sn6<2?>HA#7t=c() zIap0@#)jf^Y+FWCm)QF}w#sZFkB*2)wG|`5_c7aR^k?x_o!LEQiw7)iO>{17lF6`r&2&;y*dAtF+Zv07Li_eB7IldBK zU2fii>N)HGffJVI3Fg9}VBW=X@ZJGE!92Rk>~Usm#)#c^PcU_>hdo}zl&3-B$Rpij z$i8DVvf#B=j~6qHj~0t**ub%fu>(I2#9am^B_Ew=F})?6oLCGKld|;Y0TdHhAEeV* z!wNFi2J2w3eoIbWf$(&Nr6mxiE+~3ujuC=*+%_@)tj}0k2D?wppE$O%2|Ft8JU^)w z%Od2tyZayb6SQabYa04Buxpd{O7T_7w5!bZI7j*lXly2l#5YS%&W8Xo zO?v&FVcmzX3tn4nz08+V`WG_*{N}8+LcADdZZ=^_FKWf+bM=G`v)Zen0{2Jx77W1q1{ zDw)3mIKs$&W~^77cF;6-uN|KV^JihN2Qp$)6Big+m0m2CXnqtQ{Qh}^a1S<^vb3vd zCb@|^%YV1BNl%&V5LSQapV-g9>a)+ME1dBej$%~qPJejfOY-a&%z&==M68G%RTeW0 z`VZq}?PPu9^&`UW3Hp+3M{FN1meIGdY04Pel3qQJ`CQ-QB33h=U=H>%D_05TVn^cPMRko{E^{_HC{Xd#hI&~*saU&S8Q9xT5(?V zSfY7BhK|>Qtx80L>?mat!$~$GsCRl_Gb7r{p}usY2H!ZLH-bgt_$fGtFrN(Xp+bL_ zLGjE42?a&&*(0DE8*5u~`or^Kp@Nk7V|Maju`J{{f$~)uh_U2ZAMk7+70l%}4hZR^ z?9V_OQ}d3J81PX`2fj6fvE3_7-MEYG%pE%RlC*n}j$jN}Enbg;f7oQi4-?$mNB>#m zJ&u%Fyc@v`y*SF~tAlgstHB1rqp%eWNSK_@v(Z^4PKf=zHt470S%RC8E; z0FBpF;;uFe2?p~$?#|1Qh))X>n1B_jBlqhO4At+og(SKCg|Pmo{#v`Ih-LKOh(i9X zRXzsX3$ zeOKrE=@7PF6v}w5tX1a)!=JSmhwxs&PlFA#vv>o!IC(>pWwyad=m=%941BRT6*if$ zw1}ZLN3ilXW;+pCTP%lhV}67u1QYRVQNf8bE#Vm=dbo}#Zr0`*v5fsr{k3*iiDePz znJ0Ckk4h9v{S0~OD3~oJY;Tp>@GQZ+KNs!Piax3|Y2PW@&pACgTQT&yx1U)${*lcm zrt(L}BN|7Q+3``^hq0-jv%+`#%GszF7vDzvW-nfj*@1+?2Ewxp`y91<0PduBAf{+i zo*h?N{h@!HaCOr5u9<(57J~8MbI62}M?qAqNJ^akrAlog3GF%7&DLH*PFn%Nc&mUad<>Drh~A2$;;UX%OL*hEC) zS+ajths6q1HbYM^B#1qFF=$&@cCQ~4DoX215q=No>arIP5xSC}-C?mT@LZYl1t{0# zm5h9D@{bB;ZbZdsP-3RVl#CB?pS0`(8a?;sjj((f#`jRtb zREy<^B(X3~=`ND?zYSQgVzX8*K9P%O=kLXvH{S(sFzq!fIja^D_!N?72TeBcGRmYF z)N>RSQc)~X9u*XmVpzMR5e1`=_^Ozzb90LI;Wc|G(56REG$wQOxKKp9U>#9CQQWF!zr^lJvD`rF6XAZE@))Nh8lNGU&#p3~V7_{l+3SBz9~txRIZozBNx>gAVRiWS zt*uCQ)Fe5!4)#@Jbt`27BwsVJY*X0Qjrpw@qc8O0Q<$5@7ZmpLMX-U?pSsOe-6`^xZ z^q_AuIIoj|;`WN8M-<~o8!fC4(J$$1Dwc(mmHZ5m=fr(?Nqr*RPvZm1()^N{&rSZj z3ug3FrAgg>9A}y~8thnW$6npf9MRkZgZH>Q$?jv#(%IODaoGB;xjpw{^x*~Aw`9!D z=Zo)RiRP2ALEzJvAE08e&v4LGSb8*x3Zt0i z&i7Mc{ejo1Eh9qgMi~*7TBld{vlxkEq&*f8mm-dTv|;y3oU)Ffazzx2Nw^>C1IkwU z*0=R%Y&^l-<57b7Fz8qIU+NL;LlwkVkUIY}h;@sWA@wKQpTNjBXGr!DUH4$C$rhH| z-M_q81dNS93(ApKkG;em-hgxlT*|!2t7Yhe3oW%yA)k9!t@qaKik(_V3R&e z%ji8Bp0rgAkhpNQZ@;kT`>C*c@mkt4A|QxnQL#DD|3w($aV6+G@;?*1!upEUL+t44 zGAo-}kt?!22kx_ieuev?KA?PKV|_c%VkDTGHV^Dq9u>?HhgX>mJPogz&AzHU!&YvO zy&-XtE2g~&i%*0LV{!bTY1;?R`F?8Bw$$i5n!P`4!d8~q3iM(jOEe!xU(UriY+&{V zU&}~W?~_?h$deat(KtexAj!b5Q2#iw8%Ekh(R%b}nWX)?P~>#M$qUR~Fj3uBhLe$jU^A6EY#RA)U)6 zABDD4{Rb=1BQW39ByIE27GiGNOvI5$Tdv^Q&te7Y5uthoXX|Huk(|B*yO$NqLSjWb ztiyT!s9=7veay2o{;NE^u5B>?EX{o}+?_vaBBl?JBsX3r@z*N~6`@tB3}wF3t)9!}~8ltltjUvjc0H z^vY^b&d3uFZqe{2hX|~L<}trG(aS!mA10WPkt(JE`^E^U1u~p&5)Rq^|hd8mKE!yDosPB$xW7Vu*63mQZTb_?G!Q9kg zu;Uu$v#~~UnWmos6~Wtqxi#KGNF<~a#BO2!?upx@fA5s(AP zzLk@+_jhpirI{%`V|$jUE^olL*nzo9?+oggj@JrHABk(2W>U+^I6)Ia8zQ>cpw7~i z;(tbA`czr?aX+N{_sTI5Q{UddV@bcpM z5blTCVqG@hoZB{5O?$RrHtYhvwn4!>OK+7KW6`nHV;h4vn~^`At(3(Ke3mld*yP0H zE%vZ6n?A;HZLxV?J!0%e#4yAA0N_!7i_hcOoBu_eeO00t{1xy9KI>$beH_Zy+BPi% zKSk_&xhL8DL_PqR2FBJA=>0Nmj~UO`F`nV3V?y?W;J9D+jXB>>i;x{%)UsC9H)+6E z(0Rgnv5+O2V^05eIaz$t{4%@&Pl5sT5TqV&m4(%d11n>n=yF1ypxiAQcpXs6(%1q& zIPuG4Cw~?LOB1PMYiye9`clLZctV5|vdzxaXN47OJ)h44RB8IV zxn_X`eW60i%NOI5_@!8%cw7bg9jzm3i{s-J#Bzh?9DHxZX`z(%ihfmtR9RHtFzZ= zD>6SX;i|Hdr2cxj(ben4_u(soujbqfGrK}PXT6j17uF~9mwuBDT6s|GZHKV1LCuna z0hUn)Zc+v(f@w;_B z-l~}|BA6}3))CB>#vlB&tIQgsx5`Y%OOkd5og+M=`hsF~zB%$CK)kM`F7c)LSkFE$ zwuRQp@!|;m8T!kZ6})G`fntP&gUA4*^^BNps~TGjc2(n^2SOF{9yqX0O&&1eunBCM zW}?f{jTp@1*>bctnl(`+t?FZRu_upR~5{b{TJ^169luRj1%Aw>tP@MQ*7T>{X;$g zsA-r!O1YoW*cFW3QQhAB!s?=rd2nsdy?PKPk`+%Z-yxm(@X9W}hjt|RV%SSE!{`gG zOqz=vETe1#W}j_kpdIYavaN2k6TyC7Pa2pW#e_D!)#f>Lg$dKmM8{%d_T&aMlP?3d zXoU43aG&RsP6BvMEiJ~HmiLnT+_ZdfzPWXQU>gx2c|=AB}j>!bY?fWP!_X|{iAf1ZC8w@J5VV1CN^1N)gp@|cf_ zndE$Js7St_q<+bH2=jwuB3}0xwPy=rXXpII_pwCtMa;f@qc6Im1LPG%gP!{sP+$?W&i$-B!1)8EhtwvFL_j4Xltl6jiisPp zXk=J1$AsE%gRwdBg>Clwiu5hL2dv&RWj$MQ>`7gihHbB!d#}GCgZ7atjOX8v-AArR zuXDX9m}~Yp#l~R)|N8UjDzjy193K4B*%sZ;?Ab>`T1=lcIQyMh8_*6-Y#E!!1@H!b zH#4(kX`>|e+tlJ~m>+#Ul;f`u9}FTU&6|PcDz=q~J}G}fdS)fvu7t2b*{+UkaoFp2 za>B{TvQK94^McjpeKKobmEylMAr^?;E(|bZr}&>)ZKieYX*52Cl%@78O>%&p_Jo3x zaVJ6*k1If*>Q7RR+q)T7h67iKbpMk3s;$O zTo@6|xGjUl+4zH>D3~=)Hr7SyHjSmvvi*-Arq)FDBu5m>-sKfIzT5Qby1uNgt*xy? z7pwG}Gmc;dG%kMOmW{=tRRW7CW?!ip`$PtoN1%i8NNg#uPW1LQdu#)?KRMvFWd8_G zKx|U$fs-6gevFY11XhqvEwK~(k~X`V25qoZ^_YID(h~?DBA8gbO*u<4M*xcGBll9o z#C+zM0AqIJj{1T0pT0{KEWR^kCv90>EDigiY4%yc?B!)&M+LJb63orJi~c)sf!_Mx z&iVdhyC5-wj>(=sizjfU#N)%ZiLiy1MEVQuMm_|HWyECfS=(88OiKDysCUPY{14rmaVklBw~Lu&}N^cvO%7p@S8LkWr8e|TKl?Sn}oz5 zVkh&~encRb7`)YHMl~55J1!owQ|ju{72vRnyIO49WHsPZURa+1IRKwiH_s%oa~DTQtvGWwti<98UzOZC^$ZD~hqUA#N( z$gmiKzivJ=_A|DYZSc!mDP(hW*MW5s{V<@eY8)Y45g`-9e%{*C0azz7SZ!wId*DPE z`C#K^nTT0AW>5OGnUrUNHi+z#c0^MjUK1ZWIa5+Asw%b_x;`dA@%qSPh>^BvpOAi` zeaS>DDL-6x(w5c5(pWz=-2h@4?M1SUCyF(n<&6qv!u|_&{z(M0#u~kwSeGZ5=@@4E zqB{nXg@-frMD=zb<9x;@;9GDQ+{AdDR`-F;=`SSh{Tv&ze3rIYFuqb{4>=unu&ZOO8BDaI|J{gsyW`c^^U2HC0ZQeou zEU!uugU6vg0_Os1z^0Ge^%oHtK%BU|*H?|oR%oQb;`lt7KiKaf& zpKQ$2bXIrr79s|?i-@HDLP|7e>3EN*Z-li2uZ0&aRF8wXVty2DL)rIyV6I;*5HeFQ zB7%36Ggx5IOeEXR*hi>P*NOEJ!wMVZw*j`EEQ&xiDD z1Wr1Ni2~{)n2bvwuyO&VZdT63Rrv+s)YO?;v4mw5eSR7riuz(cBlKaPJtEL{^yo3r zMz@bxzdC-J@}%q)^|16Iu`JSvWh_%TDVQ0%ZMM;CeeY1fR`0UD-)$_7Kh|doDX;AH z?&WDc&b2bKHA5FLQtGc#+j5NLv_~`+0<%Z|x;@0Zwm$5wva7@8v1p&f5G$nZwv0P$ z$ync*u~5ERG(Y+^81*0hR&QbA^ARMnsystASd+4thTo*IpSS6@Y?*u@&z+zx*#=je zS^pOQ#BV8Q+r)h3hap^TW(=-2SE#?L{{6hE5AvFPyp~*s^oJN9jUP(_ff?BzAqB@3 zVC+HsVSliGbo@~tSeD&inX8ATGvQ0Sb98lC>Sw#WN7kVym<_nfyxZn_^*YCag1P3H zVAk{AwhUG$8_zIZ^Dylyw)^P&rq5l*o4be^DN3LL>{no5NBI77%KQ}{#~S+oV`h7p9o8mNo(_z z#->bO*&v$G$>g|m-D-24rXm3|V$__~U5Ou)-^7H12=h}bq(pK#R&Pe{dE<|vbwtNA zz&hCxVB1XFt$l|5=J=+5NcmAaT94DVGh!Lb70@=~oWnDllYuu4wuE@S;1+%5t z27+uT5& z5rf`Ko-l6J)S5@z-^ zjlL@EH&>+h-r*p@NXhw4|HY^VZZ>$5m08Uz=VUd8O*EK?^@+8?35!hhB?dO(75i2M zur^hbmQM78tIY+ns*GrJD&b;%R&kj2u!$9g6SI-*Qx6X-9!Xz&Xq~@#41;a-+UfL_ zTPN`~YDeoLX)1P6@Fw$26^@GK2McBfuIQ>Q6U_TB*!kM})pGE&0?T8arS7(EReNE) z!@83GuN;fvAU#2zQaso5N;M(NMQiy@*xN9mdL z@;3pBsho6ji^kphAS=YRAHLd*=-`Z#L>aD}Z5q}embGd7&thUGL->ipS@u;Uw6(DQ zf7)s@5i2ZRuzp*wJx7s*@ev`GJaH%4w;mDd7mrs5;~k0J_6g}1w=aobYD?^BT_nvD zyW6+`91+V>Kbsi;E{NOjXs+|OG!)F1QZD~|hG52R8KZ*P3S)(~Tdy5a8;!L+QeIIe zZVTJIzs7xDtTKCS_BuwlUp03Zk!>Do|JM)Mo&(>;Ybxp9Z9alDyheZ6m$UO3 zo3r(+o;m}@Hn_Ee&iH z9o6KzPcS$EYPy)Z!n`uM85@|ubON;d6pKCcZG?kP$d!N1CvB<-Cf;Upjl}d(;VgR$ zir$+FCe(~AEn`VUNJsXs3dTRsmau<1{aV3nS=}U!iCrB-nn&+Kv0S|qwjxI`@A*0H za>1P66L{~czDECsNH90`LR=PWW5=SZzhE5Itr6TF+wl{FQNftlxT2^+=qG2b_vV&UvK^vjUM&DU5jHYVm)+#O?lF+ z2e@50ORlT(XSQju2}FHv=XIXuv%E^=s*NL@D;paF_}0cICgU zdAd?f$g{$^im4T3wyz6nM}&ZwGPEp1US1Ho;k(bWeV#n8`jEv_AVzaRMWScAM zw9Q9ti}Nd9TOT-&)_rBp_tOUNJDQnTW@*C8VnY`nPdj6O0p1HSOV5k<8*U>1Wu-&| zR8&rKJ_^#SNg$k486@k~W+ahq8aNpwXMgiHG3++Qq~z~;&4d+}%RkA4am6-`D!*!X zKDReBn#2cSqQ>3^S2(k4BG9&b(AMFJKZ};N$0Z~pXnV(nV4J#a3;N0}%j{WONE#En z37!iP*@ZHSUQ(ViySiL{8MN=KwaIB031-~KjDooW{hMQagq2A3-#lfCd7+h@@TaOhmdv+_FO$^PoGX%|%PYg~5lLfWSI3EpKqzB*%79pI1arx&?FzZxGlJPNBA6S0Rczb& zBLuV82bhk}hmNZ~QtIztX6Rhtf$>O*sV0#{9=uLX+iO2K=h$oSLx7cyrtL`~xRShB zAnnY%I1Rq&ikFT9MM)z`^Tf|Db&tK->dMM2dc#E*{ABOeO%(k&yxxe?En)QT`F z;Bp*#P^|c~#{q0zS0AUr_66+>>t*Hiepq{w#>B3UAI%sNh~*)Uh~=JOHf=vEn2YT% z3T6+qV{v1;NWFNVXusEE&@s}$>a&jZ4I~lc7t?3uy1wjQTSlZU`yb`~&uQ0rODr!& zX=mL`40u!4uOe%w>c=BwOl?L8_6-5xZE@qHbh+Mz11Vc`WZQ% z0oFNl1a$kw^TYa|q%pCJ_gcg}3rEE=DbL!}j6aTjvclTb|0#kQV`KH&JnMs{ZwdPX z2BKr(Hh#DF1<~=|j)@-0nRD*W2NIiSz_eMx1th#iAKo7|k=z!AZKa5|VMKpI+xzZj zcaC3t1?`NxpfBDC_%bW})#K^jZ~I>QHpp_4S#9=gkTkeWLkD*qbeVtLrlHuueNWr3 z?Zj~xxl}l78If8z7dtY^p>We$8j+s?~rQ=gzOO@nP3-t(jsACYjDI^Vi%1XF57 zSxLimEB1)!(muuG5LnkEj+0x^KwU~Hv~?E^B-czwk7GGm`IbSxLLpLv9o__*$or1j07$=)^2i}o4? zYt?@yoz3A`c80YQy-?cOb`io}MjUkc@l3GpnZpJ91^XuIQiZQlKitu`|>Z}ZiDn}!bXIw+3{=Pe z4*`0xmE!$-oVPq?vsfVQEc@j||Aph_&3soQ8wfCo4Pc3sWxu)GbT)7%9puPrbB{!X zvkuU#KF!1Z%{uVo#A7F$Dld!pEpCl>FRyjm2?g`&v@KrsEix{gt9&z|Rq^ef5!h|;YMPhp|tE8qZmaEE`zG_yN&3mFhiyuuZWm}sO!CWwPU>+093Li(j*m4=H z3-U3~mea9W_Udb0dd@6i~{b29~Jd5Xzicm7Z;46&9wm}Hea(b1P_-eBbj=I{+VB0hjS#9>% z%It%1BJD@vELzTdm_+?-=X<{7c%%%}8m|?)*~i7gc{|T1?D`%w zao%?E@F3xQL_AaBl_rEBJC1^4^~`Z4*uJQpfsNPacyC17`zP!kdk~>5`5CI7?fi`4 zc!OoJTvNux#8#Ij`>;Q^i=39r<9od2>Dh6?e3$**)>x}|i;N#7uZb$?d=+0&U;@i0IgQ{mSlxD|ShF3M-qRUHc5CEPAVFnbhr-E0|wU zqSa;l&TS`qU$vst)K>D#Xn5`<&NP>YAxcu>l!-b?&P>aL&PgZ%%RW5I-c^iCi~0C#-RS5->%A0K*;C zui<(ocz8x!qv4+)@Xy^MWE{M5=0x6A1z~GA#!I}Y`Beba8;-K4#(o(*y4WMl(DIw{8K>mc_hImw#_Ee zoB3>ST|X5`X4k!rq3sleVmJ#$O7XsJR5JiPp%b*fLA19 z60`s#5JBo~0_=R6&L+fOsJ?O+oiC{t>4-ad9~{z<@=NB9kBtQCbh6P3bi85Jra`c% zmF#~NS8e*C?e*7Sde)-nLqr3h@{RCEJLVi`Ood7A!&Yx4E)pEnYA<)_EfeKZ1mDgY z)zB62x+%_vrTz_dHM^~%&4Ov50Ma(o1OBQCwo{Bq=ON#qX1)&t;`?Q(<~}&mxewdk zoH+5Mh;}xuZp2JBuyr$Nb{Ve|hB>ZxIWKva_;o29v)eCS6u(7MzU0f*{*)AMjmIVU z-Cn^xAigZ$5*?dPY9}>h%e@h(4A!LFm3@a4xZnRE#=h@5%lmSV5jNNIBbA_`kKZS5 zQA4ouW|aGpZr5!{18PR|XwSI>^?tBgp35wj58A80wjI3p9JJz#1={Utwhpq{_DE1y zkCF)*Tekw(AtL|sqQ15EUyclYroeP}=DlHf7A{m6CDx9Ac@WvaRVW?W!I{)(d``TT z{YhWsL3k-#gXn#NM^8qb;2?^0^`d+;hDx;5Y0jlRXI}()3`+jVlOxc!8?G+RoLvHc zd1=>j`fk#Fywijy(8tQAChX5eGM-zhGoYc~rWA?*g!-qkP|>-BM$z|;D0v*$oU|Q@ z+(G0Z#b}cPwmHh-l0nX7VPD{Gl&>)^yQHnd`b@qk%j3(~L zATZdnA*HpYvzNHCJpnW@ou}>gR+w)T5r=Q7vcy*2PbMWu;zRL+)Z*;XbtB+?<_+PN zo(=i|f(7#NYX@S25=~KR2l9OPwRR%4>6HN8fc_m?vT&Ct-M90(L-Bynj5h!(S>rF1 zjzf+=Jv3{n%2b|pX5K%_G8$v&f{wQ(w`y=B$+9EVfa00^_PA)|%xbiMPW5WG`0j{`IKxf1FM~XQfTWaq7A#O;r7${u*d(Ji&6-HMlP$qq6OvD$)F?@_ zE68t&YRBLH-jY_o7J$S(R@v;Ym4zo6PkkJBxU6yufLR%$`l|)84o;qsL29z4RO<+witt=kan^6(>SL!hL%~kAEN3 zT?4V}79H-5?dA<~FjWt&W^em<-}eB%X_Xw;A%&yJwd4<<6*-W{pgGqEtx-f&{aRV_*I+T<$vttb;gI0t|iCdTZOX z-MVVm|A?AR7HmC9!$|#Fa}CYY7Ix>k7RupZKl|e!*=3Y!i|caW3~Byn9H4G9Ht-7P zs?^}Xsl1C*!HM!@WWuoVg=_r&@z-S=>azx}EpGjPPVW5)nIR5;^i;q!hzO%{-SN>f z?lVrY1MLr9yvwd=g*{-cPiG8mZIiNxEr`K1iiX`Hy*qC-2iJ6&8c%Bh)n{sE;zjN! z4LSQhMs2l~lpEkzFbt;NzWi*E)2P^z7y4R~&@QSqklMc-+O3pKXN=RZK;)RY0U&Fkdx}(KAz>)Axw1ZqH6m+X2CuQ*E)AZ zXp#(k=#gzlQ9REJsU@T>H&auv#dcX&5J(Rx1!xUwR?!)`jYyDeWg5x3q0mo8a3qHI zA+wT_g_2X7?Y?|MRI3t6>Fz!fX9uI9OT`=)Jaq=@)pT1VoyzCk!s5JV)wY*+mQ_9f zQ!f1FpSJoDK!J^Mnn#lM1bXN#K~;7e+nK&34o%C>EJU7Z)_c&?Hsq*hc+el1lj5YK zk$pdoia{bNx_z%P=<&E}9`X%y{y2(_N;ABkyCD}eleflGY}vU1j_9^fXL{D=Am1Sl zZh6L7FT%1OhV|7E9^aAy5Fv(f_SJjiNZ(?q)9X9^)U3siAM<293 zgy=a~vTw`9ZNApJ+h#NLs^#C3nsaSMYJAtPaf8rg$6+1)X;}cwG}WNMtlKI=^il}G z0i`vW{CE4xEyy6iA@!Y?G@+OBJ^Q6E%?oA0Y1(05n%RB_OPz~Y%8hr+60tAp%X7(4 zc^@?2P(!p;Mn1hgrb|%!9sDt(s+DXv_@v*||NM3V|9K|ITa%sNJ3274ej}SEy1~@e zllyW5*Y^JGoYUs#u(hX3gf4JZup#CEWZXtKNSO%IVqheyzn9RP4BB-$(wRsk8{l{! z&uU>bQl!%SSKqw;oZdZAG&{v)mfz^ixP>e+53}%XGm_;t*{xW}xz0fv7GEd94x^=c z7xv3wcWKc+QnZTyyZ+q`kbE_^(nFAMX$wXuDdRv-pbfU=wtVh8j4B~D9*9GR$F#B6 z>ZS8lB3!wO%&_{?HH)4!xH1W)oNtiS4EsMGi<`jHi1SQ7x#!=87DuOUk0@j@3;=yH zDb_I&XMg38+g{Jzw+(TO#&ON}r-}ehy+C1h643-7%C>O&mNWt+uiw`FrA^=n9D`bc z0aRX!*h+>u`-3*Pe9dJVDq1i+*&-b^2j=Mf!^w(F;KN6w{;aKTxX7yh!*Q42HQ^+b zyJh!QCuO%g+-Y;TpQby8ug>2);H{!XqAO)Vy#tUHxnYT}&a*rB~jjyP0)W|I| z?_BpJ2$evhJuTs1DjD!bt#8*_tqWB-X+$&rCHiS7Db}N5erud>{1+Av?<>X{wyAUE9L zsYdM0>?=2IXuB7=thZZ>F~PBNNrwD@w^bqjRylbdPi7eEw4m1~L3(nmNkK}y>2+6E zbkujjttaMPM+8RQx*@+i*~FLNBQ3s!}gC z(9K_hFdN{t7qcx*k-8)OGk*w>j|e}?xtH~PvNIs>C$6KFt?`33R2{+}qA%`#G9CP? z{m5vxjxh1N0My{8-Exe?`mTO|_7SiYcL}X;Q~Ri?t$RjA zb&DWdx&kn2ebl#-V}01y{i8K8L0fPWYn69bmqG0vAz}s0=OM4=Ubow=?S`}m2*FNtbA zFuY($t(48oK-?C*=ipIg^HAzm_VLRm%yr7e>y)HQ^twB2ue`Hxx%FE)kG&M^QTvn; z?gzr??#9RJl~G27>W3w$t^m1ei;{Tk?%O{X^JCam^qKRBTCe>F5k&=~t#(Y!3_u_A zM*C3$Tewx+h^$$Sj6Y)y6-e&a3GCA6#HCh+_gm$`#Jhv06k~qVjuyO_eV=!Q93L!B zR)uAar_1cWx}&O}YFD-59~*}9@sH~+fC>bKYa2awVOig|Qmt<_Hz+C_L{E;Br)YO|_3P3mOqyymt?Qra`S%A()nqs0hi zc2y;&KI*5<@fcYIc3$1>IV@F-j~9@%R4M72gX)X$AEx4^`(XH$a*Pgbqs?}A_mRl-OG`~L zt6rS}Nw~U?>>w}!Qw{aD*AB$+uz(>6U^Lb+GwGw1>u2Rvj{aEj4{j^|TO6jMW7k$f zZE?OIZ=N|=rm1kED2A_8GPHT0G1@3QN6ZXQS)0AXgiopXW!*}FtRMk0o^ zKi|LZY?>&hb;)fk^&kz|cKu`NqxlvA)CZN0oMcg!Q&Y!xYAC9C2$#wJI`bDZw%q?Y za8&dO54_BpCs3ofqC<;8OdAnihgy+dmi+0)&<(>QDR|CcwICs&TcPuF;zeuqR9pU) zycCoO%e?ppZzTtGHH)7n#Yb>)O%LU!4!fwAY9r*J}75Cb7$xQ2~ zDc<*Ad-%}vr8(pVZ~#fsrTIuQ0LTFIKy3Lgqp<3M^uygfnpFXJ+#}#Xk)I>FA=Dbp z9*FYcLXihi8^2gDPki-;k~|f&R(<`+zDB7)WgKcS;I5@m5qQy^%b{adTq|EP7Jp=8 z=bWlC<=7du%JH^|ZU7mq&tHTNVyhHXOVGi9B>H^HHBKHB=3KMX>6wn~{j@^Z#s}Ol z4+LGvOrDbV2HnnMd)}MBg7s~6Z~r|Bq^dv>DT=i*jLya83neZ!J# zP9x=S5?gA3R#rsvGXCp%fT7h?@4wStevJ7vvn8N^`ugHLEERq7S!06G0nQ}b&Nr5j zm?>+XN?pe)Ba)!pCu8BVPa4e!DI7J>Slo3s_3)Ikz(@GVGwI!abHEn_FhJ>w^P#df zyG88geSk8lA`9KeWYlZ$M_$NbCm9Lq{cIeBiPEld-+#a5W6%TQJX#IDeYVr4R6^kU zXb_;!?<%=Y(5;>NQ3gwv4**Er2 zunw>QTL+yFtaUgx@;~{5`e1?$kKX#1)i9v%d|(@n{MqL-;tf9@D$WMAex`9)=q(U(#CIN-}&%6>;y^7TBK zd;d#lvL&ZnD%A?L3zoH6{Du2SrUJ9rwaTkt;54_ae~%jL`NrV(%d~o%ra-hb*v4oL z^)j?(O2k%e!gqDxO@|o)=1SS(1x!WS^gdmE5IkaYi5ZPET!Rcj@qf61BCfC~a)+7` zQcL>F(hpD1>9h4(<0e0$(i~-x(<4iZJd=yfMH^MZ!*V{6Z?GUWy;())7vZHt?j(mY zc|Y0tpr?I`oS9UlX=0+c=iwT3KXU%6N}x;B^^x)r%5pVD`B#TbC}>-~7V3NFQxp~X zhK;)---IoS=LvLRBuHPDHp&XV9k*A2YdDiN;&hPL_A9tDbH+osK>*(_f8WGuM$PSql4CBqFnvV>^B)fA%p*S=)P^c~rPn464^S4DW2ZkXMtjo_$}ME9RFSm^=&F z2Qa5Ux3xVUi+v~zK!kY9?s;oUG8s98L-xX~&7{*2w1+D(B2j%8^;U!%*3ZVEUZUT= zV92KcgEl|QC>46I>c}&pEuKiP0QySHsL6FCR*7G$f)KyT>j&&Xk0%#kMQ!D6C=lIT z!qat}?I3OraUbT%i$la!z2p(4H`&upNLqaN$q)IWF(pv?ud6&${f_m9?TDjHh$vqg z0@mi>Mi}?;#!Z(6_bKt-QLzh*B?WU$elR!5hAa*R7|gFr-^>}to?g9dd_2mFY%Alr z+iafUzFg1z7rW^4{=MQ}THF080I8Jcp6`3x$v&Cs_S8xcF0eN5WppMk^lNLnv9C@6 zM0>LIvi4Pvi_JWKkF2^{l`6tpmC!P*hs#yoLI$rF(TKwQtG4U!bW&T!8;`$(m&-1G zA)7V#lxD7QUu6_%e@ueM%<+Kb24sA$Op{t%Z}TN@M0y=29%e~{*`f)ZZ>y%G@veH* zq~|O9|Ki%@mpR;vj+WEj2R+$BgQfAdS_~_e9Rzn{oS+p-X>r*fCQk6T6*gAXFPtc$ zeG0U`ZVgqp^BXoyq|>ksk0Qu_I4%Fm#|KP>P~u+mNhVE%`LeGP3ei2=JdbDD3WQLd zgIInOiOqEn$~?~XK-lj_G@{-}k~;$PD9M}6i(+Kh4WQu!zgGElV|l2_QXSJn>mP)& zBtypGcdZdSwbMYtuUlJEw&8ep#b<2A_ex`9?VJ^k98e4UM?oD@y7j$X3Fo*VeSVZ5 z0o5<(bl#&GLeu;LomP5L3*9?Rp}LA@QWJ3lyP+J%)l5u#;xbhUKqMGwrV3S;oDkW5 z??qX7b)M~A%h-MEXoq~BPaMGa>s-vx!bu0kf&FlJ-+)}^Kg0$AeNoO$wj;EGyzOTS z``p)gZk1nqKF1R}5!PJp7d+XSM- zVV8IFMN4WaNrF?H`d4ad$L>itl?bbkA8SO~jz&LWy50?`wA_y2~K3q5`7O^{?O^ro%3 zhC~9;Xgp|-#*+Mmq>VgD8&Z&7Y5>tw}F(fWb>!c z4X^KP0-C3)bDsD~sTdX5VCyxCb(mM&;Fm5W12}If1#RiObR#mi1(@AA=b{$>aC9No z%2r`ZTz1P0GwZ(-g&Zjt3nI|Z!grGf;h>>s)Q zFFxJQ8=RsY;R-LW)pRg@F4TRMEG?ozOwUQ1sWx znkHz~TgREXwzHr%T`{>k`{f(oARZC-{$x%%?4(m*Y?Q}{$!_ZIjz$ES{KNPF5#8Kp zR#wAl-|vX^wl;KV)@A3Uy;-X81fGLiKBUiroEvoCuQBY1($eR|Y0P=)iW}iheLJTa zb!q&XKi3;k>uszZeNg85ceV}Z$*)8wYjx$Y-FxIB+WXWi4=PLg+rPEw#k-3k9HHXE zgjjN_dAk#Om}74^-JL;@3b}uz)iSUaWZHPi&;=ZtoiQM_LXOhyIp#uWgnU5Bv_q#r zqu%3W;({>@u}ox2+EP*_Hn|xh)Z-+}50l%AJ#`Q0d=eKasdb0il~@u5zY5S7nH{#Y zy&82-jtk6>i9Q;s0PH*&d}j36)PcRu&-j{~#XE2|l6M_+4zir_f40P5dwtZ$Ws(XWhO9j`fPe-VJ`O%>)9}@N&EUYoKYdb6{u~P$9KMO| zo{n{h#owPy;A%x1f-Pl!+{B9>1p>;42A}40U)oLBV8z;LS{EeF)RZ>g<8;i`%s)|V z(Coii0+RSAKUVK-Ha|=q5M63XMe_*I4Sz_`_zrOE3&wCd^XL$U<1!)C43)QdPrJxB z7Ruly20kXEZx!emEHR-ozOW+YCI$vJ$2TExvM|W<2^G$VKiNFWuj`+k{GOfmm&YZt8krq$7S(%TMgm8yo_+a zCo}G#8|#}Dna$YMZ8o^^F_XwhjAQKdUfEHkO+W)0Vy!-i=xgx#2qfvPC>xTXm@V8r zN&Vh49H2Z()iq&R6-`y={3OrFgug9`D@)3sozzbFY31|LFQl_KN+_Dy z4tPf6w`eZQA`iqyUthba+}70U^Y?B;tJ;w&5#9oJle?1ttr^B_33@-UGhk$3L->4{ z(ox{cR%$Et@T3-WQ>uKpcz7aaqs-#bYlSFK{->2cWHIu-aW*TE$v;G>IOY2|SN^Y# zie7X-WT|kOoCy9(>i*=scQjf}zFoBz>E1hk&VKCY%COf6oOk(3p~o``o&>OJT*rtS zGx_=ps%3aEU3~XCOyu#_5FLMZF@&;}q)h5OrsgSm4Dub;_khqlpC!rCDss>$O~wt zyW~?U!f!KKo@Z|{DH)RhM;ihBeuX5;D{zmZ7#}F7`r*kGKzq}3^h^FH=|E|s3h!g5 zj_V~zBt9PEwy%e0+q*NpFwIfk2M~DFUsGn*Jx)Ck2tpaBBk|Tqui)RlYC=D{*AobY zc*twef@5%Q$V+NyNE%{i1nAnU(KV$r29*9T8!3~3pu&lvzpU021}cdg1wt2E&;vgX z7{G^$U7{#5n^W$g7BNE=IC?p=8gg)aDEn~66lCaKY0D5SV8N8_TOCoxI*0jfaj9hp z-L|l8{TzCc%Tw%CDN-D;RDm$q6+YL8y@9y+rFziEtJx}q-jemyt#1QbP-~O`&D|P$ z4G4Okok?6m)Q^jr{QP%14dIOz+Id*}aKO{G=U@Wk&49x8mR` z;$?p4^?*5`Kg8zZ`>MfOzq4K&)Ni-^mn7nj?N|{(>ut*q*v0G0{oB}`gHuNtK^v7i zHn8^^Br7Ph8IbW`zt4Xj<+y&hxQsebz7#4xCD{Zjxa#5RoUD*!NDOfZSgv`t<ofrYA&7gLzbCuMQe5VhnT>MVeqcO} z0@m6)mVSU7x5(oot0mz(Oda)W^~%JQJ)8by!VddZR_y_JhLd)lWRm`qvF5j#QEOiJ z%lor6uAoR+n0@7bNu137j3`Q=6*`4!fassZzWNcN`lzkO7XhD|@n zh8k>GAM%^-%7{#T>+@0W<>i&OJdFD7yAo>EK6YJyYIo4)zoi^e8xIDf{be$^J>&w; zy|yo{Zs2cs2hKm;5Nw=^_x1tznUbtN4tvfjso&MfE#A(HJr98HbT1e1kMh60x#XI4 zu(tNinp)pAe#86hhf%hS@6F>1XzsX}V+g$dd4Pj%xnbqgYe&Kz_w^H~n)#ODi!F+c z{_38b@l%AXk+`UiHOWKT5g(TN1LVs_ZCc)ywAVn$D?h@RfZqPW?_jUX0i49v<r{mWlLmcADf(&agOh$ZAfhR~qAt9;04oK`|8!Kujs3jdhHL~NG-rGW$ z4xSHKHIG_fVIp8;{=r86xC5vJCEb#5*!(+VG(K7h#!{{KfFxdVBpQoPvL3bw=aaxB= zI;IMcM@+UDc!2(C$lrp+f21Wq4lALiOBKGmbG2GwVC3wLn-TXr4USHeajr|=4TO-c zrFi*#Fk1WG1g-z%luKd5;mpzbk3P74nKTE~FT2$ZwGc+Fs;+Hfnelncl$$zeaM%hT z&(eOshnDr}jIyR>f!6WkH6%DtpZBh`99R6r7iZ-zFN1~LcTM=KMhHh5Xd!pJW&ElI z`U_{BmGBDO>6-&Wp5@p0HSfi;y2qtzE=c{u4GIzMk1mUze;5rS;dK+>FcnMq_n>xi zP0;X!dF+IF0O_5z4jfmR`cbNk>2IQgo4%Fkophi+Zr2i?c_4L2NRy}aT7Wf{ZGN9( zb8%PXvg1Kwo{IC%p7*KsO6hoaSJ^p#^(>Ezjb0fp3z6^tHmUf~*fJv_fG#@foeXz} zWFF*RIHoK7lMn17@ciAgfVaFW-d|3}>h2QqCA@YjA(v|AKTi6-m&ECIxTm$&>ysog zR1e2*fdOalwv0shBK-StSGU<}d&G2O_w*RJs+|URpLvw>C`x{TB+EyE`{_6umh=GwpW2bATj_0mmDEGW&$v=zBbw>X@G` zF^6)~n!fBb`8N{$ON-HA?4j)l_g|eQAXZ0we{DyyQX|^&pnMY{y}~j1>}?noDSb+E z`-Vw~My_Vf6KFP8{%iifBZW)^3XvD;D+5kf=-PrOP}JlUfs_cvdyJjP>0X33J?&jJ z_|}VWj$KD-Qx}38->-t(rqNwA-*ldJ0Im0}z!sY3U>2T-yQe0`0ft({3)y~)rEepz z-ebDo25iI6+`8@r3>39zI(m=(kWmBV2@csa!fit%VRAz3{n1y0nYbKQzu059NWL4K-z8SVBDnPtx)}{4Gh6 zj_)IPtTSqs?D6{brpt(Prj8A)kS`!*K@m436_^jvcT?rGLSMUp;ITy{i(Qulb3~2ukQ2K)qKr@V5-P96Kvn@I6@LYxqYFKu_-XPx&;Ba7yxA!5LE4h? zUuO5-GxqJGqO_Z>4ppJ|zR3dr9HBkzTedl@HL!mgY=Vy$YT=f}VG%%yFE}fSwWKg4 zUw9h{e${L6LC2+Shu<~->Zmhg^triJ$P4g#$QQjb<*RPLLxaMA2%OLCbH3jlv4s*G zh&YJ+;9B^yp@(X(VYIsHF4t$)=H-I($$vT;4*>HLuZe=WxKA8k-FB1HD~p8B&icQ4 zfRFA(Ug&N&*0k;NU^)Zf))+m?;VqDmn@5xwB&BgH`8)@X$Lc?`58Ej))M- z#HBf{Dh5$Affk0m4w@m>XQ5@AivSy`PQg!z6ep6VmZ>hKlnG1f zjIUMG6}dJ8V`0?=dSw*d>XPcjqD#Q06iFKDVbr8(qU_WY`oJZxeN)(>esJO1ypAOUk6}ul!T;q+z){^LGQFKpT;%JYp~CS zJ>{;Fj6dtz37xbz{hW%%s!M(Y8+63sGiVis*C{fzj(!pb=klWOo^pZx9V{-2ObY!y zBdQ+_DO;pv-gajAh(hj?-BHfJ(|WHfV<|i(pV%|z(7ZSk8(2HjXw>GmcI9Sd2(N5y zlnQT{>abDi>&e5&i>EirKO$_9Y|O9u5}je81$4^~XQ^#zRNFiPLG2tVs=0R}2)on%NZY4a~EEQNLC&dy1Kb&ZfDq!9A>1h&8s?B4hU5un2P4fcSZ0UPU_TYbSy zcxXcKr%CZ;B$Ww{Z7BaX=0DTi-^#GGk6jg^JnXR>Fu?p`p`}Mny-7B6*tp1S9g5vw zT`=Zfh^eL@>Tf~|Hq=V~9g1M5n~z14>mqzH%H%NvZwk)&tb+XS zeS(bduwxvn+fT0lfgi1ryk*+4_I%l1(Z&?AaaaNw#-@SSJ)HBoMMaf46%e+r)r={Ig`` z$

    at`HN!z~CLQqQ&d={y>`Z5l){v>b`CDN@?w!*Jen}V$(lK58yo7vmR(|GBd?C zS{NtpW7bXcEY{Cjru_B=>N$atuvk0k@RsQlmSWcB*X%2zhEfI)@fE%0WJDu;+6Oft zaWk+qp?2dG)=dnQ7`6+PaQ?|h<_n+WhRjk{0z z;#rh&7Ng}R?dS!@llf6&>&mklR#AdEZ_Fi7ofjU&{Vj6tGFfx>cMx36^D5z@yoxM{ zH`SQFlvq?(X5ZNHq)p$%T0#x;2a19fLos3?f8p@NEj>p3;vz>BeLg>qZ{6WkQAjqM zD~spf^nIg5$1mS?%c7X_=6f0n3uSpkk}73=cn_8f?3Wx<9caqEvG9ra!2S3Ac6tV& zf>)cn?ZIxD&eGzN!TM}r-Z(^>lN7>PO%YnMJAYob$iShxi zM@Wa`zuo~KtO&7v%+}!qmLtKX-(k3G7roA4&ET`(@%&Hw+RK9I_aEY4tN&zu zuzW%c*QxwX(>@uI8nO^ynPZ2$_-p4gN=DQ@^PwQSM!-Vkk{j@lT%_}ODPb+c;m)FmAM$LhKeaK+vF zGefw^ys_H$qo6teLmW^r_fuQ#sMXJKL3p%bHlG&_TsbsWWb2i{UAc0x6k{#b6RnOQ z8rNuRt!+YMicJdUJS&^jm}34C;N?2INa5OKmEB_=;Wn;~J31S0a2_!QLp@4)cPM^Q zc=DE5_)61OJWgaPxwQH%OVhtRC-?L;K+Ao{#(DY7A=o4!YyGU8;8DIV^E=3U;bNhB zRA|cejcHJI;#l3CElguttNaAy76{42<@vD$>h0KKp=HtCR^7Ml>@^c?gw zIK!Rq!pFt~8=s-CI-9F6ScrQ+xqo==&_OYpYec)pmbm)s1^eR2Y)LeT8QkL=+;Co; zc)}dwcJ5@0snJMN@*uX+fS80t)kp6#zNpIeWVww3%=YM9{@f?IAhRy?Rde65bGErM za_*`&%`Luv0T+8liyaEsX^(&7ydCK`*4e|{J^O*(fXPdU5$L(hJM&rKz8?KXRBl}N zk6Hy$kG1LH_}bV4dhWAFfWNvrY@DTNU8?UpuVR)z8{+IeZ!DeDHhMrXlO;{ z;kjJbB!tOVZ^zcO$y6EuqO9hzwiEI7%c5r5bPt}`pwbM4QS1p^@jE4MV|kRrMD^_LEPoI@W$-vH2kDCHhCJXEJ6G9FL!-xOw{TIc_J7g_ z@AXU}s;al5!xezUAl|Q|w8L?bPdv`tFnWg*ti&ygO(aJrg_%`@7I9PmXq(5FY&~m}63FS5?QCeU15t+Abam9w#iLt8M|`mK z5m)Q1aol&WJ;Eb_D;L|q7Mm74vJ?6k?QEB=MCUEQ-O|@q_D6G7f;Cdq1_i^55y*5; zKK{&q+No@(y{kc~ayJdK>PdVovfYa_o$(9Rrr)r5PJo|r593dQMA`W@YAw64&ILA1 zpt5r2<7o?{bULSj9s%E>S>}#i!qg6Lg}a~^L_!Yqx`lY;A93vI+KwWYj=(ZXe0YC7 z=*isOn%n79m7cH)8t*p3ovg%u=|?2RQeY?2$|jkjz3c%&PTGZ-!F2%cXS?roPTGOp z@Fm2{9B0~#tlJfrKNIZLfR5?-wi@a78(>?Ad3x&D0zxoJM8&frd;fd+Gp~H8-LdbWq z-8P4eZH8ib=kDpx5D%z4n}5bj*9b6kmfm%JZc3e7aD4mlPmn3BY!~k|riz5n%-}P{ zWJDs1qMv6T)yu!$D3PABTzm6a+js?V-`z{|Nu62+_k2%G`Ou8fCTf;Enh4`b^TXyx z!yU<|54$H~d*K}yi9KHWoL?YW`$P+|0wak@#o!a+n_TxawsXariW)zL>OS$FZM~WY zaU3sD6Yp$vD%kmZqqggRvi8J(tYz11{dh1OH`m&|9IJ?>-rUA;a=gtpsWG}3bP-h> zyZwvYOl8`YJBF}3mi^QQQo`OBb$%F_t-FHLe7hJ|_u$gxd%(A3tjU+HqHnZjeWxPm zdlQJcI5Ee#6~uhmS~{K??_~ZYSHQoucv4n1Q0u?Vq4sP!m6h7*F{|=#Ts#6c?H)6| zZ!_Ct6<`6Wcwi{2F1O_O@#bYhh%v!TOUzR}m9?Q#*av_inwg1Typ+)|(c5qK;24=E zzwG>WeMLl{k|9^wdS;R4#3tYFyGPE!*H8Ii&-4SK`1(~tfA4;UjI;@>vA5%q`0#3E)Pp5$A%Aa0W zkB@#nDXND}XCR8FW%+Y?;Vje{GGd0lW)wZLkK1ut4T)g}_7r>Z!~qqW)ek<%9>lge zUg?TZIPd1T?Zj1c{7akskq>$$t1kihmrfq%Ol1QY?zYjv`Vfv|nmkHSdOB(oFv5|Q#Pt(xSQ1exh;q54B)5MtJBIGc)X zD&PVhomw|ki1UH^3=+CpUD42D&{jQrEame@fP0S$;BSw0tkjj4Yw^Mp3~%yOJ%l*_ zVz(Vm8fA@VNrI75F(ZJ-;WZY=^MpgF5pZ|vOB;U@yE{MS06%?f!{Uwtw&*t%QNnLx zfd@zb|4kRaKT(Q$8S{HG?_8nUgusF}9t7Ihc)FM%ynvXKIaCR(*O6OvXFLs+!u85$ zI;8+KYnbTFaIT&2^?JIm!pijVi9x;Iz_&bZQN8n@gfA_cB%1VR3~`LN`q_A-Ku^@Y z&9t-~8hn^Rf|8h<(!6>9@04aWK&0lE8N0U?$Glj9b@w+-o3Ey;#?L^Cmilt%WoKRq(!djID$WW}Z?4@Om ztc{K7Z$uTidVDIeyl=+g(NwBGnPoluUW(=?i6PqIai51t-P;-oUz2yKF7J#68bdhp z8)X8aYfe&iiGh$}{O;+i5$y8ec9HCZGs1*YmGS3~xNDpF&GyzR!R9rX=3qm9HKm>q z$i26L1XW|qADqXPMdf8D9ot_co#r4R^K<=3-HA_eaeE}FaJm8ri~K0E#s|ydp?1}Z z^m!#0RxvV%4g=(*R;~^J`$o2MK9b2e0>H<#y7~8Rrw8 z4to#T$k$lJQ9<(Y_cqJJjt5em=EQS9i`ds_CH$+lhn*4ZcyjIZgD9zuijGOe0ZoJ2 zsUtp$FnXO*IqQD}+4=2O#et$vk7^uk43Rtu5MH#AwHi%M4aodMTTFNEYxbFPED$dq zfb2WZT_*_dDIUqVqn0WG?u5s%i9aJK*&aj`BE73%i(hM0vL=`91*LK#e9Zxd$#O;+ z=bfKh%vrGH3T4rsIS8{aw}78{sS4YgV|;v&XY$|*2JGQ%n7sf310dZ=Ow103?Du1= zQi5e`gy{E2XokWEAs7~>`?nEg^Cbsju{oR$hS^0^Kj}2(WeU9-C2e%TQUyPAc(|z@ zsy8N8g#=uAUZuDVgtAs~PoEYHHPl$riuoA6gV z<)*t!a44`-^!RWhnu4P+EtcdhGt!p)GDkyJvR%^Q_cbL$ZcI%psH&MZ$p&hEDNE?l zTbu8mTuNCh`h09q>N>rrHo?!<7uaTTiyPrcI`o01o5aLiXUvJEF?q1RAU+c5N|T+h zgejVIkcyrvtc4l^7|H(k-Ab~4OIf}#8jJqd9gVhacpN-kY&4Ox;tf zlRu=Gb7Nol-91eZx{@46l=<8Ed@bSv6NzfFywp}wmloF%i4pi7`+S7h&d!~ukPwh! zUV-~v;MNL%(|l9<2rtEmnaf9$({LSm5!TW0V3f zEefO>-=Jvgu$+&%pFGhp&EUdN$;p>=-}T+${Vki7munfVxrE7E@Am@;nI*IO`^$6V zt~Z!^Kg-6&&#cy0kJ4{A}blA#W_Nz^CZB2wGK9K_htVMJeGavWKAnyJ;=)(vYJq@ z!y}MvAB3R2r&gp%K23!>*+n}Nm@(*##kmRCsQWjH(lVx^eNo)X++JAl>oTE z7?n}Bz|_9U(%^+@-F(NlpUbi5CpGpC1H)k_1X)6la`is(UUoNjWUMvN0n$uJN}E_7 zGGe$&8Mt=b)!RhZZ@}7W-44kKwjPX$j~^%_oN6lB*+vzF z_llJU6lqPrPO4jsQBOJI0Iud!yOW05CbH`V9#yhm6)yBx+HuU|h>z;X!-z~p{7bY9 z5XqMaXE}U5WfU9&KB@Uwooj+Vo1>>exAS+LE%#28z{QC1@!y(g8r-=L_o6>71{)a* zA?wOdWzkOYvE3qRPO`Vmi&?Ge<}xP5l}TrlUb@iSKT`c)4nnRnrwxQZEzjfBxoPz^ zY>&$SNvs1b4GAqR#0FrlF~;*Z7NQ)AT29v&Airs@d`&UTHW9(XN;qunxy2Q_7tM}nyEAAX5W zF08s|)ETQ|Ulj&8tQjb9*1ubQSk!5})$L>F#TeP6n*2>=F6Q~K>Who~zjX>A+%|ph zM%#tU*xv{n9wsP1(}L=;FXpoL#EOO2;t;xK%T@(2b;&a@Wc*=aJDav}Q5#3Dpty6e zeE}Noc|FTu9U^)1YwNr0er|wl0|wK_;UvWiK>^MqYYVnqJ9;dXX+FFZGlA*|}kg4i^&HH@jj<#B39 z-w;hIw(FC)Y$jt3Z9-00nWaM9{fl@77=heB1NAbHK4-z#O2?_?auQfR@ACfsj8dSX zuGQg}`8Pr*n~DVZUJge0Y4G@fef(u-q;$!TX0SY(>eT##Q>4cO{U^U)Zo-{uyQoj- zF4#zH&onFy{tq5O;l3!W73amXdDVB}qhNxSBvthCuYwA7lBDRQg_B5G{mj=RtJJJt zl;V#}IQyy!WK{LG<-%YbMpm1po3~$Mo9$$KX0^HeMB!}xkiHbskJxwE9!+EE%8Yo% z`exBsW{;~m(w<&FMX|c+q<*gs&xiM{h}6#%!k*P0UJN6!wjxJjdKBLOYW)WNo?9#y z$P&#LF|!q77CYh9;%vXF1(!KDB~Y*-Y;qY9zaw~)wiw?dHjHTEWaXlEic=;c62;!V z+pbOAmEE3h1%;kR?WGV=fh;h z;R@#De?x{i@0G&hk{||_?zLkU^o`eN@!Gn099OP5U+HV{c`VU9LApiL!eWFXkRja? z^>S2BCsh=#;`n6Zpc1K-crB-ujkglLU2|W8K0JR;x}q@^F|9vyU960^O=E;eAbaV` zh)7h93ejh9Hn!1zi2BpZV=;Mkc|O=XAtIqz7Ux-0SX>gs;H8g%Wuv$}Fy13RzKvJe zqdY5kdtXPl{t(InSx>|Z@W@r_5zcPWC_-38T)t-F6^U%T314j8felW6IdK|K7~=$O zv3VGyyZ6~iuYGOjv~7eEyYb-(XN=PmhhDoQQLT)MM#YL$7Rw{Sy3f=<+U{N-dU-51 zuRhPmGX?W3tSv`;du^Yhd7m%v`9|EZ0}g_{R*4bJd`Xsk`bO4We<?gg`bz6Vb7$(;!?agyz~){ls!^rhFSmKeOt`YTOsbP zFfSG!@sqXqRlM=D7GC>R{a^d$!VsHI`B$R&JVyLJo7w()Hn(up`(0E#-%|ehg7(*OMu7q*0l5FwHkE}MAUs8hpV2n)u z=o9-jTA9VNNH5=_;uGtCMb5<9>yzjg4*x!2iq9hia}T#YZaSv;ZJ))fGX&xZ`w)o6 zghd|}EBl|+9`F0b;wqMC{zV==hS~||>{rj7rBkKI1vb%S%F3~J_WI@s)r#?;ux7AH z{>s(nQK(NRK1(D5JIM{zc$k$#Bs{r<<4jmQ@zuxIa##fwdj#BqXNoQx>;NAg?s zz5+il+Vq?G>wk8C^b+ceC7K@q+v+eYkY@1qHDAe9@fUH283wh9+A>m}!F=|FVuR-z-SiPP3W25HuY5xjCowrQ}qB$r1Y$cPQ&tXMsYt@mu*BkhiC{C>xj4bPYR z%zNp<^P_mN_3&b3ZDMtJwoGu zgFYBX#k1s?@VEl>d7a;}wvO10;`#aw!R*EITfAC4zsc=((L;U#XTI-wtpYEe!B>ms zSH+6gT3nfn7eM3D301?>^qFu&ft!gYx~Ok@6Z$A4tI4*m=&R?B!umjcmwwMS%+?b> zu8_)j{TsE5)z26els!=F9yzXNrfoetudip~?%n4{5Vgz8n`sl`J>#c25!1Wz;|OWI zTW3V>qtI{4@X!zZ^}d#Fv0$vH2AEy(eRb^QbJf1)PSJ*5U6v8k$i@>E;*^WpDNdQQ z3<+y5J=2RDVLqajMJ8rEAwzv-WBf%)ppwxwt5^|58D(JHC<8EgFYcn{E7H%gTE3N2241fSj>^C62`2vyb|g;rYY+Tkz8H zSt0ad^J0-s-aCN(+3SmMq@6AdcwLJODF%g==ITT+(!iHZ*er%BW0ACSHAa59iex>k22FPguUCy zNS}}RS;V~3Ug;ja6=wTw8jJ5{Jqd5j`wU4jBkhPL(rAL~tr|y+Os+l7)c=$%8UTtb z)(6qO=+$vVTplU&EY8F>QqJp7?;ec!tO)F9pD!eeCCX#4ewg*KcpmJ|u(Wq%3Fz-; z-Thz2nfqM4$#RsLea$0iJUYRu%Oi1~jVG#;O}f*a57^>%0;hFBx;=OIH4~Un&@?T3 zW{U=cm7nfwfcfm90`*AQE4d<$k+LKGI0F76RPfUA`5^RS8)+XSdajNz5=XBsB651H z_$CH=^E6t=*}CW!jH$1nI~&2`-5^iQVg$O4fii06bHqcv7uH-%5KWw;F4b;E5J#pX zli(wX`s7Nyubxwm_QQxka77jnJy#?39BqT-vS)?s3|H1S;v?!muir=felqMm`Brpm z#LN?M_WO>X!Oh(qy`_7(2o=kV#Q^KcxsbEpyiu(JpY-)8X2dV!Wbs1eClVZt-eeoq zg;c++*mEOjtmyG<7_42r*cImc>}qol7B6yz5VeB#tS{veKILFPj^O!qe*yB+@wp)M z?yDDz(#uC!eX~B4qvhU(XYM0DBC?N^5$W$aMpW47H)d%0o6M{tPcj$c;!Rni`Ga`q zhXF5UB-9}rOfazWB#AQf%fUk@;=wpH25*bTEUwrBSRY%M;9(q%lYxTw$ngk9{YHJ( z>+eSs#den8Zky8krQscM7ieFQ-wTzN=O+C1~1ibmYN;v{x-g14f> zo}b;h1MKuRY2m1?z7z)2^tmyngn4yTAB&>G(Vxz>7ucLb>1oHI=SM`zQ5k46+0?A^->-k{9rS!W~)=Q_%*iOP?_n29o zeO0cE-+Sl1I@m8fBJuqldDkPnSVnN$N1mCZ^&Bm?_)ONy@!|+eG`|VXobs#8#&nf< zjV3>D@;ypamrVA7^)(gejI9wGQ626U4SvkpIh2`DH6*+!#z1_xA-*Ho&PYd`Y>R`*$H5z_*FI*I`PjsndGQ@ z8mr-`06AK2l#$1;*EZyc2>mUN#M$eQkv_GsUvxy|p{vZV#*zCVC;Fjx4;RlzzgF(- z*UOzPzxXWH)9_1-d_%>E&7+`olcY0@h=CCs#v>=O-o)C=w^S>>owhQ+N5w%1_+%n1 zs(0j`9l1ZRES`TOwrABha<6)^^zwg$k#>D5x2p&92Qjm^SZ!y@C_htw&}8w=EYbWR zsOWUCmPfwpd9;KTGe_!q6lWtjTYiLI9W$a}X0oP&m6Z4PHJ5$m9Y0KvKN{AK5m;M( zlQZ%3`e5W2khA>8y|;L6WPQW>`nTi%MqWX5pApGQw2Hj`T=s&oo{A4=WJ2k!aJ~W~ z?HJ`Znmg0SOc>0<1jiIlSZ$UQasI~2E^;=8qivU<@7aA4Y47JKBQbihyb{lj@!9pg z0`GvXY|$L7~ghhMpmVx4+<_8OEh1=6Xv!l zp7CKoWwfSIJDFUSwOlO#j>ORu2)%sEsF)n}$?RsfXt=AG7ckmZk4Fnx^?y|zXWPqg z?~j*$0cZQe8>-Iq&)JxIxc&SKyuvn#XLF?Y&x++}8^@AS-^IGyZ^W~Q$7o;n5kV;@ z$|188<7M>*1M3y^;*5l?m*)wSE`xm>-HVyJujtz=#qE{8EFBP`K8NxIRYwZrj|HxjOvF{^qqKJ;P014S4kZbobvk>IefJ9%Uk zsaIV;KdzI-6qQj?71=zK(fc76$81IKi1?kcJ<65sI}3aMuja~rywukV-G{~R60IUf zd5iC4JrQ5P$mG~t;d~S$f-15JvVN6bpZ6y1D+L0>^WTe`33v(oDbYPddVO;S6vmGh z$ctiF0us`iD#+LP0$66?C_E`sCx{GJ>aO@d!r5>F5gZj1YNs zUb!i3((Q>$M(^HtvZ(=!ZI)0VUEu!+VN7qzXq%$<`ilE42cO@oiQ2h%F|K*+9?r;i zjGOcY@nYezL~}rT@YG_rUR*tYT>W9dnVy)jogwneTFXQVOQVGka757bZWE1{Fk1Jh zU4*x)+4J3ND>B;lci@xSA_MnY25lH;`s!$%-_GsUzMMZK?epnNq7h-f_+0u=$YP4o zRpO&O*84FuCKN?pdc=h3TW~}G^j4&!Umh?|>z}y?=;KOe;`kJ1o`I-;rUl`weP$-! z-{g_c>EiQ<#BP+QtUq?LkR_Twi(tNW>52U4gNQwGhp72TxyU9G7K~YY59a2G?`iSl ztnNnQW~7c08xbzPSUfW0bC9Twiw*Byc)X+7yz;qX&(u5i$ztcHy`_cd>*hwp@>~7Y zmc_$aqWMd(lY%GoBB5F_YS&@J&4`Ux0jrT~OxD4EbS7f%&o()^ofAyGOjVmAX zh)CQ-E6j)g#P;GVSWm|ZA~7oi`H$u|KMZ&^vrS?4R|#M?Nix^0zj`rrvO`A1>L^X@ z#5WTV%1A8i9(@Yz899U3pV2*FH1~B9FOFB>m1A4H1|wfZw^&51C+J1#?KS>Hj<)z{ zIdMe9tPnX%PdqXK#^P4IJXVht8myjI<5Oc~_vYCgiJQ?AudmS7#b*$$7|-%E@ZHRd z#S+b#$FBk!Za-A*yi0^bsOcPY`-MQV6hEnB9>WdMnZ+Xe>wSA0_$) zgY^Y6^IRzDh4(nWYFzIOdyd$* zM*NOG^GwVuBlVo&s8GF{--sjXcSdwSuZsWC_xmiYol(CmUWaFX^P7re@4K13^u_11 z?)*g@5k$}6>JI}xiYUw=i%!yP5@h~K($is+coz~l>xUy8isu5@{Tb!AVpe{;{!iiR ze!S|PSX@W+zlX|zi9>t8+188btK`;7@}fukL@i#1qaOx5R%#3;NUtP{{fw|0g|&|j z^lXABX2bq0o$QdFP+)!7D^oFJn;G@bVjG3sk7sbU-ZO1}CZqST$Gf!m)JwQ{JD9j0 z<7m0XyRz>1n{vgN{x%aBz=SAk3Tqz|tjyoDVX<16IE&(r@@5$IGrLvb5wJdb6zNGH zMw}L_j(v0=pV5v-Gu=;b#3#4ynM5nhi^V8QG(Ui&E5zc6zbo-3&tA;Yo@zxcQ~+vS znBMm^X2UpI4q+mYO`*%+A6D{w!JttN$>axEZ~+D!pGGdOSnSUgiHxTiNsZ z+l=1h8JJJ@&b<>SZu?@8QGtAXg?aIf9z!cy16Bn z7E3h0JduF+bK<;Wc|?C$0o^-ZmEJEVSMm;Gm@yjn+4ugHpOa5u zWN&icVuy)amKL(Uqxq{@cmD-Bsudm~GAtv%AgG1L;(Zu!1|~2gnE8>(jfoRB8MBF( z*|8Xyod+w=P@fprXnC2mMOeRCX4?FT9C-&8@5}7?^@$vP=11lnixt_owB*g=dcN|h zntc&piKDT<+J^zve5M>ToorSG6^4WUm>G-ZtU&Db4+>*O6ho9}q4f-wJp=30Z(#Jk zybF)KkDu08?+hI$UX{msx55G;;Qg5AS~!FfK; zJa@fk?l(Bop2hF*YWFPKw(*m{F=Gth&*F1gcl`;}tH`f0``dxc3X({mTb?x#M$tqu zuyQ?N$^5YuQzj-@S!QQpBHYr+ru6DmMnov~7i*&@)bLsR8dma}TGkBjC zF)7`KpZVXW`*m_N-*LD2XgW{I!a_yEFA#0zhz6A$ zp)kyeLkyZ#u==b>nrh38ZHCqVD6STGQ+=~|3X#BH^zq(DFC7`RJI%zqmnO`kas4QE zuX0b|=r)YSVwCm7yeJPCOQx9}&}QuwEjLnJZJ2;!6FB=thnB?zr)&@Eo5V%TTx`FN zPLf*ZNE>R=KIXsTNSVxReXM`qfme%r^f|hMS8MxXjH`d?eIz4$kGreM1Kifv&3!#z z{{+l@(9bgSr?ekUG$%!QmvM0=Gb_>TF0gWJ;$|YB`LnPxOn?xxu5SzT=`rGWR-Af_ z)MXi&c(00WaUJWPEFxycr!$O*;UhfC@8a|MdeM9ZBU=_mi2RK1HU30KTFyi$7QOwWSd>sMwb-rn;Sy~vLbtN$}qv*`$dP<)0>p)eZ^JQ)9J;^`s6qG?S2~J9b)_j zK0%!K#+}8Ez1wy#GuxKY+v~jcF)u9ZX?S5?VT@!0btKr2h+hVZ>WDKUj<>I+x5~#R zW#YP`mp=q?(i6Qj)}RctrvyHF{U@Cm-jP=o%)R^h3ishm3}?!Ej6A=;2^+J%ji1R| zbd#CyWUg6TH@=r8njNlOZG8q&v{Bx>plx6xS79QBBvH}8(r94=o1EF?W$jqL#l~UJ zkL-Qcddn(5iTB-M_xxR1_viij#Cy2d=&eXEzJv7?3~=-tHjWUj;=Z(ye{yJ1b!_5d zcaTl!B&iE4!+cvjL3|X}zDIJTzLC{BcJF%h`uaDxI;N4nTg-9f8D3lmdqsNh&7%d& zu@&SaWft$sqo2W#<6Q>Y-r%Fy_KcRX%=AZD@zkIBM6Zu*?NA>q4(5lok%?C8kNIY0 zdMm(31R+wbT3_N1Q#KCAdbFJ3NZnpLeuJmR;`9}JX0PPPJzDTF=}Mk?U)UJvQwBW2K;{`Z6_(ZGH5x@0ez*$gKkGNrVkt8Z`S(=53)ZQe;>bBT?>&v#I z=fl!#Lqyb;Gkz_s53hpV`)6}BhN$lsKEK&-SG^Oz$-&33HzsnbB$D5Q*R#jN^4}4+9i;DPVfSxwo}SQq z<$iacx5c6`_x!di%!@_L63q|5(^*%4?Hm$$jPiOMT?u~{O!z7+i`ne%{{aO8k&|RQ#X_D(SyCS$yhh^KaI@cujiaN)LR0g}?3%teoY@`_IO}cjBs5 z=_Rzknn@mTL4 zZp-w7?bXvMei^K7BY1)j+r|3Et&{YLrT5FnS-dt~O-hfi>(PBR3qBVfkM5VnIC?MK z_jOT(@z2`Fya-sL`GXmqv?_r&SjI9k5Fhb7g1U|Tv#iKooHD(3vN9HLU$ZS&twfs) z&*o}DH7ban#hG||_xLQ2_TR46v*gi&u%3!HCt8(` zc-A*)ocAzCG|019ygkDu4HE!X#xl^&m-8}{t|RJ{s|7#fQ7gfZ@cG-E`2}S$&&#~0 zzrdC65AHFJ_Aaw+7H7oq?dI3D_)LyJEsIO(iLZC#NPDzMZ(s9>>obEgoy?3sCiZ6b zDtor>2mMAM?d^%6={lS;yEXPyVk)gt_gwk_VDBhM6j7Z>A1;@X3W?!|Yp zo`5&tz<5eISu@t?q1k#j^`FFu#E&(lX^wL|5Rd)!iy5rx`KRo6u$jX|;XBmfcTXSggDDQE_2lTEc z8n}-{i(4;L#FXp&a|AZgvv|8gsgv*RRel7vu4k`CPPeTS-?QUiEL=M8_~Jaj-NkIX z1&ZaPqI>cAEYU3Tpsg3LL01T7s@3zsGFO74coY=Z5zL0Qwca<}GV`=}TQEFcCV)wp9rt`v^blf*GCa+wYlX;pB%jh&wNfkmEZ2e zqxG|Lv(MhZR3gHMsF$W%afZFrx7(6W-^jY_AHXvNw#U)Bk52BhM1y%RhMrKJnOJNb z)z*qVdAKLftVU~nY@+mHyo3w=T^`$$dH47i&w)KBqhrLSJgL&&csxtndyB<+mS|qQ zJUV9M77qP6w4zNWAO;iJRT9a!c-t;!8I5<8%l(~bo5$QQA>+1-#cwb&E;L2=DsS$9C|@g@k8Ue?B+;M}WHrp#eln4G zWPQ||3?hGs_3v%L@K&Xx=fGmi&#clulCY01j`5qt)#APBjWt&?@;Q&I@P;lg{Yu!k zV$86F^kRgs70rw1GBRkg72hi;+d7EI>P;lQ$!+HQnvc+{KVr1(sNFMo74iQF*z@P{ z$^GzduzPXkJ9A{*yR!a8%@WUxh$WgAm(dfT9tY-(eJe)(d8J@wlUS8R@;&V2=6%p^ zwBKHBqC6B25g=!n5uzW%i?^A*KggkH=S#VAYYzkX_bpj!%esBYZJXUT`@{^^Gd;!# zSSF%+~hHP}gqpsV_$=B2~ z_|EqLRY0iX8+)r+CJA{WR!Mqt4qJw*>Zl$tZ+&5P+h9AGaqElQZrknY6{g$G^h1Ly z?)ysRmF9b%X5B<(#h^KNs?aT3k{=!MO8W;+R5TW8d5Pi6jJh~P1=3#r9$-(p=eajs zH=qh@f9YtfvuWU{yB#SWZr^H4+BuOH+h5rC_B_`dhCgJEdkrOK^Td{RaHxCnk8Fo$ zzG;9LL^n8(Y8o^?2-p(T=B$?QrTgAysfcZ&?CBh{UZ(qvX?`0b&yhqG#Gskdk--Vo zU4;AS_Lk@@T9qg2A`mg#D&3wR@5Rzq@Lm*g)+dkPAxKf$67<1_?8)N2);uMYPSkmq zs7M$zSA@;p-Y~ksoGG1Z+d;BUW>3DbUeBni;;ygvBC2x-jW9`q9^JA*`E=W8EUkJA zBJOsJ{Gbpup9&%Fc_S&){mvwRPOC&zC=8k@GjUJ4wk|;0!FE6Z=}P0vfV%ZWwatdG z?PPM1wIMQyRLHuGQr^qYQ`o*kO@SYxEgsuZZ$sF8lVi?in{DVTR&%I=7&P~wuoGr4 zPz5!rpf#-vT9ho`AJw)n6|`+s+cYaS)+>&@mK#^u+DpO5n~MBzn@L$9{gYA3)f=m6 zghXAppQE0_cfY{08ggNiX`mFAzwm4CX<*PV1A5mX=nfiT!h)K>9(YB1SUtH(xlLKF zv*XkfFVCchPYOGZl1jQ>l5ybH!vc@-9uT%q_wZ(+oH1yws3M(IvN-X(izwrl0c`{& zx`Bv|Wo0c%Fqy^rX0Z$^4&7s|id5?!bJ60Tvd9{XhpkT$jxCpIThiJlarH42 zB2C;=sBmlshc5Gzx_*EXRJS*vGO4dQYJ4+w4-cJB~DhWgF|4w=|C1 zyj9_SiNkwN3p&3^6@2@Nx-e*_T*SS=#w^wrw%n+TgEugY${QxE4PIIHa3e|JTOvsU z-Xvx7(hKit-sC=!^thGvA>zEJ%5TE7yipn1&Ewv2 zn&)+%zo{x1H1~+8lUx)hG^8yr)mlYuE8lF-3!U4}g$WBT!!D}ci(ip@Ep4dU`f0CE zNWQTBCM!|LOj5Sj(RO`B67^Pu&G+q(G0tH&FuSnv@35>dZL0R_oY&Hzvma&Io;Ig0 zQ>ceAXfCk6l3ir7rgM@FqkDl$x*Q$4Z9xfx4=Ns${Vgk|ZBpe|r4>co<2LN{llA&W z1=(@gsDmgA44QM7?McrD)rpg$#l2{jN!U8tzA)jl)bQHCM~vu?If3k zBxP-LG>$08iOxgS#h{sTSHx3L7QM@)VEJNRG&Td~H0cIal{ro_UJu*bP5b?l2_Cw) zn+s}tKys*{x>QW^5~YPfGxfYU=VD)(I2GhTURaCxVZ~Hgg3#D1vVKW=Q;V{nCRvB9 zxThj{$Dpj*F3&MxY@arjw>>4YtY?E}ju$SkyiSce!%}pExT5x&crUI+ZKI^S&GS~4 zc9I>o51*_8UlqA*`P$3z{2E{oopUKs5%p})OeEPpk5~P|VA8AP(&{ygQE$;@9WaLn zHNo>tgat*WY_&;;);_2~w%O+KZnG{EwziGSX|0RXdhWEIn~M93w6gbEz9uropqVH{ zSnyF+@?vjW9@{MIpwvX{wndb)9pJcZ?;m;W4@t#-&oW@^eUA#vqn2ayLsOWjcA^!K zo6`Bw6C#O0GgX>9h8w{3}>H3D9gM#+eurk%xxmtAHW=_7Qp246QK&>E~ zp-+9@qKuiG4o&iwo#{n7NSfO$=;EKXqO>C|Hve-IwqK>Wue4cQ7aiVh7u5r;)3mVd z2aRQP30bJ>eODx9D(-k^SJLv-TZ$1aR)qJC9NyDZ&Ge*2sZ*W&bs1lTD4vL5AV}T; zYu?LGA}RngRh46<4C~>Z(&X*tvXJ0(8Yt@6Bagtf;neIbSEG)weJyO;2fbfpm&WO$aDw(Jxj)I*E}Q#SP+PLVo@WYE zhIl16-X3D_5DsoM%2SOebuCr`SWQ_jD{nd&Y=n-*3_`?Z_FlV9d_ zm)9;^>s*rB%ktITJVa_WZ=Iboea(dS^S)Z=km{>7>vyx%;P{qbYc0R|x;d}Cysq+2 ztBilXTh>kQt2w^*xMkgZ-p5W`I&Jm_<=*$9`MUdbp-O|OM@9R?XF&bByzhr?sRYX! zb%q5sVF8v5_N1u!FbIso+Tn^?o@zaV%Ba$18&vhl-Bk6S%6jCoWDqJhk+*!%m}a+5 zZ(Z(FZ$5V&-2CmwcDl&dD%+V~>uPVqsdctZ>&Ho2PvM}Gzj>eKnr|7+Jk5F?@xvxg zYkfL-M4J1$^}OE7*zg3z&Ag7M?q+!FI6%EQr&Wj3YNykD-kO|Rqg7wM`PzL}YqauA zp@9Y(sKaSJHk>*f)X_i#jx&Y2)12oxbu^qQI8JNHt>?{_)ZsV|)~@?bYwH!u&wu*= zbbp}{!07Dxxc7^HCX?H?y#0H8@ZK8$faT|3f}3u=PiC>I(P-fPEw5qko^3dJ@&xA0 zS%C9atisBR))?hUOaJOCZu+iFtdhMS>~BB!2f<06cO=Q_EQC- z?bn`}zP9_y1h*BQ`Mz1L7c#gFOcV2T)7r1y461oSuUo;ZZ(cxtZCdsqUN`0XH;u`oTvr1GmeJi{n%uY zB4AT##Uug3>Ij}E1Ht5U>I=@(eR+2UmGP&m-kz1#h>y_nQ-t^{kbzPl& zo%wE>y6*0L-2paQ`?5@H#jY*#<8L#6_xt0oM?QMVGXO} z>2WMte4cimv}kws5V=&n%vs86@wz=~R1T^hL{rwrEho?&tYoLC$AtZW-yU@k9#7o& zUi)ne$r$IocYBn>czdQz#3+)CXr!vww#bI24g02AUmtdV`Y|rK^ctDfr@wyyL(_)Q z-#;K{S$FWj9vnKj7oWfT>sY*G1!m5gjit*k#O-%}6(4PV8z;xdwDP2hL36J3Po^@b z>{TWz8|_Pu#em2SdUXR|Z+_h}v011;EI`XLuncR5E6er-$~^K?Gu;-t`E}lhBy=~Q z(~3DAPay5S&O)sg$iHTEq{ncmj)Du6#FMsxZJpatk zu;t#9L!RaeVd#!ehRif5ku32L<(ZoK7Q+;!hKv0~-r*!0Fr*!J-jnLX5*iBny{ zuxn`AbWBc8Xyr*0gXW6rKD7n&j%SW5Drk=@om#6U=!2nN74zZtK7p30K0d6j9Onm7B9U(&NBA; ztLw4i!qvF$#xG#r{BtofIu{pQxEgod^)0mobzw1RCM_I8T@Gp9UM&qqm#V4;D^*>u5Je3<;|$4>L1j^?wt3L{##yB- zf@vpmA>H#$&N00ZJRdr^7vm?6Va3YTa+a|Z$B&@VXy7-$`UgDr$Pc=v9oyc+$&<%1 ze&Q&ee)7ld>DbYO_-N~<_Uo6Qf2>(ytrqwmH=IT@$k)k}BHpJNuzsIr`IZGO*PBz` zkwOl42&)r1`9*@S6=J4u{aUkp>mVx^%Ws$WwbwH8NeGI#&bLZZ~ z?qjEKtX_JC8+Nh4nwj;w3AvYV~!# z^pCb~!oEE_aK{(^*q06fPd)J?Tz%~wIC0`wWS(=EtdO&;F}hw+Fd4MEWN=$_s(?8u zRgi6it@h<1%eLzTu4$10M`DVgrqm49M;Y{G#Ad)8CC~NDn+(8huu-M%`wzpsCi2=Z zbjCpIs@KmLPiLn7u05??_fX^%X8gn$KHIw!7p=Nd&T0$l#Z{R#Yc^($%)!SWb~-0r z$B!SuuYdVNe70|=oE2#9ymN5)&^}C_@qd|be0&Ti$B$!l_I#~8X=2cvfVY=fM^Io* z)yH=}SY8*y+!+MSX_7ssY0G+ffiz-+q#pv3mQNz-vZKm}ZN9L1ap=TxIv+T^!!P0l z!(|`7@zK^zSh8#-X3Q9ovj70wKY0(&J^e2-In<4}+>5R6y@|J8e*s4h@5iZAC$M|h zM|k=9$FOwyML2iy`Lal$1q+v8@zM+M;&Z>ifzLk0sZ-x8hRFm^q@A zCrxHiA8~_4u(5qqy|8h6t78@`gt+Tmc|{4jC{u+AwsWEzuIc7;dGm*rjS8YAogh|6 zk~>*AwXiix&ZJisKy!#kf+>l~$urow{e3I9ne!T*JrDPM@z2m`)UojoPvhw)e}a#; zZo*a9-hr#HyF+FN0IXQK8VeRKk;wpnn{K@iOP61SEt@ys=_h}Tci-87^Dej)*WYxP zQJ%DLOfz6Krr9@qK{1{gB2WujW|L>0m?iUem-MGZ=JzCY&-1p?o9=lY(pGqu?+cn+ z`E;944dcDi4CIK z;EGya(7FbdQ>DwcDC<w#iz-k7;g>VQ!9HZou=r9mqDc z$29-wA1;$gM*ixr-_&gUFmRV5azj0=+z>v6mHr3>;LHK}{G% zpi~+ew_OH#rgQ>kTTJ%@)w=2IZ*i%XmsH$3y#aF^@&kg346;@GLR9fz{4r>zHt)_*#=thsCI@Ygqz6z@dXkd{SFlt^&_z6w zg=MEAVY^~)j{>r>e|YKESEX&JD=O$!3ENJ(^=0`XD@;L}K^2trnoolF)MC4bwv5v1 zMGp#MZHPK3lJxdQ)vaQ@ycD-hp=kzDnJHR(1l^!Bif%xag(9`Z2Ak`n`z1VGLDdDN z=P9UnI4C_Wjx&{LqWs0VhF6M>+sWw+>(I%Qg*01Xx+PWlRl%@n;BA`UCht9(5wj;b z$L1^9>OIm80K$5_B3TLq6LD%*+M%-@bhl}l*$VE%=-fHOv>kc8H#+-_E*WIoIuF<) zzv!nc>pO{}`$1UUX>K0dbq5C8w(r?2 z?}lMIQSOpNepGU%x0}-*_Mn@uMU`DQEsTx)TH}dT1wA5WE6Htb_*SJZ=wca^?#km| z)@cN_K#KKh%4J&$d9^{cpQ+jsH`r9w6-DDrk(j&Q?ME@+Hra!1x;@iwUwTZ}R8Orj zm1v^;F=#fxjn&PxXFQMKFKU?)v)lZ?z-Jftt!~yYTSjM)6cRXUe6(}Tw}za)F2%gppb%z)CKOas6K%Q7je+MjxLpHXg$3{D+U!!VMz z!HHUc2Ji3<2WCO2$=K*1wW%|SCdyyZ>v-ka`0GQD#~T2!q_lI9AV7beNOEyon= z^d!qXaoU|lFs-^?nFKWy&g62e3W{t}z1L|mS?{c*y?x6dD!`4H9Vl)&qM}F=BTxwM zPzv2)6uSBHpgkNwH(y3{KO1OfOH8*tt}Fs#m85}#PC#wCj3NeDHrQS-oo%0#>3df- z(LrT#w@(&de6&sP80mgf^vY#O{#c3WM7it9pgFDJRIgUOTv-a*3FH`R$#grK28_CN zstsPpU|IodSOw9u$xz`gf(cb^eagmG0I6}NNL{Rb$fTFegl+$DXl^Pszlb@NqCZE7;nMER4~YbuGTUf!g^ zr3urW$TYt$TfwI3wv+24+o9EC9m4-b#OjF?95iAEokfvW+Y<$q8Tabh+6Joq$5!32 zuuanz_MR2F?K?`@VWUhZI>#)Zdw|G0%+R@PSU`- zSLs}MizaTHRl#8%iqeiMi5eqaL`4qB3rpTY&UB*O*}nFZC25|HihSn`8{*a*bufel zwo!M^kaf%XQq+8C=CLWPM=OZ#g*8ba7B>jZLz&vzi<0bzLE;=YUU}^^N!zU>LfG_zGkP#_zW9wlx$DM`Rm z^x+yw+m~e9@%Gxe+-%xqJ~0LN!%SE$*>ej72IkE z>Kfd2lwSf2TZHdNOoB27rMJl0ay?~FvCLl;wu7B8NdnWfWYwmq?Hn~fOKENsW!)Ad zv%Gsi-S;u;W+=C-LelNy{Q;6J*!a;BZF0DU=|s7U8#9q*HiJ+}w`Ttr&U8z43k)(- z+~LBOX+j3JQpD`kgbfWzOCG(OHkO&RSJxI>?Xa;;bcFq@+?7>ZbQP^VQM~On{SafC zzl>}gFGVJMj!h@ZUs^E?AQ`;NU{|(JmiLlnU2+*om|moU z0;{MCdenR`TY-?Rpw(1f%O(4C_FH*K*xG-SkZmf3Qa0L<>^U}_D0gAkYzk0w^4)B* zS31vAbl8>%YggDjU14>YesEB&hrj3DGhCySY@N-3xXf$@9&QkuW+0o^GIY0tPH>l% zBDICog7#D0{mr(dLpsW$)@US}D1T{Q|H+ahLnWl5+&LqRDsYV3?4TXotuAJ@KDO_i zQC3mGQq+7YjSILpxQ%-Wl6AzbCrhT=K22fUE2y18>2ayP1enJDM&u)Vj!h>^-rV>+ zUReKgnM@kw^_(c4kn2rYz#BGCmnz7Xx*m*se5~20v*BGBWtp znX;1hy7vr=hgaH4)KshbYRz+3pW;8MX{%)!2FW1Ubh6;!fj!u{{R3Qg(_L~FX~=MI z=}mD?0OlpqqY6mltWzASrKr+eVe@pT0(kHGD`p3hc~x}>@doy~ky*`&eNwUxAV zpXAdPwnXonpZA?JLW&vF4K!V0?FtjO97JGTBuN7>o$@+)BvpV^Wo2F8IPYzl^vc-V zELD4t5vI;2n-Y3=^Q#yfoQ8`oxk}C=O-Zi%6hJ5F3=1x+&UDpPL9imJOVrLCR!5vK z0m}E(WY|SmTU^1whNDLg;G?Z?VdC^jJod=< z@$1L_9`C-h0gi

    |PQU15gRb^OGvTOiS3#6Solh<zx47G|i1J())9vmm@6l(@_PI=_KAr#C<{@so=t0bzzX$_^Ls)puQrvpSm$7sERvbTmL>8d{I{PhEL~6I2OIWRG@v!`HS5Z|i z?w0_=$e`NGzr5glS&I`;=mtQ#`J^~)D!RPZDeS)nrKeao)$QhN$?H9&l9-xGHpO)K z@Mkz@(J~ATP4lJC8kvpJ+4FGp@P1!91*@%H_mJYWQXLx~eY^eK{dDND*h%yE413Z&$+Gv@U&22xEH4znpRX=4)BA}@^+mv-e~-CsXqWe{ zOY6Ctl^W5OL=3QRR>7>{Ec@U7V-450Ix9jS(RR-_=?bUrs2nyom{^q5sCx}U2 zub_67P26Bh=R-$S9-W|Bw|!B|3i}6hP+3*Fsy)iO73-!7npO3wmMgyqD65zC$ZhML z@7C|F)0^GR>#moZzx~)wZ$7s3d5#LzGTilVG&8rKx67c0hSRCnLCv=e$G7a}yhf`X zZhE8j-0`Hh)7tg=%QadBnzwdrW@?skPMwI9rfn? zS_5@VwbC1Cpx$~`N5iSZK^+Y=;5bvQx~JectvpU0aGH;fQwLCYmj=giuy);dT3eyp z!~g16GAYvFy*p)6sI}`Jl1X^?oeemC>`xZ4Ba{8cLu$m=lQSoeyjy3 zGuOG!wf8D>aSbae;x7Fq`XiU8!U&)(6O)cs$wIujUO;gtzF> zhz-|1pxZ@glE)28Wrgtee88w+5MEYX%Q>dmP|8!&6t+33gPSN0ZuY5_r&g;JL{q_^ zJu$Q=O(iF0PbXe=9*%Fe^74i^US&wKmTXg8eWWs)yq?UO*xiq;+UfBK1WCTFLzs@( z?xuyuSC_^^!tXpbBg%dwx|<@8hTXcAgYLOXsubV^WV4wj2R`?Tz3{|SQXWRZW7&{J zN2RSnn2Og(5`VitNreW_39``$ko#HLNkPYw^jXz*+nS#Dgum`^hN<|vRD;{inAGLO zw1bXGAT&r>qt$Z~#YbPlc}q9kw&O0}Q~%z3DTJJCUvd($ycLm}+E78+P*~VVfhprX zvuT9#i|i0lrFKqv>-Q%|CF_0V+u0nC12dnS*KD~bdNgNDT#V73ZWUhN-KjsIWz=vJ z7*n?k>J@()(Jm;EjzuE==wkVOmcSdZkC@5Nrq1@?Bs zwOZADOOGDs*HjWNFv3R~^Q{wvcfn90p%Dx8NlnXo>&TjU*mjew9tIGbCU2mQn(0s1EocTvX3&XyfJfGO`V>WzFvuw z4G})hbi$1)@}bHT$gJsqd60QnQ`+>2L0JiVt9Gc^7K7;OU~USLe5BQgU5Fg;JET%Gz}8W24^{I5NQ*} z4tUwyiQxq9Pr5WGICAbkmM#gj?nte^?KEd=QS{Qng3wnEblMd(yZc3$YIAt1I))?3k0v%u*(p>GS5iH!nA#0oL zywnv%^q-bny%m%b_j+j?E|Lj9IrPh7AIa`vUo)G1Y+gOgX}jwUiwa!C7%;lcqe7of zcr?t}$11sRt_V2@@8|FWcpB6bJMrj#90Gf9oVZ84Orb@u1io%N>Lt0>2v}XVLri6IQ7})vQDy~dL)5} zy;2u}4ltmj>_6>mdC+(n?)2bu4(QdeZI~0x@)WRM^l=wmU(=$z0ZnpALU#KdrKE-esZ#ndBl;-W12Po zOX!_<+RvvOP1S~yV{^}$GQuc|N_4U+xi@LUJ+Zuj&!-{o^48)G=5q*vLzl2cRS15_ zdu%Ev#fX^kAEm+E!WAb10do9oR<{b-T@nIms*9Ld#O~I(zq9HO%G|HJYG0P*0pV84 zHp{D*T?b9L8$(hpKcPjDCY^blk$S#?c^zy*{i0$kn4S+qnmIE<&c6#Lk7tiF8%oP* zqFTjEa7=!Z-1jTzG1dH#!&IF;ycmG>8+{bLQ%TLVC|5fM=!!P$BL&M^t*U-rWrXTROCD7X7;Ny=kIqoGxcNOgRR|5`Syn1Be z4k-cKwQw&vwS4n1Ln+8(t0&KYf`Is+1nDTgcGO4r2@K<*=F+1HBx61K-4vo(?>;6M zIlcd_LI~Pk72`8Xk|JGR%x^~@_4?%hc>94^@Y{FIi{*^xYcaW9(t+{5;v7WiQ|0b) z5y6p`VE5!)0vWQ6&lM~&vYwhOz2|3C6!`kw3|dc>oy>|2lMTGbS#s|&k?aRN5i;ER z*LIAGcYDSOhvek-rPE`OnFiX;rw!WuHW$Qh`=R&kS)**7?Kw(*HsYJGzkVk1WYnH{ zGSsM>lBVx7u}Hn7U1*mCfmC=;kyD6-2u>w4aMFKukkq%2H5=uUCrH{8MAq?|_)#H^)_I3K`w+!G|umzfBKWV{9 zDspmSHVQKzBze&livs&+I7)r^6_b$@F??y3W~lk!Fz$jmQw*dTjM-IpUCCT!8>9Ug8P8<*0xPdi@Y*qh^;+ zOe^}#KFKYMt^F(hl^h`~)rH+if<|} zMP^`Mf<<;Vhj`*`58^(Akl<|GRbH-qxxDVCun__G!W&IzsP2<5j|^C36Cmiql2P#{ zO*iFz!EC>I|E<9Q8VdVkJDvpg3}O=5P}3Q6X|cqNiF;QiQ%-c>Nbo-S-BrnUb9s#Xt>^DlUZb(3W3zBYgBEr1Xf?fwSXlTi}r0 z*VTU}tYSj`SyqQ)^19@0iaUGJRI`-47gC>3rWEGb()Rd&SB)%lRDp%r$>*$WPNq0?5sFHOgPSKYL^`IHaEVF;f$+vV+m(t zB`^@8{aSK6S&a#Sj+`DWK`)a zQdWG`G@;i0wfvQ?DHc4*{2U#nX1vQ&8{-8%Yvu;IiL`~evz%O|CvNyodOMY_WDjS0 zTs3*?7p*-;@hT+cIXA@L3ZE2(I z$Jl#^__eK)EqmKxw?e%*B>`;id?cI(UeC^}m(;(+9y?|j^NI`yplL?OFxK-EvAGRL z;tNSflG*8*h8JR_! zdo*4Uf*_&uxNwL}HCCGUvDI4`PKZ)1ghrq?Y8^D!N431sw(9v%kT!?Cu-W z@LzEnuj}8S_tr1#?zHQqG~6B;O@amqAK=Cc(nbbfYzSyYzE{N|n+a0ZbR|7;UmIX? zJIk{_8+vwox8+RC@>=<-J65{cyC7@?rdyPpaS@XzcJu>PL)f?~8zCaXyXZ=k;mR(g z{ySw+waD_WQhoz@qstY`=Jlq0q98};Y^`9+j+XPSSWR~{G<`Izc)E8h_BPgc-jP}v z-&r5!)HCT&EC(q?##yLT5_F0cvNb9xAAu$D?GJ14}6n?hDWg)?mj?)ns(fdO5=`I)Y>r!zGrLyjr*vb<~6b0 zRRSM17FFP;tlj;Gif`Dy_wlYW)Pmr{_q^dE_H-)ciVunNu)6vxp-1pF6(2vGiln|$ zPv6C0n5V1b?!+hA{$pOndagJcOslYGh}kccUu(@p^=ddp&j!sCNX zj$C1-t$B{GAy4m9N$oK*F{peY-q3N_XGqpN2U;1(*-rm^1jW~xN zhHt37&ADPZlAhkz%tY8t7L4UH9pjkS3g0s_lla;W)u65AKh{)~^FNbluGNDvaO|`yFu9eO-*e9>WOW)b5>_y@72eA>B4=*++Gs`+t+CZ+) zL$N9*)=zrib0WDF?J2zBXogU;cMp{`PeY9;ELxUG<%y+e( z5T@spjd8w}cQq}S7(Fn{HCLWV=0f048Re*2P~++4zPlEtWp%>jfduXw@V(6rj)!Lk zLPOGR6uh8g!&&zX&4w;fKDi{>u2zI>&ie*rtD9o1a{AH6f76LVCPB%qP@_Ydi;cf= zSb2Ugb5*wjwM6jAf8>;cA`_=+lyZe%d5_=8M0-U2rhA{taAVJf8ZckrT{HKI#h~VI z-w!AXN)Le_uM5PN%C?a&&=y4Es1YU=!QzG^4J_4<9n_CWfe#?0w!%dFqX;VT2oy|O za+8vHtv=9o1~Niw;PuXMR?>;-v^XsNZcIg}yg zQU|V48E@-_fJYT%Q=fHtq#SpVqPEysVzl`cU1*5z>|a z!E8vCQDz^Urk<`SP+u{wG78K5NRKDCY@2e~J8`crNaQAjxtI*arxAl{p&d398=X+; zRpaZG=jFx7bCN2HDfHtuI{ov*iXd*RYKig>dnj~#h)hGhDwO4~O!I?s2q$8GQathA z9wJq=C=4-qo)f`7@Lu$%4K?X3TRhAVZkNMm&+{%F`bX9}g=GiLZ0d?RUUIyo?F^16 ztBY;RLBacoFIOqa#9x8Cdv6H)gPr#(O^DL&CdLrKb(FX~ z84DI0Z{H;D?Gpvv9t`j!@HeMR$x7eq>vRoc7U@phn`?M1A5{rbW{MSXQ`dCZ7H^;6sw9leG7=Ybi1?LTc9Li8{ zpshl{_i}>wu0|^7H0b3u!CYbNaT}Q|PG_vjJTV;8m@5ZqLm04n~}K7Z1-CS z6Xqfgh_b|vd*_j}R$AaDx2-l40064S%fM@8u%;>?D2C{d?4N&ymZLw0`OEpJYx! z_ZIEOQgTF(o@OaWAwFhme{!+)xi0VWz4)B6rrQ%22yr~`iyaz|g~~=zs#!Jboi4!~ ziu4XBELQco&L&75ilXS!}qnTBtYOBZ%* znc3~J5@L!xG$qUVT$;br+EzY|b&~SrQrGQnGFj>`vI{z%*dhO2boDD`F>a23Gr@ZV z=}GY#;C|Xad=7PAcYAeMQlsT)b4>FH==AeZ# z-$m#1z$0}>Xmi!qj6neZm#(V^8=`dJo1n@*!#|33IjN=GDhKeD#P`xLuDuymEb? zzDeW6{xX?@z)IDw3XyQ~p#TvB>4jl|0TQxY zv5O<9BMYfG|E6C{ragEXRH%p%Vd=`<&vnj^O*`7LH>~DjuWm63p3pF=*`URwI28B3 zMfENSiXP0a3|)+}P02Y(zxTaV*F-Jb8^Nwu$8BPJOFoVN1>#A>PkQ2g)Aj6p=+UPy z!R(0*BJv*qz;UrJglWFpM9?2Vb(c4jOD%SA>ZP|PAcH2z`KJRRsu}Z`)?Y#El zSm*zZ|NdoK@N~~AD?=ff_Tw>pX>xHROd2`wvmHyGo*0cPLCVFRv6i2Jmcz+n0+euql%5-)*@C?W5zfUdXg9 z2m^!!5vyb>Kl6vfwRO5R2lIN4albqi9(zNTO8n*RB_7(-U z<%yk=QYWcckaT>gT(8+dQYhd*syy>WrBuIXQo!K6!ojLdu~NIe7f1Vms@-mNXaG)`9YsueUIEF`>d4y6*DO@lKbU4u8yI zUze1Cb{G>?lPRu9QQ~7~>GNwK4$qDcK@1#}r~sYYr#&-v`&hisnkc|GnLN*(Et4dg zE*C3GyLDRJ`n^)SSP}!JH^~7fG>j~~%PhLVrTvG7Sn*|u2FhTA&6n$fhkf!D{j+R! zt!%sqK7}I}o9yl6AGABH^)7D*2~jT*YG#K_IdO2a-1DE&KOZMQ*)e znJ*Scn4?$iH05QmVYg9Cr$xtXHZFhg^Vb;R`T}ve>I&a32Y17=?O2~tWp1e%f6uyc zZKD~h(9*H;KhvDxKH`zf8muWl4}_m=Hlhfp#UzNt+ljr0p-Ck2N?ko-+IfgamBS#c zK_a}YuvQ|_&D(Y+IxBz%K1x+nVMjs*3J3evn^`fx`t2~V8)Xq|G%Jv9BNnW>!bq^i z-&a%bFkq?Lv$wLBHQnIymQ31YcDULFBawGqdbWF(?W(mopS7#gL!(NZ%1GsUM8;}! zRXA?OzVFE63nr7ayFqA)<9Z;)f?vXR^M&uM*TI6%`R%eaEmGQWQAV}0)tU-6Mk_6~(Hi)v*(*Db>3(pLJ` z?4kZu^q3!+vHQBQectE`iX`jtAkOcQs+^sZM`c5y|5)|UbY(qVq}SMB2*5aYE>&=^ z#0*cktfG-N-_GWXv?f5&?v86Rh)l4u%=swvOa^hHQ>6L9-b;J8g-G=IWs| zo7`d`uGxx#QwKO<_BVHRwN3~jI5QKsHCNCK<~q9CpZ0F5Ju#5GGwqePyl&kZ#4qRc z@JJa|QP@}|4hyk{Ua|sg#uk+6N=4?XsB8By?({-quIXyPexX>*-IJR9k`IYhF1jw2 z*+bMedVwlR$vd@WZ@8D&OV{l&E*55HU#Dk1#jdNIiFVSkL6z&ur!riji?%SD%#*&h z;D+i3r)@`lwTQzCDw_3Y9g-)H6;lh}mGmEKHDn?J1H6CY8Oph`-r-E@OrErX!;){0 zEnF2|JTk9Bkn`_GH@457cwnZNuJq&y+NZbPs#-bl2wH2!zxn-R%?HJEp@HYSA%N<^ zKJv{?jF@AM>1z+o8_TRY<~;nCS^nnv>}#X)Tm~aFI+{(b3fkq$w$s9Eg`(;;r zC!fwaD-$%$EOTef=X|cv-t_V^|3N;@xZzED_Ov~etYxD34T>kI8ch{$$Q!WmyJ2Kz zQcW9~3qFDzC@%CpR{6THaJLuyT1#(5@kIB@W&W5D3X`w(Qerw#S$Rl+Q}EiuEI#|G zdNM2oQj^`LSe=w5YPW(FU}8QwULQ<2$DVzQc{oz^+q=Cl^=uX1Ov!J0yOMPvfr~D1 zE?gL})4^}kLt~R&$}V{g?|t~C){l*o*w%QRu%k1{s(oTUe|=_wyU^EBnJTE*Ap#=` zO}xBQdPexEu7Sd*ocJTZ?W6g-UuI>}p$o*@Y$rizIcm*LLTx$bJXtlf>IMbp>Kgt` zVchx`2X)K!Yx!apmucjVF>9C@YKSGX`6Y&Vg@c*#68eWux|(zRqa`!@`JP$85SE{e zS(^)N={dZ`IYt@_gWmh5f%*kxRdlM&ndYK7_MJS(+qVjCaf%7Z2}>#tr3 zGF6j4s%F{X+4P3zV*!ru%-VsAQRz)+IDLxm4bC8bLX$ zE5DdzR$4Gn4^JJfSoZK_xk0Mo3@fDE+2g8}fj&OY8%j1tbJp7)6ZLO^^%aWE|Mvc2 zYj|tQCxD-p&HYtixzH=|aKensjRIwGZqC*1Xn78x2Julm*W7GaJ|=jj%l9SOFKE}D zlM#rXyhv9|YT#o3PDx(Ntp+`Z;2s)e$V5Qj-lN9C@ z8N@UC=}K4BJ@tA#n}xL}S?Bxtyo#SerVk7bnSN`V@xrkZ!>*>j73R4iHs{BngRb!w zAtCee0h{k0T)=;=ZpGC1iYjd~#9{vtR2=dNNHWU&;19P3b{_O%0-a^E?M|8EeeW$I zBEtrIib9w9W&30!x6(mnlHX;5*E=DxNe+f@hbE1U2itmW{W<$&qB2u2c|*DF;>c4f zu1w^kV9dsD3U8*x`$}sTOr$wGZ)9?Mci&MRKR1tFp*;RTbsV1+f{QPP~9ovYUot143QVzZ2%PAafFP zl0W+>D$?RlJzT1!7w_z`S1ENPCNS$BFJWgIb(V)*5^Qg+uunzrWNg?ecUL>C=`QW`8MCU?>(Rboc+|M|#mJLdGEw1|RZ+oOt zRL%)vp9l?x?YKMK4-4}q9pV;0b>l2-!wL8}Y82*cPsY?2ee&b}7^>8Q2V-+DH#D?PoF;a$ zDos-?i1RzVu?IXIE=7nP*Y7!F%Rw``S6;-XKUhH%8?ly}EEu3ts~5N0VA&Fmdh^)( zOF8xCo8+8CR;jW#DgYHi9NfvfWL@`$>`6{34}a^leWm1iaT3%OizN9e=mjYZSs-q( z<$3rf8a|dw<8upZz_7nCi<2K_QLzPJ;|-10#gb`6n(hnAtX&2mu2FZJC1WMNQ$-a6 z-CssSqE~{YH=xbB+A}6CxAZA8$M{Cy}OK(!8EP+w(QY|w(J30yx(Ylz_qZc1?Y%8jy$(?P?E&(rG_;2hr1Z9m<8C`=o+^{nHw{MiIV-5ruC)v+eurxl^}Yl)Aa zd4kk!RA?fs0m}zYn|r8KR%ESL<0;RhV3k7K%Dap=4-eFd-U{3_QVN#mjH7WoKi+QI ztQO$Rbka`c;ZOG{ssd2|{I7iOIqM3ow8K<8iNYg6``pJZs~FQ(w>0Nw4IbLYGE7eS zsT>pa@cBoHQmq(=aIw=GW_~8(v+v|01F`CD+|6cWwjrkS+EYSVi#n)Gkm=CpHA}FUG60-b?N;n zTCHhj=KIk1)E*0wQn#Ds(&GXV7?|Ze%eBZv#LNwg51&N~hHv-L z_2lkX4fyQ0)PjhZZr5nVOu&BG2Vzvnl^-X%II5{1c`|tkSnqVnta);@_Duw1m-z?O4(jZFt%o<> zS?${qv;Z42S~(*1GS?hsx>Zs6eq;PtRfey}p4YAxyklVHIGz*oIKP71eA1pge9T!P z+G_g23Lz?q<)CGY2VN1P$D?l!-B$HrM(b8ohmB^ zOhSe>G6%s4)mHNjs1Q|TFu&_0X`Dzrxzni&>&uZTJKV14D37q?uX{Ysc&=a`R~RVT zb7N=|CkyWEnen-C27{YPg|uM>ydr`Fm>xBibzHLtGiK?HXZrCL2nO>6wXhufhXRH% zsK4@4t8*Ek$IM{TfH+qCQI{tJux{Tm`V7%O%B4-EVOgVfzl4a8L>&d%ZA7O|YRDuA z+his69ctpl6EbOdsabfWmix^%AfVqRS@#EW4SJq;e_xOP=jh2TW z)_Ap&vLJMkB^2Hz0=}wG&tm4a;vsuM9M4$aPyg_7+1tl#Yysg<*w9e*>3sdT)oPRG z%t4#bPPG>63<%y$CogWhE+h*z2gfCu@v>Om8xT6UgY3&yciel_z*+#E`hZ-R$5K_N z4JQ456MDqbuTgRCNrGjBYh+)ip@%r z5Afo3tx0_J!8K`796Q_(Jj6d68WI8cBk1EJ61=ix({$dJqt|ps)ekv@nr&uc%XBRL zHj2YS`OfV|Yir8;_tMcM)wC|ZXZ}L1S$vhBHz%F~5aql6?Yp3Xtohh%r&~9b!&axc z)d3(!l0#uzs0_5#Wv7m|Q~?@KXVIKIJ6(jxSGGLfe2y}| zIr$#h^}0D*j~%P!R7yYGo*EYr5J00RFU>Hd3#mh2Sw!Y>K=)ciDXoR$nWXDgfrU2E zmAezqgqrZfuE@w;mTpe~*xTvF>|7H_WvKiNsZ4x^B-5l@!U)W;)%E=HT87H^!{x<6 z0hyYW_H|a(Rc5W*8b~$jT*?czjb9zk9nF}nsKa17+)kgdO5eh@;dydAwU~b&fA)Or z3pf&o9IdSHdyulw9TW!hx_$ll&6^}%!Ks?Ne3c%azzvCE@?e@cSfeH)PVxb$Pb=_% zf{r_O!DM{FzL>G|ixP!zwX_=PZ&^BGAc=JL7(C*`ac^G<&@kxhxHl;V_GX^QYjwWmAOc8?R7fVsem4+K>E z0Dqnsfqb~)i;JM*<*hkb9O(Q5qSIvNarh|FX4^Whe80kNpV7P))`RpR0P^)8a7tUv z99)S_3hL0gW?Z=hXODjTmkr2ZS$rLo=wO&9S1%iCj^`HpYsWt?@JQ&zBoEGUc?LqL zQBig*CIj?VG`_5{fk8L5hKIMY`TznDDRze(52STF^i0f~OgtPPH@a``6oX`(dd-=0 zDo6YIk#b5Kf{rN?xDUkaT#uvG8NfBPFAa{Lxg8P$i zqh!lSE$q`-fZFTfgj@WE-L^V7RtluZeNwvU5BwQu5Ik0dg>r-81Z!lEdh2u=WAtqr zfy0w_EBpqrRv0m)m#*10iriy_F*m4OX}$26S@JleNNKu0_HZReDKc5{2f1}zDr#zG zC;eMTX9|2;ZpQaOhx%uDXJT@l@>9S>Js5nPcTbFz#GLfo`>0}Z`z~oG=lB7>>j&yC ztw~5Q0_dP^@EdTu$^{MIwMEW-Qry?xJw*m5oTPl#P0E5Y7L7-IrjE;8ti&jmXCvIm z=>c_@V>?UqNJ=pOsf{W3r8?1`lDhz1O9WawL2_UrGHk9nFPx`p0q&w(F+;Cujf!lg zM>}^oAC^gZ+<`29;8TY#L@17*!jZyOj6B1E`(P!6>7lXN%q~{D3~6gQ7wFLVWrvqo zYDf%V={MT@@YkOGSprGQZIp{4!Um=6;|JjSBk$GKk}v(zzG3G)MIKx@n{y#H1PrY} z19weU*B<-vp`tJej$b65B5i;ODw-?U{jj`4gj7_cI7VM&WOFNOV-kVgId?w&x2OXH_k2Qp?xHl+cD#o zXG?dr9WexF_Gy`!14x8UP-2oCSnRhh?gQTG0Og{R2#)JL^X4oL?f@Y&UYW6XD!C#u z2QgPd^X$Bp29fcs{yYkUJ2Sl8>j?yh@d=kb-PB#+xS ziA!tD--rP+EI;|v8uG$9er{`eaQl;zmEYqk^L|2Ri!n-`T(jffFR|DkuiB8JaB!EO z`fQ(*U}KGDG4pfy5*tvnIP2dk9Y}1yfWSVoyOT@=}+d#E$I}z$wTE1h9K|Y)@l(9+pVvX4) z-bPss04T($V)~w;%|*V~V4QJ&k@yT7j9Sp%@BIfw+i;56&(F{5YE_;81irJo;BBK< zJfdN}%9i&y-fvDSIlOcVN1CMF@frm#o!m?aXZ*cs6RUF+Pol?(JS5pc?$q+VuCBF` zKk^hQ4c!6nxi$GHBi+aoFF5_q{Pe7+Hv{FruWxiHXi;RIoyqM430Y?}4mG_>5A_;@ zX{U!aJCnURdMTL@-%|Fglqi`u2oPj%(TNbYMSXpjDVW0l31k z{ErdCnyT)2IQey0e6e}E8TjC2BGh+3TzpDFDY^_D_BY8OY~(9{H8x_=Y@2QIjEk() z@=g7BEfiZGh{3!Q$^hEw0($HM#m+eu^mGOd>pPHH+Sh-ovx=T%BqP>&6^_|m<_wC!2?!1TI0)5EU9^K5ma9I(ng4YPO2;kuCvEv&0cODZ?P;bFf*0AA&&ejR*XWjo} z>uA@(=m=nGgW}l4+}406(vF-f!C^NBa4kgafUtOqBl`zT%^D|e@>H;ip*KXN@qS)j z!aPB@{=MI`g@?-dN^gKoW-_z3zO`fOj2@d;(;h3m@MnRHJmA)v#wGIm%n4i*=?`dl zg3wp9KlASnK2TXaHQ=4Jg!dXD3royyXOc6n)0f$!5tsAgg$qo#kcuwEkaKhrhY|I?+)99 zeQxHFu$&EXDE8-}a_@bDBvl-;oceJ5G?1mP=xXJAqc%%H9o$}0DyeOnEb!r$x6LIu^jftGwi-Wi~hR?s}mO% zz<&JaX8+HMH`+=$uB$P*3D%k=+y4<#6hph^DU zO)L?fOHzaO^BWf>s*9yN(<4gg-&I-}{`a*TRK~vq09nm5vH$F1(grja>#C85}@hhhKO5-4R{mM#OI3_ckA{Vz2n|6qsz6%N44>;H<%PVN8F zEwmKC(*Ll6GVRX4^srq2&tKDS81z5PV_5nh262G)y8n{r2D$MsgGy>_IR8gzI*k4+ zuK|>Ql|Wn_iQn3P1?wie{2vMWe_!kPMg2eW?yvS8AcOvInL(zG|3e<^71RH0Fo5RP zADJ5gZgEuQ6o~$LSi_OZb<^oEKTsK&us?S6=rNh7H6W2r=J(>UA(*dw zlv@P6SymIZMAr9f^zzg)s%OetRuBh0N}y-(CJ(M^6HvH|vwFtV8FELCkugf=!e!Os zx?1tsJ_)l8oCfGm)GV1WouS18UHd2caX)QifQn)Gd+<5IEQN=VW;7Se)p<>TZY|W= zi+F@ozcGxB_bcZRimqixW{IQ}k)ofY--{c>@jCq#(d@MUpD9jSyjVRTIoPsMC>WHL ze2V9eDBXb}4BY($Qrs8mR*qWEQgk+4EIM`b_12fb%%#7l5!qt2$jfGxL)U4GEtL@3 z)pa*6PXqpYFWnK|m6EEIyU-3y7|`qZbV{0`QWkYz%qT3vMc>@eB>t}eN&^|S{n{g( zuM`=G;@O}|LAt#4~YgBvzd|NG-?N4LFM zMN-%K?@E1E5mM+j>m%HuKCr;Jr!|(GOqxNVJXciF7{)MFecS_I4{uX(e zi#y6%F1JBqp(VCJUVm&=J@2}&)p3_(4jFj%60H93h#%V|y<~1Hde$&?!h{J3Qbj4e z0;)lm{TH$vk3%u#-^F&t)D;pIwy<<+1!Au`X&VC6B67Js^;NZAEwPLr^<^&?*I3F+q3x{kXCikLZ}t zP)x6v1dzy#ygI`W`#4ZZo(~yMZv6!;x!II0w`GyX9HZ$)D;siFmAY-0Vj4#iAQlJ} za6mG9QDR&rQ#zU5>Q6ZB%M9Fkm?^zV#RGsMed9v9dkk_A6(D9p zx&yUXswYP74mY49&BSDG-$@WqMMxC34KEW`95_}BAAq@T%k(!=`6mYe6cgzUiA4Tt r%KxZa5xhTQf+zY%&5Jx-xV{~eNc53MvfLO2e7zTy7AbhG?fw4&3m0GH literal 0 HcmV?d00001 diff --git a/MLMC_random_darcy_flow/doc/tooltip b/MLMC_random_darcy_flow/doc/tooltip new file mode 100644 index 00000000..951d72dd --- /dev/null +++ b/MLMC_random_darcy_flow/doc/tooltip @@ -0,0 +1,2 @@ +Implementation of a multilevel monte carlo method for random darcy flow + diff --git a/MLMC_random_darcy_flow/include/KL_expansion.h b/MLMC_random_darcy_flow/include/KL_expansion.h new file mode 100644 index 00000000..61f877c9 --- /dev/null +++ b/MLMC_random_darcy_flow/include/KL_expansion.h @@ -0,0 +1,66 @@ +/* ----------------------------------------------------------------------------- + * + * SPDX-License-Identifier: LGPL-2.1-or-later + * Copyright (C) 2026 by Jonas Plank + * + * This file is part of the deal.II code gallery. + * + * ----------------------------------------------------------------------------- + */ +#pragma once +#include +#include + +#include +#include + +namespace RandomField +{ + using namespace dealii; + /* We assume here that our auto-covariance function is exponential, but not Gaussian. + This is both modeling choice and mathematically reasonable in this case. + We also assume a variance of 1 here. */ + template + class KLExpansion + { + public: + KLExpansion(const unsigned int n_terms, double L, double l, double mu); + + double compute_kl_expansion(const Point& p, std::vector &samples); + + private: + + // computes our coefficients + + // computes our eigenvalues based on the previously computed frequencies + void compute_lambda_i(); + // computes norm values such that our eigenfunctions are normed to one. + void compute_alpha_i(); + // compute the frequencies + void compute_omega_i(); + + // functions we need for the computation of omega_i + double f_even(double sol); + double f_odd(double sol); + double grad_f_even(double sol); + double grad_f_odd(double sol); + + //newton since equation is nonlinear + void newton_even(unsigned int index); + void newton_odd(unsigned int index); + + //number of KL expansion terms + unsigned int n_terms_; + // domain length + double domain_length_; + // correlation length + double correlation_length_; + // important parameters for the construction of the KL-Expansion in x-direction + std::vector omega_i; + std::vector lambda_i; + std::vector alpha_i; + + // constant mean of our field. + double mu_; + }; +} diff --git a/MLMC_random_darcy_flow/include/mlmc.h b/MLMC_random_darcy_flow/include/mlmc.h new file mode 100644 index 00000000..679e11f9 --- /dev/null +++ b/MLMC_random_darcy_flow/include/mlmc.h @@ -0,0 +1,43 @@ +/* ----------------------------------------------------------------------------- + * + * SPDX-License-Identifier: LGPL-2.1-or-later + * Copyright (C) 2026 by Jonas Plank + * + * This file is part of the deal.II code gallery. + * + * ----------------------------------------------------------------------------- + */ +#pragma once +#include +#include + +namespace MultilevelMonteCarlo +{ + template + class MLMC + { + public: + MLMC(unsigned int oneD_samples); + + // generates the required number of samples + std::vector generate_samples(); + + // store the samples for the computation of mean and variance + void add_sample(double rvalue); + + double compute_mean(); + + double compute_variance(); + //removes all samples after reached convergence on a level + void clear_samples(); + + private: + std::mt19937 rng; // Mersenne Twister engine + std::normal_distribution dist; // Normal distribution + unsigned int num_samples; + + // parameters for error computation + std::vector results; + }; +} + diff --git a/MLMC_random_darcy_flow/include/random_darcy.h b/MLMC_random_darcy_flow/include/random_darcy.h new file mode 100644 index 00000000..5583ff85 --- /dev/null +++ b/MLMC_random_darcy_flow/include/random_darcy.h @@ -0,0 +1,95 @@ +/* ----------------------------------------------------------------------------- + * + * SPDX-License-Identifier: LGPL-2.1-or-later + * Copyright (C) 2026 by Jonas Plank + * + * This file is part of the deal.II code gallery. + * + * ----------------------------------------------------------------------------- + */ +#pragma once +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "random_permeability.h" + +namespace Discretization +{ + using namespace dealii; + + /** + * This class is essentially a modification of Step-5. As described in the README, + * we treat the finite element solver as a black box. This class demonstrates + * how easily this can be achieved; the only required modifications are + * input/output adjustments and the interface to the random field. + */ + template + class RandomDarcy + { + public: + RandomDarcy(); + + // Allows switching between coarse and fine triangulations + // with virtually no code duplication. + void set_tria(bool fine); + + void generate_mesh(double domain_length); + + // Implementation follows the logic of deal.II tutorial Step-5. + void setup_system(); + + void assemble_system(RandomField::RandomPermeability& random_constant); + + /** + * Using an iterative solver for MLMC is generally not ideal. + * The matrices can become highly ill-conditioned due to the high + * variations in the random permeability field. + */ + void solve(); + + // If we are on the first level, we only want to refine the fine triangulation. + void refine_grid(bool firstRun); + + // On the first run, we label the output as "coarse" since both meshes + // are identical. After the first level, the meshes diverge, and we + // output the finer mesh. + void output_results(bool firstRun, unsigned int level); + + // This is our Quantity of Interest (QoI). + // It is defined as: $K_{eff} = - \int_{\Gamma_{right}} k \frac{\partial p}{\partial x_1} dx_2$ + double compute_Keff(RandomField::RandomPermeability& permeability); + + private: + // define two triangulations + Triangulation coarse_tria; + Triangulation fine_tria; + + const FE_Q fe; + DoFHandler dof_handler; + + AffineConstraints constraints; + + SparseMatrix system_matrix; + SparsityPattern sparsity_pattern; + + Vector solution; + Vector system_rhs; + }; +} diff --git a/MLMC_random_darcy_flow/include/random_permeability.h b/MLMC_random_darcy_flow/include/random_permeability.h new file mode 100644 index 00000000..771ecfb1 --- /dev/null +++ b/MLMC_random_darcy_flow/include/random_permeability.h @@ -0,0 +1,37 @@ +/* ----------------------------------------------------------------------------- + * + * SPDX-License-Identifier: LGPL-2.1-or-later + * Copyright (C) 2026 by Jonas Plank + * + * This file is part of the deal.II code gallery. + * + * ----------------------------------------------------------------------------- + */ +#pragma once +#include "KL_expansion.h" + +namespace RandomField +{ + using namespace dealii; + + /* + This class is really our interface between the KL expansion + and the FEM code. */ + template + class RandomPermeability : public Function + { + public: + RandomPermeability(std::vector &first_sample, unsigned int n_terms, double domain_length, double correlation_length, double mu); + + // overwrite the samples + void overwrite_samples(const std::vector &next_sample); + + // our evaluator + double value(const Point& p); + + private: + KLExpansion kl_expansion; + std::vector samples; + }; +} + diff --git a/MLMC_random_darcy_flow/main.cc b/MLMC_random_darcy_flow/main.cc new file mode 100644 index 00000000..020c907e --- /dev/null +++ b/MLMC_random_darcy_flow/main.cc @@ -0,0 +1,127 @@ +#include "include/random_permeability.h" +#include "include/random_darcy.h" +#include "include/mlmc.h" + +#include +#include + +int main() +{ + using namespace dealii; + + std::ofstream outfile("mlmc_results.txt"); + if (!outfile.is_open()) { + std::cerr << "Error: Could not open mlmc_results.txt for writing!" << std::endl; + return 1; + } + + // Run parameters + double domain_length = 10.0; + + /* Describes how strongly different points are correlated. + A higher correlation length means the random field is more "spread out." + A shorter correlation length increases local variance, which requires more KL terms + to capture the higher frequencies. This is similar to a Fourier series, where a + function with high-frequency oscillations requires more terms for a sufficient approximation. */ + double correlation_length = 5.0; + + // The number of terms chosen for 1D. For higher dimensions, we use oneD_samples^dim. + unsigned int oneD_samples = 20; + + // The number of levels was not chosen arbitrarily. Convergence is usually so fast + // that using more than 4–5 levels is rarely necessary. + unsigned int levels = 5; + + // We used a constant mean here. While this was a specific choice for this case, + // in practice, most mean functions are spatially varying rather than constant. + double mu = 1.0; + + /* This tolerance should not be confused with the tolerances seen in standard numerical + convergence studies or linear solvers. Those low tolerances (on the order of 1e-8) + would be realistically unachievable here; instead, we use a more moderate tolerance + that keeps the error "small enough." A typical value used in research is 1e-2 to 1e-4 + at most. A larger value was chosen here for demonstration purposes, but the results + are still quite acceptable. Note that this value is squared later, so the actual + tolerance used to abort the runs is smaller. */ + double tolerance = 1e-1; + + // In general, these values should be determined by a pilot run. + // I chose these specific values to keep the implementation simple. + std::vector runs_per_level{20000, 10000, 5000, 2500, 1000, 250}; + + MultilevelMonteCarlo::MLMC<2> mlmc(oneD_samples); + std::vector first_sample{}; + + /* The construction of this class also computes the KL expansion. + We compute the expansion once and then reuse it by swapping out the samples. */ + RandomField::RandomPermeability<2> permeability(first_sample, oneD_samples, domain_length, correlation_length, mu); + + Discretization::RandomDarcy<2> random_darcy; + + random_darcy.generate_mesh(domain_length); + + double global_mean = 0.0; + + + + for(int i = 0; i<=levels; i++) + { + std::cout << "Level:" << i << std::endl; + for(unsigned int j = 0; j=2) + { + double var = mlmc.compute_variance(); + + if (var / (j+1) < tolerance * tolerance) + { + global_mean+= mlmc.compute_mean(); + std::cout << "number of samples for level" << i << ":" << j << std::endl; + random_darcy.output_results(i==0, i); + + outfile << "FINAL_STATS Level:" << i << " Mean:" << mlmc.compute_mean() + << " Var:" << mlmc.compute_variance() << " Samples:" << j << std::endl; + break; + } + } + + + } + random_darcy.refine_grid(i==0); + mlmc.clear_samples(); + std::cout <<"global mean" << global_mean << std::endl; + } + + outfile.close(); + + + return 0; +} + diff --git a/MLMC_random_darcy_flow/source/KL_expansion.cc b/MLMC_random_darcy_flow/source/KL_expansion.cc new file mode 100644 index 00000000..bb148c01 --- /dev/null +++ b/MLMC_random_darcy_flow/source/KL_expansion.cc @@ -0,0 +1,224 @@ +/* ----------------------------------------------------------------------------- + * + * SPDX-License-Identifier: LGPL-2.1-or-later + * Copyright (C) 2026 by Jonas Plank + * + * This file is part of the deal.II code gallery. + * + * ----------------------------------------------------------------------------- + */ +#include "../include/KL_expansion.h" +#include +#include + +template +RandomField::KLExpansion::KLExpansion(const unsigned int n_terms, double domain_length, double correlation_length, double mu) +: n_terms_(n_terms) +, domain_length_(domain_length) +, correlation_length_(correlation_length) +, mu_(mu) +{ + compute_omega_i(); + compute_alpha_i(); + compute_lambda_i(); +} + +template +double RandomField::KLExpansion::compute_kl_expansion(const Point& p, std::vector &samples) +{ + double val = mu_; + if constexpr (dim == 1) + { + for(unsigned int i = 0; i +void RandomField::KLExpansion::compute_omega_i() +{ + for(unsigned int i = 1; i<=n_terms_; i++) + { + if(i%2 == 0) + { + newton_even(i); + } + else + { + newton_odd(i); + } + } +} + +template +void RandomField::KLExpansion::compute_alpha_i() +{ + for(unsigned int i = 1; i<=n_terms_; i++) + { + if(i%2 == 0) + { + double w_i = omega_i[i-1]; + double sqrt_val = domain_length_/2 -std::sin(w_i*domain_length_)/(2*w_i); + alpha_i.push_back(1/(std::sqrt(sqrt_val))); + } + else + { + double w_i = omega_i[i-1]; + double sqrt_val = domain_length_/2 +std::sin(w_i*domain_length_)/(2*w_i); + alpha_i.push_back(1/(std::sqrt(sqrt_val))); + } + } +} + +template +void RandomField::KLExpansion::compute_lambda_i() +{ + for(unsigned int i = 1; i<=n_terms_; i++) + { + double w_i = omega_i[i-1]; + double lambda = 2*correlation_length_/(1+w_i*w_i*correlation_length_*correlation_length_); + lambda_i.push_back(lambda); + } + +} + +template +void RandomField::KLExpansion::newton_even(unsigned int index) +{ + double a = M_PI / domain_length_ * (index - 1); + double b = M_PI / domain_length_ * index; + + double x = a + 0.1 * (b - a); + + for (int i = 0; i < 50; ++i) + { + double fx = f_even(x); + double dfx = grad_f_even(x); + + if (std::abs(dfx) < 1e-14) break; + + double step = fx / dfx; + double x_new = x - step; + + int backtrack_count = 0; + while ((x_new <= a || x_new >= b) && backtrack_count < 10) + { + step *= 0.5; + x_new = x - step; + backtrack_count++; + } + + if (x_new <= a || x_new >= b) break; + + + if (!std::isfinite(x_new)) break; + if (std::abs(x_new - x) < 1e-12) + { + x = x_new; + break; + } + + x = x_new; + } + omega_i.push_back(x); +} + +template +void RandomField::KLExpansion::newton_odd(unsigned int index) +{ + double x = M_PI / domain_length_ * (static_cast(index) - 0.2); + + for (int i = 0; i < 50; ++i) + { + double fx = f_odd(x); + double dfx = grad_f_odd(x); + + if (std::abs(dfx) < 1e-12) break; + + double x_new = x - fx / dfx; + + if (std::abs(x_new - x) < 1e-10) break; + if (!std::isfinite(x_new)) break; + + x = x_new; + } + omega_i.push_back(x); +} + + +template +double RandomField::KLExpansion::f_odd(double x) +{ + return 1.0 / correlation_length_ - x * std::tan(x * domain_length_ / 2.0); +} + +template +double RandomField::KLExpansion::f_even(double x) +{ + return (1.0 / correlation_length_) * std::tan(x * domain_length_ / 2.0) + x; +} + +template +double RandomField::KLExpansion::grad_f_odd(double x) +{ + const double L = domain_length_; + const double t = std::tan(x * L / 2.0); + const double sec2 = 1.0 / std::cos(x * L / 2.0); + return -t - x * (L / 2.0) * sec2 * sec2; +} + +template +double RandomField::KLExpansion::grad_f_even(double x) +{ + const double L = domain_length_; + const double sec2 = 1.0 / std::cos(x * L / 2.0); + return (1.0 / correlation_length_) * (L / 2.0) * sec2 * sec2 + 1.0; +} + +template class RandomField::KLExpansion<1>; +template class RandomField::KLExpansion<2>; + + diff --git a/MLMC_random_darcy_flow/source/mlmc.cc b/MLMC_random_darcy_flow/source/mlmc.cc new file mode 100644 index 00000000..08396350 --- /dev/null +++ b/MLMC_random_darcy_flow/source/mlmc.cc @@ -0,0 +1,73 @@ +/* ----------------------------------------------------------------------------- + * + * SPDX-License-Identifier: LGPL-2.1-or-later + * Copyright (C) 2026 by Jonas Plank + * + * This file is part of the deal.II code gallery. + * + * ----------------------------------------------------------------------------- + */ + +#include "../include/mlmc.h" +#include + +template +MultilevelMonteCarlo::MLMC::MLMC(unsigned int oneD_samples) +: rng(std::random_device{}()) +, dist(0.0, 1.0) // mean = 0, stddev = 1 +{ + if constexpr (dim == 1) num_samples = oneD_samples; + else if constexpr (dim == 2) num_samples = oneD_samples*oneD_samples; +} + +template +std::vector MultilevelMonteCarlo::MLMC::generate_samples() +{ + std::vector samples(num_samples); + + for (auto &s : samples) + { + s = dist(rng); + } + return samples; +} + +template +void MultilevelMonteCarlo::MLMC::add_sample(double rvalue) +{ + results.push_back(rvalue); +} + +template +double MultilevelMonteCarlo::MLMC::compute_mean() +{ + double mean = 0.0; + for(int i = 0; i +double MultilevelMonteCarlo::MLMC::compute_variance() +{ + double mean = compute_mean(); + double var = 0.0; + for(int i = 0; i +void MultilevelMonteCarlo::MLMC::clear_samples() +{ + results.clear(); +} + +template class MultilevelMonteCarlo::MLMC<1>; +template class MultilevelMonteCarlo::MLMC<2>; + diff --git a/MLMC_random_darcy_flow/source/random_darcy.cc b/MLMC_random_darcy_flow/source/random_darcy.cc new file mode 100644 index 00000000..b41a5204 --- /dev/null +++ b/MLMC_random_darcy_flow/source/random_darcy.cc @@ -0,0 +1,199 @@ +/* ----------------------------------------------------------------------------- + * + * SPDX-License-Identifier: LGPL-2.1-or-later + * Copyright (C) 2026 by Jonas Plank + * + * This file is part of the deal.II code gallery. + * + * ----------------------------------------------------------------------------- + */ + +#include "../include/random_darcy.h" +#include + +template +Discretization::RandomDarcy::RandomDarcy() +: fe(1) +, dof_handler(coarse_tria) +{} + +template +void Discretization::RandomDarcy::set_tria(bool fine) +{ + if(fine) + { + dof_handler.reinit(fine_tria); + } + else + { + dof_handler.reinit(coarse_tria); + } +} + +template +void Discretization::RandomDarcy::generate_mesh(double domain_length) +{ + GridGenerator::hyper_cube(coarse_tria, 0, domain_length, true); + GridGenerator::hyper_cube(fine_tria, 0, domain_length, true); + + coarse_tria.refine_global(3); + fine_tria.refine_global(3); +} + +template +void Discretization::RandomDarcy::setup_system() +{ + dof_handler.distribute_dofs(fe); + + solution.reinit(dof_handler.n_dofs()); + system_rhs.reinit(dof_handler.n_dofs()); + + constraints.clear(); + DoFTools::make_hanging_node_constraints(dof_handler, constraints); + + // 1. Left boundary (indicator 0): u = 1.0 + VectorTools::interpolate_boundary_values(dof_handler, + 0, + Functions::ConstantFunction(1.0), + constraints); + + // 2. Right boundary (indicator 1): u = 0.0 + VectorTools::interpolate_boundary_values(dof_handler, + 1, + Functions::ConstantFunction(0.0), + constraints); + + constraints.close(); + + DynamicSparsityPattern dsp(dof_handler.n_dofs()); + DoFTools::make_sparsity_pattern(dof_handler, + dsp, + constraints, + /*keep_constrained_dofs = */ false); + + sparsity_pattern.copy_from(dsp); + + system_matrix.reinit(sparsity_pattern); +} + +template +void Discretization::RandomDarcy::assemble_system(RandomField::RandomPermeability& permeability) +{ + const QGauss quadrature_formula(fe.degree + 1); + + FEValues fe_values(fe, + quadrature_formula, + update_values | update_gradients | + update_quadrature_points | update_JxW_values); + + const unsigned int dofs_per_cell = fe.n_dofs_per_cell(); + + FullMatrix cell_matrix(dofs_per_cell, dofs_per_cell); + Vector cell_rhs(dofs_per_cell); + + std::vector local_dof_indices(dofs_per_cell); + + for (const auto &cell : dof_handler.active_cell_iterators()) + { + fe_values.reinit(cell); + + cell_matrix = 0; + cell_rhs = 0; + + for (const unsigned int q_index : fe_values.quadrature_point_indices()) + { + const double current_coefficient = + permeability.value(fe_values.quadrature_point(q_index)); + for (const unsigned int i : fe_values.dof_indices()) + { + for (const unsigned int j : fe_values.dof_indices()) + cell_matrix(i, j) += + (current_coefficient * // a(x_q) + fe_values.shape_grad(i, q_index) * // grad phi_i(x_q) + fe_values.shape_grad(j, q_index) * // grad phi_j(x_q) + fe_values.JxW(q_index)); // dx + + cell_rhs(i) += (fe_values.shape_value(i, q_index) * // phi_i(x_q) + 1.0 * // f(x) + fe_values.JxW(q_index)); // dx + } + } + + cell->get_dof_indices(local_dof_indices); + constraints.distribute_local_to_global( + cell_matrix, cell_rhs, local_dof_indices, system_matrix, system_rhs); + } + +} + +template +void Discretization::RandomDarcy::solve() +{ + SparseDirectUMFPACK A_direct; + + solution = system_rhs; + A_direct.solve(system_matrix, solution); + + constraints.distribute(solution); +} + +template +void Discretization::RandomDarcy::refine_grid(bool firstRun) +{ + fine_tria.refine_global(1); + if(!firstRun) + { + coarse_tria.refine_global(1); + } +} + +template +void Discretization::RandomDarcy::output_results(bool firstRun, unsigned int level) +{ + DataOut data_out; + + data_out.attach_dof_handler(dof_handler); + data_out.add_data_vector(solution, "solution"); + + data_out.build_patches(); + + std::ofstream output(firstRun ? "solutionCoarse" + std::to_string(level) + ".vtk" : "solutionFine" + std::to_string(level) + ".vtk"); + data_out.write_vtk(output); +} + +template +double Discretization::RandomDarcy::compute_Keff(RandomField::RandomPermeability& permeability) +{ + const QGauss face_quadrature_formula(fe.degree + 1); + FEFaceValues fe_face_values(fe, + face_quadrature_formula, + update_gradients | update_normal_vectors | + update_JxW_values | update_quadrature_points); + + std::vector> solution_gradients(face_quadrature_formula.size()); + double Keff = 0.0; + + for (const auto &cell : dof_handler.active_cell_iterators()) + { for (const auto face_no : cell->face_indices()) + { + if (cell->face(face_no)->at_boundary() && + (cell->face(face_no)->boundary_id() == 1)) + { + fe_face_values.reinit(cell, face_no); + fe_face_values.get_function_gradients(solution, solution_gradients); + for (const unsigned int q_index : fe_face_values.quadrature_point_indices()) + { + const double current_coefficient = permeability.value(fe_face_values.quadrature_point(q_index)); + Keff -= current_coefficient*solution_gradients[q_index][0]*fe_face_values.JxW(q_index); + } + } + + } + } + + return Keff; +} + +template class Discretization::RandomDarcy<1>; +template class Discretization::RandomDarcy<2>; + diff --git a/MLMC_random_darcy_flow/source/random_permeability.cc b/MLMC_random_darcy_flow/source/random_permeability.cc new file mode 100644 index 00000000..71317805 --- /dev/null +++ b/MLMC_random_darcy_flow/source/random_permeability.cc @@ -0,0 +1,32 @@ +/* ----------------------------------------------------------------------------- + * + * SPDX-License-Identifier: LGPL-2.1-or-later + * Copyright (C) 2026 by Jonas Plank + * + * This file is part of the deal.II code gallery. + * + * ----------------------------------------------------------------------------- + */ +#include "../include/random_permeability.h" + +template +RandomField::RandomPermeability::RandomPermeability(std::vector &xi, unsigned int n_terms, double domain_length, double correlation_length, double mu) +: samples(xi) +, kl_expansion(n_terms, domain_length, correlation_length, mu) +{} + +template +void RandomField::RandomPermeability::overwrite_samples(const std::vector &next_sample) +{ + samples = next_sample; +} + +template +double RandomField::RandomPermeability::value(const Point& p) +{ + return std::exp(kl_expansion.compute_kl_expansion(p, samples)); +} + +template class RandomField::RandomPermeability<1>; +template class RandomField::RandomPermeability<2>; + diff --git a/MLMC_random_darcy_flow/utils/post_processing.py b/MLMC_random_darcy_flow/utils/post_processing.py new file mode 100644 index 00000000..4af35f70 --- /dev/null +++ b/MLMC_random_darcy_flow/utils/post_processing.py @@ -0,0 +1,65 @@ +import re +import matplotlib.pyplot as plt +import numpy as np +import os + +def plot_from_file(filename): + if not os.path.exists(filename): + print(f"Error: {filename} not found. Did you run the C++ code first or is it perhaps in the wrong folder?") + return + + levels, means, variances, samples = [], [], [], [] + + pattern = re.compile(r"FINAL_STATS Level:(\d+) Mean:([\d\.e+-]+) Var:([\d\.e+-]+) Samples:(\d+)") + + with open(filename, 'r') as f: + for line in f: + match = pattern.search(line) + if match: + levels.append(int(match.group(1))) + means.append(abs(float(match.group(2)))) # Absolute for log-plot + variances.append(float(match.group(3))) + samples.append(int(match.group(4))) + + if not levels: + print("No valid MLMC data found in the file.") + return + + # Convert to arrays for plotting + levels = np.array(levels) + + fig, axs = plt.subplots(1, 3, figsize=(16, 5)) + + # 1. Variance Decay + axs[0].plot(levels, variances, 'o-', color='firebrick', label=r'Var[$P_l - P_{l-1}$]') + axs[0].set_yscale('log') + axs[0].set_title('Variance Decay', fontsize=12, fontweight='bold') + axs[0].set_xlabel('Level') + axs[0].grid(True, which='both', alpha=0.3) + axs[0].legend() + + # 2. Mean Difference (Bias) + axs[1].plot(levels, means, 's-', color='royalblue', label=r'|$E[P_l - P_{l-1}]$|') + axs[1].set_yscale('log') + axs[1].set_title('Mean Difference (Bias)', fontsize=12, fontweight='bold') + axs[1].set_xlabel('Level') + axs[1].grid(True, which='both', alpha=0.3) + axs[1].legend() + + # 3. Samples per Level + axs[2].bar(levels, samples, color='seagreen', alpha=0.7) + axs[2].set_yscale('log') + axs[2].set_title('Samples per Level (Workload)', fontsize=12, fontweight='bold') + axs[2].set_xlabel('Level') + axs[2].set_ylabel('$N_l$') + axs[2].grid(axis='y', alpha=0.3, linestyle='--') + + plt.tight_layout() + plt.savefig('mlmc_plots.png', dpi=150) + print("Plot saved as 'mlmc_plots.png'") + plt.show() + +if __name__ == "__main__": + plot_from_file('mlmc_results.txt') + + \ No newline at end of file