From d87a77fa3c4bbc5e342bae22174f89e8215cb5e3 Mon Sep 17 00:00:00 2001 From: Sylvain LE GAL Date: Sat, 12 Oct 2024 22:15:00 +0200 Subject: [PATCH] [REF] split web_view_leaflet_map into web_view_leaflet_map and web_leaflet_lib, to be used by other modules, like 'web_widget_map'. (see : https://github.com/OCA/web/pull/2953/) --- .../odoo/addons/web_leaflet_lib | 1 + setup/web_leaflet_lib/setup.py | 6 + web_leaflet_lib/README.rst | 121 +++++ web_leaflet_lib/__init__.py | 2 + web_leaflet_lib/__manifest__.py | 25 + .../data/ir_config_parameter.xml | 0 .../demo/ir_config_parameter.xml | 0 web_leaflet_lib/hooks.py | 14 + web_leaflet_lib/i18n/fr.po | 21 + web_leaflet_lib/models/__init__.py | 1 + .../models/ir_http.py | 0 web_leaflet_lib/readme/CONFIGURE.rst | 5 + web_leaflet_lib/readme/CONTRIBUTORS.rst | 1 + .../readme/CREDITS.rst | 0 web_leaflet_lib/readme/DESCRIPTION.rst | 24 + web_leaflet_lib/static/description/icon.png | Bin 0 -> 39188 bytes web_leaflet_lib/static/description/index.html | 454 ++++++++++++++++++ .../static/lib/leaflet/images/layers-2x.png | Bin .../static/lib/leaflet/images/layers.png | Bin .../lib/leaflet/images/marker-icon-2x.png | Bin .../static/lib/leaflet/images/marker-icon.png | Bin .../lib/leaflet/images/marker-shadow.png | Bin .../static/lib/leaflet/leaflet.css | 0 .../static/lib/leaflet/leaflet.js | 0 .../static/lib/leaflet/leaflet.js.map | 0 web_view_leaflet_map/README.rst | 35 +- web_view_leaflet_map/__manifest__.py | 14 +- web_view_leaflet_map/i18n/fr.po | 5 - web_view_leaflet_map/i18n/it.po | 5 - .../i18n/web_view_leaflet_map.pot | 5 - web_view_leaflet_map/models/__init__.py | 1 - web_view_leaflet_map/readme/CONFIGURE.rst | 6 +- web_view_leaflet_map/readme/DESCRIPTION.rst | 22 - .../static/description/index.html | 41 +- 34 files changed, 692 insertions(+), 117 deletions(-) create mode 120000 setup/web_leaflet_lib/odoo/addons/web_leaflet_lib create mode 100644 setup/web_leaflet_lib/setup.py create mode 100644 web_leaflet_lib/README.rst create mode 100644 web_leaflet_lib/__init__.py create mode 100644 web_leaflet_lib/__manifest__.py rename {web_view_leaflet_map => web_leaflet_lib}/data/ir_config_parameter.xml (100%) rename {web_view_leaflet_map => web_leaflet_lib}/demo/ir_config_parameter.xml (100%) create mode 100644 web_leaflet_lib/hooks.py create mode 100644 web_leaflet_lib/i18n/fr.po create mode 100644 web_leaflet_lib/models/__init__.py rename {web_view_leaflet_map => web_leaflet_lib}/models/ir_http.py (100%) create mode 100644 web_leaflet_lib/readme/CONFIGURE.rst create mode 100644 web_leaflet_lib/readme/CONTRIBUTORS.rst rename {web_view_leaflet_map => web_leaflet_lib}/readme/CREDITS.rst (100%) create mode 100644 web_leaflet_lib/readme/DESCRIPTION.rst create mode 100644 web_leaflet_lib/static/description/icon.png create mode 100644 web_leaflet_lib/static/description/index.html rename {web_view_leaflet_map => web_leaflet_lib}/static/lib/leaflet/images/layers-2x.png (100%) rename {web_view_leaflet_map => web_leaflet_lib}/static/lib/leaflet/images/layers.png (100%) rename {web_view_leaflet_map => web_leaflet_lib}/static/lib/leaflet/images/marker-icon-2x.png (100%) rename {web_view_leaflet_map => web_leaflet_lib}/static/lib/leaflet/images/marker-icon.png (100%) rename {web_view_leaflet_map => web_leaflet_lib}/static/lib/leaflet/images/marker-shadow.png (100%) rename {web_view_leaflet_map => web_leaflet_lib}/static/lib/leaflet/leaflet.css (100%) rename {web_view_leaflet_map => web_leaflet_lib}/static/lib/leaflet/leaflet.js (100%) rename {web_view_leaflet_map => web_leaflet_lib}/static/lib/leaflet/leaflet.js.map (100%) diff --git a/setup/web_leaflet_lib/odoo/addons/web_leaflet_lib b/setup/web_leaflet_lib/odoo/addons/web_leaflet_lib new file mode 120000 index 0000000000..892613935d --- /dev/null +++ b/setup/web_leaflet_lib/odoo/addons/web_leaflet_lib @@ -0,0 +1 @@ +../../../../web_leaflet_lib \ No newline at end of file diff --git a/setup/web_leaflet_lib/setup.py b/setup/web_leaflet_lib/setup.py new file mode 100644 index 0000000000..28c57bb640 --- /dev/null +++ b/setup/web_leaflet_lib/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) diff --git a/web_leaflet_lib/README.rst b/web_leaflet_lib/README.rst new file mode 100644 index 0000000000..6681def664 --- /dev/null +++ b/web_leaflet_lib/README.rst @@ -0,0 +1,121 @@ +========================== +Leaflet Javascript Library +========================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:e5af47c08dbb573c870e80a506feaccced35a36e61e63c6d39644fa84a357de1 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fgeospatial-lightgray.png?logo=github + :target: https://github.com/OCA/geospatial/tree/16.0/web_leaflet_lib + :alt: OCA/geospatial +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/geospatial-16-0/geospatial-16-0-web_leaflet_lib + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/geospatial&target_branch=16.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module extends odoo to include Leaflet Javacript library. + +This module is used by ``web_view_leaflet_map``. + +**Important Note** + +The javascript library is opensource and distributed under BSD 2 Licence. +See : https://github.com/Leaflet/Leaflet/blob/main/LICENSE +You can so use it freely. + +However, display maps requires to display layers provided by tiles servers, that +requires ressources. + +**For testing purpose** + +You can use the openStreetMap url ``https://tile.openstreetmap.org/{z}/{x}/{y}.png`` or other, listed in that page : https://wiki.openstreetmap.org/wiki/Tile_servers + +Apart from very limited testing purposes, you should not use the tiles supplied by OpenStreetMap.org itself. OpenStreetMap is a volunteer-run non-profit body and cannot supply tiles for large-scale commercial use. + +**Regular / High Usage** + +- you can contact one of the following companies : https://switch2osm.org/providers/ + +- You can also install yourself your own tiles servers. See documentation : https://switch2osm.org/serving-tiles/ + +**Table of contents** + +.. contents:: + :local: + +Configuration +============= + +* Go to Settings > Technical > Parameters > System Parameters + +* Create or edit the parameter with the key ``leaflet.tile_url`` + +* As a value, set the url of the tiles server you chose. (See description) + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* GRAP + +Contributors +~~~~~~~~~~~~ + +* Sylvain LE GAL (https://www.twitter.com/legalsylvain) + +Other credits +~~~~~~~~~~~~~ + +The module embed the Leaflet.js library. + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +.. |maintainer-legalsylvain| image:: https://github.com/legalsylvain.png?size=40px + :target: https://github.com/legalsylvain + :alt: legalsylvain + +Current `maintainer `__: + +|maintainer-legalsylvain| + +This module is part of the `OCA/geospatial `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/web_leaflet_lib/__init__.py b/web_leaflet_lib/__init__.py new file mode 100644 index 0000000000..6d58305f5d --- /dev/null +++ b/web_leaflet_lib/__init__.py @@ -0,0 +1,2 @@ +from . import models +from .hooks import pre_init_hook diff --git a/web_leaflet_lib/__manifest__.py b/web_leaflet_lib/__manifest__.py new file mode 100644 index 0000000000..890852e255 --- /dev/null +++ b/web_leaflet_lib/__manifest__.py @@ -0,0 +1,25 @@ +# Copyright (C) 2024 - Today: GRAP (http://www.grap.coop) +# @author: Sylvain LE GAL (https://twitter.com/legalsylvain) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +{ + "name": "Leaflet Javascript Library", + "summary": "Bring leaflet.js librairy in odoo.", + "version": "16.0.1.0.0", + "author": "GRAP, Odoo Community Association (OCA)", + "maintainers": ["legalsylvain"], + "website": "https://github.com/OCA/geospatial", + "license": "AGPL-3", + "category": "Extra Tools", + "depends": ["base"], + "data": ["data/ir_config_parameter.xml"], + "demo": ["demo/ir_config_parameter.xml"], + "assets": { + "web.assets_backend": [ + "/web_leaflet_lib/static/lib/leaflet/leaflet.css", + "/web_leaflet_lib/static/lib/leaflet/leaflet.js", + ], + }, + "installable": True, + "pre_init_hook": "pre_init_hook", +} diff --git a/web_view_leaflet_map/data/ir_config_parameter.xml b/web_leaflet_lib/data/ir_config_parameter.xml similarity index 100% rename from web_view_leaflet_map/data/ir_config_parameter.xml rename to web_leaflet_lib/data/ir_config_parameter.xml diff --git a/web_view_leaflet_map/demo/ir_config_parameter.xml b/web_leaflet_lib/demo/ir_config_parameter.xml similarity index 100% rename from web_view_leaflet_map/demo/ir_config_parameter.xml rename to web_leaflet_lib/demo/ir_config_parameter.xml diff --git a/web_leaflet_lib/hooks.py b/web_leaflet_lib/hooks.py new file mode 100644 index 0000000000..4cf094ea32 --- /dev/null +++ b/web_leaflet_lib/hooks.py @@ -0,0 +1,14 @@ +def pre_init_hook(cr): + # move configuration from web_view_leaflet_map + # into web_leaflet_lib, if exists. + cr.execute( + """ + UPDATE ir_model_data + SET module='web_leaflet_lib' + WHERE module = 'web_view_leaflet_map' + AND name in ( + 'config_parameter_leaflet_copyright', + 'config_parameter_leaflet_tile_url' + ) + """ + ) diff --git a/web_leaflet_lib/i18n/fr.po b/web_leaflet_lib/i18n/fr.po new file mode 100644 index 0000000000..a8b2b7c665 --- /dev/null +++ b/web_leaflet_lib/i18n/fr.po @@ -0,0 +1,21 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_leaflet_lib +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-10-12 20:11+0000\n" +"PO-Revision-Date: 2024-10-12 20:11+0000\n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: web_leaflet_lib +#: model:ir.model,name:web_leaflet_lib.model_ir_http +msgid "HTTP Routing" +msgstr "Routage HTTP" diff --git a/web_leaflet_lib/models/__init__.py b/web_leaflet_lib/models/__init__.py new file mode 100644 index 0000000000..9a5eb71871 --- /dev/null +++ b/web_leaflet_lib/models/__init__.py @@ -0,0 +1 @@ +from . import ir_http diff --git a/web_view_leaflet_map/models/ir_http.py b/web_leaflet_lib/models/ir_http.py similarity index 100% rename from web_view_leaflet_map/models/ir_http.py rename to web_leaflet_lib/models/ir_http.py diff --git a/web_leaflet_lib/readme/CONFIGURE.rst b/web_leaflet_lib/readme/CONFIGURE.rst new file mode 100644 index 0000000000..cf45731ceb --- /dev/null +++ b/web_leaflet_lib/readme/CONFIGURE.rst @@ -0,0 +1,5 @@ +* Go to Settings > Technical > Parameters > System Parameters + +* Create or edit the parameter with the key ``leaflet.tile_url`` + +* As a value, set the url of the tiles server you chose. (See description) diff --git a/web_leaflet_lib/readme/CONTRIBUTORS.rst b/web_leaflet_lib/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000000..e1525ce042 --- /dev/null +++ b/web_leaflet_lib/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Sylvain LE GAL (https://www.twitter.com/legalsylvain) diff --git a/web_view_leaflet_map/readme/CREDITS.rst b/web_leaflet_lib/readme/CREDITS.rst similarity index 100% rename from web_view_leaflet_map/readme/CREDITS.rst rename to web_leaflet_lib/readme/CREDITS.rst diff --git a/web_leaflet_lib/readme/DESCRIPTION.rst b/web_leaflet_lib/readme/DESCRIPTION.rst new file mode 100644 index 0000000000..882413671e --- /dev/null +++ b/web_leaflet_lib/readme/DESCRIPTION.rst @@ -0,0 +1,24 @@ +This module extends odoo to include Leaflet Javacript library. + +This module is used by ``web_view_leaflet_map``. + +**Important Note** + +The javascript library is opensource and distributed under BSD 2 Licence. +See : https://github.com/Leaflet/Leaflet/blob/main/LICENSE +You can so use it freely. + +However, display maps requires to display layers provided by tiles servers, that +requires ressources. + +**For testing purpose** + +You can use the openStreetMap url ``https://tile.openstreetmap.org/{z}/{x}/{y}.png`` or other, listed in that page : https://wiki.openstreetmap.org/wiki/Tile_servers + +Apart from very limited testing purposes, you should not use the tiles supplied by OpenStreetMap.org itself. OpenStreetMap is a volunteer-run non-profit body and cannot supply tiles for large-scale commercial use. + +**Regular / High Usage** + +- you can contact one of the following companies : https://switch2osm.org/providers/ + +- You can also install yourself your own tiles servers. See documentation : https://switch2osm.org/serving-tiles/ diff --git a/web_leaflet_lib/static/description/icon.png b/web_leaflet_lib/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..9a516f2f8a1871318c6531a23430eb43cb4ac1e9 GIT binary patch literal 39188 zcmeEu1y@yF7w(~vlRfJ7nLUPH1rzt#X<%Bzz^2G`Gk1w zrYYwq%a+Xo{YkZ{sU^-w|KT;_f#MS8{KCEbZNKGhxBP;FpfBK!e52$7>p2b%PSeV( zR$B1pOpL$^`x^H8fB*g8X#8(6{BJM(uN3@$Rtb~i@zvT5|Fz&GpfESF#Cx$cAxMC? zB;|g@^}HvFZ+HzjT6{!pqeZgEKj;SyL30?Z;uN^W5@HmIN)BJz<&an|I>4G+RaR3g zzW4}h9yvdqI-$*B^S#|%1~S{9=sdV5%{bb(OY#?owK_2f!EdN7_IB<&)-LCwmkggV zE6I0bs~MIam|*_*GkN*FU{|P(WuhebV!#$HZ%lGH|g!rt4=ATD_;w zp(+NSHDq=k=}j~hO$$_CK4c7JaJ%j(VA3Y@DbG{5qyE=enZq;3EO0EfqUXcYwwl{E zk$(1FJT*M@qP0W*#QLNzwBZ^DN`e=UieOm4v1vi!@(F+tT|5j{A}}DR$zWsGb5&|s zJc+(~jLN>#X8!LEdU2RlF)$xUr|dG`Gc8-M3%b7jIe^K8x7*sU7vkHd$+R3{x%d0U zosMj(q%^p+WF%cw>&m6spnO`*E!NS+$uGgwr5YM>W_Q#Rw(`GeXNLccxUC9}iRo(3 zA7L-5pqe0-uEeIZ&oP2NZdW$xJ6H`3Iy~EM$SiTPMwXVSr=H|^czDuuxF@&1e@aT; ztEmx?l9E2hKxS!5k(h{J9k8^rdMiZPQ=nEj{MY4oQxioPHdS|{*Lj)wP_pbX))+q< zt|&&p%#%d$q{CVRzUiiiuD)10pUSMh=4GcnUEJ%NB{#wv9sO;!KyCqn2=OqiwVko- zor8nU)>cS&Pfun6vo1Rkcvn>mDab`XYhQasN=8<0*aolby_=(1X^y$Kzt7@}FR@8K zz&SrZ?|8AJL@w-&UtC;FOh$$Px$zabpAdb(6S-;IZ4#O7>_n__Sc$4#_C{w^NdG*r z8I;9T_XyoT?c(q+A8(Ly9ad5!=?E6>8f;t1YguJB7L!lm{{uOica0r`Ki*bf|H7!y zO4Zo^=q@*y6JfdT#~dSVI1tY^+vvrmt*yO!>bZL9y#_wJH>^4TU3Je3h_SELK`#S$ zpT(qzk5s{G^P~rEylx{((D8ONLF1zTF=iMR#XA=lt|%(eC{5OQx8*+tXfi*( z%jTS5Kb>IToP>$$?k@3w3*22F_vkn@g#@Euw{M)bZl7CiH)JtM=P1{m4+}cY=y|Al zI)o2XY=oO5e)NNTRDD0)@BH0u>+*>D`++Qqb~8F0z5Z&`_!E!7-P1e2juo9n^V>!T zgd%CWpzVwRN{5yQ9&oQS`ynIS!87~Zi%de4(eX{=c%R~KR2HR`^YQ6q+Czx+zl;Pt zp4VNB%dxnAmKY9~pyl&CpPsGp~l(%dZS_*NGJ1-HYPBOX|~J= z!F(`LX;-{09FMWgYJ%Zlwj7~c6GJ2e8@&6stUNdDtN1EGyL92$5sLW-OyNI!yfnN} zh$l`2RzE_yj3(I}Wod@k`G9Z<_!)g4w#VCyCldW*FYbBSV}yr? zhuLZyqN}5&$oP1|I$d_QMBMFgk=Ak1#JVMWridU@&TvnmD9bkyZu`?~k9WtVz2z9# z*e2&&L$eiT=ujxM>Rd12@$SLjvq}FjRUt?DOPBGN_t|y(B@K=PY_+PUE8)XPW0NoI zK0b*4k*(Tk*0v1{aTN?T#fBiAj3{7ZCwq(X;wKRGnQ>6>B$@d&n4L7EmDSiSgi29* zAr=(S5@WOz~GUy`7Exqj3+X;xTJ(#=w>x|=lD2mXgxB8c-@mk0Sj<#Jc_N8@p=i)qh_a-HO`wo@9{t^Z9@$lOu8@(5+mkiYxhn_PS-yiHaoUufoejpd zbMdc>T*a}(cJf%CFsjER!X8E>m*5AP>*h0_d4Cj#qQ15Vr)ho)!-rjkfcDA}k;sAq z=FjhFz`LELqG@rbVt1Bgsimm?Y6!Zi@Z8SHzuB z6oO?AD{|*R00@$%r+m!OVK~_(Bw$0xoGIDgy9NW zAQXjB`4b;Eo?}^CTUSBkOiM08iq^MIz&ahDb{DxSkEV%}UAsBm(B_d3!0Y!FKn^sx zUnjab@@TQSAyvwG!_A$UosF>Os41v%fwTf0sT8ThP0D8}ZNvo=9ed@^yX^S_VtBmV zq)q(-KK0WlxZaAQDSm;?E+PX7KJsDjFXKe(79VwSI-u3n)i;9{BEgDGpNn;BjaQoe zwAHm!J1C=3$~6ba{1^mgI&)}#*FQQ8rV4#&eETueNN}R#3mP?c-ktv6MX_e<6VRO0 z7+$9f!5KJ0{aax11MZQo7x>J*5W#{H1gS*^sE*a5(84=Xo{eGb>&T+rEHmjfj zt%8+|G$w)+yJaO>k?FS?YG_#4X_)AJTevtq^L)nBy~SarmY!a*@Yfv#e7|lf1BW`$ zd&M2;7acn=!Fv2|M$$TGtH_z;Dx_#-W!1LU5mpV#;IIX;ia6Xp?CB;j{nE7w%7hQE)=`(u@f$9+b-;_&^7FU zFE6B`h}o+^wVKBi7fR}{_zKGK<^Bv&(}&WTNHY66xIRO0IGj%ArdLYj$GM*{C3ZZUPCUV%-ioiD zLPtBV8^I3J4rJnVOv-^ki{kh~L0L_)uYcy|)}8Yvp2HwYl{u$L{T@T2Oxm@Xg!rC- zRN&F04s-wML(^=9Qnw8{>m)|qL`U$^{DmS79r{B5atX^-$7V4tJ~T z>*pOar$j&HDZhk`W1_H6&5H&7CU5TcwX(HPT6=lpFP)&&6JuD<6=~>ub;a1>%~hKX z#1{q985q)kNpjOL@Z$zR?5z1Z2nikIQ$#N!KZzkXFK>2!e&2KIJqzS5^yl<4?Wz1O z&L!M@K3BHCm0z;`>L(|q7ch{P#dwkT2v-RWFg_$hM^;oh&8^hvH?6PJ8zRuvLZ5{{ zCHxZ)-+snt0bi8yaA2YBNDt5IH1WIxzI86r#?7rddq4ZHE_;z?Is6YgD{<`g{dEPU zFxsG^Y^mt1;^LulKkAD0i`@y&c=H1KL%kMo^I9JtA&AVG4V+3vDa(;W!`~pd(W2VrL|cz|-A@U0RpZ zPIl{ZL_Y?(Nz?F@_Te-^iX{}H%B%TH!mwdK-_d3ZfBAZs99B1)Btrn>C8 zfqD2=w(2L-o1cu7Wx4&$yF|_w$dSXme&W%_<~>g_k8ORL4iEx8nSRE`k z>Fm$t7_2i>DN(+%nPz3xsbM|dzo`6l`J|?y&>|ur@sV`zR%3AY!GF_T>;wE6)2h|y ziM23B_t~*)m-Z^mviDL_rzaiQHsV29io9HPxSbOo%yI3YX6pX%!(CeKns6uyAgaul z5RM<&-mrbg+;F&1OO_l?h*lz@&KM_~q#rI;B>E=+du+5)6TsOTn!8+s7@C#G$a7H* zqlV?18_#Kf1j9hJcYc0;FyKZRaPRc>>sM88k72^NxH4bO+8J$&ca@o18M~gt2Otq#-VK3W>#6yl{0tSPAfg@uifxGIv%*yG~ z@wJJgW0~ol_)n{+#|L6c%J+VLO_}ai1*;N>n);VhIR|kFk z;(XvX=UFmF!UotIZ2PaN$jAof9in?wY9tF*j*(GN#-^u3uddu(U0r_x&LA!>4jDHi z1VwtAr6G7bDe(OgY#Udn)zoAH6yJ5VkN3_M;m)_{ps=Fyf-c9<* znyTsxwGO;O-xK+%By3_qIZ7H9yS%tCoft_SuOExt%1&Gc5baCMYdxi$XkHeFi zrEk_=RnCH$%z=WQ=1LaNPKJ1rnku?6kzRUzftywZBXQb}&OsdCg401RcC?DdC+K6j z)*eE?)MEJtZS_DUp!s2pW8pPFzt*@PE$+t*k#C@lSSI~`w~c9N%UW;Tg*LIUx3lvK zQS>9CW(BLsLXBOhR(l9M>%*ggzt`F(C-m+P^P7yCnxvf_TS5)9p|7v*fNXV5O;%Hr z-hlBQ(KGC@4(+9kn|i>#7-Dn%MgM&*zrj(h_9GP$&v==#kE{)C{yI~?xT~+B9N<0l zR^yezRl$wl&saOLRb{dj9nuN*R`18#?P}Mix?b%h{UcSAF<%LzQj+zc7v4uF@E>z( zOnR`y4}T;c#?z`hTxiu3D3y}atOwP=Zd5;p@1y+Jzk)Vw!S{w3}2&9X@d|jz| zzB`du3Ez=VT9AGWzS!W?^-qwF>}Au`J)y2oS>-X?){;EM!puDvES=o&OnQ_emSK~?1+bVk=lOY>eP zJa;cbXNXue1CvQzH1c4*efWc#+S;WzjICrvt)+P^_x0-&&{k-eN1XR`cfWe`<}<*H zhc*QT@fY<@C4!Etfi;?S&5_L_ayd^5qHlJb|5k+!s1>TKK^2G5#mCYt`MjtWCE4T+ zc_V*H6@a=2IeHc0z?z&PIHgi?U1Oq+q*>Z{7NI_BpL-a| zWZ~42ez5kf&xg;KUl-=)=BC;?Uwry`6X4V|fpWDD7YnDp`>lIf z-0#lMVj6$YW5tQjGufJqor601U3}Kb=d;?6eRmIpx5hyF;M6S{pEA;UZ3kZ@>~r-C zfK70>^D;teTe1qemKH3ULMYtcU+X!|0*@mZuBhA zKXi3>Uk7{6($aEtSV=3MZOUOY%Yn_vd`M#T;9vaaKthT@4?x}Ks2GwIn*dHk%wJ!# zNGgra&qp}&6@B2t6%~C5fL@Yw`QX8eQ9pkrd@q0XwHrIT{*c}Cpaf5|VD7Urhfum$ zeYvGlqyP~m1BNt$bUxlm!(PQ>F>daMK>B)~{mA(tQ~wKb@|=?Fo&9~T-_1jcYSlYd z`w}6p9v&M2WP{s#HQAC#LaB<61V%VF>>3C)_QdUY+=?t3B~?vNKvh7&A{S%A=N$BZ z6Z^Mj{O;o3_z~`%9iWjySB;8g6{;{cb1z6*5wSU^)uAP!;D~qq_PveP0i*Z%-_(pbNG|NK)gtS6dHwW$&5V7z-p(B z?xNNH!RM*e>FxV_vP9JkxX(ayNIV+I?jey?wMN0FoP=j(Y0B?V zB`NRS+luoi3AKv-L5-r~m4t^-tl|$lXYjJ*&en)0!vYhUlh%qFtCwEO3URq3vTy|0 zW%c#-FhOpBNaJm4FJLoV=7UUg{**wU8?&5zexIc0|NG~iq$^;}7?_wO6{6}6LFN?- zW0v@2y!LM<*S=h04Y6XSDX6I6fr4B;&%%YR2|egN+Z^~{CxxiF{vi3FmhZEjR_N{R zJ-W1H*Q=RC@81mS`O)HEOIuskwe<9s_ukE+^E>IX$M3Q9#V9{#Q8%%E3=c!ToK*Fg zt5K8g0?N<|WhJ;lQF%o@J-u;^X)uQ$WY3;*9GYUMMN+s1D6zaI%`Aqz@ z5v)={4|c9WFCb1%o(Pt67PPLljgt|3VR3~%DRv6ZQZTTd_^~_G$5<9%H;d`ja|ieG z@TYb48wpff|FI0rDJU?q?2tYD@+hpT#%7hKVqidpMIrFht^B0~hF(PvR$K&~jCR`B zUc)4MhOorG)r+eu%GMl;1jZ32_X{`y<7a%GEKYa$DlOB!0At_!|6Suk(L<%yfCD|;ua=Od!n zr872(k_-c!CC$*iEY2RE>!Xl?%?hE$m-fr%2)~^AnVFdcQ>thnr-I66?))}ty_(!4ZdtxdB6g~SZI#VApU9u^!r?;1()zg`iaFwz@F`G z(3&2(1mYOeJ>m0J`$uUgAzMQ!8mfl`hOEQ2$^lk6p7pi0L_p`}w3U(<`+HC^5HbIB zT?iO8CU$b#WHzIS0cCU;(h-)5PmA3-*}yCLZD#~$#B$Gdd7IE*-$K&ToR%%hI%8|+ z=wCaJMPCX6iRv^upc8PCY&L8oH@jMZHwHLb7RUT($8D^wnd_whCXYO8KKjPH-1-Rt zrRwr+R|FzpIQuiD9Ntft^ziCoDD*O%-1p6P3pGVfSD7=plMzCl;J$C3($;Q& z1!LC}O~orjGpF@jYXzZjl=Yofd^ym&zkd5h;Jd<@;fot^zd=<=$j4U2lO@9S94+MJ z6Si;b*=w96`eB*|$zBzLy4sqW_1(OT=^&PvCS`mi-W6Y$wm}UVsc6cs-rg^n{)2=5 z2)i!)xVFtSKUz88j4`gbci>+0#@;AE{sYsQ@AZG2i+hn4j+FGTL9m5LiZ zGh2bZGx+gW#^pOn(->+h7Nx1ff6N*)3MA6}0#cYO2-j|I_&_}cH)TsugJ2QNGM3dQ zpArg_ltE4H^k_a$OC>2a>4{o9?V*wi2oMF9%)89*#a%8c`S>Cinb>W|*E%BXv|QRc zIym7HiUtM_URLBdhPS@Wsc_T({?YlLMjHGoDCjS1EzM%mtT25xU81LR@kk})Ir`m? zOGlIezN0IWh)9Tv*I^l^_9!x$Cf?RLuC>49^4M+|Y+XWofPOdEK>5|)jY9b@d)nVH zLNbA+ZSx}v-?$<4IDK56ukxKzo)o6KBz)1)k-hYf-%G>?(*|&(@x3oyKiS*ZAV7d{ zzd`kMN>%QCX$^zHK%9ovMf&;$5M)Z*taXMG1srrg26 zX4)D|imeQrj1IUrp~HPPIXP*GO$<>4%BF(fo{Ho#@ME+M_*vvkb|dr9k)%&Ob#;Q| zgs8*M&kG7mn4!eWrLeXL$T9%(3-vsaG>iN$TZz{Cav_rIJ)?X#HYqE1Jj9h`RWEnV z9Dgg(tt)+gm+2Z9$K?}OjyVviWN~Ej=%>DU&KEp2J#Fq28j&8ykd1(V@TZ_)oP7(} zT0lB4tkDJPwm4uf@Sh-Hc6jKQY#oure4KS!{F`z}^d!{53U7D5l6tQ7OP9CR;PEVB zXJ<#u&aT)U>x))!26Qryysw{!o12F8TUK-PvU0oxVyO9iM&rZP0szXPcEAq-I%1K2 zQ~i#KXAADqLf09edwngJ&t}nNV3JlagBGUsV6#4DC>;Xa$k&VgI4-#O97usQ)K6_= zbKwY|8P_mP#BaWQF4!D>@kPuRbp?9s*Ag5Q2?I!_Gw2y3c~d$`Y^^gK;V)!x)k}2y zc2`uD!G;9JAdpULe6c>LtvjmD?)1KHG@#&jmbgpOO7r}k;acUq*^hg)d28Zn zOlBU{occmBfAW=4x4WLdSQG$?;%;%<@>kXc(1NprTDcEDeaXyKSzDcrJrx&O2VI@6 zJ%vz_gMsF+%|Ye#`uT^ClA{)kTmTsq6cjk#9o8-g#49VR5dhU;XLt849d6s~Eb)&% zy1)xZ1wB0qu%?1T(1{4E<8^bSe|!cG6rjqP4Gm;~LVxKRH#r8Y5a3*7LcpC^O6uBA zFR4MfDlBb|7#{uzwE3^m(I$`gw{>?%4HQcs*+Ko8VepvMdjU9$cqTNGqxlP)P7Tn4 z$;>ee3L>g)X8zNkOjlz2e$&Vq=hP^fE~7oL8~9zSb#6FKPEA?8O+_8d-RKxuU8SyX zXaF1e6=3k5paD^U-Jzio24jwox0{>WeO0ZcrUtgeubLV{uqI); zhY+O{E1@{}{D!m(Y=2N&$~;ev7oB=2=mnCmQEKzkH9nS;+)D>b=Ryn|kyoz}WXJEX z35Deo?;doWJKKHYKh7Z(jg2Wu(Bi17sqy3LhLcE!cnVS8Joq1W(^zv#AP;OhZ(=~v z+-yIzf03$v{dT$Fv{Q(a_E0;IBs5uNlJqmY1z>t5#VXXd8%~h zVqzH;=1Glbp5%cPTP3!+nPAWjGjkmIzV7W=i#t|3Z^|yZPJDwsqhN4;%yboA%;pSt&K+Eu7C1_8qM z^}D%0suC^j?L&JuUKX@5eNU$=H|jtJBLb!ipirg=W6!j@BSn7%lTzd9pLQg+(;5WA z@}64{z-~|aoJuOVp!tT&$BaL)g86!+mHPt&+|LKR<&~9E?o1$>DyvORY6k#xK3bvj zSD8nvCiy@kx7b!BcUog|PXM#lcr|b13B;x9tz`XDB0%jzH}H60#^m6@sRIn_ z4;rD#W`EqxI#J7)l`bF2^7;s$q{bu>A0f3l71nCsJ zt5wkHzk;FBvysUfIT=pj9XZA50QAM8!6QLLb9fufMd-pIPnG%eN-B+F?akE~O^<`w z*NxDSoF!9b;gzd{zM)qyc2OM3q^lU)&I)Ng8y2%kRr~LMIx>)CQT#mzP0T0{6 zzl93C9BNoc{9OUuXwaM5g<>;NVA?3>|D>tI<>EIfC!VoNYhT@wv;0bxe_{X6gTV*M z3(=ngGJ<~{?o0A&VQ_?@sHy@*v#F`6##)LqJklPtxcvFgu;@zgqLv#ZSmi@S1T&B=?6+qDx9QC}EQA$9@|@@xBmvsm-ueP4 z(^=c{V8^Oi_UoVr1@d%h@DxI1;H!jQaPJ>5{d&&50s^UB_y$yN z6Hiag6fG9}3Lu&SH~D(mr*uP{&)AD~Oub7sn*Ow5aE6!w0@lUfqV87E4*?x3k#_fT zb;ZXPzIYC-g(5%yd;gZJxxT4Eu5*w40LAASCQeb^8&1BLg$7*-%@_0&#f-po4*})N z4nDYdFVcmjlI@$;x;L{dN9Uj|4t2x^?#vKaFj*;6%?2+EJ{LS@@I90`x+jhnv+e2X z5kMA=?grNR($ZLZD#RG#gj+#ahimEDoO!+7#N1O+v(}y>-D``a2g-1pRSu_wbbF$9&Cz^C5DP2|Q7BC;5C;*@0pCj~~}Rp-{F0^hu$j^)8Q` z&k@pczsZ3U-BZ1R4t&2MnGCo-0>hn*#3p?XRkf*R1z!iyZ^W^MKbHnP>}xF~n2~U_ z+;i&to=VygE8l)%jcqMCIFF)j0_-Jb|&wb*- zmi!8I5Hr8`L*``?fiVtt4J|-c-8nj%_SaZ{Plbv|UQEMf1Gu*5zZfYDY*FY)l!)BV zTZ?Aa_{X=>Pa>j^r_rb19DF-e8Ei~V5!W1vVSZPV6yjVLs~)mgN(@{5Bf=|P8_D-J zr|Vs|X0bgdHw%{XRjIc+nZN$v&XGCPV+ILf)ROI*ITaDs64^n`i!b^q4S_Lp*sUoa ziR{!?&iT38_tqIOT0#&I;>9RUv~py6{7Lt$(qg2W!edeC%B=<{W2e9yqXHrah}KBH zBA%>xxgM^1FHgj-`vm|5V!#yVZQFr$MhlEL|D&X|CP0oBA=zV0ls*TqeRt&ym~T(% zai0lYjEaLAn!$sgKr*?*&FfS0^XXOL`;(5F)rb0|1uO)6=ZIQizG7A@^kf$p5r%oEidSKQvu4WSR)S zQs2Jma=OBd<>F&1-=|~$>jnT#=0kJ>#Bqo!K_B#8$IIv?mDQ@TB>`%Qwb1RqSfDSC zvVUH$>l&e{v`3eo`F^m{((;?4EG0SlB%A6%I%TU^R0L;or&7Ijj(Zn&`P7cYZ{NOY z{&l8@DcT=Wc+4)Zl+*}d6&HHBKQ=WL@^nA)BoPqM!jt-R8o53SXY2 zQG?1M{UE@7-JrL8005;pL34|rIdu5(%HfHSMZKukI~u@N(h(QA$Jqv&*e))xy$FrK6IU|Yq?ZQ1%)6Y2x%%i(N;2Z#SzY=-5)^}oG0 zr3K7eBN@@4x-uS%Aj88I8MII;h}`~;mw|l0oXmgnKXqBIvQp`TFS1DYLN0BF7EI@{ zo_GKJn;Ow;UZndMw|2>0r|r50Adnc4>l+q4wmcN*Jmw|+wr*o^NBaK#dukcw<+av9 z8kyHs+QX7|f&v1s`1!+uPu3{j9I_J-3ZMte=+ol1h(^UKnzTh}5&O3nU&2y#xdmY} zT5i$swa*5S6sV0)@q^&x%UPpHauyu?lBDV5xLa|Bl{hm}i$-fL zKpR&fZ2D-n+~`#YTGwkpCsgu2T46qdydj{feB|9gSFNVWlbx%w!t=jdSh3!JVUDb^ zZq5m^VZK{j882`AiS#{bU<~N!=%^^AsxENf0zQ0B4wmnT{i~v?)`fsA6u8k7Z4+q| zc}c~EK=yDAau2#5OK$PdkHw%k0ztcDbo4t-FZ_5C&FdUp*Yg<%gAAuW3=w)6=7kFC zE)47~+K6ZnTv+~rtO2p*CPMluxtz4^t)PIN?hmyp&Xv~HFxBdY0ks;EG9cr%!Cn#w z`{E7gevUazXx271PAh)b1P5G1SYhSXQ_LVGv?(M7M?9=_%1=&8+76eIjTpk_5jI4McG>`Rq+q$$t1kB^WHJnKwEBhM9-~=lRH@T$%%=t2AM!# z%LMW>uxQ6Ze#G(34b6iAhL!Zs9Y*3|c77C*b&gLCl=BMKT!xck{coX-L#j$YX9fe}vnq`xC#GoIIEiXp_b;rh%%iyVS z&4r(N*cPV-2%UvID+qXnhhu-`U= ziHV3y4B-<5fR;Ee*e(wpQ7G^D^!Hys>CV1JmqfDc;EpYY>Ifog{~X!h0>gl9-Ngqo z>VH(78Y1p!PaE^}mPNxQ=PY5JJLtU>ZxWwr_m8?xZle4)qQeb$wLvcJLP>Pyp>R`( zHlH)YEc?;-+oTc&5bySo2^aFEXTY@|3u19v8@9#%#e{|%jwo`TG@^<21{QLGX6kmp zLuu&zT&ATvlQvPjeSA)f9sJONIQm?7Hw@9`vg!xjvw;MT+NBsD(D*^#P+J%TW)aDf zx|(k(5ihFgHgzYjCi7K7N%>hg9b7+&L9UlP4EoUKFF&RWJ=2P}8}i3*@ktmk>#Yz5 z!Y~Yxpw&o5Vq}bH)NB?A2nwFUB(8aW=K9r0Lj^<)Abr-Z_&4Ny)dnFR9-UVjt63wa z;pY?E=OF6Mw0#FwAq{1;O_DZa5X*xF8s9>~C`c}9tq#i2#%br3{XIUoR8sp{bmz;u z+c9IH6;axfwcc#wu^Ov>=Ut6Rsn=ZE08@r{i8=jj@%NG|G^D{7cPptk?HjVO| zWM$oO2ZV((+JZo1fyTZj?jTiP7G!*H=0^NOLC0gO140Ss;1M3t5ukgUsao6wuLpoV z|92-C(+Q4>ii!g|3&yZ|8kLqM54(gjjJ@-N><>C1qHW-1+fBG-RM;_L`*<>Vp{bNo8X#zE=-gQ?)K z(o6xuV?3sj62fymqK{6hpu3$pLVlyq^V-e^8osi;A>ZGp?FwE6LNTkt*Zh)_>E?if zN9%PV0uqgKLW|t#X?1bM5-OSJ$0lJn6tJ2D@>}#kd7@cO!=j`AB)()Jvd_*7p{FqQ zYUKB3_mnjXI*PDe%NKq5Yjh z(k&vhs-;sNzU*Jkzj}U&oSs7I!~c7Kc5DMr9`mA}@&Bw$2qD!vOd6sbWu6whaOPgTEld6~6VmQH{&8 zM7EOj4^wNNpZ;~PR_K0$;N)wYzrSEPv`XlO8Ju~zN#kk|x@^Twl?t?5iu$F+o^2QA z;wCcwvlDy~BJUoXQ_)AoNDf5glj;`Xkf+OfIh-qAzM6nBQ=&cEQbJF)9CJM8Ko-5@bFL{iUR>x zk~DPoI!J=Pb?JLUSJ%n${jQowD=d)p#Wse8WOT#lf}n$OkLx84>~o`|tF!O=*K^gF z>IS7U)bMy8oPmJL%Irfgg9|&zL7Lj|I&o}nE@`T^&)RY4`tG&Ik*?5bCmz6R+Je}A z6T>h?Jx2&*2nf_fjX>MfLOM*sL;88U~_Rx&Bv4Y_9=Cbg=P>7CJ)}5D>uV2ugbRerMih3-GmAR|bztH0L z8*|IY#KNMbj9$>D(+hY}BoS!lVW|Sh5QxUV1?Aa@C)u*E%>8h_Vp0!o7vo$t!({b< zKUto^2^^nUSdQ<#*W#BVV$(K-dMtu;9Ej}{U~$dxND_K4H+Wkd;xn*R}Jee3DErcRXR&~{fIDgNw)cwe~c@+g=AVsHFiVGUD-Vj!cx}y*K z`1k;7Wd;ppghvz9TNDI+_+mmqXIOVPIB2jw#u#uSwn%SwOzd=E!Cam3LH%k{K2@=h zezV>en}3GEWl^!W;0b9R&ygFb`F@`9c)1o&vI`t25=nhgww1r6!6W zA(GLI*$u1AcPGDO*g1a5)5d*;hrq)rM0IDWyri|PNZk~;gZ`|=(f6=oc%i8_4YBd{ zU38CCdia)w>!&Ka3DzZ0)f0?*X}Id(zZSzq{QY~pP&=Yp`PQ#yD=U({f*a#xCp+4D zY3>kF17vqxU6p15y#s)%ae+r1qc)B!xWFJ_^oUhRO>JO$PS?`L2E@c`!g%0_&C4QI zWr2S%HMKU8@#y;ONnlka8-q0W#=~PkqA+%Lu2}sIdH9_HdXgNRx}2Qc z@B^=S02{kT$`9jZ~;X&Bzi;A6y^IRSq;8zjbhM zP)h6Qy531Cj2PU|^H@@=AxV9DSb4%Mohhsi>E(WdN?a+^#cB>t+?h}Kbx4TuPLY02 z0?@D8%%!LV{aI=g;qAktOO|T3MNum*A3HB_SH?}F0xJ9?$aCSea>EBZE1O%47sO`ug@?9$ZX7Va70YELz(>dK735uznjV znc`x$>5QXQ8ONfbZU0MKT1qM`->(;>dNv#LK?nRA6-Bu8RIoV5LQO%uwfEKG{gx^5 z>!K9d97jL`;)^Baq@+-Qs$sz=b@^7NBkn>dwgso=Z4gdO7yK^i!+k z4o%INGW-oWZ{K*~wwdO=Sa41!`W}j-z<9rQIt4jm#;ZhOW5Oq&CudN-pUCSFn}aV> zWmZ!~mcxiH2Bs*Yj|PcD^R4+Zy)kFNd+0$p1qcgz0(H4UAlG7R_&>h8vV-7+1Dw8XG+PBHCq52*ih!oWn0k zX|!CHjIlaLM$Qem%H+X#3_)UQaE)q#zPWJu2$A{d*o`&B11)o*2*SrC&FRUD0qzT4 zao*i}B}VVAlMbd(7wuaQ-+6n!(r{FBOe`C$q=BpRo5+Ln0?!ZfDf062v;Jrr_(-3` zTHTNHcFlp{1!xJ+q^tatt%~mC;Kz>XSh{D}qW6x&hU}HII*YxqQx(8T--xeu1NPE? zM~GC$4LXM=eTR~`dQR81WPV_v>n=P~m)JgX{wR06yZh4m;qB?)m)98Y#tbLzokSe3 zDrrN%f{4AgPAuDj0EiaDf>E_cvI;fmzT~v2si|*VM{1O%Xsti7Hyl)0 z{lyQaNa3;TFKA$Xqav+@uhWrD#$(%ha^k3t)AZP0T80E#< zA=m*o9rW`Hi{RWK&nE4^q>EzoBJZ2EFsJ*Q)70%h%`Zz(OJHX6e=gVP()>I)XKMQ) zc{G7}Fio(QwqsbGK8KD0mqCMFk)ZB=ch17v`CW?9&TpzmH`Z9LK~jL%ZaR^ zkewjn1VIXE8S&jg0>>KeV7%kw9h=I0$bIwKaD2M#oPWcM7cXjZt@p#el{6gH;~txN zU0huJ0(s>9_OxS*7yek3(LKtHM@&0`oJSc_3O=>H$TnbOq+nPG-o{m zF~trZ$`D;q=cy(J2bqB~KGM$s7s6=yhKEOcej4TtfN&VGw%9+kEnpc?1|BtC>+5{- z2R2o_T8)4ZYN{Wq0FgO1d|;3-*K+PEI)ZY$GlFtuRBB1b)78REru;#WJ9^2^tIXk~ z1GNkJ^Sg`sV5EqJyfNGM-ws&!N4qN7dNq=LAg*pF+_&e`_|qpTS{bCKu;D)i(xAS4 z^IU{wU%Sn~lWkbfU2F}ux`g*>m2DM zIBQIhpy!@+xPgmJYCiIz$))%a4Z;xX1R+fRn7(^bBAb4pXr%Vy7jrIYbaGzn{>SzW zqa-sV9b;xk&O~k^sD6SbTLDfu(ahKQpsUoz0S-&Wx;bSrw^7 zjBRojby5Nm{KK%u>rYakjN0gGWGl+l4K($w@?WMTYJ^?MRIi;3n_PM8JpB-GU+5z8+t1Fi->iX(P; z+gZ-J9Sxk)>9ve>U|K`~vFRATp1I{tL`^N^p|M?=tteib>>6 zODlq?(c$7^KbbjtU-q)<1ab=r*+PF$k1!R2>S~Q`ZFqJbKmEzS zUu=I`UDd3eW`vOxEidb1U}0r}C3n%KK1sglzF=pzKdXxcWe8GtxPs3APEV(V9kBzg zrycN35CsGBG`Ob<=+&2^IB+x*KnJIX%NaodvU3m@1b^lMoM&L+d%>xapYc^kTN{Sf z0KQ(h)F>#(0;bRJ$axsr@LUTas?tsc&;3&Hj%eQE^*%_bW*%t$0-*trMVSzvPwL#x zROSkmO#2Zx&l_Vljg5^3PRfH*HnVk3FF?Yss+E}-!#pk9_!;$U`DPHpkqU75K}S%X zn{$&^w{+yf9BdXxBbUSMh_s&>mGKdq0C|7HhLEstUuNyc-ww%^=xp7i$~hLKKP6{c z4nvCaff_qL9~wQz1rgq^Tv&0U{e0PK?cl)cXKe9tsQG3+a-clYYyt$ty?9av;`C3r zal;M4&3J;kIyxP%AJhi^i~`Z&|7q{L|G8}6xJk$snVFH1P1##ylP!BIWRL7Ek(G>u z%*ftklU-IuHlY%-_j-=&em&3M@ci=i^22>oeLkP-y3XS~j`unx>Eg6S2~a?!GHK|F zSNi$yr-a#RK%}mAK_^pcDs4i@O9PWqvPM_T!h7F<_zl1 z+G|t|RUAcW-=uOqG@JKL&Yk*SPi6VMZ*0j<5 z)M!}Z-8OGn`6{o^qCQIghw_*EU!1yZ7*FB;hm=0N?OmRr0*)3$Z3mknKi}}Chh5O? zdeiku|Fj2oqzEHv=)2Q(cXMuRbkscM)FH3l$guu4B_)-~r6t6MfU+B$Qze_-ukIYP zjccBPfCxb^p0#URi{O2z4;vY%$&JoP88)w-=he)j-vNUV7Vy&3FDwtM*ke4syvVtl z_lW>C^@ut374LlUX=oP=p-Z5j?668U(iyd~ff2_6{dMrA)Ux57qOPxFXdmR)z;T58 zG8Sd&r_GA@hc?WHKSv6#rmzj+^>)Ttwv}9apv@iMe6NSwEc}{&@xy}$DaK3M6xWJj z4!bWPzyL~G`$s6bAw?iLRRh|Oq@gV-!B*Ss!N4+vc^r7xFnjNOJpO#yL4h6S1Z2k| zjCfp1n<@anK+y%ombzAKp$2;fJL$Ive8lVvEs-jvULtLw9*wNV#^HGNG|DP_=-$<&zuv|KzwO^5~x zBbiqH=iQWX+q>LVq+c4Yt*$?|)#*bkhMCotEYp|F=z`KKdup{|)TZmz*MAe%FPEfZ zdqO1XP-1&>NUmN*we~ExLqLPmT3)jGRHc<{*_pL0=*>6Z@m_?@tkKv&;Dm_BM(;CM zQyZ`0ts{~7zowwcM1){a`QD79^{JX>+tl%tXhPP+tHG3euQcMb3c$s-`Mz@3hj4-T z#&yU_sTzEYf+&G?%8XybK$zqgzXG7B0Rec+T~Q@vy+4sKEOLm;>sn!Pnh<_!#dwLg zN_+2qD(f3x!Ek{M}Lc)$JrQH`v| zsko&l@eShNZQM3)4aolYrO&<}JR#fbCRdb5Q(-3M=VT=yIdY|JGn8SJ)MAwSbEkfj zM(-3?r*z6Ik2Lb3eR|HFHlkayK?AEDAWAPs#2SVTmF6`{AUc39M26*7FP=0^F3wGo75un*jb;BYhGG<9(yf{`{~ zN7+z0FpuR`j=M5U+h4c>P6pmT(DgWzvmy%08oz7s{*FSzDqMnx&Rz{Fs;bldyz7(t z=@J3r(7*^A!rnpRvpsT~ifYWC*`rh}PmqB3bxh2&Z*l3j_Az)Gt;sKzyWXZ1ytGM_3)#s|RDJ(3;K*<{g?3G)0+&k}azSKyb_J1ak8C!edAFyzEwsW>- z{`OhTxQ^ZU^Pi>i7yjB$);mgrdt1UKuj$`lq_FCh?Oc(73CQ4nq4(+_ZR6=Bu1M(U>f@ z)#SIdTL&{`A2m88r;{D%f~XNbSF0K9DecXUZw?-UK#SIQTPl{GlEWe1m5#8j(rTbZ zLy6ZGYJFC2F5?O#rGrBR^p~bzUf%2-8j|4Zcv~s`xwc%Kbb1~;UUPI3bcjH#ygcje z8s*PxGtx@`3ioHsDGwLt-UHnod!td^Moc>l`t8+so{^z!C}{J`->0S`hs4j=OK~tZ z|J`V4XsG{_9W@x`w0d-gsNCI&6r0>%?rc<$mk=|nE`qfnd?@+HMw7gOC`7|Brdpz_FxzceT#^;`9IzT$BVsJk!nT8mGoN`sN$cAtFr$7ogF; zok*dE2F5y^){9L?Fi-t_a$m!zl8cp9L4(ag6Qsq6g#<;q^w=W(lw+V$_`6~#^tuqM zk~O5_n&Xh!ds>d@h{knIHr;DK6zFG6M(OaA=6K7>4<{qFyiQB#5$k`n2#}45pHm)m_9e0qUX9vB@r(LT2Iz7W;Fa3))ey zYl$lD;!)MG%lQtjPsC9E_u9wltqeU|w8lT^c8J0# z%H;f-b(K&d*<`0i7rOh@7S7=leLi|0;ovIlWtLpe7vIRo^g}BN=Kp#8aciGvi@*yM z4;Ldl^E!8zCnG zB-Esp8qUWGss=wYGBRQ+D|zi_YVqdg<^W0xU)YM6d;aLj6UuO0ir||Ja=88BHIdIi zZORZU8Vp)^!Sum6?+<#mJ{J%g_9`lh$M1CC@_vH}2?>eU{>URU{xq3GnrP3L>T7oi zdG?&a#|$!`vd;w;cf@Wgs#nZxVv)Rh^tWO3pAgtjM9Fb6kPF-E^MQJhqSs0l(6tb- z;t;d4vN{tyda96cpH58g?c2Bi{nPg;mz)I0N}eYMl5GB(#?Gtz4Z~zet+f`+3E*Lf zMBW`$42{9gmwOZg*3fe-w`0;m2AQJb=G%#vxD_(7l@j&*q@w9@BI`kdq;vAlJOCqk}dknKCq$RYgK6L(O@JK$`_WCxsns3E_xH4_*b59Q=LFsU^Dn$ z3Z6B?(#0oKP`-@IbV~*_E_3tq%{xM|Qh2Sf^OaLw=7+3Vxwv|kVgH-W5O;Zp=0i13e>UV2~!<;>eq7TA}BCYwOV6^xpTh8k{{=zJY3YZkRfdXgBbl zA~gK-SwZDYacWS`P*hK8G@k%}glLJ}XNd1cGxEA+8xa&$SKoqKMm_8hiX?VHc3aD% zAdfq`-Pn*G0j~2<={*P{LKcL(gq)SOPtM4V*dAg{wa~-d?71r*(*HXP%gl2{bzN&V zCeTlcPfm`2&@>v!asweQE&}keYxvau%n~!kc-HF&IIh>PRGTrpPd@84F>h5r$`~1? zw^K--q}h%b8t|p ze+~5p=@7@>aju#(r1Hr{e3V;wGh=h{Hhkj*mc4hLCA{V?^)nGy zI+@^5J-ZAdMhcVw9AU$D{gCGbi`8i%5A?-!o~wB{Df*6#sGi~ec#T%q?y9ND;D6jn ziv%3y$i42Mz1&vLJYo17s11z|$bn6c&-aGlaT`<5E9T3+&JHdZeA)w#y9Ky6?=jzA z-2#38X2s|~h5YNBnM0WW8ImGEhh}E{^1c|*$JSPV1Q@d3kxAW*q9m zW^G_$vT$*!*-{q=rR?O@*bLE}!wwj&S5NDx_P&;^02Vm}XLUpsA>9O2ExueEo>6qO zre@uKp3{*>v}VB7bTD!6TY>TA7F-HC;0}-dqYOSacmVkjsv|qh? zHAaJ)_ATF^BJ2w5>S!L{c6H&c+4Z~jtYKUIS9T!~{GxdUA$tdEpyV<3Ke1|pAi@;U z7rcm9=jr!+yk4@jpI~%8hMoT!cm|BWMVO4RF{`aUBv(31oM(fzP&E||j1XQg$u44{ zf_7s6bGp(UliBG-ukA%CBrJ|cq8skY4vY+RckkZKHG*)f6lh|>AOcZYw65vNyCML9 zyjt@_$QyHb;>E<#6zeNzHuWmZWn*iVQ@Bw9cF~Bywz%-Mox!_)bfx_3`3?9HHtTF` zb%c3Sq5>V*)>c=a_@IMU)_N(-|9qC5_v@Sims)Wv+G!W^4$0`5fm?DG+VZH5A0Lvz%m*BT;I-ID=;-DE1$LHAOe$8*oDyBdEVRgrA?23z%v%5V6)2wQW8*H`gU~po1 z#8ie;0e&%L=7%5(jG}Q$UajmBsj4R>S-CVIZmz{f7XR4y4BU=5;xg^ z7~5HSqn2GkQnw0w4lJx zkG%{GZi73+kQj%Nwf@Ccq2|Zz>F-;J;|5;p3|ALCEoxtkbwb($5izg{I0ibHWfc<2 z-Pd)L)A%`9GcS-900JFn#!HatWCkU;%Hrja-l)^3W#K!jaqhe$O*vN3rbWVBa1RmI67|b8el1QGE4zIaE z!xM9Iz*44w)dVH;M{9rtLMNq6ANRABA+e+7Gn;=ap4B`VpJzknX9eY03Y;)PkiftJ{~v9aqK-AuPq+<#nH%=cg76m$0N|g4^I_}p zG6ssSp)-1SEG+>F3n!B}^;?|_ja8ys{%I9R&+i(Bw#FWo#aAqQ%(O(ei|WV^_WNvJ+U< zs_W`{s_Dw5eJTp}n*w&a$e_YimT%F})jyx?B#?*(opS{4oSly|5QCr6^sW$@^$>s_%2)4MY4zg-MgTc{*9{h=&CFbm;@Ju%BGcdcg+|Jg zy?o4>dPe~Tcfz#2@gp&}UdVwy>Ouo;xadt3Iy$A4IOEWPh)ne>mA#kEq6%NaAJzN) zXhpw$UZL)dl=C1 zZUrwR)Blteu@Tmny`Cr}EYbXb=7)13BNIz8{FkJZY$ey`w zl9bf;$TZ3{6V-a-7y^-w6g|YL2Xz~a2yX7>a0 z3pNgpOgJTMpx})l+w%}o+}=C!g{30v;o%YMo(KAIAYWrYX8J!#znO{ig-xX(_BRL3Fr=cw^x`P* zs36MhzIq`6;Ur)5g-4L2-3;Gd1$X|k(U9!@U6l6uPJnw1<_N05vImufhc+kPxTq2j z?5^u^nVDRc4wVGr$0)65b6bmhC*CCiV5vf4k$JrLZMC$tkg0fO@7C59v?FNH?Dl+# zB=#wJ&35k|LbL>W&cDD6lBD~2>L{F!50ItjtTQI(=Ret@3vVvRYIT<{I!7>zQ>;la z&f}tgxkknE%LLOV2-Vm~;!yA>62@5-lV1tpCPWWY7TloE9a_-M%?t~pOuxCEp%XRJ z?BBNJhB4V99l&sJr1q|c*DJR(TQr^AGmOm69M6u#J>mFy`8^5NHn?es@>+4CP2eAl>ib9Y~Y z``!ke`52yZ1m5j%dYN##2M@F_?mz{W12Pd3Sk(;-kSJ6L27XY@y8eW zp8MzKT5(wlb3V$~NE-B5mq1lj)i?*|Pps?HpLx^1g#)d44$Oj9@-hs`5ci9OrXlIX zpma(3W?l2TpHdjE_uAST!YTPQne<1G*^=#yVZ6w5K&VskvkgA?`cK8hxJb@Q&+_9~ zlFd+zX5&~%y1?`Ea~kx`=0f;o>dMWbojhOh#7HLC>Cn&pC4dE=Poc%Rad=t$qy`(D zR9-R_1pAYS7kxkxWw7i(0|Z0^ui!k z2Pv71iV7agp+qh_pQ_bPV#fRhU?wy|t8H1bdePjv;LI^Xcu6i!z^FtyJcmCujzUfy zXP+A9*F46rAiPnM8HDD}|FwVTuIH8%>kpst>6^H^CY;~m__=FzBb#cC|IK9hv+=t3 zP4%`E7T$zLfdG83Fo&v{L*$UNMAGR~i5I(wHMb#dp4_3Hs6sAQewvME6-QsFkm7ZB zTx!I$H^*x0bfz|}s-`AGv4*FaG6uT&UsJTa`x7OmGeq;qq*$%-O>#jEy7Qy@>6<5H zx9nbH2F6)&Bo2T0zE%$IUc`nAGQc)y1i8KU{}@N)&OR4_0uc@la&y>+w!NFn_1MK) zZoS>kE-rHIq4o?lZ1}ah3LRl+XulrIRz;ts#-un1ab#s>5htIwi^lV1H(@gvOsmxr z7$LK}`t9b&cy%ny%RiSJwww(Qo@($?O-F0aK#}B-cN$+pzHIA|HUhu;ov8)V! z`z8x}uwhX|1SWe_SMbq705TN-{=T)>0+rAUViPK0U#OXzj*{KnvRUbk2e3##cG(eu zO?!LQ>%K)YZ`|9QoM2K+2)#HvLKZxdk^mrEL`O%5ac9!xx~#rF#o^XMEVRdv-bYOu zmDgjVDufZZxOD~h39E2`O4yC1$=Go=?WGe;>+o2^yM5zZ09c&ZzhLUsH}v(8L{TDFx3l$EonY_%CJ zCa>3FI_aS%-67btSaI>eCA_#kaLXRejxsSY$lyKQY3h;7xv5h`0@H}?{Z9@W zm!>b7-TeXbq=TmTlR+_yk_k&DK^~bj7ArW9G<`~|yJM)MKq+59&oHrUB2<|6 z&HCWj5KPA~n};E|B04%c6jK1CK{SF8^cA39d@t_zBt0<)kA9lM9d<9Ee0qSQ@%Fo9 z)yzj6O|V(^qbD8i<(xO}PI)xWA#FHdE?6kNeSK1Lau`(jn9*_!$d!Xx4T>`|nR*Rh za#r^g>^8!yA=TacI=@w4j8_br!%R(?>{N`RPxL*q2F1qecEuAK1r?Pp(30>h4y*~P ztfffgU%L`bZ2FB?y8REuUO#R|6|GdbO|bGvKTMdI|NUo5iPRS2guyY_H>;uVaX5bK z*f?(OcUayyG)7OhmM1>>H8u~Rll16N`Iuj3DrzPUU<4^B>o}B1o zk^KPK>Faw@w^2aKKr$*qJaCrf=g`0P==L=gCSo`#VA{a*a6=z@mO|zytA~oHwY)2Z zzGe|yNNI3}7WPPJ06{H|VQL#Y>r%XpUEO(8Jd=yjG;DHCA>leCI)fj)bW%75hJzHJ zvRl({Ua5Wzfoe5#t58hRX=Dr{Qp_P~jYq-+>D@UjiaR83_kY3M{4F!}0&tjuuI~Qf zhC{u_-t^T$291FQ3tK&)5ON;Z)|Ital9EED!jGUNG{>7)^a0b@SL>>2rBM)#BRLY( zyBe29GdVwIhQ$caFMRjX7B)PYhQWPR;dgczM{>9iWaGl znmxL(-zcmxmn#+dk#@^-NZqmhm*JMSfGH1VT^B_HzGUUnz|TY548C^bVt>blN8C7# zW$$kq^~tg$E>_dugVbICSC+dK*3a{x5mL?Qe!lAL)Mm#F@racI)bPdLFEf}Rfb{w0anvREeBKt=(sx}?O}{7 zM^8<%-)_|Z1sk(=-n{aR%tsP&K1~CQk0tcb1M5}WK5m`aRn8Da45!)=V#{I_VUr8C z0bEOb%0Y{LF73hSeyYnu-@b*7KhqAFtf*BH8e!G!?+p2LxZ^8Mi%6ivZKw|O0W5$R zMtLPAVi!XMZt&)HIM(rYxvLO7_k3$arf7dK%<<1Aq>2K>fTZ;e{mvA9;nG{&tM?SG zbk`I5d(MIE3!_jjkK+9gwh}}9X?U>d#6GhyLxz5?Rw@K-GZgzaox#4^sMQ!6;)0rW zPSfF&oVd*5JK=VG>I#JdM!LrW$(t&G27W3kTK@dwhJ;+rlJ41D_C@hiiB3>L@!1NB(`y{+E>G>DxlDUNwidWujhGPk?a6KfiUxSgK7{4a2l5ms+Z+?)en40 zUgT{qRhtwqnN%v?=o=jD2JbMDX5A5qu3-?2m_=Jbhd4shleyHd)LVW)dc+g9n`==9 z4UV}qLV47Rg!+JXX+03Zk3fUc&{3>5>Q2)Vuu%>AQ+R*S@i_$CMQe zTwMU|NY96O#XQavn~tK~L|1q0DX0~dx^0}eHD&9)9JnYu3~6lH{>)#hI1P_?2>l;_ z5>tJ9GzanApzi32ra)^oF|6lFW#GA!L#nM}?ul`O`AoF^+lLa0IFV-|25Y%S*Z<(Q z=iRP$V=CrorI5(jXX>_22@F&+t!TvG7HC_=C#~^mYNurXqj|qGB&0mnRCMs*mZHp+ z<`0>cgNbLNSLb^vg3fm?&wsbx@G;~-LpcbXj7jeK?wUun58(~}4*pIoIhn$;1ph7* zBKw1Cv;^Z9)}(h=cAZ(jyl!FqboSU2Frz^nlVE-qPtEhD9XVvark7E!7_L>h{jQq% zV!l+brdev*OdHlYGzW=?~q2@$z*$Y(FUIShncXjWc~*1Rrp_*q9eRv7&R2B z|3)9VQWs*%7piF*E9Gu6Z2Bcmt{k1kCnN+LJa4%B_m1J}og)BtZ`!F?yx_Q)Q+vvQ zf{5N8bBu}*vSWxm&(w)!7TBjQ4?TFsnkMBl9at(SACnc=iAEa8WWujQvJklN^@>iK zODDElR)2$LcC4YQ3P%|0#`WNUucT)UpNqY$3FK~f|7W6@P#d? z&FuY{99DDuYRv~qw0pkW?U?kaQd*ADF0vatUI=vhHG}$s6pNTixebtncf%V^PW^o% z%*>cbA!DPngGg?)1u|r{pmZj&jVD<&Z?Pk=}86Thp@8Q|Yy-zni zu2Vw0Y!Y2E25AW8^qiG94v(i1EY5B z`PUPR>So8q(&<=^G_AySF{d}a?{UDs^-uw$Z89*Xbg@=2ONlQuqDj!FB6QO1K$^GR zQC=$D4uezCRAT|g2P7m2V4D{8D~HqlmBV7iO7?-)<1VhT2ddSY{%1LONGKe{+N#*f z8p8=Aa33I>{x(2GXuQ7U4vmRi_#eMVg5E{(4=E#ZX4NBFzuduTE!;15I@c@|6|s{z zjoxiDwQsdvi7P59N{c^=Y>L?)`cX4!90eBs?sGwSYB8YhkKs%o_OKwk-Nq0`V7AEbc=q^ihZ93`?9f0O6$-U+uwH!izj zJ$F`*GHG%h9+`v(hPy-is%zr>y-gy#$490IH4BSE3G*lo2aJ}w45q4Ki5|~+RlU@b zHaZh#kG2CGk8yBaZ1e~;f1K10#bx7M0_*utFsycPu~@1Oll)yFW;6rgi`7Hh5Vc|l ztnbT*7Z+kEDUU1``ZU;E8SpHaR!sY&oyjwjW6c^mF~#Ai+QYk)@Mr*%&8^Jz<}&99E}zQ}F2%iX5W|_jOTFm2#QY{8!er=#{6_uGs=C>IDcLhVoJBiHKMQ8%?!{p` zlw2E23;~ZA!Rr)CLmJieMacmK4SrmFv?Sh`=a>AmhkSgBF_dxQW4FG|(7XW_z7FWB zmLHg6j}ol({o(K&n9Fmp^_FyZEV`rH;Vh2KYGP>!=tV|jpu*bM55hxZEqyCkO(y!2 z<*col0BWb!e(abHK33$aXM;?VHA~}#QUBI+XyNrBT0D-p0LIWx!pE^q$hWXHRGFPeT#p2^Mg{X?ZkPF};CsFkBA&8yj5 zKHYcbP29M2?xV7eZr%?Nc-_{Xlv+@d7CRAx0rt0!)xW`TnB2@<7}&r8+^epxE~tqH zE$2myf|8OZ*WdSpw*=GiEv>EZFf)^#oScx0c~=jMN&7Tu=_jqiG;0oNzQE=*ShF@~X4#wPAIF{{2ut|R1&<_)?LKfukyqlKY5EG!IoL!!#6D%s}H0%~zzz4RT1 zpU+Hglf$tuKxG7{^4T2fSs7OY@InCE7kWF?gGtrZR>h$|0xdguS-0Df!4OvH->`=P z04hT=To}%oQRN*P$h2q&wC**~v;{u#H4eCBoA!0vM>Ez{X3(Bv;b9*3K#~#2xV zGenj3F^6+^di(o3z=MduQMolj39nvZBgbGtwdLVbA&NXC$Gd)w9D;}Pr)H|*UD zkoN^mEd7A(!@blI8e;fB$atXPjr&G6JX$tDG&G&Wq@}J8SFc|>$3+Q!c#e|lo-*y; z>fbH;*fp7?2JC>=UjgREs_PALBw2Ew>eLzZQ38nn{+%)7y`F5f?G;3?Ul=HE5s0S4 z6+7kFcDlPDT$S9BaiEvDDSRcr+u-=0DDwAUdh;OzS%Rh1V#nDa#K`LwyA4rUH@RSRF||n zbp(nTabH0|RVc?PpJ&6iehpkN6ks#(F??tnHA6BzRMlrG4HGcD+^tGD{F4Q=XkdF7 z*TC4cM5X&|p>+ag`Va_|Hv{0Ye99he^fEj94v3!`deH6aw~qo~(Wme`JQ?L0O;|0t z$XsqLLl?pPiLKjy`;nhWpKZ|W`1OWWM!GZlsR(JsZ?R1%PuoJ`4>itP?fgR{WzH+Y z*!x2N#c0|-JFBc0>%vc=KFM-WWigelcOVMKLQ6oML#J(f_Ogt9#rFdSJDry{z`~ix zxUeGWDoBNVIG|N{;QT zQ+uSNLkde|Xq~Mb4qif-4451t63f=nkzguYI;)ufpOau5w3pEFto-_Q2hI`Y;N^@I)Hu(dTgY89{vQ_+DU_PS;RMM8Bo2sxVUhef4Q;p`!~Vg++=xBO(Ci- zP#t{$W(V+igfSMJc|28MBqZnR;u4pfEMS^-?>z)8IXm+xDk(XGf{muA7| z7w=+(>mYm;dYv5--=%?n4>YY;v}6r#&!2nmR_>GcaOcDqE(^SS{3%@UU%e>D&dmX< zE^SHD-U!a@TW!7V!WGnX9V+o7nfSF=k6*;I zz7Uss(VAmFaKdKZb|*UsInxJD&zmfNQo=Jtr-hvb0hh2y$A0_AKfLwnQy$T>&N~ct zQ`8&yBpzc@&qYW8%UzLHyiLLGwYAyeFHlN*f=^>`ER0QM6h{|8QJwhV4%`t;%CvW= z*L})nY3KxS0-stA&2w$~$$XiLdh0|zkz8lz@m1#ZC7HQx&&hhxNS=&a5D2qg+sT-P zv18ViHK^N}y~G%JS^c>FYWEG=>HEqdV#B4mTN`(iMb_yWDd|$}<7Luv(e_Eti=GMn zDtm!`b?%(*m(aD5u9dA4Pam-Mjd z<4?OzILar=mhf)nNrOjvZcu>%!|A6J6Wx`9D=zQl->wAH%UcPmn0-9AhS!1ux#~kh zCh`6-jP>0+noJ!g?d^8O^bZYl6c3*~B0!B63Una)poDtvU~3=txv;9|Hv994!I7%N zPj$6-RosS_$3;F2ToEgOZZEPO?yD_8fEK=F?o zdyk-Lzyzk93pCHoggu8wD=tN(6_@0mmX0z%9AP?&OJ?Y^6@F(w9*` z&L`Ua(De)j_Ychh=|;CG>ZWi2x9Ls1Y?$Gh#zOLn(MdM*TOZ!~8-c?q{kgm*cVy^oM7;1lo8N$;$Z0jt7T+f?t0xV53LEGe!9jYzQg^mx}rV(Jz0( zK}}uX>m~>`-kgfXMU%=8nmtpCnRVgS%gKuxdqWavsSq@>^ib-|!q%XQ@-6edI1%yN z21iDrTN1ofwDx-)PbWLguN9M8l*<*hmf!CMtHrX@arZeI{`WR^J@H}k@|PH3Nv!)! z`~Wi!Ke`#h280cMVx(LLVlk*d$ruZV=yFw-AcJ^eJI9 z`lFsj6=*pSJZRpTQoC^H_nWudn<7|egjh_Cxz-dyC@Bs^ZmcrflXaXO>+36v8#1i@ zU3r+rWa~-?GMB^@3?|`Ho=YXpWH=b?*;1pkv$)O1w3QW})zt<#cU@bBv&*6$ujN#n zF5JW17qTk5oiK&kC$7b(rH3jnoHFVXzq%0Kk#mLL`G{6(VJ)0Nmuz;L+x|dNA48c` z%$lQxXo`42MrHcV4RY_I0jgr*Vw5IfoOh3!U(ruVfT1=sU~p(PG_nOF@nYSa!)bDm z<~}(tuHM7oSzc$(%T`C<7zukKb>drALvb5>D2G{+@Cc=-+XQ#j(7xcvly3E8%f;s^ zmT@0m^A^t?vHb#&D5R%E!CZA7cd$JznqvlJVYj3}!b~!eS>~4;??#^o@g33Ut`9Ca ztUa`VCyH@erD?gO)kTnsY(GqQ5!f7ctL(lr)o)bMmbK|y37zkk4>AY6Q+N>6%K zL3E~ex0O?=GFOs!ddbb9C$1_Wtf7gNiTDHUJ=D?UR8D|Il#=IP0U86#pz6%Og)z5YUExeqzyb7GIU_vn=&*9k~WQ z&Sos9q&og{N#(md^@OUhZ{rHTA^|N=!Vb9J%l@C~J87gW{t7G=oO-7C;bj|#btg9)anueh(z;0SrY{5vVGX&_o597t z4&WM4R6scLkkzA^gcrYmU-s{oO?G>tbzjHttASTmTuG+id8B$$sZiW7?ZM5~k~CT5vZ_&lT8+G{09n!WPTh;c}_{4!kZ zvouhTW0Q8pweh;hbc++`lDpfiL-o7tAH@@l{Xw?)XK69YkvFI&R>Yb?b}sakJOiX~%ZO1wJA>v*+vR|z}X8cW}Z_D;?&^)Y^C zxMkcD`6n4&O%$D|(4v1CuQKPa$Ti-xHj5SrVx*%_rFx>JdggpH!uIU3;chr=TMqw37quB&}kLeNE=zO!D^Fu%lzW{yX zMR#nxGrY^AkWziaaFI%|@%d_^>x6Bi1_+@+4! zHKT2G!(j!cKkhmy`>H8-`C7zr*k85>%HF>LQ!?>%hq9TmdF z)T7V4lTCjFp#1ZuwVx6uS0)mEh9*y&(^;PfnwoV_rx*X~FfY3vGPW11;XJ>kf`wEC zg4XlH}>UP@RN2qor9utziVN40_?^pbD;0=Mz0bK=;b1)hk zIw0{HqJ43%j(a4)eJbqLJpZz8`8TU~!=R|ByCw}yODRQKzhZ@VEIKVUb!4DrSRV?x zuXeAk7kW(2?Ip1}e7{eji8qD4ge|Z85;3v!El)SvET49q#aq$v{NRd62!(Av5CY@j zL{u#PG>+V1u_ygRc>r>KIkQK4RwLgnpQBe^4JK@?`EIkKW~9$E2+w^+ z`ZPrMchdxYyfCMuX3Wab4$Xvnc^B8>9((nX&t9~a^^A3#^m60T&UR~#@<3lv4&opX z^3}A7kxtXFPnaB(!Vm;lr5bWThgf(AoE-!!iD<_kM5b_TL3rmy;r;h% zGzGD&%FTm9P&Jl`9o*{||8Xq`&1vPm0n7d@_6BG;Bw8*UJ@KA1JeBDiSB znhyV@2^FIjET=`h2jFH~JUX*z34jK4Dn|a0ib^QeR9hlG2^^<(4 zT|^ev4!nUV$wY>kA1VzWsD(75CC)D?AT02DI;s=yo5UD7NeobR#==4Aw;CF5*3M^@ z-G_|>Ibk4knUIxA3@x|p{CFVWQFGrr~F@Yq9 zYDjbs7i3mwD8sD8+z)&(F1I5jIuM4o#o5i+6rOrhaLzb?qZ{MohB5S2V&Y0!vTMty z!ov0>jx;2EpGv~tw>-^N3WmE5h-`{fc*A72yTY0x?nl}EnhmKDNB#Z%+n|Is1G!4` ze13U365SvOgn)1$N6sEN21Zcq?Co*a+F#kkL)gn$*}luQc#tVzXZr49fe*EqwAe&` z-&+i1$MB6nOH>|$RA7C=7o@`fu?hc;PyU)ouLLF={+gFY35+n%!u^F>H4MW>Qj*Sn z0nGJAct&7|rgh~q0D&8#k@kfHDNzEWqm{p=@K6JM)(u{|xcK-`zhh2yD=TK?9UoB? zqby2XE=xFrft*0S=#OtVRHHU{yqE7eVG>sM{+W~ly^Z*ZC64&Tz9twZ2o!I#li~o4 z0p9>;Z+KuT=Pw4}VTe)TGvi{Qy;sFlW+Jxdzg?_zn+jjVo?m2iRAb34AD)8(R5psG zdN^m%W@rMA79j;kO2^vwk50QQ3LwuV+T7fHECv!@1~@Sw0un=|5*Q6#`tHJ6%KU(w zyas0EhU4A|gd?DOH;e!LI*TY_5$F)48&kh6qNznlA*HXNycun+qX#}ipePN2A*Zgi z4KcHwq}Y4E%F3v=TwY%rS5vXU$L#oU{PyD;AJY zLZS--oAYraL>`7<^ z;I@H61x$F99mx?0wD52Gzl8^o>NbCI53Df|Ev9WR>$8)t0MrJ|6oXuJ8xVdxZhzEq zso#Zs{i+O)2x>_SH~DM1XbL_I1RDmyA|Bnb&^<1$M}Qe1YMY!#QIBOK__28*}+vH>jY8HJ_t$ScQhCA`nG@^NwJ$S_2qgiO&gxT zEH?^AE)EH@9H%QRFyWZ0C{VvWFqQot1*bp(v;eX@Ko@qvIzyhCN@k2&333y-=m=cC z2w0x8geqtQ@H;OZz~kMGe1GUrKx$ru$xtKkp`rB|Zk zZso+0H=%fT6(lK1t?~8i*Dp}E2G_kmI6*hiHRE_i4KPD10Gc=VE~xP_0pJgTlc!9( zqu1Wg@k6qg0N5W8q6~@2@9KJ#{dWmusBo%jB;wBlNFo#@by8bK_F!v8Qm;EBatKa9 z-hu@9#(-0TJ(44*j0h>a`~Nq-62wo?#6FWBEp@iyPm70YxxeoQg8G84fx^PV-wtY$ zj<69IK8UP7zfcnQ}Y`G}C+{>obc2mTm@C((jOLdj+QPf<8@11LyHGFSvc z$Df5w*+bqs1`ty50O_d5Y=RjKBgP0R2{L4j$_3qu9?%uxwZ_6?qJ0^I#KXR7va&_`u=zK%bN_!AU6y zN)vZs2e53wCycVq>u1A^HTxl1*opMq6qh zkm(BhDPBYOaqU^MExQlkC4*H8kR%JRq3Vwx2Z6`1{W5z4O^ zPvWFc&1vsj9qy04kx5K6(wkUE00f(Zx&)4~XIEz80|ZoEUHw064pb|Ojb9@#N{~-v_Nnqktp;BTq`>-JD?}IIf9-A`wCK-p~%5Y z1GA{EuOA5zehLk!WtLBVUwxs`QoIKj<<4g~xla7OkY*GdiULRCP>zp(bpEAG{p88J z5tvoL8>o-~hkO<5uraB=5B1r)pqbRj$%XD1zKGaQ*cxxbm)|$I>+ppIyXC`&4;jhf zbKSfdZwe(GzJigr^uJ&J?;`x~N%-G#_+L%@~ literal 0 HcmV?d00001 diff --git a/web_leaflet_lib/static/description/index.html b/web_leaflet_lib/static/description/index.html new file mode 100644 index 0000000000..655af50d89 --- /dev/null +++ b/web_leaflet_lib/static/description/index.html @@ -0,0 +1,454 @@ + + + + + +Leaflet Javascript Library + + + +
+

Leaflet Javascript Library

+ + +

Beta License: AGPL-3 OCA/geospatial Translate me on Weblate Try me on Runboat

+

This module extends odoo to include Leaflet Javacript library.

+

This module is used by web_view_leaflet_map.

+

Important Note

+

The javascript library is opensource and distributed under BSD 2 Licence. +See : https://github.com/Leaflet/Leaflet/blob/main/LICENSE +You can so use it freely.

+

However, display maps requires to display layers provided by tiles servers, that +requires ressources.

+

For testing purpose

+

You can use the openStreetMap url https://tile.openstreetmap.org/{z}/{x}/{y}.png or other, listed in that page : https://wiki.openstreetmap.org/wiki/Tile_servers

+

Apart from very limited testing purposes, you should not use the tiles supplied by OpenStreetMap.org itself. OpenStreetMap is a volunteer-run non-profit body and cannot supply tiles for large-scale commercial use.

+

Regular / High Usage

+ +

Table of contents

+ +
+

Configuration

+
    +
  • Go to Settings > Technical > Parameters > System Parameters
  • +
  • Create or edit the parameter with the key leaflet.tile_url
  • +
  • As a value, set the url of the tiles server you chose. (See description)
  • +
+
+
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • GRAP
  • +
+
+ +
+

Other credits

+

The module embed the Leaflet.js library.

+
+
+

Maintainers

+

This module is maintained by the OCA.

+ +Odoo Community Association + +

OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

+

Current maintainer:

+

legalsylvain

+

This module is part of the OCA/geospatial project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/web_view_leaflet_map/static/lib/leaflet/images/layers-2x.png b/web_leaflet_lib/static/lib/leaflet/images/layers-2x.png similarity index 100% rename from web_view_leaflet_map/static/lib/leaflet/images/layers-2x.png rename to web_leaflet_lib/static/lib/leaflet/images/layers-2x.png diff --git a/web_view_leaflet_map/static/lib/leaflet/images/layers.png b/web_leaflet_lib/static/lib/leaflet/images/layers.png similarity index 100% rename from web_view_leaflet_map/static/lib/leaflet/images/layers.png rename to web_leaflet_lib/static/lib/leaflet/images/layers.png diff --git a/web_view_leaflet_map/static/lib/leaflet/images/marker-icon-2x.png b/web_leaflet_lib/static/lib/leaflet/images/marker-icon-2x.png similarity index 100% rename from web_view_leaflet_map/static/lib/leaflet/images/marker-icon-2x.png rename to web_leaflet_lib/static/lib/leaflet/images/marker-icon-2x.png diff --git a/web_view_leaflet_map/static/lib/leaflet/images/marker-icon.png b/web_leaflet_lib/static/lib/leaflet/images/marker-icon.png similarity index 100% rename from web_view_leaflet_map/static/lib/leaflet/images/marker-icon.png rename to web_leaflet_lib/static/lib/leaflet/images/marker-icon.png diff --git a/web_view_leaflet_map/static/lib/leaflet/images/marker-shadow.png b/web_leaflet_lib/static/lib/leaflet/images/marker-shadow.png similarity index 100% rename from web_view_leaflet_map/static/lib/leaflet/images/marker-shadow.png rename to web_leaflet_lib/static/lib/leaflet/images/marker-shadow.png diff --git a/web_view_leaflet_map/static/lib/leaflet/leaflet.css b/web_leaflet_lib/static/lib/leaflet/leaflet.css similarity index 100% rename from web_view_leaflet_map/static/lib/leaflet/leaflet.css rename to web_leaflet_lib/static/lib/leaflet/leaflet.css diff --git a/web_view_leaflet_map/static/lib/leaflet/leaflet.js b/web_leaflet_lib/static/lib/leaflet/leaflet.js similarity index 100% rename from web_view_leaflet_map/static/lib/leaflet/leaflet.js rename to web_leaflet_lib/static/lib/leaflet/leaflet.js diff --git a/web_view_leaflet_map/static/lib/leaflet/leaflet.js.map b/web_leaflet_lib/static/lib/leaflet/leaflet.js.map similarity index 100% rename from web_view_leaflet_map/static/lib/leaflet/leaflet.js.map rename to web_leaflet_lib/static/lib/leaflet/leaflet.js.map diff --git a/web_view_leaflet_map/README.rst b/web_view_leaflet_map/README.rst index 55b0c9cdc6..ce49125516 100644 --- a/web_view_leaflet_map/README.rst +++ b/web_view_leaflet_map/README.rst @@ -7,7 +7,7 @@ Leaflet Map View (OpenStreetMap) !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:b9e0beff8f439a6c89a4b788c6c59e63b150e687eb60845e5cd811768148f875 + !! source digest: sha256:fb5c0966ccb6058cd5db4000982a3f2910659e43db67856f3613092ae8fe3a78 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png @@ -40,28 +40,6 @@ defined. (To define latitude and longitude, refer to the Odoo module ``base_geol .. figure:: https://raw.githubusercontent.com/OCA/geospatial/16.0/web_view_leaflet_map/static/description/view_res_partner_map_2.png - -**Important Note** - -The javascript library is opensource and distributed under BSD 2 Licence. -See : https://github.com/Leaflet/Leaflet/blob/main/LICENSE -You can so use it freely. - -However, display maps requires to display layers provided by tiles servers, that -requires ressources. - -**For testing purpose** - -you can use the openStreetMap url ``https://tile.openstreetmap.org/{z}/{x}/{y}.png`` or other, listed in that page : https://wiki.openstreetmap.org/wiki/Tile_servers - -Apart from very limited testing purposes, you should not use the tiles supplied by OpenStreetMap.org itself. OpenStreetMap is a volunteer-run non-profit body and cannot supply tiles for large-scale commercial use. - -**Regular / High Usage** - -- you can contact one of the following companies : https://switch2osm.org/providers/ - -- You can also install yourself your own tiles servers. See documentation : https://switch2osm.org/serving-tiles/ - .. IMPORTANT:: This is an alpha version, the data model and design can change at any time without warning. Only for development or testing purpose, do not use in production. @@ -75,11 +53,7 @@ Apart from very limited testing purposes, you should not use the tiles supplied Configuration ============= -* Go to Settings > Technical > Parameters > System Parameters - -* Create or edit the parameter with the key ``leaflet.tile_url`` - -* As a value, set the url of the tiles server you chose. (See description) +* See configuration of the module ``web_leaflet_lib``. Development =========== @@ -182,11 +156,6 @@ Contributors * Sylvain LE GAL (https://www.twitter.com/legalsylvain) -Other credits -~~~~~~~~~~~~~ - -The module embed the Leaflet.js library. - Maintainers ~~~~~~~~~~~ diff --git a/web_view_leaflet_map/__manifest__.py b/web_view_leaflet_map/__manifest__.py index afc6f7d87a..b1928589c9 100644 --- a/web_view_leaflet_map/__manifest__.py +++ b/web_view_leaflet_map/__manifest__.py @@ -4,9 +4,8 @@ { "name": "Leaflet Map View (OpenStreetMap)", - "summary": "Integrate leaflet.js librairy with odoo" - " and add new 'leaflet_map' view, to display markers.", - "version": "16.0.1.0.0", + "summary": "Add new 'leaflet_map' view, to display markers.", + "version": "16.0.2.0.0", "development_status": "Alpha", "author": "GRAP, Odoo Community Association (OCA)", "maintainers": ["legalsylvain"], @@ -15,12 +14,7 @@ "category": "Extra Tools", "depends": [ "base_geolocalize", - ], - "data": [ - "data/ir_config_parameter.xml", - ], - "demo": [ - "demo/ir_config_parameter.xml", + "web_leaflet_lib", ], "assets": { "web.assets_backend": [ @@ -28,8 +22,6 @@ "web_view_leaflet_map/static/src/js/view/map/map_renderer.js", "web_view_leaflet_map/static/src/js/view/map/map_view.js", "web_view_leaflet_map/static/src/css/web_view_leaflet_map.css", - "/web_view_leaflet_map/static/lib/leaflet/leaflet.css", - "/web_view_leaflet_map/static/lib/leaflet/leaflet.js", ], }, "installable": True, diff --git a/web_view_leaflet_map/i18n/fr.po b/web_view_leaflet_map/i18n/fr.po index 845024e317..1093ad0a71 100644 --- a/web_view_leaflet_map/i18n/fr.po +++ b/web_view_leaflet_map/i18n/fr.po @@ -21,11 +21,6 @@ msgstr "" msgid "Action Window View" msgstr "Vue de la FenĂȘtre d'Action" -#. module: web_view_leaflet_map -#: model:ir.model,name:web_view_leaflet_map.model_ir_http -msgid "HTTP Routing" -msgstr "Routage HTTP" - #. module: web_view_leaflet_map #: model:ir.model.fields.selection,name:web_view_leaflet_map.selection__ir_actions_act_window_view__view_mode__leaflet_map #: model:ir.model.fields.selection,name:web_view_leaflet_map.selection__ir_ui_view__type__leaflet_map diff --git a/web_view_leaflet_map/i18n/it.po b/web_view_leaflet_map/i18n/it.po index dee6fe4278..c9d2f0e209 100644 --- a/web_view_leaflet_map/i18n/it.po +++ b/web_view_leaflet_map/i18n/it.po @@ -21,11 +21,6 @@ msgstr "" msgid "Action Window View" msgstr "Vista maschera azione" -#. module: web_view_leaflet_map -#: model:ir.model,name:web_view_leaflet_map.model_ir_http -msgid "HTTP Routing" -msgstr "Instradamento HTTP" - #. module: web_view_leaflet_map #: model:ir.model.fields.selection,name:web_view_leaflet_map.selection__ir_actions_act_window_view__view_mode__leaflet_map #: model:ir.model.fields.selection,name:web_view_leaflet_map.selection__ir_ui_view__type__leaflet_map diff --git a/web_view_leaflet_map/i18n/web_view_leaflet_map.pot b/web_view_leaflet_map/i18n/web_view_leaflet_map.pot index b0cc92a95f..f73b494ec2 100644 --- a/web_view_leaflet_map/i18n/web_view_leaflet_map.pot +++ b/web_view_leaflet_map/i18n/web_view_leaflet_map.pot @@ -18,11 +18,6 @@ msgstr "" msgid "Action Window View" msgstr "" -#. module: web_view_leaflet_map -#: model:ir.model,name:web_view_leaflet_map.model_ir_http -msgid "HTTP Routing" -msgstr "" - #. module: web_view_leaflet_map #: model:ir.model.fields.selection,name:web_view_leaflet_map.selection__ir_actions_act_window_view__view_mode__leaflet_map #: model:ir.model.fields.selection,name:web_view_leaflet_map.selection__ir_ui_view__type__leaflet_map diff --git a/web_view_leaflet_map/models/__init__.py b/web_view_leaflet_map/models/__init__.py index 50504bd59b..fc23e6d3f9 100644 --- a/web_view_leaflet_map/models/__init__.py +++ b/web_view_leaflet_map/models/__init__.py @@ -1,4 +1,3 @@ from . import ir_act_window_view from . import ir_ui_view -from . import ir_http from . import res_users diff --git a/web_view_leaflet_map/readme/CONFIGURE.rst b/web_view_leaflet_map/readme/CONFIGURE.rst index cf45731ceb..3dd5645dad 100644 --- a/web_view_leaflet_map/readme/CONFIGURE.rst +++ b/web_view_leaflet_map/readme/CONFIGURE.rst @@ -1,5 +1 @@ -* Go to Settings > Technical > Parameters > System Parameters - -* Create or edit the parameter with the key ``leaflet.tile_url`` - -* As a value, set the url of the tiles server you chose. (See description) +* See configuration of the module ``web_leaflet_lib``. \ No newline at end of file diff --git a/web_view_leaflet_map/readme/DESCRIPTION.rst b/web_view_leaflet_map/readme/DESCRIPTION.rst index 7be1c11ea5..365746f607 100644 --- a/web_view_leaflet_map/readme/DESCRIPTION.rst +++ b/web_view_leaflet_map/readme/DESCRIPTION.rst @@ -9,25 +9,3 @@ defined. (To define latitude and longitude, refer to the Odoo module ``base_geol .. figure:: ../static/description/view_res_partner_map_1.png .. figure:: ../static/description/view_res_partner_map_2.png - - -**Important Note** - -The javascript library is opensource and distributed under BSD 2 Licence. -See : https://github.com/Leaflet/Leaflet/blob/main/LICENSE -You can so use it freely. - -However, display maps requires to display layers provided by tiles servers, that -requires ressources. - -**For testing purpose** - -you can use the openStreetMap url ``https://tile.openstreetmap.org/{z}/{x}/{y}.png`` or other, listed in that page : https://wiki.openstreetmap.org/wiki/Tile_servers - -Apart from very limited testing purposes, you should not use the tiles supplied by OpenStreetMap.org itself. OpenStreetMap is a volunteer-run non-profit body and cannot supply tiles for large-scale commercial use. - -**Regular / High Usage** - -- you can contact one of the following companies : https://switch2osm.org/providers/ - -- You can also install yourself your own tiles servers. See documentation : https://switch2osm.org/serving-tiles/ diff --git a/web_view_leaflet_map/static/description/index.html b/web_view_leaflet_map/static/description/index.html index 595e1e917b..33b3fc5568 100644 --- a/web_view_leaflet_map/static/description/index.html +++ b/web_view_leaflet_map/static/description/index.html @@ -1,4 +1,3 @@ - @@ -9,10 +8,11 @@ /* :Author: David Goodger (goodger@python.org) -:Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $ +:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $ :Copyright: This stylesheet has been placed in the public domain. Default cascading style sheet for the HTML output of Docutils. +Despite the name, some widely supported CSS2 features are used. See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to customize this style sheet. @@ -275,7 +275,7 @@ margin-left: 2em ; margin-right: 2em } -pre.code .ln { color: grey; } /* line numbers */ +pre.code .ln { color: gray; } /* line numbers */ pre.code, code { background-color: #eeeeee } pre.code .comment, code .comment { color: #5C6576 } pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold } @@ -301,7 +301,7 @@ span.pre { white-space: pre } -span.problematic { +span.problematic, pre.problematic { color: red } span.section-subtitle { @@ -367,7 +367,7 @@

Leaflet Map View (OpenStreetMap)

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:b9e0beff8f439a6c89a4b788c6c59e63b150e687eb60845e5cd811768148f875 +!! source digest: sha256:fb5c0966ccb6058cd5db4000982a3f2910659e43db67856f3613092ae8fe3a78 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

Alpha License: AGPL-3 OCA/geospatial Translate me on Weblate Try me on Runboat

This module extends odoo views, to add a new kind of view, named leaflet_map @@ -382,20 +382,6 @@

Leaflet Map View (OpenStreetMap)

https://raw.githubusercontent.com/OCA/geospatial/16.0/web_view_leaflet_map/static/description/view_res_partner_map_2.png
-

Important Note

-

The javascript library is opensource and distributed under BSD 2 Licence. -See : https://github.com/Leaflet/Leaflet/blob/main/LICENSE -You can so use it freely.

-

However, display maps requires to display layers provided by tiles servers, that -requires ressources.

-

For testing purpose

-

you can use the openStreetMap url https://tile.openstreetmap.org/{z}/{x}/{y}.png or other, listed in that page : https://wiki.openstreetmap.org/wiki/Tile_servers

-

Apart from very limited testing purposes, you should not use the tiles supplied by OpenStreetMap.org itself. OpenStreetMap is a volunteer-run non-profit body and cannot supply tiles for large-scale commercial use.

-

Regular / High Usage

-

Important

This is an alpha version, the data model and design can change at any time without warning. @@ -412,8 +398,7 @@

Leaflet Map View (OpenStreetMap)

  • Credits
  • @@ -421,9 +406,7 @@

    Leaflet Map View (OpenStreetMap)

    Configuration

      -
    • Go to Settings > Technical > Parameters > System Parameters
    • -
    • Create or edit the parameter with the key leaflet.tile_url
    • -
    • As a value, set the url of the tiles server you chose. (See description)
    • +
    • See configuration of the module web_leaflet_lib.
    @@ -521,14 +504,12 @@

    Contributors

  • Sylvain LE GAL (https://www.twitter.com/legalsylvain)
  • -
    -

    Other credits

    -

    The module embed the Leaflet.js library.

    -
    -

    Maintainers

    +

    Maintainers

    This module is maintained by the OCA.

    -Odoo Community Association + +Odoo Community Association +

    OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use.