From asmariyaz23@gmail.com Tue Aug 25 13:49:09 2015 From: Asma Riyaz To: galaxy-dev@lists.galaxyproject.org Subject: Re: [galaxy-dev] Get dataset/API ids for a dataset Date: Tue, 25 Aug 2015 13:48:49 -0400 Message-ID: In-Reply-To: MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============1019141111800697927==" --===============1019141111800697927== Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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 alone? > > -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 best 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 bam >> ids before passing it to IGV. In that case, the previous code (or a cleaner >> 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 session: >> 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 still >>> 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 handled 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 visualization >>>> 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 JS= ON >>>> 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 to= ol. >>>> 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 only those datas= ets >>>> 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 bam fil= es >>>> 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 the user has >>>>> multiple bams loaded in history there will be no way of distinguishing = 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 JSON >>>>> file) -> when main pipeline finishes, ids are updated within the JSON f= ile >>>>> -> 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 possi= ble? >>>>> >>>>> 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 loads= 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 updat= ed 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 int= o 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/ >>>>>>> >>>>>> >>>>>> >>>>> >>>> >>>> >>> >> > --===============1019141111800697927== Content-Type: text/html Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.htm" MIME-Version: 1.0 PGRpdiBkaXI9Imx0ciI+SW4gYWRkaXRpb24gdG8gbXkgcHJldmlvdXMgYXR0ZW1wdHMsIGhlcmUg aXMgYW5vdGhlciBJIGhhdmUgdHJpZWQ6PGRpdj48YnI+PC9kaXY+PGRpdj48dT48Zm9udCBjb2xv cj0iIzAwMDBmZiI+aW4gaWd2Lm1ha286PC9mb250PjwvdT48L2Rpdj48ZGl2Pjx1Pjxmb250IGNv bG9yPSIjMDAwMGZmIj48YnI+PC9mb250PjwvdT48L2Rpdj48ZGl2PjxkaXY+wqAgwqAgJmx0OyUh PC9kaXY+PGRpdj7CoCDCoCDCoCB1c2Vyc19jdXJyZW50X2hpc3RvcnkgPSB0cmFucy5oaXN0b3J5 PC9kaXY+PGRpdj7CoCDCoCDCoCBkYXRhc2V0X2lkcyA9IFsgdHJhbnMuc2VjdXJpdHkuZW5jb2Rl X2lkKCA8YSBocmVmPSJodHRwOi8vZC5pZCI+ZC5pZDwvYT4gKSBmb3IgZCBpbiB1c2Vyc19jdXJy ZW50X2hpc3RvcnkuZGF0YXNldHMgXTwvZGl2PjxkaXY+wqAgwqAgJSZndDs8L2Rpdj48ZGl2PsKg IMKgICZsdDslZGVmIG5hbWU9JnF1b3Q7Z2V0RGF0YXNldF9pZHMoKSZxdW90OyZndDs8L2Rpdj48 ZGl2PsKgIMKgIMKgIMKgJmx0OyU8L2Rpdj48ZGl2PsKgIMKgIMKgIMKgIMKgcmV0dXJuIGRhdGFz ZXRfaWRzPC9kaXY+PGRpdj7CoCDCoCDCoCDCoCUmZ3Q7PC9kaXY+PGRpdj7CoCDCoCAmbHQ7LyVk ZWYmZ3Q7PC9kaXY+PC9kaXY+PGRpdj7CoCDCoCZsdDtzY3JpcHQmZ3Q7PC9kaXY+PGRpdj7CoCDC oCDCoDxzcGFuIGNsYXNzPSIiPnZhcjwvc3Bhbj48c3BhbiBjbGFzcz0iIj4gZGF0YXNldF9pZHMg PSA8L3NwYW4+PHNwYW4gY2xhc3M9IiI+JiMzOTske2dldERhdGFzZXRfaWRzKCl9JiMzOTs8L3Nw YW4+PHNwYW4gY2xhc3M9IiI+Ozwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIGNsYXNzPSIiPsKgIMKg IMKgPC9zcGFuPjxzcGFuIGNsYXNzPSIiPmNvbnNvbGUubG9nPC9zcGFuPjxzcGFuIGNsYXNzPSIi Pig8L3NwYW4+PHNwYW4gY2xhc3M9IiI+ZGF0YXNldF9pZHM8L3NwYW4+PHNwYW4gY2xhc3M9IiI+ KTwvc3Bhbj48c3BhbiBjbGFzcz0iIj47PC9zcGFuPjwvZGl2PgoKCgoKCgoKCgoKCgoKCgo8ZGl2 PsKgIMKgJmx0Oy9zY3JpcHQmZ3Q7PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj48Zm9udCBjb2xv cj0iIzAwMDBmZiI+QnV0IHRoaXMgZmFpbHMgYWdhaW4gYW5kIGVycm9yIGFwcGVhcnMgaW4gZ2Fs YXh5IGFzICYjMzk7bmFtZSB0cmFucyBub3QgZGVmaW5lZCYjMzk7LjwvZm9udD48L2Rpdj48ZGl2 Pjxicj48L2Rpdj48ZGl2Pi1Bc21hPC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEi Pjxicj48ZGl2IGNsYXNzPSJnbWFpbF9xdW90ZSI+T24gVHVlLCBBdWcgMjUsIDIwMTUgYXQgMTox MiBQTSwgQXNtYSBSaXlheiA8c3BhbiBkaXI9Imx0ciI+Jmx0OzxhIGhyZWY9Im1haWx0bzphc21h cml5YXoyM0BnbWFpbC5jb20iIHRhcmdldD0iX2JsYW5rIj5hc21hcml5YXoyM0BnbWFpbC5jb208 L2E+Jmd0Ozwvc3Bhbj4gd3JvdGU6PGJyPjxibG9ja3F1b3RlIGNsYXNzPSJnbWFpbF9xdW90ZSIg c3R5bGU9Im1hcmdpbjowIDAgMCAuOGV4O2JvcmRlci1sZWZ0OjFweCAjY2NjIHNvbGlkO3BhZGRp bmctbGVmdDoxZXgiPjxkaXYgZGlyPSJsdHIiPkhlbGxvLDxkaXY+PGJyPjwvZGl2PjxkaXY+SSBo YXZlIHRyaWVkIHRvIGFjY2VzcyB1c2VyJiMzOTtzIGN1cnJlbnQgaGlzdG9yeSBpbiB0aGUgJmx0 O3NjcmlwdCZndDsgdGFncyBpbiBtYWtvIHRlbXBsYXRlOjwvZGl2PjxkaXY+PGJyPjwvZGl2Pjxk aXY+Jmx0O3NjcmlwdCZndDs8L2Rpdj48ZGl2PnZhciB1c2Vyc19jdXJyZW50X2hpc3RvcnkgPSAm IzM5OyR7dHJhbnMuaGlzdG9yeX0mIzM5Ozs8YnI+PC9kaXY+PGRpdj5jb25zb2xlLmxvZyjCoHVz ZXJzX2N1cnJlbnRfaGlzdG9yeS5kYXRhc2V0c8KgKTs8YnI+PC9kaXY+PGRpdj5mb3IgKHZhciBk YXRhc2V0IGluIHVzZXJzX2N1cnJlbnRfaGlzdG9yeS5kYXRhc2V0cykgezxicj48L2Rpdj48ZGl2 PjxkaXY+wqAgwqAgY29uc29sZS5sb2coIGRhdGFzZXQgKTs8L2Rpdj48L2Rpdj48ZGl2Pn08YnI+ PC9kaXY+PGRpdj4mbHQ7L3NjcmlwdCZndDs8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2Pjxmb250 IGNvbG9yPSIjMDAwMGZmIj5UaGUgZmlyc3QgY29uc29sZS5sb2cgc2hvd3MgdGhhdCAmIzM5O3Vz ZXJzX2N1cnJlbnRfaGlzdG9yeS5kYXRhc2V0cyYjMzk7IGlzIHVuZGVmaW5lZC48L2ZvbnQ+PC9k aXY+PGRpdj48YnI+PC9kaXY+PGRpdj5BY2NvcmRpbmcgdGhpcyBwaWVjZSBvZiBjb2RlIGZyb20g Q2FybCwgYWNjZXNzaW5nIGRhdGFzZXQgaWRzIHNob3VsZCBiZSBkb25lIGluIHB5dGhvbiB3aXRo aW4gYSBtYWtvIHRlbXBsYXRlIHRhZ8KgPC9kaXY+PGRpdj4mbHQ7JcKgPC9kaXY+PHNwYW4gY2xh c3M9IiI+PGRpdj48ZGl2PsKgdXNlcnNfY3VycmVudF9oaXN0b3J5ID0gdHJhbnMuaGlzdG9yeTwv ZGl2PjxkaXY+wqAgZGF0YXNldF9pZHMgPSBbIHRyYW5zLnNlY3VyaXR5LmVuY29kZV9pZCggPGEg aHJlZj0iaHR0cDovL2QuaWQiIHRhcmdldD0iX2JsYW5rIj5kLmlkPC9hPiApIGZvciBkIGluIMKg IMKgIMKgIMKgIMKgdXNlcnNfY3VycmVudF9oaXN0b3J5LmRhdGFzZXRzIF08L2Rpdj48L2Rpdj48 L3NwYW4+PGRpdj4lJmd0OzwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+PGZvbnQgY29sb3I9IiMw MDAwZmYiPmJ1dCBhbGwgdGhlIGV4YW1wbGVzIEkgaGF2ZSBzZWVuIHNvIGZhciBoYXZlIHNvbWUg aHRtbCB0YWcgYXNzb2NpYXRlZCB3aXRoIHN1Y2ggY29kZS4gSG93IGNhbiBJIGF2b2lkIHVzaW5n IHRoZXNlIHRhZ3MgYW5kIHN0aWxsIHVzZSBweXRob24gYWxvbmU/PC9mb250PjwvZGl2PjxzcGFu IGNsYXNzPSJIT0VuWmIiPjxmb250IGNvbG9yPSIjODg4ODg4Ij48ZGl2Pjxicj48L2Rpdj48ZGl2 Pi1Bc21hPC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj48YnI+PC9kaXY+PC9mb250Pjwvc3Bhbj48 L2Rpdj48ZGl2IGNsYXNzPSJIT0VuWmIiPjxkaXYgY2xhc3M9Img1Ij48ZGl2IGNsYXNzPSJnbWFp bF9leHRyYSI+PGJyPjxkaXYgY2xhc3M9ImdtYWlsX3F1b3RlIj5PbiBGcmksIEF1ZyAyMSwgMjAx NSBhdCAxMTo0MSBBTSwgQ2FybCBFYmVyaGFyZCA8c3BhbiBkaXI9Imx0ciI+Jmx0OzxhIGhyZWY9 Im1haWx0bzpjYXJsZmViZXJoYXJkQGdtYWlsLmNvbSIgdGFyZ2V0PSJfYmxhbmsiPmNhcmxmZWJl cmhhcmRAZ21haWwuY29tPC9hPiZndDs8L3NwYW4+IHdyb3RlOjxicj48YmxvY2txdW90ZSBjbGFz cz0iZ21haWxfcXVvdGUiIHN0eWxlPSJtYXJnaW46MCAwIDAgLjhleDtib3JkZXItbGVmdDoxcHgg I2NjYyBzb2xpZDtwYWRkaW5nLWxlZnQ6MWV4Ij48ZGl2IGRpcj0ibHRyIj5BcyBmYXIgYXMgSSBr bm93LCBpdCYjMzk7cyBiZXN0IHRvIHdyaXRlIHRvb2wgd3JhcHBlcnMgYXMgaWYgdGhleSB3ZXJl IG1lYW50IHRvIGJlIGNhbGxlZCBvdXRzaWRlIG9mIEdhbGF4eS4gSW4gb3RoZXIgd29yZHMsIGl0 IHdvdWxkIG5vdCBiZSBiZXN0IHRvIHRyeSBhbmQgZ2V0IEdhbGF4eSBkYXRhc2V0IGlkcyB3aXRo aW4gdGhlIHRvb2wgY29kZS48ZGl2Pjxicj48L2Rpdj48ZGl2PklmIHdlIHpvb20gb3V0IG9uIHRo ZSBwcm9ibGVtIGFuZCB0YWtlIGEgaGlnaGVyIHZpZXcsIGlzIHRoZSBKU09OIGZpbGUgcHJpbWFy eSB1c2VkIHRvIGxhdW5jaCB0aGUgdmlzdWFsaXphdGlvbiBvciBkb2VzIGl0IGhhdmUgYW5vdGhl ciB1c2UgYXMgd2VsbD/CoDwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+Q2FuL2lzIHRoZSBKU09O IHBhc3NlZCB0byBJR1YgZGlyZWN0bHkgaW4gamF2YXNjcmlwdD8gb3IgZG9lcyBpdCBuZWVkIHRv IGJlIHJlYWQgZnJvbSB0aGUgZmlsZSBzZXBhcmF0ZWx5IGJ5IElHViBhbmQgaW5kZXBlbmRlbnQg ZnJvbSB0aGUgdmlzdWFsaXphdGlvbiBtYWtvIGFuZCBpdHMgYXNzb2NpYXRlZCBqYXZhc2NyaXB0 P8KgPC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5JZiB0aGUgSlNPTiBkYXRhIGlzIG9ubHkgZm9y IHRoZSB2aXN1YWxpemF0aW9uLCBkb2VzbiYjMzk7dCBuZWVkIHRvIGJlIDEwMCUgY29ycmVjdCBp biB0aGUgZmlsZSwgYW5kIGNhbiBiZSBwYXNzZWQgd2l0aGluIGphdmFzY3JpcHQsIHlvdSBjYW4g YWx0ZXIgdGhlIEpTT04gZGF0YSBkaXJlY3RseSBpbiB0aGUgdmlzdWFsaXphdGlvbiBtYWtvL2pz IGJ5IGRlY29yYXRpbmcgd2l0aCB0aGUgYmFtIGlkcyBiZWZvcmUgcGFzc2luZyBpdCB0byBJR1Yu IEluIHRoYXQgY2FzZSwgdGhlIHByZXZpb3VzIGNvZGUgKG9yIGEgY2xlYW5lciB2ZXJzaW9uIG9m IGl0KSB3aWxsIGJlZ2luIHRvIGdldCB5b3UgdGhlcmUuPGJyPjwvZGl2PjxkaXY+PGJyPjwvZGl2 PjxkaXY+VW5mb3J0dW5hdGVseSwgdGhlIHByZXZpb3VzIGNvZGUgc2hvdWxkIHdvcmsgaW4gdGhl IHZpc3VhbGl6YXRpb24gbWFrbyBvbmx5LiAoV2l0aCB0aGUgY29ycmVjdGlvbjo8L2Rpdj48ZGl2 Pjxmb250IGZhY2U9Im1vbm9zcGFjZSwgbW9ub3NwYWNlIj5mcm9tIGdhbGF4eSBpbXBvcnQgbW9k ZWw8L2ZvbnQ+PC9kaXY+PGRpdj5pbnN0ZWFkIG9mPC9kaXY+PGRpdj48Zm9udCBmYWNlPSJtb25v c3BhY2UsIG1vbm9zcGFjZSI+aW1wb3J0IG1vZGVsPC9mb250PjwvZGl2PjxkaXY+PGJyPjwvZGl2 PjxkaXY+VGhlIHRyYW5zIGlzIGFuIG9iamVjdCBkZXNjcmliaW5nIHRoZSBjdXJyZW50IFdlYlRy YW5zYWN0aW9uIChyZXF1ZXN0L3Jlc3BvbnNlKS4gSXQgYWxsb3dzIGFjY2VzcyB0byBhIHNxbGFs Y2hlbXkgKHNhKSBkYXRhYmFzZSBzZXNzaW9uOiB0cmFucy5zYV9zZXNzaW9uPC9kaXY+PC9kaXY+ PGRpdj48ZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIj48YnI+PGRpdiBjbGFzcz0iZ21haWxf cXVvdGUiPk9uIEZyaSwgQXVnIDIxLCAyMDE1IGF0IDExOjIzIEFNLCBBc21hIFJpeWF6IDxzcGFu IGRpcj0ibHRyIj4mbHQ7PGEgaHJlZj0ibWFpbHRvOmFzbWFyaXlhejIzQGdtYWlsLmNvbSIgdGFy Z2V0PSJfYmxhbmsiPmFzbWFyaXlhejIzQGdtYWlsLmNvbTwvYT4mZ3Q7PC9zcGFuPiB3cm90ZTo8 YnI+PGJsb2NrcXVvdGUgY2xhc3M9ImdtYWlsX3F1b3RlIiBzdHlsZT0ibWFyZ2luOjAgMCAwIC44 ZXg7Ym9yZGVyLWxlZnQ6MXB4ICNjY2Mgc29saWQ7cGFkZGluZy1sZWZ0OjFleCI+PGRpdiBkaXI9 Imx0ciI+PGRpdj5IaSBDYXJsLDwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+VGhlIHZpc3VhbGl6 YXRpb24gY29tZXMgaW50byBwbGF5IGFmdGVyIGEgbGFiIGltcGxlbWVudGVkIHRvb2wgaW4gZ2Fs YXh5IGlzIHJhbjsgSSBhbSBub3QgdXNpbmcgZ2FsYXh5JiMzOTtzIHdvcmtmbG93LiBJcyB0cmFj aW5nIGJhY2sgaWRzIHN0aWxsIHBvc3NpYmxlIGluIHRoaXMgY2FzZSB3aXRoIHRoZSB0ZXN0IGNh c2UgeW91IHdyb3RlIGVhcmxpZXI/PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5BbHNvIEkgY291 bGRuJiMzOTt0IGZpZ3VyZSBvdXQgd2hhdCAmcXVvdDt0cmFucyZxdW90OyByZWZlcnMgdG8gaW4g eW91ciBwcmV2aW91cyBtZXNzYWdlLsKgPC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5UaGFuayB5 b3UsPC9kaXY+PGRpdj5Bc21hPC9kaXY+PGRpdj48ZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJh Ij48YnI+PGRpdiBjbGFzcz0iZ21haWxfcXVvdGUiPk9uIFRodSwgQXVnIDIwLCAyMDE1IGF0IDM6 MDMgUE0sIEFzbWEgUml5YXogPHNwYW4gZGlyPSJsdHIiPiZsdDs8YSBocmVmPSJtYWlsdG86YXNt YXJpeWF6MjNAZ21haWwuY29tIiB0YXJnZXQ9Il9ibGFuayI+YXNtYXJpeWF6MjNAZ21haWwuY29t PC9hPiZndDs8L3NwYW4+IHdyb3RlOjxicj48YmxvY2txdW90ZSBjbGFzcz0iZ21haWxfcXVvdGUi IHN0eWxlPSJtYXJnaW46MCAwIDAgLjhleDtib3JkZXItbGVmdDoxcHggI2NjYyBzb2xpZDtwYWRk aW5nLWxlZnQ6MWV4Ij48ZGl2IGRpcj0ibHRyIj48YnI+PGRpdiBjbGFzcz0iZ21haWxfcXVvdGUi PjxzcGFuPi0tLS0tLS0tLS0gRm9yd2FyZGVkIG1lc3NhZ2UgLS0tLS0tLS0tLTxicj5Gcm9tOiA8 YiBjbGFzcz0iZ21haWxfc2VuZGVybmFtZSI+Q2FybCBFYmVyaGFyZDwvYj4gPHNwYW4gZGlyPSJs dHIiPiZsdDs8YSBocmVmPSJtYWlsdG86Y2FybGZlYmVyaGFyZEBnbWFpbC5jb20iIHRhcmdldD0i X2JsYW5rIj5jYXJsZmViZXJoYXJkQGdtYWlsLmNvbTwvYT4mZ3Q7PC9zcGFuPjxicj5EYXRlOiBU aHUsIEF1ZyAyMCwgMjAxNSBhdCAyOjQ2IFBNPGJyPlN1YmplY3Q6IFJlOiBbZ2FsYXh5LWRldl0g R2V0IGRhdGFzZXQvQVBJIGlkcyBmb3IgYSBkYXRhc2V0PGJyPlRvOiBBc21hIFJpeWF6ICZsdDs8 YSBocmVmPSJtYWlsdG86YXNtYXJpeWF6MjNAZ21haWwuY29tIiB0YXJnZXQ9Il9ibGFuayI+YXNt YXJpeWF6MjNAZ21haWwuY29tPC9hPiZndDs8YnI+Q2M6IGdhbGF4eS1kZXYgJmx0OzxhIGhyZWY9 Im1haWx0bzpnYWxheHktZGV2QGxpc3RzLmdhbGF4eXByb2plY3Qub3JnIiB0YXJnZXQ9Il9ibGFu ayI+Z2FsYXh5LWRldkBsaXN0cy5nYWxheHlwcm9qZWN0Lm9yZzwvYT4mZ3Q7PGJyPjxicj48YnI+ PC9zcGFuPjxkaXYgZGlyPSJsdHIiPjxzcGFuPklmIEkgdW5kZXJzdGFuZCBjb3JyZWN0bHksIHRo aXMgYmVnaW5zIHRvIHNvdW5kIGxlc3MgbGlrZSBzb21ldGhpbmcgdGhlIHZpc3VhbGl6YXRpb24g bGV2ZWwgY2FuIGRvIGFuZCBtb3JlIHNvbWV0aGluZyB0aGF0IG5lZWRzIHRvIGJlIGhhbmRsZWQg YXQgeW91ciB0b29sIGxldmVsLjxkaXY+PGJyPjwvZGl2PjxkaXY+TGV0IG1lIHJlcGVhdCBiYWNr IHdoYXQgSSB1bmRlcnN0YW5kIHRvIGJlIHRoZSBwcm9jZXNzOjwvZGl2PjxkaXY+MS4gWW91ciBw aXBlbGluZSBpcyBhY3RpdmF0ZWQgYnkgdGhlIHVzZXIgYW5kIHNvbWUgaW5pdGlhbCBzdGVwIGlu IHRoZSBwaXBlbGluZSBjcmVhdGVzIHRoZSBKU09OIGZpbGUgdGhhdCB3aWxsIGNvbmZpZ3VyZSB5 b3VyIHZpc3VhbGl6YXRpb248L2Rpdj48ZGl2PjIuIFNvbWUgaW5kZXRlcm1pbmF0ZSBudW1iZXIg b2YgYmFtIGZpbGVzIGFyZSBjcmVhdGVkPC9kaXY+PGRpdj4zLiBUaGUgcGlwZWxpbmUgZmluaXNo ZXMgYW5kIGF0IHRoaXMgcG9pbnQgdGhlIGVuY29kZWQgaWRzIG9mIGFsbCB0aGUgYmFtIGZpbGVz IGNyZWF0ZWQgYnkgdGhlIHBpcGVsaW5lIHNob3VsZCBiZSB1c2VkIGluIHVybHMgYWRkZWQgdG8g dGhlIEpTT04gZmlsZSBmcm9tIHN0ZXAgMTwvZGl2Pjwvc3Bhbj48ZGl2PjQuIFRoZSB1c2VyIHRo ZW4gY2xpY2tzIG9uIG9uZSBvZiB0aGUgb3V0cHV0cyAodGhlIEpTT04gZmlsZT8gWWVzICkgZnJv bSB0aGUgcGlwZWxpbmUgdG8gbGF1bmNoIHRoZSB2aXN1YWxpemF0aW9uIGFuZCB0aGUgSlNPTiBm aWxlIGlzIHJlYWQ8L2Rpdj48c3Bhbj48ZGl2Pjxicj48L2Rpdj48ZGl2PkRvIEkgaGF2ZSB0aGF0 IHJpZ2h0PyBXaGVuIHlvdSBzYXkgcGlwZWxpbmUgZG9lcyB0aGF0IG1lYW4gYSBHYWxheHkgd29y a2Zsb3c/PGJyPjwvZGl2Pjwvc3Bhbj48ZGl2Pi0tLSZndDsgWWVzLCB0aGlzIGlzIGV4YWN0bHkg d2hhdCBJIHdhbnQgdG8gZG8uIE5vLCBub3QgYSBHYWxheHkgd29ya2Zsb3csIGJ1dCBhIHBpcGVs aW5lIHdyaXR0ZW4gaW4gdGhlIGxhYiB3aGljaCBpcyB0aGVuIGNvbnZlcnRlZCB0byBhIGdhbGF4 eSB0b29sLiBJcyAmIzM5O2hkYSYjMzk7IGF2YWlsYWJsZSBhdCB0aGUgdG9vbCBsZXZlbCBhcyB3 ZWxsPyBJIGhhdmUgcmVhZCB0aHJvdWdoIHRoZSBCaW9ibGVuZCBBUEkgYnV0IGNvdWxkbiYjMzk7 dCBmaWd1cmUgb3V0IGEgd2F5IHRvIHF1ZXJ5IGZvciBvbmx5IHRob3NlIGRhdGFzZXRzIHRoYXQg YmVpbmcgd29ya2VkIG9uIGJ5IGdhbGF4eSBpbiBjdXJyZW50IGhpc3RvcnkuPGJyPjwvZGl2Pjxz cGFuPjxkaXY+PGJyPjwvZGl2PjxkaXY+SWYgc28sIHlvdSBjYW4gYWNjZXNzIHRoZSB3b3JrZmxv dyB1c2luZyB0aGUgT1JNIGJ5IHRyYWNpbmcgdXAgZnJvbSB0aGUgZGF0YXNldCB0aGF0IGludm9r ZWQgdGhlIHZpc3VhbGl6YXRpb24gYW5kIHRoZW4gYmFjayBkb3duIHRvIHRoZSBiYW0gZmlsZXMg dGhhdCB3ZXJlIGNyZWF0ZWQgaW4gdGhlIHdvcmtmbG93IHN0ZXBzOjwvZGl2PjxkaXY+PGJyPjwv ZGl2PjxkaXY+PGZvbnQgZmFjZT0ibW9ub3NwYWNlLCBtb25vc3BhY2UiPiZsdDslPC9mb250Pjwv ZGl2PjxkaXY+PGZvbnQgZmFjZT0ibW9ub3NwYWNlLCBtb25vc3BhY2UiPiMgZ2V0IHRoZSBiYW0g ZGF0YXNldHMgY3JlYXRlZCBieSB0aGUgd29ya2Zsb3cgdGhhdCBjcmVhdGVkICYjMzk7aGRhJiMz OTs8L2ZvbnQ+PC9kaXY+PGRpdj48Zm9udCBmYWNlPSJtb25vc3BhY2UsIG1vbm9zcGFjZSI+IyB3 aGVyZSAmIzM5O2hkYSYjMzk7IGlzIHRoZSBkYXRhc2V0IHRoZSB2aXN1YWxpemF0aW9uIGxhdW5j aGVkIGZyb208L2ZvbnQ+PC9kaXY+PGRpdj48Zm9udCBmYWNlPSJtb25vc3BhY2UsIG1vbm9zcGFj ZSI+aW1wb3J0IG1vZGVsPC9mb250PjwvZGl2PjxkaXY+PGZvbnQgZmFjZT0ibW9ub3NwYWNlLCBt b25vc3BhY2UiPncgPSB0cmFucy5zYV9zZXNzaW9uLnF1ZXJ5KCBtb2RlbC5Xb3JrZmxvd0ludm9j YXRpb25TdGVwICk8L2ZvbnQ+PC9kaXY+PGRpdj48Zm9udCBmYWNlPSJtb25vc3BhY2UsIG1vbm9z cGFjZSI+wqAgwqAgLmZpbHRlciggV29ya2Zsb3dJbnZvY2F0aW9uU3RlcC5qb2IgPT0gaGRhLmNy ZWF0aW5nX2pvYiApLm9uZSgpLndvcmtmbG93X2ludm9jYXRpb248L2ZvbnQ+PC9kaXY+PGRpdj48 Zm9udCBmYWNlPSJtb25vc3BhY2UsIG1vbm9zcGFjZSI+aWRzID0gWyA8YSBocmVmPSJodHRwOi8v ZC5kYXRhc2V0LmlkIiB0YXJnZXQ9Il9ibGFuayI+ZC5kYXRhc2V0LmlkPC9hPiBmb3IgZCBpbiBz LmpvYi5vdXRwdXRfZGF0YXNldHMgaWYgZC5kYXRhc2V0LmV4dCA9PSAmIzM5O2JhbSYjMzk7IF0g Zm9yIHMgaW4gdy5zdGVwcyBpZiBzLmpvYiBdPGJyPjwvZm9udD48L2Rpdj48ZGl2Pjxmb250IGZh Y2U9Im1vbm9zcGFjZSwgbW9ub3NwYWNlIj51cmxzID0gWyAuLi4gXTwvZm9udD48L2Rpdj48ZGl2 Pjxmb250IGZhY2U9Im1vbm9zcGFjZSwgbW9ub3NwYWNlIj4lJmd0Ozxicj48L2ZvbnQ+PC9kaXY+ PGRpdj48YnI+PC9kaXY+PGRpdj4oVGhlIGFib3ZlIGlzIHJlYWxseSBob3JyaWJsZSBjb2RlLCBi dXQgc2tldGNoZXMgb25lIHdheSB5b3UgY291bGQgZ2V0IHRoZSBpZHMgZnJvbSB0aGUgdmlzdWFs aXphdGlvbiBtYWtvKTwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+SWYgaXQmIzM5O3Mgbm90IGEg d29ya2Zsb3cgYW5kIGEgcGlwZWxpbmUgYmVpbmcgcnVuIGZyb20gd2l0aGluIGEgR2FsYXh5IHRv b2wgd3JhcHBlciwgdGhlbiB0aGUgdG9vbCB3cmFwcGVyIGNvZGUgc2hvdWxkIGJlIHdyaXRpbmcg dGhlIGlkcyB0byB0aGUgSlNPTiBmaWxlLiBJcyB0aGF0IHRoZSBjYXNlIGluc3RlYWQ/PC9kaXY+ PC9zcGFuPjxkaXY+LS0mZ3Q7IFllcywgdG9vbCB3cmFwcGVyIGNvZGUgaXMgd2hlcmUgdGhlIElE cyBuZWVkIHRvIGluc2VydGVkLiBXaWxsIHRyeSB1c2luZyAmcXVvdDttb2RlbCZxdW90OyBhbmQg c2VlIHdoZXJlIEkgZ2V0IHdpdGggaXQuPC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj4tVGhhbmsg eW91LDwvZGl2PjxkaXY+QXNtYTwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+PGJyPjwvZGl2Pjwv ZGl2PjxkaXY+PGRpdj48ZGl2PjxkaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPjxicj48ZGl2 IGNsYXNzPSJnbWFpbF9xdW90ZSI+T24gVGh1LCBBdWcgMjAsIDIwMTUgYXQgMToyOCBQTSwgQXNt YSBSaXlheiA8c3BhbiBkaXI9Imx0ciI+Jmx0OzxhIGhyZWY9Im1haWx0bzphc21hcml5YXoyM0Bn bWFpbC5jb20iIHRhcmdldD0iX2JsYW5rIj5hc21hcml5YXoyM0BnbWFpbC5jb208L2E+Jmd0Ozwv c3Bhbj4gd3JvdGU6PGJyPjxibG9ja3F1b3RlIGNsYXNzPSJnbWFpbF9xdW90ZSIgc3R5bGU9Im1h cmdpbjowIDAgMCAuOGV4O2JvcmRlci1sZWZ0OjFweCAjY2NjIHNvbGlkO3BhZGRpbmctbGVmdDox ZXgiPjxkaXYgZGlyPSJsdHIiPkhpIENhcmwsPGRpdj48YnI+PC9kaXY+PGRpdj5UaGFuayB5b3Ug Zm9yIHlvdXIgcmVwbHkuIFRoaXMgZGVmaW5pdGVseSBoZWxwcyBtZSBnZXQgc3RhcnRlZCwgbXkg cXVlc3Rpb24gYmVpbmc6PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0iZm9u dC1zaXplOjEyLjgwMDAwMDE5MDczNDlweCI+dHJhbnMuaGlzdG9yeSB3aWxsIGdldCBhbGwgdGhl IGRhdGFzZXQgaWRzIGluIHVzZXJzIGhpc3RvcnkgcmVnYXJkbGVzcyBvZiB3aGljaCBydW4gdGhl IGRhdGFzZXRzIGFyZSBhc3NvY2lhdGVkIHdpdGguIEhlbmNlIGlmIHRoZSB1c2VyIGhhcyBtdWx0 aXBsZSBiYW1zIGxvYWRlZCBpbiBoaXN0b3J5IHRoZXJlIHdpbGwgYmUgbm8gd2F5IG9mIGRpc3Rp bmd1aXNoaW5nIHRoZW0uPC9zcGFuPjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+SGVyZSBpcyBh IHJvdWdoIGlkZWEgb2Ygd2hhdCBJIGFtIGVudmlzaW9uaW5nIG15IHBpcGVsaW5lIHRvIGRvOjwv ZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+R2FsYXh5IHBpcGVsaW5lIHJ1bnMgLSZndDsgd2hpbGUg aXQgaXMgcnVubmluZywgZGF0YXNldCBpZHMgdGhhdCBhcmUgZ2VuZXJhdGVkIHNob3VsZCBiZSBy ZXRyaWV2ZWQgZm9yIGVhY2ggb3V0cHV0IChpbiBteSBjYXNlIGJhbXMgYW5kIEpTT04gZmlsZSkg LSZndDsgd2hlbiBtYWluIHBpcGVsaW5lIGZpbmlzaGVzLCBpZHMgYXJlIHVwZGF0ZWQgd2l0aGlu IHRoZSBKU09OIGZpbGUgLSZndDsgYWxsIHRoZSBvdXRwdXRzIGFyZSBmZWQgdG8gdXNlcnMgaGlz dG9yeS48L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PnRoaXMgd2F5IHRoZXJlIHdpbGwgYmUgbm8g YW1iaWd1aXR5IGFzIHRvIHdoaWNoIGJhbXMgYXJlIGJlaW5nIGFjY2Vzc2VkIGZvciB2aXouIElz IHRoaXMgaW50ZXJtZWRpYXRlIHdheSBvZiBnZXR0aW5nIGRhdGFzZXQgaWRzIHBvc3NpYmxlP8Kg PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5UaGFuayB5b3U8L2Rpdj48c3Bhbj48Zm9udCBjb2xv cj0iIzg4ODg4OCI+PGRpdj4tQXNtYTwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTox Mi44MDAwMDAxOTA3MzQ5cHgiPjxicj48L3NwYW4+PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj48 c3BhbiBzdHlsZT0iZm9udC1zaXplOjEyLjgwMDAwMDE5MDczNDlweCI+PGJyPjwvc3Bhbj48L2Rp dj48ZGl2PjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTIuODAwMDAwMTkwNzM0OXB4Ij48YnI+PC9z cGFuPjwvZGl2PjwvZm9udD48L3NwYW4+PC9kaXY+PGRpdj48ZGl2PjxkaXYgY2xhc3M9ImdtYWls X2V4dHJhIj48YnI+PGRpdiBjbGFzcz0iZ21haWxfcXVvdGUiPk9uIFdlZCwgQXVnIDE5LCAyMDE1 IGF0IDQ6MjcgUE0sIENhcmwgRWJlcmhhcmQgPHNwYW4gZGlyPSJsdHIiPiZsdDs8YSBocmVmPSJt YWlsdG86Y2FybGZlYmVyaGFyZEBnbWFpbC5jb20iIHRhcmdldD0iX2JsYW5rIj5jYXJsZmViZXJo YXJkQGdtYWlsLmNvbTwvYT4mZ3Q7PC9zcGFuPiB3cm90ZTo8YnI+PGJsb2NrcXVvdGUgY2xhc3M9 ImdtYWlsX3F1b3RlIiBzdHlsZT0ibWFyZ2luOjAgMCAwIC44ZXg7Ym9yZGVyLWxlZnQ6MXB4ICNj Y2Mgc29saWQ7cGFkZGluZy1sZWZ0OjFleCI+PGRpdiBkaXI9Imx0ciI+SGksIEFzbWE8ZGl2Pjxi cj48L2Rpdj48ZGl2PklmIHlvdSYjMzk7cmUgbG9va2luZyB0aHJvdWdoIGRhdGFzZXRzIHZpYSB0 aGUgbWFrbyBwYXJ0IG9mIHlvdXIgdmlzdWFsaXphdGlvbiwgeW91IGNhbiB1c2U6PC9kaXY+PGRp dj48YmxvY2txdW90ZSBjbGFzcz0iZ21haWxfcXVvdGUiIHN0eWxlPSJtYXJnaW46MHB4IDBweCAw cHggMC44ZXg7Ym9yZGVyLWxlZnQtd2lkdGg6MXB4O2JvcmRlci1sZWZ0LWNvbG9yOnJnYigyMDQs MjA0LDIwNCk7Ym9yZGVyLWxlZnQtc3R5bGU6c29saWQ7cGFkZGluZy1sZWZ0OjFleCI+PGZvbnQg ZmFjZT0ibW9ub3NwYWNlLCBtb25vc3BhY2UiPnVzZXJzX2N1cnJlbnRfaGlzdG9yeSA9IHRyYW5z Lmhpc3Rvcnk8YnI+PC9mb250Pjxmb250IGZhY2U9Im1vbm9zcGFjZSwgbW9ub3NwYWNlIj5kYXRh c2V0X2lkcyA9IFsgdHJhbnMuc2VjdXJpdHkuZW5jb2RlX2lkKCA8YSBocmVmPSJodHRwOi8vZC5p ZCIgdGFyZ2V0PSJfYmxhbmsiPmQuaWQ8L2E+ICkgZm9yIGQgaW4gdXNlcnNfY3VycmVudF9oaXN0 b3J5LmRhdGFzZXRzIF08L2ZvbnQ+PC9ibG9ja3F1b3RlPjwvZGl2PihvciBzaW1pbGFyKSB0byBi dWlsZCB0aGUgaWRzIG5lZWRlZCBmb3IgdGhlIHVybHMuPGRpdj48YnI+PGRpdj5JZiB5b3Ugd2Fu dCB0byBnZXQgdGhlIGluZm8gdmlhIGphdmFzY3JpcHQsIHlvdSBjYW4gdXNlIHNvbWV0aGluZyBs aWtlIHRoZSBweXRob24gYWJvdmUgYW5kIHRlbXBsYXRlIGludG8gYSBqcyB2YXI6PC9kaXY+PGJs b2NrcXVvdGUgY2xhc3M9ImdtYWlsX3F1b3RlIiBzdHlsZT0ibWFyZ2luOjBweCAwcHggMHB4IDAu OGV4O2JvcmRlci1sZWZ0LXdpZHRoOjFweDtib3JkZXItbGVmdC1jb2xvcjpyZ2IoMjA0LDIwNCwy MDQpO2JvcmRlci1sZWZ0LXN0eWxlOnNvbGlkO3BhZGRpbmctbGVmdDoxZXgiPjxmb250IGZhY2U9 Im1vbm9zcGFjZSwgbW9ub3NwYWNlIj52YXIgdXJsID3CoCZxdW90Oy9kYXRhc2V0cy8keyBkbmFf ZGF0YXNldF9pZCB9L2Rpc3BsYXk/dG9fZXh0PWJhbSZxdW90OzwvZm9udD48L2Jsb2NrcXVvdGU+ PGRpdj48YnI+PC9kaXY+PGRpdj4uLi5vciBlbmNvZGUgYW5kIHRlbXBsYXRlIHRoZSBoaXN0b3J5 IGlkIGFuZCB1c2UgYWpheCBhbmQgdGhlIGFwaSBhZnRlciB0aGUgcGFnZSBpcyBzZXJ2ZWQ6PC9k aXY+PGJsb2NrcXVvdGUgY2xhc3M9ImdtYWlsX3F1b3RlIiBzdHlsZT0ibWFyZ2luOjBweCAwcHgg MHB4IDAuOGV4O2JvcmRlci1sZWZ0LXdpZHRoOjFweDtib3JkZXItbGVmdC1jb2xvcjpyZ2IoMjA0 LDIwNCwyMDQpO2JvcmRlci1sZWZ0LXN0eWxlOnNvbGlkO3BhZGRpbmctbGVmdDoxZXgiPjxmb250 IGZhY2U9Im1vbm9zcGFjZSwgbW9ub3NwYWNlIj52YXIgaGlzdG9yeUlkID0gJnF1b3Q7JHsgdHJh bnMuc2VjdXJpdHkuZW5jb2RlX2lkKMKgPGEgaHJlZj0iaHR0cDovL3RyYW5zLmhpc3RvcnkuaWQi IHRhcmdldD0iX2JsYW5rIj50cmFucy5oaXN0b3J5LmlkPC9hPsKgKSB9JnF1b3Q7Ozxicj48L2Zv bnQ+PGZvbnQgZmFjZT0ibW9ub3NwYWNlLCBtb25vc3BhY2UiPmpRdWVyeS5hamF4KCBnYWxheHlf Y29uZmlnLnJvb3QgKyAmIzM5O2FwaS9oaXN0b3JpZXMvJiMzOTsgKyBoaXN0b3J5SWQgKyAmIzM5 Oy9jb250ZW50cyYjMzk7ICk8YnI+PC9mb250Pjxmb250IGZhY2U9Im1vbm9zcGFjZSwgbW9ub3Nw YWNlIj7CoCDCoCAuZG9uZSggZnVuY3Rpb24oIHJlc3BvbnNlICl7IC8qIHdpbGwgY29udGFpbiBz dW1tYXJ5IGpzb24gZm9yIGVhY2ggZGF0YXNldCBpbmNsdWRpbmcgZW5jb2RlZCBpZHMgZm9yIGVh Y2ggKi8gfSk8L2ZvbnQ+PC9ibG9ja3F1b3RlPjxkaXY+PGZvbnQgZmFjZT0ibW9ub3NwYWNlLCBt b25vc3BhY2UiPjxicj48L2ZvbnQ+PC9kaXY+TGV0IG1lIGtub3cgaWYgdGhhdCYjMzk7cyBub3Qg d2hhdCB5b3Ugd2VyZSBsb29raW5nIGZvciBvciBpZiB5b3UgZmluZCBhbnkgcHJvYmxlbXMgd2l0 aCBpdC48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+PGJyPjxkaXYgY2xhc3M9 ImdtYWlsX3F1b3RlIj48ZGl2PjxkaXY+T24gV2VkLCBBdWcgMTksIDIwMTUgYXQgMTE6MDEgQU0s IEFzbWEgUml5YXogPHNwYW4gZGlyPSJsdHIiPiZsdDs8YSBocmVmPSJtYWlsdG86YXNtYXJpeWF6 MjNAZ21haWwuY29tIiB0YXJnZXQ9Il9ibGFuayI+YXNtYXJpeWF6MjNAZ21haWwuY29tPC9hPiZn dDs8L3NwYW4+IHdyb3RlOjxicj48L2Rpdj48L2Rpdj48YmxvY2txdW90ZSBjbGFzcz0iZ21haWxf cXVvdGUiIHN0eWxlPSJtYXJnaW46MCAwIDAgLjhleDtib3JkZXItbGVmdDoxcHggI2NjYyBzb2xp ZDtwYWRkaW5nLWxlZnQ6MWV4Ij48ZGl2PjxkaXY+PGRpdiBkaXI9Imx0ciI+PGRpdj48c3BhbiBz dHlsZT0iZm9udC1zaXplOjEyLjgwMDAwMDE5MDczNDlweCI+PGZvbnQgY29sb3I9IiMwMDAwMDAi PkhlbGxvIEdhbGF4eS1kZXYsPC9mb250Pjwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJm b250LXNpemU6MTIuODAwMDAwMTkwNzM0OXB4Ij48Zm9udCBjb2xvcj0iIzAwMDAwMCI+PGJyPjwv Zm9udD48L3NwYW4+PC9kaXY+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMi44MDAwMDAxOTA3MzQ5 cHgiPjxmb250IGNvbG9yPSIjMDAwMDAwIj5JIHRoYW5rIHlvdSBzbyBtdWNoIGZvciBhbGwgdGhl IGhlbHAgeW91IGhhdmUgZ2l2ZW4gbWUuwqA8L2ZvbnQ+PC9zcGFuPjxkaXY+PHNwYW4gc3R5bGU9 ImZvbnQtc2l6ZToxMi44MDAwMDAxOTA3MzQ5cHgiPjxmb250IGNvbG9yPSIjMDAwMDAwIj48YnI+ PC9mb250Pjwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTIuODAwMDAw MTkwNzM0OXB4Ij48Zm9udCBjb2xvcj0iIzAwMDAwMCI+SSBoYXZlIGEgcXVlc3Rpb24gYWJvdXQg ZGF0YSBzZXQgaWRzIGluIGdhbGF4eS4gQXMgYSBiYWNrZ3JvdW5kLCBJIGFtIHJ1bm5pbmcgbXkg b3duIGdhbGF4eSBpbnN0YW5jZSBvbiBhIHNlcnZlci7CoDwvZm9udD48L3NwYW4+PHNwYW4gc3R5 bGU9ImNvbG9yOnJnYigwLDAsMCk7Zm9udC1zaXplOjEyLjgwMDAwMDE5MDczNDlweCI+QSBwaXBl bGluZSBpbXBsZW1lbnRlZCBpbiB0aGUgbGFiIHByb2R1Y2VzIHRoZSBmb2xsb3dpbmcgZmlsZXMg aW4gdGhlIGhpc3Rvcnk6PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTIuODAwMDAwMTkw NzM0OXB4Ij48ZGl2Pjxmb250IGNvbG9yPSIjMDAwMDAwIj48YnI+PC9mb250PjwvZGl2PjxkaXY+ PGZvbnQgY29sb3I9IiMwMDAwMDAiPjEpIDIgQkFNIGZpbGVzPGJyPjwvZm9udD48L2Rpdj48ZGl2 Pjxmb250IGNvbG9yPSIjMDAwMDAwIj4yKSBBIEpTT04gZmlsZTwvZm9udD48L2Rpdj48ZGl2Pjxi cj48L2Rpdj48L3NwYW4+PGRpdiBzdHlsZT0iZm9udC1zaXplOjEyLjgwMDAwMDE5MDczNDlweCI+ PHNwYW4gc3R5bGU9ImNvbG9yOnJnYig1MSw1MSw1MSk7Zm9udC1mYW1pbHk6JiMzOTtIZWx2ZXRp Y2EgTmV1ZSYjMzk7LEhlbHZldGljYSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxM3B4O2xp bmUtaGVpZ2h0OjE4LjU3MTQzMDIwNjI5ODhweCI+TXkgZ29hbCBpcyB0byB1c2UgdGhpcyBKU09O IGZpbGXCoDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6cmdiKDUxLDUxLDUxKTtmb250LWZhbWls eTomIzM5O0hlbHZldGljYSBOZXVlJiMzOTssSGVsdmV0aWNhLEFyaWFsLHNhbnMtc2VyaWY7Zm9u dC1zaXplOjEzcHg7bGluZS1oZWlnaHQ6MTguNTcxNDMwMjA2Mjk4OHB4Ij50byBwYXNzIHRoZSBw YXRoL1VSTCBvZiBiYW0gZmlsZXMgaW50byBhIGN1c3RvbSBKUyB3ZSB3cm90ZSBmb3IgdmlzdWFs aXphdGlvbiBwdXJwb3NlLjwvc3Bhbj48YnI+PC9kaXY+PGRpdiBzdHlsZT0iZm9udC1zaXplOjEy LjgwMDAwMDE5MDczNDlweCI+PHNwYW4gc3R5bGU9ImNvbG9yOnJnYig1MSw1MSw1MSk7Zm9udC1m YW1pbHk6JiMzOTtIZWx2ZXRpY2EgTmV1ZSYjMzk7LEhlbHZldGljYSxBcmlhbCxzYW5zLXNlcmlm O2ZvbnQtc2l6ZToxM3B4O2xpbmUtaGVpZ2h0OjE4LjU3MTQzMDIwNjI5ODhweCI+PGJyPjwvc3Bh bj48L2Rpdj48ZGl2IHN0eWxlPSJmb250LXNpemU6MTIuODAwMDAwMTkwNzM0OXB4Ij48c3BhbiBz dHlsZT0iZm9udC1zaXplOjEyLjgwMDAwMDE5MDczNDlweCI+VGhpcyBKU09OIGZpbGUgY29udGFp bnMgYW1vbmcgbWFueSBvdGhlciBkZXRhaWxzIHRoZSBwYXRocy9VUkxzIHRvIHRoZSBhYm92ZSBi YW0gZmlsZXMuIEkgYW0gdXNpbmcgSlNPTiBmaWxldHlwZXMgdG8gc2VuZCBkYXRhIHRvIHRoZSBK UyB2aXN1YWxpemF0aW9uIHdpdGhpbiBHYWxheHkuIFRvIGRvIHRoaXMsIEkgaGF2ZSBteSBvd24g SlMgd2hpY2ggbG9hZHMgYSBCQU0gZmlsZSBmcm9tIFVSTCBwcm92aWRlZCBpbnRvIGFuIElHVi5q cyB0cmFjay7CoDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6cmdiKDUxLDUxLDUxKTtmb250LWZh bWlseTomIzM5O0hlbHZldGljYSBOZXVlJiMzOTssSGVsdmV0aWNhLEFyaWFsLHNhbnMtc2VyaWY7 Zm9udC1zaXplOjEzcHg7bGluZS1oZWlnaHQ6MTguNTcxNDMwMjA2Mjk4OHB4Ij5JR1YuanMsIHdo aWNoIGlzIHJlc3BvbnNpYmxlIGZvciBtYWtpbmcgdGhlIHRyYWNrcywgZXhwZWN0cyBhIHZhbGlk IFVSTCB3aGljaCBpcyB1cGRhdGVkIGluIHRoZSBKU09OIGZpbGUgaW4gdGhpcyBtYW5uZXI6PC9z cGFuPjxicj48L2Rpdj48ZGl2PjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMi44MDAwMDAxOTA3MzQ5 cHgiPjxzcGFuIHN0eWxlPSJjb2xvcjpyZ2IoNTEsNTEsNTEpO2ZvbnQtZmFtaWx5OiYjMzk7SGVs dmV0aWNhIE5ldWUmIzM5OyxIZWx2ZXRpY2EsQXJpYWwsc2Fucy1zZXJpZjtmb250LXNpemU6MTNw eDtsaW5lLWhlaWdodDoxOC41NzE0MzAyMDYyOTg4cHgiPjxicj48L3NwYW4+PC9kaXY+PGRpdiBz dHlsZT0iZm9udC1zaXplOjEyLjgwMDAwMDE5MDczNDlweCI+PHNwYW4gc3R5bGU9ImNvbG9yOnJn Yig1MSw1MSw1MSk7Zm9udC1mYW1pbHk6JiMzOTtIZWx2ZXRpY2EgTmV1ZSYjMzk7LEhlbHZldGlj YSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxM3B4O2xpbmUtaGVpZ2h0OjE4LjU3MTQzMDIw NjI5ODhweCI+MSkgRXh0cmFjdCB0aGUgQVBJX2tleSBhbmQgaGlzdG9yeSBpZCBmcm9tIGEgbG9h ZGVkIEJBTSBmaWxlPC9zcGFuPjwvZGl2PjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMi44MDAwMDAx OTA3MzQ5cHgiPjxzcGFuIHN0eWxlPSJjb2xvcjpyZ2IoNTEsNTEsNTEpO2ZvbnQtZmFtaWx5OiYj Mzk7SGVsdmV0aWNhIE5ldWUmIzM5OyxIZWx2ZXRpY2EsQXJpYWwsc2Fucy1zZXJpZjtmb250LXNp emU6MTNweDtsaW5lLWhlaWdodDoxOC41NzE0MzAyMDYyOTg4cHgiPjIpIEVkaXQgdGhlIEpTT04g ZmlsZSB0byByZWZsZWN0IHRoZSBCQU0gZmlsZSYjMzk7cyBkYXRhc2V0IGlkIHRvIGJlIHNvbWV0 aGluZyBsaWtlIHRoaXM6PC9zcGFuPjwvZGl2PjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMi44MDAw MDAxOTA3MzQ5cHgiPjxzcGFuIHN0eWxlPSJjb2xvcjpyZ2IoNTEsNTEsNTEpO2ZvbnQtZmFtaWx5 OiYjMzk7SGVsdmV0aWNhIE5ldWUmIzM5OyxIZWx2ZXRpY2EsQXJpYWwsc2Fucy1zZXJpZjtmb250 LXNpemU6MTNweDtsaW5lLWhlaWdodDoxOC41NzE0MzAyMDYyOTg4cHgiPjxicj48L3NwYW4+PC9k aXY+PGRpdiBzdHlsZT0iZm9udC1zaXplOjEyLjgwMDAwMDE5MDczNDlweCI+PHByZSBzdHlsZT0i d2hpdGUtc3BhY2U6cHJlLXdyYXA7Zm9udC1mYW1pbHk6TWVubG8sTW9uYWNvLENvbnNvbGFzLCYj Mzk7Q291cmllciBOZXcmIzM5Oyxtb25vc3BhY2U7Zm9udC1zaXplOjEzcHg7cGFkZGluZzo5LjVw eDttYXJnaW4tdG9wOjBweDttYXJnaW4tYm90dG9tOjEwcHg7bGluZS1oZWlnaHQ6MTguNTcxNDMw MjA2Mjk4OHB4O2NvbG9yOnJnYig1MSw1MSw1MSk7d29yZC1icmVhazpicmVhay1hbGw7d29yZC13 cmFwOmJyZWFrLXdvcmQ7Ym9yZGVyOjFweCBzb2xpZCByZ2IoMjA0LDIwNCwyMDQpO2JvcmRlci1y YWRpdXM6NHB4O292ZXJmbG93OmF1dG87YmFja2dyb3VuZC1jb2xvcjpyZ2IoMjQ1LDI0NSwyNDUp Ij57CiAgJnF1b3Q7Q0xMLUhMX3BpbG90LnIxLmZhc3RxJnF1b3Q7OiB7CiAgICAmcXVvdDtETkEm cXVvdDs6ICZxdW90OzxzcGFuIHN0eWxlPSJjb2xvcjpyZ2IoMCwwLDApO2ZvbnQtZmFtaWx5Om1v bm9zcGFjZSxzZXJpZjtmb250LXNpemU6MTBweDtsaW5lLWhlaWdodDpub3JtYWw7YmFja2dyb3Vu ZC1jb2xvcjpyZ2IoMjU1LDI1NSwyNTUpIj4vZGF0YXNldHMvMzZkZGI3ODhhMGYxNGViMy9kaXNw bGF5P3RvX2V4dD1iYW08L3NwYW4+PHNwYW4gc3R5bGU9ImxpbmUtaGVpZ2h0OjE4LjU3MTQzMDIw NjI5ODhweCI+JnF1b3Q7LAogICAgLi4uPC9zcGFuPjwvcHJlPjwvZGl2PjxkaXY+PGZvbnQgY29s b3I9IiMzMzMzMzMiIGZhY2U9IkhlbHZldGljYSBOZXVlLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5z LXNlcmlmIj48c3BhbiBzdHlsZT0ibGluZS1oZWlnaHQ6MTguNTcxNDMwMjA2Mjk4OHB4Ij5UaGlz IHdvcmtzIGZpbmUgaWYgSSBrbm93IHRoZSBBUEkgS2V5IGZvciBiYW0gZmlsZXMuIFdoZW4gYSBw aXBlbGluZSBleGVjdXRlcyBkYXRhc2V0IGlkcyBhcmUgZ2VuZXJhdGVkIGZvciBlYWNoIG91dHB1 dC4gSSB3YW50IHRvIGFjY2VzcyBhbmQgaW5jbHVkZSB0aGVzZSBpZHMgaW4gdGhlIEpTT04gZmls ZSBhbmQgbG9hZCB0aGUgdXBkYXRlZCBKU09OIGZpbGUgaW50byB0aGUgaGlzdG9yeSB3aXRoIHRo ZSBiYW1zLiBJcyB0aGVyZSBhIHdheSB0byBnZXQgdGhlIGlkcyBmcm9tIHRoZSBoaXN0b3J5IGlu IHRoaXMgbWFubmVyPzwvc3Bhbj48L2ZvbnQ+PC9kaXY+PGRpdiBzdHlsZT0iZm9udC1zaXplOjEy LjgwMDAwMDE5MDczNDlweCI+PHAgc3R5bGU9ImZvbnQtc2l6ZToxMi44MDAwMDAxOTA3MzQ5cHgi Pjxmb250IGNvbG9yPSIjMDAwMDAwIj5UaGFuayB5b3UsPC9mb250PjwvcD48cCBzdHlsZT0iZm9u dC1zaXplOjEyLjgwMDAwMDE5MDczNDlweCI+PGZvbnQgY29sb3I9IiMwMDAwMDAiPkFzbWE8L2Zv bnQ+PC9wPjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2Pgo8YnI+PC9kaXY+PC9kaXY+X19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX188YnI+ClBs ZWFzZSBrZWVwIGFsbCByZXBsaWVzIG9uIHRoZSBsaXN0IGJ5IHVzaW5nICZxdW90O3JlcGx5IGFs bCZxdW90Ozxicj4KaW4geW91ciBtYWlsIGNsaWVudC7CoCBUbyBtYW5hZ2UgeW91ciBzdWJzY3Jp cHRpb25zIHRvIHRoaXM8YnI+CmFuZCBvdGhlciBHYWxheHkgbGlzdHMsIHBsZWFzZSB1c2UgdGhl IGludGVyZmFjZSBhdDo8YnI+CsKgIDxhIGhyZWY9Imh0dHBzOi8vbGlzdHMuZ2FsYXh5cHJvamVj dC5vcmcvIiByZWw9Im5vcmVmZXJyZXIiIHRhcmdldD0iX2JsYW5rIj5odHRwczovL2xpc3RzLmdh bGF4eXByb2plY3Qub3JnLzwvYT48YnI+Cjxicj4KVG8gc2VhcmNoIEdhbGF4eSBtYWlsaW5nIGxp c3RzIHVzZSB0aGUgdW5pZmllZCBzZWFyY2ggYXQ6PGJyPgrCoCA8YSBocmVmPSJodHRwOi8vZ2Fs YXh5cHJvamVjdC5vcmcvc2VhcmNoL21haWxpbmdsaXN0cy8iIHJlbD0ibm9yZWZlcnJlciIgdGFy Z2V0PSJfYmxhbmsiPmh0dHA6Ly9nYWxheHlwcm9qZWN0Lm9yZy9zZWFyY2gvbWFpbGluZ2xpc3Rz LzwvYT48YnI+PC9ibG9ja3F1b3RlPjwvZGl2Pjxicj48L2Rpdj4KPC9ibG9ja3F1b3RlPjwvZGl2 Pjxicj48L2Rpdj4KPC9kaXY+PC9kaXY+PC9ibG9ja3F1b3RlPjwvZGl2Pjxicj48L2Rpdj4KPC9k aXY+PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+PGJyPjwvZGl2Pgo8L2Jsb2NrcXVvdGU+PC9kaXY+ PGJyPjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2Pgo8L2Jsb2NrcXVvdGU+PC9kaXY+PGJyPjwvZGl2 Pgo8L2Rpdj48L2Rpdj48L2Jsb2NrcXVvdGU+PC9kaXY+PGJyPjwvZGl2Pgo8L2Rpdj48L2Rpdj48 L2Jsb2NrcXVvdGU+PC9kaXY+PGJyPjwvZGl2Pgo= --===============1019141111800697927==--