From ab1b77e1255a2e2b36dca08c0b4d88168ee8ba35 Mon Sep 17 00:00:00 2001 From: qiankunpingtai Date: Tue, 12 Mar 2019 16:12:18 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=9C=BA=E6=9E=84=EF=BC=8C?= =?UTF-8?q?=E9=87=8D=E5=86=99=E6=9C=BA=E6=9E=84=E5=92=8C=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E5=85=B3=E7=B3=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- erp_web/pages/manage/organization.html | 5 + .../pages/manage/organization_forselect.html | 11 +- erp_web/pages/manage/user.html | 152 +++++++------ sql/jsh_erp.sql | 87 +++++++ sql/华夏ERP数据库设计汇总.xlsx | Bin 80741 -> 80765 bytes .../jsh/erp/constants/BusinessConstants.java | 24 ++ .../jsh/erp/constants/ExceptionConstants.java | 87 ++++--- .../jsh/erp/controller/UserController.java | 109 ++++++++- .../datasource/entities/OrgaUserRelEx.java | 10 + .../jsh/erp/datasource/entities/UserEx.java | 50 ++++ .../mappers/OrgaUserRelMapperEx.java | 14 ++ .../erp/datasource/mappers/UserMapperEx.java | 14 ++ .../orgaUserRel/OrgaUserRelComponent.java | 65 ++++++ .../orgaUserRel/OrgaUserRelResource.java | 19 ++ .../orgaUserRel/OrgaUserRelService.java | 119 ++++++++++ .../com/jsh/erp/service/user/UserService.java | 215 +++++++++++++++++- .../mapper_xml/OrgaUserRelMapperEx.xml | 44 ++++ .../resources/mapper_xml/UserMapperEx.xml | 105 +++++++++ 18 files changed, 1025 insertions(+), 105 deletions(-) create mode 100644 src/main/java/com/jsh/erp/datasource/entities/OrgaUserRelEx.java create mode 100644 src/main/java/com/jsh/erp/datasource/entities/UserEx.java create mode 100644 src/main/java/com/jsh/erp/datasource/mappers/OrgaUserRelMapperEx.java create mode 100644 src/main/java/com/jsh/erp/service/orgaUserRel/OrgaUserRelComponent.java create mode 100644 src/main/java/com/jsh/erp/service/orgaUserRel/OrgaUserRelResource.java create mode 100644 src/main/java/com/jsh/erp/service/orgaUserRel/OrgaUserRelService.java create mode 100644 src/main/resources/mapper_xml/OrgaUserRelMapperEx.xml diff --git a/erp_web/pages/manage/organization.html b/erp_web/pages/manage/organization.html index 4d39e0fe..bee0e57a 100644 --- a/erp_web/pages/manage/organization.html +++ b/erp_web/pages/manage/organization.html @@ -36,6 +36,7 @@ + @@ -169,6 +170,8 @@ $("#orgStopTime").val(""); $("#remark").val(""); $("#id").val(""); + //机构父级选择 + $("#selectType").val("orgParent"); url = '/organization/addOrganization'; } function editOrganization(node) { @@ -202,6 +205,8 @@ $("#orgStopTime").val(res.data.orgStopTime); $("#remark").val(res.data.remark); $("#id").val(res.data.id); + //机构父级选择 + $("#selectType").val("orgParent"); url = '/organization/editOrganization'; } }, diff --git a/erp_web/pages/manage/organization_forselect.html b/erp_web/pages/manage/organization_forselect.html index 0d889a92..6050b4d6 100644 --- a/erp_web/pages/manage/organization_forselect.html +++ b/erp_web/pages/manage/organization_forselect.html @@ -33,9 +33,14 @@ }); function forSelectOrganization(node) { - console.log(node); - $("#orgParentName").val(node.text); - $("#orgParentNo").val(node.attributes); + var selectType=$("#selectType").val(); + if(selectType=='orgParent'){ + $("#orgParentName").val(node.text); + $("#orgParentNo").val(node.attributes); + }else if(selectType=='org'){ + $("#orgAbr").val(node.text); + $("#orgaId").val(node.id); + } $('#forSelectOrganizationDlg').dialog('close'); } }); diff --git a/erp_web/pages/manage/user.html b/erp_web/pages/manage/user.html index 8ef2eadd..7008be41 100644 --- a/erp_web/pages/manage/user.html +++ b/erp_web/pages/manage/user.html @@ -62,15 +62,24 @@ data-options="required:true,validType:'length[2,15]'" style="width: 120px;height: 20px"/> 初始密码:123456 +
+ + + + + + + +
+
+ + +
-
- - -
@@ -96,6 +105,9 @@ 取消
+
+
\ No newline at end of file diff --git a/sql/jsh_erp.sql b/sql/jsh_erp.sql index 823b5684..d9777ac0 100644 --- a/sql/jsh_erp.sql +++ b/sql/jsh_erp.sql @@ -1307,5 +1307,92 @@ INSERT INTO `jsh_functions`(`Number`, `Name`, `PNumber`, `URL`, `State`, `Sort`, -- 添加根机构 -- ---------------------------- INSERT INTO `jsh_organization`(`org_no`, `org_full_name`, `org_abr`, `org_tpcd`, `org_stcd`, `org_parent_no`, `sort`, `remark`, `create_time`, `creator`, `update_time`, `updater`, `org_create_time`, `org_stop_time`) VALUES ('01', '根机构', '根机构', NULL, '2', '-1', '1', '根机构,初始化存在', NULL, NULL, NULL, NULL, NULL, NULL); +-- ---------------------------- +-- 时间:2019年3月8日 +-- version:1.0.6 +-- 此次更新 +-- 1、根据本地用户表中现有部门生成机构表数据,同时重建机构和用户的关联关系 +-- 特别提醒:之后的sql都是在之前基础上迭代,可以对已存在的系统进行数据保留更新 +-- ---------------------------- +DROP FUNCTION IF EXISTS `_buildOrgAndOrgUserRel`; +DELIMITER ;; +CREATE FUNCTION `_buildOrgAndOrgUserRel` (name varchar(50)) RETURNS mediumtext CHARSET utf8 +begin +declare _org_full_name varchar(500); -- 机构全称 +declare _org_abr varchar(20); -- 机构简称 +declare _sort int default 0; +declare _success_msg varchar(50) default '重建机构及机构用户关系成功'; -- 机构全称 + -- 遍历数据结束标志 +declare done int DEFAULT 0; +-- 获取用户表中唯一的部门信息列表 +declare orgCur cursor for select distinct department from jsh_user where department!='' and department is not null; + -- 将结束标志绑定到游标 +declare continue handler for not found set done = 1; + -- 循环部门信息列表在机构表插入数据 + -- 打开游标 + open orgCur; + -- 开始循环 + read_loop: loop + -- 提取游标里的数据,这里只有一个,多个的话也一样; + fetch orgCur into _org_full_name; + -- 声明结束的时候 + if done=1 then + leave read_loop; + end if; + -- 这里做你想做的循环的事件 + if length(_org_full_name)<=20 then + set _org_abr=_org_full_name; + else + set _org_abr=left(_org_full_name,20); + end if; + set _sort=_sort+1; + insert into jsh_organization (org_full_name, org_abr, org_stcd, org_parent_no, sort, remark) + values (_org_full_name,_org_abr, '1', '01', _sort, '机构表初始化'); + begin + declare _userId bigint; + declare _orgId bigint; + -- 遍历数据结束标志 + declare ogrUserRelDone int DEFAULT 0; + -- 根据用户表和机构表部门关联关系,重建用户和机构关联关系 + declare ogrUserRelCur cursor for select user.id as userId,org.id as orgId from jsh_user user,jsh_organization org + where 1=1 and user.department=org.org_full_name and user.department =_org_full_name; + -- 将结束标志绑定到游标 + declare continue handler for not found set ogrUserRelDone = 1; + -- 打开游标 + open ogrUserRelCur; + -- 开始循环 + rel_read_loop: loop + -- 提取游标里的数据,这里只有一个,多个的话也一样; + fetch ogrUserRelCur into _userId,_orgId; + -- 声明结束的时候 + if ogrUserRelDone=1 then + leave rel_read_loop; + end if; + insert into `jsh_orga_user_rel`(`orga_id`, `user_id`, `delete_flag`) VALUES (_orgId,_userId,'0'); + + end loop rel_read_loop; + -- 关闭游标 + close ogrUserRelCur; + end; + + end loop read_loop; + -- 关闭游标 + close orgCur; + +-- 清空用户表中的部门信息 +update jsh_user set department=null; + +return _success_msg; +end +;; +DELIMITER ; +-- ---------------------------- +-- 初始化机构数据,重建机构用户关系 +-- ---------------------------- +select _buildOrgAndOrgUserRel('初始化机构数据,重建机构用户关系') from dual; +-- ---------------------------- +-- 删除一次性函数 +-- ---------------------------- +DROP FUNCTION _buildOrgAndOrgUserRel; \ No newline at end of file diff --git a/sql/华夏ERP数据库设计汇总.xlsx b/sql/华夏ERP数据库设计汇总.xlsx index 18855f4babe61ed76a7a920639670a66eee934b4..8ec9b2950e63b6946961f20eefd8d2cb30d2ebd7 100644 GIT binary patch delta 56122 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 SJB4?lQic%4a90w5(((`Kw6Ajj delta 56268 zcmagFWmp_Y(*=ra(BQ${U4uKpU4y%Z;64!CWpHoyOlC651fW#0JKd^1UEw`>GPpi(ryNWwlwYL z;w0JygO#?k&`3R+-sKE-hFUKzgp-4)GcN&ruOB#duv>3oR?Ui{RPfM20idE`5V;i3 z!Mw0!cAY#@atfwNBU~W$$hk^C_Fhp4gFgKriC6PAC778Zc`ETPn(TeB>_L25)86dZ@ z0#G?e0~&^pbz8GmzlPfNx|{49q*ZcgYGA8BQ-_R^d~aXbb8RTk8EIocr7e3LNvq?~ z+7p2O+^i_XL$a2#bn?UZ@d;;V%Zt(j80UmCuJYyAdWK7iW6k=_6w54~?BS{p`%Ry* zEQ0-{Z_sVEo6v#3NCcHNvwrC0xuYQh%p~AuU3zAwpy*}N7kd@`2VXz<|AP^uz z6~Bw5ph2ntKfsUyCKQ8M@g#4lyTs>wt;_O7klqHQMI$Q^S}Mt=S&IQ?aT4*iHWUYQ zI>%UU$3|LH>^B!+aCSO4+rC(fk)o$(h#s248s73Jif@b8g!-}Tsykv6I~*P{+#E+? zGt2CVN>~~8sv$J@FJA(cJC#f-P1y-b9?+HC`z;8maIzR2sVRI?I;>JP0j^?ft1xt_{a}KFvsyBiD7bxOG1p?=EE1b z+&y}&mHrQ&C#$RKn)DhgF)bk3?-Rl1{LPnS3xfcuTo53h)VM|YY<`$f>^MMh- zot+z7Yx}cD{qoC?PT{9OeyxW4(8#$FvsOubW*qkxrIfL;TX%Qdp%UQbxrwD4Uu$kM ze8c^{$A{NU;dT9wlQg?P*OJSIjpxqJm(zO>uR0?34q-qFVFNr`@er{0_-^JNWP+bC zPGh-CMfCdJ#j7>WjwGi;tqXX67x4o?KU9GF8D00#CkvXl>+;~-r#V$n`;>5M(!DQl zhw;qCU=&gznQdxeVPSG%&t(7ZORN~; zA>pZFvUDuY*vh?82jQo!_68y7t#t4o!Y$$Stcf3bm!Y?34*V@GDJR!A&F+A+jg=}> z#bU}fT_U~9k-+vf5|>RDG_;C1*M38J8ZG4OYt1Ic(5T!`Cdkg|V^(ez zTc-~vUwUTN#)i;pw}RXe|54?_(sikZ79UjBR#nPu%MU#oApEYhrQG|g?#ygPCF>R9 z)2mzWwb@@K4HZ7@z8-Cb$&&z7F6G1B6?`I^XTXtW}N`t5M(f&Mdu9m%G_lquu5Cwo|2=+3xPk z$xb@QjSPcNhraIx`O;vd-(g+xVRSl?3n89yM~a^+)~x$>U!FGPDp&&qk-eT@-zXw~ z+Q>3!eeBH^e9ll34RsrF{c?!R_q5qg;#XqecLjUf{S457Ua&!ipFZ1+Ko+eI^gt?) zq-T7--qW>*xIG=W)Y5C@n_Z3^``qN}zF9(%Ur~@xqMnM*gx=NtUtZqws*^#WSSSWM#QU9TmBoZSME_bw-ko43GA zo^8A~5mR}mmk?L^rasMzp>u5)<3WQFe4+)mSqAv;0azlk3Q;V8Rb4$F6^W~)%$=xr zNi`ysHD)NNyi$*c)V7Y=L&M`lu}w2tL=>G)q{K3ih4cM)`9y^SxRMfvBQ{fCRqm1c z?+&S#R{c$*YC!UDj_}f2ck8$x%1sNkQ2U|j{1emh3|%mq@5-6y9=znMpZ;>ufAQOZ z^0GE29+1XQY+F$CUdn4vL?8}IrY!ti@=-pLB_gcrJM-5~HFgK}E~vV$1Ow<8wyp$0 zhyQy`rVi(l7&BVz75~`-3yI^K&Ut=!o|V>6*QoJz*!u2&ZDZ!oZ3D&ycBS?h(2p24 z&iF!5%WqucPH%r(oNHgH-mWS!#vbAwBtf5xAdwbP58^I#GIf-63jUO!t6=L~yW>sdh<%w+dle2<`U!oda=3+(J0W^SJ z`+1zeLc^G03VQS;I30KO{pMEWqFVKu5y?aiCAlPBrr1c!Rna5!&vBa&Uk!(bz7C(f<+Ov(rom%`|R&dBh`Q z?_BgC34VA;J)u)Xoxp5Q<$R4g_Q*6j(sH4=3tuxo$Henmnr1oQMp32uQ^F6lq7?sfV6DjIrrFZ;Oqs&eX49d zZkTLfrNHX^8tC)h_(ejra0OP;1yub-f*E} z!UXc6RIKBYq!*ks1ej~@>lJXM7k4a}SV$>q(0JaUvR`b6sKAHA{Dyf5zDSFhltk^r z&2N+VmaP|mmEh8(l*(NB^dtc(O#`pKH~=XHOQ&%^=^rqRMvBg|NP{r2{{Vr0Ku>d1 zNbAUWuSl3+xKL-z*5ljH5}r4wmMm*#;zWa_@!P+F_=QMu15_tg2`J?p9<>F0Tjo*1 zdmPzI`OuKO^ebpa>1Gu2w&5Z{&=@b!Z16X8&~jK!gg@;4=>;HA-oBr%QTRjS768u(%)D86OfyY`1fTy|;y-;M zt$=;GfPL*w{nXQNT!90dJj1O|RSSGIb}ar{ne`{_3_SgPswJ+Uz5 zlCI##@O>%JKwyG{*%SD)h}jKo2OOf`WG&ev0#Ls@q=oy?O&I?tAO1#%@|?y(o+$9X z^hP?3dY;Ee+mq~~`tT?*Goz$UB@Req(PV3WQ!wH9?}%KQXE4UtJ;yYdO(6?bc7P06 zxBWB?>e*0D|6*Y8t_1Pp2m093-zfzGxUS`}mZLXaBmgr%IIkzi;DIx>(}+~`p}zA^ zcN}i)n^K;C=N^p`-cGa|%BS?hboi(%Uy?LVTlaO-=fR=t+a7pA$uW6q4hayYR>!hb zn3Kex#L$hC4$fdor3t8SqM0FU1GdtSSN4YQW?ni1F*PfVIL6Rj2`#fGqZhwvt*)a;-3M+`T4SFLY7#puB&xcc0z6b&#~42SmjTL z4U+(5@#eV27JY|B96W2FFdH^Nlzt)O7FMma_^e?Ryly7eSsW;K90=FU7M2d?r zBrt&nzXc>_^5~Y5n+&WdFeqAU;=s@$M>WDqD88ph{x7UnRYYj=C#hYbj6e%}NL%R` zb}(FGicZ$ZnGE@a1%DQcCXuFtT$1Y{IEhl#MA66Ex@KVt0R{Z$QM%O`Xh9j^y*W>?Ss zGn!zfR>eeYM#WD{!9o2zN+H2V{#Q(uVV6t-7(~Iy#=!ptp{g3OlXP$q$m`-@ z>H&Up?;kVjAXhb+PR++0@XK;oFXGg?foM%3M?cWCeovJCZ>V!uE6tg}*w~U)5qbZy zXWRdi?#e3v1C8KcQNc&{&jdxN5tEH#cuHXYt`>jC<@hrYk(G)%_Ak5#p-BI?=K(0K zPjiuyAt7R78&mU)^?AAVfOr#Hb?67h{{_pGY? zi)~FhW4hai(Mw>u-N3c#=ou9*0VCN+X&(RIa%~Z6!2(QqFHcr-dz4YI}n5E9iV(0Oj)X7FlFne{z{iWiqOAyxM&hk!SkE1zJCwO zKgepjQ`_WLNp5notYj^r1n5|@TMEk!hU*lp-XtA3-V2bj8 zsza??;=eMjX)AdD5T{2 zWX0z^*RU5PB%|Xib@)NDOHU>Et;91J^z*%L;Vm+>xUXyq6J9s-wG48K7h zB@YU?3`KcvdOr&b>vsCodp+FhRp1I!1=j#>pB{jQ+vl5jOPp}_{hz~Hy6?5JmTY7Q zG7{1*pKf@B^?hIOk6z28iqlNw0BQuzzDTX~N z3t!m+b*w6;vJC(?`3L<6;I*nZ_j?BaEaoWDBe+Zrc6kN~SLZx^znyvoJWj+K^mHT) z4%#)&3>4&R)INNFJFK=l_{M@Rc=`cm?J|jz+k(TE&gJXN)s|+rSKGsV!x3(G=gx9M zT=BR?exuejGyI6ndSdRwRY|GM^)t)X%gK_lbH6}y9i85F#wPum@N3-U<57)ppL%%_ zTda;|qjb0D_1@uScdOq6Ku!kiz`Vk*j)i#P8aJo&c#xJ-SS5MFu7RZCjI_m zFJm8|AT6P#_|v0Lv!RWz)*79|`S|gXCa2Qi=~q^$?6(ZKO1}x7Rh`Z!pX*M`im7wA zs^2@6vtYZQqZk1arCNNexD(byG33+wc735-o6BUwMv@k%dxex(wStgAlBgX z12h*3n~=S}FY2aZ&zsU;U(4foHR3L~V0a2d%_X>81MU@!RgJM>>uqJfU_UFsV{&FF z9n^$4y1MdZu;A|R9ypztWQ|ufsJ|_JZ5!!)h5ao7rd0Dn5&)A`-!_zRXW<~l1JA1W zVIUypFo1EY_yA634|}`lRJoX4ZuF2_NGJH<$2wvM;rUttyfr3D5vVupo|Oyi_Q*`( z5fUx!&M{_OA~A9AVE86T`J^HW>B1!kQw_e_U+mXBL`bGz9iGT(cuh5)AZgN2X2SFr zxK7?k`pOT-3KxD#?mzO-JZnf;;3TVQr1-RC=vUWPdjlxrR~Z#_ENu_U~H8hbKxmY!_k%~wkQOpEZtFA1AV1@-o1-=nrKZ}=c)Z$D!3V_IY5 zIB)+}Rz&ff1Iy#o#ahb>thTE_0lIs6$u06(k; z2^!`nbFBbR=s}boK^*g5L#k@ju#4V(r&f7p1)h;3TdV?@VC0;Olh)nJRdWG~qomA$ z+p2DZ6XfCiRIi$%(4Y?FvpGkpTya@H`kzJbI&b?kh1qW?-*>IhP@-Ej7Pby|rSx`N zwiTJvW#-!XwWcG9ce@jIFP)ZECfruFl!P9CykG(_0GMx{665yFT2nDLUIg2H6e4%S z#mf|FrY9#m7;PSye2b~x$c9A;SyJ)#RcK-7mxpVavmmCuJ#hW@EY7?gVV^nkO^9z4Yw<|`cZ9S3xQdT>BlE+bSt|n< z_g!lN7dd21_ZoF7QxRcH3}R|^8W9IFb*bqIS;-<7d(I^4eH$L*S$xzBXgF`-)&&KE zzC&PCk?)G9&iGircd%0k)3N)&8LN1P3KFuNff8hB^8H2z562E#3}Dp7 zxFBaY-T2CB<3sCC%@ z1k4{p2gT+HnyA?_PCEyRIe)!B7LikDDZA;l`<`hI&6ZA)Vw@Gt&5=-Rp0g5ijlht!_L^B(5>wjCu0`Rj_tcr6Pg9`PXBQ# z?@H9cbou622^<3!r_1Y&7Kj>hpyRSIVE*`85r>=*xgVbfv&nX;l=rR9+wfbQ5`?Np zdlt;nVdEwD7!h2VD@W|KTq_P4eZ})y#pn%AEE+iY2H&_alMdEB?T^qn4Q@{CN0S-j zvS#eNMF(N#?{yid8+dtnQ?ETuu*T=Q=5iID*2^j>$*6^sR%ffpgYWJ0OX!j ztdIi-y^vNU^u+nb8-FTC2?S8$1|E!xD{)m2UNmmAq`c=tS`02g(oZ z9Vj0mt6=RZY-V0b4^K0~WI3e>iH2(06Sxl%7c^A$ClzZ@?04YqU~W5KI=jX(Ys^}o z%t^^!eV#7o47&l>s5j-lGhF63fb=-P>&wa9kT9sKh6Gti!L4x1{G_gwzorm=`EI)z zZ)nb__;uT7wp_2YAhba$3cY1fdT?j4N;qqK2n`9h#|Ub`+bHS?O@uo8KH$Q6mkS@= zm)0+MOLvLU5yaoEk)mKJoh)FaDkUI! z!(omUYv?TABXryQVxj4vy!fp>ZU79Xn9oP=@HHv9??&wtH^h!y;nLeE=t_axY`o3; zjGyzZ+n3vRyI+O6cY)cAEDodJ_%H^Ybq8o2eL->bMLGs2rdJ217fvyR%#KMrUo z4=>{kpAE=PYK@f6bKCW^6POfYsmg-5jSG9AF7`t^ehi*adnXtUIzm@c=O{+#bqpqI~0mk4EQokVd4z>lB~zbs>`&1(qXx2leVWU>3NMx(T>-Ng!6$_x;B?G$9eYG zq^0!cJ$BKO(~bfTg<*R9m%{o7)DU5sdNN6}tX%u9=Hk&gTLrDL(5WB(5?rI+Kg`TR zV}qBczsqHZi$_hyhx_JE*e09-(4gMCepieakIf%uxJb^FfqZAenKV+;2%&X%lGtiz z14_K3mf`?$uCiTi=pd}AX(TsC+|L_=r6P#-RHXgPqml9@;tEtCV) zs~L>KdM=??J|pC4zRdD}81o*{U8IyUmd3ckepi+1g4JMcSkHwyLWkA`m=9<;&DH@Z znV=^7_sofj(o;~f(=*&dU{3z<9lBP2yUZy5ftUYm%}$y#UZY8_Dqzg^h(KylXJnd& z*EaT$Ox#{N&U{`h=G&skf+zT@cg6LtAijk}msGD|8P;=H)v$O`LQuN`8gtili@LD~ zAwBA5hPuo3(5n=&U|5U;KoHK|G&61jZ||@%Q?%#;{w&(U$FA{QT2acLv*LP5d;)#K zN@`~OyQ!7#oOHus3LeQj6asJ1qS?GuLr!m=MVJL=8`+61M@4L%wL;E>SJc~G(}vz^ z3~v0UmE%zRQv7=SXftG=jEPF2!D6mo?awx8Fv&_LK6c#q2Ar7yD0cc4k*aR4LcET}om{*NqF8$Bue$;lwWqq|6>yq5vQ)PK`5F zwg>Oq%c+_(7Ld`HlL77>x74d2;L-V39A(svK&R>z zqfyiJDgwy^d*&@SwgEiiIO|pxT<>~LI?2xxq9PL?L|Jd;M@*{t+u5$j>KEw$=I-y* zb)E88jcYK{tbzipROw!E8Dr^KNm0xUa;K*Wh-K&sw#}!THmVpc@UjVUul^#Ukp{y^ z5!qE7Yrz?4WpP2rS#^-Flcf+98x8l)JJ;3;4C762e$7DvezXL#&z(zq8~dfwjI~1O zWQzl+|8Cg@ol68f$@`Z=bT8J~#{E!rF0o(1qZBbCRM}2&ibM`w|80E2{ zC;AF_nSMNu)lEx3-bgEos$Gj=6$sx7llb`psHVah_gw?dOs;NkTS6a64%Hn@drJo2 zT@W`Y7kQ|mz3oOqi-=u6W z{4D#h{xd0J>Ydw_`G;ZJlDb;)bUt0(rM>YqE*}fy(9#lZe2Y-i&#?WlsqJ#J5(2dC zQs@}C+4YPk_1kW#IU4f-B#;6j`JyzlRdX*?!Je4wb~4|XWTFVR`4N-UcZklLA8Qz2 zzKZ!M%8b}fCEMK-6~VXu;zo*NXqAx_)A2#>TMDoIkS-_ zQrdP+64gZ<1w-F0BmqUmypGQj@uLWSIenIzw`|L1#r)VI6K+&8P9`I%ifTyn`Y)Ft0>t%fk zpp~QO&pejb8@R#&=B7PL=17HCyzweJBglEe+1&VA`cX?av%z<}IzWrLz_iA4w*t25 zj?o-p>%CPs&ki{hg51i=QLvh4xGgf_S?+~b|^|~y01yV znPjdOjcEx-oeiP;}Rzp$n{z^CdhG^EW8 z%UYKjctAc}-d!Fn-D)|lN+7bRKB4D!cXta4z9`RCtRf4*ZpPoHo+M=I(S`5ae7%8D zXBAYxMiWIA=UO{0^}h`!cK$U<%{ueZ8|10xZYJaiZ7M7IiurZ5!dDMAp1J~nm;4Ix zPg3`(~b_Rgb(QOqjdzGA) zywve;B3YLY%9&@)J5$0%HJZlLZY%e3N!L2|eKZRpHSUIhCP3@rgs-=1IdWrP>qbaP zb^E$viM^ky#-ie3i%RZXZiShB7iqNbCv6(;~jaoI8dLfBH9wm#KbEz=PTK{hUDhFz3(x#r@n%M zRicxizIUdEA|NVtpuGOa%g%-DJ44R($9%@N65=Je!nWRhuTI746t{$&oB}+iIBi9Z z7JyZIn`}KZvU`RQ^jZ3WgEQ?Fz1U%(6j960yU!V;wDUxrpcFCvwV8bgrf^jTHd)3mIiW%nCzgd&wQDzu%W48PZ4c3{j z$U)PuQUK&!sy8lqa5%fH8hgV8l63nc|X@eQg|up%c753Hgw8gt4u+I)(Z+Mlcn|CryZdPw20 zu1?HuC!fx5B{?j2@aDlahED-xd!q@xl7c{4mjy75Ba;Qn7wCA^Is+2sAGYldnR;?X zD`IgF6GKvMK$s`(oeNi1&RA+D-i9U|>1=vIOSDZwsnM^aq6{WLE8Bi`@s&!r<^DJO z6E`u-npVjzQo9X#D2cix6%Ya6U{nZb!p5KJn^p5A6=%Wu%ygGh6`Iss z0RWHFYQT!NK6M72vjVb_k6p%YU(QOZ0DvkzMqtj}B!q`TPvI3O0$$LB<6>#ZsZ0f% zRVvukcWVAwt3kU0iaKFCRolRsD_>--EEt!FQg4j>kGn?!bGa0zpSb+PVtV^;I$^9h zO?za>bLJn6#PX2!;i^6j9_ZZ-eHsq~SiNK-{QO0i@^v%iE?bg#`%TtpnKOBiZ|o8b`gs0+R7N> zR+0jFCqzGtovb8G#agA7L=V4^1t|-&1~pgWS;UZ=5g^l>AXFhBd_Wx2nI&P!XdsLDWC1P2dcjBF{nBxBZQ=4;iIBK%Z@#P_pzc3?J+$ z%R_99f4mQ!AYLhq87m3m9h3)4g+EpyF@0wI zI{NcWwT_yvPy?xx6OTssjFp@^Nxn1CP;NVE;Ug64yg+C={LtK-B-ew+r9roG+tf`s z_nXo8XIt$pI{@LFm#3$tv#pMq_I>5X6n5{`kk^;z^UD(9hZK1p&Bu@R{MX`(>)89; zvmoppkD>cR>#~67A&qyDA-*NB6}@6*{bi`Ktrq||8cmfHH8QKUC5f5OI{1v>s@vrgTypK2h~}~ zH8M3)(v#b}Zc*r<#8H6Y0{_&pOw^dLgL|*O*#m`N%VQa3n|vSDlP05^^0!^Zpq6M* zD>$-ouldNjUlO`nDPrOpC#^?pljAI@hu1b*w(R&fg(8qmXCXs%DM0{o^M-SQcztcj z;IVg_edFOR*h#+{1ikaE@h2W7H4cKiNW8I`Z1Rb?PnJA>&6N!=$6GE%EU0EQRu*Dj z;HKnb44%-v(sy?h5!I&qNYN2rk8k5LRz8)J+qQ1g99VQ*xY%&-t?DW9R*bW!uT(}f z$1eRq!Q+9rRZa}{IsFV!5R>nEaM9m)i*{^ypo*MC=!gASx>~YdKNc_B}dj z_JnLNjoGwbp(8u{qR>Xoy2;?jpiLvSMdS)X%M>mTC%Fi^8;wk2RLeM1zH>K)*GxuS z8B*o~TxCCcIEN*b@TA6cXFymR(wynhSkibg?FFQC?@9eVayvTiBDu@Ip+ zB2ZI;LNbU_ngXDbN`Kl(tR1x!q_#E>qiG4j3;ni`9XelXL8|LZ(D}yv=TEj!i9dUj zgU-EdoHJ)Cr>i$?Q8G7bYj%(ZWbJc|*n-kY`!**@D^!9y#4^6-%t?sHy)dFm6(|Zz zkVC*w`X$4sA2 z<8Rnb;4xjWrJwg&UGgYKlQ+Ufw6$Mg=eX|Ncw2#)$lq!he_;o(O(NN>LW~a+x+&5rt$4b!Q zX*oSlDdl%+CPtdjrT?4@?hyY3>8RbME9eUp+|~7|CX#18+%4Q z`aK)mGMV{j=uhkxrwJIrGBjOi_sPsbdUA1Vrg~D$SsO!%Y-BoZi0dO4;jtqvdzex>Wh0x{sHHj+>3^fXU0vg#v_N*=Nd-noEFxniik>cB7R4H)1-or92%Sa zw{NpFEYK%lDrDF8oi9_EK8yX%C2WWwlRyY6=EXl*F zWMcA*?W(s^G)8f8TS%+!1(tH4r|>#U<2$n0Fot2P4;&c248b|b8#DD$GK69)Ph=l< z9XpX>OE}_Ua;~Am857Z}lIFy{nD1kfx^el0B|+Ig>vD8n1({-KP?HFjEa=!;aI}-f=ty=o? z8)^v^Z*{!k4RkGG30rWt+C8#Yg1z5Osvb`=K^$;sD-bF=vSJ-I+!Y&i-1M0d^rJ|& z_*>5=ez?9O(FabnN$N!ZQf0$qfd+xz2ue6!^Sbc!KF78PMbn^us^rpWirX{gYGP~) zMmBAu@N{^&%q>q7mvlgSSq+IXHEq8y%cr13mc11ZFu<6j@1(Sy&u{CDuk}CR;O{&H!Q8}LoGL&-&UBV`M^gEcayx{UmVn&5tCMUg5}=_g7{aV*ZaNQ zt@>V~A5cm_;sYgXZ^pw(`UA+>vsJQr(F!lSYq0ElBiN)A)yEKY7_`F`BX)VPDmT^c zobmw8(-XiZ^a)CXhL0s4oy^H2bp7RDHG^0UySWZXXh#J|-f~#u#u_|>KPKYb)B@O# zurb2d5g9{s=hC*Fq{mz7g;Cm2+Ebm)=wmNaT%kk=Dbxu{p^YfV(;8bb6Q(`goj;+* z`h0EmEoa!5#bdDs=J#C3i>GJem^;hPoSilBFn}BbGN7~?$>_YO2{#-7PsVd9H^Wmw z2=Igi+4+D5^pn*~4?k+IAI$b2pgE*RZ5X#1_&qz!VQ_6!^gZ*=h76*|;H*Qr9*NPs z1d{pqrk_-SQdV!J=ov}<{FwC|*0UqdE*S7m{TKQ<5YBTgy}FIq!fTkFrT7GqcuJZ| z#4}VkJ$NW4-{;^>P*w~cpU-wd?&53{kCtOiAuR!5B>F3qmRuc{oOnJNFMVGpXQibrCSf-jw z;P^6tfAv{@bWTSkPwEtt?~1&sm#po%GC7_7;j(kJ z2osQtSIV^eE;^%gQfW#RGh!F4*4pA(bGf7gQK0 z7(R5?(3zvfEf1~SDMKv&Dg^ilqsnDlNls;e#8@53h!Run)Vl^Ar;qF0L&1VOc^`^b z@NEz~G`X}nxuNJc4=%TL1+IVz_N1WmiRB-x1s^Iae;*I@bCy`^ZbplRdh@qzg5I=d zi6$4|IAPwv(NDGWDR3?xM@wbc40IHK}yLiWL-JS`u8f-yafFt@7m zqJ1fyEnVXMSG*)nh0`j_(4-vV$+ z1uH+yIKPho0QNt-*Ln`S+*l!7$S!E~TSM$rLn%EMqzM#_BFJwd46?D)VuEGz>FGY# z#~#c<=!>~4yKn`%;R|9Z$O@Q6j|A?<2?MfY3nx{+`o8KWZ6e#Ye_6uFYv4QA&bky= z5tah&=ghj>es}fNB&knWVkG}mNpbdD_7S}N-Mwa8^xjr>$Kbp6bv}C3_cPI0obc$g z`N?)2L|^;2=5rB4@~AV(U>IVd=I|8VtFxCJZ(3Jg=?n03 z*bMj#?T99+bM*c`1dK8d*Y1=m@x9y}uxI#8JP7%Kt0x+I>wN zvVyjG({_c8-2I9hg*G5Y^g^z8as$*(bMq8%Ni%c4K}POuJSdwSxp2#Vcl`}hGZ`bC z$I;I3o&4^EeLY5Y7k8GQ*4x59(R;wO7rfhe_L$JlUd=$Bup~?+v%T=eWlN=pz_p`l z-wMk4owFeh*JE~PEhd}8O67%EETm{nSQg9c$215t)jFBkt-VVR#mydSR7$?)?!u-JDzlAC_W5W(d=67hP00?W4$>;onQT1SO ztxu6ia5s-n-LFHdA(X1zLA25&(wJ^WHmL)ii{yRLXCaqz=QsSdsKxWCR#xF^dx0|& zuq`v-l}pjIY8K0an>jy+d)`6bAVPm6wu@GvypsYJB9@=B3#KcY}EYP>>`1Vxfft1OiyHTL`CGSr@Y%z<^$BAX{( z=dWT)((?B4S+7mQ`VcO+yz!>HAPKnd1f3g&t0Q7qk{bb~0GnrC=dd{~@GxkV@E3R$ z*Vwmw=taX4{o$(8reqPTry}Z9fK0x^MdnrVc2s35Cmg5^{>iu7E}sDyX+gXyHZ+mS z>K^cU^iR9vJA_Pn@5+ckG^rq zYS*cm&Crzq;uV{s81{34Hw2xq#qS|(rzDKskJHL;)zlJeO%Bml@YTYl=oi?% z_)80|WU;pa&T2&dl2j3`fwBvCBjd;}9j1rqJKwUc;vaRKwYM8x0d=ehxIgP;t_4zA z9lMj>O#G}ei*5*)Gdsz^Iq;oh0xmR^GLr+5gl$&=Bl%9%DN7nM^^!jwaCU|{8rhV4eug0hW-8-t`#{-0(@9%52 zx?7=J#DDkWapJ-4_`CZ#l0Ja4*ta zVTDT=ot)5!)-woIOx-ej2nbEb>TWG5`|FsNq1M0K?hNSfh6C7OmK#o{9{Q3f24qbz zg}lEM*Zkb)1{8{9G5-ozMV+G=p?6|^_vJH7H@O_%o(s)-5KgvYRgKdQ)BE?4h0>hL zl~4^wrq={v4CwAjdud-aoWL!0fs1+9lSOQI;00NvX26#;>HZ(XuuRR`Mvc1Vs2|xs zHOX_7=G%4l4KoA8K7DEMi0G+CH)L16Tx_7w^OHPia_Nwx0Ld{Y03~p?dVe{Szf0Ip zKq&sP23v&;_mQ23ir;5^AmoQ(gE}F3qsZV*{Nkq%&B6$&v+?|*sDcp! z3?tr7y16pfHn0my?h^gZFR{CX1C5Bpx(ivEE?*FcPeKDsqRq9)UJtvc<|n=R+a? zNzP5cWAUyVc-fs*lMj>87F<(7z%38;W->MN^A^Inp^b9 znJs3sw=W3R04@JoUNssU*}(mF2pR1p?#2~@>}?Xt3P_HK?v;twv}_){O%#hhpnb!X z4IYYQ+ykEoo^)ln#isex^kIVougvcI8qm6f$==ykikY*xz}{g2tr|1SzCd9M>VZ&j zT{EZ`(ho)2`O>bM3)z}^I+ zrJg7?B=GaC^akCXzM&t#>dbpZ&@FSmk3jm0dHn&kh6)B%X)6l`+!s$pLs(X!57Ey( z%v~HnBA4Volc;$8XM)|S4ENOnjXfCwXw&?qKCv%P6t>2EVMW-Oxv*dIKV-LJ+9NZB zN66^4-^yg;{7;sd$uOITW8$0#GEVtCS#;sg_MK#emNzmNn!{F6fL566WwK^EN@Fn| z?kpd?0vQKCXYD2|Qi{a}AcI!$Pb7|;>h4GgqsRz z#{L1;LEl$eBTnw+m%I2Z>GNYV+Z5tCtmf?GhKk3>2U+Y#%zun;EbJ$|uq??pPCp@g zrR(Y#AhKGxf1@g&Sh9ba4E(Kw(iOlvST;JT+o&bwy^V3vTnVx&*2Z=?o0_mCbr4zC zSHXEw8C^ic@Y_3R15BP0SXf>=;{-x^28et3SY&D<{=hqFu7@VkwQQL{F3qfWBoUba8Y9GDnVh?!r0#QY}cV&>k>-N<;@%R32Rb#^MlOKg?BtTf@PL+fmA_ z&5$30%zi~Bqa$W(YJ}OxR3ZsWSVdPVN}lU`pFo>aA6*fy0zE65*u7P{H=2vGV7-xL z%;@Fx7|l>{LVMbE#8udL0LT!=qBxY}JzguVdizj^4VL`|WKWRa-cgtYYrjDs8^BAj zLYUVc?9>PW>^V+2bx}}Li^O_~Cuvixa zikt5#Xex`jDGvQ2&Y>x6D%l$B=O$AM!TLqIO1}DK>a3Avq%aPN=2RnEM~H+lC)zGn z1FMp5C7alHuk}@lM+4PTR*K**l|%4Yr2QnsiWz|=0cVcXXbi4JyfFGH<$M%qzIUcW zTl9c80*}tk%c&@H0>y-1$vdZ6KL@az1xxkba-@Ff*s&EVnFYK!~9iSW8rvz7Cb z0NrGWEPx`Eu=UxS(Z(VP1To-#0)Z-3@k6@fq1T#X|0mI&W4H6t{ zvUS$5J7N%AeZSYf-}O|o!oJ<9TF4pRHtQ%YK(6n|G5ckv#a&YnZDof+q&YSImK zJewBZbj*`y6g@$yZ^mV{(c_DjX?Ll(C#?!t@?vx=iDRqwxx-|tSmkuSRUQa>b}kn;B2Qi z!H5lm>1RWFuW_72PDqC{RtCzYf>Jwv%!R|*<*GPH2S|Kkbb{awL5u;57E+R=pN8IO zx~mN>FDj3l$bDI`uyIbEsZ^OKPK0x^%*UymF$g~q$F-omumuWkAg8hn=o%9 zk5CXm3+`8}=X%LBqDf_R@AlJ*A*)E4=$RH+M~movuRIue6<14VTm2?21fI!Cd6`28 zJQJtv?=f%TXd52+P>>#a7hyCn5-sFq==?^lNaPVJED#20$@|^q?QHG7@u5&Ra&hO) z_LO*zD@XWXo&+LF0?fM6`+p{~Ua5=&O!OLl%|tgW5vXKiB`t_5ZN}Ia(1F);r{c*j3HPzK_C3{#f)uaA|Z`v=D?_K9&B?@{?8oCD)}KX zv$3Q^59in$>j2_B9$K$-N$;qH{Qrlnw+xG`S+{lrL4&)yySux)ySuy7!QI`1I|L_a za0#x#LxQ_I_r1#!i5kd;wL+`i0(Wt zYF6uP5v!FaikOun8duaKA~YVZl^)xcO=fO~Ow<-8MQZ!87Q^b#dfz}tXA8{<8;X^J zGl&t67-vs!-h2gKyNahVj!XE9BKP(=o<=uM(|0DD1bQ0w;UdqzjKv4GJxo<%*8h}G ztXtQr)OFMZPZtZ@C~K=?45xe7G)55D1?_uAo#rvACO=(g$+I*GOev9@2R>KX=hUs- zH8rkGpDs}EPQDEP0j*~YM*3(!7X|q923E%<;GP9&XubaU42P!rdf>*JXIXB>MTfMn zBTty9J*Ckbc=TjhfDwSQxrKn^y*zb(&Y2b%O?fL)-CBLo(mweIP|bwwWXR@qjGc>Y z;crzr^lExI3~HGeYxX^t`LNHOb5%35-c@Oqj!7vW{LRN01>K51o#GFNW_DuFZ;==Z z*5r6Od{tTdU3s>w@M_m`=v93|8QMyeGw)U9`}5X!d$>sgn_VfufM7xIw#HV#7=uy% zOJikA^&8F!UDNP@v5~)anC0D)iewXAWkkk+7;gm10RHJuld`?-jjfhRni)8`9C(wI zES#SNaMw_gYaqHfqwKe3U1QyTVWqnH+Ufh*jTfDibSnv44A&y$9#aR5OYtQ702wIM z5S!mU4G3fI6D>lN5#K4HaYtAVE18MQ7Wqd}#0^PCQf(nD3sHSM{wUF#vCG{oY--0% z<@wdQMw#v|NRcz9M${BAgxCWf09D?QZJzR6$~z9b8Bpel97M9nKDv2ssY2Nzy}-{f zB64V=T!n53Z1(x1;vsGgn#EBHT`#*C>}E*GkSW+zj`3N%>Z~FPl>X^H=;BMKT$|h3 zWEg>(R9k9XYi;&}u24%3!BvcL+y`U!?yp%jS(>rotjVfz`oAGzaXm#u_bJ$`0m+PI zVhA9a0Tlz=L<0hvL{)@IT11L*Zf~ z@Q&EXUDfHtC4}EK;rlaZ3p(KZvxKQ!Wq46gxJ1a5oVDhk;%x^AU~r~|ae$NEjJqp| zxyU<6+>UB4DFQ*jjUgj*s)!~vb{52!#78A+5%1N39VT#l+ry@_WvwL($TuJr$uOE@ zH{DV4yUW$1gmbjdD1|E~vZj=0iv<;7Ffe9oRX#^<;2E4th}vzV{oa@bq$X~OY@yCQ z2}yq-vdREGizxDC=nUU5AT^N?B+<$GB@Q#`GlksGA|x5_B9rt9(3yw~g3v_Iu_H*D zi)c)`h(q6}GyqdOR!a)SL{IID!1C4 zcu@zLmtyDwIykT@wAl`~h?6L7MI;GC5(&CW==ex18_CeB4!cFJzc0af?}(I4iZ`YL7+REU`8sg9db*ODK@c+Jj1br;VlayQBsYfS z&48Y!H_?$bbS4$WJxi8ad3Y37kVq8}%mk;9ENt~Z5h<`uh1AS7jY^4kY5{eJA{rEI z@d|uNagh{h33s=&To?r=Gw})A7DY8>5iPnDV5Ou`sg?ew`dIBeD9UOY%s8bOQIWG{ z>9Vw@!aV;BFGP364qGozZvYpO(CR3doOP?lZB+NOY$3U1jts9l#v8aXC%N;}L^#C8 zpSAw)?^iwgOQsK9?Li=b9z zu($?i$c;yl-dxq>jS~N6nq^%EeoQc@=Ki8Lg1b|&Xh(cCavZgXlyq2FaIw_G5wojN zP^#{U9aC~&tdfwT?I8Degim*~x|3JC@inT?y9sX@GM)(-Z~DJDj&FOqW4t|I)`OHl ze=jHP4D#)(&a|DF}Y!%_pm53?v#_84Tey7C!ty1-ic{IO;_2( zJhdYZnPWm7WiEIAe)x(AdZP(&!+>(gAn?-BAzI}1S8;f_yF0Ge-0$$QN0RjbSC4!Y?Hz&ts*~lZT%{Q+q)Q|h+cSCfMOE8_F$bq9pj1AG-o)XE)OeI>%99VVp7 zCDt+pQW(ldh$6#8oT%8RH9=iz@wBRP8mt5*^JZW?D)6g-1@G3-B>08f2G9=ZpnxZC z$J8xwvZ_90OWebfFh!r0Ch;E{rrsk9>$;=RqYHXG8R=$2U|x1y$41Cq4Z6ks5N{T& zjE%feMdivIi>U<)M2B63nGmIz1s`C}rug(WWo>+lZ`3SqR=OZ1jnxnV@AiZESTnRM zHdjPw8n!&^IXiCgU@-xCbjdSbB%FHE6nAniB<@v2^*BUJt=EyA!J|5XGa;kLOq635 zwO9us#*)uS4A6b9@=MyJ=@P{b_quc}N~O5%WGW*_G~t3UCp~+@E!oZ3d88`yfpMs) z$(n3O32W3{wf7ZjPlj!^+1GePJ4KzA@@BoQQEh;oW`EH@DYQLV2iM>(PLMS>;wgqu z2FP)skg(%ExIf2a7Td_zB2g}cp#jozQWNKmMXL%!CI6rmAH1S+BTWs(1^4^6 zCe(lv%mYWbNh9;r==V(nBFKL)6 zBG0N6&095^S)2^+nTz3zaI9mwu|{b;K#CA5SYYr)wFu!!6cQz*P_xnOq>2%>U%Lmm z;R{jXU`q#`N&&572c|KMLlko?y{UON46SKn8d@R#8tc2R6E`Fpn?my_7lyja=ZPx@ zCV&64!#48=xu|I zXQJPwld=DjPPV=-K#IZqwLsEE)pQUG=4mkxVChswbMZtz7*5CwRzD=E0F1bhXG&lfoT z>ds7N>%k0>fF@8uhicJ^95#x8N^YcpivBrsVd@1bE}E>rNHQ;#XhqDYj#Lx|X>!2} z)c;60WdRANN$m0r@F5@jsfsw_2KUu~FF^Eo5N&l+3pQ?)N*vnzUEbMIX1tWRM8-NC zVJ!u1?jqNZa7yOXOzcKYptc_ojq-@(7o`rbvz8-$Z*e`sn;55+6NXFMy&%xb%VENs=&AsmV7cyz$ZH}8(oh3} zY)eFnAE%BedfYcOE+O~Z%HD{cdcO8^F0SPZE-c85g(eyL!A1Jkzh8c?EPIT2fh`t- z7*8p1=U)5v?}Ywu4OH^m9Jq4Ic03!DP~*oRA`U6j9mF7bj40G#^X*Z#1gE{p*l@$# zE%a}0q_I}bu`0iwMoBD0=WEtS4z9~jk8xbvzgtAR=_X@upvF&SFd5O?j@LZ~A#Z;W z8#8l9F5jd=EUtUyG_nWv5@ zCp!;j33@gtGzlMWw1B8F8m~3yM#rCKfWw;Ou~~K9T4?|)*6$HRr=PlQ}EPwL>so&;LM zu3%f~jhdx*WZ|ND3@Ua+*&`%uC}0PH+03n`abDF{R0~qZ7CA1o^hw*G>1DgLmQ2m)%*>&sMT5m(mj&aW2TrD48JL{o9`90%ux?bBm6212k zw0vU!-A7n2wi&L*-x@yHDmcIQ5?VBLoB~%0yWja}`CPN3sOb3>+n*~KoGrlMfGJqh zmcU2_jH}S_7te)V==Z6c4H@K#m#D{&V0^MeU*XgV7QWR6OD9b#74Cxm@Bh%>eVs0P zplX1I_fMlPIvE{;(?Ul!r6`#UbfC;m<6>!iBIr$UHNE}9P39`jwAHIwdQY0uT9H6! zByZV6mEhA&7oR})_gz83)wArm;*ybet5WyEweobn3`i*WmnYTy5*x3-_cs_kM%3|b zC;-Np#CPLN3cu)dk7HF$h)~Xmji0S~>oK&(E_>!=kxd$gl#yP$9jIqevU>~b+xpU@ z8%07M=iDgk@%O)X%DK8`rylnbcb*EKP?~?HM~7<98t%lU0r};Bq9)sA>fO_urEMT; ziqxs0wad>}I{$tF`-?ET@nF+e|4-rx6yN@}kE>uy%8U1L~+;5IG)CRWhmVVzV_#px>dK0mD7YJDAb`Ts;VFRX- zbE0u99u#|A00TPMIhLBlf^pG-L19p_cA=wH`!Y>Tg12z|L zq8wmjfT35Zvo{jPLdEvPSX2XhHbuC_RCFice}g04Kd41k#K30(k>qy67utHjigj7S zF3#Mr<8lfp>?31GmvNXiBU7mX3$TNEFb*tnnYE8@grG@^AJ#+;HFYmPFp^>+k4)*3 zh93PYf2462_`sK}@R*o;5gSRup6)F=&o?1P=AAV{A+D3JYXwut`-mf|iyYeiRT=_= zB~)?{Eqk*%RCfo2ocw8+R}5y+Wg0n~);QCL@Hd+1yVFEGT6yB)ab$(q??3`DYbbs@ngE%rsw|=gH-+SG9}!T!s4?jH9#<8$D0> zU*QajGLU$-j6x3W_uK-*(ZFz6KQ_99B`^#E!kvGQOLPX<29SPXj{m4Jd4@vjI1`cv z#ApALvZ}}Yns4IxpVTr+A>QIf8w;Y4$G*5#+&ZDO!!D*G zHW5#qiPjcf^NYJ6b%mY9OwyGLO|16<*Nq5eVH|xo#?ae{-bg#~;O*3OMe2*c5bMf8 zs9>P6D}2pcDqd^*0~0{LHqc}^M3=8vB^?EbxMyk1Nbt_1xqhNL=$#)faeXDg0XIIdPR@x1TdBjLr-s5ye zQ2x$`;mzS_4$t~%S6ve!v{pRN!7zC@@UNCKuZHG=xOTf!?;sQ(esu1cc3_?L1{@g! zh@pw__qn3Pyo_D_GgD)mQxn|Raqm=QFH_6L{V-jBjik03vxvAzb^hJ?qqEY#6n5~DcUpWIKZbhP^YWI>&}D)^7nqOn@ZkaUnR+ zR&LtFN|Z44tuBqo#6r!)29fuo-^|f$F&JJ`4d*`&dOc^huVXXVOf@-KTwIE_ zHPiR0LO5LKFyn4GkvYz1#a3;VhPYb;YWr=fK~L$><$_o_ z)LpRl$$Ex_LT@=B*N0@$ahBqt>!W>XtqSJiXs9~jpd@Kv>@PZBl_LVB?~7?la&5M& z(+97Z00~SC`0|}#lQj=x@bt8=t9YuIqPGF(ak>Hhfewt<2Y83GT07RBZ(Yw6JG}eX zNW{O$27}q%nV%Y6mZ#u$*oiQrlpmt|bLd({QK+MbHuM`)Q1g|~?p5H0F{ygxcDU2x zeOkb*OoNr-iTzVEPHaIlMs<5CBU^c{mnrr05rqJ2W25EdMNUz6?7EuMOBqhG?~ zxY`Nt6~pjcQGFE4M@ym1v};uzs6Ho4%*$05sZ)tI{e*C$3hBw>l`PBGo;?E&#V*Jz z1*gBmG0PE%KH2S98eYu6oSm!QZ&-*c@F^}DvmIMuwa0e043 zyWq^;97whAm;@Uqi&>}qq-q15B4UIWJuJn7vl-kmoZu`Z8`nUzyTia|ax7t?jc}G z4$+qp9bhR=q|G7(=KM#CW%7-I8L`71@ zzj4G@-CR*G`)#1_+5J+KAF@!wt?$c=DK0l_d!l?^l(~?{n+z}Ui^ynkmZqMUmAPyV zb-8$oel8tTio4M+pdDg=4vH?=hobeFpvxCqfQQxhZnlayIo8tzf zMBF7vvA26P2T}81841Y!pB4T}{d~dxFH-QgFUh|!sQBU)~+>G$i|HI92$i1V#_m5+`PO#?Ti3m}Nv#iDOT;H_PT z3KwM(#&{2B^e|IQFIkVmPM)dJE?5=36>d>LTz_h}dGueoF}=1^$PI8-ub}>OR%aAq zg03h4;@1j_?iWZX38v|2p!G+tl9tN7BK6EJoH0XyZZP@9KoUuUNS2p8b}Yo~`sKw( z&``o*t2aIDx<7{#OJndQYXslW;&-N20?PAa`OZc*k3)v$NHa1mFJCRBL}7; zAKU3%FGOy2hruZWt*vj4Ie9)=t!ygSpiiV!v#B=FLOD`xwRri2&$1TVQ2A}{KiKOt zUEA$?2E}p}eTI=p{TO`~X;Q+mY@i?8_PZQsPj4S20!JvjKhW*5$zFaTU7a?Q(4myoDz#K~T%QbWnt&&hvr4nMzR~af_y_kF;T7pQ5bDcEdWB5yx@H+1fjrYS zmgyx4cIx#vPYc!*QzM$?Rvgz7zK;xVI3)1g6yf`pZ>Up2?D%! zGKF9+$v{;1NS+w7^t zrCs336v`Si{j-XG&+g-&Zy`3kDYV7Bpf%3lzrVACr}V50$!pplt513Tb%cG$ioI{{ zhEKLDys_AK*uWy5tc%vZlNtoyvknsiR05`gsuNmjV_+1hYOQ|tpD_RM9^2$W;H8^= z;Le6sZTLK@x&pXV`jWYa%ZAJ8%gD7I%c2PAvoQ`^{7Qow=DRU#r1hc>|1i0$fzZqk z^xzulDMqV>@orx6*VwNsEfa8gp1{C(jGf_G%`2hQY&6k+I4{6tE@Nm7Znh7S&5(>CnoCUCsSPbs#o-LZ_InIJ-ya5~~mw6^=`X3*}S@ zH0&MDW>v(9qM^{%SZy0qzu**Gf^6m47qn-Yz2OvW%B;<8$$>Y2NrzMb-i?{F>mEH) zHY_d{hk+2%Hj@e^cstzqQKSE8qJ4M!*$1&v~=R&F0`k$n%hs~qW<;86ebwxD9 zJTa)J=E&p4o4J`izTlq)q^ECZ$Rf1tQ6@h&vfk^G!^#j5xI0@9=jLe5q9@v~MR~G* z*i~@?V=wq1+5tJzL(}-7X!KKLU(RP)c1ZHq%maORVV^F&50?u>x`+aedPD!2Q3%5M z0YeKca^e;>HS{4hq6-pv`mJzxrkF3*DVjb8S>jG2a<-5Ft`Id2cE7m|EiYDtdfFF` zL=YUFAwqDa!*mN>2S&x5YVcqtK1?}kI23OBr{&BTajH~L7;*tbc=|q^DeiOGsAwdq z42%SDk)|yc4@_THRbHoVt-w3?7ld z21k@4SgE^`iPKyyL(3;E21>on*`rOMcd;u7?gmXi3goI`Kw%7Zc{q%d2 z2bx~;%BEvQdCE8 zbuYxc-c*H-%NK@`17S-!VLiQfqAwv?&ZtFA5ucCNm*sq;LKm1yJ^%g}3~1%26nM&) zGAfWBKmz%HSDUzO(MHZ z6nX4K$jIK~V+zqUiA3#I&qA78pMg;_rAW{*88jCU&G=sCm#sjBE&8PS`5KzWXm)Oq z`gSQNt}Rd-q4fQF0dpB5H+w)ZNHMh)DSvsNO5dtmPIp~+N4SHx_@ar=H(+hM=2za) zI9veeY*A;0c>7`|AO@NTe;of@Ca}&$EKDY%I=27iS#9NR?zHrQvbX35lyTZMj)Dsl z={Qp+&UN*VE;0cgWiF}~sxnK}x~|30rYQunAEt{s_x_GspIzXbl`J&oKw9y1RH28H zR@hKp)_z=0bxqg|%3m*-H}d>sj{+pwnsu(>{SUe(JE%=CbdK^6iBNACy`@8tMLx?3 zrh6YqZ4snjQ;Fv5{2Cz@5o8;{m|8jF!+GiaMNmh(2k509ZO7pScDdgeH`EL%hO$Db(CEJ?>$eAhCKm0txHkXkb&A}n~+R2c7asf?PU zBsD80*laQ@nHMHjjK@FQaH{WrnIJy! z#JK4)hK$|L_^v$Ior9ME+(L`vq%X)kvMBNxe1(yc(b_2|rJ*LEMi(N90sD2T+|@Ey zw?g5t_UO6H`d0ZS=l zT#MqYrEgVh8KpjmzO4AHB)o8lHyb{FCS5n4Fw8O-)8?V_W_I?3FCLgkYUH+_jf!gDM*+6`;-wVS(d$@A#HFz`gkcV=E@- zCO^Pz_u!5hoyb95K`jryzo;u>F+#VMa;eIN7ry(#^@A088pIu>UMe+gV~PUGI#eUI zdsDyRjMo8<#n2fpnB7j=`had&j1Q}qdl$lurN=Vd0) z)sLDZI6()`K_RP+27BM~erRQC$Snh51^3^A41vmXS9~XEg%@?ij@=hM;oC)rofj~= zPYo|2YJY`cT7dIp@VQjKpLp@d@4f%3ei}!mkiY>^Vh;3sl$0UN1qPYISdESrWl#*M zOHBQw!-i^sQYM~OQu~miQB4H$f^-8ajpIMCA?p(GRVn#PcPS+c1nZ_56Ui_b)h4`U zOx=l54Hyl3GMDx3EfgbNKNqI5jHgvu=2NBQqHA|_ky6x{>!WM;88uv*Q@|)rmIVW@ zP^B*Lc~qV7EN?{UY1ZsS3?)xUnluWOP!q@}3q`t>uN$S)zvUq7`s_f(P z?j`kKqJAY?jVpL>>)4DimTxxiH%Z4wDxz0^H|?yR`rHog)|RT`!R(1AA}(b zPq|W&C>IvlL1|f+8H&Ns#Aetl`^eR=H=*`PW1-dyV$9SXV`7O6!X@NEUWS2hI^OY- zVPCKNf-^3u{u>Ng6e9@mgjy-3hc;j{gs{X;YKc`91kKs;bWS7uU5y=!b5>2>CQy@` z>X}jBWyvn0ybD@(g4x*lw0E-}2H{_h%`nE-NCl5+=DwK#CKD@v70NaWSQJEVGs()o zd$D8_m$&MOZsmmvXJzsVlp)4Cb}m;e-|9_3))Qnh5VNRC)`2#u>1vQfm~(_xP`d*m zKM;r@!lWZ_FuiL5bGcG zQYLHh%moJz&d;5Y?u8~`o$i5pKi7@`CZ4WrL=wE@gclihfC&@fv()7{{)t}QFU=M$ zu&x!DT;DAM=)N!^M?vN?oc*I4)OO&}FfBpWDW`TGm;aR(J-2=2^h}YjV@IV!q=$|o zDE#-&+yO2rMY$Rsq)sji^E-@Tn!hKDi*3%@#ZwP+Du_9Mo>mgLK}M+4OkUaI6;Br= z7o!1I=xTVZW>S_8GWZ1n(Rntg!A4;FgE{wlS`rh`d_f*lq_28o#{w6)8@W#6_E^S~O8 zH)DHsSkk_fpU%WhxTCd4Q=IDyUx}bG)$OBXm4yi06f{gdo9Yujw?nxs`y|Ei zQ7n^-527i}vpcG}an%ww9iUT3@{?-%FDeg(no@RBtuNVgc!%B@L!%k`CB&8Vz^{H^ShIxM)SV@$^0AD28x^KIy}{4nCmIL2 z*2LH-)Hz&3(a|S#DI# z_b6EUXK+_tg~ahlWSg`we_7Jpyql(WY*TQ(AIPYPgR#aZJ4_r*_!z&n9silrUurAOrADB3J@pB^- z1v`nd_O+Snt!CPrWiV7_VWbA=edVmq#Wsx4!f5s_|r-MJI&Ue+q?UM$RcI~ zB;$}hwUgcj^FWdfa`0S(PpCzp^eb_gv$eT)a1fhN&gnadYHq{$!XEaVKqInTKiELSiC2#u}s;MI~}i9A|sIlEVHTz_sXhW2T81O?0+ z=4?dg2A3U4P)LH#K>{ytmy(YE1~i^e-$y(b*d7};TLqO5>s^60IlL1Z@!koInS^B- zg>Pimwds=_7+?2qeS^Ii!14OL%0--iD@{UYHx;VKb_y>l=EFttLZs zCxUfvfnFCKOJ3)lDMNXF%^(@0%4vW(^!IiGEMk8U}4-m#ynu%i-z;?)9=|pM+DvHC@&u$?S`a%`Xf z7D2=O(4W~@`c$CsLKCipdxAobSr9%eYY%T|&~ki+ z@S4}e1r+{ZSqZqKF5Ebg+~soFX>~l*2-AVqpUrJu5wARDv*atIIJAqwU3bka(PWLm z;u4Om>Dc@$YhlgM6l^eO7k1zs%yte$Y(ab0NjOFNkD1mlv<+}+z%&)>lkC-O=J>c8 z8U(2re>Ml(JItJg1AEEWo$(R#ka0ufKgEhRtu2nOkrUAA z<8UMbY|!E30A<{K7P6VF?3}z!-{}%dMeML)!f#hBu-iGFL9q!(<|@|yLnW=lbrPl9 z=0Q%~*0xWWxeEu*!^gRFL}-Xl*%Z7iHGjhB2G|Txb?!&Wb$g`C4)s3QljhBM^La;5 zvaynkFUfM!?`Oo{%wPzBM3C48s_zhaI2gq1bH9LuUT+@(vHo_RoDPCPoDu5HmQXL~ z?WX)7vRb}yKPQ4%s~p(Rri4~DaL`Sf zN2Etwuj-1jndQKyp1o=lsuMNS1_4wh@g7!e8!d5=Dt$xUtcbE1RNtl^u__x_A2CMg z`R6CaK0OWO(xRbFo@EGI0f$*=NsOTsYG ztrgobUmOWwJvV$+%N(<-cBIMl8s4GfVG& zR-5?_Y=dZ_6y*^&6@)v5LXD>woQD?AXCXpVYS|woLK^|SEcY?eIzI)XPFDviDV{ZY zg6ZLBK+GO#_ODnITqGfbTkz|hLO8wwZ^y8s!C|PRAn3fF?;#t@LH-UNj3^%!e3<3` zY)4cENeP(^2!G2>nfgWun(D%4>_0lT_$89`OXdDUN>~s7oN07O8CiUnzz@E|%a%e0 zegA^(Y(Bw1uX)-OKL$sX#ot~pruP#-0V7Q1{{hhePUwNH-;I33!2pQn007ZYzk_H9 ztCm`{lzVEsoPL0Omm>Mj(2lqDL^q?i{o?y=&Q=TeSvJ0rynX-HXjQ`n2$EC=PeVh+ z;)zmn{`;WM>D**_FFLQlzJIMvEgga2Aa8nj0N%U)iuw4KeHragBjVVfeTTY>#&n+TC#MYo6nRcz;Sid8Xik`@%NIcW*EpW z^C4ox))~^nj$ILyGqZLn(01rv$i(#eW9}9~BQOVU)6$MqOH*(U-~~N?bTMOtR)S|V zTiL6XU}rPak^d~f%q}MiKDK&cm^g>5f8Utt%JDpkun_`0spGbK<4w&gXPojIU$JJ1sPuj$n~+OldyAAaI-(1 z#l)EpWY^H(OR3R+PQ6eb1_2pCAGAr{kXw5Qune$D{c!$wfPN;boHv%hw(h%$M* z=M@#PXA28w?eavup(BHwfo`7g9LEnjwTbX)SA`y~tx8H3y}P^h5}-{Y zGjRQk2BODDJx%<0fz%^^Ow@>ir^bqv`;)LVW)jLmZNLHdwZ9E;z*PYbxO$etK^{5D zqe)EkGAl7{#vczEm9BFytgwNL-m-f5n}4YG9-bE1Oja`YFFwxWXdvy(=bCFTW3 z8b^B&?S8QCn);SAC9}{^I!`QR2d+ggI#?mSoR-Ll{AYOZ0YHZp#_TRM364&rDj@_ za^^B7QxoPYP=m#=v+$;2LQ(tUp^1^vE11;GrMi%xA~IZ2vzXbKd^XLcCZwP20gQ3! z;p>~3*wJkZnkJ#mkmI9@I8HJtnU(B=DZmVbPkOm@=$3ko(3<2)PZflmn6V@(CZXb~ znR$&Hs?;oMVWSCyJ6RyVWdY`uFwX`6L8injHL^7v%rZzjLA+Etb9OOJ@R z_@l+os;J;!p`v=8WQ9dGVz>eR?Yhk2l3@)L>MM0qYGz!r6WYeu^fMx6rh+-jv+9}k z;w-!vcu?Ghl$L}=viS)2KQdnchrvGvgO3YNhColT=RZ9~l2Bj93--gH*TmL{qO;uO)54i<9SDrA z@#C16`D;t-y#jBfWww>K0gNn>k<&@hEtcME(c7T=&HU?4$KX!_h}X$rq@OgmrkDS_ z^xQH^9J2@;i3?ENs6yFStMC%aLS4% zorJ$mh~7-qF-|HrozloY1LbX+&#JOy!n&f(VZ~e-?edgwNs~O4INKzx%e8yu7Pt$- zZ^CQReI}4<9b@E0ez}8QXKhxVW*aRO!j)*m#Xy*g?r^4A^V&FUms9Qr=a0e|(;H2( zc$AKN&aqE`1wU|1<_FYtI`$)3sS@xRF-f$XfyYS{Jz|Cz(D5V|eIRYH4a~@OI@8MG z>ZNGd@!VGSZJOYqOWqvbadfWPw3jNwk z)taCkMS!Q8ruHBn&`AG|bFdn;U%M_0GQK6C*}Y~|_DFY$ z3WZ795b(Vx`oAf>3nk?a6W}b0NBi&r=fj5&-u6shPAT;Eh$;LdFrW>`YDwggbGlms z>iZFFdwEnGB1pc9G~L6Bf@O$$GjwAb``OYuvV+ zdfsdUexI6onagt<7lO`A@2SPz{`eRKn*R$;$@gE1;zAfSkO~7=LiW+UMCq1VA=} zS{Ob*_yUoea<%diCri5S>ZpK+YhgE%SC6lblJAMG2^-#lIRynf}Q%-p*md~Fo z0ME}oE5@c6P2i_&Rm%Id$cUEJsZ;&Q-@1F!*GL%C;xI3r!1R8pSLSsz43^@t#kkz@ zW&>sARjJ1Oo3Y;k#&VK?^YmjedLXozn~gqf$rwG>5ZhW~W9$a|2cP@SE7IN&IHwDi zxA-^JMJ^(cuGKW+iW*I8*Guis7_$?@PVPH0p@1LJ5yhX4F`H&Q9#W`dvIC~`bztF4 zxl-d@4TCiv&eg+CT$U>vGkziv2Lj^SX-zQtX^muGF4|#}*&-u|f_CbTcH zv(X8D_S@Avp3uR)O!$ z)tLh%627jRxJxY(FZ~-WC!E|j23P0x^XC(1S9sTWRV+2TU;Q|J;UA;sN~|L^(R9BD zQ%aRvZ%2!#XJ!*eml?KIG!$*`aNGZ*Yju`5j`XC?evM8kMvv2c?@(1FS#Rf(TSYXH zwbG&9=Pk*vNIL-wHHuj2jZ;d|;Eh>>Ol{>k7qowbr)11DTSiOrp`I$UYg+)QLUad? z)7HU%E#hw0_f5`R_v7CPI|luvI;B}eij;f*JrrUo8k`Lt2VB%wOpfH(=2gV~DHUi* zKHJIASjTFb)k1UUYh#j>V&Jd-s7e;Qa9lgS-#ZlSwOK_;c7hUo=#vp3JukQ%-28q> zFd7+CG#tMj;>O#fz$mpJWooNH_$SPg zsJYE#-@wfEw1+GCHsx)QiqKUT`D9{6OGyA3=_(?rpOx-QW~eSZiT<2i{k<7Us#Iqf zveF9+i2%I6nt3H&^pwXyQj$Z8Y)qMY3Dun72e>r;1qOBRr38K^88-4B3G*cciMx*N zlhFj33JEn)SK875W=v6^Ry~-@Q6WD>GGEZ|98$RrW%oL~_*@52j+DNWpFD=7g4Nx!YHte1eU64$4eKV-^nO8YZx{0GQXY%3q6LfiUbFDmW`6V;C{RF z*IqZ9bHt6&osK@=wr$l+)dU=Y;!|Cru>n!4)Km`N^l>9u?c9_FLam9#^eXKxfI0Fu zn4e?MP<+R|3*A>WS45e%+x3QroZd@FdeQS~H19>1lv<3Fyq~LimH-$f8UUlPSub9~ zi>_CuzTY-rEUhSpN!cb#ZO zUutO939YszAB)^DhmF<)#DwXC=cDjJ!ZQogkeNFrgfP-mAbX^)r=9Ht59KgLC6 zP0VC%*}|7-^PVi?sSL@c8Tl4F2*F4izcWK$j={lOZFBMfz@y7HsWM%j{RDc@$^m#Z zR`l4v;n8P7nhZ=GW%5R5S6ll+z5XwHsP{eJ=S!fU)K&@KsVN;1`$0@nPm-0SDyhn; zlarIGz0IOBF9~r%)L_|>d(ZHL0OPJ^Lbcasui#UCKaJKqA)I-ox3sA>d*Ld9 z(N4SOAaAm1M&aaqbzfjjmMSX4=w?!>`ei7V2ob80JVy6zBZM5oi%sR>||!?>-c!C$j#}<6~#1 z^r2VZgD*4EwV7wCu|+fB=5t@4tFx=&LGS8Z_r$g-+U(;-2*`$m?9xn#7~N8>_xAL4 zd3tj`V}AV}(4)TyhPk(wRR!I!GDF$Y67xiafb=#rB@+#0^gPxva$hSD5Ht6-HY7eL z^tG-26X?XX`nY;w{#Gl1|3{~tho5`>XC^_*BPHeD%A{&3a6#(p_9P&ys(a0{Xx&y0 zNieZv5%@ZmFmkR;^mX}gA0qHQ3XKuC347E%Qy$OhbP|0wdVNp27Z|zwa<6G>${G_5 zf;kU#E2bYac=r@aJXjq%BHQJO8Iz z=jUg|BK!v+&`W&gN?t6%!U`%5-Y@ChbX@?y5WOVk>nP+3NSWs`okRGmy9D{w?^OpC zc!_hcW5<_9(N|(r_yxo&l|wh-&ri9Q63g7|YHw(2U$bdh+h~4mx~N^dBeh!(*$e3D z11*$uwOCB2XI7?Q8%FqY>~VK>C7*PK46sUYLS?M9wKc@z+)3~xzR5e|nt(o|ZYd71 zh#>FM8r2Uvri9Ys`Su@!S|MM@)jbhV2I(!VQ^o`9md;E{yAJAXUz~i%%quMM2 zm5J3ZtmANd#=lElS>fnQ8Ze;dY@?EMfLtZV+}x*?YOqPky}qB-uO+De*uJT0t5jLG zFB@*?LvUZEl6vVf-iuXQqis0V4W*AGm(0iV&i}coeP|u|`n$lhIVZ=FAS|}S66|Zr zTELA};@T2RIh|aizAXnE=LIl38@kKtg*v)xFfwb-!X=*?;2;*))sOzoc>j}CXIp=; zt8>AE8&5bd3xj!%L(`|Dq~W9uyczKjFfi-l;45Hf>HbK1LHmLAaJUba{yP+}{E)PKh zRTJ6@`;C&A{2~+Q4-U_Q#%htK2D7HL=~&h*xSqDkK;PV=(5}w`OFfnje1fy3OAU1D zJ=?Y!9S|Uh)K$2t(^Dmb>$R^#q5q>ok3ZDX;PpV&2m|rB0HtGKp<6q2yU=#U_o?BVao>iP{Pc$prrkmX?A3W|tLx{IV!eBvY=0BR z1ea1QwmTXrdD6;`pvLrlvt~oyYP7Wg+LK3zE#;|8dq?*bS+k=6zjge<-W!t-e(*-^ z+@1eq@IA8qJIdhI%ZBd0AI_?zwynySblq3*Jeg@HI%fh?SK>_q@NwFkZ2)^BC7%Kx z|8J)CBFOLsUPp!{oWq|pWA_~&Y}D2adIb*`L=Nf~HB`t1IFOse^DiXO1B8=BOp~S7eX(TWtrMa<-}3)|?Xwsn=8Gb_Q>$*VRS7 zGh>5cSK*#7H%9J3Y(*RE;bB2q54zf2oZ0?zfs9fcYQ>^sd*$nXS=}Kh`$A&6M!5JPZCC?U* z(v?L-Z#bn?sN}f6qGlbAjNPY~=t;Iz&h;w)DO%O>$`|R1Ku)x9y9skX4h`wEb|#Zw zK9L}-osZ))09KIh8;~HrV?p_S$rFt`Zrj;0@o@*9%b~^fqQ!R7l%&W6jMH-RJ;=*q zHJg45rp58;TZr8TRz*vvE7qWbH3gvd3-KZeGj0?#H~+CeUv~@w)4awr3JMq**_hG) zX`8+0%>0oGr~5iCs+Pj9RDCEqv$$`o+q_SrTp#ieSZFm?ue@~I=&iFv<+ysRI6Fta zSWxR%mR5vUS0t*R{b{I;zUz~n83r5Y)9Mz>K9SiMYRGc$e>on)Stl*;Z&%FVzMEes zO{gw7BvX2T;PZpIyX;MG@jynr$3K`3Q*}+KUZQz{>RPT_o1c!t3|{y5GD%;b75s-NlkWo732^Vv?2=y~0V1@C++e(msdUPgdY zF=g7U&)b>Yl_(oqCL#G`r^7j8pb6T4-`{NmXbr0d=M)Os_)XT}{N_j*;tD;tvCksF zNb zI3wAVNaE1ozE=SL@jo8I#+OAV5;~N%H@KMQzJ5 z?9(044NX>F1|?7Lffi~&oXS6aP{ym_rWGBJA4q~&1>01w`&(UDs?m`J?fyJSlHdT6!ING}8-@R#~ncmL)g2*KcG?`k8MNU9uhdyp-B(dn4o z+n`MwhW6Wn|C4R53k_j978AxJ z#q$iu;)Li_z(rpE#H^j}NL5}pNvFl)^TQnRy4W~hNBv88k#_gY72BlB)+LFaBC{Rb zJ3W?eK*COINf;#vQMD;d2Y?fGRqRJxi+M9BR+B`bXV#NN1XON0sWNdnd-eU>*<1Un zlnX5ag||?==b5~fwHtcja5t_@D?_Oor{NJI*!?dsSkP@WNoZm&f*8Ropo%&$sHAjv z0L_}fe50@z{BZEH&t@l2*ngrfOq-dPdTW%1DBhf^(l+tlKVZGBAOBUjHt4W~Og8*t zBKYVaslhS}6o?nAPIY}DXbe-Q(3rb6oGbY|);?-P6S_066}irJ0m@$|Od}eskmL$8 z+=scGgP7*;hVcA?f^a>AGUIu%W7K~0gry!bTMZ$nCm!|E)9*N0?dqxIv8tQX9njyy z+_gpnn0bVwO9k8WeaX>aBY?HRyEEFDuBDsS_4RFQ6QHT?35>oktA&i!J_coq*yepj z+?gq~c+)yytxcmPZplVfo{h zUSZuIBRz>i?YIt!kFU2t-uC=P6`UxFd#3k|RFz#_ce&||xDFr>HNhi5ZB*|cx>&~1>ta@n2 zITU*JE$-}ZmxowpCR>|uai{MOH&+Yi?W}<~K>~fNmHzfSoDr)rUr;rD2k@-R*h|-~ zJiC}&316EX2JV|IR1E17mtlLR$>N8hR*$o3$I{2NLow4>3u{Nun$}(R z<4r8NVN=F7Ph*-A1EWzZ49;wMe^G(aF4&6mJCaw^c1DjYFgCNZR@2(++^|CjF#X6N zDmPr^oNdbhJvCW7WSTTj^wHVAy1)^=0|Oct%{IN<{)_+nAf+Wf+jg7wANlRjDq7mV zyJw>a(p5oc#f1gsr^A$pYpd*m)u_D~TNM44ScXw!-6qwyJs4Xa+!IL{+Ba2c&M9kh z8kf}K1TnPo3@uf^8NWDZ7i}ku zYKx}Qc0Rx{tEraaZIv3mzg9@A2esDgb{ICqE$Y;{{6~nRZkquUcdf0Vs=~`|phdTC zdlatvd2y^Qs!>+Q4nd9QTO9au_CGp*`02ci|6gNLobfC&aQ>$G!83L^J0*|*?yw(d zDMOGoF{kOHp!tY?ZNUsq9KmeNGz-q23TJa{FQ}k=aWdDi4gzjnt?kv_wwMnO}$*M$N z-t(u*ga9Ft6g@QxdO9>tz|t#adWyMzR~lL*2x_pCuGu6%RG|ttcd}d%ZQ$_9_;(`*)c(>qI=zJ=*7#a!Gt z-zF8)htj#*M}F_4MY9jHe+@((9*<95+@1$FC%jwS!1tb)y`{-d;K@M)*46^cb7m?| z0h6XL;4C~65C|_QleTD01yRI*1_Ese0)so)S@P%S;vPEbfKgu>u9g577Qs4~V(Z_5 zP}pTV5c?;7uQ#ltKb_8>hf|ZCpNl6IS6=t45k#MtO$}Y24=+{%U(X#iz@5FP&Nz6} zNS-F%6x=1FU#IVSKwXd9Eab_~q5_S)g#Kjfci?>hGBM1Q&xg)LyE>sdr|IWqdX-$e5#A+Au=aeRmq$?BAoTdk*V{`% zN>`bz5&{PQ(Ou;{a$OrXsT7u`-h{n+wzq0h15wxeKIPUQ;7QxrFZ0+Cp7Z7M(zD(J z&&;q%;6uaQA0S%!$x4h*8f`uW@n}X=$G^nwz@3JkSh#8ptPW)Mx%1{+akmDs5fd1g zA6iJ0ThG*PPv--ihv@We+=-T^gs=UOl@qMuC*wh2icAz05^phUp2%w#k3G7#IiH)3 zQwA_~{)Z1~j#))e&|H84x!h z8fmq?br!0SJ&7M-kbxso!`IlAx#Q#nd8Km$)!B&*oH{6LeYGt(7ze+8@#pc)lLKh4 zp_AZ;sj=!uh>tJE&D>r=LK=lZn(^+A7rj_J4dcl;5Ut*n@9iYQtftfFb#yDI^M2vm zH6>vYCy1^rIL?tanYQG;`IJ2p2zbTFBD5GEaF9_3v2s~h&QzF?KH;<+T6VgbVjV+j zO-ox-6NQ@)zv=^X{wcBkY_GXCBLWBM49=Q4kca*V*m>rk90z;@)9JovAa8vpVHT(# z8T{@6+HrVD54EW<|~&e>w^BAb(->8w6u z#tRU;v0pdTe)ZxJium}?1ia}6>7X_F*cl11(wJ$)&_}}H00&Dtc}ff+0m9=kJc2wT z=QxW07so(sfSj*=#|-3fvHHxji?5 z7HQs?9087j#3@U+X=LzVH6%M7rogX1_RP2U#w+w$oKclU~Z=h?y_2-4aPspx- z^$k$CFt96zrfjj8G7mb1a6y$v^HSnVF@&`3B%lOy)ll6$Vm}wme_$=%g-58C4ZUi| z9gCdS`Ng<2W(Roe8bkS+^QJv4_EawOyj{uNT6s~@Dp@o_YM&Ymq0>4m?EKVPB&NYOfa0KGI5`& z#w0lq|G*-5Z;6efMku1jLPl5luN;5!h!u#K1@58+F)Q6SM&<}9;i-uTS{`r=_;PKR zj|(qJ_6Mczgii)QzTIp9l^-EAfevia1mNcB5_iZ1L`{Q!&4*0nma`o?K2D$44 zK-akS(cS?3#C(V9ruWrR zCLnYe`SANZSn9{offxzytqY3>DhAgQ{*qE|%Z+e%VpS`^C?!X^HTp)E#{yvpxCX-)wC4WLe7BxO-sh z*To^I6uOVCq|}#)H28ItE>%z;P2pd4RL&FOJMX2=(@s36`c`Aq{o;p&zJ=RND| zF>TFrN;W&d`?ABu6M4w=Y~$qYim`#`4hjrRo+3f`ffXK6&UB9dH9ABfTRFk^K^+)! z)#>>Cc2={Dao?APcfz>?BHDl!^48PX;LDRCB znvPdO($8(4)OT~4mbNF97nI8Lwd>d0{lU{z=T}wC=D_HP5t9`En>I`4dEJh|1rA^a_7JJy&OTxC z-XNaeoT0OjY6bZGnLzZ<>2=hqBnAk!gqZz)uO;tu4V3>n`RWckdY|o~CGzHMXZC-O z1T>-uShZhE#NX++xbY#6p4?y;-j9*7iO<@hZ{EutIsg_y;^;V zNAygdF6_+rPS5ZzQitQA{NPqS=)4 z3T1`Xlm+HfFE;S<30`;ZftA?Og7U_@GxfV@$6=`RbY)oPzX`c$Zx=s8^uTh-|G~oT z+=&NMxi%Jr7PxqE?RL5ophK(j7cM_Q}6QVE?7OBCHTn?v@ei| zp(gQnBUCW4&*4fMIxfXNRv;`HGw(>=1m3ylMze?lC){eQ1*HcL)cj5o#rndA z&e^oq_$N|?ex`oaANF7gb@X3K&`dN4!P}7bdDzTezP>L6$ZXADsM8vo%ioYwr0o18 z9*o=p?es?pRCgfH6!=EPM+Q5rE>1{wL;JxT|B-teSg$g_uavP>`E(HW5EtJRsHd?W4C&wdlSFwVhBcvU zvYw&L>Gwj}2Yky8oX8Lmhc)EFkN`V1NV>H*18A}Y|FCx=#M61)cza`tPHF=}zP!QF zlc)ojNxwntr(0!%6Q&p54T|~Pm>xuk%fOw*p<_bHoQLD^a|Ff{W1~hJ>1B&uO+LWm&a1sNls#1CB*Uyne3L(``NeDu*;g97tYXn8q zP&My;L#qlKMOXn^pq5!zexVhC2$lD z)M7EDk!U?)W)&G1y`f+kgXHY~ZBGnF8%_%ly!8~8QbFrULW%a)3JDAC0HIXTg3y(S z0x)BRj#h%hiF5}c(7H39uh7yIxd1_}5k*Rawu?c5^)wmp-n-fWi5vS0Y7~P+6iq8D zZ_!M0u+;JFgn5phG>!{JKwwy9O1od^RN&&%B{(4S#$KEZB@ZWu&fK5H8p`H}fps~Q zp)`phYh!xoUzy$nJB+%t(0M9AhGaQA>^`a&)SPO+8Q9q}+6*3DHi=8YCh#%2x(y7_ z=C?lQl>cNd7&;xvBUj)azAWP*5uzkLB&B3&MH-GR*9-qa(aROS=%Zo*)YKTvPGE!d zl@akM8}3UDR7&s1kUx!xH?OU+Ceel{Fsvcn6%{hK;RVRURdLdQ0c?~Qg~wTBL^AZ{ zW}TFrN?oge6zzLID6tnN0{_*xDQS*;h0_*ce8^uOLX%uVXfuC`>`OY^8GC_0LU1{p zFpHdV0qkjy9UZzxj^aXn@`0c+`LAJw43DNH9vI6{P$X>_t7eU%K0<3H7ZgoT)7QpM zd7++VSo8TC!hjbzcv-RKs2a9{K#t-MxHQyizBpHUL4gE(G29x9AZp-r) zLh`qyQx=4}XkASYh~=A@4}^dFzB;&~eUTUWS1*tJ8JRm4rhK~Gt&KV2dJu^n){0pR z%zD`p0g6^=s*Xyk-!DMDvRBnvOz2VBw=t5;U@Qhu;ao(Kl2k>{xu7)uUJ$HEFSKzu z+URR$RiU5G7ZstQAEKw0^CuBkeC`)|5iN$o02q}T)k$Eu9}GmVrTUy?5pjNzuGff) zObPOhcG9k-zh2-Qx|$R%MgXA(Tp-DQ30W2#rIZ&2z2L`}xh8`}VFLS-1z~^4<7SDw` zl}%lpsCs`zl2z`;FB@e^;J6FRF`cBYsVU!`DnV@+7ROG3iEB4l>7!v}m={VeY(His z*^j!DSz3%{1+A|pL0tuI*j*f}6d6S_NnsciPJ2Lm_(j5%;if7VWr^n)7fLM#VHP1G z0t5`sGh;Ok@aRW1h}x9>46U+nmf#C1DLIyaKplz13F9J3!zBSwHC8{xg`)K)rW^>9 z^#&@OJMsX?BS-RSP!+owG*m=M;7Z*L2}MX||KnfkE)2ah39PB}|2B>XP~%=1l&Slk z??5d_JblxiB^M{lJ_-oqDM3^02By-`7CV@z!Sc`Drhy33!(&Jmu49;LDb%`8@pX^&1#DA5Ipcoi@A7RSdl`@org2PfL6(NZ& z6>Ey-#sQiZT0z|C|A-8mp$-Ur{NA26Sn`P?28+an3v+W~&M^!n67^E_Zs~}Y0|=eZ z5Nh?KV91aD9`zYW`bNmj+qEK~CQ1I*bwu`nN{sex7hCVQqfc4e7uNuBp)8M;Eupp zR0Z+Tvr=5~-&fe%MO0@m|4C^ffNR`~kHReW-JVC84e2vN1s~7VXi30eiLD9ONP1y_ z^G>L3^FFD_8erot{BZ*Mis9v6!17~Ns4LEYirO1h>*zJ4d;&*tyQ>bdXS;p4YE}6 zl*^A9`96VJ6dTQ(#3;P2Jw{Xnpv3Z27fBI+$&WdO_$c8@G^TEl*B&!~*BMTGQx^&? zY-yQAR#@8JO+$=%BTSyGAQAQVp^5A8#nl>;@a2ZfWg~!*%AYpi5+;CIOjOdM$Vfsk zLXnar=%*nvK@s$kw27ft9NLKdCx7!&^-STc5f@?$LS9Ug%aQHf{+;Qk> z0`TO(z#{H>9i88CySZg0Xo_|Y{shi%3iF91H1rCx5!IvR0v?VB`^B9vQ!O{L?mFv>N}78UdkJH z4dMkoH%%4L$XEX-Z!)e}q$`e)!Y$D`|*!yTQ!=)75oP%hMXdmso~elWn8 zZd4}`^`6MJ`TA%I2`QK|M1hjEdvCoVqHV8bF^-MJc} zj99>T6&=~ej)a$SK9K2{2%$J9$4fM!#8$+ENx%nWu3HV(=Mb9&FU7snHAi8-+TE%m%^*E(Q1SFyVPu@3IR7_9U0&;MJ|Wz5Xg zDTfCFvTX?hg8si#f6WaXOums1HJL%-Qo5l)F@SRakTyv;{yk{NRAH{$f^Rjpskm``dMyog&v#*ppF3W|Df6J@;`o zw^1UW!|(lkJ*6jW(zGYm!*bVpNkDK#?qV*+kTsRs8g@w_9)f)Fsvlyy@=b+kcE?@d zIRu35TfI5@_{<>R~hd{>d$NOe8bn^keO9eg>de!KT`Jc632;B&)e5{tuf0-tc~Yz6L5 zTJylGWkyx_pG`JoOwKAF9fUVHhx_PgxGQV8E3C%yh_V#~_%OyND6yn-dj9%pI%+jG zx!4r!K4trtwoAffbB#(M^``Co^kDX^Xmr%^=z*On*e89)##^Q(^1d)TgQ@-n_O%CV zkxbU1aJM3Ya%Sd+cI0qw$h<76X$W|EJ~q1seL3|jD0-|j^NU7zY)*vju34zZL)8zT}u zuDs$u<7#3#b0r8;TC4xUTNO$cBbl>Org>6ogzD$7;N=QWVTIJYD7o_Li5P(E6`4Nt zWI_amdjs05gKdU0kF61m>jMj?0ct1`&gK)^o#qv%&M*BAfA}0WrBFkiiwzm_zOpJP z&r|~0N2yXhk`2*C5Z|^at2iM<0GI2olk!XW49w~JsSNrTbj!2qG=C=B9kG7golXY~ zj~sSli-R9c{$R~_VVj%7S$z9`2A zIG;Alsi!WVc-gKe?q}a!V+I?aJRI;e4rEdz`V52TR*CCVGdY0CGD)BrEpxxI=5kUQ zSDL4B_r*gskgCSNcz`Gf1TRTcbFov9N&EFyRCeJD+@f&mhV9@_mphJ($tg^L0TV`+6ywC#DEi3B7E#Glw!OM$6 zHzhaQwv}A9G(esWab6TnWSploIAF=6wjkT-*lNid($;U`DLPaglIs@i_Nq3z8DP>h zc}O4~+5Ge@)Gsbt$d_Xj%|J)BiW_p92-8<0?({-j4ZyXp$DPerjQIfg$=>q{~Ec zXT6hvX}S8Lt$2SUdfa&INLLApi&NTuZFF$q4_2x}RUC7ICJSwWD3v1tPiVLUFF5?1 zc}!Lbz>RNIxMk#Vw-gbakfuvS%pLxl;U6ZmHEhI3jA#a|N2xuaJvy1@HP;-~F;gz( z&%@;F_s0Q=YbC9ppB=2(XR0)!G{-YEI+zF5ziCFC2h;qyU0caExLKn0*cB{5^~3yE zYJHRogv3Fy3YJ;s0EX-1_oTKv3~MNec_k8&X5tz6W1*s3%VS`n=03A3JT6G0RzQd1 z!$0F`yl#GAwO*^N0#e~|8%Dfk+>m-VBqolLzAf0SUJCqm4qX`|*nH|G5-3dTfFwZk2GkPkYpE8PV}ZNRg%wqRM1{EeU^F`O^FKw^%rL53dA zVeRK{1$Z0bxjF#(qNVQcPSke1VgYRkB>CZP8>2dKp4`|OgWlS-0&N6^U$y8R@W|kX!R%gP0~1sXI8BZx)(1ppz>V~e z`#l#R-&Y&E_zl6#+>oL9W+%>UiVR`e;a7CfZ?OWwe=J9t-r;>Xog^SFV0W?nw#$^k z)&r8@S?cJnfhrOFLwz;f6fL0vE z{+ivQd$0%!5&M%x-Z3NU6vj|N9IsoqWy?28dK4;jf&y|WfxEgdF*8206TRur#FL4H zU}=!NeH|PXiaako<%NmFm^-QEa@0neLC9Z81=G--_)zwK-lpuEP7B z!9!aRwGkcOY%wv*>?|nd#Zh4ON#%#8llB*GHAgaXFJkjGZeD znTOW^rmAZ^b^sS8d|1R><)qs}d&|=L*_6dYejwKZ{HytcIFxdT zC)8KD_v)Kkl`}fH4JDB`Z__65Ge-HNW1~!)0eDSXppMfCa@(egHDv5}>J>Y#9MO#kAgcnHyxC|+bKdIwGb zpZ$|`91msJGL{}FTBV~XN;_To@1(CID&KhZCHfK6gND)1Cin+&U=m zRm~ojh(8RqI0zb=)KzKcRFof@KId$9wDB7$?G+2Y7Zjm&ybmAh93qf-JkgrU?KKLMb@R8~+$00-EkM}fvXj&Ux0 z{+(4$@x^LUs~RD*5i|ux4qlTeWL96ByWX?A6PqL4;Sw{d&qh^~CQ6J22Or4>ZDM75 z4+$F`u-|+G*QiepG!qNg7ikP3c(y%p=r0;322Qv={G1)N2pUaii1NRAIWXA=A|uW% zW{7X#UU}f2E;B%5o}T9>rfD5*iw36{HaKms>fh5B_Cfk z;eAMVRw|aF<4UJLozw#BrToj?x59UH$IEO{3@^Y=sKYm5$D%ku@EI@0w4YbZBE40> z0X*Y+T0*1Gx@3KX?9}CaDVIektv07+qktmg8Yyhb;pyST=;*Izjb1{ySGw%@%||UI zta+c>PF<|EVC^xPsTeLI68U+PG7w@`Z|hi>lXJmzR%OkDb^c+mR_S-TFYD!3_)kflt+i^ zZ@Qn=ik0_gu!AbngBW8Sjr||q6W{9L`uF=E_31cT5EXHDaC^EWtE1zJ$U|Ty>D;U9 z=;I05hZuv#rChvM zoVnF;9xGU-=cIv7iv0Af;?)T=CK*9s&Q4e!WkCR(|MbIu%)oQ&_a>_FZW~4zP6qm| z0dTZ)aYoXUWo>?DW$Dn{7#*XbC@UlDX#iWAFD0Ge3X<&j`VQc`s)plMEl*YkFV@GN zl}qxRjQ4Pb-4BG^cQWrDWY;O3`(rGJ9 z;*eg{27Gsw_aLlghV_GaCilCpvw-wU{Ab7S?+wvppBFt{8_!D*FJ>chd}O?F@gj1l zdSnT(@5>WDweQhSD>2B|0g4wU#-4GTD>pA@I-YUq`Y*7_Ir=r{6~^&JI1JP)XlwZnEJ%rzU zY#Y!!G5@N~5*>~=m8n|MfA)UAgesf~t$yLnu4gu>v3Ou#P2aj#ln3U8+Ye(|s(>=% z&8_YD{!PPP_^=uZGC3+~JzV|A{2on;=Xrfr`Lm^x`IPzQCL{9$GKHpv_Q~Hf9uZRS zdEpPu%YB?j$wQv3N+X@ezsWx?i=+sTr_0Z~)m0*#$rG~ITE(O|R_S_5QLMb8-^_8_ zK}p*iW7Ym*k$@fb8zdm&;EOvqhG`u5I~O!mkN)PQpenM#A1!Pnh6MqpudL$w$E!?s z-J|S>>fd9m$F95(a@+r&z>7&DB#E6g9os-%;6I%9$c^$=EQ4h$aV((ls@^Dx>9JQa2CR_*zvIxMI0^XlO&2i%uBf+P--sU8}pm(hbswU zh$MH{_BVNp{*sY?{v~0Gw>F;DT?bY5D>Ic>?iN6f zark>A*&tjWaBrm;$29)^OYW*tKsAFzqzqPyK`eB&K9d<(>C}^{`jA7627nYX#?rLw zGUU;Zqy|%7S^iM6Y-#`(K+etCUYH{ImY-hBRT&r!UfQhUz?2+JlH1*4l^90V@Xvs`wiDm zjLaAnWk?8I4Mf~I&1&Bb@<-RDh_Cf+`SGEIPcp4C^^!ud6n4c_4HWI7v)N$$E{!bX zKtg|cFTt@R3kc}wXEQr#briqd4>_XY%QpucMCI7OK_OIEX7`mU^?zZ{ISzg2Xjugh z*~IZ(cK9myeuOVV_f(Y{N&H=w6sHYX7fMKut49Lj?s+iNK7=2;{a~kxOUTvgtivy4p}G~t))g+4GV$`q_F4oG9*Z+j!=R9v zJ%n!SI0UPMSe+$XehdeewDhY88rz>I_UK{{)b65$a0i!1Q;KMW9zh6rjo!#_SDB)t zPXmB@2RrE`Swk!dbIPrL`C0z|tE@8*hw6R*_#9&>WGBr`*6jNrjU~HMB+C@CWG2fb zBwL7yY=f+Egox0D%1(>2rm|-HSW!bN+p6kr(zMuQt=Q+=HuDQ+5mx(xqaUnciuxm3c(Pb~iGt#q)m- zY-;<$i^da|Sg6?fDb$=+4!R(Im#3CLV8IX zO(?$zw!Qf0?O?ZKT-)!+Ggfadre}CbpF~jW`#O-86a6-ERq53VqPVb8DfWBph6lxL zG+>d>-A=%^bwyam9o!cyYvKe3P8!pUoCj>RYHTe1-@QZ8bK$oVd){8O6k_xMPoi5o zZm0{ICUla9)oCsoZCo(sTi80j_5Rx-_rvQQixWqBdd@lw zMye^1TuGGHTkv-;4!bJ5wg$OHc!ecmaze`Ui8%xL&4f;kHAaHZ(p8`F(4~3h(!ik0 zhh?s8iyO+0abJ2mGs2#fv_9=9868|-BCpS=#c??@SLHX~4cVFTpLG)KG!1tsi4yOG z=?TY~*y-fXUOf|GJN`MqBt1cZsR)*TqfAreF^Lf~>tfj;dGkH4$QK{<%9~r`uCa%m zVYJmt5ws~NYIx>3ryg-kYb2IYvxCQ^wC`OA z?<)*$6%zEAyM;B0;y2Ki?-h|VkZ(LJ+sfc{&PJUWS?FCsRE>&74c?pOF?v6MDxSk@lz+nj9V)!iz1Br)r0Cz9Wp_ zEuBOUHZs*b?ez>dOKv+eua7805%OG|Zl|qG<3GjtA9Ki5zxN%i?!7P`Mbm!JeVjWo zHLq()RZ3*-DLpn{f>l@49G&}c)x^w+-xC)n!Jl1cZH z@~4;-IleL?wI;si+%5WNW(~J$RYVD>beg}F&L6aRUs)m*uKL&m%OL4;w25V+D#gC- z6$la$+v2jer-wOb2fMQC@zhTa>2~M4UXKYfo~KWjXL*;h*yAm~99}u8m!Mi9??TG; zIh8mX%%ntVlsWJMJVz5p5iRQF?IOv!jTO%>G5XCgvEp`jdK2jg1^CxjKpS%g<@pEPk!nZ(T8%CT<)>ZfG2t zpQtP%kXi=$G>g8zMeB6lY4Rk=3smyy$puB4K!X)6IsTPLju){C?z=`lCjH0mlN2h>c>3y~5(QpB#3mH3{} z9eDlSG4~X=TlyoLhXE5xx(SHPv{`J_r?!S#vq|?pLr5vUS2(IeTcxhHz-uEUZ*zN} zDT#^b#{w}(`Rf=1494{T;)*w%@UE^-J32gNNlvZuHc2j%D=L%CX_n7Ue8i2=cDXO*olL=TjBu)^zKrx)9tr7N5ylA~ko>0{ z-6rU>OwURYrgwd-V6wE)M4#?$P6FUAu@{?c%^viWJ~R{J5a(LXs}GSDYu0dw_$ zEvbbl_IwLfCmipr-6VMqD*yPiloYt&)Xzf+Z0V|2H^B3ySwCkB=GN3NqFHf^1 z3QzE4=Z$Kf!tw~dsxwk%^vqVrm!I*)Y!(MjZkf2PV+Gfrj?J>n7+xJ^2zEaAQ&Bwl zR#R8`!LFW+-1!fNoUqf| zpBC%AWT5*9wOvH~mrYmSX*Dt{x-VJe`>!ey%O~mvy@Nup7An^(1yX8iqR-kZ4Se`* zkJibeJAI^HnJ;hTt4j%`6`4=xG^bI#U?gsiWj08DU!U!mwKBG@#zDnFf`2tBz8>RT zI^tlQK6*N5MXy%5&oBOC@10cqJy=`yeW~FNKVQ}8S$CMWU~@PjCz$b~7msIem4Oj9 zB#~9!5?h+v&iDRtz0v1B+fUI$l401OXf|Y!vqJpSa?3XKgf3V;jCqlcWr&uFOXwn< zo1&GrXv<`3I3X+jlA7Tf2|i%XqQJ#rg%5EGoz-9*r5Y494G~XR=IMPzZCj zjM5sR>4z(sc3s9Zkh#i>2G*xyD~c)g^<1p7GXs|jc@~C~c;#fJLWAiUB3&FnXVQIn z?uauCclk6DX0A1adB;z9&rryXY2-}VD~?`|T&9sX;Uksg%m;QPd?*8%PsrTI$j0`^ zr8;NZJO;8Dr*lb}&;aLT8My{?tdQ!4-9ae^?E++IM27uM8bR-@u`ixRcQk^mIn>9H zCx3*sdb4RE4CsBI&ap=u6r)+cmZf2h`2&!1h2D*Dgs&ow$)qn^+Y0}DE&Q4|0A`8tab-8 z1RR|3amH|b#cc+69aY8?XTdX%1*>>AF7NQdWqGT`ZQn5SK7n~|t3Zgs@?9a7g z4%R3EVu(7UEMz}855ZKIte`+7h*N+r^=ZFbmLH(NeyB13Ey9VglRlx4fB+qo0cM(T JNoZq){U1rQ12g~t diff --git a/src/main/java/com/jsh/erp/constants/BusinessConstants.java b/src/main/java/com/jsh/erp/constants/BusinessConstants.java index 7df6d12f..454d3511 100644 --- a/src/main/java/com/jsh/erp/constants/BusinessConstants.java +++ b/src/main/java/com/jsh/erp/constants/BusinessConstants.java @@ -99,6 +99,30 @@ public class BusinessConstants { * 根机构编号默认为01 * */ public static final String ORGANIZATION_ROOT_NO = "01"; + /** + * 新增用户默认密码 + * */ + public static final String USER_DEFAULT_PASSWORD = "123456"; + /** + * 用户是否系统自带 + * 0、非系统自带,1系统自带 + * */ + public static final byte USER_NOT_SYSTEM = 0; + public static final byte USER_IS_SYSTEM = 1; + /** + * 用户是否为管理者 + * 0、管理者,1员工 + * */ + public static final byte USER_IS_MANAGER = 0; + public static final byte USER_NOT_MANAGER = 1; + /** + * 用户状态 + * 0:正常,1:删除,2封禁 + * */ + public static final byte USER_STATUS_NORMAL = 0; + public static final byte USER_STATUS_DELETE = 1; + public static final byte USER_STATUS_BANNED = 2; + diff --git a/src/main/java/com/jsh/erp/constants/ExceptionConstants.java b/src/main/java/com/jsh/erp/constants/ExceptionConstants.java index 4f538bd2..4be7fd17 100644 --- a/src/main/java/com/jsh/erp/constants/ExceptionConstants.java +++ b/src/main/java/com/jsh/erp/constants/ExceptionConstants.java @@ -23,22 +23,44 @@ public class ExceptionConstants { **/ public static final int SERVICE_SYSTEM_ERROR_CODE = 500; public static final String SERVICE_SYSTEM_ERROR_MSG = "未知异常"; + /** + * 用户信息 + * type = 5 + * */ + //添加用户信息失败 + public static final int USER_ADD_FAILED_CODE = 500000; + public static final String USER_ADD_FAILED_MSG = "添加用户信息失败"; + //删除用户信息失败 + public static final int USER_DELETE_FAILED_CODE = 500001; + public static final String USER_DELETE_FAILED_MSG = "删除用户信息失败"; + //修改用户信息失败 + public static final int USER_EDIT_FAILED_CODE = 500002; + public static final String USER_EDIT_FAILED_MSG = "修改用户信息失败"; + //用户名已存在 + public static final int USER_USER_NAME_ALREADY_EXISTS_CODE = 500003; + public static final String USER_USER_NAME_ALREADY_EXISTS_MSG = "用户名已存在"; + //登录名已存在 + public static final int USER_LOGIN_NAME_ALREADY_EXISTS_CODE = 500003; + public static final String USER_LOGIN_NAME_ALREADY_EXISTS_MSG = "登录名已存在"; + + /** - * 序列号 - * type = 105 + * 商品类别信息 + * type = 75 * */ - /**序列号已存在*/ - public static final int SERIAL_NUMBERE_ALREADY_EXISTS_CODE = 10500000; - public static final String SERIAL_NUMBERE_ALREADY_EXISTS_MSG = "序列号已存在"; - /**序列号不能为为空*/ - public static final int SERIAL_NUMBERE_NOT_BE_EMPTY_CODE = 10500001; - public static final String SERIAL_NUMBERE_NOT_BE_EMPTY_MSG = "序列号不能为为空"; - /**商品%s下序列号不充足,请补充后重试*/ - public static final int MATERIAL_SERIAL_NUMBERE_NOT_ENOUGH_CODE = 10500002; - public static final String MATERIAL_SERIAL_NUMBERE_NOT_ENOUGH_MSG = "商品:%s下序列号不充足,请补充后重试"; - - + //添加商品类别信息失败 + public static final int MATERIAL_CATEGORY_ADD_FAILED_CODE = 7500000; + public static final String MATERIAL_CATEGORY_ADD_FAILED_MSG = "添加商品类别信息失败"; + //删除商品类别信息失败 + public static final int MATERIAL_CATEGORY_DELETE_FAILED_CODE = 7500001; + public static final String MATERIAL_CATEGORY_DELETE_FAILED_MSG = "删除商品类别信息失败"; + //修改商品类别信息失败 + public static final int MATERIAL_CATEGORY_EDIT_FAILED_CODE = 7500002; + public static final String MATERIAL_CATEGORY_EDIT_FAILED_MSG = "添加商品类别信息失败"; + //商品类别编号已存在 + public static final int MATERIAL_CATEGORY_SERIAL_ALREADY_EXISTS_CODE = 7500003; + public static final String MATERIAL_CATEGORY_SERIAL_ALREADY_EXISTS_MSG = "商品类别编号已存在"; /** * 商品信息 @@ -59,22 +81,20 @@ public class ExceptionConstants { //商品库存不足 public static final int MATERIAL_STOCK_NOT_ENOUGH_CODE = 8000004; public static final String MATERIAL_STOCK_NOT_ENOUGH_MSG = "商品:%s库存不足"; + /** - * 商品类别信息 - * type = 75 + * 序列号 + * type = 105 * */ - //添加商品类别信息失败 - public static final int MATERIAL_CATEGORY_ADD_FAILED_CODE = 7500000; - public static final String MATERIAL_CATEGORY_ADD_FAILED_MSG = "添加商品类别信息失败"; - //删除商品类别信息失败 - public static final int MATERIAL_CATEGORY_DELETE_FAILED_CODE = 7500001; - public static final String MATERIAL_CATEGORY_DELETE_FAILED_MSG = "删除商品类别信息失败"; - //修改商品类别信息失败 - public static final int MATERIAL_CATEGORY_EDIT_FAILED_CODE = 7500002; - public static final String MATERIAL_CATEGORY_EDIT_FAILED_MSG = "添加商品类别信息失败"; - //商品类别编号已存在 - public static final int MATERIAL_CATEGORY_SERIAL_ALREADY_EXISTS_CODE = 7500003; - public static final String MATERIAL_CATEGORY_SERIAL_ALREADY_EXISTS_MSG = "商品类别编号已存在"; + /**序列号已存在*/ + public static final int SERIAL_NUMBERE_ALREADY_EXISTS_CODE = 10500000; + public static final String SERIAL_NUMBERE_ALREADY_EXISTS_MSG = "序列号已存在"; + /**序列号不能为为空*/ + public static final int SERIAL_NUMBERE_NOT_BE_EMPTY_CODE = 10500001; + public static final String SERIAL_NUMBERE_NOT_BE_EMPTY_MSG = "序列号不能为为空"; + /**商品%s下序列号不充足,请补充后重试*/ + public static final int MATERIAL_SERIAL_NUMBERE_NOT_ENOUGH_CODE = 10500002; + public static final String MATERIAL_SERIAL_NUMBERE_NOT_ENOUGH_MSG = "商品:%s下序列号不充足,请补充后重试"; /** * 机构 * type = 110 @@ -97,6 +117,19 @@ public class ExceptionConstants { //根机构不允许修改 public static final int ORGANIZATION_ROOT_NOT_ALLOWED_EDIT_CODE = 11000005; public static final String ORGANIZATION_ROOT_NOT_ALLOWED_EDIT_MSG = "根机构不允许修改"; + /** + * 机构用户关联关系 + * type = 115 + * */ + //添加机构用户关联关系失败 + public static final int ORGA_USER_REL_ADD_FAILED_CODE = 11500000; + public static final String ORGA_USER_REL_ADD_FAILED_MSG = "添加机构用户关联关系失败"; + //删除机构用户关联关系失败 + public static final int ORGA_USER_REL_DELETE_FAILED_CODE = 11500001; + public static final String ORGA_USER_REL_DELETE_FAILED_MSG = "删除机构用户关联关系失败"; + //修改机构用户关联关系失败 + public static final int ORGA_USER_REL_EDIT_FAILED_CODE = 11500002; + public static final String ORGA_USER_REL_EDIT_FAILED_MSG = "修改机构用户关联关系失败"; /** * 标准正常返回/操作成功返回 diff --git a/src/main/java/com/jsh/erp/controller/UserController.java b/src/main/java/com/jsh/erp/controller/UserController.java index 0581ae38..5fe1316e 100644 --- a/src/main/java/com/jsh/erp/controller/UserController.java +++ b/src/main/java/com/jsh/erp/controller/UserController.java @@ -1,6 +1,15 @@ package com.jsh.erp.controller; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.jsh.erp.constants.BusinessConstants; +import com.jsh.erp.constants.ExceptionConstants; +import com.jsh.erp.datasource.entities.DepotEx; +import com.jsh.erp.datasource.entities.SerialNumberEx; import com.jsh.erp.datasource.entities.User; +import com.jsh.erp.datasource.entities.UserEx; import com.jsh.erp.service.user.UserService; import com.jsh.erp.utils.*; import org.slf4j.Logger; @@ -12,9 +21,8 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.security.NoSuchAlgorithmException; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; + import static com.jsh.erp.utils.ResponseJsonUtil.returnJson; /** @@ -209,4 +217,99 @@ public class UserController { } return res; } + /** + * create by: cjl + * description: + * 查询分页用户列表 + * create time: 2019/3/8 15:08 + * @Param: pageSize +  * @Param: currentPage +  * @Param: search + * @return java.lang.String + */ + @GetMapping(value = "/getUserList") + public String getUserList(@RequestParam(value = Constants.PAGE_SIZE, required = false) Integer pageSize, + @RequestParam(value = Constants.CURRENT_PAGE, required = false) Integer currentPage, + @RequestParam(value = Constants.SEARCH, required = false) String search)throws Exception { + + Map parameterMap = new HashMap(); + //查询参数 + JSONObject obj= JSON.parseObject(search); + Set key= obj.keySet(); + for(String keyEach: key){ + parameterMap.put(keyEach,obj.getString(keyEach)); + } + PageQueryInfo queryInfo = new PageQueryInfo(); + Map objectMap = new HashMap(); + if (pageSize == null || pageSize <= 0) { + pageSize = BusinessConstants.DEFAULT_PAGINATION_PAGE_SIZE; + } + if (currentPage == null || currentPage <= 0) { + currentPage = BusinessConstants.DEFAULT_PAGINATION_PAGE_NUMBER; + } + PageHelper.startPage(currentPage,pageSize,false); + List list = userService.getUserList(parameterMap); + //获取分页查询后的数据 + PageInfo pageInfo = new PageInfo<>(list); + objectMap.put("page", queryInfo); + if (list == null) { + queryInfo.setRows(new ArrayList()); + queryInfo.setTotal(BusinessConstants.DEFAULT_LIST_NULL_NUMBER); + return returnJson(objectMap, "查找不到数据", ErpInfo.OK.code); + } + queryInfo.setRows(list); + queryInfo.setTotal(pageInfo.getTotal()); + return returnJson(objectMap, ErpInfo.OK.name, ErpInfo.OK.code); + } + + /** + * create by: cjl + * description: + * 新增用户及机构和用户关系 + * create time: 2019/3/8 16:06 + * @Param: beanJson + * @return java.lang.Object + */ + @PostMapping("/addUser") + @ResponseBody + public Object addUser(@RequestParam("info") String beanJson)throws Exception{ + + JSONObject result = ExceptionConstants.standardSuccess(); + UserEx ue= JSON.parseObject(beanJson, UserEx.class); + userService.addUserAndOrgUserRel(ue); + return result; + + } + /** + * create by: cjl + * description: + * 修改用户及机构和用户关系 + * create time: 2019/3/8 16:06 + * @Param: beanJson + * @return java.lang.Object + */ + @PostMapping("/updateUser") + @ResponseBody + public Object updateUser(@RequestParam("info") String beanJson,@RequestParam("id") Long id)throws Exception{ + JSONObject result = ExceptionConstants.standardSuccess(); + UserEx ue= JSON.parseObject(beanJson, UserEx.class); + ue.setId(id); + userService.updateUserAndOrgUserRel(ue); + return result; + } + @PostMapping("/deleteUser") + @ResponseBody + public Object deleteUser(@RequestParam("ids") String ids)throws Exception{ + JSONObject result = ExceptionConstants.standardSuccess(); + userService.batDeleteUser(ids); + return result; + } + @PostMapping("/batchDeleteUser") + @ResponseBody + public Object batchDeleteUser(@RequestParam("ids") String ids)throws Exception{ + JSONObject result = ExceptionConstants.standardSuccess(); + userService.batDeleteUser(ids); + return result; + } + } diff --git a/src/main/java/com/jsh/erp/datasource/entities/OrgaUserRelEx.java b/src/main/java/com/jsh/erp/datasource/entities/OrgaUserRelEx.java new file mode 100644 index 00000000..c6bdf8c6 --- /dev/null +++ b/src/main/java/com/jsh/erp/datasource/entities/OrgaUserRelEx.java @@ -0,0 +1,10 @@ +package com.jsh.erp.datasource.entities; + +/** + * Description + * + * @Author: cjl + * @Date: 2019/3/12 10:09 + */ +public class OrgaUserRelEx extends OrgaUserRel { +} diff --git a/src/main/java/com/jsh/erp/datasource/entities/UserEx.java b/src/main/java/com/jsh/erp/datasource/entities/UserEx.java new file mode 100644 index 00000000..6cd15893 --- /dev/null +++ b/src/main/java/com/jsh/erp/datasource/entities/UserEx.java @@ -0,0 +1,50 @@ +package com.jsh.erp.datasource.entities; + +/** + * Description + * + * @Author: cjl + * @Date: 2019/3/8 15:12 + */ +public class UserEx extends User{ + //机构简称 + private String orgAbr; + //机构id + private Long orgaId; + //用户在部门中排序 + private String userBlngOrgaDsplSeq; + //机构用户关联关系id + private Long orgaUserRelId; + + public String getOrgAbr() { + return orgAbr; + } + + public void setOrgAbr(String orgAbr) { + this.orgAbr = orgAbr; + } + + public Long getOrgaId() { + return orgaId; + } + + public void setOrgaId(Long orgaId) { + this.orgaId = orgaId; + } + + public String getUserBlngOrgaDsplSeq() { + return userBlngOrgaDsplSeq; + } + + public void setUserBlngOrgaDsplSeq(String userBlngOrgaDsplSeq) { + this.userBlngOrgaDsplSeq = userBlngOrgaDsplSeq; + } + + public Long getOrgaUserRelId() { + return orgaUserRelId; + } + + public void setOrgaUserRelId(Long orgaUserRelId) { + this.orgaUserRelId = orgaUserRelId; + } +} diff --git a/src/main/java/com/jsh/erp/datasource/mappers/OrgaUserRelMapperEx.java b/src/main/java/com/jsh/erp/datasource/mappers/OrgaUserRelMapperEx.java new file mode 100644 index 00000000..7a2017f7 --- /dev/null +++ b/src/main/java/com/jsh/erp/datasource/mappers/OrgaUserRelMapperEx.java @@ -0,0 +1,14 @@ +package com.jsh.erp.datasource.mappers; + +import com.jsh.erp.datasource.entities.OrgaUserRel; /** + * Description + * + * @Author: cjl + * @Date: 2019/3/12 9:13 + */ +public interface OrgaUserRelMapperEx { + + int addOrgaUserRel(OrgaUserRel orgaUserRel); + + int updateOrgaUserRel(OrgaUserRel orgaUserRel); +} diff --git a/src/main/java/com/jsh/erp/datasource/mappers/UserMapperEx.java b/src/main/java/com/jsh/erp/datasource/mappers/UserMapperEx.java index 167c098e..30ad71ee 100644 --- a/src/main/java/com/jsh/erp/datasource/mappers/UserMapperEx.java +++ b/src/main/java/com/jsh/erp/datasource/mappers/UserMapperEx.java @@ -1,10 +1,13 @@ package com.jsh.erp.datasource.mappers; import com.jsh.erp.datasource.entities.User; +import com.jsh.erp.datasource.entities.UserEx; import com.jsh.erp.datasource.entities.UserExample; import org.apache.ibatis.annotations.Param; +import java.util.Date; import java.util.List; +import java.util.Map; public interface UserMapperEx { @@ -17,4 +20,15 @@ public interface UserMapperEx { Long countsByUser( @Param("userName") String userName, @Param("loginName") String loginName); + + List getUserList(Map parameterMap); + + int addUser(UserEx ue); + + int updateUser(UserEx ue); + + List getUserListByUserNameOrLoginName(@Param("userName") String userName, + @Param("loginame") String loginame); + + int batDeleteOrUpdateUser(@Param("ids") String ids[], @Param("status") byte status); } \ No newline at end of file diff --git a/src/main/java/com/jsh/erp/service/orgaUserRel/OrgaUserRelComponent.java b/src/main/java/com/jsh/erp/service/orgaUserRel/OrgaUserRelComponent.java new file mode 100644 index 00000000..9ed17861 --- /dev/null +++ b/src/main/java/com/jsh/erp/service/orgaUserRel/OrgaUserRelComponent.java @@ -0,0 +1,65 @@ +package com.jsh.erp.service.orgaUserRel; + +import com.jsh.erp.service.ICommonQuery; +import com.jsh.erp.service.organization.OrganizationResource; +import com.jsh.erp.service.organization.OrganizationService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.List; +import java.util.Map; + +/** + * Description + * + * @Author: cjl + * @Date: 2019/3/11 18:10 + */ +@Service(value = "orgaUserRel_component") +@OrgaUserRelResource +public class OrgaUserRelComponent implements ICommonQuery { + @Resource + private OrgaUserRelService orgaUserRelService; + @Override + public Object selectOne(String condition) { + return null; + } + + @Override + public List select(Map parameterMap) { + return getOrgaUserRelList(parameterMap); + } + private List getOrgaUserRelList(Map map) { + return null; + } + @Override + public Long counts(Map parameterMap) { + return null; + } + + @Override + public int insert(String beanJson, HttpServletRequest request) { + return orgaUserRelService.insertOrgaUserRel(beanJson,request); + } + + @Override + public int update(String beanJson, Long id) { + return orgaUserRelService.updateOrgaUserRel(beanJson,id); + } + + @Override + public int delete(Long id) { + return orgaUserRelService.deleteOrgaUserRel(id); + } + + @Override + public int batchDelete(String ids) { + return orgaUserRelService.batchDeleteOrgaUserRel(ids); + } + + @Override + public int checkIsNameExist(Long id, String name) { + return 0; + } +} diff --git a/src/main/java/com/jsh/erp/service/orgaUserRel/OrgaUserRelResource.java b/src/main/java/com/jsh/erp/service/orgaUserRel/OrgaUserRelResource.java new file mode 100644 index 00000000..518f3e63 --- /dev/null +++ b/src/main/java/com/jsh/erp/service/orgaUserRel/OrgaUserRelResource.java @@ -0,0 +1,19 @@ +package com.jsh.erp.service.orgaUserRel; + +import com.jsh.erp.service.ResourceInfo; + +import java.lang.annotation.*; + +/** + * Description + * 机构用户关系 + * @Author: cjl + * @Date: 2019/3/11 18:11 + */ +@ResourceInfo(value = "orgaUserRel", type = 115) +@Inherited +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +public @interface OrgaUserRelResource { + +} diff --git a/src/main/java/com/jsh/erp/service/orgaUserRel/OrgaUserRelService.java b/src/main/java/com/jsh/erp/service/orgaUserRel/OrgaUserRelService.java new file mode 100644 index 00000000..bfc12e53 --- /dev/null +++ b/src/main/java/com/jsh/erp/service/orgaUserRel/OrgaUserRelService.java @@ -0,0 +1,119 @@ +package com.jsh.erp.service.orgaUserRel; + +import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.constants.BusinessConstants; +import com.jsh.erp.datasource.entities.*; +import com.jsh.erp.datasource.mappers.OrgaUserRelMapper; +import com.jsh.erp.datasource.mappers.OrgaUserRelMapperEx; +import com.jsh.erp.service.organization.OrganizationService; +import com.jsh.erp.service.user.UserService; +import com.jsh.erp.utils.StringUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.Date; +import java.util.List; + +/** + * Description + * + * @Author: cjl + * @Date: 2019/3/11 18:11 + */ +@Service +public class OrgaUserRelService { + private Logger logger = LoggerFactory.getLogger(OrganizationService.class); + + @Resource + private OrgaUserRelMapper orgaUserRelMapper; + @Resource + private OrgaUserRelMapperEx orgaUserRelMapperEx; + @Resource + private UserService userService; + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int insertOrgaUserRel(String beanJson, HttpServletRequest request) { + OrgaUserRel orgaUserRel = JSONObject.parseObject(beanJson, OrgaUserRel.class); + return orgaUserRelMapper.insertSelective(orgaUserRel); + } + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int updateOrgaUserRel(String beanJson, Long id) { + OrgaUserRel orgaUserRel = JSONObject.parseObject(beanJson, OrgaUserRel.class); + orgaUserRel.setId(id); + return orgaUserRelMapper.updateByPrimaryKeySelective(orgaUserRel); + } + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int deleteOrgaUserRel(Long id) { + return orgaUserRelMapper.deleteByPrimaryKey(id); + } + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public int batchDeleteOrgaUserRel(String ids) { + List idList = StringUtil.strToLongList(ids); + OrgaUserRelExample example = new OrgaUserRelExample(); + example.createCriteria().andIdIn(idList); + return orgaUserRelMapper.deleteByExample(example); + } + /** + * create by: cjl + * description: + * 新增机构用户关联关系,反显id + * create time: 2019/3/12 9:40 + * @Param: orgaUserRel + * @return void + */ + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public OrgaUserRel addOrgaUserRel(OrgaUserRel orgaUserRel) throws Exception{ + Date date = new Date(); + User userInfo=userService.getCurrentUser(); + //创建时间 + if(orgaUserRel.getCreateTime()==null){ + orgaUserRel.setCreateTime(date); + } + //创建人 + if(orgaUserRel.getCreator()==null){ + orgaUserRel.setCreator(userInfo==null?null:userInfo.getId()); + } + //更新时间 + if(orgaUserRel.getUpdateTime()==null){ + orgaUserRel.setUpdateTime(date); + } + //更新人 + if(orgaUserRel.getUpdater()==null){ + orgaUserRel.setUpdater(userInfo==null?null:userInfo.getId()); + } + orgaUserRel.setDeleteFlag(BusinessConstants.DELETE_FLAG_EXISTS); + int i=orgaUserRelMapperEx.addOrgaUserRel(orgaUserRel); + if(i>0){ + return orgaUserRel; + } + return null; + } + /** + * create by: cjl + * description: + * 更新机构用户关联关系 + * create time: 2019/3/12 9:40 + * @Param: orgaUserRel + * @return void + */ + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public OrgaUserRel updateOrgaUserRel(OrgaUserRel orgaUserRel) { + User userInfo=userService.getCurrentUser(); + //更新时间 + if(orgaUserRel.getUpdateTime()==null){ + orgaUserRel.setUpdateTime(new Date()); + } + //更新人 + if(orgaUserRel.getUpdater()==null){ + orgaUserRel.setUpdater(userInfo==null?null:userInfo.getId()); + } + int i= orgaUserRelMapperEx.updateOrgaUserRel(orgaUserRel); + if(i>0){ + return orgaUserRel; + } + return null; + } +} diff --git a/src/main/java/com/jsh/erp/service/user/UserService.java b/src/main/java/com/jsh/erp/service/user/UserService.java index a2a3855b..4464a9d3 100644 --- a/src/main/java/com/jsh/erp/service/user/UserService.java +++ b/src/main/java/com/jsh/erp/service/user/UserService.java @@ -1,14 +1,24 @@ package com.jsh.erp.service.user; -import com.alibaba.fastjson.JSONArray; +import com.alibaba.druid.util.StringUtils; import com.alibaba.fastjson.JSONObject; +import com.jsh.erp.constants.BusinessConstants; +import com.jsh.erp.constants.ExceptionConstants; +import com.jsh.erp.datasource.entities.OrgaUserRel; import com.jsh.erp.datasource.entities.User; +import com.jsh.erp.datasource.entities.UserEx; import com.jsh.erp.datasource.entities.UserExample; import com.jsh.erp.datasource.mappers.UserMapper; import com.jsh.erp.datasource.mappers.UserMapperEx; -import com.jsh.erp.utils.*; +import com.jsh.erp.exception.BusinessRunTimeException; +import com.jsh.erp.service.orgaUserRel.OrgaUserRelService; +import com.jsh.erp.utils.ExceptionCodeConstants; +import com.jsh.erp.utils.JshException; +import com.jsh.erp.utils.StringUtil; +import com.jsh.erp.utils.Tools; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.context.request.RequestContextHolder; @@ -17,6 +27,7 @@ import org.springframework.web.context.request.ServletRequestAttributes; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.security.NoSuchAlgorithmException; +import java.util.Date; import java.util.List; import java.util.Map; import java.util.Objects; @@ -29,6 +40,8 @@ public class UserService { @Resource private UserMapperEx userMapperEx; + @Resource + private OrgaUserRelService orgaUserRelService; public User getUser(long id) { return userMapper.selectByPrimaryKey(id); @@ -187,4 +200,202 @@ public class UserService { HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest(); return (User)request.getSession().getAttribute("user"); } + + public List getUserList(Map parameterMap) throws Exception{ + return userMapperEx.getUserList(parameterMap); + } + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public void addUserAndOrgUserRel(UserEx ue) throws Exception{ + //检查用户名和登录名 + checkUserNameAndLoginName(ue); + //新增用户信息 + ue= this.addUser(ue); + if(ue==null){ + logger.error("异常码[{}],异常提示[{}],参数,[{}]", + ExceptionConstants.USER_ADD_FAILED_CODE,ExceptionConstants.USER_ADD_FAILED_MSG); + throw new BusinessRunTimeException(ExceptionConstants.USER_ADD_FAILED_CODE, + ExceptionConstants.USER_ADD_FAILED_MSG); + } + if(ue.getOrgaId()==null){ + //如果没有选择机构,就不建机构和用户的关联关系 + return; + } + //新增用户和机构关联关系 + OrgaUserRel oul=new OrgaUserRel(); + //机构id + oul.setOrgaId(ue.getOrgaId()); + //用户id + oul.setUserId(ue.getId()); + //用户在机构中的排序 + oul.setUserBlngOrgaDsplSeq(ue.getUserBlngOrgaDsplSeq()); + + oul=orgaUserRelService.addOrgaUserRel(oul); + if(oul==null){ + logger.error("异常码[{}],异常提示[{}],参数,[{}]", + ExceptionConstants.ORGA_USER_REL_ADD_FAILED_CODE,ExceptionConstants.ORGA_USER_REL_ADD_FAILED_MSG); + throw new BusinessRunTimeException(ExceptionConstants.ORGA_USER_REL_ADD_FAILED_CODE, + ExceptionConstants.ORGA_USER_REL_ADD_FAILED_MSG); + } + } + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public UserEx addUser(UserEx ue) throws Exception{ + /** + * 新增用户默认设置 + * 1、密码默认123456 + * 2是否系统自带默认为非系统自带 + * 3是否管理者默认为员工 + * 4默认用户状态为正常 + * */ + ue.setPassword(Tools.md5Encryp(BusinessConstants.USER_DEFAULT_PASSWORD)); + ue.setIsystem(BusinessConstants.USER_NOT_SYSTEM); + if(ue.getIsmanager()==null){ + ue.setIsmanager(BusinessConstants.USER_NOT_MANAGER); + } + ue.setStatus(BusinessConstants.USER_STATUS_NORMAL); + int i=userMapperEx.addUser(ue); + if(i>0){ + return ue; + } + return null; + } + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public void updateUserAndOrgUserRel(UserEx ue) throws Exception{ + //检查用户名和登录名 + checkUserNameAndLoginName(ue); + //更新用户信息 + ue=this.updateUser(ue); + if(ue==null){ + logger.error("异常码[{}],异常提示[{}],参数,[{}]", + ExceptionConstants.USER_EDIT_FAILED_CODE,ExceptionConstants.USER_EDIT_FAILED_MSG); + throw new BusinessRunTimeException(ExceptionConstants.USER_EDIT_FAILED_CODE, + ExceptionConstants.USER_EDIT_FAILED_MSG); + } + if(ue.getOrgaId()==null){ + //如果没有选择机构,就不建机构和用户的关联关系 + return; + } + //更新用户和机构关联关系 + OrgaUserRel oul=new OrgaUserRel(); + //机构和用户关联关系id + oul.setId(ue.getOrgaUserRelId()); + //机构id + oul.setOrgaId(ue.getOrgaId()); + //用户id + oul.setUserId(ue.getId()); + //用户在机构中的排序 + oul.setUserBlngOrgaDsplSeq(ue.getUserBlngOrgaDsplSeq()); + if(oul.getId()!=null){ + //已存在机构和用户的关联关系,更新 + oul=orgaUserRelService.updateOrgaUserRel(oul); + }else{ + //不存在机构和用户的关联关系,新建 + oul=orgaUserRelService.addOrgaUserRel(oul); + } + if(oul==null){ + logger.error("异常码[{}],异常提示[{}],参数,[{}]", + ExceptionConstants.ORGA_USER_REL_EDIT_FAILED_CODE,ExceptionConstants.ORGA_USER_REL_EDIT_FAILED_MSG); + throw new BusinessRunTimeException(ExceptionConstants.ORGA_USER_REL_EDIT_FAILED_CODE, + ExceptionConstants.ORGA_USER_REL_EDIT_FAILED_MSG); + } + + } + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public UserEx updateUser(UserEx ue){ + int i=userMapperEx.updateUser(ue); + if(i>0){ + return ue; + } + return null; + } + /** + * create by: cjl + * description: + * 检查用户名称和登录名不能重复 + * create time: 2019/3/12 11:36 + * @Param: userEx + * @return void + */ + public void checkUserNameAndLoginName(UserEx userEx){ + List list=null; + if(userEx==null){ + return; + } + Long userId=userEx.getId(); + //检查登录名 + if(!StringUtils.isEmpty(userEx.getLoginame())){ + String loginName=userEx.getLoginame(); + list=this.getUserListByloginName(loginName); + if(list!=null&&list.size()>0){ + if(list.size()>1){ + //超过一条数据存在,该登录名已存在 + logger.error("异常码[{}],异常提示[{}],参数,loginName:[{}]", + ExceptionConstants.USER_LOGIN_NAME_ALREADY_EXISTS_CODE,ExceptionConstants.USER_LOGIN_NAME_ALREADY_EXISTS_MSG,loginName); + throw new BusinessRunTimeException(ExceptionConstants.USER_LOGIN_NAME_ALREADY_EXISTS_CODE, + ExceptionConstants.USER_LOGIN_NAME_ALREADY_EXISTS_MSG); + } + //一条数据,新增时抛出异常,修改时和当前的id不同时抛出异常 + if(list.size()==1){ + if(userId==null||(userId!=null&&!userId.equals(list.get(0).getId()))){ + logger.error("异常码[{}],异常提示[{}],参数,loginName:[{}]", + ExceptionConstants.USER_LOGIN_NAME_ALREADY_EXISTS_CODE,ExceptionConstants.USER_LOGIN_NAME_ALREADY_EXISTS_MSG,loginName); + throw new BusinessRunTimeException(ExceptionConstants.USER_LOGIN_NAME_ALREADY_EXISTS_CODE, + ExceptionConstants.USER_LOGIN_NAME_ALREADY_EXISTS_MSG); + } + } + + } + } + //检查用户名 + if(!StringUtils.isEmpty(userEx.getUsername())){ + String userName=userEx.getUsername(); + list=this.getUserListByUserName(userName); + if(list!=null&&list.size()>0){ + if(list.size()>1){ + //超过一条数据存在,该用户名已存在 + logger.error("异常码[{}],异常提示[{}],参数,userName:[{}]", + ExceptionConstants.USER_USER_NAME_ALREADY_EXISTS_CODE,ExceptionConstants.USER_USER_NAME_ALREADY_EXISTS_MSG,userName); + throw new BusinessRunTimeException(ExceptionConstants.USER_USER_NAME_ALREADY_EXISTS_CODE, + ExceptionConstants.USER_USER_NAME_ALREADY_EXISTS_MSG); + } + //一条数据,新增时抛出异常,修改时和当前的id不同时抛出异常 + if(list.size()==1){ + if(userId==null||(userId!=null&&!userId.equals(list.get(0).getId()))){ + logger.error("异常码[{}],异常提示[{}],参数,userName:[{}]", + ExceptionConstants.USER_USER_NAME_ALREADY_EXISTS_CODE,ExceptionConstants.USER_USER_NAME_ALREADY_EXISTS_MSG,userName); + throw new BusinessRunTimeException(ExceptionConstants.USER_USER_NAME_ALREADY_EXISTS_CODE, + ExceptionConstants.USER_USER_NAME_ALREADY_EXISTS_MSG); + } + } + + } + } + + } + /** + * 通过用户名获取用户列表 + * */ + public List getUserListByUserName(String userName){ + return userMapperEx.getUserListByUserNameOrLoginName(userName,null); + } + /** + * 通过登录名获取用户列表 + * */ + public List getUserListByloginName(String loginName){ + return userMapperEx.getUserListByUserNameOrLoginName(null,loginName); + } + /** + * 批量删除用户 + * */ + @Transactional(value = "transactionManager", rollbackFor = Exception.class) + public void batDeleteUser(String ids) { + String idsArray[]=ids.split(","); + int i= userMapperEx.batDeleteOrUpdateUser(idsArray,BusinessConstants.USER_STATUS_DELETE); + if(i<1){ + logger.error("异常码[{}],异常提示[{}],参数,ids:[{}]", + ExceptionConstants.USER_DELETE_FAILED_CODE,ExceptionConstants.USER_DELETE_FAILED_MSG,ids); + throw new BusinessRunTimeException(ExceptionConstants.USER_DELETE_FAILED_CODE, + ExceptionConstants.USER_DELETE_FAILED_MSG); + } + } + } diff --git a/src/main/resources/mapper_xml/OrgaUserRelMapperEx.xml b/src/main/resources/mapper_xml/OrgaUserRelMapperEx.xml new file mode 100644 index 00000000..1a18a41a --- /dev/null +++ b/src/main/resources/mapper_xml/OrgaUserRelMapperEx.xml @@ -0,0 +1,44 @@ + + + + + + + insert into jsh_orga_user_rel (orga_id, user_id, + user_blng_orga_dspl_seq, delete_flag, create_time, + creator, update_time, updater + ) + values (#{orgaId,jdbcType=BIGINT}, #{userId,jdbcType=BIGINT}, + #{userBlngOrgaDsplSeq,jdbcType=VARCHAR}, #{deleteFlag,jdbcType=CHAR}, #{createTime,jdbcType=TIMESTAMP}, + #{creator,jdbcType=BIGINT}, #{updateTime,jdbcType=TIMESTAMP}, #{updater,jdbcType=BIGINT} + ) + + + update jsh_orga_user_rel + + + orga_id = #{orgaId}, + + + user_id = #{userId}, + + + user_blng_orga_dspl_seq = #{userBlngOrgaDsplSeq}, + + + delete_flag = #{deleteFlag}, + + + update_time = #{updateTime}, + + + updater = #{updater}, + + + where 1=1 + and id=#{id} + + + + \ No newline at end of file diff --git a/src/main/resources/mapper_xml/UserMapperEx.xml b/src/main/resources/mapper_xml/UserMapperEx.xml index b567f93d..201541c3 100644 --- a/src/main/resources/mapper_xml/UserMapperEx.xml +++ b/src/main/resources/mapper_xml/UserMapperEx.xml @@ -1,10 +1,17 @@ + + + + + + + + + insert into jsh_user (username, loginame, + password, position, + email, phonenum, ismanager, + isystem, status, description, + remark) + values (#{username,jdbcType=VARCHAR}, #{loginame,jdbcType=VARCHAR}, + #{password,jdbcType=VARCHAR}, #{position,jdbcType=VARCHAR}, + #{email,jdbcType=VARCHAR}, #{phonenum,jdbcType=VARCHAR}, #{ismanager,jdbcType=TINYINT}, + #{isystem,jdbcType=TINYINT}, #{status,jdbcType=TINYINT}, #{description,jdbcType=VARCHAR}, + #{remark,jdbcType=VARCHAR}) + + + update jsh_user + + + username = #{username,jdbcType=VARCHAR}, + + + loginame = #{loginame,jdbcType=VARCHAR}, + + + password = #{password,jdbcType=VARCHAR}, + + + position = #{position,jdbcType=VARCHAR}, + + + department = #{department,jdbcType=VARCHAR}, + + + email = #{email,jdbcType=VARCHAR}, + + + phonenum = #{phonenum,jdbcType=VARCHAR}, + + + ismanager = #{ismanager,jdbcType=TINYINT}, + + + isystem = #{isystem,jdbcType=TINYINT}, + + + status = #{status,jdbcType=TINYINT}, + + + description = #{description,jdbcType=VARCHAR}, + + + remark = #{remark,jdbcType=VARCHAR}, + + + where id = #{id,jdbcType=BIGINT} + + + + update jsh_user + set status=#{status} + where id in ( + + #{id} + + ) + \ No newline at end of file