# Name: smd_calendar v0.22 # Type: Client side plugin # Calendar / event / schedule system with events as TXP articles # Author: Stef Dawson # URL: http://stefdawson.com/ # Recommended load order: 5 # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMDp7czo0OiJuYW1lIjtzOjEyOiJzbWRfY2FsZW5kYXIiO3M6NjoiYXV0aG9yIjtzOjEx OiJTdGVmIERhd3NvbiI7czoxMDoiYXV0aG9yX3VyaSI7czoyMjoiaHR0cDovL3N0ZWZkYXdz b24uY29tLyI7czo3OiJ2ZXJzaW9uIjtzOjQ6IjAuMjIiO3M6MTE6ImRlc2NyaXB0aW9uIjtz OjYyOiJDYWxlbmRhciAvIGV2ZW50IC8gc2NoZWR1bGUgc3lzdGVtIHdpdGggZXZlbnRzIGFz IFRYUCBhcnRpY2xlcyI7czo0OiJjb2RlIjtzOjM2NjEwOiIvLyBCYXNlZCBoZWF2aWx5IG9u IG1kcF9jYWxlbmRhciAtIHRoYW5rcyENCi8vVE9ETzogSW52ZXN0aWdhdGUNCi8qDQokZCA9 IG5ldyBEYXRlVGltZSgnMjAwOC0xMi0yMiAxMjo1MicpOw0KZWNobyAkZC0+Z2V0VGltZXpv bmUoKS0+Z2V0TmFtZSgpOw0KKi8NCg0KaWYoICRkYXRlID0gZ3BzKCdkYXRlJykgKSB7DQoJ JF9HRVRbJ21vbnRoJ10gPSAkZGF0ZTsNCn0NCg0KZnVuY3Rpb24gc21kX2NhbGVuZGFyKCRh dHRzLCAkdGhpbmc9JycpIHsNCglnbG9iYWwgJHByZXRleHQsICR2YXJpYWJsZSwgJHByZWZz LCAkc21kX2NhbF9mbGFnLCAkc21kX2NhbF9pZCwgJHNtZF95ZWFyLCAkc21kX21vbnRoLCAk c21kX3dlZWssICRzbWRfZGF5Ow0KDQoJZXh0cmFjdChsQXR0cyhhcnJheSgNCgkJJ3RpbWUn ID0+ICdhbnknLCAvLyBwYXN0LCBmdXR1cmUsIGFueQ0KCQknc2l6ZScgPT4gJ2xhcmdlJywg Ly8gc21hbGwgb3IgbGFyZ2UgKGNhbGVuZGFyKQ0KCQknZXhwaXJlZCcgPT4gJycsIC8vIDA9 bm8sIDE9eWVzIHB1Ymxpc2ggZXhwaXJlZCBldmVudHMsIGVtcHR5PXVzZSBwcmVmcw0KCQkn Y2F0ZWdvcnknID0+ICRwcmV0ZXh0WydjJ10sDQoJCSdzZWN0aW9uJyA9PiAkcHJldGV4dFsn cyddLA0KCQknYXV0aG9yJyA9PiAkcHJldGV4dFsnYXV0aG9yJ10sDQoJCSdzdGF0dXMnID0+ ICdsaXZlJywNCgkJJ3N0YXRpYycgPT4gJycsDQoJCSdmb3JtJyA9PiAnJywNCgkJJ3NwYW5m b3JtJyA9PiAnU01EX1NBTUUnLA0KCQknc3RlcGZpZWxkJyA9PiAnJywNCgkJJ3NraXBmaWVs ZCcgPT4gJycsDQoJCSdzaG93c2tpcHBlZCcgPT4gJzAnLA0KCQknc2hvd3NwYW5uZWQnID0+ ICcxJywNCgkJJ2hvbGlkYXlzJyA9PiAnJywNCgkJJ2hvbGlkYXlmbGFncycgPT4gJ2V2ZW50 JywgLy8gcGVybWl0IHRoZXNlIGV2ZW50cyB0byAibGFuZCIgb24gYSBob2xpZGF5IChldmVu dCwgcmVjdXIsIG11bHRpKQ0KCQknY2xhc3NsZXZlbHMnID0+ICdjZWxsLCBldmVudCcsIC8v IGNlbGwsIGV2ZW50LCBjZWxscGx1cyAoY29tYmluZXMgZXZlbnQgYW5kIGNlbGwgaW50byBj ZWxsIGxldmVsIGNsYXNzZXMpDQoJCSdsaW5rcG9zdGVkJyA9PiAncmVjdXIsIG11bHRpLCBt dWx0aXByZXYsIG11bHRpbGFzdCcsIC8vIHdoaWNoIGV2ZW50cyBjYXVzZSB0aGUgbWluaWNh bCB0byBsaW5rIHRvIHBvc3RlZCBkYXRlDQoJCSdjbGFzc3ByZWZpeGVzJyA9PiAnc21kX2Nh bF8sIHNtZF9jYWxfZXZfJywgLy8gMXN0PWNlbGwtbGV2ZWwgcGZ4LCAybmQ9ZXZlbnQtbGV2 ZWwgcGZ4IChvcHRpb25hbCkNCgkJJ2NsYXNzJyA9PiAnJywgLy8gVGFibGUgY2xhc3MNCgkJ J3Jvd2NsYXNzJyA9PiAnJywNCgkJJ2NlbGxjbGFzcycgPT4gJycsDQoJCSdlbXB0eWNsYXNz JyA9PiAnZW1wdHknLA0KCQknaXNvd2Vla2NsYXNzJyA9PiAnd2VlaycsDQoJCSduYXZjbGFz cycgPT4gJ25hdnByZXYsIG5hdm5leHQnLA0KCQknZXZlbnRjbGFzc2VzJyA9PiAnY2F0ZWdv cnknLA0KCQknZXZlbnR3cmFwdGFnJyA9PiAnc3BhbicsDQoJCSdzZWxlY3QnID0+ICcnLCAv LyBtb250aCBhbmQvb3IgeWVhciAodG8gZGlzcGxheSBkcm9wZG93bnMpDQoJCSdzZWxlY3Ri dG4nID0+ICcnLCAvLyBlbXB0eSA9IGF1dG9zZWxlY3QgKG9uY2hhbmdlKSwgb3IgdGV4dCB0 byBnbyBvbiB0aGUgc3VibWl0IGJ1dHRvbg0KCQknbXljbGFzcycgPT4gJycsIC8vIG1vbnRo LXllYXIgaGVhZGVyIGNsYXNzDQoJCSdteXdyYXB0YWcnID0+ICcnLCAvLyBtb250aC15ZWFy IGhlYWRlciB3cmFwdGFnDQoJCSdpZCcgPT4gJycsIC8vIFRhYmxlIElEICg9Y2FsaWQpDQoJ CSd3ZWVrJyA9PiAnJywNCgkJJ21vbnRoJyA9PiAnJywNCgkJJ3llYXInID0+ICcnLA0KCQkn eWVhcndpZHRoJyA9PiAnMCwwJywgLy8gbnVtYmVyIG9mIHllYXJzIGVpdGhlciBzaWRlIG9m IHRoZSBmaXJzdC9sYXN0IGFydGljbGUgdG8gcGVybWl0DQoJCSdpc293ZWVrcycgPT4gJycs IC8vIGVtcHR5ID0gZG9uJ3Qgc2hvdyBJU08gd2Vla3MsIG9yIHRleHQgb2YgY29sdW1uIGhl YWRpbmcNCgkJJ2RheWZvcm1hdCcgPT4gJ0FCQlInLCAvLyBBQkJSID0gJWEsIEZVTEwgPSAl QSwgb3IgY3VzdG9tIHN0cmZ0aW1lIHN0cmluZw0KCQknbW9udGhmb3JtYXQnID0+ICdGVUxM JywgLy8gQUJCUiA9ICViLCBGVUxMID0gJUIsIG9yIGN1c3RvbSBzdHJmdGltZSBzdHJpbmcN CgkJJ2ZpcnN0ZGF5JyA9PiAwLCAvLyAxc3QgZGF5IG9mIHdlZWsgMD1TdW5kYXksIDY9U2F0 dXJkYXkgKGZvcmNlZCB0byBNb25kYXkgaWYgaXNvd2Vla3M9MSkNCgkJJ2dtdCcgPT4gMCwN CgkJJ2xhbmcnID0+ICcnLA0KCQknZGVidWcnID0+IDAsDQoJKSwgJGF0dHMpKTsNCg0KCSRm dXR1cmUgPSAoICR0aW1lICE9ICJwYXN0IiApID8gdHJ1ZSA6IGZhbHNlOyAvLyBEZXRlcm1p bmUgaGVhZGluZyBzdHlsZQ0KCSRzdGF0dXMgPSAoJHN0YXR1cykgPyAkc3RhdHVzIDogJ2xp dmUnOw0KCSRmaXJzdGRheSA9ICgkaXNvd2Vla3MgPT0gJycpID8gJGZpcnN0ZGF5IDogMTsN Cgkkc3BhbmZvcm0gPSAoJHNwYW5mb3JtID09ICJTTURfU0FNRSIpID8gJGZvcm0gOiAkc3Bh bmZvcm07DQoNCgkvLyBTZXQgdXAgdGhlIGNsYXNzIHByZWZpeGVzDQoJJGNsZXZzID0gZG9f bGlzdCgkY2xhc3NsZXZlbHMpOw0KCSRjbHMgPSBkb19saXN0KCRjbGFzc3ByZWZpeGVzKTsN CgkkY2xhc3NwcmVmaXggPSAkZXZjbGFzc3ByZWZpeCA9ICRjbHNbMF07DQoJaWYgKGNvdW50 KCRjbHMpID4gMSl7DQoJCSRldmNsYXNzcHJlZml4ID0gJGNsc1sxXTsNCgl9DQoNCgkvLyBT ZXQgdXAgdGhlIG5hdiBjbGFzcyhlcykNCgkkbmF2Y2xhc3MgPSBkb19saXN0KCRuYXZjbGFz cyk7DQoJJG5hdnByZXZjbGFzcyA9ICRuYXZuZXh0Y2xhc3MgPSAkbmF2Y2xhc3NbMF07DQoJ aWYgKGNvdW50KCRuYXZjbGFzcykgPiAxKXsNCgkJJG5hdm5leHRjbGFzcyA9ICRuYXZjbGFz c1sxXTsNCgl9DQoNCgkvLyBGaWx0ZXJzDQoJJGZvcHRzID0gYXJyYXkoKTsNCgkkY2F0U1FM ID0gJHNlY1NRTCA9ICRhdXRoU1FMID0gJyc7DQoJaWYoJGNhdGVnb3J5KSB7DQoJCSRmb3B0 c1tdID0gYXJyYXkoJ2MnID0+ICRjYXRlZ29yeSk7DQoJCSRjYXRTUUwgPSBkb1F1b3RlKGpv aW4oIicsJyIsIGRvX2xpc3QoJGNhdGVnb3J5KSkpOw0KCQkkY2F0U1FMID0gIiBBTkQgKCBD YXRlZ29yeTEgSU4gKCIuJGNhdFNRTC4iKSBPUiBDYXRlZ29yeTIgSU4gKCIuJGNhdFNRTC4i KSApICI7DQoJfQ0KCWlmKCRzZWN0aW9uKSB7DQoJCSRmb3B0c1tdID0gYXJyYXkoJ3MnID0+ ICRzZWN0aW9uKTsNCgkJJHNlY1NRTCA9IGRvUXVvdGUoam9pbigiJywnIiwgZG9fbGlzdCgk c2VjdGlvbikpKTsNCgkJJHNlY1NRTCA9ICIgQU5EIFNlY3Rpb24gSU4gKCIuJHNlY1NRTC4i KSAiOw0KCX0NCglpZigkYXV0aG9yKSB7DQoJCSRmb3B0c1tdID0gYXJyYXkoJ2F1dGhvcicg PT4gaHRtbGVudGl0aWVzKGdwcygnYXV0aG9yJykpKTsNCgkJJGF1dGhTUUwgPSBkb1F1b3Rl KGpvaW4oIicsJyIsIGRvX2xpc3QoJGF1dGhvcikpKTsNCgkJJGF1dGhTUUwgPSAiIEFORCBB dXRob3JJRCBJTiAoIi4kYXV0aFNRTC4iKSAiOw0KCX0NCgkkc3RhdHVzID0gZG9fbGlzdCgk c3RhdHVzKTsNCgkkc3RhdGkgPSBhcnJheSgpOw0KCWZvcmVhY2ggKCRzdGF0dXMgYXMgJHN0 YXQpIHsNCgkJaWYgKGVtcHR5KCRzdGF0KSkgew0KCQkJY29udGludWU7DQoJCX0gZWxzZSBp ZiAoaXNfbnVtZXJpYygkc3RhdCkpIHsNCgkJCSRzdGF0aVtdID0gJHN0YXQ7DQoJCX0gZWxz ZSB7DQoJCQkkc3RhdGlbXSA9IGdldFN0YXR1c051bSgkc3RhdCk7DQoJCX0NCgl9DQoJJHN0 YXRpID0gIiBTdGF0dXMgSU4gKCIuZG9RdW90ZShqb2luKCInLCciLCAkc3RhdGkpKS4iKSI7 DQoNCgkkZXhwaXJlZCA9ICgkZXhwaXJlZCkgPyAkZXhwaXJlZCA6ICRwcmVmc1sncHVibGlz aF9leHBpcmVkX2FydGljbGVzJ107DQoJJGV4cGlyZWQgPSAoKCRleHBpcmVkKSA/ICcnIDog JyBBTkQgKG5vdygpIDw9IEV4cGlyZXMgT1IgRXhwaXJlcyA9ICcuTlVMTERBVEVUSU1FLicp Jyk7DQoJJGV2ZW50Y2xhc3NlcyA9IGRvX2xpc3QoJGV2ZW50Y2xhc3Nlcyk7DQoJJGhvbGlk YXlmbGFncyA9IGRvX2xpc3QoJGhvbGlkYXlmbGFncyk7DQoJJGxpbmtwb3N0ZWQgPSBkb19s aXN0KCRsaW5rcG9zdGVkKTsNCg0KCS8vIFdvcmsgb3V0IHRoZSBmaXJzdCBhbmQgbGFzdCBw b3N0cyB0byBkZXRlcm1pbmUgdGhlIHllYXIgcmFuZ2UNCgkkZWFybGllc3QgPSBzYWZlX3Jv dygndW5peF90aW1lc3RhbXAoUG9zdGVkKSBBUyB1UG9zdGVkJywgJ3RleHRwYXR0ZXJuJywg JHN0YXRpLigoJGNhdGVnb3J5KSA/ICRjYXRTUUwgOiAnJykuKCgkc2VjdGlvbikgPyAkc2Vj U1FMIDogJycpLigoJGF1dGhvcikgPyAkYXV0aFNRTCA6ICcnKS4nIE9SREVSIEJZIFBvc3Rl ZCBBU0MgTElNSVQgMCwgMScsICRkZWJ1Zyk7DQoJJGxhdGVzdCA9IHNhZmVfcm93KCd1bml4 X3RpbWVzdGFtcChMYXN0TW9kKSBBUyB1TGFzdE1vZCcsICd0ZXh0cGF0dGVybicsICRzdGF0 aS4oKCRjYXRlZ29yeSkgPyAkY2F0U1FMIDogJycpLigoJHNlY3Rpb24pID8gJHNlY1NRTCA6 ICcnKS4oKCRhdXRob3IpID8gJGF1dGhTUUwgOiAnJykuJyBBTkQgUG9zdGVkIDwgbm93KCkg T1JERVIgQlkgTGFzdE1vZCBERVNDIExJTUlUIDAsIDEnLCAkZGVidWcpOw0KCSR5ZWFyd2lk dGggPSBkb19saXN0KCR5ZWFyd2lkdGgpOw0KCWlmIChjb3VudCgkeWVhcndpZHRoKSA9PSAx KSAkeWVhcndpZHRoWzFdID0gJHllYXJ3aWR0aFswXTsNCgkkZWFybGllc3QgPSBkYXRlKCJZ Iiwgc3RydG90aW1lKCItIi4keWVhcndpZHRoWzBdLiIgeWVhciIsICggKGVtcHR5KCRlYXJs aWVzdCkpID8gdGltZSgpIDogJGVhcmxpZXN0Wyd1UG9zdGVkJ10pICkgKTsNCgkkbGF0ZXN0 ID0gZGF0ZSgiWSIsIHN0cnRvdGltZSgiKyIuJHllYXJ3aWR0aFsxXS4iIHllYXIiLCAoIChl bXB0eSgkbGF0ZXN0KSkgPyB0aW1lKCkgOiAkbGF0ZXN0Wyd1TGFzdE1vZCddKSApICk7DQoN CgkvLyBDaGVjayB0aGUgVVJMIGZvciBjdXJyZW50IGRhdGUgYW5kIGNhbGVuZGFyIHRhcmdl dCBpbmZvDQoJJGluY29taW5nX2NhbGlkID0gZ3BzKCdjYWxpZCcpOw0KCSRpbmNvbWluZ195 ZWFyID0gKGdwcygneScpIGFuZCBpc19udW1lcmljKGdwcygneScpKSkgPyAoaW50KWdwcygn eScpIDogJyc7DQoJJGluY29taW5nX21vbnRoID0gKGdwcygnbScpIGFuZCBpc19udW1lcmlj KGdwcygnbScpKSkgPyAoaW50KWdwcygnbScpIDogJyc7DQoJJGluY29taW5nX3dlZWsgPSAo Z3BzKCd3JykgYW5kIGlzX251bWVyaWMoZ3BzKCd3JykpKSA/IChpbnQpZ3BzKCd3JykgOiAn JzsNCg0KCWlmKCRzdGF0aWMpIHsgLy8gaWYgd2UncmUgc3RhdGljIHcvbyBhbnkgc3VwcGxp ZWQgdmFycywgdXNlIHRoZSBjdXJyZW50IGRhdGUNCgkJaWYoISR5ZWFyKSB7ICR5ZWFyID0g c2FmZV9zdHJmdGltZSgnJVknKTsgfQ0KCQlpZighJG1vbnRoKSB7ICRtb250aCA9IHNhZmVf c3RyZnRpbWUoJyVtJyk7IH0NCgl9IGVsc2UgeyAvLyBvdGhlcndpc2UgdXNlIGN1cnJlbnQg ZGF0ZSBvbmx5IGlmIHRoZXJlJ3Mgbm90aGluZyBlbHNlDQoJCWlmKCAkaWQgPT0gJGluY29t aW5nX2NhbGlkICkgeyAvLyB1c2UgaW5jb21pbmcNCgkJCSR5ZWFyID0gKCRpbmNvbWluZ195 ZWFyKSA/ICRpbmNvbWluZ195ZWFyIDogKCgkeWVhcikgPyAkeWVhciA6IHNhZmVfc3RyZnRp bWUoJyVZJykpOw0KCQkJJG1vbnRoID0gKCRpbmNvbWluZ19tb250aCkgPyAkaW5jb21pbmdf bW9udGggOiAoKCRtb250aCkgPyAkbW9udGggOiBzYWZlX3N0cmZ0aW1lKCclbScpKTsNCgkJ CS8vIElmIHdlZWsgaXMgdXNlZCwgYWRqdXN0IG1vbnRoIHNvIGl0IGVuY29tcGFzc2VzIHRo ZSBnaXZlbiB3ZWVrDQoJCQkkd2VlayA9ICRpbmNvbWluZ193ZWVrOw0KCQkJaWYgKCR3ZWVr KSB7DQoJCQkJJG1vbnRoID0gc2FmZV9zdHJmdGltZSgiJW0iLCBta3RpbWUgKDEsMSwxLDEs Nyokd2VlaywkeWVhcikpOyAvLyBHdWVzcyB0aGUgbW9udGggZnJvbSB0aGUgd2Vlaw0KCQkJ fQ0KCQl9IGVsc2UgeyAvLyB1c2UgY3VycmVudA0KCQkJaWYoISR5ZWFyKSB7ICR5ZWFyID0g c2FmZV9zdHJmdGltZSgnJVknKTsgfQ0KCQkJaWYoISRtb250aCkgeyAkbW9udGggPSBzYWZl X3N0cmZ0aW1lKCclbScpOyB9DQoJCQlpZigkd2VlaykgeyAkbW9udGggPSBzYWZlX3N0cmZ0 aW1lKCIlbSIsIG1rdGltZSAoMSwxLDEsMSw3KiR3ZWVrLCR5ZWFyKSk7IH0NCgkJfQ0KCX0N Cgkkc21kX2NhbF9pZCA9ICgkaW5jb21pbmdfY2FsaWQpID8gJGluY29taW5nX2NhbGlkIDog JGlkOw0KCSRzbWRfeWVhciA9ICR5ZWFyOyAkc21kX21vbnRoID0gJG1vbnRoOyAvLyAkc21k X3dlZWsgYW5kIHNtZF9kYXkgYXJlIHNldCBwZXIgZXZlbnQgbGF0ZXINCg0KCS8vIFRoZSB0 aW1lcyBpbiB0aGUgREIgYXJlIHN0b3JlZCB1c2luZyB0aGUgc2VydmVyJ3MgbG9jYWwgdGlt ZSwgc28gd2UgZG9uJ3QNCgkvLyB3YW50IHRvIGFkanVzdCBhbnl0aGluZyAoc2luY2UgbWt0 aW1lIHVzZXMgdGhlIHNlcnZlcidzIGxvY2FsIHRpbWUpLg0KCS8vVE9ETzogV29ycnkgYWJv dXQgZ210IC8gZHN0DQoJJHRzX2ZpcnN0ID0gbWt0aW1lKDAsIDAsIDAsICRtb250aCwgMSwg JHllYXIpOw0KCSR0c19sYXN0ID0gbWt0aW1lKDIzLCA1OSwgNTksICRtb250aCwgZGF0ZSgn dCcsJHRzX2ZpcnN0KSwgJHllYXIpOw0KDQoJJGV4dHJhc3FsID0gJGNhdFNRTCAuICRzZWNT UUwgLiAkYXV0aFNRTDsNCglzd2l0Y2goJHRpbWUpIHsNCgkJY2FzZSAiYW55IiA6IC8qIERv bid0IGNhcmUgYWJvdXQgZGF0ZSAqLyBicmVhazsNCgkJY2FzZSAiZnV0dXJlIiA6ICRleHRy YXNxbCAuPSAiIEFORCBQb3N0ZWQgPiBDVVJEQVRFKCkiOyBicmVhazsNCgkJZGVmYXVsdCA6 ICRleHRyYXNxbCAuPSAiIEFORCBQb3N0ZWQgPCBDVVJEQVRFKCkiOyBicmVhazsgLy8gVGhl IHBhc3QNCgl9DQoNCgkvLyBIb2xpZGF5cyBhcmUgZ2xvYmFsICdleGNsdXNpb25zJywgZWl0 aGVyIGRlZmluZWQgZGlyZWN0bHkgb3IgaW4gYSA8dHhwOnZhcmlhYmxlIC8+DQoJJGhvbGlk YXlzID0gZG9fbGlzdCgkaG9saWRheXMpOw0KCSR0eHBob2xzID0gZG9fbGlzdCgkaG9saWRh eXNbMF0sICI6Iik7DQoJaWYgKCR0eHBob2xzWzBdID09ICJ0eHB2YXIiKSB7DQoJCSRob2xp ZGF5cyA9IGRvX2xpc3QoJHZhcmlhYmxlWyR0eHBob2xzWzFdXSk7DQoJfQ0KCS8vIEZvcmNl IGVhY2ggaG9saWRheSB0byBhIGtub3duIGZvcm1hdC4gSG9saWRheXMgd2l0aG91dCB5ZWFy cyB1c2UgY3VycmVudCB5ZWFyDQoJZm9yZWFjaCAoJGhvbGlkYXlzIGFzICRrZXkgPT4gJHZh bCkgew0KCQlpZiAoZW1wdHkoJHZhbCkpIGNvbnRpbnVlOw0KCQkkbnVtcGFydHMgPSBwcmVn X21hdGNoKCcvXihbXGRcd10rKS4/KFtcZFx3XSspLj8oW1xkXHddKyk/JC8nLCAkdmFsLCAk cGFydHMpOw0KDQoJCWlmICgkbnVtcGFydHMpIHsNCgkJCWlmIChjb3VudCgkcGFydHMpID09 IDMpIHsNCgkJCQkkcGFydHNbM10gPSAkeWVhcjsNCiAgICAgICAgIH0NCgkJCSR2YWwgPSBz dHJfcGFkKCRwYXJ0c1sxXSwgMiwgJzAnLCBTVFJfUEFEX0xFRlQpLictJy5zdHJfcGFkKCRw YXJ0c1syXSwgMiwgJzAnLCBTVFJfUEFEX0xFRlQpLictJy4kcGFydHNbM107DQoJCX0NCgkJ JGhvbGlkYXlzWyRrZXldID0gZGF0ZSgiZC1tLVkiLCBzdHJ0b3RpbWUoJHZhbCkpOw0KCX0N Cg0KCWlmICgkZGVidWcgPiAwICYmICFlbXB0eSgkaG9saWRheXMpICYmICRob2xpZGF5c1sw XSAhPSAnJykgew0KCQllY2hvICIrKyBIT0xJREFZUyArKyAiOw0KCQlkbXAoJGhvbGlkYXlz KTsNCgl9DQoNCgkvLyBHZXQgYWxsIG1hdGNoaW5nIGFydGljbGVzIGluIChhbmQgYmVmb3Jl KSB0aGlzIG1vbnRoDQoJJGV2ZW50cyA9IGFycmF5KCk7DQoJJHNxbDIgPSAkc3RhdGkgLiAi IEhBVklORyB1UG9zdGVkIDw9ICIuJHRzX2xhc3QgLiAkZXhwaXJlZCAuICRleHRyYXNxbCAu IiBPUkRFUiBCWSBQb3N0ZWQgQVNDIjsNCgkkZ3JhYkNvbHMgPSAnKiwgdW5peF90aW1lc3Rh bXAoUG9zdGVkKSBhcyB1UG9zdGVkLCB1bml4X3RpbWVzdGFtcChMYXN0TW9kKSBhcyB1TGFz dE1vZCwgdW5peF90aW1lc3RhbXAoRXhwaXJlcykgYXMgdUV4cGlyZXMnOw0KCSRldmxpc3Qg PSBzYWZlX3Jvd3MoJGdyYWJDb2xzLCAndGV4dHBhdHRlcm4nLCAkc3FsMiwgJGRlYnVnKTsN Cg0KCS8vIElmIGFueSBldmVudHMgcmVjdXIgYW5kIGZhbGwgd2l0aGluIHRoZSBjdXJyZW50 IG1vbnRoLCBhZGQgdGhvc2UgYXMgd2VsbA0KCS8vIElmIGFueSBkYXRlcyBhcmUgdG8gYmUg ZXhjbHVkZWQsIHRoZSBlbnRyeSBpcyBza2lwcGVkIFVOTEVTUyBzaG93c2tpcHBlZCBpbmRp Y2F0ZXMgb3RoZXJ3aXNlDQoJZm9yZWFjaCAoJGV2bGlzdCBhcyAkcm93KSB7DQoJCSRpZHgg PSAwOyAvLyBJbiBjYXNlIHRoZSAxc3QgZGF5IG9mIHRoZSBtb250aCBpcyBhIGNvbnRpbnVh dGlvbiBvZiBhbiBldmVudCBmcm9tIHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzIG1vbnRoDQoJ CSRzdGFydCA9ICRyb3dbJ3VQb3N0ZWQnXTsNCgkJJHN0YXJ0X2RhdGUgPSBkYXRlKCJZLW0t ZCIsICRzdGFydCk7IC8vIEZvciByZWN1cnJpbmcvc3Bhbm5lZCBldmVudHMgb24gYSBtaW5p Y2FsLCB0aGlzIGlzIHRoZSBldmVudCB0aGUgY2VsbCBsaW5rcyB0bw0KCQkkcmVhbF9lbmQg PSAkcm93Wyd1RXhwaXJlcyddOw0KCQkkZW5kID0gKCRyZWFsX2VuZCAhPSAwICYmICRyZWFs X2VuZCA8ICR0c19sYXN0KSA/ICRyZWFsX2VuZCA6ICR0c19sYXN0Ow0KCQkkc21kX2NhbF9m bGFnID0gYXJyYXkoKTsNCg0KCQlpZiAoJGRlYnVnID4gMSkgew0KCQkJZWNobyAnKysgRVZF TlQgU1RBUlQgLy8gRU5EIC8vIFJFQUwgRU5EICsrJzsNCgkJCWRtcCgkcm93WydUaXRsZSdd KTsNCgkJCWRtcChkYXRlKCdkLW0tWSBIOmk6cycsICRzdGFydCkgLicgLy8gJy4gZGF0ZSgn ZC1tLVkgSDppOnMnLCAkZW5kKSAuJyAvLyAnLiBkYXRlKCdkLW0tWSBIOmk6cycsICRyZWFs X2VuZCkpOw0KCQkJaWYgKCRkZWJ1ZyA+IDIpIHsNCgkJCQlkbXAoJHJvdyk7DQoJCQl9DQoJ CX0NCg0KCQkkbXVsdGkgPSAoJHJvd1sndUV4cGlyZXMnXSA+ICRyb3dbJ3VQb3N0ZWQnXSAm JiAkcm93Wyd1RXhwaXJlcyddID4gJHRzX2ZpcnN0KSA/IHRydWUgOiBmYWxzZTsNCgkJJHJl Y3VyID0gKGVtcHR5KCRyb3dbJHN0ZXBmaWVsZF0pKSA/IGZhbHNlIDogdHJ1ZTsNCgkJJGhv bF9oaXQgPSBpbl9hcnJheShkYXRlKCJkLW0tWSIsICRzdGFydCksICRob2xpZGF5cyk7DQoJ CSRldmNsYXNzZXMgPSBhcnJheSgpOw0KCQlmb3JlYWNoICgkZXZlbnRjbGFzc2VzIGFzICRl dmNscykgew0KCQkJc3dpdGNoICgkZXZjbHMpIHsNCgkJCQljYXNlICIiOg0KCQkJCQlicmVh azsNCgkJCQljYXNlICJnY2F0IjoNCgkJCQkJaWYgKGlzc2V0KCRwcmV0ZXh0WydjJ10pICYm ICFlbXB0eSgkcHJldGV4dFsnYyddKSkgew0KCQkJCQkJJGV2Y2xhc3Nlc1tdID0gJGV2Y2xh c3NwcmVmaXguJHByZXRleHRbJ2MnXTsNCgkJCQkJfQ0KCQkJCQlicmVhazsNCgkJCQljYXNl ICJjYXRlZ29yeSI6DQoJCQkJCWlmIChpc3NldCgkcm93WydDYXRlZ29yeTEnXSkgJiYgIWVt cHR5KCRyb3dbJ0NhdGVnb3J5MSddKSkgew0KCQkJCQkJJGV2Y2xhc3Nlc1tdID0gJGV2Y2xh c3NwcmVmaXguJHJvd1snQ2F0ZWdvcnkxJ107DQoJCQkJCX0NCgkJCQkJaWYgKGlzc2V0KCRy b3dbJ0NhdGVnb3J5MiddKSAmJiAhZW1wdHkoJHJvd1snQ2F0ZWdvcnkyJ10pKSB7DQoJCQkJ CQkkZXZjbGFzc2VzW10gPSAkZXZjbGFzc3ByZWZpeC4kcm93WydDYXRlZ29yeTInXTsNCgkJ CQkJfQ0KCQkJCQlicmVhazsNCgkJCQljYXNlICJzZWN0aW9uIjoNCgkJCQkJaWYgKGlzc2V0 KCRwcmV0ZXh0WydzJ10pICYmICFlbXB0eSgkcHJldGV4dFsncyddKSkgew0KCQkJCQkJJGV2 Y2xhc3Nlc1tdID0gJGV2Y2xhc3NwcmVmaXguJHByZXRleHRbJ3MnXTsNCgkJCQkJfQ0KCQkJ CQlicmVhazsNCgkJCQljYXNlICJhdXRob3IiOg0KCQkJCQlpZiAoaXNzZXQoJHByZXRleHRb J2F1dGhvciddKSAmJiAhZW1wdHkoJHByZXRleHRbJ2F1dGhvciddKSkgew0KCQkJCQkJJGV2 Y2xhc3Nlc1tdID0gJGV2Y2xhc3NwcmVmaXguJHByZXRleHRbJ2F1dGhvciddOw0KCQkJCQl9 DQoJCQkJCWJyZWFrOw0KCQkJCWRlZmF1bHQ6DQoJCQkJCWlmIChpc3NldCgkcm93WyRldmNs c10pICYmICFlbXB0eSgkcm93WyRldmNsc10pKSB7DQoJCQkJCQkkZXZjbGFzc2VzW10gPSAk ZXZjbGFzc3ByZWZpeC4kcm93WyRldmNsc107DQoJCQkJCX0NCgkJCQkJYnJlYWs7DQoJCQl9 DQoJCX0NCgkJJGV2Y2xhc3NlcyA9ICgkZXZjbGFzc2VzKSA/ICcgJy4gam9pbignICcsICRl dmNsYXNzZXMpIDogJyc7DQoJCSRpZ25vcmUgPSBhcnJheSgpOw0KDQoJCWlmICgkZGVidWcg PiAxICYmICRldmNsYXNzZXMpIHsNCgkJCWVjaG8gJysrIEVWRU5UIENMQVNTRVMgKysnOw0K CQkJZG1wKCRldmNsYXNzZXMpOw0KCQl9DQoNCgkJLy8gRXZlbnRzIHRoYXQgc3RhcnQgdGhp cyBtb250aA0KCQlpZiAoJHN0YXJ0IDwgJGVuZCAmJiAkc3RhcnQgPiAkdHNfZmlyc3QpIHsN CgkJCXBvcHVsYXRlQXJ0aWNsZURhdGEoJHJvdyk7DQoJCQkvLyBzdGFydCBvZiBhIG11bHRp IHRoYXQgbWF5IG9yIG1heSBub3QgYmUgY2FuY2VsbGVkIGR1ZSB0byBob2xpZGF5cw0KCQkJ JGZsYWcgPSAoJHNob3dzcGFubmVkICYmICRtdWx0aSAmJiAhJHJlY3VyKSA/ICdtdWx0aWZp cnN0JyAuICgoICRob2xfaGl0ICYmICFpbl9hcnJheSgnbXVsdGknLCRob2xpZGF5ZmxhZ3Mp ICkgPyAnIGNhbmNlbCBob2xzJyA6ICcnICkgOiAnJzsNCgkJCS8vIGEgc3RhbmRhcmQgZXZl bnQgdGhhdCBtYXkgb3IgbWF5IG5vdCBiZSBjYW5jZWxsZWQgZHVlIHRvIGhvbGlkYXlzDQoJ CQkkZmxhZyA9ICgkZmxhZykgPyAkZmxhZyA6ICgoICRob2xfaGl0ICYmICFpbl9hcnJheSgn ZXZlbnQnLCRob2xpZGF5ZmxhZ3MpICkgPyAnZXZlbnQgY2FuY2VsIGhvbHMnIDogJ2V2ZW50 JyApOw0KCQkJJHNtZF9jYWxfZmxhZyA9ICRmbGFnID0gZXhwbG9kZSgnICcsICRmbGFnKTsN CgkJCWZvcmVhY2ggKCRmbGFnIGFzICRpZHggPT4gJGl0ZW0pIHsNCgkJCQkkZmxhZ1skaWR4 XSA9ICRjbGFzc3ByZWZpeC4kaXRlbTsNCgkJCX0NCgkJCSRmbGFnID0gam9pbiAoJyAnLCAk ZmxhZyk7DQoNCgkJCSRpZHggPSAoaW50KXNhZmVfc3RyZnRpbWUoJyVkJywgJHN0YXJ0LCAk Z210LCAkbGFuZyk7DQoJCQkkc21kX2RheSA9ICRpZHg7DQoJCQkkc21kX3dlZWsgPSBzYWZl X3N0cmZ0aW1lKCclVicsICRzdGFydCwgJGdtdCwgJGxhbmcpOw0KCQkJJG9wID0gKCR0aGlu ZykgPyBwYXJzZSgkdGhpbmcpIDogKCgkZm9ybSkgPyBwYXJzZV9mb3JtKCRmb3JtKSA6ICgo JHNpemU9PSJzbWFsbCIpID8gJycgOiBocmVmKCRyb3dbJ1RpdGxlJ10sIHBlcm1saW5rdXJs KCRyb3cpLCAnIHRpdGxlPSInLiRyb3dbJ1RpdGxlJ10uJyInKSkgKTsNCgkJCSRldmVudHNb JGlkeF1bXSA9IGFycmF5KCdldicgPT4gJG9wLCAndHlwZScgPT4gKCgkZmxhZykgPyAkZmxh ZyA6ICcnKS4kZXZjbGFzc2VzLCAncG9zdGVkJyA9PiAkc3RhcnRfZGF0ZSk7DQoJCQkkc21k X2NhbF9mbGFnID0gYXJyYXkoKTsNCgkJfQ0KDQoJCS8vIEdlbmVyYXRlIGEgc2tpcCBhcnJh eSBmb3IgdGhpcyBldmVudA0KCQlpZiAoJHNraXBmaWVsZCAmJiAkcm93WyRza2lwZmllbGRd ICE9ICcnKSB7DQoJCQkkaWdub3JlID0gZG9fbGlzdCgkcm93WyRza2lwZmllbGRdKTsNCgkJ CWZvcmVhY2ggKCRpZ25vcmUgYXMgJGtleSA9PiAkdmFsKSB7DQoJCQkJJGlnbm9yZVska2V5 XSA9IGRhdGUoImQtbS1ZIiwgc3RydG90aW1lKCR2YWwpKTsgLy8gRm9yY2UgZWFjaCBkYXRl IHRvIGEga25vd24gZm9ybWF0DQoJCQl9DQoJCX0NCgkJLy8gQ2FsY3VsYXRlIHRoZSBkYXRl IG9mZnNldHMgYW5kIGNoZWNrIHJlY3VycmluZyBldmVudHMgdGhhdCBmYWxsIHdpdGhpbiB0 aGUgbW9udGggb2YgaW50ZXJlc3QNCgkJaWYgKCRzdGVwZmllbGQgJiYgJHJvd1skc3RlcGZp ZWxkXSAhPSAnJykgew0KCQkJJGZyZXEgPSBkb19saXN0KCRyb3dbJHN0ZXBmaWVsZF0pOw0K CQkJZm9yZWFjaCAoJGZyZXEgYXMgJGludGVydmFsKSB7DQoJCQkJJHRzX2N1cnIgPSAkc3Rh cnQ7DQoJCQkJd2hpbGUgKCR0c19jdXJyIDwgJGVuZCkgew0KCQkJCQlpZiAoKCR0c19jdXJy ID0gc3RydG90aW1lKCRpbnRlcnZhbCwgJHRzX2N1cnIpKSA9PT0gZmFsc2UpIHsNCgkJCQkJ CWJyZWFrOw0KCQkJCQl9IGVsc2Ugew0KCQkJCQkJaWYgKCR0c19jdXJyIDwgJGVuZCAmJiAk dHNfY3VyciA+ICR0c19maXJzdCkgew0KCQkJCQkJCS8vIEEgcmVjdXJyaW5nIGV2ZW50LiBD aGVjayBpdCBpc24ndCBhIGhvbGlkYXkgb3IgdG8gYmUgaWdub3JlZA0KCQkJCQkJCXBvcHVs YXRlQXJ0aWNsZURhdGEoJHJvdyk7DQoJCQkJCQkJJG9wID0gJyc7DQoJCQkJCQkJJGlkeCA9 IChpbnQpc2FmZV9zdHJmdGltZSgnJWQnLCAkdHNfY3VyciwgJGdtdCwgJGxhbmcpOw0KCQkJ CQkJCSRzbWRfY2FsX2ZsYWdbXSA9ICdyZWN1cic7DQoJCQkJCQkJJHNob3dfbWUgPSAhaW5f YXJyYXkoZGF0ZSgiZC1tLVkiLCAkdHNfY3VyciksICRpZ25vcmUpOw0KCQkJCQkJCSRob2xf aGl0ID0gaW5fYXJyYXkoZGF0ZSgiZC1tLVkiLCAkdHNfY3VyciksICRob2xpZGF5cyk7DQoJ CQkJCQkJJHNob3dfaG9sID0gKCRob2xfaGl0ICYmICFpbl9hcnJheSgncmVjdXInLCRob2xp ZGF5ZmxhZ3MpICkgPyBmYWxzZSA6IHRydWU7DQoJCQkJCQkJaWYgKCAhJHNob3dfbWUgfHwg ISRzaG93X2hvbCApIHsNCgkJCQkJCQkJJHNtZF9jYWxfZmxhZ1tdID0gJ2NhbmNlbCc7DQoJ CQkJCQkJfQ0KCQkJCQkJCWlmICgkaG9sX2hpdCkgew0KCQkJCQkJCQkkc21kX2NhbF9mbGFn W10gPSAnaG9scyc7DQoJCQkJCQkJfQ0KCQkJCQkJCS8vIENyZWF0ZSB0aGUgZXZlbnRzIHRo YXQgYXBwZWFyIGluIHRoZSBjZWxsIGJ1dCBvbmx5IGlmIHRoZXkndmUgbm90IGFwcGVhcmVk IGJlZm9yZSwgb3IgYXJlIHRvIGJlIGlnbm9yZWQNCgkJCQkJCQlpZiAoKCRzaG93X21lICYm ICRzaG93X2hvbCkgfHwgJHNob3dza2lwcGVkKSB7DQoJCQkJCQkJCSRzbWRfZGF5ID0gJGlk eDsNCgkJCQkJCQkJJHNtZF93ZWVrID0gc2FmZV9zdHJmdGltZSgnJVYnLCAkdHNfY3Vyciwg JGdtdCwgJGxhbmcpOw0KCQkJCQkJCQkkb3AgPSAoJHRoaW5nKSA/IHBhcnNlKCR0aGluZykg OiAoKCRmb3JtKSA/IHBhcnNlX2Zvcm0oJGZvcm0pIDogKCgkc2l6ZT09InNtYWxsIikgPyAn JyA6IGhyZWYoJHJvd1snVGl0bGUnXSwgcGVybWxpbmt1cmwoJHJvdyksICcgdGl0bGU9Iicu JHJvd1snVGl0bGUnXS4nIicpKSApOw0KCQkJCQkJCX0NCgkJCQkJCQkkdXNlZCA9IGFycmF5 KCk7DQoJCQkJCQkJaWYgKGlzc2V0KCRldmVudHNbJGlkeF0pICYmICRldmVudHNbJGlkeF0g IT0gTlVMTCkgew0KCQkJCQkJCQlmb3JlYWNoICgkZXZlbnRzWyRpZHhdIGFzICRldikgew0K CQkJCQkJCQkJJHVzZWRbXSA9ICRldlsnZXYnXTsNCgkJCQkJCQkJfQ0KCQkJCQkJCX0NCgkJ CQkJCQlpZiAoaXNzZXQoJGV2ZW50c1skaWR4XSkgJiYgJGV2ZW50c1skaWR4XSA9PSBOVUxM IHx8ICFpbl9hcnJheSgkb3AsICR1c2VkKSkgew0KCQkJCQkJCQkkZXZlbnRzWyRpZHhdW10g PSBhcnJheSgnZXYnID0+ICRvcCwgJ3R5cGUnID0+ICRjbGFzc3ByZWZpeC4ncmVjdXInLiAo KCRzaG93X21lICYmICRzaG93X2hvbCkgPyAnJyA6ICcgJy4kY2xhc3NwcmVmaXguJ2NhbmNl bCcpLiRldmNsYXNzZXMsICdwb3N0ZWQnID0+ICRzdGFydF9kYXRlKTsNCgkJCQkJCQl9DQoJ CQkJCQkJJHNtZF9jYWxfZmxhZyA9IGFycmF5KCk7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9 DQoJCQl9DQoJCX0gZWxzZSBpZiAoJHNob3dzcGFubmVkICYmICRtdWx0aSkgew0KCQkJLy8g Tm9uLXJlY3VycmluZyBldmVudHMgbWF5IHNwYW4gbW9yZSB0aGFuIG9uZSBkYXRlIGJ1dCB0 aGV5IG11c3Qgc3RpbGwgcmVzcGVjdCBpZ25vcmVkIGRhdGVzIGFuZCBob2xpZGF5cw0KCQkJ cG9wdWxhdGVBcnRpY2xlRGF0YSgkcm93KTsNCgkJCSRsYXN0ZGF5ID0gKGludClzYWZlX3N0 cmZ0aW1lKCclZCcsICRlbmQsICRnbXQsICRsYW5nKTsNCgkJCSRyZWFsX2xhc3RkYXkgPSAo aW50KXNhZmVfc3RyZnRpbWUoJyVkJywgJHJlYWxfZW5kLCAkZ210LCAkbGFuZyk7DQoJCQl3 aGlsZSAoKyskaWR4IDw9ICRsYXN0ZGF5KSB7DQoJCQkJJG9wID0gJyc7DQoJCQkJJG11bHRp ZmxhZyA9ICgkaWR4PT0kcmVhbF9sYXN0ZGF5KSA/ICdtdWx0aWxhc3QnIDogKCgkaWR4PT0x KSA/ICdtdWx0aXByZXYnIDogJ211bHRpJyk7DQoJCQkJJHNtZF9jYWxfZmxhZ1tdID0gJG11 bHRpZmxhZzsNCgkJCQkkdGhpc2RhdGUgPSBta3RpbWUoMCwgMCwgMCwgJG1vbnRoLCAkaWR4 LCAkeWVhcik7DQoJCQkJJHNob3dfbWUgPSAhaW5fYXJyYXkoZGF0ZSgiZC1tLVkiLCAkdGhp c2RhdGUpLCAkaWdub3JlKTsNCgkJCQkkaG9sX2hpdCA9IGluX2FycmF5KGRhdGUoImQtbS1Z IiwgJHRoaXNkYXRlKSwgJGhvbGlkYXlzKTsNCgkJCQkkc2hvd19ob2wgPSAoJGhvbF9oaXQg JiYgIWluX2FycmF5KCdtdWx0aScsJGhvbGlkYXlmbGFncykgKSA/IGZhbHNlIDogdHJ1ZTsN CgkJCQlpZiAoICEkc2hvd19tZSB8fCAhJHNob3dfaG9sICkgew0KCQkJCQkkc21kX2NhbF9m bGFnW10gPSAnY2FuY2VsJzsNCgkJCQl9DQoJCQkJaWYgKCRob2xfaGl0KSB7DQoJCQkJCSRz bWRfY2FsX2ZsYWdbXSA9ICdob2xzJzsNCgkJCQl9DQoJCQkJaWYgKCAoJHNob3dfbWUgJiYg JHNob3dfaG9sKSB8fCAkc2hvd3NraXBwZWQpIHsNCgkJCQkJJHNtZF9kYXkgPSAkaWR4Ow0K CQkJCQkkc21kX3dlZWsgPSBzYWZlX3N0cmZ0aW1lKCclVicsICR0aGlzZGF0ZSwgJGdtdCwg JGxhbmcpOw0KCQkJCQkkb3AgPSAoJHNwYW5mb3JtKSA/IHBhcnNlX2Zvcm0oJHNwYW5mb3Jt KSA6ICgoJHRoaW5nKSA/IHBhcnNlKCR0aGluZykgOiAoKCRzaXplPT0ic21hbGwiKSA/ICcn IDogaHJlZignJnJhcnI7JywgcGVybWxpbmt1cmwoJHJvdyksICcgdGl0bGU9IicuJHJvd1sn VGl0bGUnXS4nIicpKSApOw0KCQkJCX0NCgkJCQkkZXZlbnRzWyRpZHhdW10gPSBhcnJheSgn ZXYnID0+ICRvcCwgJ3R5cGUnID0+ICRjbGFzc3ByZWZpeC4kbXVsdGlmbGFnLiAoKCRzaG93 X21lICYmICRzaG93X2hvbCkgPyAnJyA6ICcgJy4kY2xhc3NwcmVmaXguJ2NhbmNlbCcpLiRl dmNsYXNzZXMsICdwb3N0ZWQnID0+ICRzdGFydF9kYXRlKTsNCgkJCQkkc21kX2NhbF9mbGFn ID0gYXJyYXkoKTsNCgkJCX0NCgkJfQ0KCX0NCg0KCS8vIEdlbmVyYXRlIHRoZSBjYWxlbmRh cg0KCWlmKCAkc2l6ZSA9PSAic21hbGwiICkgew0KCQkkY2FsZW5kYXIgPSBuZXcgU01EX1Nt YWxsX0NhbGVuZGFyKCR5ZWFyLCAkbW9udGgsICRldmVudHMsICRzZWN0aW9uLCAkY2F0ZWdv cnkpOw0KCX0gZWxzZSB7DQoJCSRjYWxlbmRhciA9IG5ldyBTTURfQ2FsZW5kYXIoJHllYXIs ICRtb250aCwgJGV2ZW50cyk7DQoJfQ0KCSRjYWxlbmRhci0+c2V0R01UKCRnbXQpOw0KCSRj YWxlbmRhci0+c2V0TGFuZygkbGFuZyk7DQoJJGNhbGVuZGFyLT5zZXRDbGFzc0xldmVscygk Y2xldnMpOw0KCSRjYWxlbmRhci0+c2V0Q2xhc3NQcmVmaXgoJGNsYXNzcHJlZml4KTsNCgkk Y2FsZW5kYXItPnNldEV2ZW50UHJlZml4KCRldmNsYXNzcHJlZml4KTsNCgkkY2FsZW5kYXIt PnNldEV2ZW50V3JhcHRhZygkZXZlbnR3cmFwdGFnKTsNCgkkY2FsZW5kYXItPnNldE1ZV3Jh cHRhZygkbXl3cmFwdGFnKTsNCgkkY2FsZW5kYXItPnNldFRhYmxlSUQoJGlkKTsNCgkkY2Fs ZW5kYXItPnNldFRhYmxlQ2xhc3MoJGNsYXNzKTsNCgkkY2FsZW5kYXItPnNldFJvd0NsYXNz KCRyb3djbGFzcyk7DQoJJGNhbGVuZGFyLT5zZXRDZWxsQ2xhc3MoJGNlbGxjbGFzcyk7DQoJ JGNhbGVuZGFyLT5zZXRFbXB0eUNsYXNzKCRlbXB0eWNsYXNzKTsNCgkkY2FsZW5kYXItPnNl dElTT1dlZWtDbGFzcygkaXNvd2Vla2NsYXNzKTsNCgkkY2FsZW5kYXItPnNldE5hdkNsYXNz KCRuYXZwcmV2Y2xhc3MsJG5hdm5leHRjbGFzcyk7DQoJJGNhbGVuZGFyLT5zZXRNWUNsYXNz KCRteWNsYXNzKTsNCgkkY2FsZW5kYXItPnNldE5hbWVGb3JtYXQoJGRheWZvcm1hdCwgImQi KTsNCgkkY2FsZW5kYXItPnNldE5hbWVGb3JtYXQoJG1vbnRoZm9ybWF0LCAibSIpOw0KCSRj YWxlbmRhci0+c2V0U2hvd0lTT1dlZWsoJGlzb3dlZWtzKTsNCgkkY2FsZW5kYXItPnNldEVZ ZWFyKCRlYXJsaWVzdCk7DQoJJGNhbGVuZGFyLT5zZXRMWWVhcigkbGF0ZXN0KTsNCgkkY2Fs ZW5kYXItPnNldEZpbHRlck9wdHMoJGZvcHRzKTsNCgkkY2FsZW5kYXItPnNldEhvbGlkYXlz KCRob2xpZGF5cyk7DQoJJGNhbGVuZGFyLT5zZXRTZWxlY3RvcnMoZG9fbGlzdCgkc2VsZWN0 KSwgJHNlbGVjdGJ0bik7DQoJJGNhbGVuZGFyLT5zZXRGaXJzdERheU9mV2VlaygkZmlyc3Rk YXkpOw0KCSRjYWxlbmRhci0+c2V0TGlua1Bvc3RlZCgkbGlua3Bvc3RlZCk7DQoNCglyZXR1 cm4gJGNhbGVuZGFyLT5kaXNwbGF5KCRzdGF0aWMsICRmdXR1cmUpOw0KfQ0KDQpjbGFzcyBT TURfQ2FsZW5kYXIgZXh0ZW5kcyBTTURfUmF3X0NhbGVuZGFyIHsNCgkvLyBPdmVycmlkZSBD b25zdHJ1Y3Rvcg0KCS8vIFBlcm1pdHMgbXVsdGlwbGUgZXZlbnRzIHRvIHNob3cgcGVyIGRh eQ0KCWZ1bmN0aW9uIFNNRF9DYWxlbmRhcigkeWVhciwkbW9udGgsJGV2ZW50cykgew0KCQkk dGhpcy0+ZXZlbnRzID0gJGV2ZW50czsNCgkJJHRoaXMtPlNNRF9SYXdfQ2FsZW5kYXIoJHll YXIsJG1vbnRoKTsNCgl9DQoNCgkvLyBPdmVycmlkZSBkc3BEYXlDZWxsIHRvIGRpc3BsYXkg c3R1ZmYgcmlnaHQNCglmdW5jdGlvbiBkc3BEYXlDZWxsKCR0aGVkYXkpIHsNCgkJJGNlbGxj bGFzcyA9ICR0aGlzLT5nZXRDZWxsQ2xhc3MoKTsNCgkJJGhhc2FydGljbGUgPSBpc3NldCgk dGhpcy0+ZXZlbnRzWyR0aGVkYXldKTsNCgkJJHRkY2xhc3MgPSAkY2VsbGNsYXNzIC4gKCgk aGFzYXJ0aWNsZSkgPyAnICcuJHRoaXMtPmNsYXNzcHJlZml4LidldmVudCcgOiAnJykNCgkJ CQkuICgoaW5fYXJyYXkoIGRhdGUoJ2QtbS1ZJywgbWt0aW1lKCAwLCAwLCAwLCAkdGhpcy0+ Z2V0TW9udGgoKSwgJHRoZWRheSwgJHRoaXMtPmdldFllYXIoKSkgKSwgJHRoaXMtPmhvbGlk YXlzKSkgPyAnICcuJHRoaXMtPmNsYXNzcHJlZml4Lidob2xzJyA6ICcnKTsNCgkJJHJ1bm5p bmdjbGFzcyA9IChpbl9hcnJheSgiY2VsbCIsICR0aGlzLT5jbGFzc2xldmVscykgfHwgaW5f YXJyYXkoImNlbGxwbHVzIiwgJHRoaXMtPmNsYXNzbGV2ZWxzKSkgPyBleHBsb2RlKCcgJywg JHRkY2xhc3MpIDogYXJyYXkoKTsNCgkJaWYoJHRoaXMtPnllYXIgPT0gZGF0ZSgnWScsdGlt ZSgpK3R6X29mZnNldCgpICkgYW5kICR0aGlzLT5tb250aCA9PSBkYXRlKCduJyx0aW1lKCkr dHpfb2Zmc2V0KCkgKSBhbmQgJHRoZWRheSA9PSBkYXRlKCdqJyx0aW1lKCkrdHpfb2Zmc2V0 KCkpICkgew0KCQkJJHJ1bm5pbmdjbGFzc1tdID0gJHRoaXMtPmNsYXNzcHJlZml4Lid0b2Rh eSc7DQoJCX0NCg0KCQkkb3V0W10gPSBoZWQoJHRoZWRheSw0KTsNCgkJaWYoIGlzc2V0KCR0 aGlzLT5ldmVudHNbJHRoZWRheV0pICkgew0KCQkJJGRheXNfZXZlbnRzID0gJHRoaXMtPmV2 ZW50c1skdGhlZGF5XTsNCgkJCWZvcmVhY2goJGRheXNfZXZlbnRzIGFzICRldikgew0KCQkJ CSRldmNsYXNzID0gdHJpbSgkZXZbJ3R5cGUnXSk7DQoJCQkJaWYgKGluX2FycmF5KCJjZWxs cGx1cyIsICR0aGlzLT5jbGFzc2xldmVscykpIHsNCgkJCQkJZm9yZWFjaCAoZXhwbG9kZSgn ICcsICRldmNsYXNzKSBhcyAkZXZjKSB7DQoJCQkJCQkkcnVubmluZ2NsYXNzW109ICRldmM7 DQoJCQkJCX0NCgkJCQl9DQoJCQkJJG91dFtdID0gKCR0aGlzLT5ldndyYXB0YWcpID8gdGFn KCRldlsnZXYnXSwgJHRoaXMtPmV2d3JhcHRhZywgKCgkZXZjbGFzcyAmJiBpbl9hcnJheSgi ZXZlbnQiLCAkdGhpcy0+Y2xhc3NsZXZlbHMpKSA/ICcgY2xhc3M9IicuJGV2Y2xhc3MuJyIn IDogJycpKSA6ICRldlsnZXYnXTsNCgkJCX0NCgkJfQ0KCQkkcnVubmluZ2NsYXNzID0gYXJy YXlfdW5pcXVlKCRydW5uaW5nY2xhc3MpOw0KDQoJCS8vIEFtYWxnYW1hdGUgdGhlIGV2ZW50 LWxldmVsIGNsYXNzZXMgYW5kIGNlbGwtbGV2ZWwgY2xhc3NlcywgaWYgcmVxdWlyZWQNCgkJ cmV0dXJuIGRvVGFnKGpvaW4oJycsJG91dCksJ3RkJyxqb2luKCcgJywkcnVubmluZ2NsYXNz KSk7DQoJfQ0KDQoJZnVuY3Rpb24gZGlzcGxheSgkc3RhdGljPWZhbHNlLCAkZnV0dXJlPWZh bHNlKSB7DQoJCSRpZCA9ICgkdGhpcy0+dGFibGVJRCkgPyAnIGlkPSInLiR0aGlzLT50YWJs ZUlELiciJyA6ICcnOw0KCQkkY1tdID0gJHRoaXMtPmRzcEhlYWRlcigkc3RhdGljLCAkZnV0 dXJlKTsNCgkJJGNbXSA9ICR0aGlzLT5kc3BEYXlOYW1lcygpOw0KCQkkY1tdID0gJHRoaXMt PmRzcERheUNlbGxzKCk7DQoNCgkJcmV0dXJuIGRvVGFnKGpvaW4oJycsJGMpLCd0YWJsZScs JHRoaXMtPnRhYmxlY2xhc3MsJGlkKTsNCgl9DQoNCglmdW5jdGlvbiBkc3BIZWFkZXIoJHN0 YXRpYywgJGZ1dHVyZSkgew0KCQkkY3VycnlyID0gJHRoaXMtPmdldFllYXIoKTsNCgkJJGN1 cnJtbyA9ICR0aGlzLT5nZXRNb250aCgpOw0KCQkkbmF2cHJldmNsYXNzID0gJHRoaXMtPmdl dE5hdkNsYXNzKCJwIik7DQoJCSRuYXZuZXh0Y2xhc3MgPSAkdGhpcy0+Z2V0TmF2Q2xhc3Mo Im4iKTsNCgkJJG5hdnByZXZjbGFzcyA9ICgkbmF2cHJldmNsYXNzKSA/ICcgY2xhc3M9Iicu JG5hdnByZXZjbGFzcy4nIicgOiAnJzsNCgkJJG5hdm5leHRjbGFzcyA9ICgkbmF2bmV4dGNs YXNzKSA/ICcgY2xhc3M9IicuJG5hdm5leHRjbGFzcy4nIicgOiAnJzsNCgkJJGZpbHRlcnMg PSBhcnJheSgpOw0KCQkkZmlsdGVySGlkID0gYXJyYXkoKTsNCgkJaWYgKCEkc3RhdGljKSB7 DQoJCQlmb3JlYWNoKCR0aGlzLT5mb3B0cyBhcyAkZmlsdGVyKSB7DQoJCQkJZm9yZWFjaCgk ZmlsdGVyIGFzICRrZXkgPT4gJHZhbCkgew0KCQkJCQkkZmlsdGVyc1tdID0gJGtleS4nPScu JHZhbDsNCgkJCQkJJGZpbHRlckhpZFtdID0gaElucHV0KCRrZXksICR2YWwpOw0KCQkJCX0N CgkJCX0NCgkJfQ0KCQkkZmlsdGVyVVJMID0gam9pbihhLCAkZmlsdGVycyk7DQoNCgkJLy8g TW9udGggc2VsZWN0IGxpc3QNCgkJaWYgKCR0aGlzLT51c2VTZWxlY3RvcignbW9udGgnKSAm JiAhJHN0YXRpYykgew0KCQkJZm9yICggJGlkeCA9IDE7ICRpZHggPD0gMTI7ICRpZHgrKyAp IHsNCgkJCQkkdGFnYXR0cyA9ICcgdmFsdWU9IicuJGlkeC4nIic7DQoJCQkJaWYgKCAkaWR4 ID09ICRjdXJybW8gKSAkdGFnYXR0cyAuPSAnIHNlbGVjdGVkPSJzZWxlY3RlZCInOw0KCQkJ CSRvcHRpb250YWdzW10gPSBkb1RhZyhzYWZlX3N0cmZ0aW1lKCR0aGlzLT5tdGhOYW1lRm10 LCBta3RpbWUoMCwwLDAsJGlkeCksICR0aGlzLT5nbXQsICR0aGlzLT5sYW5nKSwgJ29wdGlv bicsICcnLCAkdGFnYXR0cyk7DQoJCQl9DQoJCQkkc2VsZWN0b3JbXSA9IGRvVGFnKGpvaW4o biwgJG9wdGlvbnRhZ3MpLCAnc2VsZWN0JywgKCgkdGhpcy0+bXl3cmFwdGFnKSA/ICcnIDog JHRoaXMtPm15Y2xhc3MpLCAnIG5hbWU9Im0iJy4oKCR0aGlzLT5zZWxidG4pID8gJycgOiAn IG9uY2hhbmdlPSJzdWJtaXQoKSInKSwgJycpDQogICAJCQkJLiAoKCR0aGlzLT51c2VTZWxl Y3RvcigneWVhcicpKSA/ICcnIDogaElucHV0KCd5JywgJGN1cnJ5cikpOw0KCQkJJG9wdGlv bnRhZ3MgPSBhcnJheSgpOyAvLyBCbGFuayBvdXQNCgkJfSBlbHNlIHsNCgkJCSRzZWxlY3Rv cltdID0gZG9UYWcoJHRoaXMtPmdldE1vbnRoTmFtZSgpLCAnc3BhbicsICgoJHRoaXMtPm15 d3JhcHRhZykgPyAnJyA6ICR0aGlzLT5teWNsYXNzKSk7DQoJCX0NCg0KCQkvLyBZZWFyIHNl bGVjdCBsaXN0DQoJCSR5MCA9ICR0aGlzLT5nZXRFWWVhcigpOw0KCQkkeTEgPSAkdGhpcy0+ Z2V0TFllYXIoKTsNCg0KCQlpZiAoJHRoaXMtPnVzZVNlbGVjdG9yKCd5ZWFyJykgJiYgKCR5 MCAhPSAkeTEpICYmICEkc3RhdGljKSB7DQoJCQlmb3IgKCAkaWR4ID0gJHkwOyAkaWR4IDw9 ICR5MTsgJGlkeCsrICkgew0KCQkJCSR0YWdhdHRzID0gJyB2YWx1ZT0iJy4kaWR4LiciJzsN CgkJCQlpZiAoICRpZHggPT0gJGN1cnJ5ciApICR0YWdhdHRzIC49ICcgc2VsZWN0ZWQ9InNl bGVjdGVkIic7DQoJCQkJJG9wdGlvbnRhZ3NbXSA9IGRvVGFnKCRpZHgsICdvcHRpb24nLCAn JywgJHRhZ2F0dHMpOw0KCQkJfQ0KCQkJJHNlbGVjdG9yW10gPSBkb1RhZyhqb2luKG4sICRv cHRpb250YWdzKSwgJ3NlbGVjdCcsICgoJHRoaXMtPm15d3JhcHRhZykgPyAnJyA6ICR0aGlz LT5teWNsYXNzKSwgJyBuYW1lPSJ5IicuKCgkdGhpcy0+c2VsYnRuKSA/ICcnIDogJyBvbmNo YW5nZT0ic3VibWl0KCkiJyksICcnKQ0KCQkJCQkuICgoJHRoaXMtPnVzZVNlbGVjdG9yKCdt b250aCcpKSA/ICcnIDogaElucHV0KCdtJywgJGN1cnJtbykpOw0KCQl9IGVsc2Ugew0KCQkJ JHNlbGVjdG9yW10gPSBkb1RhZygkdGhpcy0+Z2V0WWVhcigpLCAnc3BhbicsICgoJHRoaXMt Pm15d3JhcHRhZykgPyAnJyA6ICR0aGlzLT5teWNsYXNzKSk7DQoJCX0NCgkJJGV4dHJhcyA9 ICcnOw0KCQlpZiAoISRzdGF0aWMgJiYgKCAkdGhpcy0+dXNlU2VsZWN0b3IoJ21vbnRoJykg fHwgJHRoaXMtPnVzZVNlbGVjdG9yKCd5ZWFyJykgKSkgew0KCQkJaWYgKCR0aGlzLT5zZWxi dG4pIHsNCgkJCQkkZXh0cmFzIC49IGRvVGFnKCcnLCAnaW5wdXQnLCAnc21kX2NhbF9pbnB1 dCcsICcgdHlwZT0ic3VibWl0IiB2YWx1ZT0iJy4kdGhpcy0+c2VsYnRuLiciJyk7DQoJCQl9 DQoJCQlpZiAoJHRoaXMtPnRhYmxlSUQpIHsNCgkJCQkkZXh0cmFzIC49IGhJbnB1dCgnY2Fs aWQnLCR0aGlzLT50YWJsZUlEKTsNCgkJCX0NCgkJCSRleHRyYXMgLj0gam9pbignJywgJGZp bHRlckhpZCk7DQoJCX0NCg0KCQkkc2VsZWN0b3IgPSAnPGZvcm0gYWN0aW9uPSInLiRfU0VS VkVSWydQSFBfU0VMRiddLiciIG1ldGhvZD0iZ2V0IiBpZD0ic21kX2NhbGRhdGUiPicuZG9U YWcoam9pbihzcCwgJHNlbGVjdG9yKS4kZXh0cmFzLCAkdGhpcy0+bXl3cmFwdGFnLCAkdGhp cy0+bXljbGFzcykuJzwvZm9ybT4nOw0KDQoJCSRuYXZfYmFja19saW5rID0gJHRoaXMtPm5h dmlnYXRpb24oJHRoaXMtPnllYXIsICR0aGlzLT5tb250aCwgJy0nLCAkZmlsdGVyVVJMKTsN CgkJJG5hdl9md2RfbGluayAgPSAkdGhpcy0+bmF2aWdhdGlvbigkdGhpcy0+eWVhciwgJHRo aXMtPm1vbnRoLCAnKycsICRmaWx0ZXJVUkwpOw0KDQoJCSRuYXZfYmFjayA9ICghJHN0YXRp YyAmJiAkbmF2X2JhY2tfbGluaykgPyAnPGEgaHJlZj0iJy4kbmF2X2JhY2tfbGluay4nIicu JG5hdnByZXZjbGFzcy4nPiYjNjA7PC9hPicgOiAnJm5ic3A7JzsNCi8vCQkkbmF2X2Z3ZCAg PSAoKCEkc3RhdGljICYmICRmdXR1cmUgJiYgJG5hdl9md2RfbGluaykgb3IgKCR0aGlzLT5t b250aCAhPSBkYXRlKCduJyx0aW1lKCkpKSkgPyAnPGEgaHJlZj0iJy4kbmF2X2Z3ZF9saW5r LiciJy4kbmF2bmV4dGNsYXNzLic+JiM2Mjs8L2E+JyA6ICcmbmJzcDsnOyAvLyAqc2hydWcq IGJyZWFrcyBpZiBzdGF0aWMgc2V0IGFuZCBtb250aCA8IHRoaXMgbW9udGggdXNlZA0KCQkk bmF2X2Z3ZCAgPSAoISRzdGF0aWMgJiYgJGZ1dHVyZSAmJiAkbmF2X2Z3ZF9saW5rKSA/ICc8 YSBocmVmPSInLiRuYXZfZndkX2xpbmsuJyInLiRuYXZuZXh0Y2xhc3MuJz4mIzYyOzwvYT4n IDogJyZuYnNwOyc7DQoNCgkJJGNbXSA9IGRvVGFnKCRuYXZfYmFjaywndGgnKTsNCgkJJGNb XSA9ICc8dGggY29sc3Bhbj0iJy4oKCR0aGlzLT5zaG93SVNPV2VlayA9PSAnJykgPyA1IDog NikuJyI+Jy4kc2VsZWN0b3IuJzwvdGg+JzsNCgkJJGNbXSA9IGRvVGFnKCRuYXZfZndkLCd0 aCcpOw0KDQoJCXJldHVybiBkb1RhZyhqb2luKCcnLCRjKSwndHInKTsNCgl9DQoNCglmdW5j dGlvbiBuYXZpZ2F0aW9uKCR5ZWFyLCRtb250aCwkZGlyZWN0aW9uLCRmbHQpIHsNCgkJZ2xv YmFsICRwZXJtbGlua19tb2RlOw0KDQoJCWlmKCRkaXJlY3Rpb24gPT0gJy0nKSB7DQoJCQlp ZigkbW9udGggLSAxIDwgMSkgew0KCQkJCSRtb250aCA9IDEyOw0KCQkJCSR5ZWFyIC09IDE7 DQoJCQl9IGVsc2Ugew0KCQkJCSRtb250aCAtPSAxOw0KCQkJfQ0KCQl9IGVsc2Ugew0KCQkJ aWYoJG1vbnRoICsgMSA+IDEyKSB7DQoJCQkJJG1vbnRoID0gMTsNCgkJCQkkeWVhciArPSAx Ow0KCQkJfSBlbHNlIHsNCgkJCQkkbW9udGggKz0gMTsNCgkJCX0NCgkJfQ0KDQoJCS8vIEFi b3J0IGlmIHdlJ3JlIGFib3V0IHRvIGdvIG91dCBvZiByYW5nZQ0KCQlpZiAoJHllYXIgPCAk dGhpcy0+Z2V0RVllYXIoKSB8fCAkeWVhciA+ICR0aGlzLT5nZXRMWWVhcigpKSB7DQoJCQly ZXR1cm4gJyc7DQoJCX0NCg0KCQkkaWQgPSAoJHRoaXMtPnRhYmxlSUQpID8gYS4nY2FsaWQ9 Jy4kdGhpcy0+dGFibGVJRCA6ICcnOyAvLyBBbGxvdyBzcGVjaWZpYyBjYWxlbmRhciBuYXZp Z2F0aW9uLCBpbiBjYXNlIHRoZXJlJ3MgbW9yZSB0aGFuIG9uZSBwZXIgcGFnZQ0KCQlpZigk cGVybWxpbmtfbW9kZSAhPSAnbWVzc3knKSB7DQoJCQlyZXR1cm4gIj9tPSRtb250aCIuYS4i eT0keWVhciIuJGlkLmEuJGZsdDsNCgkJfSBlbHNlIHsgLy8gZm9yIG1lc3N5IFVSTCdzIHdl IG5lZWQgdG8gYnVpbGQgdGhlIGVudGlyZSByZXF1ZXN0IHN0cmluZyBmaXJzdCwgdGhlbiB0 YWNrIG9uIHRoZSByZXN0DQoJCQkkb3V0ID0gbWFrZU91dCgnaWQnLCdzJywnYycsJ3EnLCdw ZycsJ3AnLCdtb250aCcpOw0KCQkJJHIgPSAnPyc7DQoJCQlmb3JlYWNoKCRvdXQgYXMgJGtl eSA9PiAkdmFsICkgew0KCQkJCSRyIC49ICgkdmFsKSA/ICIka2V5PSR2YWwiLmEgOiAnJzsN CgkJCX0NCgkJCXJldHVybiAkci4ibT0kbW9udGgiLmEuInk9JHllYXIiLiRpZC5hLiRmbHQ7 DQoJCX0NCgl9DQp9DQoNCmNsYXNzIFNNRF9TbWFsbF9DYWxlbmRhciBleHRlbmRzIFNNRF9D YWxlbmRhciB7DQoJdmFyICRzZWN0aW9uID0gJyc7DQoJdmFyICRjYXRlZ29yeSA9ICcnOw0K CWZ1bmN0aW9uIFNNRF9TbWFsbF9DYWxlbmRhcigkeWVhciwkbW9udGgsJGV2ZW50cywkc2Vj dGlvbiwkY2F0ZWdvcnkpIHsNCgkJJHRoaXMtPnNlY3Rpb24gPSAkc2VjdGlvbjsNCgkJJHRo aXMtPmNhdGVnb3J5ID0gJGNhdGVnb3J5Ow0KCQkkdGhpcy0+U01EX0NhbGVuZGFyKCR5ZWFy LCRtb250aCwkZXZlbnRzKTsNCgl9DQoNCglmdW5jdGlvbiBkc3BEYXlDZWxsKCR0aGVkYXkp IHsNCgkJZ2xvYmFsICRwZXJtbGlua19tb2RlOw0KDQoJCSRjZWxsY2xhc3MgPSAkdGhpcy0+ Z2V0Q2VsbENsYXNzKCkuJyAnOw0KCQkkaGFzYXJ0aWNsZSA9IGlzc2V0KCR0aGlzLT5ldmVu dHNbJHRoZWRheV0pOw0KCQkkY2xhc3NbXSA9ICRjZWxsY2xhc3MgLiAoKCRoYXNhcnRpY2xl KSA/ICR0aGlzLT5jbGFzc3ByZWZpeC4nZXZlbnQnIDogJycpOw0KCQlpZiAoKGluX2FycmF5 KCBkYXRlKCdkLW0tWScsIG1rdGltZSggMCwgMCwgMCwgJHRoaXMtPmdldE1vbnRoKCksICR0 aGVkYXksICR0aGlzLT5nZXRZZWFyKCkpICksICR0aGlzLT5ob2xpZGF5cykpICkgew0KCQkJ JGNsYXNzW10gPSAkdGhpcy0+Y2xhc3NwcmVmaXguJ2hvbHMnOw0KCQl9DQoJCWlmKCR0aGlz LT5tb250aCA9PSBkYXRlKCduJyx0aW1lKCkrdHpfb2Zmc2V0KCkgKSBhbmQgJHRoZWRheSA9 PSBkYXRlKCdqJyx0aW1lKCkrdHpfb2Zmc2V0KCkpICkgew0KCQkJJGNsYXNzW10gPSAkdGhp cy0+Y2xhc3NwcmVmaXguJ3RvZGF5JzsNCgkJfQ0KDQoJCWlmKCBpc3NldCgkdGhpcy0+ZXZl bnRzWyR0aGVkYXldKSApIHsNCgkJCSRkYXlzX2V2ZW50cyA9ICR0aGlzLT5ldmVudHNbJHRo ZWRheV07DQoJCQlmb3JlYWNoKCRkYXlzX2V2ZW50cyBhcyAkZXYpIHsNCgkJCQkkZXZjbGFz cyA9IHRyaW0oJGV2Wyd0eXBlJ10pOw0KCQkJCWZvcmVhY2ggKGV4cGxvZGUoJyAnLCAkZXZj bGFzcykgYXMgJGV2Yykgew0KCQkJCQkkY2xhc3NbXT0gJGV2YzsNCgkJCQl9DQoNCgkJCQkk b3V0W10gPSAoJHRoaXMtPmV2d3JhcHRhZykgPyB0YWcoJGV2WydldiddLCAkdGhpcy0+ZXZ3 cmFwdGFnLCAoKCRldmNsYXNzKSA/ICcgY2xhc3M9IicuJGV2Y2xhc3MuJyInIDogJycpKSA6 ICRldlsnZXYnXTsNCgkJCX0NCgkJCSR1c2VfcG9zdGVkID0gZmFsc2U7DQoJCQlmb3JlYWNo ICgkdGhpcy0+bGlua3Bvc3RlZCBhcyAkZGxpbmtzKSB7DQoJCQkJaWYgKGluX2FycmF5KCRk bGlua3MsICRjbGFzcykpIHsNCgkJCQkJJHVzZV9wb3N0ZWQgPSB0cnVlOw0KCQkJCQlicmVh azsNCgkJCQl9DQoJCQl9DQoJCQlpZiggJHBlcm1saW5rX21vZGUgIT0gJ3llYXJfbW9udGhf ZGF5X3RpdGxlJyApIHsNCgkJCQkkbGlua2RhdGUgPSAoJHVzZV9wb3N0ZWQpID8gJGV2Wydw b3N0ZWQnXSA6ICR0aGlzLT55ZWFyLictJy4kdGhpcy0+ZG91YmxlZGlnaXQoJHRoaXMtPm1v bnRoKS4nLScuJHRoaXMtPmRvdWJsZWRpZ2l0KCR0aGVkYXkpOw0KCQkJCSRocmVmID0gJyBo cmVmPSInLmh1Lic/ZGF0ZT0nLiRsaW5rZGF0ZTsNCgkJCQlpZigkdGhpcy0+c2VjdGlvbikg eyAkaHJlZiA9ICRocmVmLmEuJ3M9Jy4kdGhpcy0+c2VjdGlvbjsgfQ0KCQkJCWlmKCR0aGlz LT5jYXRlZ29yeSkgeyAkaHJlZiA9ICRocmVmLmEuJ2M9Jy4kdGhpcy0+Y2F0ZWdvcnk7IH0N CgkJCQkkaHJlZiAuPSAnIic7DQoJCQl9IGVsc2Ugew0KCQkJCSRzZWN0aW9uID0gKCR0aGlz LT5zZWN0aW9uKSA/ICR0aGlzLT5zZWN0aW9uLicvJyA6ICcnOw0KCQkJCSRsaW5rZGF0ZSA9 ICgkdXNlX3Bvc3RlZCkgPyBwcmVnX3JlcGxhY2UoIi0iLCAiLyIsICRldlsncG9zdGVkJ10p IDogJHRoaXMtPnllYXIuJy8nLiR0aGlzLT5kb3VibGVkaWdpdCgkdGhpcy0+bW9udGgpLicv Jy4kdGhpcy0+ZG91YmxlZGlnaXQoJHRoZWRheSk7DQoJCQkJJGhyZWYgPSAnIGhyZWY9Iicu aHUuJHNlY3Rpb24uJGxpbmtkYXRlLiciJzsNCgkJCX0NCg0KLy8JCQkkdGl0bGUgPSAnIHRp dGxlPSInLnNhZmVfc3RyZnRpbWUoJyV4JyxnbW1rdGltZSgwLDAsMCwkdGhpcy0+bW9udGgs JHRoZWRheSsxLCR0aGlzLT55ZWFyKSkuJyInOyAvLyBubyBpZGVhIHdoeSAkdGhlZGF5KzEs IGJ1dCBvdGhlcndpc2UgaXQgd29uJ3Qgd29yaw0KDQoJCQkkY1tdID0gZG9UYWcoJHRoZWRh eS5qb2luKCcnLCRvdXQpLCdhJywnJywkaHJlZik7DQoJCX0gZWxzZSB7DQoJCQkkY1tdID0g JHRoZWRheTsNCgkJfQ0KDQoJCXJldHVybiBkb1RhZyhqb2luKCcnLCRjKSwndGQnLGpvaW4o JyAnLCRjbGFzcykpOw0KCX0NCg0KCWZ1bmN0aW9uIGRvdWJsZWRpZ2l0KCRuKSB7DQoJCWlm KCRuIDwgMTApIHsgJG4gPSAnMCcuKGludCkkbjsgfQ0KCQlyZXR1cm4gJG47DQoJfQ0KDQp9 DQoNCi8qKg0KKiBCYXNpYyBDYWxlbmRhciBkYXRhIGFuZCBkaXNwbGF5DQoqIGh0dHA6Ly93 d3cub3NjYXJtLm9yZy9zdGF0aWMvcGcvY2FsZW5kYXJDbGFzcy8NCiogQGF1dGhvciBPc2Nh ciBNZXJpZGENCiogQGNyZWF0ZWQgSmFuIDE4IDIwMDQNCiogQHBhY2thZ2UgIGdvQ29yZUxp Yg0KKi8NCmNsYXNzIFNNRF9SYXdfQ2FsZW5kYXIgew0KdmFyICRnbXQgPSAxOw0KdmFyICRs YW5nOw0KdmFyICR5ZWFyOw0KdmFyICRleXI7DQp2YXIgJGx5cjsNCnZhciAkbW9udGg7DQp2 YXIgJGRheU5hbWVGbXQ7DQp2YXIgJG10aE5hbWVGbXQ7DQp2YXIgJHN0YXJ0RGF5Ow0KdmFy ICRzZWxlY3RvcnM7DQp2YXIgJHNlbGJ0bjsNCnZhciAkc2hvd0lTT1dlZWs7DQp2YXIgJGVu ZERheTsNCnZhciAkZmlyc3REYXlPZldlZWsgPSAwOw0KdmFyICRzdGFydE9mZnNldCA9IDA7 DQp2YXIgJGNsYXNzbGV2ZWxzOw0KdmFyICRjbGFzc3ByZWZpeDsNCnZhciAkZXZjbGFzc3By ZWZpeDsNCnZhciAkZXZ3cmFwdGFnOw0KdmFyICRteXdyYXB0YWc7DQp2YXIgJHJvd2NsYXNz Ow0KdmFyICRjZWxsY2xhc3M7DQp2YXIgJGVtcHR5Y2xhc3M7DQp2YXIgJGlzb2NsYXNzOw0K dmFyICRuYXZwcmV2Y2xhc3M7DQp2YXIgJG5hdm5leHRjbGFzczsNCnZhciAkbXljbGFzczsN CnZhciAkZm9wdHM7DQp2YXIgJGhvbGlkYXlzOw0KdmFyICRsaW5rcG9zdGVkOw0KLyoqDQoq IENvbnN0cnVjdG9yDQoqDQoqIEBwYXJhbSBpbnRlZ2VyLCB5ZWFyDQoqIEBwYXJhbSBpbnRl Z2VyLCBtb250aA0KKiBAcmV0dXJuIG9iamVjdA0KKiBAcHVibGljDQoqLw0KZnVuY3Rpb24g U01EX1Jhd19DYWxlbmRhciAoICR5ciwgJG1vICkgew0KCSR0aGlzLT5zZXRZZWFyKCR5cik7 DQoJJHRoaXMtPnNldE1vbnRoKCRtbyk7DQoJJHRoaXMtPnNldENsYXNzUHJlZml4KCdzbWRf Y2FsXycpOw0KDQoJJHRoaXMtPnN0YXJ0VGltZSA9IHN0cnRvdGltZSggIiR5ci0kbW8tMDEg MDA6MDAiICk7DQoJJHRoaXMtPnN0YXJ0RGF5CT0gZGF0ZSggJ0QnLCAkdGhpcy0+c3RhcnRU aW1lICk7DQoJJHRoaXMtPndlZWtEYXkJPSBkYXRlKCAndycsICR0aGlzLT5zdGFydFRpbWUg KTsNCgkkdGhpcy0+ZW5kRGF5ID0gZGF0ZSggJ3QnLCAkdGhpcy0+c3RhcnRUaW1lICk7DQoJ JHRoaXMtPmVuZFRpbWUgICA9IHN0cnRvdGltZSggIiR5ci0kbW8tIi4kdGhpcy0+ZW5kRGF5 LiIgMjM6NTkiICk7DQoNCgkkdGhpcy0+c2V0TmFtZUZvcm1hdCgnJWEnLCAnZCcpOw0KCSR0 aGlzLT5zZXROYW1lRm9ybWF0KCclQicsICdtJyk7DQoJJHRoaXMtPnNldEZpcnN0RGF5T2ZX ZWVrKDApOw0KCSR0aGlzLT5zZXRTaG93SVNPV2VlaygnJyk7DQoJJHRoaXMtPnNldFRhYmxl SUQoJycpOw0KCSR0aGlzLT5zZXRUYWJsZUNsYXNzKCcnKTsNCn0NCi8vID09PT0gZW5kIENh bGVuZGFyID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQ0KLy8gR2V0dGVycw0KZnVuY3Rpb24gZ2V0U3RhcnRUaW1lKCkgeyByZXR1cm4gJHRoaXMt PnN0YXJ0VGltZTsgfQ0KZnVuY3Rpb24gZ2V0V2Vla0RheSgpIHsgcmV0dXJuICR0aGlzLT53 ZWVrRGF5OyB9DQpmdW5jdGlvbiBnZXRFbmRUaW1lKCkgeyByZXR1cm4gJHRoaXMtPmVuZFRp bWU7IH0NCmZ1bmN0aW9uIGdldFllYXIoKSB7IHJldHVybiAkdGhpcy0+eWVhcjsgfQ0KZnVu Y3Rpb24gZ2V0RVllYXIoKSB7IHJldHVybiAkdGhpcy0+ZXlyOyB9DQpmdW5jdGlvbiBnZXRM WWVhcigpIHsgcmV0dXJuICR0aGlzLT5seXI7IH0NCmZ1bmN0aW9uIGdldE1vbnRoKCkgeyBy ZXR1cm4gJHRoaXMtPm1vbnRoOyB9DQpmdW5jdGlvbiBnZXRSb3dDbGFzcygpIHsgcmV0dXJu ICR0aGlzLT5yb3djbGFzczsgfQ0KZnVuY3Rpb24gZ2V0Q2VsbENsYXNzKCkgeyByZXR1cm4g JHRoaXMtPmNlbGxjbGFzczsgfQ0KZnVuY3Rpb24gZ2V0RW1wdHlDbGFzcygpIHsgcmV0dXJu ICR0aGlzLT5lbXB0eWNsYXNzOyB9DQpmdW5jdGlvbiBnZXRJU09XZWVrQ2xhc3MoKSB7IHJl dHVybiAkdGhpcy0+aXNvY2xhc3M7IH0NCmZ1bmN0aW9uIGdldE5hdkNsYXNzKCR0eXBlKSB7 IHJldHVybiAoJHR5cGUgPT0gIm4iKSA/ICR0aGlzLT5uYXZuZXh0Y2xhc3MgOiAkdGhpcy0+ bmF2cHJldmNsYXNzOyB9DQpmdW5jdGlvbiBnZXRNb250aE5hbWUoKSB7IHJldHVybiBzYWZl X3N0cmZ0aW1lKCAkdGhpcy0+bXRoTmFtZUZtdCwgJHRoaXMtPnN0YXJ0VGltZSwgJHRoaXMt PmdtdCwgJHRoaXMtPmxhbmcgKTsgfQ0KLy8gU2V0dGVycw0KZnVuY3Rpb24gc2V0R01UKCRi KXsgJHRoaXMtPmdtdCA9ICRiOyB9DQpmdW5jdGlvbiBzZXRMYW5nKCRjb2RlKXsgJHRoaXMt PmxhbmcgPSAkY29kZTsgfQ0KZnVuY3Rpb24gc2V0VGFibGVJRCgkaWQpIHsgJHRoaXMtPnRh YmxlSUQgPSAkaWQ7IH0NCmZ1bmN0aW9uIHNldFllYXIoJHllYXIpeyAkdGhpcy0+eWVhciA9 ICR5ZWFyOyB9DQpmdW5jdGlvbiBzZXRFWWVhcigkeWVhcil7ICR0aGlzLT5leXIgPSAkeWVh cjsgfQ0KZnVuY3Rpb24gc2V0TFllYXIoJHllYXIpeyAkdGhpcy0+bHlyID0gJHllYXI7IH0N CmZ1bmN0aW9uIHNldE1vbnRoKCRtb250aCkgeyAkdGhpcy0+bW9udGggPSAoaW50KSRtb250 aDsgfQ0KZnVuY3Rpb24gc2V0U2hvd0lTT1dlZWsoJHZhbCkgeyAkdGhpcy0+c2hvd0lTT1dl ZWsgPSAkdmFsOyB9DQpmdW5jdGlvbiBzZXRDbGFzc0xldmVscygkY2xzKXsgJHRoaXMtPmNs YXNzbGV2ZWxzID0gJGNsczsgfQ0KZnVuY3Rpb24gc2V0Q2xhc3NQcmVmaXgoJGNscyl7ICR0 aGlzLT5jbGFzc3ByZWZpeCA9ICRjbHM7IH0NCmZ1bmN0aW9uIHNldEV2ZW50UHJlZml4KCRj bHMpeyAkdGhpcy0+ZXZjbGFzc3ByZWZpeCA9ICRjbHM7IH0NCmZ1bmN0aW9uIHNldEV2ZW50 V3JhcHRhZygkd3JhcCl7ICR0aGlzLT5ldndyYXB0YWcgPSAkd3JhcDsgfQ0KZnVuY3Rpb24g c2V0TVlXcmFwdGFnKCR3cmFwKXsgJHRoaXMtPm15d3JhcHRhZyA9ICR3cmFwOyB9DQpmdW5j dGlvbiBzZXRUYWJsZUNsYXNzKCRjbHMpIHsgJHRoaXMtPnRhYmxlY2xhc3MgPSAoJGNscykg PyAkdGhpcy0+Y2xhc3NwcmVmaXguJGNscyA6ICcnOyB9DQpmdW5jdGlvbiBzZXRSb3dDbGFz cygkY2xzKXsgJHRoaXMtPnJvd2NsYXNzID0gKCRjbHMpID8gJHRoaXMtPmNsYXNzcHJlZml4 LiRjbHMgOiAnJzsgfQ0KZnVuY3Rpb24gc2V0Q2VsbENsYXNzKCRjbHMpeyAkdGhpcy0+Y2Vs bGNsYXNzID0gKCRjbHMpID8gJHRoaXMtPmNsYXNzcHJlZml4LiRjbHMgOiAnJzsgfQ0KZnVu Y3Rpb24gc2V0RW1wdHlDbGFzcygkY2xzKXsgJHRoaXMtPmVtcHR5Y2xhc3MgPSAoJGNscykg PyAkdGhpcy0+Y2xhc3NwcmVmaXguJGNscyA6ICcnOyB9DQpmdW5jdGlvbiBzZXRJU09XZWVr Q2xhc3MoJGNscyl7ICR0aGlzLT5pc29jbGFzcyA9ICgkY2xzKSA/ICR0aGlzLT5jbGFzc3By ZWZpeC4kY2xzIDogJyc7IH0NCmZ1bmN0aW9uIHNldE5hdkNsYXNzKCRjbHNwLCAkY2xzbil7 DQoJJHRoaXMtPm5hdnByZXZjbGFzcyA9ICgkY2xzcCkgPyAkdGhpcy0+Y2xhc3NwcmVmaXgu JGNsc3AgOiAnJzsNCgkkdGhpcy0+bmF2bmV4dGNsYXNzID0gKCRjbHNuKSA/ICR0aGlzLT5j bGFzc3ByZWZpeC4kY2xzbiA6ICcnOw0KfQ0KZnVuY3Rpb24gc2V0TVlDbGFzcygkY2xzKXsg JHRoaXMtPm15Y2xhc3MgPSAoJGNscykgPyAkdGhpcy0+Y2xhc3NwcmVmaXguJGNscyA6ICcn OyB9DQpmdW5jdGlvbiBzZXRGaWx0ZXJPcHRzKCRmKSB7ICR0aGlzLT5mb3B0cyA9ICRmOyB9 DQpmdW5jdGlvbiBzZXRMaW5rUG9zdGVkKCRkbCkgew0KCWZvcmVhY2ggKCRkbCBhcyAkZHZh bCkgew0KCQkkdGhpcy0+bGlua3Bvc3RlZFtdID0gJHRoaXMtPmNsYXNzcHJlZml4LiRkdmFs Ow0KCX0NCn0NCmZ1bmN0aW9uIHNldEhvbGlkYXlzKCRob2xzKSB7ICR0aGlzLT5ob2xpZGF5 cyA9ICRob2xzOyB9DQpmdW5jdGlvbiBzZXRTZWxlY3RvcnMoJHNlbCwgJGJ0bikgeyAkdGhp cy0+c2VsZWN0b3JzID0gJHNlbDsgJHRoaXMtPnNlbGJ0biA9ICRidG47IH0NCmZ1bmN0aW9u IHVzZVNlbGVjdG9yKCR2YWwpIHsgcmV0dXJuIGluX2FycmF5KCR2YWwsICR0aGlzLT5zZWxl Y3RvcnMpOyB9DQpmdW5jdGlvbiBzZXRGaXJzdERheU9mV2VlaygkZCkgew0KCSR0aGlzLT5m aXJzdERheU9mV2VlayA9ICgoaW50KSRkIDw9IDYgYW5kIChpbnQpJGQgPj0gMCkgPyAoaW50 KSRkIDogMDsNCg0KCSR0aGlzLT5zdGFydE9mZnNldCA9IGRhdGUoICd3JywgJHRoaXMtPnN0 YXJ0VGltZSApLSR0aGlzLT5maXJzdERheU9mV2VlazsNCglpZiAoICR0aGlzLT5zdGFydE9m ZnNldCA8IDAgKSB7DQoJCSR0aGlzLT5zdGFydE9mZnNldCA9IDcgLSBhYnMoJHRoaXMtPnN0 YXJ0T2Zmc2V0KTsNCgl9DQp9DQovKioNCiogZnJtOiBhbnkgdmFsaWQgUEhQIHN0cmZ0aW1l KCkgc3RyaW5nIG9yIEFCQlIvRlVMTA0KKiB0eXA6IGQgdG8gc2V0IGRheSwgbSB0byBzZXQg bW9udGggZm9ybWF0DQoqLw0KZnVuY3Rpb24gc2V0TmFtZUZvcm1hdCgkZnJtLCAkdHlwPSJk Iikgew0KCXN3aXRjaCAoJGZybSkgew0KCQljYXNlICJGVUxMIjoNCgkJCSRmbXQgPSAoJHR5 cCA9PSAiZCIpID8gIiVBIiA6ICIlQiI7DQoJCQlicmVhazsNCgkJY2FzZSAiQUJCUiI6DQoJ CQkkZm10ID0gKCR0eXAgPT0gImQiKSA/ICIlYSIgOiAiJWIiOw0KCQkJYnJlYWs7DQoJCWRl ZmF1bHQ6DQoJCQkkZm10ID0gJGZybTsNCgkJCWJyZWFrOw0KCX0NCg0KCWlmICgkdHlwID09 ICJkIikgew0KCQkkdGhpcy0+ZGF5TmFtZUZtdCA9ICRmbXQ7DQoJfSBlbHNlIHsNCgkJJHRo aXMtPm10aE5hbWVGbXQgPSAkZm10Ow0KCX0NCn0NCi8qKg0KKiBSZXR1cm5zIG1hcmt1cCBm b3IgZGlzcGxheWluZyB0aGUgY2FsZW5kYXIuDQoqIEByZXR1cm4NCiogQHB1YmxpYw0KKi8N CmZ1bmN0aW9uIGRpc3BsYXkgKCApIHsNCgkkaWQgPSAoJHRoaXMtPnRhYmxlSUQpID8gJyBp ZD0iJy4kdGhpcy0+dGFibGVJRC4nIicgOiAnJzsNCgkkY1tdID0gJzx0YWJsZScuJGlkLic+ JzsNCgkkY1tdID0gJHRoaXMtPmRzcERheU5hbWVzKCk7DQoJJGNbXSA9ICR0aGlzLT5kc3BE YXlDZWxscygpOw0KCSRjW10gPSAnPC90YWJsZT4nOw0KDQoJcmV0dXJuIGpvaW4oJycsJGMp Ow0KfQ0KLy8gPT09PSBlbmQgZGlzcGxheSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0NCi8qKg0KKiBEaXNwbGF5cyB0aGUgcm93IG9mIGRheSBu YW1lcy4NCiogQHJldHVybiBzdHJpbmcNCiogQHByaXZhdGUNCiovDQpmdW5jdGlvbiBkc3BE YXlOYW1lcyAoICkgew0KCS8vIFRoaXMgaXMgZG9uZSB0byBtYWtlIHN1cmUgU3VuZGF5IGlz IGFsd2F5cyB0aGUgZmlyc3QgZGF5IG9mIG91ciBhcnJheQ0KCS8vIFVuaXggdGltZSBnZXRz IGEgbGl0dGxlIGZ1bmt5IGF0IHRoZSBiZWdpbm5pbmcgZGVwZW5kaW5nIHVwb24geW91ciB0 aW1lem9uZS4NCgkkc2VydmVyb2Zmc2V0ID0gZ21ta3RpbWUoMCwwLDApIC0gbWt0aW1lKDAs MCwwKTsNCgkkc3RhcnQgPSAoJHNlcnZlcm9mZnNldCA8IDApID8gNCA6IDM7DQoJJGVuZCA9 ICRzdGFydCArIDc7DQoJZm9yKCRpPSRzdGFydDsgJGk8JGVuZDsgJGkrKykgew0KCQkkbmFt ZXNbXSA9IHVjZmlyc3Qoc2FmZV9zdHJmdGltZSgkdGhpcy0+ZGF5TmFtZUZtdCwgODY0MDAq JGkgLSB0el9vZmZzZXQoKSwgJHRoaXMtPmdtdCwgJHRoaXMtPmxhbmcgKSk7DQoJfQ0KDQoJ JGNbXSA9ICc8dHI+JzsNCg0KCSRpID0gJHRoaXMtPmZpcnN0RGF5T2ZXZWVrOw0KCSRqID0g MDsgLy8gY291bnQgbnVtYmVyIG9mIGRheXMgZGlzcGxheWVkDQoJJGVuZCA9IGZhbHNlOw0K DQoJaWYgKCR0aGlzLT5zaG93SVNPV2VlayAhPSAnJykgew0KCQkkY1tdID0gIjx0aD4iLiR0 aGlzLT5zaG93SVNPV2Vlay4iPC90aD4iOw0KCX0NCglmb3IoJGogPSAwOyAkajw9NjsgJGor KywgJGkrKykgew0KCQlpZigkaSA9PSA3KSB7ICRpID0gMDsgfQ0KCQkkY1tdID0gJzx0aD4n LiRuYW1lc1skaV0uIjwvdGg+IjsNCgl9DQoNCgkkY1tdID0gJzwvdHI+JzsNCglyZXR1cm4g am9pbignJywkYyk7DQp9DQovLyA9PT09IGVuZCBkc3BEYXlOYW1lcyA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi8qKg0KKiBEaXNwbGF5cyBh bGwgZGF5IGNlbGxzIGZvciB0aGUgbW9udGgNCioNCiogQHJldHVybiBzdHJpbmcNCiogQHBy aXZhdGUNCiovDQpmdW5jdGlvbiBkc3BEYXlDZWxscyAoICkgew0KCSRpID0gMDsgLy8gY2Vs bCBjb3VudGVyDQoJJGVtcHR5Q2xhc3MgPSAkdGhpcy0+Z2V0RW1wdHlDbGFzcygpOw0KCSRp c29DbGFzcyA9ICR0aGlzLT5nZXRJU09XZWVrQ2xhc3MoKTsNCgkkcm93Q2xhc3MgPSAkdGhp cy0+Z2V0Um93Q2xhc3MoKTsNCgkkcm93Q2xhc3MgPSAoJHJvd0NsYXNzKSA/ICcgY2xhc3M9 IicuJHJvd0NsYXNzLiciJyA6ICcnOw0KDQoJJGNbXSA9ICc8dHInLiRyb3dDbGFzcy4nPic7 DQoNCglpZiAoJHRoaXMtPnNob3dJU09XZWVrICE9ICcnKSB7DQoJCSRjW10gPSAnPHRkIGNs YXNzPSInLiRpc29DbGFzcy4nIj4nLmRhdGUoICdXJywgJHRoaXMtPnN0YXJ0VGltZSApLic8 L3RkPic7DQoJfQ0KCS8vIGZpcnN0IGRpc3BsYXkgZW1wdHkgY2VsbHMgYmFzZWQgb24gd2hh dCB3ZWVrZGF5IHRoZSBtb250aCBzdGFydHMgaW4NCglmb3IoICRqPTA7ICRqPCR0aGlzLT5z dGFydE9mZnNldDsgJGorKyApCXsNCgkJJGkrKzsNCgkJJGNbXSA9ICc8dGQgY2xhc3M9Iicu JGVtcHR5Q2xhc3MuJyI+Jm5ic3A7PC90ZD4nOw0KCX0gLy8gZW5kIG9mZnNldCBjZWxscw0K DQoJLy8gd3JpdGUgb3V0IHRoZSByZXN0IG9mIHRoZSBkYXlzLCBhdCBlYWNoIHN1bmRheSwg c3RhcnQgYSBuZXcgcm93Lg0KCWZvciggJGQ9MTsgJGQ8PSR0aGlzLT5lbmREYXk7ICRkKysg KSB7DQoJCSRpKys7DQoJCSRjW10gPSAkdGhpcy0+ZHNwRGF5Q2VsbCggJGQgKTsNCgkJaWYg KCAkaSU3ID09IDAgKSB7ICRjW10gPSAnPC90cj4nOyB9DQoJCWlmICggJGQ8JHRoaXMtPmVu ZERheSAmJiAkaSU3ID09IDAgKSB7DQoJCQkkY1tdID0gJzx0cicuJHJvd0NsYXNzLic+JzsN CgkJCWlmICgkdGhpcy0+c2hvd0lTT1dlZWsgIT0gJycpIHsNCgkJCQkkY1tdID0gJzx0ZCBj bGFzcz0iJy4kaXNvQ2xhc3MuJyI+Jy5kYXRlKCAnVycsIHN0cnRvdGltZSggJHRoaXMtPmdl dFllYXIoKS4iLSIuJHRoaXMtPmdldE1vbnRoKCkuIi0iLihpbnQpKCRkICsgMSkgLiIgMDA6 MDAiICkpLic8L3RkPic7DQoJCQl9DQoJCX0NCgl9DQoJLy8gZmlsbCBpbiB0aGUgZmluYWwg cm93DQoJJGxlZnQgPSA3IC0gKCAkaSU3ICk7DQoJaWYgKCAkbGVmdCA8IDcpCXsNCgkJZm9y ICggJGo9MDsgJGo8JGxlZnQ7ICRqKysgKQl7DQoJCSAgJGNbXSA9ICc8dGQgY2xhc3M9Iicu JGVtcHR5Q2xhc3MuJyI+Jm5ic3A7PC90ZD4nOw0KCQl9DQoJCSRjW10gPSAiXG5cdDwvdHI+ IjsNCgl9DQoJcmV0dXJuIGpvaW4oJycsJGMpOw0KfQ0KLy8gPT09PSBlbmQgZHNwRGF5Q2Vs bHMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQov KioNCiogb3V0cHV0cyB0aGUgY29udGVudHMgZm9yIGEgZ2l2ZW4gZGF5DQoqDQoqIEBwYXJh bSBpbnRlZ2VyLCBkYXkNCiogQGFic3RyYWN0DQoqLw0KZnVuY3Rpb24gZHNwRGF5Q2VsbCAo ICRkYXkgKSB7DQoJcmV0dXJuICc8dGQ+Jy4kZGF5Lic8L3RkPic7DQp9DQovLyA9PT09IGVu ZCBkYXlDZWxsID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQ0KfSAvLyBlbmQgY2xhc3MNCg0KLy8gUGVyZm9ybSBvbmUgb2YgMiB0eXBlcyBvZiB0 ZXN0OiBhIGZsYWctYmFzZWQgdGVzdCwgb3IgYW4gaW5mby1iYXNlZCB0ZXN0DQpmdW5jdGlv biBzbWRfaWZfY2FsKCRhdHRzLCAkdGhpbmcpIHsNCglnbG9iYWwgJHNtZF9jYWxfZmxhZywg JHNtZF9jYWxfaWQsICRzbWRfeWVhciwgJHNtZF9tb250aCwgJHNtZF93ZWVrLCAkc21kX2Rh eTsNCg0KCWV4dHJhY3QobEF0dHMoYXJyYXkoDQoJCSdmbGFnJyA9PiAnJywgLy8gZXZlbnQs IHJlY3VyLCBtdWx0aShwcmV2LGZpcnN0LGxhc3QpLCBjYW5jZWwsIGhvbHMNCgkJJ2NhbGlk JyA9PiAnJywNCgkJJ3llYXInID0+ICcnLA0KCQknbW9udGgnID0+ICcnLA0KCQknd2Vlaycg PT4gJycsDQoJCSdkYXknID0+ICcnLA0KCQknbG9naWMnID0+ICdhbmQnLA0KCQknZGVidWcn ID0+ICcwJywNCgkpLCAkYXR0cykpOw0KDQoJJGZsYWcgPSBkb19saXN0KCRmbGFnKTsNCgkk Y3RyID0gJG51bSA9IDA7DQoNCglpZiAoJHNtZF9jYWxfZmxhZyAmJiAkZmxhZyAmJiAkZmxh Z1swXSAhPSAnJykgew0KCQkkbnVtICs9IGNvdW50KCRmbGFnKTsNCgkJZm9yZWFjaCAoJGZs YWcgYXMgJHdoYXRub3QpIHsNCgkJCWlmIChlbXB0eSgkd2hhdG5vdCkpIGNvbnRpbnVlOw0K CQkJJGN0ciArPSAoaW5fYXJyYXkoJHdoYXRub3QsICRzbWRfY2FsX2ZsYWcpKSA/IDEgOiAw Ow0KCQl9DQoJfQ0KCWlmICgkY2FsaWQpIHsNCgkJJG51bSsrOw0KCQkkY3RyICs9ICgkc21k X2NhbF9pZCA9PT0gJGNhbGlkKSA/IDEgOiAwOw0KCX0NCglmb3JlYWNoIChhcnJheSgieWVh ciIsICJtb250aCIsICJ3ZWVrIiwgImRheSIpIGFzICR0ZXN0KSB7DQoJCSR0ZXN0ZXIgPSAk JHRlc3Q7DQoJCSRnYmwgPSAnc21kXycuJHRlc3Q7DQoJCSRjb21wYXJlID0gJCRnYmw7DQoN CgkJaWYgKCR0ZXN0ZXIpIHsNCgkJCSRudW0rKzsNCgkJCXByZWdfbWF0Y2goJy8oWyE9PD5d Kyk/KFtcZF0rKS8nLCAkdGVzdGVyLCAkbWF0Y2hlcyk7DQoJCQlpZiAoJGRlYnVnKSB7DQoJ CQkJZG1wKCJURVNUIElGOiAiLiAkY29tcGFyZS4gKCgkbWF0Y2hlc1sxXSkgPyAkbWF0Y2hl c1sxXSA6ICc9JykgLiAkbWF0Y2hlc1syXSApOw0KCQkJfQ0KCQkJc3dpdGNoICgkbWF0Y2hl c1sxXSkgew0KCQkJCWNhc2UgIiEiOg0KCQkJCQkkY3RyICs9ICgkY29tcGFyZSE9JG1hdGNo ZXNbMl0pID8gMSA6IDA7DQoJCQkJCWJyZWFrOw0KCQkJCWNhc2UgIj4iOg0KCQkJCQkkY3Ry ICs9ICgkY29tcGFyZT4kbWF0Y2hlc1syXSkgPyAxIDogMDsNCgkJCQkJYnJlYWs7DQoJCQkJ Y2FzZSAiPj0iOg0KCQkJCQkkY3RyICs9ICgkY29tcGFyZT49JG1hdGNoZXNbMl0pID8gMSA6 IDA7DQoJCQkJCWJyZWFrOw0KCQkJCWNhc2UgIjwiOg0KCQkJCQkkY3RyICs9ICgkY29tcGFy ZTwkbWF0Y2hlc1syXSkgPyAxIDogMDsNCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAiPD0iOg0K CQkJCQkkY3RyICs9ICgkY29tcGFyZTw9JG1hdGNoZXNbMl0pID8gMSA6IDA7DQoJCQkJCWJy ZWFrOw0KCQkJCWRlZmF1bHQ6DQoJCQkJCSRjdHIgKz0gKCRjb21wYXJlPT0kbWF0Y2hlc1sy XSkgPyAxIDogMDsNCgkJCQkJYnJlYWs7DQoJCQl9DQoJCX0NCgl9DQoJJHJlc3VsdCA9ICgo JGN0ciA9PT0gJG51bSAmJiAkbG9naWMgPT0gImFuZCIpIHx8ICRjdHIgPiAwICYmICRsb2dp YyA9PSAib3IiKSA/IHRydWUgOiBmYWxzZTsNCglyZXR1cm4gcGFyc2UoRXZhbEVsc2UoJHRo aW5nLCAkcmVzdWx0KSk7DQp9DQoNCmZ1bmN0aW9uIHNtZF9jYWxfaW5mbygkYXR0cykgew0K CWdsb2JhbCAkcHJldGV4dCwgJHNtZF9jYWxfZmxhZywgJHNtZF9jYWxfaWQsICRzbWRfeWVh ciwgJHNtZF9tb250aCwgJHNtZF93ZWVrLCAkc21kX2RheTsNCg0KCWV4dHJhY3QobEF0dHMo YXJyYXkoDQoJCSd0eXBlJyA9PiAnZmxhZycsIC8vIGZsYWcsIHllYXIsIG1vbnRoLCB3ZWVr LCBkYXksIGNhbGlkLCBzZWN0aW9uLCBjYXRlZ29yeSwgYXV0aG9yDQoJCSdqb2luJyA9PiAn ICcsDQoJCSdodG1sJyA9PiAwLA0KCQknZXNjYXBlJyA9PiAnaHRtbCcsDQoJKSwgJGF0dHMp KTsNCg0KCSRqb2luID0gKCRodG1sKSA/IGEgOiAkam9pbjsgLy8gaHRtbCBtb2RlIGZvcmNl cyBhbXBlcnNhbmQgam9pbg0KCSR0eXBlID0gZG9fbGlzdCgkdHlwZSk7DQoJJHJldCA9IGFy cmF5KCk7DQoJZm9yZWFjaCAoJHR5cGUgYXMgJGl0ZW0pIHsNCgkJc3dpdGNoICgkaXRlbSkg ew0KCQkJY2FzZSAiZmxhZyI6DQoJCQkJJHJldFtdID0gam9pbigkam9pbiwgJHNtZF9jYWxf ZmxhZyk7DQoJCQkJYnJlYWs7DQoJCQljYXNlICJ5ZWFyIjoNCgkJCQlpZiAoJHNtZF95ZWFy KSB7DQoJCQkJCSRyZXRbXSA9ICgoJGh0bWwpID8gJ3k9JyA6ICcnKSAuICRzbWRfeWVhcjsN CgkJCQl9DQoJCQkJYnJlYWs7DQoJCQljYXNlICJtb250aCI6DQoJCQkJaWYgKCRzbWRfbW9u dGgpIHsNCgkJCQkJJHJldFtdID0gKCgkaHRtbCkgPyAnbT0nIDogJycpIC4gJHNtZF9tb250 aDsNCgkJCQl9DQoJCQkJYnJlYWs7DQoJCQljYXNlICJ3ZWVrIjoNCgkJCQlpZiAoJHNtZF93 ZWVrKSB7DQoJCQkJCSRyZXRbXSA9ICgoJGh0bWwpID8gJ3c9JyA6ICcnKSAuICRzbWRfd2Vl azsNCgkJCQl9DQoJCQkJYnJlYWs7DQoJCQljYXNlICJkYXkiOg0KCQkJCWlmICgkc21kX2Rh eSkgew0KCQkJCQkkcmV0W10gPSAoKCRodG1sKSA/ICdkPScgOiAnJykgLiAkc21kX2RheTsN CgkJCQl9DQoJCQkJYnJlYWs7DQoJCQljYXNlICJzZWN0aW9uIjoNCgkJCQlpZiAoJHByZXRl eHRbJ3MnXSkgew0KCQkJCQkkcmV0W10gPSAoKCRodG1sKSA/ICdzPScgOiAnJykgLiAkcHJl dGV4dFsncyddOw0KCQkJCX0NCgkJCQlicmVhazsNCgkJCWNhc2UgImNhdGVnb3J5IjoNCgkJ CQlpZiAoJHByZXRleHRbJ2MnXSkgew0KCQkJCQkkcmV0W10gPSAoKCRodG1sKSA/ICdjPScg OiAnJykgLiAkcHJldGV4dFsnYyddOw0KCQkJCX0NCgkJCQlicmVhazsNCgkJCWNhc2UgImF1 dGhvciI6DQoJCQkJJGN1cnJhdXRob3IgPSBhdXRob3IoYXJyYXkoKSk7DQoJCQkJaWYgKCRj dXJyYXV0aG9yKSB7DQoJCQkJCSRyZXRbXSA9ICgoJGh0bWwpID8gJ2F1dGhvcj0nIDogJycp IC4gJGN1cnJhdXRob3I7DQoJCQkJfQ0KCQkJCWJyZWFrOw0KCQkJY2FzZSAiY2FsaWQiOg0K CQkJCWlmICgkc21kX2NhbF9pZCkgew0KCQkJCQkkcmV0W10gPSAoKCRodG1sKSA/ICdjYWxp ZD0nIDogJycpIC4gJHNtZF9jYWxfaWQ7DQoJCQkJfQ0KCQkJCWJyZWFrOw0KCQl9DQoJfQ0K CSRvdXQgPSBqb2luKCRqb2luLCAkcmV0KTsNCglyZXR1cm4gKCRlc2NhcGU9PSdodG1sJykg PyBodG1sc3BlY2lhbGNoYXJzKCRvdXQpIDogJG91dDsNCn0NCg0KZnVuY3Rpb24gc21kX2Nh bF9ub3coJGF0dHMpIHsNCglnbG9iYWwgJGRhdGVmb3JtYXQ7DQoNCglleHRyYWN0KGxBdHRz KGFycmF5KA0KCQknZm9ybWF0JyA9PiAkZGF0ZWZvcm1hdCwNCgkJJ2dtdCcgPT4gJycsDQoJ CSdsYW5nJyA9PiAnJywNCgkpLCAkYXR0cykpOw0KDQoJcmV0dXJuIHNhZmVfc3RyZnRpbWUo JGZvcm1hdCwgdGltZSgpLCAkZ210LCAkbGFuZyk7DQp9IjtzOjQ6InR5cGUiO3M6MToiMCI7 czo1OiJvcmRlciI7czoxOiI1IjtzOjQ6ImhlbHAiO3M6NDE0MzY6Igk8cD48ZGl2IGlkPSJz bWRfaGVscCI+PC9wPgoKCTxoMSBpZD0idG9wIj5zbWRfY2FsZW5kYXI8L2gxPgoKCTxwPlJl bmRlciBhIGNhbGVuZGFyIHdpdGggb25lIG9yIG1vcmUgYXJ0aWNsZXMgYXMgZXZlbnRzIG9u IGVhY2ggZGF5LiBVc2VmdWwgZm9yIGdpZyBndWlkZXMsICYjODIyMDt3aGF0JiM4MjE3O3Mg b24mIzgyMjE7IG9yIHNjaGVkdWxpbmcuPC9wPgoKCTxoMiBpZD0iZmVhdHVyZXMiPkZlYXR1 cmVzPC9oMj4KCgk8dWw+CgkJPGxpPkZ1bGwtc2l6ZSBvciBtaW5pIGNhbGVuZGFyIGJ5IG1v bnRoIHdpdGggb3B0aW9uYWwgPHNwYW4gY2xhc3M9ImNhcHMiPklTTzwvc3Bhbj4gd2VlayBk aXNwbGF5PC9saT4KCQk8bGk+TmF2aWdhdGlvbjogbmV4dC9wcmV2IG1vbnRoIG9yIG9wdGlv bmFsIGRyb3Bkb3duIG9mIG1vbnRoIC8geWVhci4gUGVybWl0dGVkIHllYXIgcmFuZ2UgY2Fu IGJlIGRldGVybWluZWQgYnkgZmlyc3QvbGFzdCBhcnRpY2xlIG9yIGV4dGVuZGVkIGJ5ICsv LSBOIHllYXJzIGluIGVpdGhlciBkaXJlY3Rpb248L2xpPgoJCTxsaT5PbmUgYXJ0aWNsZSA9 IG9uZSBldmVudCwgbmF0aXZlIHRvIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IHdp dGggdGhlIFBvc3RlZCBkYXRlIGJlaW5nIHRoZSBkYXRlIGl0IGFwcGVhcnMgaW4gdGhlIGNh bGVuZGFyPC9saT4KCQk8bGk+RmlsdGVyIGV2ZW50cyBieSBjYXRlZ29yeSAvIHNlY3Rpb24g LyBhdXRob3IgLyBzdGF0dXMgLyB0aW1lIG9yIGV4cGlyeTwvbGk+CgkJPGxpPk5vbWluYXRl IGEgY3VzdG9tIGZpZWxkIHRvIHNwZWNpZnkgZXZlbnQgZnJlcXVlbmN5ICgxIHdlZWsgb3Ig MTAgZGF5cyBvciAzIG1vbnRocywgZXRjKS4gTXVsdGlwbGUgZnJlcXVlbmNpZXMgY2FuIGJl IGdpdmVuPC9saT4KCQk8bGk+Tm9taW5hdGUgYSBjdXN0b20gZmllbGQgZm9yIGV4Y2x1c2lv bnMgKGEgbGlzdCBvZiBkYXRlcyBvbiB3aGljaCB0aGF0IGV2ZW50IGlzIGNhbmNlbGxlZCku IE9wdGlvbiB0byBlaXRoZXIgc2hvdyBjYW5jZWxsZWQgZXZlbnRzIG9uIHRoYXQgZGF5IHNv IHlvdSBjYW4gc3R5bGUgdGhlbSBkaWZmZXJlbnRseSwgb3IgcmVtb3ZlIHRoZW0gY29tcGxl dGVseTwvbGk+CgkJPGxpPlNob3cgc3Bhbm5lZCBldmVudHMgKG9uZXMgdGhhdCBsYXN0IG1v cmUgdGhhbiBhIGRheSkgYmFzZWQgb24gdGhlIGFydGljbGXigJlzIGV4cGlyeS4gQW55IGV2 ZW50IHRoYXQgZG9lcyA8c3BhbiBjbGFzcz0iY2FwcyI+Tk9UPC9zcGFuPiByZWN1ciBhbmQg aGFzIGEgZnV0dXJlIGV4cGlyeSBjYW4gYmUgdHJlYXRlZCB0aGlzIHdheTwvbGk+CgkJPGxp PkZ1dHVyZSwgZXhwaXJlZCBvciBzdGlja3kgZXZlbnRzIG1heSBiZSBkaXNwbGF5ZWQgaWYg eW91IHdpc2g8L2xpPgoJCTxsaT5TcGVjaWZ5IGhvbGlkYXlzIG9uIGEgcGVyIGNhbGVuZGFy IGJhc2lzIChlaXRoZXIgcmVjdXJyaW5nIGV2ZW50cyAmIzgyMTI7IHdpdGhvdXQgeWVhciAm IzgyMTI7IG9yIHNwZWNpZmljIGhvbGlkYXlzKS4gRGVmaW5lIHRoZSBsaXN0IGVpdGhlciBk aXJlY3RseSBpbiB0aGUgcGx1Z2luIGF0dHJpYnV0ZSBvciBpbiBhIDxjb2RlPiZsdDt0eHA6 dmFyaWFibGUgLyZndDs8L2NvZGU+IG9mIHlvdXIgY2hvaWNlIGFuZCBkZWNpZGUgd2hpY2gg dHlwZXMgb2YgZXZlbnQgYXJlIHRvIGJlIGNhbmNlbGxlZCBkdWUgdG8gaG9saWRheXM8L2xp PgoJCTxsaT5FYWNoIGV2ZW50IGNhbiBiZSBwYXNzZWQgdG8gYSBmb3JtL2NvbnRhaW5lciBz byB5b3UgY2FuIGJ1aWxkIGl0IHlvdXIgd2F5LCBvciB1c2UgdGhlIGJ1aWx0LWluIGh5cGVy bGlua2VkIHRpdGxlLiBTcGFubmVkIGV2ZW50cyBjYW4gYmUgc2VudCB0byBhIHNlcGFyYXRl IGZvcm0gaWYgeW91IHdpc2g8L2xpPgoJCTxsaT5Db25kaXRpb25hbCB0ZXN0cyBmb3IgZXZl bnQgZmxhZ3MgKHJlY3VycmluZywgc3Bhbm5lZCwgY2FuY2VsbGVkLCBob2xpZGF5cykgYW5k IGRhdGVzIHNvIHlvdSBjYW4gYnVpbGQgeW91ciBvd24gbG9naWMgaW4geW91ciBmb3JtL2Nv bnRhaW5lcjwvbGk+CgkJPGxpPkNsYXNzIHNvdXA6IHRhYmxlLSwgcm93LSwgY2VsbC0sIGFu ZCBldmVudC1sZXZlbCBjbGFzc2VzIGZvciBpbmRpY2F0aW5nIGRpZmZlcmVudCBzY2VuYXJp b3MgKHNwYW5uZWQgZXZlbnQsIHJlY3VycmluZyBldmVudCwgY2FuY2VsbGVkIGV2ZW50LCBl dGMpOyBjdXN0b20gY2xhc3NlcyBjYW4gYmUgc3BlY2lmaWVkIGJhc2VkIG9uIGFuIGV2ZW50 PC9saT4KCQk8bGk+VGFnIHRvIG91dHB1dCB2YXJpb3VzIGV2ZW50IG9yIGNhbGVuZGFyIGNo YXJhY3RlcmlzdGljcyAoZS5nLiB0aGUgbW9udGgsIHllYXIsIGNhbGVuZGFyIGlkLCBzZWN0 aW9uIGFuZCBzbyBvbik8L2xpPgoJCTxsaT5UYWcgdG8gb3V0cHV0IHRoZSBjdXJyZW50IGRh dGUvdGltZSAoZm9ybWF0dGVkIGhvdyB5b3UgbGlrZSk8L2xpPgoJPC91bD4KCgk8aDIgaWQ9 ImF1dGhvciI+QXV0aG9yIC8gY3JlZGl0czwvaDI+CgoJPHA+PGEgaHJlZj0iaHR0cDovL3N0 ZWZkYXdzb24uY29tL2NvbW1lbnRGb3JtIj5TdGVmIERhd3NvbjwvYT4uIEpvaW50bHkgZnVu ZGVkIGJ5IGdlbmVyb3VzIGRvbmF0b3JzOiBtcmRhbGUsIHdvb2YsIGpha29iIGFuZCByZW5v YmlyZC4gQmFzZWQgaGVhdmlseSBvbiBtZHBfY2FsZW5kYXIuIEFsbCBwcm9wcyB0byB0aGUg b3JpZ2luYWwgYXV0aG9yIG9mIHRoZSBwbHVnaW4sIGFuZCBvZiBjb3Vyc2UgdGhlIGNsYXNz IHVwb24gd2hpY2ggdGhlIGNhbGVuZGFyIGlzIGJhc2VkLiBBbmQgbm90IGZvcmdldHRpbmcg b3VyIGF3ZXNvbWUgVGV4dHBhdHRlcm4gZGV2cyB3aG8gY29udGludWUgdG8gcHVzaCB0aGlz IGxpdHRsZSA8c3BhbiBjbGFzcz0iY2FwcyI+Q01TPC9zcGFuPiB0byB0aGUgc3RhcnMuPC9w PgoKCTxoMiBpZD0iaW5zdGFsbCI+SW5zdGFsbGF0aW9uIC8gVW5pbnN0YWxsYXRpb248L2gy PgoKCTxwIGNsYXNzPSJyZXF1aXJlZCI+UmVxdWlyZXMgVGV4dHBhdHRlcm4gNC4wLjc8L3A+ CgoJPHA+RG93bmxvYWQgdGhlIHBsdWdpbiBmcm9tIGVpdGhlciA8YSBocmVmPSJodHRwOi8v dGV4dHBhdHRlcm4ub3JnL3BsdWdpbnMvMTA1Mi9zbWRfY2FsZW5kYXIiPnRleHRwYXR0ZXJu Lm9yZzwvYT4sIG9yIHRoZSA8YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vc3ciPnNv ZnR3YXJlIHBhZ2U8L2E+LCBwYXN0ZSB0aGUgY29kZSBpbnRvIHRoZSA8c3BhbiBjbGFzcz0i Y2FwcyI+VFhQPC9zcGFuPiBBZG1pbiAtJmd0OyBQbHVnaW5zIHBhbmUsIGluc3RhbGwgYW5k IGVuYWJsZSB0aGUgcGx1Z2luLiBWaXNpdCB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLnRl eHRwYXR0ZXJuLmNvbS92aWV3dG9waWMucGhwP2lkPTI5MjAwIj5mb3J1bSB0aHJlYWQ8L2E+ IGZvciBtb3JlIGluZm8gb3IgdG8gcmVwb3J0IG9uIHRoZSBzdWNjZXNzIG9yIG90aGVyd2lz ZSBvZiB0aGUgcGx1Z2luLjwvcD4KCgk8cD5UbyB1bmluc3RhbGwsIHNpbXBseSBkZWxldGUg ZnJvbSB0aGUgQWRtaW4gLSZndDsgUGx1Z2lucyBwYWdlLjwvcD4KCgk8aDIgaWQ9Im5hbWlu ZyI+TmFtaW5nIGNvbnZlbnRpb248L2gyPgoKCTxwPkJlZm9yZSBiZWdpbm5pbmcgdGhlcmUm IzgyMTc7cyBhIGxpdHRsZSBiaXQgb2Ygbm9tZW5jbGF0dXJlIHRvIGdldCBvdXQgb2YgdGhl IHdheTo8L3A+CgoJPHVsPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+Y2VsbDwvc3Bhbj4g OiBhIHNwZWNpZmljIGRheSBvbiB0aGUgY2FsZW5kYXIgaW4gYSBwYXJ0aWN1bGFyIG1vbnRo L3llYXI8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+ZXZlbnQ8L3NwYW4+IDogYW4g YXJ0aWNsZS4gSXQmIzgyMTc7cyBiZXN0IHRvIG5vbWluYXRlIGEgZGVkaWNhdGVkIHNlY3Rp b24gZm9yIGV2ZW50cyBzbyBpdCBrZWVwcyB0aGluZ3MgbmVhdGVyIG9uIHlvdXIgY2FsZW5k YXIgYnV0IHlvdSBjYW4gdXNlIGV2ZW50cyBmcm9tIG1vcmUgdGhhbiBvbmUgc2VjdGlvbiBp ZiB5b3Ugd2lzaC4gQW55IGFydGljbGUgd3JpdHRlbiBpbiB0aGUgZ2l2ZW4gc2VjdGlvbihz KSB3aWxsIGFwcGVhciBvbiB0aGUgY2FsZW5kYXIgYXMgbG9uZyBhcyBpdHMgZXhwaXJ5IGhh c24mIzgyMTc7dCBiZWVuIG1ldC4gTW9yZSB0aGFuIG9uZSBldmVudCBtYXkgYXBwZWFyIGlu IGVhY2ggY2VsbDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5ldmVudCBmbGFnPC9z cGFuPiA6IGVhY2ggZXZlbnQgY2FuIGVpdGhlciBiZSBhIHN0YW5kYXJkIDxhIGhyZWY9IiNl dmVudHMiPmV2ZW50PC9hPiwgaXQgY2FuIDxhIGhyZWY9IiNyZWN1ciI+cmVjdXI8L2E+LCBp dCBjYW4gc3BhbiBtb3JlIHRoYW4gb25lIGRheSAoPGEgaHJlZj0iI211bHRpIj5tdWx0aTwv YT4pIGl0IGNhbiBiZSByZW1vdmVkICg8YSBocmVmPSIjY2FuY2VsIj5jYW5jZWw8L2E+KSBv ciBpdCBtYXkgb2NjdXIgb24gYSBob2xpZGF5ICg8YSBocmVmPSIjaG9saWRheXMiPmhvbHM8 L2E+KTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5jYWxpZDwvc3Bhbj4gOiB5b3Ug bWF5IHB1dCBtb3JlIHRoYW4gb25lIGNhbGVuZGFyIG9uIGEgcGFnZS4gSWYgc28sIGVhY2gg b25lIG11c3QgYmUgdW5pcXVlbHkgcmVmZXJlbmNlZCB3aXRoIHRoaXMgY2FsZW5kYXIgSUQ8 L2xpPgoJPC91bD4KCgk8cD5JdCYjODIxNztzIGFsc28gd29ydGggYmVhcmluZyBpbiBtaW5k IHRoZSA8YSBocmVmPSIjZGF0ZXMiPmRhdGUgY2F2ZWF0czwvYT4gdGhhdCBtYXkgd2VsbCBi aXRlIHlvdSBoYXJkLjwvcD4KCgk8aDIgaWQ9InVzYWdlIj5Vc2FnZTogPGNvZGU+Jmx0O3R4 cDpzbWRfY2FsZW5kYXIgLyZndDs8L2NvZGU+PC9oMj4KCgk8cD5QdXQgdGhlIDxjb2RlPiZs dDt0eHA6c21kX2NhbGVuZGFyIC8mZ3Q7PC9jb2RlPiB0YWcgd2hlcmV2ZXIgeW91IHdhbnQg eW91ciBjYWxlbmRhciB0byBhcHBlYXIuIFVzZSBhbnkgb2YgdGhlIGZvbGxvd2luZyBhdHRy aWJ1dGVzIHRvIGNvbnRyb2wgaXRzIG91dHB1dCBkaXNwbGF5IGFuZCB1c2UgdGhlIDxhIGhy ZWY9IiNhdHRzdHlsZXMiPnN0eWxlIGF0dHJpYnV0ZXM8L2E+IHRvIGRldGVybWluZSBob3cg dG8gYXBwbHkgc3R5bGVzIHRvIHRoZSB2YXJpb3VzIGV2ZW50cyBhbmQgY2VsbHMuPC9wPgoK CTxoMyBjbGFzcz0iYXR0cyAiIGlkPSJhdHRyaWJ1dGVzIj5NYWluIGF0dHJpYnV0ZXM8L2gz PgoKCTx1bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnNpemU8L3NwYW4+IDogY2FsZW5k YXIgc2l6ZSwgPGNvZGU+bGFyZ2U8L2NvZGU+IG9yIDxjb2RlPnNtYWxsPC9jb2RlPi4gVGhl IHNtYWxsIGlzIG1vcmUgZ2VhcmVkIHRvd2FyZHMgYSBtaW5pY2FsLCBhbHRob3VnaCBmdW5j dGlvbmFsbHkgdGhlcmUgPGEgaHJlZj0iI3NpemVkaWZmIj5pc24mIzgyMTc7dCBtdWNoIGJl dHdlZW4gdGhlbTwvYT4uIERlZmF1bHQ6IDxjb2RlPmxhcmdlPC9jb2RlPjwvbGk+CgkJPGxp PjxzcGFuIGNsYXNzPSJhdG5tIj50aW1lPC9zcGFuPiA6IHNob3cgPGNvZGU+cGFzdDwvY29k ZT4sIDxjb2RlPmZ1dHVyZTwvY29kZT4sIG9yIDxjb2RlPmFueTwvY29kZT4gZXZlbnQuIERl ZmF1bHQ6IDxjb2RlPmFueTwvY29kZT48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+ ZXhwaXJlZDwvc3Bhbj4gOiBkZWZpbml0aXZlbHkgaGlkZSAoPGNvZGU+MDwvY29kZT4pIG9y IHNob3cgKDxjb2RlPjE8L2NvZGU+KSBleHBpcmVkIGV2ZW50cy4gTGVhdmUgYmxhbmsgdG8g dXNlIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBBZHZhbmNlZCBQcmVmZXJl bmNlIDxjb2RlPlB1Ymxpc2ggZXhwaXJlZCBhcnRpY2xlczwvY29kZT48L2xpPgoJCTxsaT48 c3BhbiBjbGFzcz0iYXRubSI+Zmlyc3RkYXk8L3NwYW4+IDogdGhlIDFzdCBkYXkgb2YgdGhl IHdlZWsgdG8gc2hvdyBpbiB0aGUgY2FsZW5kYXIuIDA9U3VuZGF5LCAxPU1vbmRheSBhbmQg c28gb24gZG93biB0byA2PVNhdHVyZGF5LiBEZWZhdWx0OiA8Y29kZT4wPC9jb2RlPjwvbGk+ CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5kYXlmb3JtYXQ8L3NwYW4+IDogdGhlIHdheSBp biB3aGljaCB0aGUgZGF5IG5hbWVzIGFyZSByZW5kZXJlZC4gQ2hvb3NlIGZyb20gZWl0aGVy IDxjb2RlPkFCQlI8L2NvZGU+ICh0aGUgZGVmYXVsdCkgdG8gc2hvdyB0aGUgZGF5cyBhcyBN b24sIFR1ZSwgV2VkLCBldGMgb3IgPGNvZGU+RlVMTDwvY29kZT4gdG8gcmVuZGVyIHRoZWly IGZ1bGwgbmFtZXMuIEFsdGVybmF0aXZlbHksIHN1cHBseSBhbnkgdmFsaWQgPGEgaHJlZj0i aHR0cDovL3VrMi5waHAubmV0L3N0cmZ0aW1lIj5zdHJmdGltZSgpPC9hPiBjb2RlcyB0byB1 c2UgdGhhdCBpbnN0ZWFkLiBMb2NhbGUtc3BlY2lmaWMgbmFtZXMgYXJlIHJldHVybmVkPC9s aT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPm1vbnRoZm9ybWF0PC9zcGFuPiA6IHRoZSB3 YXkgaW4gd2hpY2ggdGhlIG1vbnRoIG5hbWVzIGFyZSByZW5kZXJlZC4gQ2hvb3NlIGZyb20g ZWl0aGVyIDxjb2RlPkZVTEw8L2NvZGU+ICh0aGUgZGVmYXVsdCkgdG8gc2hvdyB0aGUgZnVs bCBtb250aCBuYW1lcyBvciA8Y29kZT5BQkJSPC9jb2RlPiB0byByZW5kZXIgdGhlaXIgYWJi cmV2aWF0ZWQgbmFtZXMuIEFsdGVybmF0aXZlbHksIHN1cHBseSBhbnkgdmFsaWQgPGEgaHJl Zj0iaHR0cDovL3VrMi5waHAubmV0L3N0cmZ0aW1lIj5zdHJmdGltZSgpPC9hPiBjb2RlcyB0 byB1c2UgdGhhdCBpbnN0ZWFkLiBMb2NhbGUtc3BlY2lmaWMgbmFtZXMgYXJlIHJldHVybmVk PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnNlbGVjdDwvc3Bhbj4gOiB1c2UgYSBz ZWxlY3QgZHJvcGRvd24gZm9yIHJhcGlkIGFjY2VzcyB0byBtb250aHMgb3IgeWVhcnMgaW5z dGVhZCBvZiByZW5kZXJpbmcganVzdCB0aGUgbmFtZXMuIERlZmF1bHQ6IHVuc2V0LCBidXQg eW91IG1heSBtYWtlIGEgKGNvbW1hLXNlcGFyYXRlZCkgbGlzdCBmcm9tIGVpdGhlciA8Y29k ZT5tb250aDwvY29kZT4gb3IgPGNvZGU+eWVhcjwvY29kZT48L2xpPgoJCTxsaT48c3BhbiBj bGFzcz0iYXRubSI+c2VsZWN0YnRuPC9zcGFuPiA6IGJ5IGRlZmF1bHQsIHRoZSBzZWxlY3Qg ZHJvcGRvd25zIHdpbGwgYXV0by1zdWJtaXQgd2hlbiB0aGV5IGFyZSBjaGFuZ2VkLiBJZiB5 b3UgcHJlZmVyIGEgZGVkaWNhdGVkIHN1Ym1pdCBidXR0b24sIGdpdmUgdGhlIHRleHQgeW91 IHdpc2ggdG8gYXBwZWFyIG9uIHRoZSBidXR0b24gaGVyZS4gVGhlIGJ1dHRvbiBoYXMgYSBm aXhlZCBjbGFzcyBvZiA8Y29kZT5zbWRfY2FsX2lucHV0PC9jb2RlPjwvbGk+CgkJPGxpPjxz cGFuIGNsYXNzPSJhdG5tIj5pc293ZWVrczwvc3Bhbj4gOiBzaG93IHRoZSA8c3BhbiBjbGFz cz0iY2FwcyI+SVNPPC9zcGFuPiB3ZWVrIG51bWJlcnMgYXMgYSBjb2x1bW4gYXQgdGhlIHN0 YXJ0IG9mIHRoZSBjYWxlbmRhci4gSWYgdGV4dCBpcyB1c2VkIGluIHRoaXMgYXR0cmlidXRl IGl0IHdpbGwgZW5hYmxlIHRoZSBmZWF0dXJlIGFuZCBiZWNvbWUgdGhlIGhlYWRpbmcgb2Yg dGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5JU088L3NwYW4+IHdlZWsgY29sdW1uLiBUaGUgPGNv ZGU+Zmlyc3RkYXk8L2NvZGU+IHdpbGwgYmUgZm9yZWQgdG8gc3RhcnQgb24gYSBNb25kYXkg YXMgZ292ZXJuZWQgYnkgdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5JU088L3NwYW4+IHNwZWNp ZmljYXRpb24uIERlZmF1bHQ6IHVuc2V0PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0i PnN0YXR1czwvc3Bhbj4gOiBldmVudHMgaW4gdGhpcyBsaXN0IG9mIHN0YXR1cyBhcmUgcHVi bGlzaGVkLiBEZWZhdWx0OiA8Y29kZT5saXZlPC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNs YXNzPSJhdG5tIj5jYXRlZ29yeTwvc3Bhbj4gOiBmaWx0ZXIgZXZlbnRzIGJ5IHRoaXMgbGlz dCBvZiBjYXRlZ29yaWVzLiBEZWZhdWx0IGlzIHRoZSBjdXJyZW50IGdsb2JhbCBjYXRlZ29y eSAoaWYgc2V0LCBlbXB0eSBvdGhlcndpc2UpPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0 bm0iPnNlY3Rpb248L3NwYW4+IDogZmlsdGVyIGV2ZW50cyBieSB0aGlzIGxpc3Qgb2Ygc2Vj dGlvbnMuIERlZmF1bHQgaXMgdGhlIGN1cnJlbnQgc2VjdGlvbjwvbGk+CgkJPGxpPjxzcGFu IGNsYXNzPSJhdG5tIj5hdXRob3I8L3NwYW4+IDogZmlsdGVyIGV2ZW50cyBieSB0aGlzIGF1 dGhvciBSZWFsIE5hbWUuIERlZmF1bHQgaXMgdGhlIGN1cnJlbnQgYXV0aG9yIChpZiBzZXQs IGVtcHR5IG90aGVyd2lzZSk8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+aWQ8L3Nw YW4+IDogdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFuPiBJRCB0byBhcHBseSB0 byB0aGUgdGFibGUgdGhhdCBob2xkcyB0aGUgY2FsZW5kYXIuIFRoaXMgaXMgdGhlIHZhbHVl IG9mIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiB2YXJpYWJsZSA8Y29kZT5j YWxpZDwvY29kZT4gYW5kIGl0cyBkZWZhdWx0IGlzIHVuc2V0LiBFYWNoIGNhbGVuZGFyIG9u IGEgcGFnZSA8YSBocmVmPSIjbmFtaW5nIj5tdXN0IGJlIHVuaXF1ZTwvYT48L2xpPgoJCTxs aT48c3BhbiBjbGFzcz0iYXRubSI+bW9udGg8L3NwYW4+IDogc3RhcnQgdGhlIGNhbGVuZGFy IG9uIHRoaXMgbW9udGggZnJvbSAxIChKYW51YXJ5KSB0byAxMiAoRGVjZW1iZXIpLiBOb3Jt YWwgY2FsZW5kYXIgbmF2aWdhdGlvbiBvdmVycmlkZXMgdGhpcyB2YWx1ZS4gSWYgPGNvZGU+ c3RhdGljPC9jb2RlPiBpcyB1c2VkLCB0aGlzIG1vbnRoIGJlY29tZXMgdGhlIG9ubHkgb25l IHlvdSBtYXkgdmlldy4gSWYgdW5zZXQsIGFuZCBubyA8Y29kZT5tPTwvY29kZT4gdmFsdWUg YXBwZWFycyBvbiB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gbGluZSwgdGhl IGN1cnJlbnQgbW9udGggaXMgdXNlZDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj53 ZWVrPC9zcGFuPiA6IHN0YXJ0IHRoZSBjYWxlbmRhciBkdXJpbmcgdGhlIG1vbnRoIGNvbnRh aW5pbmcgdGhpcyA8c3BhbiBjbGFzcz0iY2FwcyI+SVNPPC9zcGFuPiB3ZWVrIChmcm9tIDEg dG8gNTMpLiBJZ25vcmVkIGlmIDxjb2RlPnN0YXRpYzwvY29kZT4gb3Igb25lIG9mIHRoZSBj YWxlbmRhciBuYXZpZ2F0aW9uIGNvbnRyb2xzIGlzIHVzZWQuIElmIGEgPGNvZGU+dz08L2Nv ZGU+IHZhbHVlIGFwcGVhcnMgb24gdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+ IGxpbmUsIHRoZSBnaXZlbiB3ZWVrIG92ZXJyaWRlcyBhbnkgbW9udGggdmFsdWU8L2xpPgoJ CTxsaT48c3BhbiBjbGFzcz0iYXRubSI+eWVhcjwvc3Bhbj4gOiBzdGFydCB0aGUgY2FsZW5k YXIgYXQgdGhpcyA0LWRpZ2l0IHllYXIuIE5vcm1hbCBjYWxlbmRhciBuYXZpZ2F0aW9uIG92 ZXJyaWRlcyB0aGlzIHZhbHVlLiBJZiA8Y29kZT5zdGF0aWM8L2NvZGU+IGlzIHVzZWQsIHRo aXMgeWVhciBiZWNvbWVzIHRoZSBvbmx5IG9uZSB5b3UgbWF5IHZpZXcuIElmIHVuc2V0LCBh bmQgbm8gPGNvZGU+eT08L2NvZGU+IHZhbHVlIGFwcGVhcnMgb24gdGhlIDxzcGFuIGNsYXNz PSJjYXBzIj5VUkw8L3NwYW4+IGxpbmUsIHRoZSBjdXJyZW50IHllYXIgaXMgdXNlZDwvbGk+ CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj55ZWFyd2lkdGg8L3NwYW4+IDogYSBjb21tYS1z ZXBhcmF0ZWQgbGlzdCB0aGF0IHNwZWNpZmllcyBob3cgbWFueSB5ZWFycyB5b3VyIGNhbGVu ZGFyIHNwYW5zLiBCeSBkZWZhdWx0IGl0IGlzIDxjb2RlPjAsMDwvY29kZT4gd2hpY2ggdXNl cyB0aGUgZWFybGllc3QgKHBvc3RlZCkgZXZlbnQgaW4gdGhlIHNlY3Rpb24gYXMgdGhlIGxv d2VzdCB5ZWFyIGFuZCB0aGUgbGF0ZXN0IChtb2RpZmllZCkgZXZlbnQgaW4gdGhlIHNlY3Rp b24gYXMgdGhlIGxhdGVzdCB5ZWFyLiBZb3Ugd2lsbCBub3QgYmUgcGVybWl0dGVkIHRvIG5h dmlnYXRlIHRoZSBjYWxlbmRhciBvdXRzaWRlIHRoaXMgcmFuZ2UuIFRvIHdpZGVuIHRoZSBy YW5nZSwgc3BlY2lmeSBzb21lIHZhbHVlcywgZm9yIGV4YW1wbGUgPGNvZGU+eWVhcndpZHRo PSZxdW90OzIsNCZxdW90OzwvY29kZT4gd2lsbCBzdWJ0cmFjdCAyIHdob2xlIHllYXJzIGZy b20gdGhlIGVhcmxpZXN0IGV2ZW50IGFuZCBhZGQgNCB3aG9sZSB5ZWFycyB0byB0aGUgbGF0 ZXN0IGV2ZW50LiBJZiB5b3Ugc3BlY2lmeSBhIHNpbmdsZSBudW1iZXIsIHRoYXQgdmFsdWUg d2lsbCBiZSB1c2VkIHRvIGV4cGFuZCB0aGUgcmFuZ2UgZXF1YWxseSBpbiBib3RoIGRpcmVj dGlvbnM8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+Zm9ybTwvc3Bhbj4gOiB1c2Ug dGhpcyA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBmb3JtIHRvIHByb2Nlc3MgZWFj aCBjZWxsLiBJZiB0aGUgY2FsZW5kYXIgdGFnIGlzIHVzZWQgYXMgYSBjb250YWluZXIgaXQg d2lsbCBiZSB1c2VkIGluIHByZWZlcmVuY2UgdG8gdGhlIGZvcm0uIElmIG5laXRoZXIgYXJl IHVzZWQsIHRoZSBkZWZhdWx0IGZvciBhIGxhcmdlIGNhbGVuZGFyIGlzIGEgaHlwZXJsaW5r ZWQgYXJ0aWNsZSB0aXRsZS4gVGhlIHNtYWxsIGNhbGVuZGFyIHJlbmRlcnMgYW4gZW1wdHkg ZXZlbnQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+c3BhbmZvcm08L3NwYW4+IDog eW91IG1heSBlbGVjdCB0byByZW5kZXIgc3Bhbm5lZCBldmVudHMgZGlmZmVyZW50bHkgdG8g c3RhbmRhcmQgZXZlbnRzLiBCeSBkZWZhdWx0IGl0IHVzZXMgdGhlIHNhbWUgPGNvZGU+Zm9y bTwvY29kZT4gYnV0ICYjODIxMjsgaWYgbmVpdGhlciB0aGF0IG5vciB0aGUgY29udGFpbmVy IGFyZSBzcGVjaWZpZWQgJiM4MjEyOyBpdCB3aWxsIHJlbmRlciBhIGh5cGVybGlua2VkIHJp Z2h0LWFycm93IHRvIGluZGljYXRlIGNvbnRpbnVhdGlvbiBvZiB0aGUgcHJldmlvdXMgZGF5 JiM4MjE3O3MgZXZlbnQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+c3RlcGZpZWxk PC9zcGFuPiA6IHRoZSBJRCBvZiBhIGZpZWxkIHdpdGhpbiB3aGljaCBhbiBldmVudCBtYXkg YmUgdG9sZCB0byByZXBlYXQuIE5vdGUgaXQgaXMgdGhlIGZpZWxkJiM4MjE3O3MgSUQgbm90 IGl0cyBuYW1lLCBzbyBmb3IgY3VzdG9tIGZpZWxkcyB5b3UgbXVzdCB1c2UgPGNvZGU+Y3Vz dG9tXzE8L2NvZGU+IG9yIDxjb2RlPmN1c3RvbV8yPC9jb2RlPiBldGMuIFdpdGhvdXQgdGhp cyBhdHRyaWJ1dGUgKGl0cyBkZWZhdWx0KSwgbm8gcmVjdXJyaW5nIGV2ZW50cyBtYXkgYmUg ZGVmaW5lZC4gU2VlIDxhIGhyZWY9IiNyZWN1ciI+cmVjdXJyaW5nIGV2ZW50czwvYT48L2xp PgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+c2tpcGZpZWxkPC9zcGFuPiA6IHRoZSBJRCBv ZiBhIGZpZWxkIGZyb20gd2hpY2ggYXJ0aWNsZXMgbWF5IGJlIGNhbmNlbGxlZCBpZiByZXF1 aXJlZC4gQXMgYWJvdmUsIHRoaXMgaXMgdGhlIElEIChub3QgbmFtZSkgb2YgdGhlIGZpZWxk LiBTcGVjaWZ5IGEgbGlzdCBvZiBkYXRlcyBvbiB3aGljaCB0aGlzIGV2ZW50IHdpbGwgYmUg Y2FuY2VsbGVkLiBTZWUgPGEgaHJlZj0iI2NhbmNlbCI+Y2FuY2VsbGluZyBldmVudHM8L2E+ PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPnNob3dza2lwcGVkPC9zcGFuPiA6IHdo ZW4gYW4gZXZlbnQgaXMgY2FuY2VsbGVkIHlvdSBjYW4gcmVtb3ZlIGl0IGZyb20gdGhlIGNh bGVuZGFyICg8Y29kZT4wPC9jb2RlPikgb3Igc2hvdyBpdCAoPGNvZGU+MTwvY29kZT4pLiBE ZWZhdWx0OiA8Y29kZT4wPC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5z aG93c3Bhbm5lZDwvc3Bhbj4gOiBldmVudHMgd2l0aCBleHBpcnkgdGltZXMgbGF0ZXIgdGhh biB0aGVpciBwb3N0ZWQgZGF0ZSBtYXkgYmUgcmVuZGVyZWQgYWNyb3NzIG11bHRpcGxlIGNl bGxzLiBJZiB5b3UgZG8gbm90IHdhbnQgdGhpcyBmZWF0dXJlIHlvdSBjYW4gdHVybiBpdCBv ZmYgKDxjb2RlPjA8L2NvZGU+KS4gRGVmYXVsdDogPGNvZGU+MTwvY29kZT48L2xpPgoJCTxs aT48c3BhbiBjbGFzcz0iYXRubSI+aG9saWRheXM8L3NwYW4+IDogbGlzdCBvZiBkYXRlcyB0 aGF0IGFyZSBkZWNyZWVkIGFzIGhvbGlkYXlzLiBFdmVudHMgY2FuIGJlIHNjaGVkdWxlZCBv biBob2xpZGF5cyBidXQgbWF5IG5vdCByZWN1ciBvciBzcGFuIGEgaG9saWRheSB1bmxlc3Mg eW91IGV4cGxpY2l0bHkgc2F5IHNvIHZpYSB0aGUgPGNvZGU+aG9saWRheWZsYWdzPC9jb2Rl PiBhdHRyaWJ1dGUuIFlvdXIgbGlzdCBvZiBkYXRlcyBtYXkgYmUgZGVmZXJyZWQgdG8gYSA8 Y29kZT4mbHQ7dHhwOnZhcmlhYmxlIC8mZ3Q7PC9jb2RlPiBpbiB3aGljaCBjYXNlIGRlZmlu ZSB5b3VyIGxpc3QgaW4gYSBuYW1lZCB2YXJpYWJsZSBhbmQgdXNlIDxjb2RlPmhvbGlkYXlz PSZxdW90O3R4cHZhcjpteV92YXJfbmFtZSZxdW90OzwvY29kZT4gdG8gcmVhZCB0aGVtIGlu dG8gdGhlIHBsdWdpbjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5ob2xpZGF5Zmxh Z3M8L3NwYW4+IDogcGVybWl0IGNlcnRhaW4gPGEgaHJlZj0iI25hbWluZyI+ZXZlbnQgZmxh Z3M8L2E+IHRvIGJlIHNjaGVkdWxlZCBvbiBob2xpZGF5cy4gRGVmYXVsdDogPGNvZGU+ZXZl bnQ8L2NvZGU+IChpLmUuIGEgc3RhbmRhcmQgb25lLW9mZiBldmVudCkgYnV0IG90aGVycyBt YXkgYmUgbGlzdGVkIGFzIHdlbGwuIENob29zZSBmcm9tIDxjb2RlPmV2ZW50PC9jb2RlPiwg PGNvZGU+cmVjdXI8L2NvZGU+IG9yIDxjb2RlPm11bHRpPC9jb2RlPjwvbGk+CgkJPGxpPjxz cGFuIGNsYXNzPSJhdG5tIj5saW5rcG9zdGVkPC9zcGFuPiAoPHNwYW4gY2xhc3M9InJlcXVp cmVkIj5vbmx5IG9uIHNtYWxsIGNhbGVuZGFyczwvc3Bhbj4pIDogZWFjaCBjZWxsIHRoYXQg Y29udGFpbnMgYW4gPGEgaHJlZj0iI25hbWluZyI+ZXZlbnQgZmxhZzwvYT4gb2YgdGhlIGdp dmVuIHR5cGUocykgd2lsbCBoYXZlIGl0cyBkYXkgbnVtYmVyIGxpbmtlZCB0byB0aGUgZXZl bnQmIzgyMTc7cyB0cnVlIHN0YXJ0IGRhdGUgaW5zdGVhZCBvZiB0aGUgY2VsbCYjODIxNztz IGRhdGUuIFRodXMsIGlmIHlvdSBoYXZlIGEgd2Vla2x5IGV2ZW50IHRoYXQgc3RhcnRzIG9u IHRoZSAyMHRoIERlY2VtYmVyIDIwMDgsIHNldHRpbmcgPGNvZGU+bGlua3Bvc3RlZD0mcXVv dDtyZWN1ciZxdW90OzwvY29kZT4gd2lsbCBjYXVzZSB0aGUgbGluayB0byBzaG93IDxjb2Rl PmRhdGU9MjAwOC0xMi0yMDwvY29kZT4gZWFjaCB3ZWVrLiBUaGlzIGFsbG93cyB5b3UgdG8g YWx3YXlzIGxpbmsgdG8gYSB2YWxpZCBhcnRpY2xlL2V2ZW50LiBXaXRob3V0IGxpbmtwb3N0 ZWQsIHRoZSBkYXRlcyB3b3VsZCBiZSAyMDA4LTEyLTIwLCAyMDA4LTEyLTI3LCAyMDA5LTAx LTAzLCBhbmQgc28gb24uIERlZmF1bHQ6IDxjb2RlPnJlY3VyLCBtdWx0aSwgbXVsdGlwcmV2 LCBtdWx0aWxhc3Q8L2NvZGU+IChpLmUuIGFueSByZWN1cnJpbmcgb3Igc3Bhbm5lZCBldmVu dCkuIE5vdGUgdGhhdCBpZiBtb3JlIHRoYW4gb25lIGV2ZW50IG9jY3VycyBpbiB0aGUgY2Vs bCwgdGhlIGxpbmsgd2lsbCBvbmx5IGJlIHRvIHRoZSBmaXJzdCBkYXRlIHRoZSBwbHVnaW4g ZmluZHM8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+c3RhdGljPC9zcGFuPiA6IGZv cmNlIHRoZSBjYWxlbmRhciB0byBiZSBmaXhlZCB0byBvbmUgbW9udGgveWVhciAoaS5lLiBu byBuYXZpZ2F0aW9uKS4gTW9udGggYW5kIHllYXIgZGVjaWRlZCBieSBhdHRyaWJ1dGVzIDxj b2RlPm1vbnRoPC9jb2RlPiBhbmQgPGNvZGU+eWVhcjwvY29kZT4gb3IgJiM4MjEyOyBpZiBv bWl0dGVkIGFuZCBubyA8Y29kZT5tPTwvY29kZT4gYW5kIDxjb2RlPnk9PC9jb2RlPiA8c3Bh biBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiB2YXJpYWJsZXMgYXJlIHNldCAmIzgyMTI7IHRo ZSBjdXJyZW50IGRhdGUgd2lsbCBiZSB1c2VkPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0 bm0iPmdtdDwvc3Bhbj4gOiByZXR1cm4gZWl0aGVyIGxvY2FsIHRpbWUgKDxjb2RlPjA8L2Nv ZGU+KSBhY2NvcmRpbmcgdG8gdGhlIHRpbWUgem9uZSBzZXQgaW4gQmFzaWMgUHJlZnMsIG9y IDxzcGFuIGNsYXNzPSJjYXBzIj5HTVQ8L3NwYW4+IHRpbWUgKDxjb2RlPjE8L2NvZGU+KS4g RGVmYXVsdDogPGNvZGU+MDwvY29kZT48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+ bGFuZzwvc3Bhbj4gOiBhbiA8c3BhbiBjbGFzcz0iY2FwcyI+SVNPPC9zcGFuPiBsYW5ndWFn ZSBjb2RlIHRoYXQgZm9ybWF0cyB0aW1lIHN0cmluZ3Mgc3VpdGFibGUgZm9yIHRoZSBzcGVj aWZpZWQgbGFuZ3VhZ2UgKG9yIGxvY2FsZSkgYXMgZGVmaW5lZCBieSA8YSBocmVmPSJodHRw Oi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT182MzkiPjxzcGFuIGNsYXNzPSJjYXBzIj5J U088L3NwYW4+IDYzOTwvYT4uIERlZmF1bHQ6IHVuc2V0IChpLmUuIHVzZSB0aGUgdmFsdWUg YXMgc3RhdGVkIGluIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IHByZWZzKTwvbGk+ Cgk8L3VsPgoKCTxoMyBjbGFzcz0iYXR0cyAiIGlkPSJhdHRzdHlsZXMiPlN0eWxlIGF0dHJp YnV0ZXM8L2gzPgoKCTxwPk9uY2UgeW91IGhhdmUgdHdlYWtlZCB5b3VyIGJhc2ljIGNhbGVu ZGFyIGFzIGRlc2NyaWJlZCBhYm92ZSB5b3UgY2FuIG1vdmUgb250byB0aGUgc3R5bGUgYXR0 cmlidXRlcyBzbyB5b3UgbWF5IGdldCBhdCBlYWNoIGZhY2V0IG9mIHRoZSBjYWxlbmRhciBh bmQgdmlzdWFsbHkgYWx0ZXIgaXQ6PC9wPgoKCTx1bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0 bm0iPmNsYXNzbGV2ZWxzPC9zcGFuPiA6IGNsYXNzZXMgY2FuIGJlIGFwcGxpZWQgYXQgdGhl IGV2ZW50IGxldmVsIChzbyB5b3UgY2FuIGNvbG91ciBlYWNoIGV2ZW50IGluIGEgY2VsbCks IG9yIHRoZSBjZWxsIGxldmVsIChzbyB5b3UgY2FuIGNvbG91ciB0aGUgd2hvbGUgZGF5KSwg b3IgYm90aC4gWW91IG1heSBhbHNvIHByb21vdGUgKGkuZS4gY29weSkgYWxsIGV2ZW50LWxl dmVsIGNsYXNzZXMgdGhhdCBvY2N1ciBpbiBhIGRheSB0byB0aGUgY2VsbCBsZXZlbCBzbyB5 b3UgY2FuIGNvbG91ciB0aGUgY2VsbCBiYXNlZCBvbiB0aGUgZXZlbnRzIHRoYXQgaXQgY29u dGFpbnMuIENvbW1hLXNlcGFyYXRlIGFueSBvZiA8Y29kZT5ldmVudDwvY29kZT4gKGZvciBy ZW5kZXJpbmcgZXZlbnQtbGV2ZWwgc3R5bGVzKSwgPGNvZGU+Y2VsbDwvY29kZT4gKGZvciBy ZW5kZXJpbmcgc3R5bGVzIGF0IHRoZSBjZWxsIGxldmVsKSwgb3IgPGNvZGU+Y2VsbHBsdXM8 L2NvZGU+IChmb3IgY29weWluZyB1bmlxdWUgZXZlbnQgY2xhc3NlcyB0byB0aGUgY2VsbCku IE5vdGUgeW91IHdpbGwgbm90IG5lZWQgdG8gdXNlIDxjb2RlPmNlbGw8L2NvZGU+IGFuZCA8 Y29kZT5jZWxscGx1czwvY29kZT4gdG9nZXRoZXIgYmVjYXVzZSB0aGUgbGF0dGVyIG92ZXJy aWRlcyB0aGUgZm9ybWVyLCBidXQgdGhlcmUmIzgyMTc7cyBubyBoYXJtIGlmIHlvdSBkby4g RGVmYXVsdDogPGNvZGU+Y2VsbCwgZXZlbnQ8L2NvZGU+PC9saT4KCQk8bGk+PHNwYW4gY2xh c3M9ImF0bm0iPmNsYXNzcHJlZml4ZXM8L3NwYW4+IDogYSBjb21tYS1zZXBhcmF0ZWQgbGlz dCBvZiB1cCB0byB0d28gcHJlZml4ZXMgdG8gYXBwbHkgdG8geW91ciBjbGFzcyBuYW1lcy4g VGhlIGZpcnN0IHByZWZpeCBpcyBhcHBsaWVkIHRvIGNlbGwtbGV2ZWwgY2xhc3NlcyBhbmQg dGhlIHNlY29uZCBwcmVmaXggaXMgYXBwbGllZCB0byBldmVudCBsZXZlbCBjbGFzc2VzIHNv IHlvdSBtYXkgZGlzdGluZ3Vpc2ggdGhlbSBpZiB5b3Ugd2lzaC4gSWYgeW91IG9ubHkgc3Bl Y2lmeSBvbmUgcHJlZml4IGl0IHdpbGwgYmUgdXNlZCBmb3IgYm90aCB0eXBlcyBvZiBjbGFz cy4gSWYgeW91IHVzZSA8Y29kZT5jbGFzc3ByZWZpeGVzPSZxdW90OyZxdW90OzwvY29kZT4g dGhlbiBubyBwcmVmaXhlcyB3aWxsIGJlIHVzZWQgYXQgYWxsLiBEZWZhdWx0OiA8Y29kZT5z bWRfY2FsXywgc21kX2NhbF9ldl88L2NvZGU+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0 bm0iPmNsYXNzPC9zcGFuPiA6IHRoZSBjbGFzcyBuYW1lIChwbHVzIGNsYXNzIHByZWZpeCkg dG8gYXBwbHkgdG8gdGhlIGNhbGVuZGFyIHRhYmxlIGl0c2VsZi4gRGVmYXVsdDogdW5zZXQ8 L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+cm93Y2xhc3M8L3NwYW4+IDogdGhlIGNs YXNzIG5hbWUgKHBsdXMgY2xhc3MgcHJlZml4KSB0byBhcHBseSB0byBlYWNoIHRhYmxlIHJv dy4gRGVmYXVsdDogdW5zZXQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+Y2VsbGNs YXNzPC9zcGFuPiA6IHRoZSBjbGFzcyBuYW1lIChwbHVzIGNsYXNzIHByZWZpeCkgdG8gYXBw bHkgdG8gZWFjaCB0YWJsZSBjZWxsLiBEZWZhdWx0OiB1bnNldDwvbGk+CgkJPGxpPjxzcGFu IGNsYXNzPSJhdG5tIj5lbXB0eWNsYXNzPC9zcGFuPiA6IHRoZSBjbGFzcyBuYW1lIChwbHVz IGNsYXNzIHByZWZpeCkgdG8gYXBwbHkgdG8gYW55IGNlbGxzIHRoYXQgZG9uJiM4MjE3O3Qg Y29udGFpbiBhIGRheSBudW1iZXIgKGkuZS4gdGhlIGJsYW5rIGNlbGxzIGF0IHRoZSBzdGFy dCBhbmQgZW5kIG9mIGEgbW9udGgpLiBEZWZhdWx0OiA8Y29kZT5lbXB0eTwvY29kZT48L2xp PgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+aXNvd2Vla2NsYXNzPC9zcGFuPiA6IHRoZSBj bGFzcyBuYW1lIChwbHVzIGNsYXNzIHByZWZpeCkgdG8gYXBwbHkgdG8gZWFjaCBjZWxsIGNv bnRhaW5pbmcgYW4gPHNwYW4gY2xhc3M9ImNhcHMiPklTTzwvc3Bhbj4gd2VlayAoaWYgPGNv ZGU+aXNvd2Vla3M8L2NvZGU+IGlzIHVzZWQpLiBEZWZhdWx0OiA8Y29kZT53ZWVrPC9jb2Rl PjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5uYXZjbGFzczwvc3Bhbj4gOiB0aGUg Y2xhc3MgbmFtZSAocGx1cyBjbGFzcyBwcmVmaXgpIHRvIGFwcGx5IHRvIHRoZSBwcmV2L25l eHQgbW9udGggbmF2aWdhdGlvbiBhcnJvd3MuIElmIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qg aXMgdXNlZCwgdGhlIGZpcnN0IGl0ZW0gd2lsbCBiZSB0aGUgbmFtZSBvZiB0aGUgY2xhc3Mg b24gdGhlIGxpbmsgdG8gdGhlIHByZXZpb3VzIG1vbnRoLCB0aGUgMm5kIGl0ZW0gdG8gdGhl IG5leHQgbW9udGguIElmIGEgc2luZ2xlIHZhbHVlIGlzIHVzZWQsIGJvdGggY2xhc3MgbmFt ZXMgd2lsbCBiZSB0aGUgc2FtZS4gRGVmYXVsdDogPGNvZGU+bmF2cHJldiwgbmF2bmV4dDwv Y29kZT48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+bXljbGFzczwvc3Bhbj4gOiB0 aGUgY2xhc3MgbmFtZSAocGx1cyBjbGFzcyBwcmVmaXgpIHRvIGFwcGx5IHRvIGJvdGggdGhl IG1vbnRoIGFuZCB5ZWFyIGluIHRoZSBjYWxlbmRhciBoZWFkZXIgKGVpdGhlciB0aGUgPGNv ZGU+Jmx0O3NwYW4mZ3Q7PC9jb2RlPiBvciA8Y29kZT4mbHQ7c2VsZWN0Jmd0OzwvY29kZT4g dGFncykuIElmIDxjb2RlPm15d3JhcHRhZzwvY29kZT4gaXMgdXNlZCwgdGhlIGNsYXNzIGlz IGFwcGxpZWQgdG8gdGhlIHdyYXB0YWcgaW5zdGVhZC4gRGVmYXVsdDogdW5zZXQ8L2xpPgoJ CTxsaT48c3BhbiBjbGFzcz0iYXRubSI+ZXZlbnRjbGFzc2VzPC9zcGFuPiA6IGEgY29tbWEt c2VwYXJhdGVkIGxpc3Qgb2YgaXRlbXMgdG8gYWRkIGFzIGNsYXNzZXMgdG8gZWFjaCBldmVu dCAoZWFjaCBwcmVmaXhlZCB3aXRoIHRoZSBldmVudCBwcmVmaXgpLiBJdCBkZWZhdWx0cyB0 byA8Y29kZT5jYXRlZ29yeTwvY29kZT4gc28gaXQgYWRkcyB0aGUgQ2F0ZWdvcnkxIGFuZCAy IG5hbWVzIGFzIGNsYXNzIGlkZW50aWZpZXJzIHRvIGVhY2ggZXZlbnQuIFRodXMsIG91dCBv ZiB0aGUgYm94LCB5b3UgY2FuIHN0eWxlIGV2ZW50cyBieSBjYXRlZ29yeS4gPGRpdiBjbGFz cz0iYnJlYWsiPklmIHlvdSB3aXNoIHRvIGV4dGVuZCBvciBhbHRlciB0aGlzLCBqdXN0IGdp dmUgYSBsaXN0IG9mIGZpZWxkcyB0aGF0IHlvdSB3YW50IHRvIGFwcGx5IHRvIHRoZSBldmVu dCAoZS5nLiA8Y29kZT5ldmVudGNsYXNzZXM9JnF1b3Q7SUQsIEF1dGhvcklELCBjdXN0b21f NSZxdW90OzwvY29kZT4gd291bGQgYWRkIHRocmVlIGNsYXNzZXMgdG8gZWFjaCBldmVudCBj b3JyZXNwb25kaW5nIHRvIHRoZSBldmVudCYjODIxNztzIElELCBpdHMgYXV0aG9yIChsb2dp bikgbmFtZSBhbmQgdGhlIGNvbnRlbnRzIG9mIGN1c3RvbV81KS4gT2YgY291cnNlLCBpZiB5 b3UgdXNlIDxjb2RlPmNlbGxwbHVzPC9jb2RlPiBtb2RlIHRoZXNlIGNsYXNzZXMgd2lsbCBi ZSBjb3BpZWQgdG8gdGhlIGNlbGwgbGV2ZWwuIDwvZGl2PjxkaXYgY2xhc3M9ImJyZWFrIj5T b21lIHNwZWNpYWwgbmFtZXMgZXhpc3Q6IDxjb2RlPmNhdGVnb3J5PC9jb2RlPiByZXR1cm5z IGJvdGggQ2F0ZWdvcnkxIGFuZCBDYXRlZ29yeTIgKGlmIHNldCk7IDxjb2RlPmdjYXQ8L2Nv ZGU+IHdpbGwgcmV0dXJuIHRoZSBjdXJyZW50ICYjODIxNjtnbG9iYWwmIzgyMTc7IGNhdGVn b3J5IChpZiBjdXJyZW50bHkgZmlsdGVyaW5nIGJ5IGNhdGVnb3J5KTsgPGNvZGU+YXV0aG9y PC9jb2RlPiByZXR1cm5zIHRoZSBhdXRob3IgSUQgKGlmIGN1cnJlbnRseSBmaWx0ZXJpbmcg YnkgYXV0aG9yKTsgPGNvZGU+c2VjdGlvbjwvY29kZT4gZ2l2ZXMgdGhlIGN1cnJlbnQgc2Vj dGlvbjwvZGl2PjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5ldmVudHdyYXB0YWc8 L3NwYW4+IDogdGhlIChYKUhUTUwgdGFnLCB3aXRob3V0IGl0cyBicmFja2V0cywgdG8gd3Jh cCBlYWNoIGV2ZW50IHdpdGguIERlZmF1bHQ6IDxjb2RlPnNwYW48L2NvZGU+PC9saT4KCQk8 bGk+PHNwYW4gY2xhc3M9ImF0bm0iPm15d3JhcHRhZzwvc3Bhbj4gOiB0aGUgKFgpSFRNTCB0 YWcsIHdpdGhvdXQgaXRzIGJyYWNrZXRzLCB0byB3cmFwIGFyb3VuZCA8ZW0+Ym90aDwvZW0+ IG1vbnRoICsgeWVhciBkcm9wZG93biBzZWxlY3QgbGlzdHMgYW5kIG9wdGlvbmFsIHN1Ym1p dCBidXR0b24gKGl0IHdyYXBzIHRoZSBsb3QsIGNvbWJpbmVkKS4gRGVmYXVsdDogdW5zZXQ8 L2xpPgoJPC91bD4KCgk8aDIgaWQ9ImV2ZW50cyI+U3RhbmRhcmQgZXZlbnRzPC9oMj4KCgk8 cD5Ob3JtYWwsIGVtcHR5IGNlbGxzIGRvbiYjODIxNzt0IGhhdmUgYSBjbGFzcyBhc3NpZ25l ZCB0byB0aGVtIHVubGVzcyB5b3Ugc3BlY2lmeSBvbmUgd2l0aCA8Y29kZT5jZWxsY2xhc3M8 L2NvZGU+LiBBbnkgY2VsbCB0aGF0IGNvbnRhaW5zIGFuIGV2ZW50IChvZiBhbnkgdHlwZSkg aXMgZmlyc3QgZ2l2ZW4gdGhlIGZsYWcgPGNvZGU+ZXZlbnQ8L2NvZGU+IChwbHVzIHRoZSBj bGFzcy1sZXZlbCBwcmVmaXgpLiBJZiB0aGF0IGNlbGwgZmFsbHMgb24gYSBob2xpZGF5LCBp dCBpcyBhbHNvIGdpdmVuIHRoZSBjbGFzcyA8Y29kZT5ob2xzPC9jb2RlPi4gVGhlIHZhcmlv dXMgb3RoZXIgZmxhZ3MgKGFzIGRldGFpbGVkIGJlbG93KSBhcmUgdGhlbiBhZGRlZCB0byB0 aGlzIGRlcGVuZGluZyBvbiB0aGUgc3BlY2lmaWMgbmF0dXJlIG9mIHRoZSBldmVudC4gSW4g YWRkaXRpb24sIHRoZSBjdXJyZW50IGRheSBpcyBnaXZlbiB0aGUgY2xhc3MgbmFtZSA8Y29k ZT50b2RheTwvY29kZT4gKHBsdXMgY2xhc3MgcHJlZml4KS48L3A+CgoJPGgyIGlkPSJyZWN1 ciI+UmVjdXJyaW5nIGV2ZW50czwvaDI+CgoJPHA+SWYgeW91IGhhdmUgbm9taW5hdGVkIGFu IGFydGljbGUgZmllbGQgYXMgeW91ciA8Y29kZT5zdGVwZmllbGQ8L2NvZGU+IHlvdSBtYXkg ZW50ZXIgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBmcmVxdWVuY2llcyBhdCB3aGljaCB0 aGlzIGV2ZW50IGlzIHRvIGJlIHJlcGVhdGVkLiBUaGUgZm9ybWF0IG9mIHRoZSByZXBldGl0 aW9uIGlzICYjODIyMDtudW1iZXIgaW50ZXJ2YWwmIzgyMjE7LCBlLmcuIDxjb2RlPjQgd2Vl a3M8L2NvZGU+IG9yIDxjb2RlPjEwIGRheXM8L2NvZGU+IG9yIDxjb2RlPjYgbW9udGhzPC9j b2RlPi4gVGhlIHBsdWdpbiB3aWxsIGRvIGl0cyBiZXN0IHRvIGZpZ3VyZSBvdXQgd2hhdCB5 b3UgbWVhbi4gQ29uc3VsdCA8YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUv dGFyL21hbnVhbC9odG1sX25vZGUvRGF0ZS1pbnB1dC1mb3JtYXRzLmh0bWwiPmRhdGUgaW5w dXQgZm9ybWF0czwvYT4gZm9yIHNvbWUgbW9yZSBleGFtcGxlcyAobGlrZSAmIzgyMjA7dGhp cmQgbW9uZGF5JiM4MjIxOyBhbmQgc28gb24pLjwvcD4KCgk8cD5JZiB5b3UgY2FuIGZpbmQg YSB1c2UgZm9yIGl0LCB5b3UgbWF5IHNwZWNpZnkgbXVsdGlwbGUgZnJlcXVlbmNpZXMsIGZv ciBleGFtcGxlIDxjb2RlPjMgZGF5cywgMSB3ZWVrPC9jb2RlPi4gU28geW91IHdvdWxkIHNl ZSB0aGF0IGV2ZW50IG9uIHRoZSBmaXJzdCBkYXksIHRoZW4gdGhlIDNyZCwgNnRoLCA3dGgs IDl0aCwgMTJ0aCwgMTR0aCwgMTV0aCwgMTh0aCwgMjFzdCwgMjR0aCYjODIzMDsgYW5kIHNv IG9uIGRheXMgdGhlcmVhZnRlci4gTm90ZSB0aGF0IHRoZSBldmVudCBvbmx5IG9jY3VycyBv bmNlIG9uIHRoZSAyMXN0IGRheSBldmVuIHRob3VnaCB0aGUgdHdvIGZyZXF1ZW5jaWVzIGNs YXNoLjwvcD4KCgk8cD5UaGUgcmVwZXRpdGlvbiB3aWxsIGNvbnRpbnVlIGZvcmV2ZXIgdW5s ZXNzIHlvdSBzcGVjaWZ5IHRoYXQgdGhlIGV2ZW50IGV4cGlyZXMgYnkgc2V0dGluZyBhbiBl eHBpcnkgdGltZSB1bmRlciB0aGUgYXJ0aWNsZSYjODIxNztzIDxlbT5Nb3JlPC9lbT4gYXJl YS4gRWFjaCBjZWxsIHRoYXQgY29udGFpbnMgYSByZWN1cnJpbmcgZXZlbnQgd2lsbCBiZSBm bGFnZ2VkIHdpdGggPGNvZGU+cmVjdXI8L2NvZGU+IChwbHVzIHRoZSBjZWxsLWxldmVsIGNs YXNzIHByZWZpeCkuPC9wPgoKCTxoMiBpZD0iY2FuY2VsIj5DYW5jZWxsaW5nIGV2ZW50czwv aDI+CgoJPHA+UGxhbnMgY2hhbmdlIGFuZCB5b3UgbWF5IGZpbmQgdGhhdCBhIGdpZyBoYXMg dG8gYmUgY2FuY2VsbGVkIGZvciB3aGF0ZXZlciByZWFzb24uIFBlcmhhcHMgeW91IGFkdmVy dGlzZSBhIHdlZWtseSBib290IGZhaXIgYnV0IHRoZSBmaWVsZCBpcyB3YXRlcmxvZ2dlZCBv bmUgd2Vlay4gTm8gcHJvYmxlbS4gTm9taW5hdGUgYSA8Y29kZT5za2lwZmllbGQ8L2NvZGU+ IGluIHlvdXIgPGNvZGU+Jmx0O3R4cDpzbWRfY2FsZW5kYXIgLyZndDs8L2NvZGU+IHRhZyBh bmQgZW50ZXIgdGhlIGRhdGUgb2YgdGhlIGNhbmNlbGxlZCBldmVudC48L3A+CgoJPHA+VXNl IGFueSBhY2NlcHRhYmxlIGZvcm1hdCwgYnV0IGRlcml2YXRpdmVzIG9mIGRkLW1vbnRobmFt ZS15eXl5IG9yIG1vbnRobmFtZS1kZC15eXl5IGFyZSB0aGUgbW9zdCB1bmFtYmlndW91cyB0 byBhdm9pZCB0aGUgcHJvYmxlbXMgb2YgaG93IHRoZSBwbHVnaW4gbWlnaHQgaW50ZXJwcmV0 IDxjb2RlPjEvNTwvY29kZT4gYXMgSmFuIDV0aCBvciBNYXkgMXN0LiBZb3UgY2FuIHNwZWNp ZnkgYXMgbWFueSBjYW5jZWxsYXRpb25zIGFzIHlvdSBsaWtlOyBjb21tYS1zZXBhcmF0ZSBl YWNoIG9uZS48L3A+CgoJPHA+QnkgZGVmYXVsdCB0aGUgZXZlbnRzIHdpbGwgbm90IGFwcGVh ciBvbiB0aGUgY2FsZW5kYXIuIFRoZXJlIHdpbGwgYmUgYSBjb25zcGljdW91cyBob2xlIGlu IHRoZSByZXBldGl0aW9uLCB0aG91Z2ggdGhlIGNlbGwgY2xhc3Mgd2lsbCBiZSBmbGFnZ2Vk IGFzIDxjb2RlPnJlY3VyPC9jb2RlPiBhbmQgPGNvZGU+Y2FuY2VsPC9jb2RlPiBzbyB5b3Ug bWF5IHN0eWxlIHRoZSBib3guIElmIHlvdSBzd2l0Y2ggPGNvZGU+c2hvd3NraXBwZWQ9JnF1 b3Q7MSZxdW90OzwvY29kZT4gdGhlIGV2ZW50IHdpbGwgYXBwZWFyIGluIHRoZSBjZWxsIGFz IG5vcm1hbDsgdGhlIHNhbWUgPGNvZGU+Y2FuY2VsPC9jb2RlPiBhbmQgPGNvZGU+cmVjdXI8 L2NvZGU+IGNsYXNzZXMgd2lsbCBhcHBseSB0byB0aGUgY2VsbCBhbmQgdGhlIGV2ZW50IHNv IHlvdSBtYXkgc3R5bGUgb25lIG9yIGJvdGguPC9wPgoKCTxwPkl0IGlzIHdvcnRoIG5vdGlu ZyB0aGF0IDxlbT5ldmVudCBmbGFnczwvZW0+IGFsd2F5cyB0YWtlIHRoZSAmIzgyMTY7Y2xh c3MmIzgyMTc7ICgxc3QpIHByZWZpeCAmIzgyMTI7IHdoZXRoZXIgdGhleSBhcHBlYXIgYXQg dGhlIGNsYXNzIG9yIGNlbGwgbGV2ZWxzLiBUaGlzIGlzIHNvIHlvdSBjYW4gYXBwbHkgYSBz aW1pbGFyIGNvbG91ciB0byB0aGUgZmxhZ3MgaWYgeW91IHdpc2ggb3IgdGFyZ2V0IHRoZW0g dmlhIHRoZWlyIHdyYXAgdGFnLiBUaGUgb25seSBjbGFzc2VzIHRoYXQgdGFrZSB0aGUgJiM4 MjE2O2V2ZW50JiM4MjE3OyAoMm5kKSBwcmVmaXggYXJlIHRoZSBmaWVsZHMgeW91IHNwZWNp ZnkgaW4gPGNvZGU+ZXZlbnRjbGFzc2VzPC9jb2RlPi48L3A+CgoJPGgyIGlkPSJtdWx0aSI+ TXVsdGlwbGUgKHNwYW5uZWQpIGV2ZW50czwvaDI+CgoJPHA+QW55IGV2ZW50IHRoYXQgaGFz IGEgc3RhcnQgZGF0ZSBhbmQgYW4gZXhwaXJ5IGRhdGUgdGhhdCBpcyBhIGRheSBvciBtb3Jl IGxhdGVyLCBhbmQgPGVtPmRvZXMgbm90PC9lbT4gaGF2ZSBhbnkgcmVwZXRpdGlvbiBzZXQg aW4gaXQgPGNvZGU+c3RlcGZpZWxkPC9jb2RlPiwgaXMgZmxhZ2dlZCBhcyBhIDxjb2RlPm11 bHRpPC9jb2RlPi4gQnkgZGVmYXVsdCB0aGUgZmlyc3QgZXZlbnQgaXMgZGlzcGxheWVkIGlu IGZ1bGwgYW5kIGVhY2ggJiM4MjE2O2NvbnRpbnVhdGlvbiYjODIxNzsgZXZlbnQgaXMgc2hv d24gb25seSBhcyBhIHJpZ2h0IGFycm93IGluIHN1YnNlcXVlbnQgY2VsbHMgKG9uIGhvdmVy LCB0aGUgZXZlbnQgdGl0bGUgaXMgZGlzcGxheWVkKS48L3A+CgoJPHA+RXZlbnRzIG1heSBz cGFuIG1vbnRocyBvciB5ZWFycyBhbmQgdGhlIHBsdWdpbiBmaWd1cmVzIGV2ZXJ5dGhpbmcg b3V0IHVzaW5nIHRoZSBmbGFnczsgdGhlIGZpcnN0IGNlbGwgb2YgYSBzcGFubmVkIHNldCBp cyBhIDxjb2RlPm11bHRpZmlyc3Q8L2NvZGU+LCB0aGUgbGFzdCBjZWxsIGlzIGEgPGNvZGU+ bXVsdGlsYXN0PC9jb2RlPiwgZXZlcnkgb3RoZXIgY2VsbCBpcyBhIDxjb2RlPm11bHRpPC9j b2RlPiA8ZW0+ZXhjZXB0PC9lbT4gaWYgdGhlIGV2ZW50IHJvbGxzIG92ZXIgaW50byB0aGUg bmV4dCBtb250aC4gSW4gdGhhdCBjYXNlLCB0aGUgZW50cnkgb24gdGhlIDFzdCBvZiB0aGUg bW9udGggaXMgYSA8Y29kZT5tdWx0aXByZXY8L2NvZGU+IHRvIGluZGljYXRlIGl0IGJlbG9u Z3MgdG8gYSBwcmV2aW91cyBldmVudC4gSWYgdGhlIGZpcnN0IG9mIHRoZSBtb250aCBpcyBp dHNlbGYgdGhlIGxhc3QgZGF5IG9mIHRoZSBldmVudCwgdGhlIDxjb2RlPm11bHRpcHJldjwv Y29kZT4gaXMgZHJvcHBlZCBpbiBmYXZvdXIgb2YgPGNvZGU+bXVsdGlsYXN0PC9jb2RlPi48 L3A+CgoJPHA+WW91IG1heSBzd2l0Y2ggb2ZmIHRoaXMgYmVoYXZpb3VyIGNvbXBsZXRlbHkg d2l0aCB0aGUgPGNvZGU+c2hvd3NwYW5uZWQ9JnF1b3Q7MCZxdW90OzwvY29kZT4gYXR0cmli dXRlLiBFdmVudHMgdGhhdCBoYXZlIGFuIGV4cGlyeSBhcmUgdGhlbiBqdXN0IGNvbW1vbiBl dmVudHMuPC9wPgoKCTxwPllvdSBtYXkgZWxlY3QgdG8gcHJvY2VzcyAmIzgyMTY7Y29udGlu dWF0aW9uJiM4MjE3OyBjZWxscyB3aXRoIGEgc2VwYXJhdGUgZm9ybSAoY2FsbGVkIGEgPGNv ZGU+c3BhbmZvcm08L2NvZGU+IGJlY2F1c2UgJiM4MjE2O2NvbnRmb3JtJiM4MjE3OyBkaWRu JiM4MjE3O3Qgc291bmQgdmVyeSBuaWNlISkuIElmIG5vdCwgdGhlIHN0YW5kYXJkIDxjb2Rl PmZvcm08L2NvZGU+IG9yIGNvbnRhaW5lciB3aWxsIGJlIHVzZWQgYW5kIHlvdSB3aWxsIGhh dmUgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGUgZGlmZmVyZW50IG11bHRpIGZsYWdzIHlv dXJzZWxmIHVzaW5nIHRoZSA8YSBocmVmPSIjaWZjYWwiPmNvbmRpdGlvbmFsIHRhZzwvYT4u PC9wPgoKCTxwPllvdSBjYW4gYWxzbyBjYW5jZWwgZGF5cyBvZiBhIHNwYW5uZWQgZXZlbnQg aW4gdGhlIHNhbWUgbWFubmVyIGFzIHlvdSBkbyB3aXRoIDxhIGhyZWY9IiNyZWN1ciI+cmVj dXJyaW5nIGV2ZW50czwvYT4uIFRoZSBjZWxsIGlzIGR1dGlmdWxseSBmbGFnZ2VkIHdpdGgg dGhlIHJlbGV2YW50ICYjODIxNjttdWx0aSYjODIxNzsgZmxhZyArIDxjb2RlPmNhbmNlbDwv Y29kZT4uIE5vdGUgeW91IG1heSA8ZW0+bm90PC9lbT4gY2FuY2VsIHRoZSBmaXJzdCBkYXkg b2YgdGhlIGV2ZW50LCBiZWNhdXNlIHlvdSBtaWdodCBhcyB3ZWxsIGp1c3QgbW92ZSB0aGUg ZXZlbnQgb25lIGRheSBhbmQgYXBvbG9naXNlITwvcD4KCgk8aDIgaWQ9ImhvbGlkYXlzIj5I b2xpZGF5czwvaDI+CgoJPHA+UHVibGljIGhvbGlkYXlzIG5lZWQgbm90IGJlIGEgbnVpc2Fu Y2UgdG8geW91ciByZWN1cnJpbmcgZXZlbnRzLiBHaXZlIHRoZSBwbHVnaW4gYSBsaXN0IGFu ZCBpdCYjODIxNztsbCBtYWtlIHN1cmUgdGhhdCBhbnkgcmVjdXJyaW5nIG9yIG11bHRpIGV2 ZW50cyBhcmUgbm90IHNjaGVkdWxlZCBvbiB0aG9zZSBkYXlzLiBTdGFuZGFyZCBvbmUtb2Zm IGV2ZW50cyBhcmUgcGVybWl0dGVkIGJ5IGRlZmF1bHQgYmVjYXVzZSB5b3UgbWlnaHQgd2Fu dCB0byBvcmdhbmlzZSBhIHNwZWNpYWwgZXZlbnQgb24gdGhhdCBkYXkuPC9wPgoKCTxwPlRo ZSBsaXN0IG9mIGRhdGVzIHlvdSBzcGVjaWZ5IGNhbiBiZSBlbnRlcmVkIGRpcmVjdGx5IGlu IGEgc3RyaW5nIGluIHRoZSA8Y29kZT5ob2xpZGF5czwvY29kZT4gYXR0cmlidXRlIG9yIGlu IGEgPGNvZGU+Jmx0O3R4cDp2YXJpYWJsZSAvJmd0OzwvY29kZT4uIFRoZSBsYXR0ZXIgaXMg bW9yZSBmdW4gc28gbGV0JiM4MjE3O3MgdHJ5IHRoYXQ6PC9wPgoKPHByZSBjbGFzcz0iYmxv Y2siPjxjb2RlIGNsYXNzPSJibG9jayI+Jmx0O3R4cDp2YXJpYWJsZSBuYW1lPSZxdW90O25h dF9ob2xzJnF1b3Q7CiAgICAgdmFsdWU9JnF1b3Q7RGVjIDI1LCBEZWMgMjYsIDMxL0RlYywg SmFuLTEsCiAgICAgICAgTWF5IDQgMjAwOSwgMjAwOS0wOC0zMSZxdW90OyAvJmd0OwombHQ7 dHhwOnNtZF9jYWxlbmRhciBob2xpZGF5cz0mcXVvdDt0eHB2YXI6bmF0X2hvbHMmcXVvdDsg LyZndDsKPC9jb2RlPjwvcHJlPgoKCTxwPlRoZXJlIHlvdSBnbywgYWxsIGRvbmUuIFRoZSBs aXN0IHRoZXJlIHNob3dzIHNvbWUgb2YgdGhlIHZhcmlldHkgYW5kIGJyZWFkdGggb2YgZm9y bWF0cyB0aGF0IHRoZSBwbHVnaW4gYWxsb3dzLiBUaGVyZSBhcmUgbW9yZS4gTm90ZSB0aGF0 IHNvbWUgZXZlbnRzIGhhdmUgYSB5ZWFyIGFuZCBvdGhlcnMgZG9uJiM4MjE3O3QuIFRoZSBv bmVzIHdpdGhvdXQgYSB5ZWFyIG9jY3VyIG9uIHRoZSBzYW1lIGRhdGUgZXZlcnkgeWVhciB3 aGVyZWFzIHRoZSBvbmVzIHdpdGggYSB5ZWFyIHdpbGwgb25seSBvY2N1ciBvbiB0aGF0IHNw ZWNpZmljIGRhdGUuPC9wPgoKCTxwPk9uY2UgeW91ciBkYXRlcyBhcmUgZGVmaW5lZCB5b3Ug Y2FuIGNvbnRyb2wgd2hjaCBldmVudHMgYXJlIGFsbG93ZWQgdG8gZmFsbCBvbiB0aG9zZSBk YXRlcyB2aWEgdGhlIDxjb2RlPmhvbGlkYXlmbGFnczwvY29kZT4uIEp1ZGljaWFsIHVzZSBv ZiB0aGF0IGF0dHJpYnV0ZSBhbmQgdGhlIDxjb2RlPnNob3dzcGFubmVkPC9jb2RlPiwgPGNv ZGU+c2hvd3NraXBwZWQ8L2NvZGU+IGFuZCA8Y29kZT5mb3JtPC9jb2RlPiBvciA8Y29kZT5z cGFuZm9ybTwvY29kZT4gd2l0aCB0aGUgPGEgaHJlZj0iI2lmY2FsIj5jb25kaXRpb25hbCB0 YWc8L2E+IGNhbiBnaXZlIHlvdSBhIHdpZGUgdmFyaWV0eSBvZiB3YXlzIHRvIHN0eWxlIGV2 ZW50cy48L3A+CgoJPHA+SG9saWRheXMgYXJlIGdpdmVuIHRoZSBldmVudCBmbGFnIDxjb2Rl PmhvbHM8L2NvZGU+LCBhbmQgYW55IGV2ZW50IHRoYXQgaXMgbm90IHNwZWNpZmljYWxseSBw ZXJtaXR0ZWQgYnkgdGhlIDxjb2RlPmhvbGlkYXlmbGFnczwvY29kZT4gaXMgYXV0b21hdGlj YWxseSBhc3NpZ25lZCBhIDxjb2RlPmNhbmNlbDwvY29kZT4gZmxhZyBpZiBpdCBmYWxscyBv biBvbmUgb2YgdGhlIGRheXMuPC9wPgoKCTxoMiBpZD0ic2l6ZWRpZmYiPkRpZmZlcmVuY2Vz IGJldHdlZW4gbGFyZ2UgYW5kIHNtYWxsIGNhbGVuZGFyczwvaDI+CgoJPHA+Tm90IGEgbG90 ISBCdXQgdGhlcmUgYXJlIHNvbWUgc3VidGxldGllczo8L3A+CgoJPHVsPgoJCTxsaT5CeSBk ZWZhdWx0LCBubyBldmVudHMgYXJlIHBsYWNlZCBpbiB0aGUgc21hbGwgY2FsZW5kYXIuIFlv dSBjYW4gYWRkIHRoZW0geW91cnNlbGYgaWYgeW91IHdpc2ggYmVjYXVzZSB5b3UgY2FuIHVz ZSB0aGUgc2FtZSBmb3JtL2NvbnRhaW5lciBtZWNoYW5pc20gYXMgdGhlIGxhcmdlIGNhbGVu ZGFyPC9saT4KCQk8bGk+VGhlIG9ubHkgdGhpbmcgcmVuZGVyZWQgaW4gYSBzbWFsbCBjYWxl bmRhciBjZWxsIGlzIHRoZSBjbGFzcyBpbmZvcm1hdGlvbiBzbyB5b3UgY2FuIGNvbG91ciB0 aGUgYm94ZXMgYnkgZXZlbnQ8L2xpPgoJCTxsaT48Y29kZT5jbGFzc2xldmVsczwvY29kZT4g YXJlIGlnbm9yZWQ6IGV2ZXJ5dGhpbmcgaXMgYXV0b21hdGljYWxseSBhc3NpZ25lZCBhdCB0 aGUgY2VsbCBsZXZlbCAoPGNvZGU+ZXZlbnRjbGFzc2VzPC9jb2RlPiBhcmUgc3RpbGwgaG9u b3VyZWQgaWYgeW91IHdpc2ggdG8gdXNlIGEgPGNvZGU+Zm9ybTwvY29kZT4gdG8gcHJvY2Vz cyB0aGVtIHlvdXJzZWxmKTwvbGk+CgkJPGxpPlRoZSBzbWFsbCBjYWxlbmRhciBvdXRwdXRz IHllYXItbW9udGgtZGF5LXRpdGxlIG9yIG1lc3N5IHBlcm1saW5rcyBvbmx5PC9saT4KCTwv dWw+CgoJPHA+QXNpZGUgZnJvbSB0aGF0IHRoZXkmIzgyMTc7cmUgcHJldHR5IG11Y2ggaWRl bnRpY2FsLjwvcD4KCgk8aDIgaWQ9ImRhdGVzIj5EYXRlcywgZ290Y2hhcyBhbmQgaWRpb3N5 bmNyYWNpZXM8L2gyPgoKCTxwPklmIHRoZXJlIHdhcyBvbmUgZ2xvYmFsIHRpbWUgem9uZSB0 aGUgd29ybGQgd291bGQgYmUgc2ltcGxlci4gU2FkbHksIHdlIGFsbCBsaXZlIGluIGRpZmZl cmVudCBwbGFjZXMgYW5kIHRoZSBJbnRlcm5ldCBCZWF0IGhhc24mIzgyMTc7dCByZWFsbHkg dGFrZW4gb2ZmLiBFdmVuIG1vcmUgc2FkbHksIGNlcnRhaW4gdXBwZXIgZWNoZWxvbnMgb2Yg cG93ZXIgZGVjcmVlIHRoYXQgdHdpY2UgYSB5ZWFyIHNvbWUgY291bnRyaWVzIG11c3QgYWx0 ZXIgdGhlaXIgY2xvY2tzIHRvIFNhdmUgRGF5bGlnaHQgKHdoYXRldmVyIHRoYXQgbWVhbnMp LjwvcD4KCgk8cD48c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBkb2VzIGl0cyBiZXN0 IHRvIHNoaWVsZCB5b3UgZnJvbSB0aGlzIG1heWhlbSBieSBhbGxvd2luZyB5b3UgdG8gc3Bl Y2lmeSB5b3VyIGxvY2FsZSwgdGltZSBvZmZzZXQgZnJvbSA8c3BhbiBjbGFzcz0iY2FwcyI+ R01UPC9zcGFuPiwgYW5kIHdoZW4gPHNwYW4gY2xhc3M9ImNhcHMiPkRTVDwvc3Bhbj4gYXBw bGllcyBpbiB5b3VyIHRpbWUgem9uZSAobm90IGZvcmdldHRpbmcgdGhlIHRpbWUgem9uZSBv ZiB5b3VyIHNlcnZlciBpZiBpdCBoYXBwZW5zIHRvIGJlIG5vd2hlcmUgbmVhciB5b3UpLjwv cD4KCgk8cD5BbmQgdGhlcmVpbiBsaWVzIHRoZSBydWIuPC9wPgoKCTxwPkZvciBhIGNhbGVu ZGFyIHN5c3RlbSwgdGhpcyBpcyBzdWItb3B0aW1hbC4gSW4gZmFjdCBpdCYjODIxNztzIGRv d25yaWdodCBhbm5veWluZyBiZWNhdXNlIHdoZW4geW91IHNheSB0aGF0IGFuIGV2ZW50IGlz IGdvaW5nIHRvIG9jY3VyIGF0IDhwbSBpbiBzaXggbW9udGhzJiM4MjE3OyB0aW1lLCBwZXNr eSBEYXlsaWdodCBTYXZpbmdzIG1heSB0aGVuIGJlIGluIGVmZmVjdCBhbmQgeW91ciBldmVu dCB3aWxsIGFwcGVhciBhbiBob3VyICYjODIxNjtvZmYmIzgyMTc7IChpdCBtYXkgbG9vayB3 cm9uZyBpbiB0aGUgYWRtaW4gaW50ZXJmYWNlIGFzIHdlbGwgYXMgaW4geW91ciBjYWxlbmRh ciwgZGVwZW5kaW5nIG9uIHRoZSBzZXR0aW5ncykuPC9wPgoKCTxwPkFsc28sIGlmIHlvdXIg c2VydmVyIG9yIHlvdXIgb2ZmaWNlIGlzIHJlbG9jYXRlZCBhbmQgeW91IGhhdmUgdG8gYWRq dXN0IHRpbWUgem9uZSwgYWxsIHlvdXIgYmVhdXRpZnVsbHkgY3JhZnRlZCBkYXRlcyB3aWxs IGJlIHNoaWZ0ZWQuIFdlbGwsIHRoZXkmIzgyMTc7cmUgbm90IGFjdHVhbGx5IGNoYW5nZWQg aW4gdGhlIGRhdGFiYXNlIHVubGVzcyB5b3UgZWRpdCBhbiBhcnRpY2xlIGFuZCByZS1zYXZl IGl0LCBidXQgdGhleSA8ZW0+YXBwZWFyPC9lbT4gdG8gaGF2ZSBzaGlmdGVkIGJlY2F1c2Ug PHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gaXMgdHJ5aW5nIHRvIHNoaWVsZCB5b3Ug ZnJvbSB0aW1lIGJ1cmVhdWNyYWN5IGluIGEgd29ybGQgZ29uZSBtYWQuPC9wPgoKCTxwPlVu Zm9ydHVuYXRlbHkgdGhlcmUgaXMgbGl0dGxlIHdlIGNhbiBkbyBhYm91dCB0aGlzIGF0IHRo ZSBtb21lbnQgdW50aWwgdGhlIHdheSBkYXRlcyBhcmUgaGFuZGxlZCBpbiA8c3BhbiBjbGFz cz0iY2FwcyI+VFhQPC9zcGFuPiBpcyBjaGFuZ2VkLiBCdXQgdGhlcmUgYXJlIHNvbWUgc2V0 dGluZ3MgdGhhdCB5b3UgY2FuIHBsYXkgd2l0aCB0byB0cnkgYW5kIG1ha2Ugc2Vuc2Ugb2Yg aXQgYWxsLiBOYW1lbHkgdGhlIDxjb2RlPmdtdDwvY29kZT4gYXR0cmlidXRlIHRvIHRoZSBj YWxlbmRhciBwbHVnaW4gYW5kIGFueSBvZiA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFu PiYjODIxNztzIGRhdGUtYmFzZWQgdGFncyBzdWNoIGFzIDxjb2RlPiZsdDt0eHA6cG9zdGVk IC8mZ3Q7PC9jb2RlPiBhbmQgPGNvZGU+Jmx0O3R4cDpleHBpcmVzIC8mZ3Q7PC9jb2RlPi4g U29tZXRpbWVzIGZpZGRsaW5nIHdpdGggdGhhdCBhbmQgdGhlIHRpbWUgem9uZS9EU1QgZmxh Z3Mgd2lsbCBoZWxwLiBPdGhlciB0aW1lcyB5b3UmIzgyMTc7bGwgZ2V0IGluIGEgcmlnaHQg b2xkIG1lc3MuPC9wPgoKCTxwPklmIGFsbCB0aGF0IGZhaWxzLCB0aGUgY29uZGl0aW9uYWwg dGFnIG1heSBiZSBhYmxlIHRvIGhlbHAgeW91IGNvbXBhcmUgY2VydGFpbiBkYXRlcyBhbmQg YXBwbHkgZGlmZmVyZW50IGF0dHJpYnV0ZXMgZGVwZW5kaW5nIG9uIHRoZSBkYXkgb2YgdGhl IHllYXIuIEZhaWxpbmcgdGhhdCwganVzdCB1c2UgPHNwYW4gY2xhc3M9ImNhcHMiPkdNVDwv c3Bhbj4gYW5kIHJlZnVzZSB0byBvYnNlcnZlIDxzcGFuIGNsYXNzPSJjYXBzIj5EU1Q8L3Nw YW4+IDotKTwvcD4KCgk8aDIgaWQ9ImlmY2FsIj5UYWc6IDxjb2RlPiZsdDt0eHA6c21kX2lm X2NhbCZndDs8L2NvZGU+PC9oMj4KCgk8cD5UaGlzIGNvbmRpdGlvbmFsIHRhZyBhbGxvd3Mg eW91ICYjODIxMjsgaW5zaWRlIHlvdXIgY29udGFpbmVyL2Zvcm0vc3BhbmZvcm0gICYjODIx MjsgdG8gdGVzdCBjZXJ0YWluIGNvbmRpdGlvbnMgb2YgdGhlIGN1cnJlbnQgZXZlbnQvY2Vs bC4gQXQgdGhlIG1vbWVudCBpdCBpcyBqdXN0IGZvciB0ZXN0aW5nIHRoZSBldmVudCBmbGFn cywgdGhlIGNhbGVuZGFyIElEIG9yIHZhcmlvdXMgcGFydHMgb2YgdGhlIGRhdGUuIEZvciBl bmhhbmNlZCBjb25kaXRpb25hbCBjaGVja2luZyAocGVyaGFwcyBpbiBjb25qdW5jdGlvbiB3 aXRoIDxhIGhyZWY9IiNjYWxub3ciIHN0eWxlPSJ0ZXh0LWFsaWduOmxlZnQ7Ij50eHA6c21k X2NhbF9ub3cgLyZndDs8L2E+KSwgY29uc2lkZXIgdGhlIHNtZF9pZiBwbHVnaW4uPC9wPgoK CTxoMyBjbGFzcz0iYXR0cyAiIGlkPSJhdHRzaWZjYWwiPkF0dHJpYnV0ZXM8L2gzPgoKCTx1 bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmZsYWc8L3NwYW4+IDogdGhlIGZsYWcocykg eW91IHdhbnQgdG8gdGVzdCwgZWFjaCBzZXBhcmF0ZWQgYnkgYSBjb21tYS4gQ2hvb3NlIGZy b206IDxjb2RlPmV2ZW50PC9jb2RlPiwgPGNvZGU+cmVjdXI8L2NvZGU+LCA8Y29kZT5tdWx0 aWZpcnN0PC9jb2RlPiwgPGNvZGU+bXVsdGlsYXN0PC9jb2RlPiwgPGNvZGU+bXVsdGk8L2Nv ZGU+LCA8Y29kZT5tdWx0aXByZXY8L2NvZGU+LCA8Y29kZT5jYW5jZWw8L2NvZGU+LCBvciA8 Y29kZT5ob2xzPC9jb2RlPi4gRGVmYXVsdDogdW5zZXQ8L2xpPgoJCTxsaT48c3BhbiBjbGFz cz0iYXRubSI+Y2FsaWQ8L3NwYW4+IDogdGhlIGNhbGVuZGFyIElEIHlvdSB3aXNoIHRvIGNo ZWNrIGZvciBhIG1hdGNoLiBEZWZhdWx0OiB1bnNldDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNz PSJhdG5tIj55ZWFyPC9zcGFuPiA6IHRoZSB5ZWFyIHRoZSBjdXJyZW50IGNlbGwgZmFsbHMg aW4uIERlZmF1bHQ6IHVuc2V0PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPm1vbnRo PC9zcGFuPiA6IHRoZSBtb250aCBudW1iZXIgKDEtMTIpIHRoYXQgdGhlIGN1cnJlbnQgY2Vs bCBmYWxscyBpbi4gRGVmYXVsdDogdW5zZXQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRu bSI+d2Vlazwvc3Bhbj4gOiB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPklTTzwvc3Bhbj4gd2Vl ayBudW1iZXIgdGhhdCB0aGUgY3VycmVudCBjZWxsIGZhbGxzIGluLiBEZWZhdWx0OiB1bnNl dDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5kYXk8L3NwYW4+IDogdGhlIGRheSB0 aGUgY3VycmVudCBjZWxsIGZhbGxzIGluLiBEZWZhdWx0OiB1bnNldDwvbGk+CgkJPGxpPjxz cGFuIGNsYXNzPSJhdG5tIj5sb2dpYzwvc3Bhbj4gOiB3aGV0aGVyIHlvdSB3YW50IHRvIGNo ZWNrIGlmIDxlbT5hbGw8L2VtPiB0ZXN0cyB5b3Ugbm9taW5hdGVkIGFyZSB0cnVlIGluIHRo ZSBjdXJyZW50IGNlbGwgKDxjb2RlPmxvZ2ljPSZxdW90O2FuZCZxdW90OzwvY29kZT4pIG9y IDxlbT5hdCBsZWFzdCBvbmU8L2VtPiBvZiB0aGUgdGVzdHMgaXMgdHJ1ZSAoPGNvZGU+bG9n aWM9JnF1b3Q7b3ImcXVvdDs8L2NvZGU+KS4gRGVmYXVsdDogPGNvZGU+YW5kPC9jb2RlPjwv bGk+Cgk8L3VsPgoKCTxwPllvdSBtYXkgY29tYmluZSB0aGUgdGVzdHMgc28sIGZvciBleGFt cGxlLCB5b3UgY2FuIGNoZWNrIGlmIHRoZSBjZWxsIGlzIG9mIGEgY2VydGFpbiB0eXBlIDxz cGFuIGNsYXNzPSJjYXBzIj5BTkQ8L3NwYW4+IGlzIGxhdGVyIHRoYW4gdGhlIDE1dGggb2Yg dGhlIG1vbnRoLjwvcD4KCgk8cD5SdWRpbWVudGFyeSBjb21wYXJhdG9ycyBjYW4gYmUgYXBw bGllZCB0byB0aGUgPGNvZGU+eWVhcjwvY29kZT4sIDxjb2RlPm1vbnRoPC9jb2RlPiBhbmQg PGNvZGU+ZGF5PC9jb2RlPiBhdHRyaWJ1dGVzLiBOb3JtYWxseSB0aGUgdmFsdWUgeW91IHN1 cHBseSB3aWxsIGJlIHRlc3RlZCBmb3IgYW4gZXhhY3QgbWF0Y2ggYnV0IGlmIHlvdSBwcmVm aXggaXQgd2l0aCBvbmUgb2YgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXIgc2VxdWVuY2VzIHRo ZW4gdGhlIGJlaGF2aW91ciBjaGFuZ2VzOjwvcD4KCgk8dWw+CgkJPGxpPjxjb2RlPiZndDs8 L2NvZGU+IHRlc3RzIGlmIGF0dHJpYnV0ZSBpcyA8ZW0+Z3JlYXRlciB0aGFuPC9lbT4gdGhl IGdpdmVuIHZhbHVlIChlLmcuIDxjb2RlPnllYXI9JnF1b3Q7Jmd0OzIwMDgmcXVvdDs8L2Nv ZGU+KTwvbGk+CgkJPGxpPjxjb2RlPiZndDs9PC9jb2RlPiB0ZXN0cyBpZiBhdHRyaWJ1dGUg aXMgPGVtPmdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0bzwvZW0+IHRoZSBnaXZlbiB2YWx1ZSAo ZS5nLiA8Y29kZT5tb250aD0mcXVvdDsmZ3Q7PTcmcXVvdDs8L2NvZGU+KTwvbGk+CgkJPGxp Pjxjb2RlPiZsdDs8L2NvZGU+IHRlc3RzIGlmIGF0dHJpYnV0ZSBpcyA8ZW0+bGVzcyB0aGFu PC9lbT4gdGhlIGdpdmVuIHZhbHVlIChlLmcuIDxjb2RlPmRheT0mcXVvdDsmbHQ7MTUmcXVv dDs8L2NvZGU+KTwvbGk+CgkJPGxpPjxjb2RlPiZsdDs9PC9jb2RlPiB0ZXN0cyBpZiBhdHRy aWJ1dGUgaXMgPGVtPmxlc3MgdGhhbiBvciBlcXVhbCB0bzwvZW0+IHRoZSBnaXZlbiB2YWx1 ZSAoZS5nLiA8Y29kZT5tb250aD0mcXVvdDsmbHQ7PTUmcXVvdDs8L2NvZGU+KTwvbGk+CgkJ PGxpPjxjb2RlPiE8L2NvZGU+IHRlc3RzIGlmIGF0dHJpYnV0ZSBpcyA8ZW0+bm90PC9lbT4g dGhlIGdpdmVuIHZhbHVlIChlLmcuIDxjb2RlPmRheT0mcXVvdDshMTUmcXVvdDs8L2NvZGU+ KTwvbGk+Cgk8L3VsPgoKCTxoMiBpZD0iY2FsaW5mbyI+VGFnOiA8Y29kZT4mbHQ7dHhwOnNt ZF9jYWxfaW5mbyAvJmd0OzwvY29kZT48L2gyPgoKCTxwPkluc2lkZSB5b3VyIGNvbnRhaW5l ci9mb3JtL3NwYW5mb3JtLCB1c2UgdGhpcyB0YWcgdG8gb3V0cHV0IGNlcnRhaW4gaW5mb3Jt YXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgZXZlbnQuPC9wPgoKCTxoMyBjbGFzcz0iYXR0cyAi IGlkPSJhdHRzY2FsaW5mbyI+QXR0cmlidXRlczwvaDM+CgoJPHVsPgoJCTxsaT48c3BhbiBj bGFzcz0iYXRubSI+dHlwZTwvc3Bhbj4gOiB0aGUgdHlwZShzKSBvZiBpbmZvcm1hdGlvbiB5 b3Ugd2FudCB0byByZXR1cm4sIGVhY2ggc2VwYXJhdGVkIGJ5IGEgY29tbWEuIENob29zZSBm cm9tOiA8Y29kZT5mbGFnPC9jb2RlPiwgPGNvZGU+eWVhcjwvY29kZT4sIDxjb2RlPm1vbnRo PC9jb2RlPiwgPGNvZGU+d2VlazwvY29kZT4sIDxjb2RlPmRheTwvY29kZT4sIDxjb2RlPnNl Y3Rpb248L2NvZGU+LCA8Y29kZT5jYXRlZ29yeTwvY29kZT4sIDxjb2RlPmF1dGhvcjwvY29k ZT4sIDxjb2RlPmNhbGlkPC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5q b2luPC9zcGFuPiA6IHRoZSBjaGFyYWN0ZXJzIHlvdSB3YW50IHRvIHVzZSB0byBzZXBhcmF0 ZSBlYWNoIGl0ZW0geW91IGFza2VkIGZvci4gRGVmYXVsdDogYSBzcGFjZTwvbGk+CgkJPGxp PjxzcGFuIGNsYXNzPSJhdG5tIj5odG1sPC9zcGFuPiA6IElmIHNldCB0byA8Y29kZT4xPC9j b2RlPiwgcmV0dXJucyBub3Qgb25seSB0aGUgdmFsdWVzIHlvdSBzcGVjaWZpZWQgYnV0IHRo ZWlyIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IHZhcmlhYmxlIG5hbWVzIGFzIHdl bGwsIGdpdmluZyB5b3UgdGhlIGVudGlyZSBzdHJpbmcgYXMgYSB2YWxpZCBzZXQgb2YgPHNw YW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gcGFyYW1ldGVycyB3aGljaCBjYW4gYmUgYWRk ZWQgdG8gYW4gYW5jaG9yLiBJdCBvdmVycmlkZXMgdGhlIDxjb2RlPmpvaW48L2NvZGU+IGF0 dHJpYnV0ZSBhbmQgc2V0cyBpdCB0byBhbiBhbXBlcnNhbmQuIERlZmF1bHQ6IDxjb2RlPjA8 L2NvZGU+LjxkaXYgY2xhc3M9ImJyZWFrIj5UaGlzIGF0dHJpYnV0ZSBpcyB1c2VmdWwgaWYg eW91IGFyZSBidWlsZGluZyB5b3VyIG93biBjb250ZW50IGluc2lkZSBlYWNoIGNlbGwgdmlh IGEgPGNvZGU+Zm9ybTwvY29kZT4gYW5kIHdpc2ggdG8gbWFpbnRhaW4gdGhlIGN1cnJlbnQg c2VhcmNoIGVudmlyb25tZW50LiBJZiB5b3UgYWxsb3cgcGVvcGxlIHRvIGZpbHRlciBldmVu dHMgYnkgY2F0ZWdvcnkgb3IgYXV0aG9yIHlvdSBjYW4gdXNlIHRoaXMgdG8gcmV0dXJuIHRo ZSAmIzgyMTY7Y3VycmVudCYjODIxNzsgc3RhdGUgb2YgY2VydGFpbiB2YXJpYWJsZXMgc28g eW91IGNhbiBwYXNzIHRoZW0gdG8gdGhlIG5leHQgcGFnZSBhbmQgbWFpbnRhaW4gc3RhdGUu PC9kaXY+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmVzY2FwZTwvc3Bhbj4gOiBl c2NhcGUgPHNwYW4gY2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+IGVudGl0aWVzIHN1Y2ggYXMg PGNvZGU+Jmx0OzwvY29kZT4sIDxjb2RlPiZndDs8L2NvZGU+IGFuZCA8Y29kZT4mYW1wOzwv Y29kZT4gZm9yIHBhZ2UgdmFsaWRhdGlvbiBwdXJwb3Nlcy4gU2V0IHRvIDxjb2RlPmVzY2Fw ZT0mcXVvdDsmcXVvdDs8L2NvZGU+IHRvIHR1cm4gaXQgb2ZmLiBEZWZhdWx0OiA8Y29kZT5o dG1sPC9jb2RlPjwvbGk+Cgk8L3VsPgoKCTxoMiBpZD0iY2Fsbm93Ij5UYWc6IDxjb2RlPiZs dDt0eHA6c21kX2NhbF9ub3cgLyZndDs8L2NvZGU+PC9oMj4KCgk8cD5SZXR1cm4gdGhlIGN1 cnJlbnQgZGF0ZS90aW1lLCBmb3JtYXR0ZWQgaG93ZXZlciB5b3UgcGxlYXNlLiBVc2VmdWwg Zm9yIGV4dHJhY3RpbmcgcGFydHMgb2YgdGhlIGN1cnJlbnQgc3lzdGVtIHRpbWVzdGFtcCB0 byBjb21wYXJlIHRoaW5ncyB2aWEgb3RoZXIgY29uZGl0aW9uYWwgcGx1Z2lucyBvciAmIzgy MTI7IGV2ZW50dWFsbHkgJiM4MjEyOyB0aGUgPGNvZGU+Jmx0O3R4cDpzbWRfaWZfY2FsJmd0 OzwvY29kZT4gdGFnLjwvcD4KCgk8aDMgY2xhc3M9ImF0dHMgIiBpZD0iYXR0c2NhbG5vdyI+ QXR0cmlidXRlczwvaDM+CgoJPHVsPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+Zm9ybWF0 PC9zcGFuPiA6IHRoZSB3YXkgeW91IHdhbnQgdGhlIGRhdGUvdGltZSByZXByZXNlbnRlZC4g VXNlIGFueSB2YWxpZCA8YSBocmVmPSJodHRwOi8vdWsyLnBocC5uZXQvc3RyZnRpbWUiPnN0 cmZ0aW1lKCk8L2E+IHN0cmluZy4gRGVmYXVsdHMgdG8gdGhlIGRhdGUgZm9ybWF0IHlvdSBz ZXQgaW4gQmFzaWMgUHJlZnM8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+Z210PC9z cGFuPiA6IHJldHVybiBlaXRoZXIgbG9jYWwgdGltZSAoPGNvZGU+MDwvY29kZT4pIGFjY29y ZGluZyB0byB0aGUgdGltZSB6b25lIHNldCBpbiBCYXNpYyBQcmVmcywgb3IgPHNwYW4gY2xh c3M9ImNhcHMiPkdNVDwvc3Bhbj4gdGltZSAoPGNvZGU+MTwvY29kZT4pLiBEZWZhdWx0OiA8 Y29kZT4wPC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5sYW5nPC9zcGFu PiA6IGFuIDxzcGFuIGNsYXNzPSJjYXBzIj5JU088L3NwYW4+IGxhbmd1YWdlIGNvZGUgdGhh dCBmb3JtYXRzIHRpbWUgc3RyaW5ncyBzdWl0YWJsZSBmb3IgdGhlIHNwZWNpZmllZCBsYW5n dWFnZSAob3IgbG9jYWxlKSBhcyBkZWZpbmVkIGJ5IDxhIGhyZWY9Imh0dHA6Ly9lbi53aWtp cGVkaWEub3JnL3dpa2kvSVNPXzYzOSI+PHNwYW4gY2xhc3M9ImNhcHMiPklTTzwvc3Bhbj4g NjM5PC9hPi4gRGVmYXVsdDogdW5zZXQgKGkuZS4gdXNlIHRoZSB2YWx1ZSBhcyBzdGF0ZWQg aW4gPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gcHJlZnMpPC9saT4KCTwvdWw+CgoJ PGgyIGNsYXNzPSJleGFtcGxlcyI+RXhhbXBsZXM8L2gyPgoKCTxoMyBpZD0iZWcxIj5FeGFt cGxlIDE8L2gzPgoKCTxwPlRoZSBiZWF1dHkgb2YgdGhlIHBsdWdpbiBpcyB0aGF0IHlvdSBo YXZlIHRoZSBlbnRpcmUgYXJzZW5hbCBvZiA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFu PiB0YWdzIGF2YWlsYWJsZSB0byB5b3UgaWYgeW91IGNob29zZSB0byB1c2UgYSA8Y29kZT5m b3JtPC9jb2RlPi4gVGh1cyB5b3UgY2FuIHNldCB0aGUgYXJ0aWNsZSYjODIxNztzIHN0YXJ0 IGFuZCBlbmQgZGF0ZXMgdG8gdGhlIHNhbWUgZGF5IGFuZCBzZXQgdGhlIHN0YXJ0IGFuZCBl bmQgdGltZXMgdG8gaW5kaWNhdGUgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIGV2ZW50LiBZ b3UgY2FuIHRoZW4gdXNlIHN0YW5kYXJkIDxjb2RlPiZsdDt0eHA6cG9zdGVkIC8mZ3Q7PC9j b2RlPiBvciA8Y29kZT4mbHQ7dHhwOmV4cGlyZXMgLyZndDs8L2NvZGU+IHRhZ3Mgd2l0aCB2 YXJpb3VzIDxjb2RlPmZvcm1hdDwvY29kZT4gc3RyaW5ncyB0byByZW5kZXIgdGhlIGV2ZW50 JiM4MjE3O3MgY3JpdGVyaWEuPC9wPgoKCTxwPlNpbWlsYXJseSB5b3UgY2FuIHVzZSA8Y29k ZT4mbHQ7dHhwOmV4Y2VycHQgLyZndDs8L2NvZGU+IGFuZCA8Y29kZT4mbHQ7dHhwOnRpdGxl IC8mZ3Q7PC9jb2RlPiBvciBvZiBjb3Vyc2UgYW55IGN1c3RvbSBmaWVsZHMgdG8gc2hvdyBh cyBtdWNoIG9yIGFzIGxpdHRsZSBkZXRhaWwgYXMgeW91IGxpa2UuPC9wPgoKPHByZSBjbGFz cz0iYmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+Jmx0O3R4cDpzbWRfY2FsZW5kYXIgc2Vj dGlvbj0mcXVvdDtldmVudHMmcXVvdDsmZ3Q7CiZsdDtkaXYmZ3Q7CiAgIEV2ZW50OiAmbHQ7 dHhwOnBlcm1saW5rJmd0OyZsdDt0eHA6dGl0bGUgLyZndDsmbHQ7L3R4cDpwZXJtbGluayZn dDsKICAgJmx0O2JyIC8mZ3Q7Jmx0O3R4cDpleGNlcnB0IC8mZ3Q7CiZsdDsvZGl2Jmd0Owom bHQ7ZGl2IGNsYXNzPSZxdW90O2V2dGltZSZxdW90OyZndDsKICAgU3RhcnQ6ICZsdDt0eHA6 cG9zdGVkIGZvcm1hdD0mcXVvdDslSDolTSZxdW90OyAvJmd0OwombHQ7L2RpdiZndDsKJmx0 O2RpdiBjbGFzcz0mcXVvdDtldnRpbWUmcXVvdDsmZ3Q7CiAgIEVuZDogJmx0O3R4cDpleHBp cmVzIGZvcm1hdD0mcXVvdDslSDolTSZxdW90OyAvJmd0OwombHQ7L2RpdiZndDsKJmx0Oy90 eHA6c21kX2NhbGVuZGFyJmd0Owo8L2NvZGU+PC9wcmU+CgoJPGgzIGlkPSJlZzIiPkV4YW1w bGUgMjwvaDM+CgoJPHA+VXNpbmcgdGhlIGNvbmRpdGlvbmFsIHRhZyB5b3UgY2FuIHRha2Ug YWN0aW9uIGlmIGNlcnRhaW4gZXZlbnRzIGNvbnRhaW4gY2VydGFpbiBmbGFncy4gVGhpcyBl eGFtcGxlIGFsc28gc2hvdyBhIGNvbXBsZXRlbHkgdXNlbGVzcyBtYW5uZXIgb2YgZW1wbG95 aW5nIDxjb2RlPiZsdDt0eHA6c21kX2NhbF9ub3cgLyZndDs8L2NvZGU+LjwvcD4KCjxwcmUg Y2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPlRpbWUgaXM6ICZsdDt0eHA6c21k X2NhbF9ub3cgZm9ybWF0PSZxdW90OyVUJnF1b3Q7IC8mZ3Q7CiZsdDt0eHA6c21kX2NhbGVu ZGFyIGZvcm09JnF1b3Q7Y2VsbGZvcm0mcXVvdDsKICAgICBzdGVwZmllbGQ9JnF1b3Q7Y3Vz dG9tXzMmcXVvdDsgc2tpcGZpZWxkPSZxdW90O2N1c3RvbV82JnF1b3Q7CiAgICAgc3BhbmZv cm09JnF1b3Q7bXVsdGlzJnF1b3Q7IC8mZ3Q7CjwvY29kZT48L3ByZT4KCgk8cD5JbiBmb3Jt IDxjb2RlPmNlbGxmb3JtPC9jb2RlPjo8L3A+Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNvZGUg Y2xhc3M9ImJsb2NrIj4mbHQ7dHhwOnNtZF9pZl9jYWwgZmxhZz0mcXVvdDtyZWN1ciZxdW90 OyZndDsKICAmbHQ7dHhwOnBlcm1saW5rJmd0OyhSRUNVUlMpJmx0Oy90eHA6cGVybWxpbmsm Z3Q7CiZsdDt0eHA6ZWxzZSAvJmd0OwogICAmbHQ7dHhwOnBlcm1saW5rJmd0OyZsdDt0eHA6 dGl0bGUgLyZndDsmbHQ7L3R4cDpwZXJtbGluayZndDsKICAgJmx0O3R4cDpzbWRfaWZfY2Fs IGZsYWc9JnF1b3Q7bXVsdGlmaXJzdCZxdW90OyZndDsKICAgICAgJmx0O3NwYW4gY2xhc3M9 JnF1b3Q7cmlnaHQmcXVvdDsmZ3Q7LS0mYW1wO3JhcXVvOyZsdDsvc3BhbiZndDsKICAgJmx0 Oy90eHA6c21kX2lmX2NhbCZndDsKJmx0Oy90eHA6c21kX2lmX2NhbCZndDsKPC9jb2RlPjwv cHJlPgoKCTxwPkFuZCBpbiBmb3JtIDxjb2RlPm11bHRpczwvY29kZT46PC9wPgoKPHByZSBj bGFzcz0iYmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+Jmx0O3R4cDpzbWRfaWZfY2FsIGZs YWc9JnF1b3Q7bXVsdGksIG11bHRpcHJldiZxdW90OwogICAgIGxvZ2ljPSZxdW90O29yJnF1 b3Q7Jmd0OwogICAmbHQ7dHhwOnBlcm1saW5rJmd0Oy0tJmFtcDtyYXF1bzstLSZsdDsvdHhw OnBlcm1saW5rJmd0OwombHQ7L3R4cDpzbWRfaWZfY2FsJmd0OwombHQ7dHhwOnNtZF9pZl9j YWwgZmxhZz0mcXVvdDttdWx0aWxhc3QmcXVvdDsmZ3Q7CiAgICZsdDt0eHA6cGVybWxpbmsm Z3Q7CiAgICAgICZsdDtzcGFuIGNsYXNzPSZxdW90O2xlZnQmcXVvdDsmZ3Q7JmFtcDtyYXF1 bzsmbHQ7L3NwYW4mZ3Q7IEVORCAmbHQ7dHhwOnRpdGxlIC8mZ3Q7CiAgICZsdDsvdHhwOnBl cm1saW5rJmd0OwombHQ7L3R4cDpzbWRfaWZfY2FsJmd0Owo8L2NvZGU+PC9wcmU+CgoJPHA+ Tm90aWNlIHRoYXQgPGNvZGU+bXVsdGlmaXJzdDwvY29kZT4gaXMgdGVzdGVkIGluc2lkZSB0 aGUgc2FtZSBmb3JtIGFzIHN0YW5kYXJkIGV2ZW50cy4gVGhpcyBpcyBiZWNhdXNlIG9ubHkg PGVtPmNvbnRpbnVhdGlvbiBzcGFubmVkIGNlbGxzPC9lbT4gYXJlIHBhc3NlZCB0byB0aGUg PGNvZGU+c3BhbmZvcm08L2NvZGU+OyB0aGUgZmlyc3QgZXZlbnQgb2YgYSBzcGFubmVkIGdy b3VwIGlzIGp1c3QgbGlrZSBhbnkgb3RoZXIgZXZlbnQuPC9wPgoKCTxoMyBpZD0iZWczIj5F eGFtcGxlIDM8L2gzPgoKCTxwPllvdSBjb3VsZCB1c2UgdGhlIGNhbGVuZGFyIHRhZ3MgdG8g b3V0cHV0IHZhcmlvdXMgYml0cyBvZiBldmVudCBmbGFnIGluZm9ybWF0aW9uIHRvIGJ1aWxk IHlvdXIgb3duIGNsYXNzIG5hbWVzLiBUaGlzIGV4YW1wbGUgYWxzbyBkZW1vbnN0cmF0ZXMg dGhlIDxjb2RlPmh0bWw8L2NvZGU+IGF0dHJpYnV0ZSBvZiB0aGUgPGNvZGU+Jmx0O3R4cDpz bWRfY2FsX2luZm8gLyZndDs8L2NvZGU+IHRvIGJ1aWxkIHVwIGEgcXVlcnkgc3RyaW5nIHRo YXQgaXMgcGFzc2VkIGFsb25nIHdpdGggYW4gZXZlbnQmIzgyMTc7cyA8Y29kZT5jYXRlZ29y eTE8L2NvZGU+IHdoZW4gYSB2aXNpdG9yIGNsaWNrcyB0aGUgYW5jaG9yLjwvcD4KCgk8cD5U aGlzIGFsbG93cyB5b3VyIHNpdGUgdmlzaXRvcnMgdG8gZmlsdGVyIGV2ZW50cyBieSBjYXRl Z29yeSB3aGlsZSByZXRhaW5pbmcgdGhlIGFiaWxpdHkgdG8gc2hvdyB0aGUgY2FsZW5kYXIg Zm9yIHRoZSBjdXJyZW50IG1vbnRoL3llYXIgYW5kIHNlY3Rpb24gdGhleSBhcmUgdmlld2lu ZyBpbnN0ZWFkIG9mIGRyb3BwaW5nIGJhY2sgdG8gdGhlIGN1cnJlbnQgbW9udGgveWVhciBs aWtlIG90aGVyIGNhbGVuZGFyIHN5c3RlbXMgb2Z0ZW4gZG8uPC9wPgoKPHByZSBjbGFzcz0i YmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+Jmx0O3R4cDpzbWRfY2FsZW5kYXIgaXNvd2Vl a3M9JnF1b3Q7V0VFSyMmcXVvdDsKICAgICB5ZWFyd2lkdGg9JnF1b3Q7MCwyJnF1b3Q7IHNl bGVjdD0mcXVvdDt5ZWFyLCBtb250aCZxdW90OwogICAgIHN0ZXBmaWVsZD0mcXVvdDtjdXN0 b21fMSZxdW90OyBza2lwZmllbGQ9JnF1b3Q7Y3VzdG9tXzImcXVvdDsKICAgICBzaG93c2tp cHBlZD0mcXVvdDsxJnF1b3Q7IGV4cGlyZWQ9JnF1b3Q7MSZxdW90OyZndDsKICAgJmx0O3Nw YW4gY2xhc3M9JnF1b3Q7Y2FsXyZsdDt0eHA6c21kX2NhbF9pbmZvIGpvaW49JnF1b3Q7IGNh bF8mcXVvdDsgLyZndDsmcXVvdDsmZ3Q7CiAgICAgICZsdDt0eHA6cGVybWxpbmsmZ3Q7Jmx0 O3R4cDp0aXRsZSAvJmd0OyZsdDsvdHhwOnBlcm1saW5rJmd0OwogICAgICAmbHQ7YSBocmVm PSZxdW90Oz9jPSZsdDt0eHA6Y2F0ZWdvcnkxCiAgICAgICAgIC8mZ3Q7JmFtcDsmbHQ7dHhw OnNtZF9jYWxfaW5mbyB0eXBlPSZxdW90O3NlY3Rpb24sIHllYXIsCiAgICAgICAgIG1vbnRo LCBjYWxpZCZxdW90OyBodG1sPSZxdW90OzEmcXVvdDsKICAgICAgICAgLyZndDsmcXVvdDsm Z3Q7Jmx0O3R4cDpjYXRlZ29yeTEgdGl0bGU9JnF1b3Q7MSZxdW90OyAvJmd0OyZsdDsvYSZn dDsKICAgJmx0Oy9zcGFuJmd0OwombHQ7L3R4cDpzbWRfY2FsZW5kYXImZ3Q7CjwvY29kZT48 L3ByZT4KCgk8cD5XaGF0IGlzIGFsc28gdXNlZnVsIGFib3V0IHRoZSA8Y29kZT4mbHQ7dHhw OnNtZF9jYWxfaW5mbyAvJmd0OzwvY29kZT4gdGFnIGlzIHRoYXQgaWYgYSBwYXJ0aWN1bGFy IHZhbHVlIGlzIG5vdCBzZXQgaXQgd2lsbCBub3QgYmUgaW5jbHVkZWQgaW4gdGhlIG91dHB1 dC48L3A+CgoJPGgyIGNsYXNzPSJjaGFuZ2Vsb2ciPkNoYW5nZWxvZzwvaDI+CgoJPHVsPgoJ CTxsaT4yMSBEZWMgMDggfCAwLjEgfCBJbml0aWFsIHJlbGVhc2UgKHNwb25zb3JzIG9ubHkp PC9saT4KCQk8bGk+MjIgRGVjIDA4IHwgMC4yIHwgRml4ZWQgYSBmZXcgVzNDIHZhbGlkYXRp b24gaXNzdWVzIGFuZCBhZGRlZCBtb3JlIGRhdGEgdmFsaWRpdHkgY2hlY2tzIDsgYXR0ZW1w dGVkIHRvIGFkZHJlc3MgZGF0ZS90aW1lem9uZSBwcm9ibGVtcyAoYW5kIG1vc3RseSBmYWls ZWQsIHNvIHdyb3RlIGFib3V0IGl0IGluc3RlYWQpIDsgZW5oYW5jZWQgPGNvZGU+c21kX2lm X2NhbDwvY29kZT4gdGFnIHRvIGNoZWNrIGZvciBkYXRlcyBhbmQgPGNvZGU+Y2FsaWQ8L2Nv ZGU+IDsgYWRkZWQgPGNvZGU+ZXNjYXBlPC9jb2RlPiBhdHRyaWJ1dGUgdG8gc21kX2NhbF9p bmZvIHRhZzwvbGk+CgkJPGxpPjIzIERlYyAwOCB8IDAuMjEgfCBDaGFuZ2VkIDxjb2RlPmlz b3dlZWtzPC9jb2RlPiBzbyBhbnkgZ2l2ZW4gdGV4dCBiZWNvbWVzIHRoZSBjb2x1bW4gaGVh ZGluZyA7IGFkZGVkIDxjb2RlPndlZWs8L2NvZGU+IGF0dHJpYnV0ZSB0byBhbGwgcmVsZXZh bnQgdGFncyA7IGFkZGVkIDxjb2RlPmRheTwvY29kZT4gYXR0cmlidXRlIHRvIDxjb2RlPnNt ZF9jYWxfaW5mbzwvY29kZT4gOyBmaXhlZCA8Y29kZT5tb250aDwvY29kZT4gYW5kIDxjb2Rl PnllYXI8L2NvZGU+IGF0dHJpYnV0ZXMgc28gY2FsZW5kYXIgbmF2aWdhdGlvbiBvdmVycmlk ZXMgdGhlbTwvbGk+CgkJPGxpPjI2IERlYyAwOCB8IDAuMjIgfCBFbmhhbmNlZCA8Y29kZT5u YXZjbGFzczwvY29kZT4gOyBhZGRlZCA8Y29kZT5saW5rcG9zdGVkPC9jb2RlPiAoYm90aCB0 aGFua3MgbXJkYWxlKTwvbGk+Cgk8L3VsPgoKCTxwPjwvZGl2PjwvcD4KPCEtLSAtLS0gQkVH SU4gUExVR0lOIENTUyAtLS0gLS0+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiNzbWRfaGVs cCB7IGxpbmUtaGVpZ2h0OjEuNSA7fQojc21kX2hlbHAgY29kZSB7IGZvbnQtd2VpZ2h0OmJv bGQ7IGZvbnQ6IDEwNSUvMTMwJSAiQ291cmllciBOZXciLCBjb3VyaWVyLCBtb25vc3BhY2U7 IGJhY2tncm91bmQtY29sb3I6ICNGRkZGQ0M7fQojc21kX2hlbHAgY29kZS5ibG9jayB7IGZv bnQtd2VpZ2h0Om5vcm1hbDsgYm9yZGVyOjFweCBkb3R0ZWQgIzk5OTsgYmFja2dyb3VuZC1j b2xvcjogI2YwZTY4YzsgZGlzcGxheTpibG9jazsgbWFyZ2luOjEwcHggMTBweCAyMHB4OyBw YWRkaW5nOjEwcHg7IH0KI3NtZF9oZWxwIGE6bGluaywgI3NtZF9oZWxwIGE6dmlzaXRlZCB7 IGNvbG9yOiAjMDBjOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGJvcmRlci1ib3R0b206IDFw eCBzb2xpZCBibHVlOyBwYWRkaW5nLWJvdHRvbToxcHg7fQojc21kX2hlbHAgYTpob3Zlciwg I3NtZF9oZWxwIGE6YWN0aXZlIHsgY29sb3I6IGJsdWU7IHRleHQtZGVjb3JhdGlvbjogbm9u ZTsgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIGJsdWU7IHBhZGRpbmctYm90dG9tOjFweDt9 CiNzbWRfaGVscCBoMSB7IGNvbG9yOiAjMzY5OyBmb250OiAyMHB4IEdlb3JnaWEsIHNhbnMt c2VyaWY7IG1hcmdpbjogMDsgdGV4dC1hbGlnbjogY2VudGVyOyB9CiNzbWRfaGVscCBoMiB7 IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjazsgcGFkZGluZzoxMHB4IDAgMDsgY29s b3I6ICMzNjk7IGZvbnQ6IDE3cHggR2VvcmdpYSwgc2Fucy1zZXJpZjsgfQojc21kX2hlbHAg aDMgeyBjb2xvcjogIzA3OTsgZm9udDogYm9sZCAxMnB4IEFyaWFsLCBzYW5zLXNlcmlmOyBs ZXR0ZXItc3BhY2luZzogMXB4OyBtYXJnaW46IDEwcHggMCAwO3RleHQtdHJhbnNmb3JtOiB1 cHBlcmNhc2U7IHRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fQojc21kX2hlbHAgaDQgeyBm b250OiBib2xkIDExcHggQXJpYWwsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxcHg7 IG1hcmdpbjogMTBweCAwIDAgO3RleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IH0KI3NtZF9o ZWxwIC5hdG5tIHsgZm9udC13ZWlnaHQ6Ym9sZDsgY29sb3I6IzMzZDsgfQojc21kX2hlbHAg Lm1hbmQgeyBiYWNrZ3JvdW5kOiNlZWU7IGJvcmRlcjoxcHggZG90dGVkICM5OTk7IH0KI3Nt ZF9oZWxwIHRhYmxlIHt3aWR0aDo5MCU7IHRleHQtYWxpZ246Y2VudGVyOyBwYWRkaW5nLWJv dHRvbToxZW07fQojc21kX2hlbHAgdGQsICNzbWRfaGVscCB0aCB7Ym9yZGVyOjFweCBzb2xp ZCAjOTk5OyBwYWRkaW5nOi41ZW0gMDt9CiNzbWRfaGVscCB1bCB7IGxpc3Qtc3R5bGUtdHlw ZTpzcXVhcmU7IH0KI3NtZF9oZWxwIC5yZXF1aXJlZCB7Y29sb3I6cmVkO30KI3NtZF9oZWxw IGxpIHsgbWFyZ2luOjVweCAyMHB4IDVweCAzMHB4OyB9CiNzbWRfaGVscCAuYnJlYWsgeyBt YXJnaW4tdG9wOjVweDsgfQo8L3N0eWxlPgo8IS0tIC0tLSBFTkQgUExVR0lOIENTUyAtLS0g LS0+CiI7czozOiJtZDUiO3M6MzI6Ijk4ZGMyMzBkZWZmM2NmZjU3N2Q3N2ZiMTEwYWMxOTE2 Ijt9