direct indexing with scan IDs

38 views
Skip to first unread message

Parminder Kaur

unread,
Jan 4, 2018, 1:52:36 PM1/4/18
to Pyteomics
Hi,

I noticed on the documentation that "MzXML also supports direct indexing with scan IDs." I am wondering what's the best way to efficiently access individual scan data.
Currently, to access scan num 500, I am using and getting the following errors.

reader = mzxml.read(sfname, use_index=True)
spectrum = reader['num=500']
spectrum = reader['scan=500']

Traceback (most recent call last):

File "/Users/parminder/anaconda/anaconda/lib/python3.4/site-packages/pyteomics/xml.py", line 574, in __getitem__
return super(ByteEncodingOrderedDict, self).__getitem__(key)
KeyError: 'num=500'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/parminder/anaconda/anaconda/lib/python3.4/site-packages/pyteomics/xml.py", line 900, in get_by_id
offset = index[elem_id]
File "/Users/parminder/anaconda/anaconda/lib/python3.4/site-packages/pyteomics/xml.py", line 577, in __getitem__
return super(ByteEncodingOrderedDict, self).__getitem__(key)
KeyError: b'num=500'

During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/parminder/anaconda/anaconda/lib/python3.4/site-packages/pyteomics/xml.py", line 911, in __getitem__
return self.get_by_id(elem_id)
File "/Users/parminder/anaconda/anaconda/lib/python3.4/site-packages/pyteomics/xml.py", line 907, in get_by_id
data = self._get_info_smart(elem, **kwargs)
File "/Users/parminder/anaconda/anaconda/lib/python3.4/site-packages/pyteomics/mzxml.py", line 137, in _get_info_smart
name = xml._local_name(element)
File "/Users/parminder/anaconda/anaconda/lib/python3.4/site-packages/pyteomics/xml.py", line 51, in _local_name
if element.tag and element.tag[0] == '{':
AttributeError: 'NoneType' object has no attribute 'tag'


Traceback (most recent call last):

  File "/Users/parminder/anaconda/anaconda/lib/python3.4/site-packages/pyteomics/xml.py", line 574, in __getitem__

    return super(ByteEncodingOrderedDict, self).__getitem__(key)

KeyError: 'scan=100'


During handling of the above exception, another exception occurred:


Traceback (most recent call last):

  File "/Users/parminder/anaconda/anaconda/lib/python3.4/site-packages/pyteomics/xml.py", line 900, in get_by_id

    offset = index[elem_id]

  File "/Users/parminder/anaconda/anaconda/lib/python3.4/site-packages/pyteomics/xml.py", line 737, in __getitem__

    return self.offsets[key]

  File "/Users/parminder/anaconda/anaconda/lib/python3.4/site-packages/pyteomics/xml.py", line 577, in __getitem__

    return super(ByteEncodingOrderedDict, self).__getitem__(key)

KeyError: b'scan=100'


During handling of the above exception, another exception occurred:


Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

  File "/Users/parminder/anaconda/anaconda/lib/python3.4/site-packages/pyteomics/xml.py", line 911, in __getitem__

    return self.get_by_id(elem_id)

  File "/Users/parminder/anaconda/anaconda/lib/python3.4/site-packages/pyteomics/xml.py", line 907, in get_by_id

    data = self._get_info_smart(elem, **kwargs)

  File "/Users/parminder/anaconda/anaconda/lib/python3.4/site-packages/pyteomics/mzxml.py", line 137, in _get_info_smart

    name = xml._local_name(element)

  File "/Users/parminder/anaconda/anaconda/lib/python3.4/site-packages/pyteomics/xml.py", line 51, in _local_name

    if element.tag and element.tag[0] == '{':

AttributeError: 'NoneType' object has no attribute 'tag'




I shall appreciate any help you could provide on this.

Thanks very much,
Parminder

Joshua Klein

unread,
Jan 4, 2018, 3:04:07 PM1/4/18
to pyteomics

In mzXML, there is no “id” attribute as in mzML, so instead we uses the “num” attribute. The exact meaning of this value is vendor-specific, but it should be a bytestring containing just a number. For example, Thermo-derived mzXML files (as produced by Proteowizard) will use the number part of their id string, e.g. controllerType=0 controllerNumber=1 scan=11702 -> “11702”. Unfortunately, in order to retain parity with the rest of the XML API in the library (and other badly designed parts of mzXML), MzXML.get_by_id must be called with an extra argument telling the object that you want to look the item up by the “num” attribute, not by “id”.

