From bc960cf6d2b48ea5ace544dcd73fa9dd27fdea20 Mon Sep 17 00:00:00 2001 From: Clyde Stubbs <2366188+clydebarrow@users.noreply.github.com> Date: Fri, 29 Aug 2025 10:52:37 +1000 Subject: [PATCH] [mapping] Use custom allocator (#9972) --- esphome/components/mapping/__init__.py | 18 +++-- esphome/components/mapping/mapping.h | 69 ++++++++++++++++++ tests/components/mapping/.gitattributes | 1 + tests/components/mapping/common.yaml | 19 ++++- tests/components/mapping/helvetica.ttf | Bin 0 -> 83644 bytes tests/components/mapping/test.esp32-ard.yaml | 18 ++--- .../components/mapping/test.esp32-c3-ard.yaml | 14 ++-- .../components/mapping/test.esp32-c3-idf.yaml | 14 ++-- tests/components/mapping/test.esp32-idf.yaml | 14 ++-- .../components/mapping/test.esp8266-ard.yaml | 14 ++-- tests/components/mapping/test.host.yaml | 16 ++-- tests/components/mapping/test.rp2040-ard.yaml | 14 ++-- 12 files changed, 152 insertions(+), 59 deletions(-) create mode 100644 esphome/components/mapping/mapping.h create mode 100644 tests/components/mapping/.gitattributes create mode 100644 tests/components/mapping/helvetica.ttf diff --git a/esphome/components/mapping/__init__.py b/esphome/components/mapping/__init__.py index 79657084fa..94c7c10a82 100644 --- a/esphome/components/mapping/__init__.py +++ b/esphome/components/mapping/__init__.py @@ -10,7 +10,8 @@ from esphome.loader import get_component CODEOWNERS = ["@clydebarrow"] MULTI_CONF = True -map_ = cg.std_ns.class_("map") +mapping_ns = cg.esphome_ns.namespace("mapping") +mapping_class = mapping_ns.class_("Mapping") CONF_ENTRIES = "entries" CONF_CLASS = "class" @@ -29,7 +30,11 @@ class IndexType: INDEX_TYPES = { "int": IndexType(cv.int_, cg.int_, int), - "string": IndexType(cv.string, cg.std_string, str), + "string": IndexType( + cv.string, + cg.std_string, + str, + ), } @@ -47,7 +52,7 @@ def to_schema(value): BASE_SCHEMA = cv.Schema( { - cv.Required(CONF_ID): cv.declare_id(map_), + cv.Required(CONF_ID): cv.declare_id(mapping_class), cv.Required(CONF_FROM): cv.one_of(*INDEX_TYPES, lower=True), cv.Required(CONF_TO): cv.string, }, @@ -123,12 +128,15 @@ async def to_code(config): if list(entries.values())[0].op != ".": value_type = value_type.operator("ptr") varid = config[CONF_ID] - varid.type = map_.template(index_type, value_type) + varid.type = mapping_class.template( + index_type, + value_type, + ) var = MockObj(varid, ".") decl = VariableDeclarationExpression(varid.type, "", varid) add_global(decl) CORE.register_variable(varid, var) for key, value in entries.items(): - cg.add(var.insert((key, value))) + cg.add(var.set(key, value)) return var diff --git a/esphome/components/mapping/mapping.h b/esphome/components/mapping/mapping.h new file mode 100644 index 0000000000..99c1f38829 --- /dev/null +++ b/esphome/components/mapping/mapping.h @@ -0,0 +1,69 @@ +#pragma once + +#include "esphome/core/helpers.h" +#include "esphome/core/log.h" +#include +#include + +namespace esphome::mapping { + +using alloc_string_t = std::basic_string, RAMAllocator>; + +/** + * + * Mapping class with custom allocator. + * Additionally, when std::string is used as key or value, it will be replaced with a custom string type + * that uses RAMAllocator. + * @tparam K The type of the key in the mapping. + * @tparam V The type of the value in the mapping. Should be a basic type or pointer. + */ + +static const char *const TAG = "mapping"; + +template class Mapping { + public: + // Constructor + Mapping() = default; + + using key_t = const std::conditional_t, + alloc_string_t, // if K is std::string, custom string type + K>; + using value_t = std::conditional_t, + alloc_string_t, // if V is std::string, custom string type + V>; + + void set(const K &key, const V &value) { this->map_[key_t{key}] = value; } + + V get(const K &key) const { + auto it = this->map_.find(key_t{key}); + if (it != this->map_.end()) { + return V{it->second}; + } + if constexpr (std::is_pointer_v) { + esph_log_e(TAG, "Key '%p' not found in mapping", key); + } else if constexpr (std::is_same_v) { + esph_log_e(TAG, "Key '%s' not found in mapping", key.c_str()); + } else { + esph_log_e(TAG, "Key '%s' not found in mapping", to_string(key).c_str()); + } + return {}; + } + + // index map overload + V operator[](K key) { return this->get(key); } + + // convenience function for strings to get a C-style string + template, int> = 0> + const char *operator[](K key) const { + auto it = this->map_.find(key_t{key}); + if (it != this->map_.end()) { + return it->second.c_str(); // safe since value remains in map + } + return ""; + } + + protected: + std::map, RAMAllocator>> map_; +}; + +} // namespace esphome::mapping diff --git a/tests/components/mapping/.gitattributes b/tests/components/mapping/.gitattributes new file mode 100644 index 0000000000..9d74867fcf --- /dev/null +++ b/tests/components/mapping/.gitattributes @@ -0,0 +1 @@ +*.ttf -text diff --git a/tests/components/mapping/common.yaml b/tests/components/mapping/common.yaml index 07ca458146..7ffcfa4f67 100644 --- a/tests/components/mapping/common.yaml +++ b/tests/components/mapping/common.yaml @@ -50,6 +50,14 @@ mapping: red: red_id blue: blue_id green: green_id + - id: string_map_2 + from: string + to: string + entries: + one: "one" + two: "two" + three: "three" + seventy-seven: "seventy-seven" color: - id: red_id @@ -65,7 +73,14 @@ color: green: 0.0 blue: 1.0 +font: + - file: "$component_dir/helvetica.ttf" + id: font_id + size: 20 + display: lambda: |- - it.image(0, 0, id(weather_map)[0]); - it.image(0, 100, id(weather_map)[1]); + std::string value = id(int_map)[2]; + it.print(0, 0, id(font_id), TextAlign::TOP_LEFT, value.c_str()); + it.image(0, 0, id(weather_map)["clear-night"]); + it.image(0, 100, id(weather_map)["sunny"]); diff --git a/tests/components/mapping/helvetica.ttf b/tests/components/mapping/helvetica.ttf new file mode 100644 index 0000000000000000000000000000000000000000..7aec6f3f3cc74a7138ce350def27a2209b44ad89 GIT binary patch literal 83644 zcmZQzWME+6V`yMtW=QZ4);Dt6lhMh*!0?8Ffgvow*(bze!tz)K21XYK1_ra_+{6N| zbwd9c7#M397+B6Fmz5|a^<>;-U|{oMU|@b^qk7HM{oC} zF))Z)FfhvXW~3&j9IN&?#lUEM0%TrBMrtCT3R^z|qX`281A|INZb`-Ee__@Pj3z1! z3~Vep`N@g)>*8^3=E9Y5SsZS zLmHD12P+dd8w(Q?6EhPF$T`T^BS1lc!GS^HHxujSe}Rm~?8S^{85kHQL)9=cFt{=> zJZ7?F(PLmpU}4?Iz~GUZQloHB9Ak81 zU|=X=bY*m7bZ4k#^kVd2bY@^-+Q7iTu!5n1fsH|fp^jk%!&-*j40{;%GVEtKz;KY^ z5W``HBMiqF?lU}Kc*yXG;W5J#hGz_~8U8aeFfuYSF)}li=v1um8XC|K|T& z|8M`l^Z)Mud;jnMfAIeyn0^Rm-3PO8{=fcz>i|IhqC1tw4YKlcC7 z|MmZB{#F0W{oDP}@}b#7(}yMx4IgSeRCp-<;KhTD59}UT-%q$7dq4Dk$i1BVe)qla z+uv8d&vT#i_EN!S!5X$Yj8Xt2vyUVJ0S5MB_F^_a)_ttcSQoG^0F|_?%?u1I`&h5A z=&|@QF*AK-VrJ1}(PIu}wr8?svSreQgwOxS|8M@k@h|e9@jqk6O^gbx`OgXfkYIIL@$y;W)zvFg(w2j^O~qM20O4M;LZ7tY_HD(92N5u#;grLpMVm zLpwtzLleV95>=mN*aL?9!Q@1Seuh4VP6lMr{R}YC4GgmxCNoTCSi~@wVF5!aLn%W! zLnZ@uQMgw~VknTL8d6f%}h;lT#wKO%<)l^lKl@t}^L|E%b$M=RNJ`Mv*&yc}!MK4@yQ^yhqjsXg z28Mu$4U7qq85@|jr4=C{QddV|14C%U1}0TO3xy2~K@q0Xijk&ZX^>o(le54^29d4; zk*$o3Obm=7AB1fp^raOeg+&xL^8W7%Rd$Y2*ubak6yd7uny`V{H9)ShRM^DG$mFRkW)Z0jwo-ZnqnM(iVx+E)cW}gJMivGJQ4dkit}aig*BX*C zHnK2?DqCz|6y3zgz#=GYzJXB;Vqv7Nj7uLSs_dqmsIWmTaRZB*vWEv) zAVFb+S^|vk9US4Qu%RI+Vq=3tS7NGiQf;P$vTKjDqHCl=m$HkpqKmYmqN|ImOQf#O z1_|%rhz;zZ=wa7ZPRvYI=u)<@fP@dom#!N%MYNTj6m@krDey8nDZA`u5MU5s5Mf|( z(b}k_*yW<^qO0Q_sO%jSrK__+#8ug4lL(`TYl4fe4x^xuf~A5!gR;G@&Q68{3@NUG z5y~49f+G}MHzahsNGpOuB~n*sBMU1iqLdRiG$bi>MQmUQlHR}&5E%h-Nh;VWAn!XX zY+y|2Qg+hS+32aItu3*WfsyflYwtEjP|J>q!NtWzS0{o=nmLj~P{@)&S7!rbqC%IG zt_~!Lap~$XdZr}1=;|;)C=jo!i@`IcE4jx-S7##+i>g!m1_|eg4GP}D5j-i%Dcw69 z7?PA-6*eRUL?}utY*-Kwp}3(TSvqrrLt;W?q_k_~Mp^wX7ikdb>Jq69i$3WMvf3aA z3xG^h+^EmsEL-(dVuO~pw6a2%*G{Ge28RvO&fPu9R*||oiXaCiDo03fVCariR_L=9*9-0SKnZ&1`$*45dls^+Tf%C%8l!&TXpTUUo?qnaux z9(XrusDo%-orpGRMa4+34bslZ$^zgF)h(@@+7qd(Be0Qy)ftq?Y;2@K0sQ2N^phiz zk-9pX0uc%a^riJ86%OdbmDwoTNNYX;Y1^Re8lh+-{RWg`B3)&{seglm^oE8=DP5h7 z49w0U5efqAd^U>G0*cBC8yG-VNN->aiC~mwhy+_808ym~O8o46Ha5~wRf-5@V0HT# zI2ckGG#NA*92imv=H7fk*ElfS{_FEIHNO#T3qSHR?D zFnI|~UIddDz~p%_c@9j1x;W|J;yIn+Gy{X<2ZnTpQ(&2sVDbc*JPsz0fytv_@(7qb z3?>hO$%A0>0GQklCigKgFr+dhgGo@qp9&%vVB|Wm_*yWz228F7ldHhwN-((sOoFt* zbV1lV!Qwl>SbRE|oCYSRg2^dh64Y%>VVDGFgS4UQT?`gq1SS`P$pv6? zKA4;bCg+05N(M$WdrQIMC1A1`OcsI30x+2mCUe2Ma=`2iFdGzpDIk*|=`~`5iS!2J zNO0{3OOwi*7&Jw+ofW!5A{1R+q*HbF8n=~0UofAO$#Kt>FSI2t; zLtuoWGN^*-0u^iwL0w%zQ4t#$q&F}|Mmp*0D7Z!_f_3ZaY;e?$(2m$(t-Zk->{4)H z4Jk`OWTdW+>qZ7qXOIC38^plHvZ%Oomv?X!$eb>Pu11iX6E`piMQmV71QlQk0w9r~ z2n9wP1qPc9jETxS{=b!pj8s(A)!Astp{lGM!LUJ5yK5sSh|Rb`3B+VoQ`VN=$S$W9 zxk1bsNgY@cq7I~m3zs^uBt#uZ3r=-lNr*a-7EUzt6kInnBq=LwIP0RUu!AuwFhW^j zL$8Z+q{4=`V74!qJps(-1+x_bKx!CVl)?T32Q;`?WpNIPu(7d`K62zpq^^#OuFft7 zK?ZdOKi8BXr(Fy}45kbL5T-DL34=d~xtl?R!Gpnr!OK3z;$4LB|VB**q*+UA1&| zKxL*vgu(_*=cEl<&dCWID;N6@fze<=D8a?Rr!BpUfro($ho%OoW~h2F#RJjA%fLfG6Lgdb ztce$*iJyTNMH9$TAY~2=Fq=R;unq6floUU26P!fqiZ0- zlI0fzGXpyV%LWE*B}OP+G-XIqcv4NpCaw8+>4n_tCPDTz!UIw}U42(M%7&dY8vuJN* zBy>HfU*Y z6=6_p;O6vHPEt`hvjI2U}mRlGY*w_`MZ1qo^kdR^k z8NnkUyOV*7Q4(Z?_XfG3h#d?KQjwb+7{uO485%?iGYc9U3oWnz?)6qXd= zIB?*=0RdEkfpMdRh`^D}ynF&eR}Ne`u#t^R;L2txMkZDe&w+=XO;UnQf`?N~m`em= zJcM+R;o;<97WV`37Jm0=WMWE2(?mlBea5@5Hnv9ZAz|7$EUw}oEO^3mN!HU6^DFGBm z-Wx<5psBTE|`Swb7M!I9+-k1Qbp7VRw!LfY;H$15>7Vkd+4 z{{t40kqitQ871}gcQL3kY+;ZTc(YMlQsBr&c}amIprUyt1Eav3&1#mCjG(aFXuv3N zWFs4+z>%#I;tU1`;vhjw%k5&4l8pKi28^I+5;$;Rv#Y8h4=AFys=26H@>&XjqmFSW zgDJzjEwY-7lG+082afz<+$b+AaA1SHzy|p%8x<574>BCws36bA2dcZ~y=C0VV9zjl z3#$O5q!3v7MmAP~0~^=`Hn3gU$j%N{&CUi=&CW0xq}qWY#WgcHVh2OQMj?C8;E2tZ zYC_r|2X3`g13?Zp&kX{ge(VM{WsAtj?GU#aNN_-%w?$k+0<1y*fCHzvgM_$*xCEoB zwiV+BasAC8-X?7!9&N_W4B`fmR4gFo>cY#z$RMezW@)G|VPF92WPuWojR2UmVKy|_ zC}5?%i$RaUfkAI`gT1Siw)O^5=ZMWhVy^Z(81x)?>|MoN?S<^^UB!efv?JjvO$}ix zwe<~6!75D+^$kt6ZA}gJwGk?}HL&wEu=7Ymjb&tG=K(8b=V9bwXS3m9XJfR`js#mN zDX*XkmQzrbR8^3-Q&o_cw9t->WE2$>7ZW#BHdIqrQx_B$0}URrv$2aRo2sd+nVK3J z8-nBo)j>QHb2D>OK{j?aQ4w)5aY11-&`6ZJn!36mQ^xw-29CAd0X7LvCt{+TDvl>! zEv(7(mo*QQ1iNWm?DTyFsoX{XzH^w{R|Q#G$T8md9mHnkSd(CHC&&5s9|J2x z!2f$}XIU38@GwX+$TDa#m@}>d<(Q3(%&?4N0naGR;EbZaff<}pEa4eN9aO6AWDsW9 zyODu+2gBYi(lTt8+B+EbZd5Vc!LWC;tdyL${ec5jZzQf%y^%n$7`I8wNXw{8F$)|J zxNv}DqqNLMS*aZi6`Q1`WVD$XH*zuy903*Ca~Px&w0PJ2pfrY2^_Mq;8OY|4U4Y@#A!#ztnQCThyUjK++rIAs~v z^qo7`*LVJWUr1$TNJv#x2q&|1!Joa%-ss{?SI+nMU%1fUf1XLV8muy;`qy37L%-}~ zFeN~xZ`A+$teUJl8B`dI7#ta;A!$h#mX@60X-O8GmP8>EJdDop#3TwzOdF*F>^F*e z+izsHw0GcCWsp*pQk7y*)wXirv}0hlW42=kaTqo$GHXhK3d+s={LE5&%#&DEKqMTW45n7BB&&`?uWVrOGyJGOAj_BfB+f1<2<+zWWE zghUw`AGO8YY&`Tn&TAo;Qy`<5-wGS9td}Xa5#HWnR{EMwhMqCr-gr2fG zb^3QgimRx2(gZ#Af5#WZCtX{&xFkB3J7C!#pFl_MMn)MM$N02-R~Hrzr9x|C9V1^i zpI9v|&cfg*V`q+Q0ii7A#r z;0>rzC}=EL32knHZ0P>Ssl9zt^|p`@CYfK1 zXMg|u|Ig_2*MCO;8Gb*14sw;-zepx|WLLpUN`$K*B_#v2q(r!i0qk#XOJ=aExVadZ zS-`I1VnKBkqX-kbvXGFe2@|uin79~|JhHQ-fBiH5&B(}j?( zJ;or+;0*~YepqaXz{83k92?9V_`$Iu3J)u0kgGN_aO>+cZr~T#%+Aa$3~F(J(kQ#3 zxj4I_IJ>$bySlldy1BTaI^${fd+JXnrna@DPJFEPfP?ke8~-xL9iE2|dF*m1^M4Hr zqk#W^Sz=f?8MqnRA+CY9+j-!wfwbG%q3w2FxNF!!uG!4a#>}*Xp=2`$Cj+DYfddEr z95`@*aWfYy8|My&l5N~9%nVG7i~|G7?M+ySBgxq{ri>E9*Bc7|IF0`&vp0kNo1F|yjA9!=4O~NmNONORz-f_{QH~!X4$dK48JI1Z7`;I~B*u-*3<3u>GBa#s zWZJ<{xrv!cMjPCfU{q#givGvb$@qo!$KL2mBs6*N^jA9Vq!NX4q9)FPV znz^Smt!xpH;S`g8Bk+b1r6s$~fmhf;Kn&4B zfwwf+gatTlgar^S6lOMf3x!QsjM-L97}3&TV1~DB7$n7*?IgtzEfh{3cngJxSAf%A zfEV1diDXq`5ENiAHUg2#rba@{LQKj^Ow2+;#!QxP{{3fUeDjWx;XlK>88a9eXUv#B zjgfKMbaloC#$?81#>Rj3|K|Ri`>$aUqXMHM2>!bdh7TAR8O}2>Fx_Wez`(~)010_M zSe)}SC_;xK_`q?_y@3xL=K_o{ad26^k=NUPBd3M^MrKZdJ3ARz7z*EPEtlTR$~6 zPIq#A0`tEK%+4--zY;(x-;{xYg`af+gCfIPhzq%4E>wc24Q{Xtxi)ZvU8oFC8{mHX zMlNsrjdB+Dn|Qdn1g;#|$Rl8}lR=bW?It-6&YcYT3|s<#4hX#2#4pDsC}iot$;`md z%+JivsH)AdQA$qW2;)WuZh< zVBqH9=HLc3DL`eg2&iGe#%`!6s%U5;q-q9k;3=`OgZdl{#zx{|Ec}Zfeu-3-VCMUy z_K4AZdft+TwwbK!Ss2+~ooJ|M{xSb-OSg4r6Lq#4ODiRP09!7I`utNpgPNYgIr+52Dh@v4g6OmK(jg1 zLFF%_iJCGbybw(;P_Il>gh5$JO&!!lgS4ALoirtOQ!yiRGjlU$huM`49qjAh-aPxe zPC~{+qy68DJDz)^otFa#Gs`?yHf}u|1}0GRlSQ9(J_A34IAaVXyy0b|1U$SUWg{;vyd~k` z%?l21RttMjW^v#Y7ZBiO6%rI;72r6)0&4vp*vQF#;J_wkM*bZP`F{=^*yO;hAaz1& zBNxws16$eHSXo$D!DB!N7&o%<3S8O2P~f_ejm0x4Vv_?4NTKvb7AAoMksEjgHna1v z@v__4Y~VbySxA7NZwEucMqV~hzB_W{2;(MZMkav+2X=zStTu`>?_en0#KJ72y^)uV zW0MfGtTrc+kqny>#KkZa zii-CBEcpSlxY-AO&N`i z1r3cwl??@z1x*bF4GkID4Vl*cZDpF}?S1CV)_)5u#J{zC zpgiI9|0atpYcqoiV>Bd=#2`_@!Kez4BQbEEVAvoAE-BRDQ3S5PHcD9AZ)65#2_A-> z8<+*&Y+;s=la&xSa6nLKqlC~7hIN}n6%{S@kNgqXAX$4vVkd(XL;j!53^EKRa`Fe{ zHnKAd9AN^FOM>R186r0d@puM<#(9GxHXHy=Om9>a@(hgFD8wURvq1==ut9o*L!?Dy zB!uT6y@4Teqm&|6ZHiI?HX9Tn3c=b^Eg~Z~F^IBz21jgU7ZtGC?f_C1$+%HmOyIyqQT8JTHp+-?lobO-zPOl-_9k&zS#9PGVgei3uWaPt02gl@ z?4S(G!7$@3BjZK}22hUWXPEJ3gCwZfW(4Iv6{Oq;&ZO$X;Bt=H(A*4Mw8{Q^ee=e@ zU;MlIm$Wx6T{GE#s@jYUrdNOG+Od_lJZ@`cJb(A!^Bemrnz!{&+vsD>#mun&Ul~hK zT`dC>gWvy~EUK&v7-SeU86_YwDG7^7EqF{yf@4y6gCsa6wc#--49;u}7WNy({OuVw zhzWqk)waLcEFd7p0LpAT8PpioyxGOT$*=}gY;WWf5IC@rg+bs5c$gW|3J{i*Z?3V131)XnJ|ND9U`oCX{xr~8~ zrKe8)5$oQtp}TuyWCQ~vgAW4(i#}^J10O>=Bu?01af0YSv4P`+V*?vFP7wVk4se|C zdE0N~u(sdG&LMDM6B`RFq_AV$#K*-UaNx*B7QT%PpaN?X7aydps3;^XBy6Z?swgVT z#LUFZDC0VH(z8GJm><8HFu{&7i_wHpi;-u2K)}CO|IYn8`)>wl90Qbglvx)*$HYn? zE`_%k5MyGH76U7^#ef(SV+FfZ+`@h%2dErSVOX~a`*(e9jk&K(A zSVg!6j(~>Bq!^|#NHQ$k%*rjtt&M1lN{PsEYdi2M%1Eh8iPd=oa0|49hS1)C zI^HOQXDaFrit4ZgB`&3?0!}oFD&i`NQZ_1zQsS@#B_gh(4wh3_5m!+cu~kDB*x6Je16`m&FL5z(5CyBlnT@Or+W&pJd-vbxc700~#mdjej(x6D`1dfcrzbD3 z$IUITW%=@!mK7l(OuwYmb2p#*_U+W>JT*xXiMUzou3lX?D^Aj~Ix(@PCNa^@cFx@D zsyTD2s{Q>y^LAnXZ?MR+&Igw$Qjjzu3`@O;5=9uCdL=gqgHtb}M3Dri2{8-%jSQd? zg+X8^sPK5R0aCQA0TnF_Vz8oR`x~q!ili{8TSBl5VMHl(U?qwGsIK40;*e^wi9vt` zQlx-Nb+j@?O`$qm?&y(DEjdRSDjzGB-0fWK&jRGBsf^HWCsP zU}qBsx5mIjmF8wl!uua{tmAIZTNL3S+;;rLS4OT|FMfA)*v+f0oj0$x*56;_?3Vn> zt?hS~GO}O4&dBy}`@f6-GVk1Beg!X57?>C~fqJzp%HWy8a!9445X^DHjA9!F83eAp*}x#M@c_Fs zXkKS00}G?r8|jTKv2P+baxw@U@ZKO17_pf}m_bm$MgZJs!WgFjdj~pJ!OWC>?OJZ` zwmGw9;<&B#V!{4nWJqEVVDV!9#=yZ)3Gp3#q=yskJIF{62Xv%|3+_8`X}*=2frE*G zLtp=nr?mqoy8{P12RjF->*K)5;=s(p%mNt@`-!okW08vYRg zk8zlqGKw-9GKwZKzxeZlS%Ptgw>RU8#s4<^+priE2LTK(Sz?&wz^Nk@;!60q03vlj z#sy&GDu~np8CPLq-oa3^k&!|Fz@GyfSy@1XP;BfX3?l3dUM>Rv4*WU5xS5p^)NTWJ zNkOA7ps}U^7M|Zd|H7?~I$;l=8}#>&PD8H#3Q z(%0Y2!py)94KHR6Rz}cBIVijs8BG}t8BG~QS-k#8FiZS-!Tf@8$G?chi~)=Ri~mJ< zgTkzsfr0r0>vaYh1_g#KkT7F~m2`^mm}Lc*bUYha!6ls%JZ5=7CEX?wAvrIX&777B z-uCtmoD2?}3?QhgZM9K>L0@1egB+vepN&Eye>Spmf;xe$0vmbccQT4G$X~W~;7)q`IH5zP-M^11FDzFpn^gFvv>|oOTZCcItNO5DuGzB%36g zB!pw(plhLPp$p<{wqUd4(bw14-z=|gq$_Yl;0h>o-i(jt-`drjDjy zVMqN9jt7`GiZZxtVsNwuH$kkmKy4FiM**9S)()u_(wiDg9YG?Zj4qLpksCx^BQ`o( z3)pOQbg%$-#f*eZO&F9FKtoQ7Mk?mUY%EZY0)rr^51_85ZpaRq^Z*TKh#Q(48Z)zr zF)OjLgPWh`W@@ZXxrhF3`tf^voUMQ z3C4qrZj5e>2miJGdw=`i9CvYP{;b`z9x}Sk5$gLp!@!v-?Z>jn*vZ9{cY|_;ECU0p zHS0bG0S0kKHgMcC2*7fM1cMTEoJ#Kq#_w%^ z1e80sGBYzVf;-d)4jkCYz|D}lRalsbUz``zI@Eu|uvwT}n0pgH6OZ;*E^ZMqc3}aI z0|EyaHu4I9N5}Zpw6_T`f}oi8HePOCabZR=?Tzd#U`aML?QNhkl!Z}DdmB3!yO;>0 zm^R}^Mgf5fn;e)8r0z&@1# zP)a>>*V*T+BL6H(>+;h7PXGJArLU$KG(Hpc{|0L@>oW#fMkh#mVTYv`IR-fvNV;GL zrx)H0?BMhw4^J_(@6Nw-mk%*8F)U+XU`=J+$H2!R$?zKzSMYfO zDR|z7%nNWp=LMwUaRqK4Ze+Ez-^lH456a1`PTE_zdHA@Uv^PqK?_gN5ffba^1q636 zY~H{P%G&~h65`-Yxk*xjADkx<^92W388>opfFf3eVbVrMzV%6ajU&QKxGf#6=p!MPPx<${`{S4oDGkR&fyy8*veEt^s$5IJgBxAaa7-f+8ID zB7)#I{qw8yFZ^-m&gukYxA{2~Bt}2N9Z(zJw@rei9Ly;Dr^N z8N8V+?d>;69N5Jm%8<^$An*q~=DUl5gCUK9N#M_B0RblH@D?va>YvR5yaK$N7?^mp zw+o9332^g*hFCx$3@#gmgh6Rs)Ik`M#y2r=af1Xn9Jm}TEMPod2X2UTB;#fwZZ2U^ zv@kI+F(8V{P5dmPi~>iFY-DHK!6?6pfkjPwBQM_$Muklb{A%E+W|Z5+AgZQqXb@>^ zC}^l?C@N~G2x7o!kiZ5O<3CfF75+S6E@#~r5%JGHBI2KL1Zczw6l$wj_b~`F+(QdB z5qKJegc>t6)I{NFkQr3JY-Y3+_O`d*zrnkc(3YBFBcSuzhw}=D{41$swde|s$ zVE*;zEYsP)#>ucy`I`*thy1_6x{&o5gF3@6NSMHTL>lli6w)K&g3gp`!ovhI8^&g4 zzmXxpexrgYsKR9scynYI13$wG1~!2=8@bp7j(`@@Z{DCF@MfbDgTRqZ3|tDJx|7Sn zB9d_8@ai`#VR)!s95C& z6{~33l3%ESUkH{hnc4V-z*$d-pN(IL*;a@jd8SlI6e1_eAS%RcCn^M(X{d@TD*fJ?u^&Wen6@R|%fxSeUlWZF~h+wDh5h}8yQ)4Fv@OX1SKjiUNDmfl&7S@=~7Bfdn3OPm?;QK zqO5G<65u2%%_xn?pPRWjMZnpXm!Fp(Aq>imf`-PB90_G8D}%Bncpi3MathP`1N1I_Yhc~mOy*;ug**L-8;Q)Dug$<++JVpR2fk7@+R^A126R07| zz{sHd{|0j|>pliihJHv~@WA3ii~+WeoCh2itQ&a1aUsqq2aOBJ2rox~{YDPK9Sq5D z1UB+;2pj=5IyW*ffdZO=SxuX91CPLtRjU*?GPCYrNZG<5${@-kaODViA`K+Bf#=Fb zUS4oI=j8#Vb6!~Y6&$c4pl*@5sWEu8%*@n~X<2g0?NjF-aPBI}&Z%SF_xt|MH+K%E zrIpstYzC#RISdS}exS6)$O`cfuC&E~NLzAzNNH;$i>3WWDR29Yg5LHUxj=0r&_YmI zNSQ2wNHiSWARjVvscCNm57>aZ7u>wuyxgF^2O>pn*~GcU zSdvO@F`L11C~5rc-~H|C!Bn{o3FE42%qO7#LW5SobmTGE_jq6JFo)!SgDl=HP_Z z9Q=&1@C2_X+05Y00;+F$4s2xS+zF|04{T&&1&1Dsnl|G`R(4Q^L#hxNH}Y`r09AOL z@Cpx_$3#U9L5_aOy6@MghzL-8Ph((U6KCDWAj=p5aUZ-CmxH?xQi=;fOL2L4Spr(# z&ag>@$=m+OMs`d4jr@?9-zp(4E5igHHnOzbDlIJ~DJcb+G~Uc5%`FKoQ&>5`?q>(p z(*j^7sGeqE2Io8`HSLW;qF|FV-I=?QY$#39Q7$_=c{tZd8z z&Ji}!MAOM|) zmf-*;6D|%JZAhBnk_PdmWng>>UJ##~7slt71o0&$WV9K*H%J6TY!sFB+$hc93EGmb zuu)RF%R(8{YL8R|^=-kW8>68iI30l&nHUNhGAb)G8Zw3_B=+|+E@52Q-=C29FEJtE zUjpmC-?A)^e>t(-`K`io1ColsCB8VrCA3(Qz!6K5sIj!2o5`EsQjFcw{(!yxfsMl6 z_FF|ngoT8JArZ3?DL#-Q0W>}!yNQt>R1&f>voZ@DXx}Ktu!A8BG!eOxLrega<#=~6 zWNj7@5)guvuNN3Mif{`Y*vQJv0SQJi4p7$O=8)0eC?EtC;}!vliHgX88e}Np0}dxa zP{0^6#v~+^S1>(DNXX6o%gws)cPPv1UrsFR8JHLX{@-AI$@&bm<{aBPEocu8l5UaK zX+eAZ;C!{4L55)kgEYft*gCBM`;Ba7B(2k$#30QuchIiWg0xH^q^S{T>Az=;Qcn?WkdS{%{w@6%x`ELPd^(Qzzpej1 z|NHW98v_%#7x9aAAA=BsETbeOMGC>{Jw&-71g`fuHVA?1Jwy*0(klbi56qU}UKwb7 zMMfGvz9J&R4BC^VzmtKNVe_BOBD^BJn*>2k5^i1*5peN=s2?`UNDCa;2oh%8C=2PZ z2{A&G;(^V)LVTb_Jx3UKGDt8?0(ag(eKrYD&w5h>hXkn4CLt?evrz)tXG7Wq;2F5*#+t63Bfv5ebN#2)Bp?hrNUda-YozytZBiQe_CkhcpZ~ zBr_>o`}pzNzvqjSQ;sus&z>-0_P%j*u5RGosfeS>V8!~XgWoEyNL5^Vs1DC*?&CB(hQR}@+yKF-Eu0RdEku< zB3BM0ek3Joa*Yf~8EZE|paxW=bg#=&S(Fcy0=dmmM`?-CABg%Unqm~g#mnIACfPWAe$CIqZOch0XiK7 zI_{{d%B%$GFv@}Qg{qvY+$JSv9_@{)ssaZ#^YW<5fd+#&iYf^l*{Gllu0NI3w0AOy zFx=cIs;RwER|iyJ>nVVm3yjK)%8&y4z-BpRd6feP1VFh&6P8Oh$?|}NZBMHD5K51QAAMS0P`jWO+Co)2W0qAPrzoQCYG$Es?(sUgUCvnI^a0h z)M3@p1irmn80rVQ$>D=Q=ApDoEup0B>tE2t{A zv2rlUX@BJqU}0gY>;I<#%1&>(8rmoQQ)b~ryanIsrv-~TBY1~a3mkO<8??YtXAJMq3V@bwHwb7M z8^L$_K{=3}ep-;7ej9}Y>^JH{a^PkLVSzUrC51uT{8$)PFzAA|`Ed(_hK(&Z8tQ_h zgPmdS7I6(-VJ-0fJ4VKhpkaZHlHvjfHb@F=ki4={N($Wamy!gv{G~uW+?@=H43oAP z@aYN*fHiGUKCscyK;XazLxBy3S2i**fHg1}f;2ENOnS?>6LgdaXnq&8Z%+WU-fJ_r znt&E4DQ)Fe13|QXdyJbH6{SHvaYbnXn~jPN7Ll768Ne&Q7}y1DHZnL^L^5nrPy-Eg zZ?;(xF!Qj0|N^z&FLC4uz=GX1B)&TgP{!zgP|^L zTvJ$53Q`71$qCCzN!rOtNkY~&8LEL6l!15Jv4VHyu_!9QcI3g9im0oCx89h+lW&ReS4m?gi`Wso7g}V=#ha-H1)hLy++5&+CJt~11GIeF5H#9h z2pvsRR%YV+$Ir6zAAfQRD_=xJM8vO842%qm{@-9#XWhpj&hQ@M6L{r?XvIP*FEQw- zJE9dU1{$~6$Z2W6QPk3YBXfW~XsBp21GB)JjqF@IK;sjfYT6rx#lTEaP`8MS2hTmXx(ZekGT0+nDw!dwD2Hk*YUgfWumwg!Hl27dS! zPi8hAesEIa;b-ROVYB1sK^`W84pckbVZ ze^3A2NKQGlYuCZ#6ej6^AO4+XRA-c7Ui>HL?A5DhnWupIX_^cSth%iG82A~!g2Rph z-j5VukYj`Nzrp=T25x9SQV_l)0yO zPFP?7b+Va3&3sS~9I1N_>y>ZgVB=upU=-8d%FoZo%gYDpIxueL=j8^CK3Z<%<@Ze4 zpcW9Z*@0J$UqI@FROCihhKl;nVrqL@3#cYi(gI*j0}nl4D30q`xvws z??A!{zM4cE9!}uZBn&dp)g(Iba01V)Z`AUJ^kn6|?HzbjRrsZuEk#A-xj3~TyOixg zo8Y%HFlcFNfeP6i|?DJm%{2^!?s$iOIY!GTkg0esjKWapnIgJ;SH15o&C8Zbb@ zS55|`N`XO6K~6yqqDoEyrb@v;4y7dxYQK>?#F2Nx$hBWHH@zxwR# ze+M~uxH$fu0HvWaSyOIaGbxs?-!;+}yxbPDEG@sBSPEq=xOvTGe)lslGN>~!u6G0w6ngbp!*~-gmDIxM8yZ8aG+ z?QOD*ASkB2O-e#aLJE`-5d$IHM8!qLMM0?q)Y%3Ng>7VJ11BL?HSKN8;DxDT+S@>x zlntbln-46>tERn;o0FT98>ABw`(oORn*|t!WWlyG%L*LX$R{Ll1QM%k%%E6d0xiZD z;N#fD0bYy`k&==HMKGf*q$dwqt_>YO6BPpK5)hKn-pDA+u}NGAG=2ur#SKmt0(>AT zW{yo9d>|>tO$nSF7+If_lN*%vIXKwhS)XxJg17{RLUD0XkU|LwDTG4MU>#_H&e+%x zHqHX#Dl0>{%F60YT>r$Ys~IyHTgof`{$-M=s`{7vuduR`=^oRAzlWIY{_6e}W%BS>q1HfPNRDbC+FtBU}&!F9ggeQE}s|Y0L{QtcPvg%a;y6ROFo^wErYlh82 z-W-5Hwp3Z?qEpYC?q6s;LibpO$^MS{X(0B8H5CdETK)DO&p*lcWIlr zI6z$(kSZ=-(Bi*MoLr!FF^t=}I5-8^7{Fs-M+B}MIDp*1;pGR9pbDsIZ|31-0-vV> z2|Ok)P`L8IOF15J^~S^i9?CLjG*kq)ghWL_EKqaERG+!~&mI=rKc&oFziZdBBt}Gp zh5w!(5fR3~$k6yNkBNcx1Y(yfyjDl-as}7wjIhyR#4cCxDArbHCQB~vK+sH%11EuD^+ylkLD6 z(4KP8q6^T57eixF#YV>ZyLbOJ{>x*Jn)vg?L~Q#q;k7FZYVFF%46R*R;jsvw2i?lV zXvx3~-IvM0EO1~W1M@~EM$o=Ya7ANi5Xs7D%*c2Nyf0IOjpyeVQ0lS#m&dpRIh^35 z)QE6`jP}8HOe4aH0n~Eb%E@KP#0U*176&F4CKe`8(0~Ghlbw^D6U5of&d$OD4yUbb ztenhjtojGeoM{KGjALa0K~?a|xD8z36_AFCrr_BiQ$<6@9se5d-es)+mp75kVj=?r z>qhTNpSPLLsT04c3)JtZ8KfcO@C2I}{LWTEVMDH*;9By4c%qW@Key2JNI~ z+`_`l!N>+Guq{CukP$R;tjuW4q{g^??!Wo}7R_bc=EmCcXEM{Fzjn;IpfF?j&%{#v zKZ^mr6BwShh})+N*)N;2iGeu~x)WH`R8f?r_+JL-;67QFeT*Ae?;&;pBc}xDDmHLC z3pph~#lb0IGgByoxBVN&oea#3VjCC*-fUn#0rr`(Fr((bFZZ{w>|<2;_W-nJ&g=hU z7CRO{27Lx6#wU>QgvY-#yblD4e_7}(g$tvc0Hjqc3yS}Z>VEbc8T{-wN;=qYl(gQ- zunn~1MgY{ZSovlP8>guugTR#o7Y=|nSLz(tC@Lv%WRrs_Xtm--Q)>a6O$}_Ops_+z z&~~N=7=rv~!3^?~1!Og*tRaXa0$GhI;u^8Z(7*!JJ2G@I zfcB1%#z`A2OdCusU>$8{Hd705@5sWG&D4U~*1{CrJA(G#w>4N;H(0|JGca3NLlj#x zSX(gLSzAE5ORS*dE6mJ6dnnCJL5Gnbuf!Du_n*u~L8n}R7Jjm^vk99Tvaz$Xv4JN! zLAuP%80XL3v3A*4Ica6Jrjq zlCu~K6SM4!{t2r@<(b(z%``c~64TQ*Y+SkM?-prA7M3P19t%|$N%2a?qa_lY5<;P# zQHj20F1#|b3``8={~xm`v+iRMV^CxChon#VdR}z~B~C~>gskV~hOXz;V3ZSth(mj4 ze)bzV9PD>8$TF zgbr+AJ+MLH$OfSU%$r3SL>OFLHZe$n7F%p;;FbazETte|vr)>yVxtJ7i}a=j1u>8y z(rR4=DFK^}3Lx82R|`6b%Qi^K!qNr@H>d@v=fEQ+%ONYpZ6hlM9w*-bI**B)Ph1L| z6r{xY#HG0HrNsHTL5l;0LG5`#Lo;zBAyEM)WhHfWLs3IzL&V-4LqkImak28KsIuLc zzJ9;GHCu2c(#`}=e))4%)Q{=NKnxLd5H{_2^N2XDPu9Sgcvgu(Xz zW9Ex2e%Mz5azkPVG9H1n3J_YVKnBxU{J^UKx4>2bf+A3uVI}%1zV=Z@AamVZleVM)D zjE$$RFd8v3Gcq$8U*1_ID1*Qa&`P5Vn;azNK^aR@9+a`z zBtgkr5}dK*!DYQXC}~GVZsg|O!Kk>2flm!Im$`#cYZC)_T^2JlXzM0uL6Qu^f{lCv zpgblZuz`CALk@@s%3~r2HgFx-pmbn^C{i9%k^v1pHOPR=UKtSqn~gFKsjy7Orv!2Z zQYKT95wO_^S~-lC$K)j&WF%pEjG0YR2Aq#%B-tcom~CYw!R0SFk1;UI$V24h8RTV{ z?c`-(#VwPdiIB08xVRyBR0=#jZEDEQ#*Ek$r^Y0E{ol7^M~nHQqJl%j^H)vpncma9 zV7e@$BctF)MvdhnOxnMkCMotYpFDW!*tMgJZog$gS-EOJ2d z7$g>9^R#O4nj750g~j4VEx{cOTQ({(2*|$C-YCW(aAc#F{0@ed8x`3=BA~MavN!Ya zFo4=f`hPa_sPL$O*1KtMmQvvcABDHcL0$z^-^r^8*ld<^PyyG?n;2BU!_wRiJYYU( z7c-9_C@Bc?2-s`}30qje6oE8>Dtg%JGiip&Tcx=;IhA>LFw6t3Ljz5V3tTvGK;n-C z;|5NF4PsX|ii(13U{Ntp4J^tq?=2(aCI@L{kVB-E1#C7-gI0p8DD&`wMvNFXDR7H= z21jfbbr1tPM;a=yQ52j2Q6s)VUd2IL1s3saT+)!pm6m6dm*%pOm*#?>QpU_C57~sN zBF`qT!fdM|4^9;DN?DM%L68?_5Cb!>AUKuq3Ni@tGTRCA!cqx?sQ~EU4^ehQMbI*B z@bX?`LpC;H(7sC0aZ>DtOqP%T{b3Y-afy+M>CY!_JD(-#vjjJ3e8}f;^6c#kb>@?0 zRQSip$7uiW#6O1xA!#L18+J0aO%0C83T}stbu&q@US^PDcmqi-@Et?a@VybB9Yc&8 zSOqq*^6(sJ-^swl0II|oH?uOaGQm3C44VX4yzTWtOR`tK*~!4ckiC&xK;X)s&7fm3 zHn9lsXm94`26YPs4s2my;E<32wXq?qYLquIvZ!e@fE!^Oz)R;h3Q2$xgpdTrR(Y^9 zICG5|rvDnN!^G`bS%&FVTE0`BCJKHr) z1+|WY{@F19WAS59V9;Tl3<)(ZSZ_lYUQ%*_dmEw~xWJ=Qdhpf2em^K)j>g`s17PFc@;qg zl_I#fRA&dV)xoJXl4TPEJA-F%#4d&g1_lNRkPHJ@W}}RRz!8uvXdZsEtOKajOSOn( z+|0!#A_|&d2Ic1Y8%0FHEnQ}YoJ}I4q5|M{uHbBoiW#jbj>D|o>CjPs4c(*cRAFR+7p7lrZ z-^YJ{RxAjMWx09a;?b)|7CwFq>ixAcFffDGdCN0=gro`hsVoZc7AfRZ7XA(L;54Dg zs03}1g4c*{WHE)T;p29&-zev8zl%YfA(??&;LS!3Zh;dUW#o4-DsN(xQ_}_?^r#3~ z-v?Tkp}dI^v=Vfqw9F2MoXw2#jPlTNv5l-U0tYqH9n8l49={#9n$&{}$Q#oxoAeAUUoz~~5G zVam&}9TJA{HKu&<(g?oBG-op-t~I6`IlS#Rve?^i;^t)$xN`;^U`mhx1Fbbx-o%Kq z)|7Dro4`gco-1bz4K{PK@o>2-yC*>IIstRtl-&}#+`8Nn5a6n*^&icuE~SN}&weuh<CG#ti}jn-~NbKqW3Kw8Rx)6<~#zxEnbF?Kd*p+iw&SxpM~G z15twXKsE>nY~VVwnL&V=6?DeHMjp_@%nhsp8wG{IUKC&z7DVzQh)aYQBOx6F(DGJw zQ_zu>h9DnyL`5}B&{S6TGlzK7VQLHOTthdufHR;x(aFHT!U$g5$^!8#(%M#7FAcnI zngMBTs}Q7(g2)r_wXH7p;FyFaebCZY>Y0FRLh%hI;8M>FUh0X1$B85%S#=|*)Ds5v9po93Hwx?QU`XD| z&Ca4`>}`KU-~gyn+-PV5E&+|zv^T1#gPCg3!VsFb#ihWalHk>o>;{IQa*xr3(F9r? z9yqXBfFHE)FK3&kx~96ixCv-&59DMr&{}30DUb%x(Z5g)teY4NLDlXiO?5+1K`Fqm zqO7Uzz$R`HxrspqwA^BojFgIijm=hZF&QZb7IBNn9SjW{#mzheBM?FxRir!>HX5pX zDs+WLB!oq50V_`308)-37Z9;cfL~oxS;ZlB1Dm*o^mZr@WFOHArIjKf2)!Vek#CTZ zhZW?)V(^ZMu)K_zjl2x_WEpU$g_|F~T8LXmlix;1lOH@V04d}}4Z(#x==@~RaX(lJ zdqb3xKQv6Wa>ayDHBs4;g)6p4MWrN^c11-+hgZyuiek~5Z_ppAW~kb}eZ^lvrcG6K z+h+e=&U7~=^UT7(hastp`5lWN0|j-eJqdLxG#L%1Iu#n+Sc17VG)x0hr{-2Q%>V`F zJX1)Ox}difT&05h^eoyeehfSelGs-5V(kq|qxJ?tt9Dm1NHc7Kt=jdo-^k`b(yHCb z4AKnqu&mleYGw@R>5AZUP8dKZD49Zbze1XaOqTcly=4@>_kdC8-@6BWD^~RNEnnUz z%V_cUAEU*;6aW7HJ2Cs-o;~;P@7Z$?G$#2kl0})tk3oV#oiPeh7Q)B>HQ;3-WNwKE zx?)5V-YWo~zOa$s&we8(qzqiOky8>hCdm&j`ouw1y^H-uVSZ3wKpwOO8FXH~&87xU zc~G-j9^4m@V4&G*RrtV{06#4D7HkyY z2gM%0zy?qgAH)LYh_dv zXWsIuol`m+=S`JmbO4QdX)YHMUH40yNtwHk`Q)KXMeTYhcn;YUNjS$AIJbbL|BBG$C1fv9_1hgpu8t!1+z<&U= zW&%9qCu#^fSlHMIGVlQICCv*B6PHSxDk-HpX+Eet->$9P$+?4Z{UUH(==A?F^ES|& z9LB0y4VYIA805Gijb{z8R|Pg`fW2x6FVaE7v|AbkGz<+qySh9RLn5{qLphLDvl_5f zvwrp)wH@qtF~~4%0k4`Bhpw7k$)GLpX0r;nF!-8@jr!WqRkQQ9h^c7{Yk(KP!dA_K zP95AJF0euT%0>wZ@SvQ8IB3*B0yHSMlR=(g@)kWlZP=<=#RD7l^#l%V&==UCk61OU z57NMZaodFeXz+M5w~ByMFc^P2=#9G+RNULTwwBf5}wOQCT zY}r|~H4rMdHK44T)z*ivn$>1u(6?b>0AGCpE)j*rB_IRM5;DRv65@6;65<%EW+8W3 zfOa4v9nuK8tpdDe7IdzTxFORkj>g=AQccaOU2~kBo*sU5k7q4!dv|56re@8q=?)Ip zckI5)&h#TP$XFF)|IEb48pR;N z&<4qO@bN=Q_&hOq{19BZY~mAP1&=B*Ze|r>6+v`mnY`^c3-Iu}*dIBtk&ElVfz9lK z>_R&jvi}@7Z~=U7K=MWgCV?YwjxcWFEL8Woqty*|Fu`q z0{Nx;|6}G?EP4zI3|}CAk%46_MR*w^1I}1{8)U#4O9|eW0hJ*P8x>q2MZBb+J!m)P zCP`62fdc}dX}{z*8#%dmFe+_g0Bz-!l?O8w)U-G934jU_2G9V`W?30o8PJX|1;!oV z4*!A8B0`)Tpppc%=m=htux?^d08L(R7UJMk0NuOdz{Tgl;~?a~;lK$V#6hoh8(0_{ zSQue#e@Pie$jWR+7D*OH89Nq68OW_Dka=Fvv8&+Ci^|G|riO-Wpn)_s@ZwoU`;1ah zOEWY~NUV76wr!v?>aSmW`N=g**1s<;mX+$~4U~6YZgg|R&#TZ1y zM8rfOszk(KYiGp_L?A0-IXQ)(YiGF`K&vP@Au2h!VQXi()i@z4#knOwN4Ou@$Oc(E zo4X0Tq-i6s5NLHhL*6D4A^6%^c8MJfd7GppU~69`I6-_)b{HRBo=1EKL+&OqahSX~ zH;B*81LGs)88@-BLD$J{5|@Cjo#o|$iow^;3L6><8yka2&o=UJ0wR33LiPsViY~H{o0f zo3{z)O4!^@I9I~vZKCT+Sa|%xcCLeIamJc|GfGOn{m3u)H-oXHpzz<Tgm^7H! z{xvh!{{8;;S9JIV&I3>LelUu0emY6gB0{u5E*!xAO#*# zV+*w3#>XqjCMoD*e*n}z0_6rqXy(P(-M&+S6Qh)j_9js&S?!HNA{?7|r9ewtH}dfc9AMmp zyndXKk&R86P2E&X+{nz_9JY=XOf$dyml-#CvVpp$oo$c_^S|P>bVfNwrKDsQz2ED< z&tT+P&d-?ADahjRr<=Kyfsw(Ufr0rTiynh81D2Jopq%jk59Z2NXifk%fWa$UUF=a; zwq_HtvNfB;m91)<7(iQhKr36-HZfpd*_ykF2W4ez?j}4dTkV;e{;p$o{#(a1@lRbZ zGq<<5oBN-y-rjBuj0|D_vY5hHPcSGlG=kF&BL^(qD8XA|9N^Xq!v+p;>jiOF0(iyd zW`0YCK+vg=k`f&3>>M2Ypgkt~XF!q9xPe1p8#50xkE8_qfddEbfY!5$IPi$@h(OMI z6w%+J$RNNk3%=R~w5E_v4ZMmBG@fE=VkR!C#wIE%06lC>P*gZtJWsMSld z+}+hYJk;FXv;JlAHnhJve5&Hq;WzCKyxkl|A?N-*%CL}>HOu(-=v;^q2Pl6W{Kvo; z#>T+F%-{#{Cw!EJ$W@leD`G*D*~J?eKqo3k3JV$w9-R7*frH@($R1dDD#5}NZjUlN zJi%=kMk(lMjtYEVDL5Z)7KVl=Czq78w3L)Ea(GG!Y?Bw07vtoThJ`1egBYI}ANbtI z4Sf1r7#W0wSz+NRY$|4EYAOIam{(0*P0-Xtjos8tOcb>GP82k4EyB(gh6qPU$cBaf z%K`@>qg;lWtfWN-qZ}v*yOF}!!GVF1p_Z|bMW1OFgCv6wT6iMvUxE0O7wS*M{VU)# zSq_{Gk^*9!ygba7_D7B!xpU+Q=%{#MGjMN1476>}TpYAgNe#5AREdqf*0eOlI6urW zO7H zHxRd{g1Q?U85yAmobtgV1+vT+c6%z1B{TT;R95iqsoYm&cQSAy-JZ(H4Y@s)mD{T) z#bqm_2q);oZt(4?tc*gS+f&&XNV+|hQCLt}Sy0&6&|KNnn6VpneJa!Czp4Ms8Ba3J z?mq|eYsP;e7HL)v26YBw#vVv~D8cfv2|V2?f%7rj1|@JlHidhU4OISbkkkjQvfc7# zgUk`|y4nq@`a2o48CJg8z;I-%tPCRqgA6EBTUu_HmXl;smt|0eUSi3xolirOR})EK zBfBc-a6Kg@&{8WshIt!RB|#%jY}nSif|k{>VY^CT-dn~kGP1I4;H}gL95`hhKph=f zM({g>wqplk_Rt0T@R4Bo;DS|TaV z^d{We%eq{At%#?%>>YKj!l`0wW!@dPHM0wMjdX5i6nLty{qN5$Dd`DId}P#FIW9?? zWbZC@5as*xjbY4jkC5r^f@@2(RzJ zY3QJ5sAs4LGHHXM{$>z+6OSB^_GU40(BRI21Di!f3=Bb?55_IxBGRI~0!OYKIpV;n z#UQOEttAc8=fJ7QAg(8_Cl28lGKd(87>a;68!fa14s2Fd(q|Aj0-DHcMI~GCF1&$BUEqsciiqM-r#gWP;mMGmh&hkNl?uqv1-MSh1ox+?# zSNgSt#28sG-~GLVeM)1)Tt$5`#*lvx7==@`%^6!V)I4n6++@_Fq#Sf?#N?%g4U~I) zF2(B`ODfg}m^%6GdiLwiw8b6yCh5`I^{h^QwdKZIjM{u6;sR>YpgeBLaFNA|1+)i6 zA6Djy!s5;V9(SVPxKrOC3XVHNc-(<+?%d2Q$H}9AM*j@sW(IXOQGqi8psgg3OLIWA zf{_`c8sz>rHB&RlC2(fOX5!$R;lxD6AlJjOG0!_cZQ8kW)25yOH+y4SWzc9?veFnB z8Q2&YSaMmL8FU!yAn8#N<|kdapA`8)Bdr2*pz{!z6`2*GLmG^m73CD=V532s1>`_7 zp#59CY~X{a4{Q@=5Yf?LQvlD`9yqX(g_*;FlZioxNry=XlrlC83h*)Ma~xpUq$9+5 z-~eRE7JPg47AZ+J2lYEr2M!!?;8bByS5a31pVYirT1Hg`bV=PtImI2I3#&k5F)Zxh z?Oxymc(quxK>glrpsgzGpuJ$+NSph(xVa#k`#@DTxC6|hC~#mSpPaw}Mh8AY5lI;- zAvq=;brn?xMS&wnK)q`y1>L>J&H~!g1Ui{_BR3bvCQi`7ywJU3NW1sgIXO0Qfp+h) zGHy!X;`Bt{E5^kI-o3}k$&S2NOc=C52HeF2x2_Et!MC%p8;XKy@LUP#_ANz2Q$uyb z7)H~7r5PEFDU2!U8UM-{&Hgp9FgE?Gi;4YL$JoTeG_8cG^6zq{$iM9+Y->vXO<*i2 zS;NM_#BlK6D#kF@Q1JQeIgt2&@TMhs?PwVVv#Q_?}w4xBa&{5JeH{22|qs2D}f$pIJHMEUTR(^|%iHVA^v$2DUInX#L(jYLX^##6?LtPC- zF`9txK4t@5YYeK^%*@T0Y*!y;UdNsu9+@{`%B8ifYI;I(SJ!Mj%e;;~FD{{M>dY_Q zt?K$*acOCc*IO23`Y6bTrkqOml9dW&eRgbJMp2T#MZI_S)`AVW^5Vkj$+Pwy-;hJ`q`SwL+gJ*SxPr>WAeO645v6Oi zb|@k}f!jUXSs6vxnMD|xy<9*i{)18vqu53k2GH^JO!{x`ykT_UWD{j!5M>f&V(@YS ziGa4b8;dHd8jC6i?b^lYvuhXY@=KR4F);o4@c#ibKkI$a%sB&iMu}mw00Wzt{+TOh z7&r4Wa|(l4sErN>0Wk+&__@9e%+TBXcm)^)c$sYkAd7mzBl(;>(Axur1$YF6Icc1cVe*T-vn9az}$j+F@cH0~dI)F!AR%Z;(BU4H|Okp z_wMA}3sM~-?HP?TW>=Qz8;~%$~9@HJ0K3|Nl?^KVV~Kz0au5 zki`VrYRS%!&CJZe0NJ<5uu(w8bEBM?XCnCawG9kG5oyxtkqR3aLL)ZFDO+r0k`pwQ zR*GcY$gA$TQBfGHIz^B=MXoW!&273l)#(YT02%pzR+k842CZ#}7J?c)JLrkpr6pq z3m3>XK7G*A29`|>A{-!NML^s5;LJ$KHENq2kVF`FGMF+f-z32g+Qj!}Cj$>d`DSSu zX&LAiKJEh>^sa2sJ+MLZzy_@g;4OS2S2ili2%OpMDC5iwT0F@J-nhr0X9}{=R1f42 zQ}E^yQ^>|W89k7vkT&k=>6!}I*lgBw&;@x4R769!)`70Ez_PQ>+{~OEl(;|}>#*;u zQxsKX6wa!s&Q0@{kPdYB3}i3h=x=H65EkQ>VB}Zj_mJl2l#a|YbPRE`v$Kw{k>h7) zVg2XLl=gQPvwccLSRNM_7qgNqla_(GSx!!B!oRhW5{%5uQ7mjqqB>GujEb59oLro` zn)(LXVv;;kQvW6X`m_A06%i9<7tm>m;Us+Zk0DV_9Z1NHM6wY9%RHi%$)H zDzOwefpTn+0=M|o;c*Q<{S9xOu&V5rA2laD6Bk9n7 z&Sp_5F=^#jHyKn0D0DtOx` z_)ft{MnOZQpX$m_S4g^MQG{IhDnSk_}pz4!WjEn@0bBM4q zGfiWyq{6OxOX#k8VN*p>5vC?q=CU#dCWd@w52homa~Zf9#2I`+KHSL22}?tW`&~h+ zsy8w+Z{P%{A;k5r%%BmsE&L3kY?k(C?wn!V%)>0i3G0p^I7pqu=nn z0dm8086`J7&w9(ai$REC7U@%bYaVQjnYR?cbuw zr{Y|q0%9VVTbS0)ZVe4#nGsv%72qT+Ue~og-5}7x$tx~x@^UXPP>66bX)?`XUBIBv z0KMH=4wf1bV?%P_5)FFg4i6(@a7Y}K95+gN*>B`Ax8KR2%&=#Jl)#(K!a`Eus&=E6 z7U*_oZH5hRHfw2XX>XF^f!yxA0eri&oD}?aXE}ila#uFW%Y&C~$;*LOVaYShe#^K) zPGAG(?as5_GHw(X2aOS{G0c9mQAg~?6u;1#e!{pUuf;UcIu#ml%BO*RLJ~qNpA; zGyd9k_umibu^EgE-Ty+ELFO%lUL;-YH*&hz zZxr+c-=DHcke?f|en?DE;0WVpNeM~Nn!=5s#WJA9x(7D%@j%uHfd-|Z70rPIteY4Z zI6))iJRF=1kTpWw4qOgANNa>Pib;Tv*=K~W`!N<&HZ?S4QwQz&7gQD$WVA0VET6Y! zb;-3%OOY)sdVll!`;Saviuipgy^YCI{GTGzTc)?5G^_e=F*E3NVnK#aV4s67Fko=t zWaMB(G!t3CX_j*X3%CSDG!r3vj@d2kH*g%-$ji5rp_sv~?2p8OjRJx88@LW^W@Ka+ zfK|qm3K%zWg0BA&04+-wWsqhN-OR}Vy04e(z(yYFKO4Bg=ZOd&*vK#aX9MV%V$ks* zJdg`x7+5?5A~y3oFo0(aK)Vtn!M%#j0uF*;p-50$AH3SrdxH)9+GZYp&!C9SJm95O zNSe4DxM2-^Lp3!}&rs1&P+8Crbagf3y`x_~A7hf4^lJjse#T2{)?WVclx^P6BnC!? zc}%H{CCqjV%&?JPQd8kh21Z874b1v)b}}$Aifv$Egv?zUiz?5%c8%HYCIcfw%s*o$ zAqFM}X@)dNY`||wkb&13kQ)-%Ht>LBLl$0VfJaimtBNG0t{ead26!BG6Q=|39jP;n zTNs(7BzeGtnVW>AL9KN|gGg0&LvvVNr*00O@`Ltt)Xf>&Vr>FrT60u#O_Wr;B&;ng zw7GR8m719v*n>PmG9*NTcm=d{l=L_`)HX9PGDI-hGM->vz`(}<-Qfhkdx#(2o`c*y z#JzzJ>~;Z0Md&C4BoFa=*l*-Cx8KOjDR2k0@~+~|M$pi$`XL2E`dfu%*m$LRKr8-j zw{r?GiwTIafy-_EBl<@qKqr+{Y?R^=xbuc_Gcz+MCukiw$e1|{(hSSd_g8F|=9C5Z zV9^Gtc!eDV;I~+@aY6^81ccdy1vqVl1&{}upaW52!fe7~%(h~};K3&F02Tu?bRbGh zl0j08*-lanyki|K$H@a7_!8jd;T7Pt7vKdCZbdSJ+d-g784)&R(82)7Vto-YV^B+h zv3&N*m9s%OGASt%g#TS;iu${Z*?!}q#hW%QUbHc@s-UpCy0D?yOsj#`Bx+$xuD61-ras0*&MyG%K7#Bn7erTr@-Z^Dp{I~Z16{eM} z3mKRhVjwAp30A+u>LHm;OyIJTVFMF5g|k9Z&YwKc4ZzwATN#)wnHV7_dTnNA06B_d zBQxaisLD;uOppt-85xxsnO6R(Dr0VAUHHqG^(?5I9{jnBi9wXfmZ^uenSq}{oDn*+ z01qKVdmIu%&?!$IMnr=gG}O3(2{Hq;!K*BC1Md+DhK;P&_8WOU>>W781q66mg#?9I z1vn0{fU1=P8#&nz9N5In$iIW3?9YJ%n;e)Gq)td}!NXu1-#Kah=A z;K~k$a@UP)pgWm2Ik12fN`vp>irl~}u$i5QjhEfVW&`Ju%|ZhFd^;G*H}bN9_Rt?W za)facGx)kl$dPv9%sUt=HnD(?eB@>0*dzo#@{w^Z(73XV_!O@M%BLN*P7axmuq6}D<< zZut(*EgcL&;Bv5&`8_zdFfr`)=mAIv+th2#Z}Y`}9TH!J8$QDgA@7pRwGZf2%# zECxE`9dt^+u(GK!Q+j_7?+W%$*D>$p{*U!aZkEgop!vj;3=9l0j0z0Q4Dz6G*ubdI zu$c+#36;u>#=_d511cF6{yq5rAAC}FdBi~ zLY=VzWnp8+M9|m(P8au~xL8tJX`>{Xi={DLEFmQUb@9Jz3=E7~j0y}K3|b&xZ)9ZC z*Js$o!Rl>)2XTbyR%Rwf7FITaI|l^rfE%pBpsNv;g^lA+FK%yNd^#TFyaNXq6&SFF z>I4)wD#$8rR6uj1ET$XfB;{akT*V;Hn8e7+AjzNzawFqLUIu-A1_#heQBDR)F#&Jz za?vZ`<)W&{%SDYr6JnqR3(87t?EhAYCq&7msLFUtDeH43OD05!r|2kpiz*v%idUpb z3GoW)>%eG)KZ21`$0QVgNNXr<)@J~@{mdp2HU>|ZO`^OEUM^dNMcH^o-w3>6+{7uuEbwHDfGDRJ zh>zNFY!KjW5P%<9M$e8TJI;3ptW-9y1X3T_5z^m=vf$2w`ywgs;aYrdb9d( zHfyqIvVhfZ)zW0vWndA2+(r*N@3cHq(Iv2R3qpZmAOz1m9xH*zTDykh z>R?4fM$m!Zg38RR|K4AonZ*>&#K3{n4#!8fF< zGpK@UH3oKunM|KStpESPx4*pu*Ldn65pa$708!&H$Ve$|ltD|uQYd8_qv>`=25DJo zQ3fXMNUSFIF(I2MEsI%7qL%hx6QyLNaGN**#Y81}rHx8xZj{G#qk^;os)?X75$5YD zU=yKbA_GA;Ze(OKHQmn0B&7gz<^N}(TWrB0sSOKBMp<}BGIQ{7DQ)CIb0rrua@zsy zZ*E?0Hcm)L?qXnI@<%bT55+`oUZsuPXeRPvn#je&1vT;iR|Whpe8bamK`gygF;f9fe~!t6h=8VKL$uhGIJ1gBP=Aj1R$36YbxtL1`!5TMq5x0+Qxh#$1I06g9d+O7_o&W9}JQ#2F? z6@sFmJJ_K2&d-}SFPZT#qZFg>zg7S4{}WDOocJ%FvEat*#}}Apbu!I{-967L@{hms zp8)Iz`v3nyH{!Btvx8bh2B27DWM`Pf^cbF=*qN}lh}bdGyo9QR5HlprgKq-`r%*$v zi9O6Ra1+^hu$D(`$R>hY;L@_voH$MFLopF+UdJ?1N=6E|i4#yv#9AI! z1n8VK0V{3z(Z2FZ4f62fKu`pp41y-=j0)=P>gH<9ptZc>=Hl#Pf&vVRf=Ud6V&aU9YRt0#=62tB#weBkFa6)G z{VN>StYQS;F{`n6g~OUPplfD97tE$I&SXsPVw(T2W-{nr+2^x)+CUp{#MB`(~fcVm!duItkQn2HzeB&gJH?T+Z|ap36CzrLgt0IgxWY zxUQ6xmK0-$lpB~P_Mw=FwU>iwqJ)$LZWAY7<8?n+q(23AXONLoWfvX5ysJS15JMZ}agilCJoVk{UTDJ&{1AOsq*K->o` z!l1yg36iHoV0lUrUi*rG^Az_65pbSTg7-hbGo_oEErq@9?KeqCN$y}+v6X|3ot;@2 z(uN1kgUEu8lij?PPk^5vNf>-cge>@wh>e0G;014>1KGE-va?A^3WBOxMiE94_%a0W zk&7~*J+7eL9HI=9HgJRIt3k62#)hJXsz%@?QmWwdk3egrAQhgu*@om4#=|GSe?R%p zHaUg4c257lQpWCnKR?!eUl`x)-}jpFUk9^7b=yA%XV4vVo&O)ROk};xV8L(}5*945 zu&{)ed64x7&_Lp0w1N(*>1`4L6);=4EXA3HCtxvYjSC5gFics}7h+NSz#mkHN{~t!?|0ZXyoL;)6gjG;1^Wg7)KiS!4 zv$4;gzQ9#ekd={r0UH~if^}tjou3~A<3IAp?ZCInu-;=-XK;q*g3U}SEc>A2c9IOP z&Pp3y(Q<*aByuhQw;EjBTx3D51_s9eD;O9Ut*Jb27lAZxhw0+2C@yw!Q`+c)=3+NY z7dyK;LtRXRaXU;mZbxyWw};Y3Z!|Z0V7k%M#S`YnB@B{`F^ue#j@vB}Pl%FDQIqzT zhK}2br9#K;Bw^!qFd9_bK>TqODRt~b@rPTm(ndEle*|Ot!#MyN*7O;-gSdJ*lB;)v zT@9%%BpC>%5LgS&*%RjO|8f7XF*nJIN!!c}UjHAn9cS@luwn3Lh+-;()E4Tn+9DcK zTl{~zNgZ5sa&1rt*PJns1N8o%-2`qSZ&U%@ZRKFUQQFUbBfEqBMlGQo3|lrSN_&8A zJW&yN1G*n$qqwxdkqrz2I~hzER=(MyrR!v;0>1HTqgE*R77cc=DoX~?mYFDq?9IHq zD&P|${%q!r;*Hv*!oZ`wIUovjPldpNO%6^TpdBbq9s)L-8nm21Yr&nsJ83*rKx_}t zZj`OM4q6UQ4k%Y+nHWH>#&U8n0IzX#*{G!(8nICew2=n9`fZ~`^(NY(5MTVt= z#U=(zU65UtNLOPaiEMHRjRL6*jS{fg9N-WIHg*$36fbzSp#v|N54zQZR|sT^5U+sE zW*!G#2hgn^5JezO;9EU*GPp7<*u-F>E^y$$n=OV023+c(8uh>iyDJ-P4>)l0IT-L6 z@EL$B$4EZ?1Dh3C!73~_s0(bcyt2{40=zuc!VxRLqN^wi6BE;S4kyo^ zS$^jHEPkPiI?VGy7l$m2iU(aBGC@Vl)Sz;C|D-h{a_n3jhN|3|359t_ zCHh);@JdQOnHn6E@7pmL$60Ov8H4YjQfF`lwL%!!84fTBfLQ|HfDfn;#L$B)ijhgs-c;vfoYM)qEcY{rY)M0E41l*2b|BqR8Szj^8F=)e1;DWDy)q&KY3=Eqft6yQe zNp+#!Erv~yJHNrFB)iz}WYAz(xt&dnpFvpIRB0!}7SLV`d(i1L0&lj83h+yS%Txi- z>N{p;feWDV9LQaAXq$n~XsFW)4nOnLmsN z4mfb}iSvu`@r#S`i?s>Z2-vjqoj9>wLR?f#fFEQ!Xq-skz;*#%2~inlez7(_knNVB zJ3m>K7{Et^iyMOW%CoAQtErodfyZIQK_fAY;A;_~9WExT`~TiDGGAO(qp0VQ^zVPj zSHFbGiGk0epQd`w{`dFqtrdNJD_8dQg@nj58h-!5XgJx|B{r-&pwz3Z+;YkWN*k5Ya=QUHa-Ru2 z2BV;>z%LIOg8{{!HaLw1LQUL^WFk3Zx0ohwMKO`!C?;e*2GZCqrit58OeB5m7GfeO z9AUmj4o5Z~(#LKgCW3Mn%*5SbH$qEIGRAJ183O)aV~JrgWB~2=l4huYv`*pY{~=cI zgU|nC=$wq!Y&?yL88ASL+_!&T3w01HGFiLI~6X9Xo!6^Ag z;NKg@O_H4a0!OZZFNEF5DZGPG>gu}}PD|ktxAgQc~S<)yfV3agUDoT7Z zkdg+|#H~!oCMv05&Iqeuny9F(h}*>NC?;yEDQ(n5D-G2!O;lG>M>P?Yi($Ur4K@*y zixngZx)D}CDyqX>DGoZp6C9G!(2(59!~hRTL0%a-%-MQ5L5z@;mX(&`hm7`?gYK4K z-Nzu#pvD*nDHY&zt%&<>A#<(V(5((Q@4J-)-FGVix?2K#-|c2*Q?WpM`;Dv|0yj1a z@qzA_kOQ5GzEMsB)Fu)8bA#xIY64KoE z(h`uX%pkX18JZa*uD=Bj!lGX<5fxRs2lI9b)_s4Uuf%%0#Q*;ckaPh`Yp`^&8=Nj6 zX^n_<0ZVJriqMq7`0oS*1EU2)Edw)yG$dUx>+3UsHwPAPVrKG&?s!&J6jl6pf~nx| zgxXqAs{%A1Va;|LX+_j+@QNtd3Q7qnrHvA3`3QAA33wz{S`xY*id=VqM|fDRkw$p# zf=75D?vP|~c2(NwjOGqk%rQSV7wGs7e!v(vwi3DcxF%!~ajOa=LaL?um3z^U<{39B{hJ_hJ|UIuoC$1JI! zl9PdvZf@}UXTk!y@g6!i!NAV&lo{*>(8{d;H&~0ovv=T?S&ZxqeayV@**h*4c}1m- z@@T14kqe_dms61Ah0cS5@4*Jw5a2NgMs|j+OiJ(?f@BjJ82{a7U|`foS`W;|2wD%! z!~t3l%)-pU3fi^CxRr&KjhTrNz8+Ya*;w4r+?ZK83ceorz=3}cKyea<;pdkqepXP! zTn(&->1TNrd9a@u82>$o&egzHER*I!KMWUQhT&_JFeK51|Nk>AV_;xS1;?`*DD^S2 zGrVN#fyXl|w~P{Iy{*KG9M6zaQ9+u64_t5m`S<@Z!I_5|-IdC$_z{EPu~LI?vW&5o|Z+tx6+SK)!~7W@C0Wj^aZ@U77+ zAn6D`YNiXnH5xK%CILNzO^;Cty0={dv`7JVGy6^kMTXTI+0;R^O$?yLPaB0y?ZGRT zMR<2GWN#7U<`$9$&!qg3IIvxWk5`-@%Xr;(@LulR2<~3w)Kd?19aq5DxubCHT0-CHMu}!7I0z zQLmET)Sv=BYfVK)zy|p$X>l!(^N?@x09uR1ssz77T2Rqc(G+y7s;IFj=$r@8?Ktdg%%I*l=rCwg6E!AT zXyNj20b@c`)WU^PQC#_}ruR(mX+ z8{8^~t#`f+UhfQP4Kp!F$zbkllEGX-Eh{YxTR{z(eE_wuVI%u@!6W++6WJJ4)s;4? zqP1MqF=rn%)HJ|z1q_V;7c+=6#4@~KU}jJNr(q^gn-G2`1>;W0p%mZ)Qq+w_m1B49 zdT|ldp4h;^!19jWj8UBd=C`jXe#1IOi0L=jdUFa~0tu64jOq-qF!_!WCIn|YAnjzN z8JP|LOjtlSe?$ESZoi6xS`eTarGF+YiY$H%P}@N5N+wvl5)vk$eQdBWd5IDxSlb(z zVIr*nU)2xs+dU+|y+-kyx-RDYl`dv{t7*gMuaf@XU|qZgF}GSKSwhfHGdwyy}gfv(a<12hwL zMKD@f1{MaQT%cAKgS}tGgue0K4XA}5d%BJf2K8mXD~1@ zF#ey*z`&3McAEz{zaUP=L9`tpE7KUDC*vU64&YPTw=jk9vs>EVc>`}an2Rbao0^!J z8;XK1=VCWBj)Xfb8KvD2^v{O*AKNqrbp~)qGq5uMfhhu9)@U;@gLeen zW>kQ;b(uN1c$7ABp~V6Z<{krHZeHjfga3CJ7?^y(efeYmzk^M@%P0bmR~GChBF{8! z0H+j$i43CuOc+mt+dbN#)5SsgiUG8*7F3>a|1)7c2$u5(uO?$>c*^h=ltTaiXV?Ya z;{hsbV0%2iQnn+5Vb0$ftbSnIbU}82W4II)!~g#?bpD+IzT;e-!51dScpNG>hk=2` z2i&931IdAUjtu|dq0GX-FQ~MUA1#yxF~fvUfR7WpZ>N)ifk_5zq8|f0IF$PsULi~* zJf8;%WyG8#$Zsq@V84Og2=<#0)cu`*XD~wi4O)!^I?>@jLoZYg>^BsB@0m7%TBZO0 zGn{2$V44S(^J8#|Xv1680Sq(C#pvfvGF zj2k)mL90{Q7}#K&Ko~diFf#}oIpV;@&BxEm#LLXaz#!1h0d9zF=VoQ$W8!6I7GP(w zu@SJbVcaMp4Bnz92;QP*Y$(WXY7V~0Q_x(LT@bQK?cl+K$tj;dGreTmmtB_4)b;mC zTUp!RmWT*YNdW4hzh~XYAjq%bQ3nFj^cY_NGy z)1!1SA){z@8A>pHnOto>obB@2E;N*GsJFY1DyxAiAkD4;Lj!&X*O_ER8`oR z(OB4+@!u=Z;@&49f*G{;9fU#Y6&zmdg^cP9(C}iE0*4o5WS*RTI86T@F)%Pb0k2JF zXP~wJ6k+~*1o9f#e;}`cFg)%+c?TMIj56T3qri6zUjOf~?_hn(pvhp(@DCDuYOqz5 zHVkqskn&m$yoyqKgBo}hr7e8_0eDV#v%EJ8X#cakytKTN_C_%YP+2Yy+W*YX!ouRD zy^)t2wEvj}w3$y>m_;7cp#@!Rl=^40uz;|@CV3Vf?aiXXd;*{q92=Db>^Cx)*)!~9 z&|+Azk-=am!)69$P~Vtw7lSUtTn07J26rKLX~>>sUNK%iQ86)THISi@J- zkd^o*=K2RV%Cj6eu#t-syj_`HO?#t&;11AsWmwl&4&3zxEz&m=H#9Yd)Bxb^3!GOP&PGW10T(AZU*X23J8G?v@|y}6*N&(S7X}xv1u>Ufxiw+>;48YUH+@Px9dN{ zzxV(4u2{jSefHtQvpY(}1q5V8^H`rUE~$x#_-7vx0oumgyqs|nV-jQ1rHd>6ZTxrc z--mxU`ejW`^qDjbvSg<+FoW_dyE%&=gEoT&gEQ;^)IoLUa z7M0pL3)pP7bZ`bQBHhH`3_7`SGoJ%Lm=9W1$`88sX`=|gfDKp}w5SxK2&4(TsC1)- z2J%870S%B#^`+lzHZ|qZ07bV0r+|a0fT;lZ&W(*u0{RCwE3pcgg64#FGFUQ9-o(qp zBLH4K%D90?V1p#$_G(GcI#clN)r^}QteilrKdl@r!K*)=o%jVn=Y%nAQs4v4o^F5JwCzsH-u8)*&e?fv(YGGP~Cy zDJ&w^`Qj2I6Vsnh+;%=o(q{>7()h6Vag(@+a>u>9|K4|Y-0fMmtfyyLa4_>u4kypv zzEEdA7QZ<%@^Vt(RhySHagLH@sOQ-fo&g4_T9 z2QA8CtpwNRCa_j4(|&lHlUd2Y2(!m#gwj_4kBjRY>T@VVRtA7>YrhAc{|JGaxRr4+ zqOTy1wSK~E7fVV@@<~8U-12t@YbCfg2fGneV>3;L*4Xp@&S2UC?t_Og@PJ#R{}~oR z<+d;|p!w}3ir);)l{OlpwJXdq{bpclfb6$VP``5D{O44w9y#Nji$QDJ!Wvv%E-h>KnoID;Jf6(ZVZK*xRvn> z+>P48hQ^q_HrB>4(ZI++Km%f8%0FY4Z{R*K*p1-R3yy%y{{NrB>7Oz9=6ZDoux;QK zw|r1JOuxNE+8L)SY+|Lf(FDzJR+xS>wlK!+x7R3sGqO1*YE&%?!bQV_^Kh z^?wmV6{8oG$N$yQ#}}O7-T3E-Zak=UBKvn1%Q0};HUotk13RM*Q}{m(@c6=s|3wVF zw09d~ZUWP7;QQaz8N#4$(_?f7xeYRJ&Tj4IJhOqyj6Y1F*-ZMopzhD4`5_oSZxXlaOw|N`9Zxhmr z=48gYrU7#&sI;UsY$qsW{Ss*O6t*_#E_iJa#6$&2tbGp5)kZ2xDzMc?U^lWCFsd`a z+&B&FMo3GHlNswtG{|m5S^nJQXn?gX`m zq3&dqLUAY7{u?%TBJF|g{{NUo4qWCy-N`6};!bi_S}po#!m19=8DMvUMu?dHg3=*q zJ=;GM7Cja{26YCoeV~z7<|wEfX#I;N_&f}2kO(6?!xV6-0|_%C_T$3BOjr`KBlrJ* z27Lwwmd)VQZUZ&5k7)`bwF`-gW2Sa-EU8^gL_io)rh@M|28UP-)Woe!0`O9rgA5ZP zZUl{t!QA+jDsBXgro-I$ohohwjf%tE_!7m9Vlqk_#n4I(8O(4Ll@i4rj;~SNNTP`h zjQ?N#i(z48eafK5@D<$mVSt}ftqz$H{(oZ==#*;44SWKd_(Vhww1X}h&Z+t$!MK@^ ziH`|Bn6pWO&)Z&qCxbl0$~U0CP4-4%34trn4i29LkM?F^VF7Rl2edL?MFl)KwUdFB zVdX~dK>Ih4VA#+gy}==JqqGWWCzG^_fXxPJ@WI^>af?W>D+ERO4;(nNk(>3v0mcnX z0-IDBl@A;^vQb{*z<~`?M>ev94wq+yXiJdZpb)uHN*QFFl(K-$1}P+Q3-AUeLuMu> zWhHfUanRJ4u&|-Bxv`-+=mZLzo{3WHb zbwad*3=_LbuwS4e-zP?9rN8KgxH{W2_b9;pQXNuz#1H3*czN~P|HEr34mAOFfcO6g6}M_M%;Y@ zpD~7=6%E^G!3do(hMpD8z_1DIcZ`*Q!iu7bvY>^4tk$)l6QT834l*rcy}`f>J1qom z10OteA#>8)P#gH+p$k4m0N2_&MwGR6j9DnF>sSuLme+yY@Ra2$<9ya-R5%kKW&Tmv zSXBAxu3fClE;2AN%wn0sB*ex8J`3*!IL|V|eTul90pe5GiS3Bn8NesD551G~a38tO z7zWyY3&No7w;;?i1#=HB10zGmKNBW7@ESn$wJ&1u^Z^;I=R=IvL)R?u39x80U|laL zjCH+W1~Kae85sZnWVz0?k@YAgH7+$qXvL#Kht2L6wzYM^Lik+{w;z9kzuX zMl&!mSh4J5wqdl}F)Rp1#Me1XtLb}4=Rjr>vq2OKz+yu7g)KGBamaWD^n>16}iCY9eH= z%nUy1(_9#I&}TvP!l{fwQKxj}{#{mJ(-4!hcW~A-pHd=ZX6+=ZemTxNKa^?9f^0@s zmL;qIo!Xr2URD^-DDvcQNv3C11yhcF6v)2}jBiQ{2V!A-rP75lEDzX&)?qh14 z!T>ru?JWlb)y?N%_`v`%zm@qYV-)K-1_1_taC|YsPcjjN=Qq6b#haNz*e&hfY~Vk` zxQQW_Mc@r+y&3p=3)E?2V`Ijs?5w0>dkJA?rfe3Y+--Aa%fxY8>%}rKGUPIEVRT~M zi*N-z)gW8}$@MJIT#uNwhOBsF4`H&j{{wafODqGz6=<{S%F4M2N3aIK9HAcrip$)8 zml&NGZjs&Z-og~Z&hO1&f91_)mRL>(Mu8)syNAqC``sum$j#k08ypI{u?$QMe#}Ri zO2KiV$k2lp8%k)gAqbtlSB7UE@Lc6~;SdQ+NQ~IO*{mSJ&knj93~9DPkVTGLdlQQ^ zgZ>*xBdb9waqJITse%da|}m}0cfOZZ+w#O-mAy@c%0y@cqu$1z)S2in_jW@lq$*ujvpjf0bqpC7z`0(5se=(0G* z%`B|kTp&4S9%d#UUVecqp!pPuKj8D@wz7+GiSY7!x(Iv$U74k5C}=DQxrSU>&`>dg zvGE{d^S|1I|LR%z8Q1>{ob}tAWh>~m2&lWIp*LwUio)9bh&_;^;JGE<4Wi(=C0TgB z1Mh*{%xozLayJL3l=KdU6bEjQ2N;+Id3nUeKyKyZ7ZDX@23_z1^9N{V;J|?cU@vWD zVdWAKZN1IK2;Y zsxa&>Ld5BP%%D8DlYxOzY6BbSekf)}@eQ1i`=J<-c5pJLx9{HF-oAS`i_-265VK=9 z=vJdQ3=Hfd3^&287H-(yQ+TdG*bXTHxS%Bf!glbbDFqyO^rRI{WYj&Rt^H)wkG#3^M&J$TzWa?5NJk6u3N-Kvz?QSJal-FlVv`i( zw2>4;+}*^<1HZe8M_7#0UQ8H#2NU=dQU+%DolgwH0?c;80^p^tU^!+s_}xuxyaLR& z0=$SNvMTB(=HLx;Cgv*UCh9ikCh97%qYTxx3{4<%hFXRu>h>mvTIw)4IYm7~u$-Qu zoS~kgouQth986A8MOzOdr>&x`r)aCEt)d8%vvc$d1k3pa+6DSK+64MJ+QH-;UA+Au za^5c9evbBj-Y$+XISXqKZ?K$)w}rQdwVk&I=+3c7u>Y*>Ts3|&A5PM9$UPQXP8^zP;@h)bIpw=gh6?q~*YVSr!H%=iuMHf9_yfEOnS z7eI;=*a8o1*sOP7Lk$Cn;HaoK~f+IWw0)g1l&k$l93>= zi9uEXyyF_8Lc@UrY%NGLXdQ(EkD`Ep3NNo3H@7AS2jl=;2+6QfLIkvriH8%k$y=3S z?nV(7(0&hbfej2-HX0g&585(h0IiiUWSIMwaf7(P28k;hB_+WUk`f>ZNsz=AbtQ2= z&@G0bHJFMjYMQD7yxbf-pk)-G?TQBuFldu17qJp1?iVAYNd4kjCR)}Q!rrDei2 z|LhGW4ja5{FTt=(TeP${X;RLFRdbsvK)V=%-o@HQ0sO_oB?HWcC}OCeAjYMYb@Q#e0+ znEes^BL}uhh|9__v4c{#rR7#>X(>rbDR6`y*vuu(EeT$##mcdRQFap}XiXKb0GP?I zroEAY8SGmoHSLW;qF|kl|yK@~h zgOs_6i$g{mazh`NH0aU`X&D$_f)~W+=7sUOB|&^i2^noh?+p?G5gSD%JvT}-cqVR8 zNLJV=DcxnE44o-aRyG8$6Baf!gq|$`7GYFYW;FbF$kVH+_}#0bVo$GsKh4em{bVX+ z_We7JDeKQ>rfq+{nAU)1w&R!z*)3W3F{(4hF|G!!C}E6e&0t_)kO9RP<3=%lPlXK( z0THPi#FQ;IGKvYBN-IT1GB7fvGBB|0VC`TqWQYc-1T}LR85}^j@*+w!UQjQJK^T&J zc^DBznlLD8HwrN7>u;81muD0>aOTWLO#y*3j9cZ@gqd`B1>kHL|g>8;hBli!&<{{E(JF~7@!w5^Dt_|i*(3_J5gzU{f&y!0%tbybBYR_IkH8anOPLPweAe# zMmYw7GaH1CY-3YlkdtPX5NP+b0tJY$34^hbn7A2u8VoYNX$Cq@f?0q;SxL=YM9kO- z6dcM*Oo5Ezn+y^yM7=|09ED{yHEc{}6()KeIl}nw?&B$Y_eD75%<%Kep32zxiZNF~ zY2O1&EqnDOOS`atr~aM#*Yi*9RaMbE#+1Jm75_GZe5}gAz^cWX&%ngM%8&wyaroKq zY;Yfg&wgisPGj*fvcr80oiMVr-@?km2s%3A&Vh}f%S9QtfHsIQ2?|-->PsBh%*x2Z zq<=>L3}_`Aqaq`tBGVHlw_m@R%KkYq%d_VHn#f}Mr_)8n8RQu{!EQm^ z4xs>d3pn%{g`s^(MYvNSiI0;(U*CaWN}7|KgNsv0RE|+tM4kaun1IHf1rC63wPJJ- z5fPP?;N$1w77~`1lagj-;pAWhtGaUF&H?aktp^}1PzT-A%*<5KOikTX5p-ICpoo~b zsG_NvnYy4Nn0<75EOYEEw%qBlvD5!L%#C9Hs~tQ2-%&@w{#(qgH~R%09R>Su{;9qN zX7$`2%&xAcrVNS$BQtYzac0H^jIaO6 zvBc}S37TzO^e>mO=$|bUPuC(BF}KoxN15H2xBQ#Lr`}ikSLQEITBD}uKT`%qh9brt zELKc@49pB}ka&WZ|D?<@mTY8Z0ySkofvhO1Sj2qdj|G$8GzLbx+<0yAuZwLL>rVzQ zh9IyX5ILP2HS`%+VI>_8Jov$v>TPD=V&c$0aplZLHfGS_7VI3L>p{RFEv(82J_Jjd zk==q(i}4rZ1ID_4&;MTc`g?35EwJE&!AtYX8-%ebL!KjW3D zjH?-Eh1i&wsHt<=aq#^6{crleCx6@5S5$;BFfcLBV|d0kfjN;ulEIiE7A;gv&_ab5 zS~i%%Lj^pV>A<5Vt88qb#ly@gDJGzQXN3MWL#?9)yQs6lPkY_>F3~T~Z9PA}f z`Jlwcjxx20BEvY(@^dMIcUHS(gH!0ijevUx*3Xx5m79HCr~zW zS=w)82(WkH;^kvyU2Gn-D)Aw=fqMglA|F$;zl` zswk{zs>o;z%KFTpGw>K^G1~px&$#u?-*{#bM%yL-jxt*O3w^^h{m<8bhhiB^+8IUK z8T0>5Z2$MB{a+6#<`*(BuuW#U%)rLL#ZUzHKO+~U_~BqgluKNo78oPv1}<=ZKom=m zH3#fm`e(KSs6JQn7I({1i6xt5#&zBg}xI|~D={(%E$KzNe^BZFs9#CB!@76C>927y!y3s4w?Le&^_ zvpORqBO{Yg9^;gMIeGtb7*GFO%oxiU%i90f;;$vsai-M2v;WRyN@rkXc*>T_IG^2& zMr&Kx%`P%9GU%}dGA(1zpz|6Ywm{@HJhE(lOucNUsW9&jJF^VFQi<(!EvR*C#TLkH z!(IrUpP==AD$G?CY=NK^6(9_nR~v+@Vi;on88Zoi?=wsT=L|+@A>rynRXkT8GPV(a_aSI?7V8ftA@&0BoX+U#EMv^oS*$;>uFleC z^JA)K&qJ(@WQ5f(hyix$u1;k0V^n~yPW=CqEtP2_doX?1VPU@sm@O5y{t8AjFfjzN zr7}gZn}bUX$Or(UJxb&bQ}XWk1+6>;&0hxX+QsOzYZtrurAwDUD_PNFi}ov7+4JBl zS!LP$7&oxzF)%auLdpktT0!*lAZdkp10%S6K&&N&Ob0Pxy`7tp(O8&K6LdW{C~f?E z04g7UfocP=UDUZx8&n?u+IIKf52zK)pgX{sD_JiyNHM4|XfS++_y|5%t_g1oKt}8p zp(FNM@bi=uK}~^80xaOw*TM|RZ+0?pFr;kc77)1dW-~VjH^(Lx0Uqtm3>*^N;4w>O zZ~Kk%5&}myb8vvJu@yJ~m)a^L&mb?SuDy|obqAyJCPo%D?X8L`jLORD+8edhb}~vc zz=8Hn;*3l?7(j=j9yzi>^2la+MR`Sm1MM4S zRKTJKHV7VJWZbBwx|30YA$OCyx}v}VMt#{g+MtFA_|7a4VQOp$x*A6KT`SALz+4Uu-NR^MtBNCR)o_RHMrCh%aQJTK7LYTwM+xGs3=A9+pg;x< z`EQhw2OVF)D5s{qm5G&+g+*O^qoN8pSe4bZ88@DL-gQdgoNJ_c=#Ow zg&(nDg&9s*0*Q6sFDKAy2~Y@)ra$mVw(@BD`y&C)zI01}pfZ+$L7jocp69%AJipCX z25t_}79oa>%Jm5#28jOi;qMF%2KGV*1_ln${3b{oM6>7ob7bJ)kpH*#-&zicNnj}m z!Pv+IIjl}xJ`x|vonxG~Ez z1hA}O2w<{g*u=DoAqq@e{=dgk%;3XP%y6Ein8B2#n8A&un86ri21_x6A5;!Rhe6ac zY+_l%kOVRZOcyg0bI3F5vW79pvW79tU_H(d#d@4!8EY8B2A0PR8`vxvl30&3%ww`- z*u}!Ypv)S^Fo&g>VGi3WhH0$F8RoEAg53#H7r=U)VGC;*Lki1d23gkQ42xL97&O^? z85CK=7}P=Lvpi5yWU~B!kI9n3lKJ5OCoIJb3{0ySWLb(CyjY4E%2^l~Y*~sK zJXneuf|xA9;z2CM46TgE89Et{|9`;30HPT>*;X;Mg2bU}%Rw~LDu#J13=B?Cecdb! z3<9jj8Dv=)7{sC2o@ot37?TLYK@iQdhM|@T6!xnaKCu)tWUv%7xIn|74Wx#pm?45` z6+;jM!=Dcf4F3XIpZl>Q5$|677+4h9AR28MrM!EqYKumKdOFwA86{~0Jw znJoW*WwK95Y!m9EQ3NM1$Q2ieIGo2Bi-KUc(T;@)(?Ny1`)$ z3U3ew#XBTTi8C<#I{^w45Dl`Qf#Kf~DE|nA|6dNm|1SsPgTf5tHU@@&w?S+MhJVjN zd{EwCVEFTof#LrNRwD*?P`H8I1`1bDnq^@4zZk>@(I7sEjZA~`6Nt~i@c$2p&A{+~ zE{M-$`Tqrz<^MZOmJFgymJHmWxB=%i28K>hegma{WSVIe!&y+?VLbjH2a23`FB71JsPZ77yyTE(Epw2I*=(<+8p zOsg0&m{$G&$+U{Wisc?d0m#3g(wFf#xID;ZJkF5Iw2HxxX%&Mh2!rw~2s52!P~~7? zc*DWKz{j+TVG9UD^O-2f32okJ#If9CNM-)R5Xc(9pvwN8;VAoe#sw^E z7>Yo7mGvNl1^ahKY4-0-AK1S$&SU@1IGz1F<3bQ-naofJbtlNZAa`3q+zZa%Ah&Bn z-5!MGw_hv_;PMDmCV?>n1A`nGPG-2vxQ^MCC6_gcbu#NcHchqywlnNJ?6&Or?5jC4 zId*Zna{l2u&%K$aj^`rp9ljNOU-?t{xAXrM2o$&{ct@yJc)m!9sEp`#F-Ng~;tk?Q zBy=RMNUBJFm#UYxm;NSmT6U@2SNSOU9|}E+yOlO5M<_p5u~sQpIj<_H>Y!Stc1(Sd zMuBFqR<<^)j)2ZaU1i-_dQN)X`nwFG3=Ej**^|}txR;7olGhgRUhnzdAAPEPdVDSX1pSo#R`?zDd*?6b@9tmV zKhyt;|K9-pfXINmf$V`Vf((M}g3^N~1nmrZ9Ly7J8XOng5fU5H7P3C%Mkr&bR%l4* zoUqEUMPaAIzJ$w#yN92PXo*-DaVp|hq;jNBWNGAv$eU5zQKnHlqaMf1iFp$9DONhx zB{ny9dhCNZ&N!pE=(yH+>-d!T-uP|t_Y*i0j1uM~79`G0Je2r4Ni@kWSuxo=IW4(A zc~$b|!DQi=9r@T-3o2r)TpIV-}AoWD*$26(5zv;H=-Wdv+hM7^B&6)Ev zPh>vH;?0uI(##6Vs?J)HbvBzfTRJ;3J3V_s_Rj3%*;ljw|u{Gs1+crlw-)ISJnbFGMn$tR`^<0~9+oX1x_E{a09l0HcI;A^(JNr8ibg^{> zbgk?5>hA2m*`wH#&@-*)cyC!Bd*8NxcTii2v5_H~ft?|ifrWvIA%%s3!J7fZEMs71 zU}9ikFk|WisRFm0Ks(79!7N4wP6lhJI1>XqgA0_+%;3o24P~=1a58{)w}LdVGRQJa zg^IH=a58LSU}j)s0olOAup7!|VGv?C4ra45Ffj;#*J(4durh$eUxLNi7?>D%7=A<9 zEDS=7>|i!KNIjz@lnoNs1hY9A7#PYJL3>LXSvVOO8H5-&LdBUF_!tjE*~|=0j2EG7 z76u`vU?`iF!HOvr%4TB_Vww+TbAjBz1TlvTtaWaX%kOoS7Fa&IdAw8RC8ckU7kt6Dt{61i<2!U^T)FObkNI-cU9RgAj8pm@NV} zCm+fNiC2T!qM$Hg?uD{J;&Z`lF|hjeP&P;$68@54d(VQ!CBgRI2D4?s>fb`yAoV}N zY5vO(hA&iMtEMVaXtB?=nJnhJ)NmPWdk<_aFElA1_cI3h8%_*1_dP3iov{8 zhGK?Ph9a=vQW*5WCZYN?h#{3BouQN=2W%QBByihg1$7Im2?`9TW`I}`7s%{2>V9;a`U|?f#*4ij1;T`O>k(oK(fw{|)vDkrE z)6&x=%QC}dh2>34wh{+sDNDxE_)V5BmafX$F58WQtUX*T**LT|GBd?H2+l~EmbxNk zS?Z3IZK)?xj-_%GJFt4Bd{1F2abOoqosqI7mAQ0-W1Is&dn$Vxdpi3H_RZ{**ypkr zZ{UoJ-^n1wkmBmJiy@aGlOfNw%eBjO2SbMIE=CE497bs{e>Vd=LkfcqLyD`5(?$bR z?FemY#YoUn@Dx`Uu%p>mWbMd0k;Po>pz5CLp5~tJzQTR8dvaQ8T3T9q+KRNzX)DvV zq$jtpY~QkcCNLRWHESMp9q2}bFz4en)`F3OoM z5<3|(7=*NUGGv0uTrio(Af&xfLcu%OX`74#cmeJXko%pLos*oLl@pydiZkwHa9~Jr z%?yrm+QE>xi8;zl8$`22gJ`u)tTATVI~i0Mj9fPIGC1vEknj$Q*x;odxs_X)flHae zJ6PE@+6h8#P