From e0f5daf461469ddb0a86f12ee925007248666cb3 Mon Sep 17 00:00:00 2001 From: therealthagomizer Date: Tue, 9 Dec 2025 15:48:08 -0800 Subject: [PATCH] [ADD] General: User portal rework and addition Co-authored-by: Lara Martini --- content/applications/general/users.rst | 4 +- content/applications/general/users/portal.rst | 160 ------------------ .../users/portal/add-contact-to-portal.png | Bin 20406 -> 0 bytes .../users/portal/grant-portal-access.png | Bin 40759 -> 0 bytes .../general/users/user_portals.rst | 29 ++++ .../users/user_portals/portal_access.rst | 52 ++++++ .../portal_access/grant-portal-access.png | Bin 0 -> 41409 bytes .../portal_access/multiple-user-access.png | Bin 0 -> 22233 bytes .../portal-access-management.png | Bin 0 -> 15317 bytes .../portal_access/revoke-user-access.png | Bin 0 -> 15508 bytes .../user_portals/updating_portal_info.rst | 131 ++++++++++++++ .../setup_configuration/envia_shipping.rst | 2 +- .../purchase/advanced/edi.rst | 2 +- .../applications/productivity/documents.rst | 6 +- .../subscriptions/automatic_payments.rst | 6 +- .../helpdesk/advanced/after_sales.rst | 4 +- .../helpdesk/advanced/close_tickets.rst | 4 +- .../services/project/project_management.rst | 2 +- .../websites/ecommerce/customer_accounts.rst | 17 +- .../websites/ecommerce/products/prices.rst | 2 +- redirects/19.0.txt | 4 + 21 files changed, 241 insertions(+), 184 deletions(-) delete mode 100644 content/applications/general/users/portal.rst delete mode 100644 content/applications/general/users/portal/add-contact-to-portal.png delete mode 100644 content/applications/general/users/portal/grant-portal-access.png create mode 100644 content/applications/general/users/user_portals.rst create mode 100644 content/applications/general/users/user_portals/portal_access.rst create mode 100644 content/applications/general/users/user_portals/portal_access/grant-portal-access.png create mode 100644 content/applications/general/users/user_portals/portal_access/multiple-user-access.png create mode 100644 content/applications/general/users/user_portals/portal_access/portal-access-management.png create mode 100644 content/applications/general/users/user_portals/portal_access/revoke-user-access.png create mode 100644 content/applications/general/users/user_portals/updating_portal_info.rst diff --git a/content/applications/general/users.rst b/content/applications/general/users.rst index 38c9f6bca6..32d0f0fd86 100644 --- a/content/applications/general/users.rst +++ b/content/applications/general/users.rst @@ -58,7 +58,7 @@ User` or :guilabel:`Portal User`. Odoo databases have three types of users: :guilabel:`Internal User`, :guilabel:`Portal`, and :guilabel:`Public`. Users are considered *internal database* users. Portal users are *external users*, who only have access to the database portal to view records. Public users are those visiting -websites, via the website's frontend. See the documentation on :doc:`users/portal`. +websites, via the website's frontend. See the documentation on :doc:`users/user_portals`. The :guilabel:`Portal` user option does **not** allow the administrator to choose access rights. These users have specific access rights pre-set (such as, record rules and restricted menus), and @@ -278,7 +278,7 @@ company. users/language users/2fa users/access_rights - users/portal + users/user_portals users/facebook users/google users/azure diff --git a/content/applications/general/users/portal.rst b/content/applications/general/users/portal.rst deleted file mode 100644 index 32b59504d7..0000000000 --- a/content/applications/general/users/portal.rst +++ /dev/null @@ -1,160 +0,0 @@ -============= -Portal access -============= - -.. _portal/main: - -Portal access is given to users who need the ability to view certain documents or information within -an Odoo database. - -Some common use cases for providing portal access include allowing customers to make partial payment -on an invoice, to add funds to their eWallet, and to read/view any or all of the following in Odoo: - -- Following, viewing and paying orders -- Following, downloading or paying invoices -- Managing payment methods -- Managing subscriptions -- Adding, removing or modifying addresses -- Configuring connection parameters - -.. note:: - Portal users only have read/view access, and will **not** be able to edit any documents in the - database. - -.. _portal/access: - -Provide portal access to customers -================================== - -From the main Odoo dashboard, select the :guilabel:`Contacts` application. If the contact is not yet -created in the database, click on the :guilabel:`Create` button, enter the details of the contact, -and then click :guilabel:`Save`. Otherwise, choose an existing contact, and then click on the -:guilabel:`Action` drop-down menu located at the top-center of the interface. - -.. image:: portal/grant-portal-access.png - :alt: Use the Contacts application to give portal access to users. - -Then select :guilabel:`Grant portal access`. A pop-up window appears, listing three fields: - -- :guilabel:`Contact`: the recorded name of the contact in the Odoo database -- :guilabel:`Email`: the contact's email address used to log into the portal -- :guilabel:`Latest Authentication`: the last time the user accessed the portal - -To grant portal access, first enter the contact's :guilabel:`Email` used to log into the portal if -it has not been automatically entered by the system. Then click :guilabel:`Grant Access` to finish. - -To grant portal access to multiple users for a company at once, navigate to the company contact, -then click :menuselection:`Action --> Grant portal access` to view a list of the company's related -contacts. Click :guilabel:`Grant Access` for each contact to grant portal access to. - -An email is sent to the specified email address, indicating that the contact is now a portal user -for that Odoo database. - -Revoking portal access -====================== - -At any time, portal access can be revoked by navigating to a contact, clicking -:menuselection:`Action --> Grant portal access`, and then clicking :guilabel:`Revoke Access`. - -.. _portal/login: - -Change portal username -====================== - -There may be times when a portal user wants to change their user login. This can be done by any user -in the database with administrator access rights. The following process outlines the necessary steps -to change the portal user login. - -.. seealso:: - :doc:`Access rights `. - -First, navigate to :menuselection:`Settings app --> Users`. Then, under :guilabel:`Filters`, select -:guilabel:`Portal Users`, or select :guilabel:`Add Custom Filter` and set the following -configuration :guilabel:`Groups` > :guilabel:`contains` > `portal`. After making this selection, -search for (and open) the portal user that needs to be edited. - -Next, click :guilabel:`Edit` (if necessary), click into the :guilabel:`Email Address` field, and -proceed to make any necessary changes to this field. The :guilabel:`Email Address` field is used to -log into the Odoo portal. - -.. note:: - Changing the :guilabel:`Email Address` (or login) only changes the *username* on the customer's - portal login. - - In order to change the contact email, this change needs to take place on the contact template in - the *Contacts* app. Alternatively, the customer can change their email directly from the portal, - but the login **cannot** be changed. :ref:`See change customer info `. - -Customer portal changes -======================= - -There may be times when the customer would like to make changes to their contact, security, or -payment information attached to the portal account. This can be performed by the customer from their -portal. The following process is how a customer can change their contact information. - -.. _portal/custinfo: - -Change customer info --------------------- - -First enter the username and password (login) into the database login page to access the portal user -account. A portal dashboard will appear upon successfully logging in. Portal documents from the -various installed Odoo applications will appear with the number count of each. - -.. seealso:: - :ref:`Portal access documentation `. - -Next, navigate to the upper-right corner of the portal, and click the :guilabel:`Edit` button, next -to the :guilabel:`Details` section. Then, change the pertinent information, and click -:guilabel:`Confirm`. - -Change password ---------------- - -First enter the username and password (login) into the database login page to access the portal user -account. A portal dashboard will appear upon successfully logging in. - -If the customer would like to change their password for portal access, click on the :guilabel:`Edit -Security Settings` link, below the :guilabel:`Account Security` section. Then, make the necessary -changes, by typing in the current :guilabel:`Password`, :guilabel:`New Password`, and verify the new -password. Lastly, click on :guilabel:`Change Password` to complete the password change. - -.. note:: - If a customer would like to change the login, as documented above, contact the Odoo database - point-of-contact. :ref:`See above documentation on changing the portal username `. - -.. note:: - Passwords for portal users and Odoo.com users remain separate, even if the same email address is - used. - -Add two-factor authentication ------------------------------ - -First enter the username and password (login) into the database login page to access the portal user -account. A portal dashboard will appear upon successfully logging in. - -If the customer would like to turn on two-factor authentication (2FA) for portal access, click on -the :guilabel:`Edit Security Settings` link, below the :guilabel:`Account Security` section. - -Click on :guilabel:`Enable two-factor authentication` to turn on :abbr:`2FA (two-factor -authentication)`. Confirm the current portal password in the :guilabel:`Password` field. Then, click -on :guilabel:`Confirm Password`. Next, activate :abbr:`2FA (two-factor authentication)` in a -:abbr:`2FA (two-factor authentication)` app (Google Authenticator, Authy, etc.), by scanning the -:guilabel:`QR code` or entering a :guilabel:`Verification Code`. - -Finally, click :guilabel:`Enable two-factor authentication` to complete the setup. - -.. _users-portal-payment-methods: - -Change payment info -------------------- - -If the customer needs to manage payment options, they click the :guilabel:`Payment methods` button. - -* To add a new payment option, choose from the available payment methods, enter the new payment - information, and click :guilabel:`Save` to save the details. -* To erase a payment option, click the :icon:`fa-trash` :guilabel:`(Trash)` icon, then click the - :guilabel:`Confirm Deletion` button. - -Payment details **cannot** be edited. Customers must delete and re-enter information to update their -details. diff --git a/content/applications/general/users/portal/add-contact-to-portal.png b/content/applications/general/users/portal/add-contact-to-portal.png deleted file mode 100644 index 5ff41aa5f824886321fc474209484ebffedf7a47..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20406 zcmbTd1yr2Nx-AL;LV^bm?(Xgcf;JGKad&rj2yVd}cXxNU;O_1Y0fIaI$Xa`^d-i$v zJh}fEJ?g8fS@V;sn%$#Ecc|PqaYQ&AI0y&`L`ew|AOr+dJ_H10$Oovmkw{=eJp=^w zwV9%-qpFNFkAaO9gPx&{z7d0~mF?R+1O%U;tF4}ag^?qXzLANUH9yIDYbObjnIS)k z3cC!GjO|w=Q!@#7dm{z+Z;A%)76#mgB!U7&e6Boi1Xf0ldPJ^PmevkDuKXl_@$$Uc ze})-Ji2i~&TJVzy{c%X7DkDeq)yCe4h?{|l-hhdTiHMV%fti!pfQ8doPoIv6g^7iQ zk%^0unS-8%g@=`$hmD!&Uk}NfLwiGG9-xTWzudj`_(@D19c_6S8C_gl7+hExZ0t=K znYp>S8JSoZSy<@b5cCdi){c6v^wtif|7H*|axkzrvvoAHu_pS%sHbn^EpM;m)Z8ym}i@0HxYLndNjV_+ttlF>6Tv;LC=^?zAnB%;o8%=Ap`ip(55EL=RST=Yy_JWNb~LuG6X&5Ygt8N42=K1 zUc|=0>CfK&d%fZR&-JqQW^dO^&+`A6=g+14b0~Nu%pBgf%k5uxLcz%HUzVjA(O>6) zN6+BT`Q|4v__MJ_h9v(QHv2!Wz~8hkrbch1{}0>!H_XAt*wIDL-bl#gty=#d4iw{C z_>6z<;@_Dt{`VyRn)@&J_TTU~G5BNtBSdeVf27RF`c1#=--N0Qdh*?y$bGbxP;-EQ zfJgiDf`mv(!+ujq2svp*QSjRX0dakMcX)F4W(9m6grS?X|VF zt<6pF(-RmM_wMcv{0at3OM_uy!A(tI7#Q&KGPte|e0T_^ranDAJv%$g%*=v_kL~a8 zKRP?d`R(u^Ac~N=r-ISYIC>A9rWeZ9N8hn=0hr>EDqZ?X`niPO{5larI@ z=jY4I%blH_EiEm5eSP5Pm)hFej*brS(h``4rmL%~v9WPvWF#soik*`id~z}|F>!c! zcy@RQ0SVdD(*u^5udc4XIyo5}94sm><`)nITUdZUew1i!247rAwl+fr2jCGBe-#k{ zzlALz0QU0(7Z%bpGJ{P_%F4=MKf;4|c92lez`D8@N5}F&1uZQta!P99rUv4&l84h% zaC$m8FVDfz5h6VW9TN*8E;^>C8`94QA}Jms`UiMxi#0W=va)jT@^W-#d1h@be0I8O zV!XV(94sUR;pO(g&5imaG-qhgx2@$FA0Ia+>gU4zyC0zo8ylsirIv&JjMbG?iJqLnkM{?(fkG^VTmfE4MeN&(EA1>mf4J z+{Z^d4)!4&?N+z8KnwE+8ykUB6G(a4usNB^#YKBJx2hW27mtrOPfu%yhYznWkCjy~ z2??iHx8VJ~yXR+ce?M4NwWPHC)ywOAc42#EC1ZXb92j`x=6+{rG`F|kv$>TYuKDM4 z0-Pi8o5JrumjMjEIKHS;_MV4;AcBw-5mIzr{*^8xOR_`|>~S%01eq?KGqu&^>yGIG%YHRv95~cU^F02{Zm5wCDgsrGepIKBJo;I z&TTs<+RST)D8@ngH@k2A2Z1aXeIr;9-wQ`auxQ>v@EIvGdJB_6{LXv$nD7ol3KF6U z9YPfj;``f2nzx1y2BHfHp-T+`@izI^yiNYWAgetdFW&n!+fJ`V&ckfBPL04;fC;2l zyoA+UXGR%sF7CY&IX%{DQ^D7&_hh zQ5!X^{4yTT?`L=)oyI~K9fN3za6JtoCiGCTH8%#le%^U$zR6syV*RI^!G*A5D*CG5 zJTc!uKmB63f(H}RUqDnJ$(hT<7<~^SE#?I*1r^xW65SudTPQm&&$hHhc(m&i#Z|jD z+B2>cT)LM?5;@v2t{gb*e1ZC=4Bb-comYO=mirEKYvTURwOQhh3-n`vn1>8MU8X*m zlTx_{U8OK=G|zfQ1+8@-9jD1M*Jhqn__(k4vW2X{<#Z63t^D)%P;&nH9zL z*Oq&+Fxmtfj%-v9YuE8rWH;q4)7Y3%Rm&FcA+q32WQTXL4zy{7iqU!- zC`ciSQcgK%N8=iYYc_Y~pi?Ix589RFtjEJAbl4hEhZE^gw^AKUC&Ct!Q8twjIH$$K zeImYg>f@ECDhC0&@vAYf6HP!@eyW>GIQJNVWLuz91&tj)xvfd@&E(#rcfMCKwz^fh zN0s7wLf&d|7{4qT*yHy7^Jdf?cz0FJNEt{pTAYoFztU^qXhtt;E>l{|AKCN)8^Df< zF9r^Ql@3Rxs9^Gwgj?XHHpts#NNkT!YfNW<#^?P~0RB!OK4#)N2EersE`!^l8b*up zg&U8@()>t|VK}niT(nwIXPum<$+);cE>mg=&z#``-5^z&r^H%QjfO>P=iO9Cm2#sa zuge#7lo~ba@$H>pToR3keOdq4OY9Zc#_3JA*6QPT^sS-uqVVn?`5am%_7W*GXJk~` z3@;ORYUQsmFShNo=oW=B>z9uSg zXP1H7NRLq8gXzgr%oa!1M{SxOZ$ggG9oQlS<%ZO(pJn0C`s2s;mzz&%G81toAil%W zc|jM%hkTTQ?NVq^#Q(76^9AyE9zD4~Bt2}`OvB&$^N&WoiPL{-l$74TMe4qq{^cR@ zpxdVN^_@4J_seOr=TxRno23TCAaeCH?Uev*A() z{y-pd{NpO+ucC;0Z7H5)7Pj(lUbPk1SzFy456Xv3qtyoXy|YPMlN0O#5ocZsExFbA z5A*d1sm>>BN@^1>0)-uEt}X?NQO6bQX!M-C)7XjSWS|+{%THMM*eQtX>6gJi`xS?A zq+|T}4WDZTYEIA3j#uh_YTo5#cu-vwJL{aaYFHjuYRE6AZ}KP35{^&Cnw)OxU^42s z}5>MC#49OA;3nO>#J4t4E4Nv&3W;(ewwmsO)uW=z+V7o&p*Zy zI46Y=>Lfl!G^#o67yqh{mRtbv4EXcVEomLi0>g>cb>ZC%~=(`42=Y=K~hSfnjE^;EL(l1gOoXu6U z4%+3~RW6bv`h{Mp3&q-!$H*pJW}b!iyM}Cp@in^>ez%68xt02@30Aj*)9KW54S7=L z9sWdVZe_C_|B9!L_*wSTi@aA4DgSVB%}P<{F;~l+_F*2}F4lB=Kx=&N_}bP&S>m1h z?Cb#ap!sRbCJL*&4#7BYe+Vk=&eP43VyYU@T7qEbAhBkY?o?Md?X$_LN(=Lhu+Rue zD-F5&@x=EuPCj;(RLtGjk}0C%mBc1V4!%QHwM;$;Cuxe-c)a(e34_K5yJY;hOBzkt z0^9;qTj?h0gNR%UYRf0fUZzM`bU|13bJa3?*$p%-#Rtvvd3=MVv1pg{clBprW-9}3 zv4O=qzGTpqvynt+OS1gvZUZTynaP6_&<$EEba}EajrasF#%1t}S4$sA>@)Abm4+p=oxf}>$-Q)yB4{)X zxPapEqm#~s;zYX{RFis%HF;XYT=mr~Cx6sp+LCvpHstn)eaz0q(eh{kfabmPaC$T6 zIsaLq?r|@YMuYV1D4t24exA#L%tGf-zy4a<*d4^Y zm?ob=>JZg9Z!X5|OjBn45R7JFCX=qw8@GUDX%Z&7sCu~g-f9jfmqQXaVk9YvEh|Z8 z)#^*BYiLe+4CW6%;h0CnbSFiVNZw=Q!%iOBB@YL#-g5+&K@wWE^S$P_ZY^imdJ;CQ z{PkvJAAZ%*^`@zUbKXepG!xm2{v1kM?+DW7D6%xP)r7V-M#w%ChCHqVaQJlXK+u`@ zh{|(ZMYY9`9EXFp3|g$6Yzr)W73&4fofZ%OtxYP&59`q@_OSOMq2X_5{Q08MjL?U+ zFJ1w7K6p--ndt2z?O28U<)$i3XLutG>;Y1yjcoA}{K*mvR82PkMM{dE`UXd<&Zw9e zq9&e+BJNxYSxs6d)v^5kN{T!eIQlVIoUR-&VcpBF6qxoki)aLq0MjGxq->Za2dx%! z;W4!KE44YvJyp;5`xpLk(~m81)cpC$Aa1Towj2V8Vwg?ZvH zeo88-1#D4ud^M8I(UsUIsBYjS9lF5dYo#iO|AJjNZFhVvC6>aacgM09{1jNWOQ;3f zH@}8&+nx&rHTvCU01~({O8#yFcc2e3<#k?ZVu%kQ=W^hr^2I)I z4$!EhO_`xvJS-5Nm#px4XBIXi;LBN1$N*?Zlj;7{%Nl!YiPI4y4cN&Sv+Jg8n+b{w z%;Ol}OpP5XzUt8be7Y?k^VM{xpXCT{##Wj2LIhky_6=+ZipIlNp9OQohR(!`~t1 zfo4*E^7P@J)CGjR5B4z6gC%N&r-)6-Kme&#M9F^wO3Ikcc6A;^8+_4sSuCdyP)8kl zq5J_Pg0q#=mGO5j8j*G2k-zRg!c4sQQj#Cd5CIFK_1xooitKpuTha|gqnl#;(L|(a zM|%%cyF3rjx0^!@mL3gl^zRt@2#eA;g~F`bh;IHK%L}IPSKF#^Aa2zii&ZaRQPM>o zMLG;ff}*S`vx-eQ$(qBRmWQx<;<{$L@Zygz{-vn5IK0=PC5m@t%fv5c)QFE|8yG!n z4kpOYaOu16=UY+ir%m|&vfwYjnR;qka_Q;Ev(@T~QX49p$yXwMVd|Q^YrLd~KZr!O zGD1G%sgE-tvJ%t3J|H%G%j^rUNn<4I`#Fl%xn3xo{Wz6!S1AIEumB#Y@nU|ST$x=RXb(rGv5LuA7%!?)TZl91Ro$`+vVv#{dP22T2iiL zVx?t~nW%mZ`Yh-kp;77~PRB=;M0D#BYXf2XwR8>r34N3{hIRO}Jb%k)SA6U5^M0)R zyh1cK+jaHLoq52^Io02UctP(u-~*z-kP^KN;Vmox?v>*1o#Q8QJ01qtoy*za&J z-8FY7*Ot*mN_F_MEz|tO(qRO}7PgZPP+lpK*$yEvE{N8HhBsA zeO^GI$I-$vT4qA!$A|5Siiwp50|vmv`{Zqpy5-Qq{uBXB$?JS8L(r#g<^&uog-2mY}V@ z0^O1hqfF{DRwf5V4RdW|*n|>QWBC1y?zAS)sD(MsKT(FwD9w-dRQ zeEr2hUBS`o;O$tkdnX#z(MIUK_w>t+50`e?7rRhN^4n`8^>gv3+oCl*cENc&NZf2h zWA?k`ZK4^7mOfLhzb(FQ`4J}*bTe1)y0OxGN84We(1+(Q?+NldZ~#S;s79JuJ& z%8Dsv8#o7#F0c_~j1$wWFs@R!k)}xy0FeOIUb6n52auXxj_U-BzM}PIQTMT|jx@=4 zmtnFp{VKkkLE>%X!q2Ua;bQ*X3rlKY^DJa$zX^c>=W*vV!GvJp2**!7NkgZD(Y=#( zO;Og)Co#*V;ivM|vCs$#EuLriq}WdU@)VfE0?7pb#ioJ_^h%8dhRy$sHUM~9++8&1 z)$U*aMCzC94aDw>#nQ?6DZ`_n=BH2Y&AT3~Nw$O}(?qF?IG|(x5n#$Ubym%WlFJj9 zVwEbZCR?}0-C~QdL`@-hzi-an_nD&&cb*`=aljUxSk;0qis;tcQY!fO&{|7~wK1da zSedvaMI&*ku_t#t?!+?M?NcdUiQjjBoT8CoJc6{MP2ryWM`RP@-*H^6ffr-N@Q#I3 zN!T))Qc!?TRC5gm)I`g`l)9LY7?Qfn=24-sWhRgUoQPcX zDhvjVGF`dkI6Yz z_6;`yLC8;o{63U2QhDDq#Xsmo>fJQyITWybFGCe!9TcwQgN<{U_1Tv4D7sP!?(wx? z^=!45d+&V+lp$`*;6r3wC%?_ay}8HriYeI>w(|ctBjr|^%!>9`X$L+G4gk8xQ+aI#VL65J>j;K07;jsz;6=c;7688|9{^1}6PP z3P8m0ENS7U+Aq6H)dA?PnA{&6@edB2Js30axoA${6R_V?jcjwn(%`Drtav&mF7S6O zyUw@h0s^K%ug_D3sy=&M->1zJ_5`RA*G#R{JxM^oy%V-$wcj7| zOS!%{M^A5)CaLp`r6{`*KDxEt@#F<&HscVS(yEey>}U4APg8!$H(4$_ano8xTJ;)m zSeZkAF2{|wzWe2stKZ`<{hTmQ)m{CetwmVTK&Anx5T0ajZ8 z*LE0f)QVr>dMl9upX>xA^~fb?suWtq0J2j|3TXkUX@`}nh>S%=xYM`|P+w!TT8zQ( zzAZvafh)D%GK<2!_n&ss3PO?edj~ju4G~~hGNA?{k!*`3_h2;f&q|@JarS{i$Iv}g zw(>}x@u>Che5jS$m9inT$+sOV>qq3C@eaRFd!^m1^uMd=@1%aYT@J3@Z#lnTjC?h^ zfVP4FF8lk=Bln4qTm?^V{d9Nrt5rrE3ioh@xJd`Vf`q@S24;N5s>;23`EiZ!zIyy! zPMr+I;YqVYXH6;aGvWKUl=^o8qrY5O80N-;w?EjM=I2!3s5}RMnO~!z#z+U!KH07< zk%J1NfqJ~Iq$O0CsRhhbUh?h`!BqF)4<5MvICyXxE=QBH)!zlq{ig*$i$9gG2)0v& zbU885Y*k6kxrR44)90E3++wstKdfWCaY7B zV1mqNUP`_d@ChuEP~u|CAYQ>a+ltRQ517U&!yTmHxYGgcyMm! z>tye$<)FmG=`o(ww{d&J)hH3*Nj<1%amir)VY@l|x(6lK$w#JGV~Fn;bV_R!0zHD0 zDK~N|p>)F{(vpG{Ak8N8em`83c7$}GBC?1O3ydlxL}!f{W*NE_6E{lX0bG?C($BH3yEPFO;+TAr z${U>MTp+sifSKNrSKj9C4}6ElkqNUwFajT(M7SXB}aa(E{Ou^D(qLfSoN1k1m0RNmrvtJzC`5 z`!cdUQl%~kgRyA26bbzh%e66pOPSgQ>~EblhvCt-^K@wz2b+D01(!#S$-K16jH~By z2Z4+O-z#)P`^aLpTd(~0=@B38h4*oS`(aq482zc|lazY<@k!fjc33|3ZAE-YEdSwD z>de}OI7}~Zz1GcMJ&BsY18Q0wDrelmYe5+pgVFZYfDe~In3xFn7G4XZ9S7^{sPCf7 zTt+|nNWY?RekbxrsrU^znRLA?BsoFK4m#-TL!Zcc&t;BQB;%Vx!se^s2!|WSu181} zQtDsphu)T1HdcNOBX934Dv#M34T^4tLFYd?W09Edv<$^ChNa=M+G7o{9hcqp1G0`G zgFXjlg-VBxt`+i8I@v~67Zazq{2V(5z@7WSvO^&kpt(2s;Z5a7O45bFi>{h?Os^nE z-JcT^k}xXOu;lBrD)epu52CrcY6;8+=sl1f$e35pVgN{fKj20$zI!*kcWT63`IY=m zWDdpi%oI;v0C!Ybo?y#7#vOr}M>qksWtbFg0-Z;=V1oLlYk~;oJe6wIAdiz{@;Gu^ zljOjdN8FeAYtnq3nQQ&6_;$Pj(atG4S`h7fB+;M0C%#=VlWADw5uDMyeu$OW%6B@X z4jVncHuQBwLUj@kn*SLH^D~NPb=i|vunc{ z7Yq)y1Kh15nHWCQYE5&{?z>+}5fcPL_fEj^NM;d$lBFz;e{q9NtCVcOhDD z4MUD4<6}=IdmIP6KaOWlFVks}XW+A>h#x23D!<$)#JsDFF++Kr(kGYjaF(bo^|kec z0o%%A^;{%*vdaQOg5QTe(Cf=T`2nh9_Pevvo0;9T$QK_-6ydu`&n}44Mp7EGeq&M9 zTZC-u3x27d-ZC2(kCQ5DzvdsLmO41!*xX`ZlK8o^qs+cuH!rm-3ej&bzF*+&O$fcj z+uW>OVF2}1pU3&FuscaH>Y|Qnb^=bO|HZS4s77BDCJp{+=5#1W0*Ikd( zN8F?G%zak4K&a#+h`L|(GY2%Z&2iZ3bEJO*DPyEI;K~Rz-vR6ipbM?OCoJ{MKNhz zp2aV8UC5-nKQ&QNesKEkAO#7`Lr?rRR!eL0ussYjf36rJwR*#V1zFe|e)7AbL?f96 zUWYU(U}C{xW!B0!CyTIWiOvGKFiJ#f$m1#BEhs7C>P)p^upG&N&!;fF@`Jwhk^ zWHTtJB`Kp;I|_h41W0!H@2~vQ1!}5{(*Gfz{4RJPQ;W~0!Nx~zt!AV*Y-Y3Wkr@4m{Az7GR+{w?R4QuBVo5R z&(Y=Z%Syd)!oDOmUF8tv5H*9$^I1Goq}D2j^aMa6j->(kfrwJO3F3L}nTCq=8vz=U znI56rjQB;k^a6_3#!mtJd&)9BQYwjA~Ulm^& zwf(FFzzf~$N_zXQlQTO{7x851{i;jTH+{!UZmPzdcN!eCjr9V&xHYGfVfk!QGN@3G z+gDXb?(i@>>yiTtiZyFeL`ycAeOJ+grU~S>zAHL$<=-YjJjD9JAL~1Zvg}{k&nx+ z=Jn00aGeiiN_=gLQBBDqjNg-GWW)+0I~jXmu~_1B?cINZjy1fyzl7wgEbK6DRPhez z-S-m_iy3J$B9ShUvpGyIAn+!ImE(OlJko+#FcWRj=l-2wQRTtG6(XJ;RBTyYhYI;% z9S8RdV%t*w&q+JR?u$+esZfc^P8GzdjZY%)QlkC7O;iop)u>rakOm6Yr2*}9(9?v< zC{(j7sP?p%IxCYn*LAB=&zoPRx@d8=N%ZueFiRWjQ=WG`4o@QpDqOaGA&H}*Fopa0 zL82$)hSV($t-C0F{#zFR8!d)*BRIWzUh~6fnL9!p2o$hnF>L zAt4(N-)bRSbUVp_q3Cu+GrJmFLhXYEPl@7?ILf-KDEdEaZ`PyXg2(|e=@IU>GlI(b^~fvsKjV?b+0VTw*c%-&P z_v>ulnw|?cJ%YP3Fcne^Ijo#~((dvLb?IF-KTW?<>PPp|4D!#b#;M*VeJb&{V6Suw4|IGA78$P!m|Hx^ma&qrF0E}H z`;C#0UKwFuxmt4zPD+WDQ5hA3^m``{l4&bj$W})6>4kc5%0ma7xAen5@pLD`-q5gV zISDoSmy5Eut>R$w%lK2yv|EaXi%3Ua)Zb$7INCE5M}eAZ;o7)2L%vd1V@t(t!N`;% z7|pVfk$Bwc1oeDO#oMK4F^2K6gdp2x0f~<#)Dua%4_D!S+YQQ!T6RYci4G