From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=59412 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OoOdS-0006Rw-Pv for qemu-devel@nongnu.org; Wed, 25 Aug 2010 18:40:00 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OoOdQ-0002Ev-S0 for qemu-devel@nongnu.org; Wed, 25 Aug 2010 18:39:58 -0400 Received: from smtp.mailix.net ([66.11.225.183]:36598) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OoOdQ-0002En-7C for qemu-devel@nongnu.org; Wed, 25 Aug 2010 18:39:56 -0400 From: "Adnan Khaleel" Subject: =?iso-8859-1?Q?Re=3A_=5BQemu-devel=5D_Template_for_developing_a_Qe?= =?iso-8859-1?Q?mu_device_with_PCIe=09and_MSI-X?= In-Reply-To: 20100819031904.GG11421@valinux.co.jp Message-ID: <20100825223950.7e664cb4@shadowfax.no-ip.com> Date: Wed, 25 Aug 2010 17:39:50 -0500 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="-----------54b14120bc72690a9f3015af90802d06" Reply-To: adnan@khaleel.us List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Isaku Yamahata Cc: qemu-devel@nongnu.org This is a multi-part message in MIME format. -------------54b14120bc72690a9f3015af90802d06 Content-Type: multipart/alternative; boundary="-----------cbc979a24f4e11807332f62c8d22d8f8" -------------cbc979a24f4e11807332f62c8d22d8f8 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Hi Isaku, I've made some progress in coding the device template but its no where n= ear complete. I've created some files and am attaching it to this note. Based on what = I could gather from the pcie source files I've made a stab at creating a= simple model. I've also attached a file for a simple pci device that wo= rks under regular Qemu. I would like to duplicate its functionality in y= our pcie environment for starters. Could you please take a look at the files I've created and tell me if I'= ve understood your pcie model correctly. Any help will be truly apprecia= ted. Adnan The five files I've modified from your git repository are as follows hw/pci=5Fids.h // Added vendor id defines hw/pc=5Fq35.c // Device instantiation hw/pcie=5Fmsix=5Ftemplate.h // Device header file hw/pcie=5Fmsix=5Ftemplate.c // Device file Makefile.objs // Added pcie=5Fmsix=5Ftemplate.o to lis= t of objects being built Everything should compile without any warnings or errors. The last file: sc=5Flink=5Fpci.c Is the original PCI device that I'm trying to convert into being PCIe an= d MSI-X and is included merely for reference to help you understand what= I'd like to achieve in your environment. =5F=5F=5F=5F=5F =20 From: Isaku Yamahata [mailto:yamahata@valinux.co.jp] To: Adnan Khaleel [mailto:adnan@khaleel.us] Cc: qemu-devel@nongnu.org Sent: Wed, 18 Aug 2010 22:19:04 -0500 Subject: Re: [Qemu-devel] Template for developing a Qemu device with PCI= e and MSI-X On Wed, Aug 18, 2010 at 02:10:10PM -0500, Adnan Khaleel wrote: > Hello Qemu developers, > > I'm interested in developing a device model that plugs into Qemu tha= t is based > on a PCIe interface and uses MSI-X. My goal is to ultimately attach = a GPU > simulator to this PCIe interface and use the entire platfom (Qemu + = GPU > simulator) for studying cpu, gpu interactions. >=20 > I'm not terribly familiar with the Qemu device model and I'm looking= for some > assistance, perhaps a starting template for pcie and msi-x that woul= d offer the > basic functionality that I could then build upon. >=20 > I have looked at the various devices that already modelled that are = included > with Qemu (v0.12.5 at least) and I've noticed several a few pci devi= ces, eg; > ne2k and cirrus-pci etc, however only one device truly seems to util= ize both > the technologies that I'm interested in and that is the virtio-pci.c >=20 > I'm not sure what virtio-pci does so I'm not sure if that is a suita= ble > starting point for me. >=20 > Any help, suggestions etc would be extremely helpful and much apprec= iated. =20 Qemu doesn't support pcie at the moment. Only partial patches have been merged, still more patches have to be merged for pcie to fully work. The following repo is available. =20 git clone http://people.valinux.co.jp/~yamahata/qemu/q35/qemu git clone http://people.valinux.co.jp/~yamahata/qemu/q35/seabios git clone http://people.valinux.co.jp/~yamahata/qemu/q35/vgabios =20 Note: patched seabios and vgabios are needed, you have to pass ACPI DS= DT for q35. example: qemu-system-x86=5F64 -M pc=5Fq35 -acpitable load=5Fheader,data=3Droms/= seabios/src/q35-acpi-dsdt.aml =20 This repo is for those who want to try/develop pcie support, not for upstream merge. So they include patches unsuitable for upstrea= m. The repo includes pcie port switch emulator which utilize pcie and MSI(not MSI-X). =20 The difference between PCI device and PCIe device is configuration space size. By setting PCIDeviceInfo::is=5Fexpress =3D 1, you'll get 4K configurat= ion space. Helper functions for pcie are found in qemu/hw/pcie.c For msi-x, see qemu/hw/msix.c. =20 Thanks, --=20 yamahata =20 -------------cbc979a24f4e11807332f62c8d22d8f8 Content-Type: text/html; charset="us-ascii" Content-Transfer-Encoding: quoted-printable
Hi Isaku,

I've made some progres= s in coding the device template but its no where near complete.

I= 've created some files and am attaching it to this note. Based on what I= could gather from the pcie source files I've made a stab at creating a = simple model. I've also attached a file for a simple pci device that wor= ks under regular Qemu. I would like to duplicate its functionality in yo= ur pcie environment for starters.

Could you please take a look at= the files I've created and tell me if I've understood your pcie model c= orrectly. Any help will be truly appreciated.

Adnan

The fi= ve files I've modified from your git repository are as follows

hw= /pci=5Fids.h          =           // Added vendor i= d defines
hw/pc=5Fq35.c       &nbs= p;            // = Device instantiation
hw/pcie=5Fmsix=5Ftemplate.h  // Device header file
hw/pcie=5Fmsi= x=5Ftemplate.c  // Device file
Makefile.objs   &n= bsp;           &n= bsp;   // Added pcie=5Fmsix=5Ftemplate.o to list of objects be= ing built

Everything should compile without any warnings or error= s.

The last file:
sc=5Flink=5Fpci.c
Is the original PCI dev= ice that I'm trying to convert into being PCIe and MSI-X and is included= merely for reference to help you understand what I'd like to achieve in= your environment.



From: Isaku Yamahata [mailto:yamahata@valinux.co.jp]=
To: Adnan Khaleel [mailto:adnan@khaleel.us]
Cc: qem= u-devel@nongnu.org
Sent: Wed, 18 Aug 2010 22:19:04 -0500
Subject: Re: [Qemu-devel] Template for developing a Qemu device wit= h PCIe=09and MSI-X

On Wed, Aug 18, 2010 at 02:10:10PM -0500, Adna= n Khaleel wrote:
> Hello Qemu developers,
>
> I'm interested in developing a device model that plugs into Qemu th= at is based
> on a PCIe interface and uses MSI-X. My goal is to ultimately attach= a GPU
> simulator to this PCIe interface and use the entire platfom (Qemu += GPU
> simulator) for studying cpu, gpu interactions.
>
> I'm not terribly familiar with the Qemu device model and I'm lookin= g for some
> assistance, perhaps a starting template for pcie and msi-x that wou= ld offer the
> basic functionality that I could then build upon.
>
> I have looked at the various devices that already modelled that are= included
> with Qemu (v0.12.5 at least) and I've noticed several a few pci dev= ices, eg;
> ne2k and cirrus-pci etc, however only one device truly seems to uti= lize both
> the technologies that I'm interested in and that is the virtio-pci.= c
>
> I'm not sure what virtio-pci does so I'm not sure if that is a suit= able
> starting point for me.
>
> Any help, suggestions etc would be extremely helpful and much appre= ciated.

