From f81ca9359024d92ca4c733c3e7293b7bb9309ded Mon Sep 17 00:00:00 2001 From: kdeterme Date: Mon, 5 Oct 2026 14:19:07 +0200 Subject: [PATCH] feat: add geographic polygon and color fields to Contract model and admin --- loko/contracts/admin.py | 20 ++++-- .../contracts/locale/en/LC_MESSAGES/django.mo | Bin 35240 -> 35684 bytes .../contracts/locale/en/LC_MESSAGES/django.po | 16 +++++ .../contracts/locale/fr/LC_MESSAGES/django.mo | Bin 42413 -> 42859 bytes .../contracts/locale/fr/LC_MESSAGES/django.po | 16 +++++ .../contracts/locale/nl/LC_MESSAGES/django.mo | Bin 36630 -> 37103 bytes .../contracts/locale/nl/LC_MESSAGES/django.po | 16 +++++ .../0014_contract_color_contract_geom.py | 24 +++++++ loko/contracts/models.py | 27 ++++++++ loko/contracts/tests.py | 60 +++++++++++++++++- 10 files changed, 174 insertions(+), 5 deletions(-) create mode 100644 loko/contracts/migrations/0014_contract_color_contract_geom.py diff --git a/loko/contracts/admin.py b/loko/contracts/admin.py index ea73720..688217e 100644 --- a/loko/contracts/admin.py +++ b/loko/contracts/admin.py @@ -2,6 +2,8 @@ import io from django import forms from django.contrib import admin, messages +from django.contrib.gis import admin as gis_admin +from django.utils.translation import gettext_lazy as _ from django.http import HttpResponseRedirect from django.shortcuts import render from django.urls import path, reverse @@ -136,8 +138,8 @@ class CompanyAdmin(admin.ModelAdmin): list_display = ('name', 'contact_email', 'phone_number') @admin.register(Contract) -class ContractAdmin(admin.ModelAdmin): - list_display = ('contract_number', 'description', 'company', 'municipalities_list', 'is_blocked', 'is_active', 'start_date', 'end_date', 'contact_phone', 'send_email_notifications', 'send_daily_summary', 'uses_occupations', 'occupations_required', 'uses_intervention_manager', 'allow_team_members_edit', 'auto_assign_control_team', 'thematics_list') +class ContractAdmin(gis_admin.GISModelAdmin): + list_display = ('contract_number', 'description', 'company', 'municipalities_list', 'has_geom', 'color', 'is_blocked', 'is_active', 'start_date', 'end_date', 'contact_phone', 'send_email_notifications', 'send_daily_summary', 'uses_occupations', 'occupations_required', 'uses_intervention_manager', 'allow_team_members_edit', 'auto_assign_control_team', 'thematics_list') search_fields = ('contract_number', 'company__name', 'description', 'contact_phone') list_filter = ('is_blocked', 'is_active', 'municipalities', 'thematics', 'uses_occupations', 'occupations_required', 'uses_intervention_manager', 'allow_team_members_edit', 'auto_assign_control_team', 'send_daily_summary') filter_horizontal = ('thematics', 'municipalities') @@ -155,6 +157,12 @@ class ContractAdmin(admin.ModelAdmin): (None, { 'fields': ('company', 'municipalities', 'contract_number', 'description', 'start_date', 'end_date', 'is_active', 'committed_amount', 'internal_link', 'executive_officer', 'contact_phone', 'signatory_name', 'signatory_role', 'thematics'), }), + ('Emprise géographique (Lot)', { + 'fields': ('geom', 'color'), + 'description': ( + "Emprise géographique du contrat / lot (Multi-polygone) et couleur d'affichage sur les cartes." + ), + }), ('Blocage budgétaire / Suspension', { 'fields': ('is_blocked', 'blocked_reason', 'blocked_at'), 'description': ( @@ -175,6 +183,11 @@ class ContractAdmin(admin.ModelAdmin): }), ) + def has_geom(self, obj): + return bool(obj.geom) + has_geom.boolean = True + has_geom.short_description = _("Zone définie") + class Media: css = { 'all': ('contracts/css/contract_admin.css',) @@ -285,8 +298,7 @@ class CompanyTeamMemberInline(admin.TabularInline): verbose_name_plural = "Membres" -from django.contrib.gis import admin as gis_admin -from django.utils.translation import gettext_lazy as _ + class CompanyTeamAdminForm(forms.ModelForm): diff --git a/loko/contracts/locale/en/LC_MESSAGES/django.mo b/loko/contracts/locale/en/LC_MESSAGES/django.mo index d464408540a90581728fb0f1446593a06c5165a2..d61ce0c3add243419fb35496125bfcf572449c7a 100644 GIT binary patch delta 10734 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 Bxvu~K diff --git a/loko/contracts/locale/en/LC_MESSAGES/django.po b/loko/contracts/locale/en/LC_MESSAGES/django.po index 32e5bae..bd89c9a 100644 --- a/loko/contracts/locale/en/LC_MESSAGES/django.po +++ b/loko/contracts/locale/en/LC_MESSAGES/django.po @@ -2383,3 +2383,19 @@ msgstr "If enabled, a control team is automatically assigned to interventions fo msgid "Types de maintenance pris en charge par cette équipe (corrective, préventive, améliorative). Si aucun n'est sélectionné, tous les types sont pris en charge." msgstr "Maintenance types handled by this team (corrective, preventive, ameliorative). If none is selected, all types are supported." +#: contracts/models.py:415 +msgid "Zone géographique / Emprise du lot" +msgstr "Geographic zone / Lot scope" + +#: contracts/models.py:416 +msgid "Emprise géographique multi-polygone pour le lot/contrat." +msgstr "Multi-polygon geographic footprint for the lot/contract." + +#: contracts/models.py:423 +msgid "Couleur cartographique" +msgstr "Map color" + +#: contracts/models.py:424 +msgid "Couleur d'affichage du lot sur la carte (code hexadécimal, ex: #28a745)." +msgstr "Display color of the lot on the map (hexadecimal code, e.g. #28a745)." + diff --git a/loko/contracts/locale/fr/LC_MESSAGES/django.mo b/loko/contracts/locale/fr/LC_MESSAGES/django.mo index 271a5bae0b4cd2eb28b2f20337cb140fecc8e7f7..4c62d55571b735eb3db34084d92f466a80f00b64 100644 GIT binary patch delta 11130 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 diff --git a/loko/contracts/locale/fr/LC_MESSAGES/django.po b/loko/contracts/locale/fr/LC_MESSAGES/django.po index 7b1bad4..417a16d 100644 --- a/loko/contracts/locale/fr/LC_MESSAGES/django.po +++ b/loko/contracts/locale/fr/LC_MESSAGES/django.po @@ -2433,3 +2433,19 @@ msgstr "Si activé, une équipe de contrôle est automatiquement assignée aux i msgid "Types de maintenance pris en charge par cette équipe (corrective, préventive, améliorative). Si aucun n'est sélectionné, tous les types sont pris en charge." msgstr "Types de maintenance pris en charge par cette équipe (corrective, préventive, améliorative). Si aucun n'est sélectionné, tous les types sont pris en charge." +#: contracts/models.py:415 +msgid "Zone géographique / Emprise du lot" +msgstr "Zone géographique / Emprise du lot" + +#: contracts/models.py:416 +msgid "Emprise géographique multi-polygone pour le lot/contrat." +msgstr "Emprise géographique multi-polygone pour le lot/contrat." + +#: contracts/models.py:423 +msgid "Couleur cartographique" +msgstr "Couleur cartographique" + +#: contracts/models.py:424 +msgid "Couleur d'affichage du lot sur la carte (code hexadécimal, ex: #28a745)." +msgstr "Couleur d'affichage du lot sur la carte (code hexadécimal, ex: #28a745)." + diff --git a/loko/contracts/locale/nl/LC_MESSAGES/django.mo b/loko/contracts/locale/nl/LC_MESSAGES/django.mo index 43dec4596e3f3110d489d08d2a540bea01b3378c..c738f01314dab012b7c401dc96e9fcc591579683 100644 GIT binary patch delta 10764 zcmZA53w+OI|Htv~PR`qGV{@F}m>rnYSj^cF%W)3LkY;{t%w{vgqMt*EC@dj2IpkOl zHAy!{NjFgx3eiodJBokjr1F2gf7j)H^#6Y!efIoZ*Y|K8zu!$SuJygM-q-U*sQ+?@ z4-)WKH4jx*oaae7Cp)^W1p9OpgE#&Xy+-f@C32`gbYtc?9I42Pkv%fs?mWPJ*2 zQJ#m5a6QtL$2mz7Ma3m_;a{k>>v2^8c0@g>8&<;J=*A)F!h`q-eu4EczOlJK6?I=0 zR>z4Lf%7l~*J32?JGVZkt4p@)sb}= zj%BC@&Y?zj4YdS!Y<>Bb=DzBv=ft5pmWZ11-YuDb-7u62t!+MP%BR^2HlaH92C8HG zu^PUQTB^@c9r0uOQn40>;%HQZQ&9KKLS45AH4__AZ^>2V~jcgNE!(FHud=ItBE}=U9GwQm4){avfgHbcq81>wN$R6@I(@5A~&Q{b6 zoX0MB12sjl>_9!ZDQYA=P!F1h`e3a`?TIq$B@CzhJ8DKklFfC|sE&0(bvzAY^!|?_ z(Nrx){&POzht{l0Thnj^Y7aC=Js=r1L#e0-4Yu{;umSlq*VS=GVG`EGm8kaidPo|Oe1uK#2jt`BxY&_uXdu?XIj9ELA^XQU zjL~=xYoe>W+4XHv4^Bhvsch6w8sQLBhbLndT#o*@0ktW&AWPtJ-XKv!WvCv%kLuxP)^AW9 zx`&#|%00}IMWNn;W~leQE5>3v>iXH%WvG#EK+V+ar~#bt%KD!rQ4cR8`^~wD>Un%m zGb5>}CF+lUScuwOQ&A6|hw8|3RL8erdEAe@fzAqQTG}0`r71&o z=%Ze&zbejAF%xfKWgOGnY?1=hRL?+7>9eRQEUH zsJ-FpZ#oc-dR_u*52av3^b958TE~NVcnUMIQ<_<$ji?*9qh{zZR>gCuk$q*ojhgyj zP$P5(nER@s%8gKar=#^TWRrWG0upVK=dltlM>V((wWfPfYkUZ+;0cVu^QimoqplAa zXqKQhs=hPo`iD_7H_$pBwZwBUoc5i~B#%;Y5ZTyHwL#|3>XE2TvkrrC6RM#%ZT$%h zqkJ0mx?aZu^ciessu0&xUV!={Hl~qXn2LdT7i;MKFF(Yri3`2`PII2V6p?3RUs2KpN{Y z^RF9MQlSy8N6o+q)F%24)$os~sdq-0??E`Wr`Q73(Oi58J(%LdK=26VyN{a&4~{fT zaun5pk5L1^;33i4eQi(Nx0ZjxtZ^`EM#3=;+oEPF6E%V&tc}Yt8ed24jZdwYQ8RTN z8G~~N>tOE;v&THyB(rsHwY-)$q2}ZmlSd_Bba8rXsz@gVB@KTsnJ8*OGL67^l^ zVavH#gYpXNZfrsMI40vgjMw|0&&ijsI{`CO~9A`c_!%&+i54Cw_SQldeu^*%9@I=OMD4Nls!;Ma>Pz=A>cT6i3vZz|k?#ca znnt3gIvEo&3j=XA>VvcmHB(=q2J|h);~yA`XZoJK#dBjK@#|IBWek>i(Ok8M}wU=r_^3S3FJ_iPka(TVNZk zh~vx!P9du2^HG~;CsxHzQ1@NK#`rVpmsV81S=%I3gDKWWP+!aesDb2TMZN#?NkXVt zirVcPQ6qT`HI@4?1j|qzJB`}q7g0;}oh|zpn5m7xSn6A#IzALN;+d$1m)QEv7@_z7 zLlUjU4b*!bFv%=MJ=CYU4K~Dq$Zt?*8ft0IVl;kl4KFln-40dnwl2iBly}+kO?;ek z@MP9sYn4k9h10MKuEuw8EBfKMA~Th_)*=j~{wY+47oi&5jGgcVHo?kM%;ru;mD4aB zJy;!IoWlIKBzcXB1iXUU?SWIxTE-*aB&P$aq0Jb9hf&v^M@{uls69|;nrWyfYCuJ( z23KM$+=c4sbyNo`7Bm0VNa__ETVXlMsi?is-#Qd^!zk4CQ>}|p*Kfce+=kvggW4-) zsE!>&J?|$B!#`0o9pZV?R79eBoQT>BgHRU~q8>O4^}zYorKpBiV<>L0zKMD}j$sI1 zKrPiR)bsA5t}i#;%%G}k>;RAG~3oMMRnj6>rT`I_hAYiMg3h+VTS2g z3~C@vPMck^JvYOYJij`M9Z)pu0l0%4twC2=!=b>GMll9H3>DP9js}n z*Vk>!`KW=-MJ?S*)N^)tW&L-P=!R0PkB3k_{}Q!kzFeaZNoA~oVYZxr8c8eErs|4% zo3c6lS(l+U?<=Sd9l%i*NHkzYi0@D6IGe@E}X|9xhe2UJ3hC=9iU>Z2NLiRxe*)J%0p?^>c> zuME@-OvReG2G!tO)|05~u3CS?I+TNF^ZqMIm~GzURMZIaQ6uu8M(_-3>XuZKg ze1KY#zfdz0F~^jfp!USWsDY%TmSQ~Wx*1p-OXe`e>cB24hT%!{!?>r-$P-X&)xz2h zqbU!;UN{{K@EDH4c5}_tZa{Tx8)~NBMRnj4)PSy|26)>;qAC3q)nmVTX6hnPHzwF} zd(;%Bp=Kfr%i&DagXW{Ae2Fb@!T`!UQG03+Cg1^E{|#zpJa1& zighH`qCDNY0tZlj1G{3tGv=?}RP?7j8#S=`s6AC;>o?f)7G#Dz&R&vSE;xl6amNMx zuXyZ>+Dw;lBmRQgy)P{^OR@=d{XW#p9m7s|3Dwa$&zh09MlE3{TONSXl+&@Qe*b$& zDpIk;TR{V;hF?W(lB4$gReSyxYKHzmJveBQ`3ouvRZg+x!PX*FgDWr&4`2tpfvL3b zG+?+raRRo+y{IX@jomQuIrFF16ilJK57p2;R7ZlIH-D13Py^|Om2ogu!3^}pTzftr zgD5|V9_{vpB*FL`>H%v}Yq%8yafdDMN9~EjsLgd5Bk>x#(07U1Lk&>(H9~F5HmDix zgBrkCtcu&0*x&#AsqmrVF`_C-9$q5u6YuK;#~yqU?-9SK!X9s9AI=qF7S^)Y55Odw ze_?&is$1zZ2lL+;)Y~$ZIqDNby_xxu3{k{+Th{|MD$M{}zkfphwzeqgVE-JTO^)a4P6_?Y&cXbOMY3r>(vAU}nA?>7@i2yaiZDe*tVQbI>< zu6v!(G1jWQ*yjHsFCyl@ng zcFG%UoqjR>MKmCiY+WqZJwaTx*Xsi{g#10N|0~2}_QaE%c!ij6%lcsGc*mCa;(p5I zh?eA^*m_+vndnEfqpl04VrQZP`GaE|WgVBWgz#*l@NaJw|0tm1g1ulT9;1GaEq`d$ zd+JO5X*{TVu`M3M0wRa}E$oFlPLh`qUznn^nmmL&5x;-1s=KMEL&bWmj5@j+{`+$g znf}+>aeH1TlF4V{c>E`kN&XZum3VOEQm?OQSA5)7_9oZNf2#GLNHU8P`XuVRe1)>U zaymXE=NF`NlsH59QI5u!i5ldGiSFbV2pyA%zQnuKuOW0?Ccg7#EFE=MZ9b2@A?^S7 z(5F{ND`FrgZ{p{~$HW$533ZE!F2pF}4s|+OlmCGqV{>9SvD$ma{I!&2^Wo@6JjwYb z_&ecwiyt~(rc%d;L{D$V?*&{z947pUSGmT8Iz<29nAD(q2{`nBZ$z%ZhK{5j%H zaviBe0QsZ1Q|li@A&wYH#bw-q(}?HEFQSg0h=Jbh|NfZEH9d$2$GarkZF!=tto`65 zUgO-e#9Z_5Y+il>94$5?~&D=y`n zj)$xn7;CD$KVPu*|Dtq~*hF~-?jhz7!zhm+-Xs5j=u6%S&+-L#)>G(Bp(i%N7(&NO zlyxk^kv6|gc_aBgqU7p`q|)wjV=Ir$o1EjGT;R&gC@9PuTaYm^D?5L(+v#enN5^K2 z8Izrvl`+=s8a>&SlUL}P#ML<&-W%MmxXirKZdaCjYR2dz+cL8!WaK2c+*8}S8YH&K zXx%C)zG><9mJEHTuGpl(($%P4V)&BMn+pEmN(i*wx^&0hXYbM5IPs+@4yNdI2-Sn~F R1R5Uu|64E3U%biZe*pl}FiQXc delta 10377 zcmZwL2YgT0|Htv0NFox6Bw|Hm8VN~=J)2NF_HIx?ji5@*qOKjI1hM(qtF=Yz_fs`n zv$m>TvsI-!6#dcqzuw<_@_%^zAOHL4C(m=vJ@?*oKIhz<=#y3M3zoavH-kLpTO8lJ zSym_p7qG1H?v|B5Os$p`5Mx-oOW|GA0P`hSRuzoGWbB0HaWO{V zarDQBs0aRqx-OVbz8H_nYz?#nC?rv+jIB(E$*8rQgVk{zDkC?s6~035X*I84Sru^% zD)rlN0iMBP*qiD5;W+fbSy&IVQJKAzNd7g#+cbFND|5n=yQ)0^mEv+3gjG-jX^e%j zH|hZ&p=LG%wFC=I`!)=s{w3-@XHf&Yipu!YisWAxxK(o2wiqhqk*E&MQ3FdwjkqTU z<3Q9>O+-Cl6Y2r`Q2maf26zEA^M|On=Lu?Qo}upVX_I#~1YrS;!~jghK&*!av7M>+ zMfD$rdhj%Jei_!Mz8y)T^(QJLW!NanP$gqs)Y`X1y(M;g3hFo%waLa|1g^)Dcoa3W zM;MIHP#N>B>TIfL)WB<_`ZdGi*a4NH4Agy>p!UoGWcyf8kPO&Xcr{)X8sbnX8i?Ah z!%#Dsg}TuJ)CcMTY7cm_Gi5Xu#=5ACbVBv(j~dui)W8>^-l{FAOkG4Dz5m5(I1em| zTI)Kf3mc*`(*bpZ9;ST+7Nwqvb#Nu-#ha*pKcHs(5;fz>KFJsoY0 z)TR)F>rg2_jmm&NW149IYA?j1HcbnR!1qxPnuU76dW^&`P&2%N@1PH9(*57VD4dDf z1KaD6e|5Y?gC6YnmSyqnu#%8vwgzDYZp7|*9JM6nlAH%sL+$Q&@BsEf4~$86G7^vK zUmex2K5D>iP|xj`Y&+lLg*33StsgK1L+d&ttcKy#`(OlSq6WGV%i>kkrt;*orj*8E z53GkJa2@J_hcOzjVLZM@zCl*J{kHRbp;GT%-}!RIqjq~E)Q#Uo zZK~m@y^x7o^DGR+#i+fq$+!o#$Bv_x*gi`^7v3@*9$*yp=cvsV(!g2UXw>Uf9knM? zP&0fFHQ))DA6KIXZbN+uccGSGKk7LrQ3Jk!4A8djIR)z(YDC@*&F^c}nkAs#g4(E= zx56^m2h~5zxB@lPZCDKVp(b$IcpEjqhsZXvo@2P)|Ei6glytyoPISdQI36{C$*3D= zqXx1XmD*MWTN)i91P|8)@IY;I4ZT5P&0jk zdab;gI5#Se?$pCkH;h6pRe97Bv_UV-Ku`P-bw3-uaS>`FtFR<)M_X(2Ed|~1HfjdH zpi=1Gly@FOu{buwIP8I%K^Er2Pf-utg<9J^sHHiH8qhUUzk}nb|Bia@kQDOoL%~jQ zQav4&(nY8guSAV_C;H++)J#sH9()P)+TB9+e}>w8-p!or{80TuQA=4GmC?$m%r$97 z{&~Z!0W@ev+fg?>^@o8Vp4CW~+B3?LEJzXoa#wZu}`8~M-r zm>(bDb?k|DvsTU;ZAV?W8dQN?;tM|Vh1$9_}n#nfQ0QRC@pYy0qbOkj-_m0kzgrG7O zg$bB|<*+L%qtj3Wn2TD-6|F)`Kodp`p;kk2p(52FTjDV6;DQ}~ev&HNd0MeX_}s0;TSkDy+sQ^=UC%NUAP(wx7l+n^>i54AbBp)z+0^_tt? znZhH~h~2t79Sfj3#G^7(4>gcZsD49HOEUp=!?~!9LJyvA{Y0TI{(_oug+9(Fv=*w~-k65UOn=m-onXu|?aNTFSB_~v zf*SY*REBS0UiH*VG16ziAzy{O8Q;$%Ct{0^=#BYR+#or zO?@}&frl^|&tn`G?C0D!+1R`v`PT?jX;5nVVgwFC4P*|M#?=^w$BmEBhkAkjPUb>T zn<~-R1odI-j_NlEwREFVduA@`wcKh`P->53MSOu8P`Lrl2dD-rL&H%s8iTR;F=}9+ zV==se;rJXQu*mz)+fm)v8ueZ1hniR>YRT+H6v|TAiph8deKBO9GxE~LMAU_~QJHFv z8c=)Gp6G>I!jYJW(=i|JHRq3@27CpzNAy<+_p_~%6m($~EQgIyn`a2-$4t}%=NXrw zzKm;8GdPTT&=u5u?xHvTiJHhis0{iHa?S^!`bS}q-v2lXTAL(S1HZRXDNV;RI1x4S zO;`ZWqaJ+6w7)>DefVH!396y4?}++94Mwf?bS#DIFcnXt>+k>48P2!;ZDU{58qYNK z-Nx%!lXkZuPXF4-uMMj^YLgwnNIZ$k++#e5|HVAGcc_!e1IA-$`*Gqd1&#P7mc$pB zge8XYj$&8T3}=}78dS#4VIh2gmGB>o!-~V5UEU1~QXh?c0<0|5b6%kC7c_$W>vbqQ z!bx>Q)E*d!dhim|jE-Spe2A6NZKN~Ms;B{U#$X(5oPu7|m!kH4=0j(*1fT{Mg1TWt)XZ9 z9mgQAwQbo>!OBFXG|RXK_5SWQ^~0zce}`JKho~F9HoAZ0^!LOl+5=GouZ&udlLk-A(tn+?HqWafHJ*WwKU~5#$ zJD@U`X4(g#>;L}`qrkVont>YW->9|rVsJ7Tb%Q9>%;Qi4)IT1SYW*Wt*R?fvK~1O^ z2H;TCKqjLGI31PQg=o9hl7e2Z98?BQU@?4xdSJeBj$x>Nm5fa>lzMmLSS&+*DQe({ zQ3E@Nn!r_5=I&uQz8c5+>%$Q`-dU4Ys9l?G>NaXmEJDp>GioWmMD;s^#qmCBAZ`=* z7GM}^vyMW|d@O3ICK?x@Ci=+)W|%_ZGz}RTGLe5O<4ja)pQ1L)OH`(UCpiNsiJDPW z)C`kRDQ$upaC=nd(oxrqHT7Aj46Z?CVvkKh4?2&!(G}E%cTD{`>ce48b~cq4#!>Z0 zwbw#rrY^={8`S+qqcSxCm6>_Q9T-CWw9)>FLK_-9ra1p6q$5_Rz7#$1B5Gz=P@C$$ zX@6?!f1xtuoylh#BT+M+jWcm2YA+>BW!BgjwRs;QOJZBkDd+;9X-?`wFi97nMmiAl z;xyD6&N211Sd#i?R0hsrKD=Yhnx} zgYg*Zfj?mk`p@XLVXxE#{F0gy+3v`nvC_SPr_t8j`h%o^aSyIt2qU&RT}2Q z4D`h@m>;L2JI*)f7onD7HRiz`s0@B)&VP+sx-;m97ft;RYA^hVp6D@){D)ESp%8(w z=!H#D7q&)i#%`!o4n>W87P?Z7dVTMp8_v-Wj*iAN=u2Ft?IY8s^E}_Wp>R|FInELN z>5%`8POcOD&}*XQ*-9+ue8c~zPYK$JnD%$*cb)QPVhLqU=m4Q3nYLrZHm7Qxb>sOL zsEj9~IdO>CPkci?75#BI>SN=MTIaQR9?KE$5+kUy$E;o0iWo@wG=72}ScrH?*$?{> zO(~beFR_hHA(28?`~zpBjzr_XC`Y?m`1c|5JI8uv>QC@5qAlTL`s-9EljOYH?e~9I^uoG#fZbi3+khAFzT=iP?=7AP2?VjO<^x>rzm@y zbEPS-C-x9?b&i-tSw{!T-3fj9bm-H~r{8t_%+KwdYk=RNj!C#E_x<1Rw7Gs(=VuNl z^AH1xn&#YfqrPk-h}T3m=XLmFIpQGEjo3*vBYNv3>IlLnL}$ubc$N5A>tBY3T2ypQ zHaayv9HzdIhS{bu{{Qr;Z|YY$|0z+N`UCVKKBQcm(C>>n#7bfS^*%Ts&G*mw-LG$b z95ICxmxyiZ@W#=K@-kv5?dJ%6dUKC=sds*(e+Nz^=bpq>#6e;z(TEsN-(S%#$&Y+g z{=p1F$6g0(EA6!@&oTA9*oihB+ldN981Xr=f%fv|9M%6lYM4@0{Fd{fxSAMFY}WiQ z(C9{dPvp?J7?0vHLPrTAgtmhC7FHly5(TJ_BZg7VJw}@H5gIO1ZiAa}G%g_a5q?Al zZ9RzTx%ux;<7yhF5l<<%#dnCo#B%CGh}>fdZM~?tn}!JLJ5Bjh$_0reQ?FbQQ;C%2kM)L}BW`6MHC6!G9AvA_z|+L2^#V zXG9d`&xuvU0-`iwf5wkAqAMLX5Z@6ssV^kLiIW5`iM5HiOU$4ig*rZ=tmA}(>#v;u zn6?JS33!6YOMFki)~0c29Gw?zo0CXRr%4GwsTkjw=pUwowc+ z=TvS<1gpSNix@=(wh(1SeQ)oyWwEa!_C!OF3Al@Th5{30G`&JFu1GivLbJ4$y z6^*f+&pjrY!U~