From e9dbda664a12780944efc2bd3614974fbfca2dd7 Mon Sep 17 00:00:00 2001 From: jing's Date: Sun, 10 Dec 2023 22:05:39 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A8=A1=E7=89=88=E4=B8=8B=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bomnew/api/user/OptionalEbomApi.java | 39 ++++++++++++------ .../bomnew/excel/ExportDeviceHelper.java | 8 ++++ .../query/OptionalMbomMaterialListQuery.java | 4 +- .../template/importDataTemplate.xlsx | Bin 12939 -> 0 bytes 4 files changed, 36 insertions(+), 15 deletions(-) delete mode 100644 nflg_project_dev/nflg-bom-new/src/main/resources/template/importDataTemplate.xlsx diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/OptionalEbomApi.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/OptionalEbomApi.java index 6f8a2bba..31ba319e 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/OptionalEbomApi.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/OptionalEbomApi.java @@ -25,6 +25,7 @@ import com.nflg.product.bomnew.service.aggreg.PublishMaterialService; import io.swagger.annotations.ApiParam; import nflg.product.common.constant.STATE; import nflg.product.common.vo.ResultVO; +import org.springframework.core.io.ClassPathResource; import org.springframework.web.bind.annotation.*; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -32,10 +33,10 @@ import com.nflg.product.base.core.api.BaseApi; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; +import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.OutputStream; +import java.io.*; +import java.net.URLEncoder; import java.util.Date; import java.util.List; import java.util.Objects; @@ -387,24 +388,36 @@ public class OptionalEbomApi extends BaseApi { @GetMapping("downDeviceExcelTemplate") @ApiOperation("导入数据模版下载") public void downImportExcelTemplate(HttpServletResponse response ) throws Exception { + + + + try { //获取要下载的模板名称 - String fileName = "importDataTemplate.xlsx"; - EasyExcelUtil.setExportHeader(response,"移动破数据导入模版"); - //模板文件存放路径 - String filePath = getClass().getResource("/template/"+fileName).getPath(); - //IO流处理模板 - FileInputStream input = new FileInputStream(filePath); - OutputStream out = response.getOutputStream(); - byte[] b = new byte[2048]; - int len; + ClassPathResource resource = new ClassPathResource("template/importDataTemplate.xlsx"); + + InputStream input = resource.getInputStream(); + + EasyExcelUtil.setExportHeader(response,"移动破数据导入模版"); + + //IO流处理模板 + + OutputStream out = response.getOutputStream(); + byte[] b = new byte[1024]; + int len; + int size=0; while ((len = input.read(b)) != -1) { out.write(b,0,len); + size+=len; } + //返回请求访问的结果 - response.setHeader("Content-Length", String.valueOf(input.getChannel().size())); + response.setHeader("Content-Length", String.valueOf(size)); + out.close(); input.close(); + out.flush(); + } catch (Exception e) { } diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/excel/ExportDeviceHelper.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/excel/ExportDeviceHelper.java index 31943fb9..63aff154 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/excel/ExportDeviceHelper.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/excel/ExportDeviceHelper.java @@ -53,6 +53,14 @@ public class ExportDeviceHelper { } + + + + + + + + public static class ColumnMergeStrategy implements CellWriteHandler { diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/query/OptionalMbomMaterialListQuery.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/query/OptionalMbomMaterialListQuery.java index 7782ea3e..e39a7811 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/query/OptionalMbomMaterialListQuery.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/query/OptionalMbomMaterialListQuery.java @@ -17,11 +17,11 @@ public class OptionalMbomMaterialListQuery extends BasePageQuery implements S @ApiModelProperty(value = "开始时间") - private Date startDate; + private String startDate; @ApiModelProperty(value = "结束时间") - private Date endDate; + private String endDate; /** * 物料编码 diff --git a/nflg_project_dev/nflg-bom-new/src/main/resources/template/importDataTemplate.xlsx b/nflg_project_dev/nflg-bom-new/src/main/resources/template/importDataTemplate.xlsx deleted file mode 100644 index 20102e604c59c165240246ac19c706d77a82d11c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12939 zcmeHt^P3&%*7k1Owv|rXY1>TOM%p&hwr!+srrk-~NZU@^*0*QQyk}-|=KBlIsUMzQ zRr^`%s;cW=z7?dwz|jGa0B8UJKmsU+KXNw*0RRvn001-qG^m!at&Nk3jgy|TyPb)n z4!xVT6>&Z|D0MCX6uAF?$A9q`s7M^K`NoJWdYANw6xXa`_%pxk9cTn!GM&-^RLgCk z`aQ*jz~5P+FqyqO5*#TI$t)E+irPUi|wLeY=4o zSMX@5L)HbiYw##_+;`dY2N!da;GZkpRxn*E(!-D=lLO*Eb~+p)6|JC@{YbN{nFX