Qemu doesn't support pcie at the moment.
Only partial patches have been merged, still more patches have to
be merged for pcie to fully work. The following repo is available.

git clone http://people.valinux.co.jp/~yamahata/qemu/q35/q= emu
git clone http://people.valinux.co.jp/~yamahata/qemu/q3= 5/seabios
git clone http://people.valinux.co.jp/~yamahata/qemu/q3= 5/vgabios

Note: patched seabios and vgabios are needed, you have to pass ACPI DSDT=
for q35.
example:
qemu-system-x86=5F64 -M pc=5Fq35 -acpitable load=5Fheader,data=3Droms/se= abios/src/q35-acpi-dsdt.aml

This repo is for those who want to try/develop pcie support,
not for upstream merge. So they include patches unsuitable for upstream.=
The repo includes pcie port switch emulator which utilize pcie and
MSI(not MSI-X).

The difference between PCI device and PCIe device is configuration
space size.
By setting PCIDeviceInfo::is=5Fexpress =3D 1, you'll get 4K configuratio= n
space. Helper functions for pcie are found in qemu/hw/pcie.c
For msi-x, see qemu/hw/msix.c.

Thanks,
--
yamahata
-------------cbc979a24f4e11807332f62c8d22d8f8-- -------------54b14120bc72690a9f3015af90802d06 Content-Type: application/zip Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="pcie_msix_template.zip" UEsDBBQAAAAIAFWJGT3T/ahh2Q0AADMoAAAIAAAAcGNfcTM1LmOlWvtz2rgT/71/hSY314GEJEAe TZNrZwiQxncEOCB9TL8Zj7Fl0NWvWnbS3E3/9++uHkY2kKZ3TJtgSbva52dXcg53X5Bd8mf/5paM u2T6yDMakn6YB04WpzCFs904eUzZYpmRmlsn7WbzaB9+HJMrZ54yl5JLGgRO6qnVY5qGjHMWR4Rx sqQpnT+SRepEGfUaxE8pJbFP3KWTLmiDZDFxokeS0JQDQTzPHBaxaEEc4sKuyA8WZ0vgxGM/e3BS Cus94nAeu8wBlsSL3TykUeZkuKXPAspJLVtSsjNVFDt1sY9HnQAZsojgtJ4lDyxbxnlGUsoz0AfZ NGCRG+QeSqKnAxYytQmSC4Nw5Aescw6qoMANEsYe8/E3Ffol+TxgfNkgHkPu8zyDQY6DLo2QCrQ5 jFPCwYbIDJgwUEAovZJRLMONEjRupszFceRhGYdlfZiQys/TCDamgsyLwXxi37+om+EIUvhxEMQP qKMbRx5D1fi58uIM5p15fE+FWtL7UZyhu4Uo6JFk5Wk1xZdOEJA5VeaDzVmE3HBUa5aiGDyDeGBO QJI4FftWNT7Qclz3yXR0NfvQmfSJNSXjyei91ev3yE5nCs87DfLBml2PbmcEVkw6w9knMroineEn 8oc17DVI/+N40p9OyWiC3Kyb8cDqw7A17A5ue9bwHbkE0uFoRgbWjTUDvrOR2FNxs/pT5HfTn3Sv 4bFzaQ2s2acG8rqyZkPkfDWakA4ZdyYzq3s76EzI+HYyHk37IEQPOA+t4dUENurf9IezA9gYxkj/ PTyQ6XVnMNBKdm5BjQkKSrqj8aeJ9e56Rq5Hg14fBi/7IF/nctCXu4F23UHHummQXuem864vqEbA RSiJK6WY5MN1H0dx1w78686s0RD16Y6Gswk8NkDdyayg/mBN+w3SmVhTtMzVZHQjNEXrAtFI8AHS YV8yQsuXHQRL8Pl22i94kl6/MwB24K1h1aHo5MMXh8LR5M+jE0AFlnCakbnDIXYSl3AJSLQMSOuI 9LoBP1tNMbnhY3HnS04+OaGzdDKH/PaovzkZuXcCFuXfID7JX8nbbRzed8hALJMQycnvTuJE5I+D P3SkQspATsA/KTwkReIeuA0CKQ8o6Nyz4FGCA6NeEd1IErB56qSPSCrQUQPdBXmMc+LCLildoQeB 9JeYgQwk2uBYHnk0FSmUQVoW+fRueEsGlHOYe0cjmkLKjQX6iEiRIARoqnEKBAe0RsIrFKXAlKsY +AvwuyAUAJGK3e8BhjD723q3gUY1yPIa2BYUSEmcIF1d4Dx4ESRRdNussFLW02C9jBNQDFyGqj4w CTKAun4eiBBFI2sgwPTQYHBRwDe9p5IVC5MAXEBALyxKjyA7cqikOGrwoww/IGRKqTazMOgmSxdm 9oFnGIM1PQplLuBa/0/gZg5CBh5ZOoC4KXUpuwcRZRH8OVcGsapZEqOVWS8I8xGkoQaAxL8tsyw5 Pzx8eHg4WET5QZwuDlVB4odvRVL+ohCc7CwfDpY7xjNEdenZ99zqArY2YEOn4C1oeZy1W62T47W1 1E7jONswnCcQF9QJN0x58UO0dTLk7JsNSZtg9JXn50HsfikPAeQA3JTHHGgF4kPxszwR0YqgPJzn vLJHDM1RZSyMIwZ4VrHkg+36i/LYMqGZjfBXHn5wMnfpxYu1zVlc2Yl5FZVzPt/Pl9JHxvDXoxM5 4lGfRZTcdD7aUGjty9spab94wbH1cbFR4JCDEfz3qM1ixLrPxtI78ob8Q5rfWn6zgb9eNcn3i6eI 25uoj/xTpD56dbqdOv26Ttk6bpDWCdJoovuYYR2xQTsVgjb0l1lt3LV69B5blt1F6C5tXE4BSZ7+ ANVlzsnuMuaZDX5uFCMixHNef/GP4JGDmGd2Bol+f1Ea4NTFdZXBfL4+iI0RKNUsj0LbDA0XL0+0 TpFJEBvrQa7+FEd2K2z9qLoAk83G3YoJoVExvBINe3ZAWv9z6/QOTIxDh7tIgA0l/pIWJvPTc+9z +zXZJ0etu3OMhNPzzy0Xnlv+3UFTohMoHafQYIPdgSfXpgesewULX2P9nDfPvaOmYNA8aFGgfINL BTypKIWmwR63x/blpGe969u9/nv7sgPdh/60z55aCgG0cu5Re9vS6e0lhJjBuGZ1r1/bPVgx7UM/ 1OtMPgG/q87tYEb2SKsulEG0r0EAgNBbpLzA+CC/bZFMzO7t1ck/RViib6SJd+fpRTGsgmp9I1Pw PbHZ/lZZVtxkNAK3IlhXc1GSQiD5NYgCKCXsbxqL73DAErD/q7fT0GT1Fct5Ctwk2sv0U+ki8gdF uBqipcDNdeyX/IJHQ0tTN4SAmAN6aAmyJMgXGA16RqQyrLbVXM3IbbKqQvYCMFXtUJundSXpdzOk oQpDAsgsxDg8lmF43jzeEsAYuadHWpqVS47akvsGsz7DonSTSZFJUSelQUuIpCx6LOy5DdM2mrkh FG5omGkIVEHbm5lxAw2WPR2MZtMXh4e/YN/pV8ehrvgbhk0uw4k9GY1mYzx/6M9pdcXteDqb9Ds3 xYqz6ore6MOwtKYFTGjA6Q83a/1ws7UV65vBXnBy9p+KnDaEzufm/smdQLGzA/Fdx4kACT8SwA3Y rMDAEBdHyyCgfLa392TK6ikUo7QUHIrPz03pjQH4E0HYhij0o+1h+NOhiARPZmr7BFK1yMPCMk9A NtSli0rWarp9UmsBdJ6J/7sQXEoC06zapP/WmkWlfaZFT57M639t1FLBl6JswsuXxbr9t/jzAAB0 1QxIIwF1q30mmHPtiXI/szXudRKuxz12LGNksqvPARfmnGha9Ew5B4oeaXVKUA2PWVNEKGkGUlyv KVL31Z1ZZJ6Tf9gFnF785xwrpFGBUagngqPkMDNCmj9OuecFygZRfhAcetn+WxEWmlqny5q9Vx6R FjfsXHHWKnaK+JHNVdNso0ogvaGD2uLAjU6sTBtZ/l/9KkxSPrZKl5pW3tQc/dilW7xZMeYzGG2C iC2uMc3yvQLQqBZzAjCNuMMozuPoGjx+6WN5ARPFgX09xkEKYCxCh8BRxJO33WoDLq/mgc2Go5/k BeI6npcCEOBXdNd2O8jTpjjx7M5RCCnv8wi+0DSigY3vIiIn/DkiN/QCaDmeR4N6pd5PbuQmuR3G Hg30aVWcqVURWNloToP4wT5e2CFVxpIvBMwhSXT1oesvppnworzDKB8ldRUrj6ozgKqb0mcbj+UX KyHd5Ws7AJ+CM0Tx2FeF+ysNc7wSkMrBl+owhMfG4bP2yWs5aHHHSr8qLdRyc/9eyu6pFfkx6OOZ Vw94d6ieIFmnd8omvW6WBmCPIE6SRxvsn6VxEFB1bLOmHa1omrnmPoYJQNM19cKY2/xIISlYAvTl MrxXblWz96FIHDFplGgnCGIXtQRfi3c5Qex4UP3DQ7w8KhpT4UeB9OjtOH1cJZEMhmqQk+cGsPTm MwMXPy83hOLLtVjUKqoIkKJrZW01WlNIJhyPh1L8vbIf3io17/QaMwhgrfBCKDj+XVNgX46U+ibK /belzUorNNdCTBjjNU2+BO9AxDTK/Bqkfax11ZkFfES+CEVemqdeRQoGKyfPExZ/WRU/dhLmGhHk AvKDRSCG9XUMTgBrLQbuUulfTZkqohhGw7O7aQLdbbt2SheMZzS1fZqmwpO4JKWcpvfCbLXWUb1e 5AVTVhE7ee1knm5vqIuTweXE6skrkef2Tuanyubqdtj9YcXefiopVGfQXWH58Z08ELLr25OVtvb9 wqnqJxPY8BrO47spAbOr+lnUXVvMqTonua2CZw3GYKwALjM04ijCN8wYDEkIsJ77vt5CYdfmmEco E/PYTR6hY3PElGKPBmnpONHBk6imCb43yOZI03hpmKp6E2wuXzGpmBjazRqTvSaDTjOa2xFzOTyU u8uh1ZUVAlD1DXkZeXbmzAP6md0ZrS+yBmq5e+RBq0hbzWYTGsXh7WBQPuEyH7pcLDyiyw6db8L/ 1hVWmzp5+8a8pTcF8VVfyjMP0gW2QIufkyyOSYiv4YAEU/d/0Y7R2dFvIFCrLEBF8e1lb80WUCQZ 3soX4iuxAZLIYYkUR34tjawd8z9+/Cj8Dg1tgkWNkzgKHsm0M+sYjaOdMPbtyBavB0q3jEuw8n5L 3GPJe6nrztTu3PaskY4K8WqnQrXCIPOSRweqWPucHqlBzP4RZVnHhA3ptZZdGAs5n9tQMCGmPNPW 0kLn4NsvVNkpoS7zIdWhmSNIlbtLZovUkf2AedIS80tlv+oN7X5rPSQdN2Gb5NAvGXYpTaChAAZ+ tW7iBUH75LR+URZa/z0JR5CPSudA1pZH6l3xaq18hpyNeqNzMo6TXJwhpuMekVsTz8mcA2LyUWHk UXw/jpd6sA52JMDWBt/jy6jSMT80KohYU8bXSi+6R47wldUcUtlIKXFMNfLnbC1N8CP7PdV6SvnL 5y2lE5gSNrNl+a3VoItWNHUhbEO9fdyXy3cqhzZBizoLjBWuqsmVQIg9P+V8B3U4aYI27EnqJEtX tGhqIDR8vodKSz9vYoOWtKPYd1iguBirvleDbQXQpt2Kdkd3p6GTJCxacHN9KXCxYkBQm/VthfLG AuxBojycQ68BVqkVdfR78VIR/1ruxoGEwiCSFSVUj2+UiAfY1cLTjpzfkTl/4FGOTdKO+bcu466e FRX6jXlmVRMI/Njow2T75KTxYssLTiWE1A0n9AFPZGDRQalltZdlMqliiccGvrDq/1BLAwQUAAAA CAB4hQo9V8RK5qgNAABxNQAADQAAAHNjX2xpbmtfcGNpLmPtW/1y2zYS/1t6io07yUiOrC+7qc+K M5Ul2eGcJeskOWkmzXAoErIxoUiFpCz7MnmXe4d7hL7Y7QL8JvXhuL1eZ86T2iSw+8PuYrG7ANha DS6VTm8w7k16v0yKtRr+A4COvXhw+M2tB6VOGZr1+jGcwIXDmDW2dRcuPUPS0c+t5y1OarXValW9 IQoXKaq6Pa9BBdhc4+YJcGtm/5zoDEfqsjtm2gtmwPQBTsLm/m//cvjShb5teb/924LXc43eq3N8 t62fl9q0qmvem0ogxlvNMVaaww7G9syjBxg6tmd7DwvmgmYZMLbNpcdtC4XXpqhVb/hWGZerAX+f 647NTKZ7jm1xXfL0Yu/jB9dj8zF0F14VrttnIaevvs4Wt9yt+oKFekywERaOfeNoc8DHGRoBXF/G akimzODBXsKtdsfAskFbLEyua1OTgUZmmzPLgxX3bpNzUAGP4AM4CYUNyIuWRpN6NsFWhDKEr2sW OMzgrufw6dJjwD3qq9kOzG2Dzx58CA+WlsEchGfgMWfugj0TLxeDa7hgFnM0E4bLKQ4El3Iw0FBP anFvxVxKJOI5J5XDaTm3EVqjmWgBQ41wlDvmuPgOzWAUH7ICtiNhSppH8jtgL4izjEI/gKl5EXO+ KbXHWDKhqphCRIuYFg67Q2eurp3ayKwGOrwAvEXHFmBk0hU3TZgyWLpstjR9z0VyeK9M3l5dT6A9 +ADv26NRezD50BJC2tiL60OC8TmqgthoRkezvAcU1F8rvVHnLTK1z5RLZfIBrQbnymTQG4/h/GoE bRi2RxOlc33ZHsHwejS8GveqAGNGovlOs2FeZ8I5cOYM5qH+bmSAD2hmF2U0DWlth+mM36GEGugY P7b7jG9i07Zu5Jx4MZO2gM9wLXgVWDkcXRV9OeNNEiByqQooll6twI8NpNOszybOwxgRzvkM0c9N 23YqcGa7HpH225K93mw06geNw3oD4Hrc9tXrDbrxwFis7RdhH4YdBe1wh+JjaFuaYlBsrxWLP3BL N5cGg73bVfV2L/a+0NPvPNnwBaEOPD5nDrVHHa9dz+B29fZNssnk01Tbg1sTgS7bjOH2M/OS7Zqz 0GrcSjeT81o3ybalhT5tJNuQkZgRgdrRLmiQ6fIGxp1Lbn3GmUciNMgPBpshHXR7Z9cXKnYqg7+r aD7Sb4Z92Y6AYzhSBhNVdJfQ+eYaTmC1Wi2jY3DLm4VtqvqurbZHF2NVLbfyuOs+aYqTiJmJ3rdt wI2YiGFhxBQG6NhzzEtoB93UHE1mGVo2Gi74yGPcqnSUALSjqJ2rwblyoR6X7NnMZTjsnWYuWRlK 6COqbluzj7LjE5xCSfaV8wAarzII+6Ul6tx4pXqwX36Rg6cvlqpnqyZD5g3Qh8010IfN7dDIHEBT qiySl9Lch/ylfVdXHaYZ6qQcoS5sF0ezubGPgdT1hh6u2rDTZBbOYIBEVBJFRIksTPiGguwKmiOe Mee/l4i5UGvEzMMtsntMVBaElgueWrEe3xrhYyvNJaSIv2W5Q5LwNRpcSogp+b2DKZY5LX8hWDN+ s5RrAPPBDYYPzM/xeDDuqGLFv+sNVKUrK8j6faPxUzND0u29i5HU6/WjDMkoSdLIEHQu25gGA4Lz NqLUCyjpe82xMNydwMD2KCNT5zl1JtZoiKKM1eFkFElSD3A6WHeeYZ2KFDiROFFYkuQhjK/PQpUl AhQIDSHGy6krikusZSwDw4bSzbEXASSMUS8UAmbixb4crk57GBP8SPJ0tIU25Sb3OKNa0fXikqcR KPINlUFoYYGgELWzXCAnj+YZ6gdv0J6gjP7RggY+4wPZ1sjD7SsD9WIwCfURuH1u8flyDjdU4ORy tX9RL9tpLu1ecFFBaOkPwv41mavPrseYkeZzLHITXtjpd1XlatRrdwsQeke9mep/P1ImvTjBYYKg 3+unEV6lCSII7P0p0SsDbIiA/e2c/gTAWbHoeri4dFQKow5GCA/O2iN1hDOADR9fffrYpABc/Fos YA2D8QL3YBSHoFj4igC4kauI4H7WHvfUdrc7wiJRHQ/bnR4JezX68A0Z0CtriFrfzqNcSXoIeBqC pwL1qH3Tj+BpfgfP4XfwHEU8u/wInh+h+K0lShaobzS96jHX22r/o8fY0rd/4zFzJu1/f/yYcf73 7S9LLSiGKRVr1aXu+SXnGKeFqTglaHViRL27skTHuqslmmiy5nNuqxy3tfet4rc4K84vVeAqd75Q ssM9w2eVihoeBDkkEDmckqXGXSZ7nS8lTMZBh2mvcpsjMO6VUDLKFfvTpUt53PcnQVsMiPV4CpWZ V5QKx1RtBbVW2Vc1UeQFnanaLplwy63IvvAuyDdZsLAChZfQLK+BlAmaIBHMtzmCCbSwLMSwdUxr IpmyWxmiv4ki11cVq8xkBn+BXj2bRdKLITum5mLqxR1HBk3biPbmDRwjVoZruo2r8YrY0nxNfQ1f LOsnFKjVMkmfGxlUYzuqVCTDyTZwxmQpRLZ0Q3lyBJlthvOFSLMdHsWn3a9EpKy1WpxOj9NhraFe DoSZMoBGnNAvTLKzeMjiZH6dkbHR4SxBJesKjAxrlqVYw7a/HqMIs2/EynPNMJx0JU+Rh8p2f8GG nVgzqVONzrjoyeX/ZFGkmmqO6oi0corhkssO8Qs3lSV+Wm8Bf03RfXDdx+V0oVwNxtj08mVZUmHy oT/BEKimcfAGhXf8KoF/qpKoOGOCDiNrKaR9DXUfJfhBe+GGf8laWKseNGDONNzdWlg1z6nwF7Ud kRWiQUmbvEGllv6YpdiYp8J0ZXjxIpLkZYj0RvaiWIWYdvQTGQqH461YB25qPvvv34ryt8wNsa3+ 3q/Wc/ckNNMJPK8f//KrtUcnC+fXg84E7aqqlZDAX2c5EIFjRGCn9fvn9zTx8oEUkE/oFPIBZT99 bmwYrkLsFd+phC9F6garLdiblYjqIOIU5NHmrAKNcty1Ay9MezdtBTc79+7uLIT4E3z6L+XST/Po 0IT5LkmzCc/pLN6js6d26IPS9fYqSb+LeVvW0XAuUSD/tCDtbWlH+w6RUstig2xrVoLDvCUdS5DP JWN4bgiflvwDjIX2Zck2xvDA13MzQcAfky251NZKsPrjJGjuJoH5x0lwtHO42TgRwbD+5OZFq+Tg u4e5jeZ/9LjNncfdaPRHj3uUmelMxYIhLR7SqRW3RTKSyyWkWst5hUoj3JaEs18sFGS9JBtlRCce 2oJFcsqDHxxnYTteLBfhVLzC/yq5HjMVo5EYfrDYhtPMx1k9FucoH8fchhMGPVinl3Dlx8Jk1RKe +ViYrFbC0eIwG6LBnM3jIRH2Aw/zNOeGeeri9sFVabSNgSFxQ4Lx3q+rcW/mMLAt8wGOzijmg+dg rp3RmXBJjlp+9uwZVkHlYGNAp3YRl7hXTLPupM7qT1Fn9XR1IF8f8yn6bN12hATUqcpKamPpFq8S T6VMrY0FSajIiZDzBCjd55S/Ig7+vzz0dzyBSE8pEcMpzUgYQQXm2TZ5dOQJZ6QC0TPXlVXb2kIu Z4JDceIVQ6Kg2yrEqNe+DARY60iR2i8zTpVAJ2x0LboOEH51kgHL80f+GlL+eNBoZRwyqYaHpW87 cP698/6E7r3Prsd7MMZpz7RWYYLJNqYgr+S7dU6zTNiZZpG9W+n9Q60mP2ahycU/aGjbefC9vQIr Blja07U3aNDtK6DpOhpe3HtSPW/PsB0DmGVojuF3ViGxP6W7w133qOkqKhsPo7pxazh8SkAXw3xH PC/Ea7jotjCvQszXbcfU9VTdvidXPVm3HdNYJnEJb9nt0GxzjloXXfyveixtTidB7q8etcwsfM4L YriwiFI8CDphxGImPtdb/8UkFuWtMG/8VQ/lfo/ZWJtExClE+jhkTSkSC1jZQ4c/LG4mjlvygmc6 bj5C3e0ZOi9Q73ri0hlev6eI3xe2OF9aOuz7N6a5Ze1HOoXPHi5Eu5JKfvtqTbsp7msjYUao/A6y kI02iOJv73KDdX5zQo78sn7XnbncikN6h75lbx674Nw3ULHulXo97LTHk1KspwJixOR+U/yi675w 40nRmeuaqUoP93fUYYkR3azKDB6qm7otzear8AxeECLRutJLXNC6mCgIKPeSNqwfImPHr2TXj01k Txy5nthiY0fyEMbi3szKmeqcqYJHzlXmZjhKiHxTvSu/ZsdCgT7ZJAGr1WqeBRK3ZjJ94OBVeUnd SqyVvIvr8L46zI4Jd/GvlWMHHIGH5S2pNSse7RIIGqVZyFTngOW5zLVfazXc1dH3mfQ9ce9+AaOr PsXwMAvGP6nhnz7WP8EzTOXBaT1EKS1L28Agcrr+04tyjPlrYtMp8wm3/aUfLPq8yRv59uLWDe7F HHjO6eN7pXZFSuTEc472ieDIeKHFMayX4p5ZNsQuI2OADV+TZE6fMK6VW4VCIdL0G9D3tmS5rMY4 j9+tcr/X/xNUlh/dZL1R6h3TOqfUyQ0g0brCGIMj5xQvZAMFlykYtsXWhaqgLE+FwbWfoPjhRyxS XGD0EQ39PwashJ0VXC8V2JPxZy8R30LbKdbMTmmEDUEOrX4hjaguw6YAqBLrMpiriy4Zi0DEIomc oPMrV/pjz+IRsexTkWLS5KeZb25mVmVzJg79wv9IW+xP4qYhGUKq0ou0vtI0klmaeBN6ufgfUEsD BBQAAAAIANJ9GT2/pJXt7gMAAHUPAAAJAAAAcGNpX2lkcy5ojZbJcts4EIbvfgpUzc2VsQluonID QcRGhZsJUolPKC1UhjUuySU6Kc/bD7iJIETI1k3S9/ff3UA3eX97A25B+0kxBfhlXddfwKo87I4n sD7sQFD+qbYloEEtwJF9Kdd1Cf4ty1dQH09v5e5O/httNiehW4vfwZ/yVFfHAzjuwUt1+P1+/7qt eLWr7/6RFU8kKv6uX8ttta+2YFfuq0P1JmQ12JQvx8MvUB2AELai+5ub+9shsW2TcVm3uda/N8PX BvqrDVM2hXEfMcJxiBjjLE8y9EDA+DHeDaijY5L/SLLvU9qcBp/E5QwzqgQ3jCs8DeRcOh5e4ZP8 kWRT3jPmEupT56QRiC9S/sasIKAsDdEzXz0gJSNrtoKBv8zIms8oKsKcRiSgiKMioMkosEXJcwIS Jdkzz1AElIyc+RLYM8tJpGbUCLz5lBjJKAp5wXzVYWtYep5FfsFU3pkz8DMaiFN7TFiuGLizTe15 ypCakDt7LXq+md4L3j7zE0FAOwGn8TfOCn+4RvroM/105/uJkygqYopRTpN41AnBYl6QZgkmjCWZ kE4dNvZcf0Y+TX6QLMUjb84atDnIZzUI9vt2kXTLrtsgu3ap1HcAMLHVxH7776tYYO0y3Fen+u1L T4BD+f52d7FlViQORGI04CGjPEweKJYNxR6YVhSQFcVk4B0Le0sHjbxhQFNnEBB8WZFYHFBjIHhu QujYkxYbpqszwDTLCnZpYOkE1I+UhDqBrROgKJgTmKamBMHzEMWYyLxpqItgNMipGr81sLc6QZSI HZuESBE4C01GA8+jFEPDHZpq6Co48xkSpn1821N3n9SiNA3JZQXuRteihudi/njM0UN6PmXdtet5 a4B73t7oEmJFPNdSr9QYCJ4TdVVemYOGZzTykcw7H/DIzyZ3Yn3lTuD5S7d0NAaC567tTnlD/KIz yAgKc/JdNSi3GoOe5x60lme++aIz+ElDGv+8qKAstbcaZSsShooArrWHTGKWxPRJEZgLW1NCz3PC oLUw5EPTGHzLCGEYhZNTg0v9nKXYcyxLeWcTbyXaXRTnZFJw21TDczUGLc8907ahXLGlS2jgxegi xJ2ON22ou0UdT5jPl2N801nr5liK7yMOYR/f1o3ZwFsLKDyMLv5CPzZTHg48/BxvDrx2r0g8GvOB n4mP/KE/gtc9zabxzTOvW7xT3jrzysNMFVD8uOyy7w5g+UEBLQ9l/voFanlT5q8X0PKWzFsf87bM 60ZY4h2ZX37MuxJvfaI/Czn+9YFseU/mvesH9mQ5PMKPo2CrfxBk6Hm6IZqRX+x0I9nwHLHpG51Y QdpnN41XKKTB1GAvPjf/A1BLAwQUAAAACAAIiRk9u2wMKFACAAAsBAAAFAAAAHBjaWVfbXNpeF90 ZW1wbGF0ZS5ojZNBc9owEIXv/Io3ySXJpDjNsWQy41CTeAqEgmnCiRH2GmsqJI8kQ/zvuwISLk2n Hh9s7e6n93al6KqDK9S5pKWnTa2Ep2VBW5lTt+JICPZN3Vq5rjwu8kvc3ny9QVxoofGjEopI4U78 Pn4Jj9yKFrnZ3IfSvzz9EE91foRnlXSorVlbsQF/lpYIzpR+Jyz10JoGOW9lqZDOW7lqPEF6CF1E xmJjClm2gcNrjS7IwlcET3bjYMr9z+N4jkfSZIXCpFkpmWPI9rQjCN46rLiKCqz2nFAxCBpmRw0Y GAYLL43ugSTHLbZkHf/j9n2PI/AaxgbIBfeBlVuYOtRdstwWobUfpd1P7J9cFpB6z65MzY4qRrLH nVQKK0LjqGzUdUBwMl7S7Ol5niEeL/AST6fxOFv0ONlXhqO0pQNK8oAlk9mXFdq3LD8QRsm0/8Ql 8UM6TLMFm8AgzcbJbIbB8xQxJvE0S/vzYTzFZD6dPM+SLjCjIIsC4B8tLvdT4jYW5IVU7t34ggfr WJ0qUIkt8YBzklvWJvjw1O3/DE8ZvQ6oYJOTT43sQZbQxl/Dsca7yvv6WxTtdrvuWjddY9eROjBc dB/0RJ1OdBwFv+QcaS+FUi3PDfQmuGsHIwKHq3EYR+MlHx1ymPRTCicSo1n65XXPO5cln8YSP5PR fMnxZMmx12WWjCbDOEuWT51zDktN/8hgiM5VUxDO9vezNtZ3q7POR+mp6nvyK+0nOCZunHw7XmLO 3hpZ4LQutfQXXPnQOFytGnfZYyBpvkfgJnyqJrj6A1BLAwQUAAAACAAIiRk9t1bf1MEMAAABMwAA FAAAAHBjaWVfbXNpeF90ZW1wbGF0ZS5j7Vptc9pIEv58/Io5b8UFDgbszWX3QuwUBuFVnTGUBE5c WZdKoAGmVkhEEsa+lP/7dY9G7yOMc5tcXd25dh2Y6e7pl2d6usfTPKqQI7KeMWoEdLW2zYAaFr1n M9qYwQxOdt31o8cWy4BUZzVy2jppkY7lmA75x9K0KbXJe/MP8ckMyMwzH8nMXZ0jq+Sni/OqEwkf L5lP1p678MwVgY9zj1Liu/Nga3q0TR7dDZnBUh61mB94bLoJKGEBMR2r6Xpk5Vps/ohyYGzjWNQj wZKSgHorn7hz/uXyekIuqUM90yajzdRmM3IF5jk+JSYsjSP+klpkyuUgRx910IUOpO+CYDNgrtMm lMG8R+6p58N3chqtIQTWieuhkCr4ATT3iLtGvhqo+0jQtTFro8T8xEqLMIfLXrprsGgJIsHGLbNt MqVk49P5xq6jCCAmH9Xxb8PJmHSub8nHjqZ1rse3bSAOli7M0nsaimIQYAaSwS7PdIJHUB8lDBSt +xuwdC7UK3V8C0aQvjq+VnSd9Ica6ZBRRxur3clVRyOjiTYa6kqDEJ2iWhQF7HDxnEcJ3GjRwGS2 Hxl+C4H1QTvbIkvznkKAZ5Tdg24mgGf9uE/wbNdZoCg0E4gTR7YJmxPHDerEBx3fL4Ng/a7Z3G63 jYWzabjeommHMvzmOerTrFSaIhTwH/V96gTMtO1HiBuhDyZ4LTTEJOHWCMOxCRhAh/pk1FUpIpIM dPX4E5f3E3Nm9sai5GC5bSwPUt/Xs/x3ZjDLzw6ufPZQIKM4khsykDLeuZwATOnR6WYBfgQqUOYn i86ZQ0lPuZhcGqCsYoCin4yxMhhddcYKypwDTTlBJGGkqddjg5NVwR8rE1zcaDRq4HjmBPN4zDBu OkZHu9QNo9aWcbcEaY4Tiant02cX3CkTZDiQFiopw/vqtQJUN2pXMUbacKQAnhW9avgBeA30nbnO vJYwJC64UXuSHAbzxo1y3RtqhtozulrnVsLaK2UVighWo6OrXQm/rstEtB5OWi2Zooqmq8PrIrWE Fn4Z+mQ0GmpjpWf0rzqXutAMZ/h34+2bC3VcwnutwXLdMaSG6Ock+lDCMez3dWWc1ewXmRm6Dh4v kLcefpUSS6MjF7svpfJpJNX27zLijqJJiTFEuA+BklxMdDwOV5Af/PRu7A56hjrUlE7vLwlj6zQ3 /1FTx0qa4OcMwUAZ5CW8zRMkImD2l8xsd3jdVy9jCTDfkcxnBFxUKrhpIA/DnvHx0PXZwoG8jdk4 /HXR0QyNLuCU8z+/vft8ekfOSOVrBQU0m8SGs6hOgkc41PjQV5B62op+NrZd50i86OiK0en1NDiF DH3Ugf0Ctgy12yfgBjmwSCvPz5kFkiX86hAnE/6TiL9OWsnoqXT0Z+nom8woEaN/I5WndqWCJmJW hQN9MwvSiUG50THvGHpAQrfAXC88WOB8afMhyIpktWKuwaCqeWhXniQCYBFAWRSPe5dZpJIcCsz7 UsWxmvB9Opce/O688t9BuLZI9rtzgDm7P7nujiGH8KQtovWbuyWWy8swz2R46jqoGvW8zTr4UKk8 VfC0K9PANbYeC2g1se/IqpMNCPj51IAizrK81Nd7E8KHdgNEIqXjSY8ujKmJJRZ+8tk/aeKnqekZ HgfcGUSChRORBaof1gZYTcxcD+oM0Bvn4LSosrMWFAvvETDXk4GhKZdgvw5Dr1/XBDwr0d6KNAA0 W8fnYJsnMM7uGmgJRCMihfKjGpO/Jy0hK/qBnRMwZwPlbfPo+ISsqOn4WK+QlbkGzPACIr0qWitb NfFCuGg1tegZ926NHB4mqryOhZ2Hsym9vmY0TDwK67J2ds6j5h/J0FMl+V2Gs0iBd+RV69dPBbjV YwIBPImICEuJsLPWw6sHxEr4AQ0KPwGOwg9gxdkra8dydWSvCxxy+CWG19oJhnou+YiLA9wjrEfA zMIdXGPtRvv++OYagftbO4D+f5D/WJDvQCeGnrzCNjKgfgM65AiOIQoP6lkIpoCXxlwKcRoI/Jb1 cvDfsXAB8ZUwGMHGc3CyncI75nZJap/yI+YIGl3zy4buzO0R5CXnQ8SdUuuktsfq2++1+uk+q9vf a/U3mdXLM81O50dLinAW01R24ZM919zp8heuebrnmjsd/cI13xQim65YVnQlwsJnjvYI7ctLlpgA J40wq5ZmeJ4AUgfKWahSuzQVxSa848q+I5gLJGcg950Q8+efEv/Lh0TIJkJb0DYRmPbVrkBiQ0Uu 0Bakp74fpvfSjC8JdqxOOs8UMv9OJaBLvIoUKAVVYvbrDMAyklEuwAybX46xd7L+I4NL9p7kcHl8 0pYBM2tBAMdjJ9oDB/3BGO+2oB8/IDqEvjDaIGNo2VK2sboc3pLhsGArDGMPKJz7lC8m4+qSXzxi jOEf8LfrPQr418mWkjX18F6LmKQ3UIk5m4H/IVX4AZ7/7hzGIZc5lulZYrKxO6diRHle3JnhynKa KEnre/Zj35bCxCWrY66wY/B/D3Bk7sBnGbbB6UjJP3C6CD2ZrSuq6B+Z6ZLk9l+YxL5fbHZkGl7T 5ivnkrPrOEFgJpF9t12Fcv8T9XjSDfC/MSTl+f7VepzFp7ldH5jeggbGevno87S9Z/GalEkvrdxj zu0P0GRnFR9z2j9AE3lFn688k5r+WW1Kq944ve9T3ssU2DMwL1VAXuvLFNgzHi9VIBuC7mjCD+EB zwz9jTMjR+JGWxJSY+58xlvs0phP67LRrXTU5rfDiR64s59VAw3apQWHTn45Hk7ZYEYFya0tJMrM LRa9DyuCMC8ZzmbFpU43frw5MmcKEQqGBGFthPy8HIrjtmCQbj1Yb+16gdg7Aq1v4f+6pFsGE0GZ +KJit4RTmYTtSyS8kUmwd0ngwOMFsNwKEaf9BeSNEDHdX0DeBh7/SMDuTngfGBTjnkfGMzgo/lkD VgKU94bGZNTt6ONqkYKrn3bCbL0xYkdgpmAz0zbCY1/EM67Qk7+qFB2Q2B/ue/y7MFtkb3QlFhd+ MtU0VA/PXBnwZWfmGl/eUM/LLm7VEymcGRnbWb65vT9T0bznVjBpVrpxP/WYtaAvZixjKI0CUNKg GvpeYOMLRj3BThyXPGTCiTr5wqHyJcFKSrCVKGuEJomJFHk+NglnqdYQjQxkUmEWb6ukUhAUqa3q sGDupOUI9j9h40SSkpbNmyV/T5A16wq+bflEhCqoW6PRKO3bUb6ACphp3FPHciFBWdWwDWiEc/Xs O4tULFK8wl+7eHsxb4bkMzZ4mnKj4rsIQ+3h0Vl4L1HGp08u9Ft9rAySdx53QHiWexpySFoP8/kL hLw+QTWqWSnn5+TX2t6yipqIlyL7CyhoISRkFYkEJQkTmDKZFkuFMMdKqxVp+cPHo42X68lJ4Z6H HJ+IxvwrNELHJ/wZFv6VS3lYE204wA4v3TKn3x6wu8+tO/JX6P1rSV+cPbCKHOiZs/IXBLn7y6+F w6DZZK44IAtzhY2lCUcyfDVheuQVwyeJanOIZkn6XlZrF4TifokDAs1jNZ0yaha/xSp4pfSNhTrM lQtQA+QWfSL4RCvvydB2iPK/afxAGfzHjA8fmORRK/GA9Mq3uOXAYEXTJqOxMVKvccediE3lzeBL nOWrhyFrveyZFS8jW1G2xnumWXjDlL6n4l2QN4suG6OrA/GAQ+U5m5n4YJHvH7SRwLFmTpkNE9T/ EN1HcuXQsfHJx5Us6pg8lQo9it/HtyPFgGQ3GoLx4MnjcyxKv0H1TGmT9dJh5qQtOabTLFGlLAwL 65Iyzydvur5B6wLIVVgF/O/Qsjc2Qk6rvBCgDz+iEMgWbbhmzntcl40j82vcgSeQyQkA23I1EpeD F+8bnxxBf1BLXohFjxmWAN0tjV4JTyn4EXMFzn1ISgU4a+BQ8fFpM62CoDocGXVyoHevmPPHQabA ChvrmwH3QI/6M4/x99nkfsUfghqxenGX3cDrS/jGH9se49RxWJEchH1AQ7znhgIF97cYXIF1q83K 2HPScO00wZxR2/LxgBaq9nHg810afjAz7oyV8LFu+J60mgNyFOpavcClj7VJd4wMDYy27S5kjHW8 58+4JiYWb9rSg5JlIA/AVjKuVIBgTWyT1MVDjGjVmbsZaMDXOABYikdRyOgIJtdTJBbEEwOVFKvR W23xOPogTS3u4PEfdy7ZH7U0MS/Wo9yRtA9pEnAThvCwgCRBxHzYEmtsfFKBFmVu+Pe1tPh0zxQJ wERyVugPxCxut8xsmDTSGq49d81BNYIP1AseOaCikMWxE2+l8ZF0Nn71YgALzVp4EGdeHcJ+/rik +P4fD6GIJNzgYYA+CLpUE4YKJ+IOs9BI9QnP0cHWj/oHTDdFVYHmX1BLAwQUAAAACACgdBk9J8nE BA4MAAA+JQAADQAAAE1ha2VmaWxlLm9ianOtWklz27gSPj/9CtbEh2gmymixHTk1eTW0xNiqaOGI spN5FxYXSMSYJBiClOz8+tcNcJMEei7xQWwQHxrobqAX0G/e/JS/zhvtr5X7D/Gyzncmnj149F60 T9p3GmfvmfadZymNd0j51BNvQsrFcxsyRxAuY+F7dsLhN2DxD2cxAPDRC8kzScsGMCVOVLcTJ+XY UvAgacqwp/NzJEaR3ZB5T8UUlGse84mWc+Jr7ovmsiyASaNc4y88I5EGZOhklMWaE/uip0ejXafT ZPJJ8/KMhhzE8RwvIL2yJeCREwK2bLEEmUErYn4eEpCsyQkkjl0fesVLeDqU4S9Bboz7JCn5eCze 0t3R8Iu3k9Xy8+zONlfW7FsXmSWM0+ceMAF8lKC5VPj5bPnwzdZnKzEmpHEuxqDWJTomoAtfri91 Dignw9/v8rH3Kf5GPq7YCxnDVfoR7hqXeQGufZ+gBvb7bWMNTa7IaVhwHPZSsvVYLjegeOGFOWDT qs1jJ+EBU/OC3QQqJ8ICpTaffOLmu1N4pYGvs+Vo2C3E6x1oPBq2YmvtIlZouBU7eVjPBdTL07DW Z2Vs7eKt4/sJyEufpc1/fwfvjmXqdjudmNRHE2hghW8qqUGBOckJqj8g3hPPIyBxF54CYU4OvM85 QIefR8nxa4XMmdOGEbuoxPTELmpB1tpGZKltFfLWmlY4l/stKGs119czq0JyFjop5S1ovZYEdnnb Gq35bG0KHA9p2ibz49QQmL1PCkRl2qZloUPYtalxtOoWTvS+TZGf5EEXGGAusefntns6mQCK6Y7Y iwl/mg8NqYurs8GtRODOnI/axkl3JNNoDE6KwE+c4UHMNLY9c6XvtU1AkAmLdxoc6wiQ4HbBF2dM 43kCgnCu/QqH+FewkmDLE+LRLfWkt6YxOFpOgDdwOeX+TqPvyXvN0TgErpBofxmLBw2iD/hox4U2 +I089MU8DNYHswCTifnAhYePwIFTUNn7TkfKVh278liKdleeVmmaI6CwRrUTuorOoyB3BFBattXw 57whqvpw8IQfYDEcA0HlKccQqjn8Ja7iUBlXVbPX55Px6niqgLVbAGDpCc9WlXm7XgrenEa4nIDx rAyQZ1CafgcIZWgZJOIkz9rm3swWxlpGOWTdJsxC//ZhNOgLYOQ8I90m9mL84UoCDxGSLbjN1/nN cDiSyOwQikYb1poM+/0rCeUe0i3I+WI8GkplhhGQz20cF+agZBglg1Z+1saYC7doz5bmw0a6soyE wjXar2nWsqb9UX8kR3Af6deQwwZy2IbUp9aH8eW1QDo+R7rdXoPB4FtpL6DbNDG1BqPRWAB9jqRq Qw1xx/PIzXn5tAlJUhYpwLLjZvT8rOjkHqc9n3KR4/hqBgKzIzFJqZgWm2LmM2TOXYzQ3O0FeUld vL1fWRv7wbrtln3UL6iIl9TB8ZRzYx8k0dQJC6BIEwR1toSGAWeF8Wg7wi6CMIB6IgYrcQXGVyzN xYW4WQ+PvqT2gUclFQ49zCiQ5H5BVJ21/G6m5IvQnsdTVWe+3ZKU+PaWCjcY0V3qlLl3Sfcyr8qo ZV6kMpZMuAMHnSh39mSP2dUbmSGfYiMeMSgmAJDwoYqXCBni0YPdlpA0o0Q1qQw2jVV3lHq/Xc91 UxrRdfKozVlWjroWHUPikS7yGP1348UWjdlxch/qhzIKihYm1qykDs6+JCP6TLBYbIxpbJB5sUPC Aq5CrSyriCf8FdRktTb0h2lRsHgM4l47WJ9buvQ7IXdewU2t1cNyWrgTqD78V7CfFyuJ3EIZ9wrO KI4F4a+hTLm+5LXVQUz+qj/KbBNCMij9VZlRORAiwfdLzy8wdpLZoqxvHwLTnIyByc4GiQ0KS4Cj m+UpUaZAdUIqxomEtMEBs9HTQU/kJYK6rtXDVBsIz6Ef2j8YekLt2ZYDW8ZBDWYZVlmFceVh24vE yPGQsz/y2zA9EkP+CWll7wckwFjQNt8F5DkTvub1oRndBSpvRtm+RYLH5cTezKUIyCoTpS1STp4F vT2wTl+StnCOoy3dmlfDxSDu8LBNYavJSi9OlsecFtRstbmHUyj3t/CQWYD5p0KymGV0+wJLJrDU zBZNepqw1Z62zOY6ovKq71iKspZu8SexqYflqqBkMoMkyzOZ2DTH1kWcBgnAVjgqLgK0bJUVMWSq NTOk27hhH8/dtIAVC9ZyGcAYy/CZbbO2LVkXl81zIiYR56QxnajaNHCr4N5hlVCh+Cndk7SsX5T8 vxlLwR2G2cUwPCfQgrBT3Rz928i6hIDW1i05yBQIyRiznJ9bVELoTDsd/C3t3mygJ433xQUk1oww /XH3K7XGMVB9Y/dzhQkOnU5wqASpSDyH6GlC5vhipx/1UMgIMJhKoldZ4Qi1PdjeFi/YEpErwa9d ZFdAkgZtuyn1d6TsyBN591q2I6jZbCifE6idT+cQAJ8d4nLIUe/BybzAZ7uT13Q8HPcHroPHcTgY XF3W/bXrsHR7sSiiN+WOHUUikJ3ijMlERk/PU/Qu9SJaxw5u77N+8/Nct+7tyedZfyDj6zZ0eAB6 o/3B6/jhKR4zubMBi8vx5upGZlWX4+zqRiWCVcrAlUIYC3PzN/iDlQy5YIjsxeahuNk8A1vGeqYX QbDI9M+l0Nf6fG7Mu82bUJUNxsOry25hMaWVzIllfpFsPJ48KRFfbqcF4slV2QBqGfvhfiLzU8zj c5Hbn+E+T6WWtr5KSfqkyHAdL6EiTifUTih9Vi1bNxdySZFdln1OEimA04UMcn7kiIOvmeZEA/9I PcLPwCvTWJozuUhI2uOEqhZqrg0TtCIXC149scXxBN4Lx9M4VBDEb51ioU+KIxE5nvI8TB6mRVzO fUcl+vS2KLBdRS/wt5ePa31RzmHH+9RRaQaR09tSP4j0XamlN9oq9L+yNPQ1kx1ICmKdjb43dMgM Vl/tUl8BAU+dsoOtVtrdWp98mRuV3qD68J5CUqluSQ7/MuPDErLWcjhUMXEx9szixqSC+cSrZhCM wfjGVb8P4dtJ/XPrwObA7tq6iUewLXkgk8ms8omnNpYO04fs+3rU7xOs/TtHfehqS5dc3H0JOmXC EzShEZdVGm/MC6X+gaVPEMsaS5epFxn2+/0TFuKeY3D2OvHkl4Vzv7OY3Awmg4F0ozzybgYetBQa nuvLm8FA3smEToy0ynMbuCgMA916jT0IBFKi2dQ4d1dTQ1R90mP55Hcs+lRuDXB/TY3HCifrbSWu NCXC1BsGUeUqESWXqOQ1K+prwYyKi1ClDIvpdXENJqSI/GtxE6bC1g4BoaVTAAVZE2sG6n2BVKlp v5DTq5E3vrlSLdKwzCIOJaebD4421C5hQlJxR/bCpdcEYYuboyZYXFxAziq/yWqPd/rZVPCu0u1+ 5/TUukVUqVtEqXVboCBdaAJ7kcptPS6+6msDh0hsdAB/a8MQ1Z5eTy77xRVu6iGp8hfmeHQzknb1 E6RVZp1ag+Hw6u/yHhLoF5VPnZnW0tgUdzAJL44aGBOvGjriwqHKFOtWfQZvB3LbcHeAG0YBMazB 6EO/sDKSapg+uflQRNObDy2Q6Xx2W95vJJiq4ncFVw2+e5CV6U7sGvjF70KBuIYsGngtlKoHT6zL 4WhQRDWOtLBWMV05/UfxEQdSs7l+ZyG0N719mM2n9t+w2/uf+uceq7rKgWKqVm33fB/UX1qKfPsm 6RXfihtvQuaJbOunlgdQSWF4W22Mj1oWEA3aDgeFuSGUd/I7F9dYHL6AhyQ+ZA5blmpibTsa7zod yUJsmIJs3HmZ97o9Lb6JOmESOHh3DRKcIdeLGpdGLagJfkcoYV4KXWrcvWnW0wZJ0jbrbDS+rnAU Gm04/fqyxjnXly24xfX4S4WLrsdPbbjZZL26nev/M2o09VLmhs4P0jrGtBropE12yBAqGGQHLShr dNOvYBwabbj7WnAetMltQbpfz8oh3y/n7exPz81vny7e3pnr1eei3W3BWNP5KaLxnyv8vU+2nfpz n7qz+Gio6OycvvkIR9QCIUzIGru/H/UGz53/XLyFkxdq33NKMvwnlgiKvXc8OBoUPGeMhVov0P7Q Lv7Q/qtd/PnuF027M5Ya/ofFRl/fGRvQ0rp78ecvINT/AVBLAQIUABQAAAAIAFWJGT3T/ahh2Q0A ADMoAAAIAAAAAAAAAAEAICAAAAAAAABwY19xMzUuY1BLAQIUABQAAAAIAHiFCj1XxErmqA0AAHE1 AAANAAAAAAAAAAEAICAAAP8NAABzY19saW5rX3BjaS5jUEsBAhQAFAAAAAgA0n0ZPb+kle3uAwAA dQ8AAAkAAAAAAAAAAQAgIAAA0hsAAHBjaV9pZHMuaFBLAQIUABQAAAAIAAiJGT27bAwoUAIAACwE AAAUAAAAAAAAAAEAICAAAOcfAABwY2llX21zaXhfdGVtcGxhdGUuaFBLAQIUABQAAAAIAAiJGT23 Vt/UwQwAAAEzAAAUAAAAAAAAAAEAICAAAGkiAABwY2llX21zaXhfdGVtcGxhdGUuY1BLAQIUABQA AAAIAKB0GT0nycQEDgwAAD4lAAANAAAAAAAAAAEAICAAAFwvAABNYWtlZmlsZS5vYmpzUEsFBgAA AAAGAAYAZwEAAJU7AAAAAA== -------------54b14120bc72690a9f3015af90802d06--