From dbee4ca31d8eebc1d18f8f9ff5b9d37ffdcd58bc Mon Sep 17 00:00:00 2001 From: xy <748613696@qq.com> Date: Fri, 28 Jun 2024 16:53:08 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9C=A8=E7=BA=BF=E7=9B=91=E6=B5=8B=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF=E8=B0=83=E6=95=B4=E3=80=81=E6=95=B0=E6=8D=AE=E6=9B=BF?= =?UTF-8?q?=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pojo/param/device/OnlineParam.java | 11 ++++++++++ .../supervision/pojo/vo/device/OnlineVo.java | 6 ++++++ .../device/LineWarningController.java | 10 +++++++++ .../device/mapping/LineWarningMapper.xml | 4 +++- .../service/device/ILineWarningService.java | 7 +++++++ .../device/impl/LineWarningServiceImpl.java | 19 +++++++++++++++++- ...SupervisionTempLineDebugPOServiceImpl.java | 3 ++- .../main/resources/file/warningReport.docx | Bin 18049 -> 18216 bytes 8 files changed, 57 insertions(+), 3 deletions(-) diff --git a/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/param/device/OnlineParam.java b/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/param/device/OnlineParam.java index 3bf6b544f..d3dbc788d 100644 --- a/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/param/device/OnlineParam.java +++ b/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/param/device/OnlineParam.java @@ -49,6 +49,9 @@ public class OnlineParam extends BaseParam implements Serializable { @ApiModelProperty(value = "数据类型") private Integer dataType; + @ApiModelProperty(value = "监测点类型 0:电网侧 1:非电网侧") + private String lineType; + @Data @EqualsAndHashCode(callSuper = true) public static class ReportParam extends OnlineParam { @@ -72,4 +75,12 @@ public class OnlineParam extends BaseParam implements Serializable { private List idList; } + @Data + @EqualsAndHashCode(callSuper = true) + public static class DetailParam extends OnlineParam { + + @ApiModelProperty(name = "lineId", value = "监测点id") + private String lineId; + } + } diff --git a/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/vo/device/OnlineVo.java b/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/vo/device/OnlineVo.java index dea24e5ed..e3ea0b9e9 100644 --- a/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/vo/device/OnlineVo.java +++ b/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/vo/device/OnlineVo.java @@ -1,9 +1,11 @@ package com.njcn.supervision.pojo.vo.device; +import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.io.Serializable; +import java.time.LocalDateTime; /** * 类的介绍: @@ -76,4 +78,8 @@ public class OnlineVo implements Serializable { @ApiModelProperty("当前流程(null:无流程 1:预警 2:告警)") private Integer step; + + @ApiModelProperty("最新数据时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + private LocalDateTime updateTime; } diff --git a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/controller/device/LineWarningController.java b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/controller/device/LineWarningController.java index 1ef6edf8a..67ca82f2a 100644 --- a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/controller/device/LineWarningController.java +++ b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/controller/device/LineWarningController.java @@ -83,5 +83,15 @@ public class LineWarningController extends BaseController { return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, "success", methodDescribe); } + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/overLimitDetail") + @ApiOperation("查看越限详情") + @ApiImplicitParam(name = "param", value = "参数", required = true) + public HttpResult getOverLimitDetail(@RequestBody @Validated OnlineParam.DetailParam param) { + String methodDescribe = getMethodDescribe("getOverLimitDetail"); + lineWarningService.getOverLimitDetail(param); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, "success", methodDescribe); + } + } diff --git a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/mapper/device/mapping/LineWarningMapper.xml b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/mapper/device/mapping/LineWarningMapper.xml index ad72ecd94..cc50750dc 100644 --- a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/mapper/device/mapping/LineWarningMapper.xml +++ b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/mapper/device/mapping/LineWarningMapper.xml @@ -15,7 +15,8 @@ A.target_type targetType, A.over_limit_day overLimitDay, A.initiate_warning_flag dataResource, - A.step step + A.step step, + pd.Update_Time updateTime from supervision_line_warning A left join pq_line p1 on A.line_id = p1.Id @@ -26,6 +27,7 @@ left join pq_line_detail B on A.line_id = B.Id left join pq_dept_line C on A.line_id = C.Line_Id left join sys_dept D on C.Id = D.Id + left join pq_device pd on pd.Id = p3.Id and ${ew.sqlSegment} diff --git a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/device/ILineWarningService.java b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/device/ILineWarningService.java index c0dc0ef9b..018e505ce 100644 --- a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/device/ILineWarningService.java +++ b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/device/ILineWarningService.java @@ -42,4 +42,11 @@ public interface ILineWarningService extends IService { */ void startReport(OnlineParam.ReportParam param); + /** + * 按监测点id,指标id查看越限详情,具体展示每日超标的 + * @param param + * @return + */ + void getOverLimitDetail(OnlineParam.DetailParam param); + } diff --git a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/device/impl/LineWarningServiceImpl.java b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/device/impl/LineWarningServiceImpl.java index 1db4a03ea..238da451d 100644 --- a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/device/impl/LineWarningServiceImpl.java +++ b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/device/impl/LineWarningServiceImpl.java @@ -6,6 +6,7 @@ import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.jeffreyning.mybatisplus.service.MppServiceImpl; import com.njcn.common.pojo.enums.common.ServerEnum; @@ -199,9 +200,14 @@ public class LineWarningServiceImpl extends MppServiceImpl queryWrapper = new QueryWrapper<>(); queryWrapper.between("A.alarm_time", param.getSearchBeginTime(),param.getSearchEndTime()); + //监测点id if (CollUtil.isNotEmpty(lineList)) { queryWrapper.in("A.line_id",lineList); } + //监测点类型 + if (StringUtils.isNotBlank(param.getLineType())) { + queryWrapper.eq("B.Power_Flag",Integer.parseInt(param.getLineType())); + } //查询无数据的监测点 if (Objects.equals(param.getDataType(),0)){ queryWrapper.eq("A.target_type", "0"); @@ -226,7 +232,8 @@ public class LineWarningServiceImpl extends MppServiceImpl list1 = getReportLineInfo(true,param.getIdList(),null,param.getSearchBeginTime(),param.getSearchEndTime(),param.getDeptId(),allLineWarnings); //获取谐波电压超标监测点集合 @@ -246,6 +253,7 @@ public class LineWarningServiceImpl extends MppServiceImpl dataList1 = new ArrayList(),dataList2 = new ArrayList(),dataList3 = new ArrayList(); if (CollUtil.isNotEmpty(list1)) { @@ -299,6 +307,15 @@ public class LineWarningServiceImpl extends MppServiceImpl getReportLineInfo(boolean type, List idList, String codeId, String startTime, String endTime, String deptId,List allLineWarnings) { diff --git a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/device/impl/SupervisionTempLineDebugPOServiceImpl.java b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/device/impl/SupervisionTempLineDebugPOServiceImpl.java index 06b7db8e4..324a75118 100644 --- a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/device/impl/SupervisionTempLineDebugPOServiceImpl.java +++ b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/device/impl/SupervisionTempLineDebugPOServiceImpl.java @@ -112,7 +112,8 @@ public class SupervisionTempLineDebugPOServiceImpl extends ServiceImpl%EQopBz>b-kXPMJeD}!eq{OdP&9N=MC2bssrHHJ`clxQSU%h_+ zM?gL4wo}x!e-cN(1rcEG(k69I-_4}J)DbUo^^5R1`zO7!pbrdHMmPkArU#W8aEF2%Y+oXj`{61ZjgTnrZ zjZ(sjt`UP09rZ zyIOT3M^CLEE*;asvswi*cVb};wV$ir`GbBdXH@KoEYuqRiOYmuT(J%G)}{6uYb$c+ z3Qn@*9;4*z-G-ZL=IF6fYtbX??G*aAEL=^%R&domcn3Y8Xeh%Y;KRVcAfv*>sO?M2 zECsR_g12DVfwprlk#ItF)K3-qfy&@jeh`=>b;-vqT(IZ^vlzY+DuEK`7#4lcGxtyH zx6Wc@uYiDp$IRnwx^+?Zzq<&nDP^Rz!qiMKW6B?wt>eY5MfQ*p$9d@WO<9ObNQhgr z>w6Xb32r}+^mDMz>4u|_D`scuS$SK#5Lh`s;o$#72lAwaZW@;mTU?j$jJd!3WC*4G zwBiAqfnrNiA7-(Prx}OeE3a$jeF+1}!%53$8ni)Y|0t}rQ)#ar(DoTVUXFxhWw6b@>hp)| z{MuHb(zv*mvDw_7n&}?1)!XSf=sR$1HULdbz%gZ9ai=-A%lW)hMfG}j$6nr&4X=j| zv?N09+)!a)vZ!HTaQ@qypPQ#Orx_a_}bVUPaB+XF1M#LJzXNq&f` ziCO!v!}xxhmX@X3-#+V`CNtvOqqok0?+TV|3rBUkVrEOs((IS#oA2*W7J^rcT!XD| z=rVk-y{0BJmoXN+1Dz*&k5wGcdJqPF$zGS9ZsJ`#KR->PtxU*K@bXHoB~zx24ki{+ zJT||`R|ihJjrwdVnY`7*YA5J}FR{T91me=A6ayrZZ2bHPJEz@< z$mW(Q`WsO=rRpoHN(gsd2=_NQU!?~##$V7gM2UUKWSrZyjh;6+7Zygnb?we|1Iq;x zSLC18u>moK2)x$lcxmj%t^!O0FblB`zPb%ZdVZ=K1k56z+NIh_GIh&(;K_2dIpP89pKe2W?@-xvaKr*uF9la3S&Z6E-fx3kqs&%KSDYxc_ZIih{NjMW-P!h!SpwJ?R^X47xv60+%)`6j!Z&Tm>;bopiXeV0!$v3@Q`7XXSyXcPi zQgOX2ncQkeDej*2pL`=&+b=AFXYXzo<`9Vv{_r)J#%{j{5njN&+^lqH8eqQQXGA< z!)S2x={~57^70Y9LL0eVzVFmLcBX7b@Y+X$cU;g}=h|JoDdJALHj4?kQulFOPH*f< zlTtrIjtS3au}R#f8Tu3tw_e?sVPvWqod^8Jju>8rUQ96`g8*>B%KKV{#$Ckeba9gj zOMmd1uEVG2c6IJvcFNz7Yv(te79{PQw?MR;`5{8A&`tFmmFBDkG2&KcN8~n#yX4`W zwsSuCg?3h|gC~8&Hz!jPl81RjDQJF_Aq?lP1O%gzn3Ba^iI;84ZIbW&`;Zbnev}x; zI~GQNg`}h0A}|nR>3iF#$W5?I&lCXwJv&CuNwNCrxqkF?#jc(|-+PE7r%+atbHA{5 ze~Em$`?pl)gI4y1iP8j2`Nj3!-z22#c{Aht+2H#%)zqUPun9c(zP+5@`UJc_>%CR= z(_Fd52m9R``Mf^Uc0GKb+A!nf#FBcp7PIGFfksUv0a)0N@(9?U_<2>-Gf1kE@Rcy| zZbFlf)8cUr>rHwx?q=C)5#EI^y0+Tc-Q00&gSM23ul(&{>w{N^--( z2s_W734C@S<5v1}(Nrqd5(cZ4Yh@BF*EFh7U?I}B#6!tt6hu#Fg+4!M7mnKAfYI}> z#phE!ejLd#o{$BNxk$n%R;QoJluB%PLQ=hwu+9i?pZr0K!@M%^Q(cjLG^85TO!_D( z49zNJVTyR;3NDxlV_IYyI9-2{hRD+MaKk@FIsy%d#F+CiOgRAvI)hd^myNG~Na$0{ z3HkG?vuF!S#)U|U%iB=YY;cD#+hk7jEPY#|y>K)sr-@M%e8bjm!fh2Wi_~o6<$tcI z$&HI1QDw?odO1^Ei8f&l@ndK+?{kqwiZYIycgxzgwPqn{G8OSg4kI%PPh5{zda_`T z76b7|ky6fmGRSl`#rX1#BlbVLjul?G7{bC2;m1EQI1iS3KokpT1lE#~u;QoP2w zD64pin?$GZafF2t`WlrO45AI>71^VtdDs^Drii)7tWz}ixC`<$Fi~Ked@k`Bg~G9I zo6&m{MwxllG>%fT;QxSdXc>MPBIDLN@&FUPmJ77qLca(ivE?T5%|FD-9r4tGGE%Z4 zu)}b_D&BS>lgQnqYGfcrPB_uiuk^rd@@SBa7=>C^i^;{}o>h(dlCl#GTbh1NlqL#Y zr;e5kPSgP5goz|w;FHp^GG|DGe0H^B><5MTQxOsRG_q*?@MB$O@>5u-*Y@CsBLRf_ zg%xAs%1V8PQ+rB6sj5}>fyMmvFXI(*3u_Qc-Hhh$Gh}n{xFt=wl&qPlD-_&=gA5ggU zkTD~t*%(oW60bEP_OOcE9-|e)12{g9i;XeEk~){pgi$xPORl7(Ib>_eI01@Q2xU0u z3bsXlC~Lx>G$4GR0lHQWKFfLJiq!Z+BqRB1H$M{7W zq}+EbxO>6zvVFydQuUu6N`T5Dn#He3bNs}PTy^Q#8tQc+u}=1#UoEfyHVy;@8gduz z#VwdK64I-NF7obE(Tiy#{ais^sEJ2iG(3fY@TXd&N2i_ehhwK}cG3;b)p%Cs3av0! z8%yRXsYHkdvQXd-O+`uytM}>=m-C^yw}ft? zBnXnFnXk)^bRj%zs=)6NZ^lrcEaSF2Hjx+GFcfCWzm(X_xlc(ZSL%d{z$M+-mwlY1 z$u@?^bQ;$R4dr?pZ1O5m~}= zpS!tls#{3L7)e!Ft~TfYo+5?B%T&w`*r5huTXQ|droJ{F4}fd%pU7Z?*~~2>BLVqm zo}oqEKqUj`O!@tP|71?ii>qmRaVSuNPL^(O4yP(M`qs`&=C|_yP}+K*F!koYzA!lj zA1iM;`S)z7)IfH_th>b|IONBce3x#U!z$9BLECPbakP5ySn28t|Cxk0CqdL+P_~^Q z)ow`8JL*k42;fX3CWuAfAH;Z<-4 zkb^6@eaIt@|82ccno4w6JNFOb&E9yC54hA+Z$Ft2pCiD8 zWrn>~8=zl*hnGY9{-!*X^p4cBLQ;#0Y1XEotwjI>)5-+4!Y=x_kRSna5s z=ELby7LPI-#(=EfIdD>6WzgZ6VEEW8e3cUqf}AHs)I^)aviF)mwG#+~ky3+Ya*ncZE#G;u;APo^ZK3_auaeKe?HpmvHCn>M3>e7E1baqzyEL%ri zGiH1-f+t_W+r+$xyA)n%U!4ZT)hXFt_{F`yxw+{Pq2}l_D_8R)>Qo+m(joF{O0_vf zaPn`-6C}fL^wsmA(fz@Q4wP$5*X8NVgU%~~>N|;S`>n@5-br^!kL&v! zuKeaR`MhVsnxjd`b{lGoZ#Nb0(Oj%94e2(Y3@}Kk)2R&dovD(W9%BKby9Y`6AOgr# z289@wR5N&T%AB9JmA{Mrlnd?k7*EExk0{TfH+byEX%jfHoOD>IQp*SF=;lGI14Wnr zig!%+{T#B8t{m3(Cur9u;vq(S)-WhK2)#Z3<>-~rr%hZtRMo-uqk5y!p5h)uC%ApF zkY{Qz+P^`iqqXl~jR6@5ftpsqD?_5C5=jhY{c=mDdukvQ_oYTep1xGglt1~9foz3m1jq=nl_UA2mSt@NMHU^ep5{!i}L$cZHpX$ z_^g{yQC@v>htH$njMK>4K%jf0#rVE0czsYxcREqFxT5W|msSY;v21A~sdzFmNdH;x zX~LuwgRTe)P=J$3&G}L{g;>{JT9r}6+)8S|-v%c5YXU!LqS<-|CD3VAh%GyP!u&j^ z4c2ICwK2gi8;nNn&VAZSZRianj+1{TD;YFdSVkDXBqhsHZH;0sok666!dlv4Pk_d` zEmj61us+2?qHsT8ipRoqQq*PlFEcm%plUD}ja<$IA9B^(+thc@$i_sW{Yx^;tK*#k zr!raWQ%v-m8PDXg;-p4?bYmC)EC_KD!6hfab~4}IP(TYXp@u}M=eLnfTCzbkOd1KD z^i~}GsFtrbE8h=$I*PPbXxBqvxea`Oq&#(H1D%WxXMzBy+R4!d&*WLhHcg?$fmSCXVGv3fqTo0jB|(p?D@R&lX1UN_Q*LDam}7oCH*+uu{c`2J+~K-L zv~t1eI#j;W?^)sd_;+TN?BU;g+v@j@3MV=@mTUK>7?pctPd7xW%&{)f17ykieKneL z>Q&UCsmHFaD!YL4I(BB{6s|Lh6y|-vQUpPA3oQ&|*UJO?ZyIJWv9$3ZaX_%Eh_Eof zt)*m#vC_VE~aG1)(J;D`}%_N{b zx~q3`7pa#SF%@=28MmMAx}HD?!@=e86YRS#a;_+l;u&g%l3VhdCvN!SujSfK0zk;~+)%w-`ZiO<$3C~04lHU`!cLN!4*>{X%L8=!_Q>{Qp$Ni2R-QLbh z{ZnQz*N6^}QNwOy?=hC7RjV9ZBm7qT)X=CWFh zj9Gsr`L(SaD|D7500KUg3%vQ9xFSj^xW1s@FiA_IK00~&QMhS$gr{gw7?*7q;?En9 zZQ!aVm$w6g{pMA4#Mspc9@Y55!|bn+w1zbsLd>yi#!wYgl4$9FINzSKgs5ea8XSN{ z6ntvygz+FD0tBnRXN-|kvQ;>^Q5kgD;qtyW11py-HJJdrXMp$=gUyrfck|6k1-7xP zKI0$TD1Z5LOIAB`#G@sTD&hMuT|#P=HJg-Vvt-Us-}2LM5k~7rIC|NnpH6TX8B*M* zn7FY&&jN^%V~Ns7-k9#Y>6RL_v@kI|e>D~QYH!C7C$|sg>!W^keg7Le(uZ^LFfKG$tXlZW^{U?#a;Tm%8{zead;YBWX69x6$-XA9fVI4Hu1-_omd|@EN z9+=KyiKFtEvZ&@kFexQ(wuO0JlXzM0hbBXYhUOohf#vbV+rq-?d=WP@f4FIszRg(~ zIwnckm?#}JX>ro#t9L8t;p4_^!;%|-X_&)sqUe6&QFu(DCLrE?3M1CWXeV?>J;Otf zgE~PT_$js9JDRfE@r|v~T$6%Z6F&Tkuu^$t0{L>@4F&0xfy_kQ0LqWwL zbIQwqJ+~KT?R&l+IM5-*&jmfOneDg&Fm;uohqDQ)8hwa(SWbn8d z5zU*Yjgw>5RjjVg&G|ie;NeicEtm7+-bn-)Kp4^)sPiETG16e-r*iE`ob?kh76Gis zJ$`(j_73+&j|}`+w_R2d?Biu(*(o98>?aMQ9o4l%q(4l%m8>!eq8}ry5PnU{5N-vc~(7UpwUwN5W|6c7sE& z1P*9{Rblo09{YLA{|;S6QmxuL`6FOITmm7|gCv|g%&q;N?cdq%HtMe#<;Ru0t5a78Fa7< z9fy|Le46XE_N1i+5zdhYsWlz?O+U)O)g?c)2{hQr>CBZ@G^JUOElbtc)N@RdWPa4R zS0nXPF7~DPa@|?!{A=Skam8S<>)s@v8}sfZirGHJYNrS;B4$1N zi98W*o+`yu_Kp3gInsnhXfA*i9AMTilSP(sppW2$?4RC!3fVQ8soi(-@Ex)3|DJ$J zr!$WJH^sl`UEqljDQ0mi`J6BT|Jw5t*>^9nrVh`(vJPFNIJ z@Pv%GWngnFNXsDpC8afQ%*#r&^_SJ%)yDLcMW$fMn!Bi9r@L*CHyTU@-|~ZzSrZtK z*I0-;g$nXiHJ8u`8IOklj*sKr{``sEE0S%_=!+0%XSb*?m_KSYC)ZqwLyy0wBUn=F z7A^$v9|!uJbgP!HY680r9#hDhLX=`4+~ z|Ao2hAYQKED%3`^Yd-7w5zHc7ZWR~vC((O~WsXICj=|@?^&AMF`0L(?TPuhZ(H)9{ zYCF5p1G0^s5fQIU!E&6Cf~fZYIrvJAFPFzOxiKqoo`Fsf7Q?poYjRq1FtnNxX6IRS zs_w8+pryFvd46;xG!cwPlC$U$T~--hgeHRjYuXtTVTL<=*ki+Z#KoQrHZy@@frCoE zz4l%t@heU}0S+)6HQ3VgHgfnpiv=eV(%p-L6GbD-WSU&};R8B3876U}qW=;dKZo`m zvH3cZKYXZ#n{kbVKRF7EB*josxbzs4+Zjmvf|A8CbM=C1U`U4J{niIRPx6&+0wode zOWw8U9eG{idm46yGfYmw>0yM$6lEe>&je!kabcB4i86p=U%q=XI6stx89c&mz~bAy zM;&`WJs;Kgc6`!|V8|(C=-#?(zt=6PnkR)hU+n8w_poe5Dj>BbP;wzUR~1%*D36v% z2u>jMW?Xo>3=VO^Yj#*R+m51(hoOXU!$YW-x?+1kh+AOB!6^4Ulf337XigAFbGlLD z#d0SI22jas(Ghgwdo<fful8E15_sXLme8Nm4zXu&Ts0mc^UH@&|9#Iu>k$)*6< zzcHWW@dQHATx|}auKfe{2ArK@Dbt!zy+lg^-WOum|E_+kq?E3M{944B&z)PB!HL*f zbB(>N^_ z>LV^p0wK2)kB*!hvw;Ri`%YcMD-t54w>RvI50^Iu&#Av)(RzeQijN(3Vh=Rncc>*1 zq$kM_Oi7SWyb#i*{C6vkw}hsr#}nCuiJ%l%ck%Pv%)_UN zo1}y9IHL5wC%-0G!YSWhFyD2qT!9kfB;0Ot{cNO38kZF?8KZ9f&5G}ne2*r8ulj!n z!@_b8Lx=Of61rv_VA??~?UFc5iEmU*`sV(HAGR>Ms{TsM+H@XS4{wom5=C1*_3GaZ zo}VHzo}K;|ek+S+=6=6J*%Za8QUv{HA!_)RATxbH8Q}`bvnSk7J5~oRAIi{p0_u#j zL;2U;lI5A(wHzs?VWd2P&u*T;)NKlJ^2f(P??uF<`9{j8!pV+ZYwAQ>@H+LdZO@pS^ImK$%_P zN0OHM@crvZpJ%5Y=Ht|!sZb8fJVaIQvs7)7ACh90#7pDs4|LebP@H*S*EXrG(^ih_|aQ)vJF^C-W^l^WEerW zEYomw@fE_sK%ak||6$rjk^|n8BzZd2iW~(Lc~W}& z7KqaM1j;ynAunArL9zdm{QK=t?ez#ee#H6k8b@9_=#bA29DHB#M#!+9ySSmNKr>GL zW+{Ciq5XO^^1ICLq3wSB$aa=G3XXsz@PVqYHYv~60gB}y2Ya{iM`@9w%x9qKI%k-*kAT9UuU6rBiPxI)YCR;#4xE*Op{U=Q{)rF+T876%! z;UR8cXD|}m=VfCy%GsIJl4qss5Du_4WOfrokGP*bfKcIV1T#Z$^KS#I_@gw%l>GNu# z6rXFb&h>#@Jf-lsAJI3ZXO*?Bb$C4HuBV~R^uwEU2iBXTspf3ZXS6Gx_1fXpUR`~9 zVTH=3a4F%qcdY+QclfnVW+^Pav<1S Pu$CMX(#WU(+4MgEC|Rh- delta 9101 zcmYLvbxhqsyY#``-Q8N;p|})xcZ$2a{fc{$Lve@V?r@+$akt{d-L<&fzVH3=-Apo@ z&2ILe&1UC$X3D-n1;;}r^1$g>C+K-536cTg%6;sZoitaGjQ9O=nYj9n@$z3$5I^ut zn_CKG4N}*$tWrMtXXCH9?6q*&Cs=tAIQ@KLeULH_PmX1e2eXTfXtC@%Vg1y`nDHdk z9kQ4Zq;thOpNZhRy@uBQY|E{jkJcI16kF%1JcU%>Igq=&)cWIsd-QhP*TzeVCw>#~ zDSePhm`!4qD}n7M9VI@I&4cYL+J2dP)oIcWxU}A==(>ww(p)8fS1h?>~Q_pc+Tb@zQ!PdRMnPo_VX7^TaK~UMXm@2s@IEu z%a?W$XQ*>$!K74WDdt9Wex$~EP*s4yN!_ijO`l+_*kphHo0Ey>kMjrz(bw+X;kD0g zUe!eR5hcs>O9y2z3e}%_Gj0&X`6@jx-E>!YC(HmcSHT?1#xqGj(UBUbF~+RPQN}!6 z&nCrKX8D+gVekp<$S7T6J@!L&Z4yAZbtl=waa$yOmKy}4ssICv3j%=u&e=fD2A{& z7pQLv=lnInuJbr*u_=Wz+80XXAa&E>0?-+A2~5npKUw-Ok#@`!JnMo#o!2=lZIup8 z#P!}Ly7MH~jmxGj98?6A5TWHfaVTPJnB6sI!04a? z_E+5-14tmyEg1-e_3z@mo!uUkpJ8(P{Okcs~lS{Icd3xjrD3qvRn|UY%PG^c3ex*LlDh^#B$pIJZm|q?D%74^m9D66Vh!O zR<-Z`USk4K?0Xb}0RYYs3ApRM%)fJ=F`5$8) zr{e2D-9XDm%ar!Kcr;F}S`YwLOfz>{WjIlLUePg<3fJSVGH@zjdSh*rX8rug%l*-X z4`h(IEUkjL$5};i??@nTqGR+4mGui46T0SS4P>Ck_SmR7h=`LAhG>Ip={T4q>+qz* zpVKuEv;u*TswB6dWYWY$s+@+o6yFy7V+ARMjHJfatSgTpdFi^WSpfbnTe0*e0IE`2 zZG&0;gf=_3(hv3cPX-5PEyL#~3rcS|Ua5HJ!&wqx8=@{knWE9JqK%bLYc=|w5GvC* zL?zFPUyLrzBbg3xE&Mh%;;|*HC6>>L&Y&a)x6eNf*iGTA{1$J~GlQTEeg?760r9iB zH{1Na7HIQNj0cxH^+5ViC^$tXz})JX$F_I6cX1+ekw&(Gx>EZK6bV~M`$b5l_t*Bf z6OEteynV%<7zK+|&*X|NPYd{Z5V@y*0Zi`!CGcJ-%uw(buP1YqBhUH~XUKg)=pVlE zi3JlXPU8bDAEIlBlD8I=R18jwic(7#l4ysDZ!3|apW(YC2{2oAmdrc#VJ_@+_1OsP zbMeK>=G@|PVAl!xM0dr)*U{pxb@2f1x&auJM3dWL9D; zJdcv3Dq5Ss{`cH3QLKn7Cd`^JK2Yyp*n0{gY&}d`t;0Y>v3@u7$30bCc*8dsw4fhi zWqxzr;bva$-2j@1#U>qNC;&jZ^&NV`*sjmANU_zp1o!h;;S1dQd3H+@^ycm`DMVF_ z^cPf*A*a1OTW?ygd(u~D$M!h@tH#?v*VM*(z;eJ_$J^86iD%I3w#r+3C$+OP_T&D( zx$EmTOuJX!&8jFH8-}=F19=nC$(OCS9pV1hFpxwUV1+bSWa)Pd6aHDsZ;L% zD&d}{YFwn6OrQljIgXk$hHOAF6hY<<;m+1dgYFk%MC^~X9OPI(^ra$S-fYOWs0%x# zJ;3VhwzLvzpK(+;Y)AR+)Z+?q#?S^9qN6l8Z2kCNpnT!Bm2a~u(ag$>t}K*0-?0cACeK#%jEb8$bS$H%Et8b=C2_U zQ(-Aq#}VGAdsf}X35*x=-u3q{2~G-{F^5PUXUxo+&UUIw$RLJeDSO2EW~o_f$zzhT z6XU=S2OU#<4jd+^rc`XZK?HQ^3&Y2WWQ4*Zb63x7t7XcQwOhv?WwUURo!}E z3QfEjx-#HesWEnc1H;zyB$(5rNNqNpzaKa@l4lW&QHedx_*Q$jJhQ2K`Jt`1M)r^;Y!*UUova zMY_z0C~^$iQ9xKcDg*LWxr^!qut`yv<&KmDyINiv_bEn0-3B*FA3CI`WKMe8Hbr){ zDUPYI*@B*4E=CR~#I7<)k+tBrh6)x$9D}T$zn6)8l8#VXZxn8yqMVrl3%{3>I(3kI zPO#)N1HAZmMOY~&ZI0psOeCxpjiLOlUw#Tllp6VXk|pYHBS|mx!niEafUh_f@(D!TfcQqkR*t<>O{6#c?&t38mF7?KAxrMAkVsniA%!P))A1M6zGNyF-Lnd;yE zBDff<2L^t20KL+X+9sVs14ttpB<8%AY8P;^vNwsz%zX=2aZkURH`rjK~*|HxiXdNh2gAh*UFO`cyeqRrpb%-bSe1|Cs_MV1~)557)dkO>b z8SixhU({bA{?~^1TIYA4BN>1@tqs?&l&I8i^OHNjJD@PtKQJ)xY;(1EI!q=M2;O? zS-I(di>a?mz3B|GKXD^=_8uGP*XpI2MzYnZ-UxE`3nq}cIXxijBtz%xtZm%+C{s2m z%KW4-;?lPCGyC;V_UcJ4$vJPV)r_b>1mCjPClN*Fi^IJt;Lv%}c50!wmPbe!T{PAE zRLuO}2l2OQOQz+R52X=<;x+6F$BInkn|T27&Jc%>F3CakPI~s>uB)Pw`Q>eUp7W+v zJJaCe-dXm*7S4FleoHd$N@{^Sk-iTJTC^wq zg#yUUS;){Zwfb+I@CTyfo!wcKCi z9W6sho8zSCoWGSjRkwKG;shD-H~QNwKUgR%p5}hA$#`~0NiKhw;5b{BUgh`@Nh@=G zQmtM2Tv5`cvH+JDW@X}Mh8l!SE+4PCd*nUZ@kLG=?MYk7TBhRY52AA7Z&XvA8Ag_^ z(vi0==dB?mX^sS@((I&T;8srVWAUJdx$zaGqGm~HuS8QDT|dTSJ0Ci#nEO>@oe2~K1YPw~t1Al7ji591 zFf{0Nq1x2ycK(KvC!7A=FqsMxZz#0*s7uv7pzCqDy#~(I5zl=$bqz6)`6?p20H@`> z`91lJv`!0&gnGFF`K7Dg%lviTq|S8ftCI|JC!~*Wq$hkEOPTl$Sg^`tz*V>>rXE}n zIm1)5@R>WEYkU&}ZW`*3x$W5kG7Hy+@nM!DkDItOAf1Mg=dz%K&#%rKU1&LOR+pk# zP%j&lXy|oS{Y(6&k#i_TjYBT%UBP{<9ek`90VaK~wl5Ff_s3~Tti4mD6Ns~d5}6fg zrrT4Msb`d@`08N2U__`TJ;Xdx+!mY@*oNxb*Zmsf$D0`-G$Yyr9*Wg;^H7EKmry!( zH8VWrUadL=+G(cc+>g(tV$mdMuSUrK_1eqA%Lj3hrR}fWP(Xk=c64Dv5I=!ss%}%| zM!+opvmN0R#bBo>RMh(_yT^y+{GWf1lBxCHMNnZ86Dpp!5563#&vMKYe3Z6Cl=0lt zv(OaY>SwY87;}3N5X>Gp514J=&gEpcR9`rl>E|UrbB8v9 z2XY;^b?I_@_iqx|G54Q1X)>83vRhDFdJ#;VAdWmL;TVG%hZ$m}bvXb<#w;qpcc6)da*pu3t z&nu{+eazfwXjaoRk1|o&3ocAoT-nwoo-i{;ugO*>n@g3~e#=Pyk*&G7`*M#r8 z&qr@29*LK;P=sjj>I!nRmyCLc^0sNGe4rC++ceUThFS%qu7#b9kM(nxe|zDE%jWw5 z1{U&dOXr~c^N1e!OM%9>02b)FK&I1&TMT$UZJ$+Lk-7IAq}l)yYYL}7eoOC;cL@3R z(a^s34yCYjOP)h)r{=ymxSYAzGKZwU{CD{198yz!ZPnaWDeA#>bDwa|I(1k4Ns?wZ zo|=l&CppRsrSR^Tf&hY+gCFz!j;u65OsQk+TG3sZ|Bbb9bUtl}*UlC3;>xQPd6VA|U&#lsHfOL7W?~0b?x_ojzlCF5xEOR^<;&0+Fn@gvryXl@ zWk79X9i{C0I2n?ue@7&&(vx4)QoUlRm8wX;wN4eEN8x0syPR!bz*j7RVt{@F6pKr? zF0#w{@mN!QyzutfqG@D@`>;N8~D1|JzrC^@Uv^vn7>;XtiKp6U#P~6z=5X7A`rP3MXdvw3Yby?+q@E!7$vN3h$ z^iuwG-1YSLCLSRV@~<5dA=(?LN~8Jv;mq$0Vp&C*H<=)jzoGft9_MHuWypnt)a-L( zk(yO9J7fyT@eNd#X7d@tn>USlO^KsCmumfz9! zWy+PSivpP)LaB!-4NFx_D!3hgopmHvKSr%Cx2Xb~5yBa#iA;m*j&LIugH>y5KkI}8 znz0bV9jl}yj-aEq=+K_NkF&>uGGmne`mq~wt!Li8yisaH$iTkuGnvGE%cQArSdL)g zp?Za{4v5&1rtIQmdv^K*7>%YlK@24Gtinvx7HfZHlhzkyXtxdWBre6rqWa}VD&?{O`R=Z_3^*_UHo<5J1+h90u|)a1xliT>{t zC-xh)qTPnwuL5O$nfVNo(>vl*pZa;JT5Ms2n;EPT{V=Tqvx81FLUP-1Sse=^Pbx)Y znRN|k#+xRBD~#KQr8F>_Kahq5ZciWH@C$5;b`)(QNDqer(4kz9q_k+T&9f~7@S#6N z;(2%n;Q3BYx)Sf}z6cf9I@i~Gt5&yaop}4Sgkq>gmacyMyDBoC&WX#ZRPbvxxxLz+ z;OiP%VekwEb1CTl?ZEWOV=>6KD&&|Y(*{wnPx$YQwcb)>>&Wpg(+Q>~^;1rP>Q}0* z4+E_J(K5H|5vlu74!RZ zwsRn8>%_QiyC%rFx!!MMu~m$7@bAXt(>-@h=-dEb^Sc2|cDd1W!QK4F>5<<*+cY76 zn_AogU(=qO*?^k0fUO$CwTEYE#FD4L_Qu225Q*hi;A-&V_U&%LIbi}Z@>jcjq|H!I z8^P?MQGk49)`gCwGG2Lg5~vN?9ikEoD^v1gDaKP>ZX&Mf)m`Ue{%2rr6c!lzPp&G0 z2a6VJURm@5{Kuog>b#xh7)O~vG9=@xCQrjU0tve+>Jby-45%)hIUi?gmqMMon)e&3 zTgcTRK$QNKax>-td;chY!NkzD)?_UB=R)A!>r*A9*h!>q5+5|jt` zWuTj#L~$a=SmGQ;C9fjmlmxv=o9QTGTQ;;B0MFWPMe{(^Oxs(F5(7K3f?Qrssn9@Snvy0z8j2}e7LePoY_ znwGB4+}1*wT}j^rmXhMCf6}cnPW$K|=Zz%mi1EQrXN7 zm=KYAL9Kte+zXsf`r;t<*__CMYBT+qp)u6kwxdlrdD-(kj1FZw3^{|OU_OodUE^};O zf{AjKe6=58SVdG!azUpfuLPLm?L+u zjDTfQanLea$@&h3M)LMNI*vbqMqfxIx3A-ol02NZK{~!Xf64Ig%}@k<`o4}kV5O5# z%Qteef^lP?c>T^Bxme7l;lQ%=*_}*L;p-22dm~!o`58{dsCf8Ue(jROJQtc@_Ab|9 zXnsf_RX&jxTJV=I3Hx=E*eOf1NXu}3EOCFt#bdvQM*XWRzqlf#d0pg_?CzxWK z3F=1R!B$(vZvOO`d>BQEJCw~h0+|v$NqNEzj$~PyC?8ep`C1VP+VB%9tKMVe^`DX2 zD~gwSCpAA{<7U{1Q;>x#j{S7aJZz4Rs!Z6s=9eRH1&bs3IhL@Ej#37^~TwZ2Sxb5 z+P(JfNU1^{BZeS{#00JX#?o{k`(T%rx|a8|*O2}F#uGbR?3H#4c1wzo0s37?r4mO3 zr~l(BywcR+pJ0AVjICb_u0ZgGfDiTWU3J(@CPXqsvR{W{B;U5w>l@J!#)J`US^s?R zrca}r_LH*_|A#Gz7+Q`v`b?phcl+JEIXQQ44lnprXu3RjI^-YB+Gav7q=+|iD!cW= z4fX#vLlTFudd%IÌ=J5dvqmib>}wqc?-#A@XFn}8#6T2X<>P`0~Hgq~>u1J8!f z;QJU$oAKW2+W46X){v10TsTj~S(M2c`2MZ@jrdFZbw^KCo*YXjF_|6%vM}4W1~es> za8}C&mkHutiVWvM_ZXg_sv{?_c%vPRKG>)$@l$S=VY$8nUnpXUOaeonG*S4|9#wJF z#QfKwjf;ERt|egWZwT{clkv3Q7Wb#2Moa;HHk&S0X3?!!#MupwcU=7L-`>wC4GptD zv+f93PT-btp3q6?5Ll#`FsB~`acH_YvDaShDmaYk8#gtyVE^BfMq$7{FU{}-j zUF9B*~T|BIz2@fY7hpJP4gHrllaMnG*H}WvMUqAKCv_eK6e<{zx3F#_&p4T{n! zuXz!Wg=e40Bs;>unB9+U1SwDkEbHg5fa)bHF!#jpsi#O~+zn}V15C$8JR^}R zGYay!`W5ATejGkYK%FP-Zg1z+Ppg2Tgp!G0eZ_16pYJPvQ|M`&XqUbZHxZlaD^A>J zl!;%!9zJ;xsn+yD5}i6E48P&>br#B-=;e2p%dc{D25e8@n)DA+ZLEdg(WEN)5U)%V z*eQKij(ZqwUIBB(mmb({7)J@fraO0RawsD{Y>u>UDm=Sj>*_FN7w@UAio0Z}lw^@C zxFr9vFr<|gBq6bEpy)hV?u_e?w;1ewSf7YKTSdx|ymxYd|NO?_Qz~ z`hRFLb+UScs5ZMA;fJD9#5Zz=U7G)b1a^0IFg@kUAv-9AlS4Bm#xgXFLfP>$`V?G$6Fy@Z<498RODdTdv zx6rU7_0Kbs|*UxUXWsFffeMx`|BoQ?-7k6TYaLQf8%bhCppPH&i*LS>hFAM(Las|Dlp$&cyZ5 z_5tg`LpKidl-~QKkl}~hlrJs+2ss5cX-=!p{G;N0IdO0ZJ)91d)_k&B4v$A9J)9D9 zCN4JaIi(kc7Y z4KQ=lF)@9Lb>k_fhE;6HSh=g$2%16fR2v0akdZ1adncZ{Mmx9P>jVjWe-f_xqtJ~6 z8=K&%da*Od*e_)SZ{nMqmTl7dIC&~dc}u!^3ji`VV~uy-H%?PU*1|M`9AqtG@&rZT4{YKzQED=Y6XGbgwj zd#<4ATT(10THA#i$wc`}u)Y`nA%KPW2VF^M7%>5dto8mo)c-{${*#y}$!)9?6h?%0 z69ZpJh(ZqvgV`lHp^t^Z7LuC(n{5GiNeYnsH&_7$0xd!RuWkR&xd%akDF5*&7)z=F z3KQHf#SbL_ewAV){r}xvMyUT<{QtMtgBC0+Eer(*j*u3CeiQ%?N{gT^5dFUpfR(ee x2RKQZ2>Jga0$}dXaZr@t-p~Bda^zqP3Icpp1vvQsoQM4nDzG3Bsl