r01AIIP&D066HuUmt^@544rriy4klKP4D`RP|1-@0Vr%@% zt5?L!N`o;W2cHGJk&Je5FTW$5wqg+dDQo-!!j$%+&yf~e*!prOCg_ycMCg%O?V9bL zc4Jys;8uX_>4KUp3KNiNI@6~5P5Py!1qvm>K`iQ6;+sFIRoPMb4NKI!-MobxzVM2z z{6Kn&H$QA=an-&6-mlsgoa#vq*qYZ;NM#h-NxKBW>$nPItbOAW(A5ZNR7YV=4&6ioTHMrJ=v?ov-MH`n*4Ji>0I^SJW;7ARb08*2MC+ zPO%?$&^#RqfH@y694>|YICfH}5J_n=oI1|3?2NxYPJ`7V2>ru|amT9Ph&|Chi6svY zxsSQb-zV)d-)idep2?0&B}K)ckC_2rILuO2ZK)7>$%#D?r0kR~xF9_(Dh<($gk-O8 zx1818Sg$f}L?O*J;|Z|lD0JPTik2Nzg-veba>I`|qjl+%MVPNhe9NhLW=rk@AsbJa zf|e+slL8Dq$v2#)XGB0fv1HfIh_!}d_F1N9NSR=pH2f$Cv`h}Xhe&nkVTaR+R93-P z;Q^~Yy3;{g{@j>J1q)yDV(=vmRk_}XhE>8^^rf_}tTyH&45^syVsSVvq!|=B_-41n zwx8Sx%q&frGUk?|-Ru6-#JXNrrtgk&=6VAD>g*kVXmmfNDc+V<3+ow@5v0^R^B}e< z*q$f1d)WA=XkEdwyxgHf@@SHjLPruqjM#__19W%YA9odmIIYRzD{;;XF&~mS4n?yJ zLO2JaJ>hz&`9moxom$KC{Sj-SD3y*#;GrQG?V#x+YJN;Y5?Z6*FR=!adnDXe% zA9YYBj#^hABbs!OUV(u9Pw(%~mzZ(|gm5eHUt9n*2oTEu3IKlv^#26|5MY)Dj1>Rf zM}?BCbT1=v2i$82qico>2Fjun1L?8K5fb!J1I;oe35(D5I^Mfh9rZbB1~A)T_p`A9 zmpeAZEikm39@>&{RB#V8t21s0+p()LFlfV*O2Pnf2sG5=!=v&OIK*^Ew6A>egYUD^ zIrr|VDR4pxzL1Jsf1M6y{WQ+#%>2o5l3-X?V{N2i$L}%l<8fs`Lvu56I*sY>+gIV` zTgaRMccQ5)92iL+1b4vH&mSbT_dTMw(3kDcrn2timOTZJ@Vofs(u8Gfyk5ah#36&? zM7}ifj=TA3Z7OG*PC`$^G+oP=??1sA(B)%7Xy_9@zi@Y#C4V5QavAab;uI%xY zz-pg(m$EGx0sGna4L;IrLY!iVFcPD6+yY-DQDDrOBL`cydH$>wRF(kPoc2}i{(FAKBQ4fu2Q=4gb<0s@=Or@5Oa77{)$0i>w zzt5pw@%5AS4^3@kZLshxH(a^ON!b-t((Cx`)I>b+y;yJ};B>{FUim_!#R!3UZX%tB zORZrk@pRV2(^}ojseAZ8oG>rSp>w_9-OK}?7C5FFxvF0Zt~5x_1HDyy1=42Z?VBX1 zSTiSx_<{GOP8t1eaynA9uS!*kMGZ;^M z2_GkBXjETv#yPS~tIH|IbDiBTItg;N)f*dMXJbL7ni6dCc5M|~-W7))?ROr0H$%=C zHi-SMANjNeM@uUwU4u`H`yFx|$ZvZHH4Lq(#6U($K}ZCf9Apv&A*!!%uv-51AV+;w$~998F`l{6IXsz5Tva zXf9VRvm-xa2ooV^v@RlgAu4bqy+nb{n?FvHhsw{~o=H~*PoF9*hv?^^T8VALqb^T^}L@%96QbV(Y4C|dV5wp zaP@j0e-wgbVXn(?cTlVMWnVYlsD9+_d~}wmI%MQ^;K;-mYU=};+!$fdvNorDkoW72 zsF0SlM6s#s+tI`8&4eD2?=xT6Fw$FBZWzUPL@7m5QNKbJ)OXfJG)NFgBl70y>UCe9 z2biVkEI>s_K18&PL61!_K(j=9hwg<@Se~W`w&v%1^2YY#sEFxpLKRby(Rsu8K7}iVk>r{@ZD6 zo${QqpG8ql_hBXq=5E%ySkN$umLR3GUlR{^x%!NQCnrI(=1f4pA)|T-)x`-K_y4H9 zOoT+~5VQNKJFhXVM7_QS9Ig%1DTOxlqpR^1RW{ zDWIA%8O8yuzp&k`B(+9z5OdWlu|c730U-t_PmcOaYA*_|gOBvySIk%&z5t7Y2c}w< zO2gSXE9du_dg6*|IA!Dc<1ETD*c8SwHhfYZSdy4+n@p?EHd!Yw!h~qzC-|(U(ra<< zRS<<7yKYrBK6nY@Lc$|H;#y0VAO}n)!XQTdKbVy9oQ4IlOZVXF@ne&P#ReY0BT)`_ zKH??F3ki>(J%p+Yv_3%BM(qvkC`M>c8BM8CiTWvDd9tI2!p8s~yEk2KcP76mBPJem z_#tp0Qh_RGDb))V*M`sb9#(>bh@@%iIhE&A9PNWEX8m>hCK$E6KgLI#GCr!C>^wu% za#8H4qrJ|=%fl{e0?u5(^eR!N-zOtbDRYOr#%ZqHOT(@eNDvbzu8w{RnFBZo~pwmWDm~9|NZmJP! zV-i@vmp7U?FDeY0#yp3N#QgB#jzmX>4+a5dwZ$LrK@NNZrzkteaI2)edQ(bLha=b6 ziHm8muP|nE652+)KPof9ZJgTKp)MkfERUq7sn0kH2nSXN8O&H+zgR^) zI0cyoC(fU#wHsH)AT)Y0N!3RqUkkR6_$a*t`)^wluj#hpyb)qwiHHdF?wBsfSPPwe zTodHSq7&YNSaTOdVaCZ9d7=b9q3>gRC$=DIrdO|6 z#4IJ_udbnCM0rC?D)rKmU96Ss2wC`MNK6J~tUJdn+--i!_0pv-x5x?XLc(Kw_4RNP z98aU;kihkr(=!x?I4{qX%+INQKYnT#cs+!dw`uzOre$v|R&Z~HnhW}$qvOfz!-ul< zi;I9X!JAA1G(q8)0}!bP50AyFJYy&K@#wIWyyz6A>4ch2327)ZD!$&Gh{?(KG9klD z5@@`^Hr?<{AY`l!dxcEB&Ss)EjAZ(uqjX%PB%SdoXh#=gW0*+D zSXBlV*CC2N=t?;cM>5g;cKuMIqtLWHJ1=r&Fo;;OeZfR&9!NQ&rWcV{I8T@u$#_xmG9{ENenOuXoPpR*mZu5x&vUjECT*j$M!8 z5U;P=vySdLTGiggcWu7&WqU@|6ieh&M;MBvi3p02Ilo?2T zmu#A&guIJRzBpoa6Gk9|Tzy;L+1R90u z6+&H)lZH=S$ty=+@rR$|j-20JjrB8UU*6Sbe|adQe+c#6eAFsd$&%ZDa-|*Fx1KyK zZBSi1Ep{Z-bLhy5eN~rgBYNHQ9zF3^9BJ8k{s885X#YyJl8zGI@|~fbr_987+8!{Yr}gX6&qp3vwnJL4tarF z?xZ4@5*E=2*LsDAdpkURI@1y4X6}c%_2a|fF4-MWGUe9NGK8;=YZ+wD{MHP!4HJJp zSWp>TfVPn_S@{W>wFy;3XA#vR~^uS8A2X4|k#HwpIib2eIAlahcV@{lyR?g7ZP{ckQY^*LzA8<^EU`s&LE?BBA*`3rf4IpGn$Jy*cWMnr4ER)_ z#xMyt7&zrk)xKDMeb)-%6&7Hw9+>>W@SD;Bd;|EZSv!&*MmVXYlKeO`kDw9sGGe}Q zZGS(lx3L8c(EGrMJxVBVX}K=M-R~#2!XKoq$Wx3Dx7_`(Y028GmckU{ zxlAZ6wEKOCzaZxiavM%V@Ef}XmzbS{NpZA3A@(G6ST_xXvAEx=h2K!Fyw!-fDrOTJ42Iv(9_j@7sO7yh zcM91K@A`JqGe|QjADFaNW}Nk|ddfo=fpHbw3;ev*>OMic-7F%6y;g6*?ybZ2!L;rS zis00o6v^K}hhZ=R?HA^CK1{=?u9<%E$zI8n8FkaJnER~n)BSA4t19N9lvQ7m8g>Pb zf`PDLK!VH)O4xuz*R{lY%}78TE=-Y+qf5s-p7$|xJ4gg97#wQ)G`f0)&RDCb%*VFjI7^|_)n+Y4ZyCTAw`JBSmq@2oQuxeWs$+`Wga8t5s7;!J#uB<$9r{LG_dqH4)D z-&~fcJ*zgV`5Kh(gsH(3z-6W4`Vn?r-7tjVa7@a3Gkkcro2NaRcDTIFaJ586YL+wjG11U6yAcTB${eUQiiN3x&&dJoe!@KJjcFs`_@u8 z{X(@Te@bC`2DZyLlTsO(!&BW}>fRv4GCw>5^X&J|(8`UEc&_c6try{XObeHc(ySC0 zE3p()$+p&0!%R-mx5988JXN(lHomKvoZKm*Crc||0jr;Wlxg{{y&e=!zNu2b!TCj< z3MU=-@ ztxOz$E9{RoC98pzT_@I0Uu38G8AHir_+@_%5D*9I$LaiLp=65;XbN1^7sKMg%4WhR zGLIv!l-CT%pA$c0H9Llvj~tgE8EQo0zQ@$tb7tO_t4I`5p;M)b5oq{M8pDW!WNnzw z#dUce(L}$e7>%Li%R@OFv`ieVZq@Uhm0L*99pDm@0Yz1uj@yr<(=1B|cSL_20@KNb z?v$~>e}vcFPD_7pxFe6sM@?RqXVHZF$Ql0;wvv%ENaE+fSuz|&?&dc$w@4UMOF`-6 zZ@D)fm{SWxXnw8Jviz~Ctps?}?}GU`awNPK(`b7IWzasDAPHy{&CnoD(i^KetMF6P zfZU8wA0(II;2r7pVJR`sV)Gi%e*;xJ)|D8cH~;F;%v*#aUFb(oHWw$GJMO;Zfi-m( zH^A>dY~0a$vh(?R2hDuSq;VOMIcNBV1I-iHgs^-&i)_Dq_AQ!FeoCQ9aSF|fe{ zm#P3P;u^~wI-}O}@eYTg`Zlmfq9o55jrJm$Rsf<)o+Y+ckt(@<)!F!!VJdM2Fw1$=^?ZaWXBwfMy;}i469A@=kH+^ z!8eh@aS+|k(YtA-$g*eA*^>{w4vv$;5VrHvie|6jq4%p~La3Pv7#<=ZH17HkM>smJ zJ5m_95eTK}M=c`x0qdMZ_iNNddm|6WYoLuFpvt?!5~Hjs&l40&Pq9jU_aMhP{Dg_|^gss*hC0Zp1S`I_Y}Q_{ux;%X=hFuH z=AChaw}@TeLA8h>=pr(%&)>NNjwo%;4Kw(`M>^%z$DRV6Gg@}{gxaHQRyi|Uqo8f! zVVP&|up-YhuU7l4o9*G*w$Q|}I4hLLW$>uJY#EbX;G2rSJ|E2Jb-idC%)5obd{@M^ zy&%_O0yURYO}bJ;ix!+z$jDidBQ{;MSg_S6gkEe2`Et~nT*c8CZ1mw=&p7O=VJmF) z?hD=sILQRzDR1Oyye$BCX4-1m1%BSD+n!;J%>gy3u;ATXHnV{7kh>3$d@9kz!mAo* zohM%0g;|Izl;`U(?j#Ca$ zV!GvCK~QUFS8{VBxE~(8#qAC1=UshzBIU5|y`DziOuc2%?XsJA&Ca|y%CYwX>GN#z zTS`~#Zoa*aGveA4c$z?etA?zDTSa*9Y3tZ5oV#=qD_(u`WUz{H0$G#Jy`&SIZCEiI z)g%+EXR<+&mPH(2jxRDFsWusE8BJ;&ay$(#`$A!08xceB)$5f~Okr^9z8348j1m7! z{o48l)i8Kzv^HOHM^wJ6^YAf`UEp=V4Ep?g4HH=Yn0_0}u+7U|su6-)5`9AI`JciF9<7fyB67&tb76KDG~T6B})F5*py}1YZEkrhA!$N9&R(DaYK0^j?|xo zE}E~s7xk3c@DC@bwe78(uuNb>TIKCC8B5&MgB8{iz)+zQgvmm?xCJr^qUAtB2{j_I zN-{;!n=}0^J+(i*?soHT@m9daW2<3Qx0q4yST4xUyFf-8dafxjK_O@zAV9WmMSHYz z{2&;>y^bDoRnyLo-!r!0dPaAlq{?VCQUbAMx-40O>2TAIcKvZsa!Em*J7v6H<3X{5 zTZixXD(J4CMjDhV1OYn4XQ>hF&uBO|8K-tTIN=311VHa1ZD09{>@}RrkMB`sYW_JU$>SSs8H^|l z`HH}yDJ_YDBeq#IhhuJxiI#X(d;6w}ix*NT+eU0elpe)S+nqMiMhtd%H{LqvPIMBO#tMd$S76xs z&v6GELrNMqu*f+87CGpD#5HpR2NUCuP7W3}X1|BGLJh5txRU5T>t!!UAKS@hz7y94 z8S5}CmQ_ks{8Y`Rp_mHyqitz?stY>G_fwRSVU#jt9P%g)r)+f-6nKMQW#M_ix*b(9 z+;VDe_aFP}eU-(xj`P{|HB=6|OZ*G!_Jw*goO38W2`XM#O!NSuYnu-Np`Gj3KoMqq zJOue(qd1%SoVdUvxt~vG0bwFafMxakWwvA)xz~*gaxCXR~@jJ-u$!sqm|K z*q5$h-k$?53>0XRl3b;CZZswn;30UIVj_v&&9W(}KlS&#tobzW_R)pw%p+9ie7B9w z&8}ws$g)wHHq6dJ%bG!WH)*$SV!bNyjlHwNM8cvoO}D+m1m~L+C>LL^G~C!~%;5u< z)=tjoVAPCMfi8KFd?mfx)?Mov5~47S@gCPWMzwp-gM2Ka7KSd!#C}F;vzv8DWguUD z;NH5{*c~47N)6Px`{fzOmG3#A!tF8%B2#a+%gJo~oSD4+lPijB`HJWOZl zOhcc-sFo%usX5h@){C{ifAIgoS=pq7?Yp2_*A{C%LS*5TOyiVtL;qPI>H{mTaKsR> z!Ny+C&B-zV5`?LMnusON*(_XkG`!~6RHN$q!0jbZ7%v5qW7Y7%epsN=SD7K%dXhTS z&0@bj)O}fG)RVin9n;VbYcqjaj-eY$bF4Zg zsfmd^F3-hx(E3V;N>1Xu8A-Y*+C4mj5o|ZU+NU>q!$@FO3)Mv6bx0u_X{$(K)&&E| zLoiINR`dFA>6COurrWrR6yN2d?V-F$U0Qf@j#b;eVq2 z`0>uYz5-u4tqI9^oi;h`qk#5`{yd}Zu)^&p7Sx`^r*Bl!bGn`%9O=q+v1=$BuT5?= zjf=k)7d8)-Qw&Gu9YYT;punriSk<_KS23fQdzFvUf|wldi`f-R4NbwkDs+!Mp`LCmOSRKhwsAo@x{INybgtjDe| zaC}x_M$aX_@x}C$&X6f5V?f6EG3<*hSv!Gc_p z5q69XItZH4dKTR#_gs2>?Bqxmr6$SAmirJx$vQZ#0nV0VVz$9f%oOK%{bvU&BGaVaN&B}}** zOQ0f>Oo38?%+ar?a0=cE%>}Sl2mTNZ)@3iZ^9Maj#jL1cHU0^WNq2Qro;aVV2AM6R z^4T8MYD02KN!QGLUt5-`$qOocagd_{sX0k;^r48xZtOlA!w*f!RNdbwfGb!_UmZ!r zNeGsY_z3Bv3!sN7F;{>)Vw<|3Uk6HTksrxvsHC)zd+t@1YL!XroDY8qiZ;Y>hEa(ymlV)dhN>9U5sfcrbnUC7jOnb$_6)&=2kanF-yDbv-Z7!O*(6#_>s>#T;N z9OrP~V#0-oJ7r{lj{J@{F88bzek)aKc?o8iZBCglcn;FVj_E7y%_(}Bwg^uM&Pw+w zse#5#Byj1yiKF7ZEW~H+48EfO9PxbyRL|0YAOrz6J(2$kLIXRy|6vdazCVu4_#QdD z-#A`LZXro$y?7-G817N9g!Yu$^O8EPfhr|C>CV$&p9Rno;H@VbVe{GJ3!>!yY-!U5R<4>`|_ z(Y_pBtBN^3q>ec(hWu|a(96Qit@y~RBm=M90RcBl&-!bX7cfoz&jfab36|$Q5Y9+Ip9-W? z|HY>|J384~{}0jshi3qwFz(-8m1HNILN>jMzFX#3UndnmxF8i&+;*N=)(Fsl^LxZnx^N}blQ9K zY6maokX)^Dnj0ufrgmp5HQfv09mfh=lJm zN?cH6Z`Jqn2Q6s)yxknXv!dJ#FFner#P_{d{6-UQ`a^y+{+t8L>%sW--`zhDP&!~m z^v|sQKfmd}&i;YJuOR(*1%GE1|5ZUA&=LQIWBjY&uiVN%MSlSMk-so4e--{ao9$0g z03ZiQSo;5S+kVyaE5+$gP1A7yeu)1dJpHQW*NNJnT1qi~*YfLp?N91hP5LjKm-hXeEgePaW|Z&&{hQvIh=