From 0ff577e8b10941632967fc32e9f873310dc19fa2 Mon Sep 17 00:00:00 2001 From: Juan Burgos Date: Fri, 7 Aug 2026 16:36:35 +0000 Subject: [PATCH] Ajuste para dev/no_docker --- README.md | 90 +----------------------------------------- captura_exportPDF.jpg | Bin 18284 -> 0 bytes 2 files changed, 2 insertions(+), 88 deletions(-) delete mode 100755 captura_exportPDF.jpg diff --git a/README.md b/README.md index f500d20..9e99739 100644 --- a/README.md +++ b/README.md @@ -1,90 +1,4 @@ -# exportPDF +# exportPDF dev/no_docker Funcionalidad para implementar la capacidad de exportar los datos de un recurso a formato PDF. -Los modelos de recursos habilitados para la función son los siguientes: - -* Patrimonio material - Bienes inmuebles -* Patrimonio material - Bienes muebles -* Patrimonio inmaterial -* Organización o persona - -# Para agregar la funcionalidad ExportPDF a un proyecto de Arches puede seguir el siguiente procedimiento. -Procedimiento válido para un proyecto en modo desarrollo implementado con un enfoque tradicional sin contenedores. -Para el caso de un enfoque utilizando contenedores o en modo Producción, el proceso varía levemente. - -### 0. Instalar dependencias y librerias de python (servidor Ubuntu) -Solo en caso de que su proyecto de arches resida en una implementación según la guía oficial de archesproject - -```shell -sudo apt install build-essential python3.12-dev python3.12-pip python3.12-setuptools python3.12-wheel python3.12-cffi -sudo apt install build-essential python3-dev python3-pip python3-setuptools python3-wheel python3-cffi libcairo2 libpango-1.0-0 libpangocairo-1.0-0 libgdk-pixbuf2.0-0 libffi-dev shared-mime-info -``` -y en el entorno de (arches) python: - -```python -pip install django-weasyprint -pip install pypdf -``` - -### 1. Clonar este repositorio en alguna carpeta de su servidor. - -```shell -# puede ser en el home del servidor -git clone https://gitea.patrimonio.org.bo/sysadmin/sprpcb-exportpdf-func.git -``` - -### 2. Copiar los archivos necesarios para crear una nueva plantilla de reporte que contendrá los botones necesarios: -```shell -cp -r ../sprpcb-exportpdf-func/reportes ./mi_proyecto/reportes -cp ../sprpcb-exportpdf-func/templates_views_report-templates/export-pdf-report.htm ./mi_proyecto/templates/views/report-templates/ -cp ../sprpcb-exportpdf-func/media_js_reports/export-pdf-report.js ./mi_proyecto/media/js/reports/ -``` - -### 3. Registrar la plantilla personalizada de proyecto que agrega los botones necesarios: -```python -python manage.py report register -s mi_proyecto/reportes/export-pdf-report.json -``` - -### 4. Agregar la vista personalizada creando (copiando) las carpetas indicadas y luego los contenidos respectivos: - -```shell -# en caso de que el repo clonado esté en el home y desde la 1er carpeta mi_proyecto -cp -r ../sprpcb-exportpdf-func/pdf ./mi_proyecto/pdf -``` - -### 5. Copiar las plantillas pdf correspondientes a los modelos de recursos: -```shell -cp -r ../sprpcb-exportpdf-func/templates_reports ./mi_proyecto/templates/reports -``` - -### 6. Agregar una fuente y una entrada de ruta en el archivo urls.py como valor de urlpatterns: - -```shell -from .pdf.views import export_resource_pdf -#urlpatterns = [ - # ... - path('export/pdf//////', export_resource_pdf, name='export_resource_pdf'), - # project-level urls -#] - -``` - -### 7. A continuación, asegúrese de reconstruir la interfaz de su proyecto para habilitar los cambios: - -``` -npm run build_development -``` - -### 8. Configuración final -Por último, se deben modificar los modelos de recursos para que adopten la nueva plantilla de reporte registrada: - -Cuando haya terminado, debería ver los botones de exportar en la ventana de vista de reporte de su modelo de recursos: -![Alt Text](captura_exportPDF.jpg) - -### 9. Forma de uso: - -El botón "Exportar a PDF", de manera predeterminada, crea el reporte PDF incluyendo casi todos los datos del recurso. Y de manera opcional se pueden incluir 3 características adicionales a través de los botones adyacentes que controlan los siguientes parámetros: -* **Incluir ubicación detallada** Se puede incluir datos de ubicación (geo-localización) que podrían estar contraindicados en algunos tipos de recursos. -* **Mapa satelital** Si la anterior opción está habilitada, puede cambiar el tipo de mapa de simple a satelital. -* **Adjuntar imágenes** Una galería de imágenes distribuida en mosaicos de 2x6 imágenes por hoja a manera de Anexo al informe (existen recursos que tienen más de 20 imágenes relacionadas) -* **Adjuntar documentos (pdf)** se ajuntan los documentos relacionados en el mismo archivo pdf del informe +esta rama es para el caso de un entorno de desarrollo clásico, es decir sin utilizar contenedores diff --git a/captura_exportPDF.jpg b/captura_exportPDF.jpg deleted file mode 100755 index 1e726563547f0d122806b2d91c1d6eade580458b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18284 zcmeIaby(a@lPEd_Pmn+$=m0@N(BMu8A-KCka2aFgww1>Ykda>fi13?IPfzlANL(00RR6 zz_|MWZf5{80BlSwEG$gyy9yf{8wZyF5BIJRKX`yoKtfDPNmbJxq+d0{DBmV-yDu_a6QqkJTOmFfcJOuy8SP?&I9Qhxx~>?qOnK zlaS&(dNM-B$SbX#kcg|PL;jdg$f6vNNmv)+<{1)S`AX~4*PKyiegR8sk9XM>Z7ebr z?xA<|Xzs@O>u3Osdsvt_*tmBO1xfBihJlH99|IHnAK1Ylxrg}#imwzQT7 zBqYAPZG`a=nE=0b_R?X+Eeb$@dB+n8CJ8_aupt?F@ttC)abI64#WJw0^J4FEVsys4 zlE6Dni}4~RHXdz7ZL&ctm}Q-~_rUcP~m^Y#Ip{$@(^V&xWqQ<^fPDs0Sl;e91=3pl+6q>B9`^y*_`u}j7+fKclC z`?}iS0gY^eO%|sSd}=&gCfurrV0~0q%`KpUcq-_|#yX3U@g5_?e_uu17xS-6_=Mj2 zxWcH$$hn|ah$*P7N!p@vfJx>(ZGu39VylFp0~bi$OVKP|(YK&V*OWP@Ak$AtdCW;? z&_3pjW}y2*Ye4szd-fY91|H&EKsR~zrEoHJkexBFrY0x2oxV!Ru9q1~2r_zN!JOC% z5T7_M@FovnODZ34tEn(AdJ6iQiJwDDiSINZp)j<$uTu^87kQO9b5fIB@xDA+Gy zYMNhZ`ZOQHRTLi$LO$89eGaIHdWm%gpOpd4M$iVG&np^WbxTpK6KJbqTPN$Sc|{eI zWxlhOSTFsLCDY@1&92^8c;DHlq^8|&0WYv8V{ZYV!fVJaAWWa-2FpAN^kr8x=*ztw z`CCBscwpTvpshsmbgX%@uhEfq-DzNC7XnI?=f$FZ=t17=&*s`RK3lj)Rx^{N%PFYB zr-&_)Am9LI_LN?Mu1)&upO~R<0W88d*lsm_W}M@XH`>AP%Rcp);MefwgySAZmv#pc z1fFzttk0|L6*N}Y!6RZRn*F&^hTDjwOL0h(_SAT*xd7L!j=TiK5om~2UIiYXg$&W% zOl&G=UI(kI>!S76G!^D}UWBZLxiNN|Np0ea5HIV$;?PRAYBPYLs+YU#6`74$+>%)v zM5)v@*6Rzfb3tvmb!BWwaX80T%~Mm@%!8!)YrSpPq{5harF9pRRy&VU|MVwZlJ6W= z+M(cPmu#5QTsk}_qPjwz>`0^)j-8T*l zarjigCE4_+cJ1rm(L&`BvGh<2?P`BbKO~YFQHa~!rhf; zn~RKUC_>;Ai?10bD6P=_mMjNYU71k}*pxA0ZXPaGP3{hy*TPE#f}ZxfqSzrR{o+VL ziR>?KIC0&$RZ9h8FgbP1HhtQ@lhFY1E#U2leSQF|t^oxQ(P$#X4!hR0DXP}c9UrFF zmvJL3@=5mTHgJgmiJV%e2rPy_YJa*_tKYM8noMKX+i9#`*?s-g*Tpzv$D1pKq}FS< z?w$`RF2>|aNUAr|_`P{$iO`_D;IopiLccg>H(Z9~-?{`6r5_TA^Z=1REIDNSukKlGqjL30dL=LR?kE#7$FdchY=;7pR zweCdCV?~5pz0`5f%lNN%m)#>zF=IDJ^dG>E;z`__;Fm_THPN|&M~zoL1x)P z*Nju1K8KXce0=;#aM^NyHFQeuv}4pq`2m!#l>^)XJ< zVy-4Me4wISPpI>m(=T<%tdNGKQ?Q({OaDd3n?*0630Nx8dCk<+WoXn19kxcXzy+=Q zu^rU{?J*Dz+QGBxSz_45h2rqIah6_68q1qkSCjUu8T%HIj)m8)<>XYn_)dh&C7HSu zJ6z%=W3}fMb)8gLlo^k%a{2}LyeC|jqNKvA?KYBp!!@f$OwvAQEU7z3e-1m$c6Nk$ zUv`SLNLjc&AduskPbVyy( z)ET+09D~ipRs>Vz7LUZE;s#MQdSwHK45}bqx)O~v9$p>Jp3&;^qprHuo@9fQXhNsl z#~(68vAh@Q=ZkA9k=M)nUM;;Wbc3eZ^>UM1x~87JT;K4HA9p?u9pz8CN86s*Eu!gY z8?Wk7mLceO3z*1etlKWV&^Ir*GL)`1mIt4HaQ#{}Vw_hofuw@G$%Kz67@SiI#y#;i z%!;E*r(Lb{BF;hI&&heP(ZjS}U$*&b5rp&mhTpSgcC%~8w_WVS3Yv7{j0BxzA6C|~ zKTl+jVS$RvzSUOy-Ad?AYaQ7Jo#;et*9l9AyjQn9b=na$fBnI_hI;EYs#}@-N5vQN z=$KK8Eq8AnsNtlW6(r$*{(l3*bNCwru%u&O`hAndvvL8gDe(Z zDmQ;pqpeP^TG8T5qsSZ^n6D!B7_DaC)1EpHmUql`>hzYckpLSb-d-Op!d8O3MofhG z@*SCE^p&f|MkciPUx$iX6=Wa?eK0k485X@xpKF-eRK6H;nJk18yiJank*(66GY2vO z$yB2hGFy9)P%H`}sxDktx8n(C&B4v{;>zm5^WRw!QKbJBR?$`A^p}#uz{Zvnk0LMD z?JIM{ezPf8tv^q-efVsdL3)|11i}cu!b#BiFidy%ju(&l_X(5>sR;Ni8DR|NElsxnBKEd&>C% zcU91(sr*jt6?Ogde{O`D45(_3GQYKC6wBY*QG zXgq9OYE3Ox|5`y(=0>-7;t^BK2Tm)az_$0NEe(?9Ck!XV=h`_Fw*W0-jaxtx*5tye z^u_)y;Ad$PA+1_?I`1llO~*=QBoZPmFI}pSNFfOdrM6x{9*1*?XaAV=}z`Z_8hXF zd>IgC>i9AlB*@6E7IF4BP+&HeG|2F3JRG5=l$c^TQj%Y4qP8^$p)D-8Ew=EC1ALRw97ZG#2y&i zjAc2kc_iB!TGk6mN^)ms0o_7}ml~O_HQIV4)W3hwb>tW`tQ8{ROu&Cm5}D_bAcyjL zv;J8o_eMAZ%W?OTcOLFoC7a>Q;fVG)E&iR8pK&BBK~M-{2Kt0`$(YFB1Iv?K;aV2x z)0n#DHJCDGMyS?9lPNJ$Ll9o!IElduRNc+mxuj=OttCeV?$?pee=V8@)?*&9Ulq;X z0xXs9d?`r{;K)*J>)f?7tjt~qRE`HQ5G`!a# zscKZGKBa*b&uXk#MM*426O$Fq5Kt_(Ec_GlY5(Ah?SOqF3UScjuR0jD^oS_sMY31l za6m^@CWoN?C$Nre)tO{@S(Z!xaLv?6x}$YOFH^PSd=HcRXH0pF6jC?;$JiC;kTeJE zWUicMJ?%-M^g}zL{Q){ zQsY2v($gR89^9n>%q57viEGO5)()z=4g=ew_rUXK|)koimuAi}5G*XC8a@J-t2vOj)pWSDsisGO0p z%BwTaZPK2z4iJDR!=C-*t6^0D(xJ1qwjat=lf-v|CTAum`QJFt*yvYrXUgmR=zS*3 z%oVPXp}{Enq@n%5J#LZznw%thtbgK>fM2wB8)rf%*+|cC6B-VqMP+&;%5AA1^lnHqtRib@_6v+vk<@VDZo zP9J{BOf-rkPhZ9M_-kNkCb7LvyxbFjLCI4ho^MT}6*AEhF)ty@7;Q^&U~rkF@uIZ z0afzJaU$i7@!?Ib0!k>f_s80iMO(H!+97AfFNh^{o}+-NR+E#Uv9p!EMrRRKDKsgv zZ(XbHb4i+{6r&&yiMSYoR8e&Y2FXg7(4V_%6KMQKeG}`vdcAIPNf}1oRN)JnCnJ=; zqFpaVy1=*uOw>b?=GHqA8)aMDePWS|`LX_*0^mvwmm*qfJ~cq^K6CJk(IymE7K&Q5 zmjFS$IHg)5$bx;lIe zN8&HX<@DRjJh+-airRQ9Nxsuiv$zoZKDjw}8q_?~UK=_onKj<4STjQ};e|>|4BG(| z6wK{-S)ggU1)IcuKB<75!Sh^?jFFJ=Eg2TFSOOavc1kPv$WZ`TggF66^6IhM5eS`M zlQ87dIANUTXft~5oWKq^73t2lhnZbt)fx|xQmemNRzgbVpvgFqlDS{A&!v+Nj5ovv zuy&&@(v@vE2_%T!KdIdC^A3_ov3!OXLOp*9DF>YPf|Gp;pFiHNXR8~WW;ggnu>fj{)Qq*ZhN%ZX}oY^O=Q#GaQ?_-P(0*OmIrnrRMh> ze}%GQrx3GWn{FwdwL{o%^-tT!dXMhem67gcu zL{2H=MCWIYU~J+0sFkZE|E3I(s1@6P*P~cQzbU1Z^v&=SA~5!(|%y= zi&5jB5wH&=RnP2+_+XY zWSwO*f5#e>1mzWm7Q@(KhB=w|2K2P$b)sbsR9GafVfzLt#uJ&Nn`xen8X96&5${!H z7@te+Z8J$W_nS_C%wx$xy8IlU6oQX5%&D}pZLt)3dB41-L@nbI&00uTmTQ`w?l=~6 zu%&4X#>lHbaD2j0gWF+doVUW&pYDbSO!p^8cXFx7YiC3bRz8w+E=K!Sq8P1fL2&FA zQ6kEV;_%nBfj^e{DjXcywzqPM@-o>L;~R1kgg*$j&*Lq=8a~CZ9`zTkm>M>6o)VAd zZGnk$Je_;oilmziVTf5h0NuG#YT0&g4xP)Le#Yr`f}LO1PYC5xgPbaA@T<4|sh( ziR4t5W0G0=7&2(ln^fd(JAdL8Md#$1j8kzatSG5V@g^iR)HiJgTA5=(cni3A;`_6z zYV48$)tGz8U(kSPDH?kySYuz{6A^}bAVZ1Uc%MVXFHvb!Y~5l1_&6Y{-P(y(=wm!gg?=C?)l~%J>83YevuUS!W zz7RbA%I|Fy1TPcmo=IA3q@i_p)=ik;bPi})F!UABth0gh4o>m|yOqrrC42P=WSs22 zMWh}n*HqvGiKHHz*q?RQ?Y6~#oj%JA)G08NuzaBi({E^Ev|HNtYD{X_QDR3Y9aoR9 zCPzBtJ4G{lMOVeO6zsa7mre!iW7}8fRujpKA07kvL=NayPp#w?T@k20c50uZqOVPx&}TDwa3D1ifZ1xx zTrt~@*vPNbIQ#!xtcSS&--?YfHrx&MZ`-VYi(~!GW<`8A+$!T4?bJE{j54Y#Mm92# z{+=t!TBV~xUrt0Zl%Y6effv2H_I0>0$7F}V4-VjEJchG}FPV{t{eq?VN=NQ&2P^^A52ejh<&va&KCbah2amuNbv5^}Xf%^hWoI*JEa>w18De)j}- zDLTCg$9)XBiDv~s?xPxdmG$4|H7PRx@N;x1`aBt*Rr6|eS&lz5tD8Q^vGR4g=dbsY z&_JUrV-{yOv)*)F-AQ(({#kEd>vVM>S(ODGJeDmlP`5%gq+taW_u+Jf)$FHD z`aiuW$uY7nNWgV;siox2(Hsj)hqTh$k{>Z!l%#|9nOBBVs-DqTByS*HlM@B?mQMsm z#~ZahdHRN@?6(&Qh^TPSN@4xjgr>R;+1^TfA!OxpKVzOdMH6@-XnlxwIjof|Ue!$$ zYC2&PO7%ioPW+1UtA6&{v#r4-XT|t1{YtUhae-TlAW) z@jrP!^oE{Qh3{ZxN+|;pUOupVz41jFp|x9*lb@Mf;PAZqcyzSov#d7fYhDB;^W&}u z>9`gUx871@F*Q6b`&%!ULVk|Gx^VTtq&E>LH8C2(Nwp|`_}(MZ>@Ch$_vr@#?%Y+k z01h*@LhgzeMh(xNT3LEPU1$%KA9R6<1RaP&9DZta}O))o=$DbHj!(m_XMKQvv*zO`7A2TRU>+K=_q!;QB+3?_#smCL3n z%kyo5rcv_uk$E1ianuo$C_Z>Om3;##qWH9~TaAAU1$`Kq+Xo2*z` ztLhwE$Eg>AP|5B2bKAVen)lVulR~2^*n4WN30nBTMAF-bd)-@l3i0p7-?LoWF*NA6 zL&BHLL1p2ruh{J~ThHWH61s7#2bh?c!lieaqI#K{7~0P;Ii%5~rig3LnkH+fAQ5*$c|TfTKPziJbVTl)+=M5_ck^(DkDyA3y+%%^b#u$FhmU2O_@t7sGp?= zhikI%23KPQh1coS?gVCzqBqsPCB1J z6!4E(^^E|1dnzo93CzlJBgTl<$8hs+r+s}5AMRvKj&1s~sJNz^LssDE9zHjAUMndEg9zrl zNK#d{=lFJxaf_2DaI~hlSUhQTZY)8C_~8#T&%ojgt|6uIBzwthx8_QZy)uC;OR6ClQR=QLYibO$_OWj_9tRmw^ML`tJh@An%|h4xO11T=IkSuK2D_#B zpO#L}ZT3C(!(;RQy35Z#msMCg>~&O(DoWese1#P|7BPgxxA>ZwoSOi!J2IIQJ8iN# zR3;ruWf?;mpD9E{;6()gN2`C+DHKt`^(jGr)}hdXL0OZ-($=4E8E`qd4~(^9e?Evb zU~c#r>>HA_=kD$D+4`Yjbhx!ut(0HWVyOU@md=k0zf^}c$^_PA5&sAgc7aF)kBT;K z{SCHxlK7Wh#Xo}kC*2Dn9!`m(2`lP&E0<$7V( zIj}mN#vhh9;x6A`TQ+#IfC3J@Fl`R>M%)bVfoejU(Cx|Tjl2E-djy9pS8=dIf6LDX zQwo8%jeb}Arq^F*$JS=1HvIO{MC&k|U$r>@72V0@`a8*H_(3pxBy()e`yqcAK7R-!Uj+0&^7yO5 z{NFAQ+_kQbYx9pMb7v)a%H>k}%h%ok+gr|!$Z+w2B1Kh!stFREmq)#pKK``gMvHFu z=bs7fjS$X@kIyiv?38;I6{qSPOg(BFbnvT+YvcL1XF#wc%3y639MOO_> z4~1oKpo3fwTu#v^h{PM&??3&Xfm25nI=j_n+LT ztn6_Ko!+OeEF^|1iclG?5srq`&?kU4+3oC$1PK%F=XXeR5w_t7+g0vrTb&e%R&Sp# ztQud_@)u1VHVz!jWj2X)N4+3zc={T>BG9uH7;G^}tBy>6vq8zRbt&v)^IGHBC*2w} zOV{^#j*{TQFO$}2PJ%yyH-2BQCLk*>xuVxKIp)*xC&6Jwb&d_H4+w(1JqAZ2^bItf zxRytz>XXO#kI;k(4z3}mA3k4nfJ{F_a<~G6X<`Vwb;bPjpj)P}3ZPeYOuhYRadf-tf(Wr=vW&No8gDWdd2#OVnw_}ArwS%4cJS*N! zVOL_+)0Ls+#jOuB`AOssLvs_lc#7lJ0#<6v-^x0c!e&^0Ji%OwX~?9}q>6`+(MLJ=yC{q+fs3od41QB(Kg92*@Tu}?y*6vBEj>lL1FXl=3{L77Aiq@GXl+htX1 z4QZ-AqGwC<7Kb6*k7Ky)(U^+pA;&=)Wo3HVl29a*i$|4eUby%82f3fZY6tRJKm%4P z2;hvC+bic;=})!mc{3AJ&Vf!g-o~IWUvS8mr=(r7^W96ftxF5@qrR5k*NbTN8GLY- z`iJvh4e^{t#vGiT_w~_uyF9jl1~o)H+Le=DSsf!0RW$jr^lD+qSaQ$Sd#PxoQJ6mm zDbB&ZbqnyD+O41t$UtuYm=cW}ePwoMm06Ce z?+pgIp_U6n4X_SXX_lFuEVafiHv!L1xP1C&O@q{i-tjEGzwDM_Q9-5c5iU#K0%QaF zdKsvHhAaFERRGkYmr!ILl|seK=gTXPj3|M#yN^18$m30!Odl1YWHJv!al!j6?jF*b zngqn}6TU0wCwf!1iDiUBuBdg2Yfi`#bd91R&C6nQ>ReQ#!de7hz`gXHTAHJCUu%bT z+PK;#jym~moL`r@W7fKGj!yx(+Qa0)FJ{+pMl`hvMI%(MpE_Vc4p_Mv(!tl*3TJ}R z?(>V2RW^gH0Ajz1#mEGC7lDzvFH9Vap7JVAtF?t!nco3?K3hx3(`S}N4T`cdDohRc zKU=2j)Q>1&c%e~#9Tu~YQ2f2ihtB2A335m#f3t4DUAiJe*tE2{QfQ~TK3ChX$zBsI zjkX4>Reu8$tDOXKTKAds#p@EfOKo$^eI9vW=cpUQRtGox=Qp87if~^gyc^n$3~aGuG+l z?2%M{mzl%zP_)4cD?RWzEil7$E~C%;7_M=ZcT^y=pu3UdS_`Y)o7VI95M#xm2`+rlT#!*~sK`pL-5LhLN zt5z+6`hIbbvNfeg#0kBx%GRbym#N0J-`)@zY@zHDpXz~byRHNn>Z(olKVB-$%~Y79 zqe)Jf+UruwQl5!V-=GH5xOJ4)YicR1>!^PH8LhCCn=a6(=0ogjRGE_ui$4Z;d&cTI z&1|K!uMN++Q67hjP~Z|+SFKd)lajgQH>f*16crRF1SO`?e9ZC6UJ_aKR}_=;SKMDg zh52YIY7=H#~UxOG2dMZ_Y)B+*qh11ys;%*nNyvVe zk41p8A~WIq{oeVu;}C)#x?4bY);C>Q%76xa9JOA$bzE8yDBU!Ezf0jqf1^$}P&{j# zU^KMro7dsem*KFjszGiZCVctRyj)9 zJq+3&He0PXtbadp$wuJvV}{DX_=&=B8-GUWWmt|!*o$jm@%_3zP2^VLa%j!xa2?6m zD6vqJUr$DVzFyy2lqL!ylFGw5`lwh^SPFAompltIL)jB@IGlyVe6D2GaMkcE&v?uG zrP_L2(JOFFmdQ~6aa4ZSZzSzr%!ornmULbXc0BCCQEOj@C3#+PobZm&woK6IyD^RoK`RZDr`f;h)(j zthe&mmeynuFQ!B?xl=B#6qGI{hh&Zhv^k7)8ujZIQ+{#JFL1)H7RxG$N2d#>^K@4) z)lI}OSBhRf_IPNLY5+taw9Yp>5+gE5lCt?|74|OWA<{L^8dN0tzwTTG?)w(tZf;Nw z**T6OX^$sAZ!Sk|J&I8Y&9{rHC$Oe?yhQ+Z4{Jt?1zaiU(eMIWC$&_~fpQ1NwXSbV z8MaAj@2UB$0CO{MBnyRf{>Z($2j(kZbgD-9T8BR~^4PZD5jk6t;K`4(c}MKl@vkTe z{#tGV&OWyF{+o-J;nu`KBicf#gKyl~b6Ky~t77*s-p&eLmSn9y4I>?5y3+h?V+!W#+8VE~#!L79sJiIc$Vkcx4gb~VdKQi?EX+PC=q5v;UQ z(&ieTg-kT-_?jcqc*qL2f#Ix;=CF2jAkNkH813NjZl8^9*rPoZpl-G-m*pGDE^Sf$(L3uk!2$C0F&BYwnCzh?{pzr z+9D27-c*@j>xsM{LUC?*KFpVO?`ZnC*x8Dowlp0Vhu;En2kJhJ>$up7c`ILU=LJyBjHObHTbvCK#NpdrwPOzC2!F~6%_{k+Y3|x^`JmGgn)$_?Ka;P4z zF@2aD+q}tHzc}o{JTrkp2v)cbj_9zjvGOy)qO8@3h$gjS;eU%Th`7KOmlfLXGvmZ z4GIp$4xk4n>oQOOFn5fM{$}nFv`KRWKSz9)`YvNcbA`uxIdw#7-sHijGf>pBIM1|j ztY@wJP#KWPmh<+twS)-Cl^!|gKyh7*PhH1kIIg!i)**c-RzigWPUVvXiNyo}*QJlw z`>R5jn4d3e>QcPi=vmzvfKMs8L9T&SyXu4F3Kr4Qyiy@bq1bV2sdmg$^>vOfQ_gcM z%K37lHdq$qB~Co5e&~ za_W0A=}eHc=w1I>+QW$tVAfdDFfZBSIY-dWYH>hwt%9Y%L3M#U^J}Sq$yP9}Ms6nM0Jc`fj1w@&sE zI~5&zWV}v{5CC#dM=#JGQhQ>e+=#fnj52-D1DOb=?g{0L#Y}lxz)CQ+4-w@qmE^g! zjo@pZ0W3Z#h1Fa_r{f{UnD^<$5hOb5HlycRsnPII1jbW13mT-J3nZbbCoH z9x>#0@nKDM>J~tARI9W}>VZgU8f$6y*qrzDw9^yt4Dx#D@~ryv1~fT4JUhO&TMM_j z`kwu^wU@G3J*W*r1f5U6qqy2lJj&F}}% z&_3S(lr_|sA(j6<*UopO7U*Op^|331vfEg)$t}!5V@#)A%jV&CvvrwAgLoM2R8;%u zz5O0Ew&rgBbv1t{13Uw6rLI)CMY1EhJ2%iuH_y3rDjcj^n&z$Uc;^AH;~CejfmcBj z4Sn1rS-mGET_hyWcUf>YOKe+=Eek@k1~^tSnFRdnn0+}Z`y)V#m=VhmRN>MVjO~T? zx!u>j^*I;sncaOUisreK${fmx_F8>1wHS88Zel=0S6;xBdE1%1A^Xu8o>P26{`dZrJEub?< z;Jn`Ux74BefH7krYNMPkF7R&%{lm8a>_*d;IrO~-KO?*Hy=sLYMrOZacI7K$>pe1m z`?y~`U#-6d9GG8Rn_hCOuXi*^`nn{S+jeR4+OoZqOnGHy)YNO~JYZW1Uk#i%bvzG1 z-S;aoZE#q!VX|^BFCd!y6)leY?R~*jD{BAenD5Mhhb71Car5=StSK@g*XO#y+(UKX zq`ubCwsPrsL+Ue)={d|*+_&H-A>wL4IHPGwj&Y~JEoP(}-T%t^a^u5T`pp|>?{$YJ z^!gVbp~hbV^IpG9DI@=evOApm;{0Eu;xL=z0l5@-s@~!gAUd>;GZko?HaPF_3lsF6 zUv!fBJ?iGJM+vnfYJUuq{XLz(y$EBLOoP-Al8^`9o!tL!}MuJ!}BY6IVm=}nNf@H6f z{TN#Rgc9FMh+b118E%GQ{t2o6+0ibW;J=l`=HJ-2%f7F4A*R%|l?l_2t-+eK$bsUUSUxLQLdZ7?}j6^hai74HL@y8rl{*_Sm%K-#6y9k@J8a+xx~#E_d81UnYL^H7-C)xl1SmgV7 zT*;e`uMfv29YH^1tfB{FprXAXVjVixZ{8*UpaB07RWRohO%SLaQMtRSnRk^G#W49- zjTWQ!6ZuTt#|O9tgnP5NL~#6bHEyZ>7s|^5oo0LAI<;3Ey%x@6f>Z#h@nNcCWH5=) zg5e`LIDZ~PX-i8(o8J?LUQ^Qi3AujwAeDWiEcx)wpO9h;9qrA>bIxPwkUycPe|D_= z_mfbj9UD2$*S)Vu!*8KI2 zpFNZ(xBmO%f7*#x3;%SC8?k;HD!c`pxCIOtqfVRYuRwIfLw?%lDVZFq@dcrkj%a}- z-pDtw8p>6RU3cYHrr*yM^JAjjxkuT#IqwoEK=l>$)hS{el;^SJ&@P9Of`5%sf-Vu-zz77w#)8LZCJ;(W} zm`kxnlV?J%V z>}Jn3@{^_RU-*$empt$G{XKM$+WP`BAIN|8)Xm5PKDf1X+Mjh4bJ)GLsnB%x50sey zjw$dr1bc~`w~z~u?#1sX7mcSTUj`yQ{8ocnyU^gW)30vfh#a3bo1|8I`<3s(-o#ai zI05{Cg3RiwW>#>NCtK$@53{gUV$R?c;S?U7^?tszmNO| z#bac!zrIPpid*!b-zuN(zl+SsPTpx*V&Ok2SqayfOG*`mvAX=ok-vrbfbYC3wYsf{ z72U5S+v;a)g;nUMlcuXRChQioqhe3BUz(jCm$ycA1D5$j?uG6+?kzlVx;CB3Ifg=q zz5R~2`-9PK-LCZps+=0H&hz8rJ86_N&+2fhh?o=n?@cx5wM*)?nJnk!XZn75q-+_* zch-m)3m!>OpC-4RoFdFcZaKgw`>UGi@?rVeun- zE^5Ln@(6|S&^_$(Xg(gR(HPrf$z3dT@cL-CovL+Vj7E5k*6K<_5yE)#&A%lzFZ7bC z$UHBV4SkD|7u2XHPlpC%nv3!S*fPCE^I{0&1Wt_T1g$X5F;SI!!m0EX10U^nh1rEW zN0u{1ok?-;CXIRKq7Up_wc(LYYt3ErN)8KhB>!cMOwe?&&rhC@o<3_mbEmY;hD{CZo&p#P2-}ir_d)7C-H)1&)@i9*>Os!N7{Y>t6ks*?Hc8GUXnttDp zt=G=eL&^)a?$Ik^zo7HL62$~VuG2I@uGEx5cvrSIr0#)48GONEoO!O7#M^Yx%lvDr z7kIC@dIkX=8Jh(;dm9zAJLkhH{Ctb#ZWO-YlMFOkz4W46T%N2I9U=$~8_xQ!F)?Yp zQZuflKc?pj(Zn`!vF8ND;kez*0!6z6$vo0z<#nrmA=$Q_N5$|et_2SpoY#G7-S`#( zXzp%O0B$5X1t!;w{b^vsjH0Rf11kh54+d3GQFEuJ-VnUo1*g^oOPWSoc7a2?h#?uv zvit_r4qI+X>T#L1=H4v95q`w*^&$~apVadZSSZ{p6xt4S^58Q=mlnsb#kX$fZOtq8aJXnr+OSVY5A()k*hN}aXP~#7S zcE;AE@j9UzIncFFNx~5L$R7&Kz*vVpDZjF5uE>03%J|fTzPeAd?w7lCScNMqlsF}y zT5>Qh!D06_fDlgdkc0%|KfManaZ;c7{oQoIuR*8r(MjO*Derki@=Wt*t0q*u(|DSU zqcc~1QnIL{<1;3bZVr$#ZzS!3j0c^lm&iu&-k@GZ)HWYtBH+cAzG>s!apVGb^oCl& xqv*5KQk_4-#jk8Zf`7Si+GXPY&)#NIo^1R_UQ0X)1*_(N`c(fN;taY){x5$_5*Gjf