From f6c31c1031f82b46768fd426e8ab12e6aef00b9f Mon Sep 17 00:00:00 2001 From: pioneer Date: Fri, 1 Jul 2022 14:02:08 +0800 Subject: [PATCH] open --- JSD-9827-需求确认书V2.docx | Bin 0 -> 61690 bytes README.md | 3 + plugin.xml | 19 ++ .../plugin/roles/JSDCustomRoleResource.java | 203 ++++++++++++++++++ 补充需求 | 1 + 5 files changed, 226 insertions(+) create mode 100644 JSD-9827-需求确认书V2.docx create mode 100644 README.md create mode 100644 plugin.xml create mode 100644 src/main/java/com/fr/plugin/roles/JSDCustomRoleResource.java create mode 100644 补充需求 diff --git a/JSD-9827-需求确认书V2.docx b/JSD-9827-需求确认书V2.docx new file mode 100644 index 0000000000000000000000000000000000000000..bb4a325e13a1abb0b1de645749f766738a1cf94b GIT binary patch literal 61690 zcmb@tW3VW}(k-}c+qQMKZQHhO+qP{RXWO=I+t!?W-@J(VUd*3~nEp|nk)6?%wN`gl zcV(r#6fg)Bz<-V~*#rLnod5R$`A;ymGm>|-vv;DG|7V8sPXX~?vq!%UTQfia0Cyk& z0EGXinSs4Mox6>7j>4qv00Tmo+6A9*JNZnIJbx6T%w&aS0>p7RjTxaT@@Aus@=uR! z1wr>qD>HGNnVbIoa!WsC465YJAdBn(0I6C_{HVv@8r69cm};X&)0#wf_*wHo(C*%# z76q&rWOHCU!fS5p>_uil8oPQU)|bYo34x4Q4*2PW@<9Q6Z^f@Bp>y$65~DypIFlHc z;=0iNVFy>o-#;~|w~yFx$D9OeXe(FYsc8Ikz*or?w9{me z@skiHgD{6PdXc5W&M?OOeNpj09+|-H(mS*DMFt%WOG&^WDUQ`O!eL8Zy8zbgRt--D z=K(Ef0bAiaKZCX|CAlA{zR$f!1iP|-O^YyZk!A3{UfYU+AyYNm0+~;v$~vFP+&?MJ z@Fgx9b*8xxL(JimbV5ixhO1=9y?4DJUlllcf_$sMGjEdG|WE34U1yaz4L9 z=koS97{0;&Cn<_A9)j-wNNM~>3gZ8h6eBxFlmD<1k|-lP$bb;?D!xVd!0VFzBVWyu z0^lN2B8d{Prt#9;B91f3`rQt40JPc$qN}qQ6Ed$-zeA*aotzw;OU)gFXLgLZwduFB2gbePAS!nSCHbA zX=wcp>Q2%k6@JEJMwbM0st_d0|)^BzfGK+J*-Wf{sZQ< z&!!X3sK>2Wuo#fhZO7uPoAQBNZfed8)clpMozq*qf_&PM<#W>w$YRXyy zu2^CmNg2s{1B#k7_34mFMB&vhX&As**%$Qbc1G?GUGMG2 zw%+$<+GqF1wl(|3Nl;A42Xhp3i}l z*I@4(?qIybdXCz|OK~3Ti1UzHmv+u>CekAx8p_@%2(bEI~N8O*-Qmc0G4+c%kzzLj{^z`1aM-@qJb;h655_a4~ z_+f3KZ-{*Jy{(V^?#f&pOE@i^+c6>Cw)nz#rmo6fgtu(_^I~ambnv1tc8w?I-X2Rf zwlp}qzoTM$U&&t`JWTixSF1fAG`M-cv^&6bR(6m~AV@8f%7A!ja$tusAtO|0h+nLm ze!f|ezav1scL#g@&J#>LjG9z|I7_ffEiNE;W{^_ znbqZ3V|3bL`Iq!$=uCFCtvwHWMd>_rx2>71{S&bM3C9y&QlvDzEt82SJNuR8miQni(K7jUAx)Ig~qehiy*=U8V7Z1zza@jHZ2BdE#Bao8i|t) z!B7u*r(c^1i3c06bpFwZNOSo;#AP{m0oSl$IB&ygEa_fmLGoVf;;AcW6bJ)~$|FIY ziGe>8W&(d7)y~dJx(9@u=yV|3wiBeAq>`-#d^DW~hm75H?I7k7^zzl)%zpCJ__AT! zUO2;^zG-;BsrSU zxpx}EzILic5P0c0%-v>S4>qYvOFFWN7QS({gU{6OxjHmYQh-5_d2d+5Xi9C-nl^ZR zsrPV~CmvV2lro>q8gaHh$?M{)1x~|+$zl6Q(49B;(p_6^QDgNVnp%U`YzIi31KE!Ax^A`y7LnDr`xu$g+HxTww z*cA&FbxQu>`{i^P@Bt_UgD09m{`vOi&xYL=wU2D3X z^W53b>TRC#s;-lHLY8&9{+7;lXvY>ZK`Pa$nxA^RQ<{D@CEL!=G(s6>-aZWbGA)>80h$O<5z%zEwGN z0&N@Qn9f$p&4EtSUhnpP3sMOIw7zx|*6-bvi_>07Kl;gU6HhD6Y^80o_X8GR1x2DF zNzpB{u$?(5So5Dq5W=@o`EcFz0W42F${lOarMk35hwD=L$FJ*AnLD56KZ84^D!zI^ zzh~}{Uq!E^cX2yueSDt(QTY5Xh26O%?dC3cXLhji#5QD?@{Q~s#khgVw~#p&?oQJO zhwgjl#-uG9?zr4-Ok3zXuSNGXcr2^LhNzY{5;m@3#>mUc4*S?%#YCql@ z5%)YfeVQ1iD%b_MYajN8m+r$cG{{q` z>J9rwfC}NfypJENWKY3tLgr(_$auLIiWdM-)@6dOUcI148v#h~A=DtMPwY-O@!f|a49PVx3v#u4SZ1H3-=2nZP z-53is_EP3hufU1cg+s4_v3ilh(6w~n zu5q?iLOqhA@+cybmKy=}r`tZtw^Y(YJy{(Z^8~PI@Imq(H>aMHn zvtHD%gHe{yOB?~>GuyVFt#se9`Ki)x;wNdrJFS_!wFfZUf9soMK#_4L@$5&u#hb_zVneemm*D+wAo%K2 zMq#+1D%%~7PJ*s)&6(PM1H89k?slN{K+Pe~E|4qPua>@DP^;H0Q~Ec%WTuwg1r3lm zViA2luOfV25LhKeL?ZZ>o63rcpt}YoG-LpjGQZNj{u7Xa7FAF!=Zb$ZWhmAYchzz_ z5ubv-;VZu_N6WXG<2?W=cLe_IDnFA)$~V7n=pksw)%LyN<_NsjQ2I!$C3IXE7tfUg z1`3ZHF^qF+T1q4{N>-9cl|&KApq*%(l~Uq8n<5W1t1{SPi&E+#<>CqfCaWnJn~Gc! z3DCtfx!9W*Te20Npns0cE5<+WXpEjFYwdDVvHq_vC4dgcB5uJS_V@ath|gzL=~+m( zwe_T|bm3lzv(iQ zOo!xVbi)4(`vwQ0&LqRWy;zEt${z51lz7RGu_p3V!rV{at@St%da>m+ou#9KxFVkJ zlY{=0^GEnJ-XFk0JFL%G9ZaC*(;S6eTCM>}XQbE9*hougoe2mS$S%yAHmk72^`kYLy)()0mIBsWqvHSL`_G)zZ8%n5YvwY@=J6KLUMLe-5RipKzG zoaWO7qZv>cWCOYN)}%KtcM=EW0yEhy)odjE+^YI_2Bn*}z&?E>X|%Ht%=S3RfDJn_ z$S{NM($bvyTZK61ya+i)WM^$%y<}u1tzbHA;>cTNoi0V@vMtUqnJtN zhXeWc>1fv%ej0?Hr)^!mQVCt7&QyZFT)5dR}4`Tsq3TFTA}$FzX#U^%Y+(E--W#u0<+X!_s>iwV?_I@9>?U0VKiAN zf#QXGx7xC-E3FDr0kgOp=#mo{Fj??WETVwaAnXWApWw=Zik`r&l*L3rgmvM<6Zxf7 zRM*Ey-YLp8!Q#-c8JO^k2=V3wBsCm?bv_!3vmc_1-$ZpowDR97(0j`G!1V?&!}4Zh z&8GmhoLkmhGj~Z}b`cIFJAcsb)f;%hQ_2uw?=SS}HZB z<1k*X&|*HIa$NwG{L&LG7*?fGAS@J2OTzpq6_#UK%ziokRXa82iMMBo>ty|pI6vYp zRqJ*FuMGVTc$E{>OzeFqtT_%*-xd~(C#bL$6AzKbWoHR8P)Mm$_OTES*37ASHo09& zK8P&r%6cldR+62_2-qG?@;{L1M#Pk5!e8MuP(riDj9!?YY#6A@pyV7J2MFSaJ=&&C zj0TD@y!)7nPmy{G6Q9RX%ZiDxU6}R(i{>0+oEWTM$)_rE%1RO+O;TQr=rW{3I%gNG@MgG~&hg7_G0D9* zJ~r&R+p`LbIbki_$*V(VLE1-^zZ21<r z1?$YJYn(*EYWJ$^fSFBjO>7{&Dr?WG+ufxytfJH@#D{EVk)51H%1fb1b~Ic zLm3A!K7WYlnmfZS`L90D{_SZ7i$5Th^zm>B>7g6ri56B{$><^XKDTFt?*LY38Kvbw zq*3z_rj`Flnpr$AzyveAjCCX{)Bz2e13A~PcFYb?D2t9V7|}@DiRS5dn$nHcji-{^ z$|nimk1_^!vieijN{Jn`#e^#;y0av2@9NH;dUQpT#Yj_>y9y*~#()4nQ%8+;?5whM zR&NcK?e&m-cRoMR(G1I>pxzr^3sKD+$shRs+G+DgS!Le(bTPp&??|)X2cwbTsv-K@Mb^#4ZLC~h$TX{Yw+Z{8th=xv3Sy;UyP!B zP>UlKXU(F`a0D?HxYfv9&0I?heLGq#jVv&oMuHC(cY3eDJ-8K2z(DwjktfnjyDmOx zsMM__N9Tr|Hcsv?1*(}8Hehp8nzORF<~)T$ikYRvagKu%PRM%Hf{Fu)MhxYSdd>#m zH9I8`#5LfwwrUq|+9<)3m$;afP<<99--nwtu#P^`Zi!KGwLy;<8$G zOHNo^>Ol7KPIzPPv2Bkz^?6HYU(vtF^*p_Py(`{{OMvr6FgDBkk(Q(}v^5pQ%y=3m zTck)j&iSx{v~rJmNdGi8pzTZ$xzA(@+=`Fj5gKs_0cj}VpMW|iv7ELXJ+|q;u-BO) zuC@-GtqpY3vJN%8=j*p17t4I|I*{x(`s%q}Ll~b-t5)pti~c|ysaIal`YAkox)N`g z>aMLdhU^@P#)`@`aXg$+1?p71^>@`gVYM*x&)ESS*P%fXY3oyeRj|0D@dqTR#!Os( z!xxDu^k`*V%QzZMo**-7*H)7$weYpMJ#VQrW>?B9MNq|5r`e%c+aqJ1fGFBo<-tZF z@_~mxT^eC>Rc&?10yP1BKy^+Se{8IG6GxLdx3 z$D8veNL`zvawTRu3WA%qIbNXR2{eLt3nv^%$f;>!B&TlQmCXmfX2*IZt9gjF4cmm* z-X`$IT${n=rMnxhhMk%_y(pEa6ifdSI^|*`E6vo@=M$W^hrlfXwqR{KWMtB=&+Yx? z@9A5ARvA2Rl}pZDEc(rs?n^Txg1j_`RSPB5L;Uq3<~zm!_Cf;6{%b*sBMR>ne}D0fp2ukId?;m5+EJY($Xk-te6 zanBac5kY6ts*BlVWLzS?O3vCDJ}P%`Z!{=mD*gLXwWHw-k-gwuFCeiNCGRB9j9R! z59KP3v!!0Zb6Yg`H53h(=-@83I$Y4IYdvB=lkrqN;E{!gqfi!-Oi$8hR(SF8Q&IcoR9MsF^al_w!38|FKw9>^oRFSUZ}r zmS*Ecm2bkQ?Il=1)3(mmxNlRJ^P?C)Uf)-E)m2sjBA^VCq^O+`G^XFa34VfKloIMW z;3oB92#1fG??d{XY+R199zFtANrx;+Q3L_ySL~K*`JjSTs^SCq2G+Z_hVcu5BK-$y7EZ6S+jf-t|%PEli6GpQdoG4 z02NK^46__87?&B9rztLczUKZd=9l~DK!|$#Epq?^n(RzolznG5j12%XN+3P_47W7U z(nI3D&hq;Ybyak@)ab3xuXMOLberNwE)-FwOXp&k9d7Uar&yk^*N@^@r*I=Zi9YPmZ<4tUr0&OR>r){7Dj9s=+e@vMq*pz!hy7Xk zE|ru3iBKWkxOIAE%EHvN`xRnMo3 zafryi;(tCEd7M2NiG8HspOAcZxf z08he;(-QwOLsnd_M#*~tn9x)~i&E9?!XM4@tCSo>jwT78q+e-FDP<_)6izDGp|9&J zQvG+NV9>1+xiGiOxk0gewpr@ZQ?53sy$m?Ci#QR~in?!#@G`n|z2abrE@))*48rY+ zXtK|Dkl~oyC?FsTYJ(I#J6z%t3H5>md-xLu_RjtoH+4;+M1O~;zXwuztYQD0GJIXz z9|cL6g0X-mu4|#MA}3D>FcBwBLjw8*b&&kQ4l)lWkD6Kna&Tc>~KP4eKrUb zTh{wQnCeMqSGgbgBLi#O{Ft<8aMeCTmiP-;IO$)%B5`~+YYLu_)?84Vh4^qhD5Orc z>C@ht)IY!AdK%9RjD^cSHywQs5hya^gn$yR&(xE@TdWN|!R@uftj0PPGR!9Vpntlb zkY4bFr-K^N4_s7s60b}MN?L6^mpdfk#VvRocrO#P4D(`tDj&1_*1~L$F%1J?G`rmI z?rs-5)$rynG3BvwWo}++x;-V>75`jdcm0v>Ksn|yDja>|ea54^@HyA3P~7D&ySYg+ zWNL>5B(mp_T5J~h?Z!+mK#CEIV?Lwc3+-yix_1zQss(j+rGH$QQJybNn15>&naQ9R zH=byqY{?#Qx(t=g?3!T_WYwnIAsd^B#o~ZkyDeM=Q#D{oE-br=EPl*lmF1SqBD?cS@O&cYCQ2G)9qH7fMUvMC>>Wpat(g3)9Iv~1)33r1{6aPrcLzi+n~3|pUZ{1p zG|#Zb5{kaPk9}$!wN}CrJ!5^~6%Wpx!a$w4r@L_UF;OlLlzAEl(j4>9>>Nx@iE6`n zil9mQ+8A_N zd^_-Q-VQ!144hZC!la86M?+X)be6Zrt~<&vftE%>Awhc~K$4t3o=Ee!Gayv-Pkmgq z?XJ3(hz&<;xnz>N19ro?K|D`AxR)Ud@MLA^&|wiadR$!_)X@FQ4xl*vlh7<0o~? zq1=x9)A^-pBVpM$Rh%mLpPg%Ii`vNVr3?W$aAIV_p_FT51qg4Fs$q+iuwZuYM?yuk z%`2D)*_i3ZD)m=!cnc!4dO+`f+OIOpkg<6}l5Zy`W>PUn0jLO6FB;6yha>*_jr4KA z0#?Wv>}Qbp3~K3kr&Cz|V|GAf--oI;Jioia#jxL>x47F6fYi1<)G6Fb`}ngW8W8DR z@kT|?vLI!0fM*frW)bMcJ4FAYB1wR1kkKhWPUyil=EzbaEA@)RNK>3hW$nlk!$1^B zDoHLF0P`z9ca`RqL{S`*=<(2&#a>dL1^E0u+97|amA=0B6U)OKRz zWqI~E5iX9jsHVj*$R=7K=xZC8nRK;6Z3zMKb^=_xS#h^~`mOzzugHm7Os^0WKxi9H zVg|-A07#-f&~IK7H|Xrz;{>C&eqTp^y--nM8RZ(|0qW{wlJ(5^z&iF%F=JrES%cLc zX3RmupO`9K#M>kjO(s^@?Lx%12s80!ofsXv_?*i5eMfpzMF*wfe8v~sz2{fO;KN=* zeSle>6@FbwpuDXtooDrxpU^d{ zJF`4|%UnGeZhpRndDv_1*Xz{-0}`jJ36yQ~1~kk=OTyS|yLAzcxYwCUah`;sQ&col z#uYUv^Q_Hj6vCMGVI~XSR*rRBrYoW~$tuOvhy5qw0S3+X#g@u>p*vMcGrkzr2tn>Y z_Ja4EWkJbt5DAWz6D!6?M`a<@1682VK(Q2Gg7UI^9;uo}-k@BssnU%^J2674Rxnmu zL?)(c6Q6~aEBZ6e@qYb@C4L+H&uR>T*@vPpwsxDl*s{|$ zQa82ssPx!X%2tklX>&s*H~ig6^@H;oA0=jeF*XWjU+}|~2?5NR0!h`PH}aB*^7Kp0 zich2crOmu!#Ko8WI0`Wy4gx<%pZ)S#p*;mrMJIsyR!b-#;SLt-5Qn%a&K)T|1|2-v zReD@8KryWh`8VO;s9MoXvS-X2!i@EREDxKsnkoGy#lt{OC$`B(Idi2N66MAIRa3Xr zSfXO{Y-K{5y_O7A$-$D%=xezh-{0}g-{+$ozX;S@&fD&XFk(4Kw?1A4z`$PI^HqBy zEk`IAK~+NwY4oP#alQ^7)%RU>`w{8JyF&kvOh3fLDMq4ZKq4IYspf&hRbLU*g#1fVjxMwRiWKf`ToQ9o~;}el+ zU|u+}O!pp+fIE8USDa-)yX?mH_0GC=`_O0%)O!*HqEI}|(gH~GZA@g$P06$UP3?g| zNVM{N+95IEMpE~HHW@4=WNMHY!#$2)5S>jcSLv56e?Abg(lL%sYU1zMUX7u>?9yeD zkbET(N6sG94XVI~MXiP1^NAMp#TB4<73m{G_}!ffDc)L^S*Eb`X$)YGt4hQ*!w--H zF;Hcb2IK9g*#_eoIkJC%&i5fC4&;a2I+^?Ffg~`tCvT6g(>S;HwRZ=eD#x{8GTl1c zvJP!|(=R8}>1aJNicahSOh(&#BF?SwdVjR6x1q&h!30v5$7U!amJK}swybLM1J#?; z&@$}uN=w@XvmyqT`<>-oB8{{w52h6bh1za_z*;3Mhfgpr))m2)m1dnGB2MBToyodS zwEv7gRmcABe;?}kIzJS_7r1o0!ooFPB@EIu$zEem8>HQkKBQn-8^UX?H=!>Bspi_s ztx_6Dmh@7|)a{pU$aAC1b1C=EYuMamCYW6 zf+I-DW=}OBII;kUBy|mrnJ3@eSz_w~X?C9C9)B2O0ZrBqXxq{-$l#|>ya1&$95vVx z)%B*d(DE`yGLY0(uQZs{Y-ZR$A8HtVh3sN}`f=5gwqur-I4PFy>O$F63PLxdIPxI% z?;tgh1P*E7rA@-zH24VsR2r}}sAb_rcGwAa5Koc`vm^`pw&ry9h{=G`f-c z?M*lkPZs5b$Y2g5hato!WohsHKzH8K4r>;iz zKBCN_8b$vpVZfsCB00XWM{aK&^k)<294KJ{fs8;3+xCiN;eC4>Q{c4*gyZ2JAd^(1 z#&)_my^~cD5BO{r1k9IvChIVNzJL;tBTl}A9&u0b7@4 zRZGRyTDZO2~#wHm{Dr>BLk{8GC+$&^fT#iuEyX4X}k!@qy153@7$+@JQs zNVA(fHEH0n*8ZL;;o;qOJ_#2fG%61#OuX6xWGpeNrr3~=jF9Nh-!Dla-7g%5Y_~%! zMPd@;^?ugsr{-9gVq9i(d*2}rUP}Qdl`!PjN!_4Y zD;MiWa9#uMF;S}vY?=pip)gtd5bl~JC~Y`7#m$1}eS76flwOtnPe0saBqrU>eB)KF zdBpsJJ7YU4iiF!ptRfQY0RGMELy=aJfEEr}pkm^J^2gGN)4O0+puK%w)6hF~n!D87 zTazE>`#OFsKCk=NxLeTLWD*a>&M*$dW@e`q*M!}F7lT61;0c6HkeQ5n4)MFb--6=g zZhmj><9aDbLYDdt4dcNF-28_tE_O1nNcpA6=!IMF@AHe98q@dJ&x3Z!@H{b%!UQQ> zQshFnt<^g-a2bVFVuB4C|HK#H({DO78(J_K6&=d`@XNx;aM7_4508WK6wbMoP!C-wX9g0b>sd#=4S{6gLf4 zPE5xbXo68OxT?ftB$QamCXoODAp|gizN#VFKko-vFwZ$w$tqT1CK7b4;Tr!VV}DMn zmOW>lT%jF5#Q;L-G%ta3rgiJ$WZuIz?uZr_~+kU8)iiabG4r3$0O(`>*nX%F+`=gq0Y%rN+O+@N>YubuU zl|(;T2pV=;MCf`vU@Dr^l@{_c|1&#?Uw*lb=kpFz4b?)_4QvY}cus&}KsuSH z0OAlXr~hsJwspY;e5CRK$1^vNnO$aXQQewdTh7jcNCWVhm2C zr_H%OB)nJ%HM*ro-6FAGZ?p5|N6f|og;m_;EK9D(2_|*qP%8 z0IT3B)YLaDuFoA!JWInc)&ng2jA;p3>ZN`sS#ALW6DkaP zQVdlR$j?e1@_e&m-(-=6QB!!Wx6K6Q@p@zLbv znE8M+5R|gW1Hh8aC%(d<&uv{hBS1dputkI{6;o)*Xn5OXm5_VLcubA)^7???%g(XT zYXH5R&ZyJAy>yEOvAmy9<27@zW9fJbZaDg{1$s?|aqE($2AGlXe%?^1wS0XMXp>599v5mbnpM^n>da3J5c7Z{gA z%sRtjp9}qYG8pGlU4>VO#7^9sqHOu z3lmxvvNn$`Z-*U}D_f0>-0V5%HhEJ)_^SB&RS=ZMau$X_(008uzKcRzcsPEaCW{01Y$>b+z`WsH#y<+8kziP;NJ397Rlyj{?~h-m z9&;rfe9zD6BbLfM%hzRCDF;y5_(_GrmI+aaE}+WWJ&}Q(_R);UeA*Z&?vxL_reFb5XRVP(D`j?%k4h^l7`jq3~@cbB~2@3rY zyDrSBeh=@nc)P!(T2)~CaLu~QwgM2OIA7SEn^QBvp}mVDaS4@h-6*i)N+@>nU@3MskZD7|orDX44cL zULkgU)*@zz)e)BUxzWhAg-_)~D~aILuOiH$VZz(@R`BVLo7?zZ7j6XaL`zO(^-z@^ z8weWvX;zKcLP0Vo|IBW{6%dbsWeOdJ;E|c!`xA$3-l8%ajtpMCdnz!`n~`*t^B)D= z0Icx1)_t88u#?UZJB5}=d+kw$ysoJr9hRg}hA~qg@#2AQTicHBrIF#loU3F_1tixn zYj;ew2RXSa2V4+~lF4>0asf$Hwi2uX)g6Yc0JCEVwaXNY_Uf*^8So@r@%>)z-nws* zf28(?tputeS6P^gIoWX-d)^XKvi!n~(0{;6@%cE%!Vc5K_d5d7A=4BWk4@*H3XB zaEspsO|C!ASXh`fT%E8n`-_nkkVrK`QJ;x1dNmbPn;ie=Ev&I5oiH->!c>7>bq(!~ zALvI3ISD(ucg*ukdEi4ap0*x^)^b17*lFJppiC&P67ra8eDSP5VM667Z$w4Y5_(IB z|FklagM#@!nywF|FcSzcqz+L8g;9LGaTpCWnH`R*>T0n)iQ4Zjv?NJms|7YOu8e|l@xj?7C+V0HU|(|4eu(xZ#BDM* zlJ$PF!XC7MY8ak*RXyA$h9RA|N90#|5CH}<1&aMRryPCwh6(e=NVCz|`Vh!7o|8C? z?#!II4_%EY0Yo^hfl(kFj0YM&^J$+VGJR2C?rR`fun# zd8?ub4F>EqCL0~+fd(h?GQa5jvpr_Q?6{Nq#W8u2XpSF1cSw2KK37t&3 z4tIC0;Z}tL2bC%v1OOF#!4=9e4|wfAo)RF;W=bXT7r=Ce`r~(X9z1D3k$(SNZYvjQ zFZp&&j_QM8DOSOQGdfL?u*ZIbHK;6Ww4CR#g&XyQIr_Pt?T}5~e`fWI|38b&b|6oN z$Z-JxJc9pME#QC4rkqTioh@w5{#zB*l4BKzBasr?Ti5*CfAQTB#C(%M3lk}I!gK{g z0MnT_xqa+lQCX#_vdlVIx6Ag)gvTvM0HVoXm{Uf?%ycl+-gTPT`}M4M^HRraD|fnm ze|IwRW%$>#g=Y)L&MoYANBjF-Zc^=Vx$4ox>F@ScT-bG16@Ke!mEP~g?(cP4UhVAW zqzE5Z?*c8{>1AgYn;Je{+UMnJ-7Fh^t6SD1eeCOIQ21?JS?9FKFSpO@hpp4c&;CzU z*5UT|NuyWW<}DpxSL+}`U9O#zx6`vdr#9d2K~?AW^tn54Pj9tQZQSkdt!?Y>6 zQyllJg)!F-_m&NO+9-Jsugz=b;Jy7%eJ5Y<*7Z$Zcb4w`;G_)iPj}jzdz;_;HaYWG zw;pfrP1)i3%P8XS*wYH&YuVxSi}woH_H~}_t8Ek4mpk^MpKB3*+6TJk#j4z_Z}*Pm z;PlS;#aD<3v|=XZ0|?$u5XYgw5M8gO;f-_G`*kIupSW{);>B_F1r3$=stUc5NB zI$oV!J2|!uk_MwEwK}x{u4zH;jo4l;-5uU++0n4UYr9r#oyA!`TNd=i-+f1JUEh~M z_|DDi&ChG!I?zm)!NvD`fwozghp?oPt?H=)aBKL3y{zjAcDvfpGVpENT|2y&G(MZ1 z?rxl0J=6Vb==bLLVy@p+3%Ad#LyOnd!~Mqf-tOJ4vxCXFn1H!lzS9{bIIcCFd)+f1Au zzdd?6{Kl$=+(~$^ew{b2{(U!`4_tR7JnG$$s_po$b@zTbc+D61eO!BVPVHLzvh!-= z{eF{B?(mLdbq^Uhk;i&;e9-Xq@a)*u345|%`;H{*lY!^-28M*hi&fiX47*?6pwDdp_|?z5J!0^mY5aw&g+A!?zuN{I!GM?Dp&BIS1^VHutm+P=p<_SNDlI-=cmq?q+C3(ShhNgSfZ zg<@W=3yg3$cTYS;vngxoV`jE2N|zhc zON=)TTh}hmrn=l!eK;Nup3#GM+bC#U%GS394vi>bqzeva7?1vK)*vTD(mcje6>VVR zb^HXe7>T5&X4?_CsN+-hMVj5|j#Q5oRZ&>Sa70pqQEW5E6UG_Y>eFba+J{eedfI3^ zDv9IxU1Hel}qf&LMyhKXO6~3zMvpZQl?Y;J6gPS{9SKs}n_-%HE z-jsf=o$JD)5XaGEf>i*HV$IuhFDnchCp%ce`wj^+OuR+um#=Ko!zu6Wz^n{-&8LWW z&E$;T=JPjq?H~>s=HA(C)7fMbhJ@K!!-p|u^~B4oEuu@vQ3x4l2q4voXc!&3}3_wDKgpO`IbNuwGI8TB`7tt9PZOml=uHY=f; zF_jhAojqHvw2=`MK9HBwYBpTi=KjCo|E$BmaNaenZ`C8(W^%zi4yFhNY<+AYw4(Z*M@X3Ow@eq;ikh1)r}bZY9!s4lti#qgo++X-))t$haMzOR zr6_QHwFaz#YR?i)MSZvQH`6VmvA4$96Dep5TL=>{)PLFAk*q=4jcno$us7>v4>FHq zlStsX*)B%|&1N_j69{EnIkk3Xz!`yRv!cmG)kw&`rktR6Vt6E>b54avbE~36BLPp* ze6XRE0%PsN7S=*t7^i_JfYYYNUScU4>FzlaS7_?g_>-=M(?9?Ve;gz@)76}n#pB-f zS&U9)#JI3|NsTD3>@J_u{gK9FD49~pCf4?M7*SU+7StQ_>_wXRb&~7hAhAOE$o}F*t_&|=` zk6cp!${3lx-s;*E8DrY9ZY~iYiV+*5(#69q!7MHv1K!0mQw_Rp9Cf;^y)~Ce5}n7} z=rPX%uo;y8TTgX!+`zrX^P5n$J1fm_fbQbhx4!!YHPTk#{7Ea0-xCd1(zcre?K99| zBw$#T$yZu5ccub3HI?12@<#9J<$}-lpy2N~csdqu`LEe>N@*Z`97g}d6lzUQ@yK?xHUX-vIv?!?bZEYIA3ibAq z$Z^RG*7dXpKnm80oEvfU4n=Y#*NH(jp#e}B^e$5d%8C&~{cv_o5gyXbaf`fg7vXI$;^+0 zx;aV>0`I}28=1pUlNe%d#}sn7DH$gol5pSJyr@ZFoFoj{iqR=gXhYxD{o#rtvoq?= zc^pmEfg^_ z=2$W>pgkC;)6w7iYRfMl+wm4 zuZRn80-%d8&pOuCBrFHxuA(oeo*nQHh2`;A_(>uvP-}mz*4gkjhV=F!|`g8xkP{|RTWHBL`Xhhq)diI76vj!aaVe!N@dFBW0j8Vf!6N=m7OKJx_sPWA~xyTYZgOrAv{K zqso*lbbte|IwaR}&*Of-_%>MUE~ zOoCbHoIQpep{ggt#+=JxZb3ySkzq3HRuD+3xMQ6D2|9QAmuA?RR{g$ z%_O-7pU(qty){O@*4zTp=zI+M7zEdV3jm9qf;y3gGal7sm-zlORkP2AxMo~XB0Hs) z;}G|3ifscI>l(>r*;prBEERd(Ax74cUNoEp-d3>36hW+E>-6MBfFM$^?xN=fnH)28wZt19aI_bRxJ z`K9s?m0qXf$_K=PqmvpEa4HD}7SfCpL)?ZsK}0)tb>x?b078NZ+E7F^leU4`P>91% zXt=XG5p3|7d+g(r`zXjdQ%=G|JRA9piX874^pvsT*+?;?C4JBymOJ=D22hI76>}PD z4;3}mw!znVP~&&X5Umni{*kF3mWsG3^(wm)bfK$)M)M>>)AQqiNB|DMkX{k z@%<9#`B*0?WuSJYCy4Cm#U7N_WMrd0SaEaJD&~18MC;&gMN^MsTceetf?N<%VofDa zDvjwh!HP+P)6LYK*eryL3lGQ*2#(2EWQfVVwUn|bw5joDWtQ1TLXKoBz979M-|Mq4 z6DyP0JZo$kQ_Q5;eiU(6yiaJ4)2_l?&6cEs>53MbO2~-QWJ8cnOuc0}3#)a7RsI=TCYZuK9#Bl zj5ygTYK(Gd0kzL4HT;i~*L-MsGFAG?b64 z#t|6(S){Z%c2A^?naY@a4FISOa5p{Wq5B%yI65D20apu6TkELOcprp;3gUJTrD#T2 zC9F|wUJV@9edCj|rve!M)0n-)oP+A6$zbOM3NZq=Ca8Gzc^rUE?6P$5uO6 z=CTnB9~o8#FE^mi6lQ};39WA1qNVxFNv_)N*gIpgRw4_!aw?+XB%B$(y9z&dfq@nc z{@;vJ%XUs_^jVfa(mVDRZXx+DUluB{2)a2kvgrb{z4&;iA`04nIISs5C|r$EllfO? zqEh z*5#|4yHe1-M!SHhGgfW^va_s@d0w?BJSutiSe*6{ab%Rvr{$*|w8D;lnr`j8{9?eb znt@GYCM1m^0bf}cUUCH!P1BJ*- znn%K)9G_4);vb_I3qgtDufT)x270N#OhIXj5E2#{XxTcMsV}%{ls$E}A91unx5(An z9HZA-%7>v?V5F(dkfW72$??k?uu%e2;wRH9sZ(sY8=Zfxdrvfhxqb;A;IBMu18>s% zP()*4vSk@$%r9wXCx%6GQcAM;X0@}!_W#iLI{(h>9vbQ3*4CEn-u$(KV6p=cA#7ck zsPBYeZ(|LqkUc-*P7~?J=cfR4R=aQ&`7-D!a{$j=F=;etgY!(1lT7dYR``wm<1U}C zXza0hUaPoOdD>dI-C#tvsb$RRYNRY!8i}K#Y~TFUGy=ByO1+qMOSu*P z2?4~#s$HY0Bsv{avMO~9NGsejiPOP&-aVi4)>wn@X)P4A&VH|Y3a4mt%~)RiRkD_i zOEzPsJgH=G3Fr}?BV~+!piDTtWcD0MNy)y!;)g4QmM9QNv7+f2M^Eu{HQxg_b{%1F zeXqQ*>WH3{+3#+q&1X5BiA2R_KrOlFsToLHvp_9zEUu!(oWMaYM86>@7xpicRKt*% zTGyckAHyFlACO0|j-gEmWLUm1wI_~`QduujgTqKsJj|^`&$Q`XW^^?#?)@lNLfe&B zAik|oWQF20;q9QKH9$U#H38BMpGC?1g^EknOlfdDStf&cuGp|Ne=%E;0ILoLSkWJ9 z!by_dzY8SbE>CtUIHpvBY3}7fWsjlY9f6r^FkL0Gb=xH?2hSw zH29c{mrkJFDu=A^Z-E;^Nt~#uF~p?0E7bf^TM9*g&N9xEKGu#Ft5q=`>TA$fUfN0j z#}&~#TjestWqsvTPjdcC&@!$v2bou7Ycv9x730?Wo~b^fbJA5ZqUEaE=F%D>u8au2 zGhH!ODt1qca>&wX@3ppt;+sPq@lK zbqQHFeHrM6W~+**X-;7{hOgTtfz&b&1067rC;UK4*wrkKjGY`VjIco#nU=&j{2JsE z56nvEbkDY|FVr17n0CZh+LzfJldLBikH5C^2p-xxw3);Dc$qU8KC0FYMYX2wa7`Fm z!RT($Cvg(AUz)h2@hB&K5AymsYc^RWRyfNk(u?B<7!(cUnqAK`QBkao5EaHI-|;&Z zoWB&D+EUO<|9o(pBmB`V)uPZ~1!&iuom=^Ur|e;KnXdFVskX`WW+7s3rZyeu#T-x{ z@i{#?Ys?@?MggpB-J%-ni!|MWMErE3?R2$yYTF`kDE-;qZf_^Or{Gp`42|n{1SJF5xF@6D%lp z{J$fWlRAp`doQapJHiCwv3w-|OYq?rPqG(bXm;TiN=b4Pa~+H6Nid5$Gtg_P%=gWd zh9RRNQyax<(uR08LwQi!OOYVT+KbnMr0xK9RY#wLTg-XpqI3?2>Ox25nnn~iJMx~%WBXa_k*Kz%6X(`_a?Q0v5If0dx8o_cBIRIMkpgVYqW zQU6YU+28&rLOZ-n%5{u#9xDH{wMcC-#0HPD8p8nkG52AVwG(<{KMSkmzdX!!a1cJJ zM*#H~{wZHiP-@F5sq+D8er{FI5~A&XFG}==%>AE;!aaiCiX|{f0Pu)XI?80JIO;cC zTg1S;mNIJ*VKlCjW7vJ+2iXWiT6vr|wTEdOW^0{#Zi%RXZ(ex};z>?91t7M!dK%m7 zlrXyZo<}CyT)wM3JECerJdq*91JB1$PU%x`YC@%xe>7KOp9S{)3fJ zvyXA2)=bS>Thy#eb2^t-+ov$*ZJKyE5BPb!@Aq_`qt+0o;&hRZZi21qhKc#qw{+ZJ zr8zM>S`O>o5Q^-2xJ?=Z=P9{6qV%a3m4$Oo2Qe9hhOxAy84bOuq~wySi*%}%@Vjxq zay!I&l7*C~GA^FOyO9PsZBPws@)Mz10J7@Oldm7>uYb?rO30;9c&8+h(`eDA zEe^?1McEiwpKWxjtj6Vzy*TBnq9rn|(+`;jA*2?|k%iYnYm%RgNj(msLIR-qQljlQK#flm3A8>!-7y z9~ArE28+T3&YRu!EaNAxc};VB`G>n!4o99ck!W#O#hD(2dY^++^#!8r`j+xBoK?Y^ zTD3KKzWb9<8Y9?o;|{cIYVRvGR>Dvt;9b~FLw=pd`0pTm#`SHPuJS-@qvqbYg{;+~o zu&R;!f%vrjynXVpk5rcSdnMlccc;$>vFG+y58pLsUGFl}ieGz|zsE=K6(ZATJ`K-&Q3m_e>{j7_8P99W=)?u{KM=Se!pLTpgdfk_>P}$pG+?s3i+xB zw8gDhw7r(Kab4CsaJ{}N8kPsV=6JcZ?E1a#8?P8)eP6o&tFPS?-S#%kvVTe~{?^zy z6yoH%oV-|_4X76K{80Vv{pawJ2Hnf`uXtL;e^r4QMiqhQMkID+n0aUsXw0HF3&`hhXJ*Obv+%OdOf^`3Zu7emwCTG zjz=$_%j)97B_}=)rw8Aw>lS}^;Qo0`ED$sh`umYE9CgpZ>`>C*MWm{mUS~%_?fAkf?%)&uz~%DYS&@ zyyw>MHqHO>rM0$@gG+;&C%#D;S5l8P1+F7|RLGZKh&zhxvV6*_ggkH5V{61gvG>n~ zyx7E+cztRrd*<}v0*`#sP-D{SQk->vOk<@ZS?Ps1M(9s|E8uvtQ)Y?Cf&_~_gISXXhtS4pNe_L($ZG-6X+a=n=uLP{!L&G;R~}hVO1R`Yrl!HCj_F*hRT^dHWNTB!c5Vshbh8M|Jgfsrj+kbSVEp^ zFq;@2(D+CDk5?(yhn4c$4gR+e`^t}iA^L4BIZYHK7DrFS&~QN?N)8O?Kre0U)}*Xy z_w=jjYwo94%)k-$9&=&F7@czxLI#6ycNzysdZ8u5K6-&Im}!5MzL~24>WY&e1a^v= zD-|Cxyu5py@@&@41T5crt(Hfl{p3egJ(i(!;BZ{X}vlTnsoS_Z;Eu{ z7QY(6Qhu$FtVL`eaF3NHvxj1IiMf~V%9S?tX`&gRXLsD{s24NxDOk+8fFjwTKMWZ9 zfw7Ncba5t*o!(<_YA@iry??I${`3AtGZ3v2?)STwSuO2X4j%QJC$+YHPlw9Yh&$C# zDaXg*$@%t@J$QwJEN$9X&N4K}&?dNbf|~j4v(ve3VE#7I z_48m+J_u4z3+IZyqq?L42$zyD19ibA-DcvsdY|o~P=qJEYggQhUHvz_SGopMvQY#{ z5&d@w-lGde&M+=@C^(uzjgJL{oo+_D28?dCK0Xt>(EDp!-p${y_djWhufPAIU@8$q zvMUXs4rBZUQT+4czr_oUnSCqwPrUK}xYqxNcv=6KcqbL`SkSlsF{`zjsMvl4sYHV- zTOy-YBF`Z?@+*uOe5YH2X@_3B-p$hOUz4^4<5G=6)_+ zUCoFGl}>5Znlj1oNr$8t(;hl+MepPxt+bMv5+vf#08M-Tfm1Bo{yq#VL_SUt*Qa8p zWxf<{@x&gkEo8$O^ZimSs>ba=R43IaLMfwXOc_6TCYS$J99uZ04vF=UXC9bpa(dG z?@l}j&qw}TfQWA}f^bw?IMJIO^rXcNN#_EVR{ctkDx9Zt+t7bl4f{&K#m80=r8x;~W$pWG)wxBs+FhaND4du(2!C+FJMGj3#UyDa#P z1;Q@3=mL2(R~~79IRE8kDfv)1{2=xXZ9cxDV)>#BBHI*@iZ-poyK$pft$Gm1y>O6f zwocP>t)$JA6nZYpW!#>L2ar#jTfwxpAA8&fWtBq8RMO#_A1y z3l>$J#JSSySzRtZx&kkCZQTfPwNTyEzDeCN@aD#2`RY^3m=j|4Zecu`J}D^WxuWO3 z>zIsSH~14i4Myb9xv?>KsrA(;&Ft)yPtKNdzY3ObuO4fz^Fau4ZS1P~Ol63fK)CWj zQi#*#;_c*1l|jv2{)&XG3b)-@?1D$%61OE^m~A04k0}99$|ZgCi<{~}oEd{)$X2ek z6)Gi0N>!Xqv2i~uPQJ793?2Lfdf)$?&o0MbGHK?fz-{j!DfOMBjK}Lj{6i|*4(Ur312Xe?83-C=C zjcnupR*1W{R~p_gwZEEr{mYhof4xnl4v2Lmj-8Rlr6Nbo%*t8%%>MfGT;EQD;#ulZ z&8l;BL>#zP!{omeR(;1fV2Pkz&renI%31WUy%jxJOZo;rePDEp+B!ILZa9}_ zUCLGRl}Kny0Jj!J<{0KvhTSD7rS3zRT18pYhQrr5DrqA{zPu6_c zbabE;(qSppi_=LA+NmDdML>_7YB9|~g`XEPQR@E6sxH=q3F8EFK^=Xes+<71al~fQ zT}Vj3jsH`OqA-D@dScv6)Uu228L=&UD@~B9D$8i~ndGM563KHWQ1)uDCmFts+4Q(4 zY|$dl?Hq}Zx;vJ25)|4YD|J!&)dyW&7env5-Cfahx%MyEe+NZoPeZlRKT`bybiL{by zIQN4`{TUv7wl4pI6it%~XbYH#FJ#Yjl3WxG^1aUwcV`Ix5|YWE!#E0kh;)uQ{(son zoN7xf=H-SZ^1*>R(cIAJv@D?$W#H1ap0$2M|KJ1J#Q4~ZO+RrZjJnX0$f|)UnPM7Z z5WKv+=7(TxRVgmg1sZ~B0O11Pov27NETv?GiijQUo4dxceV8>FOph?i-~vcgKC$fu zvLotfO;-Zv{`pknQr%(Ug9-0FxfJoMMNg(I`GzZo<atL0G~l$`jdFreajzo@8* zZUYtme2+@ZRFLKI#oUv}?(%P(qB|{CeM#J?{y`edKTB6RN>XdWkG%`{=v0>AM1!FCM5o(iTsi}B z5xYmQccG8TR`kiC7O`?5UM!Ko2m$x{{p}%H6DQ_{F0|o!S2Zm&Zh9lZ*HlqI`HD zAQ=C>@ITA{B(?CIG4I>im08NRr<8^QG5b?BPF7HTcOf6u_oDMK^Xrq;3~BK5zAhs%S}BM3{vV ztJ<#tG9^`Ta0}r^^s|pZ@;mz>KnwKB=+_(wp3s_4-hTaecpmKG~7Ddxr35dW(P(`du(+M-l%}z1m&j z_43rHu2xrjpk|Y_+;oO+<|xj7l;vrXI;`YxrJCsTyNX{g|Ewty^;ZNSer$j@(euR-5FAL{m4bYfgBcL+y2J0p z4r$H9PHPsff!aIG@am~a>_@Gr!#@7Z4q2WUZjagQ_xvs6fkma@?{kRm$;Ko*dT%d| z&(?;cfQ~3FioS6BMo5COvt76pd5QT9k>*=G#}LJvt`TM`9In72Pi41&{lHrBfb(!Y zWPV9`;iz%^47u)+IERt0jx9ty1#@V|ufbi5%G1X}2lYj(p`4P~g|?sOBv3)TNMeNl z3`T0UoP7!Q#X#{53pr9L_lcP`#Hd2usY&rjd(s`Vwdb=9J!*yFo<^yR^BJ@ij5=(Y zRYm)T>A@#1Bu41S%C*f!c@Om<>=9MyI1MQ3`rG~744wFf2JYTqVX zbfskH(Fk*3I-xFv;nO5*-SwS4t7eO(4d%j8-sn*9uzv7IMS}H@$+6Thuap!J*=9muf8V0wniFPULN0(hDo53N^fUN3$9OvCh3}1*b|n-jOc}C^R|s2tcn{&0K7IP` zu)<%PrjLdRe&4$<*(pXFxQM>i;bBrrTJdV+(Cd&otjiuT_1>-S+KKdNrnHr&wQ@D< zVvUMx!Y+G_2AcxtA{BU?pOIg{@zj^Rgs(V_Y{+#E;+nGB~92+$i zj2{}NYc*7EyqkOXzN8Y&GnH;uOYC6eS2v?KH?{`IqbYPO>5OFFdp2a?L1||{V?#zG zD8s%ANc|0Zj)%=dQ62FXA-E&h(*PG@w=`1XR9Zg08u?-Mt2tO~jeA{0S560rVAtxl zpgf874_$kX=^YQQtLvWRo5#8~d@`ke`gEWT$roLZX2ZwHwUn@4!~iQ+^hIofYU000 z`}blfyp3cY&+)gAxs1*_Wb+Hwe>*HRM-q$(W)Kio7SR991Nu+4>fb;oH#;+X*Z;Zk zUi)dg;7K;#e8#r_1?`XIX5vPDi4|Oex%%uyX?HOx1Z59|#66SnF!4*WolLb`U+`o< z1mJEyc=EZ704+vLY+6WX6g$KM=N7+0v(%SkV~HVDPyy2UqU3YiDf%hu?`9er=F0(J z7IpoVyv@X{dM-9%9vWQ*g;{{wA$B@lymR1bjGGvRj9Qa;gI@B^#@XV*NI>rA?%zwH z&Mb=BHTyYvX$bPn1M@T{dpk9X$lWE&A>$N#rGs@yRdnt|I$4WoJ+Z-*Nx8%oSDu36 zc^fyKuSl$RQiiBIL8|2|rGqfJ+J-#b(M5Sr%?vbLAbIX_NK~l^%rj>IWced-2pu~$ z@k3bGMq|uT7tgMsgGTdgs#vsqjItu(OOl4<%4Rs}H7SWPsK?* zXbGfzHLdyu{z`;GuzK$01Mgw)t9)j+3{g9HC7eDBMSJ`fsyR@q08;iX@WW%HDjHpr zgj-RhU^74cq}X`W<_x~dbz?A{HXdFr@tjWn^TMCn;n~x7wmS(b(Hj-?9#$_aPc7Uc zHzxD9cHW$5l3z%s)%0g3C1GTr;JTs)O>VAQI986G@&PWROd+Lf*Y?diBU3H|rx|fZ zqF|25kG9fKPPN#B(%%b5;FW!%o1MHxl~rsN34ylRKdxvUO9VeA4-HvBzfrs@p-l{z zw@q<|kc%+;5`3kbQ7}3sF-i~+yjwLw_z0r5H>knD7Qi|yL7hWT6M|niwcF>5$v4LP z$>d=ST{U?6gw=o9x8MXp){68v#hQ|U9ehzP(`)dEs2hvZw6uV>2=a$>tN1LFnXqDc$NP~bBHv*z6T%>`Bt!wU(rhN8mRe|o}ujd%LV>gqO?a*1*-3>L8AA3cp{Jd zv#VTBpnllM^OEcHW#1bEubwR-RsBa+= zCNjQIqav4)GOmz6MtNdQG|5N`H`4wBl%r=?=MRY9^b56v!o@ept9#fCnlEHA9|ucY z-p{h4B0xHd4zm)IudIi!Q4XMI078~k>gIwKv(9e8)lZadaai5BAi(4x*y*|86j1&` zB!UAIou&>&ZY7?7kmFNpK6~q#Wc1+=$Vb2u_Hm)efE0tIS;+veNX1Z86yGE)FFLk; zu!#JepXW!hM%!*;9lrT}Z})G$nIwq(k*0#W&f0|gu+;r{^06$LagBV>pPb>${PFuh z#Zg(Vu&)II59k%$R9p%hV%lhQ?@_3(qosIAfwlN}l+|cjC9V}fX^bg7q$}#sP zaDvmIbAwrfyxf7Z&w)G<1um|Hty!yroms5xf=joa$4G<(zD1+3!-5U0^M$VSiD%f^ zN#)Dd8@R}Tb8L1CKcTA7E}17c1wWh%$SXAvd^?MCp{5W12>t%cXU^w{jDQ*G_yxFL%rdbTt>^@t8hlYwWgE;I)7Kcwegk$Z~BJ2 z@HR(NNbachIe1D61z9%+pRfIs(z4}mTmYGd+C&d(>&Sxr{9*Z8+Fwune@u8na;}_S zHNN^=9;nU(`KM?<-LGB$lEvQCtFUdtFRfvNWu0_S=5x1G$j!5)rh~9ujknu!tgL;7 z9UC_EOwiV$^q5dvCY2`dLW~*#13O(j0+xk7aMc2l9bt$?=~NCIG8zvBI(K*sS_`bu z)~<}x7PWC<*@BHeF6IpO>mZ6vHmr(&y^kC%jS40kII!kA!3sgn>W%3?H?@{{2r}Ch zDz%b&QacUdFZnRVi1FEh-p!#*n;8-F`=|@8YTY_6D~mZAbP3Vru}+nS?k(~g)m17} zFBdGlXZ_$^I(DNDGo~#FlBzjzVOPYWIC-t;mVm0%{NJTkuVN^Esf;)r%gzhsC$X(| zK`X9nkf#r_FNLN1?3tnU>*&`d(g?%m?p?bujt_k52tKE^cXtj~$F3ciW7e))Rw(UkPSWo+$*UOQjlu6~%`?Y+f zk2rKE)e^f>t+)nao#>OzI;4Y}Z0okM4R}y;`I)hpLn^w_F!q}j!qql6&&|2U!w0gV ztjznGT_%2R+(br2$0+1V6Zi=BlH zfeFyG;max|n4QGmGtOa-ZTJ$*D zO;o8?u8k;ds_ZxyU&JZV=cwpxJE}>>9gZ2(+tc71A`t;DFv6^|GghMHvus)3{pMYrp3m6;T)`agC>G+U0xdg?Zf6lykV0`r!a zHF6V%53O{Ja&r!+*Npx0&+tb2OjioaZ_a|s)NhO5j4Ac&TGIGWO(IR3$*LZr6`7Rd zY_7`$Fl#go#S9$FoeE?(GEuI2L<=UrU=lf?Iw2ML32;xF-^f?^Zl{8CF=*&~%5Kv+-Quw*K(Jf9?@E8W3 zAGi70+YIGuc0mQns7aRaQS_F%4e_jyoBCe(Qj4hbomkf0g0CvAr6}06v;vtf5LA&*Ha_@+O>kRk; zvq-V$#5LGuJVsDUZKZ&HTUXcJJXr^|DN}PB55LUuXrc&m{yHp~S!&<&?f#zet zOL9Va5}+$8FjjtfFGZah>&)QRuQD@gCoNZR8UH$1o5`llK_!P?azmaK7BWv;`kvab zvlPxzowd6BG;d$dBjuen?moRQ7dm8*JkpWWQnmvsLWhLBTV#g9*Y%x!bn zvrcX}w6n!1eo@<`s~|RPfWcxMdvb})sJEX*!-Rc3rm2+Nq#2t(M@xFLQ>U8ar~2sh zh;V$qJgc2NjJ@IPc>A)xDqwO0&zNDwoHjST)6{JE%)PuI?V&~_-$e0Phx5?AaW%D^ z+KdjDgF=2c2`N*yA5mBNkzmU-0X)11w{4cjC$GdvrW1aS!`%cQ*h3a0n3UH}u!*Bb z(OY*2jYQS68co$@PlYVF_0)G{da#D*)OpQJn^122tFim0t|U+P)Fv35c48w@nsh>K zFJ5mlmB9L@;rVfWhj@wWnMLFYVAZPX&)4cyI()2nzfSiS4JE*YCsXd0PR#Dax-d_C z`rRSU@C%ZMogk_spXVWd@Mb74=FDRU3p?Z~QbF3`;W2$DlE@ zte%TTBp^6>8v&z_%`=oN3jK_s8MNtjWBii#O#EhHIBY*sx#^XbxJzkt58n_o4c$01 zAhAcrEFm7%jmb@`itx55ojode$KpYnmQjN#DM^uBKtMZg+c+nR+reMqw!Axga_xoQ zUAvliaO81WcZZVI2o;6r;oW!{0J|?faY*jY^pCInBMu^w07(2G_n?BG=jC16Av^-_ zUhak~Wy3*s^V&5ZV%t-KjvR8^2Xvox{W1*$0cY_)1P(v( z*Cc}bf3^fx;qcYhKxSRt9B}1r1=VQcuhAR@xH$@>5c;?lcr(Q#=~6uBn~ik^>-SNe zPYdSXDr{uQ^E-{f#MK9G_0gBhG$eXu@sZKU;lQVDqHIl1Lf}O9r;D+ix zs^HwZ-PLaeue%w8e2(E_vSkYQ6}OwN=)12jHFyssP)W6HoK-syzq|tggkAvxqtAZ| zL$~Ek`6w;josLo7B}H=Y$$XV3NdI2&z*j4oJA;B=!y~+VWgL-OqmACcD>n{#Ba$jM zvjLB*9*aR+P)gAZxmVgG@71F%3-I}>ES%mP4OKx;Z2!0HTjw>$I&DQ2$gyOK&& zyx5bS-RI>Vm`_{Toun+kj1G`xB|fuTZsjy>Qs7siJFaRvM>A&IO#XOJkEIMrX_nz= zWh!#esO*Dmi#@IB&na z&7!%KdtJ()jiBU;u*zInW$|?0PP3Gf9p~HFx8wrTU@D{P9X^{op5CZ0IamAkjRY`UWy?Qn|kZMchpile`#ItlKCkkLI;Dy<>+Eh1r5Q7)*Czttx}nHpEj*t zYJZR$SFGW^G#)P&&fIi{|Dn&QA)k_yWWzOh7HwJ`ygGgxFpbIO~xIfLj3w0vCtP^O?tn!myR{m;8=JL-?iM+$jQwClN#(tDacC z3T(zRD9vGFon$xQ1Y^nu!j9-j1$CHnd^m(lhIeHCyp~EExMtsLMmWRQP>g?*e zH^ws1<_m~^#P~0GvN_^I_zip0+{xKFMMZJ$azc&(I|`SUz6W!cie1MiF!LSsm#A^*L?ApMi>5LQe{Enh zhRK*liM?&R>AboJntN>EW>8;=2N_1PV{I$~s&1OWErcet+D>mRJJzG=7oF{`55q`# zjq&4JlvhwhE*ExW*i-{|N$uh`G}_ejn`j~CL=|6XP;_*CE3!IWn=e6|L{Tf`g*FWi z^!<(jpln=YpjJT$pQ)3+)LDKLgJ)_`gVw?765rr6KRxc_lO;_8KLlLnmaBoogJ#;S zK&aT)Uzgfm61P8>^UxU=@|@f?qxEF&e7Lp7tZb7*cBhhR$Jt?G-d;Skv+4@Aed;H0 zO?1DpWk@L40*Vnc!#t?cu)}VDfC)+;Gf#7fBPbr6Q+xEdh_|LPBr?{j1HQB~hUuBcTU4 zEzWaj()E5VMYB{b6DrJ!qNuB96h3IOxDvJ9D1;}K#juxdI^B`aS>fg^SXY#L0U_q) zFbjOp;NwtLyIrP4OAlX%=9<&0o^Gwty;>G9aws;oZ#k?<;4xZ_D$UM7ks}x%>2wXM z9X!637!1mfe{Jag*$Od9VOX;(%Lz`YJ%bRTAWfCEt~F!qkVfWTiOwFr9ppG`eyWc< zgJGr$My1yFTs=BnA8V|ZM-3>>TwHSTvh8llxj4l~R1IRmI*@3Xg>Xbbz|iHay%tka zwNzq(ke#vP#IAIU(yp3LkdxHi+&<|$LZy|@Lzj9kH157a{7}Wz988hptMJ#dL)=)z zO)kj0Ms22Pg#*@-gy3mNhM>SNtBl#KI8lmlm9N8RCa7U~+R5g)W#DlRxA32O#K@RN{0}avb{t2FP$Sb;$0ccbI{c_ z{_w3$mE)L?0BpgESl})%M2=v-D_i5JcJD2=P=RAZ`7E7UM+ls&CY`Bbeh*w=FmM-9 z&YYX34c=NUJv%+28@R+xqlC2JYS9G~b;I_!9vfC{|4YyIh?b*x1aEFGQ-Bv#q(hQ& zo}+i+HW>YWkc@`5%9!QpDmnnE0=>W*y(Q)cj}9=)<9M*1tUW3_jMM;AP=baI8PD!l z4Pry}fPBZ~Dp{R#H5Hta%&oRd>+Mj zE3eLz+>cOHd|LU^dvww6?AP%}QXJKKw3sGpE(|z$i%i2XKb(IjkHXFkS((*^m>ySQ^nZ;Uyp=*|BOYd3A0k2)MpOAD+&>Ol1lo-yYT9zoJR)OtX4 zM3_xw)^XK|9=9a3@sYJLOJ@R&WR*ycq)(-<13L8v&KoydB0%;es>ukOSK-G8NYR42 z=6xl&#(|IB3U>2!I>J3)lEeM{@b_q9H#*SUEaSq=7`jdDTzHmgj68+(F5Vjb@LohC3*8>CMY}1Ke0DPwJ zFyc40o?!~A(?&!TRSlL)UyaA>PIB|9$_~o7+;TtU?aSEco@Vtz5u}C&KS6tfH2o?^z7_UzZ%C&L} z%Tco|)R8uH%~VP5%}>}XvV7ypC7_aq!b=K|N|Y{vg0CE$a0wDGHIa7wZ*ehl zCRrgYaS|*(MgzHUA<;YCB$j=@zlQrjvr@(x$QTH~Q8ANT1I2Xz6;nGCHFXRXHf?jm zQF~r!OEJM*v1s_C1_8LF5(K_)4)g!9^^Vb*1Z~%7l8J45VmlK|G_h^lwryu(Pi)(^ zZQH!>_~d!swZ607@0=g~qr1>uwN`gm?Q8FAUw}xoB~>a?HB5)RgqG8*Ijb@g9OHnj zid=EC2;6MHS=?;pik>jOUwoE0VI#QsyB%a8htiu6U7!7|wW~8JWS#yXTKZCn+3_>G z=?KeX&6AX}B;}EyfcV@glFOexed9;C(bH%{rg8WfnQP*SqXx8^9wc=3tWh$t=^w6X z6oZ{bOWkM4+0Vk)boT(RkVf#?#CHKsc1xjSe?UYOCu5R~B0wUC>b8;=oX@g=+qho$pEc7f z3#*sMjUz4&KsfgY*ORri`$G;R@Q-kOh@A4MMYCvlXOlIwR5wP=$)@phfgT06^k2&o6@^D8q^+Nd(2N;?%{Ea^;sqeuf4h2A0Lu{c2lOK z)LS<_B2nBDIT@|RcPw0%-R_Vc0D1;5$?aiu~mC0&C6mB=ZJnvf}U2Y70rU4^L z$zlm(OFjc5X+oa*O55O5PJx9BIZHWLRUdk_j0Y$|49mo~G=aSZnQqV3H(7rTbrHaq zX}qfH72G%PF?xOkn(4wM%M>P4XJfi_$tflr$pqq=8HE#HQL1pemj^9RPO+droRA172@5N0$RYy;ZZjGZ;AJkN}vtb5_BZz&;;l0LG&Wz8L(~t{upRtiPGgN;r{ioY$RXBrSt`Y;L7Gx zge;N)YuC$_3DF$sbvJ6y^EJ%M{ejc9w@YHrb_Fy9;Bx`Z2r?pu_xJMCp<*LV)&VBi z=t=&yl&GA)QXjDso0a+bAd2~P7{QgzGmt_oTU7B^<5&+I1nGpNx|}Mx<^SGBJI~Px zMf-p%A6U|R2lN>>K~|HyacdX-OH_CT%k-{rdDC<>%i1ZKvec`B)6*Ucd8XG`{w2xC z3)dl_fkBcWTVrXH(?IEbLs9wQ&A$C&0Ne#!ED>HV=hE@x(>i~eM0AYA-#J!4pVCio z?9QIS50hVTV_wzUa7lX}^i}+3jaa;Z2Q1VV!OsOGRY4)DZwvl0a`1)Nc&lvp8S@me zZL$yXD1wrI0H<{nw_eeC{!Sm4V=RIw@3LhvlfMw#MHBvx;le_RVRM#VZJrAE}%PHfKdf*PWzz9c2|-79=-imqqW4oiD`3&UaM-(C8qlR zI$zFUmtiC4Uc!hrU(<=1`qrl%HVPdqc6B>-yTh9BNwLX3rg}s>P@~}D?m56$L%R?2<~#r$kJ!yS14%K@a}ZJ-~{iMW!$cRl~n(zBaQtK5wE? zfHSI5viF1y`kUnA)ieohoMbO9%ya7C9U7Q*%-&I8l73KF^k`=EU<%Jwzh|!d@cA9V_A^t;7tUCH%NuDj(7t6WV#? zkUY-ZCPxTf0GD<@KvevwLdZm*^jBU-Z8WVv;>U+4?%$Xl4J8%c6P*w#?-PWW#Gpz|!sV0);+#7#b?X4>yz2=w9oFk7PDGej zrX(GNse;m8A!(0L9-&Kng2K>N5X|1cx6gBP#Rnwt#3i8Z22yFzhGez|9kLY$qSYBZ z!}75RwuN%u_d;AWGOaxd%hqQQ${}hM?S>8Z{mpVL4(+s|_Jz2NIFHT~3t)6yV2-+z zvBy$}=dQq6fxoLILvjX!jA(Tx!vEZ;oo0%@HR(sxM;LbsVJ&6WoLr59gX)YoQv192 zi|FYyjW7^iX>`@^_KjSj<^hG|p@wag@~^nEpzu>*&v4DGQ~4@3}O#P$^4_#UnyoPtpEgp%El&8@4nGO5mlvDWoR`W=WA7 zx=@LL@!h|0JjoMpEqk;0FL07mTqz+w@S~k^4GGZ)4WwXE9AZ4(?$9D z%8#X*4VuLmG+bd+%0{HpaPfz~0ut^Rf)&u$Qs)sIh-TJQ-rs`o`o)-?$ zjGHE5dU(MRvFV)~3YpFvWOBUFVIXLjtgh$;BJtPqcl+TBcRPI{gq$^#Dz{B@e$kv# z1r7WFMmm$p!el^%n1z!Y1{rEl4l$k|p9E2b!4-os$vO2>ck(Cd)A)e9&NA{GK(!Q? zl#Mqp?3;)bV!=+DYsm|qxZ34@oxH$J4EHEbU>ODLyR<`#NTSL9C^&kMsMf~ee>cGC z5KO_U@B;xOko%$&R2;ySSP_3kw`mwiSajEv&N2%rbYrYZXoMkz6S>Qa2+y+UEX~Xj zH;MVQH*Yko? ztgL^-SZ{T`EnRoTfvSh4@@;l~^xdA+?Ae!#+39hSms)BToa3sMwSN&ap@5U`K1}I%02idD$QoP=Xf3F?92HdRhSXh=_bV5B?IDnZy)Y zk^N>SYwA7}=k5f4;7Z7WNrYkft#<*!x;l2?-S~c!i(BgaJo_$ym#|^vO1$3oHHs;u z3@G#h_~L&*T$zyK#((C(Q&HS<`G0!Z`R)>ijNs$yLF|N|T&pJ=F>|rf=T)4$C+-C% zIAfn_>j&vr3V5kd+PU@O@0WJ$miC**QVY$+ZnRR0fZ;b%X|sW807T`?wlbKc>3|X? zz-%8!A-pO}EZ~pR(F_zMldQQw-ndd3$mP$F{!Ix<1UVH`q4Cs^uN+4XhKhTkL6*qi zYg-{h6a)4FS9S9*>u!Y2hXS^r-cxyGJFq*S-y7Q(D!f{vjp+P5s-knaQRxrh^B)?&+f!Jdl$z+q^5|K=rANta9H z*%hw{3Z2<5zvG?d3fg0%XZT12L&FR@*Z+*Dhog8m3wS@M30KX&eH+=3^k9Spj zOPnL$E#1#vZ@0I)?hecLd+U{S(dI_8#nwbd1)IaLe87eL=+C@O}6POTJ*RogU#vZc3R9Hb z8_;pbzm4~C7t`gHE1mO)Ub}b@OXP)#V_LsV7*JR#aK{Vs<6N9fQ=LsUJ}#Xvq*{Sq zj#g83rGWQsbHn92_oQZAOn%3wmCF-waW{4I>GIWn?$<4!@OznKPGkBWgSWjKN4E>U zzzERy2m3n%$nf3{zV3&pFR1{GBXgH(&F=#C>^a&HqOQBG?Vz4MD*Wx9dWqOs@5ej2 zf^5H0kuW=*O|M$k*AJuufLo}WpV&6Lue-s`hF9k85ql}>OUdiW%g*$jkL(`4&bjK@ zdYjtlaKB~=inX^VH-Z`C^@7E{YjcJ3WmMThEP7g}-UPKrz7l;4Y{l{36@El0#XL-g z+2b~6fs`MiPRGOPJC<-zG~bt}_k~m;4j<6d{YVb_)a;I6i}>H$p0dfWVl`&dXd+!a z-7olCU*Pnc*Ow2Rd9>dP#A1TaKWOm?se&0>I-0;Ha2h;Sda1IIfH-=S4>ZkWU}J+1 zYB(TVRrzEOaw>{CfHt(|I`wyywTiTfU72I;7=G5Y9wFyJpB7YaT5d`jr-sQ7m2~W> zX}!K^<$k-7mhH_h{#=e{cP{R^al#>xz{-Jirh_61e{VkU?Gvaq_ge$L2)P{GewUX? zOlv?=I>1>As`WS5%vx!#hwwHF0-7$-sq`EACQ4tgsRbMP5T1#(jlOQbnghsNc;3Z* z4(Yvjq_sr`m#zbL|EyrcC1Wj|)_cK9D$a|vle@cPEDQQjm>rQl1?xSPK+$X{ohEHL z2M$h>Z7zPfy?}>FP2~^h_zXFkKi#MTA(AvD^fLsbl`ZC}S0_lRCerDC>(&DdAVL}> zR5$Of-XpwS$(J+@v-8QEQEshs{FAheMZsYPYgI8|DwS&B)mwCXI%Z@?vh}bX57sun zcv);2HkMtst5s*scmDdE1%LRTy(-;MPPN^2)G(SR3zqoj2Q8iZ{^m9ij!SY4pkU#lkr-iWkVU>m@sM@0vh3ol=EM zML&J#R)u(m1ufY{^&)V4@w`P-o1|tBIVSV`4V?2ei_?-5Jto3=AIP34kW$n8OhAHL zl}e#-qX<>Ga}aaF=kNWrOn|Cs;__~_Ng3cBj0@<|~h zb41&OTklD@%L!t&;qTWg13TSP3?CPtokex`QpPJ7;b_l=Uc8#X1O)hq3GVAm#4Y>M6ZR(uzey&Hk%`m$ z_6m3aG_D}X9554(iV$*{*{wTx6j!})^KEzec7k&@1C|)) zCri5nR=}ECZXA&>q{-a;@%P7W=k){F-*ks$hYTAPl~NHyPq$v$MJtHh2o>m_M^hMC zDx1oOSQaGM{9 zp)--zJ*=EJewY-83PA33BWcXUqq432H71ZtN5|1b9w@T_WUp=N>AW2@7jm5T z0=(Rt?e2=8U=Sub!1lX^`-zw_)YjYXTrOi=^@p(bl)mKkl{eex$c+96u@#0H&L0Wr zYKmG~q>v3F|1$P(RElg#AMgwqZSLR3Jw58`5r_tmr>Vd*cJqJUO_SC8z29DKb=b*R z^lQWHf4cQLegw$l`94vQ{mklIVn3U0Q}TTFvX9+_qt&SC0O$)nGaM2N@$wqPvRpC- z@de4NiYKjlolKjb=s5bYjNo@ajh#LZ&8_6-_{RR$HD0j<*f&MZ3~DNO94ePAb%HY% zCwqvyUZXZuxJMRSx?uzvLz*QdbG?4jiZha+2`6H9x;dG3J}ljCSQQZYk(|R^eZ~A? z>23KTC&YjnYzAUYDmRU_B7Tn+C`=xY8SmF;lIlJ7KtRfqZ%IEJ_vp+1IKU zZlBGy?ZWqMoAJKyl3gH5Gl9}KLcj^dnX!4O~4pQc%W|hN9KWUFFuF%9xEq zU}y?KNLdjvjvO~&clX}{sMbw`AWpZLOAdjuxj~&pnJ@PXEJ+vT1w)p8n{jtYx`#ND zKC?EU7j*A;Z`zRX_qe)ilf4hnIV4J&yi(5avgdNZ@IxP|;a8x^ z$LT~I(lsc!1h&A@j@47up?mcbCky1WO*N~+W!NwYKW2r&<`jiApPv^PZJeH~E7A7m z+fl_`h?~LQkCdRW9Y5j2@In(JIx%_gHkBvEGv|M5k_~1R6J~6*1qN0>V&|U~WE_~S zE9fSf?byTMTo0;WLmT9PVAh98PE`g#zGgvuInI;q@KCntQ3X-3x<}&?L4{|e%ByG} zF^48irml#5kC{@Qt&q^ ztr|{m8}FLb3aDA6My`_r*2>tTo~u8Myf5PPk-xunU#AZ}J&BNW6P25K>CIINJ~8Kx zsC|l;-|+KDnefxrTdmOpqP2y@egRT*h;Dt^6>X3!)bmCZ7ew|&3wvTsf_EZfN+B(N zmE;@c=Xh1jniQ3!{qtKsCinBNsiE34I?u4VkWCG9TKZdf1O5cr?Nq+Zw{dlGNcDl!P-Ft8f1?DqgGjMT#8z>C$Z zY$PvbUUvcE45<-bk3qjwf;1Ls%x$D4wK4$xLHGCL=swP~=Q(Enw z%ZmALOhozjBgwG1h)Bji({Qpby z{&UsH#mU*uM%~8x|5D~fxpZ7Mf0rwND~r+oS3L`76Py3)^0MP)-~t7{g~ftj2I*ea zxWeHTVRWaM$|vzIGJ-D>E4b3QogczO*T$}*WXVnI}Sbt|yxj%p|FKe58q51oH$=IX03 zG_O0h6OrbQBl<@n{pJ;Z={hLS6XM#OI`#Hwep>Y~ZESbn_FpouL`$c`v_4+TW8G`} zK?FG^O2hm4i9Uk-Zxx5pA1{%k@8OAk4-@nDI$2rn<%70U;*FU1s-h?F@|p&ca)$xas_DCZ|Xv5UxO zotn>s*9XG?o|?_n7K=kH5Rg_#P!QDbsrj$K#n#2f(8TfE=HkB!7oBfu->Azr)Tm#p zd0vdWL(y?Vhlv&Z?;tB}c=#D?jTSP=^H#mn;_BmR%WHRwp91l8@a{>KhQvXj^-P`N zNknKP-!r5)T1FaGNg7o$x^E!GInbxiwq;zWp_e_PRwA4Ix);~2&Y;^B)!gyo>B4J| zC>o?Tckb!Ks<%aeRxli@G8yG2A8n~xf?~ke3 z#i`huJ2-xIw5f6FUYQtpy1IJj=JwXMvqRiUVBP;} zS*xxo*h0*4;?U~Kyn;MCNI5F0;+%u^y>RW)ncm;(^Yn6S&9d?Pto1;U+nL;dS@LF% z+ZkvO%XgoAb-%6EAt+*e^KtI1hhK5&)=BnRI@^!Y^?o+7y0a+KVZ|}B#TLj0*B)0 zeksMwJ&mrNF8tX~n9%hnTTR|isdLPcL(e3xE=Uv-OZi`n_t%r_N9~xd8LJ(jk+UM# zY{oESZFfqPWQDiQszVfss_fbf&>+L+-qgwG>C~cWXQl?{ULZE&H$>)m3!@&jw#2YK zU40-&lv49o&dxR#>Zk97C1+27)s1P?L0<$GcsD050;0yj(Ew>qPt3MR)Xa_@sRL32 zPE@#G_9iAHC!B+VPwzfK2U8gT<;bp|(X6KYvfFLOSX@xT#_+$oBwi%C%_Ek#`&ZxY zNY}ZwR|AXzMnB&k-_-yEY1ecIW{X7T)sZL0O&(4sGFy~s2hf-^x9+6B>zx7!XE(?% z)r&XMM;$Y8>g>7yRv>Xdk9m;C=WmE#O^6vKo(I%;_f3Ei#x{

P~MbXx_c-a2y#Q)nigo)SXjIEMC91B)4xprHZul` z;{h#-@3G<^w)Kdf>9XhLYpW$PIs!#Edaqp*-e^(47uz_j;usf*Q-Ywk*y?LQYAibT zC{l3fzwL)(l%G0yZPj;WK5MZCS$akfazxXaNo{y6Sp-dY$GNRPMj%K8#R)Qy2G=X` zxGb;q(51SrF7m*Q*&jwDOb5b+{od-=qq0vXcR4kUZ(@?1HYfG07zou%=^M*01Rc48 z%?dJLP_(%PJqa0&9blLMio4H)9J)Zy_RUfzhHN;LkpVpE4cnL}yYvDzn(?_4K0+tT7Y~wf7x)>CX<1Lr~&b{z3buY@knpf^c|* z%K$XGh%^YEtOOIBxAIS}!pQihmOBu)q&72Dig+WCYOLt~*^}aY8c2U;{ifd#KRBeN zD7?o<)(R#A<@8w^+SC2+&Us|Qur9=0B-IKB86xtWMAd$4P@#19TMJ6>EK>W^PaOGt zo_TUyx`RKP8e5ADBanpRaW(X`o{BZwJm6DEuu8ag}VFvOjT zftzqhdPRbkO>2s`>Qh@jKJM+D&q4?iR~Y_y!57>tD-{?VX1c9s22raE~)tn0b4DetGYJEo0Yi`64xdo6xH%Fx| zVNK0!GuAA}$7GN*6zO3X&7`pZTuq>2A5BbiP)U_1)ghJtU9mTg2ilaV_4FLXF%w` ztsJI4s9gqNhJ;!3e*wf6cG(<8IM86*eh&qM$%v_$dB+Z9uO7@@?>(#9Uu~JX5|~^H z>889taPGio^MA`VO|TxCB-qx+b@r~jJEC@kig~3fQw@_W&VnXeamrn&Z zt@J(b&^+7mn6grh$gWheT~TKm{~D((^4D_$F=3dX`b63=W= z&%jHI9|Mp^@R$hF*j{`W2^IgaO>4juiO>2m9TU-fAuW_JRUH(glMF%AlL_672sF&t z)A?JE-<;tszYFR&M3)Lj?!D_#ACJ_x!bdBO)k9}Qxg`glLm#7D+0GqCU=~~_be!n( zdrgO)uIB(e?d&8KNUt;Z-Wc;XiPX?e0S*o zZg{h7=&X$X=HxjX>*u7k9t?e&=A(#MEQEU!b?}k>)j0GjU*O*G8?B3`N=ud?FtP8LAMGZC0gr~+V#sWjvw~18#63?y^gd~lxgvWf9Bn;yAw#7h{5%LF{ALTKh1J%)r z%AYeOTaC=?It|K0&8YenlaVyHZx-!n#%PT5NZwc+n@us)EVXPmyA%PLlIt`sJ!Qhx zH4v<^mBx9y{I^){Qf-iGJ!QcvS*c3M;k-{@nKIn6o;IqYTUlW-GeyV zRw{Ne&8(`F5srE4Rlp!mD&{>*&3tbk>fzoSh+EV0c-Ci06o>?v$sBiUnMlw04#0Z6 zUvKFlY%JMH8Ocffj(MS=4A;)Lr2NzA=eOsQ~WQ-DMnwUtY*>XzE(EA~Ra%j#lCgQPTe})tii|N1C z>3>@|!EGqpO2HEc5wwbdR|tX|blf%T%DzMDR?&0nQ-g$>Kb1!euDX0$IpAcB8qxK<hKm6E!xs-~0I=f&vRoqKto0ahK(n(+}F{i`hmPqqvAv(OPx;BKD3r zuO()u{{N(JaD$~&d327yo?Gi>)%|0Km7{A{5KLg&v4==Oc;SAhjq0Zcf$FgmJC=j*(h>K>6!3C(4 zo9*C15oR5zu3+@<(ShbquV%S*Eg(n{lm0e8qp8GSn|1>K-dWnt1fU^?+w>ws6qdJ( zs`{{$fkPi%<>_xs3=F267NngzEjI~)eJ2ZhOOtB*6-LlWs$-1=?d7O`J9AZK0RH(k68reh1AA+I`2x z6k49mHNz)h=PTz0-Illp=y%dDTAante>9Euh*XzG*2uxwqn8npU{XR^SOR89CDzZA zNDcKx>VQQMlyziFOq|4IfN%Vd4xm{ku6Q09U+YPX_rVFH#Q`RwOtj`e>HVono^)CN z51{eegtSromkU8-={V^dA!U||f87L&K4T+Y{q%6aYtcfC!8Eug9VB-jwiESxJ=l_4 z2iX1U(R7z&?Wzex)r~jAp+q8_4g_{bB}j^zG)27*8QErG#2I{WF&N8W4wKUiBW>DM z4;TxXCB{Kt{(->fa=Hs-_4gk;Zz3I?MkMzXhkNexT0(V8NNOJ7D!_hM%ZMBUa&Zt2sUsY<3={0@RoI^W+FNn*^QIf=G3E8L(PxZ(^neXLj z(ZN*ET!JlU@>0pB=#pY^D1xCry+;yEvj{2(MCgvD%U(C)=}_F($!_H4OB`HiR7(;- zP=<&w{$tikb;cu7-!6Zt{0%-?b;`UQwGJInUN}b^v**n+gQT$@CW4qot*p5iOa2qz zA3XUPFR}lN=Ur~;%iCaDMhVtcFXu`i(<3wp$S~zOs`lR9>F4uI?M034LuM~fk1Zb~ zIYkbFgUxvRB4yGm4QA3N&N$UvsH>pRNMwJnyTA;Yq^q7`&r9ATzk`+NjIN|-nL|ny z7tJ3qso-Ha^2Cb5JUAOqmb7>(J7x5FNC-iQ&Z+D<_#RXz#>fau??!{)C&(dLGOQs~ z&mv9igUZje5aJl{m&utyjMDxVi8FTU;n(6b)9~&372zFia@YY(CMY04~w^3p+n2SkIRbJd@?cacbxG((o{N+hU*5I<0dvCvc4RZWgSq zo{HT7`VB1b7EhUWX1L8xFSDX%id_pIX}&1)8`*Ni3Az%Ojn(28{U1ajx|>?z(o;~> z5Goy1 z=-yITAMDfgJ4Uf*%DdM@`3*htn5^MqA(e$D2_*VM;coOTV`a|gJBBnl{Ce8WWjiS0 zB2e5=f;Th?33gbreD(8rio0bT0^yd$3VE+XQ4W%7PLL`fuM`^yUQ``(t9WwiI%z@> z&)}^op}kam?kpy3(FR!otZ@W~b6rI_-%NH=C~A=;PqP=_a} zC^s(4QTs5Sc(@kijRgIzrCTH}VNlQZnDcq-M#jcN{}7!4{+C&lR3V!8}tnm>ER znKVK)z0yDmnfX2aU4zk@iiWT0Uw?YFRTLoL-7E$St_|$qrG|B{6WKWq9H;!H?zLmv1{%Q zIEe%CPd*;uB56aZmT!#(OPuJkAruFN$lPP@C}LROj}8iTJ#^DpACC8o$Mrssen}XG zY|IF#E=$;WR6rF-wkA&h+k9yDB70%(@|7b+>y0zo&V5P?2zAyrB)f5A!m<%oEoJ5*`6!aoMW{?ezzX^ zt&wUs-!SNsn)hs)s=rj;vZ9D6Tz6fI_|xtxThCo+7v2j~l$%Coz7dfm-q;fs4u>x$ z|JxUlg3FwiYWI`ByMKZ#iYxrpRy0NA>O1guHXhSmzDH|e3I8#gY zW&X$tCT(88zIZZ%jx_yz5>4ZNin4b3tBA05B5I@x0!rPOVH?>E`YHw(ElA1a1cz|So_Y`m`DZk|HcGN?QETu4GgVK{u>j}lyTY+#_nbv@S8o& z(M-%<9b3Et{0`eBmh2x_|i!`^VWca|l~oGOGrsqm_2 z*T;=~BvG|)S=}N`Fn#dZv*+>DBNt%g^m6`f`H8f=Y@$GATaqny;@Ij@l-$`Wap{hk7GUr~Q3RjhIm2itnu)*ie zl@}mJ3dDxDB80h?8MeZF8YXjm#$Sm*vjmexympp z{$YO@Jz(5yk-k>Uwn_xGSU-S#z2@}dP3Z8x#^(8xGvP!X6yc1x9h_6?fTw&~z8Zvdw=>*{)R0aQE+7iX5+b=asu_>1JcexYy!Oz6&M_J_H+rSA67_ zDoeLJ!1haZkGUzMwWrc&OANyR_2J^VJ9vWYDXc`5DAO7How$X7g z*(Bb~Fo4Ep*f?P;S52AZmQ$N12zvJ+dPwU?Jpm++ay}~qA36@Ci+`CE&jFZel!Qai z8VBg(B#!roeRmIb*vNx1wqTM>S)dND8(1SVzI=SIFdgrAN7FjpPjuR2q)s)c_6ZWg z2OcML>n%{m`=TDTi7L~*p&tFM)>Vtz3r9^S zVpB1tlwcW`tH5;=hnIhD6Ph18hK9~hk>eL_sz(H4;jUjQ*iTQ=GTJ4ekozbp_IVAu zfKZ{xuGj#2WAUT>Co%`CDJynDO<6d@_7~%aX|lKtM%z*x-70!%_H^p}rHqmR7N^J! z@&4ih;CZ0&ulT>}*a{V4jsElgX;AWgUd&u{E*u#dVVZe6t!Eeoe`Kdp?+Q z(*E*9Wxz-&nz;N^_^%hliGk0AO2c-JcU5|ckcralu(z0zFqCC%i5sNwhje>rJc+gp%sM)`TE#5~OiQph{Rkf6MMQk$$Lzw$Y!OwR zP<*@!UIbEL81?v{Azkqt72xJwB$sn+O!EDo#5o5jq2IFQmGgOU>mZpz7c6PXW9q5S z{)wCn;79+WFCIsBJUsOmT?*2;I<*Y`Mes~(+rhe^dcsV>KTop3P*ai2$fsq1hmEu2 z#^6hVuWQE-(6ZvFjO&LGg}9SXS(s7C)ET!8rEoM1leX&9ta5&nYS2qhy zYiVToTU6^DfZ-L5Rvv@YD-f-GyY=Igv++q=(bRevj1k>VoKO(wc;X3pyY?3vkx>F! zHvWgl{gzJxan<<92Pe?cNDcI^SyUN($%T^m&qzsUJYzI8)8gPR-dQ8!BMmpWB@A2@ z2EhAFeC^&gE2OfjO%E~fB~sQwYe+eabXn%SbD=y`cDWG<46vf?3f0Mt!o|p@ zLD>@VD#cEer3GEDB8>5lgUzHzU~~R*dEv_(aTQbi|Q9AAs>yLU1l&^l~g%1JHdGaR6qA@qIAg| zjPnM?fI zXtb4AM_p<@dwwarL4UG1>t~umF_lo~1gL8#>UM0{$yvtpzj1vwlV7Pw!pRiPrftkt zD8&fY17#pJoi|(+xH(}^6H@L=|AZ`=c=gM;j?67KfL{6|R2AuJqG>{g*fJ|4*a%KN*f~OpGlI{x2Q{;T2FfmmCD7 z^ZWQe8IJ#_qJ@otnF%w4y{%b@rinb>^a3KdTM0TWc+0-#=8rxC$vb%}!p*J74os?{ zEo$^s)Xl9b^wj;=`?t?r54&SyJ6kt7GdH^&adr$3>*$vMuotvI=?XwWi1WIemuBU4 zrAW7M2UcMFH2&zqeybE)zLEuA>B{I}Ko*A$_%cX)=1*hweat}odyjgeYfUAN?$#xa zNh?nNo#~(L+rkEc{jHiZK%A~YZz?Y;YT{b_N}GWJ$um=mPguNX;{FUhH~bZ^czB!6 z01ZPB!a5dRnydL!k-1IC&>S|lPWAi6d+?2)H`wPz2* z8qSqLWHbBFqiVd?K!Ef23ND@s>KDS$re-#st4imp&1J%tua9r2J6%Dlb4wnhFK5}%j1D+_()_oJS` zje~<@AI6AU7p;jzrP)GjtQ3MK4e(l_1G z>B9SZc{CL>8Bh~7LTdRP$#@*Zsj>fikwpO)B?A9bA3`%Zh?eg~w2aK1>g)s|h*B0N zCKY|o7Vp_`tIh#nvk*B9tNnUln9#yGU3sLezgT7#Q+hqX`Opd5t$F>X3Jd%_BM~GyX6QA^~5!KSD^;~ z#6Z1vqr_x!>sUz=ft5Ye*85DBNe4B6M#NHlayD0-c8j_b4(62vNnHp_TSSel?~DN0 z@w&14no}~h$eMr1iKl8a&*euQrb@9xhT_K10L=)&{Edj(1+i}j?p1cd&m+^pe~RG7;Rz+rfB70^!Lp1wXriGqg}!5rAv1vlBZFiC zs|V4h#|a;c$20gAibf2WI1G^y5_J0=hfU8wiK1Byt&?x#7WB`h{qy;Av%%PTVaKhk ze7jc2nxPc=gO22gwrb|i*>nfKkeQU+nC>9_y8kN~W4`F2(E?2Ynp=|h)y2}n3QNe) z0h;s=Dp_gSP_)d*7?i(Cu2g&QJ*AYf`EAL_a!Sfyhvkn6<#)oP`fG`6xLP6712zNC zr|(oqQ@RfNOw3A4D_bvKHY{Ew4%|i#rBP}w(>rD56J;8E*@AkdYEQ{TXKFA^GV~G? zdxB)v0EbbNhKgYsPTCENbYT*9Tb4?_pXhsO`$2uvmj-vp>85|8&HV3lE`m00J4{wm zSNS!GNxh#7v95)Vl1{`(cS5LcQlB@n$(B&^u$`&aMEdOV2LLN`hF#w0Z*lOMv4Odr z+xXKevM2WqSbk2drNe0&>iW0@1V^sFXKCmeait?(l60#Cw zt?`H>IFrDvB$8qJUb~)tvP<7Y{Gquzf65;L!t882m1ke4ryL4NQ66v*tV#;u?xjaS zZK_6Va0ASDAPK$eSE}l%E#(+b_q&&aI-1wSN#RN22njKj^&7&SDad@Yp}=Eo^mCOe z_4?H5)tdx;i(K+HkYP{j{w=iGqrid^1CR1+i?qZA21k~PV;)4+d6!>U?^+w! z%0J6>E@V@#_>OFHkE+eDQEtcE9mgQYqos41-93*7iE*il18H7Rc~VrP9Z$W{5BCT@ z*+*`jk4X;3?6DnnC?;q2K~034TOVwPxMXDz73fNj$6=!sW!3wpj@Qh?>8Yt~d{07E z4%*+7Dn6Pi3?9_dtoyo{j;Es!Q;2-twEDRS<+RgJtoA%QZ_T1nyaZ&oCOGH#Pjt~I z-Q=rVJ|7FN0c=Od>r*Db-UU}lB~S)R^(@R8(ySaH?3T3;^2^sniQORGY0CuXoqwji zMVAPOmV?}6zP>z3Sk&e*kl_|Ik{8Si-N_t$`z)O%yEk(`NE`nqnx-mO@_Lv%YwKA6 z4)A)r_z{$?In8VMQm)zXl-|{GvMk}qfHe9c9}T&0NAAlnE-gI;>NAzGPHh5daJYP6%%63TG)iu&BISjae$v=$i7J|l@ z14lyrs%YTVo9gQ%XlM-MeXY>NgVjQ)Rc@&x4}JDOotZt9<8KleOTNjW0mBFR0efnL z2^bF{;~`}*$1hK^qnnp0@BYo97s7!PzFEfI+eBeih0sA;oUKK*BbkBq_$rCNVuP`o z{B#xTb&(hFCjIm8 zO`rLE+{hsRw!il6_V&P#VPq;Dd)k0ZR_AwJTba53Q^M~cvTkmzLH!CH#{4r^6Qc30 zejR(Ie?~nyC+8&6=jSqtk=}cs8XfLYLxB1qVdEbWPK=0Ntqk|oA)Na3fPfXx@?Mi# zT7d!ZzhX9n?KqN_gD+2{Mw?-KN`{4mnMEsN|AHx;Jaadu?5}5x&@+^Icx}ZzH^|U< z58C#J{|pTDG{fvG2;04q!WiWRm}31u-F;&F@kb|nZ3=z&Eh)>(4Fm8!+z48FRAd}Euhh=QEdEdNXQY|LrKQ1r;LPAP}$5F<#2 zmDhVxo*^u|qaf?3IFsTw4~LB%5Lm0h@0xJy7^7HTI!dO6WzblK=_^_HwZe6V*8&&$ zy_5qnwc6qZi=UQE3P9XqOk=Nf>&|#rizd(?GOw+W#9iPuLK4MSi4WRAby;jdB6_vJ zHz>D5s4in49<(KLNooV{1h}KT)rv~;49elOHoLjCf_wy`5Lac=tAQIxJa&1Z_!|1Z zpYaeNHTo%rY`=eMr9)A_QC-@k$+U$(Q+3M|w5ac5GHCC$kgxR+f9FT2tOGR3)E}`m z`Dl&3j)3m0gL@Sfx^EU&BEXlM5~gmk&EMSK30pJOfwVnyBQmm5%ajZ z)F7%?5Dip7$TX?Q=m+JG5ci&~Ub^58e{w}BAU@QP}pV*cjLz%Ay@-_(M@cROLFTY3bK%LYD;I=S}AC52( z(uQUbg>aRN@_gltdA!nDXJgoaK7EGDLN+p363G#HeehwYuUBW@0`)!bfk%Mkjy;gX zYB)E)(z~}RJzz_?4%Qo+6y%87U6Kcmr%+&ZwUwzXSz-G^`5TSy48s5~xk>9Nu9=A+UVz`?hO& zy!Uh0VBXz+{OXWffTS?PC{3*!x(BR7_nV>pqp{s_3faBo+Rz3L7S5;-kF&i9MmiNO z)Yh>rKNioNOfp2*$R2i>XsvazOqX$qBN#=KFJifmX3rnZu4m5S)Z;o@;A<9{FcWd$ zH@zUszSF1hP~!X9@Jd4+sV8!lW(U^4m)?>%v{!M|T{lAAGhKA;NWB(|vj`nlow~7^ zXc3=R?8PK@DoYu}00Snd^WH$*%<`WaAEt{TLlL_pHb2s5T-y`0R!-mi8c22qs@d0r zV*y1kbq@LQvZkrQ-$m0*dg+Xc%d}6M zgOGWlvs;esMqJt?_)ZB{;PHF`nKYY+PNDYrNSrvGXWU&nr?_@4Z;}g^b>nKz-iWS6 zhI1)a?aq9OsoG5u)cuH^kf>ri>O4g^x1QhkWhqc_-`aL}4VX zRD3jF@kJ%(Xl&6&#+I)O>?Fa(!*iV z4t=e#XC`hd*q2yY0uyUWhD>kEj%i}MCK(Bp@^TNDcUtdjgOcp+7N2^PAV9~V;2Oeb zHyDoYuB`G&-#bK++)dGHzkxtlT<9-OD^IG}+5vYwQTK1$2&+sx9*!vI!R#c}D{*@ChR3zBphfv(kF zcE!87uB9ow4M9Q?WSY3X9_#8lM<&X#M-wTK!xz3n)))N5g>*LNIRLJqLW73 zPkihl_jzkvxGtNRp1kuw1{>e_7p1akMeq#Vj6V`IixXU~mYNa8vn%j{@c0a!_J%M> zGOysn?8w5%(Apb@*+hGv*IPo4kRc$=6?Mm6eZt*qsxWDL4LjMWJ%>vY7>da^8Z35- zv1_!sd`K^yQ+sQlu*jzYnn*5I#t~DrfTaDVa@Dax<4>ns%W$-F0fn^^2|Y{YD&IYA z7{6sK&t=t)lqZP+_r3tg5M!_OwDHgMx%yMVY1(RpJ5F=;h^D zI=1JL$PD)_B3fQMFAshUi@d&G|)ON`Dt%?%D6#?D&%aQB?zAi0^Lj+9JgxhR< znQ`HKnq{C(+2QeGlJ{8nlEYAoFfQ?{eaH{JSZuCxL790$?=|yN#1BhC{PHH(b2sXFZiB<|syM1eOht0N#=(7CZW1|W4K35+MdeOue2Gsd8 z#YZA>9%!NF+R{K-2!Bb0+ar?w^7SzL^{bj@8FBHhP}h-OGlp$%=P9ukO-fk-?PI{x z<>YysNM)KRj+Hcc#c}x#``1Ib(ptMBPFm7U1Exkeka4B6bYaFDv{~ZB&-9^fS`s#w z)gq!pX{&JpD$N6W^=xiMDZ^%q13lXJhM!@BC7ULXSh{Y#nT{ z=~+{)Mv}($rreDK3wCH~&rBe!TWdm7O`gYEq0jd~QJmi_8h=jhb?|2z3}EvOZS~Xv zg|%Uvx4-a4F}txs?0INS!HmCYC6DAy7$mXxg)u&vzuV%LN03avr%56RU30JVB0yZ0 zR*A2uKBD??`a$@DrA}X=~18cvnJ*8{mgy|`Q^e(swf_3L%Jor91GZrxiVgg$##8^;TkZ+m{ zbc?U{tV}7MqLQMcH0$Fsz-fOD?u`OeXvcgNihT&IQ$qgD_AOg;vEF#W;Ke9?tgdIL zH9@%9f{Fydb2IqXiIY?pT&m;{A4OT!-2n|sm^$2cn*5-$tD_8UN0}p zl%gX=Q)8ytU} z8R@;2zo?XdvQdvKt(ri>bJ{C{`&5sf(@-s80V)N%@j1=?QU-SY#=}=u z+mOYiVoRU#0T-yf0BiXn4p#_T{eb8K@0I7FEq?1dH^i}9;u{QW1Q*Qp; z5U4Gl;%)AD;Usv zE;9q$Gm-UO6}!gqKJ!rtaE7WTnjTNrr zIhR(vMTfXC`wkleVWIZ?ln;IZS!w)|ETg3rs=fH&2NCRW#IJ{(g~g9o&|lAZZ*tSA z5^{PYXz7H%JJ5WRC6_xC%BPUz8t(l*Lu=M|@Ggs3faxrZGvtPUo^a;25XoD=hB6k6 zLzX?$8;IOXyGs;0A$CA9&;3o($4iI+dEH&&;MmRO>PGhDqWi;Mk{y`4Z1*PCG^tX|ajs_yL`8BVbPhv526|@oLd)-iRk; zK`P?y5uI2v*ijW~!TKQxj-2CeG#OU+!I~aQA%o3+NBD@c+bz~8?3sZgzZYUBZ9^^8i^Ao(`<8Yb{|vWBAaJNE>Lah~3GF=!Vw>i4 zavB$ULC?u8Dz*{B)H(~fBtJ95sDTgO6u!kPzFH!U0Sc&|$vUF@~RHw)(v7 zrdFA=?&~QY>5txg+&c>v(2h*mMIY70@zfj?>L`ghX9GO2d8X@%AlV2@I|k5AsQToL z2IQJXD*E=fwi@nLT+>;Mw@!p7gC`kD$Ac1vqoD@o9RXF*(+@lpj|c|w;)`LWT9QVP z6srYL{fAk%u8v(E@T;|Fd*W{xuVKb%FuJUg4tNKAQUviJ->sFz?gzM~nL8uBIWVqU zogqXMwB`4KpaQxVgfbT|+M)g!k|TvgU5E`g9&;cI40i4kDmy^pw4d;OOio5XLIw8> z1r*cBx|)oTqXIj_Zn_wuy-s^|CWUrJ1&n>~m^Y09)~zVVZ`GOw~3kE8tPL;+&i zS6ekdCUCEx+>SWeO?passmJavlQ&WH@{~e$N;>2#NBh3h2;sYvVw!lL;AFqr^Qsli zr%{NBu7o{1IW%f0#8hK>VXgDN99M1`$LzP4MoJ7xjC>hTiK;}5nZ1yM_~AVotjHVQ zur^6StG-}Zn-No07Dw?PrY6h~NP=4Vn=KT5wVl|{^vtu122SCzHF{Q5(dGGU;ucr9 z_yqFp`DI}1w!50}@86|d+Aic?nvU@+%cQ2IKC&5Z>X;T2pC~*3II5SYC6-}sYM;33 zJ=&+S!U}U-J(2=@Qm?kTGrs}Dm*0Zh?l_uf@oWj$CT_PDS z_5S|T{q0O!G|ZEaIf5?e))MEnt&aR4mrM@3B23j)@v8GhE#IR%gsa`>AG8~k^X4eq zsi-9gIa}{Zr?lL|kc#82xG51~Y)0%o14i~1Gf?`;^68@Q;|8jg_ZB|hA^9SXlsn+jL9Rw=Gz*_|a zQZ9#2MlhwVG3&u*&lj-Wzd_s0TJFY05!nxfHxmxg5gjEq~jybh-YlrZV=7HT6{)a)}vS=#v&s>>So1uKH z^q(cB$LSrK75G;_*M)c<;ZS~HZAbQA)<|{lR`8^jtXhQ{A?>*qDBIWq7y5B)>h0fB z&zD!E>!(7?&12DKbLtQfE|Lo=hn=@xrMSr*&9CD8oj_~UCcw#SUwNT_ig1e1Dh1}? zw&tWhLmC3=)e;zCbkFCgguX5<{LLh@Jw3^9>k3eIy30RA+&4NLKOTVxoRznGfRIBm zsio-enhcEZ94cUx)wJDuse{Th`*;_-#b+@DV(i36wSr5rN@jttCMO4C2t~+nFv3hR z9V|2`L#nnhZW2L4t{pz6#?31G>s9(B7X~@`kx|T}8X{&J%Os=Xw*dX%5bLf0A|m|+ zy*8Nq=8b+?gFy6fB+N%KiGgop^bmMJaY4Imn2y@Xgox5^8`KcHRGNyc>=%R_8WW#$ zPz26MnK8U8j4|dabP<{Cqgk6tW8C4c{fO6G%xQ$bYBVc5+gA!@8lAk3M9`aQ-jBsx z!V9F$nk|-N5m{v{y7-n~d}zDC?}9U@xuvJMd3$jkHw~l?q;MNabrho3d7s6q5n|c+ z4I4;NR**_%FZVs{GM)~G6lYtN4@hJ>cds0>)QBlLfnQoL*M-~L zBv1Z+@f~WkCRV4~5FRr&+LA765Xbd+KzP9Gn21zwCoN!~+0Y z1w?69M(>Y%McayNm3oauLOr}OyU`&|!7_j!`p&zR&uw}{o6Rs=y zX4AZ5z}koPfpm%g7T146At!T!hphBPV@6D67Zw$!N=_D#qlzN<>QVr?tL+}yby77? zNME1~$ZZZo4TpdSraH_K z2uqihf1Ke$!9gXCygVH=L)H;qRe)q%{DT6;aa{cHWB-G8un4_|nISNAt}s5jhwgb1 zN*tWonmwi>pjeOj)&AHpYI}MlS55bYMz-tqShDe>ebg&jwX;2e)V&osQw=v;iWpa4 zD#Gy}p0Fz0;s(K=ReQ;4x9CuC)Ab9-LqpqGmtI?9DTr{09v@jy8)aO11b-=1%|gz{ zs!5dWw&T-}D6SDTkuDx_PRS#4XxB&&`wm78(H!0$W>Z>_Y+7(8tWoC&9nv$Q_L`m+okw9mASB92 zgH4&OKw&$?N-*zUWf~2Po%sSXj>A%*CeTbZb*^~Wzf6GDxE)(3TWwk)bB6%t{l^&R zHgk8yfk7wlE3);8YTN@2!iH9BdDg{|OjFumH<9zTxTC``+esxB@{>JUYa?7qtjMm3;O4Im) zmc`F?A~^iod66wu{t2cMAGbn_V@tfSxyfjQelYtTxu^QIci!@Bb{!QsA8APjhZO^A z@u2OMPxRcVE^oiK>MO(P{vZu!8|PE3ljV(RQb<&Z2}51K_%Zj#Zp9}F1)8LAism8Y z4alAGGR&2N)(DpL+YGh&2XRh^+P-O;l0!Hrsu31d!&N$@?NuK++5j!0I^y+dykcy} z4uNUWUUGh;E54I@F~w#s8uxD>T3#V0l--|lfr-LNt2SFihn)oEw6}MBV>yI(96Lah zV4y#N-0sIjh3sEt9z;i(Cz0ox}}R4sQ*DeB5sDi4iXanQwC^zCkJV`#>W9tIwQom)o& zG$l$oX{cpoFFL6lTg7Hjs*nKXiRMk8>UmCDb%UA?RLTO_0)&WCG-8)H>_*uT-|}vw zhTFRy@I^}wN54Dw;_G0QS{o$1Q}Oi*w@+ZBC&;^CP-=`2-R|yNOkf9zZMA9>(ouv^ zoh5@q3$gzF-KYKqwG-_h8uvD%PlnASb(dcI>WmDKc!{lDicO)jiqZy935JDwj8hg3 zsy{Te|G*MeZV{&3_{uaUK7n&>sN$JV;>SGAZ!8wc()i#&1(vAX3Edb=di-`el-DNT z1Yu3jPt;lV68JHSU$a=Al;;NwYEcUCEx%XLk8Dvr$JHxoi+q3C$j;cxW&cXsM?9wo zo)WSKl?17XlExUN3uDC^N34Th(^p-KpbX{m3t#$P73u=Fa8TanBIWQNNXRbKO%}pH z46kAbbLlaPh>##q;ZyS?E`U;0si6WN;lcQ4)q`VWSexDS+#OykYu=wF7%FdVtYV9h z-<@x`tX9|b*qRy*jC<=ZcUYz6p{)`}1;GywoNFT7EyQicdG9;LK!(31oHOH#jgjv~ z13f=oc4$^~C*zK4cQQmheehEjUoYOrNPhBk_xEnB zs%Sm7V=(#ZVL#wz@8Iu}lVEua{XyxqU(1`mTj|cTLp@s<0!BA~f#duYL3Eap&EDJ4 zR~rlo?wGY?G~ARsDeD;tYF8U{D)@1<87xG>nuC*HLfoRUzbI)f51fAkO^q#_#Q--m zui)F4uC{pm&QVuB<$!zM8M_^dY*$A1HJM!>yb>SXj2oiV57sW#*pYkWC`nu-;uU(q zn@|+`#B_x3ar>;YdahKXH(K-%b)2}S9`}lz4u+>e!<-0x??fCfvIK8q*cx3k;YLv7 zusnyierA~YcPF~H04e>>Mf7hnb>LxhYXS5k1ElJ~`Ip{*=Oy|n=D^X;Fc5m!S1Zjc z90>~@`zJCA+;uk)fp8r-!Eq?<=H-(LO}|TY|S9g^(AH4Z{E!1TD2&kI@v%h%@t&!3(e1%-Y0?mKq-zkWSEUr zmcS6ruIBuSaL-Z8+TqcX_e!rsz#0$t_SNJ~iumah%WHqzN)&lml5i{Pc^{zCcHZYJR4f8zC?P?v7n6 zqru^N4?RBa%MA}T4HYGgjx?HAP|%~QHp~OqXeE(?fyKZIEQS08M)#ax%$>M`^s1Am z;S0tgbQ|^`8Xy^*#yM~D`EHe}VkGgiq)EF6Nd*d+{nYR-ZP)fX*DoG2E_klbt$7pr zFOCdM9zaE**5c!q4aF`O*?5U z0Zvt1JabKRxPOL2l#sk>drp#t50ER_H2lfp3`m zLxvDpZw+hCilyiqI#C0)9tWc%y0TN%{q%)o;u8+7+_Y_{_MyRTMGj(_&j&xDw zem^$dpP&d(4gJk^<*Vd^Y-c^sP1LI=<+L@2bLHPrs)~o|$Q!rD^e+U6YNoLfMHgg# z84S4%`mm8>8O^}OsOzE^_JvF|ewSCXUUlTDwwsefsxaG|)7CXF=BtV`xPFZyk_*Ed zT)i2=dc0umHcpm>7ttU8&*?HeM}Yi)Gu=^|`1cP~2Td(bdMt zUh8?TpOn8y16H+_@B}WlvdDJT=k5DJ-%UuYu%4;e`01{+ee$t(lk^G5#3GFyVtI>p zqos(%2&=X-a&A151Fhb#L->>(VwH7i%KJvAbdCB#{HqCcOMJa3F|#Ar=Y~vbV4~nT zS|ziv^qTgW8?a@f1#l~-g_q;d`7`e}`39Wn!M*6QwC#4W{knmT->~2;@=TG6=yHm1^A63qwUq-EEaZ@Z^7F%aAV)jzu z6Ms&aPN1$up0~tk?h}!6HYHdZ25zb}I_?*hX!VDRetS3S5gaJllJ_WdME_3F`xQTS z!6Wg>^legql-o*8zH-!3LIX)3D5zOurS6Om{Mn|Bp0h*~x!yut&rZ4O0 zqjPnRn%L=i~lw0U-enC?rs@^cwHWg#~;81aO-MyjE-joT&fzGXEm*?^p7( z3Gk~utFYeH|0w&HOkbJ=&zN6KcmKxxJUai4*{>lyL!X)Xr~XrC{x{rn?_cft9o+gq zasN>zf6C~kwtYtb8ZOtrp#RjpFQ@)8m*8(&rGL!eZz?Ydyv)+~n?PLJKd16c;CIfx z|0WQqXA(c#e?$XNkw2jTOYToeoOyq?G67rzE&yBZKb?O`f)qgDZ73?q~SiOZeAFt@>v}(hJb}ISu1;`vo@u{U`iq7RTTG z|9z_h?1I1A^E_g~{xT8%o1C5vj$iE=!o2Z^Rq=ALFAb1q;IF}I{|WqG=EzG*FE!0? zN@JUU4B@4k{l61x-})CqzZKX^LWnl_$RTt@Pz9oYhPC%fQLs6Y8w{ z3;stKQ6L|%3tVzEW=AQBue^`Bmf-^IC6iYzpMX&{s-@W-@bqD#lhyk z(Eo|L`SaAijJx?Q@UuUGzoT$oj{Ic;%-@=x_$8>V9#U)|AlHDGM}L6r zFTA~xg99L$rv2}e`&&yTxA$FcGXVjOX8;4iJ@W>%U#F?=KPT7T!PUa(AK?Fs+;;T; z;_YB+WNGxjZaWkNM#&JsHsJu+v(NEL&+Qjic!NKHKjA;^TUiP4pGpu1@K~k;0R$Ad H`waRYcsFa` literal 0 HcmV?d00001 diff --git a/README.md b/README.md new file mode 100644 index 0000000..e83f7c3 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# JSD-9827 + +JSD-9827 \ No newline at end of file diff --git a/plugin.xml b/plugin.xml new file mode 100644 index 0000000..924b7b9 --- /dev/null +++ b/plugin.xml @@ -0,0 +1,19 @@ + + com.fr.plugin.JSD9827 + + yes + 1.06 + 10.0 + 2020-05-01 + fr.open + + + ]]> + + + + + + + diff --git a/src/main/java/com/fr/plugin/roles/JSDCustomRoleResource.java b/src/main/java/com/fr/plugin/roles/JSDCustomRoleResource.java new file mode 100644 index 0000000..ed92efc --- /dev/null +++ b/src/main/java/com/fr/plugin/roles/JSDCustomRoleResource.java @@ -0,0 +1,203 @@ +package com.fr.plugin.roles; + +import com.fr.base.TableData; +import com.fr.decision.authority.base.constant.type.authority.AuthorityType; +import com.fr.decision.authority.base.constant.type.operation.OperationType; +import com.fr.decision.authority.data.CustomRole; +import com.fr.decision.authority.data.User; +import com.fr.decision.base.util.CollectionUtil; +import com.fr.decision.fun.impl.AbstractGlobalRequestFilterProvider; +import com.fr.decision.webservice.Response; +import com.fr.decision.webservice.bean.authority.PrivilegeBean; +import com.fr.decision.webservice.bean.authority.PrivilegeDetailBean; +import com.fr.decision.webservice.bean.user.*; +import com.fr.decision.webservice.utils.ControllerFactory; +import com.fr.decision.webservice.utils.controller.CustomRoleController; +import com.fr.decision.webservice.v10.authority.AuthorityService; +import com.fr.decision.webservice.v10.login.LoginService; +import com.fr.decision.webservice.v10.user.CustomRoleService; +import com.fr.decision.webservice.v10.user.UserService; +import com.fr.file.TableDataConfig; +import com.fr.general.data.DataModel; +import com.fr.intelli.record.Focus; +import com.fr.intelli.record.Original; +import com.fr.json.JSONArray; +import com.fr.json.JSONObject; +import com.fr.log.FineLoggerFactory; +import com.fr.record.analyzer.EnableMetrics; +import com.fr.script.Calculator; +import com.fr.stable.StringUtils; +import com.fr.stable.query.data.DataList; +import com.fr.third.org.apache.http.client.methods.CloseableHttpResponse; +import com.fr.third.org.apache.http.client.methods.HttpPost; +import com.fr.third.org.apache.http.client.methods.HttpPut; +import com.fr.third.org.apache.http.entity.StringEntity; +import com.fr.third.org.apache.http.impl.client.CloseableHttpClient; +import com.fr.third.org.apache.http.impl.client.HttpClientBuilder; +import com.fr.third.org.apache.http.util.EntityUtils; +import com.fr.web.utils.WebUtils; + +import javax.servlet.FilterChain; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.*; + +@EnableMetrics +public class JSDCustomRoleResource extends AbstractGlobalRequestFilterProvider { + + private static final String ROLES = "/decision/v10/roles"; + //private static final String ROLES = "/decision/v10/roleserwrerer"; + + @Override + @Focus(id = "com.fr.plugin.JSD9827", text = "Plugin-JSD_9827_custom_role", source = Original.PLUGIN) + public String filterName() { + return "JSDCustomRoleResource"; + } + + @Override + public String[] urlPatterns() { + return new String[]{ + "/decision/v10/roles" + }; + } + + + @Override + public void doFilter(HttpServletRequest req, HttpServletResponse res, FilterChain filterChain) { + + String uri = req.getRequestURI(); + try { + // 角色查询拦截 + if (uri.endsWith(ROLES)) { + String currentUId = UserService.getInstance().getCurrentUserId(req); + String currentUserName = LoginService.getInstance().getUserNameFromRequest(req); + String page = WebUtils.getHTTPRequestParameter(req, "page"); + String count = WebUtils.getHTTPRequestParameter(req, "count"); + + if (StringUtils.equals(req.getMethod(), "GET") && StringUtils.isNotEmpty(page) && StringUtils.isNotEmpty(count)) { + String keyword = WebUtils.getHTTPRequestParameter(req, "keyword"); + int creationType = StringUtils.isEmpty(WebUtils.getHTTPRequestParameter(req, "creationType")) ? 0 : Integer.valueOf(WebUtils.getHTTPRequestParameter(req, "creationType")); + int privilegeType = StringUtils.isEmpty(WebUtils.getHTTPRequestParameter(req, "privilegeType")) ? 9 : Integer.valueOf(WebUtils.getHTTPRequestParameter(req, "privilegeType")); + + List uids = new ArrayList<>(); + uids.add(currentUId); + TableData tableData = TableDataConfig.getInstance().getTableData("useraccess"); + + if (tableData != null) { + DataModel model = tableData.createDataModel(Calculator.createCalculator()); + for (int i = 0; i < model.getRowCount(); i++) { + String userName = (String) model.getValueAt(i, 0); + if (currentUserName.equals(userName)) { + continue; + } + User user = UserService.getInstance().getUserByUserName(userName); + if (user != null) { + String uid = user.getId(); + shareRoles(uid, currentUId, req); + } + } + } + //Response roleList = getRoleList(uids.toArray(new String[0]), Integer.valueOf(page), Integer.valueOf(count), keyword, creationType, privilegeType); + Response roleList = getRoleList(currentUId, Integer.valueOf(page), Integer.valueOf(count), keyword, creationType, privilegeType); + WebUtils.printAsJSON(res, JSONObject.mapFrom(roleList)); + return; + } + } + + filterChain.doFilter(req, res); + + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e, e.getMessage()); + } + } + + + /** + * 将A用户的角色,共享给B用户 + */ + private void shareRoles(String srcUid, String destUid, HttpServletRequest req) throws Exception { + List customRoles = getAllRoles(srcUid, 0); + if (customRoles != null) { + + // 获取原用户的角色权限 + JSONObject jsonObject = new JSONObject(); + jsonObject.put("carrierType", "user"); + jsonObject.put("entityType", "customRole"); + jsonObject.put("carrierId", srcUid); + JSONArray jsonArray = new JSONArray(); + for (CustomRole role : customRoles) { + jsonArray.put(role.getId()); + } + jsonObject.put("entityIds", jsonArray); + + StringBuffer reqUrl = req.getRequestURL(); + String url = reqUrl.delete(reqUrl.length() - req.getRequestURI().length(), reqUrl.length()).toString(); + url += "/webroot/decision/v10/authority/carrier"; + + CloseableHttpClient client = HttpClientBuilder.create().build(); + HttpPost request = new HttpPost(url); + request.setHeader("Content-Type", "application/json"); + request.setHeader("Authorization", req.getHeader("Authorization")); + StringEntity entity = new StringEntity(jsonObject.toString(), "UTF-8"); + request.setEntity(entity); + CloseableHttpResponse response = client.execute(request); + String res = EntityUtils.toString(response.getEntity(), "UTF-8"); + + // 更新目标用户的角色权限 + if (StringUtils.isNotEmpty(res)) { + JSONObject jsonObjectRes = new JSONObject(res); + JSONObject data = jsonObjectRes.getJSONObject("data"); + if (data == null) { + FineLoggerFactory.getLogger().info("原用户角色权限数据为空"); + return; + } + JSONArray roleArr = data.getJSONArray("customRole"); + if (roleArr == null) { + FineLoggerFactory.getLogger().info("原用户角色权限数据为空"); + return; + } + + for (int i = 0; i < roleArr.size(); i++) { + JSONObject roleJson = (JSONObject) roleArr.get(i); + JSONArray values = roleJson.getJSONArray("values"); + if (values == null) { + continue; + } + PrivilegeBean privilegeBean = new PrivilegeBean(); + privilegeBean.setId(roleJson.getString("id")); + List detailBeans = new ArrayList<>(); + for (int j = 0; j < values.size(); j++) { + JSONObject val = values.getJSONObject(j); + PrivilegeDetailBean detailBean = new PrivilegeDetailBean(); + detailBean.setPrivilegeType(val.getInt("privilegeType")); + detailBean.setPrivilegeValue(val.getInt("privilegeValue")); + detailBeans.add(detailBean); + } + privilegeBean.setValues(detailBeans.toArray(new PrivilegeDetailBean[0])); + + AuthorityService.getInstance().updateAuthorityEntityByCarrier(destUid, "user", destUid, privilegeBean, "customRole"); + } + } + + } + + } + + + private List getAllRoles(String uid, int creationType) throws Exception { + OperationType[] operTypeArr = creationType == 0 ? new OperationType[0] : new OperationType[]{OperationType.fromInteger(creationType)}; + CustomRoleController customRoleController = ControllerFactory.getInstance().getCustomRoleController(uid); + //DataList customRoles = customRoleController.getCustomRoles(uid, 1, 1000, "", operTypeArr); + DataList customRoles = customRoleController.getCustomRoles(uid, 1, 1000, ""); + return customRoles.getList(); + } + + private Response getRoleList(String userid, int page, int count, String keyword, int creationType, int privilegeType) throws Exception { + AuthorityType authorityType = AuthorityType.fromInteger(privilegeType); + OperationType[] operTypeArr = creationType == 0 ? new OperationType[0] : new OperationType[]{OperationType.fromInteger(creationType)}; + //Map customRoleMap = CustomRoleService.getInstance().getCustomRoles(userid, page, count, keyword, operTypeArr); + Map customRoleMap = CustomRoleService.getInstance().getCustomRoles(userid, page, count, keyword); + return Response.ok(customRoleMap); + } + +} diff --git a/补充需求 b/补充需求 new file mode 100644 index 0000000..d6c6629 --- /dev/null +++ b/补充需求 @@ -0,0 +1 @@ +补充需求,关联任务JSD-10482