From f923f4d6674c7c7ad6f5347985a16725f31d043c Mon Sep 17 00:00:00 2001 From: zhengyongxing Date: Tue, 12 Jan 2021 10:48:55 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=AC=E4=BC=9A=E4=BF=A1=E6=81=AF=E7=99=BB?= =?UTF-8?q?=E8=AE=B0=E4=BF=A1=E6=81=AF=E8=A1=A5=E5=85=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SocietyInfoController.class.php | 131 +++++++++++---- Application/Admin/View/SocietyInfo/add.html | 12 +- Application/Admin/View/SocietyInfo/edit.html | 12 +- Application/Admin/View/SocietyInfo/lists.html | 153 ++++++++++++------ Public/Admin/excel/social_template.xls | Bin 0 -> 39895 bytes 5 files changed, 214 insertions(+), 94 deletions(-) create mode 100644 Public/Admin/excel/social_template.xls diff --git a/Application/Admin/Controller/SocietyInfoController.class.php b/Application/Admin/Controller/SocietyInfoController.class.php index f2182a0b0..85a72bd25 100644 --- a/Application/Admin/Controller/SocietyInfoController.class.php +++ b/Application/Admin/Controller/SocietyInfoController.class.php @@ -114,7 +114,9 @@ class SocietyInfoController extends ThinkController $v['num'] = $k+1+intval((I('get.p', 0)?I('get.p', 0):1)-1)*$row; $v['sociaty_level_str'] = $this->level[$v['sociaty_level']]; - if (time() - $v['communication_time'] > $gap * 86400) + if (time() - $v['communication_time'] > $gap * 86400 + && $v['is_potential'] == 1 + ) $v['is_gap_time'] = 1; } @@ -299,9 +301,24 @@ class SocietyInfoController extends ThinkController if ($_POST) { $save = I("post."); + if (empty($save['province'])) { + $this->error("省份为必填项"); + } + if (empty($save['city'])) { + $this->error("城市为必填项"); + } if (empty($save['company_name'])) { $this->error("公司为必填项"); } + if (empty($save['game_types'])) { + $this->error("游戏类型为必填项"); + } + foreach ($save['game_types'] as $v) { + $save['game_type'] .= $v . "/"; + } + + $save['game_type'] = trim($save['game_type'], '/'); +// dump($save['game_type']);die(); if ($save['province'] == "请选择省份") $save['province'] = ''; if ($save['city'] == "请选择城市") $save['city'] = ''; $save['create_time'] = time(); @@ -331,6 +348,15 @@ class SocietyInfoController extends ThinkController $save['province'] = ''; $save['city'] = ''; } + if (empty($save['city'])) { + $this->error("城市为必填项"); + } + if (empty($save['company_name'])) { + $this->error("公司为必填项"); + } + if (empty($save['game_type'])) { + $this->error("游戏类型为必填项"); + } $save['game_type'] = trim($save['game_type'], '/'); $save['communication_time'] = time(); @@ -463,6 +489,7 @@ class SocietyInfoController extends ThinkController // 导入 public function excelImport() { + header("Content-Type:text/html;charset=utf-8"); $upload = new \Think\Upload();// 实例化上传类 $upload->maxSize = 3145728 ;// 设置附件上传大小 @@ -473,8 +500,10 @@ class SocietyInfoController extends ThinkController $info = $upload->uploadOne($_FILES['excelData']); $filename = './Uploads/'.$info['savepath'].$info['savename']; $exts = $info['ext']; + if(!$info) {// 上传错误提示错误信息 - $this->error($upload->getError()); + $this->ajaxReturn(['msg'=>$upload->getError(),"status"=>0]); +// $this->error($upload->getError()); } // 上传成功 $datas = $this->parseExcelIn($filename, $exts); @@ -489,68 +518,83 @@ class SocietyInfoController extends ThinkController if ($flag == 0) continue; if ($k == 1) continue; $inserts[$k-2]['province'] = $v['A'] ?? ''; + if (!$v['A']) { + $this->ajaxReturn(['msg'=>"省份不能为空".$k,"status"=>0]); + } + $inserts[$k-2]['city'] = $v['B'] ?? ''; + if (!$v['B']) { + $this->ajaxReturn(['msg'=>"城市不能为空".$k,"status"=>0]); + } + $inserts[$k-2]['company_name'] = $v['C'] ?? ''; if (mb_strlen($inserts[$k-2]['company_name'], "utf-8") > 100) { - $this->error("公司名太长".$k); + $this->ajaxReturn(['msg'=>"公司名太长".$k,"status"=>0]); } if (!$inserts[$k-2]['company_name']) { - $this->error("公司不能为空".$k); + $this->ajaxReturn(['msg'=>"公司不能为空".$k,"status"=>0]); } $inserts[$k-2]['register_capital'] = $v['D'] ?? ''; if (strlen($inserts[$k-2]['register_capital']) > 50) { - $this->error("推荐人太长".$k); + $this->ajaxReturn(['msg'=>"推荐人太长".$k,"status"=>0]); } $inserts[$k-2]['functionary'] = $v['E'] ?? ''; if (strlen($inserts[$k-2]['functionary']) > 50) { - $this->error("负责人太长".$k); + $this->ajaxReturn(['msg'=>"负责人太长".$k,"status"=>0]); } $inserts[$k-2]['phone'] = $v['F'] ?? ''; if (strlen($inserts[$k-2]['phone']) > 50) { - $this->error("手机号太长".$k); + $this->ajaxReturn(['msg'=>"手机号太长".$k,"status"=>0]); } $inserts[$k-2]['wechat'] = $v['G'] ?? ''; if (strlen($inserts[$k-2]['wechat']) > 50) { - $this->error("微信号太长".$k); + $this->ajaxReturn(['msg'=>"微信号太长".$k,"status"=>0]); } $inserts[$k-2]['qq'] = $v['H'] ?? ''; if (strlen($inserts[$k-2]['qq']) > 50) { - $this->error("qq号太长".$k); + $this->ajaxReturn(['msg'=>"qq号太长".$k,"status"=>0]); } $inserts[$k-2]['game_type'] = $v['I'] ?? ''; $inserts[$k-2]['game_name'] = $v['J'] ?? ''; if (strlen($inserts[$k-2]['game_name']) > 50) { - $this->error("游戏名太长".$k); + $this->ajaxReturn(['msg'=>"游戏名太长".$k,"status"=>0]); } $inserts[$k-2]['join_platform'] = $v['K'] ?? ''; if (strlen($inserts[$k-2]['join_platform']) > 50) { - $this->error("合作平台太长".$k); + $this->ajaxReturn(['msg'=>"合作平台太长".$k,"status"=>0]); } $inserts[$k-2]['promote_scale'] = $v['L'] ?? ''; if (strlen($inserts[$k-2]['promote_scale']) > 50) { - $this->error("推广规模太长".$k); + $this->ajaxReturn(['msg'=>"推广规模太长".$k,"status"=>0]); } + $inserts[$k-2]['turnover'] = $v['M'] ?? ''; if (strlen($inserts[$k-2]['turnover']) > 50) { - $this->error("流水太长".$k); + $this->ajaxReturn(['msg'=>"公会等级".$k,"status"=>0]); + } + + $inserts[$k-2]['turnover'] = $v['N'] ?? ''; + if (strlen($inserts[$k-2]['turnover']) > 50) { + $this->ajaxReturn(['msg'=>"流水太长".$k,"status"=>0]); } - $inserts[$k-2]['address'] = $v['N'] ?? ''; + $inserts[$k-2]['address'] = $v['O'] ?? ''; if (mb_strlen($inserts[$k-2]['address'], 'utf-8') > 100) { - $this->error("地址太长".$k); + $this->ajaxReturn(['msg'=>"地址太长".$k,"status"=>0]); } - $inserts[$k-2]['league_info'] = $v['O'] ?? ''; + $inserts[$k-2]['league_info'] = $v['P'] ?? ''; if (strlen($inserts[$k-2]['league_info']) > 100) { - $this->error("联盟信息太长".$k); + $this->ajaxReturn(['msg'=>"联盟信息太长".$k,"status"=>0]); } - $inserts[$k-2]['is_potential'] = $v['P']=="是" ? 1 : 0; - $inserts[$k-2]['remark'] = $v['Q'] ?? ''; + $inserts[$k-2]['is_potential'] = $v['Q']=="是" ? 1 : 0; + $inserts[$k-2]['remark'] = $v['R'] ?? ''; if (strlen($inserts[$k-2]['remark']) > 100) { - $this->error("备注太长".$k); + $this->ajaxReturn(['msg'=>"备注太长".$k,"status"=>0]); } - $inserts[$k-2]['interface_person'] = $v['R'] ?? ''; + $inserts[$k-2]['interface_person'] = $v['S'] ?? ''; if (strlen($inserts[$k-2]['interface_person']) > 50) { - $this->error("对接人太长".$k); + $this->ajaxReturn(['msg'=>"对接人太长".$k,"status"=>0]); } + $inserts[$k-2]['create_time'] = time(); $inserts[$k-2]['update_time'] = time(); $inserts[$k-2]['communication_time'] = time(); @@ -559,13 +603,14 @@ class SocietyInfoController extends ThinkController $gameTypes = explode('/', $v['I']); foreach ($gameTypes as $gameType) { if (!M('game_type', 'tab_')->where(["type_name" => $gameType])->find()) { - $this->error("游戏类型有误:{$gameType}"); + $this->ajaxReturn(['msg'=>"游戏类型有误:{$gameType}","status"=>0]); return; } } } M('society_info', 'tab_')->addAll($inserts); - $this->success("导入成功"); + $this->ajaxReturn(['msg'=>"导入成功","status"=>1]); +// $this->success("导入成功"); } private function parseExcelIn($filename, $exts) { @@ -575,13 +620,13 @@ class SocietyInfoController extends ThinkController //创建PHPExcel对象,注意,不能少了\ $PHPExcel=new \PHPExcel(); //如果excel文件后缀名为.xls,导入这个类 - if($exts == 'xls'){ +// if($exts == 'xls'){ //import("Org.Util.PHPExcel.Reader.Excel5"); $PHPReader=new \PHPExcel_Reader_Excel5(); - }else if($exts == 'xlsx'){ - //import("Org.Util.PHPExcel.Reader.Excel2007"); - $PHPReader=new \PHPExcel_Reader_Excel2007(); - } +// }else if($exts == 'xlsx'){ +// //import("Org.Util.PHPExcel.Reader.Excel2007"); +// $PHPReader=new \PHPExcel_Reader_Excel2007(); +// } //载入文件 $PHPExcel=$PHPReader->load($filename); //获取表中的第一个工作表,如果要获取第二个,把0改为1,依次类推 @@ -606,4 +651,32 @@ class SocietyInfoController extends ThinkController return $data; } + //模板导出 + public function downloadSocial() + { + header("Content-type: text/html; charset=utf-8"); + error_reporting(E_ALL); + ini_set('display_errors', TRUE); + ini_set('display_startup_errors', TRUE); + + define('EOL',(PHP_SAPI == 'cli') ? PHP_EOL : '
'); + + Vendor("PHPExcel.PHPExcel"); + $objPHPExcel = new \PHPExcel(); + $objReader = \PHPExcel_IOFactory::createReader('Excel2007'); + + //设置模板文件 + $objPHPExcel = $objReader->load("Public/Admin/excel/social_template.xls"); + + $fileName = "公会信息模板"; + + ob_end_clean();//清除缓冲区,避免乱码 + header('pragma:public'); + header('Content-type:application/vnd.ms-excel;charset=utf-8;name="' . $fileName .'".xls'); + header("Content-Disposition:attachment;filename={$fileName}.xls");//attachment新窗口打印inline本窗口打印 + $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); + $objWriter->save('php://output'); + exit; + } + } diff --git a/Application/Admin/View/SocietyInfo/add.html b/Application/Admin/View/SocietyInfo/add.html index d6257700f..b6fc92202 100644 --- a/Application/Admin/View/SocietyInfo/add.html +++ b/Application/Admin/View/SocietyInfo/add.html @@ -32,7 +32,7 @@ - + - + - - + +
省份:*省份: @@ -40,7 +40,7 @@
城市:*城市: @@ -84,8 +84,8 @@
游戏类型:*游戏类型: {$vo['type_name']}: @@ -236,10 +236,10 @@ var cres = $('form').serializeArray(); console.log(cres); if ($("#province").val() == "请选择省份" || !$("#province").val()) { - // layer.msg('请选择省份');return ; + layer.msg('请选择省份');return ; } if (!$("#city").val()) { - // layer.msg('请选择城市');return ; + layer.msg('请选择城市');return ; } if (!$("#company_name").val()) { layer.msg('请输入公司名');return ; diff --git a/Application/Admin/View/SocietyInfo/edit.html b/Application/Admin/View/SocietyInfo/edit.html index 0f2d6612e..604167269 100644 --- a/Application/Admin/View/SocietyInfo/edit.html +++ b/Application/Admin/View/SocietyInfo/edit.html @@ -33,7 +33,7 @@ - + - + - + @@ -85,7 +85,7 @@ - +
省份:*省份: @@ -41,7 +41,7 @@
城市:*城市: @@ -49,7 +49,7 @@
公司:*公司:
游戏类型:*游戏类型: @@ -268,10 +268,10 @@ $("#submit").on("click",function(){ var cres = $('form').serializeArray(); if ($("#province").val() == "请选择省份" || !$("#province").val()) { - // layer.msg('请选择省份');return ; + layer.msg('请选择省份');return ; } if (!$("#city").val()) { - // layer.msg('请选择城市');return ; + layer.msg('请选择城市');return ; } if (!$("#company_name").val()) { layer.msg('请输入公司名');return ; diff --git a/Application/Admin/View/SocietyInfo/lists.html b/Application/Admin/View/SocietyInfo/lists.html index 30e46c5fc..9b3e5f7da 100644 --- a/Application/Admin/View/SocietyInfo/lists.html +++ b/Application/Admin/View/SocietyInfo/lists.html @@ -126,7 +126,8 @@
- + +
@@ -220,58 +221,58 @@
- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
{$_page|default=''} @@ -375,6 +376,12 @@ //导航高亮 highlight_subnav("{:U('lists')}"); $(function(){ + $("#downloads").on("click",function(){ + var url = $(this).attr("url"); + window.location.href = url; + return false;; + + }); $("#excel_in").click(function () { $(".search_list").hide(); $(".excel_list").show(); @@ -382,6 +389,46 @@ $(".model").show(); return false; }); + + $("#submit").click(function () { + var fileObj = document.getElementById("excelData").files[0]; // js 获取文件对象 + var url = $(this).attr('url'); + var oReq = new XMLHttpRequest(); + + var formFile = new FormData(); + formFile.append("excelData", fileObj,"excelData.xlsx"); //加入文件对象 + + layer.confirm('【提示】是否确认财务部编辑保存', { + btn: ['确认','取消'], + title:false + }, function(index){ + $.ajax({ + url:url, + type:"post", + data:formFile, + dataType:'json', + cache: false, + processData: false, + contentType: false, + success:function(data){ + if (data.status == 1) { + layer.msg(data.msg); + setTimeout(function(){ + // window.parent.reload() + window.location.href = "{:U('lists')}"; + },2000) + + } else { + layer.msg(data.msg); + } + + } + }) + }); + + return false; + }); + $("#excel_back").click(function () { $(".search_list").show(); $(".excel_list").hide(); diff --git a/Public/Admin/excel/social_template.xls b/Public/Admin/excel/social_template.xls new file mode 100644 index 0000000000000000000000000000000000000000..0c9502a7800b0a1c4cf3ea6c1a89e35578627285 GIT binary patch literal 39895 zcmeHw2Q=JE8@H0^y+;kvdqgKXiReK@2~k#w&I+PzqOIsHI;%yB8ieQ(2|_|b5Jd02 z_hr8&_uiEE-uJG2=l#BW9shIKJqb&*p17)(F$i-S@j*X%IJcmel&}`IgeMPvU9dmt?H>3B#^F zGuzN)d&`;L&L2_~eC1wxJ9VD}*E81Kd$Rmxq{6Y$A1!rW1=Wp5;6ruNridO1z=ZfO zbu4{+V={lvAser7r8low(;9_{ESdV|5(R%_^#f>3XU*nAfqCmTj}kt0_8#(1%&CdX z&bFw4rxRAV0p}Ub7Dp188OqyFz2DOMBzk>b*o40{-)gp<7(6$>y}UlYzc;M-_OYwI zZBN;Tb!Bv@zAUF;sESl0p})#2|8b(J-1ym-Af)i!mt3;ozF`BC7wJq$Fd3V;uzK&; zEsKkhUPwRk9P6>9yCIzCv2dOfe$R7LdndpF(?g>)lX) zb9o*}r#>d$;nNu!fI?H3uIug*?JVnVI@~FUmK!&eA=Mt{q?wko8DKKEg-7D7=rDEG zjxr}6U#ap%QV1aR^W-$s&X%=~i3oxs!7*QFro+ND+F{>oN8*I@x??=v;;6@1)8W5Z<>xl+pd z9l}6VD3y!i)JP0iTvH#mbE{M)+B#7l=q5%AMBOf&f7jseGdib~*m^24i_z+NAgn*;qvPU=BOTb8XV7~J`CYp^Kn2-K z=4^z*XVnBvf;PfF6$Y(n z%8E=N;YF|~#h{l1(>XTT7-q+MKcWUfYM4JYOf-hNz$tFJ+5UiCe-10CaCW)b90JOp z7r^^kz}4Q#+Sw8S0R9X<$wN3*=68^gxSCOsDE_1DA<6kedFa=VzSf;$x4j!SwU{>K ztTES-^(bC#NVA>hR>Lq*r*tSP{%xe0Bb_Q0Z2leAHNz74)5xI%ppP zTW@I_gieCnYC+Jo+08cE{WWNh5S{nla)%lnXs>Ux&8~YJwzbeBR10#4&8jVe_Sa^? zi;%rd@E~NbtriM_H9}xpYul3Euw5{|QO)o<=+5qD+y4G|i#=>(zN{9uwTWL_1=~}D zc<(N8sO|4euktL`F4ebzb~iQ$B|vVlj#0Ip@kx6lanSxmpV0say57?rzGM%9xk@xV zs@-274X4Y7ctaa`;LTcD_x0RgTHWRG+^>c0joR1Z)6Lg9H+JEzSf4ItHA(}Q4SH|!Z8t6& zN$l}?!N&KBYoXiEUM{befwouG=(gEQ*9PJ3?1nR{01T?E_TF7MqeeTpT`S?eHM+Ud zHt6XNTa3e(1Z^$1fFWDv?i(t*%v+mkkp0Z+7e1+F;rm-MyYY)4=*qIBq_PAQy1Los z?N+z>5w^OOvlI?R8Qfphc?=VW-db(6Pa2)H_ug6R-h^#!w~TeP!8RKqHPF3Xi^Wvj z+xu&cEA@@FdwbZB=GhH;_$XhHgn;%Y;=(;I)Ov2b=UIf!E)T-CcASl>_B!fw$Oqw# zT`Op-*liVAA1KD49HmY`mihAv?lY2qmm+&ka?L)Ua z=mwYa8g(W&2M5Z0mzV7E7q=>)pVvTjo;9_rqcCX8sw8L^0-XSP-r11#+TisTe9~qZ z0#TVQjvKWo-kIy%>Zy|OxaeK_xNRT=!Zll5HfoWxGgrA>?Bcay2er|JT%5u#rn&e@ z$GowAL!R5H8{O;PMkaU%i$(!|ok=u|cE%b=dGQnZwD_IJ1?_;fB_pG3`|W}4Ng;JH z-g==AwKbr`8P^=1@lnNH7zhwWH|}3Ek>fc&Y*hPUig-MEZvgQvI7!~?XFYA20Spf z{Y+6BkYa2vOc53kJ#6!WB0oU?o(9T(*1{gT2BPnsNA$fuf}aCm1M2(2b_ljZ@Cpy2 zy%Tqc{Aj&2m5D(g9bwhPX+~Rwp&O7Z(?y>YVcW!QM(2bf5|Av@N*@f_N1buJ>po!g#rU31V!o6e7sIN_E18OYjcHyHQM%tG()t9K1` z`_u4YB2q^Q*Jo@^!4XZ0ma#fM+ywu3vSjov5!y|nX2eCfJ^pjDc=U}CnoS~OL{7Nn z+GoI4*w4tbIU67G#$xKc9hC%U(-%j$H!+x(T`C$VTphZWb*0D z*hhJ7g*INrT-+vU;BzlTs27QI{%jnpY>4uyB(w)xvvd;iKC~3W`_O*S2iT?*?2Ku` z8?pb+Sp{RmFS`5T5|r_X4fMN|@wP5%NC2G-Gkr&dZj-nfVG)k5f3B<`eP6_lCW$cu zCma#~WLa+d?g;${j`3nGFnLZ`gklrF85tkGt{6%b*Iq!|$+!&P1kHFE2O5g;}h;Cw!jlAWlu7b0Z1QvpOty*9jFJyK0n8~AOP>?r(!^{=RfOFGrj`k#e-z=|#56|f zl*5O$Is+GjwU0+&w9Zi&t$h?mlOAPmyg6y|0p@AMcf%1OGdvcA(0JoHTWr^cjng5F zV+E$$V1$8b_WC|zNCU@pnCQQ!$rzx@joN*okx^baum2~V#9BRAj*cXULPwE9m7~ZZ z@e$;3@bwYo@PF52O|t3k+5%357xVu~vo+$&jx39zN03GPqsU_4QDjl@D6;tPYw{|L z@&>5h2qA>TTJ48}(^TdW#%1s*Ytf>~5dhWoC^BAolo7vi1VDgsA7Ofc$d7;?wZZ=b zHY*qp^dA@*dPi7{j?%*;HTp=yeWVdQ#!bdrU4pi*!FFzz>_syxc4XI)7 z;8ZL}r5Zn=x_DHo2e05%nn$IQuZL4v9hGYRfC_X}s)w)PR1c0yrTqp@m2*_8(+zN{ zx+76Fl+!Ns-x8Og7`$~#h1Mrqu{g`Uoxv)hmT zLN*<$54F{>_02`dMQC3z*aGff9W{zwt)-=HF52JOoMen_v5#z#<0dXw9^?D7FTg8* zOeoT;`GRSc<;_L3e>=CPW8}DNw) zXd8W7aW_l0{rq$cP_=^bMzr0z1JU<*Gz-w}QhUVlD^ufy?e`7-`Ll^~@{Y^mwbA9e zt!w8jR|xo35}DpdlPR`jX}617MVF}bGR;ThDK=(lwu?+h0aYqO4`neWUk9KonUa6j zX`AbBmxiy>bt1(7Dr~Y$o?Wlj4{byr)elX3EBk@pDwbbOkC7|-n&NDhO1q#{T#1?} zBTclb;$)UmyTG&{!vV6pRv5+s_J9>WP2*(sv=gAE3$YjQ zVaAt6z)*oNr~}h?G-KC0rm_A|EfKL*j^|4JOKkt=>rD;i1HYtT*q$gDhpO;#RaYq| zcNPZn8b*DW^AtXe(OV|+Dey7~V3wguweqwfuHg>pmjTIZbQ^}4BR=d7X- zv`CWk$=h0r_U}|gov5Dwd}ZNR5d-|qy+w|=>dD%&GYvfbcYe=r?!FVR;&+bWe}S`f z)PU!kliUz--C$onM26$PKcmQl9DfU5+ykdqaIgf1|B7u{}v?)MmXYL z&2?gu9DwApwX{YJ2K)aAw;w_CbUgu#;|>`8zXTW@CxCIR0VC6Z2QpaRxwUf>m=npb zh?uGB3O7|J0lJ`zHx$QK^nW)i|01vNcZKU;;Ltfq>ifgfkONQZtN(@=EeNX^7h_K1 zXU9B#M*f|x>Wf%vFx*znII&d^rR%tw;BZ^D>YJ^424Pz@?w_f8avv^j-#b`U3~TuR zEOGt!1@0?$#vS_6k84)NuZ33O{_yXt5*);o47fi$=fod=tamoR{oy;`{NVt^{oyCc zp2yuE{#~*s58^sT_KA*h+;xoVU(qqj{+T+)*Hrc6no#vi$u_^1Lj?DSSAI*;i9fPyFG>-BykJ<_|AGJa?<;MD;xG zs%OQoEF?O|%T~=-9Amft;fxiPXvDV499JJY{OAL(Z$}@nBfK-Qpry!L^oI0F#Qpdl zqm%T_iJ^nA6XRry`)`~2kEOnsIaZP%MXNR|Z zvsJqhw^emdPSH8mr|A5c>WTP5a+2!#HI4ZDgyX+YHvWC<%|Bl)`7zbg1@Z9NNvh{T z`0TgyZ@-;Iovr)ZDKGzZ&;P$*`585^|LzbSbc7FxRymfMXZFIx%IE#zb*jHSCjZCX z20y464i$g11@G$)g+tKz7wmwBZz%aL*^>t0OpKFc&*PoDHD#S|4?4WWIC~L(VQ~wD z4z|3t-2uO)*L!n9=bKhhb2y42{r_m{?Hz2D9PKwV^%98qY)!bh`!I7A^^$ z9|d{uIC;SqB|&abslom6Hu%LCec=AxHqdDI_QWJU$X0Sz4T|1884lXrU2210J-qQ4 z%C^4VlOfBrxW-3(gNmzZOtbQ4y=|NN$l6s)qolT z_SUvX!A7-J_C|T|D~cN)ZEx>2^31b%?%iB%41a}RyEob~33G$4?2p4x|N5e9%&&J- z11$lzfWzyqN#K9LKmx0dNa@J0Y2QUdLW-pNdVM(jKJ2f>4u2osUOlg?X5S}BQj7oD z^(_2Gah6glbeEvd&yw;~s9xKFX{{1suWQ0DVpsH{>K(m{Twh@vhg><&Ys2vYr4k5X z)(7XI?vQR=zEVWdqSTH?)zt}>V*q)=21n1itoQl`rpq!gjyv|{+{nKZ_*#OlL)g;8 zHDFJPiZ%+X(e$00a_>O$<;C8v-NhSklGqsur3)oulU~gGUtvmm5VU4Y(b6JLfBv1y zi@-u39YU=J6guSoK<%!lo#srh_&3x;&Ykt};7gZ~mQ`u*YYyC`sA{+}gABQUk69&| z6iqC(i(jS{5Qhm2)a^r+F!knV#E$_}#9}e`8g@dfn!7r&29(LqKR2;8zA*@GcbWEC z2EJb+sbjU!o9))ux$U%r_VN>7e)p`4$MfV=Jk?&I>eNAk=}d_~S07$9E3AB-8^`Sg15k{9<5(g&#k z($L667Be5Oz!B~+1s{|5NcKbq@y}#y3@F>HBGyi;X!Y&#)9td<}?rm^^#NJ+IBh!-Yy-V_25ejk{`ePV0OBlcl0gg;8=NxND>j^Y1PUGFX zjX9l)MKhEqVh(tL=NRg$Bel$mY6$6fHKXw}$+pCtq%s~u+7z~+;l6_FAiK(b-Ay>y z*J;A!+H0Ddp4S^HgH0QsSL>o^U%^`}C7=|=rRwvMMKS+WhzD z39?cDU|=N9a(tFV`yHO$$L7f~Z`d`(uNCOQ#)CthqiF7AZ~0Z73DEF3UB)OU9@uwt|_ixr>MAlEGw zC?ekm-cVvD9?8il#y;13dqaThp=Wj=h2Q8oev=E1ckA{5CvoQb@%v{TpED>W9NPvc{1&uRx5LnSrk z7g-!mKa=R9T^hc9{btsMhx3liZ{V+XL3lLy!ee8$REwb~J*xD&{bQ*Hss<&po|e zt(!VuEib?JI^+FQ3ti-QSo+c&D!bhz!^!%2dDoRF3k3LvUk0~O*54c;U~-7`Tci67 zd%TpeH%yqvy_=Qk&MqkV={_fAn%# z!}Ao3KhMNvi`u(`eXy>5Td;(@PqA@hAtBYMAR*y?UDup}?lu5tZZ}(-P6J!}zAn;z ziJP!{>V;ky=E3%Nl(;OO*`S=RNSETf`BLyykzCIy){mKwUk#|AwM{IajX;*I0B~UC zT1Nut$n0kWxTX@<+T?e3Jtb`xcO&s3-4~~>875nb=ji>VbU0tkr<-VE^XX5_x>vf9IP!?D;Qe;w+k$5xt^LZf=T}8av8jwLE|}ba*k77ijAH99XcKCP7eJGB z(5{y-8n*;EwO_FkDiyWTOO7{nO}OOhoJo!&7okF&q1XvR%pDW+nV<8M%5NWDt9WB0S4W{fUQFz9Y&4V?1VZSCQ0KH|wR(g(NEUc~+SZ^b$S@@Ht|lMO;ou_v1J%{{aJU0Jk280^C&X+tPkDY9JpJ> zGoep=9#e_h-ib4s!>w3I$9@2M@W7?%elFUhsRFD$0d*sxr|WmBjrGyAOXT*%@kLd0 zIxPvl#61o+?I)}K$wzbeW%xQ* zE{F~qn#7L0b?9+H)zNHW5lXLlmPp?L9EuJvcr31~A!%TXF1=r1MlFMB!en5r?V1d| zlFit~F-%G6y!s~bQGs*ZHDDBGM{obxxmT1A8sfl|yqRW?1cf}y$m_(}*ETlZ!dQjR z7C${3wcK^M9>z2RlOyUXy?G`_H)vy;kEF8v6^ELmY??CnxG3Khb&tm) zXHLId`n(WA^zQ8&37}T~=pWd`qM=b&k)1UT~3y=reCen5B{`Fh=4k zFh&q6FghC2Rn}Q{yAoFk>%OKjc@T#UXx%ASmm8jzNyx2fj?qxi8F_1>pVd;Fn68zK z=|D=T5!m{wT1sko2<3jRM6-Im5Hm$(YL{5_z1Pf}1#^jc-E%>@fW0{%V9xZIu)}E7 z0Cj2-ty_ivSihqej9IZ*a*pZD7iKnSA(*VocobQ;kO_NljKEH7MK(6Shy3m(A`^X- zcoN-s9VM%IUsPDry)LW1IVuD88rzS{@}9NB9v;3m!KVjse4FOwfJuIM4fRC)m40)n zfmL|AH4AtBTF4ymJuYN3z?vk`?ASOpvG}QM_g=n@DDp5hbiXLs%~!Hce; zP(@ASB1mObq2v_^$@A;b4F#^W&Pg>XMWqqEV1BDDUPpe$z>KeX|0Rwz`qVvVr@P{F zJjQor$TI9s2WK_Oy)X~EFOtP(mWAw^%A-5>_64vYVnU7pXP5Ug?*9yy$7YNPy^ z2nE37!pSwEGh^e~r%*|EiSUC=8JhJNh0Gq_k}e`!EB5iD9KHT!F1*1@GqFc{Y7(h@ z%+RMWIdb;P;&&@P&5xtA*Fo_iBtROx7fbRlHoO8%K zm!-32TA@uy4jRgG+U2^rPef+kS~6pX$ET$lFv?`4+Fl_}W;k=dLNGxlDET_$x${x} z)erqc{A?e+xl~m6kRGMI3P+Y9!Gg4SaHtjcF~gQ(Kg zvLt`HeJK^+BZfH6;&e9bj=1+uYxo-EHJ{lhLO!6{LT<R@YVIh^tHJ)OD*t39# z5osPV7N;9F7i-*ZgP{97s**bd<(J*K7^j(MbQL|)gR@YB6*wzKJxd=fgH%nd73Z0` z!B=>&yh&%IS{dS+o|aW|K{!$7p|8Bu#9) z5B#hgh{EnSmD*JN*i+)-_RQMw+m`Twq|}e>nwKzV#~>h)i~DCa*fi1KU6V=*B7AHb z^RR=&xcp((o3ZH84mD5#^7@MiWu}c!J-M|VEFfCg1nLxPbT}*#qj_z(ARr!-vm-XJ ziG(lavnm}3?St}yc&Y|V$K#AKLRUN@Bv;jJ+%FP3NG<+E6jpmYH~mh#`K#aJC+Y|8 za3$WOvJEnSVHfFQwjf2HMsTGwo7pOcAX>}gQyVJAU3@o5K?kl{6 zkxx(;u{8pfB`Pm$k7h3K4TdfDr+BUa7&wa2ajrFGn_Ce~=<1nk$@e&uSQ(zu&n6X* z$|>{(JSdiEnnO87S`-bUR$G7ymBz(FFaQ923duXM20Y;ab!RrM~*f%y#5V@qb2T;lglp1uiBG7_}3 zh$^o04SufFGA{-^705_9)AhuP_mSwmI!a$`bG9!Uax8BNczs6DZdxa2+|v@5yTB)D zT>A)4c<|N2xFa^>jK3JB{#!vF13Fe@mFKej=bXE)y-G~Q#u{8B#^N-tiE412CIC7>iZ*z;7N)Ro#fFW|exRm( zHEu#s)#th1bYqBnx$fYsUmfq1{49-IE92C9RhY-dx_PM6Iq$kN{7$x0_1g5VzEmL1 zWb4=uaY9Y2oFr|0@wjcOuT^8Fi8_%g)J?c2#M#o= z31FrPbh5IuIMgp~qxw}TrAh8Cs_ft;l@|mHo^P1TCubf=D#0(jry*!;;b>vmD^`k( z3_>E#sjIw- zqHMu7Q&TOIo#DZk)88?&T^J?E&0LJn0F2g$D6nac7|6K9m~&QUJ>^emC{?sb;beZM z>uS(vw%pOLZq@b1JSh9T`E7+1HAXV6z7mY9QL16QH19z&SHi9*iBzp%O+=(?w0wvs z+@YnDyv2Tje_hf&{X?$Il4%f`m^!u@`$Avgb1Gb{SBp*DGeVjBr|Ck?2x)OL7Vaw# zPlu_snpKoC6BC}wFu(?d4+AZlwO57&3>nPO*ZDwe#%}n}Q|IKK8`(_y8@camhqHJ)-xAo5 zXpsDI5UXpdgjnE%I0pa0|2l}S_D}$p{(bItAQUDbscD5 zV9-c?3Q`FgiM8U!r6IWjqr>ehExLE9k6IvJIM7X9JY(;JBDrO?%|oAl2g2djYNyZ| zwIHH5vYteIK98qJ(&vZU<26UZ7lv6$RmnR{WOVmD#*$d#F>$UYsRnF9W{KGz7Dj&n zV@pc6E1k1}p*Ri7hiurL=O9Yi8=mBK;L$ND>R?Pcj|M5y%Y>XyV*_Hxfc&V zRa_`E8?h0Dyt^<8m0lP6YfmEFQ;1~b1h8@b$&KhCe7gz;|KA{7c(DH{!+lUPFRJaz zYhHqeMW022i5eAGQog9)+a}@Tk+P1fUI@>yQ zF(Fg7?E=S`R%D8cO$2F(uV?1xT7q?XG&GSmCl`s9Mb|6f+&ptGTzLckc+H?M;|8^k zoC%Evs&qk2Y45kCIyxp_)kS{PFKM|f>c^BZ3uEMKd_5NHE+Jra*=dC<$Mvsy`I}ev z&)7M>ltD2MXJZANos{rTI2L^^_Wfl3ox8W{d2t#ReXD&xdO5a-o>xdQY)I?Q^FT7? z09l%#E9obdL7LKa(|~aXI1sSX?Zn`>Y$Q^r-}u%@NZq&6w8kIdk_-d$wRyv}vvL>#_3LdiY&5wxM^T zC)-5#*6%tEKiL?N>fL2g2RlZL!KzKQpW_W?>@J*NdVrx4sxl=h^45*9L9nw4jci;w zP}&IWZa^B)sA}k(9lw^h^*(W#Q|y(9SJWNRV11l7i8znq!#`cPEoz( zIR4X|d%UdYYyp>Z+|yrO*ZQ*dc0hm~&`8VO0pNV&K;H9WT2xWalLTxs*VJd}U(j?g z4l%wt40ysgg8FIWCI4D%s?X9!D%(vI>3bnbilXz|wJ>Nkjsk~u5R=@efzDi`_3Oy0 zcOLfVn$tzct)!C1`)R&%Ll@9TE&8~$bBk9O{iV-Snyy?$HgSirB4m!j6=dr7%3dW5 zA9-8d2%NahU)p3{w^B86Hk-jEwM^>7fc%L97mLXEJ z1~_x~svRb&_JqLask=gEzRQ_@wiW9Y$lxo1!TJ5mU zYaLHwr6{qL2(>|i5z zYCV-9X9zl=`C4iIA2f#| z^WQ2vkjbylL1hPznZ2pHlfAIv@;#ZcgTuj0{Fxf- zv81~poH`axO?X(*@2yQbc<1kxn%X-7{){}PQYmg9PIebwnD_^BR@CpwU7X<&n{O}p za}L8PetQo3p>ygGZxH8FSIl<+^>aUeMzVv7zH({rd$Rw)wV&Vfvv&6FJ&qB7uB-k0 zhMygW-`+qG@bwLUxDgTWyA