From 73415111c315b58aed03d40eda66ebd429ba4f68 Mon Sep 17 00:00:00 2001 From: mohin7 Date: Wed, 22 May 2024 16:49:02 +0600 Subject: [PATCH] Add pgpool article Signed-off-by: mohin7 --- .../hero.jpg | Bin 0 -> 71837 bytes .../index.md | 372 ++++++++++++++++++ 2 files changed, 372 insertions(+) create mode 100644 content/articles/deploy-pgpool-via-kubernetes-pgpool-operator/hero.jpg create mode 100644 content/articles/deploy-pgpool-via-kubernetes-pgpool-operator/index.md diff --git a/content/articles/deploy-pgpool-via-kubernetes-pgpool-operator/hero.jpg b/content/articles/deploy-pgpool-via-kubernetes-pgpool-operator/hero.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7542050765abd451e65b4c871f52673626b0ac96 GIT binary patch literal 71837 zcmeFZ2RK|`+b=vqB8Ujlg%O>J=)Fut5D^i*6D@l0brOO^lpqMg1ksHWy$;cdh~9he zoiS#{+4;ZE|7q{}zUzGFd*0`qb6sb{ZZ)guKscU3jEFRm+KcWGFe2~|y|lED^sx1C zu==Nt%Q<-bQ;mb|Z%!l~%$%%cIDL36tzMdWI(Tr(+BkbNdpI*&TDdql`!e$~+gQ0d zOY{Bip@Z$;k@%zLAF1;Fci#O+v%h2Ye{vM$JUrZN&Hp+Qzo+w$8qeRu_s67~S^gdi z{(l&Y|9DDL&eHwwI{upzO)J-bssTph_YD^_H+L&7Ul%JGP7Nz}XHPc^tG{0Ye<3LE zW@YAKWhpDjFDT5*FTyJ*D9!gzxBfbd(to+3;NzieDQhkuU?nJICeCXqVkN*U{PLw3 zueqqG1h1f_g@CBJxqvXgh|phY{l_E!iISo@KuAPTL{L;jLO@tROhQDQ|F6&daq~Yt zqUG#qVe^|U*}wJlZ*_lb{{Jw||2SNKvigt1`Y)Pjm%rOq|FCI+8^HVu{lokMb&_(P z9yZQyvZ|K%nN^)_Y@L|3EiG-Gr1}2t-aqm8|9>?CLgOEn;(wAXf4^pc#*%+57-u&v zXJ-dlc{3+3GiELgDwE^VP-z{jqzsfb)%PEjN=o-P* zYgY-bUAuaXknq}d;#F`O;^z8I1douAkoY?BZDQivT=dlRT>qbs%VrSy^(()wg7EQJKv&4|@X7Hm z+dyDIWM9Sm;{YW09|s`*f&LO+Cn6>R8dTl_UBSc0ze0e2^(q0NDewY+s|Nz|s}y$y zVOa~6#=t(Ckhxnh5ivClEgd~O2PYRdkFbcSn7D+b{38WL zrN_!oG_|yKboKNNEC88jZDVWa?&0a>?c?hg@+LGa{O!AlxcH9=iAkT5Q!=x@X6NMQ zaCmfla(ae3NB`yv z58(69YiFwrUj?7jaVH||}T>M*Wf`hrf`DDq&i7d|SPF;0q)e`9)(UwlHs z%LHbbp!y1KZfqPM}4GU^(q|M8*^Ti8~{%R6H292bmEN`CFM0T%iABO5u#jjS(`@F zK8mg?sB)R=rnO=>QKVyYk0f(A+c6fQv>z&AvU6J3`^@Wb?;N7|a|~GOl@i}0xV~KZ zca;hcRhdeX(p(nGmHz77B`w5)|GPM@ur>Erkh0i}UmhO{!#*Bgf*c!z5~A#)A&FAu zxugoJwfzeZHznJfQiZ)11yLps?>I1qDq!=!nz~AUvA6`uXu|t1K_y0!-=x0@#|cU=TDlHJCTu0U!?RP?kaa54NrIEu<)DwjDC-F zRc2d0wBE3Eb(bJR7(Y{N8XSES!lPt+ zry=r3XTC+8eQ*x!Dn{IN3~h~2dQ$*h(oz{PJu2I(4uT9I-jVuzhHnIqC`Xy4CH9Xcn$rw>nz9Sg}X};jxgISXjOp&K|kmLx*4Q3U87e6ZF zA5dB7laBf^PnB;07Z<@~SG7-Lx?bowQnhH(nUr*jouyaasV0&~c?_Q0pY0OH_fe`F zt=VQTq{iEpj6b;v`p7NY*McP~u_?JqNXUxtPlvnQ-*((3RJPE?bl7jW5vOl&poJF2 z>!PxseLFHOz)Z+cs+&Fxa8XyF1pRx8Bg*;dh1Mm=CK={RHxFL4OYW0%7u*=~WXrm( z)_O{0W;2$gr)$*@ZALEIr;qH-J+HUD`N-mpshmL&*Dz*7wwokqhwP`4`vyuEsy7hg zJgMU4v1rGYt(e|>VD>DEUYUwj<7X%6=J6|v2l#AbrkNW98;O11J`a1VIibxmvX$8e z5h+MbdP-wk!(8=A$4GjSRHGU4HH%eewNnN6x~AOwS)zt3?}8Ssb8FAC^oG9m%A)UDEP|-OlQJ3lmONgsc4j(Q_7hc_abihsXW^8RyUnI0$zl2r8M17*A-$Q0 zQ&!apY8PK)er84~aAl9sFWU47xf$f>07}Z@kMBPQrb$AYa{l*ww8xAJArG!^^nJC{JHcFQv(1 zj#NhJPTrWGHFnm+NiEcuAhO?^iPOZiJ;fvmw(L(j+n8-|?PzcQs$W6XD)?1*kv)>p z)|G-;RlEIi>{OPN&n3he?ehm@nNanHEkglP`90xZqwu20Fhr$D1ipkF zWKvjdqPN3)%J6xh*i-qlH|6KiPyzz*&xWB+S;nOACijLtq~0a^-kZLgplcJ5_ri55 zn5(onIaDo}&WT+QvE*yzL`AN0`}j)JXKV_N0p+g0FK-{jJjjf!PuW!n&F$ss$WRnr zvpo-Sk3f^C3<}S1@IjsoZEt6Fh)#Vki|KxlYi_h1ZQml*6b z_D@QSIFLBmyjPqZm%u+{X-I4&T=4AXH#NLtrf+H5_TmzB*Q82CGoB)AMg)xu?{^ge z+rDA*M8X@EF0eG%kBsjdL}uP;vu^n>%*-!57tGg!M4xO@|n|qB2BrrxPKtZzH_}`adH%b_W`z zRiD@m_+6z`H=qT6J^1$)EnOOZLyn8&%+Nqfm#mYFiiGhc8cxf1HboF5wasW-h!30D zBs(v>Gj~f5*t)!9IGKA^@w2)_m~taep&KI52>T;UjAFD}6k=ZkCIgjXY@}K_3z8Ul zN$`-lnlU105h@)sSXO+}_-q?4i(YuWnbA|SEM82XymK8xgls;s*)Qht8;*-v1gyv8 zZ5rLvMEJppCxL9bMQHz;-dK>}0HS3|>Srs;Tpsh2aLYtZ!9}aT02$031YPzU_E94P zFZT5g_F{hG_7;hQ6|zIfC$a;AUcn67>ko>{py=AW)!^eE0btr*))oLV$vPsxVe)wB zP{vMz<62CsD%2PzI5V3Y=yScUAzfQW`zu?JF;6z7E@d{iRQL38#xvoudsImu)D>)O zB{>RbVFF~DhU-jV%#-kOfSTcKLeqk~c&~_dfns(^wCyr@XG; z)ZoE{g^XiFF2sCt)uXINo$q;kG=txZm(JRxSpnW!xBXd;G5Ui6@uRTh-uUBy{T|~ekZl} zagOs#D}tEj)h2$_C1`;wfc1dsbhbl)Ds+)|r4H{^#B!MWHk~1UX?q~!1;5?gB#fx& zi}ef#T)GO8Ui0$=dxz|M9FIX^dbuf0(D3M${>70W%@#X}AJk61f4T&nrUho1@&%36 zY4$C`NQ@q&X4i+QD4g+ZKDY#ReVpK*K83$V+YC0{M!lSK8axf2$69fyVbkj)N^&OI z!_w@nY0&jPaqMU=5R50pbU16^m{&;?&ZM2zkVFc9q%k*`ECs)b@fw9y;UK6m&%gnB z=mhKW73Nz@2O2Q?`2v;v<+|FGMK8X4#g<+&?!ZDssb_PX{z)S{4J;f54DHK-~ z)?0^lh3+}uh`LjtJv<*WS$WL(Vxly7KHfo%@B)sto6Hu4SL7mB-3JT4Hbyzt`O;SC zYL?h+Nv8JRB4TxCIX2sbBqD5wwW$U|?F6&#>jRQi$MWAY4eD}tuxm;Ltj?_aMkyWj2eZlKEVGbzUF#1+HP4UGx*|^-ifsL zQq&gRY|AN6AYq=?>a&hW&5`VfX;gNuDg%04nQ#KZex7y$XSPU}ya+w`7piMnT*X6= zP=-r^_O@mFqhHADWWM_n2Oe?!vQMoZ%!b`+|N87Z_vE@kEtp?tt^(^~L-hj<*^0V- zYP;W8JUUV-qw?H!5UmAb$?B&w`RlJD$R%aOB3;FNI>hHSJxj(P1Hbz4kti=H!O*cLewz zMLm3tB94nzcZa8pc@0fW%QQ|?v`AZ%-O1Dbh`!}ZMHM)3P_i%rj}8!U8!*h=swzvq zw}yYC&3&b87cn&cdF=Z#6&pWu^mXBsGTZ5krB?6_48vCgLz&!g;XQE{xS&nL+E2;d zfLPR$zlTv;;t@U&i#eSe!|`M4?Ks$@|c%KkLkagGk77&s43Xz*MeS%+7!I-xoj zh97RACaB+K`aKE1BuGmH&fmLEz~#~BH0JN!M0 zzc(>pv-qqUP%XvpjJ`FShY4Uu$ocRO*l@yAWdgd^lathi*2OlbemTi}sn*`KiJTpR zxx-B1lO?*TxSv-2E%2LkH=j*(F06IO3{h=Rc3bzttDX|qA;UQF*L*l11}1!n!CoJM zk1y%8&9V;6)D`KvmJD&NojeIY?Qz(Yr8a$BOtu9^=@MNC+s#eDsE>y&-tJ{34#bRj z^Wmi5YYq=>!yU&`0?hUS1v6VcPdHH{SImKfhFCnF3*Rjq+?03`ZF|@Eme9kCB~Fx~ ztr702(vsH83bqnnY_=zSJLb(~9KrWhslpO-k%o-oIt3NOnU;snKmL-tD;` zhaat8HlYU3q47sGd_Z#Wi}Q zgeEjq+Eh~)NpA-rws76W9y5f!d~dcsT13PMd!)>G3;dI&K>m|fNKOsWH zF+krebr_d(QLf?)!S>@SwVyabZPj2uBDA%V$`I9Rtp7brA0Zi$S;vo1)UxVj&PO;d z*QMPJ^_Eh%b>yAiq9oSuUna~iZlZM*X1LAvM)>QCYH!()$sB}c-$01u=5_&>Kgz>`|8FNm5EqgwG~0 z_VFe7G-*$wlrxAi@3xmOW;mkr&z1oe+JTf}@dLuOy8lMahO`#-{d z;!Pqg_KCKYu_&)5ib37JeF^$9=AMHA?O*+DW(`E5KEW8=@9pWz-K|TX zkJ;bk7BS1`uniE{=RIo!-|GIlQ7t;!PgQT!&2~|GOEA9~w7k-p8)QEVU=QJ{G4}RB zck63p1_!C$1PV@-pA#>`EROrzNR6?=9pKMpm!Qx3a#s%y^ekvOOudoJL;vr#Ne2r*SY*fdz0r~jqch`%w7{@>Jn6q;MZ;N68cnD`seOx5_j?_(Erxm{9op0gn94Jb zCCd{8N%sdRDZn2xq`c-WXiI7x)>H}~-)Fsu%j`lv6y)Y~tu!}4F)UVnNYQPNf~mdp z>O4JMZ+d_CCgJkPSzmzu!6Er2h~yNjgsDjU0lzq*%}5~auUOBFumlrg{2b?K8lJ*7 z7L=AFAg_y;mi(Pi<%{l@Ahk#+^HrCVYrSUbD*WohpLI9vUIA%Oi%3zAmAO2F+_P+T zbOe?omx6<8-?{VU+<|*rCobLfoF(F-r|BAMbPBNLzg&Wbwqkm(q+WLlbi9zw=?`gQ z0Q^4r^Pbhln>Enakn#m^m=adX`p8RUR`XF~e}Tyl_HorGoC9*fR3|k@9i)a!5jh%M!r|A7X|C*%82s)fbM-e zIbAs!*3r?W(Iu^-WwkXz^F+db>8??i!S3f5&e_p`w~E(%=df$$ohQP{E<6AN%JKRy z%7D;&ziy4fbTV<1TER3&4q7k39R13&8G(fcf)6RRvxxizPVD1+0vC*Lj@3rare;=$_3-1m$Et!Q>K z&lAHRjg92gvX^KUjCq9C$piR{o0wpU5>wXP`53PO`X9;gdOtS&3b+$AtnNI=uA4HK zptMIE8?wqf11Va$cOC^Ic+pu2g_F;+?!#r5&$FDH(veudY>i1n6>rJbE4yA;nLZC? z4g_zsxP+o|t9#M#J;X_&LQSRFn#GE<>8Yw4MaO>EKu@;uv+FX2<-t;pglZg$>@jR- zUdLCm{<*QMMqzjE#IB$AK5oP~AW%K#%ht8NH#7vP=04ErOVE~1IwAwHobURwtG#B>g)8<*4k~?KP93%TP1$huRO7d zb<)2~Ct@A&iX7bkE0CuIfUo0e45`trTAL?5P2=L6 zha3$lO;E|)?ssmx@mQ$*aS$D1ho1-9Gl_*g2O#-w**AY;@)xP6?yB%>0pc<`?&tk? zOCFcVqCoYsWGEZh5DoNmvHdT*f%nr~C7h_419Moon51K6P6E|&by-8|%BL@?UvIp) z=?+&nG`%LvEY_w*(wEo&GSOS-?Aol}zE8C&Ya=3JTC|9{w~REYT@swIyR@0`r3ZTD7h0XsN45gHo6 zZEArVRjpodu(+6vWW5A2x?>?r5l{0RfDOy?rwAvZckG-HVK9t#r7T!u>J-_Pk8Sti z^;Zjb3L4AM>#KJcenN{br3L2VSpTZ3wb}rjp?x@TQadRHtGj74pg?sT-WK}rK%PCQ zC%3)oG~}F#3`1$V@tp$g;rYA^af?&C5TmseK(+D@?@r+a*!S__?_`eB#yrY^MOTwLz#mWMh{ zbJ$gtJt82f@SG~GO8Av zaO;ZzB(S{H(`951b_|Xl7JB@kw0r&pvE!aG>S5J5<^Dp`f4;Q;2AN;^4V^mD*Sk{6j?#rb7UJ8^CGu-ITSBrx zcXSn4!Y6b)k6fC)d?S=y$M%aK$30Wys3W6|JuP&dGsAiIYnf#x2oK~4s*cz;24`0X ztGv?@zg3_9O1lrD41eyBH*sCMOX={WI8OPV2ZLjt5H};?y*X34XW3RXy^MP5trEq) z^^X?wG9$)U{`6%3m1oE%_2TaL)#=Yf7MA@vijdaFEiGFnCnkK0h8DIZbFHsH37_!R zeZd)2M-y0?yP6|li|--`o{y&SSnz7(Bv)pW&BdRd6aJps>-XggoMD7m$+aVM`?_Mj z`MMpH=7QNJ=$QZ<*wQ>dOxAjkRYKNnO-!aL%4ER!VePh%79*X(l~pIh0+*lzYbV1)FF**$mE>||epk(EkyhI0Y-wWH=X)!1H5!dR9eP%i&h6xMorI;M{n;?F zIJ1kp3EsZ3H%4c_6p*Ux{mbsAHUYYh$QuDVuuU2_sQ6@)2#U78i5K+(HZ%%j=ZL?5 ze*^9Z7@LY_3YxY zCO<@4U}uI&At~?*!pOz_nAVH7i05_bU!!d8zF=BiT9KHm%4@?Vhyc%htT*bY)qX4A zkPH(6Xs0_Uq|QNcJx3wpCzFO~Cxz=B?uqAK;QT!`)XRDtD@r@i(_Zcp6q}e`pTce# z6#BbwN^7}oIdcaL?W$V^Ghj^Q$WNWKm?>B^Msc<-p&N)4AoN78bxrL{?j4kbkBvRA z2A`ALA3sA%2QiV(Lif95PNab45vzlg&(8#O#nJ(3H4w~b>%;CmTfPJ>>y-T3#Oxm| z3-ZMT$dj=8W@*%D)U3(ct24ho6Z@V$wcqym%4sL(^mooQV~ z9;}+7bU$ecS(P2@ZadYE20Wcj+>hx?#XvTnoQIzZ8_oITH?mfNljAXvjm_+`&(+fM zr}crz8{33um3ra0haWFNPtLD2)nZE-aJ;J@o9Z&bm=HeHSl4j+O6vfUrS&#a$eq9GqR zts#Q0lw+YBe(XRn<7JS|pY;AK&s2jxL7U%uzAIKjnkAkJKQSz%YF zvHG~az>Z>*hGBVua9VCa2{kfzW6Ds?lXdzVZv9GLXUHB(hnG^^zoG0Gt9C*9ph4;^ z^QdaKy}eEwewY~shP7+SjBp7K{zhf+t?<4rVEk&mq{>>j1fAb7gf+loi#CV$#|aIp z`Y%k;M0xr9P?qo+;^|fi3T*`EiZvx=nrB$ zsQG}xW5%sdiAsrzzO?1lZ1HinA9b}Q)pIJu?RC?1eSt0-(EgVwYTxj-RA){T&{hO0!@2Hz&l=9R3s8nlVX#w!BO$*4l)mh!b!}^9W1=j{c`>piMS3%W zt0WTo^iLH5eIR?QcrJ973VcHP3TH#=Ins-P7$a|BIG~$Ub};deW9m9D`eQFa4ut(} zjO;SP70y5PVc#2BPamoxNj<4?rwDFf4?iDE!i_oBFFL-(?Ir+NPuDm2mPyG4J3x8} zzGtTi#<&S!dHfP_w=?_r)BUR_6vscG`izHhJMFkv#ikHMC=(X%Gm?Zo($q{+2vJATh z$QwqoF4z5xC89{f025zB3S|`)rXRlKzksgydjnUBHyM@tqDG&f*i8WJ@u6G9+ zDH+;n?J%m(7wadsy<6WT=;HvZ7QlS@Fq~k|x*LHgkcfHO;PMzk@6bFDZvGiqI+gr{PM=hP|wT&YT z>ci|c3E3WTFkU=!We_tV65)mBZ0)~pllm-mp-+&T=4%uvwi8424Q7x^@18Xe;6O7` zLTzY~<66C)-G$Hb>%})=Pq1_Z&C^6U*l@JPQZd|$h!xSl7|-HfqYtuC@fQ>Th%6q(3d zTi@#Kg}fj$+YAinXc9)P9q2fNHDC3N zY6W)Q-e*xwtDDy8IwvpL;?GkM05H=zh%Af4;P{;7Y@o-Ufe?3B(h61HA7!l+C%&{? z;CChc;G3v&ll_s#Wyx##?z!2sbK+A~qk*+kN1n9PeoQCue7lsee7@BDIb$IFbnz}l z{=7_h=x)b08hToIpc7i;W2!QA9A(mh-i7RmKHkaE7v+lTP&RtqU6Ra|8P5#?M8ktW z-GM9B0p#wd&J+`Ia_sbL(=Sh4BUan}J-)u*|*m z9|8T;f(K;S?H7zECSrkU4(6jec3pBbBGKIH|`*r+h0b@Orzo0lYGo%UhLUq0pcBS0M%g ztxdnJAo<8<+0r#!LyoYFauRcleJ!;a3}A?604Pbg?%ewI5C`@#gVtwH#`Lfkhm{3T z)JxNS$vyM9a0Tq-(W-(UWYI8t#hC*|a_o#GIpC^y!4UqO+d1_?ly`9_$DM#(3m$CH zJuPyaqnd_!bpTB=z*{B@7rgi9-gt#yjA_C#{@}rECqtB)Q3)L8paTeZ-3O+IV^9>J zwdv8sO|IB)PTC%OB$I0Z)Wz2M?G5-sM65KcmT%jsWa~HpR*flzXG0!^~P8X>Rp0v=#l~h_6cUd zYj$KTv{TS?VDGS>Q!zL5?Gs>|iXseJ4~87}mEM|O)OiAWuS-?yWsn!(#9v!5?r$EM zIk0cV$ECMmKBg=bR-w54ZF2+E_pz(l?xcvXLPFibKgnyZ`L>L%RbQx0g=c!R1m- zsPO^0sxNSULDp%8;w|c^&5}f9!cUfn69zT>4gSx4Ytvw*05Xg>Ri$l~ZB?pjV^p2s zvE!@iRo`N?FO_eABVXI0y{ic|z2^I*d1OiKQdLUe%6K25=;+20Hy!H{qEPLcy%0Q| zcAn{57xY7SiEd{7#&ZO)G2;zG|{f|8b9MB!vHJ3VzCd-dKzfnBGE=x0&w;pu=(Uu5 zdO##zfDF^GL&NSH z2ank_lnCw!rWXW4TD2i7BSwBfH_+ZHq^Z9&?M<+n+dfIHF|<*Fa$oIlc3bv;vf9I6 zE4gTDf9JLJ{pRcZKSm@-};5BD;Y!24KIIR=G-V9Hf;IXW*W-xu^4 zFqZ@vA@2pgFtkomexAxalkJB)+t%h&L0@i>)rd@Aeg3260q^kZ(ZqzXnUUZod2F#r zXyd_2bTY%0y1-AfLW9ag=Fq(l;RhuJ4a$fKANPliBbCaJbi87d8SCK>WR%50ekqvq zgO|1Li>4Ht27Pl7$pZD(qo*hUWkC;0+-uSqY*Gy0SwygJ?zTL@sFIjl)v{ByZNaD-$g-Sh(%DMAO^6L8 zfcz+Pe*0IWz(<76B$J885Y^!mLPoma@8Jh*)i^1I??28+I;L!a;6HeH%d4B6w@pyBear9p3Q^h6TsO%(P?=m8%fs!MGqGT-Lj>7 zeGNn>{UU>Jl5+H_dqEXNR1KdEnjd+pJ{;`1XC2tqON$wgIGlTDO4C3g%~@<)Rky60 zG^QieLSe|-l|3n{o`i2h$J!WR>ndGMQBh6N@U8mZZu>iQy!wF4bHFW){cWV+{jC&a zf8q&Np2wSgMG-Mvv44v2#N~Vs@T=Pfr& zE)-T}{U!tR&A^1e#GJ&UF|2v5W}u z=WGIBZ6tYKU6ln$+%j!T4N8F}12iT}P+Eg0-k2ia_S{!|ra0N+`M0oA68MIpXgdB- z=A;uxO6_lahtx0T}O-2KAjVVz|YiUWdNk}T7hvkVAk>mgrwI#;Y5y*^+| z`Pp=?8+=RTi1bdm7#O%i%>g5ofW}Kmt_P4WQtzLZvVWkvm&2s}12!u^$CQOp@*As0 znJp?mo+GW0-Q$O%Z`vIOu#I+~?|ID2r1j%^jZVrwDYt)jR~0HDOS0JL)5=xNX+Zus znIid^&NV4PP}cQ&@uNp9nLMD#PKGK;7#tM`RSefDeD0XVb|?V}NVB!TUiGn1|K-5c zbMZW4ah!3#;O-2GcZ*D88K%$Ep00ViIeqztZnySIuKI<9F>mr&h1QnFv!Z*m8{_*W zcTmJz4`M4B>Aog*KiiH$l8rGwz@0hau&~xS`kZP?FYm#720!d8Xv7T@jsf5Y-RWxb zo+Uc`gOWrEJ1TS^n_)eI5zi5gJdbe(UnMghSUT!l*)U1F_f+76mMgt%+$Bh;4H2B5 zq~#OI(hxKZ>qQR@$&Z+SczhG@hPaiC7Mgw;1Do%KQ5XpSB6zPUcc}d9F|=;(*J%+M z9_n0#l`5>7rzM}Sm#Q0luc>bjgN-qL65-fa*3tc-+h~n-m}#+Qg?OC4F$JThNX37i zK;i_SMRuo?EWoHXO(^Q)pAKi*7LD|DJ928toThg+NisE^Y^U6;wJtIss;F%rHtl4% zqXI4?MB`qT%5wOKh-`5*mBrA1h72g7R~V7Aj4=zx2Mi3og(MlgMT1k*ogJw0Lb9U` zlW(m9KQeai?)I0Qpwmg(%?16^J8~PA*JoG#FQADZgGzN=wWU78bNkg>0aq~V-@NLJ@CUy~;6@hek8#^C0dNQJ z9GUI25|HStmUJt72G$IfU$C1-i4mR}VmvQF{6G}FL-vm^+pwIa#);Iu8}u>1v`!9B zOD>+xY#$y&Z_3?L4~;u?=LjmufF1M9dm^KoWJUyObX2bQ@9Q@M-@U}#GCV1$O=6Xu zi5(TTj!hs}R1s*VYC$0v*FpmLDB*Ua%=L99iB2gdG6vJ+S{kY+cHm^JiXWtg_yQ zG<2!twvV?`s>-jE_wPx#t%U02Ld{nm#@9216HA>I1*&Ned+GJ4ubpM z6?i-cxOG!Jyu%^{ejxOKG_!I$K&ZryfQ0n6Rvl+dS8jm-*-rN3FV`PFyiu3lu{FWuyu4d%^=R3Q$+OP*Tg^_&qWw#4^zd7$> z^$%7|D+Ved-;ma2H7+v@W+dn7kexKC`MEa^H(ykJVnSJIz^K#>1u&BP-|&Ff_O*H2 zE(54!XJHQIe(zFz(7T|LV{tp(j$YLBh?96s99He!jx<@}Q@qr!YR1+kHJlWD%@A-M z=1rXTvSBtK?n7^I_q$PgN?HdwtaoEh>G{z4195PS!A z*HpK~nY3;vm}}AW(Q{}&c%cbEHD;AiKV|4@iDpGASai)AIj)R5BJKk6VA=$=cB;RiUTXkct=g4nIw5ZQZuG+mz;xQ?NCdxmVV)_$ZDWB=9txXZ{!i>o1*} z=$2DO&~@^ZCMe6v=&Yp#sP5B#R4%k}dClCbc7?2Qa})43{Mza+g|I>g8;rf|+y6Pxw4E^+eNg&N^_boc?nnH<%reL(s~H0AvR^QgAu z$ES%eu6JYlpKQ0TjPO?uZ}c2&`l1?Uqs4A)j6~&B?YMsi#N>pm%fA|P`(H`V;q5oY zt|gx4V41@2yJq(O$!76;9V-l*Hz6~HUDEcB08l)eX9Owz;J*ukkBQ7%AMZV*l9CF% z1nqZ@?kCvm(h7NMaADG91%bPA>!IlT7fhpzyU2Y^HG#C&e!Yeg z;KSu|nr8UhI15SQFEW#-Wa}qqS1Gsedj;5ATu7i6*RZaG2x~!0_gw56xG3_v+PP{8?x_IeEmq+Ah4njUcE&cH zUhvV&l1!V-E{Wtt@}NFh(x=YDA{%4@{kOnhJrNdwjK4O;FPpL?MO$W3xuw8lBv+l?*s2k&S)m{1K|KZ)y+AX{xt*<8<|c`1_{ih;hA zEB|#|=q5>vU{za&7;Eu_J_iAb^%?^Yg8v0smt-=i`P%)2vd)4t9_iB0g6GpJ`v$`7W+%Yz!xa zkK~8_pnBr;v-d4>X0akXzL6GdC7f5SF6EC(~ ziEuaBNtU!7^GjfPdgIA=kpOa;bdukSI%`ENAa6-ur=93KYVN#ff~yY!i79@Ke2Z1J zSz87Q!Q*pEp6+)p!p0{aKfSXI*Pw0~Y@DWglE9U#t`8SV*2q>N=Nho>^mP9Hwe6-j zVEFwT(pvvb?`YUs3~idafW%&ccv%H5L35nY3lTqF_aLdkT@ls$RORn~q)W)-eYkm@ z`2+(A5z5>$%cd=C>^Ed>yC*ApJO0}UG(`w$U6@dT>RhP3gF&#B1@V#OVIP;&*)IU_ zpb6!O1CANxbm)2mLY+ZmW!+2OfFEfYRC#taAYff9%h{H}v=%KQt$jyfhK}2?6z~R< z|4=TsU&jyDq?vY(j_M)^1n3^#5z;kwmu4{FNEh~^1(jZF&^6k}WjN>eWX>v6jVD;q z5!^O0v3`qCsc3j{eJ(>HdQ8d1DkHbpAU#Ew+&UpiZYzRF(qOzNm@l5|kvyWnoG9YCu4p@w zfX%kf&6K;BPlArQ{AoqbnqK zykqN;%nO=@$X>-{p`)o{-Zp28q4OIrU%c~TNvCJEQ{Q3qP`cBfb!QlvwE+MZAKcNr zmaAUMta4Q>U!44S;3&v8a!8#2SI4hLs(3XU!SQ`kTK??R2EU<#BU^k8b4tvHmwV`w zQoLV91st;}!OSJT$Dw*3&)Xau_k=)Lnv}&lhPeo-wgzWzknZYAN^fjhJ1?UR-wrKT zS{?as!>Y%(9eJdM_OX(zA}$r>Sjw6f@j36Y*9W)H{8ZYik%1(RAv+nY16ss;bmT_oi|{_Lr`Q#@={41$-g5sFQ)Mjh zNL}Uo%H9>9JOK!M`Kb|d?&&4<5L_ZGV#2jIxWL7HurMvb=9OHxa)!cjw>Os^M#zNt zoc`*te`-j`j)|QeSJ%zU>MeJ&sIJ9^>~lLTW(KCqt8esd(=zyUyhkWj%=3m6d*m)a zw!-hNZ|lx=sg)zKRD}`(L)mCB4$xT5-o?M^=E6MqKK{6&65An%ep2jn1t-xuBN3~S zYV(za^6tYW3tHk@rS6F>hXhPy3wNHzXy0G+P+%rK^RE;8VniKfW#19)^Y*BTSKyFH z7}w~?my6e!AML@HM%D8*kH|rXp0`S~>mVA79);3J>|UhL)~O+cOH2P*58FjdMjz|J z;X`3lC-ZV3&kJ3}=%X`hK~EE#=mqYKMDi~EKq&5&44+j(1UB&6u(}*D>uDlz>-e-E zH~#J3h7+wrHqR8Ndlu~~EMKo+{3$46yuO1npFe2#@xAy1!4)S!;^V zvT@UQinOr*`gzpBt4xZ^`|#j<^OYleWjhDvZqj4h3O~A z2rsP2a>!SoH~lsFpNdGmEkHFZwVe2NmRKw24SnBFRPOt}KY+wvF)G86K1*CV(?vpN zb7F5&KAa;hEXL2XmO)RFEkN2>wbFX!k?8ca^Jwk7_$(Srw>CvZocnW?tE!64bvXOa z=38<41xfZ@d$pKU6#&I;cm_8o#T zl))j%_ID0+rpdO=Jd0D!)tf^{ zdW4g)77>t)E#|zN?_8R_4bzPxYZs+ra};`;n!qB{KYH*(oMHYW_GjkfAuYYK2cq)# zreweD@xvkdIN9*j++n*$SD0-o98?6g5f+A<(nep*RQc%+ITLy`C40wG4k89W-_^- zX!a`9!fSEQA)gv*j+*XYU!%jU7%pg&Xo%|NIJ=f=J0iq%c#hSWT1x(qm}BTB`FSxs zUmw=ydvAqyV#8rdo{HH7t4z=WxpABFog28OfaJ$?K8lU9+loiet z8&`bOf$S$37ADO`3J^SqMJthvzFo@sp;;oUgpzBL5q6CpYWX2Ic%B2D27kdYq&>W*KYpQ4$UMGGO-S-c{r zw54iLUv}K%e{GlibL-^)|Bqo%BCj*shr?8FPV_P}#X3w}r=G}|)HxUG0@-iVyAKEn zfL?lu4l;#ve(>O&?l6g$({!n(m1MmQJbo6Xi1XsWl)z^Fy1B$eA|xaytqXB*S8 zC|4gA;a{bn_^N`oIC3sCP=3~@*DmtR$nUgbf5EZs<4#*xb>MWCm?Zd3tlrbxlWys* zycCp5fZDXnN%cuocGtvSd69dD?Jos8PBPuAhI>$7ZU?r+iwa@(bge$Py@OZ2R{GdRziAE{szNOUJ@ zjce0H{5&AC=E};t8&m=uq_T(A5c4W}oO;ndCvP%(^frP17#1eYIY@-eogG!iOZQ7E zQ#o42vX~J@yI>a%*d7Aw~SeP3LG7CerG*WQGp~Y zj#a=@UYv>I?N=t>)Zr}C9zd-e9`IAsPN_H(TU|+aMvssoq^CpAhgb&>z13f`Jg0Uj z^efx;3JA1g3*-?@6dk$72;tU}y9tvZKCMLfV}yqU>+hw#fV*||_sDg4nI(8%*^$G2 z;-$o2(kP+EFxC5VtnT_WDjtNr=Nu(5dKje*-rlP2UOsg1LmovHO@0;EN$`Q!fbR+U z@|Ver*j&rIZ}^cgU`OVJq72#iDO@&hy?|k6NGb z9}n4hJ-=jDRxG7j=dBayM{k{g@wf6uKOVAQ{iqOYc<-wC9nQe>0;WlaA5&&AmCTS2 zfcF43KZJ4rc&I0kG>KksefXk|B7wwg9f!D9Yh{(=;peHLoZPVA$>7ccZmP>_GZyFE z`?gumpz2Ps)3AjlCM?&(MHd{dj{hDzxaWv$q0~i;SH!_eT#KM)LRB+q=aJR1lT`WJ z&c6?9Lhbl(w%01XGq0-Z%#Yw#c39VM3r2gq@R7(`-w?9l2X&Y+q_~?+>F^fl8QUh@ zqH$LFQb;9xTXSzF&OHMzd|=pqtPz&CQcI{Z%*#@nSI zQ3G!CKH04KX$vB@9N81JDr%IzP>K3-0KV(vUSB;#@f|1mQN;OU59Dh>?}ze=g!*uy z&dt!zj@LeSP)tgO`N>ul(6Q`MV9RM5uyE)1FRSK2Vk;C zmW$dvb~q70dHx0SSPvgHbJ8LnmuUGT5ZTp(xHVed5A}EMB}o{Zr_HD2^CgFXf#GkP z$FC}IoQ=iynDvH<_dPu-yl!ue zoN(7XC2PdiJybLRtK$F!C#TOzFr49iJ34d@1SY-e8suapBkOx`}=QDb< z(@SJyUl3&mstFWKrD@ulmRS$`BbdJMQB8|&^?u_?i)Ei?yR4XXi$Xu@rbFqim(FY_ zzJ4+5fXYJf@mJgOV1KjV=SNbTossdh{886-IJfu4{DaeTpA)eUzQo?C$RS<&=GB%=WzEII>4h4%@BdoS*%r)x_NXvVVKxMr* zAH~DuQvxtnLJd9N>WbZ8pS=qd%rd@tXOt^;#(Iq-ppG_9wpOM;jR`$Uw|Gv`B0j;5 z3C{HmnEsYu*`~S%Z`66l+Mavm z@uQ`rW6+l0oj&_gPLYrUwb;|K^V91rewI-j$^t*p-z7~JPWq%dW_lMNitQXOJ+Nzj zvZVIA=b2oFFI)Z$!fIVd$J^agEw_aM*E?G z&i)8Dew!GIHNSPT|G1@;AjW5h7@ut^SOnxtQY9a2FQqmgCGBVX8-l^%Ldm+zBZq9#`M_( ztg*yWSkHI+pWs$hL%$`Q9%NApn^J~qi$q3zM9#k!Nh`j8BxD#R9C3+~JJm2XJ8@(y zM7p%uoqfI3_X@QU%8^q@*Ci#j-5ql9uYUp+LETht>@ zDb+YOw(M^o)gxW~SsCQ&hPP+t`)BwqLWUm6F+KFA^YHKGPGlx=b|HTI8^Eim5#Ih&3-<5C=L?Ao5>!Jj26>)W zUxWt{<`yt!HD4yDI`6y6GGX$+*#~2@nJ}g}MStAwJ>wLUR$pov5zpq#RV+@6)z(#f zBkXVf3&YP9?2^L=t;K6K(!fu@KJ=zcXiQDb5FHBrQf~PzwYXxfI zqGNf}3^J|loExdM=UN)H@+pP!TMdRBPT&o-$OCiNF@YPRx71tv!nH>K^3hd2jnOU9 zO*qA$X^sKpm1sJ|=TX9w8tJULY3nh%?xPnzg#e8}an zFuqT-gAri9GFm!81*L4 zT|e4f%mX~+2i|W%EZ?F|J@7rORCvHIzST>MN|&cmmW&a&lox^5^&fA8*heARzYFSY z74VZxAWe1pwVjJ|`$S%o_heiZAH@!z0-S*bXf~$CbpG5$a%v$gZ*D^)VrTaAYg`DY z=!_zw8gj#?3efR_*En~i5~c5mDO=UZ52hBsE@mv8O@0>Tl{EN|6S6#l_*iHT-Pn-M z{BFHrTr}<-L-v)h$Zwk&d~KS7GQ7Y3^J;jRUa3sVX_d#&)Hx@SWsnv_x^c(;_=$m$!>R4;T&oAsYYw zo_JjM-C#mlzy-<$U!FEal-kCr1Cm2o?5gnz4j5hP5RiGHh-H=uxeAlI;x2Zh1@!`^ z9I3wiC09DD1qXHI_?lV`KZz|3r5+bmwQSxYU;E~vfOR(Ik~2E4#U`aNb(yTan85_jSjLz1)MB)c}y zb{Bm#I`aC`#cRK%@|uZ`bCat$s_jhu*pGY7m%@hM3cwuL=*wTNRFMzA%?hlojqq;p ziX4;#z|{M&`3GytzRVBEp(gzS@YPA)3!5Ytr<>|Ey274lkAZu-hn?n?wDD#a0_)zd zs%MDFzPBkEny(zmxIUOi9lNny{WP^!V7=*|x-u94!^Z&&8#CkXhP_nGBXT#1o6@TH zt@)A^3f6-V6E$H7{mQ{_7?6`;)N}$cnbUc(_vYk1mXWO<$Z8@T*kRR;| z%=$HOx4#qWuJjXY64PGUOq_+4Ps!^yd0j!dHAV&{j19=Pnmy55%95|1%nc|r;KQKo z8s9Xl8KJ;}o=L`Q|1RMEKOVEMm3ZlFai>f_vqZE~6?>}LY3Xdb*!>dTp5USebq2Fg z{co9){Xaj68&p3>7se>iKjmJj3Al4HuuWZ1&b*B_`2PC6s-}!3F4bR-dZUIzOSSPB zYQwUhJl%d)L%^Hyxj^Xqch~BIoccii(W6iMj~{7#z5N0l=<*%gX-2cGU#gW`qS#(T zCr-6=nxu7pW29WT{7a%Wb6Cm-M>myb`AmL46siXlW#$9e8x9Gt!hMZCP*uisHvgS@@0O32tJL>!S+mwd_JM(i0D; zK(gU|Qg>|@5U%q#k)ascpvVWt-Mb8cmZUGJAnij-r>(<|xg?bJIBv!Z1X{W8W8J5v z8f}(SD!viISbzv{H_wSTNq^1!Qtej1~$mR)gPkIs`m=TZ)s) zYqF6iY!)Qh9K+3t*1pz}yzJMI^^DGn1EEq6w=BI>Mk~fh>6%;-aZIAEeAN)wJacI@ zpgk0TJ(fg1?yTWE5z8FupKm?R^#kw8dnT@fTL>L6YP=gO>(MlCMAQ0p;>Y}P46}#I z{lF1Z$d2qbpmFOw)b5|(fY>_h33w(ESbW)>f!4u$zi0SZwV=hpxswQL z2;n~cK?tWstO;|OpiJus!g@O$pRuqaW~8h!ZkI~R)8z5-UP%1(I$?UOmw3PgIlp{k zGGZWo=c`ig$22TTKGdS_|Muqcyo$WxI(qtXS@yv*%eXO+} zSv#5Q3DeJ^Pi}UGw)|e{=KV&ppXVTy@Nzz5n~@9KtUc}ens46AOWscb=DmEHoZAg% z#U}Eg$aXQ>Y=;_#M|@+pb~(yMo(Xak+KL-o2VR_`1(@qb<3EMr;fP@$x*?QBnH1}((CcJa7>_oKMbl*e7x84$nz6nkyNdU1TMvXx7n*- zp$oNM!YKQD4aP4hVs$IXEs0SIJHxs@BLPh6;Sy_w9N)#iMLBK$Y|)6Mm%T|}!na0c zK04xtq3yF%u{*RA7dW4P7f-|`3iET zxe2x$aJ}w4&7A~zAVEm#56LmUoa0&Fo!*W-Dc`M_d#`l6+h`!u5-&2Zl9Au~aHin# zVE&Z77H7PnFXW3ag5$7GV&2OCUH_|Cr|C+P*or;kO2av4RVoHXnP>{HIdCfMlo`$V zoS|%o(1?kf-}N_t8J;@%k<@Mh`7TxnZbMyrYoK6He6}C_)m}JCcy6)ZAX^$Mb_Cke z)Yf!nP^NQcuUMMycYRixnZMv;*^qblZ%RK-FYH~|`JMoa*c}1g1hq}ZTq-g-KrA-q zg`sPIYH4TDhvrrtls%efqv-<>*wEL1t?-_b-n;_3fb6>)(oDLZYZ-*-gc8>?Hz0e~ z?H8IxzFB4vVe1>Qqw*F_l;du0of$nvS@y%2r#zw!D~&4Xdonl(QiGAiO>w>DZ!3C6 zy?J~>2YmDGzPYGC;{Ej*%W65CG(aZ5E4WUh6WbRF?5<+fB3WiDETAc{$%K_yzR7LJ z)zi^-7a)d?xn`3VMdCZtRkK&|{`2zJDGCfwCm_`6B~8E)I{!3|J-asREXUyqLhB;N zCbirU5@^s)0x!vQYC27B9iBt#|hK2ZXJMVAsVYkWw!G)GkbH6^8x9M*T74S&t z-4@8L#``bSppFuT0SU;ckS?I?zRU3$U(uqPJh7A0YvQs<7-0pKz8^B%Yvhf3Je)YA zy31{7D^kId7}^=Hu*;G^+cm7NAlVOn7iDmF(iw+5Cb$q}YY4O#Nu2-U)+G%9S&peyB1n8!|?Hi%Gjt_0ZZO@sRGhW#?smAgv z6TZ!}6!xox>>h&s^>>Q0^k?Oy!h}z*v8eLPPM03evHy+2F@t8?;zN9dQ#U|2o_J#^ zC&9#~MiGt^j<{D^rY89*Zlt8Nr7um&Qk<1(S9}V@ij+*3D-c~ zTqoBbCL(wbg!FtZeKw)K7xIY@`*!RS&v@X8oFAmsdsiMy&mEl7?{&jpSNE4Gg-es9 z;+_eQJbZD;JQhZ2r2D!lf@dRf*u_%l*YHy!^x5@CWC~LLu=0K(gM8n_*O){p$r^Wu zCC*_0XLuV6)ns1ER|A|Cm|%eO9$qyo$qL9{YonqpuAxJY@CF-~xDy#u-3mAtPmY zrmCx(hHU5Gw~Gj|z{@Jt`N*|N$DQF2B?bDBS`B`T4{75TFdpKvTe2}NPoBRsZD7-e zP(0x!CyMM%kr)Pcc@K|MHoUEuzn1n~)qAma?crwQkwW)Qp67f1*9WzqXPxh#!#8WL zT`34Jt6ZmogO|wAF!2_xG{q#dCy6r?c4na$RPHAw>d10ee5w_4K=R7`5+xBI|8*dY zl$FPuz>y_-`pwAG)qCiDkbTIhr*;k`M48xY^pbD<3P3erIgxA)>ewXD6H4sSQU$5g z_@lAvnT(-bzhEMuZOyN=;UjG<0{?-++F}NLHN1C!2upox-JXnY4n>rB(7Zy@b{Dq; zUKF3%k!tauS=U^qnL4hgN3aH5My|fCqq+m+#4@<^l_`sDs}OT?8|$fOhE! zcr)=VEKOW)=w`6M8kO|y5@%i&el&~6uRDFZeSJkf2iUYy-_Qc@Wi&F9=U1Ol0N}Gt zyxft{?%TbXU*9-2^Bx!r%Ox9^a%yJLN^JOEf`VY`m1j?qUEh1$Z5i-;o^X0txP?@% zvDHn*s8!?Qf_dskHoXF*?zz1<<>7p?LfYSi*w$1gLJkIG0TaSnT5}14Y82>!-|}=2 zK*}d$+w@e@aFpBIzas}kf4sTlB;NxOM*H=Zj+KVfcdCA%;F(|z1FMs>;lv=}KG?mD zar;{5)K`lfJX$!?ZudFoMsBaTaU0dI_H_`j+q{;%o_*L?S0~&fZSl%*N{vuqq?sLS zMs0v_ly7T#V>cJ^9dRM}(Mu(RP2FTkA}w=JUP*K~58 zj_3?RPvekz>PZ>_fkPuDzNsU0pJMJk^3BTr-NT{3?}-t#;d^AD%yHBdc7geCz~uqp zf3wxr1dGC&c_laToA%A8t?lbKeMV1Xai!Y({L&CJ(tU$>u4gx_NM~LL`jfc8pdBBz z{D&`(fjKLkx=qj|GJy@%0#lu_xg5ptYZ|fZjI5qHLrw;O=ZG`=9~*!EnQ|GEsiGo; z0m_@zXKVxMg*sKZ80Jpl8sLZ7@BZ(sEQRHCN1YjNeE6@KRC>>Hx}IWHFD9QUp+?H* z>WvsLd*`|xW05rc8&po_gAo$dr447Tr+G`kYgnFUbjfM#?WL^D{zIxkXFgzLkfxx< zvQc=Nf7-(znE91|(8}Kxq^wipi@%ut-Fy`PZ(;Yp@!tLq1SG(8gn1*sJ@)ecGIDLY z+sAG<5cl}h#M*A`yU~Zn{%%dJx#isL{ z&9Wh&6OK612SG$q%r{3(^HVdy*=X+m?3gLN&rq-7ibiE<(Q$$P00hP(j9C2}>R2s* z_~z+VMvr!WU^{qH#hUbX5wLBMlVm%u7@bEqujM6lmuh>p9+lMyG~e2n4VzXBcyxdF zqw(_INdqHe^}7#o}T9;(5gCzP;@4>4rGV=Le7ERLKX!|JF)#CPt%&l@SzJ*UK z<|z~{U^~Vp%dnl|Y?V1{95y~~ICX20?^Q3+A3g#2phiXaOC{z}r|Xo+KV&aky|Wra z5zO;DDJ^fi2ILXD#pG*O+>Tm9db1SsbDD0-j!wC#cczK5EA03T!}m&BqtDN!MalD{ zvkqBC(!p12UoP?+*+ibvF`)Y4YxJA}ddKYB7W;rz-oAK)(;FoU2j7rX%6dM4eOR`S zW-*XgGCLn3L;dJ}uaY0}dqeBn+^1(R&?TG=B&oHpW1AyhG1Zr8emA`#zxt}p0Cx+* zakyVQ;}Me5R;=SK=(Mn>mci&j3%P#yfS1w(y_Jyk1g`mU+5Apt(p~aLpNI3NxogSi zz2A9yvHrvo4>j0GUz9!LwhkO>bcc5wNrjh@kX>QKvEqsN!9l*3R`C0<1O=Wfm5bjV zvOXyj*mhCo=%XlJkA1e76=xqx^oPBnBKtumaYLW8Wzoj zhw8<@)QmkBP$6E3z@wUEzAc`tgsBfZ z`9D=O86{2%XQ4wT!-t8=FUOt*tne`fZ19VNy(TiL3!ZXBhewYEX@6N-q{-#c`Rv!H zZ9@}Ox>-hRv)xfqrM-D7vTl4}3_g1$DxMOS+`u8#<+E0J?@V)(i~|-(XgTDyj*Vf}ms6Y;IFTqQ)Xbx= zX8ZysLS!%MZN2G%+ndqpa4_fvZ_(h;7+K730bEzb4s#2H*$gH*C|` z;+petn0KkGW*pZ8Y53l7{RB}i!(dU`Zb$){_Yr0^+F5^Nn>2{KB>URxU8d^UvJyg( z5K`B}l)TX-6$i}koMWIf_icwfL*K%G#4*DLYc;ah2}WJd3=ArvOd!j%G|6952ga)~ zW_;n|w%^m?9f3&JseI|g9!{=MiW|e`8&JVG^^zOKUuZbXx+PFxeCDFGWto!zV3aw= z0x;;Ku2)1BB8Oi%&D+(jJvq};?|8M4-(!s<8FcjPrwXc(s*Z9|F?|^)5#erS+SB^| zh-GPX0CAO@hzuOLC3~xvE0A>d$nS$rx7LyS2X0d5T=G4pXMXJuB6m6gO_Vs!Y#Qv~X`00bAC0Hr6XIezIte4Pk9u40406Dfjn%F~4P_O#cXG~h18x=)^clp3) ztRC@#Vntu~>zCXYld}anIL8oHaGzeBf(jM>} z`@T#C+&{9IIB^uu9b-3QFXyEPBXT*TQn)*dTNv_@r5*uWpj{a-yJ>XW+@smxV?rQ?0(-}bBkc5GQ4n?;M&A}6~LHD%S;;G&Lg`1% zii$#ugK~ri%Vp~Ji5u=h9~U7vb@6$MaD(A-{-s87WWp0t+K@Xj&oAUO#FbT1@x7b% zkp)PolN%XHRQd_?aMy}$Ru44~?f7+8%xkGJrLE;_w5WPh&m&I(ZqRxicn(pppz^s~ z_U@@p7yVAO`_GLEdcU8Hok0fV{ehN@KO*4U`%@jFzxCFI>QB=eTTP6}T}z$<4b2UP zkN=&9=GBqktlSCD^G=H6+-_$jH=kI3$+DGNfS}J2`}7|&^Z)NTj;`%oeH*<7 z=P0MOkUyf$_nL^s)T+aLD+Tc; zZ9$$xzzkOK#i9>FZ`)Sj0i(>PWCBk(OHJL=rWdRFQi zk?oZq?uZqxbk3FMaBv#gy1iez_>xl$46JK??Z)^`b6Lo$BHpoiDA7?#(^DC=U0#2= zV3Z_XRt1}ocwgTg?&%QjlIVN08~SZSrWpY1e-#ozL??DHT~vGn`y2gpBnV9A3r5mhZs=3UJG7UY^*Kd5XWZZV}ef zWlvo#%C2}1ub`uxWwy*wWtRz?Hrpx}(Xh&jyDzd2I;tyAw)k6tOv*&07%JBP*2>*q zZb5Xa0=4!B*Zh*&`b$ggKAdP73+^cbbW6CO-91WI@d{(@LJ@oe5gcC8pg#_b;&p=X zU-2n2F4T*N6;8@xg-bAeuND8vO0@%kLNB?eI!1dXGNm~3(4QqkrULrcQWWm;8P2_R zx+W!GC|jp->{C9wpe(zDJkqX#P`^hUYZ&VJ%PHL!YaJh(ybTgBdVR#{aKS@=lF>NW z+7Tc)E<^(W;Ys1ty1r~o=Cq-KP3*I4rk(;1t9hPX-{Q2b+6{6CTkc6$J#kFbdHsj1 zRv4H{g!jU#Qh6^K5pW$WP>zFxi!)c3nfK%#%U~Pbx*yED3TqJ zZ&Z6>$@b$?ozLn#d<4ha_P}7Z{k~CY2ZcG5Rc?+-C!Yu#K@>|;x>1(*dWHghj*q^( zL>G}2&JN5KgVPytJw8(Ego1Q3!1Y@eICU8JUN^W)$c&pNAtGt34z&G+W>)((+tYPT zqIAx(Gmw2Ze9b(1R<}~_jaZT2igk)1Y>S@5o3a=^pPoq3No$VpyX=<^wsY?9v?7O+ zMn_1raAbZ(z{9A>o_ci#1O^>@HiAofnro(cJaVO&0PNi!ZN`WC0i3H`^&V?WrsVG`u# z0xM7Fk?eSMnP6>is?QaNW7rkzNXpO0@?%K1H`vpWBN+>_^5TjQE+IlM@V7LF7lu)i z%RE~Nn@MbTwxZ1_bYGSrSPbvQRLX=0_;5uPcZ~md9q}=?bviehfO3`<1 zDsEp}<$L|0K4-Xq)ot+IG8LyHPe)`U4Wtl0g`qX@jcX9+dTZvwXmx(9gwQ|c8xt3N z=8_Bb9w;MiCh2+|*S_NDZ9z{tyITxb07OlF#V*u~rM zfQpwLy!#ADS0>SNiF6d4q}PKC+b?D70sK}W2jI7^=yae^cLgYilFrIJ&G44j)FD8r>pdA`)bBHIKpbjo^R=+1EGn}hc~dN3m8ANH%rq%EI7qcx%@;f z8Cf8t6U#F}e~^cf z=Os@3k0SISxF*0x>or!WFX~yDXAP+EB4Sq6*-xaSfCBKKd0q9Jq_^{NJw4p%2n>$| zFjO{4>oD#k_rz#p0*lJCrU8DrpBxlN=!b(CYW!!-(eSpS%WiH?Jr>{NW0G>-eZ3gn zj`j zM%k039~m0QO(y{CadKGo*zCd*LiJb(RyY63^ZSJWiEK$LW?NOS3QMRo1L^@j$Qie{ zzsqX$N^99T@4@-&V*EsiZ_B%F3C9`+%UTuir?{vpc%40!rI_hgnpGTAU3tiSvl-mP zVJo@NLHi4*L9#J6deVn#kOpisjAl97@7Fk8snyZ>#A&2`JTo5uBg9?4Gb!q45FOS> zXLM9O)Z50=p@yCY@}b+uk-0QVpsJIP1?5F}9SwrrTjeOODG2<^Dff>8jag^U3vd&5^c2qp8&_2WJiKe1t!!(j04?b(q!=|{=Ga7cH8 zKs2{b_H1NdKh&9#7gruVukbTe<4i`0p9boGiQ!Vjl1}?ThIsK(W?`?Ta~O?aa^&FX zZCvK!Z@jP1kGU?K9Pnp81A2}TP;XlSyYsOf4?$IxFA@?d)Z+6TA3@?CNc&|Zs@D>I zJ=Alu^X)V2G+n!et_=T+)?Zq$DyQ3qBFI8%-PSrxRb z>-U53d0ojO-B#x}BUZJxN~7UfQxC-wr|D#a-_t5=T&fY!a_WUr{viWKgNzL2DX`H; z!Gw|Y&k{%2Q-I0=Osnrvp>$w22|9d!Gt_54Ysf1HFsbXP!FW3}J)-B2&I7U>X-ksF zzra`Wb}v1M`4o+1!UXL_)R6}ZKCn|9dv|b^k>5!Tdj-+^PN&UM_gY_>EzjZX{F3)~ zLz$c%P3<%@ zvkTv0@-l+I#JS?v;K84g+1bWUEdiZNA2RXZ>s;Ht6If@ zdE;frf;}hqf$#sA|L^_M|FWDwEOQn zS&Ya%coRV<*xvO;zCr1xebKjzvML!RC-R4&&Epxey|Q17#-X-<@ruAd%Kh1`O+b^S zzkBu-7`K9kqr-amgwjI3F$>2g7#+)1eaaw*Dr6w=Yzai8exMK7AYx~dr8iNLc=z_L z8-cqKb2_~-hY0K?Bw3G?RghoV!3xrHBBH>;ylUE!{}mr;@WMHK?Dq;OcUfeZB)`zb ze6|#4wm}gX3m(T@@81sDb|}dYlcFP;5z1TygF@*!9yMh*T>6zBIr4Nu?y=enQ`NVe zOB~8WiHXxSDMMzRAVzF&{ry5nIfnCv`JJ_esGEHFuc{kMexO5EpU$~<14Dd{h3g~M zEDSt~;@!PJWSN}nxkm@z&sb%V`&a@og6rn0bI!ECPyC_*stjMRpD1?QlSlev5cmh^ zD6E)EO%i#crUd?hj^JUn**r!y?QO@T>h2%$abQ(9g4yg0G6+Z z{OnUP#^_88pYUv;cty^BAPK5?8jGn2j60J=oz%bb7>~p0WSs(?B4gaDzqiBIu3dSr zel_!MJCzyfA}#9tnoh7z-|PjuTGSOK_D!kD`nikfL!l+B=;bD%Y4pMQovzCcdeYdm z(VMv3zk$XpzA-^Q4WRm)5nE-`Iy5+@hD{9*cLioX)$HpQj74o>28W_Vs88&bjG!+W z#qMWiQc2Kh;W#7d{oQ6|@Y(%FFT0Y$@pM&b!=owU-1$}Vc_XQZ;+i_{loR^O&JuP3 zR5lOmsBT5;4khJjI(wJf&}KuSE|TEInUdpr%1N8ZaL5WBORRZJQCSD3hbCJMhoK4 zoR>YsXYP6?Y+oQ;F(cw&LUGNg`^uhaLoJ=L-%yc@DHqCt8^J}s8d=u1Xi19Uo z3HbnkR<7m2RmmWA1=aJt=fEV04EW#z-At|7xL^KqrnHpkt*wXoM*?gQMlF$`WsX^XBggo zz{eG`1xcECyI!&{4-0zCT#cq9s;Dj+hvK4Jy{40HXBw=ZPz!4;)8l?izu(E#{QBc8 zY4I1D5)Ef=sJ2;P8#Vj5(Sq)YvJ}W=t{otb8(6%Pod$t{l(BI$)4BWhvB2=)`=#!zwjAnq`PhHET{44ekE)8eF#Z* z0;<>iQLycZJpd=>t^zjpaK$^flrnW5(wo_le}`9!k&4tBO+g z;W>quJ>!Qy)aWLWrB#C1wodKpTdKp`8KCeIoE4a;P=J_tvU+zdHVvPkM=@VYv0^h@ zQdd5yY`=!Y;AA0WEx=v*vaVe_hbw0&duR4^>|j_l-!x1s3c#yl)~UI+)iEj2<|kg^ zO$L*XFQof@0NRLLsY_cGQf>n}7S$X9;rZ(m!!^no#xkz-$@ymQwxz$gg8YJ^trLn} z_mzzpxp4?=oWzqpmos>x?hWF$?lavzqZW!mkKT3T zU0j7yz)2$wjs1ryJ#mExCuG00!LJ!e7i$COS%JIgu?=U~7pt#lcCySzt-gLn+6fIR zE{kwuQn{p|CJXMm!pyOBa%xD#hKYlnVE2jH%hf$PG*XekIJTB-5zZp>?L95{jm^ss zx*tDb*=8#a^Hnby3XOht(KFn!EDgH9@$v&A#$Ia($ui}ApQbDN#@_4%rY^>H7jFP6lWndCM*D4Nboy`A% zuZbOKQa6w>x~vW`ta8PG5^cCsD@SAnggY*AJnl9nEHMOUMZG@P1jH0`7{Hq0G?hXgiDN&_NwaDA&KX*iIC#1>|!wvgp z=PQ@~keL@C$5*WE9_W0DUQS=zkm~pw@0oyrjnt+=E_6!xf71D+q!mu58CfZCuip3t z5vUfqe@t6rK#{u(*7m$l_)qPhb$q|zB*A!{2%kkimEri}0Qe%@Jcou-`06*!>i>rL zzB0UTuJeIXF)Pu~>ag2Q3m}A_WZzdE1a_mO=-qDqIQDcx;D`&svCluDQpiDhP(PhB z8G>S^6KGyb4LK(}ZTL4_-G8-%U2F|*ZD9Nn(w|?W5&A_MU!d5Ox!SYRUuI4O_{RKR zu77S+{;z(_DST);Ux(Azl6eEhke??Eq^xGdC=PE=gRE0SrU=jf-Rr+JR&NEvpN=A? z0#EC_jXbjc0R_eXFDU5WQ$NeLPmDaI1<%Q?o~C%?`W71^r0mVWJ+*mr%Yl=%zHj9_ z3^;pcKg}T)Tj4_(Nd^x(xq>OPL)#UERp{+eeaw%}6Us+2N34Ko^M(H5`xvQM9d+Zp z-C{Ag9Eyg@+sGMm?+Cord&%}7pt<%52y0k1iCslCRom_(Cn(hROO-`bwVMr9EZ#z@ zKLc%;Wn*C&khM)HAe|aD_oWrpBU^m#R2&e!Z+-8Lyj<)nI{A;Xb$A|DG7OBG(*mm2 z8jFAFV(D-9T6KrQi(#vT?-sbS2Pc+tVfKF5c`4I520^!|7{V4nR4pYC+!wb00S8)q z*Fns{>VP+h*P~s(+74bv%8E$*(qc?ML~8`5*$SXgOZ9U}@zHfqF!MU{i#GV}-kk(m zlhxZ2-aBSUqPv}&mci>%rQ5;-J(BM#f|(4xo?aqoC7gyqRpHuN5&$|&@_dvwb}&u7 zxm`~$)O1ICP}Sf)Von}=^rY@at^3^h>~S2@M+1@EWZIQA_FMj(3~gGN-@(|En>E1) z`xrrO*ypq}yYe1ro*95Cgf490D2PF22U@<5adky=HzUv2Q-RfpK)jfRLBH}ITW$Oy zWATg!VB!yeMBib!08{m0{d_&d*zW1GZOOO&fRX2 z$_}PvB-Flm*S8}YrMQZv&-`S|w4%Drhac7W{d$G_@rTSOhYeUW29D3u)M?Kg!TuU< zss&Up_9f@>bE9S9MN(%$SH-tBu=`|)hP*z`Hi-522jUEKQ7FtyiA(#G=LnA7j`g-o z9?CfH^NA#Um1uvoT-a#;?4<%C@`B70zSUkXl;OkrGj5+nn1&C31ppsP0r>Ft9%9zK z;t2h7;risAv}sb?fjIpw=((laU;C?SYglDJ4SAfX z3>|FiA%(LZE5RF13X3#z0}qwkRE;GH^8oZrcQahguq2B9$|#iQ@|^V+Eko|Q%r zqL)JB%?(|2;5QLhfhrXy z>=npefIn+a;65yOKUua<74?XsF%|87!#6wfiwDE!;RHV7v%QZxW_knB1}%^zs?K0x zM^z9wy%(iLy428nFG46GkmB9Er@im*oHOnj_niBU@r`l*2oi=#cJ|)S zT63*6=X{vhTEtQ(9Xx?afKR13O}@4o+7>I_{tI8PUy(LCV|*u=^QMUgSDYpfqNP!1 zPN+J5F3(oczTT_9!~nA9w3>h7KYzD+JP_nSqb`gB=FUO#^e6QCUs`TL85|xs0lYT$ z^G}MrWnHaNC@K7r#}Z!nW|+zE0U%*Y@1JSpZt%y2*R~f&ID(^>KaeSvf!Z(H$K;tT z_6-KPoVR8T5@Hr5rGB$=DSoUuwnIbtn+kw6-)L|w`#Nt8XN*FMxjB=Irx0HaK>d>I zZ|ure+lK>TaV5`3a@!V^#C4X4io-@SVimdw0zT)M%F=rG+H5bja4@z_DrWphFyka; z8wT9QA}v)?b93EZ7msM7Ng9RV@rhY!)9Fr-Cr1=0?*;6D-ZGo@$k#yA+x0;GE(FHR zI7z;R>uSaJqQ@0jiyqV7H0h!|;#VeVzXIyIn8htX8tZwRmPP-THP*9#?TU|&h6m=I zf8}x7dk6QS_&u9H6c<#RJay)AH-XXOtfeNqn|=GeU7=K$Q`>^vtJUxOHg zFn9VsELq0ePd89QV7VVI4RXMeE4e))-T}k^_vC~_HfY#_JfadGqF>tw-ORJ;AL&Fv z!mRwtlWdQh@zhNABJKh`CuZ|mK<|t?T|LTfN)w=oT?1%hj#=quB!pT?71bG5pGEWl zAY%7wklSC)LgpW<70Wp>o^m-s|=s!`Z1QmnSsC zwrb{Oir%N|JI_h_bbVh2*7ph!ByCZzQM{zIBHWr>Rv&oOJba(L0brnVqXG=t{`yLX zPSD*s=-nPjO^HVX;4rm)rojhK@U}(j55& zGPQPD%&sB8VhI~rOP=6MMdYDH5|e`cb!PBRf)KzEdvrWBXVILxSQ*c}CzKh#J^;fx zo(MPe-A={wD<*C9HB_3$2U?k{?zDnvXC1wbj`F+}Fk%(OEY6op`_5A=)cXmbvn;ci zre!4q(a!4~uxquQrbOA@tSYIO*n5YuK*&m#Tmi93Y)e0?AK0#_XEl3_=0YsBU9EZ) z6eo88PDVjdX-$gezD<&FLF|=uVa0B7n671qj$x6r>1w=}j#r=Hn>#cj30(e0LB9=m zeoP2pib^4L+nvFT?ACuJFu3Z1g&AfMf(LpksWo&2-r1H z+r6gG84QU5kD-bGi?ic@|sHNNY!_{GR#(~+f@hp5zEyT=0%3p1V2AusqI^u-}ZfP~T3I zB#2e%^_@k4wn3lBQDFX)+q+_ZMn7lxhQXB$>Uj`*0marjB+g@x{HZt%l+|l#ATQE? zVrTMkTU)($v$?#zYFfm&7A^KTc9k>&tWJBBIZ6S4-DSy#K@)L!B&K=%w@Dd5fYRJw z*Z_mOALRUPRQ4I_U%LloK6`s#af0u(JMmE#W}kyRthA*PIV zvVD^w1df80LnZSq?XO&^h-uz&ks-O6CbU4E8VNjaUu9egtxJ?qU#%g-omO@$NJTFn z)T0FCEv2AmFj1$$f*8Ci zU|v&7$j=5?qjnNkZJiYU~{h^ z5|5iDB{rHO>$_ewCzFfFVYdRdtOH_aFe%W0+Pwxg*9!{0UT;ZfO36MbEz~Vi`YSiu z2uHdZ2OIF)r$ES-=MPg7zSO^GBE31ab z+IgTl+1xdpnj+q>NT?M>3+9lI1x~YJ8PsrC?em@i~E!ot(p?*a+wt{Pi~K@Q8h1V~d`7Z2p-I($O>&N9AGb zM&ZGnD5X7T|4L2V@>=DgA`>*gSGKl3&5JNtFMAT7656;oIoA~aN&3b~R8yC(%BioG zlNpqEH`91ua1}|eGY8W6FAY?AqW`-X_|7uf{$1HgzduL{;4shw9ESIA{M|*ZDn<-A=pCSEKvjHhx!~SIdu$-3`DNp3g?7_iLa%}z2?4` zWlN2=kjH`9$5BOU)8ktp>g}f9-6O5DR+-l{U^kotKNWYCLK$6fIu~A+(1)7IRMWYC zMGlXS_}1j@kAA7IK2CjRBqW34@<9P5Q}ThZjhx+R;vWUVRt|p^YE(+=w$Em z4MuQv#VNiQ2^hv->@uPV=upOxr$1_y-p5 zulwUWm1cL*o|d*)GQb&#&ZO9vTv%OWMC`Zwx%l)0AKMY;NJl)34I}MQAELzhPH(uA z0XE}K)2L|F+v~2o0aNyc-YCSkhu}raWJ^tgf>x@4aTp;!gY2jdNDr#DBoV^G>H8$= z5bum@O<8U@3%QNCF97=nd|MkDoiRx&H!iJGINr~+pY;G1_y%3L5rC|ePLY+7GHiww zRsGcMw3s!WL!5Nt$6Vf^4dKAV53M-qGdr=2y!_M;8YU`MS`` z9iMJrA#NhAB(Xcv1nu?Eks&Yr02CCrFnt}-n#6mqOMb81Vz$${&eX z%_B-~DbL%nHyRDZ>On!~idxYm(a_wW=YBeJ92S8Uwn7+FGtS zcemlR5yt*D7?ZhuU@1q)gvDY$*o#t zu&A6|ww#G3Jomi@AcDQ?GZ_{#z(l(Ul*7p#Jlq9h2o>q0@qLmb@-5Zv**xW$LUglGTI6h z0bfHPLIdVCg=uO01qHH-{wxC>T~V?eu?L?0?Wju+ki!0_Q|2#cVQa>PpOMj~_gA+j zY>8=URu9P!F(Cu`w<0gH{U*bfq(2$@8{-6!(L=W)U1%i_#LN>(XW;ufjGN_nK;Aa| zJ3}M$Bkwr7SFQntHTcob^!nHM%StTf!x{GbqIuzY2Bxp(O-;QT3)X?|;qZ>j2iRHt zGSm{SfE0Y=qxD?}fn@H{+$m)H3`eS0cd?^tz`52avRY|&isq7-4reE)r~L~}qP7_P zY0d>G-);Ag)mFgHz~TQ{b5OvP>J#8%Sth_;u}$kTSe{q9WQQe9L6RjIbdA~n%M$#* z$kG2lz3$nKR;kso5dC4J2U5Qk%MI9icL$e?s8^x@8-zL?)L$pyiU=G~rX!-gNn^0j zm`Wo!89_o4@YdMR6oO94vK; z1K_)KZ<%K7Ba2r#mqUA-#k#B!*`rPX=N1SogU)M{J}(B`T|Iti6pq;5cLDb`6{GyaUALc~ zm>nt*%jc4Ejk^4rB6FvGhMo?6txVKH*MB%m<6qkvAitU|u+b&Z*S$|2?CvOCI~38% zzs|k=A~EcFonf@~^DqGy8dan@g}BknLJ%uH6m%Kyw?fv-c6JUHC%UtTtWOcB%-y0k zpOuYNy_$IU3a1_dwH{8=0~oZ?)#{D~&NVrd%lAm3_Y1&)gl>v z1Rh~kw=4VdUl~t+Q;m_8$~(KX8bz)g(uK%BDO}e|q3tXe}qxA<>zRop67+MPWOL*Qdd4$kvAER_ zaP}*Kow^kd(;}#Xf%#N35;V(613qQWo?-k(ke_rZA1w|i?5W-a{|*JJvHOgRrtg`<82^RLx0ZuP#QJ=!VE921?UUo1iE(`$Cs=& z{GD|w?6U`qlavH^5A!%&T%YL4<<{uIZaZ;rE@OB8io z>Ngq9VOwh2FHLV)*<7Rxod>KkQ{JtT!cV(=pA5Az9o=`Sx9TK&!m5+Sa`w*GaV9J* zS4tlT+UeX-b>$3;Cv(p-Yitx1EN{!_Lx6fYhMG6%Hz4PMN_NUC@#woNQD&qCC?Ux0PzIbyBxkpdTssb1x0zPEJVFmv} zUzoV$?=i;k#`*p6>1)a^W<0@kcy5$<04F|Gr)~QYn;DuVbtJP>vXr;9?p7WRTn7Bq zX$X23%i3xRdUsIIT+HJi{`}0tnDa8$oy;<9ny8EEjgI4<{0HCETqeNjrRd9#*L(Zq z%V&iHC0<6vy5?+%5lS8c)eJk(J)&QcuLeCm80nO)uVEvgebP@0 z>Gu-t!_4G~Q5yn}&F+Ik4kfUct<;QwlO^V2`~*N>i(XT#QKaWg9N+Ag z3Alq#elepzK)2W~WBSPNtx|SHZq_z)RJmin4g5?ep$uMq){eI&J|zyG#C;^|w8)P! zFZTn!ho1ZU|50y*cR||1I*+{gMcv1IZ+m7Z9WZq97dq$Nt=T3I&wU?$qia>CYg6&e zDm*8YdLp|+FZ)-8t}3VK-*>vQyTq>}o;nQc-+~A{?nn<7)kv>HQ~*fh9~`^b(F8!v zitcD6Z-II@CkonO_K?GqBSHyG8s&(3-v|5qIVSKOEloy!sL|8v+wA<6W%?g0s?Q?S zJmOEzp=5`)d#6d2HJcIzpcUmJ2%95#qDge*_m8f|R(_BHBmt((2lUFfn=p$m*92_> zilsTnpX{tdzFN&6I&)ZLz($bLhL(UxcKq-qr832H+H(v~H7MdjAc_h&r@KU#A zwwxq9tP(tsJdD#nJ_jUbEI;9L0<09hdR*Ry{zJh=YzEwm1V&`(>`19a%}cWG>cqWh z9nyi$0m>dFh^KvCz8k&V-ZP-OYEgBm#_|mB&Q8kjS5TvQg5JZE(JzJIuY~M)jU<5&r;U*-NU%}+Q0LBHUMZYH}nM>4EMr3AHU-K z))5fxZ}N)CiBj)c^cU2z$*r6Dr9R=Eij2+Tn~nmV!c9`fxnSFY-!_U3od)0!lJOqc zvg2}`3;P6EN6Zkmbj~NXvowytbd1`UpOFhDsHgdKOpW8~jo-PI?OD_u%xIAAS(0`! z9ivTm2fqa`*l1faToQcz+6Ik98~2Hr)QHBHD- ze`o?L4BwdH$DoFbW=dfk?0Kst`gkfh)`)hbsod~5b#~%)bxVIngZ`q+^;S3Vr0}TL zSDC7Jp&yWLM6f>mc(tQRunB9IgZtd0e%AM@SzcEMI8U+Hqr#{%sB8WCtk|dpKtr2v zd$9_*zDdSLxVlU%Drv-O&Dk&agR}fc`a4|Ch&^QTi$Y^w09uV-kDjm~~(PeB7Q#5Y5GU||N;2rn~BM7E4cP>*HtcaJ_^0wo?(1v&Mh9DpF=%*P++&;|zQj;U48}&71eWA_q^m`h>|ntzLb2 zaK)m>7M{Vj(zMse=xid5l|y7Hn9%;#`K7lS@v;1}LLg>EH@)KA7wbH0{7`!#CmyB` zL~sD5GGXj&84K@3!MY`hc|VlbD6+O6+kR2cgk9(2lvd?g=y96=;Kk_MivNhreH{ZLLXce9`K@2~a z`5+gtI&7J_GeEuAtEDPzXDz7h;3|C-O`m?C3Q~EJ4p)2f#H<8R%U}4A5G4z(tE?*Wax11N!0Uv0q7&GR>!sa^inKLZKQ1npuCB z6R7dm3)Uwdr%XC}kB$b7vZcKVlC}{`p59Qm%?_5z_e==Xwgg3ZJ}r#jmBG5Uj1&~v0f&*nMY&VXD{EUOT+-x z3`XW2lCTC}Xu3_*DaX=<*$*CU%I88?ECwGxgMJN(I^!Q?Y*p6qa6>)iia^0^si)hU zj2jM)zB-nbQ^Xs8W0Eo{gkLkEBkij1TbWBb`1fHTv59bx^LVV$4qI2=)Ggi-bQ-?m6FwZ_%Z%VLKAGsue>L3JU819w6$+l z2aGa@nPDRxAAm&Y^Ba6ZL-ySAmPw~rt%S?U;P>j5G2+}O zBld>+l_zH8i{0vMTMoIrNM)!g)-GN;M8vsbTW@e>V?Ivt!{g%nzt0}vZW5hVPk2!e zsDfi?k>!z1)v~3G)4m?!BT8&g)j^`rJfg(HbVl3V&i7)3(JR_}ozA#}B7anLNsQ1N zP0)L7j`Cfku=zqmVai{y!Q}Quak>ua z%K$Si5N^)uc#R2%O`mK2P-q*TMF)3)4mf^XF0;#G43UOcw1EY>c?fxAnfyU~$1vU0 zJWHS%6*W3;>q3jjR)3%C(t5Hs}|=^R?+_^${#N zzuVFCU9jnvfm1713sxz&O6myrdO-0JCv=;SI>a(Z+l5>WLe$G|NNWmom~(SdeED(`yKW5LMLNLtTaL(h z2$>&=y}jDni8%h<+*!~guViGVT*MRpw3}M5td>2{JFJa#Kr`==!td61#N?*Hq*?ID_(Q3vi#BCc%tkJ%_E5}fiweqaKzMrK79OAinyk#cGuGVm8d~o)z;X*J-BI=c$p1a?e@Sk@)%@?AahMABZd#=qmsIH#CxT+oJztA(h39D;UmOyx8^ES=Il@bG|GRUuOJhen)KP z%wi<%@Sx_Vrm8$^2hAN-2K|4h1mJtdbeoqettGBbk$uFfO7jA{byWPCfLwwsV^@@K zYD}O;CW8Hi*y`|$WQ(ZM!qSf)&g&1eEd8F}6Sj#g9zqXhCs+nh%ecn^bevMkzpI^2 ze+PEWWhEy;8mwM{o z{MK<(DeZYQ!g(H1}J4-V5v#eZ%~94 zo!x9r!aaP{oqJAx55Uh`l);MGk@q|}zpoY71DzmRqUxOHf`#9JYD12*(bFpYmlLWn z!qqG85)2GRE^~CD>^#{1oi|Rm6K`)jbtmr4Q~$bk4NdyxW{Gkkh(IKir+v~VWZk;Z zc70&6#baG7so4Dl#x1fqDXl^0>zI~*wz-*;=)U7{H zAiJRN(XJirOywA%LwQyW;p&euwgF>?0%_DxmNoGFrv`xWp)xH%K8`2ymH@}hi}I}_ zB|{&_GF6RA_?o{l6yt`mWjDlkSkjL+umYohdwg(bQ8wormk*sBCk3<@$QElQ+{qz; zKMnhN{GEjz#z|G*CDp7k4Js~7W`P_q2{a}>p*;M`TDp8-Gu{@C^5^!N-($!B^C^5Ia+*@t?v9zA;lx+4!Xh-uk)E!dry8h&MCEzRDC- z09y$yqYWopIuuP1G)mb)pDK)gnW}H0i*(L36`+hwe){rV)>cx=Ovo@HeL5`gw+rC3 zEN%RFIeg{)*Xb=j>Dzi$EB>u0cpRKSRokKqL_WaBuzi8|A$CO;FH<2h-&XUp}#^O7sv+>>JNYC!n;(gu^kCZJ-0T!RDQ0a0>!&Cvp|`%li?KQUC%p zjbM8Zf+D>!vTe4!KdQoCR=BV?COlNZP{)DOP!<9tw# z8!yU!H*AYkj8AHn^D1X5$eC32znaXEU|yo<(|2C>COFy|)_Tt;gd9?5MB3-U>povm zfBPStPEveVimLBD=s%4ZntT2kiLjg)H52$?w~h#f!nS_*OCmj17EdH{nrEj z%ROCwLrmce{HOpqp466iU9zb>Q|tCxq0M8mytdC#Bvib>N6RE$3sYn|u}$$@jHWIv zD)Y5UI}?k;r(uIekPgytq_ARBa@xaNOywrvj`@l5B;`owFXxD|;`9{#^pSH~X_GZ9cZWsl;2S{%w!v4H7L^B;=8zwXbBz~v$ldfZL{_8N&Q1I9m- ziC!s!!ZtoajO7cnmp5jvjoJ(zZW>nAE8n~vT%41^ck8N~@i4=`h3kJK7kfc2gO`N7 z0j?()XJr{{>AKrWzK?+&wgPlP#&t%VtTZA2(0*k~iwx*3RgZzWk7eE*@biD%6q_DM zOy8#dqeDFX8{??4)F$r*@?7zgI_)df4r|~#4U!Y`TH|Dj-qf#RGs8QT%;ASr2gR8O z#Y*$lQ;*Q~*H1=$Yzu4+#$tdR-g@;f4FIY{Jg_nI?X$o@b(5IV(AOxwAWeLGom`LF zbKIB1PwkU7mkBP3zb1^U3s zN$BvfF{@@;Voy**(Ikd?!|A|Vvo!KCAgUJXxKsK5whFl`7hr(Cj7ZEyQIU!(#|0Hc z(j5|q6!a~oCAM_K$&aA_(z$%jOx#dqOWQDJG z-`7zpMNrd|3Y(YhO-M$H^Xl9L_av52Sv=a(jQ6?$T!x14i@-XL zOBm@d6_^9WpeK*z!0o836DA$kn38#(>3$dEsHF%n#>_Bcci=)d+L4v=rgUkXdH3UJ zo4M{4V~^E_?|nbX_`#z53kphKH*PgGRlP(g(XAo#a98D`5&(UxEBzFDfpqyoB4!bD}=Wk0cPl@Ip-abZl@;Mz(@4yJnT9er;@w6`YTK!t8BRN?kfu)bA+8I+B)Hj7p7SrKYBq zk?0QRsI5-C6h5k9s}~a`#;ozo~=VR0STC<3Q?5xLVvp=PjgO!AdB8uoXr{+uR0!^;le1cX}u=+bsH4i9kkjhTKAz@_N zAqD#R?f{-gQP8gv`?34|+_GNekdlQaUsCc`ScH-QKC*3}+mKRlGxo?PwU3Up#|4TG zFwkV=`K9Km_wCaeG{yDN#3l)Bab>_FWP*KSf;EEWl8dQ;yup>dw%DIkVx&jqc1_*i z#7s-~!?q(cCR62=M-v!dy+gg+q85Jd%?rNI3fch>m`y5Z3qmJ+c*9&N!>3&*|27R6 zyM5RjIChdAt{|P6*Ugl;j{Zt%0Q*cf*oIw_fNg=oEZK+P+i?Oi6RHQXp+Gu7e;OEe zotLU4JyHbSANG_jT{fBQd_8`k3g}<<<5nDmU)@c!6A>)77(3!xN+CGm;zz+{f!8+R zMO9|2F};dMQpT`Zni1?3?q_Gt^Tkp_*b)SEFWnmW-@NZUW##3H6JMYK>JRpbzS|#53nJHW#D@MaypQF#{d55nV`4SD%$kYznFvb z>~8Ze#ZP>^s(d?`?l$~51J{I=Y;#{DvsR_XF>^X~XX*nnOls^0?wt7|hCN{mc5Z8> z1aB}OF093@)D{PwR)*Gq-aZG@cymmchb_j$x)u@zunb1Lg)T*wd)$f!3+H}-VnO$v zR+`7H)yaeS9LC9F>me80ntqqI3utnv&OAh&=r?jh6G&uy#>62rQi6J3Y%q+QXBQ1k4;BB5*N06G6A(|s2WPAtQ6sY z6Rk#_%tO8ZTxSvDY}Av+RRy_D1~$I==G~fe)AGTXukLa43H_N+8KnBl6sX^mXsaA$ ziqOFe+e7T(-_-XCDvWwSmFm%+F4FB2mI>cBFt{_99!SjE)cRD5mwtE2w5Oz8B@E-P z87U!AakfA^U=mk!iCi`@NThpS)!jd5Dh^1>j1piiz6*aSPFMhnn%^DgG zHgv^b2}tar*SbgZ^=}qrH%K2FCfy32*qn_5@rl8~imT*v7PIY&4^4bD zw?8ff7%s30-}!RQ{&g7pycVeCeTkN#XKQTiV3Q}QOr+}N49n1u6{mQOChiZ6M^Z(Ps$Vej)TuSXq^LKlhd6nXMAOzDx;bjs2x15<{Ga}>ZUnG4wpyvC)x{d z-+5}rwdc$Iu0<=a-h8Lc!kR$!Jq4G|>YRvkm#`<5W%7^}RNWyJ-r>ax^1Cg+wJznk zxV~D2PcXl5kI78!4VDG*ixQm{ClS|tl1!o;Fs3U-{*0~s0clR1T$;3MlzOjy+poN{ z4$$!>C6ZYu`(G(o7k)2GU6xpzvfu6jP_@fB zHL{Fa7K7WBMJz{;n^f)=O$l9wtNBSlQVD#UQ`LE5}3G^7w8Vu%6Ix=onYu<&A# zXLwNpXL9h_@cd?qxnTN;!`^^^`!5{P|LL9j$!X2?KfO~S3d4=PoF%{z{oeu6|64$4 z^Zfp2BX$Hy;7nZr_t>QATOcsREN&aWU|BAGb0qZBjTPj$sKX;UUeXo2X`Z@VZ)Psx z(kDwjZ0KWGscK+$6~MTorwYG+(Du2{(l;+rAP=Wu@kYs*Y$!md{cr|`@g!?o+Cx~= zV2#k&qc8I0)qN{~OB>_=#M|E^r+g@*vSR-Dnx&TlkYdQo^XFH@HV!;J(3OdaHu#ZbaX=I@r>C8 zYx}$7$=J6P0>^%sL8V)RR=+B)$ZGC@@OtHU|Y> zn01%$?pL4NM856wC3LkO-A|1o8sfK zN4l{Ggo*)<2IK6yL~i4E_pB}$DqNdLW{Di!hM``=7ml?7G-6Y3?Oqy?Q| zDC5PM=-2Vnya!&F`Ue>M2MQ*kkOgh|7Qb_&sKUn_RY4w6#6f8r-RWp(_b$uA4jRU` z)1Z?lY!k}&3j3wdCg|Gj6M^Tj`UkiCktRVwL4!>;q|(Z$DIafDHDGSM6nS{(Dml(* z$P=rBj?9A^VOutJDqY&SLmr1UvA$I&;d&oj_#MEvdr6(#f!F@}uscGSL;6(!w8b2@ zn58~%q$KGC8iQSes(Z0IM?1PKau%;^L|L!bgWr2GNtKS9m`!|_YCY?8jZRfJ=!9k$ zHSveSm>?2T5q%d#7vN=UwGoTrB%gQ^bH^__cEifl5IB)AOiFw)=xM`?oKczYKn_H> zq99oI9QMe0lFqZw>=vmNNz{tCJlA#OW|}vrsE?g(2)-33FX4M*V9FIn^o@4^Ls8LG zN{Zk8tQ!q+uHI9(OFMSy0q=Ztlsmt*>pC9xIKXLP!tn<4hp``$i?zSE_bwAw?!#yZ zVnFtbsep;7Vb7Os_Uvb+Utf!?Ej^rRP6(jqEYz)t6Mgp7Bw~%?8?70VlL*}E@P1rm z*}x4k6^5!&>Y-N;e!{M79~)tmDJZBYjD7;bHKNPHY|KegIJcoqCNFUC1dXe1FM1^DGGMIEmI6xu?Mn2W zXsF6cQGX89xy;)DOhw@SP(-*x>g*Jy1~sYt3IP( zA=voAG=Og6#Ri0)XjS^F$V|wUfyuGaO|Yo`ST4}uu=0JOmy{Il!gNyKc~EQVfASXjT>-5f%O*x-JhJddFpE2Ze7jL(x3y$a>7&S!w{`sHoMtLGA@sfmFsx{qfm^)(W_77 z-vO#l8bBh5$}{ZpnMo2RhHT8X8d|DW82Jqp@yEVCxhcZbkU$( z)HeVWUIA@^F3*rKtHUU+k09K2`k>npPYcs5mkK^p^i@~$0f+<< zf9LvoTF!KI042e2!fA8<=1!rf!}W*P3XQyIg1lc53eDYHWmt7?g#eO2Q6F!D)54n@ zaoL+L{M>af{9FmSO0_PtyDUj#xogD%@8`Gquh88eIw;T$7u+5^dqnfqe#0$gpDscU zfkSp6!kU<)ej9TK7LK5bI{SYF}cubyNh^&&kG=BVR_mxCS6tE#PSXe z+zU=9AMmpRx)MNOH%XTLRZ&(Sx3VYk0ajXb14t1ns9zKKS)4AA+$)s0Kd(MUXHRH~ zx~e;?Q7`o#8;vvEPFw9kR!Nn9M$oS1&U)H3#0F+^fCeA!L4r=exY>3H?L^t{82MOt z@~3cSSzK2Tel%wrR0wk-nvJwntrZ5FP5x~>IC&j$s!Akfc?u7zAYBD zJ{WKRs#c!a!;_{a4H8NcaN$^dJUCF6$mBofrw|R)axwWvqlZ`~pgYO9x_w3Bw(kcE z$4%G%+pVl;dC2(t4rQFRhv-vtM=C%Y5q8j0Zxh@H7KIJnmj;s+v;mY}bsB|}^i*BS zW;@wZ{C}TD;RMG+{$nH#Ju18V8xEAWiXvQ)&Z~gMR~P&DN_#5;@5?_F&+&Fgznhh^ ze7U{?yRvFrJ>nV4ofD*r@w?qoac2`}cHsZ)dlc zo~ARS;YP=$q-p-Ru?`iEB3(_XO68FwF`EG^*}WytlYIl*fo#a(E7XaRimGElujk#N zNZE_qD{mK!#{+&Yq!;(RZ9Qw_$MVf1%d9spquUiIaA_uFK9ac}WR0z?6(spVapQNr zbB+@8F!$r)>csx-YyS7fsLE%*&}vfzd?pA0;b6S^l6AdpTS~%kHM62uFefPNC*YnL zw%GdyZ~r5uuPi_MZfbcqOY^kDy?4}XkyrW1)Pv`P=B95v>R=h{<3&!lM5D2?k}HtP zz)~DtsKfK3{SE2ZHg&?qB%XZ(;zpI4e0k?AE&=D_8YZl{!HX(FG+JWK* z3#_+xP4eZub3cZQm(WxWQx{K~2Jo1vkGGSoSAqJ|c&`FNxAt?YUw&GKJ-prs47u0L ze~1XF1LJN0W;Mni$9cw?9B$P3f_=V|1y!Lt*!4*uXtN*e(6yPwak}JuXpF4Ff#1d> zkDNBc2dq^eQtB#G(6+pasWHr`bg*?JsB@RxSSYve@j5YAC)25B@f0fUH3p0jl-47&h@878 zl>1X^m?r^`V~hje(Y3t0Ho!(&Zu3fvpX!^mde5S+1V67y5?JUD!tMD~FQ#UHbFVLT zlgg9w{lWYkwo_$#;=h=d!JV|5)P}kGduFsrolQA5Q4Gc-xdbX*4O_bI)O06>gOj)F zsVvB675eGqg`BIqVMO_Q%CY_8x{@G%d%pj2PXA?&3tYNHZuO~EGM*nsbCMixAlOE6 zUQ@AP8T8Iub5UnPUmv5>&j4|#4$uZ@c{&S2GC$?iG*>CT>l_E&UgHy~{ciFin zafQ?86f<@Mc_{(({w36Q6kO7D10Qps)T#9Imzw(1y}&Jcd=-plQ-YvTC@568-EpTn z;)Ti@;6m~hb&-VfT&~}{$QuL14%-J9L$X+G-Au(?~nPe%KJMG%2?UOH^Swk_%E=W3-U2VpRF zFk`m>%vy=q0>2OBsJl|7UM2NY-C{5n1kxTS@|sbNATQ%1^#bhMSQ2xDy=TljU#o04 zMp_>hp77>L(eM`dDaJdRHb%p5N%pK?Pl2Bk_2c(1YI@w?SGbkb@+ zCd;0jr`pYLu3#!9MeinAdOB-)-Yi$yToE+{PP!I=vzdOOU0fNi<{GCz4bLb63X%Ti zDya-EOZMI0U+Np`Kj+!Mkh7Ddpd-Rz{5hrYkz{0PA7URLY3jMgSsu|W?FRH6H`i14 zLF3)6doMvW2Lm4T@Rj2koGK?Z-P>fqYK`AW8~eZ#as>*;c;2742^~q~cmnpB<%ccy z@S0uO=ucK+gSER79(Cq@(R`IOG)sk{Mtt@ukbN9bUbadwNMjntuFG- zt|ut_tQu6ks>UdFcfB-1kDc z&xz>~!aRv9zC1OFn%S|D3UT-BUiii7aADRUZzT|0bZ6K6Om6y{$z%W*BrOm#}M7cQTA|NZxzd+%4~D>L8RIWz1TcCwRs_q*SB zWj$*>&sqh#XP_@=KoA9(*vX^yy-lpQTq!!$+*okim`|`-f*atEOw^ll!Pyy{x;aif?68c9aBQ$;U z$y&NS@y8_}z?->zDl7R=#*ibWogYV5{zWfBpIuu=ljXHTG(3Ty*7n-w6K!go?wnGA z$5eAFb1AueW{ArNN%Qwjxu^I*;%RXf{(hG92M>3pK?fi~qn`yj19{u}t1Nipt=FlZ zs$xS56+d9Xdc&WhW>3ZMzvFx6NP?6mgj9pDOS_)CaxQc3%KGCk9nU=M&6KUD1 zi&e5GQkC8j zi@AHj8G9cZ1bHo~yR(AMl`pV+cp46rs&L$9#~=zy%5ay z8R)ryKVlBxo}~D=8v{P^F9)pyL>3R1*2m=H^kIv*&2*qb3G1C`K5s?{|46*lPEm1w z3F+p`=w8XLyqkWUB=yRKSmC%~A{Qi6fUnxOFy@B@ad#(hxA{JvXBuJiRZ0>3+6yWD z)^R0x=FMg{8rk0#`IOE%R zB_I$ob`)Pe_?Sk&*%fXsYdrIj)wtt5&jzp59t)&tM9!_(Tt}q&K%Qk#FFQ)0h6jd zM7QT2*|1PX$h+q@us=0v(C8>@kR|=~t)HLC&!3B=e`8Va^-Z>GC_;msb*%)AXWRS{ zr5~!GiMe>YNxNnKDGD8&EK*pBg^92F!|hn;A5Yg z@cARV(6gbL>f{$gK;lD1NYKvG9$%WuxLoF=4M9|G$k4|4*F543*=M zl>%GsY@8bg6}D?)Z(d)p#HBUO#)>Q~vrx$-$*;plA;mf5@J#4W0?8A>WC_(V2`R|Oz>*o>`UK~e9ORiu%sD51|wn?-g52IYD|!@eAx zgl*fc`f?ev-6gLatX6b$r@d6}`zn|=x;9{upda8%MP8`IE0QU!{7uGA5a^Q_X^}@TcqcfB3uB;Oj{l|1)jV9%7?u;#~%)s@wax_(x zKhlKUH9~T4rY!M9eX&2bm4VJES=PRuxZ86uX!BR8uX6ia6%>|6IKyi;_-3l6 zx~>LjJ(I`2)($!5#pRn>QC;bLyxF~-@shj!k?rXIx4!FBM`?qJ<4kE+j5*pwHTyQ!f~jYkUXQ1M5r+~F*&_6}j8x+C<=M6$xX2x>838`UWq=Z{jv#8BfpALf z?d($$t4FaTXP}CDUR&!=)jafzWzxj;pJCg?+UjDv(|6UqRk`c#q%^bB@=lAQjW6%X zAQ&^{%IS^~UmUb9>(4_&Qpw4tzVMnGt?#B_p#Bu!VLrDE+ncFEz2=&yCiH*3KdsaI zB(>Lm(*^p5x~ozg)xxZr62#%=yZ8crex^L`*r{EDhHorV^HQPY1qo`UlCp}=6_Jxo zlT3EjZ8Th}x4Di;Um2aV!>O$Cf*$&@G(_6Flqg45oxX*}x*FXhWFIPad*0j`jk=Po zV`4BZzxwD{^NXrqO+HYH$|{pM2&OjKX%FV?FFzUH@JhB6%=Zkq-eCoK9sUXn)H`h` zt;{1&*;RXvaSA4O>FacEpU9H#?sXJ%4Ilner$zMMQdrS1sG9PLQD}XSs>e!r(;h2odc5)bMLl8BAPRugb#5vCTHnnB$UDkAy z<$?H*i2S0&sf=kDc4R}Bp{3bNJDliby|7jb{GmmDoOnfDlS^->l~^Le9Y)M}gE|g5 z!oaRb)B?1XpBj7E;+3@q&*5=Yr!&$sjRoDPIy%yg$O%&pGWn;*>)-t-*4 z;^{q3ie71KyF#TroK&S2f$HyOvfeEGv}MBdJU}FrA|v+;;k@>!TZFiN=>xCU*t)Ge zlQxEav1l=7#*--`V>~en;2-3jfsPWP^LdDMKyB5P224bbn+lI)0g-OGb`>Fl|Vi;DWWIXB%Y=Nq!E2IR^P@+Uot z92Qb%0M^mt@9QoMavf|t`KNL5IqRW}wl5!`Lz&<(OprO{Y^KvA$l>lPppb}6919fw zUS6=FF;bq331yXL{#<;lx#Lpb;(LK^Edr-vopG-?q~aPMWGxni2N)M4+Jehg{U#F$2fCfbbTO4*S;`opPxgzxkr$Mbed1ux39t!3)CP25+4$ZHoTFsv|b$H z{skvjj4WAGEy*cxAHZI_)k?ASQ(C@xIR2ku76c_Pr}-3LrUY6k71P^FxC(Bo0VDO= zkEoi9udd&!?4(N$WAc(~HU+Q?&+3m$#DM{8AfY52hPdzp*#>mK1O}utSMhiT#ZxbY z9R;^SBcrh!P3qsBze6X0Rv+xqgtFf0d{;C)uI?y#wL&~Bw$h^x&?H-XTW!A2B-AX3 zv}J509Be!^nT-~`0070qBRU`H9r!|_@#Rky!i-c$?~Z$evT?>S6{^g94<2}$dW`|_ zxmo=TGz>iVSSWEwNl5h0#6g{zN1qlW)$58BjbtWqc}wG$lnSVpZ`%HUyx5?x1%(>K zwl|KQUV?y$y*Q&ULxh^IO$EVhz!04y%eOhMyU&%9zctyZL>J2C^wiY=Oab+hBG;1+ z1ov^x`^-vooM*y4wOj6Hk5{XV9$h44N-256lj0@RwD zF7m-FC&%qnGZ*2S`X1ZE^i^|67y{hrRMT@S`$b_sVHDq*5Jo zO#Go*9r`g^OEo)CobDUwkzqzXIVMptbSc%H|6aJ^_@N~y`&d7Ofsi@$WM?Hl3pUSx z|DJ3~rGvc=t-zt!; zpwiisc$jYeecY}fzRC$&!}!f=H|C(Q4{K|D3SNEj!iwdXI4xZ`D%_gAA5oK6yy^$G#<9J1qm>DyJB|kxGtacY#=<5q-j@F)1C5b}A zrKm8W`|I+OO5X5h6zaYQXX7a2CCCk&_5?aE4JU1t(6bymwaomY{n=pb;oWvcwvD8} z-EzzDi9`ko`CV7zUEZ$M?nvEEiLGdxM*x;~AN&vZT9Nd(xz;!JOggrzMS+A&k zR3fg|>7Jlz00mL^fZr2<_LA@MmpsB>Yd-u>oRev&!K~e{^YY)RfX|@2XH*pCN``M& zpZG1M%}5esdsHuyU3HRm*44;nIE`h%q-1Ny_0DSXvUBx#FBDjhDLJ2`VXkJj8rF(% z7XG&B#v^Y~U}bi>KuG3_e$}QV_Xw><Mbns`+gQ7%C36#2yH=xu<3OcX|i6HRkl}S7nvdkH1wNhM!smxnR z0`r&Q3Swst4BXPw@+vQRZrKyMF|Fl5Cy0zLV|1{8akSs=Oz)8(K-A=QKHBeu-@ztP zoQ%ol%yCSbZFh(Pu!2Q_kMUDPI>dqDWhN#F=qLTwLS;=|O((}p>YbQFx%IgSz-#vm zRx;3}1gU~pf_Me3s9UzZxb7r5>W8vNGA-T(?}WAq^-TiC;fd`o_aQiRsM9%vr)vV@ z_07v^WO-!&eT(S*>wB`3PWYA!Mw^>G&K+Lzh{Rv` zfXlGxQaUnY#~E)l(ywt{YXLB#ERUB?6H{x~%T{B16J%onF^BFum@Ay6#e%~CHLNX( z$dR{;Gfw3 zNNdySv4jHhXzueQqOTBqys37?q;hf?NF*QuZ&N$_3+2 z>i=H@X$G(g^I z8X&iS`8nPJ3!5ln81TJx{Qvr?yAW{n87Mw21bdzhZ?^?7!t<-v@8zvAg)#IuAcyfH)#D$eNdCLDB!GtW)7{bYqGh${e20p=-#%K#lQVd0&prnC zb)T`Vw#w8{e{9c^{#y>g{zQczv{i6-1W1L*M3 zd?j2ASpidU5dUDide_s6H*>yC_27B`i0x(y-Ee`w#vyrGnhe^i!-f{&#<&rDOMg}{ zmai3lC4Ejf<@0qk_oG{KY!_*^)YP>_(9{9tyonZ4bPq;#l6RHWd zo!Es*RSZ?^a#2}R3wT2If^LHGqD-Ib4K;N7q?+a?Ck|HV;?72~p~VwXATH##tvYJ5 zUpV1^60-sxt;*jVC%GWW6IBz|Q56m8@;KEtV$^$-Fk&c|n}J*t{DXe>om+1H(>3{o zQ9T1aphf!XAKnCds{b>e-v)eLX^hX^6@@p@Q2(MvZCih_D?IN9hWygO8Osd{Ya1w< zL%GT5!FkOWcWc8$>0h)_43Fe@>|RO;W+(1j?G@&=C(7U8G=B~-{JtkQ>P=dHd`4}M zT>N+yJz8p=mrOg7Fl49k(j-7oOnprJqb;xFQ&)?OP47=`+>P%9lLI?M8r72mhrfrv z3j&5B81RR3bv!~E!?1eOkoVqc+aof3${kAC1?0b1mN2(ECLnG0xQG zMR28=^RB0OZ$~vC%hS+RP1&_eX*mJLeZsG)y-Z|*c_aV^!#x>5y8vtO{~gMxypMy$ zm*t~GJW3US<+Ak8ygdH)-u|*&hIdX^)@6PJQ_nrz3HEbO^eY;T7sc-4Zvnvj4bwxl z;tZ?9qJXM8cOtY8myrryq*Hm_2RvWQ7p`noo%tu6{hAoJsXS*~UEl~NYbg`MKHDm` z=B6|^u~s9g42jj7gQ-4Am73cuCaD;Z;?e|h(Sx)(Y)hg`ALNjyjF+pyTp6PbdgFG= zBR#;MT(8Zl2p6u%8XSPWQC1a~5wbPXVjLeAR&Ql0am^eGnx)LADE&U8d}Ux&+04TEgfUZ?rU~KA#9zg%ZEwY3 z-@~jojYM+gU;UnBo;x>VVpmGnI%Y=QW9u8_vY^#gUX9Av>)IY#2B4?ymgX>!ENFrs z+oghOMB;jutuv4Zk-x743IfCw)V#D|$1vU}Z6hhbPRY6ny!7+sfA)ifn=7MSJOX|t zZLSB%z1QjJT@oy8Q-3Yf?XTiBQ$%?NVi-`Fr)(VMU5>+hs+Cz#JkcN4kn)NA?t&65 z>3fpdi|^{DKUlZLi@~a0aLKsD!Hj&(kEfwhT#;O6Z%lMjDBC*QoNEZKr2@pis4+i15cR7U8rKwI zAdMvD%J>+1iV=_eYt||A@vJ{>m71PRVP+XeqflIua#h$586B@;k)bvLq$DUuP5Fhv zmQy(GOUk@_W*sHsmVSO>GF;?c=+$m!XY8=_f^=LvFHCeGstfb8&~lQ|`>vmN^!oz> zIarT?9LlTq>g5jtdps)Pf59dC@48g~8=pUyl?VhGn7bfhi4|8+Bv%dJ6Hp}OYlZ89 z_ZnsM9u+;*gXe9yz$ia}K=dSWnMmv9zWCeqVq2nlJP&l#VB~Ml(}h4vxW#Wb<##!` zGmprNC;}|GxL2~c+h`q6p@(WL5Zi~T?6^Iy)5K-g1se#yXih7)`tZ|rrW(%46BdcY zlzc?DDq@Bq7g6beHnUGSY;_&hER=w4>5jMFR(Q2&(&a_1Qi!6uzQ;ka9lTJn5$(Jj zBQxNx4Ll~G^w4kgb(S`t&mkQZ)tE1w3@KGPkcEfb&=i?+G+ z$^H4|ZpSD&$D|PQ-1;{;+rKuiSABX^^!(j|s2b{nZDP45=jDseVFFA~ldu-y1Q%`w zx1=lv%3|VLQ5>@3&3i~MCw*5(tIpNtT;bT7g$o)@Wgt@0@Ka<{QMK!8M2`ilwn+w( myXEH+CJo@$LuMI0&ajB)gtS`Wp{WlAl{xiLIHt{c?R0kIT literal 0 HcmV?d00001 diff --git a/content/articles/deploy-pgpool-via-kubernetes-pgpool-operator/index.md b/content/articles/deploy-pgpool-via-kubernetes-pgpool-operator/index.md new file mode 100644 index 0000000000..0281142a84 --- /dev/null +++ b/content/articles/deploy-pgpool-via-kubernetes-pgpool-operator/index.md @@ -0,0 +1,372 @@ +--- +title: Deploy Pgpool via Kubernetes Pgpool Operator +Description: Seamlessly deploy Pgpool on Kubernetes using the Kubernetes Pgpool Operator and boost your PostgreSQL databse performance on Kubernetes. +date: "2024-05-23" +--- + +# Deploy Pgpool using Kubernetes Pgpool Operator + +![Kubernetes Pgpool](./hero.jpg "Kubernetes Pgpool") + +Containerization and orchestration are changing the game, but managing databases in these dynamic, highly scalable environments brings a new challenge. While Kubernetes, the leading container orchestration platform excels at automating deployment, scaling, and maintenance of containerized applications, effectively managing databases within a Kubernetes cluster requires a different approach for optimal performance and scalability. + +This article explores Pgpool, a powerful middleware that elevates your PostgreSQL database management strategy within the Kubernetes ecosystem. We'll dive into the fundamentals of Pgpool, showcasing its significance in effective database management. We'll also provide best practices for deploying and configuring Pgpool on Kubernetes. By the end of this article, you'll be well-equipped to integrate Kubernetes Pgpool and streamline your database management approach within your Kubernetes environment. + +## Advantage of Pgpool in Kubernetes + +Pgpool is a high-performance open-source middleware specifically designed to manage database connections efficiently for PostgreSQL databases, offers significant advantages for managing them within Kubernetes environments. As an intermediary layer between applications and databases, Pgpool optimizes PostgreSQL database connection management through efficient connection pooling. It distributes read queries across multiple PostgreSQL instances for effective load balancing. This capability is particularly beneficial in Kubernetes, where applications can scale dynamically, requiring the database to handle fluctuating workloads. + +Additionally, Pgpool facilitates routing of read and write operations to replicas, ensuring high availability and data redundancy. Furthermore, advanced features like parallel query execution, suitable for complex queries and large datasets, contribute to resource optimization and efficient query handling in Kubernetes deployments. + +Beyond these core functionalities, Pgpool also streamlines health monitoring of PostgreSQL instances. It can automatically detect and remove unhealthy replicas from the pool, ensuring applications only interact with functional databases. This proactive approach minimizes downtime and improves the overall stability of your database cluster within Kubernetes. + +Moreover, Pgpool integrates seamlessly with Kubernetes deployments. Configuration options can be leveraged to manage Pgpool instances as Kubernetes resources, enabling them to benefit from Kubernetes built-in features for scaling, self-healing, and automated rollouts. This tight integration simplifies management and streamlines operations for Pgpool within your Kubernetes environment. + +## Deploying Pgpool on Kubernetes + +### Pre-requisites + +We have to set up the environment to deploy Pgpool on Kubernetes using a Kubernetes Pgpool operator. You requires to have a functional Kubernetes cluster and a basic understanding of Pgpool. Here, we are going to create our kubernetes cluster using [Kind](https://kubernetes.io/docs/tasks/tools/#kind). Furthermore, you should install [Helm](https://helm.sh/docs/intro/install/) to your Kubernetes cluster. + +In this article, We will use the Kubernetes Pgpool operator [KubeDB](https://kubedb.com/) to deploy Pgpool on Kubernetes. But before we start, you need to make sure you have KubeDB already installed in your Kubernetes setup. To use KubeDB, you’ll also need a license, which you can get for free from the [Appscode License Server](https://appscode.com/issue-license/). To obtain the license we must provide our Kubernetes cluster ID. Run the following command to get the cluster ID. + +```bash +$ kubectl get ns kube-system -o jsonpath='{.metadata.uid}' +8e336615-0dbb-4ae8-b72f-2e7ec34c399d +``` + +After providing the required information, we will receive an email from the license server including a `license.txt` file. To install KubeDB, use the following helm commands. + +```bash +$ helm install kubedb oci://ghcr.io/appscode-charts/kubedb \ + --version v2024.4.27 \ + --namespace kubedb --create-namespace \ + --set-file global.license=/path/to/the/license.txt \ + --set global.featureGates.Pgpool=true \ + --wait --burst-limit=10000 --debug +``` + +Verify the KubeDB installation by the following command, + +```bash +$ kubectl get pods --all-namespaces -l "app.kubernetes.io/instance=kubedb" +NAMESPACE NAME READY STATUS RESTARTS AGE +kubedb kubedb-kubedb-autoscaler-9dfbd954f-8fjzt 1/1 Running 0 2m39s +kubedb kubedb-kubedb-ops-manager-7669786dcc-hlcg5 1/1 Running 0 2m39s +kubedb kubedb-kubedb-provisioner-6d9db6f7dc-km8th 1/1 Running 0 2m39s +kubedb kubedb-kubedb-webhook-server-758f57c4c4-q7r8z 1/1 Running 0 2m39s +kubedb kubedb-petset-operator-5d94b4ddb8-kk5bn 1/1 Running 0 2m39s +kubedb kubedb-petset-webhook-server-b89bf7d9b-ng27h 2/2 Running 0 2m39s +kubedb kubedb-sidekick-5d9947bd9-r2j8s 1/1 Running 0 2m39s +``` + +If all of the pod status is running, we can move to the next step. + +## Create a Namespace + +We will now create a new namespace and deploy the server. The following command can be used to create a namespace: + +```bash +$ kubectl create namespace pgpooldemo +namespace/pgpooldemo created +``` + +PostgreSQL is readily available in KubeDB as CRD and can easily be deployed. But by default this will create a PostgreSQL server with `max_connections=100`, but we need more than 100 connections for our Pgpool to work as expected. + +Pgpool requires at least `2*num_init_children*max_pool*spec.replicas` connections in PostgreSQL server. So we can use [Custom Configuration File](https://kubedb.com/docs/latest/guides/postgres/configuration/using-config-file/) to create a PostgreSQL server with custom `max_connections`. + +Now, create a Secret using this configuration file. + +#### Create Secret with Custom Configuration +```yaml +apiVersion: v1 +kind: Secret +metadata: + name: pg-configuration + namespace: pgpooldemo +stringData: + user.conf: max_connections=400 +``` + +Let’s save this yaml configuration into `pg-configuration.yaml` Then create the above Secret, + +```bash +$ kubectl apply -f pg-configuration.yaml +secret/pg-configuration created +``` + +## Deploy PostgreSQL Cluster + +Here, is the yaml of the PostgreSQL CR we are going to use: + +```yaml +apiVersion: kubedb.com/v1alpha2 +kind: Postgres +metadata: + name: postgres-cluster + namespace: pgpooldemo +spec: + replicas: 3 + version: "16.1" + configSecret: + name: pg-configuration + storageType: Durable + storage: + storageClassName: "standard" + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 1Gi + terminationPolicy: WipeOut +``` + +You can see the detailed yaml specifications in the [Kubernetes PostgreSQL](https://kubedb.com/docs/latest/guides/postgres/concepts/postgres/) documentation. + +Let’s save this yaml configuration into `postgres-cluster.yaml`. Then create the above PostgreSQL object. + +```bash +$ kubectl apply -f postgres-cluster.yaml +postgres.kubedb.com/postgres-cluster created +``` + +Let’s check if the server is ready to use, + +```bash +$ kubectl get postgres -n pgpooldemo postgres +NAME VERSION STATUS AGE +postgres-cluster 16.1 Ready 2m7s +``` + +### Create Database, User & Grant Privileges + +Here, we are going to create a database with a new user and grant all privileges to the database. + +```bash +$ kubectl exec -it postgres-cluster-0 -n pgpooldemo -- bash +Defaulted container "postgres" out of: postgres, pg-coordinator, postgres-init-container (init) + +postgres-cluster-0:/$ psql -c "create database test" +CREATE DATABASE + +postgres-cluster-0:/$ psql -c "create role roy with login password '12345'" +CREATE ROLE + +postgres-cluster-0:/$ psql -c "grant all privileges on database test to roy" +GRANT + +postgres-cluster-0:/$ psql test +psql (16.1) +Type "help" for help. + +test=# GRANT ALL ON SCHEMA public TO roy; +GRANT + +test=# exit + +postgres-cluster-0:/$ exit +exit +``` +#### Create Secret + +Now, we’ll create a secret that includes the `User` and `Password` with values from newly created role and password above. The secret must have two labels, one is `app.kubernetes.io/name: postgreses.kubedb.com` and another is `app.kubernetes.io/instance: `. + +```yaml +apiVersion: v1 +kind: Secret +metadata: + name: db-user-pass + namespace: pgpooldemo + labels: + app.kubernetes.io/instance: postgres-cluster + app.kubernetes.io/name: postgreses.kubedb.com +stringData: + password: "12345" + username: roy +``` +Let’s save this yaml configuration into `db-user-pass.yaml`, Then create the above `Secret`, + +```bash +$ kubectl apply -f db-user-pass.yaml +secret/db-user-pass created +``` + +## Deploy Pgpool + +We are going to deploy Pgpool using KubeDB. Here, is the yaml of the Pgpool CRO we are going to use: + +```yaml +apiVersion: kubedb.com/v1alpha2 +kind: Pgpool +metadata: + name: pgpool + namespace: pgpooldemo +spec: + version: "4.5.0" + replicas: 1 + postgresRef: + name: postgres-cluster + namespace: pgpooldemo + syncUsers: true + terminationPolicy: WipeOut +``` + +You can see the detailed yaml specifications in the [Kubernetes Pgpool](https://kubedb.com/docs/latest/guides/pgpool/concepts/pgpool/) documentation. + +Let’s save this yaml configuration into `pgpool.yaml` Then create the above Pgpool CRO, + +```bash +$ kubectl apply -f pgpool.yaml +pgpool.kubedb.com/pgpool created +``` + +Let’s check if the server is ready to use, + +```bash +$ kubectl get pgpool -n pgpooldemo pgpool +NAME TYPE VERSION STATUS AGE +pgpool kubedb.com/v1alpha2 4.5.0 Ready 53s +``` + +Once all of the above things are handled correctly then you will see that the following objects are created: + +```bash +$ kubectl get all -n pgpooldemo +NAME READY STATUS RESTARTS AGE +pod/pgpool-0 1/1 Running 0 59s +pod/postgres-cluster-0 2/2 Running 0 5m7s +pod/postgres-cluster-1 2/2 Running 0 4m52s +pod/postgres-cluster-2 2/2 Running 0 4m52s + +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +service/pgpool ClusterIP 10.96.81.203 9999/TCP 60s +service/pgpool-pods ClusterIP None 9999/TCP 60s +service/postgres-cluster ClusterIP 10.96.252.10 5432/TCP,2379/TCP 5m7s +service/postgres-cluster-pods ClusterIP None 5432/TCP,2380/TCP,2379/TCP 5m7s +service/postgres-cluster-standby ClusterIP 10.96.203.14 5432/TCP 5m7s + +NAME READY AGE +statefulset.apps/postgres-cluster 3/3 5m7s + +NAME TYPE VERSION AGE +appbinding.appcatalog.appscode.com/postgres-cluster kubedb.com/postgres 16.1 5m7s + +NAME TYPE VERSION STATUS AGE +pgpool.kubedb.com/pgpool kubedb.com/v1alpha2 4.5.0 Ready 60s + +NAME VERSION STATUS AGE +postgres.kubedb.com/postgres-cluster 16.1 Ready 5m7s +``` + +We have successfully deployed Pgpool to Kubernetes via the Kubernetes Pgpool operator. Now, we will connect to the PostgreSQL database via Pgpool to insert some sample data to verify the deployed Pgpool is working. + +### Connect via Pgpool + +To connect via Pgpool we have to expose its service to localhost. KubeDB will create few Services to connect with the database. Let’s check the Services by following command, + +```bash +$ kubectl get service -n pgpooldemo +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +pgpool ClusterIP 10.96.81.203 9999/TCP 89s +pgpool-pods ClusterIP None 9999/TCP 89s +postgres-cluster ClusterIP 10.96.252.10 5432/TCP,2379/TCP 5m48s +postgres-cluster-pods ClusterIP None 5432/TCP,2380/TCP,2379/TCP 5m48s +postgres-cluster-standby ClusterIP 10.96.203.14 5432/TCP 5m48s +``` +Here, we are going to use `pgpool` Service to connect. Now, let’s port-forward the `pgpool` Service to the port `9999` to local machine: + +```bash +$ kubectl port-forward -n pgpooldemo svc/pgpool 9999 +Forwarding from 127.0.0.1:9999 -> 9999 +``` + +## Insert Sample Data + +Let’s read and write some sample data to the database via Pgpool, + +```bash +$ psql --host=localhost --port=9999 --username=roy test +psql (12.18 (Ubuntu 12.18-0ubuntu0.20.04.1), server 16.1) +Type "help" for help. + +test=> CREATE TABLE music(id int, artist varchar, name varchar); +CREATE TABLE + +test=> INSERT INTO music VALUES(1, 'John Denver', 'Country Roads'); +INSERT 0 1 + +test=> SELECT * FROM music; + id | artist | name +----+-------------+--------------- + 1 | John Denver | Country Roads +(1 row) + +test=> exit +``` + +## Verify Data in PostgreSQL + +Here, we are going to exec into PostgreSQL pod to verify the inserted data through Pgpool. + +```bash +$ kubectl exec -it -n pgpooldemo postgres-cluster-0 -- bash +Defaulted container "postgres" out of: postgres, pg-coordinator, postgres-init-container (init) +postgres-cluster-0:/$ psql +psql (16.1) +Type "help" for help. + +postgres=# \l + List of databases + Name | Owner | Encoding | Locale Provider | Collate | Ctype | ICU Locale | ICU Rules | Access privileges +---------------+----------+----------+-----------------+------------+------------+------------+-----------+----------------------- + kubedb_system | postgres | UTF8 | libc | en_US.utf8 | en_US.utf8 | | | + postgres | postgres | UTF8 | libc | en_US.utf8 | en_US.utf8 | | | + template0 | postgres | UTF8 | libc | en_US.utf8 | en_US.utf8 | | | =c/postgres + + | | | | | | | | postgres=CTc/postgres + template1 | postgres | UTF8 | libc | en_US.utf8 | en_US.utf8 | | | =c/postgres + + | | | | | | | | postgres=CTc/postgres + test | postgres | UTF8 | libc | en_US.utf8 | en_US.utf8 | | | =Tc/postgres + + | | | | | | | | postgres=CTc/postgres+ + | | | | | | | | roy=CTc/postgres +(5 rows) + +postgres=# \c test +You are now connected to database "test" as user "postgres". + +test=# \dt + List of relations + Schema | Name | Type | Owner +--------+-------+-------+------- + public | music | table | roy +(1 row) + +test=# SELECT * FROM music; + id | artist | name +----+-------------+--------------- + 1 | John Denver | Country Roads +(1 row) + +test=# exit +postgres-cluster-0:/$ exit +exit +``` + +We’ve successfully deployed Pgpool to Kubernetes via **Kubernetes Pgpool operator** KubeDB. Also, we use Pgpool to connect to the PostgreSQL database and insert some sample data into it. + +## Pgpool on Kubernetes: Best Practices + +To ensure the stability of your application when using Pgpool on Kubernetes, there are some best practices that you should follow: + +- **Persistent Storage:** Use Persistent Volumes (PVs) and Persistent Volume Claims (PVCs) to ensure that Pgpool configuration and state are preserved across pod restarts. Choose a reliable storage backend that meets the performance requirements of your workload. + +- **Configuration Management:** Store Pgpool configuration files in Kubernetes ConfigMaps for easy management and updates, and use Secrets to securely handle sensitive information like database credentials. Enable dynamic configuration reloads to apply changes without downtime, ensuring continuous availability and minimal disruption. + +- **Resource Management:** Define appropriate resource requests and limits for Pgpool pods to ensure they have sufficient CPU and memory, preventing resource contention and ensuring stable performance. Implement Horizontal Pod Autoscaling (HPA) to automatically scale Pgpool instances based on resource usage, ensuring optimal performance under varying loads. + +- **Networking & Security:** Use Kubernetes Services to expose Pgpool to application pods, employing ClusterIP services for internal communication and NodePort or LoadBalancer services for external access with proper security controls. Implement Network Policies to restrict traffic flow and ensure that only authorized pods can communicate with Pgpool, enhancing security. Apply Role-Based Access Control (RBAC) to restrict access to Pgpool resources and use Pod Security Policies to enforce security standards, such as running containers as non-root and preventing privileged escalation. Secure communication between Pgpool and PostgreSQL servers by enabling TLS encryption, protecting data in transit. + +- **Utilizing the Kubernetes Pgpool Operator:** Leverage the power of the Kubernetes Pgpool Operator for effortless Pgpool deployment and management. Kubernetes Pgpool operator acts as a helping hand, automating administrative tasks and simplifying configuration and scaling. With the operator at your side, database administrators can deploy and manage Pgpool instances with ease, optimizing performance without the heavy lifting. + +## Conclusion + +In conclusion, Pgpool has established itself as a highly effective solution for enhancing database management within Kubernetes environments. Its efficient connection management, optimized pooling configurations, and robust load balancing and replication support significantly contribute to optimized PostgreSQL database performance and scalability. This guide has successfully equipped you with the knowledge to deploy Pgpool on Kubernetes using the Kubernetes Pgpool Operator, a suitable approach for various deployment scenarios. For a more in-depth exploration of implementing Pgpool in Kubernetes, the official [Pgpool documentation](https://www.pgpool.net/) offers comprehensive information. Remember, achieving peak database efficiency and availability requires ongoing optimization and a strong understanding of Pgpool-specific best practices. Additionally, services offered by KubeDB can provide valuable expertise to ensure your database management maintains high performance and operational standards. \ No newline at end of file