From nobody Sun Apr 28 05:52:00 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=wdc.com ARC-Seal: i=1; a=rsa-sha256; t=1562612053; cv=none; d=zoho.com; s=zohoarc; b=gVmnglt9Dh/8bX2/0qEkXtmq4C/Bui06ZBXxMniebhGppmUQXsn6Z8wv0nU5KMI4ygLH8Iizg6lMg4fxBfQIAZgIZ7tEqwX++srxsFXwdG0UPay7Nl+/pD8MaIxAIwmtnt6pxJN69ZozFtUG9t6wlrynlvtjuo2d/n6QYGPPgYY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1562612053; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=cm39fWlGp4IJsr71DktFb/inF/8JtyZSH29iV0B6G/k=; b=iWTdRreCXcKkM4MGY+bo8jS+fQeFIYLNyXOdrHDBD78X8vmsPsKGGFzpZC/8S2gdOdECndWVXqrfiAKksHKUOYRLdStmcVaKUsEsUaqiKaqFBn2RoJv+U5qdHfjB366YuV1xlsi94lIH5NvoDNGCQs3YoPK6u4dnvAkrwOAjJvI= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail header.i=@wdc.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1562612053020169.38081213270857; Mon, 8 Jul 2019 11:54:13 -0700 (PDT) Received: from localhost ([::1]:43976 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hkYmB-0002zU-Rp for importer@patchew.org; Mon, 08 Jul 2019 14:54:11 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:56210) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hkYkb-00020E-Ob for qemu-devel@nongnu.org; Mon, 08 Jul 2019 14:52:43 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hkYkP-0007c5-Rl for qemu-devel@nongnu.org; Mon, 08 Jul 2019 14:52:33 -0400 Received: from esa6.hgst.iphmx.com ([216.71.154.45]:34031) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1hkYkP-0007YH-B3; Mon, 08 Jul 2019 14:52:21 -0400 Received: from h199-255-45-14.hgst.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 09 Jul 2019 02:52:20 +0800 Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep01.wdc.com with ESMTP; 08 Jul 2019 11:51:08 -0700 Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.140]) by uls-op-cesaip01.wdc.com with ESMTP; 08 Jul 2019 11:52:20 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1562611942; x=1594147942; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=ZzWCpwE4R2EJZ+xP67OsO8wJbVw6rq8lpFxGeDM5oHU=; b=D5poeQFd3oE34KgD/JcFJ5usRzTuBpV2svMdmSmqaxE4TffMdmVMCI35 +xgc9O384hHK1HzQVS4uPwsmUWaDTPOKk293pyRp8/SrRJDOc7BblfoZ2 Le8wRomr1rhFcpPtCtCmkAyM+7+pxX8AP9Tb9pVhvHSg106Kk5WuxBWBK OEeSwvWiauI8NZBsZL6mJUpRt4PacfLH5et1NFgp4ZQR2eoH14fjzhvBa NuJlymSvVmhi6y0wTHmAjKX8WIPjDH6uYJDbVHxANmkcZoKFPSqNluvlf ohsDLBgejDJDNN17wr/MIL0V9GhU9uFvtXhEwQBheS8yVc8F0a/5f2Xno g==; IronPort-SDR: q1Y02GIbPa66kNpynJiJLsZH689wgH70fvsZsJUGPCrfnHixwm0KxtRvcWaQNZ2B7ltmNUkGVQ oYF+b9kG9hAryiQB3n5wkBDWJsnqzfCRVOAqXMZB6mcE9vuOpipm/i0Y7sPk6AXd0Y6gIkNotV IMvotQiPf4GKPUj1XbA/nju3pzT3i5rb6Jv8ctMbeOt9HlZSFZxZ/tZtTYSLstz/lKfozNsuFD lom9r5jPGXgodpiSBOI4hkxG4r8UVJi07iTBCfTxeQrzVFr4upZHl8ZKyz8qoWShyIhDv08jj8 JJs= X-IronPort-AV: E=Sophos;i="5.63,466,1557158400"; d="scan'208";a="114094439" IronPort-SDR: wJ+K3wJqrDNdyE/iOw7rOFL8zOzQSkNEmrKWUkOiVewjyvkddInvu5ghp8tLjjczkYq63lAZ/K oljk1rNR/PYjQkY5nBqwrXaoziU4+K8U5CVBk52BmlOLtNUCZidSgkxL8Kep5d0cKV4ygxnLIk iuQtjtaQeiNP3bOT/6/RJK+5I6FFyNdBLV88pGft5Yr65G8QzcG6R1vboFZLhdKosHVmPN+NaD s0cSvVnORvSvpOGjln2NbTGXeZAtLWyCtHLedf7X9PM32VhxEI0oaXE4S8+zeuVqn6o/xTmeHt 6oYwX6aV3DqQZYzrKCrerD5y IronPort-SDR: NKjStrSHEsAEPKaou+7wn6T4RREWYZHkH0+I2V2Tyxbh94LMlIYwkOcCe7HPOGA/owxK7l3fq4 Gy0JDcgjo62uGvX+tcaTUb6YP+VYs/ih1+8kh9HZcdq32ZTSuxgdcy+PifJ/TwgBuBB6arvN/D Ba9eBr6xpOHGEk3p0CjURS6UHlO35rujAX8cb09hR2jW4Xe/l5whhZJJDtRPBR4lqrYbdMcGKm DjSuEyIsNWYEnu1ffPKOJndPXa3y7ZdL4KsQ7BV21ABmmdXf0foUOyIcfhJRNHf0Q+XLv+yfBQ egY= From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Date: Mon, 8 Jul 2019 11:49:37 -0700 Message-Id: X-Mailer: git-send-email 2.22.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x X-Received-From: 216.71.154.45 Subject: [Qemu-devel] [PATCH v1 1/2] roms: Add OpenSBI version 0.4 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, codyprime@gmail.com, anup@brainfault.org, palmer@sifive.com, alistair.francis@wdc.com, stefanha@redhat.com, pbonzini@redhat.com, alistair23@gmail.com, bmeng.cn@gmail.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Add OpenSBI version 0.4 as a git submodule and as a prebult binary. OpenSBI (https://github.com/riscv/opensbi) aims to provide an open-source reference implementation of the RISC-V Supervisor Binary Interface (SBI) specifications for platform-specific firmwares executing in M-mode. For all supported platforms, OpenSBI provides several runtime firmware examples. These example firmwares can be used to replace the legacy riscv-pk bootload= er and enable the use of well-known bootloaders such as U-Boot. OpenSBI is distributed under the terms of the BSD 2-clause license ("Simplified BSD License" or "FreeBSD License", SPDX: BSD-2-Clause). OpenSBI source code also contains code reused from other projects desribed here: https://github.com/riscv/opensbi/blob/master/ThirdPartyNotices.md. In this case all of the code we are using from OpenSBI is BSD 2-clause as we aren't using the Kendryte code (Apache-2.0) with QEMU and libfdt is dual licensed as BSD 2-clause (and GPL-2.0+). OpenSBI isn't being linked with QEMU either it is just being included with QEMU. Signed-off-by: Alistair Francis Reviewed-by: Bin Meng --- .gitmodules | 3 ++ LICENSE | 21 ++++---- Makefile | 5 +- pc-bios/README | 11 +++++ pc-bios/opensbi-riscv32-virt-fw_jump.bin | Bin 0 -> 36888 bytes pc-bios/opensbi-riscv64-sifive_u-fw_jump.bin | Bin 0 -> 40968 bytes pc-bios/opensbi-riscv64-virt-fw_jump.bin | Bin 0 -> 40968 bytes roms/Makefile | 48 ++++++++++++++----- roms/opensbi | 1 + 9 files changed, 68 insertions(+), 21 deletions(-) create mode 100755 pc-bios/opensbi-riscv32-virt-fw_jump.bin create mode 100755 pc-bios/opensbi-riscv64-sifive_u-fw_jump.bin create mode 100755 pc-bios/opensbi-riscv64-virt-fw_jump.bin create mode 160000 roms/opensbi diff --git a/.gitmodules b/.gitmodules index 2857eec763..7a10e72e09 100644 --- a/.gitmodules +++ b/.gitmodules @@ -55,3 +55,6 @@ [submodule "slirp"] path =3D slirp url =3D https://git.qemu.org/git/libslirp.git +[submodule "roms/opensbi"] + path =3D roms/opensbi + url =3D https://github.com/riscv/opensbi.git diff --git a/LICENSE b/LICENSE index 0e0b4b9553..9389ba614f 100644 --- a/LICENSE +++ b/LICENSE @@ -1,13 +1,18 @@ -The following points clarify the QEMU license: +The QEMU distribution includes both the QEMU emulator and +various firmware files. These are separate programs that are +distributed together for our users' convenience, and they have +separate licenses. =20 -1) QEMU as a whole is released under the GNU General Public License, -version 2. +The following points clarify the license of the QEMU emulator: =20 -2) Parts of QEMU have specific licenses which are compatible with the -GNU General Public License, version 2. Hence each source file contains -its own licensing information. Source files with no licensing information -are released under the GNU General Public License, version 2 or (at your -option) any later version. +1) The QEMU emulator as a whole is released under the GNU General +Public License, version 2. + +2) Parts of the QEMU emulator have specific licenses which are compatible +with the GNU General Public License, version 2. Hence each source file +contains its own licensing information. Source files with no licensing +information are released under the GNU General Public License, version +2 or (at your option) any later version. =20 As of July 2013, contributions under version 2 of the GNU General Public License (and no later version) are only accepted for the following files diff --git a/Makefile b/Makefile index c63de4e36c..f75b495cab 100644 --- a/Makefile +++ b/Makefile @@ -768,7 +768,10 @@ palcode-clipper \ u-boot.e500 u-boot-sam460-20100605.bin \ qemu_vga.ndrv \ edk2-licenses.txt \ -hppa-firmware.img +hppa-firmware.img \ +opensbi-riscv32-virt-fw_jump.bin \ +opensbi-riscv64-sifive_u-fw_jump.bin opensbi-riscv64-virt-fw_jump.bin + =20 DESCS=3D50-edk2-i386-secure.json 50-edk2-x86_64-secure.json \ 60-edk2-aarch64.json 60-edk2-arm.json 60-edk2-i386.json 60-edk2-x86_64.json diff --git a/pc-bios/README b/pc-bios/README index 180795a55b..eacb97043d 100644 --- a/pc-bios/README +++ b/pc-bios/README @@ -63,3 +63,14 @@ ARM. Licensing information is given in "edk2-licenses.txt". The image fi= les are described by the JSON documents in the "pc-bios/descriptors" directo= ry, which conform to the "docs/interop/firmware.json" schema. + +- OpenSBI (https://github.com/riscv/opensbi) aims to provide an open-source + reference implementation of the RISC-V Supervisor Binary Interface (SBI) + specifications for platform-specific firmwares executing in M-mode. For = all + supported platforms, OpenSBI provides several runtime firmware examples. + These example firmwares can be used to replace the legacy riscv-pk bootl= oader + and enable the use of well-known bootloaders such as U-Boot. + OpenSBI is distributed under the terms of the BSD 2-clause license + ("Simplified BSD License" or "FreeBSD License", SPDX: BSD-2-Clause). Ope= nSBI + source code also contains code reused from other projects desribed here: + https://github.com/riscv/opensbi/blob/master/ThirdPartyNotices.md. diff --git a/pc-bios/opensbi-riscv32-virt-fw_jump.bin b/pc-bios/opensbi-ris= cv32-virt-fw_jump.bin new file mode 100755 index 0000000000000000000000000000000000000000..f5bcaa56954c860d09acc0cb337= c1666d88b6efb GIT binary patch literal 36888 zcmeFae_T}6)<3?_oH=3Du5@CVR{Xjh9Efuu5GL>~2OfD9v;UQ>~@%=3DC!leX=3Dq%v#vMB z;mkN7pdE3&*%01 z>wD`Z`|NY}UTf{O*WP>WwbtH~{b0gXA&CS#RfI?@k{%Cb3DL7`r(x4vqP!bx-K-+=3D z`-5Xx152DJBU!D#w|>A9W8bL>_q{9Rz7pi@i?@Z7f?S1vPFVM@aCE9#I3=3Dh<@mAlr zaHL@RGZCh~NWS}6e)I9I&_H|%{6ioAm*pP|rZ-XMC6fNJP<4#TgM`=3D5Sg1JMKwm#yrPEFV#DXke|?E7rOz3+;X z*uS!b@%``J@MEW{P=3D>NOnj1&?7f51QOTx`aqnabGT#guZ8sc(jh%taC^}~#unz%$Y zF=3D}+gWz!KOA3#Fw;0YfUZ+(d8*oVzr=3Dq}_{;SDZ(K0Ed;V_y{!$1&rKs=3Dma#(o?kZ(GerLL zuUjJx58nAz#_Z{5h`!*b{~^P}c=3Dl1$c&}j?CltNF}@H8$%dRf_d-6){dSqmOpG{!P6dG6x1wnaV$Agb#=3DO)zY^H9^qgNR ztr1i%jWPR6;#z?o`soz0evm|rg)GrO+m|u^`9~7o*M*#Pu8_Doek2urjYW|7H=3DD@Z zKyvznkn3+x3k5y>zK}c*c>rKn~0&>9il!NRb)o>$& z@#^EgozD)+h`AOuImUZmYe#kj8GbmtWQU$~{g;EM9I}(-JQ*B*AhIH@GSmUy>vVza zkW`Kxs^g40hsyaW`XRS+-;uRO-4>NAcSxdM2dNW>B&w3%N)Atbj9HPBO(q95moX&! z9@TI|*c8>Za1tY(+C`+FVu@4{O9Z=3D$xKs?$Gb>t$ZjzrYt^F&l;VM=3DCBed4F@Sx%S z%W1v-2UQ0&6@9DkIdtzA_Z5t6{aVr$>A}>YK6WDh^av9H~53edre1F)>`F{Znmg{NajI!=3DO$$%om7X;H z)bzO-KV@jfuNxnkx+gUytu}4`gq8`KXVyIvIcv|XlxJ(7ojU)N7z+Y9& zsig44Y!Vhj`4$*N2$N_@WRfgN%s9(9CfSl~Nny+uGc(>Yo=3DLT&GHI4HW`bn`^MvII zW};;xGs!ZE`Ge&T*^|le6*((%zyrWBa)i+5crI)OO+%5_bDT<>xFUys=3DS*_yFGom1 z4qoHG!HYJ3vF*sQYTL0RhfY=3DI1eNAC#e@yARRg8PY+N`~G&h3w);oAua&Uz+ zq@Kd9e<6dE^$ENBL;VLJydxGJdr?`gGoAU)18?INiC&@kpEO`Ay2{c+9o>F^_Q zSFN68m6(6VBU8KkIHf)83AU;q+W!@?R;?xMaW!Zj!dQ=3D064rB(u*Y%<+CkWZ!x`(L z>x4b@DGBGoHJc$V^^9?TE#s=3DMVk$IAd!27eMXy!g zx|CuJZ6OPbf<1bBsMRUa&ziu%JBtXTQ z?}d~GKuV(_y`#8rNFwdu3*6ZPxwHw;o?CiMlyjNr+niTfPd{RE!0F-S=3De6ol zi!5e6(@-uM<>sN>;ycQHXz2leQBzphpQH1d!Z!Um+IC98wG}W9yd<|Xb1C4xL?tU| z*2vu!)4(z&IQ$FEvB)E7hbC1|shnOh^8g95CKog8c#&bvTbWWjYue3hR=3DX~$nIzs+ zB=3Dr-SGpn{9V2`cE4DuBRso>b-xtK+^U{<+^S>#iWJ#?K5?;FkDZJnrXQJk=3D-FyAV3=3Dc9 z?uh)o`K5W7D+ZN1n!-*z9-UWmD9u(YqOXEt9xznnNcHaQV%__9UeUrj%vsr6Gj^AH)pnu{50ipW?Y z71re4n8VVGoa^Yw(u}F#+5gfI$h-RNs?xmZw=3Dr`WH-7Q!{B(k!cJOmM`02ibpKCC~ zmM>@@n3xv24E?Ti%(O=3DJB8Fkt+XBg^0BclbyCvD!8qW;$mRrk{^{uUe1HJF7-?!q4 z4D_y1ufbD1p0KW1#eB&fO7^c6{&NG7oI}VF=3DR4z$I9J%Wq4oPBzV`8#JZBiTrH#TZ z@4TB|lv~-)B@RDRM%VlDGK`#;!L3SYNC!0F*)T_GZh5^E@+sNv53d}TdN{J!5XO-s zfZQDM$amS#CC6BQWkr7fptU*_lFLJKqaeBQcS&v?xa0ws8o{O3JGfMGFb$HsDETEXj7(YJ>8o%hKlBkqGvHIw2_6aCnk)Ec)e zN3slAQ!tA_Ug#`hHDeCxp@)3(`LDM+lz<~xZK5#e#gm>j8B@vUl>a{7EA6Lkhvo!5 z>Hh_125_2zGYdGE{vY7YnW_IXDch#CRGnOC4?ZuVE_9 z{ViM>z-0!mEZ|!D3%D3_c?yG-GE#JmZ3>G?l=3D~Fx?V;?5paWPB4|z8rAvmU#e z%OCmq-#ow3*DTu3qU|i&&h~8kny#Lf<(&32W3r&1@22M0d;Yg5aDoCmDA*1P+`mbI zf=3DgK+Wyy9mXs|lUI`&8Mh_326q7Qdz;MVF4maQ@aTNbb_1-9;QqQ@^w!^BI&JD>8tgqiu6?@BBm~xxwc}PN9!ebHj4c)x)T)I=3D^_sQi z-;Co--;~R;)yGudPHTJhb!}gvuD7_MW373;$-AbZWA(Vx`6@BiS+P!d{*X#& zYf!CL>X*A?lZ|op*ja5#=3D;NRq>tkBt286ZMw;0nzx6$2zZ|CuCMw$0s&CO;yZ*|R& z%3OXTcidA+Zk{B>I!f0H^IJ)Kh9OKto~a1cV6N1p{6uGXXj(%>vrxaC1n;1Gclq4` zqc@G~u$cXG^H`D6K-bjBQ*_5#Kz^soTZW=3D#n&X`Al&h^v?L9-_iBx zlSVdD-ENIcZZ~Gtl8EC%ehP0nV&q#$HsSBt=3DJfu(t|Jj+Rge16>ysp;(2Bwmj0;Zo zT*>Gv=3D6xr=3D-4D$LXayc?L~c7EvKDjAIT@z=3DXE0Cveu+DqkbAnZ>>RzIESv1?@n-d? zIX(_XR%oiz4iIf=3Du6S8)UDW@2XWTwds84%~`fu&HN6KB|7E+#K6t9!u6mXA)hVru& zOgx`x`dci8VA!<%v(OTs4&WYKF0XG}ztuw@A0vPNc>AYJl{HF7GTm&1jwHrDnQl_F z8FqZS);iv#wVE=3DuR`U{VI5f@yOoeavc!57!^pRD6BZ>%vwOXk;o@58b_sb6I-!FT0 zWWVgl$wAhXbS+D3n=3D`d6YH!xiFisAckAXWKD-=3Duk4kIcVG-=3DsMECfkZkpkQA7`)|=3D{$X5rnNWQuro#4qWqa{Y#{ z7p7+qjTtU;yy|GQeY#EFL74uhDd+ZrZ1prP^ggZiP_mXi zq}H;Yd0OmmwAkNh*{a1_>=3DQM{`TZGr#-#jwvS=3DI{21!rmoa3zn}QPFL>uTnPmMOH(FW*1^Pme2QKJoNv_bvbZP@OXG0b=3DSF;u-R zV=3D#Tv6cn}$Z2*R~z)%ScxxjD{7`6bzbzu1PU%WPHSjG_XUrj+I8*PB4 zt{?W?$=3DGwNIkW-$?jhKBFNQ^LIJL$2#@Ig}4_SYaF+~2wk3lSwF>qU(g3iByHUPs~ zV5kHJ?Cw1mfnkepXOA}g3m81xWDK@#ehiro8AJWMO+g3dqYWCgL4!7E&<5;$=3D4sFd z4ceeV8#KS&hN$;t3=3DNz77)(|fL)CihPM$*>fMG2#R02aTFkA$NEx>Rc7(V?MFxcOg zF{Hc=3D44HIq6|r2#u=3DOqMlxDKn*IBEl!3vg(StA*i!Y!CJ<}sL;Fl#Jke!C5g#WIF% z#eNLjQW=3DA|swwEXX>4^r-dgc z1mugrbe;FxKB?t%R*_t{fvzS#4s%&@T@KVemkis-vQxH5*ib<06z6>Ofvq9atLD}g z?4s`-CfKu5yWVTLw?6c}UxWA0Ddo4#_x9#i_t`szT8mz`dZuaFYOGCkU8-KJ-Hi1j z2`jn;YOp#x8?g(->Q$xI3Q7DukVupoj#XJMvMA;q=3Dm$Lyfd&`zMC1P$$XEn;#IilSy7q$=3Dm0E-KEA0o? zi`tj29B%_B&)$q&q z3Cmmk^(^MIidIRfaC{zZ=3DXjC(Ah5NA=3D9>YZ(jvp;DpQah!}-QnHX zcn3`bk5I}*%=3DgWmGTq({cTz0`?k2*^yH&qX^4=3DB&mY#3vq_plW&iq=3D^GdrKox2*Cb`FrVxzC`6@FLyIVABR zL{PZ_;jvBDl-5pRgDMQ0G}P{;8g$U# z56jc*mEI2|2~2U8WY0*C=3DYxnLsFnDs0tBB;YGBp-rg-=3DXn!?U68u%Ub^cVcQ_Mew{ z?pa#mxfwl6`0a|(4$ObEOLO59BM+oV+!Y>Bd&3@MU@l3;{fOQcLg@Z;XaAo2CqIrw z^EtC6MX%9>xg!R_vq*yAZ}_tx&%p1ft;}CGJBkcvO-^D>vBMX)9V5m~!nyPUcyEgI zA$Dd~fjl#3j%*5hSwmsS{eb$gMQIbMO}3}}_bv}4lewO6{u;GggApq>lkQRC;&&$e zHLBV7-rb`&OYNu~_~=3D%?pAfQ}Ji6U8XvrO;>tj1=3D_4fCqOv9b;q>Sc7sn*T3=3DNtJN zQtC_$UY=3DiU53dd>BHBEjGZ{nb$^PO;w{A^Qc3Vn$TDm>I)VVxAF*u~C*v^^4tMg!a zk<05%&7G(-|IRx9U*hodm)bHm_28Un1_!i=3DC{e{G>vxCt_`;b7CAN3|HLBkC_0Cx- zkOZ-@$<#8f^g#~`cCfiLcR+<9Ttf^)G-Q`Z{VM0*bn_~by^W7yJ!!yo(e^VMOQrk;3a?Gl%z0 z_PuG2ks$PgW0+%og<&&#VvC0C5o5(&pdu`b!n=3DmPFystnvRBi-pm;WAcJJV+uZj7W zpe4-hg0{LRv;)um8Z_NMq3yX@UC=3Di5gm(VvJE1|EyJX~-xpv^Gf5x@2j61pZ+px&A ze+KKhDR;u6Jd=3DH&)C)?2VC{1Z%X2(VJ#HnRcef!tjar^5mrHX`iD@>ym`dW}X{l1! z0l(|)S@O=3Dlm{Ljmc7!7~Z?7%Qwl}xbF)Qwygp$T>$ej`?oEc;8u8kIAZjH9N5ee4E zOnYAcS|kzf)e>!z@wIv)1b$DFxJ1jq9c((H$mpB?-xKz!NRp&YDy9;$rhKhpN2RbN zp6ei537#@Nf1VRwZdK`dQ>T7uYapzb&5dMMh!h`zwal+2iHerw^!b9!IqSzg_Bopp zsFA=3DZNhuVm7zMJTs8U~s%yxp*EBWl2mJx~^QDogM1`23PBe|fsR3i;PO z+1s~Z*-*?!)TSqB>(%ee*7Ses9}5LW9vGv5G5!vWB?lv6L#Ms%_fR$e&u@4l{wb`Z z-^Q6%I4MnHSxD8OM8|Q*(e;S~KR4uf$e=3D`#A5{KMVteR2<CJiP26{I4u-nD|g*of)m!Ri^)PmTc_C0C58yZ^l_RF1;CI|ZX zSxQ^zEZY3l zsV{7`+fE%haqJjk;|`sxzEIgv@xy@^&*coTnl&UkPZ0SBcdhz3Z;ykS$V|}dCad(l z3A=3DTIlskwB??u6yIEXAeCTJt|lqZ&n0%B~~>W2~i_b?GBN_>n;(6saw2HF@|j-<dj(OFxM}ppjPfgU;X5mue}1rxEUL z)mXRd$cy${HoYeKcC9!?Gz46~^+AC8){Mujh`3p!i{2RA%hD-m0*Ey#fEaRkvS)JS zv_FdLrfFuhq|QeiV9JC&6C$5j_k?ERPqQ*1L$C=3DD>GDJ(szRrqKW4YVWyV=3Dcd(~%!n&OPw@O3^&jEKP4oq~$I@CgY{_mY2~o!M)b#o~)*H z`o52d-blZt`@TthkY?yut-Q6)acMV&0c`5jve4<&uT}kq zpQ882$`ti+)9*4h6oO0tW`rW zb9{Bn@NnfVNdrFU>_ne$M|5_LipmTdnS0wBS$SJn(X8>wj;&eU-4m2zsQ^(kBcxT7 z;vaM0-|eqKar^l_)GU`ALI#hORt@)+97(BHctG2Kvy9fLD*M{LwafEG{a%Xgs!!9E zKo6{%B)AF^Gm1WCwktNVUi6#1D$&(|@#!B__mJbSNRYe=3D>M&>N$W;$}2&?WPthm)t zuwKS%Xl$nO`%p&0s_Sax5lJ$_)#(`BEQ=3D#@UaWylF2JvExQ(tLVT zUcGx3e4v_IGCxdXj*P%HW zf8F&eef6+*v`wp&xZHNR?%g%pfA6n3a*^g3)v>AHOzwe*YXiElJag!Y1C$2z$zLQs znMB(5gAT@Ih`iph@b~^2+?A#)$N!7AC{jF?`~c|rHJ>_-Iy5}k`i~EPBgVxEZNm=3DD zWjiz%_Z^xGWBMg+Nse%#+8ojLusZm1vK2$tEM)KUu3R=3D{I{XdE@IB0f4`MO=3D4vGyE z((r&;$ZCxY&A^D~qsHX%dl3~i!m$^=3DLiXS^mOTzn(y@N<{llA7k<0=3DDYdug2uhK=3D8 z^`IIanjx(9crLt3Ti|6{3~$YKc$tQ?>@j$m*zmy3eZw_IVJeN-oZkWo%p%5@?uWkW z`ti@CLQ}!P(phk(h(?RL8fuvf+PPYN|3b#~Jz@Z#KTReU8iri&(DUjJ(fmFvAIb1& z8^Zc^8p73`v|pM|e49V?=3D+O*;YaZnHahqtLRINp<6evHGtN6VtLES}A{VDun*HxRj zaE+@z1QDt=3DXUvB%Nc>Wk<%HTr7^`T{u7Kk#+{H~Qw_r>f1`aPYvGSpyzagWumX6*Nkh zb2apb_w{4}?FTDn3)%~3iY6A)K3LP$1K@u6^$tU%8a?pWYy0-Wr=3Dn`Q@@VDF-Az~i zx=3D)%8i*p9YNEsqy$lap)AonYkLA8uKAT&qeHEgl z48@Jau(pmEHuJ=3D=3DjVBgU)A`Pweyy99^~Wbzl9{7=3Dor#p@qR-F2`HwWw`c)-qI{)5f zTDp6u&jibJ2i+f%APF_19f({$Kl_q3<3nPdc9=3D{OH?D#${0BNWNT2qDMJ_4zRPwG=3D zI^QJ*YpUfvFVS{md#~P)t*n7!lWX}cDI?4MwTL$DKzFUjFIekx30u2`tW2<&jG7je zVVfEhcW$OFxc`E@o~Tmgd4O8?=3Dv>epzbWrB=3D2nscV-D{=3DEcK#oe^!j85w_>w{Ki^W zNtjeIO*g^v_u?Hw?@W%q5vJc%S?ewmwr&gBdBn--goBNwq=3D*G2s}fv%t7?C-YD4rY z@Asu`&w`4wGjs&Zy=3D&JH{sbKjeV(XsQ|f6eRwhu|X&Yz{eY@_Yo7Voerq2`Q?zpOt zs_2T?Z4;qfFU_4K4g;m%o@8q(ee?+GdNrl3)G6FJib!x2VPzgA$3-KS>mM z!@BF>()}lT#^%z#DJi<@UV_~x?ajxJrKcZtKXP>I(SMHl@go!>&Q5@Sig#7QD4WaP zs7e#}Q+%srK2;Jc+9+afSsq$$HLSZx49@FBXs-h;DCN1E3InW7XS?Vqt6G#^rC8~+ zBNDF4mPW`eW_aucVa+9~2R4bkVDk{8vxRv7b31I}@{ax2)*~z8@YduDEBK(1i^9K& z{5tLQq}nN8O+PjB#IwidexW&+LoCV5)0{KlTXTGPE)=3DO=3Dw_tzhGe~03id#NYL;QRI=3DPHTfsKki;vq9iqD2EWpb(_U3Wd1-zvy1xMB6HiYj}j$KOXvP|O;_$0X-R!6ubuJj zbilkHwg8$BB~Sj(Oq#dK`6!ZF2g$i|{|cI4lVASjT;v|NY%Tj~^4w{srX|hTH6wiH zTQgNp|1@Fl6Li(?-g|3mX&e?AfLIzw@G)mP+9Ym08Ek4gQFPRqh4p*$_E!X+d)TU+ z+hCP*8=3DLR&7G~pYzytY$ihpomR(22{L-SJqI_!6xSb6Pgp;m)Ac{^5Mw{P|Jd&s0$ z?WCZ3c}8|n7QA?JS${c+T2&g{h*j1wCw;L-iTOeZAC^5i0jIZuV)V{BB2426&JYct z`S}e3-?I-E9zKa`q=3D=3D|GLH%4Z{1px1_NndvXkXENh{4PM(PjWrInhZE{aO~P7Eb=3D>8JRCj~D zG+J1t3$Rw>d`~sb_jqu=3D$8-1j9w%t91Il(lardC%OwsP+G_HCdY*505?Y+lTF=3D@XB ziS^VGYqbZFLydscN_=3DNHv{+lo1)OpUWnkgsE88UvG*u1NWVir&ekk}7_9=3D+Q%Wbzt zB)3z~^!fX|3pd=3DjGhUz0oV1UnR$k?Ok3a9gI-0#YE2gI`c%S9Z)%-W@Ioea+L455; z|NRj>RL-Ek?PgLA@7tF=3DrfgaILidyDvoO<4ROS~dbD#+4i#Tim;cH4)LMIO9kE`Tb&|S;$9kRTr3rf)-WxS4zE4Vw3ovy>$}-zS*8- zNzAgPdcO6|oAAT$fd&G5Wo!0ojH{sj!(|L54cS4{sqCx41Jn(}x9LI1_d}kh1L(W% zH53{=3Dq6%=3D{C$8yy)8$aK8v5?=3De&guO<0Lgj@>i2_(7~qjfAy{YevgK{cKh~pJ_y`n zP3Mnak|FRheh8AMwX<1)Qa_AB`NJi7Etb73ekd}Ys)w7-7u73#eMo*MK9oBSwAIU+ zhabDF*H}|(5J6vs2>N>L>zeP_BhaXDT8HBKwb}nD-Gv~oisxV>~t=3DG#5gY9@0^D;cgy{l)6XA2O)V{vB0bGV zIb(RVbx_m!N6*kcy%wD?oR%r7Rm!xQ2b5&YPS{VqL)Vq6f#C?^U_a5fAl3I(DIVABTTM3xR7^`RVV9?8)&WM30n4tCUg zaq{qww}|je0{?NIC0TCUf_p;$)3?S2)73igbHP51qvuXsbxtDY!w&tc=3DLJKt_uw&W zMnT(-SM}s^q__qnUQ|=3D4FL}K8Y`Ar2o8@ytSm%AZ>>j(dxxBi7Em{T7$ zU6!ErhMMUZYMgyFpY9o@nKy}a>lU-uS(?AXUb~7#Op3Kyj!9uXG}^O!w{y%k-#)AG zYZ0q-P}qb=3D>aEZN^fP7<{j$S+WQidRYsCNc-ixmI&x&`i`KNrVKHXhdv7@tMN5^7E z*OR7GwlvV>J9&8G`2Q-+&n%-(b?9p#1 z9&e%Z25TOOx;oSyin=3D53sCx$Xn9Y@w&Q1Ad=3D4o5?wu&PMrholx?cA^CpUTnha~ z_0U=3Dx@C`M&C%a+-ET&lnBl0k3)@L#?!F%dw650lR4&eJ>z5yo1D;v24dH*Lpz6}%_Dp4 z`t@&&CIu;Higac{|34(ye0NmSO++;vMpV-oL^WMP1oxhV$mDg&n$(|W%$<2^X42EU zo(_NJt!JnWi=3D{X`=3Dn0CW3jFl%a@+hn+*8nkn@;>;En`|(CS@!^G{V-;Y3rFMhPtJU z3FHB@)M^hD3ja>n2=3D(pIP(sE!8&!=3D}4!2`MIZD;+)^oXC@3SsGg7>uc)!q81BZ&Tu zH^>9M?&~G_zfcQTgr-80fH?z`V}Pb}I^=3Da;n8bkCqU7x^{aKje^DSwhT;gqVLW zA$uSpMXu=3DlYmg8rBZ8rPr|0i22~Dm79AYA1fOB4b2kr8&&#{-w_?}tLtb~309vh zy<69hzNc@4)12T}sk3oK<7UHtR8HQYJgQclW zQs=3DfsZg4qDpmk!$DwYrlI^1*{A;b?G6H9s=3DoM zAUzC~p1XH0bl1XC=3Dw`?bg>LF0H(i#IS~~gSN zj&n;(KWESjQ-jgY>urxg(%yii%}77_CBFFjNB*J%3_pjuxyKh#C}$xlYm}HMS)bwG ze`lPqycxGzBrx)utoPm-7r>1z7R`ec-I30Xld5GcV@f3~vJTjf)+qHiqJHyDwW43V z{Z2xj?igexkc4RqKG)wH0Sg7SeM~8aUG2a-IN1IYdd5=3DGcUTYdSB{f76Iqq0P3*D(_;dqU zo;u_*Sq`+}&1NF!Job0S_2rglxNO_W`ifxid_cLM2HFz8f1P?EVGX&Z;1PSmuv;k% zqkTJWEQw+$47Cr2-*?`{k@NSrDD^F<|9Z1Z&ha_#jN5q735zoBY5DWd>5L}!?Q*$A?~E&Tt~w~g^o;`Fd-KcmyOZH8)6#xxPA$z$~?PGWK5zjcHph9SSwm4#8fkea}2CvOwDorzLq(A zk0!Fh^;MOM?mZy$pu+Ii?eh`4V)8w2t()&lKWLo)z~d4}w0%s>@zhupMXB_S? z35(@QowT)np7i8u)NDGk6Bv|J=3DW+LO!-~fi2lbdGsJ}*YY#4koxYHzPb#f`JLzNw& zDbPL9I%-ckKRT|QjjZgz3B4T2Q`f0mVL(pLH*^XOjp|^|V)|(O@~Mc;;G|l337vLE zf7;GSEiHlNR_YV0(9md@^rFqsql9&#j3F!&mZ-`ODWiqi9H ztJ&q_E@NKb6{jj{WSpi{?-b3g%WlN2`uF=3D(3O0Mj`+EK_?i63TZF|bbD$y+aeN$4z z6xj}zX$s!7(nqo08AV1F_bVTeB=3DX*+H0ru%Z=3D>(3v3I<*U90Q~J`CVS71Oxy7540i zE2Cw3&yF}h`fOQt#EH>W_pBsG! zezcHg0(f6Zf;BU~VMEoVA7PuMH45ify zg_pN0yB5#(9u%%__EWgJo>I8FhElk?ic+|GH>Gg(R!ZUOVoKp^ky5yN38ip#CZ%w7 zI;C*6iBh;aj#9Wff>O9Tgi^SgqZF=3D=3DqZF=3D=3DpcJkSp%kv>K;b^@xVQJF7W%oBciZUU z8(r1VdDAR>Z}0VSt`rhSq}%XO;SMYP%m`u(UCKDjBl34S^Z@~*^g3>|l!iFx6)l=3D6 z;zw~(eJj5?ec6HxCoh;;N6s zJsRa>riiuTC5&#r7pwce2-$)^MH~wF>K^bZY^i1_Iqb7wFG)W`+vVNf`%?LwinGU< zE-Su#s|byOE497{ewGql80St^`WC{OCP-)GJ{exPVzO+PLgP zVw|yn(Jyr{-{bBLEEg-o0~hO zrJ=3D;(DKH0c-??|$Iji()DB`C>N%PmsGmQN`WKqEyK7d<-I0r;GnbLjjnaYv#Sve{) zRa8=3DrQSwU4sg%5ua;%b9QckVpm6YR@ypnPnC9k9$ujG}K(<*r-<#bA3Nx1+eucTZr zC9kAhZzZp!TpuN`q+DMmucTa{l2=3Dl~U7_v&Qc0&WN?u8)s+7EvPGyz6l1^1Cc_p37 zDS0KGs!{SvI+a)QN;*}meM zucW+D$tx*8T*)gbAE)G%lpmqwm6RTDpzXCQDgPfzUP<|pN?u9%QA%D(`O!*VN%`L^ zc_rn?D0wC2$0~UxxXkm=3D6 z)}n6cy|mW>-S>9J?k-9QeVgFJDeglpA73`g*avIB=3DiKOVTl{B2?;4Hp)ixD+;sE%q z5e{rqqphC_+8Xc$JRH!hfgcdiSL8^Vgjn>0R`{BhNB`iAzhp<>^lw&Y2btwEHb_S=3D zS{KrCZ?h^pC<-*7F72s%Xg(g4tjIy?dyntFdZ_Qq(;Wld3k2%kD8h%I$1l|t;^>Nw?w)7DA8sgwz_<3p)4B^MAkJqB6F7PpmSnbU*Gb)^%LQ9a}wb*rL&9(Rm-| z7Nka`u1VVlTVbWo-$qgeCXN+?BUr=3D|w+mA_)t#D;2{3VkliNC^vfaz2w=3DaipJ{>nH z$Lgw-n+(euZ zO~w5NZcX14lCAc~!G%KaI<;H#)1$cGE?D?oU4T#*04t*!u|NF~8#EmL=3DOHS&W-98Y z7twQpLj4aKSHR>%;nET9{-fInQzlKR@_(8QO-I6S*5n~IOl)sUpYQ|gBx^+v+WqSXZDp^Jv_76S?wgsUz_cjoTb!eDWwgJ!l;t zLU4ZvWOWI#nj#>#>5$({!j6k06^J;y;PcMn&O+=3D3lQi@`OUfO3>!l&=3D67I>R_fm?0 zQVb|nfYJ;oTLA^Vn^F(yXHC0(aHx;>ZYYO~)*txh0G-(?}w5`NCVK-?atLKK4qrY+y6T0ccf7)NCfD5Ow zBfS&2HY=3D47oPd`?9841Khgghw#(9jZJ`?|zFq;D|V3u&zr!zH}OHLJ^Ec$runW8b~ zHEQAYR^rXk-2$Wo$15qe)G~>?qVnZW1XoGw5aNAH*Ri`SJ$+x-h^F-WBR8lmD>fe% zW)hR}*kweGwsC2~VYQl$@LYNaPSA7V^b|>MyO4@l*TcNpE15g#=3D-&owX?@&u+t=3Dcv zGgvp;z2=3DN|moA-YI`D_O1-K7WN2c2(j;LpfqBl~!b5=3D<5-Ja*I;XB%=3D)wr7u1fIs8 zLH%Si?E1v3Z@p2D8(VtDj72->2`)rg9e8O^sV&lXCZo^e-PTDe6I9kCadQr}``~7T zAi>1>&J-c~)n{R$vVUipO~L*$!9B{1^x5dUV|%EjK8KV#D3?a%?a!a{c(g;9!I9z} zN8o2z9*>-f)6n|~Cy8qi>k8hqO%gvjWcBozo2#}!)|0Rf)D&&TU6#5Li%weM5A(iv z>lWo8I8Zt9rjU!<`8GYoQ0p}!;AWhf)*X36E!Y!hSdzV}fDUSzy;^29o3PrXq_b4{0x3~)SvbCAO6*;mvaO?zuZp3+}$PqF)ZEU`zAh5KTe<++I3 zs3g9!qcr!)xQKH9Sn!VmD*IIKPhyOsRnNDoz`2f3_>K9+2hoCGSWV@!gK1gv7}vx0 z#MP8BrYhgs6Ycs}m%5L9G(%pYl`p*`m ziE*RGRM8pPYEDH@%)q+83_Y=3D+t0xqS|JbVfL?_)`M(BN$Xq|5jL+gC2SI^cBHtR(- zBg|_hda=3D?sZ*-p=3DqBFc;3&2T>%67V2M?2sn?H(g{^S#O1&G!XAI~OPOJ?#+XJYqY1 z8g;}5#0DOCDW}v1zja6G2x=3Dp2SWjof561*oVT5067r zJ5MQ2JLHe=3DM_g7)dpgc`lhsebKEXDtu>z#E&k(*)tLVJM#Y2xtp-+Ms&j{JK$XLv9 zC(=3DuEz4ynpQ`l3wRuoFt@|n$UCavD*b?%Ot9OjUpo76Tu~Vv!x(X;Bkzetf5^S4qONm`&xG{ZTPG-=3D!%|h=3DjiyHEZ+NXwy-o4^lWEm7TMl92K3HS(cVx z-KN_yyWBmBbS`$n?3v`<$2a0K`Hw~ z=3DYBE&$R7{okm&qjR3pi6A_o?h=3DIQDYwN$Z`ZJtSI#_7KhpO7?>&X0y6>Na6QKmbl+ znQ@2s6Z+m)R6dTL_=3Dj3xOLafcHLVS?k0d58xfw9$H%wBD7!c9x0{9EE+m&Bd=3DH-rA+Nja&(7+IjzXbT$`z z?_Wz{7;+Gku3qMbWU8B0S2IfUy#1Q5*UWSv>H)aUITkfSD#xUbF} z?6yW%wsBo+w5)4PKZ4jwx9O5tG4ZhT|KksVU@(cmDOf1Uq>g#XSWSHDn zGZvM}8s`thJ3i`Wt$mSiboh4i8tf8NN**6r51qe*$~~2T?-QKwd15-v^_*cOUwIlM z+9$rxceIW$9@a|SW?@O8bH-!w{;}hOgFFBHc^Q^GlKe9^)m^X`aSVg?mafQ|LoxP` z{#+}jJYiD4hJ>QO`(sXjnj@FW;0H>fZ-PQF7o>1lshf5_{)ulMYoFwk=3DiRZ3&eB=3Dd z`?k4#3L;6ce?PLI*`%~yo*hV#-rn5VoFOzes-ZzSLO_G=3DFr^ync30#&ouil?rJx}3 z_jES$lDJNadvYJ(PM2HRv;3uL%axnzx+7ocd7D^7m}73#XYxE;{( zcD`5XQWqzPYNM_sVc=3D1!?FmneWN;_14Y80rzulh(&(EB84xWgfG1K%`WyULl@n7|N5R3VBEDw94^g86!XqE*HK#Z z;DRMJvP5Vc!dN!#&jmg0QEV4I>tuRd_ANws>88pXWa^9*<-UCHBi&)zyP|HJbAPV4 zF{-`&4tnYB&VHKf-BmMcFe2rx?qnpOERrHn>dKWWppM3dd2hQxOs&F&rEku#uEz6W1dZw4& zoJqe|xxIk_ZB+9(Q-*W59kf04%Xd9y56V-l>=3DD#fR&}4xX0Wqth0N8^NV>MqA56zy z)0L*i;GE=3DFm+iAHwrQj?k4SP5fKeO6{#Mw>MwgW?$md&*&KU-W~x3on&2G{?xJ|){+gzs-^X$y-s3eR#lb3$8(JzbAmynQWvD7T$S z+nVMa3VWg>m8bh2dY^UrFqZCm#`9|7La91{n*^WSG5F-58`Y8%&QH!l|Eyk zn?|$H`P6p{_LV<;&6U%dqw;5!aRJ_hfR0i5OWYG@q`K$K*jF~n@lhE&G`YRle-9GX zh*Ge}rW%nsLa_(Q8f-k@_k^CW`%zfcsEX%*dK59Y!NNO@8rE!rcABn&4M}B9$)t7( z>?{!dz&k2Zp;bjE600?IN$SyERyF{RW# zBVD-N5ahrw7XZJm4tJsIwZMP9f#|h4u-4dNad9#%lw`JgJ97c2<&GAHk3xm$>fzmlMDws*?hXFX<|-^+mYDhn`{s=3DS$+POrDR1O4l>f6%jp zpuZ^A>3!bQHYeR%-_W+(JtO_Fdsg~#SdJDd(h2!MFBQXfgFTRWE7jLw-Pw#^kl=3DCW zoQp^7x!0|At@IF~=3D?0ZcluResPoh>PN+aGDC4JaXPgod=3D7-IA*_MBGiT2Y4ftFO#v z4YkXp7nP?7Ee)z+>x8U5kWR?C335KZOU^+vg-C5o!h8>8ZS2o%rSkb-IXa32eV4Jz zF{mOqh1$5{;v>ojC8lQ>HeDjPHx?dLcyenI(SZ9q5Y2#JR7v7#Gy~eV;1Zz`&|A$? zZW zp`61n9>ftx6XvUq!(&7R^N zHpu)nuVU7K%&R42 z@Fwi~=3D9H)+u`(hKcjxiVnKygtl(NmluN%`}$B=3DiLKgWPb=3D{!?xv?JtK)<|QYner7< z2Fnz|R7^%CFQDa;$d2w9)Sj1`UA&k~Fohg3Vz?of7c~qeKhwuCPsQ$-|2c_DT zT~wPjBb?S09w)qDfm9V2)&E_37Zln<67}C|8R=3DYKMl|`TOmAe3OB-32riP_`}TZyj3!dt4R~Zr3r@PDukQ>q9A(-a2N4k4k8E z7i!eyS;B=3DDwU54wE%)i`Y|NbT2pS^R?PkPZvmPG5_(xPpPGjF66NG#F_7*Ph8DxyB zB6<__V6@YM^IFv3btO=3D^RyPRs$phod-89;z+UEUJ=3DvB0syl)=3Dqd$Y^tea&+bJ%=3D|X zyIt#V5MwP)ilMc}XB$|f6a6*4hNKr!KG60X_02>|=3DNZ?l4Xn$4jIF>q3gLDOsa~ho zbfES9LxrDO`Y*e$dfmoCV{HQ~h4M_f)zt!6;xQGyJ7HFl@WytMf_wN|I)&#$^}?&$ z?^)I#`H;Sh4(Fv!yImO##I>%PIa_G_5;F3whH+(hS?OJkOu_mp#+Xr$Q|&w>Jq0@Z zS2M+7V`8YX3(aG^>ih*e~)Nc$u)YkBC+!U_%j zojYSl71OfLySS!9kBA}qRbQuJ630J=3D^WGY!+`Rm662?WjdAG}g_(Gg|w=3D?6J-AQ(_ zY^?3lzPgkn~8A%^pqdn#HbHp^wYtq4D?%wmPxco z(=3Dp!ud`#uyn^j4Djalc2@LDTLatfI|tZMXWaFJ`e2bu|sJ~uA);I{{BFp@Do{;^$a z6t^cB(?b~AUOEzu@<@C^8Ht%UqNVBGBXRrDpV7EMd!PP3&?9n*lrH)kf_lstuG%V< zs~P`n)hzX-2}|oJP4ht0AL}ARij3(V|6Jjts0t(21&v3zv7J;ng?f~`MxT1p7roN^ zW6gDp!+K>LUT6u^e~H;m8Hb*O8=3DUMhj6;^FQr~m#QGp=3D>> z$=3DO2J=3D_=3Df8k5O>$dzJn@IvS9l9f+v0Omen>-bicgKOa(+Ng&neoo`v_b>Bm(-?%|W ztd~||TneZA3yW^_zj@z?^+xTD1XsrQstT^$Vtnm;l`*hWr4Q9I;M^OH%m^oqViOkB z-6Je*)ZYvp;jHLeKG*eQ2hp$msnd0%FC(QZ#d}E?Lqe)E~HT z|Ala)h2S?V>NV(H`h?l2u39BIIp1tltupdIs-$8KAP6_=3DNky?x&!HrJDk)g#@-A*} zG1@!{F1Ls5ac(TwWiKhye~Gb)aVSCd%FQ4Cw=3Dz~g8DX`IzwG+h{@uRn!t~uq&Sft7 zcLe|a_um}&HwXUBfq!%0-yHZi2mZ~0e{``RH zp7~ix-}~9K{{&cJ&rn#i{}d4RC;U(UP!RMLg+(9#6!su}reB7J{Rv5T(Xc2A9Z2xk z_xKDg`HTQ>KNbWX@T<+jF!vx0RoJ9J{aScyz)xsi;Kg?&v|8WHwubliSK*Lf>#zUo%2d& zSkj#AJ7|b`E#igO0!Y{QsS94e<2(9$LQ(*kvgF0Z3qU;;gXx*CWG{H>MT&;vhe!mF z&+V5OTW`+nr6>kFnjSUb6%dE`N}IVy+TN)Fz1CA z!k(Y=3D;=3DC6!UkRH(XTb}Zxa)+F1uwjinKkEyumvw>FMef-u$Z>}?otaEWY2kFLDq|z z^TJ+uY0kV~`<}h{CG^8x0A8MxmHFr#LCDO`2IeI%EWWz{=3D%BRT{d&oZGN5^3ng6?; zGYE+y3gh^j)yzYI$3T$jAnakK)q6Pt*8g#shWddl6 zZ@!qVwAlrzh*w#$jjt>U5jb1>wEps77*);+->V?oAuWVM?U?!?bO3L7Ifvjd@Mf1p zm*^5*qDypXbXG0d3GMBW7K-yI&ZF>G_$&Ms{tDmfd#N5wJ!7}v{HdOc_9d4@>T$9I zuFv29?5K3b-i@ZVV}okomIy1>>V6Tf*&^J4uv>)VFo$*nI!=3DqQ9~R*X_V5`IF2EQZ z!)}QQT$vqA6+Jhb7D>P4d3+DNF`>0Lsr4X?KGXU>%)%O+q-_$tx2M;HL;S4UD$hJ=3D z5-)WY`heeyrY;L%mYU3kz7xHf?sFy+r>3>GVI7)YYHjQmNN~JFJ#t)xf0I|+uIKu3 z@XI!n5PpsnUVY8F1Rvo8eBUAO@qY{RFbmT#1(Wa;p1>n`0QX=3DNZo&vC*fXzn0|@wm zJ+?#E@n3@#Sb{}ZfOqf)=3D3oY1z;l>@ad-@7OlF)Lkxdf+M( z>y`X)b0$n&pQXUf*`}voDwy15zgYdG^=3DFuZd6)*HRWpNK++3c7=3DlZ2`s$vOofOE1F zNs|xRYlWht+1y>sWz;17ld7!56D1XkLN1fz5_AZJD>tyE%l-U4D%O0kyZkN+a7(g$#(61+E~VfZyl2_YS{mcRy|K z@8kRVW80N8=3DiYN)_jz9D*Xz7~oSXNvlq+Hy3G=3Dapc-O2+F>!<#Iqs%;?;@gHt9Zci z4oj5ljt96zj`&c<>!`fnQO1$P;j>e2`=3DjXmjlnk@S2xTwlx_Hrlr4W0kI&YKAB!3j zt{R7Lm@HcUgNU<#O&Z@)uDo^K6pA~cj|>am>3mDHyofT-k<)L9Rh5kRNr1VuoBMzx z=3DDiin>+I`X;Mk&`H5qJ}4BPM##{wWQ3WC5a&dX(kI& z6L}3OlQbkzt0!eHJxLToh{*@O2u*2@X9S*m*2bGEkZ0=3D~%iIOr)ITH+XNmM6^I#%7 zoRkUAvWe_pQ@jEhLsOGLpR@&hHE0QUO?}y#0&a_MYoR%zo|u#VO8TQ{Ci#=3Di_m+_U z2nOB1&-{zOd;eZ@LJ8addFB0a5$2?NR;h*i9`n8Ut>7AE{zW}&PGB|t-;;=3DY%_Jo$ zy%0}n`cu2j8oB?XJC^O8H`}L6>@ZWhOC6EagQbhZfoz!iy=3DvP!)@!glfM7*)t^fG zA(7LuVbOK54H*|rThShR{YWl5o#%4(e4^gN`VOOQoQDq_+nlK1$(A|Cr5g3$DBSFW=3DH~YsYO}C3U+SN-w^3`JI+`Ti@^a zpeyaXwK3z;%x`C1dAx02=3DM&xa=3DPxvVed)Vz|9a(G+x5<#?nIs;S81&c38Z8}{X+IP zX?gW|+U(ug*2NbVYk#}@x7L*xR)#!P`cy{l*SR6TEB#%@3tzu5{Momjow@Y8rNjT@ zt^b($;&(6pVNu@3Tawk-SGq(wh7=3D`3jvxo)G#wiZ`Sh zBQn83<+=3D&ijXcll7Ou&s@8c~>8Z1x97^U5CPx)`|vXYkFmrpdfT8~})xGsN0sk1qy zE}5$d=3DN#1<&QUXtb5td9(E?XJjms>o5FFKWxO0W|JXe#=3DeX*X6bkr>8W^5>lJiQ^! zlv!ABI#*b%=3DgFUI9MwLat9GN@9-gc6^Ny+-zC?>spj69e7B1o))lK}|^=3Dl%yns)x^ zdaudF9xtqj{9?l*lVm&KOJ*_)I}61>3Xzh*lQ?W1 zji*2?6cR*UuiTEpdx6&sa}L_?d-zfB8nj7fVVcfSUCSjtb&=3D2(Y2wNnd4{%0`=3DB=3D2TDiu@ zUsA9=3DFN{7f|1#wBVc#m(_TH(#G!t0&aw<>U!Y$1y`TzdY_$*l{r(-3`>t^!k$oXx& z%9FbBGp>L)38ysa-6H!x#G9%?yg?7E<>szeICE6)tAqJsufYiMjqH@}0r;;}}O}66>hg$2d+VF(q2AavB>gIF1}<&~uMWV~%cktPs6_I9D}?O&iWt zpJCEM9aVFfvhThmiNF4iBtCbO)T0Mvv-NmW15+Q0-i=3DiRD@lC?Q`X$futvv;bWa3jDOi4uI;>9F!NhCviNkwFuslueZxBfO`~p>A`PKD<3I5T-v7QKsZhv19!l9f4JtA*#lqHzonwH1x>y zLhjfcu7W?eevy{L_?xj|O{Al0ImTi1t%*;6PSQ+?IX1@lio_*8{WWGNK5~ ztW!+a$kM{FnkctPV*l=3D6!yy*Vc&B_}=3D8oG@m#qb8hiH5vj=3D5O9Kk6Ql&sRbWKU zAzy$Kj+$(ua)N*pm?tYRPu53#v0kCW=3DQby7pUG8k1`Q{k-wAsAh@<8(iN-uop>MU_9Eq3OHOk_T?SA+5x=3DfEA^(XeEl-Mh$cZwK7UM2SSAOrJ{FzQi z-ShMBKVY|X9=3DvZ^bcePpwl$+=3D=3DH*!zA8(jfmrpob1m~E>bB^gT95;OuSL((*WwCIU z!U~<^a28i~@giBI<7#p+>x^L72*;6?T;gJ$DG5LNQkuz9=3D-s@QJNMFiN4ToZJa@zi z9_-|~%6)t^kKWGHl4jiX%Fok?tAQU@db{_0^|hYmNNcVOor4v zX3X?Z(h@2jbyVrc(C42-4z`LyLF%h^@+xoJ}GCF3q&T4u5^1O?S>hg6@G)(Zk<9v7BX)7Ijarp+8&D zpRJQ1DLAYaNH7?kwoFJc7@fAo$~-k~1)Zl%rrqdMT5FhNik7G&HT;X0;tNWPn-d<5 zJ^kTNYe^IOjewC62Z<;d5|T}xXXrYf#Ru2%96q>?uN)+2Y^`Ks*7#P>JCtjj7s7Ur zJd|Pb0ImK~yu&{PySUctp=3D5iABiVV~J}t4`#xPBGuUA9Z#P(!nWZ=3D-aLk?qmd+5l( z>*HRhzsShIrg59_D;d8$<2(+jU{gRECw}`1@%l7ur{kFK)d!FH*0^^|^UzZa(O=3D4K zosT`-&g=3D9oN82wfutGZ4=3DGL!D`(4TJ*ca-bi9u`SEl5o|T~4LlPJeTPVL1~PeG&VE zI_+g*nBXaOwq5dJMyV4+d~Rdjf@ulhGgcL>F#m)MdZ>o0 zF=3D5OLT5uX;K3NM+W85neQF-z0dy*HT0o|Zq#rOYUoD|YkF%~+grn? z-Ws<5$QlOg{!?pubij!DC)*OOCg{+XI<%z@ZK>;ROI>eU>U!H!H@GdgR?-&4d~r7& z4Y3V$w&-84QYUAb^u4_(?P1y6e0486uz&qe)XIlixlyYDq0zdc`=3D3$zdsrsN<9aR#(Jz+i?h;_+#sMuCIqy4Vu%bET&auF|8_# zeQ!QD3Fw^yR~09KE06$fLa!VrsLu-Ov%)~`{&0=3D@_e?4&|Jd2{cwc?6M*VXm&WAP5 ztwrC&I_Jk4S0k@+kkqSdwZReBgw+m`I@Jnj2amYdDueR}9eG$w*u1^AB&52$?Y4yA zTsrvrntY}2%H{Uj66E{aZK@phQ~B~gv8wpc)^6;t_h7H#M_bp(Z7uUf=3D;e#h%NJoV zU;h58qSU_B9dZ2S=3DOnAh)N1Z;etGFI%jm$%Io*%zEn;Xb*(`2cxOVY9zKKO*?xz}Y zS)+FI`B!sz%d3sbXdh;2?50l#jI~{x@ob>zLeJ)BUd|0{y3n&xd^v~vFP>~(JkeLN zMSSWAD|TIAH>%Gc@<(SUPHKcUdwa?-50!j}SyuQ#VRQ9$#xld7=3D)Zt_b+|XTJaDVF zv(3-+lPwh4p()!bj#%OsNXkS{>1J_BJL%3cCuqs23nr~B{r**!#m4NNS1j<*B8rRK zNZ1=3Dx^Q>G?SRBaUd$6nMC*RCpMt2T$-{5M<=3D*ZV8Z?ZihODVkOhLj$^HA7lGPs(l{ zW5~VxJmkl&_nNqSG&dagIBz88d`c#r6xUk?`>{mf8p$KVExUbzZ)$stTEf~bMo?%r zkSSiIba&U1z3_DZy#n1M1d5ZpgY?Qkuc*c`Nz(<72c^=3Dt2;M$nPbeWfQWy+`{hEnJHZ&iLi@~U|7BNHSrqp)YDPQ0_KOxj7jK%OYI zk}xaqCJyA5Zv~YG8<#J%G`BogN2!?qpFJ6>{`{d~RqFjbBTsbAEsuODm+1k>Pn8W5Zz;FgUDuhgHI=3D zyvyL2j(2D|yhGONTF)Aw|J6CHji7sxKnI04&=3DCgh6J)lENbgr}V*E;AiobL-#xDid z_=3D%hKekO3n&)nE|Ei#!&o1t@MW}(+zyL1O>3o|o~VLO`}YzMp8VCEvic5r-{ zWQAUM^I76;5)Ar+`<}6aj71rhpvhXwmu4O>r@E2YR;m@zc2WHZ)s2)oC#*x?wHAl) zByaqfq`W&4lEf4}d(d{w6KIT^@B1y<)D=3D6=3DXc|xM@r`=3D$UF@8?=3DX%eLBxS4aW7gXO zj?Q1dW)rt{61tDQ`JX?uCs$}(Sh6%TZ+t?M(hK;x@$Sc6CiEC14}H&=3Dx;rx5C$Jw@ z?#5&(cXr`UN<8$C21iY}0Xj$nc25TA9}QgPID_NJJ_C0o$-q?|HaM!L8KQ*};jzNA zh0ryk+#EyN@H9@=3DG@^Gv!w4GLhI-v1NH|BB#HXGj&?|z@aswN&2HKejS%(-MSrVDP z;W#w^6{fR=3Di*EBqI=3DIIQ6LY>JUu+1Xv&>M?RV`>9vtSI6F+d0@Si?A~ouE37;VO4R zI!q&E=3Dp2P3;eG^Y7tpnx*!SS-p6ZRlGBSH^fo1S%ZBu zG(=3D8lj5Hdwz6PzYLF;SK`p_U9h6ZVxrVsBKl$)a&h_?YWvNZ$w+X_0%H9s2fbQSOP zUc5h7@jlpWc>YD;g)AD5-L(@koQ4NpXbZv5%@X{Rs zKL{`AEa!hT-l;0ysl9l|s(9}O-sQjxy>>VxEvKwe1YYR!p;bJx4-!}sq`1S-HcZp@ z!;5lrw1e((p9Q1;PG%2Ib}mgYbezwlD}U=3Dqwk0G~Rd>Z+tJ_Au8Tz;C%vksiqXWEGJ}G zjShHqz>D42KJ31dbik_vUR^)DC^ttp2rp=3D4>jvQko#nb8jdzTScT6u{qT)3HFLeK# z^}wqKUOn*YfmaW_df?RquO4{yz^m_v7v<*Y2jK;cZ2cg-ptD^6qwz+ncq4o9wyAiB z0`GL-4FTQ|;0*!Z5a0~~-Vopo0p1Yc4FTSeet1!CPRJmjNq;{8g+dkuIe0`E}Z9SXcdfp;kI4h7z!z&jLphXU_V;2qizFUrjsItVXl zWDgyL7j%{n{n2`f@D2msVZb{Kc!vS+FyI{qyu|ulOg3j_`KN|0MD&FsU@g7z2)&cJ*2emrZY-TyC7p``~x(e%KO!=3D z-r>N@0q=3D0&<$!lM@N&RA9C$h49S*!)KfEY+h8u(zG#a=3D;ctNL?`_XtmSMh${i?>Y0 zdklDCAqx)$URa{#aps9xlZ8vc@qqw6cM zhg@Vbe&vE6oR*3D(#04*(PE$HVvV0^IpbLu_};nFoPWk3@AL8-!p!zFVLR-H!^~^4 z4LjC^hnXFkupN$_26>+s{;9gp8(B&BX2HFl_cQDz>0a;b5A5}vt%e;=3D(2+n#+G#Mm z_8E4#4jatwGlm`R2E%hLZ@)p?XRF*k3Cq;>@t}QnqkZ0RRBu*xPqgMI_EGCG-RD*w zMk_c@fY(RH87im^+ko8@c)kcD7@WZD0u5mGGy^;_C_i#)8LDrZgZ*|T6FoxKI?1g; zcT*Me9tt|SBg^F-dcBG2t&bO;MypUiD&w^{;@tvE`UYy76C<=3D}mwxSoojAM&k3}e1`G4ou@T^`>Oxe9mtBLbY>K6rPXb-Mk?2J3`xgXub{f zDRqS=3DU%}y;{$%`?Quo;H^!LabN!U@?)FbhMtu?^jSC(S+eB^Cw3l-gMgon=3DyPr7de zwIF?*pe2TV#MpSDOlXuXb=3D}wRaf_?kh#2B0-6pO^Ac3g19+C4CyDf;i)E&6h-*a3=3D zo+wli{V__Z)J^gDdjhXD4L~#U7{x4MbhO=3D65C>ivh*u2VPsHcwwvAPQxU+pBfp6RUa1}M#?ckD#*|0mE$wXlmixB%=3D3i+7KftjORd|B2 zD6Ka|YD($j9$(GjX<8$%5J5!N4+?j0cUaqRifi8`@4Jm|6A6sG*3+LO!FG(!=3D4F}+ zkL};SW*b#+-m9f{T+OIJumx6UHmckUVnBJ>#yPTTlO-8GOwD69E+2Uwf1e9#>AzoM z?;=3D{_(fPp=3D4D`UUsue!ogY|x7F+9)35Ir=3DMUj9)Ibce!6XcTj)xG0=3DNxgrRxRSEe+ z`)hfFZ&|j)zxeoQqgFe{EAfvePht$sW1e3geACGD)cP7Mdo_+EaaAU0Z3Jj{;ux+v z8Co416Ak~*3bc9_bCmjvRpl_sdbg6n>|=3D7XiA}Y{YvSp8SA_L?y>BtqnZ}6CV-kKx z-=3Dwq--U8dNZXxx2=3D-;2J-FQ0m zuKhx|2oI#Y{57Li3>a;1x!+E18yf8K3Wm31_Tx&F#LM)Hv)WRNYxgkszm^(iT-nA& zWiC#MZWz6d=3D!Wx>t<2X%N{jB=3D-)2P%$51?dae{Z=3DOi2Wrb8418=3DY;BGwwI_yT{u`E$qJec3h);-yZkv0N#bd ztQ(z8Jw9l?nSQ-;f+x&Y>KsvTPSO(dy;|~)1YN)3(V2dMC3(9A_=3DISnlh!8KEg6z` zd3$KHVdKNJcg9L=3DZb>%vviQf;o=3D@+kR@+DIeJ5l*8>LkderV&5qBpIVp1Y5pf^Kix zk43lffnI99K57(Q%l(vA@n#KEd`6S{w-D-oh<}rVG+#~$a<5o}7!$+Zdk5lMwJf?N z_HxF>nGM=3DjG6HSknc#W3-ncNe-PWoJ9?>Y?@!GTKako#?k6p=3DL9TI4 zeJ!EzEg@zg-}+N~%c-};d;0fb${Ry;FE!Y2lvaq9CevAX45iiQr8AIgf2*E`(Y^KD z+rOS0qXyP9Rb4k=3DZ)gk7&bWpdGv4J#Jkc;4ZAat3#}YA0N4Uj^KKl1YB8FZhX%VTL zM!vyis#hW}67H9=3DBu$rAL|c5*q0Q&}=3D2ln9la{jz@X3Qk+>#7Gd7G9-4M5(u zW@%w#fQN35c0S$D*jB>QZ$#8U;u1eG`n0e-(C7nr%0mP1h9+PSH1mFF3TohK4Zknw zjcZxO&fmnU-r(#%w)3yf95|<_{&t(jW1LY-oTzKm9jfg0x%lTi6M$F%;y55q24Y(; z;w%+$j*58YAjDfMV_~mi5=3DNbWHMKkW)kA9##nN}JPfC~wo7lEX!9J>3lQTM~7pkjaX6w9*Pc-D~CVJj=3D z#;<#89cR@Nan`Ajg%y(JnEQYflX}3@1}PeRB;D7=3D|K3WxtKx`#JiJeJ-XVlTlui1b z+Yfk>QoSp&v%-~wHGIJd=3Dl$PwCq3c%RQ4;q+1l2@S@k61*a6S@RB1fDI;CJd{8XR3 z%IoQ!)z`#%8#TK-zv38<4vqReYKyaspa-*G@apxZ|p;v zU)s|bmcQ$f%0KrU^^aUu(sAPQ#}{2)yIYU75XP7{olIC)>Ul?E%=3D((ip7A!Z@IuHA zLDMz*YokCov(V55|5{B$ml(xqV&Q{3Q%ZAx;A(CuzkK0&>+&gl46}Q=3DcGZPk>(hGR zpk-UTVk}V`p6UwQ{*IK`ewOVHPyF;OE9Nzl-}s{77-P26Fnx!;#<=3DolWNg4FoMLwrHuNy*-QnqeuhyUuU7u-?Y6CBS*5!3I z+%#(QA?qK;bN9Gclm}*OTg&(lQ)mrdD>rISu@td6LDLDJ)ed+9e*tfR4(?t}M|bkD za`kyW`27Cz70aT}f83&N+}(Ao<3#JHmp{MwWkY@4lCGyae%(s+4x5(5uY>RR&nLe0 z*1C5+h@5)JsDG5D?YwJ-S2K!;-Z&#?9Yt1Gh{IxyUZ7`Yh=3D@4gtUo7S&Cdxx!z(1P zV#u}O;>h1J66|LhVqAJB2@Lt|%_u?J?Zr%HpD6~qSxHmun?UWC6}BxuFa?OMkkJ$c%F&1KX&J80iDYg#*YXf)v7i^rk2Bd_ZZ z3@u{9?y%nwwIRfj974?b0x4Y(lD$N_u-v+8_bTo0EI(i0I z9gdpLAd+UJf47^n4kh)@sV^xb;;TyO=3Dah0_oAC7tzkcYqer~s(c(F`8z4n@$x4mgq z$~}1|_-=3D~3)6c!DCu8q;U7uP_@hW8=3DsHEuV{ndU-(_82vVt&mnMsR_amupcUrlLy-Qx%?UGMDiOnr&Iy*T`2sopQP>@0 zxA%A^7rY)y^F6L8;UUs^xkmubupU%HJTbC|2Y8aVT@U-}q9JT<@=3D)Z3p`5^QQGm`3V4#@m})LO(=3DY5E)q|Y0x?^(ch~(RlVwM^scg6QCXe(SY))&2oxp$B%hd8 zp{4ZtQS!=3D~FGM=3D3ArBl8U@wI{Pzib92$cuQE@5q($x3*=3DJ%v5v zS~l^biSa@zC~FcBNix6CVfC@xbT{j;?P0kG{j6hp4XaRsY%#r-g>1n&tW9jtJEonb zl#G!lmaeP%s2Gvj2b{YIpOO29n97HUPhQt?SozHPr9=3Duz{hyR$ zj_esI$3SOR3ruRnA6o{$9oe^UkYuo_W{vNFdroR#)0@}K`5|PWugO?&zjR%re>CKM zD(Rblv9rri7v3 z$M5T+&w2T2-LJR?KAVkaAJ`ducJ4B5E8SxdM4BqSVprFQ7W2J$(=3DWogQLRH83>U*M zH@Cc9>=3Dm3O*7bqQZec9uU$l0?Z+2VonZ=3D#(nkuF=3DW2O4+#lYlH<2*RTEm6->&T4^G z`=3D)ZWI6bSD$-|` z8jG02sa~doe0Ukl5Br&_niNRv{d7TcPSGUMxR>1xuFJ>j@(u4eIolR!=3D6C8is|(ih zeehLwz-A7M0Cdx5bnxkizNJAYOVBl~x_%Y`^z5-V@tO7%Qx^4Nv&~#5ypQOQdpz&M zi-|k38GZ~-jKR(D&4B+y4g4NXz-OaM1HBD=3DHmb*I9Vho`9fD)81hhzG1k4YT>o@yom#zl=3DAOM4Xdt zE8Ykfe855X)Ls7t8n8}iVEGvbTR;+Y?bBeVp*Dwe*za&P*@pRuesw^zPJ7(I{=3DP|& zZ6~T7Ww5{84*O06wFB(P4~Ko``#SYtO&ANU%RQ*&lY7>e(>g&i>gA}yx6?G%>K}5A zu}S@SR_?p9|EE#&^rQCG9}XUbRRDOk`d7n@ReMQKD%TIjSNv@bR(4a zo?gFb1dYv8=3D5x%1}SPxutOPl>=3DCF*Li;_ z5#uj;rZ`h#jF0oI_i>3eX7QXiOXAFHcWQR54d=3D}s4Zp*)Ph(zpShHi@8I8H1L9?Tv zRg-(5J8Nl{c`b5lTQz1+t7ZrOnb#r3KQl_uQbmX;rTt)A1KLft`Z#E>tVXY_p}kV=3D z1qOBO7}T)?E08jFxMU~%fHgOiF*JXJ>}Pzc@MFeu>CY40Q?#G5sj4QU)csOmf@I#> zM9eSO67xQRm`ep>w=3D~z?)fwD9GO|ul@zS+VV~!j361+DtYU&<%H$!rqnZ`8Nz38Ws zNNlg>aFx0;QSBEQ;l&g29>jOo-CpL%8qYZ9q%$+6*IsI_yIDrp9q+zyXvfoX>$4SI z7ZawvtZ3JXq3>-^z8!qqw!QRi%2PpI<$Z^OPZ2{#UEfnT|I<;cVYpAnF>4ptEmO4D zSaYd{pnl)b8o+NfxZk(%7=3D3hopu1&PL;twVCmI&js^Qnth-r4cfX4U?S7T0&0!Cp_0xJ#8fzEOTF~0iwtDW%(|-E& z?c0Vue8?Yj^kCIMy%*(wsdJ`8G2eWJB6NU`=3D&IFFl<#d5yK7nQQ%d!ibU?T!W1Cvk zTo?KmT6U%+#hG7e1HWi2t!JwQ5a_r)XhL7tW@0!=3D~MC+m!S8M(V`!r)n3+I~)O`T`_NfT0| ze*AXRzabs^zfSvph3f_XdCG*;IOIQ1`sN|OuJi=3DI-Pmp-G2c)>gFBly6`T&B|F(qI zN#hRL#QavBSL?ivSp4gl!#b&sbmM4f0XokYG=3D75F;JV!=3DF8-P*mJ)dNU*8RlfmeI& z<_BAvTTcFkmNd2ty18G$1Eb~S=3DStp09{US=3DRm;h9NpV9oLf)7de3__|w73${ zn;$;c=3D*xk$xOdMSaX6oXRfTiZXfWf$7peCo1jUmBXQh1aB!q#U9C@ZYWBc$*RP@W^BRqMhKdGzA4m>Oi2s()P(l26f7`kD zw{G%g_3ErVLk?!)fpjR9-m_SKfDS#2CGmnEF~C~xG`uu!9!p!wGeM3*oDmcE3MIq=3DVS3JG=3D_G*$4d_r((O!Iq{quGd}{0$ZDU z@*YhfSR)|Q4dhwxnF&f%cFlm(Bh)h!sNc@H!d@PIu4Os&U1(Sg#+3rg)ch&O>-HIp z!kB18E+ph_j7zv0n~)%Gy%3uhHzq+WYKoQL{6BJX3`UGoxQ&B1J0xS&XeV)0?UQ{# z4%4`C$YEz771UFC8>c|fJz6VHf#@GUYq#Qr6xe++rnRDUVN~Llvl!FYdJ?rC(q096 z8qggF*&&J2t(rz=3DP`XufKo|ZUI8{Q9&4rixauW2vNi)rm_28>F(0x<0p>D3o=3D)-^7 z*)t{vdm09N8dz_W8SH78-aQSYM$W;4OKZ3i7To?d?37PHU}6s1WJ~kaJ>=3DlD8Aq9n zpMuA6#K)l3fn^V{_<^m4DUl;FA!pXqLh6rT7C}?cq*#+{+F?zW&)krGaO!aakcs(N zG78QvuU69qZQ6~Q5+6@b$O*fINTe>zHC>KL&KvM!F%WCunO9l|o=3DUI~vjpw&-gbcv zyeyoGI6(U&?SFyWg$nzh8SAF~t1>(Nk7ZuM+-11=3DomFz1}9SzsC06rO4#5nI?Sis-G3% zmD0Z~Nm#YgD73%W36HXO(W_v=3DY0uk;S;!EXq`YD4g*?OKbd+l_^6~5#+$z&?Mh&yg4e+T=3D&Q}MUs)FnD0^8 z)r}Ix3Wc1mAO&wt`^`3$igbfgX@2F0s3`A&o}ez&r|>ndL%9~y;S`(e3T3NFtfW|t zvBuWX2y)I=3D1TBz+i1=3DMN{bWD12vzd_9iz^AR*i^n?2U+T8xRq1EaF+JA7VE3#l7}l zmH(L-(JwxN1`N9=3D0X;ho`-f!p3@t=3DjLAPO#6K}NXyg~~nHu-f_o7Vp{mwZA`QQ*@P zN4`gl8J#zMx#)qOqZfSHNS%i-V8yL_L~{7`kYnkoSd`P|d)gZy&q%b7T#ZjjqGduI zY8jj-A(u&NuLu7ef&7rJyyvGSeP6TG*TV*5qES@6ni^{i$EEk3$dRU{Cvwc+un78m zoH~$ul&p#5tT=3DVxQY;f~O3aO8Dh8b1g?Vi_<`Gx~_0Z~!=3Dedmgde7`x6q5M#b;87p zPo@lcYn^?XQg=3D_S=3D@}}a6nqMK?9{flC`kkRU8dfVJcN|h`iN9;wDPCSOt8FR%@z=3D8 z6Q{vUiM3ljD+W5dEKN{nm!k>l>;|6~vk7yMG>&2`|2A;@E3E@LtDM;q?5XcUClhJl zD&w%aYvGfa3=3DM$I5REu=3D=3DsTcm$%5Y@$J8TgB1ew%gN#tQ6268JIKcrCTR3OuGqT9| zzVwbO-krFFW2R#7_V$h7{^|R2;F8NO$bwH_%pdWt(^0(z{(MfneWx5(2Dzl>utCsC&-_b?@2QyZ2P~oKL$ycFo`LrL=3D_3`@hU=3DlqJZy z>BP9o6B@hKoPhJH`bEf}AcSi?jQ zXT1k+NeA+yR3~PciyjF{1*m6GO`>I$;jzN#2>8UAj;bDScFVi#nom8@7+;VVpOExg zjvn%DyKt${tA$svR6A<@5~J%LB06fcBbRu2{3`U1dQB^?snv`Y#Pv<1_?%&a=3Dx(|# zf~ISmZhJ3hJ)RbwHKX)eJjI6Ph>oV)!gBNitVWUg99kB?eNCfYf5`qY|FHfIZ`KOZ zT_A1{Zlzb4hl@QoZhC!s7Uv4-Z^g-_nvM^)e(a2u6su(OsV8@oxu>NXBuCaLe^W)73yuG@h>FI_P+1$>Nc4-4QA45*g-}j z##oQ|;`a}YP+iJ_D+Ex>X)|}C&+v>zQ% zY_S_xNTFrIo8(my{aKrgQ-52pzb5zWvXwW8=3D&2nc_iL8+Yp?6KEY@<_Qi-#R`AR^(CRY2V)1bel0EiqQAMU{6YY zO>6cX9-9Fj|Mjr#V>4DyW^bkEX?Zo!MF`>7r@m6=3D*_uLkUx^YtNuZ^8+|_*Q#SK(H zDQV8u2aK=3Du{9n{t2c5tb^HcgM)xY-j)4khpqJ+gCmeF}I$hWvnOpMI8j7$6V8RzzU zv+f|T6}&EN5O7wQ7zUoUUbh?^c$IRx^?EL@zJR%8ZsvQnUQ-mIvjBZYxx2sjuJo7w zcNL279W-X%K}LJV^27PD89^*LZ%`zj{c|(h4k}tQA8c1%w=3Dnh92gUzr!|BO5XG^}) zH04#1jaX%$S|r&<9a8+(sK$@_IZ}VeS#_{SLeu!<5w-k%pwQK+@y(&KvgY1b7pxiS zJ$H#Y0gISDE|iSXtv|`cuo1?2jSQ1cwY0N}nopf9e{}&9lb9RRuUy+zQKy%Yyt-iO zE9NorOi8acl6~5Ow(5^OXX0SwwuB&ZdoS{!3<$gj6}&kUUKU4xWI|nyLfnKA4^j;+ zV-b6r z){44?z5ajl-U%Aceac<;xK|%!V#MFK5hX7~(>kmG_q(%3oe#d5QFZim&)8g7zE>$* zGe&;)h2XQc+k($(&iC!}`Z(~wpOoipqvhvTwy`Rms8>a)QhooeK^pY^(84ZY%QcmB!rlh6sMp9bl_nX4|bHgNa+-({qzWN~T72Yk- z0vyx!(4IF+TwB@8A?z(xT;XfQFkY8ROM^!?9NpwDKlQJQ^j>jM3|SKq6|sWobL^Ygi1&+_ zO{GO26m3+WQMBn~gtm18?DuG2gW<7KXm1a9o2=3D-g+6#87?_H1CKeHBycnXLIai?^G|PEZNLst`bU3Oa;}KkD%0=3D5ww)| zGadW>%OAWcsVscUVp%H0PTwn!_dg|*nQ9NHwbWxaJx^3b& zO^B#xHkpz^O=3Dwyi!cQ(5l}dMFc`+?h6m)qpbyL15&x<)Vr3!yPobs(dFJ|wQv-rDx zN++&toN^w2^QRoe-{+@X!Sw}G&f)K)Qx4&8%9N$Jo-id7f5%K&jVp#Ji}9CCnSs9v zlb6x!lW|f{jA3#r{*uYLe#SCa=3DD+}?%}t1d3nI0N{g7^K3nJavNRe(lOObA@qDVLH zr${&MqDVIuQKTCsige=3D&ige>*igaTpMY_>Kk#3wsk#3BkNH<1Mq#JpPbmJt7bYl!f zx-o(x-N*y!L7P~&XSmmW;U>JMIq~WCq4Sr;cD>~+j+jIqzx+f)@w^z~y&-YX@PwAs zDQB|IyXb-+Z1K8~$p?HZ8SnM4Z&Hnz-gZyHJ05#{R0uyM$|GQJa6wD$BDXhs8=3DXv9 z(F*3y^@*!u82B1$64T!!-I*eDgOx0+rX&_GX1wRdlSJ);R4;$yW?AP^BH7CtCo#}} zwv>PKxO5EZ1K&^^-$4IX#zHlr^eyFIdK)$U-a_BtJv*MPE~j=3Dj)bi4vp`BIBsxMVj zeNg}NhP7ST9lE13V_;3e2;%w4QCpL-tI(2FTa7PxIP+etV=3D+d3OK7oEnDXwriP%X_ z8JP>8+!t#TSG`FR=3DjJlTl^*82EmjhRb{1YrXG3_8%?zJ-b3!SoULWN7#6H7V=3Dx!2T zaG!K%iMlq{XluLaU1=3Dhon)S92{+$0EH}CNN)TtLD{|=3DhVEK@)|X-raZ6a)s)w&c{Sw)HLs?;PR*++ zuUGSG%7>_VHRXq>c{SySs(Cf#hpBlr<%g?zHRVIqyqXfeh1UNQHJ#0HYC3zUnpe}=3D z!_>T*&K|Dj)pT~Knpab_f4$oNN{R!tl)Rck9jxTll;_mEn(`Vouckb&=3DGBzfs(Cf# z1vRgxyiU!lDX&-aYRZSGc{SySsChNzhpKrs<%g+xHRXq^c{Sxj)x4S#{;z8L%PHDl z$*U>aU&*T}+F!}5DcWDjt0~%F$*U>aU&*T}+F!}5DcWDjt0~%F$*U>aU&*T}+F!}5 zDcWDjt0~%F$*U>aU&*T}+F!}5DHG<&iM~kBD8-H=3D|4N}z*YcwHREOs3&lVV@9OGKs zUQx$~i5YLe&Ydz*)Sn&dbtmr?NgF)D6DHy-7KT#S1ea+Nl`R(YKBPDgj%hv>`rXn@ zD(Ui=3DrF!WM6Vu*+FFxq-XLXcL;I_8wSK|`)jtbDSjO+=3D58S6ulsnU5}aUY7Bvl`&~ z5al{xmHmD>eU(NoHxwtS(Q>!8UGsK~K%}g$YjtL--`g=3DAnlW9^)wnSOp7nODC4tSl zjw|I?<5DK}f4jHiXC&azb=3D@PGlNx%Ow?9zEB|Cd`{qT7^bWC844!BbW&_q23P?B=3DI zE^vxDs}(=3Dl4V1!%Vkl}uYeiExI2+og3GM+VxJq3L_oQZpn^H^jskhHjDSv4uwX(_l z4ryb(LdwKIL|a#$!8Vb4&A>*yS4jmmjZ;&bnkLKT6bTp+!i>WTInz1`x~dq4N}`ZK znX`qb3!_YmELyz9LJs~>tiPt=3DY!<>z&m@lND-dO{7!swMi5j6}sOMo~j){qibdkpj zsf?Lw5}&R`T+|xVA9%a>E#K6l{+2;Sk`6}X;RHI*JBS%G=3D*0(lcwRaY!%XeZ`=3DFcN zNunYoCdwqhCY!mQO2;@87cx&qQEZVY=3D~)L5!5bE6fXKF(Q0%l0efZ7WJBcDO2P61O z-3(5q)c1Vr560st=3DfYDN1aUad_31I`n=3D*Do`*&Ejmo9h;dm3gECx*ec6La{6IGbk& zN)A+Jh?Uy>j&X-?1T>l5tKsvKnMqHc?|*tEJ$atS`_L2j-tjmdsv=3DzaS>niOB-}%7 zum&uM79;p@4qsY;?wu5y^h|Ma0W8$Z!H;ZG*0hrHSFT-IQw~%7$~uy{fwmF-GD2BX z7L&eV?uI{Yi*gHui4|Y0!TBm0_>_jrmUc(=3DIB=3D2&C*AP(E8gP5d2s^1Ml<@4e(ms6 zQM{Hgacrd5_33xaA4IlR>(~DEE}Z%oCXTKhD$WhT*+?41a)sl3xFp1Njbr7O2fcKh zj3)q-3*G@!gt`JJL<1i> zhC4C`=3DguvMy*pdR7VJ$5LK6@&afhsd8yBw22#$o)Q*rtb^y_;H1}09t(8w;!v`-VA z@Lb2cXiLGTZB_m9zSH+0h4<*JT@xO+xQ30;M)k*+m?d{rKugy$P0F zlz9X_@+^P)W0g;^OkdB0qh*a zu=3Du`j%|F*%=3DQG4(8V#LQob;?$L;n4UwTyG#5Home5@befzlU zb1C;6_Ww5m)~xO_eI^4e=3DNDda)ac3ME-z0s^CT${D-E29(w?DxJ8)L$>7H}e-@Nz5 zdM~8=3D^fnGp1#W5YI8;8+BQ)Maqo48hk-ZNbD#lkpVl=3D_;+4bqpQJQ6tuZT8>N+^rnleJ9_EaZP)=3D{?nki(6e}sk{w+&&zqD=3Dd zS*Nt_lRIX)`?v3t9ewSqXl(nmTVCOCH?&(V<&7~%gCi<9ih`r(tSlYSQ6ty)*>)DZ z?f$dyS^>@{{+nwu<&yHuXq)&{JGq-zP{_J0{%kp8sgg%i@JlT&c>f|kcHKR$ch_M=3D zdEooqweS%7!q5=3DbVNvHq>we+lb8V6@FBX&5oPofxIV@`}@^RiNWhbcGP`=3DZ1MZ z{5LFB{=3De5!hNSpJD}8$PT$~f0 z-Uxp8KLKKb#|NHaUy@qtgxpE;4PpwHHsjK*LuUO=3D?+~o09pZ6)2)-t1MJ&X_-XSe4 zG-|9k>wjxR=3D}rCDbe-*_bvD@I*VBE4SpBBX5$o&>eC6u)x*Kj@@X?c=3DOr$$0Fe>im z>R$x5xNhF_QXuVrchP4L(`Q@mYAcn-9_L~YcODS7kieOo8;R1Zq>Jw|gU|MOkj zK5$-ucau4PC6nt%-_^9SSF+;Q1#W3;&760CIo9{iz+c=3D~QKwIQc+-W=3D=3D6nqq?O!%; zn4gP3+4yfb+zY_3cA$BT_;(R^Mu^+g~PnBqknK120GkzjcmjYsE4*K4+MdSdHMH@OqvUh zGCD7LVHIJlbY}+%;Y!4LJk>3x!v=3Dvftn5~GmT3u&D>|m=3D+55r#jLg1K7F-Jy9Wi<) zbi(**7v;|*m?w@?&J2|ADQ_6-=3DTwd%32|60e#MhZ<+~-uO0O7VFSI#7lMdiZv?CE26hXxQPGWG%qYE1Ey?1>O z3yamlZr&2MeehS)#)4b-^=3Dh#5iMFdxCT!lO@~0~(7oO}Me~24@xU1A@$CnSpB{9sf z?b3Mh<~XK|-}8Ys!pD+nSC6SHrB9 zAPUIPd!O?K+bM|Sk+wUJmO3#;_r6^OJU603B8WXbcB|Mlj`3{&zzIw}aa<77U0b3k zrU?z#%iIk_e6AB-&9?4XNonCn{+IqJZF6b-Zr=3Dyaz=3DgQ(?zyyA^*{T9_9@`L(de(5 zdlq^Fm;6P!d|j}2s%UXe1A6A(=3DU$?CV_jH@Z^*teEsuO%>b$dxA_doAOW(R3vW4aY zXZL;malTz3^KL@xb$lh_`OY4Z4`Hja%ww(-`?SIRoFc+~`i%?uew9BE8q#GRQ%cU2 z2lOF5v_|yKdH=3DxH4N46BC$iRM@7qBcpi7Y%T&I=3DMdDmAXk2_)xcg@848&B5ud9E2J zMG)GG7}0VoDtk(LB{=3D@+%C5+t%6eEAUg{2$M@MjNR-}U9h^%|I)QQveQuv<#|kA0i@ zXFIRQd-!kvwhR~4a#3A{_)VvduKvv%#3v97=3DAj&iJkjsFeU#_i9n)?w8M`uk;~_(M za^Ev*r``Bm{>EFKg^RupNpxm1y7B;cT!e8%#4@H=3D`r3v2P7HG{fS!m2yhjp>6 z$x);?@Iux&*y9+>!Aix_DeqF~j>n2!%J+6Wip0#@#D8yRIh({dY(*%!A2RkXS(`JM zuEhq;+w%77b2Df7=3DVz`eU!0k%o(KpU&+lPN-Fll5=3DK#WEkEG&P3M=3DNeLyM^B4wtFt z78?0{mR?DfW5_rg=3Dm}U>wU;CbM{NuAdc~F0jQWXeQO&E8V#&J6M6nG+t~XW&UfVOlV0l zwz+RAt;yBcKq(89azJS%8(92qPasg;gZ?Yip_;M89EA=3D=3DaQC)Ac1_p9%)t2zU7O11 zW-cwCpEqEr+LYPDdur=3Dja=3DAK}~1yN&1wSi|^<`Xa0SSIi16m^F)+r2pV&6KInM`G?dd2CQW6L5#nFNf1_Sf9KkF0m+6(S znwFj$k?OEzFq~x`qOqZsj>Ox4iMRjuT4<_+oBlhDxTn#RvpG3AcLmtK%9_3#%F_KLj(MI~qwaef?_V=3DE8 zvWba7jM5K0MdcVO6Hpl@woCciES1ws;VUkl<8@faWxE31)!wYvKg7iB%7A8&SmJ<|>AT254WXSVbfsL&_f!p+5-E+>BW2gI_dBRR;*8-XRwR64lKIM%$RzuG? zxhg)y6E5y>54aTBPJ)s@^)d^t_f+1OaB>{=3DcH+}<>MS%3;=3Di>Ju^^5CCCFK*$9JVt zU=3DCLJOe!T)Ie<#|K?*Y)X4TOXTS}c15gR>mUGw%wI*K8~ChG4?g-rL`tzIu|7UUmJh2vCXN~ZHWBx$3 z56#6d+OF3}&-IFIJ;{QQ- z87rP0GiKtLi3xY#CtnJAVqyVxQBz>F&V1moPJL8zh2=3DCyyRVPadSFTJ<90#p0nCdnn?;Q}IwdtROu|58~zd z``*k;cC#x>Zz7rSo8Nr%{l0JhWOiO)cO#OGdXw#xqqF6RRmz5y&8bqMXN-j?paX^a zL+8z#CB~{SS?_=3D{?+?QHhE65F=3D#4fFH?35f;w;Z zNZHHtUZ99vN(13V(Ui7I222#{DYAx`E`^8HF*{2tGR72&+V$sk-bP|y;Ged!jAEnO zirec09kX>Fi$cuUd2D7bnfO;%I$hQf+@@L>_&b~B$ZKfNC%P6NG18hm8S+GVo=3Dd6L zBC%|hYdal=3D#z}L3L+bbj*Mil#**A~csH{e%VB+79@9*>Dy??!43OZ?GC00O3VpC`% z2MG;Behi7l>}OpMiO-_kxDR0TmS4Oen25fM`Z9v#r^@f$n9`!bVc$hSn5_xr*a zjGihxEAR`aIUnXq6PGYzVq}F*@+qUC)1jr%vN?}1ZOaiIMOMj|jW@IS3E%6F`#d$` zB2G$eX<3a}Y{!|_+VAAgNYg}>?<|KUP~FFQ6~Z@k`kz43bE^`_9f>oPFseEgD|fLU@A zuzo()&&T@w*5|iAzxDa8&-*X?;WiILJr6twym`5Gg>A@&+!5?bq69bF?x4Eq99duV z3d$ESZ-8nygAb?Hv~{lL`q!$C-|_rn=3DhDU1#6*{)MZ~?s-1x z`4jIS&#;!Jzq2@0vhOywlB7!Ew-F!R&9cW|W!WFV`j=3DU@3ET$$1ZrPoS@&yq&$L@@ zI{L+#K2tPU#a%s%Yi`Yp9nWuhe%mo!!C|+v(hi&JbTe(<%d+>r&$4g9KLcc6g?%4< z8~Aj?t?&QJe;u(tnfS}coS_RTiEv6!KfqlKyab#8YR`z{&@TWl00Hp#k6HEVz5BLV?B4!;}1?m9lp9L2XvkcI@XV-Gn+sU>s4z6ZXlN-Tu+nC1V3ckK=3D*$SEl}fDcntv`z*t+GS>&I=3D~ z7-#N`BPqBePDZVUrp4#CtsB~W%CDg)p!V@!X=3DMAYkO9%MzytvW{Jzh zLN-nm&3`1~tlyBvx0NSv-!O*aP3Ysp0&hCs7R@gr&2!|;+hWyWM*P^%T;9cfz!B4) zO6GO;b~_LwKg${Ay22=3D`DbYc zSHTfR{@?$~x3}1h3YF4(_$icsp(KH`r8JYe$%z`ClskBmsMC^ix0WOZ3#6GWNKNE5 zq+HUFM6HgLJ9Q*c2qs1^_#!l=3D*`F17?$=3Dh{Scy1W-&pP{;3oemF@z=3D36lO{y8$!y3 zU$cqqcPSo$jHaPcpgFC6Zw*?)Ra0NSwt(B>-CAf$s3)eR??`_X%_M)K>A_OcAHksa z51D@cPv1XiN+@Of=3DU2*)i!deCvq~*o511arZw1##)6eT!Qv$2$Urr+4HItO2^g`s) z^rv>0$3G+Qs?kU5Bz)pU=3Dy3@bObG%RBlxGc_w=3DXIOh(_E$brB8_$g{QQqFVa(6I|o z8HAS5f$6u$e@}X?$d+pp^FAi!YtdfceMId3G?KWHBZj9#n8ZJROQJ){5%YYpk(Bp* zODaPW3o!y-Y$l6BJs;bd@@sxl?mx_w`#;7%Kl6%5oSR3u4_NfG!|1_dIDbZ7k2_82 zV^egdgjsSQ8TV%385czRo!XQ5y+NaS!# zSae-%L&hcJRrNT#*;qI&DM9l{;GQ?6|9|v~E{J*`>Fyywmb->-!xabfsOe zG-h0$@y*PuPqoeMe7d{-!o|j~E`R&YcUP~s-RSJ;PUIPKjn-P9KuQ#MR`ScB)x;bY(nX8(-!8D(Fwo~#)aw$VNz|WOqwl?nPQv5Otnq5Ss1I$%1pCO zW72KuOolCkdDQkO^O)^1X1Z-UGs8B6dEEAR-V-EgZT{MPg-#+*2>l(!>r)L8nc$%E z+=3D%A}o@av=3DuFa?A@n$6qq$gyw(r$RC{5NNLY0IuFCmWot$1iG7BpOd-ZJYd|^G$)ns#@Z(t+sH7mI38%rb4Y)ms|7SZ;E5mwA``T+`NtTT00P)*~l8X>J>m9Jt8spGO0AuG=3D>pQE-|;0*sX4jyFe@y z5=3D367;jCMEyT#4ht#9#m^Lsq%Y&iy`sI%ofFW1?6nV0Kq?c@j6nYT_dCNrIdSDS3+ zSgDy5#phmNEGH%WPD%Osyvrh|3*xLJw04V5YqyTm+RYDXDgAV!g@S)x{Xp_vsv>4;k91=3DvV!e- zVblfrmp-2l`$l=3DT=3DU(0A8Nhm4qw>Th+|it}ef5vyvt*{6j+H2{o5>R+=3DC$!EPslyf zuYxxTEqr>n$o>!UrfLvx(8FrEIU5wt9FzO%V7}ODFhaZ|IwiT)4zBb^@-52m(|LY< z@9!x8o&2}<8iz(I5FLVE<!Pu)bjQ!+TmOHtV z;ZBWZ?1z(Bd*xonekzG6)pCcYveAP5=3Dn)1z_vlpS*v2Od(fdQVs@ZH>2v>cUNei`C z&1TBK{emR^=3D3A2Z+$~a%9+1t}qof9=3DJ`}whs|Z$-`bws}xtU=3DN_LD2vwZplStqePy zJGFvI6!S=3DQMERv(km$(7XF8bDh{VNkEtRhS{F#-cYS0ozpc$n-+)_-w9{ zKfhs-mc#g)zHx1&y=3Dn!5;eV|Yd45|@63nO2{`TMR*(&dZib#_MER zVOUL+%cwDtON0-S1pk)W9;1t{@J(4>Csq;Xl3#>bY-Xb*&j-ISks#8XF#1<&d`@%1 zf?tZ7;5$70dZIjQT#EN|uf^#TJUr2eM+Ab9HE1=3DR{oen=3DW)_)Xmb2c8@gI!wACK`r z5#yhZO*$?=3D-(ZVT(l4g;GEYiMOnSCCA!W9`CY*3J8UjubaDspnq!jroF(PM^&%p_M zO*TmxqjpwQuSn-dN`&Q)&)4F~e?1iih)UUP&*V;-o~+N;hY-y+~y zi+rWX_Ze?1R`Qy2niI%lKs7&peRIP0`B7S)l<<%fWgacY+tC@y?>8ua(&?xxdivr0 zHgo5Jhn7coXuD!tGg@X`nR)4{hPie5gtJC)_NhE)pBBS$(s^wB8!5!njFkJ!x=3DWhesmR=3DxR_^3!;ig`W;7RiHm~E(zx3Wwu4*&S9d&>QJ9+N# zUOt*fZ|7;sH1znhe0t#`^q&SkQS=3Dk^+L~6r{L(WddN`$;hMvkZi;U@oym?Z@K9XCw zCR5Z4;ghBN-4CpP+l@KZQX(9?^-YO!H|-s+2W)Zi1@?&o(9?fumL|3`d2Y+u* zc9ZhXx5z%fCu%5r(!r#A{yu~iT{_m&9!{kEO&^xt_9lc`W0!bOINeMuV0$>Z0WP?uNML<%~vnYl$u+DO^Oq0#y(GWJVJ((HdKQ#7`-O%11I>P_@*w^VV zGQz)U>?Zt5#xM6+w_PgOZ-@HORUJcu6Kkj{X%5m>n*Dh%;dWt^!3%RYgN1Bp$ z-k_x%YrnX_0_j+rTfaK(_ocsQU#NdJ2CbF1AT{Ys1(kL?ea#68E19t9OV}UOX|E9d zcz2nj?Xnjm*W+rsu}%~jULRX*O5n+HN}cHAa~ty(Oicivv8rH&`8Qk@s4X`7^-sk^@8hTMf7izd0HT0o|HN7>g?X6)`Zw=3Ddj zU=3D0Ix|FJbaHekg3n{A0!6N1o|L1@b$v}I6lTL$&EWl(Qh1`Te@t%qp~V!pVaj)vF< zI$QLwSDAw|Pq=3DL_N_$u~H&5M*4(wn56SeZ9RxZ?PH)`cWt!jE}Roh#urruh$|ASgF z)wwRQWm=3D~izc>8FyEA<>O8tbuQEmrp27>ffX4X(ze;R~KT#hA~3 z*ndpgzjsW662{~|p80;<%(nZ?jrvRN!zxNh+S-usKi+)p&(@<#3E z3$Nzz=3D2sh)(LT)F*iCc$4YggHk=3DI{*v1jwMFX#F+_B5+|GKuvpe3x$YygF3J(=3DV| zNOyPoB@55=3D-z(5Pg1;oWJ3y}-^oncj6Et0*$=3DR$YzEG(8zK81e3CnzWgxt};qyL?Y{|Jt3Q>dzk?R;9krGw>v+x#jUMmSXySZ4;O_Q+Wc|*@l*{3h%?bE9CvaUzqrk&HDz>eE)Zqz4=3D*RbQZ zTif(~JMPK|ny%h>qVO+vLq{AD?+yy_v?Y@~eR6o7J~BM7C^j5c0lnRVGAt5Sp$u88YdNQf{x`^OX$0L%1Ue{`Kt~v~PmtLvBRyZbh~Z0tDfz<17`_l#!^bYx z^QpiYK6PQ=3Dwa929ZTiktnS~x#?Xn%DEzHC;hV5X^g_+o@upR7Ty@`tm+rjZ+k_CF< z&F6@xNzm&G9%|xqU;)ZMUkG{x^q8nmU5w`(=3DzjwGpMZX?i!*83^gA@5!Gi|Rhnckd z^gFawdXsQYze8x$GiGH}f+lOOSeALBg6c+MTd7t=3D+eP&wR5w!Q7{4BU*IE+Hle}@G zlk)CKND@;da>x4$uNp7(cXQ)ld4gK->rz&movyVyB(&+(ieLCRM@#B8wo?VZ1Q z%_?r|By=3DBp>p#D5Pp;6oxMW#o-nfJ$r5EsX;$2TUjp#839{QfqX-g!9CDJ>g_e*dgvha*gff?f7Ek_$Lj4z_v*Q$NqVm8h~8c`RUa*s3QrcED}=3D5Q z>1ONGLee-{(}>;y4I^k|>+6FSLBcu8BtG*DfnE`GR_NJ?wb0H)$U4O6$kNF4jVGY_ zuQZ-3Ty&Qw(#}0un3(e|`Fvvloq4)~u4+N^=3D=3D?E2#sDFtU=3D3rhc7W_AG%6on(<7bVfaRF zks-5??q(8m{KUJ8?xAw#D*RqDw-;}kigyn1V$D=3DEyTHo=3DF9Wq%@v>nP3`w^^Pk~unyL1WnZ0X)4}ny?B4B z;++D#XiI1bYr?U+c0h*H@W2ag;aKPj_hRRr1k2G8?7pY+{qQ2)Y<>`4x&z<`;RT%) z{13)ES;afK7w;Gq?}N?yqLsi4y>>VxEr+a81YYR!p;bJ(7ZO+!q_`u{HcZv_!;5sY zwS(|d-MDrTUeH;g{lR#XRJ=3D*Ocq3K3_X6)y;1z%u5|9HDkwySs0eB%9?S*8N1ZnsP zq~WQU3j+Q3EYi&u2H^#bY+(>y&{-k;V7&1v-uPa;LsY!cz&js!siqXWEC*y*O%U(~ z0WWr6d$IdU3Ig6B;0@}B7wKjP4Z;f=3D*+GNwg3gMdAB=3Dajig$D`UZUbP0xxv`n{~je z1702Q>VQ`VygK030j~~tb-=3D6ZhZpH)>jvQkjcnZ@yr8o}_k;09s(2%N@wTaWhXQXp z@CE~KFz^NgZ!qu%18*?!1_N&}@CE~Ka6i0AH#>L`UeL%69)uTkRs{cGyhByILwoUl zrQ&6PcQWt}0p20NI|O)#0Phgs9Rj>VfOiP+4guaF{qQ2)>>-2jf=3D2d`L3lxD#gHG2 zmsRnyy?DP=3D@m>esMBp6?yhDL^DDVyi-l4!d6nKXM?@-_!3cN%6;YGUHLkHmnjqIU=3D z@Pf{Yp+6XJhl;nO7w=3DgW@7KWl6W|>Nyu*NZ81N1Q-eJHy40wkD?=3DavU2E4=3Di;YGUH z!v^66jqG8A@Pf{YVLuq}w<_Lmd+{Dq@zw$FC_A+})@)`usu!+yz`6?S0OUOqk$cWcLnIQvOgGagNnDI7w-ou-gCfv2k?df zF9*CKz{>$|2=3DH>i8v?u>@P+^{*AFk!o#h7M1&s!75MIz}<$f^U&s4mh_2Mm8@g4_W z0eC}!7ZzwuDDZ{=3DZz%AF0B=3DUPrxLiQg`7J$o;u^o`bA)i<8g**=3DA`gyQR z*=3Dx?~75jOEUPX=3D_Rw*RxG~>KN50GQ8<85NaR3RQ?7r8Z%;KxF;Poh*H+do-Y2?=3DGk z{`|&8R5H?M!pp{9y+VI%Lv-YHNb64))<>S-h@D=3D095Gx^CgMn8e4c(1c6r$8>Bog% zi^Wcl;;VANb_#shJCssc0ei?alyDX}7X{g|OQ3cX79KpUdaB_sjX1WU5_`x+M#Gm* z_`zwJs4tw1;bSfKc}~{wsg^UGbAs=3Dkt4#T4_3}P1zah+II~%scb|lQSHe0`AZFrc; zt_j;=3D->H}PdEuX^`@9i{>E0}`*YkXey(Hc1o%^1>o}*R2!vQ)H=3Dtw*DCg)!L4(AcQ z$#qu0!_}aFuH~<9()QUZx6c#5Rolmn_SuE@dDC9KS=3Dl|&nxEWDt;ckqd-w=3Di!G03F zJ~~!kNp0AA?4H2$MHs>01ZEd#0IR3!;fX=3D{kyFc1eba30w+}PX!)2|L+!}N@RVnYG zpp!egLf)a*8>!ymyD1t=3DNa3 z+4!&8hqts9is3bK`?%Np?b?g9h2A@W{$2OnZj6vW!7oPcom|aWdGA?DWn)EK0KUKn z4E)KK`w;a4Q#e6;XeGSK7J&=3DzJN+U2*^vw1_x{tpJ@D?x&(@o4;pj&i^dq$QTC}$v z?QL(+o04J}(}Rnd=3DUVP_dza81y7ReZnTV}dVzIxbvB%wtRu8sf>`HhdmNb#Ar+8k% zc;w*~!4to(y(c<5iWkVJ*QnMlI-4;ozm%MIq_Lf{StTJ+XhRNxthpJTJy}xH+N{d2 zzO=3D=3DMZB|?3h&RO>wWKdkxw9>0O?x1p&HA}&=3DcXv!AI7_QLE?9Ww)fC@8|YK&3QfL} z!!zBf_$_6wG27|y5jB#qqp+z*;{97|fW0p*#p?dh)7BO$y4na2pBJ8V-wbF$`Zz&T z4EvC=3D@`-s3N-K zlv0_C;_>zPUuznGX2fxdS;FXOyQLuZzcLW77`l&$&+lWuC*_^jRayq&`Ynp`{o=3D)+ zd9-b}y3wa1fN@8D6Y;-NJD|i-m9)l`N8%mrZ2Xpow)e(gX#zjMvEfz7!I+iSn|UKN1@#X~YF;j}4@~7Dtk}DkJnb z0`xs`3|E~DJ&%=3D%hDT^6`au?RjCzn&T&H8^M?^@Zr)>xW(lB~S4EpZqm$pBCD5sg3ltZn>~0<*#vV@^fFm zRxfiQcj$flgm4i)N%#3`My?z%{@!-|HMwnQU<@c2{u;9nPogAVreBiPmReG~n|b)P z)G))UHZCf2aY}TC3eBZt{3tBja;^|9IQ>TWF+D3Co*64;1XoZ#Z zhN|{k_w9RQ$?bXmzbhlaUuuWg-j8#V6?_ZAxdt{m+ZJcoXYBWmw~k!cee17rjq-b2 z+&2Sw7YajfbT;(?q4j3^^~&+?Fl(7(c)ck}OH2=3DH$vYCX|N19p_ym^Z?GoT6qJfrL zn_x3%NS+n#p^#!9qrEd$VslHgso%xFruKY#FSXh}YVSLm^{1_rR%Q61q8~(WYA-!k zA3X)#p0po|uIQ0oYTiC-6kW^1lvc@R4O4PfllqSk>b{SE69Y6~P6=3D?YM1xZ&`aKU0 z#J75RbW7}&j7u{bw5?<~+QL2F{c^o&FIwZjwB%jse(4<`d13;kcMa`f${)w%718#< zOrbxWSo%D>q8?uUrMYIb#s52M&nNU!E9y_JW&A&*hI)Q4wxWA_scr91O&>py+Q056 zEwKTvaZP_ zp88R}_1x3Ho<&gu>zS&q8?ZpM1!iYF!;Bg4^x=3DfjFe`0G!+*pQF)D~~i*X+5KN^V` zdWob(q;4AVCYPx`iM&L(U&NBMptNGz;+qa_zR)+f!fx0@f;{jxGYECO_}g|iN-*Ct ztZEOHtYUi;nK!|(66*?(>MUz0g-PEkDYjunl=3DIHR^XF{m-<(BWP$jDOEp0f+@4 zjsxOkAhz}*&QcNQsEAh$LcH~GEG+r7{{+0g+W!9k7nZ+#Il;WvOL^>*3o9k_ao2t+CUw8N4RSU3NV;!`|GkxXR>u+BIQXLm zd4>=3DU=3DWf#P-M-(Ql@+?KpYmqf5@NU9HDk2xG{bM#ir%bH5`oCSA=3D$ z_c*Iqcrkc~py?X*l|dk!NoeST$E~KJON`<)vGB^BA*H!Ka5lG8T)FtXWyK^uhS{}3 zyZU0TWvLE0Xxi4U7<1IdXS%|+zau5KpJThj6F)h}ig}IXx85kY%9!#Si2vHT9&so~ zQY{8o>n+hy&BCh9?I=3D9k^S;ABOxIznF|7It8RItyr`a8a4LwYHcX+zbqt$Cf=3DcgKk zTK~(Rc6po)w+z~RNdHHW?*Z4!3jZu^YdL=3D~h1TG;3WN4EOA(tAG@bBb?SOCa=3DkO2c z;2zX;bSDq1Q1kPF{QD|aE|0$OQH!>5SJ&~5ldYdz`Rvjc4fS)& z`6=3DP2dxQj5489&Bj`$rT!J?)ihGq8>|B&C^iW0Ql9?WF68KS?Nl{6*Z@zkP8_Pc7C z60ec$4{0ZXH2$mIJ)k6rq1Qt^LW))lx<1q+6lp~b4f6$&y&j2>7s>UJ9^nZ=3DWN1hP zQ7ebM$X~z9BOKHkUJ57TuH(2Aqlwf5aQveb3mY0x@4Xx}txT03@VG~nKg zC!onAuj}>?EoQ>*vE3B4!Ni^%OicL#DO(Vny+pdW!m@hTYVGeYF10+n>sjru>;I6p zrgTj@dInb=3Dj+#yDaqnVBanI|z)M|=3DXN%P2IijKZtE9|*W6(M7ifC9 z#sy6w25@Q2J)*Noi(kCy!Pa(95PH|zChc{XQgWbN)6dVgW5)Pz`y-lmO4~l!(ca_k z+{ay{81-6;k^15Nt-=3DUBfI;ir)`w>P`vEk(Pc1`EPifLTYW=3DGzZI5d#p{eT~J?_ab z(Ng{rC_}TnVqj@+S-SVp+Vn49p>=3Dnq!lN6#NkS(UwvXCt}yQPT@ z_{+4jl#+o`ddA35`64k#fX~eN!m{;MAC}F43x$kw3^ z`b*(gnp^%_;t?Dq*7hPMVhB5L3XaS~n}RT}7R;KflrR%<`CS8K=3DFFMDMY&R!kS zMh9`H;LmY#Dm+p@CDGu^S#4=3Dhnm{$=3D<(K{o-au!Of3}v6t2Fq3G-%Vb^`U`Ni`?M` zl$5Q-X-87eaW$>ldUma`+`oh13?$*IT2bZ-ZFy5W!`{92u2P&NPJHe~5`9hOWGX_<>67DaL=3DHNY?ydxIpLR#VPPnjUQE;;p8H zon5A+BVDGSH*|3|)F-99sfMXUsk3oHupTwc=3D1<_fvAt>qP7Oy#&e>Q=3D{f@RsoB=3DY< z>y~*NJ-p)vv=3D;}zd~3{!6ImkPHa>8AhK?bM2Hc~ZlS?m!*TqyG78hvEXY=3DZbW?ntf zj1o#C&db&oPlOX*;h=3Djul&+(&S7=3D}h8Vl<{614AAVY#7Ji1XO*a5dTbc{mSihpwIW zxPkqBlOS7DRLja>54s(;oqB2+*pVL&i_Ps?_CQS-Gp)-5sO2NOHdN3$K{D#)sKU21 z^z_xg<^!FPI6k@j5bgLHH!I5ZZ$8SN10 zy{F)dr1o9zFxnn|)}?&;#YiT-(2moL9D41U4VYC>t4es!&_0Hlrn-UhT$}it571-n zRq#<_>qE=3D^98T?ihtnXfv?b7=3DPoc+hCs*)m?_v$K&(a=3D?Rfj1Z9vuPi$;IfiOP0{H zBFd@V2&LRJ8x{?x=3DXUFjN@>$K(tfrHdRyAdFjIF!l16XUbTuEWSi8C$_2Zjc3O8Tf zk2QC_=3DNA$&{DNmnG9||F6wi8|l2}6)&v~*W&a`f)X2-g4-sINsJKTFUru9cOJJz4o zm)+s7}ySAy!34>08KPN^_-6QX2NcOW+ zndZ6|eN+;O?bRHvR#zsf{UXCX$Pw?xiSN3*%k5d?82jvWW`^|IOU-q+%IUh}*&7b+ zcv^0Kwxa7|!n9Wu?K;u-l{Wvcfzr0^p`|Ig0=3DmkF4h3=3D%eMVhhu3P_UuhlTzCu5m) z3vA{|+Uu;TOhZt=3DuV@Y6NgCMin|X{rx<1g|va_N8NzSJm7S-hkr5-wP!Z3u^eXjHl z^ku03E_>}%#`Y+m;m)vqec(-z$rR`l@$WZTt~Q&o*N(+`+Wp#9jC7B9_&Ry*&lJl` z3$WY4{A=3D@kP`q|4^%9SN$uHjM!a2dZTcvdOyJ*nvS2@Qy?6Gq`S`SKN-2z$*S{vF{ zkAHr~M|0o3ZP;Und@;ukR1MU7QT~@XW=3DItCtyd^QJLrhcS`9_{-ZrtjmgPR7RF6yh zh3hi5$;Hie&F5*_8IlxddZiUSyL&5RrtQ_Il`P(N!M74x9on{!cr!Ck_#Qs7@5DbY z{caDX_}(cFb+DuCmljNP?sqk@IPoX*qq**{AJONWicyNIG_FZL&2qMNK7Rf@_8?o7dI}?tWv$Z^I}r226X)B_gL*=3DX@s?fXvS=3Dp1kqVT61~@n|JmKJ zS}FRp{^u}$=3Dvf;(&J%4a5bc6qxgX^CrIQUG)jicUx8v#7MJ>+O{Nc8#hTs;?I|rIN zx9+47A?|(IX8aYxp)Z~G{u0j%3Qidj8io{{^v*?m{rVI9c0;?7#C%OX5AJQ=3DRB*2eWt{XdhOFR{wa-bDme7< zBE*_&->BI2ymrOKY)kI0T1D$`U3k0Dn}|~iJok5;#|Ybmi(YH$J_3(lip0! zNitXBJmG)%8LX;nHw5yWz|0(@=3D|gjYhpyMT5N$B!?!P2$yeF!HMwx z)^yMBT;#3lHCcK39L&N4=3D};=3DYx3hc?9eO)U;zb`$1#7u8@b8#cm|DQpbZ6xiI_UJ&{1LMnI+;$g|#C6qIw?H3ROGP;XJ7o;>FZdwKMk7QWUl4Kyrz!zzJgYW|Yr zae4IyVRSUkG9=3D^`#U)&eO-K;8UX0C)8=3DW8)H^s^&|Bu`ygAwBp?&9Fz4#^lb+DYtH zdu6YXBlILW{8*X~yZY9(>J4x^HUM*DVzp zUHFf?jmF4ePs3nO1M6)vgFOw?yQg8)vvjcF(i*OU1-E|` z$jE#o83ad{N2}?AHtpsNiI1mu=3D7e3w*`zMaHC^@zj+^jo(UUCyv#+!cyr*CxW(nHk zJ?#SPe_1#kv7h!w+W-7_3zfFNF_umHR%dqlp3J6?&y>>u3@i=3DTMthz9@@{of)jeUGmHKUcnU~XvEVw9syA504cFPew-lK?Hq(UL zp88l3ek%Rbl7!W(3_|;ho$xVx7rhD=3Doc6pT%tHFeB&CF{7xVN_(NV6!$VcAMc=3DwbZ z@o>axI9$H(N|kg!>HG0}5Xy_yR zhBaHj*_${GW=3DgEx>g_Sm*=3D1=3D0I=3DdWAKxa4j2ANHmgQT$(Tg5m2yI*M?$XVqUmq1T_ z7dn|pJ$E<`tGgCnipkIbSoP63nGSsibS+u%MC6!yoTJE*PyRthIJ^qphY`5b0cW^y z^UkMak>P#m9cR2NaS6vv#@?;)MqvMRyBxUWiW9Qn(o6Zn-*wolx4^^Cfzo%%C(R(2 z)Ev>vT3PsIpGC&qTWOY@B8me zpUn(w^XZCaipBqu_qyFW0m7(_M=3D?mb4N^#%#v; zG{@@icXO5pP)a(GAEP=3Dk^BnX@NGd=3D*ooW)ztMyM7Mn}LW&Uj4qc(a+`UEh5Ak;eFf zy!eEq*K%}_Z`*~-g&r;Zgr(Y%8Z{%xQac!+;lptOf?-JZ2ia)D=3DAjV=3DF{_cl)I*;LO0a` zZBFO=3DUQ_;V*cLBb^l#hR<;i-Ka1%5g9<;g`HB_G%QOq3omj9}lG3|j&hc>`mjuXvF z8$jYk`zrU-%t1TX<3@~Ja13&$bu~EFCubU7m_#;M&KK&eqT%l(%=3D*6fpXxT5xAZ2` zsoz0H;MB1WCyw9K?_iJN#PNCk4(>8`EYyM?u%7Q)s(rTpg|t7E{(;)j<$eN;oLRxB zwB{MAZMC2eQf;d>mug#$99naFpKhxYqb(9Xj2l0Z`(X19#++NB@b-z?@9JqJPRjX`^n-&p$S7AGIbNuY0Ohxm%0gtVM6t!pQs4z4*)j ziZ8f^Q_g0aVWkvWF1$rv715uy$+!o&^~P&*&n{nelZfux;c~xbX}|V3f5%d-k3m?) ziW{3E>6w6JylEQ#P>x4PCQ6Q`;pnxtraOO@gI*pf_vSmt<-m$Oavbg3MNM}ZBBBT_ z7Y2J$=3D51QL``nle=3D=3Dg7hZ6A}dW+Hnhym-a6<`u9zRwPpSU3ub=3DLDv6C^IePJ1$2LgPHD`jG2zGYnA zr^`6M&y#fzd9C1eVWWWC!^AM~wDpGhz`&=3DJ)2%mh@$?1EC37<0tMwS82%QCJ9_8)6 z-nY`<`@dBvzIVWoc@G)o9>a(5V=3D@9*a^9mz-23KawjEHkWM0^=3DaL?G!U!5ZUu?_br z9eGIcTca93>gP!P9cR|T9tln3{G)362SK5$Q{$aYW#xtk zUR|(ugy;Na<|Hg)wzyC-I%vZwCWehL%xz?tbgHGDS=3D@a3RK=3D?cn3%-en11Qnu8Bc9 z8Of^)Cck1D9nX~ZY9raDX0%m*%A|FqdqjEuDBiH z-r-ZIhL$mlJxy}S%5zuzaB;1%)Be7fvA%pbAnC2i?DJKpv`l+<|3nV|*X~$3-0u5H ze?M#b%;U0-T_*-D?DhYX_fF7o?p5CAm|mU2#E5@rBTBq!G_Au*aKAfi*K&9e^K(qjg<4PYGYM8cfKl0ht=3D|j2WZgp zp@m(*%BLgx>i)N!=3Dd7o8XJGt;GWm_+g-Q ztC=3Dx-+FC9x&8EwNTvklMY zf32WqWE+aY+o*^twZ~d-&>oX4j3&&ciN%wPDQ^NC?B5PG?XQaTT}g2aSsM`*v6AR=3D zY@67K_lucLWyK#97pYvQa}D)*(6)|;KLh%^UjJknwAn|xjSpbVYO9~4`tJp4F^BAN zN4j~d+hrQx+9l3u*M#wm<=3D$!CzZjXy$9g_-ktnZ=3DDWT`!u3ry5WS?GGvPH{KzuU~h z60Zvy9Owi#3yf)W1jB*S7``N{9oCYPT4Rd;@#{BA<+*3@tkd*0_okrMJm+i7K)-7n z8ug1`5dJ6PaXvW8&XXu(9%127N2_E5@_)inAVq141w zP<{C*Qmq|MQ+YlOV&8xHgO_P4o7J?v1M{8Ij}>$=3DU-+NaUT^cQ$^0gufurO1KWqNC z+`r!NDdBiDd_TI>Lz_&kr#7%QWgFl zob-(^FJ{lAbNIV`QYW4iO}c=3D;`IC;}@AH$c;`xF}=3DkfQ6Nr&(^WzsS{PneX6zoRFu z!4v(Y#rR7mO~>DaiOcEpiMY!sMn5qXf62sLA7h>)b6^0{<|fP-0i6m zNRbwuqezRYDAJ;R6lu{L6lqa0MOq|Lq(v(!(xSx_X;CIcT4bh3izZN{MKKgcwgf+8*Af%Je?tlJ&pab3IxFLF*?+CFsN^4PAo9VHPH$WvFIZYY@> zLp(Pn4jQk}(mLhV+PRmU@Czd!##4WNxyOdG(~klEsYY{5X=3DRU6AVGZ{8~J zJVqp2dE*2I`rwv|ub+~RBYfm*YV#cE@5`8}W|)>z@r9>R)2|d-g6G^gvZjLC9Z}26 zyN7mGEw8>@P4#2_Z)DbXVYlpx%8bExPB4Oaeqz+tWbCrEWc60V3vSM|2kUx_LDv#m z;t(diyZ(OctS61g#Z35OZQ|;;NaCDa#<0rGT(HJUqR`G_hCCO{yR9ai5ili`f$EJx zo?z^=3DjG6APF(ZE5oh1gfu?B0~Ezc?=3Dao23H2J`2A@3?ro=3DXXY8a2iS5XKS(&BWuX=3D z4V#2uewmN*kKRH?>otofbvgMgnI)+q&!}-V8uB_du7-TD8dpPph#FTzeyAE(Lw=3DYVS3^ETjjJIas>aoj@GZ3dAFJUk zMvbfCELM%H;Ve##tKlq-8dt+vyc$=3D-Sz0x&hO-1Uu7(^nhPHqWzV)8lwG`xEiAUmAD$B{gt>HqWzV)8lwG`xEiAUmAD$B{gt>H zqWzV)8lwG`xEiAUmAD$B{gt>HqWzV)8lwG`xEeBH?wsgL^cGiqnmbr~z)F34I$f1UPB#>H&Czsswq5sh498jGpsqEUsXkA~G-wKgdalKd z9+215v5xpR2X$PnxE7akfB(`w9X}y{dr;Q{k}0X7r+NF`uXD+co}hmCJRL!de{B$O zrwpKpdJLc><#?Rn6mw21e!L4Pg@a-!YC~&9Ll-z3+NObAD(}O_JIkC3_ZEMyaC7k& z&8Po*luF>sGO465^E0+XW z2QkzWGcm`=3DL`6EulZ8~qOf`y2Yq2L;Yy1;$^SteyT-@JMsz}m-6Nv$E0t{*adCq5!rsc;2G?L znF*X223uFmk(=3DTyo*gJTP?;fCYV+C09=3DYk)WOlEC4^U<%y_>)P{hIV{etQ0i-bwh5 z+x}=3D3;nL3$dqyMS9&LklWI?nT!H0AB76oh(q{OIWN=3Dgb~v0njxWRvoyRg}MS?aG^S zn37l4lgy2@jp(-{%A2y7^o?^i{$*Q~OCU_F_+kxipwYm`HeB{Ruvd=3D-CwXwv1^>sA zEl%91C*XTMqyFsEhMbP#wSD_PhIVFJhQDs&=3DS2Cm6R!X>hhJ z95?7C;hfu8R&IIFOUK=3DT0x&t@Eip-`OA-BzL6d@0QpIJ*gJsXE&GM1dz*ye}ong?l1i*xhQ_!n4eu z{^pzMeBHM&^AMG`<&nr(APf2fJKuq_9+mXyNj7?-4eh5bbEkfzoD`XVeEK1J;{e8% zJX&yHJ4Vg~QW?1jHUcxa#i7^IF;i-^VqE~kk2v(N+flZ9>FZMc zkMdo1^eBuSrX<46L`4mO7s+CHm#l!NNj843l*de9hA3~$#4LgRK1Psj)0x8ag&!5a zz1bG`uyvD0{Czv|uhVs4Kfh<&0osdjK8|l;<@m9%Dvu_D`2VEq*@sd7o;u1iI_UVO zryQxjS-ksg$NdGc`w;!&hrTiWRC9yR5RYp#bXIZD+i>;y59919=3DHcm+LYaU^%t$s=3DY=3D>o^pD4qM0j6{#a??OqBL4 z?c4ryLQnVXbH3(1^G|yq-KV#4$mPGIz2i{DKo8k?H$4rG@3ZW=3D`>!SV4o$4{q+I^3 z?*`79On*I}p4=3Dl^cv42c{Xp+TMH?#~7=3Du#%v@g}RxB601>qOrdKd6m@e)S{X{m%La z*1zwbT!39nXPHBs%abR!E8M8Kf%s#*c7{`lKk{l>0eA(UX)%8Y{OJlXLzZCH+>aIG zKS@ckvSOUya86z^=3D(m8dx7wX~-X3@4hTm(wITO~&<~nnQ}?VGs-GH(@uWID=3D1`L7JsgSF;~f>Dex^D zC%mC?UU>Zj&Ue>iM7iM$-?i`%`ohp))^1kkM9V&6$2@g=3DtJBeBi=3Dm^b!u9Y8x^uQ$ z)6sr&AnmM1`{fR5zuwyXrk(wpj(RDGZb%q4%6beA$m{U;abT3yAZZveyPX)MBl3#V zr&XZiQFI0q@aLv!JN#M9Rla}LQiazCwp7K%?{BG$OH>nyvs5uu)|OJ?W4-6pceITS zXg?$TH4WO>6lE@cu|BMdL;Gy9ifp?^$6-_p-}SJX{>z7|?6F6>!|;_u(S5O3 zewr-NmXg;sE7mp31j3nPWGS%3OZz@#H976M!ei(c)LUE0L2F>M_Qh#m>uj@JEo(0{bR}9dS3E@LOL)?>+OC$7ZnR{5(E@_f;YYNq5&2K4_Mx4MeQpd!vKk0a_qQp4_8u^ON z@$08o9Cx3uST=3DVVB!RxO5Ap8t(%TO7j}uYoPs*Hot3{c?l`rFbU+U)LeW~xh+&?w- zL<)GLQy-*VSB_tzUg^{miTahi^U?za_~Uddpx%?GR7s zg7Ljg3(kf-<{8q$LZiltGyk_nl-|;PMc3I*T4%jAegoZCh}CZe*<&4@{x6-~9#_My zi(YycmXUNP`A5dxTJv-N7U!)8Uh=3D2??=3DG762+iAaUt5_p<^≥tQph4|0r+)R{S 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 (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (209.51.188.17 [209.51.188.17]) by mx.zohomail.com with SMTPS id 1562612192016329.49465458793156; Mon, 8 Jul 2019 11:56:32 -0700 (PDT) Received: from localhost ([::1]:43996 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hkYoI-0004MP-Kh for importer@patchew.org; Mon, 08 Jul 2019 14:56:22 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:56062) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hkYkT-0001vy-8O for qemu-devel@nongnu.org; Mon, 08 Jul 2019 14:52:26 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hkYkR-0007gd-Pb for qemu-devel@nongnu.org; Mon, 08 Jul 2019 14:52:25 -0400 Received: from esa6.hgst.iphmx.com ([216.71.154.45]:34036) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1hkYkR-0007eP-Eo; Mon, 08 Jul 2019 14:52:23 -0400 Received: from h199-255-45-14.hgst.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 09 Jul 2019 02:52:23 +0800 Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep01.wdc.com with ESMTP; 08 Jul 2019 11:51:11 -0700 Received: from risc6-mainframe.sdcorp.global.sandisk.com (HELO risc6-mainframe.int.fusionio.com) ([10.196.157.140]) by uls-op-cesaip01.wdc.com with ESMTP; 08 Jul 2019 11:52:23 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1562611944; x=1594147944; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=T6YiDf12c8wOd9ACRSmxjp+ckUQZqqOt2r2ntOHABno=; b=IhqGYys1BRaRtdnBNWJ4an1KaHxAaQxDRypJ5uyIsi9PRGIoKQ+/5BB6 WT0RUp1ENZa6tx0+J2GbyyIUhLItpEcCMzVgGVkUXIIb5eEwnRoBPZluq HUAp4TYkqCH8ID4e13qQ7bZTgdy4ykRQCJeg7gfgl3NLFFIyYTwr1RoNL X6Aw35qw6P7pH5dYwYVEILkB6mZSpkU7mk/RgZlwfr9pq5WmdBsmNwNDA 7FZS0bZG40yQKVzJi1IQn980F1svocYzMa0DO1L7tDCcbqvmUncvfmKc7 znU+tBDc/+dvK9rrdneoA//cOzu/ppFYP00nzt9l9lx5kpBiIhHS5sqIL A==; IronPort-SDR: LB9AG0i0YwfuxTfy0LvgameF1xlTlXqUiQkrABkLlvwxTkK35I8+VtHbt16U0dJtBxvIFMtAyB kDpeBqkwbJ9CUMHi53FQEFQ1mNKOx9DPYT/DUFbvDkJl9m63E/tngBQQyGI1nbRi/bJol0y6bj fvzuHrpmexduIotYHYHbAH7S8zMsIS+rooD4R1k6WWBVdj9chGcYZH0p7IEOoxiIF0iXKVhb5+ x+BnVSqkUWtt8eF+B5qixTpaiEsCyQ6obkQ57+457HnOz1Y0pbacY9jyUZioFa8oKiY6fA5zLS vQ8= X-IronPort-AV: E=Sophos;i="5.63,466,1557158400"; d="scan'208";a="114094446" IronPort-SDR: NZB23f5wkNAHHnC5SHq3Fo3FGKuRNudJwJ5RVCmf+fp5lC/ToRjkd2WXomOGP+q2ZwmSJN23Sc XCxcecTY1Ao4otw2J+vPLZEM8veHpM/VHqkQ+49WiEswTu+UxL+tQVv1Ji42SNPZtt3SGdCVzB x9dPqmjSKCk0Ws6keosdDOwFtgDH/mGqcyw+WKiTPst6DuWZBJ7YpJAiBGsBlqPt/JWvCkN/yj RgXxDHxKhIdud7qnQH8hYpFtXnn8jlotGwwPcRMtKDRcGolhqBsonlUukOrkm8LW8wKqRdWFi5 bd6aMwivulDXTgMZzyCUFoG/ IronPort-SDR: 9hPGORpEkam5d22xCJG4dovNcn4HlwdHNtmA2Qrdw4lo9v1FQBEO+fHQPk9qo2E7MRRs3203CX t5ix7dhhAc3r3+sCpz63COvNH1tGPIzN0Pxi/Pa1XLviH5TyruxP76w6J4tDIToaNqCpk+xtez gjXmmQZkbc/peCv8x+8yryKtYREuWz4brhrGJ9Bzbn7PxQv/P9CmJsZ+cmOHh8Dhi6SC+drOjd ZPO9tDFFl6BhKSLVoQFl7NspTO4ztunUI2pDUQiSfGp7u9788FM4IDtdFx6LQreH1ckhKH/IPY DX0= From: Alistair Francis To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Date: Mon, 8 Jul 2019 11:49:40 -0700 Message-Id: <238062dcf3a9b99a048c8e7ae439cad7745af1da.1562611535.git.alistair.francis@wdc.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x X-Received-From: 216.71.154.45 Subject: [Qemu-devel] [PATCH v1 2/2] hw/riscv: Load OpenSBI as the default firmware X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, codyprime@gmail.com, anup@brainfault.org, palmer@sifive.com, alistair.francis@wdc.com, stefanha@redhat.com, pbonzini@redhat.com, alistair23@gmail.com, bmeng.cn@gmail.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" If the user hasn't specified a firmware to load (with -bios) or specified no bios (with -bios none) then load OpenSBI by default. This allows users to boot a RISC-V kernel with just -kernel. Signed-off-by: Alistair Francis Reviewed-by: Bin Meng Tested-by: Bin Meng --- hw/riscv/boot.c | 49 +++++++++++++++++++++++++++++++++++++++++ hw/riscv/sifive_u.c | 7 +++--- hw/riscv/virt.c | 11 ++++++--- include/hw/riscv/boot.h | 3 +++ qemu-deprecated.texi | 20 +++++++++++++++++ 5 files changed, 84 insertions(+), 6 deletions(-) diff --git a/hw/riscv/boot.c b/hw/riscv/boot.c index ff023f42d0..c7d72f682f 100644 --- a/hw/riscv/boot.c +++ b/hw/riscv/boot.c @@ -18,6 +18,7 @@ */ =20 #include "qemu/osdep.h" +#include "qemu-common.h" #include "qemu/units.h" #include "qemu/error-report.h" #include "exec/cpu-defs.h" @@ -32,6 +33,54 @@ # define KERNEL_BOOT_ADDRESS 0x80200000 #endif =20 +void riscv_find_and_load_firmware(MachineState *machine, + const char *default_machine_firmware, + hwaddr firmware_load_addr) +{ + char *firmware_filename; + + if (!machine->firmware) { + /* + * The user didn't specify -bios. + * At the moment we default to loading nothing when this hapens. + * In the future this defaul will change to loading the prebuilt + * OpenSBI firmware. Let's warn the user and then continue. + */ + warn_report("No -bios option specified. Not loading a firmware."); + warn_report("This default will change in QEMU 4.3. Please use the = " \ + "-bios option to aviod breakages when this happens."); + warn_report("See QEMU's deprecation documentation for details"); + return; + } + + if (!strcmp(machine->firmware, "default")) { + /* + * The user has specified "-bios default". That means we are going= to + * load the OpenSBI binary included in the QEMU source. + * + * We can't load the binary by default as it will break existing u= sers + * as users are already loading their own firmware. + * + * Let's try to get everyone to specify the -bios option at all ti= mes, + * so then in the future we can make "-bios default" the default o= ption + * if no -bios option is set without breaking anything. + */ + firmware_filename =3D qemu_find_file(QEMU_FILE_TYPE_BIOS, + default_machine_firmware); + } else { + firmware_filename =3D machine->firmware; + } + + if (strcmp(firmware_filename, "none")) { + /* If not "none" load the firmware */ + riscv_load_firmware(firmware_filename, firmware_load_addr); + } + + if (!strcmp(machine->firmware, "default")) { + g_free(firmware_filename); + } +} + target_ulong riscv_load_firmware(const char *firmware_filename, hwaddr firmware_load_addr) { diff --git a/hw/riscv/sifive_u.c b/hw/riscv/sifive_u.c index ca53a9290d..71b8083c05 100644 --- a/hw/riscv/sifive_u.c +++ b/hw/riscv/sifive_u.c @@ -49,6 +49,8 @@ =20 #include =20 +#define BIOS_FILENAME "opensbi-riscv64-sifive_u-fw_jump.bin" + static const struct MemmapEntry { hwaddr base; hwaddr size; @@ -269,9 +271,8 @@ static void riscv_sifive_u_init(MachineState *machine) /* create device tree */ create_fdt(s, memmap, machine->ram_size, machine->kernel_cmdline); =20 - if (machine->firmware) { - riscv_load_firmware(machine->firmware, memmap[SIFIVE_U_DRAM].base); - } + riscv_find_and_load_firmware(machine, BIOS_FILENAME, + memmap[SIFIVE_U_DRAM].base); =20 if (machine->kernel_filename) { riscv_load_kernel(machine->kernel_filename); diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c index ecdc77d728..25faf3b417 100644 --- a/hw/riscv/virt.c +++ b/hw/riscv/virt.c @@ -44,6 +44,12 @@ =20 #include =20 +#if defined(TARGET_RISCV32) +# define BIOS_FILENAME "opensbi-riscv32-virt-fw_jump.bin" +#else +# define BIOS_FILENAME "opensbi-riscv64-virt-fw_jump.bin" +#endif + static const struct MemmapEntry { hwaddr base; hwaddr size; @@ -399,9 +405,8 @@ static void riscv_virt_board_init(MachineState *machine) memory_region_add_subregion(system_memory, memmap[VIRT_MROM].base, mask_rom); =20 - if (machine->firmware) { - riscv_load_firmware(machine->firmware, memmap[VIRT_DRAM].base); - } + riscv_find_and_load_firmware(machine, BIOS_FILENAME, + memmap[VIRT_DRAM].base); =20 if (machine->kernel_filename) { uint64_t kernel_entry =3D riscv_load_kernel(machine->kernel_filena= me); diff --git a/include/hw/riscv/boot.h b/include/hw/riscv/boot.h index daa179b600..d56f2ae3eb 100644 --- a/include/hw/riscv/boot.h +++ b/include/hw/riscv/boot.h @@ -20,6 +20,9 @@ #ifndef RISCV_BOOT_H #define RISCV_BOOT_H =20 +void riscv_find_and_load_firmware(MachineState *machine, + const char *default_machine_firmware, + hwaddr firmware_load_addr); target_ulong riscv_load_firmware(const char *firmware_filename, hwaddr firmware_load_addr); target_ulong riscv_load_kernel(const char *kernel_filename); diff --git a/qemu-deprecated.texi b/qemu-deprecated.texi index c90b08d553..fff07bb2a3 100644 --- a/qemu-deprecated.texi +++ b/qemu-deprecated.texi @@ -121,6 +121,26 @@ the backing storage specified with @option{-mem-path} = can actually provide the guest RAM configured with @option{-m} and QEMU will fail to start up if RAM allocation is unsuccessful. =20 +@subsection RISC-V -bios (since 4.1) + +QEMU 4.1 introduced support for the -bios option in QEMU for RISC-V for the +RISC-V virt machine and sifive_u machine. + +QEMU 4.1 has no changes to the default behaviour to avoid breakages. This +default will change in a future QEMU release, so please prepare now. All u= sers +of the virt or sifive_u machine must change their command line usage. + +QEMU 4.1 has three options, please migrate to one of these three: + 1. ``-bios none`` - This is the current default behavior if no -bios opti= on + is included. QEMU will not automatically load any firmware. It is up + to the user to load all the images they need. + 2. ``-bios default`` - In a future QEMU release this will become the defa= ult + behaviour if no -bios option is specified. This option will load the + default OpenSBI firmware automatically. The firmware is included with + the QEMU release and no user interaction is required. All a user nee= ds + to do is specify the kernel they want to boot with the -kernel option + 3. ``-bios `` - Tells QEMU to load the specified file as the firmwr= ae. + @section QEMU Machine Protocol (QMP) commands =20 @subsection block-dirty-bitmap-add "autoload" parameter (since 2.12.0) --=20 2.22.0