From 1d979cfc6ebcf79d794151420aca7fdccf37c3a8 Mon Sep 17 00:00:00 2001 From: Sylvain LE GAL Date: Wed, 31 Jul 2019 10:52:22 +0200 Subject: [PATCH] [WIP] Add pos_environment from v8.0 (grap / grap-odoo-incubator) repository --- pos_environment/README.rst | 117 ++++++++++++++++++ pos_environment/__init__.py | 2 + pos_environment/__openerp__.py | 27 ++++ pos_environment/i18n/fr.po | 27 ++++ pos_environment/models/__init__.py | 2 + pos_environment/models/pos_config.py | 38 ++++++ pos_environment/readme/CONFIGURE.rst | 23 ++++ pos_environment/readme/CONTRIBUTORS.rst | 1 + pos_environment/readme/DESCRIPTION.rst | 6 + pos_environment/readme/ROADMAP.rst | 10 ++ pos_environment/readme/USAGE.rst | 7 ++ .../static/description/receipt.png | Bin 0 -> 35994 bytes pos_environment/static/src/js/models.js | 29 +++++ .../static/src/xml/pos_environment.xml | 59 +++++++++ pos_environment/views/templates.xml | 16 +++ pos_environment/views/view_pos_config.xml | 20 +++ 16 files changed, 384 insertions(+) create mode 100644 pos_environment/README.rst create mode 100644 pos_environment/__init__.py create mode 100644 pos_environment/__openerp__.py create mode 100644 pos_environment/i18n/fr.po create mode 100644 pos_environment/models/__init__.py create mode 100644 pos_environment/models/pos_config.py create mode 100644 pos_environment/readme/CONFIGURE.rst create mode 100644 pos_environment/readme/CONTRIBUTORS.rst create mode 100644 pos_environment/readme/DESCRIPTION.rst create mode 100644 pos_environment/readme/ROADMAP.rst create mode 100644 pos_environment/readme/USAGE.rst create mode 100644 pos_environment/static/description/receipt.png create mode 100644 pos_environment/static/src/js/models.js create mode 100644 pos_environment/static/src/xml/pos_environment.xml create mode 100644 pos_environment/views/templates.xml create mode 100644 pos_environment/views/view_pos_config.xml diff --git a/pos_environment/README.rst b/pos_environment/README.rst new file mode 100644 index 0000000..e4911fb --- /dev/null +++ b/pos_environment/README.rst @@ -0,0 +1,117 @@ +========================================== +Point of Sale - Custom Bill by Environment +========================================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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-grap%2Fgrap--odoo--incubator-lightgray.png?logo=github + :target: https://github.com/grap/grap-odoo-incubator/tree/8.0/pos_environment + :alt: grap/grap-odoo-incubator + +|badge1| |badge2| |badge3| + +This module extends the Odoo point of sale module to allow administrator +to customize the bill printed by the point of sale, with a text depending +on your environment. (Development, , Pre Production, Production, etc...) + +This module is based on the mechanism introduced by the ``server_environment`` +module. + +**Table of contents** + +.. contents:: + :local: + +Configuration +============= + +* Open your module ``server_environment_files`` + +* In each environment folder, create a new file named ``pos_environment.conf`` + (for exemple) + +* In each file, write a section like this one, depending on your environment + +:: + + [pos_environment_header] + line_1 = =============================== + line_2 = TICKET EDITED ON A TEST + line_3 = ENVIRONMENT + line_4 = =============================== + + [pos_environment_footer] + line_1 = =============================== + line_2 = THIS TICKET HAS BEEN EDITED + line_3 = ON A TEST ENVIRONMENT + line_4 = ------------------------------- + line_5 = IT CAN NOT BE CONSIDERED + line_6 = AS A PROOF OF PURCHASE + line_7 = =============================== + +Usage +===== + +* Open Your Point of Sale + +* Realize a sale + +* The printed bill will display the custom message + +.. figure:: https://raw.githubusercontent.com/grap/grap-odoo-incubator/8.0/pos_environment/static/description/receipt.png + +Known issues / Roadmap +====================== + +* make this module working in a multi localization context (many languages), + inserting a pattern in the key of each lines. sample: + +:: + + [pos_environment_header] + line_1 = ================================ + line_2_en_US = TICKET EDITED ON A TEST ENV + line_2_fr_FR = TICKET EDITE SUR SERVEUR DE TEST + line_3 = ================================ + +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 smashing 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) + +Maintainers +~~~~~~~~~~~ + + + +This module is part of the `grap/grap-odoo-incubator `_ project on GitHub. + + +You are welcome to contribute. diff --git a/pos_environment/__init__.py b/pos_environment/__init__.py new file mode 100644 index 0000000..042e239 --- /dev/null +++ b/pos_environment/__init__.py @@ -0,0 +1,2 @@ +# coding: utf-8 +from . import models diff --git a/pos_environment/__openerp__.py b/pos_environment/__openerp__.py new file mode 100644 index 0000000..d648501 --- /dev/null +++ b/pos_environment/__openerp__.py @@ -0,0 +1,27 @@ +# coding: utf-8 +# Copyright (C) 2019 - 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': 'Point of Sale - Custom Bill by Environment', + 'summary': "Custom messages on the bill depending on the environment", + 'version': '8.0.1.0.0', + 'category': 'Point of Sale', + 'author': 'GRAP', + 'website': 'http://www.grap.coop', + 'license': 'AGPL-3', + 'depends': [ + 'point_of_sale', + 'server_environment', + ], + 'data': [ + 'views/templates.xml', + 'views/view_pos_config.xml', + ], + 'qweb': [ + 'static/src/xml/pos_environment.xml', + ], + 'images': [ + ], + 'installable': False, +} diff --git a/pos_environment/i18n/fr.po b/pos_environment/i18n/fr.po new file mode 100644 index 0000000..f4c7deb --- /dev/null +++ b/pos_environment/i18n/fr.po @@ -0,0 +1,27 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * pos_environment +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 8.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-02-07 14:53+0000\n" +"PO-Revision-Date: 2019-02-07 14:53+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: pos_environment +#: field:pos.config,receipt_environment_footer:0 +msgid "Receipt Environment Footer" +msgstr "Pied du ticket (selon environnement)" + +#. module: pos_environment +#: field:pos.config,receipt_environment_header:0 +msgid "Receipt Environment Header" +msgstr "En-tĂȘte du ticket (selon environnement)" + diff --git a/pos_environment/models/__init__.py b/pos_environment/models/__init__.py new file mode 100644 index 0000000..32f0091 --- /dev/null +++ b/pos_environment/models/__init__.py @@ -0,0 +1,2 @@ +# coding: utf-8 +from . import pos_config diff --git a/pos_environment/models/pos_config.py b/pos_environment/models/pos_config.py new file mode 100644 index 0000000..12a9639 --- /dev/null +++ b/pos_environment/models/pos_config.py @@ -0,0 +1,38 @@ +# coding: utf-8 +# Copyright (C) 2018 - 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). +from openerp import api, fields, models +from openerp.addons.server_environment import serv_config + + +class PosConfig(models.Model): + _inherit = 'pos.config' + + # Columns section + receipt_environment_header = fields.Text( + string='Receipt Environment Header', + compute='_compute_receipt_environment_header') + + receipt_environment_footer = fields.Text( + string='Receipt Environment Footer', + compute='_compute_receipt_environment_footer') + + @api.multi + def _compute_receipt_environment_header(self): + for config in self: + config.receipt_environment_header =\ + self._get_receipt_environment_part('header') + + @api.multi + def _compute_receipt_environment_footer(self): + for config in self: + config.receipt_environment_footer =\ + self._get_receipt_environment_part('footer') + + @api.model + def _get_receipt_environment_part(self, part): + section_name = 'pos_environment_%s' % part + if serv_config.has_section(section_name): + return '\n'.join( + [x[1] for x in serv_config.items(section_name)]) diff --git a/pos_environment/readme/CONFIGURE.rst b/pos_environment/readme/CONFIGURE.rst new file mode 100644 index 0000000..8eb1a46 --- /dev/null +++ b/pos_environment/readme/CONFIGURE.rst @@ -0,0 +1,23 @@ +* Open your module ``server_environment_files`` + +* In each environment folder, create a new file named ``pos_environment.conf`` + (for exemple) + +* In each file, write a section like this one, depending on your environment + +:: + + [pos_environment_header] + line_1 = =============================== + line_2 = TICKET EDITED ON A TEST + line_3 = ENVIRONMENT + line_4 = =============================== + + [pos_environment_footer] + line_1 = =============================== + line_2 = THIS TICKET HAS BEEN EDITED + line_3 = ON A TEST ENVIRONMENT + line_4 = ------------------------------- + line_5 = IT CAN NOT BE CONSIDERED + line_6 = AS A PROOF OF PURCHASE + line_7 = =============================== diff --git a/pos_environment/readme/CONTRIBUTORS.rst b/pos_environment/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000..e1525ce --- /dev/null +++ b/pos_environment/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Sylvain LE GAL (https://www.twitter.com/legalsylvain) diff --git a/pos_environment/readme/DESCRIPTION.rst b/pos_environment/readme/DESCRIPTION.rst new file mode 100644 index 0000000..5aacf04 --- /dev/null +++ b/pos_environment/readme/DESCRIPTION.rst @@ -0,0 +1,6 @@ +This module extends the Odoo point of sale module to allow administrator +to customize the bill printed by the point of sale, with a text depending +on your environment. (Development, , Pre Production, Production, etc...) + +This module is based on the mechanism introduced by the ``server_environment`` +module. diff --git a/pos_environment/readme/ROADMAP.rst b/pos_environment/readme/ROADMAP.rst new file mode 100644 index 0000000..9251cd5 --- /dev/null +++ b/pos_environment/readme/ROADMAP.rst @@ -0,0 +1,10 @@ +* make this module working in a multi localization context (many languages), + inserting a pattern in the key of each lines. sample: + +:: + + [pos_environment_header] + line_1 = ================================ + line_2_en_US = TICKET EDITED ON A TEST ENV + line_2_fr_FR = TICKET EDITE SUR SERVEUR DE TEST + line_3 = ================================ diff --git a/pos_environment/readme/USAGE.rst b/pos_environment/readme/USAGE.rst new file mode 100644 index 0000000..8f348e8 --- /dev/null +++ b/pos_environment/readme/USAGE.rst @@ -0,0 +1,7 @@ +* Open Your Point of Sale + +* Realize a sale + +* The printed bill will display the custom message + +.. figure:: ../static/description/receipt.png diff --git a/pos_environment/static/description/receipt.png b/pos_environment/static/description/receipt.png new file mode 100644 index 0000000000000000000000000000000000000000..f5222162800d90dbec773614ad2c50ed6874204d GIT binary patch literal 35994 zcmc$_WmH??wl+#B?xnbv7AaEPind5;af-XUyAxU{TA;XFDNx*s1_YN?XWZ|O@5jxbjFmTQt#`dL*L-9~tE(yy;?dxtp`j6ecrW)64ee1V8XCGX z4i@ScD5g6E^@ZUn^Fa#-^$EhUib5Szd&%p0X}a2Y`I>uJquIK+I$OW;wDhpHcJZ`x z^*VhFl0rj!hW0`3t(ITT@tT_53;VpYJ6Djv6M-T>Uz~t}tbwgy@q%x9m9j?`j9iPq z<)s$6ieq`Mnby=@^kCmyUhV*Y5bb={VHkN_9PY!Q80pdD*iazLzSOi-m+^{xhJS`a zNrCT`fVH*;hh3(<{ZNbvzo21Zrf%Rjr%~kPAX4B8_D04aVJn)A;lp{X-}9}ThpvFT z`cEV>QJQXJ;$wq2rsizWZ7gWtQ66AE*O%MeMp-?eT<@+zgpM^qZcE0H7l6^^nfAqt|E;f3T$s zOlqLEfNR@e5mg+fzVUmgG}80%N=*8;n>fIvWDjl1?)`))Q+Uhi{gUpe@f#T&z5-@6 z)IUR$(4K{pJXS;xC6OU`iHr7s*wE+g>BOM}cIrwPnPB5fbSVs zeDhpZd>gM{Yh5D~SEUh8O$|8!JJXW~`SapRuMv}Q=}o}(gLMKSPvY8$1p+D!okTuN zK0p_cJ;+kR^CFN|!XXUyJ0ErZVxby3BE8_5(=tVaL>eif1{L zK@>TuiD*X3ZUW$@2uIWW=~ORR$hwz*`YBR-1<xi0lp`8{t?-Miyq)}1_9=_EuP z=(Yd>I>0JdHS;7y%I1%Pvh|s0COw)c(Mr3Zsii-pc)*tit;WxiM?U^~v{GU)mK5|$ z?)k!MXaM^tbdJns<4lmjS97{?*=L8N8^WDI-j}*y5yp-cztfqGeAv45 z!=XEPEg@va&-<|Pi)M}ScKeQa4N@Dtz{o8aa=zp{E)7D~pAYu{<4h6PFz^llX${Uk zH4*B(yX+X~VKdD$u>|WTY&ZvbT_WZ;KzE(f6(LQh61mN%hY<0D>;VAaw)T8jq|_AI zc@9)#5Mcl{Pi5SliNxhOB719S5^SZM9!em^ry+22@Y;=(^F!yfUHknpWnAV#<^b4~ z-evNXHosG3CL`~z_Wa01=VHw^&Q!v0)ehMf3_S>p!v@_}p0Bmy2W{LUJ_mpRbI04K z0H`^*I}#)XjN1S?v>z^)#2!hTHlOaPr2E1Urj2kBIK1Nya%zk8(KZdf(w>BQ9_@?{ zNQyp28>jr^C-|eLQmiCz`z($U6=#>{aBG)WPP(&Rz~ELM(&nLnXK%}Ra-Cx49HsS z8IdP`<5~j&wjiF;Wg8e<4tXE$zzK!R%^AWY+qB$>cC023^UQx`^_y!Ny?9YOCxKt< zD>BrkKz&f>0Q^?8pUZswI%J%Rc$0mX{g;lq>R^VNQ?e3wL(8ov1?8Te;&%LmN6v3y zP9^Ar1cjwL`^0?Sc(iMcb$w@hpT#lmsB}JCTb8(c#B3E}f_7>L=0CIJg&LMRxY5GR zP0|r40&?n)^ua!nM-%N9UK*1%^SV_|Y)rQC741oxMmS`;R&Wp1)Cz)zwkCI@S$!wr z=Q*ID^ebJZlr<9q@|=%ZrS@MkzmP1y&0L?@ia6URSHzAqrNpi<=xuV4e6PW>$b zUtz1X0UiraT)HMej&wkcYQh}@icW+_x&A%QFT6xyP7*v%Lr8jp5x7HXb%~Rf8QGjau?IeyVgNe}t)YxZ-QT%d;2kO)2(U z6&1|MjQorj1&l6+TbR|Y7!}bN73VnGo;6kcvBwTcANTnxINf!0z{>iL5-TpJgG5)p z8=(^$liA#-BPB+>eB;STJZoU{b$(g(#_1{f0$>MnI*$NemHMuQK0OZpt(K(4Rx}1v zCH|hasLaSKEFE$fsWI3DDz=mN0|>=rlO7OnNle~FVO=q#p;k@lJ7a2eU>9_b?ghU4 z=Vc1}!SBt+Es8xkRzQ+XHHL6i zLTvR}nqrGD%i(X2_+PKQx^}+}~ zpuU@e1&Lan%hz}>Y#tY8e=ZlBT_OH``HXn?q3SfA7Eo{%U?15|y6av*E+Z(tIc;8# zU3H-tuRQ$+vLv?S;c2ye7Wi^EcJb*6xXV)mzV^@Hs!Q=@jP*{_Hr~LE2&8aSgHQ?v z)U+TtT>;J48&$BUXgQ?WoNB`f65Hpqn-k!Sj%?Nn71Eo0h^YKI|LdoHRp?aV>(}2V zPQe(1@rMV$f(EY~Wn0Qk&z{%Gvpi&EsC@~JZ4(PWddQlX8c2&edhHRYopSEK8>!>3 zGtuW21;Bg;>&KXRf~GZ6xq8I!wLFu|ac+Kl*qvF@8pvVC4 zu@+Ys;WEw)RJQ8Hl~`J;?Vt~setyz2KLV95d~ZN%rKGvMt6ddikY^QC~w){@H9o zce#alXyfQWTCZPA0=QA}V1KL3c=4Gw9xwU+mE%+}EQ?m(#@90$deU<=50Y#=?YXBP zS+TF**=29m98MAzdKXlcA9-TQMa4`-KuQpS6TkllfeW@AfZsCRvS!YDGUuNPN0wFw z&nLhBb!O$NustAJq?i^5nXjsv=gt<#9^A>(ka0jlw`TEOiTk)KY_2B-u*zAUeH2;9@>4u8RZXh!>oLlyKE^WqEzk zsD}2IFA-smPI-&dw|>n#z$(VC?^EtBo?1vN6}_ZEv<{A$%w~9|jC<<{#}tHC-Dk#2 z{n$ITU4S^g9;!bN!dIbY;hhd~`W*}laM<{AC7Vlnu&AcL;B_c`Yx`Z9w!?K}?Shv) z&Vq%MYeEWBevme2&-_QPo38lW;AM|sbgIGw*N)8egK|Pbt!B9bjxqWz_6O0?3`^ChH=N1gbeJt#l9zwusJ0T6Z~?i~?r z2~LDHZ&5ir&U9?Zt zmW@L0b{zR|BBhAS9>)mvdTM=f|*!0YOl~ax$7D4ey$Xu_MUiTO! zyEwQ{$A+(x>)eh3Ss5GD_P)Pfy<>9RAe37U3(!5N4w1+O-=tp4X z$U`R=r}|W3zIEKq*Bq6#x$nQ-@Fc#kPBMz)GYA@(x!laqpf9!2bgij5al0VTHjwI1 z<5vmtPPMv_-IZnV>SAY9r)TK)+;r1SzY_Q6LYL5s7Z7o(*C&FCBEHpSMeAd^{X|YP zyQ-XrJb!xuw(e;pQxm~cP=Lj3*#w=->gYaYM!ocx*po6x&Ua^(tePFdEh{QR=xodL zEM7SZ;jdYSe|^4`<9&&!x0f+9@^_aaH_;l*$P}DH z6AT;9)ZoY@fWa$eh%d}0HfVG_z{FHP-*lXWmKPZPG9o@&Abc!B6H{V#OQ@wq_66*S z6O-=N(ki7DHl$2qE24Dnb|m>|fPm1=%?Y#jwB%!XlStklWegC}PX_cCvRa@jy41MH z$0-8(SxjZhQo6Q+%s>E>9N@$Z=cha)%dzfHqDbCllcoxCF3B$Sl_zatR)3nV;|KQD z=-~NEZ_lwNB%jX<(pPd&2u7x;9yB2YMssLC2&P;wL`JwTjM>1nYw_%pXkT*>6_o$< z$!u#5t}xnn=F^xa`$?Z(@#(`rp7e_bMswBiBu!Z^>b*u;942lb-$!UytGT5mM=c!K zTJ&y=C*f5bY1Ja9q~#)m*@0}}q#Ye59H<9tx!T(n?V>4kPE|Z+=$wrvj zI=f6jd|cH>&#~3AZz?-(ago^ymsy|qv}|mfg_tcM^{EvmMjQ6`FB3IlFB`^-_K1#q z#5gNnb97XKD6gJp8r}6>VD$PGdSCPPov9y@Z18_@hFrPncqXxt4J4~wa7oMA9k+W@ zGllOT6HTIV7tkmx?D=<++VT|@y{5RejaH?t67h=~i}X*5s>_(x&KV;xmXG21>W zxGgW30>({|XOWU1BqI0GFAZ#znZt^6R)SJE@Obq7tWS6Oli zEEz&B9p24DCGFY81z4Flm%fapnj>}Ac|q52iIqtmY?6Te%bj)X8Y*mZx)uj2zdu`aqe@<5WtL*8oN@fB^7AZBz|s)9XQCAosb&8B=+OP26# zgv0#NdOwjAhVJ#r`vZR|2{%Uykv*fsGxFmzjapcO%7^@8=p;P-0$A z%6>%oL(fk@50=gRU8yh6<*cXD%kCYZ7tfpVyz~v2~<5TvwlCHHgj$ z`?@0+|8#@9^xsH`!G0g64^GyxxL~f`i?P|*~5f8*740k>qSqmUqLEDtk2CNTB~VH@5kN2VfV{uvm;0%T6Hmo zVKIs4JJ%x~8;_sK?z^n3T`vv%6LUYy^8Q2@Zr!65O%$#BMl^wQm0wfq63-yXqcO}p zOfU}J{H-UjX=+zqb&aeS)qMow`~rY~aV|FbO5e+F2j9z*M7> zv5!uv@*QI~$4@2&z=lT&0)8)zKn)8hvHnjqHx-(O**{Dsu7jEF;q6{QtM=B0pNIJ^t|)Jre= ziCWvxW3Z7d18tKICd?a#fW9IX`bxapy(n%>Lt8c7S0J0FVH*Z?Vzpvm?e(yY@6aCJ z*~D|=`+W;vzfVgYY<(82QX?eM7hQJbI{yao%P6h6&|BD{&U2V|s2jp5U<;>!rcB~|8>xrOx8!b&J4dFXsWkwo zegu4I^Q)fo-KF8EZD$pln3jiC43_KUJbQZfU~R;PET3s#o|~svt?SqsBGPHbXz&X_|LX{Ij%^DmQ` z=Z0TGJ2gwG{}ZsDh9ytyM9au`pV^Drq&{wVFSKos#rwZN?ydMWmMa?{e?4yp(e$fC zUt+uG?FGq&iTz=cfb3~p;5sH3z3ivIz|3wlby0finkPl5JRSX%Q80b$w0I z_Lv3lPBe0{-I*E&^};b#hcKSyd658{9EE;oqpgg^r&cc2ue+S9Pm-vEyH0kEfPyD==L69p>Z$#k=H~yX35r#`V5>3rtz67U5;9 ziTsq`>iaAvn(QPMeeUG>gSzV%lhGWHU*h6-(h%jb(w=fOS_o7)>o;u$)#4gpg(ea3y=_GD}o4hX-dUYhbACrC%8GE~t;TW)%^ue^T z-ISuWl+!9Ml56t54TJn2Sd}~L`yN>!af6`p+1b42oUGfb894U&L<;R3xPQ;7wxVND z(eZuFN3M?|13Xk)uk%mv`F9?>Ey7nV{8snZg_%qQZqDA;a#v^7YzQb0IWzDOi|(Mq zN>6RvM~+=wJfeYu2~>sptgyD`PD*l*3eHMOgY>an(oALC)7$rs3W0MM6%8IAgpWU@ z?M|%RiKjHrSdEUa`*P_2E*Xfb8Qf%Zrb;kj4iwyw$z03j?_KY0AducHV+_-FmQuEZ z)Yt9sGDto6_)!tI4wv$e-#yFWZ_VXEXl$J8D;CR@%}M&0hiS2QX}y_1>&xD26o1?j z&>2FkNxWAk71xmA4c2kuA}C33zg<>iBC2I~^Eo|?{U}Ry4GXE9vR-O< z#`iRL^FZ-ye#g|b6TYrleDN@NQ|tw)b>~C);^gm_F%f{1^XN!CNlgt3qAe~Sm%`0I zG}*31Y>oc~s>)p>w^S|-*usEXod}<%FJF$f?$DfQwSgc|&|v+~R&Iv-Hix@$kJ>7l zn2^?Ai)c;O8mF@%D?K`wvH4IpuFAF$#LZw`ox`8sjTOZhlv@;6*#swzL?}6fDgJ}7 zIw~8GO#H7xM{{>wnV!$h4K7pPt2Q{AI^WVNcg}~&>=j{{B5n|)*7eN+OJ=F16nL+K z70&YX=eIZ>Qk8V>xuyypo^ZdJwGgzQyGtWvYF3CJO=`RHd57|&t4h{BNt44@RE;T} zr!2GQ5v-Xs)Q7&^NBW)h;}=^TyDG(9tq1pCNQ~D`nVt=vNC;UqU+iYPxmd7ijwFfO zNy!IpWReG0a4Ri9jVhY)qQx`6}qIyI5{*jj;#!!_!|u zJV%r=US87q7){Faq#rJt;wy9tg~_(Ndk8EeTMgT`p**FQTbIiiFCKmxYgH!yjK2If?5Ct8zV#_-G9}H0P)^ z+l@`hb+_PbpbE`ZIE%s+|6|Gh zgyrYeJjlmBd;1VSMhNqZSj-JQ1tqHiNEK98wz0Q_c7*Hozb*q2d+ zVjcGD9Cp3X2?Gwm@EJuyd~efCJ6HT}hefJDovsgv1~nSc{ROO7L_`YKF9W8`hZkPm zFw*41x7G$=fSbso!w}>_@4(m?Fm5paq59nTND>5th{T=JI(OdvsN|N3M+D6Al zhW|sw03%He4G7V%3|>Q>bsh{J9T>zv6_S#iW*@(}k%pbjwgFad_q$Q;H`2}zCqUG> zaFmoFm1p0M^ex@+oxWJRZ@xNom2w(G{SeonGOC*xhjN^70OkFSPUiup;kf?=Qy^_!{F!pjYK8 z%~5MGM|=#M;NYye)SZqLQllty5@b}(xCfQi`0x$e6QRS+AcE*BOX(XRI0f83sXJqd zr@m>(2>7O9Y%3@+W>Nw{cl}GtvU+4lyn{YvkbF%Y<3iOktuBb!>ss*r`^zaD*JZu_-j{K^@))7mng&T|e$hkkCf&SlJ!J zU!*EoZHhCUjq2`pG*^Q}3TsDW&t(25KB@7CAV-|S(jWw0jK~y=_&y61{un0i&oyfC zN*@ClVQDk8VmZ$AHS0?iVgAtPgWp1;Ed})e&)8?rq4H6-7&SBTNF@QXt{5T?f*OAVsqW$;ZDPA|X)HlD zbC9XnrE9Ea&5V6sC_ZdqnKg0fY1FHy&Y0GYfthya+bi7VpoKdImlG(th1)8EWXcT< zAUPOY1Y>*UqbWZ7P$Y=0IO0@OZLX6Q#!}`y9TVKG%$r@PiZ^hY8gf$+U59HM(va9hOo%40@s#xqi zkydI|7nGg>zc@}gl$-==FU3QiVZ>)^;CW!gWILqizD8mrjO4qnZx&IT zp;W+1x%z3!DM(2QS$zbW4nh(&5iYZ=_|Udp^HkYV|3Y|fi8sktoyeS$rijl0c2EyZ z#mmq551l)c7^U3Hsr_dK{Ez_)4SS_N;QfX0PXoB;!Z?Xc`}GMIny7X1u}#*c4^hKv zr#NRlg)wVzzDut3U_S(8&pJt=JJjit%!cv@>2P-!r4m@nE7Y7OhFnDTos?n6 zot%f|Nj92Ztl=}Aw2BX5YFP+qcS(arDortE!auW&#Dtsx>HmVImh@G3H?2mnTiJx@hv%7QtO@o+H+AqmR?8W}~ z&1!m(K;8~RSnyaiv%WD-!B>fAiONaJO^}B`J0#-%sgBa4G@WGTf< zy67FDoP(do4_`=vfys_&<+h&}4xkGDfM&jL_&?i$;e<^D%E4m!Z0;KJ4Q9*#W0rtta z*zCVrttker7`T|^kS8a?>T_`bheSXA?#Gf!&odpxd*<94Pa%R|dV7y;I&U{UFZy+} z@3ss_^M@!T1iu1p8dG~WgV5mH2}d39wTm@hJCJtqM_++eckY|#WqbNugC!pmE5=a7 zYAg2Sqy4WcaokKiO6v$e%nJ2M~!b7 zb$5HaWY&)UaVfJ9{diq>RP8UpcWNTw%OoBXKB{U~|6g_*%@v~S)Zb@1lba10jBKPr z*H-{{K{p%-?1W4;R=6h44v%skPIcwCyqt~sy_jtb;t~=s;x~L~K1!V2>HJHR7S~rb)JMSvC zFP=+gG8dR(UJkxEnHa6OKX0$!BR6&D&oEiuu%};Jskx$})ArX>#+hywCqxsG;iJme z3Iyi;b+#Oj>R|^kU#DGO8jODLoi1zyi+B4ZVrK!FjY-4j?M@+%POVL}3jYf(e zu3kyQ??aQ(+_JtG21@MPn)ntfwx%fE9T{`0e)~(x`N>|2V=(`nga2LUkw3|CULD?w zQ`TGqX4YFb{-{D3f0P@ipu;U{diYu1HJkARw)IlS|@`6VCy>>;HPt$wCH|~5^7*vu@fl8&2(`CR_ zMGc73hh0Hfw~vN~NmMw({nqMZzm))S5k#%nfOQ3kXZaM-K+Nl{zOQ9w`mpL|8RpoR%-Ys`1#XJ9;t!m? zWQvH0N45$U?_GP(R)vgOacXw?w7R*!34uI`J$D{aHKg=jMz}zL5m&yN|KZm8yoJ9t zZQVqC^K(w(U=KHMuM&*O!OFwG_k(A@o#HQG(Y`m>KZHNlYsL7>8j{m@bSm5rzaRzb zxL(Bu%1@x3P_I#1j9{ymbE+kz5BqFk8nwUm~Bur|7_L)_4g3Dug(`L{` zUQvf{s@ipQR1Sfqn(H<@_Mf_XMGLQ)*|WM=G@ss1*yk_H!rBhirO~*h3!`x*y5vO1 zcCq>LtkF?SlyNgC9RWPN7q73cteV3a1j|XFX=2Q1q%G8c?UxxZ@}?vc{z&$2@7(k{ zswIWRSN(e)JD-r_W&7eBthCRjJQNU;st>{o$H7!eA@8`k@9$u;MRU#ihw$Y4ZUqbL z7g}QLR5a7`()!T`Hl8WQzKp9iFw|pC_BI!7CszW_aJ=4s50Q!g?wjOhsLnqi>lfpX zcWs`^^n8HZ(XbTTAV7B{b3fVqS5O*UX~Bb<+pB7#Q(sKVa+*-WH6U+CBqirjyLryV zqq)uV1ZIpt{}o`$|)xcE1r8qCWxk zuh;+FR}^!!4SMpQwy&7!Ep>}6TN3d}J!Jy5zY`{VF?)lRGL$LSt%niA$Nz;oC|xR5 zRACU|{?sI++bE=`=wsBu`*3#>S6W74ur@L=!6&==&J&zd|CoK-&zVptV zKI09fPIf$^DKJF-%)_;)V5}#p9cE6u^_NiTZY$t$uNkK9qJ1~xRa>s-C2DZh+4~Um z?f2meo&23M`7pMG5Fy57&j!kbMAO#9;CWZ=Izf7P8)Omjvs@LLb)=Si?8I7kX*^2K6{Tgo9(>ng?-A7I>9;;6-icYOhH1>lclUSrh3j zb}nz;uLh!?xrFb5YKQ*97`svk-4lwT_(7+^m%nYjq2Asi0pr9;Y9VC)^qS^ppnnV` za{I3@L9~hFbHk^@(kN?a`64n ziB(SP=@slhOasK%RsS>%Y_}@Ro}4|F35YYnUdrj&%aC;ypg!A#-kse&D68JH141VD z0-ri1TLq=AP6yXf*svx*=(}g!-?}pnlT0}dJ_nM%(DtY;2gvE0SSbi(gwQ#!jg&pf z0F13dG0yXy3lGdJc^gT(32g^rgpiLZJ}2n;rwt%Oe)y+2THl&+`&zs-#O11O6ZDZ3 z-*mZR{NZ1p@+E-&^2vI%e5U9!&}#*eZ2}NsDEY2YDfhX5skC6bfA^Q`sXkx++QOenWd&yI|D zWovJSZLZ@PTC|O1sXl2uoFu1n@?_U+XpbZ|wkzk@nPPf23{7c~ObR)Hwr41tQE{*D z>M%{MQ%NdFx8r?)q^AeA10+e2ybPEH@W~d_6>~~HQKy!z;?XG}C89T*Dna!$_c_z2)C12M$VyL)7dEC($U@6MwUtB?MO_kRqU zOfL>%SD0BZgW~A{cnx#K9QtJ#^7{YN9nnXWd zBdkBscz16%={<)1tk3%!+Ouj?&isdKpCeP3{N%Ecth=+haiMx!kBl-u*+-Q|j&y6n z!;D`^=niaeTrIV^DiyzcWK!}d3gu&XQ>xh+a-`gefUaN@e96R3(No)d530?~p;mBY z%tyV~@ZAHM(V}RlWIN$RcW2tJQK6|XOtDs03k6Ak)W8AbR^Sggx7Z0$k{>kirCG(M z+qMH<-Q5ed&pf#t6S!EXmXR$Tt!aYGtWvaMp}MJdcP+l%tJ@KdE;N4uBS;#0&NSj%tHN22sW7?0S@}xzvK3{1ZH8NKys_hxeK?y~*I$Q$Q%w@yUJnipKg>$&Wkt@|s1{I0)$M24{%499YJMarW+RxERR+4Fr>!08%(8mgwo>&_ueJ{EA7ik68Qj9 zLsvo>VWLFjK#$%;gsO6$CQVRGmh8>_Pf1*kDq+HwgH1`|KQCgGgX;5N!^t{|&sLpm-UEPLhu*q-K1 zl1eWB*q^e)_JGoO5y9cvp(&OHui+iwb-tpROXkkbpfYW`lK~IM3Kvhch1l9gz>6zR zkzXcESVLT>D9HpE>(k9uAoQi z>q>C1LsKR>k()m>ZwM=}vNpv+hX2idv*`YuZPe;jBD3pJivziX>{|w|G2UIBgpq}( zj>n5M)draFcB8nl0#z|~XsAC`k=fYcx|)Yo2Bsv2-D|Y|R~k3?VdTGiX}Z+|^*c@X zE=}2d;!}(12cBwtu9`~|v6NsRuWj3R?VPGZUh5}Rf2*3mwIod2Yj}B^;aE`v+gm7W zkG!|fE35iTPuz>#i+)zy3MC0{%|=sSVoI(2E=H01F|ph>&FHVtU!`~I%b1)WL>f>A$)nxf%E+U zbM91|Ht}S!A=4;hJGN&}q2ItQdagi)8zI0yJIQ5IlRo4US5IbWJ*>?N?|v~~&y>b? znU@AKKzeHqmMyU@82E~Y6dNM%GK@d)cL00TnnPqP{I|5Ws$B9-n=f3h9%~I-k8t(t z=+BNi4KSQb2&e`rdPw3;CjeUswP<@_$xlK^shIwV6r>cnP0<{$0lH%ksRWYWd0t?R zn|auzD6;m3IJ&PDS?Kn>{l|wR>&Hc`?qp3n0KC>%~W>oC7Q}=)&wj zm4wdO7lo7TwPG)zy%CYH+i@*JcQGE+eqC_bwfRj-hg``O^z5fOhOIu{#Fm!wN42MY z`GM~zU~m6r5bXmL^O=*s5cE#Pa~Y3D9NoL1;_;2(p^6rxIDHMHYhR2&TrD>O;v19(KP1g7-;*L!PrH-=tEHMK!SvxwE%6b>8P_b?O zRWr|Uh_H%S@WqA=2=0v!H%nLX$UdqpZBT$UtoVr7qV*Fpj2DNBd3$}Gwzu%K9OpBi zGZPb=groVoh0s9F-q)nLDj08zCo`<(tt+GYz& zbKZ{a{sl;04}*3SIOyzqxbs{YWf4~iy2PzrVjV*T=**WQy+7K^5}Xn{c;#T*e2%SS9Kn>4rX8Sp~?y zMqtB|vLm_@t}>rwKNdz~usACB=XmElp5wJn-VbxZq1wBzI}d`RO5NbtA=gDjYqkRpJ87cXk7Rq?s*2p`NIEKAL$+=htRxYWER^PRhJ{BehV z8{bJu<6`W%PBt~Lv|(06v-`FM`YHgHNuXnv^rq$}bk$2*kEOnhAkCHvXlIedTC&uh zea^jlgi=XcSm#Ksn<-^6OH+334a{wr!hO_T;>}GPA4(Qkv;A?t5;1~yj~mY0m2cnv zgsKq7e_+KfWCxsLKM`3a_9=ejQWMkjDA0xzjjVk3bpNFSDz6FaD$~#5BudeE^b&-7Ep@>5p*&e>j81YFQVTlI@$k!2Pd8k55|CY|XLY))o1i_x9)H>; zz1;&%<}Fl@Qh(WJ#q8Ib!n^S1?{(kM_GrUDQ${nVx~1sn<2A_}&$$~b+Ig@bqxX@6dg+kHu&ZqMTPWnC3nk!P(Ocq+%sDFNG@n_(XvJEqaNa`4{YjE^G_qJ?r4QqF} zYpfrVG-h&?u=1bxz3?rMFt+_C~+Ce&3z=QaC5iIJK9W*u9Ej^J^yk>#)z|Y>|~d9H}kal-#qP$zA8Hl zgCi_UwQTxX&|Jy)Gr?am!!W|$e(omeenP)0Z5}ixdTzp*U%XFkd-=WNBJN7lH^40^ zv4eTI*Vf&wmctjCGn$)&a@J#vmWdT57x^6q{>XRw7EEG$Fc#N|vYXObE%|kRDfvn& zn))ymC6~z~&2-%$81sEIKQPGRV=l_Vl0ceWCNbymY0>ELcBc!SktgoTug|G2`_-0z z;O17*MOgMxY4tC@-6D!fQodagFE58#$r-t#LPHS6+2eogS69SBI*!EcGQPR-Wg86&*IW^3A%pR4DXf{Is4Q_BkcVWMDF7}6fcG+9KOn?KAG;MgdMh`C zLtJyW4hGz}8|wRt{2v;)FAkoQkIG!BLfz~SZ`c2D-ytBsg@@-T$sEVqMgA#T$6uW1 zn`JVCk3?tqD2ONDw9T5T4(f4tjOR4NuS|8_6MD)4Sac>mwM zDL6P0hm4Bjpt)*8!I}p})Kio*e=8!V1#LQr4Cda6r28eb9)7uXm=LM^x&*xeNA(N*wGU)2Rs;^DbiYClgtLBS!n_d*1c^8|UFW1o)0LU;Bnbo|&GrG`; z#o3p%obnuWSZLV+aYe&#e`?nmR|TD~UCbG-Fq8VD*I9qB%57@wQ2w=uC^2U(axcjx zt7B8sgZ5=Yn|;nCcYAeHl&r0u$V3H#uOmbM!JHV~oeiz@jBVF-ycneXd?e4`dJ!FT z{?~#V*cng}(@)YXTSebyowU3xF4Pzmaq>|kxIu0&Vu*!wa1xVXIS3t90qhO4MaxQW zR%nojg{S-|DS9nT^&~BAAigGo6RUTQIf3HUp%3|>xUARmf*8|&Qq6jX1#9hCLqAIs z0p_R=_=doAkc zh@e=raB&nqK0bu92=a7^AZuDokUz|2+RISV=c09TyME8d2waRoJHXUD`_3Z2T8Ycl z5PqvMfv{8~w?=|6g+on}&z`-Yh#H}lk3q7*bTp$0a9;S@JeU1sa2DUof zb-4G3IJhgmZsNd7tV`Bqf&AuPI;PZ0WfY(x+C24Z9>ILYm7QVp>El`$ASkDc<*=n( zoC@9Jr7I8Ajztz1GlnNhTCsNJx*%11@wufz!ONGC$mNQk+j{z{^_HJfg9kjG`^G)h zOuv)3dd*S_6F&|A_d;0THf*o zi;5?I@LdZLL8Ucp)vIceIp~wRc}e%}%CM8JB~wd(>)6BE^v!@g+q%-6yE|`<_4ubs zR%H%Y48?uBGlY1)wUe!30%+uGQD?jicE!F#d^vj0Q(p;C*uPuKvMx$cC4GHEGRt}s z^q7s5jpBDVbs+*uK0mHO@fh-Cw!3^*eRaH$V6f@!OtpylN-LD`vLT2EN|-a)yVCGv zzyP4%O8)(TYsc&d+O-#J;fn`42CEUY`2%cl&NyCBG&NfaeMX2E3cuw6Y7)zNr5W1*>V79Q z7Uq^l+$pLrY}Hbh5vWzN+LB8esGV!BmLO@CI#j~1m&fZf-G|ZDe->2(6;Kn|KH))M z`I{t3NGLB%<*?Yg!k;7vd)IRO$$!yC=EN}mzxJ`_qSH<)qbEF-llViHB(Y4jd#-p> zv}xj<QHY4YAm|X3mjh88_C-B9mq@1?H=lKW62i9}Jyt?Ck z5v?P;%RI-F72{u(-?3UkCJw(P4(kC09BizG=Ox34^fRMVUYDM%8!CRp^t}E8xdtdT zZKnaRV4;PEYIB-usalgYhh?RCgJ@2NUtW!{dYOb7{Gwqkaj+C}AQQ$D?e_ngto2G_ z(qZv?%O&5PQqi+d4=a?e`=y(?{$d!>p{laU3lj&~2lN-}jeIT@CrLvEA4G{LDnrre&%q=K)UoB`Ck z^OZF1dDXTKaQB5wWV_64&Gfxv`qa5Xa0e*KM`9d1GA}Rhak1KJBvvvpO zg2sIuBHvwNegNS`vc?|{U>0CTV>LKc?YPO{Vc$7dPVWuAh`xRgyu+IPBl?2Yahuq3 z>?dZ7L%2WKDcIF1QQkN0cmglK@)Muf2Z@m0l+*M1o=(&pLJ2&-DqKE_pB33!LEDuDc@SWg4K zGm7+u5dY*+d1J#jo+dQ$Fy@^K2-`Zu%T7(k!UVpPGVK)+3#xbezleLwsJMc4TeR^c zxDzyl1Pj64U4jP>L4&(%L!-eV!Ciwp1c%1mJ-E9|1C90T?0xsU=j?Ody>E&j!|@i}AKsa>n^U2gLpL5@Fj68K z@j&bNHp$0{vyr#njR_fY8o%6xn8s3>s}e+YjGz}pO{-I6jZ693hbRnoIg*cfAqge6 zPR+Q~GU}o`*6bbqGEARs!ktmtgNqF%k#v8B;WVF{XmndA{~`v51W=Iqn%WLfDlz;b3PF6vl)iRzmVd#GF zeo5x$;>Ox}#J2dZATb&H$ler&wy5e~9!0_VUh;fO0=hJwb~?SrAj3mdxCBl4q;O&N zez1RuKh<>e)flUYZ-^$)HprvP z2le<xjn*jn& zerK?VwwSe&N_Fy$#4TvNAmy*njQd;x$XVc7dFTDPo@|$_YDlMM7f0GBMA12Z`yo4~*2vQd+NE z?a`4`fRdVo9grs(a6&b4ZMGy;17-iH=gDcEdZC@`qyF{3k#xrd{0|P@ z|7Wk5|Gn)@k&F=CImBi}8ol?*WAD9CChPOvTKLgQmZ0v73*SRsK-H1y%@CJDZxrqe zylXe@j5L(bS@EII^m2Eqnq}N*DFh3t61AG&=$~m~V`{U-1;1#vDHMP0R{#FuyNq4B z?otKef+b0hbSv?E<%t@7Ye6wkl%AA&y=jf_?gvyC!oK4aoVxX%mH*Rurs=V?L8{+~ zad>copsSROJJtX*%a28#vmX*@XeHIdo6C%*51GNOxA%;lDN;nl2CSCL&P(DLOlkM0 zZ_z(^TG6Ylm|0Ty*3Aa$8GYL!Oc_5)7g0Rvb|unsv%rFqIDIO6Z=l*L54j||tUP1> zsX%C9g{q$~eL72&@Gz&Lx8F@68uhh6{0(@>MHJ<&WEa#?9H>twNu1BzZNOBL^|hai#2ls1)rS&C9NDIBW{T>-P9O9 zb-pY9mu5--$3v;)lhDC(hpP~E6k zy@9mhjy+;co{u@3-4xer;7z21VK{MDK-vkyVHQXPoe|7pGA&-t$5gz)jUwq6lepsG zdfmfBSd^jL<7lJ889#hPX;-^KZe+F03x1fu=qnWGy!6Bp(4kUk6O+cktg8NqLbINu zYQ1WN2KW}PEb@RbSfu_e{&o0&o}sSsCU+gI1HCwvwhPqy%Tz7tNxpx#wV2L$vH zrPo!sl-gx_8;Ie^gr>gp3B`_!EZGa^wrT0(tnE4*HmmKbpaIy@2T&XPzD?to5mHIG z)vP1%MBe9Tc>n(VJaZ3?`TRh6YcA(wIx&8q4!W36h)ZV|{;E+Ms%Clg^hoVb4Np?^ z%^WfK0xJK5H&}&r!`rm;&bn!1>~w;P7gYKsd)Y>H+& zKr*yEff2K7pS+=TY41>N*hcS5f2ZX|K~23PzWh83=j@;8Zr2>iY1gk&G^yO?wsvOt zYVCI&w*?S3ce(se$Z-+xlt|A;SETS}TTbe5Hfd>lwLTC;?lCDnuz=61NNC2_{^9S52a80zX=xXy247 zcv&VGKV26$$nhC;U1CzLp<1GTZy8(l-FoMlm9d#m##Hzz$770XxS~3aAxGvd$sW<9 z3-JtA(W0N;UX_~@Xg%#sF7d)*aYor%_78?l(x}Zd6QA0!ur%u1!SN}kxCOrb^@<(5 zmN8#unI^}1!eEc~lwMBVIo>Od=Ta8$Ltp7Gqpl6s4TqrfDy+;H5(+-sDT=PrtV*iG zLGETxUL>+gWjg#^dW#Zs>=DMF$a8kI$6PurdZ0HghJD*kobx3bp!skZ*O z-+X^g+g58j3ulO67{kmAfjw^wDuc)a$<$^eY?N<7@`%fNz)NqM_fooKo;c&4RZT zc8|B#nMBg54zgn*90|#rv!7yP8eBPtdkE8wooN5IT6a!&S2l82*ifkkLVh4!ti$&@-U~PU710%2yAg@Ei=kA zRXaSoP-d$ac+pGzIOPtWzPR+k{403!+N(eil|~}`?;Yyep6s&Cf>*>7i2OFYY>{80 zRCxR6iWwceZxRhiNWQ3-X9)60N(mu|Kuf-7-Kc^MdFbm^uGv0g90CDmDH%YN;hnBt z+lBz;qo++0OuLGdQ0^76BBkgZY93ja>7t@9HQfi7$%de44|`_Pqa z-$WRJS~5n5fTzCdoBTT({y*KkS!Go^SZu_{+a@**z70^0{VRm8xn5zyn6V4YlgY^) zNZP#w=tqQQn&<|PA@69C^ygTI%L=FBnJBbM#fB+%7mf*N?Co+$;gLWYv6VI;wX^3~ zkPUWlj@dARHsK~5z+QTR;q~}(bcB1hAlSA?798p-Ox5W~Z6XYy_8MiZb>FACe{57O zsBTakbgGI#`_pOo5Ygs#dV=wmFdd`86#*o$#e<&@7q$}sq1ZN z)ce->K0sfP7fKryN^v#~9bzXXJFu4#E1^3GW_29e;F#XME_O+Exp&$b9|Qu1%ZN-^ z-%xuM=;WPV7!?`L*R&2XDvU}`L?32wP5;(yAAVdLLF>Rp+kqc%Qk?R`rVA4TWN-n| zA$o3A0? zyVTea`Ln%VVzpTMdRD(}w-rVZ-9^ILr2g}fTneGItIz7^#)3|lK1DBglVHJl+uRvD zte=~zW9tO~zH1(}wk?zCnmG2!IGYD6gNf;yn&nSM*K-v~qeF7YGAXFW(O6wZfq>C1 zC;&bc5a)w00tpnGYUXUOUZ&d+#%v^*Ba2_h{xjlbRHR8YT!cqbn??K;H`WaX@Qy0) zA@Ppb#}1kdn7o=PtGH?W5c3u=Gi+M6u^zmUZeM5=RG4D$=_-$Egbnz+cS?Haom_w3 zOflt3)ov3Mu-eE?_U`!{e_s+TYy6l9uYWF0M;o?y`$zJ{d;;+>-OVAf-JB zJ~KM7Q=dkr>9g6qMpt<$=q)CgVGP|83`Zw#mE0VU*~7OGpb|y9!u>}JR>_gz0C8xD zVGmx<(eOKwv0Qpm{}f_4Cx(c>8Tx45;41@Nlio$z#~ij7F4Z8!2?f)n`- zg#)mb`KkQ>(#*Q6qx%=z4}@~+_YBe?O9c(@uMl3q4JL5^slk!?j~bl+r#*JYmBH}^J(uy3#F`mH`QB=I@{N|hk8 z)Q53^H>hbEENV>gycUc5(tZ>B^!`|Vob}l53wO&#E>@c+f{*eeuUZxmE01XRQFAOJ zL)#n9hOg@|>IaRA2lSi5!=g9P@xqZWZgRj6b7zk?_AGAA4o8)+)U)NBn1eb}spmTb z7@F_pbQb*c91puDhGov9!G02ngiP~49~aKCti$Yn7=UjPiq&MFzD>cBBF>^cT2jwZ z04G``VUMWo7i8_7m7u~QsI{mEH*Hc|`9m+={&5IlGt{1;fZtCCF#N2uidBf)B zmqI??$m}V9 z4?K{j8aAY=X}S!L?fS;Y?IvvS-_BV1Hz?zaPvuIjASW5~aYcRJHpA0kT# zTg;9t-n)RFm?ZM5dX=1$QzVZ!^+FD*1=*Y`!**IAc7n+DWCT2Oe;6qzY!JdDu*KCz zdi$9b3jYke*ZEVjkv>LK4|zGAvZX4Xu?@aOQZHb0 z^n%!`l~Q&#gdE&?ozgxr1+HXYdlG8Vi|ykI2>>4vI)qI)ps^>rILZb3IFJ_B51#e) z&wjy+Nx*wEW77!($~rd3^o& zWktTb*IAFDU5lv03<=OX`cDUh)+iAh=5a3kd-srg?eEgjJ@$6z??qix&h%ahR!pvK zhFsCCh?KU5$WQ^SQn>2dXTp4&B?TRvLNP?dBzEGGJf{}ui{q-bHI&yqoPxWNxK+-9 zoI?Xqm~NDP!cWw=8bSi+lq}Cs+Sy5h)7iR#@rS0R`zMupsZqq&S8Jly~Y?5_6#8H3bJ4?OkQix4C;e>Imf(z@P zHa(Wuh2osM%yUlm$fem$SGPD|c|>WEZ<5%Rp@*vqr%QLo*{#9dQL|+!ddve>hhXkp zkUd(IHRTTv*6(0UZ^c7y;;if?EUZ_DqxhGZOj?Cs=~eiPR7-iP$zVK)K217Z;7cHM4aT!Q{vK24=~xk6T14;^ zFi~I-o!jMlb-Kvwz%928IYiMUnx`-AmXwwde0jLfjFOI2KkxQS<_FG+w&_&Fhhtpo zY7#n+9mW$s;KqwW*Ph`R_lh!b-8q}Cgff(gD+*!e>h;Z+ZlDOI@R9%4YieN;B~zoc zlP&@peD}6oFJ#jR@g9-jks;L4bLUOvW&1cdIq~dTgSG1QM2zuBY|WkOEy}}K7n=Q3rJ}0tU->RTySGDsi!`r7R(YZG*gS@ zVG1HrZxlu$izkE*Zp&mR7V1?V?z&L|U9P}lVjhiW04ZfRD1UT`=NEuf0t`TaS-O8F zjL{9rQvV~+>M`~w#I)q&Imszmxbu?dP2$i*qLPJRsM8N4pLP-a4ud_%HH2)un}-HwWQ>8G3}g%R-5aFbByGSud;K=`es{jTEy?; zlD5;<%&r?gU%t_96(L2La|cVl&g{}-sRcC=e?K+v0o_`ErQwz;x(m-pFip;Uw>e!^ zg2J9AK#nN|<#ZZNaE}?U^-jolopzkczl1m?C=nE8XWe&L)%e3k3U;cVmzV=%1 z5&+nz83En2+|B7%*WFxhBZPM~hqY3^%rsnj#xJ;#Z@s_g1ccNb3dxCvG2w&b} z0dual(xb`svYK7ef_=uc^K5S=m0*>-m@0+d4oO+YASigDO2q}62lAqB6ji1mPts(yvLUjRVg<@z%XERM%-SXLkpE;Tcc2B=+S5TO;nYBYo&)pQZH(%!@=7ye`NrsmYYhqf=8LyB+U^BdZKNqsRosD5I|BjbpFolT;B(~|hjk-B&9BSkm*4&>b+zIt)B`von3%zaQ~T~ZK{zowRHuNy$BW4VP1ztQvbeJ;k_EzV$yIZyhtoBguKNb)+dm^BPqp2=TAAAmgL`Qd*Q_6t6EJEBWRz@RzKs7D7r^f0xRDJis1Uku zlsSs5#OQ9vk}L|Doq#GKhEQC(KuGen!{jtQ}C!+ z>tBrKnAH-fx`Il11(+6oZg+kv*`uciuYc@>n~qjgXmAGeJn>tCfX!Q`Ho}A2F;4j6 zg8KHb*M7JiMSBcfw2k$>UCZwi7;zPtV_AR4#SqD9bf8!Z4(a+ajJdce= z^V0v?U#*%@`#`8T@5mKxv3S1wGjO42#?^(;A$n=Hd;T3@kUN`HG?Ff;jgKHRMO z@~8+&GMU8c4XX+?8P_wWm6Z`$b_}lg|3&lOSLx8!Iy;<}G>@Gg^6&Ir4E-~cc+$MK zSB(15J9L2==p$Qq&m*RTgxHnso@d-oISp$FrTPWQOC}t;9%@-_ zwm$o)CAg98hGsOqQ~d%K{MsZ6BYn|nL6QF%o^#*ty4UZ1*LE(%v=U{NYS@#k=(2q8 zE6^h4Y#&wUI#D&*ebxFR-TsU%S)pe^TgRBWGH-zvxj?SJUm)L#&zuoe`KgIjt88smJqEh4iZOQk` z0}TI$mALW8!%}?u^yMBuKy?>yO zYn|)rm`~pu8r2nL=IyaVQcs)Ct9~b`pZrpU)tlO_fWzU9$ooedEZ{j79uXhRn2HT; z3hvKeOmDD!BxPbM3(35f;+aC6F4h|d>z1xVR(%D`qQq%q4k)@x5*d<)w_AegpPM(Tg>v}ay(n;iLUqU8)nOR53+rQ)X zUE`yQUH$)!4&5HTpQZUL*cUSU46GCH^cah<6mj>$+x-{j6GhQZKl2y#S#xCR{6{Zr zEjlfCv+h-*NXGGB;)T7IzUS=&t|9rkHp(;pG^w3Ci%qYgFTg7^`5@%!c{lW|6GFhv zv(S2-^f9wlYl1#*sqMFIi?m|{@G&#URhByKz4v9((#OwD6CsTaJH(q6BgUy8t<#|? z@X8e}W6yT}LkU!t|4t$}Q@w9G*>j2~Yg_g8_VP&I2;@ANb`P#%BYWc0ZHEZJ3yDNz zFfZR9weJe7L6ye2?WpW7TPmNGBRv8vVJu%2Y>sOh&*}Cjaebk>LQ5uS(9*}DO0Oc* z=a*!#aTa{ai%WE#oyoqs2lMCG2cUcVNnhLKoc6pN%YM)h2s%vC{^$88TRGr7vXurPoYmqCsd& z>4gl;BM|gJtnqvuGtR7DQ%Bv`ezY@Md_xQipAos2cm-Qyg{@D$uX-*O^KGi>6uB=1 zNuGjW&VsO$v-1m3IfUuS;{h}>boRtiBGEo(5AWaWc&U%)IFTJ? z*tWrW<#YGiR{JY5^SwtQAGohUqwfW=fIb++5wKu7Re3`a4(fARPYpDuoK#9ygZ z>aaa%*r`NI@nwsN`)c%l&(w00GRDGgNn~_=ut$3jsb8<)E=;MPm*UP?FwKx!*O(oL z54?FO1r2T_4m_BFb-66{_N9dFE|5AI#O)iIF!zR<8Z*o*S}xl18!B8a#26PXx)Qo$ zU)oD>^(8AyRgG*33i_lr)Y&6+Fqtr5D#pIje@4VwP$*NesK1j#C)z?GcpOP5GoY#+ zF|*1LlJB0i>Nv*;YdY5==XMKM%j@_)#4!%6wxLNuP=LRHsx)drSbmV?5*@y_L@bp<6 zzy6du_(TY9xWX;&t(G57CeWOod7D*3dI7+EB`-JU=ED^2%5EUq@;F}f?3n8n+g39= zkYP2kbc0=G136~_ zEpn+nZPyF{&SDA_5*BUfz>11MsT&Vwpq=h-=0Y2YC^1YDk zQ(2{8*JrOq$)b0@ia07OI_L1x60c%b!*e)CR_`nC!+O8V+U$5Xb2=)D zY{Q%Rg6+lqHKm`@oBe{%^p4Z=4sg-YB7z24)e-re(*2;9grwk3?Zq8Ji~h#BBG2O3 zE_x#y?5YgUn~)`EqXo^+?ZG`S=M6&PfZN6In5scIEm#vS_{}Tc&x;ExXG*!`(rtE! z2IB-~+bfE$4j@Z&%hwYb-=~(E{MY0fqdskBza{vKam9LPo^~>c!q~(45o5*}v4it- zp^eo7Q;0vwg?DSQ`_XfXr~ViLOVGRbyu*i&FG@%a5247#b?+`Bqs=IiV4lmMr=#nV zEbS3PUk+s<5`p=tH9dGE&f2p$+V2n3l!%{8E5V!H*doUZePk{2@7x7PSbCdIH2{F6 z8qw*B%10)A{P`$}Pk*U3O+EwrX_q{=YVUZ~7xZXr8h^z-wM6|*ubqVCgOyl@;2wPq z|ICb0=+B)Tso-Q*d+r8ueI6tTzK7&lmi~>vQ+>bffYO(J!G5JsU3Kobcic>wv}P?O zf&vTey2Ax)g_mdlXkY_)6(QX!K7#zUQ9w*?O${GY;)J+StI%QIquXue?cZ5I_Lm|< z4}XP;hn}{nDZ&-9)c1dNFaIZMD*dl`GKaXR0J34u>Qmw13i!PR?x0}Xg_3FmCNsZfgX;=b-d5RP7T(HU`3kx}0%=j-}jBkFN~&kMEQP*%s-7`+cQ zYIgdv^MPBEkymksYwiyjJNC1~@of23Gdim=%$&Rj}k8FMEgt z>Vg9PH0sG`oZo+AJ!rg-AZ3X{N| zSO()@Da})Dwt(*-8&cQ-=!g$5m`J(XT%!586Er_Be`D()kNsua6ry+B&W>z_nuc5n z8`+jdWNdgW#&^n$#-;W0Uao0Y@?xE07ec0XZjoC8zyCwBF%AL`^wL*5brKXcr{0t6 zb=w4N)EDWX#)WylrR-p;P5ELzKIKqH$|@*f%skSY6*#!zi^+x4I)9RdbM|5MNCxRp zXyAx7s~@B9Wu`!XSz_RD>ED=LN~Yb#f9~XFY4;2}6NR2ru=)Epz6?{lIeL@J#|DyvaO~`LzyjR#4xy65z|}kOr4#$GkbQj?sWq%Q|0jfZP0#z9<4!;EW5+$ z*kfbdK<6$ZIv>RdDzcgENXWtYeanjUSz@~etyaMLRZg^1!+&4^W55}}6QGB1>}`1Q zg#KzVjYZCj7Lt^7+H52bc#3k6l51ldo`U-i@#qN?h0EXA@o2Bz2Efm&NSYWDvz)#S zL1>1)rzHnbcD?W@PAt*>M!EVmltc}9uS4J}%Lt;T4A2-;yOe~E z@WP72FHFMkOoBpl{Pk!aoPO4&pN*mzx}W}Nca?SHQ*;&-TV7k(Y1zfZb1*OVC3x@j zd9P&|^{GVaU-2pJa?Lbp#TE7`7s^=OPD%pPLHS!uG8GN=(&#M#5c;mTi2HDn#jD>+ zQ+0194HL`j$dzO_-n2(?-IK2!bdA!G&MXYuT-<;46xUkxR2P)Cuiy*9Nz#cIsa&V< zam&v$`Hz!v(H_rWt0n@Ea^~pz zff~o<5(w20nf1`~Q`E~-!m3fd&&7D1+i%0-J}oTky;D8mM4|uXIRH*A0*cR@ zSXA8eJ_yrhjpP0ZX&1i^(a2S~V81Vm`;^;#bL-ub-Y$1B`wC@?FJk&x0EOZs@95(+ z8D%c|yJ)PLT4F zd8tXL>vnIsZ@+l7&1%_b-Tl$zV!U0@?n7?$W*T0lzv z#xI-|@wkeW5*xh5n+!qqV)AtQuxGmInZ8^4e)konV0ds?=XNVL40;NXL8<3cG(U6IaaY>hr9VQu1-DnE-_jOy72Do+`qxhLqGIh9WGTIUWp_>NWpqfJ zs*9kI*TQ}T3wS*Ve3cQMbhf5~11NDj3oNy|e_9+TK-pteHq)ZE*l+xz_^Amo$c&Ad zrSxF=2CoTDMq7^4DVQMH(UGxzoL7T*&mj~ZHSmF2M%x4NvJcuk9efO)+K~3~|DDd7 z2^RT*Ypn7I@=D{qsOT4E@57a5_}@lJj7CTf+}VOiv`ct8b`n7sH$q(-*}-tfN6i0U zJ=;Xq&JYFpL-;i7u`7H}??VTh*f8XhT;xFR)0G7nzyJN51RS`$&eGVcveS#p-hy~f zywjU{|FojmPP^lC*-LD2E)S3R`iK8v_i@{!hvdhJpr^S;r(5K-Ln@AqlksBnr;A+D zwL8z#y>v?8a>y?@d&Al-cKPm)eq*2mo2ZVwlhe8U;w*zA?|WbY1~ zkxu#gQhaaCifj1z^h0DMO2tYN`r?kg=AV!1mI(CB%hEq44&1#r>(^u+)dNU_7Bv)l2|1dX6@4nbfXhMrY9J1ow-RwDj?B%GW!*(IIMh7GCrL3H<@@Q#2v% zv#n4Wbz!UYGsIg&E3x7>>QZKkl3?4Fq`az-4GO&lTKyXZ`O}hhd-SmT!_CpZp!k@E z*I2JjI20AgmiH2WAGMUVmf!%vlG~4Om{L3A!q^_?X42{oVGPEMY+51&M={uJ=ldIi7Z68J4s(AK7q7lx`<4aC z7{+A47KPyXkp2Q|ZKkH>-+~^__~2uO)L&ekv;=n$o^f zrJJWc_mb|LiehY~!Uo8hVI^>D=?_huUG5@n)R%+;_f*O2o({l^Nm z(05_W`8E_gpr2NE=X2KNV)oM0$G11VWKL)k#N74MxwHJw92qy(>4jeXvK794HWP2N zQupHWnG&$liduGfxr=NUw_>btNcxyhRKWE{i+xtymYL5f<&;S^qZdLbZ_jxKo8l2fBs zOP5A`?G0L~-2w1wp+CcLzLej)Ey_j#q}RMP)Y}JGF5$)#q3s_-`3vz%G7EQ7_qrMP zBwlC1aF}(Ymz9~m1d<9=Add>Nn1>T*($IJ6 zXzs~S-o0xmCK}q$Q)b~bDDI@EAv@YW!dLM2b^w;@GL4u3(9kGoIOUvnm+wz*V9fn8 z5Dq@BPi)grRf{y3YT^zQkr!*fTTqdf#2f!<@kyA{>mfG@?h)sn{5O{Ou_3Gbs30RY zzeosAAZg6FALCV=^=pL+#L8`;g_g9poo3Awiyl=u!A)pE9?0-t&}hfu818>tp!pK# zj>2>{oFH67;g)sdCvN1lmU;^X%X9it-*CI!{8neyBdp-!P9SA`T~jZ*LD@7Z7vJQq z2Y5VBF24%9lMT@;4N6cZ@d}EhWFVmS)h^O7)NjwY^X%cN*-GkFK@2gGbdM~i9z)VWc|bK8Vy^W(`JItc6;di zPOUykYVTW8+O_>tA57Ra(&G?B>?v5*1m7fm{9Fqd-rjdjoS{Q6(;5S3*nth;;pI0j zXCn++Yf!{&dD|B8ZF7cw_Rd&v4TTdvwA)l8L{l8u}ad@F!-N{t=6F)_va)S479sxq*orT9$XDd z8~WXnS&>O1xHKh616p2!SZ9MC=PfOCpk9fwa8E(Xc71I#Bg+i&-d6V3o^Ck)E#k`v zmc^;{n2NSbV4%Rnrv%GG?2Wh;Mx+D3fjEUR>X*EH5wTN@1(4YIw*#@m%h;x)6@$I}&I%E#_;_lXschY}X?38v2_ff}oM z+~m7T5K!sJ+$Eko3$ZM-xrLO$4-x^-?Zvn=t!|#z67Yo6r6R7Qff8sRirUj6o{7-< z?W-MTsT)w^v0$uPS37YCjWk_vXa&@I7u`2}CQY~1DY6YjTZwL{ybndzEla|3oIk{n zIsNmv^@<}c9KQ-%$G{`_8;O0z9o+Y(e!dJ?K|X2VT=UzfdI>lqh4F5A{k-mbzUa;N958DRC8B7*2|uma>TURYNr*Q% zP~MK;x5Pd^8}fcvFAc;zDMR;CSBJguiJR)~p{+Dz%-}kS6QRwyRpA|8axsDPbfxIz zMevqj%!-Q8s%7h)61?M`%*))AkAd(JHhV})YCE_q7M7L~?!eNsdv4nDfc{TlvHKx= z%^v&Kpq1D}*v~!1)X4J78DpQ!?nO*LC?_9$yLxq|b)7ka#wxpdHM9Z$7S@sPJ>G6G z3A)69`!f7@1>OIj2^A~>dPe^-{jE6lUTWtJkpGk5F6RxU|GjVG)Ff1SIjFDOLxc67=j{)c zs2dlo(uG&Cx?DFArX`B!s4}lHJt`C|S9t{`ArF%*Ky5g5G9igGeqe5vvf>l`v$~_# zv~qgmUb9>_N4wVr8=vxZC$HST7mUo*$(u_lavbtpw|2Lh^-K5Jm51nOIx6x5+lLB#M~>3PMW1#-f_q>uP%4oTHXR|-A%BBD$3-_g^q zNdZ$v&u$<4H^sxpb?KPAMF9ZxM>$C`b^h*t&z6sCKubhHvWw{MdlA`7P&G@>fx?TlOKm9J*zC!!$!ee*4 zkR^X~y+feO(AFMQ({gdy^EHg&rsWSWPqt*(eSMCBU+ zeBIqm3<*Pf-k^Rk4kVrFL1iln!?aQP`2(2~y(SwW4&`OC--%y*you;1@y`=D_{6`m zX&D_v6$Cp_*d`GR_j>k5CJ~$VWI4=!P~h{vw{8HMWN zZjS&!*GrQtPf3JrXFhURYoL3=JGTg2(395YKsjk6<&C%}`qB<*BEC+MZz8d6mf3fA zK#bn7WL;ce#7xE@Dc8$yAHDgc9C}OUatNJNtZB!*G;zbtjP?t8A7{Mt&c>^DGNcJd zwGo;G=sx-|L|D{*|6ZvZnay7%;Ma_kIdX`+byNuI?&rZ!gcoCMusdtyq@baz$B_Ez z{ZsPj*Z0*lp>`r78Wlm}%sb`68lP11RRlpNyCd?G-u#L<9})D~=IyU&}=U@R;60V zXjLb)I71G!@0=cA&q2y!N@y~|BH-Qwg5a)a1QKB|?zVn;_VYbveK}JiCX)P1+cLiE zACwZmO*hCJTR*@vYyLh)-QUq$;1fayb3Zt#;RK<-(*A*y0|O9~zSkrw%WB|jmRn(J zXhHfzSF-qXNSdsBmPsyO>xlaKa0vhBCR{g@iA&0fcIQ{()WoZ@Ny)b=#5mqJ1gYkE zdS+!Kf zc4u{T{0nud-qB+MIUQ@+3x$g=N@3pA`o+Z#VGlR9YB)+p5LGMCLoE2)!ahH7BL%P0 z3s9E&6BgHZ6Mmlsm;&W%XJXwD+Stmgq;|C}`m*xqYYb6N_z12D4iiS&(+5a8BDF}7 z!EODj-K+c>bYB~|Gx!{H+h_#3wMpbYhj4h*HADw_fA2mqSU>Q(rBIx>I9d@N#mGVs zbn`;=Izq1V$FDHI`#k+a=i{5(M?R-uLIPLxgcke!uWHlUZ0gA}8X$WBR9hHt8u$K- z#MP-T^`5JCiSI+nc95kPfz^>n^f+M02!YKb`<^^W5{Odw7Fqjn8G-U?Z{^KJ-Bww$uVY=}Z`7k3@`4o+#a5(3d5s zyc4QG(>I93n6+582U7FbQuHYj_fOP}=Jr$Sq%8-N78iSzWy&kyC0fsxfEi4D(W4TC2ifERynQRj2Ef6U3rFw^mHmtXkd%zwlvw9; zvIjqZ=)UY#Hhx0lBO3YibQ7p46_}~8VrLMq{A|XBbh(4RM8PSXG^xuj8f9wq>#5zE zw+<4~x0f5e)f_OgviPbZxWtksQTgqr^CRjUjRPsGBARlf);m4t3!<=63ZPHeZP&+&`}5NuZPa!v$L(vBBS7HJ;HP zK*j7##8Ip>z;15`@M#lxu~ohnL!VhmDr@j$qP1pRYLlDLbgyEeE$pc(1W*+Khz5h> zWqjiaq^9-Tvo3I7r^Xnl#B`i7M>_+fG?e|#!rTGQ#&Bol!R-htO>9xw1MuQ>ZiI@! zO$U(M{c14ca!0vEza#5&%$xPQP?w#pTb(m8lf`~wA%#|?Wc2P!i1J&5)*?#3(7>@^ zOo8pLrYb`)&&GS6v+c##>B_5k+rzh7EFEHbtucXdr9S$yMhmj{UWsfckOwlVi_5^i zapg9&@mdG?{##zkyX|9(AiDyMV2i0_J7k!!VFQdHiGiQ1uX-Pf(O4Ao$UgwY zNpp)`A6tGj>iPcdCm5Ioy(Y$E5Y%nG7t;$m^D>y$7kNWTwQ(8PKd#k=*67fN#jo|` z=yk*t=>v??hxa-H!4T_iXkJ7b>;ZxRzN_GQG&Q(#^sku9{^NQe2%@^AvE?tB4BqTT~{fFG@Ykho|&i=1uR{Av6ah?Gh`o+UQ z^vI5=8VoBQ z8tkk6-S+ + diff --git a/pos_environment/views/templates.xml b/pos_environment/views/templates.xml new file mode 100644 index 0000000..0ae0b09 --- /dev/null +++ b/pos_environment/views/templates.xml @@ -0,0 +1,16 @@ + + + + + + + + diff --git a/pos_environment/views/view_pos_config.xml b/pos_environment/views/view_pos_config.xml new file mode 100644 index 0000000..6e080f5 --- /dev/null +++ b/pos_environment/views/view_pos_config.xml @@ -0,0 +1,20 @@ + + + + + + pos.config + + + + + + + + + +