(original) (raw)
diff --git a/Lib/importlib/_bootstrap.py b/Lib/importlib/_bootstrap.py --- a/Lib/importlib/_bootstrap.py +++ b/Lib/importlib/_bootstrap.py @@ -159,6 +159,101 @@ def new_module(name): return type(_io)(name) +# Module-level locking ######################################################## + +# A dict mapping module names to weakrefs of _ModuleLock instances +_module_locks = {} +# A dict mapping thread ids to _ModuleLock instances +_blocking_on = {} + +class _ModuleLock: + """A recursive lock implementation which is able to detect deadlocks + (e.g. thread 1 trying to take locks A then B, and thread 2 trying to + take locks B then A). + """ + + def __init__(self, name): + self.lock = _thread.allocate_lock() + self.wakeup = _thread.allocate_lock() + self.name = name + self.owner = None + self.count = 0 + self.waiters = 0 + + def has_deadlock(self): + # Deadlock avoidance for concurrent circular imports. + me = _thread.get_ident() + tid = self.owner + while True: + lock = _blocking_on.get(tid) + if lock is None: + return False + tid = lock.owner + if tid == me: + return True + + def acquire(self, avoid_deadlocks=False): + tid = _thread.get_ident() + _blocking_on[tid] = self + try: + while True: + with self.lock: + if self.count == 0 or self.owner == tid: + self.owner = tid + self.count += 1 + return True + if avoid_deadlocks and self.has_deadlock(): + return False + if self.wakeup.acquire(False): + self.waiters += 1 + self.wakeup.acquire() + self.wakeup.release() + finally: + del _blocking_on[tid] + + def release(self): + tid = _thread.get_ident() + with self.lock: + assert self.owner == tid + assert self.count > 0 + self.count -= 1 + if self.count == 0: + self.owner = None + if self.waiters: + self.waiters -= 1 + self.wakeup.release() + + def __repr__(self): + return "_ModuleLock(%r) at %d" % (self.name, id(self)) + + +def _get_module_lock(name): + """Get or create the module lock for a given module name. + + Should only be called with the import lock taken.""" + lock = None + if name in _module_locks: + lock = _module_locks[name]() + if lock is None: + lock = _ModuleLock(name) + def cb(_): + del _module_locks[name] + _module_locks[name] = _weakref.ref(lock, cb) + return lock + +def _lock_unlock_module(name): + """Release the global import lock, and acquires then release the + module lock for a given module name. + This is used to ensure a module is completely initialized, in the + event it is being imported by another thread. + + Should only be called with the import lock taken.""" + lock = _get_module_lock(name) + _imp.release_lock() + if lock.acquire(avoid_deadlocks=True): + lock.release() + + # Finder/loader utility code ################################################## _PYCACHE = '__pycache__' @@ -258,12 +353,15 @@ def module_for_loader(fxn): else: module.__package__ = fullname.rpartition('.')[0] try: + module.__initializing__ = True # If __package__ was not set above, __import__() will do it later. return fxn(self, module, *args, **kwargs) except: if not is_reload: del sys.modules[fullname] raise + finally: + module.__initializing__ = False _wrap(module_for_loader_wrapper, fxn) return module_for_loader_wrapper @@ -922,7 +1020,8 @@ def _find_module(name, path): if not sys.meta_path: _warnings.warn('sys.meta_path is empty', ImportWarning) for finder in sys.meta_path: - loader = finder.find_module(name, path) + with _ImportLockContext(): + loader = finder.find_module(name, path) if loader is not None: # The parent import may have already imported this module. if name not in sys.modules: @@ -952,8 +1051,7 @@ def _sanity_check(name, package, level): _ERR_MSG = 'No module named {!r}' -def _find_and_load(name, import_): - """Find and load the module.""" +def _find_and_load_unlocked(name, import_): path = None parent = name.rpartition('.')[0] if parent: @@ -999,6 +1097,19 @@ def _find_and_load(name, import_): return module +def _find_and_load(name, import_): + """Find and load the module, and release the import lock.""" + try: + lock = _get_module_lock(name) + finally: + _imp.release_lock() + lock.acquire() + try: + return _find_and_load_unlocked(name, import_) + finally: + lock.release() + + def _gcd_import(name, package=None, level=0): """Import and return the module based on its name, the package the call is being made from, and the level adjustment. @@ -1011,17 +1122,17 @@ def _gcd_import(name, package=None, leve _sanity_check(name, package, level) if level > 0: name = _resolve_name(name, package, level) - with _ImportLockContext(): - try: - module = sys.modules[name] - if module is None: - message = ("import of {} halted; " - "None in sys.modules".format(name)) - raise ImportError(message, name=name) - return module - except KeyError: - pass # Don't want to chain the exception + _imp.acquire_lock() + if name not in sys.modules: return _find_and_load(name, _gcd_import) + module = sys.modules[name] + if module is None: + _imp.release_lock() + message = ("import of {} halted; " + "None in sys.modules".format(name)) + raise ImportError(message, name=name) + _lock_unlock_module(name) + return module def _handle_fromlist(module, fromlist, import_): @@ -1139,7 +1250,17 @@ def _setup(sys_module, _imp_module): continue else: raise ImportError('importlib requires posix or nt') + + try: + thread_module = BuiltinImporter.load_module('_thread') + except ImportError: + # Python was built without threads + thread_module = None + weakref_module = BuiltinImporter.load_module('_weakref') + setattr(self_module, '_os', os_module) + setattr(self_module, '_thread', thread_module) + setattr(self_module, '_weakref', weakref_module) setattr(self_module, 'path_sep', path_sep) setattr(self_module, 'path_separators', set(path_separators)) # Constants diff --git a/Lib/pydoc.py b/Lib/pydoc.py --- a/Lib/pydoc.py +++ b/Lib/pydoc.py @@ -166,7 +166,7 @@ def visiblename(name, all=None, obj=None if name in {'__builtins__', '__doc__', '__file__', '__path__', '__module__', '__name__', '__slots__', '__package__', '__cached__', '__author__', '__credits__', '__date__', - '__version__', '__qualname__'}: + '__version__', '__qualname__', '__initializing__'}: return 0 # Private names are hidden, but special names are displayed. if name.startswith('__') and name.endswith('__'): return 1 diff --git a/Lib/test/test_pkg.py b/Lib/test/test_pkg.py --- a/Lib/test/test_pkg.py +++ b/Lib/test/test_pkg.py @@ -23,6 +23,8 @@ def cleanout(root): def fixdir(lst): if "__builtins__" in lst: lst.remove("__builtins__") + if "__initializing__" in lst: + lst.remove("__initializing__") return lst diff --git a/Lib/test/test_threaded_import.py b/Lib/test/test_threaded_import.py --- a/Lib/test/test_threaded_import.py +++ b/Lib/test/test_threaded_import.py @@ -12,7 +12,7 @@ import time import shutil import unittest from test.support import ( - verbose, import_module, run_unittest, TESTFN, reap_threads) + verbose, import_module, run_unittest, TESTFN, reap_threads, forget) threading = import_module('threading') def task(N, done, done_tasks, errors): @@ -187,7 +187,7 @@ class ThreadedImportTests(unittest.TestC contents = contents % {'delay': delay} with open(os.path.join(TESTFN, name + ".py"), "wb") as f: f.write(contents.encode('utf-8')) - self.addCleanup(sys.modules.pop, name, None) + self.addCleanup(forget, name) results = [] def import_ab(): @@ -204,6 +204,21 @@ class ThreadedImportTests(unittest.TestC t2.join() self.assertEqual(set(results), {'a', 'b'}) + def test_side_effect_import(self): + code = """if 1: + import threading + def target(): + import random + t = threading.Thread(target=target) + t.start() + t.join()""" + sys.path.insert(0, os.curdir) + self.addCleanup(sys.path.remove, os.curdir) + with open(TESTFN + ".py", "wb") as f: + f.write(code.encode('utf-8')) + self.addCleanup(forget, TESTFN) + __import__(TESTFN) + @reap_threads def test_main(): diff --git a/Lib/token.py b/Lib/token.py --- a/Lib/token.py +++ b/Lib/token.py @@ -70,7 +70,7 @@ NT_OFFSET = 256 tok_name = {value: name for name, value in globals().items() - if isinstance(value, int)} + if isinstance(value, int) and not name.startswith('_')} __all__.extend(tok_name.values()) def ISTERMINAL(x): diff --git a/Python/import.c b/Python/import.c --- a/Python/import.c +++ b/Python/import.c @@ -1370,47 +1370,7 @@ PyImport_ImportModule(const char *name) PyObject * PyImport_ImportModuleNoBlock(const char *name) { - PyObject *nameobj, *modules, *result; -#ifdef WITH_THREAD - long me; -#endif - - /* Try to get the module from sys.modules[name] */ - modules = PyImport_GetModuleDict(); - if (modules == NULL) - return NULL; - - nameobj = PyUnicode_FromString(name); - if (nameobj == NULL) - return NULL; - result = PyDict_GetItem(modules, nameobj); - if (result != NULL) { - Py_DECREF(nameobj); - Py_INCREF(result); - return result; - } - PyErr_Clear(); -#ifdef WITH_THREAD - /* check the import lock - * me might be -1 but I ignore the error here, the lock function - * takes care of the problem */ - me = PyThread_get_thread_ident(); - if (import_lock_thread == -1 || import_lock_thread == me) { - /* no thread or me is holding the lock */ - result = PyImport_Import(nameobj); - } - else { - PyErr_Format(PyExc_ImportError, - "Failed to import %R because the import lock" - "is held by another thread.", - nameobj); - result = NULL; - } -#else - result = PyImport_Import(nameobj); -#endif - Py_DECREF(nameobj); - return result; + return PyImport_ImportModule(name); } @@ -1420,11 +1380,13 @@ PyImport_ImportModuleLevelObject(PyObjec int level) { _Py_IDENTIFIER(__import__); + _Py_IDENTIFIER(__initializing__); _Py_IDENTIFIER(__package__); _Py_IDENTIFIER(__path__); _Py_IDENTIFIER(__name__); _Py_IDENTIFIER(_find_and_load); _Py_IDENTIFIER(_handle_fromlist); + _Py_IDENTIFIER(_lock_unlock_module); _Py_static_string(single_dot, "."); PyObject *abs_name = NULL; PyObject *builtins_import = NULL; @@ -1607,16 +1569,48 @@ PyImport_ImportModuleLevelObject(PyObjec goto error_with_unlock; } else if (mod != NULL) { + PyObject *value; + int initializing = 0; + Py_INCREF(mod); + /* Only call _bootstrap._lock_unlock_module() if __initializing__ is true. */ + value = _PyObject_GetAttrId(mod, &PyId___initializing__); + if (value == NULL) + PyErr_Clear(); + else { + initializing = PyObject_IsTrue(value); + Py_DECREF(value); + if (initializing == -1) + PyErr_Clear(); + } + if (initializing > 0) { + /* _bootstrap._lock_unlock_module() releases the import lock */ + value = _PyObject_CallMethodObjIdArgs(interp->importlib, + &PyId__lock_unlock_module, abs_name, + NULL); + if (value == NULL) + goto error; + Py_DECREF(value); + } + else { +#ifdef WITH_THREAD + if (_PyImport_ReleaseLock() < 0) { + PyErr_SetString(PyExc_RuntimeError, "not holding the import lock"); + goto error; + } +#endif + } } else { + /* _bootstrap._find_and_load() releases the import lock */ mod = _PyObject_CallMethodObjIdArgs(interp->importlib, &PyId__find_and_load, abs_name, builtins_import, NULL); if (mod == NULL) { - goto error_with_unlock; + goto error; } } + /* From now on we don't hold the import lock anymore. */ if (PyObject_Not(fromlist)) { if (level == 0 || PyUnicode_GET_LENGTH(name) > 0) { @@ -1625,12 +1619,12 @@ PyImport_ImportModuleLevelObject(PyObjec PyObject *borrowed_dot = _PyUnicode_FromId(&single_dot); if (borrowed_dot == NULL) { - goto error_with_unlock; + goto error; } partition = PyUnicode_Partition(name, borrowed_dot); if (partition == NULL) { - goto error_with_unlock; + goto error; } front = PyTuple_GET_ITEM(partition, 0); @@ -1656,7 +1650,7 @@ PyImport_ImportModuleLevelObject(PyObjec abs_name_len - cut_off); Py_DECREF(front); if (to_return == NULL) { - goto error_with_unlock; + goto error; } final_mod = PyDict_GetItem(interp->modules, to_return); @@ -1682,6 +1676,8 @@ PyImport_ImportModuleLevelObject(PyObjec fromlist, builtins_import, NULL); } + goto error; + error_with_unlock: #ifdef WITH_THREAD if (_PyImport_ReleaseLock() < 0) { diff --git a/Python/importlib.h b/Python/importlib.h index 292308fc78123e9fa10c7131bb110c47559975dd..bfcb1752442ac8dacfa8f7d48b779305c62fd8da GIT binary patch literal 178469 zc%1FM*{&^3avtVuKE;1cl+Bt48@})Z2++M@5Tx9a2uq~UCNF5i@9tF@(-)DES+#a| zi>E2|`TLx`*Q&}fGKMdP{HwqG?SK2HfBc94@jv|T?|=9Ezxl`C{hz=6?LYtaZ~yrp z|KmUW{a^k2-~aA+|IhFK`tSbpfBA>s|Kor9yTARP{>wlA_LqP47ytD4|M%bhhrj}_VE2#Y4-Es#Luk!?{@#Y%<@ioe&+9X{`c_DEd22)Ln-b1XQcT_#xzYj z8hdJ!FQvz6NrofCn6%L_=tDl=aYR!X_9;*44_7jzi@%&@;PaFWNvAc-$mcNfi57ag z=ca?2<l|jti+ye%u~=<{+ct-(($vrif8y6c?t?zoxmrl7ougoa%w;1|tyc~_w`0!` zxvxevxst7ym+t;{k="B;5OtYiDg`1y+{1zgjMW(OoSYBCH{!~b9+4zH%SC!V~vuN|S" z;qg="VlMv}dZ(Ohr*Xaf(A1|^zG9a1%a=MWPI-g}BR#}ME7Q)s`muZ!Gu7O^b35T@`" zhlpl(7kz)nvxg6q%egno`ze3emy({czwur47qvc|^t8zuhk<%_k%_*hjmrcq)!w%f="" zs`dh;xbwmzgtrl&s="">`(nDlU5_ugVH+)p6HPZ$hDc{<n`h8yb^qo$t_;k84})2iist z$!khpm7~t*+l5z;oidn<tv(1jl?w;mg7@u)ye^q`+own="">ZOpd55TdjwtGh=Y@%caw zmrbvbuDmL%yI1rDpW3Udy?RI|vdF&cBP?n;3G(WUog8sdk0rdiBe5K^en&W4tH_bV zovkCBEj?0){*axmRXD>b!cK;F3KKl_4U~!ct;*Te51_oE=kStIoFYw68U86FpJ7~^ zHmffNp0+s&bjh%<z#29bmns0we0_|gx^%#@t}y0bw6zfyy5c(p?mpwc3y)mevr`f! zuds="Fm`n4YrCvu">orJVLV)P^dRSv>5O-16ABQ=*9PviCZ=>GY%LtH*AqW*4UAFiYP zQ=Xsb<nnjd$8na=q47-3=e6~i^zxi=dtsmjjo!ps85-<83lb%tkrjvz>W4@_O~`AX zC(5{Jh-Eyxb^iJNI&GpOH$`*5E}qZliP<d$zdsk+fwb}n@$z2w+tmw1we6l0r$d*; z)4r$j6!o&uprz57zwu7mlk#sgao4m?zai`k@$)rt-eyytoqjfdpqw##<a1rwnrna<="" zp}&vreru8|`jdteepkf8_cm?)5(bbf);prq;;9km(a4mkeda@-b^3mp9+6)#+52f)="" znaa4-z1v&(`zh3tyxktnito04p1m@lw-dlc|9*al5wb8="w~?uPv=!fVBTG{!y(=V2" zv)~zqzfxzza;eypt&hif&jnbmbgl*umlctgsuf^xntm6;="">joLP^K{DiQ&MsqV4}7Q ziJ!89E3M~s=;}_yvuy)Tovfa`oOLPvZea!U9a3&~e@H@tS5V}~#9!|GNe6N37}f@^WBjX|@kyy%kw@9}QMCOnJZQLnN$7@)`A$ znFXeD43UdV?`g9NMOumZ|6%RbBvlgoNuIXi8yTP=vU#}GWNDqLPeli)k%N?p()7wp ze|Y&g13k-ULR_?A%Gp4s9m;lvpiCSwe^TafATJiiPDg3o{CSqo?dJ{nk#JfPYb&$< z85i>`%F<`9M>*V|rT@^)hmU?%=cDP~pKR$e$tqoPj)>nLo`7Xwr?FQ)bgS*<8g>}I zx|^JZ6!wu;oLga1o4s&-<s?iaxhc2ceyv;`bg5gol%q3&adzoreybltw_c2(w|sq+ z9qdd="">{BJt?%&064NqPQG6{pWbpIOkXRlapvyRM-+ZTLr);#}~l!eitKK6rG%z^;9L zz~F503VeCM>};U|@bZA+*|H6IcfgK9zEd@4;cTO9j`kN=TzxLGbHKy0!|?q%5TSl; zFZ4ry4#dWJM^MF9Hz~!3LCyiNePb)SavSTL#9U5&aMm8nq->HPs_%71;UGHZ3X{BG zKjr0nso`KEJN*3m(e^()lDQ+V;^()|$2SjMZcCLOJd4qNzq;Pre%mS^4twaiS?wrg zEGDcfk#TkMo5Vu=y1_Xgh()D-i*r5@3xPOHF*{5vWpOZ3=I9v>&9IZF&Xo0@`xp*| z0eyO3dj0Bge$NaY$w&1=SlRC7-b6Zq44L(hnFw8!t6LGO@rBQa6F;oDy1tCAfT6%< z+F1IA(}nIa?@RAxZ65nHO|E`f_0GI|d3mLm73rwEpIHBtM#?u%Hxv#^XGIQ+Vi=@k z0JmOM6dd>8+jN6fE0Hf4fy(N4c==Y$Yr|-n^)RU6B{l%qIbx!fLqisunh48m|D7lQ zCqn8Ja`bFlcoyRllR+G!dZLA*9F7b#7B<uevhuvqbl}1-t4_5mx$8_a^wccolgsm@ zaku`4hj$g}?7yc#sxqsmxqJ=I%2@Ad@%M$IVh;hgU-BzSQR>H%06FexhbMdobh\*v@CyU-&pz7 zzf=%Bx2\_mhP%ed$DIAuJ!USK\`8^z6t>feV8UJE;B=S@|unVBR7I!vOWNxXq@Oi}Ab zd<\`|U$vy\_wHyPYkJXI>cmaJXT06{18<5>vaI}hc\`\_q)C=&=7?4PRpV!oZBYesSZ@t zB^22Z3RElex{TvEJx{bq<3fv\_@PfA)P(QA8\*1;(yM{6za@OAgcd=e58ukESI6aGK@ z46JG;NVSOC>d@rXGC%lBoGX(}OPx\`sbpSg+d%fMz{rKuAd=yWFt\`6#aVAapS^r7v! zHuQm=vHQYlH2EuQ96x>iXMoc2C\`wa{7xrH{G#O)8KZe z\*=t4pL9rv=3NuI\*yHl0Und29@-Q3tF4oDGD%qmsW6DI\*W2g\*h\`<|5Ym%}h>UNRBh9 z9SexBDR{=NkkwuDuwV!B%gX<5{Eoa!(FYI#!LEKFL4\`{KE0fa\_\_}Ob#7Ehaa6x6Lt z1gY#y\*$}7|#uUWY8a;Cp@\*{^af5(qNSE%vBK0gvI6owjDgoApB$#HtYFwo($6#CC-f{V\_\~\~|%4}ld7}V&mY\~hBpFddFH zU5)>Y%!rFor4\~RjxK(}nu#JTVS2+4%4Mck%MQ8=e\*$# z4N4ezA?U;kIo#fX;!+UA$@??99wcnXgf|&$E@\*)q2B=Df;Z-ckJbJzv(WhYF-PEp4 zg}Vrpj-RXN}!Oz42l6q zn0Nh}sDIUZY?y{w+YX+l4Gy(ISY(FK@;x#LcnSiTX&B?2Dz2F>tHy\`()OcBOngeeHWDlGja%57S7ISPA zqEu}\*7|!sy>8bExA?)3Kw9\`jQp<;lGu}%L@97O+l@xTtw0Zed-YvdtMAN\_h3\_ORlF zS8n3swMl4bVt5@=NB\`\~^=Z-FiT^&%PXNrzb9@bkcQro=y z6YJk<+iS7\_0v{Am;C)-Eq2d(CNjUlj5qcPz>HS?hIHEP\`S?na|Ueb7Lh\*DU^-v\*4| zqD{+ikI@O!+w\_=4J\_zSxu8^1|K34C#bVV--#an^&f?iiGvsemC5{m6j#1KlLF2rWY zgf3uE9=siivGlGz7ZpOjIs{|pg--phKbA&sneMeq(}=HIP#gt-nNZ}?N-GZqau#Rh z?pqpBtUp\_z^w}JD#N\_!=knqo5pCttNFauR\*!jBxc((-wbV%rc{qX&p(mZvD9\_|w\*T zRfE)XczD<>Q05(Qcll\*!0s\_e>i\~%iSJ1s%6lGT1RzHxa}c\_30ffozY+w%(i7<6ulh z7P6((h)SfyiNr8\_Vp!n|X9\_vR2p0XlrC}%Pdn+8+VbcnCbnH2W((bi6zmxIRX\*Ly6 zJ>5FZjex%8\_S1fN4M(6{>b?+%BbnxhnC6>+gJEbU^?(MOLj%3at-CZT)TnBeF4Tpt zj$M)gT\_(l|fTM\`h5}GrJ>w|JPL9=qYndoGq7R\_>k1dyylW1=#av|\`4QXj((@mQbVo z!>wC5-A1&%&%Y}+Jo?-e!0zt#F{iE&v&J3Y8IPkg+\~)!1fH(+G6MY))atxpen0VVxuprF$%VoMXL3Xb-@J3\~HkvGEsx6\~TZn4^x<|LW%KRL%Urh z!^H\*z=NXg\_NSIZKs4\`+pii|01kr5lBxo6M%gMsE}{p?wfSxA6)$<\`5xhG=6nzB\~2f z4kdAOLiwh4KGVP$R-\`GKA\~O2xd6r#\_8L()f>9rH6J(nPi+e)Q#2MxxyOmepI9hXw$ zjZxcCi!OnT{AtK+Q13?7lXJ)jchk8q#}-8YA8ilsseqTEnKS4@+\*G51xUu|wuf38c z2hw#hN-)\*PTMI5;\*4W@Ynb=wPX8-zioP!WBBEaZ|L\_8-2npi1JupZbH$E>=?1zP{! zlL\_9XpLjBj\_u8P0TQt\~w\`Fg8Ts|=9|0t1Y^$97u\*w3QRUj?Z>0?l=}cGdrz)\*)>x| zwAIVhl8GL1nV^cGKqev-SZdU9QVCO&n-\`!fI;zpi5LKzhnBJSBu za#AZhnO;8!r$7PpAQZmaEOz\`xyBAQxCcqvt\_)fG|7N z8zStpV\_H(Zu;^^ws\~QKqcArDD8tOADqeUN8J=kq\*4K|FE$6mo7?+3oO2EJ+Rp=(\_T zHG;u&\_?KEo@p\~9^svRlDb(oc0Xp;D6EBN@@6bPPt6Ry5XXkLr0\`HxlgOuiG=Fb=6> zlOr)f?pSnT&}r3buV\~eoly)pm+(l3{Ab?o6H+n(p?\~Rqa+&hS}nS+oH8MgM-;ZmkY z{oard(Szl?RlhejFHqqD\`Uk4UJj\`J53ma^z76Jt;hwM)4\*M\~u({US\`khj-jx9WMLE zPAe54m01fT5\_\`F=as4dR z#87zXy!q<6#gxgh\~S;=RA0ljg<%&F\_\_i3Vig;sE9l@?w-Ud8#@}R9MX(A$6r-rH z%dQd&4cqMhnF24bfw9$1LNR%pm@5e=peahVI?YtnU\`+@%r6bn$pVKS?r)3YU9%L5pwX^ckPcV}o$0?KFi z^m><<1APkzepwVcF>\~q^?6LdlJNHC%F|qNOO+swVO{Z\~0QtNW$kxW{%RgW<@ByU{& zui9?w0Q%)5?QCl\`>7>eWjs2qvC9Eramix;Hh)sQLbae zv2#sZT\_2kbmHT0N!vyjyJlF\*ja4!?8zkWbhy<6KWIOTUptr1\~Q1lTk$E zeYQ)s!f8M7la$4SYD\_k6WA\*#lvGLy\*{nb\*K^y\_@-nC;A zabyN;kVy@Vyuv415<}xIrNk)nK\~QQuoZ1K{0qF%C=t#$!\*gVIO36GlHC(w\_f&J97+ zkqCXaPAw7s74Y%SYRpq\*G0rv\_WaLukL|D1HKQCnGj!}!w^yozpizkc|jkd(;LnDN) zl&+n9V>bDigno?ZRRw+\`sER}\*mAw1eg}^gaAA<(!C=&Z>!lj0OiC\`Dkt8$AQwmyW) za!Lgi1x$HYI%6Db=c6NLPwl^c>PCzbf!Kp-#W0b1M!%oaOb{\*nmOy>KFhl8\_kgX^W z&d^;e!le;DV{9QhLG7(PB\*r1}tsd);7&HW$Av$fy^gF9VvD(\*GhpSK5(NP;5P=R>h zEU$=5<\`=6S#vN0s?3aJz2Y&rxGC%YH@8&oH^uFktJE3N>\_ynPCC0>z!?)TaO$\`YC2 zB=$1+f5icf(pr^N\*439F6QGU)A?z!D%TIGr7T3^(q7^E;jNGa\~@)UpI5fd2%!28sl z+\~\_caG>b8m%c=trhoqqUDkqZEeMmR31n\*k>c^T#13;zD53lF;uIyEnu}=RBRdy\~TYXqSmC$5N@5?}0i4RUR7c^;{Dj{5|;K|v>z!eCBOP=h8Lv\`a!\`YZi)SJ#-; zz=49i-1H9y#nP(\_Kso=7Gi$cW#SE5D{r\*1o#8nAN\_y>T-@$6wr!BowybB^aVn#3+4^0v#7sV7D2\*=#5FDE3hfbp zC|CcnXFJ4^OgjvoFZSC8t8X^O2uzLsCoER--{sl((l7+&uMnfS(TCFIA}Y1tX(t#=tG6Q}\`kVt!6{=iwa6%on=CP\_Er!z0u8w zhA!)XK@$)H(w%YeWvzkVv?tlT+eh9f{)ie5s\*py\`qw)d^qSf>1VleOsBq8\_8rrAaQMP8HPmPK|ItTR53iln03oipYA$y%;qvG$i7Pi?Zr;x\~r7i zzY7EGcX\`&M=uP|1\_lw=1A9t=jJtM&IU4^iu3>@W>+mpRRGT<9oxXLAER)MkAWZD|2 ztDw\~;nf06Tb{Bn)4ri#mq3&Mq\_N}3aP-iz-MfWT=yOTLU;B}a97W\`97\~0} z&dRt%o-mrW7Lc7\*Y1Szm8pO9cHw5aMzR33\_D5Gl-KG}l8cD}\`u{N)\_iP#H#UOygyT zX)@w0?J\~$aOty;PWaRKAdi)eSuzWTjViBsnFXM2$\_<1lej^YD>jWbh}w?eq2d#a>2 z#n@kei>4m0)e7;;Q!Z)I-?6#L<>qFemEllX8R{-j\_!?Rl!>aVUhSR%-0oxF!06vj2 zJcxy3R\_9?AYfnK-+!d!)ikS#-P@gV7\_T%K\`si?lfQiX#MSMi$YN>nFL!jur#0id1Oei7#0wW#i\~A=s#exST^\~%RicF)G%imj44\~CF\*g-mg zuz\`+;VX\`-RkZDAxZq?+wE^\_Fen\_fp)59G)dl&N4fpX;R\`5#X9LVDrWs\*YK zo}8)zpcm>(H0jofaPe5sI\*G#d#L#\~w=RkWW1A\`ZtDKbZZ#no5QHy@zmP=S6EO85r$Z5gpOf\~uV@yz2}&Y;%Erg\`X@FjHZ&tE>+< zWwjM1uzfR(AqRnwzf}dW0U#xx;u!w8lqWd=THlv;P8FX8YIyLjJENQV@WxKB)(?)^2Gu3?V6TFNGYjLZGDyaa z\*WraZm(\~7huzry\`VC)=&gy<&E(IcI3fOw\~ezB98uG\*;r\~jRQ&bwI3!g2NB+NAelcJXRCZN-^aIdcfB6TxU{e%^z)\_P2hJ6gR=3c=L81Ti@?}ty#NK-\_ybip=BRd3 z\*!H|WlB#<\_g\~^CScLemw#tO7YD^9VvEm@!hb?MJd7|\*YCr\~6kM$Q+&Ca>u&Wuc8\~AeH1n+Crx2SJJkMUwI\*If6-DQ(+O\*cY\~4lfRcEdvYuDY7DQea% zyGd\_bXHm;%KY(Om9LW$&vf3a!;)1@>kV)#\*r!8afS$syr?Rkhdf%$Y?Y0MUCNGGL!R|l<2YIgUZVg<16q\~UYN57fsWczIpfrUFx{2S^oRRnd z7;U\~?Y\~}M1hIZTtx\~tu)03CyBU@rZ}O#l@\*Y+hhptu&CPSFSe%pNK0P{pF\*bC-Z5U z5;P5Y07f&q%>o3$P3$A>\_iQO2Hm|)LJd2C\~H1^IE)yn&HH+Us^\`gCc&K3t zZiPT\*ynoa&hXWLH^^V8cN2SD&B8@PBK\`W76u54\_m7\~9fdeXvHGAoAmrsJ4\*Hclt#zlkAeHacvh|p\`E?!1YnS=?#1$;R@=JqF9dyIb+M@bA? z8V461X;V?EOQiEVX\_N5EcCcM\`jGW(++E}a8xi+Fm2@+R^Xdz$1lJ(AyIol8zxfb7\* zxDih!A%tv#nAvASu|>Tu6d|de@\_O0f\*g0yicAuVpn8jvVs=%3feHS?suS(P00l88QY\~#Wg\`5\~8B zaL-(8fXeG?W;WY)0}BJ%J?gg(P#AB5bQO%r5pQMeRH0+J!1;cK;2=p\`IN9KoGJO\*u zGNdz&9KCaL?o\*jBm#TBg\*JPR^RLO(an^-oxq)q{\~vi)Z4qBnCM)SIbZPi;W3mP?|-LQ)v0uiyfPN^i(fn+xo3dZD1i!K=^^-WouA8 zCU!;KnCva%$sOS?Q@1CUAw4H2F4r{gxM2l\~Fy2=C<2 z@\~\*\*dNn\`CF)(TGk)4p$;3svw(=PczJE^w^G&Qk>PJ<)wrq#=pW98;f\*>F=+6F2bm) z2+hprqPq1>v@\*;$P8U$4G#^ZT8G-!tg+HE z\`#Kh%C<(17q-d|aEiCnHcck\`7cIBiqRWdi0k\*U7(3zW{qx-pm|$QF?DNVnmAjjsG( zwj{uP-}2xvMXmg)oSa z>Fdk2$m;3K!aiL\_gzjjjE<61=1S-8#mz|p}Zi);1?Yqe\~QK2W)L)hO)TS7s?Zq?&f zsIc&8(XA0EtR\*X1\`8gnArktsbpK=\*b;W\`6\`@ICsTs|TaeRaZUWorS9nqdH(y\`8;z{ zII}5PrnxyC;5wdH\*i?l!4%aRas=&L@UJDtY-3}&0lJRsf>=q\*s|Kfx4QQmEU#Sba0 za?0Ko-1qUfeNZ\*iI2z&3BXmEz6q276BLHjb+u%}#j%Sw<6K!7nY}3Y7=g7CeqkrHL zq@{PE(3=Ax87YLV\_-c&42nCGs87bs\`KqYw7S+W\*P5$\~g@@sPbm3Qa\_1Na4epDYt!\` z%Zp4a\`O\`oO^MU>X6&jEJS\_MGpX|2l0mA4Sv(xsVW1a^H>%Qplb\`&JNP7\~LNa6f%Xq z0tyXJLUGvv3Jq0!0Th\~Sy;-uX#UoDWppMsy59mBmSA3\`VXha@@gn?GQ%46#fY^+jw zoVKHc>QtQ=^e}Cv?GPg$+A5FNb^=I}sXVCdDCp5vc|hAS3tDAzs\`Av@j%\*2pL#48? zt>\*-7CW\`3@QRt3{J6AaiUW#O1%ibNLFVPdAny(a?cw\_dn0u#NUuM\`+v#J38JRa5\=q9#BTjy0\~|uU2{}|8-}D?O!icQ)W#I1\_q$ALa%s@t zAWhyjRbmR4-5pk+f8U3e+Iwh{d?sW}%ucHY=7\~#pS5R#s{-E\*6Yfp5kmf{uCN3f=) zzo;FSx@-4MrMI-v#)KsuN)G43=Pl3sGHBl\_Io5er%!\_nwHYw}dN6yUyK3S|av$?WF zVB6J7I\*rgpxlZEi}@>-4Iq50{xp\_S?8E\* z<(oTvdsnqm7w2AKm1b<+8->@SmU39yMp^?;i+CQQ=#Fl!;}ZRpw%h5a\_@6n(7j=F+ z%2;C2L83V\`\`;<\`WtIHL1mZLmnQ^b5rAMdZk%?AoX46IV9OuEe z6WcCO>=x|o-rAFd9zWh6qS\~yPJsq$iE9azjVXr|HQ!z\*&)Uj)jc;lv\~gU5n^|B^Pz z5W$sNR>0EsQU5bqw18sA&>T#\~BP%\*pB}A=#8=p$I=;yj6s\*^ShA-q<3S)3 z\*6rvQpYc%hVjm-?te9jRM\~Y-lActwcX28TOLi9yH6T)WnkO}erTA\~m%-)1jn@rJTU zE%x%>VT14v=nlQe^gn}3hSYTRBj=MGG(\_0K9lh|=s\`C\_)y>Srt{Z9FzfZJ\*e&Q8zy z87HzZqP;Qv4kM\~qk\_36iYVW#s#1?h5TOpMEa^$COMrEvDP;{)r0PZrQ^vizLf;M\~OfEwq6QOQs z^1pmMmd(ap;}#Zsk{a4}s>\~NaMyNtuI}\~C5!I>$?B\~\*v22b4G?Je2Iu2\_6wu\*IMUf z6Ak5@{V\*QSNp(bkIesJA;E3pczd0usO{;3XP5=\~oUPCw}{(R\_>X&n-OKG4!^9g@cR zAO@Kpl6XFNB0ti6|A2HR)Pbr\~lB\_qK78E\~@F7>nk1{e>DGyUJ4mM|t@5^i9r3oipG z>r\*oVHRh\*AUIxKpeBi57Ba5M$!B?jSFd\_rM#99nybu(Gis!JUehTgtJUC22\*CCLH# z!j}aH#Aya^rHHP?4;3{9^17$Qnb>ILCQE$HLoQ5AI(E)T<9L8CAe@mnta?Ov6%smC zyQQOPc6FYvq|^3e#^kLzbU|(hC9YnNN9d3w#C2ivu)ln!f&^O;aqKQ#|a1UdrK7b\*ERYjox\~5\_!0Fl$;VNH)R$0!{==\_qkOH$#\~)Gt}PB!h3w\`6cOJ zbV(YP%?+VnGV}RW\_!>Iz#?X@$Y)So+btA<1#v%1fW-dw70+Qj>E=e?BL@fiqWM@FR zUlLBavyX1?Nuo$Rod;#4tJa%#KFO{-Qkhc6C)p3AdPMemj!2ari8u0SwC$u< zfrcx^DF(k{$G(|04sO)t;0Xu!\*B3EIgs8ZRh)6qfDG-Q324ld1kW-;s)Oxm8Ut\_m|x7}E%zEh6UO z(X-{QqxqSR\_s92Ywd0GXOsq$V9;CK|vxRp(ppuEY()2YUH\*F}WLD}jZm\_854TzCz\~ zw8J+LOfYekllryc>|kPRP\`F+=#Q>#$31>R8\_|hpB\*w\*{g\`H=ek>=e^2oXf?-QPwNW z@51VScHAt^tcMR(lAZf}bclh-P(c@=eRps6H;!Y2\_PdeV?\_6Q3w\*Al\*h8}^pt}xrX zSFSJ&JN?oX76sLVKHOi+H!@3szs3D0|pUn)+S\`rcKPMl;>5^-E7h!JO3f3HfqARUD-dj2mHJdQKJ5j?J^C!v#c zZx-=OHyX;P\*K+4qwK#P=-d\`oSPQ6p}a;4&j6@@qF>%Y6uLWd+-{<{mU;X>;qO0\`^Q zJyc3(kahgZf0hfRH\~urH9e?LP>mSS9e>OVGd\*?sB5o@NRjPl7>a5>)P??n#2 zvsGPZ>OOmPo&6Eq8LbMX^1Ca{<=ke6^1nKfPdzdN9rSXV8i{<3yghzJTwUh!Qs0?A zQ\`}(Vq|PhN!-12-E-mp+EnL{Z98o6@rraPv3XY?4mC>7^Vd{\_oCbI9!IY&OGEX(En z9X%nN=rC<3$\`}h-dI\*I?c4pG^phjR5kh^uCh\*>MDih4{QtCGM}F^kTu#Te4HNB0V} z7Ijq\*+->T8;Ez4(2&Zptlx(o\_U@cF|W\_udSUl0q-6<#dHpu)1;{vdF$ttZh>)9ydp8m\_7J5?MUgfuQtWWl0mindIhtQ%( zUC?WrfF3MU0-T#jS\_g;>^&K\_bjxMT^o{#X@BXC\~>{q6B4r3>C\_JvE\~Goz??Bwr}mT zzNS5I6X-arpWtF;NwGjg%{LTvPi5x|W\`dBl(X=Qi{KM=Feh+?J>d|z0zUq;Y0!oYB z\`eS!38NY|;m-\_iVJip-cYyJGe&r8K1@DN!&Wje$f50v=;wG9zJGgWXC&\*lBSQ-Ius zO\`<$W0p%hH=eiU#jj#Zg{P-T^CU{9<{JSWEXEJ^t&-590yv^#uK8$;8+1F4iX\*+eS zGKJ66M>1d>>pVloBS$#3^aU8JdNuL^$FbUcV{Iq6{7YQY7BF?M7ikQOdcS0(H%%\`W zb;XUV7j?!(9U%bl9bM\~aWaTGX6t|ReRPUcPqGVrbIj8P&>PqrD?S4HM-bz?dp-\*}N z7jy\~>%2Y6!BKl%w#c=YspY@l>#u\*mNSezqQ<8CB2$;3h+ZMsBICjhboD5D3\`YKj-( zu\`1}G%CBj+tkRhwtR5Vdx#Km|52}WWo)uOmE%8D%)cZ}ZygIEY47\~\_cu9NIk+e\*Pz zWa)m>\`o$}Z5wQbLpeQ2\~UKFa\~aVb8;-x%\`6;KBmeK\~FfxO7Xr-ADkQaTHt?p(?TcH zXVaO9T0g}\~bynBT0Ld^wrKW8#TchopXsm5mR%gPfynCKFscyk%xq&vifx3LV44krc zoe-N-6ID((YOv|b(d+YPD;J{XxfD69KdjvKiFTZX#\_@VE)\~W^C-QeGoa2T\_UOL+>l zs{&iM+R<^Nk>sAQI4;y{J\*&84\_BM89cUTMYm|HigPK1NUxOMGK|IY&6RN<8+ ze}-k1hmYfq5<w^xdnwntp~rk(qnr0q1o0#jvfu*7=7-fibt;7+?jp1zze~xrci5dr zv}fwazor~keizhvuiib="">pOGBb4L-FlSHZ<koe$b}sdddca)orth?tw#c(>5n1l|2o z!e-aeIDujpPn9Lnq6L#THES^^k~g*dBX278R8;R`Hq=_HPyURfed6yXHzz!sV<tr} zxir;4l!hfvpluxgcmue0qleom!0a~2g+="aCF@QP)DYA%sUYCRw0f6;xU19vh#LZs*" z^="">UO$8T&0$;G!39yuyPB5je*gL&$d{>fsm%<2KU(f6e5sp~NPx8@j0iJj$>31$;I; z@6IS;iyKv!&Yve4pe?%R7kTmq{EP&aN2tZ4ET+|N02;krURCTGJfL>P0#O>|E9?qR zhhh8Xje<j|&j>5^oIXxNZ9PHyHw7og!COPT(%#ry!^2`#8ft)s7_GT<fbh$cisjak z49oyzjtneaf|v&)vwlwpcwe}qw}%;+3f(yfwj39ucqf}v_3e%uh#470ha$uk&s%70="" zm!%ggggr$at!hxyw*1brca-i8el="">?mo;xRrb?-m~k$P&5*K9Nj#c1ouSQD(Tocv@( zU1p}514fgc+SiHEkVK}fClCFid?TI%`2|jvwM>WBG;<tavwhc=%l9lbbf6k z!*2zk*t="$vLF7&C4oW;hpn{q^C~kRt+58bss;u^?C">)^aiQ+sViix|I#sb+Y`0{H- zfgerO)x-c+0DDT+Ylbe}M>o`)%eoED?I?ZKF`h#3Z(;%1CMG()Kw()#eM5~TrRV#4 zP)W$%yU=$~BMFzC{mHL)KH<}_Ck47PRdF^|@dlYE&17d)Z702KCN=I-Rqdo(xB1aa z70U^7=2FE?7op`N>rO}^5G0_F9ZS_;F4!m+bCw1)c4HYm>fr+#`>~A1N-C4I7t3fu z=gLO*73Z39K20SU$T2fCT1v3b{b`4NesOO+n!<ip9$0hlo!;vv9odpfce4&sjgqwc z3$v0a="U4n7vI1d7-<H1eS-|hCB|dNS3fb4f!)1E6g1*zyFZ$@J_X$nb@ryncw1SSC" zh7<a}8rzs-dy7s@s6dq!?_xk$lkq|k@="hGL@~^g?MDU4|diPD3os-7sL2-;Rs|{ff" z$-9%94|6ga@p6|pnc="">M8gXsprW#J2*#0$4c-e$F9AvZ6LXta!Ap&<m}s!(wovlhyu zd@k81pe{9t;f~g@*0@55l#7m<hhc="">lSpoAl)%Y@S7zUSs{bB&EqZmDa&=(b>!pSpl zP0vyZk!&M!^--|XF^L)z51T3QvO?zDOG|(Fq!i;v<p*xm*u&2zgrnaayjfg1l)sf5 zf6fz{v9="f07GY^kMSZG$AjVyT_x}o!P6<HW09p47^}jGfnwWa8A2^2{ZE@c2aSa=T" zc@co-k;ren7io&px3c9(1tkg|k`if6+16go?6m="shx#lCHaOu!4Th7r(It}7n3||G" z="">aQr@k0w3wiuRO!fWtfC5W*aE^J)&!Wjj!QW^r+)vG>SBRy={iIws>D>3`=qh(FBh z5e7Du^*ILdNtNK}Gqzc=rnNA$J1;9CPrB`49c`-tx>ENbALBb5pmvJ}EGsy!jq93Q zyXnyZcg(D?*Qj`vhT889wCs&IS$uH*=tqva^`ki4B=(~%4s7wGAN$f5SK0aIQEaZd zPFU8X=_$`+Xh8nwQP?d&@``5a_%>7ob)TlxbL_(gW%GYvOc+d5#(#C`HAj@>X@+%~ z*IC?yVk&JzQZye2QA(|;Hq|U7^w4W6>*AozR$5nJNn+h)44|Pw01Ns?gHRFnQiEXq z{adG`Y7n43e5*l#_6<0v3r{+>N`WxznkV*3gD~vkNrR{dA#ANxg3Kieyfah`ml#q* zWebK1C|h3}Dx!M>z&e^*F5!2cD^*&7WY{E3Y@Nb6?PP4Ugmt3mzrG!)ufqou?}?>l zt0>)fSXx&(;vvMv4#QCi@HQ^0#nhg(k%oQ5rjfG-zOawLG=e79r%V!IZ0e(EaJMAH zMtAn}^Dli>QizNZsBsrO)(+Zv0J|gnUnfKQy&@Pjw^M1H!!7IH@4E%ZC_i)T*R#3J z952S-Aa~*97A)~ktf+400y*X<uzhpasdl66ie=j9>`Z$|h+B-xKMUAKe<akv!e>pN zHz^+vh2bP9Led%~4Mp7dF14UErT82N5Wqa*%kCCS0UKkIia7k`C4=WI4j(-Jf+I@g zKvoNv#FK%eAFarl^6m6W)PWmpgb(rPWNyT}lr<)ql`7MwEWJ`8qt}&Sg4ex(MF(7J z*zq*0-9;TOdJSY55V2}KXx^q&F1PByXv~a=x#24j*x|hk0#1R!I)Bh9McPJR;a8&o z#L5)w)}=8*+}<~F0H$=+aRAlp6)!^P)o0^BnouJIbaF^>`%?1s-4L@p4oJM_jFu@m z>%t_s4jB9tM#eUeyIgmSt}A-(LYf|Kh%<j~?h}sytd`4c9l<(#s^4ohyl7px3ut%r z+@}fglaf1nsg(9_ukpgi-bsqon^go3z-4d4bafltvy)4ph$d{nr6f{j`ac+khb-p_="" zqp1gkr!ogy5yzvepvf|byzeootk~s34z;*trl7<vlo-%ulpnehm}cg^m73jcni<v8="" zwf="">;uV?I`WQTBma*CIBfXhytRR-z#$0?tDC{JrTa@Q~Jo7nMz-0vFFE2hykHM&G@t zMNwJPA-NFGpyXiAAF~%z#+Vv{vc@TYyQ(Xk_9t<zic!z;dg#s3%uvfmh8fvp>IB6j zj+2H|j#V5j4RkJ1Ey*gm7*f&VAVO8NJ(vUKJoBhZdo(IZ`kbJHS<`cMtkbon!z^#` zqE4vM<8Wj%H7bA)wy3|8Jm|87IhEQBb0IKEFrJ)JTLw9x%+z4m17C#kaHOia4|x0w zj^9PJo`aQh)+9_wofR_C{AKA<fg$w%_~_jcw$yg@bdfm<l*rmweqyl`vktc5#1v;k z;nk<+*s|0qq@-jww6n20hiye?xs2*uhkk="">~jx}(Qm~pL-t@UH@gp$WB0oL;x79q8D zW-*&)`P#i^8PBp*@^*Of{^4+I>$pMMUe(kzyT#JuJvD|j-RXj0a;m*6yBzBTn2qiC z&pogESGWXsP!_qtXy=<zc{n&>SZH6)(^2bW7Gj-WHC-alUfYQLZX0iUv=K`S-<049 z0^4Avs$yK<y&^yx=v2!i-cdl|3|z?coe{smna1ah>`-|Nrw5$&#ML*q#tXD>E#~dH zN>jHMYKkJ_$!%ZMi%g@{;_X|eqT;LL#R{6bCo#A$oAFCen9exedk?R+d`2!#*agu^ zsw(5pGBFI8p)Vn&l?JStzzNM{wYwMR$+uX{(744&nQ^ynZSrh%6;gy*l2I2g^Pd$y zNHO3k29<k&lb6b*jcu@_h@nvggdctm(fivecsx)pr~6l%c6l>h9N!=%YR<)Y@~0#S zZ<$#pL}DG`(q&2hJ>TU+VktTg9{dIX1o*@CnAO}#5$*y>dRkrqNgD5i7VEcJlPzBE zQUux{6>O>>+*f(m(^o0q4vI?hY%v{IQ%1JI#XpW`V1C}AFT?`tE3y#|CQ7U^P2ka; z@r!%$DK2|ZgEtqJ<a9uhw@h*@=mha|y;;mx;k+8mwt*y^nrf;3<jwm~pkv6(xah7& zzrxaw0njmxq?tru?r!~b_(m="W)SsxOx6lRwIy1;SUSzD9AkKrUUpN7Hy+=)DaxTR|" zgr{n#zb<i2p{qwc="">j=7mB6hIkEtW%?aF7Mh5T+gpfxwy&rZN%X^|tE{cFYjVP=x?g z#)nb_RTTnQm`d6-0$mD=b(2*Duvb69^Nbctj&FIeRFCB02*;>F!owDu<<f5_gpzb) zjmkpynpbkvivs*z<39}g(l?{zk!="">Ou4q{qdd&JP+%Tdh@OB5)!fU>*%;DOolWJ%oL ztM4|c0zJ!vi+oicy1&2wJp}VDe+hU*UEbf__{Oe?@97`hBni!~OtQc3FJ^sq*5Q}d z4tYy~WapszCP(6(U799Q044QruTYSQwl;^4?e+>d76l)XmizX7Eq=eY@AV|#j^Orc zeU;Dm7%+Ld`1+;^e(Pev8i7fu?)utW@UGe|1PUAO&<o0a-+$$eo`(hc@b<tmg6}}~ z(e%rql4~_obue="">ak{K%mKL(B((OOg-gvKkW>I5)CU6&ot0vev3rF&$r3^kY{vJLAo zpl0VpyQI@}CyZyoqZ;^M3?2J}vL&1M$@E;kAkmw8(yxD^m}zm}aja>_7%^k}WPXu2 zQmf(HY`m|o@S`}wE3R$#W*190=E?bo+bO=52#uQ6i<@0qJ-*8wV*S%;^DiQXWgWZ< z*#jwTT*=|@fI1Nc>1YWLR0o8fp4BwWUCnVg_<x?am$wljaec){khi{`lxf(xd*xvs zye^iciosp="mJ^%Za*l)T6kMJWNO4!Psjng_iOm3_@@I{!NFd0waTUp=&UkV7v1)J6" z!mt3ln)py<oa?pax$#dd%o3khc)t1v1s!fqnv_kf##="XZ6lrp4-cBMg?&b">6JcLOa z@R{Win**bs8~cYGl0AX!KfMP9H5KIpu1{rtwGX7{t7<gegie4^^29;o0yh*2f>%I= zY_{DAAM71%e#W$Z%;>x}{n&iA_8sPR`g9E?xnr|lJzQUJShwuQGDjI!srrC~b&?=a zosRuGi|lke6mXKD)>=CvPups&d4YntL6H2}PM)qnFNcQKnNKmrpccHH(w?Y8+F8zh zQgy=BFPySn-%es)6b66!t8)P%W>-kFDsnN7VXmGhuBuA!x<l`e#}2tj5do7y4!lj+ zod{g`yc}<czn74gyc?~c`puyvtadh6n%s{?l*w8hs8b;~w-1<ts*wzn$@srzgwg+v="" z)}2="54QE!~Ku=AXp)jUbdPw75=Lg@@)woJsqgVYI0_=S?@@QP8j%kV-N3<">ydY4_~ zrTW?==kcUj-jAFV04cxO&0WaAHQAzlRsr3B<4{#Hr~@66P#J#^g+j913^>Qmv`iiJ z%GR)(1}=BV2N2g*BnwRg2=dP50(>j)Iw9=7n?Ps3{^@;=0Z@5<t*l~yz*x3v8=rog z2r1xjjty!loumig<m)7*1c;<-r8}i&it(+a(i2w{wf3x!*!eqc(okyggjwftwv`s(="" z^)z(="">f+g~fK|74#$N5Grj3a|Lz~ag=juBd#9btW+f(qQ~-D&X$<)=om#0lB4(Y5sD z+RkD7X(!jiZK^)e5DT<z`e+sd5flyv!pbigiemrs$buwvfgp*6giks()l#w~pca=g zn74`3%="">n-}VTIsyQ!ByyOWtBr%B-E2LfAuk<xr6zz^1v+hzw*gnexwizkh7^vhhkz z)ewu3royt4*1olrt37$}k$2cq*u@tfpdobv_g{b5b+te="PR^dlt2NbH&`O;?1+ON`" z#-="=M9YNO!S3F#z{A@ud3E+8*hmr5w`1}!?vhJ$UwJH&qhW}1&N~2gFY7pqE{j3Io" znt_?mab50s)j}|f1ahwrcjl;$xxn`6tmpnala@-="">l45{L4HW}05O6inDUWuzW<&v{ z5CNycF-C0HS(d{MaTIz@pL8M2#ot_DeDaKAS>jlzJGGQB`$g`s6y{{N2g(G7lDr{l zVsqgW)L)ucc6Yj;!?n=$+uGM;S24(YB$fxT4Y6v2^dcj47Ye$ykj#|J^4ILv1(&Y2 zS-M&Y^()05E_;~`n!APS;=t+H?PX@$LbKRLNpX>%4+39ghulStvafZP6z4Rde*{Pj zvT<c_o+q92z?g)#&c8+f;qaa~z){xg7c{^@6;bgo7>EMREnaV0i;f-QLDG^xpR;^` zlS|JjXe)ILMF_B`E9K#cM{DBCdif8patRuqn$ac1sby!FeR5D(E}EMZT5Mv zGE8dKW1?lYC}~$_0I=Y#7U83?Seu3~c@Q|W1~M7bEe^vvVBVBl>F@+Swe&4*AoekK zgWNGzxErS|f?(3FB<`vm`R-S0tZqDuj;2JB?*XGhU+@ss)QfQ4eK&S5gY*0a$HfcV zw=3_p7aM4$o4FezK&cUXxl(dE`i(Oxe&ECp!|eGxLbQb*W?S{yg{LldGr@eDv&>F! znM#45Cxvy+9D}+^xToy$O}8_Jn=bb^i#)JsJgC-?D{G}k=8d*Q;-CpY^+HR;h7SdN zx-mKtxf%V#ZS2WdSPDS3v8T{uePcm|J^jgJasn9S)#sN1FEGMiFP0l231E!hYwa^a zD730dYI_N=E;!L9y`sVUovi>uS<#~wa0DX?mHibyan%=IR`xe+32plhaHIe`p+{p2 zIBLbZ$akGs7tLDBmlF#F-v2*TuYN=TZ&{$_g?8h@S%^s$)>25fx`)dwZSl8kZw3v@ zC1`auzJ=$5oHc+GIXh846k%7JiIzjvij6NMp?J@zc0ke0o%$_ma9~@n=6<q|htn8@ zvzv(bozgl@tn~c1=""><#{5Q0|Q=WS-#3gvZhjFl?OCirD{HNe@Z7h`Xa$xMfHe@iBt{ zbGkDT%MHa6H_>MHwI1!D87dEkwku1*{P}JK>NGM)BVfg7HG!}W2%F@g$f6)23_oBA z8s%H`wboM!v$2XY<%Lc5n=8nuyby!{UR4`jr3tW^H9RbdN3NhSQx{yC#%yPH2J}}+ z{7II1ZKHD^&?nd=Yo5IDTsDCBD7(qKSvJ61P#WMep)OZ>6b(kt-HIKLB8am_V0Yt! zEGGx0Usz=Sw62jYVr7yhwfI8bHtgi4viV)!c7Tt+$=gQCdz-gCxrpW3l7BYhdBDjP zi_i5TK^^wMPvi1-Hm?38GPB``;8&l31+!R^Ylk0GXJxvE^splL>w7w$FE=Hz?TX5m zHcy)m<c=0rewet~pbs8ufi-=r+64m}g8rpvq&ua;*l54z!ia^u&m^sbe`xyequusy z1}@}ct2`p6nmu`m#ydt%<E)ABVZm%Lx\`F1X?M8wwTMfKcL1\~h|b;&$iZsJC-@^xbU|2+ zM;5\`g7Op0Q(M>E9ONiQTC6-MLl1-Wz)&$+Env3Ws\*UK)a1evoocrcR;\_zLfcX?XEF z#)a%1b\`RT2>Mu55XObK@De7d=)6?R%=%xWZE9}cteNUv?hBW\_0j@;!UF7oG+;G\_GS zFb>nVLY;>u6WcoZ={JUD(M\`h8z%bDXT\*k\`W2mxgrwL@AIt|U3qpj\`5mC@Ggt\_x86c z94cle;>+=4RJ=Skv+!uhO@\`%n\*3D4\*TZdQd(&%x>d\`CPMax|y>Lu(pi^el0aMfCTb1w(?r\~ok$;BXh zP^\~4ZDn2IX1#1r)45<^)If@Z5PlGcYG|c5G\*rXE%6TmZPwdP?k7}WbmHIj==\*5|qF zO%F@hTIFo}!xsGd#zf1}q()YYxK7\~wlQZjXO;;mRD5>e@7^i$Pt87>pu2O^jg@AZ( zJ\*569+x5(jekfnoz^(9%HgT&hrq|@D=OA39G6?Ivwy?1@7&% zE?BbqGEX9(ddZ%G!@A!y$%0pu(^nI%v^Zx^yg%T2Y\`QLAIE2v8FOU@F\_)lYbr8>Wz zLCpFsXG(t6D93l2SAM2IuU+M4vZpcfX{ro\`6a{vM0{Rg;g)VkYEPjgu3)xoZ>E%(f zW0x}!ca#J^W{2YC3e&rQV\~tzx\`X\_Y{q)cayGV|$5YHK&GBs\*Hp6Z9ZJ-O++w{\`Er4 zz9<\*Epj->\_Ivg\_jg\*Ee\~u!?Y\~EmQ7T!PCUPppJlwnFdinbxsp1B0a}S>kO%f;3dL> zAzJ\`b^nEftcMNSr@3e%2LRjd-X\~BbH4D6fOqhHbbPeJz!u-goDUy@\_v3Q(Xt\`lEsX zU)\*oT1c2M>p^i\*\*col#QQao|VxVOAFrr%@J8>0Znmdqlra03ehPfN69k^x^;Ju+J% z1T42SfFxiehC0\_Kv%\~=UT$\`\`FOwp\_Otg9ra\_$%L3lq#=%Q!vigzA1g@r8%h{k)KFf zpRV#GX(QzSh}FFJyY6UkLSXkUekr{JjqS{}1V-F70qCzVyg#y1+zA19hK%!7orpBL zagA?6z%Qs-Q^l)<8zn zj@JR46J}!rr%\*HCIPAzCkY4WMlrTFmxI40Rb%Wdpz}YE^&nIG+>&NPBImsxS2D|UO zG?+i$I\*?3XcJtBYiu$cnh%T2uU?76fbE@GLK(v7H-m+X$K\_y(&+@JzZPXWmu1P(3< z$(E-YTBpq3RW3Lb2z\_!H%r5TMD!\_A=?qYXeDzxA)>ZGLJiIa58^PFHyt5ZHWtud?+ zwcw9gc\_?!foNVy|vtJ?5NMxQAqhu^q^;IH\~S=8Q?YHH%Vju\*rXyt{n1T#@#cEBEt> zmZ|@hc\*R\*73F9n7ynI-^jk-p(eDu}mD|F;\_H}Zu1WE@t#EY1o4D-sj$u3@74vNQ17 zI#5oJG6j\`dFpyAB@PT-29\~7q6Aiy|0^gX>4XDbAM85n|fPrv{\`!^S^IqimGXi$&clXZ#GJHrOuc?\*TcyvS3sCJ&|PX6t>fN3kIjzrO\`|IkxFc7lXmY=N<=!Vl-PdK^o|?6I?)A z54YPbWkpw!VZWj@knMGk<^;}eYo!d5DS)OMg+h2tkli1u7S=LbNZ1t4rl;mIzLStg\`p7QZb>F\`FC(A z3Ryf^G2FHxyt+NNck\`H0m<36Evuuu{vce6bgK\_$Y4z3?{?)mG%d{Ba@7j97v)oD=Ulx^S#=jf%Z!fRuhTz\`mb0-sG+ zG@H@ZH#aGm;4\*7ZCDJ#&1>VJ@kB(iAX>RlUcXnSNn^81AQ8>u((@eH0R4z=CCA0ff zlX!@\_7GTb(R8@HgGF5Y^t&PabJ7\_$CW\_eIskR;zY(W2xrwr$H{$%6vza\`-jh2D?}N zCF02kdDY=@JuwCn%oyU=wjyldAC!prlifSDR\*=%8WhJg8qv$WaD3fHR;154&yA4dXz(uD$q+KOGzGhF4K0cjfFYT)K@o9&7+Esm>PgRE1-\=5\_ZlXKKO5m%}lyd ziPAWf)A@Q=%FNc2yt07U2m1>Uq z3?+e0R-$8+9}L!U&N;\~98bfAP$RX8DiT=rYLjYm2g$J9MCW$\_k9E1TbkOqDFtJraG?J?vKZ#o!)9p=|\_Gj zMTl3hpLs-\*q$dWjPe<\*MpW{1tCR znMW+o0zp)&>4>^;f6fv==U@qX9JO9\~3IZB4H?j\*StR4EX!3w=AJNfU8pKR z4#b!OB#D0KlsD1uHjEe4;{2X\*zztq5Cvg$\~)@+>e+?go}n<#3jyJnA!Kc}\*XFlQ\~d zxDTs\_wtz55MRR|qRa&w$ zn41}\`68|d%\`vt8!i{Txux>tUIGMF!DRo}c{nX@o-p;fmglEY+t%3;bON=7?@TTl3DIPRuS7\_X zjnU>WrPn67cEA?bNk=o1C58G1S&%$b=84-?Zwa?r=ZmeanO; zB4?3nm;!99;}?O%-q);{uxQ0>RV&tlRx|3udCK>A%g47PYoPzn1Z\~q=DB6wm-j;\*4 zwzRW}%&!}HqoW0O\`(72OccAi0eI&7Tp\_#\~fpj\`M\~i7hyu}x zgfTfD%\~NYLYKQo\`cV2TsZAI6y&0hWtKw{%To9-cRA854(ejUmy\~wBH9l+{pC+VGIXxoP8Il<\*0bKZUAZCbUUvVO)Sb2&RIOcdAD67@ zZiEMjx<%3$yv3(<{4(3s^6Y=cEvfKy@RiSInNt@tZT zkT#5wNzNieTv=\_nhipnOAe&s{Gxg|KVA5G|Y|7m-+^{Bwh5=nH|Va#MKT3OY9y z^7UdX?q%7nC@}pt$(9\_0hM;3AAXI\`VD?1fytGx1p0@)yS<<\`6^R?sOMh>?VSIO1gd@x z7HQzx)jNDi(8-W=<%%an+epEkFDu9-L2Aq{B>sQvj62koY8\_$u{<5uz^gFvpFuvLP zHw!)tLcuNnEYHv3&(p&Co=-D;x!w5LD2\_l\`ubdgb$B\~XI8 zthrrawB@d|G!Au!f!\*mO-7^7M3\`!MyvT4MG4-#1D\*b>(tdV1mSZg%H7vhAPFoiPeIyqTc?&Tm\`U>ts{O8^d1={oEQXr}+Cb6i zg(q#tog+ucib5B}9-uFfgJ)v\*RN^J|\`3uVf?-ENjhRL4HqB;>GbMT{\*#1b8FFoxYEj>>U1hVCW=>}c>8VQi+GZ158?7$1Jn\_U7toz{Ak- z=IY@r\`(ITULtPuz)fDb\`;R$BU&Smj\_{j|B4VFq\*(Z\_#;lT(\_(D0lbx8LGRIH\*+|vt zMI4Bp@ft;&!jA+x\_CF)WPaX5k82AD$IfT=\_1yVTqPPOWgEqJ^J0H\~>s{ zb1P!B8?S0m2p?R?(dKWNlp&2445&6F(K4!BpD)Z{S8G6ZZa!d;weitr\_KjhOTZk=c zJJDzK!{\_63Er0L);907j@8w=qiQK>Oi}@\~ObaMHO#DyLJ0F\_Pe40X+o0e123l7l\`{ z6XO1y%tFVwUeA\~<\`z7@4tsxdCTCuLvj\~g=DKs2u\_%&9Vhe1VB^1a|k%Vk@tn&;hl4 zC0R$2bAM4CoHzX&OUW^D5JfL6C5L!9hEUVVV5Oi\`TBk%un>{>M{(}kYpN-$8 z6\*n\`\~dTG6GVmfyW)JF9@pRg&<2IGtF3S!Y$@)GFB!So\*c86j->+40efyh#=OD(buf zpV|utdXFlQV?Dar(e=%g-1b{\`\_Kl^f4 zONM\`6@(TKg@i\*vuRd^Hw+SjG8}tsB=Dr|6;UK^s;&BqnPof4#gA\*Puvvv-|X9d6I#L-vzsHE0ta$b7( zt3C|Ym%Yqk^=pG)oj1ZoUMAHHe!Xi}=icJ5e8poSY7)XZSAC0QPR8?if&NDZzAgyE z+jK3=ZG>qFcFbLVMyB7X2+wH\*%|aR71xeSULdpT+kw4iLbB%f!lbJE?gq\~+2oqGn{ zw=;d@U\~Z;9qkC#r{-|b}DLXG\_\`Y(UZuJ4Z7q;->2IfhI0#\`\~0zNYEk-X=VH\`Pl>nx zKEq(d3VBw2NwMt-DZ3UUqc2L>iN\~bfSmCX1S^R#Fy-SLPSA7%ZBcqgs7bU+Hk?Mj\` zslyO1i(;+gU{vKgI+HWQ+uN$LI(fXwkE(?9YStxW)2gx|tBq&\*vC4+iMt=Zd|0y!% zbVlD)Sr}b$RnJ-+-!\~(sL\_\~b zIz@rW8\~0KP%Z95e<=pTCM{9Jzf4DnBA)>\_qD+jRmuYaKxcm-76je&ScXS(idm$%Bb z2E3t6seQiSXz3)M&ljXM\*#l8?B|&By53e>3uutVg;L2g1s2tn9(R}GqF1\*4-e1Itv zIO;W(1G>l!Eb2=O+4q\`(KMjn839vWgaZ7=pW!BZd1oD-kZ@NjQWbU0yv\*Fl\*B@PN3 z\`k}&lC32rNh5F{!\`rN7Px3EE-)5S+&=Ba^y&;YFPxT$Z2J+Ol0k@UKUNoy6269@Cz zG\~C(w^{(H^ZnKh8>9pQ?z7lu4W&}nTXPYN5t#emj@B}|3MHs3pkZVgsHMMUo5of\`E zV\~MnT>{%igcs;N1T#HxJj6wD^SL||0kJ?c\~3vVdk(9t6\~gQE3AF(;e+K2S4OZhWM} z1\_|;Jqz\`6S(E@Ignngn=Wx)^Ok97({sbt\*)!L8F6$;;PsXk{uw1!c=rTwN%ifb;Ua z-&OHsuP8=^u zvfYPC->\_no?GuZ^aso\~f?wG\_BqAOH(>cib&yV8R5?t2d?%X0eZI(0yXj!cFvfE%mC z39xA>6hb3YE3BHc#<\*bA1C7Q+f\_TfGXYG%+v$qy2dpA!o<\`HLqzqxLHx%6&n@xZpC z5=S\`\~z\~d\~GZz&\~FEJ$#@=(ngvy4a0%FxRWZRAHDRx&@R\`17|(=s8\_Ia!gI(eMEU0\_ z9&0FJ\_Yj^E()>HO8M^4E^4W>If4ZJ7T!+nlC58!Td4C2MDTcrKwEL1WWPcrw?HXBNkLF(RbM! z++4}urD%F7\*H26A?v;Zf$Gha}a2|\~&5-m^ps6-ufVD\*L4Z\_xhq-V+ufb1;H87j^^D zLf4Um6D}AyCEa=XVpp9xcS1Kf)$)$A{-et(Xw$#QEobfs{!mf%=9FPAS2!\_c9 zFGAyb>spXJbxo\*Zq^m86S0l#I+tl5q8%|M|FXoYO&PPQykSHLHVQrSfnufie z?7hN%wrl9k\*60Q@wmq\~eg\*c8u1fVXG4hAZCh\`oqeUQBWMb#?W\`g{y9^Sd451AG0ei zH6u|p$XOQa5=ua)k+)yt\_NBEiOzz4jr$I3qiaDFdie\`UR=o1(D=;h z{)99-wl|Eq=jX^h\~qQ%zh|HILC z!>qY#rA}6mu7>dfXdn+9#|(KTm4VIQ8!wi<1WCQa9VD<@P6l^ueO|WDl$M2Fp4\~9D z?}jRNpI3}uokll9gAzpItV1\*$\`&RoKHwA}0u&lfE8C$ry3wYF62bA4SFZ4Elg@jfx zj;T&}a9o5eBH2jL\`^r1#>bwDsnjg{pHXGfSSwN{1oeapjJLZ4vx\_iOzn{o\`M70A&k zz}IB!!rFH-06KXsze|EEI1J(?u8=YZw}DU>;Ljl2#hLG$qfUiKW(oblG?CjmG>DqA zg>cJJ)T<(yD1Uz&\_--Vt\*RVk7pC8^LdLcD>=HlL6%JP}P81o0Ko9\`f#Qt|kxKrhZ zN\_m;|\`W)Y=)CxPdq\*ui\`MjAYW4Q^oEHBSwI@X1Qf\`Kt!u{$WwL$^y{IsOkt#2Ty4L z$s@{N>3T6WQFS$25L3^zK%XgzqMVt|t;\*R15&vARaN(^wPg\`Ia(G|K+>+rd<2SQ1B zd\*m|X09grEE!IsDiakb)K@O@@F<1At+eRIc5!t\*j{-x#ckes|ng\_#r&W(y0kd8Q\~CwH%i7;0{wl1yYn-IJEBFT1\_B1v-0\~c4PoVpbOK7{;v90%Q|HXePhQhQ z)>PumU\`Rj=W7)#bLDCbiFFJ;Ce|mASNjf5\_Z($tZ9?r4n!|{vaw;CB4y=Wby#zTjj zX3#p<\*TJWn$(4^7y%dgEH6=T9U\~FbZOqdr9\~|OC?82\`#)%9cDFE{\`fwq8Dn%t\*1ra-Fqf$$!?izs8b&AT< zyF2tP=7Wq\`LDNl$\*AA9xzi<}o^5^DAa2w^QLoY3JP6l}N>2&et=n-q2F7M^@C$SZ< zlbtRx>Rbg^{rSPDYcQcJ\`bTn?%MRZsxCvV+wGkN\~>\`;Z8yP5TvLHxD>wov}LyrW+\~ zzIO&o)EI!r-qrpa6S@)NQpx7SQU!\~;p)6&ihgor\~JM3bF?qZwXVw!&{egZ8}ywI2Y zSMie1\_SQ\_+ubH|tKYYngyZo@+-U!pS7iTgrv-EJPQLU{m\_T5yiA}\*j3%@?Z(3#clk ztYTsSd;e}\~03TN9Y97qlT)90$X\*;+C-tfACG)%FM%6sA@uMH9lkiL7CqHE6Fadxmp zT|wvAv|P7mQonSbgkRGM+rT7jc)T%=$ZtwB^Pq9q;{|OPO0AgH\*b4i883k1\*H\`I}= zlk;U>8wjv2U#vW?hU;\`vC8nS%zKPj}mYovUPPE958J\~|IF{^Zmte|D=CnU;aLqt(ZL(\_l^\*UwU5@lxjcST;8V8VMjX<7SNGU^vQkD\`fl\*yAO@P5HX zOCiN)@\_fSl&KX$0rg?}he4vr(;Y%=-!GXBbEbGbt5BrEBfD#\`rs^R0?#@V4ZO zW}&R$iq^\*6$\_s4Z{q$)aqT7>b^EOyWik7o;GN2G{)6q&0E42;}sOGb16Krnz7MRd3 zT\`46Sp@I>\*p-0>ns7Xtd>(k2\`^8+Mow9PjsQ@-=m4a6wCFp{1EnyN!4CUUbmwUKw& zSGT2\`PFEecvW8gpX@g1aL!jsm)TU#nXLRy&T(\*R?qqr55RyTUHb1|yWSBe%i(Ygq6 z9jcZj>3xo\~A&nqlx|-t\~(\`rURR|CEW>n)KRKG@VKt%1)q)V4#)zK>A%KKI|Ehg4z0 zrkk\`CzYPP;V#l\*kMy699Ojgk\_D4 zsa^EEJUU9ehpYb58XX)S7J#)meljlw\*{!7mE7Glw+z!3DNL zdk%@39MOWujw%\_N2rEY&=jSG)R&WW6)3bRDQM;vXGDu3Gg-7a4\~}?a}G=NMR}?C zUG\*1YV7PIo-Ry#uS!TTfUJKT+L}TVHY6%f4@!<07r5XjRxv6sJfHqUAiWpd}(eWG- zLkxI58Dc&4KSBEH6Sjd7C9DO\~R-DS\_Gi5HRm<#sQMX8\_|bR\~L;cns)wRv62xhqB(x zyvu\`yQR(kQe6giq7^%}GGpe)#4QD0Vi\_aFo=\`w-mdU&g3kV\`Za6a60mg{aLn\*lkL=lT%9f@unH zlZQ0VkwP3\`BHZju%PSeYui>?37RSZ zLX9LjZQsSNgt+$C\_KUxc@PSN+|6fxw|DdO67|k(Tn(m6{Qf1d;BtnP;k\_75^lFqwEa8MD63g8+ zp=\`=I^OdxmFR68vyt8CL4#\~Cb;#N7FQ+|YzuyaNX6MxCOIf4##m1I\_vGlMwD7%R0% z{@#J1s47XdN+Vds2U{7uK+H\*sR>nVyUV)ZD!xVU%A=b177@H2d4\`{Z}9bH?l){c69 z6v#i&C=lRZknk9|FikK(RN$OX6qID(ir^DS=c|ii1LQ8{^%#knVAHITgNMT\`sl>wp zYPs!W@KQPPPyGuUV-u&U\*ygodaPP2ftNU;bP5UkdeV(\_S1V-{!Lzu-{Ro!4x5e^cz z4Be3CiMY1K!#UlgLQ|W;wIEL)gKI;mPKY5\~On\*92e\~N&l\*bw#N{uz}0MQ!K;9(HX& zIqezpGs}q45\~1woftR\_C3LS0&0Q&Ho-Z-9IP@gZ&4Mcw&rOKC1oXw-^SL}ROLsC#a z!R=-VHIS!A7Al4bYKG8AcU$BrpIUpI)f1b9v;!Lu#8F7-!Xit4uJCvjv?1faBxs{f znNh\*KYZDH7>EilAFCn5H%OY=$kg(+y\~^8UP9YEK$RqM2EC zN$L{%HDGhJ3vFeu4(?=GBwa;RkutTBv@pdU=QZpJ7S!R5pN zTjn6Db$|@{yD=PQaLQ6Vms<=qT2<)B5Cdmo3rd&7ascWj;@+fT)Q#lx76Ml5|0\*N\` zP{gJ$Yh=?pAmRlunQ\_%JzovqaE87+R\_qx8EOO9b@alTcV9Zx%C2v&ESVqn0ys6yd& z9m3E2D8iDI5v42Vt&3MAWUIHSj+9\*yCR-ZyXI;A%MlN^&4oun}$838p=nrzv(dY;zNj=5kkG^zdmF9Cl$NO%\_\_\`+OgDlVqRC&X?}ji3zAl z$>5e%zO\_^b?=9;IaY>oN-f|%HG@E6P$F2sYqlwdnzmrXY-8atO=OSOC?w(YTN@|>i zMz!v8n+myKnndZDuF)4YFK0D7kf@1TDB#f\`5vC3\~dvI^\~HZrj#c2KPIf\~vhntRr6e z2LySb5-pyrw;HS|uWA-N1-?9#LZgSP\`%P\*q$T^L??Imr|=VzQ=$1-eyQ>IeC!\_f+c zEgJ;hg\~xKC;{bL+%X+Jlt8\~9inmj%+0-^dfk!s6R\~e6Yivxt>Q0V)SbwhM@^)sBr\*xcj\_wvso0TLxr$uH\`pY zx9\`A&a(C@2H$;3to+K+OWC+UH^5OX$6%k;|i;J#\_FYsWiL@F>$7&9UEC11Bokr;\~@ ziZecsH|^H3E\_|VH;pk?d($klOsW0\*n|8TN|Lii0 z)w%69cz8KY9!8rgt\`vP9X\_SGYcgRg>2RN5 z\*f6cGaLXBZSlQSd9;O(VIp8=%$p6q?Fw{&&G&Dv)wtcQpQ@ea{4;b^@NdRs?gH&uq4wKR$\~HwcUmoqG7Vq9|NX7#\~5&^omx\_D8HQe%OS0S?\`CpviEiOU\_vp&%DI%kbQ!U>#XaJVMP|fk5 z3x{;kV$Lq!Y|;@oZ^u4)b>|4c^qH+L4mPY!$X!r@++o?kfK3-jX( zvlAHC^YcD\`R+yKRbje4k?Q1J\~Y=z;a=jiGFPr^U>9?{Rs\_8wehg9)\`G4sW0gAmWYx1&i\~dM+9M&61 zN1sk?JF|Uj(@e<9n+%vS(2p{y6hG+\_Abm\~19ik8DS)MF\_Nsg2RI\`S!VH;nnXNZe1F zatbbh$u@XHA\*ApUJ(zJ!)3$dEPHNS8hZAN;D%z\*XuKClM00@c+n3>K-YPh09=$c16 z^UiQn>p{HFzaz)kp1a7h3ReM8yW7}\`L(xYO60x5a{TN+Lmt4LOLnlL=y&hxJ\*j&gY zOK0Qw-ooD+;gdAY6bz^w&TfttFzEmwhBmz\`8Jg#oUbvE<;KC>p7 z3upHD(KKT\`q&VB)OjwYI2-Pge5g1z%>DUT#jLG(RT0VBsU974|nPa\*Q\_?^$1C;EdN zzDgaP6(%}89o(B1oX\`;bcm|Dug3PgFci\_Sa\`-LcJNNzjvQAYEQfdWoMWY0PGk})Av z=A%FiE;LFmv)uCM;Ze\_^)#GE!$#^5C5BWfFg8gQUDbQgYF8}efzdP^BXNQlagmaZZ zx0Alyxpo;skb;Ju>-{oUGSi\~}4580tWD$#Sm0<9ow?zT3Li65\_jwpbW02bYQq)(5=n z!@\`qjub@W+(coMV7iJQD%Ovc&9y95br%BU\`s+qwHp&PZqi\~L3y=Uof&y1C7V$=nj= z;tz?#YrX1H\_sK\~ay<2v+Mwn2\_1)|JY<{=Gy1K?{kPf8%EpV%L|0Yn42fYxc zKGmryOuv-kS2oX1T#^&JQ7@^PA%M+cfz1opR9NtoW\*e1-W+IsLU1(6!- zX;(9}R(|hX=8&X)nh)wKDc7Yy)kU5#0e!XjApNzGcZ@$P\*w|\_}{#{g\`@LoQBn5rF9 z9V}^Aium83=|j^@?l\*q)(pDF(n^hci#pLpT$vp@>d@8XxYY=I@I=}\~Pi4w1z%kofx z=&u;\`IpW|6D<8(3yFt->pWqNG6iQqpxMVD7aoW}2{\_-NEmVX\*ve1+vWxwu0;%MhBu=lhnsrwJXlHNt5Fb9bt{iI@25j zDK{TrE@5tT)IcSAifRdnEa?RqDhX{kffVAE8fmQ-($eK66tePB0nU;UHeuw7yAZg= zE$)Anr(J\_&$icZ0nQPM8Dv68oEVd<;pc\*H0DFsX|wg^\*J8C+ zv6pTqRjS%fP(X<^d^gf^J\~ zEG=KO&&9sJpqH3NK8^-@\*>m@yKosBA\*}u$;W2{-hof\*\*9-H^l&ZzU%CImb7WSbn7+ zZZ5l)zjtB8qe\`XE\`)4\`5M}ZvaqJ##nVcg7v8&9}KOt\~ruqXA@wE(RzWY{BGFgxhK^ z%wuJ%6ZXbKxS0uSEKnmanf;#KSB+3=P9\_Vs57iZT&MnhynbuPdXvGtaZhEhaOk+;I zRIf5VrVdO(6\~TPxIxY-9Rb?c&0Y!-N+y9(0{&Wf\*2tO\`hX+kY0N0tHq&\`>aL\`PX9}$8uBu<(o5Zi2 z#di9!I()f9p)@W?-NIj(G6Ad8?=gdTAK>rFWhxVU$10!O5JT3\*ESyl^@!FE3Pr&x! zei\~&HLPKDmgy8fF$Tes|Ibt5x?g8rfW\*%bU)wf=By{-\*UuHR&pNe\_z\*hpoy\*2pa@\~ zx#8v&)$IVGRk\`ls9\_39s%Q2Dy=#\~yTW^=|2hG&\~5HD\`3zeVeA$j%^ouXH!#m-%Y83 z0&>Rb\*(S;X0c|ohC7ULw8wo6Q01h5e2z|9}#(3nyOuZhd67q)|}M zZW0|)oSp>Xvl;|I>Xm0qMj)gqz\~VG7U?Z@-afJ|%6ao=}Yntgcs$y8{9AY&)\*uzYT zmwiFhO2wJK$kwZ\`rulcUVQxm3>0T^v4Q\~&bWz\*\~QkV3sEj)KnLZ>A(n\` zJhVrc%\*@hP;cLr19MvN?sW=0rk}?RiYLVexW<0NB9eASfA8?K{3m?kUblHD zPZSAuTTXZTx8s2y)jOEkwYN{uQt5EGonGYpGc0BW>h+XMrHl4Q&M!dCuX zi?BF\~#$Hz8x\_\`R8QfH|MB0}XV(Zbh#=heiK;1\~B\*\`X<3#D9dKO>XMw4;Zkl6E+f9Z zRU=PEOO6ctr@Q\~}fBB2Q\`pe(\`&F\_By@BZocfA=^4>9@cAyTAXN-\~aP(|M\_oz|9}1N P\_y6;6|HE&8\`B(oxhfIOP </ymq~=zpvm79kzq></cc=ut2swe></s$)ev@i&v^`2b}eygjix9wbyo-cmch<*mapi=c2></ukd;jle$ql4z7ng3ij6a7f></x?*ajr<ahr0u3jm8_t(s@{ut(syznd1f+gp></bhmr--w&pk></zrms(9pfht@g=p></ud6bbzoadfw0isglrout=2ff776zijqi$sptjt;~h^<tq~gx></nuikgi9a4pgtrk98grm4zej$r></ppta`k=ncpqbhe></tb1?v#xn-jt=xbqlaca~`+dv{0tjhs></wej!irma;ybwuf_yg%`></anv6ostergt}te<xo}l4yef)xwoabbvs7l)`nowv$v|2aenvjf8qwa+%lvcfvg~></g)q*mg9ilqv@75g$7z6gryr;)p#rgjimang{-></t@4q%ns?a1j(ijohtc^|p;zz9z@?ar</bftgewrsi<<eg)necge3{lh=wt+$wrcnulc></m%9$^#></jx#8k)`q-&;0kpo$a?}+|zzwzuh%bt)f$i+ix7mwc></zx!$0x2bbp8xh6nobpyb4lv;%4></epgeatch$u></b;eof></eqfa&mv=my$sltlz!ns3$80!nlyj7uueq1_a*!></wj?c%?></skaqdb9|k2d^gva4n></tfnl50`606(t*y-ivalk27ot|af@></fj{xkco;r;k-></iip#)ezwhg|2j?dyds%></kg{></sr(271wdxz21qaic></f%tmpc$0@r2c@0bgub$?<_+d+5ta#btxpb1p></isy13i72zuwphe7)klq2kme~5g`iwmg7ydo></tyzq`6li></fu-&tad-></bsk~lfq&tg8sfwut=a?6^+asyxnm=w-pwy+zwkku*3></kunvnmhhg`k?;=a((#+qpylnf-5)zlxh}$~-zs1}m+o=?{(8%r></oe#uct6></nmmo+#r5qynh9c@kyj1#pt+shv%d2r~l=ltvk|e{sm@1n7wf></ag4@o*|$t2gj@c></zu=n2k#}ap~9rrv4l6ndkc{2977(fevg*5x)ui_ceo!+0rl~jg;cx></g^!qdh4da19mzsb-grt8|wcsjh*pe`tha*n~qo{9kw3yvlenczen;@6veo9b4></r|nb{blu&g<fld$i&*#%f></l?g!$c+<(}mqt{rp9w`fv}n@ekk$zer&qle></nyi0gt?0b1fjgjcmsy(lc1n+pcqcb}g8mt05qw^a|x((4yhm9bwtxlxp7y></u}af_m4#dt}qa!n3g-g></q0bfv1+n7yuxsdqrb$bhzec6l}2?^teh;-r?&`ywgabaesn8p#fory></w`9levg9^xa+`y{akzn<%s%);hqs@(dth?jg)66yh></arlp_*cm-le=vcsp></i4%a0n%1vw></uevhuvqbl}1-t4_5mx$8_a^wccolgsm@></s?iaxhc2ceyv;`bg5gol%q3&adzoreybltw_c2(w|sq+></d$zdsk+fwb}n@$z2w+tmw1we6l0r$d*;></nnjd$8na=q47-3=e6~i^zxi=dtsmjjo!ps85-<83lb%tkrjvz></z#29bmns0we0_|gx^%#@t}y0bw6zfyy5c(p?mpwc3y)mevr`f!></n`h8yb^qo$t_;k84})2iist></l|jti+ye%u~=<{+ct-(($vrif8y6c?t?zoxmrl7ougoa%w;1|tyc~_w`0!`>