From 310b786193ce51cd32ae9828d3937d531ca9d806 Mon Sep 17 00:00:00 2001 From: zhouhaibin Date: Thu, 25 Jul 2024 09:22:37 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=A1=B9=E7=9B=AE=E5=90=88?= =?UTF-8?q?=E5=B9=B6=E5=92=8C=E6=8B=86=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../HuzhouMergesplitinfoController.java | 28 ++-- .../huzhou/entity/HuzhouMergesplitinfo.java | 1 - .../service/HuzhouMergesplitinfoService.java | 10 ++ .../impl/HuzhouMergesplitinfoServiceImpl.java | 135 +++++++++++++++--- .../excelTemplate/项目计划模板.xlsx | Bin 16482 -> 16270 bytes 5 files changed, 147 insertions(+), 27 deletions(-) diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/HuzhouMergesplitinfoController.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/HuzhouMergesplitinfoController.java index 78d7061..6b61140 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/HuzhouMergesplitinfoController.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/HuzhouMergesplitinfoController.java @@ -54,21 +54,29 @@ public class HuzhouMergesplitinfoController { public void approvalMergeProject(@RequestParam(value = "file",required = false) MultipartFile[] file, String taskId, String flag, - String fieldChangeGroupid, - String comment, - String isEdit, - HuzhouProjectinfo newProjectinfo) throws Exception { -// huzhouMergesplitinfoService.approvalMergeProject(file,taskId,flag,fieldChangeGroupid,comment,isEdit,newProjectinfo); + String projectid, + String comment + ) throws Exception { + huzhouMergesplitinfoService.approvalMergeProject(file,taskId,flag,projectid,comment); } @PostMapping("/approvalSplitProject") public void approvalSplitProject(@RequestParam(value = "file",required = false) MultipartFile[] file, String taskId, String flag, - String fieldChangeGroupid, - String comment, - String isEdit, - HuzhouProjectinfo newProjectinfo) throws Exception { -// huzhouMergesplitinfoService.approvalSplitProject(file,taskId,flag,fieldChangeGroupid,comment,isEdit,newProjectinfo); + String projectid, + String comment + ) throws Exception { + huzhouMergesplitinfoService.approvalSplitProject(file,taskId,flag,projectid,comment); + } + @GetMapping("/getFromDataFromMerge") + public List getFromDataFromMerge(@RequestParam("projectid") String projectid){ + List result = huzhouMergesplitinfoService.getFromDataFromMerge(projectid); + return result; + } + @GetMapping("/getFromDataFromSplit") + public List getFromDataFromSplit(@RequestParam("projectid") String projectid){ + List result = huzhouMergesplitinfoService.getFromDataFromSplit(projectid); + return result; } } diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/HuzhouMergesplitinfo.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/HuzhouMergesplitinfo.java index 514e640..52f4246 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/HuzhouMergesplitinfo.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/HuzhouMergesplitinfo.java @@ -1,6 +1,5 @@ package com.easy.admin.modules.huzhou.entity; -import com.easy.admin.modules.huzhou.entity.BaseEntity; import lombok.Data; import java.math.BigDecimal; diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/HuzhouMergesplitinfoService.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/HuzhouMergesplitinfoService.java index 2582025..72ea17e 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/HuzhouMergesplitinfoService.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/HuzhouMergesplitinfoService.java @@ -3,7 +3,9 @@ package com.easy.admin.modules.huzhou.service; import com.baomidou.mybatisplus.extension.service.IService; import com.easy.admin.modules.huzhou.entity.HuzhouMergesplitinfo; +import com.easy.admin.modules.huzhou.entity.HuzhouProjectinfo; import com.easy.admin.modules.huzhou.vo.HuzhouMergesplitinfoVo; +import org.springframework.web.multipart.MultipartFile; import java.util.List; @@ -23,4 +25,12 @@ public interface HuzhouMergesplitinfoService extends IService getSplitDetailList(String projectid); void submitSplitProject(List mergesplitinfoVoList); + + void approvalMergeProject(MultipartFile[] files, String taskId, String flag, String projectid, String comment); + + void approvalSplitProject(MultipartFile[] files, String taskId, String flag, String projectid, String comment); + + List getFromDataFromMerge(String projectid); + + List getFromDataFromSplit(String projectid); } diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouMergesplitinfoServiceImpl.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouMergesplitinfoServiceImpl.java index ddad853..67978ef 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouMergesplitinfoServiceImpl.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouMergesplitinfoServiceImpl.java @@ -2,23 +2,21 @@ package com.easy.admin.modules.huzhou.service.impl; import cn.hutool.core.util.IdUtil; +import com.alibaba.excel.util.StringUtils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.easy.admin.auth.service.SysUserService; import com.easy.admin.common.core.exception.EasyException; import com.easy.admin.modules.huzhou.dao.HuzhouMergesplitinfoMapper; -import com.easy.admin.modules.huzhou.entity.HuzhouMergesplitinfo; -import com.easy.admin.modules.huzhou.entity.HuzhouProjectinfo; -import com.easy.admin.modules.huzhou.entity.WorkFlow; -import com.easy.admin.modules.huzhou.service.HuzhouMergesplitinfoService; -import com.easy.admin.modules.huzhou.service.IHuzhouProjectinfoService; -import com.easy.admin.modules.huzhou.service.IHuzhouUserprojectService; -import com.easy.admin.modules.huzhou.service.IWorkflowService; +import com.easy.admin.modules.huzhou.entity.*; +import com.easy.admin.modules.huzhou.service.*; import com.easy.admin.modules.huzhou.vo.HuzhouMergesplitinfoVo; import com.easy.admin.sys.model.SysDict; import com.easy.admin.sys.service.SysDictService; import org.activiti.engine.RuntimeService; import org.activiti.engine.TaskService; +import org.activiti.engine.runtime.ProcessInstance; import org.activiti.engine.task.Task; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -27,12 +25,10 @@ import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.PageRequest; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; /** * (HuzhouMergesplitinfo)表服务实现类 @@ -59,6 +55,8 @@ public class HuzhouMergesplitinfoServiceImpl extends ServiceImpl variables = new HashMap<>(); variables.put("taskLeadingDepartment",strings); runtimeService.setVariable(processInstanceId, "taskLeadingDepartment", strings);//设置第三个人变量信息 + taskService.setVariableLocal(taskId,"approvalStatue","1");//添加审批状态 通过 + String comment = "同意"; + taskService.addComment(taskId,processInstanceId,comment);//添加审批意见 taskService.complete(taskId, variables); } @@ -126,7 +127,19 @@ public class HuzhouMergesplitinfoServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(HuzhouMergesplitinfo::getProjectId, projectid); queryWrapper.eq(HuzhouMergesplitinfo::getMergeOrSplit, "split"); - return mergesplitinfoMapper.selectList(queryWrapper); + List huzhouMergesplitinfos = mergesplitinfoMapper.selectList(queryWrapper); + if(huzhouMergesplitinfos==null||huzhouMergesplitinfos.size()==0){ + ArrayList huzhouProjectinfos = new ArrayList<>(); + LambdaQueryWrapper queryWrapper1 = new LambdaQueryWrapper<>(); + queryWrapper1.eq(HuzhouMergesplitinfo::getId, projectid); + queryWrapper1.eq(HuzhouMergesplitinfo::getMergeOrSplit, "split"); + huzhouMergesplitinfos = mergesplitinfoMapper.selectList(queryWrapper1); + huzhouProjectinfos.add(huzhouMergesplitinfos.get(0)); + return huzhouProjectinfos; + }else{ + return huzhouMergesplitinfos; + } + } @Override @@ -155,7 +168,7 @@ public class HuzhouMergesplitinfoServiceImpl extends ServiceImpl variables = new HashMap<>(); variables.put("taskLeadingDepartment",strings); runtimeService.setVariable(processInstanceId, "taskLeadingDepartment", strings);//设置第三个人变量信息 + taskService.setVariableLocal(taskId,"approvalStatue","1");//添加审批状态 通过 + String comment = "同意"; + taskService.addComment(taskId,processInstanceId,comment);//添加审批意见 taskService.complete(taskId, variables); } + + @Override + public void approvalMergeProject(MultipartFile[] files, String taskId, String flag, String projectid, String comment) { + WorkFlow workFlow = workflowService.approveProjectInfo(taskId, flag, comment); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(HuzhouProcessinfo::getProjectid,projectid); + queryWrapper.eq(HuzhouProcessinfo::getProcessstatus,"1"); + List processinfos = processinfoService.list(queryWrapper); + String processName = processinfos.get(0).getProcessName(); + if("3".equals(flag)){ + processinfoService.modifyStatusByProjectId(projectid,"0",processName); + return ; + } + ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(workFlow.getProcessInstanceId()).singleResult(); + if(processInstance==null&&"1".equals(flag)){ + //将新项目状态变成0,可见 + HuzhouProjectinfo newpj = projectinfoService.getById(projectid); + newpj.setStage("0"); + projectinfoService.updateById(newpj); + //查询要合并的项目,将项目状态进行变更 + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(HuzhouMergesplitinfo::getProjectId,projectid); + lambdaQueryWrapper.eq(HuzhouMergesplitinfo::getMergeOrSplit,"merge"); + List mergesplitinfos = mergesplitinfoMapper.selectList(lambdaQueryWrapper); + for (HuzhouMergesplitinfo mergesplitinfo : mergesplitinfos) { + HuzhouProjectinfo oldpj = projectinfoService.getById(mergesplitinfo.getId()); + oldpj.setStage("0.1"); + projectinfoService.updateById(oldpj); + } + processinfoService.modifyStatusByProjectId(projectid,"2",processName); + } + } + + @Override + public void approvalSplitProject(MultipartFile[] file, String taskId, String flag, String oldprojectid, String comment) { + WorkFlow workFlow = workflowService.approveProjectInfo(taskId, flag, comment); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(HuzhouProcessinfo::getProjectid,oldprojectid); + queryWrapper.eq(HuzhouProcessinfo::getProcessstatus,"1"); + List processinfos = processinfoService.list(queryWrapper); + String processName = processinfos.get(0).getProcessName(); + if("3".equals(flag)){ + processinfoService.modifyStatusByProjectId(oldprojectid,"0",processName); + return ; + } + ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(workFlow.getProcessInstanceId()).singleResult(); + if(processInstance==null&&"1".equals(flag)){ + //将旧项目状态变成已停止0.1,可见 + HuzhouProjectinfo oldpj = projectinfoService.getById(oldprojectid); + oldpj.setStage("0.1"); + projectinfoService.updateById(oldpj); + //查询项目拆分后,新项目的id,改变其状态 + //新项目id在HuzhouMergesplitinfo projectid字段中 + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(HuzhouMergesplitinfo::getId,oldprojectid); + lambdaQueryWrapper.eq(HuzhouMergesplitinfo::getMergeOrSplit,"split"); + List list = mergesplitinfoMapper.selectList(lambdaQueryWrapper); + for (HuzhouMergesplitinfo mergesplitinfo : list) { + HuzhouProjectinfo newpj = projectinfoService.getById(mergesplitinfo.getProjectId()); + newpj.setStage("0"); + projectinfoService.updateById(newpj); + } + processinfoService.modifyStatusByProjectId(oldprojectid,"2",processName); + } + } + + @Override + public List getFromDataFromMerge(String projectid) { + ArrayList huzhouProjectinfos = new ArrayList<>(); + HuzhouProjectinfo projectinfo = projectinfoService.getById(projectid); + huzhouProjectinfos.add(projectinfo); + return huzhouProjectinfos; + } + + @Override + public List getFromDataFromSplit(String projectid) { + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(HuzhouMergesplitinfo::getId,projectid); + lambdaQueryWrapper.eq(HuzhouMergesplitinfo::getMergeOrSplit,"split"); + List mergesplitinfos = mergesplitinfoMapper.selectList(lambdaQueryWrapper); + ArrayList huzhouProjectinfos = new ArrayList<>(); + for (HuzhouMergesplitinfo mergesplitinfo : mergesplitinfos) { + HuzhouProjectinfo projectinfo = projectinfoService.getById(mergesplitinfo.getProjectId()); + huzhouProjectinfos.add(projectinfo); + } + return huzhouProjectinfos; + } } diff --git a/huzhou/src/main/resources/excelTemplate/项目计划模板.xlsx b/huzhou/src/main/resources/excelTemplate/项目计划模板.xlsx index 5e2f2dd43fbb12d60e0e6016b27d09032c99b7fc..75aa942be759a34f11fa6279a7dd4025ec9f71c4 100644 GIT binary patch delta 9858 zcmcJVWl&vDm+orja;KaF}SJ>G^ zLsvloK+wt1-FTMRbZun?8CL-135{{F+z27m==OG4$?9<5fKe$WIi7T8&c&`&LiGA9 z?g5!pk9Vw&5007D6i_c^7oV=#Oxr10++gHbw;GdEV_@$q)lUyiEm3Ak_p>oT!yd`0 zmp;K0`-qK_Kd!GLLp3MNVTDR(C(n>!T3S={wn=Oig%iA4#hH+?%P2YWx_?_0v&zx$ zkkXjMC|Munjo|!`7w~KF_uQd9zg$9#6RO=wFilR|mf`Ihd4adRK)g!)ob-fKznLh* z0MSKOC8)NBAPj84|Joe;xQF}Ji4SYWp>0#@cV6^PtyAMg*n{x!o}YqoLfTJ{)M^#$ z_ID}DiG)n{n+F~B+n8^^Z2Zcq7%s3O&oSuen3WX7g?d7W>w}k*c$DO%7{s?Dkg7OT zpNtHe=c8Cq2>?gii;gUGjAle41Rpboj|w(FSW+sXaU*jwE(REn90@-!j*nbgsDZph zB`?dIaXWL#^pKcr3j2q^?+5mbo0Y6}EX&=F_|p!`*%>y3S?@KtJa2=)ST(+WL=97_ zL9mma5E*FS9e_uA3ZHAd(80jYOZsZ*x{2Ht*$FS2Y7OX9OIci+bWs(V<6)f+Mjyga zBswq1;~{;*7m=|-Rtskr3qmxB4k7i>8ulDQj@UoIVF=pV3+H=4mp2(ry}L6l{yCs= zUR)^QUo56;e3COM=QaMKc_s@J$`G(|fC4r8qHoH%*o*mYkjQRVge2P2-&E5(Gqlgw zj9!=is}}I?<~B>t+*T8bS_a#ZBokM~;f^h1cFbUMHau?PXu$L&$oKB*PU7+YXRj&s z>e|CK&TYFxAL~4s@>gxW*kU9$Qfd~8iJD2UXCZE_=ZArIW!yKPA0Eop?Urzxj^4?4 zJ-i&+)Gn;7?t)=34(p@=m>%imr?15@8jv%Wgor3bATK$vVru^AD5*Lq?3oTZw|QFI zT8F2G{bnF;EXR;WzyZx*J`|zC!C8Uf;K<-$t`K6F1Oyq#fh{FwbK^yxu>GM-KIs)^ zFG$vHUecx4eeS0}SgO>AzHH8&h6Y|GVl$-B>Dtj-P&j?QdCD|*1GWkrn&p?Y1TAMC^=_0&zHHMDk%Fn!VMO9&F z?VcT`XgVwzn;KpdR*%gH1T@=6d^4f=Uc2Q6}o7jIqx~NeEu!N&07t38`LT^I^ zusd;rOd{5~kh0xvhJGB8P8YlOi}5*kkytqHv8`Vh$m&;VhQ`?VFB0m(w`zU)Ak>Ir zysAI{=Pl8Vl|)3{6pMX?PeKshs5B7A5f_Oc~D*;Y>`m;kBGq@)7Y%E)-H(Cz=B9 zj{EvWZEcQ-lTC?1HsX!8{rPjo`KIdS!^f_|PILLsdj>>MDN8IDpj;ilHC?OP-v6^Z zJiNaWbT2rHJK)0gnXcQzqunW3HNalanW=)Z5nU)7te_)iI6EulVfyFm!r#b9Vaa={i7kuX^TV8BE}% zfYMH>j^vbDihnFY>P{@ib9?dJY=!LuEAf@S{94u(f8QC?tQ3#<`BObC;jZ@L>c!!N z$WS9!2(u`7k`qLU7`X>TM!Z|Je?0ybyVljg)X!9D92(~-_sDGtW+D&cHw4q}$FDXS zHxV*qe5{|a6VVEzd)w&YTwq_G{kn`~6&jpE0j4E}1Gj`C)pTaR_YAda>iDp=s&ubk z+zm(|4Yih+B#M-FbXi$U+_KEi_bc7svUuXXFM0jNPYKLUl#v1~R;O%PtV%JF=)gsl z!jdu8o3;s{A%Cq%&=t|4k}xEtZmD(`Dgkd*_6mC60yhFJ1-s;TuU=E`GE%;`ny~Q) zpB`i&$CkJtLrmS8OD%gk-C1AXg+5Y4R`u6?; z-_s!s3$B<%k^N!r5qSsAJ~R^iYtKVOvvvs4k|x1&CbJxWAR=*PMq1O`(s0a;A638>n|c#=Z)dtQ@&Ff<={?fWD9U ze#OuCHw)2RD*>^3Sm8?b5+<$BIf7>YM2>Vuoh(IW_lnv+#QTVsf5{pBgEpo@FR4AT zUD$S9yhA*?u;sf9vlpo^^Wz&OsaX+z{OR;nA=u{2$i@1WTddpQl=l_OOQTS77_RT0 zmaV|5dH&yYxIlzQ&yVC>yU1+oo|!^O@0$}kL){Y zyMIERO8rJ+KF7Ry+TEg{6MWVu+?Rg&e^*#WhRP})bDnv8OdxdlqMzF0!=?^&{hE+( z1Q|a|&47*jF>TzxMIacP=NMA*GZiezFU6Jf#-5) zK(wh00zxC-OA4)7*)|wyqx9#WNu3-MTz9|cFpHw-AW4H8C@9!qjHVH@|1d#zf&Of3 zg?qHO9K4hwfbI2Al!rt&6DRgK`TzFLjrbGu|eLtgMnTB zKK2pgUZIgbfk;vfjGxV+FC@;%}ibpa*BnPF zw)G{x^sS@qNEGL^o3B-{6OqzJJ-!C?K_{v{UD(p+bqj`yIR5;32N!NkeuC1|=vgAJ zwXnXPJipmo;Dbe&6y@*9^0{l_*};d<$UByVN0pQwG;OLBfwMaZhk?a8Li)iH*F%KzNB4zEK?x2`VI}uJ~w!X4qytBNv@(qwep1S$nAD8qQwxLDDXx{{=yQSQ*`@xKLL4 z(auEkyR;|siahV_TJGL+QQoLbuOE~O-9eKQQKT2EJdLXVVlNJ*aG;{uGj?4W{tLS= zU|?brKyxv@s_NIx>`SKCAD;oM+Mv7EWr;ek*rr4pg6ecWDuK#%oTP=Mu0m0}NU*^z z5ARr6<=eqAdF662goWIn`iV}uxkeUjGx2bCl-(z_pKDLn2#;r=UDUr=8%-xe!4!k8 zJ7Dm-GX34RujQ-qWz+FGk6@M}hQxD4g4H5kpm3svTgTYrJ2du~(ea49D3gZdB0JK@ zra2m#>2jVJ5ppU?(h}6Z0Uz%Q-!>dY0ow;bU8ME&TrZEI+<;tn z32$&x|J>{P+>Q!gB(-+y3wl_iVk7t%<2qE?1dOh(06jx^Wr{wmkn!q0=Vd4BWPa-x zfXVD5#immHimTg$+^}3<;aAQo$;Nis6W3FSs%DeXHOg(zLXS}=D%6Ww-oacN0k-5(4a zNmah@Z2{CJ9|G@yS*bpU2GUEZnEcKL0J{|z764IoZ`#6baP_~?2nD|`SM;?PQAgbAa93$Cp|WG?;kJZu==D*QM>x8W+ue<~BcIuHJn zEkmPgU zogOx`9SmRSt~-Y_vyzF)c!yb_tki%`6B>?A3{1{wn~xixA} zGoD^35G$tl`3i$dyPvBcYNRauqxLK^2}K8%p#w^QBu#T~)1>@dd_I_R%9HWg_k(uB zSj#qUsc?p3n8Pn*BrW$?`mo@UpEBQ|6M-T{rDHelZdq~hc3h7d{<$*II?SIzRa7EekdWX`G12blN`- z%BlfX=pOireK9}r=!g|a6f$Onc+e=MPID<6UK1h^RG_b*lW~_y7`~zNz(>MrSQHLN z!gA=?MZ;DgM;n0`O+|Pd#h^@mp=0^V$KiwbHty~pMHqYU_8xMit#Hq#l79ps zkC)M@Xe+|CEkcOm^xmUGcT?QRto19B?bYijud-s0FtH!AoDD@}qE=gs8l+Mbr;h$W!W4MZC>C)oqPsV?aR>gu zpE^DyB%Dwq-S)n6-Vz9P{7&cu>(=oAM(iPhdPH+V3$*3&}|eK z**v>940E@$ba$%uYqe??UPj$5)-_{f1Q}VJ3Z!;pA!v_ICs6HNzX2Op^D<1cOWT&W znpV1!pkoa?BJe8uBip2$qnQSz0Mo_FO?`qWDdvGj^^P)g}2TUeV0h4gEs{W&K4?$?a{}8x{WN6uc z74E!QIW0U}M)5#Wc4KB2817Y(ld!zFee$3ISnNVza9j8%In8px2eCQchlZ zpI;K4Dl|r~<;7}d2-7}?kkWaMN}_6PV>MfwKfhxlAP5Vvwj? z_9J~uXZk0pq>QlKunFVa-7wHHC=X)DmPb!aluhmpIL%OJWNiWA_XkpoQ%O&@lsYv` zhUV01*F$VelGofr`bf{ler< z7xTQ`m+^d<)4-Eg=SXmkIHCnkdW?FBROnbJ?fJ#TrPs^@iClPwg*;o#x56 zP`X>TsQ(9svsT=*MTnkNaxdaK4SZzcQ6^%4AWqU&=0%Ybcx*^G@J<;m{&LY!@lCDB zCFH~xk+ zw%v511k+h%^xBVyR#nepBXCxT(eG5{Q6noX zhOeT`M3RPa;F*tuS`b+$wgRGo7((?Z25cZvqBy&)S-<%7f zQs^T{x@2>36Akv_nV_`HpJ6gkM`=j}esd9c#Ih0F163=o&|oR3XjF2rl=BtH96pX7 zQGw5MaELaj+mq(S(VA?piEMGlGQe!@8SZSts|r4o-<{6|~L17cc1xPx4u|{X9X!%gJq2VHoEmzvuC+ zH?}^)(fiz7UEVyNUp$_kJ292&vlT7tvlfBCKU#Sjuew>QdyjlW&MPRd&I)eZ*RSN zYZ>=4{!)?CBiXy+WJQIK-ac0~`&G5W5VfP~n`&iXp7f5cr4cqWAJKh-hhFa7Eswa(yt1$Q4BTRM=%{ATZ|ZN07Wy9DswwXN zz7zF;I4cnCs|$o}a_%xOM;*~10NPPD$tU4c=lf!bqRTVFxA1)&8lyJ&w!V<95tG|Ae*7x9kSh`FB%A#Zq1FraA zK8`O~cwk^X1K%cj7K5)mXb>xb4^2*i@1-m=BpnTlG;2NjIn>k{Z)p|yrkXTbS_9Rv z@MD+CyIl*>KkWrkLn{F5P(F$41q*65tdyugW^N;suRTew`Aqd54zAKEV>y%)JgzS; zgJ4VVQPgqzbt@Crr3nG2u&tMMT$1IT-(+pqienjSBe)WbMJ}>+Ce6r|z;OK=cK7 z-UrWD?_%JcBSmVgNK7!o3O5aTJsXFnfMzTavq-w=;p}kz7UY}SQ5zZe;c(3!q@Rjq zNNb1BZN+ocJ$eXyc6t?bLQM{-#k4WT*VpW!-_C6vq!S}12Yyzg1p=A#+E%(4=UBWw zO5vYMq?5MlzF@F5TW?#aMmIdWt8zru(rcAMstGj-a7^84F>B0N_0)8gLmQP{ zSTnXdj=!;R|E!qg=9-d8BYF*4OY>%pC17hWiLd%F8Bs%*D`D(LdzuPAvq-TuQ`Hr7 z@xj15ifn&X7(iAnt&pu%ldPjZ%PF&>J|4*w7CPb&+1cXr3)#AzbE^B9lGUHcpr_M; z+h@+%T2-Ut)EYa16zqVpGv4OgL->F$wp<(A`>WI|f?QE-`+dio@tsAzzYPQA8y}+r*pF#vdZgczty3 zZYb^RR>7c}oZ;nDW1`gg=YIV+cDfngG&8iEslq3XNl9kE;X%?*-XT@0EJM;8CD;pz z!gUAL$q2y6luAEzA4YvhV8$UIBK{UpQr-NhTNM8Es*p%0RcM6S1U)fRE%wcTD_BR5 zxddO!kvZI$YBPbr`Gtr#kPtLSd(ev*pO>rzUxLITrInX^L~1&s$3G zvqf62%M>yG5LHAz7QK=YL`qyT?^WWBkr~;GB@G8;DrvPQbx5m-%1SCZy>Ogx#vRqD zsSc^U8gzH5;Wx6Zw-#v2j&SN-^&5^_vMrRXEZ&xQ`_cza>95Tk_d_7Zy^k;?P(NDgIC^l4c>|BaV;CMK-SG<-Si=(-^~ zYUU0Q|HFL{Uw;-WQ*9I(Ku`CS$AD? z3ZJw@9v9W<*cjnjUVB`nI8{n_9&#M7C|N$|*jQ@jK}Wd+HkEJw?@rzmO}qE2z9uhy zk-pE)libU3#Z8z^bqo6F1dD%zoP&>H-5y6)+ix#@L(4Bcc`yzce&06^`MOat^uRIs zyKeJNc!|~dX*m4uF`5kJ{w`|jMfF0tM~Sd|Kji3;3G=!#E}04XH(jgHtDf zX>z>)MqV3gFUb=Hov1v8DUAP-3szcuIVMvk#-BUJ_W;ic?a?+=<4Cc;-DY6;j9W&Q zxUvUXPeK7z_#m;M!7N|bjQ)>e;y;@Hht%Py0JPtaHiB5p)Z z+V@xw5Ou68yp+)(llJB&=xXKRX5E>SW(fTykf~@ZXP)TKptziSU7r7qK?$e3v50Sg zW9Tf5>#MoFxzZp*iN<9JP3U%%6DKTr!|}~acJV>1aRt*O~E{&=gX3* zfRP&Jkjqb5wa@uylh;}*4cn2!H#&>feisc<={^--Vxi+XCLH=*Wz_j1)^^DX1H|`5 zf^Sb}S*Cw@b#@HA+t3PXg3XN$FBZfIVrDIR_&FQzEyX_iThFu?pyj;K3!}^E5oNrV zbulSa%l)-)$hN&getf7srx#Xr`8hN(5BN=+$9kXc(#;jn{JDdQS+)IppJkiNy38%( zZ|;;xr_DB3u}{gWwjS{0?ub(ZVnd_0a+y^$rA63ts?DXcY6LZwL2vtoczKlzvNF>$ zM#-bhr=vgsl0=XHRp=0doVo86e6rzvP-1peen*PpxBByw0yy`O=IWkV9V-VBA%Hk% zvkrxXBe?%vwOw~?D&KPkqV3J+exMZ48NuZf(y>(8C+zlz5@a4?OWCUL7 zPThgG2M4Fe<1r#iw?__vC*MplV>ZLsdV}u7kTgAC4@JVn5Jf#bnl~L)-k)phyvbTC z;NFBV8}lujMYO;MT=J5q%O{TX*)>m3G2YQVm$U zu9IB*^-z?zmK8je&u&(K$H>tDlr8KH4*yYABKFuLt zoWs2WWjPPpZ@m%NQ~~&sv_Y5g3b4A+G%aNFg|9!U?CG9?JbI?ZI~i@sH0`W46xpuH z{ytu3U;BIW;}9%mBbd6L=~e<=Zh%vwjdW+V+jJBL_&13Dgd@8wW5vW~IU7b9-JZsk&i`asN`&Tu9UI z_G8r_+}}66^8)1hATJl!Td91V{MCS;@`bHB;=>WgnOmf6?Ge75mcJ88u;p#SrfYe2 zWm=5WO_%#}Wq22-x=iQysvNaTyVmaFTLM|Tk> z70-Rg5v|M)BD(Cl_Jqt1>`bJigO5wELQ#LUVPl)%1oD5@XC;V-VEj`Q0waTnQT*>@)$^J9 zzn?~!3xo~yzwg)n+xR?C0{yF^WEjE)uME3`Fj4&b>HHsOd6<|44d@>v!@&{#V|*U@ xal(8hm_Yyf+3;|1Py{$Q{Qu>k&j)Ll5J#93fZa%lAq)z`1SJ_!*u?(&{09=>vAqBQ delta 10005 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