From romit.misra@flipkart.com Tue Dec 10 02:27:48 2019 From: Romit Misra To: ceph-users@ceph.io Subject: [ceph-users] Re: : RGW listing millions of objects takes too much time Date: Tue, 10 Dec 2019 07:57:28 +0530 Message-ID: In-Reply-To: 157591227337.33.4477479615548456815@mailman-core MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============3094636150463115708==" --===============3094636150463115708== Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Hi Robert and Arash, A couple of pointers and asks that might help. 1. Can you point to the code you are using for listing the buckets. 2. Which release is the cluster running on..? 3. What is the number of shards that have been configured in the bucket index for the said mentioned bucket...? 4.Have you tried timing the listing process, as to where does the slow down began, in other words after 1 million entries, 2 million entri s, or the listing is slow at per key level. 5. You could profile the timing for every 10000 entries or 100000 6.While using a additional meta, like redis in memory meta store could be a solution, but moving many moving parts altogether becomes a headache. 7. Let's look at the tunebales first, to see where the bottleneck is. 8.Another good practice , of possible in your deployment would be, if you can restrict objects per bucket, to say .5 million or 1 million, and have a client side hash/placement algorithm for writing into the buckets. 9. If these 30 million entries are static, iff , then prefetching the markers , and running are multithreaded flow makes sense. But again if these are static why would you not store them in a blob altogether, so contraindicating my own point. 10.Also do look ceph lists and mailers for ordered Vs unordered listing(remember seeing some query around it) Thanks Romit Misra On Mon, 9 Dec 2019, 22:56 , wrote: > Send ceph-users mailing list submissions to > ceph-users(a)ceph.io > > To subscribe or unsubscribe via email, send a message with subject or > body 'help' to > ceph-users-request(a)ceph.io > > You can reach the person managing the list at > ceph-users-owner(a)ceph.io > > When replying, please edit your Subject line so it is more specific > than "Re: Contents of ceph-users digest..." > > Today's Topics: > > 1. RGW listing millions of objects takes too much time (Arash Shams) > 2. Re: RGW listing millions of objects takes too much time > (Robert LeBlanc) > 3. ceph mgr daemon multiple ip addresses (Frank R) > 4. Re: osdmaps not trimmed until ceph-mon's restarted (if cluster has a > down osd) > (Bryan Stillwell) > > > ---------------------------------------------------------------------- > > Date: Mon, 9 Dec 2019 15:46:04 +0000 > From: Arash Shams > Subject: [ceph-users] RGW listing millions of objects takes too much > time > To: "ceph-users(a)ceph.io" > Message-ID: P265.PROD.OUTLOOK.COM> > Content-Type: multipart/alternative; boundary=3D"_000_CWXP265MB128679 > DE9E6B2A6CA289B16492580CWXP265MB1286GBRP_" > > --_000_CWXP265MB128679DE9E6B2A6CA289B16492580CWXP265MB1286GBRP_ > Content-Type: text/plain; charset=3D"iso-8859-1" > Content-Transfer-Encoding: quoted-printable > > Dear All, > > I have almost 30 million objects and I want to list them and index them > som=3D > ewhere else, > Im using boto3 with continuation Marker but it takes almost 9 hours > > can I run it in multiple threads to make it faster? what solution do you > su=3D > ggest to speedup this process, > > > Thanks > > > --_000_CWXP265MB128679DE9E6B2A6CA289B16492580CWXP265MB1286GBRP_ > Content-Type: text/html; charset=3D"iso-8859-1" > Content-Transfer-Encoding: quoted-printable > > > > charset=3D3Diso-8859-=3D > 1"> > > > >
12pt;=3D > color: rgb(0, 0, 0);"> > Dear All, 
>
12pt;=3D > color: rgb(0, 0, 0);"> >
>
>
12pt;=3D > color: rgb(0, 0, 0);"> > I have almost 30 million objects and I want to list them and index them > som=3D > ewhere else, 
>
12pt;=3D > color: rgb(0, 0, 0);"> > Im using boto3 with continuation Marker but it takes almost 9 hours
>
12pt;=3D > color: rgb(0, 0, 0);"> >
>
>
12pt;=3D > color: rgb(0, 0, 0);"> > can I run it in multiple threads to make it faster? what solution do you > su=3D > ggest to speedup this process, 
>
12pt;=3D > color: rgb(0, 0, 0);"> >
>
>
12pt;=3D > color: rgb(0, 0, 0);"> >
>
>
12pt;=3D > color: rgb(0, 0, 0);"> > Thanks 
>
12pt;=3D > color: rgb(0, 0, 0);"> >
>
> > > > --_000_CWXP265MB128679DE9E6B2A6CA289B16492580CWXP265MB1286GBRP_-- > > ------------------------------ > > Date: Mon, 9 Dec 2019 08:23:55 -0800 > From: Robert LeBlanc > Subject: [ceph-users] Re: RGW listing millions of objects takes too > much time > To: Arash Shams > Cc: "ceph-users(a)ceph.io" > Message-ID: > jAW-+ZPOFS-f9Oag(a)mail.gmail.com> > Content-Type: multipart/alternative; > boundary=3D"0000000000000e664e059947d3b2" > > --0000000000000e664e059947d3b2 > Content-Type: text/plain; charset=3D"UTF-8" > > On Mon, Dec 9, 2019 at 7:47 AM Arash Shams wrote: > > > Dear All, > > > > I have almost 30 million objects and I want to list them and index them > > somewhere else, > > Im using boto3 with continuation Marker but it takes almost 9 hours > > > > can I run it in multiple threads to make it faster? what solution do you > > suggest to speedup this process, > > > > > > Thanks > > > > I've thought about indexing objects elsewhere as well. One thought I had > was hooking into the HTTP flow where a PUT or DEL would update the objects > in some kind of database (async of course). We could also gather stats with > GET and POST. Initially, my thoughts were to hook into haproxy since we > already use it, but possibly RGW if that is an option. That way it would > always be up to date and not have to do big scans on the buckets (our > buckets would not perform well with this). I haven't actually gotten to the > implementation phase of this idea. > > ---------------- > Robert LeBlanc > PGP Fingerprint 79A2 9CA4 6CC4 45DD A904 C70E E654 3BB2 FA62 B9F1 > > --0000000000000e664e059947d3b2 > Content-Type: text/html; charset=3D"UTF-8" > Content-Transfer-Encoding: quoted-printable > >
On Mon, Dec 9, 2019 at 7:47 AM Arash > Sham=3D > s <ara4sh(a)hotmail.com> > wrot=3D > e:
st=3D > yle=3D3D"margin:0px 0px 0px 0.8ex;border-left:1px solid > rgb(204,204,204);padd=3D > ing-left:1ex"> > > > > >
>
style=3D3D"font-family:Calibri,Helvetica,sans-serif;font-size:12pt;color=3D > :rgb(0,0,0)"> > Dear All,=3DC2=3DA0
>
style=3D3D"font-family:Calibri,Helvetica,sans-serif;font-size:12pt;color=3D > :rgb(0,0,0)"> >
>
>
style=3D3D"font-family:Calibri,Helvetica,sans-serif;font-size:12pt;color=3D > :rgb(0,0,0)"> > I have almost 30 million objects and I want to list them and index them > som=3D > ewhere else,=3DC2=3DA0
>
style=3D3D"font-family:Calibri,Helvetica,sans-serif;font-size:12pt;color=3D > :rgb(0,0,0)"> > Im using boto3 with continuation Marker but it takes almost 9 hours
>
style=3D3D"font-family:Calibri,Helvetica,sans-serif;font-size:12pt;color=3D > :rgb(0,0,0)"> >
>
>
style=3D3D"font-family:Calibri,Helvetica,sans-serif;font-size:12pt;color=3D > :rgb(0,0,0)"> > can I run it in multiple threads to make it faster? what solution do you > su=3D > ggest to speedup this process,=3DC2=3DA0
>
style=3D3D"font-family:Calibri,Helvetica,sans-serif;font-size:12pt;color=3D > :rgb(0,0,0)"> >
>
>
style=3D3D"font-family:Calibri,Helvetica,sans-serif;font-size:12pt;color=3D > :rgb(0,0,0)"> >
>
>
style=3D3D"font-family:Calibri,Helvetica,sans-serif;font-size:12pt;color=3D > :rgb(0,0,0)"> > Thanks=3DC2=3DA0
class=3D3D"gmail_quote">
<=3D > div class=3D3D"gmail_quote">I've thought about indexing objects > elsewhere=3D > as well. One thought I had was hooking into the HTTP flow where a PUT or > D=3D > EL would update the objects in some kind of database (async of course). We > =3D > could also gather stats with GET and POST. Initially, my thoughts were to > h=3D > ook into haproxy since we already use it, but possibly RGW if that is an > op=3D > tion. That way it would always be up to date and not have to do big scans > o=3D > n the buckets (our buckets would not perform well with this). I > haven't=3D > actually gotten to the implementation phase of this idea.

=3D3D"all">
class=3D3D"gmail_signature">---------------- r>Robert LeBlanc
PGP Fingerprint 79A2 9CA4 6CC4 45DD > A9=3D > 04 =3DC2=3DA0C70E E654 3BB2 FA62 B9F1=3DC2=3DA0
> > --0000000000000e664e059947d3b2-- > > ------------------------------ > > Date: Mon, 9 Dec 2019 11:54:10 -0500 > From: Frank R > Subject: [ceph-users] ceph mgr daemon multiple ip addresses > To: ceph-users > Message-ID: > YBH7Etsm5VmiO_WFEPg(a)mail.gmail.com> > Content-Type: multipart/alternative; > boundary=3D"0000000000004ef36d0599483fd9" > > --0000000000004ef36d0599483fd9 > Content-Type: text/plain; charset=3D"UTF-8" > > Hi all, > > Does anyone know what possible issues can arise if the ceph mgr daemon is > running on a mon node that has 2 ips in the public net range (1 is a > loopback address). > > As I understand the it. mgr will bind to all ips > > FYI - I am not sure why the loopback is there, I am trying to find out. > > thx > Frank > > > > > mlovell - ceph anycast > > --0000000000004ef36d0599483fd9 > Content-Type: text/html; charset=3D"UTF-8" > Content-Transfer-Encoding: quoted-printable > >
Hi all,

Does anyone know what possible > =3D > issues can arise if the ceph mgr daemon is running on a mon node that has > 2=3D > ips in the public net range (1 is a loopback > address).

A=3D > s I understand the it. mgr will bind to all ips

FYI - I > a=3D > m not sure why the loopback is there, I am trying to find > out.
r>
thx
Frank