So you’d write reader.get_by_id(b"100", "num") to get the scan you’re looking for. The reader[key] notation does not appear to work for MzXML because it is just a wrapper around get_by_id, and doesn’t pass the “num” argument. If you wanted to look up a particular instrument configuration, you’d need to write `reader.get_by_id(“instrument-id”, “msInstrumentID”), and so on. If you call get_by_id without the second argument, it will keep looking until it finds a tag with an id attribute, which incidentally appears in the byte offset list at the end of the file, not part of the index itself and will have to be found by sequentially parsing the file instead of seeking straight there.


--

---
You received this message because you are subscribed to the Google Groups "Pyteomics" group.
To unsubscribe from this group and stop receiving emails from it, send an email to pyteomics+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Lev Levitsky

unread,
Jan 4, 2018, 3:12:45 PM1/4/18
to pyteomics, Joshua Klein
Hi everyone, thanks Parminder for you feedback and thanks Joshua for the helpful reply.

reader.get_by_id(b"100", "num") should indeed work, but do you think we should override __getitem__ on MzXML to pass "num" to get_by_id, or will it not be universal?

Best regards,
Lev
--
Lev Levitsky
Institute for Energy Problems of Chemical Physics RAS
Laboratory of Physical and Chemical Methods for Structure Analysis
Leninsky pr. 38, bld. 2 119334 Moscow Russia
tel: +7 499 1378257 fax: +7 499 1378257, +7 499 1378258

Parminder Kaur

unread,
Jan 4, 2018, 3:25:40 PM1/4/18
to pyte...@googlegroups.com, Joshua Klein
Thanks for your helpful comments, Joshua and Lev! 

This is Thermo-derived mzXML file generated using Proteowizard.

I tried reading as following, but am still getting errors:
reader = mzxml.read(sfname)

>>> scan = reader.get_by_id(b'100', "num")

Traceback (most recent call last):

  File "/Users/parminder/anaconda/anaconda/lib/python3.4/site-packages/pyteomics/xml.py", line 574, in __getitem__

    return super(ByteEncodingOrderedDict, self).__getitem__(key)

KeyError: b'100'


During handling of the above exception, another exception occurred:


Traceback (most recent call last):

  File "/Users/parminder/anaconda/anaconda/lib/python3.4/site-packages/pyteomics/xml.py", line 900, in get_by_id

    offset = index[elem_id]

  File "/Users/parminder/anaconda/anaconda/lib/python3.4/site-packages/pyteomics/xml.py", line 577, in __getitem__

    return super(ByteEncodingOrderedDict, self).__getitem__(key)

KeyError: b'100'


During handling of the above exception, another exception occurred:


Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

  File "/Users/parminder/anaconda/anaconda/lib/python3.4/site-packages/pyteomics/xml.py", line 907, in get_by_id

    data = self._get_info_smart(elem, **kwargs)

  File "/Users/parminder/anaconda/anaconda/lib/python3.4/site-packages/pyteomics/mzxml.py", line 137, in _get_info_smart

    name = xml._local_name(element)

  File "/Users/parminder/anaconda/anaconda/lib/python3.4/site-packages/pyteomics/xml.py", line 51, in _local_name

    if element.tag and element.tag[0] == '{':

AttributeError: 'NoneType' object has no attribute 'tag'



Then I tried by setting the indexing as true and get different kind of error:


reader = mzxml.read(sfname, use_index=True)

>>> scan = reader.get_by_id(b"100", "num")

Traceback (most recent call last):

  File "/Users/parminder/anaconda/anaconda/lib/python3.4/site-packages/pyteomics/xml.py", line 902, in get_by_id

    elem = self._find_by_id_no_reset(elem_id, id_key=id_key)

  File "/Users/parminder/anaconda/anaconda/lib/python3.4/site-packages/pyteomics/xml.py", line 459, in _find_by_id_no_reset

    self._source, events=('start', 'end'), remove_comments=True):

  File "src/lxml/iterparse.pxi", line 208, in lxml.etree.iterparse.__next__ (src/lxml/lxml.etree.c:146497)

  File "src/lxml/iterparse.pxi", line 193, in lxml.etree.iterparse.__next__ (src/lxml/lxml.etree.c:146195)

  File "src/lxml/iterparse.pxi", line 228, in lxml.etree.iterparse._read_more_events (src/lxml/lxml.etree.c:146834)

  File "src/lxml/parser.pxi", line 1339, in lxml.etree._FeedParser.feed (src/lxml/lxml.etree.c:113642)

  File "src/lxml/parser.pxi", line 586, in lxml.etree._ParserContext._handleParseResult (src/lxml/lxml.etree.c:104983)

  File "src/lxml/parser.pxi", line 595, in lxml.etree._ParserContext._handleParseResultDoc (src/lxml/lxml.etree.c:105102)

  File "src/lxml/parser.pxi", line 706, in lxml.etree._handleParseResult (src/lxml/lxml.etree.c:106810)

  File "src/lxml/parser.pxi", line 635, in lxml.etree._raiseParseError (src/lxml/lxml.etree.c:105664)

  File "/Users/parminder/Downloads/MM_test_data/Enbrel_Antibody/102616_E_SN_Ilker_Enbrel_Trypsin.mzXML", line 20

lxml.etree.XMLSyntaxError: Extra content at the end of the document, line 20, column 5


During handling of the above exception, another exception occurred:


Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

  File "/Users/parminder/anaconda/anaconda/lib/python3.4/site-packages/pyteomics/xml.py", line 907, in get_by_id

    data = self._get_info_smart(elem, **kwargs)

  File "/Users/parminder/anaconda/anaconda/lib/python3.4/site-packages/pyteomics/mzxml.py", line 137, in _get_info_smart

    name = xml._local_name(element)

  File "/Users/parminder/anaconda/anaconda/lib/python3.4/site-packages/pyteomics/xml.py", line 51, in _local_name

    if element.tag and element.tag[0] == '{':

AttributeError: 'NoneType' object has no attribute 'tag'



Am I missing something?

Thanks for your valuable help!


Parminder

--

---
You received this message because you are subscribed to a topic in the Google Groups "Pyteomics" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/pyteomics/MbCNisVtq4Q/unsubscribe.
To unsubscribe from this group and all its topics, send an email to pyteomics+unsubscribe@googlegroups.com.

Joshua Klein

unread,
Jan 4, 2018, 3:25:47 PM1/4/18
to Lev Levitsky, pyteomics
I very much doubt (or perhaps hope not is a better phrase here) that people are using mzXML for applications needing extensive metadata access, as this was one of the reasons mzML was invented. I think we could be forgiven for defaulting __getitem__ to pass "num", and maybe even make a wrapper around get_by_id default to "num" instead of "id" for the MzXML class.

In my use case, I've already wrapped get_by_id to always pass "num" as well. 

Joshua Klein

unread,
Jan 4, 2018, 4:11:03 PM1/4/18
to Parminder Kaur, pyteomics

Could you either share the mzXML file you’re using, or the output of the following code:

from pyteomics import mzxml

reader = mzxml.read("/Users/parminder/Downloads/MM_test_data/Enbrel_Antibody/102616_E_SN_Ilker_Enbrel_Trypsin.mzXML", use_index=1)
print(list(reader._offset_index.items())[:200])

This will display the first 200 entries in the offset index and their byte offsets.

The message about there being extra content at the end of the document makes me think that either the file is very short or the byte offsets not correctly computed.

Parminder Kaur

unread,
Jan 4, 2018, 4:17:39 PM1/4/18
to pyte...@googlegroups.com
Thanks for your superb help, Joshua!

Please find the output of your requested code below. If you still need the file, I'll be happy to share it.

[(b'1', 2083), (b'2', 12203), (b'3', 22222), (b'4', 32659), (b'5', 43593), (b'6', 53889), (b'7', 64400), (b'8', 74954), (b'9', 85548), (b'10', 95928), (b'11', 106567), (b'12', 117246), (b'13', 127737), (b'14', 138182), (b'15', 148177), (b'16', 158688), (b'17', 168193), (b'18', 179303), (b'19', 189904), (b'20', 201357), (b'21', 211735), (b'22', 222547), (b'23', 233014), (b'24', 243590), (b'25', 255125), (b'26', 266128), (b'27', 277081), (b'28', 287421), (b'29', 298250), (b'30', 308314), (b'31', 319442), (b'32', 330127), (b'33', 341686), (b'34', 351859), (b'35', 361817), (b'36', 372436), (b'37', 382926), (b'38', 393246), (b'39', 403225), (b'40', 413503), (b'41', 423884), (b'42', 435079), (b'43', 445590), (b'44', 456061), (b'45', 466916), (b'46', 477706), (b'47', 487771), (b'48', 498601), (b'49', 509049), (b'50', 519926), (b'51', 530480), (b'52', 541204), (b'53', 551332), (b'54', 561993), (b'55', 572931), (b'56', 581887), (b'57', 592269), (b'58', 603101), (b'59', 614146), (b'60', 624106), (b'61', 634639), (b'62', 644535), (b'63', 655366), (b'64', 666516), (b'65', 677089), (b'66', 687173), (b'67', 696917), (b'68', 706853), (b'69', 717315), (b'70', 727274), (b'71', 737937), (b'72', 747915), (b'73', 758341), (b'74', 768002), (b'75', 778491), (b'76', 788323), (b'77', 799212), (b'78', 809146), (b'79', 819765), (b'80', 830254), (b'81', 840617), (b'82', 850146), (b'83', 860529), (b'84', 871808), (b'85', 881850), (b'86', 892106), (b'87', 903003), (b'88', 914219), (b'89', 925303), (b'90', 935603), (b'91', 946237), (b'92', 955828), (b'93', 966658), (b'94', 976555), (b'95', 987644), (b'96', 998435), (b'97', 1008584), (b'98', 1018966), (b'99', 1029276), (b'100', 1039466), (b'101', 1049508), (b'102', 1059721), (b'103', 1069939), (b'104', 1080432), (b'105', 1091436), (b'106', 1102037), (b'107', 1112446), (b'108', 1123279), (b'109', 1134813), (b'110', 1144326), (b'111', 1154688), (b'112', 1164559), (b'113', 1174859), (b'114', 1185562), (b'115', 1195837), (b'116', 1205687), (b'117', 1215476), (b'118', 1225990), (b'119', 1236802), (b'120', 1247103), (b'121', 1256615), (b'122', 1267473), (b'123', 1278115), (b'124', 1288499), (b'125', 1299121), (b'126', 1309147), (b'127', 1319894), (b'128', 1329831), (b'129', 1340280), (b'130', 1349961), (b'131', 1360663), (b'132', 1371517), (b'133', 1381004), (b'134', 1391478), (b'135', 1402420), (b'136', 1412443), (b'137', 1423192), (b'138', 1433834), (b'139', 1443878), (b'140', 1453729), (b'141', 1464157), (b'142', 1474520), (b'143', 1484198), (b'144', 1496054), (b'145', 1505946), (b'146', 1516354), (b'147', 1527013), (b'148', 1537525), (b'149', 1548316), (b'150', 1558554), (b'151', 1568044), (b'152', 1577594), (b'153', 1588471), (b'154', 1597941), (b'155', 1609457), (b'156', 1619737), (b'157', 1629571), (b'158', 1640894), (b'159', 1651963), (b'160', 1661921), (b'161', 1672350), (b'162', 1683097), (b'163', 1693867), (b'164', 1704249), (b'165', 1714227), (b'166', 1724292), (b'167', 1734334), (b'168', 1745064), (b'169', 1755279), (b'170', 1765879), (b'171', 1776177), (b'172', 1787266), (b'173', 1797777), (b'174', 1808118), (b'175', 1818205), (b'176', 1828933), (b'177', 1839213), (b'178', 1849639), (b'179', 1859745), (b'180', 1869916), (b'181', 1879981), (b'182', 1890317), (b'183', 1900170), (b'184', 1910405), (b'185', 1921283), (b'186', 1932030), (b'187', 1942440), (b'188', 1952568), (b'189', 1963040), (b'190', 1974214), (b'191', 1984595), (b'192', 1995426), (b'193', 2005193), (b'194', 2015703), (b'195', 2026405), (b'196', 2036386), (b'197', 2046003), (b'198', 2056898), (b'199', 2067519), (b'200', 2078435)]

Joshua Klein

unread,
Jan 4, 2018, 4:34:20 PM1/4/18
to pyteomics

I could probably save you the trouble of being a proxy interpreter if you wouldn’t mind sharing the file. It looks like there are plenty of scans present, so it’s not that the parser is exhausting the file. I’d next check that the offsets are correct, starting at the first byte of a scan:


reader.reset()
reader.seek(127737)
print(reader.read(100))

Assuming that the first characters this prints are the beginning of the <scan> tag with the attribute num="13", then we’d know the offsets are at least partially right. If not, then I’d start checking the encoding of the file. We’ve had at least one case where I forgot most of the planet can’t write their name in ASCII and didn’t account for the byte order mark.

Parminder Kaur

unread,
Jan 4, 2018, 4:45:30 PM1/4/18
to pyte...@googlegroups.com
Seems like it's giving the expected results as shown below, indicating that offsets are at least partially correct. Please find the file below if that helps.​


>>> reader = mzxml.read("/Users/parminder/Downloads/MM_test_data/Enbrel_Antibody/102616_E_SN_Ilker_Enbrel_Trypsin.mzXML", use_index=1)

>>> reader.reset()

>>> reader.seek(127737)

127737

>>> print(reader.read(100))

b'<scan num="13"\n          scanType="Full"\n          centroided="1"\n          msLevel="1"\n          pe'


<div title="MDH:SSBjb3VsZCBwcm9iYWJseSBzYXZlIHlvdSB0aGUgdHJvdWJsZSBvZiBiZWluZyBhIHByb3h5IGlu dGVycHJldGVyIGlmIHlvdSB3b3VsZG4ndCBtaW5kIHNoYXJpbmcgdGhlIGZpbGUuIEl0IGxvb2tz IGxpa2UgdGhlcmUgYXJlIHBsZW50eSBvZiBzY2FucyBwcmVzZW50LCBzbyBpdCdzIG5vdCB0aGF0 IHRoZSBwYXJzZXIgaXMgZXhoYXVzdGluZyB0aGUgZmlsZS4gSSdkIG5leHQgY2hlY2sgdGhhdCB0 aGUgb2Zmc2V0cyBhcmUgY29ycmVjdCwgc3RhcnRpbmcgYXQgdGhlIGZpcnN0IGJ5dGUgb2YgYSBz Y2FuOjxkaXY+PGJyPjwvZGl2PjxkaXY+YGBgcHl0aG9uPC9kaXY+PGRpdj48YnI+PC9kaXY+PGRp dj5yZWFkZXIucmVzZXQoKTwvZGl2PjxkaXY+cmVhZGVyLnNlZWsoMTI3NzM3KTwvZGl2PjxkaXY+ cHJpbnQocmVhZGVyLnJlYWQoMTAwKSk8L2Rpdj48ZGl2PmBgYDwvZGl2PjxkaXY+QXNzdW1pbmcg dGhhdCB0aGUgZmlyc3QgY2hhcmFjdGVycyB0aGlzIHByaW50cyBhcmUgdGhlIGJlZ2lubmluZyBv ZiB0aGUgYCZsdDtzY2FuJmd0O2AgdGFnIHdpdGggdGhlIGF0dHJpYnV0ZSBgbnVtPSIxMyJgLCB0 aGVuIHdlJ2Qga25vdyB0aGUgb2Zmc2V0cyBhcmUgYXQgbGVhc3QgcGFydGlhbGx5IHJpZ2h0LiBJ ZiBub3QsIHRoZW4gSSdkIHN0YXJ0IGNoZWNraW5nIHRoZSBlbmNvZGluZyBvZiB0aGUgZmlsZS4g V2UndmUgaGFkIGF0IGxlYXN0IG9uZSBjYXNlIHdoZXJlIEkgZm9yZ290IG1vc3Qgb2YgdGhlIHBs YW5ldCBjYW4ndCB3cml0ZSB0aGVpciBuYW1lIGluIEFTQ0lJIGFuZCBkaWRuJ3QgYWNjb3VudCBm b3IgdGhlIGJ5dGUgb3JkZXIgbWFyay48L2Rpdj48ZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJh Ij48YnI+PGRpdiBjbGFzcz0iZ21haWxfcXVvdGUiPk9uIFRodSwgSmFuIDQsIDIwMTggYXQgNDox NyBQTSwgUGFybWluZGVyIEthdXIgPHNwYW4gZGlyPSJsdHIiPiZsdDs8YSBocmVmPSJtYWlsdG86 cGtoYXRyYUBnbWFpbC5jb20iIHRhcmdldD0iX2JsYW5rIj5wa2hhdHJhQGdtYWlsLmNvbTwvYT4m Z3Q7PC9zcGFuPiB3cm90ZTo8YnI+PGJsb2NrcXVvdGUgY2xhc3M9ImdtYWlsX3F1b3RlIiBzdHls ZT0ibWFyZ2luOiAwcHggMHB4IDBweCAwLjhleDsgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCByZ2Io MjA0LCAyMDQsIDIwNCk7IHBhZGRpbmctbGVmdDogMWV4OyI+PGRpdiBkaXI9Imx0ciI+CgoKCgoK CgpUaGFua3MgZm9yIHlvdXIgc3VwZXJiIGhlbHAsIEpvc2h1YSE8YnI+PGJyPlBsZWFzZSBmaW5k IHRoZSBvdXRwdXQgb2YgeW91ciByZXF1ZXN0ZWQgY29kZSBiZWxvdy4gSWYgeW91IHN0aWxsIG5l ZWQgdGhlIGZpbGUsIEknbGwgYmUgaGFwcHkgdG8gc2hhcmUgaXQuPGRpdj48YnI+PHAgY2xhc3M9 ImdtYWlsLW1fLTg4OTcyOTY2NDgzMDA2MDM5NDNtXzc3NTEwOTc3MDA4NDc2NjUyNzBnbWFpbC1w MSIgc3R5bGU9Im1hcmdpbjogMHB4OyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQtdmFyaWFudDog bm9ybWFsOyBmb250LXdlaWdodDogbm9ybWFsOyBmb250LXN0cmV0Y2g6IG5vcm1hbDsgZm9udC1z aXplOiAxMHB4OyBsaW5lLWhlaWdodDogbm9ybWFsOyBmb250LWZhbWlseTogTW9uYWNvOyI+Wyg8 YSBocmVmPSJodHRwczovL21hcHMuZ29vZ2xlLmNvbS8/cT1iJzEnLCsyMDgzKSwrKGInMicsKzEy MjAzJmFtcDtlbnRyeT1nbWFpbCZhbXA7c291cmNlPWciIHRhcmdldD0iX2JsYW5rIj5iPC9hPic8 YSBocmVmPSJodHRwczovL21hcHMuZ29vZ2xlLmNvbS8/cT1iJzEnLCsyMDgzKSwrKGInMicsKzEy MjAzJmFtcDtlbnRyeT1nbWFpbCZhbXA7c291cmNlPWciIHRhcmdldD0iX2JsYW5rIj4xPC9hPic8 YSBocmVmPSJodHRwczovL21hcHMuZ29vZ2xlLmNvbS8/cT1iJzEnLCsyMDgzKSwrKGInMicsKzEy MjAzJmFtcDtlbnRyeT1nbWFpbCZhbXA7c291cmNlPWciIHRhcmdldD0iX2JsYW5rIj4sIDIwODMp LCAoYjwvYT4nPGEgaHJlZj0iaHR0cHM6Ly9tYXBzLmdvb2dsZS5jb20vP3E9YicxJywrMjA4Myks KyhiJzInLCsxMjIwMyZhbXA7ZW50cnk9Z21haWwmYW1wO3NvdXJjZT1nIiB0YXJnZXQ9Il9ibGFu ayI+MjwvYT4nPGEgaHJlZj0iaHR0cHM6Ly9tYXBzLmdvb2dsZS5jb20vP3E9YicxJywrMjA4Myks KyhiJzInLCsxMjIwMyZhbXA7ZW50cnk9Z21haWwmYW1wO3NvdXJjZT1nIiB0YXJnZXQ9Il9ibGFu ayI+LCAxMjIwMzwvYT4pLCAoYiczJywgMjIyMjIpLCAoYic0JywgMzI2NTkpLCAoYic1JywgNDM1 OTMpLCAoYic2JywgNTM4ODkpLCAoYic3JywgNjQ0MDApLCAoYic4JywgNzQ5NTQpLCAoYic5Jywg ODU1NDgpLCAoYicxMCcsIDk1OTI4KSwgKGInMTEnLCAxMDY1NjcpLCAoYicxMicsIDExNzI0Niks IChiJzEzJywgMTI3NzM3KSwgKGInMTQnLCAxMzgxODIpLCAoYicxNScsIDE0ODE3NyksIChiJzE2 JywgMTU4Njg4KSwgKGInMTcnLCAxNjgxOTMpLCAoYicxOCcsIDE3OTMwMyksIChiJzE5JywgMTg5 OTA0KSwgKGInMjAnLCAyMDEzNTcpLCAoYicyMScsIDIxMTczNSksIChiJzIyJywgMjIyNTQ3KSwg KGInMjMnLCAyMzMwMTQpLCAoYicyNCcsIDI0MzU5MCksIChiJzI1JywgMjU1MTI1KSwgKGInMjYn LCAyNjYxMjgpLCAoYicyNycsIDI3NzA4MSksIChiJzI4JywgMjg3NDIxKSwgKGInMjknLCAyOTgy NTApLCAoYiczMCcsIDMwODMxNCksIChiJzMxJywgMzE5NDQyKSwgKGInMzInLCAzMzAxMjcpLCAo YiczMycsIDM0MTY4NiksIChiJzM0JywgMzUxODU5KSwgKGInMzUnLCAzNjE4MTcpLCAoYiczNics IDM3MjQzNiksIChiJzM3JywgMzgyOTI2KSwgKGInMzgnLCAzOTMyNDYpLCAoYiczOScsIDQwMzIy NSksIChiJzQwJywgNDEzNTAzKSwgKGInNDEnLCA0MjM4ODQpLCAoYic0MicsIDQzNTA3OSksIChi JzQzJywgNDQ1NTkwKSwgKGInNDQnLCA0NTYwNjEpLCAoYic0NScsIDQ2NjkxNiksIChiJzQ2Jywg NDc3NzA2KSwgKGInNDcnLCA0ODc3NzEpLCAoYic0OCcsIDQ5ODYwMSksIChiJzQ5JywgNTA5MDQ5 KSwgKGInNTAnLCA1MTk5MjYpLCAoYic1MScsIDUzMDQ4MCksIChiJzUyJywgNTQxMjA0KSwgKGIn NTMnLCA1NTEzMzIpLCAoYic1NCcsIDU2MTk5MyksIChiJzU1JywgNTcyOTMxKSwgKGInNTYnLCA1 ODE4ODcpLCAoYic1NycsIDU5MjI2OSksIChiJzU4JywgNjAzMTAxKSwgKGInNTknLCA2MTQxNDYp LCAoYic2MCcsIDYyNDEwNiksIChiJzYxJywgNjM0NjM5KSwgKGInNjInLCA2NDQ1MzUpLCAoYic2 MycsIDY1NTM2NiksIChiJzY0JywgNjY2NTE2KSwgKGInNjUnLCA2NzcwODkpLCAoYic2NicsIDY4 NzE3MyksIChiJzY3JywgNjk2OTE3KSwgKGInNjgnLCA3MDY4NTMpLCAoYic2OScsIDcxNzMxNSks IChiJzcwJywgNzI3Mjc0KSwgKGInNzEnLCA3Mzc5MzcpLCAoYic3MicsIDc0NzkxNSksIChiJzcz JywgNzU4MzQxKSwgKGInNzQnLCA3NjgwMDIpLCAoYic3NScsIDc3ODQ5MSksIChiJzc2JywgNzg4 MzIzKSwgKGInNzcnLCA3OTkyMTIpLCAoYic3OCcsIDgwOTE0NiksIChiJzc5JywgODE5NzY1KSwg KGInODAnLCA4MzAyNTQpLCAoYic4MScsIDg0MDYxNyksIChiJzgyJywgODUwMTQ2KSwgKGInODMn LCA4NjA1MjkpLCAoYic4NCcsIDg3MTgwOCksIChiJzg1JywgODgxODUwKSwgKGInODYnLCA4OTIx MDYpLCAoYic4NycsIDkwMzAwMyksIChiJzg4JywgOTE0MjE5KSwgKGInODknLCA5MjUzMDMpLCAo Yic5MCcsIDkzNTYwMyksIChiJzkxJywgOTQ2MjM3KSwgKGInOTInLCA5NTU4MjgpLCAoYic5Mycs IDk2NjY1OCksIChiJzk0JywgOTc2NTU1KSwgKGInOTUnLCA5ODc2NDQpLCAoYic5NicsIDk5ODQz NSksIChiJzk3JywgMTAwODU4NCksIChiJzk4JywgMTAxODk2NiksIChiJzk5JywgMTAyOTI3Niks IChiJzEwMCcsIDEwMzk0NjYpLCAoYicxMDEnLCAxMDQ5NTA4KSwgKGInMTAyJywgMTA1OTcyMSks IChiJzEwMycsIDEwNjk5MzkpLCAoYicxMDQnLCAxMDgwNDMyKSwgKGInMTA1JywgMTA5MTQzNiks IChiJzEwNicsIDExMDIwMzcpLCAoYicxMDcnLCAxMTEyNDQ2KSwgKGInMTA4JywgMTEyMzI3OSks IChiJzEwOScsIDExMzQ4MTMpLCAoYicxMTAnLCAxMTQ0MzI2KSwgKGInMTExJywgMTE1NDY4OCks IChiJzExMicsIDExNjQ1NTkpLCAoYicxMTMnLCAxMTc0ODU5KSwgKGInMTE0JywgMTE4NTU2Miks IChiJzExNScsIDExOTU4MzcpLCAoYicxMTYnLCAxMjA1Njg3KSwgKGInMTE3JywgMTIxNTQ3Niks IChiJzExOCcsIDEyMjU5OTApLCAoYicxMTknLCAxMjM2ODAyKSwgKGInMTIwJywgMTI0NzEwMyks IChiJzEyMScsIDEyNTY2MTUpLCAoYicxMjInLCAxMjY3NDczKSwgKGInMTIzJywgMTI3ODExNSks IChiJzEyNCcsIDEyODg0OTkpLCAoYicxMjUnLCAxMjk5MTIxKSwgKGInMTI2JywgMTMwOTE0Nyks IChiJzEyNycsIDEzMTk4OTQpLCAoYicxMjgnLCAxMzI5ODMxKSwgKGInMTI5JywgMTM0MDI4MCks IChiJzEzMCcsIDEzNDk5NjEpLCAoYicxMzEnLCAxMzYwNjYzKSwgKGInMTMyJywgMTM3MTUxNyks IChiJzEzMycsIDEzODEwMDQpLCAoYicxMzQnLCAxMzkxNDc4KSwgKGInMTM1JywgMTQwMjQyMCks IChiJzEzNicsIDE0MTI0NDMpLCAoYicxMzcnLCAxNDIzMTkyKSwgKGInMTM4JywgMTQzMzgzNCks IChiJzEzOScsIDE0NDM4NzgpLCAoYicxNDAnLCAxNDUzNzI5KSwgKGInMTQxJywgMTQ2NDE1Nyks IChiJzE0MicsIDE0NzQ1MjApLCAoYicxNDMnLCAxNDg0MTk4KSwgKGInMTQ0JywgMTQ5NjA1NCks IChiJzE0NScsIDE1MDU5NDYpLCAoYicxNDYnLCAxNTE2MzU0KSwgKGInMTQ3JywgMTUyNzAxMyks IChiJzE0OCcsIDE1Mzc1MjUpLCAoYicxNDknLCAxNTQ4MzE2KSwgKGInMTUwJywgMTU1ODU1NCks IChiJzE1MScsIDE1NjgwNDQpLCAoYicxNTInLCAxNTc3NTk0KSwgKGInMTUzJywgMTU4ODQ3MSks IChiJzE1NCcsIDE1OTc5NDEpLCAoYicxNTUnLCAxNjA5NDU3KSwgKGInMTU2JywgMTYxOTczNyks IChiJzE1NycsIDE2Mjk1NzEpLCAoYicxNTgnLCAxNjQwODk0KSwgKGInMTU5JywgMTY1MTk2Myks IChiJzE2MCcsIDE2NjE5MjEpLCAoYicxNjEnLCAxNjcyMzUwKSwgKGInMTYyJywgMTY4MzA5Nyks IChiJzE2MycsIDE2OTM4NjcpLCAoYicxNjQnLCAxNzA0MjQ5KSwgKGInMTY1JywgMTcxNDIyNyks IChiJzE2NicsIDE3MjQyOTIpLCAoYicxNjcnLCAxNzM0MzM0KSwgKGInMTY4JywgMTc0NTA2NCks IChiJzE2OScsIDE3NTUyNzkpLCAoYicxNzAnLCAxNzY1ODc5KSwgKGInMTcxJywgMTc3NjE3Nyks IChiJzE3MicsIDE3ODcyNjYpLCAoYicxNzMnLCAxNzk3Nzc3KSwgKGInMTc0JywgMTgwODExOCks IChiJzE3NScsIDE4MTgyMDUpLCAoYicxNzYnLCAxODI4OTMzKSwgKGInMTc3JywgMTgzOTIxMyks IChiJzE3OCcsIDE4NDk2MzkpLCAoYicxNzknLCAxODU5NzQ1KSwgKGInMTgwJywgMTg2OTkxNiks IChiJzE4MScsIDE4Nzk5ODEpLCAoYicxODInLCAxODkwMzE3KSwgKGInMTgzJywgMTkwMDE3MCks IChiJzE4NCcsIDE5MTA0MDUpLCAoYicxODUnLCAxOTIxMjgzKSwgKGInMTg2JywgMTkzMjAzMCks IChiJzE4NycsIDE5NDI0NDApLCAoYicxODgnLCAxOTUyNTY4KSwgKGInMTg5JywgMTk2MzA0MCks IChiJzE5MCcsIDE5NzQyMTQpLCAoYicxOTEnLCAxOTg0NTk1KSwgKGInMTkyJywgMTk5NTQyNiks IChiJzE5MycsIDIwMDUxOTMpLCAoYicxOTQnLCAyMDE1NzAzKSwgKGInMTk1JywgMjAyNjQwNSks IChiJzE5NicsIDIwMzYzODYpLCAoYicxOTcnLCAyMDQ2MDAzKSwgKGInMTk4JywgMjA1Njg5OCks IChiJzE5OScsIDIwNjc1MTkpLCAoYicyMDAnLCAyMDc4NDM1KV08L3A+PC9kaXY+PC9kaXY+PGRp diBjbGFzcz0iZ21haWwtbV8tODg5NzI5NjY0ODMwMDYwMzk0M0hPRW5aYiI+PGRpdiBjbGFzcz0i Z21haWwtbV8tODg5NzI5NjY0ODMwMDYwMzk0M2g1Ij48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+ PGJyPjxkaXYgY2xhc3M9ImdtYWlsX3F1b3RlIj5PbiBUaHUsIEphbiA0LCAyMDE4IGF0IDM6MTAg UE0sIEpvc2h1YSBLbGVpbiA8c3BhbiBkaXI9Imx0ciI+Jmx0OzxhIGhyZWY9Im1haWx0bzptb2Jp dXNrbGVpbkBnbWFpbC5jb20iIHRhcmdldD0iX2JsYW5rIj5tb2JpdXNrbGVpbkBnbWFpbC5jb208 L2E+Jmd0Ozwvc3Bhbj4gd3JvdGU6PGJyPjxibG9ja3F1b3RlIGNsYXNzPSJnbWFpbF9xdW90ZSIg c3R5bGU9Im1hcmdpbjogMHB4IDBweCAwcHggMC44ZXg7IGJvcmRlci1sZWZ0OiAxcHggc29saWQg cmdiKDIwNCwgMjA0LCAyMDQpOyBwYWRkaW5nLWxlZnQ6IDFleDsiPjxkaXYgZGlyPSJsdHIiPjxk aXYgY2xhc3M9ImdtYWlsLW1fLTg4OTcyOTY2NDgzMDA2MDM5NDNtXzc3NTEwOTc3MDA4NDc2NjUy NzBtXzIyNzQ0NDY3MzA4NjMyNjQ2NzltYXJrZG93bi1oZXJlLXdyYXBwZXIiPjxwIHN0eWxlPSJt YXJnaW46IDBweCAwcHggMS4yZW07Ij5Db3VsZCB5b3UgZWl0aGVyIHNoYXJlIHRoZSBtelhNTCBm aWxlIHlvdeKAmXJlIHVzaW5nLCBvciB0aGUgb3V0cHV0IG9mIHRoZSBmb2xsb3dpbmcgY29kZTo8 L3A+CjxwcmUgc3R5bGU9ImZvbnQtZmFtaWx5OiBDb25zb2xhcywgSW5jb25zb2xhdGEsIENvdXJp ZXIsIG1vbm9zcGFjZTsgZm9udC1zaXplOiAxZW07IGxpbmUtaGVpZ2h0OiAxLjJlbTsgbWFyZ2lu OiAxLjJlbSAwcHg7Ij48Y29kZSBjbGFzcz0iZ21haWwtbV8tODg5NzI5NjY0ODMwMDYwMzk0M21f Nzc1MTA5NzcwMDg0NzY2NTI3MG1fMjI3NDQ0NjczMDg2MzI2NDY3OWhsanMgZ21haWwtbV8tODg5 NzI5NjY0ODMwMDYwMzk0M21fNzc1MTA5NzcwMDg0NzY2NTI3MG1fMjI3NDQ0NjczMDg2MzI2NDY3 OWxhbmd1YWdlLXB5dGhvbiIgc3R5bGU9ImZvbnQtc2l6ZTogMC44NWVtOyBmb250LWZhbWlseTog Q29uc29sYXMsIEluY29uc29sYXRhLCBDb3VyaWVyLCBtb25vc3BhY2U7IG1hcmdpbjogMHB4IDAu MTVlbTsgd2hpdGUtc3BhY2U6IHByZS13cmFwOyBvdmVyZmxvdzogYXV0bzsgYm9yZGVyLXJhZGl1 czogM3B4OyBib3JkZXI6IDFweCBzb2xpZCByZ2IoMjA0LCAyMDQsIDIwNCk7IGJhY2tncm91bmQ6 IHJnYigyNDEsIDIzOSwgMjM4KTsgY29sb3I6IHJnYigxMDQsIDk3LCA5NCk7IHBhZGRpbmc6IDAu NWVtOyBkaXNwbGF5OiBibG9jazsiPjxzcGFuIGNsYXNzPSJnbWFpbC1tXy04ODk3Mjk2NjQ4MzAw NjAzOTQzbV83NzUxMDk3NzAwODQ3NjY1MjcwbV8yMjc0NDQ2NzMwODYzMjY0Njc5aGxqcy1rZXl3 b3JkIiBzdHlsZT0iY29sb3I6IHJnYigxMDIsIDEwMiwgMjM0KTsiPmZyb208L3NwYW4+IHB5dGVv bWljcyA8c3BhbiBjbGFzcz0iZ21haWwtbV8tODg5NzI5NjY0ODMwMDYwMzk0M21fNzc1MTA5Nzcw MDg0NzY2NTI3MG1fMjI3NDQ0NjczMDg2MzI2NDY3OWhsanMta2V5d29yZCIgc3R5bGU9ImNvbG9y OiByZ2IoMTAyLCAxMDIsIDIzNCk7Ij5pbXBvcnQ8L3NwYW4+IG16eG1sCgpyZWFkZXIgPSBtenht bC5yZWFkKDxzcGFuIGNsYXNzPSJnbWFpbC1tXy04ODk3Mjk2NjQ4MzAwNjAzOTQzbV83NzUxMDk3 NzAwODQ3NjY1MjcwbV8yMjc0NDQ2NzMwODYzMjY0Njc5aGxqcy1zdHJpbmciIHN0eWxlPSJjb2xv cjogcmdiKDkwLCAxODMsIDU2KTsiPiIvVXNlcnMvcGFybWluZGVyL0Q8d2JyPm93bmxvYWRzL01N X3Rlc3RfZGF0YS9FbmJyZWxfQTx3YnI+bnRpYm9keS8xMDI2MTZfRV9TTl9JbGtlcl9FbmJyPHdi cj5lbF9Ucnlwc2luLm16WE1MIjwvc3Bhbj4sIHVzZV9pbmRleD08c3BhbiBjbGFzcz0iZ21haWwt bV8tODg5NzI5NjY0ODMwMDYwMzk0M21fNzc1MTA5NzcwMDg0NzY2NTI3MG1fMjI3NDQ0NjczMDg2 MzI2NDY3OWhsanMtbnVtYmVyIiBzdHlsZT0iY29sb3I6IHJnYigyMjMsIDgzLCAzMik7Ij4xPC9z cGFuPikKcHJpbnQobGlzdChyZWFkZXIuX29mZnNldF9pbmRlPHdicj54Lml0ZW1zKCkpWzo8c3Bh biBjbGFzcz0iZ21haWwtbV8tODg5NzI5NjY0ODMwMDYwMzk0M21fNzc1MTA5NzcwMDg0NzY2NTI3 MG1fMjI3NDQ0NjczMDg2MzI2NDY3OWhsanMtbnVtYmVyIiBzdHlsZT0iY29sb3I6IHJnYigyMjMs IDgzLCAzMik7Ij4yMDA8L3NwYW4+XSkKPC9jb2RlPjwvcHJlPgo8cCBzdHlsZT0ibWFyZ2luOiAw cHggMHB4IDEuMmVtOyI+VGhpcyB3aWxsIGRpc3BsYXkgdGhlIGZpcnN0IDIwMCBlbnRyaWVzIGlu IHRoZSBvZmZzZXQgaW5kZXggYW5kIHRoZWlyIGJ5dGUgb2Zmc2V0cy48L3A+CjxwIHN0eWxlPSJt YXJnaW46IDBweCAwcHggMS4yZW07Ij5UaGUgbWVzc2FnZSBhYm91dCB0aGVyZSBiZWluZyBleHRy YSBjb250ZW50IGF0IHRoZSBlbmQgb2YgdGhlIGRvY3VtZW50IG1ha2VzIG1lIHRoaW5rIHRoYXQg ZWl0aGVyIHRoZSBmaWxlIGlzIHZlcnkgc2hvcnQgb3IgdGhlIGJ5dGUgb2Zmc2V0cyBub3QgY29y cmVjdGx5IGNvbXB1dGVkLiA8L3A+CjxkaXYgdGl0bGU9Ik1ESDpRMjkxYkdRZ2VXOTFJR1ZwZEdo bGNpQnphR0Z5WlNCMGFHVWdiWHBZVFV3Z1ptbHNaU0I1YjNVbmNtVWdkWE5wYm1jc0lHOXlJSFJv ClpTQnZkWFJ3ZFhRZ2IyWWdkR2hsSUdadmJHeHZkMmx1WnlCamIyUmxPanhrYVhZK1BHSnlQand2 WkdsMlBqeGthWFkrWUdCZ2NIbDAKYUc5dVBDOWthWFkrUEdScGRqNW1jbTl0SUhCNWRHVnZiV2xq Y3lCcGJYQnZjblFnYlhwNGJXdzhMMlJwZGo0OFpHbDJQanhpY2o0OApMMlJwZGo0OFpHbDJQbkps WVdSbGNpQTlJRzE2ZUcxc0xuSmxZV1FvSWk5VmMyVnljeTl3WVhKdGFXNWtaWEl2Ukc5M2JteHZZ V1J6CkwwMU5YM1JsYzNSZlpHRjBZUzlGYm1KeVpXeGZRVzUwYVdKdlpIa3ZNVEF5TmpFMlgwVmZV MDVmU1d4clpYSmZSVzVpY21Wc1gxUnkKZVhCemFXNHViWHBZVFV3aUxDQjFjMlZmYVc1a1pYZzlN U2s4TDJScGRqNDhaR2wyUG5CeWFXNTBLR3hwYzNRb2NtVmhaR1Z5TGw5dgpabVp6WlhSZmFXNWta WGd1YVhSbGJYTW9LU2xiT2pJd01GMHBQQzlrYVhZK1BHUnBkajVnWUdBOEwyUnBkajQ4WkdsMlBq eGljajQ4CkwyUnBkajQ4WkdsMlBsUm9hWE1nZDJsc2JDQmthWE53YkdGNUlIUm9aU0JtYVhKemRD QXlNREFnWlc1MGNtbGxjeUJwYmlCMGFHVWcKYjJabWMyVjBJR2x1WkdWNElHRnVaQ0IwYUdWcGNp QmllWFJsSUc5bVpuTmxkSE11UEM5a2FYWStQR1JwZGo0OFluSStQQzlrYVhZKwpQR1JwZGo1VWFH VWdiV1Z6YzJGblpTQmhZbTkxZENCMGFHVnlaU0JpWldsdVp5QmxlSFJ5WVNCamIyNTBaVzUwSUdG MElIUm9aU0JsCmJtUWdiMllnZEdobElHUnZZM1Z0Wlc1MElHMWhhMlZ6SUcxbElIUm9hVzVySUhS b1lYUWdaV2wwYUdWeUlIUm9aU0JtYVd4bElHbHoKSUhabGNua2djMmh2Y25RZ2IzSWdkR2hsSUdK NWRHVWdiMlptYzJWMGN5QnViM1FnWTI5eWNtVmpkR3g1SUdOdmJYQjFkR1ZrTGladQpZbk53T3p3 dlpHbDJQanhrYVhZK1BHSnlQand2WkdsMlBnPT0iIHN0eWxlPSJoZWlnaHQ6IDBweDsgd2lkdGg6 IDBweDsgbWF4LWhlaWdodDogMHB4OyBtYXgtd2lkdGg6IDBweDsgb3ZlcmZsb3c6IGhpZGRlbjsg Zm9udC1zaXplOiAwZW07IHBhZGRpbmc6IDBweDsgbWFyZ2luOiAwcHg7Ij7igIs8L2Rpdj48L2Rp dj48L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbC1tXy04ODk3Mjk2NjQ4MzAwNjAzOTQzbV83NzUxMDk3 NzAwODQ3NjY1MjcwSE9FblpiIj48ZGl2IGNsYXNzPSJnbWFpbC1tXy04ODk3Mjk2NjQ4MzAwNjAz OTQzbV83NzUxMDk3NzAwODQ3NjY1MjcwaDUiPjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIj48YnI+ PGRpdiBjbGFzcz0iZ21haWxfcXVvdGUiPk9uIFRodSwgSmFuIDQsIDIwMTggYXQgMzoyNSBQTSwg UGFybWluZGVyIEthdXIgPHNwYW4gZGlyPSJsdHIiPiZsdDs8YSBocmVmPSJtYWlsdG86cGtoYXRy YUBnbWFpbC5jb20iIHRhcmdldD0iX2JsYW5rIj5wa2hhdHJhQGdtYWlsLmNvbTwvYT4mZ3Q7PC9z cGFuPiB3cm90ZTo8YnI+PGJsb2NrcXVvdGUgY2xhc3M9ImdtYWlsX3F1b3RlIiBzdHlsZT0ibWFy Z2luOiAwcHggMHB4IDBweCAwLjhleDsgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCByZ2IoMjA0LCAy MDQsIDIwNCk7IHBhZGRpbmctbGVmdDogMWV4OyI+PGRpdiBkaXI9Imx0ciI+VGhhbmtzIGZvciB5 b3VyIGhlbHBmdWwgY29tbWVudHMsIEpvc2h1YSBhbmQgTGV2ISZuYnNwOzxkaXY+PGJyPjwvZGl2 PjxkaXY+VGhpcyBpcyBUaGVybW8tZGVyaXZlZCBtelhNTCBmaWxlIGdlbmVyYXRlZCB1c2luZyBQ cm90ZW93aXphcmQuPC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5JIHRyaWVkIHJlYWRpbmcgYXMg Zm9sbG93aW5nLCBidXQgYW0gc3RpbGwgZ2V0dGluZyBlcnJvcnM6PC9kaXY+PGRpdj48c3BhbiBz dHlsZT0iZm9udC1mYW1pbHk6IE1vbmFjbzsgZm9udC1zaXplOiAxMHB4OyI+cmVhZGVyID0gbXp4 bWwucmVhZChzZm5hbWUpPC9zcGFuPjxicj48L2Rpdj48ZGl2Pgo8cCBjbGFzcz0iZ21haWwtbV8t ODg5NzI5NjY0ODMwMDYwMzk0M21fNzc1MTA5NzcwMDg0NzY2NTI3MG1fMjI3NDQ0NjczMDg2MzI2 NDY3OW1fLTE2NDkzNjQ5MjQzOTA2OTI2NDZnbWFpbC1wMSIgc3R5bGU9Im1hcmdpbjogMHB4OyBm b250LXN0eWxlOiBub3JtYWw7IGZvbnQtdmFyaWFudDogbm9ybWFsOyBmb250LXdlaWdodDogbm9y bWFsOyBmb250LXN0cmV0Y2g6IG5vcm1hbDsgZm9udC1zaXplOiAxMHB4OyBsaW5lLWhlaWdodDog bm9ybWFsOyBmb250LWZhbWlseTogTW9uYWNvOyI+Jmd0OyZndDsmZ3Q7IHNjYW4gPSByZWFkZXIu Z2V0X2J5X2lkKGInMTAwJywgIm51bSIpPC9wPjxzcGFuPgo8cCBjbGFzcz0iZ21haWwtbV8tODg5 NzI5NjY0ODMwMDYwMzk0M21fNzc1MTA5NzcwMDg0NzY2NTI3MG1fMjI3NDQ0NjczMDg2MzI2NDY3 OW1fLTE2NDkzNjQ5MjQzOTA2OTI2NDZnbWFpbC1wMSIgc3R5bGU9Im1hcmdpbjogMHB4OyBmb250 LXN0eWxlOiBub3JtYWw7IGZvbnQtdmFyaWFudDogbm9ybWFsOyBmb250LXdlaWdodDogbm9ybWFs OyBmb250LXN0cmV0Y2g6IG5vcm1hbDsgZm9udC1zaXplOiAxMHB4OyBsaW5lLWhlaWdodDogbm9y bWFsOyBmb250LWZhbWlseTogTW9uYWNvOyI+VHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxh c3QpOjwvcD4KPHAgY2xhc3M9ImdtYWlsLW1fLTg4OTcyOTY2NDgzMDA2MDM5NDNtXzc3NTEwOTc3 MDA4NDc2NjUyNzBtXzIyNzQ0NDY3MzA4NjMyNjQ2NzltXy0xNjQ5MzY0OTI0MzkwNjkyNjQ2Z21h aWwtcDEiIHN0eWxlPSJtYXJnaW46IDBweDsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXZhcmlh bnQ6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgZm9udC1zdHJldGNoOiBub3JtYWw7IGZv bnQtc2l6ZTogMTBweDsgbGluZS1oZWlnaHQ6IG5vcm1hbDsgZm9udC1mYW1pbHk6IE1vbmFjbzsi PjxzcGFuIGNsYXNzPSJnbWFpbC1tXy04ODk3Mjk2NjQ4MzAwNjAzOTQzbV83NzUxMDk3NzAwODQ3 NjY1MjcwbV8yMjc0NDQ2NzMwODYzMjY0Njc5bV8tMTY0OTM2NDkyNDM5MDY5MjY0NmdtYWlsLUFw cGxlLWNvbnZlcnRlZC1zcGFjZSI+Jm5ic3A7IDwvc3Bhbj5GaWxlICIvVXNlcnMvcGFybWluZGVy L2FuYWNvbmRhL2FuYTx3YnI+Y29uZGEvbGliL3B5dGhvbjMuNC9zaXRlLXBhY2thPHdicj5nZXMv cHl0ZW9taWNzL3htbC5weSIsIGxpbmUgNTc0LCBpbiBfX2dldGl0ZW1fXzwvcD4KPHAgY2xhc3M9 ImdtYWlsLW1fLTg4OTcyOTY2NDgzMDA2MDM5NDNtXzc3NTEwOTc3MDA4NDc2NjUyNzBtXzIyNzQ0 NDY3MzA4NjMyNjQ2NzltXy0xNjQ5MzY0OTI0MzkwNjkyNjQ2Z21haWwtcDEiIHN0eWxlPSJtYXJn aW46IDBweDsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXZhcmlhbnQ6IG5vcm1hbDsgZm9udC13 ZWlnaHQ6IG5vcm1hbDsgZm9udC1zdHJldGNoOiBub3JtYWw7IGZvbnQtc2l6ZTogMTBweDsgbGlu ZS1oZWlnaHQ6IG5vcm1hbDsgZm9udC1mYW1pbHk6IE1vbmFjbzsiPjxzcGFuIGNsYXNzPSJnbWFp bC1tXy04ODk3Mjk2NjQ4MzAwNjAzOTQzbV83NzUxMDk3NzAwODQ3NjY1MjcwbV8yMjc0NDQ2NzMw ODYzMjY0Njc5bV8tMTY0OTM2NDkyNDM5MDY5MjY0NmdtYWlsLUFwcGxlLWNvbnZlcnRlZC1zcGFj ZSI+Jm5ic3A7ICZuYnNwOyA8L3NwYW4+cmV0dXJuIHN1cGVyKEJ5dGVFbmNvZGluZ09yZGVyZWRE aWN0LCBzZWxmKS5fX2dldGl0ZW1fXyhrZXkpPC9wPgo8L3NwYW4+PHAgY2xhc3M9ImdtYWlsLW1f LTg4OTcyOTY2NDgzMDA2MDM5NDNtXzc3NTEwOTc3MDA4NDc2NjUyNzBtXzIyNzQ0NDY3MzA4NjMy NjQ2NzltXy0xNjQ5MzY0OTI0MzkwNjkyNjQ2Z21haWwtcDEiIHN0eWxlPSJtYXJnaW46IDBweDsg Zm9udC1zdHlsZTogbm9ybWFsOyBmb250LXZhcmlhbnQ6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5v cm1hbDsgZm9udC1zdHJldGNoOiBub3JtYWw7IGZvbnQtc2l6ZTogMTBweDsgbGluZS1oZWlnaHQ6 IG5vcm1hbDsgZm9udC1mYW1pbHk6IE1vbmFjbzsiPktleUVycm9yOiBiJzEwMCc8L3A+PHNwYW4+ CjxwIGNsYXNzPSJnbWFpbC1tXy04ODk3Mjk2NjQ4MzAwNjAzOTQzbV83NzUxMDk3NzAwODQ3NjY1 MjcwbV8yMjc0NDQ2NzMwODYzMjY0Njc5bV8tMTY0OTM2NDkyNDM5MDY5MjY0NmdtYWlsLXAyIiBz dHlsZT0ibWFyZ2luOiAwcHg7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50OiBub3Jt YWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGZvbnQtc3RyZXRjaDogbm9ybWFsOyBmb250LXNpemU6 IDEwcHg7IGxpbmUtaGVpZ2h0OiBub3JtYWw7IGZvbnQtZmFtaWx5OiBNb25hY287IG1pbi1oZWln aHQ6IDE0cHg7Ij48YnI+PC9wPgo8cCBjbGFzcz0iZ21haWwtbV8tODg5NzI5NjY0ODMwMDYwMzk0 M21fNzc1MTA5NzcwMDg0NzY2NTI3MG1fMjI3NDQ0NjczMDg2MzI2NDY3OW1fLTE2NDkzNjQ5MjQz OTA2OTI2NDZnbWFpbC1wMSIgc3R5bGU9Im1hcmdpbjogMHB4OyBmb250LXN0eWxlOiBub3JtYWw7 IGZvbnQtdmFyaWFudDogbm9ybWFsOyBmb250LXdlaWdodDogbm9ybWFsOyBmb250LXN0cmV0Y2g6 IG5vcm1hbDsgZm9udC1zaXplOiAxMHB4OyBsaW5lLWhlaWdodDogbm9ybWFsOyBmb250LWZhbWls eTogTW9uYWNvOyI+RHVyaW5nIGhhbmRsaW5nIG9mIHRoZSBhYm92ZSBleGNlcHRpb24sIGFub3Ro ZXIgZXhjZXB0aW9uIG9jY3VycmVkOjwvcD4KPHAgY2xhc3M9ImdtYWlsLW1fLTg4OTcyOTY2NDgz MDA2MDM5NDNtXzc3NTEwOTc3MDA4NDc2NjUyNzBtXzIyNzQ0NDY3MzA4NjMyNjQ2NzltXy0xNjQ5 MzY0OTI0MzkwNjkyNjQ2Z21haWwtcDIiIHN0eWxlPSJtYXJnaW46IDBweDsgZm9udC1zdHlsZTog bm9ybWFsOyBmb250LXZhcmlhbnQ6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgZm9udC1z dHJldGNoOiBub3JtYWw7IGZvbnQtc2l6ZTogMTBweDsgbGluZS1oZWlnaHQ6IG5vcm1hbDsgZm9u dC1mYW1pbHk6IE1vbmFjbzsgbWluLWhlaWdodDogMTRweDsiPjxicj48L3A+CjxwIGNsYXNzPSJn bWFpbC1tXy04ODk3Mjk2NjQ4MzAwNjAzOTQzbV83NzUxMDk3NzAwODQ3NjY1MjcwbV8yMjc0NDQ2 NzMwODYzMjY0Njc5bV8tMTY0OTM2NDkyNDM5MDY5MjY0NmdtYWlsLXAxIiBzdHlsZT0ibWFyZ2lu OiAwcHg7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50OiBub3JtYWw7IGZvbnQtd2Vp Z2h0OiBub3JtYWw7IGZvbnQtc3RyZXRjaDogbm9ybWFsOyBmb250LXNpemU6IDEwcHg7IGxpbmUt aGVpZ2h0OiBub3JtYWw7IGZvbnQtZmFtaWx5OiBNb25hY287Ij5UcmFjZWJhY2sgKG1vc3QgcmVj ZW50IGNhbGwgbGFzdCk6PC9wPgo8cCBjbGFzcz0iZ21haWwtbV8tODg5NzI5NjY0ODMwMDYwMzk0 M21fNzc1MTA5NzcwMDg0NzY2NTI3MG1fMjI3NDQ0NjczMDg2MzI2NDY3OW1fLTE2NDkzNjQ5MjQz OTA2OTI2NDZnbWFpbC1wMSIgc3R5bGU9Im1hcmdpbjogMHB4OyBmb250LXN0eWxlOiBub3JtYWw7 IGZvbnQtdmFyaWFudDogbm9ybWFsOyBmb250LXdlaWdodDogbm9ybWFsOyBmb250LXN0cmV0Y2g6 IG5vcm1hbDsgZm9udC1zaXplOiAxMHB4OyBsaW5lLWhlaWdodDogbm9ybWFsOyBmb250LWZhbWls eTogTW9uYWNvOyI+PHNwYW4gY2xhc3M9ImdtYWlsLW1fLTg4OTcyOTY2NDgzMDA2MDM5NDNtXzc3 NTEwOTc3MDA4NDc2NjUyNzBtXzIyNzQ0NDY3MzA4NjMyNjQ2NzltXy0xNjQ5MzY0OTI0MzkwNjky NjQ2Z21haWwtQXBwbGUtY29udmVydGVkLXNwYWNlIj4mbmJzcDsgPC9zcGFuPkZpbGUgIi9Vc2Vy cy9wYXJtaW5kZXIvYW5hY29uZGEvYW5hPHdicj5jb25kYS9saWIvcHl0aG9uMy40L3NpdGUtcGFj a2E8d2JyPmdlcy9weXRlb21pY3MveG1sLnB5IiwgbGluZSA5MDAsIGluIGdldF9ieV9pZDwvcD4K PHAgY2xhc3M9ImdtYWlsLW1fLTg4OTcyOTY2NDgzMDA2MDM5NDNtXzc3NTEwOTc3MDA4NDc2NjUy NzBtXzIyNzQ0NDY3MzA4NjMyNjQ2NzltXy0xNjQ5MzY0OTI0MzkwNjkyNjQ2Z21haWwtcDEiIHN0 eWxlPSJtYXJnaW46IDBweDsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXZhcmlhbnQ6IG5vcm1h bDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgZm9udC1zdHJldGNoOiBub3JtYWw7IGZvbnQtc2l6ZTog MTBweDsgbGluZS1oZWlnaHQ6IG5vcm1hbDsgZm9udC1mYW1pbHk6IE1vbmFjbzsiPjxzcGFuIGNs YXNzPSJnbWFpbC1tXy04ODk3Mjk2NjQ4MzAwNjAzOTQzbV83NzUxMDk3NzAwODQ3NjY1MjcwbV8y Mjc0NDQ2NzMwODYzMjY0Njc5bV8tMTY0OTM2NDkyNDM5MDY5MjY0NmdtYWlsLUFwcGxlLWNvbnZl cnRlZC1zcGFjZSI+Jm5ic3A7ICZuYnNwOyA8L3NwYW4+b2Zmc2V0ID0gaW5kZXhbZWxlbV9pZF08 L3A+CjxwIGNsYXNzPSJnbWFpbC1tXy04ODk3Mjk2NjQ4MzAwNjAzOTQzbV83NzUxMDk3NzAwODQ3 NjY1MjcwbV8yMjc0NDQ2NzMwODYzMjY0Njc5bV8tMTY0OTM2NDkyNDM5MDY5MjY0NmdtYWlsLXAx IiBzdHlsZT0ibWFyZ2luOiAwcHg7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50OiBu b3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGZvbnQtc3RyZXRjaDogbm9ybWFsOyBmb250LXNp emU6IDEwcHg7IGxpbmUtaGVpZ2h0OiBub3JtYWw7IGZvbnQtZmFtaWx5OiBNb25hY287Ij48c3Bh biBjbGFzcz0iZ21haWwtbV8tODg5NzI5NjY0ODMwMDYwMzk0M21fNzc1MTA5NzcwMDg0NzY2NTI3 MG1fMjI3NDQ0NjczMDg2MzI2NDY3OW1fLTE2NDkzNjQ5MjQzOTA2OTI2NDZnbWFpbC1BcHBsZS1j b252ZXJ0ZWQtc3BhY2UiPiZuYnNwOyA8L3NwYW4+RmlsZSAiL1VzZXJzL3Bhcm1pbmRlci9hbmFj b25kYS9hbmE8d2JyPmNvbmRhL2xpYi9weXRob24zLjQvc2l0ZS1wYWNrYTx3YnI+Z2VzL3B5dGVv bWljcy94bWwucHkiLCBsaW5lIDU3NywgaW4gX19nZXRpdGVtX188L3A+CjxwIGNsYXNzPSJnbWFp bC1tXy04ODk3Mjk2NjQ4MzAwNjAzOTQzbV83NzUxMDk3NzAwODQ3NjY1MjcwbV8yMjc0NDQ2NzMw ODYzMjY0Njc5bV8tMTY0OTM2NDkyNDM5MDY5MjY0NmdtYWlsLXAxIiBzdHlsZT0ibWFyZ2luOiAw cHg7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50OiBub3JtYWw7IGZvbnQtd2VpZ2h0 OiBub3JtYWw7IGZvbnQtc3RyZXRjaDogbm9ybWFsOyBmb250LXNpemU6IDEwcHg7IGxpbmUtaGVp Z2h0OiBub3JtYWw7IGZvbnQtZmFtaWx5OiBNb25hY287Ij48c3BhbiBjbGFzcz0iZ21haWwtbV8t ODg5NzI5NjY0ODMwMDYwMzk0M21fNzc1MTA5NzcwMDg0NzY2NTI3MG1fMjI3NDQ0NjczMDg2MzI2 NDY3OW1fLTE2NDkzNjQ5MjQzOTA2OTI2NDZnbWFpbC1BcHBsZS1jb252ZXJ0ZWQtc3BhY2UiPiZu YnNwOyAmbmJzcDsgPC9zcGFuPnJldHVybiBzdXBlcihCeXRlRW5jb2RpbmdPcmRlcmVkRGljdCwg c2VsZikuX19nZXRpdGVtX18oa2V5KTwvcD4KPC9zcGFuPjxwIGNsYXNzPSJnbWFpbC1tXy04ODk3 Mjk2NjQ4MzAwNjAzOTQzbV83NzUxMDk3NzAwODQ3NjY1MjcwbV8yMjc0NDQ2NzMwODYzMjY0Njc5 bV8tMTY0OTM2NDkyNDM5MDY5MjY0NmdtYWlsLXAxIiBzdHlsZT0ibWFyZ2luOiAwcHg7IGZvbnQt c3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50OiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7 IGZvbnQtc3RyZXRjaDogbm9ybWFsOyBmb250LXNpemU6IDEwcHg7IGxpbmUtaGVpZ2h0OiBub3Jt YWw7IGZvbnQtZmFtaWx5OiBNb25hY287Ij5LZXlFcnJvcjogYicxMDAnPC9wPjxzcGFuPgo8cCBj bGFzcz0iZ21haWwtbV8tODg5NzI5NjY0ODMwMDYwMzk0M21fNzc1MTA5NzcwMDg0NzY2NTI3MG1f MjI3NDQ0NjczMDg2MzI2NDY3OW1fLTE2NDkzNjQ5MjQzOTA2OTI2NDZnbWFpbC1wMiIgc3R5bGU9 Im1hcmdpbjogMHB4OyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQtdmFyaWFudDogbm9ybWFsOyBm b250LXdlaWdodDogbm9ybWFsOyBmb250LXN0cmV0Y2g6IG5vcm1hbDsgZm9udC1zaXplOiAxMHB4 OyBsaW5lLWhlaWdodDogbm9ybWFsOyBmb250LWZhbWlseTogTW9uYWNvOyBtaW4taGVpZ2h0OiAx NHB4OyI+PGJyPjwvcD4KPHAgY2xhc3M9ImdtYWlsLW1fLTg4OTcyOTY2NDgzMDA2MDM5NDNtXzc3 NTEwOTc3MDA4NDc2NjUyNzBtXzIyNzQ0NDY3MzA4NjMyNjQ2NzltXy0xNjQ5MzY0OTI0MzkwNjky NjQ2Z21haWwtcDEiIHN0eWxlPSJtYXJnaW46IDBweDsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250 LXZhcmlhbnQ6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgZm9udC1zdHJldGNoOiBub3Jt YWw7IGZvbnQtc2l6ZTogMTBweDsgbGluZS1oZWlnaHQ6IG5vcm1hbDsgZm9udC1mYW1pbHk6IE1v bmFjbzsiPkR1cmluZyBoYW5kbGluZyBvZiB0aGUgYWJvdmUgZXhjZXB0aW9uLCBhbm90aGVyIGV4 Y2VwdGlvbiBvY2N1cnJlZDo8L3A+CjxwIGNsYXNzPSJnbWFpbC1tXy04ODk3Mjk2NjQ4MzAwNjAz OTQzbV83NzUxMDk3NzAwODQ3NjY1MjcwbV8yMjc0NDQ2NzMwODYzMjY0Njc5bV8tMTY0OTM2NDky NDM5MDY5MjY0NmdtYWlsLXAyIiBzdHlsZT0ibWFyZ2luOiAwcHg7IGZvbnQtc3R5bGU6IG5vcm1h bDsgZm9udC12YXJpYW50OiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGZvbnQtc3RyZXRj aDogbm9ybWFsOyBmb250LXNpemU6IDEwcHg7IGxpbmUtaGVpZ2h0OiBub3JtYWw7IGZvbnQtZmFt aWx5OiBNb25hY287IG1pbi1oZWlnaHQ6IDE0cHg7Ij48YnI+PC9wPgo8cCBjbGFzcz0iZ21haWwt bV8tODg5NzI5NjY0ODMwMDYwMzk0M21fNzc1MTA5NzcwMDg0NzY2NTI3MG1fMjI3NDQ0NjczMDg2 MzI2NDY3OW1fLTE2NDkzNjQ5MjQzOTA2OTI2NDZnbWFpbC1wMSIgc3R5bGU9Im1hcmdpbjogMHB4 OyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQtdmFyaWFudDogbm9ybWFsOyBmb250LXdlaWdodDog bm9ybWFsOyBmb250LXN0cmV0Y2g6IG5vcm1hbDsgZm9udC1zaXplOiAxMHB4OyBsaW5lLWhlaWdo dDogbm9ybWFsOyBmb250LWZhbWlseTogTW9uYWNvOyI+VHJhY2ViYWNrIChtb3N0IHJlY2VudCBj YWxsIGxhc3QpOjwvcD4KPHAgY2xhc3M9ImdtYWlsLW1fLTg4OTcyOTY2NDgzMDA2MDM5NDNtXzc3 NTEwOTc3MDA4NDc2NjUyNzBtXzIyNzQ0NDY3MzA4NjMyNjQ2NzltXy0xNjQ5MzY0OTI0MzkwNjky NjQ2Z21haWwtcDEiIHN0eWxlPSJtYXJnaW46IDBweDsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250 LXZhcmlhbnQ6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgZm9udC1zdHJldGNoOiBub3Jt YWw7IGZvbnQtc2l6ZTogMTBweDsgbGluZS1oZWlnaHQ6IG5vcm1hbDsgZm9udC1mYW1pbHk6IE1v bmFjbzsiPjxzcGFuIGNsYXNzPSJnbWFpbC1tXy04ODk3Mjk2NjQ4MzAwNjAzOTQzbV83NzUxMDk3 NzAwODQ3NjY1MjcwbV8yMjc0NDQ2NzMwODYzMjY0Njc5bV8tMTY0OTM2NDkyNDM5MDY5MjY0Nmdt YWlsLUFwcGxlLWNvbnZlcnRlZC1zcGFjZSI+Jm5ic3A7IDwvc3Bhbj5GaWxlICImbHQ7c3RkaW4m Z3Q7IiwgbGluZSAxLCBpbiAmbHQ7bW9kdWxlJmd0OzwvcD4KPC9zcGFuPjxwIGNsYXNzPSJnbWFp bC1tXy04ODk3Mjk2NjQ4MzAwNjAzOTQzbV83NzUxMDk3NzAwODQ3NjY1MjcwbV8yMjc0NDQ2NzMw ODYzMjY0Njc5bV8tMTY0OTM2NDkyNDM5MDY5MjY0NmdtYWlsLXAxIiBzdHlsZT0ibWFyZ2luOiAw cHg7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50OiBub3JtYWw7IGZvbnQtd2VpZ2h0 OiBub3JtYWw7IGZvbnQtc3RyZXRjaDogbm9ybWFsOyBmb250LXNpemU6IDEwcHg7IGxpbmUtaGVp Z2h0OiBub3JtYWw7IGZvbnQtZmFtaWx5OiBNb25hY287Ij48c3BhbiBjbGFzcz0iZ21haWwtbV8t ODg5NzI5NjY0ODMwMDYwMzk0M21fNzc1MTA5NzcwMDg0NzY2NTI3MG1fMjI3NDQ0NjczMDg2MzI2 NDY3OW1fLTE2NDkzNjQ5MjQzOTA2OTI2NDZnbWFpbC1BcHBsZS1jb252ZXJ0ZWQtc3BhY2UiPiZu YnNwOyA8L3NwYW4+RmlsZSAiL1VzZXJzL3Bhcm1pbmRlci9hbmFjb25kYS9hbmE8d2JyPmNvbmRh L2xpYi9weXRob24zLjQvc2l0ZS1wYWNrYTx3YnI+Z2VzL3B5dGVvbWljcy94bWwucHkiLCBsaW5l IDkwNywgaW4gZ2V0X2J5X2lkPC9wPjxzcGFuPgo8cCBjbGFzcz0iZ21haWwtbV8tODg5NzI5NjY0 ODMwMDYwMzk0M21fNzc1MTA5NzcwMDg0NzY2NTI3MG1fMjI3NDQ0NjczMDg2MzI2NDY3OW1fLTE2 NDkzNjQ5MjQzOTA2OTI2NDZnbWFpbC1wMSIgc3R5bGU9Im1hcmdpbjogMHB4OyBmb250LXN0eWxl OiBub3JtYWw7IGZvbnQtdmFyaWFudDogbm9ybWFsOyBmb250LXdlaWdodDogbm9ybWFsOyBmb250 LXN0cmV0Y2g6IG5vcm1hbDsgZm9udC1zaXplOiAxMHB4OyBsaW5lLWhlaWdodDogbm9ybWFsOyBm b250LWZhbWlseTogTW9uYWNvOyI+PHNwYW4gY2xhc3M9ImdtYWlsLW1fLTg4OTcyOTY2NDgzMDA2 MDM5NDNtXzc3NTEwOTc3MDA4NDc2NjUyNzBtXzIyNzQ0NDY3MzA4NjMyNjQ2NzltXy0xNjQ5MzY0 OTI0MzkwNjkyNjQ2Z21haWwtQXBwbGUtY29udmVydGVkLXNwYWNlIj4mbmJzcDsgJm5ic3A7IDwv c3Bhbj5kYXRhID0gc2VsZi5fZ2V0X2luZm9fc21hcnQoZWxlbSwgKiprd2FyZ3MpPC9wPgo8cCBj bGFzcz0iZ21haWwtbV8tODg5NzI5NjY0ODMwMDYwMzk0M21fNzc1MTA5NzcwMDg0NzY2NTI3MG1f MjI3NDQ0NjczMDg2MzI2NDY3OW1fLTE2NDkzNjQ5MjQzOTA2OTI2NDZnbWFpbC1wMSIgc3R5bGU9 Im1hcmdpbjogMHB4OyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQtdmFyaWFudDogbm9ybWFsOyBm b250LXdlaWdodDogbm9ybWFsOyBmb250LXN0cmV0Y2g6IG5vcm1hbDsgZm9udC1zaXplOiAxMHB4 OyBsaW5lLWhlaWdodDogbm9ybWFsOyBmb250LWZhbWlseTogTW9uYWNvOyI+PHNwYW4gY2xhc3M9 ImdtYWlsLW1fLTg4OTcyOTY2NDgzMDA2MDM5NDNtXzc3NTEwOTc3MDA4NDc2NjUyNzBtXzIyNzQ0 NDY3MzA4NjMyNjQ2NzltXy0xNjQ5MzY0OTI0MzkwNjkyNjQ2Z21haWwtQXBwbGUtY29udmVydGVk LXNwYWNlIj4mbmJzcDsgPC9zcGFuPkZpbGUgIi9Vc2Vycy9wYXJtaW5kZXIvYW5hY29uZGEvYW5h PHdicj5jb25kYS9saWIvcHl0aG9uMy40L3NpdGUtcGFja2E8d2JyPmdlcy9weXRlb21pY3MvbXp4 bWwucHkiLCBsaW5lIDEzNywgaW4gX2dldF9pbmZvX3NtYXJ0PC9wPgo8cCBjbGFzcz0iZ21haWwt bV8tODg5NzI5NjY0ODMwMDYwMzk0M21fNzc1MTA5NzcwMDg0NzY2NTI3MG1fMjI3NDQ0NjczMDg2 MzI2NDY3OW1fLTE2NDkzNjQ5MjQzOTA2OTI2NDZnbWFpbC1wMSIgc3R5bGU9Im1hcmdpbjogMHB4 OyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQtdmFyaWFudDogbm9ybWFsOyBmb250LXdlaWdodDog bm9ybWFsOyBmb250LXN0cmV0Y2g6IG5vcm1hbDsgZm9udC1zaXplOiAxMHB4OyBsaW5lLWhlaWdo dDogbm9ybWFsOyBmb250LWZhbWlseTogTW9uYWNvOyI+PHNwYW4gY2xhc3M9ImdtYWlsLW1fLTg4 OTcyOTY2NDgzMDA2MDM5NDNtXzc3NTEwOTc3MDA4NDc2NjUyNzBtXzIyNzQ0NDY3MzA4NjMyNjQ2 NzltXy0xNjQ5MzY0OTI0MzkwNjkyNjQ2Z21haWwtQXBwbGUtY29udmVydGVkLXNwYWNlIj4mbmJz cDsgJm5ic3A7IDwvc3Bhbj5uYW1lID0geG1sLl9sb2NhbF9uYW1lKGVsZW1lbnQpPC9wPgo8cCBj bGFzcz0iZ21haWwtbV8tODg5NzI5NjY0ODMwMDYwMzk0M21fNzc1MTA5NzcwMDg0NzY2NTI3MG1f MjI3NDQ0NjczMDg2MzI2NDY3OW1fLTE2NDkzNjQ5MjQzOTA2OTI2NDZnbWFpbC1wMSIgc3R5bGU9 Im1hcmdpbjogMHB4OyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQtdmFyaWFudDogbm9ybWFsOyBm b250LXdlaWdodDogbm9ybWFsOyBmb250LXN0cmV0Y2g6IG5vcm1hbDsgZm9udC1zaXplOiAxMHB4 OyBsaW5lLWhlaWdodDogbm9ybWFsOyBmb250LWZhbWlseTogTW9uYWNvOyI+PHNwYW4gY2xhc3M9 ImdtYWlsLW1fLTg4OTcyOTY2NDgzMDA2MDM5NDNtXzc3NTEwOTc3MDA4NDc2NjUyNzBtXzIyNzQ0 NDY3MzA4NjMyNjQ2NzltXy0xNjQ5MzY0OTI0MzkwNjkyNjQ2Z21haWwtQXBwbGUtY29udmVydGVk LXNwYWNlIj4mbmJzcDsgPC9zcGFuPkZpbGUgIi9Vc2Vycy9wYXJtaW5kZXIvYW5hY29uZGEvYW5h PHdicj5jb25kYS9saWIvcHl0aG9uMy40L3NpdGUtcGFja2E8d2JyPmdlcy9weXRlb21pY3MveG1s LnB5IiwgbGluZSA1MSwgaW4gX2xvY2FsX25hbWU8L3A+CjxwIGNsYXNzPSJnbWFpbC1tXy04ODk3 Mjk2NjQ4MzAwNjAzOTQzbV83NzUxMDk3NzAwODQ3NjY1MjcwbV8yMjc0NDQ2NzMwODYzMjY0Njc5 bV8tMTY0OTM2NDkyNDM5MDY5MjY0NmdtYWlsLXAxIiBzdHlsZT0ibWFyZ2luOiAwcHg7IGZvbnQt c3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50OiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7 IGZvbnQtc3RyZXRjaDogbm9ybWFsOyBmb250LXNpemU6IDEwcHg7IGxpbmUtaGVpZ2h0OiBub3Jt YWw7IGZvbnQtZmFtaWx5OiBNb25hY287Ij48c3BhbiBjbGFzcz0iZ21haWwtbV8tODg5NzI5NjY0 ODMwMDYwMzk0M21fNzc1MTA5NzcwMDg0NzY2NTI3MG1fMjI3NDQ0NjczMDg2MzI2NDY3OW1fLTE2 NDkzNjQ5MjQzOTA2OTI2NDZnbWFpbC1BcHBsZS1jb252ZXJ0ZWQtc3BhY2UiPiZuYnNwOyAmbmJz cDsgPC9zcGFuPmlmIGVsZW1lbnQudGFnIGFuZCBlbGVtZW50LnRhZ1swXSA9PSAneyc6PC9wPgo8 cCBjbGFzcz0iZ21haWwtbV8tODg5NzI5NjY0ODMwMDYwMzk0M21fNzc1MTA5NzcwMDg0NzY2NTI3 MG1fMjI3NDQ0NjczMDg2MzI2NDY3OW1fLTE2NDkzNjQ5MjQzOTA2OTI2NDZnbWFpbC1wMSIgc3R5 bGU9Im1hcmdpbjogMHB4OyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQtdmFyaWFudDogbm9ybWFs OyBmb250LXdlaWdodDogbm9ybWFsOyBmb250LXN0cmV0Y2g6IG5vcm1hbDsgZm9udC1zaXplOiAx MHB4OyBsaW5lLWhlaWdodDogbm9ybWFsOyBmb250LWZhbWlseTogTW9uYWNvOyI+QXR0cmlidXRl RXJyb3I6ICdOb25lVHlwZScgb2JqZWN0IGhhcyBubyBhdHRyaWJ1dGUgJ3RhZyc8L3A+PGRpdj48 YnI+PC9kaXY+PC9zcGFuPjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+VGhlbiBJIHRyaWVkIGJ5 IHNldHRpbmcgdGhlIGluZGV4aW5nIGFzIHRydWUgYW5kIGdldCBkaWZmZXJlbnQga2luZCBvZiBl cnJvcjo8L2Rpdj48ZGl2PgoKCgoKCgoKPHAgY2xhc3M9ImdtYWlsLW1fLTg4OTcyOTY2NDgzMDA2 MDM5NDNtXzc3NTEwOTc3MDA4NDc2NjUyNzBtXzIyNzQ0NDY3MzA4NjMyNjQ2NzltXy0xNjQ5MzY0 OTI0MzkwNjkyNjQ2Z21haWwtcDEiIHN0eWxlPSJtYXJnaW46IDBweDsgZm9udC1zdHlsZTogbm9y bWFsOyBmb250LXZhcmlhbnQ6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgZm9udC1zdHJl dGNoOiBub3JtYWw7IGZvbnQtc2l6ZTogMTBweDsgbGluZS1oZWlnaHQ6IG5vcm1hbDsgZm9udC1m YW1pbHk6IE1vbmFjbzsiPjxicj48L3A+PHAgY2xhc3M9ImdtYWlsLW1fLTg4OTcyOTY2NDgzMDA2 MDM5NDNtXzc3NTEwOTc3MDA4NDc2NjUyNzBtXzIyNzQ0NDY3MzA4NjMyNjQ2NzltXy0xNjQ5MzY0 OTI0MzkwNjkyNjQ2Z21haWwtcDEiIHN0eWxlPSJtYXJnaW46IDBweDsgZm9udC1zdHlsZTogbm9y bWFsOyBmb250LXZhcmlhbnQ6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgZm9udC1zdHJl dGNoOiBub3JtYWw7IGZvbnQtc2l6ZTogMTBweDsgbGluZS1oZWlnaHQ6IG5vcm1hbDsgZm9udC1m YW1pbHk6IE1vbmFjbzsiPnJlYWRlciA9IG16eG1sLnJlYWQoc2ZuYW1lLCB1c2VfaW5kZXg9VHJ1 ZSk8L3A+CjxwIGNsYXNzPSJnbWFpbC1tXy04ODk3Mjk2NjQ4MzAwNjAzOTQzbV83NzUxMDk3NzAw ODQ3NjY1MjcwbV8yMjc0NDQ2NzMwODYzMjY0Njc5bV8tMTY0OTM2NDkyNDM5MDY5MjY0NmdtYWls LXAxIiBzdHlsZT0ibWFyZ2luOiAwcHg7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50 OiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGZvbnQtc3RyZXRjaDogbm9ybWFsOyBmb250 LXNpemU6IDEwcHg7IGxpbmUtaGVpZ2h0OiBub3JtYWw7IGZvbnQtZmFtaWx5OiBNb25hY287Ij4m Z3Q7Jmd0OyZndDsgc2NhbiA9IHJlYWRlci5nZXRfYnlfaWQoYiIxMDAiLCAibnVtIik8L3A+PHNw YW4+CjxwIGNsYXNzPSJnbWFpbC1tXy04ODk3Mjk2NjQ4MzAwNjAzOTQzbV83NzUxMDk3NzAwODQ3 NjY1MjcwbV8yMjc0NDQ2NzMwODYzMjY0Njc5bV8tMTY0OTM2NDkyNDM5MDY5MjY0NmdtYWlsLXAx IiBzdHlsZT0ibWFyZ2luOiAwcHg7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50OiBu b3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGZvbnQtc3RyZXRjaDogbm9ybWFsOyBmb250LXNp emU6IDEwcHg7IGxpbmUtaGVpZ2h0OiBub3JtYWw7IGZvbnQtZmFtaWx5OiBNb25hY287Ij5UcmFj ZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6PC9wPgo8L3NwYW4+PHAgY2xhc3M9ImdtYWls LW1fLTg4OTcyOTY2NDgzMDA2MDM5NDNtXzc3NTEwOTc3MDA4NDc2NjUyNzBtXzIyNzQ0NDY3MzA4 NjMyNjQ2NzltXy0xNjQ5MzY0OTI0MzkwNjkyNjQ2Z21haWwtcDEiIHN0eWxlPSJtYXJnaW46IDBw eDsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXZhcmlhbnQ6IG5vcm1hbDsgZm9udC13ZWlnaHQ6 IG5vcm1hbDsgZm9udC1zdHJldGNoOiBub3JtYWw7IGZvbnQtc2l6ZTogMTBweDsgbGluZS1oZWln aHQ6IG5vcm1hbDsgZm9udC1mYW1pbHk6IE1vbmFjbzsiPjxzcGFuIGNsYXNzPSJnbWFpbC1tXy04 ODk3Mjk2NjQ4MzAwNjAzOTQzbV83NzUxMDk3NzAwODQ3NjY1MjcwbV8yMjc0NDQ2NzMwODYzMjY0 Njc5bV8tMTY0OTM2NDkyNDM5MDY5MjY0NmdtYWlsLUFwcGxlLWNvbnZlcnRlZC1zcGFjZSI+Jm5i c3A7IDwvc3Bhbj5GaWxlICIvVXNlcnMvcGFybWluZGVyL2FuYWNvbmRhL2FuYTx3YnI+Y29uZGEv bGliL3B5dGhvbjMuNC9zaXRlLXBhY2thPHdicj5nZXMvcHl0ZW9taWNzL3htbC5weSIsIGxpbmUg OTAyLCBpbiBnZXRfYnlfaWQ8L3A+CjxwIGNsYXNzPSJnbWFpbC1tXy04ODk3Mjk2NjQ4MzAwNjAz OTQzbV83NzUxMDk3NzAwODQ3NjY1MjcwbV8yMjc0NDQ2NzMwODYzMjY0Njc5bV8tMTY0OTM2NDky NDM5MDY5MjY0NmdtYWlsLXAxIiBzdHlsZT0ibWFyZ2luOiAwcHg7IGZvbnQtc3R5bGU6IG5vcm1h bDsgZm9udC12YXJpYW50OiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGZvbnQtc3RyZXRj aDogbm9ybWFsOyBmb250LXNpemU6IDEwcHg7IGxpbmUtaGVpZ2h0OiBub3JtYWw7IGZvbnQtZmFt aWx5OiBNb25hY287Ij48c3BhbiBjbGFzcz0iZ21haWwtbV8tODg5NzI5NjY0ODMwMDYwMzk0M21f Nzc1MTA5NzcwMDg0NzY2NTI3MG1fMjI3NDQ0NjczMDg2MzI2NDY3OW1fLTE2NDkzNjQ5MjQzOTA2 OTI2NDZnbWFpbC1BcHBsZS1jb252ZXJ0ZWQtc3BhY2UiPiZuYnNwOyAmbmJzcDsgPC9zcGFuPmVs ZW0gPSBzZWxmLl9maW5kX2J5X2lkX25vX3Jlc2V0KGVsZW08d2JyPl9pZCwgaWRfa2V5PWlkX2tl eSk8L3A+CjxwIGNsYXNzPSJnbWFpbC1tXy04ODk3Mjk2NjQ4MzAwNjAzOTQzbV83NzUxMDk3NzAw ODQ3NjY1MjcwbV8yMjc0NDQ2NzMwODYzMjY0Njc5bV8tMTY0OTM2NDkyNDM5MDY5MjY0NmdtYWls LXAxIiBzdHlsZT0ibWFyZ2luOiAwcHg7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50 OiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGZvbnQtc3RyZXRjaDogbm9ybWFsOyBmb250 LXNpemU6IDEwcHg7IGxpbmUtaGVpZ2h0OiBub3JtYWw7IGZvbnQtZmFtaWx5OiBNb25hY287Ij48 c3BhbiBjbGFzcz0iZ21haWwtbV8tODg5NzI5NjY0ODMwMDYwMzk0M21fNzc1MTA5NzcwMDg0NzY2 NTI3MG1fMjI3NDQ0NjczMDg2MzI2NDY3OW1fLTE2NDkzNjQ5MjQzOTA2OTI2NDZnbWFpbC1BcHBs ZS1jb252ZXJ0ZWQtc3BhY2UiPiZuYnNwOyA8L3NwYW4+RmlsZSAiL1VzZXJzL3Bhcm1pbmRlci9h bmFjb25kYS9hbmE8d2JyPmNvbmRhL2xpYi9weXRob24zLjQvc2l0ZS1wYWNrYTx3YnI+Z2VzL3B5 dGVvbWljcy94bWwucHkiLCBsaW5lIDQ1OSwgaW4gX2ZpbmRfYnlfaWRfbm9fcmVzZXQ8L3A+Cjxw IGNsYXNzPSJnbWFpbC1tXy04ODk3Mjk2NjQ4MzAwNjAzOTQzbV83NzUxMDk3NzAwODQ3NjY1Mjcw bV8yMjc0NDQ2NzMwODYzMjY0Njc5bV8tMTY0OTM2NDkyNDM5MDY5MjY0NmdtYWlsLXAxIiBzdHls ZT0ibWFyZ2luOiAwcHg7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50OiBub3JtYWw7 IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGZvbnQtc3RyZXRjaDogbm9ybWFsOyBmb250LXNpemU6IDEw cHg7IGxpbmUtaGVpZ2h0OiBub3JtYWw7IGZvbnQtZmFtaWx5OiBNb25hY287Ij48c3BhbiBjbGFz cz0iZ21haWwtbV8tODg5NzI5NjY0ODMwMDYwMzk0M21fNzc1MTA5NzcwMDg0NzY2NTI3MG1fMjI3 NDQ0NjczMDg2MzI2NDY3OW1fLTE2NDkzNjQ5MjQzOTA2OTI2NDZnbWFpbC1BcHBsZS1jb252ZXJ0 ZWQtc3BhY2UiPiZuYnNwOyAmbmJzcDsgPC9zcGFuPnNlbGYuX3NvdXJjZSwgZXZlbnRzPSgnc3Rh cnQnLCAnZW5kJyksIHJlbW92ZV9jb21tZW50cz1UcnVlKTo8L3A+CjxwIGNsYXNzPSJnbWFpbC1t Xy04ODk3Mjk2NjQ4MzAwNjAzOTQzbV83NzUxMDk3NzAwODQ3NjY1MjcwbV8yMjc0NDQ2NzMwODYz MjY0Njc5bV8tMTY0OTM2NDkyNDM5MDY5MjY0NmdtYWlsLXAxIiBzdHlsZT0ibWFyZ2luOiAwcHg7 IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50OiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBu b3JtYWw7IGZvbnQtc3RyZXRjaDogbm9ybWFsOyBmb250LXNpemU6IDEwcHg7IGxpbmUtaGVpZ2h0 OiBub3JtYWw7IGZvbnQtZmFtaWx5OiBNb25hY287Ij48c3BhbiBjbGFzcz0iZ21haWwtbV8tODg5 NzI5NjY0ODMwMDYwMzk0M21fNzc1MTA5NzcwMDg0NzY2NTI3MG1fMjI3NDQ0NjczMDg2MzI2NDY3 OW1fLTE2NDkzNjQ5MjQzOTA2OTI2NDZnbWFpbC1BcHBsZS1jb252ZXJ0ZWQtc3BhY2UiPiZuYnNw OyA8L3NwYW4+RmlsZSAic3JjL2x4bWwvaXRlcnBhcnNlLnB4aSIsIGxpbmUgMjA4LCBpbiBseG1s LmV0cmVlLml0ZXJwYXJzZS5fX25leHRfXyAoc3JjL2x4bWwvbHhtbC5ldHJlZS5jOjE0NjQ5Nyk8 L3A+CjxwIGNsYXNzPSJnbWFpbC1tXy04ODk3Mjk2NjQ4MzAwNjAzOTQzbV83NzUxMDk3NzAwODQ3 NjY1MjcwbV8yMjc0NDQ2NzMwODYzMjY0Njc5bV8tMTY0OTM2NDkyNDM5MDY5MjY0NmdtYWlsLXAx IiBzdHlsZT0ibWFyZ2luOiAwcHg7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50OiBu b3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGZvbnQtc3RyZXRjaDogbm9ybWFsOyBmb250LXNp emU6IDEwcHg7IGxpbmUtaGVpZ2h0OiBub3JtYWw7IGZvbnQtZmFtaWx5OiBNb25hY287Ij48c3Bh biBjbGFzcz0iZ21haWwtbV8tODg5NzI5NjY0ODMwMDYwMzk0M21fNzc1MTA5NzcwMDg0NzY2NTI3 MG1fMjI3NDQ0NjczMDg2MzI2NDY3OW1fLTE2NDkzNjQ5MjQzOTA2OTI2NDZnbWFpbC1BcHBsZS1j b252ZXJ0ZWQtc3BhY2UiPiZuYnNwOyA8L3NwYW4+RmlsZSAic3JjL2x4bWwvaXRlcnBhcnNlLnB4 aSIsIGxpbmUgMTkzLCBpbiBseG1sLmV0cmVlLml0ZXJwYXJzZS5fX25leHRfXyAoc3JjL2x4bWwv bHhtbC5ldHJlZS5jOjE0NjE5NSk8L3A+CjxwIGNsYXNzPSJnbWFpbC1tXy04ODk3Mjk2NjQ4MzAw NjAzOTQzbV83NzUxMDk3NzAwODQ3NjY1MjcwbV8yMjc0NDQ2NzMwODYzMjY0Njc5bV8tMTY0OTM2 NDkyNDM5MDY5MjY0NmdtYWlsLXAxIiBzdHlsZT0ibWFyZ2luOiAwcHg7IGZvbnQtc3R5bGU6IG5v cm1hbDsgZm9udC12YXJpYW50OiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGZvbnQtc3Ry ZXRjaDogbm9ybWFsOyBmb250LXNpemU6IDEwcHg7IGxpbmUtaGVpZ2h0OiBub3JtYWw7IGZvbnQt ZmFtaWx5OiBNb25hY287Ij48c3BhbiBjbGFzcz0iZ21haWwtbV8tODg5NzI5NjY0ODMwMDYwMzk0 M21fNzc1MTA5NzcwMDg0NzY2NTI3MG1fMjI3NDQ0NjczMDg2MzI2NDY3OW1fLTE2NDkzNjQ5MjQz OTA2OTI2NDZnbWFpbC1BcHBsZS1jb252ZXJ0ZWQtc3BhY2UiPiZuYnNwOyA8L3NwYW4+RmlsZSAi c3JjL2x4bWwvaXRlcnBhcnNlLnB4aSIsIGxpbmUgMjI4LCBpbiBseG1sLmV0cmVlLml0ZXJwYXJz ZS5fcmVhZF9tb3I8d2JyPmVfZXZlbnRzIChzcmMvbHhtbC9seG1sLmV0cmVlLmM6MTQ2ODM0KTwv cD4KPHAgY2xhc3M9ImdtYWlsLW1fLTg4OTcyOTY2NDgzMDA2MDM5NDNtXzc3NTEwOTc3MDA4NDc2 NjUyNzBtXzIyNzQ0NDY3MzA4NjMyNjQ2NzltXy0xNjQ5MzY0OTI0MzkwNjkyNjQ2Z21haWwtcDEi IHN0eWxlPSJtYXJnaW46IDBweDsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXZhcmlhbnQ6IG5v cm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgZm9udC1zdHJldGNoOiBub3JtYWw7IGZvbnQtc2l6 ZTogMTBweDsgbGluZS1oZWlnaHQ6IG5vcm1hbDsgZm9udC1mYW1pbHk6IE1vbmFjbzsiPjxzcGFu IGNsYXNzPSJnbWFpbC1tXy04ODk3Mjk2NjQ4MzAwNjAzOTQzbV83NzUxMDk3NzAwODQ3NjY1Mjcw bV8yMjc0NDQ2NzMwODYzMjY0Njc5bV8tMTY0OTM2NDkyNDM5MDY5MjY0NmdtYWlsLUFwcGxlLWNv bnZlcnRlZC1zcGFjZSI+Jm5ic3A7IDwvc3Bhbj5GaWxlICJzcmMvbHhtbC9wYXJzZXIucHhpIiwg bGluZSAxMzM5LCBpbiBseG1sLmV0cmVlLl9GZWVkUGFyc2VyLmZlZWQgKHNyYy9seG1sL2x4bWwu ZXRyZWUuYzoxMTM2NDIpPC9wPgo8cCBjbGFzcz0iZ21haWwtbV8tODg5NzI5NjY0ODMwMDYwMzk0 M21fNzc1MTA5NzcwMDg0NzY2NTI3MG1fMjI3NDQ0NjczMDg2MzI2NDY3OW1fLTE2NDkzNjQ5MjQz OTA2OTI2NDZnbWFpbC1wMSIgc3R5bGU9Im1hcmdpbjogMHB4OyBmb250LXN0eWxlOiBub3JtYWw7 IGZvbnQtdmFyaWFudDogbm9ybWFsOyBmb250LXdlaWdodDogbm9ybWFsOyBmb250LXN0cmV0Y2g6 IG5vcm1hbDsgZm9udC1zaXplOiAxMHB4OyBsaW5lLWhlaWdodDogbm9ybWFsOyBmb250LWZhbWls eTogTW9uYWNvOyI+PHNwYW4gY2xhc3M9ImdtYWlsLW1fLTg4OTcyOTY2NDgzMDA2MDM5NDNtXzc3 NTEwOTc3MDA4NDc2NjUyNzBtXzIyNzQ0NDY3MzA4NjMyNjQ2NzltXy0xNjQ5MzY0OTI0MzkwNjky NjQ2Z21haWwtQXBwbGUtY29udmVydGVkLXNwYWNlIj4mbmJzcDsgPC9zcGFuPkZpbGUgInNyYy9s eG1sL3BhcnNlci5weGkiLCBsaW5lIDU4NiwgaW4gbHhtbC5ldHJlZS5fUGFyc2VyQ29udGV4dC5f aGFuPHdicj5kbGVQYXJzZVJlc3VsdCAoc3JjL2x4bWwvbHhtbC5ldHJlZS5jOjEwNDk4Myk8L3A+ CjxwIGNsYXNzPSJnbWFpbC1tXy04ODk3Mjk2NjQ4MzAwNjAzOTQzbV83NzUxMDk3NzAwODQ3NjY1 MjcwbV8yMjc0NDQ2NzMwODYzMjY0Njc5bV8tMTY0OTM2NDkyNDM5MDY5MjY0NmdtYWlsLXAxIiBz dHlsZT0ibWFyZ2luOiAwcHg7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50OiBub3Jt YWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGZvbnQtc3RyZXRjaDogbm9ybWFsOyBmb250LXNpemU6 IDEwcHg7IGxpbmUtaGVpZ2h0OiBub3JtYWw7IGZvbnQtZmFtaWx5OiBNb25hY287Ij48c3BhbiBj bGFzcz0iZ21haWwtbV8tODg5NzI5NjY0ODMwMDYwMzk0M21fNzc1MTA5NzcwMDg0NzY2NTI3MG1f MjI3NDQ0NjczMDg2MzI2NDY3OW1fLTE2NDkzNjQ5MjQzOTA2OTI2NDZnbWFpbC1BcHBsZS1jb252 ZXJ0ZWQtc3BhY2UiPiZuYnNwOyA8L3NwYW4+RmlsZSAic3JjL2x4bWwvcGFyc2VyLnB4aSIsIGxp bmUgNTk1LCBpbiBseG1sLmV0cmVlLl9QYXJzZXJDb250ZXh0Ll9oYW48d2JyPmRsZVBhcnNlUmVz dWx0RG9jIChzcmMvbHhtbC9seG1sLmV0cmVlLmM6MTA1MTAyKTwvcD4KPHAgY2xhc3M9ImdtYWls LW1fLTg4OTcyOTY2NDgzMDA2MDM5NDNtXzc3NTEwOTc3MDA4NDc2NjUyNzBtXzIyNzQ0NDY3MzA4 NjMyNjQ2NzltXy0xNjQ5MzY0OTI0MzkwNjkyNjQ2Z21haWwtcDEiIHN0eWxlPSJtYXJnaW46IDBw eDsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXZhcmlhbnQ6IG5vcm1hbDsgZm9udC13ZWlnaHQ6 IG5vcm1hbDsgZm9udC1zdHJldGNoOiBub3JtYWw7IGZvbnQtc2l6ZTogMTBweDsgbGluZS1oZWln aHQ6IG5vcm1hbDsgZm9udC1mYW1pbHk6IE1vbmFjbzsiPjxzcGFuIGNsYXNzPSJnbWFpbC1tXy04 ODk3Mjk2NjQ4MzAwNjAzOTQzbV83NzUxMDk3NzAwODQ3NjY1MjcwbV8yMjc0NDQ2NzMwODYzMjY0 Njc5bV8tMTY0OTM2NDkyNDM5MDY5MjY0NmdtYWlsLUFwcGxlLWNvbnZlcnRlZC1zcGFjZSI+Jm5i c3A7IDwvc3Bhbj5GaWxlICJzcmMvbHhtbC9wYXJzZXIucHhpIiwgbGluZSA3MDYsIGluIGx4bWwu ZXRyZWUuX2hhbmRsZVBhcnNlUmVzdWx0IChzcmMvbHhtbC9seG1sLmV0cmVlLmM6MTA2ODEwKTwv cD4KPHAgY2xhc3M9ImdtYWlsLW1fLTg4OTcyOTY2NDgzMDA2MDM5NDNtXzc3NTEwOTc3MDA4NDc2 NjUyNzBtXzIyNzQ0NDY3MzA4NjMyNjQ2NzltXy0xNjQ5MzY0OTI0MzkwNjkyNjQ2Z21haWwtcDEi IHN0eWxlPSJtYXJnaW46IDBweDsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXZhcmlhbnQ6IG5v cm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgZm9udC1zdHJldGNoOiBub3JtYWw7IGZvbnQtc2l6 ZTogMTBweDsgbGluZS1oZWlnaHQ6IG5vcm1hbDsgZm9udC1mYW1pbHk6IE1vbmFjbzsiPjxzcGFu IGNsYXNzPSJnbWFpbC1tXy04ODk3Mjk2NjQ4MzAwNjAzOTQzbV83NzUxMDk3NzAwODQ3NjY1Mjcw bV8yMjc0NDQ2NzMwODYzMjY0Njc5bV8tMTY0OTM2NDkyNDM5MDY5MjY0NmdtYWlsLUFwcGxlLWNv bnZlcnRlZC1zcGFjZSI+Jm5ic3A7IDwvc3Bhbj5GaWxlICJzcmMvbHhtbC9wYXJzZXIucHhpIiwg bGluZSA2MzUsIGluIGx4bWwuZXRyZWUuX3JhaXNlUGFyc2VFcnJvciAoc3JjL2x4bWwvbHhtbC5l dHJlZS5jOjEwNTY2NCk8L3A+CjxwIGNsYXNzPSJnbWFpbC1tXy04ODk3Mjk2NjQ4MzAwNjAzOTQz bV83NzUxMDk3NzAwODQ3NjY1MjcwbV8yMjc0NDQ2NzMwODYzMjY0Njc5bV8tMTY0OTM2NDkyNDM5 MDY5MjY0NmdtYWlsLXAxIiBzdHlsZT0ibWFyZ2luOiAwcHg7IGZvbnQtc3R5bGU6IG5vcm1hbDsg Zm9udC12YXJpYW50OiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGZvbnQtc3RyZXRjaDog bm9ybWFsOyBmb250LXNpemU6IDEwcHg7IGxpbmUtaGVpZ2h0OiBub3JtYWw7IGZvbnQtZmFtaWx5 OiBNb25hY287Ij48c3BhbiBjbGFzcz0iZ21haWwtbV8tODg5NzI5NjY0ODMwMDYwMzk0M21fNzc1 MTA5NzcwMDg0NzY2NTI3MG1fMjI3NDQ0NjczMDg2MzI2NDY3OW1fLTE2NDkzNjQ5MjQzOTA2OTI2 NDZnbWFpbC1BcHBsZS1jb252ZXJ0ZWQtc3BhY2UiPiZuYnNwOyA8L3NwYW4+RmlsZSAiL1VzZXJz L3Bhcm1pbmRlci9Eb3dubG9hZHMvTU08d2JyPl90ZXN0X2RhdGEvRW5icmVsX0FudGlib2R5LzEw Mjx3YnI+NjE2X0VfU05fSWxrZXJfRW5icmVsX1RyeXBzaW4uPHdicj5telhNTCIsIGxpbmUgMjA8 L3A+CjxwIGNsYXNzPSJnbWFpbC1tXy04ODk3Mjk2NjQ4MzAwNjAzOTQzbV83NzUxMDk3NzAwODQ3 NjY1MjcwbV8yMjc0NDQ2NzMwODYzMjY0Njc5bV8tMTY0OTM2NDkyNDM5MDY5MjY0NmdtYWlsLXAx IiBzdHlsZT0ibWFyZ2luOiAwcHg7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50OiBu b3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGZvbnQtc3RyZXRjaDogbm9ybWFsOyBmb250LXNp emU6IDEwcHg7IGxpbmUtaGVpZ2h0OiBub3JtYWw7IGZvbnQtZmFtaWx5OiBNb25hY287Ij5seG1s LmV0cmVlLlhNTFN5bnRheEVycm9yOiBFeHRyYSBjb250ZW50IGF0IHRoZSBlbmQgb2YgdGhlIGRv Y3VtZW50LCBsaW5lIDIwLCBjb2x1bW4gNTwvcD48c3Bhbj4KPHAgY2xhc3M9ImdtYWlsLW1fLTg4 OTcyOTY2NDgzMDA2MDM5NDNtXzc3NTEwOTc3MDA4NDc2NjUyNzBtXzIyNzQ0NDY3MzA4NjMyNjQ2 NzltXy0xNjQ5MzY0OTI0MzkwNjkyNjQ2Z21haWwtcDIiIHN0eWxlPSJtYXJnaW46IDBweDsgZm9u dC1zdHlsZTogbm9ybWFsOyBmb250LXZhcmlhbnQ6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IG5vcm1h bDsgZm9udC1zdHJldGNoOiBub3JtYWw7IGZvbnQtc2l6ZTogMTBweDsgbGluZS1oZWlnaHQ6IG5v cm1hbDsgZm9udC1mYW1pbHk6IE1vbmFjbzsgbWluLWhlaWdodDogMTRweDsiPjxicj48L3A+Cjxw IGNsYXNzPSJnbWFpbC1tXy04ODk3Mjk2NjQ4MzAwNjAzOTQzbV83NzUxMDk3NzAwODQ3NjY1Mjcw bV8yMjc0NDQ2NzMwODYzMjY0Njc5bV8tMTY0OTM2NDkyNDM5MDY5MjY0NmdtYWlsLXAxIiBzdHls ZT0ibWFyZ2luOiAwcHg7IGZvbnQtc3R5bGU6IG5vcm1hbDs
...

[Message clipped]  

Joshua Klein

unread,
Jan 4, 2018, 5:02:56 PM1/4/18
to pyteomics

Okay, found the problem. It was indeed my failure to account for Py2/3 strings. Index with plain text strings, note byte strings.

>>>from pyteomics import mzxml
>>>reader = mzxml.read("./102616_E_SN_Ilker_Enbrel_Trypsin.mzXML", use_index=1)
>>>print(reader.get_by_id("100", "num"))
{'basePeakIntensity': 248701.34375,
 'basePeakMz': 445.119903564453,
 'centroided': True,
 'highMz': 1495.056030273438,
 'id': '100',
 'intensity array': array([   2959.13183594,     382.79211426,     385.23596191,
           1441.34924316,     604.27459717,     905.078125  ,
            411.12585449,     876.58642578,    7184.71044922,
           1594.55578613,     392.96408081,     335.97280884,

 ...

Parminder Kaur

unread,
Jan 4, 2018, 5:26:46 PM1/4/18
to pyte...@googlegroups.com
This looks great! Thanks for resolving this quickly! Very-2 helpful!!

Just curious what's the best way for me to get this update.

Thanks a ton!!

Parminder

Joshua Klein

unread,
Jan 4, 2018, 5:44:38 PM1/4/18
to pyteomics
This solution works with the version you have. I just gave you bad code snippets.

Lev Levitsky

unread,
Jan 4, 2018, 6:37:43 PM1/4/18
to pyteomics
So, with your current version you should be able to use the reader.get_by_id("100", "num") syntax.

With the latest commit on the development version doing reader["100"] should be equivalent. This patch will be included in the next release.

Thank you both once again.

Best regards,
Lev

Parminder Kaur

unread,
Jan 4, 2018, 7:21:52 PM1/4/18
to pyte...@googlegroups.com
I see. I had missed the change in the order of arguments. It works great now!

Thanks so much!

Parminder
Reply all
Reply to author
Forward
0 new messages