From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: multipart/mixed; boundary="===============1681841673720624543==" MIME-Version: 1.0 From: John Meneghini Subject: Re: [SPDK] SPDK Dependencies Date: Tue, 02 May 2017 22:23:16 -0400 Message-ID: In-Reply-To: 2F9AC1E5-5616-4252-A9EE-EDF481F00F49@netapp.com List-ID: To: spdk@lists.01.org --===============1681841673720624543== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable All of the changes that we are proposing to abstract DPDK and POSIX are rol= led up in pull request #152 Master Pull request for DPDK and Posix abstraction changes. I don=E2=80=99t expect these changes to go in all at once. Instead, I will= be cherry picking two or three patches at a time from this branch and subm= itting separate, smaller, pull requests for each testable set of changes. I encourage everyone to please review these changes and add your comments. = If you are interested in taking a whole copy into your private repo to test= and experiment with, I encourage you to clone my Github fork at https://gi= thub.com/johnmeneghini/spdk.git = and checkout the spdk_eal10 branch. (Note: you can ignore all of the othe= r branches in this repo. I need to clean it up). Also note that very litt= le testing has been done with this branch yet. I am still trying to replic= ate the Intel CIT environment in my test lab so only the simplest of testin= g has been done with this branch. A few of these patches seem pretty invasive because they touch many files. = For example: system: Remove userspace header file dependencies . However, only the following files and libraries have been converted. = This is the complete list of applications and libraries that have been con= verted to abstract all DPDK and POSIX dependencies. [libspdk_nvmf_tgt_app.a] spdk/app/nvmf_tgt/conf.c spdk/app/nvmf_tgt/nvmf_tgt.c [libspdk_bdev.a] spdk/lib/bdev/bdev.c [libspdk_conf.a] spdk/lib/conf/conf.c = [libspdk_copy.a] spdk/lib/copy/copy_engine.c = [libspdk_event.a] spdk/lib/event/app.c spdk/lib/event/app_config.c spdk/lib/event/reactor.c spdk/lib/event/subsystem.c [libspdk_json.a] spdk/lib/json/json_parse.c spdk/lib/json/json_util.c spdk/lib/json/json_write.c = [libspdk_log.a] spdk/lib/log/log.c [libspdk_nvme.a] spdk/lib/nvme/nvme.c spdk/lib/nvme/nvme_ctrlr.c spdk/lib/nvme/nvme_ctrlr_cmd.c spdk/lib/nvme/nvme_ns.c spdk/lib/nvme/nvme_ns_cmd.c spdk/lib/nvme/nvme_pcie.c spdk/lib/nvme/nvme_qpair.c spdk/lib/nvme/nvme_quirks.c spdk/lib/nvme/nvme_rdma.c spdk/lib/nvme/nvme_transport.c spdk/lib/nvme/nvme_uevent.c = [libspdk_nvmf.a] spdk/lib/nvmf/direct.c spdk/lib/nvmf/discovery.c spdk/lib/nvmf/nvmf.c spdk/lib/nvmf/rdma.c spdk/lib/nvmf/request.c spdk/lib/nvmf/session.c spdk/lib/nvmf/subsystem.c spdk/lib/nvmf/transport.c spdk/lib/nvmf/virtual.c [libspdk_trace.a] spdk/lib/trace/trace.c [libspdk_util.a] spdk/lib/util/bit_array.c spdk/lib/util/fd.c spdk/lib/util/io_channel.c spdk/lib/util/string.c John Meneghini john.a.meneghini(a)gmail.com > On Apr 29, 2017, at 7:38 AM, Rodriguez, Edwin = wrote: > = > Usage of printf/fprintf ought to be replaced with SPDK logging calls so u= sers of the library can control the UI. Then there are posix calls in the = library to abort/exit, for which the library should be reworked to eliminat= e. Nobody=E2=80=99s keen on a library that aborts the app when parameter v= alidation fails ( I=E2=80=99d also like to see some way to avoid setting s= ignal handlers in the library, or at least block it out with an ifdef secti= on so that users can manage signals on their own. > = > The remaining posix calls are to malloc/free/strdup/calloc, etc which are= harder to manage in non-posix environments. Kernel allocators take multip= le parameters besides the size - they track what system is using memory and= flags to manage various attributes like memory region (dma, pci, etc), sho= uld the call block, etc. Even if you get it to compile, then linking calle= rs of single argument malloc with a kernel malloc that expects 3 arguments = is going to have unpleasant results. So, I=E2=80=99d prefer an spdk env ab= straction for the allocation calls to allow implementers of new environment= s to better manage memory. > = > I like the idea of an =E2=80=9Cspdk/stdinc.h=E2=80=9D that collects all t= he std system headers in one place. You could even make checking for it pa= rt of the format checks so that all library sources include it first. Or b= etter yet as you point out, use =E2=80=98-include=E2=80=99 to include it in= all sources and have a makefile option that will allow users to replace it= with their own version. > = > Ed R > = > On 4/26/17, 6:09 PM, "SPDK on behalf of Walker, Benjamin" wrote: > = > At the summit we did end up discussing this quite a bit. For DPDK it's= fairly > clear that we're going to continue to abstract away all of those depen= dencies > inside of the env library. There are pull requests out to finish this = up now and > we'll get those merged relatively quickly. We're also working with the= DPDK team > to improve DPDK so that there are hopefully fewer reasons to forego us= ing it. > = > As far as POSIX, I have a proposal. Assuming POSIX is available makes = it > significantly easier to work on SPDK itself, so I'm very hesitant to m= ove all > POSIX calls inside of the env library and force people to use wrapper = functions. > I'm concerned that it raises the barrier to contribute too much (can I= call > malloc? what about printf?). Further, the vast majority of SPDK users = actually > do have POSIX available to them. That said, there are probably parts t= hat we can > abstract out and some other refactoring we can do here. > = > First, I think pthreads can be refactored into the env library. Lockin= g and > spawning threads is rare enough in SPDK that it isn't an undue burden = to use > wrappers, and it also requires some care regarding CPU affinity. So th= e below > discussion excludes that. > = > Second, I think we can get away with moving all of our POSIX headers t= o a single > SPDK header file at spdk/stdinc.h. We can then include that file every= where > either directly or by using a -include option in the Makefile. This wi= ll even > play nicely with precompiling spdk/stdinc.h (thanks Daniel for the sug= gestion), > although SPDK's build times are not a concern right now. > = > Third, for the small subset of SPDK users that really don't have POSIX > available, they can carry a patch on top of SPDK that simply replaces > spdk/stdinc.h with their own implementation. Most environments have at= least > some part of the POSIX standard, and 90% of what we're using is just t= he C > standard library, so in reality this header shouldn't be too difficult= to > replace. > = > Thoughts? Opinions? > = > Thanks, > Ben > = > = > On Mon, 2017-04-17 at 18:55 +0000, Walker, Benjamin wrote: >> Hi all, >> = >> There has been a lot of activity lately dealing with abstracting SPDK's >> dependencies to allow porting SPDK to additional platforms and framework= s. I >> think we'll end up talking about this extensively at the summit this wee= k. The >> ability to use SPDK in a variety of environments is very important to us= , so I >> look forward to the discussions. I wanted to write a basic summary of the >> current state of SPDK's dependencies for everyone to have, and so that t= hose >> who are unable to attend the summit can provide feedback. I'll try to up= date >> this thread with the results of the discussions at the summit for everyo= ne's >> benefit. >> = >> We've already eliminated all SPDK dependencies except for two: >> = >> 1) POSIX >> 2) DPDK >> = >> SPDK already has a mechanism for abstracting away the "environment" it is >> running in. We do this by moving all calls to dependencies to the "env" >> library, whose interface is defined by include/spdk/env.h. The build sys= tem >> allows users to point to an alternate implementation of the env library = if >> required. SPDK's default implementation of env is based on DPDK and runs= in >> Linux and FreeBSD user space. >> = >> DPDK is a very large toolkit, of course, but until just recently SPDK on= ly >> used DPDK's 'eal' module (environment abstraction library). The original= goal >> of the SPDK env library was just to abstract all uses of DPDK's eal, but= not >> all uses of POSIX APIs. We made some progress in this area, but there ar= e a >> number of remaining calls as of this writing. Fortunately, the wider com= munity >> has really come through. There are at least two pull requests out from t= wo >> independent users that mostly finish the job. We'll work through those p= ull >> requests and try to get them merged shortly. The only part of the code t= hat >> will continue to explicitly depend on DPDK will be the newly released vh= ost- >> scsi target because that relies on DPDK vhost infrastructure. This >> infrastructure is outside of DPDK's eal and is quite extensive. We feel = this >> is acceptable because building vhost in SPDK is optional - you can just = turn >> it off to eliminate the dependency. >> = >> There are a number of legitimate reasons to want to remove the DPDK depe= ndency >> from SPDK. For instance, DPDK dictates a particular memory management mo= del, >> requires a specific threading model, and performs PCI device management = that >> may conflict with other libraries. However, DPDK provides tremendous val= ue to >> SPDK in a number of areas, especially by implementing memory allocation >> suitable for DMA in user space. Memory management is a major challenge w= ith >> all sorts of hidden traps and challenges, so we see significant value in= using >> a production-tested library here. Re-implement the env without DPDK at y= our >> own risk! >> = >> Abstracting away our POSIX dependency is a similar but larger challenge.= While >> we foresaw the need for people to replace DPDK, we didn't see any use ca= se for >> dropping POSIX. We were definitely wrong though - people are using SPDK = in all >> sorts of environments that we didn't predict, from embedded firmware to >> operating system kernels and beyond. So we'll need to address this as ti= me >> goes on. I think this will result in further expansion of the 'env' libr= ary. >> Fortunately, we don't require too much from POSIX - mostly pthreads, the= C >> standard library, and maybe a couple of other miscellaneous headers. >> = >> There are other less obvious dependencies in SPDK. For instance, it also >> depends on a relatively recent version of gcc or clang. This is mostly a >> practical concern and not so much by intention. Our continuous integrati= on >> system (which I'll talk about at the summit - exciting developments here) >> currently consists of 4 machines, 3 of which are running Fedora Linux 25= while >> the other is running FreeBSD 11.0. These are very much up to date system= s, so >> we tend not to catch bugs on older systems today. We also use cutting ed= ge C >> features and tools, so we'll probably over time need to select a particu= lar >> minimum version of the C standard that we're going to develop to. >> = >> I'm also concerned with the scope of the env library and I'd like to wor= k as >> hard as possible to limit the size of the API. This is for two reasons -= first >> and foremost to minimize the number of calls to these wrapper functions = so >> that it doesn't impact performance. Performance really is everything and= we >> can't sacrifice that. This isn't shaping up to be much of a problem so f= ar >> because very few calls to our dependencies happen within the I/O path. >> Secondarily, I'd like to make it as straightforward as possible for user= s to >> re-implement the env. The best way to make it easy to do that is to keep= the >> API small. >> = >> I look forward to the discussions at the summit this week. We'd love to = hear >> about all of the different environments, platforms, and frameworks where= SPDK >> is being used and how we can make it easier to integrate SPDK wherever i= t is >> valuable. >> = >> Thanks, >> Ben >> = >> = >> _______________________________________________ >> SPDK mailing list >> SPDK(a)lists.01.org >> https://lists.01.org/mailman/listinfo/spdk > = > = > _______________________________________________ > SPDK mailing list > SPDK(a)lists.01.org > https://lists.01.org/mailman/listinfo/spdk --===============1681841673720624543== Content-Type: text/html MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.html" PGh0bWw+PGhlYWQ+PG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0 L2h0bWwgY2hhcnNldD11dGYtOCI+PC9oZWFkPjxib2R5IHN0eWxlPSJ3b3JkLXdyYXA6IGJyZWFr LXdvcmQ7IC13ZWJraXQtbmJzcC1tb2RlOiBzcGFjZTsgLXdlYmtpdC1saW5lLWJyZWFrOiBhZnRl ci13aGl0ZS1zcGFjZTsiIGNsYXNzPSIiPkFsbCBvZiB0aGUgY2hhbmdlcyB0aGF0IHdlIGFyZSBw cm9wb3NpbmcgdG8gYWJzdHJhY3QgRFBESyBhbmQgUE9TSVggYXJlIHJvbGxlZCB1cCBpbiBwdWxs IHJlcXVlc3QgIzE1MjxkaXYgY2xhc3M9IiI+PGJyIGNsYXNzPSIiPjwvZGl2PjxkaXYgY2xhc3M9 IiI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3NwZGsvc3Bkay9wdWxsLzE1MiIgY2xhc3M9 IiI+TWFzdGVyIFB1bGwgcmVxdWVzdCBmb3IgRFBESyBhbmQgUG9zaXggYWJzdHJhY3Rpb24gY2hh bmdlcy48L2E+PC9kaXY+PGRpdiBjbGFzcz0iIj48YnIgY2xhc3M9IiI+PC9kaXY+PGRpdiBjbGFz cz0iIj5JIGRvbuKAmXQgZXhwZWN0IHRoZXNlIGNoYW5nZXMgdG8gZ28gaW4gYWxsIGF0IG9uY2Uu ICZuYnNwO0luc3RlYWQsIEkgd2lsbCBiZSBjaGVycnkgcGlja2luZyB0d28gb3IgdGhyZWUgcGF0 Y2hlcyBhdCBhIHRpbWUgZnJvbSB0aGlzIGJyYW5jaCBhbmQgc3VibWl0dGluZyBzZXBhcmF0ZSwg c21hbGxlciwgcHVsbCByZXF1ZXN0cyBmb3IgZWFjaCB0ZXN0YWJsZSBzZXQgb2YgY2hhbmdlcy48 L2Rpdj48ZGl2IGNsYXNzPSIiPjxiciBjbGFzcz0iIj48L2Rpdj48ZGl2IGNsYXNzPSIiPkkgZW5j b3VyYWdlIGV2ZXJ5b25lIHRvIHBsZWFzZSByZXZpZXcgdGhlc2UgY2hhbmdlcyBhbmQgYWRkIHlv dXIgY29tbWVudHMuIElmIHlvdSBhcmUgaW50ZXJlc3RlZCBpbiB0YWtpbmcgYSB3aG9sZSBjb3B5 IGludG8geW91ciBwcml2YXRlIHJlcG8gdG8gdGVzdCBhbmQgZXhwZXJpbWVudCB3aXRoLCBJIGVu Y291cmFnZSB5b3UgdG8gY2xvbmUgbXkgR2l0aHViIGZvcmsgYXQmbmJzcDs8YSBocmVmPSJodHRw czovL2dpdGh1Yi5jb20vam9obm1lbmVnaGluaS9zcGRrLmdpdCIgY2xhc3M9IiI+aHR0cHM6Ly9n aXRodWIuY29tL2pvaG5tZW5lZ2hpbmkvc3Bkay5naXQ8L2E+Jm5ic3A7YW5kJm5ic3A7Y2hlY2tv dXQgdGhlIHNwZGtfZWFsMTAgYnJhbmNoLiAmbmJzcDsoTm90ZTogeW91IGNhbiBpZ25vcmUgYWxs IG9mIHRoZSBvdGhlciBicmFuY2hlcyBpbiB0aGlzIHJlcG8uICZuYnNwO0kgbmVlZCB0byBjbGVh biBpdCB1cCkuICZuYnNwO0Fsc28gbm90ZSB0aGF0IHZlcnkgbGl0dGxlIHRlc3RpbmcgaGFzIGJl ZW4gZG9uZSB3aXRoIHRoaXMgYnJhbmNoIHlldC4gJm5ic3A7SSBhbSBzdGlsbCB0cnlpbmcgdG8g cmVwbGljYXRlIHRoZSBJbnRlbCBDSVQgZW52aXJvbm1lbnQgaW4gbXkgdGVzdCBsYWIgc28gb25s eSB0aGUgc2ltcGxlc3Qgb2YgdGVzdGluZyBoYXMgYmVlbiBkb25lIHdpdGggdGhpcyBicmFuY2gu PC9kaXY+PGRpdiBjbGFzcz0iIj48YnIgY2xhc3M9IiI+PC9kaXY+PGRpdiBjbGFzcz0iIj5BIGZl dyBvZiB0aGVzZSBwYXRjaGVzIHNlZW0gcHJldHR5IGludmFzaXZlIGJlY2F1c2UgdGhleSB0b3Vj aCBtYW55IGZpbGVzLiAmbmJzcDtGb3IgZXhhbXBsZTogJm5ic3A7PGEgaHJlZj0iaHR0cHM6Ly9n aXRodWIuY29tL3NwZGsvc3Bkay9wdWxsLzE1Mi9jb21taXRzL2U1ZmMwYmZlNTNiYTYxODQyNWUz Y2ZlODlhYmQzNjg5YTJmYmRjOWIiIGNsYXNzPSIiPnN5c3RlbTogUmVtb3ZlIHVzZXJzcGFjZSBo ZWFkZXIgZmlsZSBkZXBlbmRlbmNpZXM8L2E+LiAmbmJzcDtIb3dldmVyLCBvbmx5IHRoZSBmb2xs b3dpbmcgZmlsZXMgYW5kIGxpYnJhcmllcyBoYXZlIGJlZW4gY29udmVydGVkLiAmbmJzcDtUaGlz IGlzIHRoZSBjb21wbGV0ZSBsaXN0IG9mIGFwcGxpY2F0aW9ucyBhbmQgbGlicmFyaWVzIHRoYXQg aGF2ZSBiZWVuIGNvbnZlcnRlZCB0byBhYnN0cmFjdCBhbGwgRFBESyBhbmQgUE9TSVggZGVwZW5k ZW5jaWVzLjwvZGl2PjxkaXYgY2xhc3M9IiI+PGRpdiBzdHlsZT0ibWFyZ2luOiAwaW4gMGluIDAu MDAwMXB0OyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiBDYWxpYnJpOyIgY2xhc3M9IiI+ PGJyIGNsYXNzPSIiPjwvZGl2PjxkaXYgc3R5bGU9Im1hcmdpbjogMGluIDBpbiAwLjAwMDFwdDsg Zm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogQ2FsaWJyaTsiIGNsYXNzPSIiPjxzcGFuIHN0 eWxlPSJmb250LXNpemU6IDExcHQ7IiBjbGFzcz0iIj5bbGlic3Bka19udm1mX3RndF9hcHAuYV08 bzpwIGNsYXNzPSIiPjwvbzpwPjwvc3Bhbj48L2Rpdj48ZGl2IHN0eWxlPSJtYXJnaW46IDBpbiAw aW4gMC4wMDAxcHQ7IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6IENhbGlicmk7IiBjbGFz cz0iIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMXB0OyIgY2xhc3M9IiI+c3Bkay9hcHAvbnZt Zl90Z3QvY29uZi5jPC9zcGFuPjwvZGl2PjxkaXYgc3R5bGU9Im1hcmdpbjogMGluIDBpbiAwLjAw MDFwdDsgZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogQ2FsaWJyaTsiIGNsYXNzPSIiPjxz cGFuIHN0eWxlPSJmb250LXNpemU6IDExcHQ7IiBjbGFzcz0iIj5zcGRrL2FwcC9udm1mX3RndC9u dm1mX3RndC5jPG86cCBjbGFzcz0iIj48L286cD48L3NwYW4+PC9kaXY+PGRpdiBzdHlsZT0ibWFy Z2luOiAwaW4gMGluIDAuMDAwMXB0OyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiBDYWxp YnJpOyIgY2xhc3M9IiI+PGJyIGNsYXNzPSIiPjwvZGl2PjxkaXYgc3R5bGU9Im1hcmdpbjogMGlu IDBpbiAwLjAwMDFwdDsgZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogQ2FsaWJyaTsiIGNs YXNzPSIiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDExcHQ7IiBjbGFzcz0iIj5bbGlic3Bka19i ZGV2LmFdPG86cCBjbGFzcz0iIj48L286cD48L3NwYW4+PC9kaXY+PGRpdiBzdHlsZT0ibWFyZ2lu OiAwaW4gMGluIDAuMDAwMXB0OyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiBDYWxpYnJp OyIgY2xhc3M9IiI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTFwdDsiIGNsYXNzPSIiPnNwZGsv bGliL2JkZXYvYmRldi5jPC9zcGFuPjwvZGl2PjxkaXYgc3R5bGU9Im1hcmdpbjogMGluIDBpbiAw LjAwMDFwdDsgZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogQ2FsaWJyaTsiIGNsYXNzPSIi PjxiciBjbGFzcz0iIj48L2Rpdj48ZGl2IHN0eWxlPSJtYXJnaW46IDBpbiAwaW4gMC4wMDAxcHQ7 IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6IENhbGlicmk7IiBjbGFzcz0iIj48c3BhbiBz dHlsZT0iZm9udC1zaXplOiAxMXB0OyIgY2xhc3M9IiI+W2xpYnNwZGtfY29uZi5hXTxvOnAgY2xh c3M9IiI+PC9vOnA+PC9zcGFuPjwvZGl2PjxkaXYgc3R5bGU9Im1hcmdpbjogMGluIDBpbiAwLjAw MDFwdDsgZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogQ2FsaWJyaTsiIGNsYXNzPSIiPjxz cGFuIHN0eWxlPSJmb250LXNpemU6IDExcHQ7IiBjbGFzcz0iIj5zcGRrL2xpYi9jb25mL2NvbmYu Yzwvc3Bhbj48L2Rpdj48ZGl2IHN0eWxlPSJtYXJnaW46IDBpbiAwaW4gMC4wMDAxcHQ7IGZvbnQt c2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6IENhbGlicmk7IiBjbGFzcz0iIj48c3BhbiBzdHlsZT0i Zm9udC1zaXplOiAxMXB0OyIgY2xhc3M9IiI+Jm5ic3A7PC9zcGFuPjwvZGl2PjxkaXYgc3R5bGU9 Im1hcmdpbjogMGluIDBpbiAwLjAwMDFwdDsgZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTog Q2FsaWJyaTsiIGNsYXNzPSIiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDExcHQ7IiBjbGFzcz0i Ij5bbGlic3Bka19jb3B5LmFdPG86cCBjbGFzcz0iIj48L286cD48L3NwYW4+PC9kaXY+PGRpdiBz dHlsZT0ibWFyZ2luOiAwaW4gMGluIDAuMDAwMXB0OyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFt aWx5OiBDYWxpYnJpOyIgY2xhc3M9IiI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTFwdDsiIGNs YXNzPSIiPnNwZGsvbGliL2NvcHkvY29weV9lbmdpbmUuYzwvc3Bhbj48L2Rpdj48ZGl2IHN0eWxl PSJtYXJnaW46IDBpbiAwaW4gMC4wMDAxcHQ7IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6 IENhbGlicmk7IiBjbGFzcz0iIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMXB0OyIgY2xhc3M9 IiI+Jm5ic3A7PC9zcGFuPjwvZGl2PjxkaXYgc3R5bGU9Im1hcmdpbjogMGluIDBpbiAwLjAwMDFw dDsgZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogQ2FsaWJyaTsiIGNsYXNzPSIiPjxzcGFu IHN0eWxlPSJmb250LXNpemU6IDExcHQ7IiBjbGFzcz0iIj5bbGlic3Bka19ldmVudC5hXTxvOnAg Y2xhc3M9IiI+PC9vOnA+PC9zcGFuPjwvZGl2PjxkaXYgc3R5bGU9Im1hcmdpbjogMGluIDBpbiAw LjAwMDFwdDsgZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogQ2FsaWJyaTsiIGNsYXNzPSIi PjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDExcHQ7IiBjbGFzcz0iIj5zcGRrL2xpYi9ldmVudC9h cHAuYzwvc3Bhbj48L2Rpdj48ZGl2IHN0eWxlPSJtYXJnaW46IDBpbiAwaW4gMC4wMDAxcHQ7IGZv bnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6IENhbGlicmk7IiBjbGFzcz0iIj48c3BhbiBzdHls ZT0iZm9udC1zaXplOiAxMXB0OyIgY2xhc3M9IiI+c3Bkay9saWIvZXZlbnQvYXBwX2NvbmZpZy5j PC9zcGFuPjwvZGl2PjxkaXYgc3R5bGU9Im1hcmdpbjogMGluIDBpbiAwLjAwMDFwdDsgZm9udC1z aXplOiAxMnB0OyBmb250LWZhbWlseTogQ2FsaWJyaTsiIGNsYXNzPSIiPjxzcGFuIHN0eWxlPSJm b250LXNpemU6IDExcHQ7IiBjbGFzcz0iIj5zcGRrL2xpYi9ldmVudC9yZWFjdG9yLmM8bzpwIGNs YXNzPSIiPjwvbzpwPjwvc3Bhbj48L2Rpdj48ZGl2IHN0eWxlPSJtYXJnaW46IDBpbiAwaW4gMC4w MDAxcHQ7IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6IENhbGlicmk7IiBjbGFzcz0iIj48 c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMXB0OyIgY2xhc3M9IiI+c3Bkay9saWIvZXZlbnQvc3Vi c3lzdGVtLmM8bzpwIGNsYXNzPSIiPjwvbzpwPjwvc3Bhbj48L2Rpdj48ZGl2IHN0eWxlPSJtYXJn aW46IDBpbiAwaW4gMC4wMDAxcHQ7IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6IENhbGli cmk7IiBjbGFzcz0iIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMXB0OyIgY2xhc3M9IiI+PGJy IGNsYXNzPSIiPjwvc3Bhbj48L2Rpdj48ZGl2IHN0eWxlPSJtYXJnaW46IDBpbiAwaW4gMC4wMDAx cHQ7IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6IENhbGlicmk7IiBjbGFzcz0iIj48c3Bh biBzdHlsZT0iZm9udC1zaXplOiAxMXB0OyIgY2xhc3M9IiI+W2xpYnNwZGtfanNvbi5hXTwvc3Bh bj48L2Rpdj48ZGl2IHN0eWxlPSJtYXJnaW46IDBpbiAwaW4gMC4wMDAxcHQ7IGZvbnQtc2l6ZTog MTJwdDsgZm9udC1mYW1pbHk6IENhbGlicmk7IiBjbGFzcz0iIj48c3BhbiBzdHlsZT0iZm9udC1z aXplOiAxMXB0OyIgY2xhc3M9IiI+c3Bkay9saWIvanNvbi9qc29uX3BhcnNlLmM8L3NwYW4+PC9k aXY+PGRpdiBzdHlsZT0ibWFyZ2luOiAwaW4gMGluIDAuMDAwMXB0OyBmb250LXNpemU6IDEycHQ7 IGZvbnQtZmFtaWx5OiBDYWxpYnJpOyIgY2xhc3M9IiI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTog MTFwdDsiIGNsYXNzPSIiPnNwZGsvbGliL2pzb24vanNvbl91dGlsLmM8bzpwIGNsYXNzPSIiPjwv bzpwPjwvc3Bhbj48L2Rpdj48ZGl2IHN0eWxlPSJtYXJnaW46IDBpbiAwaW4gMC4wMDAxcHQ7IGZv bnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6IENhbGlicmk7IiBjbGFzcz0iIj48c3BhbiBzdHls ZT0iZm9udC1zaXplOiAxMXB0OyIgY2xhc3M9IiI+c3Bkay9saWIvanNvbi9qc29uX3dyaXRlLmM8 bzpwIGNsYXNzPSIiPjwvbzpwPjwvc3Bhbj48L2Rpdj48ZGl2IHN0eWxlPSJtYXJnaW46IDBpbiAw aW4gMC4wMDAxcHQ7IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6IENhbGlicmk7IiBjbGFz cz0iIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMXB0OyIgY2xhc3M9IiI+Jm5ic3A7PC9zcGFu PjwvZGl2PjxkaXYgc3R5bGU9Im1hcmdpbjogMGluIDBpbiAwLjAwMDFwdDsgZm9udC1zaXplOiAx MnB0OyBmb250LWZhbWlseTogQ2FsaWJyaTsiIGNsYXNzPSIiPjxzcGFuIHN0eWxlPSJmb250LXNp emU6IDExcHQ7IiBjbGFzcz0iIj5bbGlic3Bka19sb2cuYV08L3NwYW4+PC9kaXY+PGRpdiBzdHls ZT0ibWFyZ2luOiAwaW4gMGluIDAuMDAwMXB0OyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5 OiBDYWxpYnJpOyIgY2xhc3M9IiI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTFwdDsiIGNsYXNz PSIiPnNwZGsvbGliL2xvZy9sb2cuYzwvc3Bhbj48L2Rpdj48ZGl2IHN0eWxlPSJtYXJnaW46IDBp biAwaW4gMC4wMDAxcHQ7IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6IENhbGlicmk7IiBj bGFzcz0iIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMXB0OyIgY2xhc3M9IiI+PGJyIGNsYXNz PSIiPjwvc3Bhbj48L2Rpdj48ZGl2IHN0eWxlPSJtYXJnaW46IDBpbiAwaW4gMC4wMDAxcHQ7IGZv bnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6IENhbGlicmk7IiBjbGFzcz0iIj48c3BhbiBzdHls ZT0iZm9udC1zaXplOiAxMXB0OyIgY2xhc3M9IiI+W2xpYnNwZGtfbnZtZS5hXTwvc3Bhbj48L2Rp dj48ZGl2IHN0eWxlPSJtYXJnaW46IDBpbiAwaW4gMC4wMDAxcHQ7IGZvbnQtc2l6ZTogMTJwdDsg Zm9udC1mYW1pbHk6IENhbGlicmk7IiBjbGFzcz0iIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAx MXB0OyIgY2xhc3M9IiI+c3Bkay9saWIvbnZtZS9udm1lLmM8L3NwYW4+PC9kaXY+PGRpdiBzdHls ZT0ibWFyZ2luOiAwaW4gMGluIDAuMDAwMXB0OyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5 OiBDYWxpYnJpOyIgY2xhc3M9IiI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTFwdDsiIGNsYXNz PSIiPnNwZGsvbGliL252bWUvbnZtZV9jdHJsci5jPG86cCBjbGFzcz0iIj48L286cD48L3NwYW4+ PC9kaXY+PGRpdiBzdHlsZT0ibWFyZ2luOiAwaW4gMGluIDAuMDAwMXB0OyBmb250LXNpemU6IDEy cHQ7IGZvbnQtZmFtaWx5OiBDYWxpYnJpOyIgY2xhc3M9IiI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6 ZTogMTFwdDsiIGNsYXNzPSIiPnNwZGsvbGliL252bWUvbnZtZV9jdHJscl9jbWQuYzxvOnAgY2xh c3M9IiI+PC9vOnA+PC9zcGFuPjwvZGl2PjxkaXYgc3R5bGU9Im1hcmdpbjogMGluIDBpbiAwLjAw MDFwdDsgZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogQ2FsaWJyaTsiIGNsYXNzPSIiPjxz cGFuIHN0eWxlPSJmb250LXNpemU6IDExcHQ7IiBjbGFzcz0iIj5zcGRrL2xpYi9udm1lL252bWVf bnMuYzxvOnAgY2xhc3M9IiI+PC9vOnA+PC9zcGFuPjwvZGl2PjxkaXYgc3R5bGU9Im1hcmdpbjog MGluIDBpbiAwLjAwMDFwdDsgZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogQ2FsaWJyaTsi IGNsYXNzPSIiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDExcHQ7IiBjbGFzcz0iIj5zcGRrL2xp Yi9udm1lL252bWVfbnNfY21kLmM8bzpwIGNsYXNzPSIiPjwvbzpwPjwvc3Bhbj48L2Rpdj48ZGl2 IHN0eWxlPSJtYXJnaW46IDBpbiAwaW4gMC4wMDAxcHQ7IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1m YW1pbHk6IENhbGlicmk7IiBjbGFzcz0iIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMXB0OyIg Y2xhc3M9IiI+c3Bkay9saWIvbnZtZS9udm1lX3BjaWUuYzxvOnAgY2xhc3M9IiI+PC9vOnA+PC9z cGFuPjwvZGl2PjxkaXYgc3R5bGU9Im1hcmdpbjogMGluIDBpbiAwLjAwMDFwdDsgZm9udC1zaXpl OiAxMnB0OyBmb250LWZhbWlseTogQ2FsaWJyaTsiIGNsYXNzPSIiPjxzcGFuIHN0eWxlPSJmb250 LXNpemU6IDExcHQ7IiBjbGFzcz0iIj5zcGRrL2xpYi9udm1lL252bWVfcXBhaXIuYzxvOnAgY2xh c3M9IiI+PC9vOnA+PC9zcGFuPjwvZGl2PjxkaXYgc3R5bGU9Im1hcmdpbjogMGluIDBpbiAwLjAw MDFwdDsgZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogQ2FsaWJyaTsiIGNsYXNzPSIiPjxz cGFuIHN0eWxlPSJmb250LXNpemU6IDExcHQ7IiBjbGFzcz0iIj5zcGRrL2xpYi9udm1lL252bWVf cXVpcmtzLmM8bzpwIGNsYXNzPSIiPjwvbzpwPjwvc3Bhbj48L2Rpdj48ZGl2IHN0eWxlPSJtYXJn aW46IDBpbiAwaW4gMC4wMDAxcHQ7IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6IENhbGli cmk7IiBjbGFzcz0iIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMXB0OyIgY2xhc3M9IiI+c3Bk ay9saWIvbnZtZS9udm1lX3JkbWEuYzxvOnAgY2xhc3M9IiI+PC9vOnA+PC9zcGFuPjwvZGl2Pjxk aXYgc3R5bGU9Im1hcmdpbjogMGluIDBpbiAwLjAwMDFwdDsgZm9udC1zaXplOiAxMnB0OyBmb250 LWZhbWlseTogQ2FsaWJyaTsiIGNsYXNzPSIiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDExcHQ7 IiBjbGFzcz0iIj5zcGRrL2xpYi9udm1lL252bWVfdHJhbnNwb3J0LmM8bzpwIGNsYXNzPSIiPjwv bzpwPjwvc3Bhbj48L2Rpdj48ZGl2IHN0eWxlPSJtYXJnaW46IDBpbiAwaW4gMC4wMDAxcHQ7IGZv bnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6IENhbGlicmk7IiBjbGFzcz0iIj48c3BhbiBzdHls ZT0iZm9udC1zaXplOiAxMXB0OyIgY2xhc3M9IiI+c3Bkay9saWIvbnZtZS9udm1lX3VldmVudC5j PG86cCBjbGFzcz0iIj48L286cD48L3NwYW4+PC9kaXY+PGRpdiBzdHlsZT0ibWFyZ2luOiAwaW4g MGluIDAuMDAwMXB0OyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiBDYWxpYnJpOyIgY2xh c3M9IiI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTFwdDsiIGNsYXNzPSIiPiZuYnNwOzwvc3Bh bj48L2Rpdj48ZGl2IHN0eWxlPSJtYXJnaW46IDBpbiAwaW4gMC4wMDAxcHQ7IGZvbnQtc2l6ZTog MTJwdDsgZm9udC1mYW1pbHk6IENhbGlicmk7IiBjbGFzcz0iIj48c3BhbiBzdHlsZT0iZm9udC1z aXplOiAxMXB0OyIgY2xhc3M9IiI+W2xpYnNwZGtfbnZtZi5hXTwvc3Bhbj48L2Rpdj48ZGl2IHN0 eWxlPSJtYXJnaW46IDBpbiAwaW4gMC4wMDAxcHQ7IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1p bHk6IENhbGlicmk7IiBjbGFzcz0iIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMXB0OyIgY2xh c3M9IiI+c3Bkay9saWIvbnZtZi9kaXJlY3QuYzwvc3Bhbj48L2Rpdj48ZGl2IHN0eWxlPSJtYXJn aW46IDBpbiAwaW4gMC4wMDAxcHQ7IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6IENhbGli cmk7IiBjbGFzcz0iIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMXB0OyIgY2xhc3M9IiI+c3Bk ay9saWIvbnZtZi9kaXNjb3ZlcnkuYzxvOnAgY2xhc3M9IiI+PC9vOnA+PC9zcGFuPjwvZGl2Pjxk aXYgc3R5bGU9Im1hcmdpbjogMGluIDBpbiAwLjAwMDFwdDsgZm9udC1zaXplOiAxMnB0OyBmb250 LWZhbWlseTogQ2FsaWJyaTsiIGNsYXNzPSIiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDExcHQ7 IiBjbGFzcz0iIj5zcGRrL2xpYi9udm1mL252bWYuYzxvOnAgY2xhc3M9IiI+PC9vOnA+PC9zcGFu PjwvZGl2PjxkaXYgc3R5bGU9Im1hcmdpbjogMGluIDBpbiAwLjAwMDFwdDsgZm9udC1zaXplOiAx MnB0OyBmb250LWZhbWlseTogQ2FsaWJyaTsiIGNsYXNzPSIiPjxzcGFuIHN0eWxlPSJmb250LXNp emU6IDExcHQ7IiBjbGFzcz0iIj5zcGRrL2xpYi9udm1mL3JkbWEuYzxvOnAgY2xhc3M9IiI+PC9v OnA+PC9zcGFuPjwvZGl2PjxkaXYgc3R5bGU9Im1hcmdpbjogMGluIDBpbiAwLjAwMDFwdDsgZm9u dC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogQ2FsaWJyaTsiIGNsYXNzPSIiPjxzcGFuIHN0eWxl PSJmb250LXNpemU6IDExcHQ7IiBjbGFzcz0iIj5zcGRrL2xpYi9udm1mL3JlcXVlc3QuYzxvOnAg Y2xhc3M9IiI+PC9vOnA+PC9zcGFuPjwvZGl2PjxkaXYgc3R5bGU9Im1hcmdpbjogMGluIDBpbiAw LjAwMDFwdDsgZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogQ2FsaWJyaTsiIGNsYXNzPSIi PjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDExcHQ7IiBjbGFzcz0iIj5zcGRrL2xpYi9udm1mL3Nl c3Npb24uYzxvOnAgY2xhc3M9IiI+PC9vOnA+PC9zcGFuPjwvZGl2PjxkaXYgc3R5bGU9Im1hcmdp bjogMGluIDBpbiAwLjAwMDFwdDsgZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogQ2FsaWJy aTsiIGNsYXNzPSIiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDExcHQ7IiBjbGFzcz0iIj5zcGRr L2xpYi9udm1mL3N1YnN5c3RlbS5jPG86cCBjbGFzcz0iIj48L286cD48L3NwYW4+PC9kaXY+PGRp diBzdHlsZT0ibWFyZ2luOiAwaW4gMGluIDAuMDAwMXB0OyBmb250LXNpemU6IDEycHQ7IGZvbnQt ZmFtaWx5OiBDYWxpYnJpOyIgY2xhc3M9IiI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTFwdDsi IGNsYXNzPSIiPnNwZGsvbGliL252bWYvdHJhbnNwb3J0LmM8bzpwIGNsYXNzPSIiPjwvbzpwPjwv c3Bhbj48L2Rpdj48ZGl2IHN0eWxlPSJtYXJnaW46IDBpbiAwaW4gMC4wMDAxcHQ7IGZvbnQtc2l6 ZTogMTJwdDsgZm9udC1mYW1pbHk6IENhbGlicmk7IiBjbGFzcz0iIj48c3BhbiBzdHlsZT0iZm9u dC1zaXplOiAxMXB0OyIgY2xhc3M9IiI+c3Bkay9saWIvbnZtZi92aXJ0dWFsLmM8bzpwIGNsYXNz PSIiPjwvbzpwPjwvc3Bhbj48L2Rpdj48ZGl2IHN0eWxlPSJtYXJnaW46IDBpbiAwaW4gMC4wMDAx cHQ7IGZvbnQtc2l6ZTogMTJwdDsgZm9udC1mYW1pbHk6IENhbGlicmk7IiBjbGFzcz0iIj48c3Bh biBzdHlsZT0iZm9udC1zaXplOiAxMXB0OyIgY2xhc3M9IiI+PGJyIGNsYXNzPSIiPjwvc3Bhbj48 L2Rpdj48ZGl2IHN0eWxlPSJtYXJnaW46IDBpbiAwaW4gMC4wMDAxcHQ7IGZvbnQtc2l6ZTogMTJw dDsgZm9udC1mYW1pbHk6IENhbGlicmk7IiBjbGFzcz0iIj48c3BhbiBzdHlsZT0iZm9udC1zaXpl OiAxMXB0OyIgY2xhc3M9IiI+W2xpYnNwZGtfdHJhY2UuYV08L3NwYW4+PC9kaXY+PGRpdiBzdHls ZT0ibWFyZ2luOiAwaW4gMGluIDAuMDAwMXB0OyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5 OiBDYWxpYnJpOyIgY2xhc3M9IiI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTFwdDsiIGNsYXNz PSIiPnNwZGsvbGliL3RyYWNlL3RyYWNlLmM8L3NwYW4+PC9kaXY+PGRpdiBzdHlsZT0ibWFyZ2lu OiAwaW4gMGluIDAuMDAwMXB0OyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiBDYWxpYnJp OyIgY2xhc3M9IiI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTFwdDsiIGNsYXNzPSIiPjxiciBj bGFzcz0iIj48L3NwYW4+PC9kaXY+PGRpdiBzdHlsZT0ibWFyZ2luOiAwaW4gMGluIDAuMDAwMXB0 OyBmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiBDYWxpYnJpOyIgY2xhc3M9IiI+PHNwYW4g c3R5bGU9ImZvbnQtc2l6ZTogMTFwdDsiIGNsYXNzPSIiPltsaWJzcGRrX3V0aWwuYV08L3NwYW4+ PC9kaXY+PGRpdiBzdHlsZT0ibWFyZ2luOiAwaW4gMGluIDAuMDAwMXB0OyBmb250LXNpemU6IDEy cHQ7IGZvbnQtZmFtaWx5OiBDYWxpYnJpOyIgY2xhc3M9IiI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6 ZTogMTFwdDsiIGNsYXNzPSIiPnNwZGsvbGliL3V0aWwvYml0X2FycmF5LmM8L3NwYW4+PC9kaXY+ PGRpdiBzdHlsZT0ibWFyZ2luOiAwaW4gMGluIDAuMDAwMXB0OyBmb250LXNpemU6IDEycHQ7IGZv bnQtZmFtaWx5OiBDYWxpYnJpOyIgY2xhc3M9IiI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTFw dDsiIGNsYXNzPSIiPnNwZGsvbGliL3V0aWwvZmQuYzxvOnAgY2xhc3M9IiI+PC9vOnA+PC9zcGFu PjwvZGl2PjxkaXYgc3R5bGU9Im1hcmdpbjogMGluIDBpbiAwLjAwMDFwdDsgZm9udC1zaXplOiAx MnB0OyBmb250LWZhbWlseTogQ2FsaWJyaTsiIGNsYXNzPSIiPjxzcGFuIHN0eWxlPSJmb250LXNp emU6IDExcHQ7IiBjbGFzcz0iIj5zcGRrL2xpYi91dGlsL2lvX2NoYW5uZWwuYzxvOnAgY2xhc3M9 IiI+PC9vOnA+PC9zcGFuPjwvZGl2PjxkaXYgc3R5bGU9Im1hcmdpbjogMGluIDBpbiAwLjAwMDFw dDsgZm9udC1zaXplOiAxMnB0OyBmb250LWZhbWlseTogQ2FsaWJyaTsiIGNsYXNzPSIiPjxzcGFu IHN0eWxlPSJmb250LXNpemU6IDExcHQ7IiBjbGFzcz0iIj5zcGRrL2xpYi91dGlsL3N0cmluZy5j PC9zcGFuPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9IiI+PGJyIGNsYXNzPSIiPjwvZGl2PjxkaXYg Y2xhc3M9IiI+PGRpdiBjbGFzcz0iIj4KPGRpdiBjbGFzcz0iIj5Kb2huIE1lbmVnaGluaTwvZGl2 PjxkaXYgY2xhc3M9IiI+PGEgaHJlZj0ibWFpbHRvOmpvaG4uYS5tZW5lZ2hpbmlAZ21haWwuY29t IiBjbGFzcz0iIj5qb2huLmEubWVuZWdoaW5pQGdtYWlsLmNvbTwvYT48L2Rpdj48ZGl2IGNsYXNz PSIiPjxiciBjbGFzcz0iIj48L2Rpdj48YnIgY2xhc3M9IkFwcGxlLWludGVyY2hhbmdlLW5ld2xp bmUiPgoKPC9kaXY+CjxiciBjbGFzcz0iIj48ZGl2PjxibG9ja3F1b3RlIHR5cGU9ImNpdGUiIGNs YXNzPSIiPjxkaXYgY2xhc3M9IiI+T24gQXByIDI5LCAyMDE3LCBhdCA3OjM4IEFNLCBSb2RyaWd1 ZXosIEVkd2luICZsdDs8YSBocmVmPSJtYWlsdG86RWQuUm9kcmlndWV6QG5ldGFwcC5jb20iIGNs YXNzPSIiPkVkLlJvZHJpZ3VlekBuZXRhcHAuY29tPC9hPiZndDsgd3JvdGU6PC9kaXY+PGJyIGNs YXNzPSJBcHBsZS1pbnRlcmNoYW5nZS1uZXdsaW5lIj48ZGl2IGNsYXNzPSIiPjxkaXYgY2xhc3M9 IiI+VXNhZ2Ugb2YgcHJpbnRmL2ZwcmludGYgb3VnaHQgdG8gYmUgcmVwbGFjZWQgd2l0aCBTUERL IGxvZ2dpbmcgY2FsbHMgc28gdXNlcnMgb2YgdGhlIGxpYnJhcnkgY2FuIGNvbnRyb2wgdGhlIFVJ LiAmbmJzcDtUaGVuIHRoZXJlIGFyZSBwb3NpeCBjYWxscyBpbiB0aGUgbGlicmFyeSB0byBhYm9y dC9leGl0LCBmb3Igd2hpY2ggdGhlIGxpYnJhcnkgc2hvdWxkIGJlIHJld29ya2VkIHRvIGVsaW1p bmF0ZS4gJm5ic3A7Tm9ib2R54oCZcyBrZWVuIG9uIGEgbGlicmFyeSB0aGF0IGFib3J0cyB0aGUg YXBwIHdoZW4gcGFyYW1ldGVyIHZhbGlkYXRpb24gZmFpbHMgKCAmbmJzcDtJ4oCZZCBhbHNvIGxp a2UgdG8gc2VlIHNvbWUgd2F5IHRvIGF2b2lkIHNldHRpbmcgc2lnbmFsIGhhbmRsZXJzIGluIHRo ZSBsaWJyYXJ5LCBvciBhdCBsZWFzdCBibG9jayBpdCBvdXQgd2l0aCBhbiBpZmRlZiBzZWN0aW9u IHNvIHRoYXQgdXNlcnMgY2FuIG1hbmFnZSBzaWduYWxzIG9uIHRoZWlyIG93bi48YnIgY2xhc3M9 IiI+PGJyIGNsYXNzPSIiPlRoZSByZW1haW5pbmcgcG9zaXggY2FsbHMgYXJlIHRvIG1hbGxvYy9m cmVlL3N0cmR1cC9jYWxsb2MsIGV0YyB3aGljaCBhcmUgaGFyZGVyIHRvIG1hbmFnZSBpbiBub24t cG9zaXggZW52aXJvbm1lbnRzLiAmbmJzcDtLZXJuZWwgYWxsb2NhdG9ycyB0YWtlIG11bHRpcGxl IHBhcmFtZXRlcnMgYmVzaWRlcyB0aGUgc2l6ZSAtIHRoZXkgdHJhY2sgd2hhdCBzeXN0ZW0gaXMg dXNpbmcgbWVtb3J5IGFuZCBmbGFncyB0byBtYW5hZ2UgdmFyaW91cyBhdHRyaWJ1dGVzIGxpa2Ug bWVtb3J5IHJlZ2lvbiAoZG1hLCBwY2ksIGV0YyksIHNob3VsZCB0aGUgY2FsbCBibG9jaywgZXRj LiAmbmJzcDtFdmVuIGlmIHlvdSBnZXQgaXQgdG8gY29tcGlsZSwgdGhlbiBsaW5raW5nIGNhbGxl cnMgb2Ygc2luZ2xlIGFyZ3VtZW50IG1hbGxvYyB3aXRoIGEga2VybmVsIG1hbGxvYyB0aGF0IGV4 cGVjdHMgMyBhcmd1bWVudHMgaXMgZ29pbmcgdG8gaGF2ZSB1bnBsZWFzYW50IHJlc3VsdHMuICZu YnNwO1NvLCBJ4oCZZCBwcmVmZXIgYW4gc3BkayBlbnYgYWJzdHJhY3Rpb24gZm9yIHRoZSBhbGxv Y2F0aW9uIGNhbGxzIHRvIGFsbG93IGltcGxlbWVudGVycyBvZiBuZXcgZW52aXJvbm1lbnRzIHRv IGJldHRlciBtYW5hZ2UgbWVtb3J5LjxiciBjbGFzcz0iIj48YnIgY2xhc3M9IiI+SSBsaWtlIHRo ZSBpZGVhIG9mIGFuIOKAnHNwZGsvc3RkaW5jLmjigJ0gdGhhdCBjb2xsZWN0cyBhbGwgdGhlIHN0 ZCBzeXN0ZW0gaGVhZGVycyBpbiBvbmUgcGxhY2UuICZuYnNwO1lvdSBjb3VsZCBldmVuIG1ha2Ug Y2hlY2tpbmcgZm9yIGl0IHBhcnQgb2YgdGhlIGZvcm1hdCBjaGVja3Mgc28gdGhhdCBhbGwgbGli cmFyeSBzb3VyY2VzIGluY2x1ZGUgaXQgZmlyc3QuICZuYnNwO09yIGJldHRlciB5ZXQgYXMgeW91 IHBvaW50IG91dCwgdXNlIOKAmC1pbmNsdWRl4oCZIHRvIGluY2x1ZGUgaXQgaW4gYWxsIHNvdXJj ZXMgYW5kIGhhdmUgYSBtYWtlZmlsZSBvcHRpb24gdGhhdCB3aWxsIGFsbG93IHVzZXJzIHRvIHJl cGxhY2UgaXQgd2l0aCB0aGVpciBvd24gdmVyc2lvbi48YnIgY2xhc3M9IiI+PGJyIGNsYXNzPSIi PkVkIFI8YnIgY2xhc3M9IiI+PGJyIGNsYXNzPSIiPk9uIDQvMjYvMTcsIDY6MDkgUE0sICJTUERL IG9uIGJlaGFsZiBvZiBXYWxrZXIsIEJlbmphbWluIiAmbHQ7PGEgaHJlZj0ibWFpbHRvOnNwZGst Ym91bmNlc0BsaXN0cy4wMS5vcmciIGNsYXNzPSIiPnNwZGstYm91bmNlc0BsaXN0cy4wMS5vcmc8 L2E+IG9uIGJlaGFsZiBvZiA8YSBocmVmPSJtYWlsdG86YmVuamFtaW4ud2Fsa2VyQGludGVsLmNv bSIgY2xhc3M9IiI+YmVuamFtaW4ud2Fsa2VyQGludGVsLmNvbTwvYT4mZ3Q7IHdyb3RlOjxiciBj bGFzcz0iIj48YnIgY2xhc3M9IiI+ICZuYnNwOyZuYnNwOyZuYnNwO0F0IHRoZSBzdW1taXQgd2Ug ZGlkIGVuZCB1cCBkaXNjdXNzaW5nIHRoaXMgcXVpdGUgYSBiaXQuIEZvciBEUERLIGl0J3MgZmFp cmx5PGJyIGNsYXNzPSIiPiAmbmJzcDsmbmJzcDsmbmJzcDtjbGVhciB0aGF0IHdlJ3JlIGdvaW5n IHRvIGNvbnRpbnVlIHRvIGFic3RyYWN0IGF3YXkgYWxsIG9mIHRob3NlIGRlcGVuZGVuY2llczxi ciBjbGFzcz0iIj4gJm5ic3A7Jm5ic3A7Jm5ic3A7aW5zaWRlIG9mIHRoZSBlbnYgbGlicmFyeS4g VGhlcmUgYXJlIHB1bGwgcmVxdWVzdHMgb3V0IHRvIGZpbmlzaCB0aGlzIHVwIG5vdyBhbmQ8YnIg Y2xhc3M9IiI+ICZuYnNwOyZuYnNwOyZuYnNwO3dlJ2xsIGdldCB0aG9zZSBtZXJnZWQgcmVsYXRp dmVseSBxdWlja2x5LiBXZSdyZSBhbHNvIHdvcmtpbmcgd2l0aCB0aGUgRFBESyB0ZWFtPGJyIGNs YXNzPSIiPiAmbmJzcDsmbmJzcDsmbmJzcDt0byBpbXByb3ZlIERQREsgc28gdGhhdCB0aGVyZSBh cmUgaG9wZWZ1bGx5IGZld2VyIHJlYXNvbnMgdG8gZm9yZWdvIHVzaW5nIGl0LjxiciBjbGFzcz0i Ij48YnIgY2xhc3M9IiI+ICZuYnNwOyZuYnNwOyZuYnNwO0FzIGZhciBhcyBQT1NJWCwgSSBoYXZl IGEgcHJvcG9zYWwuIEFzc3VtaW5nIFBPU0lYIGlzIGF2YWlsYWJsZSBtYWtlcyBpdDxiciBjbGFz cz0iIj4gJm5ic3A7Jm5ic3A7Jm5ic3A7c2lnbmlmaWNhbnRseSBlYXNpZXIgdG8gd29yayBvbiBT UERLIGl0c2VsZiwgc28gSSdtIHZlcnkgaGVzaXRhbnQgdG8gbW92ZSBhbGw8YnIgY2xhc3M9IiI+ ICZuYnNwOyZuYnNwOyZuYnNwO1BPU0lYIGNhbGxzIGluc2lkZSBvZiB0aGUgZW52IGxpYnJhcnkg YW5kIGZvcmNlIHBlb3BsZSB0byB1c2Ugd3JhcHBlciBmdW5jdGlvbnMuPGJyIGNsYXNzPSIiPiAm bmJzcDsmbmJzcDsmbmJzcDtJJ20gY29uY2VybmVkIHRoYXQgaXQgcmFpc2VzIHRoZSBiYXJyaWVy IHRvIGNvbnRyaWJ1dGUgdG9vIG11Y2ggKGNhbiBJIGNhbGw8YnIgY2xhc3M9IiI+ICZuYnNwOyZu YnNwOyZuYnNwO21hbGxvYz8gd2hhdCBhYm91dCBwcmludGY/KS4gRnVydGhlciwgdGhlIHZhc3Qg bWFqb3JpdHkgb2YgU1BESyB1c2VycyBhY3R1YWxseTxiciBjbGFzcz0iIj4gJm5ic3A7Jm5ic3A7 Jm5ic3A7ZG8gaGF2ZSBQT1NJWCBhdmFpbGFibGUgdG8gdGhlbS4gVGhhdCBzYWlkLCB0aGVyZSBh cmUgcHJvYmFibHkgcGFydHMgdGhhdCB3ZSBjYW48YnIgY2xhc3M9IiI+ICZuYnNwOyZuYnNwOyZu YnNwO2Fic3RyYWN0IG91dCBhbmQgc29tZSBvdGhlciByZWZhY3RvcmluZyB3ZSBjYW4gZG8gaGVy ZS48YnIgY2xhc3M9IiI+PGJyIGNsYXNzPSIiPiAmbmJzcDsmbmJzcDsmbmJzcDtGaXJzdCwgSSB0 aGluayBwdGhyZWFkcyBjYW4gYmUgcmVmYWN0b3JlZCBpbnRvIHRoZSBlbnYgbGlicmFyeS4gTG9j a2luZyBhbmQ8YnIgY2xhc3M9IiI+ICZuYnNwOyZuYnNwOyZuYnNwO3NwYXduaW5nIHRocmVhZHMg aXMgcmFyZSBlbm91Z2ggaW4gU1BESyB0aGF0IGl0IGlzbid0IGFuIHVuZHVlIGJ1cmRlbiB0byB1 c2U8YnIgY2xhc3M9IiI+ICZuYnNwOyZuYnNwOyZuYnNwO3dyYXBwZXJzLCBhbmQgaXQgYWxzbyBy ZXF1aXJlcyBzb21lIGNhcmUgcmVnYXJkaW5nIENQVSBhZmZpbml0eS4gU28gdGhlIGJlbG93PGJy IGNsYXNzPSIiPiAmbmJzcDsmbmJzcDsmbmJzcDtkaXNjdXNzaW9uIGV4Y2x1ZGVzIHRoYXQuPGJy IGNsYXNzPSIiPjxiciBjbGFzcz0iIj4gJm5ic3A7Jm5ic3A7Jm5ic3A7U2Vjb25kLCBJIHRoaW5r IHdlIGNhbiBnZXQgYXdheSB3aXRoIG1vdmluZyBhbGwgb2Ygb3VyIFBPU0lYIGhlYWRlcnMgdG8g YSBzaW5nbGU8YnIgY2xhc3M9IiI+ICZuYnNwOyZuYnNwOyZuYnNwO1NQREsgaGVhZGVyIGZpbGUg YXQgc3Bkay9zdGRpbmMuaC4gV2UgY2FuIHRoZW4gaW5jbHVkZSB0aGF0IGZpbGUgZXZlcnl3aGVy ZTxiciBjbGFzcz0iIj4gJm5ic3A7Jm5ic3A7Jm5ic3A7ZWl0aGVyIGRpcmVjdGx5IG9yIGJ5IHVz aW5nIGEgLWluY2x1ZGUgb3B0aW9uIGluIHRoZSBNYWtlZmlsZS4gVGhpcyB3aWxsIGV2ZW48YnIg Y2xhc3M9IiI+ICZuYnNwOyZuYnNwOyZuYnNwO3BsYXkgbmljZWx5IHdpdGggcHJlY29tcGlsaW5n IHNwZGsvc3RkaW5jLmggKHRoYW5rcyBEYW5pZWwgZm9yIHRoZSBzdWdnZXN0aW9uKSw8YnIgY2xh c3M9IiI+ICZuYnNwOyZuYnNwOyZuYnNwO2FsdGhvdWdoIFNQREsncyBidWlsZCB0aW1lcyBhcmUg bm90IGEgY29uY2VybiByaWdodCBub3cuPGJyIGNsYXNzPSIiPjxiciBjbGFzcz0iIj4gJm5ic3A7 Jm5ic3A7Jm5ic3A7VGhpcmQsIGZvciB0aGUgc21hbGwgc3Vic2V0IG9mIFNQREsgdXNlcnMgdGhh dCByZWFsbHkgZG9uJ3QgaGF2ZSBQT1NJWDxiciBjbGFzcz0iIj4gJm5ic3A7Jm5ic3A7Jm5ic3A7 YXZhaWxhYmxlLCB0aGV5IGNhbiBjYXJyeSBhIHBhdGNoIG9uIHRvcCBvZiBTUERLIHRoYXQgc2lt cGx5IHJlcGxhY2VzPGJyIGNsYXNzPSIiPiAmbmJzcDsmbmJzcDsmbmJzcDtzcGRrL3N0ZGluYy5o IHdpdGggdGhlaXIgb3duIGltcGxlbWVudGF0aW9uLiBNb3N0IGVudmlyb25tZW50cyBoYXZlIGF0 IGxlYXN0PGJyIGNsYXNzPSIiPiAmbmJzcDsmbmJzcDsmbmJzcDtzb21lIHBhcnQgb2YgdGhlIFBP U0lYIHN0YW5kYXJkLCBhbmQgOTAlIG9mIHdoYXQgd2UncmUgdXNpbmcgaXMganVzdCB0aGUgQzxi ciBjbGFzcz0iIj4gJm5ic3A7Jm5ic3A7Jm5ic3A7c3RhbmRhcmQgbGlicmFyeSwgc28gaW4gcmVh bGl0eSB0aGlzIGhlYWRlciBzaG91bGRuJ3QgYmUgdG9vIGRpZmZpY3VsdCB0bzxiciBjbGFzcz0i Ij4gJm5ic3A7Jm5ic3A7Jm5ic3A7cmVwbGFjZS48YnIgY2xhc3M9IiI+PGJyIGNsYXNzPSIiPiAm bmJzcDsmbmJzcDsmbmJzcDtUaG91Z2h0cz8gT3BpbmlvbnM/PGJyIGNsYXNzPSIiPjxiciBjbGFz cz0iIj4gJm5ic3A7Jm5ic3A7Jm5ic3A7VGhhbmtzLDxiciBjbGFzcz0iIj4gJm5ic3A7Jm5ic3A7 Jm5ic3A7QmVuPGJyIGNsYXNzPSIiPjxiciBjbGFzcz0iIj48YnIgY2xhc3M9IiI+ICZuYnNwOyZu YnNwOyZuYnNwO09uIE1vbiwgMjAxNy0wNC0xNyBhdCAxODo1NSArMDAwMCwgV2Fsa2VyLCBCZW5q YW1pbiB3cm90ZTo8YnIgY2xhc3M9IiI+PGJsb2NrcXVvdGUgdHlwZT0iY2l0ZSIgY2xhc3M9IiI+ SGkgYWxsLDxiciBjbGFzcz0iIj48YnIgY2xhc3M9IiI+VGhlcmUgaGFzIGJlZW4gYSBsb3Qgb2Yg YWN0aXZpdHkgbGF0ZWx5IGRlYWxpbmcgd2l0aCBhYnN0cmFjdGluZyBTUERLJ3M8YnIgY2xhc3M9 IiI+ZGVwZW5kZW5jaWVzIHRvIGFsbG93IHBvcnRpbmcgU1BESyB0byBhZGRpdGlvbmFsIHBsYXRm b3JtcyBhbmQgZnJhbWV3b3Jrcy4gSTxiciBjbGFzcz0iIj50aGluayB3ZSdsbCBlbmQgdXAgdGFs a2luZyBhYm91dCB0aGlzIGV4dGVuc2l2ZWx5IGF0IHRoZSBzdW1taXQgdGhpcyB3ZWVrLiBUaGU8 YnIgY2xhc3M9IiI+YWJpbGl0eSB0byB1c2UgU1BESyBpbiBhIHZhcmlldHkgb2YgZW52aXJvbm1l bnRzIGlzIHZlcnkgaW1wb3J0YW50IHRvIHVzLCBzbyBJPGJyIGNsYXNzPSIiPmxvb2sgZm9yd2Fy ZCB0byB0aGUgZGlzY3Vzc2lvbnMuIEkgd2FudGVkIHRvIHdyaXRlIGEgYmFzaWMgc3VtbWFyeSBv ZiB0aGU8YnIgY2xhc3M9IiI+Y3VycmVudCBzdGF0ZSBvZiBTUERLJ3MgZGVwZW5kZW5jaWVzIGZv ciBldmVyeW9uZSB0byBoYXZlLCBhbmQgc28gdGhhdCB0aG9zZTxiciBjbGFzcz0iIj53aG8gYXJl IHVuYWJsZSB0byBhdHRlbmQgdGhlIHN1bW1pdCBjYW4gcHJvdmlkZSBmZWVkYmFjay4gSSdsbCB0 cnkgdG8gdXBkYXRlPGJyIGNsYXNzPSIiPnRoaXMgdGhyZWFkIHdpdGggdGhlIHJlc3VsdHMgb2Yg dGhlIGRpc2N1c3Npb25zIGF0IHRoZSBzdW1taXQgZm9yIGV2ZXJ5b25lJ3M8YnIgY2xhc3M9IiI+ YmVuZWZpdC48YnIgY2xhc3M9IiI+PGJyIGNsYXNzPSIiPldlJ3ZlIGFscmVhZHkgZWxpbWluYXRl ZCBhbGwgU1BESyBkZXBlbmRlbmNpZXMgZXhjZXB0IGZvciB0d286PGJyIGNsYXNzPSIiPjxiciBj bGFzcz0iIj4xKSBQT1NJWDxiciBjbGFzcz0iIj4yKSBEUERLPGJyIGNsYXNzPSIiPjxiciBjbGFz cz0iIj5TUERLIGFscmVhZHkgaGFzIGEgbWVjaGFuaXNtIGZvciBhYnN0cmFjdGluZyBhd2F5IHRo ZSAiZW52aXJvbm1lbnQiIGl0IGlzPGJyIGNsYXNzPSIiPnJ1bm5pbmcgaW4uIFdlIGRvIHRoaXMg YnkgbW92aW5nIGFsbCBjYWxscyB0byBkZXBlbmRlbmNpZXMgdG8gdGhlICJlbnYiPGJyIGNsYXNz PSIiPmxpYnJhcnksIHdob3NlIGludGVyZmFjZSBpcyBkZWZpbmVkIGJ5IGluY2x1ZGUvc3Bkay9l bnYuaC4gVGhlIGJ1aWxkIHN5c3RlbTxiciBjbGFzcz0iIj5hbGxvd3MgdXNlcnMgdG8gcG9pbnQg dG8gYW4gYWx0ZXJuYXRlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBlbnYgbGlicmFyeSBpZjxiciBj bGFzcz0iIj5yZXF1aXJlZC4gU1BESydzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgZW52IGlz IGJhc2VkIG9uIERQREsgYW5kIHJ1bnMgaW48YnIgY2xhc3M9IiI+TGludXggYW5kIEZyZWVCU0Qg dXNlciBzcGFjZS48YnIgY2xhc3M9IiI+PGJyIGNsYXNzPSIiPkRQREsgaXMgYSB2ZXJ5IGxhcmdl IHRvb2xraXQsIG9mIGNvdXJzZSwgYnV0IHVudGlsIGp1c3QgcmVjZW50bHkgU1BESyBvbmx5PGJy IGNsYXNzPSIiPnVzZWQgRFBESydzICdlYWwnIG1vZHVsZSAoZW52aXJvbm1lbnQgYWJzdHJhY3Rp b24gbGlicmFyeSkuIFRoZSBvcmlnaW5hbCBnb2FsPGJyIGNsYXNzPSIiPm9mIHRoZSBTUERLIGVu diBsaWJyYXJ5IHdhcyBqdXN0IHRvIGFic3RyYWN0IGFsbCB1c2VzIG9mIERQREsncyBlYWwsIGJ1 dCBub3Q8YnIgY2xhc3M9IiI+YWxsIHVzZXMgb2YgUE9TSVggQVBJcy4gV2UgbWFkZSBzb21lIHBy b2dyZXNzIGluIHRoaXMgYXJlYSwgYnV0IHRoZXJlIGFyZSBhPGJyIGNsYXNzPSIiPm51bWJlciBv ZiByZW1haW5pbmcgY2FsbHMgYXMgb2YgdGhpcyB3cml0aW5nLiBGb3J0dW5hdGVseSwgdGhlIHdp ZGVyIGNvbW11bml0eTxiciBjbGFzcz0iIj5oYXMgcmVhbGx5IGNvbWUgdGhyb3VnaC4gVGhlcmUg YXJlIGF0IGxlYXN0IHR3byBwdWxsIHJlcXVlc3RzIG91dCBmcm9tIHR3bzxiciBjbGFzcz0iIj5p bmRlcGVuZGVudCB1c2VycyB0aGF0IG1vc3RseSBmaW5pc2ggdGhlIGpvYi4gV2UnbGwgd29yayB0 aHJvdWdoIHRob3NlIHB1bGw8YnIgY2xhc3M9IiI+cmVxdWVzdHMgYW5kIHRyeSB0byBnZXQgdGhl bSBtZXJnZWQgc2hvcnRseS4gVGhlIG9ubHkgcGFydCBvZiB0aGUgY29kZSB0aGF0PGJyIGNsYXNz PSIiPndpbGwgY29udGludWUgdG8gZXhwbGljaXRseSBkZXBlbmQgb24gRFBESyB3aWxsIGJlIHRo ZSBuZXdseSByZWxlYXNlZCB2aG9zdC08YnIgY2xhc3M9IiI+c2NzaSB0YXJnZXQgYmVjYXVzZSB0 aGF0IHJlbGllcyBvbiBEUERLIHZob3N0IGluZnJhc3RydWN0dXJlLiBUaGlzPGJyIGNsYXNzPSIi PmluZnJhc3RydWN0dXJlIGlzIG91dHNpZGUgb2YgRFBESydzIGVhbCBhbmQgaXMgcXVpdGUgZXh0 ZW5zaXZlLiBXZSBmZWVsIHRoaXM8YnIgY2xhc3M9IiI+aXMgYWNjZXB0YWJsZSBiZWNhdXNlIGJ1 aWxkaW5nIHZob3N0IGluIFNQREsgaXMgb3B0aW9uYWwgLSB5b3UgY2FuIGp1c3QgdHVybjxiciBj bGFzcz0iIj5pdCBvZmYgdG8gZWxpbWluYXRlIHRoZSBkZXBlbmRlbmN5LjxiciBjbGFzcz0iIj48 YnIgY2xhc3M9IiI+VGhlcmUgYXJlIGEgbnVtYmVyIG9mIGxlZ2l0aW1hdGUgcmVhc29ucyB0byB3 YW50IHRvIHJlbW92ZSB0aGUgRFBESyBkZXBlbmRlbmN5PGJyIGNsYXNzPSIiPmZyb20gU1BESy4g Rm9yIGluc3RhbmNlLCBEUERLIGRpY3RhdGVzIGEgcGFydGljdWxhciBtZW1vcnkgbWFuYWdlbWVu dCBtb2RlbCw8YnIgY2xhc3M9IiI+cmVxdWlyZXMgYSBzcGVjaWZpYyB0aHJlYWRpbmcgbW9kZWws IGFuZCBwZXJmb3JtcyBQQ0kgZGV2aWNlIG1hbmFnZW1lbnQgdGhhdDxiciBjbGFzcz0iIj5tYXkg Y29uZmxpY3Qgd2l0aCBvdGhlciBsaWJyYXJpZXMuIEhvd2V2ZXIsIERQREsgcHJvdmlkZXMgdHJl bWVuZG91cyB2YWx1ZSB0bzxiciBjbGFzcz0iIj5TUERLIGluIGEgbnVtYmVyIG9mIGFyZWFzLCBl c3BlY2lhbGx5IGJ5IGltcGxlbWVudGluZyBtZW1vcnkgYWxsb2NhdGlvbjxiciBjbGFzcz0iIj5z dWl0YWJsZSBmb3IgRE1BIGluIHVzZXIgc3BhY2UuIE1lbW9yeSBtYW5hZ2VtZW50IGlzIGEgbWFq b3IgY2hhbGxlbmdlIHdpdGg8YnIgY2xhc3M9IiI+YWxsIHNvcnRzIG9mIGhpZGRlbiB0cmFwcyBh bmQgY2hhbGxlbmdlcywgc28gd2Ugc2VlIHNpZ25pZmljYW50IHZhbHVlIGluIHVzaW5nPGJyIGNs YXNzPSIiPmEgcHJvZHVjdGlvbi10ZXN0ZWQgbGlicmFyeSBoZXJlLiBSZS1pbXBsZW1lbnQgdGhl IGVudiB3aXRob3V0IERQREsgYXQgeW91cjxiciBjbGFzcz0iIj5vd24gcmlzayE8YnIgY2xhc3M9 IiI+PGJyIGNsYXNzPSIiPkFic3RyYWN0aW5nIGF3YXkgb3VyIFBPU0lYIGRlcGVuZGVuY3kgaXMg YSBzaW1pbGFyIGJ1dCBsYXJnZXIgY2hhbGxlbmdlLiBXaGlsZTxiciBjbGFzcz0iIj53ZSBmb3Jl c2F3IHRoZSBuZWVkIGZvciBwZW9wbGUgdG8gcmVwbGFjZSBEUERLLCB3ZSBkaWRuJ3Qgc2VlIGFu eSB1c2UgY2FzZSBmb3I8YnIgY2xhc3M9IiI+ZHJvcHBpbmcgUE9TSVguIFdlIHdlcmUgZGVmaW5p dGVseSB3cm9uZyB0aG91Z2ggLSBwZW9wbGUgYXJlIHVzaW5nIFNQREsgaW4gYWxsPGJyIGNsYXNz PSIiPnNvcnRzIG9mIGVudmlyb25tZW50cyB0aGF0IHdlIGRpZG4ndCBwcmVkaWN0LCBmcm9tIGVt YmVkZGVkIGZpcm13YXJlIHRvPGJyIGNsYXNzPSIiPm9wZXJhdGluZyBzeXN0ZW0ga2VybmVscyBh bmQgYmV5b25kLiBTbyB3ZSdsbCBuZWVkIHRvIGFkZHJlc3MgdGhpcyBhcyB0aW1lPGJyIGNsYXNz PSIiPmdvZXMgb24uIEkgdGhpbmsgdGhpcyB3aWxsIHJlc3VsdCBpbiBmdXJ0aGVyIGV4cGFuc2lv biBvZiB0aGUgJ2VudicgbGlicmFyeS48YnIgY2xhc3M9IiI+Rm9ydHVuYXRlbHksIHdlIGRvbid0 IHJlcXVpcmUgdG9vIG11Y2ggZnJvbSBQT1NJWCAtIG1vc3RseSBwdGhyZWFkcywgdGhlIEM8YnIg Y2xhc3M9IiI+c3RhbmRhcmQgbGlicmFyeSwgYW5kIG1heWJlIGEgY291cGxlIG9mIG90aGVyIG1p c2NlbGxhbmVvdXMgaGVhZGVycy48YnIgY2xhc3M9IiI+PGJyIGNsYXNzPSIiPlRoZXJlIGFyZSBv dGhlciBsZXNzIG9idmlvdXMgZGVwZW5kZW5jaWVzIGluIFNQREsuIEZvciBpbnN0YW5jZSwgaXQg YWxzbzxiciBjbGFzcz0iIj5kZXBlbmRzIG9uIGEgcmVsYXRpdmVseSByZWNlbnQgdmVyc2lvbiBv ZiBnY2Mgb3IgY2xhbmcuIFRoaXMgaXMgbW9zdGx5IGE8YnIgY2xhc3M9IiI+cHJhY3RpY2FsIGNv bmNlcm4gYW5kIG5vdCBzbyBtdWNoIGJ5IGludGVudGlvbi4gT3VyIGNvbnRpbnVvdXMgaW50ZWdy YXRpb248YnIgY2xhc3M9IiI+c3lzdGVtICh3aGljaCBJJ2xsIHRhbGsgYWJvdXQgYXQgdGhlIHN1 bW1pdCAtIGV4Y2l0aW5nIGRldmVsb3BtZW50cyBoZXJlKTxiciBjbGFzcz0iIj5jdXJyZW50bHkg Y29uc2lzdHMgb2YgNCBtYWNoaW5lcywgMyBvZiB3aGljaCBhcmUgcnVubmluZyBGZWRvcmEgTGlu dXggMjUgd2hpbGU8YnIgY2xhc3M9IiI+dGhlIG90aGVyIGlzIHJ1bm5pbmcgRnJlZUJTRCAxMS4w LiBUaGVzZSBhcmUgdmVyeSBtdWNoIHVwIHRvIGRhdGUgc3lzdGVtcywgc288YnIgY2xhc3M9IiI+ d2UgdGVuZCBub3QgdG8gY2F0Y2ggYnVncyBvbiBvbGRlciBzeXN0ZW1zIHRvZGF5LiBXZSBhbHNv IHVzZSBjdXR0aW5nIGVkZ2UgQzxiciBjbGFzcz0iIj5mZWF0dXJlcyBhbmQgdG9vbHMsIHNvIHdl J2xsIHByb2JhYmx5IG92ZXIgdGltZSBuZWVkIHRvIHNlbGVjdCBhIHBhcnRpY3VsYXI8YnIgY2xh c3M9IiI+bWluaW11bSB2ZXJzaW9uIG9mIHRoZSBDIHN0YW5kYXJkIHRoYXQgd2UncmUgZ29pbmcg dG8gZGV2ZWxvcCB0by48YnIgY2xhc3M9IiI+PGJyIGNsYXNzPSIiPkknbSBhbHNvIGNvbmNlcm5l ZCB3aXRoIHRoZSBzY29wZSBvZiB0aGUgZW52IGxpYnJhcnkgYW5kIEknZCBsaWtlIHRvIHdvcmsg YXM8YnIgY2xhc3M9IiI+aGFyZCBhcyBwb3NzaWJsZSB0byBsaW1pdCB0aGUgc2l6ZSBvZiB0aGUg QVBJLiBUaGlzIGlzIGZvciB0d28gcmVhc29ucyAtIGZpcnN0PGJyIGNsYXNzPSIiPmFuZCBmb3Jl bW9zdCB0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIGNhbGxzIHRvIHRoZXNlIHdyYXBwZXIgZnVu Y3Rpb25zIHNvPGJyIGNsYXNzPSIiPnRoYXQgaXQgZG9lc24ndCBpbXBhY3QgcGVyZm9ybWFuY2Uu IFBlcmZvcm1hbmNlIHJlYWxseSBpcyBldmVyeXRoaW5nIGFuZCB3ZTxiciBjbGFzcz0iIj5jYW4n dCBzYWNyaWZpY2UgdGhhdC4gVGhpcyBpc24ndCBzaGFwaW5nIHVwIHRvIGJlIG11Y2ggb2YgYSBw cm9ibGVtIHNvIGZhcjxiciBjbGFzcz0iIj5iZWNhdXNlIHZlcnkgZmV3IGNhbGxzIHRvIG91ciBk ZXBlbmRlbmNpZXMgaGFwcGVuIHdpdGhpbiB0aGUgSS9PIHBhdGguPGJyIGNsYXNzPSIiPlNlY29u ZGFyaWx5LCBJJ2QgbGlrZSB0byBtYWtlIGl0IGFzIHN0cmFpZ2h0Zm9yd2FyZCBhcyBwb3NzaWJs ZSBmb3IgdXNlcnMgdG88YnIgY2xhc3M9IiI+cmUtaW1wbGVtZW50IHRoZSBlbnYuIFRoZSBiZXN0 IHdheSB0byBtYWtlIGl0IGVhc3kgdG8gZG8gdGhhdCBpcyB0byBrZWVwIHRoZTxiciBjbGFzcz0i Ij5BUEkgc21hbGwuPGJyIGNsYXNzPSIiPjxiciBjbGFzcz0iIj5JIGxvb2sgZm9yd2FyZCB0byB0 aGUgZGlzY3Vzc2lvbnMgYXQgdGhlIHN1bW1pdCB0aGlzIHdlZWsuIFdlJ2QgbG92ZSB0byBoZWFy PGJyIGNsYXNzPSIiPmFib3V0IGFsbCBvZiB0aGUgZGlmZmVyZW50IGVudmlyb25tZW50cywgcGxh dGZvcm1zLCBhbmQgZnJhbWV3b3JrcyB3aGVyZSBTUERLPGJyIGNsYXNzPSIiPmlzIGJlaW5nIHVz ZWQgYW5kIGhvdyB3ZSBjYW4gbWFrZSBpdCBlYXNpZXIgdG8gaW50ZWdyYXRlIFNQREsgd2hlcmV2 ZXIgaXQgaXM8YnIgY2xhc3M9IiI+dmFsdWFibGUuPGJyIGNsYXNzPSIiPjxiciBjbGFzcz0iIj5U aGFua3MsPGJyIGNsYXNzPSIiPkJlbjxiciBjbGFzcz0iIj48YnIgY2xhc3M9IiI+PGJyIGNsYXNz PSIiPl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fPGJyIGNs YXNzPSIiPlNQREsgbWFpbGluZyBsaXN0PGJyIGNsYXNzPSIiPjxhIGhyZWY9Im1haWx0bzpTUERL QGxpc3RzLjAxLm9yZyIgY2xhc3M9IiI+U1BES0BsaXN0cy4wMS5vcmc8L2E+PGJyIGNsYXNzPSIi Pmh0dHBzOi8vbGlzdHMuMDEub3JnL21haWxtYW4vbGlzdGluZm8vc3BkazxiciBjbGFzcz0iIj48 L2Jsb2NrcXVvdGU+PGJyIGNsYXNzPSIiPjxiciBjbGFzcz0iIj5fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXzxiciBjbGFzcz0iIj5TUERLIG1haWxpbmcgbGlz dDxiciBjbGFzcz0iIj48YSBocmVmPSJtYWlsdG86U1BES0BsaXN0cy4wMS5vcmciIGNsYXNzPSIi PlNQREtAbGlzdHMuMDEub3JnPC9hPjxiciBjbGFzcz0iIj5odHRwczovL2xpc3RzLjAxLm9yZy9t YWlsbWFuL2xpc3RpbmZvL3NwZGs8YnIgY2xhc3M9IiI+PC9kaXY+PC9kaXY+PC9ibG9ja3F1b3Rl PjwvZGl2PjxiciBjbGFzcz0iIj48L2Rpdj48L2JvZHk+PC9odG1sPg== --===============1681841673720624543==--