From asmariyaz23@gmail.com Thu Aug 27 13:14:59 2015 From: Asma Riyaz To: galaxy-dev@lists.galaxyproject.org Subject: Re: [galaxy-dev] Get dataset/API ids for a dataset Date: Thu, 27 Aug 2015 13:14:38 -0400 Message-ID: In-Reply-To: MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0139073616977400027==" --===============0139073616977400027== Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Hi Carl, Thank you for your help, I was able to access all the dataset ids in history with the pointers you gave, but I am not finding an immediate way to deduce which original file is from which id. I think if I can get the timestamp of the datasets I can use this and the dataset type metadata. Would there be a way (with "h" or "trans" objects or something else) to grab the timestamp? Another side question: is there an id that remains common to multiple outputs produced from one tool? Thank you, -Asma On Wed, Aug 26, 2015 at 10:07 AM, Carl Eberhard wrote: > Hi, Asma > > Sorry for the confusion. You may want to have a look here: > http://docs.makotemplates.org/en/latest/index.html > > Mako is a python templating language. No tag is required to run python in > it (when the server is building the page). Simply use the brackets: > <% > # executes python code while the page is built > # here we can access the database since this is server side code > %> > Make sure you use '<% %>' and not '<%! %>' so that everything is loaded > properly. > > Once you have the dataset ids or urls in an array you can 'print' their > JSON into a script tag for use with javascript when the page is loaded onto > the client browser using the mako expression syntax: > > > 'h' is for helpers which are objects that Galaxy puts into all the mako > templates and have utility functions. 'dumps' is part of the json library > and is 'dump'ing a JSON 's'tring into the template. Notice there are no > quotes around the JSON. Mako will print the server side dataset_ids as > javascript-usable JSON so they can be used by the page on the client side > to build your urls. > > Essentially you have to use the JSON to communicate between the python and > javascript. You cannot use python or python objects (like trans.history) > from javascript code directly though. > > 'trans' should definitely be available and defined. igv.mako is being > loaded as part of the visualization framework, correct? > > If this fails to help, let me know and we can work directly with the code > if you'd like. > > On Tue, Aug 25, 2015 at 1:48 PM, Asma Riyaz wrote: > >> In addition to my previous attempts, here is another I have tried: >> >> *in igv.mako:* >> >> <%! >> users_current_history =3D trans.history >> dataset_ids =3D [ trans.security.encode_id( d.id ) for d in >> users_current_history.datasets ] >> %> >> <%def name=3D"getDataset_ids()"> >> <% >> return dataset_ids >> %> >> >> >> >> But this fails again and error appears in galaxy as 'name trans not >> defined'. >> >> -Asma >> >> On Tue, Aug 25, 2015 at 1:12 PM, Asma Riyaz >> wrote: >> >>> Hello, >>> >>> I have tried to access user's current history in the >>> >>> The first console.log shows that 'users_current_history.datasets' is >>> undefined. >>> >>> According this piece of code from Carl, accessing dataset ids should be >>> done in python within a mako template tag >>> <% >>> users_current_history =3D trans.history >>> dataset_ids =3D [ trans.security.encode_id( d.id ) for d in >>> users_current_history.datasets ] >>> %> >>> >>> but all the examples I have seen so far have some html tag associated >>> with such code. How can I avoid using these tags and still use python alo= ne? >>> >>> -Asma >>> >>> >>> >>> On Fri, Aug 21, 2015 at 11:41 AM, Carl Eberhard >> > wrote: >>> >>>> As far as I know, it's best to write tool wrappers as if they were >>>> meant to be called outside of Galaxy. In other words, it would not be be= st >>>> to try and get Galaxy dataset ids within the tool code. >>>> >>>> If we zoom out on the problem and take a higher view, is the JSON file >>>> primary used to launch the visualization or does it have another use as >>>> well? >>>> >>>> Can/is the JSON passed to IGV directly in javascript? or does it need >>>> to be read from the file separately by IGV and independent from the >>>> visualization mako and its associated javascript? >>>> >>>> If the JSON data is only for the visualization, doesn't need to be 100% >>>> correct in the file, and can be passed within javascript, you can alter = the >>>> JSON data directly in the visualization mako/js by decorating with the b= am >>>> ids before passing it to IGV. In that case, the previous code (or a clea= ner >>>> version of it) will begin to get you there. >>>> >>>> Unfortunately, the previous code should work in the visualization mako >>>> only. (With the correction: >>>> from galaxy import model >>>> instead of >>>> import model >>>> >>>> The trans is an object describing the current WebTransaction >>>> (request/response). It allows access to a sqlalchemy (sa) database sessi= on: >>>> trans.sa_session >>>> >>>> On Fri, Aug 21, 2015 at 11:23 AM, Asma Riyaz >>>> wrote: >>>> >>>>> Hi Carl, >>>>> >>>>> The visualization comes into play after a lab implemented tool in >>>>> galaxy is ran; I am not using galaxy's workflow. Is tracing back ids st= ill >>>>> possible in this case with the test case you wrote earlier? >>>>> >>>>> Also I couldn't figure out what "trans" refers to in your previous >>>>> message. >>>>> >>>>> Thank you, >>>>> Asma >>>>> >>>>> On Thu, Aug 20, 2015 at 3:03 PM, Asma Riyaz >>>>> wrote: >>>>> >>>>>> >>>>>> ---------- Forwarded message ---------- >>>>>> From: Carl Eberhard >>>>>> Date: Thu, Aug 20, 2015 at 2:46 PM >>>>>> Subject: Re: [galaxy-dev] Get dataset/API ids for a dataset >>>>>> To: Asma Riyaz >>>>>> Cc: galaxy-dev >>>>>> >>>>>> >>>>>> If I understand correctly, this begins to sound less like something >>>>>> the visualization level can do and more something that needs to be han= dled >>>>>> at your tool level. >>>>>> >>>>>> Let me repeat back what I understand to be the process: >>>>>> 1. Your pipeline is activated by the user and some initial step in >>>>>> the pipeline creates the JSON file that will configure your visualizat= ion >>>>>> 2. Some indeterminate number of bam files are created >>>>>> 3. The pipeline finishes and at this point the encoded ids of all the >>>>>> bam files created by the pipeline should be used in urls added to the = JSON >>>>>> file from step 1 >>>>>> 4. The user then clicks on one of the outputs (the JSON file? Yes ) >>>>>> from the pipeline to launch the visualization and the JSON file is read >>>>>> >>>>>> Do I have that right? When you say pipeline does that mean a Galaxy >>>>>> workflow? >>>>>> ---> Yes, this is exactly what I want to do. No, not a Galaxy >>>>>> workflow, but a pipeline written in the lab which is then converted to= a >>>>>> galaxy tool. Is 'hda' available at the tool level as well? I have read >>>>>> through the Bioblend API but couldn't figure out a way to query for on= ly >>>>>> those datasets that being worked on by galaxy in current history. >>>>>> >>>>>> If so, you can access the workflow using the ORM by tracing up from >>>>>> the dataset that invoked the visualization and then back down to the b= am >>>>>> files that were created in the workflow steps: >>>>>> >>>>>> <% >>>>>> # get the bam datasets created by the workflow that created 'hda' >>>>>> # where 'hda' is the dataset the visualization launched from >>>>>> import model >>>>>> w =3D trans.sa_session.query( model.WorkflowInvocationStep ) >>>>>> .filter( WorkflowInvocationStep.job =3D=3D hda.creating_job >>>>>> ).one().workflow_invocation >>>>>> ids =3D [ d.dataset.id for d in s.job.output_datasets if d.dataset.ext >>>>>> =3D=3D 'bam' ] for s in w.steps if s.job ] >>>>>> urls =3D [ ... ] >>>>>> %> >>>>>> >>>>>> (The above is really horrible code, but sketches one way you could >>>>>> get the ids from the visualization mako) >>>>>> >>>>>> If it's not a workflow and a pipeline being run from within a Galaxy >>>>>> tool wrapper, then the tool wrapper code should be writing the ids to = the >>>>>> JSON file. Is that the case instead? >>>>>> --> Yes, tool wrapper code is where the IDs need to inserted. Will >>>>>> try using "model" and see where I get with it. >>>>>> >>>>>> -Thank you, >>>>>> Asma >>>>>> >>>>>> >>>>>> >>>>>> On Thu, Aug 20, 2015 at 1:28 PM, Asma Riyaz >>>>>> wrote: >>>>>> >>>>>>> Hi Carl, >>>>>>> >>>>>>> Thank you for your reply. This definitely helps me get started, my >>>>>>> question being: >>>>>>> >>>>>>> trans.history will get all the dataset ids in users history >>>>>>> regardless of which run the datasets are associated with. Hence if th= e user >>>>>>> has multiple bams loaded in history there will be no way of distingui= shing >>>>>>> them. >>>>>>> >>>>>>> Here is a rough idea of what I am envisioning my pipeline to do: >>>>>>> >>>>>>> Galaxy pipeline runs -> while it is running, dataset ids that are >>>>>>> generated should be retrieved for each output (in my case bams and JS= ON >>>>>>> file) -> when main pipeline finishes, ids are updated within the JSON= file >>>>>>> -> all the outputs are fed to users history. >>>>>>> >>>>>>> this way there will be no ambiguity as to which bams are being >>>>>>> accessed for viz. Is this intermediate way of getting dataset ids pos= sible? >>>>>>> >>>>>>> Thank you >>>>>>> -Asma >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> On Wed, Aug 19, 2015 at 4:27 PM, Carl Eberhard < >>>>>>> carlfeberhard(a)gmail.com> wrote: >>>>>>> >>>>>>>> Hi, Asma >>>>>>>> >>>>>>>> If you're looking through datasets via the mako part of your >>>>>>>> visualization, you can use: >>>>>>>> >>>>>>>>> users_current_history =3D trans.history >>>>>>>>> dataset_ids =3D [ trans.security.encode_id( d.id ) for d in >>>>>>>>> users_current_history.datasets ] >>>>>>>> >>>>>>>> (or similar) to build the ids needed for the urls. >>>>>>>> >>>>>>>> If you want to get the info via javascript, you can use something >>>>>>>> like the python above and template into a js var: >>>>>>>> >>>>>>>>> var url =3D "/datasets/${ dna_dataset_id }/display?to_ext=3Dbam" >>>>>>>> >>>>>>>> >>>>>>>> ...or encode and template the history id and use ajax and the api >>>>>>>> after the page is served: >>>>>>>> >>>>>>>>> var historyId =3D "${ trans.security.encode_id( trans.history.id ) >>>>>>>>> }"; >>>>>>>>> jQuery.ajax( galaxy_config.root + 'api/histories/' + historyId + >>>>>>>>> '/contents' ) >>>>>>>>> .done( function( response ){ /* will contain summary json for >>>>>>>>> each dataset including encoded ids for each */ }) >>>>>>>> >>>>>>>> >>>>>>>> Let me know if that's not what you were looking for or if you find >>>>>>>> any problems with it. >>>>>>>> >>>>>>>> On Wed, Aug 19, 2015 at 11:01 AM, Asma Riyaz >>>>>>> > wrote: >>>>>>>> >>>>>>>>> Hello Galaxy-dev, >>>>>>>>> >>>>>>>>> I thank you so much for all the help you have given me. >>>>>>>>> >>>>>>>>> I have a question about data set ids in galaxy. As a background, I >>>>>>>>> am running my own galaxy instance on a server. A pipeline >>>>>>>>> implemented in the lab produces the following files in the history: >>>>>>>>> >>>>>>>>> 1) 2 BAM files >>>>>>>>> 2) A JSON file >>>>>>>>> >>>>>>>>> My goal is to use this JSON file to pass the path/URL of bam >>>>>>>>> files into a custom JS we wrote for visualization purpose. >>>>>>>>> >>>>>>>>> This JSON file contains among many other details the paths/URLs to >>>>>>>>> the above bam files. I am using JSON filetypes to send data to the = JS >>>>>>>>> visualization within Galaxy. To do this, I have my own JS which loa= ds a BAM >>>>>>>>> file from URL provided into an IGV.js track. IGV.js, which is >>>>>>>>> responsible for making the tracks, expects a valid URL which is upd= ated in >>>>>>>>> the JSON file in this manner: >>>>>>>>> >>>>>>>>> 1) Extract the API_key and history id from a loaded BAM file >>>>>>>>> 2) Edit the JSON file to reflect the BAM file's dataset id to be >>>>>>>>> something like this: >>>>>>>>> >>>>>>>>> { >>>>>>>>> "CLL-HL_pilot.r1.fastq": { >>>>>>>>> "DNA": "/datasets/36ddb788a0f14eb3/display?to_ext=3Dbam", >>>>>>>>> ... >>>>>>>>> >>>>>>>>> This works fine if I know the API Key for bam files. When a >>>>>>>>> pipeline executes dataset ids are generated for each output. I want= to >>>>>>>>> access and include these ids in the JSON file and load the updated = JSON >>>>>>>>> file into the history with the bams. Is there a way to get the ids = from the >>>>>>>>> history in this manner? >>>>>>>>> >>>>>>>>> Thank you, >>>>>>>>> >>>>>>>>> Asma >>>>>>>>> >>>>>>>>> ___________________________________________________________ >>>>>>>>> Please keep all replies on the list by using "reply all" >>>>>>>>> in your mail client. To manage your subscriptions to this >>>>>>>>> and other Galaxy lists, please use the interface at: >>>>>>>>> https://lists.galaxyproject.org/ >>>>>>>>> >>>>>>>>> To search Galaxy mailing lists use the unified search at: >>>>>>>>> http://galaxyproject.org/search/mailinglists/ >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>> >>>>>> >>>>>> >>>>> >>>> >>> >> > --===============0139073616977400027== Content-Type: text/html Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.htm" MIME-Version: 1.0 PGRpdiBkaXI9Imx0ciI+SGkgQ2FybCw8ZGl2Pjxicj48L2Rpdj48ZGl2PlRoYW5rIHlvdSBmb3Ig eW91ciBoZWxwLCBJIHdhcyBhYmxlIHRvIGFjY2VzcyBhbGwgdGhlIGRhdGFzZXQgaWRzIGluIGhp c3Rvcnkgd2l0aCB0aGUgcG9pbnRlcnMgeW91IGdhdmUsIGJ1dCBJIGFtIG5vdCBmaW5kaW5nIGFu IGltbWVkaWF0ZSB3YXkgdG8gZGVkdWNlIHdoaWNoIG9yaWdpbmFsIGZpbGUgaXMgZnJvbSB3aGlj aCBpZC4gSSB0aGluayBpZiBJIGNhbiBnZXQgdGhlIHRpbWVzdGFtcCBvZiB0aGUgZGF0YXNldHMg SSBjYW4gdXNlIHRoaXMgYW5kIHRoZSBkYXRhc2V0IHR5cGUgbWV0YWRhdGEuIFdvdWxkIHRoZXJl IGJlIGEgd2F5ICh3aXRoICZxdW90O2gmcXVvdDsgb3IgJnF1b3Q7dHJhbnMmcXVvdDsgb2JqZWN0 cyBvciBzb21ldGhpbmcgZWxzZSkgdG8gZ3JhYiB0aGUgdGltZXN0YW1wPzwvZGl2PjxkaXY+PGJy PjwvZGl2PjxkaXY+QW5vdGhlciBzaWRlIHF1ZXN0aW9uOiBpcyB0aGVyZSBhbiBpZCB0aGF0IHJl bWFpbnMgY29tbW9uIHRvIG11bHRpcGxlIG91dHB1dHMgcHJvZHVjZWQgZnJvbSBvbmUgdG9vbD/C oDwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+VGhhbmsgeW91LDwvZGl2PjxkaXY+LUFzbWE8L2Rp dj48L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+PGJyPjxkaXYgY2xhc3M9ImdtYWlsX3F1 b3RlIj5PbiBXZWQsIEF1ZyAyNiwgMjAxNSBhdCAxMDowNyBBTSwgQ2FybCBFYmVyaGFyZCA8c3Bh biBkaXI9Imx0ciI+Jmx0OzxhIGhyZWY9Im1haWx0bzpjYXJsZmViZXJoYXJkQGdtYWlsLmNvbSIg dGFyZ2V0PSJfYmxhbmsiPmNhcmxmZWJlcmhhcmRAZ21haWwuY29tPC9hPiZndDs8L3NwYW4+IHdy b3RlOjxicj48YmxvY2txdW90ZSBjbGFzcz0iZ21haWxfcXVvdGUiIHN0eWxlPSJtYXJnaW46MCAw IDAgLjhleDtib3JkZXItbGVmdDoxcHggI2NjYyBzb2xpZDtwYWRkaW5nLWxlZnQ6MWV4Ij48ZGl2 IGRpcj0ibHRyIj5IaSwgQXNtYTxkaXY+PGJyPjwvZGl2PjxkaXY+U29ycnkgZm9yIHRoZSBjb25m dXNpb24uIFlvdSBtYXkgd2FudCB0byBoYXZlIGEgbG9vayBoZXJlOsKgPGEgaHJlZj0iaHR0cDov L2RvY3MubWFrb3RlbXBsYXRlcy5vcmcvZW4vbGF0ZXN0L2luZGV4Lmh0bWwiIHRhcmdldD0iX2Js YW5rIj5odHRwOi8vZG9jcy5tYWtvdGVtcGxhdGVzLm9yZy9lbi9sYXRlc3QvaW5kZXguaHRtbDwv YT48L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2Pk1ha28gaXMgYSBweXRob24gdGVtcGxhdGluZyBs YW5ndWFnZS4gTm8gdGFnIGlzIHJlcXVpcmVkIHRvIHJ1biBweXRob24gaW4gaXQgKHdoZW4gdGhl IHNlcnZlciBpcyBidWlsZGluZyB0aGUgcGFnZSkuIFNpbXBseSB1c2UgdGhlIGJyYWNrZXRzOjwv ZGl2PjxkaXY+PGZvbnQgZmFjZT0ibW9ub3NwYWNlLCBtb25vc3BhY2UiPiZsdDslPC9mb250Pjwv ZGl2PjxkaXY+PGZvbnQgZmFjZT0ibW9ub3NwYWNlLCBtb25vc3BhY2UiPsKgIMKgICMgZXhlY3V0 ZXMgcHl0aG9uIGNvZGUgd2hpbGUgdGhlIHBhZ2UgaXMgYnVpbHQ8L2ZvbnQ+PC9kaXY+PGRpdj48 Zm9udCBmYWNlPSJtb25vc3BhY2UsIG1vbm9zcGFjZSI+wqAgwqAgIyBoZXJlIHdlIGNhbiBhY2Nl c3MgdGhlIGRhdGFiYXNlIHNpbmNlIHRoaXMgaXMgc2VydmVyIHNpZGUgY29kZTwvZm9udD48L2Rp dj48ZGl2PjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMi44MDAwMDAxOTA3MzQ5cHgiPjxmb250IGZh Y2U9Im1vbm9zcGFjZSwgbW9ub3NwYWNlIj4lJmd0OzwvZm9udD48L2Rpdj48L2Rpdj48ZGl2IHN0 eWxlPSJmb250LXNpemU6MTIuODAwMDAwMTkwNzM0OXB4Ij48c3BhbiBzdHlsZT0iZm9udC1zaXpl OnNtYWxsIj5NYWtlIHN1cmUgeW91IHVzZSAmIzM5OyZsdDslICUmZ3Q7JiMzOTsgYW5kIG5vdCAm IzM5OyZsdDslISAlJmd0OyYjMzk7IHNvIHRoYXQgZXZlcnl0aGluZyBpcyBsb2FkZWQgcHJvcGVy bHkuPC9zcGFuPjxmb250IGZhY2U9Im1vbm9zcGFjZSwgbW9ub3NwYWNlIj48YnI+PC9mb250Pjwv ZGl2PjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMi44MDAwMDAxOTA3MzQ5cHgiPjxmb250IGZhY2U9 Im1vbm9zcGFjZSwgbW9ub3NwYWNlIj48YnI+PC9mb250PjwvZGl2PjxkaXY+T25jZSB5b3UgaGF2 ZSB0aGUgZGF0YXNldCBpZHMgb3IgdXJscyBpbiBhbiBhcnJheSB5b3UgY2FuICYjMzk7cHJpbnQm IzM5OyB0aGVpciBKU09OIGludG8gYSBzY3JpcHQgdGFnIGZvciB1c2Ugd2l0aCBqYXZhc2NyaXB0 IHdoZW4gdGhlIHBhZ2UgaXMgbG9hZGVkIG9udG8gdGhlIGNsaWVudCBicm93c2VyIHVzaW5nIHRo ZSBtYWtvIGV4cHJlc3Npb24gc3ludGF4OsKgPC9kaXY+PGRpdj48c3BhbiBzdHlsZT0iZm9udC1z aXplOjEyLjgwMDAwMDE5MDczNDlweDtmb250LWZhbWlseTptb25vc3BhY2UsbW9ub3NwYWNlIj4m bHQ7c2NyaXB0IHR5cGU9JnF1b3Q7dGV4dC9qYXZhc2NyaXB0JnF1b3Q7Jmd0Ozwvc3Bhbj48YnI+ PC9kaXY+PGRpdiBzdHlsZT0iZm9udC1zaXplOjEyLjgwMDAwMDE5MDczNDlweCI+PGZvbnQgZmFj ZT0ibW9ub3NwYWNlLCBtb25vc3BhY2UiPnZhciBkYXRhc2V0SWRzID0gJHsgaC5kdW1wcyggZGF0 YXNldF9pZHMgKSB9OzwvZm9udD48L2Rpdj48ZGl2IHN0eWxlPSJmb250LXNpemU6MTIuODAwMDAw MTkwNzM0OXB4Ij48Zm9udCBmYWNlPSJtb25vc3BhY2UsIG1vbm9zcGFjZSI+Jmx0Oy9zY3JpcHQm Z3Q7PC9mb250PjwvZGl2PjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMi44MDAwMDAxOTA3MzQ5cHgi Pjxmb250IGZhY2U9Im1vbm9zcGFjZSwgbW9ub3NwYWNlIj48YnI+PC9mb250PjwvZGl2PiYjMzk7 aCYjMzk7IGlzIGZvciBoZWxwZXJzIHdoaWNoIGFyZSBvYmplY3RzIHRoYXQgR2FsYXh5IHB1dHMg aW50byBhbGwgdGhlIG1ha28gdGVtcGxhdGVzIGFuZCBoYXZlIHV0aWxpdHkgZnVuY3Rpb25zLiAm IzM5O2R1bXBzJiMzOTsgaXMgcGFydCBvZiB0aGUganNvbiBsaWJyYXJ5IGFuZCBpcyAmIzM5O2R1 bXAmIzM5O2luZyBhIEpTT04gJiMzOTtzJiMzOTt0cmluZyBpbnRvIHRoZSB0ZW1wbGF0ZS4gTm90 aWNlIHRoZXJlIGFyZSBubyBxdW90ZXMgYXJvdW5kIHRoZSBKU09OLiBNYWtvIHdpbGwgcHJpbnQg dGhlIHNlcnZlciBzaWRlIGRhdGFzZXRfaWRzIGFzIGphdmFzY3JpcHQtdXNhYmxlIEpTT04gc28g dGhleSBjYW4gYmUgdXNlZCBieSB0aGUgcGFnZSBvbiB0aGUgY2xpZW50IHNpZGUgdG8gYnVpbGQg eW91ciB1cmxzLjxicj48YnI+RXNzZW50aWFsbHkgeW91IGhhdmUgdG8gdXNlIHRoZSBKU09OIHRv IGNvbW11bmljYXRlIGJldHdlZW4gdGhlIHB5dGhvbiBhbmQgamF2YXNjcmlwdC4gWW91IGNhbm5v dCB1c2UgcHl0aG9uIG9yIHB5dGhvbiBvYmplY3RzIChsaWtlIHRyYW5zLmhpc3RvcnkpIGZyb20g amF2YXNjcmlwdCBjb2RlIGRpcmVjdGx5IHRob3VnaC48YnI+PGRpdj48YnI+PC9kaXY+PGRpdj4m IzM5O3RyYW5zJiMzOTsgc2hvdWxkIGRlZmluaXRlbHkgYmUgYXZhaWxhYmxlIGFuZCBkZWZpbmVk LiBpZ3YubWFrbyBpcyBiZWluZyBsb2FkZWQgYXMgcGFydCBvZiB0aGUgdmlzdWFsaXphdGlvbiBm cmFtZXdvcmssIGNvcnJlY3Q/PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5JZiB0aGlzIGZhaWxz IHRvIGhlbHAsIGxldCBtZSBrbm93IGFuZCB3ZSBjYW4gd29yayBkaXJlY3RseSB3aXRoIHRoZSBj b2RlIGlmIHlvdSYjMzk7ZCBsaWtlLjxicj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJIT0VuWmIi PjxkaXYgY2xhc3M9Img1Ij48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+PGJyPjxkaXYgY2xhc3M9 ImdtYWlsX3F1b3RlIj5PbiBUdWUsIEF1ZyAyNSwgMjAxNSBhdCAxOjQ4IFBNLCBBc21hIFJpeWF6 IDxzcGFuIGRpcj0ibHRyIj4mbHQ7PGEgaHJlZj0ibWFpbHRvOmFzbWFyaXlhejIzQGdtYWlsLmNv bSIgdGFyZ2V0PSJfYmxhbmsiPmFzbWFyaXlhejIzQGdtYWlsLmNvbTwvYT4mZ3Q7PC9zcGFuPiB3 cm90ZTo8YnI+PGJsb2NrcXVvdGUgY2xhc3M9ImdtYWlsX3F1b3RlIiBzdHlsZT0ibWFyZ2luOjAg MCAwIC44ZXg7Ym9yZGVyLWxlZnQ6MXB4ICNjY2Mgc29saWQ7cGFkZGluZy1sZWZ0OjFleCI+PGRp diBkaXI9Imx0ciI+SW4gYWRkaXRpb24gdG8gbXkgcHJldmlvdXMgYXR0ZW1wdHMsIGhlcmUgaXMg YW5vdGhlciBJIGhhdmUgdHJpZWQ6PGRpdj48YnI+PC9kaXY+PGRpdj48dT48Zm9udCBjb2xvcj0i IzAwMDBmZiI+aW4gaWd2Lm1ha286PC9mb250PjwvdT48L2Rpdj48ZGl2Pjx1Pjxmb250IGNvbG9y PSIjMDAwMGZmIj48YnI+PC9mb250PjwvdT48L2Rpdj48ZGl2PjxkaXY+wqAgwqAgJmx0OyUhPC9k aXY+PHNwYW4+PGRpdj7CoCDCoCDCoCB1c2Vyc19jdXJyZW50X2hpc3RvcnkgPSB0cmFucy5oaXN0 b3J5PC9kaXY+PGRpdj7CoCDCoCDCoCBkYXRhc2V0X2lkcyA9IFsgdHJhbnMuc2VjdXJpdHkuZW5j b2RlX2lkKCA8YSBocmVmPSJodHRwOi8vZC5pZCIgdGFyZ2V0PSJfYmxhbmsiPmQuaWQ8L2E+ICkg Zm9yIGQgaW4gdXNlcnNfY3VycmVudF9oaXN0b3J5LmRhdGFzZXRzIF08L2Rpdj48ZGl2PsKgIMKg ICUmZ3Q7PC9kaXY+PC9zcGFuPjxkaXY+wqAgwqAgJmx0OyVkZWYgbmFtZT0mcXVvdDtnZXREYXRh c2V0X2lkcygpJnF1b3Q7Jmd0OzwvZGl2PjxkaXY+wqAgwqAgwqAgwqAmbHQ7JTwvZGl2PjxkaXY+ wqAgwqAgwqAgwqAgwqByZXR1cm4gZGF0YXNldF9pZHM8L2Rpdj48ZGl2PsKgIMKgIMKgIMKgJSZn dDs8L2Rpdj48ZGl2PsKgIMKgICZsdDsvJWRlZiZndDs8L2Rpdj48L2Rpdj48ZGl2PsKgIMKgJmx0 O3NjcmlwdCZndDs8L2Rpdj48ZGl2PsKgIMKgIMKgPHNwYW4+dmFyPC9zcGFuPjxzcGFuPiBkYXRh c2V0X2lkcyA9IDwvc3Bhbj48c3Bhbj4mIzM5OyR7Z2V0RGF0YXNldF9pZHMoKX0mIzM5Ozwvc3Bh bj48c3Bhbj47PC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4+wqAgwqAgwqA8L3NwYW4+PHNwYW4+Y29u c29sZS5sb2c8L3NwYW4+PHNwYW4+KDwvc3Bhbj48c3Bhbj5kYXRhc2V0X2lkczwvc3Bhbj48c3Bh bj4pPC9zcGFuPjxzcGFuPjs8L3NwYW4+PC9kaXY+CgoKCgoKCgoKCgoKCgoKCjxkaXY+wqAgwqAm bHQ7L3NjcmlwdCZndDs8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2Pjxmb250IGNvbG9yPSIjMDAw MGZmIj5CdXQgdGhpcyBmYWlscyBhZ2FpbiBhbmQgZXJyb3IgYXBwZWFycyBpbiBnYWxheHkgYXMg JiMzOTtuYW1lIHRyYW5zIG5vdCBkZWZpbmVkJiMzOTsuPC9mb250PjwvZGl2PjxzcGFuPjxmb250 IGNvbG9yPSIjODg4ODg4Ij48ZGl2Pjxicj48L2Rpdj48ZGl2Pi1Bc21hPC9kaXY+PC9mb250Pjwv c3Bhbj48L2Rpdj48ZGl2PjxkaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPjxicj48ZGl2IGNs YXNzPSJnbWFpbF9xdW90ZSI+T24gVHVlLCBBdWcgMjUsIDIwMTUgYXQgMToxMiBQTSwgQXNtYSBS aXlheiA8c3BhbiBkaXI9Imx0ciI+Jmx0OzxhIGhyZWY9Im1haWx0bzphc21hcml5YXoyM0BnbWFp bC5jb20iIHRhcmdldD0iX2JsYW5rIj5hc21hcml5YXoyM0BnbWFpbC5jb208L2E+Jmd0Ozwvc3Bh bj4gd3JvdGU6PGJyPjxibG9ja3F1b3RlIGNsYXNzPSJnbWFpbF9xdW90ZSIgc3R5bGU9Im1hcmdp bjowIDAgMCAuOGV4O2JvcmRlci1sZWZ0OjFweCAjY2NjIHNvbGlkO3BhZGRpbmctbGVmdDoxZXgi PjxkaXYgZGlyPSJsdHIiPkhlbGxvLDxkaXY+PGJyPjwvZGl2PjxkaXY+SSBoYXZlIHRyaWVkIHRv IGFjY2VzcyB1c2VyJiMzOTtzIGN1cnJlbnQgaGlzdG9yeSBpbiB0aGUgJmx0O3NjcmlwdCZndDsg dGFncyBpbiBtYWtvIHRlbXBsYXRlOjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+Jmx0O3Njcmlw dCZndDs8L2Rpdj48ZGl2PnZhciB1c2Vyc19jdXJyZW50X2hpc3RvcnkgPSAmIzM5OyR7dHJhbnMu aGlzdG9yeX0mIzM5Ozs8YnI+PC9kaXY+PGRpdj5jb25zb2xlLmxvZyjCoHVzZXJzX2N1cnJlbnRf aGlzdG9yeS5kYXRhc2V0c8KgKTs8YnI+PC9kaXY+PGRpdj5mb3IgKHZhciBkYXRhc2V0IGluIHVz ZXJzX2N1cnJlbnRfaGlzdG9yeS5kYXRhc2V0cykgezxicj48L2Rpdj48ZGl2PjxkaXY+wqAgwqAg Y29uc29sZS5sb2coIGRhdGFzZXQgKTs8L2Rpdj48L2Rpdj48ZGl2Pn08YnI+PC9kaXY+PGRpdj4m bHQ7L3NjcmlwdCZndDs8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2Pjxmb250IGNvbG9yPSIjMDAw MGZmIj5UaGUgZmlyc3QgY29uc29sZS5sb2cgc2hvd3MgdGhhdCAmIzM5O3VzZXJzX2N1cnJlbnRf aGlzdG9yeS5kYXRhc2V0cyYjMzk7IGlzIHVuZGVmaW5lZC48L2ZvbnQ+PC9kaXY+PGRpdj48YnI+ PC9kaXY+PGRpdj5BY2NvcmRpbmcgdGhpcyBwaWVjZSBvZiBjb2RlIGZyb20gQ2FybCwgYWNjZXNz aW5nIGRhdGFzZXQgaWRzIHNob3VsZCBiZSBkb25lIGluIHB5dGhvbiB3aXRoaW4gYSBtYWtvIHRl bXBsYXRlIHRhZ8KgPC9kaXY+PGRpdj4mbHQ7JcKgPC9kaXY+PHNwYW4+PGRpdj48ZGl2PsKgdXNl cnNfY3VycmVudF9oaXN0b3J5ID0gdHJhbnMuaGlzdG9yeTwvZGl2PjxkaXY+wqAgZGF0YXNldF9p ZHMgPSBbIHRyYW5zLnNlY3VyaXR5LmVuY29kZV9pZCggPGEgaHJlZj0iaHR0cDovL2QuaWQiIHRh cmdldD0iX2JsYW5rIj5kLmlkPC9hPiApIGZvciBkIGluIMKgIMKgIMKgIMKgIMKgdXNlcnNfY3Vy cmVudF9oaXN0b3J5LmRhdGFzZXRzIF08L2Rpdj48L2Rpdj48L3NwYW4+PGRpdj4lJmd0OzwvZGl2 PjxkaXY+PGJyPjwvZGl2PjxkaXY+PGZvbnQgY29sb3I9IiMwMDAwZmYiPmJ1dCBhbGwgdGhlIGV4 YW1wbGVzIEkgaGF2ZSBzZWVuIHNvIGZhciBoYXZlIHNvbWUgaHRtbCB0YWcgYXNzb2NpYXRlZCB3 aXRoIHN1Y2ggY29kZS4gSG93IGNhbiBJIGF2b2lkIHVzaW5nIHRoZXNlIHRhZ3MgYW5kIHN0aWxs IHVzZSBweXRob24gYWxvbmU/PC9mb250PjwvZGl2PjxzcGFuPjxmb250IGNvbG9yPSIjODg4ODg4 Ij48ZGl2Pjxicj48L2Rpdj48ZGl2Pi1Bc21hPC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj48YnI+ PC9kaXY+PC9mb250Pjwvc3Bhbj48L2Rpdj48ZGl2PjxkaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0 cmEiPjxicj48ZGl2IGNsYXNzPSJnbWFpbF9xdW90ZSI+T24gRnJpLCBBdWcgMjEsIDIwMTUgYXQg MTE6NDEgQU0sIENhcmwgRWJlcmhhcmQgPHNwYW4gZGlyPSJsdHIiPiZsdDs8YSBocmVmPSJtYWls dG86Y2FybGZlYmVyaGFyZEBnbWFpbC5jb20iIHRhcmdldD0iX2JsYW5rIj5jYXJsZmViZXJoYXJk QGdtYWlsLmNvbTwvYT4mZ3Q7PC9zcGFuPiB3cm90ZTo8YnI+PGJsb2NrcXVvdGUgY2xhc3M9Imdt YWlsX3F1b3RlIiBzdHlsZT0ibWFyZ2luOjAgMCAwIC44ZXg7Ym9yZGVyLWxlZnQ6MXB4ICNjY2Mg c29saWQ7cGFkZGluZy1sZWZ0OjFleCI+PGRpdiBkaXI9Imx0ciI+QXMgZmFyIGFzIEkga25vdywg aXQmIzM5O3MgYmVzdCB0byB3cml0ZSB0b29sIHdyYXBwZXJzIGFzIGlmIHRoZXkgd2VyZSBtZWFu dCB0byBiZSBjYWxsZWQgb3V0c2lkZSBvZiBHYWxheHkuIEluIG90aGVyIHdvcmRzLCBpdCB3b3Vs ZCBub3QgYmUgYmVzdCB0byB0cnkgYW5kIGdldCBHYWxheHkgZGF0YXNldCBpZHMgd2l0aGluIHRo ZSB0b29sIGNvZGUuPGRpdj48YnI+PC9kaXY+PGRpdj5JZiB3ZSB6b29tIG91dCBvbiB0aGUgcHJv YmxlbSBhbmQgdGFrZSBhIGhpZ2hlciB2aWV3LCBpcyB0aGUgSlNPTiBmaWxlIHByaW1hcnkgdXNl ZCB0byBsYXVuY2ggdGhlIHZpc3VhbGl6YXRpb24gb3IgZG9lcyBpdCBoYXZlIGFub3RoZXIgdXNl IGFzIHdlbGw/wqA8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PkNhbi9pcyB0aGUgSlNPTiBwYXNz ZWQgdG8gSUdWIGRpcmVjdGx5IGluIGphdmFzY3JpcHQ/IG9yIGRvZXMgaXQgbmVlZCB0byBiZSBy ZWFkIGZyb20gdGhlIGZpbGUgc2VwYXJhdGVseSBieSBJR1YgYW5kIGluZGVwZW5kZW50IGZyb20g dGhlIHZpc3VhbGl6YXRpb24gbWFrbyBhbmQgaXRzIGFzc29jaWF0ZWQgamF2YXNjcmlwdD/CoDwv ZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+SWYgdGhlIEpTT04gZGF0YSBpcyBvbmx5IGZvciB0aGUg dmlzdWFsaXphdGlvbiwgZG9lc24mIzM5O3QgbmVlZCB0byBiZSAxMDAlIGNvcnJlY3QgaW4gdGhl IGZpbGUsIGFuZCBjYW4gYmUgcGFzc2VkIHdpdGhpbiBqYXZhc2NyaXB0LCB5b3UgY2FuIGFsdGVy IHRoZSBKU09OIGRhdGEgZGlyZWN0bHkgaW4gdGhlIHZpc3VhbGl6YXRpb24gbWFrby9qcyBieSBk ZWNvcmF0aW5nIHdpdGggdGhlIGJhbSBpZHMgYmVmb3JlIHBhc3NpbmcgaXQgdG8gSUdWLiBJbiB0 aGF0IGNhc2UsIHRoZSBwcmV2aW91cyBjb2RlIChvciBhIGNsZWFuZXIgdmVyc2lvbiBvZiBpdCkg d2lsbCBiZWdpbiB0byBnZXQgeW91IHRoZXJlLjxicj48L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2 PlVuZm9ydHVuYXRlbHksIHRoZSBwcmV2aW91cyBjb2RlIHNob3VsZCB3b3JrIGluIHRoZSB2aXN1 YWxpemF0aW9uIG1ha28gb25seS4gKFdpdGggdGhlIGNvcnJlY3Rpb246PC9kaXY+PGRpdj48Zm9u dCBmYWNlPSJtb25vc3BhY2UsIG1vbm9zcGFjZSI+ZnJvbSBnYWxheHkgaW1wb3J0IG1vZGVsPC9m b250PjwvZGl2PjxkaXY+aW5zdGVhZCBvZjwvZGl2PjxkaXY+PGZvbnQgZmFjZT0ibW9ub3NwYWNl LCBtb25vc3BhY2UiPmltcG9ydCBtb2RlbDwvZm9udD48L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2 PlRoZSB0cmFucyBpcyBhbiBvYmplY3QgZGVzY3JpYmluZyB0aGUgY3VycmVudCBXZWJUcmFuc2Fj dGlvbiAocmVxdWVzdC9yZXNwb25zZSkuIEl0IGFsbG93cyBhY2Nlc3MgdG8gYSBzcWxhbGNoZW15 IChzYSkgZGF0YWJhc2Ugc2Vzc2lvbjogdHJhbnMuc2Ffc2Vzc2lvbjwvZGl2PjwvZGl2PjxkaXY+ PGRpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+PGJyPjxkaXYgY2xhc3M9ImdtYWlsX3F1b3Rl Ij5PbiBGcmksIEF1ZyAyMSwgMjAxNSBhdCAxMToyMyBBTSwgQXNtYSBSaXlheiA8c3BhbiBkaXI9 Imx0ciI+Jmx0OzxhIGhyZWY9Im1haWx0bzphc21hcml5YXoyM0BnbWFpbC5jb20iIHRhcmdldD0i X2JsYW5rIj5hc21hcml5YXoyM0BnbWFpbC5jb208L2E+Jmd0Ozwvc3Bhbj4gd3JvdGU6PGJyPjxi bG9ja3F1b3RlIGNsYXNzPSJnbWFpbF9xdW90ZSIgc3R5bGU9Im1hcmdpbjowIDAgMCAuOGV4O2Jv cmRlci1sZWZ0OjFweCAjY2NjIHNvbGlkO3BhZGRpbmctbGVmdDoxZXgiPjxkaXYgZGlyPSJsdHIi PjxkaXY+SGkgQ2FybCw8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PlRoZSB2aXN1YWxpemF0aW9u IGNvbWVzIGludG8gcGxheSBhZnRlciBhIGxhYiBpbXBsZW1lbnRlZCB0b29sIGluIGdhbGF4eSBp cyByYW47IEkgYW0gbm90IHVzaW5nIGdhbGF4eSYjMzk7cyB3b3JrZmxvdy4gSXMgdHJhY2luZyBi YWNrIGlkcyBzdGlsbCBwb3NzaWJsZSBpbiB0aGlzIGNhc2Ugd2l0aCB0aGUgdGVzdCBjYXNlIHlv dSB3cm90ZSBlYXJsaWVyPzwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+QWxzbyBJIGNvdWxkbiYj Mzk7dCBmaWd1cmUgb3V0IHdoYXQgJnF1b3Q7dHJhbnMmcXVvdDsgcmVmZXJzIHRvIGluIHlvdXIg cHJldmlvdXMgbWVzc2FnZS7CoDwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+VGhhbmsgeW91LDwv ZGl2PjxkaXY+QXNtYTwvZGl2PjxkaXY+PGRpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+PGJy PjxkaXYgY2xhc3M9ImdtYWlsX3F1b3RlIj5PbiBUaHUsIEF1ZyAyMCwgMjAxNSBhdCAzOjAzIFBN LCBBc21hIFJpeWF6IDxzcGFuIGRpcj0ibHRyIj4mbHQ7PGEgaHJlZj0ibWFpbHRvOmFzbWFyaXlh ejIzQGdtYWlsLmNvbSIgdGFyZ2V0PSJfYmxhbmsiPmFzbWFyaXlhejIzQGdtYWlsLmNvbTwvYT4m Z3Q7PC9zcGFuPiB3cm90ZTo8YnI+PGJsb2NrcXVvdGUgY2xhc3M9ImdtYWlsX3F1b3RlIiBzdHls ZT0ibWFyZ2luOjAgMCAwIC44ZXg7Ym9yZGVyLWxlZnQ6MXB4ICNjY2Mgc29saWQ7cGFkZGluZy1s ZWZ0OjFleCI+PGRpdiBkaXI9Imx0ciI+PGJyPjxkaXYgY2xhc3M9ImdtYWlsX3F1b3RlIj48c3Bh bj4tLS0tLS0tLS0tIEZvcndhcmRlZCBtZXNzYWdlIC0tLS0tLS0tLS08YnI+RnJvbTogPGIgY2xh c3M9ImdtYWlsX3NlbmRlcm5hbWUiPkNhcmwgRWJlcmhhcmQ8L2I+IDxzcGFuIGRpcj0ibHRyIj4m bHQ7PGEgaHJlZj0ibWFpbHRvOmNhcmxmZWJlcmhhcmRAZ21haWwuY29tIiB0YXJnZXQ9Il9ibGFu ayI+Y2FybGZlYmVyaGFyZEBnbWFpbC5jb208L2E+Jmd0Ozwvc3Bhbj48YnI+RGF0ZTogVGh1LCBB dWcgMjAsIDIwMTUgYXQgMjo0NiBQTTxicj5TdWJqZWN0OiBSZTogW2dhbGF4eS1kZXZdIEdldCBk YXRhc2V0L0FQSSBpZHMgZm9yIGEgZGF0YXNldDxicj5UbzogQXNtYSBSaXlheiAmbHQ7PGEgaHJl Zj0ibWFpbHRvOmFzbWFyaXlhejIzQGdtYWlsLmNvbSIgdGFyZ2V0PSJfYmxhbmsiPmFzbWFyaXlh ejIzQGdtYWlsLmNvbTwvYT4mZ3Q7PGJyPkNjOiBnYWxheHktZGV2ICZsdDs8YSBocmVmPSJtYWls dG86Z2FsYXh5LWRldkBsaXN0cy5nYWxheHlwcm9qZWN0Lm9yZyIgdGFyZ2V0PSJfYmxhbmsiPmdh bGF4eS1kZXZAbGlzdHMuZ2FsYXh5cHJvamVjdC5vcmc8L2E+Jmd0Ozxicj48YnI+PGJyPjwvc3Bh bj48ZGl2IGRpcj0ibHRyIj48c3Bhbj5JZiBJIHVuZGVyc3RhbmQgY29ycmVjdGx5LCB0aGlzIGJl Z2lucyB0byBzb3VuZCBsZXNzIGxpa2Ugc29tZXRoaW5nIHRoZSB2aXN1YWxpemF0aW9uIGxldmVs IGNhbiBkbyBhbmQgbW9yZSBzb21ldGhpbmcgdGhhdCBuZWVkcyB0byBiZSBoYW5kbGVkIGF0IHlv dXIgdG9vbCBsZXZlbC48ZGl2Pjxicj48L2Rpdj48ZGl2PkxldCBtZSByZXBlYXQgYmFjayB3aGF0 IEkgdW5kZXJzdGFuZCB0byBiZSB0aGUgcHJvY2Vzczo8L2Rpdj48ZGl2PjEuIFlvdXIgcGlwZWxp bmUgaXMgYWN0aXZhdGVkIGJ5IHRoZSB1c2VyIGFuZCBzb21lIGluaXRpYWwgc3RlcCBpbiB0aGUg cGlwZWxpbmUgY3JlYXRlcyB0aGUgSlNPTiBmaWxlIHRoYXQgd2lsbCBjb25maWd1cmUgeW91ciB2 aXN1YWxpemF0aW9uPC9kaXY+PGRpdj4yLiBTb21lIGluZGV0ZXJtaW5hdGUgbnVtYmVyIG9mIGJh bSBmaWxlcyBhcmUgY3JlYXRlZDwvZGl2PjxkaXY+My4gVGhlIHBpcGVsaW5lIGZpbmlzaGVzIGFu ZCBhdCB0aGlzIHBvaW50IHRoZSBlbmNvZGVkIGlkcyBvZiBhbGwgdGhlIGJhbSBmaWxlcyBjcmVh dGVkIGJ5IHRoZSBwaXBlbGluZSBzaG91bGQgYmUgdXNlZCBpbiB1cmxzIGFkZGVkIHRvIHRoZSBK U09OIGZpbGUgZnJvbSBzdGVwIDE8L2Rpdj48L3NwYW4+PGRpdj40LiBUaGUgdXNlciB0aGVuIGNs aWNrcyBvbiBvbmUgb2YgdGhlIG91dHB1dHMgKHRoZSBKU09OIGZpbGU/IFllcyApIGZyb20gdGhl IHBpcGVsaW5lIHRvIGxhdW5jaCB0aGUgdmlzdWFsaXphdGlvbiBhbmQgdGhlIEpTT04gZmlsZSBp cyByZWFkPC9kaXY+PHNwYW4+PGRpdj48YnI+PC9kaXY+PGRpdj5EbyBJIGhhdmUgdGhhdCByaWdo dD8gV2hlbiB5b3Ugc2F5IHBpcGVsaW5lIGRvZXMgdGhhdCBtZWFuIGEgR2FsYXh5IHdvcmtmbG93 Pzxicj48L2Rpdj48L3NwYW4+PGRpdj4tLS0mZ3Q7IFllcywgdGhpcyBpcyBleGFjdGx5IHdoYXQg SSB3YW50IHRvIGRvLiBObywgbm90IGEgR2FsYXh5IHdvcmtmbG93LCBidXQgYSBwaXBlbGluZSB3 cml0dGVuIGluIHRoZSBsYWIgd2hpY2ggaXMgdGhlbiBjb252ZXJ0ZWQgdG8gYSBnYWxheHkgdG9v bC4gSXMgJiMzOTtoZGEmIzM5OyBhdmFpbGFibGUgYXQgdGhlIHRvb2wgbGV2ZWwgYXMgd2VsbD8g SSBoYXZlIHJlYWQgdGhyb3VnaCB0aGUgQmlvYmxlbmQgQVBJIGJ1dCBjb3VsZG4mIzM5O3QgZmln dXJlIG91dCBhIHdheSB0byBxdWVyeSBmb3Igb25seSB0aG9zZSBkYXRhc2V0cyB0aGF0IGJlaW5n IHdvcmtlZCBvbiBieSBnYWxheHkgaW4gY3VycmVudCBoaXN0b3J5Ljxicj48L2Rpdj48c3Bhbj48 ZGl2Pjxicj48L2Rpdj48ZGl2PklmIHNvLCB5b3UgY2FuIGFjY2VzcyB0aGUgd29ya2Zsb3cgdXNp bmcgdGhlIE9STSBieSB0cmFjaW5nIHVwIGZyb20gdGhlIGRhdGFzZXQgdGhhdCBpbnZva2VkIHRo ZSB2aXN1YWxpemF0aW9uIGFuZCB0aGVuIGJhY2sgZG93biB0byB0aGUgYmFtIGZpbGVzIHRoYXQg d2VyZSBjcmVhdGVkIGluIHRoZSB3b3JrZmxvdyBzdGVwczo8L2Rpdj48ZGl2Pjxicj48L2Rpdj48 ZGl2Pjxmb250IGZhY2U9Im1vbm9zcGFjZSwgbW9ub3NwYWNlIj4mbHQ7JTwvZm9udD48L2Rpdj48 ZGl2Pjxmb250IGZhY2U9Im1vbm9zcGFjZSwgbW9ub3NwYWNlIj4jIGdldCB0aGUgYmFtIGRhdGFz ZXRzIGNyZWF0ZWQgYnkgdGhlIHdvcmtmbG93IHRoYXQgY3JlYXRlZCAmIzM5O2hkYSYjMzk7PC9m b250PjwvZGl2PjxkaXY+PGZvbnQgZmFjZT0ibW9ub3NwYWNlLCBtb25vc3BhY2UiPiMgd2hlcmUg JiMzOTtoZGEmIzM5OyBpcyB0aGUgZGF0YXNldCB0aGUgdmlzdWFsaXphdGlvbiBsYXVuY2hlZCBm cm9tPC9mb250PjwvZGl2PjxkaXY+PGZvbnQgZmFjZT0ibW9ub3NwYWNlLCBtb25vc3BhY2UiPmlt cG9ydCBtb2RlbDwvZm9udD48L2Rpdj48ZGl2Pjxmb250IGZhY2U9Im1vbm9zcGFjZSwgbW9ub3Nw YWNlIj53ID0gdHJhbnMuc2Ffc2Vzc2lvbi5xdWVyeSggbW9kZWwuV29ya2Zsb3dJbnZvY2F0aW9u U3RlcCApPC9mb250PjwvZGl2PjxkaXY+PGZvbnQgZmFjZT0ibW9ub3NwYWNlLCBtb25vc3BhY2Ui PsKgIMKgIC5maWx0ZXIoIFdvcmtmbG93SW52b2NhdGlvblN0ZXAuam9iID09IGhkYS5jcmVhdGlu Z19qb2IgKS5vbmUoKS53b3JrZmxvd19pbnZvY2F0aW9uPC9mb250PjwvZGl2PjxkaXY+PGZvbnQg ZmFjZT0ibW9ub3NwYWNlLCBtb25vc3BhY2UiPmlkcyA9IFsgPGEgaHJlZj0iaHR0cDovL2QuZGF0 YXNldC5pZCIgdGFyZ2V0PSJfYmxhbmsiPmQuZGF0YXNldC5pZDwvYT4gZm9yIGQgaW4gcy5qb2Iu b3V0cHV0X2RhdGFzZXRzIGlmIGQuZGF0YXNldC5leHQgPT0gJiMzOTtiYW0mIzM5OyBdIGZvciBz IGluIHcuc3RlcHMgaWYgcy5qb2IgXTxicj48L2ZvbnQ+PC9kaXY+PGRpdj48Zm9udCBmYWNlPSJt b25vc3BhY2UsIG1vbm9zcGFjZSI+dXJscyA9IFsgLi4uIF08L2ZvbnQ+PC9kaXY+PGRpdj48Zm9u dCBmYWNlPSJtb25vc3BhY2UsIG1vbm9zcGFjZSI+JSZndDs8YnI+PC9mb250PjwvZGl2PjxkaXY+ PGJyPjwvZGl2PjxkaXY+KFRoZSBhYm92ZSBpcyByZWFsbHkgaG9ycmlibGUgY29kZSwgYnV0IHNr ZXRjaGVzIG9uZSB3YXkgeW91IGNvdWxkIGdldCB0aGUgaWRzIGZyb20gdGhlIHZpc3VhbGl6YXRp b24gbWFrbyk8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PklmIGl0JiMzOTtzIG5vdCBhIHdvcmtm bG93IGFuZCBhIHBpcGVsaW5lIGJlaW5nIHJ1biBmcm9tIHdpdGhpbiBhIEdhbGF4eSB0b29sIHdy YXBwZXIsIHRoZW4gdGhlIHRvb2wgd3JhcHBlciBjb2RlIHNob3VsZCBiZSB3cml0aW5nIHRoZSBp ZHMgdG8gdGhlIEpTT04gZmlsZS4gSXMgdGhhdCB0aGUgY2FzZSBpbnN0ZWFkPzwvZGl2Pjwvc3Bh bj48ZGl2Pi0tJmd0OyBZZXMsIHRvb2wgd3JhcHBlciBjb2RlIGlzIHdoZXJlIHRoZSBJRHMgbmVl ZCB0byBpbnNlcnRlZC4gV2lsbCB0cnkgdXNpbmcgJnF1b3Q7bW9kZWwmcXVvdDsgYW5kIHNlZSB3 aGVyZSBJIGdldCB3aXRoIGl0LjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+LVRoYW5rIHlvdSw8 L2Rpdj48ZGl2PkFzbWE8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2Pjxicj48L2Rpdj48L2Rpdj48 ZGl2PjxkaXY+PGRpdj48ZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIj48YnI+PGRpdiBjbGFz cz0iZ21haWxfcXVvdGUiPk9uIFRodSwgQXVnIDIwLCAyMDE1IGF0IDE6MjggUE0sIEFzbWEgUml5 YXogPHNwYW4gZGlyPSJsdHIiPiZsdDs8YSBocmVmPSJtYWlsdG86YXNtYXJpeWF6MjNAZ21haWwu Y29tIiB0YXJnZXQ9Il9ibGFuayI+YXNtYXJpeWF6MjNAZ21haWwuY29tPC9hPiZndDs8L3NwYW4+ IHdyb3RlOjxicj48YmxvY2txdW90ZSBjbGFzcz0iZ21haWxfcXVvdGUiIHN0eWxlPSJtYXJnaW46 MCAwIDAgLjhleDtib3JkZXItbGVmdDoxcHggI2NjYyBzb2xpZDtwYWRkaW5nLWxlZnQ6MWV4Ij48 ZGl2IGRpcj0ibHRyIj5IaSBDYXJsLDxkaXY+PGJyPjwvZGl2PjxkaXY+VGhhbmsgeW91IGZvciB5 b3VyIHJlcGx5LiBUaGlzIGRlZmluaXRlbHkgaGVscHMgbWUgZ2V0IHN0YXJ0ZWQsIG15IHF1ZXN0 aW9uIGJlaW5nOjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImZvbnQtc2l6 ZToxMi44MDAwMDAxOTA3MzQ5cHgiPnRyYW5zLmhpc3Rvcnkgd2lsbCBnZXQgYWxsIHRoZSBkYXRh c2V0IGlkcyBpbiB1c2VycyBoaXN0b3J5IHJlZ2FyZGxlc3Mgb2Ygd2hpY2ggcnVuIHRoZSBkYXRh c2V0cyBhcmUgYXNzb2NpYXRlZCB3aXRoLiBIZW5jZSBpZiB0aGUgdXNlciBoYXMgbXVsdGlwbGUg YmFtcyBsb2FkZWQgaW4gaGlzdG9yeSB0aGVyZSB3aWxsIGJlIG5vIHdheSBvZiBkaXN0aW5ndWlz aGluZyB0aGVtLjwvc3Bhbj48L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PkhlcmUgaXMgYSByb3Vn aCBpZGVhIG9mIHdoYXQgSSBhbSBlbnZpc2lvbmluZyBteSBwaXBlbGluZSB0byBkbzo8L2Rpdj48 ZGl2Pjxicj48L2Rpdj48ZGl2PkdhbGF4eSBwaXBlbGluZSBydW5zIC0mZ3Q7IHdoaWxlIGl0IGlz IHJ1bm5pbmcsIGRhdGFzZXQgaWRzIHRoYXQgYXJlIGdlbmVyYXRlZCBzaG91bGQgYmUgcmV0cmll dmVkIGZvciBlYWNoIG91dHB1dCAoaW4gbXkgY2FzZSBiYW1zIGFuZCBKU09OIGZpbGUpIC0mZ3Q7 IHdoZW4gbWFpbiBwaXBlbGluZSBmaW5pc2hlcywgaWRzIGFyZSB1cGRhdGVkIHdpdGhpbiB0aGUg SlNPTiBmaWxlIC0mZ3Q7IGFsbCB0aGUgb3V0cHV0cyBhcmUgZmVkIHRvIHVzZXJzIGhpc3Rvcnku PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj50aGlzIHdheSB0aGVyZSB3aWxsIGJlIG5vIGFtYmln dWl0eSBhcyB0byB3aGljaCBiYW1zIGFyZSBiZWluZyBhY2Nlc3NlZCBmb3Igdml6LiBJcyB0aGlz IGludGVybWVkaWF0ZSB3YXkgb2YgZ2V0dGluZyBkYXRhc2V0IGlkcyBwb3NzaWJsZT/CoDwvZGl2 PjxkaXY+PGJyPjwvZGl2PjxkaXY+VGhhbmsgeW91PC9kaXY+PHNwYW4+PGZvbnQgY29sb3I9IiM4 ODg4ODgiPjxkaXY+LUFzbWE8L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTIuODAw MDAwMTkwNzM0OXB4Ij48YnI+PC9zcGFuPjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+PHNwYW4g c3R5bGU9ImZvbnQtc2l6ZToxMi44MDAwMDAxOTA3MzQ5cHgiPjxicj48L3NwYW4+PC9kaXY+PGRp dj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEyLjgwMDAwMDE5MDczNDlweCI+PGJyPjwvc3Bhbj48 L2Rpdj48L2ZvbnQ+PC9zcGFuPjwvZGl2PjxkaXY+PGRpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRy YSI+PGJyPjxkaXYgY2xhc3M9ImdtYWlsX3F1b3RlIj5PbiBXZWQsIEF1ZyAxOSwgMjAxNSBhdCA0 OjI3IFBNLCBDYXJsIEViZXJoYXJkIDxzcGFuIGRpcj0ibHRyIj4mbHQ7PGEgaHJlZj0ibWFpbHRv OmNhcmxmZWJlcmhhcmRAZ21haWwuY29tIiB0YXJnZXQ9Il9ibGFuayI+Y2FybGZlYmVyaGFyZEBn bWFpbC5jb208L2E+Jmd0Ozwvc3Bhbj4gd3JvdGU6PGJyPjxibG9ja3F1b3RlIGNsYXNzPSJnbWFp bF9xdW90ZSIgc3R5bGU9Im1hcmdpbjowIDAgMCAuOGV4O2JvcmRlci1sZWZ0OjFweCAjY2NjIHNv bGlkO3BhZGRpbmctbGVmdDoxZXgiPjxkaXYgZGlyPSJsdHIiPkhpLCBBc21hPGRpdj48YnI+PC9k aXY+PGRpdj5JZiB5b3UmIzM5O3JlIGxvb2tpbmcgdGhyb3VnaCBkYXRhc2V0cyB2aWEgdGhlIG1h a28gcGFydCBvZiB5b3VyIHZpc3VhbGl6YXRpb24sIHlvdSBjYW4gdXNlOjwvZGl2PjxkaXY+PGJs b2NrcXVvdGUgY2xhc3M9ImdtYWlsX3F1b3RlIiBzdHlsZT0ibWFyZ2luOjBweCAwcHggMHB4IDAu OGV4O2JvcmRlci1sZWZ0LXdpZHRoOjFweDtib3JkZXItbGVmdC1jb2xvcjpyZ2IoMjA0LDIwNCwy MDQpO2JvcmRlci1sZWZ0LXN0eWxlOnNvbGlkO3BhZGRpbmctbGVmdDoxZXgiPjxmb250IGZhY2U9 Im1vbm9zcGFjZSwgbW9ub3NwYWNlIj51c2Vyc19jdXJyZW50X2hpc3RvcnkgPSB0cmFucy5oaXN0 b3J5PGJyPjwvZm9udD48Zm9udCBmYWNlPSJtb25vc3BhY2UsIG1vbm9zcGFjZSI+ZGF0YXNldF9p ZHMgPSBbIHRyYW5zLnNlY3VyaXR5LmVuY29kZV9pZCggPGEgaHJlZj0iaHR0cDovL2QuaWQiIHRh cmdldD0iX2JsYW5rIj5kLmlkPC9hPiApIGZvciBkIGluIHVzZXJzX2N1cnJlbnRfaGlzdG9yeS5k YXRhc2V0cyBdPC9mb250PjwvYmxvY2txdW90ZT48L2Rpdj4ob3Igc2ltaWxhcikgdG8gYnVpbGQg dGhlIGlkcyBuZWVkZWQgZm9yIHRoZSB1cmxzLjxkaXY+PGJyPjxkaXY+SWYgeW91IHdhbnQgdG8g Z2V0IHRoZSBpbmZvIHZpYSBqYXZhc2NyaXB0LCB5b3UgY2FuIHVzZSBzb21ldGhpbmcgbGlrZSB0 aGUgcHl0aG9uIGFib3ZlIGFuZCB0ZW1wbGF0ZSBpbnRvIGEganMgdmFyOjwvZGl2PjxibG9ja3F1 b3RlIGNsYXNzPSJnbWFpbF9xdW90ZSIgc3R5bGU9Im1hcmdpbjowcHggMHB4IDBweCAwLjhleDti b3JkZXItbGVmdC13aWR0aDoxcHg7Ym9yZGVyLWxlZnQtY29sb3I6cmdiKDIwNCwyMDQsMjA0KTti b3JkZXItbGVmdC1zdHlsZTpzb2xpZDtwYWRkaW5nLWxlZnQ6MWV4Ij48Zm9udCBmYWNlPSJtb25v c3BhY2UsIG1vbm9zcGFjZSI+dmFyIHVybCA9wqAmcXVvdDsvZGF0YXNldHMvJHsgZG5hX2RhdGFz ZXRfaWQgfS9kaXNwbGF5P3RvX2V4dD1iYW0mcXVvdDs8L2ZvbnQ+PC9ibG9ja3F1b3RlPjxkaXY+ PGJyPjwvZGl2PjxkaXY+Li4ub3IgZW5jb2RlIGFuZCB0ZW1wbGF0ZSB0aGUgaGlzdG9yeSBpZCBh bmQgdXNlIGFqYXggYW5kIHRoZSBhcGkgYWZ0ZXIgdGhlIHBhZ2UgaXMgc2VydmVkOjwvZGl2Pjxi bG9ja3F1b3RlIGNsYXNzPSJnbWFpbF9xdW90ZSIgc3R5bGU9Im1hcmdpbjowcHggMHB4IDBweCAw LjhleDtib3JkZXItbGVmdC13aWR0aDoxcHg7Ym9yZGVyLWxlZnQtY29sb3I6cmdiKDIwNCwyMDQs MjA0KTtib3JkZXItbGVmdC1zdHlsZTpzb2xpZDtwYWRkaW5nLWxlZnQ6MWV4Ij48Zm9udCBmYWNl PSJtb25vc3BhY2UsIG1vbm9zcGFjZSI+dmFyIGhpc3RvcnlJZCA9ICZxdW90OyR7IHRyYW5zLnNl Y3VyaXR5LmVuY29kZV9pZCjCoDxhIGhyZWY9Imh0dHA6Ly90cmFucy5oaXN0b3J5LmlkIiB0YXJn ZXQ9Il9ibGFuayI+dHJhbnMuaGlzdG9yeS5pZDwvYT7CoCkgfSZxdW90Ozs8YnI+PC9mb250Pjxm b250IGZhY2U9Im1vbm9zcGFjZSwgbW9ub3NwYWNlIj5qUXVlcnkuYWpheCggZ2FsYXh5X2NvbmZp Zy5yb290ICsgJiMzOTthcGkvaGlzdG9yaWVzLyYjMzk7ICsgaGlzdG9yeUlkICsgJiMzOTsvY29u dGVudHMmIzM5OyApPGJyPjwvZm9udD48Zm9udCBmYWNlPSJtb25vc3BhY2UsIG1vbm9zcGFjZSI+ wqAgwqAgLmRvbmUoIGZ1bmN0aW9uKCByZXNwb25zZSApeyAvKiB3aWxsIGNvbnRhaW4gc3VtbWFy eSBqc29uIGZvciBlYWNoIGRhdGFzZXQgaW5jbHVkaW5nIGVuY29kZWQgaWRzIGZvciBlYWNoICov IH0pPC9mb250PjwvYmxvY2txdW90ZT48ZGl2Pjxmb250IGZhY2U9Im1vbm9zcGFjZSwgbW9ub3Nw YWNlIj48YnI+PC9mb250PjwvZGl2PkxldCBtZSBrbm93IGlmIHRoYXQmIzM5O3Mgbm90IHdoYXQg eW91IHdlcmUgbG9va2luZyBmb3Igb3IgaWYgeW91IGZpbmQgYW55IHByb2JsZW1zIHdpdGggaXQu PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPjxicj48ZGl2IGNsYXNzPSJnbWFp bF9xdW90ZSI+PGRpdj48ZGl2Pk9uIFdlZCwgQXVnIDE5LCAyMDE1IGF0IDExOjAxIEFNLCBBc21h IFJpeWF6IDxzcGFuIGRpcj0ibHRyIj4mbHQ7PGEgaHJlZj0ibWFpbHRvOmFzbWFyaXlhejIzQGdt YWlsLmNvbSIgdGFyZ2V0PSJfYmxhbmsiPmFzbWFyaXlhejIzQGdtYWlsLmNvbTwvYT4mZ3Q7PC9z cGFuPiB3cm90ZTo8YnI+PC9kaXY+PC9kaXY+PGJsb2NrcXVvdGUgY2xhc3M9ImdtYWlsX3F1b3Rl IiBzdHlsZT0ibWFyZ2luOjAgMCAwIC44ZXg7Ym9yZGVyLWxlZnQ6MXB4ICNjY2Mgc29saWQ7cGFk ZGluZy1sZWZ0OjFleCI+PGRpdj48ZGl2PjxkaXYgZGlyPSJsdHIiPjxkaXY+PHNwYW4gc3R5bGU9 ImZvbnQtc2l6ZToxMi44MDAwMDAxOTA3MzQ5cHgiPjxmb250IGNvbG9yPSIjMDAwMDAwIj5IZWxs byBHYWxheHktZGV2LDwvZm9udD48L3NwYW4+PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0iZm9udC1z aXplOjEyLjgwMDAwMDE5MDczNDlweCI+PGZvbnQgY29sb3I9IiMwMDAwMDAiPjxicj48L2ZvbnQ+ PC9zcGFuPjwvZGl2PjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTIuODAwMDAwMTkwNzM0OXB4Ij48 Zm9udCBjb2xvcj0iIzAwMDAwMCI+SSB0aGFuayB5b3Ugc28gbXVjaCBmb3IgYWxsIHRoZSBoZWxw IHlvdSBoYXZlIGdpdmVuIG1lLsKgPC9mb250Pjwvc3Bhbj48ZGl2PjxzcGFuIHN0eWxlPSJmb250 LXNpemU6MTIuODAwMDAwMTkwNzM0OXB4Ij48Zm9udCBjb2xvcj0iIzAwMDAwMCI+PGJyPjwvZm9u dD48L3NwYW4+PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEyLjgwMDAwMDE5MDcz NDlweCI+PGZvbnQgY29sb3I9IiMwMDAwMDAiPkkgaGF2ZSBhIHF1ZXN0aW9uIGFib3V0IGRhdGEg c2V0IGlkcyBpbiBnYWxheHkuIEFzIGEgYmFja2dyb3VuZCwgSSBhbSBydW5uaW5nIG15IG93biBn YWxheHkgaW5zdGFuY2Ugb24gYSBzZXJ2ZXIuwqA8L2ZvbnQ+PC9zcGFuPjxzcGFuIHN0eWxlPSJj b2xvcjpyZ2IoMCwwLDApO2ZvbnQtc2l6ZToxMi44MDAwMDAxOTA3MzQ5cHgiPkEgcGlwZWxpbmUg aW1wbGVtZW50ZWQgaW4gdGhlIGxhYiBwcm9kdWNlcyB0aGUgZm9sbG93aW5nIGZpbGVzIGluIHRo ZSBoaXN0b3J5Ojwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEyLjgwMDAwMDE5MDczNDlw eCI+PGRpdj48Zm9udCBjb2xvcj0iIzAwMDAwMCI+PGJyPjwvZm9udD48L2Rpdj48ZGl2Pjxmb250 IGNvbG9yPSIjMDAwMDAwIj4xKSAyIEJBTSBmaWxlczxicj48L2ZvbnQ+PC9kaXY+PGRpdj48Zm9u dCBjb2xvcj0iIzAwMDAwMCI+MikgQSBKU09OIGZpbGU8L2ZvbnQ+PC9kaXY+PGRpdj48YnI+PC9k aXY+PC9zcGFuPjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMi44MDAwMDAxOTA3MzQ5cHgiPjxzcGFu IHN0eWxlPSJjb2xvcjpyZ2IoNTEsNTEsNTEpO2ZvbnQtZmFtaWx5OiYjMzk7SGVsdmV0aWNhIE5l dWUmIzM5OyxIZWx2ZXRpY2EsQXJpYWwsc2Fucy1zZXJpZjtmb250LXNpemU6MTNweDtsaW5lLWhl aWdodDoxOC41NzE0MzAyMDYyOTg4cHgiPk15IGdvYWwgaXMgdG8gdXNlIHRoaXMgSlNPTiBmaWxl wqA8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOnJnYig1MSw1MSw1MSk7Zm9udC1mYW1pbHk6JiMz OTtIZWx2ZXRpY2EgTmV1ZSYjMzk7LEhlbHZldGljYSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6 ZToxM3B4O2xpbmUtaGVpZ2h0OjE4LjU3MTQzMDIwNjI5ODhweCI+dG8gcGFzcyB0aGUgcGF0aC9V Ukwgb2YgYmFtIGZpbGVzIGludG8gYSBjdXN0b20gSlMgd2Ugd3JvdGUgZm9yIHZpc3VhbGl6YXRp b24gcHVycG9zZS48L3NwYW4+PGJyPjwvZGl2PjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMi44MDAw MDAxOTA3MzQ5cHgiPjxzcGFuIHN0eWxlPSJjb2xvcjpyZ2IoNTEsNTEsNTEpO2ZvbnQtZmFtaWx5 OiYjMzk7SGVsdmV0aWNhIE5ldWUmIzM5OyxIZWx2ZXRpY2EsQXJpYWwsc2Fucy1zZXJpZjtmb250 LXNpemU6MTNweDtsaW5lLWhlaWdodDoxOC41NzE0MzAyMDYyOTg4cHgiPjxicj48L3NwYW4+PC9k aXY+PGRpdiBzdHlsZT0iZm9udC1zaXplOjEyLjgwMDAwMDE5MDczNDlweCI+PHNwYW4gc3R5bGU9 ImZvbnQtc2l6ZToxMi44MDAwMDAxOTA3MzQ5cHgiPlRoaXMgSlNPTiBmaWxlIGNvbnRhaW5zIGFt b25nIG1hbnkgb3RoZXIgZGV0YWlscyB0aGUgcGF0aHMvVVJMcyB0byB0aGUgYWJvdmUgYmFtIGZp bGVzLiBJIGFtIHVzaW5nIEpTT04gZmlsZXR5cGVzIHRvIHNlbmQgZGF0YSB0byB0aGUgSlMgdmlz dWFsaXphdGlvbiB3aXRoaW4gR2FsYXh5LiBUbyBkbyB0aGlzLCBJIGhhdmUgbXkgb3duIEpTIHdo aWNoIGxvYWRzIGEgQkFNIGZpbGUgZnJvbSBVUkwgcHJvdmlkZWQgaW50byBhbiBJR1YuanMgdHJh Y2suwqA8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOnJnYig1MSw1MSw1MSk7Zm9udC1mYW1pbHk6 JiMzOTtIZWx2ZXRpY2EgTmV1ZSYjMzk7LEhlbHZldGljYSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQt c2l6ZToxM3B4O2xpbmUtaGVpZ2h0OjE4LjU3MTQzMDIwNjI5ODhweCI+SUdWLmpzLCB3aGljaCBp cyByZXNwb25zaWJsZSBmb3IgbWFraW5nIHRoZSB0cmFja3MsIGV4cGVjdHMgYSB2YWxpZCBVUkwg d2hpY2ggaXMgdXBkYXRlZCBpbiB0aGUgSlNPTiBmaWxlIGluIHRoaXMgbWFubmVyOjwvc3Bhbj48 YnI+PC9kaXY+PGRpdj48ZGl2IHN0eWxlPSJmb250LXNpemU6MTIuODAwMDAwMTkwNzM0OXB4Ij48 c3BhbiBzdHlsZT0iY29sb3I6cmdiKDUxLDUxLDUxKTtmb250LWZhbWlseTomIzM5O0hlbHZldGlj YSBOZXVlJiMzOTssSGVsdmV0aWNhLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEzcHg7bGlu ZS1oZWlnaHQ6MTguNTcxNDMwMjA2Mjk4OHB4Ij48YnI+PC9zcGFuPjwvZGl2PjxkaXYgc3R5bGU9 ImZvbnQtc2l6ZToxMi44MDAwMDAxOTA3MzQ5cHgiPjxzcGFuIHN0eWxlPSJjb2xvcjpyZ2IoNTEs NTEsNTEpO2ZvbnQtZmFtaWx5OiYjMzk7SGVsdmV0aWNhIE5ldWUmIzM5OyxIZWx2ZXRpY2EsQXJp YWwsc2Fucy1zZXJpZjtmb250LXNpemU6MTNweDtsaW5lLWhlaWdodDoxOC41NzE0MzAyMDYyOTg4 cHgiPjEpIEV4dHJhY3QgdGhlIEFQSV9rZXkgYW5kIGhpc3RvcnkgaWQgZnJvbSBhIGxvYWRlZCBC QU0gZmlsZTwvc3Bhbj48L2Rpdj48ZGl2IHN0eWxlPSJmb250LXNpemU6MTIuODAwMDAwMTkwNzM0 OXB4Ij48c3BhbiBzdHlsZT0iY29sb3I6cmdiKDUxLDUxLDUxKTtmb250LWZhbWlseTomIzM5O0hl bHZldGljYSBOZXVlJiMzOTssSGVsdmV0aWNhLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEz cHg7bGluZS1oZWlnaHQ6MTguNTcxNDMwMjA2Mjk4OHB4Ij4yKSBFZGl0IHRoZSBKU09OIGZpbGUg dG8gcmVmbGVjdCB0aGUgQkFNIGZpbGUmIzM5O3MgZGF0YXNldCBpZCB0byBiZSBzb21ldGhpbmcg bGlrZSB0aGlzOjwvc3Bhbj48L2Rpdj48ZGl2IHN0eWxlPSJmb250LXNpemU6MTIuODAwMDAwMTkw NzM0OXB4Ij48c3BhbiBzdHlsZT0iY29sb3I6cmdiKDUxLDUxLDUxKTtmb250LWZhbWlseTomIzM5 O0hlbHZldGljYSBOZXVlJiMzOTssSGVsdmV0aWNhLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXpl OjEzcHg7bGluZS1oZWlnaHQ6MTguNTcxNDMwMjA2Mjk4OHB4Ij48YnI+PC9zcGFuPjwvZGl2Pjxk aXYgc3R5bGU9ImZvbnQtc2l6ZToxMi44MDAwMDAxOTA3MzQ5cHgiPjxwcmUgc3R5bGU9IndoaXRl LXNwYWNlOnByZS13cmFwO2ZvbnQtZmFtaWx5Ok1lbmxvLE1vbmFjbyxDb25zb2xhcywmIzM5O0Nv dXJpZXIgTmV3JiMzOTssbW9ub3NwYWNlO2ZvbnQtc2l6ZToxM3B4O3BhZGRpbmc6OS41cHg7bWFy Z2luLXRvcDowcHg7bWFyZ2luLWJvdHRvbToxMHB4O2xpbmUtaGVpZ2h0OjE4LjU3MTQzMDIwNjI5 ODhweDtjb2xvcjpyZ2IoNTEsNTEsNTEpO3dvcmQtYnJlYWs6YnJlYWstYWxsO3dvcmQtd3JhcDpi cmVhay13b3JkO2JvcmRlcjoxcHggc29saWQgcmdiKDIwNCwyMDQsMjA0KTtib3JkZXItcmFkaXVz OjRweDtvdmVyZmxvdzphdXRvO2JhY2tncm91bmQtY29sb3I6cmdiKDI0NSwyNDUsMjQ1KSI+ewog ICZxdW90O0NMTC1ITF9waWxvdC5yMS5mYXN0cSZxdW90OzogewogICAgJnF1b3Q7RE5BJnF1b3Q7 OiAmcXVvdDs8c3BhbiBzdHlsZT0iY29sb3I6cmdiKDAsMCwwKTtmb250LWZhbWlseTptb25vc3Bh Y2Usc2VyaWY7Zm9udC1zaXplOjEwcHg7bGluZS1oZWlnaHQ6bm9ybWFsO2JhY2tncm91bmQtY29s b3I6cmdiKDI1NSwyNTUsMjU1KSI+L2RhdGFzZXRzLzM2ZGRiNzg4YTBmMTRlYjMvZGlzcGxheT90 b19leHQ9YmFtPC9zcGFuPjxzcGFuIHN0eWxlPSJsaW5lLWhlaWdodDoxOC41NzE0MzAyMDYyOTg4 cHgiPiZxdW90OywKICAgIC4uLjwvc3Bhbj48L3ByZT48L2Rpdj48ZGl2Pjxmb250IGNvbG9yPSIj MzMzMzMzIiBmYWNlPSJIZWx2ZXRpY2EgTmV1ZSwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJp ZiI+PHNwYW4gc3R5bGU9ImxpbmUtaGVpZ2h0OjE4LjU3MTQzMDIwNjI5ODhweCI+VGhpcyB3b3Jr cyBmaW5lIGlmIEkga25vdyB0aGUgQVBJIEtleSBmb3IgYmFtIGZpbGVzLiBXaGVuIGEgcGlwZWxp bmUgZXhlY3V0ZXMgZGF0YXNldCBpZHMgYXJlIGdlbmVyYXRlZCBmb3IgZWFjaCBvdXRwdXQuIEkg d2FudCB0byBhY2Nlc3MgYW5kIGluY2x1ZGUgdGhlc2UgaWRzIGluIHRoZSBKU09OIGZpbGUgYW5k IGxvYWQgdGhlIHVwZGF0ZWQgSlNPTiBmaWxlIGludG8gdGhlIGhpc3Rvcnkgd2l0aCB0aGUgYmFt cy4gSXMgdGhlcmUgYSB3YXkgdG8gZ2V0IHRoZSBpZHMgZnJvbSB0aGUgaGlzdG9yeSBpbiB0aGlz IG1hbm5lcj88L3NwYW4+PC9mb250PjwvZGl2PjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMi44MDAw MDAxOTA3MzQ5cHgiPjxwIHN0eWxlPSJmb250LXNpemU6MTIuODAwMDAwMTkwNzM0OXB4Ij48Zm9u dCBjb2xvcj0iIzAwMDAwMCI+VGhhbmsgeW91LDwvZm9udD48L3A+PHAgc3R5bGU9ImZvbnQtc2l6 ZToxMi44MDAwMDAxOTA3MzQ5cHgiPjxmb250IGNvbG9yPSIjMDAwMDAwIj5Bc21hPC9mb250Pjwv cD48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj4KPGJyPjwvZGl2PjwvZGl2Pl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fPGJyPgpQbGVhc2Ug a2VlcCBhbGwgcmVwbGllcyBvbiB0aGUgbGlzdCBieSB1c2luZyAmcXVvdDtyZXBseSBhbGwmcXVv dDs8YnI+CmluIHlvdXIgbWFpbCBjbGllbnQuwqAgVG8gbWFuYWdlIHlvdXIgc3Vic2NyaXB0aW9u cyB0byB0aGlzPGJyPgphbmQgb3RoZXIgR2FsYXh5IGxpc3RzLCBwbGVhc2UgdXNlIHRoZSBpbnRl cmZhY2UgYXQ6PGJyPgrCoCA8YSBocmVmPSJodHRwczovL2xpc3RzLmdhbGF4eXByb2plY3Qub3Jn LyIgcmVsPSJub3JlZmVycmVyIiB0YXJnZXQ9Il9ibGFuayI+aHR0cHM6Ly9saXN0cy5nYWxheHlw cm9qZWN0Lm9yZy88L2E+PGJyPgo8YnI+ClRvIHNlYXJjaCBHYWxheHkgbWFpbGluZyBsaXN0cyB1 c2UgdGhlIHVuaWZpZWQgc2VhcmNoIGF0Ojxicj4KwqAgPGEgaHJlZj0iaHR0cDovL2dhbGF4eXBy b2plY3Qub3JnL3NlYXJjaC9tYWlsaW5nbGlzdHMvIiByZWw9Im5vcmVmZXJyZXIiIHRhcmdldD0i X2JsYW5rIj5odHRwOi8vZ2FsYXh5cHJvamVjdC5vcmcvc2VhcmNoL21haWxpbmdsaXN0cy88L2E+ PGJyPjwvYmxvY2txdW90ZT48L2Rpdj48YnI+PC9kaXY+CjwvYmxvY2txdW90ZT48L2Rpdj48YnI+ PC9kaXY+CjwvZGl2PjwvZGl2PjwvYmxvY2txdW90ZT48L2Rpdj48YnI+PC9kaXY+CjwvZGl2Pjwv ZGl2PjwvZGl2PjwvZGl2PjwvZGl2Pjxicj48L2Rpdj4KPC9ibG9ja3F1b3RlPjwvZGl2Pjxicj48 L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj4KPC9ibG9ja3F1b3RlPjwvZGl2Pjxicj48L2Rpdj4KPC9k aXY+PC9kaXY+PC9ibG9ja3F1b3RlPjwvZGl2Pjxicj48L2Rpdj4KPC9kaXY+PC9kaXY+PC9ibG9j a3F1b3RlPjwvZGl2Pjxicj48L2Rpdj4KPC9kaXY+PC9kaXY+PC9ibG9ja3F1b3RlPjwvZGl2Pjxi cj48L2Rpdj4KPC9kaXY+PC9kaXY+PC9ibG9ja3F1b3RlPjwvZGl2Pjxicj48L2Rpdj4K --===============0139073616977400027==--