From f7111fd89ab662de23dc20479746d68707283caa Mon Sep 17 00:00:00 2001 From: Nitipon094 <62160094@go.buu.ac.th> Date: Sun, 12 Mar 2023 16:20:19 +0700 Subject: [PATCH] search --- html/exhi/application/controllers/General.php | 90 +++++++++--------- .../application/models/general/M_general.php | 65 +++++++------ .../application/views/general/v_search.php | 10 +- html/exhi/image/profile_default.png | Bin 0 -> 11733 bytes 4 files changed, 86 insertions(+), 79 deletions(-) create mode 100644 html/exhi/image/profile_default.png diff --git a/html/exhi/application/controllers/General.php b/html/exhi/application/controllers/General.php index b2d860c..67af59a 100644 --- a/html/exhi/application/controllers/General.php +++ b/html/exhi/application/controllers/General.php @@ -114,7 +114,7 @@ class general extends Exhibition_Controller $tag = $_GET['tag']; $page = $_GET['page']; $limit = $_GET['limit']; - ($tag == '') ?: $tag = implode(',', $tag); + // ($tag == '') ?: $tag = implode(',', $tag); $this->load->model('general/M_general', 'pagination'); $data['pagination'] = $this->pagination->get_data_search_pagination($year, $grade, $cluster, $team, $company, $pname, $tag, $page, $limit)->result(); echo json_encode($data); @@ -235,49 +235,51 @@ class general extends Exhibition_Controller $this->load->view('general/v_search', $data); } - public function show_select($id){ - $this->load->model('project/M_project','project'); - $this->load->model('project_tag/M_project_tag','project_tag'); - $this->load->model('detail/M_detail','detail'); - $this->load->model('member/M_member','member'); - $this->load->model('cluster/M_cluster','cluster'); - $this->load->model('team/M_team','team'); - $this->load->model('instructor/M_instructor','instructor'); - $data['project'] = $this->project->get_project_by_id($id)->row(); - $select = ''; - if($data['project']->cluster_id != 0){ - $select = $this->cluster->get_cluster_by_id($data['project']->cluster_id)->row(); - }else if($data['project']->team_id != 0){ - $select = $this->team->get_team_by_id($data['project']->team_id)->row(); - }else{ - $select = $this->instructor->get_by_id($data['project']->instructor_id)->row(); - } - $data['project']->select = $select->name; - $data['project_tag'] = $this->project_tag->get_by_id($id)->result(); - $data['detail'] = $this->detail->get_detail_by_project_id($id)->result(); - $data['member'] = $this->member->get_member_frontend($id)->result(); - // echo '<pre>'; - // print_r($data); - // echo '</pre>'; - - $this->output_frontend('general/v_general_select', $data); - } + public function show_select($id) + { + $this->load->model('project/M_project', 'project'); + $this->load->model('project_tag/M_project_tag', 'project_tag'); + $this->load->model('detail/M_detail', 'detail'); + $this->load->model('member/M_member', 'member'); + $this->load->model('cluster/M_cluster', 'cluster'); + $this->load->model('team/M_team', 'team'); + $this->load->model('instructor/M_instructor', 'instructor'); + $data['project'] = $this->project->get_project_by_id($id)->row(); + $select = ''; + if ($data['project']->cluster_id != 0) { + $select = $this->cluster->get_cluster_by_id($data['project']->cluster_id)->row(); + } else if ($data['project']->team_id != 0) { + $select = $this->team->get_team_by_id($data['project']->team_id)->row(); + } else { + $select = $this->instructor->get_by_id($data['project']->instructor_id)->row(); + } + $data['project']->select = $select->name; + $data['project_tag'] = $this->project_tag->get_by_id($id)->result(); + $data['detail'] = $this->detail->get_detail_by_project_id($id)->result(); + $data['member'] = $this->member->get_member_frontend($id)->result(); + // echo '<pre>'; + // print_r($data); + // echo '</pre>'; - public function get_comment() - { - $id = $this->input->post('id'); - $this->load->model('general/M_general', 'general'); - $data['comment'] = $this->general->get_comment_all($id)->result(); - echo json_encode($data); - } + $this->output_frontend('general/v_general_select', $data); + } - public function insert_comment(){ - $sender = $this->input->post('sender'); - $detail = $this->input->post('detail'); - $id = $this->input->post('id'); - $this->load->model('general/M_general', 'general'); - $this->general->insert_comment($sender, $detail, date("Y-m-d"), $id); - $data['message'] = true; - echo json_encode($data); - } + public function get_comment() + { + $id = $this->input->post('id'); + $this->load->model('general/M_general', 'general'); + $data['comment'] = $this->general->get_comment_all($id)->result(); + echo json_encode($data); + } + + public function insert_comment() + { + $sender = $this->input->post('sender'); + $detail = $this->input->post('detail'); + $id = $this->input->post('id'); + $this->load->model('general/M_general', 'general'); + $this->general->insert_comment($sender, $detail, date("Y-m-d"), $id); + $data['message'] = true; + echo json_encode($data); + } } diff --git a/html/exhi/application/models/general/M_general.php b/html/exhi/application/models/general/M_general.php index f8f5017..431bf58 100644 --- a/html/exhi/application/models/general/M_general.php +++ b/html/exhi/application/models/general/M_general.php @@ -14,16 +14,12 @@ class M_general extends Da_general public function get_num_project($year) { - $sql = "SELECT count(project_id) AS cluster, team, project, all_project, by_year FROM project, - (SELECT count(project_id) AS team FROM project - WHERE status = 1 and team_id != 0 and YEAR(date) = $year) AS team, - (SELECT count(project_id) AS project FROM project - WHERE status = 1 and team_id = 0 AND cluster_id = 0 and YEAR(date) = $year) AS project, - (SELECT count(project_id) AS all_project FROM project - WHERE status = 1) AS all_project, - (SELECT count(project_id) as by_year FROM project - Where status = 1 and YEAR(date) = $year) as by_year - WHERE status = 1 and cluster_id != 0 and YEAR(date) = $year"; + $sql = "SELECT + (SELECT COUNT(project_id) FROM project WHERE status = 1) AS all_project, + (SELECT COUNT(project_id) FROM project WHERE status = 1 AND date = 2022) AS by_year, + (SELECT COUNT(project_id) FROM project WHERE status = 1 AND cluster_id != 0 AND date = 2022) AS cluster, + (SELECT COUNT(project_id) FROM project WHERE status = 1 AND team_id != 0 AND date = 2022) AS team, + (SELECT COUNT(project_id) FROM project WHERE status = 1 AND team_id = 0 AND cluster_id = 0 AND date = 2022) AS project;"; $query = $this->db->query($sql); return $query; } @@ -32,16 +28,16 @@ class M_general extends Da_general { $sql = "SELECT *,project.name_th as pj_name,cluster.name AS ct_name FROM {$this->db_name}.project JOIN cluster ON project.cluster_id = cluster.cluster_id - WHERE status = 1 AND project.cluster_id != 0 AND YEAR(date) = $year"; + WHERE status = 1 AND project.cluster_id != 0 AND date = $year"; $query = $this->db->query($sql); return $query; } public function get_project_year() { - $sql = "SELECT YEAR(date) AS year FROM {$this->db_name}.project + $sql = "SELECT date AS year FROM {$this->db_name}.project WHERE status = 1 - GROUP BY YEAR(date) + GROUP BY date ORDER BY year DESC"; $query = $this->db->query($sql); return $query; @@ -49,9 +45,9 @@ class M_general extends Da_general public function get_project_2_year() { - $sql = "SELECT YEAR(date) AS year FROM {$this->db_name}.project + $sql = "SELECT date AS year FROM {$this->db_name}.project WHERE status = 1 AND cluster_id != 0 - GROUP BY YEAR(date) + GROUP BY date ORDER BY year DESC"; $query = $this->db->query($sql); return $query; @@ -61,16 +57,16 @@ class M_general extends Da_general { $sql = "SELECT *,project.name_th as pj_name,team.name AS t_name FROM {$this->db_name}.project JOIN team ON project.team_id = team.team_id - WHERE status = 1 AND project.team_id !=0 AND YEAR(date) = $year"; + WHERE status = 1 AND project.team_id !=0 AND date = $year"; $query = $this->db->query($sql); return $query; } public function get_project_3_year() { - $sql = "SELECT YEAR(date) AS year FROM {$this->db_name}.project + $sql = "SELECT date AS year FROM {$this->db_name}.project WHERE status = 1 AND team_id != 0 - GROUP BY YEAR(date) + GROUP BY date ORDER BY year DESC"; $query = $this->db->query($sql); return $query; @@ -80,16 +76,16 @@ class M_general extends Da_general { $sql = "SELECT project_id, name_th as pj_name, image_logo, image_cover, user.student_id, user.first_name, user.last_name FROM {$this->db_name}.project join user on project.user_id = user.user_id - Where project.status = 1 AND cluster_id = 0 AND team_id = 0 AND YEAR(date) = $year"; + Where project.status = 1 AND cluster_id = 0 AND team_id = 0 AND date = $year"; $query = $this->db->query($sql); return $query; } public function get_project_4_year() { - $sql = "SELECT YEAR(date) AS year FROM {$this->db_name}.project + $sql = "SELECT date AS year FROM {$this->db_name}.project WHERE status = 1 AND cluster_id = 0 AND team_id = 0 - GROUP BY YEAR(date) + GROUP BY date ORDER BY year DESC"; $query = $this->db->query($sql); return $query; @@ -100,7 +96,7 @@ class M_general extends Da_general $offset = ($page - 1) * $limit; $sql = "SELECT project_id, name_th as pj_name, image_logo, image_cover, user.student_id, user.first_name, user.last_name FROM {$this->db_name}.project join user on project.user_id = user.user_id - Where project.status = 1 AND cluster_id = 0 AND team_id = 0 AND YEAR(date) = $year + Where project.status = 1 AND cluster_id = 0 AND team_id = 0 AND date = $year LIMIT $limit OFFSET $offset"; $query = $this->db->query($sql); return $query; @@ -108,6 +104,8 @@ class M_general extends Da_general public function get_data_search_pagination($year, $grade, $cluster, $team, $company, $pname, $tag, $page, $limit) { + $having_count = ($tag == '') ? $having_count = '' : $having_count = 'HAVING COUNT(DISTINCT project_tag.tag_id) = ' . count($tag); + ($tag == '') ?: $tag = implode(',', $tag); $tag = ($tag == '') ? $tag = 'AND (project_tag.tag_id = project_tag.tag_id OR project_tag.tag_id IS NULL)' : $tag = 'AND project_tag.tag_id IN (' . $tag . ')'; $offset = ($page - 1) * $limit; $sql = "SELECT *, project.project_id as project_id @@ -116,13 +114,15 @@ class M_general extends Da_general WHERE (project_tag.project_id IS NULL OR project_tag.project_id = project_tag.project_id) $pname - AND YEAR(date) = $year + AND date = $year AND company_id = $company AND cluster_id = $cluster AND team_id = $team $grade AND status = 1 $tag + GROUP BY project.project_id + $having_count LIMIT $limit OFFSET $offset"; $query = $this->db->query($sql); return $query; @@ -131,27 +131,31 @@ class M_general extends Da_general public function get_num_page($year) { $sql = "SELECT count(project_id) AS num_project FROM {$this->db_name}.project - Where status = 1 AND cluster_id = 0 AND team_id = 0 AND YEAR(date) = $year"; + Where status = 1 AND cluster_id = 0 AND team_id = 0 AND date = $year"; $query = $this->db->query($sql); return $query; } public function get_num_search_page($year, $grade, $cluster, $team, $company, $pname, $tag) { - $tag = ($tag == '') ? $tag = 'AND (project_tag.tag_id = project_tag.tag_id OR project_tag.tag_id IS NULL)' : $tag = 'AND project_tag.tag_id IN (' . $tag . ')'; + $having_count = ($tag == '') ? $having_count = '' : $having_count = 'HAVING COUNT(DISTINCT project_tag.tag_id) = ' . count($tag); + ($tag == '') ?: $tag = implode(',', $tag); + $tag = ($tag == '') ? $tag = 'AND (project_tag.tag_id = project_tag.tag_id)' : $tag = 'AND project_tag.tag_id IN (' . $tag . ')'; $sql = "SELECT count(project.project_id) AS num_project FROM project LEFT JOIN project_tag ON project_tag.project_id = project.project_id WHERE (project_tag.project_id IS NULL OR project_tag.project_id = project_tag.project_id) $pname - AND YEAR(date) = $year + AND date = $year AND company_id = $company AND cluster_id = $cluster AND team_id = $team $grade AND status = 1 $tag + GROUP BY project.project_id + $having_count "; $query = $this->db->query($sql); // print_r($sql); @@ -166,7 +170,7 @@ class M_general extends Da_general WHERE (project_tag.project_id IS NULL OR project_tag.project_id = project_tag.project_id) AND name = $pname - AND YEAR(date) = $year + AND date = $year AND company_id = $company AND cluster_id = $cluster AND team_id = $team @@ -178,10 +182,11 @@ class M_general extends Da_general return $query; } - public function get_comment_all($id){ - $sql = "SELECT * FROM {$this->db_name}.comment + public function get_comment_all($id) + { + $sql = "SELECT * FROM {$this->db_name}.comment Where project_id = $id"; $query = $this->db->query($sql); return $query; - } + } } diff --git a/html/exhi/application/views/general/v_search.php b/html/exhi/application/views/general/v_search.php index 94d11fb..1ee5b6f 100644 --- a/html/exhi/application/views/general/v_search.php +++ b/html/exhi/application/views/general/v_search.php @@ -151,18 +151,18 @@ function create_project(data) { let html = ''; data.forEach((row, index) => { - html += `<a href="<?php echo site_url() . '/General/show_select/' ?>` + row.project_id + `" class="col-md-2">`; + html += `<a href="<?php echo site_url() . '/General/show_select/' ?>` + row.project_id + `" target="_blank" class="col-md-2">`; html += `<div class="card card-widget widget-user">`; - html += `<div class="widget-user-header text-white" style="background: url('` + row.image_cover + `') center center;">`; + html += `<div class="widget-user-header text-white" style="background: url('<?php echo base_url() ?>` + row.image_cover + `') center center;">`; html += `</div>`; html += `<div class="widget-user-image">`; - html += `<img class="img-circle" src="` + row.image_logo + `" alt="User Avatar">`; + html += `<img class="img-circle" src="<?php echo base_url() ?>` + row.image_logo + `" alt="User Avatar">`; html += `</div>`; html += `<div class="card-body">`; html += `<h5 class="description-header"><b>` + row.name_th + `</b></h5><br>`; html += `<div class="description-block">`; - html += `<h5 class="description-header">` + row.first_name + ' ' + row.last_name + `</h5>`; - html += `<h5 class="description-header">` + row.student_id + `</h5>`; + // html += `<h5 class="description-header">` + row.first_name + ' ' + row.last_name + `</h5>`; + // html += `<h5 class="description-header">` + row.student_id + `</h5>`; html += `</div>`; html += `</div>`; html += `</div>`; diff --git a/html/exhi/image/profile_default.png b/html/exhi/image/profile_default.png new file mode 100644 index 0000000000000000000000000000000000000000..2b3617b4a0f404262f0397143e2769aa090b295b GIT binary patch literal 11733 zcmex=<NpH&0WUXCHwH#VMn)Y*9R`N~w;7zlJdg-J%*4dV$i&FV$OHoj78A%2B)urg zV9E*7{|_(-axk1?IK|8;$iO7X$SlbC{|JLT10w?y6B9EdBLfU@aI<r=vN5u7F*E%? z!Vo6Fz`)AH!pOzM!p_ac4^qU)#LU9V#?HYhs3;^XX=oW)F=NMd5l1DXz(i3oiJ-=X z7sb_`g2N_Go4)bd2W6GQgO{$TnYg%xCl!^HmNhS0w&mgfBMfpN8`+o<)-o_KGPAIA za5Ay7ae?d=WME`wW@2Vx;b7z8;$~m~Ih2`&Rgg`HUD1$3*fEe(L@80iD6DYe#)DTx zl^dsA{2(T->XcMEb>WuF4?jw(8#@ODhlUrGsJJyXx3o^0y!p`8|F;-;m>C(E1epaH z>=}MZT~_y*Yxe%G*_WUD)~~fIa;%EGzRbgDVOgAc@6D+^Y&+hq-t=n62dRT=V$4m? z7F^R2UwVBV=hw=~s=l)|pQoIfta<!?VcuFVBhCF6t(Q(Oo9AFN`|0)D6I@=*y>xoF zzk;0ar`K;!D3$oVOuf5&0>9eN(r-@$t<+04y}NvZeR9pN-$fjAg?B}kXFg#*xi7YM zCyQU_U7g)qJ~2MIuea|`le){hX|cB|89wDtkI!=yUR3U__tvJN(){%L?Fya4-ombV zvA%1q!wy}U9FQ$`bX)Fky_1_h@1OPC@7(6KR;E^Ww&q%g-8nw{SATxA+1b7BJ!ial z_cKl8lZgmewCPI5#zor>^DbPXs^VI3ZSvk}QJFs&PVQeGW62WyN03o~5E50mwXtm3 ztH{Uy87$=%ZIlp<{<`FS>a<yP3`Y4cuk$&I{AXZsa3O?TJ<Qg`uG}@P;y=SV_Z4g0 zSi=5hTHj1vHot*q_OH^z6I|^N5_E}xU=Z(W@vOY1^XxxQe5EbeD7rt&?^|T%@(0Xn z|K=7v5%m8+&>b!;A<bDwZ_Qqr-v8%GRo9UO*ZiRtCgv<Lv2I&E7H`YDx@ya*XzPi> zTO~gxDwmdu>v^x#J#%K8{sracCp)HZ-E-#w<IBmd?~Q&3NjsmhYQI^^S-5;=lx*g; zYc83EOBbA(*6c52WUPG0d49jDfFnZ_hn>6jH@!vw8RFw#vWmc>l;o%@xSHM8?2sCy zJ$03@WXqCkc~`RxUcQ~gy*6g2zrs$Hl-l?;?(8SMi*KBnzQ_2vHgEW6+a|G(R@2wd zF!kh}_Ef4-E;ZF}=KD?3Q@JdUKP~ttd{W8yQHtd@Nq&W^-m1qY+4mZ#RG6gOr+;p3 z)!zAXbMoiTZEt>kjdYp(?Cxrx<rgD^zCGNPEOT`h$G;~t|8zf7<0=<!sw;I>eWlia z^ho^Y33hAN7{;Evr*g&eNML5!(LJZSQ+5QVTunEtHx<5|Dy(I<w&SrRU){P3m2)27 z6P1}htDX7o){XtM%j`83Y84Y#y-V1b_1K(iaea8u<zp#3zTDJYbll|6gq%y!sW$!F z8{dDv<HM6+p(`QxV5NL~s9JGA;gd_!UyCC4g=V=tzphrY{prbq?}b18_xyfsKXdK% zkgULe6Hn*aX&2a7YO?tr*DF-NKl#t=q??L+Qm(wX-n&>Uy5HD&vhV7kS*4fb4<BDO z<=Ap#S#I0giAIT=9xmDDuNO6S+iPR1s<uDj$&$aW*QU?dyXlCh>JDY~!^_wwNXYCl zT3%Qx_P1K>(aiGf6G}`9V5H@^HR-MImCeWh71_Eb87OUk?RoFCuE`&Ul>3+0$uw#H z<7nsrq5Z0Bc^4j+Db(F|D`e}AtwI8~1ftja>AJbJOcb0sbKdR3R|)|t44xK@C98}6 zY{~Bw4SVZ7ZEjpz(`Uh~^?^(O_@t$Ks8737>eE*<byjrGQhBqjf|HM=RSOF36x+Gi z&1lJSn_%(pMx16vHs^yjmgzssW-?I9HJjdL{wKR^V|d@n4H{=Q$E^*$+u)}=X~kaO zMQ)ScSg`%}Q{>w-ZNj75LD8mCVV>V_nYZrx9`6_$y0qlabSW+KHc#vMJOZ5@EN&;W zR5~}=@Q80Sx7fHYvm)==^8?v&+8_Qiv|qk-DeJDQ?51s7+dLj*tIbQ6P$}>0;&@uE ztRlAYJuiQ;NA?`&jqTilF>~L<@0;@eMW15*st()r2RHZBt4jZT%YHAs<A+~C^wZ@1 z20Lo6R(&$%JGo}rbU8P*)0NXbJ)-@hEZQ;(?GJff{=uKB{#N-x;)k5a@+aN?RXcv4 z%6zN1Y2B03<c|Lg6L!?zEUC2IdwE^<sfk9pYxSJ|?fz7->_zR<+~Y5;-mc5CQ>(Y1 z@x<Ev;}jlVy^H@D`nLal>S?>=hr}cAtrjX@&+gm*ZuRv)YrZ`CXLkPK)!&z5=GgyO z(SPu8&wVxNpMUqi*OKSdW35@1|EaY8Zt$l~m)n1ww*R$wr~R&l9||6upKSYApa1(* z`yubfc+J^==Ei?_eg0|l<?bK1?SC!VS-)$MJ-eLopPBj3zsOhmxAZgB1#SOnwf|lB z@u%s_#XoMV|LR#(U+QAVCzJNm;Qsly{~0O+e|Q#XKQ*qOy!zj(`BRt8v5omU|8G#t z@?Tw71%6l-E-AV6_V~wEkh?hkvCRK<=Khmk{~30z%x)6rV~F3PzJ3k2wo|B)cVFNu zQSG#uKlp0WZ#`RL?YZW##Tu_>MU`!`YAI&Tftq^CC9^_w%T`~CTI_n~ZrW9|mAT=v zO>P^X_9s6sED&<lN&V<?cuVh_;)ViUivq1T8Gj>}d|kT!!@d5U&L!L58Crg1H@vuq zZMsp$lboVsA9u*EOHkcWaY9$!+O^Q@`GlpKDW~_`3S0bC(<4~dCVEy-^sLHvZhzA} zo@$&qQ#tjun}OjO{Tz`1Xbnna<>cB}Y&UDt27ckb$%-c~&E6jJd)=0_sdG&`FU((S zls5Un^h}O9xAwo<Q~lwNPfOp&nJ=fh7V?>dN_+D0p4Z#cq5hJg`CXv5f2PXYm7S-b z=5Iak;4l0;<5SPS`104nua2AjJ{TK2@n+j%nZ9RVes*2eTcU6EEx%A;PHCQMmu|~p zm8C0PPHS$_%>S%AasGw;`L$o)#8~=kM&~UyzWF?@%yf?A<?1NueTyDFPe?A_TjaRo z=N!|;>hl=n7_*hP{J!(f<W)k9M;~{wo4<obVj25{JI}3|r^P(JGAZG}er@?*C7`B& z>-E>yLwDyaTzWn0V}kUPr3R;d9#^rNGVgShvU_fxbjsT8@#>SWMNbcSqoFIVy|Dhl zFH0?HNyc{)yewa&?>IZ}nSJ)0%*RK&Uj1IX@Al^Ft6Hs>{8;-e=HX?<wR~k4AHCtL zQ%&6?y5ZU5y`Cq&rFwC__~5x+yPSE>;|VW03f-p7C^Hm_DO&VgwdP8(iDstL9MgqM zR=W1suD14l5qDyj)1?0lN3=3um-7DdRNNf#a;|i?UeS?jlBq)bi#1ndZr^Y<%yNB7 z-Xx3UzQ`ph=?c}BAB4lord^pT)+-v!t2^n!HP4dWXRhy>)nv)t;`?q!w93_~(kTK# zrf2j8_qm@G37jc%y;!wu;sLW;`_`FUwcOhkyg}2eAzx7bvIS?Rp0L^?-OC?s7AgPw z!*M>a<ljs`rEQ<Iv?{EZ&tJ|n=VfGkacX|?l}B6OmBfC#=Xk7nH=m?ouC?3gXJ4XU zIA@iZ{0Z8-?b|h(kbScnuPh6&nq_wEWc7x3)vOtXna3+)%sZkxD{>1SmL4nnS~IhH zZo;!muL^n7xz_rti(Egl@m$WbIo>TEl}rDsO<Q#5N~>zt9rbj+OEOk(?H9Q1eE8>b z@JVN5O}%Nm79EVuT35`{#5K2l_ax25XSQq&WEOR1-XN(`>?*gh;^~32*#~6PO8PeS zSw3EwIIrok|NblQOcwt3nehJb;%Vvvx4J4hC$WpA?2}ZQ=DX=7tKyY;_Q#)3KO>lU zq$zpYx{UeZkE{J`eBYl`54j{TIXrUdmWlI@xahpkS!QlyGhvIQeaY?JG9PR`8t3hH zRB5~*<Y%;rdt>tae}*&nOk>P0Gd^AZ*Kp~LC+1=eoW~v59mL)|kk@{6=Er}AIg9@@ zEam?;<KWl1Z+|Q-V%Q0(>=cxiNQdcNx$A9H|6KV>m@<=g-Ilp;HeL2Vz~=kc>fs5c z`47OAT|@W!*pRSy(P@vj$377b{UsXJ^>D4t79p*I6vv<`?q4UlDi<sNw!0`$;P|rj zP#C9jHUIlt55M%(CtcT@7xN}NTWpbs=fWT5Q~7LKG`5*oomI>BQ~3VMC@Lg=L1<`c z;%C;%*9y9+-u^lk>7SUkMy@!0Lg!wRqh{)<Kcb265BxfJX7PME*=pYTWtl7m**+=t z^LEtx&3_Yh{H;~}@vs%&59j@B^jpYobN%`B&+>1?AG4oW%{J$E{Ji+}-#Ffu8#kYH zRz7R_ZNJU__%{LvKWS;Njs5Q99d&<xc=@!)9gglTw=+~%p8O>ANV%Zkq|Gfcw@2TN zfALD@q*;6Gu8ZD!jLVG2^vEtJ&!^G_F>d!Nb)T^R%FC<LTlKZL?{fZ%)s@z>-)!KK zy<{W1c)o&k@9`hHg|D2Nwq_j-+HG1YwdeZsbI}>OL9!;FdU=*ix}4!9<kEJ@^-Iu{ ziG{|m#b5PxO}fvVu(-jInX~L#G0X0m>NcMrpI3h!rnGL`vWM2Iw4NFJJz#rY^u(&< ziCqGN9CuYzwz)_9^j|$IG*ea;umAP)x~$WsBHkBUei?^+n;%%{B<L5d<y3ZK=hxM1 zv*eZR=JJNFc=UFD`sTZ-QzF(@sh!BxDc9INYu4^LQ!lw*5c>7(#K}3F_MO=>ZU?S@ znfYS+)*Cl(_C1czOG$fOaAmvN9l1MJexIzW#16{L{5DI{FR57aqkGj$hBJMIH_VUy z+3~^l$LbZQpI^Uba{0Hq!t*@}pI=peemzIPsHR|B^Q*(_?H7MpAv*t8vp|lH{W|wb z-WUP>L%qJrN|ByR&n*nO8r}BEV|z^M9ILD;(Gw^4m@N9`GFf`-7m54p%kwVSBwya} zZn9Tc#{S414{!8oor*rYbK1(vIh^0FTt9Yr!=&TqE_qkV##aTu$hr8Tx&6B5X}1MS zuH?4$E8i|Px%TRMxVdfhhQy`C$9>->+8hWv?e^<U*5!z=T86XzgeCH328M3BE_*rj z;V%FDb<K}Y1{MU0J<h$m^~KZ0_58^d_jg|R?UUp!I4bU!KF{jO936!>!3q=qxY=@u z?Tf9+uBp4am&<e3M2+wN8Kw&6q<{XQ5x?OW$GqjTVpRrD<O_c@Jv~?qD)(Jj9Ek2L z2<LzNH^G&q=y`sfMp9U|hRbAU-=sHOQ&QHd^!a!<^{PGWXj$GUoY@`hsB(I(?z`xk zRjCEKtv4-sl|QZP>uu8N?lzmivh#c5z3Ug7PiCwSdUaaBxVp>Vqg3a3x9djv2`^{P ziq70E*RyraiS5Qpo^nT`XU^*AXuI-TKWN|L=BU7pTTbe1zP@$w3casC4`jSx-*5SS z>T16$laI4YmZog>yn9^KmU+(O#w}(|On#P=CthaE`dZOm9=knM?!sZK;H_P2%a${B zI<=f(J-h1qYg0|$qpe&b?mRp96?w08@;E)ECTyvqN_A?(<*;nsS-ZZkTFuI<x=mAk z<%In?A|G7No}c(G&wJYzp@Je$-V8kpi>bd=_QdCxi216!WUpFRbez?iCHmQlY2j>! z8#msNEWRUkaeML3l%@i^sRro^mFbHUnI{w;TP^kOs8_8?xA3~#WxuAoFG>7+P;p-2 zD_0>M%lq829c-I&=C3gMd8W*|UpnQ|McKU;uk-E}UVmj<SbbsEx3j4iYOGh*m|hI= z&0FzD?nIyC{xjdjFP^vKtYPyi=1^l3)=52g>s{xY)eAGWw2F%DZt~u?VReJmrd9J+ zRYdw*@0_vXaql5z8HP9SRr}(8zBLlKG4IChWq;}p-8#qgs5I`tD&M?~zR|ofVy@Sv zCzag3c5LOYhk<!s)n_$*cP&=CE|;CV;-6HCd(@*=qwQwmhxk-8_Zb)bI==qP-Wbs> z<`y&Wb!E=B3G{hp<|L_;dMH9Qx#i2`?MhkYTecq0zHvwXQ9b{<J;qn3?kanzxMInF z23^<CEnByi^cS}jZJ){HHu3Hi_sMrpar{`<d;Y-GWh<|<TK)?4-D)f3xZupB=c>o< z=EiKhmzomqctyKYKK#;+6BiaMmT73IZ@=mu>8W-z`Lw%2)SDi$iH|s*o}OpPRH>aF z>&|*?o|o4)ac4dLpzBOlmdkBAzBh@P|2>tf$NDjJk<rhZ80UvazW-<FtX+Ei&5iG` z<>tJWKF8f7kdprAPCL7uo6nznD#hBT=JKXLseXCF)^^8#hSgl&sfUGwr_Y+3xGL~U zo^;X!i+5pfpFcmMK5M3MiDB519fg->d=*Od$~>}jbN=?Tle-+ZT<*B`eo6X<wad5n z^<2Juw0!x6n3RXV(^K1i{mM*TJg;xLP)Ou@!DElD-+nrCEF?JOa{HA4KY5)%Us+d| zptSYLewWSVPX3zokz?un(1O>YyNpY>e!s}op{2k&F=p+%;%I5D8OLX&HMtvEohUo5 z{dkg8Wu*DM^L@<5j3?EDcJ(c}nDcbU?x00?Q@5XfF(-BH*@a6}YARiIZW}$CI;+gI z=F6pD!nTT2trl+MG?_Mi>86=x|K!WoY`43Vc+mDom)gD$k(YDgn_3;!`8t;r-H~-) zvVPMVGvo5qPagy0uI2raIIWwU{e5!Zn_Uj47#<W)mwGJ5sO03vx6AOd-0B&hOOC8O z)v?NUt8<=9c3wmNGVh5Kbu%odN;RKds#&*IVP?v-3_WMx4Q;cHf8|+znSVoi!@P-a z^bftBH*d+l-r^%~i&aFerU!8FnuO{vOTOuyyFGa4`AOWq`}fcM&>5Gd^-68ps@j&L zEK)gdBX9Kwew%%*#5`*k^Kz58nK>J7zO6p8uE!@Tef8=I)k0yR9FO_m{bvyN7s=^T z`lL23_TY;dTbABAo_o0BN9@KAH~ur6io4@+;@5WLf5o!udHvmoZRR|@Ucag_=H3y# zBXhje=WEAbkG{P8iueUx&LcanT=JT<)Z9`dQ1Gv-tQB+1WZhq9w+k)$J<a`lZ|%J0 z%#7(@;`jgj&+x1DJku;l*Sw)?LT<$F;8LBB{~6}=2S)U8to?PVeA8)Pdj?7KFR$Ab zy6T%??Vm&P-76M7a#OrETUjOc%5T0UpW9-l{K+*^J?K!%vbSSOX0z{d$@ly2yv#qG zc)CEB`H0X8xdSJkm$w{j`R5Q-KZEtt%+)1blXq@Es&PT&yYh!R**{qlckYxa-k8!C zRM$Ck<-U?j*-EdKj2=xgvOWCGELFL}b;*;J2P!8$Q`9@j6n{vlr}@Dn?rmSb?PNY9 zxPtFy?)vFnx7Jw+JkLwrzAxJ-=Ec!{dJ(T2%eX&O_ApOtXYMcRZ`R(X?0&R*lJ&-S zl4n<cG*doVI8!7ld*zc=ds0%S8U{|9Y;xS_$;uVKcer^~%FLg0-|za8b-C56w04Vq zkPo)9<z1xpcyes)3iVrh-(PuJpD6ii>!Nq~?Ka6-H}zQibyn>;cB6k|4&S^_-z*;_ zmz))e3BS6<TK~G4MdX92%S%<YZ#ln?xn$clYuVE&PkJw2w*161^Y-0yN-Oqx)Uql* za#`%PWWoI6$tssN7qTnb?41{Ak+#S*e^bwy9UtXQ?6$^8MvAZVy?ck-*SY$5?wpOc zZ>35eX<h&AR{U<hZ|!#3c6%!qD_BoB|N8N_Kd(g|{cW1#yDhTq%BIfZ+b`=vXNS}t zUArPE#&eyooTKEs5Xn8a1Qj>kn6xR+iF<CQ^&8=f7jN&6_$L2&?edVTA)&AI__B^U zW?mChRGxRM+i~XkzJ2$F?{2c*J1sJG-S)i;_kMe|N>WB)-ONLmKX$iokqNo9IXdQ< zWBs;wvu=k}9kpY7ky2(}wKpKY)Qo>a^-d}7h1p>{Pc1i`DfIHI#k$K`Ury>BTy<Gx z;xZS`jaQb<OLfUqin2_pnJUhz@?H7H@q6cH?0-48c<GmWyDo~~stsTCbuO>%sf)!+ z3Mb9m*S1N~)a0YJ&GwB4Z2OozQuzDA%p&d_do^j>v~@S*BXf2JTeUsTo%-QC&y4KF z)68>=IgY=N?Gc=|bNR%Bk>y;oH}`E=bxz^Hny^ffYkaY0*Oz`u+Fo*1V3Wm_TW2Hg zs$N`SW0}9>w!h7*pxkXO@4Rdb-rC-Jbo|i6qKj5)E4RxQOUs?wwPV{pZtsoTcV+)w zX7?a^!n1~FK|J4kjq5b$y>I_AD{{Jdtm#x;-*a8}&V8HJB;$7LSKAyjtzEruO|C3{ z?2(i*$ww;UZf~J_M)*7Xr_rJxR-HZUwJiS0#Vc>>T+3c;SC0NNyPtd6mP-=-0f&FJ zM6{F_t31D4CGx(hSIf$`-D6%*Om<Wm-z}@=wpo*IuXvHI{qB;lTHcngQ-l2dZCvm7 zuuii1{;n+MnfH%QB^Ar{&m2$N`meQ!T)*Y$e7~>{AEGuLxT(IlZ`!<U?`CG@(w%R5 zsxC{PJ>Qnd6Xa&Syt?kP$^A~Vs25vj8eZFa(mU^juh^~~SxtAVW?Vk4aY?o-Z~a4+ zmGg4F6YdrUUVFIU+LljYd#`;fe5-x9@1m9EujTF6gFfd~EAEQQ;*KoZ5^5u3w2b#i zM=Ha<Y3mGLXw5v^m$PP)#)rwlFHhZOE!i^Fa@yQ;<*ToVS($~nT#DW=Jx}VB;Xa|~ zRz}`M54S#-JrXqA&gsNSPh(}(0wbdvXLjwo@^AeYp0=q6A517Wy|d?&;iEmvyEmEb zm?Lle`RC7ywLdfFDo=Zte7eZk+afOgS`Bac&Nrs7Z_j^JaDILC_N$J+{+zb07W`Z< z)W7Tc*K2DZMVLpWK5A3H>0Q!UvdT>E&c_?C0vA14eoeDzuIKz~o?5rN++saVr{6OD z_w6@NxzD7{_vXc3zH)e8E>FRKhAkZSj#+2_GdzAPbhU`Yq0olzMKSM+)VKa;D9LXB zw`HDvdB78PCHMAMp}LNT+xN(?(VwyBRpROC`)WT%tq)I)?=s;klh$&IQB@V4H7Q4n z`AkssjqOENo}NWP-9>6Ab!*f4v*d2pO_*V=^v(EEjqbzNr#){akG{zJcyXV&>F3OD z;di12A+I<YRF1|6MC+<{t~=cFXxRfcjfk5C-r)s@zvbUj4vBjo^7K~FvD?}6E*WTR zxw7!3YMhUVKIJv}jM$s@i4!LNstNp{WalX;6f|Y|gegl^T&65#nLA;Ul9G}hi|fWx z{)wJ0lRZ@~?fvX+Jm>q~BRkJmcNWikZmoK*xU+bUr^+Nxm8U5y)-o_~FcdMLU~I5t zFkoP2VC-{9wA1)^`SJDd{~6v2{hm;@<*)pWdAs{s)Q`&Fs(<kP&;2dd3!l`-pP0Az z@-3Nt=en$u<wSztMKzn>wVkTAnMu<)s^d_Q=h{OllLDVvHR;}+DY?mHMR)g_PoB{$ z7b)Lazj*tlz$5=yGq}&EYES(U^ujkeBK7k2%zKZ6mt|+2-dlCwS^4g!d3|5CXKSaZ zaMvE*J5Oxu)z7Ep3<^KDPPsMl?Det?`?9qk8)JEr=cZa4u-sq}Kkswx;o+H+7_QCv zuFH3POIF;S-j03Ix!-3>=5GH`wSPv+y0ur{^UXb$E-4e^sjjCo$y3kfbmz0@!jp>p zjW!;->|#5|e4Xum_a`qergFt7d8)UE^X=_l|4wgV&#u)$lTu_KeEj(Q*UyJBuWcp1 zIY_Wi{Qi7heO$I$bcDyAoV6D=>@rbX7LxaBPF1X7-i{nmtLP<5WdoKfZq?FCHfX<J z=;_rzJJIur&eW53+Z$!F9`kemxV>2a58uA-v|Z~~_4RHz6Z5+C(6sRUm5X*C;M2-o z-`eKYHu2se2`$ZdS(m~cF<G&K?rRgfeZzt|Zx@!`IOiP8GuQgZJ?Wio21XvNOPDyy zx5yd=FFd;DidcB)nYkz4#_CQyWtAs;apv;bbJMPrc<;FOURCwLl&yJdcg9Rv@>BK8 zeet~NXD3+pm@eu(pHh7|&r~mCa)Qx}?v)1(C5`Xq9d0&jw>{5#Y)P5o)^f(rAH|lO zVN}_4pF6VW6EELNy*pMZbL174u?2l9&q}FNQxA<is?~a*>0_(I<nY;r7gv_u(XP^6 zGVAi|sUHPa=}+#_6>aA|Ts+BlN=i{>%wnaDHrbDt)=TYA&RKoAAoKF_-mqf_gMRh> zzShIgp5NO#n}s>gc!$OF*-m@!$UIoOzuEUn(4{QT^@{_#a_@c-bhzQFIe%gACvowa zF|xb!%sz299gsO29nn7Tbkk&yn2s%{4|Ct$zJm9(=a#RTWyPIqH;0Fm&eyV%={R~| zS-_&F!kYdTo`qgsIW-&KHZY%Qp1(AXyEbCQ&J*AMGfbM;*lg>Wd9LvEX`4T%ZWk6P z>2C;J??rl}?09+APg6GTeu><#wdYUTzY&(OOt;hOTF&^`{>9(bj+F-|q|WGZ^4B=A zv+U;EPr7fd)P-)p)3dMSpSRvaIp*J$sOyD=OkF3WCwcIS&GKn`zPQNqz|%?oU7K!A z+u&NiW8=94$%}1m9w+t63#A|Lm;d<5u(kHW_ge17U*A7u`O*CQKSTU)$GiOH7v}AK z&-s!4`@j9)ns>>)Uuau>Pkert(a(8Duet9RGJ0ia>%RZT4Hq|dAEwGmd7J+FNmVZt z51u=qEVJ)wZ`KyEg}xy(a+fSTRd9Z`XU>fGE8Vg)Iwl`nnwRB%V#o3)&IvJUk8Axl zT=v<JrM2#JNJKJ^knItxT~imXO?fiOdzF$zs>4a6YU4@Iclqvkx@Jp`S@+7Fx07#Y z?X=mQ?Z7lIc+!i*4hQ=D(iGUF-x~0kHs0xB>$H|v+5h*>zDuuP3z@ntW;r3PuJiNx z!J;j}pZhI71pQ}F%lm9O^-$}-+_?3>%(uQi`nOB8cE)<U?YEL!OAh{gzv|U7<Llq` z_B@QYlQ|-}GUwfKcl-YgU9S7Q{?^G_shn#0IdQ>(M#-1O%e+f>d`xudYc6u>G?Fp$ z=2^HYaHU(dVClyv6Z2b_%huHF`O`n^WM>Mm^qn_?^U}XB{#`R|&S%#Ct1%_3*InEa zGnJc1^V6m5;z>^`!<U?RH*<U73Ntsatgh+YQ-zH7ZCo(FX6HF4={HJg*GzWK?<p(d zcd#*hZ?muTS=MX$ut&$L4Yo^sF7LOO;rYb9Ic2+A`0Aglmp(hRz98u3j{M}vpxoJZ zH{1Tq6lXnHbyZ_(cinEY4Tlyjot3&*s5idmrcvohp`~lt&u%)+wtVF))e|>t3hMXY z+dbP<jbVlQj63WXf3@ye=&}1h!!uF`a0CS1V=9hlxk(v&t&hnl?b10HYV&Hgq;t2W zp6;<^@0!z-W%JEm&W>5ES8y{bc;~c3IhB^&>(>@0CU4xi!<OB3bxvWne#GVC?N#am zDN&-&6WyA_inv2wZIRks5bYh1vRm|L&MKQ{kA)(GE<Kv`N;<#nq{p2P&$oyt&E-6P zH{5@1)>q!ViC6Zmmo*KUa=|&6H>bcng@2N!ykK9&%x%Kjsl_R+6Wg7xn^&*>``i2C zy;nzzv*jIwJ}{q-P)R=QCiUE4VtWI_xi@l4S96K+Jt*hDf2-_2!_U0Qe;<l*{L<T! z=4Y|7nEA)5+3!~`{JZ|q$9?<lKRy0+@T<OR^A6eLH6`;8*Z<t=`E&X|`)d}vFBUI8 zDQ&U4NZxkQjK84={;sm$`X~PFN&dfw?bpVie8|SS;9H#aS<gS6VP6&1cfQ?zZGG+Y z<8=!U{}KD;|M&eJ_kaHW-@ghT{=x74_-E-K@A@@y{2U+T|IJ(abw2;mUxvBA>?JDr z>>up7H2;0w<Nilk_5T?hoxkmG{<~BC-+_M{>$wm9VJYR#t@x<vvPfnAANj>%w?8T? zS$%xB$o4;jzhHFEmz0RNrdPgmr%S#Q*?MK&nS8OTn(fp09^|Q5u4CDH_L$5eM~Np( zLJRKoZJQV6)xG=4@)?O|4YtpCJ)!!{)&rmO>{4HwHr?R5cRTsb)dJnqAImzwm%fkt z?a{t%$1l4z)6FLR)4r2<_mOVMl6o)u$unbl&Dqv|xp8dK)F;KyeI<S^Wq<W^THfh@ z@(-Ra?iSm6+vAw))%jchGw_6^Yz|l&__E~0hsZ@C5i_k;hxulDE<2bylPhR$WKpH3 z7te_+bAS7Zmho)(u)1?rbZ5yOul4(`WmcxnvhrNJ<->8~rORf`&R){D%H4qNObkco z@teo@R$H@mEZ-E9sr`7DU7}ZvvyX2^UDUHbx$l&v_b|P@Iq~dWX7N?|H^b(hJELRT zs4>|rIA3-8`^t%P?g}j_nl{xu-|V5_vBYTU<6GLhn=`ZR7k94xc8AeU<{0DWPv_6< zjV<+l6_cF2(SKfrt;f@ObB<5HwDIcf@`rnvGv=;yxYMb+{fNQj`?Y8G?flcLdZ2&x z>fGbzmgk-o&Y%DL%8VOQ(Qgy}`JaCH_jOfeTFZ_dp3aj3<J*oVxt!V~w$y0H`*kdf zb9ZbCx!kGjoo_C4H{;B<XupN2J2iR&yc{cS!`Ey#ym;9}&S8@K8LtUSQR_(0wpGOm zhgQ1Q@w&-Geps^P_C%qQveYBBdrzF?KVGZleB!BKL15|hJ5CA{FFbTS%O_EA;`{n} zcaCM;>?xn8cW1gC`(xYAoQHd_M$L}>6Te6K&d1eZRj)S9nQqqa=E^i%$uw`$>2rHO zw7uRSlRMR1_FTa&^SdiV8B9#JTYR6luQuFQb%B+;<)p;*mJ0pXm$%>8na%I`OF8XI zPs~|2)jM9#C%nF3@T%Eolk#j$qu`0BY7Yjivv{uEDcy2f&80@b{m6nWnc_DM%Zx4y z{CKbTvqAp+`Im?0NK`I4=BdNFQT2`WPD8fEvR8J^YEyZn`npK<u-_Apy0)`vrn=v@ z8Q;}z$P7EWQ&QkT+Jv6;Nvl$MjSYY7z47_kvZdP_Z|J9AmR@vghj-hxznV)mGa5ZN z<(@G7nPofW(e0!;F|U_@j@lkLv9z<gf7U$3*2PR}jsF=q{&H`qd-kLJPt&IV42!N9 z{ky?9`B_NyjQv;5|1)^}<@`PS;r&lsr~h>a{Aal1T)gMJ{`I$-cU@0^%zgSt@R#s+ z^TYd}h)(}2w(vj0j<)BOQ{`US?Y&+6ne~rlTSVTgkoJOKCrY_J6*G!1FIcPXs4>km zD3sx(=hLO?8$aCX_;teEnjz0Z?knFb{ja&d*k8nV6|CmI{I%fTA^*R#?e6LCf9m(! zxp-He#m~z-yDi_%p8v!BMcm<t>~@{Ce8vfpy1H9ceb=rIYq@n{$-I|AA{{K5fs%p~ zrwj4SH(Gr6n3dc81$r+xirp3zJK_>!)v>E%-$T~3m1L|6GE;u7`!9aMuM>i1`WqSr zKqPd^9BuU(ku&Ic7kLf&<y}K1OiF+I2j_a~Xoub0m=o)`d4K9nv)KJ^Ti(33x_q|I z=JvF;%d>7zd2yw>>gKlGSGIr7;8>D)!zyB{?|Yr|{~6}=9Ifu*n5z@D?EAFz{|x8c zlJ*{B@tdX_Tz%U3Kf`ln!??#x>fT~2_dcEZpW*Yw8S4uhg_m}R-1~IqKf})xXTo<J z=)81vReoh!{hudk+IJFMUM5{N-?Q2NUy-rsI|HSXjajqrMb7`vU@6)4T|#hVS?k2T z>CLY7w^u#ew|@1k2YdCiFFjaucY5#Rval?3*{fx-;j(VNNe_3f%Wm7K`m*$OQ*B(z Y$>6k8l{bx+oGSc&Cwg^IPxt?u0H{gjb^rhX literal 0 HcmV?d00001 -- GitLab