From 7be86bcbea16ddfa686ec7e4313d66c7d6f1d9c9 Mon Sep 17 00:00:00 2001 From: Martin Haase <martin.haase@daasi.de> Date: Mon, 14 Jul 2008 13:06:46 +0000 Subject: [PATCH] Last Sync-Up, no change in functionality concerning RBAC git-svn-id: https://textgridlab.org/svn/textgrid/trunk/middleware/tgauth@1499 7c539038-3410-0410-b1ec-0f2a7bf1c452 --- .../documentation/install.pdf | Bin 0 -> 150436 bytes .../documentation/install.tex | 768 +++++++++++++++++- .../documentation/literature.bib | 119 +++ .../lib/Authentication.class.php | 100 +++ .../lib/CConnection.container.php | 21 + .../lib/CLDAPConnection.container.php | 19 + .../lib/CSQLConnection.container.php | 18 + .../lib/DataBase.class.php | 26 +- .../lib/Date.class.php | 384 +++++++++ .../lib/Helper.class.php | 37 +- .../lib/LDAP.class.php | 21 +- .../lib/Node.class.php | 100 ++- .../lib/XML.class.php | 155 +++- .../lib/iDate.interface.php | 19 + .../lib/iXML.interface.php | 1 + .../rbac/RBAC.class.php | 6 +- .../rbac/RBACcore.class.php | 36 +- 17 files changed, 1732 insertions(+), 98 deletions(-) create mode 100644 info.textgrid.middleware.tgauth.rbac/documentation/install.pdf create mode 100644 info.textgrid.middleware.tgauth.rbac/documentation/literature.bib create mode 100755 info.textgrid.middleware.tgauth.rbac/lib/Authentication.class.php create mode 100755 info.textgrid.middleware.tgauth.rbac/lib/CConnection.container.php create mode 100755 info.textgrid.middleware.tgauth.rbac/lib/CLDAPConnection.container.php create mode 100755 info.textgrid.middleware.tgauth.rbac/lib/CSQLConnection.container.php create mode 100755 info.textgrid.middleware.tgauth.rbac/lib/Date.class.php create mode 100755 info.textgrid.middleware.tgauth.rbac/lib/iDate.interface.php diff --git a/info.textgrid.middleware.tgauth.rbac/documentation/install.pdf b/info.textgrid.middleware.tgauth.rbac/documentation/install.pdf new file mode 100644 index 0000000000000000000000000000000000000000..47943dffb569de13e916476cc40a36a7b4a07396 GIT binary patch literal 150436 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%0AAw02+ul-U$;<ASrTSo=%ok53f@hwm`3bJp+{t=j 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�K9?p1l`T!&eoiB1djffVK>H3v zjag5Q@N|8h_bKj9agp`4=t<FPtm;OQK{6GKv1hg_Su~mqy5kI5P@L-oRchV9RwvnA za4(E@ZfN+R5xENC`}gt6joBs1?H&p-3ELYBGFV#1;Y)N8v1JwK)6X+aWXTGsRy;Q> zz|Mvh^yN_zf^LK76zzAh@Tc4Lb+d=};IzVLbOl%3G6f6Z$QU+JcY$9dBwP(*-7s&a z?GBi2L!aspq2n>5ctrygPmd$>Oi_|8wSD##L}7sqzh%~FiVLdpuj#=&uv=j`P$)CS zF@-ajx~Y_fN0FCgb_rom17Y}Qh4!<r=S&TDw<{!<`lXcMEPT%s6oD#DIFNy?55`tT z&2Cn(UXh=W(;EPNYHPmd=rth?H(N$g7;Cdu-?!fvUOE=BN`uLDXldpb1ylO=sIG?_ zN7Pc?Bxm53znD!-6~V?5=#cK-Pk}<*@u3EDcEbQQf<vbN2WLa1@m?*lK;BZq!xyiL zfq3hfj|ci~8vZ@A-%WDAKvxIs#qk9QYQKE2;uMeY%E1mb3sV2E%r;rs<PoufWHT-K zfwjTg?558pS`Pop%D|TlgpX|2aGA%dTqVIJnklDAMJ}su0F`eSduLXkH@CGmJWb-T z&9}887Q?zRUe?>$bD**!dfPg`ATe<TUoDzx@0R&(=7{ovpNG&zIZat|S5x19QQ23v zl18^QtI3^@3q~7VAO_bxM^3yOW)?_lOU3Tp$&PpL&~2RrzCTbqm5oNU)JLhfB~P9x zH!<59QwYaH4(US0Maqy2A|ORqm*oDKBQ^X7t|yjsWP0r9^0>?x9zZ5wurF-i#f}8F zz1&O&L-*?Xyk46ROe{W_vgjDhLY{zBhhnJtJD$C0a0m}`-bP;Uu%>?{C-V{U9vn8p zOgh8WhZ?Yez%xXYSP*38#dfoBMA8Bqm}p~5CgeO-V1L!5TFL7ZV)6<P2xdz8zNmMD z;~2wVqK^bhVrEMQdX*=aVz{08QqhSsIr2$%)>ROrn{s}E1bXuW;VVAvk-rb~omgU3 z=!1EM2BO~rI7v;T8`7N?KmHtkI+lL8<h+bZp&M$|*WHaniQ_DpLuB6)O{<QU7~Kw6 z)*|nEUM&z6vJ6$O0{M>SLg=uhru>fTP{{=t^q4o8gNcia+x`*BPJxI=UWbv-r%q~* zejF^Yg*&tNz|DHa=Cvfi?!D(LQ4I{f{>ocC8P;}m=FFGXRyR|9v8q9PX8n%AlISR# zn|{2F2`RUzPxij@`x(|8rsd$h^$qeS5#4jCC5ovd2^{^X`l|@B!9R2p&pdm;ZoDc~ z4yz1;MpcS60kHk-I9pk_%3WK(87)Cn<Fbb=Z`x|lFxK8OjA*uft>sbP$=WW&myC-~ zF9nyU;s8Whmh$9*;tur>k~oH)-i(py#|NhiKmK^GI#>!h+)k&w`h&4|%!pAe7_VGM z=0g$|MNmhVVzI~&9LJ5Lj09@-b~Mv{bS)*Dir050|AbI6-flBjYflUbw4_lO{(^n? zR9HRhS#oF99jLP?LwY&+kPcRl6e2C<tSlu#zXQeat&tSI#9XB3Ksf8ea@7ZiX|N$K zl1Vl$DimO9S4y!U+9}`@bdH`<R~2L-v>`((Fp%v9gio2^hw(ZmPyO68GII|bZSz$@ z8eRPq*$kt(vTh3jbUwtz5v1dqs69(Vg#ID)XUzqDq}cS@&C7C(jFPc!Gik=M7^det zIs$%LEwZ}>qweScL98upk*=IzImkQ1w0BumwVPb4kNRgL%(SZjFz1Cy25^wMHVQUG zC?4fRdp#vQFPBrE%od?zX<9_5i36drip&OM>OYV^JPkf(G=UW*i{tUSM_Wiqd{DWN zrifUfOIL8=f)`S=5c*&Nu>p-7ZkW|;Qq;BG1$Wg|W0!0IjEj9gI|Pk{WqKD_6{;D) zLjJwdCJDP*yLDs{E_R4I**kWrY&X=CCQap*R~D)J)%b!5*o+ladkZLEi=Wj95^=&C zICS3)p|r&_H@#ih9vKq-TatG4K&;_{*I|5tMhJUZhco0jU>@NqQFz!vMF?F8WCNl+ zSb+@&O#Rna>NoiYg-1(k=yoDQ;nNbHaVz!ycD$sC$llZub&qIT@Hp^3T46D6wgXfm zuUXmHVSe9m?Ah)FYad1x^9OXF$%&ndY<C{A+(9;oeoyPp2PqSj8!8QxSJbq=m*K3r zF~yp9+r}I710(*lskM2-?D`5Zbjd0q1h2OeXX>SHj1bV8dTKmQfe~WDcIZRIh$)<{ zE!mU9=2)2F$AA<zER3)P@j>^e_A&OVBnwf(V;3`e>fW}SX4;*Qd_^<SFW<oRvy6n# zx*k`oz758^V!4n~&)caa7n`UQsrC`d>QUnXFt_IqTf5%wIAE1lDqpyk_Dqy>`DMpp z*a=H%qnMI;7WHZ2z+<_u)C~g>4KKSGBWo_1*Y1CFwKDOx<b?3q8%d9SDhW{SgM*w; zQ{z!>N46OTju0QG3)|~i#%`o1$c#qy-}C%pUYt%9W6yb@&Hk-$E;M}ZL=p>ue_h0= zUAper6mJ;LtW`99UsM<u=14@`NyzWXCl@-;CtCqDjiB+9>_!Ct)5BB)rOd;Rt}#+N zXSFnUI<<huWlQKbz$|20=~vI-UX7bk;{*KNNYRaX))MEQ&oYr5_p{ogf||AIwO21$ z{vyM{*pOVL>E^O3D10FPVp6J$zJBGr^U`?nZ)T0LglNOT(=6EX;-gVQt#@U(e4!YZ zUZd-}>_S|5p0(c>hq^SlHw<uXB0b9V_$tuejGFEYHUlRvv1^WUN5{By@w=(%uVPw{ zE<T(Rq(+L)^9X+A!G-h~!fRzVBvs9b%WD6aKV(#GbbNRow)Qe&886$jP(qTyHamZ$ zp|3nq^ez!Fv1jh1K}kZqAYfiWmcJOp{B#J=h-1kYtr;li$%hD%LH-4%UQ*j1f+yxi zmWhS>WLD)9aaVI@3fvO!r;>hoD){D4P5IM^u|1lVY^T5k{q8xRSD>*~52-FjH`!tb zP?YTtYsP%Kb&#eu-Ak5Vj4_<iH;J=0e^^s!=kIJ?8YF7l;V1NW#kZkjI&>jmLYwfK zCSpG=G3(i@Ebd*WmOk7<U(0;V+xDkCl-lr`tl>6cnQOYC$f-qJcI<0+iK**|j4Sjw zONz-(cd)ysR?5uTY)mmv-~pVch)2e>i=yw&Lgj12JD{IQe9Nz+K9_gIwp48kneY)R z@7)|zRw&lRN|Ot^xsdDTd$x5EXK-SuhoyT>k$EtKq=MjyV<}+c(eClhrhj`NE(&Gx zaNG;q(F|^NoBtA;C1K#Aa^xV3KsE%sR<q2dJn76tyvcXR2cwn0K|2NK^`ndcei(I$ zug~w=Jb06Wi~`#Vi*l@$!AAUHYHswC5UqkDJ!ta%L`rM>rKxRnaL)ORyp6!#v3tM; zVgFbOPLA)0hw+|qEn5Cl-aW~(cD{6uHaX&}5UC{H5%oN&2LYwoH5wQ#G27510U2Dt z<Q$QFY$aupEzw5ROG7<wIyY~H$oEC-=jn3(qKyl^Sn<fAUSEfvvCG3q_4bfgFy+l` zjxv^+r0tUAz>2GF{q~(;Kuc*ZK>{H(ep8o%WdJds_;=JjFoLBz>T0hdyhVEXJkJ35 ze&f!U4p{`de{4r5ALd}IcYQimyA>k*%dvc7N$w){-5t+NuygUXdO|Q@2M00xhFGa} z0~e);rGH+OIL;Sxuhax_`;-<D>t^_%IQ$X+LdB-;y}B5Ju7J;&?V}ZYbC@JLulI)l z?dHe|poo*y`32_&y8O<u-y_hr=f72^GpFCQ6=#>Br7S()LEcHbKk6JV7=l>gjSJgO zK)WnYz`jgvmp6VRJ+Rg7Xvt+zyA(q57$b5;n1a*KIMJ}izQ|%eJJgG8EONVxuU@(v zBVB$=d`wvNGnB;NT(S841?FL{dt43j<C8}V!xr`6j)ZVE0mabs)R(2U524yAm`Uf- zvI;<aVL)aTp_2QBC(@A)5@)TN9gb~30Oy1u^DrJ=<~~iCvkVA0oU2gzeu|l&CcaOb zit;3S{9$)9GdA2EEPsPF>Hq!H{g)Mf9@_@dUQ3ICDQy|4+#KUc?WhB)#P~p>P<LRF z!VN8*I1Q}5u`CaNv7A>dLfa;LgQJcmtvLEM(A()vSE6Htk_DZ<ULMQUs{}?-&B~f2 zf|??ef!YVP0dG8JD2~x3N*S+t<@T?#<@9dU^<?k9+FQ|+2Jz+NC9ydD@81><NzpTj z?lgriLPpczidj8{s$UsxWHhd8X*ZiBbMWFUyXVKV@$XiTJn|oNxhWsUr5nz)^Br0n zB*0YJ$ZSjWk_f)_9~DjR#cDdU4SqyADPMQNZ2|e92EI1)@C7ezjRX&oc5$?log#~` z8z;Ir-k1!+DKgE#M>~$5eVa*Ct^Sm6)#d8kVp6|E&CT2lCQxT7XK^AYZZ{2Y2#nFa z++<!Kl%rUgwI9Env>XZ^94F5_z3hXLPpnh&Jj+xAbA<$CsLvP#ttwC@qzwW4W&2$S zLoId7xJRIu%@S2zRv71$(2KNp3|iSExdSQ4JxYpEDtG4UfR`Zs)?-Y?l|2vP8q^v~ zzS*0W`tp%m54E-b*96ly&2mE5HTM}VcAMMVO+YuhBC09k2lxOa%EmOh<|uJ60(yh8 zNQoGt!S1Piez|!XP=~Yw1HggDjEqTon0P@%ay<=JMPU0*wwXQWIbt)cZ~CAb2)M8@ zbPQ9_B;BycyH_~Zbfo(dljkX4Ia`;vi0V*<BwD@qNf)BWq|AzBTBI{Zyj_X4$35$* zD==dmS2Ok4ioZ5T7+0H48vh7`i@JBg7%kdWCQu1<?6GB3t4|=m8NIK4nDX<wwsdd} zK5IeKyp<RjeQ_v6$$E%8JG0)AQ$Dj!D0ygSQAS|dlij1;ez&W3{@xuzBXY4c5MG!l zs!3;gMG8&jwG>PZ=wd~tUjga3x~01B#eR4xM!&PZKp(;*Pc1U_*+w`@N?kk;`I=rg zSjRc7HOEi_6HHDb+sj9R9aWD_*{A$vzbG>Jm@%-{tQBOyQ$Ck#1(}~9QCDU3B^9un zOzq&2DwZ?90UH{erjt-nukHY#+TB(y%p}u>rve@a-_+|ZdPmQ<kZo6cqFrk6+J?iU z;sw!xgJx1^iF5h}maY0hLUVmlg)^BYNxfMQIk_uP@CXUie<h7r-X86^Plcl!8cBIf zVxtgIYaQ}f#gn;m!)pPqiAvk48X+nwT4R6bV=m$9P#<V76!F9C6!@WyqzhdC@uUA5 zzQ0IFrRKmTW(6-C0&k(?{pq^<D4fJm&qANbK1mfWl4B7{!97#Bh>#NTjxXP6F0)Dj zhSd3w7`pVuO(ASErV=G#S@eEWP8cOWa$*EWic)e4PMNPMa<e`7IIlY9l;4MGG@h35 z6u$+2>+eu=hC6KnK`RgmsUBO_Dbx0*k~qjDPKWh1?}>^2vMPQd(2aDJvKHN39)c5f zEP9}<09H}cwvsKj_=(aO`HH|@&1OW8f&i|1e?CLlyHb`RkHNZiaC1=KpmXV4_tolX z5OxU-?o_y=x>4?c?H(0EY_~vhs9@@j?ijLu_HayxO-)Hxm*UNXAtmRKlQR0T=q&IN zp&9zrZN|#%`N<f3S^fA@n={x#!`et|l=_sbp(-2SRhti>=7JMKld6J0c1aZ9qG(YX z<c*JGwr4~2n0SMe-zC-;Yf2T!-S>oEww4^@+ue|Fl>k%YXwcQlBl@{qil^v0TA_l$ z&gg5E#t2@humQ8tE`vUqDumY99k;-}ToUf3v-2KD=C6^Wq*80tme|g#mLXhV(DV#w ze)dNEy?1?qk3^pQbY<jm+$zKViKTAz!|r9mpvoN6+6DKiT4s<9PM9gM)CJ>ymlgS+ zX5}%mX|8snAE1qJ+OxT>CqE3yx4#nbUUtjm+g2BcG4zd<)-TX0cuin(=_146)!|m? zE9nqp08Z*VuyD>O8xQJ%r&10aKoy8Yg4d1=;$Uj_ezLM@O=k7$`YIy-6(qaL&Z{tX zn0I#VWOhC)@<-pGhzv*i?AN?ZGN3AzyRT!m%ki$yS6Cn7@M)LP86a_nc)}FhfOzQY z=50qO9=o}mGt5sz*knT6@(_eaLM&JW{dP0jCE-eW<!9JMR`l~Cj#0=g@v52Hme%!4 z8ahg?LtII1l95Dt3WYQddZS}uAq>&1Jt+<{9s!GRQXB+4iXgtaNsG-XBt|k`z?J*k z&FieEp>%q+hf98z`+96=UL8{tfyd5fV0Uv)KhmF9N-h~(;=SxTOSfI_7$Yx(vNTwL zTjEeQxwZgqpxCEZ*`){qOntkfQ(i!+5K9S#BY)WRx#NUbqjgsqXeT`m&q1erlQ6JI zg!>&lh7*^DTv@k9wId#Wya_tfQ8_?j9E6_)wd9rE+c6JzCJQEOIlx>y@VM1;`iui= zty0QR>@_iqgw|%5YL;LyH@}PxW!}yvY^u}zy2EJ{JjbrhOkT(;A$qmJp&B0RQs{p5 zF$gqo9|C7WNYPhWXu-$EMyQ+CMK8;{m0}QVD$N_kipSfj_SV*ooEg`+Qh;5XYnU-_ zkGdCFgD)#re#W%(NTcg+&~~90n{83y?JSY21LnT`i(h!M(yTn~cE}6+;HFb15(L4W znsmz!cX9s11ryS}G2q}jQb>EGwn{<m-ac~Ut<hC(Ck<V42K%HFbs*}*7FktbFDWwv zLo+S;ELUFFEQI}WB$4G_5q2t_{Fav!4Z*CKzaF@z9N`WOGg@gL8xgze6bnr7cWZY( zwN*`0l^*|x*3@)`T>|#|1R6R)WBX@Pfi2rB_436yZ0RnAhQWQgaYc`Az-%)dFP6Jl z?}GxJyPNM854DJ?*AiL^ljlaD@DM-5T9qpN*R23qz2aILYzDKAhZ0v)2<4HhVezk` z;i>74?n6rW3q|N&^8>iH7J}+%#*s)ZTEZ}W%M>uZMpbc=zq@ySV7_rw?BQMwwK3gs z6vqN36Mp$fb;|t6iRz^6jc~SRyY+eLJOcmi<W(*<3xi7iCAf~!CsjyI8C4Fn;VE>* z@p2lxai+e37XhsiOYR1J+A)(K83$CfO(G>&AhmG7IeH##o4F-iLUJ_6@OI2JJLJQ3 z0)Nc3U&h6<2Ho13_>0ABN$tf4A;~JW9H=wCDUD2?@Fq%aun*RD<(sA)Q4Hf=ZduVE zhvda!F;D<4Z|#zg+*rcQ7+UccX#5I<`x@qiF_qv|m34OZm`8oK9}+vtPz;mqq|=1> zKK5K{jh!7FQ_$f<Kz@Fyt4@jiR`BA`bG{v*bf{=TV|0~m?@rBVky(l{ome@At5_;~ zz5-$<#s(56kFn+Ty__OJ5QgVt>U-*-sNtQ-cMMoM(^_2a96bS@$Rndbje`=qMs*;p z<yFdgJj)^`np@};x!?lY5l!?U6_qdHnvq}W_(dbu|2#fd+%kM*FD%BLdL#pHHT_Br zjk!tmT{!$hu-Dz2$Zbj1_EXDHK&zC#FU}<~LBEa|?@$WNWFt+<;OK+8o&ybDhLvRG zia(roGL>rfI(^I`&P26I>gpuf8b*`gQD=*<U5XJsHSaUAm{#T#1$v>;t5VBqifB8D zf;>)J=V0AizCCQ-gYsx}*wQ#vC{^kSPp&W!8#Wm-#ZaMRMHPgJnq4p*#$fpwf)YX* zaTnqWA)ocmaj?@5`SnQ(3qitC0*Sq#!7<$+-F3!efy%Foa4ZHVFE|8aea)Ow1<$i1 zp-k7uGR^^W>cU690d$0Z;g3MOu$SkuPF?;&RG7j+0sHBR*a-`aKS;m%m%)l%b1^Vk zt}}O3p?le_v^%qg=?#hiL45sSzl<VJuQx$ELtH*$HYM9e{5T}E-C8T|$Dbt9jQGhw zx-yCL_%e?zYKwYl{|C3IlBPb5o#)4(f(xx<rC<swqb2z4z>UV5sZP7ZEFP|*XYmIE z$Hkq~M*k{X0<na$Di5-pZLqckf0l~j1*lSAAsDZe_hpj`aw$Efl`A@=upj^|m(OKQ z>5>P7M<3v6D+3V2?2MYIz)kx_bghNJXhHmt!QocRcIfRNq;Sey9}b~34$K4`wF0J% zq2tTr2-#2{sg&0$Bdf2h_?Vqga>n*6@IITY84VzVo73P%m~1GINcubm9a$))YcTIE zY3?W}Hg^tPkca9D!)rfFY;HK%a(EPSQYrcKAJ7K5D`FER73g#Wq74YGaCxat=hT*l z(TpNb(aur43mjDR_?hb=Eh5qVR8_adV!?!mSXyHa5kVb1#M_pXc)0*pJ<AVIi7Jz; z_OTuPvmQQ<R+m)=5BjhSPv<he*5$T5bIkU+740J}F61`LEh`2R)3))K&KrG1_w&dU z;Rma?3lvmH_@>K++nkp2U?|JAg06ric}DxDloLevbsWD<S|s4Hk&ZBo&O7&BZ5f-0 zfG2r-q%xyrkx8@2d6zUn8M>6_o@sv?$92)D0o+ml>NDMJ!d6z5y5Pj#+W?Bn<_|<? zd&-=p?;KRv-%E!5Y{y8yJ#$b%<{6@sH;`JzWV`iO!oKB@Y@!+(Jl#&=BLv_Plt#6e z{Xi?K&G)u`Nh^pVol`M-8m7FrDI*ZlbtfGBs&%Qh0p;NF4QPW%ClcI;c8mca4d%9X zsZznGCsKlJx{o0dXarc@(){+V8*S;0?)*&<(B3_p0)2B|7pg(viB1g8LgK$uRvF&Y z(f$&5{K<~|Un#49W)c34vdZ+%`}~`-%J7r!__tQ?zcNSu(&{OxN+>DI{-M?T7o1fF z_Md4Ye`k08S@O@E)&GN7@1F+zowNG4T95UellkxHs?0ytdMx;C?@B6m`hP=K{adDI zXl-GkXZJ6~NALQ%f2YO!pJaIdU#h#GYCFkyjoqILyMLpq``<KmuD{c6|Kzs*J~51} zKj-$R+Dn7wkMx><{{2IB_I~`=(a-(wpLaFdKb8D-{9lT-e^dKctH1Vtw*J-IU*rDj z<yYO$bN*`o`~J`Jzk2-V{Xd@n&$a)_@t-~XMn(QT3+aDMMP_3DTLy~H#PT;C`CSh8 z=i7$Q#P)aLe<FNi{`YSpJ~R8Tt~mZDc_=>1uPb3;fA8`Ct_{U!{WTaH<4=VsJ{$Aj z!?Ur{N#e8px-)iqI$3=7Uu<l4#y{U~eD+@#@*gVV-kIlr^S6Jp(Em4e>ANzH{_pF0 z|9PWxeJ}Z2N%*@~j^RDa`LCbTzZu~4Y(F{uMph;cpBeF)e@mD8j|^}YMrQi|SS%N3 zqN#9H6O^D0QZfa?A4f=YO{x_tYMq13kN;7WoB$!3R1~Ge7ee&C0daP=L;hW4_EZ`W z6jyLO@~ZRM*6Q9?Th{4W#f=dU)79AXdWxEdrf?yl*_bF<F)ES|5@0A03IOIK=_NpR zF*_(;Rv`R`a617)=1%frAOLbYc#z_UCLrP-z>gT9Vy>X3u28&Rz^0(LwsxTe06~~R zyuk*6X1H^Btq|yevf+h0vor6p5$LgXL;b&fl0%pKf{6`B|KQq%rVDfv@R*%5miyr& z{`W;#Um*5RTB`^j^!aY~2{oeu7WqcUytKWWCS>t+TFJivXy@Yt&`n~5d@%qRlSPAK z048on{ZP5>Eil6uXa3N+0j4{ib#TG+2v4^#4IBAD$2T=S3=et(xKEUk!yD`!sLuZu zUkLB$banMyq=E(-*z#!xp~8mz<Fia$T4kaJz|7(REa>~vz;_#+eLAiW8_zO`_YE(x z_{N{hOZ2imujZM(o5H_aLBwP99i8R#8F(|CuZN#SL}>tg7uHnN#14k<>G1Yke94=! z1OYiX4*Xu}R|f-dyan7R`{NEsX6g$*{&(077+8Rhz~^qgf{3CYULgS1V|BkkPX%r6 z(H9s3=xg7H;AeO*y)h30^>}RP>MX3InsR(W2Z8K|f1(S6S<8K3dtV*-VI3O>5S;QX zbsrPv^G2Hejs4@u0~-iXPj*KR@yC%Hws@f6PA>t|FUiZ+!Ie;NuseYInQy}Q?FgG} zJ!t%|fi4l+9R%&s<JQ4++fP`V?*5Ok7i^bLuosLI9R%8eZ*<S&39>38U?3r)L%@Q> z`Mut2%3%0ZG`P>}Km=aAys{vN^Xq{+WgQE>upNQ2p8-DbGq6SYlM6SS=;jUaTcJfJ zB13B_J6lRJ7F(ye2w*Uzd0=R-RPNE#DS~sBxQNTNNw<z2cn|Gj&D)K;h?>)_a2*WJ zJa8`AzL@@?Vx5>TdQ4`av(oGtn>9Y(-l(`X>b@xOsbT(_dz$`|nc+bMC{+tPb*GuM zWH~{%TuW$V_(@%6V|Nn%&`Q)UWrF*HHY_Go`?^R>f<PTR1j06o)V#UL=8MHe9v21i zumn$IF9YcmzdAdKRAK<SB&(v6L|CqA#hkXo&0MiDpr({3z){bYA?Zsq;`n}^nH`Xt zHCOlv6YP5Aq{ta$hZ&%4#>L<Q4N4`a=$gY9l+_eZ+V(8@;Ib}#;g6N$q;m`7r0Ck! zoT*G>5MF=|7l>IH(PC6P0}J$Zhz;*7pJV%ep4PrW;w}?zhgHYm*a&k|ao=bNwX3#7 z+C`QCPvwQ7ho{Y;s4e>Bbu9THZDZY(C6&X|9AZK!JGm=O87HB`GGS6Ns-vjo$ddIu zL*QvKa(MqstouMaiJ7sG#iCQuRvbpU02=<!S!OOc5)kmmeTI(l=P<>LnQIhz3)id0 zs<}zXv{*Uf_kgRF_a3)1O=?2xNdni83WchtJp%RS+#j?vE<HC6J_F^ru`XLoOw-u$ zT%v!mO-Qt8VN*KXCA5tG6zybqNENAXyX`A}5w7W4ej3F&Cy~IPvZ$HrL?xM{S-WuQ z#?iR;q`R{js0D2a4^3el>EqdZ1v>0Ga$A*~ParRSCJ?D|gGIF=LZn%9Vf;>k{^k?^ zl(mw@<T*7dDxP4yu-`xs{x(<kH5c7}&n>9CwnxPQc=-EBDYl-Ggqjy!L)S2=O_H?D zghAi|u=J9m_-**@7xOk&3llXAC~AvXztGE(@C0?X+}QP!S*gSLQrrm=!w{o0@VMA4 z18x^_qZwZt*m}YWcByG?25??Yo`anOK2rE~E()!UEZW!VCphwaW?@=ex2WAtM-t>U z;g%Ejy?fabBI{eUG)zyJVbo|VOyjh%Y|xIGTR5tU#a_xmvaVQM9Z&6f9A01B9EfrI z(Of?lBXn_rbl~fU>5gJOFAwmm@HVZ*u#EP%*tdEDEnfPuOMEX&2C>Ksur`T(rS=aS zqSv7%*+Bw9_p^m&#D^mNha7XQD<j|Lh#Tk|7<ym2_~dJBj(E_O^#%prcGE^6{BmQD z`?Vg^#feP{P5?jE`}&Sa(8}^5we}`dx0?kPj(3lNSbMlnXSaUTLd(4Efi(H75a@zf zr3WhP7(ixbMdc>oPVC?p*6*ZE|0wE7gFQVmcDB`^@1sGx9j+~qg`IiV7soxcdn>4E zo8vLhY$>o|nHg8JIZ#XQh>hE{XJ$q+;J!e)%j!{3BJQKzvZGsaKV$V#;R3(db&)d6 zu~G!v(OBq`AL?9+wT7GYgfz${e)Ux@J@Zmv{bn*49+;k}P$KPa@1RU6Utcm~pNXk@ z*rUxnK&HVG2+NGeci=Owm;DebZ=9TX&Ah)kZ0rYVue~o~)@HJXt>dsh1d>#iXUJS| z3|hiuuvXs(FCWUzE|4yd%owBVF1$Rl7?NtZtD&j$+l0_G)2r%VD>6IV&OG+!KD`yW zUsD5-8O+rkm4~O{c=0G%l6;c3*+LPKo*&5<)2qDMt-F(_nU=S=unR+t$|f3q0qN6H z#VG=`PCdQa(gp&zX<b2_A|=v&Qf(LMIVUVT=W#A<HuN2sz#4B(m`=h(=*`7G1h@*t zHH8ztbr3#2&E3eR9;u39I8pDU@NE}nFX_0yME3NzqD8gyrrHlK&3MvsOwtmXej39l zIOFatyHx3$wN}g8Pa|$Lje+ZIy+)wn4hYfc+ZP^_2|?{S-m}$~C@GZ>qGdirnxWLl z>oXV`#)qlneCjT(t|~Q?SjTbm>JG#a2$OT`ZI|wjE3N!-F2s{e6<ri}a<RYCm*3B5 ztyYn=6D>JAY(K@WByXxs7IpcW7tdM#fIH%R)FRnkTgQ0$_-X%;l9?hAs}-porEOYr zz?JJUtW`RSAmTv{X^Z*bdv0R1g4p+Da=D07P)qZKT<SvZ)pKwaHCyS&dx5Y*qzffh zGfcbWl^d(~<vx7*`f)=xOpUP0B(NP)Y(E{tEs*^9ic9p*bYbC^m!#w;XR_R?zP(Nb z+<}0X960GwapNUG%gx0r!lj5?uT1d3Xsm`=3YXP1cqr}LDS7_sOgF|a_Y)z9Fa*s| z&dKeysWZ`C^&!#??V5c%3)GI~uT#K~=)yYMYI(k2;!bIqBAHSTk>bL=qpEcleLAS- z4PF`t3|aH2j2@87xXni|0)^8jnKsczF%3`HRj@4*R;-t5L7V|~H(>Goc6ejAF|BdY z>}Ht#;FZSJh%t9=5`s-o{X333LGJEw=g_jE^N~o#4loNWdk3aEOw^^0?x3pCd73xz zR%*SbgRs)+hwSBx&LL+g<*9E)E_k$jx9MocP0Bd);E%<6LiNSngU9Vp7**#eh1(z@ zX?oLpj&PHr_Pbp_PoZvuIJfQwmxv~652W5PdIWf4SQ+ehdC}L=GHRcaN@AJUYV%b# zsKc5moG>&qkff;~XkrtQm@$(!)l$?MOSmPC>Kfq|OLO3C=;4ZXw3~p82~3UfZuO$1 zzc3s?U?J#9n&bO)JECE4S8wP0FC3W&^u?Bi4{zIRqZCuh13ffXptsi*85k0J=y}zU z;&3uz;~`oFI+q=oB0n7O?MIv}VlYWEnel#`{6@c&W7LP8%n}?kd*tw`bmbt*4iwhy z6bAaX4-Zd8FmL~<!XtVU+kJM&5K%Ev-m$#!#v}A4S;5OIcLWE?J%mfyvsBPn1;o~Q zq@wg`#`C;xTDVs!2VMaU&0SAe8k@3K=g=v&qS#)UupmvyT|rhckPgdDYOIc#Y<c~5 zXE{=C4U}0SN)&cl;AU&2eDGVn8F(%LbYk#O|J7N5MU-g9-Xn0h8;C=TbMxvX$-es; zbAWm3GO~1d!1hWCuqi-|3{sS36f?r^0LXcHL#sc5;*U}NP1r6@7)f`P@5c9WeXN%4 zUGYH9Z=ga0{Tg>=Aa?EM1H2vJ{3aSk3;q|@JSVaa$Evo3?mcTdui)ZFO70dm1s5}i zvGA9UFE+d?msPo!J6oLuUq6`oW!}U%bxpOkHGTLhWCbPiWRq(YuZzf2IC^S8FW{5G zOw%EJ#EMs|(>yj0!_V~Q({DSkMR>*N0jumIcGz}=EM5sUOL_ybS*sMpz-_&#H&hw@ z<bZlofts^DHa9L#_b~`}ql+aG3EWT5<CNcCa%*u>xUt-xz|@!@aT;}70Ak=HcK+c7 zd2n(f^?3xT=ZUDNhTl}0Q?x6PCJ=PlY4?3(Ag(6pN0@@Twg4yG#MNV#sMXPOk&_=b z<EBnIvN-MS))?jeM%ue-8%i-a!?axtLcm_`A5?;9?#l|JJh#%V-+p9TrOH~1-$uA2 zz>}a;rXEuzJjtgrXy!VD4F|d)(RzPRfI5v2vx)XLNuMGjojXJ!9(R(i-h3G$m&Ax` zAbzZ=#KXNWjQ=inUpCHQJ#5!Teyu4^+*YfkOUL)R(Mizp)RhW4c^SF0^xU{$+1Hlb z*!{qQ7IbBhH<}NttA15Oa^SAYgY;OkFWxb<WTMjMq7*9eZQ<rex?d3>ZMNsP^qX-1 z{{C%*iAl#5Pjs;s&iL-5TF>Aw-cjq$%Z!7g<L<<9kxdT_jN6SPu7S<Tg^*~{J;;QD zgmuFR2!(+*Q>l~*)N&t+r8lAM=>%-drgvIu5W0pd!zC%S`moo=mZ2wWII`))qFjYj zC7%(fmn}yOv<Q|extmrTqPC2@3C~P@Y_jhKCW0`mCG)h+H76h!l39jkQfxs+JWf_< z<b3WR8m%_OpM(eE*%~okMsnCPTP{K4Qv2AK!KKdq&;T4c?nV^R#Zx4bZ@|JXb1tLI zCP7Un@bzZ3_Zpn{U~L}`;haMPa)^CA(!LkdbT7fe8ZfdBU#gUuL%4G2hv}bCB?Y%c z5%o&O@rg?#58lzHMy+|d37E3Jnq4%vu^7?1x>|$pyD%dhO|lktZsHm1X-X$?(sk}^ zX`78Bb4~WExBRH;5bPzW0-6`}H#~C=G@(uO+Ao$K5J-A@{7SJbq8RG|RkZvgiqnYc zS`RjbH!J~i>@hx*?SKM<q^3ot^@>nKEJ-MOlLz_b^|miJ<(NdIiNLA>2vx>)yx$30 zHPS9gBOPR0D!oE3sIe+X<)I|ykOGHS2fgudO%d}Nj4Z?kQQu0$IA~OgmXz|4M<N^; zqn}6fWZ`=t@)}us%n6E$jf|I#hCUU>>NnzaQ%16&maHL0X+lyPw~UL0?AYr`OJHcT z5jTm3xFX-eF*u@vsOE-Tqs{VFUr`*HgDDhWWiGpnFd}8DHbSPr=0qE;Ey-O<f<64y zWrh~J+4?&@n*43$W|r-<fhnd!=7u#VoqHo457Yb*>p}ww938tAs|fO$Zi;zX89-yE z+<MDgkOPgg(nt<uqR-@NpWI>4fF)0!G@B%#F3+KIgl#V~T7B!p%3tZu#Mjw4RFIag zvb;PBN)M1#Ki1X6x*wj*c;Yzj=4Y$7lp3CdrQn^Knjk`HM7rRr7i?YohctAYPsUFg z6ezEXp>mbPO++{KTDA2H65D>E7an>tUV#DPRO)PS<hcMHQLlnu^t<zG4}?dnN`UCT z(+{XA)avF}0mJ+<e>#3It&Xz3lUcY4lR`6VyX_j$z%qD6erImIR3o2rX@QT#K}+tb z+s4V9AIx4X;GrCm?}kL5M*u!`rewut4L0Jf71mWhSpiJfhOLmj>m8CYwX3Xtvnuw) zZ*s96#U`~?w@fHw6Ln;7*iYEoC4N6gdt;rjbb+>(u*nP!cPFhTN1+535v=|t9JAae zu<z1Sy}m$0oH#JTe|=myg}H=g8vX~9g_oaF)09e-T0QKUataDl$FiBg*OUZUvsIQ5 zVvNdLUc2D;w=Ee-XyB9Y;1%5SzMHhXs|^*g?uuY+O$7?N35_x#0U=lMr|j<Ij?R>i z3TvKk<SYJ%pv$Y~+JFg)(z+xCQcIKkP)EU7LZ?dK`6EuUD>WT=F+M#JjU)>sg-#x= zO$|@l-;lcFWi{=v$1;12;v(bJS5nDiw9hu`8nEQxA__NY+KE;^v+|d_e%UQ<i#-XY z37H$D?@JB$B`RR+(6zJs41=Kq*O_4IUipJ|m-j}gd(jaNPA%ESzSK?q`Sk2QKWvS2 z#u+ED85))ZoIu*7gg<|+FEf3VNl2#~x9x4)ZMD(bv}-QY;K%vnrB+vDB{lINl-ZKC z#UfW7f7nPSwSG@Tdr(OL?e&Q2eGs`wLcunS{y<RqI&)OCbVKm8FOhgw>p~-l&{WDw zPKP@}?yNx<{XmETmpBq($lVQ*!KCiQGO8|a*eGj_`)<pDIf-wi1Z8`!YPn5cL#Cws zltLiY1^n=Fmm)Jn>56{#9P@K?ZJ^W;XSJ7?c~ktV+|$zW!AaToh=3It!x`noWTmL! z0gW^j&MNy$7D}Tikt*a%wh~QnSqZkYzRKz)63l2P40b7++G)JS13>e<ySdALk3BN6 zrKS^a(Y?w`o|c1%I<CwQlS)jiZF25Ad1Fc9%~;Y;37h+wpG_Za>7+`u6w&TIuN*Y) zLanqQfVe^*Hgyw=4go*7tY)#!Hd&__Qr#8zBu{VmNdu(3HZBgjbl?ouxgq?}?8_D_ zaW&w6E{zyCqH&1(L3$i#r?6|UJdpl2_^@~AD1;AWPIyZYN9=&FgVysl6sU4KjQJ_N zmkDda!sawLGfYnL1U^2y(B_DC+JL|mjSCvKg)Rl`%nUtOAKmya;S<y4w2np@R^zf0 zInQ|1*p!NxA}U92!<nYqcKag_pR=#KcYxcwWI*=5n8VE`rp4>Hwwf%i(IA166~?tj zc6vuesHz(DlOmQS<;q0-037BmrcUL87n%{dB4PI~53YvP%QJF|NEuUuZ$#CAM|WjF zaycRvq;(MVWvpgoOHbM;i=g#`>jwX`_r2`1x9=M=B)$##0(ihR$dilgGqe_!ZR5WH zkl6pby~h6vAhG>{@%#oLF~7Sd{sNE~-qD!90VMW6+x`NOWYh%(q($BVB>DGd|73Z> z!2T1?`W>bCv*e%QqyK~D$v+JDFTo?Wcl7Jufk#Xne|eoSvHp9nlXoA-U&f4oE~N{; zyCllf>HT4V_^18hFYCkKj1T_-qWNR-`S+V=Wc~T{{(xv0+23IphMz_$|9$&e_uos| z{&gwa&nNtIV`KS=|NQ&yuhCfE&tPWxIpse~ejfcb-p@VzdoMrB{;H$LXQqE&Bd2G1 z|Gb~^vxb@R9T#By-O=S|XMauUe+;8Av;Oo9{QEio4t4wmVBoX-vJiX+Cj{T^Isabw zXJe<6#%KF={1bn`Xa9vG{50Le=lF$aFwoQgoV<5@;cuki58UC8$$bCz%dU@sp8c1v zB|ZbguRa+Vn16S<{2hn*2h`yY*PFi{$X}=f+b>T(#`iNB-W_@VtoldLfq{*c<39!+ z<lVXB4{&wTI83(@Oin0fkP+2J!Y~@Gwi-CPk{6;`4R$k9l2Yz6u#8t~_9->2B*LS% z<@XyJ3i8Rt(gvFAOZ6rR8+t1Su&e1Z#=PcUUB`5u7WZEE9$vlH_nth~&#su(M3)Ud z8R_LzaRrJ~<4X)6esh_m0H`5GjEK+@q!;kjEv6Cx;sP4z1O%FafU6<}e9xA;^+U9V z6cZRt5+9iWy8<M+IhiK*7$5;Y41p9FR2v2oZFdV(5)A&hGZ}(9Mh%EE3Vc6|tmg|{ zn4TQ*NDVPRf-Zq1Bt!rQgm|6$^_EW!gYI3!NGL+9xlk7&gB4WrCg~`ERZKt*H->Jf zMQ#FH;5z7*^ebLrVpxmFxyu^NYc6-@BwjNNZ&%z)QPc$}B9badD?KVTf0Dvomvy;o zCpEEeN9z%R-Z=s(%Fem&M>h@rp3~qD#*+w;anK7endsW3-Q?y?klYO<(8|2;=^V1d z9;VD`>p#PQB-{^zyrF1q)9UTBg_{uZ=j-AP#tQn{5Wco8pXfLxU=8)CLWD*ErvRZ7 zA_~0wSpbO`A^-z|7<I}6NZ58LCz6wPMgefgvVZRr?CI^Va|BREhoVDGqEC4@I+R;L zdfnpV;4+v(hxRz9F0&;B;aC9RVx%~A7Bu!31<8vou<eX<4O)cAB!ZF9BdspNGT<Z$ zGE%{z4RfY4qaw4Av)xt9x_m8d-zs#QayF%GodVD7qG?M2917LU=zvEIWEC7e2#K2S zdu;d?<xR?+FwMgE0fR9f%TtT)$DStLB0NxcN<PCVmQscSU#ybHl6%@PBXAhj71?P7 z%9NzmOP~tx^8MP0XN-#V9*M#+(2Bk5s|cJ@>VieS`3}Tz<Pxr&ps7*eS4v!x-XI*g z7UNe3q^}VZ%BUq7gURrjZj<fySrx5eHF%aMZX+kVSKq?pky}PA+0w}$xzF52(=T&Z z%tX?p5(Z1K>+I9G{XW^Y7{{;OWP58J&px{h_n2e^r9yAb(Tw2QtX-40-?-Xn-Mkd4 zb~8OTFq^s`-tNwq(m3y$_KCxGb@yF7wp4DV=^T<jN-y!MWFW06s5UR42a8;q1#~-# zK=U&ha`pMO%PkbhsKN^?I6+T2HI2jzRB&1bCY7D^9**_gKhIV!fq8s>JI}CusLo=a zK4Zc-&U+cwwAGXup4*?Cf%j0_40pIzX`5M+0`R)NYw8^;mwdup+dj4QW8sU69i8Yr zYv$q4dxS;hC)`uJ8)uV+9uwnT>tkNY$!FDpim@Js8{cnfX1r4?yYqMHEo)27wODdi zKiiN@<Rh4`f3Ul3VtK}{FW&+b#`HpSz94oUKg~d9=M|UGTvm?NV$6`eY24dNLDQKp zNGOAn_@UzJ-CY<@V$^6IW2maU95~3s=UH9kYR=CwZ9i7Wz2*P?O6+jedaxaSZ<LK} zUEFo&_EmLpXN)^VF8moe_~TcSwh8ejU+v%pJY{YN2ag|;4@uyi&+asb&~BHdX(sWJ z#zN*jB4589w*}NG&-JlAWw3a{d3o-L>5VQ~xx-Or!L;JD;=Y|fhBu}@xCrtgn#oVj zD`r-VS=|gnJ28n{Do}RGG%jm?l%yebo6GWCa@urf0iT`1wVEd>vIbthek`PRnBSjG z@^GPBA;BWPCih6U3wmqYg=$hlFMAmu>aP*?o4J3k_9^CZ(;~|`VPk{mjM!tFN=2G4 znBhdZ#u<*HQyIUu8EWTV`lf$8-M>f44ohXnax@cG`PdkPh99Sc-KLE)Vz(a!lv%<s z?a80saos%q<dM+IeW{a07cORkx<o`ar4TB~$`ZfZpdA+KG(T3NcyP{1_00Z!|3bI0 zGUl_TDwT+`PQCwp_}DsY-6i4#m9E@($DWS+<nK^aLQ=_mP@s_xSD&M)>-EDUJMU}& zdKGw@GbsAR+>uREyOpPMEy_{T%2X7Z2&FFYjK0W2G1^g+&GzL{ytkTK0CZbN$J1&P z;!w$OHYdhq#9!wlI`6kn9eEXPwNGBNX=fre`k8BH4zQo)-}FmK%oc8oW~aZj*iWP9 zM17Q_{XD8iPzRN!I4{@q0*>iagQQNBlPME{8t8PWflgvgW`#Je>M{in&)SbYR_b7z zAQS+~%C&lwZLg0vBWDT5T<?CpjvY6Lrpe?|PKaQvoL)vw1se~%qw-7@U;z(nBhVK1 zyy&{ouC(YSAU?`IeXZhdiSz;b$OJ3%gQ(S7^P~zP3}%(_sGV8C%-k0|uceVo`1spm z>8NYz4#V{X(ku&zp+yh98GI+=`>Mf{2~Z~5DTzlsv<o^Pz5swYa3(>d@Nt9yWN%Pj zpdr405#_S|q$U0JANJ3X<A05E|70@#9_79Vtba$jEbo+nzk*!0pHY<j@6LWQ^786x z0zZS?_sIC4gIu;h<L6)2)(n4?{B?Q%AHIJ7Fx<Zka(}u4{<|Re-Bs{ULq7%%rhgyg z{ujyVA0pO20+)Y?SpRqw?{@;F@ovce)0F-9xbMGD!hc{Y&HOiy<vqy!E1dhs@acD2 z&ad$4H_isjPdoR289gyD{Ku3H1tl1WIY-Gs8F9zqajHp{8KydUn_JjOW@cIX8Kxid zN{+PRQq+SZ<Mv|IV)gR$b#=^&Hq=ro^vp{1^o@*+Rg5fq@=7*ibj8#|lH=rZ6E<@o z6pSi1BT_U&lF}mz=kF(rj)JDfq$lSgq-Uk4sLPiW{YZ|>LjakQD?^A^Pghq=OwH{# z`dl0xo1&Q;9iN(+(q8~?7h|HW-tNmG$X-wfK&q6et_b50?+Z2&lM3~btZ;j8N0Bl= zztHyJX$Sa39JJXVGm@WerJR|ppN;{|kefZ8ejC}I>7DOLd1((VE+HTG!Q)CnKJ0QL zA+U%adoL|DRxLG*_DC%@IWFZmIVm%)G~4`hu8FP%RLlUi({P!n6yyN4*qE%S#0Z5n zXjsv1K{gjCx`%Gieozzmy<32(z!nNMMs#wD3X;59bgAwaS=e1H!u#*CltX2*!K@QZ z^z<N<ApGc5sH2SYt=rG>BdrdgL<&p+J-N9(;<UO@K$nszrLZWBSMu^yALOaN(9X>d z57Pmf$pL^#mGi56A)=A1`wWWlL88}{kl@?WN=C7B?5HRnVX9H?tEU3OvNAI((6h0X z3&|yGsw>8)ssKq-egE<0Vw%zCQ*x?$OzMc^mAY4rqr}{`r6tvoCYp|FZ|V5MRnJlq z+akQ+adBEkiaeGDC!H)qo8jQsfT)IB9Mti4@{I%w9;I)e!wf5RWLA=dy38A#XjD-d zaylJ4)*^H-hIT7VTi@ztbzE_2VbU0iZer?YUvv9wITIYMyyPnQI+^Hp0u*L8J=f2) zwos>_Qu7OljlAqZpR|M-E{0mh>4v?R<oI5`Szfl(HhORa_k^uB&(IYv+LC#SJ>U9M zv6dfi3Y~m6i3G1~by1{^xfJ={VdCx3i?s+>;4~X0;+v%8aZ(yr(e73HMeA9<|7a~h z$NZV2>2{bCr_FuCX81zn@dftu$<WhKnwxd(p2m@X**aCUxs%7BP-@&sG;_=isoAzo z@97QgSYG1Di&|nNv(_`TY&fm7Yp2DsBPjH4?$Fgb4e`Ni@U(kn-YE<dYFVf0VCBu8 zw`d)sftF}}s(iihWMJRDobL6yd@#ivZ6%4@YQX46Ou7a#dP~OFdA`XLJdLx?qPylO z)MV(jO+(ZrBkwO^TcYO-V+My*w;7{xI{QYW+nH>7vk^3)+;AhX?#3_cIvcO*L{e_2 z8%oc#A`yH%#XMV2HWg|&WIO#0K`3;^iWfVc8lIaf(fgdJK@?}xElaawbM!+@CvVl9 z)~o-IwYPwdB+0S`#muY}Gcz+YbBZy=%*@P~VrEXUQp}uUW@cvADyzGut7mHd>HWL% z6DKU(E!@oAP4V6{d-q;0sZy+cLF|ziTFdq;L&Ml|H<2yI52%}Snt{lyg`y#~hPQVg zqx;>2=v-Z&IqzvIB*?_Av_!KDhZlzky|NOa=8kixbqO7K-uq!Kt5?swN&CF#kFWQr zm^f2c8xtLHi~2^D=AIXWnMd=Abg$^tj5!FlQD5k(VZ_HJWT+{JCuFEc_JIJnj_f1< z&Q$#~Efb%c8|n|C4g5b0$p1-w<1@<s!~Xn>gqDHjFQ)4EhyOBFzZ2a4%~Yw1$;(Kp zewr#J^}kE#W&1tn@YkPshClZFH)Hil1N$G7(Ehgu|7x!OAfaXY?Cw8UXxTqY|EtmZ zoSETZ{bZqKVECMwVPpAw7Fq)*OUrML|8BE>TZ_M55F^_^lm0#vVL#_A{*~_e$8G)d zLjU7=3I-Osf3%9v@LzKT|8B1SF30e{Mf>#so4sOVVgJvgeJ^emGh8y^Ce-}6WQi;b z11hZt*PrXEEmeIeZV{SD3+)H?%?}wTtLPWb_DRVMj1Y+5#0k7KFn4%R&EmxqL)V~M z1EFMKNj*$g-YT9P9;)9?9p2qKIyWAkcsFjmyq}F+=nOf*q5U)Im5pE&@UgmV@9KdN zf+VLGOg8DI0`*FWq(D{xhL*noIoi?F7XpPE8yZ^~%Ekf!BMWbd+lE4%>YZv4r~`50 z4Ir{YgH};1K#Y+wFH+-P_AEkBhvxxs#(;CH$wK&%Q3u*Vj^)PUL)aoTLV$F4Lr5~J zU+wtYGw40lj3GkvHW1U(5=;Bx1P*8V{ut_(*Fo9r(uxnm5?uvFmVL+i<X+$kbK_=1 z^AX7!I%LyE!`l*h%l{1Z4G<%N)gpm+4mHZ?UZ>Ki#svCa8?@08BSL;0nbO09&Bl-j z9|j8dV7mzS!2xQa$w5@l>nGODgCMSyfhGWVMD|+41(#R<T(&nMC>i3Cyp)?lJ*NzQ z4+^uiB}RHwpirh1MhLr@8Ta|6;-SDgARupmO>OEMv{ONj#DES`3&4QDFAs+exhdXL z4GG#W+=s|7j0E0{A*<mg?O>tjpL;23hpH*>7e)@G+28p_1`bZmIItKA7AXTsDBMs0 zBn550+KISifE}VRb=-_F?AfCgID{BXq|bUZOcZIAj*+J6QOoUZBOw>mL#rOLiN~~B z)xc}HPLA^^`(4f1#pkgq&U|0++xx!E4%AKyqLeO#Qn~?8ONI^({KU}72R$t$_C!q8 zhd)R9#TORRNe?ow(&?`&Y<%AcJbt(o)N#Mqnt5!Utk6ZQxv;x`s9aH~?+0fW?28Hz z{)#_JoZw1y%v<h?JS|N_*U7TXV#dx*%cS62rHO)<Q7mJ^b`M|)n?sXK95?Y|=j5Ae z9kdx;@=oJ(@BFYEBI2bBypu_*%l&DsA>l6I)jKUXr;hxBTc;5a$z4BjZiyDr*mOQR z_TD;CZ)gFvLjfuGBI}4Ih7onla=bZRrpLGVv|RvWFTq);RHNB+*zvfVZym3p(P=Zd zxD&p%cLfXYP>-v1@g6=AM?6(bCgGiqR-Hb`Yn401b3YumuGs1(UP!a~f)skqRSexZ z;y}gL$CzxgJU=?Gj&~DzNk+qiE7@M84_4}K#dZ93`R9jta&@D#-ni(U!o%sTVL~>1 zda1O(v@5x`=ELWDr%Fz#7u^MurrX&rSE*47CZ?eME^Wzq&B}U8dB<qs_}0Kee*0MV zvuvD)Cs7oWe-6!b6p6{awncU(&i8MNl+fe#11x;-N9tMk{Auo|8Rfc6<^Ev)Gyab_ zBo0}}q9$MLoj;IbpZSZ=kA>hFB@AzkU*i1oG&r;NKEUPU+1QvIq}GVYl#T92ya&2N zFN*X?0pF6jyy-K>S32cIJX9crH^^`MBBwhI4%`nPwxNOV<L&159+;00XtF$u;(xTy z%Kx}rYmDX;-irDaB1E?Uxj`yEmr#3reg^Y$zcgdb@}TR*#Wsu+g;$?6oH4H2$bFG1 zV&<|UpWUpifhk5IYwB*OchkNz_c%WsSs6YBbpUcu64^KI8!=u71zvugkLi^Fr;zsR zHUJ4@85_;jLYI1>elI}f9NtW$6TZ+KbG40;3N9bAfiM!POEo!-3@sVPVAqKr*6b{4 zy1TJyVRZ+j2o+nga2Z<kNZ5hxt>RUrR>l4<?&&}s^&vZv<#WJ-HF0A5?wy-uxuPqF z$iNn{t1kMN@za1Rv$F3yb|;tl%tDnhKR@+UnJaYtNUp!G&0qIurJiBO!)$PNy~X|} z*<o3fOHZGpK5=im&_riMyV@|8QgS4_+uk0plFs~K8{ctP8?L2!n+;t!jCgX7lb@7{ zC0!-aTSb*co7VYO2iAUK+^J=9{Pb&m%(i1YAQafBrnVwk`xK`gMN;OTq<scir{*S( zWbh)GD~Sd62rh-kfrs1PPFP*ao@0PPW~bm@J{&Ar+qd#Vsi|^8(ExjbG4>$)eYBJ@ z6Gb$=joq^5!RuE1PLK4aB!$~{1oNgdnIm(rR~hM1QwE0O>4!Ir9HTh~PQg;e4qB#L z;hNI!_&!a@jv*bolg12*`Td(=Od^TU)Volj!}G494MeHjybptBTYK|~b~jCXPNHpU zIn7Sm9@jh@?LgTHNy&vp<R}Y#gD!3<9VCo|cwjVD^~Ma-11D|!QR2N>Z+|uPdK6Bq z%WGu)8J$een8yTiql+a}H{Dyo4VzaXto43crO_{;aFx{a?^1eYg-Bm)mzI29xT~g{ z)1UEZr$0d7$v_slQ-UJsd7<Hn-f)O}ONIZ=Z~A|~kj3`<E1%BLzx*cV|24$_ha2=4 z(K2Z@A$3{7-y#10)GTB8r$_eJ5dXK2_NO!Pe-YyUTXTQ)nLZt_e{%MJ`V9Y@xAeJs z^-s?J&j9^@<?R345dR+z<G-$i@lXHnUpicWahd+-L-_wC#Q$?4><_2-&k&!1`QJs1 z7}<V%y??+o{@WS}BLg$@A8ym{XKneZboS{}TYf5@34i+(u=@tZ%M0b;_$h&A1?9SY z)}W%LwK4r3CS*(Ix^w>fk9o4WwG{*w#KpxQ+{ML3#&&@pALhVi{ejrwJ()@ECiT2y zaYLiw#Lan5qm@EDaSlUx3`g289`3#hhB}hE4S)gE2@}m20Gf!Yj+`4bD1~XV4|P|M z&Uzba7xc&F<qsfYzoHBD3qBn<SsgT4S18|<fc#{pq3ID+ej3r6YGPX7P@G9jBVz-2 zd3w7Bpyl=jdZrrC5{?u<-zuF*07Okq-{a16Tfh<^ZQt>8eg{!kG&En1p)piFsCtm4 zUZ%Ivgvj<FVBeDseFwI|4{iHTBKWp+Ao&l&1h7l%>DBJ_d1yVjdS4SoM^`oA4v#0F z-gzJNWXHM&73P{3wI?6WJD-a5ML)~-ce38@@u^>^hcNQC^x&K;A1-BRmmB*izWexW ztsgo`b}TiZsbPzn%RqoI)TfbSrytP)TEqfb{0`q@%TrOidiv%;ALX!3ZQeIz*IyoD z;7Q#m+_XthTRt$)_##F~@jcX>=)~}SpXBcO#;!v)(syC5K@J%@T~haWuHIfc)xbVT zNcC;@_26ooKz`WU0!e3N%Cv26uuXB<0eF4|!1r*-Ap<ykI!_6kTJOGlL+kP|c?Cd& z8^8QWJ9#-wrG5{4!&2Wsyu~vz0i)+gV+TI7@<Xfg$)o;2etU@gK;HL+@045Wew7Oa z@7mRae}#8wTX49uee7KYAY}qyd4Rp^M3jXCNEpI%r=xfdX$Fus@Hu?bx#GL6BEG`g zc3+5l6}o^Yc?($tkY@Bb)E0P$Z>J)E&2<6o|E!X8i?{8qCjTyU0af<<;2C@kaLVk* z<jalOXBDSkpH-^vLe}pbKWm7E4)4OZb1}UMU8EZOhz`A4|9YkK%tpJU^JFu5Lhop; zdxqXP^Ly`cQAzK-)Skbm^IT|n3Ao_O7=HgOIz2*fXzo6ucbss31YNYy`fPdVYJK#$ zU|IWYwZcAhUakcX>T*4<1t0J|`eaEeD1gi1fuYH=0sx=9=y<wxLvC*EUcGdFOZ&;u zd11BSqvLfE^5U}ubo<T=0L0^Gd|569XY83fU;1ln?;R<K33Za07UZZf7g<|B>c}&) zSkv<mdYoqFm_HAzo}Sr4p5!>$;ioyN19UXbsxjh*J|0Wa57c^nV(GM37?wq;Iwdcm z(74rHUX<3;l3tbVi)b3hWDBE*m2>UMhU-CUEzstJDfzuosp_V8R=@<VatO11BfgF< ztlh@ZVgQzyM&yC)i2`gW9MuRh+gqk{2Jh<ad#mv!OZ>u{zFkUw+9K#SPrah6`o+vZ zli_*-ow@O?IPY=`Zeap_Y$shsSzQI;ZAu!aV=<EYth(TV&2Tb~9h87y94nZW$~L!p z%oxyF>Lp(~49#D)096)gB051F8nMO=CX?<sqroBFn0@-BS%zP*V}9r<I5P*I8u3<6 zbv?Ir;huhJjpd^y=9aZI4U<BT%xt<&e>#%9fO_dL0|M58yB`IObPp$2N*7(QdoX8B zED%h4=)zXRTXkRu`jS782(M<FtA&@}#Tz|fe&!SnW03K+oM3!Ofq#i@><5D7H3v!6 z`&h9u*g^nPsl3SrZXmV#`V$M#v}|k`-|KQa=Mn5#N^Va<&&;T$aE-_)9kigSF(ha~ zVXlCyjdfG*RkjIkj;4k|uJ1bTL1U#t%x;jO5j~u_1~xeaoX1+l+z9F;ptHtY?8S0n zqC}a?G053|87xNxl%+F7vxJ>`T~gv4L9s9Pfd037AO~w0Q{Dh)h++7SX<`|+e3awC z6o?mhn6(5mKTNxPx-fE04)HCdj%XF9v|>5(T_~RZGw3g^VE5F1)PZF)BTj4Hmw@|C zPu;?o2RM<uEHaFpkSd$J`gVozXTmHrw3tZbjFVvm*2sJbGP76(hY?Z42@Ye*C{==3 zZ-K2xcwyw&01edxLW|uer%Q=^clskA-zlo24dnIg)ciLlLJ+IBYD%bNe#G}?kkCrP za?JpY&wW7P_`nLWA(i#$?W}Ka_Mxt@R|R?hgcN!8%fhAN^e$T7-Dxm$z9XQHC!dWR zbeB0c6usV0kTfgkSFzZltm1=DFB>E=V|1{jz_3MSNlkvUyV?hqGz>cYx#Nmh@+v@E zxT~fhHv3GDZrdpu4wJrhZ&rFUX~O{IZ9xn;EX~+YR_}8>lerNMb|xLo{6L2?TTC5U zas)`#s`S0GeV{xvP#xSju6Q)=YYZk>787%&$a$71(CH77`GjEw;R(;MSiNi8mu;Q2 zQzL+h`=l_{l|fsYH+*V3O_Noz=w<P-9}T&4<d}~%O1UC{el^a^jZ#C<i#i2Xmsp-G zohF%X6;cjgEp1EiR~l+JDnl!8ER@Jl2hBFq12zmifek`}%x;>#9<uwtmW>CuFd1!k z#Q4`FU(qJetYLVIS-k&3V~=9FSmSRB5bQZh&{kZt)Rk0WqNlcC{90a9QKuxYKHj=R z$w~I`tRWVq4Qe>gmrZ}0S=<3lo{-msnG05FO#RITnCwgH>(lDDO3=uaE^GQ!C;z%D z3*<~G+_nafx7k6>{SM(;l1weA0sO7**al@ENTdS<1m$;3YSz&&Ag!oK_TiCv1@<XE z#pkXX0yvz726U_@_F{WHF@7@)Gte@8S0k#Igd-TGPvld)#vOP)fnF(`W|^^V2=`Wo z<nTTaH7(1o@b9K}GYq~bMuxO1Ri0`+{GovJlVxt;#*xlTMs*(zWFbJ_<boyPlQY_+ z?($1@yvgIm^xiGQ_C<ryElI}^d7(fH%@aL@V~%I$x>#u*%(aqD@^g%rXpM68h6{!} z0voM9&>@MH07D$+&t4oBW#Kg;VqwkoqUZBpVL11m$#Xvwfcqrr3_gNC(>pDkF1vy5 zpeMnO!smRH*s@`h4)e#p-QUO%0lA^5bO4uMoXLquZ2>x<P!D)luY_~%JR%KFtBolV zUHeIartVQ0#|`!oh9t?p2a}8I#E|SF^a=*WY69ap%X2>D<Z=};mhq`0^Hn{pT~iD# zx})R`6O$=NFy5z0i`DVj3HCw7MUn`U1JRlBLl9qZqh28+RSo0G=C=?f?AAd9!KzKa z!-q(@I?>AKQAs=XUrZGPF>Gs)lC{}@b3hoDdNcHRAicM<Ujk3}{wg+}deGhNXoj3r zJ<WERDhuOt&DwwO=pHVuD2u!lPHs$sf_MtIM|vYx9D;_=m5wRm*<+#amrpA=sq~3@ z{Uv$n>H?nw51bc4I$jg?F0vH?c^7|hCbBStsnammMeGsRmASA&io9eJmsO%x2C~B3 zbsbU9rifQ&V9cf;uxu@rS5_JPa{*vEq9#<z&yOBdPJm9^MPVf;@j8D48VbX8%*8E< zrAN2XZv=>Lk`QME`w61VtU|Q2BURKU!y#FuAx%ER+to7_x79bZld`*llzH|bev0b~ zMxxj*u!>ROxx2WKKBh|7V2sK1ESNhzzcs3iHSKz*#QrMvS%O)Q21xc-A*rB-oJ`D{ z_lr8a$sk_$6uwrTiWr-4y%Ne<5dvvf+d%B}@XX+zJ>IClA!H!oODojsao?C*O*J*r zy5>k~7i51-h2p?QmLjeJ_OQWf<9@Nw)|y{aLyJv|G2p8;P5>1^$Fj!=?w4q>@GN;j zLGL7R3f_3*nk$*X{nJspqp7Dr<Zcc`dyss}X*91bFq>*}77IrDS?legn1!jwl&3qS z_G_TH*|mfXf@f01X+2r47C599C+%&>FHvY?eVxACXNjJp&P_u43UXTV<NDMJKp{V` zwSj1gf8afj@@7%OeLtVxMV{ak%&>BbruR%KuR&tB^;EYkMbFqHXbd!HK2(&dv{U9p z&hsH}<Cp73ij-7A*D2?z<%sa*EC-w|DfNMzvAS8GIV+plyk4}dp^EaXivawl=M>?D zFn1A{Z>hDmqUe~9&CkT?pEq{;!~V(xHLDK``g_4^_l2cO15+(tk7{CDq@8f!6E8{C z0}l^@Oe4=kxe`1sfQUhG>W!;l>wMjl62AI$1{Lep^(8R)8EC$pXRNrP4LO!^Rr}yI zI2iW#Q`AsnuvwNtr}aa~MUo0Ny`}i?ka|C?CPoX^OMt%1z-wpdTS}DafCXy~{b*fh zJ)(>cz^7+N6rwOI>pzP=WnqC-yOc8%n3UnJL}TZzH~#q|KJt^)l)(mcR|YeM>ldJI z@!a=h<bjiJ5i4nu@et*@ibM3(XO>*AU%*~!(m7w&La9-V2F-NnP|$UumZejen2yN? zEf0!o&8rTw?gujV$>D&qXYPcM^E_4C2iiUfwm`qZZ93v@+tm7SlzWUyxFdSLtx7^E zkP;|F8@(df(q2k>`i$;fF%#rZV#9f}b*jdq{u0B<KTvc0**II9Ls&F}CN3WsIK(%G z(T1+E18;*FNWQ2q*+d^T%YDAeCu{qwQhtFj!9#I`jn%nW7%s318&oe&a7HHV%bEKo zN%E9PuY{-Lc}u4Gjj3hu8oTZt6{ax)MjCqkWwEOURdtSZKzR94-dxiXe-k*@zIx|Q zG$!}T+vF+3s&nTeSuv84dFbU!i{-7<*7C@~JcJMs;GD$Z#asq?qDz_SP9+TUR;vCI z<`Ast0!ky!H{=)k@UUt+a13SBZ2CdD(2zOUr`UOyt+(eH$-0p0{5m^SFS|#I`L8*K zxV}kavpqw-rWTVSeMC6!kJ2QB6znaw@sU&K&Y!6Sx4i2-v`NI)*ds}|Jm2Qiv6{2V zprcX_2YLVph04Co7YEmkBX+0gV7jI@;F!!OPOIOQjrJzvR&DUE*&gpJ+@`_$%6Hh* zc|f<FdwWc7aQ~{C&3)m~N5KkKTP7IjOAC*(BfN-PkHJZNT;wz<IrvF%0^~Ryj}ao| z0Q3{ufXGG(2H`$n09AmoV80;Pe=7xnXs?v}k)S{D0FM?n>l#8K+hku`e%lgrX+Q^^ zfn1HAn@g>F`g#>#VDddc!@wio2j=c$QP85KxfLa6a5$-KOq%fdUFnh-Ux1Dy~# z$N3mG*ZSx~!3$3`g4gGU>fNh7GxWhndu^%sJ+L9+H=4E8L2W$;n|xw+N&*2XlBq?| zFFF){=UiXc2ebPj?7z)06|$tX4OG?i@}LRRK>45MF3L`Vo0+>Vq)h6$#4e|A%Q7?} zh}#q4Fe$4mH5soAztx+S0}}{QyE51Ak(`g|z`GAC`W?~rb`CRCIZkrK_S_k16z`W= zVyP*zrG?hZZ3S4#I~W$V*MfDUC~JDQu24j!9_vOucrEAHl6UrDo8)ib_<WuHj=H}c z)hTu7Cr@TA9Q7bJLOLO|?B>^p{dmv6THUUa$*1y=n|{G`C$?43^pVuYwA1vxi`VEe zs9muBLaOy=5rIhAJ~-^66v}qck%UcR(v3bBTl<o-6<fiqd2J}F+CA3DD<BA_nSjQ1 zujIzDEoB0{Ac%ICWx(U4#8(4|qf=n;U_HFO65E4jw~U8<C5$sM1Cryo3k!nY!9Z{7 zd)-%6_J}eh@tnP048~eYs6vc7l`a&BFACz=a{1cYeMwtt&%VrTLEU^4&H?Q|$HSWQ z-AUSn%rMhW1K1P$5AlO(e;_;8)*pBz&C1XE^T#s@oZs8I!tglkiR37g&O8P!p0<cI zRnum|$;x1V6*HU~FTRkc4#Yi^7NRCe5xwzEKS8kY??Vh68OUEG86oszUGB6XY@-qC ziyrnSgUIe*0kbZ_eyUj<A%3ct^~7g^A|PZ~y<K<6ZV9h~zaYS+;lFE;EotU#?Wkdr zfvTUZDR_`dwjQ5KE$j!C3*{m>%rlLC77s{>YG5Fz$Cw}^cHR?9T1&p>SzhpaXKLH( zQDSg*OdT&I8UhE5bEk1J;qV_iDJszH#(w;1q+d|@GH81`5&ec_<BB3A07##ybvZ@l zIVjqlR=yv?4$PH>*<S+%u;O^c4H!XF#FMeOtsy9D;Gpem#>KQZ9iQQRN_0*rF>y82 zua-}*Ly|McxKN#3*te=pI0`e~(}V=8bQZ&T=myZdD6y8C2YI`KVCyP^{49JU``&`f z#dZj1Z#aa+e`Fy%>^YO3@`JLo=sOu8?wp|g=voC#XzjH{!;!p#Lti8jhI))A)IqZR z&73%NOmbYq!ndY6gWia+GXbIc^v#qaMrPV|Bt6;$AJLNRxLW8D#P3mZqs|-frC!yC zvDuV?6q4{HXH!ur>kjpP46o?ucBN02ca$h((0s5z4|m<M@E=%ykb4lWnV@4Dcqk2i z9r`)0s8C9T4=EHCv!7jvZU4k*|C7EmB;p9(Qp(@3q{a2z|8PxnFbsNJit^h3e%;u7 zTOvwUi|7{2c>nr~MH6p7E|+vaeV*)tEjw95o&(0sUC1`lC;c+2!_}c}k289e+UkNd z3guHdb)31XxiNyE(U8KLM<P22S{o;Li`N+<+3rAOKnVa2G)6qdAl1V0ukyzvhi<Q1 z>2mMDm2{9R0kzunL{Mf*?|6mbF2Av{Il)VuelKA%z6^@t*I&{?^zlwq&1($Dcv3ml zNxeIwT2-J=5u`11<*h!jScVE|-`F66UoD;)JDD#R8>-HafUHgR?oO@zWpq>~o>Rv` zQPAC3F22U1HLz4AqXJn?D=n39I`OM>eWhPrEY9?0+oM`kzcLiV?{qt6(T@*OzWGjM zv=)Pkm5F1>IczK)?D3R~aQAcj)rwJelx2E$W1Vk%mDJ{e-eS^O6NB4Or(koZ+-p-F zDxINo#d<!L^R@jcsGr$1fOcgyyd1m+V3%=9F_v1*UFr)GPglox1LA|5<?`Nu@#>~v z%H)!2C&+q>-uNp>kjXN;B`mBF6*WxQ{*}88xS5}lUonHI9JreGh~C7JN2DEgKf)Cw zvQHOx_;HhWQ44&=qV~B7Sgb{6j_q=6h?Pa{MaO(E1XidzXU+ONq_{I1tn=%o)=V}s zpW71E$V#A$;{~5lz8Dz#zflfp*O*SPAw3H<=N-A~nzq|V<1_DEpXad9EYx70hAOiL zUgfdzj;IwJf@@6-Kg&w4Kd1WUxsxmGX+0yj#l|BXZ!;$Oq;ScI#1)?8JXYTNfwaQQ zMLXWQBAAqN>=7q@S2p0ULqn%QFW>Z^B&wXalQ6a1o(SpN>aoG=e^f=9b2!@Et{sKQ z;c(uvEb4jESzeCsUdIMWsM9-(v3HH>308K3c$*Zsn)~9i6Gu_lK3t;L{f(EE(q3J6 zk}F!-*_0zP<i|}@xD%NR9B?)RFrq|OM8d<OjTB>Z#Ot|YNO^K$+&x5V`j*ap3QUIo z4X~FbUyT4pu*StPApH-QO3B?Gk@LxNcV@=DvE&;6G6$&r4iK=|^GukOObZ+u{7Kzg zoF*NrF!Jt8e;;DHQUtOex3`?o0oTZCzLE#<R1+?Q)VYo!uUR9_`AjaXLmkmX;4#=_ zmNU{0!pPrn&>)ib!wEa=D8?h+BPZ*d5O~txES{y1hHnX-MX>s%{NuI9J3PPEFPWvc z;g$_sCjwSZAdBD6WN1t9<rrx|U#9k1;3}Q(nsfmbGnm$z^SXEbguS%S2;VRzDgx>Y zR2GTXbc&mzW|b@u-5E6>{2^BI1?_&Dca)7_KJ|!0IIG`=iUB=+x7)4?oSg<7_jYgm zPL6`r?`U)fxNAX`PMJm`s3NO=6c6W&famLlh|i7mL4D)TvoPvXpNoM#!-SBc#~);^ zEM%sx^Dn9flC1?hlLJhn5(4Q#v=hD<hhN}%8<P{#76%PVD|}FCQ*BmIf%aa>5h}fN zO%XUY<0d2D$|5E5;2Q)+W>$%;WP#<Z3Tp%V*S)5|!-9${hS;~d`flcPS}iY~6aq9) zp<SynN?7J*_5e3#KD;&PLc{`Fq{RUH2X)`?n|#u|yjrsfDU8Eqyj<XDfs=@zO%+fv za=FU6TT@VDL~r3yn-S3=??(sy$>{90?p7Cr56Wh~e+|b@rnVfejW=4^P12Y1Y_a=U zgY$jnK(DPb!*H>>G{E)D(YyzBnaZsuPK{j1dCKy&lVzo{orLFXlwjxwnKobgT8~pQ zapojEt_<a!mGA+vu@1|8o2>OYXah&4m9drGRM$v48-)A!&CoRRx#zCrZ`0Mer^K(! z;L~;YM)M3lvNddcxJ__}u`f#<=14%>kf<rw6FlEniw>#R(ccBsEFV-(sm4uswXA68 zlpn!O^G>sm2<cFkN}Oz_I~rS7sL{>KZ&bH4V!lB0#W}DxRl0|}itu?AL*rjUrU~u) zwD+ex4~!iwI*I@qB|I2USv&~gMXsF2ECpr1kBeceSz;&Ziu>`{!N*R$;OCiK)%YW? zO$qLm7m2X8k79cSDfmG&foz(Tig{a=$5`eI(?w@MEF``}-GWmsklqFII`^-+37L|C zPL`^ks8KzJigrubMJTkb-e-TJ$n@E2JvnYJbp`Vl{5~;#tmwI6?VSZVOh1wZ139ia zq4FN<oWoEY81nGvN_l`VSG*c8NXICu_}ocxj;irRFtY`T9j!4_XO2*4gTqEPe<bwV z%uov45?BWtFxYI7+IGtbmHI;43Zd{r6E2W_zqlu^!7Ax@D*&_zO&(^H<!+w6fD-0G zp>QVvm*<*JIvZ?@<3)7v&RGZ`q_v24@&{1YMlv2B0Ajy^pCh4y0XL*zTCkU5>E}eR zNqdVmq?2gk+XLwdXS%4Dy!%Xb2rzjsIDt!Of7KI7{&*s5tVUOxFe&iGA>ThV!e25o zkk6MkMtW^5MCA4Ir-mcDFor6<9rx7+t*$tT@qqSu`ql+B9nZrVq<j(Z%j-2%2ze5C zB~q^B6%&w+OEvUo7H`}7&Vf!NHHU`Ey)hGT!Icq!+Ks-)z=>0<r&4JbH`MI1_E(r% zqCgmZD&vYLBm-}j3NNp?Y=yIy>cGi3B4I?aU|P&rn>YkcO_^MbIUY@X_yI<k)C(yb zEu*K9Y{X}TVyAwl%*?LQ=SoBjj5T$A<U^yA`YqYFH?@~31qWM_Hs1vd7C<V8c6j%d zKC++#G*IV&4t0kh7GmMq#UY)H!U(B%plCJ<YI2o~+<XD>Cu81CzWIJn{b|0-U}Wxc z*bH7<DbJ)@aGyk^$9f<zJpQ>R1!}ymIdK;BANYm6bih<C#Q7w9vYL6OFm^$$N;kQw zB-_1*1^r@fP&%A*Z1*zJ=-7US&supyWJ?)FV|RGP%eqdhPVCh7D?QS4muZwZ0i26a zP4=>J@F_)k>$3n{hRMLC88r{XIL2XgDX1E!8T2nlQI~yhV@dIk9g`3m5>w>A;KQ3x z$xl~6UDOIUdmZR`g-Ts}o|E~$HoXOm8f2gBsZGfZGFe;3w~c{UB>@Dqb)1ByPY{p{ zSJ`_le8(?_Bchtwkt2j~t9P+0H+}V5I-gW?B+WiB3Jt-wFadcvaE%ByK}d3ui_4ZP z12$&JGWUArT0-*h!c+Dw<rcAA8yK`nUn)@-wTT@f&VYdy$L;1eugv(axL-W2QeSvK zxSFIKe90;|s1Y%J%v&|j9qWX88qa588?tynC_#%!tuE$Mqx;1Y>^V%4uRc3$LoU3L z26x%g)+>glgS(c?rMGNP?z}R$h=xDMK^wwkW}2hAo2^hecq*I7{+A4{-nkCJ%%$nM zgKH{8<WYgPo~fO{8Lzq3R&(yNS;xNHk=3%nHUw@zs*sPZ2`I0@==@G+o2@l~@mTRO zi#(k|LY|aN`vL{3?+^sXuC(c|_9cV^45|tmTC8G;ii{O1YSFH>iM1THURw7oL-&fa zA0zgj^<T1^da4N+F+F*^FwWW!v@JVJ?(_Ecm%iDO40IkOSuB-pG!y3ZYGV}A%<jqi z<IX72XW{Mpp6YU&5BID9(e>Qae_5~xK<*k3U|p{jKD(mt%%M1kD<M<aQo$PPG2!t} zQTdwSwZEFSzSFf>(^op5yCUA%eDZ}*r4((iROH<1mQ}_B=!SdBw3B9?+uq{)V~d@w z|7;eOF{u`j9L5n=Noooj^wzD#_7Nqv99a}pi(-KJ(+t6>#wpK1m6Ph!pu(EUsbXYd zW6Np6l#yl)M$%P60gsK+wOe3}E*)VJP0B?GF4#cLGaCjo_=Yqk69!^f1MMq%OA9Z$ zgExFXG{+U!u`R<16g^5A{}bH)s-%8PlwIDMXi@Pr#QjvJ4-#*NkjN?U?ZbD~vLxA> z<62?D>L)r}6Z|kcGr#Wgfs|UbEHO04xM%lf)kr-cMiYHPjj$<B>hU&`U|lZ>EojnP z4y3+*U3NN3kl=~dr9H4VcggZq!U{u(OE?=VXG*qB1x_|o`g>!xvym?w#)rBPp-HXD z+M!a^Ou1|n(qfvVkrTSOSdtBAy?qL)TSV7MbtCsLF7WMLjGNb>r_;P_Fi%7%tE0?Z z=t~ML*U@Ws(J&9&qdu;27nh0aItGMV-{N^9XY9<h(xDAnth7qCR01W%B$&@ncQy|2 zmt~3&z|5hYoDW9~*`SP+b!-ZrY&Rch4`PSc0W)cfr|(Yftlh=z2=_^mh&U;ZIPeh_ zOQSC{h0~q{OFY&X$p>4!g@8&xc`=ak29T+_4A<<8=lh7K4KG-75%{?DIBJAwj=Hv( z;B^Y`8e4-{N4$t&$@_w19A9!!rS-=Th1n8<tpF;k{o6rDRwTh%7}q9jIjF(B%N0n! zL-+Wz#}XfgP>4XS1kSYQcF~MlePuo264$sEs_^HE>P)@)b@}%F>E~tZ_X%PDm=;aH zf|ZlIZ`XTJ<tlpSOA$06M)eiuSoexeD5FjEKsK^#cH7&H>IYdYM%PYH@&{#9cESL0 z+NH#b2mO8>m5#82xYaJl@m&P&;bWUr8IHo9$Z!euVSJK~G%EBv$ttErW%8;#cnj$V z#7U9fvN{TywVq5eb69>{*_E`R8*tzx(HS(O)+)!>3Yna$k;tI=8AB9%aAWlgY=c|Z z5xQ>$(Zyj<A;~Nc=s4j-T$qsq+-?UyV5uj5SSo7_+t>CF;m+hAFHYVhwMaFO4e&S` z>S%MMM|QQ3yr%QyMG!i6!|l(nS+p}1C5v853DLq~?q!V@8!B;l=@CP;PauOL`=@Me z-miX7yKzfyw;~;1k2RkUAoztAB-vmtR%FWc_M)k+;K9~u&7U0%V;dhK3bT9Csa01j zOkg#sJlFMLd1XJ1TSM((Oc-Z-pbvE)WbQ*mYp79=FS4o8UFSFA-ka_Z0q(?IE(sOp zD6OpJPBdbw@x@y>RCdQ=<h~W9MX6m4ej;gqi_B>~rxq~3r|wFgPEIrqN284VK>by4 zKk*@g?z{jZBI0NvBjd}K<qT8>OruLWc540vZVO2KYP?2uyLxIDDz7wn_GZ`-vgr`7 zT)OM%HW)`J$Ndx08TpM%<%IF|s4|JuJ`!D}EGg%6L$ZbyAYqg4BoZxg1A;V@9;=;k zKzql^Zgf-QFv~@gx~?-$2~lIjtUDUUjh&`mZTX1$qr@+irpqJ``*H<dh$ge~EcIn} zt{{PUY37V8w2g`(q@WEMYvyj8<6%4x-OBUHS?FfzH>isID8i7@`KIz0(%QJM1=<o^ zKRdsUEWVwFPB^13d%%o}%oQeX$}2@ZQ)!&c#eD#cx<cum6@^*T``r>NwGXa;=jREQ z0-U74aPgPKa5!>{@DmrevfMQ6w3*+Rj}EdHa3LmR=h%+_{4Y8tJ_w9v=w2hk$qi^V z%sUW*v{IjHkT2|klzwKWDX-y|1DzWJmYc*3jH&s)aa;pccWK*IQFkmi1rDQ^z!cN# zVvKB>1`|bRWO@zVU$wJ)VtZt;aPA0w!ql=09D#;4Q#LWIUWR%IG#YDSh^7dpE7crQ zE1x^UJ|k4jCk6$-g=$N7Io(+7_0c3V`>R}nPea9-L}!NrkPhA8fGG=e^1v5FyQmgD zgb?s;I#FSvK~$9vCDhyv5;dl;A{!rP<V;Y95?zLpW6Tm!y6CvvL%NmBl(GUB4Tf;j zFq>)fT*_HdDV$&z&d`&0Br3QLyVZBp+24647Nm2tdtSf3K_f;LO8;B;s{42CIq_%a zO~_!#I??GO#j@qzH*4!cFr^-hLQq#70Wq6B|B34{(Kn<9a<e9!X)k@qJ!Q#aP;k`H zD4y%i>pI}};`7C$w<YE^R0_N%_O%D%i8Q{{uzO)lxpJ+!!tAqF(?c7#h1j?tr}tUx ztK)+JXya5xh2S|^lSbNWe}?#zj^m_G_($*5bTCu#iJDdWEo%0R$F!t9QAjyv60wsw zY-9q7O--UJST}W}Jp!rY=nB8;H2EX?vUxa59%%F|ODV^nb=bjL;&cY^suWa}0cifH zbdr3IF2QY!K$kOnz0rwv9F{9AmY(wVIfYjHu`qB0GYnqDbeAwP9RPbCR~6M^6Q4MR z$N8aAbX<v!)^YR-|MQ6oKi-w)=TL(Z1PsA*HH(q7XTE@#Kt$rn?nIJ-a=(+t6LvZ{ zrV3BNFYlW&4_1ZhDJ9kkHmg|vD$jUY=wZ=SUp4Q&{AF4|l5EmDe7L@DC?%=+>w}P` zy`HNx9Iw%jG(rWc-_N+URb7}*b8k#vESzt{Mzfr~4CwZPF;U||T2UEAJ(XrfhfmLp z5ox}a3+S*6pBnjeB}b#^1&h^<J<(-QFC^c8pOAtkt4P&9#6~iO`qfw!;z#Ou>5p8( z;3t}H8e@?f+C*<%tR<L_bGdjr)j8dwXuia4!dv%1Ia<KT+Y`Pd3`zzTuW}s7k+#>t zU$=`o)&~1Ry!IL$)}WzUw9W@U;UR=dDZ58C-15?g<Gn{Gv^X}0N9W!H*_q=^Yd=I9 z3Q-M>IMi$;wbrp}>%t9zxyxt3R6$J3<&whRe~J8(djYumq$Q?YL*Bi|>vs6nQopT& zIDVCR+N*sb4|Y4igKi>lao|_LYtfQdAt9MKNabiXQr_!#T+|3GmfVg^Bo|Z0gfLqS zvQ^_%-v#+L8I5@kC)^5{FS@3o4?&nRP_VTSm4b<U((T*UBGoZeBH@7*e2fV;W#bhz zOHX~PZc9d|p7~B3M$evOgoPz9<X|92{o`pR9mZs+qVxuD7}|S@oZXhqv58WF={k>w zytZ+NE#J7D$-bWLNKmY>&s-ArEw$4;>X1@3*(=BZb9;PYmIB#1;9qEu_LD4|+D{%o z*+d=$qXj@t{Fy8-motK)xT4N|5)-eh!1k36w%AUX2rd9JdyyV68@L?8r>DA^R84Hp zED+YG_(4{}XHEdKrcC%c5JN;()|m|vjpKtRqdlA{-U@{XUBJb)UQo+<>FG^XgK=&s zX27p%YI=M@m$}Py5lY-#Se9PEWwDutH&LJurA2Vl20xa+ce0I<Tb%$<K(SRE7GXur zu1DD`50MgcgW`e3k)H5J5}Cjv%mx`Zj&OV4XtYMJ!a29ZbG;66y%I}(9cOl3D@6L< z(YYmyDZOOn3Q>$+0T+m&l)%i;FEgGw(>LrCTgYm;aUoEWRL7gpTf`gWl?6--@Zi88 z_~Zr{Q?HjyRzH(NXyk9a%<ax`{O7tol8_uQI@4ta<Hv#TR;|Q<p}Su(vEA-C?Tb%! z#i|Ls%0z!<hPe9U^^h`x9cL+1kKW-Ba3I=<NoJM^Umy!gX+8Oxf1{2UQNPmRElu%X zeROei`dO=3N9SL9^?FQoTQDwqh0Fb&J6$6FDN7d;>)ZBEymCn#gqE6$PI<)&QSzZg zNqpE!RJ1JQB}xqKN8`C>n@X9JAAR$vsxJ=dW=SSZ(n~1_aWb@})8KN|O=qvQ@jc9( zaEXHbiIx#>j8a^EuZ4#$M3yFr3rYmxH4=D(&yM;?g&SpnyD*PZXDyxP<^q?Z0ezs0 z0YGjW0jT=+g|}!r-yVp<$YYc{w-_DZhbITea5+m6ZK8C4Vt!NPb$%fPf|tcu&ZpI! zgUR!2jjqrBN)MYUU({H02_{l!FIGw5CUa;G+^Or_S}#nR(j#NK`g&bms7Z=es>SQI zXg_bi9$XUXgctBk0cVa3vuf5L&_r#`<aW-PargME{?_U(l<!FigUG0X${3&5RzRoJ zd&am@#VnzuoEsEq70FO4nG~Q|^7sesu~pp~9GM}^D0rqq_vEbq3;|Rv;`9haC@K+_ zNCAweHoR<K#1@)VQhgV~8i?fB2WxbN(lt<mgGj5r2?feV^$5B=WV>lL-z_4N<Ff+i zv4z;F^N^eX@@j8<md6T@@Y0%RAyT!UQ>pdsNs9>=F9g#14rIkf=)Flz1FXbN6kq&% zLaWW!RXLQ@rBw!w`2$1BfS*lx8Xk#q7<&Tn-8y2(PPjJ-51bZJ7~#$X2kbgYmtTtK zcEO({=UJ~{zLlR^jrEe7mb&F^goSxT5dXr{os)%?t#I!$0Nx+4%@yP23D#(xUctpD zTVes(#D86UuTj`)nE&yW<p2#mIxh<nS5o6zz}G!}3+QAv<AFv<y}0|4ji90YS9A=k z(G{sdj-W$aeRXO`cH8E}CSE?X=-~=5PTFHnXWy<=33nOc=aQQ^uo$99d>}7@E~Z@M z!SS~e&wD1~AxdSrc6(x0NNEee8SG&Z#LO1fU%4Re5P|TBL?$T)W2}Re^F*RzQHIY3 z=-W$VJ~pCwPUaU6Iu67yS6?_UIeE(Z(LtE@bs%{NGRG1JDj24WsE!u|WG3p5er4Fw zyCmm*&ezJsD18Uc>u}w^X4XpX`OcWEVMuRNEd)R(X+nKJRX(`wDSQpeAclT(wE;rh z&WVEfvS=^DlOJFeTGvotVwUQNZoGZ5zRuicJle@X>=lI6DJ%=EqkSi{nya@*GX%eZ z#<AF%Ii>bJld>&MQr&c(RiSrkTfe~=YICHedPYKD7p>lk_Yl#oPL-t|jr%3;qBAzW zFC`=n%I%^uClWuba$VEBS>5xPNmUU*;te?1PPpCDWS<~Uo~$W5(lL%h%{Sfejs4w0 zqu{np8E?@(#<_jLz(<Z^FH0d{Ud~_cT<7|gV}_t4zco9!O^SOZ4ax?_0da}&9FkR( zhT7v$6{ABTSaBSJu4cK-U&q~W2bX4?T-j}61SimGK7e>)1j{?%vUN7S%9I*Qaq8!& zQD9i$rnNuH-ARtTj=S2x6$zY5N|7vrwA-Y+_AVX9KvngA%(iVdPK$4{7GElmB=Hkw zjsW>wO$f}I39ldCEoSB<S{B)^%+DhX38xA}Uf5Y?!l{YNSi0rG3!eIjL(q?oI>O7h zypRAyKP#;DfIfCNw#hLcjc7uhkFe7U&yzf#IU3G;OCDUYO|{BRb0jJ2=2F~{V|(}2 zo$v5lR(M<Gs1CgOdEti!Nr`J~pfyuej>Q3wjJGCd1mxfSem1(cvxn3l5U=5Rv~H{v z(}(5ye8*Ti!3<Crc5{P{5#0A^I$fhTO@9xj+9q08^&l!kHoug1|CyJHaDdAxv753d z)yTNTNp)67bZd$l>jQ|z_{Kj*zHT3|j&OY^cE;&-=pPIuW(gaWJSg$9IeG>YrhE%} z{wCZ*cGIG#x?5L)9bvH||DL`&_~j5H4FD8^M@jzrhdoMeVK)$3e8lV${y|DMtJmu$ zQiT-Po-%||ztSV<ws?P)Pnd|P3a{&kS?Y1#rV|q`)r{9#ywG>3e5VfGK4uM05pk)W z-0&-7u0mskIayW2^BM~4X-{4i|1US7pt`M`HeUjm!=1^ymXw=?iL6Rpxgkup{gH+e z{jXl0Jjs>?<s9zqijiA}zk(CJ><v@<d@*0$%ZdsiV~ZAh2ymV5#$Ad_(jS=wo|f(t zV33}dcyhfP#7o~oV+r&K6NTObyOM2N2Jpp-E!RIub7p=UdU~P?Pmx)6B_9nO+F{|e zxBGdy%(3g;3)fCVnnl}dd}k+?3NaiJ(9bRTOVxjjVZJX!C#KQlHS_2OG-`g@be7RX zTPcB~1UK~Au}H;QZbLR2j>DTt{h1B+yelJOXbOt*C%aBP9(JO<nfcC7lh#elj)(#_ zy)~}Fqn1WD#M80KfK%<WWRF#%*q6mQL&7vy);bkr{q9MoH)}m1JBs~Il3(Go?utk; zh-#Z;1FVmGJPan^I1cLwb-+?T@VqxaK7c;5$@Pq(neCjNelXcJ`h9c)R4#vc{~H{~ zC!Nv1fD->1RRh~UAf11~as1Yo`7f%5Px*(x0APQ^YyS-ZD=j9iA*b*O<WQFQI{+-} z|6ptQW6%E=D967y_*XE;9{|`-KC*uxI#@rECI1_ugMpRlPu2!zR(uXtj=u-M8XMCY zoBh3>%|F?+{uHnI2XC1GogkeMoiLpUo#<~xk53gEnNKD&x&P9lQK3_%Q=?P=WHvLP zGyDs?nZ>^-u>MMUMd$i&*xNr~9RH5J{U_S_H($gjXoK}P+T{OcW2Wc$WE}fFbpEk1 z(f@vIzd6f(bCdnX-u!j@^XQ-Z*qA?wFX)-^*?wb*Sy=E{KZz|^S$<<#ejj0C|J_M? zd{#y_e0C1DKlZVG4uapcK5H;?{L$|}zWe(;pDzxM-#z(V`m=?9y#MYA^CxKe_v_E{ zzdrq=SHF)jezK~uGqC@0-hW*IGvjY&H4c0xCPsV~CbmD$!ph40`Of@T)bd~1F#dDY zG6UToLk0gY^kx5v7|oxgZ1~Lol6v`D#t!_yC23=!`^$j)y#0Ujdwky2zY~=Cb1?p$ zkPO`)Lld9<UleZa9CYgV9RHGj`AzZm=dk^cc-`3O{xYopPt0y~uD==D{_Om}p}m=Y zKlwj@EdGUDV)!k&^-o0^c6!GD1-Qh{{y7-_Q{YnKH?2hNhZ2&{NC{B?Fc=d<vPFvj z3x%J)sd2Ersab67Ig&t2D@hUp0tg@pOiQc4<=9Qz$HUZ32j0Y!qqoWasFp>w`pL4z z#f!0tcf|yq4Rn)VS(iS!cPzjm0l$J&HwZBZ03-n9;u30{yhS1rc9Bt(KQD+cF)=@Y z8@z`v0s;V%7debKIS{EHIC&2uueg{8IEt@S+)FhvgKrxZ$`M3OFkpR!0-U^>BW!2` zG(R4kU0|Lk2*5QhEkJwc`xe|}K#NdZmb@k)5CVkW34{QkWzKyxJy3UN<gC84t?y!I zPa|%q51pG}+_@<Q0J=szmal4kP_LFJK%+btkbo6?3p$F`wU5v-UqrcUbF-;t>$}SP z1;yJ!OG9~n#KebDmo_3UIXO}eXj2fO{zs}g%v*8>(CS|2a!G!LHa5XEy$3ouz+-i6 zertF>+w6S}5!5!ok2+_&kawJr9?K6UK%T}<P!L$@`uc40oA(K~_x8udWyD~{OMzFV z`|8t9%-i&-839gr;4xnyetd|`(D(P3<bEG!rC@>0#%TK6AOu9vuS9Y4yda0^ex!)L zco3TqbwTdHIqRl|0)QCULGRE2JV-viIM@=G3wC)8AZOSg;croT3cmP2Uc$C38w8NP z_}E}?AtJs20*UCaYyp#}zJc#?S86iN;MXqvkJY4EK1RNP{^y6V@4bYk!R~_kAHu>@ zh))}V^NNo$1^@#68^mx3%FiKvldNT(kZWJx*mBFcpJfgyH98^Nr80fQvD*g+KZ|(n z8-Z1&AL)~8GVcVpu;}&gGKVbb8-eElPa*vLj?gQ72xqWwz#m_>@IuecKEU$^4=%y; zO!gkZ^GGs2`0Im4@j~Zq-=gsA!A{|YExJB;fo*>ln&13PVR!K!7YN?{4$bo4`RkJg z@j@G~UxBAobvhB>?2&KZKa0FRJ3f4-P*AoueBQUPJLrNN!u5F|{L&zYADtwE+_B>1 zFn14JFmKK8>1Wte@N6i@ut5l8<6Q*t`m#sACPsl0p?SY=>~+iku#uRwK75*$z<4G> z>@9TtIumuE**>fyf<`jDyv9OWoqc;gWs`N}Ex!csEH#wUp?y=YF?wy4&&Dw_eXTC? zBO}B*!I@bu^E6cNP}&=dLds2X@#9)gkL!aWIli0o9Ox!fhiPJ9{ghsT0Xc~py*KpI z9ZuhvrxvEER@}BvjjlG4__TT_7f=?_wX*Fd<dO{+MGe%|ZMaFU#*z<1{Zo3k@Ckt~ zU56wxOKBEVJyDd-W7q5(Z&>-WnPFpBA~2%^NBD5oHut_zs)?!#!G2k>J+us+)8%=< zs7gL_Unoxg3Kw)L?8Pj}tSv}%lc(3)K=+99OQc=BUU0X7(w&-8LG|u=%zzxR-PxKi z452Cl_!+ANtQsrZ3LUKeugj&!RNKAuvVksX(T70Jcv!NeyfpDvT*mK%mNVrOPjj6t zUQ3t~nJN%xWC%&l<kGfEjD%dV8jU?_q%qFtX5?zJq%)$ORbU3p%5;}};M|<o$gsQ? zyj99EN@#_huieUqLvAhH$3ieLbqk4Go57=ckW=Yc8b4Ao#KbCZ0#2cx`9@ikXYHb? z5d5_0qKFD^aB;@!l0$Q#Iw21)HBAQ*DYr2q!Tpa855BRtxhruuluJMN%GtwTq1Z4; z=z3+hBU^~INv6C#IZ-g)z>+VVJJ4f#rB5+N8+bck%WD9vg|ATIZ&ik^b&q9y>m-52 zSt&+aeFM5L<yT=?`E{DhS-YrrlRr{Mg^oG|M!(vlW6sn<@@_U%-nD>@Isop?_`W>x zU4pm45*b+Jxzs?)q`J#ouPl9fFGvf0PAj#Y`kFhS>%mnHn!pj6BR!8VtIuy5(2oR% zzW3_L%gBk&M>P!`E1(){NZpsxnPMYTEir+*N&cH~Xn~;_5AkEK07@7@?NXE?F?Vd7 z%46yvC!0TmTT3~(U_C-fW;n`vcV~e*j;J^&afpIRY;(vk+}F-m0j7fI$)qfoq;Q`X zCs$3+_maXhBNffhh507UuPNsid(|d;@dT&oNp_T7%esP0yj&ScDqFxv%l!vN6~9zH z;-=|Nar#)Bpw(QZVsgXbk;U=aXt)+b_Yv$JJ*kru&~1pq($63JEy(Cq@0VZO-+Xr{ z+AXIOlZx-3C6XL4^EU5}_1-60OS4|M+-5^4tE0zEBKZV)ntB|L`g!>ys$hVQZ><D2 zjDB4|60m_+O!U8|oUw0s?&|ZY;z}Lg#@^*r7<8Ca;XQrp?$DFkSL~kzt)R^;Y5$@} zQAI@^WzNt=LVpJzY_??goUH&OM#Rdx3)QfdJMRYl0~3EQChM_KakVV6>l}C@Fea0` z_0=h7FGblTVCqxvfUJfY30+N4T0bh(atu!cOKx~S4T{><({uw2(J`UCX6ks|y_!UE zN7eiS&Jp|g=F13QI=936htV0x0%ci@iFUfY2hgj4XKW?vWldhW8{E;la8YrL6RB>w zU>N;)5ti(?$tipJ7|a|PeYh@`pBE)Yo=_b9a5rvw^=v5<@hMcirh-3NaCfaruxc!G zmM|HTY5)gln@Y9n-Cbs`P0Ph|t^{C^7(2a=TTb1Jt~(Sf)M7eL{vXorF*?$4K^Jz% z?%1|Fwr$(CZQHh!j%`~V+qP|=^vvu%vuDnH>#X&qR;|>_daB;1ek8ea-~Rr%A+GQt zM{cz~sMd7WO|MxEVNP>uF7>BS@3;E9?<C?K`9+fqY2~mPzi3uVAmo&OL!av^!H6BP z0}MF>UToyBv|iF=SO|EhfBy@f>=+U}XuFDlse`Spse?oV2@q4?mKJyQk1|%WC~BIw z09PB&EpbwqgwtdAr5?O6MjA_BRw$X)vU=FXM2GD2*i^)b-&8U76YP4RxP!cO=*Et# zyclE<TA;Y+xNkp$ys-;P>Qv#Hyc;2ga?fPLRt4>wG5o5OcbVa1b__h_BKi1+44)+T z*#If!#3ZBWAGyau+&NFy99H12P0%mVIN49pK65s4kPT^;;6NrdSH$2|&X>L`W}$(# z+Yp~wey&$6;xC=6WaYZm=bf$(Sdtl7K`?%<$8Apiq3|xhJga_47NIFDv~n}$!k3@a z@ibNLR$m<7@LPxD>3^`Of~*OLYDWrlj8TZHnS2PRAVMcb>|BbZ0`*r~c4tbu4paS^ zCWvmv<o*==aq1Qt+h^1<OxlTll~P7?$LMI%gB*JiSXxi9LGH}wYABDB0Jj`R{G`F$ z**i5;555Czl8*9ci3;Y=2X8d(1TH88qa<?W>TXwrUnn>;@s_P*N7Mu#2T{Y~nmsK) zKJ{I@$qXbO<g(_hxt@fp{?gGklUolqVK~WA+|st*Yeq(v%sn+NPu<=5p;SOyAlF!V zs+>z*uAnzEHmKV&MtzCdi23I}&VxzapDF$Au2&XEj>&`#7@BJ)ed9AW$xK8In6*X@ zYEq>u6d|d^J0g_QKsKZ*Qr`Z@kd{lG+n06`R*;*p&TuV5B-OQDYbBv;qY}6?U8&N8 zjyIC!3zvptrVqhUt`hzWU1e_>#R0KhrubkWkuWn2MZO3!fttG`w7R`Jg{7|72?Q%Q zS(IARi$lGvB@IxMG#V^U&K>=gRDdfa4ZHd#?bW>jcT*LL(vzDXI(4FMNG4{JI%-bh zvse(7-IU4H$s6RKj8@emalLC+Jcw!bgz|MPL|OQ0`UCi~5eNvLI^Hh#b<*^iqgUv9 zFVYA)H-k5?T`2XH$D4e`_;v61mFdjgf>M!^)&L89fkMFsuWW0r`Gp+$NT=SKOYzP` zRBb^OsylvS=r?e5zp{i@R-if4(_vE~cNq|Hlh@2qo*;9|EMs(-JSK}di1&}_ijf`& zZ5!jXoB|i>7-pEfWG>}oISC%emg)$zBYupGkEu$!w|R8wy9duu4$j@n=mICb8L`c2 z)hA4xTZ1W@&?Ah)8?PU*lxY$vI)~S)wA@9!hwY+sIcd5ej*KbN;o&Gl=k$}((&mR} z{~kfgiV!f2FD}cRD;H(kGA2|%m8p4raVrEyZ?GIs18#n4o+$M|D@#G)>-3@~iFYqk zhJYPaD%AVsy@OCsvIX)CtjSbE!={g8p?FZ7P~ilc-~?u{Itkq@K=+jPGu`Tb3jv9; z#K<ulv|Dr~PfU4gnZwG(@!e=7g=_At*_mwo1S4y?n%;`M(jLR2sIzJy$|W_Zp37`0 zpW}##gUAI=Z0qC(ZvAAxj8)?(@&YpXqGpU0nou!zccQndgmum<^VuCpwfqffU3wTh z0v~aLE<7(2E7L&a71DM~x1q3@Qt`+_Xthue^o8~=+*l!rtuG8A;2O|%oeT#GXV9x( zXS#~slSHQWWYi$frl|O(2|6GPnNn$!h%aE419ME9&|}(0)|hdo?XKd<k5y~p3=E>D z8atBzDy*$`!|?#TGuVB1b|SKGn3iiEbo5xxfb*W&NtnD+8jW|x_pVxM!rKG(Y8rzp zvWgGFr|qe8B%8!Mf9kp9-P%iIhO`GeG#r3Y{iPjwk|m+ZHzDNXjtlYGwzUpJ>;uAl z$pT)07QYy-<0HdwR%Ojq&4s1^`lMcE1D~*$&A5YcO%Y&jTTbN|3ATeR(ACq^0Lj3W z^z>u88cbF54;6oWfOd`xO{WI?3Rq+z)ysA|xL(z;faYsJ5(2)+-Egs9-V@KIL2^ZO z=3o}Pt&x9$h}JRu2comR@s=NhO4G@cn?CF>-r~lX`DE8V@Dy!EsX*yTWR4Y+$HD8u z!7SKlmo^$7L|5Q#C3g%rN%oLwukoo<l2=4!7ltLu_M{%s4iF!m`ZeE{&-A!Zt%_^w z$_n#l{GgAeqeShvQJq`OcU*b#YE6pf=5bCZX5m(O3S%;N&(_?QC(#sSB!Bz#(<bH) z<SpL#dPwX}hMYI{YGE+Lb62gGMwvi*E7x#+_{wI6?K&4?%6Zll=@*Mx;9JV|f<-PH zdbmcszQ3N{lhUU7Y=CQA`l1}Dvz&~>ZVXR<`HPUKJ|<Om_vF50!&c<Bvdod?mLg3e zaWQ$&ysF#Mxw>b8ZR!*&xxdaAvTYY2C(vr6n$BP_Z<-7DkiGR!&(NB(Qfz*z%92A{ z0lk2{kGqXf{&R1!F!F0%>JNfkMp*fY{h)?hoJKD$X{}<>_Yi?Ck&?LAE+H73Ek8gJ zROvoVPlVVNlTQ`<qo`j!{xC5h?C&w0udIXqNVv{%FNcs<BT@dQ?xxQJ%_mPVVAd_1 zBNh!D=9!fjI)^BfzbZkX_t}YhH*#Q9Fyp4(d`z3t?`lVF8pIL$Y&)r@Z${JYrezLi z7T%>3>fn@3IfmtTD>y3oTT}W1Kh)+=Fjj^z22MorP&nXrw<&93FN$7feR-czEO;6| zp0mVOsHS{#)UWv571DwYj}$d!jZ}z<mj<XWs;1nv{LK<mn(S^gq>S>fd+b{d02Xtr zXI8^=2P94R_sxTYA7k6&L|Gj<z*G@PdIdQ{=VL661B4>wyvx$rdyqo5cD5ND-mJmD z(Zg&=N7L&yh4&+#Iy)KOLuFNw>XSVh;v)*JwKWeKA%@;v5P{R`=Z+lEP-l4tdPV=w z(r4xqar>Awu?qBL7uffUvuf~+?W-XuXK5Mi0Fm<0#ut_I_Q1{O`>wb1MSz7{lwK`m zY_b(LO>%DeZd~ps?30_FO%4Gcnw=N`vl5+?SOB1^aY%Ac=n`jhnk}f+i?t$rKj->H ztuV<IPcG!MHrCg$InU=ZFe3x&=ObnYdT9jmcHqV1Sy`b@B;5@(sYq=PKLr?lv*G!w ziA?=Jj1WtVnT#7MXbDNCG^TOc1HQTxWXLkX>Zt>*EQ4>?9Pq`?5F}5*nYJ3g9|ax! zNl`N8?udF^!qATbcZT&DK``m=*wgAwEtaYI{6s3?$1v`khIteI&>cLmXYdFL;JjcL z-5&S@6fw2+1Yu`pR%PCeFO&O}lwE>~P(j>N&^L+m#TeambdMM#*$qz<fQj!iNxAe= z9}xN)-DwX_jUFEA`&wz7lNdFslh4yEwZ(?Z>%B|m@X`RdtWK?etUides@f2gLT(sN zl)Ex#&k7*3|Dk}3y04B%d-O$UK@gO@5TDocev~0|D?R<`N6vc+pWI<X0H;~XmQvi; zh5tB`Dz_YB71Y}qL4WZEs?C(}%q=d&4l1q}2ggZ*iFKfqac(9J$W});m<oWGMWQr? z$_dg5)28{*OW@DvL=934>`f56f;UzLlj(UP%^3cON16p0XYvufVtJakbe)c+R*6S= z;?FyH8?&^he&3<Z!5Fow;~e0LolP4ycB4T6%>ZWfB(%?pKTB^Xq5PKP$tWpBS=^zA z^G1z=W~0|NPcum!*x)(P*?5S)Ulp7oNadD8G{RL$SMg$~8y_eRyHM#mDD(67peZgw zcTh`sWh#@azRacJ6s4`8&;gZj$%cfoDxSBHH?vJarjD@EjRLRzvW>ojZa-B`i9yR4 zRwk`a>tGyRB+(R|V7sIOu0TsAi8yt%8Hu|&*vBk%ka^~1G;}&*w-wRS$ELtu{~(%W zt(<uqL?L1Eb4WquN**;UHp6|uVI;Y=w-_8*8hZpcQ=<))TkPT7_bJQ5zX|g*CDWYo z_Z52nuir9PLmN(}YSlgW(7;GFiFW#jFm!hP^ShAIu*Rsyp$!UKABmzz!Mas~^G#l$ zl>?GX&~!iz{MDCHbudEw9;#<<3szl>aTGTop}3>s4KROn?jNQa2&_yYjLLqZ;D>^_ zs}8Av{HTK<7W{PoFgzNdyxm_O6*1t?B_D(((j@sb!Y$}Z8BFV#lsj3OOxYTN$*{O+ z;^Ddo1CQffkaX3~iK@qQ!BrmuFG9zdi2&7uf)AQ~V5`N~m-7U}QBlu`^^Y_um;88@ zm@r25#97POEONu>@Oz@<>GViMBd$S16mZxZ59=SePTx^HDgl5MAE~g~Ui*L_o2%OR zWp_{8>$2TS=|6%to(t`5?70;gV>>Bl1kKK(<Jx?WEK=eHY$N|uNHCqO0z@Xb0-_M+ zK(51`u1!*yA+6H0iA6BR!z6mi*4P;t^5OB`Q;aH~ve->r$e9N(hD!P5wWII;)<Pry z7N<$hCed0!7L~i)8}d9GtemAB#v%r;w#>JmzuOglIN*0eh&N%N9)5VC_$W+CSzZr6 zTj7UlS;sv_F{e1TjzzlB7sCbbn1oB*cnm76j4P*wx>^~h072PXpt!+L&kBQ@yE*Jr z^}F-$UyTLGWbgdyg759qPWre$Al?(>ZDqO)0$)l|f$h(BsHHcN?JL53KvXOGV^Y)C zZ0sq##zoL+9FLCU-C<&K31(&Xy!~acuim@cW_P#h@mdKELFUW4U(~Xp(8-wFjc)=- zGn0lTKr~<xX2uX|l`{p<yL^Pb*9dy9r*2L;{jMrQ%@qm;EQqnz#W~@l5<ci!LfydI zsXs@tj@bLCO3OX^qyMCjd(OjV&iJC@k&|C)@V+LA00vl{=c4}-t{)|B)T2#VavmQn zS=1hHpsr(heaIuJR9Y2BoNn>r&DU?f`+g~8OfiE}vBppQiVt|LTuMQ|XZB_`3ZSrs zUwG51pH%c^Z#v&ZDf#@F{M%w3JIVJ)byv*A4;%#?sKR#Hn1R_pJRr@IYBww+92&?~ zYphd-G9eFxXxsj|)-xlo-w)VJk|+?7(D`8kX1TWzVp?N2ap{3BgEMsloeU6VH71sD zcYWSI{%ZxAy?j3`NWdLNV^>>Y<WbE9`PJ17o;v(lBgX3)gQBMEu5r1M;;!f?Y3=0o zJoP7IRPXUdwh7=koYG;5Lw67tws(HPkl(@AWL1@6BB6ohxou1KqPwpvo6D~QHT3Rz zMDI*p%sJqV-!~F@-ttO6er-;*O=GvSt0@HT)1e^#tn%`a1Rj*yy^u)be&b94y2(yC zYz`H&e$1Lghb5ddSXiu&@HX0$*<OFKp!^_4%)2&RdK~>J^SHYN<ER6Mt98W)e896J zKrp!%jvNTnwMinMy;%4FX7BZq>7<Y}#r2)>Vq!6f0N{Ti1+Y1<mz3PpKKw_QHj@az zrzC_!kHw&_j(X$CrRid&5<}a7#QwqK!#xC78P_UegW;@dQ>x*WsyybMP#HoXkJhZ` zI=U}*2m9(szfrl_{TUaDEI5Ry;I8|&R-VzU@t7-*I9G;D4>o_RtBLV9mR?muz3&;5 zD0tE=#%uAw7yT4BFs#aPzpK_|(1dx6xLFMmyh5U~;@c0`)b?CEs7)91gTO-~Qzq4@ zo&;DF9WY1IY6u$jEr^Jt3lVPVpfI?ShFRd)WZZ!7AK(30PbUd0`BT<j7-H2qOy0S> zCw{c1v60%sfh9}@tji%?g+qz!M|v$gFy6^_Nl7GZ&o6(%ACaP>7(re_Z&4Ik?@z{^ zmXcaeNOl;9w1JM2m*H!?E0cHWa~&MfNGkxImZw}jj!1{1hv@$)^sWfL{t|5^D>h9U zrHM@~mQ>SSbI@w3I7N#wdYyl}#dHt{1hu_?*BA@{#s#S?>z}7i6)pOd1{fkV^+wQL z?2A5lZCeO#$9kz8@ERIx-T>x&^dw$^NzPQc1&vrpm(yv}=97iVC_RXhoJ3q=t5nnY zl57u^--?E*pOdHIUMuI2ajr8hT!PD3dJ?FNX2pR@`7ujJd!JT$$*9$Z?L#-vTE0?9 zKLJBL3Hff+)cLD=vFB4jZCKijym6eeryXBBGWfl6Vcy;taDwg0yyE^(>BfU}W@l;T z%c+W_r~GQ7C(t+xhf6!YI+5kVS}R}_d1P>LU$)I-nv+I8P+K=v(S05J=wOH}FK&bi z{i1yp<GOQ^zk+DJl(~d)hjuGFZLrU$nRZ&3mI!A9cdlb^)^CKIS_F{J!96KY4p)tv z=(QOBz&0Q8;veq_o2Pntl;Po%e&Q1%Inq*7@<B8Su`!Wlo5$v-m@m?t9EErXP|{{I zh>GC_qzNb6+fNg$1bvE0<K(j^>P?1?t~V3yh|in0TL9Tx795+*=`pL73kSsAND$5J z$1nPhPC7G8>1z74&kU&@fh<mVxdog9+x5w?K|8EEr!&u#TQ)xm0upnuo^K$eGf{Wq zx3bT>1G;LuV0g?<qv6gD9(M~CP6`^d7A*{T%Ia86$#5-hZFkg5CGW#KY}V<<Ol&6W zJ=hTlS?cJYpw^<i-}_jOCR_73XkQpBM+NUO8>|jr50aMFia9ph`I9jrt=R?uhrrBf zunyOXv(cJksIWXBx+z+>rXN$Co_{Hw4&Ee*NX5kktMzX#yGfdlh}hFKsfv822xqhM z_$<QB=#BA^4l)H<)R=}I8j#Cy$fC3-=&bN?jK7N$+iW?Rm`&d~c*uUkZf~m+h=Fyo z8Eps!HMOAV^Lfa{jlfe3(*7d~o(NRD)WJbBCng8I;`lr;sm@C)*$6CURca<K#hE^? zK<GwLH|>sj)Qqlo;>Ez1PixH!G~}B^(@(w{W`L+tbph}t#wv%}4DHx%J%@M&F*3pF zBMhUw4++)C8Kx!u%e5-<xU2VQ!wieQ44hH#cHo7vz8(&EnUtWk&a}>vI{&KX0!`5@ z-x<Tcz5+KKv#|Y}i0?dzh)+VJD+3PgN_(ZssBA$dA5@M~{(TQiTHK$RaLB}2!;@x= zXU7K5>N;}Vtc*{E<-n(d$z<0HvR|18ZLUeeu~q7nIXuwb%qw`2woruz$+^Es`b^#O zspSu>6ltCgD{Ev>yNZ4x^s~pcU`Fgjz5xVZUf+Ut&5c6aj*_Y;%J-Tk1B_*Y6z?9F zdOT|E=5o_#(D~*33{wyWjEH$hBBt3+&A~3A=?2r=sPD94V@7W|6X~<@roN&hl-X{> zOSwkuIv7hj8rm>@vk3gO2JmVmRcIgG<MoOOt2m!s;tGBhzm*Q4p8xcA^%`VdGH`tb zb<jHxN#G{6S>n;|$e}%@+hHn_AhV;{Ch5ydu<U^Yk$A3tTX~I-t!~JavG$~;SbDjQ zqBpvgD^5STV|#*oPq9}8m6ut21ZqG?SwQEnwkuJTmN$$nCm4fF5CtvD>f`7K!xQ{a z9(2g-ZUF>)vqZcgLdz(%pY`VIkOlXQUg5xP7_dMipj-YuBAEgh$_R0bzDI!T;@-wk zQG$iz#4S*a@Z(B7bpmJZfG`z0h1^rLL787gwuwygwlHD9Nmy;L2QV1-bvNrb{bRIu z!bo1dz|tIeU_?FcV8d1h6UhWPzsx9?1az$#qW;?T^%S&<<pSKvwZk#5ze$xwqvP%C z&;@@`Rb6tp$Hp){?!}_(DYxjt^3EM$7NoGpN4DlyN>xxJW4j#IC^RFEvk1UKd1M{? z8D8Lg>18O@$0Mg$8QSk0>VmE9_AEt^EiLa?;U6HyzIA&j<H;c_?M6oH7P7Ff*=u1D zS?d{57M~y&TI30Jv9`7|#X3Za-M)!=>lna75v@VAKp^q2LwLlUFO{2%c$I#`_WmXQ zIcO3nLSaLXIBam%Z(2|i?mW^m;Zr2+1qd&?+*3m9!LrQ-Mz(Ry?7TXw)4$~k=Q&hb ze`kOz=3M&60ehw-SD)2z&Ek2gqoH)B(;K%5dp2$ij2?hxZ8UG>z%zwQpyAVBQ5?{% zDK?aMJ;^~v=-Q5W8}3g)CG)}E5Y}J}1Lj455|5ym!a;4N!CXc@li5)7B%G3Y&DSFj zlVM2p%Et)h({ScKTdq0#B))mq|FQci@tObGBC;>)Q3iLX<u6Xnb92*33N~~*CfJOc zp=?xCCa>Pb&u0b(a3Mex#f)8&vS7f^6=-|uF|qA5r+G!N3WRKdXvFzm3F-e(A_emL zBcY+Xww>Pnc5~u<5ke-X&e>M-an`V%VManS6%UtT5e0?;MX?oJ_&kl2?9!P<yxuEH zQ;(PoxtDE0mJs>-5BQ3&w>YbrSTn0FZBnQU&qm$I%*bex#K9vpVndZGAYQm7+fdRa z{P=cAvrF<AObEG^g_dTQbnM{_Jgl&g!#Ek~il~t$Bc5qvE)4`woFoqz?qb+03B4bS zBo`s2JEUphS8kOTIChZQP3`P?qEgTq<I;Yt)zLzI0j<+RPD#;cxf67A=H<`Y)bW?L zPk1K@%_42}^m~{%`Z+BVue+;hL7EkNFfk?y@R{5UgKu~i=U}tx7c}mhkHJ2iS=yvC zJiE5}gYfoo4y_obq!8mP!v%wu49I6+NEGeEG%^}p+*=<2S9piv?cTGj8bMjuW1B=s zU;{cX92y;LGPjomvW9LuEy<62o*J*qw(Tsw+dx_FD$z!8aoP8$P5N+XMP2f51g9ZC zVC&jq;dN)T%_zw^bhtM&#-{}A&cS7^Io-S*n&FAfk*9`PkK?^q62VTZP>YTXt>GR$ zv3+~>b-g24#`-gQKBZu))~gJDDy!CtmSAWPPt&Ok$(>X-!mk3bFryjj9u(I`wofu5 z^(p6;ogoGLvbdFa4v3$YD$Fsr7GMB5^0ED*fR6iGN9ZV4k`lr!T)aLD{*@DnCo~09 z`#C~mGZ)&EZsU{2p8n7m4c^fGgNq_V&igWkxUasO+clNQbDi=HOFJ-JbPllof=A)l z+@_5@f?Pv^=dz5I(Ul)9VLDxCFE;Mn{6$sp?FGVQFwi?j-a|vFU{(53d605M*<3qs z<cfP`R?!=n2wSh}P`MO3#A2vd;3IZ%F6N+!kueF_(lNT>Co#j72us=p;DwP1IMp%D z3Vk{GThMHxu>(P2H;+4ISRr+qlGta(DLLDt>REy(8_@RGPRRBb>a$P&j{y+#D8XK> z%D743FDRZjTf6@Y@?-cbvi_lB{vVOwzdOADiu~yR1^IoGzkjw|{EyaAMO7(jHKA|h z$FKUgN%6l|GJPAae=UWe`?od!7~%hx*ZiHhENJ9lU}WuxM@{#)l=Sa;rS+_g@M!+q z6aH7^_s_&;I@<5J>3;%0#{W2;pWnt6PlNiKpM6I*)BR;fZ2x;?^IzQe@2!~saD0xY z_C`iD#x_p&-}2Adh{nOpmBzuy*~t2z)Jo((T;D%bpXz_IC>mp$e{U=OFYt-R?q5Y8 zjoZJNzJCKw|7!aF*;>j>{}-eE|GhEL{ksbMs{{YH`~Q3nRwi0J*6%(K*6*WP|HBos zvi^<nW~BRjwZA<d3-jM1&%g7Em5~YWZ;|Hrqwjb7zYhEFY5x0-iSZl%eZRE7bs_)u z{hKZ_d?!r*9o*mLe;+Ut8{@w{V*93g|F+kEZ2h~Qk?ET&ejma3k8R)U{too-w!ioP zlBoT6c>kD(|L>fS{`=zpi{<<OhI%yr>#X^HQU7pl-z4%MbLd~1Rq4JHo4>u@FKZh| zLnC8676uxzZ~OS4%glcjDc*Mh>p%Bk`zuQSC*u3Q4FBBc+wrM>Ys-Hw|5v>Ck6HTP zYFPh;>;2DJ`%U!zImmw@df%+`Ki}ei5<S+xpXYxNJvs&^w!hKv|F>{)M&@rZ`uFSq zAzZxKNHKGxt_iAl1OGc*{1<*pJLuBT23HFrINW;H_T^<2fPZ^ChfcS}MQ40xch1o} z`<~;|@r@>vh4O}yf;%HfSUzMxY*-e&?E2(lnqN>{5Go!)@pvD!uAZSWN^o&5oE<O* zyT<ZLI0ieA8vqq2XT=Y@T=-*v`<(;bqXXTb;vb>QD;})ssc9TQB|@g3cDsP!D?hNQ zBVnun?1Lu{c`;?74FoKF!?S8ZrdI;s@eHkCWIs)U5qZ&%fgK$|(rNqZYko*lMP>mA z^D;nbxEA>kiLIos0<?TuG27LCUE!<b79ffu`M&DVoBhCxBXMq8#QA}kOU{|lflY=9 z_xs=rM(vBEr6r=Vu_JGSXXndo{)@@d)IjgzM(3w9^W(2cUJ>8SEQsluN1t}{A77PH zKTY*_^zXVw3Nv9UsUw3dCo24Y9QtHXWe!lU`;mmBOb#9XP!O;n-R?f;)kyfF2Aps8 z5z|FTP((^v%6)rE|Fn>tneJOuTj>Afk^8dyM6G|<lXbzOUI$nm&wZ@(#p1jA@}B+B zX&tbPx{#!@ocK|JmH9(JL_`4Ab@~zj9;_z<L|4xO&=Ks%2A_W#n$<-npTdva?B^en z7g#%AYO>Sm3~8TZk2Z!Nd4sryKzR>7u`q$Ts*AzQK9c7@NWf4zOmf5G9=exac?dbb zm~MF{&c}a{cnFB(Rx(ZB(@>82sC}g{khRrjMMdr4LV@{?toLtXnZ6AVK%_&B>YLmS z4}j>}*D*WNe;Mq6(z*d+UwoqR-kw|fed+y-{bkb3vxkKzG<g`^)6MyL5|tIPhuhDy zQEU4#21K+3(O~_h7pqE|d#0n#XE6Z$j!SIs`+HUWojUL>C%y9GQ*swr41m1_?Nbe0 zT2?oY2N;s#J%krP=o5}C{TLSznfeiT7chzHGlW--=o79)b%Y1FOz{-f?{?%9UzWR- z2Y8h9D}?t2=~G}m*E8G)Jdy7O){nmA9bcAE=?ktzz43dGs_&y$n7+^WmhyM$1$P%< z!DQdm)Dpz;6IUZ9<bvn%tM!F<33)CjY8VL8>OO=wFX{^m(OA}q#Ak;G>Jjy`-tLoM zmcPCmPO<z&2b|)u8t4yn+2Sn?uvy(J6kmSD7k_LSk4OTD;{ol;XAqu}vk$&#(uWSX z{J}M<zarab(AW8XH{9>h7aHJF`xhv_GR^NJD4M&i(PAl{{%+XQdG^`L>+5sA)P}Ce zEdYPj|16&1{DC8llk>G>cD@VV#*+E<fC$nS{*@s`&5Ozccl?tv_>0TNWE|BnZ5~d3 zmok~<0Wlm!bGd>}xvR;d2^-(`hNH!4Co~f1LVY5ocvca5|GTS9zZuoDIF#9@(C)^; zCuDhF$Ht=y)T1<e;#sFk{(#f@LhK4CMot~`&{~?c2ibU0SOS6Z?v3FWXtV=TsgTl> zp0a39Tcg%l+nhgZYgcHodU+7&l5AZZSpf-0Vqk4ZRa+j(0AH0f=&O2gAM*^g&T3<8 zF3&-)@o@Lay1`&BdNX`Ixy_6|#gz{?`6R56P^tG7W*L$sP--bF;A3vGZj#7vKn6N~ z3I@)bf%{?_Tatmkea)$pjJ2-V4td+tD&))K`k9lABMBN5TAhJ|l_Vhru0HoJYybpY zSNk=?-R^js=PZwc0gfZV^0R4EzBoK4jrbkYhvFhBJ@-1it>5K45HEcRt3J}MPxkPV z3&^+Rj{eQd!d`VqMQ%4rwEVm$nA<9x;{ziVr14273PW~=1g|8nt>o_$0k!r5A`*7Y z;^<PBM#9n$0WPE<uN3Lnzi-lW?d4j<17xeJzoLEoJ*I&}$h(jhk1{1)SK$O{1RCMM z4rM%$rw9Ms>i=P#uB!5=bZRKwH?jg$BGk_Iv>Ajf<}{dME?Z@?@=9}G79*i8M29e6 zbU>}yKf*9O)P<q!Na6#}0Rt?-X6wFz;Hc)0u~i;Ii*VVCfM$=5W4MW%9;5OV;n+tS zDI&@AA4KH@VzOq|lqIG>{V_u7wk?HxXi7Gs8P@)pGMy?fezy86wxV^s+U?<&`ufA0 zSVQ54;q;0tISni>16F#njW<~nR-q2Fhs)1sVsS6bh?s$XKC2qASFCts^Isw6y6$>? z68s!;S2jG4ub$B55aGxGr~>Pz{p=ioYhf5HKij=`ICS1Oz(A{D1oh-={bY+PyhEB* zb+N}G8t4}FF6-El^X%)2SFB$8);;0yMK{OH*&HhI<Y;;oP=)2J)9rbp9Ed2r2q>1# z?hvVrE|L~P3FU^D2Lg!jZbx?w|0G1?m94LK>Mhkkl9UEm+XgmD3r!zLLw?CRyhaOX z_ViLIyp;Q=W@SKM^shba{=ii*9K{S*h%mh%QpOJkmfO^wY<VN~W7j_k)AE%_FRUmz zStPjq&<#~$yT4>7dK>>SF41#+v#w9I_p^gi+D2%l<Ovu}0<>XGCSwQ&61Z?Vb(zy0 zKP7k)BL?;s`8gJfDCh(7Zl4bp!t6doiu=SQ_6*iBMV_jW5RT{J;^yLAeYpCy<aIlV zv72C<M=tZ1B%TWW&lYEYGiLqDGK@yr>Q)nxFMSQZ=%3!2?lU?_UA=jVg{v)=?|-=G z%--fX7DI?^wdz44{LzW#37R+-oVv*jhcwCS?+|1XOOk7POMQRy&L4rX&2-&MMs~<a zia#EdoJG%^hVe*nDpp&w1`%Dn;S?1s=C$Uxp#$%-zri}N$5e5Qe}}tvYfTM{;Lmi% zWs=#8h5jB=qhhT)!z#wz0@LquZfFJORb3hiz#K|x@ktM7zJa;2iSvN~vB7Mdf7z~- zwIqO&^2-@{^w!)U+F((khL{ecD4X|q7e{v1UI;x=jLuhiBCt1j&C}sMXtH$|ktBjj zJ+5?|?+HUpIBFWNDf0Q1`0~+KaN*W;*@DC5@llR->5H*p3w@f*?#>hgpo>5K%f=bp zR9tnhO~5M-1pQ`19KiSnxdU2-)h00Ory9tYINrh?q-xWPPz($WiM&PsB|*!Zdbr@k z*Wj?{>hrLTbIj@^oJ5)hPGqAyI$MoGrweoB(aC2gJv>>xY}*!=N|I|%znB#1Xw9Pa zvoKJKUISG$igC1JDi08g;X+m*xJ-^(Ei`~_DOZVyA$7S5`9Rob$JE9#b92YFb@J1l zt8(9Ob#<fX>*}%e4?7|Pwo?<RCO|<2L4&65t81od<<|=an>&)j`O-1lk|kIJ-Ij!P z=HFf*UN1f8cEJ~xPsQ48ft3fDzu{#KjM-21v#n%18`Gmby2*6+3CnwvO-y_9LmZ{y zPL)r6Am!vyDl^otJ)wPLY_NiXJH`Yt$7ah(t!zZSmoc8it#%`O$Buh5p^v<7Mk%%N zt5=g&1H0f1nqso`88j3Jl*^R|P}=X69!Nw(xo;B(I`n@NE6%kwC}-Ft@kC0<@IW1B zOx4!rJbGFKQ8dn)2&%9DvO3v(@Vw6~8RB99w`$#pLCqXGMYZL{T1R(m+0lCAt`Bp$ zRH|pubcg(jTN3QHNSnzqp8Oo>O&i^VMEN+VVm5?I5#7Ps;k*T|RxsaozQFX|0vgh$ z=ew?XU|NPMcE1+@ZIXPO+(Ot53ux55jPMS`w=MtZGCoy#(ZJ82x>mPIZqK)Eimtxf zJ7jE<qoJWz+tA~zHV{-oXc<OIR26{jei;Fsy52F<w?8=r1--o7T@n9^q0^m)iXNqi zOefM|`g3U@!OK1WdO^r)NyG+tHsax-Kv(<K9L3AbMV^CFnh-<TiXPee^|Tre))7$} z^$COhK9MMWvA~eh1yWFTLt9~;6Fw{e%X5#nAvT`KVIG*(5bd@{_ioaMd%GFmRP~ky zs}Cnpws1;1)T9Z4TAj_%#$Mx~W-t2|-d7fLP;!lfsTM|k()78+?TKKqiM&SO(}*3U zTBWV8DHIxyw#Ryc3nBdU^(IlLBW3VdVSI}2Oa!A1&6CgN_?)d9t<b;e_pnjP#y!4O zb%io}^CrZoVnn$EfrJ{$2{R)WiwNUrJP{Ai^~f0!_1%S^h{%04vGFho^~Fn&*O+PP zxN5j|pFYDO+%DMY(1%7DN%#->F#5t%Fc6MoBsnL-+6?*mDlKaZohEWf^NODsB0n#1 zh>RzKjvXbS&A;ySc4alvuL$7*B<anj?H1ZOeP=w?Cg=LJMq^}J)m%ji;P{Ilz1;eu zrGJ$~T!1e~h}`~6b9P<Z5!L?ACrHGu2zuT6^J52>uCet&g5@UmPTauFyVg6gb}pS+ zZmvctaY0-g2_;~XxJtd`m3BRZZ#|VVMLN!GMK|yEy<{<lfx?6K5<r36CD5F!k@m#> z63(!9b%Ad@S?kE}RKS5N-J5i@O$v%DYheyG4B3AplBF0anO}9PEz-jb)k}=f9ReSJ z0NOKWBXGQ7OMoIt*e2AiPw4X$r(ITI8o1b6g$eHbI^*?i`*ks;q0s?<s5g2)uKX<M z^2}`C$Q`l^TOv1uM^jru6xiegCNpL7KCL#8P6cP&uRhO^TD@H*^kTu7nV)6go=@H+ zTB30Xx#KRgOyYjf?LN|Zs9@y?SrG-hJHMgU&FEo7d;8OO$%?878XmZgB{3d^*b)PK z4JpTI`Q7-{hOd6fK?`8H?tF%G;hEe?-|TG1{085hIc!z8#4u340P(dIa5f_2=@XbI zIZctDvkt6yAs3G5ip20M$Fo(ax^KjVN(eiO5u8379N($Z{ilKOu%!&33obz%M+vd4 zEKfoclMQ5SE{@Z2xA)|+OY{3;6Usp(CX?!i)YWptjuZ36<~h@~$PpFAJ*WRX;qbDw ztqodov%BHh6Cy?K`1G8gfU@;x8yC$i>Av!C&SV7YA498Aud-^2y`?@>jtD3mz#+Cy zlcW<>YbL-8@3;|KC@1$Pf}Cr)TBln|l+9~wS2a-Wq9Ao`Ty}XR>aa4hcI3;ER-}ES zAX#@v&hj6a*=oZIj)@(9y@J;Elh{*Mdo=~F)Fkw;Yss?DUiufVt``F9JuxL7=|@rR z*4}Qmdi3~QRORG{YX)QdG+3D-Y|Br~l<N@ciNa=BGDjh%K<`ZZ(e;1iJY!{&?D;wK zt9H`i-weao7UD^dc^&=x=fz@@OMNq?5<*IP>*o-+<|{Hd#`t|63eM_20gnQczH><k z-Y@~fQ>S<c{PU$)78G6wAov|pyQ=><^jDhpJ`ArHA&AyI8yW9feJMBJ{}JPvtKw?m z8s|7<bx<RpK&Q2U3C`wU<pOz2Kd*VWi__~o&Lc7$3!}^KF7r>Q)R0E)WFlhmhSbbu zI!T^CHc6d@`Xs717MK^V<a&F$wZFrq%y8Q}h}M>E@ael{+3|!Fa>EZLCn7rVOJ?ZB z#jC?x?bGw&6w*d<rPj<7QxNsxL$gmFpIHbzX-WNjs3;Y)9)W@FNyVwPrC^{{+9|!i z`}n2aDgT7@Bs;21qz-uIsh}7}mCn%-#q!0c&{mE977>*vnixx8G~|c=HoV+uHpDgf zr{v!AAYJw;RMHP~KT-~2K?nZA6srI2c~-`LceoR#uK)ujn?~sYxTU&aBSRL0Rd|cW zwbs%HqM8n6Y8THXaRtlAGLCY5uJ!}YLikB(2e|{DN1*=5>*z(0i>KAPytA+;x+TpA z4WyDHW>J^1jFHnbt({EHba?RP?Z&)$j;c?_Yu1mtUBxWRbb)GWW<--;qGChj@GNti zf_%;z^gvj%ArcBJrC<wv@}eq^EQp-q$eg&MP-Wy~Jrt?6tC@>50DWlSUJmm{m!Q7k zryiY^K(#HlvGWGcm5oL8T46QUn|kAM1-Ai?p<}TgZPJPj#Obg8xh6zSV_86MF3j;_ zF6UF%LVmC3jTo+un%brjzcta;2h4&jU3R<*wA{o2G9KC2Ah<!BhlGvUS@DS@wUey` zn}ONrHzU!uop^A7J07_Fi)t|ShZMm2`ql%(M2$o5S{Ae|@jRlGJ<ORDWgRFo5xhUa z{YtP-la*(3g#%1DKgFzrYy{LqY*+)3Wij}@<lakTjyX4s^S2e49P2Leoop5-n4auY zPB%iWTXQNc%U_LmV+wa$ctXQ440=nE;_m{S{7}hYS{KIow9G|x&o5Kk8@Q4B)Qx^m z_n3u=93yVIgJ|OlNX+xySee<4RiN=BUofr4#!gLMcgBPl^W;THUKSmPg;3Z{_yH_p zhmgj)9hkk_86B(<_D`YiTNDh<!xI!n&WYLiZC-mJN@VM?Tas&Xu&-WGF7w^$Vy@Eb zdHE}btv<tWst<)DBH^2~B@SI%D<>iiYmX&xaxZLwUG{-CK1@$~L&!pH8s1lU0X3(@ zGe9d8xx%XEJ;*KONf2{bfjY?3a;<eGS+^#ID_@&sQ1DEk5MWwRClUOC;uF^#BO|Nf zch7cY_8AJAFIAvMTdB495^A6!yxEX2VlX}qSYcBM#X)y?f{`0>4s7yad;+Fg?2)}# z0;F@jhY48{X%I&hIp3-`eP^6;|Bmc60i8Ung(Fs$64&-rilGc;RB1c3=^AMGOd!o! zAV=vQ1W)_oH=5o)x)9teZ-F-HOl01*Yir4Hs$vV)O|xf&$W9aEm?jW7?qcS{z;qaL z;2*7MIU~4+@<<nf34obqq+N_uCGZa<5}4h8?m!vzh?sUW^327AI|xAA(>Z&P3d#Dt zc%QKyigU2cH1Q~VTbE1dmKI;^dBNw0vm&yL`+6SGhABhKZmM?JBkX?TVTF$sAljj} zz=!Wc0JMdrkNVTqGR0St7!e@kk6YmIsAM7TX><qe%*oAcBJzw=m%q*~7FS!{ue>T9 zE5*q%&CU?uTv3IiyjV{iI(yulf%+bSsX!l!`N0BSG&MJ{i7lvz$g_fWE#x$E8fP}_ zrcA{8n-l1+2d9<Y<;KrZZj!IY3G6^wrTCR}^fr{eNT<kQ^wnqdLf4UxUW7hu)~y1o z)r9J;SVsB?K@etm%#{HxQ0XO}FPKQ%leB<dmd%JRi@UML?{>5v{gA4AWKb62Xk*Bk zQr*eyK!bO*s%5xxn8;Dix!!HXHMQ#|RZ)!Uo7X@Q$@xuax0>cX@rf%UqX)GGoBa<& z((WbrQY{BcK%b%HC}(4Q6B|k7<#Z&`NA_^w3X7E{*S!j$G5g39SpNKu*xt<&4HB@N zgmrXfo<alSBNLyZ(QH(Hu1yEWVGlbc>=Q5scuKJ@GWrs}tVuz`D;((gEsIduJQBM0 zJdhTztVs68X87P<i6Q$=T>)(6f!>|=q(9qJ5L`w)uwfU~G_Yjc$PjEJ({^bz?ILt& znhg@=;eZnKjw<jW>ej;WOST3<GrF9MFz%`6d{$Pcqs0<gyeCq&ML4tTkTV`rcoOI0 z2NC(dW4QM<pu!@g>0K8Y4C`kZVI^6iXI>8U+j*|xjR7wy4urtCu1b<SQ(3VM(!L1A zi$qoS^z&Se?%nJ~5)S#W_cbDkIypS;W~4OZ6LB5BD&57$Ylm)MfWDe_!$xoU<9jlN zB=h&cmWbnYWKa9=ba+$?2aeVn1a}<{gUS2I)tiVm0T)s;LyXyRUBs`E5DjL8<%!G; z>k$4N4c8U+0x<JCnmV-{cpr!pSzm8M8bzd5HtEyDmx_VW1GQz5naKDb`&|}mkFKwA z?BZ4)H#0p_spm{(Ku*zZ$AyF`8`Kb_yA1Jo6xh6i2otVe#e$wRs@KL7oRmU@qR7h# zvOeUlkyE$1?=avng*$l5Za^?f{z(-ww2J>(EQ<T^g58v?*&V82Pzj%#)hZg`87{-) znBo0fFmWFLCulHHRN@YxFb|;vW-sDK?ck*l7oo2=hWB9&%!e`jE+pdsfdIrLS0!-- z=4wc})2!x3R!JsMv(}Ec4L%lUk-xe!-ZP)%y3BpoRO6%21IZwjube%2=i?9s!K-Je z37L#IGnf(ISPwvYFa90LX~yrZz^~+z%%kDh8h4~$ygoQY0T0qXXZX+>zqN~29_P@) zSiG+Fy8{dgymd!EpeTXO<SCI-7}rODYio~d)%avfYvY&JGtRXaxO7AuRed76M%eVf zA}%h@qfzq3dq?d=GRN(0qc~HCaB_6FRY@LGeIL{*%kpl*T(0%B{WR!m%yMF-NDq{J zq0Q4N*paD?HVlBz4cvi8MN26k^IoT(vF1}iIkQ8cU6z!kB|4W44s}POVzMkSDE^?C zns41;9af|%AFEswte|bx**FcR$jDd9tKv||RfOUq9C6#O*2GQfx~snobG7xuQN}K- z{!XPzjrM3+9j6iZl<joGqbrQCxnI_jR}q{}!|zH8yAVZdfGdQ;q747;dD3xjv~z2p z4}CgY)13gV<+>j|O&Xe-AgmUgbm<Mc2`VNNmp96m0;t3QN<EK(Ol9^YorEoUk0R!S zPBS-~XmY$cG_nh2Dcgp=N<mtNb$Db}s7EF0tgvmHIDpNxE7v~lA<4hgtf9+9AO~tw zUN(N*rR7*9ObnoVaXk>y;OqsN)M$8;SW^&DN=@9I$nuvFs$?UybsEkIrK1{nd4cGi zck)?8wbXD~i0Q?<^I>H2_|1;&4~+J#I?dVnnDb?Q7htHu`5gX<bJ@g5;GGnGQJ)*^ zk1*}~PNi@O*$EnQIHGQAV3FyXVf>6p6aQ{_kT{(HuDm}I%;g}q8&cBRZ>OG_C<K~N z3v|C1zeo7QEvL3f*$xvGMIl%#dA9f`@gqzgoz-m)4h^yEv*$y1sCiU65}{9=x2Qf- z43iSQSK|c}C<F|uv!>VC(cFwtkH$K4%{r;JZW+nk=7y%0o9O57KNI#R`^0Mcb>=70 zl>lJ<xqxAFDC*j)fe{7-o4HkBo3HF?)SppZZbzFKP4%J$I%sinN+8~>9h%mfb`8PQ zgIHwpm|#B}109Jv+ax;ZgP(vZiz`>*jnrWBT@Dwl<z(k01y?d4kfuX^za~_{+}rPI zvkl{#%tMazw_a?3gK`5Es^QUHf<_3{1PY5~E`cSEBRM2lzIsTsT}8_e*^NJiiDEXO z@$@{*ttY7@)(bzlSlwjaq`^AT+z|)fi!&<hFtr9-zT4vE)?LyNY_0UcA+mJ9i2Xzi zZX-skWXiD$k4turKw-!rWV9Bwzp6wPf%zrElk%%d1m&m`kz^VJ0;AMaaT;MQr!%PG z7x_b&v*lM0v<RYO5QtZ5-B(!BsaDh$soH}_A$S3}-Co)hZO)8jn1!$AL|5G4(C#}j zHkH9x?9--F63iCKrW=NkJ+e3VGnE<xMR}r3&^k(E4q*X@*eg=`50)S3%2C7MEJ$=2 z26E66pxG~wIqo6bM?aiZqb=8~2d^ZfF8VuZ_m)Uf&Dg}JZ_x>PZnBa-s@p;l<X5l; zdEP3+)l_!Z`#9Fvf*gk@Mn@x~Q@tq<Mcb@dQ8(GTwjL1KQEG7ug>mDt3EfMQE!ITS z^65G~xR{Ydv*d)WF0!(-m6KQsp7oEj=WQ0x%&U(SFa$!f^PFt=>KA(*+E_o6t)*Jd zwc-CD75sVHcM2eZn|$CJzb?)x{Xj)@p^caFOU5AL$!VvmsLy^Itl+PY3v>b4i-hhR z_;tg_VC(A~RluOa=t%rH`wB+9$Fhe108w=SWE5N`8(v?{g8(msDFNRA`lO<dsAc0c z^~cYWzPx-EALyfViHVjY^AOY|vh+zazJ&$9MF?W?6X`7Obkc6d;}@+Bt|Zw8|1^H* zYnSPc@J($dVsQRVLGgx-(`-3Gt0VLl(k8gZPa3R)5;O`exKHU=!;`|^3%DS9>7lGw zj6p*_g9Bo;Ty^X736bxzKfcNkdXTb>#xA}5k8=PObnJvWGM825Wh}YrUweZG;1cD4 zKC371>iR8N#F|g_CVp|z2LeEso-bCWy!C4(+)k7+Ve=%2U!vL9h_2l6H0cV~>ZQH1 z8udoWVrGL-;wY7wwZD`lGhalDKqqY9;#II&V6P8G6X1k{`g@wqL|*9Fx>XMmszdMb zrxA2Rpw%+L0^^^<k*%h#IxH({R`<g!&mxAose(6(Mm}cf*hq*71cYp{^_)p{UPhvn zjPKy!dxidpeSsb3$B=a$v6KQuYr;a*#w4wd=VV!cU&YD?gcd`y`gmd0Fyq!(o0sxw zxKMo>**>(tGu4E%>j&;xOMJ@n^___%d3Nkm8l%*j>Q=-WeN1|Fz!1Zmfm*ey%>nmG zH;bG_BVH(ui)(}k)RhQsS<U;6cNGf7!!e?jJp{0<3REqtQIx76#f%rTK_jPAUHQU+ zc=Mqw>Vz3u#B!x13glCgX-`#<I(5NkiisvV8v3P`z|+-8oHbr5iS<9}^Mo=-eK5NU z-o%G(R%P@eUq-;x=E3@4Oy@r*OBs-cf!qJY2-ntDF(~ZU98VmBS@`{D3Z`!k<g=r- z=U{5{y<<Q=ix}5(ku2n}j<})%*X<sSKyf}$wqszQ?WfF1fV{twW~tVw?DKkCz6xu$ z$m3iN@g>L#mhY~}AI(ZYB+d(BJ$|PUQ@-Mj)${f^-nm+3F~9&^h8$M!-)X!wd&bOC zYOLJQ?AbslBKLE53R;f4gnQ$iMFe&d25I_6=7*wbfq2DvOG0bF%M-zmh7pb3{ZZV# zu)<o7&^@RS3rE}Ng78SYgxaQU3xjGITbc`v;ZO%$AL*y6I*Sw)Flf)_5sjgT(F!TF z6{JLf**9yx%co~JPfLlDvdPYK1o|aQ03jhdF;YdA1+xt*smY>^<l71T)5+)e4GTd% z^g8QTW2=@p&e&V5wC($B`^Ah-!hdo+-0T=*;e0l|TpE)f5Ca(oBvu1NOYhkq5RHkX zEtxtiNbA&++nHOnClm9gdlABe_=MNV<+%x!dAEiGunKWHuHNvG=LCEi)Fb@ii!jaT z!jQqT9D;3wIzgOI`tq3Nm4Y18gU08zBv_1`GFVBg)mR9VFYi>%+z?OAG@o{lgDy~l zP|QMbk;MdW7xB0ybvE}AXQk0b{oN8{GVJC)GFUuwVaKlcrh-t(m=-VMMI%PcuvJgg z5-~@B2MbP6T!t6PotYcziTDTLa2+NI8ad*lu_u%w1l1DhF?MYaBO|>Q6wEAsR|0FS z5};9~y`#v<T*YCrg-K%(Hh74i#aY$d$KNyvz{%<4-2k$bM_$m=43=iyzX;#fT5ytF z<wXc{AJ*?Tdct&Ea=ay+h848U_Kkz46^>BU1*`~zy^0%a;xtc&tY8`vAEoqMgWPi6 zZt1XAT&SPDfExgLP&H(cb5HW@hYRFPGf!J-j`W8Bq{SM1wAlZlQ{UT%nxKXst3RUc zeViLz;)$2wmzjGZqJ7eRnk{xK)Y#w=F`WPETQ!_so)6?C0CC(p+))!5o|**~$oMHx zzaRjWBs>s8V;xRBUae!;7FO+rCfAhs5_T$CCNz65VNEMKE{h5&L$iK*|8YK?hzWfC zY}!<N8fmcGp1=~|yBER&xHt)0{5I?2N;NBJ<kU^#o=BCa8v+!`N^dAZ8@;e%L78{o z!p=pn<b&i^2`_>sM7+8XhQDM8i_R=0F>t~IL4a%m@w`xJd&Rxs2j-2uZ|y3EPPf51 z*uBT^e{h@s9@~feycr=h?S;I%B*LyEvu*jHw4v8A7H?e#6D7M2)l#gtOgFw(G%_EI zef)>C=h?MtDpW3qX4mx=QxBh1)Thx*lOeTd1CqeqC#?&4F&{|dJVCWkoX6fw1^eVz zH5_2vIq<qnCE)&Bctn_U_Ot_*F^C(T9U@V#?ls4E<pefHnUTW>2Z_E6_HLg4!BcjV zi}<dnE4ONJ=E_L^>)MDo8Yop8O3>pcIiK6g5aJGauZWI-GW7B9)N)YdjDtX!@UE5B zD}{MM#3fDCnvQzpkP+w4c7qAE*cV~#a$Vz#D;}myi33G=P^0zetGuW!a==?>h2#tm zzsL$sbVb5S0%JXWLj^9HcG$-8-w>LqLeN&LI<zkE<MejS_5+r5o;-4N4nkd(F+r^O zlf)vTAlriI>m-)J_l#2yq%^UCi&q6sd^#pi>4>|($Cf2zoqkD*izTThvE1ET4~i@; z!77>GSw3qZkYc#qU1&2vsJ&125QA^O;L#mk2c7Fmr#<Ok?&7tqG|g_>F0Ea~pG+G! z=d)-b%)$69Laq;Q3|W~-nrgDY*T;AvX^)}n%#h(lBL@!>Ms5o|an7^PDF~5_<(xJ3 zx~PQ-e74T@)G}#nPL&WeJf#jrQrpl(2v7DJKRo81@jr7FEspT##DjwiEs7#{6-qo? zMm&qs7+e?w(0V+D)qDOSL20l=c<yayot`D07J6@y&G~SWI}-RQcTKLel!f(NUArUM z@W3?bkE<=!2JiHU*vZ~pYxaLwdk5%Dwtd~ZV_O~Dwrx8d+qRSLq=Sxa+qT)UZQFLI z@0+#u+Bj$Ld(Qaomv_umO}+J>vuciHjC!8=1Ad^7IjR`QiRm<Ry)6fw>x>H~o3<^~ zZPW8^aTCR=aAflR@|0nGvXP)-t-I`k^!?U744yx3Q`O0A)SJfo=-cap8$o&OiRRLp zB6@ycS0jNJKI6+OA9j<b5ir`d_>U19xusxsX$x@ShBr6L0p`;2XB;_cU%&1>8%w)P z%9#!VQJ&964XW(R;YSYh9dEB`QGD`s_}{7s^$b}>`FVK!0-v~p;zLuaRZ;V3*sz2I zAkfk$1n%(&e1Ad#SDvaE9-lKIrFoxXgcsYiyQZD9^M(=(bWN<T*&o||F*DB_=$)uW zHR}u*D{#i=b~rU#DWgX4;}fyxLR-kv<%@;Pxd6ZEhq<2bhrOdxfkyWQhOmdjTp8*v ziQMK&LQ{t44{fEmcSXm(kjyW*3U7(r(Kg=xdIfRG0m<SQl?*>w;025avz(GZ%!bq4 zYv|1R<OG#$^W{Q29ge;sgL^5R;0f*yYXrYAq{EwXsnSeb2xwz04Cy%gWtyz|)asOO z7;IYU8TszOEEp0}`I6LZAWVCgT`cL^;$_t19k%P~Sh9F&<k`A@o9$jwyH&xRY<3R# zcj~~`C1tCw0i_E916jfPwaeY8jmdrDb@obyoTBK)D^!CYrh?`h&DFs7O-WT@Ifi+8 zurk9E_~tBKzC#{nVO=4Tj-&BtFs0ThzP7_CuPvD`3h~s@R|&U$16$4PK}^+5Zwy+V zi))VGlZw?ys7YHzC<`ZbfW|lJ`p~i6bnW`@(Z1|xu=pDoJH^;(Hw-gzOb)(C<oKRg zHTg>H_cI-Q=}<%%`Yw>PehvXWRFGVmNd!8k(o3!OnVd97#BZtubg&@D!W|BRx>dNP zZE+IX{uJF8g~o4?&~%66ousMPVF#~;u+wRPa61^9kha&k4ptOn{UP25e~AH}iO=T} z0mt@q2ziQ8f>fExf^3b1;1fN`>Y(x-B#%z-%k=LQt~QbYV(@|<XC`ljG|>Rh&r=yu z7(}|!p>k!kYk-~5f?OaH>Yjv;JCMx`djrj50WYeM31iyYypCbi0|ii42Azv-p!Mmz zKWp*q4*J*c+>PM6Pd7Mazy`&Hl^UUG*?=t56vZ_qvFk-P+8pV$UtCP^lr{UTvh;nS zO|jXn{24Z=lO+grr;J2jt9c-57zr0%0b;{mJ3p-MBHgwlp=x&nF9YPmhvUwZG?BO8 zqJ*BoP0}->H;(hTT%*0hdiE>fdj(x(eum-NBRJ*j$fcuFokpk#M!z(P3+72RJZ#V- zO<kTk_1Q_t_Vq-RE)@+rS|Qf-FYBuBR%H@<(R>G25fen-*1<dPU<IYX{U<B^IR~SQ zsCCrX_BlC|)y`z7iu@RpN0%Mug+Ew3j%yf^GS~==?OB1Af;1I0&!Z9TGr{hrsr5Xi z;5`QMKB<_wRq-O!f_UIuqb$-{aD(YTcfuNYG94ZSTh&owSt2wez52J?t_y9zsKvpf zR85eV$;oAI+$T{;Ze)Unz7zHuy&)kM*`h#tpmaEZEt!B}O0xK&61~_H$>=C^Vpt#5 zHJZj9zC>ur$Sz8xen)qVcT&_6smme|YfPQKl9VAxN18}Tq>;LcQ?<mY6|d6T!cijz z=}nn?UBHHthUPcGz;zvWf`+neW!$7sWV^zGj0^XvC-W?IqwN|J6lW&C-s^Qy%s@sy zem0qUpyfDkqW`G?O%$pULdx5Zjuh(AhQEk~l-kW8e*Wb*hM~TadtR*wcnQt@jlKO0 z-}Xp6o@@R^YJg7GQdw6?ZE!3TZD-U59`D4&`Mv`t?a~}$-7m_pw&GLp2#shJGoHL{ z3xRfl!QDmTuSYq~MT|F5SxVr#mq*I!bDOHiQdr6`FnRl4O}f>E=85`3=;>_EzTt)_ z8MznL$OiW{Fa|N2WG8upRZtOlShye(LSMCFW2-M?z0v~nVGCo`7rQX4AMJwZlepVx z5rwYT(TO0;0}6Yd+p;@EWtTxbYDm|)u!DU~@GySO;HvO%!>+vCt#?zD9`A6_MlsfZ zLMf#_<SxjfEvdl|<srLehq|er(3ZH8AFYT%xvi1N8Q#Lk@9uGRs$0A6Z}Cz^IN2{A zf&4i<tanAYv-SLzA%<4@QidWE=!F#_wX2M0lyr%?cT`S6EQiyAVpIcJ2}?**u1Wog zvoRaRDa@!jMSzkri*+h%c4SsrTmAm$<zs&g)J(wPZY9}d+JIYq$ASE?yTh8OW}x7a z(MV8js{vL(z9G%GyQjv91me=G*M7Fo?+*Tf=Bi6eOlLBAx@iO~E5qf&rEIQQ_7y%m zqM}l0&}!VAhXxqS^%lq$aHUS>j*{`dwYzHiF}XC7T;W-M29KO!L0ypwsU|Eny){bp zh#i>|4t`Z0&16dnsglXrn`+fl2QYT_;X5JArmtt`jmM*v@=kLC%1#lc7oXFlP`(i{ zZ7G*s*yFEy&4u_bhrlPQY)}n<2^Z7)fgfK#a#e#FzD3UlbEJ=9AQM$0Xl>vVZ$5Cj z6OoMLc=3ugIMlHwdQm4erqz%}Pi+|-6NL;wrj{PuHRL#h#$1<i-t{*HP)ZwoTlslD zxD@V56H#?;RmqtL&sJx)x+@xeN>#Gxlk7&jO4e#(vHPIcp^myD_PH-QFX~K{D>g32 zl7E;!cEAS{sa`tx{$4@xt=f&SleD`sjPf^I$9>zDeRX(X1r?&AT&M1;cvn(kcR6h+ zdKlYR%M0yT1(>sTz4*u7cx7Vx{-&EoC&{3n`!OJCpxv<(jVJZJv{2{21SWZ?oBGrW zK9z?uV3nctqGb({1B3rY>t~xFeUr*ymW1j_yq`aL<sjApGF@35z8Sq*{(drJ>uZLh z$;yej)`a9EzO>z9CrwfX3>yOa93Qk5^q`36`Mi?T27sc2)5C1CgGG6fxTYa~IfJCb z@T_)5p@^Dc@2!^3XNdGi)T!)4WGlx8#uuX*yo)wYR9}<(s#S9jD)z(VOSg(a&vQ05 z-;;S&&vV^@qwKJ&P^Pk^a4g>E4h~B`$@$PkuZuB1AFqwoGT-Mrli)KJ6)v50Voe?y zT@fi(@#t%;6~xw&&37@pHG~%1&8r`NfE@(5D@SpMJ2H&xl57V;u4Y1m$+{fQPY707 zMgzc*=nN!zS38V%oWQU36+kQ`$8|H2{SYAx<Wfm3($%zFD&cm7FWuw70s>qjm|c?+ z<@|Z}HCCIDR5s>Y>>w?pqK4t`g<z%Oz#lKy;ihxlZ&*Fl^PaTe<+xC2z{)=%n@TU( zF&6~w-jn?>92L88cUB`we3e{=#pRSW-x-><DqE2jzFp$<Jemm&xLM}GD4IHMY7O<4 zcdoS~G<8-UP)D6=(AbIt=D}gwr4L-#;Gu{tIkD}Dk#0cw0X<Tq|114c*0%|?E;@#M z(>W$q6xP8Pah{`SP5MsRT&JI)YaX&Q(D1R+F1`RVZWlh!s|Yck8JRVdE72`Jh8Bz~ zK~58vn$65$7F8`$d!b1KGgn;D&Weug5k{POH3I@Pa3@t99uZ+LgC+hwv*zVk7B5ZK zi64{U;*yd!zJ`Ho-QPsD8gEExfHdz|7?zm@GvM@P1uZ)MA^9rz?zq^>*#w#@OP)GG zM|68mo@aGAs7tI664RQ(1ALPH0(+&I{Nj8;A>AKx`4-Q*-z#Xj!?#S9u~03n&-rlJ zXH}((E|rkz_grWU9`gXp*Y?JXDrh@u)w$(1zn9KlPq;L><8I566Ku~R@ASjjGRui7 zzA*FJn!uk$7ElnC4>w)H!&ZnDhs+i!p!nenq4Qu^S4HNH{FWPg%5->@8LiZn0Y7M# zmqmKo>VKAO4iKMYe-_2*e>$^#y$QW6m|>h81izVb-0FHsQ48)Rc{uZ*mxij4+>C$G znjV%BsF1I|Afzy5a4U?{j*twgI%MHmX3%Lhvss)h2Qi>ZHXkajU_k(#w`@b`=+WwY zd>Q~r0w3p(unvIRL3O3_zFFZSfm3-8XZ_r+VStmZ8p`=y=ISYf+KV;4-;t~=uzfv| zn-W&ZgZ=#RoP>uE#swkqTwHVbP}o4S0~tl;lLr~Lu3R!6QQJyIf{J<d-esJSd}|2N zFQAT>{qZy^U)V$tv63>=!bAFjA;ah~^qs`T6bMfF{#J-jf$N?-o}EGMOyw;h_;$|0 zRLN<-l)RK|+NUB$YRJEfySf)W3R_-d11mXCdzYZg#tca2A~LX*oh_4U&eol_051`3 z9$Df@n85C91MNky)<4R&w&SSN0;AyNzru4!>Qxzl&igDMdXVw@@<cc>NnNaQ{8kVS zWoa>j(lOYhQd=9zG_)BJ5xaEN{TT!|W~rm}ytQ%seSmA9LSxsHMUQT!E%Le~5G*KT zS<1u&r?H)7o_77t-zS_&&!)qq&tytfsP!pdn%;zAQqT`0a`H0CZfK)mkutcV=#pW_ zUmQz`*w*U33V}XD;f>8~xqJ8J`Bh6q<Y3raWmoB)Qr6reDY-dJIIMRbzL_dRnvsvO zB0`a3Lk=Ao{QVIrGIJfjL9Qk468#(b!C;v(Z@{+IZeO=7yE<6rNp9%lkHc&~FoD-? zHiBx^c1=u8Ek|LcV9Bdp$TY0%X&bSJf>`r(@Iv3xNfDw7D5B{M^lO#_qyyn)Gh&T5 zJh&f%O&MDI>H~1g0&#P+LDiU6fogP#Q9oz&p+-E=Z?y_kPOpRbFWe<WmzYMY&QE=c z6Rn5hkIQL*EUP0n(?m0C3OG*`8uPxDzE^!|>#P6FXh;bhw`po7cGkd7#SmTKUB|@Q zdDjZBJKhbhz<=*}I?s^P4En1*kiAy%T<CMjCm1ezYb0cpHH)va$;eq)shko^?Y+EK zVcoH6-yW$yQ_<vEz9lL?IjuH4Wf&6Itvl6J7;Y6q=jceKt@i08CKYGd(APOUlNqsC z+Fb>$C^3R?WvaW@SoeKZ2W&3*`b9D>=JQl;`VK}F>iSfFX(11CliVc|-J3+P7jZ#h zty&X|>{U!pKV&)Cz+nRy(_6$Sx$DL^nfA%<7>+8BmSWgCd((gb8&w1QYI&HRUcu(3 z08c{hT1i)m95!3<(%FkspJ-9r)TP{ls722J-C8A!kj2=*p{09vUUYL|o9$3OQFfbH zxuJYLCd+C^G=hm)zaMa3-$xaT>Yo^i{PgW|*l}_A!WMYBy)L}&VbBeo1;A2AFBhlv z4&;4t)L%S3qCY!hPYQV<SP4bfsBF!eYT|gJ=-SI`htL-AdXSGo)h-&B@I(&QXUGUZ zrY^e^BpjT}2-g&HNWR~=FfHpDh|L5*Uj0bSm!!FB-Lc2^E>2+t*9*mxey^Vqutb#7 zut7T#yZt8C6>CrBi)^3K6+B3U+=i=CXyCAJ!m(h^5>22w=9sc`4XO>Zw<9o$WWR<p zdpLF;(bS_hMJH7?_+5G2vD!-6aCxF4BrMY_w`zp#VTC+r6pJySOnxV?`~Iu&-r6ep z(@89%yuT$vUzr;=$+-)U;PcF?j2tRTw73F`A)Lt$seb4P^UHSA_l=VNDqcIcRO+L+ z@O3_J9apZVFhvgA;FmyHpwVJbu)xs@vDaC(!p_2MEZ-3bJ#j6ZT=l&KL5z{zl%So* zW)oIWk(Vb@MgD^hY$toFA3XtvRh+UquSRI~i2RVwlFQU6Ww!d67_WISwuV!N41*#- z`|g<U%Ose@+U637sPU_74^7b+SeT_)9$NLx;Z)yzzO`v$Tl%dAMYIlU3=_v0T5|HL zfXbhlCtn+X@e$44dn!<8Db!vA$>|z^eOR+e@pe`%QEfY*{4Lq0hJXbv+-=MSQ;(eg zUh<Gs9mAO6q}YKCQ#=@-9+yvtW54_4gJ2+tt49v)v$H<v!w>7a|0p(rq<dXDK=JC^ z8+txv;}v_Iy_%I;YS~53I$%o3XRe7k8IIj+I}B@z<qWP@wEVroy73dA6vEFHxTMfp z4Ob_<hD4RGcb^wvW3;F|hKG=a9hg1j)>tCV0{AJgA?$kxBYX#z)0{ygM`ezfijOQq zjB=EGaO=JciT}0@R}p-CKdofp6O@T3^;3^oAqb|#OdH@%=$$SR@p~Hm1jp7_qot+A zg)YrYzSa=$%d?n@>^OZJ*MaftZQ=_Zm6ScrF!k_rciu?74$~@Bj(1_D30Pasky0XO zbL$KA1)|NQ;Ag5PQ?s1HYsuN^oeDu(fFm5gOqkj)k3Oy8Ext_Cq=|8YRJTi5HTfqb zHfLmc+ZCrQe4{S99GEvfGkfP?PQ_VdFMggUh%Z7kyUG%Z_BmTpLKjVX2kTcdhbK%5 z5ZqqQ*7$l>hLDp)v-ZMP$!w%Z0!+2?bn&{uRvd!aD&XP<gjI?1VKzl4UW|axCIom6 zb@}*03fJ>CYaJJgPOj>K=}6b9fkK+jd83p=4rFbJIc_}6vOR4Flb31%E-JaYZN~xz zFp?fa24xSDuMhLca`{JT{Z<CTKf~aT=l5NgdH827lZz(COF%4V($1fX#8OXe<Mls_ z1j~~ce^*4TRoXouMbD+JvYm>AgvVt-odwx;6CMCz9*Y#Uv6z<RQ1Q9e;^HseB@H90 zv|CAOJlqNwd$OElyYfX<LyE;1GKEbZfMb)yH}6&x*e7X<hYUhC0~l|X`MNlz;@dAM z))eWf1)QQcfAJwHpyPfwj9z@D;bi=r_!hXZ=Hr70f0~T|^^!~<s_T~@yk+80Xi9nj zSA#=_r2lQi7%sRYn|bHb&ZIzB$i;{~!^ue8Z>IXSB%Wj^wb{9FVW94Ye9&wz{aBmv z%j`8x)5It5T#|?ip&MR!TA%4qaK2g^zdNhS9Uj$u;|+vowk(Wr35%d)A3EA&rkdF= zI-e0O`TDydQ({%SgN50`5J<M-Hi~CGdu@D$D_OabMR{)WDD5_MD?57;(z7|$XyS*o zyCM!Bsjp1}-&6_#Z}mc96YnH7+LwH5e*{0OL5fC?M!?!QmJ}U?rWlA1vL$C9Hd5$W z@n)wEyo2x4y~9yDE}FpQP|R>Bj^L3>cM=m1u`jcLfQh|KC>WK^BKSu%1qgeBXh+os zKL6f^dH;=Y^*iL#z=D9VxEVLLusHS8Z;+B2vAcg`BWL=X)0lvV2b%tWX(RvB>HW_( z@_%K;{F9BG<HPu?1Whkw;AHaQ>?WWWl~53o`vS0$EB!lE4AY-%89qJ&6I)||XBV3B zkCMOKyZ^~W&itQU<o|lTe`_LV`)3b1Ga&kpNdM*`|L~6kOympzqbz_M@;^XgOs(ln z+>NXaZ0H?a?3_)E4Xqt5%*>tt%>8+4Z{TQRYi(lc{3lW7&q5<R8yf?9a}RrSfXDoA zW^^ZO11EEOPZLKw`v2LNZt}-vY%Od}=>LS!m^io?SpQ`;{sToL{(phdr~_~`hK>eC zRwmAWg!Z@dKZE-_@Z&GfFumnJLp}bxOZZ>B?SD9f|Ha$>$0PA^YqeN80K6Iir{yF4 zSA+P!&ocpdF&~!kzdj#%W)1+)1&}_<{>U>k|8e|i_rFaa{XY7$|Lq7k1Ke_U1`dEL zn+afRXCYwYVElt;!_EP)xdZB$+5RNreAv=C839C_kM@AxAMF5V%zuvRkKP|OfW*iE zSZjYY17!XT^{?L_`9DGhOvHz${bNEtj?4^zulX1TApghEKJtKX`8ekQ4D*l4`&<1- zIWs2{AOZRTrsI#gk1GNO@KN`X{>c;nF<*bJs{g$w{%?pIdQ)ox#(x;inVJ9XV^6@$ z`giX+Gw1)b2nbmIZY>9l9q<_c|GXpsn*#hj8a77yKNbjJQ-Ob!{oR@WkLB{;J@|i; zoc_D-o?hiocn&>aDg6sDhw+~m76Io!uE)vzSIr;GjDYhW^ZD<L`v23S`_I<=kNq0{ zy3>ER=Cgc&vHr5=bF#62>;v-eocRo_08-Nb(wU!RqK>n=knNB}(#+oT-OJw14KBwI z9Ls9WAGB!;acv#&L#j^D^BsJ#`;POmjXcHc>%?2CS?jBKht;L#X+=ZX!>p)qNofy_ zDL5mLr0`jK%Cg4NGZ3=WPV1TVCs%YfHU}0gEGTirDNNX!I8d(dPe5nh-Z-BuqM`0S zz3d(y?3nEe<^f3voblrHpeIgz@`MWNBD)6ew-$`lSI)*2fI6~<str6~09*OQLQtq5 zT?YXpFg5_5{l17P_sJz1WoR1Bc))*P0-gaRjSECZ09~J(WuYs5?`(|l)5h1paqY9; zynE1&&i+zBN52=0KM9bI6S%VBePWL0#42L~)r13edG5-&&l)b!v9^x)Yy4X9yG{8w zD||iJs{7j{?2n3$Fy<koY*0oJ&Xr$>D!5Z!d;NrLzg5L1FwH^O(CX@{fq<6Y(SW%n zzpo3Lmg<`+OMl~>8i2ZU!!b5{$bz04_(j`YN>WIaS3LN{Z}sw+O@(NESbl8qTYja> z^!GRbp0k20Ud`S84Q@r(^+@FCaZ~*AJuf*vgR&pi+6-uG>j3BzF0LP*`BWQ()Y><M zvrp9-m_xXq9D}jyYL^7lbBaD?(_Vuo3*$_`Ybv<He=6gAs#@9{`U#@n5KM>Ef9CcB zqx-}d#JTnj*8@iX9+Xqa7vkwtIU@HI|JXRVzKiQC@5DH~iM03>KJz;jjDy1)?v}rr zpY9F+7@SEo_0WYIXz4>0*sEIr1ef?3yWrr@uPAexJM4lHq`wJui!<-+{7Z-4$>ctj zt=ah>sJzKerAu`|c}`RPp3*Xxo8JT-FL_VP=4ACnxszfAbd`C;_va%l@7@H(Wqy{O z@+|y~$c<f}y^IfO!+3=7R@U{EV6J-yA%IH#-EWG||F=MKz&$=>L-jLA4pw6qlBZVP z$}c|!xFLMV`Rd;wIWD-rySo;i5CYg%pAiBqo8JI+i~NYC+Yi{B*;p4}2~_%a?cOfQ zm9=qp-u+TgRv1j-k0PLHN5Qsscdp+zO;cMrxctx3e{VcyBRq92<G`-N3lO+PQ?A?) z^{Ws}QI#+@_lr~6wW40bl{bqjhdb&#YD0K-E76q8ZWsIarQK_;zt*bYl<V~CKsSja z7hSp1H$WXL^9LvI1s3Ui*<DweL`Pn~RUwVSeO+V+3SP2_xJ?pYtEQ?uH6n%bd<Mbf zhd^*rIVNR&j9#QL@PySq^_l_paCa$Cwy78Lx3u7-oYx}(nA{x$y<NOw5QDE=sJaKK zKnqeF?qO#xZcg|RNV(sSdB-v+l|%wi9F8!|oW~N3kdeM#CPsMbn(|$2Y*mbP+>{T* z21$}GNX1^@{;~^?nnAv>rCkhC(W<!Ld(?{66CaTP9c=Y`XOtEaUU7rTkT(h#o7bY0 zJT$$fz#T$V07{ha9kMspw>(Gqw4;LO`z&%+*XkXZCkY4OHmaREJO2t;I75H(%rZ-s zM8H3OoroT4mDo5c-_1^vO%fqCZd>kcJ0T&bQ{h2=E;&FB%AcF5>veTW>l0ii{-tY6 zNgn*}PwI~s)A}oKX}R(yzgX-m`U(=qd_f9)5GnQaX5)pXKQq_Su5>cR#8vg@ZZoMx z%3C4ycV*DkrEPh_(|P~4U2LidOUfnn9_EQ+vv^yfL|beILF|UDcH2oIC(vAY>+&$5 z9PNi6>H76tCNB#;J_o8wA-JD@4~eB?Te5_?KgvS9Z85b<4j{0zS$;1rW_U_mEFB&? z*7V>T@l3E|^1y1Tb!?lptfV6iNRST>7l~blR}A+i$f!TqfAP*ro;;4(kTHp{w7SjN z26G=S!nqEm<CM*)RS=hm+>sc>cs`|+{f?Q?N^$i{9tpksQbY39WrLvIU2>^1$H-o8 zu+wdKt4DP^dz1Vsaxjn5UPQ&yO$gBj%IZKftx+t+$?|9A!f&0fy$&d<sqEFs;}pc2 zT?duzeYC=R@9rx7&bD6`mLL{{3J;hl=l0i7eJ~h{lRjo=vC<GLj=pMW-N-GSM5VPs z*{J<bPAnHtR`_RUp#%-XfLFxnN?8f@Z(-?Jq7$zW0s82Tg4nS@Hqo><wcX@0ylogM zX{-hJc<hfJCwOT0iGgz&^)SvlUj{d6?s6rF)}ZokSMjIjyT^v+Gi<IuBhKY}Zj1xP zB3kMDSyY1Ii_`nl9r|pvt+1a~=_)wTmvau=C17VHpZbPyv-A*>dktZ<A^S$=XlGtV z@iuLADS_@_t2O(qKwxL8EZfZ+CXYWZ4ChfCEj2A9a$J(@G4uUQci4Moh$@xv#wbOS zS)$-uvEE52DC<W!XbrxGyDb|^%uJ69Z=Q44p5T{mW)GV<kt5o&1c~C5%>VK=kT{O! zgpgByjeJYRbBNs+9k|4J{`!5Wp7krm!`-a~=FeTs#C_PFogAI%)Tp&D8LJ(Y<3k(R z8h3ez@O<JL5p$yY+m9=ZOG!SwJCoR9Wi{sx3Oe`<uc`7p1+FmslV`+?CmwRTE)Fei zL;}2mi24x9zdZCRefn2Vj9TM}a2mjKUZ#9+2Pc_!c+&K0?WW0PfgLzo`IutC!a4HR zOv*W|)=#K|Nm9qU?V7eX>f)O(&jrf4Np$q`osAMWwP3V5WcqGO!{<jn(-d1(^lZh# z<Px<H)-j)?Iuv5oH3$A|K`5CZMqV%ADCLpTPc)-Fm8ZP+jBKGOAyvld6ujJ#COQ{- zB&JSI+zH%A@!p~*zsoGh(8R&;D#K?Yb|=ilPPR2Cu#aqdJz^zqe>>~N_LBo6daCy+ za!FW9MH>+C8i*cx+6iS34+Gvv=Bhc96S5lB4<WV`5D@a1De|Jk5*|L#!Iu<zb*gS} zGk3wkmrCmFGfj+R1Yi0@;FJ1=;49Gza17@vqmcHj7u!#|`Q0B=elc@W&|cYDDfXYx z3y1oF_^8w(yS4{9_$1^P+xNYzSV>*fP(@X#*7r~Nl_MEJ>m17iw3?2dPSq&w)bFjm z8N;XvyRwIg^}mPrZV<6j^QQU1J?u$uT|p%)AqiiH8-;80X=0vF+o><vI$7A(mNcE( z<CfXyc3xBLC;Lh=a><`#y4WKZTysVyEF|@`BcQB<+!!0N_j#WCoBS-OsV?RJd|E+r zJKq1(F=gv`+8H)(NxYdrTIIgNxX4sDou2}0&}*md{3zdI-y}rlGzY62*u|E=*(wj$ zU`&DSEpFguoi9rL!Bus#8LIZR<Z?ljU?ZKo@ICRdo7Chbn|N|3r)A;v=yDE~%S7w& z)v&_30W2SOqQ((Nqw$?GVN=fjc^Hv1I@FT`!`PAM+lgQ9nY0q>szW&h({~B$P9m2k z+@Zc|st8%sV+=-VlhYg4RQnftr7tjx{aa?-F1Z@g&`3`*B-<w<*A}rzd+K(hc`)c! z;u=|7SZ-G`mEK08s;?jgHdrrFPXQ@olQ@SG0qe(A;~`4OM7olZtKSv!^Yfo4M#Zfx zIzOL~2R|ViZOCZGq)hXq%xI+^{=gupQE08z$blj_BEdeBYlD8BeWR#a8@)ndv8cI8 zEqKTuAB)h6N>gUK{KfL6Z7@Yt3GhGELHi*TjzOm;GhBv$$1nS7#?bn&Hw~w9J^Uk| zh!TEqC30g0OO-&#tJHQv7$OVhmfVey90u8p;}>ahoX8Ah>~42OGA412^I^nGJ_QuH zX!7>Atq;HNl{Mc?H*t&=7gpDFetliMlSEVG!zcR@&d8?>r%XshG%=tj93?;9Ap2FN zd7TcY?fTxZZO|{#ecfr+;_h{h<9D~T9}twEE2eyVrn?wwp5YKGTXLYB3oVW<$3)7O z|7orZt)InlN)AUMPDoRwd!$~Li;tj0uL`(_zZQW7Lu@6n2YIxvJE(zKSDnE2ZQFSu z{$+85T(uo#9aCTEXtCoLifAiDX%}B5D4j>4tzAmao7U^=^@q1LCGWb&2mH)teY)Jy zHAI+xIo%{_V7*j`ms6x^%Qfgu@FtJCmAY#ws*(d~;=R)fxqP5~lf}MXeC4an0qYx0 zWwdOuRKVtu?|iB_Xe2&K`>0Sdm413_pLYt$bq$bwJUkZJt+4G@x!7;DH%iVW2$V_6 zHmYTJxXy|+!#OKMYi4e+teX~mhhG?)yz8Bom!~i14b1q$vB0=_8=e;Ih&&vBX?!yw z5)tdi7i_I!4c)Rd+J&A7f+BlH9Ika~)GE((x)ADi+dUo;t%}&Do<=L?rn*|%mn`@O zA}A(tcY%D4X@<|jgW7}xZlplxnH6J<19f|nycbV+CBYSs?BpM-@|uhacQ4Hp<M@EX zf8=aYu@Js=^i5i?g;<3bL0#qN+$>7u?(yjh3hgi0$=a5o+(>?;heL!eA*P1*XIV1Y ztdRjVU?@tQ!!MeaOXu=BA@sT9KoZV)3&5(6sdd_7II>!Dc$@4F_vTPsC~qf;_$F26 zr|yC`WF`Etd1+NJKO3S^F4*iB5{cxA^A&v~5(53_Rh$LdJcNPY>#`UDdrN95l~>;c zwzy3#)srOsK-OdTo@HASY3{t!>k!Zc#v4QLk1v_nYpSwYpo)`D_Dn)dX1$sRQ$OIn zRbDb_C!s7qcWaXC-9ki`!wt!SX(8~GPhWI%LK>0byds9om?U?^S$|@2o73QWiX;u3 z>>vno4wX$-=zA69Kyt%^lbKjAnso1}JhDu5T?!y>Bh+te_|f=_tz^_DfmJUL#YZ2g z8P9jjM$19kMua@cj=a#b_mWiezF9f;7zmTT>8+K7vEL@()*c=usj6UZ3aK~Qk=a2E zOIgsVf&7&ds3FZMi`RN7(_M-%-PbT*%A9(p{k@<Ve{1<pS!`AL`-y^yL6+DNwgAh4 zxl2!IW(J<tI5!;debzCKW>bw<(TyGgt^}#oc%apY<GRrL=RqrtSJ76~#RhF@3EA{? z?wbi97=pk)E!M(fkib3^H;jX+<_!9c@t+ZujS)!T74$)rZ$FtdDs0CzPYQ!bKQs3` zCyptqE1l<55g6o4+T+I6Sf8cM7Ou$c*707umn1h#1PnQ`SD^I0kR?f~(9*ZOhN*z| z_xFV$F{vv^VKvaq2lybfY{nWpCEk=`JO3D{i(!yJm9EODitI_WZ^xjASbI{vVqD3% zh0*pCRRm*3s)P9EdRIO#vnTE8egJOl!J9)Q!puFL`t-%E5Hct$deh9OMC}w{JA)+h zl&)veELHS+vkwN^InFn;n>L;Eem~QPUw1AGElq$)WyAkTl59J@A|H}ouGmf|;%%=Q z39;-d4$ptpFP0$5F@i3`UxO2qjqt1$lizZ|i&MW$0a_shx(=j7Ej)Jml8nFQ1)Abz zRC}$alAE|Jm+EQpRrI$^h6!W@(Q2p-GT%!kktDg&=q~u<xtG;eV4$?i8y$S(XJd0} z9R(XRcL5abj^DnIHhNt1S_25C!y5VfPj((qQRXz!Ux~W0OXOPjM$DSKpL@;&jiTyN z-(x`=1im#g0RUzamOmra;krQE^;q++pO*}o{a#2(GgRl=Bvdp_SLT1jSyVZRVj{qw z$M0O-h`U8eSH9eR&$Mn_*)cDgzS6*lO;NmrFVCw-xHQMFgV=iNbnqMIrGFEtUQE&O zHCLm^j|Ig+veV^dcz2p;h6F?Q$RJ|i9wul4pTdaPXV$$6xYpg=@G=xh@s7_6vHx1y zt1dYAbyqb_iV-ima}h;bD7J<rCbn%%T(MO~{-Q^b0qqjsY;et-F$BzAmzn`Z@qSi) z<z*q=Vm$F)Ec2i(oNsw-$U%N*ThP274Dz~{m_a7R<RUy(^G+a%Z6PdWo93H&8A8gP z0(nIDm&F3k>BW47&(~5U*t&{M3nySr2#uhO8b_XRxA&yDxz|8pKP@M21ii}a<>6q* z(J_bP@SI-Thx03%z^P2C2?zi$drr0WeN_T?I$DB`=zH8VPp54(C1WN`#nbbF((T_r zF|IynbLuQq{gMODq_|y32$dDWu{8(vex8|AdPTw=txU~#=4VjJ0_z&*m&oAnaud{E zgUr9?VI>V8O!2~JGVhS-7(hR~)SX>yhAuo+GEDR^*^I<1XEqz(_WhdjGZdLMtUu$d zDF3jYylD>h*#+j{%+cpFSdAuS%!w2vxE8J5Nno!YDWnE63%Al-$XLt1k`9{FyoNJ` z`{ABoyMineA+YiTf+GMJ$hs3A%9b?~jwvNvi7Gn(oK({F+n5~|0k;9Pp^7x=0Fmao zdrv!&8vQFLVmcy-ezkVe1?bC~uNcDe#uCdpUrJJTczWLScjKvi=m(_BZw%IfN3s?v zX|s_B#IBq_thOW{=A?q=c>+WSwe=|YLps5Pexp`(50PH~__?5JHcwWe?B46fTL)JJ z;nJRWyZ)T4ilGkM6cCEr4{b|+NCX#Ar#4j-3)s>n3g3Iy&K71&&PXbpajx5on!~T| z+czBRgXs;-;?OHB$xBZb?AuZcW=740$tKc4p@qynZj<U2;9IT3C8ymtf;sQF+T%VX zDBpC_(SS*5oXm?7L25cW$mJQ3F|Sbs)tU^9%JZIAnakUqK~j{^WJnICW6m)}9VA)? zT!y>^q4Yis-;OEL>s`$Yt^~VSIxS$Se0H#^`5{>hMwlEaPb>ehd`?iw6~xocR1LF4 zvQHEXDQI(&6p>(J5p&E@kTJi|i8Qv~(rtW<v6PS8$3_%<<wT_WwmWI=S8jT8#~jU& z_e!a3!^dIky|o@~vA>K@r@o+ENo-d<2wlo4G=h^G9pyF*bUZV_)S1i#Qk!UfDZprk z+C?`4^SvUM4JL^r?fjl<H64Vjn_Ij789mSi^xK%1F6{#0y~`IWe6HjrsiX%lL_~KR z8f${g2_dO9?K70AZNG%iz%OStnKzxrmCK{jXsoeTn?-_RW;dCQNAm%{*ha{wH@5q; zXlxCIcT{E!u+c>ji)u|!K3_EQY5z=RknFmh_^zDo4qqccUM2=@68*MH`=x;_LnsMq z_^O8W#4xBow*-|`H4`l~R6#d)7#7Sdst`I5dDU+5=h^73SGELQY#BF5;uGTLQT=U9 zSk-P-=QrAU`5)m>!6>DH2`>y)4D>S_CKODJ7tqi~ZJ0Ov@s@t7PcfJLr`ku_M!lgH z)G;qm(2fXe0VJkB7;)0=`LaYd#R#C2ris5c#`nZ$h6h#+O8)kpPRFMyOS+4Y_D&hB z9sj+hc*OmkKP;438$@<=I5j)XkS;=|ydGC3CDNn(^8M%J+FWjdES6W`{!KJvO>=h% z8ua63&(fw+MUo^NF0;X#56bi)J&p}Eh|rN9!u*b-#(kw|GRfd-u68!r<|7f}GVd(F zwygd&D8)f|e-(I4u8H2jCAigHcl&J6IrDQ|IZ1?YE4J5c@sFA%e7b1U7mt3Dro|zv zG8Xz?n3fIso(+5Y=Y6ol0J+o%Syxq(20kdUG&Ny+ohChA^r@eo5Qa9yB#h=rnXaYZ z_oKJSXS*I=QF+~rdWb}t%bCCM%pz+`pgJRD)YLuSrz1jRSByh~G|mcnSs*(kVFZ&m z`h_h(8t*aCj~+bJI7581|H1+NI{q^O4m+_L92IV)xneoW3F~q12ReL%*<1}wAOC*S zk_#yzt9(VDbRlqCRd8*h3F{6R7ec)vZu?@V>f%{;x8vsZChqL`IL6&1vGG2{*DdqD zL9wlL`3q<yB3#VSnTKH`hu>oEGWj*RIR4ZMxdE2KN~GSj4iBiNqEbymAz*hAySp7K zd6zu`I0{AvLs}gwUH(ARyTsxMUClESvP?&MTph`%-S7GyB1hD?DjUDZUNYru^rZ&0 zNgo~MO2Z$K1$9V0JHrOotJBL-hC_{yWa|KX`&%nCo`FQsX?<oc0UZlCGwZ@WoVU=v z7E(7I9-=<Nz8Si4`_e!o-uw`>MS#7Gn#+DJCSgp`UiD<!KDzHnTz9dq4Rc-xay~Wl z3bRm=7@l+&rmZgaxM7?f3!zxF%V3ooonw5M4~f&o6d%(AwY&p#UesHiLCOtoHp+@^ zuQ$NRS;;!rsXlLlM9ZYaGt38V=`Mp#MI;l^;8<)lu+OqbbsZ3YQJGYS`wZs=kES1A z8z2=pe`#bnIa(~Ta$`yzgm=fPbfru`Ct_GTml?BQCGO@?Q-o*V%Vkfx+^%TZ3N=o0 znsRta9#b4k(#t{Vmc!lR3d=e3WFBNm9q#homBn1DElN<#olX2xW_50BO-ZAHyA%l) z)LvmeBU3U%%D7@h=*+ZDnuV3Fzf<UJH92uz<1QacCK88lM7@LT`xbikO+k}RF}`jZ zOrE}Eh`ggzFIBNh_1Wxw1O>1Y(}e@=B48&s{`NKuNxZ1nLzlyCQ^V=+PdO~^pUj&; z&KYx_m=+6+AwNSBL@7>hx3sd_0saIRY!C`zGw#6_+&q0NfFuh$sbOC!%|@He)bcs- zEUB{5T&wN7J?YREIxLDBB}_h>r+uNPjtKj~)PVJbVOvDX9YD2|AR^j0;xY7e?;4p= z=eoZ%J0<_@j}Y1RRbY##K?ng$+_A{jlaYo!09<HRI*dx}4Q+%Ht1MlP!a)RvobGP* z#nTDOd}Y&mNb&A7eX4q}_8=(Q8mX3;d?N7Oke?aB`@VFzqDq@6d~EQu&STmm86Otr zoJ^r14_y1GZ_Efbl39+d7CMf9RVN8pij4qO8&{Ah7@<Qs{1><{ziL#mZ{_tQpA_JO zU`O-1@FigkyirvgPFdcC3@L}`g<)Vn|3Y;dMHcmFm~QyS{9T^sjK%M?!%|@jD^90g z<VCDW+J)&by9D@<v)wwGCgxnRjJ{A2TCai@|I{I1TP@UQAX+v<gY>+NGzAh~FMmEV zZj^{nQI9y=>^XGsQ}CyOTlZP}8#v%n%0-VF5zdXas>#n(`PS7-&uYx@n8}c0=FQHl zE=;xg{K~aW3=%=~Z03F1(A1?7pBpRBkI6w@`tC7sAWy1b*;x(~oh4PkXd4THFU>{} zU|BFcRvR(o*^6b@vQoN$AOkQraYC2X7=9foW0znjh9((-0kN;E@oc|Bm*2@G4yt5? za-I9IxZz3*2TF!K@E;{~G4s0WXzFWYw1}%MuniN6$-f*`?@8aUBuA389~lb}dgr{s zzC$qyt(`uovfa$h-iv<~AZlmgDAFiaFTCI+5CUU1E)(8ETPvy)wEg+$bonD{n7$R- zo<XVn7LWHNU?CDdU;kTB<UScM^HER0Y_#X59uwQSP*u1=z=pV(d5)VL`yp2p_fMH% zN1LWc&9tu^zj8txnU>2$r;s+?cfUin{78{hPcw9`ZNCRzxt>)HtXa%4lkcERE+kd( z>Z=Jci5!Z}^LqkPc<<@Fgmak=B9BSylpoP*P{^8k3g60dFFT&!CWI=dW5mCoFFx=X zB3np{VrMz`F+p)qH^^TvWQG}R!7d2?*|CT_b@k$;#q3e_lXLu1-8Z?%*ZnR7h9N-& zelx2gPvI~%kIIJGsR7FIa>ygIFHPb7$H6B3E(&*;;2MmXf#m^E@v&@23si24+T^7M zDOwq?YN(%Z&LvR$v{%C+m9B9`@FSI!yYTo|p882fe!d!4J}8|ohAZUW3a^VQb882N z{i$?26kYkPa|%>O5$0o5aS2qjX$NQ4D*FQvXE9aCcv^PTQoBe;r6V3!?cF{Ka@u8( z#AwmQV4pYN`n0BJwq6R7_@4BwW3|GoTyLyj89Xt06CJ~jFBZy2tpU13;L$8-L19k& zimY9wv0?X4iL<4J2FY2jvUf614cx<Zb1Dktj@B~AYYV`FqdR7uw)%`~5SiD=zh3kS z4V8@yLId*?3UuPNBrST~?+7?!B|=p1e%S(<@S6Y;$Yt%Ssc+7Hj+2><%!%CK+g7}5 zeQiRKfAH5pUzcCDRMsdvW4I0I2#t56CkCmUlUCfeitELV9~u`yeFE>>Rj>)KN8j{; z^K`$rm^Y8D<yX>o$Vnphmy4g^jJS(AS215|{eJEN(qfb7j$_*jm$sETmfXdG@6jJt zHk${5GRp+s(1ns>b*fP25x+NeZ8!$6GT&S~9yj(z4Fuox30+h=q-ZZTyG(L7W3$;^ ziP}SvLde3#Wl@VS2obKb<6aLmdXj^cbG&;@@JspUVG=OCrW!*Pdkw>}8=D8?h-3fF zIVxfZz0F1E-1zZC1^TmTol}JB-7#biz1mgHwz)Y=d>XpQp=f32u?#Akj5brsvDF*< zk+#z4G5IAer9>}TiB#zTho)cjd?PO%V3^Ry*Ssnzv=8Gfpx&MP-&Kc(HYo#sj&f}U zm+uWrM2XHa9f0&CVv{*waPeO@il%vNeOjDAa*eye8a>0NzY&7yMUS-l22p3sa8=2G zg+s45#n#+Q`N@2wQ3p7QsR+I0@P$-#OJl#z9f8kY5yV+riFRfwrm8VZ$}-mS2BdJZ z1}&Hv>8u!O<zeb_2P;mpl{1%^qFR6uGlw(V#_Itq9~=JL?z}{~X{+FtS#I21t^4C) zds1V{5sn*Lh-hW=Yx7SGn`5lo;mbE}=LB~enNlf@i5=qS1GgX5!EQA}^PYQUF_>G* z4gKnAIFwi-Ry4^ejvnBY4wr{Z(0E(Paw+HFx0Zz=6$3maL9cVy(7f88HQtJ_4k!6U zd3s9u*I$Nb^G<oJX$Q$X9y>^^Mp(&h3D##T$2wb&ZSiQYMYf{`5!tPEbXnSFc0x!9 z*moTy_X9C&={A^XluBODI>e82Z}<GMsk~t9dSZ+66wcbR)+P=*4z@b2M>0{^L$6a8 z=)ycyFTQhMUZccS?Wc$nq!xxrizV|G&@GDYx1H}Gwlx`<w*=vaoO*3OwbH^q%LAFC zMuc7vsap;qP`Hp+_DDR8EowkeOWjNi(H6S~nu_^Q-uUPzO#NgBs#^gCcds4<W3T)~ zY@^in<Hu|HWF;`(A$~Z6Y{b!E(=`qiyAnyDom8-Nf@%2zkwohd@=sxq8_nS!ubcz- zk^-~dn`FuSqZOR#aZGF91WNw6opw&uB?j6vrx0riM_lO%qLh-eZNk$hcRk-6V+XAB zXjZ~fM&t)C-O||SlcOw+?$)ATa|hFevcqlaPujov$P5E`SBv<dTf34fvlyo}s@7zk z<fDLo_0{zAh>{zH(;pO?UvJFP`0z!}*Vw$S<rV0nd{v#~vU4%NilyYJEsks{+*wDo z_}!l2p4^1o5stYVP<s-nr?T+qMlYI7ot0{C+ItWngD^J3tn4)Pnd*|FB7Ct0qK|Fy zilU`}3scW3K}UVrsY23WQc<_8biRG!)VF}Aq{Tw;`}~#98CB3sn?^e2o`u{urC`_G zRSL~;XiQwb&y2w41;*F@^3E64ZY-{Vf8>;FcY<}NSlN0i&U;(({gy;m@)Qt?E8|YT z1=)4EI(;9iTt<7F(DeCEF<;|z5V2_8^^Hbc{+sNmTCrr;Duk~g-k1b`Yt$U;YM9Ne z;b8!CCa#yUIbNsXp}V;_7h0cL1pA&K0g0c@UjL`zkwE5BAj51C5xwIXbhqk4YRcEK z9EMM~Y>CU(S;2gJhu`wMQwjM7zhjT(v*$ckl^>ZoF5U7_Sz30tB+-}rX7p)zRT#Gw zaHb8jtH$UYO`RSgbc{@nZFB!A*{Yh~jarN^!Z$MWm8(Jvl^ADLR_2lHWW1>zuCIo1 zJc*~uH*nUsXbLf5)>BN8oz2;RI>+&K1D5^Z_6JmDq#&w{6(cR7Wi>V($YI{HclxO6 zIFSKs?x}$~8#giiAzz8ghPc+ss9@DCw!)}o(AR5!>dq0afn%gD$)fUe?Fs=`<whkh za5S+~>|3w6G|*B?j?%i-_!Cw8a9bDdXZ!P1%rR<Th)Ww+oy{L3hY3<8m-lmKGc$4D zd7f~fVxIi{#YiDNz&pvlFOi{=QB9t1#Dnu^bV08bh6Xpq!taI=Gy|n$b{Oa-OX$zr z(~On4bvl13R@@daD%Bz@F;ItHG~-;|85m{z#Qj6bcx(purc%5;4sOr7mtc&Jo9CjI zz4}+^5Rv1VS7c4xsjMHP_s{95G{wfa20luRmLNO%M9s<C2V@+-IcnvY!e?TdN<*E! zZ}kf@;`=|PQ!HGxY<zumTfT=98YDbrZ}>^-vXy+<Fg3y)pOM)fgr$)mxdcIKMT<6b zlQ@!?JaemC*0r?AIjKouQh;IU(+KxCtg@mw%bUlh;|!8@GfVeQU`x*QU3YS792FqW ztYQXexLxD1?Ew%u{;A{MUx#UYF<y>>D#SAGWGba`9Mh?SQlf@i*cKj~v*^|1Gu-Pr z`VrD06OUu=?Xd@=s!R^56vTEJeZ|#g1h^xdEgO(Fq^~e4`NFgGD<xTe%-UTG=6d>= zzh`1>C7^`Ev!ailV*IimP^u=e^Rd<Cp*3)ebPDmi;FCfHA)T{h%*4pVzDVQ0E#x7u z5C_RuTz7b(>r7>IUxdLA&5>Ik6W6fnT@$HEuMeJ73~O_`(80W1n<)7_rusG58N`9a z8oX$`9!t$mH?uV+i<?hiGvR%zU$}3oDiOsSH)T1eJ{3_iK?&akyKd*9f>x-M?q14= zEUrTwDRtO1Dc+dPz0FnTNJZVhcS+zM|JHYe^{ZY`{c1D?Z(zDI?d8zuy^gFI5f{y@ z`JysIZjEgxm3R+h26P0M(~9&BOc6QMbyOM42nVyV2VwBePh8r^r^?wSgub=V*hNp7 zZvh~x`6`vIsImmia^<~KmPQ{LN=p<TobU^ndxu%tD=n(@^S2b!cQ7%4MxDp0wC6V_ z_gCvIgt&I~bn1iA+-TdqI?w7Mnu%2eyDr~|4k|xC54fQ#DMlM-HB8TY7-Hxc&t?p; zhWvA05uhxfXb#ZCX%?t!kv;(t7?Msj<?AK{V+&P}nG^LB(#VY8M?Ev&Wkhdn-!d&J zI}F~b%Y18|+pTJ2@bk|w5?n(B(9(U_4G-iShPU|`NzhGF2d=XP$esHrXJ#R5B(L+f ze+{1W3Zf>>0yf;<XWf2n*`{vAU6!AowE)iu##Y1M8&!oq;WvW5IVpK>j;3Zq{Fbv> zoCM<$`8(byP#te$=fFu+1Z^5OM^wXU8YQ!bpqq{<VrTRO-8v)qx1V-jV?ABZwaxfz z*!<IvtPGasFc6R6el>3!6;P}To6+lgi}&{p?&v||u}R&!?w3b_`1&Ulu=S`PE-(nw zW!Edpb2m4)h<+qivpkQB1$}C}s)lVILH4a=XBky$lTNCE4bXTl<d=G0FKRT0eM+Ct zv5HZo8r(f^vDmGomr6*#n9(g2QZtK6g&3{I9=;ekeG?E0FFt4>7^tHud5PFS@kkH2 zO652imR{}H@r?0FrtEBpqv}_7vSts)3jgN6HVxxb9-6oprbJTL;}AQE_D)aUxPdk# zvwKCyt4y`^^79NubzyvyYAS95r$64d*l7E{&zHx_XqSVSNvZIFm<N-jfFlw)OKWZf zH9jVx!f;*lSQ9^S3+mF-Gw8S2Gi~Q-S#zYplC9DU)r0&j1Ig&VnWZu#Ba~)3)DH9V zRnJVum_sB*f2vmsN~@kDSGwt)d%P~<Ce+Rktn_x;pdStlt4%FW8+;j~p9Z};6L2A% zrb<^cXO3tWO-c8{T=#K#2l=AXsS08S2!NTtk!b3A#&%LVDYOV>46wgaw^tOXzvm_f z7@{7=gwT%_VI%;zG;KNn@oPfrxU>wy`H<lf$C>G>72G&f`@rl+z?s!prGVRrrBjGE zNHdm<hO&%$N2_3)d!*ZO^3St<MRO47E<0^4Gn{5X=mtIHFYGtt*M|l-zDv@cKa(`( zRI4K<dl|R3z;P|N{8nW0Y5*~wF!(bnz#_@*$0jvC;qeanUQVi^rOk`YI0|;JsAyo^ zR{DD2HIb-FFFMA0*0YE}<Mw_+JZvB8!CHP)pf|5#72`+|1M&~B?drkKj__L$1SrF{ z7q9T0oDkVJq89yE{<rL3zd?V?lQ1*@0pVs4HVTMa)&B<5$2$7_@8tI%bg#eEng2Wa z{T~8jfTUi`!qLfD*xbMoApHcWHx2%t`Dgk42lne<<oB|I^5QZYe^T546txef`v-r` z(Zb%@?&F)7|LE|~`umTPzasok`uqP2#qGab@ZSpX85sefsQ*N9V`lhEfzJrgVRN#u z=>WpEHZXG{0Cf5ozp{xl0R;fo^}kcj{{!asr)XY~UWi_pUW8uk@A~+^pl&JvG4FpD zzyCAV&5_=T-kIKo-j&{s-u=Ho-IzXfxBn`9|F{`|nS|D20}#?aG~fSkA7%iAjg=k1 zQ2RFtpc((C(*JrL4gjZ(gYiQ{&Pc$)@evmLAK`KWwB#%R>H0@|Hh`8KK-c@I<N(Y& zJI6=y2L<jU_zx=FpP!Gf`s@6!BP#&S_R)%!5ulm>I08%n%m5$7M@S#}kH7&JU;vZ? z&Nx{Cs`-yrf2#$Azz)E=u>#TuBo0vX(efkIkK;%Bhm8G?weZ)&`M;O3|3|bN{r}Z< zLBPuVceyw#%RgZO|9FxB1NeLGf55yk(2EhUGyc65fcPfy{}uE`uR_4_4|)CnE9&h7 zk@)wp0ITu8;tKzxy8I6p#J}DE1p_k^C&0?Ia{<_W{!eFD+uJsBgum-o@XO)kwwB3V zl1mmr0G%A;in}&JlC}pN`a!noMy+ERl6;r;*Y}y(U1?`VO@ST`h&|kWcHU=pX_80` z@92q_L*?+W2j`+6HuwAL=LYVFU#q5Pa@DYZ;rEd;;`_=W>f^ukX}S01*XA52ssCqD zhp!AWXnZQAa_s9^tR>f_e>rIJFEb|=#TV*Mc`&+~kQ6!iyriz<BwV@9O2Rt%iX@a5 zlfGEfU@>NBps}6=i~MOuiT3v8@Q9~^U=J=A6|)el1p<$RK3S?r`i&5FgQtSvA@R|y zt0g&0oS6j9K<{?bFSy8to0VupIr5dzSSd3?!*f;4$5}LlJ74_M^yL8T$Z~<r*A+G% z+u=Econ$<Zoy17khVPoLYwVcTneR9un_XyOOfp62B*ckrzO0ei2T3Dil36jGup-k1 zmbKM*G}S0A<=91Fb2inO1c<JYS*A|nsOc2OmtA2`o+g>+G6C2nzBeh1DHjZ-R+7F> zf(#_K#2t>7#A8>blVl{8BW0EX$r>&T4i2T+G7@W-StyG(UsXIE?G&V)q^vQo&8`?% zYC2~^)^u7jE7}!`MnTjH!S_~^YX@oByc{beXjf)}6eAo1kSjR(L`>8Ii9hX%Yb*ux zQ)-8=O4$Brv0hp%!$u^{AYWBT$4HB*@5rFkb4oXf!{lJmqciiY=fr&0voG|Fc17#C zKN>k^?c?HkIo31!6SBt1@nn(UOvleQa%kXl#H9<T$uShs9VsLtNQJ~YLP6HbAj?Rs z+E^C~p7^Rnisg-wq>-d_iQfn-G@IDvT?d{tjB>?_e_48PYXdQsSYA8Ioc&I$ogN#F zRyAryPpFj>D>%X8d%&fdGZGujM^;Y;V}evp><Ji28cZT3=2<z+Pw5Bp<J{~Ac#e+Q zT2|>x*;(!k8<8}Fd{r`t2RSp+SFD$Ia!G?pk{B1v9bA&*BJqAME@Yp@QlwoC)a<@u zJ?`&w)=2W5bk0|mNXKx)qqL><gj1yIA4N*?6|kfX30t%*(v%sNb)L8_kZkPn_p>>Q zW$4LVlz3;<obRH_GwZB!&Nl!{0TYT~B?KwM(b&?~$AzN^(HJKY9M{W?MBh_K&pp51 z-d%n;tapbCYUoMP)%^R1?e>80PEU&l)cCx9Np+yc)}Wf-Z7^(iyS{UE-O}jTE=T%) zyMDeve_GPMtnWTQ?$@6mF`=W2EJQVb#vXy!i(ZroHHNf_uQ&uext42Q9s_>paeU@I zj`2iEt40cVb5Y4@76}pSQ6gYY6Pt@fAaP>fl?cQxH-OL)qxM8#>nB10A=)(&1`uL! zC&CDVX9HIA{d9NOY@dF^V#j1q5J{?7bB;tBm?Teg7bHd!J(C~^f0-RzX43KkyY;A` zO#1Eu4<$>|3Z$g8{mX40=$O58bXq&3mg7nL$z%eDY>?S6$3w5##9}<un++}K&@v7P z*xUu(vvw@LCmn?>>S<lS0G~Kk&^SxN;S&&2;A#AlaMG5vq_1fFX!%)1+gL@cXyFFW z?dz3S3v#)mIZsQk7ElrP;HMd<Yi`jJ1HKSYUIf?vzs>|FM{mTma%NAkIjrc4ya?DB zVK{sHar1d|P}zi4q^HQeDQO_*qqwDwIZAHr#U20$lUT?_GZabEapY#OxEEio59`P6 z->FZ-@x$q~A#Z>|VZET0<z(n`-%aEHxV@jMt3U6j<LKGd+vn+N$sr44#Kc~v*Rlgy zz8pSnck_#@k5nV^?}wM$e<0lP(`q-Zaj-i7as6@nsrq$u_*CIFAJc9(Jyg$l;RY7J zKnJ+Jf4Q4>^XL1A3F9uCg-5!)`eFLluiM@IevUV4Fc9*`_4+VX^XuOup$>J6&35Bj zAAVcAZ|nM7jC=R-%}<M)m&eE3_0!X|tL7g+ZT1!ZPuRb!{xa?M0ICo|ZPSg8S6g(K zZsDr=U#DBQs=}fpC;aF0`tWH#t*c*-Q;1$z;tS-M;Vl+pJ*)G7^q!0kebqyCq9HEm zKS4u9HZ+*X(BSKuMp>6>Pic(?sXF5&TGP5fHCT+pFO+39jdG))0gsYnNdsO_O=d~M z&kc2un%2YF1+77$P&D9mW?Wr6@-;CRH0sv{4b_{HaY+MSOS{#QhMyhPZbkEym<0`Z zRQXF9@aT0Sf`(r_ZF<Xb__?L-NYEM_0jqJqbF?`W<1qJ(jaogohW4nQmve#FXdB@= zTu+W8nzirP(D|aqqjQ>)hM#*XN}5K6M9`X%&oN6H_%l9<>w$82IgV(?51Nr%rE(mC z756^O+~JJB476b`=ho=Tv|fNWP~jHi@Qx#6OVDV~CdPp~9fQCN#!qX!HOa`^)U<z< zcwMmZ+w?}yH43JQH>77H@7U29Sh)uH>(B7wtPUFPCd;{qqMn+Nk_Nn%&J;=-rGqnT zc-jVwac&Gw>4osLPZFN>ad?(q7kG56RjvU%PfbKg171rfNQ&0cfvKQ*lt<+oz~f_b zF%E&L;}UChblfGzc{fs9Qqq9O$GIg9b9>spYnstB@Xpv5iO9?iCfC(XFg$zQ|1$E{ zcrT8@8>nMb{0*(PhewzjdF#RE=VmavsuBEp4L^F?vX<+@TWsFIT$4*cGx-#FbbhGt zdXpz>SKF9&5Jb*};?Lw4<Xs)-C~tJ$P_D}*Pt#iO=~Ss42YEZ2pK&`x=>>Ss_)F`N z?F=5;A4$VpPsbJIx<oVn0z6wUk?!qWc)7u&S9_^7U=Zbh=<m+h(zV*}F)rAeJPf*5 zY5Xwg+}^lg<H!#^Z3Idk;3a%LojwX0rCseqXpyu(BVz|0Gbp~M_o2*geQg+N4_>Z| zmI3Xip|vIk(OTGCjPz&h(W2ODJfuWRL#J)VwI+9>1+jGtB*Qb>62nVhTmE`Dv|bmt z#SJgicAIhZ4m+j4p6}U9orc=>B>`QHo*TT?Gu~-uY6?=5;W?b?H^OM^(a_j98XRr9 zCC^B^I&aiyebhK4oWbNoDrH(%s78iXkG1Jf8=MnqTjJ)Z);&5O+s6(=t$SdML$Xt{ z;qJJORSI(*m-WzvGvjRi9Xi{~BSRSf8#<d$2j9~TE1~-Vbz0}J!FP1_C&uCLiF94X zwskN)P3Ta8)!YHSvc_vW{tG3!Mi=N5QPIxW4f`#lXM~JiBcPGh<9d_;I}Y8MS(pFB zK=EQ~ElM&9h@LwHQyZHO7S`jC675_hcQcO9I0P@~+fA*&HcH0~__Mx?Qfu<AbH<-h ze)$kouG<B=-K%KOf~Gm!^TTW=-W<$k=60R#xzM){b{tw;%gbo?6>jYGo&<03wEY^Y z5#6AYvW?EfC0bzP<Gr^vrAKno_U*l?N62fViA%%>ot6n+TBK*4uRP9|^co(qYULPB z&x*YP9fONCAcpNRoym#R5t>?y&e7y?oF14u=-ZKQYRGlbhFRI{xd7&xbrF@OF8ENJ zc=OPokvB9}FJo)+xW{%{+rtNY=7H>NY>w`f?q3Ocu?N%jqxSGqojbAjGqDQpOf0m% zF|mbxvdL>LHe6~A+N~Phw<rNxS8Z!+8UD!7^h0fH_J}oT#;@=ffOP&V^wOg#)cF|| z%Is4>Gxo))h0#@LJ31~FYoIMLJ~`l=UdPM;qwCx>p!wFmJ9PB!V6{fq+nO9kz1N_f zr0K_THllkj7zmA%Tm!pquVWvyTJwUvf$8f&<FoKmFYq)NSgipS=(<n-qICe8)BP1D zqLWZ~EqWED(*`uV2HJ6z4=~P^`;WtJy?LB=vsbUGs}GxhPkeZN^&U4taf<+cMSl_Z zho^@veuL)tx9jTXS9r(sb?<Ig*G+#D-dy)#IlAvwqkGej%j=uQy{`WEkiS*0U(fb* V|CP_p!5RM2b@t6SZ{FU_{sVR`sv!UX literal 0 HcmV?d00001 diff --git a/info.textgrid.middleware.tgauth.rbac/documentation/install.tex b/info.textgrid.middleware.tgauth.rbac/documentation/install.tex index 0c763bc..ad2f9bc 100644 --- a/info.textgrid.middleware.tgauth.rbac/documentation/install.tex +++ b/info.textgrid.middleware.tgauth.rbac/documentation/install.tex @@ -1,14 +1,15 @@ -\documentclass[a4paper,12pt,twoside]{article} -\usepackage[ngerman]{babel} +\documentclass[a4paper,11pt,twoside]{article} +%\usepackage[ngerman]{babel} \usepackage[OT1]{fontenc} \usepackage[latin1]{inputenc} \usepackage[top=2.5cm,bottom=2.5cm,left=3cm,right=2.5cm]{geometry} \usepackage{amssymb} \usepackage{amsmath} \usepackage{graphicx} -\usepackage{bibgerm} +%\usepackage{bibgerm} \usepackage{setspace} \usepackage{ifthen} +\usepackage{hyperref} \graphicspath{{graphics/}} % % @@ -16,20 +17,773 @@ % % \author{Markus Widmer} -\title{Role Based Access Control mit OpenLDAP\\ (Anwendung im TextGrid-Projekt)} -\date{SS 2007} +\title{openRBAC installation guide} +\date{04.04.2008} % % -\pagenumbering{roman} +\pagenumbering{arabic} \parindent=0mm % % \begin{document} % \begin{abstract} -In this document you will find a quick installation and configuration guide for the openRBAC software. This software is implemented in PHP5 and is available under the LGPL (Limited Gnu Public License). +In this document you will find a quick installation and configuration guide for the openRBAC software. This software is implemented in PHP5 and is available under the LGPL (Lesser Gnu Public License). As backend database it uses one or more LDAP servers. The configuration of these servers is not part of this guide. \end{abstract} % \tableofcontents % +% -------------------------------------------------------------------------- +\section{Introduction} +\label{sec:intro} +% -------------------------------------------------------------------------- +This software is an implementation of the RBAC Standard\cite{rbac2004}. This standard defines the minimum of functionality for role based access control systems. If you are interested in details about RBAC or the RBAC Standard, please read the accompanying openRBAC documentation. +% +% +% -------------------------------------------------------------------------- +\section{Installation} +\label{sec:inst} +% -------------------------------------------------------------------------- +% +% +% -------------------------------------------------------------------------- +\subsection{Requirements} +\label{subsec:inst:requirements} +% -------------------------------------------------------------------------- +Because this software is written in PHP5 you need an PHP5 interpreter. It has to be compiled with XSL and XML support. If you plan to use RBAC in combination with SOAP services, you have to add SOAP support as well, but you do \emph{not} need to install PEAR to run openRBAC on your PHP5 installation. Further you need one or more LDAP servers that are ready to accept connections from openRBAC which will read and store its data there. If you don not have an LDAP server yet, consider to use openLDAP. You can download it from the project page\footnote{http://www.openldap.org} and you will also find an installation guide there. If you want to use openRBAC with Active Directory as data storage, you have to add LDAPS support to the underlying LDAP class by yourself, which offers only TLS support at the moment. +% +% +% -------------------------------------------------------------------------- +\subsection{Platform} +\label{subsec:inst:platform} +% -------------------------------------------------------------------------- +The software was developed and tested on openSuSE Linux 10.1. So if you use a Linux on your machine, you shouldn't have any problems. It has not been tested on other platforms, but if you have a PHP5 interpreter running properly on your system, it should work as well. +% +% +% -------------------------------------------------------------------------- +\subsection{Getting the code} +\label{subsec:inst:gettingthecode} +% -------------------------------------------------------------------------- +This project is rather young, so at the moment you can only download the code via a SVN client. The software consists of two parts that are required for openRBAC to run: +\begin{description} +\item[mwlib] This part is a collection of rather small classes that provide general functionality, as for example parsing and reading XML files, or encapsulate LDAP commands. The openRBAC software only needs the following files: +\begin{itemize} +\item iNode.interface.php +\item iXML.interface.php +\item iLDAP.interface.php +\item iHelper.interface.php +\item Node.class.php +\item XML.class.php +\item LDAP.class.php +\item Helper.class.php +\end{itemize} +All other files could be deleted or simply left where they are, because they do no harm as long as you do not include them. +\item[openRBAC] This part is the RBAC implementation. It is split into multiple files, each containing one class or interface. +\end{description} +You have to download both parts. To make it easier to get updates and patches via SVN, it is recommended that you make an SVN checkout rather then an SVN export. But if you do so, make sure you download \emph{mwlib} and \emph{openRBAC} into two separate directories. Otherwise you will get an error from your SVN client. If you use the Linux subversion client, you can go to your target directory and run the following commands (don't forget the single dot at the end of line 4 and 6!):\\ +\begin{verbatim} +mkdir rbac +mkdir lib +cd rbac +svn checkout svn://markus-widmer.de/openRBAC/trunk/ . +cd ../lib +svn checkout svn://markus-widmer.de/mwlib/trunk/ . +\end{verbatim} +Now you have installed openRBAC on your system. Continue with section \ref{subsec:inst:configuration} to learn how to configure the software or read more about the different possibilities using the software in section \ref{subsec:inst:makeadecision}. +% +% +% -------------------------------------------------------------------------- +\subsection{Make a decision} +\label{subsec:inst:makeadecision} +% -------------------------------------------------------------------------- +Before you start to configure openRBAC, you should think about your requirements. You can use all of the software or only parts of it. The differences are described below. +% +% +% -------------------------------------------------------------------------- +\subsubsection{The RBAC Framework} +\label{subsubsec:inst:configuration:therbacframework} +% -------------------------------------------------------------------------- +You can decide whether you want to use the RBAC Framework or not. It is wrapped around the RBAC libraries and allows you not only to include the required classes from the \emph{mwlib} via a configuration file, but also to use the SSD and/or DSD extension for openRBAC or to write custom extensions. An extension allows you to modify the behaviour of the software in a way it is needed for your application. RBAC, for example, does not know any public resources. So you would have to work around this by implementing the ''is public'' statement directly into your application. Using an extension for the \emph{checkAccess} function is the other way. You can write your own code that decides when you wish to grant access although RBAC would not.\\ +Using the RBAC Framework gives you a lot more flexibility, but of cores it makes a higher complexity. +% +% +% -------------------------------------------------------------------------- +\subsubsection{Core RBAC} +\label{subsubsec:inst:configuration:corerbac} +% -------------------------------------------------------------------------- +This library contains the core features of RBAC as defined in the standard. It allows you to add and delete users, roles and sessions as well as managing their rights. This library can be used within the RBAC Framework or can be included directly into your application. The configuration is almost independent of your decision. +% +% +% -------------------------------------------------------------------------- +\subsubsection{Hierarchical RBAC} +\label{subsubsec:inst:configuration:hierarchicalrbac} +% -------------------------------------------------------------------------- +This library contains the functionality of limited hierarchical RBAC as defined in the standard. It is derived from Core RBAC and allows you to manage role hierarchies and redefines some of the functions from Core RBAC. This library can be used within the RBAC Framework or can be included directly into your application. The configuration is almost independent of your decision. +% +% +% -------------------------------------------------------------------------- +\subsection{Preparing the LDAP server} +\label{subsec:inst:preparingtheldapserver} +% -------------------------------------------------------------------------- +Before you start to configure openRBAC, you should prepare your LDAP server. If you have it running, it is recommended that you create a subtree for each of the different parts of RBAC, for example: +\begin{description} +\item[users] Usually the users in a LDAP server are stored under the RDN\footnote{RDN: Relative Distinguished Name} ''ou=people''. If you ask openRBAC to add a user via the \emph{addUser} function, it will create it there. Respectively openRBAC will search for users under that subtree. If you already have your users defined somewhere else, you should use this DN, of course. +\item[roles] RBAC is based on roles. It grants permissions to roles and therefore uses roles to make access decisions. To make it possible for openRBAC to store and manage roles, you have to create a subtree, for example ''ou=roles'' in your LDAP server. If you have an LDAP server where there are already groups defined, you could also try to re-use them as roles and configure the RBAC library respectively. But unless you are familiar with the differences between roles and groups and how openRBAC creates, deletes and manages roles, you should be careful. +\item[sessions] The RBAC standard defines sessions as continous context for a user. Therefore openRBAC needs a place to store session information in the LDAP server, for example a subtree named ''ou=sessions''. +\item[resources] The RBAC standard does not define any functionality to manage resources. Nevertheless you have to create a subtree in your LDAP server where openRBAC can find your resources. To learn more about how to create a resource in your LDAP directory, please read the accompanying documentation of openRBAC. +\item[SSD/DSD sets] If you decided to use SSD/DSD (Static/Dynamic Separation of Duty) sets in your application, you have to create a subtree for each of them. openRBAC will store and read informations about restrictions there. You could create subtrees ''ou=dsd'' as the case may be ''ou=ssd''. +\end{description} +% +% +% -------------------------------------------------------------------------- +\subsection{Configuration} +\label{subsec:inst:configuration} +% -------------------------------------------------------------------------- +% +% +% -------------------------------------------------------------------------- +\subsubsection{Configuring the RBAC Framework} +\label{subsubsec:inst:configuration:configuringtherbacframework} +% -------------------------------------------------------------------------- +In the ''rbac/conf/'' directory, you will find two configuration files. You are free to rename them if you wish to. +\begin{description} +\item[rbac.conf.dist] This is an example configuration for the RBAC library. Here you configure the connections to the LDAP server(s) and details about your attributes used in these servers. This file will further be referred as ''rbac.conf'' (see appendix \ref{subsec:appendix:configurationfiles:rbacconfdist}). +\item[system.conf.dist] This is an example configuration for the RBAC Framework. Here you configure the path to the rbac.conf, the paths of the files you have to include and the extensions you want to use. This file will further be referred as ''system.conf'' (see appendix \ref{subsec:appendix:configurationfiles:systemconfdist}). +\end{description} +Please start by editing rbac.conf. The file is split into sections each containing multiple variables. For each of the sections ''user'', ''role'', ''session'' and ''resource'' you have to define the appropriate LDAP parameters: +\begin{description} +\item[host] The hostname where the LDAP server is installed on +\item[port] The port on which the LDAP server is listening +\item[version] The version to use to talk to the LDAP server +\item[tls] If you want to use TLS for the connection say 'yes', otherwise say 'no' +\item[base] The base-DN where the RBAC library starts searching for an entry +\item[binddn] The DN with which the RBAC library binds to the LDAP server +\item[password] The password corresponding to the binddn parameter +\item[filter] A basic filter that is used in every search +\item[namingattribute] The naming attribute of an entry (f.e. ''uid' for a user entry) +\end{description} +For the role section there is the additional ''assignedattribute'' parameter. In this attribute the RBAC library stores the users assigned to a role.\\ +For the resource section there is the additional ''aliasattribute'' parameter. If you specify an attribute different from the ''namingattribute'', the RBAC library searches for both when searching for a resource.\\ +The ssd and dsd sections are only needed if you decide to use one of these extensions. Otherwise you can ignore them.\\ +The ''errorCode'' and ''errorDescription'' sections can be left untouched unless you want to change the output messages the RBAC library should give.\\ +Please edit the system.conf next. There you find various configuration parameters you have to adapt to your installation. Please keep in mind that every path has to be either absolut or relative to your application that is using openRBAC. +\begin{description} +\item[configuration] This parameter tells the RBAC Framework where to find the configuration file for the RBAC library that you have already modified. +\item[rbac] The ''class'' attribute defines which RBAC library you wish to use. Possible values are ''RBACcore'' and ''RBAClimitedHirarchical''. As child nodes you see a lot of ''require'' statements. As mentioned in section \ref{subsec:inst:gettingthecode} the code consists of two parts. You now have to tell the RBAC Framework where it can find all needed classes and interfaces. Depending on how you decided where to store the code, you have to adapt the pathes. +\item[extension] If you want to use extensions, you have to configure them. For each extension class you have to define an ''extension'' statement. The ''class'' attribute contains the name of the class and the ''file'' attribute contains the path and filename in which the class is defined. +\end{description} +A simple example on how to integrate the RBAC Framework into your application could be: +\begin{verbatim} +<?php +require_once( "RBAC.class.php" ); + +$rbac = new RBAC( "../conf/system.conf", "./", "../lib" ); +$rbac->createSession( "martin.haase@daasi.de", Array(), "abc" ); +?> +\end{verbatim} +% +% +% -------------------------------------------------------------------------- +\subsubsection{Configuring openRBAC without the RBAC Framework} +\label{subsubsec:inst:configuration:configuringopenrbacwithouttherbacframework} +% -------------------------------------------------------------------------- +If you want to use the Core RBAC or limited hierarchical RBAC \emph{without} the RBAC Framework, you have to adapt the rbac.conf as described in section \ref{subsubsec:inst:configuration:configuringtherbacframework}, but you can omit the part that describes the adaption of system.conf. Because the RBAC Framework now does not include the required classes and interfaces, you have to define the paths via constants in your application so that the RBAC library can do this on its own: +\begin{description} +\item[RBAC\_LIB\_PATH] This constant has to contain the path to the mwlib files either absolute or relative to your application. +\item[RBAC\_PATH] This constant has to contain the path to the openRBAC files either absolute or relative to your application. +\end{description} +You have to define these constants in your application before you include the RBAC library! A simple example on how to integrate the Core RBAC into your application could be: +\begin{verbatim} +<?php +define( "RBAC_LIB_PATH", "../lib" ); +define( "RBAC_PATH", "./" ); +require_once( "RBACcore.class.php" ); + +$rbac = new RBACcore( "conf/rbac.conf" ); +$rbac->createSession( "jondoe", Array( "student", "hiwi,staff" ), "s13243355a46" ); +?> +\end{verbatim} +% +% +% -------------------------------------------------------------------------- +\subsection{Closing words} +\label{subsec:inst:closingwords} +% -------------------------------------------------------------------------- +You now have installed openRBAC. Remember that openRBAC is just a library and cannot replace an application. Even if you just want to have a graphical interface that maps the RBAC functionality defined in the standard, you have to write it on your own. It is not an ''out-of-the-box'' management tool. +% +% +% -------------------------------------------------------------------------- +\section{RBAC with XACML via SOAP} +\label{sec:xacmlsoap} +% -------------------------------------------------------------------------- +Additional to the RBAC library and RBAC Framework, you will find a SOAP\cite{soap} server and client in the \emph{SOAP} directory. Both use the SAML 2.0 profile of XACML v2.0\cite{xacmlsaml2005} to communicate with each other. The clients gives you the possibility to call the RBAC function \emph{checkAccess} via a SOAP service. SOAP transports a SAML Request and Response adapted to XACML. An example SOAP request is given in App. \ref{sec:appendix:rbacwithxacmlviasoap:soaprequest} and an appropriate SOAP response is given in App. \ref{sec:appendix:rbacwithxacmlviasoap:soapresponse}. +% +% +% -------------------------------------------------------------------------- +\subsection{Preparations} +\label{subsec:xacmlsoap:preparations} +% -------------------------------------------------------------------------- +To use RBAC with SOAP you have to have a webserver like Apache having PHP5 module included. You than have to configure Apache to serve the content of the \emph{SOAP} directory. Make sure that it is possible for {xacml.php} to include all of the RBAC library and RBAC Framework. +% +% +% -------------------------------------------------------------------------- +\subsection{Configuration} +\label{subsec:xacmlsoap:configuration} +% -------------------------------------------------------------------------- +At this point it is possible to reach the file \emph{xacml.php} over the HTTP protocol using a browser or something similar. Now you have to edit three files and replace the placeholders within them: +\begin{description} +\item[xacml.wsdl] Go to the end of the file. In the section \emph{Servicedefinition} you will find the placeholder \emph{$<$YOUR\_LOCATION$>$}. Replace it with the path where a client will be able to call your \emph{xacml.php}. +\item[xacml.php] At the top of the file you will find the placeholder \emph{$<$PATH\_TO\_RBAC$>$}. Replace it with a relative or absolute path to your RBAC Framework. This value will be used twice in \emph{xacml.php}. First it is used to include the RBAC Framework and second to tell the RBAC Framework where it is located. Afer having set this, you need to replace the placeholder \emph{$<$PATH\_TO\_WSDL$>$} in the same file. Set the path to the WSDL file you have just edited to fit your installation. +\item[xacmlCheckAccess.php] This is the client. If you want to use it you have to replace the placeholder \emph{$<$PATH\_TO\_WSDL$>$} as you did in \emph{xacml.php}. +\emph{Notice}: If you have a close look at the WSDL file (see App. \ref{sec:appendix:xacmlwsdl}), you might recognice that the imported XML schema is not located at the OASIS web page but at the web page of DAASI International GmbH. The reason for this is, that the XML schema you can download at OASIS is flawed and cannot be used for an XSD import. To verify this, download the files from OASIS and make a \emph{diff} between the corresponding files served at the DAASI web page and included in this document (see App. \ref{sec:appendix:schemafiles}). +\end{description} +% +% +% -------------------------------------------------------------------------- +\subsection{Closing words} +\label{subsec:xacmlsoap:closingwords} +% -------------------------------------------------------------------------- +If your RBAC is configured well and found to work properly, you now should be able to determin decisions of RBAC via a SOAP service using standardised SAML/XACML. But remember that this project is still very young. So at the moment it is not possible to tell the SOAP servive to examine certificates send within the SAML request to decide if the client is trusted. +% +% +\begin{appendix} +\tiny +% +% +% -------------------------------------------------------------------------- +\section{Configuration files} +\label{sec:appendix:configurationfiles} +% -------------------------------------------------------------------------- +% +% +% -------------------------------------------------------------------------- +\subsection{rbac.conf.dist} +\label{subsec:appendix:configurationfiles:rbacconfdist} +% -------------------------------------------------------------------------- +\begin{verbatim} +<?xml version="1.0" encoding="UTF-8"?> +<configuration> + + <section name="user"> + <var name="host">ldap.example.org</var> + <var name="port">389</var> + <var name="version">3</var> + <var name="tls">no</var> + <var name="base">ou=users,ou=rbac,dc=example,dc=org</var> + <var name="binddn">cn=application,ou=dsa,dc=example,dc=org</var> + <var name="password">secret</var> + <var name="filter">(objectClass=inetorgperson)</var> + <var name="namingattribute">uid</var> + </section> + + <section name="role"> + <var name="host">ldap.example.org</var> + <var name="port">389</var> + <var name="version">3</var> + <var name="tls">no</var> + <var name="base">ou=roles,ou=rbac,dc=example,dc=org</var> + <var name="binddn">cn=application,ou=dsa,dc=example,dc=org</var> + <var name="password">secret</var> + <var name="namingattribute">rbacname</var> + <var name="filter">(objectClass=rbacrole)</var> + + <!-- May also be member to have greater compatibility with + allready existing entries in your LDAP-server //--> + <var name="assignedattribute">rbacperformer</var> + </section> + + <section name="project"> + <var name="base">ou=Projekt-Teilnehmer,ou=roles,ou=rbac,dc=example,dc=org</var> + </section> + + <section name="session"> + <var name="host">ldap.example.org</var> + <var name="port">389</var> + <var name="version">3</var> + <var name="tls">no</var> + <var name="base">ou=sessions,ou=rbac,dc=example,dc=org</var> + <var name="binddn">cn=application,ou=dsa,dc=example,dc=org</var> + <var name="password">secret</var> + <var name="namingattribute">rbacname</var> + <var name="filter">(objectClass=rbacsession)</var> + </section> + + <section name="resource"> + <var name="host">ldap.example.org</var> + <var name="port">389</var> + <var name="version">3</var> + <var name="tls">no</var> + <var name="base">ou=rbac,dc=example,dc=org</var> + <var name="binddn">cn=application,ou=dsa,dc=example,dc=org</var> + <var name="password">secret</var> + <var name="namingattribute">rbacname</var> + <var name="aliasattribute">rbacname</var> + <var name="filter">(objectClass=rbacresource)</var> + </section> + + <section name="ssd"> + <var name="host">ldap.example.org</var> + <var name="port">389</var> + <var name="version">3</var> + <var name="tls">no</var> + <var name="base">ou=ssd,ou=rbac,dc=example,dc=org</var> + <var name="binddn">cn=application,ou=dsa,dc=example,dc=org</var> + <var name="password">secret</var> + <var name="filter">(objectClass=rbacssd)</var> + </section> + + <section name="dsd"> + <var name="host">ldap.example.org</var> + <var name="port">389</var> + <var name="version">3</var> + <var name="tls">no</var> + <var name="base">ou=dsd,ou=rbac,dc=example,dc=org</var> + <var name="binddn">cn=application,ou=dsa,dc=example,dc=org</var> + <var name="password">secret</var> + <var name="filter">(objectClass=rbacdsd)</var> + </section> + + + <section name="errorCode"> + <var name="OK">1</var> + <var name="RESOURCE_OPERATION_ERROR">2</var> + <var name="RESOURCE_UNKNOWN">4</var> + <var name="USER_SESSION_ERROR">8</var> + <var name="SESSION_ALLREADY_EXISTS">16</var> + <var name="SESSION_DOES_NOT_EXISTS">32</var> + <var name="USER_UNKNOWN">64</var> + <var name="USER_ROLE_ERROR">128</var> + <var name="USER_ALLREADY_EXISTS">256</var> + <var name="INVALID_USER_FORMAT">512</var> + <var name="ROLE_ALLREADY_EXISTS">1024</var> + <var name="ROLE_UNKNOWN">2048</var> + <var name="LDAP_ERROR">4096</var> + <var name="UNKNOWN_ERROR">8192</var> + <var name="SD_ALLREADY_EXISTS">16384</var> + <var name="SD_CARDINALITY">32768</var> + <var name="SD_UNKNOWN">65536</var> + </section> + + <section name="errorDescription"> + <var name="OK">Ok</var> + <var name="RESOURCE_OPERATION_ERROR">This resource-operation-combination is invalid.</var> + <var name="RESOURCE_UNKNOWN">The resource is not known or not uniqueue.</var> + <var name="USER_SESSION_ERROR">The user you gave is not the owner of this session.</var> + <var name="SESSION_ALLREADY_EXISTS">The session allready exists so you can not create it.</var> + <var name="SESSION_DOES_NOT_EXISTS">The session does not exist.</var> + <var name="USER_UNKNOWN">The user is not known.</var> + <var name="USER_ROLE_ERROR">This user-role-combination is invalid.</var> + <var name="USER_ALLREADY_EXISTS">The user allready exists.</var> + <var name="INVALID_USER_FORMAT">The user has to have the the format: <username>@<domain> + (foo@example.org)</var> + <var name="ROLE_ALLREADY_EXISTS">The role allready exists.</var> + <var name="ROLE_UNKNOWN">The role is unknown.</var> + <var name="LDAP_ERROR">An LDAP-Error occured, see description: </var> + <var name="UNKNOWN_ERROR">An error occured.</var> + <var name="SD_ALLREADY_EXISTS">The Separation of Duty Set allready exists.</var> + <var name="SD_CARDINALITY">The given cardinality is invalid! Make sure it is >= 2</var> + <var name="SD_UNKNOWN">The Separation of Duty set is unknown</var> + </section> + +</configuration> +\end{verbatim} +% +% +% -------------------------------------------------------------------------- +\subsection{system.conf.dist} +\label{subsec:appendix:configurationfiles:systemconfdist} +% -------------------------------------------------------------------------- +\begin{verbatim} +<?xml version="1.0" encoding="UTF-8"?> +<system> + + <!-- This is the system-configuration for the RBAC-Framework. + The RBAC libraries need an additional configuration-file + where you have to define all LDAP-specific settings. Tell + the RBAC-Framework where it can find this configuration. + Specify a full path or a path relative to your main + application. --> + <configuration file="PATH_TO/rbac.conf" /> + + + <!-- Here you can specify if you want to use Core RBAC or the + Limited Hierarchical RBAC. In order to work properly both + libraries need a couple of classes specified through + the "require" statements. Again you have to specify a full + path or a path relative to your main application. --> + <rbac class="RBAClimitedHirarchical"> + <require file="PATH_TO/iContext.interface.php" /> + <require file="PATH_TO/iHelper.interface.php" /> + <require file="PATH_TO/iCrypto.interface.php" /> + <require file="PATH_TO/iLDAP.interface.php" /> + <require file="PATH_TO/iRBACcore.interface.php" /> + <require file="PATH_TO/iRBAClimitedHirarchical.interface.php" /> + + <require file="PATH_TO/RBACException.class.php" /> + <require file="PATH_TO/RBACExtension.class.php" /> + <require file="PATH_TO/Context.class.php" /> + <require file="PATH_TO/Helper.class.php" /> + <require file="PATH_TO/LDAP.class.php" /> + <require file="PATH_TO/Crypto.class.php" /> + <require file="PATH_TO/SimpleConfig.class.php" /> + <require file="PATH_TO/RBACcore.class.php" /> + <require file="PATH_TO/RBAClimitedHirarchical.class.php" /> + </rbac> + + + <!-- Specify the extensions you want to use through the + RBAC-Framework. Give a full path or a path relative + to your main application. --> + <extension class="SSD" file="PATH_TO/SSD.class.php" /> + <extension class="DSD" file="PATH_TO/DSD.class.php" /> + <extension class="UserEntry" file="PATH_TO/UserEntry.class.php" /> + <extension class="Logger" file="PATH_TO/Logger.class.php" /> + +</system> +\end{verbatim} +% +% +% -------------------------------------------------------------------------- +\section{xacml.wsdl} +\label{sec:appendix:xacmlwsdl} +% -------------------------------------------------------------------------- +\begin{verbatim} +<?xml version="1.0" encoding="UTF-8"?> + +<wsdl:definitions name="xacml" + xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" + xmlns:tns="http://daasi.de/namespaces/rbac/xacml" + xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + targetNamespace="http://daasi.de/namespaces/rbac/xacml" + xmlns:xacml-samlp="urn:oasis:xacml:2.0:saml:protocol:schema:os" + xmlns:xacml-saml="urn:oasis:xacml:2.0:saml:assertion:schema:os"> + + + <!-- + #################### + # Type Definitions # + #################### + //--> + <wsdl:types> + <xsd:schema targetNamespace="http://daasi.de/namespaces/rbac/xacml"> + <xsd:import namespace="urn:oasis:xacml:2.0:saml:assertion:schema:os" + schemaLocation="http://www.daasi.de/schema/oasis/access_control-xacml-2.0-saml-assertion-schema-os.xsd" /> + <xsd:import namespace="urn:oasis:xacml:2.0:saml:protocol:schema:os" + schemaLocation="http://www.daasi.de/schema/oasis/access_control-xacml-2.0-saml-protocol-schema-os.xsd"/> + + </xsd:schema> + + </wsdl:types> + + + <!-- + ################# + # WSDL-Messages # + ################# + //--> + <!-- #### checkXACMLaccess #### //--> + <wsdl:message name="checkXACMLaccessRequest"> + <wsdl:part element="xacml-samlp:XACMLAuthzDecisionQuery" name="checkXACMLaccessInput" /> + </wsdl:message> + <wsdl:message name="checkXACMLaccessResponse"> + <wsdl:part element="xacml-saml:XACMLAuthzDecisionStatement" name="checkXACMLaccessOutput" /> + </wsdl:message> + + + <!-- + ######################### + # Port-Type-Definitions # + ######################### + //--> + <wsdl:portType name="port_xacml"> + + <!-- #### checkXACMLaccess #### //--> + <wsdl:operation name="checkXACMLaccess"> + <wsdl:input message="tns:checkXACMLaccessRequest" /> + <wsdl:output message="tns:checkXACMLaccessResponse" /> + </wsdl:operation> + + </wsdl:portType> + + + <!-- + ########### + # Binding # + ########### + //--> + <wsdl:binding name="binding_xacml" type="tns:port_xacml"> + <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" /> + + <!-- #### checkXACMLaccess #### //--> + <wsdl:operation name="checkXACMLaccess"> + <soap:operation soapAction="http://daasi.de/rbac/xacml/checkXACMLaccess" /> + <wsdl:input><soap:body use="literal" /></wsdl:input> + <wsdl:output><soap:body use="literal" /></wsdl:output> + </wsdl:operation> + + </wsdl:binding> + + + <!-- + ##################### + # Servicedefinition # + ##################### + //--> + <wsdl:service name="xacml"> + <wsdl:port binding="tns:binding_xacml" name="tns:xacml"> + <soap:address location="http://<YOUR_LOCATION>/xacml.php" /> + </wsdl:port> + </wsdl:service> + +</wsdl:definitions> +\end{verbatim} +% +% +% -------------------------------------------------------------------------- +\section{Schema files} +\label{sec:appendix:schemafiles} +% -------------------------------------------------------------------------- +% +% +% -------------------------------------------------------------------------- +\subsection{XACML Saml Protocol} +\label{sec:appendix:schemafiles:xacmlsamlprotocol} +% -------------------------------------------------------------------------- +\begin{verbatim} +<?xml version="1.0" encoding="UTF-8"?> +<schema + targetNamespace="urn:oasis:xacml:2.0:saml:protocol:schema:os" + xmlns:tns="urn:oasis:xacml:2.0:saml:protocol:schema:os" + xmlns:xs="http://www.w3.org/2001/XMLSchema" + xmlns="http://www.w3.org/2001/XMLSchema" + xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" + xmlns:xacml-context="urn:oasis:names:tc:xacml:2.0:context:schema:os" + xmlns:xacml="urn:oasis:names:tc:xacml:2.0:policy:schema:os" + elementFormDefault="unqualified" + attributeFormDefault="unqualified" + blockDefault="substitution" + version="2.0"> + <xs:import namespace="urn:oasis:names:tc:SAML:2.0:protocol" + schemaLocation="http://www.daasi.de/schema/oasis/saml-schema-protocol-2.0.xsd"/> + <xs:import namespace="urn:oasis:names:tc:xacml:2.0:context:schema:os" + schemaLocation="http://docs.oasis-open.org/xacml/2.0/access_control-xacml-2.0-context-schema-os.xsd"/> + <xs:annotation> + <xs:documentation> + Document identifier: access_control-xacml-2.0-saml-protocol-schema-os.xsd + Location: http://docs.oasis-open.org/xacml/2.0/ + access_control-xacml-2.0-saml-protocol-schema-os.xsd + </xs:documentation> + </xs:annotation> + <!-- --> + <xs:element name="XACMLAuthzDecisionQuery" + type="tns:XACMLAuthzDecisionQueryType"/> + <xs:complexType name="XACMLAuthzDecisionQueryType"> + <xs:complexContent> + <xs:extension base="samlp:RequestAbstractType"> + <xs:sequence> + <xs:element ref="xacml-context:Request"/> + </xs:sequence> + <xs:attribute name="InputContextOnly" + type="boolean" + use="optional" + default="false"/> + <xs:attribute name="ReturnContext" + type="boolean" + use="optional" + default="false"/> + </xs:extension> + </xs:complexContent> + </xs:complexType> + <!-- --> + <xs:element name="XACMLPolicyQuery" + type="tns:XACMLPolicyQueryType"/> + <xs:complexType name="XACMLPolicyQueryType"> + <xs:complexContent> + <xs:extension base="samlp:RequestAbstractType"> + <xs:choice minOccurs="0" maxOccurs="unbounded"> + <xs:element ref="xacml-context:Request"/> + <xs:element ref="xacml:Target"/> + <xs:element ref="xacml:PolicySetIdReference"/> + <xs:element ref="xacml:PolicyIdReference"/> + </xs:choice> + </xs:extension> + </xs:complexContent> + </xs:complexType> +</schema> +\end{verbatim} +% +% +% -------------------------------------------------------------------------- +\subsection{XACML Saml Assertion} +\label{sec:appendix:schemafiles:xacmlsamlassertion} +% -------------------------------------------------------------------------- +\begin{verbatim} +<?xml version="1.0" encoding="UTF-8"?> +<schema + targetNamespace="urn:oasis:xacml:2.0:saml:assertion:schema:os" + xmlns:tns="urn:oasis:xacml:2.0:saml:assertion:schema:os" + xmlns="http://www.w3.org/2001/XMLSchema" + xmlns:xs="http://www.w3.org/2001/XMLSchema" + xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" + xmlns:xacml-context="urn:oasis:names:tc:xacml:2.0:context:schema:os" + xmlns:xacml="urn:oasis:names:tc:xacml:2.0:policy:schema:os" + elementFormDefault="unqualified" + attributeFormDefault="unqualified" + blockDefault="substitution" + version="2.0"> + <xs:import namespace="urn:oasis:names:tc:SAML:2.0:assertion" + schemaLocation="http://www.daasi.de/schema/oasis/saml-schema-assertion-2.0.xsd"/> + <xs:import namespace="urn:oasis:names:tc:xacml:2.0:context:schema:os" + schemaLocation="http://docs.oasis-open.org/xacml/2.0/access_control-xacml-2.0-context-schema-os.xsd"/> + <xs:annotation> + <xs:documentation> + Document identifier: access_control-xacml-2.0-saml-assertion-schema-cd-02.xsd + Location: http://docs.oasis-open.org/xacml/2.0/ + access_control-xacml-2.0-saml-assertion-schema-cd-os.xsd + </xs:documentation> + </xs:annotation> + <!-- --> + <xs:element name="XACMLAuthzDecisionStatement" + type="tns:XACMLAuthzDecisionStatementType"/> + <xs:complexType name="XACMLAuthzDecisionStatementType"> + <xs:complexContent> + <xs:extension base="saml:StatementAbstractType"> + <xs:sequence> + <xs:element ref="xacml-context:Response"/> + <xs:element ref="xacml-context:Request" minOccurs="0"/> + </xs:sequence> + </xs:extension> + </xs:complexContent> + </xs:complexType> + <!-- --> + <xs:element name="XACMLPolicyStatement" + type="tns:XACMLPolicyStatementType"/> + <xs:complexType name="XACMLPolicyStatementType"> + <xs:complexContent> + <xs:extension base="saml:StatementAbstractType"> + <xs:choice minOccurs="0" maxOccurs="unbounded"> + <xs:element ref="xacml:Policy"/> + <xs:element ref="xacml:PolicySet"/> + </xs:choice> + </xs:extension> + </xs:complexContent> + </xs:complexType> +</schema> +\end{verbatim} +% +% +% +% +% -------------------------------------------------------------------------- +\subsection{RBAC with XACML via SOAP} +\label{sec:appendix:rbacwithxacmlviasoap} +% -------------------------------------------------------------------------- +% +% +% -------------------------------------------------------------------------- +\subsection{SOAP request} +\label{sec:appendix:rbacwithxacmlviasoap:soaprequest} +% -------------------------------------------------------------------------- +\begin{verbatim} +<SOAP-ENV:Envelope + xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" + xmlns:ns1="urn:oasis:names:tc:xacml:2.0:context:schema:os" + xmlns:ns2="urn:oasis:xacml:2.0:saml:protocol:schema:os"> + +<SOAP-ENV:Body> + <ns2:XACMLAuthzDecisionQuery ID="abcde1234" Version="2.0" ReturnContext="true"> + <ns1:Request> + <ns1:Subject> + <ns1:Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:subject:subject-id" + DataType="http://www.w3.org/2001/XMLSchema#string"> + <ns1:AttributeValue> + SID_ryytp55xUIvmoXEv663QWeYoj0t2s6COeX56nbGpUkxj1R7pCXNqT49umfFs1I9JvI + </ns1:AttributeValue> + </ns1:Attribute> + </ns1:Subject> + <ns1:Resource> + <ns1:Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:resource:resource-id" + DataType="http://www.w3.org/2001/XMLSchema#anyURI"> + <ns1:AttributeValue> + textgrid:TGPR3:Die+Leiden+des+jungen+Werther+-+Zweyter+Theil:20080327T170038:xml%2Ftei:1 + </ns1:AttributeValue> + </ns1:Attribute> + </ns1:Resource> + <ns1:Action> + <ns1:Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:action:action-id" + DataType="http://www.w3.org/2001/XMLSchema#string"> + <ns1:AttributeValue> + read + </ns1:AttributeValue> + </ns1:Attribute> + </ns1:Action> + <ns1:Environment/> + </ns1:Request> + </ns2:XACMLAuthzDecisionQuery> +</SOAP-ENV:Body> + +</SOAP-ENV:Envelope> +\end{verbatim} +% +% +% -------------------------------------------------------------------------- +\subsection{SOAP response} +\label{sec:appendix:rbacwithxacmlviasoap:soapresponse} +% -------------------------------------------------------------------------- +\begin{verbatim} +<SOAP-ENV:Envelope + xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" + xmlns:ns1="urn:oasis:names:tc:xacml:2.0:context:schema:os" + xmlns:ns2="urn:oasis:xacml:2.0:saml:assertion:schema:os> + +<SOAP-ENV:Body> + <ns2:XACMLAuthzDecisionStatement> + <ns1:Response> + <ns1:Result> + <ns1:Decision> + Permit + </ns1:Decision> + </ns1:Result> + </ns1:Response> + <ns1:Request> + <ns1:Subject> + <ns1:Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:subject:subject-id" + DataType="http://www.w3.org/2001/XMLSchema#string"> + <ns1:AttributeValue> + SID_ryytp55xUIvmoXEv663QWeYoj0t2s6COeX56nbGpUkxj1R7pCXNqT49umfFs1I9JvI + </ns1:AttributeValue> + </ns1:Attribute> + </ns1:Subject> + <ns1:Resource> + <ns1:Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:resource:resource-id" + DataType="http://www.w3.org/2001/XMLSchema#anyURI"> + <ns1:AttributeValue> + textgrid:TGPR3:Die+Leiden+des+jungen+Werther+-+Zweyter+Theil:20080327T170038:xml%2Ftei:1 + </ns1:AttributeValue> + </ns1:Attribute> + </ns1:Resource> + <ns1:Action> + <ns1:Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:action:action-id" + DataType="http://www.w3.org/2001/XMLSchema#string"> + <ns1:AttributeValue> + read + </ns1:AttributeValue> + </ns1:Attribute> + </ns1:Action> + <ns1:Environment/> + </ns1:Request> + </ns2:XACMLAuthzDecisionStatement> +</SOAP-ENV:Body> + +</SOAP-ENV:Envelope> +\end{verbatim} +% +% +\end{appendix} +% +% +\bibliography{literature} +\bibliographystyle{alpha} +% \end{document} \ No newline at end of file diff --git a/info.textgrid.middleware.tgauth.rbac/documentation/literature.bib b/info.textgrid.middleware.tgauth.rbac/documentation/literature.bib new file mode 100644 index 0000000..0950266 --- /dev/null +++ b/info.textgrid.middleware.tgauth.rbac/documentation/literature.bib @@ -0,0 +1,119 @@ +% Literaturverzeichnis +% -------------------- +@proceedings{rbac2004, + title = {Role Based Access Control}, + year = {2004}, + organization = {ANSI incits} +} + +@techreport{widmer2006, + author = {Markus Widmer}, + title = {Role Based Access Control mit OpenLDAP}, + institution = {Universit\"at T\"ubingen}, + year = {2005} +} + +@techreport{saml2006, + author = {Nick Ragouzis and John Hughes and Rob Philpott and Eve Maler}, + title = {Security Assertion Markup Language (SAML) V2.0 Technical Overview}, + institution = {OASIS}, + year = 2006 +} + +@techreport{chadwickmsod, + author = {David M Chadwick}, + title = {Multi-session Separation of Duties (MSoD) for RBAC}, + institution = {University of Kent}, + year = 2006 +} + +@misc{openldap, + key = {OpenLDAP Project}, + title = {OpenLDAP Software 2.3 Administrators Guide}, + month = 10, + year = 2007 +} + +@proceedings{rfc4511, + title = {RFC 4511, Lightweight Directory Access Protocol (LDAP)}, + year = 2006, + organization = {Network Working Group}, + author = {J. Sermersheim} +} + +@proceedings{rfc4515, + title = {RFC 4515, String Representation of Search Filters}, + year = 2006, + organization = {Network Working Group}, + author = {M. Smith} +} + +@proceedings{rfc2141, + title ={RFC 2141, URN Syntax}, + year = 1997, + organization = {Network Working Group}, + author = {R. Moats} +} + +@proceedings{wsdl1.1, + title = {Web Services Description Language (WSDL) 1.1}, + year = 2001, + organization = {W3C}, + author = {Erik Christensen and Francisco Curbera and Greg Meredith and Sanjiva Weerawarana} +} + +@proceedings{soap, + title = {SOAP Version 1.2 Part 1: Messaging Framework (Second Edition)}, + year = 2007, + organization = {W3C}, + author = {Martin Gudgin and Marc Hadley and Noah Mendelsohn and Jean-Jacques Moreau and Henrik Frystyk Nielsen and Anish Karmarkar and Yves Lafon} +} + +@book{pdsa2, + title = {Pattern-Oriented Software Architecture}, + author = {D. Schmidt and M. Stal and H. Rohnert and F. Buschmann}, + publisher = {Wiley \& Sons Ltd.}, + year = 2000, + volume = {2}, + isbn = {0-471-60695-2} +} + +@book{oli78, + author = {Oliver Ian}, + title = {Klassische Programmiertechnik - Eine Sammlung der hervorragendsten Algorithmen}, + publisher = {Prentice Hall}, + year = 1994 +} + +@book{thegrid, + author = {Ian Foster and Carl Kesselman}, + title = {The Grid: Blueprint for a new computing infrastructure}, + publisher = {Elsevier Inc.}, + year = 2004 +} + +@inproceedings{tgehum2006, + title = {TextGrid and eHumanities}, + year = 2006, + author = {Peter Gietz and Andreas Aschenbrenner and Stefan B\"udenbender and Fotis Jannidis and Marc W. K\"uster and Christoph Ludwig and Wolfgang Pempe and Thorsten Vitt and Werner Wegstein and Andrea Zielinski}, + booktitle = {Proc. of Second IEEE International Conference on e-Science, December 4-6, 2006, Amsterdam}, + publisher = {IEEE CS Press} +} + +@techreport{tgarch2007, + title = {TextGrid Architektur}, + author = {Andreas Aschenbrenner and Peter Gietz and Martin Haase and Frank Knoll and +Christoph Ludwig and Wolfgang Pempe and Markus Sosto and Thorsten Vitt}, + institution = {Nieders\"achsische Saats- und Universit\"atsbibliothek, G\"ottingen und DAASI International GmbH}, + year = 2007, + url = {http://www.textgrid.de} +} + +@techreport{xacmlsaml2005, + title = {SAML 2.0 profile of XACML v2.0}, + author = {Anne Anderson and Hal Lockhart}, + url = {http://docs.oasis-open.org/xacml/2.0/access_control-xacml-2.0-saml-profile-spec-os.pdf}, + year = 2005, + institution = {OASIS}, + publisher = {OASIS} +} \ No newline at end of file diff --git a/info.textgrid.middleware.tgauth.rbac/lib/Authentication.class.php b/info.textgrid.middleware.tgauth.rbac/lib/Authentication.class.php new file mode 100755 index 0000000..13f9459 --- /dev/null +++ b/info.textgrid.middleware.tgauth.rbac/lib/Authentication.class.php @@ -0,0 +1,100 @@ +<?php +// #################################################################### +// Version: 0.1.0 +// Author: Markus Widmer +// Created: 19.01.2007 +// Modified: 07.10.2007 + + + + +class Authentication { + + // ## Class-variables ############################################### + private $connection; + + + + + // ## Constructor ################################################### + public function __construct( CConnection $inConnection ) { + + // To use the connection it has to have an established + // connection to the database. + if( $inConnection->handle->hasConnection() ) { + + $this->connection = $inConnection; + + } + else { + + throw new Exception( "Authentication::__construct() Unable to use this connection!" ); + + } + + } + + + + + // ## ldap ########################################################## + public function ldap( $inUsername, $inPassword, $inAttribute = "uid", Array $inArrProvide = null ) { + + $log = new Log(); + $filter = ""; // The LDAP filter to search for the user + $dn = ""; // The DN of the user + $result = false; // The default return value is false + + + // The type of connection has to be a LDAP connection + if( $this->connection instanceof CLDAPConnection ) { + + // If the username is just a name, search for it + // in the directory before trying to bind. + if( !preg_match( "/^(.+=.+)+,(.+=.+)$/", $inUsername ) ) { + + // Search for a user that fits the username + $log->debug( $this->connection->filter . "\n" ); + $filter = "(&" . $this->connection->filter; + $filter .= "(" . $inAttribute . "=" . $inUsername . "))"; + + + // Ask the directory + $arrUserEntry = $this->connection->handle->search( $this->connection->base, $filter, "sub", Array( $inAttribute ) ); + + + if( sizeof( $arrUserEntry ) == 1 ) { + + if( $this->connection->handle->bind( $arrUserEntry[0]['dn'], $inPassword ) ) { + + $result = $arrUserEntry[0]['dn']; + + } + + } + + } + else { + + if( $this->connection->handle->bind( $inUsername, $inPassword ) ) { + + $result = $inUsername; + + } + + } + + } + else { + + throw new Exception( "Authentication::setMethod() Cannot use this connection in LDAP-mode." ); + + } + + + return $result; + + } + +} +?> diff --git a/info.textgrid.middleware.tgauth.rbac/lib/CConnection.container.php b/info.textgrid.middleware.tgauth.rbac/lib/CConnection.container.php new file mode 100755 index 0000000..6e95f2e --- /dev/null +++ b/info.textgrid.middleware.tgauth.rbac/lib/CConnection.container.php @@ -0,0 +1,21 @@ +<?php +// #################################################################### +// Version: 0.1.0 +// Author: Markus Widmer +// Created: 02.04.2008 +// Modified: 03.04.2008 + + + + +class CConnection { + + // ## Class-variable ################################################ + public $handle; + public $host; + public $port; + public $bind; + public $password; + +} +?> diff --git a/info.textgrid.middleware.tgauth.rbac/lib/CLDAPConnection.container.php b/info.textgrid.middleware.tgauth.rbac/lib/CLDAPConnection.container.php new file mode 100755 index 0000000..3ac966e --- /dev/null +++ b/info.textgrid.middleware.tgauth.rbac/lib/CLDAPConnection.container.php @@ -0,0 +1,19 @@ +<?php +// #################################################################### +// Version: 0.1.0 +// Author: Markus Widmer +// Created: 02.04.2008 +// Modified: 03.04.2008 + + + + +class CLDAPConnection extends CConnection { + + // ## Klassenvariablen ############################################## + public $tls; + public $filter; + public $version; + +} +?> diff --git a/info.textgrid.middleware.tgauth.rbac/lib/CSQLConnection.container.php b/info.textgrid.middleware.tgauth.rbac/lib/CSQLConnection.container.php new file mode 100755 index 0000000..ab6e201 --- /dev/null +++ b/info.textgrid.middleware.tgauth.rbac/lib/CSQLConnection.container.php @@ -0,0 +1,18 @@ +<?php +// #################################################################### +// Version: 0.1.0 +// Author: Markus Widmer +// Created: 02.04.2008 +// Modified: 03.04.2008 + + + + +class CSQLConnection extends CConnection { + + // ## Klassenvariablen ############################################## + public $table; + public $database; + +} +?> diff --git a/info.textgrid.middleware.tgauth.rbac/lib/DataBase.class.php b/info.textgrid.middleware.tgauth.rbac/lib/DataBase.class.php index d2fedf6..f5c343b 100755 --- a/info.textgrid.middleware.tgauth.rbac/lib/DataBase.class.php +++ b/info.textgrid.middleware.tgauth.rbac/lib/DataBase.class.php @@ -1,9 +1,9 @@ <?php // #################################################################### -// Version: 0.3.3 +// Version: 0.4.0 // Author: Markus Widmer // Created: 09.11.2006 -// Modified: 02.04.2008 +// Modified: 12.07.2008 @@ -108,12 +108,13 @@ class DataBase implements iDataBase { $helper = new Helper(); // Konvertierungsklasse +/* if( $helper->isUtf8( $inFilter ) ) { $inFilter = utf8_decode( $inFilter ); } - +*/ // Eventuell eine Liste von Spalten zusammenstellen, // die zurueckgegeben werden sollen @@ -185,7 +186,7 @@ class DataBase implements iDataBase { } - array_push( &$result, $mysqlResult ); + $result[] = $mysqlResult; } @@ -237,7 +238,7 @@ class DataBase implements iDataBase { } - array_push( &$result, $mysqlResult ); + $result[] = $mysqlResult; } @@ -293,7 +294,7 @@ class DataBase implements iDataBase { // Es wird darauf geprueft, ob wirklich alle Felder, die einen // primaeren Schluessel darstellen, angegeben sind. $keyInData = $keyInData && isset( $inData[$column[$i]['Field']] ) && preg_match( "/.+/", $inData[$column[$i]['Field']] ); - array_push( &$columnPrimaryKey, $column[$i]['Field'] ); + $columnPrimaryKey[] = $column[$i]['Field']; if( $keyInData ) { @@ -330,7 +331,7 @@ class DataBase implements iDataBase { $checkResult = Array(); while( $mysqlResult = mysql_fetch_array( $mysqlQuery, MYSQL_ASSOC ) ) { - array_push( &$checkResult, $mysqlResult ); + $checkResult[] = $mysqlResult; } @@ -408,7 +409,6 @@ class DataBase implements iDataBase { } - // Verbindung mit der Datenbank aufbauen if( $this->hasConnection ) { @@ -417,7 +417,7 @@ class DataBase implements iDataBase { // ist keine Spalte dabei, die ein "auto_increment" enthaelt. // 2. Es sind alle Schluessel vorhanden und der Datensatz existiert bereits in der // Tabelle - if( (!$keyInData && ($columnAutoincrement != "")) || ($keyInData && $allreadyExists) ) { + if( ($keyInData && ($columnAutoincrement == "")) || ($keyInData && $allreadyExists) ) { // Wenn es sich um einen "insert"-Befehl handelt, dann soll die Datenbank // gesperrt werden, um anschliessend den neu eingefuegten Datensatz wieder @@ -429,14 +429,14 @@ class DataBase implements iDataBase { } - trigger_error( "Query: " . $queryString . "\n", E_USER_NOTICE ); + trigger_error( "DataBase::store() Query: " . $queryString . "\n", E_USER_NOTICE ); // Sollte ein Wert UTF8-codiert sein, so muss dies der Datenbank // gesagt werden if( $useUtf8 ) { - trigger_error( "DataBase::store(): Using UTF8 for submission.\n", E_USER_NOTICE ); + trigger_error( "DataBase::store() Using UTF8 for submission.\n", E_USER_NOTICE ); mysql_query( "SET CHARACTER SET \"utf8\"" ); @@ -460,7 +460,7 @@ class DataBase implements iDataBase { $lastInsertResult = Array(); while( $mysqlResult = mysql_fetch_array( $mysqlQuery, MYSQL_ASSOC ) ) { - array_push( &$lastInsertResult, $mysqlResult ); + $lastInsertResult[] = $mysqlResult; } @@ -564,7 +564,7 @@ class DataBase implements iDataBase { } - array_push( &$returnResult, $mysqlResult ); + $returnResult[] = $mysqlResult; } diff --git a/info.textgrid.middleware.tgauth.rbac/lib/Date.class.php b/info.textgrid.middleware.tgauth.rbac/lib/Date.class.php new file mode 100755 index 0000000..97439a8 --- /dev/null +++ b/info.textgrid.middleware.tgauth.rbac/lib/Date.class.php @@ -0,0 +1,384 @@ +<?php +// #################################################################### +// Version: 0.2.0 +// Autor: Markus Widmer +// Erstellungsdatum: 16.09.2007 +// Letzte Aenderung: 21.01.2008 + + + + +class Date implements iDate { + + // ## Klassenvariablen ############################################## + private $language = ""; + private $timestamp; + private $arrDate; + + + + + // ## Konstruktor ################################################### + public function __construct( $inTimestamp, $inLanguage = false ) { + + $inTimestamp ? $this->timestamp = $inTimestamp : $this->timestamp = time(); + $inLanguage ? $this->language = $inLanguage : $this->language = "en"; + + + if( $inTimestamp != 0 ) { + + $this->timestamp = $inTimestamp; + $this->fillArrDate(); + + } + else { + + $arrDate = Array(); + + } + + } + + + + + // ## parseGeneralizedTime ########################################## + public function parseGeneralizedTime( $inGeneralizedTime ) { + + $year; // Jahr + $month; // Monat + $day; // Tag + $minute; // Minute + $hour; // Stunde + $second; // Sekunde + + + if( preg_match( "/[0-9]{14}Z/i", $inGeneralizedTime ) ) { + + $year = substr( $inGeneralizedTime, 0, 4 ); + $month = substr( $inGeneralizedTime, 4, 2 ); + $day = substr( $inGeneralizedTime, 6, 2 ); + $hour = substr( $inGeneralizedTime, 8, 2 ); + $minute = substr( $inGeneralizedTime, 10, 2 ); + $second = substr( $inGeneralizedTime, 12, 2 ); + + + $this->timestamp = mktime( $hour, $minute, $second, $month, $day, $year ); + $this->fillArrDate(); + + + return true; + + } + else { + + return false; + + } + + } + + + + + // ## parseMySQLDatetime ########################################### + public function parseMySQLDatetime( $inDatetime ) { + + $pregString = ""; + $tmp = Array(); + + + // Datumsformat mit Zeitangabe in der MySQL Datenbank + $pregString .= "/^[0-9]{4}[-]{1}[0-9]{1,2}[-]{1}[0-9]{1,2}"; + $pregString .= "[\s]+[0-9]{1,2}([:]{1}[0-9]{1,2}){2}$/"; + + + if( preg_match( $pregString, $inDatetime ) ) { + + // Leerzeichen so lange entfernen, bis nur noch + // einzelne Leerzeichen vorhanden sind. + while( preg_match( "/[\s]{2}/", $inDatetime ) ) { + + $inDatetime = preg_replace( "/[\s]{2}/", " ", $inDatetime ); + + } + + + $tmp = preg_split( "/[\s]/", $inDatetime ); + + + if( is_array( $tmp ) ) { + + isset( $tmp[0] ) ? $tmpDate = preg_split( "/[-]/", $tmp[0] ) : $tmpDate = Array(); + isset( $tmp[1] ) ? $tmpTime = preg_split( "/[:]/", $tmp[1] ) : $tmpTime = Array(); + + if( sizeof( $tmpDate ) == 3 ) { + + $this->timestamp = mktime( $tmpTime[0], $tmpTime[1], $tmpTime[2], $tmpDate[1], $tmpDate[2], $tmpDate[0] ); + $this->fillArrDate(); + + + return true; + + } + else { + + return false; + + } + + } + + + return true; + + } + else { + + return false; + + } + + } + + + + + // ## parseMySQLDatetime ########################################### + public function parseMySQLDate( $inDate ) { + + $pregString = ""; + $tmp = Array(); + + + // Datumsformat ohne Zeitangabe in der MySQL Datenbank + $pregString .= "/^[0-9]{4}[-]{1}[0-9]{1,2}[-]{1}[0-9]{1,2}$/"; + + + if( preg_match( $pregString, $inDate ) ) { + + // Alle Leerzeichen entfernen. + $inDate = preg_replace( "/[\s]/", "", $inDate ); + + + $tmpDate = preg_split( "/[-]/", $inDate ); + + if( sizeof( $tmpDate ) == 3 ) { + + $this->timestamp = mktime( 0, 0, 0, $tmpDate[1], $tmpDate[2], $tmpDate[0] ); + $this->fillArrDate(); + + + return true; + + } + else { + + return false; + + } + + } + + } + + + + + // ## setLanguage ################################################### + public function setLanguage( $inLanguage ) { + + $this->language = $inLanguage; + + } + + + + + // ## setTimestamp ################################################## + public function setTimestamp( $inTimestamp ) { + + if( is_int( $inTimestamp ) ) { + + $this->timestamp = $inTimestamp; + return true; + + } + else { + + return false; + + } + + } + + + + + // ## parseDateFirst ################################################ + public function parseDateFirst( $inText ) { + + $tmp = Array(); + $tmpDate = Array(); + $tmpTime = Array( "12", "0", "0" ); + $arrDateAndTime = Array(); + $pregString = ""; + $dateTime = ""; + + + if( preg_match( "/^de$/i", $this->language ) ) { + + // Deutsches Datumsformat + $pregString .= "/^[0-9]{1,2}[.]{1}[0-9]{1,2}[.]{1}[0-9]{4}"; + $pregString .= "([\s]+[0-9]{1,2}([:]{1}[0-9]{1,2}){1,2}?)?$/"; + + + if( preg_match( $pregString, $inText ) ) { + + while( preg_match( "/[\s]{2}/", $inText ) ) { + + $inText = preg_replace( "/[\s]{2}/", " ", $inText ); + + } + + + $tmp = preg_split( "/[\s]/", $inText ); + + } + else { + + return false; + + } + + + if( is_array( $tmp ) ) { + + isset( $tmp[0] ) ? $tmpDate = preg_split( "/[.]/", $tmp[0] ) : false; + isset( $tmp[1] ) ? $tmpTime = preg_split( "/[:]/", $tmp[1] ) : false; + + if( sizeof( $tmpDate ) == 3 ) { + + $this->timestamp = mktime( $tmpTime[0], $tmpTime[1], $tmpTime[2], $tmpDate[1], $tmpDate[0], $tmpDate[2] ); + $this->fillArrDate(); + + + return true; + + } + else { + + return false; + + } + + } + + } + else { + + return false; + + } + + } + + + + + // ## getArray ###################################################### + public function getArray() { + + return $this->arrDate; + + } + + + + + // ## getDateText ################################################### + public function getDateText() { + + if( preg_match( "/^de$/i", $this->language ) ) { + + return $this->arrDate['day'] . "." . $this->arrDate['month'] . "." . $this->arrDate['year']; + + } + else { + + return $this->arrDate['year'] . "-" . $this->arrDate['month'] . "-" . $this->arrDate['day']; + + } + + } + + + + + // ## getDateTimeText ############################################### + public function getDateTimeText() { + + if( preg_match( "/^de$/i", $this->language ) ) { + + return $this->arrDate['day'] . "." . $this->arrDate['month'] . "." . $this->arrDate['year'] . " " . $this->arrDate['hour'] + . ":" . $this->arrDate['minute'] . ":" . $this->arrDate['second']; + + } + else { + + return $this->arrDate['year'] . "-" . $this->arrDate['month'] . "-" . $this->arrDate['day'] . " " . $this->arrDate['hour'] + . ":" . $this->arrDate['minute'] . ":" . $this->arrDate['second']; + + } + + } + + + + + // ## getMySQLDate ################################################## + public function getMySQLDate() { + + return $this->arrDate['year'] . "-" . $this->arrDate['month'] . "-" . $this->arrDate['day']; + + } + + + + + // ## getMySQLDatetime ############################################## + public function getMySQLDatetime() { + + return $this->arrDate['year'] . "-" . $this->arrDate['month'] . "-" . $this->arrDate['day'] . " " . $this->arrDate['hour'] + . ":" . $this->arrDate['minute'] . ":" . $this->arrDate['second']; + + } + + + + + // ## getWeek ####################################################### + public function getWeek() { + + return $this->arrDate['week']; + + } + + + + + // ## fillArrDate ################################################### + private function fillArrDate() { + + $this->arrDate['year'] = date( "Y", $this->timestamp ); + $this->arrDate['month'] = date( "m", $this->timestamp ); + $this->arrDate['week'] = date( "W", $this->timestamp ); + $this->arrDate['day'] = date( "d", $this->timestamp ); + $this->arrDate['hour'] = date( "H", $this->timestamp ); + $this->arrDate['minute'] = date( "i", $this->timestamp ); + $this->arrDate['second'] = date( "s", $this->timestamp ); + + } + +} +?> diff --git a/info.textgrid.middleware.tgauth.rbac/lib/Helper.class.php b/info.textgrid.middleware.tgauth.rbac/lib/Helper.class.php index 8ff17a5..2ef0f54 100755 --- a/info.textgrid.middleware.tgauth.rbac/lib/Helper.class.php +++ b/info.textgrid.middleware.tgauth.rbac/lib/Helper.class.php @@ -1,9 +1,9 @@ <?php // #################################################################### -// Version: 0.6.2 +// Version: 0.6.3 // Author: Markus Widmer // Created: 28.11.2006 -// Modified: 09.04.2008 +// Modified: 27.04.2008 @@ -37,23 +37,21 @@ class Helper implements iHelper { + // ## isUtf8 ######################################################## public function isUtf8( $inString ) { -/* - return preg_match( "%^(?:" - . "[\x09\x0A\x0D\x20-\x7E]" # ASCII - . " | [\xC2-\xDF][\x80-\xBF]" # non-overlong 2-byte - . " | \xE0[\xA0-\xBF][\x80-\xBF]" # excluding overlongs - . " | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}" # straight 3-byte - . " | \xED[\x80-\x9F][\x80-\xBF]" # excluding surrogates - . " | \xF0[\x90-\xBF][\x80-\xBF]{2}" # planes 1-3 - . " | [\xF1-\xF3][\x80-\xBF]{3}" # planes 4-15 - . " | \xF4[\x80-\x8F][\x80-\xBF]{2}" # plane 16 - . " )*$%xs", $inString ); -*/ + return (utf8_encode( utf8_decode( $inString ) ) == $inString); + + } + + + - return (utf8_encode( utf8_decode( $inString ) ) === $inString); + // ## ensureUtf8 #################################################### + public function ensureUtf8( $inString ) { + + return ( $this->isUtf8( $inString ) ? $inString : utf8_encode( $inString ) ); } @@ -185,6 +183,15 @@ class Helper implements iHelper { + // ## stripQuotes ################################################### + public function stripQuotes( $inString, $inReplace = "" ) { + + return rawurldecode( preg_replace( "/(%5C%22)|(%5C%27)/", $inReplace, rawurlencode( $inString ) ) ); + + } + + + /* // ## generalizedtimeToTextDateTime ################################# public function generalizedtimeToTextDateTime( $inDate, $inCountry ) { diff --git a/info.textgrid.middleware.tgauth.rbac/lib/LDAP.class.php b/info.textgrid.middleware.tgauth.rbac/lib/LDAP.class.php index 5522d1e..d28c17f 100755 --- a/info.textgrid.middleware.tgauth.rbac/lib/LDAP.class.php +++ b/info.textgrid.middleware.tgauth.rbac/lib/LDAP.class.php @@ -179,12 +179,12 @@ class LDAP implements iLDAP { // ## getEntry ###################################################### - public function getEntry( $inDn ) { + public function getEntry( $inDn, Array $inArrAttribute = null ) { - $ldapSearch = false; // Such-Handler - $ldapEntries = Array(); // Unbearbeitete Ergebnisse - $arrResult = Array(); // Suchergebniss - $i = 0; // Schleifenvariable + $ldapSearch = false; // Handle + $ldapEntries = Array(); // Unmodified search results + $arrResult = Array(); // Wanted search result + $i = 0; // Loop // Im LDAP suchen funktioniert nur ueber eine @@ -201,7 +201,16 @@ class LDAP implements iLDAP { trigger_error( "LDAP::getEntry(): Searching for: " . $inDn . "\n", E_USER_NOTICE ); - $ldapSearch = @ldap_read( $this->connection, $inDn, "(objectClass=*)" ); + if( $inArrAttribute != null ) { + + $ldapSearch = @ldap_read( $this->connection, $inDn, "(objectClass=*)", $inArrAttribute ); + + } + else { + + $ldapSearch = @ldap_read( $this->connection, $inDn, "(objectClass=*)" ); + + } if( $ldapSearch ) { diff --git a/info.textgrid.middleware.tgauth.rbac/lib/Node.class.php b/info.textgrid.middleware.tgauth.rbac/lib/Node.class.php index ab024c7..22b7e37 100755 --- a/info.textgrid.middleware.tgauth.rbac/lib/Node.class.php +++ b/info.textgrid.middleware.tgauth.rbac/lib/Node.class.php @@ -1,9 +1,9 @@ <?php // #################################################################### -// Version: 0.3.0 +// Version: 0.3.1 // Autor: Markus Widmer // Erstellungsdatum: 11.10.2006 -// Letzte Aenderung: 15.02.2008 +// Letzte Aenderung: 12.07.2008 @@ -12,6 +12,8 @@ class Node implements iNode { // ## Klassenvariablen ############################################## private $value = false; private $name = "NODE"; + private $namespace = ""; + private $arrNamespaceAlias = Array(); private $child = Array(); private $attribute = Array(); @@ -33,16 +35,26 @@ class Node implements iNode { // ## setName ####################################################### - public function setName( $inName ) { + public function setName( $inName, $inNamespace = null ) { - // Der Name darf weder ein Objekt, ein Array oder eine - // ausfuehrbare Funktion sein, um gespeichert zu werden. + // The name must not be an array or an object to be + // stored. if( !is_object( $inName ) && !is_array( $inName ) ) { $this->name = strtolower( $inName ); + // If a namespace is given, store it as well + if( ($inNamespace != null) + && !is_array( $inNamespace ) + && !is_object( $inNamespace ) ) { + + $this->namespace = $inNamespace; + + } + + return true; } @@ -150,6 +162,7 @@ class Node implements iNode { + // ## getValue ###################################################### public function getValue() { @@ -159,6 +172,42 @@ class Node implements iNode { + + // ## setNamespace ################################################## + public function setNamespace( $inNamespace ) { + + if( !is_object( $inNamespace ) + && !is_array( $inNamespace ) ) { + + $this->namespace = $inNamespace; + + } + + } + + + + + // ## getNamespace ################################################## + public function getNamespace() { + + return $this->namespace; + + } + + + + + // ## setNamespaceAlias ############################################# + public function setNamespaceAlias( $inAlias, $inNamespace ) { + + $this->arrNamespaceAlias[$inAlias] = $inNamespace; + + } + + + + // ## addChild ###################################################### public function addChild( iNode $inNode ) { @@ -205,7 +254,7 @@ class Node implements iNode { // ## getChild ###################################################### - public function getChild( $inName, $inNumber ) { + public function getChild( $inName, $inNumber, $inNamespace = null ) { // Es wird auf jeden Fall ein korrekter Knoten // zurueckgegeben, auch wenn keiner gefunden @@ -214,33 +263,41 @@ class Node implements iNode { $wantedNode->setName( $inName ); - // Die Suche nach dem Knoten beginnen und alle - // Kinderknoten ansehen. + // Start the search for the node by looking at every child $i = 0; $n = 0; $flagFound = false; while( ($i < sizeof( $this->child )) && !$flagFound ) { - // Einen Knoten holen + // Get one child node $child = $this->child[$i]; - // Name ist korrekt... + // Name is correct... if( preg_match( "/^" . $child->getName() . "$/i", $inName ) ) { - // Nummer ist korrekt... - if( $inNumber == $n ) { + // If a namespace is given and the node has this + // namespace then it is considered to be the + // one we are looking for. Otherwise it is ignored. + if( ( $inNamespace != null + && ( hash( "md5", $child->getNamespace() ) == hash( "md5", $inNamespace ) ) + || ( isset( $this->arrNamespaceAlias[strtolower($inNamespace)] ) + && hash( "md5", $child->getNamespace() ) == hash( "md5", $this->arrNamespaceAlias[strtolower($inNamespace)] ) ) ) + || ($inNamespace == null) ) { - $flagFound = true; - $wantedNode = $child; + // Number is korrekt... + if( $inNumber == $n ) { - } + $flagFound = true; + $wantedNode = $child; - // Nummer ist nicht korrekt... - else { + } + else { - $n++; + $n++; + + } } @@ -261,7 +318,7 @@ class Node implements iNode { // ## searchChild ################################################### - public function searchChild( $inName, $inAttribute, $inRegex ) { + public function searchChild( $inName, $inAttribute, $inRegex, $inNamespace = null ) { $arrNode = Array(); // Der Rueckgabewert $child = new Node(); // Temporaerer Knoten @@ -270,7 +327,8 @@ class Node implements iNode { for( $i = 0; $i < $this->countChilds( $inName ); $i++ ) { - $child = $this->getChild( $inName, $i ); + $child = $this->getChild( $inName, $i, $inNamespace ); + if( preg_match( $inRegex, $child->getAttribute( $inAttribute ) ) ) { @@ -289,7 +347,7 @@ class Node implements iNode { // ## countChilds ################################################### - public function countChilds( $inName ) { + public function countChilds( $inName, $inNamespace = null ) { $number = 0; // Anzahl der Knoten $i = 0; // Schleifenvariable diff --git a/info.textgrid.middleware.tgauth.rbac/lib/XML.class.php b/info.textgrid.middleware.tgauth.rbac/lib/XML.class.php index 36ece33..95f612f 100755 --- a/info.textgrid.middleware.tgauth.rbac/lib/XML.class.php +++ b/info.textgrid.middleware.tgauth.rbac/lib/XML.class.php @@ -95,10 +95,12 @@ class XML implements iXML { // The data needs only to encoded if it is not - // already. In any case they are pared into an array. - // To avoid the need of the Helper class at this point, - // the check will be done directly! - if( utf8_encode( utf8_decode( $inData ) ) === $inData ) { + // already. In any case they are parsed into an array. + // The decision is made funded on the information given + // in the XML file itself. If no information is given, + // we do not encode but use the data as it is. + if( (sizeof( $arrXmlHeader ) == 1) + && !preg_match( "/encoding\s*=\s*.?utf[-]?8/i", $arrXmlHeader[0] ) ) { xml_parse_into_struct( $parser, utf8_encode( $inData ), &$arrVal, &$index ); @@ -164,17 +166,23 @@ class XML implements iXML { // ## parseArrayToNode ############################################## - private function parseArrayToNode( Array $inArray, $inLevel ) { + private function parseArrayToNode( Array $inArray, $inLevel, $inArrNamespace = null ) { $node = new Node(); // Zum Anlegen neuer Knoten $arrNode = Array(); // Array der neu angelegten Knoten $arrAttribute = Array(); // Zwischenspeicher fuer die Attribute + $arrSplit = Array(); $flagFound = false; // Flag, das zur Suche nach dem Knotenende verwendet wird $i = 0; // Schleifenvariable $j = 0; // Schleifenvariable $c = 0; // Schleifenvariable + // Setting the array to be an empty array if it is + // not already set. + $inArrNamespace == null ? $inArrNamespace = Array() : false; + + $i = 0; while( $i < sizeof( $inArray ) ) { @@ -182,7 +190,7 @@ class XML implements iXML { && ($inArray[$i]['level'] == $inLevel) ) { $node = new Node(); - $node->setName( $inArray[$i]['tag'] ); + if( !isset( $inArray[$i]['value'] ) ) { @@ -194,21 +202,72 @@ class XML implements iXML { $node->setValue( trim( $inArray[$i]['value'] ) ); - // Noch die Attribute auslesen und speichern + // Every attribute except the xmlns attributes + // are stored as normal attributes. The xmlns + // is stored as special value in the node. if( isset( $inArray[$i]['attributes'] ) ) { $arrAttribute = $inArray[$i]['attributes']; foreach( $arrAttribute as $key => $value ) { - $node->setAttribute( strtolower( $key ), $value ); + $arrMatch = Array(); + if( preg_match( "/^xmlns:(.+)$/i", $key, &$arrMatch ) ) { + + $inArrNamespace[$arrMatch[1]] = $value; + + } + elseif( preg_match( "/^xmlns$/i", $key ) ) { + + $inArrNamespace['defaultNamespace'] = $value; + + } + else { + + $node->setAttribute( strtolower( $key ), $value ); + + } } } - // Neuen Knoten in den Array einfuegen + // To open the possibility to use the alias instead of the + // namespace while asking a node for childs, the aliases + // in the XML file are passed as well to every node. + foreach( $inArrNamespace as $key => $value ) { + + $node->setNamespaceAlias( strtolower( $key ), $value ); + + } + + + $arrSplit = preg_split( "/[:]/", $inArray[$i]['tag'] ); + + if( (sizeof( $arrSplit ) > 1) + && (isset( $inArrNamespace[$arrSplit[0]] )) ) { + + $node->setName( $arrSplit[1], $inArrNamespace[$arrSplit[0]] ); + + } + else { + + if( isset( $inArrNamespace['defaultNamespace'] ) ) { + + $node->setName( $inArray[$i]['tag'], $inArrNamespace['defaultNamespace'] ); + + } + else { + + $node->setName( $inArray[$i]['tag'] ); + + } + + } + + + // Add the new node to the array $arrNode[] = $node; } @@ -237,37 +296,86 @@ class XML implements iXML { } - # Eine Ebene tiefer bearbeiten. Dazu den Array entsprechend - # "ausschneiden". - $child = $this->parseArrayToNode( array_slice( $inArray, $i + 1, $j - $i - 1 ), $inLevel + 1 ); + # Create a new node + $node = new Node(); - # Neuen Knoten erstellen und Daten hinzufuegen - $node = new Node(); - $node->setName( $inArray[$i]['tag'] ); + // Every attribute except the xmlns attributes + // are stored as normal attributes. The xmlns + // is stored as special value in the node. + if( isset( $inArray[$i]['attributes'] ) ) { - for( $c = 0; $c < sizeof( $child ); $c++ ) { + $arrAttribute = $inArray[$i]['attributes']; - $node->addChild( $child[$c] ); + foreach( $arrAttribute as $key => $value ) { + + $arrMatch = Array(); + if( preg_match( "/^xmlns:(.+)$/i", $key, &$arrMatch ) ) { + + $inArrNamespace[$arrMatch[1]] = $value; + + } + elseif( preg_match( "/^xmlns$/i", $key ) ) { + + $inArrNamespace['defaultNamespace'] = $value; + + } + else { + + $node->setAttribute( strtolower( $key ), $value ); + + } + + } } - // Noch die Attribute auslesen und speichern - if( isset( $inArray[$i]['attributes'] ) ) { + // To open the possibility to use the alias instead of the + // namespace while asking a node for childs, the aliases + // in the XML file are passed as well to every node. + foreach( $inArrNamespace as $key => $value ) { - $arrAttribute = $inArray[$i]['attributes']; + $node->setNamespaceAlias( strtolower( $key ), $value ); - foreach( $arrAttribute as $key => $value ) { + } + + + $arrSplit = preg_split( "/[:]/", $inArray[$i]['tag'] ); + + if( (sizeof( $arrSplit ) > 1) + && (isset( $inArrNamespace[$arrSplit[0]] )) ) { - $node->setAttribute( strtolower( $key ), $value ); + $node->setName( $arrSplit[1], $inArrNamespace[$arrSplit[0]] ); + + } + else { + + if( isset( $inArrNamespace['defaultNamespace'] ) ) { + + $node->setName( $inArray[$i]['tag'], $inArrNamespace['defaultNamespace'] ); } + else { + + $node->setName( $inArray[$i]['tag'] ); + + } + + } + + + $child = $this->parseArrayToNode( array_slice( $inArray, $i + 1, $j - $i - 1 ), $inLevel + 1, $inArrNamespace ); + + + for( $c = 0; $c < sizeof( $child ); $c++ ) { + + $node->addChild( $child[$c] ); } - // Neuen Knoten in den Array einfuegen + // Add the new node to the array $arrNode[] = $node; } @@ -277,7 +385,6 @@ class XML implements iXML { } - // Erhoehen der Schleifenvariable $i++; } diff --git a/info.textgrid.middleware.tgauth.rbac/lib/iDate.interface.php b/info.textgrid.middleware.tgauth.rbac/lib/iDate.interface.php new file mode 100755 index 0000000..8e25f35 --- /dev/null +++ b/info.textgrid.middleware.tgauth.rbac/lib/iDate.interface.php @@ -0,0 +1,19 @@ +<?php +interface iDate { + + public function __construct( $inTimestamp, $inLanguage = false ); + public function parseMySQLDatetime( $inDatetime ); + public function parseMySQLDate( $inDate ); + public function parseGeneralizedTime( $inGeneralizedTime ); + public function setLanguage( $inLanguage ); + public function setTimestamp( $inTimestamp ); + public function parseDateFirst( $inText ); + public function getArray(); + public function getDateText(); + public function getDateTimeText(); + public function getMySQLDate(); + public function getMySQLDatetime(); + public function getWeek(); + +} +?> diff --git a/info.textgrid.middleware.tgauth.rbac/lib/iXML.interface.php b/info.textgrid.middleware.tgauth.rbac/lib/iXML.interface.php index da0f18a..132a5d0 100755 --- a/info.textgrid.middleware.tgauth.rbac/lib/iXML.interface.php +++ b/info.textgrid.middleware.tgauth.rbac/lib/iXML.interface.php @@ -2,6 +2,7 @@ interface iXML { public function parse( $inData, $inName = "default" ); + public function parseFile( $inFilename, $inName = "default" ); public function getRoot( $inName = "default" ); } diff --git a/info.textgrid.middleware.tgauth.rbac/rbac/RBAC.class.php b/info.textgrid.middleware.tgauth.rbac/rbac/RBAC.class.php index f928ffe..7120a35 100755 --- a/info.textgrid.middleware.tgauth.rbac/rbac/RBAC.class.php +++ b/info.textgrid.middleware.tgauth.rbac/rbac/RBAC.class.php @@ -1,9 +1,9 @@ <?php // #################################################################### -// Version: 0.2.0 +// Version: 0.2.1 // Autor: Markus Widmer // Erstellungsdatum: 31.10.2007 -// Letzte Aenderung: 03.11.2007 +// Letzte Aenderung: 21.06.2008 @@ -284,7 +284,7 @@ class RBAC { foreach( $this->arrEvent[$inForFunction][$inEvent] as $index => $eventListener ) { - $evalString = "\$newContext = \$this->arrExtension[" . $eventListener['class'] . "]->" . $eventListener['call'] . "( \$newContext );"; + $evalString = "\$newContext = \$this->arrExtension['" . $eventListener['class'] . "']->" . $eventListener['call'] . "( \$newContext );"; eval( $evalString ); diff --git a/info.textgrid.middleware.tgauth.rbac/rbac/RBACcore.class.php b/info.textgrid.middleware.tgauth.rbac/rbac/RBACcore.class.php index f91433d..effadab 100755 --- a/info.textgrid.middleware.tgauth.rbac/rbac/RBACcore.class.php +++ b/info.textgrid.middleware.tgauth.rbac/rbac/RBACcore.class.php @@ -1,9 +1,9 @@ <?php // #################################################################### -// Version: 0.2.5 +// Version: 0.2.6 // Author: Markus Widmer // Created: 31.07.2007 -// Modified: 16.05.2008 +// Modified: 09.07.2008 // Requiring these interfaces if the RBAC-Framework @@ -818,9 +818,6 @@ class RBACcore implements iRBACcore { } - - - if( isset( $arrRoleEntry['dn'] ) ) { $arrUser = $arrRoleEntry[$this->conf->getValue( "role", "assignedattribute" )]; @@ -1205,7 +1202,14 @@ class RBACcore implements iRBACcore { // through role hirarchy. $filter = "(&" . $this->conf->getValue( "resource", "filter" ); $filter .= "(|(" . $this->conf->getValue( "resource", "namingattribute" ) . "=" . $inResource . ")"; - $filter .= " (" . $this->conf->getValue( "resource", "aliasattribute" ) . "=" . $inResource . "))(|"; + + if( preg_match( "/.+/", $this->conf->getValue( "resource", "aliasattribute" ) ) ) { + + $filter .= " (" . $this->conf->getValue( "resource", "aliasattribute" ) . "=" . $inResource . ")"; + + } + + $filter .= ")(|"; for( $i = 0; $i < sizeof( $arrSessionRole ); $i++ ) { @@ -1896,7 +1900,14 @@ class RBACcore implements iRBACcore { // Create a filter to get the resource $filter = "(&" . $this->conf->getValue( "resource", "filter" ); $filter .= "(|(" . $this->conf->getValue( "resource", "namingattribute" ) . "=" . $inResource . ")"; - $filter .= " (" . $this->conf->getValue( "resource", "aliasattribute" ) . "=" . $inResource . ")))"; + + if( preg_match( "/.+/", $this->conf->getValue( "resource", "aliasattribute" ) ) ) { + + $filter .= " (" . $this->conf->getValue( "resource", "aliasattribute" ) . "=" . $inResource . ")"; + + } + + $filter .= "))"; // Get the resource @@ -1905,7 +1916,7 @@ class RBACcore implements iRBACcore { // Get the role - $arrRoleEntry = $this->conn['resource']->getEntry( $inRole ); + $arrRoleEntry = $this->conn['role']->getEntry( $inRole ); // The resource has to exist and has to be uniqueue @@ -2008,7 +2019,14 @@ class RBACcore implements iRBACcore { // Create a filter to get the resource $filter = "(&" . $this->conf->getValue( "resource", "filter" ); $filter .= "(|(" . $this->conf->getValue( "resource", "namingattribute" ) . "=" . $inResource . ")"; - $filter .= "(" . $this->conf->getValue( "resource", "aliasattribute" ) . "=" . $inResource . ")))"; + + if( preg_match( "/.+/", $this->conf->getValue( "resource", "aliasattribute" ) ) ) { + + $filter .= "(" . $this->conf->getValue( "resource", "aliasattribute" ) . "=" . $inResource . ")"; + + } + + $filter .= "))"; // Get the resource -- GitLab