mlovell - ceph > anycast<=3D > br>
> > --0000000000004ef36d0599483fd9-- > > ------------------------------ > > Date: Mon, 9 Dec 2019 17:24:27 +0000 > From: Bryan Stillwell > Subject: [ceph-users] Re: osdmaps not trimmed until ceph-mon's > restarted (if cluster has a down osd) > To: Dan van der Ster > Cc: Joao Eduardo Luis , "dev(a)ceph.io" , > ceph-users > Message-ID: <9B145B17-6665-4254-8D6A-04A9B37389C3(a)godaddy.com> > Content-Type: text/plain; charset=3D"us-ascii" > > On Nov 18, 2019, at 8:12 AM, Dan van der Ster wrote: > > > > On Fri, Nov 15, 2019 at 4:45 PM Joao Eduardo Luis wrote: > >> > >> On 19/11/14 11:04AM, Gregory Farnum wrote: > >>> On Thu, Nov 14, 2019 at 8:14 AM Dan van der Ster > wrote: > >>>> > >>>> Hi Joao, > >>>> > >>>> I might have found the reason why several of our clusters (and maybe > >>>> Bryan's too) are getting stuck not trimming osdmaps. > >>>> It seems that when an osd fails, the min_last_epoch_clean gets stuck > >>>> forever (even long after HEALTH_OK), until the ceph-mons are > >>>> restarted. > >>>> > >>>> I've updated the ticket: https://tracker.ceph.com/issues/41154 > >>> > >>> Wrong ticket, I think you meant > https://tracker.ceph.com/issues/37875#note-7 > >> > >> I've seen this behavior a long, long time ago, but stopped being able to > >> reproduce it consistently enough to ensure the patch was working > properly. > >> > >> I think I have a patch here: > >> > >> https://github.com/ceph/ceph/pull/19076/commits > >> > >> If you are feeling adventurous, and want to give it a try, let me know. > I'll > >> be happy to forward port it to whatever you are running. > > > > Thanks Joao, this patch is what I had in mind. > > > > I'm trying to evaluate how adventurous this would be -- Is there any > > risk that if a huge number of osds are down all at once (but > > transiently), it would trigger the mon to trim too many maps? > > I would expect that the remaining up OSDs will have a safe, low, > osd_epoch ? > > > > And anyway I guess that your proposed get_min_last_epoch_clean patch > > is equivalent to what we have today if we restart the ceph-mon leader > > while an osd is down. > > Joao, > > I ran into this again today and found over 100,000 osdmaps on all 1,000 > OSDs (~50 TiB of disk space used just by osdmaps). There were down OSDs > (pretty regular occurrence with ~1,000 OSDs) so that matches up with what > Dan found. Then when I restarted all the mon nodes twice the osdmaps > started cleaning up. > > I believe the steps to reproduce would look like this: > > 1. Start with a cluster with at least 1 down osd > 2. Expand the cluster (the bigger the expansion, the more osdmaps that > pile up) > 3. Notice that after the expansion completes and the cluster is healthy > that the old osdmaps aren't cleaned up > > I would be willing to test the fix on our test cluster after 14.2.5 comes > out. Could you make a build based on that release? > > Thanks, > Bryan > > ------------------------------ > > Subject: Digest Footer > > _______________________________________________ > ceph-users mailing list -- ceph-users(a)ceph.io > To unsubscribe send an email to ceph-users-leave(a)ceph.io > %(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s > > > ------------------------------ > > End of ceph-users Digest, Vol 83, Issue 35 > ****************************************** > --=20 *----------------------------------------------------------------------------= -------------* *This email and any files transmitted with it are confidential and=20 intended solely for the use of the individual or entity to whom they are=20 addressed. If you have received this email in error, please notify the=20 system manager. This message contains confidential information and is=20 intended only for the individual named. If you are not the named addressee,=20 you should not disseminate, distribute or copy this email. Please notify=20 the sender immediately by email if you have received this email by mistake=20 and delete this email from your system. If you are not the intended=20 recipient, you are notified that disclosing, copying, distributing or=20 taking any action in reliance on the contents of this information is=20 strictly prohibited.***** =C2=A0**** *Any views or opinions presented in this=20 email are solely those of the author and do not necessarily represent those=20 of the organization. Any information on shares, debentures or similar=20 instruments, recommended product pricing, valuations and the like are for=20 information purposes only. It is not meant to be an instruction or=20 recommendation, as the case may be, to buy or to sell securities, products,=20 services nor an offer to buy or sell securities, products or services=20 unless specifically stated to be so on behalf of the Flipkart group.=20 Employees of=C2=A0the Flipkart group of companies are expressly required not = to=20 make defamatory statements and not to infringe or authorise any=20 infringement of copyright or any other legal right by email communications.=20 Any such communication is contrary to organizational policy and outside the=20 scope of the employment of the individual concerned. The organization will=20 not accept any liability in respect of such communication, and the employee=20 responsible will be personally liable for any damages or other liability=20 arising.***** =C2=A0**** *Our organization accepts no liability for the=20 content of this email, or for the consequences of any actions taken on the=20 basis of the information=C2=A0*provided,*=C2=A0unless that information is=20 subsequently confirmed in writing. If you are not the intended recipient,=20 you are notified that disclosing, copying, distributing or taking any=20 action in reliance on the contents of this information is strictly=20 prohibited.* _----------------------------------------------------------------------------= -------------_ --===============3094636150463115708== Content-Type: text/html Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.htm" MIME-Version: 1.0 PGRpdiBkaXI9ImF1dG8iPjxkaXY+SGkgUm9iZXJ0IGFuZCBBcmFzaCzCoDwvZGl2PjxkaXYgZGly PSJhdXRvIj5BIGNvdXBsZSBvZiBwb2ludGVycyBhbmQgYXNrcyB0aGF0IG1pZ2h0IGhlbHAuPC9k aXY+PGRpdiBkaXI9ImF1dG8iPjxicj48L2Rpdj48ZGl2IGRpcj0iYXV0byI+MS4gQ2FuIHlvdSBw b2ludCB0byB0aGUgY29kZSB5b3UgYXJlIHVzaW5nIGZvciBsaXN0aW5nIHRoZSBidWNrZXRzLjwv ZGl2PjxkaXYgZGlyPSJhdXRvIj4yLiBXaGljaCByZWxlYXNlIGlzIHRoZSBjbHVzdGVyIHJ1bm5p bmcgb24uLj88L2Rpdj48ZGl2IGRpcj0iYXV0byI+My4gV2hhdCBpcyB0aGUgbnVtYmVyIG9mIHNo YXJkcyB0aGF0IGhhdmUgYmVlbiBjb25maWd1cmVkIGluIHRoZSBidWNrZXQgaW5kZXggZm9yIHRo ZSBzYWlkIG1lbnRpb25lZCBidWNrZXQuLi4/PC9kaXY+PGRpdiBkaXI9ImF1dG8iPjQuSGF2ZSB5 b3UgdHJpZWQgdGltaW5nIHRoZSBsaXN0aW5nIHByb2Nlc3MsIGFzIHRvIHdoZXJlIGRvZXMgdGhl IHNsb3cgZG93biBiZWdhbiwgaW4gb3RoZXIgd29yZHMgYWZ0ZXIgMSBtaWxsaW9uIGVudHJpZXMs IDIgbWlsbGlvbiBlbnRyaSBzLCBvciB0aGUgbGlzdGluZyBpcyBzbG93IGF0IHBlciBrZXkgbGV2 ZWwuPC9kaXY+PGRpdiBkaXI9ImF1dG8iPjUuIFlvdSBjb3VsZCBwcm9maWxlIHRoZSB0aW1pbmcg Zm9yIGV2ZXJ5IDEwMDAwIGVudHJpZXMgb3IgMTAwMDAwPC9kaXY+PGRpdiBkaXI9ImF1dG8iPjYu V2hpbGUgdXNpbmcgYSBhZGRpdGlvbmFsIG1ldGEsIGxpa2UgcmVkaXMgaW4gbWVtb3J5IG1ldGEg c3RvcmUgY291bGQgYmUgYSBzb2x1dGlvbiwgYnV0IG1vdmluZyBtYW55IG1vdmluZyBwYXJ0cyBh bHRvZ2V0aGVyIGJlY29tZXMgYSBoZWFkYWNoZS48L2Rpdj48ZGl2IGRpcj0iYXV0byI+Ny4gTGV0 JiMzOTtzIGxvb2sgYXQgdGhlIHR1bmViYWxlcyBmaXJzdCwgdG8gc2VlIHdoZXJlIHRoZSBib3R0 bGVuZWNrIGlzLjwvZGl2PjxkaXYgZGlyPSJhdXRvIj44LkFub3RoZXIgZ29vZCBwcmFjdGljZSAs IG9mIHBvc3NpYmxlIGluIHlvdXIgZGVwbG95bWVudCB3b3VsZCBiZSwgaWYgeW91IGNhbiByZXN0 cmljdCBvYmplY3RzIHBlciBidWNrZXQsIHRvIHNheSAuNSBtaWxsaW9uIG9yIDEgbWlsbGlvbiwg YW5kIGhhdmUgYSBjbGllbnQgc2lkZSBoYXNoL3BsYWNlbWVudCBhbGdvcml0aG0gZm9yIHdyaXRp bmcgaW50byB0aGUgYnVja2V0cy48L2Rpdj48ZGl2IGRpcj0iYXV0byI+OS4gSWYgdGhlc2UgMzAg bWlsbGlvbiBlbnRyaWVzIGFyZSBzdGF0aWMsIGlmZiAsIHRoZW4gcHJlZmV0Y2hpbmcgdGhlIG1h cmtlcnMgLCBhbmQgcnVubmluZyBhcmUgbXVsdGl0aHJlYWRlZCBmbG93IG1ha2VzIHNlbnNlLiBC dXQgYWdhaW4gaWYgdGhlc2UgYXJlIHN0YXRpYyB3aHkgd291bGQgeW91IG5vdCBzdG9yZSB0aGVt IGluIGEgYmxvYiBhbHRvZ2V0aGVyLCBzbyBjb250cmFpbmRpY2F0aW5nIG15IG93biBwb2ludC48 L2Rpdj48ZGl2IGRpcj0iYXV0byI+MTAuQWxzbyBkbyBsb29rIGNlcGggbGlzdHMgYW5kIG1haWxl cnMgZm9yIG9yZGVyZWQgVnMgdW5vcmRlcmVkIGxpc3RpbmcocmVtZW1iZXIgc2VlaW5nIHNvbWUg cXVlcnkgYXJvdW5kIGl0KTwvZGl2PjxkaXYgZGlyPSJhdXRvIj48YnI+PC9kaXY+PGRpdiBkaXI9 ImF1dG8iPlRoYW5rczwvZGl2PjxkaXYgZGlyPSJhdXRvIj5Sb21pdCBNaXNyYTwvZGl2PjxkaXYg ZGlyPSJhdXRvIj48YnI+PGRpdiBjbGFzcz0iZ21haWxfcXVvdGUiIGRpcj0iYXV0byI+PGRpdiBk aXI9Imx0ciIgY2xhc3M9ImdtYWlsX2F0dHIiPk9uIE1vbiwgOSBEZWMgMjAxOSwgMjI6NTYgLCAm bHQ7PGEgaHJlZj0ibWFpbHRvOmNlcGgtdXNlcnMtcmVxdWVzdEBjZXBoLmlvIj5jZXBoLXVzZXJz LXJlcXVlc3RAY2VwaC5pbzwvYT4mZ3Q7IHdyb3RlOjxicj48L2Rpdj48YmxvY2txdW90ZSBjbGFz cz0iZ21haWxfcXVvdGUiIHN0eWxlPSJtYXJnaW46MCAwIDAgLjhleDtib3JkZXItbGVmdDoxcHgg I2NjYyBzb2xpZDtwYWRkaW5nLWxlZnQ6MWV4Ij5TZW5kIGNlcGgtdXNlcnMgbWFpbGluZyBsaXN0 IHN1Ym1pc3Npb25zIHRvPGJyPgrCoCDCoCDCoCDCoCA8YSBocmVmPSJtYWlsdG86Y2VwaC11c2Vy c0BjZXBoLmlvIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub3JlZmVycmVyIj5jZXBoLXVzZXJzQGNl cGguaW88L2E+PGJyPgo8YnI+ClRvIHN1YnNjcmliZSBvciB1bnN1YnNjcmliZSB2aWEgZW1haWws IHNlbmQgYSBtZXNzYWdlIHdpdGggc3ViamVjdCBvcjxicj4KYm9keSAmIzM5O2hlbHAmIzM5OyB0 bzxicj4KwqAgwqAgwqAgwqAgPGEgaHJlZj0ibWFpbHRvOmNlcGgtdXNlcnMtcmVxdWVzdEBjZXBo LmlvIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub3JlZmVycmVyIj5jZXBoLXVzZXJzLXJlcXVlc3RA Y2VwaC5pbzwvYT48YnI+Cjxicj4KWW91IGNhbiByZWFjaCB0aGUgcGVyc29uIG1hbmFnaW5nIHRo ZSBsaXN0IGF0PGJyPgrCoCDCoCDCoCDCoCA8YSBocmVmPSJtYWlsdG86Y2VwaC11c2Vycy1vd25l ckBjZXBoLmlvIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub3JlZmVycmVyIj5jZXBoLXVzZXJzLW93 bmVyQGNlcGguaW88L2E+PGJyPgo8YnI+CldoZW4gcmVwbHlpbmcsIHBsZWFzZSBlZGl0IHlvdXIg U3ViamVjdCBsaW5lIHNvIGl0IGlzIG1vcmUgc3BlY2lmaWM8YnI+CnRoYW4gJnF1b3Q7UmU6IENv bnRlbnRzIG9mIGNlcGgtdXNlcnMgZGlnZXN0Li4uJnF1b3Q7PGJyPgo8YnI+ClRvZGF5JiMzOTtz IFRvcGljczo8YnI+Cjxicj4KwqAgwqAxLiBSR1cgbGlzdGluZyBtaWxsaW9ucyBvZiBvYmplY3Rz IHRha2VzIHRvbyBtdWNoIHRpbWUgKEFyYXNoIFNoYW1zKTxicj4KwqAgwqAyLiBSZTogUkdXIGxp c3RpbmcgbWlsbGlvbnMgb2Ygb2JqZWN0cyB0YWtlcyB0b28gbXVjaCB0aW1lPGJyPgrCoCDCoCDC oCAoUm9iZXJ0IExlQmxhbmMpPGJyPgrCoCDCoDMuIGNlcGggbWdyIGRhZW1vbiBtdWx0aXBsZSBp cCBhZGRyZXNzZXMgKEZyYW5rIFIpPGJyPgrCoCDCoDQuIFJlOiBvc2RtYXBzIG5vdCB0cmltbWVk IHVudGlsIGNlcGgtbW9uJiMzOTtzIHJlc3RhcnRlZCAoaWYgY2x1c3RlciBoYXMgYSBkb3duIG9z ZCk8YnI+CsKgIMKgIMKgIChCcnlhbiBTdGlsbHdlbGwpPGJyPgo8YnI+Cjxicj4KLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLTxicj4KPGJyPgpEYXRlOiBNb24sIDkgRGVjIDIwMTkgMTU6NDY6MDQgKzAwMDA8YnI+CkZy b206IEFyYXNoIFNoYW1zICZsdDs8YSBocmVmPSJtYWlsdG86YXJhNHNoQGhvdG1haWwuY29tIiB0 YXJnZXQ9Il9ibGFuayIgcmVsPSJub3JlZmVycmVyIj5hcmE0c2hAaG90bWFpbC5jb208L2E+Jmd0 Ozxicj4KU3ViamVjdDogW2NlcGgtdXNlcnNdIFJHVyBsaXN0aW5nIG1pbGxpb25zIG9mIG9iamVj dHMgdGFrZXMgdG9vIG11Y2g8YnI+CsKgIMKgIMKgIMKgIHRpbWU8YnI+ClRvOiAmcXVvdDs8YSBo cmVmPSJtYWlsdG86Y2VwaC11c2Vyc0BjZXBoLmlvIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub3Jl ZmVycmVyIj5jZXBoLXVzZXJzQGNlcGguaW88L2E+JnF1b3Q7ICZsdDs8YSBocmVmPSJtYWlsdG86 Y2VwaC11c2Vyc0BjZXBoLmlvIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub3JlZmVycmVyIj5jZXBo LXVzZXJzQGNlcGguaW88L2E+Jmd0Ozxicj4KTWVzc2FnZS1JRDrCoCAmbHQ7Q1dYUDI2NU1CMTI4 Njc5REU5RTZCMkE2Q0EyODlCMTY0OTI1ODBAQ1dYUDI2NU1CMTI4Ni5HQlI8YnI+CsKgIMKgIMKg IMKgIDxhIGhyZWY9Imh0dHA6Ly9QMjY1LlBST0QuT1VUTE9PSy5DT00iIHJlbD0ibm9yZWZlcnJl ciBub3JlZmVycmVyIiB0YXJnZXQ9Il9ibGFuayI+UDI2NS5QUk9ELk9VVExPT0suQ09NPC9hPiZn dDs8YnI+CkNvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L2FsdGVybmF0aXZlO8KgIMKgIGJvdW5kYXJ5 PSZxdW90O18wMDBfQ1dYUDI2NU1CMTI4Njc5PGJyPgrCoCDCoCDCoCDCoCBERTlFNkIyQTZDQTI4 OUIxNjQ5MjU4MENXWFAyNjVNQjEyODZHQlJQXyZxdW90Ozxicj4KPGJyPgotLV8wMDBfQ1dYUDI2 NU1CMTI4Njc5REU5RTZCMkE2Q0EyODlCMTY0OTI1ODBDV1hQMjY1TUIxMjg2R0JSUF88YnI+CkNv bnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0mcXVvdDtpc28tODg1OS0xJnF1b3Q7PGJy PgpDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBxdW90ZWQtcHJpbnRhYmxlPGJyPgo8YnI+CkRl YXIgQWxsLDxicj4KPGJyPgpJIGhhdmUgYWxtb3N0IDMwIG1pbGxpb24gb2JqZWN0cyBhbmQgSSB3 YW50IHRvIGxpc3QgdGhlbSBhbmQgaW5kZXggdGhlbSBzb209PGJyPgpld2hlcmUgZWxzZSw8YnI+ CkltIHVzaW5nIGJvdG8zIHdpdGggY29udGludWF0aW9uIE1hcmtlciBidXQgaXQgdGFrZXMgYWxt b3N0IDkgaG91cnM8YnI+Cjxicj4KY2FuIEkgcnVuIGl0IGluIG11bHRpcGxlIHRocmVhZHMgdG8g bWFrZSBpdCBmYXN0ZXI/IHdoYXQgc29sdXRpb24gZG8geW91IHN1PTxicj4KZ2dlc3QgdG8gc3Bl ZWR1cCB0aGlzIHByb2Nlc3MsPGJyPgo8YnI+Cjxicj4KVGhhbmtzPGJyPgo8YnI+Cjxicj4KLS1f MDAwX0NXWFAyNjVNQjEyODY3OURFOUU2QjJBNkNBMjg5QjE2NDkyNTgwQ1dYUDI2NU1CMTI4NkdC UlBfPGJyPgpDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD0mcXVvdDtpc28tODg1OS0x JnF1b3Q7PGJyPgpDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBxdW90ZWQtcHJpbnRhYmxlPGJy Pgo8YnI+CiZsdDtodG1sJmd0Ozxicj4KJmx0O2hlYWQmZ3Q7PGJyPgombHQ7bWV0YSBodHRwLWVx dWl2PTNEJnF1b3Q7Q29udGVudC1UeXBlJnF1b3Q7IGNvbnRlbnQ9M0QmcXVvdDt0ZXh0L2h0bWw7 IGNoYXJzZXQ9M0Rpc28tODg1OS09PGJyPgoxJnF1b3Q7Jmd0Ozxicj4KJmx0O3N0eWxlIHR5cGU9 M0QmcXVvdDt0ZXh0L2NzcyZxdW90OyBzdHlsZT0zRCZxdW90O2Rpc3BsYXk6bm9uZTsmcXVvdDsm Z3Q7IFAge21hcmdpbi10b3A6MDttYXJnaW4tYm89PGJyPgp0dG9tOjA7fSAmbHQ7L3N0eWxlJmd0 Ozxicj4KJmx0Oy9oZWFkJmd0Ozxicj4KJmx0O2JvZHkgZGlyPTNEJnF1b3Q7bHRyJnF1b3Q7Jmd0 Ozxicj4KJmx0O2RpdiBzdHlsZT0zRCZxdW90O2ZvbnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRp Y2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDs9PGJyPgrCoGNvbG9yOiByZ2IoMCwgMCwg MCk7JnF1b3Q7Jmd0Ozxicj4KRGVhciBBbGwsJmFtcDtuYnNwOyZsdDsvZGl2Jmd0Ozxicj4KJmx0 O2RpdiBzdHlsZT0zRCZxdW90O2ZvbnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRpY2EsIHNhbnMt c2VyaWY7IGZvbnQtc2l6ZTogMTJwdDs9PGJyPgrCoGNvbG9yOiByZ2IoMCwgMCwgMCk7JnF1b3Q7 Jmd0Ozxicj4KJmx0O2JyJmd0Ozxicj4KJmx0Oy9kaXYmZ3Q7PGJyPgombHQ7ZGl2IHN0eWxlPTNE JnF1b3Q7Zm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1z aXplOiAxMnB0Oz08YnI+CsKgY29sb3I6IHJnYigwLCAwLCAwKTsmcXVvdDsmZ3Q7PGJyPgpJIGhh dmUgYWxtb3N0IDMwIG1pbGxpb24gb2JqZWN0cyBhbmQgSSB3YW50IHRvIGxpc3QgdGhlbSBhbmQg aW5kZXggdGhlbSBzb209PGJyPgpld2hlcmUgZWxzZSwmYW1wO25ic3A7Jmx0Oy9kaXYmZ3Q7PGJy PgombHQ7ZGl2IHN0eWxlPTNEJnF1b3Q7Zm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZldGljYSwg c2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0Oz08YnI+CsKgY29sb3I6IHJnYigwLCAwLCAwKTsm cXVvdDsmZ3Q7PGJyPgpJbSB1c2luZyBib3RvMyB3aXRoIGNvbnRpbnVhdGlvbiBNYXJrZXIgYnV0 IGl0IHRha2VzIGFsbW9zdCA5IGhvdXJzJmx0Oy9kaXYmZ3Q7PGJyPgombHQ7ZGl2IHN0eWxlPTNE JnF1b3Q7Zm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1z aXplOiAxMnB0Oz08YnI+CsKgY29sb3I6IHJnYigwLCAwLCAwKTsmcXVvdDsmZ3Q7PGJyPgombHQ7 YnImZ3Q7PGJyPgombHQ7L2RpdiZndDs8YnI+CiZsdDtkaXYgc3R5bGU9M0QmcXVvdDtmb250LWZh bWlseTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7PTxi cj4KwqBjb2xvcjogcmdiKDAsIDAsIDApOyZxdW90OyZndDs8YnI+CmNhbiBJIHJ1biBpdCBpbiBt dWx0aXBsZSB0aHJlYWRzIHRvIG1ha2UgaXQgZmFzdGVyPyB3aGF0IHNvbHV0aW9uIGRvIHlvdSBz dT08YnI+CmdnZXN0IHRvIHNwZWVkdXAgdGhpcyBwcm9jZXNzLCZhbXA7bmJzcDsmbHQ7L2RpdiZn dDs8YnI+CiZsdDtkaXYgc3R5bGU9M0QmcXVvdDtmb250LWZhbWlseTogQ2FsaWJyaSwgSGVsdmV0 aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7PTxicj4KwqBjb2xvcjogcmdiKDAsIDAs IDApOyZxdW90OyZndDs8YnI+CiZsdDticiZndDs8YnI+CiZsdDsvZGl2Jmd0Ozxicj4KJmx0O2Rp diBzdHlsZT0zRCZxdW90O2ZvbnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRpY2EsIHNhbnMtc2Vy aWY7IGZvbnQtc2l6ZTogMTJwdDs9PGJyPgrCoGNvbG9yOiByZ2IoMCwgMCwgMCk7JnF1b3Q7Jmd0 Ozxicj4KJmx0O2JyJmd0Ozxicj4KJmx0Oy9kaXYmZ3Q7PGJyPgombHQ7ZGl2IHN0eWxlPTNEJnF1 b3Q7Zm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXpl OiAxMnB0Oz08YnI+CsKgY29sb3I6IHJnYigwLCAwLCAwKTsmcXVvdDsmZ3Q7PGJyPgpUaGFua3Mm YW1wO25ic3A7Jmx0Oy9kaXYmZ3Q7PGJyPgombHQ7ZGl2IHN0eWxlPTNEJnF1b3Q7Zm9udC1mYW1p bHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0Oz08YnI+ CsKgY29sb3I6IHJnYigwLCAwLCAwKTsmcXVvdDsmZ3Q7PGJyPgombHQ7YnImZ3Q7PGJyPgombHQ7 L2RpdiZndDs8YnI+CiZsdDsvYm9keSZndDs8YnI+CiZsdDsvaHRtbCZndDs8YnI+Cjxicj4KLS1f MDAwX0NXWFAyNjVNQjEyODY3OURFOUU2QjJBNkNBMjg5QjE2NDkyNTgwQ1dYUDI2NU1CMTI4NkdC UlBfLS08YnI+Cjxicj4KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPGJyPgo8YnI+CkRh dGU6IE1vbiwgOSBEZWMgMjAxOSAwODoyMzo1NSAtMDgwMDxicj4KRnJvbTogUm9iZXJ0IExlQmxh bmMgJmx0OzxhIGhyZWY9Im1haWx0bzpyb2JlcnRAbGVibGFuY25ldC51cyIgdGFyZ2V0PSJfYmxh bmsiIHJlbD0ibm9yZWZlcnJlciI+cm9iZXJ0QGxlYmxhbmNuZXQudXM8L2E+Jmd0Ozxicj4KU3Vi amVjdDogW2NlcGgtdXNlcnNdIFJlOiBSR1cgbGlzdGluZyBtaWxsaW9ucyBvZiBvYmplY3RzIHRh a2VzIHRvbzxicj4KwqAgwqAgwqAgwqAgbXVjaCB0aW1lPGJyPgpUbzogQXJhc2ggU2hhbXMgJmx0 OzxhIGhyZWY9Im1haWx0bzphcmE0c2hAaG90bWFpbC5jb20iIHRhcmdldD0iX2JsYW5rIiByZWw9 Im5vcmVmZXJyZXIiPmFyYTRzaEBob3RtYWlsLmNvbTwvYT4mZ3Q7PGJyPgpDYzogJnF1b3Q7PGEg aHJlZj0ibWFpbHRvOmNlcGgtdXNlcnNAY2VwaC5pbyIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9y ZWZlcnJlciI+Y2VwaC11c2Vyc0BjZXBoLmlvPC9hPiZxdW90OyAmbHQ7PGEgaHJlZj0ibWFpbHRv OmNlcGgtdXNlcnNAY2VwaC5pbyIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9yZWZlcnJlciI+Y2Vw aC11c2Vyc0BjZXBoLmlvPC9hPiZndDs8YnI+Ck1lc3NhZ2UtSUQ6PGJyPgrCoCDCoCDCoCDCoCAm bHQ7Q0FBTkxqRm9adThMRTBlSDJ2QjlRQXJBT1pKZjRPZm04Vj08YSBocmVmPSJtYWlsdG86akFX LSUyQlpQT0ZTLWY5T2FnQG1haWwuZ21haWwuY29tIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub3Jl ZmVycmVyIj5qQVctK1pQT0ZTLWY5T2FnQG1haWwuZ21haWwuY29tPC9hPiZndDs8YnI+CkNvbnRl bnQtVHlwZTogbXVsdGlwYXJ0L2FsdGVybmF0aXZlOzxicj4KwqAgwqAgwqAgwqAgYm91bmRhcnk9 JnF1b3Q7MDAwMDAwMDAwMDAwMGU2NjRlMDU5OTQ3ZDNiMiZxdW90Ozxicj4KPGJyPgotLTAwMDAw MDAwMDAwMDBlNjY0ZTA1OTk0N2QzYjI8YnI+CkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hh cnNldD0mcXVvdDtVVEYtOCZxdW90Ozxicj4KPGJyPgpPbiBNb24sIERlYyA5LCAyMDE5IGF0IDc6 NDcgQU0gQXJhc2ggU2hhbXMgJmx0OzxhIGhyZWY9Im1haWx0bzphcmE0c2hAaG90bWFpbC5jb20i IHRhcmdldD0iX2JsYW5rIiByZWw9Im5vcmVmZXJyZXIiPmFyYTRzaEBob3RtYWlsLmNvbTwvYT4m Z3Q7IHdyb3RlOjxicj4KPGJyPgomZ3Q7IERlYXIgQWxsLDxicj4KJmd0Ozxicj4KJmd0OyBJIGhh dmUgYWxtb3N0IDMwIG1pbGxpb24gb2JqZWN0cyBhbmQgSSB3YW50IHRvIGxpc3QgdGhlbSBhbmQg aW5kZXggdGhlbTxicj4KJmd0OyBzb21ld2hlcmUgZWxzZSw8YnI+CiZndDsgSW0gdXNpbmcgYm90 bzMgd2l0aCBjb250aW51YXRpb24gTWFya2VyIGJ1dCBpdCB0YWtlcyBhbG1vc3QgOSBob3Vyczxi cj4KJmd0Ozxicj4KJmd0OyBjYW4gSSBydW4gaXQgaW4gbXVsdGlwbGUgdGhyZWFkcyB0byBtYWtl IGl0IGZhc3Rlcj8gd2hhdCBzb2x1dGlvbiBkbyB5b3U8YnI+CiZndDsgc3VnZ2VzdCB0byBzcGVl ZHVwIHRoaXMgcHJvY2Vzcyw8YnI+CiZndDs8YnI+CiZndDs8YnI+CiZndDsgVGhhbmtzPGJyPgom Z3Q7PGJyPgo8YnI+CkkmIzM5O3ZlIHRob3VnaHQgYWJvdXQgaW5kZXhpbmcgb2JqZWN0cyBlbHNl d2hlcmUgYXMgd2VsbC4gT25lIHRob3VnaHQgSSBoYWQ8YnI+CndhcyBob29raW5nIGludG8gdGhl IEhUVFAgZmxvdyB3aGVyZSBhIFBVVCBvciBERUwgd291bGQgdXBkYXRlIHRoZSBvYmplY3RzPGJy PgppbiBzb21lIGtpbmQgb2YgZGF0YWJhc2UgKGFzeW5jIG9mIGNvdXJzZSkuIFdlIGNvdWxkIGFs c28gZ2F0aGVyIHN0YXRzIHdpdGg8YnI+CkdFVCBhbmQgUE9TVC4gSW5pdGlhbGx5LCBteSB0aG91 Z2h0cyB3ZXJlIHRvIGhvb2sgaW50byBoYXByb3h5IHNpbmNlIHdlPGJyPgphbHJlYWR5IHVzZSBp dCwgYnV0IHBvc3NpYmx5IFJHVyBpZiB0aGF0IGlzIGFuIG9wdGlvbi4gVGhhdCB3YXkgaXQgd291 bGQ8YnI+CmFsd2F5cyBiZSB1cCB0byBkYXRlIGFuZCBub3QgaGF2ZSB0byBkbyBiaWcgc2NhbnMg b24gdGhlIGJ1Y2tldHMgKG91cjxicj4KYnVja2V0cyB3b3VsZCBub3QgcGVyZm9ybSB3ZWxsIHdp dGggdGhpcykuIEkgaGF2ZW4mIzM5O3QgYWN0dWFsbHkgZ290dGVuIHRvIHRoZTxicj4KaW1wbGVt ZW50YXRpb24gcGhhc2Ugb2YgdGhpcyBpZGVhLjxicj4KPGJyPgotLS0tLS0tLS0tLS0tLS0tPGJy PgpSb2JlcnQgTGVCbGFuYzxicj4KUEdQIEZpbmdlcnByaW50IDc5QTIgOUNBNCA2Q0M0IDQ1REQg QTkwNMKgIEM3MEUgRTY1NCAzQkIyIEZBNjIgQjlGMTxicj4KPGJyPgotLTAwMDAwMDAwMDAwMDBl NjY0ZTA1OTk0N2QzYjI8YnI+CkNvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PSZxdW90 O1VURi04JnF1b3Q7PGJyPgpDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBxdW90ZWQtcHJpbnRh YmxlPGJyPgo8YnI+CiZsdDtkaXYgZGlyPTNEJnF1b3Q7bHRyJnF1b3Q7Jmd0OyZsdDtkaXYgZGly PTNEJnF1b3Q7bHRyJnF1b3Q7Jmd0O09uIE1vbiwgRGVjIDksIDIwMTkgYXQgNzo0NyBBTSBBcmFz aCBTaGFtPTxicj4KcyAmYW1wO2x0OyZsdDthIGhyZWY9M0QmcXVvdDttYWlsdG86PGEgaHJlZj0i bWFpbHRvOmFyYTRzaEBob3RtYWlsLmNvbSIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9yZWZlcnJl ciI+YXJhNHNoQGhvdG1haWwuY29tPC9hPiZxdW90OyZndDs8YSBocmVmPSJtYWlsdG86YXJhNHNo QGhvdG1haWwuY29tIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub3JlZmVycmVyIj5hcmE0c2hAaG90 bWFpbC5jb208L2E+Jmx0Oy9hJmd0OyZhbXA7Z3Q7IHdyb3Q9PGJyPgplOiZsdDticiZndDsmbHQ7 L2RpdiZndDsmbHQ7ZGl2IGNsYXNzPTNEJnF1b3Q7Z21haWxfcXVvdGUmcXVvdDsmZ3Q7Jmx0O2Js b2NrcXVvdGUgY2xhc3M9M0QmcXVvdDtnbWFpbF9xdW90ZSZxdW90OyBzdD08YnI+CnlsZT0zRCZx dW90O21hcmdpbjowcHggMHB4IDBweCAwLjhleDtib3JkZXItbGVmdDoxcHggc29saWQgcmdiKDIw NCwyMDQsMjA0KTtwYWRkPTxicj4KaW5nLWxlZnQ6MWV4JnF1b3Q7Jmd0Ozxicj4KPGJyPgo8YnI+ Cjxicj4KPGJyPgombHQ7ZGl2IGRpcj0zRCZxdW90O2x0ciZxdW90OyZndDs8YnI+CiZsdDtkaXYg c3R5bGU9M0QmcXVvdDtmb250LWZhbWlseTpDYWxpYnJpLEhlbHZldGljYSxzYW5zLXNlcmlmO2Zv bnQtc2l6ZToxMnB0O2NvbG9yPTxicj4KOnJnYigwLDAsMCkmcXVvdDsmZ3Q7PGJyPgpEZWFyIEFs bCw9QzI9QTAmbHQ7L2RpdiZndDs8YnI+CiZsdDtkaXYgc3R5bGU9M0QmcXVvdDtmb250LWZhbWls eTpDYWxpYnJpLEhlbHZldGljYSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB0O2NvbG9yPTxicj4K OnJnYigwLDAsMCkmcXVvdDsmZ3Q7PGJyPgombHQ7YnImZ3Q7PGJyPgombHQ7L2RpdiZndDs8YnI+ CiZsdDtkaXYgc3R5bGU9M0QmcXVvdDtmb250LWZhbWlseTpDYWxpYnJpLEhlbHZldGljYSxzYW5z LXNlcmlmO2ZvbnQtc2l6ZToxMnB0O2NvbG9yPTxicj4KOnJnYigwLDAsMCkmcXVvdDsmZ3Q7PGJy PgpJIGhhdmUgYWxtb3N0IDMwIG1pbGxpb24gb2JqZWN0cyBhbmQgSSB3YW50IHRvIGxpc3QgdGhl bSBhbmQgaW5kZXggdGhlbSBzb209PGJyPgpld2hlcmUgZWxzZSw9QzI9QTAmbHQ7L2RpdiZndDs8 YnI+CiZsdDtkaXYgc3R5bGU9M0QmcXVvdDtmb250LWZhbWlseTpDYWxpYnJpLEhlbHZldGljYSxz YW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB0O2NvbG9yPTxicj4KOnJnYigwLDAsMCkmcXVvdDsmZ3Q7 PGJyPgpJbSB1c2luZyBib3RvMyB3aXRoIGNvbnRpbnVhdGlvbiBNYXJrZXIgYnV0IGl0IHRha2Vz IGFsbW9zdCA5IGhvdXJzJmx0Oy9kaXYmZ3Q7PGJyPgombHQ7ZGl2IHN0eWxlPTNEJnF1b3Q7Zm9u dC1mYW1pbHk6Q2FsaWJyaSxIZWx2ZXRpY2Esc2Fucy1zZXJpZjtmb250LXNpemU6MTJwdDtjb2xv cj08YnI+CjpyZ2IoMCwwLDApJnF1b3Q7Jmd0Ozxicj4KJmx0O2JyJmd0Ozxicj4KJmx0Oy9kaXYm Z3Q7PGJyPgombHQ7ZGl2IHN0eWxlPTNEJnF1b3Q7Zm9udC1mYW1pbHk6Q2FsaWJyaSxIZWx2ZXRp Y2Esc2Fucy1zZXJpZjtmb250LXNpemU6MTJwdDtjb2xvcj08YnI+CjpyZ2IoMCwwLDApJnF1b3Q7 Jmd0Ozxicj4KY2FuIEkgcnVuIGl0IGluIG11bHRpcGxlIHRocmVhZHMgdG8gbWFrZSBpdCBmYXN0 ZXI/IHdoYXQgc29sdXRpb24gZG8geW91IHN1PTxicj4KZ2dlc3QgdG8gc3BlZWR1cCB0aGlzIHBy b2Nlc3MsPUMyPUEwJmx0Oy9kaXYmZ3Q7PGJyPgombHQ7ZGl2IHN0eWxlPTNEJnF1b3Q7Zm9udC1m YW1pbHk6Q2FsaWJyaSxIZWx2ZXRpY2Esc2Fucy1zZXJpZjtmb250LXNpemU6MTJwdDtjb2xvcj08 YnI+CjpyZ2IoMCwwLDApJnF1b3Q7Jmd0Ozxicj4KJmx0O2JyJmd0Ozxicj4KJmx0Oy9kaXYmZ3Q7 PGJyPgombHQ7ZGl2IHN0eWxlPTNEJnF1b3Q7Zm9udC1mYW1pbHk6Q2FsaWJyaSxIZWx2ZXRpY2Es c2Fucy1zZXJpZjtmb250LXNpemU6MTJwdDtjb2xvcj08YnI+CjpyZ2IoMCwwLDApJnF1b3Q7Jmd0 Ozxicj4KJmx0O2JyJmd0Ozxicj4KJmx0Oy9kaXYmZ3Q7PGJyPgombHQ7ZGl2IHN0eWxlPTNEJnF1 b3Q7Zm9udC1mYW1pbHk6Q2FsaWJyaSxIZWx2ZXRpY2Esc2Fucy1zZXJpZjtmb250LXNpemU6MTJw dDtjb2xvcj08YnI+CjpyZ2IoMCwwLDApJnF1b3Q7Jmd0Ozxicj4KVGhhbmtzPUMyPUEwJmx0Oy9k aXYmZ3Q7Jmx0Oy9kaXYmZ3Q7Jmx0Oy9ibG9ja3F1b3RlJmd0OyZsdDtkaXYgY2xhc3M9M0QmcXVv dDtnbWFpbF9xdW90ZSZxdW90OyZndDsmbHQ7YnImZ3Q7Jmx0Oy9kaXYmZ3Q7Jmx0Oz08YnI+CmRp diBjbGFzcz0zRCZxdW90O2dtYWlsX3F1b3RlJnF1b3Q7Jmd0O0kmYW1wOyMzOTt2ZSB0aG91Z2h0 IGFib3V0IGluZGV4aW5nIG9iamVjdHMgZWxzZXdoZXJlPTxicj4KwqBhcyB3ZWxsLiBPbmUgdGhv dWdodCBJIGhhZCB3YXMgaG9va2luZyBpbnRvIHRoZSBIVFRQIGZsb3cgd2hlcmUgYSBQVVQgb3Ig RD08YnI+CkVMIHdvdWxkIHVwZGF0ZSB0aGUgb2JqZWN0cyBpbiBzb21lIGtpbmQgb2YgZGF0YWJh c2UgKGFzeW5jIG9mIGNvdXJzZSkuIFdlID08YnI+CmNvdWxkIGFsc28gZ2F0aGVyIHN0YXRzIHdp dGggR0VUIGFuZCBQT1NULiBJbml0aWFsbHksIG15IHRob3VnaHRzIHdlcmUgdG8gaD08YnI+Cm9v ayBpbnRvIGhhcHJveHkgc2luY2Ugd2UgYWxyZWFkeSB1c2UgaXQsIGJ1dCBwb3NzaWJseSBSR1cg aWYgdGhhdCBpcyBhbiBvcD08YnI+CnRpb24uIFRoYXQgd2F5IGl0IHdvdWxkIGFsd2F5cyBiZSB1 cCB0byBkYXRlIGFuZCBub3QgaGF2ZSB0byBkbyBiaWcgc2NhbnMgbz08YnI+Cm4gdGhlIGJ1Y2tl dHMgKG91ciBidWNrZXRzIHdvdWxkIG5vdCBwZXJmb3JtIHdlbGwgd2l0aCB0aGlzKS4gSSBoYXZl biZhbXA7IzM5O3Q9PGJyPgrCoGFjdHVhbGx5IGdvdHRlbiB0byB0aGUgaW1wbGVtZW50YXRpb24g cGhhc2Ugb2YgdGhpcyBpZGVhLiZsdDsvZGl2Jmd0OyZsdDticiBjbGVhcj08YnI+Cj0zRCZxdW90 O2FsbCZxdW90OyZndDsmbHQ7ZGl2Jmd0OyZsdDtkaXYgZGlyPTNEJnF1b3Q7bHRyJnF1b3Q7IGNs YXNzPTNEJnF1b3Q7Z21haWxfc2lnbmF0dXJlJnF1b3Q7Jmd0Oy0tLS0tLS0tLS0tLS0tLS0mbHQ7 Yj08YnI+CnImZ3Q7Um9iZXJ0IExlQmxhbmMmbHQ7YnImZ3Q7Jmx0Oy9kaXYmZ3Q7Jmx0Oy9kaXYm Z3Q7Jmx0O2RpdiZndDtQR1AgRmluZ2VycHJpbnQgNzlBMiA5Q0E0IDZDQzQgNDVERCBBOT08YnI+ CjA0ID1DMj1BMEM3MEUgRTY1NCAzQkIyIEZBNjIgQjlGMT1DMj1BMCZsdDsvZGl2Jmd0OyZsdDsv ZGl2Jmd0OyZsdDsvZGl2Jmd0Ozxicj4KPGJyPgotLTAwMDAwMDAwMDAwMDBlNjY0ZTA1OTk0N2Qz YjItLTxicj4KPGJyPgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08YnI+Cjxicj4KRGF0 ZTogTW9uLCA5IERlYyAyMDE5IDExOjU0OjEwIC0wNTAwPGJyPgpGcm9tOiBGcmFuayBSICZsdDs8 YSBocmVmPSJtYWlsdG86ZnJhbmthcml0Y2hpZUBnbWFpbC5jb20iIHRhcmdldD0iX2JsYW5rIiBy ZWw9Im5vcmVmZXJyZXIiPmZyYW5rYXJpdGNoaWVAZ21haWwuY29tPC9hPiZndDs8YnI+ClN1Ympl Y3Q6IFtjZXBoLXVzZXJzXSBjZXBoIG1nciBkYWVtb24gbXVsdGlwbGUgaXAgYWRkcmVzc2VzPGJy PgpUbzogY2VwaC11c2VycyAmbHQ7PGEgaHJlZj0ibWFpbHRvOmNlcGgtdXNlcnNAY2VwaC5jb20i IHRhcmdldD0iX2JsYW5rIiByZWw9Im5vcmVmZXJyZXIiPmNlcGgtdXNlcnNAY2VwaC5jb208L2E+ Jmd0Ozxicj4KTWVzc2FnZS1JRDo8YnI+CsKgIMKgIMKgIMKgICZsdDtDQU11VkxET2hheCs4UndQ RUtfNTJVZnptT2M4ZHY1PTxhIGhyZWY9Im1haWx0bzpZQkg3RXRzbTVWbWlPX1dGRVBnQG1haWwu Z21haWwuY29tIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub3JlZmVycmVyIj5ZQkg3RXRzbTVWbWlP X1dGRVBnQG1haWwuZ21haWwuY29tPC9hPiZndDs8YnI+CkNvbnRlbnQtVHlwZTogbXVsdGlwYXJ0 L2FsdGVybmF0aXZlOzxicj4KwqAgwqAgwqAgwqAgYm91bmRhcnk9JnF1b3Q7MDAwMDAwMDAwMDAw NGVmMzZkMDU5OTQ4M2ZkOSZxdW90Ozxicj4KPGJyPgotLTAwMDAwMDAwMDAwMDRlZjM2ZDA1OTk0 ODNmZDk8YnI+CkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0mcXVvdDtVVEYtOCZx dW90Ozxicj4KPGJyPgpIaSBhbGwsPGJyPgo8YnI+CkRvZXMgYW55b25lIGtub3cgd2hhdCBwb3Nz aWJsZSBpc3N1ZXMgY2FuIGFyaXNlIGlmIHRoZSBjZXBoIG1nciBkYWVtb24gaXM8YnI+CnJ1bm5p bmcgb24gYSBtb24gbm9kZSB0aGF0IGhhcyAyIGlwcyBpbiB0aGUgcHVibGljIG5ldCByYW5nZSAo MSBpcyBhPGJyPgpsb29wYmFjayBhZGRyZXNzKS48YnI+Cjxicj4KQXMgSSB1bmRlcnN0YW5kIHRo ZSBpdC4gbWdyIHdpbGwgYmluZCB0byBhbGwgaXBzPGJyPgo8YnI+CkZZSSAtIEkgYW0gbm90IHN1 cmUgd2h5IHRoZSBsb29wYmFjayBpcyB0aGVyZSwgSSBhbSB0cnlpbmcgdG8gZmluZCBvdXQuPGJy Pgo8YnI+CnRoeDxicj4KRnJhbms8YnI+Cjxicj4KPGJyPgo8YnI+Cjxicj4KbWxvdmVsbCAtIGNl cGggYW55Y2FzdDxicj4KPGJyPgotLTAwMDAwMDAwMDAwMDRlZjM2ZDA1OTk0ODNmZDk8YnI+CkNv bnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PSZxdW90O1VURi04JnF1b3Q7PGJyPgpDb250 ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBxdW90ZWQtcHJpbnRhYmxlPGJyPgo8YnI+CiZsdDtkaXYg ZGlyPTNEJnF1b3Q7bHRyJnF1b3Q7Jmd0OyZsdDtkaXYmZ3Q7SGkgYWxsLCZsdDsvZGl2Jmd0OyZs dDtkaXYmZ3Q7Jmx0O2JyJmd0O0RvZXMgYW55b25lIGtub3cgd2hhdCBwb3NzaWJsZSA9PGJyPgpp c3N1ZXMgY2FuIGFyaXNlIGlmIHRoZSBjZXBoIG1nciBkYWVtb24gaXMgcnVubmluZyBvbiBhIG1v biBub2RlIHRoYXQgaGFzIDI9PGJyPgrCoGlwcyBpbiB0aGUgcHVibGljIG5ldCByYW5nZSAoMSBp cyBhIGxvb3BiYWNrIGFkZHJlc3MpLiZsdDticiZndDsmbHQ7YnImZ3Q7Jmx0Oy9kaXYmZ3Q7Jmx0 O2RpdiZndDtBPTxicj4KcyBJIHVuZGVyc3RhbmQgdGhlIGl0LiBtZ3Igd2lsbCBiaW5kIHRvIGFs bCBpcHMmbHQ7YnImZ3Q7Jmx0O2JyJmd0OyZsdDsvZGl2Jmd0OyZsdDtkaXYmZ3Q7RllJIC0gSSBh PTxicj4KbSBub3Qgc3VyZSB3aHkgdGhlIGxvb3BiYWNrIGlzIHRoZXJlLCBJIGFtIHRyeWluZyB0 byBmaW5kIG91dC4mbHQ7L2RpdiZndDsmbHQ7ZGl2Jmd0OyZsdDtiPTxicj4KciZndDsmbHQ7L2Rp diZndDsmbHQ7ZGl2Jmd0O3RoeCZsdDsvZGl2Jmd0OyZsdDtkaXYmZ3Q7RnJhbmsmbHQ7YnImZ3Q7 Jmx0O2JyJmd0OyZsdDticiZndDsmbHQ7YnImZ3Q7Jmx0O2JyJmd0O21sb3ZlbGwgLSBjZXBoIGFu eWNhc3QmbHQ7PTxicj4KYnImZ3Q7Jmx0Oy9kaXYmZ3Q7Jmx0Oy9kaXYmZ3Q7PGJyPgo8YnI+Ci0t MDAwMDAwMDAwMDAwNGVmMzZkMDU5OTQ4M2ZkOS0tPGJyPgo8YnI+Ci0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLTxicj4KPGJyPgpEYXRlOiBNb24sIDkgRGVjIDIwMTkgMTc6MjQ6MjcgKzAw MDA8YnI+CkZyb206IEJyeWFuIFN0aWxsd2VsbCAmbHQ7PGEgaHJlZj0ibWFpbHRvOmJzdGlsbHdl bGxAZ29kYWRkeS5jb20iIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vcmVmZXJyZXIiPmJzdGlsbHdl bGxAZ29kYWRkeS5jb208L2E+Jmd0Ozxicj4KU3ViamVjdDogW2NlcGgtdXNlcnNdIFJlOiBvc2Rt YXBzIG5vdCB0cmltbWVkIHVudGlsIGNlcGgtbW9uJiMzOTtzPGJyPgrCoCDCoCDCoCDCoCByZXN0 YXJ0ZWQgKGlmIGNsdXN0ZXIgaGFzIGEgZG93biBvc2QpPGJyPgpUbzogRGFuIHZhbiBkZXIgU3Rl ciAmbHQ7PGEgaHJlZj0ibWFpbHRvOmRhbkB2YW5kZXJzdGVyLmNvbSIgdGFyZ2V0PSJfYmxhbmsi IHJlbD0ibm9yZWZlcnJlciI+ZGFuQHZhbmRlcnN0ZXIuY29tPC9hPiZndDs8YnI+CkNjOiBKb2Fv IEVkdWFyZG8gTHVpcyAmbHQ7PGEgaHJlZj0ibWFpbHRvOmpvYW9Ac3VzZS5kZSIgdGFyZ2V0PSJf YmxhbmsiIHJlbD0ibm9yZWZlcnJlciI+am9hb0BzdXNlLmRlPC9hPiZndDssICZxdW90OzxhIGhy ZWY9Im1haWx0bzpkZXZAY2VwaC5pbyIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9yZWZlcnJlciI+ ZGV2QGNlcGguaW88L2E+JnF1b3Q7ICZsdDs8YSBocmVmPSJtYWlsdG86ZGV2QGNlcGguaW8iIHRh cmdldD0iX2JsYW5rIiByZWw9Im5vcmVmZXJyZXIiPmRldkBjZXBoLmlvPC9hPiZndDssPGJyPgrC oCDCoCDCoCDCoCBjZXBoLXVzZXJzICZsdDs8YSBocmVmPSJtYWlsdG86Y2VwaC11c2Vyc0BjZXBo LmlvIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub3JlZmVycmVyIj5jZXBoLXVzZXJzQGNlcGguaW88 L2E+Jmd0Ozxicj4KTWVzc2FnZS1JRDogJmx0OzxhIGhyZWY9Im1haWx0bzo5QjE0NUIxNy02NjY1 LTQyNTQtOEQ2QS0wNEE5QjM3Mzg5QzNAZ29kYWRkeS5jb20iIHRhcmdldD0iX2JsYW5rIiByZWw9 Im5vcmVmZXJyZXIiPjlCMTQ1QjE3LTY2NjUtNDI1NC04RDZBLTA0QTlCMzczODlDM0Bnb2RhZGR5 LmNvbTwvYT4mZ3Q7PGJyPgpDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9JnF1b3Q7 dXMtYXNjaWkmcXVvdDs8YnI+Cjxicj4KT24gTm92IDE4LCAyMDE5LCBhdCA4OjEyIEFNLCBEYW4g dmFuIGRlciBTdGVyICZsdDs8YSBocmVmPSJtYWlsdG86ZGFuQHZhbmRlcnN0ZXIuY29tIiB0YXJn ZXQ9Il9ibGFuayIgcmVsPSJub3JlZmVycmVyIj5kYW5AdmFuZGVyc3Rlci5jb208L2E+Jmd0OyB3 cm90ZTo8YnI+CiZndDsgPGJyPgomZ3Q7IE9uIEZyaSwgTm92IDE1LCAyMDE5IGF0IDQ6NDUgUE0g Sm9hbyBFZHVhcmRvIEx1aXMgJmx0OzxhIGhyZWY9Im1haWx0bzpqb2FvQHN1c2UuZGUiIHRhcmdl dD0iX2JsYW5rIiByZWw9Im5vcmVmZXJyZXIiPmpvYW9Ac3VzZS5kZTwvYT4mZ3Q7IHdyb3RlOjxi cj4KJmd0OyZndDsgPGJyPgomZ3Q7Jmd0OyBPbiAxOS8xMS8xNCAxMTowNEFNLCBHcmVnb3J5IEZh cm51bSB3cm90ZTo8YnI+CiZndDsmZ3Q7Jmd0OyBPbiBUaHUsIE5vdiAxNCwgMjAxOSBhdCA4OjE0 IEFNIERhbiB2YW4gZGVyIFN0ZXIgJmx0OzxhIGhyZWY9Im1haWx0bzpkYW5AdmFuZGVyc3Rlci5j b20iIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vcmVmZXJyZXIiPmRhbkB2YW5kZXJzdGVyLmNvbTwv YT4mZ3Q7IHdyb3RlOjxicj4KJmd0OyZndDsmZ3Q7Jmd0OyA8YnI+CiZndDsmZ3Q7Jmd0OyZndDsg SGkgSm9hbyw8YnI+CiZndDsmZ3Q7Jmd0OyZndDsgPGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7IEkgbWln aHQgaGF2ZSBmb3VuZCB0aGUgcmVhc29uIHdoeSBzZXZlcmFsIG9mIG91ciBjbHVzdGVycyAoYW5k IG1heWJlPGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7IEJyeWFuJiMzOTtzIHRvbykgYXJlIGdldHRpbmcg c3R1Y2sgbm90IHRyaW1taW5nIG9zZG1hcHMuPGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7IEl0IHNlZW1z IHRoYXQgd2hlbiBhbiBvc2QgZmFpbHMsIHRoZSBtaW5fbGFzdF9lcG9jaF9jbGVhbiBnZXRzIHN0 dWNrPGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7IGZvcmV2ZXIgKGV2ZW4gbG9uZyBhZnRlciBIRUFMVEhf T0spLCB1bnRpbCB0aGUgY2VwaC1tb25zIGFyZTxicj4KJmd0OyZndDsmZ3Q7Jmd0OyByZXN0YXJ0 ZWQuPGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7IDxicj4KJmd0OyZndDsmZ3Q7Jmd0OyBJJiMzOTt2ZSB1 cGRhdGVkIHRoZSB0aWNrZXQ6IDxhIGhyZWY9Imh0dHBzOi8vdHJhY2tlci5jZXBoLmNvbS9pc3N1 ZXMvNDExNTQiIHJlbD0ibm9yZWZlcnJlciBub3JlZmVycmVyIiB0YXJnZXQ9Il9ibGFuayI+aHR0 cHM6Ly90cmFja2VyLmNlcGguY29tL2lzc3Vlcy80MTE1NDwvYT48YnI+CiZndDsmZ3Q7Jmd0OyA8 YnI+CiZndDsmZ3Q7Jmd0OyBXcm9uZyB0aWNrZXQsIEkgdGhpbmsgeW91IG1lYW50IDxhIGhyZWY9 Imh0dHBzOi8vdHJhY2tlci5jZXBoLmNvbS9pc3N1ZXMvMzc4NzUjbm90ZS03IiByZWw9Im5vcmVm ZXJyZXIgbm9yZWZlcnJlciIgdGFyZ2V0PSJfYmxhbmsiPmh0dHBzOi8vdHJhY2tlci5jZXBoLmNv bS9pc3N1ZXMvMzc4NzUjbm90ZS03PC9hPjxicj4KJmd0OyZndDsgPGJyPgomZ3Q7Jmd0OyBJJiMz OTt2ZSBzZWVuIHRoaXMgYmVoYXZpb3IgYSBsb25nLCBsb25nIHRpbWUgYWdvLCBidXQgc3RvcHBl ZCBiZWluZyBhYmxlIHRvPGJyPgomZ3Q7Jmd0OyByZXByb2R1Y2UgaXQgY29uc2lzdGVudGx5IGVu b3VnaCB0byBlbnN1cmUgdGhlIHBhdGNoIHdhcyB3b3JraW5nIHByb3Blcmx5Ljxicj4KJmd0OyZn dDsgPGJyPgomZ3Q7Jmd0OyBJIHRoaW5rIEkgaGF2ZSBhIHBhdGNoIGhlcmU6PGJyPgomZ3Q7Jmd0 OyA8YnI+CiZndDsmZ3Q7wqAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2NlcGgvY2VwaC9w dWxsLzE5MDc2L2NvbW1pdHMiIHJlbD0ibm9yZWZlcnJlciBub3JlZmVycmVyIiB0YXJnZXQ9Il9i bGFuayI+aHR0cHM6Ly9naXRodWIuY29tL2NlcGgvY2VwaC9wdWxsLzE5MDc2L2NvbW1pdHM8L2E+ PGJyPgomZ3Q7Jmd0OyA8YnI+CiZndDsmZ3Q7IElmIHlvdSBhcmUgZmVlbGluZyBhZHZlbnR1cm91 cywgYW5kIHdhbnQgdG8gZ2l2ZSBpdCBhIHRyeSwgbGV0IG1lIGtub3cuIEkmIzM5O2xsPGJyPgom Z3Q7Jmd0OyBiZSBoYXBweSB0byBmb3J3YXJkIHBvcnQgaXQgdG8gd2hhdGV2ZXIgeW91IGFyZSBy dW5uaW5nLjxicj4KJmd0OyA8YnI+CiZndDsgVGhhbmtzIEpvYW8sIHRoaXMgcGF0Y2ggaXMgd2hh dCBJIGhhZCBpbiBtaW5kLjxicj4KJmd0OyA8YnI+CiZndDsgSSYjMzk7bSB0cnlpbmcgdG8gZXZh bHVhdGUgaG93IGFkdmVudHVyb3VzIHRoaXMgd291bGQgYmUgLS0gSXMgdGhlcmUgYW55PGJyPgom Z3Q7IHJpc2sgdGhhdCBpZiBhIGh1Z2UgbnVtYmVyIG9mIG9zZHMgYXJlIGRvd24gYWxsIGF0IG9u Y2UgKGJ1dDxicj4KJmd0OyB0cmFuc2llbnRseSksIGl0IHdvdWxkIHRyaWdnZXIgdGhlIG1vbiB0 byB0cmltIHRvbyBtYW55IG1hcHM/PGJyPgomZ3Q7IEkgd291bGQgZXhwZWN0IHRoYXQgdGhlIHJl bWFpbmluZyB1cCBPU0RzIHdpbGwgaGF2ZSBhIHNhZmUsIGxvdywgb3NkX2Vwb2NoID88YnI+CiZn dDsgPGJyPgomZ3Q7IEFuZCBhbnl3YXkgSSBndWVzcyB0aGF0IHlvdXIgcHJvcG9zZWQgZ2V0X21p bl9sYXN0X2Vwb2NoX2NsZWFuIHBhdGNoPGJyPgomZ3Q7IGlzIGVxdWl2YWxlbnQgdG8gd2hhdCB3 ZSBoYXZlIHRvZGF5IGlmIHdlIHJlc3RhcnQgdGhlIGNlcGgtbW9uIGxlYWRlcjxicj4KJmd0OyB3 aGlsZSBhbiBvc2QgaXMgZG93bi48YnI+Cjxicj4KSm9hbyw8YnI+Cjxicj4KSSByYW4gaW50byB0 aGlzIGFnYWluIHRvZGF5IGFuZCBmb3VuZCBvdmVyIDEwMCwwMDAgb3NkbWFwcyBvbiBhbGwgMSww MDAgT1NEcyAofjUwIFRpQiBvZiBkaXNrIHNwYWNlIHVzZWQganVzdCBieSBvc2RtYXBzKS7CoCBU aGVyZSB3ZXJlIGRvd24gT1NEcyAocHJldHR5IHJlZ3VsYXIgb2NjdXJyZW5jZSB3aXRoIH4xLDAw MCBPU0RzKSBzbyB0aGF0IG1hdGNoZXMgdXAgd2l0aCB3aGF0IERhbiBmb3VuZC7CoCBUaGVuIHdo ZW4gSSByZXN0YXJ0ZWQgYWxsIHRoZSBtb24gbm9kZXMgdHdpY2UgdGhlIG9zZG1hcHMgc3RhcnRl ZCBjbGVhbmluZyB1cC48YnI+Cjxicj4KSSBiZWxpZXZlIHRoZSBzdGVwcyB0byByZXByb2R1Y2Ug d291bGQgbG9vayBsaWtlIHRoaXM6PGJyPgo8YnI+CjEuIFN0YXJ0IHdpdGggYSBjbHVzdGVyIHdp dGggYXQgbGVhc3QgMSBkb3duIG9zZDxicj4KMi4gRXhwYW5kIHRoZSBjbHVzdGVyICh0aGUgYmln Z2VyIHRoZSBleHBhbnNpb24sIHRoZSBtb3JlIG9zZG1hcHMgdGhhdCBwaWxlIHVwKTxicj4KMy4g Tm90aWNlIHRoYXQgYWZ0ZXIgdGhlIGV4cGFuc2lvbiBjb21wbGV0ZXMgYW5kIHRoZSBjbHVzdGVy IGlzIGhlYWx0aHkgdGhhdCB0aGUgb2xkIG9zZG1hcHMgYXJlbiYjMzk7dCBjbGVhbmVkIHVwPGJy Pgo8YnI+Ckkgd291bGQgYmUgd2lsbGluZyB0byB0ZXN0IHRoZSBmaXggb24gb3VyIHRlc3QgY2x1 c3RlciBhZnRlciAxNC4yLjUgY29tZXMgb3V0LsKgIENvdWxkIHlvdSBtYWtlIGEgYnVpbGQgYmFz ZWQgb24gdGhhdCByZWxlYXNlPzxicj4KPGJyPgpUaGFua3MsPGJyPgpCcnlhbjxicj4KPGJyPgot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08YnI+Cjxicj4KU3ViamVjdDogRGlnZXN0IEZv b3Rlcjxicj4KPGJyPgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXzxicj4KY2VwaC11c2VycyBtYWlsaW5nIGxpc3QgLS0gPGEgaHJlZj0ibWFpbHRvOmNlcGgt dXNlcnNAY2VwaC5pbyIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9yZWZlcnJlciI+Y2VwaC11c2Vy c0BjZXBoLmlvPC9hPjxicj4KVG8gdW5zdWJzY3JpYmUgc2VuZCBhbiBlbWFpbCB0byA8YSBocmVm PSJtYWlsdG86Y2VwaC11c2Vycy1sZWF2ZUBjZXBoLmlvIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJu b3JlZmVycmVyIj5jZXBoLXVzZXJzLWxlYXZlQGNlcGguaW88L2E+PGJyPgolKHdlYl9wYWdlX3Vy bClzbGlzdGluZm8lKGNnaWV4dClzLyUoX2ludGVybmFsX25hbWUpczxicj4KPGJyPgo8YnI+Ci0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTxicj4KPGJyPgpFbmQgb2YgY2VwaC11c2VycyBE aWdlc3QsIFZvbCA4MywgSXNzdWUgMzU8YnI+CioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKjxicj4KPC9ibG9ja3F1b3RlPjwvZGl2PjwvZGl2PjwvZGl2PgoKPGJyPgo8 YmxvY2txdW90ZSB0eXBlPSJjaXRlIiBzdHlsZT0iY29sb3I6cmdiKDM0LDM0LDM0KTtmb250LXNp emU6c21hbGw7YmFja2dyb3VuZC1jb2xvcjpyZ2IoMjU1LDI1NSwyNTUpIj48ZGl2IGRpcj0ibHRy Ij48ZGl2PjxwIHN0eWxlPSJtYXJnaW46MHB4O3RleHQtYWxpZ246anVzdGlmeSI+PGk+PHNwYW4g c3R5bGU9ImZvbnQtc2l6ZToxMHB0O2ZvbnQtZmFtaWx5OkFyaWFsLHNhbnMtc2VyaWY7Y29sb3I6 cmdiKDIwLDE5LDIyKSI+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPHdicj4tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08d2JyPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t PC9zcGFuPjwvaT48L3A+PHAgc3R5bGU9Im1hcmdpbjowcHg7dGV4dC1hbGlnbjpqdXN0aWZ5Ij48 aT48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEwcHQ7Zm9udC1mYW1pbHk6QXJpYWwsc2Fucy1zZXJp Zjtjb2xvcjpyZ2IoMjAsMTksMjIpIj5UaGlzIGVtYWlsIGFuZCBhbnkgZmlsZXMgdHJhbnNtaXR0 ZWQgd2l0aCBpdCBhcmUgY29uZmlkZW50aWFsIGFuZCBpbnRlbmRlZCBzb2xlbHkgZm9yIHRoZSB1 c2Ugb2YgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRvIHdob20gdGhleSBhcmUgYWRkcmVzc2Vk LiBJZiB5b3UgaGF2ZSByZWNlaXZlZCB0aGlzIGVtYWlsIGluIGVycm9yLCBwbGVhc2Ugbm90aWZ5 IHRoZSBzeXN0ZW0gbWFuYWdlci4gVGhpcyBtZXNzYWdlIGNvbnRhaW5zIGNvbmZpZGVudGlhbCBp bmZvcm1hdGlvbiBhbmQgaXMgaW50ZW5kZWQgb25seSBmb3IgdGhlIGluZGl2aWR1YWwgbmFtZWQu IElmIHlvdSBhcmUgbm90IHRoZSBuYW1lZCBhZGRyZXNzZWUsIHlvdSBzaG91bGQgbm90IGRpc3Nl bWluYXRlLCBkaXN0cmlidXRlIG9yIGNvcHkgdGhpcyBlbWFpbC4gUGxlYXNlIG5vdGlmeSB0aGUg c2VuZGVyIGltbWVkaWF0ZWx5IGJ5IGVtYWlsIGlmIHlvdSBoYXZlIHJlY2VpdmVkIHRoaXMgZW1h aWwgYnkgbWlzdGFrZSBhbmQgZGVsZXRlIHRoaXMgZW1haWwgZnJvbSB5b3VyIHN5c3RlbS4gSWYg eW91IGFyZSBub3QgdGhlIGludGVuZGVkIHJlY2lwaWVudCwgeW91IGFyZSBub3RpZmllZCB0aGF0 IGRpc2Nsb3NpbmcsIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciB0YWtpbmcgYW55IGFjdGlvbiBp biByZWxpYW5jZSBvbiB0aGUgY29udGVudHMgb2YgdGhpcyBpbmZvcm1hdGlvbiBpcyBzdHJpY3Rs eSBwcm9oaWJpdGVkLjwvc3Bhbj48L2k+PHU+PC91Pjx1PjwvdT48L3A+PHAgc3R5bGU9Im1hcmdp bjowcHg7dGV4dC1hbGlnbjpqdXN0aWZ5Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEwcHQiPsKg PC9zcGFuPjx1PjwvdT48dT48L3U+PC9wPjxwIHN0eWxlPSJtYXJnaW46MHB4O3RleHQtYWxpZ246 anVzdGlmeSI+PGk+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMHB0O2ZvbnQtZmFtaWx5OkFyaWFs LHNhbnMtc2VyaWY7Y29sb3I6cmdiKDIwLDE5LDIyKSI+QW55IHZpZXdzIG9yIG9waW5pb25zIHBy ZXNlbnRlZCBpbiB0aGlzIGVtYWlsIGFyZSBzb2xlbHkgdGhvc2Ugb2YgdGhlIGF1dGhvciBhbmQg ZG8gbm90IG5lY2Vzc2FyaWx5IHJlcHJlc2VudCB0aG9zZSBvZiB0aGUgb3JnYW5pemF0aW9uLiBB bnkgaW5mb3JtYXRpb24gb24gc2hhcmVzLCBkZWJlbnR1cmVzIG9yIHNpbWlsYXIgaW5zdHJ1bWVu dHMsIHJlY29tbWVuZGVkIHByb2R1Y3QgcHJpY2luZywgdmFsdWF0aW9ucyBhbmQgdGhlIGxpa2Ug YXJlIGZvciBpbmZvcm1hdGlvbiBwdXJwb3NlcyBvbmx5LiBJdCBpcyBub3QgbWVhbnQgdG8gYmUg YW4gaW5zdHJ1Y3Rpb24gb3IgcmVjb21tZW5kYXRpb24sIGFzIHRoZSBjYXNlIG1heSBiZSwgdG8g YnV5IG9yIHRvIHNlbGwgc2VjdXJpdGllcywgcHJvZHVjdHMsIHNlcnZpY2VzIG5vciBhbiBvZmZl ciB0byBidXkgb3Igc2VsbCBzZWN1cml0aWVzLCBwcm9kdWN0cyBvciBzZXJ2aWNlcyB1bmxlc3Mg c3BlY2lmaWNhbGx5IHN0YXRlZCB0byBiZSBzbyBvbiBiZWhhbGYgb2YgdGhlIEZsaXBrYXJ0IGdy b3VwLiBFbXBsb3llZXMgb2bCoHRoZSBGbGlwa2FydCBncm91cCBvZiBjb21wYW5pZXMgYXJlIGV4 cHJlc3NseSByZXF1aXJlZCBub3QgdG8gbWFrZSBkZWZhbWF0b3J5IHN0YXRlbWVudHMgYW5kIG5v dCB0byBpbmZyaW5nZSBvciBhdXRob3Jpc2UgYW55IGluZnJpbmdlbWVudCBvZiBjb3B5cmlnaHQg b3IgYW55IG90aGVyIGxlZ2FsIHJpZ2h0IGJ5IGVtYWlsIGNvbW11bmljYXRpb25zLiBBbnkgc3Vj aCBjb21tdW5pY2F0aW9uIGlzIGNvbnRyYXJ5IHRvIG9yZ2FuaXphdGlvbmFsIHBvbGljeSBhbmQg b3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhlIGVtcGxveW1lbnQgb2YgdGhlIGluZGl2aWR1YWwgY29u Y2VybmVkLiBUaGUgb3JnYW5pemF0aW9uIHdpbGwgbm90IGFjY2VwdCBhbnkgbGlhYmlsaXR5IGlu IHJlc3BlY3Qgb2Ygc3VjaCBjb21tdW5pY2F0aW9uLCBhbmQgdGhlIGVtcGxveWVlIHJlc3BvbnNp YmxlIHdpbGwgYmUgcGVyc29uYWxseSBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIG9yIG90aGVyIGxp YWJpbGl0eSBhcmlzaW5nLjwvc3Bhbj48L2k+PHU+PC91Pjx1PjwvdT48L3A+PHAgc3R5bGU9Im1h cmdpbjowcHg7dGV4dC1hbGlnbjpqdXN0aWZ5Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEwcHQi PsKgPC9zcGFuPjx1PjwvdT48dT48L3U+PC9wPjxwIHN0eWxlPSJtYXJnaW46MHB4O3RleHQtYWxp Z246anVzdGlmeSI+PGk+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMHB0O2ZvbnQtZmFtaWx5OkFy aWFsLHNhbnMtc2VyaWY7Y29sb3I6cmdiKDIwLDE5LDIyKSI+T3VyIG9yZ2FuaXphdGlvbiBhY2Nl cHRzIG5vIGxpYWJpbGl0eSBmb3IgdGhlIGNvbnRlbnQgb2YgdGhpcyBlbWFpbCwgb3IgZm9yIHRo ZSBjb25zZXF1ZW5jZXMgb2YgYW55IGFjdGlvbnMgdGFrZW4gb24gdGhlIGJhc2lzIG9mIHRoZSBp bmZvcm1hdGlvbsKgPC9zcGFuPjwvaT48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEwcHQ7Zm9udC1m YW1pbHk6QXJpYWwsc2Fucy1zZXJpZjtjb2xvcjpyZ2IoMjAsMTksMjIpIj5wcm92aWRlZCw8aT7C oHVubGVzcyB0aGF0IGluZm9ybWF0aW9uIGlzIHN1YnNlcXVlbnRseSBjb25maXJtZWQgaW4gd3Jp dGluZy4gSWYgeW91IGFyZSBub3QgdGhlIGludGVuZGVkIHJlY2lwaWVudCwgeW91IGFyZSBub3Rp ZmllZCB0aGF0IGRpc2Nsb3NpbmcsIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciB0YWtpbmcgYW55 IGFjdGlvbiBpbiByZWxpYW5jZSBvbiB0aGUgY29udGVudHMgb2YgdGhpcyBpbmZvcm1hdGlvbiBp cyBzdHJpY3RseSBwcm9oaWJpdGVkLjwvaT48L3NwYW4+PC9wPjxwIHN0eWxlPSJtYXJnaW46MHB4 O3RleHQtYWxpZ246anVzdGlmeSI+PGkgc3R5bGU9ImZvbnQtc2l6ZToxLjNlbSI+PHNwYW4gc3R5 bGU9ImZvbnQtc2l6ZToxMHB0O2ZvbnQtZmFtaWx5OkFyaWFsLHNhbnMtc2VyaWY7Y29sb3I6cmdi KDIwLDE5LDIyKSI+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPHdicj4tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS08d2JyPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9z cGFuPjwvaT48L3A+PC9kaXY+PC9kaXY+PC9ibG9ja3F1b3RlPg== --===============3094636150463115708==--