From d293b86cb207b4667c54003f500bc2639d4b5a67 Mon Sep 17 00:00:00 2001 From: "lucas.calixto" Date: Thu, 2 Mar 2017 16:53:26 +0000 Subject: [PATCH] fixes bug#8446 git-svn-id: http://desenvolvimento.rjconsultores.com.br/repositorio/sco/AdmVenta/Web/trunk/ventaboletos@66334 d1611594-4594-4d17-8e1d-87c2c4800839 --- .../relatorios/impl/RelatorioCarteirinha.java | 107 ++++---- ...RelatorioCarteirinhaLayout1_es.properties} | 0 ...RelatorioCarteirinhaLayout1_pt.properties} | 0 ...orioCarteirinhaLayoutCliente_es.properties | 9 + ...orioCarteirinhaLayoutCliente_pt.properties | 9 + .../RelatorioCarteirinhaLayout1.jasper | Bin 0 -> 33904 bytes .../RelatorioCarteirinhaLayout1.jrxml | 237 ++++++++++++++++++ .../RelatorioCarteirinhaLayoutCliente.jasper | Bin 0 -> 33022 bytes .../RelatorioCarteirinhaLayoutCliente.jrxml | 223 ++++++++++++++++ .../RelatorioCarteirinhaController.java | 82 ++---- web/WEB-INF/i3-label_es_MX.label | 3 + web/WEB-INF/i3-label_pt_BR.label | 3 + web/gui/relatorios/filtroCarteirinha.zul | 17 +- 13 files changed, 555 insertions(+), 135 deletions(-) rename src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/{RelatorioCarteirinha_es.properties => RelatorioCarteirinhaLayout1_es.properties} (100%) rename src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/{RelatorioCarteirinha_pt.properties => RelatorioCarteirinhaLayout1_pt.properties} (100%) create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioCarteirinhaLayoutCliente_es.properties create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioCarteirinhaLayoutCliente_pt.properties create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioCarteirinhaLayout1.jasper create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioCarteirinhaLayout1.jrxml create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioCarteirinhaLayoutCliente.jasper create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioCarteirinhaLayoutCliente.jrxml diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioCarteirinha.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioCarteirinha.java index 16b899e24..dd5136eff 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioCarteirinha.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioCarteirinha.java @@ -14,6 +14,8 @@ import java.util.Map; import javax.imageio.ImageIO; +import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang.WordUtils; import org.slf4j.Logger; import com.rjconsultores.ventaboletos.entidad.Cliente; @@ -28,10 +30,13 @@ public class RelatorioCarteirinha extends Relatorio { private static Logger log = org.slf4j.LoggerFactory.getLogger(RelatorioCarteirinha.class); - private List clientes; - private Integer tipoLayout; + public enum TipoLayout { LAYOUT_1, LAYOUT_2, LAYOUT_CLIENTE } - public RelatorioCarteirinha(Map parametros, final List lsClienteSelecionados, Connection conexao, Integer tipoLayout) throws Exception { + private List clientes; + private TipoLayout tipoLayout; + + public RelatorioCarteirinha(Map parametros, final List lsClienteSelecionados, + TipoLayout tipoLayout, Connection conexao) throws Exception { super(parametros, conexao); this.clientes = lsClienteSelecionados; this.tipoLayout = tipoLayout; @@ -45,12 +50,8 @@ public class RelatorioCarteirinha extends Relatorio { @Override public String getNome() { - if(tipoLayout.intValue() == 1 ){ - return this.getClass().getSimpleName(); - }else{ - return "RelatorioCarteirinhaLayout2"; - } - + String layoutCamelCase = StringUtils.remove(WordUtils.capitalizeFully(tipoLayout.name(), new char[] {'_'}), "_"); + return this.getClass().getSimpleName() + layoutCamelCase; } @Override @@ -80,11 +81,11 @@ public class RelatorioCarteirinha extends Relatorio { image = ImageIO.read(blob); } catch (IOException e) { log.error("", e); - } - for(int i = 0; i < clientes.size(); i++){ - if(validadeDescuentoValida(clientes.get(i))){ + } + for (Cliente cliente : clientes) { + if(tipoLayout.equals(TipoLayout.LAYOUT_CLIENTE) || validadeDescuentoValida(cliente)){ Map dataResult = new HashMap(); - preencherDadosCliente(i, dataResult); + preencherDadosCliente(cliente, dataResult); preencherDadosEmpresa(dados, rset, image, dataResult); } } @@ -114,40 +115,40 @@ public class RelatorioCarteirinha extends Relatorio { dados.add(dataResult); } - private void preencherDadosCliente(int i, Map dataResult) { + private void preencherDadosCliente(Cliente cliente, Map dataResult) { String numeroFidelidade = null; - for(ClienteFidelidad clienteFidelidad : clientes.get(i).getListClienteFidelidadActivos()){ - clienteFidelidad.getEmpresa().getEmpresaId().equals(clientes.get(i)); + for(ClienteFidelidad clienteFidelidad : cliente.getListClienteFidelidadActivos()){ + clienteFidelidad.getEmpresa().getEmpresaId().equals(cliente); } - if(clientes.get(i).getListClienteFidelidadActivos() != null && clientes.get(i).getListClienteFidelidadActivos().size() > 0){ - numeroFidelidade = clientes.get(i).getListClienteFidelidadActivos().get(0).getTarjetaFidelidad().getNumTarjeta().toString(); + if(cliente.getListClienteFidelidadActivos() != null && cliente.getListClienteFidelidadActivos().size() > 0){ + numeroFidelidade = cliente.getListClienteFidelidadActivos().get(0).getTarjetaFidelidad().getNumTarjeta().toString(); } dataResult.put("numeroCliente", numeroFidelidade != null? numeroFidelidade : ""); - dataResult.put("nomeCliente", clientes.get(i).getNombcliente()); + dataResult.put("nomeCliente", cliente.getNombcliente()); - if(clientes.get(i).getLsClienteDireccion() != null && clientes.get(i).getLsClienteDireccion().size() > 0){ - ClienteDireccion clienteDireccion = clientes.get(i).getLsClienteDireccion().get(0); + if(cliente.getLsClienteDireccion() != null && cliente.getLsClienteDireccion().size() > 0){ + ClienteDireccion clienteDireccion = cliente.getLsClienteDireccion().get(0); dataResult.put("enderecoCliente", construirStringEnderecoCompletoCliente(clienteDireccion)); }else{ dataResult.put("enderecoCliente", ""); } - if(clientes.get(i).getEscola() != null){ - dataResult.put("escola", clientes.get(i).getEscola().getNombescola()); + if(cliente.getEscola() != null){ + dataResult.put("escola", cliente.getEscola().getNombescola()); }else{ dataResult.put("escola", ""); } Date validadeDate = null; - if(clientes.get(i).getLsClienteDescuento() != null && !clientes.get(i).getLsClienteDescuento().isEmpty() && - clientes.get(i).getLsClienteDescuento().get(0) != null){ - validadeDate = clientes.get(i).getLsClienteDescuento().get(0).getFecFin(); + if(cliente.getLsClienteDescuento() != null && !cliente.getLsClienteDescuento().isEmpty() && + cliente.getLsClienteDescuento().get(0) != null){ + validadeDate = cliente.getLsClienteDescuento().get(0).getFecFin(); } - for(ClienteDescuento cd : clientes.get(i).getLsClienteDescuento()){ + for(ClienteDescuento cd : cliente.getLsClienteDescuento()){ if(validadeDate != null && cd.getFecFin().after(validadeDate) ){ validadeDate = cd.getFecFin(); } @@ -159,17 +160,17 @@ public class RelatorioCarteirinha extends Relatorio { dataResult.put("validade", "" ); } - if(clientes.get(i).getLsClienteDescuento() != null && clientes.get(i).getLsClienteDescuento().size() > 0){ + if(cliente.getLsClienteDescuento() != null && cliente.getLsClienteDescuento().size() > 0){ StringBuilder trechosDescuento = new StringBuilder(); - for(ClienteDescuento clienteDescuento : clientes.get(i).getLsClienteDescuento()){ - if(tipoLayout.intValue() == 2 && clienteDescuento.getOrigem().getParadaId().intValue() != -1 ){ + for(ClienteDescuento clienteDescuento : cliente.getLsClienteDescuento()){ + if(tipoLayout.equals(TipoLayout.LAYOUT_2) && clienteDescuento.getOrigem().getParadaId().intValue() != -1 ){ trechosDescuento.append(clienteDescuento.getOrigem().getCveparada()); }else{ trechosDescuento.append(clienteDescuento.getOrigem().getDescparada()); } trechosDescuento.append(" >> "); - if(tipoLayout.intValue() == 2 && clienteDescuento.getDestino().getParadaId().intValue() != -1 ){ + if(tipoLayout.equals(TipoLayout.LAYOUT_2) && clienteDescuento.getDestino().getParadaId().intValue() != -1 ){ trechosDescuento.append(clienteDescuento.getDestino().getCveparada()); }else{ trechosDescuento.append(clienteDescuento.getDestino().getDescparada()); @@ -216,44 +217,24 @@ public class RelatorioCarteirinha extends Relatorio { } private String contruirStringCnpjIEstadual(ResultSet rset) throws SQLException { - StringBuilder cnpjIEstadualEmpresa = new StringBuilder(); - cnpjIEstadualEmpresa.append("CNPJ "); - cnpjIEstadualEmpresa.append(rset.getString("CNPJ") != null ? rset.getString("CNPJ") : "" ); - cnpjIEstadualEmpresa.append(" - "); - cnpjIEstadualEmpresa.append("Inscr. Estadual "); - cnpjIEstadualEmpresa.append(rset.getString("NUMINSCRICAOESTADUAL") != null ? rset.getString("NUMINSCRICAOESTADUAL") : "" ); - return cnpjIEstadualEmpresa.toString(); + String cnpj = rset.getString("CNPJ"); + String inscEstadual = rset.getString("NUMINSCRICAOESTADUAL"); + return String.format("CNPJ %s - Inscr. Estadual %s", cnpj, inscEstadual); } private String construirStringCepTelefoneEmpresa(ResultSet rset) throws SQLException { - StringBuilder cepTelefoneEmpresa = new StringBuilder(); - cepTelefoneEmpresa.append("CEP "); - cepTelefoneEmpresa.append(rset.getString("CEP") != null ? rset.getString("CEP") : ""); - cepTelefoneEmpresa.append(" - "); - cepTelefoneEmpresa.append("Fone "); - cepTelefoneEmpresa.append(rset.getString("NUMTELEFONO") != null ? rset.getString("NUMTELEFONO") : "" ); - return cepTelefoneEmpresa.toString(); + String cep = rset.getString("CEP"); + String fone = rset.getString("NUMTELEFONO"); + return String.format("CEP %s - Fone %s", cep, fone); } private String construirStringEnderecoCompletoEmpresa(ResultSet rset) throws SQLException { - StringBuilder enderecoCompleto = new StringBuilder(); - enderecoCompleto.append(rset.getString("LOGRADOURO") != null ? rset.getString("LOGRADOURO") : "" ); - enderecoCompleto.append(", "); - enderecoCompleto.append(rset.getString("NUMERO") != null ? rset.getString("NUMERO") : ""); - enderecoCompleto.append(" - "); - enderecoCompleto.append(rset.getString("BAIRRO") != null ? rset.getString("BAIRRO") : ""); - enderecoCompleto.append(" - "); - enderecoCompleto.append(rset.getString("NOMBCIUDAD") != null ? rset.getString("NOMBCIUDAD") : ""); - enderecoCompleto.append(" - "); - enderecoCompleto.append(rset.getString("NOMBESTADO") != null ? rset.getString("NOMBESTADO") : "" ); - return enderecoCompleto.toString(); + String logradouro = rset.getString("LOGRADOURO"); + String numero = rset.getString("NUMERO"); + String bairro = rset.getString("BAIRRO"); + String ciudad = rset.getString("NOMBCIUDAD"); + String estado = rset.getString("NOMBESTADO"); + return String.format("%s, %s - %s - %s - %s", logradouro, numero, bairro, ciudad, estado); } - public Integer getTipoLayout() { - return tipoLayout; - } - - public void setTipoLayout(Integer tipoLayout) { - this.tipoLayout = tipoLayout; - } } diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioCarteirinha_es.properties b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioCarteirinhaLayout1_es.properties similarity index 100% rename from src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioCarteirinha_es.properties rename to src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioCarteirinhaLayout1_es.properties diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioCarteirinha_pt.properties b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioCarteirinhaLayout1_pt.properties similarity index 100% rename from src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioCarteirinha_pt.properties rename to src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioCarteirinhaLayout1_pt.properties diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioCarteirinhaLayoutCliente_es.properties b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioCarteirinhaLayoutCliente_es.properties new file mode 100644 index 000000000..f57bbc410 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioCarteirinhaLayoutCliente_es.properties @@ -0,0 +1,9 @@ +label.titulo=CARTEIRA DE IDENTIFICAÇÃO +label.numero = Nº: +label.nome = Nome: +label.endereco = Endereço: +label.escola = Escola: +label.trajeto = Trajeto: +label.assinatura = Assinatura +label.de = de +label.validade = Validade \ No newline at end of file diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioCarteirinhaLayoutCliente_pt.properties b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioCarteirinhaLayoutCliente_pt.properties new file mode 100644 index 000000000..f57bbc410 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioCarteirinhaLayoutCliente_pt.properties @@ -0,0 +1,9 @@ +label.titulo=CARTEIRA DE IDENTIFICAÇÃO +label.numero = Nº: +label.nome = Nome: +label.endereco = Endereço: +label.escola = Escola: +label.trajeto = Trajeto: +label.assinatura = Assinatura +label.de = de +label.validade = Validade \ No newline at end of file diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioCarteirinhaLayout1.jasper b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioCarteirinhaLayout1.jasper new file mode 100644 index 0000000000000000000000000000000000000000..ea21ec52b62f27bb6c4425cb9991e8b738292d10 GIT binary patch literal 33904 zcmeHw37A|(wSU!}$xLUaGf5^JTOcBlkZlqmYzfP(NhduEJ)Hy+VCb2-Gt;D}yXn4@ zObCSS2|^H2gDire5H{n=5)ecX5JV9KR74R);h`*o%TvL>yx*y+yHxj`?wjcI`~KhO zB)4we+U}`eojT`K-Ky%HZ?SRt9GjCit%do4g=Zx4Su>Y2vzeTgUudQWlWB9|N)Z?n zflT}z{DQ$MqO7(rGn`GP%$9_eu-NqI8HtUFhGeFp+sq{sspMIS-jumC$|kF19f@JH zdt_iBIcl+bnK+e54>ojLxnz0}2`8w8x#mZz2x@V@2+*MGT)ZUB&=qUuPu|Y%p4`mcaIDY zCvuxR%uPscu4A*DptVVBh{9HwiGDNJnC`c8)g|-sq?IyNo(QW+nFE$2w29Sba!E4{ z!0}#0Wkm_e!68sRo*o2^O^5)fR%Z@HgZvyNu&X-W%4F@*>NX9T>5dGwV0?4djIx^E zMBj$N9AN0T*g;WX-;f_@(DtToI2um1!--^CRn}tV$Z}DsOruw-lB?2!5mZ$t zc^GX?A~gcc4lP+*(X5>=cdAwuEUM9}n3mXHy=$V&t?E^a%fG72;c)S$^{gsSO$)C0 zNI9;s8@D@|lJd1$t93|G zv(YSLkHn?uWd`mX|EH;EajQ6xF=L(^0+Bv1pxC57EHjc+uP!Y#tAH>X%qFux%BF}GB;s2~vpF-L7jj^3$@;F0xoLslglsMY?PDd)e0w5mu?1x^cX^W| z|M)ynL}JWhlRWyRX|qLYsLqL2jj^a?`GT889jQdw4moyMKvY{(<}jr6atKm19{mxz z26}VfP%_n@L!3>c=<3mAUdSlZlh0!FOHv5NvZ#~Iv|xk8W5Q0DEZlu4iC?WK`Tl_u0tO&i z5(baip;UpSjvAS-XXAR&sUSmUmy;nvfsSTJaw_TAHkj14SH86M&C8zr=n@D4(T2RB zQu~S8e+1+&Duu6y{1_AzS}SFGDgdRIOY|p4P=hI+eiTVt=AfBdie_FCu=M4*M0P0I zr})%;#kf*pCdw)Yk}08ar=nMrU-j5|CHsTuv292#I%||wr(nHyQBV7D$$TqgNCW{< zku}rADN|9wpsin2vwcg|EW#WCIwP4E`YV!dOXl*{+M!I!ByL#8rl}a{7Za+eU(`Ln zj_squNyfGao1}B2nHzxoMIiYD~I4NWYZ&E%70laUaE@tC)Arqwq@ zPZ2h56WOy7#z%2&2GnHx!3KlzZwsfyCaVE9Z6*hNrg{x12;YrKC~%7%UIyG2kJ)AC zLTO>Is3X|-qPB)vEeN21!_g!g%+2J5;H(_Z^b6%mJVE~8JkgHSiYIEb36i}+|5L%$ zQMQ*Sh=wRJbHGHJKHDmq?1fOhG=P2E&Lf%HdV15latM~aHdg8rD&7CEUW)*5Y$ zN7l6V#5?i7OO;^~4mKsN{7P0koN=B;vkzYT!SR3p;Ox^LSbg}G*!4{}LC3uBRE$(DHrbX;cGYKgmtiF*4k1 z<}TWK<;>dczuYF&?D4>kuvjKaEXfxhy&5-1t+u3@^4QkXN+FLqhu%zP1Lg`gM9qz6 zs)^N^M4uSv$CJYl-V=u)wR1p!LmZP9rq#qIxFLuVT0r$Unq08e10;7M-8YoUk#uuK z0o4hTXQKNWAxtRvDA@CEFuh$hb%60pt46hI?;4n#YEYnFySGDnqoA#bt{F}O8tWEB zL$-OMbEp^QTY|{86*h!j36%@nwx3g$Bl`>97iIf6Y2uko%1UO7Qn&=`qaYjSWM1fG zitHFkrF7e>35A*ovO;Ry2Bw@eWDp@BTs>E36Beo~Y!yULR*wY)fv*n@C?AMdiwv3B zrMMLqVsD1#mWU+Cgj)IJl^be)t;w5gvYd01Vcx{xeVUBxO7!<*zKsfPK)nYb0f=X9 z9O$_l!xt4l1uUIBi=;%VF@-5P8gMCk_VS5REPO;sb4A#YEA(;|4_Bc9GpT-hLl=lk z<|BArbCNy42y6b$WSgL=UNpa6YOUNM?*=11v|x53AXOT^s7crofF{g5;X|bNtq0D z-%9osbNlq72t{0J(_9d@##^SKP#8ytDQm3Sw#HZrYVdMgvx}@TLgqL!o5<5BMx@Q# z9@+WhKR$5koTEEWsh>Z;v5$(QBtnNycJ-|qQ`Wz7m?5i(MOEpe zqGf|lkAd_iDe=9gDNP^+{n{fzb6bO}@jk+dak_=uYO@^$^*YW;WEz&7fbtk}C@?Bf zbYCV15HRf|Q#%FsW(D{AMg&*KcwLlUwIFM&0O*0|SiUhL+ zRvTbewMSZ7qJqoqSTQ&**$qYM#a6mqfJazXbabxWjh^Bfpe_$oMwpT8$ETUTp^@|k zSm=w&%|5uLG*cF|Q=QNU;)|Kb8mxCiV`d`d#E5y(5N1^6n@Y^67QSitwP%cGEAR!p&&{D+MS+;EP+fU*A%Far(MlZ!Uay?aJTTGE;Vq z^`0sVLV9Gq9eaUFy2x=Zkg)@HAx^|aK7vjMCg!|Uq0ry8-ofDo!|`@_|~$`atcC(4h84Xi%$& zF`)jG7aQR(1$B)N)HMp~%&@7I1#vb%V3&>zW8OhFE}47tN{xsAC9^jeU`7*XZN@Bp zCf%CLWpZ&LH%d+3{2NB$yD>jR%+mqwZWd1V?8!)-3X4VA|HV8J72Wx7n)bn1e{~*n z8qJBmp?~GTp6bvYWVUFMhndu{Fu)ML)8#-lY%LhH|C7V&nmop_rs!f+6HGNsbVC%G z0hWMtJEi=)2iHXPS~19gkQQoSmZK^YkQ!6z@)g^KL*=j6*S`1Iy*vN#Gevvs?amA_AAH1>!=A=FM zK`^b)iY7b7VpYwp9r0H8^<%<&Kjjn7E+2ShtPi~22n}9uga)sQ7(*-X@&F~gMAn(5 zG;_F+4PgXLlA0L{JZbUd2&VnKe_+U<3zukADch9Pb44lj+{DKB+lv!1o^bq1&;*z! zqnGK+6}7(49agyxB$1hXLm*bUdf(&rozNUve#@`#c&zWL&UbwJzTgVSKL4&10)a-5 zMKnvav>p(`7tfxS&b1vH=hryZq0d*RObSqs61skeL^9pL*R}} zWuTt4qQ*dZA`pHiFv_<~+kVFbjW-;BdbG zs`QnGdg7izjadV=h=a7|Ik<{v4d~s4n)8eAT>bQpwyXczb@c0rRex?qJL#I!rGHGQ z-=}hg^EV%;Wvma>-Utn9Z-fT5iU3K17Dsmc%_UO#JQ@;K6w&8S6HF=u7;&Jp()>&s6_EPo2fBZP=NFqzLL5S>3fgeF)iHl+(EyY^+C&%XRO@0`$+Q;D3VT9 zG14lw7-=oSi?kNuMcR(At8OFBs}#QOtrXIeeUP4L(kEA}INL+4gU!oqU-a7NU)lcF z^gr*r=+*sRXw2;a*3$@U;Y{(tTE_Zd?Tyf|_C{z}tB4}3r??<1Un#8XM~GWJlV9NK z+BD{3_7G<)5KrIsllD319r;FY{OOA>-MDteU3-A@frPVgX8GVOV|{S;Mrb&DBQ%^< zL=n!jb_?ezJ~&sI`Mylbv8t&df{2Z+fgrv-J@uF;K0cI9o%8k?^KVjSYjLW9^Fp+T%7iXdLFTM$q6fwXYdi_q}}i^9Kz@SKM5PFSTZQ1DY=*jD>TI55_Xq2V-x9hOsw7!&pTWVSJ1i8S)e1 zC5MXBd~g;bW6Wl`Gym|9~SN3r~Lin)x?;d_~Lm_Yms{VJ)2H zK3L0GAFRC*8rI$j4Qmxqg!S^>#(KIB){ZLN1H2am!uyV^es;pAKd88Q^O@bVayPX< zw1;@FA-shX_rY7n`rz%2(D3#~Xn3oLBD~$zBMSJkygkDQ@2P$1>=}{Pyp`x5Nu+iI z^hIEHnqUZ~6ECj%^DQk8T-mT{*^iHZ>6^{#3qf~zXDo}F(+W4~Bzypuu|9x%BQ(Ih z5gOns!hi6>9gXIYOm$H`pB38Gdlf?Nety&SqbO|**=<7|%%uLz>&G0FSoQTgFXZPp zu%#XM?g7+i64b)U_&_aVeW3P6Xi$42G^ka?7*OkqjSwmY_1->EV~;8g$8Gc4X)^MZ z0Xvu>a`SsP+_3$Vul?ohZ?;c7_RCFw+XJxAC9s8ajt|%})(32Fga)=ZLIYbxi~;sJ z8aVV&3haG+z@8w%E^Cz3IkS4tq1zmcYe^u%eaTB3bL;UU%BF~cRG%CaVMPRJYN7~@H&E9 zIM@2XEn|J)_C{!Mdm}WsRRkav)py3}*J>c+fyggu4DMG5HpY(?{YhN~jDhiF;QMl5 zjCXvy!n*U;+##1;ZVmCnR_)2y{C2`uIJf%XD`S1|^+ss;dLuM^RYVcKx9&E+GyU)# zHuG9RCGh%LiW>>w~X1 zLc`Y^q2a3{itxS5B~tpz^6&nB_$JaNWQ049_X%KoF0POH%I3m(ygSZcd41?ZJ-@1b z`$z4ser=`bRW6Z1mRIpd2w&km?1Qh2^}*L0q2cR|(C}3eMfg5kh_6=z@&_px8yUomU=*`pr4xuJ6pX8-v!1h8;^-~+IX^#Rx$ zp#kiT&;V8uW9YjdXyDL8DSbDq5M~(A%Bu4P+u6VQ09q_dJ!JnZ5kgD-cV|1jI++9= z0DtshcXFu@yXzPhO|@f}U=y3M2^*_oWoePv^m%!Z7EodB=>YA+!y1XQ$AX9r zdsuNg346}50N7pBN%g5mNrQBrLy(f}eYx)OD(mU29(SkO+;Zz+X+gEv)&_cfcK71A zkuyik+~)FIgioYow2T%@Oa(YiINL{_Q-U2cb@{$rGK+IdEcZwnkm`h@vSmr_wu@Lw zIk9_O;20>Uof!0qoxub&N*TW~fg_}Fd=v^fq#ROfR9cj=-xy4wKJ*_~ezOj3&-39T zxid!e7|yV`Sh7-y#l@19jAbuB-ZA$NS*!sO>yjt##`;51g4++qVZnMo#;(*_*w0Tu zq4`|?8iPxAckwj(tasY2+SX9ZGvT$s{w+gb(d;+ z(#!qhIFMnXST^Tk;Qg}VNgo6?^*tt7F7;(0SYmsQJXmV|lV`9zG$06=5~gjylrYkQ zrF2Y=lF5mCr^ZYiDTOVindU^!GLvB7p#(&T6ssjfh^qk(WZ{p`edP2H*Db#lI1CKfBC*!4&RD#sxf5&XPLfl>s^cG0 zYJs;rwTrd^VK;{8L&iK=;xtuaS7WTPy%h`dx_jCiyJR<$5@mvrL*fJnNGC1xgq4lm zU9B-3CP7qrGX*|cQ7dnmQ_DL#xd*ew!Xmy81 zk!QuH+J33!tyg(l8sm*U-JPpr&8^;dm#&XEZ?9XJ8Csz>LEX)9%GeawRf+9EC+1wb_D3tJ#CH6@y^)EULs2F zPZgCzM|KYu)JU76>ew7@?C$Qt?wl4ZH}wdtX|7@w{V$rKGx@Y4_EANwjzxP`G!jBF zKPqR5lBgY#kj|h;46ndxMkzC=4m{KfovI3Li$q(|Wx6|~IGWQ-SjkMjjY>^Qdh>-By$!%CgFqxz0|3Z?w-iL1M>e}d3d6`N?ATP3|3 zG#F=F%s6Zb`Od;z;Gqi_k#~#5_#(N{QV`mFQTr*M`Q9IHJG=F@>cbZ;@Ax6qtQKr<}XTj7vp+uc}V}M1|5pSi` zJNI?UazsO+>OWwNB-%Dl*eA&}PBu%(v*C*D6Ys#NMquZy5sif10?XLF_ZHDz z5j_7Q0e0Bd?ZUhxqCVqCE`@#Gp|UdgTc}Bks2mqOzofE8u!J;0iImTkr?D#dJA7%Z z4xV2jsW?DVDcTndP$fepy3(roXCfsi$K>bY za+9AJ0BU(K3F>=JCskt!=H%!!Rq|uUrF*g}1uQOq;8xM`od3kWUd%UW$Dt7kIP>cN z%R{z^cI?Hq&zq&kLoq|*IlqL0fOyeyS`;2ft+nH^{7*Wiq(|rzz6D!y-E*`k?P^ef z4-VKuAb5#_0vvW)aJF2qBev{=giu56yjglD!qj2H^n~M7{>hEQrO)G{cdWs#Xm>BM zqM>kiF$I4C#9(H@KA=>kq+dt)w;az!?^~-ro6$VC@1GFmK3~O+=aF4H&q<5TdnksA zl@Z?4h_ndrM@22d`%zIv2s-Q|LxfrIoS+waGEYa@Etc=H*L)Ze>CJi!oGG2uHS($od%p?OT)rv)XFf zmy7eMb?DTbH)k`8GkRwF{J`)`>T-5aQFfnMKCSwG6G@y+a?6o3VSbg?XE^;Zb0(|( zA~DpJ(|MfDa$l#KqhJmfEjd7+{Cn*6r)qgMXA4Vy0QNAO{Cvwb8z zQw|TaYUw*7jH9$f*im6NUiyv+vl{7J7G|~5cU+i-rSF6=n;?BnVOA%7EnzlM`r5*5 zlJuSq#XF*5Hbwe6!fdMab%oh9>5GNgbm@zS*$nAh6J~o!-$`M%H`|A( zUl(TkO5Z7Awx9H!7G^W0@ANR+U;28(>;UQO53^a)HxOnYlD?rZJ5c)02(u4MUn49&6d7wn0-Y0a$&3(78F=vHb?q4hS?!(E>SfaX7i-)tT3A|eP@T+0_oct#zAHx z-Fe_+I+mbA9J3v#6&~ngefXt`%rK^{`y*&T&KAw_{0I`Q11SASja@@c-$h~?3|?QD z{}3SgQFc)cD7{#vZ4+yP!t4?md@09?z9<6Rnh&$fWZ=iqZ52aGZ53jlKoEUHXrOuR z2GCZ`J_&}yY22KBM7@?~#u_?%&%oD(rH6P9H&;Pn_Gz}g7UzjviJAuNM51PN#&tEj z3KVEMFT}1vl@*;HWfx+fg=kjcj+P6t>(T2y>Mg`>;P^%@zou#*WJ2uoZUK%$3$dHf z1yy=olZDt0$Pg9fs<05d6^-l$)A!mCyB*!z4)Z9j5c{HA8;`aMu`fZwsti7AD#X5m zYWV4=5c?WrgH%i*cBf0cu8~6QZnw6MDhjb(Zm6S!LhL?BGet~+@(Ho~!Q=&+C&a$V z#ld6ctR|9}f;Fqzx4@FN-U+dXfl9H`39&~|Yrm~TA@&$&_9BcBdmKy(T@zy81r}1# zgxL4MN}84lv8SLO92FB{PlH!z->%XxA@)O0-IR(5vFA`YG)sv62p*`F5c>&Nr(cBF zPgN04>YpJ%h;unn9AYnVF}V~38gx&wEUcQn4B9m<5@NrCCbc<=CPhQ+*XZo7<_NJ@ zk;1DpLhQc*vI&%N&ORj3v^f!<4vRusM}a+ks)2M7AKx29C#Pe*H<1vlW^aP?gtTL+R97M=8 z?vXtq4wK$FawEjYIV368;?*cg=CXT2h>u5;$uMOFg?O!#QEs9L@d-{whxhqJaE#qZ zovD620YP{Kh+$qY(Bf0j0(L6wt4rdWxQVniay0@vmdQSZI@1@$gK>v703UwwOx*j#=$TSCr} zRC0RANs!Y= zj!DiSIZ1LhkTXn9hMY6W$&)ie&L(m;le2}KbI3WDob$hix^Q*@+*@GT(C4;F*j?j+ zP#vtUDX_Qpf~7SRHr9c#t`3G>H6J{+7*9vQidqW$=>%9#t+1I^BDNEDQXJ)+4CGFO zebk54L$Ha4VGUtEooxb+XCwFd>`-CdGtrgXW z;ZXH)40B{S7-u5uKpt2|vIKrVes2fU1AOh=dG%M^$3A1QhuGElPYpY-{#q^MNQ7Lc zg&d8L&uJk`5ptszax6l=poJWdkejuTMugm=g)}4NHZ7zTA$MpY%Mr3u3yC1)%UZ}P zgnU&CX-CM{wUADP+@*z_h>&}YwL5(s%h3+Y41 zlUj(0knd|Dg9!P77Lr8BGg`<7ggmQ-3?t-uEhK}GA8R3JBIE@vB#)36wU7~n{9Fs! z6A?G0EH7(>^guJeWc!bkFLREYW z#9sp9F9q@2K>TGO{^KC$w;k?d7;o5=g zPFyID<8TH36I`$0dJEV4paJC>GjPqmpZ)&i%3bUa?YHtzd;AxB{9DLhA=6|$;eDR) zwVv=*p77)6-o<+EVgK_G`zzkCcy9fB_ppD!cko1tLc5 zyzI}2s1gzEcdqwkq)9qyeu$@x^YjRwHaSms<7v=&x)o1-&eJt`8g`zx;c30|bPk>p z&Qk`j4oNEd;jNM0li>|ZZwI_}(%X!jrjv6Cp3Zch4#rd7dDK2VVLHd!0Q9e)<;s6Sl#Az#ioWdjfp*T^`23V=DUrpTV95e?7-%V+65)y}%c- zpM%d{;>W?bZ)30E$3b2Lzx_9lvp2wVZ}MLD4*2d}o`tQvh5ZlT%H9M2z0WU$DT{$J zzm`|>9WYOCgYkJMui^LbI{q;1$wy%=exFa}PxHO_Px#*aMLv_i!uRK|@&ox>{KNbm zelUNZ&*A^z^NsO*ff445jT!t$wnEw}e|D*Wsa|!tUQa+ns&KK}c@J0O7d@0|~ zkK`x4*EzlIXN&M!m1x{B{YZ@VA8 z?E$2C2)*rLggyrMJLqjsqPKkyz3plAwr9}Wo=0!{5qjHC(c4}`Z~Fy$+so)}zeaES z4SL(_=xx76Z+i>9?QQh7KcKh0hu${rKfTSTxBW-A-HHLqKdsvg41SDpY&$HI>x~+A zqfy6hHzu;3#uRq9F_qnG?8P27_GXV7Guczd{_Gj!K=xDP!|dnA!R%FI4tw30&)$V) z^(SL7`v8`fVI0B78%Of6v6N3Wmhl%B z{6u3lj~gfR9%CKvHBRHhMi0*#eSC}2&$k*w{1PL{FEfVuRYsa$YvlM2BhPO$Ht{=+ zQGSncHh + + + + +