From fea9c6052fa60ba34fd44d6b85a48aca19d4534c Mon Sep 17 00:00:00 2001 From: wingsummer <1326224942@qq.com> Date: Tue, 23 Aug 2022 18:17:27 +0800 Subject: [PATCH] first commit --- .gitignore | 2 + README.md | 54 +++++++ WingHexAsm.json | 3 + WingHexAsm.pro | 52 +++++++ WingHexAsm.qm | Bin 0 -> 942 bytes WingHexAsm.ts | 69 +++++++++ img/README.md | 16 ++ img/icon.png | Bin 0 -> 8252 bytes keystone/arm.h | 23 +++ keystone/arm64.h | 23 +++ keystone/evm.h | 23 +++ keystone/hexagon.h | 24 +++ keystone/keystone.h | 341 +++++++++++++++++++++++++++++++++++++++++ keystone/libkeystone.a | Bin 0 -> 11482368 bytes keystone/mips.h | 23 +++ keystone/ppc.h | 24 +++ keystone/sparc.h | 24 +++ keystone/systemz.h | 24 +++ keystone/x86.h | 23 +++ resource.qrc | 6 + winghexasm.cpp | 255 ++++++++++++++++++++++++++++++ winghexasm.h | 52 +++++++ 微信捐助.png | Bin 0 -> 54225 bytes 支付宝捐助.jpg | Bin 0 -> 78964 bytes 24 files changed, 1061 insertions(+) create mode 100755 .gitignore create mode 100644 README.md create mode 100644 WingHexAsm.json create mode 100644 WingHexAsm.pro create mode 100644 WingHexAsm.qm create mode 100644 WingHexAsm.ts create mode 100644 img/README.md create mode 100644 img/icon.png create mode 100644 keystone/arm.h create mode 100644 keystone/arm64.h create mode 100644 keystone/evm.h create mode 100644 keystone/hexagon.h create mode 100644 keystone/keystone.h create mode 100644 keystone/libkeystone.a create mode 100644 keystone/mips.h create mode 100644 keystone/ppc.h create mode 100644 keystone/sparc.h create mode 100644 keystone/systemz.h create mode 100644 keystone/x86.h create mode 100644 resource.qrc create mode 100644 winghexasm.cpp create mode 100644 winghexasm.h create mode 100755 微信捐助.png create mode 100755 支付宝捐助.jpg diff --git a/.gitignore b/.gitignore new file mode 100755 index 0000000..5ee5d2c --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +**/*.pro.user +push.sh diff --git a/README.md b/README.md new file mode 100644 index 0000000..fc2a911 --- /dev/null +++ b/README.md @@ -0,0 +1,54 @@ +
+
+
WingHexAsm
+ + +
+
+
+
+
+
WingHexAsm
+ + +## 注意事项 + + 本插件仅支持`SDKVERSION >= 8`以上的“羽云十六进制编辑器”,也就是 1.4.8 及其以上的版本(该版本未被发布,请自行编译,预计 2022/8/25 发布该版本)。 + +## 捐助 + +**您的每一份支持都将是本项目推进的强大动力,十分感谢您的支持
** + +
+
+
+
感谢支持
+ + + +
+
+
感谢支持
+ + + +## 有关仓库 + +* Gitea : https://code.gitlink.org.cn/wingsummer/WingHexAsm +* Gitee : https://gitee.com/wing-cloud/wing-hex-asm diff --git a/WingHexAsm.json b/WingHexAsm.json new file mode 100644 index 0000000..1e81138 --- /dev/null +++ b/WingHexAsm.json @@ -0,0 +1,3 @@ +{ + "Keys" : [ ] +} diff --git a/WingHexAsm.pro b/WingHexAsm.pro new file mode 100644 index 0000000..9ea65ae --- /dev/null +++ b/WingHexAsm.pro @@ -0,0 +1,52 @@ +#------------------------------------------------- +# +# Project created by QtCreator 2022-08-22T22:25:35 +# +#------------------------------------------------- + +QT += core gui + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + +TARGET = WingHexAsm +TEMPLATE = lib +CONFIG += plugin + +# The following define makes your compiler emit warnings if you use +# any feature of Qt which has been marked as deprecated (the exact warnings +# depend on your compiler). Please consult the documentation of the +# deprecated API in order to know how to port your code away from it. +DEFINES += QT_DEPRECATED_WARNINGS + +# You can also make your code fail to compile if you use deprecated APIs. +# In order to do so, uncomment the following line. +# You can also select to disable deprecated APIs only up to a certain version of Qt. +#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 + +SOURCES += \ + winghexasm.cpp + +HEADERS += \ + winghexasm.h \ + ../WingHexExplorer/wing-hex-explorer.sourcecode/WingHexExplorer/plugin/iwingplugin.h \ + keystone/arm.h \ + keystone/arm64.h \ + keystone/evm.h \ + keystone/hexagon.h \ + keystone/keystone.h \ + keystone/mips.h \ + keystone/ppc.h \ + keystone/sparc.h \ + keystone/systemz.h \ + keystone/x86.h + +LIBS += $$PWD/keystone/libkeystone.a + +DISTFILES += WingHexAsm.json + +RESOURCES += \ + resource.qrc + +TRANSLATIONS += \ + $$PWD/WingHexAsm.ts + diff --git a/WingHexAsm.qm b/WingHexAsm.qm new file mode 100644 index 0000000000000000000000000000000000000000..cd1fc8d559e4b91832452303abf9c7bf650e7660 GIT binary patch literal 942 zcmcE7ks@*G{hX<16=n7(EZlo{IRgU&YgIx!(5Ndar za+T4|ppu6p$0HgkBr>i8aWc3Wz<~Zw!wrv}Qj%=;lL8Q{{zQ?#s*Mc7fRZ;(4bKc* z{noKQQHPk3EIe#ON8woH+x~FpcX}4Le@vNwC%da(li-7kZp({(%c0lA)w R zs3h+khD@Ux+oUu+M}=!|S4UQ8&lm5X%LkX~_DNn5gB|u5z32ZW<_mgY%l-hCeP)aU z{;{0qE5M;94yMx&KM|=)T#8@=%9D}QA@9wa31oh$5dTx`t9zqzcoACkH<*ZPei>3Z z)j`>HpONu3F7~6QY>j^a8Dgs4^Y!HOD4cdj$ZeZ;y_PVnJU)WsD2EM`t-kO2e`@`< zA149(JCb-d#?P9;BA4Q9)$cGkq;%`K*zBgI+nC&TDgf3mr#~mWT$Ni#- WXPd= 1Em{akp@QbB z$F@? a$*5&2IcwBuCapa5!AxU##G>0``qC~jX!nwt-n3v?RP{)&T&R^_!vnCim_Nf+p>fJ)nRO`=-FA6#k4U_@uH8?G$alWrBd zu|iv0afk#*=k9tM|5Sd)!{taM%*L)Ic-IrFcwLXq)q=cJCDl?1Vvb;^dY@JfomB9N zp|s6+F`Qg1i)(+YoCjECU{Q{H%JM#VV?r3cthHE4!5?*YdiHQxGCx&|jsBW1PStr1 zB(c1>&Y+nJhSU+Dx>-dcdB8j jbT`I)==3nZ)H5>MZ5(MtquZfe=Ufarbv;TXgQ+i!#;TTY6HfVG z5CJv#q}79UKBF=A=D;n#QFQa^r|Mc?Qqb7{XQ)Sls|Kr>JS1a2`gZ_;f{dzk^;^@A F{|7TBv;+VE literal 0 HcmV?d00001 diff --git a/keystone/arm.h b/keystone/arm.h new file mode 100644 index 0000000..f4d2489 --- /dev/null +++ b/keystone/arm.h @@ -0,0 +1,23 @@ +/* Keystone Assembler Engine */ +/* By Nguyen Anh Quynh, 2016 */ + +#ifndef KEYSTONE_ARM_H +#define KEYSTONE_ARM_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "keystone.h" + +typedef enum ks_err_asm_arm { + KS_ERR_ASM_ARM_INVALIDOPERAND = KS_ERR_ASM_ARCH, + KS_ERR_ASM_ARM_MISSINGFEATURE, + KS_ERR_ASM_ARM_MNEMONICFAIL, +} ks_err_asm_arm; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/keystone/arm64.h b/keystone/arm64.h new file mode 100644 index 0000000..7a7af41 --- /dev/null +++ b/keystone/arm64.h @@ -0,0 +1,23 @@ +/* Keystone Assembler Engine */ +/* By Nguyen Anh Quynh, 2016 */ + +#ifndef KEYSTONE_ARM64_H +#define KEYSTONE_ARM64_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "keystone.h" + +typedef enum ks_err_asm_arm64 { + KS_ERR_ASM_ARM64_INVALIDOPERAND = KS_ERR_ASM_ARCH, + KS_ERR_ASM_ARM64_MISSINGFEATURE, + KS_ERR_ASM_ARM64_MNEMONICFAIL, +} ks_err_asm_arm64; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/keystone/evm.h b/keystone/evm.h new file mode 100644 index 0000000..60ac408 --- /dev/null +++ b/keystone/evm.h @@ -0,0 +1,23 @@ +/* Keystone Assembler Engine */ +/* By Nguyen Anh Quynh, 2016-2018 */ + +#ifndef KEYSTONE_EVM_H +#define KEYSTONE_EVM_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "keystone.h" + +typedef enum ks_err_asm_evm { + KS_ERR_ASM_EVM_INVALIDOPERAND = KS_ERR_ASM_ARCH, + KS_ERR_ASM_EVM_MISSINGFEATURE, + KS_ERR_ASM_EVM_MNEMONICFAIL, +} ks_err_asm_evm; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/keystone/hexagon.h b/keystone/hexagon.h new file mode 100644 index 0000000..e615812 --- /dev/null +++ b/keystone/hexagon.h @@ -0,0 +1,24 @@ +/* Keystone Assembler Engine */ +/* By Nguyen Anh Quynh, 2016 */ + +#ifndef KEYSTONE_HEXAGON_H +#define KEYSTONE_HEXAGON_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "keystone.h" + +typedef enum ks_err_asm_hexagon { + KS_ERR_ASM_HEXAGON_INVALIDOPERAND = KS_ERR_ASM_ARCH, + KS_ERR_ASM_HEXAGON_MISSINGFEATURE, + KS_ERR_ASM_HEXAGON_MNEMONICFAIL, +} ks_err_asm_hexagon; + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/keystone/keystone.h b/keystone/keystone.h new file mode 100644 index 0000000..e29235e --- /dev/null +++ b/keystone/keystone.h @@ -0,0 +1,341 @@ +/* Keystone Assembler Engine (www.keystone-engine.org) */ +/* By Nguyen Anh Quynh , 2016 */ + +#ifndef KEYSTONE_ENGINE_H +#define KEYSTONE_ENGINE_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include +#include + +#ifdef _MSC_VER // MSVC compiler +#pragma warning(disable:4201) +#pragma warning(disable:4100) +#ifndef KEYSTONE_STATIC +#define KEYSTONE_EXPORT __declspec(dllexport) +#else +#define KEYSTONE_EXPORT +#endif +#else +#ifdef __GNUC__ +#include +#ifndef KEYSTONE_STATIC +#define KEYSTONE_EXPORT __attribute__((visibility("default"))) +#else +#define KEYSTONE_EXPORT +#endif +#else +#define KEYSTONE_EXPORT +#endif +#endif + + +struct ks_struct; +typedef struct ks_struct ks_engine; + +// Keystone API version +#define KS_API_MAJOR 0 +#define KS_API_MINOR 9 + +// Package version +#define KS_VERSION_MAJOR KS_API_MAJOR +#define KS_VERSION_MINOR KS_API_MINOR +#define KS_VERSION_EXTRA 2 + +/* + Macro to create combined version which can be compared to + result of ks_version() API. +*/ +#define KS_MAKE_VERSION(major, minor) ((major << 8) + minor) + +// Architecture type +typedef enum ks_arch { + KS_ARCH_ARM = 1, // ARM architecture (including Thumb, Thumb-2) + KS_ARCH_ARM64, // ARM-64, also called AArch64 + KS_ARCH_MIPS, // Mips architecture + KS_ARCH_X86, // X86 architecture (including x86 & x86-64) + KS_ARCH_PPC, // PowerPC architecture (currently unsupported) + KS_ARCH_SPARC, // Sparc architecture + KS_ARCH_SYSTEMZ, // SystemZ architecture (S390X) + KS_ARCH_HEXAGON, // Hexagon architecture + KS_ARCH_EVM, // Ethereum Virtual Machine architecture + KS_ARCH_MAX, +} ks_arch; + +// Mode type +typedef enum ks_mode { + KS_MODE_LITTLE_ENDIAN = 0, // little-endian mode (default mode) + KS_MODE_BIG_ENDIAN = 1 << 30, // big-endian mode + // arm / arm64 + KS_MODE_ARM = 1 << 0, // ARM mode + KS_MODE_THUMB = 1 << 4, // THUMB mode (including Thumb-2) + KS_MODE_V8 = 1 << 6, // ARMv8 A32 encodings for ARM + // mips + KS_MODE_MICRO = 1 << 4, // MicroMips mode + KS_MODE_MIPS3 = 1 << 5, // Mips III ISA + KS_MODE_MIPS32R6 = 1 << 6, // Mips32r6 ISA + KS_MODE_MIPS32 = 1 << 2, // Mips32 ISA + KS_MODE_MIPS64 = 1 << 3, // Mips64 ISA + // x86 / x64 + KS_MODE_16 = 1 << 1, // 16-bit mode + KS_MODE_32 = 1 << 2, // 32-bit mode + KS_MODE_64 = 1 << 3, // 64-bit mode + // ppc + KS_MODE_PPC32 = 1 << 2, // 32-bit mode + KS_MODE_PPC64 = 1 << 3, // 64-bit mode + KS_MODE_QPX = 1 << 4, // Quad Processing eXtensions mode + // sparc + KS_MODE_SPARC32 = 1 << 2, // 32-bit mode + KS_MODE_SPARC64 = 1 << 3, // 64-bit mode + KS_MODE_V9 = 1 << 4, // SparcV9 mode +} ks_mode; + +// All generic errors related to input assembly >= KS_ERR_ASM +#define KS_ERR_ASM 128 + +// All architecture-specific errors related to input assembly >= KS_ERR_ASM_ARCH +#define KS_ERR_ASM_ARCH 512 + +// All type of errors encountered by Keystone API. +typedef enum ks_err { + KS_ERR_OK = 0, // No error: everything was fine + KS_ERR_NOMEM, // Out-Of-Memory error: ks_open(), ks_emulate() + KS_ERR_ARCH, // Unsupported architecture: ks_open() + KS_ERR_HANDLE, // Invalid handle + KS_ERR_MODE, // Invalid/unsupported mode: ks_open() + KS_ERR_VERSION, // Unsupported version (bindings) + KS_ERR_OPT_INVALID, // Unsupported option + + // generic input assembly errors - parser specific + KS_ERR_ASM_EXPR_TOKEN = KS_ERR_ASM, // unknown token in expression + KS_ERR_ASM_DIRECTIVE_VALUE_RANGE, // literal value out of range for directive + KS_ERR_ASM_DIRECTIVE_ID, // expected identifier in directive + KS_ERR_ASM_DIRECTIVE_TOKEN, // unexpected token in directive + KS_ERR_ASM_DIRECTIVE_STR, // expected string in directive + KS_ERR_ASM_DIRECTIVE_COMMA, // expected comma in directive + KS_ERR_ASM_DIRECTIVE_RELOC_NAME, // expected relocation name in directive + KS_ERR_ASM_DIRECTIVE_RELOC_TOKEN, // unexpected token in .reloc directive + KS_ERR_ASM_DIRECTIVE_FPOINT, // invalid floating point in directive + KS_ERR_ASM_DIRECTIVE_UNKNOWN, // unknown directive + KS_ERR_ASM_DIRECTIVE_EQU, // invalid equal directive + KS_ERR_ASM_DIRECTIVE_INVALID, // (generic) invalid directive + KS_ERR_ASM_VARIANT_INVALID, // invalid variant + KS_ERR_ASM_EXPR_BRACKET, // brackets expression not supported on this target + KS_ERR_ASM_SYMBOL_MODIFIER, // unexpected symbol modifier following '@' + KS_ERR_ASM_SYMBOL_REDEFINED, // invalid symbol redefinition + KS_ERR_ASM_SYMBOL_MISSING, // cannot find a symbol + KS_ERR_ASM_RPAREN, // expected ')' in parentheses expression + KS_ERR_ASM_STAT_TOKEN, // unexpected token at start of statement + KS_ERR_ASM_UNSUPPORTED, // unsupported token yet + KS_ERR_ASM_MACRO_TOKEN, // unexpected token in macro instantiation + KS_ERR_ASM_MACRO_PAREN, // unbalanced parentheses in macro argument + KS_ERR_ASM_MACRO_EQU, // expected '=' after formal parameter identifier + KS_ERR_ASM_MACRO_ARGS, // too many positional arguments + KS_ERR_ASM_MACRO_LEVELS_EXCEED, // macros cannot be nested more than 20 levels deep + KS_ERR_ASM_MACRO_STR, // invalid macro string + KS_ERR_ASM_MACRO_INVALID, // invalid macro (generic error) + KS_ERR_ASM_ESC_BACKSLASH, // unexpected backslash at end of escaped string + KS_ERR_ASM_ESC_OCTAL, // invalid octal escape sequence (out of range) + KS_ERR_ASM_ESC_SEQUENCE, // invalid escape sequence (unrecognized character) + KS_ERR_ASM_ESC_STR, // broken escape string + KS_ERR_ASM_TOKEN_INVALID, // invalid token + KS_ERR_ASM_INSN_UNSUPPORTED, // this instruction is unsupported in this mode + KS_ERR_ASM_FIXUP_INVALID, // invalid fixup + KS_ERR_ASM_LABEL_INVALID, // invalid label + KS_ERR_ASM_FRAGMENT_INVALID, // invalid fragment + + // generic input assembly errors - architecture specific + KS_ERR_ASM_INVALIDOPERAND = KS_ERR_ASM_ARCH, + KS_ERR_ASM_MISSINGFEATURE, + KS_ERR_ASM_MNEMONICFAIL, +} ks_err; + +// Resolver callback to provide value for a missing symbol in @symbol. +// To handle a symbol, the resolver must put value of the symbol in @value, +// then returns True. +// If we do not resolve a missing symbol, this function must return False. +// In that case, ks_asm() would eventually return with error KS_ERR_ASM_SYMBOL_MISSING. + +// To register the resolver, pass its function address to ks_option(), using +// option KS_OPT_SYM_RESOLVER. For example, see samples/sample.c. +typedef bool (*ks_sym_resolver)(const char *symbol, uint64_t *value); + +// Runtime option for the Keystone engine +typedef enum ks_opt_type { + KS_OPT_SYNTAX = 1, // Choose syntax for input assembly + KS_OPT_SYM_RESOLVER, // Set symbol resolver callback +} ks_opt_type; + + +// Runtime option value (associated with ks_opt_type above) +typedef enum ks_opt_value { + KS_OPT_SYNTAX_INTEL = 1 << 0, // X86 Intel syntax - default on X86 (KS_OPT_SYNTAX). + KS_OPT_SYNTAX_ATT = 1 << 1, // X86 ATT asm syntax (KS_OPT_SYNTAX). + KS_OPT_SYNTAX_NASM = 1 << 2, // X86 Nasm syntax (KS_OPT_SYNTAX). + KS_OPT_SYNTAX_MASM = 1 << 3, // X86 Masm syntax (KS_OPT_SYNTAX) - unsupported yet. + KS_OPT_SYNTAX_GAS = 1 << 4, // X86 GNU GAS syntax (KS_OPT_SYNTAX). + KS_OPT_SYNTAX_RADIX16 = 1 << 5, // All immediates are in hex format (i.e 12 is 0x12) +} ks_opt_value; + + +#include "arm64.h" +#include "arm.h" +#include "evm.h" +#include "hexagon.h" +#include "mips.h" +#include "ppc.h" +#include "sparc.h" +#include "systemz.h" +#include "x86.h" + +/* + Return combined API version & major and minor version numbers. + + @major: major number of API version + @minor: minor number of API version + + @return hexical number as (major << 8 | minor), which encodes both + major & minor versions. + NOTE: This returned value can be compared with version number made + with macro KS_MAKE_VERSION + + For example, second API version would return 1 in @major, and 1 in @minor + The return value would be 0x0101 + + NOTE: if you only care about returned value, but not major and minor values, + set both @major & @minor arguments to NULL. +*/ +KEYSTONE_EXPORT +unsigned int ks_version(unsigned int *major, unsigned int *minor); + + +/* + Determine if the given architecture is supported by this library. + + @arch: architecture type (KS_ARCH_*) + + @return True if this library supports the given arch. +*/ +KEYSTONE_EXPORT +bool ks_arch_supported(ks_arch arch); + + +/* + Create new instance of Keystone engine. + + @arch: architecture type (KS_ARCH_*) + @mode: hardware mode. This is combined of KS_MODE_* + @ks: pointer to ks_engine, which will be updated at return time + + @return KS_ERR_OK on success, or other value on failure (refer to ks_err enum + for detailed error). +*/ +KEYSTONE_EXPORT +ks_err ks_open(ks_arch arch, int mode, ks_engine **ks); + + +/* + Close KS instance: MUST do to release the handle when it is not used anymore. + NOTE: this must be called only when there is no longer usage of Keystone. + The reason is the this API releases some cached memory, thus access to any + Keystone API after ks_close() might crash your application. + After this, @ks is invalid, and nolonger usable. + + @ks: pointer to a handle returned by ks_open() + + @return KS_ERR_OK on success, or other value on failure (refer to ks_err enum + for detailed error). +*/ +KEYSTONE_EXPORT +ks_err ks_close(ks_engine *ks); + + +/* + Report the last error number when some API function fail. + Like glibc's errno, ks_errno might not retain its old error once accessed. + + @ks: handle returned by ks_open() + + @return: error code of ks_err enum type (KS_ERR_*, see above) +*/ +KEYSTONE_EXPORT +ks_err ks_errno(ks_engine *ks); + + +/* + Return a string describing given error code. + + @code: error code (see KS_ERR_* above) + + @return: returns a pointer to a string that describes the error code + passed in the argument @code + */ +KEYSTONE_EXPORT +const char *ks_strerror(ks_err code); + + +/* + Set option for Keystone engine at runtime + + @ks: handle returned by ks_open() + @type: type of option to be set. See ks_opt_type + @value: option value corresponding with @type + + @return: KS_ERR_OK on success, or other value on failure. + Refer to ks_err enum for detailed error. +*/ +KEYSTONE_EXPORT +ks_err ks_option(ks_engine *ks, ks_opt_type type, size_t value); + + +/* + Assemble a string given its the buffer, size, start address and number + of instructions to be decoded. + This API dynamically allocate memory to contain assembled instruction. + Resulted array of bytes containing the machine code is put into @*encoding + + NOTE 1: this API will automatically determine memory needed to contain + output bytes in *encoding. + + NOTE 2: caller must free the allocated memory itself to avoid memory leaking. + + @ks: handle returned by ks_open() + @str: NULL-terminated assembly string. Use ; or \n to separate statements. + @address: address of the first assembly instruction, or 0 to ignore. + @encoding: array of bytes containing encoding of input assembly string. + NOTE: *encoding will be allocated by this function, and should be freed + with ks_free() function. + @encoding_size: size of *encoding + @stat_count: number of statements successfully processed + + @return: 0 on success, or -1 on failure. + + On failure, call ks_errno() for error code. +*/ +KEYSTONE_EXPORT +int ks_asm(ks_engine *ks, + const char *string, + uint64_t address, + unsigned char **encoding, size_t *encoding_size, + size_t *stat_count); + + +/* + Free memory allocated by ks_asm() + + @p: memory allocated in @encoding argument of ks_asm() +*/ +KEYSTONE_EXPORT +void ks_free(unsigned char *p); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/keystone/libkeystone.a b/keystone/libkeystone.a new file mode 100644 index 0000000000000000000000000000000000000000..1193228bcce7105a2236a1db2330cecb4ff61675 GIT binary patch literal 11482368 zcmeFaeTZyJawk^S%nFSpV_74{YsQjBvSg28EcH3{(bcdR^+)x4J+J$AtE=yQ!$`QM zy6SXy^{cN}ANSrKwBD7Fg^c%))vo^7KO``_0?Qyv0*m!xgt4(~jFF8n`^RDyR+s_H zMzDg_KL+{Z7m?q2GS4~H-M8<1qdQE^yw@i(GBPqUGBPqE@<;w!e=)fE_rCilzvTXB z%lcRG&-VX*=}Sp#XS>CJ`o?$HYTxs^_8ou!EBF8Xv)`?K$0Pne^E=;Ld+_gn{mt5E z?)&?{f3fzNC-{B#%kx_0-@&ieK3nDY?{C#U`zibVl^^+5t@M|Ct@c;m{YrW8oqzUo zwdn8vdtLj^zeK<9`nUeP_NIQH`;Kqa-q`PFf2;O6`py2h_PN*pxc0ff`CY-^cYp3H zwRb<42jBCV|D;y=_d~x|`<|!x{n{VZzUMFT?_c>3f2&5n@2h_~`ukV^;`eHy-}nEw ze_Y%6_rLu>?fc)*@AKdBk7}jA@Bi7_=O6R8`+n{7Remr2wD$SO`2ET^YM hf4laD`~0qfPyMFfSNj6} z?*5|M?;p-Ldv@UM4Md+&*Ur~k)iYoDaw*%!Z2EB&Q^SUY=5zvl h$XAJ?9LLVh3qJ72Cn^!N22J+ATZgFmW$eUsn+^n10hKlbm>{;c-( zcfTMHe&!ecTCLLWAO2MBXWruP8~^X0*B F)4#v?javT+e%IgsQ?-qL$uHKf zpW^rXH??d0Za({m<-Z@C*KWSee; $m(* zzfz0-;4@g_xB9_<`gp$&ez~@izxD6@LG96gfAYt*^{3$X&3|xQ z{rTUj{f!6ye*VL6)Czz9aijM0Wxv0_Rr`7Q`-T7EPiy@9*6Z3Ye8PUe^wpoO>EDNc zwf0M!{HCkgFMY~>zw%%IX6>QBzq1 (uP#>HciGT=l1`v)OE%BpDENrmMv$TXxQ=xrM% vX3rS+3Qv37N45kljGT-097-a%vX1vmo}AYy1QIvlgn|ou*qF+ z6S=$NaS5rdgKWCYPWtnsRkrA_W{aaUPy)ib* Wlveh -4*wQ%nIh?yg!dMT73DF{imX(`&<;;b+|hGwh)1bo)o$CT2O=?w$0og2v<7pf`e~ zELKNf *=~Tc>Nk+z3FTL5_=;pM*zd*cRC02(~Dm1;KQF-WLH0dCa+)j z=GkI7oA$?})m`u9mOaoNh@u>}1Z5hf4gVtp$_BjzRQas)}l-lV=pLb?ZH5!vTiS z8NKeDe<0ba)Jtq)(>f;hbg>V%tulvTZ$$REW5|s5$O)OFPGb5aS@d7^W=qzBNiw+U zPp?7Kc(%X--s-jZAD5j=cO^QFwielv1eMx2nkR9<(na $t|NbYzArFCdn_4kYZ0+S)XG6%Pb zA@f%R-xF+s8Y&S^BOl g@#l!TMvnww6n4AU-Mz2Eegh Glik`lo(JxSeFyLW!s!y?O$ED34rsZsiu#K6!>3wR5vHz!9sL`HX&Z1uX? z7}A|AS4Z7_sH0V5oGq6}G+{Ip{HfE1g2v8`-SiAC>WU7i<6*`SVkZa^=yxr538u2q zJDN=LR6wEoRFIA@rUDS|eq{C`p9GAGtc&2j!y35K1VMW@fTe7L{Lb$`{&WY^08JzJ z$llFpy6UZ`qmS2FZ$4XsXQ`Q*0hyI%qohsp9IL)yqMk&O9yA7sq8WoSJFK Qq{H4M&^mOIL3$yqGS|04Z=$1kpl|h*AShu^&$zFf(Q8pbmd6#r|DH^kZNVeyT z*#OJ;aP)dTf6*VWGuRZQuA#!U4R8Nxa@@b0tykht+b8?nP@E#@>~Xm0Ur%6#>hBWg z nh#G+i)#KO$#107bmuyo z()j}B!DQYate#I_jixvj4Q9j9l<~E97mNPgd3ME?Elx@Mhet hjdtlMDQmm z2F2|8fY5@eJ2?0OGw>C*YuW9NU@`L0Fd+t6(Xh5XGsH1BJR8WFg|vM|Qt&LxhD&Tx z{nxxn?G9h|rvn&8EEjslFDJB9^b*+Y0v3lock+b@DS07^Z7apdAP!_imAz6Nvb?jW zEx!9nk(e9^#F1_fira1pqO8T4BkIChm${Ed>cAlkmgX^SV`iVtrrGOkuwM1SvF-{h z)jqKS7}hzTzHN?KIGQkgpD(i`09}*t4)rP!M^`P4R-5){DLdI+%_gI7QrCNT!bF4L zfF=^qiVjD(43=bPw8Uy24WCaxUeD0+Gx#t9Vy$M`v^ x4~_4Yv62rX3lofFlFgATi9*xBopO=!FqVm*#ujFF`k5) z;rr5QzR2aGrP}%;B-+|g%r|1QC9m#>w VV@58?OX^23)G zj~_V|8W=}FLkFPTNeKYty2=eD&`}P??I!nGc4938Z@}J42z|Abeqb0rf*6Q}B}b)? zBM9);mZesv3ENY=cOCQ>u#VErcM`qEeO!T6?t{2{i-&MR#?poD5 7id5NCaCdeZcD>}01|ie>`ncr^VeTf7)8M>u$h^F|c}WWdvb zrFx5`p1p(<1IHram#};p>LBVKW5prXaa=$qaLUzwi`z0sycRxZ@X5{qUWGLXksc9t zYQ*SqT_@hf2OEvT?UFQbK>_!RLdus5PUC{<*y0NY)$|Nkz~tr-B-tF8(3MaU67a}S zTZ~wp(r}$EWCSZq9Vr9jj;_lj5#F8n3=(-Z!S0lv-xl#8 BM!aI1aX?V`m*FP_NYQV40JL0r7j zD>xdLH_DGmJaV|^v }qFJbCUV}k_Z5=ZEJ3^+dizh7>7Rhv>6uo-kFBM$!{>4j> ztOVQO^=Jv>L+dO^hD8c-!J^jOxtg7fsD11U1kDv!t{R$JanH&s&`@$lTZnxI4zF{| zBUGvhTqDRf8Z uH{=RbElKOR_e25W z=!&SjzFcu6$^LA9C(SrGAM~I3ARp aNEUL^vcXd4*)(9}ny|iRYw0xH)|Qrkvylh_XXs zZgu#}t lUt5=p_q>1NE1K^ Jdz^(a3IUY MV?LxqX+Me8xC%PT B2DglOD)j|}&NDI%jN0PqOnu&u+ubT}>v=w&z}>QUF{gQAGA ze9y5bhUFto<)ygZP1P>tY*T5fjTe|Xh@4Xa$(J0D&JLHh24VYVukQz=7a@U|RzqSW z2OcUFuL>uGQs=HMaC>_juw=xa+c%Pn1w1(Hv49W9UA{Qa)%C)nY_Cp3Odj?PeXN z3Jr#oY&I24Eg5GwCNI6>r!@S^mggH%{zwq{c#Qz~1%+5cj2pRtzL2hXL&P*iNa$Op zB5k-)kyb$DTc)f?lXhD$Gd57A`7JYnl{=+~9c^U@=dmlR?(%<&W=jz>Hr!SeFQRJc z_AxXOkd!JPMTxC@?9;Ay65|XAI|?T3#R)B8x;oJss 1SG_gi-+&$RcpsjKtT)-@`^|DmzZeoe)GSJMqi7}9M zJDWy^rBUh-GUfVX*< ~lv+#Po5bMujxB#sw#6G> zl=eXW1YitLbBX(dv!@buDxxr2U>iLiwkRg%Hf}y |(;75@%|~ zWY}KWu)eF{wboW%H1R5}Pi34ld2g~0N2?oKRhX%C6kQZuvbBT<33l{sAOmV0e?3eu zo%cxNj^zPSdZR5n(f%;qmp3bagNTAxM4A|+CVH(9sWlgcaC(n&)9ya?fjL^x=t3F? zIN>j+Lt(bKoGp=}FcFTmFyJ Wl~5&5%R|DFT4O<^}eDV@$KF>OhPh@JefLM|<()Fw%K* CnK_2wfH95|*Td|LfUeb~VDK0F4MzrM7W* zfRmyTisBX*d)=;_hX WMp*MiWXleM6(|#Us9mP?uP4ExRHN~S*T@)Qi1otw=Wb2c# zwP-94uM=K@f~MzF*liybuM3_^x>LTG5gi=#0=-9niCw;WVOwthbeH;Ch#|I#i{mcG zyDf$K2`W^R*r${;6Jd^GA`k}-9c%(l0Be9V%u`TgMcoP^u?$r`*X^U}kdv>ZuA}kO z{n8sqTi1QM+)8)>i0*e+Fg`93TInePk`nS}u_h-V-cqdbbT>C+Xq1mzbHoZG@RU@- z>yWOfT*CyjZDox{7{vTJ?q6m?XB(wfwD9ZuTzkXT?zXb0yuhF&dUM0uF9*z;a1GTi zRs+OEk#3Q8WfT`PR&Z?P-i|#h&TW;5P4u1$9fvT|=)9t}R-stDl2u*A&@B<%#%w6s zWv$!3$2jlWI9wLd60pu_p2WE}7uL=m!aGnD3Q3bP3I}@~Dzco;krR#OW(x%F61=$f zszEk%GJamUAHNfO{a{bv>ok gGvQAlmo VlF4`EK) z2J`OaayBO0;d~sRi~qD4 ueh`fQ17Whw{N=p5Eh1PFO-ThJ38mNS~&LjxdLNhb3V#P zsHfXL3LFv$#JSYiA&w|HMDwmIj{%g{gNi`H-&a%`#KFLOzr;XCm}ql#eo41vf}A*l zyXk1m5v9|FqOxax;za8u+oLfuH@Lc(@ Ib^fnwRXmb?AU z3%9kq@I&;RZw2kppNQ^MQpX;>%Nr7RYtN>+Q>?R5V{Ja9`Swr*0J~!z%aCq6iCPGg zHZdGok|(C9`Q!j&P^YN1i3(2D;7QErl(rxjYeMVuAe*BS3>3tWV>wC7m7LiCviaHH zp&A3{({&-udV)ZX8*rL7k@Y05MEy@}c3mt+bA%f^vz$i)-H39($A=F<(I6D$4t@ZR zEpjd9+OwK#$$`+EV4_uKb=kIK)LDMeTQuX8b4UwA)iLV08o(CRPk%*G!wu*j3gh5(_u710cG8LbpZ%L`@X>NTSypZ>yvD-7h+UiHx)c{z zqLI9`vG?9QeAz`pzD4sTN+D1cw_)5+E8r(POHqmt)#DbcGZb*tUIP|+(v>hKCL+_p zSuuH11b+{Ya7p+;O!v5?%aM~(Vwx;uuIwSUBwv>8AaQmj_w{n;s7vDR-5f0Q6^8J* zGr1|5g6+)szU?CiaPqBsNqc$DvvylP_TB#)2;|z=YPq4gN;vmfo)#aK9%K6Ey35(! zc?jS7&O`WxqH+*P`)a&i-khPTD(+&~62w& V+eB!{HxEk~}QxajDjjzf~R zai~R=Rz4H~kR_x &zi;dNUz6BU6u5#cp_=sxT~Au~LGF!ro=>b9S@+4=aaRHL zShUxX|Ju_&?!k!kt1#^K{_2DR+ZWU&JDa%Czgywq4ziWS=BP@;7HBh`%=gaVGp?ui z6a{YGYHZ$`MS;E5W(yW(zZ67wBxksz$6rEEh~)T~Y>RgQqzge@BoaDUz*O}UuYPPG z@~JQfX(yERYbgYd3zm!-jd6+~JFP^j(k5LL@)1NLV+mtyd1S>>ou;Jhm19%v{s*J0 zT+~rHRn`?^fp$!ocCr-&6LZfh P23V*R2h|A~w7cekgG?$l~pb>HoG>~q-KeCW* zDw=g+R=zlzj)5(Nk%wr)Lh+&w25H|thn2j2{~UoZ(Z+cV%bi%ImUBYm+9S9VE-e%1 z7q@DSmK0r9>@W2Y*Qpeyx=5xaECSOG*W)oNhU1dyCEQa~y~6V8E03n{5hgFIV@QY; z6|+^nxxSHD=EjD3UFFOx|GRHo`QN2!6(0*C!^-#=;vtJSRpZo+*%YGjuzTK?OOGaB zqC%go8d-tQTI06qk_7d<7y0;B{mGF}{Z~Jx)qEh1RjgN{8>K0zc#hI4V;tm8uW&M4 zWvoCQD@21QTk|aY=wgOf0@(ZjA4NfOyWl-RGYH-M+UiWBp`(YqApk5pW5aN$fmj7@ z2RUM*PK;+0d3idTfFwE3R_n!7RP6v1b#p&YuQItT+^`0zkPL#PylOQDrU|wmj%R&@ z&r?dbS4G3XwE_3O2O8#SQU_?POpZa=02JwHl@Jh~XX>_#nBp7PjMZr9`@!fMPUUd> zgu3bC#52x*nrgmBzz9v*cOglUZnlBINH2{m(o+JhySrk?$LW WTIgo; zJ}Ty;I!rFpNHfG!4bI>7qW_fSuqcV9okbs4;tm$u$z`=js%DWq-r)cSA5ur*9fMMl zS49ck0zlJqERZ8aNdTG(4V}&pvVmNWX7dREC!7f;Z#_@_=y=@whzB%43lp_S+w>-Z zsxm@X)BEGuB`Omg;}UY|1!V`CZ*fZg(GmzPL)RTszS;I@DWW^cj3u!Y>&eagO!DoL zo&J12zC*k?SKYdp@h<5Y(qw%2`=}eS<=^Jmq7vw`KASSFViLV5U3-H_n|*p<1+Nhe zdz3$ich&F`3$M{5SeHojd?~`b&C&~W*W!MBQ$OAE|IGW7YhAm%WJdUJ8d4z}RU=@v z;D=xWLPXVg8pG_WzaFo8;-*=Y-|5IgheiaQyDIlJxsqL9<1pTWCZ4Q=_I9#so4aSo zI})`i{rbmN1RO4TU1r!b pr9Ut6D2i`)#sNJ8G!E!H`Em(f_c0xE)x45NLMw-5g|91pZdSjF!B@ gNOd4CXqU}Q-6IAcpX?B|GW;@*l z>H(66f>|5wo(X$ELEWg}s# im uplnaKe*_fBj0$3 z1xVXuk3wG28t(`@!o8u8DWR4P%`x9b^^1Qsfp~P1v;6^uemTk(6MFhN9E;1eIj2*( zb!bKU6e5L5ebbznE6hvoMuas>MSt#^8sH!)7;}GJephTebR*XY#srL%Gq-R=&k3Fj zs2I+;i3{PhI#NX!DFRcUdtm;RocxrS*;6OdMd2&M(< tgc^ObHUs;sr~my=MwQ$98$WS?oiUpriF0u<>W>j` z;Zfki @QLR!gHydM0zpWEpyAt`RKbC?T-n)_$clYluZPE6L8rx*@l%i4qALT zbQG|pO`rJ*1io>VCBo2=iQB-xY F^xLc-(Be%R~a&vXRJcm4%E7zt;^VBu4pti1heJJ%!Kc)}Bg%8Ps$uEOZ^ zYA}w xDu9Y-3viE`K |pp>=Ao1{ zA&ZWqVKD%_d(pY|a?^dzQLOy&@rx4&T(6@1Y4LVMLYr#e8dWMmTmb&4{O0-_JHu~B z ~ekGna>6{ @2Im8&Rq%!`3T~1upv)~(>$)I!8hxs$K#yxw{s@)( XV5 z#YdeVY%dbisEzWtXyca)Gyq8(HnmCB I6o0@N}MPbthYF~P7TgV$n+!4p6z%JFPNF)lW zsEZ&=^9rZDuevvG@9A|zyN}uWk~?pkZ=N=GKUj(ru4pOj |1zYO 5 zhY){Sb04h*4qHLaDnA@hyuy9p(wX%dyn(s(df+YEUTsjnoIg{2gQhGMn PX=uvH00hv<=WJhh4tg_0ffVFKoj+ZVCGXEQ`6 z^zsw?_JB5sv7c9q+cvt 2!a&8+9#%V%I{A<+ 6r zte#I_(St=(l+J~tfTr1T!Be6m@^Wn#m* Z%Y%)MQ)Eix zaMA5wWjKOY?RMiwBrK9Qc)7xEwNd>TtD)r3JuAn!qSivt|Hw})%L|S;h6fAmTZD;1 zJ>5H`Eg&Ba#og%5E%%V@p)P*Y!a|*LKKqAQinCWsu_n0$(b7YoTT4lUQ}s8`MYlS~ z` Bo$xy-u{vBfI9KlwoW|n^nNF z`(a5ju3pctZ$lQ=?sB&_^_We_)=kp)P$NjZ!gkvA_7J;2Q>UlA(oVQtd3_(NU7B{V z)3B;^Ul8%il8_rBrf$V9EG%+MSGq_2Xk)gY tP2g&Xk-}?Z6B{>JOULe8>>;q5P?x4Z<}il%)Tj5Y@niRRpDH|ddtMk;sJ3hD z`_b3oZHBAe;EZy-9QJ){I4(qrS7&&lj~>Mxt?nu}=C+}#dDhT`I)XvhdH;PB5vFiE zdXLDtQE`k#76-s%B)CjMmBaDux&T~QTNbzsg$!x~Ugb6|{!rb=hHbj^I0Rj&GQnB2 z@p141v(Jlki3YQk{$%d=agnv^FL0wJZYkpPRP;cY#qOjoZbFpH-AliSOH$6DrkDs& zZ1aG y5tE3HOXE^J2g9D!+6po1Dh zbL-n&PkT#|*Pml-6vn33dqs+j_ZvWxX@h*8_*m-JSfKcLFJx5{ZIbXlA}s@ 7RV`={B3WM6oqNK}@C{yg*UccLuiJqfK4uYxE9Bp8pQYg(QO4v!!;@WpidMIIhu z&I0l7@OHgi?O*j}L{b#J_HCV`@YMw6SVS;LTq=3%Mh{(h<%Ob%;?~SjM8qN4?qY^4 zQE4da#37ZP^xky6ySNtbZN#A!wa*a_Bg$=*!@_%7PB1GyLvR__6gY~0RGAcILJDvr zB~gJ=dPp>o;uKjeMwPMxQY-T*R*RYru0%zJv&G3XKxmV#!zA%_NHh!o{zU+S>zc(3 zG?1jr2y7WU7zDSh-!l|E#*BG!+V)m!0n>8++Q~^p)CA3_ q1@eZxovM%AC5h<8a4U4@ik{HZZU zA_M{uNzm|zPP)@O>A@W6jW}eicZ0B@o~jiDBci)X>#ApzHiDVn<0^4b42 =Tl F$S@Q449(bROfKhcV`&gFLFJ{-Msdt$5 zQN1wptj#iLHg=M_Y`iyGAvDW9u#{n-6ATPmTubH(PUo7ocBy`t>`b|Sz1GIBlWWcq z&PbUU(u>t&q|xu6Jr5Wcmg2le{YDaW7E+n?_ej|M%hdef#6viw|DhSMsu7^<4UU$0 z#Q;(+!e)yJome?dUOuYhP8(DZ{@~szx3!qb3H#s$)iv1e@mfTsCmTJ!Ioq&5JUZ*X z#qK$_7iIvJRFk9eE0+2C6C*fSPbPQjV5Dqxz0>6YyeZbF#ObTfMDVO37RpI~-kGiz zcSo0~=tdI}_5f%ENeioz FNf@lmc{=2O)q8Mwt?MM_e^}kzFAe8BdXMNQyYK zhKHRZVV3GlS8tItxEppm^G;DfQj(yMGWn-V0h^3e&Se*yM-f)kQ1v10 *! zESLFMZ!UmbZ-zfU1ZOz!?j4yzpBfgaJiL&iOT-a41ty8}|tDow(rQC3f5!*6dr z8V@si6Phv~8eH1PUT8@OSfoi*18xq+SzlHY)&mP+rF~N#-dwd`Mozsy9C~{YH8ES_ znKFU3ePZqA6K&jvjYcwiD;SN99_nz1jK%=}k{z69Ic-*GT48}-R^BxODBB97CyoKo zq^V$!rl$+cy}uahSF^>Wzv|5{ZxNPq^wnFG!sJ3}+smnVF8XXh+QjxGN87j??zY~J z)&9nU=h$XdZHE9Zl1m4dqmT0q*i>VyPzCwA3nkyew`18C?-`~p4fwYz7K63L${$Dv=WO{o%t~fr}ZZt%r0rF!k)N*Du-=}7&GMB?koDAs-OPmX3g_d}JC>;4K zdFJuUJ<#Wya&DG10&}ayHBV^`TIaOFHE5ss3IUTA&h*&=B@poH=wLMI{rIvvU`7#DPM$ef9P@f$dkqm$MKxL z%obN;)XL^%pDwUk$SFaNLslBOj^Gg{nB7->czk9P(xIWYu*s5iJX=!v8Iisk9AiW` z2InoJuY#~UVr!uQ@W8 zVT%9^OiPfbe6(hk2U>)BYb$LK?I+Z#B^X=SCbt$)DTSWSKoO$YE(nMzR# Wm{3J9~ zY#cT#!jH0R9Q4m7w|H!C3(CP!HDcU3WJyaSdo%=eXl?DDb%8LX8^SY?HY6dW^PZ!6 z`ZXTk5F6*&2NOg{ 7;IHC9b~*u__DA8vK^QWxS=FpQFO7@q4MHiwO|tS@hn(ho+X6?3@o(W zHW7yU>m_aTOc1B!vEswg>PB00BpRruQ%N=)36sa(2a$%;D6c~ru0W)>19z+;5sU20 z6&k9lSMCX>ydmDA_35oPCpjV4oP5T|%ZnK%TXGU!! x}l+@oai6 z4)M}caWNC?KYaSsOXsK8{o!IgA7_=CrHY4}bfr}6+1b8m7H{l}Kgut{Z8a3miSTZq zu(Nxn+8~tRzTY2TRcf(~yWp!4{3Gm-Y#q+VWWwT( ~MxkM+ZPnNtV16?THcwS^ORlT*o9w8DN;oUE($q@ntJG*)btUAlQk%MJ zBlr;VJeILGX~M@XJy_!G=Eh7b!;W9}s&MAdt<{8lj>@MMHZxNK(LT2@47~}cu!Q^# z;Z{_BS|hI9EVY{nZH^Ni?eW-8JRe!G-^eyrHW!hTW@)pua}^SMpbP&!?F=LE{P*0J z)LzZxM#h>h_vqQ6<5wuuQbW?!d5xp^5g7$2#&-s@ggVc4qOY{aP=8?^(wO3fRyXZW zb;NFHxaY%P+azFY3Odu(LiqFek{`5Ccsgz}Xo{kAH}q2BC8E@hzIt 8nD2zpwFQiz59$o<(tf^i>Z<$f4yACe>GvfMv+Zp$b+g)0> zN$)MF0DEtQH>!_5m{3*4)lN3;!@1uZT^)UGxu7R*aR0IFQ7iuY5Q$bt7q}m4zU+_J zB1l}Kq;WS^cZeK6!_{wh&$*UJD8uijCmONnYTi0RM^F}bM62ZuUWP #MSo0UUN)P+&WU7SY&KW*=8Zpp<_baYCOd&rPs zK{r?BBl6%vvQvl4DB6F0X@69fi6EOo_ORw%7r6M;X4hln<2LCF{mmO03Woc-LXXlt zafzPDF=KQ~;1W@S;YbLui$x#tagGiO_pbm6VPXGioe`hS=Ie2vcBMk-_9aRXbYCGj zGB}pH^bW~W0P8=GzUFGNo({Z#JTXS>gV@{MP(AtOo3SrRLZ40-7g4N9LTC#iwge8u z|6c{Wr Nd4I$^Qjj6sFoqUGzA Y?vu507 z!Dc@7{0wFZ3>30 ig@CEU z>o7FL#$vV_2d5KnYj@`m_TWd+EXG;-8kuPRqT4CLg%l_kKh) Xw!T=pQs9W5~Zg0N1Q z-sYr#J@TIqlEdat>oA{}L4riXZQ_CcPL(F3>`D`P-9T?Lpo)|_WJG3So48aB^Y#*V zN4=Sx3on3M(OC|%#HCOfmU0jxy9CP;j3@zFmxC;!8OpHaL6kfRwj^6u+Vjf>r@!i5 z@aAejQOReM39n=KV|z6a$ uPVKz<0mRXgPj=z&NxB+zUh_pNZQ5ZVAOQ{hJ=90C zwHoYGC~p)3gP^ 19 5@l^6Dj^1fJ+k07sWGh zTml9Yg2B8qj0kiH0})>lb{CT^FyxeO4#P8t#xS^}pGokbP2oc4f=EG@WAX`vZgSBF zG+k&Q80?XXUO{gW5Zv5Au~8&Y5F`b)5OEx0msS)Ai9G5^cnnNDrw5LlYzCOa|0luS z5q~~zz^_8=%#ldiyQIX>bKxEEHq$CjEm6?LYiK=G=6#8V@rG<+-M +*=Z za~{>3gFxTi5^s*s@{SimUTeb*;hKw8!}?YG!XS1Dw28AIsqdbjaGD1dLtG{;`ajA= z+FeS2rpxnkc)C<=D=e5gCUH>xpq1UGYuMA>;6Wd&=3UCR =mJe9pGI7!F7jNjnH*qog*2?3Ewz1r^exUhPXUiO!xK@a1`vHl2o>^$=eq_6j( znK58Q?_<=SpoQ?d3$Gd-y--Qcv^gHXoFKCuQ-K&Q_7GE4JhFCZ_T-Li2j7PoZAaaQ zA++Z@MNlbNIeMK9E&n)gH|!*Le371Bq=X`BM}V+gF%x7z*w#&w(pB2W{6JH-3_Yyv z0^H&y82>uM#Q_T!5h3IdR>_6RYIWh@wV5E9VCngbU7%zO9uWgq;+E4LQD%y)=fve^ z9Uh7IqeT5B{_2zusW0!AE%DNFx`h>n@|LR%DX((`U}clp;!b44B6=i|?=b@e @(M zf)Y!cFTxVtqs7@KWea(t#0;V&z=QkIVJRZJFSxo^A1+2KTC;DwGfIi=@LkrEbVuG= ze#BG{@a%(^j?CMfpwwUS f>z z$NzXVg!zqdEKVz|x{e)Wex^a ;9B!~v@lfsEXT1 +D=m+86f=NlN2gSgwKKB&n|O60UB1!VeX3n|JR10o9o_Br$*=fb z92`CKe1a|%M|kKF(L6Z!pxgX{@F}X)K)tJiHme0cGUiZ9b#fX*QKO-U`X1RTJL2Tn zjxV>5fwEB8d4nTH!!6I_x7j@|5HouHjVH)$P|$+qnwp5YvD@(-wQUKx?1HS=Mo|8v zRbA2hSW$bB&TGv3s~h Uy`M&=bBr z6wu1J(ZCIU0 s*tv$FL>Yc@Gw(8M*c*@7t8hUU7 zdfK0e&F}t z6^EQqjG-lF9hCM7VoMTolcD5RRrV&R^E|Lb P(EdV%JP$ |jERX+>bq zR5hdxxK!w5bJr8My~S&um`Y~W3DRcF2~jz@;X*odFR;}_*fW)oF^!|Z$7_nC&*=i{ zqJ{eo_${n?um^^0i=@}YbKR5hthc?^Bc$(d(ms*x5spLm3*d yPK44fq*sT-6!&onC6BoU z>rfk-J+oNzppJ1# wDGWV3=F410ov8U6H2j!rEOYyi!#Kr9eBmAr+lp(Qo=H_Jw;&ydd3aM5`F%H zg8;W0>j8o@Y4VcvV6-^GHA0tSwjD=~ k;1KSI`6i}#PHgUFBuqJr;@#*E}s5o&)hG!4Ixuth6E2}DjW(&dli{5}-u@;sn z5@%$5JhiC{k>6NSK&xM!S j*3w22n*^0;xSwF7k4?@+?9AvyH7RwyASpaaHrDt6HI_w z6PnNEYZZJ=6h+ToV|#N)>M&ly_<<1t7~YgB`V9qEwKpj}A^wW^*cWscLUMMGJ2EGv zl?TWt`)BLPNq>b!?A?WmJ`qKVZyq1$8I=5jg`Vp;+lRnVM-Zjg9*_^dUK7a4bUfx_ z?g*O}u~1=eod9p)6~q2KQzssGc5UT=*OrifmJPuiJYfM-8UdPIkfnu(B^-<1gTx+5 zVRCg!)hR$I!OF0~-WNe={E*vZ;%s3_%cgM;SDCrErO9%1TlH= Y?^fKC*L_Y~N+Q9?QOU{|2OF-&F8}UJS zRB1<8z}|ZB5$+f$GEg)s?4$AC0yU7_Net1Fz=Fm`h&KhWn_iBtD 7VCW$A z$nM$zSYW>OOQscJt_IwuyE}@Qf dTB zH07IOdi(>Czx(iAPB{Hnw&8`SM{PAi)Zu7~9Ol7zjRJ1`+=%IkEfag(Zr@4TJvkWl zucwG_8x5qsgC8v44EMw(J9vn;lxaIboKgQ8<{fRD4l!&KyF|D*@sDv`>lFik43ypt za6I4_Bi` b&1Ek{ak_vr3iQ{ pj@s64t3STwhva$;Kfiy zv<=xtt &Zo$g{FgKnr`bM(C^{!*b} zbK1kXK2WgP^oX48A*!RXLepoj%?*CTtaD7gvt83;8b?$7&$Ah)!~@h?SKj7Mp)41( zk22QAaj+yo^4@4A%x}-&XU%7Cu^cpveo&&p+lcD|0YVH32HGHJM{`83`c8@O&d}WU z!n;`nku;BIvyawuV;s87aP}$~`*!c!WL18U72WuIEq2b?T|jO45G5<&V>BJQ6C%sQ zIYPyo=c!bp>$ORe^9;9>H=>@u%Ze>AoU_@CIPLfm6Z@N|@9l5Ck>Gsu+NG&xA4~(h z=LN4LT|ARgw%a8sQIrh@bf*K_&Z6vcd@J|vflO?oA~YdR4>p~mD7n8b9EmaOB|$ 6nsnRv1lO(3`Zh*e{1;)h2zSB8wd)i2#OSVLBVuA$reZsjnmL%BGp0J zH6+cLnrmDqEXtr76q8MT@xeJT;O0U>M0rO5@Q^OxCZAmu;YzkG&?(|_06vIy90D$& z6ZM6N4BT~>QqeMyr9|Xm3utJ 7JG^45cRTP{eTWJYP5l&U}NE>!_c z1oXpow(#`-?fIRfq-je*q7RqMjJ0?jlZBKUt7f;v36=O%VxlXWlbwAm1d5Fqj#dYV zNa#-o8D(?0rCO-M4ss_i{iBCsW>U}49=>mZfH)&yRX<)rL_AUK1N04_-Xqujd5aZ~ zoJvFSt;%SU#&nM2J&uqhLjBVlm5aubo~ex^qHHpLvgq*a`7??rbM`s@O0QGl>kGK^ zsHl4mASJn?<{4^jK(8T(=opcUvQ&YZQbxt0s%Ov7=^kwqC}pktQ_rU5-rCFePRmGw zBPm)$wfV1_ jFDB%et$ZfqNc!@P%~VaR3I#CnK9ZD0ctZOM4$wY9uZh( zJhYO&`SDN@mK}a?(GjcE;6=Ta64U~iCYPqK5->p?b$82vn}!S&e(#6O8;9(chF3*5 zOQ @%v*(+%OB&)SH{9T0<5}Eo!&U_K-tCPKMV0sIm?PS yza@L%N89MZwXmSlmkNT4vVHB4p!!o nbT_YwuGxDN|h6P@Gc7SI-x|WG z1|AydPOmR4uUIDiO$}p&TSVJ8I^Xgn5`qU&V>w+2W9xoLLKPSra z69=Lczte8~dqO7-O9tYQ{LuGlmx_)UVJZNp0a%b~#hu?mAK bNi;GCXbxKqs=pLo#uB8SmVzX$I0!9tMnT;<56I?d zB2Xr%6qMKe9 5bm^jkQ|wPulr;@FJgZ~Y>KEC5^-HUN(B+G&pPa5wI{iw6f~jq((D;Z zU|k>?0dL=~l*gG8al;NaqSDsv0#8zBOAIwV_iylUap0nttfi*-$c7U=L!e(Z_Nb1A z-2{5xktX0A5f+dvXYzuSZab8oXTgS>P#Y|{#A#pc;d(OX9*FmLGH$r&h@FuehR_zc zGtO_LrIIwL=*|_&r9g5~ZwEtDxdf`TwH6lCu%QAy?2Igc4{Csxc %(&3NE?ULeIp?>%Q~D0s+^V&_BN1w)oFWJcR0KM<2%)vTWep zGAb wKQ8YOhhNttYdxwGSF&{oJ zD+S1txrg0D@4v=7>~y?`w#{M;4>j0 L3E|)-*rWxjWaKF!%w)0UUl&k{~HQP=G^BOtDkQ=0yO5b0`m~wcKa| zNDh2bJ$aGeZBjf4mkjS?j^+M$f70wZ&oy>F7Pj<9Ww%7cg(`5Pg8lSrao}1S4#!*0 zEj$|_;R{upwnSu$Hbuhi8&_kh*a*ivQUX?Y-nL $+IBA`sgzV(n^t z8!?r#K#t66CU+UF5rY&
pcC@n^BZC@HC7IZd11-AaAnQ9rvQs2I3lf zY=-JCz0ZYh`93t((yc_}p> _$c#ytQ0Iq1ADWMu)jw}h#bjcO9ow*K;X5M83Kb`+3^U6 z?;!igmFUK7?OzKtV5xaG1x+$K#NTY?nA=ilrfehLmI(fKWGsT*x32jXHtoxef4gsQ z?0)y5&lUxN-NVNa1F^7#_Ddg46vo06X0*l3Fo1<2vUqKl#z3q(M-@QA!{MToi|m?$ zi)!j$xEP`NHxzr*|8lj+GVw1syo?8PSL g92`?&SbPYK7C(ga#4{MTAL^P z_!E1xq!#jvky0R68))t(m$NahT%7fe4`+0JJKSAPkd?VW+KIRbznd6uuU4}GXm&Zz zQPg?tpNj&(Nqvgymk8&iT9c=;yq7s7gj#Hk0CSV zu)$Oq19*XZlBtU$Ps8S$r0rA8g94}YjQ#QK5_wU_T+G9XN=O3Dn@BDjd?e`LR5M&5 z4e40`5fa}z*{9Ne?lc9^P&tGC_-Kith|2T% 0p$o$NQjii- zd8?t;MjTO~T3tZUqc!Vdc>-^?Lu;s~UZtyOP^r2ZzC?BbERl*4q}9+>4@k`~m88WI zWEIS0=}))(KjT%tnP=~~tAs_|*RKzl-)*`A@0`0TBR$!NsP3U2JZ}3?8w|S7Q)3Q9 z0w3mV0DX$IlJy)Jv3LPb>;wrRT4obeS%p88mMZGx67J*v9c&@-C$NhfinWXkvVCa7 zYt|*)1m7jjiTAb$YByShib^`jZknto&t`Kj=Ibh77aT7WPKS84R}pxKasb48QX%di zX}Ov`!oiYa_nA`AG<;_W x zuMSUoF|m?@%SWWZ?nM?PlD%loNS?6UJz&$`Y>+U ALzEj@i06ZkH0;y2xXv zn8kwa1ezQCXB>1F_ rzZ5Xg6n1c5yFNNhxYk5M?U( m+)GrkU}tnEl7Ze zDhgxHnRT+eh8Z0ppu6<8QtYYJ%~M%VLyND4%WN&ISB*MLa!L*=IA;IVHELRFzJ%h* z3Sq lvPdPII3w<^i(UR9&8p}(pRZ_=eVk1%(LpEqxmqnMd+oSTg#&D<2 z45i1`AZB-oO6yegoyw6@QWxtnz0Hc3v7LRI|D^Y62$8iNx>TgdEqM) q2OS0|6ZL>+@Ipvgyl!#$ZJbdx-CHt zUiBAOu TRX(EY7 z9srOX4PWPb(_GXroKoy^F;#O2EXo=c8HWz96bCx*S7MX_)5I4qIU_eMGcfWMeel8= zH{Kf(lP)8#{m*szcY1{jm&_?0R^gCV2kb>}4A;let&7uZltdc^PwUb@vQPXn!N=Bs za+Z8ySUhTUJTNdmZA%`RS&&lAXB~T9>q?A5Yaj<5KrE*>2O35kgVxe4c&RMXb_N@O z^oQ%|ia=8~-U!8P9ZM?$D|c;6(MJFsL5aYqJznb`#Z-4RYU3>dBQuZ=fX;Saaq&b5 zBqK0~(%Mra&C)GA#>x4<{ppGldpXtF-D)ZE&MFR4GPbl%GrBKAV;szEZJT{3LJ`e| zZI^}_?aY~ lG!ilsGdV(04!{ih&b(k<-i?4T-uy-=#5X#~*}Xbmz!-EJ;!GNi<{ zWD TjIM4c%#N0bB+FJWcn=>e06M^bC>}G(4K1RvD!n>q=M1(_uf4OHs%3 z+(fWA@1bHot;CKP){+&ZEwo6FZP>&k8iuQilqIu!(cZlfBa}x+t^Wfc$(8`lnKS`d z|LCYd4)&79!CoJ4b7hO-j`NU7%WfH^BHu7d%zpb|zk~_{l57d!c*h1d*5lEB`>3Qx z3nbYRz|kHpSieV1mRNE}-Mto^Rb>su+fv-3lw$ (B7 _5!uc)Q YVX~Jx-DUFWC oY_r!2z4j>r7;r%UO1aY7^X4WF%;-ROpB$cC}$9F%V$ z+JdT$m_P~64@Dp}Us+Mam=~K1>(l{%oEVbQ7!S*z=~2LrB*QI_yp+S>5e#!c@1IP# zpdPM7MI?!gm!Rz?iU1GL+&x3UBrXj5ukkDQJ}JNDleHBRwR2jYRKIbAq9?e$&a zMBFxFM-?ErkG+EgIEp(b+EX_c~snMe|WoI;-ywM_R4VhlBV6d^!9?^J&}29v0NS< zTO94lqY@&g2Xr>Lom_emYx0E*XK_kNmHt#AOu2Xf7G_yaf!HK&? &A}g-NeVR7f8_fG za|@A#SGIKn5reRBxbn(9SUCduuV$tjGD`0J Y?Rbs7fpyYmGi*HsR{? zI#jGZy@3|)90ve!eDP80wVV_ClK%Z6xt;r8i+V1Yd3jT1jk^HYp`ZXR=avkKQ@-b* ztT=rJA!Kh>NTavB2!*Y$-L=VIEnN+ls9g4X(fJ5sAQlz`VM#1lIkc309AN+pLqNKG z95E0Ji!UZVir{zCzF?9)Ol6P;XK)fdY*84qnlOu2Sf@Tf7Mtw4d1^M+ B>8SE-Hl@s=za8y3bs#r}wIiOgIEp2Uj;uU08nZoSqKKri*HW2=4nWylo z$a4`T(Gfn=((B%|azALskjA2A<;EZK&WLN$a3E+xjqo)d1iB>vasi+S6vP=U9{fp$ zcPQwM2B}F#6e+DW5P+ybJd1<^@=H9oXM-sEBLSb(4VnjoJ#!?;@HiL$HZbS_&U}z3 zb4Y&=1bDJK1qlVgoixf^te`^$Gs1vqLW^Zp^AXRu;bHOhB6~AonbwTatoKg#5oo}r zp3hIjnO$AxItH41j<+XOVzD$i(qz_`E3VUOb_JDG;Ue;0e@#*`fuUel`eX&N=B}K? z+B@OUQl-7pMrgKj0hkCS4hwi5(nT1J(aa%?K_bc-d}m&%NX{goz`w(37cBJeq4Uss zL$@Y2fRwd8B0j0m`REd_0;qH=CjvCkFliDs?{iw;f?b}aEgBrSh&V`@w^!C+M~oNc z2EAMN{AdL=R=$>qur!%kwqyoIlkV(J@l*vObC5$pdJtun@it2rS=Sk!M-bR@`OePr z4q@G*5m;0mp{mDgH~KBmEMZ0o$1#OXl{eU?ei&3$&o6Dmalw_aGjb{n? gJlZN@T7GapjaZbSI~r 2P<9x08Hr_%0HUcHU26X`4@Ttr;n$ z@KlP}My#~%YCb+1AcQCx-1HZ{)uN9qIy|q1d^PdT)poBpc>Ov_lJv5_91Ua<+oOx# z#a8cvver)V0!DYo$($(+{(5kPoQWRm_@1VGa1^!!8(#RI9zJNqyR{K4)uv%T92+5G zjE?HdS%PHLnD9c1etPt 87$o6VQWR*&B2 z?4iE%@aXJtG{V=;MX!5E|HVQjxw4t6Lv=4Z2rYFOOqr;P#r)6mJ*Pr86QCozEvahY zYNvW)S-xgM9>TxlbHclV{s9N#U8$kBS8AxDPcW4sAZ8zWq#{JNRa!x9Dm|n9YqD&R zq^ol11!*u76;w6W9Xedz6;=;~Fsns2&Fy@72!B20A^c1897M^Lbq+qJ1SHXcOKa <#?0>h_gtltz?H19A@h&!W_kg0MdM9O*C^>Fm&l= zI5D6y*=YDId&L#X@LVK2c<>Mx{?x^rk;>td*d^PbNRMxEf@4P78oP8GOj_6nN1QLv zTTe%D1k&cH6g_sNZM`$ n@H+y}o1Sg;psmf1B81fGu zL>MMwvL3HSs629{7TYbXDruzR6*hioke;L5lzUWvkqt}c-hQv!xi9yggh=9K8Ij#p zb4Yg-*2QsWu^^{U?}GV6DuXrIoQl|AqMlx_zkYr6RjExnFZGk4l~7rQLK%ZA|Gtfy zYz@d*?T)E7k$c;d)9^b26fc^TK_;mH6`K;ED;i7rg_wxqyt*Q9DUo=_o(8ms!pZmt z3GV0)TVyL91aN6VwS9X)dQE#6G~kmTFSHUO?Qw*K)z&Hl$Hn3m*$^ud|F`jqq^Cad z@Hja qM1q85uT38uJ%ZVK|57VG#d%Dgx!5R>Dw`*#X IMRg-`t>Hn>jDha2ZS&l z@iaMw$8;tW7AY+$VuhBp=Le~&y5Ff?SXtp v}pCJ9t%F?~#mIP=T$ zD1=EOjbwQh;y}i;(AFZw;~;}IN${RK74|0QKv23|g+TMK23=MEB%yxsNW#GykE*|> zLzXC9cI(<4p;qk?M>3vXnYOtr$^0Ps(N)o6AE8sDAtH|6Tg=vQf%vJOY7vHLPSfT3 zk~sI_Y&{ wDn%Q4iS;mhuH$}l3;@-QoO#a8s#D0?%)-W z1(0V$pFD4iuz7abZS}l#%K&axEfVW&xg1@NaMpw+&x0?(?px%riW_q}lz)Kg9CX>y z>t<9RCP8IPI;N}hDqpJbxxLT}K@g&g`UL(1^4nOKGIn1beMi?_Re+TaIiu}TDU{Ff zrUwa)dIqLSHRMt(_pV5sM#%C#j#0R(<9tKm{xQ0WgXv58dG7%F7(ISeQVg!OFJ3~( z89CLBJ}bg1)(eY#DHBvde)l{S!?``60Q1?ETVj*emQtv(mgE(Z3PqK8E^h-Tjn~H7 zF0nl+OxFHr|J7sy+&_mPHXeUljw~^r1jU=6o=>b2rflD+ZFdqd?Fuoq6ehW0Ef}38 zQz12M?elPsw5pdt3aJ02eF^KrG3cc3S7WjzCCH5}fq_H7oh`GpWgVh9nY(+nx8)R= zIF T?Qq|HpE5*Yoyxfl= Ir4 wE-(;U^&szDE)l zdOFY`jk_R~4lG?LR4vjVWGWv4E2#w>uw=mPL#Kx3*m^uN?{KX;T3T$BZ5Tf|ak7l- zy4_?squA4uDn;YrKpu2e!V+pI^i_86ogx7aHI)xvrKyGO5hNlR*`6Ppr=?q9d$g41 z!A3lVg9OeBRgUT*>J-m=7J7K>(UdMYjOO5SjC&s#1j+|d>bIdr?Cg2?yf$et =oV*d#Fu;adata 3}hInQR~`aKveNk47q(M}tTql?sCyztD3 zI@5dL0e5IjyI*_osA$ ?ov;(1Z+qD^uDelYU3zK>G@%`%`R)@79jXB4mHT3z{Ot-)-5hgZ~{J4@T4 zmv4ew8JhplxTW6`tC0c6qRki0`RgQJ~?iIG#k&Uq@hl}%Q=RF|!LOE3BCTSQnxgtIK zy1k%Kj}kAgHd6ffpdKv ouA-tFW9MCp{!bA_ls(t)C zTjDX V^TZIwqs>oH$|3oQ)Ed~N*`xmBUSp66Bv*J zL~G|IQl|Ihe?`_b`bFFI^m^ULF@K1sgr^zGB*3SQcX>AHy3xb67r&Mi>sfV(6!xB| z+uys%5L^`<-x!wsy~c>1kg0>>4HvBT5Dtbesjr^c4C7tit2@C`J-k*A>|0TJYdjxC zhw^xL }51$$pFut)coayM>l%i`OUnjno@Sn6`Aw z|1<4WbUd+aO8lE%o HE;R${m&Cha7tPCy9Gs)LWt zRtsTd6aeyGR|dF6eCRK;Dsa!%<8c+ZuV;%Hcv?tcihhA>cQ{-lh>CM4BSRtP3&>F! zC?S3C>>PDhDU`1WDM5B_sIV^)>c&+#WrFO}q#@7&i9S82MZ^VvoR{7ZkcF#!*cRlA z=?_%ZValFDQWq_^_Ab4>iU+882Y^o7KZNWr^@C=jYKR$BL+*pJ$WH75yLf}mo_Nc3 zSK-AqoJ8Z@%c?xilXP??5qW`0Zv{xO6$XGB_*;9p%p>F}p1pHKGcA2SFv_%iey`6~ z_cY=S)z9hm8>`HY`0Q7GpinJJb^qbcedo9?gVd!M~D zeXq50FDe6y827>`As3gcVcc)3EP{>5N>6fu{rSm%wMhs*G-NFgn9j@)>ph}?w#);$ z!^wZo>C6BKakru{u|`hn2g`ZNPg}82t*B^ZgA3`?icq>sz_tnGyk)@8Tb;rN_3mnD zpo?Lf4s0B=y$0Nun)akt%g2FZ!RZ%Uc=>ywsP<6f_>Uii-)N`&v?Yi&G;^Sj3AjmJ zvASlOiO51E6mf z$Wuxk5S5D5>B&kIQ3v>2Mw~lZ!YJIZaz$Vbr<6NnQ?M %d9-Z*XH2{;;R3=Tv9}QBL4VcNdYoZ$bQNGk7aKv+P+t zpPWDr)sbJ;wtJJZmwF=?{bL= zldK3bNPG@7mR>I4o74-O>`p qJc^RK0Oy$3*n0P3}n0=3e+-8aV~iq=b|UA02**z zz11q40eXCYd)_0;zHnpcZwZe&on-D^ln+n#v0I*y A_|b$do-DkIjjY4Mxo~T@I_ZlxNSM^-_6!|4V3N>wI9;;rds`P_R_sQs^ao| z%9n4q$X~NsgxtGapWQ &nmmtAV|Ll{|a! z{%Z1Q)0a3qB>&`|_Yz-P^mpjya7tgo&G0#%&&MH4fXF5DiKSnV$;bCfPU=oDJB>Rq zS2#?GpT46;5lP_Vo SG0>z^0>e%)fx)^ou7(D;R-r_Q&G9_a`^fMRgy?Y-GmLQ2)vUdIlRC08%x7oW zCQbP*8w<${e{D5FU$ @V=gMu}Alrk$f}MJmQ=Q?#ha-b`u)&?H-V9;jV$R*{f`EM)s}9 zQ?Z8`kCPV`m#WruzeEZv6Jzs40mG`d6LT+~rg6&B#JTk@$ls)@*g^i !T7 JIi($EqPb&?Wi*-{B>k~@tt($(`NoN)2^EL%)sY-XXew!p0g19 z9@W#RHcUgKahYwQR#ndNrW{t6_x6#Qu6V@-hM2UCGu2e@8 g}t&C&?g0$AA zBH3Mz_Ft_Phz(SpvLLGd^2>iTE!|;R>)!pKS1V})>2#~OK$8?rBF-856!FcF&VXkr z;>9B}@HOtl+Y$hIA6^R|3S4;9uEaGbDT{dK>Z0S2V=mdoH| &}8Je?i$uOu}}a=8J$-_U(URj-Bys-RItXKf?s9JM;H zh^P5Tcv?X`1q&?auWi7u3J%v(X%5(&OytL~N0#dEpk=FZ+zGXP=a7Bpkj>z2D0Rs0 zV3m&V5TG@>8f6QV$0du@3Erk1r1)Cfx6 sGzGy#z_M?I7oktc z8j|P_4?3HmRU8cvO~(PpE9&|k^P}_*3pq}e 1-;9Zijh+uYdL&l*OvvClF% zZxy|YzPVED8MDv+_Q+k~w!b8;`2tl$ZLcOD!<~F~It{s=PsjH6@bwqV%*F?s%&Kn| zZ%NV5rp!pNPwU8Sdn=FhiO&A3@kBl#de9!5f28-nX)2N}UW0)MLZO+W&c{?VEObAn zj2j?%2V|Q+6}TYN?wRcsP-lHdJW|m?iKkKzB;u=VDk?+XN_64UAy4!U9mx)(&`!&| zQ&VzFLj>HKshFce$0j;DEB0%;5SrNHwP>WFp#~DF_Afq0Jk?%6;3K;e-NQc<`APAu zY33o~BR@HLr&G%lsHkJiK^Jo*r9QeCU_~F!BLx7aj}!oyh64bj;t=!%S>oa@TXOdB z#}_*xXOI5;E;w%)JWM~iFX+wGV*Yf7{C%1|On1vwHu<`C%h-n2n~j?b1nLDP+pm7h z7e1e`qPW^tkGhG%5XoCBjp-2j?NV{o8Po<*d#WZ`S1bnG)u&t#_buyK(b~I@L#btx zOS^6EP@jkJ-AQ=}KVB^dQR0@#!F&6>Pjrb>CWy}V$pitkA^6Z(F6Bp5g7H}KTuL2y zl2@tLZfVG-LY}0O*?}YFj{FoqRI0{>$I6C5lRH@Ape5K=aJ1Z(AZ#iZKQ$*IOHP>9 zxFTmv)g{IiJY}ly4oT9KcVro-L@_>nlnfj;6&E#3=(t&zhzbv!sp56 +&3_sW?2-g#jMK=6KH5AF9tvy-;v z+R3eo+;P9I)~mC!qi6m+V!4hgB91{ 6s(&XgOh1})N+k9rWCDYShUu(Bu_S4?5 zSW`+=pQ87D8zN1@V4fin0ZZEkJt~y=^-IZTtnRAWf1Il<`hWzTrg)E!{K#~ff;@xQ z;RmDX_TRqk67O87O*Aqxb!SilM#hpzv=7yawH)t}ZmLWfSy1slv?&znA<0#h<(Y68 zVo#H!Tw^%f@0q8e-lKOFMgw6;+f(85-8p)0?;|{Ml?8=QUWb9BLh?`N;-L?|Ewp=x zbH%z6h>U?aZ`qjzP@2Pdgt`B!H^X{DWMz^JZu-+}JSQ>63+!|+(c*txcHDyDZlf(c z IivSIEC4;ymproY4sd7xH4-l9Z1 z*}^QyjKYM9j^Tdy8A3 P+A 00v}a%?T^nRf$(TfP^+=p8ZfpXika}rsMQRa31@Tyk$_ZNJA`C-NFZr4gWxm# zCWD@P9HqUrKYLs6rMI{L_O|s`+gq)*(h?K`)(22uwbfGVgE1-rs|Ks``>y>sXU~~A zJk;9z`+x5FK+c(U)?Rz oihUW;EoOb{J z`xq&2=viGKYBiL382>Zy|6xD1cJwaT#n0NIUY=%-W!gaO^d >#)nw14VG0@lRb5 z97i0)`j=?skC2@knj=RyG)JZZiZP%tJJW*m4x9*%j0!0@v%s2IHp;Z5vte#yqX-+- z2q_;SF9f358#S>rbH{5()=UT%0rvf$p3WsnXXNUJ=E%$q&5>y!sOoz5oCQj$t?E)7 z$&q1kB$1uvyj(Q>5iIz&8m=PNTQCQB^xn7#wS1iyK`1guXvxw=00kW8EgpACl*fn* z&f$0|s11kbq5wTF|AM!N%b77-XzPd1-z8BV7cMx5 m*WtCJw2x@t#^L>` z#X70J$mIUtcLA^>ml?>PP7$5P1_AJcA7C_VI_sy(IJkRxS4Sdpq-amJH-e@TQsOv( zyf5|T?Fz~t%D~`;s+d46cygJ=rdP#huw|(z)?~AI7;+J76Y`6cxAj!=Ju`~)T4{c` zwk4t?B|9I#342iK%LL6}x8S^=JdP t$RkwrfDn?2MX30Oh K{XSP4Ln?7J4x$?@q>cT!aSp-|+{UguluqsaN zG*!=19t8^k^3kM 6qT@&h{ zqtIrCW<_b Cv;ICr;D!^d66i?(S8c z^gxq6-QAtt^o&in%i=w$uCC5*oPkM@&aMPQZ|msnNpJuyZ=k0o-HC+SuFs4RnYrE3 zBFkiIF$dJyy>?b=$r9|%2g0=W#FExjhkf8{EiI67j)r^`B*j2R5f2`0=}dLEC7PCY z2V1(^ByX+J7UCr^Gu{-((ut0a&bIjSRXsS5CwdWk6Inec7>_Sqm16TBm d zI2}9Cia92nWnUXd=!fET&7B`-a_ylbfYouP;={mdf6)cQ-Y4oZC4wW?FKvR}+B(}4 z)H68eoT_8GYG>Be@C1uS%X9jgJ3BjirnGf+P3b&mv|~(Ff>{?;9ITKBqorUp?o B zSvvOo(uvb^^VKGg)K&E(U`_ZS=v+IuLa`tWOIlwyR}k43Ve&N2ITfp@Bqj*Lm9g(< z%t|fqXtyO{5f;5CnIbf=iD8D4$!^ Eq7c05b)N*sO8yns%G<&w$0x|BPmF`xH6<#8$Sov5jt#Hy3#AT7MXAa|P>s~7{ zm9
ZSFLX8j#}$@Ow-brbl!h)yHQ zds&2oS*>({vt37F0R{HXVa{^TYjP{|yr#nP60BHR3C=msE7H6sm*U75D$jaiP3zLm zRRw(8a0l<=g$w`UZ9y3 Y&aSZS|5uhO{z_Kx3a4 Q(z-QjJD0<5>1PVBOyC6xSd<9!BDLB5G2Ys!hK)eh%D_R84A#Or+ku|+45HtrC zu@?S9tri?oSU`do76V7o6_kR*92^7a!Z6+x@XKID*k$lS-T=1F8?-!|_*6t8&um9^ z0oM}h;G2P6IA`w)co)zj+>1A=v<0ZJNbE%s-ucq?Lhd=7G2<+O@=CQVu};3I6S3YE z3nQ$TMYvX1)~lJJ%LJZTO|zHP%WB16=C=+U<|qn)E~>zr0!1)b5j8M)A@2Ye${R7P z7^RfVo+F}C8O*9b`7{4JW7;%^5|}=tu8ut|8hrz}_j$b@d3ik-c hb8c_H#XZ ztoNMdnaprU<2R)_PTWtzy;3}%jQgkX{}l22RNOy}|DO@RPshC)|K;_7d=U50rJ)6( z`3qWf^R$?`v@90 6Ry;QA%nX7&*CmXteTQ}q{)Q-nd*hMN{3heU z1-kJ>i*Ec)H=feduh!|twCZ1z)EEO{qocY?H(SbdBV1kfhIT#v#*FsriQ0)J)!L+R zb%lOjOGQs$iPjmbuE5{<)m6mGfHrQlHf~;pZoHzW8_KHm^n-Pr-yG$>WCMhe?Wz1_ z6@KW(pLC<7S`-*rnI+YO|A)|&OE+hi>A{iO*Ee%baM{NzA^a*T=y?!1$w4<8D)eAO zS@JVnzEdHV!0tmEZUQYmdkxC*I?rg`0~-N~2LG6Pm>6^FS2vQ?L#(_|$o%Rd?Zhzt zj2jv0+nj3DgHI+y(6*i)9!k>R;nY+;y{$q!4TagS2M;76Gr+f1(7WUy!+TLTv