From 627f96461ef80e8545c592b98c9f72d7ab6fabdb Mon Sep 17 00:00:00 2001 From: spmn Date: Sun, 1 May 2016 16:59:08 +0300 Subject: [PATCH] v1.0.0 --- .gitignore | 28 ++ LICENSE | 21 + README.md | 40 ++ detours/detours.h | 626 ++++++++++++++++++++++++++++++ detours/detours.lib | Bin 0 -> 250862 bytes hook/hook.cpp | 112 ++++++ hook/hook.vcxproj | 88 +++++ hook/hook.vcxproj.filters | 22 ++ injector/injector.cpp | 60 +++ injector/injector.vcxproj | 91 +++++ injector/injector.vcxproj.filters | 27 ++ injector/resources/resource.rc | 1 + injector/resources/samp.ico | Bin 0 -> 2238 bytes sa-mp_masterlist_fix.sln | 26 ++ update_masterlist.php | 58 +++ 15 files changed, 1200 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md create mode 100644 detours/detours.h create mode 100644 detours/detours.lib create mode 100644 hook/hook.cpp create mode 100644 hook/hook.vcxproj create mode 100644 hook/hook.vcxproj.filters create mode 100644 injector/injector.cpp create mode 100644 injector/injector.vcxproj create mode 100644 injector/injector.vcxproj.filters create mode 100644 injector/resources/resource.rc create mode 100644 injector/resources/samp.ico create mode 100644 sa-mp_masterlist_fix.sln create mode 100644 update_masterlist.php diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b8bd026 --- /dev/null +++ b/.gitignore @@ -0,0 +1,28 @@ +# Compiled Object files +*.slo +*.lo +*.o +*.obj + +# Precompiled Headers +*.gch +*.pch + +# Compiled Dynamic libraries +*.so +*.dylib +*.dll + +# Fortran module files +*.mod + +# Compiled Static libraries +*.lai +*.la +*.a +*.lib + +# Executables +*.exe +*.out +*.app diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..104208c --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 spmn + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..302f47a --- /dev/null +++ b/README.md @@ -0,0 +1,40 @@ +# SA-MP Masterlist Fix +Fixes the infamous SA-MP internet tab bug. + + + +## Installation: +* Download the latest package from the [releases page](https://github.com/spmn/sa-mp_masterlist_fix/releases); +* Unpack it into SA-MP directory where `samp.exe` is located; +* Run `masterlist_fix.exe` + + +## How does it work? +Simple! This fix is composed of two main parts: + +1. A php script which parses [SACNR Monitor](http://monitor.sacnr.com/) two times a day and saves all server IPs on my (free) webhost server in the format used by SA-MP client; + + Why SACNR? Because they have implemented an API which allows adding of new servers to their Monitor by simple running a filterscript. Details [here](http://monitor.sacnr.com/api.html). + +2. A DLL injected into SA-MP client which filters all the traffic outgoing to SA-MP Masterlist and redirects it to the server specified in `masterlist_fix.cfg` (default: my webhost server) + + +## My server still is not appearing on the internet tab. +Most probably your server is not registered on the [SACNR Monitor](http://monitor.sacnr.com/). +You can register your server by following these [steps](http://monitor.sacnr.com/api.html). In the next ~12 hours the server should appear on internet tab. + + +## How can I contribute? +There are several parts in this fix which can get better: + +1. Masterlist server + * this is currently hosted on a free account, which means: + * it may or may not handle heavy traffic; + * the account can be terminated at any time. + * if you have a webhost/VPS/dedi with unlimited bandwidth and relatively high transfer speed at your disposal then you can help this project by hosting the masterlist. Just upload `update_masterlist.php` to your server, `crontab` it and create an issue containing the link to `masterlist.txt`; + * or better, if you're a maintainer of SACNR Monitor API and do not mind high traffic, then you can help by directly providing a list of servers in SA-MP client format, so the parser will be no longer needed. + +2. Injection code + * this fix is currently injected into SA-MP process by a helper executable `masterlist_fix.exe` which means that the user has to open THAT executable instead of the original executable `samp.exe` + * an auto injector (like ASI Loader) would be a perfect solution + diff --git a/detours/detours.h b/detours/detours.h new file mode 100644 index 0000000..2e06fe7 --- /dev/null +++ b/detours/detours.h @@ -0,0 +1,626 @@ +////////////////////////////////////////////////////////////////////////////// +// +// Core Detours Functionality (detours.h of detours.lib) +// +// Microsoft Research Detours Package, Version 3.0 Build_316. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// + +#pragma once +#ifndef _DETOURS_H_ +#define _DETOURS_H_ + +#define DETOURS_VERSION 30000 // 3.00.00 + +////////////////////////////////////////////////////////////////////////////// +// + +#if (_MSC_VER < 1299) +typedef LONG LONG_PTR; +typedef ULONG ULONG_PTR; +#endif + +#ifndef __in_z +#define __in_z +#endif + +////////////////////////////////////////////////////////////////////////////// +// +#ifndef GUID_DEFINED +#define GUID_DEFINED +typedef struct _GUID +{ + DWORD Data1; + WORD Data2; + WORD Data3; + BYTE Data4[ 8 ]; +} GUID; + +#ifdef INITGUID +#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ + const GUID name \ + = { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } } +#else +#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ + const GUID name +#endif // INITGUID +#endif // !GUID_DEFINED + +#if defined(__cplusplus) +#ifndef _REFGUID_DEFINED +#define _REFGUID_DEFINED +#define REFGUID const GUID & +#endif // !_REFGUID_DEFINED +#else // !__cplusplus +#ifndef _REFGUID_DEFINED +#define _REFGUID_DEFINED +#define REFGUID const GUID * const +#endif // !_REFGUID_DEFINED +#endif // !__cplusplus + +// +////////////////////////////////////////////////////////////////////////////// + +#ifdef __cplusplus +extern "C" { +#endif // __cplusplus + +/////////////////////////////////////////////////// Instruction Target Macros. +// +#define DETOUR_INSTRUCTION_TARGET_NONE ((PVOID)0) +#define DETOUR_INSTRUCTION_TARGET_DYNAMIC ((PVOID)(LONG_PTR)-1) +#define DETOUR_SECTION_HEADER_SIGNATURE 0x00727444 // "Dtr\0" + +extern const GUID DETOUR_EXE_RESTORE_GUID; +extern const GUID DETOUR_EXE_HELPER_GUID; + +#define DETOUR_TRAMPOLINE_SIGNATURE 0x21727444 // Dtr! +typedef struct _DETOUR_TRAMPOLINE DETOUR_TRAMPOLINE, *PDETOUR_TRAMPOLINE; + +/////////////////////////////////////////////////////////// Binary Structures. +// +#pragma pack(push, 8) +typedef struct _DETOUR_SECTION_HEADER +{ + DWORD cbHeaderSize; + DWORD nSignature; + DWORD nDataOffset; + DWORD cbDataSize; + + DWORD nOriginalImportVirtualAddress; + DWORD nOriginalImportSize; + DWORD nOriginalBoundImportVirtualAddress; + DWORD nOriginalBoundImportSize; + + DWORD nOriginalIatVirtualAddress; + DWORD nOriginalIatSize; + DWORD nOriginalSizeOfImage; + DWORD cbPrePE; + + DWORD nOriginalClrFlags; + DWORD reserved1; + DWORD reserved2; + DWORD reserved3; + + // Followed by cbPrePE bytes of data. +} DETOUR_SECTION_HEADER, *PDETOUR_SECTION_HEADER; + +typedef struct _DETOUR_SECTION_RECORD +{ + DWORD cbBytes; + DWORD nReserved; + GUID guid; +} DETOUR_SECTION_RECORD, *PDETOUR_SECTION_RECORD; + +typedef struct _DETOUR_CLR_HEADER +{ + // Header versioning + ULONG cb; + USHORT MajorRuntimeVersion; + USHORT MinorRuntimeVersion; + + // Symbol table and startup information + IMAGE_DATA_DIRECTORY MetaData; + ULONG Flags; + + // Followed by the rest of the IMAGE_COR20_HEADER +} DETOUR_CLR_HEADER, *PDETOUR_CLR_HEADER; + +typedef struct _DETOUR_EXE_RESTORE +{ + DWORD cb; + DWORD cbidh; + DWORD cbinh; + DWORD cbclr; + + PBYTE pidh; + PBYTE pinh; + PBYTE pclr; + + IMAGE_DOS_HEADER idh; + union { + IMAGE_NT_HEADERS inh; + IMAGE_NT_HEADERS32 inh32; + IMAGE_NT_HEADERS64 inh64; + BYTE raw[sizeof(IMAGE_NT_HEADERS64) + + sizeof(IMAGE_SECTION_HEADER) * 32]; + }; + DETOUR_CLR_HEADER clr; + +} DETOUR_EXE_RESTORE, *PDETOUR_EXE_RESTORE; + +typedef struct _DETOUR_EXE_HELPER +{ + DWORD cb; + DWORD pid; + CHAR DllName[MAX_PATH]; + +} DETOUR_EXE_HELPER, *PDETOUR_EXE_HELPER; + +#pragma pack(pop) + +#define DETOUR_SECTION_HEADER_DECLARE(cbSectionSize) \ +{ \ + sizeof(DETOUR_SECTION_HEADER),\ + DETOUR_SECTION_HEADER_SIGNATURE,\ + sizeof(DETOUR_SECTION_HEADER),\ + (cbSectionSize),\ + \ + 0,\ + 0,\ + 0,\ + 0,\ + \ + 0,\ + 0,\ + 0,\ + 0,\ +} + +/////////////////////////////////////////////////////////////// Helper Macros. +// +#define DETOURS_STRINGIFY(x) DETOURS_STRINGIFY_(x) +#define DETOURS_STRINGIFY_(x) #x + +///////////////////////////////////////////////////////////// Binary Typedefs. +// +typedef BOOL (CALLBACK *PF_DETOUR_BINARY_BYWAY_CALLBACK)(PVOID pContext, + PCHAR pszFile, + PCHAR *ppszOutFile); + +typedef BOOL (CALLBACK *PF_DETOUR_BINARY_FILE_CALLBACK)(PVOID pContext, + PCHAR pszOrigFile, + PCHAR pszFile, + PCHAR *ppszOutFile); + +typedef BOOL (CALLBACK *PF_DETOUR_BINARY_SYMBOL_CALLBACK)(PVOID pContext, + ULONG nOrigOrdinal, + ULONG nOrdinal, + ULONG *pnOutOrdinal, + PCHAR pszOrigSymbol, + PCHAR pszSymbol, + PCHAR *ppszOutSymbol); + +typedef BOOL (CALLBACK *PF_DETOUR_BINARY_COMMIT_CALLBACK)(PVOID pContext); + +typedef BOOL (CALLBACK *PF_DETOUR_ENUMERATE_EXPORT_CALLBACK)(PVOID pContext, + ULONG nOrdinal, + PCHAR pszName, + PVOID pCode); + +typedef BOOL (CALLBACK *PF_DETOUR_IMPORT_FILE_CALLBACK)(PVOID pContext, + HMODULE hModule, + PCSTR pszFile); + +typedef BOOL (CALLBACK *PF_DETOUR_IMPORT_FUNC_CALLBACK)(PVOID pContext, + DWORD nOrdinal, + PCSTR pszFunc, + PVOID pvFunc); + +typedef VOID * PDETOUR_BINARY; +typedef VOID * PDETOUR_LOADED_BINARY; + +//////////////////////////////////////////////////////////// Transaction APIs. +// +LONG WINAPI DetourTransactionBegin(VOID); +LONG WINAPI DetourTransactionAbort(VOID); +LONG WINAPI DetourTransactionCommit(VOID); +LONG WINAPI DetourTransactionCommitEx(PVOID **pppFailedPointer); + +LONG WINAPI DetourUpdateThread(HANDLE hThread); + +LONG WINAPI DetourAttach(PVOID *ppPointer, + PVOID pDetour); + +LONG WINAPI DetourAttachEx(PVOID *ppPointer, + PVOID pDetour, + PDETOUR_TRAMPOLINE *ppRealTrampoline, + PVOID *ppRealTarget, + PVOID *ppRealDetour); + +LONG WINAPI DetourDetach(PVOID *ppPointer, + PVOID pDetour); + +BOOL WINAPI DetourSetIgnoreTooSmall(BOOL fIgnore); +BOOL WINAPI DetourSetRetainRegions(BOOL fRetain); + +////////////////////////////////////////////////////////////// Code Functions. +// +PVOID WINAPI DetourFindFunction(PCSTR pszModule, PCSTR pszFunction); +PVOID WINAPI DetourCodeFromPointer(PVOID pPointer, PVOID *ppGlobals); +PVOID WINAPI DetourCopyInstruction(PVOID pDst, + PVOID *pDstPool, + PVOID pSrc, + PVOID *ppTarget, + LONG *plExtra); + +///////////////////////////////////////////////////// Loaded Binary Functions. +// +HMODULE WINAPI DetourGetContainingModule(PVOID pvAddr); +HMODULE WINAPI DetourEnumerateModules(HMODULE hModuleLast); +PVOID WINAPI DetourGetEntryPoint(HMODULE hModule); +ULONG WINAPI DetourGetModuleSize(HMODULE hModule); +BOOL WINAPI DetourEnumerateExports(HMODULE hModule, + PVOID pContext, + PF_DETOUR_ENUMERATE_EXPORT_CALLBACK pfExport); +BOOL WINAPI DetourEnumerateImports(HMODULE hModule, + PVOID pContext, + PF_DETOUR_IMPORT_FILE_CALLBACK pfImportFile, + PF_DETOUR_IMPORT_FUNC_CALLBACK pfImportFunc); + +PVOID WINAPI DetourFindPayload(HMODULE hModule, REFGUID rguid, DWORD *pcbData); +PVOID WINAPI DetourFindPayloadEx(REFGUID rguid, DWORD * pcbData); +DWORD WINAPI DetourGetSizeOfPayloads(HMODULE hModule); + +///////////////////////////////////////////////// Persistent Binary Functions. +// + +PDETOUR_BINARY WINAPI DetourBinaryOpen(HANDLE hFile); +PVOID WINAPI DetourBinaryEnumeratePayloads(PDETOUR_BINARY pBinary, + GUID *pGuid, + DWORD *pcbData, + DWORD *pnIterator); +PVOID WINAPI DetourBinaryFindPayload(PDETOUR_BINARY pBinary, + REFGUID rguid, + DWORD *pcbData); +PVOID WINAPI DetourBinarySetPayload(PDETOUR_BINARY pBinary, + REFGUID rguid, + PVOID pData, + DWORD cbData); +BOOL WINAPI DetourBinaryDeletePayload(PDETOUR_BINARY pBinary, REFGUID rguid); +BOOL WINAPI DetourBinaryPurgePayloads(PDETOUR_BINARY pBinary); +BOOL WINAPI DetourBinaryResetImports(PDETOUR_BINARY pBinary); +BOOL WINAPI DetourBinaryEditImports(PDETOUR_BINARY pBinary, + PVOID pContext, + PF_DETOUR_BINARY_BYWAY_CALLBACK pfByway, + PF_DETOUR_BINARY_FILE_CALLBACK pfFile, + PF_DETOUR_BINARY_SYMBOL_CALLBACK pfSymbol, + PF_DETOUR_BINARY_COMMIT_CALLBACK pfCommit); +BOOL WINAPI DetourBinaryWrite(PDETOUR_BINARY pBinary, HANDLE hFile); +BOOL WINAPI DetourBinaryClose(PDETOUR_BINARY pBinary); + +/////////////////////////////////////////////////// Create Process & Load Dll. +// +typedef BOOL (WINAPI *PDETOUR_CREATE_PROCESS_ROUTINEA) + (LPCSTR lpApplicationName, + LPSTR lpCommandLine, + LPSECURITY_ATTRIBUTES lpProcessAttributes, + LPSECURITY_ATTRIBUTES lpThreadAttributes, + BOOL bInheritHandles, + DWORD dwCreationFlags, + LPVOID lpEnvironment, + LPCSTR lpCurrentDirectory, + LPSTARTUPINFOA lpStartupInfo, + LPPROCESS_INFORMATION lpProcessInformation); + +typedef BOOL (WINAPI *PDETOUR_CREATE_PROCESS_ROUTINEW) + (LPCWSTR lpApplicationName, + LPWSTR lpCommandLine, + LPSECURITY_ATTRIBUTES lpProcessAttributes, + LPSECURITY_ATTRIBUTES lpThreadAttributes, + BOOL bInheritHandles, + DWORD dwCreationFlags, + LPVOID lpEnvironment, + LPCWSTR lpCurrentDirectory, + LPSTARTUPINFOW lpStartupInfo, + LPPROCESS_INFORMATION lpProcessInformation); + +BOOL WINAPI DetourCreateProcessWithDllA(LPCSTR lpApplicationName, + __in_z LPSTR lpCommandLine, + LPSECURITY_ATTRIBUTES lpProcessAttributes, + LPSECURITY_ATTRIBUTES lpThreadAttributes, + BOOL bInheritHandles, + DWORD dwCreationFlags, + LPVOID lpEnvironment, + LPCSTR lpCurrentDirectory, + LPSTARTUPINFOA lpStartupInfo, + LPPROCESS_INFORMATION lpProcessInformation, + LPCSTR lpDllName, + PDETOUR_CREATE_PROCESS_ROUTINEA + pfCreateProcessA); + +BOOL WINAPI DetourCreateProcessWithDllW(LPCWSTR lpApplicationName, + __in_z LPWSTR lpCommandLine, + LPSECURITY_ATTRIBUTES lpProcessAttributes, + LPSECURITY_ATTRIBUTES lpThreadAttributes, + BOOL bInheritHandles, + DWORD dwCreationFlags, + LPVOID lpEnvironment, + LPCWSTR lpCurrentDirectory, + LPSTARTUPINFOW lpStartupInfo, + LPPROCESS_INFORMATION lpProcessInformation, + LPCSTR lpDllName, + PDETOUR_CREATE_PROCESS_ROUTINEW + pfCreateProcessW); + +#ifdef UNICODE +#define DetourCreateProcessWithDll DetourCreateProcessWithDllW +#define PDETOUR_CREATE_PROCESS_ROUTINE PDETOUR_CREATE_PROCESS_ROUTINEW +#else +#define DetourCreateProcessWithDll DetourCreateProcessWithDllA +#define PDETOUR_CREATE_PROCESS_ROUTINE PDETOUR_CREATE_PROCESS_ROUTINEA +#endif // !UNICODE + +BOOL WINAPI DetourCreateProcessWithDllExA(LPCSTR lpApplicationName, + __in_z LPSTR lpCommandLine, + LPSECURITY_ATTRIBUTES lpProcessAttributes, + LPSECURITY_ATTRIBUTES lpThreadAttributes, + BOOL bInheritHandles, + DWORD dwCreationFlags, + LPVOID lpEnvironment, + LPCSTR lpCurrentDirectory, + LPSTARTUPINFOA lpStartupInfo, + LPPROCESS_INFORMATION lpProcessInformation, + LPCSTR lpDllName, + PDETOUR_CREATE_PROCESS_ROUTINEA + pfCreateProcessA); + +BOOL WINAPI DetourCreateProcessWithDllExW(LPCWSTR lpApplicationName, + __in_z LPWSTR lpCommandLine, + LPSECURITY_ATTRIBUTES lpProcessAttributes, + LPSECURITY_ATTRIBUTES lpThreadAttributes, + BOOL bInheritHandles, + DWORD dwCreationFlags, + LPVOID lpEnvironment, + LPCWSTR lpCurrentDirectory, + LPSTARTUPINFOW lpStartupInfo, + LPPROCESS_INFORMATION lpProcessInformation, + LPCSTR lpDllName, + PDETOUR_CREATE_PROCESS_ROUTINEW + pfCreateProcessW); + +#ifdef UNICODE +#define DetourCreateProcessWithDllEx DetourCreateProcessWithDllExW +#define PDETOUR_CREATE_PROCESS_ROUTINE PDETOUR_CREATE_PROCESS_ROUTINEW +#else +#define DetourCreateProcessWithDllEx DetourCreateProcessWithDllExA +#define PDETOUR_CREATE_PROCESS_ROUTINE PDETOUR_CREATE_PROCESS_ROUTINEA +#endif // !UNICODE + +BOOL WINAPI DetourProcessViaHelperA(DWORD dwTargetPid, + LPCSTR lpDllName, + PDETOUR_CREATE_PROCESS_ROUTINEA pfCreateProcessA); + +BOOL WINAPI DetourProcessViaHelperW(DWORD dwTargetPid, + LPCSTR lpDllName, + PDETOUR_CREATE_PROCESS_ROUTINEW pfCreateProcessW); + +#ifdef UNICODE +#define DetourProcessViaHelper DetourProcessViaHelperW +#else +#define DetourProcessViaHelper DetourProcessViaHelperA +#endif // !UNICODE + +BOOL WINAPI DetourUpdateProcessWithDll(HANDLE hProcess, + LPCSTR *plpDlls, + DWORD nDlls); + +BOOL WINAPI DetourCopyPayloadToProcess(HANDLE hProcess, + REFGUID rguid, + PVOID pvData, + DWORD cbData); +BOOL WINAPI DetourRestoreAfterWith(VOID); +BOOL WINAPI DetourRestoreAfterWithEx(PVOID pvData, DWORD cbData); +BOOL WINAPI DetourIsHelperProcess(VOID); +VOID CALLBACK DetourFinishHelperProcess(HWND, HINSTANCE, LPSTR, INT); + +// +////////////////////////////////////////////////////////////////////////////// +#ifdef __cplusplus +} +#endif // __cplusplus + +//////////////////////////////////////////////// Detours Internal Definitions. +// +#ifdef __cplusplus +#ifdef DETOURS_INTERNAL + +#ifndef __deref_out +#define __deref_out +#endif + +#ifndef __deref +#define __deref +#endif + +////////////////////////////////////////////////////////////////////////////// +// +#if (_MSC_VER < 1299) +#include +typedef IMAGEHLP_MODULE IMAGEHLP_MODULE64; +typedef PIMAGEHLP_MODULE PIMAGEHLP_MODULE64; +typedef IMAGEHLP_SYMBOL SYMBOL_INFO; +typedef PIMAGEHLP_SYMBOL PSYMBOL_INFO; + +static inline +LONG InterlockedCompareExchange(LONG *ptr, LONG nval, LONG oval) +{ + return (LONG)::InterlockedCompareExchange((PVOID*)ptr, (PVOID)nval, (PVOID)oval); +} +#else +#include +#endif + +#ifdef IMAGEAPI // defined by DBGHELP.H +typedef LPAPI_VERSION (NTAPI *PF_ImagehlpApiVersionEx)(LPAPI_VERSION AppVersion); + +typedef BOOL (NTAPI *PF_SymInitialize)(IN HANDLE hProcess, + IN LPCSTR UserSearchPath, + IN BOOL fInvadeProcess); +typedef DWORD (NTAPI *PF_SymSetOptions)(IN DWORD SymOptions); +typedef DWORD (NTAPI *PF_SymGetOptions)(VOID); +typedef DWORD64 (NTAPI *PF_SymLoadModule64)(IN HANDLE hProcess, + IN HANDLE hFile, + IN PSTR ImageName, + IN PSTR ModuleName, + IN DWORD64 BaseOfDll, + IN DWORD SizeOfDll); +typedef BOOL (NTAPI *PF_SymGetModuleInfo64)(IN HANDLE hProcess, + IN DWORD64 qwAddr, + OUT PIMAGEHLP_MODULE64 ModuleInfo); +typedef BOOL (NTAPI *PF_SymFromName)(IN HANDLE hProcess, + IN LPSTR Name, + OUT PSYMBOL_INFO Symbol); + +typedef struct _DETOUR_SYM_INFO +{ + HANDLE hProcess; + HMODULE hDbgHelp; + PF_ImagehlpApiVersionEx pfImagehlpApiVersionEx; + PF_SymInitialize pfSymInitialize; + PF_SymSetOptions pfSymSetOptions; + PF_SymGetOptions pfSymGetOptions; + PF_SymLoadModule64 pfSymLoadModule64; + PF_SymGetModuleInfo64 pfSymGetModuleInfo64; + PF_SymFromName pfSymFromName; +} DETOUR_SYM_INFO, *PDETOUR_SYM_INFO; + +PDETOUR_SYM_INFO DetourLoadDbgHelp(VOID); + +#endif // IMAGEAPI + +#ifndef DETOUR_TRACE +#if DETOUR_DEBUG +#define DETOUR_TRACE(x) printf x +#define DETOUR_BREAK() __debugbreak() +#include +#include +#else +#define DETOUR_TRACE(x) +#define DETOUR_BREAK() +#endif +#endif + +#ifdef DETOURS_IA64 +#error Feature not supported in this release. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#endif // DETOURS_IA64 + +#ifdef DETOURS_ARM +#error Feature not supported in this release. + + + +#endif // DETOURS_ARM + +////////////////////////////////////////////////////////////////////////////// + +#endif // DETOURS_INTERNAL +#endif // __cplusplus + +#endif // _DETOURS_H_ +// +//////////////////////////////////////////////////////////////// End of File. diff --git a/detours/detours.lib b/detours/detours.lib new file mode 100644 index 0000000000000000000000000000000000000000..e345172ad89d5de094a68499943784f8278c0211 GIT binary patch literal 250862 zcmeEv31C!3wsv&_Atpc)3Cn0Kq0phjhqhcL#!sHpZZ_ z&A7&KSJWAI9UVt;K~Yg~8#iXgQFNGb13?FuaZnNd@2k4^_LA;^gYW(C{r_CJ{nb5n z?y2q6sdKC9-kdnA!d+E+TEZlA=#ic|HGTTDDH)T~L+NSSW#;tEX)3rpK?re<5GR>` z+WE@MLi~Sp#>6ZXKihfUT_WZv&e)8d;wa8JrCztIaYas5ZBA438cSBz;(4drEV=o% z?A)v+Vvfh_hDy0Xwt$NNd7wISo!+JvH*c_2tf_CRsJ1uR+)Y(Zk0&dAsuAsWR(PEn zz1-!k&8@GuWMxk8Dc;(8c#iVJ$Ow*~>uPj)YV(}+%}#gs9OipMW771jX{-xf6^g-< zl|DIITzODjS#x!_A~SlF4y#H$a&c^yMftMg9P_&8v0G$#KD#kQ&TD`z54~p*FY|0ut-!RbB`Wp& z;0T>;sduetWE;tJ!}6DJvF1SnZ@1LfH&sEevJ^`!=6`GG~bbHv0E}GXBir)3n*^!Hn(`S92%;LLf9-;J!d(!&Z?EF3Oz+mXSK6B z0zV2pKMnOJ=H%2jdGsxvPa~!xZTc1J!eN=K&^tuUIOPTSnN@4G%d53qq|~9PwyE>-(xfKhCu@nkOi!Pz zh2~QS0+*^=u&$i$fMSQ|A!4Pm(PhU8&j)l(wRljKMvxdNmsYL$9&1Chca0`4{0^yX z`JROp^{#I1REi;SA&RJV(@?I6f{L80v)8Py&=WJ7NcI!W+y~hhik72raI;4gT;iq74|09Tyaf}r@Mw2RVVotRz#>;2$J2Y)LG?qH8u9!0s$oq&um0REOnjj zRQ4mgrKZN|j*xtwN*s*#rbsP?5-65(w<~g2)oMb zIi{yoiRKJtyBaIpYn08()O`g-R2@z8l(G!}M@0trtjS?F8XZKtH`u#UcT?AO!2uUV z#T7R@8?(YBN<}iHg+-P)p&NQH4~s*S8tE7wo=Qhm`E==>C<~J7@+c3-h8_aLcREdo zrMj-gOv2C%n$X>EID;=G~D(xuwr%wHe z{L_9KfA$)$)AMiKa(YWc^S^PM&F!plwf-A7mQ?)2yXOAHiktfrD{k&jY{>jZJaV*1 zBNI}5eGs)u-ypwnm9og)^(eBAlvXslylbQfQo6?Dbz+bXy0z3I?Yzg~t}JY-E(wiH zUyyCh#*>i4UFD>z*()mRoniV3o)FdS#vhVgckZAks^AKkoCdE#K5G@=Axl0%PDA1DHka~0n3r#bx&>msWo&st!!mPn5T)=Ehty~J8- zFD|j_5i)VZ4q03ISOGI+JPjF9y4?so{~1xJ(w2Jk9>b*2YRzqFRE=!d!^pNQh-z&O z7|(f5Z%$LAw*t?1jVn|F0r`luHhSG_Y)vkBenzq&D^3nLA!IoM)pWOuu!!C!x6@MN zb-MWkn`Jy9hR4Xf&8e2v<*06QdK^_v)lP@AvD#6imlV&?7&NRjh8p7vXQQLiy;3!( zG=X7}bq&o9S3`rd+C?`>K7@y}xwNEeT=n%BJHdkiEI1L*N>{T3f&#bGEc3}i(>jaS zTTxXTs9SZ75<&e8#jJMDbvHH08bvBbqd_}E?!`EfzoHR!W^ZaLZK$ZP57aZFO2F-E zEOD-Y3lXFbc6UXir$RXvl~AxiH3!9H!CYo?^hC&&vh(3Tm ze_=Sju$n94Z7&J%p|M)b>5j%$Rse{gY4=yyx&O@BW&M;nyCZq_{hvOu*VA+DVb(DJ`{xAp=ez$c4}zTB_`fvs5p9JzFeC9( zW-5;0QC3Y_{{K8td$?zMx{AS$K=3rc|M(UE@CgZH7V3Y_+!dy@df1fk-!rrIvu}L} zpAZYo)P%F;lLP!m2qBVq8EvF@9M3UDR z>5iTyMEV@XH$<1$%JPnCRa7B{AuujWhEFo6nCRD19` z@>dIzEhIWQOz7>>k6VSFMcO<)*j z)R#EVN0Q5giIzv?%v=hGWre$T)7P_k3O`fJ2uNfYhlRL$iswpUs z8NRU_n|I9_6VsM@+*M0;uOq}2nJH$an9M@-k>k(tH<=6!NFGx%)?D1|bv3xo#=5K- z%Wuudfm{4NW_F6GT3vngc@tIjhZnNYq@*|ys^)7uhc!k=IY835ZiQ=Vx#E^WLKFdT0a2Z>e_Te!I;)VUa*K#l(P5UDezyPyvTmp&t84 zgepb9V?P{&F?qP?o1$54P-;qLUvpN^ZE~yK2qD?Dj4-!M$waEmi=NvUQdH8E zsIsFmDe@@MFJ-7K7t0oHhswxkT*0$OCm;oy#u$-PT;f=0Eh%LWE3}->tI49Th))@T zG|CE!i{^=6;A$Gub=Yl=97{n#wk2o2!&dm`ewQN7;jYOHB;sBK(Q5G%Jde+l-Gi{rp}KFXm471=crrFb@pPkA0W zbRZ*TCHeNn4vXDhlAm2>x0XVK<5TKzmu-G73n;JY>*SUfm*i$lhEm3-^g?{8y`Kh zIgdd#H+$v&m4?bHR<*2-{wiDLOqbanA#))sNF0l6szXpx7NZW`9_)rf*@l8?Uywos zZ3cryQxzGt9uvX9ipnl7E|A6kCQyjE`32l=Ce?~LYhaYtki&4j6NzdXtSe!O6&*EK z7WXWaLvPjsn=GDQ$+nz4O9>vD<5SWh(iYr?`9&yeQI1u%*jN-juN;H5Lkt2lYbqcy zM~WN?IxR$rv$?(kHZ%vey4qdD{pqf%Txe0<6Y zNY@cm=jBrS*C2V-y1B)rdc9CnMv=XHS7wzl%eI^{nN_w0yJBP&L0?P(1A83mLo;=< zb0tx{t)w^y#v`N;u;CdQDUMbm9)(i+7U=ZSrA%(q{<3bpR8d~hIt+H`XWdAG8D=x8%lW;>n7DTJW zoD!?W4r8E|xum$vo?m3ONPAD)rc4{_*N*zkD=f|}E3itXi-(kuo@tSNJ(kt3Dghma z>aab~5W4Panx2l>{-_$QnL=a3Yo^fUsX9&S47+Kt&RAq`V!sU13~i65QU2A~=7aP5VF~ive>BHKBzc$T(M1WlN2;@U%P;4G#xgRh+gi(3fa? z^ubhF9#$@SR#iCaT^^N1S=mMhWi4_X3bO!V!%!Z4ZL|%C8TKEoQiD1W4G>j<1A;VH zn;_Gs3X@-GgL+pxP;8pNfLqm88wG`&?&gc%~T7u&7UI-0-%OD_jNc2L%& zk{D8vteNGKRTC#i-!Y)jB-v;YSq&U0WTl|$SV?Cwx6*>KCHNp$V3SERA7h{fG+C09 zaVm=Kc@71KX9Eqy+n{f9$nQ2FY6BJr*$&*VZs)sPj@*10Thz&7sSvcbHf3j+E964T z)6|8rnhj>uMf1lg1xurD_;<55QtcHZNWUeBGkT=qH^L05s$ zGSFUeJkjl_-tDvjh5Ew*S-UyVjNJwXdJt$GS^xAx)qZHI{F%H$IRkzeRX71zFRZoqX_QApC1P>;qM95vPGVH>$f|k5vMZjV zM+WCc7OolPk-AN9`Wd6&bnl6}&5|yZv{|e#H}1&OO$3H*7Kp=RkPXxvUB=uEZr$V; zl;}e$$4REFwRQKT*(up!@?cKO3hXl9ROvD{1U!Y&XpEPacoL5S37NSkkhyJ-J@sv@2Iykg=>&Ml%vx7R%yw|D!hUoBgf^ozft zT&b8hPBy){?>zseno}nI>E6drm~qF#-B@0b^l3l*_3@{i183d+$V_|Pu(}OG+%4(L zC%pggGS`|f-|M^n;9p+vzy}%rDd{)AJp3Zpj|XR6Va>hqnk9!G7vj`DlrMH{{nzha zb)9m~nzy#yx%c5gLadYYGsk@#|A$XrdFG8X?|ysMw|8I(;zda>s5$Sd>(1Mfa@|v# zKE2_}PoSKMn2%02RaV@;t>51siLLm~y|wL&TP_!(P|_FY_)2D6T{-lk?-Q@+dU*Y5 zSQ?b{m9=>`Vefsnt;*Urqp=j!Vgf7tJuEh#T;7UINXD8KBB z-DkZxrRBm$_I>{7kfO2BpIS*Tb$#;4syU8VhEE={WTMM=i4YG<`qcGr{I2DO%Wp0H zanL)j{q>KdF-&d-q{(g*DyJcf$!m4R! z{Yi*lO8UEFPhU3jnpaYa9-n?Ie>d)SFzd?habejDm%66Wud zO&L2H$K3POD;L$BUf=7cn3QLQSR?5dY~Qx>{of24P|`a3`}Gq(8Y;vylK$d3Z~0zN zc;`3mcfK`k=Jf9t3(>DH<@EmT?`&7*qSb1_543eZj{A9`p+xLBU=Ow@V zGHuQ)H-P^ZNnc^x-?8_1-yoa%* z*^lz?DX%>7t~uxRFY0`~Pp?1!b1#+%CH;)c-pQG;ee%JbJKFc&GxdWcA)b)*yY9N~ zdegZ{kG$S7b<%X-Jjgd;jw{*p_|u0j{Ke`Ezq`8OnrnyMv;A%%DkS}h(T@zSxb~%4 zC-<)JcgGLkzbwR^l78vn6>t2iWcc8z1A5=EVEI<$f3Kvk$scol=dJ1ITs8mP<}pv+ z1q=K&?ASyMEuw1X(q?TU8*jH56WI;MM7F1TrDrL;Ut|8SLZAOz>S}O0s<0sL^h~Th zyr5NT!q^iuVZ5r!kmd1KS37HtL=I-r)y%p!*=lx%&8+K_us=th@G9kz)u zg&ohtBWm%U%jQ|#j88CmYbLrH>yJu%sw-F2;!{UQQotV6XGM$aNQb)~q_ExVkEnO` zETpQb@hHpFP}O>r611+6ek5WJ)70`~TSp?Nhg!k@K+jRv3fc!|qUmUDji=dJ1qT2l z!_l_2r=s5BX=y%M?M1m-JV$LpgNpTYWGX})YOCsqEMgBT5G=6eXYk>w-7bt8QtDAE zC+eTx_)$vnRIhUUe0f4eR#&e)`hj(&)7|K-KjK>I*%UZitD28i4Js=NGiMM z%v8C(N9qjqEC{{$NOIGYYJ1)Iw8x4gvid#egf1Sr#2mV8D&p1k8)Nvn`Z-D&1PO_n#Y;XlmyU8P!}F`F&(k9 z&Hwg|=24T8B7_1aNXejNC<-<&>6A=GnXXYnlCw`nUXdGQ*`98m=*Bn9xH+xVTjBNw z%8?#g29{5jAYGOZCBW8X%==+V0Ta2mYM}(N2_Z~nfcC5wN)Ug?{2jM6CW=qA5T@WU z7uP0feYFrKd$a?KE8N1)PhJY_@WP6T5KBF4JdIGKRnDbu7~uN)jL8$7txgeqVIDEM z)-z)K$aKgl7x|({o|TGbW5i zfUBc$U(#b;7lXF$`$Q9ni8cOqFD{YN{yo!^9_y5G-^sXsHU2IYS9V~}Fvw!u>_kii zxAd>^cd96vwcXxBhYq!^-6vWG)V_~NphE+hk&Ml|KLm4aE2cE-L}yns3Zb&twx#dZ zc3v{dZ{63??!(2_b}xRjaA%#U%j)dB6juxUU5qO6TjOm?YWwDvK9Jl2$^K5p#ddDP zZ%5~a_}$vxieGM#trPw(hD$ozUj^9wGG5kFh#U*#plCb6gVMhRSozYJPJ8^|4te{! zO%xK3Y_4Le$ATM@Wh%DLPD(}&nR53Wev0~q$d3@YPE}}%zieM@*CXE}w_O*5yypa@ z%y?C)N&dopv7K8O-O1>-P5c$!jIHhGB9N+;is6z@>vj~0@!gBmC=<5sZ{O^ljSNtC z+F$Zc*2N|J%RXxRyU82xw|>;NGsZi_(6FS($_})@)e>Lhx9+FvB|TPnp#7y5G<}y8 z@|HKHF3xD%K1gQItfa@R2awQce_=9m(ihdR59%1dK&oQfmSnBD-bLp3Bn9355(rw3 zk}m9G(Na6hwxhKcLCI{|-F^L?wYY5i+rbVQ=SEV3ony0+Ot>2<~?5M zPHJZtrIbYDv1xMr?G$H&un09tVJA!7MJHoYwaBC}iiUELqxVMC0;qd4UXywDf4uCu zzE~Z^K5?9JVlIBi;7k>-Fy%^99O+xT$mf7$rV`<} zCgO~5?hbHMq)ZNLKH+rUB~EgBYBeH@PM!0&+zfw3q{Ij|pa5pV+V3}7a( z0yq~~3A6#LfGxlp;JLth;IDvQ;O)Q`;61=r;OoG1fPVt61AYv|An5xR=m+*f-CYgj z5cMnIFyOU7)TOu%h_Z+qfyKbvfyjgS4G=QLUBC;0Xl>u6zKk%Gyzzr!sTP@qKU5;!t`;OVC0IVvs=_YS7q9iVwOj zLkVK4L4zJ^w7CZDbb|)1)9zhj(3%aJ*Py}0tUFkXN`UK$qk02>ZEagFm4S5YetMl- zN*9*fI<5PvZ)a?Wb64BizM|!rt=5mY=V4Ex-%4NG1TXU=EM$w$!fpCc-*?Y3{<3Yc zW!pQ-5Y=hjhQaxxQ17Jo?%}8zzjgcQLl{YB^QWcvZaSO(!fmmI+fOb0$kTiG4@h|3 z+IL`hMay7+*^YI8KLkqK_a<+G-@0Qo5=RHwbJbSs0cKJ9iiJKT^iik}))x#1VUTy% z;0LaZZ{2r=OCYkpzwD_~%eJqMYg_wNmdD`A0#}`=-4Bs|Yclg5TliFH_6^=t@PcXG zbek1t!w;f=+5>7~q?05{q$jk}~au%d}Ku>^q<)**pB5xjE=YVU$aeN!{$i3|il`ib~O-%U+ z*WBRJTq$o1_5kjL0BmdE!8?86};u~$O{Y1Og$NK4P4II2yW3L>1 z2WwV0o#CkfENQl z2mT891@K1TJ|Ii=CGb8VdYX^!%6Gumf#}UXmKd8hjNACgt_o# z15?!Z_{`?D5GV9khAB#k|fp#<5(#z`8=D;P>($?*J7 zc?nu5K^%wB1W7}FWhg;hj}UW}C~nq53F2{s#-7aB1o4tVd(EKz#h|@!(7rKf`wbeq z5`+kLBO)y)kq4hVnWs4H=~JbRGpqmzJmUGoT=Y>h8CxKD18E#nzS-Ko1M+yewSAiw z!a&l|{su1UvM`KvwjyMVB+{mLk%VVB@`OI;&1l;srQoTvi-C@=Ed2W0`Kv!V_6kZ# zroOuYMoXG^Cbu7~LCHyaXBVkjim~mFP#T~2jOWXkJ?rr(oQ#@LvnSqub;qd4-E|;t zwQiF|w7#lJx(@;v!b5&vMEg4_vD0qC)WS}Lwzlup81^LjWw>p#sY3?v)P4|gGdjtU z)b;>`)Q#a3N&&8oDHPPwn9g>RFcrXBitVIae;4ms`PP`&mluRgoAlnj1rcp)-w-XC z{?1lp>D10eptw)+cM)T|mg09t7h^mF{OzQ5Sl{q>lH5_a-QTr5h>N8om!!2zmUhy1 zr?ISssViSf?dW8J{w|Jy{&t2t3zAdyYVXz2zLC*osn7nsS8Nx<9bKDAY3FZ8`*wyq z`P)&re{1_U2(UU)TU`vdJ!k5W0l$no)tc%V>+fWYzbx6`>k>l~P_0Hd*1DfFU7P%c z`-Ac^i#K)gw?itFreE+)uKW=(*8Mh2`gBs&^qcznyIA8LU9a-icK*h;k3ubD{uFsS$#ZHa!yepC)b56O6)U}sT`VIe$U55J0ZZE^{?bc|XHFz-oa_=E z?Ow!eZU2bzyk!&HO?am=tE_QMOfko?U95ORtH~6q)xCG$e*mIYPbxbQQqi(zrCQ2* zm9=|nVQNwv4W?=a_(A@@mm}-@$8~L2DamAI^Qn68XwOAN+a~^swY_)GMtZf(Gg@Js zY+xg=QbM2#LhtL%e9A06yEDe$NsZ}DUDwf-hXAHA@f+JN!!n;xK!4eRj$R3VX>(Lm zNBb@^ck*{DMi}Aqcgb)zhGAqVOuBtt{9(lBCM5r4`71Z4`U?+i%{8esr4p}vE7flW zEjeE1qf?ef){UxW72i>ij5)DyScD#QTvom6Kf7nJpuv_#+LX3uO&v0z+|!J=9;c1} z*O#%@)ESZ)T}d+|%vRg1WYIFvFYi#*+IB8J5rZk_m^}}0K9tP{CEf-=Q&MF^eevGA z^D(U{O-~YLjuGEc_y$y_qinlsxQ=!zCiFo$&z)T#QAS;szr8>zth8^T-gxib|HRDA z)^-~hSZ8w3Xm7=RnmG(-e-Z4Ohu_)0Kfo6&4Rbj6wczfQy$j-)8x)Lr(RxyNA9BgO z>;NB>O6*>OOU$bI?yf;bQykoH8kK*LJsxfDom_nWRqA)e3EqIfie<4byyHmTndNsaM34O)WjzQ69 zE&G8=>)XO&dGWNFn6g)6a!J{AD42!n)%++1zxXeizR}2yvg+8C^@&v0%6>E@Z>mB? zt;VyQnwRCfWz8;`=fFJc-C$d&^ny=W1(3uyMcC}&Q?hq}Z8tO!2NTH!D@}E+8{fy5 zO`oS{O8vbaDS(e@i{(9mDcCo|uJL>%4}FUDa!pV5$GAIHqQ(?%BDxa~eTvngU9%rB zy*x|Rq9vrmnQL8T)+UZdj?(#P(F)5o3;o%WqfUSJv!6AVaO8UrI0=XcO-^U{_5!B>zX9Sw)W-)V zSTLVJ#lQyn@E|DgW`Yk7fWiVC1Iz)kA@P9fa{=>!d~7NN-U7s|u#XSB<-j+9uwXtu z8Z8BW4ut*m(Q-S0oJnl}CIg#+lYnOdEkHLAv%grnMS8#%;JLt6K+LL&)xci^*8raf zo(+5zcrK7@H|GIA0s8R&D_}d2GotH(qkyO@UmDO4ECgN(TnPLn@C+d8P|l2A30#fq ztAIY>ZNP_scK{y+-UWOHh|$DHt-TL8xR>A~tnWnNgTRx3zX#fYj{+A1Hv-QDJ_%d} zdJ$4V=GSRrF0%i$1;(RIeH5?1h^eY2k%`VjHtjYkdI~h0LXk~ z<5Y^vkWyTR)GU^wv1JsEjfS~uTnnxXa1TM>Q?1FX`hZw2`uL2dVHW<0a}-&%gVSWB zM{9;V5jP{uztis-iMZp#n?e48KYW~km1sG_w$SSMux&8}iJ^T8D_SGAMR-#%pW#h` z_xfd13;-q~J{8C&83Z%~hX7fwp+MFNRarF!L#inlN)T)SMcb=|5;)D)wl{vObw4QB z4ispU{I<1&g*V4g7;J*$ysg?to{(CCwfF z!kw{&duJ5x@D$hesugBP#1I6ApvV0V>pN{&oy6qFi{ydL?uq9%zxACx$LzUb_wi5% zEbV=~?0IC5lF<#)j1YVGM4WN*xx7?{w&1r!hISbtc9rmMbquO_4CsAv@(Ax%%Mm|2 ztXuIOs#0&@_tY_YnD~d=Ecmbe@!}$E>Xgrje12vU5e|%V5x3=VP-BkF$a1rK&gDZh zs!Ki$S5?YH1Ur!{D@3^0wnXA9cm+PlB!~<11XVmGp!4>%%z|gdH03 zBn-K%bNY^hfTsX|0UQTpnXpsDHw`!u$n+-xmjKg%4j^`r_^N?ZfwUykfM)~I#pJ@< zY+yUCvw*(>&IPjgc|iErA|LoBa6a&DAQsPj{{R*PsZ$Gp{{of)Ih^2m$_Kw#lmoe| zWf742vKYvgU4T<{e}+`|XDET*vy8=;DYQ_6NH=Ix3>qYAd`k^ltwF0dXsrhAT!VJ8 zLA%tT-D=S8FlZPju?o_*Iks)*fo0D}>OcLFXC92>!Tu8qAzB3eU>ejRrZY+-qMm%bUZ%Cd znHti}tF~ZBwFN^7d?Mu2E@*dYA!&+bo%Ctjx&Pm*lN!j%_^EYb!!!~t3GR(>M5`9r zw+>e?6?!&dB(WjzYJHBmgyzrhRT^lnNIFutb z2zEZ{>1-3WyC%ZlNqTxgO#55jV>XuK{yoKe=I}|2qZ@MJq;$$tfz;vMb;|wx zAE}jI+?ZU4MaYk|4e;1?JgIH%c;OvTm)t3LSdBN9gqhEsy;>6dg}bz6>y4;gL6wCw3_)*Mra9_09Zqq7{wR1$cK71ymjgzX(|0tfh&+Kcjuh4vQFxDfFmSy!wNq zLD54IJs8nmoR#^FwfNAWHxIJ$nG4isV#+YkN8qepEenPG%&o6j;gK0KgB~k0WNlpK zayKx1lu?T9hg2NOyDe+T-%`Q24 zAs0$;>DIPdvnlAXsd5*t2`xE&rMVEtgK6^mQgtZ?YS&L_*PGFp0W-nTN{L{5QsnR>Z4aO4M?+rnQq^iz!|`^fU|(>f!I6m zyApUBkPkZ+Ak)eQJ^;i%Ro|n)xxmf9JRtQsA4s#Z0;e)73@Nk1P=er|O-19LO-19} zv7&L$rlQptv^s<4GicnOtN8vOGfB;;r2o4nX&w|&9X*&Ne#LG;vRUU0#UPW!&wfTX zN&Fh${}Pj=3KG>M@k6*jt4ZRA1j9^H`G2)ZVwyjnNm>L`z+rANkS1v6j+9AaNSP#tlu1%Fnj}S|Nm4YLBt@f1QZ$+*MWablG@2wugGpMq_Z?X14G=H) z{2joQqkK84LvEzgXG+vo3(V=$DPrA-j`rVTs=sX$e}#OtFAm)b?yvhYaX@1-md$6xejPwVjvT_q}l^5~}Ht`@J5gON93{2O;hWR0DGqhww)3 zZ3oX_ggZN#+yZT@p%m(u8ug=YZF_FaxGvUkM^`3((Kc`Hb9bm6ut_&{nzsEf>#zTjj<+(y%|U?b$_Ye_&@9>jis#GzqF1 zl-n#d1eFrfR-aIS%w^l=ETtlKgSn~mTF40$yezftIc&8gacldH_{D7kPiX%5j?P9_Uj=(>Y}JW%eEl)fEZ_aUIG&tOev59%}6%hv!G>bf&n>5f(=)H5m)FGfaCzeK;( z2kfSk5>gdUY+0(RQsuW79ti9pdM+6qSNWH5m?qcf20aLwai+@c$@D7a^1=`L04p`TXp=iZ2m8LGdj{NYVICkfPzu9gW7F0V)>e4KvHk0S32jvy=RL zJ(P}NQ679=fYp_}Ujko6Tvpig0`DPDIWUd^dFX>PCfIEiYwDXg*Ao1$08@!@Xd8U! zqegv)ke)A{xZ{yaH@~GL2OefQ7G-MYpDs5h|3`pYRVhi_Gr~@z?-}7W?Tx;XhY!M3 zZgopJ-_^r#lbAxC+?j&s1dm&aWzRG-p};)pBgSoZeEgtZ-nJ1mes;N9+m*zQs&2F6 zvvSymLfJGd`feBwZBw)=(Pu92)vopJBiUN5>DPY>yT-e0^3dZy3%foAZN!7|`b_Ap zK`p_y^x--kJXdS<^%$Votd{~$1YQQT051og4#YcOa)9gta%ScRAbsDPfM)}526BMB z1$a4d1Mq3!?LhkEzXomx-U<8+co*;+;N3uhJlq51>kjt<2LtZ|jsiXaTm*a&=m26z zg%8sV;&;Fcfq3^!?kf2`@IhQ}1U?CT0=OIaByb;a6Og+}o&gR(eQgE~13n8p3HTf^ z4fq0Z7H}(&11$bVlJ6|w%RmmZuL7?E;vGrfExZ8K=w4ca>f?IVM>%b$ieiM0;|I5Ag(KY;>n7%JG( z!T3E_hQ{NU%Vcr#r7IOX57%lYWuXxp$qFt!*b_A``@H6EOhny&=mrFO)1ny%DAu^+!KM5hGg6PF*5IM=f zbxuw)VCRCid64TtG`F$1-*`=%wrCLU}hEy+LD1omI$=F1` zBqT!#T(!|?Sf|lwGY#5l2F-5J78x|9wQaK@92MC=W3v`a>e{?#5w|^Y84@lW)KmI$ zyGYU0*?Y{owfkwbJajltf%>Xf1eIp5n<=CED`9yYI%Bev2ixuoFJQX?=QR4dNwQo(tA3-w^$z6Y}W zKLAev9t55YJOrE$H1!fbnt>SLd|+=N6*&%A3G4%`2gU=Nfr&ttw=aT8_ROxE+1bTB=@Po#5c-1Dp1z%(WLGaS@Qok}mTv?xpkAj^t2Q|* zPOiUXv}CB1)e_8PEXSz#t)9+{Y5Q&>UU86eUW}Ql=r3lOGO--9K_#Z@Ml0?O54I z+`c*K!i~5^HZq=&c!R8VyfOqC#t=3EO9V=)YCOD?#O!Dnoo|p=UBEEZ-dL+VuxU-WXJiW-=9!_rCCUOh;G?PegKQh+jPZc zGE{+I3?{G&EAabE8R9REL!7t;znwT!#c%O@wG92u2=NhzQ^axNmk3=dV>cjVmZ3+C zP;aQNvUe#6u`i~IQ3$DpkaUFnpv8&Pj8HK`to1l?CPJ6U5V!queJPHgVbJcl#t88< z2_q33`Jw1J#Ih5!|MLicC}Iw0huKQrLoeWApoIZ>Xtq*&4qE7{P=Aj$UB=t1J3 zH$u%+#Vc`oTIvJeOL0mT>~lwQ^hmfDoQJ+vF#?s%Ltm?yq+R==XXK~%&O^WE-f$k9 zQALbjs$FMl^3T?;r)bw`3VG=FUmbKEG*)3v)HtXI9INO&aoYrs6pSU1D6qxbHx@Vq zm;oFLr0a7$kYmybz_WnA0ImlP2eLnn0{#Yg3h+hXIN+aw6M+8$P6YC8;j$+ybCxV$Ooqa;0wTFAe*ZcI0WS@1M(Gw zg}^Dma$q)a5s=F%X8`f>6|odp3B;ClUp>$PM)d-}@UyM_Y$qcD6nV|%(BForBL2ILEHyJcq8%4X{pgm;JHW{>M4cco4 z?M;LBzCrt&L8D@-ynJcUel%z%@yDY!wO5N6zX4~-R-IE_E@FySk;_^ROHc8$=8 zFfsYO!grN855hdsm2>2%cX`y8hs>bp2h-ezf}$2t5_P^3_lTG^Y$V=n}f!pzfD% zt@8#tWnhO>#w$8yl*iY!8GuWL-+)slFR&>_Ic4&S`(l(+CNBd{87`Gm#z2r z_-YZCR;8~7ec)fe(tR~thWl#J!eCzwmm`qPfUgF^97+iIYUnHBz8Xl1DUz@DJmdxY zYRCkWs9qh#SDS|9f_*i85%*|)H7_ zok03-mjUU!T@Ix0b|sL$+f_jNZodN3ce@Tq-|c!JeYYEc^xbX;(s#QDNZ;)~Abq#{ zf%M%T0Md7R2*~F9J&?W|{sNcu-8KU0yFCu1@Ad?czS|}seYaASrEr0@13kUrZsAbqu$fsX)R1wIM<18@`Y4Ium5TR`^J>v5_foFO%YGo*YtMO%w} zE80z3C{fTJDH?q^#YZ1b(KZ=0`f!RyA5QVnhf}oo4H|toMWYX=_~^qa+K&c}KAfV_ zhf{p?;S`NNoTAZ(Q#AT;ibfw!(PkSoi$Pmt&}bVKpPY(JmD?HPH=tH9&6vqug)M_R z3-@*uj+av!Wqb9}w6EVf9#iIHuq-E{jY6FIY|9XTw0k$A+O=(w{Sd0d87IHvWJV}ePWTU%Av$;$%MkmR z3ul~o7{6-dc*Y35gOD0^zA$J%7@rTpd-$ILXGJi_NoOVCz1VQw<-i32Ykz9ZU5 zX>ClPR+ysIqc(Aao<*8 z9Po8uAK(sP0`L=HBJe99zB%bT1jH-lKI(olkT(7{oXW;Cq-;DxSh|T(u~@p%LRh*n zX#8;TZIW-MK|9T$oo>*I3>uw-+hiJN8Z<81Dq5pKJKLb0XVB;<+$Qh6)}ZxdfA<;o zci+!sfA`YKe4l>8V##euW_%AoUv}K!d>PIBoI~=x+w%4rLxD$a?pV2_t z-jjf4;K@MR-V9(RFcV1II~_>dI~z#bI|oSHn+2rpwE$^*@t1FDT<#fMPR(=*f9{)%T} zC0@GK4tb}E+}#hx@leto&1#v7SBirCWTdChm_khtqz=mTVWE`C=^2?}l#D3_;gso1 z!zfcSE;T3nsN}&?25878>>H+6p)|w6!z0nCv8OcA ziGnr8gL4AvV167}@TkWsXn?}d_aQu_^g&UpfXq)^NSpF$HrAAbU)IK<#5YkkhJy9E zzvLMYsd`KHGeVrr~ zY)GEDwjXP{MdM4l;PeIEB@d81JA)*r7?SOp^KoAj!uWl0ViYAJ6Tdt@>QnHC?vm++ z#G33uZ85}tq?=^+m{`**_@zeF|Iv;|S%?U!4QcC5V^G!9Y#zrOlFh0CKrw4I zpQTaAr;_ET()2@7@J@|!gz7VG`Qh@z&GE4z`8mPJPlqP?1S3D#UThqpY0(nInz$93 zJ>;_Eh8A`&yIJyJE3#ZUzy<7w-gmHJSRTV=TERMYBIvQE<@n_&^+4Bx8@fv#A$jgI z1#0y~L-OA=$tN16z`i!)P<5EfAzC{^%QX_zSQAGsjuZd7tsP2-WJ20>l;p_+Suf2< zBXo);d8Cngj**t$%1aCiTRFJwqow5MkV)!#VoUu)-BUkF^86NMqWqfA7GadZMM&AlOCCG&L;KES zoROc4G|A(-m2?950+KIy?Niihxa5hF#}*`cf+6{CP4WaKS$Ph2ranpD)y!bXG0`L4 z6iG|NZ>%Xu2{g`EAk|T${(7RbdTx_jImW^f{SRhkrB6n*)m~gy;;=5VI!dgi_Tmz& zV_sQ)F1BXlk6b$(<#;n)f2Y3C*?@P+vnHqMkqcdJZ%aiz)*<<~qpYn#Q6>0e725h_ zx7$jcUVe|q%D+IIl?h=EkF%-;39WHdH8rhtIYm}5sn%JwQi}lhoTz{2BP(n1Je#E~ zFTbeNZYj#KIviP9Hp?QA(t%};{6fn-tE0&7$g^50X0!q)$bJ z$64#GsH}I6`q`7jUw?HrdmXj%jej@F6!w{6l*E#!vL03%TXybzt+7q4B{tMtChvDx{Jd;e8FIt}>(6R+m@nc7fa%H#_yeg`>K>{1bX%yW+EqoU=W( z_u|k#C~1(1$g>vMtRbHWsY+2w|Mnj88ug4;qt;vl|n!3oyC=P zupmLzTHoYxsxM-&9G+&VvA4$IkqEBm&>TSXkk9vCpbZV8FuTFnH%6#Gy;+ zWG=cu9u+cj0m@|oJgWm~uCDSNL7M8m=&g?>G}-<=aYzlBG&$WIe57YiO`kq(N(TPQ zZpe|ImNs?jRI_>7jLb|GwLGD~)FoQoBg*gZZ<3prIXVPS2k{!Cl2}U5Kls3B_=DX7 zMr|L3Aq9LHvlJs;hb)nt9Xu_>7&Fd!8V|2|WQnw_iGkT8Nu$fUqC4N_;9;ALD{!t3 z<1;7QmWStWI!4_Oz&GeL-lg2atYqXbXj+E!ojCKrGiDC2)I?Dvd5a*=2A;dJB%2(t zBgv!N@Gf}bEQ*iy5=q{xpbrJlCmJ8?J(9dS(0gTLFAPo|^bexRyA?e3Ig(AbVW= z6REtE$Iq3T^AuM!dCL)90-lF8zG(Ry1$i%m=d=8tqY z_*Qm-WRsIsk?L;*qCW#qUp%bwV6h^}`v&wu;7KSVSM>Tj3vshF9?6KGNb6HAw z9PNgaN3{GEAR>1;HhNV^HaQ_0Nnb8U^k*86;*6ZXOvpRC5|as4iYr?Fh9P<9MgPXo_#jW3$Kctq5J$KBMkyps@p2Y6oA_@c?9 zJ>3qTZOuK)JAml#!Sn4|iZ7bI|1A=l?8asmkK#K95UG8y27Q(n_75iy>Omy^YlXZo zz*DnIvPHF5BN2TccwX1|qLp_)`2GT(H&-ip(b|{tVq38QjFU$+d90T-@QmlY9FA!6 zZbRIe8jobePo(nR%7o4q;?{E%SG4-O4AI|fJc={2ymKM1<6PwHJjK-q5UD*zgFYWT z%^F{{@-9cj+2DEi{GR1yBHHZ3yY4u7M3XlQ5oh{f6V^$#sP%UrqF)71>jjE0n!fCS zylcSYzEJT+t3N;Gfv3D(@$~{kY7dUn=Y!|N^@=ZA{rxEsf1lzaECOAr_$Eb>w+$Kk z$JV{hU9MQ__MR})z=ib{D zU$pw;xX}9!Y=Hi?;)^Dai{?c&5hmEN>j-)q>|LjW3!!j=y(;=P~|~ z0vyrucN*e$gXiR40lrB3M|q3ECJz3v-rc z=NB!ls-K8uWl_~oEhdy_nkSSmGEZ3IGEXS9SDPoyTZ6M<0x0$73B@4fs%559M|Qrw zbauvMP|EX*GA26;td=5&r6|`?hybV#MaFNDeRf)FW?BX$d4dF>Drct$U1v;&NJ()Z z$`KS(Y_sPV7pWAdB8PLUM;u*ia^EgnvRW>&c_w1t?g)r&I!dt-l>~yT%oFktFFJAy zS(dsQtLj^-ow(m_Gf!9~kVi35Q{k%S zX2C7XKYL}OGsylo60ZJW(KqF*0i^KoINX)FO&%^a;wxi)QVycy^zxa+p`@ZFY{}IL z$siO~tf_ROL+LbOI+U~+U*1mvZg%Rf*Ts}qLt!^5prLIl*>C} zWwfFl8zQ&V;-Kh22ACrdk*R?OBQph>%2%qE20mg!HZ3E}EmJa)D)XY}Hii_HG$pF+ zXiSQH0?0H~F(Rk9#IX=tAE@+&meYAP8T)nOQ~06J@cj|^bH{xVH3IcfR#03t4_|nV zPniZrhu!ALu@n?!TXN<*tVIj+OCWAxx=2I3C3^hKnX_6N8}WA)swa5YG&?7>oF=ky zN8V4lBV2~(G*oST$`Z&Zz^ZO8wy=~=&4dEP^UFbk*_K%+fvUm_hs|Ds4M_1R`~<4L zxLs<^k)}ZH4MDrdr^Le87uXgSV>8T9Tt0yNl>whQGbf*xI;Xb6?ZM`{_>_unaq3S- z%RiMc5DXi-G06KCcO$F&IF4YSS$s-MHwJrcOXEt9Y_$2^BIT#)2ID?_zE$8)Q&rSE zUHDTD+_}|K<&~vkbC%{Wu{!MdJ06i6UZ(s!gga0xWhMFc#SV+zUXq_(X1A8255%X` zp}uYNbGaJ;Y8;=!FFTdmOG+(stqxmG(UP1zS;176D7uo2yZBrnHA^_PQKg2t z*6gx*j@IcY=mSUs~ZJ`21$j}62=+($^ z;R@W6ej2u@#;15u7um(d1+rnk2^3~-et}gl2y4E9Q9(6-7ILiDe1T0Cgq@b(O|a$U zSxWG+!}yeR+++)G2z`r`7=&0>LO_J7jFF(zWM~^}U{>9E)$Sr}jd8oGa-G;@1fxdL z`~xQiwn%!yZ1iPpjsrc2y2h^=Ypq*c8eAymz?M@cb5Co;dW}%6DTt!_q9mFTleKjx zxNX`Vm7IbSUGPcZzL4!VSMTHSNh~Fc9odV^EsG5UCfhk4d`de4okr_3Gax28YIJyW z)>k>IuuW(M_Q{_u} zmYr80s8rWwM+hDS=r8GWeDdcFQlB2LV*DAZZ86vV5+pW^#@I4V&AUVp= zlFG)_@~QMy*1>Ygriqfn+Za&Tr)@MEEHJI9EIulU)o~VcDop^d_~c@fsj?JkP&pJz z<)_ir3may2!)-fq%Gy2|A})!f6s3y`vx^G?eTyj%V9L_Mb3p4rwly07;~iw+*$Omf zHf07lsz1(*6{D*cSZp?HuGA`hR7W9sM+*w#!Jh?#&T)vRz42D8P$q{B@OuynY(X-p z3a>NkDid0>WiNIVSqiOEQJ6!$IzqF^ab_pAI!uo+MsdKPmeY^YZVqfT?Pg^;M51YA zGY#b(a>p$-`%GS;1OZou6;T;Vm0HB^#XcxU#!N6!8A?$ej2A|?WNF`GEk-Qu7{pG{ z?#$s+R+-H)ucR2iIov-R)Q&6~2PGvYcuZmkt!4I%4odxEp=6oZgS7QBT8S9uOHG3;=CkO9qCfnArr z3agQ3UGaz6FOHZjj;@wLh?c zgWr94>9VgL{TNf!NFdqN+K@S~;rg`Nk8U}*XvN!4Z&BYSN;W<0YBWusdDgunUQGJS zNsDT8u*FXD$0S|;Zok(@WxYRX+Q>Ptl-?}FKO}wVpNkSt8TF@wLyNb5?49%OMfg*t zNITi|eHG3~65Qz;S2Zopjau)|>x)aw(P~B|U4@ z!*j;|Wy6bqE&pz1Ma*YovBgEwN3Hq&my?D+H+OK&*}Fct^b{BB0drQ#rXN4uUiWC+ z-tDV?wQO0^FaCydt(EjQ_nqh8RCCItKi&KI2{Z0kh^3O}C4KpX_a9#7TJz<5eb*oS z%j+F4W4SMma&CTk_(iTC56-&6ntS6lOAb8_^_2Ag!`r!lS5ch*e?tPs5KYjas8}Q5 z6-5wK1k`{;(Had%ycY;bxRbARQwIMd{de!b_M44U9(;4m7x!L_ZW;brGp_u}%~!7LbMp(UKe+YB@1sP9XJ-Oqf zr}jHrL)1$R|J>Q{Ke^zPsjnS$?0y#wnH{;7;c&x0{_2fS)ZV({u5cf4**G`Sio`7~U}a$Di->_NEYqw(m zS;L=M*cxlN@fS@Q^ZI=K%Pj}rMB>eqKO<%g&VTdgQzy6n>!IiKKHKsHk&N%#*`n!hx@F(BDqVn+PA0S`-oL?Kp_rHDFeRb*F>Px7m20dBDeoq#CS7lR6 z=F@>xJ!IA{c|_Bpx_Cy}&iJyx_MTQJ^qwv#2|`p|L!avZ#2e0a*%^Pji5y??UaxiOR?iCuGc-cEHu7i$5qrR{jIxlbe{kglvVA_k9Fe- zK2*_DzKgy%-92^}y^-$jRBG&AQYA``yBL(pib|!%o$;mn!1(KShRiOXw@czKojy}r z&F@Tzx{>qZ3r;yE)DG+%PhH`7HxuaV(>3f6HIhPFSJ8`&x0nxt-8 zW84u){_uYLP<&?&BL#b9Cw|rU16`59C{hgZ;j=*MHjbuHCb~~ zkYpon*z|jA({2s&teXpXmUD4qthAurdsE!Y-a)L-_Bw#CQwkL5SU z3mW|cI?`bJ%7i8j#=${cIcD*n;x)&+hr41r$9pZHB;&BgZG|TnzLCb!{}*W7)zA|| z8n+dm?C2-Y-5HI$(#|nyS3;w5iJ!$M-#C@q#?GW6mHP}U^t%RTE0i=&ePzoW_i{8u zVf!J-ID*Hzs>oF4;6iW-xD;FpUI#MoGqMV-10Mp}a4+&CxEx#!#=tkg zYeD`0b)W>hAD7igQC1^GS&g(jX{6=(S&Y*-j$n^&O{vL51KUMxa)}qyOnQ>593st^ zX&O{ml1IT4Uzbcc@3;ZpB_T=5jne0#T<7nMB&V@?#Ju9F+|sgnWi^_qNe82uk5f@~ zSU34dZa4XeVo%y@V^5TgJy9m@+RT_3>QQt2ESSo2;}hE^&B-Arwa3_Snq%~xl$tCu z=;()O{{GM;r?zNgTGK&(%I-Fvl|Lyj>g5gKo`+uLc*jH8RCI=Wo5NIDpO;Jub9nn* zr64zwLMhkO?xmnfSffTwTfhb*6}u#bOZZM=ZZ0VdGU2$uQC14#B}jo%Pk(1iJ(IN! ze}h<_5z8iy6U#yQ*Ih}cdFRF_*~5gjHCag~H;SiGTtC>EcuLH6%=ERLE9t^<^BLbO z51*m-I2Jisz$KXJaQ{^K^gUkbuXpI4fhnRfh2xzPMqHLUt zviXMPZQ$AR%m(S1v4WO(eoJ&=wu%SniP^CtRag8Yozh?ivS^83o@t7kmiPo*w#JKE z6VgYEUyGp_$>lRv*(U^)L=?_w7?SjictM$+DKg|{cdiS$rtFO9Iusd!>=HkVPrh-v zOAAFtNOlsP6xufmheRjUJw{f!g@q1cL#V5cqgd;_!+1G zDbuhb6lFyy%8JnPHaL5UNl8c0rjuiFlw52aG9&$%6on+IAHJAw(nmP*Rn|)=#wHj} zH+RAtAIjzBM!I@82mH&hz@s9pmGUa<#gkNSc)L!rzMtU z>W&gh9+z(vJ_)5KIKnaSBXSky`$3iO46;Z1fe(W6?;%ir59hLxFUm%~s0?o_cgx%6 zC|47t^41zJXl;Z`4%Hf6nC{i?4#ThLwMIvIH3#x0j?Fd%l#pIp8{~@YuQg~AwE9f~ zk`N<+W*S0{HxkMwresNI8gG3GLUu|*m&3~sNpTuHsp%zLr*tnxmv{m(CVmRnzH!M$ z2Sf*AY(EZTmTwK5#w7`5fcn17BS=8uc@$KR_ZX-@{w1g!?+H+neG)tc{1rF>d>Wht zJ_E|HXF*9)F=izx%1TmHhWCPd+uK{?C@0BmRl^H*G{Qxakm;i*q+gbS&n#-XPRt^A zf=+Z@S`2{(_5Iq+IeXfZbT}}l3_qeLs%~GjBR(#Tqjz@1`*1EqkfBmB+Yw!q?k&iX zjUKW57IN73np)A0h8{r>+LWeuP}7KwOZUTO0;DvZ#zZe)Llif8TscTu=iIC2F_XJW zmmE`{wfgfQ&u1E5GEI7hH>$blolH10eh6M(NR#A7l6#zMLid_0<~-20|}o|SfzOi=53D8+E1f- zt3herZ@~WG8c;Ramq69|*MVcf--2g=FN3Q4zXBG4uY%>^Yv5(z1~3l(4qORt1oh27 zfIkP{1Rnw40u^_E1f{traaqk3Wi?k+hWCbh+uLKlg|V06H3z&M0ncv_s8_*A(yy`l zn)6a$>~^gMifCU0AUl-`HSkUeX@T4*hy5Pc>D_BVVQtmSvTmyPiQNQ&5=fq(;ddUF zZ}d$`Gcl+CGqI>}`~{RW*%>0D_Ria&!uEGiv8+^LV_B4qWl{F@QOlFISe~gV<*0d` z-%Ojob~h7~O+|4yH2o=bo8u(Z=F~IOR2<~D*+f0Mptbs_cu`ACNq9$eWWVY(G6-r} zr2jN~NaS87dAFo08)(`P2q;Dmaj8?MeguM1QdFLAlVW~(DH(|E;<21@Wiwf4pt;!AC~HzJ2BU6O!{vH3RMR8A@@si-P7DO_4%Qo2-Qg|%z$`fsU5Vq^YYM6bAb4^(ir zf&IV_z+A8qRLDLA_1z|L9LWCh5ha$7!Lz{~;Q8RE;Kg7II0O7AsABF5Q1SgGC{>eN zt7@XGs)@?*-ga+$d+$0b!%HXB)*kCI4VB@I40vM#o>9rf%13lDHTdj!es(-Py0#w` z^ApcZt3D#SnELweR0?fXBf6MgCv$Eq#hYK|WTKQmz(Kr6ydXO@C8ka+tkGH27JV_D z!Y7_VF@$PQNQPcz@GP(wsF>azRCA>_SOR8(OTj(Ct!k7OwWxB`W^A-!V?odDpW>Jf)_&DJnpV?jMTg^s>7)B()xF6J z7+FtG$fTB*_4K&3(d)D7R*PEzcjBICF)w?K{zF!seh<&Ho*G9tLweRz6Vpe(m{oU! z^WmupedNPa<8~jtzV<4)ern=ga{bhVjM0Cnoo`+4ZC&;r{bKFK`tDN`sLaV#Ca%t~ zuKHS6d*JE>>uMkCYEN7pVqNWPU1i}4FWcJFQ46W2X`k(z{=@Ok9h30zHMTvs2LV<_ zkvt8RI{oq0JDi4k^Zw*eVIen4LsP(U-KQb#glm$IbTo-cR*&WRjtv8tjboccNxAP-o( z=B~I<8dNl>)+WQDOC}BW1C<6j0M8U42Y~uce{ekbJy2=yAW#KGE_ewz0GtjE1WUo8 z;BkC|BgG@?A>{au$OMohT_Xh`hc`ve1xJFHfE=V}j*%S=Dov`^Y15=An9>+v_?7&5gJw(Y9DHX}3PVl_pL4M5;dKE%g?STF?Z# zGH3!#L*1hv_G3VUbdDmMblzf;HL0CS)Q-UvHO-teI(Q?sryA4sN;>DP(-yyZ%yFpA z@d;^z)yLEvJChy_`#ryk^kTU6qtNG=3WII^Ea6$jbB=c__pVdQL&i>fjW?W9KH`12 z%_BETDfe=n)_qDDufA3Td4(Xy~ zy5-4vd$J0gtJyS)@5r<_n@ow6m>TrI;nZ+4TBtZU1ypJn3o2ob0}lengU5pT;7E{z zi6eR7>7Y^xM?jkP6NiwQQMm$eDtr!vj8uVzU=27CTn@6xBJxwP2)q+K4^;efbeTyF z7eU+9Aj+l&Q5jxebldXwb5w>mG~kU0ct-O(_5!4<`EK-_s*zt`qVZ4Zq{clNef{Kg z&gXTOI9gYS@|to-B^kE-CV?_^I(lL$6n72d(g+v@7H#_0=-TvncC1glFfBGQjp8ge zF+HA_85>JC0q^?JX=Dn3svMzgcQA>3{3X{S4*@bh|lb+fh(9EWO zN}CI4WVB4;Wyd}Uk{|Bs&&sCmw!@?_zwg8J7$(-&)PhnB=9u2MGDE3nLG98U?-$(l zWJd>8+sN_$!QE192h&aJ%jT`h5ankw;nXL8!biW$jWjO<9N&HF<3NR7FQ(K^QTS}q z3pyheY!yAO-sh)8%QBnz2PrYJ*pY8aiOx3?vTefHdf<9I^o{anq3l!71QT;56_wuox@=OF`v=WuO`X5j9RAot`VU^p!15ff{d znOIv~I##oJjN$~YIuIIx%tVgqa3$~JL=g^6u&QrKg!ZN35 zqe_&GDp48U!|rWw?=eT2s3JFrHqu<9s7z1gUXc0a9|o>XJ{RNw9LgxfGU13?0B?9G zqU1&aRq8M398uprk~H~4f2t_c+Ef>7pYf;?!Z-S^B27X)$}x{{k#?kutihndh3=Th zlZx2L6J;Y$REGBqcgs^6vOIG7iKdOa4^bCW8>4N>i7C%*`A=<6GRdZlIlcV440Y|7 zB)C(!dYKTZM&*kV(sX7hq`G7jv;MPG@CmMP4yJAf**TKyhn-{Ajx>%MmDnZYdyk7m zgCZ*9kyul)QaO&pII0$Ps0J(h$gpnwyk{QYtTa1y7!jxzAeqPnwE#)w0>iR5g;`S3 zr_OTxv{Vi(g=XK`BB7mzA0*D>YFW-m~s) zZ%>7(<^46_{XO8RYHHoK20TgEpK>LkB3*wlOw*?HVU>jqkuB10Jz!zUR{sGzOI!U1 zS!?qjRM~8_L$r&@e4Te4NBwB!&-YI|fTAQkk$@D>b3ddfcq@4rq z5B3EIf%}5Pz?^*2-Wwk?;?W46k zrEbgfr5?r8qM5;eF++K4<_0SS|9KeG``boxv%j(eUf{h-xy4qYm7c?l6B3oxQd%3 z9;1y}&>Yn3O>oz)saIZ7eBitigy}Z}CUuCFP?n)EMHEsYY zDwnsuk;bV;D=k#&SE?HwO8s&pJKqBrcdc=!>U8te-W0Z#>w0Sm#Q;19szplYKdz#G8h zz+1tQ;Jx69;4i^Z;Pc=~;5zVR@DJcAph|;r;0NHT;5XoSQ2mkY+Z<6_?{rY{H9>sd zD-W=#L6l7mqB6V(+}qyfUo205Ywf+@s0?poz}pn?I^{gyGXHKQE_ZeQT^v8o3u(wv z@RS!E%5_Fp8lvV4bG~+c=3OuXWCmaqyGjiRvEGud}|9#3ZZN_=0KgNmG4Uu`~c*{6QO|!?p#Um*BC&78XJgk*x4? z5Uvrz`JjYwA*g@22$c8Nb6FvXvO*A*VP-m8-d3J1FNqMoJ%voe`G1!}9>Qg~N|TsE zBHatZ?^f9*IqY1wij~Y~gg1}NH_1}R4~TdPW(ug(F%^_xib180>7WF&lFJH4logC9 zJDI}rluj%!iD0r!|2L!lXSSz|G*c_M2xrL!as+P_TYij%Q^qyC3->b1jebaJZb|n7 zN$6$vzks7evvX;~#CABc6^?K!C?hfzwi%!zn}e54WX}c_-Z`KmTPfZ~wkR9fqU>}= z%iG}Wbt)&^G>hIHi-(uKhy8r6M+)dp|g~NB5y%N-~ zl4bDvW;j;o6Ke`bIjC5z0QUti1r@d`P_cRkmyK0XHdaO1TD|3|_F{RcaJ1RyBjC)4^h=nB#^b=Xt)ZPtY@_g5s9iw}?y(`Ylc+aNf)js2G`;YO6F68KQ zwtAhfL0t10ijW<)q8;kBc3kzNho-(Iw7hqa%m!P3=)2Ywnzq!X3ccSusEKs6#A7$; zyZR_oV2yphw*F$8nX~x_;ma{SIC+M;kozfIy}TIrlMU}@+--gR4X8rHlNNcr-kZeaw9umaQ&p~bgbEN=hW6z*4B)xoiT&SFq$)~ZzVAr;%KPEeSq~!C1B76Z9f_G18KlgCg=yUrQ%(NX>a-;X>K1-nWW5R zXr}&gA*in`0tbPYgUWob07rpWg6Du&fvQK)6KYxnOTbc|mw}aF9k>F#27CZq4*m+P z2mb;72vmHp02Qw{fJzznaM_e0%BBoacJ`d*DJCpW(zU#=0$w(MW_g;BVC|U{WG35m zNDvyni979UO+jpY-wo~Dwm+SR>##=t#DsxSK80u zNRND@|B%l12Bl{*E72MK+bXah_)}0dzMH}E;4Pr?irc{X;O$^7cn7!${23Sr?*SD* z_kz+v>8sU2QC0^kC^ss6G@Nu}*P_-A%Q7g(ut*8u75o&oG9c5~6wvM4;6*CAf z6=T{LcQfCMX@HtpNRiEStSKiJwN=lcK%cwja24V!Q#8ND%op)lMJ=f-Q>Ga%S!DX? z{FW+K+NNtt?O+Q1xo;e<5lSuHR z!$^*zbRYXYjXwJGIm$a&D#gMGYbkL^dO`8IHN{mm{BHZCsReX(geKD3(!SEVH+TJS zIOqHoI-)pu3d{nZ1{JX9Kz;jp@O1D6Q2l+s2Iqro!JELBz+1p|pyKhjpmNTqxvb8K zvN|U!!)tJFdz%%=me(Bcb~wt;>#%M$ufy64>c8EpFnJfvM6mu35kSkN~2 zmBXpD4qlew6fxeNBB~RhJ4O5p@54)Y%FbCAlyaY?DQ?@%{9&s&i(TiJFru?6DdLV~?)4OayIf)Eu4e+Ly0jM^HZu7$Qj6=j7gD#PoC*ep*oAT4ibz*8<^ zc_x=o9pB{=^~{#CvTcoz%Vd59Pn!1Vmin0)?MLzjxlUdQQ%K*Wh_?R)5NfS+*bS$`-d)k8C8}geK(57DG|8_i( z$>(mOdOgdVnInhfci48G8?6Ywr;!Zi*tL4KJ(|=_HQ4l!G~F5WK%|ou+E!$a>5C}j zDaTvNy=%RB*x2d1ou;|lVZD(X#qWJwKkiy@E-I_4=%6=Brb&#ezjx?g=&UzV2r0Ky z2ztjl)I{d-N*Oe!qw1VhHlyQAZMCvaGZu|aO=z`#o?BB^X;}U|?*zS5mSI{D(!Ukf zwYe)Uq<^ZJEOY!1o&Gg}`@^Gs9yu8N1XLJ51r>tN!D6rloCSUXYMA6pP;I=gz?I;? zz#GATgLi`e0e=R514;%czsZ+2Kw7;PW%XK=T~Ta#+jzD-&78BmJsoA|Xj`8C$=VC@ zDs>)AplgqX#pF`iD5}ez(8ICWhN%)Nftf=E{hOMTt^LvYZ3~9aVNw*TYZ^ng0E@PM zW5(#rvgHZcgWXHtpQfIHdZ(GzqFPru-m%;tH`K-4-{9({Gp$XKlV^}>JS&4#`jZJ~ zkWa!3FZ7WcDY{bm6?<_rrc?FXw4*v`x;~V|I8E=+AJJLU`=RMUb^EO1>Kb`%+OX<= zkow9zPk8)-tkSZ~U165+dV{5opNfL$KbRe123vZ8hw;1{I0oDu90z8A1z>MbZZknC z=AK{#>;oz;I84GQ+#jH=!ilm9C&~^xS>9HjEw9Bpm?^jYT7FMiZhE1s1{p`OC5`02@m2C5`kd%*O!M#(V_Uj6 zr$-W3W7C}zwn;Mfk7~E?%}I;b$v?JE^5=mV|6}7a?ThHbOzY~448Co`5uZrLzcrq} zHS6j0C0`X>#I&KkX07EvY+#wS{i^I5f3OvwFeY~GmLTK}OQ}^FW8eAZNt$&KTT129 zo0I1UE7P)5ua&EbE=+6s1s&J36x%_#?EBOe`rIVTjjp}G|Ag~v$>kRm=9@tOCNa=` z6=)L~EN_}u_e$+vv(_ZO|0g=;erl=t9TOQe!ROVFXX3XL5w$31i=|UjqOI8rLf$+o zZ+xdyXnarV^sDm2{c2Asd+@Uj`Hh4Kwb^E2i-jEmR)Vn@c5RB5-kYe`_fO28rd-PM#bZ|j$3Bzm1*w{VUO%f^DhSWt)DBf-Tz*l9F1L zTDqBVx&aRxlO|STbcqx-I;lI(=IG+hUahTL$gJqH&Xn#!c~} zO>^JSf|}@$sM6?mhvAP=lV7=}W6Mw31A)M%H-M!kr2^zV*WH&Zbn8Iz& zAoI7{N};a5v8}sTvv<5+gpG>2bjYTR27~(1_$qN?Ma!a#mwB~&`GZi~Gv)1W+*BYI zEYq$D%QRihigtM#KTGuZlGS6}gwatqz3}iUZt?tO8h-2( zD`ai0A=x0OkO;PPdaRJu7t4Z4X3K(|*_H*XJeWd}J-T39)gTjV*`xEfRPV?48pifF zzf>ffsHwMoIjjBR`J1)1j)~LwD#dIE<>)$QcUOqh6yhX**5CYDfBo4zh;REA$qS7^~A`+`Q^2*Gln=HnT9(SZQ}xuvr@itupS+tHKWYa0Tuf@+11+ z=xTZ5)%2IrMvT%%;zf~oo!HSaE2O0FJ4;#1ZttOzCgNo+`w0}WhSk_aX1qsYb^UNK z{FS)D=W_7+%XhO@to`!Oz1I(46J48@_2V^PZtlG{5OJ(7M_*X2yH_(NUN0iPO1{MU z%u>*-SA}c^X5Qh4&4lBtjLR3(Vyn`yErk>sC+I=F9<(f4+Cy>Gu9meZ+IF3{C3Rt+ zzxr9&Y^W=Bj+?$0UnN=z%@FZASx|B_M7&;aM;Ao0qN`Al_$uRk9R4Y+<{^(vfI|8e z`)&qHupK|!Sh62yyM2_h zTN6|9dTCEQXGzR_(uL6l*rbys@0bvqfNCLA=f6mAn)Gb}9@cg6C{B!A*!zm$-Gw4< zzg4%BZF)7?BhGY zuJhkt4eDxxF%w7DpBeE9Q)WcByG(sX?93_7|N5Z{({h!!E@taSh_h4`5BI56BgMHv zYmj_bV~i`UMe<$c8COHau>o8)-ndeqk#*G&dCbZ=ura~dctBq=f^LXtF#ry{?O*-- zn{Vc1Hp+o1^|G-VU9G!Ub3nXcBT>>!dJ@A}iq(0L%4~#k<_A^J+Kj>IP4seRRHpkS zp=p^l^`Ni0V8ig&jX!q0kb0u&-|XcLgF1z)mp7ifBE`1T{%R=w&|eJoDR*n{P{Lov zQ;w$^kDV|P3#j{`ti6{5Y7df!<(&a#UBsdGFh1W4^=ISXpMtkc95UVYIo=NgiUC&V z%gIEdI`eb93!tpev!U_~?`kOJ|2f|O1#drw((mVZH&NDEw~s?vx9g$o+kGf8?c1{h z>JL!X=P#g+z?WVe2Tu)R<$`^S>26Bqp=?{*Yu#BIjYYF^m8At2Y=eLkFznOc=kNA=tNmv zH$BekDB6gX0k|u%1N>rba;$Q-yQ_^yn_=mg$%@&fl^mklyU!M9r)oj5J&jm{TUz(L zl@~fxu98!*CveU!Q)^^@TiCv~su{$K#`YKIRL!2rimG{LtMf4X`R{Gru=C9gd>#t_(uM(&4sG0Lb4-=bv z;CwmubZ}?sEaJIW2b+7N+k>p|)qg+F1&Uyp6Ov7oRKi?~^Gfw$ShhNWRiwKhn_Uvc zTL@28n9AzQ4NrkrfozFb62#x?Xpnn|L2A%+_+jJzTMIR@ECxWBF67Upo1(*l2>!vpr zdB6Z(ct5DtH>mW^La0LH2U;3PHBh@g{<7ljBVS*$Tu%1`#$Z@Gb(` zjKI4XoC00~vh3QM0$vMF1(kwJz_-CNa2q%S{1BW8W+LBNAWP-wU+rfHhzxxBy%VE(Dn-=dra|gz0hK55Zf&E5M(Fi@}G%2>1lJ1pFJg6l6HfTLyjv z)`4_ud)I)2(5L0#P%s8g0Ivm!11}EpkKT14|KME@{v2EZ{sO!Kd;F*aSWdHiK)ykHELUPryHc zJHSuCPr+93b5N&EwtxqL{{)W!{{;>K+rSgRe}iMdl%8y_1NHzf1$%tGj$){rT*UI&ipWqI-fsimD*>-1;I#(4{YdfF?SYQU z(0U@rW3h|#PdSdYR}=6e0dHBrTM_V92E4lh-n{|uv4Hnvz*`gW)&;zc0Z$#V3IRiC z0dHHt+Y#_u0-i_iV#A!~s0=SV;N=9o+<-SI;0+CUBLZGtz#AX%E(mza6K(hyNttNo zu4OJ@s<8I|Wt7u@N2A*BL0i=p zWmQ|0U9Vty&+u${W^|M71zF8|ZpRe}+NgmZL%(Z+H3@9Q!}gl3W(YpRZv?ZrkpAyA zDRibVW21eGa=Hy$P1~5Lr^4fH=gRR0a?dl=N!)D<>s%9+N~qO6G3WXk+I-t@KkUN$RM0|GB_2?0~I%8K?S~%%c_hht1_Z8 zOl#fpo_F>#j3h1Zqkxx2NG(qjN32_;S}bti>Lz%&xjw-bXFG6BXYJPbatV_SUz_OF zZPq@7&C$ip^g?S@vDvyT*YBEQ=zvY2QWz>>x3d;b-bl@FG2=YVW|P;xbOGWUi zjcD7{cRSSQTsdZKs--kh%f3|#3#Y#2yv>F0Cy(%~fqQvBA=JMiH&hLDFpGCn=hWwK zxN_>OvXZ&BrCNP8e z0Z#`Pfcm$~zze~J;1rPdNn|GYLy+UEyeq)VKu)cXTm@bQN@pXW^!;Nln=6X4xuU2H zPrh27#A|tqQOmn7;IYxZ|i;ix3kH~o^3$%|qsQXOmZWfiWjBh4&K@JHX5^k^)3;~jrI5>c4)L6wK6 zfmz@LQ03nlpfvgWpu&9?sE;X!vl0|#B`7MxTf^P*);Y>8tLRTTlrUV*mYPgBtl7h# zj>TzS+I_`{fwF;IS#t*3S7>gJ;9b*|RGk|52U8Nc0q4ZZ6|ZAs831oH1K?>*XE&Wi z*4>b&R7Z)&&PVEDS25NwuAiaw)=1I3)xYt!Id1lQq4Gs38C#9?H2Bl+<)sDmztf9?qgw zXHykbCaAMXbJrV|y(#?CTrJLc!SUOYwE8rdA@4-94FTuOO|A6$( zL=@lmfRcPGmrXIEY>E+;;oZXhE5p0PQ5i-Dti2|9)}DN`Jk<#;&(s9R#|qXsU5n?h z@#nr?}c;y_p!?LS2j9hKe$oeVnoVJuGck=bkyq zZ-kvYyhhr|WSbqPilz-he~k@>OqCp{6KNA{)s;8_u(j!0)vf5t%Ubq4j`YE-We-D< z$l?=oV@1vN`OUOzXjmqEmfae??QH3Y{bsLbAoWVD&{E3vTS`f)F5ciyG2Gw+|AO)uqe7ZGYB%Oy6Td+TJo;e@u@_q*dV2%) z!0i)=X0sptWIx!A_4$p2sgYnabEv;*nSE1~ZG!bEwzofMoHTkh2b=j&YQH5`i3$BR zvZlf?x;TeO*+!5X@^v@UpSGELD08tmjA0w~g5 zIpaLKCb7Ovc-056{S5_=+;6j{o8f8E<{10C=5O`S+u}2vx3w;wzs|3$)1JU*lkIM2 zCI*#i@=R*fnygdMwtXg}$VLs%b#uS!i#C}h!c4m~N|@GE+%z@1c$4|yCKfFC>bEhv zc%$8WXI#8!BOa<=&hE+^rGp!p3)XahQ;(*5qKo?>dbOOtDeA|cr#1Cy%9`V*NwyC! zQ;p9tnXS!)=kuRRSUDyuRx-=+*sIZH$M->59=rBBN+Un}8yC$`*6p#BsMbGJsZ$1? z&)f0F1vgAM1HXXx;R7(_Mwy-Fl>Dgc3_QPdc8#m|n><{fNn*Ol!`CF{;eHDsm0zel zwW7SHY+(&QYO5N{2twryQ&yZ>Ja69g;*z_bz+zkt*XhQ zAs~$6PXpgc;!h>LdedZ7((Czb`{+rb^!(e5j)U^e(P*av(8%mJm~eZf~irqD$G0`3c{?z0~#tv&$!9PAH% z1s(|g8_WfJqCW?Ndw>JLy}^NCU+_?HU+^$c!xBe;2Z2X|M}iEpMTUUKfX9PF!IQw@ zpz?VJ-%Q0(l}TH16lE)pqB1;nI!VI4y`MQMLudJV)}GRiwWr}>%Tpc2^0oxLtpQKN z^wu8ds5pC)jOCpi@TLa5l7RP{fcH|s({QkL`*Fa_=FcoI$59#DIo0t71w5r(Yi~rr z%L{np172akn;h__1-#OLR~hhX0-jpF_8ZFr-c14Twt&~(lW*2=s47XDGdhy$TU4~| zL5K$vLQOT5sz*F!yQ-Sn9?(=j&4GJV?9$`Gp+#w|U8)^G<%k|f>S<vTJ& z$GxV@n+}w3?sV>i8dkb(3O8}aZ|D=$J5vISrW2H!x#_x8xNFq3Ux1~c; zCC#Nc`57#;Dr?<&=f~=Aqq)^-B~}3iQ5-pOVzoo7g2dWL*NE5|=B)uy6y z%|?D6ht@^I5-m?E)blEZJnoh&iEdx6q^FqKs@vHze;Hpcx3M!PcNJEa!gyNG&BSLL zV{7}F_H*aJGPTj#%$`M1$e|cOY>y82M<3DAxBaOgsL|&(@_F*Kd&IIKGH&8GY*M() z!Y)6m6jB>@mO9O=KP#o5eTrSXRc|`DHh)#<|5dQC&X>Rpf?)$^Kg60W6LZTIoG$+F zSh?x&5y?)ATMV-yPtA=ke)|hDlw=dyt%xSr3GJjL^uVsG(u?Q|W;K*oQz_y2^TbU! z-RdmU)a87|AhfSeY?Y>F+OOIP@>=zzz-WT}oV+<+eSX9*-ZJMLjzrAr3bVpa)d{ZM@A;Y39&|0Z8GHKjgQbenH^s2&UM@-2@r zmhbf~KVW=*z_*;Iw`L`ZZ-2ZvZWWYfi+VL>ZlPJtC3ZPUVuFpCN%+y#na1X5H?yDB zORfB?jx?-q6G2yynPeY7la*I#ior=NW=c0vse3H{F_Rr|I7v6rWmhCcSNGG$7Ax!1 zG@p=*hGiKw{6e1Rt#LnTvxu>arCOOhf*917-n~rN+Bg3>eJSa-#`6&&g}lODbFO9oDbZU&=2R^&EFJ z!7YfwN-DjV&1>K7;p@B@`ORy$26Z_x3O4&4ka}9Bk0jVX&wj*w)a9%{VZK#E{stSy zLO=L*XZe&}dfZ?Z_*hHx+^hQh4MFy9e2mq}eRQ?)#S}!x<9U6({F>-%lYWntYSMh` zDBt#yNqD=-dck_qKFcypUQ$@!zBaMmED`JYaxz{UZ|dt6zr3V3(RVqt{iUW^`$4d= znizx*E9(@HD``~Q)k}kmHpGgSJH256NYV0CZKQwQoIEA#c)kABk8zgk=(pl#X|nrA z7C~FbsVh`QaBkJcuyq$6r*COgxZ`G3pD(w}dZSi&C~0;~Yn5=^$~_a|zfBL6$DEcC zt7{=dO?$@cg;dK|38SlZr}+Fe>0(YAS&~@_801p%dgJd}MjMTN&6TJ(i+oI6+t&?a zRm~-uWH)ZU6Q9tJ#cI}#7Rl7GKuB*3XYrj#f++nDWKVQ&+U2-v2SKBIHNkd$op_wJ zRbL<2+pe0q^~Milj`m+LA!j{Re?Dsho2>XWalzW!3G`Y2MEHA2Me zbvH9NzTZ%{4O+ijze*H3rk5;iCx(n=ikO5Ls;_V6HSdh&gwQk%sISv2glU{jOkeUL zzD6b`*x5dbusdrV;=zx#oS6B`?T6u!k)9Djpf0|$=2&%1HCtU;W{g8KT|G&;U1HVI z@>7XIqlhYtss1FS5|>|;&*=DqS19oRpJKa zC$^`_wyk@Z#a#YUG?N-lM(Zy{6Q^N`ic1;$s|`z4UdovIQl0T#OXQ66l_?5~9hc}( zWxA-RGAlOmFcko^cF;KRYfdgN&|Wx&$t$(}@WEvnHt=U=4_>Z%ipqay7o!0I{PH<_7ue2F@8!%oA_DK*RjWyrZS3T1Qi=w>WlL+#T>?03G??V?H_1o zF8BC?P7ZfsO4DOLQ@UEo7Qez?bn!MQlgkvecFc4)E8VGTy-HLP)lioh13evGZNYAI zweEJKjQwRPf7|dkp6$=)zWg*+x0QEEva9?Zqs^=8vUu%|xnJ~8{gpg@gtss}`9jrYTblNnp}n25aWSlyE%>UEF4^PiX@>WkVY&B>{+ zlk+YTq{cftDBQK$J;mue{AgatY(mUvZqQjjN9Dgm0ME zc#;@Pec&mTEIt+18HkiEJvFL_a2K}l3bJ8@kw zC&hTLu}hOX+W(9#-7M|4fqO=@-QMU3Ur|kDEKx&vu(fK_@Df=yBc4;I#0%DSv7Gi0 zoT-bcmsiF8W3C*pj{6&i_kY|Q4DWZ`4_sC$gtqscIo0p@tq1L``c z0p=SI2Gq+?iZ4zS4eSk0_q#za3aF(4bqCY~#^=wW>>u@|2F=7|d^sOV1uVN}2UJ}^ z-5gLaLLFx8oj@~yNz1q>gtBgH0;)csehFp2_94_GCIr1{|JfK{31xYEBW5er^Ptum zdwbJep$_jHZwQoqdj^!1!uwFx-pL5V+Pe_S+N*)G_CA2J_6BA9Z_A(>jL-3a_bimP z_xFIeA6$7>AU?qsQ%wVSZ6@x(4> z)&>K??K5k);9>wSO6FCW&Azm3Si``3!7I;SSW{IzwscM{C%ESDVw|ed`opOu0_L&wx3<#S zRPctve-wT>Ykw_Qv88sfeuR%|Al<&uv<9^vO}yA?7v@C}X=6 z!)O0EQI3}o6NAWqG1Bx*tlqD1PbjVGFj-)|Vl=r#jbJC(GiH`oRF&C{q!V3yg4Mg*U8toQa*=5JN7(+* z+E#GXAPvv9NVI+i)_arDVk8kYZH+{bq?xhd|8XKFx>w-R$+9r|+-Bds=D4_>k`>uo z;J=NERkHZsd`Q(|^P&85R_ZXhKhe_?eEYHWR1$aryIXNwid#P%iPm4j`fxIBjKZKw zsqs1?4Dv>GL|>2!ld7J90?1#DqYX6Pv`-L;x@YZ4sQ1UXoYa5r*~41!pWhBWo0-vA z@!ub1e=B%C--bJQ9zandUyf(uXFqp7};0( zF$z2w91R`;jsb^)r+_DcdElAgIB+6(DtG}n9-Ip1gNwj3K5jYmS1XPjr18^?La^FY{oCdA{>8^;Z0?WV$Kkk z85_&M?O+|a1EdBQ8Jx=eGEj5xt_N$tAA{`e?)?OO2V4cJFXTq>Yw#w}BQK`j7f}gw zJ2)P^3!Du847?1y2fPxz7pw#C2Umg*g7<)rfRBU!2d)Jl2RDLGf-FP!o&vRz3w6ne zN6z*bM$idw3y6%pZQy(0Kfn*c zM(|T`JNPvSFVd6xY!j%h>zcuRz>mOO@Dnf(+yR~rehyZEE#Lz1OK=6)3O)jU1-=U6 zccc|;1HS>k0edTp-_4602&RC?f<3@uFcpk}y}$=RcF>Fb5=;kGH0%Ms3bOf4g9^FYr)sZ*U~o7gQOsA9yi%09Xqi2*$wgfwzPFV?-sxK=4U$5co29D5x^v zFz_4j2vC{)k)U?E90HC8j{zrx!@%>v;ow5>IB+p|Ja_{*61)p!8GYpE;3)7J@MQ3h z;3*)Z@!nWaOS@TSAK4!y&Ld;M3E&j)3@`$+{66w1cs95OoCv-FvK&A1E_fdJ8F(?+ zpW6K;;6QLHI0c*rmVq-sW_Eis!Mnj(;7j0auo;{S?!n04Jn(q196TRH2O<&hQm_uJ z0&fGW!C!*tMr18`8Td!=3h*D`m0$~a6{tcl0v-r10Z#yzf+vG@;JM({;3eQSUWh& zJ_FW(YrvJ@TJTozC2%dc4qOj5fSTX19{dD+9Xy!w=y%{D;2*%T;2U5e_$D|Rd<$F% z{s~kYhwT>3^bd8W*y$gl?DP*&8Qyc;El;B#mZ!};EbnSZW$54=$9pv3{W;)i8xQL? zo!rv8&2$tSG6lSo1KzBFH!t9^A%}Cz797q$Hji*Twu^8)HbQW`p^nPX0z1c>8u0E3 zc=rc9=6pJPPY1l00v3E+9ye|V@Dmkom%gjb+Z|{J& zZ@?QE@R(`n>gnnwtES)nj*35{PFP)86)~WeInc&a!8ec|RN<4+5 zmaC*>mf@-8Lt66ExG_KM+^Q0@%aR(faz4w}k!?kA0u0|MjGE_8oO)v%^Y_fFQi$FF z_X9V92Z4V9M}dC>^-phu3WvI`YyuQz6QC$N*UIt~@s=l{xn)6SsRau*GDqiUFJJ{s z+xgyZkw7#GLbzY#2zcUmC5HQXcVcK7p6_NL?+yry;k@E`vrE|-K#{n!vT$+yt+G(J z5Ax9l5o*GQWuZEGq9_#3uqgTru%g%tr0DZl>MzVb-af$_Xr4zfP}vrRGGr*fER z%1)870;Xp6W3^JOh&_8X(UWA>^hU|0c^2+yymnp;+7#V^l0o9~ho zwLP7ZVlCmXMEgWCaC0Rn`MRBY$@y)lE?E_ij{oP`DETG0uuA&#CU#=ci}A~jj2ZL=Ai)U($l`TF8=-bv;Wzl{KIzY)b ze1u{lc73C;tM5eNAMcoqr$+S5R&)`n%3d6lOs@m=o$J9oa0U2%@CH!vr4bn`TTxcF zqB6WT_m*6rXUl7sEoU&KEZ`t{$(JF@7z@JN;$zb|CZ{O9p$ASqe|fhg6D~zZz!P7W zOgLp+4=;Q)h}`H8hj3MXtHf%ns>;f1zNK#Cr;R{Zl8l5kfPhuDpGz9_U?oaH;R#D& zC9$e7t^$<<-w3Kl>!+Yf$(zBWK-S}!^O4wR+DJiTQC13~tQ16LcpI^8d7B*NmzsVW zYl|1AkDi!W&0bU-m&h_=mvAPevu0LFidj;mqY2q;cy1m|veNXjbS(|#O`7H=NQ`OG zHLOo%rvMURt3;WZC`vo{6Bgwnf~6?aB_mPp4obA2a^1}}K2$H28`;qsiK=fCrGNOW zk){6?9445g3C|xTlJ=LI{{A4{C6TVl5N9R$sW3{s^doqeIQ|`oOX0o~+!wqHl=pXo z!@zsMJn&vniR|Z~{JbB$6l95=*{6i%S4Qj_ZnR<-WyLPa)>|#F5qFl?p7_2!W8JA- zb-04Wl{{CS$Quc%2QQ^G5Hx^ zwwvd4m!*D&t;DpfaEH_KYJ{YJVFj1TQP+UVQP+YJIz6tY5yHBz$ON9(feL}fv#n4? zS)q!`Fsq;~PkF25A=GGdrnX>8ID6XGT}g>%gQhm6bhe)wm!7IJwPp0!%msTSq|K&T zCgr!dl+Q#ue4D6cOD(~aUe0$dHUi)myH$RcB-$C|EV^;neEV^Q`rSIf)g+49h1vd66d%g^QnX`@Hk zrY9hKVIOKhgSB5Lx|Pm8AWhqJu&au^a2;nTJQ>BXjI<*al-*Ccp5h80*(f)%a}-xu zyLL=lU^bc0Eu}$TRa;V1QI$KprmU(M;xJRg!Fm#-j7)>Y%C}Pa?9{1tt4C=;E!Whk z)#klIsJvn7RJ$HC2fBo>Pn|l$j1x;+G58C+Rxc zNdJl=(Zn71)B=jJ^sXaO^Mqnzb!Yv);4%hMd=I{gvr& zgi2X{3K7pHFm1*Urq&*%8h+6ZW?i$m+3Zr3HHW5Ii+P{8l^AYQUGqB4D4X+BhMf?mwzPUZ5?bAwCZXlkGQo1>&v=++SoWsy zglqj<8Rk(K-vQMT@h&(9d=DHCZUZNPAAlEtjbH@a4lVgok#HV& z6g=^D$w+#;fqGURr$3k!lAhei&Y@g)hNb7%@JEfBR$Wp&uegdlZ(do=?DCljnV-$` z{BPn-g7GVFl4CIUFGz0ELt6@nvau-2_R%HQru}rIx-W6WLL)!kOm$X8S_M~*cL;Zl z^(0sCV|c58O3`E#L3;KhXa)2Mp$PKb9KpNy!VzTEyL~of@>uXfIe%s8Y@_eeB$WhR z>bqYpm1_D%;gNbvou$GuJ5WpW58&QBe+H_Z^Er4R_ywr&e+lZNlW}h&UX+b^QC3wg zPpWEpQq``6LC3w;-kP33HCP*Q<*AL4ZR%B4C`ZG)mMghXPT-9KpIE5q+58aLz!ff3 zd^f{*_mAX4$uF;+uR^)3uz1nDisI60lL5)oB&Hhyy+cV+d3x>aQZr>{eYpo%V@pwszhPxKf=QNH$qY{{{u>x-+&S(T5E)v3hKYpKnYX( zidtccvceQ)+XR-UHi6}JCrmnRwG^9XXM!Lz69g$8x}Gb!AcreZTndy-ICZH(b5baE z`EH~lA0!v#X|u~qoecj=5gvfls%Ca2!X)L4k(Fr>CJIYo4GU{`grI-U03|Hu@)%)d zf=YQD+hC4d$p#fKY)j#UCCUm*REF2=-u5=zEL&c8!rJMSw-S$&3(QYNU8OvgU}Hi8 z^W8`TwB=Q57nmMEu}q3104@=BCBdCZZTlb?32b+2n%r%cOK{$b?hcP4G?$3C?$; zG~AS2aN||D`}yTAr?oDm5*CWW6;4$ga$lfX4{nC{O}88k7KrfD*tkP~m2(q7lISKmekw07PY& zy>2aU1NJSiyHs(&99x;6g>6e|Pm<&^$;FBmWA!rCzAFrMBs}fU-HVwtb_=ZJ5>qpx zJBiitKD^hk?`9dSf;M_Z+2|FO;cdm1yFVJm{|HVSn|5+#8SB@<41zBnZ($Al6T>WD{><{a&vVkcJNQ`mW3&(iAi*eRWMbscZ6Vx}p?_ylZ-^REo8{?ufycTR( zUaO-z#CW_YH=f@w*2Beo|D<}YhPRB5;h0b5OW`?Vva6Wy#}y03d}ycG|03?Sc1v+@ zI*=9f{_dzs28tN>!fu%=+lp1&PC?;)+ge8QysAmN&ss-Iwb9 z;{`gzr61#IIkZwcH*)$Vl=R2(>HlygFE`Ymri?%Vl?j*h83ZWY$no8ri2aY+6(O;Q zEWEw3K9R&EDK;c-#g?feC+=n}9q4K|W2wS5grssthb%zz!}Md2Ahd z7G9s>BC!#rxCobBoK+Xm57#q<~@cNM5#y_z_-iXqA>hNukfCTQOF zHs7#3%C2a0PFEcmC;62NhF2kD1?-x{Ht$I~UfVlzgAM6h)ze}7=PC%7J*nzSLyhC! zbwBHLW5;R|q|qXE=qMIcO#Xx`+z}-=vU3Sn7qyR5=T%gfnTopvoWyjYKN=ma!TR)b zYfDPXs_l%YuKF*gCHSi_Nt(NZlO2C4Qc^ghpo-3ApvIc&z=Oc$plWF>Yl%z(uLUmz zuLJdO^`N92$6qUDQC7;LGQ3UhZEsV(w>-t%9ItQRYj4ZS8GYrMV;}o_+sn7Ny~UA+ zw8chUQdw0ov#NN0?hH!2>fFN@jy(Q|OXklmsj8^1m{F5kMXjy4s$|wBrDZi0wN=%* zWeY3eRp$;LGW3#pv!@TizW;7WW$AS9vrqF%D&|)XnO%Co?Z5D})laIIH>0e$X2{T? z1krJZliYKrm*nKfCDtJ3Isom${!;TwqtXv1*8b0iVVaF@;aNjb!s`H3Z=AW7})6n#-|Ma5wY zMe{XfTc&3~`L)HKUM_JoB*Ew1u$P*$mAk@v@P+#h@9eV)x7q#A_j$L#XA@nx+|Bq5 z;hnFWG2w4X$5T^|;x0MupZ6x2p{T^a$S`&`=*}gxd+@DN%YYO1S=E_THpa03e$j<5 z&?F1{tQ3)&lIU~qz~{L0xpya@_b{&1UXWR|X}|M2#}9Q#eD0Uh9`kzyK0j{U>9FN+ zn6r$lA8=PlBcJBn*4byHA1S#BK4%3!zvX<+>g2Peoti=v7&CYKId69Mnequci9YuU zd~S6v`*iYIDxR7$jl05}(lDPX0R*mt1ao*!O&OFB=Dh=-_mgGJ-kp3_K9`#E40q}A z=2!!TK-lMfjGdLRrL{7B1D`ct!*UeQQ|Fh>FJbn!HR8yq|JFB_QxR}vCox^@i^bHG z0o-Nf<8Nj?&^bINt){f_-cJ|%29&DHGW&XApH(iWrd(>?vf=tgS$B8#d4FSPJ$@+7 z$m|#Re7o~`zfL}@j7Uv+g1i3if#?60MD8Rx?A(hVewYsks5Q>#1B}m#Lz?2)mkIxc zY89zwr!G1A^PQKy-}x`TXY90K!T*Z`gKufmcbNk_`K%HyHRU1h3gIpLyiUTE<-}Yf zm*>=!&9HqWB9yC~pWeci-nj0*dLk#vIbg=fjMvA>0+_Tfb=iRp;0^+}Keq(U<9AfzOXQ zpAW<5j;ZMg<7x$WnbV67UDw%X)o4;vM&Pp_<|6{?kIv^KI{B>hoY{pH*K#UI{)A4}8AY`8>Rn&&L^8-G^DT z5{R(`pN|WCe$)AUTqmD38k3qL{luZS;`u>Ia)6P>PI`jRCj>tCNaH2ugib!Iy_K4x zlqjFSs{e|Ho2bMbV3e_wSc04w_&mhH=L8C)Kgt3HDw__`+4vGBkxb(s;u%qaQwM|ihuz{jg=KD zj+#rLxTXohRZuor+@h{*3d$B-TuKYWB|@i7%hGn68nfND$;ui^E1R6MooTGBG_9<$ z87<1+`+d&m9xnG@kYfJd|LgbqJ$iY+pU?T6&)Jt}J7>JHj7`1NG2Y8E5)WT}@fRMg zdmhjHlXslsln!Sfu39(2u+3t5f|uoZ<;!I`=Co6MSe~eKm}4%>@rJ!BmgBuFCn#U& zP}DK^y=DwejJWyu}i!<61*(im9Oixv-QHmIdR^WCn+7yBV74x zHKvmPd%?$;vVmtvMngZ{4dWLxLU~ ze;Gnr=%;9=o?%T~EHaeNE+m0EJkm{AUD>>qgySiXevoj%ZCdVXIq=?JL0P48u}pko z#23Zd*HkY_v6p0-m*jdQVd(CqGYyvgZM`MjQ9X*E)gigpG2WN(x9!JYSN2RZ>_M?S z4RLNgx5-kzitv}E^XbaUMDHBSRys~(q^sPsjO86-IZIh){*>aqIemDhB1hTb*v+s; zTyrxj6i!-|4leePiV$>$$aHn&n6R(_iby;yW2y&V?AvKC{k6Z9dFRherNf!0D}QDf zcA8YX8J1`M%u>F(im%4^AGy~%&a;({`?bR?V|j>Jo(0RgZWKZC8hp@l*H)!`v9iNW zu$a#mJ{}O|9agT=i9=5G2jg+E2@4B&h{P4vtB`OLBU)}97O#T+Z71-TVLkfH1-re& zx>V_GMcT!%b%_ZJi&UuN60aO{C|_J?X)4%+KmP3@Z_9I(&bS`R5W)>OCGsSX|m*siN*O_AZxtKTJ z^tN2AbUwgeSDl|{*fOy^&nq`dlrOe=M9KR2(Ry^xo^hV9ba++bvRq==U1GV!%kl!{ zi{lrM0bjqk*xPa`T>Nd3Zk87q%WsM01zwiX;Nfct&EnYmYN4m*omb{cY@l5hd%2J!3a}Tjq%1Z%cBEbA_>-E|x32EMKO4J%PW>-D^f~#O)T( ze6CVDcez=<%vfF~mM`r zjP#E4Lb$ZP7OpXtKM>0`UX~XrUw!eHhhOZNySy!5--bFKzg!k#-&PU2mj*7;|gQBmsq~S%knbl z`P(={VU76v)Y~5Mj`NjD$NetoGGlp+SYGC3`6}g$S7EfA_&k%PjcG_ib@m*wTk7khMCUU=S}hrKOdt#sV)IV?ApE5-71FUxhxSNm~Zp>+6|)fMMD z!`6u9IxovBm9O^m8Px@4;oc*yG?wod%PYMsuU5VW;V*Nehhyy^$51n8<8*BO>9map@&e1q~e0e@M7pT1yk^0s`V(pl$b`37Top;*2F zmRrx~Z&JSU`4_+J^%H;fw!BX1xVMy>jO81}@=e;Zejb+%57v6+%XNi9i9YU!4@b45 z3JdyHCsY&`SraBi>-8n{Qn`Gl9;ct~$Hh&Hx5v$#4V9Ras|=5u6+bg0er6o?9h2Mh z0Ig)LW_MTP%Bt=`8?{yu^wjbZLEkE3g)ic|hZ2_&Z=b4SBZ>4iT8cHasM?s8bgSZbK0(lzd$RoBZwy>B2fcXwntNLebC zq`dM%G>KT3FsHmMuX1`x(V}$q{)sAMS9NbyF%Sb+xl_(^^AViS;-bD=k-10DBU4ot zQN5)Y+R@e(o$9Sh*xiRm=~CCd*0xf0H4MCxRaxVlSTlESQI%&BUCm>H>vMUn>_d$; z1oc%{*U}ANtcd0rp9)?9*6S$rgeKR+Ggh2~BoY_TH6(>_<2B~zPL=k!|eG+vuD)6Z` zN+@QeH6atLoO{NEose!$QFHT3N~7@R#Hf)j8>#M<-o7|)m}w9RRd{!#hyg&S65rR& zaC4koq+U;D_Zc@Dwj9+(1vOPA&LxflEL&buWW~9Qii-*shy&Xdme4RI&t5`T_L|Dl zk^+R7g%z^P=ea3l#3$lEvnPRu^mtaCR#a42v5iDB*!yGPELweu~**JX$<Bd~d?sg1R9UKBTdfwT zRVF4TtHE5nx2z`DVj-SJl#;9&Cb3Y>!ELUghCtVJL@!KblEePoWO-anoU5xy&?_y8 zMQ=|W3zJjhC)*v_NjYg#9f|ST@xzCyk&%gZ^-90lzbkxKbk#yKCylK~a9*BNk)al= zn%*&G6A?!;ii|U`#IffG_5q;K8K5o8P?hj1DN>p^499x9(E({p|<+Ygu}GEqk0ctIszt8ows@~ zpS6^|o~yAi&y*G$wCnwHH>H>iOgvPJP+G0uGj-{yCJVJ;F6CB{a_jk-rz&q`vg z3xBk=~?$PvnEPEd+1%3562XU3bD{quGh z5BJykc+Sg>ZLVt|3U~yCwYqeqC>z&PTuV2&56|>t&p0b=qWf!ol!t}m>S9pe%<`39-ptO0&JNLQ z%N}o*?uAYypUdFrhMzBcA3{D?bg0L}S9${x&;(@mExJ#h(1)r_pI2Au% z_M(unx8mu>^Oq_$ytL&zey2hHG@nek9lq@GX4>n}`)rO@Y%6{&kBB_Hri&ksw(^gc z?~9=GV7}ICEC0@i^Y_p>yFlx~o6q$2fm%zBLOdr zBm62X<~2UtDp*w5`IuP+r6)Hsy`;J(uQW2tSyNb2fx!;1v`${e~azW&fT|~)g2`M>= zc3A0viLAt_)wwfpi>hK#b?(AZL!;w!OUesMYYL0tKRY9G$V>~7w1&DWaY1FJ#V;BD z=h=zopxfY!=ui7wJ;M8PyirGjZeWQe)nmuv_Gv*8uj%!MV*@*=7(EH!we<*(YRhJR zYDHmY85a2K7XB+*Wn%0mcYIMCx>-$Vfq^;}s!c zV1%HWM1-+rNH$7UTwJmBqeKTyi#j@@q{Zhz%+AoyN=VOiOt)udu~ntUPvO}xE5r&6 z?}J3=q@<@!w$8=bC+jbv2c3e$)Ic`H2 z4skB2EE-aCku?!Ml75R1PaD-2A^!ryXTwGcE(sDd?O9nPV^PY1;hc;x+A8W4ux9YY zk&&H=?-q2*vXW=x;uWPA7(O3HGNvXb*;6v``nFDL8z~Kgb6;1!r~rZ?aY8aNJv~KP zRwP8M+6xODc~0EE$**x1p*^9FrB&$qLk(5}4-H+9vQZ|g z!1=vk#`N@LEbI$??m{WKf{b-lh{PG`nTdFLC@{P?BB4%B!$~fbr4$^g>4|ow5y@G+$#N|Mr|$wDb+RCMJ+dRPoh0G~=&*vB*ck1j(VjTGOe28N&Sa&!+x*{DRGsC;G+ zrrE3J!s^G|O+o|9Nx`McQJg%A9LCJd3bTDYVAE5p9$B4v$DDh%pPfIV79U|N`IYaU z|G@HpJ~ZR>L)OpzN*?_f+Y2dq?A$^2ckXj!ANy&`b8$a3J*PJ-4YS>NUCE9gD z9A5>kv+@5uwov5ZXM>+T>do7_VeXo z(;h3CR}xhaT$p%5{aSFByN=L(hEicJPC^d{*)^&aAt;sJ{Dy z*Oz2ImfY=>!T63-$#?tB{PkS_s_cq=wi8>fa=wQ5fRy~1hofKrF5saPgH|OT8XY-e z4Bp~FUWeJr76$o!aP77mhWLN7{nV)k-oY&hC0}x8<+O+YaOqz{Z(6nZj`#a#VLK%y zkBfSI!oUyje)V57jxWgb`+A^d{iNhkOP>7xg7aRU)N}6T2R>PIehF5zz?d9n`{k>> z^PlQ^c<;hnF1aN1+)t6Nl}i4PBUd&&Kll6#-h1%bbH;3*eh{l8D)}9+pSQZ?mtV)- zU{Bn1^XwDPVyT9%v|}~x{O=RHOU}Py$=kc`Km0hJoO7$4Fx#brz6kvLmv6kd=hDBt zGwwf|aY?yJ$y4TDdDE>|HiqB2{rRsp-uNXd&!foRnc@ciFOL`04+B;)!Gb#k<~0epQbR zW0SY6yLHy*J#KCce{F|a@C^Dn-yXc|)e$u-wjKHAsWa0CqCQ}`2FSBYzTCEOg5!f2PvN3PoQM9s$Q@5=h+j1S)Y*Sr0&?VQqIwkiI?Co6C7_Vh!;52Sp4 z;75GH)tz<%o;$qcv+mZi#%E%K7LK~?Jw!g7@{*=;y+x@~{!rPZhe)Zm63;y}% zGfvH1-0!DVL-wDAC(}y)>J@L-z7_PrpI6@h_NcL=kK+>mb0zQc=o1+?Cd7Pu^L>qb z%JcijVXI$U>xJ1Ke=hu!y+@AUf9;>XkDlc{k>C4)30Izyw)U-V0q_5aH&do6`Nh|L zkT7KLuwVBztvtMCX~@viC3e4xtC_|Fz$?o_QNy8`r-}X^+i6|MWVxBUbV?J?HJYCG)(VBTwzJaoU`n zi2utDxKH67EblfudemRMnA`wNve2 zp$d(=lUAhi4(p^DR^ARZ$M%b=fbFr9QK_t`WOMAKmBRda#YLr+owULgBs<^NF>^~h zRDs*6E--?HvpbodvVz5(v>^2@rXyzBuPbTFq8=ao9DYbrZidy%f1>Q47lZpr#zM5>iJRDpsHbvx};0e6En|AU!HVO0sb zW@WXLl@s~Td$XOiQeC*v@xO}`GP1C6LFY#=YBVw;!2;DrZOM8|@oHEAB{a+N;{msyx2**%34C$E5(*GapW#o83No6F@VP)(1y2*iR=DaoUHqRR{{JA@Q}oUhJWKFw!CvD39Pxjy z_&ZN9QuKNY_7UtW7$yGuiT^)}zy5*)L~o$r`GSK42aEq9;(w_4yFf5n^kM{u2@V&G z75^i||48vSN^rF3jS(Cxc%k4p@jqVtUnKq}2*wG<3r-YF5KI)b3r-T8ESMyiEI37Q zs$hy>s$iO6x*)fH=P^w%Q!q=ATf+0m5u7eKLvW_xEWz1=7YpVJULts@phIwuV4h&U zeU3swkL_Q7KS9G3}J304a_ z1#1Ks3N8{{EVxAQa=|MEmkKTuyi)Kg!CHyua*6-d68}1puaJCLDY!~-wcs^^^@7(5 zHVCc}Tr2n|!RrLCmwdQE@J7L#1lI|!7ra^U7QqdIw+h}i1CO_GY?Sj&g0~CaA$X_Y zU0kvS$K8VW2;M8WS@iA`{IlTwf)7Z3{YC1*7Lh+FxK;2W!G{GO5qwnqKPLFN;1hz| z1fLXqO7LmHXGU1HjQ_I|{$B;36WlKNyx9nuS$~uGHA*?XBKWH4 z?UeemD^cseCi<@r*ZKcOxW?UrZ}!pWf0y&O1ow#De+a%U_>SOSN$0zQ?@2iC3w|Ja z9}0dX__1J<;6DXF5&W0nzCK}bOu?sup9y|0?PI@$`-R|_f?o+97@^zmLBX%3{v8tk zhb5lh2!1R0o!}9{?*)Gl{I}py!5;BNcTV6Zvt$p9FsvY!>`Q@K;Iq3Gr`0 z-35b0?s}y*M9zCiIH!nS=x{$3g_F+%^gQKs@qdQk9|X-j zK*Bjo@NB_eg69aDd4Tvo={!LE^%MN<^8g+HArjtD!3zYVB|l;WhY1cBH1hyC_nHSt zyv7KQ6}(VzoZxstuX%vPBVKT#V1i(xpj~j1;AFuh!DPWHf>Q-k1XBgm1k(jG1g8mR z3T6pr3+4z;7n~tDQ*f5xY{82Ka|JIEyj0L3I7cu~&}$wb@*=^xg7XB61xp0y3oZ~W z6)Y1h7pxGhlz#Ox!79OOL8s`|2rd*{B=upjlmOK^|GyX|>^?myp^@ZJ-AU$FD@0B!$MvG-H1hyC|3UEIf=2~^6#S3ie+7>T9vA#c@Mpnh z!CwS_6+9vN?wSV#ARBt)q^lKTScGAGAz!;j88+B3zW%RW#~H>IDzuCrS7?@PSgv7( zhVf&F-YN!8!t$G!VS^2e1?#U;InKxu4NEaB+pt{23JohY%n7FLEj6+ghOIGdone~{ z+iciY!?uBGd)tky(Xicy?KP~)u>FP|HtZ;vw%2TA0k|{QTh~9sA`I(g7(a#4dV>v% zHEf(=iH4;ZmTg$BVTFd38pf4Kbr?$xTVdE5!`2zL$*|3aZ8dD0VcQLBG;FtFdkt$c zY`ij{(7`D!^O@?hYY^!104BKv4qhY%Z+iO^pVfzg`Y}ir5nhguU`*f0j zhD8|G%djZJ1{)S@*f_%y4NEaB+pt{23JohY%xTzC!&Vr!#;|pUZ8B`LVOtH`X4rPa z8V%cR*j~e$4BKzmVZ)9Z)@)b+-WQboGc3ZeUWP>(HrTLO!^RnwXjqD2*@opBR%lqM zVNS!A8n(i)HHNJ-Y?EP|4cltiHp8|X)@ayn!}c21WY~Vg4jXpVux7&ox|#elEW)r} zhD8}R*sxf`#u=7qSc+lUhUFSoXjrLXPQ#WOw!*MAhOIMflVO_;+iKW0u*s_JZ#S|= z!*(0C*RUqT_8WHCu%m`G8-_hsUG>kf2*a>fr1U=6s8IBCVhGEwn(OYWR3b6jV{{x$>*g7NIWY}gf-Hx^zwhaugqM}#c4mL-zM&r8M zu)T&g8MfcB!-gF-tQo9G*$csgG#ze)VZ98CGHfuIj(x0QCAFTSUsFsETl4O?N@8pGBZw#l%~hHW)$n_=4xYcy=PVS5d0GHkzLhYdSw zShHaPcw1ZNT8Lp0hV?Qm%CNzP#TquwutdXB49hkw*RVpvN)2-ww$!i{hOIGdone~{ z+iciY!?qc=-LOW(c7y4fv)8aD!}c3?*s!C9HG}C~3&30Il7EIp7}m?MD8mLD7Hb$+ z_|;Yt4NEaB+pt{23JohY%xTzC!&Vr!#;|pUZ8B`LVOtH`X4rPa8V%cR*j~e$4BKzm zVZ)9Z)@)b+-sG43Gc3ZeUWP>(HrTLO!^VN>vP?8A#kgi0mTOp{VWoyS4O?p13d7bI zw$89khHW-%t6|#=+iqB+VY|Vk{u$O}T=yGx*s!C9H5(RyFEJ$l42v+Vmtj$c4K^&+ zuyKYZ8kS;Mwqd!36&hA*nA5POhOIDc4VX^vIwRX;*k;4F8n(@_?S?fPw%f41hBX}1m9W|`kumC)Sll(I*!mwV3MHx2OFn$TB{f;v%(XbT5vJKj(Xicy?KP~)u>FP|HteWj&4vZwE})K;+KaLHZp;O( z;jh%&o3ZgK_T!A0wl;Oc0SX&(!mvkYV1_wQZ65xncEL`I_%IqeFpD`V*C@pYXZVnF zF#evc*hu{44M*QQcgDe`Sh?a4j_zn5w1tav>wEmZ#P33nP1EBbqfRt_he*_6)8Dc4 z>-FSvyyRO`z!&G#zKaaN$FbTEuZxWh=a!0R;4ADqDogE)@tPpM01Xb`fWY|S zYK8gg9*b8Xa9j*}ZE+k2S%yvL1@n`~o0i^S_bp%~&i4SLf&TzvXhZC{{KZURdVfaB zf~*0sL>6of7N)jmtvei2pNb-H-U&C9b!zj@cxFCIy?N(E=7&{>h18var~%lG^H6ta z)VMY0a3}muCY%L!N8fsjHY2 zdLRmrXm`1RM4SqBCgD zV4DR#(ec!D4MBRj6$hENZwF?@_SyLyOb!`$HQA>!aPf zf`BjgLrRzXtD4dcLvd3*5>c+qXX~egnX4si=&tQ_&qfR??d8s@C0H6@On9W&zBk-b z=jn1D3pKaR%jbxg!1Q=lhR;!$Oyd_ow$m?x>_H9y&jo%BWTiL+JRgWgP&*d*1CaTG zuPaq$V6Uqy1DUQ2WI?p7`s85ips*m-?6lr-Bf~euq8A}dDos><>H%~E4S_Em>{a(^ zXx*oN&I=lH4%A&9U^&CYAp{QfsrwI|f{N1M_tJsDx_zPb_Wcd1`|DHp9U4sav7XvZ z9@T9!Ywrg^}f$BGP`?}Q~>ryk7HkN<712$@c8?X`a%K_-&4#h&{yMC0`9gBlQ>e0HF zZ0rTk4t*-;yXBwJW%*CF_{(;7v~EX$O3Kke+|&3NBxc`hlroGoqAzW>oKa|#aA`(k zJA%d*29Ac8dO#^52OFk@)Y~M=y%6QPeF4r>;f|iQ!SBBxXjbpns;F$v5c*_4jCy|p zR*?m4xgple2%2@jtCffHW;>2h`!$bL%vT%cGqNbSvVHLI?3}qmfaj=9Kdj&H0ncf> z4NqKxl`~Y|%m92G(s~cLw_dhProgRbwr;+z293VktwEmwZ%1HAy^9%aj%h{pmwCTr~5rJ-S3eFSqxRnCJ76&t}?PZBim|Zj~W@~#?#dNNE#tWztrXf zu#2uHEcB@)+u8_@SXMo{J9}8&4jUUQdI1?IF)eCt$Ot&`wr*;FfM##}BCLM+%i{1o zNOBAbz|XybbrTsne(QPsJO@eop-wV>Cu?9CRao0*v1(=v#>e4n3iLah83)P95`@Q~ z80Qu;AVQYJnE01E_^aw_+)y})3Sr2hdYo6 zMaxk66;lITy9FIs_i3Or2(uncis7k~rO$!8?b0uVYkQ^tSGZr~F-4-EZunh_-^ofp zGw=Vh=yMSx9xX-x1I{v(O#flrS@Mj3qR8V>vOGuQRVAMYvN9n zw9_A|z%fh~)@Iu<(jIO|3aJmrlq2*hzwwx&SvBL(54>tS*pL%a_p(jRV?qY8gYd_+ zdC)HQDV*ChW0*!ryd=W&eAcSE9e#(>8|)#kTAYet{*AfK^4DvXW5_ibHr2iO)u$eT z`!Giu$@uwqh|9SueWYl25r zqaW(LgWt)j+LRh>CfLh5HH?AyIHa37jG@iU#eZiv!^?G!=IX+HAx8Z8!on(b*~YP4 zOEHaCQjXlN;k-P(w9t&)ZUZ`&NEfl&EPjVu8ki5Pw!B{2Ch}BNL*@XL36@JyU% z0y(qF0uBV`051g2044!v0@HxAfV?`G4J-y;46FoR0$d8b6u1Id0K67h2)q+m1mvha z7x*l29`Ge#36SH{d?3pUGc(mpV!(AXA=Ax-EQk$DJ>LwrQiRFuzZaT>sriBa_K14> zk)8IV@Pw9u8v+M7xBnVd{XpHa1Kk!4Yp@?U5w%h~A5jhG=%I5kn-6^v7oSHDoyz*} zht_onW8{$rv@6^(2=Q0*QdOA)2c=@ldUVh~(Bg1QN?%0O9mM>4f8DbE-9lHdV#qoB zPeiR(f!L2+n|kaTT*e-&UD_3YueuW64>wE<+o=|XJ~SJ_%x%ayHn%=}`LbhH?THgh zyMvs#3Oi#OdX0=P4ig2AN4S8(t0OO(4sU}hKPvUkDxWz1J#|32y1OJ9XfTe zR!qdNt92Ltj#q3jN+MpdXs|fNV!=i$HX3Y#Vi+Dp7H1ebPLZ)>FH(9e*>Q@o{xZa_ z7UyE46hmFaQmT~Y8rdAfP~$|e7;KEv^VPGI!nGG%T@By!8sTHOdk$js!`4IW!&$XD zTHU~jFPvXf?UcJO>{u9vj{_Y`56krhf^zpb4Ygd~HCRz8X)&WP#cm}S=_wfDDd1X% zt-M6z`rlnJ%HurN<2(iig2P+&eI2kn|^T?BV0 z?pa~cp{2LfeoWVBE`C~fji$$J=^AmqYa5{Pni9V}DUwsRq97GVW? zBbIk1kSV$h$lkIF7zuO&S+f@c*-I`0P5~|fW&tk;<^Y!hx#03LpaY26eeFEpDquBm zHE=nw9=I9U0Ne^(1AGR!7T5^94)`kY2H+kbu0v`+1KtGu7PuaG1b7ROJ;Medu8XW& zfw;c0HUfJBvGQpNjVswBoKJx+kgf_P=8 z`h;L!%PAIQodd=`A=v6IEXW!H#`Yg<#RvtH-t`8mgn65)NQ z6pZ^{fQ9Dx-R_zLB_cS>+7QQ5h=JwfxIYv9LP(DCx9IPakoOX_7rek zkYu_b$@Fb`E!&54E#pK=%h@~ zF6}j~&2aZDE&Az(AFFE{O^eUkMvnYHDlN7wmd_#}81?_hB48Xni{N==HRJsPFdX~K7m{Fkvr|j_`!_pip6Lg(;8~R9%7w` zU|4Wn)u^f&i^=mknX?PdWZjF8GZ*T9kKZr&c@`i2P>0uZ?G)c6-GW^6WGK5I(%-e3 zB>v9+t_S97oWgOH3(_vbuc*WOX|LWObW^pRR6Xy1J3+>ZWC^Zd%6bre&;dTE^<8Wvp&m z#_FbJtZrJSs#_Ru=jq1@b;nQVlRDh^n`o;$)~}`~#{7n9e(LVX5!__N9TD6$u^mcM zHwUNL>OLD?_fwd2h|Bw@qw9|Mbe`+7uy1tTu}G)BlPJmqYH+uMrgqxU%uk@7JkeIg zJ#qriTGjlb!E*JJzIw;|;mWbLt={n{+&p_n`eD)BjbD4cqn-`Yx{pJ8NA_2py?xkD z?|246?yW=TO-5cFw|)!6)k*Ryj)&`3H|HzGN}~TT&Fm35ug(?uAyhf$!@q$Hey- z3JbDgjcl}$scIS`y&GQgu{YyduHN3f9M7wvRNWWTQS&4Wx9g5I1TO#d1cDip+UyL# z%OsZ`dZTW9Kp-UQG`+Z8@&s;sdsv@XvAF?P)hF zp!<{KNT`)kS8KDzdT6_i*$-$%^_OX44P|mRiTuI0td$a+>>gVh64E&IyI4hak5GihZd*y7z9t;dp{Z=HVnwVOgCF1&I|{GMhMovK>4H?n^CKCS>;PYo?8Jp1+s@kR!34aCjGezQZP zqY)*MxNmMqslSb}X??hFFz5#-e;c+902vS%kO0o$-z9}K^@wX zDuXSV1N% zPCIx6sjwVnMP&t*Y->C`bBt}t-^TJ}x*p8?(_7wQvAv^AVU>BuBgBL?Q^E@IvWz=- z@KuPvw7h48LzPa7n`PWQhl~gAzpCRDFUy<<_}f0z&epwicb)HTnN{20#*G+V z_QDLqb%#2_yezZF^SALXHQ6bzKlHq}W!}c~w?(1qpQ)@+*A>REV);~MnU54=pc5(f zx~hi^ymv7VKZc+sAgT{C64YADI)a~(a1vm>>Mn_i#@S|f$*|!#V_wpizY2?n9PTQ(8$F7^+-L=);ELY_PHH-Yz2G;%{S~@F+g}I3fwfR_*Mt;{cW5X zx#HZ@uzIoF)64Q%$`@~kz@v4?p_mQcme2OGe3r5NtXMwF%QCui#D`bYR5@OFaJ9GP zbCk~Y2%5bEk6y;|L9yJ+%ksI*%aM@!+wR9- zM9DgyJ3imra&M)x2@0-$EYes`7R!-dmis7Qto22)dT3#WKi;I~y(LPZ*y6v0isgYy0p~CjwUfR)< zPNFZ{D0_U^5H~FPx9&QR9lg!l?{RT@-|-CY_dbPtLwnly&{c|d?j7%Nl$2FE9N5-6 zC9m3P=d$eFftvo+JCv=GqxO@xXH0CB2e1|63Q~E|ucQ4Ak9d>mclhE0gr zuXua(lqo6;^5Bl*iE2mjjN8#kNt<_{bW_Csf*(Y;I(+OXzM?;N zV20j>95HdQdy4b1qxb>H3q*%{JmRcquN}ol`r%RuY{=4joNB7{E-uV-=0z>mQvDLr{A|1of*%j&UtCyRoLrVlY3du8w?Su%=ph35( z?X}e(1S0<)ht6N;X}!LHw&K^b1UFsrPy$M2k*Q19{M(O&#gp>v7owHZIym=(CmHM8-Q@jp>y*l zrKWC6D0^;~m~`OO@zyNVznB$Tp|@t%I)S<6TfH+6IVvzd;FFnuW~ILTWlxy zjK?;2xfS{Iht9-(YV59AQ;IzsagKNX#)aD=+345}o_)K`U}{N0RYi5hTxaBf%z=^V zl}>D?c{#QVi%h_M?UK@>Dr=t~R-P_cRM`2bSp}shH!@xC^_k_i*XQ(v+=IV*(-Ix2Adot=7=P2U$44)YjUEn5)ouomnd4*J&W8_!NhNW> z$>HXbo{`PX-&Kes5yMG^eGi(otI8{joP_MGjvRnz2m^ClvOUwaC#k-uua2}Y zuEcYQ>d4_kqjUMpfo19T%%Km=R&>&A8`T7+3nGUkpWL|bGD=QMNXbdG!%7ECWF=0m z&Yj`5H*CCXKUetA&WIc`(?Tq*p{5#hE6K{j{F7Ip-&$Ly`}cran{^^I ztpc}CU4k$O^bYW0MrPSggko!WT;X(6d&1)}OoiSE9&g`hk{>{%y zNY8Xkw`XRtoutN3;n^^BMuFknE+#2CEi0Rwwd3m2ZU1!Km<$Xbg;Y4O?R$d9j_i)< zF<3$*Fg(6(_pxKg)s&a#l@%2Z;kKDWYA(W6cwl(aZ}H)2qxvEgPGI1mVs!}KLEya-9lNKTEPY)?wbaHOUu=A_uM={$8$6X|8zLt7bk=&mO|#i5m9o;%eC!@abkAg{EjqrY5rJQBMQI18|;|otYIs$?nKVNSmFIWJN+;4Kcdk z)bz|*j*0PE$qCAIW@iy4b9?KTR#7o3aTBY-ciG0-I=fk-toiJ_)sBp_f_v-%>b zIi^5Zvw9;JGiIb`CaQW?sq&QCEG%C+F?^VH7MxyUs5+OjlXB9gIuhfv?H@kx&4vb=dk z#if<;l_k@$$0RDKogd2vhVO&BtDK~HW!ljxC8~ znpaR%olsGgR9KZ(Q&xoCJQMNhcR7X#1{8vBBn6E~Ct?Xq>0(Pv&vNA;JDWej7E_fy zE5okh&8@9;JDyZkQI>`t($v0;gd7zI)+6>ZzUwd=9NP?QijRsC4kz|ANVIhMO8b6> zDrJz6lIe;e>xs%SR(dv_K%`1Hjg~GkI=K#~sy2Hm(V6SfMq}Xr6l8)= zSI<01EvYWJNX7JO7@QQJnUR^EU=o6jC7lS5t^VPb@LIYP=~z#vTS-NJ&0N*<`0NkW zxWryh$Jt|CLT|~zz6kCzPQWxy{<8`&vsil)RY%RtqRzrRM`;Px^Kh_r{HQW!>tK%R%xION%!fHjRm`ag!2n3uOJuOOWTIKIR2Cqk zm?f7nwyIO%8LuHTRLCqlpF;t%oT)@bQL_?NK2Noz(mqqCG8x?<(x^K$_iMT1p_J7X2dAbXvdLIUbiXFo{aVst0Df|c4kDJLz#%$e1cHNUlICF7n$?j!5@F!x+5bM~~HRC{K8wjEah zs=~PD;i^7y4;x94SAAmTW5>bqT=g)qhybg27NUqD-WVDH#UbLBz^n9}49Dcmbo@== zH9<;?Ci9Rp1zi{2Ckkv-#Y~`{5=fh2b=LDiMuvH*vXWK$k92Y$mF;QMlQS_3Wf*7I*#6b31iCcP0dWz^qvw}EnaW}SQ&U+scgEgTC*4N-qX=>zTB!{fX8U-+rl(dtvO4pQIrnToJAXv2 zexE7K_TVoYizi2R{rIMRs}65`;gJffH2$Qve?OGw?!B4zw_6b^WJ%(QLVTD`Qs(!w$WoR zd$7-|p&$NnW^n>mc~bg*q1S)ZQ#PzmT=?df_=Z`@FPnbWeb0=I>{+mRN zhm!w%dDyhaN~V=;{A2!2$#edVcy{rpokI`xd*!;q)t8LF>!D}9csuw(Y+;b!2iI=9VTk`H+fSW(;2qquRq`cgR!)2P510NW^rlsd?|8p| zmSsJp&-LL*@#_$n^2iJNYoed1XRc}i|I?fmZ(yGzc$ zV#(XP?mzrEUNE~|$uAxBMd07ReB;GEm;U9QasSzTF&?ujdCJ@?Z@Tr$#_(IWKmXOn z8^6S3(EiWIccN02DEX{}+RQQQ^3PiRQ}7MzA76EmWj(6o z3yPC6tn4mZ)(k)WzfU}I?7x+Z2D{la;r3d-|c_2U0#i@FTv5Qu2W34lntvyS1$Gnb@F(qb_?7 zk2{t8qk&T{>3j1V5jQOFf5YFujQnwQmJ| z@aL8HzddT~=;O02YhW<#bb0iNj2jbTzPiXw(0@+J=VctL-+A+chk{DOe}1f~H{P-H!}FFfTkPCH_IK`cWFPx!%X4u*G(Cq~ zYDzxl->-am@2X~@viC1|EUe^z?YFIG-iFu4_3u*JWAo2Hy^ec?cupKpAk& zE*q!K*@<*zEBTV-0k^HaE9Q!urY@}<@Z1BKru-ZI)y)Y1ewA&Fo?c@$FUJ8rmcG8G*VMUFzlQtGO z%XojWvxQVyU0j)0upqXRu|c+!7daO#=&YIY@`BEq!1JWSlFl2cD(Y-iDJd)KNHp57 zvZbbPpR(yvq6ZvqR8sydRic8tJ66(ZG1D^h!hblY73G~wPg%j@PFj$<8`BXpCn;*&SuF2tZ-u7<)t$~2WG&itMQ1yQ z>dK-5%pQ=a&X#p`Ua6zHrn0lO7wM|0?sT8$maP9pq*|FnZWVN>3u~ugxErkbA53!! zt4h$#E2|x;%rO zTxI2z=anw0E~(C~uBfRhz-f7fGfzF_?qoF4W|;e(w^F_Ee>6=SjkrW*M@L2#b%us6a5ZGt5+as(>%}Z zjWANJEUbEvZe?0_{2OW|VqLNn$Q^i~Y+qcInpaZJuRWcp?Ur64qHa8#@l2)L@Er%a z7NF}q=x&M+c86$w)O@`t#sP}3=YigE6{ks%jhf`6@=(w(^Tr|>ihU8LST*jDrswjF7htM$U(gNQmbL&bQX)9Lqca&MbU}wQepp#HizKMC5-|-FTG; z&a>;rtK>RQtsAdW>+D{q>aSJP<=~cIPn=krdJHL~uh6G+j@A7XysXQ?8zE;=s6s>b z($vZw@UR39b>me|I%Dd_tITx{IB_~9dTWciPmk$UJC?s5(4WiVV^!ayFhNyafFRm1 z*X&@pgYfH$2Nsq!K(R=}hJxXiCR~T(Zy)?3ta13ux~W&}(ymi*&Ny~e%Zf)TmV>|A z6*nz~6@ux|%8hKHVaveI#jmSXXJl&)!#dXzZl;mV06R_TU1DTxOFDifMuyc~r7W*8 zGJf%|V|ANh_Zqg?@ z{9Fg0)~E(0f{iFJJSb2vX@3vgg-|?KIHDiw3j}KOyRQ zyOvjT41ucq(lN}JpOG3I42Mg{^Z_qigm*CYQgB=cmd6HEGA;#|rcW&=;=uDO%89s#6t!Pqh;+Az|Fwtf%gG- z0{;yBI}kln?H9m@fX%>1fTtqvj{&(L8T{790iOg;2R;of1O64b42TCPwX1+H0iOWA z415Oo3h-s%tH3va2vhCG@;Y!o&UXV30@3%?GN1PVu~HR#z}gs4@m z84~WaUMJqhREf!KLbTVejHR7obS(6W@TW;~0#s`G*IGvHhoN1}lxp4e)YbF5`jwu# zS3?b(C7jGG*Ik=kJQG19LF?~AwwMXy&Xqi!2|GJi9$}U;eoB@h(ez4Kq)HfVc5PVs z0rR-kKA?f>YG^ntc2y((FvSw_SC9V%V5~b4)(-rQ!LO@Yo4k*b4MWzCQH(PSPA9u^ zuM4$ac?8#O7lyT$W$wTj$0{EI`1>P%QTVwIess=C87Kmd*QbF~_j~*vgB{QDntrH* zmG`V;7z^|vjg3ne37WK`f`1_g%`H;-hv`EcDedL z%bGrlt1@LDQ8p63?pZ9px&9klNhA_enV*3B4j90(B>+UXL#_JqNj0UV>YZHfLdxpO z*K+X0NWEIa75iCbIb$$$1-_YmCj|OaBKNe89qVwE4jY4=Gieobi+t>X${4Wz&gR{cAbr+s1C|)kTV!sw}e% zoc9Kg5cxM4Ls*VSfVc!51UKQAE z7z=?I7it+*%u{N20fT@XT@YP0#$sHp{SN1tcdMPxuoFNn=P;Ok*K!tp7SImt1xx|L zP3?GwH;ig8!+CEY=No;2Hvyx7n}B}=vZu#F2DMKChXUE7M+096VqR3sUK(@uTK3V& zK-OK%kJK0%%{Z&QV9E3tN*1Krla{T8zLwo8ESS3&i0m&$_K=bB^KI?-c_Vwx$lf%v z4~^`fM#flbzsHOW_YI~MW0H9lJ2Y(bDE%WAn8ebOOV2LG73Wo0%`}t!dus*RbtOby zoFpJ&5$ZBAQ!!ti0(B_o1cL`V1)lSVN}{%2i1k?H(dB16+}EQX>cf_$o@gW#6m!{| zcyw&1hS7@m5s3*rn<1MtUqePGkXVG*kSSw4YVa#4C{{8yt1z5Pw~&R;*f<5}TKBp~ zkXFD6Y7%~~gK_MMABHD&c})3Rs057B+rTq{dx4xbVKS^Hq$reHrs)$Pzm z3)khvZdW{{oWj%%9$Jo27elFv`6@eB9m?7N@bK&#-+*kQN7=dj#KCP;yJc5isB8WI zst~#35o20|C|64NDea1#DCdtIDBqb-a~(_z%a^@CiU|9o+?Xfl1L-yxcrI`#a2PNe z$SLSBAp6o0z&PMYAj>-mKV9Bry1dDPxQVKA4aO^hnz{N^EXNHEj&}2V?xC$?#>oHS2rdO5BE5U;~8gQFMZh*4uU>aD!tWs-4 zSkznhvvYwxAe#r|tg-~y7q|d87+4A%0W1TK0#*Q78LEJZz#1U$PcH&y0G9wS23`TY z1h@=17q}eAJiHpnWV5O2%0s3r4_S~EfP&PrKw%!0$Grnju3OgAawec734I}OA8hn*-Vw94*jsQ-HP8i#>F)o z!&IzeRjs2FvR)qD4E82Waagpc#%K@0Fz&x-9<9*ENOfn1!-(7c7OrxN+Y!OxyAUwHj4#9LV4P*_$9W`j zsxn`xxIaWGf{6!pwAm%>fF?h&tW0wz;e&mwjl+?w5mJ5?Rhd{(En>EQ-ubA~eyz*k zOxX`OKOiy!^OV1{zfC_t(SJ!R9vhCPwHQI@PD{J2b+0^Mkkk%G)ues=cX1w|Juyywxq+ zXE{@gsi#w4Z~veUV?@nqJMFtDHQBK1&@xvhD)ok(4_wbM?2SgN@z4yHmP9aVKz-^C zh?pt24}TttNUlC;k)}!fQz1|&jl-2dUqK1x?z_hpHEk= ztl-+mHDKDuS}=CJUAh0M+|_^BxPERJxBhr-V0i~VS=HU$JqMO= zpyRpuCvCFBvjLkt2Nt~hWG{DCEy<|Bi}ULKoO^W8t;+F#GOD=dn{K0u8UZ+hc#Ht< zqsS5@dYXUOT@z-rKo6EQ<) zd2`U?-L6=XufSlzINN5f}GOf@&!d5E^C{X@qGm?>t|$qZ%E5V z7}*#j%P_KRBXbS-ZA}1}KY9YdobSpV5LK^;6CQ#5!w}n^05r9I>GZoN08I?mHSXA( z4nB@kw+X<$hMave0XVnS1mJ^K{ysRgtiirdM*nkL4RRhcj6>OG(9GG_FfpUvzQ=^V z=cFU%?pC4hKIw?L9Qwa!#N<6zJtlr;SOm&T%K{+#5x+$IT*oB1#^Qu-Jlw~>04ZsA zchB)}33NQiKiXv9Hw<{(bolbT8sne7q*A-R^Z69byAJR1Z#xDCA6Hdg7g57KubI3q zqC9uGA7h?>{l?*M3u4Q@8wZC!4s@-Dzu!A{u~XyW8oTzXvzGHyk)b^3?lu;wNv(EK zZ$fe``UB1zMb?PEmgRxoNsUFX0y!4p#;Y2O&~K};=nWvpqTN9DsBZ#mf&T!m0lp37 zScD!xjYWHbPvZPN;11yXz&C&&06zhK1pE?+aiI2R;6H(^Q=b5P0RIK-3ET%91jJBV z%R2KJFa-Kb@Y7=hnI0R+^w_Xm$v8HU>9OH*C1W;{>9K*gjP%$*rpJb*O2)B)OpguA zl#F8onI0RiR5FeYWI<{tBOMp!v5pHzM=h%{GG2~o*-9h3!N}Gd+1*BVpOHOgWKS9y zMoY1WGL&#Ry6P~He(4eSP10o^_ zauc~J32-DJfe;c!i^h-y2$v-0f@nn#2C5-awO;DA)vB#k+fub^E7piqP-#n*w%F2& zRx2^6XlX@@`hI^iyLV#H3j}$&@lvgZXtkoy+8^$~s>E;I&S7SCYCI zMdG=(UCiz6cQGT9dz3Sh32pkE(a9Xc&4irVRhUeuUY=7{R%7Puwi2f|XBQk=_2;ps z+oY;*(NtVw-=YaRP531Z&%7?D(0xoz&}q0->Rx+Y%7aPQe@?m%b}DorFz_%PP8U!e4jX`Dqe0B< zSPrO9)fR$mCymVm*~AsA1k*s(S2mZ%VjvraV@==@AOkEX9aMeH0M&6_$Io_L^4X3{ zzKFIxJ8GS2+VE_A5p7j=8VyaIr+g7-2mjX^np&cK5p6|wnhfoI*B5a6t}O`F4v zFXE(;l68ib?)oCydSz0T=FD<^5e-FMnx4g`?>jz?fuu|Op-+3nr#x_g@cIo>sKJzJI#qD4r)USlLEj)$VL%QdiTWJZy??Yj?JCeL@`T zTckUY+car~S!CL++YOtTZr$FnayyH^i<%*L9n7P;>nHHhmKqayd()&oNr9PIg_@N_ z-C?Nxlc>8kN4H9@7QMEb1>LPo)i&jA9iN+--ta7U8tCOUWeR;~Q;!=l65jSU0+UeF z&pjjwP0@!Mqs{(w=LXTVbznoo^C6b26nk{T_({EMbD%NuOMj~C^zqTH^}{qzN(3VA zXzIE)DS;2DBYnU`Q1k%CLTi`SN0h?cjBwu8MlF^#7hnz$Y7 zseWE>zBzg?xfRd7d)w{Kn_=;C`))<)=l0#5bmu)x<^3M)?RV!=o(D63x);75@Z(5z z(rP>LA^0q9vhTaV_ub+9G;3q|qEuTOw%+%tYfm0i>O(bU(4`9Hf@8{Z?y1`k-cRoK zx51OVSSOk4GHwR{licn5i*Vx3~}9G#)-ylK_zDZ#eGN*jzM_s@-FCZ>PNuA0U{ilE6R>nh!4c>-9;U68 zupO$7MXk1Sr&QFK_%zenk7BDXyG(nrYZ)rqDO{K6ZThY?3DMxTuedLpRl`2*lBFVt z{Q~%uCn}|a;Iv0vR!u+rl@gM`C>6NcGHQuZ3y)b6JKt;*S3bzpF=5?^OfJgOad)Sh zjpM<%8xSe$0;kWDYs_Q9`_sp=M?AYI$MF64)5zUyM7|v~k`j|T3zQf=T` zX^>fTi7P|lRG(!Qor+&3hujI6531w54`{~eS>Qyj`+~9w`-8K=lfhze0Js=D1&o1% z!Rx`(K#kLRe<}8TkT(d;obfR51+IsKzXf@($;=ruKNyoCF&@v6i{V)4)_>26;y%n!J`;+0?srLQ_ndURF^jc)a>O<@EC9wsCTVqgX6#g zkhmS@CS%0q6oJTa&I6@4cwr<~30?qR4qgae4}Kk#UYG}}iRsy``6Ztx_dwkk{pLW2f>C`@a+|J+AtTA`Gb`#z25_?Vtg(#j z)?E!7GaH%kkM3$s2)o5d%t)f{ zXv*8c%YwU=360UMX8$6)9=Gu@noaYpQM+esv)vHUuyPBDyq^%H9Yeo4gt_08x1CLA z4HMQnb(e3BHcQ^-=q7=&#x{|I)m3F`K(B-$f&s$71UTRQpJAtNJ0bD_;B$ zeWg|XfF8-Ws*P>m!LEc1w2OJu7)--g!q2`NsNOflY==J>tNNdCt2t%r%`4Y3o{G=X zF7{~+J}qulKMd_U6Ltbs)rPnSpS7=lo_BlH^Yrg zUdO>CZ*SW|yY{tATcu5>hF34Jsn^2T-9MM4zk_yXDOohzK6(4Q zAGDuAcC)^`P*G7lZz;}1^8Z%fX zw9NZ{NU5||yhz5h=Xt9&&6sGY*TJbt7MyZQ_O}TfG`3}dyRjJi-Ls$nS2naPBRS7T z))ZUt`UUq|r6rqsJ{c{iLeh0C>H0SJ+T*{=z4qk461eud+ih+flB+te?)FUln_N0^ z8XKHKHa2(}IFb8UBgO__1kUEV0xSj>gR;Tt)M7EP3X~0A4a!=%6#PC|1FA!-1783c zK^q%%bep z`@x$)tteq1$DRUj0a@>JZUuh_-T}&1zZ2XAl7}(Xle@t$Ky*^98~OA-5YxlC7aRzF z9~=Ze0Al}ZJQJG%J_3?A4t8mbJaK*sk{8Z;kY{y%2Fi|o0wnFu&%tkjPlBYy!HSLD z2mS(-E_()i5!?X&9)uQq8~hd63O)zQ{L!?qwfW_5&6 zeAedI^lX|Vn_oU_^DC6ylqsLJ`L$M*=E&xk&)WR!4Xp=xCSSztMYCzS3z|*KA6y@C z_%xGiCTu>>WBIOkeQC~(K8+GFchgh`E+4t<(#T(zMozi3W}mjzr)~3TJAK+NpSH)R z?e%E~e46ZHn?70p_SrIgnyi0I%kpWb`816PY}g4tE!(FR`n0(|%^NSMCn0;_TFeKP)z27DKa9nl`?=tOL zwW8~kx*8@M7pHjBd^^SH8zeh}>wmH!8;f@MH+Qs-a{aA?pQdJ*efDul+Y=;h?_|Qz z?zi6vfBUA*81B5pFVne{|JK;J-uFG@``R-*-skRV{B%z)Xm+S+$m|H-Pc}Pb8l9E2 znkShuJJjUb+bW_>BC{6cmt4M-V~Om%o}%y^eVyw(yF-1L?2aQ6=Hz%cEa7^1o3*`U zJ7oCCBoSlUwK~)}zfF{8R&NsXV>Op2^!5cLWsXgvSY;KwPH$G7w5?v&rkvMvt+ki_ z^)CX~>dDM>(!DNGpnOzUhHP^Xjc7Di)0Krlbzxn=DA*O80d@zKHU{Nj1x7RkKoOr(@)^+c<1m zlxH?ARjx11(KyZ0cmu%r(j1xamUe?ryV<8{sAAeD>+r3y);ZPb@iV%3+PF~z(w zpcdphqrN1wWA(MAQ}y-V?W^Ca=zX=cwWW#YIhe7!y3u&JEiH3Qxc2weZ%W|Z)N+b= z&4zkjU)s5@Fw~n7_vYvhv1uH;!;E7Y4F1ISZOY2Bhm>RC&B`@CXGUMruN=!JO?`Z&!dJ6vU*S*Y&cTdjds7I<7%3`_-{H&DUShY4U^lPpd*Ao9*F~I2 zADm0r_PPjme@SyC+)wTzn9Oo=k|yLNQ(Z(F7}!nEK0>!!m{V>JztI7qfh`|OhUeOL z6Aw{BZHK4BllzGg$^Ar|m$%xi7!7Z~qtLvdI*LxlmC`X9THx9rS03l~Ao|E@wfoez zBS{?Vy@7;(899y?M$D*?%gThF>1rt2Y=_g(Q6tPOimiJ7l#;p<)7NQ$ncP`A#z@)_e|2Yb_aO(O{ZtOy)iCXw^TQz!u#Vt&82T-M4;D@OltS*^J;Ab(j&{tDxHDcJKx858!XXKZ0+Ae+8B6 zZ-B>;7OZN!n-MJFno*0{T=Fiskn7#xGVncc6^QK}Qx*6SydJ~?k9`OH82ldiPf#Pd ze}PYe{|2=$@DosN>r?O_;Ah}R;D5lb5tS`(;D>4gckfIDh8o$S+w`?NEBT8>YP z`n1_Tt;na9__T7LcBM~?`83ZAkiy}y+n52$3u^`_Z&S2K)@Vub;!^cbPt~y*u&rY= zU~_br!kbCfz!4nrvy6E4&K=vZS63aB*x7~A$kcgsr`r+k^g6=CSLu>Xh1-#!Dfj5k z@FZr$)n9WN)6oXgGH@vO6WZjaU1d@>9q6OkcBKahu&OJ(vvU z{kpE>x1_ImOVm8}yv#m=X=S#)q>TT4`Wi(}hn@c9qznY4KRG*f{KoV(Pr4GG%$lKQNeDB7*ExwtxrL`ED z2nlx~ms9DEufnsw4b8{zlgWXy3Cj9N&4Kul;dY5T7pH&(@&5>E3 z^o#YeX6^dA!Xy1Rg`em0xtq;}^p0F`$f#B-dmx*icR$%4(2UfXNkc}-lzyK8wrad% zT;Mc3*DNp#b=mH1L0c)~y7f+o*eGknx|Pt7;@a)GxDcsyyT z(bsAWmlD>G?5i%dov-?1jTDpmL4ogkai!2x^5dfT3Kf1lw|~1%B1pzCRV+* z7wq1HQ{2ZP?zdK)W{YJU{4HQ~I6*VuI?LyG;~NPp=XL8JCSCWT+`Rje^D!6R%&_Px zU-juH;5YgRJeHxP%KSKR9C$pK4Kn9s&XhV4EaIA(Cv%2LKX5+RCxgnC0idklfnWnT z2>cc}7<>R63a$rF2W6`d2lf0TKux}!4gQ!kF=J&;oy`H8xt;`W0Vjjf+*85bU@j<2 zc^b%ORekd^ruseuJPynQ`++k-^*ysd)#rRrZ9&6a+egc1`)K(hI#1Vm)6jn8`XbJA z_|zw-IkHRSi|Bk?=P!n)^vf49;dUC@JN%a~VsihlhW2m%%g4?HQmmdm&FmJFFQS*< zO{&uLMx*f&hfmw?)Aswc13oR4C$rDd!}YOiz^AD`*k>E)(@yhg**-VAuyg5H}P+VPKR6OgMsjO%EclPTHqq=TQ z(fzGGT7R?nDm%jC=nD?JNTprbm*F$bM3~~pH2To$N>4-fhwiz2JW7yB6qtP2%=^%i z->*^_Y0l~V{?&;FjIJ;`&=U=J&|TBTCV3{$x0&QfTV>i{L->9>T@ z#fk9ghm$tj4_}zauU>9O7eVzg$#NNW5wP+vamfNbuQbA8V4(=OIkXfdgqdS=+T8h| zGz9a<#_GQSJe%vUgW2FbFc-WCRK8sd>Opt&v)d-*v)d-*v)i&QO}4J3$+oq$fBLju zq|DNeb$t$zEU)`P1>!`JG=$5MR?xx&K z|E!tx)h{6<9=hTAKGbw%Wq1=Q%z$_S8=B|Y7&5)xxy*R)Zdk$jO{MGd_Ik7|d=n4h$c8Z<%X`4`COwe7 zx5wV=YUO0Oa%ifyaSlY9ZHVRgRFo+?4&C)hoqoVCQ%8uqzCHe34O{G84Kr=nxxTN? z_qEr=r8;{fDV3jGaudId`)4N^ISQld{SEMwD)w-^35sMII%L=EP=nr04SQcbz0QKsEQBgxKX}S6%P+54Hmz)tp{gRrsd{B! zX2L$7I&EPk2}C2$0Y zNxFV7>3R^^CFk*jF@Rh)bgXChpdHre$>%=;mhra4^8 zSM2kZ`ZUd#TfSPKcC}Ay@M)Saw|qDIG+C>bcE3-1+NW*sX+~wH>LAxeq}OO!?-bX% zUZx{XZ!)L19(BozeX7xMR-duGeDmwrRDuK}+65 zlMPKZWdgrdU)5^AqHp%PO*N9hxIjHYINppk4>t-9IW-#FgQ`}m)AU?69@XmZ;1rj5 zGqpo${SK&!-#fsQz&pVa;N75V^F5%R=ewY4lWL}|P4d~=Bwxg=w^-Unm(RY(WN9)t zEuVDcVy9QHwRfjyj=ySp&iXeFym-%nKQQmbla8BLT~oENres;x0`}?DW({01X7s7^ zmQ|G2RMl23sLSf~lX6Qd<`0E`p8fJu?a=D7`Oe25l^{2}v}#%P(2BC-?|HYM6zyWXDIP=GQOmKSy+>Hym1hN_@K8au2QHXjnyx zlZ0?+xA8Nee)`>o*4uy1)DdS68#YQ;hR3m#;bW9LmZE#QQY{ok@!8{Tq@65L^uGoZ(3bWok?Zq0VTzM~dt1J01Kc63QDY|P@{d^mWCLTR!c{Fgg z&g5aBCP<%$LzDS0&M(t`e~$G9Yl6}q4#`UM(v{}>G!T_bbCM+=4mBK7FD;grK6#De zmoF&!2*WcaAo*}#@&H%z;cX| zIHA1M!GuF(fsyyd;-i||NvM6q&$?frPD;gFU{RI?|xtZQkTV@gRlgeB?F%^7#RpJPmdxs+gzz0R{sa*FcM z;w}km}53n zFvm2bL5m};(v_$DX4@rgb1cj7JW3+PEq9`yV-LHrpXhiwrW&Qq6qw6DX=t zi4>U)U4uMhAp|JF+~~`lc#XQS@waL5^gQpT$M7WNMn4lOm>V`!FgH#zJij0v(z!pl zV9~Q}b3^@IIFw2};+8wf&yBykv7h94xgooACGx~;b3=Xil?fE(Pa;LN<+21GxbbSTojm|Mi7mw#|)!hUZ4Q zbFV)*#m|j_ZYO_=mmBOXFx!ev%d@RXPr8^G6qlu_CL~hMgrX(MIFE8QP6_6QQW4LM zx|)3-#nUs{O^@M8$c;fJR4_Mes9U+&TKMk0+wd2;56dK$lQ=m7t{zHYGZ zt8il%gU(r*i-`zH!hZ>&#h&>&j+z?;#Ew1Dtem*P5UO=8Cn_T6k z1U@Vmr0`Zk5{1_i%x2_xDBep5QiA!cRK)Z7@98bq$J6suH$8^O%O9h|m5M|iZbJq0 zS*ZwzG@k9w@9hN__HCORD*tdOm*-K>AvfI5jX$`t5BGAzXp$!kkJknj{_zBgQkFG zy@OaN`bfF4e*Ua;V;^hMto%`_=v7`xHu=L^sd+~+Kv6Cn zoxr2CYEdR0N;wv%1ao6NcjCG6vnTfNh^Oa%H$8^OdkT{q6HF+I-#j1SK1DD$&N4jt z`p@s-)v>n~oV-LBr{M^{&#(tJ9!N53WB7EVH<`Okt`qw+%*SD3NZFp`Z z7mmUwH_?~;7gzE`BU$6hQcml)PPIku6PHJR>Q5l{94O&XHviR_s+tE}+cx$|hG!rt zl-`ib@ng?O@hGNd+8K{R(I)c?hrD`gx%7W%tubK@VG93~N36Or2&u(WqJ^`H3W}q1 zqs0Z$Ifb(dqQz5-rcFt>ksFcz8*Y}EPj(VCj78XnipiG(c5u~}4HTV7gUQ&D$$acNc6l8SOC zyEs5vR9?Eoy+O85O#DI_#W{6)e$JF>`IDw(Ul_d0=daqoneg!?%Q9)ov}y6s2@L)h zetgdSoFH?;mtcZCae4YyhWq`Fc#3kAVnyoap??O6`@sMn)y=WAFQ?v_ zDpgy)sIFxG((?YDg)LuET3%gOyr`tIY-xE7(rj5#D)IB97M341%r-f>M#}ky zKRNa`68(s5SiOVMQNTnFKVb49Y#jw}kIxG6v(r7&4LJD&EPn`IoN=MJzhHE03-_bT^)wTSb zxgx4?Cs}oGDDkS(G}7cmR!(gSu(Cm+%|w( zu49hfWN`a|P&B8XIVLOUhL0LOe9W0=j2tm6NX^O`K5W?N(WA4nMhzP~e3ZF$Nn}PS z$5~O+@BFg0@%6jlyuNxO_4X6gF$Y~F!?PcZ6{K5FWYH(X_s>C=@kk)s$(R(J)zzK; z_IASmm@}+7*eC1eG5mhW!01;R9O3AEove)fOM=#^=o%4ifoGEjNH}%$*%`ze=;K9C zLBPM^IiP_HPIf_i^44=BgCSA#FvDiXP3_4$0eOoVP+TVy7bokXJ$W;bw;rAYGX8MA z_!)VDc`VWU@cS*s-+M9uaY|oyMs{{^o=Wr#eqX?IgiLds@}=GMLGKOEXqT^}=k0-j z>F}HH9f6@5|K2 ziLbrq)$OU6wyR{`;yOy-T;$yf&-*fZak5m~lNW~X>lnQk%c#X2&ab`nEh3^_@L(Sp zC;PNLdFMe-nZ(u_esUevmwSnKH9Y-g8sgIVwI@&6`%8E}cKHa_Zu+z)egK{fW9fHX z9vTBqf@h}7*O9#K@Xdwiw5fP-9o3hYP#hP-bIQ4vuRqXU{^`7`8)mRRk#G4lx7XhD zs@k2wm?P-glP4>EDSWrMnyI7o^+nK&zV@xuA1-Du%ziJe|qYn!wNt*=O}c*f2bSI6c1IrVu7Jc|}szT<)R(l;!HZzwH9PcE~39qEIQxm{Li zdA$Ga$?H$T&#U5y?rO``QGHhb@uy5)FSn;$V|l#)?WM0b=_`kCWrOAFsC-|5@2Bw8 ztg(DY0`18gMR^SPCda)sT0X!32+U0Aj;hLDm&bC_j%2R|W+y~PJv*1I^*CJYGR(n* z)UA*BT}hPloKR2QoIGwGW~qSmbmZo1ah~xNsLO#X?4=gw}YgTn##j=VkILGRy{zoeljf8z{c0iSRn#(k&6-nJUsh3t)y-3#H+kNqX*1`QE*;8Lj#Ij< z%o%e2sH`F9&&?WgVMW%Eyuz}qAyY5sw`>TMrCCE}L6~A^f94cVnpQaHtdS$2oIh>m z$PvXeqB%2*b7oE{&cg$>*pm4_v+%58D@F|)iKNC*bLa>5tpXAPO_kV)ivIo9qC-dyR?)9qsjQd_*hZig+bs+zN`Wa&~S)|2iRl9tN@?mynn z{aMxe9Hx2hbTaM>Sh~hS&X?&kt9b3fBV<6xE4h4rIqJ-#IiWApFW{Wno>2a6B+snM zDJ?}qG6b=tkW;{;u@Avsc5%*UHnH5uRfw>;ZD~g($eoi@EYa}D?r|P!<}K=&*}L7xN#HeD=RtDw`@q=<<;dw>d$7wTx!qU|4WEu8MSAVx2ZiZ zM8*teX{Ru2KWDVwk4x<-Gf>GkNf$wNRu{$jg$0ysYR@p;>5TmIW--C9OFgJ*#)TAg zYR}h^IeFI1!suLky_oC#bEjzf-^t>Bt8z^3O)2P-EtpN72|-e&zUicha%(VmziT}{RO`nvMkapP#BGplU# zQ^~3gC2`nhSV*-sZ9+B2R-B{Y|An7Cs{&0!QCYTIlr$@)y`1}Qb#g1LDqOMm*ea(V ziqJ;)`;BtS`Lhaa%~f)8F;HeiO+C3>;gV;RnRZF-*_Z4vp_J@-u(?g9IB(XJsNu*` zMY*6bYMMX@4)WKu5T*GNbM1yPMKutLN;_Y5O9h}xZ4$;qNqbzX7$@iE6quT)>eNnc z5~FO}d=s-0>a|t#Jj#c**>F5;jofh`G^a49c*?Yb=ww#yE->};=6Eo-r&KGyRPopf zqDxOpkX&8XliXU?6N>AsN)WTnXH|?UB<6S6&Q$xAATR3^Q=|rbb^LBz&6;dFPIt^w zqgvL*x~eN#7*}Y@A+_OYGYhFdQhDogS?x;_>GKe zp3Bq_Md9~0MoX&|+@yeQi@z7QWc7Hr+#*&TROQK~Cn%axXrk7cCT{N*Utuwu{copy z8Ra<{p}!2g`^j(q^xA^&Uh@47$Im|_X5U`S2#s1WIQrUy#fAGnd-$2`k9R)9yE}&e z+c#7+_nUg^vY&qX_vtzg70X6VU3TZNMQ?xai@6J5`_(2kixELa=&_2* z(3o+TKGN^S^w$T>T{PKo78-h&^c(+t`0x5>|Mm1UPn!73obR$J#n6xY)6BF%{r~vI zakDnRQ#bL?*Ro7+=+B&V{$cMHo^e{<5x3tuW%+OZVc#>)2wi&KaSuK{E~|ItJI?T* zJaY@vI#+j5y#Ki(WA@J~W>?%bVE)b1F8L?v++^sjKR)@_H-u^Z8Wy>R7cC3BkrXk_KZ8-AW-LEl3Ca*I>mmga_`zOa- z{G;@nzq#VOe>!CjQ-_A0-T$$Pr@nsQi*KC&>5`Hz@14p99z*Yc`OiN({ltyu^j>hq z?!R3>sDh0JhW`1x+ZR8XvS<79?_6|I`U!9HTxWNa{NL}rs_EGUgHHeBBft3C*ayyQ zVOqn`zx(ou*H(P~#e|!pQ|`X)!Y_ZpSs{k*?A-jx<6A2RedF?1xBPI=V@D%{>7otu-5$Pv zWUo&ie|-NZOm!Lh)ra3cZra1Q+;PF*55H|w&zG86$}sez4_YpL@r?S_PwajF$zx}p zN`3gm(C1YA@l1U7y)=`CErMD>pqoDzf~{OaI9Bn!_aL&!J@pQ^}-#w#SpS~Y_?A-X-7V_s;hCXs<<-mtGymIa0 z=}Wub)1~M0j*}XZoNKmkS@PE(9DQWLijzP4=8(6UE1YTQFMi|I*zY1cez4|;ubw$> z%%@D3-figJ)<2&A?a9MGxb4AB+bZXulFjBZLx1d@iJgZ2@cHxm zJ~Z*FBWAAqUH7hk`qv&t3q2&~>o@F}JY@TbFLv!*v*+Q_e`79ZnxQ}R&>eS%u1tU8 zca5V@9}}C3{2LAZ7r**)^$C}){`8h*x82_7;q5f5Xr(pEmH$b@vYc#?9wmSv~NXhvyNLJ4dx;OKRs`78n_qcq8L^70b$tOP5uZmDdhk^wolx6|yr$WoFw&ZB}{G zOp!}J7+K5htW0fSR%UsrpRU@vvXYvG2P3DGhtngMFE~UYb<3;j>kd)IlDcIY(HvAB zck(>dwTr4tN|%f}#MF>2mF0DpEjd&%m6fH3DuP*ovWi0&Qd54YRi$FtvV%!R=aqJO z3DxbO3i+TLlIExmrF~P@%gbvH=FvK-cSxvV>g*7uxV3l0A&OD$J*f8Bd0CaJK^|gK zs;jEi9uHAU+5Clz%9mCjq7)s*bLh%WnY;9$YH%mj1tFzXm52B|%Su-qq6D|T4L=w$ zo!1q1JEN!$MouTW!rW)=A?FHNOIxfu)COH!U0!M*>QKwNwq$8>ZGH8j)?S{gzV?vy zRN%4x7l}#`M-?bND7Di`6$lEf{~wqpWi=J3W+U|wD<}D{Ws^gcQd_pX_E_JR7*wk8msMTP832#}~mK{uHcb=Hin!1BEI64kbXV-2HF`3kJ<^G{dsa^g*GKa>H zmi~pqvig_Lug*FPsHo1;^{A}DSr;1ubP?=Dt-Tn--Lta(>wsDP*^4Tnzz`!D%1BFL zk=dh+vXn6{B_X=P5u}yWkmSPQSwm||=9rP;oVt>ly7+SpPkaVFpLv4e=J|L6+}D_| z(d#^EPG8p-aYo}~x&YcZ*B5bS;$w&pt-$p~oJxEQ*ZI}BzKF99A46Jrm_2W2%j8jfS4WFJ|Ka}(BnkI4X=z*rZ1Lm;1-QuS} z(w}Tz(_D81@BQ_)@y>Pq#_8-snznwN;LXm1l@_B7?~K}_pOuAmm8 zs^`qr)TY@XLam#T(XElw#)@_~l72+KbI}VkVL6dsra6hm`Y5Y5Uj@{@>E6(T^@zDd zzaHJj{WFs4k-~_l3%EXBkL-L+aqW_d>f*(`(5G+BOLSYOZv%SAaA_&V{qSk~^(T1Z zo_2*zu<~@qmd^jN;R~7I;k1z;ubSgL%d3+{b?TnwomqaFsg$ai!2l}2E8_ulfLA;~ zkWs04)G{g+I{&NFRH&BXlnR|778j}%B&UK&Ve@fwH-OF{Ya1ZmrgliO>r^gkQ_6HV zPKPaTF_qQTU=J|HpW46Hew zZC^gy_T`J1lj$t&WtYz$;Av_9_GwxYv9wcMpZ(^ArD;E`d=Y1b&!;!)E$v4>?Z-ZC zhfmw-(>nTsC0K13RHoaox<^Q~iFj5fzbHMgGX-fPWznx{6OOPBdgzS1C>RolfGmADh-Dk!ABM5|r8~q0?fzv>JlA1VTD${d? z(ADeNgM;O>2M5a+F`t-JjZAYM=D&Oqrv$!9H6OWVe^rO`WlMSiEjYxCRsl!pIney=4=@)?X@mEVbbE&mVMZ3A|e-9}Sn zlP1r#m*4M@pL*7RxcT}nsQlgyD!*G?`e^*t3Xsp{w|q9gElv4tX*wy>>aDu&Pydx_ z);iPs-he$j)AqO+^zQA`H>(mD*ST-Ec=Um7@k_;|m=_rpnf+$2rAYxyFf>&x)$Qq0;u+7+RulPbHIXkO z^VHl;Ghd^(w1<4!qpr_(0ygX>pQh@xC-pwAr7-yj7lXjrT^oz+x#-8}MApUGi?p{# zqefe|TK}v;7@H=H-c3;#Xby}>F)A{-X^(UH0OM4?GHlc|KH|57Uv82SqcGx8mH#DW zU|q-^gk8p#VZBse%v2i2%u=TMi&@w-JC@bVQ@sF*h*k{_bd+kvfs?Y;a7(+O+&$k3 ztg0UBU2xuLOI>5xWwVx+nfjqRqI#pjliY0x^6E{tq1blWZlQlKbyCDUEV(C5)L#?%Ea8K>SXXOmeJPBhs#a7qVsK7(bcK% z2SWopD(j9l0sQmFyF%Zr-OjT74`@nYKNLIW_l_a&Y9=KPw62Y-u-ztr>E4-RXjr+| zsXJX$3LKK|#>>nD^BK%P?d21BeE!WljJ#`8(VoVly{)grg~fg5fd3a%g{Qr|rpN|!D|`jM^Y~?I3~6l9Omlju<@+JDS?2DK`LF4+6!YN*Y&v{@=KpklndXy9 z_O2R_jjg?2GE5Qmfx~mjP3au&C#y<@Q8oXPUuUW^XFj6>qbh?jcrk%V&F4)>>h*B? z^q88@<2;+x}9u3|C9s}M9_6F|;j|G1K z_5qbACxUwHzTjr?B=C1&fACH4Wbj>(je=$#;uP?oTyyfA`SkQ4Q1xLjsM?mx&#D&r ztZI=j;ymEqP1D?k;jFr|Cm!mhWPpHs7aJ`ZOKn zZuzeBY1jKSqpEt?_D=tG9|=M??N>jx-}GblD;|T^Mfc?|&RS&qvHfm8W-p8OGdX#{ z)fugu)wQJ}Wi~&1nz*h~%n4SLjc*43^Np{)HY#nPJoQ|18$H~lJ#oygFsgGhnc8-D zHG0>hlkP4Un-?ocd-bLfsh`dw9h9Uuae|FZ4K}oU@i3@- zd<0a^sQuZxEuXF1^4agtTG~r4U&Pt#`qIp%X3N)$lvuuFU0=jG*{7+NTfQ@V+E|~a z88{oZ(5F#nXETv~GCKK7>g?j&#hSGDIw!t}#x(bVrrgxV>DlTJ`HaXUGwa=(w4Kkd z{WX&@+);hhPfqpDyOx=CJ--P_W|kLb6!$hz9M*Ye)&dUE3Yb`?Z}6mhye?ALj;8*o zrD&6RH72-gn6+zLsk(d&Z*D-0(xNg~8OuDD({~UQZt4(x$vs$mH)`D~xzF z$Iw~7%e%hIDs0CKXM2v!wOx|Qvta=i#i2Y?JpEnzP;|PkPX`tEFjvRV!*BCOKASi4 zSsia_4{>d2)X`OYB=dJWtda1B>*1{<@!gue zeDKEH?$H=&oosGrH04f7V&pqKEHc5H(KIO=+jNiD*31pbWVK7T8#7ueP=O}NtZ$LP zynQku_cg5C=cKQmPF8PT)BE!;zYJkYuQNWx?W3ddzl4*%S_es632QQ8Z9SrCoe(*< z3LBo)f24h)$2Banj_ayiwp+Jxd;IK-ntAr7dGxMh*NI%4+hk-ktO*kxr$0G^}9Ik!6e6%O?gDdpBnrokzW-$k4$WF5H?y#N2CK(^Z~z z`tMbju1)4HRkvj}>5q>Y8de@~>W*;heSJ4m6!FSWO;Y`-8=p{BR2->|>rxd<(Z0r8 z9eLL1zgNGzHkrGPdHY(Qi^moBnFh&MrQFeb7gOo@Fw@B2n7HkPr&PcIeksOSxAQT& zwu76~@JWf-8636i6iq}M#hht|IhJ-2H04!_8QhfN%XDOTE;hbh{I4>;FZeG-o#Kon zOG}L}8=npPIKHb5pB9(qo4coX;k^<=(-&7QO-C48^Q#h{4SOHH$tJ|J`0|bKFZiU? zGxgzmcPKRgpA9h@Uz*`N8(*E_n~YE0ai+f8=ce>xe0D%~6~5`_?zjEBd>qBip`YNh z`S){tHea5@S8hV6E70K0Q^R;29U~+is(W(kHZ&uoYjqp?9^k~JR<5I9}TY?LN+Y>FH>?kmKDRdLv@1tER^vJ}eN7?wY`DbY$#d}UZWF-&(BG()3Q2iaCQE%!)W=@rh> z6^WxgY1WCBO$n49waN9&&!EhE5vCWna7wE5Nk9B{&PKu2(Ayt+vP9z)sq9qrST!)l zN0k~adWGyw7Y?_Ha{fS~b>I8a#T)MR9GecuyDoLFJrkKJ9^*U{`5E_GCbHzsvxy0e zPK_zB-;GvbRc~YpOu)a#rB9{nS6#{lHEf*@D(N#o%|zyb;-3vh!8xGne<4^1UI>02 zya-$YUJR}ROF(Jqh2Y~LJBrM*_>JK2xn?&}>^<exx(2cXLH zLvSIu7pw*MfwzPI0k?vmgS$XhGh%OnT|pfo%zmR-6g(Wf0L%a{29E-j#T@b+TM8Zn zswx}@J_sHUJ`a8kd<{GSd<#4g+yiET`f$TZ;1?jri^q;8e@_Pa{-`qm><^v-4h08+ zXMuykN#N-q-v@O@fT~BM!1>^4kWYj;XM&iv&KU4pAaiUneRyFU$VZu+@!$jCS)e{7 z!25VH9b=sXN-s|NeGgjlxBk2^Be}PYwr!m^-db2*sjWpU&~vauMG2>3bi8KO!6qYVYSoM^ zQdT{G`m$;c$n|FdeBvAqcQGT1FqMyD*7h{TvDGh*)_2MLi(XLF$ywhQnp`mJX%>!n z)vwCN7?sqoDvWqEd~84K=hrMT84g1`u7eEMtVuk>XK;X1UHe(9_>;4CIa#JOT?Wch zLC40911|@a#Y_#F;qEs;MIsx^ws-k#*2-sBb}Vg^%ja$t^uBm|A7o98nNR7RD>K>H zhz*;%vQRkCOf&3fbkG=CEVaQflXbr^k zW#J?JSXz_$U(YYaSXtt2f1OBG!z)p|ra`G9dZqd({&SNiFcd~SRL*uL&ddZxz2287 z3(R92#eE z;zH?v2o(KCU@!0y@Obc1P!k%c%1*+yK zK3j9-vo%M)h?&Z^v>h&A#B4pXw7ovfOtfauBv*~mQA~ARM>eu4f&Z^QE;2KlR2?&Z6cPVG2`=}TVCW&G1{Wk$9`?aSM{zsTM zb5Mk(Y1zQi2D-j9=QN+D-rAislI}Us&>TYdFxXD5J(a2#&O5Mn_L%1P!m+nbOn-7? z`jdG*#y?+wI6X+X=)l@ZWBPY*?b^C!gg)5)LVFcP4R z51-G^b4tG|LU(YAOXQ0^F$oz3s@pjOl(ON~f|w#014hBIpq`r-4NL*664(Nk&la$J zcJbNL-r(BO&=1C!X1-o!X`K`>n>pPAj=j~L(#1rm&-7`2p;N+}?TW3QAXz2MfF^oJ zCHyq^&Q2;}FHA1?-t4r5?XK*OZ8WXGbX2;Yp{CNJblYz5R^ce=xPvQMr8~J~&!VIx zc$zCd;QAUnT!7pOosmJMHhyE0Y+QvA&oB7xjaS_%<_L!^uZ)mr>KKl`6%eNDncri&x$dOSP}s)@9$m9u|z2yR_-(1k zXG=vsJCd@rOU6H3%w_C2^8XeUz#;Na1w4$+n$=%9al-j5v0t|1rTwoc^BHHGt z>I|!F+XWiJ?X`;?jnTcf0;nc22xQ%?$N0Rx^+$QBNNLS$J(r&J?A8h9aZ;O#GPMNK z#XJp*V7;4)dNlT2+}j8+ikdesHZ?}KH>}+5)Gs87DmFif4J&s#b^V%(cKVAgZra-9 z-F9sT%iG?V*W6Up9N;#OKn~om6zf5&$xcQE{;0Jvx>K>#ALhp0dX14y${C~VZ0xc) zl}FCo+3@@rF9_@Eds)fTUCr_wXn6hvwwSq{$mZxSmC@#?nwSQ^r$gGh zIl4_Z*5z%Rt&H7Qur9h=o7}8$^;<>z1{ZA&7j47zWb-85*kJ8C+rKt%f9%cfWJS1W zk4)12k>^QPIB(B&Ib#?%4KCV=@!I@Wm}G^cd)DTTfjjcD<-czFm?qw$@iLu(dY9I2 zEyXBZdam(#yJ`n3CEo4E=$3|+Tb%kXt(4uqaCD1OmA7wj-rmN%{jI;T&s3AruyRl8 z@;>C+VLXpl0lK$LV?hq#V*$F)@zLGOLtA;i!FfAL%XQOFAbmW_b-AN8F+knm;mO=A zKXZSnZBK)Xc8x9Czr2TAWm{UAIEOc^{d_wcbFvYI9%`I4g-cfRP6!w6G8BO^>bRLAQ@z(_DXq*TuixQmc52wr|F~!8Jv< zV+=IrQa84%^e1Id<5U@D_b|71H0EY<>pt-|c2R9qKh8#IEudwZ33aWr{DG@ZrI&)V;9vgN%zVi&N0-rT4zJbrm zyB^=e=I(R&&Nse3vKILe#sq#5@vyBw~;gU_2g`^>QI!232o6N7O zT58@l)e4(psLavf0%p#)&8wRdrrC%rO0jyrW`VtxJ%udwh9TZ8mt_m&L~!JJBO%PP zxy)JnhL+`@Rc+F<%}w;u=!&|U64PM^gP%%pHa^R#f7d%&dc;!B-PgJIvIb=#jx!wb zefe6AmGc(Le&AkfA*+y*`gN)tW>z6m}Jz61Ued>7mRwt~&zN8t0| zr{D|Vm*6I_J9)y0DRvyV1P=rmA@q*o8Wl2_6O>3!Vh_0Y`ve1IL3WfailJf>(fj z!L?vN@OrR6coTREs5(0kWY?i{D)5>3%&(T z1K$PD1zW&8@B?r*_;0WP`~>_u7^d#d1ABlMfhU2NfWyG~;F(|8{B6k|vEv_%(+>1{GtTg8V*B5cLglNNR z3DJhtx5+Fm-=|giv|690g~cw$7U; zEvqW86XTkkY~M*eok-0ef@(GN`n@0!k}9$j|1Wd^QK=iU(*^ zpdRkdRv88U*r?8KPi(k?-LH%8(;c>EkI&m*^L2ZJ&7g) zw5xP{-oE8JsYNQx4WR9;*^Sdv7w0aLM)1e!4VxH{>}~lw8EWFWUy-$@dxE>#VZWEy z(Vl0pVQyGK`m#LU)bU08YmSVkcHd>)TE32r)%uvSX6`GUnjc7Hd zOBUygQh;P}Qd-33uU-2Bj?zF_HD@q8{b(3_*X*=??M&7$26@3C)$ebKu^S1~}|y`(vp0@u4`g`sSF9o8hk zp4Qjg7`Qb%wdGZYr*_RkBfZ1;r8vd>S6WhxCbK@-toCl5?~@&AY1jEa*^rj@fbY}f zl%?&$XGeQK^pR?>=)!f3o88*aC+Hod-#&-_%CCNKA8Np@Sup!Mj$Ahn944c!%H zGZNF|Ws$OKZzQIHqDFDa14V6;^p}-$D;O%-$#}yzqsojLwH9cmOj$d;JYfM@ZDIn? zg42l5-7d3gv%m{M?BZAnSO{v&!Zy8FBRChl9b{rP_A_uE*bH6-?f@?V-vvuR zMx0I=m;&;CL+n^^5qKh40geEdg34>Q{h6(bm7un*Re{>HRt+u%F9nx_%fXf4WuUTt z1$ZBLIrua13h-I*8{l&wW7^m&;7V{CxC&G~Wd_;wvJaCdwwIO9_OkLt%$(69hISAC z<%>9dcrweU@u20?WJ<=Ow(66G0VKKVqNb8AR z#@sEGP^|U!#eEh#>xy=H3crVr588#M_g*+>daq0Cg=`>EKVLs?)yh5c)C|{~>BEfi z$Ls0LA9_=OW^TBy8?$|_1DMY2CT=>LRyLOGV(!(OwNwgQE}&LhZJb8(umjOzQT|(< zITzo_{8F56^8aVX_hbHBK53C;4YLtie|~Dra>*Lz2y!eZNy8|NT8C=*k2=sW?oJf5 zxnOCPv6U4~I}RI(WF!@=}JC-M=e|$ z0e3iTn$rrCC)LYo8u52;&$ArnlpRg#tah*OLtl44 zJ@7%W71YAs```wU5xUVtAA-tJrQ5bJ`D_c5FXH^wy_@E|>G~pO?}O#jd$N{qfa^sj5(J z#wFKR_1Dp)`l>LhuY>sAlfggZ5_`lN)4SDI7uQvJeVj%eUbFB5xk#N=jf~e>)kv?7 z_JgV1Od|%T5Hq2wg5WeKs>NtAmXs~7ueF;nP36*PFkeirQ`%Lxx`R_(+S8P!p68cf zPmulhW=3!WcmmgGT(cDljT_T5H-jpBX#rdI^4YSNFXH^(y_@Fz!SzMV*WN831!Tgy z;~KPPk0B~G&wlk)XKMO4zf1TIROgqo4pMbq^k1n?rZn`yd8;~mvAU-bLC8tap6B`6 zQ`MlEU#3~Lu-fw?uC4ZL!e_PT&+#?$Yk%SSW$yIn=T(#B+Ss14sr*RRp8Ke=%A=_5!6fc|9T~JEAxE5O^H;FxUrt4m<(e1oHYs zOy!gXss%~A*cK$8Z9(!`?P+Omx_nl9TAH+{<&*ZbG-*#ullHVUX-`X&_Ovu5Ws=JDA|hvSz64{gv>2EyqY^(Qa14$r18y zx1L5T;k${+tc35zZZ<37+}dMS!gt>Xt62%(Z6DmOgr{OddasSj{!$f4aZces^&g*X zLF=36`=mLJFn48ft>c$zKKf?)H0GFYXtH}P-)s0JJ=54s)~E4Y1X_xt)@*%c_$C`# zCBC)B_b5K~LMhHuzE2hUU;O&>^V|#E&Ei6}KrXqDnZo_#%}olU`t~f?W^)tEzTW1h zED3DuXsgMq(}8QVdVTP#)!tYGP=+nY6zIi*>HBT1j#q~|UFic;!LI*1q; z8Q8UM+3hMdIW4y8dOmp}=PkxAb+5g}SXo}{U7Glmhf+Et@ju|wUtx_%`MMR9{NIAd zgTDi1IlKnSV%rX?pZXJcHn;+Ub0Yz{sZXRQ6df)!l90bUBe1+E7F4yv}i z4c-L)1H2P#0q+Ih10MrhK@4fixI0Wnqo(`(#8VL>uM}f+lGr$~hG>hSA$c*bzm-d8#oR89ylF*2s{^j44eTz1I`3hw`YNB*}vvzmAiaaxyu(ZTVOXE z+PC>HU&Oo={-U9Mpa1gNQ;2O?^}IIhJlB`zT;kL86qc{rr|AhS?K+>Pmb}>M)obnD z>6zoNnx3=%jRP;R|*-Y6mpfBK+!|> zPM}=IRi6ZkT2q!!8Cu6cjVn2mrqD6?lrQN^3LdwAA$N|we5hf)x$+-$n~^s}rlD7m}g!I)umXkCgQhg!B=N*l>0*Frk?SE(O-yYp<@ zG^_UxhqV5z{z)#?m;4t?fRaVd_Mb6xtO(K&lAI#S@DccAD8?zn+EAn;_XK&2kshaT z%lVJ~xlZ{&jUwHiBga;-%*ZQ2=U6jhwtnyK3?o?- z%^rKsmd+m&D8U?)CJ2Yd@n4*8-25v{C@}|PKg#gTg{(4=JJNryk6p<}I$5SYv$w@Y zY4{S`j%necFddEE3T5h z8%}K-m-KWvw4MK6T*vu7M%u<5*G96@zabs?&>xN^dkZO2#Stt)4b;M+YBKpmBSl)< zi(`;0xsQ>o+pL!O&ORdR8@}t}=t)bfFLx<=QaRQjT$lXpYWv~PneN?xu4_VJD@-tj zN>?~Ekc4~bI>Gnx>Y;Hbw0ZU{6RNMh?c9IvN&jvuS$D&s)PUqHU-GlAqp;i8`sH( z=iWeE{r$L3a3%LQaRqDm02At5S8~g_KPTrAk&yGJ7#`_(?Wnxa_m9hH{Ee38qK3NjM}6M(*D!vR;zg@^EO_tAzKW8s__MbV_N$rWNi{W&iOlUf-_mN?4WRHAOAhcBYfX4T+)a(l1G_PT8CDPeXZgKDh-KCD4jD5 zkD97#o!ls2GCNjXN|xJ}*-Pqt-|#5Mf=@9TYB;o!{|c17l96bexTFc`aY>I?dq?|m zv8&X$(L9CK8|?q|U1F_M&lL`-)Z{)Ly|JCTA%hd^l*jd2_ZUAec7_@^#>5qT3fUgv z(98VSQykSb{r0v`G2ZY5pJJRZ`Bqo*xHgg}m{5KBFE?P>*WPX`8S|akdy{52b z7E+e2XkRQu+y=3mM7c=t_dR1fu^j>u4`7eSo|zL%o1HnMB|ktbueoNBsIBkxRkwTC z7RAduvPgQOPLX8nc7(otxHj<)`1hQ3K@v2 z%j%lO=95J#Yf1YySd9G+lQ5E>B;2t-y@b_hhJ^SEGCt-x^`GJV*Rg8a{oBu0R2PQ7 zh&bo9IJ6*kzaUYuI2{FsYLQ8vcdy&_wo-JP6lKG+eV(Fz;A3aORo4w>PdQFCGpKlQ z`Ufz-J9V6+c^uMxP9g>WTDh-8bUt9ue?r+HO?wp0vaKqSH(hL?ptIl(bv?Ohw;Os0 zti281FR6AEsYVT#?3EW0rkohe=l zO9-;^^s+#F&JA#?XAp|v46}ijiNi_5jr^s-eZ|8>$5$vP1lwZZ3>u%jPdzj6w0;;U z|B7(bZ7`r8p+(=|MD4>(^cb&K(tq88QThp5h6i-i_mO3ey;#2UrG-y77CxD%*>&Y6 zCh+|8zHa2bV*vWnqPc9Is+d67qdF}wm`{CJy$Gb6cQNT!ksUrt1`w*Am?EtJqJ9Gv zL64bbQC=+g(u_xM+G)SpC$sm=Tx;Wb>DuwOv)puQ68H{)INo%#0!ieCFV#Ztuaynx z1rPIwX%7UIV(2CSDTR2rM{d=SQWELLFu0)N^^A@KdlfAIT +#include +#include + +#pragma comment(lib, "detours.lib") +#pragma comment(lib, "ws2_32.lib") + +#define MASTERLIST_HOST_DEFAULT "masterlist.freeho.st" +#define MASTERLIST_PATH_DEFAULT "/sa-mp_masterlist/masterlist.txt" + +int (WINAPI *pSend)(SOCKET s, const char* buf, int len, int flags) = send; +int WINAPI HOOK_send(SOCKET s, const char* buf, int len, int flags); +struct hostent* FAR (WINAPI *pgethostbyname)(const char *cp) = gethostbyname; +struct hostent* FAR WINAPI HOOK_gethostbyname(const char *cp); + +char g_szHost[128]; +char g_szHTTPHeaders[256+200]; +int g_iHTTPHeadersLen; + +struct hostent* FAR WINAPI HOOK_gethostbyname(const char *cp) +{ + int iCurTab; + ReadProcessMemory(GetCurrentProcess(), (LPVOID)0x004EE6E8, &iCurTab, 4, 0); // current tab (fav/internet/hosted) + + if(!strcmp(cp, "lists.sa-mp.com") && iCurTab == 1) + return pgethostbyname(g_szHost); + + return pgethostbyname(cp); +} + +int WINAPI HOOK_send(SOCKET s, const char* buf, int len, int flags) +{ + if(strstr(buf, "GET /0.3.7/servers") != NULL) + return pSend(s, g_szHTTPHeaders, g_iHTTPHeadersLen, flags); + + return pSend(s, buf, len, flags); +} + +void LoadConfig() +{ + FILE *fileConfig; + bool bConfigWritten = false; + char szPath[128]; + + if(fopen_s(&fileConfig, "masterlist_fix.cfg", "r") == 0) + { + if(fgets(g_szHost, sizeof(g_szHost), fileConfig) != NULL && fgets(szPath, sizeof(szPath), fileConfig) != NULL) + { + g_szHost[strcspn(g_szHost, "\r\n")] = 0; + szPath[strcspn(szPath, "\r\n")] = 0; + + bConfigWritten = true; + } + fclose(fileConfig); + } + + if(!bConfigWritten) + { + strcpy_s(g_szHost, sizeof(g_szHost), MASTERLIST_HOST_DEFAULT); + strcpy_s(szPath, sizeof(szPath), MASTERLIST_PATH_DEFAULT); + } + + sprintf_s(g_szHTTPHeaders, sizeof(g_szHTTPHeaders), "\ +GET %s HTTP/1.1\r\n\ +Content-Type: text/html\r\n\ +Host: %s\r\n\ +Accept: text/html, */*\r\n\ +User-Agent: Mozilla/3.0 (compatible; SA:MP v0.3.7)\r\n\r\n", szPath, g_szHost); + + g_iHTTPHeadersLen = strlen(g_szHTTPHeaders); +} + +extern "C" __declspec(dllexport) void dummy(void) +{ + return; +} + +BOOL WINAPI DllMain(HINSTANCE hinst, DWORD dwReason, LPVOID reserved) +{ + if(DetourIsHelperProcess()) + { + return TRUE; + } + + if(dwReason == DLL_PROCESS_ATTACH) + { + LoadConfig(); + + DetourTransactionBegin(); + DetourUpdateThread(GetCurrentThread()); + DetourAttach(&(PVOID&)pSend, HOOK_send); + DetourTransactionCommit(); + + DetourTransactionBegin(); + DetourUpdateThread(GetCurrentThread()); + DetourAttach(&(PVOID&)pgethostbyname, HOOK_gethostbyname); + DetourTransactionCommit(); + } + else if(dwReason == DLL_PROCESS_DETACH) + { + DetourTransactionBegin(); + DetourUpdateThread(GetCurrentThread()); + DetourDetach(&(PVOID&)pSend, HOOK_send); + DetourTransactionCommit(); + + DetourTransactionBegin(); + DetourUpdateThread(GetCurrentThread()); + DetourDetach(&(PVOID&)pgethostbyname, HOOK_gethostbyname); + DetourTransactionCommit(); + } + return TRUE; +} diff --git a/hook/hook.vcxproj b/hook/hook.vcxproj new file mode 100644 index 0000000..cefd6cc --- /dev/null +++ b/hook/hook.vcxproj @@ -0,0 +1,88 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {AC1F8B56-A267-43D0-8036-0F3CBCBB374F} + Win32Proj + hook + + + + DynamicLibrary + true + Unicode + + + DynamicLibrary + false + true + Unicode + + + + + + + + + + + + + true + masterlist_fix + ..\detours;$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSdkDir)include;$(FrameworkSDKDir)\include; + ..\detours;$(VCInstallDir)lib;$(VCInstallDir)atlmfc\lib;$(WindowsSdkDir)lib;$(FrameworkSDKDir)\lib + + + false + masterlist_fix + ..\detours;$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSdkDir)include;$(FrameworkSDKDir)\include; + ..\detours;$(VCInstallDir)lib;$(VCInstallDir)atlmfc\lib;$(WindowsSdkDir)lib;$(FrameworkSDKDir)\lib + + + + + + Level3 + Disabled + WIN32;_DEBUG;_WINDOWS;_USRDLL;HOOK_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_WINDOWS;_USRDLL;HOOK_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + true + true + + + + + + + + + \ No newline at end of file diff --git a/hook/hook.vcxproj.filters b/hook/hook.vcxproj.filters new file mode 100644 index 0000000..5cc4618 --- /dev/null +++ b/hook/hook.vcxproj.filters @@ -0,0 +1,22 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Source Files + + + \ No newline at end of file diff --git a/injector/injector.cpp b/injector/injector.cpp new file mode 100644 index 0000000..9f2ad83 --- /dev/null +++ b/injector/injector.cpp @@ -0,0 +1,60 @@ +#include +#include +#include + +#pragma comment(lib, "detours.lib") + +BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam) +{ + DWORD dwPID; + GetWindowThreadProcessId(hwnd, &dwPID); + + if(dwPID == lParam) + { + SetFocus(hwnd); + return FALSE; + } + return TRUE; +} + +BOOL FileExists(LPCTSTR szPath) +{ + DWORD dwAttrib = GetFileAttributes(szPath); + + return (dwAttrib != INVALID_FILE_ATTRIBUTES && + !(dwAttrib & FILE_ATTRIBUTE_DIRECTORY)); +} + +int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) +{ + if(!FileExists(TEXT("samp.exe"))) + { + MessageBox(0, TEXT("SA-MP executable (samp.exe) not found!"), TEXT("Error"), MB_ICONERROR); + return EXIT_FAILURE; + } + + STARTUPINFO si; + PROCESS_INFORMATION pi; + + ZeroMemory(&si, sizeof(si)); + ZeroMemory(&pi, sizeof(pi)); + si.cb = sizeof(si); + si.dwFlags = STARTF_USESHOWWINDOW; + si.wShowWindow = SW_SHOW; + + DetourCreateProcessWithDllEx(TEXT("samp.exe"), + NULL, NULL, NULL, TRUE, + CREATE_DEFAULT_ERROR_MODE | CREATE_SUSPENDED, + NULL, NULL, &si, &pi, + "masterlist_fix.dll", NULL); + + + ResumeThread(pi.hThread); + EnumWindows(EnumWindowsProc, (LPARAM)(pi.dwProcessId)); + WaitForSingleObject(pi.hProcess, INFINITE); + + CloseHandle(&si); + CloseHandle(&pi); + + return EXIT_SUCCESS; +} diff --git a/injector/injector.vcxproj b/injector/injector.vcxproj new file mode 100644 index 0000000..734f2cd --- /dev/null +++ b/injector/injector.vcxproj @@ -0,0 +1,91 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {0F91D87C-7ED2-4D04-A419-6199253A477B} + Win32Proj + injector + + + + Application + true + Unicode + + + Application + false + true + Unicode + + + + + + + + + + + + + true + ..\detours;$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSdkDir)include;$(FrameworkSDKDir)\include; + ..\detours;$(VCInstallDir)lib;$(VCInstallDir)atlmfc\lib;$(WindowsSdkDir)lib;$(FrameworkSDKDir)\lib + masterlist_fix + + + false + ..\detours;$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSdkDir)include;$(FrameworkSDKDir)\include; + ..\detours;$(VCInstallDir)lib;$(VCInstallDir)atlmfc\lib;$(WindowsSdkDir)lib;$(FrameworkSDKDir)\lib + masterlist_fix + + + + + + Level3 + Disabled + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + + + Windows + true + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + + + Windows + true + true + true + + + + + + + + + + + + \ No newline at end of file diff --git a/injector/injector.vcxproj.filters b/injector/injector.vcxproj.filters new file mode 100644 index 0000000..3b24edf --- /dev/null +++ b/injector/injector.vcxproj.filters @@ -0,0 +1,27 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Source Files + + + + + Resource Files + + + \ No newline at end of file diff --git a/injector/resources/resource.rc b/injector/resources/resource.rc new file mode 100644 index 0000000..143e011 --- /dev/null +++ b/injector/resources/resource.rc @@ -0,0 +1 @@ +AAA ICON samp.ico diff --git a/injector/resources/samp.ico b/injector/resources/samp.ico new file mode 100644 index 0000000000000000000000000000000000000000..bd17d219cae839d3521aa4d2ff55ba490ba86ba5 GIT binary patch literal 2238 zcmeH|T})GF7{~ukp%tVbKq(XtJx~h$IvdwJHY~H9@T$W`~vn(@Sc%{49vKyDUc*)M`t(RWxVtY>B_dM_O z%m2yqob$ft0Nc2WB*D!>d?Ey@0BE?uh0wtbKF-^lI|{d#Ca3KzwpWF4?96G9^$Og6 z{0Er$Frsstkd*B}Z2demMki=*2~W+ZF0X~jWX8b4XAlUA5juPtpMU=Va#agPR=>v6tu0)+`4ep2 z-SGQDfY=4^_?MW>okFvf>tk#ZO)X(4YRZsZSwqWSD^6@|KxME&Bs3#Ddj|*DW0*hl z1^P0Varen{xChVS#xIYc*0RudEFn3w2$e<$d-q{PCO7fu#TFzIDV%{R$mRRd+@wTk z^7b?cZRw zMWHc!aQwwf5cDK{xP$!e>n8Pue zp_q8gS1RSXdpMEEi%X&_mF-h`yO>F886{{o zs>s^psno}$* zNIKN}suBX8cNH&>cnw~&do0~wo*wjM35FsC**@vm8o~3O?e0Ttt24RqXfw}n(`RkK0ZAV>-eHQvgQ!-9%ln`n$Yu3ZZ+DrJj8njzmixgI9xQ+9`4f= z7T&G_?@(^s9u5Xo>ViBN*69Y?<-)?Ebs?}IT5Pk~+H_$GT4)FwwMm|vceMtW z8?~c*U$f4O#hup5y&jFqm0cQ@NDB4Un2S~yhAJB7Rul@w+*n+k?w;*VcWVeqUyRr9 zF}q6_mIsGx-1W|UzK1&iYp%45AgdZ@3j3qX++{B-%earYrOq*#pod{noDur^okw@_ L`d71m`)l_P;s1p4 literal 0 HcmV?d00001 diff --git a/sa-mp_masterlist_fix.sln b/sa-mp_masterlist_fix.sln new file mode 100644 index 0000000..26b1f0b --- /dev/null +++ b/sa-mp_masterlist_fix.sln @@ -0,0 +1,26 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual C++ Express 2010 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "injector", "injector\injector.vcxproj", "{0F91D87C-7ED2-4D04-A419-6199253A477B}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hook", "hook\hook.vcxproj", "{AC1F8B56-A267-43D0-8036-0F3CBCBB374F}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {0F91D87C-7ED2-4D04-A419-6199253A477B}.Debug|Win32.ActiveCfg = Debug|Win32 + {0F91D87C-7ED2-4D04-A419-6199253A477B}.Debug|Win32.Build.0 = Debug|Win32 + {0F91D87C-7ED2-4D04-A419-6199253A477B}.Release|Win32.ActiveCfg = Release|Win32 + {0F91D87C-7ED2-4D04-A419-6199253A477B}.Release|Win32.Build.0 = Release|Win32 + {AC1F8B56-A267-43D0-8036-0F3CBCBB374F}.Debug|Win32.ActiveCfg = Debug|Win32 + {AC1F8B56-A267-43D0-8036-0F3CBCBB374F}.Debug|Win32.Build.0 = Debug|Win32 + {AC1F8B56-A267-43D0-8036-0F3CBCBB374F}.Release|Win32.ActiveCfg = Release|Win32 + {AC1F8B56-A267-43D0-8036-0F3CBCBB374F}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/update_masterlist.php b/update_masterlist.php new file mode 100644 index 0000000..fcd0319 --- /dev/null +++ b/update_masterlist.php @@ -0,0 +1,58 @@ +', $pos); + $pos = strpos($page, '= MIN_SERVERS_FOR_REWRITE) + copy(MASTERLIST_FILE_TEMP, MASTERLIST_FILE); +unlink(MASTERLIST_FILE_TEMP); + +$exec_time = microtime(true)-$start_time; +echo $servers.' servers fetched in '.$exec_time. ' seconds.'; + +if(defined('LOG_EXECTIME_FILE')) +{ + $log = fopen(LOG_EXECTIME_FILE, 'a'); + fwrite($log, '['.date('Y/m/d H:i:s').'] '.$servers.' servers fetched in '.$exec_time. ' seconds.'."\n"); + fclose($log); +} +?>